Merge branch 'debian-experimental'
diff --git a/ChangeLog b/ChangeLog
index 8d917a2..ec3395a 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,9 +1,3906 @@
-=== release 1.6.3 ===
+=== release 1.7.91 ===
 
-2016-01-20  Sebastian Dröge <slomo@coaxion.net>
+2016-03-15  Sebastian Dröge <slomo@coaxion.net>
 
 	* configure.ac:
-	  releasing 1.6.3
+	  releasing 1.7.91
+
+2016-03-12 15:44:54 +0000  Tim-Philipp Müller <tim@centricular.com>
+
+	* gst/mpegtsdemux/tsdemux.c:
+	  tsdemux: add video/x-h265 to template caps
+
+2016-03-12 03:00:14 +1100  Jan Schmidt <jan@centricular.com>
+
+	* gst/mpegtsdemux/mpegtsbase.c:
+	* gst/mpegtsdemux/tsdemux.c:
+	  mpegts: Don't leave freed programs in the hash table
+	  When the sub-class claims a program for later freeing, make
+	  sure it's not left in the hash table, or it can cause crashes on shutdown.
+	  Make sure tsdemux frees any program it has kept around at shutdown
+	  if it wasn't freed already.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=763503
+
+2016-03-11 17:34:03 +0200  Sreerenj Balachandran <sreerenj.balachandran@intel.com>
+
+	* gst/videoparsers/gsth265parse.c:
+	  videoparsers: h265: Fix segfault while transforming hevc to nal aligned bytestream
+	  Create temporary ParseFrame and copy the nal size buffer region
+	  for each nal unit like we did for h264.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=763494
+
+2016-03-11 10:08:28 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+	* sys/androidmedia/gstamc.c:
+	* sys/androidmedia/gstamcaudiodec.c:
+	* sys/androidmedia/gstamcvideodec.c:
+	* sys/androidmedia/gstamcvideoenc.c:
+	  amc: Correctly handle NULL input buffers
+	  https://bugzilla.gnome.org/show_bug.cgi?id=763401
+
+2016-03-11 10:00:39 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+	* sys/androidmedia/gstamc.c:
+	* sys/androidmedia/gstjniutils.c:
+	  amcvideodec: getOutputBuffers() returns a NULL array when a surface was configured
+	  So don't error out if it does.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=763401
+
+2016-03-11 01:40:39 +1100  Matthew Waters <matthew@centricular.com>
+
+	* ext/gl/gstgleffects.c:
+	* ext/gl/gstgleffects.h:
+	  gleffects; give each effect a unique long name and description
+	  Gives applications that scrape the factory details more detailed and unique
+	  details on the exact element.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=760566
+
+2016-03-10 17:46:05 +1100  Matthew Waters <matthew@centricular.com>
+
+	* gst-libs/gst/gl/gstglshader.c:
+	* gst-libs/gst/gl/gstglslstage.c:
+	  glshader: some compatibility changes for GL 1.4
+	  GL 1.4 (with GL_ARB_shader_objects) doesn't have glIsProgram or glIsShader
+	  equivalents.  As they are simply assertions, skip them when there isn't a
+	  valid function pointer.
+
+2016-03-10 00:29:41 +1100  Matthew Waters <matthew@centricular.com>
+
+	* ext/gl/gstglfilterapp.c:
+	  glfilterapp: update for the use of shaders
+	  Fixes black output when placed in pipelines (using the default drawing).
+	  https://bugzilla.gnome.org/show_bug.cgi?id=763365
+
+2016-03-10 00:27:53 +1100  Matthew Waters <matthew@centricular.com>
+
+	* gst-libs/gst/gl/gstglfilter.c:
+	* gst-libs/gst/gl/gstglfilter.h:
+	  glfilter: retrieve the shader attributes from the GL thread
+	  Otherwise we will receive bogus values
+	  https://bugzilla.gnome.org/show_bug.cgi?id=763365
+
+2016-03-10 00:24:48 +1100  Matthew Waters <matthew@centricular.com>
+
+	* tests/examples/gl/generic/cube/main.cpp:
+	* tests/examples/gl/generic/cubeyuv/main.cpp:
+	  gl/examples/cube*: choose opengl by default
+	  The examples don't work with any other GL API.
+	  Also fix the yuv example to not translate the cube out of the clipping area.
+
+2016-03-10 00:23:14 +1100  Matthew Waters <matthew@centricular.com>
+
+	* tests/examples/gl/gtk/fxtest/fxtest.c:
+	  gl/examples/fxtest: add needed glupload to the pipeline
+	  Fixes a negotiation failure in the example
+
+2016-03-07 13:04:08 +0100  Edward Hervey <edward@centricular.com>
+
+	* gst-libs/gst/codecparsers/gstmpegvideoparser.c:
+	* gst-libs/gst/codecparsers/gstmpegvideoparser.h:
+	* gst/videoparsers/gstmpegvideoparse.c:
+	  mpegvideoparser: Handle non-hierarchical profiles again
+	  This is a regression from since mpegvideoparser was switched to
+	  use the codecparsing library.
+	  The problem is that the high bit of the profile_and_level is used
+	  to specify non-hierarchical profiles and levels. Unfortunately we
+	  were discarding that information.
+	  Expose that escape bit, and use it in the element
+	  https://bugzilla.gnome.org/show_bug.cgi?id=763220
+
+2016-03-09 11:58:43 +0900  Vineeth TM <vineeth.tm@samsung.com>
+
+	* ext/gl/gstglimagesink.c:
+	  glimagesink: Fix window memory leak
+	  https://bugzilla.gnome.org/show_bug.cgi?id=763356
+
+2016-03-08 11:41:49 +0100  Edward Hervey <edward@centricular.com>
+
+	* gst/mpegtsdemux/tsdemux.c:
+	  tsdemux: Don't reset/recalculate segments with accurate seeks
+	  When dealing with accurate seeks, we must send out a segment which
+	  is exactly what is requested.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=763262
+
+2016-03-08 02:06:46 +1100  Matthew Waters <matthew@centricular.com>
+
+	* ext/gl/gstglvideomixer.c:
+	  glvideomixer: signal continuation in reset
+	  We want to iterate over all the pads, not just the first one.  Fix by returning
+	  TRUE in the GstAggregatorPadForeachFunc.
+	  Removes a GST_IS_GL_CONTEXT() assertion on shutdown with >2 inputs
+	  using gst-launch.
+
+2016-03-08 00:35:22 +1100  Matthew Waters <matthew@centricular.com>
+
+	* gst-libs/gst/gl/gstgldisplay.c:
+	* tests/check/libs/gstglcontext.c:
+	  gldisplay: make readding the same context a no-op
+	  With e38af2304427db908a16bbae0e60aa68be1ba5b5 returning the correct contexts,
+	  gst_gl_display_add_context() was susceptible to causing infinte loops when
+	  adding the same GstGLContext more than once.  Fix and add a test for
+	  gst_gl_display_add_context().
+	  Fixes glvideomixer gst-validate tests.
+
+2016-03-07 08:52:54 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+	* gst-libs/gst/gl/cocoa/gstgl_cocoa_private.h:
+	* gst-libs/gst/gl/cocoa/gstglcontext_cocoa.m:
+	* gst-libs/gst/gl/cocoa/gstglwindow_cocoa.m:
+	* gst-libs/gst/gl/eagl/gstglcontext_eagl.h:
+	* gst-libs/gst/gl/eagl/gstglcontext_eagl.m:
+	* gst-libs/gst/gl/eagl/gstglwindow_eagl.m:
+	  Revert "libgstgl: cocoa, eagl: don't marshal GL calls to the context thread"
+	  This reverts commit 797d6415dfd6e111efb2cab544958a67cbf22b17.
+	  We're frozen for 1.8.0 release and this change might have bigger impact.
+
+2016-03-07 16:03:25 +1100  Alessandro Decina <alessandro.d@gmail.com>
+
+	* gst-libs/gst/gl/cocoa/gstgl_cocoa_private.h:
+	* gst-libs/gst/gl/cocoa/gstglcontext_cocoa.m:
+	* gst-libs/gst/gl/cocoa/gstglwindow_cocoa.m:
+	* gst-libs/gst/gl/eagl/gstglcontext_eagl.h:
+	* gst-libs/gst/gl/eagl/gstglcontext_eagl.m:
+	* gst-libs/gst/gl/eagl/gstglwindow_eagl.m:
+	  libgstgl: cocoa, eagl: don't marshal GL calls to the context thread
+	  Execute GL calls without marshalling them to the context thread. In the cocoa
+	  and eagl backends calling gst_gl_context_activate is cheap and therefore calling
+	  it on the current thread and serializing GL calls with a per-context lock is
+	  more efficient (faster and has less overhead) than marshalling everything to the
+	  context thread.
+	  This optimization cuts a large overhead in g_poll (continuously waking up the
+	  context thread) and in g_mutex_*/g_cond_* (waiting for results from the context
+	  thread).
+
+2016-03-05 17:16:24 +0100  Mark Nauwelaerts <mnauw@users.sourceforge.net>
+
+	* gst-libs/gst/gl/gstgldisplay.c:
+	  gldisplay: really retrieve glcontext for a specific thread
+	  When requesting a glcontext (regardless of thread), the result was correct.
+	  However, when requesting current glcontext on a specific thread, it could
+	  come up with a glcontext active on another thread.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=763168
+
+2016-03-06 19:35:38 +1100  Matthew Waters <matthew@centricular.com>
+
+	* gst-libs/gst/gl/gstglapi.c:
+	* gst-libs/gst/gl/gstglapi.h:
+	* gst-libs/gst/gl/gstglbasefilter.c:
+	* gst-libs/gst/gl/gstglbasefilter.h:
+	* gst-libs/gst/gl/gstglbufferpool.c:
+	* gst-libs/gst/gl/gstglcolorconvert.c:
+	* gst-libs/gst/gl/gstglcontext.h:
+	* gst-libs/gst/gl/gstgldebug.c:
+	* gst-libs/gst/gl/gstgldebug.h:
+	* gst-libs/gst/gl/gstgldisplay.h:
+	* gst-libs/gst/gl/gstglshader.c:
+	* gst-libs/gst/gl/gstglsl.c:
+	* gst-libs/gst/gl/gstglslstage.c:
+	* gst-libs/gst/gl/gstglslstage.h:
+	* gst-libs/gst/gl/gstglupload.c:
+	* gst-libs/gst/gl/gstglupload.h:
+	* gst-libs/gst/gl/gstglutils.c:
+	* gst-libs/gst/gl/gstglviewconvert.c:
+	  gl: misc docs fixes/additions
+
+2016-03-06 19:32:21 +1100  Matthew Waters <matthew@centricular.com>
+
+	* gst-libs/gst/gl/gstgl_enums.h:
+	* gst-libs/gst/gl/gstglbasememory.c:
+	* gst-libs/gst/gl/gstglbasememory.h:
+	* gst-libs/gst/gl/gstglbuffer.c:
+	* gst-libs/gst/gl/gstglbuffer.h:
+	* gst-libs/gst/gl/gstglformat.c:
+	* gst-libs/gst/gl/gstglformat.h:
+	* gst-libs/gst/gl/gstglmemory.c:
+	* gst-libs/gst/gl/gstglmemory.h:
+	* gst-libs/gst/gl/gstglmemorypbo.c:
+	  gl*memory: document new functionality and objects
+
+2016-03-06 19:23:06 +1100  Matthew Waters <matthew@centricular.com>
+
+	* docs/libs/gst-plugins-bad-libs.types:
+	  docs: add new GL api to .types file for type/signal introspection
+
+2016-03-06 19:22:31 +1100  Matthew Waters <matthew@centricular.com>
+
+	* docs/libs/Makefile.am:
+	  docs: ignore some private GL headers
+
+2016-03-06 19:18:54 +1100  Matthew Waters <matthew@centricular.com>
+
+	* docs/libs/gst-plugins-bad-libs-docs.sgml:
+	* docs/libs/gst-plugins-bad-libs-sections.txt:
+	  docs/gl: add gl functions/structs from -unused into the docs
+
+2016-03-05 19:48:45 +0100  Mark Nauwelaerts <mnauw@users.sourceforge.net>
+
+	* gst-libs/gst/gl/gstglfilter.c:
+	  glfilter: handle some more unfixed fields when fixating caps
+
+2016-03-05 11:38:46 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+	* tests/examples/gtk/Makefile.am:
+	  gtk: examples: #define GST_USE_UNSTABLE_API and link with X11_LIBS
+	  X11_LIBS is needed for XInitThreads() and without the #define we get
+	  warnings about the GL API being still unstable.
+
+2016-03-02 19:32:13 +0900  Justin Kim <justin.kim@collabora.com>
+
+	* sys/androidmedia/gst-androidcamera.c:
+	  androidmedia: Remove unused file
+	  ahcsrc is registered by gstamc.c
+	  https://bugzilla.gnome.org/show_bug.cgi?id=763098
+
+2016-02-17 09:36:15 -0800  Martin Kelly <martin@surround.io>
+
+	* sys/androidmedia/gstamc.c:
+	  amc: properly deinit when ahcsrc register fails
+	  In the androidmedia plugin_init, we initialize various resources on the
+	  Android device. If anything fails during this series of initializations,
+	  we need to deinitialize any initializations that already occurred.
+	  However, we don't do so if we fail to register the ahcsrc element. Fix
+	  this.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=763065
+
+2016-02-18 11:00:50 -0800  Martin Kelly <martin@surround.io>
+
+	* sys/androidmedia/gst-android-hardware-camera.c:
+	  ahc: correct error message
+	  The error message is specific to only one of the failure cases and is
+	  misleading in the others. Correct it to be more generic and cover all
+	  the failure cases.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=763065
+
+2016-02-16 11:45:01 -0800  Martin Kelly <martin@surround.io>
+
+	* sys/androidmedia/gst-android-hardware-camera.c:
+	  ahc: remove unneeded #include <stdio.h>
+	  https://bugzilla.gnome.org/show_bug.cgi?id=763065
+
+2016-02-18 16:00:18 -0800  Martin Kelly <martin@surround.io>
+
+	* sys/androidmedia/gstahcsrc.c:
+	  ahc: typo fix
+	  https://bugzilla.gnome.org/show_bug.cgi?id=763065
+
+2016-03-03 22:15:07 -0500  Joe Gorse <jhgorse@gmail.com>
+
+	* ext/hls/Makefile.am:
+	  hls: Add OPENSSL_CFLAGS to CFLAGS
+	  https://bugzilla.gnome.org/show_bug.cgi?id=763079
+
+2016-03-03 19:45:43 -0500  Nicolas Dufresne <nicolas.dufresne@collabora.com>
+
+	* gst-libs/gst/gl/gstglbasememory.c:
+	  glbasememory: Don't change maxsize at run-time
+	  Maxsize is initialized once and should never change. Allocating data
+	  should have no impact on the selected max size for this memory. This
+	  causing memory map failure as the maxsize would become smaller then
+	  size. This happened when using direct rendering in avviddec on GL that
+	  does not support PBO transfer.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=763045
+
+2016-03-01 18:22:37 +0300  Sergey Borovkov <sergey.borovkov@wireload.net>
+
+	* ext/qt/qtitem.cc:
+	  qml: Fix leak of the OpenGL contexts
+	  [Matthew Waters]: add NULL checks before unreffing
+	  https://bugzilla.gnome.org/show_bug.cgi?id=762999
+
+2016-02-29 14:24:46 -0800  Reynaldo H. Verdejo Pinochet <reynaldo@osg.samsung.com>
+
+	* ext/vulkan/vksink.c:
+	  vksink: fix spelling on failed _ensure_data() error message
+
+2016-03-02 21:46:44 +0200  Vivia Nikolaidou <vivia@ahiru.eu>
+
+	* ext/mpeg2enc/gstmpeg2enc.cc:
+	  mpeg2enc: Provide format as a string instead of a char to gst_structure_new
+	  The format was provided as 'I420' instead of "I420", causing a crash.
+
+2015-01-20 16:20:10 +0100  Aurélien Zanelli <aurelien.zanelli@parrot.com>
+
+	* gst/mpegtsdemux/mpegtspacketizer.c:
+	  mpegtspacketizer: handle early PTS conversion when a group has been found
+	  In some cases, the PTS might be smaller than the first observed PCR
+	  value which causes element to apply wraparound leading to bogus
+	  timestamp. To solve this, we only apply it if the PTS-PCR difference is
+	  greater that 1 second to be sure that it's a real wraparound.
+	  Moreover, using unsigned 32 bits values to handle wrapover could end up
+	  with bogus value, so it use pts value to handle it.
+	  Also, convert pcr time to gst time before comparing it to pts.
+	  Since refpcr is expressed in PCR time base while pts is expressed in GStreamer
+	  time.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=743259
+
+2016-03-02 10:41:17 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+	* gst-libs/gst/adaptivedemux/gstadaptivedemux.c:
+	  adaptivedemux: Fix REMOVE_SNAP_FLAGS() macro
+	  !(flag1 | flag2 | flag3) is always evaluation to 0. ~ was meant here
+	  instead of !.
+	  CID 1352032.
+
+=== release 1.7.90 ===
+
+2016-03-01 18:23:36 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+	* ChangeLog:
+	* NEWS:
+	* RELEASE:
+	* configure.ac:
+	* docs/plugins/gst-plugins-bad-plugins.hierarchy:
+	* docs/plugins/inspect/plugin-accurip.xml:
+	* docs/plugins/inspect/plugin-adpcmdec.xml:
+	* docs/plugins/inspect/plugin-adpcmenc.xml:
+	* docs/plugins/inspect/plugin-aiff.xml:
+	* docs/plugins/inspect/plugin-asfmux.xml:
+	* docs/plugins/inspect/plugin-assrender.xml:
+	* docs/plugins/inspect/plugin-audiomixer.xml:
+	* docs/plugins/inspect/plugin-audiovisualizers.xml:
+	* docs/plugins/inspect/plugin-autoconvert.xml:
+	* docs/plugins/inspect/plugin-bayer.xml:
+	* docs/plugins/inspect/plugin-bz2.xml:
+	* docs/plugins/inspect/plugin-camerabin.xml:
+	* docs/plugins/inspect/plugin-chromaprint.xml:
+	* docs/plugins/inspect/plugin-coloreffects.xml:
+	* docs/plugins/inspect/plugin-curl.xml:
+	* docs/plugins/inspect/plugin-dataurisrc.xml:
+	* docs/plugins/inspect/plugin-debugutilsbad.xml:
+	* docs/plugins/inspect/plugin-dtsdec.xml:
+	* docs/plugins/inspect/plugin-dvb.xml:
+	* docs/plugins/inspect/plugin-dvbsuboverlay.xml:
+	* docs/plugins/inspect/plugin-dvdspu.xml:
+	* docs/plugins/inspect/plugin-faad.xml:
+	* docs/plugins/inspect/plugin-festival.xml:
+	* docs/plugins/inspect/plugin-fieldanalysis.xml:
+	* docs/plugins/inspect/plugin-flite.xml:
+	* docs/plugins/inspect/plugin-frei0r.xml:
+	* docs/plugins/inspect/plugin-gaudieffects.xml:
+	* docs/plugins/inspect/plugin-gdp.xml:
+	* docs/plugins/inspect/plugin-geometrictransform.xml:
+	* docs/plugins/inspect/plugin-gmedec.xml:
+	* docs/plugins/inspect/plugin-gsm.xml:
+	* docs/plugins/inspect/plugin-gstsiren.xml:
+	* docs/plugins/inspect/plugin-hls.xml:
+	* docs/plugins/inspect/plugin-id3tag.xml:
+	* docs/plugins/inspect/plugin-inter.xml:
+	* docs/plugins/inspect/plugin-interlace.xml:
+	* docs/plugins/inspect/plugin-jpegformat.xml:
+	* docs/plugins/inspect/plugin-mimic.xml:
+	* docs/plugins/inspect/plugin-mms.xml:
+	* docs/plugins/inspect/plugin-modplug.xml:
+	* docs/plugins/inspect/plugin-mpeg2enc.xml:
+	* docs/plugins/inspect/plugin-mpegpsdemux.xml:
+	* docs/plugins/inspect/plugin-mpegpsmux.xml:
+	* docs/plugins/inspect/plugin-mpegtsdemux.xml:
+	* docs/plugins/inspect/plugin-mpegtsmux.xml:
+	* docs/plugins/inspect/plugin-mplex.xml:
+	* docs/plugins/inspect/plugin-ofa.xml:
+	* docs/plugins/inspect/plugin-openal.xml:
+	* docs/plugins/inspect/plugin-pcapparse.xml:
+	* docs/plugins/inspect/plugin-pnm.xml:
+	* docs/plugins/inspect/plugin-rawparse.xml:
+	* docs/plugins/inspect/plugin-removesilence.xml:
+	* docs/plugins/inspect/plugin-resindvd.xml:
+	* docs/plugins/inspect/plugin-rfbsrc.xml:
+	* docs/plugins/inspect/plugin-rtmp.xml:
+	* docs/plugins/inspect/plugin-schro.xml:
+	* docs/plugins/inspect/plugin-sdp.xml:
+	* docs/plugins/inspect/plugin-segmentclip.xml:
+	* docs/plugins/inspect/plugin-shm.xml:
+	* docs/plugins/inspect/plugin-smooth.xml:
+	* docs/plugins/inspect/plugin-soundtouch.xml:
+	* docs/plugins/inspect/plugin-spandsp.xml:
+	* docs/plugins/inspect/plugin-speed.xml:
+	* docs/plugins/inspect/plugin-subenc.xml:
+	* docs/plugins/inspect/plugin-videoparsersbad.xml:
+	* docs/plugins/inspect/plugin-voaacenc.xml:
+	* docs/plugins/inspect/plugin-voamrwbenc.xml:
+	* docs/plugins/inspect/plugin-waylandsink.xml:
+	* docs/plugins/inspect/plugin-y4mdec.xml:
+	* docs/plugins/inspect/plugin-zbar.xml:
+	* gst-plugins-bad.doap:
+	* win32/common/config.h:
+	  Release 1.7.90
+
+2016-03-01 17:10:28 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+	* po/af.po:
+	* po/az.po:
+	* po/ca.po:
+	* po/cs.po:
+	* po/da.po:
+	* po/de.po:
+	* po/el.po:
+	* po/en_GB.po:
+	* po/eo.po:
+	* po/es.po:
+	* po/eu.po:
+	* po/fi.po:
+	* po/gl.po:
+	* po/hr.po:
+	* po/hu.po:
+	* po/id.po:
+	* po/it.po:
+	* po/ja.po:
+	* po/ky.po:
+	* po/lt.po:
+	* po/lv.po:
+	* po/mt.po:
+	* po/nb.po:
+	* po/or.po:
+	* po/pl.po:
+	* po/pt_BR.po:
+	* po/ro.po:
+	* po/ru.po:
+	* po/sk.po:
+	* po/sl.po:
+	* po/sq.po:
+	* po/sr.po:
+	* po/sv.po:
+	* po/tr.po:
+	* po/uk.po:
+	* po/vi.po:
+	* po/zh_CN.po:
+	  Update .po files
+
+2016-03-01 16:53:50 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+	* po/bg.po:
+	* po/fr.po:
+	* po/nl.po:
+	  po: Update translations
+
+2016-02-29 12:35:58 +0200  Sreerenj Balachandran <sreerenj.balachandran@intel.com>
+
+	* gst/videoparsers/gsth264parse.c:
+	  videoparsers: h264: Disable passthorugh mode enabling
+	  Enabling passthorugh mode is causing multiple issue:
+	  For nal aligned multiresoluton streams, passthrough mode
+	  make h264parse unable to advertise the new resoultions.
+	  Also causing issues while parsing MVC streams which have two
+	  separate layers (base-view and non-base-view).
+	  This fix is only a temporary workaround.
+	  For MVC, proper fixes needed in many places:
+	  (handle prefix nal unit, handle non-base-view slice nal extension,
+	  fix the picture_start detection for multi-layer-mvc streams etc)
+	  https://bugzilla.gnome.org/show_bug.cgi?id=758656
+
+2016-02-29 11:53:19 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+	* gst/sdp/gstsdpdemux.c:
+	  sdpdemux: Set caps to application/x-rtp instead of application/x-unknown as returned by the SDP helpers
+	  The SDP helpers can't know if this is going to be RTP, SRTP, or ....
+	  https://bugzilla.gnome.org/show_bug.cgi?id=762860
+
+2016-02-29 11:51:28 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+	* gst/sdp/gstsdpdemux.c:
+	  sdpdemux: Add pads with the correct names in case an rtpbin is used
+	  They're supposed to be stream_%u and not recv_rtp_src_%u_%u_%u.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=762860
+
+2016-02-29 10:38:32 +0900  Vineeth TM <vineeth.tm@samsung.com>
+
+	* ext/vulkan/vkswapper.c:
+	* ext/vulkan/vkutils.c:
+	  vkswapper/vkutils: Fix gerror memory leak
+	  https://bugzilla.gnome.org/show_bug.cgi?id=762842
+
+2016-02-29 10:37:11 +0900  Vineeth TM <vineeth.tm@samsung.com>
+
+	* ext/vulkan/vkdevice.c:
+	  vkdevice: Fix duplicate assignment of queue variable
+	  https://bugzilla.gnome.org/show_bug.cgi?id=762842
+
+2016-02-29 10:33:45 +0900  Vineeth TM <vineeth.tm@samsung.com>
+
+	* ext/vulkan/vksink.c:
+	  vksink: Fix GError memory leak
+	  https://bugzilla.gnome.org/show_bug.cgi?id=762842
+
+2016-02-28 14:06:14 +0000  Tim-Philipp Müller <tim@centricular.com>
+
+	* win32/common/libgstgl.def:
+	  win32: update exports for new libgstgl function
+
+2016-02-28 10:12:01 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+	* sys/androidmedia/gstamcvideodec.c:
+	  amcvideodec: When outputting on a surface, accept all color formats
+	  We don't have to understand them, we handle them as a GL texture.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=762792
+
+2016-02-26 18:17:37 -0300  Thiago Santos <thiagoss@osg.samsung.com>
+
+	* gst-libs/gst/adaptivedemux/gstadaptivedemux.c:
+	* tests/check/elements/dash_demux.c:
+	  adaptivedemux: handle snap seeking without setting any position
+	  When the start_type is GST_SEEK_TYPE_NONE for a forward seek
+	  (or stop_type for a reverse) is not set on a snap seeking operation,
+	  the element should use the current position and then snap as requested.
+	  Also fixes uninitialized variable complaint by clang about
+	  'ts' variable.
+
+2016-02-26 17:31:44 -0300  Thiago Santos <thiagoss@osg.samsung.com>
+
+	* ext/dash/gstmpdparser.c:
+	  dashdemux: sync index and the selected chunk when seeking
+	  Otherwise the chunk selected isn't matched to the index and
+	  the timing will be different, causing it to actually start
+	  from a different position
+
+2016-02-26 12:41:13 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+	* common:
+	  Automatic update of common submodule
+	  From a253974 to 6f2d209
+
+2016-02-17 20:13:21 +1100  Matthew Waters <matthew@centricular.com>
+
+	* gst-libs/gst/gl/egl/gsteglimagememory.c:
+	  eglimagememory: add compatibility definitions for EGL dmabuf
+	  e.g. the RPi doesn't have them defined
+
+2016-02-26 00:35:30 +0000  Tim-Philipp Müller <tim@centricular.com>
+
+	* Makefile.am:
+	* ext/opus/Makefile.am:
+	* ext/opus/gstopus.c:
+	  opus: rename plugin to opusparse for the time being
+	  Until we fix it up and get rid of the opus dependency and
+	  move it elsewhere too.
+
+2016-02-19 00:38:33 +0000  Tim-Philipp Müller <tim@centricular.com>
+
+	* docs/plugins/gst-plugins-bad-plugins-docs.sgml:
+	* docs/plugins/gst-plugins-bad-plugins-sections.txt:
+	* docs/plugins/inspect/plugin-opus.xml:
+	* ext/opus/Makefile.am:
+	* ext/opus/gstopus.c:
+	* ext/opus/gstopuscommon.c:
+	* ext/opus/gstopuscommon.h:
+	* ext/opus/gstopusdec.c:
+	* ext/opus/gstopusdec.h:
+	* ext/opus/gstopusenc.c:
+	* ext/opus/gstopusenc.h:
+	* tests/check/Makefile.am:
+	* tests/check/elements/.gitignore:
+	* tests/check/elements/opus.c:
+	  opus: remove Opus encoder/decoder, moved to -base
+	  https://bugzilla.gnome.org/show_bug.cgi?id=756282
+
+2016-02-26 08:34:11 +1100  Matthew Waters <matthew@centricular.com>
+
+	* gst-libs/gst/gl/cocoa/gstglcaopengllayer.m:
+	* gst-libs/gst/gl/gstglcontext.c:
+	* gst-libs/gst/gl/gstglcontext.h:
+	  glcontext: add a method to add a context to another share group
+	  Intended for use with wrapped contexts that are created shared with gst's
+	  gl contexts in order to manage the internal sharegroup state correctly.
+	  e.g. with caopengllayer (which is used in glimagesink and caopengllayersink
+	  on OS X), we create a CGL context from the gst context and the sharing state
+	  was not being correctly set on either GL context and gst_gl_context_is_shared()
+	  was always returning FALSE.
+	  With 11fb4fff80b63b9d67a731d4bb238b6c0a29d774 only flushing with multiple
+	  shared contexts, the required flush was not occuring causing screen
+	  corruption or stuttering.
+	  Note: this didn't affect GST_GL_API=opengl pipelines
+	  https://bugzilla.gnome.org/show_bug.cgi?id=762620
+
+2016-02-17 15:20:47 +0000  Tim-Philipp Müller <tim@centricular.com>
+
+	* docs/plugins/gst-plugins-bad-plugins-docs.sgml:
+	* docs/plugins/gst-plugins-bad-plugins-sections.txt:
+	* docs/plugins/gst-plugins-bad-plugins.hierarchy:
+	* docs/plugins/inspect/plugin-opus.xml:
+	* ext/opus/Makefile.am:
+	* ext/opus/gstopus.c:
+	* ext/opus/gstrtpopusdepay.c:
+	* ext/opus/gstrtpopusdepay.h:
+	* ext/opus/gstrtpopuspay.c:
+	* ext/opus/gstrtpopuspay.h:
+	  opus: remove Opus RTP elements, they have moved to -good
+	  https://bugzilla.gnome.org/show_bug.cgi?id=756282
+
+2016-01-18 08:50:34 +0000  Alex Ashley <alex.ashley@youview.com>
+
+	* tests/check/elements/hls_demux.c:
+	  hlsdemux: tests: pass test name into test setup function
+	  All hlsdemux tests create a GstStructure called "state" that can be used
+	  by test cases to store information during a test. The name of this
+	  structure is arbitrary. When the code was written, the intention was
+	  to use the name of the test, to aid debugging. However, during
+	  development this was lost, so that the state GstStructure is always
+	  given the name "setup_test_variables".
+	  This commit changes this so that the name of the test is used.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=762684
+
+2016-02-23 12:42:19 -0300  Thiago Santos <thiagoss@osg.samsung.com>
+
+	* tests/check/elements/compositor.c:
+	  tests: compositor: drop special case for valgrind timeout
+	  The default one is 6 minutes, the test was using 5 minutes so just
+	  resort to using the default.
+	  For the non-valgrind test also use the default 20 secs instead of
+	  reducing it to 6s. No real reason to set a custom value here.
+
+2016-02-23 12:17:59 -0300  Thiago Santos <thiagoss@osg.samsung.com>
+
+	* tests/check/elements/compositor.c:
+	  tests: compositor: add tests for caps queries
+	  Verifies that proper caps are returned based on what downstream
+	  restricts.
+
+2016-02-18 10:57:51 -0300  Thiago Santos <thiagoss@osg.samsung.com>
+
+	* gst-libs/gst/video/gstvideoaggregator.c:
+	* tests/check/elements/compositor.c:
+	  videoaggregator: fix caps queries to allow proper renegotiation
+	  When caps are already negotiated it should be possible to
+	  select formats other than the one that was negotiated. If downstream
+	  allows alpha video caps and it has already negotiated to a non-alpha
+	  format, caps queries should still return the alpha caps as a possible
+	  format as caps renegotiation can happen.
+	  Includes tests (for compositor) to check that caps queries done after
+	  a caps has been negotiated returns complete results
+	  https://bugzilla.gnome.org/show_bug.cgi?id=757610
+
+2016-02-24 17:07:17 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+	* sys/applemedia/vtdec.c:
+	  vtdec: Negotiate the decoder in set_format() already
+	  Don't wait until later, we want to know here if the codec can be opened or not
+	  for the requested format. This was removed (accidentially?) by
+	  119e09eac315f79ac2cf45b4441ad1d932130614
+	  Without this decodebin has no way to switch to a different decoder if this one
+	  does not work.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=762613
+
+2016-02-25 11:34:40 +0200  Joe Gorse <jhgorse@gmail.com>
+
+	* sys/applemedia/avfvideosrc.m:
+	  avfvideosrc: Frame durations as CTime to the API, not double
+	  Newer iOS seems to automatically convert, older iOS/OSX just crashes.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=762575
+
+2016-02-24 23:48:19 +1100  Matthew Waters <matthew@centricular.com>
+
+	* sys/nvenc/gstnvbaseenc.c:
+	  nvenc: release the frames and  list when searching for an output buffer
+	  Fixes a massive leak in:
+	  videotestsrc ! nvh264enc ! fakesink
+
+2016-02-23 23:10:20 +1100  Matthew Waters <matthew@centricular.com>
+
+	* ext/qt/gstqtsink.cc:
+	* ext/qt/qtitem.cc:
+	  qt: use a static_cast instead of dynamic one
+	  The dynamic_cast is a little but of overkill as the app will still crash if it
+	  fails in the later g_assert.
+	  Allows compilation with -fno-rtti
+	  https://bugzilla.gnome.org/show_bug.cgi?id=762526
+
+2016-02-24 10:45:17 +0800  Wang Xin-yu (王昕宇) <comicfans44@gmail.com>
+
+	* ext/gl/gstglmosaic.c:
+	* ext/gl/gstglstereomix.c:
+	* ext/gl/gstglvideomixer.c:
+	  glmixer: iterator didn't advance in continue statement
+	  Leading to a deadlock.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=760873
+
+2016-02-23 18:17:42 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+	* gst/dataurisrc/gstdataurisrc.c:
+	  dataurisrc: Don't assume that get_current_caps() returns non-NULL caps after has_current_caps()
+	  Remove calls to gst_pad_has_current_caps() which then go on to call
+	  gst_pad_get_current_caps() as the caps can go to NULL in between. Instead just
+	  use gst_pad_get_current_caps() and check for NULL.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=759539
+
+2016-02-23 18:13:37 +0200  Dave Craig <dcraig@brightsign.biz>
+
+	* ext/opencv/gstdisparity.cpp:
+	  disparity: Don't assume that get_current_caps() returns non-NULL caps after has_current_caps()
+	  Remove calls to gst_pad_has_current_caps() which then go on to call
+	  gst_pad_get_current_caps() as the caps can go to NULL in between. Instead just
+	  use gst_pad_get_current_caps() and check for NULL.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=759539
+
+2016-02-23 10:49:40 +0000  Florin Apostol <florin.apostol@oregan.net>
+
+	* ext/dash/gstdashdemux.c:
+	  dashdemux: correctly handle an HTTP-XSDATE that is exactly the size of the date string
+	  The code in the gst_dash_demux_parse_http_xsdate() was trying to
+	  handle the case where the string is not null terminated by resizing
+	  the buffer and appending a zero byte. This does not work if the buffer
+	  is exactly the length of the string because the gst_buffer_resize()
+	  function does not re-allocate the buffer, it just changes its size.
+	  If a buffer is passed to gst_dash_demux_parse_http_xsdate() that is
+	  exactly the length of the string, the function fails with an assert
+	  failure in gst_buffer_resize().
+	  https://bugzilla.gnome.org/show_bug.cgi?id=762148
+
+2016-02-23 11:59:52 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+	* docs/plugins/gst-plugins-bad-plugins-docs.sgml:
+	* docs/plugins/gst-plugins-bad-plugins-sections.txt:
+	  docs: Add audiointerleave
+
+2016-02-22 10:21:47 +0100  Peter Seiderer <ps.report@gmx.net>
+
+	* sys/fbdev/gstfbdevsink.c:
+	  fbdevsink: fix bytes per pixel calculation
+	  Simple pipeline
+	  $ gst-launch-1.0 videotestsrc ! fbdevsink
+	  crashes with SIGSEGV in case the frambuffer xres is smaller
+	  than the virtual xres resolution, e.g.:
+	  $ fbset
+	  mode "800x480-0"
+	  # D: 0.000 MHz, H: 0.000 kHz, V: 0.000 Hz
+	  geometry 800 480 1920 1200 16
+	  timings 0 0 0 0 0 0 0
+	  accel true
+	  rgba 5/11,6/5,5/0,0/0
+	  endmode
+	  Debug:
+	  $ gdb gst-launch-1.0
+	  (gdb) run videotestsrc ! fbdevsink
+	  (gdb) where
+	  #0  0xb6bd2d24 in __memcpy_neon ()
+	  at ../sysdeps/arm/armv7/multiarch/memcpy_impl.S:591
+	  #1  0xb69b04e8 in gst_fbdevsink_show_frame (videosink=0x10a3378,
+	  buf=0xb5c08838) at gstfbdevsink.c:269
+	  #2  0xb69e88c4 in gst_base_sink_do_preroll (sink=sink@entry=0x10a3378,
+	  obj=0xb5c08838, obj@entry=0xa0) at gstbasesink.c:2281
+	  #3  0xb69e92bc in gst_base_sink_do_sync (basesink=basesink@entry=0x10a3378,
+	  obj=0xa0, obj@entry=0xb5c08838, late=0x0, late@entry=0xb6548ba0,
+	  step_end=0x140, step_end@entry=0xb6548ba4) at gstbasesink.c:2500
+	  #4  0xb69ea67c in gst_base_sink_chain_unlocked (
+	  basesink=basesink@entry=0x10a3378, obj=0x0, obj@entry=0xb5c08838,
+	  is_list=is_list@entry=0, pad=<optimized out>) at gstbasesink.c:3486
+	  #5  0xb69ec1c0 in gst_base_sink_chain_main (basesink=0x10a3378,
+	  pad=<optimized out>, obj=0xb5c08838, is_list=0) at gstbasesink.c:3647
+	  #6  0xb6eb5b10 in gst_pad_chain_data_unchecked (pad=0x10a6170,
+	  type=<optimized out>, data=0xb5c08838) at gstpad.c:4086
+	  #7  0xb6eb7a34 in gst_pad_push_data (pad=pad@entry=0x10a6020,
+	  type=type@entry=4112, data=0xb5c08838) at gstpad.c:4338
+	  #8  0xb6ebf344 in gst_pad_push (pad=pad@entry=0x10a6020,
+	  buffer=<optimized out>) at gstpad.c:4454
+	  #9  0xb69f22f0 in gst_base_src_loop (pad=0x10a6020) at gstbasesrc.c:2845
+	  #10 0xb6eeddfc in gst_task_func (task=0x10a8828) at gsttask.c:331
+	  #11 0xb6d485a0 in g_thread_pool_thread_proxy (data=<optimized out>)
+	  at gthreadpoQuit
+	  (gdb) frame 1
+	  #1  0xb69b04e8 in gst_fbdevsink_show_frame (videosink=0x10a3378,
+	  buf=0xb5c08838) at gstfbdevsink.c:269
+	  269     gstfbdevsink.c: No such file or directory.
+	  (gdb) p fbdevsink
+	  $1 = (GstFBDEVSink *) 0x10a3378
+	  (gdb) p *fbdevsink
+	  $2 = {videosink = {element = {element = {object = {object = {
+	  g_type_instance = {g_class = 0x10a2d60}, ref_count = 3,
+	  qdata = 0x0}, lock = {p = 0x0, i = {0, 0}},
+	  name = 0x10a2f30 "fbdevsink0", parent = 0x10a70a0, flags = 32,
+	  control_bindings = 0x0, control_rate = 100000000,
+	  last_sync = 18446744073709551615, _gst_reserved = 0x0},
+	  state_lock = {p = 0x109f9a8, i = {0, 0}}, state_cond = {p = 0x0, i = {
+	  3, 0}}, state_cookie = 2, target_state = GST_STATE_PAUSED,
+	  current_state = GST_STATE_READY, next_state = GST_STATE_PAUSED,
+	  pending_state = GST_STATE_PAUSED,
+	  last_return = GST_STATE_CHANGE_ASYNC, bus = 0x108bcb8, clock = 0x0,
+	  base_time = 0, start_time = 0, numpads = 1, pads = 0x109cc20,
+	  numsrcpads = 0, srcpads = 0x0, numsinkpads = 1, sinkpads = 0x109cc30,
+	  pads_cookie = 1, _gst_reserved = {0x0, 0x0, 0x0, 0x0}},
+	  sinkpad = 0x10a6170, pad_mode = GST_PAD_MODE_PUSH, offset = 0,
+	  can_activate_pull = 0, can_activate_push = 1, preroll_lock = {p = 0x1,
+	  i = {1, 0}}, preroll_cond = {p = 0x0, i = {0, 0}}, eos = 0,
+	  need_preroll = 1, have_preroll = 0, playing_async = 1,
+	  have_newsegment = 1, segment = {flags = GST_SEGMENT_FLAG_NONE, rate = 1,
+	  applied_rate = 1, format = GST_FORMAT_TIME, base = 0, offset = 0,
+	  start = 0, stop = 18446744073709551615, time = 0, position = 33333333,
+	  duration = 18446744073709551615, _gst_reserved = {0x0, 0x0, 0x0,
+	  0x0}}, clock_id = 0x0, sync = 1, flushing = 0, running = 0,
+	  max_lateness = 20000000, priv = 0x10a3188, _gst_reserved = {
+	  0x0 <repeats 20 times>}}, width = 0, height = 0, priv = 0x10a3180,
+	  _gst_reserved = {0x0, 0x0, 0x0, 0x0}}, fixinfo = {
+	  id = '\000' <repeats 15 times>, smem_start = 1078984704,
+	  smem_len = 4608000, type = 0, type_aux = 0, visual = 2, xpanstep = 1,
+	  ypanstep = 1, ywrapstep = 0, line_length = 3840, mmio_start = 0,
+	  mmio_len = 0, accel = 0, capabilities = 0, reserved = {0, 0}}, varinfo = {
+	  xres = 800, yres = 480, xres_virtual = 1920, yres_virtual = 1200,
+	  xoffset = 0, yoffset = 0, bits_per_pixel = 16, grayscale = 0, red = {
+	  offset = 11, length = 5, msb_right = 0}, green = {offset = 5,
+	  length = 6, msb_right = 0}, blue = {offset = 0, length = 5,
+	  msb_right = 0}, transp = {offset = 0, length = 0, msb_right = 0},
+	  nonstd = 0, activate = 0, height = 4294967295, width = 4294967295,
+	  accel_flags = 1, pixclock = 0, left_margin = 0, right_margin = 0,
+	  upper_margin = 0, lower_margin = 0, hsync_len = 0, vsync_len = 0,
+	  sync = 0, vmode = 0, rotate = 0, colorspace = 0, reserved = {0, 0, 0, 0}},
+	  fd = 5,
+	  framebuffer = 0xb654a000 <error: Cannot access memory at address 0xb654a000>, device = 0x10a38d8 "/dev/fb0", width = 320, height = 240, cx = 240, cy = 120,
+	  linelen = 1280, lines = 240, bytespp = 4, fps_n = 30, fps_d = 1}
+	  (gdb) p map
+	  $3 = {memory = 0xb5d24008, flags = GST_MAP_READ,
+	  data = 0xb5d24058 '\377' <repeats 90 times>, "\340\377\340\377\340\377\340\377\340\377\340\377\340\377\340\377\340\377\340\377\340\377\340\377\340\377\340\377\340\377\340\377\340\377\340\377\340\377\340\377\340\377\340\377\340\377\340\377\340\377\340\377\340\377\340\377\340\377\340\377\340\377\340\377\340\377\340\377\340\377\340\377\340\377\340\377\340\377\340\377\340\377\340\377\340\377\340\377\340\377\340\377\377\a\377\a\377\a\377\a\377\a\377\a\377\a\377\a\377\a"...,
+	  size = 153600, maxsize = 153603, user_data = {0x0,
+	  0xb69e3ba4 <gst_base_sink_set_last_buffer_unlocked+92>, 0x10a3378, 0x0},
+	  _gst_reserved = {0x1, 0x10a3378, 0xb6f50dd8 <_gst_debug_min>, 0xb5c08838}}
+	  (gdb) p i
+	  $4 = 121
+	  Fix this by changing the fbdevsink->bytespp calculation using
+	  the frame buffer xres_virtual size instead of xres.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=762482
+
+2016-02-22 12:53:00 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+	* docs/libs/gst-plugins-bad-libs-sections.txt:
+	* gst-libs/gst/player/gstplayer-video-overlay-video-renderer.c:
+	* gst-libs/gst/player/gstplayer-video-overlay-video-renderer.h:
+	* win32/common/libgstplayer.def:
+	  player: Expose more GstVideoOverlay API in the GstPlayerVideoOverlayVideoRenderer
+	  Expose the expose() and set_render_rectangle() methods. These are useful for
+	  proper functioning of the video overlay in various situations and toolkits.
+
+2016-02-22 21:03:14 +1100  Matthew Waters <matthew@centricular.com>
+
+	* ext/gl/gstglstereosplit.c:
+	* gst-libs/gst/gl/gstglbasefilter.c:
+	  gl: fix the build
+	  2d287812 was incomplete
+
+2016-02-22 20:49:52 +1100  Matthew Waters <matthew@centricular.com>
+
+	* ext/gl/gstglbasemixer.c:
+	* ext/gl/gstglstereosplit.c:
+	* ext/gl/gstgltestsrc.c:
+	* gst-libs/gst/gl/gstglbasefilter.c:
+	  gl: error out if the configured GL API is unsupported by our element
+	  https://bugzilla.gnome.org/show_bug.cgi?id=759801
+
+2016-01-24 17:40:37 +0300  Sergey Borovkov <sergey.borovkov@wireload.net>
+
+	* ext/qt/qtitem.cc:
+	* ext/qt/qtitem.h:
+	  qmlglsink: Schedule onSceneGrpahInitialized to execute on render thread
+	  onSceneGraphInitialized() is called from non render thread currently when
+	  scene graph is already initialized.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=761003
+
+2016-01-07 18:26:26 +0000  Tim-Philipp Müller <tim@centricular.com>
+
+	* gst/aiff/aiffparse.c:
+	  aiffparse: fix negotiation errors with multi-channel files
+	  Set fallback channel layout on files with more than two
+	  channels. Not clear where to retrieve the real layout from
+	  or what the default layout is for AIFF files, the spec
+	  only seems to specify some layout for up to 6 channels
+	  and the file in question doesn't have a CHAN chunk.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=676425
+
+2016-02-21 10:34:56 +0000  Tim-Philipp Müller <tim@centricular.com>
+
+	* gst/cdxaparse/cdxaparse.vcproj:
+	* gst/mixmatrix/mixmatrix.vcproj:
+	* gst/overlay/overlay.vcproj:
+	* gst/rtjpeg/rtjpeg.vcproj:
+	* gst/smooth/smooth.vcproj:
+	* gst/speed/speed.vcproj:
+	* gst/stereo/stereo.vcproj:
+	* win32/MANIFEST:
+	* win32/gst.sln:
+	* win32/vs6/gst_plugins_bad.dsw:
+	* win32/vs6/libgstdshow.dsp:
+	* win32/vs6/libgstdshowdecwrapper.dsp:
+	* win32/vs6/libgstflv.dsp:
+	* win32/vs6/libgstmpegvideoparse.dsp:
+	* win32/vs6/libgstneon.dsp:
+	* win32/vs8/gst-plugins-bad.sln:
+	* win32/vs8/libgstdirectsound.vcproj:
+	* win32/vs9/gst-plugins-bad.sln:
+	* win32/vs9/libgstdshowsrcwrapper.vcproj:
+	  win32: remove outdated build cruft
+	  This hasn't been touched for generations, doesn't work,
+	  and is just causing confusion. We also don't want to
+	  maintain these files manually.
+
+2016-02-20 12:55:08 +0000  Tim-Philipp Müller <tim@centricular.com>
+
+	* ext/daala/gstdaaladec.c:
+	  daala: don't use exported but undeclared core debug category symbols
+	  It's not right and won't work on Windows with MSVC.
+
+2016-02-19 14:27:59 -0800  Scott D Phillips <scott.d.phillips@intel.com>
+
+	* gst-libs/gst/codecparsers/gsth265parser.c:
+	  codecparsers: h265: Fix initialization of slice_deblocking_filter_disabled_flag
+	  H.265 7.4.7.1 says:
+	  > When slice_deblocking_filter_disabled_flag is not present, it is
+	  > inferred to be equal to pps_deblocking_filter_disabled_flag.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=762351
+
+2016-02-19 16:40:54 -0300  Thiago Santos <thiagoss@osg.samsung.com>
+
+	* gst-libs/gst/codecparsers/gstmpeg4parser.c:
+	  mpeg4parser: prevent assertion when scanning for sync code
+	  Only search if there is indeed enough data to be searched otherwise
+	  an assertion is raised
+
+2016-02-19 17:48:55 +0100  Edward Hervey <edward@centricular.com>
+
+	* gst/mpegtsdemux/mpegtsparse.c:
+	  tsparse: Fix per-program-pad pushing
+	  This fixes a couple of issues regarding the output of (request)
+	  per-program pads output:
+	  We would never push out PAT sections (ok, that was one reallly stupid
+	  mistake. I guess nobody ever uses this feature ...).
+	  In the case where the PMT section of a program was bigger than one
+	  packet, we would only end up pushing the last packet of that PMT. Which
+	  obviously results in the resulting stream never containing the proper
+	  (complete) PMT.
+	  The problem was that the program is only started (in the base class)
+	  after the PMT section is completely parsed. When dealing with single-program
+	  pads, tsparse only wants to push the PMT corresponding to the requested
+	  program (and not the other ones). tsparse did that check by looking
+	  at the streams of the program...
+	  ... but that program doesn't exist for the first packets of the initial
+	  PMT.
+	  The fix is to use the base class program information (if it parsed the
+	  PAT it already has some information, like the PMT PID for a given program)
+	  if the program hasn't started yet.
+
+2016-02-19 17:45:26 +0100  Edward Hervey <edward@centricular.com>
+
+	* gst/mpegtsdemux/mpegtsparse.c:
+	* gst/mpegtsdemux/mpegtsparse.h:
+	  tsparse: Use GstFlowCombiner
+	  In addition to the fact that it's a sane thing to do for multi-source
+	  pad elements, it also avoids the situation where just using a request
+	  pad (and not the main static pad) would result in the processing
+	  stopping.
+
+2016-02-19 12:38:31 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+	* configure.ac:
+	  Back to development
+
+=== release 1.7.2 ===
+
+2016-02-19 11:50:25 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+	* ChangeLog:
+	* NEWS:
+	* RELEASE:
+	* configure.ac:
+	* docs/plugins/gst-plugins-bad-plugins.args:
+	* docs/plugins/gst-plugins-bad-plugins.hierarchy:
+	* docs/plugins/gst-plugins-bad-plugins.interfaces:
+	* docs/plugins/inspect/plugin-accurip.xml:
+	* docs/plugins/inspect/plugin-adpcmdec.xml:
+	* docs/plugins/inspect/plugin-adpcmenc.xml:
+	* docs/plugins/inspect/plugin-aiff.xml:
+	* docs/plugins/inspect/plugin-asfmux.xml:
+	* docs/plugins/inspect/plugin-assrender.xml:
+	* docs/plugins/inspect/plugin-audiomixer.xml:
+	* docs/plugins/inspect/plugin-audiovisualizers.xml:
+	* docs/plugins/inspect/plugin-autoconvert.xml:
+	* docs/plugins/inspect/plugin-bayer.xml:
+	* docs/plugins/inspect/plugin-bz2.xml:
+	* docs/plugins/inspect/plugin-camerabin.xml:
+	* docs/plugins/inspect/plugin-chromaprint.xml:
+	* docs/plugins/inspect/plugin-coloreffects.xml:
+	* docs/plugins/inspect/plugin-curl.xml:
+	* docs/plugins/inspect/plugin-dataurisrc.xml:
+	* docs/plugins/inspect/plugin-debugutilsbad.xml:
+	* docs/plugins/inspect/plugin-dtsdec.xml:
+	* docs/plugins/inspect/plugin-dvb.xml:
+	* docs/plugins/inspect/plugin-dvbsuboverlay.xml:
+	* docs/plugins/inspect/plugin-dvdspu.xml:
+	* docs/plugins/inspect/plugin-faad.xml:
+	* docs/plugins/inspect/plugin-festival.xml:
+	* docs/plugins/inspect/plugin-fieldanalysis.xml:
+	* docs/plugins/inspect/plugin-flite.xml:
+	* docs/plugins/inspect/plugin-frei0r.xml:
+	* docs/plugins/inspect/plugin-gaudieffects.xml:
+	* docs/plugins/inspect/plugin-gdp.xml:
+	* docs/plugins/inspect/plugin-geometrictransform.xml:
+	* docs/plugins/inspect/plugin-gmedec.xml:
+	* docs/plugins/inspect/plugin-gsm.xml:
+	* docs/plugins/inspect/plugin-gstsiren.xml:
+	* docs/plugins/inspect/plugin-hls.xml:
+	* docs/plugins/inspect/plugin-id3tag.xml:
+	* docs/plugins/inspect/plugin-inter.xml:
+	* docs/plugins/inspect/plugin-interlace.xml:
+	* docs/plugins/inspect/plugin-jpegformat.xml:
+	* docs/plugins/inspect/plugin-mimic.xml:
+	* docs/plugins/inspect/plugin-mms.xml:
+	* docs/plugins/inspect/plugin-modplug.xml:
+	* docs/plugins/inspect/plugin-mpeg2enc.xml:
+	* docs/plugins/inspect/plugin-mpegpsdemux.xml:
+	* docs/plugins/inspect/plugin-mpegpsmux.xml:
+	* docs/plugins/inspect/plugin-mpegtsdemux.xml:
+	* docs/plugins/inspect/plugin-mpegtsmux.xml:
+	* docs/plugins/inspect/plugin-mplex.xml:
+	* docs/plugins/inspect/plugin-ofa.xml:
+	* docs/plugins/inspect/plugin-openal.xml:
+	* docs/plugins/inspect/plugin-opencv.xml:
+	* docs/plugins/inspect/plugin-opus.xml:
+	* docs/plugins/inspect/plugin-pcapparse.xml:
+	* docs/plugins/inspect/plugin-pnm.xml:
+	* docs/plugins/inspect/plugin-rawparse.xml:
+	* docs/plugins/inspect/plugin-removesilence.xml:
+	* docs/plugins/inspect/plugin-resindvd.xml:
+	* docs/plugins/inspect/plugin-rfbsrc.xml:
+	* docs/plugins/inspect/plugin-rtmp.xml:
+	* docs/plugins/inspect/plugin-schro.xml:
+	* docs/plugins/inspect/plugin-sdp.xml:
+	* docs/plugins/inspect/plugin-segmentclip.xml:
+	* docs/plugins/inspect/plugin-shm.xml:
+	* docs/plugins/inspect/plugin-smooth.xml:
+	* docs/plugins/inspect/plugin-soundtouch.xml:
+	* docs/plugins/inspect/plugin-spandsp.xml:
+	* docs/plugins/inspect/plugin-speed.xml:
+	* docs/plugins/inspect/plugin-subenc.xml:
+	* docs/plugins/inspect/plugin-videoparsersbad.xml:
+	* docs/plugins/inspect/plugin-voaacenc.xml:
+	* docs/plugins/inspect/plugin-voamrwbenc.xml:
+	* docs/plugins/inspect/plugin-waylandsink.xml:
+	* docs/plugins/inspect/plugin-y4mdec.xml:
+	* docs/plugins/inspect/plugin-zbar.xml:
+	* gst-plugins-bad.doap:
+	* win32/common/config.h:
+	  Release 1.7.2
+
+2016-02-19 10:32:28 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+	* po/af.po:
+	* po/az.po:
+	* po/bg.po:
+	* po/ca.po:
+	* po/cs.po:
+	* po/da.po:
+	* po/de.po:
+	* po/el.po:
+	* po/en_GB.po:
+	* po/eo.po:
+	* po/es.po:
+	* po/eu.po:
+	* po/fi.po:
+	* po/fr.po:
+	* po/gl.po:
+	* po/hr.po:
+	* po/hu.po:
+	* po/id.po:
+	* po/it.po:
+	* po/ja.po:
+	* po/ky.po:
+	* po/lt.po:
+	* po/lv.po:
+	* po/mt.po:
+	* po/nb.po:
+	* po/nl.po:
+	* po/or.po:
+	* po/pl.po:
+	* po/pt_BR.po:
+	* po/ro.po:
+	* po/ru.po:
+	* po/sk.po:
+	* po/sl.po:
+	* po/sq.po:
+	* po/sr.po:
+	* po/sv.po:
+	* po/tr.po:
+	* po/uk.po:
+	* po/vi.po:
+	* po/zh_CN.po:
+	  po: Update translations
+
+2016-02-18 14:32:23 +0000  Julien Isorce <j.isorce@samsung.com>
+
+	* pkgconfig/gstreamer-bad-audio-uninstalled.pc.in:
+	* pkgconfig/gstreamer-bad-base-uninstalled.pc.in:
+	* pkgconfig/gstreamer-bad-video-uninstalled.pc.in:
+	* pkgconfig/gstreamer-codecparsers-uninstalled.pc.in:
+	* pkgconfig/gstreamer-gl-uninstalled.pc.in:
+	* pkgconfig/gstreamer-insertbin-uninstalled.pc.in:
+	* pkgconfig/gstreamer-mpegts-uninstalled.pc.in:
+	* pkgconfig/gstreamer-player-uninstalled.pc.in:
+	* pkgconfig/gstreamer-plugins-bad-uninstalled.pc.in:
+	* pkgconfig/gstreamer-wayland-uninstalled.pc.in:
+	  uninstalled.pc: add support for non libtool build systems
+	  Currently the .la path is provided which requires to use libtool as
+	  mentioned in the GStreamer manual section-helloworld-compilerun.html.
+	  It is fine as long as the application is built using libtool.
+	  So currently it is not possible to compile a GStreamer application
+	  within gst-uninstalled with CMake or other build system different
+	  than autotools.
+	  This patch allows to do the following in gst-uninstalled env:
+	  gcc test.c -o test $(pkg-config --cflags --libs gstreamer-1.0 \
+	  gstreamer-gl-1.0)
+	  Previously it required to prepend libtool --mode=link
+	  https://bugzilla.gnome.org/show_bug.cgi?id=720778
+
+2016-02-18 16:21:38 +0000  Julien Isorce <j.isorce@samsung.com>
+
+	* gst-libs/gst/gl/gstgldebug.c:
+	  gldebug: make sure debug is initialized when calling gst_gl_insert_debug_marker
+	  Usually gl debug is initialized in gst_gl_context_create_thread.
+	  But this function is not used when using the GstGLContextGPUProcess
+	  from ChromiumGStreamerBackend.
+	  Received signal 11 SEGV_MAPERR 000000000000
+	  gst_debug_category_get_threshold
+	  gst_gl_insert_debug_marker
+	  gst_gl_base_filter_gl_start
+
+2016-02-18 10:33:20 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+	* gst-libs/gst/gl/Makefile.am:
+	* gst-libs/gst/gl/egl/gstglcontext_egl.c:
+	* gst-libs/gst/gl/utils/gles_versions.h:
+	* gst-libs/gst/gl/utils/opengl_versions.h:
+	  gl: Fix compiler warning about unused const variable with gcc 6
+	  CC       libgstgl_x11_la-gstglcontext_glx.lo
+	  In file included from gstglcontext_glx.c:39:0:
+	  ../utils/opengl_versions.h:52:43: error: ‘gles2_versions’ defined but not used [-Werror=unused-const-variable]
+	  static const struct { int major, minor; } gles2_versions[] = {
+	  ^~~~~~~~~~~~~~
+
+2016-02-18 10:29:21 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+	* gst-libs/gst/gl/Makefile.am:
+	  gl: Move private headers from SOURCES to noinst_HEADERS
+
+2016-02-18 00:24:04 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+	* ext/modplug/gstmodplug.cc:
+	  modplug: Fix compiler warning about C++11 compatibility
+	  gstmodplug.cc:94:17: error: invalid suffix on literal; C++11 requires a space between literal and string macro [-Werror=literal-suffix]
+	  #define FORMATS "{ "GST_AUDIO_NE (S32)", "GST_AUDIO_NE (S16)", U8 }"
+	  ^
+	  gstmodplug.cc:94:39: error: invalid suffix on literal; C++11 requires a space between literal and string macro [-Werror=literal-suffix]
+	  #define FORMATS "{ "GST_AUDIO_NE (S32)", "GST_AUDIO_NE (S16)", U8 }"
+	  ^
+
+2016-02-16 15:10:34 +0100  David Fernandez <d.fernandezlop@gmail.com>
+
+	* ext/curl/gstcurlbasesink.c:
+	  curlbasesink: don't send empty buffers
+	  Fixes problem in curlhttpsink when qtmux uses faststart.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=762013
+
+2016-02-17 11:16:53 +0100  Thibault Saunier <tsaunier@gnome.org>
+
+	* ext/ladspa/gstladspafilter.c:
+	  ladspa: Fix some debugs
+
+2016-01-26 09:34:00 +0900  Vineeth TM <vineeth.tm@samsung.com>
+
+	* sys/uvch264/gstuvch264_src.c:
+	  uvch264_src: Fix caps memory leak
+	  v4l_caps and new_caps are being allocated new memory before freeing the
+	  old allocation.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=761108
+
+2015-12-24 15:36:54 +0900  Vineeth TM <vineeth.tm@samsung.com>
+
+	* gst/mpegtsdemux/mpegtsbase.c:
+	  mpegtsbase: Refactor code to check for subclass seek handling
+	  If subclass is not able to handle seek event, then there is no need to
+	  stop streaming and send flush events. We should simply return FALSE
+	  https://bugzilla.gnome.org/show_bug.cgi?id=758516
+
+2015-12-24 15:10:16 +0900  Vineeth TM <vineeth.tm@samsung.com>
+
+	* gst/mpegtsdemux/mpegtsbase.c:
+	  mpegtsbase: Add condition to check for non working negative rate
+	  tsdemux is not able to handle negative playback rates.
+	  But in mpegtsbase, the same check is not being done.
+	  added a check to not handle negative rate while seeking unless
+	  the same is handled upstream.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=758516
+
+2016-02-17 13:00:46 +1100  Matthew Waters <matthew@centricular.com>
+
+	* gst-libs/gst/gl/gstglfilter.c:
+	  glfilter: insert the debug marker from the GL thread
+	  https://bugzilla.gnome.org/show_bug.cgi?id=761538
+
+2016-02-17 11:42:23 +1100  Matthew Waters <matthew@centricular.com>
+
+	* ext/gl/gstglimagesink.c:
+	  glimagesink: remove unsed reconfigure variable
+
+2016-01-13 13:17:56 +1100  Matthew Waters <matthew@centricular.com>
+
+	* ext/gl/gstglimagesink.c:
+	* ext/gl/gstglimagesink.h:
+	  glimagesink: don't push a reconfigure event from the GL thread
+	  Doing so may cause deadlocks when other elements attempt destroy or created
+	  GL resources.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=760559
+
+2016-01-21 10:40:36 +0800  Wang Xin-yu (王昕宇) <comicfans44@gmail.com>
+
+	* ext/gl/gstglvideomixer.c:
+	  glvideomixer: don't leak pad's vertex buffer on release_pad
+	  https://bugzilla.gnome.org/show_bug.cgi?id=760873
+
+2016-02-17 01:08:18 +1100  Matthew Waters <matthew@centricular.com>
+
+	* ext/gl/gstglmixer.c:
+	* ext/gl/gstglmixer.h:
+	* ext/gl/gstglmosaic.c:
+	* ext/gl/gstglmosaic.h:
+	* ext/gl/gstglstereomix.c:
+	* ext/gl/gstglstereomix.h:
+	* ext/gl/gstglvideomixer.c:
+	* ext/gl/gstglvideomixer.h:
+	  glmixer: Remove usage of GstGLMixerFrameData
+	  Subclasses can just iterate over the list of pads themselves
+	  https://bugzilla.gnome.org/show_bug.cgi?id=760873
+
+2016-01-13 14:41:22 +1100  Matthew Waters <matthew@centricular.com>
+
+	* ext/gl/gstglmixer.c:
+	  glmixer: don't hold the object lock while calling into GL
+	  Doing so can deadlock between the GL thread and the object lock e.g.
+	  when performing reconfigure events in glimagesink on a resize event.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=760559
+
+2016-02-16 22:34:43 +0000  Tim-Philipp Müller <tim@centricular.com>
+
+	* common:
+	  Update common: make check-exports not fail for libgstgl.def
+	  Should fix distcheck on some build bots.
+
+2016-01-26 09:37:04 +0900  Vineeth TM <vineeth.tm@samsung.com>
+
+	* sys/acmenc/acmenc.c:
+	* sys/acmmp3dec/acmmp3dec.c:
+	  acmenc/acmmp3dec: remove unnecessary break after return
+	  https://bugzilla.gnome.org/show_bug.cgi?id=761109
+
+2015-07-21 18:02:38 -0300  Thiago Santos <thiagoss@osg.samsung.com>
+
+	* configure.ac:
+	  configure: improve check for wayland-scanner binary
+	  The plugin doesn't need the wayland-scanner package to be built
+	  or run, it only needs the wayland-scanner program during compile time.
+	  When cross-compiling, build systems might not have the wayland-scanner
+	  package for the target system as it is a developer's tool, while it should
+	  still be possible to use wayland-scanner from the host system.
+	  This patch fixes it by not requiring the wayland-scanner package but
+	  just the binary itself.
+	  Note that the check is done outside of the PKG_CHECK_MODULES
+	  as it doesn't work inside of it.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=752688
+
+2016-01-21 11:53:33 +0100  Philippe Normand <philn@igalia.com>
+
+	* gst-libs/gst/adaptivedemux/gstadaptivedemux.c:
+	* gst-libs/gst/adaptivedemux/gstadaptivedemux.h:
+	  adaptivedemux: restore bitrate averaging support
+	  This was accidentally removed in commit ccff3be3.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=733959
+
+2016-01-20 15:33:28 +0100  Philippe Normand <philn@igalia.com>
+
+	* gst-libs/gst/adaptivedemux/gstadaptivedemux.c:
+	  adaptivedemux: remove queue2 overrun notification
+	  Due to performance impact concerns this is removed. An alternative
+	  approach would be to rely on buffering messages monitoring.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=733959
+
+2016-02-16 16:18:21 +1100  Matthew Waters <matthew@centricular.com>
+
+	* ext/vulkan/vkdevice.c:
+	  vkdevice: add the necessary but arbitrary queue priority
+	  Silences an error in the validation layers.
+
+2016-02-16 16:12:07 +1100  Matthew Waters <matthew@centricular.com>
+
+	* ext/vulkan/vkswapper.c:
+	  vkswapper: add the necessary call to check if the physical device supports the surface
+	  Silences an error in the validation layers.
+
+2016-02-16 15:53:56 +1100  Matthew Waters <matthew@centricular.com>
+
+	* ext/vulkan/vkapi.h:
+	* ext/vulkan/vkinstance.c:
+	  vulkan: update to SDK 1.0.3.1
+
+2016-02-16 15:36:41 +1100  Matthew Waters <matthew@centricular.com>
+
+	* configure.ac:
+	  vulkan/build: search for the correct library
+	  SDK 1.0.1 used libvulkan-1.so, 1.0.2 uses libvulkan.so
+
+2016-02-16 11:51:28 +1100  Matthew Waters <matthew@centricular.com>
+
+	* ext/vulkan/vkswapper.c:
+	  vkswapper: iterate over the device queue's using the new iteration API
+
+2016-02-16 11:49:24 +1100  Matthew Waters <matthew@centricular.com>
+
+	* ext/vulkan/vkdevice.c:
+	* ext/vulkan/vkdevice.h:
+	  vkdevice: add callback iteration over the device queue's
+
+2016-02-16 11:22:37 +1100  Matthew Waters <matthew@centricular.com>
+
+	* ext/vulkan/vkqueue.c:
+	* ext/vulkan/vkqueue.h:
+	  vkqueue: add context helpers
+
+2016-02-11 01:31:14 +1100  Matthew Waters <matthew@centricular.com>
+
+	* ext/vulkan/vkdevice.c:
+	* ext/vulkan/vkdevice.h:
+	* ext/vulkan/vkdisplay.c:
+	* ext/vulkan/vkdisplay.h:
+	* ext/vulkan/vkinstance.c:
+	* ext/vulkan/vkinstance.h:
+	* ext/vulkan/vksink.c:
+	* ext/vulkan/vkupload.c:
+	* ext/vulkan/vkutils.c:
+	* ext/vulkan/vkutils.h:
+	  vkutils: move object-specific context queries to their respective files
+	  vkutils now just contains some utility functions to further simplify retrieving
+	  multiple objects.
+
+2016-02-11 00:50:53 +1100  Matthew Waters <matthew@centricular.com>
+
+	* ext/vulkan/vkdevice.c:
+	* ext/vulkan/vkdevice.h:
+	  vkdevice: remove unneeded error parameter from get_queue()
+
+2016-02-10 18:06:46 +1100  Matthew Waters <matthew@centricular.com>
+
+	* ext/vulkan/vkupload.c:
+	* ext/vulkan/vkupload.h:
+	  vkupload: implement an uploader abstraction
+
+2016-02-10 19:50:27 +1100  Matthew Waters <matthew@centricular.com>
+
+	* ext/vulkan/vkdisplay.c:
+	  vkdisplay: unref the instance
+	  fixes memory leak
+
+2016-02-10 19:34:55 +1100  Matthew Waters <matthew@centricular.com>
+
+	* ext/vulkan/vkdevice.c:
+	* ext/vulkan/vkinstance.c:
+	* ext/vulkan/vkswapper.c:
+	  vulkan: chain up in finalize
+	  They were missing in some cases
+
+2016-02-10 18:58:32 +1100  Matthew Waters <matthew@centricular.com>
+
+	* ext/vulkan/vksink.c:
+	  vksink: only unref if the pointers are non-NULL
+
+2016-02-10 18:05:47 +1100  Matthew Waters <matthew@centricular.com>
+
+	* ext/vulkan/vkimagememory.c:
+	  vkimagememory: free the managing struct on _free
+	  fixes a memory leak
+
+2016-02-09 18:26:40 +1100  Matthew Waters <matthew@centricular.com>
+
+	* ext/vulkan/vkdevice.c:
+	  vkdevice: perform a waitIdle before destroying the device
+
+2016-02-09 17:46:53 +1100  Matthew Waters <matthew@centricular.com>
+
+	* ext/vulkan/vkbuffermemory.c:
+	* ext/vulkan/vkbuffermemory.h:
+	* ext/vulkan/vkimagememory.c:
+	* ext/vulkan/vkimagememory.h:
+	  Revert "vulkan: remove views from the memory objects."
+	  This reverts commit 1ea817298ee4d5ef9b00f888f8ebe16a888b1150.
+
+2016-02-09 17:31:26 +1100  Matthew Waters <matthew@centricular.com>
+
+	* ext/vulkan/vkbuffermemory.c:
+	* ext/vulkan/vkbuffermemory.h:
+	* ext/vulkan/vkbufferpool.c:
+	* ext/vulkan/vkimagememory.c:
+	* ext/vulkan/vkimagememory.h:
+	  vulkanmemory: remove bind variants
+
+2016-02-09 16:21:00 +1100  Matthew Waters <matthew@centricular.com>
+
+	* ext/vulkan/vkbuffermemory.c:
+	* ext/vulkan/vkbuffermemory.h:
+	* ext/vulkan/vkimagememory.c:
+	* ext/vulkan/vkimagememory.h:
+	  vulkan: remove views from the memory objects.
+	  They are not used and it's not possible to create the view before binding the
+	  VkDeviceMemory object to them.
+
+2016-02-09 11:34:57 +1100  Matthew Waters <matthew@centricular.com>
+
+	* ext/vulkan/vkswapper.c:
+	  vkswapper: alpha flags are now supported by LunarG's driver
+
+2016-02-09 00:07:38 +1100  Matthew Waters <matthew@centricular.com>
+
+	* ext/vulkan/Makefile.am:
+	* ext/vulkan/vk.h:
+	* ext/vulkan/vk_fwd.h:
+	* ext/vulkan/vkbufferpool.c:
+	* ext/vulkan/vkbufferpool.h:
+	* ext/vulkan/vkupload.c:
+	  vulkan: add a vulkanbuffer bufferpool
+
+2016-02-08 22:49:15 +1100  Matthew Waters <matthew@centricular.com>
+
+	* ext/vulkan/Makefile.am:
+	* ext/vulkan/gstvulkan.c:
+	* ext/vulkan/vksink.c:
+	* ext/vulkan/vkswapper.c:
+	* ext/vulkan/vkswapper.h:
+	* ext/vulkan/vkupload.c:
+	* ext/vulkan/vkupload.h:
+	  vulkan: add upload element
+
+2016-02-08 18:28:29 +1100  Matthew Waters <matthew@centricular.com>
+
+	* ext/vulkan/vkutils.c:
+	  vkutils: fix assert inversion
+
+2016-02-08 18:27:16 +1100  Matthew Waters <matthew@centricular.com>
+
+	* ext/vulkan/vkbuffermemory.h:
+	* ext/vulkan/vkimagememory.h:
+	  vulkan: add caps feature names for the buffer and image memories
+
+2016-02-08 14:44:20 +1100  Matthew Waters <matthew@centricular.com>
+
+	* ext/vulkan/vksink.c:
+	* ext/vulkan/vkutils.c:
+	* ext/vulkan/vkutils.h:
+	  vulkan: add device to handle_context_query
+
+2016-02-08 14:32:10 +1100  Matthew Waters <matthew@centricular.com>
+
+	* ext/vulkan/vksink.c:
+	* ext/vulkan/vkutils.c:
+	  vulkan: move instance_open into the utility ensure_element_data
+	  So callers don't have to perform it themselves.
+
+2016-02-08 14:25:49 +1100  Matthew Waters <matthew@centricular.com>
+
+	* ext/vulkan/vkinstance.c:
+	* ext/vulkan/vkinstance.h:
+	* ext/vulkan/vksink.c:
+	  vkinstance: add signal for overriding device creation
+
+2016-02-08 12:22:11 +1100  Matthew Waters <matthew@centricular.com>
+
+	* ext/vulkan/vkbuffermemory.c:
+	* ext/vulkan/vkbuffermemory.h:
+	* ext/vulkan/vkimagememory.c:
+	* ext/vulkan/vkimagememory.h:
+	* ext/vulkan/vkmacros.h:
+	* ext/vulkan/vkmemory.c:
+	* ext/vulkan/vkmemory.h:
+	* ext/vulkan/vkswapper.c:
+	  vulkan: separate allocation and binding of memory
+
+2016-02-08 12:14:44 +1100  Matthew Waters <matthew@centricular.com>
+
+	* ext/vulkan/vkbuffermemory.c:
+	  vkbuffermemory: follow the rest of the struct macros
+
+2016-02-05 19:31:49 +1100  Matthew Waters <matthew@centricular.com>
+
+	* ext/vulkan/vkswapper.c:
+	  vkswapper: use buffer memory to upload video frames to the GPU
+
+2016-02-05 19:18:40 +1100  Matthew Waters <matthew@centricular.com>
+
+	* ext/vulkan/Makefile.am:
+	* ext/vulkan/vk.h:
+	* ext/vulkan/vk_fwd.h:
+	* ext/vulkan/vkbuffermemory.c:
+	* ext/vulkan/vkbuffermemory.h:
+	* ext/vulkan/vkinstance.c:
+	  vulkan: add a buffer memory allocator
+	  Wraps the VkBuffer in a GstMemory subclass.
+
+2016-02-05 19:11:51 +1100  Matthew Waters <matthew@centricular.com>
+
+	* ext/vulkan/vkmemory.h:
+	  vkmemory: align struct members in the header
+
+2016-02-05 19:10:43 +1100  Matthew Waters <matthew@centricular.com>
+
+	* ext/vulkan/vkmacros.h:
+	  vkmacros: use specific _INIT macros to initialize structures
+
+2016-02-05 19:09:41 +1100  Matthew Waters <matthew@centricular.com>
+
+	* ext/vulkan/vkimagememory.c:
+	* ext/vulkan/vkimagememory.h:
+	  vkimagememory: add get_{width,height) functions
+
+2016-01-27 15:20:49 +1100  Matthew Waters <matthew@centricular.com>
+
+	* configure.ac:
+	* ext/vulkan/vkapi.h:
+	* ext/vulkan/vkdevice.c:
+	* ext/vulkan/vkinstance.c:
+	* ext/vulkan/vkinstance.h:
+	* ext/vulkan/vkswapper.c:
+	* ext/vulkan/xcb/vkwindow_xcb.c:
+	  vulkan: update to release 1.0.1.1
+
+2016-01-22 14:34:06 +1100  Matthew Waters <matthew@centricular.com>
+
+	* ext/vulkan/xcb/vkwindow_xcb.c:
+	  vulkan/xcb: flush after mapping the window
+	  Otherwise the map may not reach the server and not appear.
+
+2016-01-04 16:51:26 +1100  Matthew Waters <matthew@centricular.com>
+
+	* ext/vulkan/vkswapper.c:
+	  vkswapper: fix semaphore usage
+
+2015-12-31 16:34:24 +1100  Matthew Waters <matthew@centricular.com>
+
+	* ext/vulkan/vkdevice.c:
+	* ext/vulkan/vkinstance.c:
+	  vulkan: add some debugging about the supported extensions
+
+2015-12-31 15:58:37 +1100  Matthew Waters <matthew@centricular.com>
+
+	* ext/vulkan/vkswapper.c:
+	  vkswapper: get the function pointers from the correct object
+	  GetPhysicalDevice* functions are instance functions rather than device
+	  functions.
+
+2015-12-31 15:38:37 +1100  Matthew Waters <matthew@centricular.com>
+
+	* ext/vulkan/vkinstance.c:
+	* ext/vulkan/vkinstance.h:
+	  vkinstance: add the necessary winsys extension
+
+2015-12-31 15:34:45 +1100  Matthew Waters <matthew@centricular.com>
+
+	* ext/vulkan/vk_fwd.h:
+	* ext/vulkan/vkdisplay.h:
+	  vkdisplay: forward declare GstVulkanDisplayType
+
+2015-12-31 15:32:15 +1100  Matthew Waters <matthew@centricular.com>
+
+	* ext/vulkan/vkapi.h:
+	  vkapi: remove unneeded headers
+	  vkapi is for accessing the vulkan headers with the correct defines applied so
+	  doesn't need any interal headers.
+
+2015-12-30 15:15:40 +1100  Matthew Waters <matthew@centricular.com>
+
+	* ext/vulkan/vkimagememory.c:
+	  vkimagememory: fix the memory barrier access masks
+	  silences the following warnings from the validation layer
+	  AccessMask xxx must have required access bit xxx and may have optional bits 0
+	  when layout is VK_IMAGE_LAYOUT_TRANSFER_{SRC,DST}_OPTIMAL
+
+2015-12-30 15:14:23 +1100  Matthew Waters <matthew@centricular.com>
+
+	* ext/vulkan/vkswapper.c:
+	  vkswapper: only wait on the semaphore once
+	  It's invalid usage and we may deadlock
+
+2015-12-31 01:27:54 +1100  Matthew Waters <matthew@centricular.com>
+
+	* ext/vulkan/vkimagememory.c:
+	  vkimagememory: initialize flags and don't crash on errors
+
+2015-12-30 14:06:01 +1100  Matthew Waters <matthew@centricular.com>
+
+	* ext/vulkan/vkdevice.c:
+	* ext/vulkan/vkerror.c:
+	* ext/vulkan/vkerror.h:
+	* ext/vulkan/vkinstance.c:
+	* ext/vulkan/vkswapper.c:
+	  vulkan: update error db for 0.10.2
+
+2015-12-29 16:05:17 +1100  Matthew Waters <matthew@centricular.com>
+
+	* ext/vulkan/vk.h:
+	* ext/vulkan/vkapi.h:
+	* ext/vulkan/vkdevice.c:
+	* ext/vulkan/vkdevice.h:
+	* ext/vulkan/vkdisplay.c:
+	* ext/vulkan/vkdisplay.h:
+	* ext/vulkan/vkimagememory.c:
+	* ext/vulkan/vkinstance.c:
+	* ext/vulkan/vkmacros.h:
+	* ext/vulkan/vkmemory.c:
+	* ext/vulkan/vkmemory.h:
+	* ext/vulkan/vkswapper.c:
+	* ext/vulkan/vkswapper.h:
+	* ext/vulkan/vkutils.c:
+	* ext/vulkan/vkwindow.c:
+	* ext/vulkan/vkwindow.h:
+	* ext/vulkan/xcb/vkdisplay_xcb.c:
+	* ext/vulkan/xcb/vkdisplay_xcb.h:
+	* ext/vulkan/xcb/vkwindow_xcb.c:
+	* ext/vulkan/xcb/vkwindow_xcb.h:
+	  vulkan: update to SDK 0.10.2
+
+2015-12-07 17:33:43 +1100  Matthew Waters <matthew@centricular.com>
+
+	* ext/vulkan/Makefile.am:
+	* ext/vulkan/vk.h:
+	* ext/vulkan/vkdevice.c:
+	* ext/vulkan/vkdisplay.c:
+	* ext/vulkan/vkdisplay.h:
+	* ext/vulkan/vkinstance.c:
+	* ext/vulkan/vkinstance.h:
+	* ext/vulkan/vksink.c:
+	* ext/vulkan/vkutils.c:
+	* ext/vulkan/vkutils.h:
+	* ext/vulkan/vkutils_private.h:
+	  vulkan: implement GstContext helpers
+	  Based off libgstgl's implementation
+
+2015-12-07 17:21:12 +1100  Matthew Waters <matthew@centricular.com>
+
+	* ext/vulkan/vk_fwd.h:
+	* ext/vulkan/vkdevice.c:
+	* ext/vulkan/vkdevice.h:
+	* ext/vulkan/vksink.c:
+	  vkdevice: remove gst_vulkan_device_close()
+	  When sharing the device between multiple elements/application, we need
+	  to use th erefcount to know when to close the device.
+
+2015-12-07 17:00:37 +1100  Matthew Waters <matthew@centricular.com>
+
+	* ext/vulkan/vk_fwd.h:
+	* ext/vulkan/vkinstance.c:
+	* ext/vulkan/vkinstance.h:
+	* ext/vulkan/vksink.c:
+	  vkinstance: remove gst_vulkan_instance_close
+	  Sharing the instance across multiple elements/application will require
+	  using the refcount instead to know when to close and destroy the instance.
+
+2015-12-07 16:46:28 +1100  Matthew Waters <matthew@centricular.com>
+
+	* ext/vulkan/vkswapper.c:
+	  vkswapper: remove outdated comment
+
+2015-12-07 16:39:53 +1100  Matthew Waters <matthew@centricular.com>
+
+	* ext/vulkan/vkswapper.c:
+	  vkswapper: always match lock/unlock of the render lock
+	  If a draw event comes from the winsys before we've rendered a buffer we were
+	  deadlocking.
+
+2015-12-02 17:54:30 +1100  Matthew Waters <matthew@centricular.com>
+
+	* ext/vulkan/vkimagememory.c:
+	* ext/vulkan/vkmemory.c:
+	  vkmemory: debug output the memory properties requested
+
+2015-12-02 17:14:49 +1100  Matthew Waters <matthew@centricular.com>
+
+	* ext/vulkan/vkimagememory.c:
+	  vkimagememory: don't leak GstMapInfo in failure cases on _map()
+
+2015-12-02 17:10:39 +1100  Matthew Waters <matthew@centricular.com>
+
+	* ext/vulkan/vkdevice.c:
+	* ext/vulkan/vkinstance.c:
+	* ext/vulkan/vkswapper.c:
+	  vulkan: de-C99 struct declarations
+
+2015-12-01 18:37:34 +1100  Matthew Waters <matthew@centricular.com>
+
+	* ext/vulkan/vk_fwd.h:
+	* ext/vulkan/vkswapper.c:
+	* ext/vulkan/vkswapper.h:
+	* ext/vulkan/vkwindow.c:
+	* ext/vulkan/vkwindow.h:
+	* ext/vulkan/xcb/xcb_event_source.c:
+	  vkwindow/swapper: implement redraw handling
+	  only xcb has been implemented
+
+2015-12-01 16:28:28 +1100  Matthew Waters <matthew@centricular.com>
+
+	* ext/vulkan/vkdisplay.c:
+	* ext/vulkan/vkdisplay.h:
+	* ext/vulkan/vksink.h:
+	* ext/vulkan/vkswapper.c:
+	* ext/vulkan/vkswapper.h:
+	* ext/vulkan/vkwindow.c:
+	* ext/vulkan/vkwindow.h:
+	* ext/vulkan/xcb/vkdisplay_xcb.c:
+	* ext/vulkan/xcb/vkwindow_xcb.c:
+	* ext/vulkan/xcb/xcb_event_source.c:
+	  vulkan: implement quitting and resizing the window
+	  As before, only xcb has been implemented.
+
+2015-10-24 17:29:05 +1100  Matthew Waters <matthew@centricular.com>
+
+	* configure.ac:
+	* ext/Makefile.am:
+	* ext/vulkan/.gitignore:
+	* ext/vulkan/Makefile.am:
+	* ext/vulkan/gstvulkan.c:
+	* ext/vulkan/vk.h:
+	* ext/vulkan/vk_fwd.h:
+	* ext/vulkan/vkdevice.c:
+	* ext/vulkan/vkdevice.h:
+	* ext/vulkan/vkdisplay.c:
+	* ext/vulkan/vkdisplay.h:
+	* ext/vulkan/vkerror.c:
+	* ext/vulkan/vkerror.h:
+	* ext/vulkan/vkimagememory.c:
+	* ext/vulkan/vkimagememory.h:
+	* ext/vulkan/vkinstance.c:
+	* ext/vulkan/vkinstance.h:
+	* ext/vulkan/vkmemory.c:
+	* ext/vulkan/vkmemory.h:
+	* ext/vulkan/vkqueue.c:
+	* ext/vulkan/vkqueue.h:
+	* ext/vulkan/vksink.c:
+	* ext/vulkan/vksink.h:
+	* ext/vulkan/vkswapper.c:
+	* ext/vulkan/vkswapper.h:
+	* ext/vulkan/vkutils.c:
+	* ext/vulkan/vkutils.h:
+	* ext/vulkan/vkwindow.c:
+	* ext/vulkan/vkwindow.h:
+	* ext/vulkan/xcb/Makefile.am:
+	* ext/vulkan/xcb/vkdisplay_xcb.c:
+	* ext/vulkan/xcb/vkdisplay_xcb.h:
+	* ext/vulkan/xcb/vkwindow_xcb.c:
+	* ext/vulkan/xcb/vkwindow_xcb.h:
+	* ext/vulkan/xcb/xcb_event_source.c:
+	* ext/vulkan/xcb/xcb_event_source.h:
+	  new vulkan based video sink
+	  Currently xcb is the only winsys that is implemented and there's no redraws et
+	  al
+
+2016-02-16 12:38:21 +0000  Tim-Philipp Müller <tim@centricular.com>
+
+	* tests/files/Makefile.am:
+	* tests/files/cbr_stream.mp3:
+	* tests/files/stream.mp2:
+	* tests/files/vbr_stream.mp3:
+	  tests: remove test files no longer needed
+
+2016-02-16 10:44:33 +0000  Tim-Philipp Müller <tim@centricular.com>
+
+	* Makefile.am:
+	* configure.ac:
+	* docs/plugins/gst-plugins-bad-plugins-docs.sgml:
+	* docs/plugins/gst-plugins-bad-plugins-sections.txt:
+	* docs/plugins/inspect/plugin-mpg123.xml:
+	* ext/Makefile.am:
+	* ext/mpg123/Makefile.am:
+	* ext/mpg123/gstmpg123audiodec.c:
+	* ext/mpg123/gstmpg123audiodec.h:
+	* gst-plugins-bad.spec.in:
+	* tests/check/Makefile.am:
+	* tests/check/elements/.gitignore:
+	* tests/check/elements/mpg123audiodec.c:
+	  mpg123: move plugin from -bad to -ugly
+	  https://bugzilla.gnome.org/show_bug.cgi?id=719849
+
+2016-02-16 19:59:13 +1100  Matthew Waters <matthew@centricular.com>
+
+	* ext/gtk/gstgtkbasesink.c:
+	* ext/gtk/gstgtkbasesink.h:
+	  gtk(gl)sink: remove the signal handlers on finalize
+	  It's possible that the sink element will be freed before the widget is
+	  destroyed.  When the widget was eventually destroyed, it was attempting to
+	  access member variables of the freed sink struct which resulted in undefined
+	  behaviour.
+	  Fix by disconnecting our signal on finalize.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=762098
+
+2016-02-16 08:48:23 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+	* gst-libs/gst/gl/gstgldebug.c:
+	* gst-libs/gst/gl/gstglviewconvert.c:
+	  gl: Remove leftover g_prints
+	  One was commented out, but we also don't use // comments :)
+
+2016-02-16 14:41:37 +1100  Matthew Waters <matthew@centricular.com>
+
+	* gst-libs/gst/gl/gstgldebug.c:
+	  gldebug: use the correct spelling for behavior
+	  The headers use the american spelling of behavior not the UK/AUS version with
+	  the extra U.
+
+2016-02-16 13:58:42 +1100  Matthew Waters <matthew@centricular.com>
+
+	* gst-libs/gst/gl/gstglcontext.c:
+	* gst-libs/gst/gl/gstgldebug.c:
+	  glcontext: don't enable GL debug for messages that won't be logged
+	  This is an optimization to avoid pointless string processing.
+
+2016-02-16 13:01:20 +1100  Alessandro Decina <alessandro.d@gmail.com>
+
+	* ext/gl/gstglvideoflip.c:
+	  glvideoflip: don't ignore method changes when caps aren't set (yet)
+
+2016-02-16 00:33:50 +0000  Tim-Philipp Müller <tim@centricular.com>
+
+	* Makefile.am:
+	* configure.ac:
+	* gst/rtp/Makefile.am:
+	* gst/rtp/gstrtp.c:
+	* gst/rtp/gstrtph265depay.c:
+	* gst/rtp/gstrtph265depay.h:
+	* gst/rtp/gstrtph265pay.c:
+	* gst/rtp/gstrtph265pay.h:
+	  rtp: move RTP H.265 payloader/depayloader to -good
+	  https://bugzilla.gnome.org/show_bug.cgi?id=761606
+
+2015-10-07 23:49:58 +0200  Stian Selnes <stian@pexip.com>
+
+	* configure.ac:
+	* gst/netsim/Makefile.am:
+	* gst/netsim/gstnetsim.c:
+	* gst/netsim/gstnetsim.h:
+	* tests/check/Makefile.am:
+	* tests/check/elements/netsim.c:
+	  netsim: Add netsim element
+	  Resurrected from the Farstream repository and given an
+	  overhaul to fix races, deadlocks etc.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=756252
+
+2015-11-20 19:38:03 +0000  Florin Apostol <florin.apostol@oregan.net>
+
+	* ext/dash/gstdashdemux.c:
+	* gst-libs/gst/adaptivedemux/gstadaptivedemux.c:
+	  dashdemux: gst_dash_demux_get_live_seek_range returns positive values
+	  https://bugzilla.gnome.org/show_bug.cgi?id=752374
+
+2016-02-10 10:31:19 +0000  Tim-Philipp Müller <tim@centricular.com>
+
+	* gst-libs/gst/gl/gstglsyncmeta.c:
+	  gl: syncmeta: define GL_TIMEOUT_IGNORED in more portable way
+
+2016-02-10 16:37:22 +1100  Alessandro Decina <alessandro.d@gmail.com>
+
+	* gst-libs/gst/gl/gstglshader.c:
+	  gstglshader: cache uniform locations
+	  Avoid redundant calls to glGetUniformLocation. The results can be cached once
+	  the shader has been linked.
+
+2016-02-10 15:40:02 +1100  Alessandro Decina <alessandro.d@gmail.com>
+
+	* sys/applemedia/videotexturecache.m:
+	  applemedia: videotesturecache: let CVOpenGLESTextureCache flush every 1s
+	  Leave kCVOpenGLESTextureCacheMaximumTextureAgeKey to the default (1s). We used
+	  to set it to 0 and flush manually, but apparently (looking at the GLES profiler)
+	  0 means "disable the cache entirely".
+
+2016-02-10 13:08:43 +1100  Alessandro Decina <alessandro.d@gmail.com>
+
+	* gst-libs/gst/gl/gstglcontext.c:
+	  gstglcontext: micro optimization to gst_gl_context_thread_add
+	  Invoke the callback right away when called on the context thread. Removes
+	  overhead when nesting libgstgl calls (for example when working with the sync
+	  meta).
+
+2016-01-06 21:39:00 +0000  Julien MOUTTE <julien@moutte.net>
+
+	* ext/rtmp/gstrtmpsink.c:
+	* ext/rtmp/gstrtmpsink.h:
+	  rtpmsink: Implement setcaps that uses streamheader
+	  This allow adding rtmpsink after the flv streaming have started. Otherwise,
+	  FLV streamheader is never sent to the server, which cannot figure-out
+	  what is this stream about. It should also help in certain renegotiation
+	  figures. The sink will no longer work without an streamheader in caps,
+	  though there is no known implementation of flvdemux that does not
+	  support this.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=760242
+
+2016-02-09 21:35:19 +0000  Luis de Bethencourt <luisbg@osg.samsung.com>
+
+	* ext/smoothstreaming/gstmssmanifest.c:
+	  mssdemux: remove unnecessary check
+	  stream->current_fragment has the value of g_list_previous (iter) which has
+	  just been checked. No need to check it again.
+	  Just to be safe, use a g_assert() to check fragment before dereferencing.
+	  CID #1352041
+
+2016-02-09 17:24:50 -0300  Thiago Santos <thiagoss@osg.samsung.com>
+
+	* ext/dash/gstdashdemux.c:
+	  dashdemux: plug mpd client leak
+	  On parsing error, free the mpd client object
+	  https://bugzilla.gnome.org/show_bug.cgi?id=760120
+
+2016-01-04 12:12:45 +0000  Florin Apostol <florin.apostol@oregan.net>
+
+	* ext/dash/gstdashdemux.c:
+	  dashdemux: fix memory leak in gst_dash_demux_update_manifest_data
+	  new_client local variable was not freed in case of errors.
+	  Also, the buffer is not unmapped.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=760120
+
+2015-11-10 22:01:38 +0000  Florin Apostol <florin.apostol@oregan.net>
+
+	* ext/dash/gstdashdemux.c:
+	* ext/dash/gstmpdparser.c:
+	* ext/dash/gstmpdparser.h:
+	* tests/check/elements/dash_mpd.c:
+	  mpdparser: renamed gst_mpd_client_get_next_segment_availability_end_time to gst_mpd_client_get_next_segment_availability_start_time
+	  The function actually returns the segment availability start time (as defined by the standard).
+	  That is at the end of the segment, but it is called availability start time.
+	  Availability end time is something else (the time when the segment is no longer
+	  available on the server). The function name was misleading.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=757655
+
+2015-11-10 22:00:58 +0000  Florin Apostol <florin.apostol@oregan.net>
+
+	* ext/dash/gstmpdparser.c:
+	  mpdparser: corrected getting segment availability
+	  https://bugzilla.gnome.org/show_bug.cgi?id=757655
+
+2015-11-19 15:30:34 +0000  Florin Apostol <florin.apostol@oregan.net>
+
+	* tests/check/elements/dash_mpd.c:
+	  mpdparser: tests: added unit test for getting segment availability when segment timeline is used
+	  https://bugzilla.gnome.org/show_bug.cgi?id=757655
+
+2016-01-07 12:50:06 +0000  Florin Apostol <florin.apostol@oregan.net>
+
+	* tests/check/elements/adaptive_demux_engine.c:
+	  adaptive_demux: tests: improved validation of pads
+	  When removing a pad, the on_demuxPadRemoved function must find a stream
+	  for that pad.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=760328
+
+2016-01-07 12:48:12 +0000  Florin Apostol <florin.apostol@oregan.net>
+
+	* tests/check/elements/adaptive_demux_engine.c:
+	  adaptive_demux: tests: fix pad used for AppSink event
+	  on_demuxNewPad registered the on_appsink_event callback on a wrong pad.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=760328
+
+2016-01-08 16:25:12 +0000  Florin Apostol <florin.apostol@oregan.net>
+
+	* tests/check/elements/adaptive_demux_engine.c:
+	* tests/check/elements/adaptive_demux_engine.h:
+	  adaptivedemux: tests: remove unused demux_sent_eos callback
+	  The demux_sent_eos callback is unused in tests. It was also registered on
+	  a wrong pad, so it actually triggered when demux received eos from a
+	  fragment download.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=760328
+
+2016-01-08 18:17:21 +0000  Florin Apostol <florin.apostol@oregan.net>
+
+	* tests/check/elements/dash_demux.c:
+	  adaptivedemux: tests: remove unneeded youtube xmlns from manifests
+	  https://bugzilla.gnome.org/show_bug.cgi?id=760328
+
+2016-02-09 14:07:54 +1100  Alessandro Decina <alessandro.d@gmail.com>
+
+	* sys/applemedia/vtdec.c:
+	  applemedia: vtdec: implement GstElement::set_context
+
+2016-02-09 14:04:09 +1100  Alessandro Decina <alessandro.d@gmail.com>
+
+	* sys/applemedia/vtdec.c:
+	  applemedia: vtdec: update copyright
+
+2016-02-09 13:42:48 +1100  Alessandro Decina <alessandro.d@gmail.com>
+
+	* sys/applemedia/avfvideosrc.m:
+	  applemedia: avfvideosrc: implement GstElement::set_context
+	  Needed to properly handle gst.gl.app_context(s).
+
+2016-02-09 13:39:18 +1100  Alessandro Decina <alessandro.d@gmail.com>
+
+	* sys/applemedia/avfvideosrc.m:
+	  applemedia: avfvideosrc: add myself to the copyright holders
+
+2016-02-09 13:56:32 +1100  Matthew Waters <matthew@centricular.com>
+
+	* win32/common/libgstgl.def:
+	  gl: update win32 .def file
+
+2016-02-09 13:08:21 +1100  Matthew Waters <matthew@centricular.com>
+
+	* gst-libs/gst/gl/gstglsyncmeta.c:
+	  glsyncmeta: add compatibility definition for GL_TIMEOUT_IGNORED
+
+2016-02-09 12:14:04 +1100  Matthew Waters <matthew@centricular.com>
+
+	* ext/gtk/gtkgstglwidget.c:
+	* gst-libs/gst/gl/gstglsyncmeta.c:
+	* gst-libs/gst/gl/gstglsyncmeta.h:
+	* sys/androidmedia/gstamcvideodec.c:
+	  glsyncmeta: separate out gpu/cpu waits.
+	  CPU waits are more expensive and are only required if the CPU is ever going to
+	  access the data. GPU waits perform inter-context synchronisation and are cheaper
+	  as they don't require CPU intervention.
+
+2016-02-08 23:17:34 +0000  Luis de Bethencourt <luisbg@osg.samsung.com>
+
+	* gst-libs/gst/adaptivedemux/gstadaptivedemux.c:
+	  adaptivedemux: remove overwritten value
+	  ret is overwitten before used with the return of the subclass seek.
+	  CID #1352044
+
+2016-02-08 15:00:35 +0000  Luis de Bethencourt <luisbg@osg.samsung.com>
+
+	* ext/resindvd/resindvdbin.c:
+	  resindvd: remove commented out include
+	  Commit 211828979b8c10abf3c74d964bc698dbda4d497d removed rsnaudiomunge,
+	  no need for this commented out include for a file that doesn't exist
+	  anymore.
+
+2016-02-08 14:26:46 +0000  Luis de Bethencourt <luisbg@osg.samsung.com>
+
+	* ext/resindvd/resindvdsrc.c:
+	* ext/resindvd/resindvdsrc.h:
+	  Revert "resindvd: get rid of _stdint.h include"
+	  This reverts commit 0eff6e1991cb24cb65f07c481742782acaa8ec62.
+	  Breaks the build when linking with dvdnav.h
+
+2016-02-08 13:43:22 +0000  Luis de Bethencourt <luisbg@osg.samsung.com>
+
+	* ext/x265/gstx265enc.h:
+	  x265enc: get rid of _stdint.h include
+	  It was never needed since it doesn't use any standard integer fixed width
+	  types. Only the Glib types.
+
+2016-02-08 13:32:46 +0000  Luis de Bethencourt <luisbg@osg.samsung.com>
+
+	* ext/resindvd/resindvdsrc.c:
+	* ext/resindvd/resindvdsrc.h:
+	  resindvd: get rid of _stdint.h include
+
+2016-02-08 12:44:53 +0100  Piotr Drąg <piotrdrag@gmail.com>
+
+	* po/POTFILES.skip:
+	  po: update POTFILES
+	  https://bugzilla.gnome.org/show_bug.cgi?id=761704
+
+2016-02-08 12:23:12 +1100  Matthew Waters <matthew@centricular.com>
+
+	* ext/gl/effects/gstgleffectidentity.c:
+	  gleffects: identity: add the shader to the hash table
+	  So that we don't recreate it every frame and leak memory.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=761578
+
+2016-02-05 20:02:22 -0300  Thiago Santos <thiagoss@osg.samsung.com>
+
+	* tests/check/Makefile.am:
+	  tests: extend the AM_TESTS_ENVIRONMENT from check.mak
+	  To get the CK_DEFAULT_TIMEOUT defined for all tests
+	  https://bugzilla.gnome.org/show_bug.cgi?id=761472
+
+2016-02-05 18:06:32 -0300  Thiago Santos <thiagoss@osg.samsung.com>
+
+	* README:
+	* common:
+	  Automatic update of common submodule
+	  From e97c9bb to b64f03f
+
+2016-02-05 15:34:51 +0000  Luis de Bethencourt <luisbg@osg.samsung.com>
+
+	* gst/rtp/gstrtph265depay.c:
+	* gst/rtp/gstrtph265depay.h:
+	  gstrtph265depay: keep consistency with rtph264depay
+	  Use gst_rtp_drop_meta() and the same function prototype for
+	  gst_rtp_copy_meta() to keep consistency with the RTP elements in
+	  gst-plugins-good
+
+2016-02-05 21:33:38 +0530  Arun Raghavan <arun@centricular.com>
+
+	* sys/tinyalsa/tinyalsasink.c:
+	  tinyalsasink: Use glib CLAMP() instead of our own macro
+
+2016-02-05 13:56:34 +0000  Luis de Bethencourt <luisbg@osg.samsung.com>
+
+	* gst/rtp/gstrtph265depay.c:
+	  rtph265depay: fix termination of access unit
+	  Only consider the access unit complete when the next-occurring VCL NAL unit
+	  has the first bit after its NAL unit header equal to 1.
+
+2016-02-02 13:50:25 +0000  David Waring <david.waring@rd.bbc.co.uk>
+
+	* gst-libs/gst/adaptivedemux/gstadaptivedemux.c:
+	  adaptivedemux: Update position in stream->segment for new stream segment message.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=761458
+
+2016-02-05 15:43:22 +0530  Arun Raghavan <arun@centricular.com>
+
+	* sys/tinyalsa/tinyalsasink.c:
+	  tinyalsasink: Limit period size and count to what the h/w permits
+
+2016-02-05 10:43:49 +1100  Matthew Waters <matthew@centricular.com>
+
+	* gst-libs/gst/gl/gstgldebug.c:
+	* gst-libs/gst/gl/gstglfeature.h:
+	* gst-libs/gst/gl/gstglsl_private.h:
+	* gst-libs/gst/gl/wayland/wayland_event_source.h:
+	* win32/common/libgstgl.def:
+	  gl: add .def file for msvc builds
+	  Also internalize some API from being exported.
+
+2016-02-02 17:02:41 -0300  Thiago Santos <thiagoss@osg.samsung.com>
+
+	* tests/check/Makefile.am:
+	* tests/check/elements/.gitignore:
+	* tests/check/elements/mssdemux.c:
+	  tests: mssdemux: add unit tests
+	  Adds unit tests similar to the ones that we have for DASH and HLS.
+	  Tests:
+	  * manifest parsing finishes successfully
+	  * some queries (duration, seekable, latency)
+	  * seeking with various values and flags
+
+2016-02-02 16:54:10 -0300  Thiago Santos <thiagoss@osg.samsung.com>
+
+	* ext/smoothstreaming/gstmssdemux.c:
+	* ext/smoothstreaming/gstmssmanifest.c:
+	* ext/smoothstreaming/gstmssmanifest.h:
+	  mssdemux: implement snap seeking
+	  Implement snap seek flags handling in stream_seek to allow the
+	  parent class to handle it for us
+	  https://bugzilla.gnome.org/show_bug.cgi?id=759158
+
+2016-02-02 16:51:22 -0300  Thiago Santos <thiagoss@osg.samsung.com>
+
+	* ext/smoothstreaming/gstmssdemux.c:
+	  mssdemux: use correct seek position on reverse seeks
+	  Otherwise it was always using the 'start' value, leading to wrong
+	  behavior
+
+2016-02-02 11:30:31 -0300  Thiago Santos <thiagoss@osg.samsung.com>
+
+	* ext/smoothstreaming/gstmssdemux.c:
+	  mssdemux: only update download position if the seek requests to
+	  Some seeks are only updating the stop position, there is no need
+	  to change the current downloading position.
+
+2016-02-02 09:52:17 -0300  Thiago Santos <thiagoss@osg.samsung.com>
+
+	* ext/smoothstreaming/gstmssmanifest.c:
+	  mssdemux: do not assert on fragment reloads for non-live
+	  It can be used as a resource to verify if the server has updated
+	  something in the Manifest when downloads are failing
+
+2016-01-27 10:48:53 -0300  Thiago Santos <thiagoss@osg.samsung.com>
+
+	* tests/check/elements/dash_demux.c:
+	  tests: dashdemux: add tests for snap flags seeking
+	  Similar to HLS but DASH has the extra issue that it can have
+	  multiple streams so snapping can be tricky as streams usually
+	  won't be aligned.
+	  For now, those tests handle the case of only having a single
+	  stream.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=759158
+
+2016-02-01 10:49:23 -0300  Thiago Santos <thiagoss@osg.samsung.com>
+
+	* ext/dash/gstdashdemux.c:
+	* ext/dash/gstmpdparser.c:
+	  dashdemux: implement snap seek handling
+	  Handle snap seeking at the stream_seek method and let superclass
+	  do the rest to support snap seeking
+	  https://bugzilla.gnome.org/show_bug.cgi?id=759158
+
+2016-01-27 13:31:10 -0300  Thiago Santos <thiagoss@osg.samsung.com>
+
+	* ext/dash/gstdashdemux.c:
+	* ext/dash/gstmpdparser.c:
+	* ext/dash/gstmpdparser.h:
+	* ext/smoothstreaming/gstmssdemux.c:
+	* ext/smoothstreaming/gstmssmanifest.c:
+	* ext/smoothstreaming/gstmssmanifest.h:
+	* gst-libs/gst/adaptivedemux/gstadaptivedemux.c:
+	* gst-libs/gst/adaptivedemux/gstadaptivedemux.h:
+	  adaptivedemux: handle snap seeks
+	  Adaptive demuxers need to start downloading from specific positions
+	  (fragments) for every stream, this means that all streams can snap-seek
+	  to a different position when requested. Snap seeking in this case will
+	  be done in 2 steps:
+	  1) do the snap seeking on the pad that received the seek event and
+	  get the final position
+	  2) use this position to do a regular seek on the other streams to
+	  make sure they all start from the same position
+	  More arguments were added to the stream_seek function, allowing better control
+	  of how seeking is done. Knowing the flags and the playback direction allows
+	  subclasses to handle snap-seeking.
+	  And also adds a new return parameter to inform of the final
+	  selected seeking position that is used to align the other streams.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=759158
+
+2016-01-26 23:43:24 -0300  Thiago Santos <thiagoss@osg.samsung.com>
+
+	* gst-libs/gst/adaptivedemux/gstadaptivedemux.c:
+	* gst-libs/gst/adaptivedemux/gstadaptivedemux.h:
+	  adaptivedemux: add utility function to get stream from pad
+	  Simplifies the code a bit and avoid repeating this
+	  common operation
+
+2016-02-04 12:50:43 +0000  Luis de Bethencourt <luisbg@osg.samsung.com>
+
+	* gst/videoparsers/gsth264parse.c:
+	  h264parse: remove unused mview_mode value
+	  Since commit b77f8e172a3f0be6be5cb4a72e654253404e694f the new value
+	  assigned to mview_mode hasn't been used. That commit changed the following
+	  "if" check to an "else if", which means the original value of mview_mode
+	  is used.
+
+2016-02-04 12:17:31 +0000  Luis de Bethencourt <luisbg@osg.samsung.com>
+
+	* gst-libs/gst/gl/gstglquery.c:
+	  glquery: remove unnecessary pointer check
+	  All uses of query->context in gstglquery.c assume it exists. We can assume
+	  this as well before unrefing it. Furthermore, gst_object_unref() will just
+	  silently return if it ever were to not exist.
+
+2016-02-04 18:15:56 +1100  Matthew Waters <matthew@centricular.com>
+
+	* gst/videoparsers/gsth265parse.c:
+	  h265parse: avoid sending unnecessary downstream caps queries/events
+	  h265 versions of the following commits:
+	  f352691a04896d0de3381fe8ee85ada948bd6337
+	  try the current caps before querying downstream
+	  72bc7d7f736a10117fedb8e1d4013a4946cfefbc
+	  increase caps equality check for no codec_data
+	  https://bugzilla.gnome.org/show_bug.cgi?id=761014
+
+2016-02-04 16:36:28 +1100  Matthew Waters <matthew@centricular.com>
+
+	* gst/videoparsers/gsth264parse.c:
+	  h264parse: increase caps equality check for no codec_data
+	  When converting from avc to byte-stream, there will not be any codec_data
+	  in the src caps.  Remove it before the equality check to avoid sending caps
+	  events downstream on every SPS/PPS change.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=761014
+
+2016-02-04 15:34:04 +1100  Matthew Waters <matthew@centricular.com>
+
+	* gst/videoparsers/gsth264parse.c:
+	  h264parse: try the current caps before querying downstream
+	  If we have a stream that contains an unchanging SPS/PPS for every video frame,
+	  we don't need to to constantly query downstream for it's supported caps if the
+	  current caps are compatible with the negotiated caps.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=761014
+
+2016-02-04 17:31:03 +1100  Matthew Waters <matthew@centricular.com>
+
+	* gst-libs/gst/gl/gstglbasefilter.c:
+	  glbasefilter: enable qos by default
+	  Improves the responsiveness of the pipeline when resources are close/above the
+	  limitations of the hardware.
+	  Any subclass that wishes not to enable qos can do so themselves.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=761519
+
+2016-02-04 15:11:15 +1100  Matthew Waters <matthew@centricular.com>
+
+	* sys/androidmedia/gstamcvideodec.c:
+	  amcvideodec: pass the correct time value to wait_for_sync
+	  When we are not waiting, we need to pass -1 to signal that we just want to check
+	  that the frame was/n't rendered.  Avoids waiting for frames that will never be
+	  rendered.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=761014
+
+2016-02-04 15:07:44 +1100  Matthew Waters <matthew@centricular.com>
+
+	* sys/androidmedia/gstamcvideodec.c:
+	  amcvideodec: advance the ready counter ourselves when render=FALSE
+	  When not rendering the video frame, e.g. when freeing an unreleased sync frame,
+	  we will not receive a frame listener callback.
+	  Reduces the amount of 'on_frame_available miss detected' messages when dropping
+	  frames.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=761014
+
+2016-02-04 14:25:12 +1100  Jan Schmidt <jan@centricular.com>
+
+	* sys/decklink/gstdecklinkaudiosrc.cpp:
+	  decklinkaudiosrc: Fix discont tracking
+	  Don't reset the marker that's tracking disconts until
+	  either the discont disappears or we resync.
+
+2016-02-03 21:22:28 +0000  Tim-Philipp Müller <tim@centricular.com>
+
+	* sys/Makefile.am:
+	* sys/cdrom/Makefile.am:
+	* sys/cdrom/gstcdplayer.c:
+	* sys/cdrom/gstcdplayer.h:
+	* sys/cdrom/gstcdplayer_ioctl.c:
+	* sys/cdrom/gstcdplayer_ioctl.h:
+	* sys/cdrom/gstcdplayer_ioctl_bsd.h:
+	* sys/cdrom/gstcdplayer_ioctl_irix.h:
+	* sys/cdrom/gstcdplayer_ioctl_solaris.h:
+	  Remove ancient and dead cdrom control plugin
+	  This was never even ported to 0.10, and I don't think
+	  it's particularly useful, since it's just a control
+	  interface really. Let's remove it.
+
+2016-02-03 21:16:18 +0000  Tim-Philipp Müller <tim@centricular.com>
+
+	* gst-libs/gst/interfaces/photography.c:
+	* gst-libs/gst/interfaces/photography.h:
+	* gst/coloreffects/gstcoloreffects.h:
+	* gst/debugutils/fpsdisplaysink.c:
+	  docs: remove some leftover 'Since 0.10.x' markers
+
+2016-02-03 21:13:58 +0000  Tim-Philipp Müller <tim@centricular.com>
+
+	* gst/debugutils/.gitignore:
+	* gst/debugutils/Makefile.am:
+	* gst/debugutils/debugutils-marshal.list:
+	* gst/debugutils/fpsdisplaysink.c:
+	  debugutils: use generic marshaller
+
+2016-02-03 16:28:42 +0000  Vincent Penquerc'h <vincent.penquerch@collabora.co.uk>
+
+	* ext/opus/gstopusdec.c:
+	  opus: fix FEC
+	  FEC may only be used when PLC is enabled on the audio decoder,
+	  as it relies on empty buffers to generate audio from the next
+	  buffer. Hooking to the gap events doesn't work as the audio
+	  decoder does not like more buffers output than it sends.
+	  The length of data to generate using FEC from the next packet
+	  is determined by rounding the gap duration to nearest. This
+	  ensures that duration imprecision does not cause quantization
+	  to 2.5 milliseconds less than available. Doing so causes the
+	  Opus API to fail decoding. Such duration imprecision is common
+	  in live cases.
+	  The buffer to consider when determining the length of audio
+	  to be decoded is the previous buffer when using FEC, and the
+	  new buffer otherwise. In the FEC case, this means we determine
+	  the amount of audio from the previous buffer, whether it was
+	  missing or not (and get the data either from this buffer, or
+	  the current one if the previous one was missing).
+
+2016-02-03 10:59:23 +1100  Matthew Waters <matthew@centricular.com>
+
+	* ext/gl/gstgltransformation.c:
+	  gltransformation: reconfigure the src when changing to/from passthrough
+	  Otherwise it's very possible that any GL resources have not been created yet.
+
+2016-02-03 10:52:08 +1100  Matthew Waters <matthew@centricular.com>
+
+	* ext/gl/gstglvideoflip.c:
+	* ext/gl/gstglvideoflip.h:
+	  glvideoflip: correctly update the output caps on method changes
+	  When changing methods we may need different output caps.
+
+2016-02-02 11:20:17 -0800  Reynaldo H. Verdejo Pinochet <reynaldo@osg.samsung.com>
+
+	* sys/tinyalsa/tinyalsasink.c:
+	  tinyalsasink: fix tinalsa typo
+
+2016-02-02 11:06:52 -0800  Reynaldo H. Verdejo Pinochet <reynaldo@osg.samsung.com>
+
+	* sys/tinyalsa/tinyalsasink.c:
+	  tinyalsasink: fix sample launch line
+
+2016-02-02 14:46:30 +0000  David Waring <david.waring@rd.bbc.co.uk>
+
+	* gst-libs/gst/player/Makefile.am:
+	  libs: player: use configured GST_PKG_CONFIG_PATH when invoking the introspection scanner
+	  https://bugzilla.gnome.org/show_bug.cgi?id=761460
+
+2016-02-02 15:20:48 +0000  Vincent Penquerc'h <vincent.penquerch@collabora.co.uk>
+
+	* ext/opus/gstopusdec.c:
+	  opusdec: fix wrong buffer being checked for missing data
+	  This caused a decoding error if the resulting (wrong) buffer size
+	  was passed to the Opus decoding API.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=758158
+
+2016-02-02 16:26:09 +0530  Arun Raghavan <arun@centricular.com>
+
+	* sys/tinyalsa/tinyalsasink.c:
+	  tinyalsasink: Use int type if we support a single rate/channel count
+	  Avoids using an int range if the field we're setting is not actually a
+	  range.
+
+2016-02-02 18:36:34 +1100  Matthew Waters <matthew@centricular.com>
+
+	* gst-libs/gst/gl/eagl/gstglcontext_eagl.m:
+	  Revert "gl/eagl: try getting a gles3 context"
+	  This reverts commit 96b9666d596be115fd4b446ef846508b7fd05c24.
+	  This reverts commit d11385d167d8843604ea23a05e2dea40b8bbac35.
+	  This breaks the texture sharing with the applemedia elements as
+	  CVOpenGLESTextureCache seems to have an arbitrary restriction on GLES2 only.
+
+2016-02-02 16:21:14 +1100  Matthew Waters <matthew@centricular.com>
+
+	* gst-libs/gst/gl/gstglcolorconvert.c:
+	  glcolorconvert: don't skip subset structures
+	  We may need them to transform into a different set of formats.
+	  Fixes YUV->YUV with two glcolorconverts, e.g:
+	  format=I420 ! glcolorconvert ! glcolorconvert ! format=NV12
+
+2016-02-02 16:19:54 +1100  Matthew Waters <matthew@centricular.com>
+
+	* gst-libs/gst/gl/gstglbasefilter.c:
+	  glbasefilter: always call gl_start when not called already
+	  Fixes elements transitioning out of passthrough mode using GL resources that
+	  hadn'e been allocated yet.
+
+2016-02-02 15:14:25 +1100  Matthew Waters <matthew@centricular.com>
+
+	* gst-libs/gst/gl/gstglcolorconvert.c:
+	  glcolorconvert: fix RGB,rectangle->planar YUV conversion
+	  Converting to GRAY is no fun.  Another case of normalized vs unnormalized
+	  texture coordinates.
+
+2016-02-02 13:51:18 +1100  Matthew Waters <matthew@centricular.com>
+
+	* gst-libs/gst/gl/gstglcolorconvert.c:
+	  glcolorconvert: fix YUY2/UYVY,rectangle->RGB conversion
+	  1.0 / width does not offset by one pixel in rectangular textures (which use
+	  unnormalized coordinates).
+	  Provide the actual pixel offset as a uniform to the shader.
+
+2016-01-27 16:42:09 +0530  Arun Raghavan <arun@centricular.com>
+
+	* configure.ac:
+	* sys/Makefile.am:
+	* sys/tinyalsa/Makefile.am:
+	* sys/tinyalsa/tinyalsa.c:
+	* sys/tinyalsa/tinyalsasink.c:
+	* sys/tinyalsa/tinyalsasink.h:
+	  tinyalsa: Add a new sink plugin using tinyalsa
+	  This uses the tinyalsa library to playback to an ALSA device. Future
+	  work can include using the mmap interface.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=761230
+
+2016-02-02 12:50:26 +1100  Matthew Waters <matthew@centricular.com>
+
+	* gst-libs/gst/gl/gstglcolorconvert.c:
+	  glcolorconvert: perform better negotiation
+	  1. Correctly describe what we can caps we can transform to/from.
+	  i.e. no YUV->YUV or GRAY->YUV or YUV->GRAY (except for passthrough).
+	  2. Prefer similar formats and ignore incompatible formats on fixation.
+
+2016-01-26 23:15:10 -0300  Thiago Santos <thiagoss@osg.samsung.com>
+
+	* tests/check/elements/dash_demux.c:
+	  tests: dashdemux: add test for updating stop position
+	  Test that a seek that only updates the stop position works
+	  as expected
+
+2016-02-01 09:48:33 -0300  Thiago Santos <thiagoss@osg.samsung.com>
+
+	* ext/dash/gstdashdemux.c:
+	  dashdemux: only update current reading position when needed
+	  If the seek doesn't set the start/stop position, no need to
+	  reposition the download index.
+
+2016-01-29 20:34:42 -0300  Thiago Santos <thiagoss@osg.samsung.com>
+
+	* ext/dash/gstdashdemux.c:
+	  dashdemux: respect seeking parameter
+	  Instead of using the segment values, use the parameter
+	  requested in the seeking argument
+
+2016-02-01 14:25:42 -0300  Thiago Santos <thiagoss@osg.samsung.com>
+
+	* tests/check/elements/dash_mpd.c:
+	  tests: dash: fix dash tests after index fix
+	  8e788f284508612982e8e38336eed676c2eec35a broke one of the
+	  dash mpd tests. This updates and fixes it.
+
+2016-02-01 12:23:32 +0000  Julien Isorce <j.isorce@samsung.com>
+
+	* gst-libs/gst/gl/gstglwindow.c:
+	  gstglwindow: initialize navigation_loop to NULL
+	  Useful when gst_gl_window.c::gst_gl_window_new is not used.
+	  This is the case when using a custom GstGLWindow.
+	  (ex: GstGLWindowGPUProcess from Chromium)
+
+2016-02-01 09:26:37 +0000  Tim-Philipp Müller <tim@centricular.com>
+
+	* gst-libs/gst/gl/eagl/gstglcontext_eagl.m:
+	  gl: eagl: fix build
+	  gstglcontext_eagl.m:238:45: error: too few arguments to function call,
+	  expected at least 4, have 3
+
+2016-02-01 15:13:03 +1100  Alessandro Decina <alessandro.d@gmail.com>
+
+	* ext/gl/gstgldownloadelement.c:
+	  gldownload: allow video/x-raw as input
+	  ...and just passthrough. This is useful for pipelines where downstream must be
+	  non-GL but upstream can optionally be GL.
+
+2016-02-01 12:57:32 +1100  Matthew Waters <matthew@centricular.com>
+
+	* gst-libs/gst/gl/eagl/gstglcontext_eagl.m:
+	  gl/eagl: try getting a gles3 context
+	  Fallback to a gles2 context if that fails
+
+2016-01-21 16:10:48 +0800  Wang Xin-yu (王昕宇) <comicfans44@gmail.com>
+
+	* ext/gl/gstglvideomixer.c:
+	  glvideomixer: fix checker vbo leak
+	  https://bugzilla.gnome.org/show_bug.cgi?id=760925
+
+2016-01-24 15:47:12 +0100  Holger Kaelberer <holger.k@elberer.de>
+
+	* tests/examples/qt/qml/main.qml:
+	  tests: fix warning in qml example
+	  https://bugzilla.gnome.org/show_bug.cgi?id=756082
+
+2016-01-24 15:42:32 +0100  Holger Kaelberer <holger.k@elberer.de>
+
+	* configure.ac:
+	  qt: Fix build for android
+	  https://bugzilla.gnome.org/show_bug.cgi?id=756082
+
+2016-02-01 01:01:10 +0000  Tim-Philipp Müller <tim@centricular.com>
+
+	* ext/snapshot/Makefile.am:
+	* ext/snapshot/gstsnapshot.c:
+	* ext/snapshot/gstsnapshot.h:
+	  Remove dead snapshot plugin
+	  Was never ported and doesn't look like
+	  we want it or need it in this form, can
+	  do the same with the libgstvideo sample
+	  conversion utility API now, but better
+	  and in a more flexible way.
+
+2016-02-01 00:49:48 +0000  Tim-Philipp Müller <tim@centricular.com>
+
+	* configure.ac:
+	* ext/rsvg/gstrsvgdec.h:
+	* ext/rsvg/gstrsvgoverlay.h:
+	  rsvg: bump requirement to 2.36.2
+	  Which allows us to simplify the configure check and
+	  some special-casing in the code, and is plenty old
+	  in any case.
+
+2016-02-01 00:29:37 +0000  Tim-Philipp Müller <tim@centricular.com>
+
+	* ext/Makefile.am:
+	* ext/libfame/Makefile.am:
+	* ext/libfame/README:
+	* ext/libfame/gstlibfame.c:
+	* ext/libfame/gstlibfame.h:
+	* m4/Makefile.am:
+	* m4/libfame.m4:
+	  Remove dead libfame plugin
+	  Was never even ported to 0.10, and the lib
+	  has been unmaintained for ever and doesn't
+	  even seem to be packaged any more.
+
+2016-01-31 19:09:57 +0000  Tim-Philipp Müller <tim@centricular.com>
+
+	* ext/Makefile.am:
+	* ext/audiofile/Makefile.am:
+	* ext/audiofile/README:
+	* ext/audiofile/gstaf.c:
+	* ext/audiofile/gstafparse.c:
+	* ext/audiofile/gstafparse.h:
+	* ext/audiofile/gstafsink.c:
+	* ext/audiofile/gstafsink.h:
+	* ext/audiofile/gstafsrc.c:
+	* ext/audiofile/gstafsrc.h:
+	* po/POTFILES.skip:
+	  Remove dead audiofile plugin
+	  This was never even ported to 0.10.
+
+2016-01-31 19:04:20 +0000  Tim-Philipp Müller <tim@centricular.com>
+
+	* .gitignore:
+	* configure.ac:
+	* docs/plugins/gst-plugins-bad-plugins.args:
+	* docs/plugins/gst-plugins-bad-plugins.interfaces:
+	* ext/Makefile.am:
+	* ext/gsettings/Makefile.am:
+	* ext/gsettings/gstgsettings.h:
+	* ext/gsettings/gstgsettingsaudiosink.c:
+	* ext/gsettings/gstgsettingsaudiosink.h:
+	* ext/gsettings/gstgsettingsaudiosrc.c:
+	* ext/gsettings/gstgsettingsaudiosrc.h:
+	* ext/gsettings/gstgsettingsvideosink.c:
+	* ext/gsettings/gstgsettingsvideosink.h:
+	* ext/gsettings/gstgsettingsvideosrc.c:
+	* ext/gsettings/gstgsettingsvideosrc.h:
+	* ext/gsettings/gstswitchsink.c:
+	* ext/gsettings/gstswitchsink.h:
+	* ext/gsettings/gstswitchsrc.c:
+	* ext/gsettings/gstswitchsrc.h:
+	* ext/gsettings/org.freedesktop.gstreamer.default-elements.gschema.xml.in:
+	* ext/gsettings/plugin.c:
+	* m4/gsettings.m4:
+	* po/POTFILES.in:
+	* tests/check/Makefile.am:
+	  Remove gsettings plugin which was never ported
+	  Don't think we need this any longer or want to
+	  support it, and clearly no one has been missing
+	  it all these years either, so let's just get rid
+	  of it.
+
+2016-01-31 16:02:33 +0000  Tim-Philipp Müller <tim@centricular.com>
+
+	* ext/smoothstreaming/Makefile.am:
+	* ext/smoothstreaming/gstmssdemux.h:
+	  smoothstreaming: remove unused dependency on uridownloader
+
+2016-01-31 14:42:21 +0000  Tim-Philipp Müller <tim@centricular.com>
+
+	* configure.ac:
+	* ext/faad/Makefile.am:
+	* ext/faad/gstfaad.c:
+	* ext/faad/gstfaad.h:
+	  faad: simplify configure check and require faad >= 2.7
+	  Just check whether LATM is defined which is only available
+	  in 2.7 and later. Allows us to simplify the configure check
+	  a little and we can get rid of some hackish workarounds for
+	  problems with earlier version headers.
+
+2016-01-30 17:31:41 +0000  Tim-Philipp Müller <tim@centricular.com>
+
+	* sys/dvb/gstdvbsrc.c:
+	  dvbsrc: drop unnecessary use of _stdint.h
+
+2016-01-29 23:39:26 +0100  Sebastian Dröge <sebastian@centricular.com>
+
+	* gst/mxf/mxftypes.c:
+	  mxftypes: Generate UUIDs according to RFC4122 version 4 (aka random)
+	  Instead of fully random UUIDs, these should follow a scheme.
+
+2016-01-29 21:09:44 +0100  Sebastian Dröge <sebastian@centricular.com>
+
+	* gst/mxf/mxfmetadata.c:
+	  mxfmetadata: Properly write video line map data as an array of 32 bit integers
+
+2016-01-29 20:58:27 +0100  Sebastian Dröge <sebastian@centricular.com>
+
+	* gst/mxf/mxfmetadata.c:
+	  mxfmetadata: DMSchemes in the Preface is a required field
+	  Even if it has 0 entries.
+
+2016-01-29 18:41:52 +0100  Sebastian Dröge <sebastian@centricular.com>
+
+	* gst/mxf/mxful.c:
+	  mxful: Fix Content Storage UL
+
+2016-01-29 18:28:03 +0100  Sebastian Dröge <sebastian@centricular.com>
+
+	* gst/mxf/mxfmetadata.c:
+	  mxfmetadata: Best effort values must be written and if unset must contain the distinguished value
+	  It's invalid to not write them at all.
+
+2016-01-29 17:36:11 +0100  Sebastian Dröge <sebastian@centricular.com>
+
+	* gst/mxf/mxful.c:
+	  mxful: Add missing OperationalPattern UL, which fixes an off-by-one with the others
+
+2016-01-29 17:07:08 +0100  Sebastian Dröge <sebastian@centricular.com>
+
+	* gst/mxf/mxfmux.c:
+	  mxfmux: Our body partition is always complete and closed
+	  We have no metadata in it.
+
+2016-01-29 17:02:01 +0100  Sebastian Dröge <sebastian@centricular.com>
+
+	* gst/mxf/mxfmux.c:
+	  mxfmux: Use IndexSID of 2 instead of 1
+	  Some tools complain if essence and index have the same SID.
+
+2016-01-29 16:38:23 +0100  Sebastian Dröge <sebastian@centricular.com>
+
+	* gst/mxf/mxfmux.c:
+	  mxfmux: Rewrite body partition pack on EOS and mark it as complete/closed
+
+2016-01-29 23:28:59 +1100  Matthew Waters <matthew@centricular.com>
+
+	* sys/androidmedia/gstamcvideodec.c:
+	  amcvideodec: guard against not finding a valid frame in loop
+	  Fixes sporadic crashes on finishing decoding a video.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=761014
+
+2016-01-29 15:24:36 +1100  Matthew Waters <matthew@centricular.com>
+
+	* sys/androidmedia/gstamcvideodec.c:
+	* sys/androidmedia/gstamcvideodec.h:
+	* sys/androidmedia/org/freedesktop/gstreamer/androidmedia/GstAmcOnFrameAvailableListener.java:
+	  amcvideodec: set our data pointer in java to NULL on close
+	  The frame available callback can be called after deconfiguring the amc codec.
+	  Guard against this by setting the back pointer to NULL on close() and ignoring
+	  any NULL data pointer.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=761014
+
+2016-01-29 15:07:59 +1100  Alessandro Decina <alessandro.d@gmail.com>
+
+	* sys/applemedia/Makefile.am:
+	* sys/applemedia/avfvideosrc.m:
+	* sys/applemedia/glcontexthelper.c:
+	* sys/applemedia/glcontexthelper.h:
+	* sys/applemedia/vtdec.c:
+	* sys/applemedia/vtdec.h:
+	  applemedia: refactor GL context code
+	  Rework the GL context code. Now both avfvideosrc and vtdec can create an
+	  internal GL context for pushing textures. Both elements will still try to
+	  use/switch to a local context where available (including after RECONFIGURE
+	  events).
+
+2016-01-29 10:35:15 +0800  Wang Xin-yu (王昕宇) <comicfans44@gmail.com>
+
+	* gst-libs/gst/gl/glprototypes/base.h:
+	  glprototypes: fix parameter type of glGenBuffers
+	  The number of buffers should be GLsizei instead of GLuint.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=761272
+
+2015-12-08 14:09:58 +0800  Haihua Hu <b55597@freescale.com>
+
+	* ext/gl/effects/gstgleffectssources.c:
+	  gleffects: fix gleffects fisheye shader compile error
+	  On some embedded systems, sqrt() is not supported in the shader,
+	  use the actual value of sqrt(2) instead.
+	  Signed-off-by: Haihua Hu <b55597@freescale.com>
+	  Bugzilla: https://bugzilla.gnome.org/show_bug.cgi?id=761271
+
+2016-01-29 14:03:26 +1100  Matthew Waters <matthew@centricular.com>
+
+	* ext/gl/gstglvideomixer.c:
+	  glvideomixer: par may not exist in the caps
+	  Fixes a critical in the gst-validate tests:
+	  gst_structure_fixate_field_nearest_fraction: assertion 'gst_structure_has_field
+	  (structure, field_name)
+
+2016-01-29 12:45:57 +1100  Matthew Waters <matthew@centricular.com>
+
+	* gst-libs/gst/gl/egl/gstglcontext_egl.c:
+	* gst-libs/gst/gl/gstglcontext.c:
+	  glcontext: back out unintended lost_context changes
+
+2016-01-28 16:39:07 +1100  Matthew Waters <matthew@centricular.com>
+
+	* gst-libs/gst/gl/egl/gstglcontext_egl.c:
+	* gst-libs/gst/gl/egl/gstglcontext_egl.h:
+	* gst-libs/gst/gl/gstglcontext.c:
+	* gst-libs/gst/gl/utils/opengl_versions.h:
+	  egl: implement selecting opengl3 contexts
+
+2016-01-28 14:31:33 +1100  Matthew Waters <matthew@centricular.com>
+
+	* gst-libs/gst/gl/egl/gsteglimagememory.c:
+	* gst-libs/gst/gl/egl/gstglcontext_egl.c:
+	* gst-libs/gst/gl/egl/gstglcontext_egl.h:
+	  gl/egl: pass the error value to get_error_string()
+
+2016-01-28 18:20:44 +0100  Aurélien Zanelli <aurelien.zanelli@parrot.com>
+
+	* gst/rawparse/gstvideoparse.c:
+	  videoparse: initialize update_size to FALSE when updating info
+	  Otherwise, behavior will be undefined when no strides/offsets are set
+	  and it will likely go wrong.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=760270
+
+2016-01-28 11:56:36 -0500  Nicolas Dufresne <nicolas.dufresne@collabora.com>
+
+	* gst/rawparse/gstvideoparse.c:
+	  videoparse: Fix framesize calculation
+	  When the framesize is not specified, we try and calculate a size from
+	  the strides and offset information. This was done with the sum of
+	  offsets + the size of the last frame. That is just wrong method. We also
+	  need to account for video meta that may be flipping two planes. An
+	  example is if you convert I420 to YV12 by flipping the two last offsets.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=760270
+
+2016-01-28 19:36:47 +0100  Sebastian Dröge <sebastian@centricular.com>
+
+	* gst/gdp/gstgdpdepay.c:
+	* gst/gdp/gstgdpdepay.h:
+	  gdpdepay: Add ts-offset property to adjust buffer timestamps
+
+2016-01-29 04:50:42 +1100  Jan Schmidt <jan@centricular.com>
+
+	* pkgconfig/gstreamer-bad-audio-uninstalled.pc.in:
+	* pkgconfig/gstreamer-bad-audio.pc.in:
+	* pkgconfig/gstreamer-bad-base-uninstalled.pc.in:
+	* pkgconfig/gstreamer-bad-base.pc.in:
+	* pkgconfig/gstreamer-bad-video-uninstalled.pc.in:
+	* pkgconfig/gstreamer-bad-video.pc.in:
+	* pkgconfig/gstreamer-gl-uninstalled.pc.in:
+	* pkgconfig/gstreamer-gl.pc.in:
+	  pkg-config: Don't generate and install pkg-config with relative paths
+	  Don't put relative paths in pkg-config files, including uninstalled
+	  ones. For those, use @abs_topbuilddir@ and @abs_topsrcdir@ as we
+	  do elsewhere.
+	  Remove libraries= directives, which doesn't seem to be a pkg-config
+	  variable that actually exists, but has been in all our pkg-config
+	  files for as long as they've existed.
+
+2016-01-28 16:49:53 +0100  Sebastian Dröge <sebastian@centricular.com>
+
+	* gst/mxf/mxfmpeg.c:
+	  mxfmpeg: Write the correct essence container UL for all codecs
+
+2016-01-28 16:41:31 +0100  Sebastian Dröge <sebastian@centricular.com>
+
+	* gst/mxf/mxfmpeg.c:
+	  mxfmpeg: Write version number into the picture essence coding UL
+
+2016-01-28 16:32:34 +0100  Sebastian Dröge <sebastian@centricular.com>
+
+	* gst/mxf/mxfmux.c:
+	  mxfmux: Write a timecode track into the source package too
+
+2016-01-11 15:47:24 +0100  Aurélien Zanelli <aurelien.zanelli@parrot.com>
+
+	* gst/rawparse/gstvideoparse.c:
+	* gst/rawparse/gstvideoparse.h:
+	  videoparse: use decide_allocation to check if downstream supports videometa
+	  If yes, we add them to each output buffers and we avoid frame copy.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=760270
+
+2016-01-11 15:46:16 +0100  Aurélien Zanelli <aurelien.zanelli@parrot.com>
+
+	* gst/rawparse/gstrawparse.c:
+	* gst/rawparse/gstrawparse.h:
+	  rawparse: add 'decide_allocation' vfunc to let subclass parse an allocation query
+	  And so send an allocation query. This could be used to check whether
+	  downstream element supports some metas or not.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=760270
+
+2016-01-08 17:17:01 +0100  Aurélien Zanelli <aurelien.zanelli@parrot.com>
+
+	* gst/rawparse/gstrawparse.c:
+	  rawparse: use size of buffer we got from adapter
+	  Otherwise position in stream could be wrong if subclass 'pre_push_frame'
+	  method changes the buffer size.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=760270
+
+2016-01-07 14:27:27 +0100  Aurélien Zanelli <aurelien.zanelli@parrot.com>
+
+	* gst/rawparse/gstvideoparse.c:
+	* gst/rawparse/gstvideoparse.h:
+	  videoparse: add properties to set framesize, strides and planes offsets
+	  To make parser work with image having non-standard strides, plane
+	  offsets or with padding between images.
+	  For now, since element doesn't check for videometa, we can't directly
+	  push buffers when these properties are set so it convert the frame
+	  in the pre_push_buffer method to remove any custom padding.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=760270
+
+2016-01-08 15:21:28 +0100  Aurélien Zanelli <aurelien.zanelli@parrot.com>
+
+	* gst/rawparse/gstrawparse.c:
+	* gst/rawparse/gstrawparse.h:
+	* gst/rawparse/gstvideoparse.c:
+	  rawparse: rename 'set_buffer_flags' vfunc to 'pre_push_buffer'
+	  to allow subclass to change other fields of the buffer.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=760270
+
+2016-01-07 14:18:08 +0100  Aurélien Zanelli <aurelien.zanelli@parrot.com>
+
+	* gst/rawparse/gstvideoparse.c:
+	* gst/rawparse/gstvideoparse.h:
+	  videoparse: cache video info in instance
+	  To avoid initializing and filling video info each time we need it.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=760270
+
+2016-01-28 15:38:45 +0100  Sebastian Dröge <sebastian@centricular.com>
+
+	* gst/mxf/mxfmetadata.c:
+	* gst/mxf/mxful.c:
+	* gst/mxf/mxful.h:
+	  mxfmux: Write This Generation UID into the Identification metadata
+	  It's required according to the standard and we forgot to actually write it to
+	  the file although we stored it in the data structures.
+
+2016-01-28 15:29:01 +0100  Sebastian Dröge <sebastian@centricular.com>
+
+	* gst/mxf/mxfmetadata.c:
+	  mxfmetadata: Add workaround for ffmpeg only writing one Video Line Map value
+	  https://ffmpeg.org/pipermail/ffmpeg-devel/2016-January/188202.html
+
+2015-10-14 21:13:57 +1100  Matthew Waters <matthew@centricular.com>
+
+	* ext/gl/gstglmixer.c:
+	* ext/gl/gstglstereomix.c:
+	* ext/gl/gstglvideomixer.c:
+	* gst-libs/gst/video/gstvideoaggregator.c:
+	* gst-libs/gst/video/gstvideoaggregator.h:
+	* gst/compositor/compositor.c:
+	  videoaggregator: don't do caps processing that is not overridable
+	  Allows the subclass to completely override the chosen src caps.
+	  This is needed as videoaggregator generally has no idea exactly
+	  what operation is being performed.
+	  - Adds a fixate_caps vfunc for fixation
+	  - Merges gst_video_aggregator_update_converters() into
+	  gst_videoaggregator_update_src_caps() as we need some of its info
+	  for proper caps handling.
+	  - Pass the downstream caps to the update_caps vfunc
+	  https://bugzilla.gnome.org/show_bug.cgi?id=756207
+
+2016-01-27 20:23:21 +1100  Matthew Waters <matthew@centricular.com>
+
+	* ext/gl/gstglcolorbalance.c:
+	  glcolorbalance: return HARDWARE from get_balance_type
+
+2016-01-27 20:04:00 +1100  Matthew Waters <matthew@centricular.com>
+
+	* ext/gl/gstglsinkbin.c:
+	* ext/gl/gstglsinkbin.h:
+	  glsinkbin: add glcolorbalance element
+	  This makes playbin not plug videobalance as glcolorbalance already exists and
+	  implements the GstColorBalance interface.
+
+2016-01-27 19:56:36 +1100  Matthew Waters <matthew@centricular.com>
+
+	* ext/gl/gstglvideomixer.c:
+	* gst-libs/gst/gl/Makefile.am:
+	* gst-libs/gst/gl/gl.h:
+	* gst-libs/gst/gl/gstglcontrolbindingproxy.c:
+	* gst-libs/gst/gl/gstglcontrolbindingproxy.h:
+	  gl: move control binding proxy implementation from glvideomixer
+	  Other elements may need to use it's functionality
+
+2016-01-27 18:17:06 +1100  Matthew Waters <matthew@centricular.com>
+
+	* ext/gl/gstglcolorbalance.c:
+	  glcolorbalance: create the shader if it doesn't exist in the render callback
+	  Changing the properties may result in glcolorbalance moving from passthrough to
+	  non-passthrough and we weren't creating the shader in that case.
+
+2016-01-25 16:29:46 +1100  Matthew Waters <matthew@centricular.com>
+
+	* ext/qt/gstqtsink.cc:
+	  qt: specify that we currently only take 2D textures
+	  Fixes black screen video playback on android without a caps filter.
+
+2016-01-25 19:11:38 +1100  Matthew Waters <matthew@centricular.com>
+
+	* ext/gl/gstglvideoflip.c:
+	* ext/gl/gstglvideoflip.h:
+	  glvideoflip: incorporate the aspect ratio into the scale_x calculations
+	  1. Otherwise rotating the video will clip and show black bars due to
+	  gltransformation's implementation.
+	  2. The other option of make gltransformation aspect-agnostic produces
+	  incorrect output with perspective transformations.
+
+2016-01-27 14:36:36 +1100  Alessandro Decina <alessandro.d@gmail.com>
+
+	* sys/applemedia/avfvideosrc.m:
+	  applemedia: avfvideosrc: actually set the configured framerate
+	  Actually set the configured framerate. Before we only used to set the first
+	  matching framerate range. On iOS where the camera reports ranges [2, 60], we
+	  used to configure the camera to output anything between 2 and 60fps.
+
+2016-01-25 22:30:29 +0000  Luis de Bethencourt <luisbg@osg.samsung.com>
+
+	* ext/opencv/gstcvlaplace.cpp:
+	* ext/opencv/gstcvlaplace.h:
+	  opencv: add mask property to cvlaplace
+	  Add a "mask" property that sets whether the edges by cvLaplace should be
+	  used as a mask on the original input or not. The same way the original
+	  image is copied to the edges in edgedetect.
+
+2016-01-25 21:42:52 +0000  Luis de Bethencourt <luisbg@osg.samsung.com>
+
+	* ext/opencv/gstcvsobel.cpp:
+	* ext/opencv/gstcvsobel.h:
+	  opencv: add mask property to cvsobel
+	  Add a "mask" property that sets whether the detected derivative edges
+	  should be used as a mask on the original input or not. The same way
+	  the original image is added to the edges in edgedetect.
+
+2016-01-25 15:19:37 +0000  Luis de Bethencourt <luisbg@osg.samsung.com>
+
+	* ext/opencv/gstskindetect.cpp:
+	  opencv: update deprecated function in skindetect
+	  cvCvtPixToPlane() has been deprecated in OpenCV 3.0, and cvSplit() is the
+	  suggested replacement. Since cvSplit() is available in OpenCV 2.4, it is
+	  safe and cautious to update the function usage before it becomes an issue.
+
+2016-01-25 11:43:59 +0000  Luis de Bethencourt <luisbg@osg.samsung.com>
+
+	* ext/opencv/gstcvlaplace.cpp:
+	* ext/opencv/gstcvlaplace.h:
+	  opencv: fix cvlaplace
+	  cvlaplace was also affected by the silent change in OpenCV API, same as
+	  cvsobel. It hasn't been working for a while. It would return a plain black
+	  image. This commit updates the usage of cvLaplace by using cvCvtColor to
+	  create the grayscale intermediate image to process. This also means there
+	  is no need anymore to use GstBaseTransform's transform_caps, since the pads
+	  are RGB.
+
+2016-01-25 13:33:09 +0900  Vineeth TM <vineeth.tm@samsung.com>
+
+	* gst/videoparsers/gsth265parse.c:
+	  h265parse: Fix buffer leak when sps is not present
+	  When sps data is NULL, the buffer allocated and mapped is not being freed.
+	  In this scenario there is no need to allocate the buffer as we are supposed to return NULL.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=761070
+
+2016-01-25 12:05:12 +0900  Vineeth TM <vineeth.tm@samsung.com>
+
+	* gst/videoparsers/gsth265parse.c:
+	  h265parse: Fix buffer memory leak.
+	  While setting caps, codec_data buffer is mapped, but not being unmapped
+	  leading to memory leaks.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=761070
+
+2016-01-23 17:10:51 +0000  Luis de Bethencourt <luisbg@osg.samsung.com>
+
+	* ext/opencv/gstcvsobel.cpp:
+	* ext/opencv/gstcvsobel.h:
+	  opencv: fix cvsobel
+	  cvsobel han't been working for a while due to a silent change in OpenCV
+	  API. It would return a plain black image. This commit updates the usage
+	  of cvSobel by using cvCvtColor to create the grayscale image to process.
+	  This also means there is no need to use GstBaseTransform's transform_caps
+	  anymore, since the pads can be RGB.
+
+2016-01-23 05:30:05 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+	* pkgconfig/Makefile.am:
+	  pkg-config: Properly version and install base/audio/video .pc files
+	  https://bugzilla.gnome.org/show_bug.cgi?id=760733#c17
+
+2016-01-22 16:43:03 +0000  Alex Ashley <alex.ashley@youview.com>
+
+	* gst-libs/gst/adaptivedemux/gstadaptivedemux.c:
+	  adaptivedemux: fix leak of stream->internal_pad
+	  The function gst_adaptive_demux_stream_update_source() function creates
+	  a new GstPad called internal_pad. This pad is not freed when releasing
+	  the stream.
+	  The solution is to set GST_PAD_FLAG_NEED_PARENT so that the chain
+	  functions do not get called when the pad has no parent and then
+	  remove the parent in the gst_adaptive_demux_stream_free() function. This
+	  causes the refcount of the pad to be set to zero.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=760982
+
+2016-01-21 22:00:44 +0800  John Chang <r97922153@gmail.com>
+
+	* ext/dash/gstmpdparser.c:
+	  mpdparser: Use RepresentationIndex instead of Initialization to get the URL of the RepresentationIndex
+	  https://bugzilla.gnome.org/show_bug.cgi?id=760936
+
+2016-01-22 17:25:28 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+	* sys/androidmedia/gst-android-hardware-camera.c:
+	  ahc: Fail gracefully if our callback class can't be found
+	  Instead of just ignoring that error and then calling JNI functions with NULL,
+	  which will kill the virtual machine.
+	  The error handling here needs some further improvements though, errors in more
+	  places are just ignored.
+
+2016-01-22 17:22:47 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+	* sys/androidmedia/gst-android-hardware-camera.c:
+	  ahc: Initialize GError pointer with NULL
+	  Otherwise there will be assertions.
+
+2016-01-22 17:18:58 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+	* sys/androidmedia/gstamcvideodec.c:
+	  amcvideodec: Only free GstAmcBuffer if it's not NULL
+	  And also free it on GL errors.
+
+2016-01-13 22:05:49 +0100  Julien Moutte <julien@ctondemand.com>
+
+	* sys/decklink/gstdecklink.cpp:
+	* sys/decklink/gstdecklink.h:
+	* sys/decklink/gstdecklinkvideosink.cpp:
+	* sys/decklink/gstdecklinkvideosrc.cpp:
+	* sys/decklink/gstdecklinkvideosrc.h:
+	  decklinkvideosrc: implement RGB capture support
+	  Combine mode and format to generate caps and support the flags from VideoChanged callback to support RGB capture.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=760594
+
+2016-01-22 16:22:07 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+	* sys/androidmedia/gstamc.h:
+	  amc: Add an assertion for NULL GErrors
+	  Should never happen! But an assertion is better than a NULL pointer
+	  dereference.
+
+2016-01-22 16:14:46 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+	* sys/androidmedia/gst-android-graphics-imageformat.c:
+	* sys/androidmedia/gst-android-hardware-camera.c:
+	  ahc: Fix indentation
+
+2016-01-22 16:13:45 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+	* sys/androidmedia/gstamc.c:
+	* sys/androidmedia/gstamcaudiodec.c:
+	* sys/androidmedia/gstamcvideodec.c:
+	* sys/androidmedia/gstamcvideoenc.c:
+	  amc: MediaCodec::getOutputBuffer() can return NULL without exception
+	  Happens when doing zerocopy rendering, or when passing a wrong index to it.
+	  Handle this properly for zerocopy rendering, fail properly for the other
+	  cases.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=760961
+
+2016-01-16 18:59:43 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+	* gst-libs/gst/audio/Makefile.am:
+	* gst-libs/gst/base/Makefile.am:
+	* gst-libs/gst/video/Makefile.am:
+	* pkgconfig/Makefile.am:
+	  base/audio/video: Install headers and pkg-config files
+	  They are still considered unstable API but it would be good to give them some
+	  wider testing already to make sure the API is useful.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=760733
+
+2016-01-16 18:56:26 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+	* configure.ac:
+	* gst-libs/gst/Makefile.am:
+	* gst-libs/gst/audio/Makefile.am:
+	* gst-libs/gst/audio/gstaudioaggregator.c:
+	* gst-libs/gst/audio/gstaudioaggregator.h:
+	* gst/audiomixer/Makefile.am:
+	* gst/audiomixer/gstaudioaggregator.c:
+	* gst/audiomixer/gstaudioaggregator.h:
+	* gst/audiomixer/gstaudiointerleave.h:
+	* gst/audiomixer/gstaudiomixer.h:
+	* pkgconfig/gstreamer-bad-audio-uninstalled.pc.in:
+	* pkgconfig/gstreamer-bad-audio.pc.in:
+	  audio: Move audioaggregator base class to a library
+	  It's useful enough already to be used in other elements for audio aggregation,
+	  let's give people the opportunity to use it and give it some API testing.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=760733
+
+2016-01-21 23:13:36 +0100  Holger Kaelberer <holger.k@elberer.de>
+
+	* gst-libs/gst/gl/android/gstglwindow_android_egl.c:
+	  glwindow: Fix android build
+	  https://bugzilla.gnome.org/show_bug.cgi?id=760972
+
+2016-01-22 13:51:49 +1100  Alessandro Decina <alessandro.d@gmail.com>
+
+	* sys/applemedia/videotexturecache.m:
+	  applemedia: texture cache: copy the input metas
+	  Copy the input metas so avfvideosrc and vtenc can fast path to using
+	  CVPixelBuffer(s) even when using GLMemory.
+
+2016-01-21 13:50:44 -0500  Nicolas Dufresne <nicolas.dufresne@collabora.com>
+
+	  Merge branch 'android-hardware-camera'
+	  This branch adds support for Android Hardware Camera API through a new
+	  element called ahcsrc. This is the "old" Android Camera API, then only
+	  API available on Android 4.X.
+	  https://bugzilla.gnome.org/show_buf.cgi?id=737786
+
+2016-01-08 16:16:09 -0500  Nicolas Dufresne <nicolas.dufresne@collabora.com>
+
+	* sys/androidmedia/gstahcsrc.c:
+	  ahcsrc: Fix latency reporting
+	  Currently it was wrongly reporting min/max as being the shortest and
+	  longest possible frame duration. This is not how latency works in
+	  GStreamer.
+	  Fix by reporting min latency as being the longest possible duration of
+	  one frame. As we don't know how many buffers the stack can accumulate, we
+	  simply assume that max latency is the same (the usual default behaviour).
+
+2015-12-07 14:31:40 +0100  George Kiagiadakis <george.kiagiadakis@collabora.com>
+
+	* sys/androidmedia/gstahcsrc.c:
+	  ahcsrc: fix deadlock when flushing
+	  _data_queue_item_free() calls gst_buffer_unref(), which
+	  calls gst_ahc_src_buffer_free_func(), which calls
+	  g_mutex_lock() on self->mutex and there you go... deadlock!
+
+2015-12-24 12:51:13 +0900  Justin Kim <justin.kim@collabora.com>
+
+	* sys/androidmedia/Makefile.am:
+	* sys/androidmedia/gst-android-graphics-imageformat.c:
+	* sys/androidmedia/gst-android-graphics-imageformat.h:
+	* sys/androidmedia/gst-android-graphics-surfacetexture.c:
+	* sys/androidmedia/gst-android-graphics-surfacetexture.h:
+	* sys/androidmedia/gst-android-hardware-camera.c:
+	* sys/androidmedia/gst-android-hardware-camera.h:
+	* sys/androidmedia/gst-android-media-mediacodec.c:
+	* sys/androidmedia/gst-android-media-mediacodec.h:
+	* sys/androidmedia/gst-android-media-mediacodecinfo.c:
+	* sys/androidmedia/gst-android-media-mediacodecinfo.h:
+	* sys/androidmedia/gst-android-media-mediacodeclist.c:
+	* sys/androidmedia/gst-android-media-mediacodeclist.h:
+	* sys/androidmedia/gst-android-media-mediaformat.c:
+	* sys/androidmedia/gst-android-media-mediaformat.h:
+	* sys/androidmedia/gstahcsrc.c:
+	* sys/androidmedia/gstahcsrc.h:
+	* sys/androidmedia/gstamc.c:
+	* sys/androidmedia/org/freedesktop/gstreamer/androidmedia/GstAhcCallback.java:
+	  ahcsrc: porting from 0.10 to 1.0
+
+2015-12-24 12:14:24 +0900  Justin Kim <justin.kim@collabora.com>
+
+	* gst-libs/gst/dvm/Makefile.am:
+	* gst-libs/gst/dvm/gstdvm.c:
+	* gst-libs/gst/dvm/gstdvm.h:
+	* pkgconfig/gstreamer-dvm-uninstalled.pc.in:
+	* pkgconfig/gstreamer-dvm.pc.in:
+	* sys/androidcamera/Makefile.am:
+	* sys/androidcamera/com/gstreamer/GstAhcCallback.java:
+	* sys/androidcamera/gst-android-graphics-imageformat.c:
+	* sys/androidcamera/gst-android-graphics-imageformat.h:
+	* sys/androidcamera/gst-android-graphics-surfacetexture.c:
+	* sys/androidcamera/gst-android-graphics-surfacetexture.h:
+	* sys/androidcamera/gst-android-hardware-camera.c:
+	* sys/androidcamera/gst-android-hardware-camera.h:
+	* sys/androidcamera/gst-androidcamera.c:
+	* sys/androidcamera/gstahccallback.h:
+	* sys/androidcamera/gstahcsrc.c:
+	* sys/androidcamera/gstahcsrc.h:
+	* sys/androidmedia/gst-android-graphics-imageformat.c:
+	* sys/androidmedia/gst-android-graphics-imageformat.h:
+	* sys/androidmedia/gst-android-graphics-surfacetexture.c:
+	* sys/androidmedia/gst-android-graphics-surfacetexture.h:
+	* sys/androidmedia/gst-android-hardware-camera.c:
+	* sys/androidmedia/gst-android-hardware-camera.h:
+	* sys/androidmedia/gst-androidcamera.c:
+	* sys/androidmedia/gstahcsrc.c:
+	* sys/androidmedia/gstahcsrc.h:
+	  move androidcamera into androidmedia
+	  This commit is a part of portng android hardware camera from 0.10 implementation.
+	  To preserve history and get diff clearly, the interesting files are moved to
+	  deployment directory and the remaining files are removed.
+
+2013-01-07 18:27:40 -0500  Youness Alaoui <youness.alaoui@collabora.co.uk>
+
+	* sys/androidcamera/gst-android-graphics-surfacetexture.c:
+	* sys/androidcamera/gst-android-graphics-surfacetexture.h:
+	* sys/androidcamera/gst-android-hardware-camera.c:
+	* sys/androidcamera/gst-android-hardware-camera.h:
+	* sys/androidcamera/gstahcsrc.c:
+	  androidcamera: Separate release and free APIs
+
+2013-01-07 18:20:47 -0500  Youness Alaoui <youness.alaoui@collabora.co.uk>
+
+	* sys/androidmedia/gst-android-media-mediacodecinfo.c:
+	  androidmedia: Fix get_level and get_profile exception checking by not using return
+
+2013-01-07 18:19:28 -0500  Youness Alaoui <youness.alaoui@collabora.co.uk>
+
+	* sys/androidmedia/gst-android-media-mediacodec.c:
+	* sys/androidmedia/gst-android-media-mediacodec.h:
+	* sys/androidmedia/gst-android-media-mediacodecinfo.c:
+	  androidmedia: Add extern gint declarations
+
+2013-01-07 18:18:18 -0500  Youness Alaoui <youness.alaoui@collabora.co.uk>
+
+	* gst-libs/gst/dvm/gstdvm.h:
+	  gstdvm: Fix GST_DVM_GET_STATIC_FIELD
+
+2012-11-29 20:10:19 -0500  Youness Alaoui <youness.alaoui@collabora.co.uk>
+
+	* sys/androidcamera/gst-android-hardware-camera.c:
+	  androidcamera: Small refactor in case open doesn't throw an exception but returns null
+
+2012-12-13 17:57:58 +0000  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* sys/androidcamera/gst-android-hardware-camera.c:
+	  androidcamera: Fix some compiler warnings
+
+2012-12-13 17:56:01 +0000  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst-libs/gst/dvm/Makefile.am:
+	* gst-libs/gst/dvm/gst-dvm.c:
+	* gst-libs/gst/dvm/gst-dvm.h:
+	* gst-libs/gst/dvm/gstdvm.c:
+	* gst-libs/gst/dvm/gstdvm.h:
+	* sys/androidcamera/Makefile.am:
+	* sys/androidcamera/gst-android-graphics-imageformat.c:
+	* sys/androidcamera/gst-android-graphics-surfacetexture.c:
+	* sys/androidcamera/gst-android-hardware-camera.c:
+	* sys/androidcamera/gst-androidcamera.c:
+	* sys/androidcamera/gstahcsrc.c:
+	* sys/androidmedia/gst-android-media-mediacodec.c:
+	* sys/androidmedia/gst-android-media-mediacodecinfo.c:
+	* sys/androidmedia/gst-android-media-mediacodeclist.c:
+	* sys/androidmedia/gst-android-media-mediaformat.c:
+	  dvm: Rename gst-dvm.[ch] to gstdvm.[ch] for consistency with other GStreamer code
+
+2012-12-13 17:40:22 +0000  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst-libs/gst/dvm/gst-dvm.c:
+	* gst-libs/gst/dvm/gst-dvm.h:
+	  dvm: Add new function to check if we started a VM or only used an existing one
+
+2012-12-13 17:40:04 +0000  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* sys/androidmedia/gst-android-media-mediacodec.c:
+	* sys/androidmedia/gst-android-media-mediacodec.h:
+	  androidmedia: Make everything compile with the new wrappers
+
+2012-12-13 12:13:27 +0000  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* sys/androidmedia/gst-android-media-mediacodec.c:
+	* sys/androidmedia/gst-android-media-mediacodec.h:
+	* sys/androidmedia/gst-android-media-mediacodecinfo.c:
+	* sys/androidmedia/gst-android-media-mediacodecinfo.h:
+	* sys/androidmedia/gst-android-media-mediacodeclist.c:
+	* sys/androidmedia/gst-android-media-mediacodeclist.h:
+	* sys/androidmedia/gst-android-media-mediaformat.c:
+	* sys/androidmedia/gst-android-media-mediaformat.h:
+	  androidmedia: Add remaining bits of the Java wrappers using libgstdvm
+
+2012-12-13 12:13:12 +0000  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst-libs/gst/dvm/gst-dvm.h:
+	  dvm: Add some more helper macros
+
+2012-12-12 18:10:13 +0000  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* sys/androidmedia/gst-android-media-mediacodec.c:
+	* sys/androidmedia/gst-android-media-mediaformat.c:
+	  androidmedia: Remove g_return_if_fails()
+	  This is not public API so it has no advantage to have them here.
+
+2012-11-28 20:53:51 -0500  Youness Alaoui <youness.alaoui@collabora.co.uk>
+
+	* sys/androidmedia/gst-android-media-mediacodec.c:
+	* sys/androidmedia/gst-android-media-mediacodec.h:
+	* sys/androidmedia/gst-android-media-mediaformat.c:
+	* sys/androidmedia/gst-android-media-mediaformat.h:
+	  androidmedia: Use gst-dvm and refactor java wrappers (WIP)
+	  Moved the java wrapper API into its own files and made use of the
+	  gst-dvm macros. Also renamed the API to have the proper naming
+	  convention and coding style in order to match the one in androidcamera.
+	  This is a work in progress! "android/media/MediaCodecList" is still missing
+	  and the actual elements have not been ported to use the new function names.
+
+2012-11-28 15:26:49 -0500  Youness Alaoui <youness.alaoui@collabora.co.uk>
+
+	* sys/androidcamera/gst-android-graphics-imageformat.h:
+	* sys/androidcamera/gst-android-graphics-surfacetexture.h:
+	* sys/androidcamera/gst-android-hardware-camera.h:
+	  androidcamera: Add G_BEGIN/END_DECLS to the .h
+
+2012-11-27 19:25:06 -0500  Youness Alaoui <youness.alaoui@collabora.co.uk>
+
+	* gst-libs/gst/dvm/Makefile.am:
+	* gst-libs/gst/dvm/gst-dvm.c:
+	* gst-libs/gst/dvm/gst-dvm.h:
+	* pkgconfig/gstreamer-dvm-uninstalled.pc.in:
+	* pkgconfig/gstreamer-dvm.pc.in:
+	* sys/androidcamera/Makefile.am:
+	* sys/androidcamera/gst-android-graphics-imageformat.c:
+	* sys/androidcamera/gst-android-graphics-surfacetexture.c:
+	* sys/androidcamera/gst-android-hardware-camera.c:
+	* sys/androidcamera/gst-androidcamera.c:
+	* sys/androidcamera/gst-dvm.c:
+	* sys/androidcamera/gst-dvm.h:
+	* sys/androidcamera/gstahcsrc.c:
+	  gst-dvm: Create a gst-dvm library using part of androidcamera
+
+2012-11-27 17:24:35 -0500  Youness Alaoui <youness.alaoui@collabora.co.uk>
+
+	* sys/androidcamera/gstahcsrc.c:
+	  androidcamera: Adding a device-name property
+
+2012-11-20 19:56:22 -0500  Youness Alaoui <youness.alaoui@collabora.co.uk>
+
+	* docs/plugins/inspect/plugin-androidcamera.xml:
+	* sys/androidcamera/gstahcsrc.c:
+	* sys/androidcamera/gstahcsrc.h:
+	  androidcamera: Add element documentation
+
+2012-11-19 18:25:12 -0500  Youness Alaoui <youness.alaoui@collabora.co.uk>
+
+	* sys/androidcamera/Makefile.am:
+	  androidcamera: Prettify the gstahccallback.c generation line in the makefile
+
+2012-11-15 12:33:26 -0500  Youness Alaoui <youness.alaoui@collabora.co.uk>
+
+	* sys/androidcamera/gst-android-hardware-camera.c:
+	  androicamera: Make sure the TMP env var exists and check for DEX var too
+
+2012-11-14 11:38:51 -0500  Youness Alaoui <youness.alaoui@collabora.co.uk>
+
+	* sys/androidcamera/gst-android-hardware-camera.c:
+	  androidcamera: Do not use gst_list_free_full since it requires glib 2.28
+
+2012-11-12 18:59:57 -0500  Youness Alaoui <youness.alaoui@collabora.co.uk>
+
+	* sys/androidcamera/gstahcsrc.c:
+	* sys/androidcamera/gstahcsrc.h:
+	  androidcamera: Add smooth-zoom property for smooth zooming feature
+
+2012-11-12 18:19:20 -0500  Youness Alaoui <youness.alaoui@collabora.co.uk>
+
+	* sys/androidcamera/gstahcsrc.c:
+	  androidcamera: Add focal-length, view-angle and video-stabilization properties
+
+2012-11-12 18:18:11 -0500  Youness Alaoui <youness.alaoui@collabora.co.uk>
+
+	* sys/androidcamera/gst-android-hardware-camera.c:
+	* sys/androidcamera/gst-android-hardware-camera.h:
+	  androidcamera: Add video stabilization API
+
+2012-11-12 16:38:40 -0500  Youness Alaoui <youness.alaoui@collabora.co.uk>
+
+	* sys/androidcamera/gstahcsrc.c:
+	  androidcamera: Add property probe for the photography properties
+
+2012-11-09 18:21:21 -0500  Youness Alaoui <youness.alaoui@collabora.co.uk>
+
+	* sys/androidcamera/gstahcsrc.c:
+	  androidcamera: Small refactor
+
+2012-11-09 16:57:30 -0500  Youness Alaoui <youness.alaoui@collabora.co.uk>
+
+	* sys/androidcamera/gstahcsrc.c:
+	  androidcamera: Fix small memleak
+
+2012-11-09 16:55:57 -0500  Youness Alaoui <youness.alaoui@collabora.co.uk>
+
+	* sys/androidcamera/gstahcsrc.c:
+	  androidcamera: Store GParamSpec for properties and use that for the PropertyProbe comparison
+
+2012-11-09 12:23:37 -0500  Youness Alaoui <youness.alaoui@collabora.co.uk>
+
+	* sys/androidcamera/gstahcsrc.c:
+	  androidcamera: Handle zoom comparison better, and avoid float precision issue
+
+2012-11-09 12:22:12 -0500  Youness Alaoui <youness.alaoui@collabora.co.uk>
+
+	* sys/androidcamera/gstahcsrc.c:
+	  androidcamera: Fix EV compensation support
+
+2012-11-07 19:16:05 -0500  Youness Alaoui <youness.alaoui@collabora.co.uk>
+
+	* sys/androidcamera/gstahcsrc.c:
+	  androidcamera: Implement new GstPhotography enums
+
+2012-11-07 15:38:19 -0500  Youness Alaoui <youness.alaoui@collabora.co.uk>
+
+	* sys/androidcamera/gstahcsrc.c:
+	  androidcamera: Do not advertise zoom capabilities if camera doesn't support zoom
+
+2012-11-07 15:37:43 -0500  Youness Alaoui <youness.alaoui@collabora.co.uk>
+
+	* sys/androidcamera/gst-android-hardware-camera.c:
+	  androidcamera: Be NULL-safe when a JNI list is returned
+
+2012-11-02 18:07:24 -0400  Youness Alaoui <youness.alaoui@collabora.co.uk>
+
+	* sys/androidcamera/gstahcsrc.c:
+	  androidcamera: Use strcmp on the GParamSpec property name
+	  Use strcmp instead of using the property_id because it's overriden
+
+2012-11-02 18:00:55 -0400  Youness Alaoui <youness.alaoui@collabora.co.uk>
+
+	* sys/androidcamera/gstahcsrc.c:
+	  androidmedia: Implement property probe for zoom and ev_compensation
+
+2012-11-02 17:00:45 -0400  Youness Alaoui <youness.alaoui@collabora.co.uk>
+
+	* sys/androidcamera/com/gstreamer/GstAhcCallback.java:
+	* sys/androidcamera/gst-android-hardware-camera.c:
+	* sys/androidcamera/gst-android-hardware-camera.h:
+	* sys/androidcamera/gstahcsrc.c:
+	  androidcamera: Add autofocus support
+
+2012-11-02 16:59:42 -0400  Youness Alaoui <youness.alaoui@collabora.co.uk>
+
+	* sys/androidcamera/gstahcsrc.c:
+	  androidcamera: Override properties
+
+2012-11-01 15:24:12 -0400  Youness Alaoui <youness.alaoui@collabora.co.uk>
+
+	* sys/androidcamera/gstahcsrc.c:
+	  anroidcamera: Add support for the GstPhotography interface
+
+2012-11-01 11:58:33 -0400  Youness Alaoui <youness.alaoui@collabora.co.uk>
+
+	* sys/androidcamera/gst-android-hardware-camera.c:
+	* sys/androidcamera/gst-android-hardware-camera.h:
+	  androidcamera: Add more wrappers for the Camera.Parameters class
+
+2012-10-31 14:21:47 -0400  Youness Alaoui <youness.alaoui@collabora.co.uk>
+
+	* sys/androidcamera/gstahcsrc.c:
+	  androidcamera: Send proper error when unable to open camera
+
+2012-10-30 12:13:12 -0400  Youness Alaoui <youness.alaoui@collabora.co.uk>
+
+	* sys/androidcamera/gstahcsrc.c:
+	  androidcamera: Adding device-orientation and device-facing properties
+
+2012-10-30 11:35:36 -0400  Youness Alaoui <youness.alaoui@collabora.co.uk>
+
+	* sys/androidcamera/gstahcsrc.c:
+	* sys/androidcamera/gstahcsrc.h:
+	  androidcamera: Add device property and property probe it
+
+2012-10-30 10:12:06 -0400  Youness Alaoui <youness.alaoui@collabora.co.uk>
+
+	* sys/androidcamera/gstahcsrc.c:
+	  androidcamera: Fix memleak and lose of buffer if the data queue is flushing
+
+2012-10-30 09:49:39 -0400  Youness Alaoui <youness.alaoui@collabora.co.uk>
+
+	* sys/androidcamera/gstahcsrc.c:
+	  androidcamera: Calling set_preview_callback with NULL frees all the buffers in the queue.
+	  We must not do it at the stop otherwise we lose all our buffers. It's best to do
+	  it during the close, so we free up the resources.
+
+2012-10-30 09:49:03 -0400  Youness Alaoui <youness.alaoui@collabora.co.uk>
+
+	* sys/androidcamera/gstahcsrc.c:
+	  androidcamera: Drop frames if we don't have a clock and var rename
+
+2012-10-30 09:45:55 -0400  Youness Alaoui <youness.alaoui@collabora.co.uk>
+
+	* sys/androidcamera/gstahcsrc.c:
+	  androicamera: if buffer size increases, then readd new buffers to the queue and drop old ones
+	  The on_preview callback gets called with NULL if the buffer in the queue is
+	  too small, so we need to handle the case where the array is NULL. Also
+	  there is a bug in the android source which makes it drop one of the buffers
+	  so if we had 5 buffers, and we renegotiate to a higher resolution, then we'd
+	  only get 4 calls to on_preview_frame with NULL, with one being dropped.
+	  This means we can't reallocate the buffers in the if (data == NULL) case
+	  because we might end up with 0 buffers in the end.
+
+2012-10-30 09:44:31 -0400  Youness Alaoui <youness.alaoui@collabora.co.uk>
+
+	* sys/androidcamera/gst-android-hardware-camera.c:
+	  androidcamera: If callback is NULL then set it to NULL in jni
+
+2016-01-21 13:46:52 -0500  Nicolas Dufresne <nicolas.dufresne@collabora.com>
+
+	* sys/androidcamera/gstahcsrc.c:
+	  androidcamera: Fix debug output
+
+2012-10-26 12:57:50 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* sys/androidcamera/gstahcsrc.c:
+	  androidcamera: Chose the smallest range that contains the target framerate
+
+2012-10-26 12:43:09 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* sys/androidcamera/gstahcsrc.c:
+	  androidcamera: Improve negotiation
+	  And make sure we set an FPS range from the supported ones
+	  now instead of a potentially unsupported range.
+
+2012-10-26 12:19:55 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* sys/androidcamera/gstahcsrc.c:
+	  androidcamera: Implement LATENCY query
+
+2012-10-26 11:57:47 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* sys/androidcamera/gstahcsrc.c:
+	  androidcamera: Make sure we always have a valid camera source instance in the buffer free function
+
+2012-10-26 11:46:23 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* sys/androidcamera/gst-android-hardware-camera.c:
+	* sys/androidcamera/gstahcsrc.c:
+	  androidcamera: Make sure to not call any callbacks after stopping the camera
+	  Fixes segfaults when rotating the device for example.
+
+2012-10-24 15:25:54 -0400  Youness Alaoui <youness.alaoui@collabora.co.uk>
+
+	* sys/androidcamera/gstahcsrc.c:
+	  androidcamera: Fix timestamping issue
+
+2012-10-24 13:59:59 -0400  Youness Alaoui <youness.alaoui@collabora.co.uk>
+
+	* sys/androidcamera/gstahcsrc.c:
+	* sys/androidcamera/gstahcsrc.h:
+	  androidcamera: Add caps negotiation support
+
+2012-10-24 10:55:52 -0400  Youness Alaoui <youness.alaoui@collabora.co.uk>
+
+	* sys/androidcamera/gstahcsrc.c:
+	  Add support for getcaps that probes the camera for capabilities
+
+2012-10-23 13:54:46 -0400  Youness Alaoui <youness.alaoui@collabora.co.uk>
+
+	* sys/androidcamera/gstahcsrc.c:
+	  androidmedia: Drop the first buffer to have proper timestamping
+
+2012-10-23 11:14:00 -0400  Youness Alaoui <youness.alaoui@collabora.co.uk>
+
+	* sys/androidcamera/gstahcsrc.c:
+	  androidmedia: Flush the queue when the source is stopped
+
+2012-10-23 11:13:37 -0400  Youness Alaoui <youness.alaoui@collabora.co.uk>
+
+	* sys/androidcamera/gstahcsrc.c:
+	  androidmedia: Allocate/free texture when camera is open/closed
+
+2012-10-23 11:13:12 -0400  Youness Alaoui <youness.alaoui@collabora.co.uk>
+
+	* sys/androidcamera/gstahcsrc.c:
+	  androidmedia: add a gst_ahc_src_close function
+
+2012-10-23 11:12:19 -0400  Youness Alaoui <youness.alaoui@collabora.co.uk>
+
+	* sys/androidcamera/gstahcsrc.c:
+	  androidmedia: Fix small indentation issues
+
+2012-10-23 10:12:52 -0400  Youness Alaoui <youness.alaoui@collabora.co.uk>
+
+	* sys/androidcamera/Makefile.am:
+	  androidmedia: Disable plugin if android-sdk isn't found and dynamically search for platform version
+
+2012-10-23 09:01:50 -0400  Youness Alaoui <youness.alaoui@collabora.co.uk>
+
+	* sys/androidcamera/Makefile.am:
+	* sys/androidcamera/com/gstreamer/GstAhcCallback.java:
+	* sys/androidcamera/gst-android-hardware-camera.c:
+	* sys/androidcamera/gstahccallback.h:
+	  androidcamera: Add support for using DexLoader with Embeded GstAhcCallback.jar
+
+2012-10-17 19:42:59 -0400  Youness Alaoui <youness.alaoui@collabora.co.uk>
+
+	* sys/androidcamera/gst-android-graphics-imageformat.c:
+	* sys/androidcamera/gst-android-graphics-surfacetexture.c:
+	* sys/androidcamera/gst-android-hardware-camera.c:
+	  androidcamera: Fix compilation issues
+
+2012-10-17 19:42:59 -0400  Youness Alaoui <youness.alaoui@collabora.co.uk>
+
+	* sys/androidcamera/Makefile.am:
+	* sys/androidcamera/gst-androidcamera.c:
+	* sys/androidcamera/gst-androidmedia.c:
+	  Remove previous cruft and create androidcamera plugin
+
+2012-10-17 19:42:59 -0400  Youness Alaoui <youness.alaoui@collabora.co.uk>
+
+	* sys/androidcamera/gstahcsrc.c:
+	  Free the buffers and readd the arrays when the queue is cleared
+
+2012-10-17 19:42:59 -0400  Youness Alaoui <youness.alaoui@collabora.co.uk>
+
+	* sys/androidcamera/gst-android-graphics-imageformat.c:
+	* sys/androidcamera/gst-android-graphics-surfacetexture.c:
+	* sys/androidcamera/gst-android-hardware-camera.c:
+	* sys/androidcamera/gst-dvm.h:
+	  Add a GST_DVM_CALL macro to ease function calling with exception check
+
+2012-10-17 19:42:59 -0400  Youness Alaoui <youness.alaoui@collabora.co.uk>
+
+	* sys/androidcamera/gstahcsrc.c:
+	* sys/androidcamera/gstahcsrc.h:
+	  Calculate timestamp at reception of the buffer, not when pushing it out
+
+2012-10-17 19:42:59 -0400  Youness Alaoui <youness.alaoui@collabora.co.uk>
+
+	* sys/androidcamera/gstahcsrc.c:
+	  Make the number of callback buffers configurable, and delete their local ref
+
+2012-10-17 19:42:59 -0400  Youness Alaoui <youness.alaoui@collabora.co.uk>
+
+	* sys/androidcamera/gstahcsrc.c:
+	* sys/androidcamera/gstahcsrc.h:
+	  Use GstDataQueue instead of GAsyncQueue for storing buffers
+
+2012-10-17 19:42:59 -0400  Youness Alaoui <youness.alaoui@collabora.co.uk>
+
+	* sys/androidcamera/gstahcsrc.c:
+	  Use the buffer's free_func to map byteArray data without making a copy
+
+2012-10-17 19:42:59 -0400  Youness Alaoui <youness.alaoui@collabora.co.uk>
+
+	* sys/androidcamera/gstahcsrc.c:
+	  Remove open failure test code and debug log
+
+2012-10-17 19:42:59 -0400  Youness Alaoui <youness.alaoui@collabora.co.uk>
+
+	* sys/androidcamera/gstahcsrc.c:
+	  Use YV12 as the default format
+
+2012-10-17 19:42:59 -0400  Youness Alaoui <youness.alaoui@collabora.co.uk>
+
+	* sys/androidcamera/gst-android-graphics-imageformat.c:
+	* sys/androidcamera/gst-android-graphics-imageformat.h:
+	* sys/androidcamera/gst-android-graphics-surfacetexture.c:
+	* sys/androidcamera/gst-android-graphics-surfacetexture.h:
+	* sys/androidcamera/gst-android-hardware-camera.c:
+	* sys/androidcamera/gst-android-hardware-camera.h:
+	* sys/androidcamera/gst-androidmedia.c:
+	  Add a deinit function and remove jclass references in case of error
+
+2012-10-17 19:42:59 -0400  Youness Alaoui <youness.alaoui@collabora.co.uk>
+
+	* sys/androidcamera/gst-android-graphics-surfacetexture.c:
+	  SurfaceTexture constructure needs texture_id
+
+2012-10-17 19:42:59 -0400  Youness Alaoui <youness.alaoui@collabora.co.uk>
+
+	* sys/androidcamera/Makefile.am:
+	* sys/androidcamera/gst-androidmedia.c:
+	* sys/androidcamera/gstahcsrc.c:
+	* sys/androidcamera/gstahcsrc.h:
+	  Add ahcsrc Camera source element prototype
+
+2012-10-17 19:42:59 -0400  Youness Alaoui <youness.alaoui@collabora.co.uk>
+
+	* sys/androidcamera/Makefile.am:
+	* sys/androidcamera/gst-android-graphics-imageformat.c:
+	* sys/androidcamera/gst-android-graphics-imageformat.h:
+	* sys/androidcamera/gst-android-graphics-surfacetexture.c:
+	* sys/androidcamera/gst-android-graphics-surfacetexture.h:
+	* sys/androidcamera/gst-android-hardware-camera.c:
+	* sys/androidcamera/gst-android-hardware-camera.h:
+	  Add android.hardware.Camera (and deps) JNI wrappers
+
+2012-10-17 19:42:59 -0400  Youness Alaoui <youness.alaoui@collabora.co.uk>
+
+	* sys/androidcamera/Makefile.am:
+	* sys/androidcamera/gst-dvm.c:
+	* sys/androidcamera/gst-dvm.h:
+	  Adding Dalvik Virtual Machine routines and macros
+
+2012-10-17 17:56:33 -0400  Youness Alaoui <youness.alaoui@collabora.co.uk>
+
+	* sys/androidcamera/Makefile.am:
+	* sys/androidcamera/gst-androidmedia.c:
+	  androidmedia: Add androidmedia plugin
+
+2016-01-15 14:31:54 +0100  Sebastian Dröge <sebastian@centricular.com>
+
+	* ext/spandsp/Makefile.am:
+	* ext/spandsp/gstspandsp.c:
+	* ext/spandsp/gsttonegeneratesrc.c:
+	* ext/spandsp/gsttonegeneratesrc.h:
+	  spandsp: Add tone generator
+
+2015-07-14 13:40:46 +0900  Hyunjun Ko <zzoon.ko@samsung.com>
+
+	* gst/mpegtsmux/tsmux/tsmuxstream.c:
+	  mpegtsmux: set non-0 payload length in PES header if video ES packet is small enough
+	  https://bugzilla.gnome.org/show_bug.cgi?id=748507
+
+2015-07-14 13:42:54 +0900  Hyunjun Ko <zzoon.ko@samsung.com>
+
+	* gst/mpegtsmux/tsmux/tsmuxstream.c:
+	  mpegtsmux: reset pes_bytes_written when starting to write new PES packet
+	  In case of an unbounded packet (video usually), pes_bytes_written was
+	  no reset.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=748507
+
+2016-01-19 17:08:50 +0000  Tim-Philipp Müller <tim@centricular.com>
+
+	* gst/mpegtsmux/mpegtsmux.c:
+	* gst/mpegtsmux/tsmux/tsmuxstream.c:
+	* gst/mpegtsmux/tsmux/tsmuxstream.h:
+	  mpegtsmux: add support for H.265/HEVC video
+	  https://bugzilla.gnome.org/show_bug.cgi?id=744367
+
+2016-01-19 13:20:23 +0000  Tim-Philipp Müller <tim@centricular.com>
+
+	* ext/gl/Makefile.am:
+	* ext/gl/effects/gstgleffectscurves.c:
+	* ext/gl/effects/gstgleffectscurves.h:
+	  gl: fix compiler warnings with gcc-6
+	  In file included from effects/gstgleffectrgbtocurve.c:25:0:
+	  effects/gstgleffectscurves.h:174:32: error: 'xray_curve' defined but not used
+	  static const GstGLEffectsCurve xray_curve = {
+	  ...
+
+2016-01-19 08:39:58 +0000  Tim-Philipp Müller <tim@centricular.com>
+
+	* gst-libs/gst/gl/Makefile.am:
+	* gst-libs/gst/insertbin/Makefile.am:
+	* gst-libs/gst/mpegts/Makefile.am:
+	* gst-libs/gst/player/Makefile.am:
+	  libs: g-i: fix init section to avoid compiler warnings
+	  ..GstPlayer-1.0.c: In function ‘main’:
+	  ..GstPlayer-1.0.c:587:3: warning: implicit declaration of function ‘gst_init’
+	  https://bugzilla.gnome.org/show_bug.cgi?id=760090
+
+2016-01-19 19:18:43 +1100  Alessandro Decina <alessandro.d@gmail.com>
+
+	* sys/applemedia/vtenc.c:
+	  applemedia: vtenc: fix build on iOS
+
+2016-01-19 15:50:22 +1100  Alessandro Decina <alessandro.d@gmail.com>
+
+	* sys/applemedia/avfassetsrc.m:
+	* sys/applemedia/avfvideosrc.m:
+	* sys/applemedia/coremediabuffer.c:
+	* sys/applemedia/coremediabuffer.h:
+	* sys/applemedia/corevideobuffer.c:
+	* sys/applemedia/corevideobuffer.h:
+	* sys/applemedia/qtkitvideosrc.m:
+	* sys/applemedia/videotexturecache.m:
+	* sys/applemedia/vtdec.c:
+	* sys/applemedia/vtenc.c:
+	  applemedia: always fill GstBuffers with GstMemory
+	  Always fill buffers with our custom memory. The custom memory will avoid
+	  mapping CV/CM buffers unless necessary.
+
+2015-04-19 00:30:48 +0300  Ilya Konstantinov <ilya.konstantinov@gmail.com>
+
+	* sys/applemedia/coremediabuffer.c:
+	* sys/applemedia/corevideobuffer.c:
+	  applemedia: implement copying of meta
+	  Before this, buffers would lose their Core Video / Core Media meta
+	  over intervideo* boundary.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=747216
+
+2015-04-02 20:04:18 +0300  Ilya Konstantinov <ilya.konstantinov@gmail.com>
+
+	* sys/applemedia/Makefile.am:
+	* sys/applemedia/coremediabuffer.c:
+	* sys/applemedia/corevideobuffer.c:
+	* sys/applemedia/corevideobuffer.h:
+	* sys/applemedia/corevideomemory.c:
+	* sys/applemedia/corevideomemory.h:
+	* sys/applemedia/plugin.m:
+	  applemedia: implement GstAppleCoreVideoMemory
+	  Implement a new memory type wrapping CVPixelBuffer.
+	  There are two immediate advantages:
+	  a) Make the GstMemory itself retain the CVPixelBuffer. Previously,
+	  the containing GstBuffer was solely responsible for the lifetime of
+	  the backing CVPixelBuffer.
+	  With this change, we remove the GST_MEMORY_FLAG_NO_SHARE so that
+	  GstMemory objects be referenced by multiple GstBuffers (doing away
+	  with the need to copy.)
+	  b) Delay locking CVPixelBuffer into CPU memory until it's actually
+	  mapped -- possibly never.
+	  The CVPixelBuffer object is shared among references, shares and
+	  (in planar formats) planes, so a wrapper GstAppleCoreVideoPixelBuffer
+	  structure was introduced to manage locking.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=747216
+
+2016-01-19 12:56:40 +1100  Alessandro Decina <alessandro.d@gmail.com>
+
+	* sys/applemedia/iosurfacememory.c:
+	  applemedia: iosurfacememory: alloc with g_new0
+	  ...since the base class doesn't use g_slice anymore
+
+2016-01-08 11:04:13 +0000  Florin Apostol <florin.apostol@oregan.net>
+
+	* ext/dash/gstdashdemux.c:
+	  dashdemux: added check that availabilityStartTime is present for live streams
+	  https://bugzilla.gnome.org/show_bug.cgi?id=757602
+
+2015-11-04 18:15:24 +0000  Florin Apostol <florin.apostol@oregan.net>
+
+	* ext/dash/gstmpdparser.c:
+	  adaptivedemux: improved error message if availabilityStartTime is missing for a live stream
+	  For a live mpd, if availabilityStartTime is missing, adaptive demux asserts
+	  with: Unexpected critical/warning: gst_date_time_to_g_date_time: assertion
+	  'datetime != NULL' failed.
+	  This patch improves the error message to:
+	  Unexpected critical/warning: gst_mpd_client_seek_to_time: assertion
+	  'client->mpd_node->availabilityStartTime != NULL' failed
+	  https://bugzilla.gnome.org/show_bug.cgi?id=757602
+
+2016-01-14 18:27:50 +0000  Florin Apostol <florin.apostol@oregan.net>
+
+	* tests/check/elements/test_http_src.c:
+	  tests: adaptive-stremaing: fix memory leak in test_http_src
+	  https://bugzilla.gnome.org/show_bug.cgi?id=760600
 
 2016-01-15 10:49:12 -0500  Matt Crane <mattcrane@tycoint.com>
 
@@ -14,6 +3911,275 @@
 	  deadlock.
 	  https://bugzilla.gnome.org/show_bug.cgi?id=760551
 
+2016-01-16 17:14:54 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+	* gst-libs/gst/gl/gstglfilter.c:
+	  glfilter: First make caps writable in fixate_caps(), then truncate them
+	  Truncating requires writable caps.
+
+2016-01-16 17:12:29 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+	* gst-libs/gst/gl/gstglcolorconvert.c:
+	  glcolorconvert: Caps passed to fixate_caps() are not owned by us and guaranteed to be fixed
+	  So don't try to fixate them, which takes ownership and steals them from
+	  basetransform.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=760696
+
+2016-01-16 16:55:42 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+	* gst-libs/gst/gl/gstglbufferpool.c:
+	  Revert "glpool: fix caps refcount issue"
+	  This reverts commit 3bdcdedfa00b87f1db505218789178318a16c743.
+	  gst_caps_replace() takes a new reference already, if there is a problem then
+	  it is elsewhere. And there are a few problems, see
+	  https://bugzilla.gnome.org/show_bug.cgi?id=760696
+
+2016-01-15 16:10:02 +0000  Luis de Bethencourt <luisbg@osg.samsung.com>
+
+	* gst/rtp/gstrtph265depay.c:
+	  rtph265depay: fix unneeded sub-buffer creation
+	  We create a sub-buffer just to copy over its metas and then throw it
+	  away immediately, just use the original input buffer directly.
+
+2016-01-15 15:56:59 +0000  Luis de Bethencourt <luisbg@osg.samsung.com>
+
+	* gst/rtp/gstrtph265pay.c:
+	  rtph265pay: add "send VPS/SPS/PPS with every key frame" mode
+	  It's not enough to have timeout or event based VPS/SPS/PPS information
+	  sent in RTP packets. There are some scenarios when key frames may appear
+	  more frequently than once a second, in which case the minimum timeout
+	  for "config-interval" of 1 second for sending VPS/SPS/PPS isn't enough.
+	  It might also be desirable in general to make sure the VPS/SPS/PPS is
+	  available with every keyframe (packet loss aside), so receivers can
+	  actually pick up decoding immediately from the first keyframe if
+	  VPS/SPS/PPS is not signaled out of band.
+	  This commit adds the possibility to send VPS/SPS/PPS with every key frame.
+	  This mode can be enabled by setting "config-interval" property to -1. In
+	  this case the payloader will add VPS, SPS and PPS before every key (IDR)
+	  frame.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=757892
+
+2016-01-15 15:19:41 +0000  Luis de Bethencourt <luisbg@osg.samsung.com>
+
+	* gst/rtp/gstrtph265pay.c:
+	* gst/rtp/gstrtph265pay.h:
+	  rtph265pay: change config-interval property type from uint to int
+	  This way we can use -1 as special value, which is nicer than MAXUINT.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=757892
+
+2016-01-13 09:51:20 -0300  Thiago Santos <thiagoss@osg.samsung.com>
+
+	* ext/dash/gstdashdemux.c:
+	* ext/hls/gsthlsdemux.c:
+	* ext/smoothstreaming/gstmssdemux.c:
+	* gst-libs/gst/adaptivedemux/gstadaptivedemux.c:
+	* gst-libs/gst/adaptivedemux/gstadaptivedemux.h:
+	* tests/check/elements/adaptive_demux_common.c:
+	* tests/check/elements/adaptive_demux_engine.c:
+	* tests/check/elements/adaptive_demux_engine.h:
+	  adaptivedemux: replace ghostpad with a standard pad
+	  Handling the ghostpad and its internal pad was causing more issues
+	  than helping because of their coupled activation/deactivation
+	  actions.
+	  As we have to install custom chain,event and query functions it is
+	  better to use a floating sink pad internally in the demuxer and just
+	  use those pad functions to push through a standard pad in the demuxer
+	  https://bugzilla.gnome.org/show_bug.cgi?id=757951
+
+2015-11-11 17:24:33 +0000  Florin Apostol <florin.apostol@oregan.net>
+
+	* gst-libs/gst/adaptivedemux/gstadaptivedemux.c:
+	  adaptivedemux: do not flush the input pad
+	  gst_adaptive_demux_stream_clear_eos_and_flush_state() function will do
+	  all the necessary cleaning.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=757951
+
+2016-01-15 11:44:52 +0000  Luis de Bethencourt <luisbg@osg.samsung.com>
+
+	* gst/segmentclip/gstvideosegmentclip.c:
+	  videosegmentclip: fail to set_caps if problem in caps structure
+	  gst_video_segment_clip_set_caps () should return FALSE if there was a
+	  problem reading the framerate values from the caps structure.
+
+2016-01-15 17:00:55 +1100  Matthew Waters <matthew@centricular.com>
+
+	* gst-libs/gst/gl/gstglquery.c:
+	  glquery: provide compat definition for GL_QUERY_RESULT
+	  e.g. android doesn't have it
+	  While we're here move a state specific assertion after the supported check.
+	  Removes an assertion on GLES
+
+2016-01-15 16:07:27 +1100  Matthew Waters <matthew@centricular.com>
+
+	* configure.ac:
+	* gst-libs/gst/gl/glprototypes/gstgl_compat.h:
+	  gl: add compatibility definition of GLint64
+	  e.g. anrdoid doesn't have it
+
+2016-01-08 22:19:06 +0300  Sergey Borovkov <serge.borovkov@gmail.com>
+
+	* ext/qt/qtitem.cc:
+	  qml: Mark material dirty when texture buffer is updated
+	  Qt might not redraw the scene otherwise.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=758286
+
+2016-01-15 14:00:56 +1100  Matthew Waters <matthew@centricular.com>
+
+	* gst-libs/gst/gl/gstglbufferpool.c:
+	  glpool: fix caps refcount issue
+	  The caps are from an allocation query which are transfer none but were being
+	  treated as transfer full.
+
+2016-01-11 13:30:05 +1100  Matthew Waters <matthew@centricular.com>
+
+	* gst-libs/gst/gl/gstglbasememory.c:
+	* gst-libs/gst/gl/gstglbasememory.h:
+	* gst-libs/gst/gl/gstglmemory.c:
+	  glmemory: log the time for glTexSubImage/glReadPixels
+
+2016-01-08 18:36:54 +1100  Matthew Waters <matthew@centricular.com>
+
+	* gst-libs/gst/gl/Makefile.am:
+	* gst-libs/gst/gl/gl.h:
+	* gst-libs/gst/gl/glprototypes/Makefile.am:
+	* gst-libs/gst/gl/glprototypes/all_functions.h:
+	* gst-libs/gst/gl/glprototypes/query.h:
+	* gst-libs/gst/gl/gstgl_fwd.h:
+	* gst-libs/gst/gl/gstglquery.c:
+	* gst-libs/gst/gl/gstglquery.h:
+	* tests/check/Makefile.am:
+	* tests/check/libs/.gitignore:
+	* tests/check/libs/gstglquery.c:
+	  gl: add a gstglquery object for arbitrary GL queries
+	  Currently only GL_TIME_ELAPSED and GL_TIMESTAMP are supported
+
+2016-01-11 17:22:26 +1100  Matthew Waters <matthew@centricular.com>
+
+	* gst-libs/gst/gl/gstgldebug.c:
+	* gst-libs/gst/gl/gstgldebug.h:
+	  gldebug: implement a delayed debug system
+	  The messages are stored by gst_gl_async_debug_store_log_msg() and output later
+	  by a corresponding store(), output() or an unset()/free().
+	  Some wrapper macros are provided to avoid callers explicitly using __FILE__,
+	  GST_FUNCTION and __LINE__
+
+2016-01-11 17:26:08 +1100  Matthew Waters <matthew@centricular.com>
+
+	* gst-libs/gst/gl/gstgldebug.c:
+	  gldebug: use gst_info_vasprintf in insert_debug_marker()
+	  Allows expansion of GST_PTR_FORMAT and GST_SEGMENT_FORMAT arguments.
+
+2016-01-15 11:22:40 +1100  Matthew Waters <matthew@centricular.com>
+
+	* ext/gl/Makefile.am:
+	* ext/gl/gstglvideoflip.c:
+	* ext/gl/gstglvideoflip.h:
+	* ext/gl/gstopengl.c:
+	  gl: add a videoflip element
+	  Behaves exactly the same as the non-GL videoflip element
+
+2016-01-15 00:04:20 +1100  Matthew Waters <matthew@centricular.com>
+
+	* gst-libs/gst/gl/gstglfilter.c:
+	  glfilter: recreate the fbo on caps changes
+	  The width/height may change which requires recreating the depth buffer.
+
+2016-01-15 00:02:43 +1100  Matthew Waters <matthew@centricular.com>
+
+	* gst-libs/gst/gl/gstglbasefilter.c:
+	* gst-libs/gst/gl/gstglbasefilter.h:
+	  glbasefilter: add a class function on set_caps (from GL)
+	  This is simply a convenience to avoid duplicating the thread marshalling on
+	  set_caps.
+
+2016-01-15 00:00:29 +1100  Matthew Waters <matthew@centricular.com>
+
+	* ext/gl/gstgltransformation.c:
+	  gltransformation: always build a valid mvp matrix
+	  The default case is to build an identity matrix.
+
+2016-01-14 19:03:04 +1100  Matthew Waters <matthew@centricular.com>
+
+	* ext/gl/gstgltransformation.c:
+	  gltransformation: support negative scales
+	  A scale of -1.0 means to flip the video.
+
+2016-01-14 18:42:05 +1100  Matthew Waters <matthew@centricular.com>
+
+	* ext/gl/gstgltransformation.c:
+	  gltransformation: implement passthrough handling
+
+2016-01-14 17:45:03 +1100  Matthew Waters <matthew@centricular.com>
+
+	* ext/gl/gstgltransformation.c:
+	* ext/gl/gstgltransformation.h:
+	  gltransformation: implement navigation events
+	  Reverses the transformation applied through the properties and forwards the
+	  event.
+	  The process for finding the coordinates on the video are as follows:
+	  1. Convert the given pointer_x and pointer_y to model space at the near and far planes
+	  2. Get the equation of the video plane
+	  3. Find where the ray in 1 intersects the plane
+	  4. Profit!
+
+2016-01-14 16:59:12 +1100  Matthew Waters <matthew@centricular.com>
+
+	* ext/gl/gstglimagesink.c:
+	  glimagesink: remove reduntant glimagesink from debug logging
+
+2016-01-14 16:57:40 +1100  Matthew Waters <matthew@centricular.com>
+
+	* gst-libs/gst/gl/x11/gstglwindow_x11.c:
+	  gl/x11/navigation: add button press to the selected event mask
+	  Otherwise we won't get the button press events and GstNavigation fails.
+
+2016-01-14 16:00:00 +1100  Alessandro Decina <alessandro.d@gmail.com>
+
+	* gst-libs/gst/gl/gstglcolorconvert.c:
+	  glcolorconvert: try harder to passthrough
+	  This makes a pipeline like:
+	  ... ! video/x-raw(memory:GLMemory),format=UYVY ! glcolorconvert !
+	  video/x-raw(memory:GLMemory),format={UYVY, NV12} ! ...
+	  passthrough instead of converting UYVY => NV12. The conversion would happen
+	  before this change since the element (and basetransform) transform the src caps
+	  to format={NV12, UYVY} (since NV12 comes first in the glcolorconvert:src
+	  template) and then the default caps fixate func would fixate to NV12. Blah.
+	  Also there's no need to intersect against the template caps in ::transform_caps
+	  since basetransform does that right after calling the vfunc.
+
+2016-01-12 18:31:29 +1100  Matthew Waters <matthew@centricular.com>
+
+	* ext/gl/Makefile.am:
+	* ext/gl/gstglcolorbalance.c:
+	* ext/gl/gstglcolorbalance.h:
+	* ext/gl/gstopengl.c:
+	  gl: implement a colorbalance element
+	  It performs the exact same operation as videobalance but with opengl shaders and
+	  was tested with glvideomixer by comparing frames from videobalance and
+	  glcolorbalance.
+
+2016-01-12 18:21:50 +1100  Matthew Waters <matthew@centricular.com>
+
+	* ext/gl/gstglvideomixer.c:
+	* ext/gl/gstglvideomixer.h:
+	  glvideomixer: implement glBlendFunc and glBlendEquation
+	  Allows more blending options than just A over B
+	  e.g. frame comparisons are now possible.
+	  glvideomixer name=m
+	  sink_0::zorder=0
+	  sink_1::zorder=1
+	  sink_1::blend-equation-rgb={subtract,reverse-subtract}
+	  sink_1::blend-function-src-rgb=src-color
+	  sink_1::blend-function-dst-rgb=dst-color
+	  ! glimagesinkelement
+	  videotestsrc pattern=checkers-4 ! m.sink_0
+	  videotestsrc pattern=checkers-8 ! m.sink_1
+
+2016-01-08 18:38:46 +1100  Matthew Waters <matthew@centricular.com>
+
+	* gst-libs/gst/gl/gstgldebug.c:
+	  gldebug: add a specific category for the debug spam from the driver
+
 2016-01-12 14:54:23 +0000  Tim Sheridan <tim.sheridan@imgtec.com>
 
 	* ext/sbc/gstsbcdec.c:
@@ -24,12 +4190,63 @@
 	  calculated frame lengths.
 	  https://bugzilla.gnome.org/show_bug.cgi?id=742446
 
-2016-01-08 22:19:06 +0300  Sergey Borovkov <serge.borovkov@gmail.com>
+2016-01-12 23:34:31 +1100  Matthew Waters <matthew@centricular.com>
 
-	* ext/qt/qtitem.cc:
-	  qml: Mark material dirty when texture buffer is updated
-	  Qt might not redraw the scene otherwise.
-	  https://bugzilla.gnome.org/show_bug.cgi?id=758286
+	* sys/nvenc/gstnvbaseenc.c:
+	  nvenc: update for recent GL api changes
+	  Specifically the GstGLMemoryPBO addition (which was the unadorned GstGLMemory).
+
+2016-01-12 14:36:02 +1100  Alessandro Decina <alessandro.d@gmail.com>
+
+	* sys/applemedia/avfvideosrc.m:
+	  applemedia: avfvideosrc: optionally get the GL context from gst_element_set_context
+	  Allow setting the GL context with gst_element_set_context. When available, the
+	  local context obtained via the context query still has the precedence.
+
+2016-01-12 14:02:46 +1100  Alessandro Decina <alessandro.d@gmail.com>
+
+	* sys/applemedia/iosurfacememory.c:
+	  applemedia: iosurfacememory: remove NO_SHARE flag
+	  The full memory can be safely shared. Sharing a sub region can't be done and
+	  will fail in the base allocator, triggering a copy.
+
+2016-01-11 13:33:46 -0300  Thiago Santos <thiagoss@osg.samsung.com>
+
+	* gst/frei0r/gstfrei0rmixer.c:
+	  frei0rmixer: replace accept-caps with caps query
+	  It wants to check if upstream can produce a certain format,
+	  accept-caps might only check if the next element can produce it.
+
+2016-01-07 20:56:54 +1100  Matthew Waters <matthew@centricular.com>
+
+	* gst-libs/gst/gl/gstglbasememory.c:
+	* gst-libs/gst/gl/gstglmemorypbo.c:
+	  glbasememory: Free the actual memory object when requested
+	  Otherwise we are leaking ~400B on each GstMemory allocation.
+	  Freeing in the base class matches the GObject semantics.
+
+2016-01-07 20:54:41 +1100  Matthew Waters <matthew@centricular.com>
+
+	* gst-libs/gst/gl/gstglmemorypbo.c:
+	  glmemorypbo: don't double read pixels
+	  The optimistic download_transfer was not setting the required flag to not
+	  perform glReadPixels on subsequent map (READ). resulting in glReadPixels
+	  happening twice.
+
+2016-01-07 18:47:37 +1100  Matthew Waters <matthew@centricular.com>
+
+	* gst-libs/gst/gl/gstglmemory.c:
+	* gst-libs/gst/gl/gstglmemory.h:
+	* gst-libs/gst/gl/gstglmemorypbo.c:
+	  glmemory: expose gst_gl_memory_texsubimage
+	  Removes extremely similar code from glmemorypbo.
+
+2016-01-07 18:05:23 +1100  Matthew Waters <matthew@centricular.com>
+
+	* gst-libs/gst/gl/gstglfeature.c:
+	  glfeature add a specific debug category
+	  Saves having to trawl through the 'default' category when function retrieval
+	  goes wrong.
 
 2016-01-05 14:35:11 -0500  Bob Holcomb <bholcomb@mak.com>
 
@@ -40,6 +4257,61 @@
 	  on some systems.
 	  https://bugzilla.gnome.org/show_bug.cgi?id=760127
 
+2016-01-08 17:11:09 +0000  Luis de Bethencourt <luisbg@osg.samsung.com>
+
+	* ext/opencv/gstpyramidsegment.h:
+	  opencv: remove check for OpenCV version
+	  After commit 64080e632, configure checks for all the header files that
+	  should be available in OpenCV 2.3 and later. If any of these files isn't
+	  there the OpenCV elements won't be part of the build.
+	  No need to recheck for opencv2/legacy/legacy.hpp again in
+	  gstpyramidsegment.h. Minimum supported OpenCV version must have this header
+	  and configure already checks for it. Removing check.
+
+2016-01-08 15:01:47 +0000  Luis de Bethencourt <luisbg@osg.samsung.com>
+
+	* ext/opencv/gstcvsmooth.cpp:
+	  opencv: always do cvsmooth in place
+	  After the update to new OpenCV API the transform function using an out
+	  buffer is not necessary. We can always do the transformation in place.
+
+2016-01-08 12:39:29 +0000  Luis de Bethencourt <luisbg@osg.samsung.com>
+
+	* ext/opencv/gstpyramidsegment.cpp:
+	* ext/opencv/gstpyramidsegment.h:
+	  opencv: do pyramidsegment's transformation in place
+	  Run the transform function of pyramidsegment in place, reusing the image
+	  data as both source and destination in cvPyrSegmentation. This avoids
+	  copying the image back and forth and the extra memory.
+
+2016-01-07 15:21:40 -0300  Thiago Santos <thiagoss@osg.samsung.com>
+
+	* tests/check/elements/adaptive_demux_common.c:
+	* tests/check/elements/hls_demux.c:
+	  tests: hlsdemux: add test for updating segment stop
+	  Add a test for seeking that only updates stop position and verifies
+	  that start is unmodified
+
+2016-01-07 15:21:22 -0300  Thiago Santos <thiagoss@osg.samsung.com>
+
+	* gst-libs/gst/adaptivedemux/gstadaptivedemux.c:
+	  adaptivedemux: fix seeking that just updates stop position
+	  Fixed adaptivedemux seeking without flushing that just wants
+	  to update stop position. This required protecting the segment
+	  variables with a new mutex so that the seeking thread and the
+	  download threads could safely manipulate the segment and
+	  events related to it.
+	  This contention is only locked/unlocked when starting a new
+	  download, when the first fragment of a segment is received and
+	  when seeking so, hopefully, it won't damage performance.
+
+2016-01-06 16:51:08 -0300  Thiago Santos <thiagoss@osg.samsung.com>
+
+	* gst-libs/gst/adaptivedemux/gstadaptivedemux.c:
+	  adaptivedemux: fix segment update on seeks
+	  Fixes typo on reverse rate check and also only update the
+	  position when the start/stop was actually changed.
+
 2016-01-07 18:10:49 +0200  Sebastian Dröge <sebastian@centricular.com>
 
 	* gst/mxf/mxftypes.c:
@@ -50,27 +4322,494 @@
 	  a bit more and causes writing to the guint as pointer to overwrite map.memory,
 	  which then later crashes during unmapping of the memory.
 
+2016-01-07 18:02:33 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+	* gst/mxf/mxfmetadata.c:
+	  mxfmetadata: Initialize boolean to FALSE to fix valgrind warning
+	  Seems to be a false warning though.
+
+2016-01-07 14:08:39 +1100  Matthew Waters <matthew@centricular.com>
+
+	* gst-libs/gst/gl/gstglsyncmeta.c:
+	  glsyncmeta: only flush with a shared context
+	  The wait code will flush for us for single context pipelines.
+
+2016-01-07 14:02:52 +1100  Matthew Waters <matthew@centricular.com>
+
+	* gst-libs/gst/gl/gstglcontext.c:
+	* gst-libs/gst/gl/gstglcontext.h:
+	* tests/check/libs/gstglcontext.c:
+	  glcontext: implement checking whether a context has been shared
+	  Some operations are unnecessary when running with only a single GL
+	  context.
+	  e.g. glFlush when setting a fence object as the flush happens on wait.
+	  API: gst_gl_context_is_shared
+
+2016-01-06 14:54:30 +0000  Tim-Philipp Müller <tim@centricular.com>
+
+	* ext/hls/gsthlsdemux.c:
+	  hlsdemux: put boolean values into gboolean variables
+	  And remove superfluous assignments.
+
+2016-01-06 16:54:49 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+	* gst-libs/gst/player/gstplayer.c:
+	  player: Only set the pipeline to PLAYING in play() if buffering>=100%
+	  Otherwise the application can break the buffering logic by setting the
+	  pipeline to PLAYING before we buffered enough.
+
+2016-01-05 17:41:23 -0300  Thiago Santos <thiagoss@osg.samsung.com>
+
+	* tests/check/elements/dash_demux.c:
+	  tests: dashdemux: add tests for post-seek segment boundaries check
+	  Checks if the post seek segment is what is expected.
+	  Also makes it easy to add more tests with different seeking flags using the
+	  same functions.
+
+2016-01-05 10:41:27 -0300  Thiago Santos <thiagoss@osg.samsung.com>
+
+	* tests/check/elements/hls_demux.c:
+	  tests: hlsdemux: add tests for seek with reverse rate and snap flags
+	  Add tests to ensure snap flags work as expected for reverse
+	  rates
+
+2016-01-05 10:39:11 -0300  Thiago Santos <thiagoss@osg.samsung.com>
+
+	* gst-libs/gst/adaptivedemux/gstadaptivedemux.c:
+	  adaptivedemux: stop reverse playback when we reach the limit
+	  Avoids downloading and pushing a full segment just to get 1 nanosecond
+	  of data. This happens frequently when seeking is done with flags
+	  that adjust to boundaries or when the start is aligned with segment
+	  starts. The later is common when segment durations is a multiple of
+	  a second.
+
+2016-01-05 09:16:45 -0300  Thiago Santos <thiagoss@osg.samsung.com>
+
+	* ext/hls/gsthlsdemux.c:
+	  hlsdemux: fix reverse playback seek with snap flags
+	  Properly handle snap flags during reverse seeking. In this case
+	  the before/after are also reversed, so handle those as such.
+	  For example: with a sequence of 1s fragments:
+	  |-- 0 --|-- 1 --|-- 2 --|-- 3 --|
+	  If you seek to 1.5s it is inside fragment 1. With reverse and
+	  snap-before: should play from the end of fragment 1
+	  snap-after: should play from the end of fragment 0
+
+2016-01-05 09:01:10 -0300  Thiago Santos <thiagoss@osg.samsung.com>
+
+	* gst-libs/gst/adaptivedemux/gstadaptivedemux.c:
+	  adaptivedemux: correctly track segment.position in reverse playback
+	  For reverse, set position to segment.stop when starting and also
+	  don't set the position to fragment end timestamp when it finishes,
+	  just leave it at the fragment start.
+
+2016-01-05 08:59:26 -0300  Thiago Santos <thiagoss@osg.samsung.com>
+
+	* ext/hls/gsthlsdemux.c:
+	  hlsdemux: simplify snap flags checking
+	  Replace:
+	  if (boolean) var = true;
+	  with:
+	  var = (boolean);
+
+2015-12-28 02:18:06 -0300  Thiago Santos <thiagoss@osg.samsung.com>
+
+	* ext/hls/gsthlsdemux.c:
+	  hlsdemux: respect keyunit flag for position
+	  Set the segment start position when keyunit flag is active
+
+2015-12-24 18:49:39 -0300  Thiago Santos <thiagoss@osg.samsung.com>
+
+	* tests/check/elements/adaptive_demux_common.c:
+	* tests/check/elements/hls_demux.c:
+	  tests: hls_demux: add tests for seeking segment
+	  Tests that check that the segment sent after a seek is correct.
+	  Allows testing that multiple seeking flags work as expected
+
+2015-12-24 09:27:33 -0300  Thiago Santos <thiagoss@osg.samsung.com>
+
+	* tests/check/elements/adaptive_demux_common.c:
+	* tests/check/elements/adaptive_demux_common.h:
+	* tests/check/elements/adaptive_demux_engine.c:
+	* tests/check/elements/adaptive_demux_engine.h:
+	  tests: adaptive_demux: add function to be able to check demuxer events
+	  Allows writing tests that verify that events are correct.
+	  Useful to monitor and check segments after seeks, for example.
+
+2015-12-23 15:25:29 -0300  Thiago Santos <thiagoss@osg.samsung.com>
+
+	* tests/check/elements/adaptive_demux_common.c:
+	* tests/check/elements/adaptive_demux_common.h:
+	* tests/check/elements/dash_demux.c:
+	* tests/check/elements/hls_demux.c:
+	  tests: adaptive: update to allow more flexible seeking tests
+	  Allows defining a seek event to be able to change seeking parameters
+	  and create more seeking test scenarios
+
+2015-12-23 15:23:27 -0300  Thiago Santos <thiagoss@osg.samsung.com>
+
+	* tests/check/Makefile.am:
+	  tests: hlsdemux: fix makefile variable typo
+
+2016-01-06 16:50:00 +1100  Alessandro Decina <alessandro.d@gmail.com>
+
+	* sys/applemedia/avfvideosrc.m:
+	  applemedia: avfvideosrc: enable renegotiation
+	  We can actually renegotiate now, so remove old check which disabled it.
+
+2016-01-06 16:25:38 +1100  Matthew Waters <matthew@centricular.com>
+
+	* ext/gl/gstglcolorconvertelement.c:
+	* gst-libs/gst/gl/gstglcolorconvert.c:
+	* gst-libs/gst/gl/gstglcolorconvert.h:
+	  glcolorconvert: implement usage of a buffer pool
+	  Saves unnecessary glGenTextures and glDeleteTextures which may have a
+	  non-trivial cost.
+
+2016-01-06 15:50:07 +1100  Matthew Waters <matthew@centricular.com>
+
+	* gst-libs/gst/gl/gstglbasememory.c:
+	  glbasememory: fix copying GstGLAllocationParams
+	  Fixes a GST_IS_GL_CONTEXT critical
+
+2016-01-06 15:44:52 +1100  Matthew Waters <matthew@centricular.com>
+
+	* gst-libs/gst/gl/gstglmemorypbo.c:
+	  glmemorypbo: remove unused code
+	  https://bugzilla.gnome.org/show_bug.cgi?id=759679
+
+2016-01-06 13:20:17 +1100  Alessandro Decina <alessandro.d@gmail.com>
+
+	* sys/applemedia/avfvideosrc.m:
+	  applemedia: avfvideosrc: small negotiation fix
+	  Fix negotiation when GLMemory is requested but a context is not available
+
+2016-01-06 11:40:38 +1100  Alessandro Decina <alessandro.d@gmail.com>
+
+	* sys/applemedia/vtenc.c:
+	  applemedia: vtenc: accept UYVY on Mac
+	  When doing GLMemory avfvideosrc negotiates UYVY. This change allows avfvideosrc
+	  ! tee name=t ! ... ! glimagesink t. ! ... ! gldownload ! vtenc_h264 ! ...
+	  to do GLMemory and 0-copy with the encoder (with the CV meta).
+
+2016-01-06 11:29:15 +1100  Alessandro Decina <alessandro.d@gmail.com>
+
+	* sys/applemedia/avfvideosrc.m:
+	  applemedia: avfvideosrc: change texture format from BGRA to NV12 on iOS
+	  Change texture format from BGRA to NV12. This allows a pipeline like avfvideosrc
+	  ! tee name=t ! ... ! glimagesink t. ! ... ! gldownload ! vtenc_h264 ! ...  to
+	  negotiate GLMemory. This makes the glimagesink branch much faster (obviously)
+	  and triggers the 0-copy path between avfvideosrc and vtenc (using the CV meta).
+	  Combined this results in a huge perf improvement on iOS (25-30% of CPU time in a
+	  pipeline like the one above).
+	  Note that this doesn't introduce a new shader conversion in the sink, since BGRA
+	  textures had to be copied/converted from format=BGRA,texture-target=RECTANGLE to
+	  format=RGBA,texture-target=2D anyway.
+
+2016-01-04 20:26:09 +1100  Matthew Waters <matthew@centricular.com>
+
+	* gst-libs/gst/gl/gstglcolorconvert.c:
+	* gst-libs/gst/gl/gstglupload.c:
+	* gst-libs/gst/gl/gstglutils.c:
+	* gst-libs/gst/gl/gstglutils.h:
+	  glupload: always add texture-target field to GL caps
+	  1. Various elements/base classes only perform a subset check on accept-caps
+	  2. Some GL elements have texture-target in their pad template
+	  3. When checking subsets, only the caps to check are allowed to contain extra
+	  fields.  If the 'template' caps have extra fields, the subset fails.
+	  Thus without texture-target on the caps, various accept-caps implementations
+	  were failing.
+	  Also, add some convenience functions for setting and retrieving
+	  texture targets to/from GValue.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=759860
+
+2015-12-29 18:16:04 +1100  Matthew Waters <matthew@centricular.com>
+
+	* gst-libs/gst/gl/gstglupload.c:
+	  glupload: passthrough composition caps features
+	  Don't unconditionally add it to any and all caps transformations.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=759860
+
+2016-01-04 09:52:47 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+	* docs/libs/gst-plugins-bad-libs-sections.txt:
+	* gst-libs/gst/player/gstplayer.c:
+	* gst-libs/gst/player/gstplayer.h:
+	* tests/check/libs/player.c:
+	* win32/common/libgstplayer.def:
+	  player: Remove gst_player_new() and make gst_player_new_full() the normal constructor
+	  In very few cases the simple version was actually needed and having the
+	  parameters hidden by a _full() version caused application that actually needed
+	  it to not use it.
+
+2016-01-04 01:03:08 +1100  Jan Schmidt <jan@centricular.com>
+
+	* gst-libs/gst/gl/gstglviewconvert.c:
+	* gst-libs/gst/gl/gstglviewconvert.h:
+	  glviewconvert: Fix stereoscopic handling w/ texture-target
+	  The addition of texture-target negotiation broke stereoscopic
+	  handling when not in passthrough mode, so fix that.
+
+2015-10-07 18:53:43 +0900  Hyunjun Ko <zzoon.ko@samsung.com>
+
+	* gst/sdp/gstsdpdemux.c:
+	  sdpdemux: replace duplicated codes to call new base sdp apis
+	  https://bugzilla.gnome.org/show_bug.cgi?id=745880
+
+2015-12-30 18:00:47 -0800  Reynaldo H. Verdejo Pinochet <reynaldo@osg.samsung.com>
+
+	* ext/rtmp/README:
+	  rtmp: refer to both elements in the README
+
+2015-12-29 14:35:14 -0800  Reynaldo H. Verdejo Pinochet <reynaldo@osg.samsung.com>
+
+	* ext/rtmp/gstrtmpsrc.c:
+	  rtmpsrc: check for failed RTMP context alloc
+	  Avoids an unlikely crash.
+	  Arguably, if allocation fails we have no chance of
+	  recovering but nonetheless, RTMP_Alloc can fail and
+	  librtmp's RTMP_init() (called next) assumes a non-NULL
+	  pointer is passed without checking.
+	  Additionally, unify exit path on error.
+
+2015-12-29 14:16:58 -0800  Reynaldo H. Verdejo Pinochet <reynaldo@osg.samsung.com>
+
+	* ext/rtmp/gstrtmpsink.c:
+	  rtmpsink: check for failed RTMP context alloc
+	  Avoids an unlikely crash.
+	  Arguably, if allocation fails we have no chance of
+	  recovering but nonetheless, RTMP_Alloc can fail and
+	  librtmp's RTMP_init() (called next) assumes a non-NULL
+	  pointer is passed without checking.
+	  Additionally, unify exit path on error.
+
+2015-12-29 11:58:31 -0800  Reynaldo H. Verdejo Pinochet <reynaldo@osg.samsung.com>
+
+	* ext/rtmp/gstrtmp.c:
+	  rtmp: correct librtmp log-level mappings
+	  Additionally, move to a switch in _set_debug_level()
+	  to make easier to follow and compare with the
+	  mappings in _log_callback()
+
+2015-12-30 13:16:40 +0000  Tim-Philipp Müller <tim@centricular.com>
+
+	* gst-libs/gst/codecparsers/gstvp9parser.c:
+	  codecparsers: vp9: minor clean-up
+	  Remove setting of parser variable to NULL after free,
+	  that makes no sense (and coverity is no doubt going
+	  to complain about it).
+
+2015-12-30 13:12:13 +0000  Tim-Philipp Müller <tim@centricular.com>
+
+	* gst-libs/gst/codecparsers/gstvp9parser.c:
+	* gst-libs/gst/codecparsers/gstvp9parser.h:
+	  codecparsers: vp9: fix macro namespacing and rename GstVp9InterpFilter
+
+2015-12-30 13:08:30 +0000  Tim-Philipp Müller <tim@centricular.com>
+
+	* gst-libs/gst/codecparsers/gstvp9parser.c:
+	* gst-libs/gst/codecparsers/gstvp9parser.h:
+	  codecparsers: vp9: fix doc typos and sprinkle some Since markers
+
+2015-12-30 11:03:04 +0000  Tim-Philipp Müller <tim@centricular.com>
+
+	* gst-libs/gst/codecparsers/Makefile.am:
+	* gst-libs/gst/codecparsers/vp9utils.AUTHORS:
+	* gst-libs/gst/codecparsers/vp9utils.LICENSE:
+	* gst-libs/gst/codecparsers/vp9utils.PATENTS:
+	* gst-libs/gst/codecparsers/vp9utils.c:
+	* gst-libs/gst/codecparsers/vp9utils.h:
+	  codecparsers: vp9: move license blurb into header and remove aux files
+	  This is just a bunch of lookup tables..
+
+2015-12-30 11:54:25 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+	* win32/common/libgstcodecparsers.def:
+	  win32: Update libgstcodecparsers.def with the new symbols
+
+2015-12-30 11:54:14 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+	* gst-libs/gst/codecparsers/dboolhuff.h:
+	  codecparsers: Add another G_GNUC_INTERNAL
+
+2015-12-30 11:40:59 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+	* gst-libs/gst/codecparsers/dboolhuff.h:
+	* gst-libs/gst/codecparsers/nalutils.h:
+	* gst-libs/gst/codecparsers/parserutils.h:
+	* gst-libs/gst/codecparsers/vp8utils.h:
+	* gst-libs/gst/codecparsers/vp9utils.h:
+	  codecparsers: Spread some G_GNUC_INTERNAL in various places
+
+2015-12-30 11:38:14 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+	* gst-libs/gst/codecparsers/vp9utils.c:
+	  vp9parser: Fix indentation to make gst-indent happier
+
+2015-12-30 11:36:45 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+	* gst-libs/gst/codecparsers/Makefile.am:
+	* gst-libs/gst/codecparsers/gstvp9parser.c:
+	* gst-libs/gst/codecparsers/vp9utils.c:
+	* gst-libs/gst/codecparsers/vp9utils.h:
+	  vp9parser: Rename symbols to prevent symbol conflicts
+	  Also make clamp() a static function for the same reason and use CLAMP (as
+	  defined by GLib) in the GStreamer code.
+
+2015-12-30 11:19:33 +0200  Sreerenj Balachandran <sreerenj.balachandran@intel.com>
+
+	* gst-libs/gst/codecparsers/Makefile.am:
+	* gst-libs/gst/codecparsers/gstvp9parser.c:
+	* gst-libs/gst/codecparsers/gstvp9parser.h:
+	* gst-libs/gst/codecparsers/vp9utils.AUTHORS:
+	* gst-libs/gst/codecparsers/vp9utils.LICENSE:
+	* gst-libs/gst/codecparsers/vp9utils.PATENTS:
+	* gst-libs/gst/codecparsers/vp9utils.c:
+	* gst-libs/gst/codecparsers/vp9utils.h:
+	  codecparsers: Add VP9 codec parser
+	  https://bugzilla.gnome.org/show_bug.cgi?id=757597
+
+2015-12-30 12:12:17 +1100  Matthew Waters <matthew@centricular.com>
+
+	* gst-libs/gst/gl/gstglmemorypbo.c:
+	  glmemorypbo: fix wrapping data on GL 2.1
+	  GL 2.1 only supports pbo upload.
+	  The wrapped data pointer was only being set on the pbo memory and on the
+	  glmemory so when a download was requested (in GL 2.1), glmemory was
+	  allocating a new data pointer and thus not returning the wrapped data.
+
+2015-12-30 12:11:09 +1100  Matthew Waters <matthew@centricular.com>
+
+	* gst-libs/gst/gl/gstglmemorypbo.c:
+	  glmemorypbo: only create a pbo memory if the context actually supports it
+	  e.g. GL <= 2.0 does not support pbo usage and GL 2.1 only supports pbo upload.
+
+2015-12-30 12:09:29 +1100  Matthew Waters <matthew@centricular.com>
+
+	* gst-libs/gst/gl/gstglmemory.c:
+	* gst-libs/gst/gl/gstglmemorypbo.c:
+	  glmemory: small code reformat
+	  makes the alloc_params selections fit on a single line.
+
+2015-12-30 12:06:17 +1100  Matthew Waters <matthew@centricular.com>
+
+	* tests/check/libs/gstglmemory.c:
+	  tests/glmemory: output data pointer values on failure
+	  Allows quicker inspection of what failed.
+
+2015-12-29 17:04:57 +1100  Matthew Waters <matthew@centricular.com>
+
+	* ext/gl/gstgleffects.c:
+	  gleffects: fix shader compilation with legacy opengl
+	  All the gleffects shaders can be run against a gles2 or a legacy opengl glsl
+	  compiler but weren't being advertised as such.
+	  Fixes gleffects under desktop opengl < 3.2.
+
+2015-12-29 18:01:30 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+	* gst-libs/gst/gl/gstglbasememory.c:
+	  glbasememory: Remove bogus NULL check
+	  CID 1346534
+
+2015-12-29 10:57:36 +1100  Alessandro Decina <alessandro.d@gmail.com>
+
+	* sys/applemedia/avfvideosrc.m:
+	  applemedia: avfvideosrc: output at highest fps/resolution by default
+	  Fixate to the highest possible resolution and fps. Otherwise by default we end
+	  up fixating at 2fps and the lowest supported resolution, which is hardly what
+	  someone who bought an overpriced smartphone wants.
+
 2015-12-28 15:53:59 +0200  Sebastian Dröge <sebastian@centricular.com>
 
 	* gst-libs/gst/gl/glprototypes/sync.h:
 	  gl: Add \0 terminators for the Apple sync extension
 	  Otherwise GL initialization might check for extensions forever and never finishes.
 
-2015-12-23 20:24:46 +0000  Tim-Philipp Müller <tim@centricular.com>
+2015-12-28 14:41:59 +0200  Sebastian Dröge <sebastian@centricular.com>
 
-	* gst/pcapparse/gstpcapparse.c:
-	  pcapparse: don't crash on 0-sized packets
-	  https://bugzilla.gnome.org/show_bug.cgi?id=756573
+	* gst-libs/gst/gl/gstglcontext.c:
+	  glcontext: Add some debug output when the GL thread is actually running
 
-2015-12-17 15:56:57 +0100  Sebastian Dröge <sebastian@centricular.com>
+2015-12-22 11:23:19 +0000  Florin Apostol <florin.apostol@oregan.net>
 
-	* ext/openjpeg/gstopenjpegdec.c:
-	  openjpegdec: Don't crash when decoding returns NULL data for any component
-	  https://bugzilla.gnome.org/show_bug.cgi?id=758943
+	* ext/dash/gstdashdemux.c:
+	  dashdemux: removed unnecessary space trimming in gst_dash_demux_parse_http_head
+	  sscanf has removed all spaces when it has constructed zone string. There is
+	  no need to search for leading spaces.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=759743
 
-=== release 1.6.2 ===
+2015-12-21 14:50:15 +0000  Florin Apostol <florin.apostol@oregan.net>
 
-2015-12-14 19:51:57 +0100  Sebastian Dröge <sebastian@centricular.com>
+	* ext/dash/gstdashdemux.c:
+	  dashdemux: accept 2 or 4 digit year when using HTTP HEAD for calculating clock compensation
+	  Convert year from 2 digits to 4 digits in gst_dash_demux_parse_http_head
+	  https://bugzilla.gnome.org/show_bug.cgi?id=759743
+	  Also updated references to Rfc822 to Rfc5322
+
+2015-12-27 11:37:09 +0100  Florent Thiéry <florent.thiery@ubicast.eu>
+
+	* ext/gl/gstglfiltershader.c:
+	  glshader: fix usage doc
+	  The property location has been changed in favor of vertex/fragment
+	  string properties; the doc had not been updated and was still referring
+	  to the previous property; also, now the #version header has become mandatory
+	  https://bugzilla.gnome.org/show_bug.cgi?id=759902
+
+2015-12-26 22:34:29 +0100  Florent Thiéry <florent.thiery@ubicast.eu>
+
+	* ext/gl/gstglimagesink.c:
+	  glimagesink: Post unhandled navigation events on the bus
+	  Based off xvimagesink implementation
+	  https://bugzilla.gnome.org/show_bug.cgi?id=759869
+
+2015-12-27 22:32:22 -0800  Reynaldo H. Verdejo Pinochet <reynaldo@osg.samsung.com>
+
+	* ext/opencv/gstmotioncells.cpp:
+	  motioncells: fix splitting of RGB color string
+	  No need to attempt splitting the RGB string in 255 tokens
+	  if we only expect 3.
+	  Left max_tokens at 4 to preserve the current logic (which
+	  allows for extra stuff at the end) and added a warning on
+	  parsing failure instead of silently discarding the value.
+
+2015-12-27 21:23:37 -0800  Reynaldo H. Verdejo Pinochet <reynaldo@osg.samsung.com>
+
+	* ext/opencv/gstmotioncells.cpp:
+	  motioncells: fix typo in header
+
+2015-12-27 21:19:19 -0800  Reynaldo H. Verdejo Pinochet <reynaldo@osg.samsung.com>
+
+	* ext/opencv/gstmotioncells.cpp:
+	  motioncells: fix misleading warning message
+	  calculate_motion != FALSE means the motion computation
+	  logic is disabled, not a mapping error.
+
+2015-12-27 21:11:18 -0800  Reynaldo H. Verdejo Pinochet <reynaldo@osg.samsung.com>
+
+	* ext/opencv/gstmotioncells.cpp:
+	  motioncells: rework property descriptions
+
+2015-12-27 01:11:42 -0800  Reynaldo H. Verdejo Pinochet <reynaldo@osg.samsung.com>
+
+	* ext/opencv/gstmotioncells.cpp:
+	  motioncells: use NULL instead of g_strdup(NULL)
+
+2015-12-28 09:04:12 +0900  Vineeth TM <vineeth.tm@samsung.com>
+
+	* gst-libs/gst/gl/gstglbufferpool.c:
+	  glbufferpool: Fix build error
+	  When GST_GL_HAVE_PLATFORM_EGL is not defined, then info variable
+	  will not be used and this results in build error
+	  https://bugzilla.gnome.org/show_bug.cgi?id=759913
+
+2015-12-24 15:28:26 +0100  Sebastian Dröge <sebastian@centricular.com>
+
+	* configure.ac:
+	  Back to development
+
+=== release 1.7.1 ===
+
+2015-12-24 14:28:42 +0100  Sebastian Dröge <sebastian@centricular.com>
 
 	* ChangeLog:
 	* NEWS:
@@ -103,7 +4842,6 @@
 	* docs/plugins/inspect/plugin-festival.xml:
 	* docs/plugins/inspect/plugin-fieldanalysis.xml:
 	* docs/plugins/inspect/plugin-flite.xml:
-	* docs/plugins/inspect/plugin-fragmented.xml:
 	* docs/plugins/inspect/plugin-frei0r.xml:
 	* docs/plugins/inspect/plugin-gaudieffects.xml:
 	* docs/plugins/inspect/plugin-gdp.xml:
@@ -111,11 +4849,11 @@
 	* docs/plugins/inspect/plugin-gmedec.xml:
 	* docs/plugins/inspect/plugin-gsm.xml:
 	* docs/plugins/inspect/plugin-gstsiren.xml:
+	* docs/plugins/inspect/plugin-hls.xml:
 	* docs/plugins/inspect/plugin-id3tag.xml:
 	* docs/plugins/inspect/plugin-inter.xml:
 	* docs/plugins/inspect/plugin-interlace.xml:
 	* docs/plugins/inspect/plugin-jpegformat.xml:
-	* docs/plugins/inspect/plugin-liveadder.xml:
 	* docs/plugins/inspect/plugin-mimic.xml:
 	* docs/plugins/inspect/plugin-mms.xml:
 	* docs/plugins/inspect/plugin-modplug.xml:
@@ -154,9 +4892,9 @@
 	* docs/plugins/inspect/plugin-y4mdec.xml:
 	* gst-plugins-bad.doap:
 	* win32/common/config.h:
-	  Release 1.6.2
+	  Release 1.7.1
 
-2015-12-14 19:27:59 +0100  Sebastian Dröge <sebastian@centricular.com>
+2015-12-24 14:00:54 +0100  Sebastian Dröge <sebastian@centricular.com>
 
 	* po/af.po:
 	* po/az.po:
@@ -200,28 +4938,1397 @@
 	* po/zh_CN.po:
 	  Update .po files
 
-2015-12-14 19:16:12 +0100  Sebastian Dröge <sebastian@centricular.com>
+2015-12-24 12:23:00 +0100  Sebastian Dröge <sebastian@centricular.com>
 
+	* po/cs.po:
 	* po/da.po:
+	* po/de.po:
 	* po/hu.po:
 	* po/ky.po:
+	* po/nb.po:
+	* po/nl.po:
+	* po/pl.po:
+	* po/ru.po:
+	* po/sr.po:
 	* po/sv.po:
+	* po/uk.po:
+	* po/vi.po:
+	* po/zh_CN.po:
 	  po: Update translations
 
-2015-12-12 10:07:46 +1100  Matthew Waters <matthew@centricular.com>
+2015-12-23 23:13:21 +0000  Tim-Philipp Müller <tim@centricular.com>
 
+	* tests/check/elements/curlftpsink.c:
+	* tests/check/elements/curlhttpsink.c:
+	* tests/check/elements/curlsmtpsink.c:
+	* tests/check/elements/pcapparse.c:
+	* tests/check/elements/rtponviftimestamp.c:
+	  tests: fix indentation
+
+2015-12-23 23:10:50 +0000  Tim-Philipp Müller <tim@centricular.com>
+
+	* tests/check/elements/pcapparse.c:
+	  tests: pcapparse: add check for 0-sized packets
+	  https://bugzilla.gnome.org/show_bug.cgi?id=756573
+
+2015-12-23 20:24:46 +0000  Tim-Philipp Müller <tim@centricular.com>
+
+	* gst/pcapparse/gstpcapparse.c:
+	  pcapparse: don't crash on 0-sized packets
+	  https://bugzilla.gnome.org/show_bug.cgi?id=756573
+
+2015-12-23 13:06:45 +0100  Sebastian Dröge <sebastian@centricular.com>
+
+	* common:
+	  Update common
+
+2015-12-23 13:04:23 +0100  Sebastian Dröge <sebastian@centricular.com>
+
+	* configure.ac:
+	* pkgconfig/Makefile.am:
+	* pkgconfig/gstreamer-player-uninstalled.pc.in:
+	* pkgconfig/gstreamer-player.pc.in:
+	  player: Add pkg-config files
+
+2015-12-23 12:16:54 +0100  Sebastian Dröge <sebastian@centricular.com>
+
+	* autogen.sh:
+	  autogen.sh: Enable player tests by default
+	  This will be automatically be updated together with the next common update
+	  again.
+
+2015-12-23 09:55:26 +0100  Sebastian Dröge <sebastian@centricular.com>
+
+	* configure.ac:
+	* tests/check/Makefile.am:
+	* tests/check/libs/player.c:
+	  player: Add unit test that is disabled by default
+	  The unit test is downloading a few small media files from the Internet,
+	  which are then used during the test. "make clean" removes the files again.
+
+2015-12-22 14:44:28 +0100  Sebastian Dröge <sebastian@centricular.com>
+
+	* docs/libs/Makefile.am:
+	* docs/libs/gst-plugins-bad-libs-docs.sgml:
+	* docs/libs/gst-plugins-bad-libs-sections.txt:
+	* docs/libs/gst-plugins-bad-libs.types:
+	  player: Integrate into the documentation build system
+
+2015-12-22 14:24:00 +0100  Sebastian Dröge <sebastian@centricular.com>
+
+	* configure.ac:
+	* gst-libs/gst/Makefile.am:
+	* gst-libs/gst/player/Makefile.am:
+	* gst-libs/gst/player/gstplayer-g-main-context-signal-dispatcher.c:
+	* gst-libs/gst/player/gstplayer-g-main-context-signal-dispatcher.h:
+	* gst-libs/gst/player/gstplayer-media-info-private.h:
+	* gst-libs/gst/player/gstplayer-media-info.c:
+	* gst-libs/gst/player/gstplayer-media-info.h:
+	* gst-libs/gst/player/gstplayer-signal-dispatcher-private.h:
+	* gst-libs/gst/player/gstplayer-signal-dispatcher.c:
+	* gst-libs/gst/player/gstplayer-signal-dispatcher.h:
+	* gst-libs/gst/player/gstplayer-types.h:
+	* gst-libs/gst/player/gstplayer-video-overlay-video-renderer.c:
+	* gst-libs/gst/player/gstplayer-video-overlay-video-renderer.h:
+	* gst-libs/gst/player/gstplayer-video-renderer-private.h:
+	* gst-libs/gst/player/gstplayer-video-renderer.c:
+	* gst-libs/gst/player/gstplayer-video-renderer.h:
+	* gst-libs/gst/player/gstplayer-visualization.c:
+	* gst-libs/gst/player/gstplayer-visualization.h:
+	* gst-libs/gst/player/gstplayer.c:
+	* gst-libs/gst/player/gstplayer.h:
+	* gst-libs/gst/player/player.h:
+	* win32/common/libgstplayer.def:
+	  player: Import GstPlayer playback convenience API
+	  Based on https://github.com/sdroege/gst-player
+	  commit 9ce6ae0dbb8eeeefaf794cfae80e279a03cc598d
+
+2015-12-23 09:50:13 +0100  Sebastian Dröge <sebastian@centricular.com>
+
+	* gst-libs/gst/gl/gstglmemorypbo.c:
+	  glmemorypbo: Comment out unused functions to fix compilation with clang
+	  It's not clear if these are intentionally unused or the code should be
+	  changed, but this fixes compilation for the time being at least.
+	  See https://bugzilla.gnome.org/show_bug.cgi?id=759679
+
+2015-11-10 16:25:53 +0000  Alex Ashley <bugzilla@ashley-family.net>
+
+	* tests/check/elements/hlsdemux_m3u8.c:
+	  hlsdemux: tests: check URL joining if media URL contains a '/' character
+	  If the query parameter (for example
+	  http://example.net/1054559_1500k.mp4/master.m3u8?acl=/*1054559_1500k.mp4),
+	  check that m3u8.c correctly converts the relative URLs of the media
+	  playlists in to absolute URLs. It must not use the last '/' it finds in
+	  the URL, as according to RFC3986 the '/' character is allowed in
+	  the query part of the URL.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=758384
+
+2015-11-10 16:23:59 +0000  Alex Ashley <bugzilla@ashley-family.net>
+
+	* ext/hls/m3u8.c:
+	* tests/check/elements/hlsdemux_m3u8.c:
+	  hlsdemux: unquote all the quoted-string attributes
+	  The URI attribute from the EXT-X-KEY tag and the URI attribute from the
+	  EXT-X-I-FRAMES-ONLY tag are both quoted-string attibutes that have their
+	  quotation marks removed during parsing. The CODECS attribute of the
+	  EXT-X-STREAM-INF is also a quoted-string attribute, but this attribute
+	  was not being un-quoted.
+	  This commit changes the parser to always unquote all quoted-string
+	  attributes and adjusts the unit tests to this new bevahiour for the
+	  CODECS attribute.
+	  An additional test is added to check that parsing of all of the fields
+	  in the EXT-X-STREAM tag is correct, including those that contain comma
+	  characters.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=758384
+
+2015-11-10 16:41:02 +0000  Alex Ashley <bugzilla@ashley-family.net>
+
+	* tests/check/Makefile.am:
+	* tests/check/elements/.gitignore:
+	* tests/check/elements/hls_demux.c:
+	  hlsdemux: tests: add unit tests for hlsdemux
+	  Using the new GstAdaptiveDemux test framework, add tests that
+	  exercise hlsdemux. The following tests are added:
+	  simpleTest
+	  A simple playlist that contains some media URLs
+	  testMediaPlaylist
+	  A master playlist with a variant playlist that contains media URLs
+	  testMediaPlaylistNotFound
+	  A master playlist that points to a missing variant playlist
+	  testFragmentNotFound
+	  A master playlist with a variant playlist that contains media URLs
+	  There is a missing media file referenced from the variant playlist.
+	  testFragmentDownloadError
+	  A master playlist with a variant playlist that contains media URLs
+	  During the download of one media file, the test simulates the network
+	  connection being dropped.
+	  testSeek
+	  A simple test of trying to perform a seek on an HLS stream.
+
+2015-11-10 13:13:35 +0000  Alex Ashley <bugzilla@ashley-family.net>
+
+	* tests/check/Makefile.am:
+	* tests/check/elements/adaptive_demux_common.c:
+	* tests/check/elements/adaptive_demux_common.h:
+	* tests/check/elements/adaptive_demux_engine.c:
+	* tests/check/elements/adaptive_demux_engine.h:
+	* tests/check/elements/dash_demux.c:
+	* tests/check/elements/fake_http_src.c:
+	* tests/check/elements/fake_http_src.h:
+	* tests/check/elements/test_http_src.c:
+	* tests/check/elements/test_http_src.h:
+	  dashdemux: tests: Refactor into adaptive_engine components
+	  To allow code from dash_demux.c to be used by other elements
+	  that are based upon GstAdaptiveDemux, the code has been
+	  refactored into four new files:
+	  adaptive_demux_engine.[ch]
+	  adaptive_demux_common.[ch]
+	  The code in adaptive_demux_engine.c provides a generic
+	  test engine for elements based upon GstAdaptiveDemux.
+	  The code in adaptive_demux_common.c provides a set
+	  of utility functions that are common between the tests
+	  for hlsdemux and dashdemux.
+	  As part of the refactoring, variables in structures were
+	  renamed from using camelCase to underscore_case to match other
+	  GStreamer source code.
+	  The fake_http_src was renamed test_http_src and changed to use
+	  callbacks to provide input data and error conditions. Rather than
+	  using an array of input data that tries to encode all the
+	  possible use cases for the GstTestHTTPSrc element, use a struct of
+	  callbacks.
+	  Users of this element are obliged to implement at least the src_start
+	  callback, which provides a way to link from a URI to the settings
+	  for that URI.
+
+2015-12-22 11:10:31 +0200  Matthew Marsh <matt@stonethree.com>
+
+	* sys/nvenc/gstnvbaseenc.c:
+	  nvenc: fix high CPU use on initialization of multiple encoders at the same time
+	  We need a static lock to protect various NVENC methods in _set_format(). Without
+	  this the CPU use increases dramatically on initialisation of the element when
+	  there are multiple elements being initialised at the same time.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=759742
+
+2015-12-22 10:15:39 -0300  Thiago Santos <thiagoss@osg.samsung.com>
+
+	* ext/hls/gsthlsdemux.c:
+	  hlsdemux: make sure every bad update_playlist return sets an error
+	  Otherwise it segfaults when reporting the error in the bus
+
+2015-12-21 13:57:04 +0100  Sebastian Dröge <sebastian@centricular.com>
+
+	* ext/teletextdec/gstteletextdec.c:
+	  teletextdec: Use NULL instead of g_strdup('\0')
+	  Which is equivalent to g_strdup(NULL).
+	  https://bugzilla.gnome.org/show_bug.cgi?id=759728
+
+2015-12-21 12:33:25 +0100  Sebastian Dröge <sebastian@centricular.com>
+
+	* common:
+	* configure.ac:
+	  configure: Use -Bsymbolic-functions if available
+	  While this is more useful for libraries, some of our plugins with multiple
+	  files and some internal API can also benefit from this.
+
+2015-12-21 12:19:11 +0100  Sebastian Dröge <sebastian@centricular.com>
+
+	* tests/check/libs/gstglcolorconvert.c:
+	  glcolorconvert: Fix name of testsuite
+
+2015-12-21 12:13:15 +0100  Sebastian Dröge <sebastian@centricular.com>
+
+	* gst-libs/gst/gl/gstglcontext.c:
+	  glcontext: Signal context creation from inside the context loop and use g_thread_join() instead of a custom condition variable
+	  Also protect against spurious condition variable wakeups during context
+	  creation.
+
+2015-12-21 11:27:09 +0100  Sebastian Dröge <sebastian@centricular.com>
+
+	* gst-libs/gst/gl/gstglwindow.c:
+	* gst-libs/gst/gl/gstglwindow.h:
+	* gst-libs/gst/gl/x11/gstglwindow_x11.c:
+	  glwindow: Hide navigation specific internal API and add API to asynchronously send navigation events
+	  Exposing the navigation thread's main context, GSourceFuncs and structs called
+	  key_event and mouse_event is exposing a bit too much of the internals. Let's
+	  just go with two functions to asynchronously send navigation events on the
+	  window with the same API as the synchronous ones.
+
+2015-12-21 10:46:52 +0100  Sebastian Dröge <sebastian@centricular.com>
+
+	* gst-libs/gst/gl/gstglwindow.c:
+	* gst-libs/gst/gl/gstglwindow.h:
+	  glwindow: Use g_thread_join() instead of a custom condition variable for waiting for the navigation thread to finish
+	  Also hide some internal functions and fields while we're at it and fix
+	  a race condition with the startup condition variable.
+
+2015-11-30 09:36:09 +0800  Haihua Hu <b55597@freescale.com>
+
+	* gst-libs/gst/gl/gstglwindow.c:
+	  glwindow: Fix memory leak of navigation thread
+	  When stopping the navigation thread, call g_thread_join() to release
+	  the resources hold by it.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=758820
+
+2015-12-19 21:25:49 +0000  Tim-Philipp Müller <tim@centricular.com>
+
+	* ext/assrender/gstassrender.c:
+	* gst/dvbsuboverlay/gstdvbsuboverlay.c:
+	  assrender, dvbsuboverlay: fix example pipelines in docs
+
+2015-12-19 21:10:56 +0000  Tim-Philipp Müller <tim@centricular.com>
+
+	* ext/hls/gsthlsdemux.c:
+	  hlsdemux: reflow update_playlist a bit
+	  Reduce indentation by erroring out directly on failure.
+
+2015-12-19 20:59:12 +0000  Tim-Philipp Müller <tim@centricular.com>
+
+	* ext/hls/gsthlsdemux.c:
+	  hlsdemux: fix potential error leak
+	  Clear error as soon as we determine that the download failed,
+	  otherwise there are code paths where we might return without
+	  clearing it ever, which would leak the GError then. Also, we
+	  can pass a NULL GError pointer to _fetch_uri(), so just do that
+	  instead of passing one that we're going to just free again
+	  right away anyway.
+
+2015-12-19 12:05:59 +0000  Luis de Bethencourt <luisbg@osg.samsung.com>
+
+	* ext/opencv/gstpyramidsegment.cpp:
+	  opencv: remove unneeded sink_event function in pyramidsegment
+
+2015-12-19 12:04:01 +0000  Luis de Bethencourt <luisbg@osg.samsung.com>
+
+	* ext/opencv/gsttextoverlay.cpp:
+	  opencv: remove unneeded sink_event function in textoverlay
+
+2015-12-18 18:51:49 -0300  Thiago Santos <thiagoss@osg.samsung.com>
+
+	* ext/opencv/gsttemplatematch.cpp:
+	  templatematch: remove useless function
+
+2015-12-18 11:56:17 -0300  Thiago Santos <thiagoss@osg.samsung.com>
+
+	* ext/hls/gsthlsdemux.c:
+	  hlsdemux: always set timestamp on reverse playback
+	  Downstream needs to be able to restore the timestamps after a discont
+	  to do reverse playback
+	  https://bugzilla.gnome.org/show_bug.cgi?id=759592
+
+2015-12-18 15:36:40 -0500  Nicolas Dufresne <nicolas.dufresne@collabora.com>
+
+	* gst-libs/gst/gl/gstglcolorconvert.c:
+	  glconvert: Fix compilation of GRAY16_LE/BE shader
+
+2015-11-13 17:24:30 +0100  Nicolas Dufresne <nicolas.dufresne@collabora.com>
+
+	* gst-libs/gst/gl/gstglupload.c:
+	  glupload: Add dmabuf upload method.
+	  This upload method detect and optimize uploads of DMABuf memory. This is
+	  done by creating and caching EGLImages wrapper around DMABuf. The
+	  EGLImages are then binded to a texture which get converter using
+	  standard shader.
+	  Example pipeline:
+	  GST_GL_PLATFORM=egl \
+	  gst-launch-1.0 v4l2src device=/dev/video1 io-mode=4 ! \
+	  video/x-raw,format=NV12 ! glimagesink
+	  https://bugzilla.gnome.org/show_bug.cgi?id=743345
+
+2015-12-18 15:52:46 -0500  Nicolas Dufresne <nicolas.dufresne@collabora.com>
+
+	* gst-libs/gst/gl/egl/gsteglimagememory.c:
+	  eglimagememory: Also import BGR16, ABGR, xBGR, AYUV, GRAY16_LE/BE and Y444
+	  https://bugzilla.gnome.org/show_bug.cgi?id=743345
+
+2015-12-18 11:08:29 -0500  Nicolas Dufresne <nicolas.dufresne@collabora.com>
+
+	* gst-libs/gst/gl/egl/gsteglimagememory.c:
+	  eglimagememory: Add RGB/BGR DMABuf importation support
+	  https://bugzilla.gnome.org/show_bug.cgi?id=743345
+
+2015-11-13 17:40:08 +0100  Lubosz Sarnecki <lubosz.sarnecki@collabora.co.uk>
+
+	* gst-libs/gst/gl/egl/gsteglimagememory.c:
+	* gst-libs/gst/gl/egl/gsteglimagememory.h:
+	  eglimagememory: Methods to create GstGLMemory from dmabufs
+	  Maps GstVideoFormats to suitable DRM fourccs which work with
+	  glcolorconvert, using gst_gl_memory_alloc(). We require mostly
+	  only 4 formats to be supported by the driver. We require DRM
+	  equivalent to RGB16, RGBA, R8 and RG88. This way it's compatible with
+	  DesktopGL, since GL_TEXTURE_2D is used and limit driver requirements.
+	  With this we can virtually support all formats the glcolorconvert
+	  supports.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=743345
+
+2015-10-02 13:31:39 +0200  Lubosz Sarnecki <lubosz.sarnecki@collabora.co.uk>
+
+	* configure.ac:
+	* gst-libs/gst/gl/Makefile.am:
+	  build: Add dmabuf build condition.
+	  configure.ac: Build dmabuf when EGL and drm_fourcc.h is available.
+	  gl: Link gst-allocators.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=743345
+
+2015-11-13 17:09:13 +0100  Lubosz Sarnecki <lubosz.sarnecki@collabora.co.uk>
+
+	* ext/gl/gstglimagesink.c:
+	  glimagesink: Show error when video frame is not mapped.
+	  Adds more meaningful error than
+	  "Failed to convert multiview video buffer", which is always used
+	  when prepare_next_buffer() fails in gst_glimage_sink_prepare().
+	  https://bugzilla.gnome.org/show_bug.cgi?id=743345
+
+2015-11-13 17:05:11 +0100  Lubosz Sarnecki <lubosz.sarnecki@collabora.co.uk>
+
+	* gst-libs/gst/gl/egl/gstglcontext_egl.c:
+	* gst-libs/gst/gl/egl/gstglcontext_egl.h:
+	  gstglcontext_egl: Expose gst_gl_context_egl_get_error_string.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=743345
+
+2015-12-18 16:56:04 +0000  Luis de Bethencourt <luisbg@osg.samsung.com>
+
+	* ext/opencv/gsttextoverlay.cpp:
+	* ext/opencv/gsttextoverlay.h:
+	  opencv: update opencvtextoverlay to GstOpencvVideoFilter
+	  Update opencvtextoverlay to inherit from GstOpencvVideoFilter instead of
+	  from GstElement. This means less code and more uniformity with other OpenCV
+	  elements. The chain/transform function is now a third of the size than
+	  before.
+
+2015-12-18 16:18:52 +0000  Luis de Bethencourt <luisbg@osg.samsung.com>
+
+	* ext/opencv/gsttemplatematch.cpp:
+	* ext/opencv/gsttemplatematch.h:
+	  opencv: update templatematch to GstOpencvVideoFilter
+	  Update pyramidsegment to inherit from GstOpencvVideoFilter instead of from
+	  GstElement. This means less code and more uniformity with other OpenCV
+	  elements.
+
+2015-12-18 15:48:16 +0000  Luis de Bethencourt <luisbg@osg.samsung.com>
+
+	* ext/opencv/gstpyramidsegment.cpp:
+	* ext/opencv/gstpyramidsegment.h:
+	  opencv: update pyramidsegment to GstOpencvVideoFilter
+	  Update pyramidsegment to inherit from GstOpencvVideoFilter instead of from
+	  GstElement. This means less code and more uniformity with other OpenCV
+	  elements.
+
+2015-12-17 17:26:29 +0200  Vivia Nikolaidou <vivia@ahiru.eu>
+
+	* sys/decklink/gstdecklink.cpp:
+	* sys/decklink/gstdecklink.h:
+	* sys/decklink/gstdecklinkaudiosrc.cpp:
+	* sys/decklink/gstdecklinkvideosink.cpp:
+	  decklinkvideosink: Made "auto" mode work according to caps
+	  When the mode of decklinkvideosink is set to "auto", the sink claims to
+	  support the full set of caps that it can support for all modes. Then, every
+	  time new caps are set, the sink will automatically find the correct mode for
+	  these caps and set it.
+	  Caveat: We have no way to know whether a specific mode will actually work for
+	  your hardware. Therefore, if you try sending 4K video to a 1080 screen, it
+	  will silently fail, we have no way to know that in advance. Manually setting
+	  that mode at least gave the user a way to double-check what they are doing.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=759600
+
+2015-12-18 12:28:23 +0000  Luis de Bethencourt <luisbg@osg.samsung.com>
+
+	* ext/opencv/gstmotioncells.cpp:
+	* ext/opencv/gstmotioncells.h:
+	  opencv: update motioncells to GstOpencvVideoFilter
+	  Update motioncells to inherit from GstOpencvVideoFilter instead of from
+	  GstElement. This means less code and more uniformity with other OpenCV
+	  elements.
+
+2015-12-18 12:26:16 +0100  Thomas Roos <thomas.roos@industronic.de>
+
+	* sys/directsound/gstdirectsoundsrc.c:
+	* sys/directsound/gstdirectsoundsrc.h:
+	  directsoundsrc: add device property as it is done in directsoundsink
+	  This allows selection of the device by GUID instead of the name. The name is
+	  user-given and multiple devices can have the same name.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=759484
+
+2015-12-18 12:36:26 +0100  Sebastian Dröge <sebastian@centricular.com>
+
+	* sys/directsound/gstdirectsoundsrc.h:
+	  directsoundsrc: Convert header from (some) DOS line endings to UNIX
+	  A mix between different line endings in the same file is not a good idea,
+	  and the .c files are both with UNIX line endings so let's use that.
+
+2015-12-18 10:30:25 +0000  Julien Isorce <j.isorce@samsung.com>
+
+	* sys/applemedia/Makefile.am:
+	  applemedia: set -mmacosx-version-min to 10.8
+	  Otherwise qtkitvideosrc fails to build on OSX 10.10.4
+	  because QTKit has been deprecated since OS X 10.9.
+	  Also set -mmacosx-version-min=10.8 in front to allow
+	  the user or cerbero to override the version.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=745564
+
+2015-12-18 13:17:34 +1100  Alessandro Decina <alessandro.d@gmail.com>
+
+	* ext/gl/gstgloverlay.c:
+	* gst-libs/gst/gl/gstglbufferpool.c:
+	* gst-libs/gst/gl/gstglmemory.c:
+	* gst-libs/gst/gl/gstglmemory.h:
+	* gst-libs/gst/gl/gstgloverlaycompositor.c:
+	* gst-libs/gst/gl/gstglupload.c:
+	* gst-libs/gst/gl/gstglviewconvert.c:
+	* sys/applemedia/videotexturecache.m:
+	  glmemory: add gst_gl_memory_allocator_get_default
+	  Add gst_gl_memory_allocator_get_default to get the default allocator based on
+	  the opengl version. Allows us to stop hardcoding the PBO allocator which isn't
+	  supported on gles2.
+	  Fixes GL upload on iOS9 among other things.
+
+2015-12-18 11:49:25 +1100  Matthew Waters <matthew@centricular.com>
+
+	* ext/gl/gstglimagesink.c:
+	  glimagesink: don't deadlock on resize
+	  Performing any GL function marshalling off the GL thread with glimagesink's
+	  render lock is prone to deadlocks between the GL thread and the non-GL thread.
+	  What can happen is this:
+	  1. non-GL thread attempts to function marshal to the GL thread.
+	  2. while 1 is happening, the winsys gives an event (say resize)
+	  3. This calls back into glimagesink which taks the render lock.
+	  4. As the GL function marshalling is attempting to run on the GL
+	  and already has glimagesink's render lock locked.  This deadlocks
+	  as the threads are waiting for each other.
+
+2015-12-17 18:16:44 +0000  Luis de Bethencourt <luisbg@osg.samsung.com>
+
+	* ext/opencv/gstedgedetect.cpp:
+	* ext/opencv/gstedgedetect.h:
+	  opencv: update edgedetect to GstOpencvVideoFilter
+	  Update edgedetect to inherit from GstOpencvVideoFilter instead of from
+	  GstElement. This means less code and more uniformity with other OpenCV
+	  elements.
+
+2015-12-17 15:56:57 +0100  Sebastian Dröge <sebastian@centricular.com>
+
+	* ext/openjpeg/gstopenjpegdec.c:
+	  openjpegdec: Don't crash when decoding returns NULL data for any component
+	  https://bugzilla.gnome.org/show_bug.cgi?id=758943
+
+2015-12-15 14:14:36 +1100  Matthew Waters <matthew@centricular.com>
+
+	* gst-libs/gst/gl/gstglbasememory.c:
+	* gst-libs/gst/gl/gstglbasememory.h:
+	  glbasememory: don't unconditionally add the alignment bytes to the size
+	  e.g when wrapping a data pointer we don't want to map/unmap off the end of
+	  pointer with the alignment bytes.
+	  Instead track that information separately as maxsize is used for mapping by
+	  GstMemory and thus represents a size without any alignment padding bytes.
+
+2015-12-17 10:51:31 +0100  Luis de Bethencourt <luisbg@osg.samsung.com>
+
+	* ext/opencv/gstcvsmooth.cpp:
+	* ext/opencv/gstcvsmooth.h:
+	  opencv: add blur and bilateral support in cvsmooth
+	  Adding the support for the two other OpenCV linear filters to smooth
+	  images. The new API does support spatial sigma in the bilateral filter,
+	  hence bringing that property back.
+	  Adding reference to new documentation.
+
+2015-12-17 08:51:48 +0900  Vineeth TM <vineeth.tm@samsung.com>
+
+	* gst/pnm/gstpnmenc.c:
+	  pnmenc: Fix wrong logic leading to memory mishandling
+	  While encoding the frame in ASCII mode, per component four bytes are needed
+	  and after every 20 bytes, a \n will be added. So the calculation should be
+	  size = size * (4 + 1 / 20). This should exclude the header being written.
+	  Since header is also being included in the calculations, memory mishandlings
+	  are happening.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=759520
+
+2015-12-17 15:50:40 +1100  Matthew Waters <matthew@centricular.com>
+
+	* gst-libs/gst/gl/gstglbuffer.c:
+	  glbuffer: add a name to the allocator
+
+2015-12-17 15:23:13 +1100  Matthew Waters <matthew@centricular.com>
+
+	* gst-libs/gst/gl/gstglbasememory.c:
+	* gst-libs/gst/gl/gstglbasememory.h:
+	* gst-libs/gst/gl/gstglbuffer.c:
+	* gst-libs/gst/gl/gstglmemory.c:
+	* gst-libs/gst/gl/gstglmemory.h:
+	* gst-libs/gst/gl/gstglmemorypbo.c:
+	* gst-libs/gst/gl/gstgloverlaycompositor.c:
+	* gst-libs/gst/gl/gstglupload.c:
+	* sys/applemedia/iosurfacememory.c:
+	* sys/applemedia/videotexturecache.m:
+	* tests/check/libs/gstglcolorconvert.c:
+	  gl*memory*: reverse the parameter order of user_data and destroy notify
+	  The convention is to have the destroy notify last after any user data
+
+2015-12-17 15:07:33 +1100  Alessandro Decina <alessandro.d@gmail.com>
+
+	* sys/applemedia/videotexturecache.m:
+	  applemedia: fix build on iOS
+	  Fix build after 779dc3132c8f6dd560cb07cc2e2c3c72aeaa7845
+
+2015-12-17 14:49:13 +1100  Alessandro Decina <alessandro.d@gmail.com>
+
+	* sys/applemedia/avfvideosrc.m:
+	  applemedia: avfvideosrc: do fixate
+
+2015-12-16 18:41:06 +1100  Matthew Waters <matthew@centricular.com>
+
+	* ext/gl/gstgloverlay.c:
+	* gst-libs/gst/gl/gstglcolorconvert.c:
+	* gst-libs/gst/gl/gstglmemorypbo.c:
+	* gst-libs/gst/gl/gstglmemorypbo.h:
+	* gst-libs/gst/gl/gstgloverlaycompositor.c:
+	* gst-libs/gst/gl/gstglupload.c:
+	* gst-libs/gst/gl/gstglviewconvert.c:
+	* sys/applemedia/videotexturecache.m:
+	* tests/check/libs/gstglcolorconvert.c:
+	* tests/check/libs/gstglmemory.c:
+	* tests/check/libs/gstglupload.c:
+	  glmemorypbo: remove our own alloc()/wrapped()/etc functions
+	  replaced by equivalent functionality within gst_gl_base_memory_alloc()
+
+2015-12-16 18:39:32 +1100  Matthew Waters <matthew@centricular.com>
+
+	* gst-libs/gst/gl/gstglmemory.c:
+	  glmemory: document gst_gl_memory_init
+
+2015-12-16 18:38:19 +1100  Matthew Waters <matthew@centricular.com>
+
+	* gst-libs/gst/gl/gstglbuffer.c:
+	* gst-libs/gst/gl/gstglmemorypbo.c:
+	  glbuffer: remove unneeded gst_gl_buffer_alloc()
+	  Replaced by gst_gl_base_memory_alloc()
+
+2015-12-16 18:37:11 +1100  Matthew Waters <matthew@centricular.com>
+
+	* gst-libs/gst/gl/gstglbasememory.c:
+	  glbasememory: document some functions
+
+2015-12-16 18:36:13 +1100  Matthew Waters <matthew@centricular.com>
+
+	* gst-libs/gst/gl/gstglmemory.c:
+	  glmemory: add a default copy implementation
+	  Subclasses still need to override this to copy into the correct memory type.
+
+2015-12-16 18:32:40 +1100  Matthew Waters <matthew@centricular.com>
+
+	* gst-libs/gst/gl/gstglbufferpool.c:
+	* gst-libs/gst/gl/gstglbufferpool.h:
+	  glbufferpool: use gst_gl_base_memory_alloc as a generic GL allocation framework
+	  Requires the usage of GstGLVideoAllocationParams however any user can set their
+	  own parameters along with an allocator which will be used to allocate the
+	  correct memory type.
+
+2015-12-16 18:30:59 +1100  Matthew Waters <matthew@centricular.com>
+
+	* gst-libs/gst/gl/gstglmemorypbo.c:
+	* gst-libs/gst/gl/gstglmemorypbo.h:
+	  glmemorypbo: implement GstGLBaseMemory:alloc
+	  Uses the GstGLVideoAllocationParams parameters
+
+2015-12-16 18:23:31 +1100  Matthew Waters <matthew@centricular.com>
+
+	* gst-libs/gst/gl/gstglbuffer.c:
+	* gst-libs/gst/gl/gstglbuffer.h:
+	  glbuffer: implements GstGLBaseMemory::alloc
+	  Create GstGLBufferAllocationParams which is subclass of GstGLAllocationParams
+
+2015-12-16 18:20:17 +1100  Matthew Waters <matthew@centricular.com>
+
+	* gst-libs/gst/gl/gstglmemory.c:
+	* gst-libs/gst/gl/gstglmemory.h:
+	* sys/androidmedia/gstamcvideodec.c:
+	  glmemory: implement GstGLBaseMemory::alloc
+	  - Create GstGLVideoAllocationParams which is a GstGLAllocationParams subclass.
+	  - Make it possible to allocate glmemory objects directly if no frills are
+	  needed.
+
+2015-12-16 18:13:21 +1100  Matthew Waters <matthew@centricular.com>
+
+	* gst-libs/gst/gl/gstglbasememory.c:
+	* gst-libs/gst/gl/gstglbasememory.h:
+	  glbasememory: add a generic interface for allocating GL memories
+	  This is made possible by a subclassable GstGLAllocationParams that holds
+	  the allocation parameters
+	  Every allocation would now go through gst_gl_base_memory_alloc with the
+	  allocation parameters now being specified in a single struct to allow
+	  extension by different allocators.
+
+2015-12-17 12:30:05 +1100  Matthew Waters <matthew@centricular.com>
+
+	* common:
+	  revert common submodule change
+	  8ae003326157438c12c45589e050c5f446723f61 contained a erroneous common change
+
+2015-12-17 11:06:34 +1100  Matthew Waters <matthew@centricular.com>
+
+	* gst-libs/gst/gl/gstglbuffer.c:
+	  Revert "glbuffer: Don't pass allocation params"
+	  This reverts commit 052f41e5c293ec17c038467ed1e7b92b04d494b0.
+	  This is incorrect and will affect any other glbuffer user that needs/wants to
+	  perform data alignment.
+
+2015-12-16 19:21:24 +0000  Luis de Bethencourt <luisbg@osg.samsung.com>
+
+	* ext/opencv/gstcvsmooth.cpp:
+	  opencv: add medianBlur support in cvsmooth
+	  With the deprecation of cvSmooth we have to handle the other smoothing
+	  functions manually.
+
+2015-12-16 18:37:37 +0000  Luis de Bethencourt <luisbg@osg.samsung.com>
+
+	* ext/opencv/gstcvsmooth.cpp:
+	* ext/opencv/gstcvsmooth.h:
+	  opencv: switch deprecated cvSmooth for GaussianBlur
+	  The OpenCV cvSmooth function is deprecated [0] and the documentation
+	  recommends to use GaussianBlur (). This makes the spatial property go
+	  unused. Marking it as deprecated, making it non-functional and will remove
+	  in the next cycle.
+	  [0] http://docs.opencv.org/2.4/modules/imgproc/doc/filtering.html
+
+2015-12-16 11:56:08 -0500  Nicolas Dufresne <nicolas.dufresne@collabora.com>
+
+	* gst-libs/gst/gl/gstglbuffer.c:
+	  glbuffer: Don't pass allocation params
+	  The imported memory has already been allocated, passing allocation
+	  parameters with alignment confuses the memory which endup with a
+	  size different from maxsize and lead to overrun when the memory
+	  is being copied.
+
+2015-12-16 13:59:18 +0000  Florin Apostol <florin.apostol@oregan.net>
+
+	* ext/dash/gstmpdparser.c:
+	* tests/check/elements/dash_mpd.c:
+	  dashdemux: improve validation of UTCtiming element
+	  gst_mpdparser_parse_utctiming_node does not validate the parsed values completely. The following scenarios are incorrectly accepted:
+	  - elements with no schemeIdUri property should be rejected
+	  - elements with unrecognized UTCTiming scheme should be rejected
+	  - elements with empty values should be rejected
+	  The last one triggers a division by 0 in gst_dash_demux_poll_clock_drift:
+	  clock_drift->selected_url = clock_drift->selected_url % g_strv_length (urls);
+	  because it urls is a valid pointer to an empty array.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=759547
+
+2015-12-16 10:41:47 +0000  Florin Apostol <florin.apostol@oregan.net>
+
+	* ext/dash/gstdashdemux.c:
+	  dashdemux: clock_cond is not used and should be removed
+	  There are no threads waiting on clock_cond. It is just initialised and
+	  signalled. It should be removed.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=759537
+
+2015-12-16 10:23:23 +0000  Florin Apostol <florin.apostol@oregan.net>
+
+	* ext/dash/gstdashdemux.c:
+	  adaptivedemux: fixed clock compensation in get_fragment_waiting_time
+	  Clock compensation is calculated in usec but is added to a GstClockTime value.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=759534
+
+2015-12-16 10:21:59 +0100  Sebastian Dröge <sebastian@centricular.com>
+
+	* sys/applemedia/Makefile.am:
+	  applemedia: Link to IOSurface.framework for the IOSurface API
+
+2015-12-15 17:10:00 +0000  Dave Craig <davecraig@unbalancedaudio.com>
+
+	* gst/videoparsers/gstdiracparse.c:
+	* gst/videoparsers/gsth263parse.c:
+	* gst/videoparsers/gsth264parse.c:
+	* gst/videoparsers/gsth265parse.c:
+	* gst/videoparsers/gstmpeg4videoparse.c:
+	* gst/videoparsers/gstmpegvideoparse.c:
+	* gst/videoparsers/gstpngparse.c:
+	* gst/videoparsers/gstvc1parse.c:
+	  videoparsers: Check for NULL return value of gst_pad_get_current_caps()
+	  https://bugzilla.gnome.org/show_bug.cgi?id=759503
+
+2015-12-16 14:32:20 +0900  Vineeth TM <vineeth.tm@samsung.com>
+
+	* gst/ivtc/gstivtc.c:
+	  ivtc: Fix value memory leak
+	  gvalue variable should be unset instead of reset.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=759525
+
+2015-12-16 14:29:20 +0900  Vineeth TM <vineeth.tm@samsung.com>
+
+	* gst/ivtc/gstcombdetect.c:
+	  combdetect: Fix value memory leak
+	  gvalue variable should be unset instead of reset.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=759523
+
+2015-12-16 13:08:22 +0900  Vineeth TM <vineeth.tm@samsung.com>
+
+	* gst/pnm/gstpnmdec.c:
+	  pnmdec: Fix scanner memory leak
+	  For corrupted files, scanner memory is being leaked.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=759522
+
+2015-12-16 13:06:45 +0900  Vineeth TM <vineeth.tm@samsung.com>
+
+	* gst/pnm/gstpnmdec.c:
+	  pnmdec: Fix buffer memory leak
+	  In case of corrupted file, s->buf allocated is not being freed
+	  https://bugzilla.gnome.org/show_bug.cgi?id=759522
+
+2015-12-16 09:05:42 +0900  Vineeth TM <vineeth.tm@samsung.com>
+
+	* gst/pnm/gstpnmenc.c:
+	  pnmenc: Fix string memory leak
+	  header being allocated is not freed resulting in leak
+	  https://bugzilla.gnome.org/show_bug.cgi?id=759520
+
+2015-12-16 08:52:12 +0900  Vineeth TM <vineeth.tm@samsung.com>
+
+	* gst/gdp/gstgdppay.c:
+	  gdppay: Fix buffer memory leak
+	  outbuffer being allocated is not being pushed to queue for EOS event and hence
+	  should be freed.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=759519
+
+2015-12-16 09:39:03 +0100  Sebastian Dröge <sebastian@centricular.com>
+
+	* sys/applemedia/Makefile.am:
+	  applemedia: Link to IOKit.framework for IOSurface related functions
+
+2015-12-16 09:33:12 +0100  Sebastian Dröge <sebastian@centricular.com>
+
+	* docs/plugins/gst-plugins-bad-plugins.args:
+	* docs/plugins/gst-plugins-bad-plugins.hierarchy:
+	* docs/plugins/gst-plugins-bad-plugins.signals:
+	* docs/plugins/inspect/plugin-curl.xml:
+	* docs/plugins/inspect/plugin-mpegtsdemux.xml:
+	* docs/plugins/inspect/plugin-mpegtsmux.xml:
+	* docs/plugins/inspect/plugin-opus.xml:
+	* docs/plugins/inspect/plugin-spandsp.xml:
+	  docs: update to git
+
+2015-12-16 08:25:19 +0900  Vineeth TM <vineeth.tm@samsung.com>
+
+	* gst/yadif/vf_yadif.c:
+	  yadif: Fix illegal memory access
+	  When applying the spatial prediction, there is an illegal access of -1 index of array.
+	  Hence adding a condition to avoid this.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=759518
+
+2015-12-16 08:22:00 +0900  Vineeth TM <vineeth.tm@samsung.com>
+
+	* gst/yadif/gstyadif.c:
+	  yadif: Fix gvalue memory leak
+	  gvalue variable should be unset instead of reset.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=759518
+
+2015-12-16 17:02:27 +1100  Alessandro Decina <alessandro.d@gmail.com>
+
+	* sys/applemedia/vtdec.c:
+	  applemedia: vtdec: fix texture-target on iOS
+
+2015-12-16 15:20:30 +1100  Alessandro Decina <alessandro.d@gmail.com>
+
+	* sys/applemedia/vtdec.c:
+	  applemedia: vtdec: remove obsolete FIXME
+
+2015-12-16 14:38:44 +1100  Alessandro Decina <alessandro.d@gmail.com>
+
+	* sys/applemedia/avfvideosrc.m:
+	  applemedia: avfvideosrc: rework GLMemory negotiation
+	  Only do GLMemory when a GstGLContext is available AND GLMemory is actually
+	  negotiated with downstream.
+
+2015-12-16 13:47:00 +1100  Alessandro Decina <alessandro.d@gmail.com>
+
+	* sys/applemedia/avfvideosrc.m:
+	  applemedia: avfvideosrc: update after IOSurface changes
+	  Prefer GLMemory over sysmem. Also now when pushing GLMemory we push the
+	  original formats (UYVY in OSX, BGRA in iOS) and leave it to downstream to
+	  convert.
+
+2015-12-14 16:10:01 +1100  Alessandro Decina <alessandro.d@gmail.com>
+
+	* sys/applemedia/videotexturecache.h:
+	* sys/applemedia/videotexturecache.m:
+	* sys/applemedia/vtdec.c:
+	  applemedia: vtdec: remove the internal GstGLColorConvert
+	  It was added back in the day to make texture sharing work by default with
+	  glimagesink inside playbin. These days glimagesink accepts (and converts) YUV
+	  internally so it's no longer needed.
+
+2015-12-14 14:23:20 +1100  Alessandro Decina <alessandro.d@gmail.com>
+
+	* sys/applemedia/vtdec.c:
+	  applemedia: vtdec: decouple outputting textures from outputting RGBA
+	  We're going to be able to output NV12 textures soon.
+
+2015-12-11 13:20:05 +1100  Alessandro Decina <alessandro.d@gmail.com>
+
+	* common:
+	* sys/applemedia/Makefile.am:
+	* sys/applemedia/iosurfacememory.c:
+	* sys/applemedia/iosurfacememory.h:
+	* sys/applemedia/videotexturecache.h:
+	* sys/applemedia/videotexturecache.m:
+	* sys/applemedia/vtdec.c:
+	  applemedia: vtdec: switch to IOSurface on Mac
+	  Switch to using IOSurface instead of CVOpenGLTextureCache on OSX. The latter can't be
+	  used anymore to do YUV => RGB with opengl3 on El Capitan as GL_YCBCR_422_APPLE
+	  has been removed from the opengl3 driver. Also switch to NV12 from UYVY, which
+	  was the only YUV format supported by CVOpenGLTextureCache.
+
+2015-12-10 16:22:08 +1100  Alessandro Decina <alessandro.d@gmail.com>
+
+	* sys/applemedia/Makefile.am:
+	* sys/applemedia/avfvideosrc.m:
+	* sys/applemedia/corevideotexturecache.h:
+	* sys/applemedia/corevideotexturecache.m:
+	* sys/applemedia/videotexturecache.h:
+	* sys/applemedia/videotexturecache.m:
+	* sys/applemedia/vtdec.c:
+	* sys/applemedia/vtdec.h:
+	  applemedia: rename GstCoreVideoTextureCache to GstVideoTextureCache
+	  First of a few commits to stop using CVOpenGLTextureCache on OSX and use
+	  IOSurfaces directly instead. CVOpenGLTextureCache hasn't been updated for OpenGL
+	  3 which is why texture sharing is currently disabled on OSX.
+
+2015-11-17 19:31:53 +1100  Alessandro Decina <alessandro.d@gmail.com>
+
+	* sys/applemedia/vtdec.c:
+	  Revert "vtdec: disable the texture cache on OSX"
+	  This reverts commit f02425c4afcd85260a1b387aeddf863774257917.
+
+2015-12-15 14:17:16 +1100  Alessandro Decina <alessandro.d@gmail.com>
+
+	* gst-libs/gst/gl/gstglupload.c:
+	  glupload: fix allocator name after GLMemory API changes
+
+2015-12-15 19:28:05 -0500  Nicolas Dufresne <nicolas.dufresne@collabora.com>
+
+	* ext/qt/Makefile.am:
+	  qtsink: Add configured GL cflags to the build
+	  We don't directly link to GL in the element, though we use GL headers.
+	  For this reason we need to include the proper GL headers path. This
+	  prevent this element from using a different GL header then libgstgl.
+
+2015-12-15 19:25:16 -0500  Nicolas Dufresne <nicolas.dufresne@collabora.com>
+
+	* configure.ac:
+	* gst-libs/gst/gl/gstglapi.h:
+	  gl: Allow using non-system mesa with both GL and GLES
+	  GCC automatically disable redundance warnings for system headers. As
+	  soon as we start using a non-system installed mesa, we would start
+	  having issues. The test for both wasn't setting any flags, so it would
+	  work but then fail at runtime.
+	  This is being fixed by disabling in the code (where needed only) that
+	  GCC warning. The test is also fixed to avoid the false positive we had.
+
+2015-12-15 15:59:30 +0000  Luis de Bethencourt <luisbg@osg.samsung.com>
+
+	* ext/opencv/gstpyramidsegment.cpp:
+	  opencv: pyramidsegment: fix example launch line
+	  Use videotestsrc and autovideosink in the example gst-launch-1.0 line and
+	  not a useless fakesrc-fakesink example.
+
+2015-12-15 15:56:19 +0000  Luis de Bethencourt <luisbg@osg.samsung.com>
+
+	* ext/opencv/gstcvdilate.cpp:
+	* ext/opencv/gstcvequalizehist.cpp:
+	* ext/opencv/gstcverode.cpp:
+	* ext/opencv/gstcvlaplace.cpp:
+	* ext/opencv/gstcvsmooth.cpp:
+	* ext/opencv/gstcvsobel.cpp:
+	  opencv: add headers with example launch lines
+	  Add description headers for all the OpenCV plugins missing them, so we can
+	  have gst-launch-1.0 example launch lines for all of them.
+
+2015-12-14 16:48:45 -0500  Nicolas Dufresne <nicolas.dufresne@collabora.com>
+
+	* configure.ac:
+	  opengl: Use pkg-config if available
+	  libMesa ships .pc files now for gl/egl/glesv2. This patch makes use
+	  of it while keeping support for system without.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=751068
+
+2015-12-15 11:59:00 +0000  Luis de Bethencourt <luisbg@osg.samsung.com>
+
+	* gst/geometrictransform/gstbulge.c:
+	* gst/geometrictransform/gstcircle.c:
+	* gst/geometrictransform/gstdiffuse.c:
+	* gst/geometrictransform/gstfisheye.c:
+	* gst/geometrictransform/gstkaleidoscope.c:
+	* gst/geometrictransform/gstmarble.c:
+	* gst/geometrictransform/gstmirror.c:
+	* gst/geometrictransform/gstperspective.c:
+	* gst/geometrictransform/gstpinch.c:
+	* gst/geometrictransform/gstrotate.c:
+	* gst/geometrictransform/gstsphere.c:
+	* gst/geometrictransform/gstsquare.c:
+	* gst/geometrictransform/gststretch.c:
+	* gst/geometrictransform/gsttunnel.c:
+	* gst/geometrictransform/gsttwirl.c:
+	* gst/geometrictransform/gstwaterripple.c:
+	  geometrictransform: add headers with example launch lines
+	  Add description headers for all geometrictransform elements so we can have
+	  gst-launch-1.0 example launch lines for all of them.
+
+2015-12-14 11:09:46 +0900  Vineeth TM <vineeth.tm@samsung.com>
+
+	* README:
+	* ext/assrender/gstassrender.c:
+	* ext/chromaprint/gstchromaprint.c:
+	* ext/curl/gstcurlbasesink.c:
+	* ext/curl/gstcurlfilesink.c:
+	* ext/curl/gstcurlftpsink.c:
+	* ext/curl/gstcurlhttpsink.c:
+	* ext/curl/gstcurlsftpsink.c:
+	* ext/curl/gstcurlsmtpsink.c:
+	* ext/daala/gstdaaladec.c:
+	* ext/daala/gstdaalaenc.c:
+	* ext/directfb/dfbvideosink.c:
+	* ext/dts/gstdtsdec.c:
+	* ext/faac/gstfaac.c:
+	* ext/faad/gstfaad.c:
+	* ext/gl/gstglbumper.c:
+	* ext/gl/gstgldeinterlace.c:
+	* ext/gl/gstgldifferencematte.c:
+	* ext/gl/gstgleffects.c:
+	* ext/gl/gstglfilterreflectedscreen.c:
+	* ext/gl/gstglfiltershader.c:
+	* ext/gl/gstglstereosplit.c:
+	* ext/gl/gstgltestsrc.c:
+	* ext/gl/gstgltransformation.c:
+	* ext/kate/gstkatedec.c:
+	* ext/kate/gstkateenc.c:
+	* ext/kate/gstkateparse.c:
+	* ext/kate/gstkatetag.c:
+	* ext/kate/gstkatetiger.c:
+	* ext/ladspa/gstladspa.c:
+	* ext/libvisual/visual-gl.c:
+	* ext/mpg123/gstmpg123audiodec.c:
+	* ext/mplex/gstmplex.cc:
+	* ext/openal/gstopenalsink.c:
+	* ext/openal/gstopenalsrc.c:
+	* ext/opus/gstopusdec.c:
+	* ext/opus/gstopusenc.c:
+	* ext/opus/gstopusparse.c:
+	* ext/resindvd/resin-play:
+	* ext/resindvd/resin-play2:
+	* ext/rsvg/gstrsvgdec.c:
+	* ext/rsvg/gstrsvgoverlay.c:
+	* ext/rtmp/gstrtmpsink.c:
+	* ext/rtmp/gstrtmpsrc.c:
+	* ext/sndio/sndiosink.c:
+	* ext/sndio/sndiosrc.c:
+	* ext/teletextdec/gstteletextdec.c:
+	* ext/wayland/gstwaylandsink.c:
+	* ext/zbar/gstzbar.c:
+	* gst/aiff/aiffparse.c:
+	* gst/asfmux/gstasfmux.c:
+	* gst/audiofxbad/gstaudiochannelmix.c:
+	* gst/audiomixer/gstaudiomixer.c:
+	* gst/audiovisualizers/gstspacescope.c:
+	* gst/audiovisualizers/gstspectrascope.c:
+	* gst/audiovisualizers/gstsynaescope.c:
+	* gst/audiovisualizers/gstwavescope.c:
+	* gst/autoconvert/gstautovideoconvert.c:
+	* gst/camerabin2/gstcamerabin2.c:
+	* gst/camerabin2/gstviewfinderbin.c:
+	* gst/coloreffects/gstchromahold.c:
+	* gst/coloreffects/gstcoloreffects.c:
+	* gst/dataurisrc/gstdataurisrc.c:
+	* gst/debugutils/fpsdisplaysink.c:
+	* gst/debugutils/gstchopmydata.c:
+	* gst/debugutils/gstdebugspy.c:
+	* gst/debugutils/gstwatchdog.c:
+	* gst/dvbsuboverlay/gstdvbsuboverlay.c:
+	* gst/dvdspu/gstdvdspu.c:
+	* gst/festival/gstfestival.c:
+	* gst/fieldanalysis/gstfieldanalysis.c:
+	* gst/freeverb/gstfreeverb.c:
+	* gst/gaudieffects/gstburn.c:
+	* gst/gaudieffects/gstchromium.c:
+	* gst/gaudieffects/gstdilate.c:
+	* gst/gaudieffects/gstdodge.c:
+	* gst/gaudieffects/gstexclusion.c:
+	* gst/gaudieffects/gstgaussblur.c:
+	* gst/gaudieffects/gstsolarize.c:
+	* gst/gdp/README:
+	* gst/gdp/gstgdpdepay.c:
+	* gst/gdp/gstgdppay.c:
+	* gst/id3tag/gstid3mux.c:
+	* gst/inter/gstinteraudiosink.c:
+	* gst/inter/gstinteraudiosrc.c:
+	* gst/inter/gstintersubsink.c:
+	* gst/inter/gstintersubsrc.c:
+	* gst/inter/gstintervideosink.c:
+	* gst/inter/gstintervideosrc.c:
+	* gst/interlace/gstinterlace.c:
+	* gst/ivtc/gstcombdetect.c:
+	* gst/ivtc/gstivtc.c:
+	* gst/jp2kdecimator/gstjp2kdecimator.c:
+	* gst/jpegformat/gstjifmux.c:
+	* gst/jpegformat/gstjpegparse.c:
+	* gst/mxf/mxfdemux.c:
+	* gst/mxf/mxfmux.c:
+	* gst/nuvdemux/gstnuvdemux.c:
+	* gst/pnm/gstpnmdec.c:
+	* gst/pnm/gstpnmenc.c:
+	* gst/rawparse/README:
+	* gst/removesilence/gstremovesilence.c:
+	* gst/sdp/gstsdpdemux.c:
+	* gst/speed/gstspeed.c:
+	* gst/stereo/gststereo.c:
+	* gst/videofilters/gstscenechange.c:
+	* gst/videofilters/gstvideodiff.c:
+	* gst/videofilters/gstzebrastripe.c:
+	* gst/videoparsers/gstdiracparse.c:
+	* gst/videosignal/gstsimplevideomark.c:
+	* gst/videosignal/gstsimplevideomarkdetect.c:
+	* gst/videosignal/gstvideoanalyse.c:
+	* gst/y4m/gsty4mdec.c:
+	* gst/yadif/gstyadif.c:
+	* sys/applemedia/atdec.c:
+	* sys/applemedia/avfassetsrc.m:
+	* sys/applemedia/iosassetsrc.m:
+	* sys/applemedia/vtdec.c:
+	* sys/directsound/gstdirectsoundsrc.c:
+	* sys/dvb/README:
+	* sys/dvb/gstdvbsrc.c:
+	* sys/opensles/openslessink.c:
+	* sys/opensles/openslessrc.c:
+	* sys/shm/gstshmsink.c:
+	* sys/shm/gstshmsrc.c:
+	* sys/vdpau/gstvdpvideopostprocess.c:
+	* sys/vdpau/mpeg/gstvdpmpegdec.c:
+	* sys/vdpau/mpeg4/gstvdpmpeg4dec.c:
+	* sys/winks/gstksvideosrc.c:
+	* sys/winscreencap/gstdx9screencapsrc.c:
+	* sys/winscreencap/gstgdiscreencapsrc.c:
+	* tools/gst-element-maker:
+	  plugins-bad: Fix example pipelines
+	  rename gst-launch --> gst-launch-1.0
+	  replace old elements with new elements(ffmpegcolorspace -> videoconvert, ffenc_** -> avenc_**)
+	  fix caps in examples
+	  https://bugzilla.gnome.org/show_bug.cgi?id=759432
+
+2015-12-14 15:01:09 -0500  Nicolas Dufresne <nicolas.dufresne@collabora.com>
+
+	* .gitignore:
+	  ignore: videoframe-audiolevel test
+
+2015-12-14 14:44:31 -0500  Xavier Claessens <xavier.claessens@collabora.com>
+
+	* gst-libs/gst/gl/gstgl_fwd.h:
+	* gst-libs/gst/gl/gstglframebuffer.h:
+	* gst-libs/gst/insertbin/gstinsertbin.h:
+	  bad: Add g_autoptr() support to all types
+	  https://bugzilla.gnome.org/show_bug.cgi?id=754464
+
+2015-12-14 12:31:52 +0000  Luis de Bethencourt <luisbg@osg.samsung.com>
+
+	* gst-libs/gst/gl/gstglviewconvert.c:
+	  glviewconvert: check pointer before dereferencing
+	  priv->primary_out could be NULL, check before dereferencing it in
+	  GST_BUFFER_FLAG_SET ()
+	  CID 1308945
+
+2015-12-14 13:43:10 +0200  Vivia Nikolaidou <vivia@ahiru.eu>
+
+	* gst/videoframe_audiolevel/gstvideoframe-audiolevel.c:
+	  videoframe-audiolevel: Fix possible division by zero
+	  In update_rms_from_buffer(), division by "frames" wasn't checking whether
+	  "frames" is zero.
+	  CID 1341519.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=759443
+
+2015-12-14 09:38:41 +0100  Sebastian Dröge <sebastian@centricular.com>
+
+	* tests/examples/gl/clutter/cluttershare.c:
+	  clutter: Fix compilation error in GL examples
+	  Include gst/gl.h instead of specific headers to prevent such problems also in
+	  the future.
+	  In file included from ../../../../gst-libs/gst/gl/gl.h:47:0,
+	  from ../../../../gst-libs/gst/gl/gstglbasememory.h:137,
+	  from ../../../../gst-libs/gst/gl/gstglmemory.h:29,
+	  from cluttershare.c:39:
+	  ../../../../gst-libs/gst/gl/gstglmemorypbo.h:51:20: error: field ‘mem’ has incomplete type
+	  GstGLMemory      mem;
+	  ^
+	  ../../../../gst-libs/gst/gl/gstglmemorypbo.h:124:24: error: field ‘parent’ has incomplete type
+	  GstGLMemoryAllocator parent;
+	  ^
+	  ../../../../gst-libs/gst/gl/gstglmemorypbo.h:134:29: error: field ‘parent_class’ has incomplete type
+	  GstGLMemoryAllocatorClass parent_class;
+	  ^
+
+2015-12-14 19:18:14 +1100  Matthew Waters <matthew@centricular.com>
+
+	* sys/applemedia/corevideotexturecache.m:
+	  applemedia: update for GLMemory API changes
+
+2015-12-14 19:15:14 +1100  Matthew Waters <matthew@centricular.com>
+
+	* sys/androidmedia/gstamcvideodec.c:
+	  amcvideodec: update for GLMemory API changes
+
+2015-12-14 18:41:30 +1100  Matthew Waters <matthew@centricular.com>
+
+	* tests/check/libs/gstglcolorconvert.c:
+	* tests/check/libs/gstglupload.c:
+	  tests: update for glmemory api changes
+
+2015-12-14 18:20:23 +1100  Matthew Waters <matthew@centricular.com>
+
+	* gst-libs/gst/gl/gstglbuffer.c:
+	  glbuffer: bind/unbind on map/unmap for GL mappings
+	  Bind the handle to the GL target on map/unmap to save the caller from
+	  handling this themselves.
+
+2015-12-14 18:19:37 +1100  Matthew Waters <matthew@centricular.com>
+
+	* gst-libs/gst/gl/gstglbuffer.c:
+	* gst-libs/gst/gl/gstglbuffer.h:
+	  glbuffer: remove buffer specific transfer flags
+	  Instead rely on GstGLBaseMemory's transfer handling
+
+2015-12-14 18:18:20 +1100  Matthew Waters <matthew@centricular.com>
+
+	* gst-libs/gst/gl/gstglmemorypbo.c:
+	  glmemorypbo: map/unmap pbo memory correctly for state tracking
+	  Otherwise some downloads will fail to occur from the PBO.
+
+2015-12-14 18:15:42 +1100  Matthew Waters <matthew@centricular.com>
+
+	* tests/check/libs/gstglmemory.c:
+	  tests/glmemory: include the generic gl header
+	  Including gstglmemory.h directly results in the compiler complaining
+	  about incomplete types.
+
+2015-12-14 17:05:31 +1100  Matthew Waters <matthew@centricular.com>
+
+	* gst-libs/gst/gl/gstglformat.c:
+	  glformat: add compatibility definitions for OES/rectangle textures
+
+2015-12-14 13:49:18 +1100  Matthew Waters <matthew@centricular.com>
+
+	* gst-libs/gst/gl/Makefile.am:
+	* gst-libs/gst/gl/gl.h:
+	* gst-libs/gst/gl/gstgl_fwd.h:
+	* gst-libs/gst/gl/gstglbasebuffer.c:
+	* gst-libs/gst/gl/gstglbasebuffer.h:
+	* gst-libs/gst/gl/gstgldisplay.c:
+	  glbasebuffer: remove unsed memory subclass
+	  The functionality has been split into GstGLBaseMemory and GstGLBuffer.
+
+2015-12-14 13:43:59 +1100  Matthew Waters <matthew@centricular.com>
+
+	* docs/libs/gst-plugins-bad-libs.types:
+	* ext/gl/gstgldownloadelement.c:
+	* ext/gl/gstgloverlay.c:
+	* ext/qt/gstqsgtexture.cc:
+	* gst-libs/gst/gl/Makefile.am:
+	* gst-libs/gst/gl/gl.h:
+	* gst-libs/gst/gl/gstgl_fwd.h:
+	* gst-libs/gst/gl/gstglbufferpool.c:
+	* gst-libs/gst/gl/gstglcolorconvert.c:
+	* gst-libs/gst/gl/gstgldisplay.c:
+	* gst-libs/gst/gl/gstglformat.c:
+	* gst-libs/gst/gl/gstglformat.h:
+	* gst-libs/gst/gl/gstglmemory.c:
+	* gst-libs/gst/gl/gstglmemory.h:
+	* gst-libs/gst/gl/gstglmemorypbo.c:
+	* gst-libs/gst/gl/gstglmemorypbo.h:
+	* gst-libs/gst/gl/gstgloverlaycompositor.c:
+	* gst-libs/gst/gl/gstglupload.c:
+	* gst-libs/gst/gl/gstglviewconvert.c:
+	* tests/check/libs/gstglmemory.c:
+	  glmemory: base classify and add the pbo memory on top
+	  The base class is useful for having multiple backing memory types other
+	  than the default.  e.g. IOSurface, EGLImage, dmabuf?
+	  The PBO transfer logic is now inside GstGLMemoryPBO which uses GstGLBuffer
+	  to manage the PBO memory.
+	  This also moves the format utility functions into their own file.
+
+2015-12-14 13:08:10 +1100  Matthew Waters <matthew@centricular.com>
+
+	* docs/libs/gst-plugins-bad-libs.types:
+	* gst-libs/gst/gl/Makefile.am:
+	* gst-libs/gst/gl/gl.h:
+	* gst-libs/gst/gl/gstgl_fwd.h:
+	* gst-libs/gst/gl/gstglbuffer.c:
+	* gst-libs/gst/gl/gstglbuffer.h:
+	* gst-libs/gst/gl/gstgldisplay.c:
+	  gl: add a GL buffer based GstMemory
+	  Heavily based on GstGLBaseBuffer that is a subclass of GstGLBaseMemory.
+	  Provides GPU and CPU accessible GL buffer objects by GL handle or by
+	  sysmem data pointer.
+
+2015-12-14 12:59:02 +1100  Matthew Waters <matthew@centricular.com>
+
+	* gst-libs/gst/gl/Makefile.am:
+	* gst-libs/gst/gl/gl.h:
+	* gst-libs/gst/gl/gstgl_fwd.h:
+	* gst-libs/gst/gl/gstglbasememory.c:
+	* gst-libs/gst/gl/gstglbasememory.h:
+	  gl: add a base memory object
+	  It handles the following
+	  - GstAllocationParams -> gst_memory_init transformation
+	  - Makes sure that map/unmap/create/destroy happen on the GL thread with
+	  a GL context current.
+	  - Holds a possible sysmem accessible data pointer with alignment.
+	  - Holds the need upload/download transfer state
+
+2015-12-14 12:26:01 +1100  Matthew Waters <matthew@centricular.com>
+
+	* gst-libs/gst/gl/gstglutils.c:
+	* gst-libs/gst/gl/gstglutils.h:
+	  gl: add convenience function for the start of a video frame
+	  Get's the start of the video frame based on a GstVideoInfo and
+	  GstVideoAlignment.
+
+2015-12-11 16:07:36 +1100  Matthew Waters <matthew@centricular.com>
+
+	* docs/libs/gst-plugins-bad-libs-docs.sgml:
+	* docs/libs/gst-plugins-bad-libs-sections.txt:
+	* docs/libs/gst-plugins-bad-libs.types:
+	* gst-libs/gst/gl/Makefile.am:
+	* gst-libs/gst/gl/gl.h:
+	* gst-libs/gst/gl/gstgl_fwd.h:
+	* gst-libs/gst/gl/gstglbufferpool.c:
+	* gst-libs/gst/gl/gstglbufferpool.h:
+	* gst-libs/gst/gl/gstgluploadmeta.c:
+	* gst-libs/gst/gl/gstgluploadmeta.h:
+	* tests/check/libs/gstglupload.c:
+	  gluploadmeta; remove convenience helper API
+	  It was not really useful as if one knows about libgstgl, one can just use
+	  GLMemory objects directly.
+
+2015-12-11 15:39:57 +1100  Matthew Waters <matthew@centricular.com>
+
+	* docs/libs/gst-plugins-bad-libs-docs.sgml:
+	* docs/libs/gst-plugins-bad-libs-sections.txt:
+	* docs/libs/gst-plugins-bad-libs.types:
+	* ext/gl/gstglstereomix.h:
+	* gst-libs/gst/gl/Makefile.am:
+	* gst-libs/gst/gl/gl.h:
+	* gst-libs/gst/gl/gstgl_fwd.h:
+	* gst-libs/gst/gl/gstgldownload.c:
+	* gst-libs/gst/gl/gstgldownload.h:
+	  gldownload: remove helper api from the library
+	  It was never used by anyone and is not needed anymore with the element
+	  and GstGLMemory's transparent support for downloading textures.
+
+2015-12-12 20:07:32 +0000  Luis de Bethencourt <luisbg@osg.samsung.com>
+
+	* ext/opencv/gstcvdilate.cpp:
+	* ext/opencv/gstcvdilateerode.cpp:
+	* ext/opencv/gstcvdilateerode.h:
+	* ext/opencv/gstcvequalizehist.cpp:
+	* ext/opencv/gstcvequalizehist.h:
+	* ext/opencv/gstcverode.cpp:
+	* ext/opencv/gstcvlaplace.cpp:
+	* ext/opencv/gstcvlaplace.h:
+	* ext/opencv/gstcvsmooth.cpp:
+	* ext/opencv/gstcvsmooth.h:
+	* ext/opencv/gstcvsobel.cpp:
+	* ext/opencv/gstcvsobel.h:
+	* ext/opencv/gstdisparity.cpp:
+	* ext/opencv/gstdisparity.h:
+	* ext/opencv/gstedgedetect.cpp:
+	* ext/opencv/gstedgedetect.h:
+	* ext/opencv/gstfaceblur.cpp:
+	* ext/opencv/gstfaceblur.h:
+	* ext/opencv/gstfacedetect.cpp:
+	* ext/opencv/gstgrabcut.cpp:
+	* ext/opencv/gsthanddetect.cpp:
+	* ext/opencv/gsthanddetect.h:
+	* ext/opencv/gstmotioncells.cpp:
+	* ext/opencv/gstmotioncells.h:
+	* ext/opencv/gstopencvvideofilter.cpp:
+	* ext/opencv/gstpyramidsegment.cpp:
+	* ext/opencv/gstpyramidsegment.h:
+	* ext/opencv/gstretinex.cpp:
+	* ext/opencv/gstretinex.h:
+	* ext/opencv/gstsegmentation.cpp:
+	* ext/opencv/gstskindetect.cpp:
+	* ext/opencv/gstskindetect.h:
+	* ext/opencv/gsttemplatematch.cpp:
+	* ext/opencv/gsttemplatematch.h:
+	* ext/opencv/gsttextoverlay.cpp:
+	* ext/opencv/gsttextoverlay.h:
+	  opencv: clean includes
+	  The opencv element includes were full of duplicates and uneeded headers.
+	  For example a few elements that stopped using gstcvopencvutils still
+	  included that header file.
+
+2015-12-12 19:31:55 +0000  Luis de Bethencourt <luisbg@osg.samsung.com>
+
+	* ext/opencv/gstopencvutils.cpp:
+	* ext/opencv/gstopencvutils.h:
+	  opencv: remove unused functions in gstopencvutils
+	  Since commit 45ca8876b2f5267f7edb842b6d56d7a6c271ccb3 nobody is using
+	  gst_opencv_get_ipl_depth_and_channels() or
+	  gst_opencv_parse_iplimage_params_from_structure(). Remove this dead
+	  code.
+
+2015-12-12 19:13:42 +0000  Luis de Bethencourt <luisbg@osg.samsung.com>
+
+	* ext/opencv/MotionCells.cpp:
+	* ext/opencv/MotionCells.h:
+	  motioncells: Remove unused includes
+
+2015-12-12 10:06:55 +1100  Matthew Waters <matthew@centricular.com>
+
+	* common:
+	  revert common submodule change
+
+2015-12-12 09:33:38 +1100  Matthew Waters <matthew@centricular.com>
+
+	* common:
 	* ext/gl/gstgltransformation.c:
 	  gltransformation: clear to transparent
 	  Otherwise composition will result in a black frame outside the transformed
 	  video.
 
-2015-12-08 16:35:45 +1100  Matthew Waters <matthew@centricular.com>
-
-	* gst-libs/gst/gl/glprototypes/sync.h:
-	  glproto: include function definitions for GL_APPLE_sync
-	  Provides a performance improvement on iOS where we were falling back to glFinish
-	  on settting sync points.
-
 2015-12-11 11:39:08 +0100  Thomas Roos <thomas.roos@industronic.de>
 
 	* sys/directsound/gstdirectsoundsrc.c:
@@ -230,17 +6337,502 @@
 	  Also take the element's mutex in unprepare().
 	  https://bugzilla.gnome.org/show_bug.cgi?id=738292
 
+2015-12-10 12:47:17 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+	* gst/mxf/mxfdemux.c:
+	  mxfdemux: Only pre-set position for exactly the same essence track
+	  The edit rate is only supposed to be the same in a source package, but there
+	  might be multiple source packages with the same essence container. As such
+	  just comparing the body/index SID is not sufficient.
+
+2015-12-10 12:25:54 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+	* gst/mxf/mxfdemux.c:
+	  mxfdemux: Only pre-set the track position if it's for the same body/index SID
+
+2015-12-10 14:41:44 +1100  Alessandro Decina <alessandro.d@gmail.com>
+
+	* gst-libs/gst/gl/cocoa/gstglcontext_cocoa.m:
+	  libgstgl: gstglcontext_cocoa: kCGLPFAStereo has been deprecated in 10.11
+	  Also since the version scheme has changed (to include the micro number) since
+	  10.10, use the MAC_OS_X_VERSION_* macro to avoid confusion.
+
+2015-12-10 12:41:00 +1100  Alessandro Decina <alessandro.d@gmail.com>
+
+	* gst-libs/gst/gl/gstglbufferpool.c:
+	  glbufferpool: relax check for multiple texture targets
+	  Only complain about multiple texture targets when _different_ texture targets
+	  are configured.
+
+2015-12-10 12:33:52 +1100  Alessandro Decina <alessandro.d@gmail.com>
+
+	* gst-libs/gst/gl/gstglmemory.c:
+	  glmemory: take subsampling into account for rectangle textures
+	  Rectangle textures don't use normalized coordinates so subsampling needs to be
+	  factored in explicitly.
+	  Fixes YUV => RGB conversion for rectangle textures.
+
+2015-12-09 16:55:00 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+	* gst/mxf/mxfdemux.c:
+	  mxfdemux: Only access the index table if it has enough elements
+
+2015-12-09 16:28:53 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+	* gst/mxf/mxfdemux.c:
+	  mxfdemux: Use keyframe information from index table segments if available
+	  We don't implement keyframe detection for all codecs and this will allow us to
+	  implement better seeking.
+
+2015-12-09 16:31:19 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+	* gst/mxf/mxfdemux.c:
+	  mxfdemux: Collect all index table segments after finding the random index pack
+	  That way we always have the index table information available, especially the
+	  keyframe-ness of all buffers.
+
+2015-12-08 18:15:55 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+	* gst/mxf/mxfdemux.c:
+	* gst/mxf/mxfdemux.h:
+	* gst/mxf/mxftypes.h:
+	  mxfdemux: Fix handling of IndexTableSegments
+	  This was completely broken before and could only work on a very constrained
+	  set of files. After these changes it should work except for situations where
+	  PTS != DTS, which is not handled at all in mxfdemux currently.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=759118
+
+2015-12-08 14:06:21 -0300  Thiago Santos <thiagoss@osg.samsung.com>
+
+	* gst-libs/gst/adaptivedemux/gstadaptivedemux.c:
+	  adaptivedemux: avoid pushing events with manifest lock
+	  It can be an easy source of deadlocks. Reproducible with very
+	  fast connections (local server).
+
+2015-12-08 20:24:45 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+	* gst/mxf/mxftypes.c:
+	  mxftypes: Fix parsing of index table segments
+
+2015-12-08 18:23:02 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+	* gst/mxf/mxfmux.c:
+	  mxfmux: Handle aggregation with NULL buffers without crashing
+
+2015-12-08 16:45:33 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+	* gst/mxf/mxfmux.c:
+	  mxfmux: Add FIXME about enforcing that all tracks in a source package have the same edit rate
+	  The standard requires this and also the index table segments are not going to
+	  work otherwise.
+
+2015-12-07 20:27:23 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+	* gst/mxf/mxfmux.c:
+	* gst/mxf/mxfmux.h:
+	  mxfmux: Write index table segments
+	  But only for the first essence track, and once for every keyframe every 2
+	  seconds.
+
+2015-12-07 20:26:17 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+	* gst/mxf/mxfmetadata.c:
+	  mxfmetadata: Fix static local tag for index sid
+
+2015-12-07 19:34:25 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+	* gst/mxf/mxftypes.c:
+	* gst/mxf/mxftypes.h:
+	  mxftypes: Add function to serialize an index table segment to a buffer
+
+2015-12-07 18:59:36 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+	* gst/mxf/mxfdemux.c:
+	* gst/mxf/mxftypes.c:
+	* gst/mxf/mxftypes.h:
+	  mxfmux: Index table segments must not use the primer pack
+	  According to S377-1-2009c 9.2 the local tags must not be resolved from the
+	  primer pack, which as a result means that there can't be any other tags than
+	  statically assigned ones.
+
+2015-12-07 14:10:30 +1000  Duncan Palmer <dpalmer@digisoft.tv>
+
+	* ext/hls/gsthlsdemux.c:
+	  hlsdemux: add support for seeking to fragment boundaries
+	  Setting the seek flags to GST_SEEK_FLAG_SNAP_* will change the seek
+	  target time to a segment boundary.
+	  Based on original work by Ben Willers <bwillers@digisoft.tv>.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=759108
+
+2015-12-08 09:53:11 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+	* tests/check/elements/dash_mpd.c:
+	  dash: Fix unit test after moving of framerates to RepresentationBaseType
+
+2015-12-08 09:33:39 +0900  suhwang.kim <suhwang.kim@lge.com>
+
+	* ext/dash/gstdashdemux.c:
+	* ext/dash/gstmpdparser.c:
+	* ext/dash/gstmpdparser.h:
+	  dashdemux: Suggestion for setting the framerate information.
+	  Dashdemux has set the width and height information from MPD manifest.
+	  Some embedded devices which are not insufficient H/W resources need more information such as framerate
+	  to assign H/W resources. So I suggested that dashdemux also needs to set the framerate information from MDP manifest.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=758515
+
+2015-12-08 09:23:22 +0900  suhwang.kim <suhwang.kim@lge.com>
+
+	* ext/dash/gstmpdparser.c:
+	* ext/dash/gstmpdparser.h:
+	  dashdemux: maxFrameRate & minFrameRate should be in RepresentationBase.
+	  According to the spec, they can be in AdaptationSet, Representation and SubRepresentation.
+	  So They should be in RepresentationBase.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=758515
+
+2015-12-08 16:35:45 +1100  Matthew Waters <matthew@centricular.com>
+
+	* gst-libs/gst/gl/glprototypes/sync.h:
+	  glproto: include function definitions for GL_APPLE_sync
+	  Provides a performance improvement on iOS where we were falling back to glFinish
+	  on settting sync points.
+
 2015-12-07 20:34:10 +0200  Sebastian Dröge <sebastian@centricular.com>
 
 	* ext/openjpeg/gstopenjpegenc.c:
 	  openjpegenc: All frames in JPEG2000 are keyframes, mark them as such
 
+2015-12-07 09:08:15 -0500  Nicolas Dufresne <nicolas.dufresne@collabora.co.uk>
+
+	* autogen.sh:
+	* common:
+	  Automatic update of common submodule
+	  From b319909 to 86e4663
+
+2015-12-07 13:48:12 +0100  Edward Hervey <edward@centricular.com>
+
+	* gst/mxf/mxfmux.c:
+	  mxfmux: Remove more dead code
+	  Coverity CID #1328818
+
+2015-12-07 13:36:29 +0100  Edward Hervey <edward@centricular.com>
+
+	* ext/teletextdec/gstteletextdec.c:
+	  teletextdec: Fix leak and NULL pointer usage
+	  Coverity CID #1341744
+
+2015-12-07 11:56:09 +0100  Edward Hervey <edward@centricular.com>
+
+	* ext/teletextdec/gstteletextdec.c:
+	  teletextdec: Remove dead code
+	  ++i in a for() loop results in the loop never being executed more than once
+	  Coverity CID #1341748
+	  Coverity CID #1341743
+
+2015-03-12 11:29:00 +0000  Frédéric Wang <fred.wang@free.fr>
+
+	* configure.ac:
+	* sys/acmenc/acmenc.c:
+	* sys/acmmp3dec/acmmp3dec.c:
+	  acm: Port ACM MP3 decoder and encoders to GStreamer 1.x
+	  https://bugzilla.gnome.org/show_bug.cgi?id=744047
+
+2015-09-24 17:40:02 +0200  Daniel Kamil Kozar <dkk089@gmail.com>
+
+	* configure.ac:
+	* ext/teletextdec/Makefile.am:
+	* ext/teletextdec/gstteletextdec.c:
+	* ext/teletextdec/gstteletextdec.h:
+	* ext/teletextdec/teletext.c:
+	  port teletextdec to 1.0
+	  https://bugzilla.gnome.org/show_bug.cgi?id=733819
+
+2015-12-02 18:28:15 -0500  Nicolas Dufresne <nicolas.dufresne@collabora.co.uk>
+
+	* gst/videoparsers/gsth264parse.c:
+	* gst/videoparsers/gsth265parse.c:
+	  h26xparse: Resend PPS/SPS after seek
+	  This is to support byte-stream decoder that does not remember the
+	  PPS/SPS after a flush. This is not needed by all decoders, but is
+	  harmless for those that do remember.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=758405
+
+2015-12-01 18:09:25 -0500  Nicolas Dufresne <nicolas.dufresne@collabora.com>
+
+	* gst-libs/gst/gl/gstglupload.c:
+	  glupload: Only offer custom allocator with caps features
+	  To use GLMemory and EGLImage allocators, one need to know the
+	  libgstgl API. This is only expected if the associated caps features
+	  have been negotiated. Generic element that otherwise receive those
+	  allocators may fail, resulting in broken pieline. We don't want to
+	  force all generic element to check if the allocator is a custom
+	  allocator or a normal allocator (which implement the _alloc method).
+	  https://bugzilla.gnome.org/show_bug.cgi?id=758877
+
+2015-12-04 18:05:58 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+	* gst/mxf/mxfmux.c:
+	  mxfmux: Don't copy input buffers, just append them to the header
+
+2015-12-03 11:46:10 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+	* ext/hls/m3u8.c:
+	  hlsdemux: Resync live playlists to the 3rd newest fragment if we fall off the playlist
+	  As HLS does not provide any way of knowing the server's clock, and we do
+	  buffering of "live" streams, at some point we will fall behind the server in
+	  many cases and would have to advance to a fragment that is not in the playlist
+	  anymore.
+	  Previously we would've just resynced to the next oldest fragment that is still
+	  there, but this causes problems as from this point onwards we would always
+	  fall off the playlist again all the time.
+	  Instead we now resync and move to the 3rd newest fragment like we would do
+	  when starting playback of a live stream.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=758987
+
+2015-12-03 18:21:50 +0000  Tim-Philipp Müller <tim@centricular.com>
+
+	* ext/hls/m3u8.c:
+	  hls: m3u8: remove superfluous gst_m3u8_copy() implementation
+	  No need to implement _copy() when we just copy a list that
+	  we're freeing three lines later anyway. Instead just steal
+	  the new main list.
+
+2015-12-03 10:08:05 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+	* gst-libs/gst/adaptivedemux/gstadaptivedemux.c:
+	  adaptivedemux: Log PTS of buffers that are pushed downstream
+
+2015-10-20 09:49:16 +0200  Edward Hervey <edward@centricular.com>
+
+	* gst/mpegtsdemux/tsdemux.c:
+	  tsdemux: Expose DVB Subpicture as subpictures
+	  For some reason we were considering them as private data.
+
+2015-10-20 17:22:23 +0200  Edward Hervey <edward@centricular.com>
+
+	* gst/mpegtsdemux/tsdemux.c:
+	  tsdemux: Push GAP events *after* deactivating old programs
+	  The order in which program switch must happen is:
+	  1) drain all data on old pads (but don't push EOS)
+	  2) add new pads (but don't push any data on them)
+	  3) Push EOS and remove old pads
+	  4) Start pushing data on new pads
+	  There was one caveat in this implementation, which is that when
+	  we activate a sparse pad (step 2) we would push a GAP event. The problem
+	  is that, while being an event, it is actually *data*.
+	  We therefore need to make sure pushing those GAP event is done at the step
+	  we start pushing data.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=750402
+
+2015-09-15 18:20:38 +0200  Edward Hervey <edward@centricular.com>
+
+	* gst/mpegtsdemux/tsdemux.c:
+	  tsdemux: Make sure old streams are drained before switching
+	  Before we add any streams, make sure we drain all streams. This ensures
+	  there's consistency that only "new" data will be pushed on buffers once
+	  the new pads are added
+	  https://bugzilla.gnome.org/show_bug.cgi?id=750402
+
+2015-09-10 14:55:05 +0200  Edward Hervey <bilboed@bilboed.com>
+
+	* gst/mpegtsdemux/mpegtsbase.c:
+	* gst/mpegtsdemux/mpegtsbase.h:
+	* gst/mpegtsdemux/tsdemux.c:
+	* gst/mpegtsdemux/tsdemux.h:
+	  mpegtsdemux: Allow deactivation of programs to be delayed
+	  When changing programs, the order of events needs to be the following:
+	  * add pads from new program
+	  * send EOS on old pads
+	  * remove old pads
+	  * emit 'no-more-pads'
+	  Previously tsdemux was not doing that, and was first deactivating and
+	  removing old pads before adding new ones.
+	  We fix this by allowing subclasses of mpegtsbase to be able to handle
+	  themselves the deactivation of programs. In this case tsdemux will
+	  properly deactivate it once it has activated the new program.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=750402
+
+2015-12-02 11:01:53 +0100  Maroš Ondrášek <mx3ldev@gmail.com>
+
+	* ext/hls/gsthlsdemux.c:
+	  hlsdemux: update current variant if connection speed is set
+	  If connection speed is set, playlist according
+	  to connection speed is selected as current playlist.
+	  Problem is that the current variant of main playlist still
+	  points to previously set variant.
+	  If previously set variant doesn't correspond to current
+	  playlist, then it causes unnecessary change of playlist
+	  to the same playlist after first fragment is downloaded,
+	  because of not updated current variant.
+	  To fix this, we need to make sure that current variant
+	  of main playlist corresponds to the current playlist
+	  https://bugzilla.gnome.org/show_bug.cgi?id=758946
+
+2015-12-02 14:35:22 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+	* gst/videoframe_audiolevel/gstvideoframe-audiolevel.c:
+	  videoframe-audiolevel: Fix compilation of static plugin and some compiler warnings
+	  Use G_GSIZE_FORMAT for gsize instead of %ld and make sure that the plugin name
+	  is a valid C identifier, i.e. contains no spaces or dashes.
+
+2015-12-02 22:42:39 +1100  Matthew Waters <matthew@centricular.com>
+
+	* gst-libs/gst/gl/gstglcolorconvert.c:
+	  glcolorconvert: improve the YUY2/UYVY->RGBA conversion shader
+	  Don't offset the y-axis.  We only need to offset on the x-axis.
+	  Removes a sawtooth pattern on horizontal and vertical edges.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=755486
+
+2015-12-02 22:40:06 +1100  Matthew Waters <matthew@centricular.com>
+
+	* gst-libs/gst/gl/gstglcolorconvert.c:
+	  glcolorconvert: improve RGBA->YUY2/UYVY conversion shader
+	  We should only average the chroma samples not the luma sample.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=758904
+
+2015-11-11 03:55:27 +1100  Jan Schmidt <jan@centricular.com>
+
+	* ext/hls/gsthlsdemux.c:
+	  hlsdemux: Tell the base class the fragment duration
+	  adaptivedemux uses the fragment duration as a delay
+	  in some cases, so make sure to set it.
+
+2015-11-11 03:54:51 +1100  Jan Schmidt <jan@centricular.com>
+
+	* gst-libs/gst/adaptivedemux/gstadaptivedemux.c:
+	* gst-libs/gst/adaptivedemux/gstadaptivedemux.h:
+	  adaptivedemux: Send the bitrate of the stream as a tag
+	  If we know or can measure the nominal bitrate of a stream,
+	  send that info as a tag downstream
+
+2015-11-08 01:34:30 +1100  Jan Schmidt <jan@centricular.com>
+
+	* ext/hls/gsthlsdemux.c:
+	  hlsdemux: When switching bitrate variants, don't jump back
+	  Don't jump backward to 3 files from the end of the playlist
+	  when switching variants - it just means we downloaded
+	  fragments fast and caught up to the end of the playlist.
+	  Disable that by treating a variant switch as a playlist
+	  update, not a restart due to a seek or so.
+
+2015-04-21 21:09:19 +0300  Vivia Nikolaidou <vivia@toolsonair.com>
+
+	* configure.ac:
+	* gst/videoframe_audiolevel/Makefile.am:
+	* gst/videoframe_audiolevel/gstvideoframe-audiolevel.c:
+	* gst/videoframe_audiolevel/gstvideoframe-audiolevel.h:
+	* tests/check/Makefile.am:
+	* tests/check/elements/videoframe-audiolevel.c:
+	  alevel: New audio/video level element
+	  The videoframe-audiolevel element acts like a synchronized audio/video "level"
+	  element. For each video frame, it posts a level-style message containing the
+	  RMS value of the corresponding audio frames. This element needs both video and
+	  audio to pass through it. Furthermore, it needs a queue after its video
+	  source.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=748259
+
+2015-12-01 23:20:45 -0800  Reynaldo H. Verdejo Pinochet <reynaldo@osg.samsung.com>
+
+	* gst-libs/gst/gl/Makefile.am:
+	* gst-libs/gst/insertbin/Makefile.am:
+	  Drop usage of deprecated g-ir-scanner --strip-prefix flag
+
+2015-11-10 16:19:34 +0000  Alex Ashley <bugzilla@ashley-family.net>
+
+	* ext/hls/m3u8.c:
+	* tests/check/elements/hlsdemux_m3u8.c:
+	  hlsdemux: correct the calculation of seek range of non-live streams
+	  The seek range calculation for on-demand streams was incorrectly
+	  excluding the last three segments of the stream. This three segment
+	  rule should only be applied to live streams [1].
+	  [1] https://tools.ietf.org/html/draft-pantos-http-live-streaming-17#section-6.3.3
+	  https://bugzilla.gnome.org/show_bug.cgi?id=758386
+
 2015-12-01 17:52:03 +0000  Paolo Pettinato <ppettina@cisco.com>
 
 	* gst/pcapparse/gstpcapparse.c:
 	  pcapparse: Forward FLUSH_STOP events downstream too
 	  https://bugzilla.gnome.org/show_bug.cgi?id=758913
 
+2015-11-29 01:02:15 +0000  Tim-Philipp Müller <tim@centricular.com>
+
+	* ext/hls/gsthlsdemux.c:
+	* gst-libs/gst/adaptivedemux/gstadaptivedemux.c:
+	  hlsdemux: fix crash when decryption key can't be downloaded
+	  Happened with
+	  http://sslhls.m6tv.cdn.sfr.net/hls-live/livepkgr/_definst_/m6_hls_aes/m6_hls_aes_856.m3u8
+	  if glib-networking was not installed (since key has https uri).
+
+2015-11-30 11:05:38 +0000  Tim-Philipp Müller <tim@centricular.com>
+
+	* ext/hls/gsthlsdemux.c:
+	* ext/hls/m3u8.c:
+	* ext/hls/m3u8.h:
+	  hls: m3u8: remove pointless client_has_main() function
+	  We always have a main list.
+
+2015-11-28 00:12:04 +0000  Tim-Philipp Müller <tim@centricular.com>
+
+	* ext/hls/m3u8.c:
+	* ext/hls/m3u8.h:
+	  hls: m3u8: remove unused _get_current_fragment_duration() function
+
+2015-11-27 19:21:22 +0000  Tim-Philipp Müller <tim@centricular.com>
+
+	* ext/hls/m3u8.c:
+	* ext/hls/m3u8.h:
+	  hls: m3u8: remove unused m3u8 client update_failed_count field
+
+2015-11-15 17:31:05 +0000  Tim-Philipp Müller <tim@centricular.com>
+
+	* ext/hls/m3u8.c:
+	* ext/hls/m3u8.h:
+	  hls: m3u8: remove helper var that's only used during parsing from structure
+	  Just keep that local to the parsing function.
+
+2015-11-01 13:21:45 +0000  Tim-Philipp Müller <tim@centricular.com>
+
+	* Makefile.am:
+	* docs/plugins/inspect/plugin-fragmented.xml:
+	* docs/plugins/inspect/plugin-hls.xml:
+	* ext/hls/Makefile.am:
+	* ext/hls/gstfragmented.h:
+	* ext/hls/gstfragmentedplugin.c:
+	* ext/hls/gsthls.h:
+	* ext/hls/gsthlsdemux.h:
+	* ext/hls/gsthlsplugin.c:
+	* ext/hls/gstm3u8playlist.c:
+	* ext/hls/m3u8.c:
+	* gst-plugins-bad.spec.in:
+	* tests/check/elements/hlsdemux_m3u8.c:
+	  hls: rename plugin from fragmented to hls
+
+2015-12-01 19:44:36 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+	* ext/hls/gsthlsdemux.c:
+	  hlsdemux: Always give timestamps if we're discont and don't mark stream discont if a playlist change was not successful
+	  If the stream is discont, we must provide a timestamp in any case. Elements
+	  like tsdemux are not going to output anything if we give a NONE timestamp
+	  after a discont.
+	  Also marking a stream as discont if a playlist change was not successful would
+	  lead to the above situation, but in that case we are not required at all to
+	  mark the stream discont as we're still at the old playlist.
+
+2015-12-01 17:06:33 +0000  Tim-Philipp Müller <tim@centricular.com>
+
+	* gst/mpegtsmux/tsmux/tsmuxstream.c:
+	  tsmux: fix wrong log message level
+	  ERROR level is debugging left-over.
+
+2015-11-09 16:08:30 +0900  Hyunjun Ko <zzoon.ko@samsung.com>
+
+	* tests/check/libs/aggregator.c:
+	  tests:aggregator: fix tc failure and correct check value
+	  Failure by this commit 2dfa548f3645844082c3db65d96d87255701b3ad, which is
+	  to append hooks instead of prepend.
+	  Because of this change, aggretated_cb is not called and leads to failure.
+	  And correct to check flush stop value instead of flush start value
+	  https://bugzilla.gnome.org/show_bug.cgi?id=757801
+
 2015-11-30 19:53:28 +0200  Sebastian Dröge <sebastian@centricular.com>
 
 	* sys/d3dvideosink/d3dhelpers.c:
@@ -249,6 +6841,147 @@
 	  visible again before checking if the swapchain really has to be recreated.
 	  https://bugzilla.gnome.org/show_bug.cgi?id=741608
 
+2015-11-27 18:46:56 +0000  Luis de Bethencourt <luisbg@osg.samsung.com>
+
+	* ext/opus/gstopusparse.c:
+	  opusparse: remove unneeded statement
+	  commit da5c41930c4083979b1745f4d8848d97fe03d8eb removed the two uses of the
+	  new value of data:
+	  channels = opus_packet_get_nb_channels (data);
+	  bandwidth = opus_packet_get_bandwidth (data);
+	  Since then, data isn't being used between incrementing it by packet_offset
+	  and going out of scope. Removing this uneeded statement.
+
+2015-11-27 12:44:57 +0000  Tim-Philipp Müller <tim@centricular.com>
+
+	* tests/check/elements/id3mux.c:
+	  tests: id3mux: add unit test for GST_TAG_PRIVATE_DATA writing
+	  https://bugzilla.gnome.org/show_bug.cgi?id=758728
+
+2015-11-27 11:33:07 +0530  Ravi Kiran K N <ravi.kiran@samsung.com>
+
+	* gst/id3tag/id3tag.c:
+	  id3mux: write private data tag
+	  Handle "PRIV" tag in id3mux. Write owner
+	  identifier and private data and add to the
+	  id3v2 frame.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=758728
+
+2015-11-26 10:15:36 +0100  Mathias Hasselmann <mathias.hasselmann@kdab.com>
+
+	* sys/androidmedia/gstamcvideodec.c:
+	  androidmedia: Don't add metadata to locked buffer
+	  The video decoders tried calling gst_buffer_add_*meta() on non-writable
+	  buffer resulting in warnings of this kind:
+	  gstamcvideodec.c:921 (_gl_sync_render_unlocked): WARNING: amcvideodec
+	  Failed to create the transformation meta for the gl_sync 0xabc03848
+	  buffer 0xabb01b40 (0)
+	  https://bugzilla.gnome.org/show_bug.cgi?id=758694
+
+2015-11-09 18:07:30 +0000  Florin Apostol <florin.apostol@oregan.net>
+
+	* tests/check/elements/dash_demux.c:
+	  adaptivedemux: tests: disabled testFragmentDownloadError test
+	  Until we will have support to control the generating thread from
+	  fakeHTTPsrc element, the test testFragmentDownloadError is disabled.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=757776
+
+2015-11-09 14:14:34 +0000  Florin Apostol <florin.apostol@oregan.net>
+
+	* tests/check/elements/dash_demux.c:
+	  adaptivedemux: tests: corrected access to fakeHTTPsrc element
+	  The src element for adaptivedemux is now a bin. Updated the tests to
+	  correctly reach into the bin and get the fakeHTTPsrc element
+	  https://bugzilla.gnome.org/show_bug.cgi?id=757776
+
+2015-11-09 14:13:04 +0000  Florin Apostol <florin.apostol@oregan.net>
+
+	* tests/check/elements/fake_http_src.c:
+	  adaptivedemux: tests: made fakeHTTPsrc element MT safe
+	  https://bugzilla.gnome.org/show_bug.cgi?id=757776
+
+2015-11-23 11:32:13 +0900  Vineeth T M <vineeth.tm@samsung.com>
+
+	* gst/dvdspu/gstspu-pgs.c:
+	  spu-pgs: Fix array memory leak
+	  https://bugzilla.gnome.org/show_bug.cgi?id=758517
+
+2015-11-24 00:20:36 +0000  Tim-Philipp Müller <tim@centricular.com>
+
+	* gst/audiomixer/gstaudioaggregator.c:
+	  audiomixer: register function name for debugging just once
+	  Not every time aggregate is called...
+
+2015-11-24 12:42:45 +0000  Florin Apostol <florin.apostol@oregan.net>
+
+	* ext/dash/gstmpdparser.c:
+	* ext/dash/gstmpdparser.h:
+	* tests/check/elements/dash_mpd.c:
+	  mpdparser: remove gst_mpd_client_check_time_position
+	  https://bugzilla.gnome.org/show_bug.cgi?id=758593
+
+2015-11-24 11:50:51 +0100  Maroš Ondrášek <mx3ldev@gmail.com>
+
+	* ext/smoothstreaming/gstmssmanifest.c:
+	  mssdemux: add depth field to audio caps if available
+	  depth field can be retrieved from "BitsPerSample" or
+	  from "WaveFormatEx" structure, if provided in Manifest
+	  https://bugzilla.gnome.org/show_bug.cgi?id=758586
+
+2015-11-20 16:35:43 +0000  Florin Apostol <florin.apostol@oregan.net>
+
+	* tests/check/elements/dash_mpd.c:
+	  mpdparser: tests: added test for fraction of seconds in availabilityStartTime
+	  https://bugzilla.gnome.org/show_bug.cgi?id=758410
+
+2015-11-20 16:36:00 +0000  Florin Apostol <florin.apostol@oregan.net>
+
+	* ext/dash/gstmpdparser.c:
+	  mpdparser: added support for parsing fraction of seconds in dateTime fields
+	  https://bugzilla.gnome.org/show_bug.cgi?id=758410
+
+2015-11-22 13:11:48 +0100  George Kiagiadakis <george.kiagiadakis@collabora.com>
+
+	* tests/examples/waylandsink/Makefile.am:
+	  tests: put the waylandsink example window.ui file in EXTRA_DIST
+
+2015-11-22 13:08:35 +0100  George Kiagiadakis <george.kiagiadakis@collabora.com>
+
+	* tests/examples/waylandsink/Makefile.am:
+	  tests: fix linking waylandsink example with the gstwayland library
+	  First, use top_builddir, otherwise it fails in out-of-source builds.
+	  Second, link to the libtool archive directly to let make understand
+	  the dependency.
+
+2015-11-20 20:59:16 -0300  Thiago Santos <thiagoss@osg.samsung.com>
+
+	* ext/dash/gstmpdparser.c:
+	  dashdemux: always set presentationTimeOffset
+	  Set it for all types of segment lists (templates / lists / base)
+	  and not only for templates.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=751529
+
+2015-11-20 17:50:30 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+	* gst/mxf/mxfmux.c:
+	  mxfmux: Error out if we get a timeout during live mixing
+	  We can't handle that but need complete streams without gaps.
+
+2015-11-20 17:46:53 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+	* gst/mxf/mxfmpeg.c:
+	  mxfmpeg: Use the correct sound essence compression UL for MP3
+	  There's one for MPEG 1 Layer 1 and one for Layer 2 and 3. We previously
+	  had the second for Layer 1 and 2 and nothing for Layer 3, which was wrong.
+
+2015-11-20 17:34:22 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+	* gst/mxf/mxfmpeg.c:
+	  mxfmpeg: Set the essence container UL byte 13 to 0x10 for h264
+	  0x04 signifies a MPEG elementary stream but according to RP2008, 0x10 should
+	  be used for a h264 byte-stream. This also fixes compatibility of our files
+	  with ffmpeg.
+
 2015-11-20 11:18:43 +1100  Roman Nowicki <rnowicki@sims.pl>
 
 	* ext/qt/qtitem.cc:
@@ -272,12 +7005,459 @@
 	  notification.  Initialize ourself in this case.
 	  https://bugzilla.gnome.org/show_bug.cgi?id=758337
 
+2015-07-29 22:31:30 +0900  Jimmy Ohn <yongjin.ohn@lge.com>
+
+	* ext/dash/gstdashdemux.c:
+	  dashdemux: Add binary search for stream_sidx_seek
+	  Add binary search to optimize in stream_sidx_seek.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=749653
+
+2015-11-19 15:59:56 +0000  Florin Apostol <florin.apostol@oregan.net>
+
+	* ext/dash/gstmpdparser.c:
+	* ext/dash/gstmpdparser.h:
+	* tests/check/elements/dash_mpd.c:
+	  mpdparser: remove unused functions gst_mpdparser_get_chunk_by_index and gst_mpdparser_find_segment_by_index
+	  https://bugzilla.gnome.org/show_bug.cgi?id=758233
+
+2015-11-19 17:24:53 +0000  Luis de Bethencourt <luisbg@osg.samsung.com>
+
+	* ext/mpeg2enc/gstmpeg2enc.cc:
+	* ext/opencv/gstedgedetect.cpp:
+	* ext/opencv/gstmotioncells.cpp:
+	* ext/opencv/gsttemplatematch.cpp:
+	* gst/dataurisrc/gstdataurisrc.c:
+	* gst/mve/gstmvemux.c:
+	* gst/pcapparse/gstirtspparse.c:
+	* gst/pcapparse/gstpcapparse.c:
+	* tests/check/elements/dataurisrc.c:
+	  docs: update gst-launch-0.10 lines
+	  Update references to gst-launch-0.10 to gst-launch-1.0
+
+2015-11-19 10:32:03 +1100  Matthew Waters <matthew@centricular.com>
+
+	* sys/androidmedia/gstamcvideodec.c:
+	* sys/androidmedia/gstamcvideodec.h:
+	  amcvideodec: move release_output_buffer into the sync meta
+	  Some devices only ever keep one buffer available in the GL queue resulting in
+	  multiple calls to release_output_buffer only causing one frame to be rendered.
+	  If there is a queue after amcvideodec (even playsink's small one), then
+	  multiple buffers are pushed but only a small fraction of them are actually
+	  rendered on time.  The rest will either render some number of frames ahead of
+	  where they are meant to be or timeout waiting for a frame that's already been
+	  rendered.
+	  Solved by moving the release_output_buffer into the sync_meta the is pushed
+	  downstream.  When downstream renders, the custom sync implementation attempts
+	  to release the current buffer (if not already released) and render. Once the
+	  frame has been rendered to the screen, the next frame is released and is
+	  hopefully available by the time the next frame is to be rendered.
+	  This fixes a perceived frame jitter in the output.
+
+2015-11-17 15:23:17 -0800  Reynaldo H. Verdejo Pinochet <reynaldo@osg.samsung.com>
+
+	* ext/audiofile/gstafsink.c:
+	* ext/audiofile/gstafsrc.c:
+	* ext/dash/gstmpdparser.c:
+	* ext/gl/gstglbumper.c:
+	* ext/gl/gstgldifferencematte.c:
+	* ext/gl/gstglfiltershader.c:
+	* ext/gl/gstgloverlay.c:
+	* ext/hls/gsthlsdemux.c:
+	* ext/kate/gstkateenc.c:
+	* ext/kate/gstkatespu.c:
+	* ext/kate/gstkateutil.c:
+	* ext/libmms/gstmms.c:
+	* ext/neon/gstneonhttpsrc.c:
+	* ext/opus/gstopusenc.c:
+	* ext/sndfile/gstsfsink.c:
+	* ext/sndfile/gstsfsrc.c:
+	* ext/spc/tag.c:
+	* ext/timidity/gsttimidity.c:
+	* ext/wayland/gstwaylandsink.c:
+	* gst-libs/gst/gl/gstglfeature.c:
+	* gst-libs/gst/gl/gstglslstage.c:
+	* gst-libs/gst/gl/gstglutils.c:
+	* gst-libs/gst/gl/x11/gstgldisplay_x11.c:
+	* gst/audiovisualizers/gstwavescope.c:
+	* gst/dvbsuboverlay/dvb-sub.c:
+	* gst/librfb/rfbdecoder.c:
+	* gst/mpegtsdemux/mpegtspacketizer.c:
+	* gst/mpegtsdemux/tsdemux.c:
+	* gst/mpegtsmux/tsmux/tsmux.c:
+	* sys/acmenc/acmenc.c:
+	* sys/acmmp3dec/acmmp3dec.c:
+	* sys/applemedia/avfassetsrc.m:
+	* sys/bluez/gsta2dpsink.c:
+	* sys/bluez/gstavdtpsink.c:
+	* sys/bluez/gstavdtputil.c:
+	* sys/dshowdecwrapper/gstdshowaudiodec.cpp:
+	* sys/dshowdecwrapper/gstdshowvideodec.cpp:
+	* sys/dshowsrcwrapper/gstdshow.cpp:
+	* sys/dshowsrcwrapper/gstdshowvideosrc.cpp:
+	* sys/dshowvideosink/dshowvideosink.cpp:
+	* sys/dvb/camswclient.c:
+	* sys/dvb/dvbbasebin.c:
+	* sys/dvb/parsechannels.c:
+	* sys/pvr2d/gstpvrvideosink.c:
+	* sys/uvch264/gstuvch264_mjpgdemux.c:
+	* sys/vdpau/gstvdpvideomemory.c:
+	* tests/examples/gtk/glliveshader.c:
+	* tests/icles/metadata_editor.c:
+	  Remove unnecessary NULL checks before g_free()
+	  g_free() is NULL-safe
+
+2015-11-11 16:11:14 +0100  Sebastian Dröge <sebastian@centricular.com>
+
+	* ext/dash/gstmpdparser.c:
+	* tests/check/elements/dash_mpd.c:
+	  mpdparser: Also allow '/' in RepresentationID
+	  Used by http://www.bok.net/dash/tears_of_steel/cleartext/stream.mpd
+	  https://bugzilla.gnome.org/show_bug.cgi?id=757903
+
+2015-10-26 16:24:40 +0100  George Kiagiadakis <george.kiagiadakis@collabora.com>
+
+	* .gitignore:
+	* configure.ac:
+	* tests/examples/Makefile.am:
+	* tests/examples/waylandsink/Makefile.am:
+	* tests/examples/waylandsink/main.c:
+	* tests/examples/waylandsink/window.ui:
+	  tests/examples: add a waylandsink example
+	  https://bugzilla.gnome.org/show_bug.cgi?id=748322
+
+2015-11-18 12:56:06 +0100  George Kiagiadakis <george.kiagiadakis@collabora.com>
+
+	* ext/wayland/wlwindow.c:
+	  waylandsink: call gst_video_sink_center_rect with a destination rectangle that starts from (0,0)
+	  The intention of this code is to find the center rectangle relative
+	  to (0,0), since subsurface coordinates are relative to the parent
+	  surface.
+	  The old code used to work but was wrong and broken by
+	  http://cgit.freedesktop.org/gstreamer/gst-plugins-base/commit/gst-libs/gst/video/gstvideosink.c?id=ff57f6913456ec1991e55517cf1f239e80eeddef
+
+2015-11-16 17:25:34 +0000  Florin Apostol <florin.apostol@oregan.net>
+
+	* ext/dash/gstmpdparser.c:
+	  dashdemux: fixed illegal memory access in gst_mpd_client_get_last_fragment_timestamp_end
+	  https://bugzilla.gnome.org/show_bug.cgi?id=758188
+
+2015-11-16 17:25:21 +0000  Florin Apostol <florin.apostol@oregan.net>
+
+	* tests/check/elements/dash_mpd.c:
+	  mpdparser: tests: added test for gst_mpd_client_get_last_fragment_timestamp_end
+	  The timestamp for last fragment is incorrectly retrieved if segment templates
+	  are used.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=758188
+
+2015-11-17 16:21:44 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+	* sys/androidmedia/gstamcvideodec.c:
+	  amcvideodec: Don't require a non-zero buffer size when doing decoding to a surface
+	  At least on some devices/Android versions the buffer size will always be zero
+	  in these cases.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=758228
+
+2015-11-17 17:17:50 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+	* ext/gl/gstglimagesink.c:
+	  glimagesink: Remove unused variable
+	  gstglimagesink.c: In function 'gst_glimage_sink_on_draw':
+	  gstglimagesink.c:1959:18: error: unused variable 'sync_meta' [-Werror=unused-variable]
+	  GstGLSyncMeta *sync_meta = NULL;
+	  ^
+
+2015-11-17 17:09:51 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+	* gst-libs/gst/gl/gstglviewconvert.c:
+	  glviewconvert: String literals are const
+	  gstglviewconvert.c: In function '_mangle_extensions':
+	  gstglviewconvert.c:1511:13: error: assignment discards 'const' qualifier from pointer target type [-Werror=discarded-qualifiers]
+	  ext_str = "#extension GL_OES_EGL_image_external : require\n";
+	  ^
+
+2015-11-17 17:08:14 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+	* gst-libs/gst/gl/gstglsyncmeta.c:
+	  glsyncmeta: Actually return the newly created meta from gst_buffer_add_gl_sync_meta()
+	  gstglsyncmeta.c  -fPIC -DPIC -o .libs/libgstgl_1.0_la-gstglsyncmeta.o
+	  gstglsyncmeta.c: In function 'gst_buffer_add_gl_sync_meta':
+	  gstglsyncmeta.c:131:1: error: control reaches end of non-void function [-Werror=return-type]
+	  }
+	  ^
+
+2015-11-17 16:21:10 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+	* sys/androidmedia/gstamcvideodec.c:
+	  amcvideodec: Fix indentation
+
+2015-11-17 16:08:17 +1100  Alessandro Decina <alessandro.d@gmail.com>
+
+	* sys/applemedia/vtdec.c:
+	  applemedia: vtdec: fix negotiation more
+	  Year 12: I still don't understand how negotiation works.
+	  Apparently gst_pad_query_caps doesn't do what I thought it did. To get the
+	  actual caps that can flow through vtdec:src we must call gst_pad_peer_query_caps
+	  with the template caps as filter.
+	  Fixes negotiation with stuff that doesn't understand GLMemory (hello videoscale).
+
+2015-11-17 16:14:11 +1100  Alessandro Decina <alessandro.d@gmail.com>
+
+	* sys/applemedia/vtdec.c:
+	  applemedia: vtdec: minor texture cache fixes
+	  Small fix on how the texture cache is cleaned up / setup in case of renegotiation
+
+2015-11-17 16:13:00 +1100  Alessandro Decina <alessandro.d@gmail.com>
+
+	* sys/applemedia/corevideotexturecache.m:
+	  applemedia: corevideotexturecache: stop configuring cache->convert over and over
+
+2015-11-16 15:46:41 +1100  Matthew Waters <matthew@centricular.com>
+
+	* ext/gl/gstglimagesink.c:
+	* ext/gl/gstglimagesink.h:
+	* sys/androidmedia/gstamcvideodec.c:
+	  glimagesink: wait on the correct sync meta when rendering
+
+2015-11-03 13:19:41 +1100  Matthew Waters <matthew@centricular.com>
+
+	* sys/androidmedia/Makefile.am:
+	* sys/androidmedia/gstamc2dtexturerenderer.c:
+	* sys/androidmedia/gstamc2dtexturerenderer.h:
+	* sys/androidmedia/gstamcvideodec.c:
+	* sys/androidmedia/gstamcvideodec.h:
+	  amcviddec: output external-oes textures
+	  This provides a performance and power usage improvement by removing
+	  the texture copy from an OES texture to 2D texture.
+	  The flow is as follows
+	  1. Generate the output buffer with the required sync meta with the incrementing
+	  push counter and OES GL memory
+	  1.1 release_output_buffer (buf, render=true) and push downstream
+	  2. Downstream waits for on the sync meta (timed wait) or drops the frame (no wait)
+	  2.1 Timed wait for the frame number to reach the number of frame callbacks fired
+	  2.2 Unconditionally update the image when the wait completes (success or fail).
+	  Sets the affine transformation matrix meta on the buffer.
+	  3. Downstream renders as usual.
+	  At *some* point through this the on_frame_callback may or may not fire.  If it
+	  does fire, we can finish waiting early and render. Otherwise we have to
+	  wait for a timeout to occur which may cause more buffers to be pused into the
+	  internal GL queue which siginificantly decreases the chances of the
+	  on_frame_callback to fire again.  This is because the frame callback only occurs
+	  when the internal GL queue changes state from empty to non-empty.
+	  Because there is no way to reliably correlate between the number of buffers
+	  pushed and the number of frame callbacks received, there are a number of
+	  workarounds in place.
+	  1. We self-increment the ready counter when it falls behind the push counter
+	  2. Time based waits as the frame callback may not be fired for a certain frame.
+	  3. It is assumed that the device can render at speed or performs some QoS of
+	  the interal GL queue (which may not match the GStreamer QoS).
+	  It holds that we call SurfaceTexture::updateTexImage for each buffer pushed
+	  downstream however there's no guarentee that updateTexImage will result in
+	  the exact next frame (it could skip or duplicate) so synchronization is not
+	  guaranteed to be accurate although it seems to be close enough to be unable
+	  to discern visually.  This has not changed from before this patch.  The current
+	  requirement for synchronization is that updateTexImage is called at the point in
+	  time when the buffers is to be rendered.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=757285
+
+2015-11-02 17:57:29 +1100  Matthew Waters <matthew@centricular.com>
+
+	* gst-libs/gst/gl/gstglsyncmeta.c:
+	* gst-libs/gst/gl/gstglsyncmeta.h:
+	  glsyncmeta: add vfuncs for all operations
+	  there could be other ways/requirements for synchronising two GPU command
+	  streams (whether GL or platform specific).
+	  e.g. glfencesync/eglwaitnative/cond/etc
+
+2015-11-10 15:37:05 +1100  Matthew Waters <matthew@centricular.com>
+
+	* ext/gl/gstglimagesink.c:
+	* ext/gl/gstglimagesink.h:
+	  glimagesink: add support for rendering external-oes textures
+	  https://bugzilla.gnome.org/show_bug.cgi?id=757285
+
+2015-11-10 14:54:02 +1100  Matthew Waters <matthew@centricular.com>
+
+	* gst-libs/gst/gl/gstglviewconvert.c:
+	* gst-libs/gst/gl/gstglviewconvert.h:
+	  glviewconvert: add support rectangle/external-oes textures
+	  https://bugzilla.gnome.org/show_bug.cgi?id=757285
+
+2015-11-17 15:18:28 +1100  Alessandro Decina <alessandro.d@gmail.com>
+
+	* sys/applemedia/vtdec.c:
+	  applemedia: vtdec: fix setting internal SKIP / DROP flags
+
 2015-11-17 09:08:52 +0900  Vineeth TM <vineeth.tm@samsung.com>
 
 	* ext/gl/gstglimagesink.c:
 	  glimagesink: Fix structure memory leak
 	  https://bugzilla.gnome.org/show_bug.cgi?id=758205
 
+2015-11-16 21:52:07 -0500  Olivier Crête <olivier.crete@collabora.com>
+
+	* gst/autoconvert/gstautoconvert.c:
+	  autoconvert: Add support for bufferlists
+
+2015-11-17 11:21:27 +1100  Alessandro Decina <alessandro.d@gmail.com>
+
+	* sys/applemedia/vtdec.c:
+	* sys/applemedia/vtdec.h:
+	  applemedia: vtdec: improve negotiation
+	  Rework negotiation implementing GstVideoDecoder::negotiate. Make it possible to
+	  switch texture sharing on and off at runtime. Useful to (eventually) turn
+	  texture sharing on in pipelines where glimagesink is linked only after
+	  decoding has already started (for example OWR).
+
+2015-11-17 11:19:57 +1100  Alessandro Decina <alessandro.d@gmail.com>
+
+	* sys/applemedia/vtdec.c:
+	  applemedia: vtdec: improve handing of decode errors/frame drops
+	  Improve decode error handling by avoiding calling into GstVideoDecoder from the
+	  VT decode callback. This removes contention on the GST_VIDEO_DECODER_STREAM_LOCK
+	  which used to make the decode callback slow enough for VT to start dropping lots
+	  of frames once the first frame was dropped.
+
+2015-11-17 11:22:15 +1100  Alessandro Decina <alessandro.d@gmail.com>
+
+	* sys/applemedia/vtdec.c:
+	  applemedia: vtdec: fix uninitialized variable warning
+
+2015-11-14 20:21:17 +0000  Tim-Philipp Müller <tim@centricular.com>
+
+	* gst-libs/gst/adaptivedemux/gstadaptivedemux.c:
+	* gst-libs/gst/adaptivedemux/gstadaptivedemux.h:
+	* tests/check/elements/dash_demux.c:
+	  adaptivedemux: remove now-defunct "num-lookback-fragments" property
+	  This no longer does anything, and it was marked as CONSTRUCT_ONLY
+	  which means someone would really have to go out of their way to
+	  be able to set this, which would only be done in very custom
+	  scenarios, if ever, and those will likely target a specific
+	  version of GStreamer then, so probably not much point keeping
+	  it deprecated for a while before removing it.
+
+2015-11-13 17:14:14 -0500  Olivier Crête <olivier.crete@collabora.com>
+
+	* gst/autoconvert/gstautoconvert.c:
+	  autoconvert: Always give a valid reply to internal caps queries
+	  Caps queries can always have a valid reply, either the filter or ANY.
+	  If the caps are ANY, then accept-caps always returns TRUE.
+
+2015-11-12 16:35:12 +0100  Nicolas Huet <nicolas.huet@parrot.com>
+
+	* gst/mpegtsdemux/mpegtspacketizer.c:
+	  mpegtsdemux: fix section_data leak
+	  If packet->payload_unit_start_indicator is true and pointer 0, there is no
+	  discontinuity check. Therefore there could be a previous section not complete
+	  that need to be cleared.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=758010
+
+2015-11-13 10:41:58 +0900  Vineeth TM <vineeth.tm@samsung.com>
+
+	* gst-libs/gst/gl/gstglsl.c:
+	  glsl: fix possible string overrun in gst_glsl_version_profile_from_string
+	  given a NULL-terminated string, s.
+	  s[i] = '\0';
+	  i++;
+	  does not guarentee that s[i] is NULL terminated and thus string operations
+	  could read off the end of the array.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=758039
+
+2015-11-13 16:50:22 +1100  Matthew Waters <matthew@centricular.com>
+
+	* gst-libs/gst/gl/gstglshader.c:
+	  glshader: don't read invalid list pointers (use after free)
+	  gst_gl_shader_detach_unlocked already removes the list entry so attempting to
+	  use the element to iterate to the next stage could read invalid data.
+	  Based on patch by Vineeth TM <vineeth.tm@samsung.com>
+	  https://bugzilla.gnome.org/show_bug.cgi?id=758039
+
+2015-11-13 10:44:26 +0900  Vineeth TM <vineeth.tm@samsung.com>
+
+	* tests/check/libs/gstglsl.c:
+	  tests:glsl: version_profile_s string leak
+	  https://bugzilla.gnome.org/show_bug.cgi?id=758039
+
+2015-11-13 10:56:10 +0900  Vineeth TM <vineeth.tm@samsung.com>
+
+	* gst-libs/gst/gl/gstglsl.c:
+	  glsl: free str while returning error
+	  https://bugzilla.gnome.org/show_bug.cgi?id=758039
+
+2015-11-13 11:04:34 +0900  Vineeth TM <vineeth.tm@samsung.com>
+
+	* tests/check/libs/gstglupload.c:
+	  tests:glupload: fix caps memory leak
+	  https://bugzilla.gnome.org/show_bug.cgi?id=758039
+
+2015-11-12 12:21:54 +0000  Luis de Bethencourt <luisbg@osg.samsung.com>
+
+	* ext/opus/gstopusenc.c:
+	  opusenc: avoid potential overflow expression
+	  The result of the two expressions will be promoted to guint64 anyway,
+	  perform all the arithmetic in 64 bits to avoid potential overflows.
+	  CID 1338690, CID 1338691
+
+2015-11-12 12:00:07 +0000  Luis de Bethencourt <luisbg@osg.samsung.com>
+
+	* gst/mpegtsdemux/tsdemux.c:
+	  tsdemux: remove memory leak
+	  The values of channel_mapping are copied by gst_codec_utils_opus_create_caps ()
+	  but it doesn't free or take ownership of the g_new0 allocated memory. This
+	  needs to be freed before going out of scope.
+	  CID 1338692
+
+2015-11-12 11:42:36 +0000  Luis de Bethencourt <luisbg@osg.samsung.com>
+
+	* gst/mpegtsmux/mpegtsmux.c:
+	  mpegtsmux: remove unnecessary buffer check
+	  buf surely isn't NULL inside the block conditional to a buffer size bigger
+	  than (G_MAXUINT16 - 3). Plus gst_buffer_unref() checks if the buffer is
+	  NULL and does nothing if it is.
+	  CID 1338693
+
+2015-11-12 11:23:31 +0000  Luis de Bethencourt <luisbg@osg.samsung.com>
+
+	* ext/opus/gstopusparse.c:
+	  opusparse: initialize sample rate to a default
+	  sample_rate might be used uninitialized if !sink_caps is TRUE. Initialize
+	  it to the default used in gst_codec_utils_opus_parse_caps () when there is
+	  no rate defined in the caps.
+	  CID 1338695
+
+2015-11-12 16:36:03 +0900  Vineeth TM <vineeth.tm@samsung.com>
+
+	* gst-libs/gst/gl/gstglslstage.c:
+	  glslstage: Fix vertex_sources memory leak
+	  vertex_sources is being allocated but not freed resulting in leak
+	  https://bugzilla.gnome.org/show_bug.cgi?id=757974
+
+2015-11-12 16:26:00 +0900  Vineeth TM <vineeth.tm@samsung.com>
+
+	* gst-libs/gst/gl/gstglcolorconvert.c:
+	  glcolorconvert: remove unnecessary free
+	  version_str is already being freed. So no need to call again
+	  https://bugzilla.gnome.org/show_bug.cgi?id=757974
+
+2015-11-12 16:18:35 +0900  Vineeth TM <vineeth.tm@samsung.com>
+
+	* gst-libs/gst/gl/gstglcolorconvert.c:
+	  glcolorconvert: Fix string leak
+	  String got using gst_glsl_version_profile_to_string, is allocated
+	  memory and should be freed
+	  https://bugzilla.gnome.org/show_bug.cgi?id=757974
+
+2015-11-12 16:02:45 +0900  Vineeth TM <vineeth.tm@samsung.com>
+
+	* gst-libs/gst/gl/gstglcolorconvert.c:
+	  glcolorconvert: Fix frag_prog and frag_body memory leak
+	  https://bugzilla.gnome.org/show_bug.cgi?id=757974
+
+2015-11-11 16:51:23 +0000  Florin Apostol <florin.apostol@oregan.net>
+
+	* gst-libs/gst/adaptivedemux/gstadaptivedemux.c:
+	  adaptivedemux: fixed handling errors emitted by uri handler
+	  https://bugzilla.gnome.org/show_bug.cgi?id=757947
+
 2015-11-10 16:32:37 +0100  Nicolas Huet <nicolas.huet@parrot.com>
 
 	* gst/mpegtsdemux/tsdemux.c:
@@ -293,6 +7473,16 @@
 	  pad will not be unreffed and will be leaked.
 	  https://bugzilla.gnome.org/show_bug.cgi?id=757873
 
+2015-11-09 17:45:29 +0200  Sreerenj Balachandran <sreerenj.balachandran@intel.com>
+
+	* gst/ivfparse/gstivfparse.c:
+	  ivfparse: Fix the wrong width & height parsing of vp9 bitstream
+	  The current implementation for detecting the resolution changes
+	  on key frames is based on vp8 bitstream alignment. Avoid this
+	  width and height parsing for vp9 bitstream, which requires proper
+	  frame header parsing inorder to detect the resolution change (Fixme).
+	  https://bugzilla.gnome.org/show_bug.cgi?id=757825
+
 2015-11-11 11:40:52 +0100  Heinrich Fink <hfink@toolsonair.com>
 
 	* sys/applemedia/vtenc.c:
@@ -302,6 +7492,14 @@
 	  vtenc instance is stopped and then restarted.
 	  https://bugzilla.gnome.org/show_bug.cgi?id=757935
 
+2015-11-11 23:39:35 +1100  Matthew Waters <matthew@centricular.com>
+
+	* gst-libs/gst/gl/gstglcolorconvert.c:
+	  glcolorconvert: mangle gl_FragColor for GL3
+	  Some drivers don't provide the compatibility definition and we need to provide
+	  our own 'out vec4' variable to put the results of the fragment shader into.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=757938
+
 2015-11-11 16:06:25 +0900  Vineeth TM <vineeth.tm@samsung.com>
 
 	* tests/check/libs/gstglcolorconvert.c:
@@ -309,6 +7507,136 @@
 	  Output caps being got from video info is not getting freed
 	  https://bugzilla.gnome.org/show_bug.cgi?id=757929
 
+2015-11-10 17:58:58 +1100  Matthew Waters <matthew@centricular.com>
+
+	* gst/mpegtsdemux/tsdemux.c:
+	  tsdemux: provide our own definition of log2()
+	  The log2 function/macro doesn't exist when targetting android API < 18 (or MSVC
+	  < 2013) whereas our current baseline is API 9.
+
+2015-11-10 13:52:30 +1100  Matthew Waters <matthew@centricular.com>
+
+	* ext/gl/gstglimagesink.c:
+	* ext/gl/gstglimagesink.h:
+	* ext/gl/gstglstereomix.c:
+	* gst-libs/gst/gl/gstglviewconvert.c:
+	* gst-libs/gst/gl/gstglviewconvert.h:
+	  glviewconvert: remove set_format
+	  We need the caps to be able to
+	  1. check the caps features
+	  2. get the requested texture-target on input/output
+
+2015-11-11 10:31:07 +1100  Matthew Waters <matthew@centricular.com>
+
+	* ext/gl/gstglimagesink.c:
+	  glimagesink: fix a memory leak if the view conversion fails
+
+2015-11-11 13:37:59 +1100  Matthew Waters <matthew@centricular.com>
+
+	* ext/gl/gstglimagesink.c:
+	  glimagesink: balance the creation/destruction of the overlay compositor
+	  Fixes some leaks/possible segfault on when failing to create the compositor.
+
+2015-11-11 12:23:30 +1100  Matthew Waters <matthew@centricular.com>
+
+	* gst-libs/gst/gl/gstglshader.c:
+	* gst-libs/gst/gl/gstglutils.c:
+	  glshader: properly unref the stages on failure
+	  When failing in the varargs functions, all the stage objects not handled need to
+	  be unreffed to prevent a leak.
+
+2015-11-11 11:29:35 +1100  Matthew Waters <matthew@centricular.com>
+
+	* gst-libs/gst/gl/gstglslstage.c:
+	  glslstage: properly return an error when we could not create the shader stage
+	  While it was erroring out correctly later, there were GLib warnings about
+	  setting a GError over the top of another GError.
+
+2015-11-11 01:05:20 +1100  Matthew Waters <matthew@centricular.com>
+
+	* gst-libs/gst/gl/gstglshaderstrings.c:
+	  glshaderstrings: fixup the external-oes fragment shader
+	  The wrong sampler type was used
+	  s/sampler2DExternalOES/samplerExternalOES/
+
+2015-11-10 23:41:24 +1100  Matthew Waters <matthew@centricular.com>
+
+	* gst-libs/gst/gl/gstglcolorconvert.c:
+	  glcolorconvert: try to keep the same texture-target if possible
+	  Fixes issues attempting to passthrough external-oes textures
+
+2015-11-10 22:41:57 +1100  Matthew Waters <matthew@centricular.com>
+
+	* gst-libs/gst/gl/gstglcolorconvert.c:
+	  glcolorconvert: fix rendering rectangular textures with GL3
+	  Rectangular textures are unavailable in unextended
+	  GLES2 #version 100 shaders.
+	  Fixes
+	  texture-target=rectangle ! glcolorconvert ! texture-target=2D
+	  There's a couple of differences between GL3 and GLES2/GL
+	  - varying -> in or out depending on the stage (vertex/fragment)
+	  - attribute -> in
+	  - filtered texture access is a single function, texture()
+
+2015-11-10 20:20:29 +1100  Matthew Waters <matthew@centricular.com>
+
+	* gst-libs/gst/gl/gstglcolorconvert.c:
+	  glcolorconvert: properly use the other texture-target on fixation
+
+2015-11-10 20:15:56 +1100  Matthew Waters <matthew@centricular.com>
+
+	* gst-libs/gst/gl/gstglslstage.c:
+	  glslstage: add debug as to why _set_strings() failed
+
+2015-11-10 20:13:53 +1100  Matthew Waters <matthew@centricular.com>
+
+	* gst-libs/gst/gl/gstglsl.c:
+	  glsl: fix check for glsl version against GL context inversion
+	  Any GLSL version that was less than the provided GL version would fail
+
+2015-11-10 10:02:38 +0900  Vineeth TM <vineeth.tm@samsung.com>
+
+	* gst-libs/gst/adaptivedemux/gstadaptivedemux.c:
+	  adaptivedemux: Fix pad memory leak.
+	  The static pads got from queue and uri_handler are not being freed
+	  resulting in memory leaks.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=757859
+
+2015-11-10 13:13:50 +1100  Matthew Waters <matthew@centricular.com>
+
+	* gst-libs/gst/gl/Makefile.am:
+	* gst-libs/gst/gl/gl.h:
+	* gst-libs/gst/gl/gstgl_enums.h:
+	* gst-libs/gst/gl/gstglmemory.h:
+	  gl: forward declare some enums
+	  Specifically the GstGLTextureTarget enum
+
+2015-11-10 13:11:37 +1100  Matthew Waters <matthew@centricular.com>
+
+	* gst-libs/gst/gl/Makefile.am:
+	* gst-libs/gst/gl/gl.h:
+	* gst-libs/gst/gl/gstglshaderstrings.c:
+	* gst-libs/gst/gl/gstglshaderstrings.h:
+	* gst-libs/gst/gl/gstglslstage.c:
+	  glslstage: expose the default shader strings as public
+	  Add some other simple strings for external-oes textures or transforming
+	  the texture coordinates with a transformation matrix
+
+2015-11-06 03:05:31 +1100  Matthew Waters <matthew@centricular.com>
+
+	* gst-libs/gst/gl/gstglcolorconvert.c:
+	  glcolorconvert: wait on the sync meta for input buffers
+
+2015-11-05 00:13:01 +1100  Matthew Waters <matthew@centricular.com>
+
+	* ext/gl/gstglimagesink.c:
+	  glimagesink: wait on the provided sync meta provided to glimagesink
+
+2015-11-08 22:14:01 +1100  Matthew Waters <matthew@centricular.com>
+
+	* gst-libs/gst/gl/gstglcolorconvert.h:
+	  glcolorconvert: use the correct oes target string in the template caps
+
 2015-11-10 12:32:39 +1100  Matthew Waters <matthew@centricular.com>
 
 	* ext/gtk/gstgtkglsink.c:
@@ -318,13 +7646,26 @@
 	  will return EMPTY and therefore fail negotiation.
 	  https://bugzilla.gnome.org/show_bug.cgi?id=757854
 
-2015-11-06 16:16:32 +0100  Edward Hervey <edward@centricular.com>
+2015-11-10 14:21:33 +1100  Alessandro Decina <alessandro.d@gmail.com>
 
-	* gst/dvbsuboverlay/gstdvbsuboverlay.c:
-	  dvbsuboverlay: Don't send flush events
-	  It is up to the element handling the seek to send flush events
-	  downstream, otherwise we end up with a situation where upstream
-	  would get unexpected GST_FLOW_FLUSHING
+	* sys/applemedia/corevideotexturecache.m:
+	  applemedia: fix vtdec texture sharing on ios 9.1
+	  Use gst_gl_sized_gl_format_from_gl_format_type to get the format passed to
+	  CVOpenGLESTextureCacheCreateTextureFromImage. Before this change extracting the
+	  second texture from the pixel buffer was failing on ios 9.1.
+
+2015-11-06 17:24:52 -0300  Thiago Santos <thiagoss@osg.samsung.com>
+
+	* tests/check/elements/templatematch.c:
+	  templatematch: add a framerate to test caps
+	  The pad template requires a framerate, so use it to prevent
+	  caps negotiation failures.
+	  Fixes the unit test
+
+2015-11-06 20:38:56 +0000  Tim-Philipp Müller <tim@centricular.com>
+
+	* tests/check/elements/.gitignore:
+	  tests: update .gitignore for new test binaries
 
 2015-11-06 19:26:21 +0000  Tim-Philipp Müller <tim@centricular.com>
 
@@ -338,6 +7679,455 @@
 	  of GST_FLOW_FLUSHING when trying to forward sticky
 	  events at just the wrong moment.
 
+2015-11-06 16:16:32 +0100  Edward Hervey <edward@centricular.com>
+
+	* gst/dvbsuboverlay/gstdvbsuboverlay.c:
+	  dvbsuboverlay: Don't send flush events
+	  It is up to the element handling the seek to send flush events
+	  downstream, otherwise we end up with a situation where upstream
+	  would get unexpected GST_FLOW_FLUSHING
+
+2015-11-06 19:23:09 +0000  Tim-Philipp Müller <tim@centricular.com>
+
+	* ext/assrender/gstassrender.c:
+	* ext/curl/gstcurlftpsink.c:
+	* ext/dtls/gstdtlsdec.c:
+	* ext/smoothstreaming/gstmssmanifest.c:
+	* gst/geometrictransform/gstmirror.c:
+	* gst/onvif/gstrtponviftimestamp.c:
+	  Fix code indentation
+
+2015-10-22 13:40:36 +0200  Branko Subasic <branko@axis.com>
+
+	* gst/onvif/gstrtponviftimestamp.c:
+	* tests/check/elements/rtponviftimestamp.c:
+	  rtponviftimestamp: use stream time for timestamp
+	  The Onvif Streaming Specification specifies that the NTP timestamps
+	  in the Onvif extension header indicaes the absolute UTC time associated
+	  with the access unit. But by using running time we can not achieve that,
+	  since a frame's running time depends on the played interval, whether a
+	  non-flushing is done, etc. Instead we have to use the stream time.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=757688
+
+2015-11-06 09:44:57 +0100  Linus Svensson <linussn@axis.com>
+
+	* gst/onvif/gstrtponviftimestamp.c:
+	* gst/onvif/gstrtponviftimestamp.h:
+	* tests/check/elements/rtponviftimestamp.c:
+	  rtponviftimestamp: Update ntp-offset and d/e-bits with a GstEvent
+	  It is now possible to update the currently used ntp-offset with a
+	  custom serialized downstream event. The element will read the ntp-offset
+	  property when doing the state transition from READY to PAUSED and
+	  use that offset until it receives a "GstNtpOffset" event, which also
+	  has a "ntp-offset" attribute in that it's structure. In case the
+	  property is not set and no event has been received, the element will
+	  guess the npt-offset with help of the clock. If no clock can be
+	  retrieved, the element will error out and stop the data flow.
+	  The same event is also used for updating the D/E-bits in the RTP
+	  extension header. The discont flag in a buffer can be set whenver a
+	  live/network source looses a frame, but that is not the type of
+	  discontinuity that the onvif extension header should reflect. The
+	  header is mainly used for playback of a track concept, in which
+	  gaps can be present, and it's those kind of gaps that should be
+	  highlighted with the D- and E-bits.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=757688
+
+2015-11-06 09:44:16 +0100  Linus Svensson <linussn@axis.com>
+
+	* gst/onvif/gstrtponviftimestamp.c:
+	* gst/onvif/gstrtponviftimestamp.h:
+	* tests/check/elements/rtponviftimestamp.c:
+	  rtponviftimestamp: Do not rearange order of data
+	  If a buffer or a buffer list is cached, no events serialized with the
+	  data stream should get through. The cached buffers and events should
+	  be purged when we stop flushing.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=757688
+
+2015-10-13 14:21:47 +0200  Branko Subasic <branko@axis.com>
+
+	* tests/check/Makefile.am:
+	* tests/check/elements/rtponvif.c:
+	* tests/check/elements/rtponvifparse.c:
+	* tests/check/elements/rtponviftimestamp.c:
+	  rtponvif: split unit tests in several files
+	  Split the unit tests for rtponviftimestamp and rtponvifparse
+	  elements in separate files.
+	  Setup and cleanup the element and pads in fixures. Make the tests work
+	  with CK_FORK=no as well, by cleaning up the 'buffers' list when needed.
+	  Make unit tests work when run in valgrind by unreffing all buffers,
+	  and by not allocating any payload in RTP buffers. Since we're not
+	  doing anything with the payload part, but we're memcmp-aring the
+	  complete buffer memory, valgrind complained about non-initialized
+	  memory being used.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=757688
+
+2015-09-04 09:59:06 +0200  Philippe Normand <philn@igalia.com>
+
+	* gst-libs/gst/adaptivedemux/gstadaptivedemux.c:
+	* gst-libs/gst/adaptivedemux/gstadaptivedemux.h:
+	  adaptivedemux: improved bitrate estimations
+	  Bitrate estimation is now handled through a queue2 element added after
+	  the source element used to download fragments.
+	  Original hlsdemux patch by Duncan Palmer <dpalmer@digisoft.tv>
+	  https://bugzilla.gnome.org/show_bug.cgi?id=733959
+
+2015-11-06 12:59:51 +0000  Tim-Philipp Müller <tim@centricular.com>
+
+	* sys/dshowsrcwrapper/gstdshow.cpp:
+	  dshow: fix GList leak
+	  _remove_link() would not free the actual list nodes.
+
+2015-11-06 12:31:09 +0000  Tim-Philipp Müller <tim@centricular.com>
+
+	* gst-libs/gst/gl/gstglshader.c:
+	* gst/mpegtsdemux/mpegtsparse.c:
+	  glshader, tsdemux: simplify code
+	  Jus use _delete_link() instead of _remove_link() + _free1()
+
+2015-11-06 12:30:12 +0000  Tim-Philipp Müller <tim@centricular.com>
+
+	* ext/gl/gstglmixerbin.c:
+	  glmixerbin: fix minor leak
+	  Don't leak removed list node.
+
+2015-11-06 10:22:42 +0100  Thibault Saunier <tsaunier@gnome.org>
+
+	* ext/faac/gstfaac.c:
+	  faac: Initialize debug category soon enough
+	  Avoiding assertions
+
+2015-11-05 10:12:41 +0000  Julian Bouzas <julian.bouzas@vcatechnology.com>
+
+	* configure.ac:
+	  configure.ac: Added --with-hls-crypto=auto|nettle|libgcrypt|openssl option to build the source using the desired cryptographic library for HLS
+	  https://bugzilla.gnome.org/show_bug.cgi?id=755319
+
+2015-11-06 00:48:42 +0000  Tim-Philipp Müller <tim@centricular.com>
+
+	* ext/hls/m3u8.c:
+	  hls: m3u8: don't leak GList nodes when matching up variant lists after master list update
+
+2015-11-05 12:36:48 +0000  Luis de Bethencourt <luisbg@osg.samsung.com>
+
+	* gst-libs/gst/base/gstaggregator.c:
+	  aggregator: use GST_STIME_FORMAT for GstClockTimeDiff
+	  No need to manually handle negative value of deadline, GST_STIME_FORMAT does
+	  exactly this.
+
+2015-11-05 12:17:00 +0000  Luis de Bethencourt <luisbg@osg.samsung.com>
+
+	* ext/resindvd/resindvdsrc.c:
+	  resindvd: use GST_STIME_FORMAT for GstClockTimeDiff
+	  No need to use G_GINT64_FORMAT for potentially negative values of
+	  GstClockTimeDiff. Since 1.6 these can be handled with GST_STIME_FORMAT.
+	  Plus it creates more readable values in the logs.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=757480
+
+2015-11-05 12:11:19 +0100  Sebastian Dröge <sebastian@centricular.com>
+
+	* ext/opus/gstopusdec.c:
+	  opusdec: Update sink pad templates
+	  We always require the channel-mapping-field. If it's 0 we require nothing
+	  else, otherwise we need channels, stream-count and coupled count to be
+	  available.
+
+2015-11-03 19:09:33 -0800  Stefan Sauer <ensonic@users.sf.net>
+
+	* gst-libs/gst/base/gstaggregator.c:
+	  aggregator: don't compare templ instance pointers
+	  One can pass the PadTemplate from the element_class or the one from the factory.
+	  While they have the same content, the addresses are different.
+
+2015-11-04 00:12:52 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+	* tests/check/elements/opus.c:
+	  opus: Remove invalid unit test
+	  Opus headers should never be in-band, so don't test for correct
+	  handling of that.
+
+2015-11-04 00:12:22 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+	* ext/opus/gstopusenc.c:
+	  opusenc: Create an empty taglist if there is none
+	  There always have to be 2 buffers in the streamheaders, even if
+	  the comment buffer is basically empty.
+
+2015-11-03 14:41:57 -0500  Olivier Crête <olivier.crete@collabora.com>
+
+	* gst-libs/gst/base/gstaggregator.c:
+	  aggregator: Set to running in a single place
+	  Only set to running when the thread is actually started.
+
+2015-11-03 14:37:26 -0500  Olivier Crête <olivier.crete@collabora.com>
+
+	* gst-libs/gst/base/gstaggregator.c:
+	  aggregator: Document more locking
+
+2015-11-03 19:53:00 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+	* gst/mpegtsdemux/tsdemux.c:
+	  tsdemux: Don't create an incomplete OpusHead but set all the other caps fields instead
+	  OpusHead is optional, the other fields are not.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=757152
+
+2015-11-03 19:51:03 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+	* gst/mpegtsdemux/tsdemux.c:
+	* gst/mpegtsmux/Makefile.am:
+	* gst/mpegtsmux/mpegtsmux.c:
+	  tsmux: Simplify Opus caps parsing by using codecutils helpers
+	  https://bugzilla.gnome.org/show_bug.cgi?id=757152
+
+2015-11-03 14:50:53 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+	* ext/opus/Makefile.am:
+	* ext/opus/gstopusdec.c:
+	* ext/opus/gstopusdec.h:
+	* ext/opus/gstopusenc.c:
+	* ext/opus/gstopusheader.c:
+	* ext/opus/gstopusheader.h:
+	* ext/opus/gstopusparse.c:
+	* ext/opus/gstopusparse.h:
+	* ext/opus/gstrtpopusdepay.c:
+	* ext/opus/gstrtpopuspay.c:
+	  opus: Add proper support for multichannel audio
+	  https://bugzilla.gnome.org/show_bug.cgi?id=757152
+
+2015-11-03 11:41:07 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+	* ext/opus/gstopusparse.c:
+	* ext/opus/gstopusparse.h:
+	  opusparse: Fix up pre-skip in OpusHead if upstream using GstAudioClippingMeta
+	  Makes transmuxing from e.g. MPEG-TS to Ogg sample accurate.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=757153
+
+2015-11-02 18:02:55 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+	* gst/mpegtsdemux/Makefile.am:
+	* gst/mpegtsdemux/tsdemux.c:
+	* gst/mpegtsmux/Makefile.am:
+	* gst/mpegtsmux/mpegtsmux_opus.c:
+	  tsdemux/mux: Add support for GstAudioClippingMeta for Opus
+	  https://bugzilla.gnome.org/show_bug.cgi?id=757153
+
+2015-11-02 17:33:53 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+	* ext/opus/gstopusdec.c:
+	  opusdec: Handle GstAudioClippingMeta instead of the pre-skip field in the OpusHead
+	  oggdemux is outputting the meta now, and only outputs if it should really
+	  apply to the current buffer. Previously we would skip N samples also if we
+	  started the decoder in the middle of the stream.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=757153
+
+2015-11-02 16:52:28 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+	* ext/opus/gstopusenc.c:
+	  opusenc: Add GstAudioClippingMeta to buffers that need to be clipped
+	  https://bugzilla.gnome.org/show_bug.cgi?id=757153
+
+2015-11-02 10:30:52 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+	* ext/opus/gstopusenc.c:
+	  opusenc: Disable granule position calculations by the base class
+	  It is doing the wrong thing because of the Opus pre-skip: while the timestamps
+	  are shifted by the pre-skip, the granule positions are not shifted.
+	  oggmux is doing the right thing here already.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=757153
+
+2015-10-31 15:02:50 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+	* ext/opus/gstopusenc.c:
+	  opusenc: Add some FIXME comments about calculating padding with LPC
+	  https://bugzilla.gnome.org/show_bug.cgi?id=757153
+
+2015-10-30 20:57:37 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+	* ext/opus/gstopusenc.c:
+	* ext/opus/gstopusenc.h:
+	  opusenc: Encode exactly the amount of samples we got as input and put correct timestamps on it
+	  The first frame has lookahead less samples, the last frame might have some
+	  padding or we might have to encode another frame of silence to get all our
+	  input into the encoded data.
+	  This is because of a) the lookahead at the beginning of the encoding, which
+	  shifts all data by that amount of samples and b) the padding needed to fill
+	  the very last frame completely.
+	  Ideally we would use LPC to calculate something better than silence for the
+	  padding to make the encoding as smooth as possible.
+	  With this we get exactly the same amount of samples again in an
+	  opusenc ! opusdec pipeline.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=757153
+
+2015-10-30 20:47:20 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+	* ext/opus/gstopusenc.c:
+	* ext/opus/gstopusheader.c:
+	* ext/opus/gstopusheader.h:
+	* ext/opus/gstopusparse.c:
+	  opusenc: Put lookahead/pre-skip into the OpusHead header
+	  https://bugzilla.gnome.org/show_bug.cgi?id=757153
+
+2015-10-25 17:27:39 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+	* gst/mpegtsmux/Makefile.am:
+	* gst/mpegtsmux/mpegtsmux.c:
+	* gst/mpegtsmux/mpegtsmux_opus.c:
+	* gst/mpegtsmux/mpegtsmux_opus.h:
+	* gst/mpegtsmux/tsmux/tsmuxstream.c:
+	* gst/mpegtsmux/tsmux/tsmuxstream.h:
+	  tsmux: Add support for Opus
+	  https://bugzilla.gnome.org/show_bug.cgi?id=757049
+
+2015-10-24 14:27:43 +0300  Sebastian Dröge <sebastian@centricular.com>
+
+	* gst/mpegtsdemux/Makefile.am:
+	* gst/mpegtsdemux/gstmpegdesc.h:
+	* gst/mpegtsdemux/tsdemux.c:
+	  tsdemux: Add support for Opus
+	  Code partially based on
+	  https://git.videolan.org/?p=ffmpeg.git;a=commit;h=74141f693ded2fbf75af56fff309d2db35183635
+	  and based on the spec draft at
+	  https://wiki.xiph.org/OpusTS
+	  Makes it possible to demux
+	  http://www.obe.tv/Downloads/opus.ts
+	  https://bugzilla.gnome.org/show_bug.cgi?id=757049
+
+2015-10-25 19:31:51 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+	* gst/mpegtsmux/mpegtsmux.c:
+	  tsmux: Don't leak buffer in error cases
+	  https://bugzilla.gnome.org/show_bug.cgi?id=757049
+
+2015-10-25 19:29:53 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+	* gst/mpegtsmux/mpegtsmux.c:
+	  tsmux: Call prepare function for each collected buffer
+	  Not when clipping buffers, as that doesn't happen for every buffer.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=757049
+
+2015-10-25 18:09:24 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+	* gst-libs/gst/mpegts/gstmpegtsdescriptor.c:
+	* gst-libs/gst/mpegts/gstmpegtsdescriptor.h:
+	  mpegtsdescriptor: Add API for creating extended descriptors and fix writing them
+	  https://bugzilla.gnome.org/show_bug.cgi?id=757049
+
+2015-11-02 21:16:15 -0800  Stefan Sauer <ensonic@users.sf.net>
+
+	* ext/opencv/gsthanddetect.cpp:
+	  opencv: cast paramspec flags to fix the build for c++
+	  All the other elements in this plugin do this already.
+
+2015-11-03 15:05:20 +0000  Luis de Bethencourt <luisbg@osg.samsung.com>
+
+	* sys/dvb/gstdvbsrc.c:
+	  dvbsrc: use GST_STIME_ARGS for GstClockTimeDiff
+	  No need to use G_GINT64_FORMAT for potentially negative values of
+	  GstClockTimeDiff. Since 1.6 these can be handled with GST_STIME_ARGS.
+	  Plus it creates more readable values in the logs.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=757480
+
+2015-11-03 15:00:01 +0000  Luis de Bethencourt <luisbg@osg.samsung.com>
+
+	* sys/androidmedia/gstamcvideodec.c:
+	  amcvideodec: use GST_STIME_ARGS for GstClockTimeDiff
+	  No need to manually handle negative value of deadline, GST_STIME_ARGS does
+	  exactly this.
+
+2015-11-03 10:42:40 +0000  Hyunil Park <hyunil46.park@samsung.com>
+
+	* ext/wayland/gstwaylandsink.c:
+	  waylandsink: Add exception code for setting wl_surface
+	  Waylandsink needs exception code in gst_wayland_sink_set_window_handle().
+	  After making sink->window, User can call
+	  gst_wayland_sink_set_window_handle(). It is the user's fault, but
+	  Waylandsink needs to handle the exception, if not then sink->window is
+	  changed and rendering fails.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=747482
+
+2015-04-09 13:17:01 +0900  Hyunil Park <hyunil46.park@samsung.com>
+
+	* ext/wayland/gstwaylandsink.c:
+	  waylandsink: Add exception code for setting wl_display
+	  Waylandsink needs exception code in gst_wayland_sink_set_context(). After
+	  calling gst_wayland_sink_set_context(), below code is set.
+	  GST_ELEMENT_CLASS (parent_class)->set_context (element, context); but, If
+	  user can call onemore. It is user's fault. but waylandsink need to
+	  exception.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=747482
+
+2015-11-02 20:10:35 -0500  Olivier Crête <olivier.crete@collabora.com>
+
+	* gst-libs/gst/base/gstaggregator.c:
+	  aggregator: Hold object lock while manipulating the segment
+	  Make sure the object lock is held when aggregator->segment is
+	  modified.
+
+2015-11-02 19:40:28 -0500  Olivier Crête <olivier.crete@collabora.com>
+
+	* gst/audiomixer/gstaudioaggregator.c:
+	  audioaggregator: Improve log messages
+	  Make the level of log messages saner and improve some.
+
+2015-11-02 19:05:01 -0500  Olivier Crête <olivier.crete@collabora.com>
+
+	* gst-libs/gst/base/gstaggregator.c:
+	  aggregator: Remove dead code
+	  This code will never be called as max>=min in all cases. If the upstream
+	  latency query returned min>max, the function already returned and all
+	  values that are added to those have max>= min.
+
+2015-11-02 17:02:47 +0000  Luis de Bethencourt <luisbg@osg.samsung.com>
+
+	* gst/mpegtsmux/mpegtsmux.c:
+	  mpegtsmux: use GST_STIME_ARGS for GstClockTimeDiff
+	  No need to manually handle negative values of best->dts in
+	  GST_DEBUG_OBJECT. Use GST_STIME_ARGS for this.
+
+2015-11-02 16:58:57 +0000  Luis de Bethencourt <luisbg@osg.samsung.com>
+
+	* gst-libs/gst/video/gstvideoaggregator.c:
+	  videoaggregator: use GST_STIME_ARGS for GstClockTimeDiff
+	  No need to manually handle negative values of diff, GST_STIME_ARGS does
+	  exactly this.
+
+2015-11-02 11:17:29 +0000  Florin Apostol <florin.apostol@oregan.net>
+
+	* ext/dash/gstmpdparser.c:
+	  dashdemux: remove unreachable code
+	  The stream->cur_seg_template is set to the lowest available segment
+	  template (representation or adaptation or period, in this order).
+	  Because the template elements are inherited, the lowest template will
+	  have all the elements the parents had, so there is no need to check the
+	  parent for an element that is not found in the child (eg initialisation
+	  or index).
+	  https://bugzilla.gnome.org/show_bug.cgi?id=752714
+
+2015-11-02 10:48:11 +0000  Vincent Penquerc'h <vincent.penquerch@collabora.co.uk>
+
+	* tests/check/elements/dash_mpd.c:
+	  tests: add a test for MPD file duration parsing
+	  https://bugzilla.gnome.org/show_bug.cgi?id=752336
+
+2015-11-02 10:25:38 +0000  Vincent Penquerc'h <vincent.penquerch@collabora.co.uk>
+
+	* ext/dash/gstmpdparser.c:
+	  mpdparser: add some checks to duration parsing
+	  https://bugzilla.gnome.org/show_bug.cgi?id=752336
+
+2015-09-29 09:32:02 +0100  Florin Apostol <florin.apostol@oregan.net>
+
+	* ext/dash/gstmpdparser.c:
+	  dashdemux: added duration format validation
+	  https://bugzilla.gnome.org/show_bug.cgi?id=752336
+
+2015-11-02 11:21:14 +0000  Luis de Bethencourt <luisbg@osg.samsung.com>
+
+	* ext/dash/gstmpdparser.c:
+	  dashdemux: fix memory leak
+	  Free new_mpd, allocated with g_slice_new(), before going out of scope in
+	  goto error.
+	  CID 1338050
+
 2015-11-02 20:14:11 +1100  Alessandro Decina <alessandro.d@gmail.com>
 
 	* sys/applemedia/vtenc.c:
@@ -346,151 +8136,350 @@
 	  GstVideoEncoder assumes that the input buffer is available until _finish_frame.
 	  https://bugzilla.gnome.org/show_bug.cgi?id=756951
 
+2015-11-01 23:34:32 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+	* ext/opus/gstopusdec.c:
+	  opusdec: Assume 48kHz if no sample rate is given in the header
+
 2015-10-30 20:59:41 +0200  Sebastian Dröge <sebastian@centricular.com>
 
 	* ext/opus/gstopusenc.c:
 	  opusenc: Place 48kHz first in the caps
 	  For all the other sample rates the encoder will have to resample internally.
 
-2015-11-01 23:34:32 +0200  Sebastian Dröge <sebastian@centricular.com>
+2015-11-02 12:10:44 +1100  Alessandro Decina <alessandro.d@gmail.com>
 
-	* ext/opus/gstopusdec.c:
-	  opusdec: Assume 48kHz if no sample rate is given in the header
+	* gst-libs/gst/gl/gstglutils.c:
+	  gstglutils: fix shader compilation on Mountain Lion
+	  Make gst_gl_context_gen_shader/_compile_shader assume GST_GLSL_PROFILE_ES |
+	  GST_GLSL_PROFILE_COMPATIBILITY as the profile. Without this, the shader compiler
+	  doesn't inject the #version tag resulting in a compilation error on Mountain
+	  Lion.
+	  This is a workaround for old code using gst_gl_context_gen_shader. New code
+	  should use the gst_glsl_stage_* API directly which allows the caller to
+	  explicitly specify version/profile.
 
-=== release 1.6.1 ===
+2015-10-31 18:47:39 +0100  Philippe Renon <philippe_renon@yahoo.fr>
 
-2015-10-30 16:44:45 +0200  Sebastian Dröge <sebastian@centricular.com>
+	* sys/winks/gstksvideosrc.c:
+	  ksvideosrc: don't try to align current timestamp on previous timestamp
+	  this causes frames to be dropped.
+	  Based on a patch by Sebastian Dröge
+	  https://bugzilla.gnome.org/show_bug.cgi?id=748337
 
-	* ChangeLog:
-	* NEWS:
-	* RELEASE:
-	* configure.ac:
-	* docs/plugins/gst-plugins-bad-plugins.hierarchy:
-	* docs/plugins/inspect/plugin-accurip.xml:
-	* docs/plugins/inspect/plugin-adpcmdec.xml:
-	* docs/plugins/inspect/plugin-adpcmenc.xml:
-	* docs/plugins/inspect/plugin-aiff.xml:
-	* docs/plugins/inspect/plugin-asfmux.xml:
-	* docs/plugins/inspect/plugin-assrender.xml:
-	* docs/plugins/inspect/plugin-audiomixer.xml:
-	* docs/plugins/inspect/plugin-audiovisualizers.xml:
-	* docs/plugins/inspect/plugin-autoconvert.xml:
-	* docs/plugins/inspect/plugin-bayer.xml:
-	* docs/plugins/inspect/plugin-bz2.xml:
-	* docs/plugins/inspect/plugin-camerabin.xml:
-	* docs/plugins/inspect/plugin-chromaprint.xml:
-	* docs/plugins/inspect/plugin-coloreffects.xml:
-	* docs/plugins/inspect/plugin-curl.xml:
-	* docs/plugins/inspect/plugin-dataurisrc.xml:
-	* docs/plugins/inspect/plugin-debugutilsbad.xml:
-	* docs/plugins/inspect/plugin-dtsdec.xml:
-	* docs/plugins/inspect/plugin-dvb.xml:
-	* docs/plugins/inspect/plugin-dvbsuboverlay.xml:
-	* docs/plugins/inspect/plugin-dvdspu.xml:
-	* docs/plugins/inspect/plugin-faad.xml:
-	* docs/plugins/inspect/plugin-festival.xml:
-	* docs/plugins/inspect/plugin-fieldanalysis.xml:
-	* docs/plugins/inspect/plugin-flite.xml:
-	* docs/plugins/inspect/plugin-fragmented.xml:
-	* docs/plugins/inspect/plugin-frei0r.xml:
-	* docs/plugins/inspect/plugin-gaudieffects.xml:
-	* docs/plugins/inspect/plugin-gdp.xml:
-	* docs/plugins/inspect/plugin-geometrictransform.xml:
-	* docs/plugins/inspect/plugin-gmedec.xml:
-	* docs/plugins/inspect/plugin-gsm.xml:
-	* docs/plugins/inspect/plugin-gstsiren.xml:
-	* docs/plugins/inspect/plugin-id3tag.xml:
-	* docs/plugins/inspect/plugin-inter.xml:
-	* docs/plugins/inspect/plugin-interlace.xml:
-	* docs/plugins/inspect/plugin-jpegformat.xml:
-	* docs/plugins/inspect/plugin-liveadder.xml:
-	* docs/plugins/inspect/plugin-mimic.xml:
-	* docs/plugins/inspect/plugin-mms.xml:
-	* docs/plugins/inspect/plugin-modplug.xml:
-	* docs/plugins/inspect/plugin-mpeg2enc.xml:
-	* docs/plugins/inspect/plugin-mpegpsdemux.xml:
-	* docs/plugins/inspect/plugin-mpegpsmux.xml:
-	* docs/plugins/inspect/plugin-mpegtsdemux.xml:
-	* docs/plugins/inspect/plugin-mpegtsmux.xml:
-	* docs/plugins/inspect/plugin-mpg123.xml:
-	* docs/plugins/inspect/plugin-mplex.xml:
-	* docs/plugins/inspect/plugin-ofa.xml:
-	* docs/plugins/inspect/plugin-openal.xml:
-	* docs/plugins/inspect/plugin-opencv.xml:
-	* docs/plugins/inspect/plugin-opus.xml:
-	* docs/plugins/inspect/plugin-pcapparse.xml:
-	* docs/plugins/inspect/plugin-pnm.xml:
-	* docs/plugins/inspect/plugin-rawparse.xml:
-	* docs/plugins/inspect/plugin-removesilence.xml:
-	* docs/plugins/inspect/plugin-resindvd.xml:
-	* docs/plugins/inspect/plugin-rfbsrc.xml:
-	* docs/plugins/inspect/plugin-rtmp.xml:
-	* docs/plugins/inspect/plugin-schro.xml:
-	* docs/plugins/inspect/plugin-sdp.xml:
-	* docs/plugins/inspect/plugin-segmentclip.xml:
-	* docs/plugins/inspect/plugin-shm.xml:
-	* docs/plugins/inspect/plugin-smooth.xml:
-	* docs/plugins/inspect/plugin-soundtouch.xml:
-	* docs/plugins/inspect/plugin-spandsp.xml:
-	* docs/plugins/inspect/plugin-speed.xml:
-	* docs/plugins/inspect/plugin-subenc.xml:
-	* docs/plugins/inspect/plugin-videoparsersbad.xml:
-	* docs/plugins/inspect/plugin-voaacenc.xml:
-	* docs/plugins/inspect/plugin-voamrwbenc.xml:
-	* docs/plugins/inspect/plugin-waylandsink.xml:
-	* docs/plugins/inspect/plugin-y4mdec.xml:
-	* docs/plugins/inspect/plugin-zbar.xml:
-	* gst-plugins-bad.doap:
-	* win32/common/config.h:
-	  Release 1.6.1
+2015-10-31 23:28:20 +1100  Matthew Waters <matthew@centricular.com>
 
-2015-10-30 16:29:57 +0200  Sebastian Dröge <sebastian@centricular.com>
+	* gst-libs/gst/gl/gstglbufferpool.c:
+	  glbufferpool: explicitly initialize a possibly uninitialized variable
+	  The ret variable may be uninitialized and so its contents were undefined and
+	  the results were erratic (failing with glvideomixer, succeeding in other cases)
+	  P.S. No idea why gcc/clang et al never picked up on this like they normally do
+	  (probably due to some optimisation pass figuring out it's only set once...)
 
-	* po/af.po:
-	* po/az.po:
-	* po/bg.po:
-	* po/ca.po:
-	* po/da.po:
-	* po/el.po:
-	* po/en_GB.po:
-	* po/eo.po:
-	* po/es.po:
-	* po/eu.po:
-	* po/fi.po:
-	* po/fr.po:
-	* po/gl.po:
-	* po/hr.po:
-	* po/hu.po:
-	* po/id.po:
-	* po/it.po:
-	* po/ja.po:
-	* po/ky.po:
-	* po/lt.po:
-	* po/lv.po:
-	* po/mt.po:
-	* po/nb.po:
-	* po/or.po:
-	* po/pt_BR.po:
-	* po/ro.po:
-	* po/sk.po:
-	* po/sl.po:
-	* po/sq.po:
-	* po/sr.po:
-	* po/sv.po:
-	* po/tr.po:
-	  Update .po files
+2015-10-29 11:38:35 +0000  Vincent Penquerc'h <vincent.penquerch@collabora.co.uk>
 
-2015-10-30 14:30:17 +0200  Sebastian Dröge <sebastian@centricular.com>
+	* ext/dash/gstmpdparser.c:
+	* ext/dash/gstmpdparser.h:
+	* tests/check/elements/dash_mpd.c:
+	  mpdparser: make durations unsigned where appropriate
+	  The standard does not seem to make any particular explicit not
+	  implicit reference to the signedness of durations, and the code
+	  does not rely on such, nor on the negativity of the -1 value
+	  that's used as a placeholder when a duration property is not
+	  present in the XML.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=750847
 
-	* po/cs.po:
-	* po/de.po:
-	* po/nl.po:
-	* po/pl.po:
-	* po/ru.po:
-	* po/uk.po:
-	* po/vi.po:
-	* po/zh_CN.po:
-	  po: Update translations
+2015-10-30 15:55:19 +0000  Florin Apostol <florin.apostol@oregan.net>
+
+	* ext/dash/gstmpdparser.c:
+	* tests/check/elements/dash_mpd.c:
+	  dashdemux: inherit bitstreamSwitching from Period to AdaptationSet
+	  https://bugzilla.gnome.org/show_bug.cgi?id=752340
+
+2015-08-20 18:14:36 +0100  Florin Apostol <florin.apostol@oregan.net>
+
+	* ext/dash/gstdashdemux.c:
+	  dashdemux: marked PROP_BANDWIDTH_USAGE property as deprecated
+	  https://bugzilla.gnome.org/show_bug.cgi?id=753890
+
+2015-10-30 15:02:35 +0000  Florin Apostol <florin.apostol@oregan.net>
+
+	* tests/check/elements/dash_mpd.c:
+	  dashdemux: unit testing reproducing inherited segment duration overflow
+	  unit test reproducing https://bugzilla.gnome.org/show_bug.cgi?id=751832
+
+2015-10-30 14:31:21 +0000  Florin Apostol <florin.apostol@oregan.net>
+
+	* ext/dash/gstmpdparser.c:
+	* tests/check/elements/dash_mpd.c:
+	  dashdemux: inherited segment URLs are ignored if they are defined again in a lower SegmentList
+	  According to the standard:
+	  "SegmentBase, SegmentTemplate and SegmentList shall inherit
+	  attributes and elements from the same element on a higher level.
+	  If the same attribute or element is present on both levels,
+	  the one on the lower level shall take precedence over the one
+	  on the higher level."
+	  gst_mpdparser_parse_segment_list_node will now discard any inherited
+	  segment URLs if the parsed element defines some too.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=751832
+
+2015-10-20 17:21:00 +0100  Florin Apostol <florin.apostol@oregan.net>
+
+	* tests/check/elements/dash_demux.c:
+	* tests/check/elements/fake_http_src.c:
+	* tests/check/elements/fake_http_src.h:
+	  adaptivedemux: tests: added test for fragment download error
+	  https://bugzilla.gnome.org/show_bug.cgi?id=757361
+
+2015-10-20 15:46:36 +0100  Florin Apostol <florin.apostol@oregan.net>
+
+	* tests/check/elements/dash_demux.c:
+	  adaptivedemux: tests: made adaptive demux test thread safe
+	  https://bugzilla.gnome.org/show_bug.cgi?id=757361
+
+2015-10-16 16:20:34 +0100  Florin Apostol <florin.apostol@oregan.net>
+
+	* tests/check/elements/dash_demux.c:
+	  adaptivedemux: tests: added query test
+	  Testing if adaptive demux responds to queries.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=757361
+
+2015-10-28 11:21:14 +0000  Florin Apostol <florin.apostol@oregan.net>
+
+	* tests/check/elements/dash_mpd.c:
+	  dashdemux: tests: added test for multiple BaseURL entries
+	  https://bugzilla.gnome.org/show_bug.cgi?id=757245
+
+2015-09-16 10:40:33 +0100  Florin Apostol <florin.apostol@oregan.net>
+
+	* tests/check/elements/dash_mpd.c:
+	  dashdemux: tests: added unit test for 6d1eda9391d3143b5fc633edfd94b89dbba209ab
+	  Commit 6d1eda9391d3143b5fc633edfd94b89dbba209ab fixed the period start
+	  time scaling. This patch updates the unit tests to cover that scenario.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=755105
+
+2015-10-16 17:10:11 +0100  Florin Apostol <florin.apostol@oregan.net>
+
+	* tests/check/elements/dash_demux.c:
+	  adaptivedemux: tests: added download error test
+	  Tests adaptive demux behaviour when the uri is wrong and download does
+	  not happen.
+
+2015-10-30 12:49:20 +0000  Florin Apostol <florin.apostol@oregan.net>
+
+	* gst-libs/gst/adaptivedemux/gstadaptivedemux.c:
+	  adaptivedemux: stop task on multiple download errors
+	  On multiple download errors, we stop the download task and change the src
+	  element state to NULL.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=756240
+
+2015-10-30 12:24:22 +0000  Vincent Penquerc'h <vincent.penquerch@collabora.co.uk>
+
+	* gst-libs/gst/adaptivedemux/gstadaptivedemux.c:
+	  adaptivedemux: fix a missing lock in write to stream->last_ret
+	  https://bugzilla.gnome.org/show_bug.cgi?id=757359
+
+2015-10-07 23:20:51 +0100  Florin Apostol <florin.apostol@oregan.net>
+
+	* gst-libs/gst/adaptivedemux/gstadaptivedemux.c:
+	  adaptivedemux: return error if src element cannot start
+	  https://bugzilla.gnome.org/show_bug.cgi?id=756209
+
+2015-10-08 11:45:25 +0100  Florin Apostol <florin.apostol@oregan.net>
+
+	* gst-libs/gst/adaptivedemux/gstadaptivedemux.c:
+	  adaptivedemux: fixed waiting for fragment updates
+	  https://bugzilla.gnome.org/show_bug.cgi?id=756237
+
+2015-10-08 12:35:44 +0100  Florin Apostol <florin.apostol@oregan.net>
+
+	* gst-libs/gst/adaptivedemux/gstadaptivedemux.c:
+	  adaptivedemux: fix header redownload in case of errors
+	  https://bugzilla.gnome.org/show_bug.cgi?id=756239
+
+2015-10-30 00:04:12 +0000  Florin Apostol <florin.apostol@oregan.net>
+
+	* gst-libs/gst/adaptivedemux/gstadaptivedemux.c:
+	  adaptivedemux: release manifest lock before sending flush stop event
+	  https://bugzilla.gnome.org/show_bug.cgi?id=757337
+
+2015-10-29 23:41:46 +0000  Florin Apostol <florin.apostol@oregan.net>
+
+	* gst-libs/gst/adaptivedemux/gstadaptivedemux.c:
+	  adaptivedemux: reset download_finished before starting the src element
+	  https://bugzilla.gnome.org/show_bug.cgi?id=757336
+
+2015-10-29 23:23:05 +0000  Florin Apostol <florin.apostol@oregan.net>
+
+	* gst-libs/gst/adaptivedemux/gstadaptivedemux.c:
+	  adaptivedemux: release manifest lock before changing element state
+	  https://bugzilla.gnome.org/show_bug.cgi?id=757335
+
+2015-10-30 16:38:17 +1100  Matthew Waters <matthew@centricular.com>
+
+	* sys/applemedia/corevideotexturecache.m:
+	  vtdec: fix compilation error
+	  Undefined symbols for architecture x86_64:
+	  "__gl_target_to_gst", referenced from:
+	  __do_get_gl_buffer in libgstapplemedia_la-corevideotexturecache.o
+
+2015-10-30 15:00:23 +1100  Matthew Waters <matthew@centricular.com>
+
+	* tests/check/libs/gstglcolorconvert.c:
+	* tests/check/libs/gstglmemory.c:
+	* tests/check/libs/gstglupload.c:
+	  gl/tests: update for glmemory api changes
+
+2015-10-30 14:43:23 +1100  Matthew Waters <matthew@centricular.com>
+
+	* ext/gl/gstglcolorconvertelement.c:
+	  glcolorconvert: remove unused ret variable
+
+2015-10-30 14:40:35 +1100  Matthew Waters <matthew@centricular.com>
+
+	* gst-libs/gst/gl/gstglslstage.h:
+	  glslstage: remove typedefs from the header
+	  They are already defined in the forward decleration header and defining them
+	  more than once will give an error with OSX's clang about typedef redefinition
+	  being a C11 feature.
+
+2015-10-30 14:38:05 +1100  Matthew Waters <matthew@centricular.com>
+
+	* gst-libs/gst/gl/gstglcolorconvert.c:
+	  glcolorconvert: follow the correct texture target names
+
+2015-10-30 01:42:42 +1100  Matthew Waters <matthew@centricular.com>
+
+	* gst-libs/gst/gl/gstglupload.c:
+	  glupload: explicitly configure the texture target on the gl buffer pool
+	  If we don't, then the pool could end up allocating 2D textures when the
+	  caps explictly state they should be rectangle textures.
+
+2015-10-30 01:27:36 +1100  Matthew Waters <matthew@centricular.com>
+
+	* gst-libs/gst/gl/gstglbufferpool.c:
+	* gst-libs/gst/gl/gstglmemory.c:
+	* gst-libs/gst/gl/gstglmemory.h:
+	  glbufferpool: add bufferpool options for the various texture targets
+	  This was chosen over relying solely on the caps as glupload needs to propose an
+	  allocation and set the texture target based on the output caps.  Setting the
+	  caps in the config is currently pointless as they are overwritten in a lot of
+	  element's decide_allocation functions.
+	  This provides a mechanism for the buffer pool to be configured for a certain
+	  texture target when none has been configured.
+
+2015-10-29 13:04:31 +1100  Matthew Waters <matthew@centricular.com>
+
+	* ext/gl/gstglcolorconvertelement.c:
+	* gst-libs/gst/gl/gstglcolorconvert.c:
+	* gst-libs/gst/gl/gstglcolorconvert.h:
+	* sys/applemedia/corevideotexturecache.h:
+	* sys/applemedia/corevideotexturecache.m:
+	* sys/applemedia/vtdec.c:
+	  glcolorconvert: add support for converting texture targets
+	  Solved with a simple shader templating mechanism and string replacements
+	  of the necessary sampler types/texture accesses and texture coordinate
+	  mangling for rectangular and external-oes textures.
+
+2015-10-29 00:44:26 +1100  Matthew Waters <matthew@centricular.com>
+
+	* ext/gl/caopengllayersink.m:
+	* ext/gl/gstglcolorconvertelement.c:
+	* ext/gl/gstglimagesink.c:
+	* ext/gl/gstgloverlay.c:
+	* ext/gl/gstglstereomix.c:
+	* ext/gl/gstgltestsrc.c:
+	* gst-libs/gst/gl/gstglbufferpool.c:
+	* gst-libs/gst/gl/gstglcolorconvert.c:
+	* gst-libs/gst/gl/gstglcolorconvert.h:
+	* gst-libs/gst/gl/gstglfilter.c:
+	* gst-libs/gst/gl/gstglmemory.c:
+	* gst-libs/gst/gl/gstglmemory.h:
+	* gst-libs/gst/gl/gstgloverlaycompositor.c:
+	* gst-libs/gst/gl/gstglupload.c:
+	* gst-libs/gst/gl/gstgluploadmeta.c:
+	* gst-libs/gst/gl/gstglviewconvert.c:
+	* sys/applemedia/corevideotexturecache.m:
+	* tests/check/libs/gstglmemory.c:
+	  glmemory: add support for rectangle textures
+	  Add the various tokens/strings for the differnet texture types (2D, rect, oes)
+	  Changes the GLmemory api to include the GstGLTextureTarget in all relevant
+	  functions.
+	  Update the relevant caps/templates for 2D only textures.
+
+2015-10-30 01:45:13 +1100  Matthew Waters <matthew@centricular.com>
+
+	* gst-libs/gst/gl/gstglcolorconvert.h:
+	  glcolorconvert: order the caps template so that RGBA is first
+	  glcolorconvert ! glcolorconvert would sometimes negotiated RGB
+	  (the first list entry) otherwise.
+
+2015-10-30 01:16:02 +1100  Matthew Waters <matthew@centricular.com>
+
+	* gst-libs/gst/gl/gstgl_fwd.h:
+	* gst-libs/gst/gl/gstglbufferpool.h:
+	  glbufferpool: move typedef's into the forward decleration file
+	  Otherwise, for example, clang will warn about typedef redefinitions
+	  being a C11 feature.
+
+2015-10-16 18:36:20 +0100  Florin Apostol <florin.apostol@oregan.net>
+
+	* tests/check/elements/fake_http_src.c:
+	  tests: fixed fake soup http src plugin
+	  The soup http src changed the way it interprets the seek segment stop value.
+	  Previously it was inclusive, now it is not (see commit
+	  21c6da6764c0cd015e9f3c5eecba36e297187deb,
+	  bug https://bugzilla.gnome.org/show_bug.cgi?id=748316)
+	  Updated fake soup http src to also consider segment stop not inclusive.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=756322
+
+2015-10-09 14:10:52 +0100  Florin Apostol <florin.apostol@oregan.net>
+
+	* tests/check/Makefile.am:
+	* tests/check/elements/dash_demux.c:
+	  adaptivedemux: tests: added unit test for adaptivedemux
+	  Created a unit test for dashdemux. It relies on a fake SOUP HTTP src plugin
+	  that will feed data to dashdemux. The test controls the data to be
+	  generated and checks the correct data was received for each expected
+	  stream.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=756322
+
+2015-10-09 21:23:20 +0100  Alex Ashley <bugzilla@ashley-family.net>
+
+	* tests/check/elements/fake_http_src.c:
+	* tests/check/elements/fake_http_src.h:
+	  tests: added fake http src plugin
+	  Added a fake http src plugin capable of generating data buffers for a
+	  request of a http url. Can be used in tests to simulate http accesses.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=756322
+
+2015-07-07 15:38:08 +0100  Alex Ashley <bugzilla@ashley-family.net>
+
+	* ext/dash/gstdashdemux.c:
+	* ext/dash/gstdashdemux.h:
+	* ext/dash/gstmpdparser.c:
+	* ext/dash/gstmpdparser.h:
+	* tests/check/elements/dash_mpd.c:
+	  dashdemux: provide a default suggestedPresentationDelay
+	  If MPD@suggestedPresentationDelay is not present in the manifest,
+	  dashdemux selects the fragment closest to the most recently generated
+	  fragment. This causes a playback issue because this choice does not allow
+	  the DASH client to build up any buffer of downloaded fragments without
+	  pausing playback. This is because by definition new fragments appear on
+	  the server in real-time (e.g. if segment duration is 4 seconds, a new
+	  fragment will appear on the server every 4 seconds). If the starting
+	  playback position was n*segmentDuration seconds behind "now", the DASH
+	  client could download up to 'n' fragments faster than realtime before it
+	  reached the point where it needed to wait for fragments to appear on the
+	  server.
+	  The MPD@suggestedPresentationDelay attribute allows a content publisher
+	  to provide a suggested starting position that is behind the current
+	  "live" position.
+	  If the MPD@suggestedPresentationDelay attribute is not present, provide
+	  a suitable default value as a property of the dashdemux element. To
+	  allow the default presentation delay to be specified either using
+	  fragments or seconds, the property is a string that contains a number
+	  and a unit (e.g. "10 seconds", "4 fragments", "2500ms").
 
 2015-10-29 15:02:38 +0200  Sreerenj Balachandran <sreerenj.balachandran@intel.com>
 
@@ -500,6 +8489,196 @@
 	  Differentiate the vp8/vp9 bitstream based on fourcc.
 	  https://bugzilla.gnome.org/show_bug.cgi?id=757251
 
+2015-09-09 14:09:43 +0100  Florin Apostol <florin.apostol@oregan.net>
+
+	* ext/dash/gstdashdemux.c:
+	  dashdemux: improve detection of stream language
+	  Improved the detection of stream's language if the AdaptationSet
+	  contains more than 1 ContentComponent
+	  https://bugzilla.gnome.org/show_bug.cgi?id=752367
+
+2015-10-29 12:04:31 +0000  Vincent Penquerc'h <vincent.penquerch@collabora.co.uk>
+
+	* ext/dash/gstmpdparser.c:
+	* tests/check/elements/dash_mpd.c:
+	  dash_mpd: restrict segment template format strings to %0[0-9]*d as per spec
+	  https://bugzilla.gnome.org/show_bug.cgi?id=751735
+
+2015-09-09 12:36:10 +0100  Florin Apostol <florin.apostol@oregan.net>
+
+	* ext/dash/gstmpdparser.c:
+	* tests/check/elements/dash_mpd.c:
+	  dashdemux: segment template parsing: added support for %d
+	  Added support for %d in template identifier.
+	  Added testcases for %d, %3d, %0-4d identifier formats.
+
+2015-10-29 11:54:34 +0000  Florin Apostol <florin.apostol@oregan.net>
+
+	* ext/dash/gstmpdparser.c:
+	* tests/check/elements/dash_mpd.c:
+	  dashdemux: corrected parsing of segment templates
+	  Corrected the parsing of a segment template string.
+	  Added unit tests to test the segment template parsing.
+	  All reported problems are now correctly handled.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=751735
+
+2015-10-29 11:17:48 +0000  Florin Apostol <florin.apostol@oregan.net>
+
+	* gst-libs/gst/adaptivedemux/gstadaptivedemux.c:
+	  dahsdemux: task is signaled to stop without stop condition being set
+	  The gst_adaptive_demux_stream_free function is trying to stop the stream's
+	  download task. For this, it signals the task. But it fails to also set the
+	  stream->download_finished = TRUE, so the task will go back to sleep and
+	  only exit when the download is finished.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=755121
+
+2015-10-28 17:02:51 +0000  Florin Apostol <florin.apostol@oregan.net>
+
+	* ext/dash/gstmpdparser.c:
+	* tests/check/elements/dash_mpd.c:
+	  dashdemux: fixed crash when segment timeline list is greater than segment url list
+	  When building the media segment list using a SegmentList node, the
+	  gst_mpd_client_setup_representation function will iterate through the
+	  list of S nodes and will expect to find a matching SegmentUrl node. If
+	  one does not exist, the code made an illegal memory access.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=752496
+
+2015-09-11 10:59:15 +0100  Florin Apostol <florin.apostol@oregan.net>
+
+	* tests/check/elements/dash_mpd.c:
+	  dashdemux: unit test for missing profiles
+
+2015-09-11 10:57:26 +0100  Vincent Penquerc'h <vincent.penquerch@collabora.co.uk>
+
+	* ext/dash/gstmpdparser.c:
+	  mpdparser: do not dereference profiles is absent
+	  These are used to apply restrictions on what the MPD file may
+	  use, so no profile means no restrictions.
+	  Besides, nothing actually uses the profiles (yet) anyway.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=750869
+
+2015-09-16 16:46:29 +0100  Florin Apostol <florin.apostol@oregan.net>
+
+	* ext/hls/gsthlsdemux.c:
+	* gst-libs/gst/adaptivedemux/gstadaptivedemux.c:
+	* gst-libs/gst/adaptivedemux/gstadaptivedemux.h:
+	  adaptivedemux: fixed multithread support
+	  https://bugzilla.gnome.org/show_bug.cgi?id=755169
+
+2015-10-28 16:31:39 +0000  Florin Apostol <florin.apostol@oregan.net>
+
+	* ext/dash/gstmpdparser.c:
+	* tests/check/elements/dash_mpd.c:
+	  dashdemux: parser rejects negative values for mediaPresentationDuration
+	  https://bugzilla.gnome.org/show_bug.cgi?id=752326
+
+2015-10-28 16:24:01 +0000  Florin Apostol <florin.apostol@oregan.net>
+
+	* ext/dash/gstmpdparser.c:
+	* tests/check/elements/dash_mpd.c:
+	  dashdemux: corrected parsing of negative values into unsigned data
+	  https://bugzilla.gnome.org/show_bug.cgi?id=752429
+
+2015-09-17 20:18:52 +0200  Víctor Manuel Jáquez Leal <vjaquez@igalia.com>
+
+	* gst-libs/gst/codecparsers/gsth264parser.c:
+	  codecparser: h264: initialize parsing structures
+	  Initialize to 0 these parse structures before filling them: GstH264SEIMessage,
+	  GstH264NalUnit, GstH264PPS, GstH264SPS and GstH264SliceHdr.
+	  When calling the functions which fill those structures, they may fail, leaving
+	  unitialized those structures. This situation may lead to future problems, such
+	  as a segmentation fault when freeing, for example.
+	  This patch initializes to zero these structures, before filling them.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=755161
+
+2015-09-18 10:09:26 +0200  Víctor Manuel Jáquez Leal <vjaquez@igalia.com>
+
+	* gst-libs/gst/codecparsers/gsth265parser.c:
+	  codecparser: h265: initialize parsing structures
+	  Initialize to 0 these parse structures before filling them: GstH265SEIMessage,
+	  GstH265NalUnit, GstH265VPS, GstH265PPS, GstH265SPS and GstH265SliceHdr.
+	  When calling the functions which fill those structures, they may fail, leaving
+	  unitialized those structures. This situation may lead to future problems, such
+	  as a segmentation fault when freeing, for example.
+	  This patch initializes to zero these structures, before filling them.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=755161
+
+2015-10-26 19:58:04 -0400  Olivier Crête <olivier.crete@collabora.com>
+
+	* gst/audiomixer/gstaudiomixer.c:
+	  liveadder: Make latency property be a uint in millisecs
+	  This restores roughly the same behaviour as the old liveadder element.
+	  Except that the latency now also includes the output-buffer-duration.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=757050
+
+2015-09-08 14:00:54 +0100  Vincent Penquerc'h <vincent.penquerch@collabora.co.uk>
+
+	* ext/dash/gstmpdparser.c:
+	  mpdparser: forbid negative values for duration
+	  https://bugzilla.gnome.org/show_bug.cgi?id=752492
+
+2015-10-28 15:39:07 +0000  Florin Apostol <florin.apostol@oregan.net>
+
+	* ext/dash/gstmpdparser.c:
+	* tests/check/elements/dash_mpd.c:
+	  dashdemux: parser rejects XMLs with negative period duration
+	  https://bugzilla.gnome.org/show_bug.cgi?id=752329
+
+2015-10-28 15:34:29 +0000  Vincent Penquerc'h <vincent.penquerch@collabora.co.uk>
+
+	* ext/dash/gstmpdparser.c:
+	* tests/check/elements/dash_mpd.c:
+	  mpdparser: check segment lists have either duration or timeline
+	  And add error checking along the way.
+	  Add duration where appropriate so unit tests still pass.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=751650
+
+2015-09-29 16:17:03 +0100  Vincent Penquerc'h <vincent.penquerch@collabora.co.uk>
+
+	* ext/dash/gstmpdparser.c:
+	* tests/check/elements/dash_mpd.c:
+	  mpdparser: validate representation set identifier
+	  It must have no whitespace, and must comply with RFC 1738 when
+	  used to build a URL.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=750852
+
+2015-10-28 14:41:54 +0000  Julien Isorce <j.isorce@samsung.com>
+
+	* gst-libs/gst/gl/gstglslstage.c:
+	  glslstage: initialize output params to 0 before calling gl functions
+	  The client side API of the Chromium's GPU Process has asserts
+	  in debug mode that check that output params are initialized to 0.
+
+2015-10-27 16:32:48 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+	* gst/mxf/mxfmux.c:
+	  mxfmux: Remove some dead code that could never be called
+	  Coverity CIDs #1328818, #1328819, #1328820.
+
+2015-10-27 00:36:41 +1100  Matthew Waters <matthew@centricular.com>
+
+	* ext/gl/Makefile.am:
+	* ext/gl/gstopengl.c:
+	  opengl: build/provide glstereomix/split on gles only systems
+
+2015-10-26 16:51:06 +0100  George Kiagiadakis <george.kiagiadakis@collabora.com>
+
+	* gst/geometrictransform/geometricmath.c:
+	* gst/geometrictransform/geometricmath.h:
+	* gst/geometrictransform/gstbulge.c:
+	* gst/geometrictransform/gstcircle.c:
+	* gst/geometrictransform/gstgeometrictransform.c:
+	* gst/geometrictransform/gstkaleidoscope.c:
+	* gst/geometrictransform/gstmarble.c:
+	* gst/geometrictransform/gstmarble.h:
+	* gst/geometrictransform/gstsquare.c:
+	* gst/geometrictransform/gststretch.c:
+	  geometrictransform: rename gemetric math functions to have their symbols namespaced
+	  Otherwise those symbols can conflict with external libraries when
+	  linking everything statically for mobile targets.
+	  Use the gst_gm_ prefix, short for gst geometric math.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=756882
+
 2015-10-26 15:30:08 +0100  George Kiagiadakis <george.kiagiadakis@collabora.com>
 
 	* ext/wayland/gstwaylandsink.c:
@@ -516,6 +8695,28 @@
 	  It's probably better to avoid chasing hidden refcounts.
 	  https://bugzilla.gnome.org/show_bug.cgi?id=756567
 
+2015-10-26 18:26:18 +1100  Matthew Waters <matthew@centricular.com>
+
+	* gst-libs/gst/gl/gstglcolorconvert.c:
+	  glcolorconvert: allow outputting multiple textures for gles3 contexts
+	  the USING_GLES2 includes all GLES3 contexts as well which does support
+	  drawing to multiple buffers.  Instead make or decision solely based on
+	  whether glDrawBuffers is available or not.
+
+2015-10-26 17:36:21 +1100  Matthew Waters <matthew@centricular.com>
+
+	* ext/gl/gstopengl.c:
+	* gst-libs/gst/gl/gstglviewconvert.c:
+	  glviewconvert: expose the element on gles2 platforms
+	  We can do everything with gles3 however gles2 restricts us not allowing
+	  separated or frame-by-frame multiview modes due to multiple draw buffers.
+
+2015-10-25 01:19:33 +0100  Tim-Philipp Müller <tim@centricular.com>
+
+	* tests/check/elements/hlsdemux_m3u8.c:
+	  tests: hlsdemux_m3u: add test for master playlist with missing variant list uri
+	  https://bugzilla.gnome.org/show_bug.cgi?id=756861
+
 2015-10-20 09:13:04 +0100  André Draszik <git@andred.net>
 
 	* ext/hls/m3u8.c:
@@ -532,46 +8733,331 @@
 	  as needed.
 	  https://bugzilla.gnome.org/show_bug.cgi?id=756861
 
+2015-09-04 11:29:08 +0100  Tim-Philipp Müller <tim@centricular.com>
+
+	* ext/hls/gsthlsdemux.c:
+	  hlsdemux: change dispose function to finalize
+
+2015-08-30 21:35:02 +0100  Tim-Philipp Müller <tim@centricular.com>
+
+	* ext/hls/gsthlsdemux.c:
+	  hlsdemux: remove helper function only used once
+
+2015-08-30 17:41:23 +0100  Tim-Philipp Müller <tim@centricular.com>
+
+	* ext/hls/gsthlsdemux.c:
+	  hlsdemux: remove deprecated 'fragments-cache' property
+	  It's been non-functional for two cycles now, let's
+	  get rid of it.
+
+2015-09-02 16:40:17 +0100  Tim-Philipp Müller <tim@centricular.com>
+
+	* ext/hls/m3u8.c:
+	  hlsdemux: m3u8: move file lookup by sequence directly into code
+	  Nicer to read, two lines of code less, and also the callback
+	  function should've been a GCompareFunc that returns a gint
+	  and not a boolean (it did work correctly, was just confusing).
+
+2015-09-01 12:48:38 +0100  Tim-Philipp Müller <tim@centricular.com>
+
+	* ext/hls/m3u8.c:
+	* ext/hls/m3u8.h:
+	  hlsdemux: m3u8: clean-up: remove unused argument in function call
+
+2015-08-30 17:22:19 +0100  Tim-Philipp Müller <tim@centricular.com>
+
+	* ext/hls/m3u8.h:
+	  hlsdemux: m3u8: clean-up: reindent header for better readability
+	  And remove duplicate define.
+
+2015-10-23 18:58:41 +0300  Sebastian Dröge <sebastian@centricular.com>
+
+	* gst/mxf/mxfmux.c:
+	  mxfmux: Remove empty set/get_property()
+	  We can add them again if we ever add properties.
+
+2015-10-23 18:38:33 +0300  Sebastian Dröge <sebastian@centricular.com>
+
+	* gst/mxf/Makefile.am:
+	* gst/mxf/mxfmux.c:
+	* gst/mxf/mxfmux.h:
+	  mxfmux: Port to GstAggregator
+
+2015-10-22 19:20:24 +0300  Sebastian Dröge <sebastian@centricular.com>
+
+	* gst/mxf/mxfmux.c:
+	  mxfmux: Set GC essence element UL version to 0x01
+	  ffmpeg otherwise rejects it and the spec is not 100% clear about that.
+
 2015-10-20 17:09:22 +0200  Santiago Carot-Nemesio <sancane@gmail.com>
 
 	* ext/srtp/gstsrtp.c:
 	  srtp: Fix critical warning trying to retrieve SSRC from a non fb message
 	  https://bugzilla.gnome.org/show_bug.cgi?id=756876
 
-2015-10-16 00:23:56 +0200  Miguel París Díaz <mparisdiaz@gmail.com>
+2015-10-22 19:24:34 +0300  Sebastian Dröge <sebastian@centricular.com>
 
-	* ext/srtp/gstsrtpdec.c:
-	  srtpdec: skip padding when mapping RTP packets
-	  https://bugzilla.gnome.org/show_bug.cgi?id=756653
+	* gst/mxf/Makefile.am:
+	  mxf: Reorder CFLAGS and LIBS
 
-2015-10-14 10:31:23 +0300  Sebastian Dröge <sebastian@centricular.com>
+2015-10-23 15:42:24 +0300  Sebastian Dröge <sebastian@centricular.com>
 
-	* ext/dash/gstmpdparser.c:
-	  mpdparser: Set default last_byte_pos to -1
-	  The value is optional in the range, and if it is absent it means we should
-	  download until the end of stream. Not until position 0.
-	  https://bugzilla.gnome.org/show_bug.cgi?id=748316
+	* gst-libs/gst/base/gstaggregator.c:
+	* gst-libs/gst/base/gstaggregator.h:
+	  aggregator: Add create_new_pad() vfunc to allow subclasses to override the default behaviour
+	  Not all aggregator subclasses will have a single pad template called sink_%u
+	  and might do something special depending on what the application requests.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=757018
 
-2015-10-14 19:32:07 +0300  Sebastian Dröge <sebastian@centricular.com>
+2015-10-21 19:00:41 +0300  Sebastian Dröge <sebastian@centricular.com>
+
+	* gst/mxf/mxfmux.c:
+	  mxfmux: Set KAG size to 1
+	  We're not aligning our output in any way, and 0 is invalid.
+
+2015-10-21 18:58:06 +0300  Sebastian Dröge <sebastian@centricular.com>
+
+	* gst/mxf/mxfmux.c:
+	  mxfmux: Don't let the header partition's prev_partition point forward to the footer
+
+2015-10-21 18:32:09 +0300  Sebastian Dröge <sebastian@centricular.com>
+
+	* gst/mxf/mxftypes.c:
+	  mxftypes: Fix generation of operational pattern UL
+
+2015-10-21 18:31:43 +0300  Sebastian Dröge <sebastian@centricular.com>
+
+	* tests/examples/mxf/mxfdemux-structure.c:
+	  mxfdemux-structure: Sync fakesink state with the bin to make the application work at all
+
+2015-10-21 18:20:16 +0300  Sebastian Dröge <sebastian@centricular.com>
+
+	* gst/mxf/mxfmpeg.c:
+	  mxfmpeg: h264 is always byte-stream inside MXF
+
+2015-10-21 18:06:11 +0300  Sebastian Dröge <sebastian@centricular.com>
+
+	* tests/check/elements/mxfmux.c:
+	* tests/check/pipelines/mxf.c:
+	  mxf: Add unit tests for H264/PCM
+
+2015-10-21 17:47:00 +0300  Sebastian Dröge <sebastian@centricular.com>
+
+	* gst/mxf/mxfmux.c:
+	  mxfmux: Don't leak SEEK events when dropping them
+
+2015-10-21 17:21:09 +0300  Sebastian Dröge <sebastian@centricular.com>
+
+	* gst/mxf/mxfvc3.c:
+	  mxfvc3: The wrapping is the 15th byte of the essence container UL, not the 16th
+	  In other mappings it is the 16th though.
+
+2015-10-21 17:11:03 +0300  Sebastian Dröge <sebastian@centricular.com>
+
+	* gst/mxf/mxfdemux.c:
+	  mxfdemux: If seeking to the remaining parts of the file fails on EOS, consider the stream done
+	  Without this we would run this while loop forever, always seeking again for
+	  the same stream.
+
+2015-10-21 15:07:23 +0300  Sebastian Dröge <sebastian@centricular.com>
+
+	* tests/check/elements/mxfmux.c:
+	* tests/check/pipelines/mxf.c:
+	  mxf: Properly enable unit tests again
+
+2015-10-21 01:22:11 +0300  Sebastian Dröge <sebastian@centricular.com>
+
+	* gst/mxf/mxf.c:
+	  mxf: Re-enable mxfmux element
+
+2015-10-21 01:21:37 +0300  Sebastian Dröge <sebastian@centricular.com>
+
+	* gst/mxf/mxfjpeg2000.c:
+	  mxfjpeg2000: Fix caps
+	  There is no fields field anymore.
+
+2015-10-21 01:17:04 +0300  Sebastian Dröge <sebastian@centricular.com>
+
+	* gst/mxf/mxfmux.c:
+	  mxfmux: Don't fail SEGMENT events
+
+2015-10-21 01:02:46 +0300  Sebastian Dröge <sebastian@centricular.com>
+
+	* gst/mxf/mxfmux.c:
+	  mxfmux: Push stream-start and caps event before segment event
+	  And don't push the caps event during instance initialization already.
+
+2015-10-21 00:45:19 +0300  Sebastian Dröge <sebastian@centricular.com>
+
+	* gst/mxf/mxfaes-bwf.c:
+	  mxfaes-bwf: Format is unsigned if it's 1 byte per channel
+	  ... not 1 byte per block.
+
+2015-10-21 16:51:10 +0100  Luis de Bethencourt <luisbg@osg.samsung.com>
+
+	* ext/opencv/gsthanddetect.cpp:
+	  opencv: handdetect: no need to get a writable buffer
+	  No need to get a writable buffer inside cv_trans_func of opencv video
+	  filter. GstBaseTransform takes care of this.
+
+2015-10-21 14:35:11 +0100  Tim-Philipp Müller <tim@centricular.com>
+
+	* common:
+	  Automatic update of common submodule
+	  From b99800a to b319909
+
+2015-10-20 17:29:42 +0300  Sebastian Dröge <sebastian@centricular.com>
+
+	* configure.ac:
+	  Use new GST_ENABLE_EXTRA_CHECKS #define
+	  https://bugzilla.gnome.org/show_bug.cgi?id=756870
+
+2015-10-21 14:26:01 +0300  Sebastian Dröge <sebastian@centricular.com>
+
+	* README:
+	* common:
+	  Automatic update of common submodule
+	  From 9aed1d7 to b99800a
+
+2015-10-21 05:34:18 +1100  Matthew Waters <matthew@centricular.com>
+
+	* ext/gl/gstglfiltershader.c:
+	  glshaderelement: free the vertex and fragment strings on finalize
+	  Fixes a memory leak when using the vertex/fragment properties.
+
+2015-10-21 05:33:13 +1100  Matthew Waters <matthew@centricular.com>
 
 	* sys/androidmedia/gstamcvideodec.c:
-	  amcvideodec: Properly forward the return value of gst_video_decoder_negotiate()
-	  https://bugzilla.gnome.org/show_bug.cgi?id=756578
+	  androidmedia: fix build errors
+	  printf %lld instead of G_GINT64_FORMAT.
+	  Double ret variable declaration.
 
-2015-10-14 19:24:22 +0300  Sebastian Dröge <sebastian@centricular.com>
+2015-10-21 05:00:11 +1100  Matthew Waters <matthew@centricular.com>
+
+	* ext/gl/gstglfiltershader.c:
+	  glshaderelement: remove unneeded reference to <gst/gl/gstglshadervariables.h>
+
+2015-10-21 04:44:50 +1100  Matthew Waters <matthew@centricular.com>
+
+	* gst-libs/gst/gl/egl/gsteglimagememory.c:
+	* gst-libs/gst/gl/egl/gstglcontext_egl.c:
+	* gst-libs/gst/gl/gstglcolorconvert.c:
+	* gst-libs/gst/gl/gstglcontext.c:
+	  gl: fix usage of string.h and stdio.h functions without including the headers
+	  e.g:
+	  gstglcontext_egl.c:613:7: error: implicit declaration of function 'strcmp'
+	  [-Werror=implicit-function-declaration]
+	  if (strcmp (G_MODULE_SUFFIX, "so") == 0)
+
+2015-10-16 07:03:06 +1100  Matthew Waters <matthew@centricular.com>
+
+	* ext/gl/gstglimagesink.c:
+	  glimagesink: create a context in NULL_READY
+	  So that it's possible for decoders et al. to request the OpenGL context
+	  in their READY_PAUSED transition with decodebin/playbin.
+
+2015-10-16 00:34:22 +1100  Matthew Waters <matthew@centricular.com>
+
+	* sys/androidmedia/gstamcvideodec.c:
+	* sys/androidmedia/gstamcvideodec.h:
+	  amcviddec: use gstcontext to retreive the OpenGL context
+
+2015-04-20 13:46:58 +0200  Matthieu Bouron <matthieu.bouron@collabora.com>
 
 	* sys/androidmedia/gstamc.c:
+	* sys/androidmedia/gstamc.h:
 	* sys/androidmedia/gstamcvideodec.c:
-	  amcvideodec: Implement support for COLOR_QCOM_FormatYVU420SemiPlanar32mMultiView for decoding
-	  https://bugzilla.gnome.org/show_bug.cgi?id=756578
+	  androidmedia: Only allow GL output if the decoder has unknown color formats
+	  If GST_AMC_IGNORE_UNKNOWN_COLOR_FORMATS is set to yes, non-GL output
+	  is still allowed.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=731204
 
-2015-10-14 18:35:00 +0200  plamot <pierre.lamot@openwide.fr>
+2014-06-05 10:33:56 +0200  Matthieu Bouron <matthieu.bouron@collabora.com>
 
-	* sys/dshowvideosink/dshowvideosink.cpp:
-	  dshowvideosink: Fix 64bit compatibility issue
-	  SetWindowLong works only for 32 bit systems, thus windows events (move/resize)
-	  where not interpreted on 64 bit systems
-	  https://bugzilla.gnome.org/show_bug.cgi?id=756617
+	* sys/androidmedia/Makefile.am:
+	* sys/androidmedia/gstamc.c:
+	* sys/androidmedia/gstamc.h:
+	* sys/androidmedia/gstamc2dtexturerenderer.c:
+	* sys/androidmedia/gstamc2dtexturerenderer.h:
+	* sys/androidmedia/gstamcaudiodec.c:
+	* sys/androidmedia/gstamcsurface.c:
+	* sys/androidmedia/gstamcsurface.h:
+	* sys/androidmedia/gstamcsurfacetexture.c:
+	* sys/androidmedia/gstamcsurfacetexture.h:
+	* sys/androidmedia/gstamcvideodec.c:
+	* sys/androidmedia/gstamcvideodec.h:
+	* sys/androidmedia/gstamcvideoenc.c:
+	* sys/androidmedia/gstjniutils.c:
+	* sys/androidmedia/gstjniutils.h:
+	* sys/androidmedia/org/freedesktop/gstreamer/androidmedia/GstAmcOnFrameAvailableListener.java:
+	  androidmedia: Add support for GL output in amcvideodec
+	  https://bugzilla.gnome.org/show_bug.cgi?id=731204
+
+2015-04-30 12:33:58 +0200  Matthieu Bouron <matthieu.bouron@collabora.com>
+
+	* sys/androidmedia/gstamcvideodec.c:
+	  androidmedia: Do not flush codec if it is not started
+
+2015-04-13 13:10:10 +0200  Matthieu Bouron <matthieu.bouron@gmail.com>
+
+	* sys/androidmedia/gstjniutils.c:
+	  androidmedia: Allow object to be NULL in gst_amc_jni_*unref functions
+
+2015-03-13 16:13:08 +0100  Edward Hervey <bilboed@bilboed.com>
+
+	* sys/androidmedia/gstamc.c:
+	* sys/androidmedia/gstamcvideoenc.c:
+	  androidmedia: Fix debug statement (%d for a gsize argument)
+
+2015-04-02 16:28:14 +0200  Matthieu Bouron <matthieu.bouron@gmail.com>
+
+	* sys/androidmedia/gstamcvideodec.c:
+	  androidmedia: Improve color format debug messages
+
+2015-03-31 16:24:40 +0200  Matthieu Bouron <matthieu.bouron@gmail.com>
+
+	* sys/androidmedia/gstamc.c:
+	  androidmedia: Improve debug messages
+
+2015-03-31 17:48:59 +0200  Matthieu Bouron <matthieu.bouron@gmail.com>
+
+	* sys/androidmedia/gstamc.c:
+	  androidmedia: Do not warn we do not support COLOR_FormatSurface
+
+2015-10-21 03:59:33 +1100  Matthew Waters <matthew@centricular.com>
+
+	* gst-libs/gst/gl/Makefile.am:
+	* gst-libs/gst/gl/gl.h:
+	* gst-libs/gst/gl/gstglshadervariables.c:
+	* gst-libs/gst/gl/gstglshadervariables.h:
+	  gl: remove unneeded shader variable parsing code
+
+2015-10-21 03:23:30 +1100  Matthew Waters <matthew@centricular.com>
+
+	* ext/gl/gstglfiltershader.c:
+	* ext/gl/gstglfiltershader.h:
+	  glshaderelement: implement setting arbitrary uniforms
+	  Currently float and int are supported by default. vec2, vec3, vec4
+	  and mat4 are supported if graphene is used.  Of course if one wants
+	  to set custom uniforms they can also be set using the create-shader
+	  signal.
+
+2015-10-20 12:24:11 +0100  Luis de Bethencourt <luisbg@osg.samsung.com>
+
+	* ext/opencv/gsthanddetect.cpp:
+	  opencv: handdetect: free best_r with delete
+	  best_r is a cv::Rect, so it should be freed with delete and not with
+	  g_free()
+
+2015-10-20 12:08:59 +0100  Luis de Bethencourt <luisbg@osg.samsung.com>
+
+	* ext/opencv/gstmotioncells.cpp:
+	  opencv: motioncells: remove unnecessary check
+	  We know that the gchar arrays contain at least one string. Furthermore,
+	  g_strfreev() checks if the array is NULL and simply returns if it is.
+	  Hence, there is no need to check if the array is empty before using
+	  g_strfreev().
+	  CID 1327412-1327415
 
 2015-07-08 17:17:12 +0200  Edward Hervey <edward@centricular.com>
 
@@ -584,6 +9070,54 @@
 	  was previously outputted.
 	  https://bugzilla.gnome.org/show_bug.cgi?id=752132
 
+2015-10-14 18:35:00 +0200  plamot <pierre.lamot@openwide.fr>
+
+	* sys/dshowvideosink/dshowvideosink.cpp:
+	  dshowvideosink: Fix 64bit compatibility issue
+	  SetWindowLong works only for 32 bit systems, thus windows events (move/resize)
+	  where not interpreted on 64 bit systems
+	  https://bugzilla.gnome.org/show_bug.cgi?id=756617
+
+2015-10-19 15:15:30 +1100  Matthew Waters <matthew@centricular.com>
+
+	* docs/libs/gst-plugins-bad-libs-sections.txt:
+	* ext/gl/gstglimagesink.c:
+	* ext/gtk/gtkgstglwidget.c:
+	* ext/qt/qtitem.cc:
+	* gst-libs/gst/gl/android/gstglwindow_android_egl.h:
+	* gst-libs/gst/gl/cocoa/gstglcontext_cocoa.h:
+	* gst-libs/gst/gl/cocoa/gstglwindow_cocoa.h:
+	* gst-libs/gst/gl/dispmanx/gstglwindow_dispmanx_egl.h:
+	* gst-libs/gst/gl/eagl/gstglcontext_eagl.h:
+	* gst-libs/gst/gl/eagl/gstglwindow_eagl.h:
+	* gst-libs/gst/gl/egl/gstglcontext_egl.c:
+	* gst-libs/gst/gl/egl/gstglcontext_egl.h:
+	* gst-libs/gst/gl/gstglcontext.c:
+	* gst-libs/gst/gl/gstglcontext.h:
+	* gst-libs/gst/gl/gstgldisplay.c:
+	* gst-libs/gst/gl/gstglshader.c:
+	* gst-libs/gst/gl/gstglshader.h:
+	* gst-libs/gst/gl/gstglsl.c:
+	* gst-libs/gst/gl/gstglslstage.c:
+	* gst-libs/gst/gl/gstglsyncmeta.c:
+	* gst-libs/gst/gl/gstglviewconvert.c:
+	* gst-libs/gst/gl/gstglwindow.c:
+	* gst-libs/gst/gl/gstglwindow.h:
+	* gst-libs/gst/gl/wayland/gstglwindow_wayland_egl.h:
+	* gst-libs/gst/gl/win32/gstglcontext_wgl.h:
+	* gst-libs/gst/gl/win32/gstglwindow_win32.h:
+	* gst-libs/gst/gl/win32/gstglwindow_win32_egl.h:
+	* gst-libs/gst/gl/x11/gstglcontext_glx.h:
+	* gst-libs/gst/gl/x11/gstglwindow_x11.h:
+	  gl: be consistent in gobject boilerpate
+	  GST_GL_IS_* vs GST_IS_GL_*
+	  git grep -l 'GST_GL_IS_' | xargs sed -i 's/GST_GL_IS_/GST_IS_GL_/g'
+
+2015-10-19 15:02:10 +1100  Matthew Waters <matthew@centricular.com>
+
+	* .gitignore:
+	  add glliveshader program to .gitignore
+
 2015-10-17 12:48:11 -0700  Reynaldo H. Verdejo Pinochet <reynaldo@osg.samsung.com>
 
 	* gst/pnm/gstpnmdec.c:
@@ -611,6 +9145,23 @@
 	  for the next frame, avoiding failures like:
 	  https://bugzilla.gnome.org/show_bug.cgi?id=756563
 
+2015-10-17 15:26:46 +1100  Matthew Waters <matthew@centricular.com>
+
+	* ext/gl/gstglfiltershader.c:
+	* ext/gl/gstglfiltershader.h:
+	* tests/examples/gtk/glliveshader.c:
+	  glshaderelement: implement on-demand create-shader signalling
+	  One may not have an GstGLContext available or current in the thread where one
+	  would need to update the shader.  Support this by signalling create-shader
+	  whenever the one-shot 'update-shader' is set to TRUE.
+
+2015-10-17 02:42:47 +1100  Matthew Waters <matthew@centricular.com>
+
+	* ext/gl/caopengllayersink.m:
+	  gl/calayer: don't leak a gl shader object
+	  We will always overwrite the ca_sink->redisplay_shader without freeing the
+	  object.
+
 2015-10-17 02:40:50 +1100  Matthew Waters <matthew@centricular.com>
 
 	* ext/gtk/gstgtkbasesink.c:
@@ -619,12 +9170,164 @@
 	  callback.
 	  https://bugzilla.gnome.org/show_bug.cgi?id=755969
 
+2015-10-17 01:08:29 +1100  Matthew Waters <matthew@centricular.com>
+
+	* tests/examples/gtk/Makefile.am:
+	* tests/examples/gtk/glliveshader.c:
+	  gl/examples: add a live shader demo using the new GstGLSLStage
+	  Implemented with videotestsrc ! glshader ! glupload ! gtkglsink
+	  Errors on an invalid shader compilation are ignored however any error
+	  provided by the glsl compiler is printed to stdout.
+
+2015-10-16 00:23:56 +0200  Miguel París Díaz <mparisdiaz@gmail.com>
+
+	* ext/srtp/gstsrtpdec.c:
+	  srtpdec: skip padding when mapping RTP packets
+	  https://bugzilla.gnome.org/show_bug.cgi?id=756653
+
+2015-10-14 19:32:07 +0300  Sebastian Dröge <sebastian@centricular.com>
+
+	* sys/androidmedia/gstamcvideodec.c:
+	  amcvideodec: Properly forward the return value of gst_video_decoder_negotiate()
+	  https://bugzilla.gnome.org/show_bug.cgi?id=756578
+
+2015-10-14 19:24:22 +0300  Sebastian Dröge <sebastian@centricular.com>
+
+	* sys/androidmedia/gstamc.c:
+	* sys/androidmedia/gstamcvideodec.c:
+	  amcvideodec: Implement support for COLOR_QCOM_FormatYVU420SemiPlanar32mMultiView for decoding
+	  https://bugzilla.gnome.org/show_bug.cgi?id=756578
+
+2015-10-16 02:57:19 +1100  Matthew Waters <matthew@centricular.com>
+
+	* gst-libs/gst/gl/gstglslstage.c:
+	  glslstage: add brackets around pointer dereference referencing an array
+	  While technically, i is always 0 and *vertex_sources[i++] is equivalant
+	  to (*vertex_sources)[i++].  Be future-proof in the case of code
+	  moves/changes/etc.
+	  CID 1327406
+
+2015-10-15 23:47:11 +1100  Matthew Waters <matthew@centricular.com>
+
+	* ext/gl/caopengllayersink.m:
+	  gl/caopengllayersink: port to new GstGLShader API
+	  fixes build error:
+	  "undefined symbols for architecture:
+	  gst_gl_shader_compile_with_default_vf_and_check"
+
+2015-10-15 22:42:26 +1100  Matthew Waters <matthew@centricular.com>
+
+	* tests/check/libs/gstglcontext.c:
+	  gl/tests: port glcontext test to opengl
+	  Now uses vao's and vbo's when possible like the rest of the gstgl library.
+
+2015-09-04 16:16:51 +1000  Matthew Waters <matthew@centricular.com>
+
+	* ext/gl/gstglfiltershader.c:
+	* ext/gl/gstglfiltershader.h:
+	  glshader: port element to GstGLSLStage
+	  - Provide a shader property to set the full shader pipeline
+	  - Provide vertex and fragment properties for just providing simple
+	  shader sources.
+
+2015-09-04 16:02:32 +1000  Matthew Waters <matthew@centricular.com>
+
+	* ext/gl/effects/gstgleffectidentity.c:
+	* ext/gl/gstglcolorscale.c:
+	* ext/gl/gstgldifferencematte.c:
+	* ext/gl/gstgleffects.c:
+	* ext/gl/gstglimagesink.c:
+	* ext/gtk/gtkgstglwidget.c:
+	* gst-libs/gst/gl/gstgloverlaycompositor.c:
+	* gst-libs/gst/gl/gstglshader.c:
+	* gst-libs/gst/gl/gstglshader.h:
+	* gst-libs/gst/gl/gstglutils.c:
+	* tests/check/libs/gstglcontext.c:
+	* tests/check/libs/gstglupload.c:
+	  glshader: port to using GstGLSLStage objects for string management
+	  A GstGLShader is now simply a collection of stages that are
+	  compiled and linked together into a program.  The uniform/attribute
+	  interface has remained the same.
+
+2015-09-04 14:36:47 +1000  Matthew Waters <matthew@centricular.com>
+
+	* gst-libs/gst/gl/Makefile.am:
+	* gst-libs/gst/gl/gl.h:
+	* gst-libs/gst/gl/gstgl_fwd.h:
+	* gst-libs/gst/gl/gstglslstage.c:
+	* gst-libs/gst/gl/gstglslstage.h:
+	  glsl: add a shader stage object GstGLSLStage
+	  Represents a stage (vertex, geometry, fragment, etc) in the shader
+	  pipeline.
+
+2015-09-04 00:09:09 +1000  Matthew Waters <matthew@centricular.com>
+
+	* gst-libs/gst/gl/gstglshadervariables.h:
+	  gl/shader/variables: include generic gl.h header
+	  Otherwise we may miss some forward declarations
+	  Fixes build error: undefined reference to GstGLSLStage
+
+2015-08-20 15:11:06 +1000  Matthew Waters <matthew@centricular.com>
+
+	* gst-libs/gst/gl/Makefile.am:
+	* gst-libs/gst/gl/gstglsl.c:
+	* gst-libs/gst/gl/gstglsl.h:
+	* gst-libs/gst/gl/gstglsl_private.h:
+	* tests/check/Makefile.am:
+	* tests/check/libs/.gitignore:
+	* tests/check/libs/gstglsl.c:
+	  gl: add some GLSL utility functions
+	  Specifically parsing/setting GLSL versions and the shader related
+	  function table.
+
 2015-10-14 22:51:29 +0200  Paul Arzelier <paul.arzelier@free.fr>
 
 	* ext/dtls/gstdtlscertificate.c:
 	  dtls: Fix name conflict with openssl on win32
 	  https://bugzilla.gnome.org/show_bug.cgi?id=756592
 
+2015-09-04 18:40:18 -0300  Thiago Santos <thiagoss@osg.samsung.com>
+
+	* ext/hls/m3u8.c:
+	  hls: if media sequence is not specified, use 0
+	  Allows playlists that are missing the mediasequence information to
+	  be correctly parsed. If the playlist was updated without reseting
+	  the mediasequence it would constantly increase over subsequent updates,
+	  leading to issues during playback.
+
+2015-08-30 14:56:57 +0200  George Kiagiadakis <george.kiagiadakis@collabora.com>
+
+	* ext/wayland/gstwaylandsink.c:
+	  waylandsink: fix fallback buffer allocation
+	  Copy-paste mistake; the wl_buffer was attached on the wrong buffer...
+
+2015-08-30 14:55:11 +0200  George Kiagiadakis <george.kiagiadakis@collabora.com>
+
+	* ext/wayland/gstwaylandsink.c:
+	* ext/wayland/wldisplay.c:
+	* ext/wayland/wldisplay.h:
+	  waylandsink: rename GstWlDisplay::formats array to shm_formats
+	  These formats are specific to the wl_shm interface. We are going
+	  to add dmabuf formats later as well.
+
+2015-08-29 22:29:17 +0200  George Kiagiadakis <george.kiagiadakis@collabora.com>
+
+	* ext/wayland/Makefile.am:
+	* ext/wayland/wlshmallocator.c:
+	* ext/wayland/wlshmallocator.h:
+	  waylandsink: replace the custom GstWlShmMemory with GstFdMemory
+
+2015-10-14 19:53:34 +0300  Sebastian Dröge <sebastian@centricular.com>
+
+	* po/POTFILES.in:
+	  po: Update POTFILES.in for OpenCV C++ file rename
+
+2015-10-14 17:41:05 +0200  Edward Hervey <edward@centricular.com>
+
+	* ext/hls/m3u8.c:
+	  hls: Allow debugging of the playlist
+	  Helps debugging issues
+
 2015-10-14 17:38:39 +0200  Edward Hervey <edward@centricular.com>
 
 	* ext/hls/gsthlsdemux.c:
@@ -640,6 +9343,189 @@
 	  * either the first sequence number of the playlist (fallback)
 	  * or 3 fragments from the last one (standard behaviour)
 
+2015-10-14 15:30:05 +0100  Luis de Bethencourt <luisbg@osg.samsung.com>
+
+	* ext/opencv/Makefile.am:
+	* ext/opencv/gstopencvutils.c:
+	* ext/opencv/gstopencvutils.cpp:
+	* ext/opencv/gstopencvvideofilter.c:
+	* ext/opencv/gstopencvvideofilter.cpp:
+	* ext/opencv/gsttemplatematch.c:
+	* ext/opencv/gsttemplatematch.cpp:
+	  opencv: switch remaining to C++
+	  Switch remaining C files to C++ for consistency with other OpeCV elements,
+	  and support of the new 2.4.11 API.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=754148
+
+2015-10-14 10:31:23 +0300  Sebastian Dröge <sebastian@centricular.com>
+
+	* ext/dash/gstmpdparser.c:
+	  mpdparser: Set default last_byte_pos to -1
+	  The value is optional in the range, and if it is absent it means we should
+	  download until the end of stream. Not until position 0.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=748316
+
+2015-10-14 10:34:58 +0300  Sebastian Dröge <sebastian@centricular.com>
+
+	* gst-libs/gst/adaptivedemux/gstadaptivedemux.c:
+	  adaptivedemux: HTTP ranges are inclusive, GStreamer segment.stop is exclusive
+	  Translate the values accordingly.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=748316
+
+2015-10-14 14:34:32 +0100  Luis de Bethencourt <luisbg@osg.samsung.com>
+
+	* ext/opencv/Makefile.am:
+	* ext/opencv/gstmotioncells.c:
+	* ext/opencv/gstmotioncells.cpp:
+	* ext/opencv/gstmotioncells.h:
+	* ext/opencv/motioncells_wrapper.cpp:
+	* ext/opencv/motioncells_wrapper.h:
+	  opencv: motioncells: Switch to C++
+	  Switch gstmotioncells to C++ for consistency with other OpenCV elements,
+	  and support of the new 2.4.11 API.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=754148
+
+2015-10-14 22:35:26 +1100  Matthew Waters <matthew@centricular.com>
+
+	* Makefile.am:
+	  build: add liveadder directory to the cruft list
+	  So that we can remove it and avoid duplicate GstLiveAdder GType registrations.
+
+2015-10-13 12:40:04 +0200  Guillaume Desmottes <guillaume.desmottes@collabora.co.uk>
+
+	* gst-libs/gst/gl/gstgldebug.c:
+	  gl: fix leak in gst_gl_insert_debug_marker()
+	  The string allocated by g_vasprintf() was leaked.
+	  Reproduced using the
+	  validate.file.compositor.simple.play_15s.synchronized validate scenario.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=756492
+
+2015-10-12 11:07:32 +0100  Tim-Philipp Müller <tim@centricular.com>
+
+	* docs/plugins/gst-plugins-bad-plugins.args:
+	* docs/plugins/gst-plugins-bad-plugins.hierarchy:
+	* docs/plugins/gst-plugins-bad-plugins.interfaces:
+	* docs/plugins/inspect/plugin-accurip.xml:
+	* docs/plugins/inspect/plugin-adpcmdec.xml:
+	* docs/plugins/inspect/plugin-adpcmenc.xml:
+	* docs/plugins/inspect/plugin-aiff.xml:
+	* docs/plugins/inspect/plugin-asfmux.xml:
+	* docs/plugins/inspect/plugin-assrender.xml:
+	* docs/plugins/inspect/plugin-audiomixer.xml:
+	* docs/plugins/inspect/plugin-audiovisualizers.xml:
+	* docs/plugins/inspect/plugin-autoconvert.xml:
+	* docs/plugins/inspect/plugin-bayer.xml:
+	* docs/plugins/inspect/plugin-bz2.xml:
+	* docs/plugins/inspect/plugin-camerabin.xml:
+	* docs/plugins/inspect/plugin-chromaprint.xml:
+	* docs/plugins/inspect/plugin-coloreffects.xml:
+	* docs/plugins/inspect/plugin-curl.xml:
+	* docs/plugins/inspect/plugin-dataurisrc.xml:
+	* docs/plugins/inspect/plugin-debugutilsbad.xml:
+	* docs/plugins/inspect/plugin-dtsdec.xml:
+	* docs/plugins/inspect/plugin-dvb.xml:
+	* docs/plugins/inspect/plugin-dvbsuboverlay.xml:
+	* docs/plugins/inspect/plugin-dvdspu.xml:
+	* docs/plugins/inspect/plugin-faac.xml:
+	* docs/plugins/inspect/plugin-faad.xml:
+	* docs/plugins/inspect/plugin-festival.xml:
+	* docs/plugins/inspect/plugin-fieldanalysis.xml:
+	* docs/plugins/inspect/plugin-flite.xml:
+	* docs/plugins/inspect/plugin-fragmented.xml:
+	* docs/plugins/inspect/plugin-frei0r.xml:
+	* docs/plugins/inspect/plugin-gaudieffects.xml:
+	* docs/plugins/inspect/plugin-gdp.xml:
+	* docs/plugins/inspect/plugin-geometrictransform.xml:
+	* docs/plugins/inspect/plugin-gmedec.xml:
+	* docs/plugins/inspect/plugin-gsm.xml:
+	* docs/plugins/inspect/plugin-gstsiren.xml:
+	* docs/plugins/inspect/plugin-id3tag.xml:
+	* docs/plugins/inspect/plugin-inter.xml:
+	* docs/plugins/inspect/plugin-interlace.xml:
+	* docs/plugins/inspect/plugin-jpegformat.xml:
+	* docs/plugins/inspect/plugin-mimic.xml:
+	* docs/plugins/inspect/plugin-mms.xml:
+	* docs/plugins/inspect/plugin-modplug.xml:
+	* docs/plugins/inspect/plugin-mpeg2enc.xml:
+	* docs/plugins/inspect/plugin-mpegpsdemux.xml:
+	* docs/plugins/inspect/plugin-mpegpsmux.xml:
+	* docs/plugins/inspect/plugin-mpegtsdemux.xml:
+	* docs/plugins/inspect/plugin-mpegtsmux.xml:
+	* docs/plugins/inspect/plugin-mpg123.xml:
+	* docs/plugins/inspect/plugin-mplex.xml:
+	* docs/plugins/inspect/plugin-neon.xml:
+	* docs/plugins/inspect/plugin-ofa.xml:
+	* docs/plugins/inspect/plugin-openal.xml:
+	* docs/plugins/inspect/plugin-opencv.xml:
+	* docs/plugins/inspect/plugin-opus.xml:
+	* docs/plugins/inspect/plugin-pcapparse.xml:
+	* docs/plugins/inspect/plugin-pnm.xml:
+	* docs/plugins/inspect/plugin-rawparse.xml:
+	* docs/plugins/inspect/plugin-removesilence.xml:
+	* docs/plugins/inspect/plugin-resindvd.xml:
+	* docs/plugins/inspect/plugin-rfbsrc.xml:
+	* docs/plugins/inspect/plugin-rtmp.xml:
+	* docs/plugins/inspect/plugin-schro.xml:
+	* docs/plugins/inspect/plugin-sdp.xml:
+	* docs/plugins/inspect/plugin-segmentclip.xml:
+	* docs/plugins/inspect/plugin-shm.xml:
+	* docs/plugins/inspect/plugin-smooth.xml:
+	* docs/plugins/inspect/plugin-soundtouch.xml:
+	* docs/plugins/inspect/plugin-speed.xml:
+	* docs/plugins/inspect/plugin-subenc.xml:
+	* docs/plugins/inspect/plugin-videoparsersbad.xml:
+	* docs/plugins/inspect/plugin-voaacenc.xml:
+	* docs/plugins/inspect/plugin-voamrwbenc.xml:
+	* docs/plugins/inspect/plugin-waylandsink.xml:
+	* docs/plugins/inspect/plugin-y4mdec.xml:
+	* docs/plugins/inspect/plugin-zbar.xml:
+	  docs: update to git
+	  https://bugzilla.gnome.org/show_bug.cgi?id=756424
+
+2015-10-12 09:36:29 +0100  Tim-Philipp Müller <tim@centricular.com>
+
+	* gst/audiomixer/gstaudiomixer.c:
+	  liveadder: latency property is an uint64 in audiomixer
+
+2015-10-11 23:44:25 +0100  Luis de Bethencourt <luisbg@osg.samsung.com>
+
+	* ext/opencv/Makefile.am:
+	* ext/opencv/gsttextoverlay.c:
+	* ext/opencv/gsttextoverlay.cpp:
+	  textoverlay: Switch to C++
+	  Switch gsttextoverlay to C++ for consistency with other OpenCV elements,
+	  and support of the new 2.4.11 API.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=754148
+
+2015-10-11 21:54:30 +0100  Luis de Bethencourt <luisbg@osg.samsung.com>
+
+	* ext/opencv/Makefile.am:
+	* ext/opencv/gstpyramidsegment.c:
+	* ext/opencv/gstpyramidsegment.cpp:
+	  opencv: pyramidsegment: Switch to C++
+	  Switch gstpyramidsegment to C++ for consistency with other OpenCV elements,
+	  and support of the new 2.4.11 API.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=754148
+
+2015-10-05 00:55:36 +0100  Olivier Crête <olivier.crete@collabora.com>
+
+	* configure.ac:
+	* docs/plugins/Makefile.am:
+	* docs/plugins/gst-plugins-bad-plugins-docs.sgml:
+	* docs/plugins/gst-plugins-bad-plugins-sections.txt:
+	* docs/plugins/inspect/plugin-liveadder.xml:
+	* gst/audiomixer/gstaudiomixer.c:
+	* gst/liveadder/Makefile.am:
+	* gst/liveadder/liveadder.c:
+	* gst/liveadder/liveadder.h:
+	  liveadder: Remove plugin, replace by compat subclass of audiomixer
+	  New subclass with a similar behaviour as the old liveadder, but
+	  a slightly different API as the latency is in nanoseconds, not
+	  milliseconds. Also, the new liveadder has a effective latency that
+	  is latency + output-buffer-duration. In practice, just setting a non-zero
+	  latency with the new audiomixer gives you the right behavior in 99% of the
+	  cases.
+
 2015-10-11 10:00:43 +0100  Julien Isorce <j.isorce@samsung.com>
 
 	* configure.ac:
@@ -648,18 +9534,61 @@
 	  Found with gst-inspect-1.0 -b in gst-uninstalled env.
 	  https://bugzilla.gnome.org/show_bug.cgi?id=756383
 
-2015-10-05 11:21:07 +0900  Vineeth TM <vineeth.tm@samsung.com>
+2015-10-10 17:52:23 +0100  Luis de Bethencourt <luisbg@osg.samsung.com>
 
-	* gst/id3tag/id3tag.c:
-	  id3tag: fix sample memory leak
-	  When getting sample from taglist, the memory is not being freed resulting in memory leak.
-	  https://bugzilla.gnome.org/show_bug.cgi?id=756070
+	* ext/opencv/Makefile.am:
+	* ext/opencv/gstcvsobel.c:
+	* ext/opencv/gstcvsobel.cpp:
+	  cvsobel: Switch to C++
+	  Switch gstcvlsobel to C++ for consistency with other OpenCV elements, and
+	  support of the new 2.4.11 API.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=754148
 
-2015-10-06 21:23:11 +0530  Nirbheek Chauhan <nirbheek@centricular.com>
+2015-10-10 17:00:55 +0100  Luis de Bethencourt <luisbg@osg.samsung.com>
 
-	* ext/gl/gstglvideomixer.c:
-	  glvideomixer: Proxy the ignore-eos videoaggregator property as well
-	  Identical to how the z-order property is proxied
+	* ext/opencv/Makefile.am:
+	* ext/opencv/gstcvlaplace.c:
+	* ext/opencv/gstcvlaplace.cpp:
+	  cvlaplace: Switch to C++
+	  Switch gstcvlaplace to C++ for consistency with other OpenCV elements, and
+	  support of the new 2.4.11 API.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=754148
+
+2015-10-10 16:57:36 +0100  Luis de Bethencourt <luisbg@osg.samsung.com>
+
+	* ext/opencv/Makefile.am:
+	* ext/opencv/gstcvequalizehist.c:
+	* ext/opencv/gstcvequalizehist.cpp:
+	  cvequalizehist: Switch to C++
+	  Switch gstcvequalizehist to C++ for consistency with other OpenCV elements,
+	  and support of the new 2.4.11 API.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=754148
+
+2015-10-10 14:10:32 +0100  Luis de Bethencourt <luisbg@osg.samsung.com>
+
+	* ext/opencv/Makefile.am:
+	* ext/opencv/gstcvdilateerode.c:
+	* ext/opencv/gstcvdilateerode.cpp:
+	* ext/opencv/gstcverode.c:
+	* ext/opencv/gstcverode.cpp:
+	  cverode: Switch to C++
+	  Switch gstcverode to C++ for consistency with other OpenCV elements, and
+	  support of the new 2.4.11 API.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=754148
+
+2015-10-08 14:46:10 -0700  Reynaldo H. Verdejo Pinochet <reynaldo@osg.samsung.com>
+
+	* sys/dvb/parsechannels.c:
+	  dvb: simplify ZAP file format parser
+	  Simplify state handing, drop unneeded local vars, etc.
+
+2015-10-07 14:22:46 +0100  Florin Apostol <florin.apostol@oregan.net>
+
+	* ext/dash/gstmpdparser.c:
+	  dashdemux: fixed has_next_period
+	  gst_mpd_client_has_next_period now calls gst_mpd_client_setup_media_presentation
+	  to refresh the period information.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=756186
 
 2015-10-07 08:48:15 +0900  Vineeth TM <vineeth.tm@samsung.com>
 
@@ -670,13 +9599,18 @@
 	  formatter is being used in logs. Changing all those to int64
 	  https://bugzilla.gnome.org/show_bug.cgi?id=756065
 
-2015-10-07 14:22:46 +0100  Florin Apostol <florin.apostol@oregan.net>
+2015-10-06 21:23:11 +0530  Nirbheek Chauhan <nirbheek@centricular.com>
 
-	* ext/dash/gstmpdparser.c:
-	  dashdemux: fixed has_next_period
-	  gst_mpd_client_has_next_period now calls gst_mpd_client_setup_media_presentation
-	  to refresh the period information.
-	  https://bugzilla.gnome.org/show_bug.cgi?id=756186
+	* ext/gl/gstglvideomixer.c:
+	  glvideomixer: Proxy the ignore-eos videoaggregator property as well
+	  Identical to how the z-order property is proxied
+
+2015-10-05 11:21:07 +0900  Vineeth TM <vineeth.tm@samsung.com>
+
+	* gst/id3tag/id3tag.c:
+	  id3tag: fix sample memory leak
+	  When getting sample from taglist, the memory is not being freed resulting in memory leak.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=756070
 
 2015-10-01 11:18:52 +0200  Havard Graff <havard.graff@gmail.com>
 
@@ -684,11 +9618,191 @@
 	  rtmpsrc: plug memory-leaks
 	  https://bugzilla.gnome.org/show_bug.cgi?id=756001
 
+2015-10-02 22:57:27 +0300  Sebastian Dröge <sebastian@centricular.com>
+
+	* ext/resindvd/resindvdbin.c:
+	* ext/resindvd/resindvdbin.h:
+	* ext/resindvd/resindvdsrc.c:
+	* ext/resindvd/resindvdsrc.h:
+	  resindvd: Port to new GLib mutex/cond API
+
+2015-10-02 22:24:19 +0300  Sebastian Dröge <sebastian@centricular.com>
+
+	* configure.ac:
+	* ext/hls/m3u8.c:
+	* ext/libde265/libde265-dec.c:
+	* gst-libs/gst/glib-compat-private.h:
+	* gst/videomeasure/gstvideomeasure_ssim.c:
+	  Update GLib dependency to 2.40.0
+
+2015-10-02 19:02:26 +0100  Vanessa Chipirrás Navalón <vchipirras6@gmail.com>
+
+	* ext/opencv/Makefile.am:
+	* ext/opencv/gstcvdilate.c:
+	* ext/opencv/gstcvdilate.cpp:
+	  cvdilate: Change gstcvdilate to C++
+	  Change the gstcvdilate.c file extension to cpp and add it into Makefile for
+	  consistency with other elements of opencv and because Opencv not support C
+	  language in new API 2.4.11.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=754148
+
+2015-10-02 18:50:45 +0100  Vanessa Chipirrás Navalón <vchipirras6@gmail.com>
+
+	* ext/opencv/Makefile.am:
+	* ext/opencv/gstskindetect.c:
+	* ext/opencv/gstskindetect.cpp:
+	  skindetect: Change gstskindetect to C++
+	  Change the file extension to cpp and add it into Makefile for consistency
+	  with other elements of opencv and because Opencv not support C language in
+	  new API 2.4.11.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=754148
+
+2015-08-31 17:43:26 +0200  Vanessa Chipirrás Navalón <vchipirras6@gmail.com>
+
+	* ext/opencv/gstopencvutils.h:
+	  opencvutils: add extern C, for the opencv elements work.
+	  Adding G_BEGIN_DECLS and G_END_DECLS to gstopencvutils.h
+	  to allow C-style linking.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=754148
+
+2015-10-02 18:40:43 +0100  Luis de Bethencourt <luisbg@osg.samsung.com>
+
+	* ext/opencv/gstretinex.cpp:
+	  retinex: use OpenCV namespace
+	  As part of the switch to C++, use the new OpenCV functions.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=754148
+
+2015-10-02 18:10:32 +0100  Vanessa Chipirrás Navalón <vchipirras6@gmail.com>
+
+	* ext/opencv/Makefile.am:
+	* ext/opencv/gstcvsmooth.c:
+	* ext/opencv/gstcvsmooth.cpp:
+	  cvsmooth: port to C++
+	  Change the file extension to cpp and add it into Makefile for consistency
+	  with other elements of opencv and because Opencv not support C language in
+	  new API 2.4.11.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=754148
+
+2015-10-02 17:48:47 +0100  Vanessa Chipirrás Navalón <vchipirras6@gmail.com>
+
+	* ext/opencv/Makefile.am:
+	* ext/opencv/gstretinex.c:
+	* ext/opencv/gstretinex.cpp:
+	  retinex: Change retinex to C++
+	  Change the gstretinex.c file to cpp and add it into Makefile.
+	  It is necessary to migrate the retinex element to C++,
+	  because new Opencv API leaves obsolete functions like cvSmooth.
+	  This element uses this function.
+	  You can see in this link:
+	  http://docs.opencv.org/modules/imgproc/doc/filtering.html?
+	  highlight=cvsmooth#void cvSmooth(const CvArr* src, CvArr* dst,
+	  int smoothtype, int size1, int size2, double sigma1, double sigma2)
+	  https://bugzilla.gnome.org/show_bug.cgi?id=754148
+
+2015-10-02 17:18:33 +0100  Vanessa Chipirrás Navalón <vchipirras6@gmail.com>
+
+	* ext/opencv/gsthanddetect.cpp:
+	* ext/opencv/gsthanddetect.h:
+	  handdetect: remove another unused variable
+	  Memory is reserved for this variable and then released without making any
+	  use of it.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=752528
+
+2015-10-02 17:02:42 +0100  Luis de Bethencourt <luisbg@osg.samsung.com>
+
+	* ext/opencv/gsthanddetect.cpp:
+	* ext/opencv/gsthanddetect.h:
+	  handdetect: CvPoint values changed from uint to int
+	  The x and y values of CvPoint changed from unsigned to signed integers
+	  in OpenCV 2.4.11.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=752528
+
+2015-10-02 16:22:36 +0100  Luis de Bethencourt <luisbg@osg.samsung.com>
+
+	* ext/opencv/gsthanddetect.cpp:
+	* ext/opencv/gsthanddetect.h:
+	  handdetect: need to migrate to C++
+	  The cascade classifier changes its structure on new version of OpenCV 2.4.11.
+	  It is need to migrate to C++ to utilize the new load method of OpenCV which
+	  allows to load the old and new classifiers.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=752528
+
+2015-10-02 16:01:29 +0100  Luis de Bethencourt <luisbg@osg.samsung.com>
+
+	* ext/opencv/Makefile.am:
+	* ext/opencv/gsthanddetect.c:
+	* ext/opencv/gsthanddetect.cpp:
+	  handdetect: Change gsthanddetect to C++
+	  Change the gsthanddetect.c file to cpp and add it into Makefile.
+	  It is necessary to migrate the handdetect plugin to C++,
+	  in order to load new and old classifiers, to make handdetect work
+	  with newer versions of Opencv.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=752528
+
 2015-10-02 17:05:11 +0200  Polochon_street <polochonstreet@gmx.fr>
 
 	* ext/dtls/gstdtlsdec.c:
 	  dtls: fix printf format on win32
 
+2015-08-20 16:03:29 +0900  Vineeth TM <vineeth.tm@samsung.com>
+
+	* gst/inter/gstintertest.c:
+	* tests/examples/camerabin2/gst-camerabin2-test.c:
+	* tests/examples/codecparsers/parse-jpeg.c:
+	* tests/examples/gl/gtk/fxtest/fxtest.c:
+	* tests/examples/gl/gtk/fxtest/pixbufdrop.c:
+	* tests/examples/opencv/gstfacedetect_test.c:
+	* tests/examples/playout.c:
+	* tools/gst-app-maker:
+	  gstreamer: bad: Fix memory leaks when context parse fails
+	  When g_option_context_parse fails, context and error variables are not getting free'd
+	  which results in memory leaks. Free'ing the same.
+	  And replacing g_error_free with g_clear_error, which checks if the error being passed
+	  is not NULL and sets the variable to NULL on free'ing.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=753854
+
+2015-06-25 19:17:36 +0200  Arnaud Vrac <avrac@freebox.fr>
+
+	* ext/assrender/gstassrender.c:
+	  assrender: optimize blending
+	  Skip empty source pixels when blending an image. There can be hundreds
+	  of images to blend at each frame, so this brings a nice performance
+	  boost.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=753821
+
+2015-08-19 17:18:31 +0200  Arnaud Vrac <avrac@freebox.fr>
+
+	* ext/assrender/gstassrender.c:
+	* ext/assrender/gstassrender.h:
+	  assrender: Use the window size from downstream
+	  This allows rendering the overlay at a resolution matching the video
+	  resolution.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=753824
+
+2014-09-04 18:16:00 +0200  Arnaud Vrac <avrac@freebox.fr>
+
+	* ext/assrender/gstassrender.c:
+	* ext/assrender/gstassrender.h:
+	  assrender: Improve negotiation
+	  This is mostly a copy/paste of the negotiation function in
+	  basetextoverlay, which was improved recently to handle many more cases.
+	  This will allow us to negotiate a window size with downstream.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=753824
+
+2015-08-19 13:44:35 +0200  Arnaud Vrac <avrac@freebox.fr>
+
+	* configure.ac:
+	* ext/assrender/gstassrender.c:
+	  assrender: render the subtitles with the proper aspect
+	  This bumps the libass version requirement to 0.10.2.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=753824
+
+2015-09-07 16:20:42 +0100  Florin Apostol <florin.apostol@oregan.net>
+
+	* tests/check/elements/dash_mpd.c:
+	  dashdemux: test: added unit test for presentation time offset
+	  https://bugzilla.gnome.org/show_bug.cgi?id=752409
+
 2015-09-30 10:27:06 -0700  Aleix Conchillo Flaqué <aleix@oblong.com>
 
 	* configure.ac:
@@ -707,13 +9821,38 @@
 	  dashdemux: Correctly assign earliest pts instead of overriding it with first offset
 	  https://bugzilla.gnome.org/show_bug.cgi?id=755824
 
-2015-09-30 19:01:21 +0200  Sebastian Dröge <sebastian@centricular.com>
+2015-09-15 03:14:37 +1000  Matthew Waters <matthew@centricular.com>
 
-	* gst/audiomixer/gstaudioaggregator.c:
-	  audioaggregator: Select the initial offset based on the start segment position
-	  instead of always using 0. Otherwise we might output a lot of silence in the
-	  beginning instead of outputting from the relevant position.
-	  https://bugzilla.gnome.org/show_bug.cgi?id=755623
+	* configure.ac:
+	* ext/qt/gstplugin.cc:
+	* ext/qt/gstqsgtexture.h:
+	* ext/qt/gstqtsink.cc:
+	* ext/qt/qtitem.cc:
+	* ext/qt/qtitem.h:
+	  qt: add support for building on osx/ios
+	  Including:
+	  - Necessary configure checks
+	  - Necessary compile time platform checks
+	  - Necessary runtime qt iOS/OSX platform detection
+	  https://bugzilla.gnome.org/show_bug.cgi?id=755100
+
+2015-09-28 11:29:29 +0100  John Slade <john@jtes.net>
+
+	* ext/rtmp/gstrtmpsrc.c:
+	  rtmpsrc: Fix indentation with gst-indent
+	  https://bugzilla.gnome.org/show_bug.cgi?id=755732
+
+2015-10-02 11:31:50 +0300  Sebastian Dröge <sebastian@centricular.com>
+
+	* gst/audiovisualizers/Makefile.am:
+	  audiovisualizers: Fix nodist_HEADERS
+
+2015-10-02 14:56:41 +1000  Jan Schmidt <jan@centricular.com>
+
+	* tests/check/Makefile.am:
+	* tests/check/elements/baseaudiovisualizer.c:
+	  Remove baseaudiovisualizer test.
+	  The base class has moved into gst-plugins-base
 
 2015-09-30 19:05:35 +0200  Sebastian Dröge <sebastian@centricular.com>
 
@@ -728,6 +9867,632 @@
 	  before anyway because of a mistake.
 	  https://bugzilla.gnome.org/show_bug.cgi?id=755623
 
+2015-09-30 19:01:21 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+	* gst/audiomixer/gstaudioaggregator.c:
+	  audioaggregator: Select the initial offset based on the start segment position
+	  instead of always using 0. Otherwise we might output a lot of silence in the
+	  beginning instead of outputting from the relevant position.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=755623
+
+2015-10-01 15:35:37 +0100  Luis de Bethencourt <luisbg@osg.samsung.com>
+
+	* docs/plugins/Makefile.am:
+	* gst/audiovisualizers/Makefile.am:
+	* gst/audiovisualizers/gstaudiovisualizer.c:
+	* gst/audiovisualizers/gstaudiovisualizer.h:
+	* gst/audiovisualizers/gstspacescope.h:
+	* gst/audiovisualizers/gstspectrascope.h:
+	* gst/audiovisualizers/gstsynaescope.h:
+	* gst/audiovisualizers/gstwavescope.h:
+	  audiovisualizers: merge audiovisualizer base classes
+	  These plugins now use the audiovisualizer base class in pbutils
+	  https://bugzilla.gnome.org/show_bug.cgi?id=742875
+
+2015-10-02 01:01:42 +1000  Matthew Waters <matthew@centricular.com>
+
+	* gst-libs/gst/gl/Makefile.am:
+	* gst-libs/gst/gl/gl.h:
+	* gst-libs/gst/gl/gstglcontext.c:
+	* gst-libs/gst/gl/gstgldebug.c:
+	* gst-libs/gst/gl/gstgldebug.h:
+	* gst-libs/gst/gl/gstglutils.c:
+	* gst-libs/gst/gl/gstglutils.h:
+	  gl: move debugging related functions to their own file
+
+2015-10-01 23:20:19 +1000  Matthew Waters <matthew@centricular.com>
+
+	* ext/gl/gstglcolorscale.c:
+	  glcolorscale: use glbasefilter vfuncs
+	  Uses less code \o/
+	  Fixes legacy opengl rendering \o/
+
+2015-09-16 12:50:46 +0200  Philippe Normand <philn@igalia.com>
+
+	* ext/smoothstreaming/gstmssdemux.c:
+	  mssdemux: activate streams before configuring bitrate
+	  Doing the contrary has no effect and the consequence is that playback
+	  will start with the lowest bitrate even if we can already handle
+	  higher bitrate.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=755108
+
+2015-06-08 15:33:22 +0200  Philippe Normand <philn@igalia.com>
+
+	* ext/smoothstreaming/gstmssdemux.c:
+	* ext/smoothstreaming/gstmssdemux.h:
+	* ext/smoothstreaming/gstmssmanifest.c:
+	* ext/smoothstreaming/gstmssmanifest.h:
+	  mssdemux: PlayReady WRM parsing support
+	  If the manifest has a ProtectionHeader node then parse it and emit
+	  protection events according to the specified protection SystemID.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=753613
+
+2015-09-03 15:11:00 +0200  Philippe Normand <philn@igalia.com>
+
+	* ext/smoothstreaming/gstmssmanifest.c:
+	  mssdemux: always use timescale for gst timestamp calculation
+	  Not doing this can lead the demuxer to attempt downloading fragments
+	  for an invalid start time. The server would then send a HTTP
+	  Precondition failed error, the demuxer would try some more times to
+	  download the invalid fragment and eventually error out.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=754523
+
+2015-09-30 08:36:15 +0200  Antoine Jacoutot <ajacoutot@gnome.org>
+
+	* gst-libs/gst/gl/Makefile.am:
+	  gl: Pass GL_CFLAGS to g-ir-scanner
+	  This unbreaks building when some headers are under a non-standard path.
+	  e.g. /usr/X11R6/include as on OpenBSD.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=755850
+
+2015-09-30 00:44:16 -0700  Aleix Conchillo Flaqué <aleix@oblong.com>
+
+	* sys/applemedia/Makefile.am:
+	  applemedia: dist missing header files
+	  https://bugzilla.gnome.org/show_bug.cgi?id=755852
+
+2015-09-30 13:13:19 +0900  Vineeth TM <vineeth.tm@samsung.com>
+
+	* tests/check/elements/audiointerleave.c:
+	  audiointerleave: typecast bit-mask to guint64 to fix segmentation fault
+	  While creating caps in audiointerleave tests, bitmask is being set as 0x9
+	  This is resulting in segmentation fault. Fix the same by typecasting to guint64
+	  https://bugzilla.gnome.org/show_bug.cgi?id=755840
+
+2015-09-30 15:17:38 +1000  Matthew Waters <matthew@centricular.com>
+
+	* gst-libs/gst/gl/gstglcontext.c:
+	  glcontext: fixup strstr lengths so we don't overrun
+
+2015-09-30 13:31:50 +1000  Matthew Waters <matthew@centricular.com>
+
+	* docs/libs/gst-plugins-bad-libs-sections.txt:
+	* ext/gl/gstgluploadelement.c:
+	* gst-libs/gst/gl/gstglupload.c:
+	* gst-libs/gst/gl/gstglupload.h:
+	* tests/check/libs/gstglupload.c:
+	  glupload: remove useless release_buffer
+	  It's a leftover from when we weren't outputting GstBuffer's and
+	  returning raw texture id's.
+
+2015-09-30 01:53:53 +1000  Matthew Waters <matthew@centricular.com>
+
+	* gst-libs/gst/gl/gstglutils.c:
+	  glutils: use gst_element_set_context for setting display/other_context
+	  1. So we get tracking inside GstElement properly when e.g. adding to a bin
+	  2. Removes redundant code.  Now only one place where
+	  GstContext->GstGLDisplay/GstGLContext transformation occurs
+	  3. Fixes a memory leak in the process
+	  4. Make the retrieval of debug categories thread safe
+
+2015-09-29 22:57:52 +1000  Matthew Waters <matthew@centricular.com>
+
+	* ext/gtk/gtkgstglwidget.c:
+	  gtk: add some GL debug statements to show up in GL traces
+
+2015-08-30 17:11:31 +0100  Tim-Philipp Müller <tim@centricular.com>
+
+	* ext/hls/gstm3u8playlist.c:
+	* ext/hls/gstm3u8playlist.h:
+	  hls: m3u8playlist: more clean-ups
+	  Remove unused functions; move GstM3U8 struct into .c file,
+	  and indent the header so it's nice to read.
+
+2015-08-30 17:01:13 +0100  Tim-Philipp Müller <tim@centricular.com>
+
+	* ext/hls/gstm3u8playlist.c:
+	  hls: m3u8playlist: fix silly queue iteration code
+
+2015-08-30 16:40:02 +0100  Tim-Philipp Müller <tim@centricular.com>
+
+	* ext/hls/gstm3u8playlist.c:
+	  hls: m3u8playlist: more minor playlist_render() clean-ups
+	  Move the TAG defines directly into the code, not sure what
+	  their purposes is, these are printf format strings so having
+	  them directly as literals in the code where they're used
+	  makes the code easier to follow.
+
+2015-08-30 16:34:26 +0100  Tim-Philipp Müller <tim@centricular.com>
+
+	* ext/hls/gstm3u8playlist.c:
+	  hls: m3u8playlist: move entry rendering into render_playlist()
+	  Makes the code easier to follow and avoids unnecessary temporary
+	  strings, since we can just append to the playlist GString directly.
+
+2015-08-30 16:24:41 +0100  Tim-Philipp Müller <tim@centricular.com>
+
+	* ext/hls/gstm3u8playlist.c:
+	* ext/hls/gstm3u8playlist.h:
+	  hls: m3u8playlist: simplify gst_m3u8_playlist_render()
+	  Remove playlist_str GString variable from GstM3U8Playlist struct,
+	  since it's only used temporarily in playlist_render(). Might just
+	  as well keep it local then.
+
+2015-08-30 15:55:51 +0100  Tim-Philipp Müller <tim@centricular.com>
+
+	* ext/hls/Makefile.am:
+	* ext/hls/gstfragmented.h:
+	* ext/hls/gsthlssink.c:
+	* ext/hls/gstm3u8playlist.h:
+	  hls: remove unused macro and direct gio usage
+
+2015-09-30 00:36:14 +0100  Tim-Philipp Müller <tim@centricular.com>
+
+	* gst/mpegtsmux/mpegtsmux.c:
+	  mpegtsmux: fix downstream key unit events handling with hlssink
+	  The buffer timestamps in the collect function will already be
+	  running time, don't try to convert them again to running time,
+	  this would yield CLOCK_TIME_NONE now that the segment is shifted
+	  to account for negative dts.
+	  This fixes x264enc ! mpegtsmux ! hlssink, which was broken
+	  because mpegtsmux would send a downstream key unit event with
+	  running time NONE and then hlssink would immediately send
+	  another one upstream and it would just be a flood of force
+	  keyframe events in both directions after the first one. This
+	  would then break hlssink because it uses multifilesink in
+	  next-file=key-unit-event mode, and starting a new file after
+	  every few kB does not work well for HLS.
+
+2015-08-20 17:35:04 +0100  Luis de Bethencourt <luisbg@osg.samsung.com>
+
+	* ext/opencv/gstcverode.c:
+	  opencv: erode: remove non-ip transform func
+	  Transform is set to be done in place in gstcvdilateerode.c, so the in-place
+	  transform function is always used and the other is redundant. Removing it.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=753885
+
+2015-08-20 17:23:40 +0100  Luis de Bethencourt <luis@debethencourt.com>
+
+	* ext/opencv/gstcvdilate.c:
+	  opencv: dilate: remove non-ip transform func
+	  Transform is set to be done in place in gstcvdilateerode.c, so the in-place
+	  transform function is always used and the other is redundant. Removing it.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=753885
+
+2015-09-29 20:00:02 +0100  Luis de Bethencourt <luisbg@osg.samsung.com>
+
+	* ext/opencv/gstcvdilateerode.c:
+	* ext/opencv/gstcvequalizehist.c:
+	* ext/opencv/gstcvlaplace.c:
+	* ext/opencv/gstcvsmooth.c:
+	* ext/opencv/gstcvsobel.c:
+	* ext/opencv/gstretinex.c:
+	* ext/opencv/gstretinex.h:
+	* ext/opencv/gstskindetect.c:
+	  opencv: use gst_opencv_video_filter_set_in_place()
+	  Using the gst_base_transform function directly won't work. Need to use
+	  gst_opencv_video_filter_set_in_place().
+
+2015-09-29 17:00:22 +0100  Luis de Bethencourt <luisbg@osg.samsung.com>
+
+	* ext/opencv/gsthanddetect.c:
+	  handdetect: check for haar cascade files path
+	  When running GStreamer from uninstalled sources, the location of the haar
+	  cascade files will be local. Check if running in uninstalled and set the
+	  file paths accordingly.
+
+2015-09-26 17:02:09 +0800  John Chang <r97922153@gmail.com>
+
+	* gst-libs/gst/adaptivedemux/gstadaptivedemux.c:
+	  adaptivedemux: remove unused variable
+	  https://bugzilla.gnome.org/show_bug.cgi?id=755656
+
+2015-09-29 13:31:18 +0100  Tim-Philipp Müller <tim@centricular.com>
+
+	* gst-libs/gst/video/gstvideoaggregator.c:
+	  videoaggregator: fix compilation with older glib version
+	  Remove weird use of private gtype defines and fix compilation
+	  with older glib versions such as 2.36.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=755754
+
+2015-09-29 13:52:47 +0100  Luis de Bethencourt <luisbg@osg.samsung.com>
+
+	* ext/opencv/gstcvlaplace.c:
+	* ext/opencv/gstcvlaplace.h:
+	  opencv: cvlaplace: add scale and shift properties
+	  Add scale and shift properties so these can be used to tweak the values
+	  used in cvConvertScale() instead of using only defaults.
+
+2015-08-28 16:24:24 +0100  Luis de Bethencourt <luis@debethencourt.com>
+
+	* ext/qt/gstqtsink.cc:
+	  qtsink: explicitely fallthrough switch statement
+	  In case ret is False, fallthrough to default case.
+	  CID #1320705
+
+2015-08-28 16:13:16 +0100  Luis de Bethencourt <luis@debethencourt.com>
+
+	* gst/videoparsers/gstvc1parse.c:
+	  vc1parse: add break to switch case
+	  Even though all cases inside VC1_STREAM_FORMAT_ASF are goto or
+	  g_assert_not_reached(), add a break at the end to appease Coverity.
+	  CID #1320706
+
+2015-09-28 20:56:56 +0200  Arnaud Vrac <avrac@freebox.fr>
+
+	* ext/assrender/gstassrender.c:
+	  assrender: fix leak of tag samples in the tag list
+	  Move handling of a GstSample in a separate function, and unref the
+	  sample after calling it. libass copies the font data so we don't need to
+	  keep it around.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=755759
+
+2015-09-28 20:30:17 +0200  Arnaud Vrac <avrac@freebox.fr>
+
+	* ext/assrender/gstassrender.c:
+	  assrender: fix gap event leak and invalid return value
+	  We don't want the gap event to be forwarded
+	  https://bugzilla.gnome.org/show_bug.cgi?id=755759
+
+2015-09-29 16:17:22 +1000  Matthew Waters <matthew@centricular.com>
+
+	* sys/nvenc/gstnvbaseenc.c:
+	  nvenc: call the parent class on GstElement::set_context
+
+2015-09-17 16:59:16 +1000  Matthew Waters <matthew@centricular.com>
+
+	* gst-libs/gst/gl/eagl/gstglcontext_eagl.m:
+	  gl/eagl: use the default GL context debug category
+
+2015-07-30 16:42:38 +1000  Matthew Waters <matthew@centricular.com>
+
+	* configure.ac:
+	* sys/Makefile.am:
+	* sys/nvenc/Makefile.am:
+	* sys/nvenc/README:
+	* sys/nvenc/TODO:
+	* sys/nvenc/gstnvbaseenc.c:
+	* sys/nvenc/gstnvbaseenc.h:
+	* sys/nvenc/gstnvenc.c:
+	* sys/nvenc/gstnvenc.h:
+	* sys/nvenc/gstnvh264enc.c:
+	* sys/nvenc/gstnvh264enc.h:
+	  Add Nvidia based hardware encoder element
+	  Currently only h264 is supported
+	  https://bugzilla.gnome.org/show_bug.cgi?id=753405
+
+2015-09-29 00:25:00 +1000  Matthew Waters <matthew@centricular.com>
+
+	* ext/gtk/gstgtkbasesink.c:
+	  gtk: fix assertion when the element has no peer
+	  When proxying keyboard/navigation/mouse events, only unref a successfully
+	  retreived peer pad.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=755738
+
+2015-09-28 15:30:30 +0200  Stefan Sauer <ensonic@users.sf.net>
+
+	* configure.ac:
+	* gst/midi/Makefile.am:
+	* gst/midi/alsamidisrc.c:
+	* gst/midi/alsamidisrc.h:
+	* gst/midi/midi.c:
+	  Revert "midi: add an ALSA MIDI sequencer source"
+	  This reverts commit cd7f4e524718a2f75467852235e4e13d64d2ac82.
+
+2015-09-28 22:31:09 +1000  Matthew Waters <matthew@centricular.com>
+
+	* gst-libs/gst/gl/gstglutils.c:
+	  gl: set the context on the element on a context query
+	  Otherwise it's possible to lose the context information if the
+	  context is only propagated through queries.
+
+2015-09-28 22:20:29 +1000  Matthew Waters <matthew@centricular.com>
+
+	* ext/gl/caopengllayersink.m:
+	* ext/gl/gstglbasemixer.c:
+	* ext/gl/gstglimagesink.c:
+	* ext/gl/gstglstereosplit.c:
+	* ext/gl/gstgltestsrc.c:
+	* gst-libs/gst/gl/gstglbasefilter.c:
+	  gl: chain up to the parent class for GstElement::set_context
+	  https://bugzilla.gnome.org/show_bug.cgi?id=705579
+
+2015-08-07 15:28:54 +0200  Antonio Ospite <ao2@ao2.it>
+
+	* configure.ac:
+	* gst/midi/Makefile.am:
+	* gst/midi/alsamidisrc.c:
+	* gst/midi/alsamidisrc.h:
+	* gst/midi/midi.c:
+	  midi: add an ALSA MIDI sequencer source
+	  The alsamidisrc element allows to get input event from ALSA MIDI
+	  sequencer devices, and possibly convert them to sound using some
+	  downstream element like fluiddec.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=738687
+
+2015-08-28 16:35:39 +0100  Luis de Bethencourt <luis@debethencourt.com>
+
+	* ext/qt/qtitem.cc:
+	  qml: remove overwritten value
+	  Value in tex is overwritten before being used. Removing it.
+	  CID 1320715
+	  https://bugzilla.gnome.org/show_bug.cgi?id=754253
+
+2015-09-02 23:45:07 +1000  Matthew Waters <matthew@centricular.com>
+
+	* configure.ac:
+	* ext/qt/Makefile.am:
+	* ext/qt/gstqsgtexture.h:
+	* ext/qt/gstqtgl.h:
+	* ext/qt/qtitem.cc:
+	* ext/qt/qtitem.h:
+	  qt: add support for building/running on android
+	  Including:
+	  - Necessary configure checks
+	  - Necessary compile time platform checks
+	  - Necessary runtime qt android platform detection
+	  - Escaping GLsync definition with Qt's GLES2 implementation
+	  https://bugzilla.gnome.org/show_bug.cgi?id=754466
+
+2015-09-02 23:40:31 +1000  Matthew Waters <matthew@centricular.com>
+
+	* ext/qt/Makefile.am:
+	  qt: don't use CPPFLAGS for tools that cannot use them
+	  For example moc will bail out when given arguments it does not
+	  know about.  The moc specific MOC_CPPFLAGS can still be used
+	  to pass flags to moc.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=754466
+
+2015-09-02 23:39:54 +1000  Matthew Waters <matthew@centricular.com>
+
+	* ext/qt/Makefile.am:
+	  qt: rename library to include gst prefix
+	  libqtsink -> libgstqtsink
+	  https://bugzilla.gnome.org/show_bug.cgi?id=754466
+
+2015-08-31 19:21:54 +1000  Matthew Waters <matthew@centricular.com>
+
+	* ext/gl/gstglimagesink.c:
+	* gst-libs/gst/gl/gstglbasefilter.c:
+	* gst-libs/gst/gl/gstglcolorconvert.c:
+	* gst-libs/gst/gl/gstglfilter.c:
+	  gl: sprinkle some debug markers to ease debugging
+
+2015-08-31 19:18:23 +1000  Matthew Waters <matthew@centricular.com>
+
+	* gst-libs/gst/gl/gstglutils.c:
+	* gst-libs/gst/gl/gstglutils.h:
+	  gl/utils: add a function to insert a debug marker
+	  These markers are visible in tools that record the GL function calls
+	  such as apitrace, et al.
+	  Makes it easier to match up GL draw commands with specific elements.
+
+2015-08-31 19:17:21 +1000  Matthew Waters <matthew@centricular.com>
+
+	* gst-libs/gst/gl/glprototypes/debug.h:
+	  gl: add some debugging prototypes
+
+2015-09-26 19:19:50 +1000  Matthew Waters <matthew@centricular.com>
+
+	* docs/libs/gst-plugins-bad-libs-sections.txt:
+	* gst-libs/gst/gl/android/gstglwindow_android_egl.c:
+	* gst-libs/gst/gl/cocoa/gstglwindow_cocoa.m:
+	* gst-libs/gst/gl/eagl/gstglwindow_eagl.m:
+	* gst-libs/gst/gl/gstglwindow.c:
+	* gst-libs/gst/gl/gstglwindow.h:
+	* gst-libs/gst/gl/wayland/gstglwindow_wayland_egl.c:
+	* gst-libs/gst/gl/win32/gstglwindow_win32.c:
+	* gst-libs/gst/gl/x11/gstglwindow_x11.c:
+	  glwindow: remove unused draw_unlocked function
+	  The functionality is provided by draw anyway and is leftover from
+	  X11's specific threading requirements that no longer apply.
+
+2015-09-27 13:07:19 +1000  Jan Schmidt <jan@centricular.com>
+
+	* ext/resindvd/gstmpegdemux.c:
+	  resindvd: Send gap updates to the segment stop during stills
+	  Ignore the normal gap threshold for laggy streams and
+	  immediately catch all streams up to the end of the segment
+	  when processing gap updates for a segment during a
+	  still frame sequence.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=755680
+
+2015-09-27 00:24:24 +1000  Jan Schmidt <jan@centricular.com>
+
+	* gst/dvdspu/Makefile.am:
+	* gst/dvdspu/gstdvdspu-render.c:
+	* gst/dvdspu/gstdvdspu.c:
+	* gst/dvdspu/gstdvdspu.h:
+	* gst/dvdspu/gstspu-common.h:
+	* gst/dvdspu/gstspu-pgs.c:
+	* gst/dvdspu/gstspu-pgs.h:
+	* gst/dvdspu/gstspu-vobsub-render.c:
+	* gst/dvdspu/gstspu-vobsub.c:
+	* gst/dvdspu/gstspu-vobsub.h:
+	  Revert "dvdspu: render to AYUV overlay"
+	  This reverts commit 5016a73190595505dc38b54f8f9a08c4f180f3a6.
+
+2015-09-27 00:24:23 +1000  Jan Schmidt <jan@centricular.com>
+
+	* gst/dvdspu/gstdvdspu.c:
+	* gst/dvdspu/gstspu-common.h:
+	* gst/dvdspu/gstspu-pgs.c:
+	* gst/dvdspu/gstspu-vobsub-render.c:
+	  Revert "dvdspu: render to ARGB overlay instead of AYUV"
+	  This reverts commit dd3e9deb2aa695a391b58f24d86a3c00bbc1258a.
+
+2015-09-27 00:24:17 +1000  Jan Schmidt <jan@centricular.com>
+
+	* gst/dvdspu/gstspu-vobsub.c:
+	* gst/dvdspu/gstspu-vobsub.h:
+	  Revert "dvdspu: handle frame size event from upstream"
+	  This reverts commit 46aaaa6c309b8a8f6e218142fd5944f5d24f095c.
+
+2015-09-27 00:24:17 +1000  Jan Schmidt <jan@centricular.com>
+
+	* gst/dvdspu/gstdvdspu.c:
+	* gst/dvdspu/gstdvdspu.h:
+	  Revert "dvdspu: cache overlay composition"
+	  This reverts commit aabb8a1a68372f750c63b9b6586e18e829745774.
+
+2015-09-27 00:24:15 +1000  Jan Schmidt <jan@centricular.com>
+
+	* gst/dvdspu/gstdvdspu.c:
+	* gst/dvdspu/gstdvdspu.h:
+	  Revert "dvdspu: improve negotiation of overlay composition"
+	  This reverts commit 1899e2a099932a7a734e7784c20b624517237e18.
+
+2015-09-18 19:07:47 +0200  Arnaud Vrac <avrac@freebox.fr>
+
+	* gst/dvdspu/gstspu-pgs.c:
+	  dvdspu: fix pgs palette colors
+	  U and V were inverted
+	  https://bugzilla.gnome.org/show_bug.cgi?id=755239
+
+2014-08-27 16:47:22 +0200  Arnaud Vrac <avrac@freebox.fr>
+
+	* gst/dvdspu/gstdvdspu.c:
+	* gst/dvdspu/gstdvdspu.h:
+	  dvdspu: improve negotiation of overlay composition
+	  Support negotiating GstVideoOverlayComposition downstream
+	  while not providing it upstream.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=663750
+
+2013-09-02 17:48:50 +0200  Arnaud Vrac <avrac@freebox.fr>
+
+	* gst/dvdspu/gstdvdspu.c:
+	* gst/dvdspu/gstdvdspu.h:
+	  dvdspu: cache overlay composition
+	  This avoids rendering the overlay buffer for each video frame.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=663750
+
+2013-08-30 22:08:01 +0200  Arnaud Vrac <avrac@freebox.fr>
+
+	* gst/dvdspu/gstspu-vobsub.c:
+	* gst/dvdspu/gstspu-vobsub.h:
+	  dvdspu: handle frame size event from upstream
+	  An IDX file or codec_data normally contains the original frame size of
+	  the video. Allow upstream to provide this information by sending a
+	  custom event, which will allow scaling the overlay correctly.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=663750
+
+2013-12-05 21:59:18 +0100  Arnaud Vrac <avrac@freebox.fr>
+
+	* gst/dvdspu/gstdvdspu.c:
+	  dvdspu: allow suffix in dvd event name to allow multiple sticky dvd events
+	  https://bugzilla.gnome.org/show_bug.cgi?id=663750
+
+2015-04-07 14:38:08 +0200  Arnaud Vrac <avrac@freebox.fr>
+
+	* gst/dvdspu/gstdvdspu.c:
+	* gst/dvdspu/gstspu-common.h:
+	* gst/dvdspu/gstspu-pgs.c:
+	* gst/dvdspu/gstspu-vobsub-render.c:
+	  dvdspu: render to ARGB overlay instead of AYUV
+	  https://bugzilla.gnome.org/show_bug.cgi?id=663750
+
+2013-01-23 17:59:01 +0100  Arnaud Vrac <avrac@freebox.fr>
+
+	* gst/dvdspu/Makefile.am:
+	* gst/dvdspu/gstdvdspu-render.c:
+	* gst/dvdspu/gstdvdspu.c:
+	* gst/dvdspu/gstdvdspu.h:
+	* gst/dvdspu/gstspu-common.h:
+	* gst/dvdspu/gstspu-pgs.c:
+	* gst/dvdspu/gstspu-pgs.h:
+	* gst/dvdspu/gstspu-vobsub-render.c:
+	* gst/dvdspu/gstspu-vobsub.c:
+	* gst/dvdspu/gstspu-vobsub.h:
+	  dvdspu: render to AYUV overlay
+	  Instead of only supporting writing SPU data directly to YUV frames,
+	  render the SPU data to an intermediate AYUV overlay buffer. The overlay
+	  data is then attached to the video frame if downstream supports overlay
+	  composition, otherwise the AYUV overlay is blended to the video frame.
+	  For the PGS format, the overlay buffer size is set to the size of the
+	  Composition Window, and its position in the overlay composition is set
+	  to the window position. The objects to render are now cropped when the
+	  cropping flag is set.
+	  For the Vobsub format, the overlay buffer size is set to the size of the
+	  Display Area.
+	  Once rendered, the overlay composition rectangle is now moved and scaled
+	  to fit the video output size, to avoid clipping.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=663750
+
+2013-09-02 17:07:49 +0200  Arnaud Vrac <avrac@freebox.fr>
+
+	* gst/dvdspu/gstdvdspu.c:
+	  dvdspu: pass dvdspu argument to set_caps functions
+	  https://bugzilla.gnome.org/show_bug.cgi?id=663750
+
+2015-09-18 19:15:45 +0200  Arnaud Vrac <avrac@freebox.fr>
+
+	* gst/dvdspu/gstspu-pgs.c:
+	  dvdspu: skip unneeded reading of RLE data
+	  The RLE data was being read for dumping the SPU image even when the
+	  DUMP_FULL_IMAGE macro was not set.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=663750
+
+2015-08-29 19:16:38 +0530  Nirbheek Chauhan <nirbheek@centricular.com>
+
+	* tests/check/elements/compositor.c:
+	  check: Add test for videoaggregator sinkpads being sorted by zorder
+	  https://bugzilla.gnome.org/show_bug.cgi?id=754285
+
+2015-09-26 10:21:41 +0100  Tim-Philipp Müller <tim@centricular.com>
+
+	* gst/audiomixer/gstaudioaggregator.c:
+	  audiomixer: fix deadlock when G_DISABLE_ASSERT is not defined
+	  This makes the audiomixer unit test time out in master.
+	  Broke with 587e7c4
+
+2015-09-26 10:49:31 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+	* tests/check/elements/dash_mpd.c:
+	  dash: Fix unit test after internal API change
+
+2015-08-25 17:39:30 +0900  Jimmy Ohn <yongjin.ohn@lge.com>
+
+	* ext/sndfile/gstsfdec.c:
+	  sfdec: Fix typo in goto variable name
+	  https://bugzilla.gnome.org/show_bug.cgi?id=754057
+
+2015-08-18 14:16:11 +0100  Chris Bass <floobleflam@gmail.com>
+
+	* ext/dash/gstdashdemux.c:
+	* ext/dash/gstdashdemux.h:
+	* ext/dash/gstmpdparser.c:
+	* ext/dash/gstmpdparser.h:
+	  dashdemux: create src pads for subtitle streams.
+	  Create src pads for Representations that contain timed-text subtitles,
+	  both when the subtitles are encapsulated in ISO BMFF (i.e., the
+	  Representation has mimeType "application/mp4") and when they are
+	  unencapsulated (i.e., the Representation has mimeType
+	  "application/ttml+xml").
+	  https://bugzilla.gnome.org/show_bug.cgi?id=747774
+
+2015-09-26 00:17:55 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+	* gst/audiomixer/gstaudioaggregator.c:
+	  audioaggregator: Stop using deprecated gst_segment_to_position()
+
+2015-08-31 16:12:40 +0300  Sebastian Dröge <sebastian@centricular.com>
+
+	* gst-libs/gst/base/gstaggregator.c:
+	  aggregator: Don't forward QOS events to sinkpads that had no buffer yet
+	  Otherwise they will receive a QOS event that has earliest_time=0 (because we
+	  can't have negative timestamps), and consider their buffer as too late
+	  https://bugzilla.gnome.org/show_bug.cgi?id=754356
+
 2015-09-22 16:17:38 +0200  Sebastian Dröge <sebastian@centricular.com>
 
 	* ext/dash/gstdashdemux.c:
@@ -798,124 +10563,10 @@
 	  mpdparser: If no Initialization is present in the SegmentBase, assume it is before the indexRange
 	  https://bugzilla.gnome.org/show_bug.cgi?id=755132
 
-2015-09-16 12:50:46 +0200  Philippe Normand <philn@igalia.com>
+2015-09-25 23:51:20 +0200  Sebastian Dröge <sebastian@centricular.com>
 
-	* ext/smoothstreaming/gstmssdemux.c:
-	  mssdemux: activate streams before configuring bitrate
-	  Doing the contrary has no effect and the consequence is that playback
-	  will start with the lowest bitrate even if we can already handle
-	  higher bitrate.
-	  https://bugzilla.gnome.org/show_bug.cgi?id=755108
-
-2015-09-03 15:11:00 +0200  Philippe Normand <philn@igalia.com>
-
-	* ext/smoothstreaming/gstmssmanifest.c:
-	  mssdemux: always use timescale for gst timestamp calculation
-	  Not doing this can lead the demuxer to attempt downloading fragments
-	  for an invalid start time. The server would then send a HTTP
-	  Precondition failed error, the demuxer would try some more times to
-	  download the invalid fragment and eventually error out.
-	  https://bugzilla.gnome.org/show_bug.cgi?id=754523
-
-2015-09-30 08:36:15 +0200  Antoine Jacoutot <ajacoutot@gnome.org>
-
-	* gst-libs/gst/gl/Makefile.am:
-	  gl: Pass GL_CFLAGS to g-ir-scanner
-	  This unbreaks building when some headers are under a non-standard path.
-	  e.g. /usr/X11R6/include as on OpenBSD.
-	  https://bugzilla.gnome.org/show_bug.cgi?id=755850
-
-2015-09-30 00:44:16 -0700  Aleix Conchillo Flaqué <aleix@oblong.com>
-
-	* sys/applemedia/Makefile.am:
-	  applemedia: dist missing header files
-	  https://bugzilla.gnome.org/show_bug.cgi?id=755852
-
-2015-09-30 13:13:19 +0900  Vineeth TM <vineeth.tm@samsung.com>
-
-	* tests/check/elements/audiointerleave.c:
-	  audiointerleave: typecast bit-mask to guint64 to fix segmentation fault
-	  While creating caps in audiointerleave tests, bitmask is being set as 0x9
-	  This is resulting in segmentation fault. Fix the same by typecasting to guint64
-	  https://bugzilla.gnome.org/show_bug.cgi?id=755840
-
-2015-09-30 00:36:14 +0100  Tim-Philipp Müller <tim@centricular.com>
-
-	* gst/mpegtsmux/mpegtsmux.c:
-	  mpegtsmux: fix downstream key unit events handling with hlssink
-	  The buffer timestamps in the collect function will already be
-	  running time, don't try to convert them again to running time,
-	  this would yield CLOCK_TIME_NONE now that the segment is shifted
-	  to account for negative dts.
-	  This fixes x264enc ! mpegtsmux ! hlssink, which was broken
-	  because mpegtsmux would send a downstream key unit event with
-	  running time NONE and then hlssink would immediately send
-	  another one upstream and it would just be a flood of force
-	  keyframe events in both directions after the first one. This
-	  would then break hlssink because it uses multifilesink in
-	  next-file=key-unit-event mode, and starting a new file after
-	  every few kB does not work well for HLS.
-
-2015-09-29 13:31:18 +0100  Tim-Philipp Müller <tim@centricular.com>
-
-	* gst-libs/gst/video/gstvideoaggregator.c:
-	  videoaggregator: fix compilation with older glib version
-	  Remove weird use of private gtype defines and fix compilation
-	  with older glib versions such as 2.36.
-	  https://bugzilla.gnome.org/show_bug.cgi?id=755754
-
-2015-09-28 20:56:56 +0200  Arnaud Vrac <avrac@freebox.fr>
-
-	* ext/assrender/gstassrender.c:
-	  assrender: fix leak of tag samples in the tag list
-	  Move handling of a GstSample in a separate function, and unref the
-	  sample after calling it. libass copies the font data so we don't need to
-	  keep it around.
-	  https://bugzilla.gnome.org/show_bug.cgi?id=755759
-
-2015-09-28 20:30:17 +0200  Arnaud Vrac <avrac@freebox.fr>
-
-	* ext/assrender/gstassrender.c:
-	  assrender: fix gap event leak and invalid return value
-	  We don't want the gap event to be forwarded
-	  https://bugzilla.gnome.org/show_bug.cgi?id=755759
-
-2015-09-17 16:59:16 +1000  Matthew Waters <matthew@centricular.com>
-
-	* gst-libs/gst/gl/eagl/gstglcontext_eagl.m:
-	  gl/eagl: use the default GL context debug category
-
-2015-09-29 00:25:00 +1000  Matthew Waters <matthew@centricular.com>
-
-	* ext/gtk/gstgtkbasesink.c:
-	  gtk: fix assertion when the element has no peer
-	  When proxying keyboard/navigation/mouse events, only unref a successfully
-	  retreived peer pad.
-	  https://bugzilla.gnome.org/show_bug.cgi?id=755738
-
-2015-09-27 13:07:19 +1000  Jan Schmidt <jan@centricular.com>
-
-	* ext/resindvd/gstmpegdemux.c:
-	  resindvd: Send gap updates to the segment stop during stills
-	  Ignore the normal gap threshold for laggy streams and
-	  immediately catch all streams up to the end of the segment
-	  when processing gap updates for a segment during a
-	  still frame sequence.
-	  https://bugzilla.gnome.org/show_bug.cgi?id=755680
-
-2015-09-18 19:07:47 +0200  Arnaud Vrac <avrac@freebox.fr>
-
-	* gst/dvdspu/gstspu-pgs.c:
-	  dvdspu: fix pgs palette colors
-	  U and V were inverted
-	  https://bugzilla.gnome.org/show_bug.cgi?id=755239
-
-2015-09-26 10:21:41 +0100  Tim-Philipp Müller <tim@centricular.com>
-
-	* gst/audiomixer/gstaudioaggregator.c:
-	  audiomixer: fix deadlock when G_DISABLE_ASSERT is not defined
-	  This makes the audiomixer unit test time out in master.
-	  Broke with 587e7c4
+	* configure.ac:
+	  Back to development
 
 === release 1.6.0 ===
 
diff --git a/Makefile.am b/Makefile.am
index e93ec1f..6fa225a 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -53,8 +53,11 @@
 	$(top_builddir)/common/shave \
 	$(top_builddir)/common/shave-libtool \
 	$(top_builddir)/ext/alsaspdif/.libs/*.{so,dll,DLL,dylib} \
+	$(top_builddir)/ext/hls/.libs/libgstfragmented* \
 	$(top_builddir)/ext/ivorbis/.libs/*.{so,dll,DLL,dylib} \
 	$(top_builddir)/ext/jack/.libs/*.{so,dll,DLL,dylib} \
+	$(top_builddir)/gst/opus/.libs/libgstopus.{so,dll,DLL,dylib} \
+	$(top_builddir)/ext/mpg123/.libs/*.{so,dll,DLL,dylib} \
 	$(top_builddir)/gst/aacparse/.libs/*.{so,dll,DLL,dylib} \
 	$(top_builddir)/gst/amrparse/.libs/*.{so,dll,DLL,dylib} \
 	$(top_builddir)/gst/audioparsers/.libs/*.{so,dll,DLL,dylib} \
@@ -62,6 +65,7 @@
 	$(top_builddir)/gst/imagefreeze/.libs/*.{so,dll,DLL,dylib} \
 	$(top_builddir)/gst/mpeg4videoparse/.libs/*.{so,dll,DLL,dylib} \
 	$(top_builddir)/gst/qtmux/.libs/*.{so,dll,DLL,dylib} \
+	$(top_builddir)/gst/rtp/.libs/*.{so,dll,DLL,dylib} \
 	$(top_builddir)/gst/rtpmux/.libs/*.{so,dll,DLL,dylib} \
 	$(top_builddir)/gst/rtpvp8/.libs/*.{so,dll,DLL,dylib} \
 	$(top_builddir)/gst/scaletempo/.libs/*.{so,dll,DLL,dylib} \
@@ -96,10 +100,12 @@
 	$(top_srcdir)/gst/hls \
 	$(top_srcdir)/gst/imagefreeze \
 	$(top_srcdir)/gst/invtelecine \
+	$(top_srcdir)/gst/liveadder \
 	$(top_srcdir)/gst/mpeg4videoparse \
 	$(top_srcdir)/gst/qtmux \
 	$(top_srcdir)/gst/rtpmux \
 	$(top_srcdir)/gst/rtpvp8 \
+	$(top_srcdir)/gst/rtp \
 	$(top_srcdir)/gst/scaletempo \
 	$(top_srcdir)/gst/selector \
 	$(top_srcdir)/gst/shapewipe \
@@ -118,6 +124,7 @@
 	$(top_srcdir)/ext/ivorbis \
 	$(top_srcdir)/ext/jack \
 	$(top_srcdir)/ext/metadata \
+	$(top_srcdir)/ext/mpg123 \
 	$(top_srcdir)/ext/swfdec \
 	$(top_srcdir)/ext/tarkin \
 	$(top_srcdir)/ext/theora \
diff --git a/Makefile.in b/Makefile.in
index 19b0b5a..3c22316 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -125,16 +125,15 @@
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
 	$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
-	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gsettings.m4 \
-	$(top_srcdir)/m4/gst-fionread.m4 $(top_srcdir)/m4/gst-sdl.m4 \
-	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
-	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
-	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libgcrypt.m4 \
-	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
-	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
-	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
-	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
-	$(top_srcdir)/configure.ac
+	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gst-fionread.m4 \
+	$(top_srcdir)/m4/gst-sdl.m4 $(top_srcdir)/m4/iconv.m4 \
+	$(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \
+	$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
+	$(top_srcdir)/m4/libgcrypt.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
+	$(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 DIST_COMMON = $(srcdir)/Makefile.am $(top_srcdir)/configure \
@@ -208,7 +207,7 @@
 	$(top_srcdir)/common/release.mak \
 	$(top_srcdir)/common/win32.mak ABOUT-NLS AUTHORS COPYING \
 	COPYING.LIB ChangeLog INSTALL NEWS README compile config.guess \
-	config.rpath config.sub depcomp install-sh ltmain.sh missing
+	config.rpath config.sub install-sh ltmain.sh missing
 DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
 distdir = $(PACKAGE)-$(VERSION)
 top_distdir = $(distdir)
@@ -286,6 +285,8 @@
 CLUTTER_X11_LIBS = @CLUTTER_X11_LIBS@
 CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
+CUDA_CFLAGS = @CUDA_CFLAGS@
+CUDA_LIBS = @CUDA_LIBS@
 CURL_CFLAGS = @CURL_CFLAGS@
 CURL_LIBS = @CURL_LIBS@
 CXX = @CXX@
@@ -323,6 +324,8 @@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
+EGL_CFLAGS = @EGL_CFLAGS@
+EGL_LIBS = @EGL_LIBS@
 EGREP = @EGREP@
 ERROR_CFLAGS = @ERROR_CFLAGS@
 ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
@@ -331,7 +334,6 @@
 EXIF_CFLAGS = @EXIF_CFLAGS@
 EXIF_LIBS = @EXIF_LIBS@
 FAAC_LIBS = @FAAC_LIBS@
-FAAD_IS_NEAAC = @FAAD_IS_NEAAC@
 FAAD_LIBS = @FAAD_LIBS@
 FFLAGS = @FFLAGS@
 FGREP = @FGREP@
@@ -350,8 +352,9 @@
 GIO_LIBS = @GIO_LIBS@
 GIO_UNIX_CFLAGS = @GIO_UNIX_CFLAGS@
 GIO_UNIX_LIBS = @GIO_UNIX_LIBS@
+GLES2_CFLAGS = @GLES2_CFLAGS@
+GLES2_LIBS = @GLES2_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
-GLIB_COMPILE_SCHEMAS = @GLIB_COMPILE_SCHEMAS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
@@ -368,16 +371,17 @@
 GMODULE_NO_EXPORT_LIBS = @GMODULE_NO_EXPORT_LIBS@
 GMSGFMT = @GMSGFMT@
 GMSGFMT_015 = @GMSGFMT_015@
+GNUSTL_CFLAGS = @GNUSTL_CFLAGS@
+GNUSTL_LIBS = @GNUSTL_LIBS@
 GRAPHENE_CFLAGS = @GRAPHENE_CFLAGS@
 GRAPHENE_LIBS = @GRAPHENE_LIBS@
 GREP = @GREP@
-GSETTINGS_CFLAGS = @GSETTINGS_CFLAGS@
-GSETTINGS_DISABLE_SCHEMAS_COMPILE = @GSETTINGS_DISABLE_SCHEMAS_COMPILE@
-GSETTINGS_LIBS = @GSETTINGS_LIBS@
 GSM_LIBS = @GSM_LIBS@
 GSTPB_PLUGINS_DIR = @GSTPB_PLUGINS_DIR@
 GSTPB_PREFIX = @GSTPB_PREFIX@
 GST_AGE = @GST_AGE@
+GST_ALLOCATORS_CFLAGS = @GST_ALLOCATORS_CFLAGS@
+GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
 GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
 GST_API_VERSION = @GST_API_VERSION@
 GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
@@ -403,6 +407,8 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PBUTILS_CFLAGS = @GST_PBUTILS_CFLAGS@
+GST_PBUTILS_LIBS = @GST_PBUTILS_LIBS@
 GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BAD_CFLAGS = @GST_PLUGINS_BAD_CFLAGS@
@@ -428,6 +434,8 @@
 GST_PREFIX = @GST_PREFIX@
 GST_REVISION = @GST_REVISION@
 GST_TOOLS_DIR = @GST_TOOLS_DIR@
+GST_VIDEO_CFLAGS = @GST_VIDEO_CFLAGS@
+GST_VIDEO_LIBS = @GST_VIDEO_LIBS@
 GTK3_CFLAGS = @GTK3_CFLAGS@
 GTK3_GL_CFLAGS = @GTK3_GL_CFLAGS@
 GTK3_GL_LIBS = @GTK3_GL_LIBS@
@@ -529,6 +537,7 @@
 LTLIBICONV = @LTLIBICONV@
 LTLIBINTL = @LTLIBINTL@
 LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
 MANIFEST_TOOL = @MANIFEST_TOOL@
@@ -542,8 +551,6 @@
 MODPLUG_LIBS = @MODPLUG_LIBS@
 MPEG2ENC_CFLAGS = @MPEG2ENC_CFLAGS@
 MPEG2ENC_LIBS = @MPEG2ENC_LIBS@
-MPG123_CFLAGS = @MPG123_CFLAGS@
-MPG123_LIBS = @MPG123_LIBS@
 MPLEX_CFLAGS = @MPLEX_CFLAGS@
 MPLEX_LDFLAGS = @MPLEX_LDFLAGS@
 MPLEX_LIBS = @MPLEX_LIBS@
@@ -559,6 +566,8 @@
 NETTLE_LIBS = @NETTLE_LIBS@
 NM = @NM@
 NMEDIT = @NMEDIT@
+NVENCODE_CFLAGS = @NVENCODE_CFLAGS@
+NVENCODE_LIBS = @NVENCODE_LIBS@
 OBJC = @OBJC@
 OBJCDEPMODE = @OBJCDEPMODE@
 OBJCFLAGS = @OBJCFLAGS@
@@ -616,16 +625,18 @@
 PYTHON_PLATFORM = @PYTHON_PLATFORM@
 PYTHON_PREFIX = @PYTHON_PREFIX@
 PYTHON_VERSION = @PYTHON_VERSION@
+QT_ANDROID_CFLAGS = @QT_ANDROID_CFLAGS@
+QT_ANDROID_LIBS = @QT_ANDROID_LIBS@
 QT_CFLAGS = @QT_CFLAGS@
 QT_LIBS = @QT_LIBS@
+QT_MAC_CFLAGS = @QT_MAC_CFLAGS@
+QT_MAC_LIBS = @QT_MAC_LIBS@
 QT_WAYLAND_CFLAGS = @QT_WAYLAND_CFLAGS@
 QT_WAYLAND_LIBS = @QT_WAYLAND_LIBS@
 QT_X11_CFLAGS = @QT_X11_CFLAGS@
 QT_X11_LIBS = @QT_X11_LIBS@
 RANLIB = @RANLIB@
 RCC = @RCC@
-RSVG_2_36_2_CFLAGS = @RSVG_2_36_2_CFLAGS@
-RSVG_2_36_2_LIBS = @RSVG_2_36_2_LIBS@
 RSVG_CFLAGS = @RSVG_CFLAGS@
 RSVG_LIBS = @RSVG_LIBS@
 RTMP_CFLAGS = @RTMP_CFLAGS@
@@ -677,6 +688,7 @@
 VOAACENC_LIBS = @VOAACENC_LIBS@
 VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
 VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VULKAN_LIBS = @VULKAN_LIBS@
 WARNING_CFLAGS = @WARNING_CFLAGS@
 WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
 WARNING_OBJCFLAGS = @WARNING_OBJCFLAGS@
@@ -687,6 +699,7 @@
 WAYLAND_LIBS = @WAYLAND_LIBS@
 WEBP_CFLAGS = @WEBP_CFLAGS@
 WEBP_LIBS = @WEBP_LIBS@
+WGET = @WGET@
 WILDMIDI_CFLAGS = @WILDMIDI_CFLAGS@
 WILDMIDI_LIBS = @WILDMIDI_LIBS@
 WINKS_LIBS = @WINKS_LIBS@
@@ -696,6 +709,8 @@
 X11_LIBS = @X11_LIBS@
 X265_CFLAGS = @X265_CFLAGS@
 X265_LIBS = @X265_LIBS@
+XCB_CFLAGS = @XCB_CFLAGS@
+XCB_LIBS = @XCB_LIBS@
 XCOMPOSITE_CFLAGS = @XCOMPOSITE_CFLAGS@
 XCOMPOSITE_LIBS = @XCOMPOSITE_LIBS@
 XGETTEXT = @XGETTEXT@
@@ -733,7 +748,6 @@
 docdir = @docdir@
 dvidir = @dvidir@
 exec_prefix = @exec_prefix@
-gsettingsschemadir = @gsettingsschemadir@
 host = @host@
 host_alias = @host_alias@
 host_cpu = @host_cpu@
@@ -808,8 +822,11 @@
 	$(top_builddir)/common/shave \
 	$(top_builddir)/common/shave-libtool \
 	$(top_builddir)/ext/alsaspdif/.libs/*.{so,dll,DLL,dylib} \
+	$(top_builddir)/ext/hls/.libs/libgstfragmented* \
 	$(top_builddir)/ext/ivorbis/.libs/*.{so,dll,DLL,dylib} \
 	$(top_builddir)/ext/jack/.libs/*.{so,dll,DLL,dylib} \
+	$(top_builddir)/gst/opus/.libs/libgstopus.{so,dll,DLL,dylib} \
+	$(top_builddir)/ext/mpg123/.libs/*.{so,dll,DLL,dylib} \
 	$(top_builddir)/gst/aacparse/.libs/*.{so,dll,DLL,dylib} \
 	$(top_builddir)/gst/amrparse/.libs/*.{so,dll,DLL,dylib} \
 	$(top_builddir)/gst/audioparsers/.libs/*.{so,dll,DLL,dylib} \
@@ -817,6 +834,7 @@
 	$(top_builddir)/gst/imagefreeze/.libs/*.{so,dll,DLL,dylib} \
 	$(top_builddir)/gst/mpeg4videoparse/.libs/*.{so,dll,DLL,dylib} \
 	$(top_builddir)/gst/qtmux/.libs/*.{so,dll,DLL,dylib} \
+	$(top_builddir)/gst/rtp/.libs/*.{so,dll,DLL,dylib} \
 	$(top_builddir)/gst/rtpmux/.libs/*.{so,dll,DLL,dylib} \
 	$(top_builddir)/gst/rtpvp8/.libs/*.{so,dll,DLL,dylib} \
 	$(top_builddir)/gst/scaletempo/.libs/*.{so,dll,DLL,dylib} \
@@ -851,10 +869,12 @@
 	$(top_srcdir)/gst/hls \
 	$(top_srcdir)/gst/imagefreeze \
 	$(top_srcdir)/gst/invtelecine \
+	$(top_srcdir)/gst/liveadder \
 	$(top_srcdir)/gst/mpeg4videoparse \
 	$(top_srcdir)/gst/qtmux \
 	$(top_srcdir)/gst/rtpmux \
 	$(top_srcdir)/gst/rtpvp8 \
+	$(top_srcdir)/gst/rtp \
 	$(top_srcdir)/gst/scaletempo \
 	$(top_srcdir)/gst/selector \
 	$(top_srcdir)/gst/shapewipe \
@@ -873,6 +893,7 @@
 	$(top_srcdir)/ext/ivorbis \
 	$(top_srcdir)/ext/jack \
 	$(top_srcdir)/ext/metadata \
+	$(top_srcdir)/ext/mpg123 \
 	$(top_srcdir)/ext/swfdec \
 	$(top_srcdir)/ext/tarkin \
 	$(top_srcdir)/ext/theora \
@@ -1402,7 +1423,10 @@
 	  if test "x$$libso" != "x"; then \
 	    echo Checking symbols in $$libso; \
 	    if ! ($(top_srcdir)/common/check-exports $$libdef $$libso) ; then \
-	      fail=1; \
+	      echo "$$libdef"; \
+	      if test "$$libbase" != "libgstgl"; then \
+	        fail=1; \
+	      fi; \
 	    fi; \
 	  fi; \
 	done ; \
@@ -1446,6 +1470,9 @@
 	@if [ -d ../www/data/src ]; then \
 	  mv -v $(PACKAGE)-$(VERSION).tar.xz ../www/data/src/$(PACKAGE)/ ; \
 	  mv -v $(PACKAGE)-$(VERSION).tar.xz.sha256sum ../www/data/src/$(PACKAGE)/ ; \
+	elif [ -d ../../www/data/src ]; then \
+	  mv -v $(PACKAGE)-$(VERSION).tar.xz ../../www/data/src/$(PACKAGE)/ ; \
+	  mv -v $(PACKAGE)-$(VERSION).tar.xz.sha256sum ../../www/data/src/$(PACKAGE)/ ; \
 	fi
 	@echo "================================================================================================="
 
diff --git a/NEWS b/NEWS
index aa7c48e..dec122b 100644
--- a/NEWS
+++ b/NEWS
@@ -1,44 +1,2 @@
-This is GStreamer 1.6.3
-
-The GStreamer team is proud to announce the third bugfix release in the stable
-1.6 release series of your favourite cross-platform multimedia framework!
-
-This release only contains bugfixes and it is safe to update from 1.6.x. For a
-full list of bugfixes see Bugzilla:
-  https://bugzilla.gnome.org/buglist.cgi?bug_status=RESOLVED&bug_status=VERIFIED&limit=0&list_id=91562&order=bug_id&product=GStreamer&resolution=FIXED&target_milestone=1.6.3
-
-See http://gstreamer.freedesktop.org/releases/1.6/ for the latest version of this document.
-
-Major bugfixes
-
-- Fix regression in GL library that made glimagesink unsable on Android
-- Integer arithmetic overflow in queue2 element that could break buffering or
-  cause crashes due to NULL pointer dereference
-- Fix crash in AAC/ADTS typefinder caused by reading more memory than is
-  available
-- Stop ignoring encoder errors in the VP8/VP9 encoders
-- Deprecate GstVideoEncoder GST_VIDEO_ENCODER_FLOW_DROPPED. It's redudant and
-  was never actually implemented
-- Ensure to store the correct video info in GstVideoBufferPool
-- Fix caps in rtspsrc when doing SRTP over interleaved TCP
-- Fix crash in pcap parser on 0-sized packets
-- Clear EOS flag in appsrc to allow reuse after EOS and flushing
-- Ignore flushing streams in streamsynchronizer during stream switches to fix
-  problems caused by this in gst-editing-services
-- Ignore tags and other metadata in WAV files after the "data" chunk in PUSH
-  mode to prevent them from being interpreted as audio
-- Correctly use colorimetry in v4l2 only for YUV color formats
-- Set reserved bits in MPEG TS muxer to 1s
-- Fix calculation of SBC frame lengths
-- Fix output of the RTP JPEG2000 depayloader to have one frame per buffer
-  and crash in the OpenJPEG decoder on incomplete frames
-- Update ffmpeg snapshot in gst-libav to 2.8.5
-- Memory leak fixes in scaletempo, the raw video RTP depayloader,
-  and in playsink related to audio/video filters
-- Fixes for error handling in the OSX audio plugin
-- Various gobject-introspection annotation fixes and additions
-- Compiler warning fixes for latest clang compiler
-- and many, many more:
-  https://bugzilla.gnome.org/buglist.cgi?bug_status=RESOLVED&bug_status=VERIFIED&limit=0&list_id=91562&order=bug_id&product=GStreamer&resolution=FIXED&target_milestone=1.6.3
-
+This is GStreamer 1.7.91
 
diff --git a/README b/README
index f175b1b..fa53f95 100644
--- a/README
+++ b/README
@@ -1,4 +1,4 @@
-GStreamer 1.5.x development series
+GStreamer 1.7.x development series
 
 WHAT IT IS
 ----------
diff --git a/RELEASE b/RELEASE
index d366e79..17cc193 100644
--- a/RELEASE
+++ b/RELEASE
@@ -1,19 +1,14 @@
 
-Release notes for GStreamer Bad Plugins 1.6.3
+Release notes for GStreamer Bad Plugins 1.7.91
 
-The GStreamer team is proud to announce the third bugfix release in the stable
-1.6 release series of your favourite cross-platform multimedia framework!
+The GStreamer team is pleased to announce the second release candidate of the stable
+1.8 release series. The 1.8 release series is adding new features on top of
+the 1.0, 1.2, 1.4 and 1.6 series and is part of the API and ABI-stable 1.x release
+series of the GStreamer multimedia framework.
 
 
-
-This release only contains bugfixes and it is safe to update from 1.6.x. For a
-full list of bugfixes see Bugzilla.
-
-
-
-See http://gstreamer.freedesktop.org/releases/1.6/
-for the full release notes.
-
+Binaries for Android, iOS, Mac OS X and Windows will be provided separately
+during the stable 1.8 release series.
 
 
 "That an accusation?"
@@ -64,23 +59,32 @@
 
 Bugs fixed in this release
      
-      * 756573 : pcapparse: Crash in presence of empty packet
-      * 758286 : qtitem: GstQSGTexture leaks in updatePaintNode
-      * 760127 : mpegtsmux: Reserve bits not set to to 1's
-      * 760551 : shmsink: Deadlock in memory free
-      * 760883 : gl: Black screen on Android after update from 1.6.1 to 1.6.2
+      * 743259 : tsdemux:  bogus timestamp when PTS < PCR
+      * 756282 : [PLUGIN-MOVE] Move opus to -base
+      * 760566 : All the gleffects have the same name and description
+      * 762999 : Memory leak in qmlglsink
+      * 763045 : glmemoryallocator: Buffer size miss-match when mapping GLMemory without PBO
+      * 763079 : hls/Makefile.am missing OPENSSL_CFLAGS
+      * 763098 : ahcsrc: remove unused file
+      * 763168 : gldisplay: _get_gl_context_for_thread_unlocked looks suspicious
+      * 763220 : mpegvideoparse: Support non-hierarchical profile/level again [REGRESSION]
+      * 763356 : glimagesink: Fix window memory leak
+      * 763365 : glfilterapp not correctly drawing the default scene
+      * 763401 : Zero-copy video playback doesn't work on Android 4.x (QA 1.7.90)
+      * 763494 : h265parse: Segfault while tranforming hevc packetized  stream to nal aligned bytestream
+      * 763503 : tsdemux can crash on shutdown
 
 ==== Download ====
 
 You can find source releases of gst-plugins-bad in the download
-directory: http://gstreamer.freedesktop.org/src/gst-plugins-bad/
+directory: https://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/
+The project's website is https://gstreamer.freedesktop.org/
 
 ==== Support and Bugs ====
 
@@ -105,10 +109,21 @@
         
 Contributors to this release
     
-      * Bob Holcomb
-      * Matt Crane
+      * Alessandro Decina
+      * Aurélien Zanelli
+      * Edward Hervey
+      * Jan Schmidt
+      * Joe Gorse
+      * Justin Kim
+      * Mark Nauwelaerts
+      * Martin Kelly
+      * Matthew Waters
+      * Nicolas Dufresne
+      * Reynaldo H. Verdejo Pinochet
       * Sebastian Dröge
       * Sergey Borovkov
-      * Tim Sheridan
+      * Sreerenj Balachandran
       * Tim-Philipp Müller
+      * Vineeth TM
+      * Vivia Nikolaidou
  
\ No newline at end of file
diff --git a/aclocal.m4 b/aclocal.m4
index 2144811..2162ef8 100644
--- a/aclocal.m4
+++ b/aclocal.m4
@@ -1479,7 +1479,6 @@
 m4_include([common/m4/orc.m4])
 m4_include([common/m4/pkg.m4])
 m4_include([m4/gettext.m4])
-m4_include([m4/gsettings.m4])
 m4_include([m4/gst-fionread.m4])
 m4_include([m4/gst-sdl.m4])
 m4_include([m4/iconv.m4])
diff --git a/autogen.sh b/autogen.sh
index 7912654..ee2ce92 100755
--- a/autogen.sh
+++ b/autogen.sh
@@ -37,7 +37,11 @@
 if test ! \( -x .git/hooks/pre-commit -a -L .git/hooks/pre-commit \);
 then
     rm -f .git/hooks/pre-commit
-    ln -s ../../common/hooks/pre-commit.hook .git/hooks/pre-commit
+    if ! ln -s ../../common/hooks/pre-commit.hook .git/hooks/pre-commit 2> /dev/null
+    then
+        echo "Failed to create commit hook symlink, copying instead ..."
+        cp common/hooks/pre-commit.hook .git/hooks/pre-commit
+    fi
 fi
 
 # GNU gettext automake support doesn't get along with git.
@@ -50,6 +54,8 @@
 
 if test "x$package" = "xgstreamer"; then
   CONFIGURE_DEF_OPT="$CONFIGURE_DEF_OPT --enable-docbook --enable-failing-tests --enable-poisoning"
+elif test "x$package" = "xgst-plugins-bad"; then
+  CONFIGURE_DEF_OPT="$CONFIGURE_DEF_OPT --with-player-tests"
 fi
 
 autogen_options $@
diff --git a/common/Makefile.in b/common/Makefile.in
index d71b3ba..a4a1f99 100644
--- a/common/Makefile.in
+++ b/common/Makefile.in
@@ -114,16 +114,15 @@
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
 	$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
-	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gsettings.m4 \
-	$(top_srcdir)/m4/gst-fionread.m4 $(top_srcdir)/m4/gst-sdl.m4 \
-	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
-	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
-	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libgcrypt.m4 \
-	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
-	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
-	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
-	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
-	$(top_srcdir)/configure.ac
+	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gst-fionread.m4 \
+	$(top_srcdir)/m4/gst-sdl.m4 $(top_srcdir)/m4/iconv.m4 \
+	$(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \
+	$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
+	$(top_srcdir)/m4/libgcrypt.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
+	$(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
@@ -248,6 +247,8 @@
 CLUTTER_X11_LIBS = @CLUTTER_X11_LIBS@
 CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
+CUDA_CFLAGS = @CUDA_CFLAGS@
+CUDA_LIBS = @CUDA_LIBS@
 CURL_CFLAGS = @CURL_CFLAGS@
 CURL_LIBS = @CURL_LIBS@
 CXX = @CXX@
@@ -285,6 +286,8 @@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
+EGL_CFLAGS = @EGL_CFLAGS@
+EGL_LIBS = @EGL_LIBS@
 EGREP = @EGREP@
 ERROR_CFLAGS = @ERROR_CFLAGS@
 ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
@@ -293,7 +296,6 @@
 EXIF_CFLAGS = @EXIF_CFLAGS@
 EXIF_LIBS = @EXIF_LIBS@
 FAAC_LIBS = @FAAC_LIBS@
-FAAD_IS_NEAAC = @FAAD_IS_NEAAC@
 FAAD_LIBS = @FAAD_LIBS@
 FFLAGS = @FFLAGS@
 FGREP = @FGREP@
@@ -312,8 +314,9 @@
 GIO_LIBS = @GIO_LIBS@
 GIO_UNIX_CFLAGS = @GIO_UNIX_CFLAGS@
 GIO_UNIX_LIBS = @GIO_UNIX_LIBS@
+GLES2_CFLAGS = @GLES2_CFLAGS@
+GLES2_LIBS = @GLES2_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
-GLIB_COMPILE_SCHEMAS = @GLIB_COMPILE_SCHEMAS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
@@ -330,16 +333,17 @@
 GMODULE_NO_EXPORT_LIBS = @GMODULE_NO_EXPORT_LIBS@
 GMSGFMT = @GMSGFMT@
 GMSGFMT_015 = @GMSGFMT_015@
+GNUSTL_CFLAGS = @GNUSTL_CFLAGS@
+GNUSTL_LIBS = @GNUSTL_LIBS@
 GRAPHENE_CFLAGS = @GRAPHENE_CFLAGS@
 GRAPHENE_LIBS = @GRAPHENE_LIBS@
 GREP = @GREP@
-GSETTINGS_CFLAGS = @GSETTINGS_CFLAGS@
-GSETTINGS_DISABLE_SCHEMAS_COMPILE = @GSETTINGS_DISABLE_SCHEMAS_COMPILE@
-GSETTINGS_LIBS = @GSETTINGS_LIBS@
 GSM_LIBS = @GSM_LIBS@
 GSTPB_PLUGINS_DIR = @GSTPB_PLUGINS_DIR@
 GSTPB_PREFIX = @GSTPB_PREFIX@
 GST_AGE = @GST_AGE@
+GST_ALLOCATORS_CFLAGS = @GST_ALLOCATORS_CFLAGS@
+GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
 GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
 GST_API_VERSION = @GST_API_VERSION@
 GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
@@ -365,6 +369,8 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PBUTILS_CFLAGS = @GST_PBUTILS_CFLAGS@
+GST_PBUTILS_LIBS = @GST_PBUTILS_LIBS@
 GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BAD_CFLAGS = @GST_PLUGINS_BAD_CFLAGS@
@@ -390,6 +396,8 @@
 GST_PREFIX = @GST_PREFIX@
 GST_REVISION = @GST_REVISION@
 GST_TOOLS_DIR = @GST_TOOLS_DIR@
+GST_VIDEO_CFLAGS = @GST_VIDEO_CFLAGS@
+GST_VIDEO_LIBS = @GST_VIDEO_LIBS@
 GTK3_CFLAGS = @GTK3_CFLAGS@
 GTK3_GL_CFLAGS = @GTK3_GL_CFLAGS@
 GTK3_GL_LIBS = @GTK3_GL_LIBS@
@@ -491,6 +499,7 @@
 LTLIBICONV = @LTLIBICONV@
 LTLIBINTL = @LTLIBINTL@
 LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
 MANIFEST_TOOL = @MANIFEST_TOOL@
@@ -504,8 +513,6 @@
 MODPLUG_LIBS = @MODPLUG_LIBS@
 MPEG2ENC_CFLAGS = @MPEG2ENC_CFLAGS@
 MPEG2ENC_LIBS = @MPEG2ENC_LIBS@
-MPG123_CFLAGS = @MPG123_CFLAGS@
-MPG123_LIBS = @MPG123_LIBS@
 MPLEX_CFLAGS = @MPLEX_CFLAGS@
 MPLEX_LDFLAGS = @MPLEX_LDFLAGS@
 MPLEX_LIBS = @MPLEX_LIBS@
@@ -521,6 +528,8 @@
 NETTLE_LIBS = @NETTLE_LIBS@
 NM = @NM@
 NMEDIT = @NMEDIT@
+NVENCODE_CFLAGS = @NVENCODE_CFLAGS@
+NVENCODE_LIBS = @NVENCODE_LIBS@
 OBJC = @OBJC@
 OBJCDEPMODE = @OBJCDEPMODE@
 OBJCFLAGS = @OBJCFLAGS@
@@ -578,16 +587,18 @@
 PYTHON_PLATFORM = @PYTHON_PLATFORM@
 PYTHON_PREFIX = @PYTHON_PREFIX@
 PYTHON_VERSION = @PYTHON_VERSION@
+QT_ANDROID_CFLAGS = @QT_ANDROID_CFLAGS@
+QT_ANDROID_LIBS = @QT_ANDROID_LIBS@
 QT_CFLAGS = @QT_CFLAGS@
 QT_LIBS = @QT_LIBS@
+QT_MAC_CFLAGS = @QT_MAC_CFLAGS@
+QT_MAC_LIBS = @QT_MAC_LIBS@
 QT_WAYLAND_CFLAGS = @QT_WAYLAND_CFLAGS@
 QT_WAYLAND_LIBS = @QT_WAYLAND_LIBS@
 QT_X11_CFLAGS = @QT_X11_CFLAGS@
 QT_X11_LIBS = @QT_X11_LIBS@
 RANLIB = @RANLIB@
 RCC = @RCC@
-RSVG_2_36_2_CFLAGS = @RSVG_2_36_2_CFLAGS@
-RSVG_2_36_2_LIBS = @RSVG_2_36_2_LIBS@
 RSVG_CFLAGS = @RSVG_CFLAGS@
 RSVG_LIBS = @RSVG_LIBS@
 RTMP_CFLAGS = @RTMP_CFLAGS@
@@ -639,6 +650,7 @@
 VOAACENC_LIBS = @VOAACENC_LIBS@
 VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
 VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VULKAN_LIBS = @VULKAN_LIBS@
 WARNING_CFLAGS = @WARNING_CFLAGS@
 WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
 WARNING_OBJCFLAGS = @WARNING_OBJCFLAGS@
@@ -649,6 +661,7 @@
 WAYLAND_LIBS = @WAYLAND_LIBS@
 WEBP_CFLAGS = @WEBP_CFLAGS@
 WEBP_LIBS = @WEBP_LIBS@
+WGET = @WGET@
 WILDMIDI_CFLAGS = @WILDMIDI_CFLAGS@
 WILDMIDI_LIBS = @WILDMIDI_LIBS@
 WINKS_LIBS = @WINKS_LIBS@
@@ -658,6 +671,8 @@
 X11_LIBS = @X11_LIBS@
 X265_CFLAGS = @X265_CFLAGS@
 X265_LIBS = @X265_LIBS@
+XCB_CFLAGS = @XCB_CFLAGS@
+XCB_LIBS = @XCB_LIBS@
 XCOMPOSITE_CFLAGS = @XCOMPOSITE_CFLAGS@
 XCOMPOSITE_LIBS = @XCOMPOSITE_LIBS@
 XGETTEXT = @XGETTEXT@
@@ -695,7 +710,6 @@
 docdir = @docdir@
 dvidir = @dvidir@
 exec_prefix = @exec_prefix@
-gsettingsschemadir = @gsettingsschemadir@
 host = @host@
 host_alias = @host_alias@
 host_cpu = @host_cpu@
diff --git a/common/check.mak b/common/check.mak
index 8a90b5d..66497ff 100644
--- a/common/check.mak
+++ b/common/check.mak
@@ -12,36 +12,32 @@
 endif
 
 LOOPS ?= 10
+AM_TESTS_ENVIRONMENT = CK_DEFAULT_TIMEOUT=20
 
 # run any given test by running make test.check
 # if the test fails, run it again at at least debug level 2
 %.check: %
 	@$(AM_TESTS_ENVIRONMENT)					\
-	CK_DEFAULT_TIMEOUT=20					\
 	$* ||							\
 	$(AM_TESTS_ENVIRONMENT)					\
 	GST_DEBUG=$$GST_DEBUG,*:2				\
-	CK_DEFAULT_TIMEOUT=20					\
 	$*
 
 # just like 'check', but don't run it again if it fails (useful for debugging)
 %.check-norepeat: %
 	@$(AM_TESTS_ENVIRONMENT)					\
-	CK_DEFAULT_TIMEOUT=20					\
 	$*
 
 # run any given test in a loop
 %.torture: %
 	@for i in `seq 1 $(LOOPS)`; do				\
 	$(AM_TESTS_ENVIRONMENT)					\
-	CK_DEFAULT_TIMEOUT=20					\
 	$*; done
 
 # run any given test in an infinite loop
 %.forever: %
 	@while true; do						\
 	$(AM_TESTS_ENVIRONMENT)					\
-	CK_DEFAULT_TIMEOUT=20					\
 	$* || break; done
 
 # valgrind any given test by running make test.valgrind
@@ -57,7 +53,7 @@
 	--show-possibly-lost=no                                 \
 	--leak-resolution=high --num-callers=20			\
 	./$* 2>&1 | tee $$valgrind_log ;			\
-	if grep "==" $$valgrind_log > /dev/null 2>&1; then	\
+	if grep "^==" $$valgrind_log > /dev/null 2>&1; then	\
 	    rm $$valgrind_log;					\
 	    exit 1;						\
 	fi ;							\
diff --git a/common/gst.supp b/common/gst.supp
index 81f98a9..2740e9a 100644
--- a/common/gst.supp
+++ b/common/gst.supp
@@ -3976,7 +3976,6 @@
 {
    closures aren't valgrind friendly (bgo#739850)
    Memcheck:Leak
-   match-leak-kinds: possible
    fun:calloc
    ...
    fun:g_cclosure_new
@@ -3985,7 +3984,6 @@
 {
    closures aren't valgrind friendly (bgo#739850)
    Memcheck:Leak
-   match-leak-kinds: possible
    fun:malloc
    ...
    fun:g_closure_add_invalidate_notifier
@@ -3994,7 +3992,6 @@
 {
    closures aren't valgrind friendly (bgo#739850)
    Memcheck:Leak
-   match-leak-kinds: possible
    fun:calloc
    ...
    fun:g_closure_new_simple
@@ -4020,3 +4017,12 @@
    Memcheck:Addr8
    fun:do_lookup_x
 }
+
+{
+   <quark tables are leaked on purpose when they are expanded, observed with glib 2.46 and gst-rtsp-server tests>
+   Memcheck:Leak
+   fun:malloc
+   ...
+   fun:g_quark_init
+   fun:glib_init_ctor
+}
diff --git a/common/gtk-doc-plugins.mak b/common/gtk-doc-plugins.mak
index 997a672..fe0977c 100644
--- a/common/gtk-doc-plugins.mak
+++ b/common/gtk-doc-plugins.mak
@@ -174,7 +174,7 @@
 sgml-build.stamp: scan-build.stamp $(CFILE_GLOB) $(top_srcdir)/common/plugins.xsl $(expand_content_files)
 	@echo '  DOC   Building XML'
 	@-mkdir -p xml
-	@for a in $(srcdir)/$(INSPECT_DIR)/*.xml; do \
+	@for a in $(inspect_files); do \
 	    xsltproc --stringparam module $(MODULE) \
 		$(top_srcdir)/common/plugins.xsl $$a > xml/`basename $$a`; done
 	@for f in $(EXAMPLE_CFILES); do \
diff --git a/common/gtk-doc.mak b/common/gtk-doc.mak
index f8edf40..2aab3a9 100644
--- a/common/gtk-doc.mak
+++ b/common/gtk-doc.mak
@@ -97,17 +97,18 @@
 	            scanobj_options="--verbose"; \
 	        fi; \
 	    fi; \
-	    GST_PLUGIN_SYSTEM_PATH_1_0=`cd $(top_builddir) && pwd`		\
-	    GST_PLUGIN_PATH_1_0=						\
+	    GST_PLUGIN_SYSTEM_PATH_1_0=`cd $(top_builddir) && pwd`	\
+	    GST_PLUGIN_PATH_1_0=					\
 	    GST_REGISTRY_1_0=doc-registry.xml				\
 	    $(GTKDOC_EXTRA_ENVIRONMENT)					\
 	    CC="$(GTKDOC_CC)" LD="$(GTKDOC_LD)" RUN="$(GTKDOC_RUN)"	\
 	    CFLAGS="$(GTKDOC_CFLAGS) $(CFLAGS)"				\
 	    LDFLAGS="$(GTKDOC_LIBS) $(LDFLAGS)"				\
 	    gtkdoc-scangobj --type-init-func="gst_init(NULL,NULL)"	\
-	        $$scanobj_options --module=$(DOC_MODULE) ;				\
+	        $$scanobj_options --module=$(DOC_MODULE) ;		\
 	else								\
 	    for i in $(SCANOBJ_FILES) ; do				\
+	       $(MKDIR_P) $(dirname $$i) ;				\
 	       test -f $$i || touch $$i ;				\
 	    done							\
 	fi
diff --git a/common/m4/Makefile.in b/common/m4/Makefile.in
index 441d6fc..d4ec28c 100644
--- a/common/m4/Makefile.in
+++ b/common/m4/Makefile.in
@@ -114,16 +114,15 @@
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
 	$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
-	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gsettings.m4 \
-	$(top_srcdir)/m4/gst-fionread.m4 $(top_srcdir)/m4/gst-sdl.m4 \
-	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
-	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
-	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libgcrypt.m4 \
-	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
-	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
-	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
-	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
-	$(top_srcdir)/configure.ac
+	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gst-fionread.m4 \
+	$(top_srcdir)/m4/gst-sdl.m4 $(top_srcdir)/m4/iconv.m4 \
+	$(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \
+	$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
+	$(top_srcdir)/m4/libgcrypt.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
+	$(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
@@ -188,6 +187,8 @@
 CLUTTER_X11_LIBS = @CLUTTER_X11_LIBS@
 CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
+CUDA_CFLAGS = @CUDA_CFLAGS@
+CUDA_LIBS = @CUDA_LIBS@
 CURL_CFLAGS = @CURL_CFLAGS@
 CURL_LIBS = @CURL_LIBS@
 CXX = @CXX@
@@ -225,6 +226,8 @@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
+EGL_CFLAGS = @EGL_CFLAGS@
+EGL_LIBS = @EGL_LIBS@
 EGREP = @EGREP@
 ERROR_CFLAGS = @ERROR_CFLAGS@
 ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
@@ -233,7 +236,6 @@
 EXIF_CFLAGS = @EXIF_CFLAGS@
 EXIF_LIBS = @EXIF_LIBS@
 FAAC_LIBS = @FAAC_LIBS@
-FAAD_IS_NEAAC = @FAAD_IS_NEAAC@
 FAAD_LIBS = @FAAD_LIBS@
 FFLAGS = @FFLAGS@
 FGREP = @FGREP@
@@ -252,8 +254,9 @@
 GIO_LIBS = @GIO_LIBS@
 GIO_UNIX_CFLAGS = @GIO_UNIX_CFLAGS@
 GIO_UNIX_LIBS = @GIO_UNIX_LIBS@
+GLES2_CFLAGS = @GLES2_CFLAGS@
+GLES2_LIBS = @GLES2_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
-GLIB_COMPILE_SCHEMAS = @GLIB_COMPILE_SCHEMAS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
@@ -270,16 +273,17 @@
 GMODULE_NO_EXPORT_LIBS = @GMODULE_NO_EXPORT_LIBS@
 GMSGFMT = @GMSGFMT@
 GMSGFMT_015 = @GMSGFMT_015@
+GNUSTL_CFLAGS = @GNUSTL_CFLAGS@
+GNUSTL_LIBS = @GNUSTL_LIBS@
 GRAPHENE_CFLAGS = @GRAPHENE_CFLAGS@
 GRAPHENE_LIBS = @GRAPHENE_LIBS@
 GREP = @GREP@
-GSETTINGS_CFLAGS = @GSETTINGS_CFLAGS@
-GSETTINGS_DISABLE_SCHEMAS_COMPILE = @GSETTINGS_DISABLE_SCHEMAS_COMPILE@
-GSETTINGS_LIBS = @GSETTINGS_LIBS@
 GSM_LIBS = @GSM_LIBS@
 GSTPB_PLUGINS_DIR = @GSTPB_PLUGINS_DIR@
 GSTPB_PREFIX = @GSTPB_PREFIX@
 GST_AGE = @GST_AGE@
+GST_ALLOCATORS_CFLAGS = @GST_ALLOCATORS_CFLAGS@
+GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
 GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
 GST_API_VERSION = @GST_API_VERSION@
 GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
@@ -305,6 +309,8 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PBUTILS_CFLAGS = @GST_PBUTILS_CFLAGS@
+GST_PBUTILS_LIBS = @GST_PBUTILS_LIBS@
 GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BAD_CFLAGS = @GST_PLUGINS_BAD_CFLAGS@
@@ -330,6 +336,8 @@
 GST_PREFIX = @GST_PREFIX@
 GST_REVISION = @GST_REVISION@
 GST_TOOLS_DIR = @GST_TOOLS_DIR@
+GST_VIDEO_CFLAGS = @GST_VIDEO_CFLAGS@
+GST_VIDEO_LIBS = @GST_VIDEO_LIBS@
 GTK3_CFLAGS = @GTK3_CFLAGS@
 GTK3_GL_CFLAGS = @GTK3_GL_CFLAGS@
 GTK3_GL_LIBS = @GTK3_GL_LIBS@
@@ -431,6 +439,7 @@
 LTLIBICONV = @LTLIBICONV@
 LTLIBINTL = @LTLIBINTL@
 LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
 MANIFEST_TOOL = @MANIFEST_TOOL@
@@ -444,8 +453,6 @@
 MODPLUG_LIBS = @MODPLUG_LIBS@
 MPEG2ENC_CFLAGS = @MPEG2ENC_CFLAGS@
 MPEG2ENC_LIBS = @MPEG2ENC_LIBS@
-MPG123_CFLAGS = @MPG123_CFLAGS@
-MPG123_LIBS = @MPG123_LIBS@
 MPLEX_CFLAGS = @MPLEX_CFLAGS@
 MPLEX_LDFLAGS = @MPLEX_LDFLAGS@
 MPLEX_LIBS = @MPLEX_LIBS@
@@ -461,6 +468,8 @@
 NETTLE_LIBS = @NETTLE_LIBS@
 NM = @NM@
 NMEDIT = @NMEDIT@
+NVENCODE_CFLAGS = @NVENCODE_CFLAGS@
+NVENCODE_LIBS = @NVENCODE_LIBS@
 OBJC = @OBJC@
 OBJCDEPMODE = @OBJCDEPMODE@
 OBJCFLAGS = @OBJCFLAGS@
@@ -518,16 +527,18 @@
 PYTHON_PLATFORM = @PYTHON_PLATFORM@
 PYTHON_PREFIX = @PYTHON_PREFIX@
 PYTHON_VERSION = @PYTHON_VERSION@
+QT_ANDROID_CFLAGS = @QT_ANDROID_CFLAGS@
+QT_ANDROID_LIBS = @QT_ANDROID_LIBS@
 QT_CFLAGS = @QT_CFLAGS@
 QT_LIBS = @QT_LIBS@
+QT_MAC_CFLAGS = @QT_MAC_CFLAGS@
+QT_MAC_LIBS = @QT_MAC_LIBS@
 QT_WAYLAND_CFLAGS = @QT_WAYLAND_CFLAGS@
 QT_WAYLAND_LIBS = @QT_WAYLAND_LIBS@
 QT_X11_CFLAGS = @QT_X11_CFLAGS@
 QT_X11_LIBS = @QT_X11_LIBS@
 RANLIB = @RANLIB@
 RCC = @RCC@
-RSVG_2_36_2_CFLAGS = @RSVG_2_36_2_CFLAGS@
-RSVG_2_36_2_LIBS = @RSVG_2_36_2_LIBS@
 RSVG_CFLAGS = @RSVG_CFLAGS@
 RSVG_LIBS = @RSVG_LIBS@
 RTMP_CFLAGS = @RTMP_CFLAGS@
@@ -579,6 +590,7 @@
 VOAACENC_LIBS = @VOAACENC_LIBS@
 VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
 VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VULKAN_LIBS = @VULKAN_LIBS@
 WARNING_CFLAGS = @WARNING_CFLAGS@
 WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
 WARNING_OBJCFLAGS = @WARNING_OBJCFLAGS@
@@ -589,6 +601,7 @@
 WAYLAND_LIBS = @WAYLAND_LIBS@
 WEBP_CFLAGS = @WEBP_CFLAGS@
 WEBP_LIBS = @WEBP_LIBS@
+WGET = @WGET@
 WILDMIDI_CFLAGS = @WILDMIDI_CFLAGS@
 WILDMIDI_LIBS = @WILDMIDI_LIBS@
 WINKS_LIBS = @WINKS_LIBS@
@@ -598,6 +611,8 @@
 X11_LIBS = @X11_LIBS@
 X265_CFLAGS = @X265_CFLAGS@
 X265_LIBS = @X265_LIBS@
+XCB_CFLAGS = @XCB_CFLAGS@
+XCB_LIBS = @XCB_LIBS@
 XCOMPOSITE_CFLAGS = @XCOMPOSITE_CFLAGS@
 XCOMPOSITE_LIBS = @XCOMPOSITE_LIBS@
 XGETTEXT = @XGETTEXT@
@@ -635,7 +650,6 @@
 docdir = @docdir@
 dvidir = @dvidir@
 exec_prefix = @exec_prefix@
-gsettingsschemadir = @gsettingsschemadir@
 host = @host@
 host_alias = @host_alias@
 host_cpu = @host_cpu@
diff --git a/common/m4/gst-args.m4 b/common/m4/gst-args.m4
index b478c82..0628123 100644
--- a/common/m4/gst-args.m4
+++ b/common/m4/gst-args.m4
@@ -358,3 +358,29 @@
       fi
     ])
 ])
+
+dnl Enable extra checks by default only for development versions
+AC_DEFUN([AG_GST_ARG_ENABLE_EXTRA_CHECKS],
+[
+  AC_ARG_ENABLE(extra-check,
+    AC_HELP_STRING([--enable-extra-checks],
+                   [Enable extra runtime checks]),
+    [
+      case "${enableval}" in
+        yes) EXTRA_CHECKS=yes ;;
+        no)  EXTRA_CHECKS=no ;;
+        *)   AC_MSG_ERROR(bad value ${enableval} for --enable-extra-checks) ;;
+      esac
+    ],
+    [
+      if test "x`expr $PACKAGE_VERSION_MINOR % 2`" = "x1" -a "x`expr $PACKAGE_VERSION_MICRO '<' 90`" = "x1"; then
+        EXTRA_CHECKS=yes
+      else
+        EXTRA_CHECKS=no
+      fi
+    ])
+
+    if test "x$EXTRA_CHECKS" = "xyes"; then
+        AC_DEFINE(GST_ENABLE_EXTRA_CHECKS, 1, [Define if extra runtime checks should be enabled])
+    fi
+])
diff --git a/common/m4/gst-error.m4 b/common/m4/gst-error.m4
index d6487cc..0067588 100644
--- a/common/m4/gst-error.m4
+++ b/common/m4/gst-error.m4
@@ -52,31 +52,6 @@
   if test "x$1" != "xno"
   then
     AS_COMPILER_FLAG(-Werror, ERROR_CFLAGS="$ERROR_CFLAGS -Werror")
-
-    dnl if -Werror isn't suported, try -errwarn=%all (Sun Forte case)
-    if test "x$ERROR_CFLAGS" = "x"
-    then
-      AS_COMPILER_FLAG([-errwarn=%all], [
-          ERROR_CFLAGS="-errwarn=%all"
-          dnl try -errwarn=%all,no%E_EMPTY_DECLARATION,
-          dnl no%E_STATEMENT_NOT_REACHED,no%E_ARGUEMENT_MISMATCH,
-          dnl no%E_MACRO_REDEFINED (Sun Forte case)
-          dnl For Forte we need disable "empty declaration" warning produced by un-needed semicolon
-          dnl "statement not reached" disabled because there is g_assert_not_reached () in some places
-          dnl "macro redefined" because of gst/gettext.h
-          dnl FIXME: is it really supposed to be 'ARGUEMENT' and not 'ARGUMENT'?
-          for f in 'no%E_EMPTY_DECLARATION' \
-                   'no%E_STATEMENT_NOT_REACHED' \
-                   'no%E_ARGUEMENT_MISMATCH' \
-                   'no%E_MACRO_REDEFINED' \
-                   'no%E_LOOP_NOT_ENTERED_AT_TOP'
-          do
-            AS_COMPILER_FLAG([-errwarn=%all,$f], [
-              ERROR_CFLAGS="$ERROR_CFLAGS,$f"
-            ])
-          done
-      ])
-    fi
   fi
 
   if test "x$2" != "x"
@@ -142,28 +117,6 @@
 	  AS_CXX_COMPILER_FLAG([-fno-strict-aliasing],
 	    ERROR_CXXFLAGS="$ERROR_CXXFLAGS -fno-strict-aliasing")
 	  ])
-    else
-      dnl if -Werror isn't suported, try -errwarn=%all
-      AS_CXX_COMPILER_FLAG([-errwarn=%all], ERROR_CXXFLAGS="$ERROR_CXXFLAGS -errwarn=%all")
-      if test "x$ERROR_CXXFLAGS" != "x"; then
-        dnl try -errwarn=%all,no%E_EMPTY_DECLARATION,
-        dnl no%E_STATEMENT_NOT_REACHED,no%E_ARGUEMENT_MISMATCH,
-        dnl no%E_MACRO_REDEFINED (Sun Forte case)
-        dnl For Forte we need disable "empty declaration" warning produced by un-needed semicolon
-        dnl "statement not reached" disabled because there is g_assert_not_reached () in some places
-        dnl "macro redefined" because of gst/gettext.h
-        dnl FIXME: is it really supposed to be 'ARGUEMENT' and not 'ARGUMENT'?
-        dnl FIXME: do any of these work with the c++ compiler? if not, why
-        dnl do we check at all?
-        for f in 'no%E_EMPTY_DECLARATION' \
-                 'no%E_STATEMENT_NOT_REACHED' \
-                 'no%E_ARGUEMENT_MISMATCH' \
-                 'no%E_MACRO_REDEFINED' \
-                 'no%E_LOOP_NOT_ENTERED_AT_TOP'
-        do
-          AS_CXX_COMPILER_FLAG([-errwarn=%all,$f], [ERROR_CXXFLAGS="$ERROR_CXXFLAGS,$f"])
-        done
-      fi
     fi
   fi
 
@@ -227,28 +180,6 @@
 	  AS_OBJC_COMPILER_FLAG([-fno-strict-aliasing],
 	    ERROR_OBJCFLAGS="$ERROR_OBJCFLAGS -fno-strict-aliasing")
 	  ])
-    else
-      dnl if -Werror isn't suported, try -errwarn=%all
-      AS_OBJC_COMPILER_FLAG([-errwarn=%all], ERROR_OBJCFLAGS="$ERROR_OBJCFLAGS -errwarn=%all")
-      if test "x$ERROR_OBJCFLAGS" != "x"; then
-        dnl try -errwarn=%all,no%E_EMPTY_DECLARATION,
-        dnl no%E_STATEMENT_NOT_REACHED,no%E_ARGUEMENT_MISMATCH,
-        dnl no%E_MACRO_REDEFINED (Sun Forte case)
-        dnl For Forte we need disable "empty declaration" warning produced by un-needed semicolon
-        dnl "statement not reached" disabled because there is g_assert_not_reached () in some places
-        dnl "macro redefined" because of gst/gettext.h
-        dnl FIXME: is it really supposed to be 'ARGUEMENT' and not 'ARGUMENT'?
-        dnl FIXME: do any of these work with the c++ compiler? if not, why
-        dnl do we check at all?
-        for f in 'no%E_EMPTY_DECLARATION' \
-                 'no%E_STATEMENT_NOT_REACHED' \
-                 'no%E_ARGUEMENT_MISMATCH' \
-                 'no%E_MACRO_REDEFINED' \
-                 'no%E_LOOP_NOT_ENTERED_AT_TOP'
-        do
-          AS_OBJC_COMPILER_FLAG([-errwarn=%all,$f], [ERROR_OBJCFLAGS="$ERROR_OBJCFLAGS,$f"])
-        done
-      fi
     fi
   fi
 
diff --git a/common/m4/gst-glib2.m4 b/common/m4/gst-glib2.m4
index 5b9cd8b..5b72507 100644
--- a/common/m4/gst-glib2.m4
+++ b/common/m4/gst-glib2.m4
@@ -51,18 +51,9 @@
   fi
 
   AC_ARG_ENABLE(glib-asserts,
-    AS_HELP_STRING([--enable-glib-asserts[=@<:@no/auto/yes@:>@]],
+    AS_HELP_STRING([--enable-glib-asserts[=@<:@no/yes@:>@]],
       [Enable GLib assertion]),[enable_glib_assertions=$enableval],
-    [enable_glib_assertions=auto])
-
-  if test "x$enable_glib_assertions" = "xauto"; then
-    dnl Enable assertions only for development versions
-    if test "x`expr $PACKAGE_VERSION_MINOR % 2`" = "x1" -a "x`expr $PACKAGE_VERSION_MICRO '<' 90`" = "x1"; then
-      enable_glib_assertions=yes
-    else
-      enable_glib_assertions=no
-    fi
-  fi
+    [enable_glib_assertions=yes])
 
   if test "x$enable_glib_assertions" = "xno"; then
     GLIB_EXTRA_CFLAGS="$GLIB_EXTRA_CFLAGS -DG_DISABLE_ASSERT"
diff --git a/common/m4/gst-package-release-datetime.m4 b/common/m4/gst-package-release-datetime.m4
index bc885e3..4cf44e6 100644
--- a/common/m4/gst-package-release-datetime.m4
+++ b/common/m4/gst-package-release-datetime.m4
@@ -27,14 +27,16 @@
 AC_DEFUN([AG_GST_SET_PACKAGE_RELEASE_DATETIME],
 [
   dnl AG_GST_SET_PACKAGE_RELEASE_DATETIME()
-  dnl AG_GST_SET_PACKAGE_RELEASE_DATETIME([yes]...)
+  dnl AG_GST_SET_PACKAGE_RELEASE_DATETIME([no]...)
   if test "x$1" = "xno" -o "x$1" = "x"; then
     GST_PACKAGE_RELEASE_DATETIME=`date -u "+%Y-%m-%dT%H:%MZ"`
   elif test "x$1" = "xyes"; then
-    dnl AG_GST_SET_PACKAGE_RELEASE_DATETIME([no], ["YYYY-MM-DD"])
-    dnl AG_GST_SET_PACKAGE_RELEASE_DATETIME([no], [DOAP-FILE], [RELEASE-VERSION])
-    if ( echo $1 | grep '^20[1-9][0-9]-[0-1][0-9]-[0-3][0-9]' >/dev/null ) ; then
-      GST_PACKAGE_RELEASE_DATETIME=$1
+    dnl AG_GST_SET_PACKAGE_RELEASE_DATETIME([yes], [YYYY-MM-DD])
+    dnl AG_GST_SET_PACKAGE_RELEASE_DATETIME([yes], [DOAP-FILE], [RELEASE-VERSION])
+changequote(<<, >>)dnl
+    if ( echo $2 | grep '^20[1-9][0-9]-[0-1][0-9]-[0-3][0-9]' >/dev/null ) ; then
+changequote([, ])dnl
+      GST_PACKAGE_RELEASE_DATETIME=$2
     else
       dnl we assume the .doap file contains the date as YYYY-MM-DD
       YYYY_MM_DD=`sh "${srcdir}/common/extract-release-date-from-doap-file" $3 $2`;
@@ -47,7 +49,9 @@
       fi
     fi
   dnl AG_GST_SET_PACKAGE_RELEASE_DATETIME([YYYY-MM-DD])
+changequote(<<, >>)dnl
   elif ( echo $1 | grep '^20[1-9][0-9]-[0-1][0-9]-[0-3][0-9]' >/dev/null ) ; then
+changequote([, ])dnl
     GST_PACKAGE_RELEASE_DATETIME=$1
   else
     AC_MSG_WARN([SET_PACKAGE_RELEASE_DATETIME: invalid first argument])
diff --git a/common/release.mak b/common/release.mak
index 715657b..c84c2f1 100644
--- a/common/release.mak
+++ b/common/release.mak
@@ -14,6 +14,9 @@
 	@if [ -d ../www/data/src ]; then \
 	  mv -v $(PACKAGE)-$(VERSION).tar.xz ../www/data/src/$(PACKAGE)/ ; \
 	  mv -v $(PACKAGE)-$(VERSION).tar.xz.sha256sum ../www/data/src/$(PACKAGE)/ ; \
+	elif [ -d ../../www/data/src ]; then \
+	  mv -v $(PACKAGE)-$(VERSION).tar.xz ../../www/data/src/$(PACKAGE)/ ; \
+	  mv -v $(PACKAGE)-$(VERSION).tar.xz.sha256sum ../../www/data/src/$(PACKAGE)/ ; \
 	fi
 	@echo "================================================================================================="
 
diff --git a/common/win32.mak b/common/win32.mak
index 30e347e..87cd346 100644
--- a/common/win32.mak
+++ b/common/win32.mak
@@ -44,7 +44,10 @@
 	  if test "x$$libso" != "x"; then \
 	    echo Checking symbols in $$libso; \
 	    if ! ($(top_srcdir)/common/check-exports $$libdef $$libso) ; then \
-	      fail=1; \
+	      echo "$$libdef"; \
+	      if test "$$libbase" != "libgstgl"; then \
+	        fail=1; \
+	      fi; \
 	    fi; \
 	  fi; \
 	done ; \
diff --git a/config.h.in b/config.h.in
index e6f84cb..3e5b3f7 100644
--- a/config.h.in
+++ b/config.h.in
@@ -28,12 +28,6 @@
    language is requested. */
 #undef ENABLE_NLS
 
-/* The x in 2.x */
-#undef FAAD2_MINOR_VERSION
-
-/* Define if AAC is using new api prefix */
-#undef FAAD_IS_NEAAC
-
 /* gettext package name */
 #undef GETTEXT_PACKAGE
 
@@ -52,12 +46,18 @@
 /* GStreamer API Version */
 #undef GST_API_VERSION
 
+/* Define if extra runtime checks should be enabled */
+#undef GST_ENABLE_EXTRA_CHECKS
+
 /* Extra platform specific plugin suffix */
 #undef GST_EXTRA_MODULE_SUFFIX
 
 /* Defined if gcov is enabled to force a rebuild due to config.h changing */
 #undef GST_GCOV_ENABLED
 
+/* DMABUF available for gl plugins */
+#undef GST_GL_HAVE_DMABUF
+
 /* EGL module name */
 #undef GST_GL_LIBEGL_MODULE_NAME
 
@@ -235,7 +235,7 @@
 /* Define to enable AAC encoder plug-in (used by faac). */
 #undef HAVE_FAAC
 
-/* Define to enable AAC decoder plug-in (used by faad). */
+/* Define to enable FAAD2 AAC decoder plug-in (used by faad). */
 #undef HAVE_FAAD
 
 /* Define to enable linux framebuffer (used by fbdevsink). */
@@ -271,6 +271,9 @@
 /* Define to 1 if the system has the type `GLeglImageOES'. */
 #undef HAVE_GLEGLIMAGEOES
 
+/* Define to 1 if the system has the type `GLint64'. */
+#undef HAVE_GLINT64
+
 /* Define to 1 if the system has the type `GLintptr'. */
 #undef HAVE_GLINTPTR
 
@@ -292,9 +295,6 @@
 /* Use graphene */
 #undef HAVE_GRAPHENE
 
-/* Define to enable GSettings plugin (used by gsettings). */
-#undef HAVE_GSETTINGS
-
 /* Define to enable GSM library (used by gsmenc gsmdec). */
 #undef HAVE_GSM
 
@@ -376,9 +376,6 @@
 /* Define to enable mpeg2enc (used by mpeg2enc). */
 #undef HAVE_MPEG2ENC
 
-/* Define to enable mpg123 audio decoder (used by mpg123). */
-#undef HAVE_MPG123
-
 /* Define to enable mplex (used by mplex). */
 #undef HAVE_MPLEX
 
@@ -406,6 +403,12 @@
 /* Define if nettle is available */
 #undef HAVE_NETTLE
 
+/* Define to enable NVIDIA Encode API (used by nvenc). */
+#undef HAVE_NVENC
+
+/* NVENC GStreamer OpenGL support available */
+#undef HAVE_NVENC_GST_GL
+
 /* Define to enable ofa plugins (used by ofa). */
 #undef HAVE_OFA
 
@@ -498,6 +501,15 @@
 /* Define to enable Qt elements (used by qt). */
 #undef HAVE_QT
 
+/* Define if Qt Android integration is installed */
+#undef HAVE_QT_ANDROID
+
+/* Define if Qt iOS integration is installed */
+#undef HAVE_QT_IOS
+
+/* Define if Qt Mac integration is installed */
+#undef HAVE_QT_MAC
+
 /* Define if Qt Wayland integration is installed */
 #undef HAVE_QT_WAYLAND
 
@@ -513,9 +525,6 @@
 /* Define to enable rsvg decoder (used by rsvg). */
 #undef HAVE_RSVG
 
-/* Have RSVG 2.36.2 or newer */
-#undef HAVE_RSVG_2_36_2
-
 /* Define to enable rtmp library (used by rtmp). */
 #undef HAVE_RTMP
 
@@ -597,6 +606,9 @@
 /* Define to enable timidity midi soft synth plugin (used by timidity). */
 #undef HAVE_TIMIDITY
 
+/* Define to enable tinyalsa (used by tinyalsa). */
+#undef HAVE_TINYALSA
+
 /* Define to 1 if you have the <unistd.h> header file. */
 #undef HAVE_UNISTD_H
 
@@ -624,6 +636,9 @@
 /* Define to enable vo-amrwbenc library (used by vo-amrwbenc). */
 #undef HAVE_VOAMRWBENC
 
+/* Define to enable Vulkan elements (used by vulkan). */
+#undef HAVE_VULKAN
+
 /* Define to enable WASAPI plug-in (used by wasapi). */
 #undef HAVE_WASAPI
 
@@ -687,8 +702,7 @@
 /* gettext locale dir */
 #undef LOCALEDIR
 
-/* Define to the sub-directory in which libtool stores uninstalled libraries.
-   */
+/* Define to the sub-directory where libtool stores uninstalled libraries. */
 #undef LT_OBJDIR
 
 /* Define if the old MusePack API is used */
diff --git a/configure b/configure
index 5968f06..9627014 100755
--- a/configure
+++ b/configure
@@ -1,6 +1,6 @@
 #! /bin/sh
 # Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.69 for GStreamer Bad Plug-ins 1.6.3.
+# Generated by GNU Autoconf 2.69 for GStreamer Bad Plug-ins 1.7.91.
 #
 # Report bugs to <http://bugzilla.gnome.org/enter_bug.cgi?product=GStreamer>.
 #
@@ -591,8 +591,8 @@
 # Identity of this package.
 PACKAGE_NAME='GStreamer Bad Plug-ins'
 PACKAGE_TARNAME='gst-plugins-bad'
-PACKAGE_VERSION='1.6.3'
-PACKAGE_STRING='GStreamer Bad Plug-ins 1.6.3'
+PACKAGE_VERSION='1.7.91'
+PACKAGE_STRING='GStreamer Bad Plug-ins 1.7.91'
 PACKAGE_BUGREPORT='http://bugzilla.gnome.org/enter_bug.cgi?product=GStreamer'
 PACKAGE_URL=''
 
@@ -658,24 +658,16 @@
 X265_CFLAGS
 USE_HLS_FALSE
 USE_HLS_TRUE
-LIBGCRYPT_LIBS
-LIBGCRYPT_CFLAGS
 OPENSSL_LIBS
 OPENSSL_CFLAGS
+LIBGCRYPT_LIBS
+LIBGCRYPT_CFLAGS
 LIBGCRYPT_CONFIG
 NETTLE_LIBS
 NETTLE_CFLAGS
 USE_SNDIO_FALSE
 USE_SNDIO_TRUE
 SNDIO_LIBS
-USE_GSETTINGS_FALSE
-USE_GSETTINGS_TRUE
-GSETTINGS_RULES
-GLIB_COMPILE_SCHEMAS
-gsettingsschemadir
-GSETTINGS_DISABLE_SCHEMAS_COMPILE
-GSETTINGS_LIBS
-GSETTINGS_CFLAGS
 USE_SPANDSP_FALSE
 USE_SPANDSP_TRUE
 SPANDSP_LIBS
@@ -747,8 +739,17 @@
 USE_LIBVISUAL_TRUE
 LIBVISUAL_LIBS
 LIBVISUAL_CFLAGS
+USE_VULKAN_FALSE
+USE_VULKAN_TRUE
+VULKAN_LIBS
 USE_QT_FALSE
 USE_QT_TRUE
+QT_MAC_LIBS
+QT_MAC_CFLAGS
+GNUSTL_LIBS
+GNUSTL_CFLAGS
+QT_ANDROID_LIBS
+QT_ANDROID_CFLAGS
 QT_WAYLAND_LIBS
 QT_WAYLAND_CFLAGS
 QT_X11_LIBS
@@ -772,8 +773,6 @@
 USE_GL_TRUE
 USE_RSVG_FALSE
 USE_RSVG_TRUE
-RSVG_2_36_2_LIBS
-RSVG_2_36_2_CFLAGS
 RSVG_LIBS
 RSVG_CFLAGS
 USE_PVR_FALSE
@@ -831,10 +830,6 @@
 MPLEX_LDFLAGS
 MPLEX_LIBS
 MPLEX_CFLAGS
-USE_MPG123_FALSE
-USE_MPG123_TRUE
-MPG123_LIBS
-MPG123_CFLAGS
 USE_MPEG2ENC_FALSE
 USE_MPEG2ENC_TRUE
 MPEG2ENC_LIBS
@@ -901,7 +896,6 @@
 USE_FBDEV_TRUE
 USE_FAAD_FALSE
 USE_FAAD_TRUE
-FAAD_IS_NEAAC
 FAAD_LIBS
 HAVE_FAAD
 USE_FAAC_FALSE
@@ -924,11 +918,11 @@
 USE_WEBP_TRUE
 WEBP_LIBS
 WEBP_CFLAGS
-wayland_scanner
 USE_WAYLAND_FALSE
 USE_WAYLAND_TRUE
 WAYLAND_LIBS
 WAYLAND_CFLAGS
+wayland_scanner
 USE_DIRECTFB_FALSE
 USE_DIRECTFB_TRUE
 DIRECTFB_LIBS
@@ -982,6 +976,20 @@
 USE_ASSRENDER_TRUE
 ASSRENDER_LIBS
 ASSRENDER_CFLAGS
+USE_TINYALSA_FALSE
+USE_TINYALSA_TRUE
+USE_NVENC_GST_GL_FALSE
+USE_NVENC_GST_GL_TRUE
+USE_NVENC_FALSE
+USE_NVENC_TRUE
+NVENCODE_LIBS
+NVENCODE_CFLAGS
+CUDA_LIBS
+CUDA_CFLAGS
+GST_PBUTILS_LIBS
+GST_PBUTILS_CFLAGS
+GST_VIDEO_LIBS
+GST_VIDEO_CFLAGS
 LIBUDEV_LIBS
 LIBUDEV_CFLAGS
 USE_UVCH264_FALSE
@@ -1032,6 +1040,10 @@
 DIRECTSOUND_LIBS
 DIRECTX_LDFLAGS
 DIRECTX_CFLAGS
+USE_XCB_FALSE
+USE_XCB_TRUE
+XCB_LIBS
+XCB_CFLAGS
 HAVE_JPEG_FALSE
 HAVE_JPEG_TRUE
 HAVE_JPEG
@@ -1078,12 +1090,18 @@
 USE_GLES2
 USE_OPENGL
 GL_OBJCFLAGS
-GL_CFLAGS
-GL_LIBS
+GST_ALLOCATORS_LIBS
+GST_ALLOCATORS_CFLAGS
 WAYLAND_EGL_LIBS
 WAYLAND_EGL_CFLAGS
 HAVE_EGL
+EGL_LIBS
+EGL_CFLAGS
 HAVE_GLES2
+GLES2_LIBS
+GLES2_CFLAGS
+GL_LIBS
+GL_CFLAGS
 HAVE_GL
 X_LIBS
 X_CFLAGS
@@ -1127,8 +1145,6 @@
 USE_PLUGIN_SDP_TRUE
 USE_PLUGIN_SDI_FALSE
 USE_PLUGIN_SDI_TRUE
-USE_PLUGIN_RTP_FALSE
-USE_PLUGIN_RTP_TRUE
 USE_PLUGIN_REMOVESILENCE_FALSE
 USE_PLUGIN_REMOVESILENCE_TRUE
 USE_PLUGIN_RAWPARSE_FALSE
@@ -1143,6 +1159,8 @@
 USE_PLUGIN_ONVIF_TRUE
 USE_PLUGIN_NUVDEMUX_FALSE
 USE_PLUGIN_NUVDEMUX_TRUE
+USE_PLUGIN_NETSIM_FALSE
+USE_PLUGIN_NETSIM_TRUE
 USE_PLUGIN_MXF_FALSE
 USE_PLUGIN_MXF_TRUE
 USE_PLUGIN_MVE_FALSE
@@ -1157,8 +1175,6 @@
 USE_PLUGIN_MPEGDEMUX_TRUE
 USE_PLUGIN_MIDI_FALSE
 USE_PLUGIN_MIDI_TRUE
-USE_PLUGIN_LIVEADDER_FALSE
-USE_PLUGIN_LIVEADDER_TRUE
 USE_PLUGIN_LIBRFB_FALSE
 USE_PLUGIN_LIBRFB_TRUE
 USE_PLUGIN_JPEGFORMAT_FALSE
@@ -1223,6 +1239,8 @@
 USE_PLUGIN_AUDIOFXBAD_TRUE
 USE_PLUGIN_ASFMUX_FALSE
 USE_PLUGIN_ASFMUX_TRUE
+USE_PLUGIN_VIDEOFRAME_AUDIOLEVEL_FALSE
+USE_PLUGIN_VIDEOFRAME_AUDIOLEVEL_TRUE
 USE_PLUGIN_AIFF_FALSE
 USE_PLUGIN_AIFF_TRUE
 USE_PLUGIN_ADPCMENC_FALSE
@@ -1243,6 +1261,9 @@
 WARNING_CXXFLAGS
 ERROR_CFLAGS
 WARNING_CFLAGS
+WITH_GST_PLAYER_TESTS_FALSE
+WITH_GST_PLAYER_TESTS_TRUE
+WGET
 GST_PLUGIN_BUILD_STATIC_FALSE
 GST_PLUGIN_BUILD_STATIC_TRUE
 GST_PLUGIN_LIBTOOLFLAGS
@@ -1489,6 +1510,7 @@
 USE_NLS
 ACLOCAL_AMFLAGS
 CPP
+LT_SYS_LIBRARY_PATH
 OTOOL64
 OTOOL
 LIPO
@@ -1629,6 +1651,7 @@
 enable_shared
 with_pic
 enable_fast_install
+with_aix_soname
 enable_dependency_tracking
 with_gnu_ld
 with_sysroot
@@ -1642,6 +1665,7 @@
 with_libiconv_prefix
 with_libintl_prefix
 enable_fatal_warnings
+enable_extra_check
 enable_debug
 enable_profiling
 enable_valgrind
@@ -1661,8 +1685,10 @@
 enable_gobject_cast_checks
 enable_glib_asserts
 with_gtk
+enable_Bsymbolic
 enable_orc
 enable_static_plugins
+with_player_tests
 with_default_audiosink
 with_default_audiosrc
 with_default_videosink
@@ -1672,6 +1698,7 @@
 enable_adpcmdec
 enable_adpcmenc
 enable_aiff
+enable_videoframe_audiolevel
 enable_asfmux
 enable_audiofxbad
 enable_audiomixer
@@ -1704,7 +1731,6 @@
 enable_jp2kdecimator
 enable_jpegformat
 enable_librfb
-enable_liveadder
 enable_midi
 enable_mpegdemux
 enable_mpegtsdemux
@@ -1712,6 +1738,7 @@
 enable_mpegpsmux
 enable_mve
 enable_mxf
+enable_netsim
 enable_nuvdemux
 enable_onvif
 enable_patchdetect
@@ -1719,7 +1746,6 @@
 enable_pnm
 enable_rawparse
 enable_removesilence
-enable_rtp
 enable_sdi
 enable_sdp
 enable_segmentclip
@@ -1762,6 +1788,9 @@
 enable_vcd
 enable_opensles
 enable_uvch264
+enable_nvenc
+with_cuda_prefix
+enable_tinyalsa
 enable_assrender
 enable_voamrwbenc
 enable_voaacenc
@@ -1795,7 +1824,6 @@
 enable_modplug
 enable_mimic
 enable_mpeg2enc
-enable_mpg123
 enable_mplex
 enable_musepack
 enable_nas
@@ -1814,6 +1842,7 @@
 enable_gl
 enable_gtk3
 enable_qt
+enable_vulkan
 enable_libvisual
 enable_timidity
 enable_teletextdec
@@ -1837,9 +1866,8 @@
 enable_zbar
 enable_rtmp
 enable_spandsp
-enable_gsettings
-enable_schemas_compile
 enable_sndio
+with_hls_crypto
 enable_hls
 with_libgcrypt_prefix
 enable_x265
@@ -1852,6 +1880,7 @@
 LDFLAGS
 LIBS
 CPPFLAGS
+LT_SYS_LIBRARY_PATH
 CPP
 PKG_CONFIG
 VALGRIND_CFLAGS
@@ -1915,10 +1944,20 @@
 ORC_LIBS
 X_CFLAGS
 X_LIBS
+GL_CFLAGS
+GL_LIBS
+GLES2_CFLAGS
+GLES2_LIBS
+EGL_CFLAGS
+EGL_LIBS
 WAYLAND_EGL_CFLAGS
 WAYLAND_EGL_LIBS
+GST_ALLOCATORS_CFLAGS
+GST_ALLOCATORS_LIBS
 LIBPNG_CFLAGS
 LIBPNG_LIBS
+XCB_CFLAGS
+XCB_LIBS
 BLUEZ5_CFLAGS
 BLUEZ5_LIBS
 GIO_UNIX_CFLAGS
@@ -1927,6 +1966,14 @@
 G_UDEV_LIBS
 LIBUSB_CFLAGS
 LIBUSB_LIBS
+GST_VIDEO_CFLAGS
+GST_VIDEO_LIBS
+GST_PBUTILS_CFLAGS
+GST_PBUTILS_LIBS
+CUDA_CFLAGS
+CUDA_LIBS
+NVENCODE_CFLAGS
+NVENCODE_LIBS
 ASSRENDER_CFLAGS
 ASSRENDER_LIBS
 VOAMRWBENC_CFLAGS
@@ -1983,8 +2030,6 @@
 MJPEG_LIBS
 MPEG2ENC_CFLAGS
 MPEG2ENC_LIBS
-MPG123_CFLAGS
-MPG123_LIBS
 MPLEX_CFLAGS
 MPLEX_LIBS
 NEON_CFLAGS
@@ -2009,8 +2054,6 @@
 PVR_LIBS
 RSVG_CFLAGS
 RSVG_LIBS
-RSVG_2_36_2_CFLAGS
-RSVG_2_36_2_LIBS
 GTK3_GL_CFLAGS
 GTK3_GL_LIBS
 GTK3_X11_CFLAGS
@@ -2023,6 +2066,12 @@
 QT_X11_LIBS
 QT_WAYLAND_CFLAGS
 QT_WAYLAND_LIBS
+QT_ANDROID_CFLAGS
+QT_ANDROID_LIBS
+GNUSTL_CFLAGS
+GNUSTL_LIBS
+QT_MAC_CFLAGS
+QT_MAC_LIBS
 LIBVISUAL_CFLAGS
 LIBVISUAL_LIBS
 TIMIDITY_CFLAGS
@@ -2045,8 +2094,6 @@
 RTMP_LIBS
 SPANDSP_CFLAGS
 SPANDSP_LIBS
-GSETTINGS_CFLAGS
-GSETTINGS_LIBS
 NETTLE_CFLAGS
 NETTLE_LIBS
 OPENSSL_CFLAGS
@@ -2603,7 +2650,7 @@
   # Omit some internal or obsolete options to make the list less imposing.
   # This message is too long to be a string in the A/UX 3.1 sh.
   cat <<_ACEOF
-\`configure' configures GStreamer Bad Plug-ins 1.6.3 to adapt to many kinds of systems.
+\`configure' configures GStreamer Bad Plug-ins 1.7.91 to adapt to many kinds of systems.
 
 Usage: $0 [OPTION]... [VAR=VALUE]...
 
@@ -2675,7 +2722,7 @@
 
 if test -n "$ac_init_help"; then
   case $ac_init_help in
-     short | recursive ) echo "Configuration of GStreamer Bad Plug-ins 1.6.3:";;
+     short | recursive ) echo "Configuration of GStreamer Bad Plug-ins 1.7.91:";;
    esac
   cat <<\_ACEOF
 
@@ -2701,6 +2748,7 @@
   --disable-rpath         do not hardcode runtime library paths
   --disable-fatal-warnings
                           Don't turn compiler warnings into fatal errors
+  --enable-extra-checks   Enable extra runtime checks
   --disable-debug         disable addition of -g debugging info
   --enable-profiling      adds -pg to compiler commandline, for profiling
   --disable-valgrind      disable run-time valgrind detection
@@ -2716,14 +2764,17 @@
   --enable-gtk-doc-pdf    build documentation in pdf format [[default=no]]
   --enable-gobject-cast-checks=[no/auto/yes]
                           Enable GObject cast checks
-  --enable-glib-asserts=[no/auto/yes]
+  --enable-glib-asserts=[no/yes]
                           Enable GLib assertion
+  --disable-Bsymbolic     avoid linking with -Bsymbolic
   --enable-orc            use Orc if installed
   --enable-static-plugins build static plugins [default=no]
   --disable-accurip       disable dependency-less accurip plugin
   --disable-adpcmdec      disable dependency-less adpcmdec plugin
   --disable-adpcmenc      disable dependency-less adpcmenc plugin
   --disable-aiff          disable dependency-less aiff plugin
+  --disable-videoframe_audiolevel
+                          disable dependency-less videoframe_audiolevel plugin
   --disable-asfmux        disable dependency-less asfmux plugin
   --disable-audiofxbad    disable dependency-less audiofxbad plugin
   --disable-audiomixer    disable dependency-less audiomixer plugin
@@ -2758,7 +2809,6 @@
   --disable-jp2kdecimator disable dependency-less jp2kdecimator plugin
   --disable-jpegformat    disable dependency-less jpegformat plugin
   --disable-librfb        disable dependency-less librfb plugin
-  --disable-liveadder     disable dependency-less liveadder plugin
   --disable-midi          disable dependency-less midi plugin
   --disable-mpegdemux     disable dependency-less mpegdemux plugin
   --disable-mpegtsdemux   disable dependency-less mpegtsdemux plugin
@@ -2766,6 +2816,7 @@
   --disable-mpegpsmux     disable dependency-less mpegpsmux plugin
   --disable-mve           disable dependency-less mve plugin
   --disable-mxf           disable dependency-less mxf plugin
+  --disable-netsim        disable dependency-less netsim plugin
   --disable-nuvdemux      disable dependency-less nuvdemux plugin
   --disable-onvif         disable dependency-less onvif plugin
   --disable-patchdetect   disable dependency-less patchdetect plugin
@@ -2773,7 +2824,6 @@
   --disable-pnm           disable dependency-less pnm plugin
   --disable-rawparse      disable dependency-less rawparse plugin
   --disable-removesilence disable dependency-less removesilence plugin
-  --disable-rtp           disable dependency-less rtp plugin
   --disable-sdi           disable dependency-less sdi plugin
   --disable-sdp           disable dependency-less sdp plugin
   --disable-segmentclip   disable dependency-less segmentclip plugin
@@ -2812,6 +2862,8 @@
   --disable-vcd                disable Video CD: vcdsrc
   --disable-opensles           disable OpenSL ES: opensl
   --disable-uvch264            disable UVC H264: uvch264
+  --disable-nvenc              disable NVIDIA Encode API: nvenc
+  --disable-tinyalsa           disable tinyalsa: tinyalsa
   --disable-assrender          disable ASS/SSA renderer: assrender
   --disable-voamrwbenc         disable vo-amrwbenc library: vo-amrwbenc
   --disable-voaacenc           disable vo-aacenc library: vo-aacenc
@@ -2830,7 +2882,7 @@
   --disable-dts                disable dts library: dtsdec
   --disable-resindvd           disable resindvd plugin: resindvd
   --disable-faac               disable AAC encoder plug-in: faac
-  --disable-faad               disable AAC decoder plug-in: faad
+  --disable-faad               disable FAAD2 AAC decoder plug-in: faad
   --disable-fbdev              disable linux framebuffer: fbdevsink
   --disable-flite              disable Flite plugin: flite
   --disable-gsm                disable GSM library: gsmenc gsmdec
@@ -2846,7 +2898,6 @@
   --disable-modplug            disable modplug: modplug
   --disable-mimic              disable libmimic library: mimic
   --disable-mpeg2enc           disable mpeg2enc: mpeg2enc
-  --disable-mpg123             disable mpg123 audio decoder: mpg123
   --disable-mplex              disable mplex: mplex
   --disable-musepack           disable musepackdec: musepack
   --disable-nas                disable nas plug-in: nassink
@@ -2864,6 +2915,7 @@
   --disable-gl                 disable gl elements: gl
   --disable-gtk3               disable Gtk+ elements: gtk
   --disable-qt                 disable Qt elements: qt
+  --disable-vulkan             disable Vulkan elements: vulkan
   --disable-libvisual          disable libvisual visualization library: libvisual
   --disable-timidity           disable timidity midi soft synth plugin: timidity
   --disable-teletextdec        disable Teletext decoder: teletextdec
@@ -2885,9 +2937,6 @@
   --disable-zbar               disable ZBar barcode detector: zbar
   --disable-rtmp               disable rtmp library: rtmp
   --disable-spandsp            disable Spandsp: spandsp
-  --disable-gsettings          disable GSettings plugin: gsettings
-  --disable-schemas-compile
-                          Disable regeneration of gschemas.compiled on install
   --disable-sndio              disable sndio audio: sndio
   --disable-hls                disable http live streaming plugin: hls
   --disable-x265               disable x265 plug-in: x265
@@ -2897,9 +2946,12 @@
   --without-PACKAGE       do not use PACKAGE (same as --with-PACKAGE=no)
   --with-pic[=PKGS]       try to use only PIC/non-PIC objects [default=use
                           both]
+  --with-aix-soname=aix|svr4|both
+                          shared library versioning (aka "SONAME") variant to
+                          provide on AIX, [default=aix].
   --with-gnu-ld           assume the C compiler uses GNU ld [default=no]
-  --with-sysroot=DIR Search for dependent libraries within DIR
-                        (or the compiler's sysroot if not specified).
+  --with-sysroot[=DIR]    Search for dependent libraries within DIR (or the
+                          compiler's sysroot if not specified).
   --with-autoconf         use a different autoconf for regeneration of
                           Makefiles
   --with-autoheader       use a different autoheader for regeneration of
@@ -2920,6 +2972,8 @@
                           compile
   --with-html-dir=PATH    path to installed docs
   --with-gtk=3.0|2.0      which gtk+ version to compile against (default: 2.0)
+  --with-player-tests     Enable GstPlayer tests that need network access
+                          (default: no)
   --with-default-audiosink
                           specify default audio sink
   --with-default-audiosrc specify default audio source
@@ -2934,11 +2988,16 @@
                           library module name for GLES2 (default: libGLESv2)
   --with-egl-module-name  library module name for EGL (default: libEGL)
   --with-jpeg-mmx, path to MMX'ified JPEG library
+  --with-cuda-prefix      Use the provided prefix for detecting the cuda
+                          installation
   --with-pvr-external-headers
                           Use system installed PVR2D headers
   --with-sdl-prefix=PFX   prefix where SDL is installed (optional)
   --with-sdl-exec-prefix=PFX
                           exec prefix where SDL is installed (optional)
+  --with-hls-crypto=auto|nettle|libgcrypt|openssl
+                          which cryptographic library version to compile
+                          against for hls (default: auto)
   --with-libgcrypt-prefix=PFX
                           prefix where LIBGCRYPT is installed (optional)
 
@@ -2950,6 +3009,8 @@
   LIBS        libraries to pass to the linker, e.g. -l<library>
   CPPFLAGS    (Objective) C/C++ preprocessor flags, e.g. -I<include dir> if
               you have headers in a nonstandard directory <include dir>
+  LT_SYS_LIBRARY_PATH
+              User-defined run-time library search path.
   CPP         C preprocessor
   PKG_CONFIG  path to pkg-config utility
   VALGRIND_CFLAGS
@@ -3046,13 +3107,26 @@
   ORC_LIBS    linker flags for ORC, overriding pkg-config
   X_CFLAGS    C compiler flags for X, overriding pkg-config
   X_LIBS      linker flags for X, overriding pkg-config
+  GL_CFLAGS   C compiler flags for GL, overriding pkg-config
+  GL_LIBS     linker flags for GL, overriding pkg-config
+  GLES2_CFLAGS
+              C compiler flags for GLES2, overriding pkg-config
+  GLES2_LIBS  linker flags for GLES2, overriding pkg-config
+  EGL_CFLAGS  C compiler flags for EGL, overriding pkg-config
+  EGL_LIBS    linker flags for EGL, overriding pkg-config
   WAYLAND_EGL_CFLAGS
               C compiler flags for WAYLAND_EGL, overriding pkg-config
   WAYLAND_EGL_LIBS
               linker flags for WAYLAND_EGL, overriding pkg-config
+  GST_ALLOCATORS_CFLAGS
+              C compiler flags for GST_ALLOCATORS, overriding pkg-config
+  GST_ALLOCATORS_LIBS
+              linker flags for GST_ALLOCATORS, overriding pkg-config
   LIBPNG_CFLAGS
               C compiler flags for LIBPNG, overriding pkg-config
   LIBPNG_LIBS linker flags for LIBPNG, overriding pkg-config
+  XCB_CFLAGS  C compiler flags for XCB, overriding pkg-config
+  XCB_LIBS    linker flags for XCB, overriding pkg-config
   BLUEZ5_CFLAGS
               C compiler flags for BLUEZ5, overriding pkg-config
   BLUEZ5_LIBS linker flags for BLUEZ5, overriding pkg-config
@@ -3066,6 +3140,20 @@
   LIBUSB_CFLAGS
               C compiler flags for LIBUSB, overriding pkg-config
   LIBUSB_LIBS linker flags for LIBUSB, overriding pkg-config
+  GST_VIDEO_CFLAGS
+              C compiler flags for GST_VIDEO, overriding pkg-config
+  GST_VIDEO_LIBS
+              linker flags for GST_VIDEO, overriding pkg-config
+  GST_PBUTILS_CFLAGS
+              C compiler flags for GST_PBUTILS, overriding pkg-config
+  GST_PBUTILS_LIBS
+              linker flags for GST_PBUTILS, overriding pkg-config
+  CUDA_CFLAGS C compiler flags for CUDA, overriding pkg-config
+  CUDA_LIBS   linker flags for CUDA, overriding pkg-config
+  NVENCODE_CFLAGS
+              C compiler flags for NvEncodeAPI.h
+  NVENCODE_LIBS
+              linker flags for nvidia-encode
   ASSRENDER_CFLAGS
               C compiler flags for ASSRENDER, overriding pkg-config
   ASSRENDER_LIBS
@@ -3154,9 +3242,6 @@
               C compiler flags for MPEG2ENC, overriding pkg-config
   MPEG2ENC_LIBS
               linker flags for MPEG2ENC, overriding pkg-config
-  MPG123_CFLAGS
-              C compiler flags for MPG123, overriding pkg-config
-  MPG123_LIBS linker flags for MPG123, overriding pkg-config
   MPLEX_CFLAGS
               C compiler flags for MPLEX, overriding pkg-config
   MPLEX_LIBS  linker flags for MPLEX, overriding pkg-config
@@ -3192,10 +3277,6 @@
   PVR_LIBS    linker flags for PVR, overriding pkg-config
   RSVG_CFLAGS C compiler flags for RSVG, overriding pkg-config
   RSVG_LIBS   linker flags for RSVG, overriding pkg-config
-  RSVG_2_36_2_CFLAGS
-              C compiler flags for RSVG_2_36_2, overriding pkg-config
-  RSVG_2_36_2_LIBS
-              linker flags for RSVG_2_36_2, overriding pkg-config
   GTK3_GL_CFLAGS
               C compiler flags for GTK3_GL, overriding pkg-config
   GTK3_GL_LIBS
@@ -3217,6 +3298,16 @@
               C compiler flags for QT_WAYLAND, overriding pkg-config
   QT_WAYLAND_LIBS
               linker flags for QT_WAYLAND, overriding pkg-config
+  QT_ANDROID_CFLAGS
+              C compiler flags for QT_ANDROID, overriding pkg-config
+  QT_ANDROID_LIBS
+              linker flags for QT_ANDROID, overriding pkg-config
+  GNUSTL_CFLAGS
+              C compiler flags for GNUSTL, overriding pkg-config
+  GNUSTL_LIBS linker flags for GNUSTL, overriding pkg-config
+  QT_MAC_CFLAGS
+              C compiler flags for QT_MAC, overriding pkg-config
+  QT_MAC_LIBS linker flags for QT_MAC, overriding pkg-config
   LIBVISUAL_CFLAGS
               C compiler flags for LIBVISUAL, overriding pkg-config
   LIBVISUAL_LIBS
@@ -3253,10 +3344,6 @@
               C compiler flags for SPANDSP, overriding pkg-config
   SPANDSP_LIBS
               linker flags for SPANDSP, overriding pkg-config
-  GSETTINGS_CFLAGS
-              C compiler flags for GSETTINGS, overriding pkg-config
-  GSETTINGS_LIBS
-              linker flags for GSETTINGS, overriding pkg-config
   NETTLE_CFLAGS
               C compiler flags for NETTLE, overriding pkg-config
   NETTLE_LIBS linker flags for NETTLE, overriding pkg-config
@@ -3333,7 +3420,7 @@
 test -n "$ac_init_help" && exit $ac_status
 if $ac_init_version; then
   cat <<\_ACEOF
-GStreamer Bad Plug-ins configure 1.6.3
+GStreamer Bad Plug-ins configure 1.7.91
 generated by GNU Autoconf 2.69
 
 Copyright (C) 2012 Free Software Foundation, Inc.
@@ -4306,7 +4393,7 @@
 This file contains any messages produced by compilers while
 running configure, to aid debugging if configure makes a mistake.
 
-It was created by GStreamer Bad Plug-ins $as_me 1.6.3, which was
+It was created by GStreamer Bad Plug-ins $as_me 1.7.91, which was
 generated by GNU Autoconf 2.69.  Invocation command line was
 
   $ $0 $@
@@ -5288,7 +5375,7 @@
 
 # Define the identity of the package.
  PACKAGE='gst-plugins-bad'
- VERSION='1.6.3'
+ VERSION='1.7.91'
 
 
 cat >>confdefs.h <<_ACEOF
@@ -5499,9 +5586,9 @@
 
 
 
-  PACKAGE_VERSION_MAJOR=$(echo 1.6.3 | cut -d'.' -f1)
-  PACKAGE_VERSION_MINOR=$(echo 1.6.3 | cut -d'.' -f2)
-  PACKAGE_VERSION_MICRO=$(echo 1.6.3 | cut -d'.' -f3)
+  PACKAGE_VERSION_MAJOR=$(echo 1.7.91 | cut -d'.' -f1)
+  PACKAGE_VERSION_MINOR=$(echo 1.7.91 | cut -d'.' -f2)
+  PACKAGE_VERSION_MICRO=$(echo 1.7.91 | cut -d'.' -f3)
 
 
 
@@ -5512,7 +5599,7 @@
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking nano version" >&5
 $as_echo_n "checking nano version... " >&6; }
 
-  NANO=$(echo 1.6.3 | cut -d'.' -f4)
+  NANO=$(echo 1.7.91 | cut -d'.' -f4)
 
   if test x"$NANO" = x || test "x$NANO" = "x0" ; then
     { $as_echo "$as_me:${as_lineno-$LINENO}: result: 0 (release)" >&5
@@ -5632,8 +5719,8 @@
 
 
 
-macro_version='2.4.2'
-macro_revision='1.3337'
+macro_version='2.4.6'
+macro_revision='2.4.6'
 
 
 
@@ -5647,7 +5734,7 @@
 
 
 
-ltmain="$ac_aux_dir/ltmain.sh"
+ltmain=$ac_aux_dir/ltmain.sh
 
 # Backslashify metacharacters that are still active within
 # double-quoted strings.
@@ -5696,7 +5783,7 @@
     $ECHO ""
 }
 
-case "$ECHO" in
+case $ECHO in
   printf*) { $as_echo "$as_me:${as_lineno-$LINENO}: result: printf" >&5
 $as_echo "printf" >&6; } ;;
   print*) { $as_echo "$as_me:${as_lineno-$LINENO}: result: print -r" >&5
@@ -7058,19 +7145,19 @@
 
 # Check whether --with-gnu-ld was given.
 if test "${with_gnu_ld+set}" = set; then :
-  withval=$with_gnu_ld; test "$withval" = no || with_gnu_ld=yes
+  withval=$with_gnu_ld; test no = "$withval" || with_gnu_ld=yes
 else
   with_gnu_ld=no
 fi
 
 ac_prog=ld
-if test "$GCC" = yes; then
+if test yes = "$GCC"; then
   # Check if gcc -print-prog-name=ld gives a path.
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5
 $as_echo_n "checking for ld used by $CC... " >&6; }
   case $host in
   *-*-mingw*)
-    # gcc leaves a trailing carriage return which upsets mingw
+    # gcc leaves a trailing carriage return, which upsets mingw
     ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;;
   *)
     ac_prog=`($CC -print-prog-name=ld) 2>&5` ;;
@@ -7084,7 +7171,7 @@
       while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do
 	ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"`
       done
-      test -z "$LD" && LD="$ac_prog"
+      test -z "$LD" && LD=$ac_prog
       ;;
   "")
     # If it fails, then pretend we aren't using GCC.
@@ -7095,7 +7182,7 @@
     with_gnu_ld=unknown
     ;;
   esac
-elif test "$with_gnu_ld" = yes; then
+elif test yes = "$with_gnu_ld"; then
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5
 $as_echo_n "checking for GNU ld... " >&6; }
 else
@@ -7106,32 +7193,32 @@
   $as_echo_n "(cached) " >&6
 else
   if test -z "$LD"; then
-  lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+  lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR
   for ac_dir in $PATH; do
-    IFS="$lt_save_ifs"
+    IFS=$lt_save_ifs
     test -z "$ac_dir" && ac_dir=.
     if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then
-      lt_cv_path_LD="$ac_dir/$ac_prog"
+      lt_cv_path_LD=$ac_dir/$ac_prog
       # Check to see if the program is GNU ld.  I'd rather use --version,
       # but apparently some variants of GNU ld only accept -v.
       # Break only if it was the GNU/non-GNU ld that we prefer.
       case `"$lt_cv_path_LD" -v 2>&1 </dev/null` in
       *GNU* | *'with BFD'*)
-	test "$with_gnu_ld" != no && break
+	test no != "$with_gnu_ld" && break
 	;;
       *)
-	test "$with_gnu_ld" != yes && break
+	test yes != "$with_gnu_ld" && break
 	;;
       esac
     fi
   done
-  IFS="$lt_save_ifs"
+  IFS=$lt_save_ifs
 else
-  lt_cv_path_LD="$LD" # Let the user override the test with a path.
+  lt_cv_path_LD=$LD # Let the user override the test with a path.
 fi
 fi
 
-LD="$lt_cv_path_LD"
+LD=$lt_cv_path_LD
 if test -n "$LD"; then
   { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LD" >&5
 $as_echo "$LD" >&6; }
@@ -7174,33 +7261,38 @@
 else
   if test -n "$NM"; then
   # Let the user override the test.
-  lt_cv_path_NM="$NM"
+  lt_cv_path_NM=$NM
 else
-  lt_nm_to_check="${ac_tool_prefix}nm"
+  lt_nm_to_check=${ac_tool_prefix}nm
   if test -n "$ac_tool_prefix" && test "$build" = "$host"; then
     lt_nm_to_check="$lt_nm_to_check nm"
   fi
   for lt_tmp_nm in $lt_nm_to_check; do
-    lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+    lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR
     for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do
-      IFS="$lt_save_ifs"
+      IFS=$lt_save_ifs
       test -z "$ac_dir" && ac_dir=.
-      tmp_nm="$ac_dir/$lt_tmp_nm"
-      if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then
+      tmp_nm=$ac_dir/$lt_tmp_nm
+      if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext"; then
 	# Check to see if the nm accepts a BSD-compat flag.
-	# Adding the `sed 1q' prevents false positives on HP-UX, which says:
+	# Adding the 'sed 1q' prevents false positives on HP-UX, which says:
 	#   nm: unknown option "B" ignored
 	# Tru64's nm complains that /dev/null is an invalid object file
-	case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in
-	*/dev/null* | *'Invalid file or object type'*)
+	# MSYS converts /dev/null to NUL, MinGW nm treats NUL as empty
+	case $build_os in
+	mingw*) lt_bad_file=conftest.nm/nofile ;;
+	*) lt_bad_file=/dev/null ;;
+	esac
+	case `"$tmp_nm" -B $lt_bad_file 2>&1 | sed '1q'` in
+	*$lt_bad_file* | *'Invalid file or object type'*)
 	  lt_cv_path_NM="$tmp_nm -B"
-	  break
+	  break 2
 	  ;;
 	*)
 	  case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in
 	  */dev/null*)
 	    lt_cv_path_NM="$tmp_nm -p"
-	    break
+	    break 2
 	    ;;
 	  *)
 	    lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but
@@ -7211,15 +7303,15 @@
 	esac
       fi
     done
-    IFS="$lt_save_ifs"
+    IFS=$lt_save_ifs
   done
   : ${lt_cv_path_NM=no}
 fi
 fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_NM" >&5
 $as_echo "$lt_cv_path_NM" >&6; }
-if test "$lt_cv_path_NM" != "no"; then
-  NM="$lt_cv_path_NM"
+if test no != "$lt_cv_path_NM"; then
+  NM=$lt_cv_path_NM
 else
   # Didn't find any BSD compatible name lister, look for dumpbin.
   if test -n "$DUMPBIN"; then :
@@ -7325,9 +7417,9 @@
   fi
 fi
 
-    case `$DUMPBIN -symbols /dev/null 2>&1 | sed '1q'` in
+    case `$DUMPBIN -symbols -headers /dev/null 2>&1 | sed '1q'` in
     *COFF*)
-      DUMPBIN="$DUMPBIN -symbols"
+      DUMPBIN="$DUMPBIN -symbols -headers"
       ;;
     *)
       DUMPBIN=:
@@ -7335,8 +7427,8 @@
     esac
   fi
 
-  if test "$DUMPBIN" != ":"; then
-    NM="$DUMPBIN"
+  if test : != "$DUMPBIN"; then
+    NM=$DUMPBIN
   fi
 fi
 test -z "$NM" && NM=nm
@@ -7387,7 +7479,7 @@
   $as_echo_n "(cached) " >&6
 else
     i=0
-  teststring="ABCD"
+  teststring=ABCD
 
   case $build_os in
   msdosdjgpp*)
@@ -7427,7 +7519,7 @@
     lt_cv_sys_max_cmd_len=8192;
     ;;
 
-  netbsd* | freebsd* | openbsd* | darwin* | dragonfly*)
+  bitrig* | darwin* | dragonfly* | freebsd* | netbsd* | openbsd*)
     # This has been around since 386BSD, at least.  Likely further.
     if test -x /sbin/sysctl; then
       lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax`
@@ -7478,22 +7570,22 @@
   *)
     lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null`
     if test -n "$lt_cv_sys_max_cmd_len" && \
-	test undefined != "$lt_cv_sys_max_cmd_len"; then
+       test undefined != "$lt_cv_sys_max_cmd_len"; then
       lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4`
       lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3`
     else
       # Make teststring a little bigger before we do anything with it.
       # a 1K string should be a reasonable start.
-      for i in 1 2 3 4 5 6 7 8 ; do
+      for i in 1 2 3 4 5 6 7 8; do
         teststring=$teststring$teststring
       done
       SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}}
       # If test is not a shell built-in, we'll probably end up computing a
       # maximum length that is only half of the actual maximum length, but
       # we can't tell.
-      while { test "X"`env echo "$teststring$teststring" 2>/dev/null` \
+      while { test X`env echo "$teststring$teststring" 2>/dev/null` \
 	         = "X$teststring$teststring"; } >/dev/null 2>&1 &&
-	      test $i != 17 # 1/2 MB should be enough
+	      test 17 != "$i" # 1/2 MB should be enough
       do
         i=`expr $i + 1`
         teststring=$teststring$teststring
@@ -7511,7 +7603,7 @@
 
 fi
 
-if test -n $lt_cv_sys_max_cmd_len ; then
+if test -n "$lt_cv_sys_max_cmd_len"; then
   { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sys_max_cmd_len" >&5
 $as_echo "$lt_cv_sys_max_cmd_len" >&6; }
 else
@@ -7529,30 +7621,6 @@
 : ${MV="mv -f"}
 : ${RM="rm -f"}
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the shell understands some XSI constructs" >&5
-$as_echo_n "checking whether the shell understands some XSI constructs... " >&6; }
-# Try some XSI features
-xsi_shell=no
-( _lt_dummy="a/b/c"
-  test "${_lt_dummy##*/},${_lt_dummy%/*},${_lt_dummy#??}"${_lt_dummy%"$_lt_dummy"}, \
-      = c,a/b,b/c, \
-    && eval 'test $(( 1 + 1 )) -eq 2 \
-    && test "${#_lt_dummy}" -eq 5' ) >/dev/null 2>&1 \
-  && xsi_shell=yes
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $xsi_shell" >&5
-$as_echo "$xsi_shell" >&6; }
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the shell understands \"+=\"" >&5
-$as_echo_n "checking whether the shell understands \"+=\"... " >&6; }
-lt_shell_append=no
-( foo=bar; set foo baz; eval "$1+=\$2" && test "$foo" = barbaz ) \
-    >/dev/null 2>&1 \
-  && lt_shell_append=yes
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_shell_append" >&5
-$as_echo "$lt_shell_append" >&6; }
-
-
 if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then
   lt_unset=unset
 else
@@ -7675,13 +7743,13 @@
 reload_cmds='$LD$reload_flag -o $output$reload_objs'
 case $host_os in
   cygwin* | mingw* | pw32* | cegcc*)
-    if test "$GCC" != yes; then
+    if test yes != "$GCC"; then
       reload_cmds=false
     fi
     ;;
   darwin*)
-    if test "$GCC" = yes; then
-      reload_cmds='$LTCC $LTCFLAGS -nostdlib ${wl}-r -o $output$reload_objs'
+    if test yes = "$GCC"; then
+      reload_cmds='$LTCC $LTCFLAGS -nostdlib $wl-r -o $output$reload_objs'
     else
       reload_cmds='$LD$reload_flag -o $output$reload_objs'
     fi
@@ -7806,13 +7874,13 @@
 # Need to set the preceding variable on all platforms that support
 # interlibrary dependencies.
 # 'none' -- dependencies not supported.
-# `unknown' -- same as none, but documents that we really don't know.
+# 'unknown' -- same as none, but documents that we really don't know.
 # 'pass_all' -- all dependencies passed with no checks.
 # 'test_compile' -- check by making test program.
 # 'file_magic [[regex]]' -- check by looking for files in library path
-# which responds to the $file_magic_cmd with a given extended regex.
-# If you have `file' or equivalent on your system and you're not sure
-# whether `pass_all' will *always* work, you probably want this one.
+# that responds to the $file_magic_cmd with a given extended regex.
+# If you have 'file' or equivalent on your system and you're not sure
+# whether 'pass_all' will *always* work, you probably want this one.
 
 case $host_os in
 aix[4-9]*)
@@ -7839,8 +7907,7 @@
   # Base MSYS/MinGW do not provide the 'file' command needed by
   # func_win32_libid shell function, so use a weaker test based on 'objdump',
   # unless we find 'file', for example because we are cross-compiling.
-  # func_win32_libid assumes BSD nm, so disallow it if using MS dumpbin.
-  if ( test "$lt_cv_nm_interface" = "BSD nm" && file / ) >/dev/null 2>&1; then
+  if ( file / ) >/dev/null 2>&1; then
     lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL'
     lt_cv_file_magic_cmd='func_win32_libid'
   else
@@ -7936,8 +8003,8 @@
   lt_cv_deplibs_check_method=pass_all
   ;;
 
-openbsd*)
-  if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+openbsd* | bitrig*)
+  if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then
     lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|\.so|_pic\.a)$'
   else
     lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$'
@@ -7990,6 +8057,9 @@
 tpf*)
   lt_cv_deplibs_check_method=pass_all
   ;;
+os2*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
 esac
 
 fi
@@ -8144,8 +8214,8 @@
 
 case $host_os in
 cygwin* | mingw* | pw32* | cegcc*)
-  # two different shell functions defined in ltmain.sh
-  # decide which to use based on capabilities of $DLLTOOL
+  # two different shell functions defined in ltmain.sh;
+  # decide which one to use based on capabilities of $DLLTOOL
   case `$DLLTOOL --help 2>&1` in
   *--identify-strict*)
     lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib
@@ -8157,7 +8227,7 @@
   ;;
 *)
   # fallback: assume linklib IS sharedlib
-  lt_cv_sharedlib_from_linklib_cmd="$ECHO"
+  lt_cv_sharedlib_from_linklib_cmd=$ECHO
   ;;
 esac
 
@@ -8312,7 +8382,7 @@
   ac_status=$?
   $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
   test $ac_status = 0; }
-      if test "$ac_status" -eq 0; then
+      if test 0 -eq "$ac_status"; then
 	# Ensure the archiver fails upon bogus file names.
 	rm -f conftest.$ac_objext libconftest.a
 	{ { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$lt_ar_try\""; } >&5
@@ -8320,7 +8390,7 @@
   ac_status=$?
   $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
   test $ac_status = 0; }
-	if test "$ac_status" -ne 0; then
+	if test 0 -ne "$ac_status"; then
           lt_cv_ar_at_file=@
         fi
       fi
@@ -8333,7 +8403,7 @@
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ar_at_file" >&5
 $as_echo "$lt_cv_ar_at_file" >&6; }
 
-if test "x$lt_cv_ar_at_file" = xno; then
+if test no = "$lt_cv_ar_at_file"; then
   archiver_list_spec=
 else
   archiver_list_spec=$lt_cv_ar_at_file
@@ -8550,7 +8620,7 @@
 
 if test -n "$RANLIB"; then
   case $host_os in
-  openbsd*)
+  bitrig* | openbsd*)
     old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$tool_oldlib"
     ;;
   *)
@@ -8640,7 +8710,7 @@
   symcode='[ABCDGISTW]'
   ;;
 hpux*)
-  if test "$host_cpu" = ia64; then
+  if test ia64 = "$host_cpu"; then
     symcode='[ABCDEGRST]'
   fi
   ;;
@@ -8673,14 +8743,44 @@
   symcode='[ABCDGIRSTW]' ;;
 esac
 
+if test "$lt_cv_nm_interface" = "MS dumpbin"; then
+  # Gets list of data symbols to import.
+  lt_cv_sys_global_symbol_to_import="sed -n -e 's/^I .* \(.*\)$/\1/p'"
+  # Adjust the below global symbol transforms to fixup imported variables.
+  lt_cdecl_hook=" -e 's/^I .* \(.*\)$/extern __declspec(dllimport) char \1;/p'"
+  lt_c_name_hook=" -e 's/^I .* \(.*\)$/  {\"\1\", (void *) 0},/p'"
+  lt_c_name_lib_hook="\
+  -e 's/^I .* \(lib.*\)$/  {\"\1\", (void *) 0},/p'\
+  -e 's/^I .* \(.*\)$/  {\"lib\1\", (void *) 0},/p'"
+else
+  # Disable hooks by default.
+  lt_cv_sys_global_symbol_to_import=
+  lt_cdecl_hook=
+  lt_c_name_hook=
+  lt_c_name_lib_hook=
+fi
+
 # Transform an extracted symbol line into a proper C declaration.
 # Some systems (esp. on ia64) link data and code symbols differently,
 # so use this general approach.
-lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'"
+lt_cv_sys_global_symbol_to_cdecl="sed -n"\
+$lt_cdecl_hook\
+" -e 's/^T .* \(.*\)$/extern int \1();/p'"\
+" -e 's/^$symcode$symcode* .* \(.*\)$/extern char \1;/p'"
 
 # Transform an extracted symbol line into symbol name and symbol address
-lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([^ ]*\)[ ]*$/  {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/  {\"\2\", (void *) \&\2},/p'"
-lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([^ ]*\)[ ]*$/  {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \(lib[^ ]*\)$/  {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/  {\"lib\2\", (void *) \&\2},/p'"
+lt_cv_sys_global_symbol_to_c_name_address="sed -n"\
+$lt_c_name_hook\
+" -e 's/^: \(.*\) .*$/  {\"\1\", (void *) 0},/p'"\
+" -e 's/^$symcode$symcode* .* \(.*\)$/  {\"\1\", (void *) \&\1},/p'"
+
+# Transform an extracted symbol line into symbol name with lib prefix and
+# symbol address.
+lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n"\
+$lt_c_name_lib_hook\
+" -e 's/^: \(.*\) .*$/  {\"\1\", (void *) 0},/p'"\
+" -e 's/^$symcode$symcode* .* \(lib.*\)$/  {\"\1\", (void *) \&\1},/p'"\
+" -e 's/^$symcode$symcode* .* \(.*\)$/  {\"lib\1\", (void *) \&\1},/p'"
 
 # Handle CRLF in mingw tool chain
 opt_cr=
@@ -8698,21 +8798,24 @@
 
   # Write the raw and C identifiers.
   if test "$lt_cv_nm_interface" = "MS dumpbin"; then
-    # Fake it for dumpbin and say T for any non-static function
-    # and D for any global variable.
+    # Fake it for dumpbin and say T for any non-static function,
+    # D for any global variable and I for any imported variable.
     # Also find C++ and __fastcall symbols from MSVC++,
     # which start with @ or ?.
     lt_cv_sys_global_symbol_pipe="$AWK '"\
 "     {last_section=section; section=\$ 3};"\
 "     /^COFF SYMBOL TABLE/{for(i in hide) delete hide[i]};"\
 "     /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\
+"     /^ *Symbol name *: /{split(\$ 0,sn,\":\"); si=substr(sn[2],2)};"\
+"     /^ *Type *: code/{print \"T\",si,substr(si,length(prfx))};"\
+"     /^ *Type *: data/{print \"I\",si,substr(si,length(prfx))};"\
 "     \$ 0!~/External *\|/{next};"\
 "     / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\
 "     {if(hide[section]) next};"\
-"     {f=0}; \$ 0~/\(\).*\|/{f=1}; {printf f ? \"T \" : \"D \"};"\
-"     {split(\$ 0, a, /\||\r/); split(a[2], s)};"\
-"     s[1]~/^[@?]/{print s[1], s[1]; next};"\
-"     s[1]~prfx {split(s[1],t,\"@\"); print t[1], substr(t[1],length(prfx))}"\
+"     {f=\"D\"}; \$ 0~/\(\).*\|/{f=\"T\"};"\
+"     {split(\$ 0,a,/\||\r/); split(a[2],s)};"\
+"     s[1]~/^[@?]/{print f,s[1],s[1]; next};"\
+"     s[1]~prfx {split(s[1],t,\"@\"); print f,t[1],substr(t[1],length(prfx))}"\
 "     ' prfx=^$ac_symprfx"
   else
     lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[	 ]\($symcode$symcode*\)[	 ][	 ]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'"
@@ -8760,11 +8863,11 @@
 	if $GREP ' nm_test_func$' "$nlist" >/dev/null; then
 	  cat <<_LT_EOF > conftest.$ac_ext
 /* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests.  */
-#if defined(_WIN32) || defined(__CYGWIN__) || defined(_WIN32_WCE)
-/* DATA imports from DLLs on WIN32 con't be const, because runtime
+#if defined _WIN32 || defined __CYGWIN__ || defined _WIN32_WCE
+/* DATA imports from DLLs on WIN32 can't be const, because runtime
    relocations are performed -- see ld's documentation on pseudo-relocs.  */
 # define LT_DLSYM_CONST
-#elif defined(__osf__)
+#elif defined __osf__
 /* This system does not cope well with relocations in const data.  */
 # define LT_DLSYM_CONST
 #else
@@ -8790,7 +8893,7 @@
 {
   { "@PROGRAM@", (void *) 0 },
 _LT_EOF
-	  $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/  {\"\2\", (void *) \&\2},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext
+	  $SED "s/^$symcode$symcode* .* \(.*\)$/  {\"\1\", (void *) \&\1},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext
 	  cat <<\_LT_EOF >> conftest.$ac_ext
   {0, (void *) 0}
 };
@@ -8810,13 +8913,13 @@
 	  mv conftest.$ac_objext conftstm.$ac_objext
 	  lt_globsym_save_LIBS=$LIBS
 	  lt_globsym_save_CFLAGS=$CFLAGS
-	  LIBS="conftstm.$ac_objext"
+	  LIBS=conftstm.$ac_objext
 	  CFLAGS="$CFLAGS$lt_prog_compiler_no_builtin_flag"
 	  if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5
   (eval $ac_link) 2>&5
   ac_status=$?
   $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; } && test -s conftest${ac_exeext}; then
+  test $ac_status = 0; } && test -s conftest$ac_exeext; then
 	    pipe_works=yes
 	  fi
 	  LIBS=$lt_globsym_save_LIBS
@@ -8837,7 +8940,7 @@
   rm -rf conftest* conftst*
 
   # Do not use the global_symbol_pipe unless it works.
-  if test "$pipe_works" = yes; then
+  if test yes = "$pipe_works"; then
     break
   else
     lt_cv_sys_global_symbol_pipe=
@@ -8890,6 +8993,16 @@
 
 
 
+
+
+
+
+
+
+
+
+
+
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for sysroot" >&5
 $as_echo_n "checking for sysroot... " >&6; }
 
@@ -8902,9 +9015,9 @@
 
 
 lt_sysroot=
-case ${with_sysroot} in #(
+case $with_sysroot in #(
  yes)
-   if test "$GCC" = yes; then
+   if test yes = "$GCC"; then
      lt_sysroot=`$CC --print-sysroot 2>/dev/null`
    fi
    ;; #(
@@ -8914,8 +9027,8 @@
  no|'')
    ;; #(
  *)
-   { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${with_sysroot}" >&5
-$as_echo "${with_sysroot}" >&6; }
+   { $as_echo "$as_me:${as_lineno-$LINENO}: result: $with_sysroot" >&5
+$as_echo "$with_sysroot" >&6; }
    as_fn_error $? "The sysroot must be an absolute path." "$LINENO" 5
    ;;
 esac
@@ -8927,18 +9040,99 @@
 
 
 
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a working dd" >&5
+$as_echo_n "checking for a working dd... " >&6; }
+if ${ac_cv_path_lt_DD+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  printf 0123456789abcdef0123456789abcdef >conftest.i
+cat conftest.i conftest.i >conftest2.i
+: ${lt_DD:=$DD}
+if test -z "$lt_DD"; then
+  ac_path_lt_DD_found=false
+  # Loop through the user's path and test for each of PROGNAME-LIST
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_prog in dd; do
+    for ac_exec_ext in '' $ac_executable_extensions; do
+      ac_path_lt_DD="$as_dir/$ac_prog$ac_exec_ext"
+      as_fn_executable_p "$ac_path_lt_DD" || continue
+if "$ac_path_lt_DD" bs=32 count=1 <conftest2.i >conftest.out 2>/dev/null; then
+  cmp -s conftest.i conftest.out \
+  && ac_cv_path_lt_DD="$ac_path_lt_DD" ac_path_lt_DD_found=:
+fi
+      $ac_path_lt_DD_found && break 3
+    done
+  done
+  done
+IFS=$as_save_IFS
+  if test -z "$ac_cv_path_lt_DD"; then
+    :
+  fi
+else
+  ac_cv_path_lt_DD=$lt_DD
+fi
+
+rm -f conftest.i conftest2.i conftest.out
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_lt_DD" >&5
+$as_echo "$ac_cv_path_lt_DD" >&6; }
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to truncate binary pipes" >&5
+$as_echo_n "checking how to truncate binary pipes... " >&6; }
+if ${lt_cv_truncate_bin+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  printf 0123456789abcdef0123456789abcdef >conftest.i
+cat conftest.i conftest.i >conftest2.i
+lt_cv_truncate_bin=
+if "$ac_cv_path_lt_DD" bs=32 count=1 <conftest2.i >conftest.out 2>/dev/null; then
+  cmp -s conftest.i conftest.out \
+  && lt_cv_truncate_bin="$ac_cv_path_lt_DD bs=4096 count=1"
+fi
+rm -f conftest.i conftest2.i conftest.out
+test -z "$lt_cv_truncate_bin" && lt_cv_truncate_bin="$SED -e 4q"
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_truncate_bin" >&5
+$as_echo "$lt_cv_truncate_bin" >&6; }
+
+
+
+
+
+
+
+# Calculate cc_basename.  Skip known compiler wrappers and cross-prefix.
+func_cc_basename ()
+{
+    for cc_temp in $*""; do
+      case $cc_temp in
+        compile | *[\\/]compile | ccache | *[\\/]ccache ) ;;
+        distcc | *[\\/]distcc | purify | *[\\/]purify ) ;;
+        \-*) ;;
+        *) break;;
+      esac
+    done
+    func_cc_basename_result=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"`
+}
+
 # Check whether --enable-libtool-lock was given.
 if test "${enable_libtool_lock+set}" = set; then :
   enableval=$enable_libtool_lock;
 fi
 
-test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes
+test no = "$enable_libtool_lock" || enable_libtool_lock=yes
 
 # Some flags need to be propagated to the compiler or linker for good
 # libtool support.
 case $host in
 ia64-*-hpux*)
-  # Find out which ABI we are using.
+  # Find out what ABI is being produced by ac_compile, and set mode
+  # options accordingly.
   echo 'int i;' > conftest.$ac_ext
   if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
   (eval $ac_compile) 2>&5
@@ -8947,24 +9141,25 @@
   test $ac_status = 0; }; then
     case `/usr/bin/file conftest.$ac_objext` in
       *ELF-32*)
-	HPUX_IA64_MODE="32"
+	HPUX_IA64_MODE=32
 	;;
       *ELF-64*)
-	HPUX_IA64_MODE="64"
+	HPUX_IA64_MODE=64
 	;;
     esac
   fi
   rm -rf conftest*
   ;;
 *-*-irix6*)
-  # Find out which ABI we are using.
+  # Find out what ABI is being produced by ac_compile, and set linker
+  # options accordingly.
   echo '#line '$LINENO' "configure"' > conftest.$ac_ext
   if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
   (eval $ac_compile) 2>&5
   ac_status=$?
   $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
   test $ac_status = 0; }; then
-    if test "$lt_cv_prog_gnu_ld" = yes; then
+    if test yes = "$lt_cv_prog_gnu_ld"; then
       case `/usr/bin/file conftest.$ac_objext` in
 	*32-bit*)
 	  LD="${LD-ld} -melf32bsmip"
@@ -8993,9 +9188,50 @@
   rm -rf conftest*
   ;;
 
+mips64*-*linux*)
+  # Find out what ABI is being produced by ac_compile, and set linker
+  # options accordingly.
+  echo '#line '$LINENO' "configure"' > conftest.$ac_ext
+  if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+    emul=elf
+    case `/usr/bin/file conftest.$ac_objext` in
+      *32-bit*)
+	emul="${emul}32"
+	;;
+      *64-bit*)
+	emul="${emul}64"
+	;;
+    esac
+    case `/usr/bin/file conftest.$ac_objext` in
+      *MSB*)
+	emul="${emul}btsmip"
+	;;
+      *LSB*)
+	emul="${emul}ltsmip"
+	;;
+    esac
+    case `/usr/bin/file conftest.$ac_objext` in
+      *N32*)
+	emul="${emul}n32"
+	;;
+    esac
+    LD="${LD-ld} -m $emul"
+  fi
+  rm -rf conftest*
+  ;;
+
 x86_64-*kfreebsd*-gnu|x86_64-*linux*|powerpc*-*linux*| \
 s390*-*linux*|s390*-*tpf*|sparc*-*linux*)
-  # Find out which ABI we are using.
+  # Find out what ABI is being produced by ac_compile, and set linker
+  # options accordingly.  Note that the listed cases only cover the
+  # situations where additional linker options are needed (such as when
+  # doing 32-bit compilation for a host where ld defaults to 64-bit, or
+  # vice versa); the common cases where no linker options are needed do
+  # not appear in the list.
   echo 'int i;' > conftest.$ac_ext
   if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
   (eval $ac_compile) 2>&5
@@ -9018,10 +9254,10 @@
 		;;
 	    esac
 	    ;;
-	  powerpc64le-*)
+	  powerpc64le-*linux*)
 	    LD="${LD-ld} -m elf32lppclinux"
 	    ;;
-	  powerpc64-*)
+	  powerpc64-*linux*)
 	    LD="${LD-ld} -m elf32ppclinux"
 	    ;;
 	  s390x-*linux*)
@@ -9040,10 +9276,10 @@
 	  x86_64-*linux*)
 	    LD="${LD-ld} -m elf_x86_64"
 	    ;;
-	  powerpcle-*)
+	  powerpcle-*linux*)
 	    LD="${LD-ld} -m elf64lppc"
 	    ;;
-	  powerpc-*)
+	  powerpc-*linux*)
 	    LD="${LD-ld} -m elf64ppc"
 	    ;;
 	  s390*-*linux*|s390*-*tpf*)
@@ -9061,7 +9297,7 @@
 
 *-*-sco3.2v5*)
   # On SCO OpenServer 5, we need -belf to get full-featured binaries.
-  SAVE_CFLAGS="$CFLAGS"
+  SAVE_CFLAGS=$CFLAGS
   CFLAGS="$CFLAGS -belf"
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler needs -belf" >&5
 $as_echo_n "checking whether the C compiler needs -belf... " >&6; }
@@ -9101,13 +9337,14 @@
 fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_cc_needs_belf" >&5
 $as_echo "$lt_cv_cc_needs_belf" >&6; }
-  if test x"$lt_cv_cc_needs_belf" != x"yes"; then
+  if test yes != "$lt_cv_cc_needs_belf"; then
     # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf
-    CFLAGS="$SAVE_CFLAGS"
+    CFLAGS=$SAVE_CFLAGS
   fi
   ;;
 *-*solaris*)
-  # Find out which ABI we are using.
+  # Find out what ABI is being produced by ac_compile, and set linker
+  # options accordingly.
   echo 'int i;' > conftest.$ac_ext
   if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
   (eval $ac_compile) 2>&5
@@ -9119,7 +9356,7 @@
       case $lt_cv_prog_gnu_ld in
       yes*)
         case $host in
-        i?86-*-solaris*)
+        i?86-*-solaris*|x86_64-*-solaris*)
           LD="${LD-ld} -m elf_x86_64"
           ;;
         sparc*-*-solaris*)
@@ -9128,7 +9365,7 @@
         esac
         # GNU ld 2.21 introduced _sol2 emulations.  Use them if available.
         if ${LD-ld} -V | grep _sol2 >/dev/null 2>&1; then
-          LD="${LD-ld}_sol2"
+          LD=${LD-ld}_sol2
         fi
         ;;
       *)
@@ -9144,7 +9381,7 @@
   ;;
 esac
 
-need_locks="$enable_libtool_lock"
+need_locks=$enable_libtool_lock
 
 if test -n "$ac_tool_prefix"; then
   # Extract the first word of "${ac_tool_prefix}mt", so it can be a program name with args.
@@ -9255,7 +9492,7 @@
 fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_mainfest_tool" >&5
 $as_echo "$lt_cv_path_mainfest_tool" >&6; }
-if test "x$lt_cv_path_mainfest_tool" != xyes; then
+if test yes != "$lt_cv_path_mainfest_tool"; then
   MANIFEST_TOOL=:
 fi
 
@@ -9758,7 +9995,7 @@
   $as_echo_n "(cached) " >&6
 else
   lt_cv_apple_cc_single_mod=no
-      if test -z "${LT_MULTI_MODULE}"; then
+      if test -z "$LT_MULTI_MODULE"; then
 	# By default we will add the -single_module flag. You can override
 	# by either setting the environment variable LT_MULTI_MODULE
 	# non-empty at configure time, or by adding -multi_module to the
@@ -9776,7 +10013,7 @@
 	  cat conftest.err >&5
 	# Otherwise, if the output was created with a 0 exit code from
 	# the compiler, it worked.
-	elif test -f libconftest.dylib && test $_lt_result -eq 0; then
+	elif test -f libconftest.dylib && test 0 = "$_lt_result"; then
 	  lt_cv_apple_cc_single_mod=yes
 	else
 	  cat conftest.err >&5
@@ -9815,7 +10052,7 @@
 fi
 rm -f core conftest.err conftest.$ac_objext \
     conftest$ac_exeext conftest.$ac_ext
-	LDFLAGS="$save_LDFLAGS"
+	LDFLAGS=$save_LDFLAGS
 
 fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_exported_symbols_list" >&5
@@ -9844,7 +10081,7 @@
       _lt_result=$?
       if test -s conftest.err && $GREP force_load conftest.err; then
 	cat conftest.err >&5
-      elif test -f conftest && test $_lt_result -eq 0 && $GREP forced_load conftest >/dev/null 2>&1 ; then
+      elif test -f conftest && test 0 = "$_lt_result" && $GREP forced_load conftest >/dev/null 2>&1; then
 	lt_cv_ld_force_load=yes
       else
 	cat conftest.err >&5
@@ -9857,32 +10094,32 @@
 $as_echo "$lt_cv_ld_force_load" >&6; }
     case $host_os in
     rhapsody* | darwin1.[012])
-      _lt_dar_allow_undefined='${wl}-undefined ${wl}suppress' ;;
+      _lt_dar_allow_undefined='$wl-undefined ${wl}suppress' ;;
     darwin1.*)
-      _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;;
+      _lt_dar_allow_undefined='$wl-flat_namespace $wl-undefined ${wl}suppress' ;;
     darwin*) # darwin 5.x on
       # if running on 10.5 or later, the deployment target defaults
       # to the OS version, if on x86, and 10.4, the deployment
       # target defaults to 10.4. Don't you love it?
       case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in
 	10.0,*86*-darwin8*|10.0,*-darwin[91]*)
-	  _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;;
-	10.[012]*)
-	  _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;;
+	  _lt_dar_allow_undefined='$wl-undefined ${wl}dynamic_lookup' ;;
+	10.[012][,.]*)
+	  _lt_dar_allow_undefined='$wl-flat_namespace $wl-undefined ${wl}suppress' ;;
 	10.*)
-	  _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;;
+	  _lt_dar_allow_undefined='$wl-undefined ${wl}dynamic_lookup' ;;
       esac
     ;;
   esac
-    if test "$lt_cv_apple_cc_single_mod" = "yes"; then
+    if test yes = "$lt_cv_apple_cc_single_mod"; then
       _lt_dar_single_mod='$single_module'
     fi
-    if test "$lt_cv_ld_exported_symbols_list" = "yes"; then
-      _lt_dar_export_syms=' ${wl}-exported_symbols_list,$output_objdir/${libname}-symbols.expsym'
+    if test yes = "$lt_cv_ld_exported_symbols_list"; then
+      _lt_dar_export_syms=' $wl-exported_symbols_list,$output_objdir/$libname-symbols.expsym'
     else
-      _lt_dar_export_syms='~$NMEDIT -s $output_objdir/${libname}-symbols.expsym ${lib}'
+      _lt_dar_export_syms='~$NMEDIT -s $output_objdir/$libname-symbols.expsym $lib'
     fi
-    if test "$DSYMUTIL" != ":" && test "$lt_cv_ld_force_load" = "no"; then
+    if test : != "$DSYMUTIL" && test no = "$lt_cv_ld_force_load"; then
       _lt_dsymutil='~$DSYMUTIL $lib || :'
     else
       _lt_dsymutil=
@@ -9890,6 +10127,41 @@
     ;;
   esac
 
+# func_munge_path_list VARIABLE PATH
+# -----------------------------------
+# VARIABLE is name of variable containing _space_ separated list of
+# directories to be munged by the contents of PATH, which is string
+# having a format:
+# "DIR[:DIR]:"
+#       string "DIR[ DIR]" will be prepended to VARIABLE
+# ":DIR[:DIR]"
+#       string "DIR[ DIR]" will be appended to VARIABLE
+# "DIRP[:DIRP]::[DIRA:]DIRA"
+#       string "DIRP[ DIRP]" will be prepended to VARIABLE and string
+#       "DIRA[ DIRA]" will be appended to VARIABLE
+# "DIR[:DIR]"
+#       VARIABLE will be replaced by "DIR[ DIR]"
+func_munge_path_list ()
+{
+    case x$2 in
+    x)
+        ;;
+    *:)
+        eval $1=\"`$ECHO $2 | $SED 's/:/ /g'` \$$1\"
+        ;;
+    x:*)
+        eval $1=\"\$$1 `$ECHO $2 | $SED 's/:/ /g'`\"
+        ;;
+    *::*)
+        eval $1=\"\$$1\ `$ECHO $2 | $SED -e 's/.*:://' -e 's/:/ /g'`\"
+        eval $1=\"`$ECHO $2 | $SED -e 's/::.*//' -e 's/:/ /g'`\ \$$1\"
+        ;;
+    *)
+        eval $1=\"`$ECHO $2 | $SED 's/:/ /g'`\"
+        ;;
+    esac
+}
+
 ac_ext=c
 ac_cpp='$CPP $CPPFLAGS'
 ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
@@ -10171,10 +10443,10 @@
 done
 
 
-  GST_CURRENT=603
+  GST_CURRENT=791
   GST_REVISION=0
-  GST_AGE=603
-  GST_LIBVERSION=603:0:603
+  GST_AGE=791
+  GST_LIBVERSION=791:0:791
 
 
 
@@ -10503,14 +10775,14 @@
     *)
      enable_static=no
       # Look at the argument we got.  We use all the common list separators.
-      lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
+      lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR,
       for pkg in $enableval; do
-	IFS="$lt_save_ifs"
+	IFS=$lt_save_ifs
 	if test "X$pkg" = "X$p"; then
 	  enable_static=yes
 	fi
       done
-      IFS="$lt_save_ifs"
+      IFS=$lt_save_ifs
       ;;
     esac
 else
@@ -10537,14 +10809,14 @@
     *)
       enable_shared=no
       # Look at the argument we got.  We use all the common list separators.
-      lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
+      lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR,
       for pkg in $enableval; do
-	IFS="$lt_save_ifs"
+	IFS=$lt_save_ifs
 	if test "X$pkg" = "X$p"; then
 	  enable_shared=yes
 	fi
       done
-      IFS="$lt_save_ifs"
+      IFS=$lt_save_ifs
       ;;
     esac
 else
@@ -10569,14 +10841,14 @@
     *)
       pic_mode=default
       # Look at the argument we got.  We use all the common list separators.
-      lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
+      lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR,
       for lt_pkg in $withval; do
-	IFS="$lt_save_ifs"
+	IFS=$lt_save_ifs
 	if test "X$lt_pkg" = "X$lt_p"; then
 	  pic_mode=yes
 	fi
       done
-      IFS="$lt_save_ifs"
+      IFS=$lt_save_ifs
       ;;
     esac
 else
@@ -10584,8 +10856,6 @@
 fi
 
 
-test -z "$pic_mode" && pic_mode=default
-
 
 
 
@@ -10601,14 +10871,14 @@
     *)
       enable_fast_install=no
       # Look at the argument we got.  We use all the common list separators.
-      lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
+      lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR,
       for pkg in $enableval; do
-	IFS="$lt_save_ifs"
+	IFS=$lt_save_ifs
 	if test "X$pkg" = "X$p"; then
 	  enable_fast_install=yes
 	fi
       done
-      IFS="$lt_save_ifs"
+      IFS=$lt_save_ifs
       ;;
     esac
 else
@@ -10622,11 +10892,63 @@
 
 
 
+  shared_archive_member_spec=
+case $host,$enable_shared in
+power*-*-aix[5-9]*,yes)
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking which variant of shared library versioning to provide" >&5
+$as_echo_n "checking which variant of shared library versioning to provide... " >&6; }
+
+# Check whether --with-aix-soname was given.
+if test "${with_aix_soname+set}" = set; then :
+  withval=$with_aix_soname; case $withval in
+    aix|svr4|both)
+      ;;
+    *)
+      as_fn_error $? "Unknown argument to --with-aix-soname" "$LINENO" 5
+      ;;
+    esac
+    lt_cv_with_aix_soname=$with_aix_soname
+else
+  if ${lt_cv_with_aix_soname+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_with_aix_soname=aix
+fi
+
+    with_aix_soname=$lt_cv_with_aix_soname
+fi
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $with_aix_soname" >&5
+$as_echo "$with_aix_soname" >&6; }
+  if test aix != "$with_aix_soname"; then
+    # For the AIX way of multilib, we name the shared archive member
+    # based on the bitwidth used, traditionally 'shr.o' or 'shr_64.o',
+    # and 'shr.imp' or 'shr_64.imp', respectively, for the Import File.
+    # Even when GNU compilers ignore OBJECT_MODE but need '-maix64' flag,
+    # the AIX toolchain works better with OBJECT_MODE set (default 32).
+    if test 64 = "${OBJECT_MODE-32}"; then
+      shared_archive_member_spec=shr_64
+    else
+      shared_archive_member_spec=shr
+    fi
+  fi
+  ;;
+*)
+  with_aix_soname=aix
+  ;;
+esac
+
+
+
+
+
+
+
 
 
 
 # This can be used to rebuild libtool when needed
-LIBTOOL_DEPS="$ltmain"
+LIBTOOL_DEPS=$ltmain
 
 # Always use our own libtool.
 LIBTOOL='$(SHELL) $(top_builddir)/libtool'
@@ -10675,7 +10997,7 @@
 
 
 
-if test -n "${ZSH_VERSION+set}" ; then
+if test -n "${ZSH_VERSION+set}"; then
    setopt NO_GLOB_SUBST
 fi
 
@@ -10714,7 +11036,7 @@
   # AIX sometimes has problems with the GCC collect2 program.  For some
   # reason, if we set the COLLECT_NAMES environment variable, the problems
   # vanish in a puff of smoke.
-  if test "X${COLLECT_NAMES+set}" != Xset; then
+  if test set != "${COLLECT_NAMES+set}"; then
     COLLECT_NAMES=
     export COLLECT_NAMES
   fi
@@ -10725,14 +11047,14 @@
 ofile=libtool
 can_build_shared=yes
 
-# All known linkers require a `.a' archive for static linking (except MSVC,
+# All known linkers require a '.a' archive for static linking (except MSVC,
 # which needs '.lib').
 libext=a
 
-with_gnu_ld="$lt_cv_prog_gnu_ld"
+with_gnu_ld=$lt_cv_prog_gnu_ld
 
-old_CC="$CC"
-old_CFLAGS="$CFLAGS"
+old_CC=$CC
+old_CFLAGS=$CFLAGS
 
 # Set sane defaults for various variables
 test -z "$CC" && CC=cc
@@ -10741,15 +11063,8 @@
 test -z "$LD" && LD=ld
 test -z "$ac_objext" && ac_objext=o
 
-for cc_temp in $compiler""; do
-  case $cc_temp in
-    compile | *[\\/]compile | ccache | *[\\/]ccache ) ;;
-    distcc | *[\\/]distcc | purify | *[\\/]purify ) ;;
-    \-*) ;;
-    *) break;;
-  esac
-done
-cc_basename=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"`
+func_cc_basename $compiler
+cc_basename=$func_cc_basename_result
 
 
 # Only perform the check for file, if the check method requires it
@@ -10764,22 +11079,22 @@
 else
   case $MAGIC_CMD in
 [\\/*] |  ?:[\\/]*)
-  lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path.
+  lt_cv_path_MAGIC_CMD=$MAGIC_CMD # Let the user override the test with a path.
   ;;
 *)
-  lt_save_MAGIC_CMD="$MAGIC_CMD"
-  lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+  lt_save_MAGIC_CMD=$MAGIC_CMD
+  lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR
   ac_dummy="/usr/bin$PATH_SEPARATOR$PATH"
   for ac_dir in $ac_dummy; do
-    IFS="$lt_save_ifs"
+    IFS=$lt_save_ifs
     test -z "$ac_dir" && ac_dir=.
-    if test -f $ac_dir/${ac_tool_prefix}file; then
-      lt_cv_path_MAGIC_CMD="$ac_dir/${ac_tool_prefix}file"
+    if test -f "$ac_dir/${ac_tool_prefix}file"; then
+      lt_cv_path_MAGIC_CMD=$ac_dir/"${ac_tool_prefix}file"
       if test -n "$file_magic_test_file"; then
 	case $deplibs_check_method in
 	"file_magic "*)
 	  file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"`
-	  MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
+	  MAGIC_CMD=$lt_cv_path_MAGIC_CMD
 	  if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null |
 	    $EGREP "$file_magic_regex" > /dev/null; then
 	    :
@@ -10802,13 +11117,13 @@
       break
     fi
   done
-  IFS="$lt_save_ifs"
-  MAGIC_CMD="$lt_save_MAGIC_CMD"
+  IFS=$lt_save_ifs
+  MAGIC_CMD=$lt_save_MAGIC_CMD
   ;;
 esac
 fi
 
-MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
+MAGIC_CMD=$lt_cv_path_MAGIC_CMD
 if test -n "$MAGIC_CMD"; then
   { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5
 $as_echo "$MAGIC_CMD" >&6; }
@@ -10830,22 +11145,22 @@
 else
   case $MAGIC_CMD in
 [\\/*] |  ?:[\\/]*)
-  lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path.
+  lt_cv_path_MAGIC_CMD=$MAGIC_CMD # Let the user override the test with a path.
   ;;
 *)
-  lt_save_MAGIC_CMD="$MAGIC_CMD"
-  lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+  lt_save_MAGIC_CMD=$MAGIC_CMD
+  lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR
   ac_dummy="/usr/bin$PATH_SEPARATOR$PATH"
   for ac_dir in $ac_dummy; do
-    IFS="$lt_save_ifs"
+    IFS=$lt_save_ifs
     test -z "$ac_dir" && ac_dir=.
-    if test -f $ac_dir/file; then
-      lt_cv_path_MAGIC_CMD="$ac_dir/file"
+    if test -f "$ac_dir/file"; then
+      lt_cv_path_MAGIC_CMD=$ac_dir/"file"
       if test -n "$file_magic_test_file"; then
 	case $deplibs_check_method in
 	"file_magic "*)
 	  file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"`
-	  MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
+	  MAGIC_CMD=$lt_cv_path_MAGIC_CMD
 	  if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null |
 	    $EGREP "$file_magic_regex" > /dev/null; then
 	    :
@@ -10868,13 +11183,13 @@
       break
     fi
   done
-  IFS="$lt_save_ifs"
-  MAGIC_CMD="$lt_save_MAGIC_CMD"
+  IFS=$lt_save_ifs
+  MAGIC_CMD=$lt_save_MAGIC_CMD
   ;;
 esac
 fi
 
-MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
+MAGIC_CMD=$lt_cv_path_MAGIC_CMD
 if test -n "$MAGIC_CMD"; then
   { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5
 $as_echo "$MAGIC_CMD" >&6; }
@@ -10895,7 +11210,7 @@
 
 # Use C for the default configuration in the libtool script
 
-lt_save_CC="$CC"
+lt_save_CC=$CC
 ac_ext=c
 ac_cpp='$CPP $CPPFLAGS'
 ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
@@ -10957,7 +11272,7 @@
 
 lt_prog_compiler_no_builtin_flag=
 
-if test "$GCC" = yes; then
+if test yes = "$GCC"; then
   case $cc_basename in
   nvcc*)
     lt_prog_compiler_no_builtin_flag=' -Xcompiler -fno-builtin' ;;
@@ -10973,7 +11288,7 @@
   lt_cv_prog_compiler_rtti_exceptions=no
    ac_outfile=conftest.$ac_objext
    echo "$lt_simple_compile_test_code" > conftest.$ac_ext
-   lt_compiler_flag="-fno-rtti -fno-exceptions"
+   lt_compiler_flag="-fno-rtti -fno-exceptions"  ## exclude from sc_useless_quotes_in_assignment
    # Insert the option either (1) after the last *FLAGS variable, or
    # (2) before a word containing "conftest.", or (3) at the end.
    # Note that $ac_compile itself does not contain backslashes and begins
@@ -11003,7 +11318,7 @@
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_rtti_exceptions" >&5
 $as_echo "$lt_cv_prog_compiler_rtti_exceptions" >&6; }
 
-if test x"$lt_cv_prog_compiler_rtti_exceptions" = xyes; then
+if test yes = "$lt_cv_prog_compiler_rtti_exceptions"; then
     lt_prog_compiler_no_builtin_flag="$lt_prog_compiler_no_builtin_flag -fno-rtti -fno-exceptions"
 else
     :
@@ -11021,17 +11336,18 @@
 lt_prog_compiler_static=
 
 
-  if test "$GCC" = yes; then
+  if test yes = "$GCC"; then
     lt_prog_compiler_wl='-Wl,'
     lt_prog_compiler_static='-static'
 
     case $host_os in
       aix*)
       # All AIX code is PIC.
-      if test "$host_cpu" = ia64; then
+      if test ia64 = "$host_cpu"; then
 	# AIX 5 now supports IA64 processor
 	lt_prog_compiler_static='-Bstatic'
       fi
+      lt_prog_compiler_pic='-fPIC'
       ;;
 
     amigaos*)
@@ -11042,8 +11358,8 @@
         ;;
       m68k)
             # FIXME: we need at least 68020 code to build shared libraries, but
-            # adding the `-m68020' flag to GCC prevents building anything better,
-            # like `-m68040'.
+            # adding the '-m68020' flag to GCC prevents building anything better,
+            # like '-m68040'.
             lt_prog_compiler_pic='-m68020 -resident32 -malways-restore-a4'
         ;;
       esac
@@ -11059,6 +11375,11 @@
       # Although the cygwin gcc ignores -fPIC, still need this for old-style
       # (--disable-auto-import) libraries
       lt_prog_compiler_pic='-DDLL_EXPORT'
+      case $host_os in
+      os2*)
+	lt_prog_compiler_static='$wl-static'
+	;;
+      esac
       ;;
 
     darwin* | rhapsody*)
@@ -11129,7 +11450,7 @@
     case $host_os in
     aix*)
       lt_prog_compiler_wl='-Wl,'
-      if test "$host_cpu" = ia64; then
+      if test ia64 = "$host_cpu"; then
 	# AIX 5 now supports IA64 processor
 	lt_prog_compiler_static='-Bstatic'
       else
@@ -11137,10 +11458,29 @@
       fi
       ;;
 
+    darwin* | rhapsody*)
+      # PIC is the default on this platform
+      # Common symbols not allowed in MH_DYLIB files
+      lt_prog_compiler_pic='-fno-common'
+      case $cc_basename in
+      nagfor*)
+        # NAG Fortran compiler
+        lt_prog_compiler_wl='-Wl,-Wl,,'
+        lt_prog_compiler_pic='-PIC'
+        lt_prog_compiler_static='-Bstatic'
+        ;;
+      esac
+      ;;
+
     mingw* | cygwin* | pw32* | os2* | cegcc*)
       # This hack is so that the source file can tell whether it is being
       # built for inclusion in a dll (and should export symbols for example).
       lt_prog_compiler_pic='-DDLL_EXPORT'
+      case $host_os in
+      os2*)
+	lt_prog_compiler_static='$wl-static'
+	;;
+      esac
       ;;
 
     hpux9* | hpux10* | hpux11*)
@@ -11156,7 +11496,7 @@
 	;;
       esac
       # Is there a better lt_prog_compiler_static that works with the bundled CC?
-      lt_prog_compiler_static='${wl}-a ${wl}archive'
+      lt_prog_compiler_static='$wl-a ${wl}archive'
       ;;
 
     irix5* | irix6* | nonstopux*)
@@ -11167,7 +11507,7 @@
 
     linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*)
       case $cc_basename in
-      # old Intel for x86_64 which still supported -KPIC.
+      # old Intel for x86_64, which still supported -KPIC.
       ecc*)
 	lt_prog_compiler_wl='-Wl,'
 	lt_prog_compiler_pic='-KPIC'
@@ -11192,6 +11532,12 @@
 	lt_prog_compiler_pic='-PIC'
 	lt_prog_compiler_static='-Bstatic'
 	;;
+      tcc*)
+	# Fabrice Bellard et al's Tiny C Compiler
+	lt_prog_compiler_wl='-Wl,'
+	lt_prog_compiler_pic='-fPIC'
+	lt_prog_compiler_static='-static'
+	;;
       pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*)
         # Portland Group compilers (*not* the Pentium gcc compiler,
 	# which looks to be a dead project)
@@ -11289,7 +11635,7 @@
       ;;
 
     sysv4*MP*)
-      if test -d /usr/nec ;then
+      if test -d /usr/nec; then
 	lt_prog_compiler_pic='-Kconform_pic'
 	lt_prog_compiler_static='-Bstatic'
       fi
@@ -11318,7 +11664,7 @@
   fi
 
 case $host_os in
-  # For platforms which do not support PIC, -DPIC is meaningless:
+  # For platforms that do not support PIC, -DPIC is meaningless:
   *djgpp*)
     lt_prog_compiler_pic=
     ;;
@@ -11350,7 +11696,7 @@
   lt_cv_prog_compiler_pic_works=no
    ac_outfile=conftest.$ac_objext
    echo "$lt_simple_compile_test_code" > conftest.$ac_ext
-   lt_compiler_flag="$lt_prog_compiler_pic -DPIC"
+   lt_compiler_flag="$lt_prog_compiler_pic -DPIC"  ## exclude from sc_useless_quotes_in_assignment
    # Insert the option either (1) after the last *FLAGS variable, or
    # (2) before a word containing "conftest.", or (3) at the end.
    # Note that $ac_compile itself does not contain backslashes and begins
@@ -11380,7 +11726,7 @@
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_works" >&5
 $as_echo "$lt_cv_prog_compiler_pic_works" >&6; }
 
-if test x"$lt_cv_prog_compiler_pic_works" = xyes; then
+if test yes = "$lt_cv_prog_compiler_pic_works"; then
     case $lt_prog_compiler_pic in
      "" | " "*) ;;
      *) lt_prog_compiler_pic=" $lt_prog_compiler_pic" ;;
@@ -11412,7 +11758,7 @@
   $as_echo_n "(cached) " >&6
 else
   lt_cv_prog_compiler_static_works=no
-   save_LDFLAGS="$LDFLAGS"
+   save_LDFLAGS=$LDFLAGS
    LDFLAGS="$LDFLAGS $lt_tmp_static_flag"
    echo "$lt_simple_link_test_code" > conftest.$ac_ext
    if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then
@@ -11431,13 +11777,13 @@
      fi
    fi
    $RM -r conftest*
-   LDFLAGS="$save_LDFLAGS"
+   LDFLAGS=$save_LDFLAGS
 
 fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_static_works" >&5
 $as_echo "$lt_cv_prog_compiler_static_works" >&6; }
 
-if test x"$lt_cv_prog_compiler_static_works" = xyes; then
+if test yes = "$lt_cv_prog_compiler_static_works"; then
     :
 else
     lt_prog_compiler_static=
@@ -11557,8 +11903,8 @@
 
 
 
-hard_links="nottested"
-if test "$lt_cv_prog_compiler_c_o" = no && test "$need_locks" != no; then
+hard_links=nottested
+if test no = "$lt_cv_prog_compiler_c_o" && test no != "$need_locks"; then
   # do not overwrite the value of need_locks provided by the user
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can lock with hard links" >&5
 $as_echo_n "checking if we can lock with hard links... " >&6; }
@@ -11570,9 +11916,9 @@
   ln conftest.a conftest.b 2>/dev/null && hard_links=no
   { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hard_links" >&5
 $as_echo "$hard_links" >&6; }
-  if test "$hard_links" = no; then
-    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5
-$as_echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;}
+  if test no = "$hard_links"; then
+    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: '$CC' does not support '-c -o', so 'make -j' may be unsafe" >&5
+$as_echo "$as_me: WARNING: '$CC' does not support '-c -o', so 'make -j' may be unsafe" >&2;}
     need_locks=warn
   fi
 else
@@ -11615,9 +11961,9 @@
   # included in the symbol list
   include_expsyms=
   # exclude_expsyms can be an extended regexp of symbols to exclude
-  # it will be wrapped by ` (' and `)$', so one must not match beginning or
-  # end of line.  Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc',
-  # as well as any symbol that contains `d'.
+  # it will be wrapped by ' (' and ')$', so one must not match beginning or
+  # end of line.  Example: 'a|bc|.*d.*' will exclude the symbols 'a' and 'bc',
+  # as well as any symbol that contains 'd'.
   exclude_expsyms='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'
   # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out
   # platforms (ab)use it in PIC code, but their linkers get confused if
@@ -11632,7 +11978,7 @@
     # FIXME: the MSVC++ port hasn't been tested in a loooong time
     # When not using gcc, we currently assume that we are using
     # Microsoft Visual C++.
-    if test "$GCC" != yes; then
+    if test yes != "$GCC"; then
       with_gnu_ld=no
     fi
     ;;
@@ -11640,7 +11986,7 @@
     # we just hope/assume this is gcc and not c89 (= MSVC++)
     with_gnu_ld=yes
     ;;
-  openbsd*)
+  openbsd* | bitrig*)
     with_gnu_ld=no
     ;;
   linux* | k*bsd*-gnu | gnu*)
@@ -11653,7 +11999,7 @@
   # On some targets, GNU ld is compatible enough with the native linker
   # that we're better off using the native interface for both.
   lt_use_gnu_ld_interface=no
-  if test "$with_gnu_ld" = yes; then
+  if test yes = "$with_gnu_ld"; then
     case $host_os in
       aix*)
 	# The AIX port of GNU ld has always aspired to compatibility
@@ -11675,24 +12021,24 @@
     esac
   fi
 
-  if test "$lt_use_gnu_ld_interface" = yes; then
+  if test yes = "$lt_use_gnu_ld_interface"; then
     # If archive_cmds runs LD, not CC, wlarc should be empty
-    wlarc='${wl}'
+    wlarc='$wl'
 
     # Set some defaults for GNU ld with shared library support. These
     # are reset later if shared libraries are not supported. Putting them
     # here allows them to be overridden if necessary.
     runpath_var=LD_RUN_PATH
-    hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
-    export_dynamic_flag_spec='${wl}--export-dynamic'
+    hardcode_libdir_flag_spec='$wl-rpath $wl$libdir'
+    export_dynamic_flag_spec='$wl--export-dynamic'
     # ancient GNU ld didn't support --whole-archive et. al.
     if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then
-      whole_archive_flag_spec="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
+      whole_archive_flag_spec=$wlarc'--whole-archive$convenience '$wlarc'--no-whole-archive'
     else
       whole_archive_flag_spec=
     fi
     supports_anon_versioning=no
-    case `$LD -v 2>&1` in
+    case `$LD -v | $SED -e 's/(^)\+)\s\+//' 2>&1` in
       *GNU\ gold*) supports_anon_versioning=yes ;;
       *\ [01].* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11
       *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ...
@@ -11705,7 +12051,7 @@
     case $host_os in
     aix[3-9]*)
       # On AIX/PPC, the GNU linker is very broken
-      if test "$host_cpu" != ia64; then
+      if test ia64 != "$host_cpu"; then
 	ld_shlibs=no
 	cat <<_LT_EOF 1>&2
 
@@ -11724,7 +12070,7 @@
       case $host_cpu in
       powerpc)
             # see comment about AmigaOS4 .so support
-            archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+            archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib'
             archive_expsym_cmds=''
         ;;
       m68k)
@@ -11740,7 +12086,7 @@
 	allow_undefined_flag=unsupported
 	# Joseph Beckenbach <jrb3@best.com> says some releases of gcc
 	# support --undefined.  This deserves some investigation.  FIXME
-	archive_cmds='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+	archive_cmds='$CC -nostart $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib'
       else
 	ld_shlibs=no
       fi
@@ -11750,7 +12096,7 @@
       # _LT_TAGVAR(hardcode_libdir_flag_spec, ) is actually meaningless,
       # as there is no search path for DLLs.
       hardcode_libdir_flag_spec='-L$libdir'
-      export_dynamic_flag_spec='${wl}--export-all-symbols'
+      export_dynamic_flag_spec='$wl--export-all-symbols'
       allow_undefined_flag=unsupported
       always_export_symbols=no
       enable_shared_with_static_runtimes=yes
@@ -11758,61 +12104,89 @@
       exclude_expsyms='[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname'
 
       if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then
-        archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
-	# If the export-symbols file already is a .def file (1st line
-	# is EXPORTS), use it as is; otherwise, prepend...
-	archive_expsym_cmds='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
-	  cp $export_symbols $output_objdir/$soname.def;
-	else
-	  echo EXPORTS > $output_objdir/$soname.def;
-	  cat $export_symbols >> $output_objdir/$soname.def;
-	fi~
-	$CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+        archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+	# If the export-symbols file already is a .def file, use it as
+	# is; otherwise, prepend EXPORTS...
+	archive_expsym_cmds='if   test DEF = "`$SED -n     -e '\''s/^[	 ]*//'\''     -e '\''/^\(;.*\)*$/d'\''     -e '\''s/^\(EXPORTS\|LIBRARY\)\([	 ].*\)*$/DEF/p'\''     -e q     $export_symbols`" ; then
+          cp $export_symbols $output_objdir/$soname.def;
+        else
+          echo EXPORTS > $output_objdir/$soname.def;
+          cat $export_symbols >> $output_objdir/$soname.def;
+        fi~
+        $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
       else
 	ld_shlibs=no
       fi
       ;;
 
     haiku*)
-      archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+      archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib'
       link_all_deplibs=yes
       ;;
 
+    os2*)
+      hardcode_libdir_flag_spec='-L$libdir'
+      hardcode_minus_L=yes
+      allow_undefined_flag=unsupported
+      shrext_cmds=.dll
+      archive_cmds='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~
+	$ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~
+	$ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~
+	$ECHO EXPORTS >> $output_objdir/$libname.def~
+	emxexp $libobjs | $SED /"_DLL_InitTerm"/d >> $output_objdir/$libname.def~
+	$CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~
+	emximp -o $lib $output_objdir/$libname.def'
+      archive_expsym_cmds='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~
+	$ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~
+	$ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~
+	$ECHO EXPORTS >> $output_objdir/$libname.def~
+	prefix_cmds="$SED"~
+	if test EXPORTS = "`$SED 1q $export_symbols`"; then
+	  prefix_cmds="$prefix_cmds -e 1d";
+	fi~
+	prefix_cmds="$prefix_cmds -e \"s/^\(.*\)$/_\1/g\""~
+	cat $export_symbols | $prefix_cmds >> $output_objdir/$libname.def~
+	$CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~
+	emximp -o $lib $output_objdir/$libname.def'
+      old_archive_From_new_cmds='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def'
+      enable_shared_with_static_runtimes=yes
+      ;;
+
     interix[3-9]*)
       hardcode_direct=no
       hardcode_shlibpath_var=no
-      hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
-      export_dynamic_flag_spec='${wl}-E'
+      hardcode_libdir_flag_spec='$wl-rpath,$libdir'
+      export_dynamic_flag_spec='$wl-E'
       # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc.
       # Instead, shared libraries are loaded at an image base (0x10000000 by
       # default) and relocated if they conflict, which is a slow very memory
       # consuming and fragmenting process.  To avoid this, we pick a random,
       # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link
       # time.  Moving up from 0x10000000 also allows more sbrk(2) space.
-      archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
-      archive_expsym_cmds='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
+      archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
+      archive_expsym_cmds='sed "s|^|_|" $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--retain-symbols-file,$output_objdir/$soname.expsym $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
       ;;
 
     gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu)
       tmp_diet=no
-      if test "$host_os" = linux-dietlibc; then
+      if test linux-dietlibc = "$host_os"; then
 	case $cc_basename in
 	  diet\ *) tmp_diet=yes;;	# linux-dietlibc with static linking (!diet-dyn)
 	esac
       fi
       if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \
-	 && test "$tmp_diet" = no
+	 && test no = "$tmp_diet"
       then
 	tmp_addflag=' $pic_flag'
 	tmp_sharedflag='-shared'
 	case $cc_basename,$host_cpu in
         pgcc*)				# Portland Group C compiler
-	  whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive'
+	  whole_archive_flag_spec='$wl--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive'
 	  tmp_addflag=' $pic_flag'
 	  ;;
 	pgf77* | pgf90* | pgf95* | pgfortran*)
 					# Portland Group f77 and f90 compilers
-	  whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive'
+	  whole_archive_flag_spec='$wl--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive'
 	  tmp_addflag=' $pic_flag -Mnomain' ;;
 	ecc*,ia64* | icc*,ia64*)	# Intel C compiler on ia64
 	  tmp_addflag=' -i_dynamic' ;;
@@ -11823,42 +12197,47 @@
 	lf95*)				# Lahey Fortran 8.1
 	  whole_archive_flag_spec=
 	  tmp_sharedflag='--shared' ;;
+        nagfor*)                        # NAGFOR 5.3
+          tmp_sharedflag='-Wl,-shared' ;;
 	xl[cC]* | bgxl[cC]* | mpixl[cC]*) # IBM XL C 8.0 on PPC (deal with xlf below)
 	  tmp_sharedflag='-qmkshrobj'
 	  tmp_addflag= ;;
 	nvcc*)	# Cuda Compiler Driver 2.2
-	  whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive'
+	  whole_archive_flag_spec='$wl--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive'
 	  compiler_needs_object=yes
 	  ;;
 	esac
 	case `$CC -V 2>&1 | sed 5q` in
 	*Sun\ C*)			# Sun C 5.9
-	  whole_archive_flag_spec='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive'
+	  whole_archive_flag_spec='$wl--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive'
 	  compiler_needs_object=yes
 	  tmp_sharedflag='-G' ;;
 	*Sun\ F*)			# Sun Fortran 8.3
 	  tmp_sharedflag='-G' ;;
 	esac
-	archive_cmds='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+	archive_cmds='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib'
 
-        if test "x$supports_anon_versioning" = xyes; then
+        if test yes = "$supports_anon_versioning"; then
           archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~
-	    cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
-	    echo "local: *; };" >> $output_objdir/$libname.ver~
-	    $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib'
+            cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
+            echo "local: *; };" >> $output_objdir/$libname.ver~
+            $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-version-script $wl$output_objdir/$libname.ver -o $lib'
         fi
 
 	case $cc_basename in
+	tcc*)
+	  export_dynamic_flag_spec='-rdynamic'
+	  ;;
 	xlf* | bgf* | bgxlf* | mpixlf*)
 	  # IBM XL Fortran 10.1 on PPC cannot create shared libs itself
 	  whole_archive_flag_spec='--whole-archive$convenience --no-whole-archive'
-	  hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+	  hardcode_libdir_flag_spec='$wl-rpath $wl$libdir'
 	  archive_cmds='$LD -shared $libobjs $deplibs $linker_flags -soname $soname -o $lib'
-	  if test "x$supports_anon_versioning" = xyes; then
+	  if test yes = "$supports_anon_versioning"; then
 	    archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~
-	      cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
-	      echo "local: *; };" >> $output_objdir/$libname.ver~
-	      $LD -shared $libobjs $deplibs $linker_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib'
+              cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
+              echo "local: *; };" >> $output_objdir/$libname.ver~
+              $LD -shared $libobjs $deplibs $linker_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib'
 	  fi
 	  ;;
 	esac
@@ -11872,8 +12251,8 @@
 	archive_cmds='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib'
 	wlarc=
       else
-	archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-	archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+	archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib'
+	archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib'
       fi
       ;;
 
@@ -11891,8 +12270,8 @@
 
 _LT_EOF
       elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
-	archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-	archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+	archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib'
+	archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib'
       else
 	ld_shlibs=no
       fi
@@ -11904,7 +12283,7 @@
 	ld_shlibs=no
 	cat <<_LT_EOF 1>&2
 
-*** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not
+*** Warning: Releases of the GNU linker prior to 2.16.91.0.3 cannot
 *** reliably create shared libraries on SCO systems.  Therefore, libtool
 *** is disabling shared libraries support.  We urge you to upgrade GNU
 *** binutils to release 2.16.91.0.3 or newer.  Another option is to modify
@@ -11919,9 +12298,9 @@
 	  # DT_RUNPATH tag from executables and libraries.  But doing so
 	  # requires that you compile everything twice, which is a pain.
 	  if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
-	    hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
-	    archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-	    archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+	    hardcode_libdir_flag_spec='$wl-rpath $wl$libdir'
+	    archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib'
+	    archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib'
 	  else
 	    ld_shlibs=no
 	  fi
@@ -11938,15 +12317,15 @@
 
     *)
       if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
-	archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-	archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+	archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib'
+	archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib'
       else
 	ld_shlibs=no
       fi
       ;;
     esac
 
-    if test "$ld_shlibs" = no; then
+    if test no = "$ld_shlibs"; then
       runpath_var=
       hardcode_libdir_flag_spec=
       export_dynamic_flag_spec=
@@ -11962,7 +12341,7 @@
       # Note: this linker hardcodes the directories in LIBPATH if there
       # are no directories specified by -L.
       hardcode_minus_L=yes
-      if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then
+      if test yes = "$GCC" && test -z "$lt_prog_compiler_static"; then
 	# Neither direct hardcoding nor static linking is supported with a
 	# broken collect2.
 	hardcode_direct=unsupported
@@ -11970,34 +12349,57 @@
       ;;
 
     aix[4-9]*)
-      if test "$host_cpu" = ia64; then
+      if test ia64 = "$host_cpu"; then
 	# On IA64, the linker does run time linking by default, so we don't
 	# have to do anything special.
 	aix_use_runtimelinking=no
 	exp_sym_flag='-Bexport'
-	no_entry_flag=""
+	no_entry_flag=
       else
 	# If we're using GNU nm, then we don't want the "-C" option.
-	# -C means demangle to AIX nm, but means don't demangle with GNU nm
-	# Also, AIX nm treats weak defined symbols like other global
-	# defined symbols, whereas GNU nm marks them as "W".
+	# -C means demangle to GNU nm, but means don't demangle to AIX nm.
+	# Without the "-l" option, or with the "-B" option, AIX nm treats
+	# weak defined symbols like other global defined symbols, whereas
+	# GNU nm marks them as "W".
+	# While the 'weak' keyword is ignored in the Export File, we need
+	# it in the Import File for the 'aix-soname' feature, so we have
+	# to replace the "-B" option with "-P" for AIX nm.
 	if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then
-	  export_symbols_cmds='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
+	  export_symbols_cmds='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && (substr(\$ 3,1,1) != ".")) { if (\$ 2 == "W") { print \$ 3 " weak" } else { print \$ 3 } } }'\'' | sort -u > $export_symbols'
 	else
-	  export_symbols_cmds='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
+	  export_symbols_cmds='`func_echo_all $NM | $SED -e '\''s/B\([^B]*\)$/P\1/'\''` -PCpgl $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) && (substr(\$ 1,1,1) != ".")) { if ((\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) { print \$ 1 " weak" } else { print \$ 1 } } }'\'' | sort -u > $export_symbols'
 	fi
 	aix_use_runtimelinking=no
 
 	# Test if we are trying to use run time linking or normal
 	# AIX style linking. If -brtl is somewhere in LDFLAGS, we
-	# need to do runtime linking.
+	# have runtime linking enabled, and use it for executables.
+	# For shared libraries, we enable/disable runtime linking
+	# depending on the kind of the shared library created -
+	# when "with_aix_soname,aix_use_runtimelinking" is:
+	# "aix,no"   lib.a(lib.so.V) shared, rtl:no,  for executables
+	# "aix,yes"  lib.so          shared, rtl:yes, for executables
+	#            lib.a           static archive
+	# "both,no"  lib.so.V(shr.o) shared, rtl:yes
+	#            lib.a(lib.so.V) shared, rtl:no,  for executables
+	# "both,yes" lib.so.V(shr.o) shared, rtl:yes, for executables
+	#            lib.a(lib.so.V) shared, rtl:no
+	# "svr4,*"   lib.so.V(shr.o) shared, rtl:yes, for executables
+	#            lib.a           static archive
 	case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*)
 	  for ld_flag in $LDFLAGS; do
-	  if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then
+	  if (test x-brtl = "x$ld_flag" || test x-Wl,-brtl = "x$ld_flag"); then
 	    aix_use_runtimelinking=yes
 	    break
 	  fi
 	  done
+	  if test svr4,no = "$with_aix_soname,$aix_use_runtimelinking"; then
+	    # With aix-soname=svr4, we create the lib.so.V shared archives only,
+	    # so we don't have lib.a shared libs to link our executables.
+	    # We have to force runtime linking in this case.
+	    aix_use_runtimelinking=yes
+	    LDFLAGS="$LDFLAGS -Wl,-brtl"
+	  fi
 	  ;;
 	esac
 
@@ -12016,13 +12418,21 @@
       hardcode_direct_absolute=yes
       hardcode_libdir_separator=':'
       link_all_deplibs=yes
-      file_list_spec='${wl}-f,'
+      file_list_spec='$wl-f,'
+      case $with_aix_soname,$aix_use_runtimelinking in
+      aix,*) ;; # traditional, no import file
+      svr4,* | *,yes) # use import file
+	# The Import File defines what to hardcode.
+	hardcode_direct=no
+	hardcode_direct_absolute=no
+	;;
+      esac
 
-      if test "$GCC" = yes; then
+      if test yes = "$GCC"; then
 	case $host_os in aix4.[012]|aix4.[012].*)
 	# We only want to do this on AIX 4.2 and lower, the check
 	# below for broken collect2 doesn't work under 4.3+
-	  collect2name=`${CC} -print-prog-name=collect2`
+	  collect2name=`$CC -print-prog-name=collect2`
 	  if test -f "$collect2name" &&
 	   strings "$collect2name" | $GREP resolve_lib_name >/dev/null
 	  then
@@ -12041,36 +12451,42 @@
 	  ;;
 	esac
 	shared_flag='-shared'
-	if test "$aix_use_runtimelinking" = yes; then
-	  shared_flag="$shared_flag "'${wl}-G'
+	if test yes = "$aix_use_runtimelinking"; then
+	  shared_flag="$shared_flag "'$wl-G'
 	fi
-	link_all_deplibs=no
+	# Need to ensure runtime linking is disabled for the traditional
+	# shared library, or the linker may eventually find shared libraries
+	# /with/ Import File - we do not want to mix them.
+	shared_flag_aix='-shared'
+	shared_flag_svr4='-shared $wl-G'
       else
 	# not using gcc
-	if test "$host_cpu" = ia64; then
+	if test ia64 = "$host_cpu"; then
 	# VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release
 	# chokes on -Wl,-G. The following line is correct:
 	  shared_flag='-G'
 	else
-	  if test "$aix_use_runtimelinking" = yes; then
-	    shared_flag='${wl}-G'
+	  if test yes = "$aix_use_runtimelinking"; then
+	    shared_flag='$wl-G'
 	  else
-	    shared_flag='${wl}-bM:SRE'
+	    shared_flag='$wl-bM:SRE'
 	  fi
+	  shared_flag_aix='$wl-bM:SRE'
+	  shared_flag_svr4='$wl-G'
 	fi
       fi
 
-      export_dynamic_flag_spec='${wl}-bexpall'
+      export_dynamic_flag_spec='$wl-bexpall'
       # It seems that -bexpall does not export symbols beginning with
       # underscore (_), so it is better to generate a list of symbols to export.
       always_export_symbols=yes
-      if test "$aix_use_runtimelinking" = yes; then
+      if test aix,yes = "$with_aix_soname,$aix_use_runtimelinking"; then
 	# Warning - without using the other runtime loading flags (-brtl),
 	# -berok will link without error, but may produce a broken library.
 	allow_undefined_flag='-berok'
         # Determine the default libpath from the value encoded in an
         # empty executable.
-        if test "${lt_cv_aix_libpath+set}" = set; then
+        if test set = "${lt_cv_aix_libpath+set}"; then
   aix_libpath=$lt_cv_aix_libpath
 else
   if ${lt_cv_aix_libpath_+:} false; then :
@@ -12105,7 +12521,7 @@
 rm -f core conftest.err conftest.$ac_objext \
     conftest$ac_exeext conftest.$ac_ext
   if test -z "$lt_cv_aix_libpath_"; then
-    lt_cv_aix_libpath_="/usr/lib:/lib"
+    lt_cv_aix_libpath_=/usr/lib:/lib
   fi
 
 fi
@@ -12113,17 +12529,17 @@
   aix_libpath=$lt_cv_aix_libpath_
 fi
 
-        hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath"
-        archive_expsym_cmds='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag"
+        hardcode_libdir_flag_spec='$wl-blibpath:$libdir:'"$aix_libpath"
+        archive_expsym_cmds='$CC -o $output_objdir/$soname $libobjs $deplibs $wl'$no_entry_flag' $compiler_flags `if test -n "$allow_undefined_flag"; then func_echo_all "$wl$allow_undefined_flag"; else :; fi` $wl'$exp_sym_flag:\$export_symbols' '$shared_flag
       else
-	if test "$host_cpu" = ia64; then
-	  hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib'
+	if test ia64 = "$host_cpu"; then
+	  hardcode_libdir_flag_spec='$wl-R $libdir:/usr/lib:/lib'
 	  allow_undefined_flag="-z nodefs"
-	  archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols"
+	  archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\$wl$no_entry_flag"' $compiler_flags $wl$allow_undefined_flag '"\$wl$exp_sym_flag:\$export_symbols"
 	else
 	 # Determine the default libpath from the value encoded in an
 	 # empty executable.
-	 if test "${lt_cv_aix_libpath+set}" = set; then
+	 if test set = "${lt_cv_aix_libpath+set}"; then
   aix_libpath=$lt_cv_aix_libpath
 else
   if ${lt_cv_aix_libpath_+:} false; then :
@@ -12158,7 +12574,7 @@
 rm -f core conftest.err conftest.$ac_objext \
     conftest$ac_exeext conftest.$ac_ext
   if test -z "$lt_cv_aix_libpath_"; then
-    lt_cv_aix_libpath_="/usr/lib:/lib"
+    lt_cv_aix_libpath_=/usr/lib:/lib
   fi
 
 fi
@@ -12166,21 +12582,33 @@
   aix_libpath=$lt_cv_aix_libpath_
 fi
 
-	 hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath"
+	 hardcode_libdir_flag_spec='$wl-blibpath:$libdir:'"$aix_libpath"
 	  # Warning - without using the other run time loading flags,
 	  # -berok will link without error, but may produce a broken library.
-	  no_undefined_flag=' ${wl}-bernotok'
-	  allow_undefined_flag=' ${wl}-berok'
-	  if test "$with_gnu_ld" = yes; then
+	  no_undefined_flag=' $wl-bernotok'
+	  allow_undefined_flag=' $wl-berok'
+	  if test yes = "$with_gnu_ld"; then
 	    # We only use this code for GNU lds that support --whole-archive.
-	    whole_archive_flag_spec='${wl}--whole-archive$convenience ${wl}--no-whole-archive'
+	    whole_archive_flag_spec='$wl--whole-archive$convenience $wl--no-whole-archive'
 	  else
 	    # Exported symbols can be pulled into shared objects from archives
 	    whole_archive_flag_spec='$convenience'
 	  fi
 	  archive_cmds_need_lc=yes
-	  # This is similar to how AIX traditionally builds its shared libraries.
-	  archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname'
+	  archive_expsym_cmds='$RM -r $output_objdir/$realname.d~$MKDIR $output_objdir/$realname.d'
+	  # -brtl affects multiple linker settings, -berok does not and is overridden later
+	  compiler_flags_filtered='`func_echo_all "$compiler_flags " | $SED -e "s%-brtl\\([, ]\\)%-berok\\1%g"`'
+	  if test svr4 != "$with_aix_soname"; then
+	    # This is similar to how AIX traditionally builds its shared libraries.
+	    archive_expsym_cmds="$archive_expsym_cmds"'~$CC '$shared_flag_aix' -o $output_objdir/$realname.d/$soname $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$realname.d/$soname'
+	  fi
+	  if test aix != "$with_aix_soname"; then
+	    archive_expsym_cmds="$archive_expsym_cmds"'~$CC '$shared_flag_svr4' -o $output_objdir/$realname.d/$shared_archive_member_spec.o $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$STRIP -e $output_objdir/$realname.d/$shared_archive_member_spec.o~( func_echo_all "#! $soname($shared_archive_member_spec.o)"; if test shr_64 = "$shared_archive_member_spec"; then func_echo_all "# 64"; else func_echo_all "# 32"; fi; cat $export_symbols ) > $output_objdir/$realname.d/$shared_archive_member_spec.imp~$AR $AR_FLAGS $output_objdir/$soname $output_objdir/$realname.d/$shared_archive_member_spec.o $output_objdir/$realname.d/$shared_archive_member_spec.imp'
+	  else
+	    # used by -dlpreopen to get the symbols
+	    archive_expsym_cmds="$archive_expsym_cmds"'~$MV  $output_objdir/$realname.d/$soname $output_objdir'
+	  fi
+	  archive_expsym_cmds="$archive_expsym_cmds"'~$RM -r $output_objdir/$realname.d'
 	fi
       fi
       ;;
@@ -12189,7 +12617,7 @@
       case $host_cpu in
       powerpc)
             # see comment about AmigaOS4 .so support
-            archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+            archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib'
             archive_expsym_cmds=''
         ;;
       m68k)
@@ -12219,16 +12647,17 @@
 	# Tell ltmain to make .lib files, not .a files.
 	libext=lib
 	# Tell ltmain to make .dll files, not .so files.
-	shrext_cmds=".dll"
+	shrext_cmds=.dll
 	# FIXME: Setting linknames here is a bad hack.
-	archive_cmds='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-dll~linknames='
-	archive_expsym_cmds='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
-	    sed -n -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' -e '1\\\!p' < $export_symbols > $output_objdir/$soname.exp;
-	  else
-	    sed -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' < $export_symbols > $output_objdir/$soname.exp;
-	  fi~
-	  $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~
-	  linknames='
+	archive_cmds='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~linknames='
+	archive_expsym_cmds='if   test DEF = "`$SED -n     -e '\''s/^[	 ]*//'\''     -e '\''/^\(;.*\)*$/d'\''     -e '\''s/^\(EXPORTS\|LIBRARY\)\([	 ].*\)*$/DEF/p'\''     -e q     $export_symbols`" ; then
+            cp "$export_symbols" "$output_objdir/$soname.def";
+            echo "$tool_output_objdir$soname.def" > "$output_objdir/$soname.exp";
+          else
+            $SED -e '\''s/^/-link -EXPORT:/'\'' < $export_symbols > $output_objdir/$soname.exp;
+          fi~
+          $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~
+          linknames='
 	# The linker will not automatically build a static lib if we build a DLL.
 	# _LT_TAGVAR(old_archive_from_new_cmds, )='true'
 	enable_shared_with_static_runtimes=yes
@@ -12237,18 +12666,18 @@
 	# Don't use ranlib
 	old_postinstall_cmds='chmod 644 $oldlib'
 	postlink_cmds='lt_outputfile="@OUTPUT@"~
-	  lt_tool_outputfile="@TOOL_OUTPUT@"~
-	  case $lt_outputfile in
-	    *.exe|*.EXE) ;;
-	    *)
-	      lt_outputfile="$lt_outputfile.exe"
-	      lt_tool_outputfile="$lt_tool_outputfile.exe"
-	      ;;
-	  esac~
-	  if test "$MANIFEST_TOOL" != ":" && test -f "$lt_outputfile.manifest"; then
-	    $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1;
-	    $RM "$lt_outputfile.manifest";
-	  fi'
+          lt_tool_outputfile="@TOOL_OUTPUT@"~
+          case $lt_outputfile in
+            *.exe|*.EXE) ;;
+            *)
+              lt_outputfile=$lt_outputfile.exe
+              lt_tool_outputfile=$lt_tool_outputfile.exe
+              ;;
+          esac~
+          if test : != "$MANIFEST_TOOL" && test -f "$lt_outputfile.manifest"; then
+            $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1;
+            $RM "$lt_outputfile.manifest";
+          fi'
 	;;
       *)
 	# Assume MSVC wrapper
@@ -12257,7 +12686,7 @@
 	# Tell ltmain to make .lib files, not .a files.
 	libext=lib
 	# Tell ltmain to make .dll files, not .so files.
-	shrext_cmds=".dll"
+	shrext_cmds=.dll
 	# FIXME: Setting linknames here is a bad hack.
 	archive_cmds='$CC -o $lib $libobjs $compiler_flags `func_echo_all "$deplibs" | $SED '\''s/ -lc$//'\''` -link -dll~linknames='
 	# The linker will automatically build a .lib file if we build a DLL.
@@ -12276,24 +12705,24 @@
   hardcode_direct=no
   hardcode_automatic=yes
   hardcode_shlibpath_var=unsupported
-  if test "$lt_cv_ld_force_load" = "yes"; then
-    whole_archive_flag_spec='`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience ${wl}-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`'
+  if test yes = "$lt_cv_ld_force_load"; then
+    whole_archive_flag_spec='`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience $wl-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`'
 
   else
     whole_archive_flag_spec=''
   fi
   link_all_deplibs=yes
-  allow_undefined_flag="$_lt_dar_allow_undefined"
+  allow_undefined_flag=$_lt_dar_allow_undefined
   case $cc_basename in
-     ifort*) _lt_dar_can_shared=yes ;;
+     ifort*|nagfor*) _lt_dar_can_shared=yes ;;
      *) _lt_dar_can_shared=$GCC ;;
   esac
-  if test "$_lt_dar_can_shared" = "yes"; then
+  if test yes = "$_lt_dar_can_shared"; then
     output_verbose_link_cmd=func_echo_all
-    archive_cmds="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}"
-    module_cmds="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}"
-    archive_expsym_cmds="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}"
-    module_expsym_cmds="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}"
+    archive_cmds="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod$_lt_dsymutil"
+    module_cmds="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags$_lt_dsymutil"
+    archive_expsym_cmds="sed 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod$_lt_dar_export_syms$_lt_dsymutil"
+    module_expsym_cmds="sed -e 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags$_lt_dar_export_syms$_lt_dsymutil"
 
   else
   ld_shlibs=no
@@ -12335,33 +12764,33 @@
       ;;
 
     hpux9*)
-      if test "$GCC" = yes; then
-	archive_cmds='$RM $output_objdir/$soname~$CC -shared $pic_flag ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+      if test yes = "$GCC"; then
+	archive_cmds='$RM $output_objdir/$soname~$CC -shared $pic_flag $wl+b $wl$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test "x$output_objdir/$soname" = "x$lib" || mv $output_objdir/$soname $lib'
       else
-	archive_cmds='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+	archive_cmds='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test "x$output_objdir/$soname" = "x$lib" || mv $output_objdir/$soname $lib'
       fi
-      hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
+      hardcode_libdir_flag_spec='$wl+b $wl$libdir'
       hardcode_libdir_separator=:
       hardcode_direct=yes
 
       # hardcode_minus_L: Not really in the search PATH,
       # but as the default location of the library.
       hardcode_minus_L=yes
-      export_dynamic_flag_spec='${wl}-E'
+      export_dynamic_flag_spec='$wl-E'
       ;;
 
     hpux10*)
-      if test "$GCC" = yes && test "$with_gnu_ld" = no; then
-	archive_cmds='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+      if test yes,no = "$GCC,$with_gnu_ld"; then
+	archive_cmds='$CC -shared $pic_flag $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
       else
 	archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'
       fi
-      if test "$with_gnu_ld" = no; then
-	hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
+      if test no = "$with_gnu_ld"; then
+	hardcode_libdir_flag_spec='$wl+b $wl$libdir'
 	hardcode_libdir_separator=:
 	hardcode_direct=yes
 	hardcode_direct_absolute=yes
-	export_dynamic_flag_spec='${wl}-E'
+	export_dynamic_flag_spec='$wl-E'
 	# hardcode_minus_L: Not really in the search PATH,
 	# but as the default location of the library.
 	hardcode_minus_L=yes
@@ -12369,25 +12798,25 @@
       ;;
 
     hpux11*)
-      if test "$GCC" = yes && test "$with_gnu_ld" = no; then
+      if test yes,no = "$GCC,$with_gnu_ld"; then
 	case $host_cpu in
 	hppa*64*)
-	  archive_cmds='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+	  archive_cmds='$CC -shared $wl+h $wl$soname -o $lib $libobjs $deplibs $compiler_flags'
 	  ;;
 	ia64*)
-	  archive_cmds='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
+	  archive_cmds='$CC -shared $pic_flag $wl+h $wl$soname $wl+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
 	  ;;
 	*)
-	  archive_cmds='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+	  archive_cmds='$CC -shared $pic_flag $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
 	  ;;
 	esac
       else
 	case $host_cpu in
 	hppa*64*)
-	  archive_cmds='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+	  archive_cmds='$CC -b $wl+h $wl$soname -o $lib $libobjs $deplibs $compiler_flags'
 	  ;;
 	ia64*)
-	  archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
+	  archive_cmds='$CC -b $wl+h $wl$soname $wl+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
 	  ;;
 	*)
 
@@ -12399,7 +12828,7 @@
   $as_echo_n "(cached) " >&6
 else
   lt_cv_prog_compiler__b=no
-   save_LDFLAGS="$LDFLAGS"
+   save_LDFLAGS=$LDFLAGS
    LDFLAGS="$LDFLAGS -b"
    echo "$lt_simple_link_test_code" > conftest.$ac_ext
    if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then
@@ -12418,14 +12847,14 @@
      fi
    fi
    $RM -r conftest*
-   LDFLAGS="$save_LDFLAGS"
+   LDFLAGS=$save_LDFLAGS
 
 fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler__b" >&5
 $as_echo "$lt_cv_prog_compiler__b" >&6; }
 
-if test x"$lt_cv_prog_compiler__b" = xyes; then
-    archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+if test yes = "$lt_cv_prog_compiler__b"; then
+    archive_cmds='$CC -b $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
 else
     archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'
 fi
@@ -12433,8 +12862,8 @@
 	  ;;
 	esac
       fi
-      if test "$with_gnu_ld" = no; then
-	hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
+      if test no = "$with_gnu_ld"; then
+	hardcode_libdir_flag_spec='$wl+b $wl$libdir'
 	hardcode_libdir_separator=:
 
 	case $host_cpu in
@@ -12445,7 +12874,7 @@
 	*)
 	  hardcode_direct=yes
 	  hardcode_direct_absolute=yes
-	  export_dynamic_flag_spec='${wl}-E'
+	  export_dynamic_flag_spec='$wl-E'
 
 	  # hardcode_minus_L: Not really in the search PATH,
 	  # but as the default location of the library.
@@ -12456,8 +12885,8 @@
       ;;
 
     irix5* | irix6* | nonstopux*)
-      if test "$GCC" = yes; then
-	archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+      if test yes = "$GCC"; then
+	archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib'
 	# Try to use the -exported_symbol ld option, if it does not
 	# work, assume that -exports_file does not work either and
 	# implicitly export all symbols.
@@ -12467,8 +12896,8 @@
 if ${lt_cv_irix_exported_symbol+:} false; then :
   $as_echo_n "(cached) " >&6
 else
-  save_LDFLAGS="$LDFLAGS"
-	   LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null"
+  save_LDFLAGS=$LDFLAGS
+	   LDFLAGS="$LDFLAGS -shared $wl-exported_symbol ${wl}foo $wl-update_registry $wl/dev/null"
 	   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 int foo (void) { return 0; }
@@ -12480,24 +12909,35 @@
 fi
 rm -f core conftest.err conftest.$ac_objext \
     conftest$ac_exeext conftest.$ac_ext
-           LDFLAGS="$save_LDFLAGS"
+           LDFLAGS=$save_LDFLAGS
 fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_irix_exported_symbol" >&5
 $as_echo "$lt_cv_irix_exported_symbol" >&6; }
-	if test "$lt_cv_irix_exported_symbol" = yes; then
-          archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib'
+	if test yes = "$lt_cv_irix_exported_symbol"; then
+          archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations $wl-exports_file $wl$export_symbols -o $lib'
 	fi
+	link_all_deplibs=no
       else
-	archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib'
-	archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib'
+	archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib'
+	archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -exports_file $export_symbols -o $lib'
       fi
       archive_cmds_need_lc='no'
-      hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+      hardcode_libdir_flag_spec='$wl-rpath $wl$libdir'
       hardcode_libdir_separator=:
       inherit_rpath=yes
       link_all_deplibs=yes
       ;;
 
+    linux*)
+      case $cc_basename in
+      tcc*)
+	# Fabrice Bellard et al's Tiny C Compiler
+	ld_shlibs=yes
+	archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
+	;;
+      esac
+      ;;
+
     netbsd* | netbsdelf*-gnu)
       if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
 	archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'  # a.out
@@ -12512,7 +12952,7 @@
     newsos6)
       archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
       hardcode_direct=yes
-      hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+      hardcode_libdir_flag_spec='$wl-rpath $wl$libdir'
       hardcode_libdir_separator=:
       hardcode_shlibpath_var=no
       ;;
@@ -12520,27 +12960,19 @@
     *nto* | *qnx*)
       ;;
 
-    openbsd*)
+    openbsd* | bitrig*)
       if test -f /usr/libexec/ld.so; then
 	hardcode_direct=yes
 	hardcode_shlibpath_var=no
 	hardcode_direct_absolute=yes
-	if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+	if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then
 	  archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
-	  archive_expsym_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols'
-	  hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
-	  export_dynamic_flag_spec='${wl}-E'
+	  archive_expsym_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags $wl-retain-symbols-file,$export_symbols'
+	  hardcode_libdir_flag_spec='$wl-rpath,$libdir'
+	  export_dynamic_flag_spec='$wl-E'
 	else
-	  case $host_os in
-	   openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*)
-	     archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
-	     hardcode_libdir_flag_spec='-R$libdir'
-	     ;;
-	   *)
-	     archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
-	     hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
-	     ;;
-	  esac
+	  archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
+	  hardcode_libdir_flag_spec='$wl-rpath,$libdir'
 	fi
       else
 	ld_shlibs=no
@@ -12551,33 +12983,53 @@
       hardcode_libdir_flag_spec='-L$libdir'
       hardcode_minus_L=yes
       allow_undefined_flag=unsupported
-      archive_cmds='$ECHO "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~echo DATA >> $output_objdir/$libname.def~echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def'
-      old_archive_from_new_cmds='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def'
+      shrext_cmds=.dll
+      archive_cmds='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~
+	$ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~
+	$ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~
+	$ECHO EXPORTS >> $output_objdir/$libname.def~
+	emxexp $libobjs | $SED /"_DLL_InitTerm"/d >> $output_objdir/$libname.def~
+	$CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~
+	emximp -o $lib $output_objdir/$libname.def'
+      archive_expsym_cmds='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~
+	$ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~
+	$ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~
+	$ECHO EXPORTS >> $output_objdir/$libname.def~
+	prefix_cmds="$SED"~
+	if test EXPORTS = "`$SED 1q $export_symbols`"; then
+	  prefix_cmds="$prefix_cmds -e 1d";
+	fi~
+	prefix_cmds="$prefix_cmds -e \"s/^\(.*\)$/_\1/g\""~
+	cat $export_symbols | $prefix_cmds >> $output_objdir/$libname.def~
+	$CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~
+	emximp -o $lib $output_objdir/$libname.def'
+      old_archive_From_new_cmds='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def'
+      enable_shared_with_static_runtimes=yes
       ;;
 
     osf3*)
-      if test "$GCC" = yes; then
-	allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*'
-	archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+      if test yes = "$GCC"; then
+	allow_undefined_flag=' $wl-expect_unresolved $wl\*'
+	archive_cmds='$CC -shared$allow_undefined_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib'
       else
 	allow_undefined_flag=' -expect_unresolved \*'
-	archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib'
+	archive_cmds='$CC -shared$allow_undefined_flag $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib'
       fi
       archive_cmds_need_lc='no'
-      hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+      hardcode_libdir_flag_spec='$wl-rpath $wl$libdir'
       hardcode_libdir_separator=:
       ;;
 
     osf4* | osf5*)	# as osf3* with the addition of -msym flag
-      if test "$GCC" = yes; then
-	allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*'
-	archive_cmds='$CC -shared${allow_undefined_flag} $pic_flag $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
-	hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+      if test yes = "$GCC"; then
+	allow_undefined_flag=' $wl-expect_unresolved $wl\*'
+	archive_cmds='$CC -shared$allow_undefined_flag $pic_flag $libobjs $deplibs $compiler_flags $wl-msym $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib'
+	hardcode_libdir_flag_spec='$wl-rpath $wl$libdir'
       else
 	allow_undefined_flag=' -expect_unresolved \*'
-	archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib'
+	archive_cmds='$CC -shared$allow_undefined_flag $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib'
 	archive_expsym_cmds='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~
-	$CC -shared${allow_undefined_flag} ${wl}-input ${wl}$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib~$RM $lib.exp'
+          $CC -shared$allow_undefined_flag $wl-input $wl$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib~$RM $lib.exp'
 
 	# Both c and cxx compiler support -rpath directly
 	hardcode_libdir_flag_spec='-rpath $libdir'
@@ -12588,24 +13040,24 @@
 
     solaris*)
       no_undefined_flag=' -z defs'
-      if test "$GCC" = yes; then
-	wlarc='${wl}'
-	archive_cmds='$CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+      if test yes = "$GCC"; then
+	wlarc='$wl'
+	archive_cmds='$CC -shared $pic_flag $wl-z ${wl}text $wl-h $wl$soname -o $lib $libobjs $deplibs $compiler_flags'
 	archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
-	  $CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp'
+          $CC -shared $pic_flag $wl-z ${wl}text $wl-M $wl$lib.exp $wl-h $wl$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp'
       else
 	case `$CC -V 2>&1` in
 	*"Compilers 5.0"*)
 	  wlarc=''
-	  archive_cmds='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags'
+	  archive_cmds='$LD -G$allow_undefined_flag -h $soname -o $lib $libobjs $deplibs $linker_flags'
 	  archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
-	  $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp'
+            $LD -G$allow_undefined_flag -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp'
 	  ;;
 	*)
-	  wlarc='${wl}'
-	  archive_cmds='$CC -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $compiler_flags'
+	  wlarc='$wl'
+	  archive_cmds='$CC -G$allow_undefined_flag -h $soname -o $lib $libobjs $deplibs $compiler_flags'
 	  archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
-	  $CC -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp'
+            $CC -G$allow_undefined_flag -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp'
 	  ;;
 	esac
       fi
@@ -12615,11 +13067,11 @@
       solaris2.[0-5] | solaris2.[0-5].*) ;;
       *)
 	# The compiler driver will combine and reorder linker options,
-	# but understands `-z linker_flag'.  GCC discards it without `$wl',
+	# but understands '-z linker_flag'.  GCC discards it without '$wl',
 	# but is careful enough not to reorder.
 	# Supported since Solaris 2.6 (maybe 2.5.1?)
-	if test "$GCC" = yes; then
-	  whole_archive_flag_spec='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract'
+	if test yes = "$GCC"; then
+	  whole_archive_flag_spec='$wl-z ${wl}allextract$convenience $wl-z ${wl}defaultextract'
 	else
 	  whole_archive_flag_spec='-z allextract$convenience -z defaultextract'
 	fi
@@ -12629,10 +13081,10 @@
       ;;
 
     sunos4*)
-      if test "x$host_vendor" = xsequent; then
+      if test sequent = "$host_vendor"; then
 	# Use $CC to link under sequent, because it throws in some extra .o
 	# files that make .init and .fini sections work.
-	archive_cmds='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags'
+	archive_cmds='$CC -G $wl-h $soname -o $lib $libobjs $deplibs $compiler_flags'
       else
 	archive_cmds='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags'
       fi
@@ -12681,43 +13133,43 @@
       ;;
 
     sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*)
-      no_undefined_flag='${wl}-z,text'
+      no_undefined_flag='$wl-z,text'
       archive_cmds_need_lc=no
       hardcode_shlibpath_var=no
       runpath_var='LD_RUN_PATH'
 
-      if test "$GCC" = yes; then
-	archive_cmds='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
-	archive_expsym_cmds='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+      if test yes = "$GCC"; then
+	archive_cmds='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+	archive_expsym_cmds='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
       else
-	archive_cmds='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
-	archive_expsym_cmds='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+	archive_cmds='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+	archive_expsym_cmds='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
       fi
       ;;
 
     sysv5* | sco3.2v5* | sco5v6*)
-      # Note: We can NOT use -z defs as we might desire, because we do not
+      # Note: We CANNOT use -z defs as we might desire, because we do not
       # link with -lc, and that would cause any symbols used from libc to
       # always be unresolved, which means just about no library would
       # ever link correctly.  If we're not using GNU ld we use -z text
       # though, which does catch some bad symbols but isn't as heavy-handed
       # as -z defs.
-      no_undefined_flag='${wl}-z,text'
-      allow_undefined_flag='${wl}-z,nodefs'
+      no_undefined_flag='$wl-z,text'
+      allow_undefined_flag='$wl-z,nodefs'
       archive_cmds_need_lc=no
       hardcode_shlibpath_var=no
-      hardcode_libdir_flag_spec='${wl}-R,$libdir'
+      hardcode_libdir_flag_spec='$wl-R,$libdir'
       hardcode_libdir_separator=':'
       link_all_deplibs=yes
-      export_dynamic_flag_spec='${wl}-Bexport'
+      export_dynamic_flag_spec='$wl-Bexport'
       runpath_var='LD_RUN_PATH'
 
-      if test "$GCC" = yes; then
-	archive_cmds='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
-	archive_expsym_cmds='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+      if test yes = "$GCC"; then
+	archive_cmds='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+	archive_expsym_cmds='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
       else
-	archive_cmds='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
-	archive_expsym_cmds='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+	archive_cmds='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+	archive_expsym_cmds='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
       fi
       ;;
 
@@ -12732,10 +13184,10 @@
       ;;
     esac
 
-    if test x$host_vendor = xsni; then
+    if test sni = "$host_vendor"; then
       case $host in
       sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
-	export_dynamic_flag_spec='${wl}-Blargedynsym'
+	export_dynamic_flag_spec='$wl-Blargedynsym'
 	;;
       esac
     fi
@@ -12743,7 +13195,7 @@
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs" >&5
 $as_echo "$ld_shlibs" >&6; }
-test "$ld_shlibs" = no && can_build_shared=no
+test no = "$ld_shlibs" && can_build_shared=no
 
 with_gnu_ld=$with_gnu_ld
 
@@ -12769,7 +13221,7 @@
   # Assume -lc should be added
   archive_cmds_need_lc=yes
 
-  if test "$enable_shared" = yes && test "$GCC" = yes; then
+  if test yes,yes = "$GCC,$enable_shared"; then
     case $archive_cmds in
     *'~'*)
       # FIXME: we may have to deal with multi-command sequences.
@@ -12984,14 +13436,14 @@
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics" >&5
 $as_echo_n "checking dynamic linker characteristics... " >&6; }
 
-if test "$GCC" = yes; then
+if test yes = "$GCC"; then
   case $host_os in
-    darwin*) lt_awk_arg="/^libraries:/,/LR/" ;;
-    *) lt_awk_arg="/^libraries:/" ;;
+    darwin*) lt_awk_arg='/^libraries:/,/LR/' ;;
+    *) lt_awk_arg='/^libraries:/' ;;
   esac
   case $host_os in
-    mingw* | cegcc*) lt_sed_strip_eq="s,=\([A-Za-z]:\),\1,g" ;;
-    *) lt_sed_strip_eq="s,=/,/,g" ;;
+    mingw* | cegcc*) lt_sed_strip_eq='s|=\([A-Za-z]:\)|\1|g' ;;
+    *) lt_sed_strip_eq='s|=/|/|g' ;;
   esac
   lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e $lt_sed_strip_eq`
   case $lt_search_path_spec in
@@ -13007,28 +13459,35 @@
     ;;
   esac
   # Ok, now we have the path, separated by spaces, we can step through it
-  # and add multilib dir if necessary.
+  # and add multilib dir if necessary...
   lt_tmp_lt_search_path_spec=
-  lt_multi_os_dir=`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null`
+  lt_multi_os_dir=/`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null`
+  # ...but if some path component already ends with the multilib dir we assume
+  # that all is fine and trust -print-search-dirs as is (GCC 4.2? or newer).
+  case "$lt_multi_os_dir; $lt_search_path_spec " in
+  "/; "* | "/.; "* | "/./; "* | *"$lt_multi_os_dir "* | *"$lt_multi_os_dir/ "*)
+    lt_multi_os_dir=
+    ;;
+  esac
   for lt_sys_path in $lt_search_path_spec; do
-    if test -d "$lt_sys_path/$lt_multi_os_dir"; then
-      lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path/$lt_multi_os_dir"
-    else
+    if test -d "$lt_sys_path$lt_multi_os_dir"; then
+      lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path$lt_multi_os_dir"
+    elif test -n "$lt_multi_os_dir"; then
       test -d "$lt_sys_path" && \
 	lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path"
     fi
   done
   lt_search_path_spec=`$ECHO "$lt_tmp_lt_search_path_spec" | awk '
-BEGIN {RS=" "; FS="/|\n";} {
-  lt_foo="";
-  lt_count=0;
+BEGIN {RS = " "; FS = "/|\n";} {
+  lt_foo = "";
+  lt_count = 0;
   for (lt_i = NF; lt_i > 0; lt_i--) {
     if ($lt_i != "" && $lt_i != ".") {
       if ($lt_i == "..") {
         lt_count++;
       } else {
         if (lt_count == 0) {
-          lt_foo="/" $lt_i lt_foo;
+          lt_foo = "/" $lt_i lt_foo;
         } else {
           lt_count--;
         }
@@ -13042,7 +13501,7 @@
   # for these hosts.
   case $host_os in
     mingw* | cegcc*) lt_search_path_spec=`$ECHO "$lt_search_path_spec" |\
-      $SED 's,/\([A-Za-z]:\),\1,g'` ;;
+      $SED 's|/\([A-Za-z]:\)|\1|g'` ;;
   esac
   sys_lib_search_path_spec=`$ECHO "$lt_search_path_spec" | $lt_NL2SP`
 else
@@ -13051,7 +13510,7 @@
 library_names_spec=
 libname_spec='lib$name'
 soname_spec=
-shrext_cmds=".so"
+shrext_cmds=.so
 postinstall_cmds=
 postuninstall_cmds=
 finish_cmds=
@@ -13068,14 +13527,16 @@
 # flags to be left without arguments
 need_version=unknown
 
+
+
 case $host_os in
 aix3*)
   version_type=linux # correct to gnu/linux during the next big refactor
-  library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a'
+  library_names_spec='$libname$release$shared_ext$versuffix $libname.a'
   shlibpath_var=LIBPATH
 
   # AIX 3 has no versioning support, so we append a major version to the name.
-  soname_spec='${libname}${release}${shared_ext}$major'
+  soname_spec='$libname$release$shared_ext$major'
   ;;
 
 aix[4-9]*)
@@ -13083,41 +13544,91 @@
   need_lib_prefix=no
   need_version=no
   hardcode_into_libs=yes
-  if test "$host_cpu" = ia64; then
+  if test ia64 = "$host_cpu"; then
     # AIX 5 supports IA64
-    library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}'
+    library_names_spec='$libname$release$shared_ext$major $libname$release$shared_ext$versuffix $libname$shared_ext'
     shlibpath_var=LD_LIBRARY_PATH
   else
     # With GCC up to 2.95.x, collect2 would create an import file
     # for dependence libraries.  The import file would start with
-    # the line `#! .'.  This would cause the generated library to
-    # depend on `.', always an invalid library.  This was fixed in
+    # the line '#! .'.  This would cause the generated library to
+    # depend on '.', always an invalid library.  This was fixed in
     # development snapshots of GCC prior to 3.0.
     case $host_os in
       aix4 | aix4.[01] | aix4.[01].*)
       if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)'
 	   echo ' yes '
-	   echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then
+	   echo '#endif'; } | $CC -E - | $GREP yes > /dev/null; then
 	:
       else
 	can_build_shared=no
       fi
       ;;
     esac
-    # AIX (on Power*) has no versioning support, so currently we can not hardcode correct
+    # Using Import Files as archive members, it is possible to support
+    # filename-based versioning of shared library archives on AIX. While
+    # this would work for both with and without runtime linking, it will
+    # prevent static linking of such archives. So we do filename-based
+    # shared library versioning with .so extension only, which is used
+    # when both runtime linking and shared linking is enabled.
+    # Unfortunately, runtime linking may impact performance, so we do
+    # not want this to be the default eventually. Also, we use the
+    # versioned .so libs for executables only if there is the -brtl
+    # linker flag in LDFLAGS as well, or --with-aix-soname=svr4 only.
+    # To allow for filename-based versioning support, we need to create
+    # libNAME.so.V as an archive file, containing:
+    # *) an Import File, referring to the versioned filename of the
+    #    archive as well as the shared archive member, telling the
+    #    bitwidth (32 or 64) of that shared object, and providing the
+    #    list of exported symbols of that shared object, eventually
+    #    decorated with the 'weak' keyword
+    # *) the shared object with the F_LOADONLY flag set, to really avoid
+    #    it being seen by the linker.
+    # At run time we better use the real file rather than another symlink,
+    # but for link time we create the symlink libNAME.so -> libNAME.so.V
+
+    case $with_aix_soname,$aix_use_runtimelinking in
+    # AIX (on Power*) has no versioning support, so currently we cannot hardcode correct
     # soname into executable. Probably we can add versioning support to
     # collect2, so additional links can be useful in future.
-    if test "$aix_use_runtimelinking" = yes; then
+    aix,yes) # traditional libtool
+      dynamic_linker='AIX unversionable lib.so'
       # If using run time linking (on AIX 4.2 or later) use lib<name>.so
       # instead of lib<name>.a to let people know that these are not
       # typical AIX shared libraries.
-      library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-    else
+      library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+      ;;
+    aix,no) # traditional AIX only
+      dynamic_linker='AIX lib.a(lib.so.V)'
       # We preserve .a as extension for shared libraries through AIX4.2
       # and later when we are not doing run time linking.
-      library_names_spec='${libname}${release}.a $libname.a'
-      soname_spec='${libname}${release}${shared_ext}$major'
-    fi
+      library_names_spec='$libname$release.a $libname.a'
+      soname_spec='$libname$release$shared_ext$major'
+      ;;
+    svr4,*) # full svr4 only
+      dynamic_linker="AIX lib.so.V($shared_archive_member_spec.o)"
+      library_names_spec='$libname$release$shared_ext$major $libname$shared_ext'
+      # We do not specify a path in Import Files, so LIBPATH fires.
+      shlibpath_overrides_runpath=yes
+      ;;
+    *,yes) # both, prefer svr4
+      dynamic_linker="AIX lib.so.V($shared_archive_member_spec.o), lib.a(lib.so.V)"
+      library_names_spec='$libname$release$shared_ext$major $libname$shared_ext'
+      # unpreferred sharedlib libNAME.a needs extra handling
+      postinstall_cmds='test -n "$linkname" || linkname="$realname"~func_stripname "" ".so" "$linkname"~$install_shared_prog "$dir/$func_stripname_result.$libext" "$destdir/$func_stripname_result.$libext"~test -z "$tstripme" || test -z "$striplib" || $striplib "$destdir/$func_stripname_result.$libext"'
+      postuninstall_cmds='for n in $library_names $old_library; do :; done~func_stripname "" ".so" "$n"~test "$func_stripname_result" = "$n" || func_append rmfiles " $odir/$func_stripname_result.$libext"'
+      # We do not specify a path in Import Files, so LIBPATH fires.
+      shlibpath_overrides_runpath=yes
+      ;;
+    *,no) # both, prefer aix
+      dynamic_linker="AIX lib.a(lib.so.V), lib.so.V($shared_archive_member_spec.o)"
+      library_names_spec='$libname$release.a $libname.a'
+      soname_spec='$libname$release$shared_ext$major'
+      # unpreferred sharedlib libNAME.so.V and symlink libNAME.so need extra handling
+      postinstall_cmds='test -z "$dlname" || $install_shared_prog $dir/$dlname $destdir/$dlname~test -z "$tstripme" || test -z "$striplib" || $striplib $destdir/$dlname~test -n "$linkname" || linkname=$realname~func_stripname "" ".a" "$linkname"~(cd "$destdir" && $LN_S -f $dlname $func_stripname_result.so)'
+      postuninstall_cmds='test -z "$dlname" || func_append rmfiles " $odir/$dlname"~for n in $old_library $library_names; do :; done~func_stripname "" ".a" "$n"~func_append rmfiles " $odir/$func_stripname_result.so"'
+      ;;
+    esac
     shlibpath_var=LIBPATH
   fi
   ;;
@@ -13127,18 +13638,18 @@
   powerpc)
     # Since July 2007 AmigaOS4 officially supports .so libraries.
     # When compiling the executable, add -use-dynld -Lsobjs: to the compileline.
-    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+    library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
     ;;
   m68k)
     library_names_spec='$libname.ixlibrary $libname.a'
     # Create ${libname}_ixlibrary.a entries in /sys/libs.
-    finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done'
+    finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done'
     ;;
   esac
   ;;
 
 beos*)
-  library_names_spec='${libname}${shared_ext}'
+  library_names_spec='$libname$shared_ext'
   dynamic_linker="$host_os ld.so"
   shlibpath_var=LIBRARY_PATH
   ;;
@@ -13146,8 +13657,8 @@
 bsdi[45]*)
   version_type=linux # correct to gnu/linux during the next big refactor
   need_version=no
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-  soname_spec='${libname}${release}${shared_ext}$major'
+  library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+  soname_spec='$libname$release$shared_ext$major'
   finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir'
   shlibpath_var=LD_LIBRARY_PATH
   sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib"
@@ -13159,7 +13670,7 @@
 
 cygwin* | mingw* | pw32* | cegcc*)
   version_type=windows
-  shrext_cmds=".dll"
+  shrext_cmds=.dll
   need_version=no
   need_lib_prefix=no
 
@@ -13168,8 +13679,8 @@
     # gcc
     library_names_spec='$libname.dll.a'
     # DLL is installed to $(libdir)/../bin by postinstall_cmds
-    postinstall_cmds='base_file=`basename \${file}`~
-      dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~
+    postinstall_cmds='base_file=`basename \$file`~
+      dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; echo \$dlname'\''`~
       dldir=$destdir/`dirname \$dlpath`~
       test -d \$dldir || mkdir -p \$dldir~
       $install_prog $dir/$dlname \$dldir/$dlname~
@@ -13185,17 +13696,17 @@
     case $host_os in
     cygwin*)
       # Cygwin DLLs use 'cyg' prefix rather than 'lib'
-      soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
+      soname_spec='`echo $libname | sed -e 's/^lib/cyg/'``echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext'
 
       sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/lib/w32api"
       ;;
     mingw* | cegcc*)
       # MinGW DLLs use traditional 'lib' prefix
-      soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
+      soname_spec='$libname`echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext'
       ;;
     pw32*)
       # pw32 DLLs use 'pw' prefix rather than 'lib'
-      library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
+      library_names_spec='`echo $libname | sed -e 's/^lib/pw/'``echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext'
       ;;
     esac
     dynamic_linker='Win32 ld.exe'
@@ -13204,8 +13715,8 @@
   *,cl*)
     # Native MSVC
     libname_spec='$name'
-    soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
-    library_names_spec='${libname}.dll.lib'
+    soname_spec='$libname`echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext'
+    library_names_spec='$libname.dll.lib'
 
     case $build_os in
     mingw*)
@@ -13232,7 +13743,7 @@
       sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"`
       ;;
     *)
-      sys_lib_search_path_spec="$LIB"
+      sys_lib_search_path_spec=$LIB
       if $ECHO "$sys_lib_search_path_spec" | $GREP ';[c-zC-Z]:/' >/dev/null; then
         # It is most probably a Windows format PATH.
         sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'`
@@ -13245,8 +13756,8 @@
     esac
 
     # DLL is installed to $(libdir)/../bin by postinstall_cmds
-    postinstall_cmds='base_file=`basename \${file}`~
-      dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~
+    postinstall_cmds='base_file=`basename \$file`~
+      dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; echo \$dlname'\''`~
       dldir=$destdir/`dirname \$dlpath`~
       test -d \$dldir || mkdir -p \$dldir~
       $install_prog $dir/$dlname \$dldir/$dlname'
@@ -13259,7 +13770,7 @@
 
   *)
     # Assume MSVC wrapper
-    library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib'
+    library_names_spec='$libname`echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext $libname.lib'
     dynamic_linker='Win32 ld.exe'
     ;;
   esac
@@ -13272,8 +13783,8 @@
   version_type=darwin
   need_lib_prefix=no
   need_version=no
-  library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext'
-  soname_spec='${libname}${release}${major}$shared_ext'
+  library_names_spec='$libname$release$major$shared_ext $libname$shared_ext'
+  soname_spec='$libname$release$major$shared_ext'
   shlibpath_overrides_runpath=yes
   shlibpath_var=DYLD_LIBRARY_PATH
   shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`'
@@ -13286,8 +13797,8 @@
   version_type=linux # correct to gnu/linux during the next big refactor
   need_lib_prefix=no
   need_version=no
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext'
-  soname_spec='${libname}${release}${shared_ext}$major'
+  library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+  soname_spec='$libname$release$shared_ext$major'
   shlibpath_var=LD_LIBRARY_PATH
   ;;
 
@@ -13305,12 +13816,13 @@
   version_type=freebsd-$objformat
   case $version_type in
     freebsd-elf*)
-      library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}'
+      library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+      soname_spec='$libname$release$shared_ext$major'
       need_version=no
       need_lib_prefix=no
       ;;
     freebsd-*)
-      library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix'
+      library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix'
       need_version=yes
       ;;
   esac
@@ -13340,10 +13852,10 @@
   need_lib_prefix=no
   need_version=no
   dynamic_linker="$host_os runtime_loader"
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}'
-  soname_spec='${libname}${release}${shared_ext}$major'
+  library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+  soname_spec='$libname$release$shared_ext$major'
   shlibpath_var=LIBRARY_PATH
-  shlibpath_overrides_runpath=yes
+  shlibpath_overrides_runpath=no
   sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib'
   hardcode_into_libs=yes
   ;;
@@ -13361,14 +13873,15 @@
     dynamic_linker="$host_os dld.so"
     shlibpath_var=LD_LIBRARY_PATH
     shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
-    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-    soname_spec='${libname}${release}${shared_ext}$major'
-    if test "X$HPUX_IA64_MODE" = X32; then
+    library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+    soname_spec='$libname$release$shared_ext$major'
+    if test 32 = "$HPUX_IA64_MODE"; then
       sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib"
+      sys_lib_dlsearch_path_spec=/usr/lib/hpux32
     else
       sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64"
+      sys_lib_dlsearch_path_spec=/usr/lib/hpux64
     fi
-    sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
     ;;
   hppa*64*)
     shrext_cmds='.sl'
@@ -13376,8 +13889,8 @@
     dynamic_linker="$host_os dld.sl"
     shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH
     shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
-    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-    soname_spec='${libname}${release}${shared_ext}$major'
+    library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+    soname_spec='$libname$release$shared_ext$major'
     sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64"
     sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
     ;;
@@ -13386,8 +13899,8 @@
     dynamic_linker="$host_os dld.sl"
     shlibpath_var=SHLIB_PATH
     shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH
-    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-    soname_spec='${libname}${release}${shared_ext}$major'
+    library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+    soname_spec='$libname$release$shared_ext$major'
     ;;
   esac
   # HP-UX runs *really* slowly unless shared libraries are mode 555, ...
@@ -13400,8 +13913,8 @@
   version_type=linux # correct to gnu/linux during the next big refactor
   need_lib_prefix=no
   need_version=no
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
-  soname_spec='${libname}${release}${shared_ext}$major'
+  library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+  soname_spec='$libname$release$shared_ext$major'
   dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)'
   shlibpath_var=LD_LIBRARY_PATH
   shlibpath_overrides_runpath=no
@@ -13412,7 +13925,7 @@
   case $host_os in
     nonstopux*) version_type=nonstopux ;;
     *)
-	if test "$lt_cv_prog_gnu_ld" = yes; then
+	if test yes = "$lt_cv_prog_gnu_ld"; then
 		version_type=linux # correct to gnu/linux during the next big refactor
 	else
 		version_type=irix
@@ -13420,8 +13933,8 @@
   esac
   need_lib_prefix=no
   need_version=no
-  soname_spec='${libname}${release}${shared_ext}$major'
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}'
+  soname_spec='$libname$release$shared_ext$major'
+  library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$release$shared_ext $libname$shared_ext'
   case $host_os in
   irix5* | nonstopux*)
     libsuff= shlibsuff=
@@ -13440,8 +13953,8 @@
   esac
   shlibpath_var=LD_LIBRARY${shlibsuff}_PATH
   shlibpath_overrides_runpath=no
-  sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}"
-  sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}"
+  sys_lib_search_path_spec="/usr/lib$libsuff /lib$libsuff /usr/local/lib$libsuff"
+  sys_lib_dlsearch_path_spec="/usr/lib$libsuff /lib$libsuff"
   hardcode_into_libs=yes
   ;;
 
@@ -13450,13 +13963,33 @@
   dynamic_linker=no
   ;;
 
+linux*android*)
+  version_type=none # Android doesn't support versioned libraries.
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='$libname$release$shared_ext'
+  soname_spec='$libname$release$shared_ext'
+  finish_cmds=
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+
+  # This implies no fast_install, which is unacceptable.
+  # Some rework will be needed to allow for fast_install
+  # before this can be enabled.
+  hardcode_into_libs=yes
+
+  dynamic_linker='Android linker'
+  # Don't embed -rpath directories since the linker doesn't support them.
+  hardcode_libdir_flag_spec='-L$libdir'
+  ;;
+
 # This must be glibc/ELF.
 linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*)
   version_type=linux # correct to gnu/linux during the next big refactor
   need_lib_prefix=no
   need_version=no
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-  soname_spec='${libname}${release}${shared_ext}$major'
+  library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+  soname_spec='$libname$release$shared_ext$major'
   finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir'
   shlibpath_var=LD_LIBRARY_PATH
   shlibpath_overrides_runpath=no
@@ -13500,7 +14033,12 @@
   # before this can be enabled.
   hardcode_into_libs=yes
 
-  # Append ld.so.conf contents to the search path
+  # Ideally, we could use ldconfig to report *all* directores which are
+  # searched for libraries, however this is still not possible.  Aside from not
+  # being certain /sbin/ldconfig is available, command
+  # 'ldconfig -N -X -v | grep ^/' on 64bit Fedora does not report /usr/lib64,
+  # even though it is searched at run-time.  Try to do the best guess by
+  # appending ld.so.conf contents (and includes) to the search path.
   if test -f /etc/ld.so.conf; then
     lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[	 ]*hwcap[	 ]/d;s/[:,	]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '`
     sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra"
@@ -13532,12 +14070,12 @@
   need_lib_prefix=no
   need_version=no
   if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
-    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+    library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix'
     finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
     dynamic_linker='NetBSD (a.out) ld.so'
   else
-    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
-    soname_spec='${libname}${release}${shared_ext}$major'
+    library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+    soname_spec='$libname$release$shared_ext$major'
     dynamic_linker='NetBSD ld.elf_so'
   fi
   shlibpath_var=LD_LIBRARY_PATH
@@ -13547,7 +14085,7 @@
 
 newsos6)
   version_type=linux # correct to gnu/linux during the next big refactor
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
   shlibpath_var=LD_LIBRARY_PATH
   shlibpath_overrides_runpath=yes
   ;;
@@ -13556,58 +14094,68 @@
   version_type=qnx
   need_lib_prefix=no
   need_version=no
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-  soname_spec='${libname}${release}${shared_ext}$major'
+  library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+  soname_spec='$libname$release$shared_ext$major'
   shlibpath_var=LD_LIBRARY_PATH
   shlibpath_overrides_runpath=no
   hardcode_into_libs=yes
   dynamic_linker='ldqnx.so'
   ;;
 
-openbsd*)
+openbsd* | bitrig*)
   version_type=sunos
-  sys_lib_dlsearch_path_spec="/usr/lib"
+  sys_lib_dlsearch_path_spec=/usr/lib
   need_lib_prefix=no
-  # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs.
-  case $host_os in
-    openbsd3.3 | openbsd3.3.*)	need_version=yes ;;
-    *)				need_version=no  ;;
-  esac
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+  if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then
+    need_version=no
+  else
+    need_version=yes
+  fi
+  library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix'
   finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
   shlibpath_var=LD_LIBRARY_PATH
-  if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
-    case $host_os in
-      openbsd2.[89] | openbsd2.[89].*)
-	shlibpath_overrides_runpath=no
-	;;
-      *)
-	shlibpath_overrides_runpath=yes
-	;;
-      esac
-  else
-    shlibpath_overrides_runpath=yes
-  fi
+  shlibpath_overrides_runpath=yes
   ;;
 
 os2*)
   libname_spec='$name'
-  shrext_cmds=".dll"
+  version_type=windows
+  shrext_cmds=.dll
+  need_version=no
   need_lib_prefix=no
-  library_names_spec='$libname${shared_ext} $libname.a'
+  # OS/2 can only load a DLL with a base name of 8 characters or less.
+  soname_spec='`test -n "$os2dllname" && libname="$os2dllname";
+    v=$($ECHO $release$versuffix | tr -d .-);
+    n=$($ECHO $libname | cut -b -$((8 - ${#v})) | tr . _);
+    $ECHO $n$v`$shared_ext'
+  library_names_spec='${libname}_dll.$libext'
   dynamic_linker='OS/2 ld.exe'
-  shlibpath_var=LIBPATH
+  shlibpath_var=BEGINLIBPATH
+  sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib"
+  sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
+  postinstall_cmds='base_file=`basename \$file`~
+    dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; $ECHO \$dlname'\''`~
+    dldir=$destdir/`dirname \$dlpath`~
+    test -d \$dldir || mkdir -p \$dldir~
+    $install_prog $dir/$dlname \$dldir/$dlname~
+    chmod a+x \$dldir/$dlname~
+    if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then
+      eval '\''$striplib \$dldir/$dlname'\'' || exit \$?;
+    fi'
+  postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; $ECHO \$dlname'\''`~
+    dlpath=$dir/\$dldll~
+    $RM \$dlpath'
   ;;
 
 osf3* | osf4* | osf5*)
   version_type=osf
   need_lib_prefix=no
   need_version=no
-  soname_spec='${libname}${release}${shared_ext}$major'
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='$libname$release$shared_ext$major'
+  library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
   shlibpath_var=LD_LIBRARY_PATH
   sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib"
-  sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec"
+  sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
   ;;
 
 rdos*)
@@ -13618,8 +14166,8 @@
   version_type=linux # correct to gnu/linux during the next big refactor
   need_lib_prefix=no
   need_version=no
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-  soname_spec='${libname}${release}${shared_ext}$major'
+  library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+  soname_spec='$libname$release$shared_ext$major'
   shlibpath_var=LD_LIBRARY_PATH
   shlibpath_overrides_runpath=yes
   hardcode_into_libs=yes
@@ -13629,11 +14177,11 @@
 
 sunos4*)
   version_type=sunos
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+  library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix'
   finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir'
   shlibpath_var=LD_LIBRARY_PATH
   shlibpath_overrides_runpath=yes
-  if test "$with_gnu_ld" = yes; then
+  if test yes = "$with_gnu_ld"; then
     need_lib_prefix=no
   fi
   need_version=yes
@@ -13641,8 +14189,8 @@
 
 sysv4 | sysv4.3*)
   version_type=linux # correct to gnu/linux during the next big refactor
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-  soname_spec='${libname}${release}${shared_ext}$major'
+  library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+  soname_spec='$libname$release$shared_ext$major'
   shlibpath_var=LD_LIBRARY_PATH
   case $host_vendor in
     sni)
@@ -13663,24 +14211,24 @@
   ;;
 
 sysv4*MP*)
-  if test -d /usr/nec ;then
+  if test -d /usr/nec; then
     version_type=linux # correct to gnu/linux during the next big refactor
-    library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}'
-    soname_spec='$libname${shared_ext}.$major'
+    library_names_spec='$libname$shared_ext.$versuffix $libname$shared_ext.$major $libname$shared_ext'
+    soname_spec='$libname$shared_ext.$major'
     shlibpath_var=LD_LIBRARY_PATH
   fi
   ;;
 
 sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
-  version_type=freebsd-elf
+  version_type=sco
   need_lib_prefix=no
   need_version=no
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}'
-  soname_spec='${libname}${release}${shared_ext}$major'
+  library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext $libname$shared_ext'
+  soname_spec='$libname$release$shared_ext$major'
   shlibpath_var=LD_LIBRARY_PATH
   shlibpath_overrides_runpath=yes
   hardcode_into_libs=yes
-  if test "$with_gnu_ld" = yes; then
+  if test yes = "$with_gnu_ld"; then
     sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib'
   else
     sys_lib_search_path_spec='/usr/ccs/lib /usr/lib'
@@ -13698,7 +14246,7 @@
   version_type=linux # correct to gnu/linux during the next big refactor
   need_lib_prefix=no
   need_version=no
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
   shlibpath_var=LD_LIBRARY_PATH
   shlibpath_overrides_runpath=no
   hardcode_into_libs=yes
@@ -13706,8 +14254,8 @@
 
 uts4*)
   version_type=linux # correct to gnu/linux during the next big refactor
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-  soname_spec='${libname}${release}${shared_ext}$major'
+  library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+  soname_spec='$libname$release$shared_ext$major'
   shlibpath_var=LD_LIBRARY_PATH
   ;;
 
@@ -13717,20 +14265,35 @@
 esac
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $dynamic_linker" >&5
 $as_echo "$dynamic_linker" >&6; }
-test "$dynamic_linker" = no && can_build_shared=no
+test no = "$dynamic_linker" && can_build_shared=no
 
 variables_saved_for_relink="PATH $shlibpath_var $runpath_var"
-if test "$GCC" = yes; then
+if test yes = "$GCC"; then
   variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH"
 fi
 
-if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then
-  sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec"
+if test set = "${lt_cv_sys_lib_search_path_spec+set}"; then
+  sys_lib_search_path_spec=$lt_cv_sys_lib_search_path_spec
 fi
-if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then
-  sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec"
+
+if test set = "${lt_cv_sys_lib_dlsearch_path_spec+set}"; then
+  sys_lib_dlsearch_path_spec=$lt_cv_sys_lib_dlsearch_path_spec
 fi
 
+# remember unaugmented sys_lib_dlsearch_path content for libtool script decls...
+configure_time_dlsearch_path=$sys_lib_dlsearch_path_spec
+
+# ... but it needs LT_SYS_LIBRARY_PATH munging for other configure-time code
+func_munge_path_list sys_lib_dlsearch_path_spec "$LT_SYS_LIBRARY_PATH"
+
+# to be used as default LT_SYS_LIBRARY_PATH value in generated libtool
+configure_time_lt_sys_library_path=$LT_SYS_LIBRARY_PATH
+
+
+
+
+
+
 
 
 
@@ -13827,15 +14390,15 @@
 hardcode_action=
 if test -n "$hardcode_libdir_flag_spec" ||
    test -n "$runpath_var" ||
-   test "X$hardcode_automatic" = "Xyes" ; then
+   test yes = "$hardcode_automatic"; then
 
   # We can hardcode non-existent directories.
-  if test "$hardcode_direct" != no &&
+  if test no != "$hardcode_direct" &&
      # If the only mechanism to avoid hardcoding is shlibpath_var, we
      # have to relink, otherwise we might link with an installed library
      # when we should be linking with a yet-to-be-installed one
-     ## test "$_LT_TAGVAR(hardcode_shlibpath_var, )" != no &&
-     test "$hardcode_minus_L" != no; then
+     ## test no != "$_LT_TAGVAR(hardcode_shlibpath_var, )" &&
+     test no != "$hardcode_minus_L"; then
     # Linking always hardcodes the temporary library directory.
     hardcode_action=relink
   else
@@ -13850,12 +14413,12 @@
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hardcode_action" >&5
 $as_echo "$hardcode_action" >&6; }
 
-if test "$hardcode_action" = relink ||
-   test "$inherit_rpath" = yes; then
+if test relink = "$hardcode_action" ||
+   test yes = "$inherit_rpath"; then
   # Fast installation is not supported
   enable_fast_install=no
-elif test "$shlibpath_overrides_runpath" = yes ||
-     test "$enable_shared" = no; then
+elif test yes = "$shlibpath_overrides_runpath" ||
+     test no = "$enable_shared"; then
   # Fast installation is not necessary
   enable_fast_install=needless
 fi
@@ -13865,7 +14428,7 @@
 
 
 
-  if test "x$enable_dlopen" != xyes; then
+  if test yes != "$enable_dlopen"; then
   enable_dlopen=unknown
   enable_dlopen_self=unknown
   enable_dlopen_self_static=unknown
@@ -13875,23 +14438,23 @@
 
   case $host_os in
   beos*)
-    lt_cv_dlopen="load_add_on"
+    lt_cv_dlopen=load_add_on
     lt_cv_dlopen_libs=
     lt_cv_dlopen_self=yes
     ;;
 
   mingw* | pw32* | cegcc*)
-    lt_cv_dlopen="LoadLibrary"
+    lt_cv_dlopen=LoadLibrary
     lt_cv_dlopen_libs=
     ;;
 
   cygwin*)
-    lt_cv_dlopen="dlopen"
+    lt_cv_dlopen=dlopen
     lt_cv_dlopen_libs=
     ;;
 
   darwin*)
-  # if libdl is installed we need to link against it
+    # if libdl is installed we need to link against it
     { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5
 $as_echo_n "checking for dlopen in -ldl... " >&6; }
 if ${ac_cv_lib_dl_dlopen+:} false; then :
@@ -13929,10 +14492,10 @@
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5
 $as_echo "$ac_cv_lib_dl_dlopen" >&6; }
 if test "x$ac_cv_lib_dl_dlopen" = xyes; then :
-  lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"
+  lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-ldl
 else
 
-    lt_cv_dlopen="dyld"
+    lt_cv_dlopen=dyld
     lt_cv_dlopen_libs=
     lt_cv_dlopen_self=yes
 
@@ -13940,10 +14503,18 @@
 
     ;;
 
+  tpf*)
+    # Don't try to run any link tests for TPF.  We know it's impossible
+    # because TPF is a cross-compiler, and we know how we open DSOs.
+    lt_cv_dlopen=dlopen
+    lt_cv_dlopen_libs=
+    lt_cv_dlopen_self=no
+    ;;
+
   *)
     ac_fn_c_check_func "$LINENO" "shl_load" "ac_cv_func_shl_load"
 if test "x$ac_cv_func_shl_load" = xyes; then :
-  lt_cv_dlopen="shl_load"
+  lt_cv_dlopen=shl_load
 else
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for shl_load in -ldld" >&5
 $as_echo_n "checking for shl_load in -ldld... " >&6; }
@@ -13982,11 +14553,11 @@
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_shl_load" >&5
 $as_echo "$ac_cv_lib_dld_shl_load" >&6; }
 if test "x$ac_cv_lib_dld_shl_load" = xyes; then :
-  lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-ldld"
+  lt_cv_dlopen=shl_load lt_cv_dlopen_libs=-ldld
 else
   ac_fn_c_check_func "$LINENO" "dlopen" "ac_cv_func_dlopen"
 if test "x$ac_cv_func_dlopen" = xyes; then :
-  lt_cv_dlopen="dlopen"
+  lt_cv_dlopen=dlopen
 else
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5
 $as_echo_n "checking for dlopen in -ldl... " >&6; }
@@ -14025,7 +14596,7 @@
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5
 $as_echo "$ac_cv_lib_dl_dlopen" >&6; }
 if test "x$ac_cv_lib_dl_dlopen" = xyes; then :
-  lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"
+  lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-ldl
 else
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -lsvld" >&5
 $as_echo_n "checking for dlopen in -lsvld... " >&6; }
@@ -14064,7 +14635,7 @@
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_svld_dlopen" >&5
 $as_echo "$ac_cv_lib_svld_dlopen" >&6; }
 if test "x$ac_cv_lib_svld_dlopen" = xyes; then :
-  lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld"
+  lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-lsvld
 else
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dld_link in -ldld" >&5
 $as_echo_n "checking for dld_link in -ldld... " >&6; }
@@ -14103,7 +14674,7 @@
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_dld_link" >&5
 $as_echo "$ac_cv_lib_dld_dld_link" >&6; }
 if test "x$ac_cv_lib_dld_dld_link" = xyes; then :
-  lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-ldld"
+  lt_cv_dlopen=dld_link lt_cv_dlopen_libs=-ldld
 fi
 
 
@@ -14124,21 +14695,21 @@
     ;;
   esac
 
-  if test "x$lt_cv_dlopen" != xno; then
-    enable_dlopen=yes
-  else
+  if test no = "$lt_cv_dlopen"; then
     enable_dlopen=no
+  else
+    enable_dlopen=yes
   fi
 
   case $lt_cv_dlopen in
   dlopen)
-    save_CPPFLAGS="$CPPFLAGS"
-    test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H"
+    save_CPPFLAGS=$CPPFLAGS
+    test yes = "$ac_cv_header_dlfcn_h" && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H"
 
-    save_LDFLAGS="$LDFLAGS"
+    save_LDFLAGS=$LDFLAGS
     wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\"
 
-    save_LIBS="$LIBS"
+    save_LIBS=$LIBS
     LIBS="$lt_cv_dlopen_libs $LIBS"
 
     { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a program can dlopen itself" >&5
@@ -14146,7 +14717,7 @@
 if ${lt_cv_dlopen_self+:} false; then :
   $as_echo_n "(cached) " >&6
 else
-  	  if test "$cross_compiling" = yes; then :
+  	  if test yes = "$cross_compiling"; then :
   lt_cv_dlopen_self=cross
 else
   lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
@@ -14193,9 +14764,9 @@
 #  endif
 #endif
 
-/* When -fvisbility=hidden is used, assume the code has been annotated
+/* When -fvisibility=hidden is used, assume the code has been annotated
    correspondingly for the symbols needed.  */
-#if defined(__GNUC__) && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3))
+#if defined __GNUC__ && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3))
 int fnord () __attribute__((visibility("default")));
 #endif
 
@@ -14225,7 +14796,7 @@
   (eval $ac_link) 2>&5
   ac_status=$?
   $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; } && test -s conftest${ac_exeext} 2>/dev/null; then
+  test $ac_status = 0; } && test -s "conftest$ac_exeext" 2>/dev/null; then
     (./conftest; exit; ) >&5 2>/dev/null
     lt_status=$?
     case x$lt_status in
@@ -14245,14 +14816,14 @@
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self" >&5
 $as_echo "$lt_cv_dlopen_self" >&6; }
 
-    if test "x$lt_cv_dlopen_self" = xyes; then
+    if test yes = "$lt_cv_dlopen_self"; then
       wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\"
       { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a statically linked program can dlopen itself" >&5
 $as_echo_n "checking whether a statically linked program can dlopen itself... " >&6; }
 if ${lt_cv_dlopen_self_static+:} false; then :
   $as_echo_n "(cached) " >&6
 else
-  	  if test "$cross_compiling" = yes; then :
+  	  if test yes = "$cross_compiling"; then :
   lt_cv_dlopen_self_static=cross
 else
   lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
@@ -14299,9 +14870,9 @@
 #  endif
 #endif
 
-/* When -fvisbility=hidden is used, assume the code has been annotated
+/* When -fvisibility=hidden is used, assume the code has been annotated
    correspondingly for the symbols needed.  */
-#if defined(__GNUC__) && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3))
+#if defined __GNUC__ && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3))
 int fnord () __attribute__((visibility("default")));
 #endif
 
@@ -14331,7 +14902,7 @@
   (eval $ac_link) 2>&5
   ac_status=$?
   $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; } && test -s conftest${ac_exeext} 2>/dev/null; then
+  test $ac_status = 0; } && test -s "conftest$ac_exeext" 2>/dev/null; then
     (./conftest; exit; ) >&5 2>/dev/null
     lt_status=$?
     case x$lt_status in
@@ -14352,9 +14923,9 @@
 $as_echo "$lt_cv_dlopen_self_static" >&6; }
     fi
 
-    CPPFLAGS="$save_CPPFLAGS"
-    LDFLAGS="$save_LDFLAGS"
-    LIBS="$save_LIBS"
+    CPPFLAGS=$save_CPPFLAGS
+    LDFLAGS=$save_LDFLAGS
+    LIBS=$save_LIBS
     ;;
   esac
 
@@ -14398,7 +14969,7 @@
 # FIXME - insert some real tests, host_os isn't really good enough
   case $host_os in
   darwin*)
-    if test -n "$STRIP" ; then
+    if test -n "$STRIP"; then
       striplib="$STRIP -x"
       old_striplib="$STRIP -S"
       { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
@@ -14426,7 +14997,7 @@
 
 
 
-  # Report which library types will actually be built
+  # Report what library types will actually be built
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking if libtool supports shared libraries" >&5
 $as_echo_n "checking if libtool supports shared libraries... " >&6; }
   { $as_echo "$as_me:${as_lineno-$LINENO}: result: $can_build_shared" >&5
@@ -14434,13 +15005,13 @@
 
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build shared libraries" >&5
 $as_echo_n "checking whether to build shared libraries... " >&6; }
-  test "$can_build_shared" = "no" && enable_shared=no
+  test no = "$can_build_shared" && enable_shared=no
 
   # On AIX, shared libraries and static libraries use the same namespace, and
   # are all built from PIC.
   case $host_os in
   aix3*)
-    test "$enable_shared" = yes && enable_static=no
+    test yes = "$enable_shared" && enable_static=no
     if test -n "$RANLIB"; then
       archive_cmds="$archive_cmds~\$RANLIB \$lib"
       postinstall_cmds='$RANLIB $lib'
@@ -14448,8 +15019,12 @@
     ;;
 
   aix[4-9]*)
-    if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then
-      test "$enable_shared" = yes && enable_static=no
+    if test ia64 != "$host_cpu"; then
+      case $enable_shared,$with_aix_soname,$aix_use_runtimelinking in
+      yes,aix,yes) ;;			# shared object as lib.so file only
+      yes,svr4,*) ;;			# shared object as lib.so archive member only
+      yes,*) enable_static=no ;;	# shared object in lib.a archive as well
+      esac
     fi
     ;;
   esac
@@ -14459,7 +15034,7 @@
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build static libraries" >&5
 $as_echo_n "checking whether to build static libraries... " >&6; }
   # Make sure either enable_shared or enable_static is yes.
-  test "$enable_shared" = yes || enable_static=yes
+  test yes = "$enable_shared" || enable_static=yes
   { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_static" >&5
 $as_echo "$enable_static" >&6; }
 
@@ -14473,7 +15048,7 @@
 ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
 ac_compiler_gnu=$ac_cv_c_compiler_gnu
 
-CC="$lt_save_CC"
+CC=$lt_save_CC
 
 
 
@@ -14499,8 +15074,8 @@
 
 
 
-GST_REQ=1.6.3
-GSTPB_REQ=1.6.3
+GST_REQ=1.7.91
+GSTPB_REQ=1.7.91
 
 
 
@@ -16552,6 +17127,33 @@
 
 
 
+  # Check whether --enable-extra-check was given.
+if test "${enable_extra_check+set}" = set; then :
+  enableval=$enable_extra_check;
+      case "${enableval}" in
+        yes) EXTRA_CHECKS=yes ;;
+        no)  EXTRA_CHECKS=no ;;
+        *)   as_fn_error $? "bad value ${enableval} for --enable-extra-checks" "$LINENO" 5 ;;
+      esac
+
+else
+
+      if test "x`expr $PACKAGE_VERSION_MINOR % 2`" = "x1" -a "x`expr $PACKAGE_VERSION_MICRO '<' 90`" = "x1"; then
+        EXTRA_CHECKS=yes
+      else
+        EXTRA_CHECKS=no
+      fi
+
+fi
+
+
+    if test "x$EXTRA_CHECKS" = "xyes"; then
+
+$as_echo "#define GST_ENABLE_EXTRA_CHECKS 1" >>confdefs.h
+
+    fi
+
+
 
     # Check whether --enable-debug was given.
 if test "${enable_debug+set}" = set; then :
@@ -19468,15 +20070,15 @@
 
 func_stripname_cnf ()
 {
-  case ${2} in
-  .*) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%\\\\${2}\$%%"`;;
-  *)  func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%${2}\$%%"`;;
+  case $2 in
+  .*) func_stripname_result=`$ECHO "$3" | $SED "s%^$1%%; s%\\\\$2\$%%"`;;
+  *)  func_stripname_result=`$ECHO "$3" | $SED "s%^$1%%; s%$2\$%%"`;;
   esac
 } # func_stripname_cnf
 
-      if test -n "$CXX" && ( test "X$CXX" != "Xno" &&
-    ( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) ||
-    (test "X$CXX" != "Xg++"))) ; then
+      if test -n "$CXX" && ( test no != "$CXX" &&
+    ( (test g++ = "$CXX" && `g++ -v >/dev/null 2>&1` ) ||
+    (test g++ != "$CXX"))); then
   ac_ext=cpp
 ac_cpp='$CXXCPP $CPPFLAGS'
 ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
@@ -19655,7 +20257,7 @@
 # the CXX compiler isn't working.  Some variables (like enable_shared)
 # are currently assumed to apply to all compilers on this platform,
 # and will be corrupted by setting them based on a non-working compiler.
-if test "$_lt_caught_CXX_error" != yes; then
+if test yes != "$_lt_caught_CXX_error"; then
   # Code to be used in simple compile tests
   lt_simple_compile_test_code="int some_variable = 0;"
 
@@ -19716,46 +20318,39 @@
   CFLAGS=$CXXFLAGS
   compiler=$CC
   compiler_CXX=$CC
-  for cc_temp in $compiler""; do
-  case $cc_temp in
-    compile | *[\\/]compile | ccache | *[\\/]ccache ) ;;
-    distcc | *[\\/]distcc | purify | *[\\/]purify ) ;;
-    \-*) ;;
-    *) break;;
-  esac
-done
-cc_basename=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"`
+  func_cc_basename $compiler
+cc_basename=$func_cc_basename_result
 
 
   if test -n "$compiler"; then
     # We don't want -fno-exception when compiling C++ code, so set the
     # no_builtin_flag separately
-    if test "$GXX" = yes; then
+    if test yes = "$GXX"; then
       lt_prog_compiler_no_builtin_flag_CXX=' -fno-builtin'
     else
       lt_prog_compiler_no_builtin_flag_CXX=
     fi
 
-    if test "$GXX" = yes; then
+    if test yes = "$GXX"; then
       # Set up default GNU C++ configuration
 
 
 
 # Check whether --with-gnu-ld was given.
 if test "${with_gnu_ld+set}" = set; then :
-  withval=$with_gnu_ld; test "$withval" = no || with_gnu_ld=yes
+  withval=$with_gnu_ld; test no = "$withval" || with_gnu_ld=yes
 else
   with_gnu_ld=no
 fi
 
 ac_prog=ld
-if test "$GCC" = yes; then
+if test yes = "$GCC"; then
   # Check if gcc -print-prog-name=ld gives a path.
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5
 $as_echo_n "checking for ld used by $CC... " >&6; }
   case $host in
   *-*-mingw*)
-    # gcc leaves a trailing carriage return which upsets mingw
+    # gcc leaves a trailing carriage return, which upsets mingw
     ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;;
   *)
     ac_prog=`($CC -print-prog-name=ld) 2>&5` ;;
@@ -19769,7 +20364,7 @@
       while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do
 	ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"`
       done
-      test -z "$LD" && LD="$ac_prog"
+      test -z "$LD" && LD=$ac_prog
       ;;
   "")
     # If it fails, then pretend we aren't using GCC.
@@ -19780,7 +20375,7 @@
     with_gnu_ld=unknown
     ;;
   esac
-elif test "$with_gnu_ld" = yes; then
+elif test yes = "$with_gnu_ld"; then
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5
 $as_echo_n "checking for GNU ld... " >&6; }
 else
@@ -19791,32 +20386,32 @@
   $as_echo_n "(cached) " >&6
 else
   if test -z "$LD"; then
-  lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+  lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR
   for ac_dir in $PATH; do
-    IFS="$lt_save_ifs"
+    IFS=$lt_save_ifs
     test -z "$ac_dir" && ac_dir=.
     if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then
-      lt_cv_path_LD="$ac_dir/$ac_prog"
+      lt_cv_path_LD=$ac_dir/$ac_prog
       # Check to see if the program is GNU ld.  I'd rather use --version,
       # but apparently some variants of GNU ld only accept -v.
       # Break only if it was the GNU/non-GNU ld that we prefer.
       case `"$lt_cv_path_LD" -v 2>&1 </dev/null` in
       *GNU* | *'with BFD'*)
-	test "$with_gnu_ld" != no && break
+	test no != "$with_gnu_ld" && break
 	;;
       *)
-	test "$with_gnu_ld" != yes && break
+	test yes != "$with_gnu_ld" && break
 	;;
       esac
     fi
   done
-  IFS="$lt_save_ifs"
+  IFS=$lt_save_ifs
 else
-  lt_cv_path_LD="$LD" # Let the user override the test with a path.
+  lt_cv_path_LD=$LD # Let the user override the test with a path.
 fi
 fi
 
-LD="$lt_cv_path_LD"
+LD=$lt_cv_path_LD
 if test -n "$LD"; then
   { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LD" >&5
 $as_echo "$LD" >&6; }
@@ -19852,22 +20447,22 @@
 
       # Check if GNU C++ uses GNU ld as the underlying linker, since the
       # archiving commands below assume that GNU ld is being used.
-      if test "$with_gnu_ld" = yes; then
-        archive_cmds_CXX='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'
-        archive_expsym_cmds_CXX='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+      if test yes = "$with_gnu_ld"; then
+        archive_cmds_CXX='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib'
+        archive_expsym_cmds_CXX='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib'
 
-        hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir'
-        export_dynamic_flag_spec_CXX='${wl}--export-dynamic'
+        hardcode_libdir_flag_spec_CXX='$wl-rpath $wl$libdir'
+        export_dynamic_flag_spec_CXX='$wl--export-dynamic'
 
         # If archive_cmds runs LD, not CC, wlarc should be empty
         # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to
         #     investigate it a little bit more. (MM)
-        wlarc='${wl}'
+        wlarc='$wl'
 
         # ancient GNU ld didn't support --whole-archive et. al.
         if eval "`$CC -print-prog-name=ld` --help 2>&1" |
 	  $GREP 'no-whole-archive' > /dev/null; then
-          whole_archive_flag_spec_CXX="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
+          whole_archive_flag_spec_CXX=$wlarc'--whole-archive$convenience '$wlarc'--no-whole-archive'
         else
           whole_archive_flag_spec_CXX=
         fi
@@ -19904,18 +20499,30 @@
         ld_shlibs_CXX=no
         ;;
       aix[4-9]*)
-        if test "$host_cpu" = ia64; then
+        if test ia64 = "$host_cpu"; then
           # On IA64, the linker does run time linking by default, so we don't
           # have to do anything special.
           aix_use_runtimelinking=no
           exp_sym_flag='-Bexport'
-          no_entry_flag=""
+          no_entry_flag=
         else
           aix_use_runtimelinking=no
 
           # Test if we are trying to use run time linking or normal
           # AIX style linking. If -brtl is somewhere in LDFLAGS, we
-          # need to do runtime linking.
+          # have runtime linking enabled, and use it for executables.
+          # For shared libraries, we enable/disable runtime linking
+          # depending on the kind of the shared library created -
+          # when "with_aix_soname,aix_use_runtimelinking" is:
+          # "aix,no"   lib.a(lib.so.V) shared, rtl:no,  for executables
+          # "aix,yes"  lib.so          shared, rtl:yes, for executables
+          #            lib.a           static archive
+          # "both,no"  lib.so.V(shr.o) shared, rtl:yes
+          #            lib.a(lib.so.V) shared, rtl:no,  for executables
+          # "both,yes" lib.so.V(shr.o) shared, rtl:yes, for executables
+          #            lib.a(lib.so.V) shared, rtl:no
+          # "svr4,*"   lib.so.V(shr.o) shared, rtl:yes, for executables
+          #            lib.a           static archive
           case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*)
 	    for ld_flag in $LDFLAGS; do
 	      case $ld_flag in
@@ -19925,6 +20532,13 @@
 	        ;;
 	      esac
 	    done
+	    if test svr4,no = "$with_aix_soname,$aix_use_runtimelinking"; then
+	      # With aix-soname=svr4, we create the lib.so.V shared archives only,
+	      # so we don't have lib.a shared libs to link our executables.
+	      # We have to force runtime linking in this case.
+	      aix_use_runtimelinking=yes
+	      LDFLAGS="$LDFLAGS -Wl,-brtl"
+	    fi
 	    ;;
           esac
 
@@ -19943,13 +20557,21 @@
         hardcode_direct_absolute_CXX=yes
         hardcode_libdir_separator_CXX=':'
         link_all_deplibs_CXX=yes
-        file_list_spec_CXX='${wl}-f,'
+        file_list_spec_CXX='$wl-f,'
+        case $with_aix_soname,$aix_use_runtimelinking in
+        aix,*) ;;	# no import file
+        svr4,* | *,yes) # use import file
+          # The Import File defines what to hardcode.
+          hardcode_direct_CXX=no
+          hardcode_direct_absolute_CXX=no
+          ;;
+        esac
 
-        if test "$GXX" = yes; then
+        if test yes = "$GXX"; then
           case $host_os in aix4.[012]|aix4.[012].*)
           # We only want to do this on AIX 4.2 and lower, the check
           # below for broken collect2 doesn't work under 4.3+
-	  collect2name=`${CC} -print-prog-name=collect2`
+	  collect2name=`$CC -print-prog-name=collect2`
 	  if test -f "$collect2name" &&
 	     strings "$collect2name" | $GREP resolve_lib_name >/dev/null
 	  then
@@ -19967,36 +20589,44 @@
 	  fi
           esac
           shared_flag='-shared'
-	  if test "$aix_use_runtimelinking" = yes; then
-	    shared_flag="$shared_flag "'${wl}-G'
+	  if test yes = "$aix_use_runtimelinking"; then
+	    shared_flag=$shared_flag' $wl-G'
 	  fi
+	  # Need to ensure runtime linking is disabled for the traditional
+	  # shared library, or the linker may eventually find shared libraries
+	  # /with/ Import File - we do not want to mix them.
+	  shared_flag_aix='-shared'
+	  shared_flag_svr4='-shared $wl-G'
         else
           # not using gcc
-          if test "$host_cpu" = ia64; then
+          if test ia64 = "$host_cpu"; then
 	  # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release
 	  # chokes on -Wl,-G. The following line is correct:
 	  shared_flag='-G'
           else
-	    if test "$aix_use_runtimelinking" = yes; then
-	      shared_flag='${wl}-G'
+	    if test yes = "$aix_use_runtimelinking"; then
+	      shared_flag='$wl-G'
 	    else
-	      shared_flag='${wl}-bM:SRE'
+	      shared_flag='$wl-bM:SRE'
 	    fi
+	    shared_flag_aix='$wl-bM:SRE'
+	    shared_flag_svr4='$wl-G'
           fi
         fi
 
-        export_dynamic_flag_spec_CXX='${wl}-bexpall'
+        export_dynamic_flag_spec_CXX='$wl-bexpall'
         # It seems that -bexpall does not export symbols beginning with
         # underscore (_), so it is better to generate a list of symbols to
 	# export.
         always_export_symbols_CXX=yes
-        if test "$aix_use_runtimelinking" = yes; then
+	if test aix,yes = "$with_aix_soname,$aix_use_runtimelinking"; then
           # Warning - without using the other runtime loading flags (-brtl),
           # -berok will link without error, but may produce a broken library.
-          allow_undefined_flag_CXX='-berok'
+          # The "-G" linker flag allows undefined symbols.
+          no_undefined_flag_CXX='-bernotok'
           # Determine the default libpath from the value encoded in an empty
           # executable.
-          if test "${lt_cv_aix_libpath+set}" = set; then
+          if test set = "${lt_cv_aix_libpath+set}"; then
   aix_libpath=$lt_cv_aix_libpath
 else
   if ${lt_cv_aix_libpath__CXX+:} false; then :
@@ -20031,7 +20661,7 @@
 rm -f core conftest.err conftest.$ac_objext \
     conftest$ac_exeext conftest.$ac_ext
   if test -z "$lt_cv_aix_libpath__CXX"; then
-    lt_cv_aix_libpath__CXX="/usr/lib:/lib"
+    lt_cv_aix_libpath__CXX=/usr/lib:/lib
   fi
 
 fi
@@ -20039,18 +20669,18 @@
   aix_libpath=$lt_cv_aix_libpath__CXX
 fi
 
-          hardcode_libdir_flag_spec_CXX='${wl}-blibpath:$libdir:'"$aix_libpath"
+          hardcode_libdir_flag_spec_CXX='$wl-blibpath:$libdir:'"$aix_libpath"
 
-          archive_expsym_cmds_CXX='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag"
+          archive_expsym_cmds_CXX='$CC -o $output_objdir/$soname $libobjs $deplibs $wl'$no_entry_flag' $compiler_flags `if test -n "$allow_undefined_flag"; then func_echo_all "$wl$allow_undefined_flag"; else :; fi` $wl'$exp_sym_flag:\$export_symbols' '$shared_flag
         else
-          if test "$host_cpu" = ia64; then
-	    hardcode_libdir_flag_spec_CXX='${wl}-R $libdir:/usr/lib:/lib'
+          if test ia64 = "$host_cpu"; then
+	    hardcode_libdir_flag_spec_CXX='$wl-R $libdir:/usr/lib:/lib'
 	    allow_undefined_flag_CXX="-z nodefs"
-	    archive_expsym_cmds_CXX="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols"
+	    archive_expsym_cmds_CXX="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\$wl$no_entry_flag"' $compiler_flags $wl$allow_undefined_flag '"\$wl$exp_sym_flag:\$export_symbols"
           else
 	    # Determine the default libpath from the value encoded in an
 	    # empty executable.
-	    if test "${lt_cv_aix_libpath+set}" = set; then
+	    if test set = "${lt_cv_aix_libpath+set}"; then
   aix_libpath=$lt_cv_aix_libpath
 else
   if ${lt_cv_aix_libpath__CXX+:} false; then :
@@ -20085,7 +20715,7 @@
 rm -f core conftest.err conftest.$ac_objext \
     conftest$ac_exeext conftest.$ac_ext
   if test -z "$lt_cv_aix_libpath__CXX"; then
-    lt_cv_aix_libpath__CXX="/usr/lib:/lib"
+    lt_cv_aix_libpath__CXX=/usr/lib:/lib
   fi
 
 fi
@@ -20093,22 +20723,34 @@
   aix_libpath=$lt_cv_aix_libpath__CXX
 fi
 
-	    hardcode_libdir_flag_spec_CXX='${wl}-blibpath:$libdir:'"$aix_libpath"
+	    hardcode_libdir_flag_spec_CXX='$wl-blibpath:$libdir:'"$aix_libpath"
 	    # Warning - without using the other run time loading flags,
 	    # -berok will link without error, but may produce a broken library.
-	    no_undefined_flag_CXX=' ${wl}-bernotok'
-	    allow_undefined_flag_CXX=' ${wl}-berok'
-	    if test "$with_gnu_ld" = yes; then
+	    no_undefined_flag_CXX=' $wl-bernotok'
+	    allow_undefined_flag_CXX=' $wl-berok'
+	    if test yes = "$with_gnu_ld"; then
 	      # We only use this code for GNU lds that support --whole-archive.
-	      whole_archive_flag_spec_CXX='${wl}--whole-archive$convenience ${wl}--no-whole-archive'
+	      whole_archive_flag_spec_CXX='$wl--whole-archive$convenience $wl--no-whole-archive'
 	    else
 	      # Exported symbols can be pulled into shared objects from archives
 	      whole_archive_flag_spec_CXX='$convenience'
 	    fi
 	    archive_cmds_need_lc_CXX=yes
-	    # This is similar to how AIX traditionally builds its shared
-	    # libraries.
-	    archive_expsym_cmds_CXX="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname'
+	    archive_expsym_cmds_CXX='$RM -r $output_objdir/$realname.d~$MKDIR $output_objdir/$realname.d'
+	    # -brtl affects multiple linker settings, -berok does not and is overridden later
+	    compiler_flags_filtered='`func_echo_all "$compiler_flags " | $SED -e "s%-brtl\\([, ]\\)%-berok\\1%g"`'
+	    if test svr4 != "$with_aix_soname"; then
+	      # This is similar to how AIX traditionally builds its shared
+	      # libraries. Need -bnortl late, we may have -brtl in LDFLAGS.
+	      archive_expsym_cmds_CXX="$archive_expsym_cmds_CXX"'~$CC '$shared_flag_aix' -o $output_objdir/$realname.d/$soname $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$realname.d/$soname'
+	    fi
+	    if test aix != "$with_aix_soname"; then
+	      archive_expsym_cmds_CXX="$archive_expsym_cmds_CXX"'~$CC '$shared_flag_svr4' -o $output_objdir/$realname.d/$shared_archive_member_spec.o $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$STRIP -e $output_objdir/$realname.d/$shared_archive_member_spec.o~( func_echo_all "#! $soname($shared_archive_member_spec.o)"; if test shr_64 = "$shared_archive_member_spec"; then func_echo_all "# 64"; else func_echo_all "# 32"; fi; cat $export_symbols ) > $output_objdir/$realname.d/$shared_archive_member_spec.imp~$AR $AR_FLAGS $output_objdir/$soname $output_objdir/$realname.d/$shared_archive_member_spec.o $output_objdir/$realname.d/$shared_archive_member_spec.imp'
+	    else
+	      # used by -dlpreopen to get the symbols
+	      archive_expsym_cmds_CXX="$archive_expsym_cmds_CXX"'~$MV  $output_objdir/$realname.d/$soname $output_objdir'
+	    fi
+	    archive_expsym_cmds_CXX="$archive_expsym_cmds_CXX"'~$RM -r $output_objdir/$realname.d'
           fi
         fi
         ;;
@@ -20118,7 +20760,7 @@
 	  allow_undefined_flag_CXX=unsupported
 	  # Joseph Beckenbach <jrb3@best.com> says some releases of gcc
 	  # support --undefined.  This deserves some investigation.  FIXME
-	  archive_cmds_CXX='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+	  archive_cmds_CXX='$CC -nostart $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib'
 	else
 	  ld_shlibs_CXX=no
 	fi
@@ -20146,57 +20788,58 @@
 	  # Tell ltmain to make .lib files, not .a files.
 	  libext=lib
 	  # Tell ltmain to make .dll files, not .so files.
-	  shrext_cmds=".dll"
+	  shrext_cmds=.dll
 	  # FIXME: Setting linknames here is a bad hack.
-	  archive_cmds_CXX='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-dll~linknames='
-	  archive_expsym_cmds_CXX='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
-	      $SED -n -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' -e '1\\\!p' < $export_symbols > $output_objdir/$soname.exp;
-	    else
-	      $SED -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' < $export_symbols > $output_objdir/$soname.exp;
-	    fi~
-	    $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~
-	    linknames='
+	  archive_cmds_CXX='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~linknames='
+	  archive_expsym_cmds_CXX='if   test DEF = "`$SED -n     -e '\''s/^[	 ]*//'\''     -e '\''/^\(;.*\)*$/d'\''     -e '\''s/^\(EXPORTS\|LIBRARY\)\([	 ].*\)*$/DEF/p'\''     -e q     $export_symbols`" ; then
+              cp "$export_symbols" "$output_objdir/$soname.def";
+              echo "$tool_output_objdir$soname.def" > "$output_objdir/$soname.exp";
+            else
+              $SED -e '\''s/^/-link -EXPORT:/'\'' < $export_symbols > $output_objdir/$soname.exp;
+            fi~
+            $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~
+            linknames='
 	  # The linker will not automatically build a static lib if we build a DLL.
 	  # _LT_TAGVAR(old_archive_from_new_cmds, CXX)='true'
 	  enable_shared_with_static_runtimes_CXX=yes
 	  # Don't use ranlib
 	  old_postinstall_cmds_CXX='chmod 644 $oldlib'
 	  postlink_cmds_CXX='lt_outputfile="@OUTPUT@"~
-	    lt_tool_outputfile="@TOOL_OUTPUT@"~
-	    case $lt_outputfile in
-	      *.exe|*.EXE) ;;
-	      *)
-		lt_outputfile="$lt_outputfile.exe"
-		lt_tool_outputfile="$lt_tool_outputfile.exe"
-		;;
-	    esac~
-	    func_to_tool_file "$lt_outputfile"~
-	    if test "$MANIFEST_TOOL" != ":" && test -f "$lt_outputfile.manifest"; then
-	      $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1;
-	      $RM "$lt_outputfile.manifest";
-	    fi'
+            lt_tool_outputfile="@TOOL_OUTPUT@"~
+            case $lt_outputfile in
+              *.exe|*.EXE) ;;
+              *)
+                lt_outputfile=$lt_outputfile.exe
+                lt_tool_outputfile=$lt_tool_outputfile.exe
+                ;;
+            esac~
+            func_to_tool_file "$lt_outputfile"~
+            if test : != "$MANIFEST_TOOL" && test -f "$lt_outputfile.manifest"; then
+              $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1;
+              $RM "$lt_outputfile.manifest";
+            fi'
 	  ;;
 	*)
 	  # g++
 	  # _LT_TAGVAR(hardcode_libdir_flag_spec, CXX) is actually meaningless,
 	  # as there is no search path for DLLs.
 	  hardcode_libdir_flag_spec_CXX='-L$libdir'
-	  export_dynamic_flag_spec_CXX='${wl}--export-all-symbols'
+	  export_dynamic_flag_spec_CXX='$wl--export-all-symbols'
 	  allow_undefined_flag_CXX=unsupported
 	  always_export_symbols_CXX=no
 	  enable_shared_with_static_runtimes_CXX=yes
 
 	  if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then
-	    archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
-	    # If the export-symbols file already is a .def file (1st line
-	    # is EXPORTS), use it as is; otherwise, prepend...
-	    archive_expsym_cmds_CXX='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
-	      cp $export_symbols $output_objdir/$soname.def;
-	    else
-	      echo EXPORTS > $output_objdir/$soname.def;
-	      cat $export_symbols >> $output_objdir/$soname.def;
-	    fi~
-	    $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+	    archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+	    # If the export-symbols file already is a .def file, use it as
+	    # is; otherwise, prepend EXPORTS...
+	    archive_expsym_cmds_CXX='if   test DEF = "`$SED -n     -e '\''s/^[	 ]*//'\''     -e '\''/^\(;.*\)*$/d'\''     -e '\''s/^\(EXPORTS\|LIBRARY\)\([	 ].*\)*$/DEF/p'\''     -e q     $export_symbols`" ; then
+              cp $export_symbols $output_objdir/$soname.def;
+            else
+              echo EXPORTS > $output_objdir/$soname.def;
+              cat $export_symbols >> $output_objdir/$soname.def;
+            fi~
+            $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
 	  else
 	    ld_shlibs_CXX=no
 	  fi
@@ -20210,27 +20853,27 @@
   hardcode_direct_CXX=no
   hardcode_automatic_CXX=yes
   hardcode_shlibpath_var_CXX=unsupported
-  if test "$lt_cv_ld_force_load" = "yes"; then
-    whole_archive_flag_spec_CXX='`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience ${wl}-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`'
+  if test yes = "$lt_cv_ld_force_load"; then
+    whole_archive_flag_spec_CXX='`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience $wl-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`'
 
   else
     whole_archive_flag_spec_CXX=''
   fi
   link_all_deplibs_CXX=yes
-  allow_undefined_flag_CXX="$_lt_dar_allow_undefined"
+  allow_undefined_flag_CXX=$_lt_dar_allow_undefined
   case $cc_basename in
-     ifort*) _lt_dar_can_shared=yes ;;
+     ifort*|nagfor*) _lt_dar_can_shared=yes ;;
      *) _lt_dar_can_shared=$GCC ;;
   esac
-  if test "$_lt_dar_can_shared" = "yes"; then
+  if test yes = "$_lt_dar_can_shared"; then
     output_verbose_link_cmd=func_echo_all
-    archive_cmds_CXX="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}"
-    module_cmds_CXX="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}"
-    archive_expsym_cmds_CXX="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}"
-    module_expsym_cmds_CXX="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}"
-       if test "$lt_cv_apple_cc_single_mod" != "yes"; then
-      archive_cmds_CXX="\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dsymutil}"
-      archive_expsym_cmds_CXX="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dar_export_syms}${_lt_dsymutil}"
+    archive_cmds_CXX="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod$_lt_dsymutil"
+    module_cmds_CXX="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags$_lt_dsymutil"
+    archive_expsym_cmds_CXX="sed 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod$_lt_dar_export_syms$_lt_dsymutil"
+    module_expsym_cmds_CXX="sed -e 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags$_lt_dar_export_syms$_lt_dsymutil"
+       if test yes != "$lt_cv_apple_cc_single_mod"; then
+      archive_cmds_CXX="\$CC -r -keep_private_externs -nostdlib -o \$lib-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$lib-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring$_lt_dsymutil"
+      archive_expsym_cmds_CXX="sed 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC -r -keep_private_externs -nostdlib -o \$lib-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$lib-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring$_lt_dar_export_syms$_lt_dsymutil"
     fi
 
   else
@@ -20239,6 +20882,34 @@
 
 	;;
 
+      os2*)
+	hardcode_libdir_flag_spec_CXX='-L$libdir'
+	hardcode_minus_L_CXX=yes
+	allow_undefined_flag_CXX=unsupported
+	shrext_cmds=.dll
+	archive_cmds_CXX='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~
+	  $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~
+	  $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~
+	  $ECHO EXPORTS >> $output_objdir/$libname.def~
+	  emxexp $libobjs | $SED /"_DLL_InitTerm"/d >> $output_objdir/$libname.def~
+	  $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~
+	  emximp -o $lib $output_objdir/$libname.def'
+	archive_expsym_cmds_CXX='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~
+	  $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~
+	  $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~
+	  $ECHO EXPORTS >> $output_objdir/$libname.def~
+	  prefix_cmds="$SED"~
+	  if test EXPORTS = "`$SED 1q $export_symbols`"; then
+	    prefix_cmds="$prefix_cmds -e 1d";
+	  fi~
+	  prefix_cmds="$prefix_cmds -e \"s/^\(.*\)$/_\1/g\""~
+	  cat $export_symbols | $prefix_cmds >> $output_objdir/$libname.def~
+	  $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~
+	  emximp -o $lib $output_objdir/$libname.def'
+	old_archive_From_new_cmds_CXX='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def'
+	enable_shared_with_static_runtimes_CXX=yes
+	;;
+
       dgux*)
         case $cc_basename in
           ec++*)
@@ -20274,14 +20945,14 @@
         ;;
 
       haiku*)
-        archive_cmds_CXX='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+        archive_cmds_CXX='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib'
         link_all_deplibs_CXX=yes
         ;;
 
       hpux9*)
-        hardcode_libdir_flag_spec_CXX='${wl}+b ${wl}$libdir'
+        hardcode_libdir_flag_spec_CXX='$wl+b $wl$libdir'
         hardcode_libdir_separator_CXX=:
-        export_dynamic_flag_spec_CXX='${wl}-E'
+        export_dynamic_flag_spec_CXX='$wl-E'
         hardcode_direct_CXX=yes
         hardcode_minus_L_CXX=yes # Not in the search PATH,
 				             # but as the default
@@ -20293,7 +20964,7 @@
             ld_shlibs_CXX=no
             ;;
           aCC*)
-            archive_cmds_CXX='$RM $output_objdir/$soname~$CC -b ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+            archive_cmds_CXX='$RM $output_objdir/$soname~$CC -b $wl+b $wl$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test "x$output_objdir/$soname" = "x$lib" || mv $output_objdir/$soname $lib'
             # Commands to make compiler produce verbose output that lists
             # what "hidden" libraries, object files and flags are used when
             # linking a shared library.
@@ -20302,11 +20973,11 @@
             # explicitly linking system object files so we need to strip them
             # from the output so that they don't get included in the library
             # dependencies.
-            output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $EGREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"'
+            output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $EGREP "\-L"`; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"'
             ;;
           *)
-            if test "$GXX" = yes; then
-              archive_cmds_CXX='$RM $output_objdir/$soname~$CC -shared -nostdlib $pic_flag ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+            if test yes = "$GXX"; then
+              archive_cmds_CXX='$RM $output_objdir/$soname~$CC -shared -nostdlib $pic_flag $wl+b $wl$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test "x$output_objdir/$soname" = "x$lib" || mv $output_objdir/$soname $lib'
             else
               # FIXME: insert proper C++ library support
               ld_shlibs_CXX=no
@@ -20316,15 +20987,15 @@
         ;;
 
       hpux10*|hpux11*)
-        if test $with_gnu_ld = no; then
-	  hardcode_libdir_flag_spec_CXX='${wl}+b ${wl}$libdir'
+        if test no = "$with_gnu_ld"; then
+	  hardcode_libdir_flag_spec_CXX='$wl+b $wl$libdir'
 	  hardcode_libdir_separator_CXX=:
 
           case $host_cpu in
             hppa*64*|ia64*)
               ;;
             *)
-	      export_dynamic_flag_spec_CXX='${wl}-E'
+	      export_dynamic_flag_spec_CXX='$wl-E'
               ;;
           esac
         fi
@@ -20350,13 +21021,13 @@
           aCC*)
 	    case $host_cpu in
 	      hppa*64*)
-	        archive_cmds_CXX='$CC -b ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+	        archive_cmds_CXX='$CC -b $wl+h $wl$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
 	        ;;
 	      ia64*)
-	        archive_cmds_CXX='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+	        archive_cmds_CXX='$CC -b $wl+h $wl$soname $wl+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
 	        ;;
 	      *)
-	        archive_cmds_CXX='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+	        archive_cmds_CXX='$CC -b $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
 	        ;;
 	    esac
 	    # Commands to make compiler produce verbose output that lists
@@ -20367,20 +21038,20 @@
 	    # explicitly linking system object files so we need to strip them
 	    # from the output so that they don't get included in the library
 	    # dependencies.
-	    output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $GREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"'
+	    output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $GREP "\-L"`; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"'
 	    ;;
           *)
-	    if test "$GXX" = yes; then
-	      if test $with_gnu_ld = no; then
+	    if test yes = "$GXX"; then
+	      if test no = "$with_gnu_ld"; then
 	        case $host_cpu in
 	          hppa*64*)
-	            archive_cmds_CXX='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+	            archive_cmds_CXX='$CC -shared -nostdlib -fPIC $wl+h $wl$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
 	            ;;
 	          ia64*)
-	            archive_cmds_CXX='$CC -shared -nostdlib $pic_flag ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+	            archive_cmds_CXX='$CC -shared -nostdlib $pic_flag $wl+h $wl$soname $wl+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
 	            ;;
 	          *)
-	            archive_cmds_CXX='$CC -shared -nostdlib $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+	            archive_cmds_CXX='$CC -shared -nostdlib $pic_flag $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
 	            ;;
 	        esac
 	      fi
@@ -20395,22 +21066,22 @@
       interix[3-9]*)
 	hardcode_direct_CXX=no
 	hardcode_shlibpath_var_CXX=no
-	hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir'
-	export_dynamic_flag_spec_CXX='${wl}-E'
+	hardcode_libdir_flag_spec_CXX='$wl-rpath,$libdir'
+	export_dynamic_flag_spec_CXX='$wl-E'
 	# Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc.
 	# Instead, shared libraries are loaded at an image base (0x10000000 by
 	# default) and relocated if they conflict, which is a slow very memory
 	# consuming and fragmenting process.  To avoid this, we pick a random,
 	# 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link
 	# time.  Moving up from 0x10000000 also allows more sbrk(2) space.
-	archive_cmds_CXX='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
-	archive_expsym_cmds_CXX='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
+	archive_cmds_CXX='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
+	archive_expsym_cmds_CXX='sed "s|^|_|" $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--retain-symbols-file,$output_objdir/$soname.expsym $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
 	;;
       irix5* | irix6*)
         case $cc_basename in
           CC*)
 	    # SGI C++
-	    archive_cmds_CXX='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib'
+	    archive_cmds_CXX='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib'
 
 	    # Archives containing C++ object files must be created using
 	    # "CC -ar", where "CC" is the IRIX C++ compiler.  This is
@@ -20419,17 +21090,17 @@
 	    old_archive_cmds_CXX='$CC -ar -WR,-u -o $oldlib $oldobjs'
 	    ;;
           *)
-	    if test "$GXX" = yes; then
-	      if test "$with_gnu_ld" = no; then
-	        archive_cmds_CXX='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+	    if test yes = "$GXX"; then
+	      if test no = "$with_gnu_ld"; then
+	        archive_cmds_CXX='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib'
 	      else
-	        archive_cmds_CXX='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` -o $lib'
+	        archive_cmds_CXX='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` -o $lib'
 	      fi
 	    fi
 	    link_all_deplibs_CXX=yes
 	    ;;
         esac
-        hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir'
+        hardcode_libdir_flag_spec_CXX='$wl-rpath $wl$libdir'
         hardcode_libdir_separator_CXX=:
         inherit_rpath_CXX=yes
         ;;
@@ -20442,8 +21113,8 @@
 	    # KCC will only create a shared library if the output file
 	    # ends with ".so" (or ".sl" for HP-UX), so rename the library
 	    # to its proper name (with version) after linking.
-	    archive_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib'
-	    archive_expsym_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib ${wl}-retain-symbols-file,$export_symbols; mv \$templib $lib'
+	    archive_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\$tempext\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib'
+	    archive_expsym_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\$tempext\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib $wl-retain-symbols-file,$export_symbols; mv \$templib $lib'
 	    # Commands to make compiler produce verbose output that lists
 	    # what "hidden" libraries, object files and flags are used when
 	    # linking a shared library.
@@ -20452,10 +21123,10 @@
 	    # explicitly linking system object files so we need to strip them
 	    # from the output so that they don't get included in the library
 	    # dependencies.
-	    output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | $GREP "ld"`; rm -f libconftest$shared_ext; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"'
+	    output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | $GREP "ld"`; rm -f libconftest$shared_ext; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"'
 
-	    hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir'
-	    export_dynamic_flag_spec_CXX='${wl}--export-dynamic'
+	    hardcode_libdir_flag_spec_CXX='$wl-rpath,$libdir'
+	    export_dynamic_flag_spec_CXX='$wl--export-dynamic'
 
 	    # Archives containing C++ object files must be created using
 	    # "CC -Bstatic", where "CC" is the KAI C++ compiler.
@@ -20469,59 +21140,59 @@
 	    # earlier do not add the objects themselves.
 	    case `$CC -V 2>&1` in
 	      *"Version 7."*)
-	        archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'
-		archive_expsym_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+	        archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib'
+		archive_expsym_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib'
 		;;
 	      *)  # Version 8.0 or newer
 	        tmp_idyn=
 	        case $host_cpu in
 		  ia64*) tmp_idyn=' -i_dynamic';;
 		esac
-	        archive_cmds_CXX='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-		archive_expsym_cmds_CXX='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+	        archive_cmds_CXX='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib'
+		archive_expsym_cmds_CXX='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib'
 		;;
 	    esac
 	    archive_cmds_need_lc_CXX=no
-	    hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir'
-	    export_dynamic_flag_spec_CXX='${wl}--export-dynamic'
-	    whole_archive_flag_spec_CXX='${wl}--whole-archive$convenience ${wl}--no-whole-archive'
+	    hardcode_libdir_flag_spec_CXX='$wl-rpath,$libdir'
+	    export_dynamic_flag_spec_CXX='$wl--export-dynamic'
+	    whole_archive_flag_spec_CXX='$wl--whole-archive$convenience $wl--no-whole-archive'
 	    ;;
           pgCC* | pgcpp*)
             # Portland Group C++ compiler
 	    case `$CC -V` in
 	    *pgCC\ [1-5].* | *pgcpp\ [1-5].*)
 	      prelink_cmds_CXX='tpldir=Template.dir~
-		rm -rf $tpldir~
-		$CC --prelink_objects --instantiation_dir $tpldir $objs $libobjs $compile_deplibs~
-		compile_command="$compile_command `find $tpldir -name \*.o | sort | $NL2SP`"'
+               rm -rf $tpldir~
+               $CC --prelink_objects --instantiation_dir $tpldir $objs $libobjs $compile_deplibs~
+               compile_command="$compile_command `find $tpldir -name \*.o | sort | $NL2SP`"'
 	      old_archive_cmds_CXX='tpldir=Template.dir~
-		rm -rf $tpldir~
-		$CC --prelink_objects --instantiation_dir $tpldir $oldobjs$old_deplibs~
-		$AR $AR_FLAGS $oldlib$oldobjs$old_deplibs `find $tpldir -name \*.o | sort | $NL2SP`~
-		$RANLIB $oldlib'
+                rm -rf $tpldir~
+                $CC --prelink_objects --instantiation_dir $tpldir $oldobjs$old_deplibs~
+                $AR $AR_FLAGS $oldlib$oldobjs$old_deplibs `find $tpldir -name \*.o | sort | $NL2SP`~
+                $RANLIB $oldlib'
 	      archive_cmds_CXX='tpldir=Template.dir~
-		rm -rf $tpldir~
-		$CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~
-		$CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib'
+                rm -rf $tpldir~
+                $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~
+                $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib'
 	      archive_expsym_cmds_CXX='tpldir=Template.dir~
-		rm -rf $tpldir~
-		$CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~
-		$CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib'
+                rm -rf $tpldir~
+                $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~
+                $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib'
 	      ;;
 	    *) # Version 6 and above use weak symbols
-	      archive_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib'
-	      archive_expsym_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib'
+	      archive_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib'
+	      archive_expsym_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib'
 	      ;;
 	    esac
 
-	    hardcode_libdir_flag_spec_CXX='${wl}--rpath ${wl}$libdir'
-	    export_dynamic_flag_spec_CXX='${wl}--export-dynamic'
-	    whole_archive_flag_spec_CXX='${wl}--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive'
+	    hardcode_libdir_flag_spec_CXX='$wl--rpath $wl$libdir'
+	    export_dynamic_flag_spec_CXX='$wl--export-dynamic'
+	    whole_archive_flag_spec_CXX='$wl--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive'
             ;;
 	  cxx*)
 	    # Compaq C++
-	    archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'
-	    archive_expsym_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname  -o $lib ${wl}-retain-symbols-file $wl$export_symbols'
+	    archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib'
+	    archive_expsym_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname  -o $lib $wl-retain-symbols-file $wl$export_symbols'
 
 	    runpath_var=LD_RUN_PATH
 	    hardcode_libdir_flag_spec_CXX='-rpath $libdir'
@@ -20535,18 +21206,18 @@
 	    # explicitly linking system object files so we need to strip them
 	    # from the output so that they don't get included in the library
 	    # dependencies.
-	    output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "X$list" | $Xsed'
+	    output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "X$list" | $Xsed'
 	    ;;
 	  xl* | mpixl* | bgxl*)
 	    # IBM XL 8.0 on PPC, with GNU ld
-	    hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir'
-	    export_dynamic_flag_spec_CXX='${wl}--export-dynamic'
-	    archive_cmds_CXX='$CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-	    if test "x$supports_anon_versioning" = xyes; then
+	    hardcode_libdir_flag_spec_CXX='$wl-rpath $wl$libdir'
+	    export_dynamic_flag_spec_CXX='$wl--export-dynamic'
+	    archive_cmds_CXX='$CC -qmkshrobj $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib'
+	    if test yes = "$supports_anon_versioning"; then
 	      archive_expsym_cmds_CXX='echo "{ global:" > $output_objdir/$libname.ver~
-		cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
-		echo "local: *; };" >> $output_objdir/$libname.ver~
-		$CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib'
+                cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
+                echo "local: *; };" >> $output_objdir/$libname.ver~
+                $CC -qmkshrobj $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-version-script $wl$output_objdir/$libname.ver -o $lib'
 	    fi
 	    ;;
 	  *)
@@ -20554,10 +21225,10 @@
 	    *Sun\ C*)
 	      # Sun C++ 5.9
 	      no_undefined_flag_CXX=' -zdefs'
-	      archive_cmds_CXX='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
-	      archive_expsym_cmds_CXX='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file ${wl}$export_symbols'
+	      archive_cmds_CXX='$CC -G$allow_undefined_flag -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+	      archive_expsym_cmds_CXX='$CC -G$allow_undefined_flag -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-retain-symbols-file $wl$export_symbols'
 	      hardcode_libdir_flag_spec_CXX='-R$libdir'
-	      whole_archive_flag_spec_CXX='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive'
+	      whole_archive_flag_spec_CXX='$wl--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive'
 	      compiler_needs_object_CXX=yes
 
 	      # Not sure whether something based on
@@ -20615,22 +21286,17 @@
         ld_shlibs_CXX=yes
 	;;
 
-      openbsd2*)
-        # C++ shared libraries are fairly broken
-	ld_shlibs_CXX=no
-	;;
-
-      openbsd*)
+      openbsd* | bitrig*)
 	if test -f /usr/libexec/ld.so; then
 	  hardcode_direct_CXX=yes
 	  hardcode_shlibpath_var_CXX=no
 	  hardcode_direct_absolute_CXX=yes
 	  archive_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib'
-	  hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir'
-	  if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
-	    archive_expsym_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file,$export_symbols -o $lib'
-	    export_dynamic_flag_spec_CXX='${wl}-E'
-	    whole_archive_flag_spec_CXX="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
+	  hardcode_libdir_flag_spec_CXX='$wl-rpath,$libdir'
+	  if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`"; then
+	    archive_expsym_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-retain-symbols-file,$export_symbols -o $lib'
+	    export_dynamic_flag_spec_CXX='$wl-E'
+	    whole_archive_flag_spec_CXX=$wlarc'--whole-archive$convenience '$wlarc'--no-whole-archive'
 	  fi
 	  output_verbose_link_cmd=func_echo_all
 	else
@@ -20646,9 +21312,9 @@
 	    # KCC will only create a shared library if the output file
 	    # ends with ".so" (or ".sl" for HP-UX), so rename the library
 	    # to its proper name (with version) after linking.
-	    archive_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo "$lib" | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib'
+	    archive_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo "$lib" | $SED -e "s/\$tempext\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib'
 
-	    hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir'
+	    hardcode_libdir_flag_spec_CXX='$wl-rpath,$libdir'
 	    hardcode_libdir_separator_CXX=:
 
 	    # Archives containing C++ object files must be created using
@@ -20666,17 +21332,17 @@
           cxx*)
 	    case $host in
 	      osf3*)
-	        allow_undefined_flag_CXX=' ${wl}-expect_unresolved ${wl}\*'
-	        archive_cmds_CXX='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $soname `test -n "$verstring" && func_echo_all "${wl}-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib'
-	        hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir'
+	        allow_undefined_flag_CXX=' $wl-expect_unresolved $wl\*'
+	        archive_cmds_CXX='$CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $soname `test -n "$verstring" && func_echo_all "$wl-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib'
+	        hardcode_libdir_flag_spec_CXX='$wl-rpath $wl$libdir'
 		;;
 	      *)
 	        allow_undefined_flag_CXX=' -expect_unresolved \*'
-	        archive_cmds_CXX='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib'
+	        archive_cmds_CXX='$CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib'
 	        archive_expsym_cmds_CXX='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~
-	          echo "-hidden">> $lib.exp~
-	          $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname ${wl}-input ${wl}$lib.exp  `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib~
-	          $RM $lib.exp'
+                  echo "-hidden">> $lib.exp~
+                  $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname $wl-input $wl$lib.exp  `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib~
+                  $RM $lib.exp'
 	        hardcode_libdir_flag_spec_CXX='-rpath $libdir'
 		;;
 	    esac
@@ -20691,21 +21357,21 @@
 	    # explicitly linking system object files so we need to strip them
 	    # from the output so that they don't get included in the library
 	    # dependencies.
-	    output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld" | $GREP -v "ld:"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"'
+	    output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld" | $GREP -v "ld:"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"'
 	    ;;
 	  *)
-	    if test "$GXX" = yes && test "$with_gnu_ld" = no; then
-	      allow_undefined_flag_CXX=' ${wl}-expect_unresolved ${wl}\*'
+	    if test yes,no = "$GXX,$with_gnu_ld"; then
+	      allow_undefined_flag_CXX=' $wl-expect_unresolved $wl\*'
 	      case $host in
 	        osf3*)
-	          archive_cmds_CXX='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+	          archive_cmds_CXX='$CC -shared -nostdlib $allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib'
 		  ;;
 	        *)
-	          archive_cmds_CXX='$CC -shared $pic_flag -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+	          archive_cmds_CXX='$CC -shared $pic_flag -nostdlib $allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-msym $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib'
 		  ;;
 	      esac
 
-	      hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir'
+	      hardcode_libdir_flag_spec_CXX='$wl-rpath $wl$libdir'
 	      hardcode_libdir_separator_CXX=:
 
 	      # Commands to make compiler produce verbose output that lists
@@ -20751,9 +21417,9 @@
 	    # Sun C++ 4.2, 5.x and Centerline C++
             archive_cmds_need_lc_CXX=yes
 	    no_undefined_flag_CXX=' -zdefs'
-	    archive_cmds_CXX='$CC -G${allow_undefined_flag}  -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+	    archive_cmds_CXX='$CC -G$allow_undefined_flag -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
 	    archive_expsym_cmds_CXX='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
-	      $CC -G${allow_undefined_flag} ${wl}-M ${wl}$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp'
+              $CC -G$allow_undefined_flag $wl-M $wl$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp'
 
 	    hardcode_libdir_flag_spec_CXX='-R$libdir'
 	    hardcode_shlibpath_var_CXX=no
@@ -20761,7 +21427,7 @@
 	      solaris2.[0-5] | solaris2.[0-5].*) ;;
 	      *)
 		# The compiler driver will combine and reorder linker options,
-		# but understands `-z linker_flag'.
+		# but understands '-z linker_flag'.
 	        # Supported since Solaris 2.6 (maybe 2.5.1?)
 		whole_archive_flag_spec_CXX='-z allextract$convenience -z defaultextract'
 	        ;;
@@ -20778,30 +21444,30 @@
 	    ;;
           gcx*)
 	    # Green Hills C++ Compiler
-	    archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'
+	    archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-h $wl$soname -o $lib'
 
 	    # The C++ compiler must be used to create the archive.
 	    old_archive_cmds_CXX='$CC $LDFLAGS -archive -o $oldlib $oldobjs'
 	    ;;
           *)
 	    # GNU C++ compiler with Solaris linker
-	    if test "$GXX" = yes && test "$with_gnu_ld" = no; then
-	      no_undefined_flag_CXX=' ${wl}-z ${wl}defs'
+	    if test yes,no = "$GXX,$with_gnu_ld"; then
+	      no_undefined_flag_CXX=' $wl-z ${wl}defs'
 	      if $CC --version | $GREP -v '^2\.7' > /dev/null; then
-	        archive_cmds_CXX='$CC -shared $pic_flag -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'
+	        archive_cmds_CXX='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-h $wl$soname -o $lib'
 	        archive_expsym_cmds_CXX='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
-		  $CC -shared $pic_flag -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp'
+                  $CC -shared $pic_flag -nostdlib $wl-M $wl$lib.exp $wl-h $wl$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp'
 
 	        # Commands to make compiler produce verbose output that lists
 	        # what "hidden" libraries, object files and flags are used when
 	        # linking a shared library.
 	        output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"'
 	      else
-	        # g++ 2.7 appears to require `-G' NOT `-shared' on this
+	        # g++ 2.7 appears to require '-G' NOT '-shared' on this
 	        # platform.
-	        archive_cmds_CXX='$CC -G -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'
+	        archive_cmds_CXX='$CC -G -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-h $wl$soname -o $lib'
 	        archive_expsym_cmds_CXX='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
-		  $CC -G -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp'
+                  $CC -G -nostdlib $wl-M $wl$lib.exp $wl-h $wl$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp'
 
 	        # Commands to make compiler produce verbose output that lists
 	        # what "hidden" libraries, object files and flags are used when
@@ -20809,11 +21475,11 @@
 	        output_verbose_link_cmd='$CC -G $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"'
 	      fi
 
-	      hardcode_libdir_flag_spec_CXX='${wl}-R $wl$libdir'
+	      hardcode_libdir_flag_spec_CXX='$wl-R $wl$libdir'
 	      case $host_os in
 		solaris2.[0-5] | solaris2.[0-5].*) ;;
 		*)
-		  whole_archive_flag_spec_CXX='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract'
+		  whole_archive_flag_spec_CXX='$wl-z ${wl}allextract$convenience $wl-z ${wl}defaultextract'
 		  ;;
 	      esac
 	    fi
@@ -20822,52 +21488,52 @@
         ;;
 
     sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*)
-      no_undefined_flag_CXX='${wl}-z,text'
+      no_undefined_flag_CXX='$wl-z,text'
       archive_cmds_need_lc_CXX=no
       hardcode_shlibpath_var_CXX=no
       runpath_var='LD_RUN_PATH'
 
       case $cc_basename in
         CC*)
-	  archive_cmds_CXX='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
-	  archive_expsym_cmds_CXX='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+	  archive_cmds_CXX='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+	  archive_expsym_cmds_CXX='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
 	  ;;
 	*)
-	  archive_cmds_CXX='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
-	  archive_expsym_cmds_CXX='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+	  archive_cmds_CXX='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+	  archive_expsym_cmds_CXX='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
 	  ;;
       esac
       ;;
 
       sysv5* | sco3.2v5* | sco5v6*)
-	# Note: We can NOT use -z defs as we might desire, because we do not
+	# Note: We CANNOT use -z defs as we might desire, because we do not
 	# link with -lc, and that would cause any symbols used from libc to
 	# always be unresolved, which means just about no library would
 	# ever link correctly.  If we're not using GNU ld we use -z text
 	# though, which does catch some bad symbols but isn't as heavy-handed
 	# as -z defs.
-	no_undefined_flag_CXX='${wl}-z,text'
-	allow_undefined_flag_CXX='${wl}-z,nodefs'
+	no_undefined_flag_CXX='$wl-z,text'
+	allow_undefined_flag_CXX='$wl-z,nodefs'
 	archive_cmds_need_lc_CXX=no
 	hardcode_shlibpath_var_CXX=no
-	hardcode_libdir_flag_spec_CXX='${wl}-R,$libdir'
+	hardcode_libdir_flag_spec_CXX='$wl-R,$libdir'
 	hardcode_libdir_separator_CXX=':'
 	link_all_deplibs_CXX=yes
-	export_dynamic_flag_spec_CXX='${wl}-Bexport'
+	export_dynamic_flag_spec_CXX='$wl-Bexport'
 	runpath_var='LD_RUN_PATH'
 
 	case $cc_basename in
           CC*)
-	    archive_cmds_CXX='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
-	    archive_expsym_cmds_CXX='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+	    archive_cmds_CXX='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+	    archive_expsym_cmds_CXX='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
 	    old_archive_cmds_CXX='$CC -Tprelink_objects $oldobjs~
-	      '"$old_archive_cmds_CXX"
+              '"$old_archive_cmds_CXX"
 	    reload_cmds_CXX='$CC -Tprelink_objects $reload_objs~
-	      '"$reload_cmds_CXX"
+              '"$reload_cmds_CXX"
 	    ;;
 	  *)
-	    archive_cmds_CXX='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
-	    archive_expsym_cmds_CXX='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+	    archive_cmds_CXX='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+	    archive_expsym_cmds_CXX='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
 	    ;;
 	esac
       ;;
@@ -20899,10 +21565,10 @@
 
     { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs_CXX" >&5
 $as_echo "$ld_shlibs_CXX" >&6; }
-    test "$ld_shlibs_CXX" = no && can_build_shared=no
+    test no = "$ld_shlibs_CXX" && can_build_shared=no
 
-    GCC_CXX="$GXX"
-    LD_CXX="$LD"
+    GCC_CXX=$GXX
+    LD_CXX=$LD
 
     ## CAVEAT EMPTOR:
     ## There is no encapsulation within the following macros, do not change
@@ -20946,13 +21612,13 @@
   pre_test_object_deps_done=no
 
   for p in `eval "$output_verbose_link_cmd"`; do
-    case ${prev}${p} in
+    case $prev$p in
 
     -L* | -R* | -l*)
        # Some compilers place space between "-{L,R}" and the path.
        # Remove the space.
-       if test $p = "-L" ||
-          test $p = "-R"; then
+       if test x-L = "$p" ||
+          test x-R = "$p"; then
 	 prev=$p
 	 continue
        fi
@@ -20968,16 +21634,16 @@
        case $p in
        =*) func_stripname_cnf '=' '' "$p"; p=$lt_sysroot$func_stripname_result ;;
        esac
-       if test "$pre_test_object_deps_done" = no; then
-	 case ${prev} in
+       if test no = "$pre_test_object_deps_done"; then
+	 case $prev in
 	 -L | -R)
 	   # Internal compiler library paths should come after those
 	   # provided the user.  The postdeps already come after the
 	   # user supplied libs so there is no need to process them.
 	   if test -z "$compiler_lib_search_path_CXX"; then
-	     compiler_lib_search_path_CXX="${prev}${p}"
+	     compiler_lib_search_path_CXX=$prev$p
 	   else
-	     compiler_lib_search_path_CXX="${compiler_lib_search_path_CXX} ${prev}${p}"
+	     compiler_lib_search_path_CXX="${compiler_lib_search_path_CXX} $prev$p"
 	   fi
 	   ;;
 	 # The "-l" case would never come before the object being
@@ -20985,9 +21651,9 @@
 	 esac
        else
 	 if test -z "$postdeps_CXX"; then
-	   postdeps_CXX="${prev}${p}"
+	   postdeps_CXX=$prev$p
 	 else
-	   postdeps_CXX="${postdeps_CXX} ${prev}${p}"
+	   postdeps_CXX="${postdeps_CXX} $prev$p"
 	 fi
        fi
        prev=
@@ -21002,15 +21668,15 @@
 	 continue
        fi
 
-       if test "$pre_test_object_deps_done" = no; then
+       if test no = "$pre_test_object_deps_done"; then
 	 if test -z "$predep_objects_CXX"; then
-	   predep_objects_CXX="$p"
+	   predep_objects_CXX=$p
 	 else
 	   predep_objects_CXX="$predep_objects_CXX $p"
 	 fi
        else
 	 if test -z "$postdep_objects_CXX"; then
-	   postdep_objects_CXX="$p"
+	   postdep_objects_CXX=$p
 	 else
 	   postdep_objects_CXX="$postdep_objects_CXX $p"
 	 fi
@@ -21040,51 +21706,6 @@
   postdep_objects_CXX=
   postdeps_CXX=
   ;;
-
-linux*)
-  case `$CC -V 2>&1 | sed 5q` in
-  *Sun\ C*)
-    # Sun C++ 5.9
-
-    # The more standards-conforming stlport4 library is
-    # incompatible with the Cstd library. Avoid specifying
-    # it if it's in CXXFLAGS. Ignore libCrun as
-    # -library=stlport4 depends on it.
-    case " $CXX $CXXFLAGS " in
-    *" -library=stlport4 "*)
-      solaris_use_stlport4=yes
-      ;;
-    esac
-
-    if test "$solaris_use_stlport4" != yes; then
-      postdeps_CXX='-library=Cstd -library=Crun'
-    fi
-    ;;
-  esac
-  ;;
-
-solaris*)
-  case $cc_basename in
-  CC* | sunCC*)
-    # The more standards-conforming stlport4 library is
-    # incompatible with the Cstd library. Avoid specifying
-    # it if it's in CXXFLAGS. Ignore libCrun as
-    # -library=stlport4 depends on it.
-    case " $CXX $CXXFLAGS " in
-    *" -library=stlport4 "*)
-      solaris_use_stlport4=yes
-      ;;
-    esac
-
-    # Adding this requires a known-good setup of shared libraries for
-    # Sun compiler versions before 5.6, else PIC objects from an old
-    # archive will be linked into the output, leading to subtle bugs.
-    if test "$solaris_use_stlport4" != yes; then
-      postdeps_CXX='-library=Cstd -library=Crun'
-    fi
-    ;;
-  esac
-  ;;
 esac
 
 
@@ -21093,7 +21714,7 @@
 esac
  compiler_lib_search_dirs_CXX=
 if test -n "${compiler_lib_search_path_CXX}"; then
- compiler_lib_search_dirs_CXX=`echo " ${compiler_lib_search_path_CXX}" | ${SED} -e 's! -L! !g' -e 's!^ !!'`
+ compiler_lib_search_dirs_CXX=`echo " ${compiler_lib_search_path_CXX}" | $SED -e 's! -L! !g' -e 's!^ !!'`
 fi
 
 
@@ -21132,17 +21753,18 @@
 
 
   # C++ specific cases for pic, static, wl, etc.
-  if test "$GXX" = yes; then
+  if test yes = "$GXX"; then
     lt_prog_compiler_wl_CXX='-Wl,'
     lt_prog_compiler_static_CXX='-static'
 
     case $host_os in
     aix*)
       # All AIX code is PIC.
-      if test "$host_cpu" = ia64; then
+      if test ia64 = "$host_cpu"; then
 	# AIX 5 now supports IA64 processor
 	lt_prog_compiler_static_CXX='-Bstatic'
       fi
+      lt_prog_compiler_pic_CXX='-fPIC'
       ;;
 
     amigaos*)
@@ -21153,8 +21775,8 @@
         ;;
       m68k)
             # FIXME: we need at least 68020 code to build shared libraries, but
-            # adding the `-m68020' flag to GCC prevents building anything better,
-            # like `-m68040'.
+            # adding the '-m68020' flag to GCC prevents building anything better,
+            # like '-m68040'.
             lt_prog_compiler_pic_CXX='-m68020 -resident32 -malways-restore-a4'
         ;;
       esac
@@ -21169,6 +21791,11 @@
       # Although the cygwin gcc ignores -fPIC, still need this for old-style
       # (--disable-auto-import) libraries
       lt_prog_compiler_pic_CXX='-DDLL_EXPORT'
+      case $host_os in
+      os2*)
+	lt_prog_compiler_static_CXX='$wl-static'
+	;;
+      esac
       ;;
     darwin* | rhapsody*)
       # PIC is the default on this platform
@@ -21218,7 +21845,7 @@
     case $host_os in
       aix[4-9]*)
 	# All AIX code is PIC.
-	if test "$host_cpu" = ia64; then
+	if test ia64 = "$host_cpu"; then
 	  # AIX 5 now supports IA64 processor
 	  lt_prog_compiler_static_CXX='-Bstatic'
 	else
@@ -21258,14 +21885,14 @@
 	case $cc_basename in
 	  CC*)
 	    lt_prog_compiler_wl_CXX='-Wl,'
-	    lt_prog_compiler_static_CXX='${wl}-a ${wl}archive'
-	    if test "$host_cpu" != ia64; then
+	    lt_prog_compiler_static_CXX='$wl-a ${wl}archive'
+	    if test ia64 != "$host_cpu"; then
 	      lt_prog_compiler_pic_CXX='+Z'
 	    fi
 	    ;;
 	  aCC*)
 	    lt_prog_compiler_wl_CXX='-Wl,'
-	    lt_prog_compiler_static_CXX='${wl}-a ${wl}archive'
+	    lt_prog_compiler_static_CXX='$wl-a ${wl}archive'
 	    case $host_cpu in
 	    hppa*64*|ia64*)
 	      # +Z the default
@@ -21302,7 +21929,7 @@
 	    lt_prog_compiler_pic_CXX='-fPIC'
 	    ;;
 	  ecpc* )
-	    # old Intel C++ for x86_64 which still supported -KPIC.
+	    # old Intel C++ for x86_64, which still supported -KPIC.
 	    lt_prog_compiler_wl_CXX='-Wl,'
 	    lt_prog_compiler_pic_CXX='-KPIC'
 	    lt_prog_compiler_static_CXX='-static'
@@ -21447,7 +22074,7 @@
   fi
 
 case $host_os in
-  # For platforms which do not support PIC, -DPIC is meaningless:
+  # For platforms that do not support PIC, -DPIC is meaningless:
   *djgpp*)
     lt_prog_compiler_pic_CXX=
     ;;
@@ -21479,7 +22106,7 @@
   lt_cv_prog_compiler_pic_works_CXX=no
    ac_outfile=conftest.$ac_objext
    echo "$lt_simple_compile_test_code" > conftest.$ac_ext
-   lt_compiler_flag="$lt_prog_compiler_pic_CXX -DPIC"
+   lt_compiler_flag="$lt_prog_compiler_pic_CXX -DPIC"  ## exclude from sc_useless_quotes_in_assignment
    # Insert the option either (1) after the last *FLAGS variable, or
    # (2) before a word containing "conftest.", or (3) at the end.
    # Note that $ac_compile itself does not contain backslashes and begins
@@ -21509,7 +22136,7 @@
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_works_CXX" >&5
 $as_echo "$lt_cv_prog_compiler_pic_works_CXX" >&6; }
 
-if test x"$lt_cv_prog_compiler_pic_works_CXX" = xyes; then
+if test yes = "$lt_cv_prog_compiler_pic_works_CXX"; then
     case $lt_prog_compiler_pic_CXX in
      "" | " "*) ;;
      *) lt_prog_compiler_pic_CXX=" $lt_prog_compiler_pic_CXX" ;;
@@ -21535,7 +22162,7 @@
   $as_echo_n "(cached) " >&6
 else
   lt_cv_prog_compiler_static_works_CXX=no
-   save_LDFLAGS="$LDFLAGS"
+   save_LDFLAGS=$LDFLAGS
    LDFLAGS="$LDFLAGS $lt_tmp_static_flag"
    echo "$lt_simple_link_test_code" > conftest.$ac_ext
    if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then
@@ -21554,13 +22181,13 @@
      fi
    fi
    $RM -r conftest*
-   LDFLAGS="$save_LDFLAGS"
+   LDFLAGS=$save_LDFLAGS
 
 fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_static_works_CXX" >&5
 $as_echo "$lt_cv_prog_compiler_static_works_CXX" >&6; }
 
-if test x"$lt_cv_prog_compiler_static_works_CXX" = xyes; then
+if test yes = "$lt_cv_prog_compiler_static_works_CXX"; then
     :
 else
     lt_prog_compiler_static_CXX=
@@ -21674,8 +22301,8 @@
 
 
 
-hard_links="nottested"
-if test "$lt_cv_prog_compiler_c_o_CXX" = no && test "$need_locks" != no; then
+hard_links=nottested
+if test no = "$lt_cv_prog_compiler_c_o_CXX" && test no != "$need_locks"; then
   # do not overwrite the value of need_locks provided by the user
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can lock with hard links" >&5
 $as_echo_n "checking if we can lock with hard links... " >&6; }
@@ -21687,9 +22314,9 @@
   ln conftest.a conftest.b 2>/dev/null && hard_links=no
   { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hard_links" >&5
 $as_echo "$hard_links" >&6; }
-  if test "$hard_links" = no; then
-    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5
-$as_echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;}
+  if test no = "$hard_links"; then
+    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: '$CC' does not support '-c -o', so 'make -j' may be unsafe" >&5
+$as_echo "$as_me: WARNING: '$CC' does not support '-c -o', so 'make -j' may be unsafe" >&2;}
     need_locks=warn
   fi
 else
@@ -21706,17 +22333,21 @@
   case $host_os in
   aix[4-9]*)
     # If we're using GNU nm, then we don't want the "-C" option.
-    # -C means demangle to AIX nm, but means don't demangle with GNU nm
-    # Also, AIX nm treats weak defined symbols like other global defined
-    # symbols, whereas GNU nm marks them as "W".
+    # -C means demangle to GNU nm, but means don't demangle to AIX nm.
+    # Without the "-l" option, or with the "-B" option, AIX nm treats
+    # weak defined symbols like other global defined symbols, whereas
+    # GNU nm marks them as "W".
+    # While the 'weak' keyword is ignored in the Export File, we need
+    # it in the Import File for the 'aix-soname' feature, so we have
+    # to replace the "-B" option with "-P" for AIX nm.
     if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then
-      export_symbols_cmds_CXX='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
+      export_symbols_cmds_CXX='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && (substr(\$ 3,1,1) != ".")) { if (\$ 2 == "W") { print \$ 3 " weak" } else { print \$ 3 } } }'\'' | sort -u > $export_symbols'
     else
-      export_symbols_cmds_CXX='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
+      export_symbols_cmds_CXX='`func_echo_all $NM | $SED -e '\''s/B\([^B]*\)$/P\1/'\''` -PCpgl $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) && (substr(\$ 1,1,1) != ".")) { if ((\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) { print \$ 1 " weak" } else { print \$ 1 } } }'\'' | sort -u > $export_symbols'
     fi
     ;;
   pw32*)
-    export_symbols_cmds_CXX="$ltdll_cmds"
+    export_symbols_cmds_CXX=$ltdll_cmds
     ;;
   cygwin* | mingw* | cegcc*)
     case $cc_basename in
@@ -21739,7 +22370,7 @@
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs_CXX" >&5
 $as_echo "$ld_shlibs_CXX" >&6; }
-test "$ld_shlibs_CXX" = no && can_build_shared=no
+test no = "$ld_shlibs_CXX" && can_build_shared=no
 
 with_gnu_ld_CXX=$with_gnu_ld
 
@@ -21756,7 +22387,7 @@
   # Assume -lc should be added
   archive_cmds_need_lc_CXX=yes
 
-  if test "$enable_shared" = yes && test "$GCC" = yes; then
+  if test yes,yes = "$GCC,$enable_shared"; then
     case $archive_cmds_CXX in
     *'~'*)
       # FIXME: we may have to deal with multi-command sequences.
@@ -21884,7 +22515,7 @@
 library_names_spec=
 libname_spec='lib$name'
 soname_spec=
-shrext_cmds=".so"
+shrext_cmds=.so
 postinstall_cmds=
 postuninstall_cmds=
 finish_cmds=
@@ -21901,14 +22532,16 @@
 # flags to be left without arguments
 need_version=unknown
 
+
+
 case $host_os in
 aix3*)
   version_type=linux # correct to gnu/linux during the next big refactor
-  library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a'
+  library_names_spec='$libname$release$shared_ext$versuffix $libname.a'
   shlibpath_var=LIBPATH
 
   # AIX 3 has no versioning support, so we append a major version to the name.
-  soname_spec='${libname}${release}${shared_ext}$major'
+  soname_spec='$libname$release$shared_ext$major'
   ;;
 
 aix[4-9]*)
@@ -21916,41 +22549,91 @@
   need_lib_prefix=no
   need_version=no
   hardcode_into_libs=yes
-  if test "$host_cpu" = ia64; then
+  if test ia64 = "$host_cpu"; then
     # AIX 5 supports IA64
-    library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}'
+    library_names_spec='$libname$release$shared_ext$major $libname$release$shared_ext$versuffix $libname$shared_ext'
     shlibpath_var=LD_LIBRARY_PATH
   else
     # With GCC up to 2.95.x, collect2 would create an import file
     # for dependence libraries.  The import file would start with
-    # the line `#! .'.  This would cause the generated library to
-    # depend on `.', always an invalid library.  This was fixed in
+    # the line '#! .'.  This would cause the generated library to
+    # depend on '.', always an invalid library.  This was fixed in
     # development snapshots of GCC prior to 3.0.
     case $host_os in
       aix4 | aix4.[01] | aix4.[01].*)
       if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)'
 	   echo ' yes '
-	   echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then
+	   echo '#endif'; } | $CC -E - | $GREP yes > /dev/null; then
 	:
       else
 	can_build_shared=no
       fi
       ;;
     esac
-    # AIX (on Power*) has no versioning support, so currently we can not hardcode correct
+    # Using Import Files as archive members, it is possible to support
+    # filename-based versioning of shared library archives on AIX. While
+    # this would work for both with and without runtime linking, it will
+    # prevent static linking of such archives. So we do filename-based
+    # shared library versioning with .so extension only, which is used
+    # when both runtime linking and shared linking is enabled.
+    # Unfortunately, runtime linking may impact performance, so we do
+    # not want this to be the default eventually. Also, we use the
+    # versioned .so libs for executables only if there is the -brtl
+    # linker flag in LDFLAGS as well, or --with-aix-soname=svr4 only.
+    # To allow for filename-based versioning support, we need to create
+    # libNAME.so.V as an archive file, containing:
+    # *) an Import File, referring to the versioned filename of the
+    #    archive as well as the shared archive member, telling the
+    #    bitwidth (32 or 64) of that shared object, and providing the
+    #    list of exported symbols of that shared object, eventually
+    #    decorated with the 'weak' keyword
+    # *) the shared object with the F_LOADONLY flag set, to really avoid
+    #    it being seen by the linker.
+    # At run time we better use the real file rather than another symlink,
+    # but for link time we create the symlink libNAME.so -> libNAME.so.V
+
+    case $with_aix_soname,$aix_use_runtimelinking in
+    # AIX (on Power*) has no versioning support, so currently we cannot hardcode correct
     # soname into executable. Probably we can add versioning support to
     # collect2, so additional links can be useful in future.
-    if test "$aix_use_runtimelinking" = yes; then
+    aix,yes) # traditional libtool
+      dynamic_linker='AIX unversionable lib.so'
       # If using run time linking (on AIX 4.2 or later) use lib<name>.so
       # instead of lib<name>.a to let people know that these are not
       # typical AIX shared libraries.
-      library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-    else
+      library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+      ;;
+    aix,no) # traditional AIX only
+      dynamic_linker='AIX lib.a(lib.so.V)'
       # We preserve .a as extension for shared libraries through AIX4.2
       # and later when we are not doing run time linking.
-      library_names_spec='${libname}${release}.a $libname.a'
-      soname_spec='${libname}${release}${shared_ext}$major'
-    fi
+      library_names_spec='$libname$release.a $libname.a'
+      soname_spec='$libname$release$shared_ext$major'
+      ;;
+    svr4,*) # full svr4 only
+      dynamic_linker="AIX lib.so.V($shared_archive_member_spec.o)"
+      library_names_spec='$libname$release$shared_ext$major $libname$shared_ext'
+      # We do not specify a path in Import Files, so LIBPATH fires.
+      shlibpath_overrides_runpath=yes
+      ;;
+    *,yes) # both, prefer svr4
+      dynamic_linker="AIX lib.so.V($shared_archive_member_spec.o), lib.a(lib.so.V)"
+      library_names_spec='$libname$release$shared_ext$major $libname$shared_ext'
+      # unpreferred sharedlib libNAME.a needs extra handling
+      postinstall_cmds='test -n "$linkname" || linkname="$realname"~func_stripname "" ".so" "$linkname"~$install_shared_prog "$dir/$func_stripname_result.$libext" "$destdir/$func_stripname_result.$libext"~test -z "$tstripme" || test -z "$striplib" || $striplib "$destdir/$func_stripname_result.$libext"'
+      postuninstall_cmds='for n in $library_names $old_library; do :; done~func_stripname "" ".so" "$n"~test "$func_stripname_result" = "$n" || func_append rmfiles " $odir/$func_stripname_result.$libext"'
+      # We do not specify a path in Import Files, so LIBPATH fires.
+      shlibpath_overrides_runpath=yes
+      ;;
+    *,no) # both, prefer aix
+      dynamic_linker="AIX lib.a(lib.so.V), lib.so.V($shared_archive_member_spec.o)"
+      library_names_spec='$libname$release.a $libname.a'
+      soname_spec='$libname$release$shared_ext$major'
+      # unpreferred sharedlib libNAME.so.V and symlink libNAME.so need extra handling
+      postinstall_cmds='test -z "$dlname" || $install_shared_prog $dir/$dlname $destdir/$dlname~test -z "$tstripme" || test -z "$striplib" || $striplib $destdir/$dlname~test -n "$linkname" || linkname=$realname~func_stripname "" ".a" "$linkname"~(cd "$destdir" && $LN_S -f $dlname $func_stripname_result.so)'
+      postuninstall_cmds='test -z "$dlname" || func_append rmfiles " $odir/$dlname"~for n in $old_library $library_names; do :; done~func_stripname "" ".a" "$n"~func_append rmfiles " $odir/$func_stripname_result.so"'
+      ;;
+    esac
     shlibpath_var=LIBPATH
   fi
   ;;
@@ -21960,18 +22643,18 @@
   powerpc)
     # Since July 2007 AmigaOS4 officially supports .so libraries.
     # When compiling the executable, add -use-dynld -Lsobjs: to the compileline.
-    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+    library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
     ;;
   m68k)
     library_names_spec='$libname.ixlibrary $libname.a'
     # Create ${libname}_ixlibrary.a entries in /sys/libs.
-    finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done'
+    finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done'
     ;;
   esac
   ;;
 
 beos*)
-  library_names_spec='${libname}${shared_ext}'
+  library_names_spec='$libname$shared_ext'
   dynamic_linker="$host_os ld.so"
   shlibpath_var=LIBRARY_PATH
   ;;
@@ -21979,8 +22662,8 @@
 bsdi[45]*)
   version_type=linux # correct to gnu/linux during the next big refactor
   need_version=no
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-  soname_spec='${libname}${release}${shared_ext}$major'
+  library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+  soname_spec='$libname$release$shared_ext$major'
   finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir'
   shlibpath_var=LD_LIBRARY_PATH
   sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib"
@@ -21992,7 +22675,7 @@
 
 cygwin* | mingw* | pw32* | cegcc*)
   version_type=windows
-  shrext_cmds=".dll"
+  shrext_cmds=.dll
   need_version=no
   need_lib_prefix=no
 
@@ -22001,8 +22684,8 @@
     # gcc
     library_names_spec='$libname.dll.a'
     # DLL is installed to $(libdir)/../bin by postinstall_cmds
-    postinstall_cmds='base_file=`basename \${file}`~
-      dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~
+    postinstall_cmds='base_file=`basename \$file`~
+      dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; echo \$dlname'\''`~
       dldir=$destdir/`dirname \$dlpath`~
       test -d \$dldir || mkdir -p \$dldir~
       $install_prog $dir/$dlname \$dldir/$dlname~
@@ -22018,16 +22701,16 @@
     case $host_os in
     cygwin*)
       # Cygwin DLLs use 'cyg' prefix rather than 'lib'
-      soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
+      soname_spec='`echo $libname | sed -e 's/^lib/cyg/'``echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext'
 
       ;;
     mingw* | cegcc*)
       # MinGW DLLs use traditional 'lib' prefix
-      soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
+      soname_spec='$libname`echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext'
       ;;
     pw32*)
       # pw32 DLLs use 'pw' prefix rather than 'lib'
-      library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
+      library_names_spec='`echo $libname | sed -e 's/^lib/pw/'``echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext'
       ;;
     esac
     dynamic_linker='Win32 ld.exe'
@@ -22036,8 +22719,8 @@
   *,cl*)
     # Native MSVC
     libname_spec='$name'
-    soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
-    library_names_spec='${libname}.dll.lib'
+    soname_spec='$libname`echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext'
+    library_names_spec='$libname.dll.lib'
 
     case $build_os in
     mingw*)
@@ -22064,7 +22747,7 @@
       sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"`
       ;;
     *)
-      sys_lib_search_path_spec="$LIB"
+      sys_lib_search_path_spec=$LIB
       if $ECHO "$sys_lib_search_path_spec" | $GREP ';[c-zC-Z]:/' >/dev/null; then
         # It is most probably a Windows format PATH.
         sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'`
@@ -22077,8 +22760,8 @@
     esac
 
     # DLL is installed to $(libdir)/../bin by postinstall_cmds
-    postinstall_cmds='base_file=`basename \${file}`~
-      dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~
+    postinstall_cmds='base_file=`basename \$file`~
+      dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; echo \$dlname'\''`~
       dldir=$destdir/`dirname \$dlpath`~
       test -d \$dldir || mkdir -p \$dldir~
       $install_prog $dir/$dlname \$dldir/$dlname'
@@ -22091,7 +22774,7 @@
 
   *)
     # Assume MSVC wrapper
-    library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib'
+    library_names_spec='$libname`echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext $libname.lib'
     dynamic_linker='Win32 ld.exe'
     ;;
   esac
@@ -22104,8 +22787,8 @@
   version_type=darwin
   need_lib_prefix=no
   need_version=no
-  library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext'
-  soname_spec='${libname}${release}${major}$shared_ext'
+  library_names_spec='$libname$release$major$shared_ext $libname$shared_ext'
+  soname_spec='$libname$release$major$shared_ext'
   shlibpath_overrides_runpath=yes
   shlibpath_var=DYLD_LIBRARY_PATH
   shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`'
@@ -22117,8 +22800,8 @@
   version_type=linux # correct to gnu/linux during the next big refactor
   need_lib_prefix=no
   need_version=no
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext'
-  soname_spec='${libname}${release}${shared_ext}$major'
+  library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+  soname_spec='$libname$release$shared_ext$major'
   shlibpath_var=LD_LIBRARY_PATH
   ;;
 
@@ -22136,12 +22819,13 @@
   version_type=freebsd-$objformat
   case $version_type in
     freebsd-elf*)
-      library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}'
+      library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+      soname_spec='$libname$release$shared_ext$major'
       need_version=no
       need_lib_prefix=no
       ;;
     freebsd-*)
-      library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix'
+      library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix'
       need_version=yes
       ;;
   esac
@@ -22171,10 +22855,10 @@
   need_lib_prefix=no
   need_version=no
   dynamic_linker="$host_os runtime_loader"
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}'
-  soname_spec='${libname}${release}${shared_ext}$major'
+  library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+  soname_spec='$libname$release$shared_ext$major'
   shlibpath_var=LIBRARY_PATH
-  shlibpath_overrides_runpath=yes
+  shlibpath_overrides_runpath=no
   sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib'
   hardcode_into_libs=yes
   ;;
@@ -22192,14 +22876,15 @@
     dynamic_linker="$host_os dld.so"
     shlibpath_var=LD_LIBRARY_PATH
     shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
-    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-    soname_spec='${libname}${release}${shared_ext}$major'
-    if test "X$HPUX_IA64_MODE" = X32; then
+    library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+    soname_spec='$libname$release$shared_ext$major'
+    if test 32 = "$HPUX_IA64_MODE"; then
       sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib"
+      sys_lib_dlsearch_path_spec=/usr/lib/hpux32
     else
       sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64"
+      sys_lib_dlsearch_path_spec=/usr/lib/hpux64
     fi
-    sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
     ;;
   hppa*64*)
     shrext_cmds='.sl'
@@ -22207,8 +22892,8 @@
     dynamic_linker="$host_os dld.sl"
     shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH
     shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
-    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-    soname_spec='${libname}${release}${shared_ext}$major'
+    library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+    soname_spec='$libname$release$shared_ext$major'
     sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64"
     sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
     ;;
@@ -22217,8 +22902,8 @@
     dynamic_linker="$host_os dld.sl"
     shlibpath_var=SHLIB_PATH
     shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH
-    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-    soname_spec='${libname}${release}${shared_ext}$major'
+    library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+    soname_spec='$libname$release$shared_ext$major'
     ;;
   esac
   # HP-UX runs *really* slowly unless shared libraries are mode 555, ...
@@ -22231,8 +22916,8 @@
   version_type=linux # correct to gnu/linux during the next big refactor
   need_lib_prefix=no
   need_version=no
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
-  soname_spec='${libname}${release}${shared_ext}$major'
+  library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+  soname_spec='$libname$release$shared_ext$major'
   dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)'
   shlibpath_var=LD_LIBRARY_PATH
   shlibpath_overrides_runpath=no
@@ -22243,7 +22928,7 @@
   case $host_os in
     nonstopux*) version_type=nonstopux ;;
     *)
-	if test "$lt_cv_prog_gnu_ld" = yes; then
+	if test yes = "$lt_cv_prog_gnu_ld"; then
 		version_type=linux # correct to gnu/linux during the next big refactor
 	else
 		version_type=irix
@@ -22251,8 +22936,8 @@
   esac
   need_lib_prefix=no
   need_version=no
-  soname_spec='${libname}${release}${shared_ext}$major'
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}'
+  soname_spec='$libname$release$shared_ext$major'
+  library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$release$shared_ext $libname$shared_ext'
   case $host_os in
   irix5* | nonstopux*)
     libsuff= shlibsuff=
@@ -22271,8 +22956,8 @@
   esac
   shlibpath_var=LD_LIBRARY${shlibsuff}_PATH
   shlibpath_overrides_runpath=no
-  sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}"
-  sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}"
+  sys_lib_search_path_spec="/usr/lib$libsuff /lib$libsuff /usr/local/lib$libsuff"
+  sys_lib_dlsearch_path_spec="/usr/lib$libsuff /lib$libsuff"
   hardcode_into_libs=yes
   ;;
 
@@ -22281,13 +22966,33 @@
   dynamic_linker=no
   ;;
 
+linux*android*)
+  version_type=none # Android doesn't support versioned libraries.
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='$libname$release$shared_ext'
+  soname_spec='$libname$release$shared_ext'
+  finish_cmds=
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+
+  # This implies no fast_install, which is unacceptable.
+  # Some rework will be needed to allow for fast_install
+  # before this can be enabled.
+  hardcode_into_libs=yes
+
+  dynamic_linker='Android linker'
+  # Don't embed -rpath directories since the linker doesn't support them.
+  hardcode_libdir_flag_spec_CXX='-L$libdir'
+  ;;
+
 # This must be glibc/ELF.
 linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*)
   version_type=linux # correct to gnu/linux during the next big refactor
   need_lib_prefix=no
   need_version=no
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-  soname_spec='${libname}${release}${shared_ext}$major'
+  library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+  soname_spec='$libname$release$shared_ext$major'
   finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir'
   shlibpath_var=LD_LIBRARY_PATH
   shlibpath_overrides_runpath=no
@@ -22331,7 +23036,12 @@
   # before this can be enabled.
   hardcode_into_libs=yes
 
-  # Append ld.so.conf contents to the search path
+  # Ideally, we could use ldconfig to report *all* directores which are
+  # searched for libraries, however this is still not possible.  Aside from not
+  # being certain /sbin/ldconfig is available, command
+  # 'ldconfig -N -X -v | grep ^/' on 64bit Fedora does not report /usr/lib64,
+  # even though it is searched at run-time.  Try to do the best guess by
+  # appending ld.so.conf contents (and includes) to the search path.
   if test -f /etc/ld.so.conf; then
     lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[	 ]*hwcap[	 ]/d;s/[:,	]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '`
     sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra"
@@ -22363,12 +23073,12 @@
   need_lib_prefix=no
   need_version=no
   if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
-    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+    library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix'
     finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
     dynamic_linker='NetBSD (a.out) ld.so'
   else
-    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
-    soname_spec='${libname}${release}${shared_ext}$major'
+    library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+    soname_spec='$libname$release$shared_ext$major'
     dynamic_linker='NetBSD ld.elf_so'
   fi
   shlibpath_var=LD_LIBRARY_PATH
@@ -22378,7 +23088,7 @@
 
 newsos6)
   version_type=linux # correct to gnu/linux during the next big refactor
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
   shlibpath_var=LD_LIBRARY_PATH
   shlibpath_overrides_runpath=yes
   ;;
@@ -22387,58 +23097,68 @@
   version_type=qnx
   need_lib_prefix=no
   need_version=no
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-  soname_spec='${libname}${release}${shared_ext}$major'
+  library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+  soname_spec='$libname$release$shared_ext$major'
   shlibpath_var=LD_LIBRARY_PATH
   shlibpath_overrides_runpath=no
   hardcode_into_libs=yes
   dynamic_linker='ldqnx.so'
   ;;
 
-openbsd*)
+openbsd* | bitrig*)
   version_type=sunos
-  sys_lib_dlsearch_path_spec="/usr/lib"
+  sys_lib_dlsearch_path_spec=/usr/lib
   need_lib_prefix=no
-  # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs.
-  case $host_os in
-    openbsd3.3 | openbsd3.3.*)	need_version=yes ;;
-    *)				need_version=no  ;;
-  esac
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+  if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then
+    need_version=no
+  else
+    need_version=yes
+  fi
+  library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix'
   finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
   shlibpath_var=LD_LIBRARY_PATH
-  if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
-    case $host_os in
-      openbsd2.[89] | openbsd2.[89].*)
-	shlibpath_overrides_runpath=no
-	;;
-      *)
-	shlibpath_overrides_runpath=yes
-	;;
-      esac
-  else
-    shlibpath_overrides_runpath=yes
-  fi
+  shlibpath_overrides_runpath=yes
   ;;
 
 os2*)
   libname_spec='$name'
-  shrext_cmds=".dll"
+  version_type=windows
+  shrext_cmds=.dll
+  need_version=no
   need_lib_prefix=no
-  library_names_spec='$libname${shared_ext} $libname.a'
+  # OS/2 can only load a DLL with a base name of 8 characters or less.
+  soname_spec='`test -n "$os2dllname" && libname="$os2dllname";
+    v=$($ECHO $release$versuffix | tr -d .-);
+    n=$($ECHO $libname | cut -b -$((8 - ${#v})) | tr . _);
+    $ECHO $n$v`$shared_ext'
+  library_names_spec='${libname}_dll.$libext'
   dynamic_linker='OS/2 ld.exe'
-  shlibpath_var=LIBPATH
+  shlibpath_var=BEGINLIBPATH
+  sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib"
+  sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
+  postinstall_cmds='base_file=`basename \$file`~
+    dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; $ECHO \$dlname'\''`~
+    dldir=$destdir/`dirname \$dlpath`~
+    test -d \$dldir || mkdir -p \$dldir~
+    $install_prog $dir/$dlname \$dldir/$dlname~
+    chmod a+x \$dldir/$dlname~
+    if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then
+      eval '\''$striplib \$dldir/$dlname'\'' || exit \$?;
+    fi'
+  postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; $ECHO \$dlname'\''`~
+    dlpath=$dir/\$dldll~
+    $RM \$dlpath'
   ;;
 
 osf3* | osf4* | osf5*)
   version_type=osf
   need_lib_prefix=no
   need_version=no
-  soname_spec='${libname}${release}${shared_ext}$major'
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='$libname$release$shared_ext$major'
+  library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
   shlibpath_var=LD_LIBRARY_PATH
   sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib"
-  sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec"
+  sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
   ;;
 
 rdos*)
@@ -22449,8 +23169,8 @@
   version_type=linux # correct to gnu/linux during the next big refactor
   need_lib_prefix=no
   need_version=no
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-  soname_spec='${libname}${release}${shared_ext}$major'
+  library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+  soname_spec='$libname$release$shared_ext$major'
   shlibpath_var=LD_LIBRARY_PATH
   shlibpath_overrides_runpath=yes
   hardcode_into_libs=yes
@@ -22460,11 +23180,11 @@
 
 sunos4*)
   version_type=sunos
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+  library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix'
   finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir'
   shlibpath_var=LD_LIBRARY_PATH
   shlibpath_overrides_runpath=yes
-  if test "$with_gnu_ld" = yes; then
+  if test yes = "$with_gnu_ld"; then
     need_lib_prefix=no
   fi
   need_version=yes
@@ -22472,8 +23192,8 @@
 
 sysv4 | sysv4.3*)
   version_type=linux # correct to gnu/linux during the next big refactor
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-  soname_spec='${libname}${release}${shared_ext}$major'
+  library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+  soname_spec='$libname$release$shared_ext$major'
   shlibpath_var=LD_LIBRARY_PATH
   case $host_vendor in
     sni)
@@ -22494,24 +23214,24 @@
   ;;
 
 sysv4*MP*)
-  if test -d /usr/nec ;then
+  if test -d /usr/nec; then
     version_type=linux # correct to gnu/linux during the next big refactor
-    library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}'
-    soname_spec='$libname${shared_ext}.$major'
+    library_names_spec='$libname$shared_ext.$versuffix $libname$shared_ext.$major $libname$shared_ext'
+    soname_spec='$libname$shared_ext.$major'
     shlibpath_var=LD_LIBRARY_PATH
   fi
   ;;
 
 sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
-  version_type=freebsd-elf
+  version_type=sco
   need_lib_prefix=no
   need_version=no
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}'
-  soname_spec='${libname}${release}${shared_ext}$major'
+  library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext $libname$shared_ext'
+  soname_spec='$libname$release$shared_ext$major'
   shlibpath_var=LD_LIBRARY_PATH
   shlibpath_overrides_runpath=yes
   hardcode_into_libs=yes
-  if test "$with_gnu_ld" = yes; then
+  if test yes = "$with_gnu_ld"; then
     sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib'
   else
     sys_lib_search_path_spec='/usr/ccs/lib /usr/lib'
@@ -22529,7 +23249,7 @@
   version_type=linux # correct to gnu/linux during the next big refactor
   need_lib_prefix=no
   need_version=no
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
   shlibpath_var=LD_LIBRARY_PATH
   shlibpath_overrides_runpath=no
   hardcode_into_libs=yes
@@ -22537,8 +23257,8 @@
 
 uts4*)
   version_type=linux # correct to gnu/linux during the next big refactor
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-  soname_spec='${libname}${release}${shared_ext}$major'
+  library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+  soname_spec='$libname$release$shared_ext$major'
   shlibpath_var=LD_LIBRARY_PATH
   ;;
 
@@ -22548,20 +23268,32 @@
 esac
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $dynamic_linker" >&5
 $as_echo "$dynamic_linker" >&6; }
-test "$dynamic_linker" = no && can_build_shared=no
+test no = "$dynamic_linker" && can_build_shared=no
 
 variables_saved_for_relink="PATH $shlibpath_var $runpath_var"
-if test "$GCC" = yes; then
+if test yes = "$GCC"; then
   variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH"
 fi
 
-if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then
-  sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec"
+if test set = "${lt_cv_sys_lib_search_path_spec+set}"; then
+  sys_lib_search_path_spec=$lt_cv_sys_lib_search_path_spec
 fi
-if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then
-  sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec"
+
+if test set = "${lt_cv_sys_lib_dlsearch_path_spec+set}"; then
+  sys_lib_dlsearch_path_spec=$lt_cv_sys_lib_dlsearch_path_spec
 fi
 
+# remember unaugmented sys_lib_dlsearch_path content for libtool script decls...
+configure_time_dlsearch_path=$sys_lib_dlsearch_path_spec
+
+# ... but it needs LT_SYS_LIBRARY_PATH munging for other configure-time code
+func_munge_path_list sys_lib_dlsearch_path_spec "$LT_SYS_LIBRARY_PATH"
+
+# to be used as default LT_SYS_LIBRARY_PATH value in generated libtool
+configure_time_lt_sys_library_path=$LT_SYS_LIBRARY_PATH
+
+
+
 
 
 
@@ -22604,15 +23336,15 @@
 hardcode_action_CXX=
 if test -n "$hardcode_libdir_flag_spec_CXX" ||
    test -n "$runpath_var_CXX" ||
-   test "X$hardcode_automatic_CXX" = "Xyes" ; then
+   test yes = "$hardcode_automatic_CXX"; then
 
   # We can hardcode non-existent directories.
-  if test "$hardcode_direct_CXX" != no &&
+  if test no != "$hardcode_direct_CXX" &&
      # If the only mechanism to avoid hardcoding is shlibpath_var, we
      # have to relink, otherwise we might link with an installed library
      # when we should be linking with a yet-to-be-installed one
-     ## test "$_LT_TAGVAR(hardcode_shlibpath_var, CXX)" != no &&
-     test "$hardcode_minus_L_CXX" != no; then
+     ## test no != "$_LT_TAGVAR(hardcode_shlibpath_var, CXX)" &&
+     test no != "$hardcode_minus_L_CXX"; then
     # Linking always hardcodes the temporary library directory.
     hardcode_action_CXX=relink
   else
@@ -22627,12 +23359,12 @@
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hardcode_action_CXX" >&5
 $as_echo "$hardcode_action_CXX" >&6; }
 
-if test "$hardcode_action_CXX" = relink ||
-   test "$inherit_rpath_CXX" = yes; then
+if test relink = "$hardcode_action_CXX" ||
+   test yes = "$inherit_rpath_CXX"; then
   # Fast installation is not supported
   enable_fast_install=no
-elif test "$shlibpath_overrides_runpath" = yes ||
-     test "$enable_shared" = no; then
+elif test yes = "$shlibpath_overrides_runpath" ||
+     test no = "$enable_shared"; then
   # Fast installation is not necessary
   enable_fast_install=needless
 fi
@@ -22655,7 +23387,7 @@
   lt_cv_path_LD=$lt_save_path_LD
   lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld
   lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld
-fi # test "$_lt_caught_CXX_error" != yes
+fi # test yes != "$_lt_caught_CXX_error"
 
 ac_ext=c
 ac_cpp='$CPP $CPPFLAGS'
@@ -23932,7 +24664,7 @@
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_mw__mwvalidcheckl" >&5
 $as_echo "$ac_cv_lib_mw__mwvalidcheckl" >&6; }
 if test "x$ac_cv_lib_mw__mwvalidcheckl" = xyes; then :
-  LIBM="-lmw"
+  LIBM=-lmw
 fi
 
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for cos in -lm" >&5
@@ -24014,7 +24746,7 @@
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_m_cos" >&5
 $as_echo "$ac_cv_lib_m_cos" >&6; }
 if test "x$ac_cv_lib_m_cos" = xyes; then :
-  LIBM="-lm"
+  LIBM=-lm
 fi
 
   ;;
@@ -25420,7 +26152,7 @@
 fi
 
 
-GLIB_REQ=2.32.0
+GLIB_REQ=2.40.0
 
 
 
@@ -25561,18 +26293,10 @@
 if test "${enable_glib_asserts+set}" = set; then :
   enableval=$enable_glib_asserts; enable_glib_assertions=$enableval
 else
-  enable_glib_assertions=auto
+  enable_glib_assertions=yes
 fi
 
 
-  if test "x$enable_glib_assertions" = "xauto"; then
-        if test "x`expr $PACKAGE_VERSION_MINOR % 2`" = "x1" -a "x`expr $PACKAGE_VERSION_MICRO '<' 90`" = "x1"; then
-      enable_glib_assertions=yes
-    else
-      enable_glib_assertions=no
-    fi
-  fi
-
   if test "x$enable_glib_assertions" = "xno"; then
     GLIB_EXTRA_CFLAGS="$GLIB_EXTRA_CFLAGS -DG_DISABLE_ASSERT"
   fi
@@ -26917,6 +27641,41 @@
 fi
 
 
+# Check whether --enable-Bsymbolic was given.
+if test "${enable_Bsymbolic+set}" = set; then :
+  enableval=$enable_Bsymbolic;
+else
+  SAVED_LDFLAGS="${LDFLAGS}" SAVED_LIBS="${LIBS}"
+               { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -Bsymbolic-functions linker flag" >&5
+$as_echo_n "checking for -Bsymbolic-functions linker flag... " >&6; }
+               LDFLAGS=-Wl,-Bsymbolic-functions
+               LIBS=
+               cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+return 0
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+                           enable_Bsymbolic=yes
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+                           enable_Bsymbolic=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+               LDFLAGS="${SAVED_LDFLAGS}" LIBS="${SAVED_LIBS}"
+fi
+
+
 
 HAVE_GTK3=NO
 if test "x$BUILD_EXAMPLES" = "xyes"; then
@@ -28106,8 +28865,8 @@
       if test "xyes" = "xno" -o "xyes" = "x"; then
     GST_PACKAGE_RELEASE_DATETIME=`date -u "+%Y-%m-%dT%H:%MZ"`
   elif test "xyes" = "xyes"; then
-            if ( echo yes | grep '^201-90-9-0-10-9-0-30-9' >/dev/null ) ; then
-      GST_PACKAGE_RELEASE_DATETIME=yes
+            if ( echo  "${srcdir}/gst-plugins-bad.doap"  | grep '^20[1-9][0-9]-[0-1][0-9]-[0-3][0-9]' >/dev/null ) ; then
+      GST_PACKAGE_RELEASE_DATETIME= "${srcdir}/gst-plugins-bad.doap"
     else
             YYYY_MM_DD=`sh "${srcdir}/common/extract-release-date-from-doap-file"  $PACKAGE_VERSION_MAJOR.$PACKAGE_VERSION_MINOR.$PACKAGE_VERSION_MICRO   "${srcdir}/gst-plugins-bad.doap" `;
       if test "x$YYYY_MM_DD" != "x"; then
@@ -28118,7 +28877,7 @@
         GST_PACKAGE_RELEASE_DATETIME=""
       fi
     fi
-    elif ( echo yes | grep '^201-90-9-0-10-9-0-30-9' >/dev/null ) ; then
+    elif ( echo yes | grep '^20[1-9][0-9]-[0-1][0-9]-[0-3][0-9]' >/dev/null ) ; then
     GST_PACKAGE_RELEASE_DATETIME=yes
   else
     { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: SET_PACKAGE_RELEASE_DATETIME: invalid first argument" >&5
@@ -28145,8 +28904,8 @@
       if test "xno" = "xno" -o "xno" = "x"; then
     GST_PACKAGE_RELEASE_DATETIME=`date -u "+%Y-%m-%dT%H:%MZ"`
   elif test "xno" = "xyes"; then
-            if ( echo no | grep '^201-90-9-0-10-9-0-30-9' >/dev/null ) ; then
-      GST_PACKAGE_RELEASE_DATETIME=no
+            if ( echo  | grep '^20[1-9][0-9]-[0-1][0-9]-[0-3][0-9]' >/dev/null ) ; then
+      GST_PACKAGE_RELEASE_DATETIME=
     else
             YYYY_MM_DD=`sh "${srcdir}/common/extract-release-date-from-doap-file"  `;
       if test "x$YYYY_MM_DD" != "x"; then
@@ -28157,7 +28916,7 @@
         GST_PACKAGE_RELEASE_DATETIME=""
       fi
     fi
-    elif ( echo no | grep '^201-90-9-0-10-9-0-30-9' >/dev/null ) ; then
+    elif ( echo no | grep '^20[1-9][0-9]-[0-1][0-9]-[0-3][0-9]' >/dev/null ) ; then
     GST_PACKAGE_RELEASE_DATETIME=no
   else
     { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: SET_PACKAGE_RELEASE_DATETIME: invalid first argument" >&5
@@ -28218,6 +28977,69 @@
 fi
 
 
+
+# Check whether --with-player-tests was given.
+if test "${with_player_tests+set}" = set; then :
+  withval=$with_player_tests;
+fi
+
+if test x$with_player_tests = xyes; then
+  # Extract the first word of "wget", so it can be a program name with args.
+set dummy wget; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_path_WGET+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  case $WGET in
+  [\\/]* | ?:[\\/]*)
+  ac_cv_path_WGET="$WGET" # Let the user override the test with a path.
+  ;;
+  *)
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_path_WGET="$as_dir/$ac_word$ac_exec_ext"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+  test -z "$ac_cv_path_WGET" && ac_cv_path_WGET="no"
+  ;;
+esac
+fi
+WGET=$ac_cv_path_WGET
+if test -n "$WGET"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $WGET" >&5
+$as_echo "$WGET" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+  if test x$WGET = xno; then
+    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: wget required for GstPlayer tests but not found - disabling" >&5
+$as_echo "$as_me: WARNING: wget required for GstPlayer tests but not found - disabling" >&2;}
+    with_player_tests=no
+  fi
+fi
+ if test "x$with_player_tests" = "xyes"; then
+  WITH_GST_PLAYER_TESTS_TRUE=
+  WITH_GST_PLAYER_TESTS_FALSE='#'
+else
+  WITH_GST_PLAYER_TESTS_TRUE='#'
+  WITH_GST_PLAYER_TESTS_FALSE=
+fi
+
+
 # set by AG_GST_PARSE_SUBSYSTEM_DISABLES above
 NO_WARNINGS=""
 
@@ -28461,93 +29283,6 @@
   { $as_echo "$as_me:${as_lineno-$LINENO}: result: $flag_ok" >&5
 $as_echo "$flag_ok" >&6; }
 
-
-        if test "x$ERROR_CFLAGS" = "x"
-    then
-
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking to see if compiler understands -errwarn=%all" >&5
-$as_echo_n "checking to see if compiler understands -errwarn=%all... " >&6; }
-
-  save_CFLAGS="$CFLAGS"
-  CFLAGS="$CFLAGS -errwarn=%all"
-
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  flag_ok=yes
-else
-  flag_ok=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-  CFLAGS="$save_CFLAGS"
-
-  if test "X$flag_ok" = Xyes ; then
-
-          ERROR_CFLAGS="-errwarn=%all"
-                                                                                for f in 'no%E_EMPTY_DECLARATION' \
-                   'no%E_STATEMENT_NOT_REACHED' \
-                   'no%E_ARGUEMENT_MISMATCH' \
-                   'no%E_MACRO_REDEFINED' \
-                   'no%E_LOOP_NOT_ENTERED_AT_TOP'
-          do
-
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking to see if compiler understands -errwarn=%all,$f" >&5
-$as_echo_n "checking to see if compiler understands -errwarn=%all,$f... " >&6; }
-
-  save_CFLAGS="$CFLAGS"
-  CFLAGS="$CFLAGS -errwarn=%all,$f"
-
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  flag_ok=yes
-else
-  flag_ok=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-  CFLAGS="$save_CFLAGS"
-
-  if test "X$flag_ok" = Xyes ; then
-
-              ERROR_CFLAGS="$ERROR_CFLAGS,$f"
-
-    true
-  else
-
-    true
-  fi
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $flag_ok" >&5
-$as_echo "$flag_ok" >&6; }
-
-          done
-
-    true
-  else
-
-    true
-  fi
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $flag_ok" >&5
-$as_echo "$flag_ok" >&6; }
-
-    fi
   fi
 
   if test "x
@@ -28903,122 +29638,6 @@
 
 
 fi
-    else
-
-
-
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking to see if c++ compiler understands -errwarn=%all" >&5
-$as_echo_n "checking to see if c++ compiler understands -errwarn=%all... " >&6; }
-
-  save_CPPFLAGS="$CPPFLAGS"
-  CPPFLAGS="$CPPFLAGS -errwarn=%all"
-
-  ac_ext=cpp
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-
-
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_cxx_try_compile "$LINENO"; then :
-  flag_ok=yes
-else
-  flag_ok=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-  CPPFLAGS="$save_CPPFLAGS"
-
-  if test "X$flag_ok" = Xyes ; then
-    ERROR_CXXFLAGS="$ERROR_CXXFLAGS -errwarn=%all"
-    true
-  else
-
-    true
-  fi
-
-  ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $flag_ok" >&5
-$as_echo "$flag_ok" >&6; }
-
-      if test "x$ERROR_CXXFLAGS" != "x"; then
-                                                                                for f in 'no%E_EMPTY_DECLARATION' \
-                 'no%E_STATEMENT_NOT_REACHED' \
-                 'no%E_ARGUEMENT_MISMATCH' \
-                 'no%E_MACRO_REDEFINED' \
-                 'no%E_LOOP_NOT_ENTERED_AT_TOP'
-        do
-
-
-
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking to see if c++ compiler understands -errwarn=%all,$f" >&5
-$as_echo_n "checking to see if c++ compiler understands -errwarn=%all,$f... " >&6; }
-
-  save_CPPFLAGS="$CPPFLAGS"
-  CPPFLAGS="$CPPFLAGS -errwarn=%all,$f"
-
-  ac_ext=cpp
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-
-
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_cxx_try_compile "$LINENO"; then :
-  flag_ok=yes
-else
-  flag_ok=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-  CPPFLAGS="$save_CPPFLAGS"
-
-  if test "X$flag_ok" = Xyes ; then
-    ERROR_CXXFLAGS="$ERROR_CXXFLAGS,$f"
-    true
-  else
-
-    true
-  fi
-
-  ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $flag_ok" >&5
-$as_echo "$flag_ok" >&6; }
-
-        done
-      fi
     fi
   fi
 
@@ -29337,122 +29956,6 @@
 
 
 fi
-    else
-
-
-
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking to see if Objective C compiler understands -errwarn=%all" >&5
-$as_echo_n "checking to see if Objective C compiler understands -errwarn=%all... " >&6; }
-
-  save_CPPFLAGS="$CPPFLAGS"
-  CPPFLAGS="$CPPFLAGS -errwarn=%all"
-
-  ac_ext=m
-ac_cpp='$OBJCPP $CPPFLAGS'
-ac_compile='$OBJC -c $OBJCFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$OBJC -o conftest$ac_exeext $OBJCFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_objc_compiler_gnu
-
-
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_objc_try_compile "$LINENO"; then :
-  flag_ok=yes
-else
-  flag_ok=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-  CPPFLAGS="$save_CPPFLAGS"
-
-  if test "X$flag_ok" = Xyes ; then
-    ERROR_OBJCFLAGS="$ERROR_OBJCFLAGS -errwarn=%all"
-    true
-  else
-
-    true
-  fi
-
-  ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $flag_ok" >&5
-$as_echo "$flag_ok" >&6; }
-
-      if test "x$ERROR_OBJCFLAGS" != "x"; then
-                                                                                for f in 'no%E_EMPTY_DECLARATION' \
-                 'no%E_STATEMENT_NOT_REACHED' \
-                 'no%E_ARGUEMENT_MISMATCH' \
-                 'no%E_MACRO_REDEFINED' \
-                 'no%E_LOOP_NOT_ENTERED_AT_TOP'
-        do
-
-
-
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking to see if Objective C compiler understands -errwarn=%all,$f" >&5
-$as_echo_n "checking to see if Objective C compiler understands -errwarn=%all,$f... " >&6; }
-
-  save_CPPFLAGS="$CPPFLAGS"
-  CPPFLAGS="$CPPFLAGS -errwarn=%all,$f"
-
-  ac_ext=m
-ac_cpp='$OBJCPP $CPPFLAGS'
-ac_compile='$OBJC -c $OBJCFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$OBJC -o conftest$ac_exeext $OBJCFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_objc_compiler_gnu
-
-
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_objc_try_compile "$LINENO"; then :
-  flag_ok=yes
-else
-  flag_ok=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-  CPPFLAGS="$save_CPPFLAGS"
-
-  if test "X$flag_ok" = Xyes ; then
-    ERROR_OBJCFLAGS="$ERROR_OBJCFLAGS,$f"
-    true
-  else
-
-    true
-  fi
-
-  ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $flag_ok" >&5
-$as_echo "$flag_ok" >&6; }
-
-        done
-      fi
     fi
   fi
 
@@ -29700,10 +30203,9 @@
  videomeasure \
  linsys \
  apexsink dc1394 \
- gsettings \
  musepack nas sdl timidity \
- acm wininet \
- xvid lv2 teletextdec sndio libvisual"
+ wininet \
+ xvid lv2 sndio libvisual"
 
 
 
@@ -29879,6 +30381,49 @@
 
 
 
+  GST_PLUGINS_ALL="$GST_PLUGINS_ALL videoframe_audiolevel"
+
+
+
+  # Check whether --enable-videoframe_audiolevel was given.
+if test "${enable_videoframe_audiolevel+set}" = set; then :
+  enableval=$enable_videoframe_audiolevel;
+      case "${enableval}" in
+        yes) gst_use_videoframe_audiolevel=yes ;;
+        no) gst_use_videoframe_audiolevel=no ;;
+        *) as_fn_error $? "bad value ${enableval} for --enable-videoframe_audiolevel" "$LINENO" 5 ;;
+       esac
+
+else
+  gst_use_videoframe_audiolevel=yes
+fi
+
+  if test x$gst_use_videoframe_audiolevel = xno; then
+    { $as_echo "$as_me:${as_lineno-$LINENO}: disabling dependency-less plugin videoframe_audiolevel" >&5
+$as_echo "$as_me: disabling dependency-less plugin videoframe_audiolevel" >&6;}
+    WITHOUT_PLUGINS="$WITHOUT_PLUGINS videoframe_audiolevel"
+  fi
+
+
+    if [ -z "$WITH_PLUGINS" ] || echo " $WITH_PLUGINS " | tr , ' ' | grep -i " videoframe_audiolevel " > /dev/null; then
+    GST_PLUGINS_SELECTED="$GST_PLUGINS_SELECTED videoframe_audiolevel"
+  fi
+    if echo " $WITHOUT_PLUGINS " | tr , ' ' | grep -i " videoframe_audiolevel " > /dev/null; then
+    GST_PLUGINS_SELECTED=`echo " $GST_PLUGINS_SELECTED " | $SED -e 's/ videoframe_audiolevel / /'`
+  fi
+    if echo " $GST_PLUGINS_NONPORTED " | tr , ' ' | grep -i " videoframe_audiolevel " > /dev/null; then
+    GST_PLUGINS_SELECTED=`echo " $GST_PLUGINS_SELECTED " | $SED -e 's/ videoframe_audiolevel / /'`
+  fi
+   if echo " $GST_PLUGINS_SELECTED " | grep -i " videoframe_audiolevel " > /dev/null; then
+  USE_PLUGIN_VIDEOFRAME_AUDIOLEVEL_TRUE=
+  USE_PLUGIN_VIDEOFRAME_AUDIOLEVEL_FALSE='#'
+else
+  USE_PLUGIN_VIDEOFRAME_AUDIOLEVEL_TRUE='#'
+  USE_PLUGIN_VIDEOFRAME_AUDIOLEVEL_FALSE=
+fi
+
+
+
   GST_PLUGINS_ALL="$GST_PLUGINS_ALL asfmux"
 
 
@@ -31255,49 +31800,6 @@
 
 
 
-  GST_PLUGINS_ALL="$GST_PLUGINS_ALL liveadder"
-
-
-
-  # Check whether --enable-liveadder was given.
-if test "${enable_liveadder+set}" = set; then :
-  enableval=$enable_liveadder;
-      case "${enableval}" in
-        yes) gst_use_liveadder=yes ;;
-        no) gst_use_liveadder=no ;;
-        *) as_fn_error $? "bad value ${enableval} for --enable-liveadder" "$LINENO" 5 ;;
-       esac
-
-else
-  gst_use_liveadder=yes
-fi
-
-  if test x$gst_use_liveadder = xno; then
-    { $as_echo "$as_me:${as_lineno-$LINENO}: disabling dependency-less plugin liveadder" >&5
-$as_echo "$as_me: disabling dependency-less plugin liveadder" >&6;}
-    WITHOUT_PLUGINS="$WITHOUT_PLUGINS liveadder"
-  fi
-
-
-    if [ -z "$WITH_PLUGINS" ] || echo " $WITH_PLUGINS " | tr , ' ' | grep -i " liveadder " > /dev/null; then
-    GST_PLUGINS_SELECTED="$GST_PLUGINS_SELECTED liveadder"
-  fi
-    if echo " $WITHOUT_PLUGINS " | tr , ' ' | grep -i " liveadder " > /dev/null; then
-    GST_PLUGINS_SELECTED=`echo " $GST_PLUGINS_SELECTED " | $SED -e 's/ liveadder / /'`
-  fi
-    if echo " $GST_PLUGINS_NONPORTED " | tr , ' ' | grep -i " liveadder " > /dev/null; then
-    GST_PLUGINS_SELECTED=`echo " $GST_PLUGINS_SELECTED " | $SED -e 's/ liveadder / /'`
-  fi
-   if echo " $GST_PLUGINS_SELECTED " | grep -i " liveadder " > /dev/null; then
-  USE_PLUGIN_LIVEADDER_TRUE=
-  USE_PLUGIN_LIVEADDER_FALSE='#'
-else
-  USE_PLUGIN_LIVEADDER_TRUE='#'
-  USE_PLUGIN_LIVEADDER_FALSE=
-fi
-
-
-
   GST_PLUGINS_ALL="$GST_PLUGINS_ALL midi"
 
 
@@ -31599,6 +32101,49 @@
 
 
 
+  GST_PLUGINS_ALL="$GST_PLUGINS_ALL netsim"
+
+
+
+  # Check whether --enable-netsim was given.
+if test "${enable_netsim+set}" = set; then :
+  enableval=$enable_netsim;
+      case "${enableval}" in
+        yes) gst_use_netsim=yes ;;
+        no) gst_use_netsim=no ;;
+        *) as_fn_error $? "bad value ${enableval} for --enable-netsim" "$LINENO" 5 ;;
+       esac
+
+else
+  gst_use_netsim=yes
+fi
+
+  if test x$gst_use_netsim = xno; then
+    { $as_echo "$as_me:${as_lineno-$LINENO}: disabling dependency-less plugin netsim" >&5
+$as_echo "$as_me: disabling dependency-less plugin netsim" >&6;}
+    WITHOUT_PLUGINS="$WITHOUT_PLUGINS netsim"
+  fi
+
+
+    if [ -z "$WITH_PLUGINS" ] || echo " $WITH_PLUGINS " | tr , ' ' | grep -i " netsim " > /dev/null; then
+    GST_PLUGINS_SELECTED="$GST_PLUGINS_SELECTED netsim"
+  fi
+    if echo " $WITHOUT_PLUGINS " | tr , ' ' | grep -i " netsim " > /dev/null; then
+    GST_PLUGINS_SELECTED=`echo " $GST_PLUGINS_SELECTED " | $SED -e 's/ netsim / /'`
+  fi
+    if echo " $GST_PLUGINS_NONPORTED " | tr , ' ' | grep -i " netsim " > /dev/null; then
+    GST_PLUGINS_SELECTED=`echo " $GST_PLUGINS_SELECTED " | $SED -e 's/ netsim / /'`
+  fi
+   if echo " $GST_PLUGINS_SELECTED " | grep -i " netsim " > /dev/null; then
+  USE_PLUGIN_NETSIM_TRUE=
+  USE_PLUGIN_NETSIM_FALSE='#'
+else
+  USE_PLUGIN_NETSIM_TRUE='#'
+  USE_PLUGIN_NETSIM_FALSE=
+fi
+
+
+
   GST_PLUGINS_ALL="$GST_PLUGINS_ALL nuvdemux"
 
 
@@ -31900,49 +32445,6 @@
 
 
 
-  GST_PLUGINS_ALL="$GST_PLUGINS_ALL rtp"
-
-
-
-  # Check whether --enable-rtp was given.
-if test "${enable_rtp+set}" = set; then :
-  enableval=$enable_rtp;
-      case "${enableval}" in
-        yes) gst_use_rtp=yes ;;
-        no) gst_use_rtp=no ;;
-        *) as_fn_error $? "bad value ${enableval} for --enable-rtp" "$LINENO" 5 ;;
-       esac
-
-else
-  gst_use_rtp=yes
-fi
-
-  if test x$gst_use_rtp = xno; then
-    { $as_echo "$as_me:${as_lineno-$LINENO}: disabling dependency-less plugin rtp" >&5
-$as_echo "$as_me: disabling dependency-less plugin rtp" >&6;}
-    WITHOUT_PLUGINS="$WITHOUT_PLUGINS rtp"
-  fi
-
-
-    if [ -z "$WITH_PLUGINS" ] || echo " $WITH_PLUGINS " | tr , ' ' | grep -i " rtp " > /dev/null; then
-    GST_PLUGINS_SELECTED="$GST_PLUGINS_SELECTED rtp"
-  fi
-    if echo " $WITHOUT_PLUGINS " | tr , ' ' | grep -i " rtp " > /dev/null; then
-    GST_PLUGINS_SELECTED=`echo " $GST_PLUGINS_SELECTED " | $SED -e 's/ rtp / /'`
-  fi
-    if echo " $GST_PLUGINS_NONPORTED " | tr , ' ' | grep -i " rtp " > /dev/null; then
-    GST_PLUGINS_SELECTED=`echo " $GST_PLUGINS_SELECTED " | $SED -e 's/ rtp / /'`
-  fi
-   if echo " $GST_PLUGINS_SELECTED " | grep -i " rtp " > /dev/null; then
-  USE_PLUGIN_RTP_TRUE=
-  USE_PLUGIN_RTP_FALSE='#'
-else
-  USE_PLUGIN_RTP_TRUE='#'
-  USE_PLUGIN_RTP_FALSE=
-fi
-
-
-
   GST_PLUGINS_ALL="$GST_PLUGINS_ALL sdi"
 
 
@@ -33107,6 +33609,102 @@
   *)
     if test "x$NEED_GL" != "xno"; then
 
+  which="gl"
+    required="no"
+
+
+pkg_failed=no
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for GL" >&5
+$as_echo_n "checking for GL... " >&6; }
+
+if test -n "$PKG_CONFIG"; then
+    if test -n "$GL_CFLAGS"; then
+        pkg_cv_GL_CFLAGS="$GL_CFLAGS"
+    else
+        if test -n "$PKG_CONFIG" && \
+    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"\$which\""; } >&5
+  ($PKG_CONFIG --exists --print-errors "$which") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+  pkg_cv_GL_CFLAGS=`$PKG_CONFIG --cflags "$which" 2>/dev/null`
+else
+  pkg_failed=yes
+fi
+    fi
+else
+	pkg_failed=untried
+fi
+if test -n "$PKG_CONFIG"; then
+    if test -n "$GL_LIBS"; then
+        pkg_cv_GL_LIBS="$GL_LIBS"
+    else
+        if test -n "$PKG_CONFIG" && \
+    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"\$which\""; } >&5
+  ($PKG_CONFIG --exists --print-errors "$which") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+  pkg_cv_GL_LIBS=`$PKG_CONFIG --libs "$which" 2>/dev/null`
+else
+  pkg_failed=yes
+fi
+    fi
+else
+	pkg_failed=untried
+fi
+
+
+
+if test $pkg_failed = yes; then
+
+if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
+        _pkg_short_errors_supported=yes
+else
+        _pkg_short_errors_supported=no
+fi
+        if test $_pkg_short_errors_supported = yes; then
+	        GL_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "$which"`
+        else
+	        GL_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "$which"`
+        fi
+	# Put the nasty error message in config.log where it belongs
+	echo "$GL_PKG_ERRORS" >&5
+
+	{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+
+      HAVE_GL="no"
+      if test "x$required" = "xyes"; then
+        as_fn_error $? "$GL_PKG_ERRORS" "$LINENO" 5
+      else
+        { $as_echo "$as_me:${as_lineno-$LINENO}: $GL_PKG_ERRORS" >&5
+$as_echo "$as_me: $GL_PKG_ERRORS" >&6;}
+      fi
+
+elif test $pkg_failed = untried; then
+
+      HAVE_GL="no"
+      if test "x$required" = "xyes"; then
+        as_fn_error $? "$GL_PKG_ERRORS" "$LINENO" 5
+      else
+        { $as_echo "$as_me:${as_lineno-$LINENO}: $GL_PKG_ERRORS" >&5
+$as_echo "$as_me: $GL_PKG_ERRORS" >&6;}
+      fi
+
+else
+	GL_CFLAGS=$pkg_cv_GL_CFLAGS
+	GL_LIBS=$pkg_cv_GL_LIBS
+        { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+
+      HAVE_GL="yes"
+
+fi
+
+
+      if test "x$HAVE_GL" != "xyes"; then
+
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for glTexImage2D in -lGL" >&5
 $as_echo_n "checking for glTexImage2D in -lGL... " >&6; }
 if ${ac_cv_lib_GL_glTexImage2D+:} false; then :
@@ -33169,9 +33767,106 @@
 
 
 
+      fi
     fi
     if test "x$NEED_GLES2" != "xno"; then
 
+  which="glesv2"
+    required="no"
+
+
+pkg_failed=no
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for GLES2" >&5
+$as_echo_n "checking for GLES2... " >&6; }
+
+if test -n "$PKG_CONFIG"; then
+    if test -n "$GLES2_CFLAGS"; then
+        pkg_cv_GLES2_CFLAGS="$GLES2_CFLAGS"
+    else
+        if test -n "$PKG_CONFIG" && \
+    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"\$which\""; } >&5
+  ($PKG_CONFIG --exists --print-errors "$which") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+  pkg_cv_GLES2_CFLAGS=`$PKG_CONFIG --cflags "$which" 2>/dev/null`
+else
+  pkg_failed=yes
+fi
+    fi
+else
+	pkg_failed=untried
+fi
+if test -n "$PKG_CONFIG"; then
+    if test -n "$GLES2_LIBS"; then
+        pkg_cv_GLES2_LIBS="$GLES2_LIBS"
+    else
+        if test -n "$PKG_CONFIG" && \
+    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"\$which\""; } >&5
+  ($PKG_CONFIG --exists --print-errors "$which") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+  pkg_cv_GLES2_LIBS=`$PKG_CONFIG --libs "$which" 2>/dev/null`
+else
+  pkg_failed=yes
+fi
+    fi
+else
+	pkg_failed=untried
+fi
+
+
+
+if test $pkg_failed = yes; then
+
+if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
+        _pkg_short_errors_supported=yes
+else
+        _pkg_short_errors_supported=no
+fi
+        if test $_pkg_short_errors_supported = yes; then
+	        GLES2_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "$which"`
+        else
+	        GLES2_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "$which"`
+        fi
+	# Put the nasty error message in config.log where it belongs
+	echo "$GLES2_PKG_ERRORS" >&5
+
+	{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+
+      HAVE_GLES2="no"
+      if test "x$required" = "xyes"; then
+        as_fn_error $? "$GLES2_PKG_ERRORS" "$LINENO" 5
+      else
+        { $as_echo "$as_me:${as_lineno-$LINENO}: $GLES2_PKG_ERRORS" >&5
+$as_echo "$as_me: $GLES2_PKG_ERRORS" >&6;}
+      fi
+
+elif test $pkg_failed = untried; then
+
+      HAVE_GLES2="no"
+      if test "x$required" = "xyes"; then
+        as_fn_error $? "$GLES2_PKG_ERRORS" "$LINENO" 5
+      else
+        { $as_echo "$as_me:${as_lineno-$LINENO}: $GLES2_PKG_ERRORS" >&5
+$as_echo "$as_me: $GLES2_PKG_ERRORS" >&6;}
+      fi
+
+else
+	GLES2_CFLAGS=$pkg_cv_GLES2_CFLAGS
+	GLES2_LIBS=$pkg_cv_GLES2_LIBS
+        { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+
+      HAVE_GLES2="yes"
+
+fi
+
+
+      if test "x$HAVE_GLES2" != "xyes"; then
+
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for glTexImage2D in -lGLESv2" >&5
 $as_echo_n "checking for glTexImage2D in -lGLESv2... " >&6; }
 if ${ac_cv_lib_GLESv2_glTexImage2D+:} false; then :
@@ -33234,9 +33929,106 @@
 
 
 
+      fi
     fi
     if test "x$NEED_EGL" != "xno"; then
 
+  which="egl"
+    required="no"
+
+
+pkg_failed=no
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for EGL" >&5
+$as_echo_n "checking for EGL... " >&6; }
+
+if test -n "$PKG_CONFIG"; then
+    if test -n "$EGL_CFLAGS"; then
+        pkg_cv_EGL_CFLAGS="$EGL_CFLAGS"
+    else
+        if test -n "$PKG_CONFIG" && \
+    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"\$which\""; } >&5
+  ($PKG_CONFIG --exists --print-errors "$which") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+  pkg_cv_EGL_CFLAGS=`$PKG_CONFIG --cflags "$which" 2>/dev/null`
+else
+  pkg_failed=yes
+fi
+    fi
+else
+	pkg_failed=untried
+fi
+if test -n "$PKG_CONFIG"; then
+    if test -n "$EGL_LIBS"; then
+        pkg_cv_EGL_LIBS="$EGL_LIBS"
+    else
+        if test -n "$PKG_CONFIG" && \
+    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"\$which\""; } >&5
+  ($PKG_CONFIG --exists --print-errors "$which") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+  pkg_cv_EGL_LIBS=`$PKG_CONFIG --libs "$which" 2>/dev/null`
+else
+  pkg_failed=yes
+fi
+    fi
+else
+	pkg_failed=untried
+fi
+
+
+
+if test $pkg_failed = yes; then
+
+if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
+        _pkg_short_errors_supported=yes
+else
+        _pkg_short_errors_supported=no
+fi
+        if test $_pkg_short_errors_supported = yes; then
+	        EGL_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "$which"`
+        else
+	        EGL_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "$which"`
+        fi
+	# Put the nasty error message in config.log where it belongs
+	echo "$EGL_PKG_ERRORS" >&5
+
+	{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+
+      HAVE_EGL="no"
+      if test "x$required" = "xyes"; then
+        as_fn_error $? "$EGL_PKG_ERRORS" "$LINENO" 5
+      else
+        { $as_echo "$as_me:${as_lineno-$LINENO}: $EGL_PKG_ERRORS" >&5
+$as_echo "$as_me: $EGL_PKG_ERRORS" >&6;}
+      fi
+
+elif test $pkg_failed = untried; then
+
+      HAVE_EGL="no"
+      if test "x$required" = "xyes"; then
+        as_fn_error $? "$EGL_PKG_ERRORS" "$LINENO" 5
+      else
+        { $as_echo "$as_me:${as_lineno-$LINENO}: $EGL_PKG_ERRORS" >&5
+$as_echo "$as_me: $EGL_PKG_ERRORS" >&6;}
+      fi
+
+else
+	EGL_CFLAGS=$pkg_cv_EGL_CFLAGS
+	EGL_LIBS=$pkg_cv_EGL_LIBS
+        { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+
+      HAVE_EGL="yes"
+
+fi
+
+
+      if test "x$HAVE_EGL" != "xyes"; then
+
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for eglGetError in -lEGL" >&5
 $as_echo_n "checking for eglGetError in -lEGL... " >&6; }
 if ${ac_cv_lib_EGL_eglGetError+:} false; then :
@@ -33299,6 +34091,7 @@
 
 
 
+      fi
     fi
 
     old_LIBS=$LIBS
@@ -33745,8 +34538,120 @@
   fi
 fi
 
+HAVE_DRM_FOURCC_HEADER=no
+ac_fn_c_check_header_mongrel "$LINENO" "libdrm/drm_fourcc.h" "ac_cv_header_libdrm_drm_fourcc_h" "$ac_includes_default"
+if test "x$ac_cv_header_libdrm_drm_fourcc_h" = xyes; then :
+  HAVE_DRM_FOURCC_HEADER=yes
+fi
+
+
+
+HAVE_GST_ALLOCATORS=no
+
+pkg_failed=no
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for GST_ALLOCATORS" >&5
+$as_echo_n "checking for GST_ALLOCATORS... " >&6; }
+
+if test -n "$PKG_CONFIG"; then
+    if test -n "$GST_ALLOCATORS_CFLAGS"; then
+        pkg_cv_GST_ALLOCATORS_CFLAGS="$GST_ALLOCATORS_CFLAGS"
+    else
+        if test -n "$PKG_CONFIG" && \
+    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gstreamer-allocators-1.0\""; } >&5
+  ($PKG_CONFIG --exists --print-errors "gstreamer-allocators-1.0") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+  pkg_cv_GST_ALLOCATORS_CFLAGS=`$PKG_CONFIG --cflags "gstreamer-allocators-1.0" 2>/dev/null`
+else
+  pkg_failed=yes
+fi
+    fi
+else
+	pkg_failed=untried
+fi
+if test -n "$PKG_CONFIG"; then
+    if test -n "$GST_ALLOCATORS_LIBS"; then
+        pkg_cv_GST_ALLOCATORS_LIBS="$GST_ALLOCATORS_LIBS"
+    else
+        if test -n "$PKG_CONFIG" && \
+    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gstreamer-allocators-1.0\""; } >&5
+  ($PKG_CONFIG --exists --print-errors "gstreamer-allocators-1.0") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+  pkg_cv_GST_ALLOCATORS_LIBS=`$PKG_CONFIG --libs "gstreamer-allocators-1.0" 2>/dev/null`
+else
+  pkg_failed=yes
+fi
+    fi
+else
+	pkg_failed=untried
+fi
+
+
+
+if test $pkg_failed = yes; then
+
+if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
+        _pkg_short_errors_supported=yes
+else
+        _pkg_short_errors_supported=no
+fi
+        if test $_pkg_short_errors_supported = yes; then
+	        GST_ALLOCATORS_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "gstreamer-allocators-1.0"`
+        else
+	        GST_ALLOCATORS_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "gstreamer-allocators-1.0"`
+        fi
+	# Put the nasty error message in config.log where it belongs
+	echo "$GST_ALLOCATORS_PKG_ERRORS" >&5
+
+	as_fn_error $? "Package requirements (gstreamer-allocators-1.0) were not met:
+
+$GST_ALLOCATORS_PKG_ERRORS
+
+Consider adjusting the PKG_CONFIG_PATH environment variable if you
+installed software in a non-standard prefix.
+
+Alternatively, you may set the environment variables GST_ALLOCATORS_CFLAGS
+and GST_ALLOCATORS_LIBS to avoid the need to call pkg-config.
+See the pkg-config man page for more details.
+" "$LINENO" 5
+elif test $pkg_failed = untried; then
+	{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "The pkg-config script could not be found or is too old.  Make sure it
+is in your PATH or set the PKG_CONFIG environment variable to the full
+path to pkg-config.
+
+Alternatively, you may set the environment variables GST_ALLOCATORS_CFLAGS
+and GST_ALLOCATORS_LIBS to avoid the need to call pkg-config.
+See the pkg-config man page for more details.
+
+To get pkg-config, see <http://pkg-config.freedesktop.org/>.
+See \`config.log' for more details" "$LINENO" 5; }
+else
+	GST_ALLOCATORS_CFLAGS=$pkg_cv_GST_ALLOCATORS_CFLAGS
+	GST_ALLOCATORS_LIBS=$pkg_cv_GST_ALLOCATORS_LIBS
+        { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+	HAVE_GST_ALLOCATORS=yes
+fi
+
+if test "x$HAVE_DRM_FOURCC_HEADER" = "xyes" -a \
+        "x$HAVE_GST_ALLOCATORS" = "xyes" -a \
+        "x$HAVE_EGL" = "xyes"; then
+
+$as_echo "#define GST_GL_HAVE_DMABUF 1 " >>confdefs.h
+
+fi
+
 if test "x$HAVE_GL" = "xyes" -a "x$HAVE_GLES2" = "xyes"; then
   GL_INCLUDES="
+#ifdef __GNUC__
+#  pragma GCC diagnostic push
+#  pragma GCC diagnostic ignored \"-Wredundant-decls\"
+#endif
 #ifndef GL_GLEXT_PROTOTYPES
 #define GL_GLEXT_PROTOTYPES 1
 #endif
@@ -33770,25 +34675,15 @@
 #   include <GL/glext.h>
 #  endif
 # endif
+int main (int argc, char **argv) { return 0; }
 "
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether it is possible to include both GL and GLES2 headers" >&5
 $as_echo_n "checking whether it is possible to include both GL and GLES2 headers... " >&6; }
-  save_CPPFLAGS="$CPPFLAGS"
-  CPPFLAGS="$CPPFLAGS $ERROR_CFLAGS"
+  save_CFLAGS="$CFLAGS"
+  CFLAGS="$CFLAGS $GL_CFLAGS $GLES2_CFLAGS $WARNING_CFLAGS $ERROR_CFLAGS"
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 $GL_INCLUDES
-int
-main ()
-{
-
-    #if !defined(GL_FALSE)
-    #error Failed to include GL headers
-    #endif
-
-  ;
-  return 0;
-}
 _ACEOF
 if ac_fn_c_try_compile "$LINENO"; then :
    { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
@@ -33813,7 +34708,7 @@
 
 fi
 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-  CPPFLAGS="$save_CPPFLAGS"
+  CFLAGS="$save_CFLAGS"
 fi
 
 #dnl Check for OpenGL
@@ -34359,6 +35254,7 @@
 GST_GL_HAVE_GLINTPTR=0
 GST_GL_HAVE_GLSYNC=0
 GST_GL_HAVE_GLUINT64=0
+GST_GL_HAVE_GLINT64=0
 
 old_CFLAGS=$CFLAGS
 CFLAGS="$GL_CFLAGS $CFLAGS"
@@ -34453,6 +35349,21 @@
   GST_GL_HAVE_GLUINT64=1
 fi
 
+ac_fn_c_check_type "$LINENO" "GLint64" "ac_cv_type_GLint64" "$GL_INCLUDES
+"
+if test "x$ac_cv_type_GLint64" = xyes; then :
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_GLINT64 1
+_ACEOF
+
+
+fi
+
+if test "x$ac_cv_type_GLint64" = "xyes"; then
+  GST_GL_HAVE_GLINT64=1
+fi
+
 CFLAGS=$old_CFLAGS
 
 GL_CONFIG_DEFINES="$GL_CONFIG_DEFINES
@@ -34462,6 +35373,7 @@
 #define GST_GL_HAVE_GLINTPTR $GST_GL_HAVE_GLINTPTR
 #define GST_GL_HAVE_GLSYNC $GST_GL_HAVE_GLSYNC
 #define GST_GL_HAVE_GLUINT64 $GST_GL_HAVE_GLUINT64
+#define GST_GL_HAVE_GLINT64 $GST_GL_HAVE_GLINT64
 "
 
 ac_config_commands="$ac_config_commands gst-libs/gst/gl/gstglconfig.h"
@@ -34676,6 +35588,95 @@
 fi
 
 
+VULKAN_CONFIG_DEFINES=""
+
+
+pkg_failed=no
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for XCB" >&5
+$as_echo_n "checking for XCB... " >&6; }
+
+if test -n "$PKG_CONFIG"; then
+    if test -n "$XCB_CFLAGS"; then
+        pkg_cv_XCB_CFLAGS="$XCB_CFLAGS"
+    else
+        if test -n "$PKG_CONFIG" && \
+    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"xcb >= 1.10\""; } >&5
+  ($PKG_CONFIG --exists --print-errors "xcb >= 1.10") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+  pkg_cv_XCB_CFLAGS=`$PKG_CONFIG --cflags "xcb >= 1.10" 2>/dev/null`
+else
+  pkg_failed=yes
+fi
+    fi
+else
+	pkg_failed=untried
+fi
+if test -n "$PKG_CONFIG"; then
+    if test -n "$XCB_LIBS"; then
+        pkg_cv_XCB_LIBS="$XCB_LIBS"
+    else
+        if test -n "$PKG_CONFIG" && \
+    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"xcb >= 1.10\""; } >&5
+  ($PKG_CONFIG --exists --print-errors "xcb >= 1.10") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+  pkg_cv_XCB_LIBS=`$PKG_CONFIG --libs "xcb >= 1.10" 2>/dev/null`
+else
+  pkg_failed=yes
+fi
+    fi
+else
+	pkg_failed=untried
+fi
+
+
+
+if test $pkg_failed = yes; then
+
+if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
+        _pkg_short_errors_supported=yes
+else
+        _pkg_short_errors_supported=no
+fi
+        if test $_pkg_short_errors_supported = yes; then
+	        XCB_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "xcb >= 1.10"`
+        else
+	        XCB_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "xcb >= 1.10"`
+        fi
+	# Put the nasty error message in config.log where it belongs
+	echo "$XCB_PKG_ERRORS" >&5
+
+	{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+                HAVE_XCB=no
+elif test $pkg_failed = untried; then
+	HAVE_XCB=no
+else
+	XCB_CFLAGS=$pkg_cv_XCB_CFLAGS
+	XCB_LIBS=$pkg_cv_XCB_LIBS
+        { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+	HAVE_XCB=yes
+fi
+
+ if test "x$HAVE_XCB" = "xyes"; then
+  USE_XCB_TRUE=
+  USE_XCB_FALSE='#'
+else
+  USE_XCB_TRUE='#'
+  USE_XCB_FALSE=
+fi
+
+if test "x$HAVE_XCB" = "xyes"; then
+  VULKAN_CONFIG_DEFINES="$VULKAN_CONFIG_DEFINES
+  #define GST_VULKAN_HAVE_WINDOW_XCB 1"
+fi
+
+ac_config_commands="$ac_config_commands ext/vulkan/vkconfig.h"
+
 
 
 echo
@@ -36601,6 +37602,1152 @@
 
 
 
+echo
+{ $as_echo "$as_me:${as_lineno-$LINENO}: *** checking feature: NVIDIA Encode API ***" >&5
+$as_echo "$as_me: *** checking feature: NVIDIA Encode API ***" >&6;}
+if test "xnvenc" != "x"
+then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: *** for plug-ins: nvenc ***" >&5
+$as_echo "$as_me: *** for plug-ins: nvenc ***" >&6;}
+fi
+NOUSE=
+if test "x$USE_NVENC" = "xno"; then
+  NOUSE="yes"
+fi
+# Check whether --enable-nvenc was given.
+if test "${enable_nvenc+set}" = set; then :
+  enableval=$enable_nvenc;  case "${enableval}" in
+      yes) USE_NVENC=yes;;
+      no) USE_NVENC=no;;
+      *) as_fn_error $? "bad value ${enableval} for --enable-nvenc" "$LINENO" 5 ;;
+    esac
+else
+   USE_NVENC=yes
+fi
+
+if test "x$NOUSE" = "xyes"; then
+  USE_NVENC="no"
+  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: *** nvenc pre-configured not to be built" >&5
+$as_echo "$as_me: WARNING: *** nvenc pre-configured not to be built" >&2;}
+fi
+NOUSE=
+
+if echo " $GST_PLUGINS_NONPORTED " | tr , ' ' | grep -i " NVENC " > /dev/null; then
+  USE_NVENC="no"
+  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: *** nvenc not ported" >&5
+$as_echo "$as_me: WARNING: *** nvenc not ported" >&2;}
+fi
+
+
+if test x$USE_NVENC = xyes; then
+
+  gst_check_save_LIBS=$LIBS
+  gst_check_save_LDFLAGS=$LDFLAGS
+  gst_check_save_CFLAGS=$CFLAGS
+  gst_check_save_CPPFLAGS=$CPPFLAGS
+  gst_check_save_CXXFLAGS=$CXXFLAGS
+
+  HAVE_NVENC=no
+
+
+  which="gstreamer-video-1.0"
+    required="no"
+
+
+pkg_failed=no
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for GST_VIDEO" >&5
+$as_echo_n "checking for GST_VIDEO... " >&6; }
+
+if test -n "$PKG_CONFIG"; then
+    if test -n "$GST_VIDEO_CFLAGS"; then
+        pkg_cv_GST_VIDEO_CFLAGS="$GST_VIDEO_CFLAGS"
+    else
+        if test -n "$PKG_CONFIG" && \
+    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"\$which\""; } >&5
+  ($PKG_CONFIG --exists --print-errors "$which") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+  pkg_cv_GST_VIDEO_CFLAGS=`$PKG_CONFIG --cflags "$which" 2>/dev/null`
+else
+  pkg_failed=yes
+fi
+    fi
+else
+	pkg_failed=untried
+fi
+if test -n "$PKG_CONFIG"; then
+    if test -n "$GST_VIDEO_LIBS"; then
+        pkg_cv_GST_VIDEO_LIBS="$GST_VIDEO_LIBS"
+    else
+        if test -n "$PKG_CONFIG" && \
+    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"\$which\""; } >&5
+  ($PKG_CONFIG --exists --print-errors "$which") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+  pkg_cv_GST_VIDEO_LIBS=`$PKG_CONFIG --libs "$which" 2>/dev/null`
+else
+  pkg_failed=yes
+fi
+    fi
+else
+	pkg_failed=untried
+fi
+
+
+
+if test $pkg_failed = yes; then
+
+if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
+        _pkg_short_errors_supported=yes
+else
+        _pkg_short_errors_supported=no
+fi
+        if test $_pkg_short_errors_supported = yes; then
+	        GST_VIDEO_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "$which"`
+        else
+	        GST_VIDEO_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "$which"`
+        fi
+	# Put the nasty error message in config.log where it belongs
+	echo "$GST_VIDEO_PKG_ERRORS" >&5
+
+	{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+
+      HAVE_GST_VIDEO="no"
+      if test "x$required" = "xyes"; then
+        as_fn_error $? "$GST_VIDEO_PKG_ERRORS" "$LINENO" 5
+      else
+        { $as_echo "$as_me:${as_lineno-$LINENO}: $GST_VIDEO_PKG_ERRORS" >&5
+$as_echo "$as_me: $GST_VIDEO_PKG_ERRORS" >&6;}
+      fi
+
+elif test $pkg_failed = untried; then
+
+      HAVE_GST_VIDEO="no"
+      if test "x$required" = "xyes"; then
+        as_fn_error $? "$GST_VIDEO_PKG_ERRORS" "$LINENO" 5
+      else
+        { $as_echo "$as_me:${as_lineno-$LINENO}: $GST_VIDEO_PKG_ERRORS" >&5
+$as_echo "$as_me: $GST_VIDEO_PKG_ERRORS" >&6;}
+      fi
+
+else
+	GST_VIDEO_CFLAGS=$pkg_cv_GST_VIDEO_CFLAGS
+	GST_VIDEO_LIBS=$pkg_cv_GST_VIDEO_LIBS
+        { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+
+      HAVE_GST_VIDEO="yes"
+
+fi
+
+
+
+  which="gstreamer-pbutils-1.0"
+    required="no"
+
+
+pkg_failed=no
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for GST_PBUTILS" >&5
+$as_echo_n "checking for GST_PBUTILS... " >&6; }
+
+if test -n "$PKG_CONFIG"; then
+    if test -n "$GST_PBUTILS_CFLAGS"; then
+        pkg_cv_GST_PBUTILS_CFLAGS="$GST_PBUTILS_CFLAGS"
+    else
+        if test -n "$PKG_CONFIG" && \
+    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"\$which\""; } >&5
+  ($PKG_CONFIG --exists --print-errors "$which") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+  pkg_cv_GST_PBUTILS_CFLAGS=`$PKG_CONFIG --cflags "$which" 2>/dev/null`
+else
+  pkg_failed=yes
+fi
+    fi
+else
+	pkg_failed=untried
+fi
+if test -n "$PKG_CONFIG"; then
+    if test -n "$GST_PBUTILS_LIBS"; then
+        pkg_cv_GST_PBUTILS_LIBS="$GST_PBUTILS_LIBS"
+    else
+        if test -n "$PKG_CONFIG" && \
+    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"\$which\""; } >&5
+  ($PKG_CONFIG --exists --print-errors "$which") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+  pkg_cv_GST_PBUTILS_LIBS=`$PKG_CONFIG --libs "$which" 2>/dev/null`
+else
+  pkg_failed=yes
+fi
+    fi
+else
+	pkg_failed=untried
+fi
+
+
+
+if test $pkg_failed = yes; then
+
+if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
+        _pkg_short_errors_supported=yes
+else
+        _pkg_short_errors_supported=no
+fi
+        if test $_pkg_short_errors_supported = yes; then
+	        GST_PBUTILS_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "$which"`
+        else
+	        GST_PBUTILS_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "$which"`
+        fi
+	# Put the nasty error message in config.log where it belongs
+	echo "$GST_PBUTILS_PKG_ERRORS" >&5
+
+	{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+
+      HAVE_GST_PBUTILS="no"
+      if test "x$required" = "xyes"; then
+        as_fn_error $? "$GST_PBUTILS_PKG_ERRORS" "$LINENO" 5
+      else
+        { $as_echo "$as_me:${as_lineno-$LINENO}: $GST_PBUTILS_PKG_ERRORS" >&5
+$as_echo "$as_me: $GST_PBUTILS_PKG_ERRORS" >&6;}
+      fi
+
+elif test $pkg_failed = untried; then
+
+      HAVE_GST_PBUTILS="no"
+      if test "x$required" = "xyes"; then
+        as_fn_error $? "$GST_PBUTILS_PKG_ERRORS" "$LINENO" 5
+      else
+        { $as_echo "$as_me:${as_lineno-$LINENO}: $GST_PBUTILS_PKG_ERRORS" >&5
+$as_echo "$as_me: $GST_PBUTILS_PKG_ERRORS" >&6;}
+      fi
+
+else
+	GST_PBUTILS_CFLAGS=$pkg_cv_GST_PBUTILS_CFLAGS
+	GST_PBUTILS_LIBS=$pkg_cv_GST_PBUTILS_LIBS
+        { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+
+      HAVE_GST_PBUTILS="yes"
+
+fi
+
+
+
+# Check whether --with-cuda-prefix was given.
+if test "${with_cuda_prefix+set}" = set; then :
+  withval=$with_cuda_prefix; if test "x$with_cuda_prefix" != "x"; then :
+  CUDA_PREFIX="$with_cuda_prefix"
+fi
+else
+  CUDA_PREFIX=""
+fi
+
+
+  HAVE_CUDA="yes"
+  if test "x$CUDA_PREFIX" != "x"; then
+        if test "x$CUDA_CFLAGS" = "x" -a "x$CUDA_LIBS" = "x"; then
+            CUDA_CFLAGS="-I$CUDA_PREFIX/include"
+      CUDA_LIBS="-L$CUDA_PREFIX/lib -L$CUDA_PREFIX/lib64 -L$CUDA_PREFIX/lib/stubs -L$CUDA_PREFIX/lib64/stubs -lcuda -lcudart"
+    fi
+  else
+
+pkg_failed=no
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for CUDA" >&5
+$as_echo_n "checking for CUDA... " >&6; }
+
+if test -n "$PKG_CONFIG"; then
+    if test -n "$CUDA_CFLAGS"; then
+        pkg_cv_CUDA_CFLAGS="$CUDA_CFLAGS"
+    else
+        if test -n "$PKG_CONFIG" && \
+    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"cuda-7.5 cudart-7.5\""; } >&5
+  ($PKG_CONFIG --exists --print-errors "cuda-7.5 cudart-7.5") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+  pkg_cv_CUDA_CFLAGS=`$PKG_CONFIG --cflags "cuda-7.5 cudart-7.5" 2>/dev/null`
+else
+  pkg_failed=yes
+fi
+    fi
+else
+	pkg_failed=untried
+fi
+if test -n "$PKG_CONFIG"; then
+    if test -n "$CUDA_LIBS"; then
+        pkg_cv_CUDA_LIBS="$CUDA_LIBS"
+    else
+        if test -n "$PKG_CONFIG" && \
+    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"cuda-7.5 cudart-7.5\""; } >&5
+  ($PKG_CONFIG --exists --print-errors "cuda-7.5 cudart-7.5") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+  pkg_cv_CUDA_LIBS=`$PKG_CONFIG --libs "cuda-7.5 cudart-7.5" 2>/dev/null`
+else
+  pkg_failed=yes
+fi
+    fi
+else
+	pkg_failed=untried
+fi
+
+
+
+if test $pkg_failed = yes; then
+
+if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
+        _pkg_short_errors_supported=yes
+else
+        _pkg_short_errors_supported=no
+fi
+        if test $_pkg_short_errors_supported = yes; then
+	        CUDA_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "cuda-7.5 cudart-7.5"`
+        else
+	        CUDA_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "cuda-7.5 cudart-7.5"`
+        fi
+	# Put the nasty error message in config.log where it belongs
+	echo "$CUDA_PKG_ERRORS" >&5
+
+	{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+
+
+pkg_failed=no
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for CUDA" >&5
+$as_echo_n "checking for CUDA... " >&6; }
+
+if test -n "$PKG_CONFIG"; then
+    if test -n "$CUDA_CFLAGS"; then
+        pkg_cv_CUDA_CFLAGS="$CUDA_CFLAGS"
+    else
+        if test -n "$PKG_CONFIG" && \
+    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"cuda-7.0 cudart-7.0\""; } >&5
+  ($PKG_CONFIG --exists --print-errors "cuda-7.0 cudart-7.0") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+  pkg_cv_CUDA_CFLAGS=`$PKG_CONFIG --cflags "cuda-7.0 cudart-7.0" 2>/dev/null`
+else
+  pkg_failed=yes
+fi
+    fi
+else
+	pkg_failed=untried
+fi
+if test -n "$PKG_CONFIG"; then
+    if test -n "$CUDA_LIBS"; then
+        pkg_cv_CUDA_LIBS="$CUDA_LIBS"
+    else
+        if test -n "$PKG_CONFIG" && \
+    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"cuda-7.0 cudart-7.0\""; } >&5
+  ($PKG_CONFIG --exists --print-errors "cuda-7.0 cudart-7.0") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+  pkg_cv_CUDA_LIBS=`$PKG_CONFIG --libs "cuda-7.0 cudart-7.0" 2>/dev/null`
+else
+  pkg_failed=yes
+fi
+    fi
+else
+	pkg_failed=untried
+fi
+
+
+
+if test $pkg_failed = yes; then
+
+if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
+        _pkg_short_errors_supported=yes
+else
+        _pkg_short_errors_supported=no
+fi
+        if test $_pkg_short_errors_supported = yes; then
+	        CUDA_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "cuda-7.0 cudart-7.0"`
+        else
+	        CUDA_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "cuda-7.0 cudart-7.0"`
+        fi
+	# Put the nasty error message in config.log where it belongs
+	echo "$CUDA_PKG_ERRORS" >&5
+
+	{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+
+
+pkg_failed=no
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for CUDA" >&5
+$as_echo_n "checking for CUDA... " >&6; }
+
+if test -n "$PKG_CONFIG"; then
+    if test -n "$CUDA_CFLAGS"; then
+        pkg_cv_CUDA_CFLAGS="$CUDA_CFLAGS"
+    else
+        if test -n "$PKG_CONFIG" && \
+    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"cuda-6.5 cudart-6.5\""; } >&5
+  ($PKG_CONFIG --exists --print-errors "cuda-6.5 cudart-6.5") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+  pkg_cv_CUDA_CFLAGS=`$PKG_CONFIG --cflags "cuda-6.5 cudart-6.5" 2>/dev/null`
+else
+  pkg_failed=yes
+fi
+    fi
+else
+	pkg_failed=untried
+fi
+if test -n "$PKG_CONFIG"; then
+    if test -n "$CUDA_LIBS"; then
+        pkg_cv_CUDA_LIBS="$CUDA_LIBS"
+    else
+        if test -n "$PKG_CONFIG" && \
+    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"cuda-6.5 cudart-6.5\""; } >&5
+  ($PKG_CONFIG --exists --print-errors "cuda-6.5 cudart-6.5") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+  pkg_cv_CUDA_LIBS=`$PKG_CONFIG --libs "cuda-6.5 cudart-6.5" 2>/dev/null`
+else
+  pkg_failed=yes
+fi
+    fi
+else
+	pkg_failed=untried
+fi
+
+
+
+if test $pkg_failed = yes; then
+
+if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
+        _pkg_short_errors_supported=yes
+else
+        _pkg_short_errors_supported=no
+fi
+        if test $_pkg_short_errors_supported = yes; then
+	        CUDA_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "cuda-6.5 cudart-6.5"`
+        else
+	        CUDA_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "cuda-6.5 cudart-6.5"`
+        fi
+	# Put the nasty error message in config.log where it belongs
+	echo "$CUDA_PKG_ERRORS" >&5
+
+	{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+
+          { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Could not find cuda headers/libraries" >&5
+$as_echo "$as_me: WARNING: Could not find cuda headers/libraries" >&2;}
+elif test $pkg_failed = untried; then
+
+          { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Could not find cuda headers/libraries" >&5
+$as_echo "$as_me: WARNING: Could not find cuda headers/libraries" >&2;}
+else
+	CUDA_CFLAGS=$pkg_cv_CUDA_CFLAGS
+	CUDA_LIBS=$pkg_cv_CUDA_LIBS
+        { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+	:
+fi
+elif test $pkg_failed = untried; then
+
+
+pkg_failed=no
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for CUDA" >&5
+$as_echo_n "checking for CUDA... " >&6; }
+
+if test -n "$PKG_CONFIG"; then
+    if test -n "$CUDA_CFLAGS"; then
+        pkg_cv_CUDA_CFLAGS="$CUDA_CFLAGS"
+    else
+        if test -n "$PKG_CONFIG" && \
+    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"cuda-6.5 cudart-6.5\""; } >&5
+  ($PKG_CONFIG --exists --print-errors "cuda-6.5 cudart-6.5") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+  pkg_cv_CUDA_CFLAGS=`$PKG_CONFIG --cflags "cuda-6.5 cudart-6.5" 2>/dev/null`
+else
+  pkg_failed=yes
+fi
+    fi
+else
+	pkg_failed=untried
+fi
+if test -n "$PKG_CONFIG"; then
+    if test -n "$CUDA_LIBS"; then
+        pkg_cv_CUDA_LIBS="$CUDA_LIBS"
+    else
+        if test -n "$PKG_CONFIG" && \
+    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"cuda-6.5 cudart-6.5\""; } >&5
+  ($PKG_CONFIG --exists --print-errors "cuda-6.5 cudart-6.5") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+  pkg_cv_CUDA_LIBS=`$PKG_CONFIG --libs "cuda-6.5 cudart-6.5" 2>/dev/null`
+else
+  pkg_failed=yes
+fi
+    fi
+else
+	pkg_failed=untried
+fi
+
+
+
+if test $pkg_failed = yes; then
+
+if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
+        _pkg_short_errors_supported=yes
+else
+        _pkg_short_errors_supported=no
+fi
+        if test $_pkg_short_errors_supported = yes; then
+	        CUDA_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "cuda-6.5 cudart-6.5"`
+        else
+	        CUDA_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "cuda-6.5 cudart-6.5"`
+        fi
+	# Put the nasty error message in config.log where it belongs
+	echo "$CUDA_PKG_ERRORS" >&5
+
+	{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+
+          { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Could not find cuda headers/libraries" >&5
+$as_echo "$as_me: WARNING: Could not find cuda headers/libraries" >&2;}
+elif test $pkg_failed = untried; then
+
+          { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Could not find cuda headers/libraries" >&5
+$as_echo "$as_me: WARNING: Could not find cuda headers/libraries" >&2;}
+else
+	CUDA_CFLAGS=$pkg_cv_CUDA_CFLAGS
+	CUDA_LIBS=$pkg_cv_CUDA_LIBS
+        { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+	:
+fi
+else
+	CUDA_CFLAGS=$pkg_cv_CUDA_CFLAGS
+	CUDA_LIBS=$pkg_cv_CUDA_LIBS
+        { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+	:
+fi
+elif test $pkg_failed = untried; then
+
+
+pkg_failed=no
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for CUDA" >&5
+$as_echo_n "checking for CUDA... " >&6; }
+
+if test -n "$PKG_CONFIG"; then
+    if test -n "$CUDA_CFLAGS"; then
+        pkg_cv_CUDA_CFLAGS="$CUDA_CFLAGS"
+    else
+        if test -n "$PKG_CONFIG" && \
+    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"cuda-7.0 cudart-7.0\""; } >&5
+  ($PKG_CONFIG --exists --print-errors "cuda-7.0 cudart-7.0") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+  pkg_cv_CUDA_CFLAGS=`$PKG_CONFIG --cflags "cuda-7.0 cudart-7.0" 2>/dev/null`
+else
+  pkg_failed=yes
+fi
+    fi
+else
+	pkg_failed=untried
+fi
+if test -n "$PKG_CONFIG"; then
+    if test -n "$CUDA_LIBS"; then
+        pkg_cv_CUDA_LIBS="$CUDA_LIBS"
+    else
+        if test -n "$PKG_CONFIG" && \
+    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"cuda-7.0 cudart-7.0\""; } >&5
+  ($PKG_CONFIG --exists --print-errors "cuda-7.0 cudart-7.0") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+  pkg_cv_CUDA_LIBS=`$PKG_CONFIG --libs "cuda-7.0 cudart-7.0" 2>/dev/null`
+else
+  pkg_failed=yes
+fi
+    fi
+else
+	pkg_failed=untried
+fi
+
+
+
+if test $pkg_failed = yes; then
+
+if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
+        _pkg_short_errors_supported=yes
+else
+        _pkg_short_errors_supported=no
+fi
+        if test $_pkg_short_errors_supported = yes; then
+	        CUDA_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "cuda-7.0 cudart-7.0"`
+        else
+	        CUDA_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "cuda-7.0 cudart-7.0"`
+        fi
+	# Put the nasty error message in config.log where it belongs
+	echo "$CUDA_PKG_ERRORS" >&5
+
+	{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+
+
+pkg_failed=no
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for CUDA" >&5
+$as_echo_n "checking for CUDA... " >&6; }
+
+if test -n "$PKG_CONFIG"; then
+    if test -n "$CUDA_CFLAGS"; then
+        pkg_cv_CUDA_CFLAGS="$CUDA_CFLAGS"
+    else
+        if test -n "$PKG_CONFIG" && \
+    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"cuda-6.5 cudart-6.5\""; } >&5
+  ($PKG_CONFIG --exists --print-errors "cuda-6.5 cudart-6.5") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+  pkg_cv_CUDA_CFLAGS=`$PKG_CONFIG --cflags "cuda-6.5 cudart-6.5" 2>/dev/null`
+else
+  pkg_failed=yes
+fi
+    fi
+else
+	pkg_failed=untried
+fi
+if test -n "$PKG_CONFIG"; then
+    if test -n "$CUDA_LIBS"; then
+        pkg_cv_CUDA_LIBS="$CUDA_LIBS"
+    else
+        if test -n "$PKG_CONFIG" && \
+    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"cuda-6.5 cudart-6.5\""; } >&5
+  ($PKG_CONFIG --exists --print-errors "cuda-6.5 cudart-6.5") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+  pkg_cv_CUDA_LIBS=`$PKG_CONFIG --libs "cuda-6.5 cudart-6.5" 2>/dev/null`
+else
+  pkg_failed=yes
+fi
+    fi
+else
+	pkg_failed=untried
+fi
+
+
+
+if test $pkg_failed = yes; then
+
+if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
+        _pkg_short_errors_supported=yes
+else
+        _pkg_short_errors_supported=no
+fi
+        if test $_pkg_short_errors_supported = yes; then
+	        CUDA_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "cuda-6.5 cudart-6.5"`
+        else
+	        CUDA_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "cuda-6.5 cudart-6.5"`
+        fi
+	# Put the nasty error message in config.log where it belongs
+	echo "$CUDA_PKG_ERRORS" >&5
+
+	{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+
+          { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Could not find cuda headers/libraries" >&5
+$as_echo "$as_me: WARNING: Could not find cuda headers/libraries" >&2;}
+elif test $pkg_failed = untried; then
+
+          { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Could not find cuda headers/libraries" >&5
+$as_echo "$as_me: WARNING: Could not find cuda headers/libraries" >&2;}
+else
+	CUDA_CFLAGS=$pkg_cv_CUDA_CFLAGS
+	CUDA_LIBS=$pkg_cv_CUDA_LIBS
+        { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+	:
+fi
+elif test $pkg_failed = untried; then
+
+
+pkg_failed=no
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for CUDA" >&5
+$as_echo_n "checking for CUDA... " >&6; }
+
+if test -n "$PKG_CONFIG"; then
+    if test -n "$CUDA_CFLAGS"; then
+        pkg_cv_CUDA_CFLAGS="$CUDA_CFLAGS"
+    else
+        if test -n "$PKG_CONFIG" && \
+    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"cuda-6.5 cudart-6.5\""; } >&5
+  ($PKG_CONFIG --exists --print-errors "cuda-6.5 cudart-6.5") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+  pkg_cv_CUDA_CFLAGS=`$PKG_CONFIG --cflags "cuda-6.5 cudart-6.5" 2>/dev/null`
+else
+  pkg_failed=yes
+fi
+    fi
+else
+	pkg_failed=untried
+fi
+if test -n "$PKG_CONFIG"; then
+    if test -n "$CUDA_LIBS"; then
+        pkg_cv_CUDA_LIBS="$CUDA_LIBS"
+    else
+        if test -n "$PKG_CONFIG" && \
+    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"cuda-6.5 cudart-6.5\""; } >&5
+  ($PKG_CONFIG --exists --print-errors "cuda-6.5 cudart-6.5") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+  pkg_cv_CUDA_LIBS=`$PKG_CONFIG --libs "cuda-6.5 cudart-6.5" 2>/dev/null`
+else
+  pkg_failed=yes
+fi
+    fi
+else
+	pkg_failed=untried
+fi
+
+
+
+if test $pkg_failed = yes; then
+
+if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
+        _pkg_short_errors_supported=yes
+else
+        _pkg_short_errors_supported=no
+fi
+        if test $_pkg_short_errors_supported = yes; then
+	        CUDA_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "cuda-6.5 cudart-6.5"`
+        else
+	        CUDA_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "cuda-6.5 cudart-6.5"`
+        fi
+	# Put the nasty error message in config.log where it belongs
+	echo "$CUDA_PKG_ERRORS" >&5
+
+	{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+
+          { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Could not find cuda headers/libraries" >&5
+$as_echo "$as_me: WARNING: Could not find cuda headers/libraries" >&2;}
+elif test $pkg_failed = untried; then
+
+          { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Could not find cuda headers/libraries" >&5
+$as_echo "$as_me: WARNING: Could not find cuda headers/libraries" >&2;}
+else
+	CUDA_CFLAGS=$pkg_cv_CUDA_CFLAGS
+	CUDA_LIBS=$pkg_cv_CUDA_LIBS
+        { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+	:
+fi
+else
+	CUDA_CFLAGS=$pkg_cv_CUDA_CFLAGS
+	CUDA_LIBS=$pkg_cv_CUDA_LIBS
+        { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+	:
+fi
+else
+	CUDA_CFLAGS=$pkg_cv_CUDA_CFLAGS
+	CUDA_LIBS=$pkg_cv_CUDA_LIBS
+        { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+	:
+fi
+  fi
+
+  HAVE_CUDA_H=no
+  HAVE_CUDART_H=no
+  save_CPPFLAGS="$CPPFLAGS"
+  CPPFLAGS="$CUDA_CFLAGS $save_CPPFLAGS "
+  ac_fn_c_check_header_mongrel "$LINENO" "cuda.h" "ac_cv_header_cuda_h" "$ac_includes_default"
+if test "x$ac_cv_header_cuda_h" = xyes; then :
+  HAVE_CUDA_H=yes
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Could not find cuda.h" >&5
+$as_echo "$as_me: WARNING: Could not find cuda.h" >&2;}
+fi
+
+
+  ac_fn_c_check_header_mongrel "$LINENO" "cuda_runtime_api.h" "ac_cv_header_cuda_runtime_api_h" "$ac_includes_default"
+if test "x$ac_cv_header_cuda_runtime_api_h" = xyes; then :
+  HAVE_CUDART_H=yes
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Could not find cuda_runtime_api.h" >&5
+$as_echo "$as_me: WARNING: Could not find cuda_runtime_api.h" >&2;}
+fi
+
+
+  CPPFLAGS=$save_CPPFLAGS
+
+    save_LIBS="$LIBS"
+  LIBS="$CUDA_LIBS $save_LIBS"
+  HAVE_CUDART_LIB="no"
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for cudaGetErrorString in -lcudart" >&5
+$as_echo_n "checking for cudaGetErrorString in -lcudart... " >&6; }
+if ${ac_cv_lib_cudart_cudaGetErrorString+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lcudart  $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char cudaGetErrorString ();
+int
+main ()
+{
+return cudaGetErrorString ();
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_lib_cudart_cudaGetErrorString=yes
+else
+  ac_cv_lib_cudart_cudaGetErrorString=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_cudart_cudaGetErrorString" >&5
+$as_echo "$ac_cv_lib_cudart_cudaGetErrorString" >&6; }
+if test "x$ac_cv_lib_cudart_cudaGetErrorString" = xyes; then :
+  HAVE_CUDART_LIB="yes"
+else
+
+      { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Could not find cudart library" >&5
+$as_echo "$as_me: WARNING: Could not find cudart library" >&2;}
+fi
+
+  HAVE_CUDA_LIB="no"
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for cuInit in -lcuda" >&5
+$as_echo_n "checking for cuInit in -lcuda... " >&6; }
+if ${ac_cv_lib_cuda_cuInit+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lcuda  $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char cuInit ();
+int
+main ()
+{
+return cuInit ();
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_lib_cuda_cuInit=yes
+else
+  ac_cv_lib_cuda_cuInit=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_cuda_cuInit" >&5
+$as_echo "$ac_cv_lib_cuda_cuInit" >&6; }
+if test "x$ac_cv_lib_cuda_cuInit" = xyes; then :
+  HAVE_CUDA_LIB="yes"
+else
+
+      { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Could not find cuda library" >&5
+$as_echo "$as_me: WARNING: Could not find cuda library" >&2;}
+fi
+
+  LIBS="$save_LIBS"
+
+    HAVE_NVENCODEAPI_H=no
+
+  save_CPPFLAGS="$CPPFLAGS"
+  CPPFLAGS="$NVENCODE_CFLAGS $save_CPPFLAGS"
+  ac_fn_c_check_header_mongrel "$LINENO" "nvEncodeAPI.h" "ac_cv_header_nvEncodeAPI_h" "$ac_includes_default"
+if test "x$ac_cv_header_nvEncodeAPI_h" = xyes; then :
+
+      cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <nvEncodeAPI.h>
+          #if NVENCAPI_MAJOR_VERSION < 5
+          #error "Need nvEncodeAPI.h >= 5.0"
+          #endif
+
+_ACEOF
+if ac_fn_c_try_cpp "$LINENO"; then :
+
+          HAVE_NVENCODEAPI_H=yes
+
+else
+
+          { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: nvEncodeAPI.h must be >= 5.0" >&5
+$as_echo "$as_me: WARNING: nvEncodeAPI.h must be >= 5.0" >&2;}
+
+fi
+rm -f conftest.err conftest.i conftest.$ac_ext
+
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Could not find nvEncodeAPI.h" >&5
+$as_echo "$as_me: WARNING: Could not find nvEncodeAPI.h" >&2;}
+fi
+
+
+
+  CPPFLAGS="$save_CPPFLAGS"
+
+    HAVE_NVENCODE_LIB=no
+
+  saved_LIBS="$LIBS"
+  LIBS="$NVENCODE_LIBS $saved_LIBS"
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for NvEncodeAPICreateInstance in -lnvidia-encode" >&5
+$as_echo_n "checking for NvEncodeAPICreateInstance in -lnvidia-encode... " >&6; }
+if ${ac_cv_lib_nvidia_encode_NvEncodeAPICreateInstance+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lnvidia-encode  $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char NvEncodeAPICreateInstance ();
+int
+main ()
+{
+return NvEncodeAPICreateInstance ();
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_lib_nvidia_encode_NvEncodeAPICreateInstance=yes
+else
+  ac_cv_lib_nvidia_encode_NvEncodeAPICreateInstance=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_nvidia_encode_NvEncodeAPICreateInstance" >&5
+$as_echo "$ac_cv_lib_nvidia_encode_NvEncodeAPICreateInstance" >&6; }
+if test "x$ac_cv_lib_nvidia_encode_NvEncodeAPICreateInstance" = xyes; then :
+  HAVE_NVENCODE_LIB="yes"
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Could not find library nvidia-encode" >&5
+$as_echo "$as_me: WARNING: Could not find library nvidia-encode" >&2;}
+fi
+
+  NVENCODE_LIBS="$NVENCODE_LIBS -lnvidia-encode"
+
+  LIBS="$saved_LIBS"
+
+  USE_NVENC_GST_GL=no
+  if test "x$HAVE_CUDA_H" = "xyes" \
+      -a "x$HAVE_CUDART_H" = "xyes" \
+      -a "x$HAVE_CUDA_LIB" = "xyes" \
+      -a "x$HAVE_CUDART_LIB" = "xyes" \
+      -a "x$HAVE_NVENCODEAPI_H" = "xyes" \
+      -a "x$HAVE_NVENCODE_LIB" = "xyes"; then
+    HAVE_NVENC="yes"
+    if test x"$USE_OPENGL" = x"yes"; then
+            save_CPPFLAGS="$CPPFLAGS"
+      CPPFLAGS="$save_CPPFLAGS $CUDA_CFLAGS"
+      ac_fn_c_check_header_mongrel "$LINENO" "cuda_gl_interop.h" "ac_cv_header_cuda_gl_interop_h" "$ac_includes_default"
+if test "x$ac_cv_header_cuda_gl_interop_h" = xyes; then :
+
+        USE_NVENC_GST_GL="yes"
+
+$as_echo "#define HAVE_NVENC_GST_GL 1 " >>confdefs.h
+
+
+fi
+
+
+      CPPFLAGS="$save_CPPFLAGS"
+    fi
+  else
+    HAVE_NVENC="no"
+  fi
+
+
+  LIBS=$gst_check_save_LIBS
+  LDFLAGS=$gst_check_save_LDFLAGS
+  CFLAGS=$gst_check_save_CFLAGS
+  CPPFLAGS=$gst_check_save_CPPFLAGS
+  CXXFLAGS=$gst_check_save_CXXFLAGS
+
+    if test x$HAVE_NVENC = xno; then
+    USE_NVENC=no
+  else
+    { $as_echo "$as_me:${as_lineno-$LINENO}: *** These plugins will be built: nvenc" >&5
+$as_echo "$as_me: *** These plugins will be built: nvenc" >&6;}
+  fi
+fi
+if test x$USE_NVENC = xyes; then
+  :
+  if test "xnvenc" != "x"; then
+    GST_PLUGINS_YES="\tnvenc\n$GST_PLUGINS_YES"
+  fi
+
+$as_echo "#define HAVE_NVENC /**/" >>confdefs.h
+
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: *** These plugins will not be built: nvenc" >&5
+$as_echo "$as_me: *** These plugins will not be built: nvenc" >&6;}
+  if test "xnvenc" != "x"; then
+    GST_PLUGINS_NO="\tnvenc\n$GST_PLUGINS_NO"
+  fi
+  :
+fi
+ if test x$USE_NVENC = xyes; then
+  USE_NVENC_TRUE=
+  USE_NVENC_FALSE='#'
+else
+  USE_NVENC_TRUE='#'
+  USE_NVENC_FALSE=
+fi
+
+
+ if test "x$USE_NVENC_GST_GL" = "xyes"; then
+  USE_NVENC_GST_GL_TRUE=
+  USE_NVENC_GST_GL_FALSE='#'
+else
+  USE_NVENC_GST_GL_TRUE='#'
+  USE_NVENC_GST_GL_FALSE=
+fi
+
+
+echo
+{ $as_echo "$as_me:${as_lineno-$LINENO}: *** checking feature: tinyalsa ***" >&5
+$as_echo "$as_me: *** checking feature: tinyalsa ***" >&6;}
+if test "xtinyalsa" != "x"
+then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: *** for plug-ins: tinyalsa ***" >&5
+$as_echo "$as_me: *** for plug-ins: tinyalsa ***" >&6;}
+fi
+NOUSE=
+if test "x$USE_TINYALSA" = "xno"; then
+  NOUSE="yes"
+fi
+# Check whether --enable-tinyalsa was given.
+if test "${enable_tinyalsa+set}" = set; then :
+  enableval=$enable_tinyalsa;  case "${enableval}" in
+      yes) USE_TINYALSA=yes;;
+      no) USE_TINYALSA=no;;
+      *) as_fn_error $? "bad value ${enableval} for --enable-tinyalsa" "$LINENO" 5 ;;
+    esac
+else
+   USE_TINYALSA=yes
+fi
+
+if test "x$NOUSE" = "xyes"; then
+  USE_TINYALSA="no"
+  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: *** tinyalsa pre-configured not to be built" >&5
+$as_echo "$as_me: WARNING: *** tinyalsa pre-configured not to be built" >&2;}
+fi
+NOUSE=
+
+if echo " $GST_PLUGINS_NONPORTED " | tr , ' ' | grep -i " TINYALSA " > /dev/null; then
+  USE_TINYALSA="no"
+  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: *** tinyalsa not ported" >&5
+$as_echo "$as_me: WARNING: *** tinyalsa not ported" >&2;}
+fi
+
+
+if test x$USE_TINYALSA = xyes; then
+
+  gst_check_save_LIBS=$LIBS
+  gst_check_save_LDFLAGS=$LDFLAGS
+  gst_check_save_CFLAGS=$CFLAGS
+  gst_check_save_CPPFLAGS=$CPPFLAGS
+  gst_check_save_CXXFLAGS=$CXXFLAGS
+
+  HAVE_TINYALSA=no
+
+  ac_fn_c_check_header_mongrel "$LINENO" "tinyalsa/asoundlib.h" "ac_cv_header_tinyalsa_asoundlib_h" "$ac_includes_default"
+if test "x$ac_cv_header_tinyalsa_asoundlib_h" = xyes; then :
+  HAVE_TINYALSA="yes"
+else
+  HAVE_TINYALSA="no"
+fi
+
+
+
+
+  LIBS=$gst_check_save_LIBS
+  LDFLAGS=$gst_check_save_LDFLAGS
+  CFLAGS=$gst_check_save_CFLAGS
+  CPPFLAGS=$gst_check_save_CPPFLAGS
+  CXXFLAGS=$gst_check_save_CXXFLAGS
+
+    if test x$HAVE_TINYALSA = xno; then
+    USE_TINYALSA=no
+  else
+    { $as_echo "$as_me:${as_lineno-$LINENO}: *** These plugins will be built: tinyalsa" >&5
+$as_echo "$as_me: *** These plugins will be built: tinyalsa" >&6;}
+  fi
+fi
+if test x$USE_TINYALSA = xyes; then
+  :
+  if test "xtinyalsa" != "x"; then
+    GST_PLUGINS_YES="\ttinyalsa\n$GST_PLUGINS_YES"
+  fi
+
+$as_echo "#define HAVE_TINYALSA /**/" >>confdefs.h
+
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: *** These plugins will not be built: tinyalsa" >&5
+$as_echo "$as_me: *** These plugins will not be built: tinyalsa" >&6;}
+  if test "xtinyalsa" != "x"; then
+    GST_PLUGINS_NO="\ttinyalsa\n$GST_PLUGINS_NO"
+  fi
+  :
+fi
+ if test x$USE_TINYALSA = xyes; then
+  USE_TINYALSA_TRUE=
+  USE_TINYALSA_FALSE='#'
+else
+  USE_TINYALSA_TRUE='#'
+  USE_TINYALSA_FALSE=
+fi
+
+
 
 
 if test "x$BUILD_EXTERNAL" = "xyes"; then
@@ -36662,12 +38809,12 @@
         pkg_cv_ASSRENDER_CFLAGS="$ASSRENDER_CFLAGS"
     else
         if test -n "$PKG_CONFIG" && \
-    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libass >= 0.9.4\""; } >&5
-  ($PKG_CONFIG --exists --print-errors "libass >= 0.9.4") 2>&5
+    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libass >= 0.10.2\""; } >&5
+  ($PKG_CONFIG --exists --print-errors "libass >= 0.10.2") 2>&5
   ac_status=$?
   $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
   test $ac_status = 0; }; then
-  pkg_cv_ASSRENDER_CFLAGS=`$PKG_CONFIG --cflags "libass >= 0.9.4" 2>/dev/null`
+  pkg_cv_ASSRENDER_CFLAGS=`$PKG_CONFIG --cflags "libass >= 0.10.2" 2>/dev/null`
 else
   pkg_failed=yes
 fi
@@ -36680,12 +38827,12 @@
         pkg_cv_ASSRENDER_LIBS="$ASSRENDER_LIBS"
     else
         if test -n "$PKG_CONFIG" && \
-    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libass >= 0.9.4\""; } >&5
-  ($PKG_CONFIG --exists --print-errors "libass >= 0.9.4") 2>&5
+    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libass >= 0.10.2\""; } >&5
+  ($PKG_CONFIG --exists --print-errors "libass >= 0.10.2") 2>&5
   ac_status=$?
   $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
   test $ac_status = 0; }; then
-  pkg_cv_ASSRENDER_LIBS=`$PKG_CONFIG --libs "libass >= 0.9.4" 2>/dev/null`
+  pkg_cv_ASSRENDER_LIBS=`$PKG_CONFIG --libs "libass >= 0.10.2" 2>/dev/null`
 else
   pkg_failed=yes
 fi
@@ -36704,9 +38851,9 @@
         _pkg_short_errors_supported=no
 fi
         if test $_pkg_short_errors_supported = yes; then
-	        ASSRENDER_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "libass >= 0.9.4"`
+	        ASSRENDER_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "libass >= 0.10.2"`
         else
-	        ASSRENDER_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "libass >= 0.9.4"`
+	        ASSRENDER_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "libass >= 0.10.2"`
         fi
 	# Put the nasty error message in config.log where it belongs
 	echo "$ASSRENDER_PKG_ERRORS" >&5
@@ -38909,6 +41056,46 @@
 
 
 
+# Extract the first word of "wayland-scanner", so it can be a program name with args.
+set dummy wayland-scanner; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_path_wayland_scanner+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  case $wayland_scanner in
+  [\\/]* | ?:[\\/]*)
+  ac_cv_path_wayland_scanner="$wayland_scanner" # Let the user override the test with a path.
+  ;;
+  *)
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_path_wayland_scanner="$as_dir/$ac_word$ac_exec_ext"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+  ;;
+esac
+fi
+wayland_scanner=$ac_cv_path_wayland_scanner
+if test -n "$wayland_scanner"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $wayland_scanner" >&5
+$as_echo "$wayland_scanner" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
 echo
 { $as_echo "$as_me:${as_lineno-$LINENO}: *** checking feature: wayland sink ***" >&5
 $as_echo "$as_me: *** checking feature: wayland sink ***" >&6;}
@@ -38966,12 +41153,12 @@
         pkg_cv_WAYLAND_CFLAGS="$WAYLAND_CFLAGS"
     else
         if test -n "$PKG_CONFIG" && \
-    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"wayland-client >= 1.4.0 wayland-scanner\""; } >&5
-  ($PKG_CONFIG --exists --print-errors "wayland-client >= 1.4.0 wayland-scanner") 2>&5
+    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"wayland-client >= 1.4.0\""; } >&5
+  ($PKG_CONFIG --exists --print-errors "wayland-client >= 1.4.0") 2>&5
   ac_status=$?
   $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
   test $ac_status = 0; }; then
-  pkg_cv_WAYLAND_CFLAGS=`$PKG_CONFIG --cflags "wayland-client >= 1.4.0 wayland-scanner" 2>/dev/null`
+  pkg_cv_WAYLAND_CFLAGS=`$PKG_CONFIG --cflags "wayland-client >= 1.4.0" 2>/dev/null`
 else
   pkg_failed=yes
 fi
@@ -38984,12 +41171,12 @@
         pkg_cv_WAYLAND_LIBS="$WAYLAND_LIBS"
     else
         if test -n "$PKG_CONFIG" && \
-    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"wayland-client >= 1.4.0 wayland-scanner\""; } >&5
-  ($PKG_CONFIG --exists --print-errors "wayland-client >= 1.4.0 wayland-scanner") 2>&5
+    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"wayland-client >= 1.4.0\""; } >&5
+  ($PKG_CONFIG --exists --print-errors "wayland-client >= 1.4.0") 2>&5
   ac_status=$?
   $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
   test $ac_status = 0; }; then
-  pkg_cv_WAYLAND_LIBS=`$PKG_CONFIG --libs "wayland-client >= 1.4.0 wayland-scanner" 2>/dev/null`
+  pkg_cv_WAYLAND_LIBS=`$PKG_CONFIG --libs "wayland-client >= 1.4.0" 2>/dev/null`
 else
   pkg_failed=yes
 fi
@@ -39008,9 +41195,9 @@
         _pkg_short_errors_supported=no
 fi
         if test $_pkg_short_errors_supported = yes; then
-	        WAYLAND_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "wayland-client >= 1.4.0 wayland-scanner"`
+	        WAYLAND_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "wayland-client >= 1.4.0"`
         else
-	        WAYLAND_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "wayland-client >= 1.4.0 wayland-scanner"`
+	        WAYLAND_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "wayland-client >= 1.4.0"`
         fi
 	# Put the nasty error message in config.log where it belongs
 	echo "$WAYLAND_PKG_ERRORS" >&5
@@ -39028,7 +41215,14 @@
         { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
 $as_echo "yes" >&6; }
 
-    HAVE_WAYLAND="yes"
+    if test "x$wayland_scanner" != "x"; then
+      HAVE_WAYLAND="yes"
+    else
+      { $as_echo "$as_me:${as_lineno-$LINENO}: result: wayland-scanner is required to build the wayland plugin" >&5
+$as_echo "wayland-scanner is required to build the wayland plugin" >&6; }
+      HAVE_WAYLAND="no"
+    fi
+
 fi
 
 
@@ -39071,47 +41265,6 @@
 
 
 
-# Extract the first word of "wayland-scanner", so it can be a program name with args.
-set dummy wayland-scanner; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_path_wayland_scanner+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  case $wayland_scanner in
-  [\\/]* | ?:[\\/]*)
-  ac_cv_path_wayland_scanner="$wayland_scanner" # Let the user override the test with a path.
-  ;;
-  *)
-  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_path_wayland_scanner="$as_dir/$ac_word$ac_exec_ext"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-  done
-IFS=$as_save_IFS
-
-  ;;
-esac
-fi
-wayland_scanner=$ac_cv_path_wayland_scanner
-if test -n "$wayland_scanner"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $wayland_scanner" >&5
-$as_echo "$wayland_scanner" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-
 echo
 { $as_echo "$as_me:${as_lineno-$LINENO}: *** checking feature: WebP ***" >&5
 $as_echo "$as_me: *** checking feature: WebP ***" >&6;}
@@ -39983,8 +42136,8 @@
 
 
 echo
-{ $as_echo "$as_me:${as_lineno-$LINENO}: *** checking feature: AAC decoder plug-in ***" >&5
-$as_echo "$as_me: *** checking feature: AAC decoder plug-in ***" >&6;}
+{ $as_echo "$as_me:${as_lineno-$LINENO}: *** checking feature: FAAD2 AAC decoder plug-in ***" >&5
+$as_echo "$as_me: *** checking feature: FAAD2 AAC decoder plug-in ***" >&6;}
 if test "xfaad" != "x"
 then
   { $as_echo "$as_me:${as_lineno-$LINENO}: *** for plug-ins: faad ***" >&5
@@ -40029,72 +42182,6 @@
 
   HAVE_FAAD=no
 
-  HAVE_FAAD="yes"
-  faad_hdr=""
-
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for faacDecOpen in -lfaad" >&5
-$as_echo_n "checking for faacDecOpen in -lfaad... " >&6; }
-if ${ac_cv_lib_faad_faacDecOpen+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  ac_check_lib_save_LIBS=$LIBS
-LIBS="-lfaad $LIBM $LIBS"
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-/* Override any GCC internal prototype to avoid an error.
-   Use char because int might match the return type of a GCC
-   builtin and then its argument prototype would still apply.  */
-#ifdef __cplusplus
-extern "C"
-#endif
-char faacDecOpen ();
-int
-main ()
-{
-return faacDecOpen ();
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-  ac_cv_lib_faad_faacDecOpen=yes
-else
-  ac_cv_lib_faad_faacDecOpen=no
-fi
-rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_faad_faacDecOpen" >&5
-$as_echo "$ac_cv_lib_faad_faacDecOpen" >&6; }
-if test "x$ac_cv_lib_faad_faacDecOpen" = xyes; then :
-  HAVE_FAAD=yes
-else
-  HAVE_FAAD=no
-fi
-
-  if test "x$HAVE_FAAD" = "xyes"; then
-    ac_fn_c_check_header_mongrel "$LINENO" "faad.h" "ac_cv_header_faad_h" "$ac_includes_default"
-if test "x$ac_cv_header_faad_h" = xyes; then :
-  :
-else
-  HAVE_FAAD=no
-fi
-
-
-    if test "x$HAVE_FAAD" = "xyes"; then
-            FAAD_LIBS="-lfaad $LIBM"
-    else
-      HAVE_FAAD="no"
-    fi
-  else
-    HAVE_FAAD="no"
-  fi
-
-
-
-  if test $HAVE_FAAD = "no"; then
 
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for NeAACDecOpen in -lfaad" >&5
 $as_echo_n "checking for NeAACDecOpen in -lfaad... " >&6; }
@@ -40148,31 +42235,7 @@
 
 
     if test "x$HAVE_FAAD" = "xyes"; then
-             FAAD_LIBS="-lfaad $LIBM"
 
-$as_echo "#define FAAD_IS_NEAAC 1" >>confdefs.h
-
-        faad_hdr="neaacdec.h"
-
-    else
-
-        HAVE_FAAD="no"
-
-    fi
-  else
-
-        HAVE_FAAD="no"
-
-  fi
-
-
-
-  else
-    faad_hdr="faad.h"
-  fi
-  if test $HAVE_FAAD = "yes"; then
-    { $as_echo "$as_me:${as_lineno-$LINENO}: checking Checking for FAAD >= 2.0" >&5
-$as_echo_n "checking Checking for FAAD >= 2.0... " >&6; }
     cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 #include <faad.h>
@@ -40180,13 +42243,11 @@
 main ()
 {
 
-        #if !defined(FAAD2_VERSION) || !defined(FAAD_FMT_DOUBLE)
-        #error Not faad2
-        #else
-        /* Release candidate of 2.0 is not good enough for us. This field
-         * was added only in 2.0 final and does not exist in 2.0-RC3 */
-        faacDecConfiguration conf; conf.dontUpSampleImplicitSBR = 1;
-        #endif
+      #if !defined(FAAD2_VERSION) || !defined(FAAD_FMT_DOUBLE)
+      #error Not faad2
+      #elif !defined(LATM)
+      #error Not faad2 >= 2.7
+      #endif
 
   ;
   return 0;
@@ -40195,52 +42256,33 @@
 if ac_fn_c_try_compile "$LINENO"; then :
 
       HAVE_FAAD="yes"
-
-      { $as_echo "$as_me:${as_lineno-$LINENO}: checking Checking FAAD2 version in $faad_hdr" >&5
-$as_echo_n "checking Checking FAAD2 version in $faad_hdr... " >&6; }
-      for minor in 10 9 8 7 6 5 0; do
-        if test x$faad2_minor_version = "x"; then
-          cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-              #include <$faad_hdr>
-              FAAD2_VERSION
-
-_ACEOF
-if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
-  $EGREP "\"2\.$minor\"$" >/dev/null 2>&1; then :
-
-              faad2_minor_version=$minor
-
-fi
-rm -f conftest*
-
-        fi
-      done
-      if test x$faad2_minor_version = "x"; then
-        { $as_echo "$as_me:${as_lineno-$LINENO}: result: no idea" >&5
-$as_echo "no idea" >&6; }
-      else
-        { $as_echo "$as_me:${as_lineno-$LINENO}: result: 2.$faad2_minor_version" >&5
-$as_echo "2.$faad2_minor_version" >&6; }
-
-cat >>confdefs.h <<_ACEOF
-#define FAAD2_MINOR_VERSION $faad2_minor_version
-_ACEOF
-
-      fi
+      FAAD_LIBS="-lfaad"
 
 else
 
+      { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Found libfaad, but version not recent enough. Need faad2 >= 2.7" >&5
+$as_echo "$as_me: WARNING: Found libfaad, but version not recent enough. Need faad2 >= 2.7" >&2;}
       HAVE_FAAD="no"
 
 fi
 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
+    else
+
+      HAVE_FAAD="no"
+
+    fi
+  else
+
+      HAVE_FAAD="no"
+
   fi
 
 
 
 
+
+
   LIBS=$gst_check_save_LIBS
   LDFLAGS=$gst_check_save_LDFLAGS
   CFLAGS=$gst_check_save_CFLAGS
@@ -43121,167 +45163,6 @@
 
 
 echo
-{ $as_echo "$as_me:${as_lineno-$LINENO}: *** checking feature: mpg123 audio decoder ***" >&5
-$as_echo "$as_me: *** checking feature: mpg123 audio decoder ***" >&6;}
-if test "xmpg123" != "x"
-then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: *** for plug-ins: mpg123 ***" >&5
-$as_echo "$as_me: *** for plug-ins: mpg123 ***" >&6;}
-fi
-NOUSE=
-if test "x$USE_MPG123" = "xno"; then
-  NOUSE="yes"
-fi
-# Check whether --enable-mpg123 was given.
-if test "${enable_mpg123+set}" = set; then :
-  enableval=$enable_mpg123;  case "${enableval}" in
-      yes) USE_MPG123=yes;;
-      no) USE_MPG123=no;;
-      *) as_fn_error $? "bad value ${enableval} for --enable-mpg123" "$LINENO" 5 ;;
-    esac
-else
-   USE_MPG123=yes
-fi
-
-if test "x$NOUSE" = "xyes"; then
-  USE_MPG123="no"
-  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: *** mpg123 pre-configured not to be built" >&5
-$as_echo "$as_me: WARNING: *** mpg123 pre-configured not to be built" >&2;}
-fi
-NOUSE=
-
-if echo " $GST_PLUGINS_NONPORTED " | tr , ' ' | grep -i " MPG123 " > /dev/null; then
-  USE_MPG123="no"
-  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: *** mpg123 not ported" >&5
-$as_echo "$as_me: WARNING: *** mpg123 not ported" >&2;}
-fi
-
-
-if test x$USE_MPG123 = xyes; then
-
-  gst_check_save_LIBS=$LIBS
-  gst_check_save_LDFLAGS=$LDFLAGS
-  gst_check_save_CFLAGS=$CFLAGS
-  gst_check_save_CPPFLAGS=$CPPFLAGS
-  gst_check_save_CXXFLAGS=$CXXFLAGS
-
-  HAVE_MPG123=no
-
-
-pkg_failed=no
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for MPG123" >&5
-$as_echo_n "checking for MPG123... " >&6; }
-
-if test -n "$PKG_CONFIG"; then
-    if test -n "$MPG123_CFLAGS"; then
-        pkg_cv_MPG123_CFLAGS="$MPG123_CFLAGS"
-    else
-        if test -n "$PKG_CONFIG" && \
-    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libmpg123 >= 1.13\""; } >&5
-  ($PKG_CONFIG --exists --print-errors "libmpg123 >= 1.13") 2>&5
-  ac_status=$?
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; }; then
-  pkg_cv_MPG123_CFLAGS=`$PKG_CONFIG --cflags "libmpg123 >= 1.13" 2>/dev/null`
-else
-  pkg_failed=yes
-fi
-    fi
-else
-	pkg_failed=untried
-fi
-if test -n "$PKG_CONFIG"; then
-    if test -n "$MPG123_LIBS"; then
-        pkg_cv_MPG123_LIBS="$MPG123_LIBS"
-    else
-        if test -n "$PKG_CONFIG" && \
-    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libmpg123 >= 1.13\""; } >&5
-  ($PKG_CONFIG --exists --print-errors "libmpg123 >= 1.13") 2>&5
-  ac_status=$?
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; }; then
-  pkg_cv_MPG123_LIBS=`$PKG_CONFIG --libs "libmpg123 >= 1.13" 2>/dev/null`
-else
-  pkg_failed=yes
-fi
-    fi
-else
-	pkg_failed=untried
-fi
-
-
-
-if test $pkg_failed = yes; then
-
-if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
-        _pkg_short_errors_supported=yes
-else
-        _pkg_short_errors_supported=no
-fi
-        if test $_pkg_short_errors_supported = yes; then
-	        MPG123_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "libmpg123 >= 1.13"`
-        else
-	        MPG123_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "libmpg123 >= 1.13"`
-        fi
-	# Put the nasty error message in config.log where it belongs
-	echo "$MPG123_PKG_ERRORS" >&5
-
-	{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-                HAVE_MPG123="no"
-elif test $pkg_failed = untried; then
-	HAVE_MPG123="no"
-else
-	MPG123_CFLAGS=$pkg_cv_MPG123_CFLAGS
-	MPG123_LIBS=$pkg_cv_MPG123_LIBS
-        { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
-	HAVE_MPG123="yes"
-fi
-
-
-
-
-  LIBS=$gst_check_save_LIBS
-  LDFLAGS=$gst_check_save_LDFLAGS
-  CFLAGS=$gst_check_save_CFLAGS
-  CPPFLAGS=$gst_check_save_CPPFLAGS
-  CXXFLAGS=$gst_check_save_CXXFLAGS
-
-    if test x$HAVE_MPG123 = xno; then
-    USE_MPG123=no
-  else
-    { $as_echo "$as_me:${as_lineno-$LINENO}: *** These plugins will be built: mpg123" >&5
-$as_echo "$as_me: *** These plugins will be built: mpg123" >&6;}
-  fi
-fi
-if test x$USE_MPG123 = xyes; then
-  :
-  if test "xmpg123" != "x"; then
-    GST_PLUGINS_YES="\tmpg123\n$GST_PLUGINS_YES"
-  fi
-
-$as_echo "#define HAVE_MPG123 /**/" >>confdefs.h
-
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: *** These plugins will not be built: mpg123" >&5
-$as_echo "$as_me: *** These plugins will not be built: mpg123" >&6;}
-  if test "xmpg123" != "x"; then
-    GST_PLUGINS_NO="\tmpg123\n$GST_PLUGINS_NO"
-  fi
-  :
-fi
- if test x$USE_MPG123 = xyes; then
-  USE_MPG123_TRUE=
-  USE_MPG123_FALSE='#'
-else
-  USE_MPG123_TRUE='#'
-  USE_MPG123_FALSE=
-fi
-
-
-
-echo
 { $as_echo "$as_me:${as_lineno-$LINENO}: *** checking feature: mplex ***" >&5
 $as_echo "$as_me: *** checking feature: mplex ***" >&6;}
 if test "xmplex" != "x"
@@ -46160,6 +48041,10 @@
   HAVE_RSVG=no
 
 
+  which="librsvg-2.0 >= 2.36.2"
+    required="no"
+
+
 pkg_failed=no
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for RSVG" >&5
 $as_echo_n "checking for RSVG... " >&6; }
@@ -46169,12 +48054,12 @@
         pkg_cv_RSVG_CFLAGS="$RSVG_CFLAGS"
     else
         if test -n "$PKG_CONFIG" && \
-    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"librsvg-2.0 >= 2.36 cairo\""; } >&5
-  ($PKG_CONFIG --exists --print-errors "librsvg-2.0 >= 2.36 cairo") 2>&5
+    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"\$which\""; } >&5
+  ($PKG_CONFIG --exists --print-errors "$which") 2>&5
   ac_status=$?
   $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
   test $ac_status = 0; }; then
-  pkg_cv_RSVG_CFLAGS=`$PKG_CONFIG --cflags "librsvg-2.0 >= 2.36 cairo" 2>/dev/null`
+  pkg_cv_RSVG_CFLAGS=`$PKG_CONFIG --cflags "$which" 2>/dev/null`
 else
   pkg_failed=yes
 fi
@@ -46187,12 +48072,12 @@
         pkg_cv_RSVG_LIBS="$RSVG_LIBS"
     else
         if test -n "$PKG_CONFIG" && \
-    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"librsvg-2.0 >= 2.36 cairo\""; } >&5
-  ($PKG_CONFIG --exists --print-errors "librsvg-2.0 >= 2.36 cairo") 2>&5
+    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"\$which\""; } >&5
+  ($PKG_CONFIG --exists --print-errors "$which") 2>&5
   ac_status=$?
   $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
   test $ac_status = 0; }; then
-  pkg_cv_RSVG_LIBS=`$PKG_CONFIG --libs "librsvg-2.0 >= 2.36 cairo" 2>/dev/null`
+  pkg_cv_RSVG_LIBS=`$PKG_CONFIG --libs "$which" 2>/dev/null`
 else
   pkg_failed=yes
 fi
@@ -46211,9 +48096,9 @@
         _pkg_short_errors_supported=no
 fi
         if test $_pkg_short_errors_supported = yes; then
-	        RSVG_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "librsvg-2.0 >= 2.36 cairo"`
+	        RSVG_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "$which"`
         else
-	        RSVG_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "librsvg-2.0 >= 2.36 cairo"`
+	        RSVG_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "$which"`
         fi
 	# Put the nasty error message in config.log where it belongs
 	echo "$RSVG_PKG_ERRORS" >&5
@@ -46221,11 +48106,23 @@
 	{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
 $as_echo "no" >&6; }
 
-    HAVE_RSVG="no"
+      HAVE_RSVG="no"
+      if test "x$required" = "xyes"; then
+        as_fn_error $? "$RSVG_PKG_ERRORS" "$LINENO" 5
+      else
+        { $as_echo "$as_me:${as_lineno-$LINENO}: $RSVG_PKG_ERRORS" >&5
+$as_echo "$as_me: $RSVG_PKG_ERRORS" >&6;}
+      fi
 
 elif test $pkg_failed = untried; then
 
-    HAVE_RSVG="no"
+      HAVE_RSVG="no"
+      if test "x$required" = "xyes"; then
+        as_fn_error $? "$RSVG_PKG_ERRORS" "$LINENO" 5
+      else
+        { $as_echo "$as_me:${as_lineno-$LINENO}: $RSVG_PKG_ERRORS" >&5
+$as_echo "$as_me: $RSVG_PKG_ERRORS" >&6;}
+      fi
 
 else
 	RSVG_CFLAGS=$pkg_cv_RSVG_CFLAGS
@@ -46233,83 +48130,7 @@
         { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
 $as_echo "yes" >&6; }
 
-    HAVE_RSVG="yes"
-
-pkg_failed=no
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for RSVG_2_36_2" >&5
-$as_echo_n "checking for RSVG_2_36_2... " >&6; }
-
-if test -n "$PKG_CONFIG"; then
-    if test -n "$RSVG_2_36_2_CFLAGS"; then
-        pkg_cv_RSVG_2_36_2_CFLAGS="$RSVG_2_36_2_CFLAGS"
-    else
-        if test -n "$PKG_CONFIG" && \
-    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"librsvg-2.0 >= 2.36.2\""; } >&5
-  ($PKG_CONFIG --exists --print-errors "librsvg-2.0 >= 2.36.2") 2>&5
-  ac_status=$?
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; }; then
-  pkg_cv_RSVG_2_36_2_CFLAGS=`$PKG_CONFIG --cflags "librsvg-2.0 >= 2.36.2" 2>/dev/null`
-else
-  pkg_failed=yes
-fi
-    fi
-else
-	pkg_failed=untried
-fi
-if test -n "$PKG_CONFIG"; then
-    if test -n "$RSVG_2_36_2_LIBS"; then
-        pkg_cv_RSVG_2_36_2_LIBS="$RSVG_2_36_2_LIBS"
-    else
-        if test -n "$PKG_CONFIG" && \
-    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"librsvg-2.0 >= 2.36.2\""; } >&5
-  ($PKG_CONFIG --exists --print-errors "librsvg-2.0 >= 2.36.2") 2>&5
-  ac_status=$?
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; }; then
-  pkg_cv_RSVG_2_36_2_LIBS=`$PKG_CONFIG --libs "librsvg-2.0 >= 2.36.2" 2>/dev/null`
-else
-  pkg_failed=yes
-fi
-    fi
-else
-	pkg_failed=untried
-fi
-
-
-
-if test $pkg_failed = yes; then
-
-if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
-        _pkg_short_errors_supported=yes
-else
-        _pkg_short_errors_supported=no
-fi
-        if test $_pkg_short_errors_supported = yes; then
-	        RSVG_2_36_2_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "librsvg-2.0 >= 2.36.2"`
-        else
-	        RSVG_2_36_2_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "librsvg-2.0 >= 2.36.2"`
-        fi
-	# Put the nasty error message in config.log where it belongs
-	echo "$RSVG_2_36_2_PKG_ERRORS" >&5
-
-	{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-                HAVE_RSVG_2_36_2="no"
-elif test $pkg_failed = untried; then
-	HAVE_RSVG_2_36_2="no"
-else
-	RSVG_2_36_2_CFLAGS=$pkg_cv_RSVG_2_36_2_CFLAGS
-	RSVG_2_36_2_LIBS=$pkg_cv_RSVG_2_36_2_LIBS
-        { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
-	HAVE_RSVG_2_36_2="yes"
-fi
-    if test "x$HAVE_RSVG_2_36_2" = "xyes"; then
-
-$as_echo "#define HAVE_RSVG_2_36_2 1" >>confdefs.h
-
-    fi
+      HAVE_RSVG="yes"
 
 fi
 
@@ -46923,12 +48744,12 @@
         pkg_cv_QT_CFLAGS="$QT_CFLAGS"
     else
         if test -n "$PKG_CONFIG" && \
-    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"Qt5Core Qt5Gui Qt5Quick >= 5.4.0\""; } >&5
-  ($PKG_CONFIG --exists --print-errors "Qt5Core Qt5Gui Qt5Quick >= 5.4.0") 2>&5
+    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"Qt5Core Qt5Gui Qt5Qml Qt5Quick >= 5.4.0\""; } >&5
+  ($PKG_CONFIG --exists --print-errors "Qt5Core Qt5Gui Qt5Qml Qt5Quick >= 5.4.0") 2>&5
   ac_status=$?
   $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
   test $ac_status = 0; }; then
-  pkg_cv_QT_CFLAGS=`$PKG_CONFIG --cflags "Qt5Core Qt5Gui Qt5Quick >= 5.4.0" 2>/dev/null`
+  pkg_cv_QT_CFLAGS=`$PKG_CONFIG --cflags "Qt5Core Qt5Gui Qt5Qml Qt5Quick >= 5.4.0" 2>/dev/null`
 else
   pkg_failed=yes
 fi
@@ -46941,12 +48762,12 @@
         pkg_cv_QT_LIBS="$QT_LIBS"
     else
         if test -n "$PKG_CONFIG" && \
-    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"Qt5Core Qt5Gui Qt5Quick >= 5.4.0\""; } >&5
-  ($PKG_CONFIG --exists --print-errors "Qt5Core Qt5Gui Qt5Quick >= 5.4.0") 2>&5
+    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"Qt5Core Qt5Gui Qt5Qml Qt5Quick >= 5.4.0\""; } >&5
+  ($PKG_CONFIG --exists --print-errors "Qt5Core Qt5Gui Qt5Qml Qt5Quick >= 5.4.0") 2>&5
   ac_status=$?
   $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
   test $ac_status = 0; }; then
-  pkg_cv_QT_LIBS=`$PKG_CONFIG --libs "Qt5Core Qt5Gui Qt5Quick >= 5.4.0" 2>/dev/null`
+  pkg_cv_QT_LIBS=`$PKG_CONFIG --libs "Qt5Core Qt5Gui Qt5Qml Qt5Quick >= 5.4.0" 2>/dev/null`
 else
   pkg_failed=yes
 fi
@@ -46965,9 +48786,9 @@
         _pkg_short_errors_supported=no
 fi
         if test $_pkg_short_errors_supported = yes; then
-	        QT_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "Qt5Core Qt5Gui Qt5Quick >= 5.4.0"`
+	        QT_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "Qt5Core Qt5Gui Qt5Qml Qt5Quick >= 5.4.0"`
         else
-	        QT_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "Qt5Core Qt5Gui Qt5Quick >= 5.4.0"`
+	        QT_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "Qt5Core Qt5Gui Qt5Qml Qt5Quick >= 5.4.0"`
         fi
 	# Put the nasty error message in config.log where it belongs
 	echo "$QT_PKG_ERRORS" >&5
@@ -47298,6 +49119,264 @@
 
 fi
         fi
+        if test "x$GST_GL_HAVE_WINDOW_ANDROID" = "x1" -a "x$GST_GL_HAVE_PLATFORM_EGL" = "x1"; then
+
+pkg_failed=no
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for QT_ANDROID" >&5
+$as_echo_n "checking for QT_ANDROID... " >&6; }
+
+if test -n "$PKG_CONFIG"; then
+    if test -n "$QT_ANDROID_CFLAGS"; then
+        pkg_cv_QT_ANDROID_CFLAGS="$QT_ANDROID_CFLAGS"
+    else
+        if test -n "$PKG_CONFIG" && \
+    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"Qt5AndroidExtras\""; } >&5
+  ($PKG_CONFIG --exists --print-errors "Qt5AndroidExtras") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+  pkg_cv_QT_ANDROID_CFLAGS=`$PKG_CONFIG --cflags "Qt5AndroidExtras" 2>/dev/null`
+else
+  pkg_failed=yes
+fi
+    fi
+else
+	pkg_failed=untried
+fi
+if test -n "$PKG_CONFIG"; then
+    if test -n "$QT_ANDROID_LIBS"; then
+        pkg_cv_QT_ANDROID_LIBS="$QT_ANDROID_LIBS"
+    else
+        if test -n "$PKG_CONFIG" && \
+    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"Qt5AndroidExtras\""; } >&5
+  ($PKG_CONFIG --exists --print-errors "Qt5AndroidExtras") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+  pkg_cv_QT_ANDROID_LIBS=`$PKG_CONFIG --libs "Qt5AndroidExtras" 2>/dev/null`
+else
+  pkg_failed=yes
+fi
+    fi
+else
+	pkg_failed=untried
+fi
+
+
+
+if test $pkg_failed = yes; then
+
+if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
+        _pkg_short_errors_supported=yes
+else
+        _pkg_short_errors_supported=no
+fi
+        if test $_pkg_short_errors_supported = yes; then
+	        QT_ANDROID_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "Qt5AndroidExtras"`
+        else
+	        QT_ANDROID_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "Qt5AndroidExtras"`
+        fi
+	# Put the nasty error message in config.log where it belongs
+	echo "$QT_ANDROID_PKG_ERRORS" >&5
+
+	{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+                { $as_echo "$as_me:${as_lineno-$LINENO}: Could not find Qt Android integration" >&5
+$as_echo "$as_me: Could not find Qt Android integration" >&6;}
+elif test $pkg_failed = untried; then
+	{ $as_echo "$as_me:${as_lineno-$LINENO}: Could not find Qt Android integration" >&5
+$as_echo "$as_me: Could not find Qt Android integration" >&6;}
+else
+	QT_ANDROID_CFLAGS=$pkg_cv_QT_ANDROID_CFLAGS
+	QT_ANDROID_LIBS=$pkg_cv_QT_ANDROID_LIBS
+        { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+
+            # c++ on android requires a standard library and there are multiple
+            # choices.  cerbero provides a pkg-config file the describes a choice
+            # so try to use that.  Outside cerbero one has to pass these flags
+            # manually for the library one is using
+
+pkg_failed=no
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNUSTL" >&5
+$as_echo_n "checking for GNUSTL... " >&6; }
+
+if test -n "$PKG_CONFIG"; then
+    if test -n "$GNUSTL_CFLAGS"; then
+        pkg_cv_GNUSTL_CFLAGS="$GNUSTL_CFLAGS"
+    else
+        if test -n "$PKG_CONFIG" && \
+    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gnustl\""; } >&5
+  ($PKG_CONFIG --exists --print-errors "gnustl") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+  pkg_cv_GNUSTL_CFLAGS=`$PKG_CONFIG --cflags "gnustl" 2>/dev/null`
+else
+  pkg_failed=yes
+fi
+    fi
+else
+	pkg_failed=untried
+fi
+if test -n "$PKG_CONFIG"; then
+    if test -n "$GNUSTL_LIBS"; then
+        pkg_cv_GNUSTL_LIBS="$GNUSTL_LIBS"
+    else
+        if test -n "$PKG_CONFIG" && \
+    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gnustl\""; } >&5
+  ($PKG_CONFIG --exists --print-errors "gnustl") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+  pkg_cv_GNUSTL_LIBS=`$PKG_CONFIG --libs "gnustl" 2>/dev/null`
+else
+  pkg_failed=yes
+fi
+    fi
+else
+	pkg_failed=untried
+fi
+
+
+
+if test $pkg_failed = yes; then
+
+if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
+        _pkg_short_errors_supported=yes
+else
+        _pkg_short_errors_supported=no
+fi
+        if test $_pkg_short_errors_supported = yes; then
+	        GNUSTL_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "gnustl"`
+        else
+	        GNUSTL_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "gnustl"`
+        fi
+	# Put the nasty error message in config.log where it belongs
+	echo "$GNUSTL_PKG_ERRORS" >&5
+
+	{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+
+              { $as_echo "$as_me:${as_lineno-$LINENO}: Could not find Standard C++ library" >&5
+$as_echo "$as_me: Could not find Standard C++ library" >&6;}
+elif test $pkg_failed = untried; then
+
+              { $as_echo "$as_me:${as_lineno-$LINENO}: Could not find Standard C++ library" >&5
+$as_echo "$as_me: Could not find Standard C++ library" >&6;}
+else
+	GNUSTL_CFLAGS=$pkg_cv_GNUSTL_CFLAGS
+	GNUSTL_LIBS=$pkg_cv_GNUSTL_LIBS
+        { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+
+              QT_CFLAGS="$QT_CFLAGS $GNUSTL_CFLAGS"
+              QT_LIBS="$QT_LIBS $GNUSTL_LIBS"
+
+fi
+
+
+$as_echo "#define HAVE_QT_ANDROID /**/" >>confdefs.h
+
+            QT_CFLAGS="$QT_CFLAGS $QT_ANDROID_CFLAGS"
+            QT_LIBS="$QT_LIBS $QT_ANDROID_LIBS"
+            HAVE_QT_WINDOWING="yes"
+
+fi
+        fi
+        if test "x$GST_GL_HAVE_WINDOW_COCOA" = "x1" -a "x$GST_GL_HAVE_PLATFORM_CGL" = "x1"; then
+
+pkg_failed=no
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for QT_MAC" >&5
+$as_echo_n "checking for QT_MAC... " >&6; }
+
+if test -n "$PKG_CONFIG"; then
+    if test -n "$QT_MAC_CFLAGS"; then
+        pkg_cv_QT_MAC_CFLAGS="$QT_MAC_CFLAGS"
+    else
+        if test -n "$PKG_CONFIG" && \
+    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"Qt5MacExtras\""; } >&5
+  ($PKG_CONFIG --exists --print-errors "Qt5MacExtras") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+  pkg_cv_QT_MAC_CFLAGS=`$PKG_CONFIG --cflags "Qt5MacExtras" 2>/dev/null`
+else
+  pkg_failed=yes
+fi
+    fi
+else
+	pkg_failed=untried
+fi
+if test -n "$PKG_CONFIG"; then
+    if test -n "$QT_MAC_LIBS"; then
+        pkg_cv_QT_MAC_LIBS="$QT_MAC_LIBS"
+    else
+        if test -n "$PKG_CONFIG" && \
+    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"Qt5MacExtras\""; } >&5
+  ($PKG_CONFIG --exists --print-errors "Qt5MacExtras") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+  pkg_cv_QT_MAC_LIBS=`$PKG_CONFIG --libs "Qt5MacExtras" 2>/dev/null`
+else
+  pkg_failed=yes
+fi
+    fi
+else
+	pkg_failed=untried
+fi
+
+
+
+if test $pkg_failed = yes; then
+
+if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
+        _pkg_short_errors_supported=yes
+else
+        _pkg_short_errors_supported=no
+fi
+        if test $_pkg_short_errors_supported = yes; then
+	        QT_MAC_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "Qt5MacExtras"`
+        else
+	        QT_MAC_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "Qt5MacExtras"`
+        fi
+	# Put the nasty error message in config.log where it belongs
+	echo "$QT_MAC_PKG_ERRORS" >&5
+
+	{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+                { $as_echo "$as_me:${as_lineno-$LINENO}: Could not find Qt Mac integration" >&5
+$as_echo "$as_me: Could not find Qt Mac integration" >&6;}
+elif test $pkg_failed = untried; then
+	{ $as_echo "$as_me:${as_lineno-$LINENO}: Could not find Qt Mac integration" >&5
+$as_echo "$as_me: Could not find Qt Mac integration" >&6;}
+else
+	QT_MAC_CFLAGS=$pkg_cv_QT_MAC_CFLAGS
+	QT_MAC_LIBS=$pkg_cv_QT_MAC_LIBS
+        { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+
+
+$as_echo "#define HAVE_QT_MAC /**/" >>confdefs.h
+
+            QT_LIBDIR=`$PKG_CONFIG --variable=libdir Qt5Core`
+            QT_CFLAGS="$QT_CFLAGS $QT_MAC_CFLAGS -F$QT_LIBDIR -framework QtCore -framework QtGui -framework QtQuick -framework QtQml -framework QtMacExtras"
+            QT_LIBS="$QT_LIBS $QT_MAC_LIBS"
+            HAVE_QT_WINDOWING="yes"
+
+fi
+        fi
+        if test "x$GST_GL_HAVE_WINDOW_EAGL" = "x1" -a "x$GST_GL_HAVE_PLATFORM_EAGL" = "x1"; then
+          if test "x$HAVE_IOS" = "xyes"; then
+            # iOS doesn't have its own extras package so if we have the core
+            # modules we are good to go
+
+$as_echo "#define HAVE_QT_IOS /**/" >>confdefs.h
+
+            HAVE_QT_WINDOWING="yes"
+          fi
+        fi
         if test "x$HAVE_QT_WINDOWING" = "xno"; then
           { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Could not find any Qt Windowing integration" >&5
 $as_echo "$as_me: WARNING: Could not find any Qt Windowing integration" >&2;}
@@ -47350,6 +49429,148 @@
 
 
 echo
+{ $as_echo "$as_me:${as_lineno-$LINENO}: *** checking feature: Vulkan elements ***" >&5
+$as_echo "$as_me: *** checking feature: Vulkan elements ***" >&6;}
+if test "xvulkan" != "x"
+then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: *** for plug-ins: vulkan ***" >&5
+$as_echo "$as_me: *** for plug-ins: vulkan ***" >&6;}
+fi
+NOUSE=
+if test "x$USE_VULKAN" = "xno"; then
+  NOUSE="yes"
+fi
+# Check whether --enable-vulkan was given.
+if test "${enable_vulkan+set}" = set; then :
+  enableval=$enable_vulkan;  case "${enableval}" in
+      yes) USE_VULKAN=yes;;
+      no) USE_VULKAN=no;;
+      *) as_fn_error $? "bad value ${enableval} for --enable-vulkan" "$LINENO" 5 ;;
+    esac
+else
+   USE_VULKAN=yes
+fi
+
+if test "x$NOUSE" = "xyes"; then
+  USE_VULKAN="no"
+  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: *** vulkan pre-configured not to be built" >&5
+$as_echo "$as_me: WARNING: *** vulkan pre-configured not to be built" >&2;}
+fi
+NOUSE=
+
+if echo " $GST_PLUGINS_NONPORTED " | tr , ' ' | grep -i " VULKAN " > /dev/null; then
+  USE_VULKAN="no"
+  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: *** vulkan not ported" >&5
+$as_echo "$as_me: WARNING: *** vulkan not ported" >&2;}
+fi
+
+
+if test x$USE_VULKAN = xyes; then
+
+  gst_check_save_LIBS=$LIBS
+  gst_check_save_LDFLAGS=$LDFLAGS
+  gst_check_save_CFLAGS=$CFLAGS
+  gst_check_save_CPPFLAGS=$CPPFLAGS
+  gst_check_save_CXXFLAGS=$CXXFLAGS
+
+  HAVE_VULKAN=no
+
+  HAVE_VULKAN=no
+  ac_fn_c_check_header_mongrel "$LINENO" "vulkan/vulkan.h" "ac_cv_header_vulkan_vulkan_h" "$ac_includes_default"
+if test "x$ac_cv_header_vulkan_vulkan_h" = xyes; then :
+
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for vkCreateDevice in -lvulkan" >&5
+$as_echo_n "checking for vkCreateDevice in -lvulkan... " >&6; }
+if ${ac_cv_lib_vulkan_vkCreateDevice+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lvulkan  $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char vkCreateDevice ();
+int
+main ()
+{
+return vkCreateDevice ();
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_lib_vulkan_vkCreateDevice=yes
+else
+  ac_cv_lib_vulkan_vkCreateDevice=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_vulkan_vkCreateDevice" >&5
+$as_echo "$ac_cv_lib_vulkan_vkCreateDevice" >&6; }
+if test "x$ac_cv_lib_vulkan_vkCreateDevice" = xyes; then :
+
+      VULKAN_LIBS="-lvulkan"
+
+            if test "x$HAVE_XCB" = "xyes"; then
+        HAVE_VULKAN=yes
+      fi
+
+fi
+
+
+fi
+
+
+
+
+  LIBS=$gst_check_save_LIBS
+  LDFLAGS=$gst_check_save_LDFLAGS
+  CFLAGS=$gst_check_save_CFLAGS
+  CPPFLAGS=$gst_check_save_CPPFLAGS
+  CXXFLAGS=$gst_check_save_CXXFLAGS
+
+    if test x$HAVE_VULKAN = xno; then
+    USE_VULKAN=no
+  else
+    { $as_echo "$as_me:${as_lineno-$LINENO}: *** These plugins will be built: vulkan" >&5
+$as_echo "$as_me: *** These plugins will be built: vulkan" >&6;}
+  fi
+fi
+if test x$USE_VULKAN = xyes; then
+  :
+  if test "xvulkan" != "x"; then
+    GST_PLUGINS_YES="\tvulkan\n$GST_PLUGINS_YES"
+  fi
+
+$as_echo "#define HAVE_VULKAN /**/" >>confdefs.h
+
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: *** These plugins will not be built: vulkan" >&5
+$as_echo "$as_me: *** These plugins will not be built: vulkan" >&6;}
+  if test "xvulkan" != "x"; then
+    GST_PLUGINS_NO="\tvulkan\n$GST_PLUGINS_NO"
+  fi
+  :
+fi
+ if test x$USE_VULKAN = xyes; then
+  USE_VULKAN_TRUE=
+  USE_VULKAN_FALSE='#'
+else
+  USE_VULKAN_TRUE='#'
+  USE_VULKAN_FALSE=
+fi
+
+
+
+echo
 { $as_echo "$as_me:${as_lineno-$LINENO}: *** checking feature: libvisual visualization library ***" >&5
 $as_echo "$as_me: *** checking feature: libvisual visualization library ***" >&6;}
 if test "xlibvisual" != "x"
@@ -53270,419 +55491,6 @@
 
 
 echo
-{ $as_echo "$as_me:${as_lineno-$LINENO}: *** checking feature: GSettings plugin ***" >&5
-$as_echo "$as_me: *** checking feature: GSettings plugin ***" >&6;}
-if test "xgsettings" != "x"
-then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: *** for plug-ins: gsettings ***" >&5
-$as_echo "$as_me: *** for plug-ins: gsettings ***" >&6;}
-fi
-NOUSE=
-if test "x$USE_GSETTINGS" = "xno"; then
-  NOUSE="yes"
-fi
-# Check whether --enable-gsettings was given.
-if test "${enable_gsettings+set}" = set; then :
-  enableval=$enable_gsettings;  case "${enableval}" in
-      yes) USE_GSETTINGS=yes;;
-      no) USE_GSETTINGS=no;;
-      *) as_fn_error $? "bad value ${enableval} for --enable-gsettings" "$LINENO" 5 ;;
-    esac
-else
-   USE_GSETTINGS=yes
-fi
-
-if test "x$NOUSE" = "xyes"; then
-  USE_GSETTINGS="no"
-  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: *** gsettings pre-configured not to be built" >&5
-$as_echo "$as_me: WARNING: *** gsettings pre-configured not to be built" >&2;}
-fi
-NOUSE=
-
-if echo " $GST_PLUGINS_NONPORTED " | tr , ' ' | grep -i " GSETTINGS " > /dev/null; then
-  USE_GSETTINGS="no"
-  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: *** gsettings not ported" >&5
-$as_echo "$as_me: WARNING: *** gsettings not ported" >&2;}
-fi
-
-
-if test x$USE_GSETTINGS = xyes; then
-
-  gst_check_save_LIBS=$LIBS
-  gst_check_save_LDFLAGS=$LDFLAGS
-  gst_check_save_CFLAGS=$CFLAGS
-  gst_check_save_CPPFLAGS=$CPPFLAGS
-  gst_check_save_CXXFLAGS=$CXXFLAGS
-
-  HAVE_GSETTINGS=no
-
-
-  which="gio-2.0 >= 2.25.0"
-    required="no"
-
-
-pkg_failed=no
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for GSETTINGS" >&5
-$as_echo_n "checking for GSETTINGS... " >&6; }
-
-if test -n "$PKG_CONFIG"; then
-    if test -n "$GSETTINGS_CFLAGS"; then
-        pkg_cv_GSETTINGS_CFLAGS="$GSETTINGS_CFLAGS"
-    else
-        if test -n "$PKG_CONFIG" && \
-    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"\$which\""; } >&5
-  ($PKG_CONFIG --exists --print-errors "$which") 2>&5
-  ac_status=$?
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; }; then
-  pkg_cv_GSETTINGS_CFLAGS=`$PKG_CONFIG --cflags "$which" 2>/dev/null`
-else
-  pkg_failed=yes
-fi
-    fi
-else
-	pkg_failed=untried
-fi
-if test -n "$PKG_CONFIG"; then
-    if test -n "$GSETTINGS_LIBS"; then
-        pkg_cv_GSETTINGS_LIBS="$GSETTINGS_LIBS"
-    else
-        if test -n "$PKG_CONFIG" && \
-    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"\$which\""; } >&5
-  ($PKG_CONFIG --exists --print-errors "$which") 2>&5
-  ac_status=$?
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; }; then
-  pkg_cv_GSETTINGS_LIBS=`$PKG_CONFIG --libs "$which" 2>/dev/null`
-else
-  pkg_failed=yes
-fi
-    fi
-else
-	pkg_failed=untried
-fi
-
-
-
-if test $pkg_failed = yes; then
-
-if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
-        _pkg_short_errors_supported=yes
-else
-        _pkg_short_errors_supported=no
-fi
-        if test $_pkg_short_errors_supported = yes; then
-	        GSETTINGS_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "$which"`
-        else
-	        GSETTINGS_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "$which"`
-        fi
-	# Put the nasty error message in config.log where it belongs
-	echo "$GSETTINGS_PKG_ERRORS" >&5
-
-	{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-
-      HAVE_GSETTINGS="no"
-      if test "x$required" = "xyes"; then
-        as_fn_error $? "$GSETTINGS_PKG_ERRORS" "$LINENO" 5
-      else
-        { $as_echo "$as_me:${as_lineno-$LINENO}: $GSETTINGS_PKG_ERRORS" >&5
-$as_echo "$as_me: $GSETTINGS_PKG_ERRORS" >&6;}
-      fi
-
-elif test $pkg_failed = untried; then
-
-      HAVE_GSETTINGS="no"
-      if test "x$required" = "xyes"; then
-        as_fn_error $? "$GSETTINGS_PKG_ERRORS" "$LINENO" 5
-      else
-        { $as_echo "$as_me:${as_lineno-$LINENO}: $GSETTINGS_PKG_ERRORS" >&5
-$as_echo "$as_me: $GSETTINGS_PKG_ERRORS" >&6;}
-      fi
-
-else
-	GSETTINGS_CFLAGS=$pkg_cv_GSETTINGS_CFLAGS
-	GSETTINGS_LIBS=$pkg_cv_GSETTINGS_LIBS
-        { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
-
-      HAVE_GSETTINGS="yes"
-
-fi
-
-
-  if test "x$HAVE_GSETTINGS" = "xyes"; then
-
-
-  # Check whether --enable-schemas-compile was given.
-if test "${enable_schemas_compile+set}" = set; then :
-  enableval=$enable_schemas_compile; case ${enableval} in
-                  yes) GSETTINGS_DISABLE_SCHEMAS_COMPILE=""  ;;
-                  no)  GSETTINGS_DISABLE_SCHEMAS_COMPILE="1" ;;
-                  *) as_fn_error $? "bad value ${enableval} for --enable-schemas-compile" "$LINENO" 5 ;;
-                 esac
-fi
-
-
-
-
-if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then
-	if test -n "$ac_tool_prefix"; then
-  # Extract the first word of "${ac_tool_prefix}pkg-config", so it can be a program name with args.
-set dummy ${ac_tool_prefix}pkg-config; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_path_PKG_CONFIG+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  case $PKG_CONFIG in
-  [\\/]* | ?:[\\/]*)
-  ac_cv_path_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test with a path.
-  ;;
-  *)
-  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_path_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-  done
-IFS=$as_save_IFS
-
-  ;;
-esac
-fi
-PKG_CONFIG=$ac_cv_path_PKG_CONFIG
-if test -n "$PKG_CONFIG"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PKG_CONFIG" >&5
-$as_echo "$PKG_CONFIG" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-fi
-if test -z "$ac_cv_path_PKG_CONFIG"; then
-  ac_pt_PKG_CONFIG=$PKG_CONFIG
-  # Extract the first word of "pkg-config", so it can be a program name with args.
-set dummy pkg-config; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_path_ac_pt_PKG_CONFIG+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  case $ac_pt_PKG_CONFIG in
-  [\\/]* | ?:[\\/]*)
-  ac_cv_path_ac_pt_PKG_CONFIG="$ac_pt_PKG_CONFIG" # Let the user override the test with a path.
-  ;;
-  *)
-  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_path_ac_pt_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-  done
-IFS=$as_save_IFS
-
-  ;;
-esac
-fi
-ac_pt_PKG_CONFIG=$ac_cv_path_ac_pt_PKG_CONFIG
-if test -n "$ac_pt_PKG_CONFIG"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_PKG_CONFIG" >&5
-$as_echo "$ac_pt_PKG_CONFIG" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-  if test "x$ac_pt_PKG_CONFIG" = x; then
-    PKG_CONFIG=""
-  else
-    case $cross_compiling:$ac_tool_warned in
-yes:)
-{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
-ac_tool_warned=yes ;;
-esac
-    PKG_CONFIG=$ac_pt_PKG_CONFIG
-  fi
-else
-  PKG_CONFIG="$ac_cv_path_PKG_CONFIG"
-fi
-
-fi
-if test -n "$PKG_CONFIG"; then
-	_pkg_min_version=0.16
-	{ $as_echo "$as_me:${as_lineno-$LINENO}: checking pkg-config is at least version $_pkg_min_version" >&5
-$as_echo_n "checking pkg-config is at least version $_pkg_min_version... " >&6; }
-	if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then
-		{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
-	else
-		{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-		PKG_CONFIG=""
-	fi
-
-fi
-  gsettingsschemadir=${datadir}/glib-2.0/schemas
-
-  if test x$cross_compiling != xyes; then
-    GLIB_COMPILE_SCHEMAS=`$PKG_CONFIG --variable glib_compile_schemas gio-2.0`
-  else
-    # Extract the first word of "glib-compile-schemas", so it can be a program name with args.
-set dummy glib-compile-schemas; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_path_GLIB_COMPILE_SCHEMAS+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  case $GLIB_COMPILE_SCHEMAS in
-  [\\/]* | ?:[\\/]*)
-  ac_cv_path_GLIB_COMPILE_SCHEMAS="$GLIB_COMPILE_SCHEMAS" # Let the user override the test with a path.
-  ;;
-  *)
-  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_path_GLIB_COMPILE_SCHEMAS="$as_dir/$ac_word$ac_exec_ext"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-  done
-IFS=$as_save_IFS
-
-  ;;
-esac
-fi
-GLIB_COMPILE_SCHEMAS=$ac_cv_path_GLIB_COMPILE_SCHEMAS
-if test -n "$GLIB_COMPILE_SCHEMAS"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GLIB_COMPILE_SCHEMAS" >&5
-$as_echo "$GLIB_COMPILE_SCHEMAS" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-  fi
-
-  if test "x$GLIB_COMPILE_SCHEMAS" = "x"; then
-    as_fn_error $? "glib-compile-schemas not found." "$LINENO" 5
-  else
-    :
-  fi
-
-  GSETTINGS_RULES='
-.PHONY : uninstall-gsettings-schemas install-gsettings-schemas clean-gsettings-schemas
-
-mostlyclean-am: clean-gsettings-schemas
-
-gsettings__enum_file = $(addsuffix .enums.xml,$(gsettings_ENUM_NAMESPACE))
-
-%.gschema.valid: %.gschema.xml $(gsettings__enum_file)
-	$(AM_V_GEN) if test -f "$<"; then d=; else d="$(srcdir)/"; fi; $(GLIB_COMPILE_SCHEMAS) --strict --dry-run $(addprefix --schema-file=,$(gsettings__enum_file)) --schema-file=$${d}$< && touch $@
-
-all-am: $(gsettings_SCHEMAS:.xml=.valid)
-uninstall-am: uninstall-gsettings-schemas
-install-data-am: install-gsettings-schemas
-
-.SECONDARY: $(gsettings_SCHEMAS)
-
-install-gsettings-schemas: $(gsettings_SCHEMAS) $(gsettings__enum_file)
-	@$(NORMAL_INSTALL)
-	if test -n "$^"; then \
-		test -z "$(gsettingsschemadir)" || $(MKDIR_P) "$(DESTDIR)$(gsettingsschemadir)"; \
-		$(INSTALL_DATA) $^ "$(DESTDIR)$(gsettingsschemadir)"; \
-		test -n "$(GSETTINGS_DISABLE_SCHEMAS_COMPILE)$(DESTDIR)" || $(GLIB_COMPILE_SCHEMAS) $(gsettingsschemadir); \
-	fi
-
-uninstall-gsettings-schemas:
-	@$(NORMAL_UNINSTALL)
-	@list='\''$(gsettings_SCHEMAS) $(gsettings__enum_file)'\''; test -n "$(gsettingsschemadir)" || list=; \
-	files=`for p in $$list; do echo $$p; done | sed -e '\''s|^.*/||'\''`; \
-	test -n "$$files" || exit 0; \
-	echo " ( cd '\''$(DESTDIR)$(gsettingsschemadir)'\'' && rm -f" $$files ")"; \
-	cd "$(DESTDIR)$(gsettingsschemadir)" && rm -f $$files
-	test -n "$(GSETTINGS_DISABLE_SCHEMAS_COMPILE)$(DESTDIR)" || $(GLIB_COMPILE_SCHEMAS) $(gsettingsschemadir)
-
-clean-gsettings-schemas:
-	rm -f $(gsettings_SCHEMAS:.xml=.valid) $(gsettings__enum_file)
-
-ifdef gsettings_ENUM_NAMESPACE
-$(gsettings__enum_file): $(gsettings_ENUM_FILES)
-	$(AM_V_GEN) glib-mkenums --comments '\''<!-- @comment@ -->'\'' --fhead "<schemalist>" --vhead "  <@type@ id='\''$(gsettings_ENUM_NAMESPACE).@EnumName@'\''>" --vprod "    <value nick='\''@valuenick@'\'' value='\''@valuenum@'\''/>" --vtail "  </@type@>" --ftail "</schemalist>" $^ > $@.tmp && mv $@.tmp $@
-endif
-'
-
-
-
-
-
-
-  fi
-
-
-  LIBS=$gst_check_save_LIBS
-  LDFLAGS=$gst_check_save_LDFLAGS
-  CFLAGS=$gst_check_save_CFLAGS
-  CPPFLAGS=$gst_check_save_CPPFLAGS
-  CXXFLAGS=$gst_check_save_CXXFLAGS
-
-    if test x$HAVE_GSETTINGS = xno; then
-    USE_GSETTINGS=no
-  else
-    { $as_echo "$as_me:${as_lineno-$LINENO}: *** These plugins will be built: gsettings" >&5
-$as_echo "$as_me: *** These plugins will be built: gsettings" >&6;}
-  fi
-fi
-if test x$USE_GSETTINGS = xyes; then
-  :
-  if test "xgsettings" != "x"; then
-    GST_PLUGINS_YES="\tgsettings\n$GST_PLUGINS_YES"
-  fi
-
-$as_echo "#define HAVE_GSETTINGS /**/" >>confdefs.h
-
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: *** These plugins will not be built: gsettings" >&5
-$as_echo "$as_me: *** These plugins will not be built: gsettings" >&6;}
-  if test "xgsettings" != "x"; then
-    GST_PLUGINS_NO="\tgsettings\n$GST_PLUGINS_NO"
-  fi
-  :
-fi
- if test x$USE_GSETTINGS = xyes; then
-  USE_GSETTINGS_TRUE=
-  USE_GSETTINGS_FALSE='#'
-else
-  USE_GSETTINGS_TRUE='#'
-  USE_GSETTINGS_FALSE=
-fi
-
-
-
-echo
 { $as_echo "$as_me:${as_lineno-$LINENO}: *** checking feature: sndio audio ***" >&5
 $as_echo "$as_me: *** checking feature: sndio audio ***" >&6;}
 if test "xsndio" != "x"
@@ -53826,6 +55634,26 @@
 
 
 
+
+# Check whether --with-hls-crypto was given.
+if test "${with_hls_crypto+set}" = set; then :
+  withval=$with_hls_crypto;
+    case $with_hls_crypto in #(
+  nettle) :
+     ;; #(
+  libgcrypt) :
+     ;; #(
+  openssl) :
+     ;; #(
+  *) :
+    with_hls_crypto=auto
+     ;;
+esac
+
+
+fi
+
+
 echo
 { $as_echo "$as_me:${as_lineno-$LINENO}: *** checking feature: http live streaming plugin ***" >&5
 $as_echo "$as_me: *** checking feature: http live streaming plugin ***" >&6;}
@@ -53873,6 +55701,389 @@
 
   HAVE_HLS=no
 
+  case $with_hls_crypto in #(
+  nettle) :
+
+
+pkg_failed=no
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for NETTLE" >&5
+$as_echo_n "checking for NETTLE... " >&6; }
+
+if test -n "$PKG_CONFIG"; then
+    if test -n "$NETTLE_CFLAGS"; then
+        pkg_cv_NETTLE_CFLAGS="$NETTLE_CFLAGS"
+    else
+        if test -n "$PKG_CONFIG" && \
+    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"nettle\""; } >&5
+  ($PKG_CONFIG --exists --print-errors "nettle") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+  pkg_cv_NETTLE_CFLAGS=`$PKG_CONFIG --cflags "nettle" 2>/dev/null`
+else
+  pkg_failed=yes
+fi
+    fi
+else
+	pkg_failed=untried
+fi
+if test -n "$PKG_CONFIG"; then
+    if test -n "$NETTLE_LIBS"; then
+        pkg_cv_NETTLE_LIBS="$NETTLE_LIBS"
+    else
+        if test -n "$PKG_CONFIG" && \
+    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"nettle\""; } >&5
+  ($PKG_CONFIG --exists --print-errors "nettle") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+  pkg_cv_NETTLE_LIBS=`$PKG_CONFIG --libs "nettle" 2>/dev/null`
+else
+  pkg_failed=yes
+fi
+    fi
+else
+	pkg_failed=untried
+fi
+
+
+
+if test $pkg_failed = yes; then
+
+if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
+        _pkg_short_errors_supported=yes
+else
+        _pkg_short_errors_supported=no
+fi
+        if test $_pkg_short_errors_supported = yes; then
+	        NETTLE_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "nettle"`
+        else
+	        NETTLE_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "nettle"`
+        fi
+	# Put the nasty error message in config.log where it belongs
+	echo "$NETTLE_PKG_ERRORS" >&5
+
+	{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+                as_fn_error $? "Could not find nettle library" "$LINENO" 5
+elif test $pkg_failed = untried; then
+	as_fn_error $? "Could not find nettle library" "$LINENO" 5
+else
+	NETTLE_CFLAGS=$pkg_cv_NETTLE_CFLAGS
+	NETTLE_LIBS=$pkg_cv_NETTLE_LIBS
+        { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+
+
+$as_echo "#define HAVE_NETTLE 1" >>confdefs.h
+
+        HAVE_HLS="yes"
+
+fi
+     ;; #(
+  libgcrypt) :
+
+
+
+# Check whether --with-libgcrypt-prefix was given.
+if test "${with_libgcrypt_prefix+set}" = set; then :
+  withval=$with_libgcrypt_prefix; libgcrypt_config_prefix="$withval"
+else
+  libgcrypt_config_prefix=""
+fi
+
+  if test x$libgcrypt_config_prefix != x ; then
+     if test x${LIBGCRYPT_CONFIG+set} != xset ; then
+        LIBGCRYPT_CONFIG=$libgcrypt_config_prefix/bin/libgcrypt-config
+     fi
+  fi
+
+  if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}libgcrypt-config", so it can be a program name with args.
+set dummy ${ac_tool_prefix}libgcrypt-config; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_path_LIBGCRYPT_CONFIG+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  case $LIBGCRYPT_CONFIG in
+  [\\/]* | ?:[\\/]*)
+  ac_cv_path_LIBGCRYPT_CONFIG="$LIBGCRYPT_CONFIG" # Let the user override the test with a path.
+  ;;
+  *)
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_path_LIBGCRYPT_CONFIG="$as_dir/$ac_word$ac_exec_ext"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+  ;;
+esac
+fi
+LIBGCRYPT_CONFIG=$ac_cv_path_LIBGCRYPT_CONFIG
+if test -n "$LIBGCRYPT_CONFIG"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LIBGCRYPT_CONFIG" >&5
+$as_echo "$LIBGCRYPT_CONFIG" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_path_LIBGCRYPT_CONFIG"; then
+  ac_pt_LIBGCRYPT_CONFIG=$LIBGCRYPT_CONFIG
+  # Extract the first word of "libgcrypt-config", so it can be a program name with args.
+set dummy libgcrypt-config; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_path_ac_pt_LIBGCRYPT_CONFIG+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  case $ac_pt_LIBGCRYPT_CONFIG in
+  [\\/]* | ?:[\\/]*)
+  ac_cv_path_ac_pt_LIBGCRYPT_CONFIG="$ac_pt_LIBGCRYPT_CONFIG" # Let the user override the test with a path.
+  ;;
+  *)
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_path_ac_pt_LIBGCRYPT_CONFIG="$as_dir/$ac_word$ac_exec_ext"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+  ;;
+esac
+fi
+ac_pt_LIBGCRYPT_CONFIG=$ac_cv_path_ac_pt_LIBGCRYPT_CONFIG
+if test -n "$ac_pt_LIBGCRYPT_CONFIG"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_LIBGCRYPT_CONFIG" >&5
+$as_echo "$ac_pt_LIBGCRYPT_CONFIG" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+  if test "x$ac_pt_LIBGCRYPT_CONFIG" = x; then
+    LIBGCRYPT_CONFIG="no"
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    LIBGCRYPT_CONFIG=$ac_pt_LIBGCRYPT_CONFIG
+  fi
+else
+  LIBGCRYPT_CONFIG="$ac_cv_path_LIBGCRYPT_CONFIG"
+fi
+
+  tmp=1.2.0
+  if echo "$tmp" | grep ':' >/dev/null 2>/dev/null ; then
+     req_libgcrypt_api=`echo "$tmp"     | sed 's/\(.*\):\(.*\)/\1/'`
+     min_libgcrypt_version=`echo "$tmp" | sed 's/\(.*\):\(.*\)/\2/'`
+  else
+     req_libgcrypt_api=0
+     min_libgcrypt_version="$tmp"
+  fi
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for LIBGCRYPT - version >= $min_libgcrypt_version" >&5
+$as_echo_n "checking for LIBGCRYPT - version >= $min_libgcrypt_version... " >&6; }
+  ok=no
+  if test "$LIBGCRYPT_CONFIG" != "no" ; then
+    req_major=`echo $min_libgcrypt_version | \
+               sed 's/\([0-9]*\)\.\([0-9]*\)\.\([0-9]*\)/\1/'`
+    req_minor=`echo $min_libgcrypt_version | \
+               sed 's/\([0-9]*\)\.\([0-9]*\)\.\([0-9]*\)/\2/'`
+    req_micro=`echo $min_libgcrypt_version | \
+               sed 's/\([0-9]*\)\.\([0-9]*\)\.\([0-9]*\)/\3/'`
+    libgcrypt_config_version=`$LIBGCRYPT_CONFIG --version`
+    major=`echo $libgcrypt_config_version | \
+               sed 's/\([0-9]*\)\.\([0-9]*\)\.\([0-9]*\).*/\1/'`
+    minor=`echo $libgcrypt_config_version | \
+               sed 's/\([0-9]*\)\.\([0-9]*\)\.\([0-9]*\).*/\2/'`
+    micro=`echo $libgcrypt_config_version | \
+               sed 's/\([0-9]*\)\.\([0-9]*\)\.\([0-9]*\).*/\3/'`
+    if test "$major" -gt "$req_major"; then
+        ok=yes
+    else
+        if test "$major" -eq "$req_major"; then
+            if test "$minor" -gt "$req_minor"; then
+               ok=yes
+            else
+               if test "$minor" -eq "$req_minor"; then
+                   if test "$micro" -ge "$req_micro"; then
+                     ok=yes
+                   fi
+               fi
+            fi
+        fi
+    fi
+  fi
+  if test $ok = yes; then
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes ($libgcrypt_config_version)" >&5
+$as_echo "yes ($libgcrypt_config_version)" >&6; }
+  else
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+  fi
+  if test $ok = yes; then
+     # If we have a recent libgcrypt, we should also check that the
+     # API is compatible
+     if test "$req_libgcrypt_api" -gt 0 ; then
+        tmp=`$LIBGCRYPT_CONFIG --api-version 2>/dev/null || echo 0`
+        if test "$tmp" -gt 0 ; then
+           { $as_echo "$as_me:${as_lineno-$LINENO}: checking LIBGCRYPT API version" >&5
+$as_echo_n "checking LIBGCRYPT API version... " >&6; }
+           if test "$req_libgcrypt_api" -eq "$tmp" ; then
+             { $as_echo "$as_me:${as_lineno-$LINENO}: result: okay" >&5
+$as_echo "okay" >&6; }
+           else
+             ok=no
+             { $as_echo "$as_me:${as_lineno-$LINENO}: result: does not match. want=$req_libgcrypt_api got=$tmp" >&5
+$as_echo "does not match. want=$req_libgcrypt_api got=$tmp" >&6; }
+           fi
+        fi
+     fi
+  fi
+  if test $ok = yes; then
+    LIBGCRYPT_CFLAGS=`$LIBGCRYPT_CONFIG --cflags`
+    LIBGCRYPT_LIBS=`$LIBGCRYPT_CONFIG --libs`
+
+
+$as_echo "#define HAVE_LIBGCRYPT 1" >>confdefs.h
+
+        HAVE_HLS="yes"
+
+    libgcrypt_config_host=`$LIBGCRYPT_CONFIG --host 2>/dev/null || echo none`
+    if test x"$libgcrypt_config_host" != xnone ; then
+      if test x"$libgcrypt_config_host" != x"$host" ; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING:
+***
+*** The config script $LIBGCRYPT_CONFIG was
+*** built for $libgcrypt_config_host and thus may not match the
+*** used host $host.
+*** You may want to use the configure option --with-libgcrypt-prefix
+*** to specify a matching config script.
+***" >&5
+$as_echo "$as_me: WARNING:
+***
+*** The config script $LIBGCRYPT_CONFIG was
+*** built for $libgcrypt_config_host and thus may not match the
+*** used host $host.
+*** You may want to use the configure option --with-libgcrypt-prefix
+*** to specify a matching config script.
+***" >&2;}
+      fi
+    fi
+  else
+    LIBGCRYPT_CFLAGS=""
+    LIBGCRYPT_LIBS=""
+    as_fn_error $? "Could not find libgcrypt library" "$LINENO" 5
+  fi
+
+
+
+     ;; #(
+  openssl) :
+
+
+pkg_failed=no
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for OPENSSL" >&5
+$as_echo_n "checking for OPENSSL... " >&6; }
+
+if test -n "$PKG_CONFIG"; then
+    if test -n "$OPENSSL_CFLAGS"; then
+        pkg_cv_OPENSSL_CFLAGS="$OPENSSL_CFLAGS"
+    else
+        if test -n "$PKG_CONFIG" && \
+    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"openssl\""; } >&5
+  ($PKG_CONFIG --exists --print-errors "openssl") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+  pkg_cv_OPENSSL_CFLAGS=`$PKG_CONFIG --cflags "openssl" 2>/dev/null`
+else
+  pkg_failed=yes
+fi
+    fi
+else
+	pkg_failed=untried
+fi
+if test -n "$PKG_CONFIG"; then
+    if test -n "$OPENSSL_LIBS"; then
+        pkg_cv_OPENSSL_LIBS="$OPENSSL_LIBS"
+    else
+        if test -n "$PKG_CONFIG" && \
+    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"openssl\""; } >&5
+  ($PKG_CONFIG --exists --print-errors "openssl") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+  pkg_cv_OPENSSL_LIBS=`$PKG_CONFIG --libs "openssl" 2>/dev/null`
+else
+  pkg_failed=yes
+fi
+    fi
+else
+	pkg_failed=untried
+fi
+
+
+
+if test $pkg_failed = yes; then
+
+if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
+        _pkg_short_errors_supported=yes
+else
+        _pkg_short_errors_supported=no
+fi
+        if test $_pkg_short_errors_supported = yes; then
+	        OPENSSL_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "openssl"`
+        else
+	        OPENSSL_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "openssl"`
+        fi
+	# Put the nasty error message in config.log where it belongs
+	echo "$OPENSSL_PKG_ERRORS" >&5
+
+	{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+                as_fn_error $? "Could not find openssl library" "$LINENO" 5
+elif test $pkg_failed = untried; then
+	as_fn_error $? "Could not find openssl library" "$LINENO" 5
+else
+	OPENSSL_CFLAGS=$pkg_cv_OPENSSL_CFLAGS
+	OPENSSL_LIBS=$pkg_cv_OPENSSL_LIBS
+        { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+
+
+$as_echo "#define HAVE_OPENSSL 1" >>confdefs.h
+
+        HAVE_HLS="yes"
+
+fi
+     ;; #(
+  *) :
+
 
 pkg_failed=no
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for NETTLE" >&5
@@ -54123,7 +56334,7 @@
 
 $as_echo "#define HAVE_LIBGCRYPT 1" >>confdefs.h
 
-      HAVE_HLS="yes"
+          HAVE_HLS="yes"
 
     libgcrypt_config_host=`$LIBGCRYPT_CONFIG --host 2>/dev/null || echo none`
     if test x"$libgcrypt_config_host" != xnone ; then
@@ -54212,11 +56423,11 @@
 	{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
 $as_echo "no" >&6; }
 
-        HAVE_HLS="no"
+            HAVE_HLS="no"
 
 elif test $pkg_failed = untried; then
 
-        HAVE_HLS="no"
+            HAVE_HLS="no"
 
 else
 	OPENSSL_CFLAGS=$pkg_cv_OPENSSL_CFLAGS
@@ -54227,7 +56438,7 @@
 
 $as_echo "#define HAVE_OPENSSL 1" >>confdefs.h
 
-        HAVE_HLS="yes"
+            HAVE_HLS="yes"
 
 fi
 
@@ -54426,7 +56637,7 @@
 
 $as_echo "#define HAVE_LIBGCRYPT 1" >>confdefs.h
 
-      HAVE_HLS="yes"
+          HAVE_HLS="yes"
 
     libgcrypt_config_host=`$LIBGCRYPT_CONFIG --host 2>/dev/null || echo none`
     if test x"$libgcrypt_config_host" != xnone ; then
@@ -54515,11 +56726,11 @@
 	{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
 $as_echo "no" >&6; }
 
-        HAVE_HLS="no"
+            HAVE_HLS="no"
 
 elif test $pkg_failed = untried; then
 
-        HAVE_HLS="no"
+            HAVE_HLS="no"
 
 else
 	OPENSSL_CFLAGS=$pkg_cv_OPENSSL_CFLAGS
@@ -54530,7 +56741,7 @@
 
 $as_echo "#define HAVE_OPENSSL 1" >>confdefs.h
 
-        HAVE_HLS="yes"
+            HAVE_HLS="yes"
 
 fi
 
@@ -54548,10 +56759,13 @@
 
 $as_echo "#define HAVE_NETTLE 1" >>confdefs.h
 
-    HAVE_HLS="yes"
+        HAVE_HLS="yes"
 
 fi
 
+   ;;
+esac
+
 
   LIBS=$gst_check_save_LIBS
   LDFLAGS=$gst_check_save_LDFLAGS
@@ -55091,14 +57305,6 @@
 fi
 
  if false; then
-  USE_MPG123_TRUE=
-  USE_MPG123_FALSE='#'
-else
-  USE_MPG123_TRUE='#'
-  USE_MPG123_FALSE=
-fi
-
- if false; then
   USE_MPLEX_TRUE=
   USE_MPLEX_FALSE='#'
 else
@@ -55291,14 +57497,6 @@
 fi
 
  if false; then
-  USE_GSETTINGS_TRUE=
-  USE_GSETTINGS_FALSE='#'
-else
-  USE_GSETTINGS_TRUE='#'
-  USE_GSETTINGS_FALSE=
-fi
-
- if false; then
   USE_XVID_TRUE=
   USE_XVID_FALSE='#'
 else
@@ -55473,6 +57671,9 @@
 
 
 GST_ALL_LDFLAGS="-no-undefined"
+if test "x${enable_Bsymbolic}" = "xyes"; then
+  GST_ALL_LDFLAGS="$GST_ALL_LDFLAGS -Wl,-Bsymbolic-functions"
+fi
 
 
 GST_LIB_LDFLAGS="-export-symbols-regex ^_?\(gst_\|Gst\|GST_\).*"
@@ -55485,7 +57686,7 @@
 $MKDIR_P tests/check/orc
 
 
-ac_config_files="$ac_config_files Makefile common/Makefile common/m4/Makefile gst-plugins-bad.spec gst/Makefile gst/accurip/Makefile gst/adpcmdec/Makefile gst/adpcmenc/Makefile gst/aiff/Makefile gst/asfmux/Makefile gst/audiofxbad/Makefile gst/audiomixer/Makefile gst/audiovisualizers/Makefile gst/autoconvert/Makefile gst/bayer/Makefile gst/camerabin2/Makefile gst/cdxaparse/Makefile gst/coloreffects/Makefile gst/dataurisrc/Makefile gst/dccp/Makefile gst/debugutils/Makefile gst/dvbsuboverlay/Makefile gst/dvdspu/Makefile gst/faceoverlay/Makefile gst/festival/Makefile gst/fieldanalysis/Makefile gst/freeverb/Makefile gst/frei0r/Makefile gst/gaudieffects/Makefile gst/geometrictransform/Makefile gst/gdp/Makefile gst/hdvparse/Makefile gst/id3tag/Makefile gst/inter/Makefile gst/interlace/Makefile gst/ivfparse/Makefile gst/ivtc/Makefile gst/jp2kdecimator/Makefile gst/jpegformat/Makefile gst/librfb/Makefile gst/liveadder/Makefile gst/midi/Makefile gst/mpegdemux/Makefile gst/mpegtsdemux/Makefile gst/mpegtsmux/Makefile gst/mpegtsmux/tsmux/Makefile gst/mpegpsmux/Makefile gst/mve/Makefile gst/mxf/Makefile gst/nuvdemux/Makefile gst/onvif/Makefile gst/patchdetect/Makefile gst/pcapparse/Makefile gst/pnm/Makefile gst/rawparse/Makefile gst/removesilence/Makefile gst/rtp/Makefile gst/sdi/Makefile gst/sdp/Makefile gst/segmentclip/Makefile gst/siren/Makefile gst/smooth/Makefile gst/speed/Makefile gst/subenc/Makefile gst/stereo/Makefile gst/tta/Makefile gst/videofilters/Makefile gst/videomeasure/Makefile gst/videoparsers/Makefile gst/videosignal/Makefile gst/vmnc/Makefile gst/y4m/Makefile gst/yadif/Makefile gst/compositor/Makefile gst-libs/Makefile gst-libs/gst/Makefile gst-libs/gst/adaptivedemux/Makefile gst-libs/gst/basecamerabinsrc/Makefile gst-libs/gst/gl/Makefile gst-libs/gst/gl/android/Makefile gst-libs/gst/gl/cocoa/Makefile gst-libs/gst/gl/dispmanx/Makefile gst-libs/gst/gl/glprototypes/Makefile gst-libs/gst/gl/eagl/Makefile gst-libs/gst/gl/egl/Makefile gst-libs/gst/gl/wayland/Makefile gst-libs/gst/gl/win32/Makefile gst-libs/gst/gl/x11/Makefile gst-libs/gst/insertbin/Makefile gst-libs/gst/interfaces/Makefile gst-libs/gst/codecparsers/Makefile gst-libs/gst/mpegts/Makefile gst-libs/gst/uridownloader/Makefile gst-libs/gst/wayland/Makefile gst-libs/gst/base/Makefile gst-libs/gst/video/Makefile sys/Makefile sys/dshowdecwrapper/Makefile sys/acmenc/Makefile sys/acmmp3dec/Makefile sys/androidmedia/Makefile sys/applemedia/Makefile sys/applemedia-nonpublic/Makefile sys/avc/Makefile sys/bluez/Makefile sys/d3dvideosink/Makefile sys/decklink/Makefile sys/directsound/Makefile sys/dshowsrcwrapper/Makefile sys/dshowvideosink/Makefile sys/dvb/Makefile sys/fbdev/Makefile sys/linsys/Makefile sys/opensles/Makefile sys/shm/Makefile sys/uvch264/Makefile sys/vcd/Makefile sys/vdpau/Makefile sys/pvr2d/Makefile sys/wasapi/Makefile sys/wininet/Makefile sys/winks/Makefile sys/winscreencap/Makefile tests/Makefile tests/check/Makefile tests/files/Makefile tests/examples/Makefile tests/examples/avsamplesink/Makefile tests/examples/camerabin2/Makefile tests/examples/codecparsers/Makefile tests/examples/directfb/Makefile tests/examples/gl/Makefile tests/examples/gl/cocoa/Makefile tests/examples/gl/clutter/Makefile tests/examples/gl/generic/Makefile tests/examples/gl/generic/cube/Makefile tests/examples/gl/generic/cubeyuv/Makefile tests/examples/gl/generic/doublecube/Makefile tests/examples/gl/generic/recordgraphic/Makefile tests/examples/gl/gtk/Makefile tests/examples/gl/gtk/gtkvideooverlay/Makefile tests/examples/gl/gtk/3dvideo/Makefile tests/examples/gl/gtk/filternovideooverlay/Makefile tests/examples/gl/gtk/filtervideooverlay/Makefile tests/examples/gl/gtk/fxtest/Makefile tests/examples/gl/gtk/switchvideooverlay/Makefile tests/examples/gl/qt/Makefile tests/examples/gl/sdl/Makefile tests/examples/gtk/Makefile tests/examples/mpegts/Makefile tests/examples/mxf/Makefile tests/examples/opencv/Makefile tests/examples/uvch264/Makefile tests/icles/Makefile ext/voamrwbenc/Makefile ext/voaacenc/Makefile ext/assrender/Makefile ext/apexsink/Makefile ext/bs2b/Makefile ext/bz2/Makefile ext/chromaprint/Makefile ext/curl/Makefile ext/dash/Makefile ext/dc1394/Makefile ext/directfb/Makefile ext/wayland/Makefile ext/daala/Makefile ext/dts/Makefile ext/gl/Makefile ext/gtk/Makefile ext/faac/Makefile ext/faad/Makefile ext/flite/Makefile ext/fluidsynth/Makefile ext/gsm/Makefile ext/hls/Makefile ext/kate/Makefile ext/ladspa/Makefile ext/lv2/Makefile ext/libde265/Makefile ext/libmms/Makefile ext/libvisual/Makefile ext/Makefile ext/modplug/Makefile ext/mpeg2enc/Makefile ext/mpg123/Makefile ext/mimic/Makefile ext/mplex/Makefile ext/musepack/Makefile ext/nas/Makefile ext/neon/Makefile ext/ofa/Makefile ext/openal/Makefile ext/opencv/Makefile ext/openexr/Makefile ext/openh264/Makefile ext/openjpeg/Makefile ext/openni2/Makefile ext/opus/Makefile ext/qt/Makefile ext/rsvg/Makefile ext/resindvd/Makefile ext/rtmp/Makefile ext/sbc/Makefile ext/schroedinger/Makefile ext/sdl/Makefile ext/smoothstreaming/Makefile ext/sndfile/Makefile ext/soundtouch/Makefile ext/spandsp/Makefile ext/sndio/Makefile ext/srtp/Makefile ext/teletextdec/Makefile ext/gme/Makefile ext/gsettings/Makefile ext/gsettings/org.freedesktop.gstreamer.default-elements.gschema.xml ext/spc/Makefile ext/timidity/Makefile ext/webp/Makefile ext/x265/Makefile ext/xvid/Makefile ext/zbar/Makefile ext/dtls/Makefile po/Makefile.in docs/Makefile docs/plugins/Makefile docs/libs/Makefile docs/version.entities pkgconfig/Makefile pkgconfig/gstreamer-plugins-bad.pc pkgconfig/gstreamer-plugins-bad-uninstalled.pc pkgconfig/gstreamer-codecparsers.pc pkgconfig/gstreamer-codecparsers-uninstalled.pc pkgconfig/gstreamer-insertbin.pc pkgconfig/gstreamer-insertbin-uninstalled.pc pkgconfig/gstreamer-gl.pc pkgconfig/gstreamer-gl-uninstalled.pc pkgconfig/gstreamer-mpegts.pc pkgconfig/gstreamer-mpegts-uninstalled.pc pkgconfig/gstreamer-wayland.pc pkgconfig/gstreamer-wayland-uninstalled.pc pkgconfig/gstreamer-bad-base.pc pkgconfig/gstreamer-bad-base-uninstalled.pc pkgconfig/gstreamer-bad-video.pc pkgconfig/gstreamer-bad-video-uninstalled.pc tools/Makefile m4/Makefile"
+ac_config_files="$ac_config_files Makefile common/Makefile common/m4/Makefile gst-plugins-bad.spec gst/Makefile gst/accurip/Makefile gst/adpcmdec/Makefile gst/adpcmenc/Makefile gst/aiff/Makefile gst/videoframe_audiolevel/Makefile gst/asfmux/Makefile gst/audiofxbad/Makefile gst/audiomixer/Makefile gst/audiovisualizers/Makefile gst/autoconvert/Makefile gst/bayer/Makefile gst/camerabin2/Makefile gst/cdxaparse/Makefile gst/coloreffects/Makefile gst/dataurisrc/Makefile gst/dccp/Makefile gst/debugutils/Makefile gst/dvbsuboverlay/Makefile gst/dvdspu/Makefile gst/faceoverlay/Makefile gst/festival/Makefile gst/fieldanalysis/Makefile gst/freeverb/Makefile gst/frei0r/Makefile gst/gaudieffects/Makefile gst/geometrictransform/Makefile gst/gdp/Makefile gst/hdvparse/Makefile gst/id3tag/Makefile gst/inter/Makefile gst/interlace/Makefile gst/ivfparse/Makefile gst/ivtc/Makefile gst/jp2kdecimator/Makefile gst/jpegformat/Makefile gst/librfb/Makefile gst/midi/Makefile gst/mpegdemux/Makefile gst/mpegtsdemux/Makefile gst/mpegtsmux/Makefile gst/mpegtsmux/tsmux/Makefile gst/mpegpsmux/Makefile gst/mve/Makefile gst/mxf/Makefile gst/netsim/Makefile gst/nuvdemux/Makefile gst/onvif/Makefile gst/patchdetect/Makefile gst/pcapparse/Makefile gst/pnm/Makefile gst/rawparse/Makefile gst/removesilence/Makefile gst/sdi/Makefile gst/sdp/Makefile gst/segmentclip/Makefile gst/siren/Makefile gst/smooth/Makefile gst/speed/Makefile gst/subenc/Makefile gst/stereo/Makefile gst/tta/Makefile gst/videofilters/Makefile gst/videomeasure/Makefile gst/videoparsers/Makefile gst/videosignal/Makefile gst/vmnc/Makefile gst/y4m/Makefile gst/yadif/Makefile gst/compositor/Makefile gst-libs/Makefile gst-libs/gst/Makefile gst-libs/gst/adaptivedemux/Makefile gst-libs/gst/basecamerabinsrc/Makefile gst-libs/gst/gl/Makefile gst-libs/gst/gl/android/Makefile gst-libs/gst/gl/cocoa/Makefile gst-libs/gst/gl/dispmanx/Makefile gst-libs/gst/gl/glprototypes/Makefile gst-libs/gst/gl/eagl/Makefile gst-libs/gst/gl/egl/Makefile gst-libs/gst/gl/wayland/Makefile gst-libs/gst/gl/win32/Makefile gst-libs/gst/gl/x11/Makefile gst-libs/gst/insertbin/Makefile gst-libs/gst/interfaces/Makefile gst-libs/gst/codecparsers/Makefile gst-libs/gst/mpegts/Makefile gst-libs/gst/uridownloader/Makefile gst-libs/gst/wayland/Makefile gst-libs/gst/base/Makefile gst-libs/gst/player/Makefile gst-libs/gst/video/Makefile gst-libs/gst/audio/Makefile sys/Makefile sys/dshowdecwrapper/Makefile sys/acmenc/Makefile sys/acmmp3dec/Makefile sys/androidmedia/Makefile sys/applemedia/Makefile sys/applemedia-nonpublic/Makefile sys/avc/Makefile sys/bluez/Makefile sys/d3dvideosink/Makefile sys/decklink/Makefile sys/directsound/Makefile sys/dshowsrcwrapper/Makefile sys/dshowvideosink/Makefile sys/dvb/Makefile sys/fbdev/Makefile sys/linsys/Makefile sys/nvenc/Makefile sys/opensles/Makefile sys/shm/Makefile sys/tinyalsa/Makefile sys/uvch264/Makefile sys/vcd/Makefile sys/vdpau/Makefile sys/pvr2d/Makefile sys/wasapi/Makefile sys/wininet/Makefile sys/winks/Makefile sys/winscreencap/Makefile tests/Makefile tests/check/Makefile tests/files/Makefile tests/examples/Makefile tests/examples/avsamplesink/Makefile tests/examples/camerabin2/Makefile tests/examples/codecparsers/Makefile tests/examples/directfb/Makefile tests/examples/gl/Makefile tests/examples/gl/cocoa/Makefile tests/examples/gl/clutter/Makefile tests/examples/gl/generic/Makefile tests/examples/gl/generic/cube/Makefile tests/examples/gl/generic/cubeyuv/Makefile tests/examples/gl/generic/doublecube/Makefile tests/examples/gl/generic/recordgraphic/Makefile tests/examples/gl/gtk/Makefile tests/examples/gl/gtk/gtkvideooverlay/Makefile tests/examples/gl/gtk/3dvideo/Makefile tests/examples/gl/gtk/filternovideooverlay/Makefile tests/examples/gl/gtk/filtervideooverlay/Makefile tests/examples/gl/gtk/fxtest/Makefile tests/examples/gl/gtk/switchvideooverlay/Makefile tests/examples/gl/qt/Makefile tests/examples/gl/sdl/Makefile tests/examples/gtk/Makefile tests/examples/mpegts/Makefile tests/examples/mxf/Makefile tests/examples/opencv/Makefile tests/examples/uvch264/Makefile tests/examples/waylandsink/Makefile tests/icles/Makefile ext/voamrwbenc/Makefile ext/voaacenc/Makefile ext/assrender/Makefile ext/apexsink/Makefile ext/bs2b/Makefile ext/bz2/Makefile ext/chromaprint/Makefile ext/curl/Makefile ext/dash/Makefile ext/dc1394/Makefile ext/directfb/Makefile ext/wayland/Makefile ext/daala/Makefile ext/dts/Makefile ext/gl/Makefile ext/gtk/Makefile ext/faac/Makefile ext/faad/Makefile ext/flite/Makefile ext/fluidsynth/Makefile ext/gsm/Makefile ext/hls/Makefile ext/kate/Makefile ext/ladspa/Makefile ext/lv2/Makefile ext/libde265/Makefile ext/libmms/Makefile ext/libvisual/Makefile ext/Makefile ext/modplug/Makefile ext/mpeg2enc/Makefile ext/mimic/Makefile ext/mplex/Makefile ext/musepack/Makefile ext/nas/Makefile ext/neon/Makefile ext/ofa/Makefile ext/openal/Makefile ext/opencv/Makefile ext/openexr/Makefile ext/openh264/Makefile ext/openjpeg/Makefile ext/openni2/Makefile ext/opus/Makefile ext/qt/Makefile ext/rsvg/Makefile ext/resindvd/Makefile ext/rtmp/Makefile ext/sbc/Makefile ext/schroedinger/Makefile ext/sdl/Makefile ext/smoothstreaming/Makefile ext/sndfile/Makefile ext/soundtouch/Makefile ext/spandsp/Makefile ext/sndio/Makefile ext/srtp/Makefile ext/teletextdec/Makefile ext/gme/Makefile ext/spc/Makefile ext/timidity/Makefile ext/vulkan/Makefile ext/vulkan/xcb/Makefile ext/webp/Makefile ext/x265/Makefile ext/xvid/Makefile ext/zbar/Makefile ext/dtls/Makefile po/Makefile.in docs/Makefile docs/plugins/Makefile docs/libs/Makefile docs/version.entities pkgconfig/Makefile pkgconfig/gstreamer-plugins-bad.pc pkgconfig/gstreamer-plugins-bad-uninstalled.pc pkgconfig/gstreamer-codecparsers.pc pkgconfig/gstreamer-codecparsers-uninstalled.pc pkgconfig/gstreamer-insertbin.pc pkgconfig/gstreamer-insertbin-uninstalled.pc pkgconfig/gstreamer-gl.pc pkgconfig/gstreamer-gl-uninstalled.pc pkgconfig/gstreamer-mpegts.pc pkgconfig/gstreamer-mpegts-uninstalled.pc pkgconfig/gstreamer-player.pc pkgconfig/gstreamer-player-uninstalled.pc pkgconfig/gstreamer-wayland.pc pkgconfig/gstreamer-wayland-uninstalled.pc pkgconfig/gstreamer-bad-base.pc pkgconfig/gstreamer-bad-base-uninstalled.pc pkgconfig/gstreamer-bad-video.pc pkgconfig/gstreamer-bad-video-uninstalled.pc pkgconfig/gstreamer-bad-audio.pc pkgconfig/gstreamer-bad-audio-uninstalled.pc tools/Makefile m4/Makefile"
 
 
 sed \
@@ -55852,6 +58053,10 @@
   as_fn_error $? "conditional \"GST_PLUGIN_BUILD_STATIC\" was never defined.
 Usually this means the macro was only invoked conditionally." "$LINENO" 5
 fi
+if test -z "${WITH_GST_PLAYER_TESTS_TRUE}" && test -z "${WITH_GST_PLAYER_TESTS_FALSE}"; then
+  as_fn_error $? "conditional \"WITH_GST_PLAYER_TESTS\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
 if test -z "${USE_PLUGIN_ACCURIP_TRUE}" && test -z "${USE_PLUGIN_ACCURIP_FALSE}"; then
   as_fn_error $? "conditional \"USE_PLUGIN_ACCURIP\" was never defined.
 Usually this means the macro was only invoked conditionally." "$LINENO" 5
@@ -55868,6 +58073,10 @@
   as_fn_error $? "conditional \"USE_PLUGIN_AIFF\" was never defined.
 Usually this means the macro was only invoked conditionally." "$LINENO" 5
 fi
+if test -z "${USE_PLUGIN_VIDEOFRAME_AUDIOLEVEL_TRUE}" && test -z "${USE_PLUGIN_VIDEOFRAME_AUDIOLEVEL_FALSE}"; then
+  as_fn_error $? "conditional \"USE_PLUGIN_VIDEOFRAME_AUDIOLEVEL\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
 if test -z "${USE_PLUGIN_ASFMUX_TRUE}" && test -z "${USE_PLUGIN_ASFMUX_FALSE}"; then
   as_fn_error $? "conditional \"USE_PLUGIN_ASFMUX\" was never defined.
 Usually this means the macro was only invoked conditionally." "$LINENO" 5
@@ -55996,10 +58205,6 @@
   as_fn_error $? "conditional \"USE_PLUGIN_LIBRFB\" was never defined.
 Usually this means the macro was only invoked conditionally." "$LINENO" 5
 fi
-if test -z "${USE_PLUGIN_LIVEADDER_TRUE}" && test -z "${USE_PLUGIN_LIVEADDER_FALSE}"; then
-  as_fn_error $? "conditional \"USE_PLUGIN_LIVEADDER\" was never defined.
-Usually this means the macro was only invoked conditionally." "$LINENO" 5
-fi
 if test -z "${USE_PLUGIN_MIDI_TRUE}" && test -z "${USE_PLUGIN_MIDI_FALSE}"; then
   as_fn_error $? "conditional \"USE_PLUGIN_MIDI\" was never defined.
 Usually this means the macro was only invoked conditionally." "$LINENO" 5
@@ -56028,6 +58233,10 @@
   as_fn_error $? "conditional \"USE_PLUGIN_MXF\" was never defined.
 Usually this means the macro was only invoked conditionally." "$LINENO" 5
 fi
+if test -z "${USE_PLUGIN_NETSIM_TRUE}" && test -z "${USE_PLUGIN_NETSIM_FALSE}"; then
+  as_fn_error $? "conditional \"USE_PLUGIN_NETSIM\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
 if test -z "${USE_PLUGIN_NUVDEMUX_TRUE}" && test -z "${USE_PLUGIN_NUVDEMUX_FALSE}"; then
   as_fn_error $? "conditional \"USE_PLUGIN_NUVDEMUX\" was never defined.
 Usually this means the macro was only invoked conditionally." "$LINENO" 5
@@ -56056,10 +58265,6 @@
   as_fn_error $? "conditional \"USE_PLUGIN_REMOVESILENCE\" was never defined.
 Usually this means the macro was only invoked conditionally." "$LINENO" 5
 fi
-if test -z "${USE_PLUGIN_RTP_TRUE}" && test -z "${USE_PLUGIN_RTP_FALSE}"; then
-  as_fn_error $? "conditional \"USE_PLUGIN_RTP\" was never defined.
-Usually this means the macro was only invoked conditionally." "$LINENO" 5
-fi
 if test -z "${USE_PLUGIN_SDI_TRUE}" && test -z "${USE_PLUGIN_SDI_FALSE}"; then
   as_fn_error $? "conditional \"USE_PLUGIN_SDI\" was never defined.
 Usually this means the macro was only invoked conditionally." "$LINENO" 5
@@ -56216,6 +58421,10 @@
   as_fn_error $? "conditional \"HAVE_JPEG\" was never defined.
 Usually this means the macro was only invoked conditionally." "$LINENO" 5
 fi
+if test -z "${USE_XCB_TRUE}" && test -z "${USE_XCB_FALSE}"; then
+  as_fn_error $? "conditional \"USE_XCB\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
 if test -z "${USE_DIRECTSOUND_TRUE}" && test -z "${USE_DIRECTSOUND_FALSE}"; then
   as_fn_error $? "conditional \"USE_DIRECTSOUND\" was never defined.
 Usually this means the macro was only invoked conditionally." "$LINENO" 5
@@ -56268,6 +58477,18 @@
   as_fn_error $? "conditional \"USE_UVCH264\" was never defined.
 Usually this means the macro was only invoked conditionally." "$LINENO" 5
 fi
+if test -z "${USE_NVENC_TRUE}" && test -z "${USE_NVENC_FALSE}"; then
+  as_fn_error $? "conditional \"USE_NVENC\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${USE_NVENC_GST_GL_TRUE}" && test -z "${USE_NVENC_GST_GL_FALSE}"; then
+  as_fn_error $? "conditional \"USE_NVENC_GST_GL\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${USE_TINYALSA_TRUE}" && test -z "${USE_TINYALSA_FALSE}"; then
+  as_fn_error $? "conditional \"USE_TINYALSA\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
 if test -z "${USE_ASSRENDER_TRUE}" && test -z "${USE_ASSRENDER_FALSE}"; then
   as_fn_error $? "conditional \"USE_ASSRENDER\" was never defined.
 Usually this means the macro was only invoked conditionally." "$LINENO" 5
@@ -56424,10 +58645,6 @@
   as_fn_error $? "conditional \"USE_MPEG2ENC\" was never defined.
 Usually this means the macro was only invoked conditionally." "$LINENO" 5
 fi
-if test -z "${USE_MPG123_TRUE}" && test -z "${USE_MPG123_FALSE}"; then
-  as_fn_error $? "conditional \"USE_MPG123\" was never defined.
-Usually this means the macro was only invoked conditionally." "$LINENO" 5
-fi
 if test -z "${USE_MPLEX_TRUE}" && test -z "${USE_MPLEX_FALSE}"; then
   as_fn_error $? "conditional \"USE_MPLEX\" was never defined.
 Usually this means the macro was only invoked conditionally." "$LINENO" 5
@@ -56504,6 +58721,10 @@
   as_fn_error $? "conditional \"USE_QT\" was never defined.
 Usually this means the macro was only invoked conditionally." "$LINENO" 5
 fi
+if test -z "${USE_VULKAN_TRUE}" && test -z "${USE_VULKAN_FALSE}"; then
+  as_fn_error $? "conditional \"USE_VULKAN\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
 if test -z "${USE_LIBVISUAL_TRUE}" && test -z "${USE_LIBVISUAL_FALSE}"; then
   as_fn_error $? "conditional \"USE_LIBVISUAL\" was never defined.
 Usually this means the macro was only invoked conditionally." "$LINENO" 5
@@ -56584,10 +58805,6 @@
   as_fn_error $? "conditional \"USE_SPANDSP\" was never defined.
 Usually this means the macro was only invoked conditionally." "$LINENO" 5
 fi
-if test -z "${USE_GSETTINGS_TRUE}" && test -z "${USE_GSETTINGS_FALSE}"; then
-  as_fn_error $? "conditional \"USE_GSETTINGS\" was never defined.
-Usually this means the macro was only invoked conditionally." "$LINENO" 5
-fi
 if test -z "${USE_SNDIO_TRUE}" && test -z "${USE_SNDIO_FALSE}"; then
   as_fn_error $? "conditional \"USE_SNDIO\" was never defined.
 Usually this means the macro was only invoked conditionally." "$LINENO" 5
@@ -56756,10 +58973,6 @@
   as_fn_error $? "conditional \"USE_MPEG2ENC\" was never defined.
 Usually this means the macro was only invoked conditionally." "$LINENO" 5
 fi
-if test -z "${USE_MPG123_TRUE}" && test -z "${USE_MPG123_FALSE}"; then
-  as_fn_error $? "conditional \"USE_MPG123\" was never defined.
-Usually this means the macro was only invoked conditionally." "$LINENO" 5
-fi
 if test -z "${USE_MPLEX_TRUE}" && test -z "${USE_MPLEX_FALSE}"; then
   as_fn_error $? "conditional \"USE_MPLEX\" was never defined.
 Usually this means the macro was only invoked conditionally." "$LINENO" 5
@@ -56856,10 +59069,6 @@
   as_fn_error $? "conditional \"USE_GME\" was never defined.
 Usually this means the macro was only invoked conditionally." "$LINENO" 5
 fi
-if test -z "${USE_GSETTINGS_TRUE}" && test -z "${USE_GSETTINGS_FALSE}"; then
-  as_fn_error $? "conditional \"USE_GSETTINGS\" was never defined.
-Usually this means the macro was only invoked conditionally." "$LINENO" 5
-fi
 if test -z "${USE_XVID_TRUE}" && test -z "${USE_XVID_FALSE}"; then
   as_fn_error $? "conditional \"USE_XVID\" was never defined.
 Usually this means the macro was only invoked conditionally." "$LINENO" 5
@@ -57325,7 +59534,7 @@
 # report actual input values of CONFIG_FILES etc. instead of their
 # values after options handling.
 ac_log="
-This file was extended by GStreamer Bad Plug-ins $as_me 1.6.3, which was
+This file was extended by GStreamer Bad Plug-ins $as_me 1.7.91, which was
 generated by GNU Autoconf 2.69.  Invocation command line was
 
   CONFIG_FILES    = $CONFIG_FILES
@@ -57391,7 +59600,7 @@
 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
 ac_cs_version="\\
-GStreamer Bad Plug-ins config.status 1.6.3
+GStreamer Bad Plug-ins config.status 1.7.91
 configured by $0, generated by GNU Autoconf 2.69,
   with options \\"\$ac_cs_config\\"
 
@@ -57529,6 +59738,7 @@
 enable_shared='`$ECHO "$enable_shared" | $SED "$delay_single_quote_subst"`'
 pic_mode='`$ECHO "$pic_mode" | $SED "$delay_single_quote_subst"`'
 enable_fast_install='`$ECHO "$enable_fast_install" | $SED "$delay_single_quote_subst"`'
+shared_archive_member_spec='`$ECHO "$shared_archive_member_spec" | $SED "$delay_single_quote_subst"`'
 SHELL='`$ECHO "$SHELL" | $SED "$delay_single_quote_subst"`'
 ECHO='`$ECHO "$ECHO" | $SED "$delay_single_quote_subst"`'
 PATH_SEPARATOR='`$ECHO "$PATH_SEPARATOR" | $SED "$delay_single_quote_subst"`'
@@ -57576,10 +59786,13 @@
 GCC='`$ECHO "$GCC" | $SED "$delay_single_quote_subst"`'
 lt_cv_sys_global_symbol_pipe='`$ECHO "$lt_cv_sys_global_symbol_pipe" | $SED "$delay_single_quote_subst"`'
 lt_cv_sys_global_symbol_to_cdecl='`$ECHO "$lt_cv_sys_global_symbol_to_cdecl" | $SED "$delay_single_quote_subst"`'
+lt_cv_sys_global_symbol_to_import='`$ECHO "$lt_cv_sys_global_symbol_to_import" | $SED "$delay_single_quote_subst"`'
 lt_cv_sys_global_symbol_to_c_name_address='`$ECHO "$lt_cv_sys_global_symbol_to_c_name_address" | $SED "$delay_single_quote_subst"`'
 lt_cv_sys_global_symbol_to_c_name_address_lib_prefix='`$ECHO "$lt_cv_sys_global_symbol_to_c_name_address_lib_prefix" | $SED "$delay_single_quote_subst"`'
+lt_cv_nm_interface='`$ECHO "$lt_cv_nm_interface" | $SED "$delay_single_quote_subst"`'
 nm_file_list_spec='`$ECHO "$nm_file_list_spec" | $SED "$delay_single_quote_subst"`'
 lt_sysroot='`$ECHO "$lt_sysroot" | $SED "$delay_single_quote_subst"`'
+lt_cv_truncate_bin='`$ECHO "$lt_cv_truncate_bin" | $SED "$delay_single_quote_subst"`'
 objdir='`$ECHO "$objdir" | $SED "$delay_single_quote_subst"`'
 MAGIC_CMD='`$ECHO "$MAGIC_CMD" | $SED "$delay_single_quote_subst"`'
 lt_prog_compiler_no_builtin_flag='`$ECHO "$lt_prog_compiler_no_builtin_flag" | $SED "$delay_single_quote_subst"`'
@@ -57644,7 +59857,8 @@
 finish_eval='`$ECHO "$finish_eval" | $SED "$delay_single_quote_subst"`'
 hardcode_into_libs='`$ECHO "$hardcode_into_libs" | $SED "$delay_single_quote_subst"`'
 sys_lib_search_path_spec='`$ECHO "$sys_lib_search_path_spec" | $SED "$delay_single_quote_subst"`'
-sys_lib_dlsearch_path_spec='`$ECHO "$sys_lib_dlsearch_path_spec" | $SED "$delay_single_quote_subst"`'
+configure_time_dlsearch_path='`$ECHO "$configure_time_dlsearch_path" | $SED "$delay_single_quote_subst"`'
+configure_time_lt_sys_library_path='`$ECHO "$configure_time_lt_sys_library_path" | $SED "$delay_single_quote_subst"`'
 hardcode_action='`$ECHO "$hardcode_action" | $SED "$delay_single_quote_subst"`'
 enable_dlopen='`$ECHO "$enable_dlopen" | $SED "$delay_single_quote_subst"`'
 enable_dlopen_self='`$ECHO "$enable_dlopen_self" | $SED "$delay_single_quote_subst"`'
@@ -57750,9 +59964,12 @@
 compiler \
 lt_cv_sys_global_symbol_pipe \
 lt_cv_sys_global_symbol_to_cdecl \
+lt_cv_sys_global_symbol_to_import \
 lt_cv_sys_global_symbol_to_c_name_address \
 lt_cv_sys_global_symbol_to_c_name_address_lib_prefix \
+lt_cv_nm_interface \
 nm_file_list_spec \
+lt_cv_truncate_bin \
 lt_prog_compiler_no_builtin_flag \
 lt_prog_compiler_pic \
 lt_prog_compiler_wl \
@@ -57818,7 +60035,7 @@
 compiler_lib_search_path_CXX; do
     case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in
     *[\\\\\\\`\\"\\\$]*)
-      eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED \\"\\\$sed_quote_subst\\"\\\`\\\\\\""
+      eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED \\"\\\$sed_quote_subst\\"\\\`\\\\\\"" ## exclude from sc_prohibit_nested_quotes
       ;;
     *)
       eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\""
@@ -57845,7 +60062,8 @@
 postuninstall_cmds \
 finish_cmds \
 sys_lib_search_path_spec \
-sys_lib_dlsearch_path_spec \
+configure_time_dlsearch_path \
+configure_time_lt_sys_library_path \
 reload_cmds_CXX \
 old_archive_cmds_CXX \
 old_archive_from_new_cmds_CXX \
@@ -57859,7 +60077,7 @@
 postlink_cmds_CXX; do
     case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in
     *[\\\\\\\`\\"\\\$]*)
-      eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\""
+      eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\"" ## exclude from sc_prohibit_nested_quotes
       ;;
     *)
       eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\""
@@ -57868,19 +60086,16 @@
 done
 
 ac_aux_dir='$ac_aux_dir'
-xsi_shell='$xsi_shell'
-lt_shell_append='$lt_shell_append'
 
-# See if we are running on zsh, and set the options which allow our
+# See if we are running on zsh, and set the options that allow our
 # commands through without removal of \ escapes INIT.
-if test -n "\${ZSH_VERSION+set}" ; then
+if test -n "\${ZSH_VERSION+set}"; then
    setopt NO_GLOB_SUBST
 fi
 
 
     PACKAGE='$PACKAGE'
     VERSION='$VERSION'
-    TIMESTAMP='$TIMESTAMP'
     RM='$RM'
     ofile='$ofile'
 
@@ -57917,6 +60132,9 @@
 gl_config_defines='$GL_CONFIG_DEFINES'
 
 
+vulkan_config_defines='$VULKAN_CONFIG_DEFINES'
+
+
 _ACEOF
 
 cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
@@ -57931,6 +60149,7 @@
     "po-directories") CONFIG_COMMANDS="$CONFIG_COMMANDS po-directories" ;;
     "$ac_stdint_h") CONFIG_COMMANDS="$CONFIG_COMMANDS $ac_stdint_h" ;;
     "gst-libs/gst/gl/gstglconfig.h") CONFIG_COMMANDS="$CONFIG_COMMANDS gst-libs/gst/gl/gstglconfig.h" ;;
+    "ext/vulkan/vkconfig.h") CONFIG_COMMANDS="$CONFIG_COMMANDS ext/vulkan/vkconfig.h" ;;
     "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;;
     "common/Makefile") CONFIG_FILES="$CONFIG_FILES common/Makefile" ;;
     "common/m4/Makefile") CONFIG_FILES="$CONFIG_FILES common/m4/Makefile" ;;
@@ -57940,6 +60159,7 @@
     "gst/adpcmdec/Makefile") CONFIG_FILES="$CONFIG_FILES gst/adpcmdec/Makefile" ;;
     "gst/adpcmenc/Makefile") CONFIG_FILES="$CONFIG_FILES gst/adpcmenc/Makefile" ;;
     "gst/aiff/Makefile") CONFIG_FILES="$CONFIG_FILES gst/aiff/Makefile" ;;
+    "gst/videoframe_audiolevel/Makefile") CONFIG_FILES="$CONFIG_FILES gst/videoframe_audiolevel/Makefile" ;;
     "gst/asfmux/Makefile") CONFIG_FILES="$CONFIG_FILES gst/asfmux/Makefile" ;;
     "gst/audiofxbad/Makefile") CONFIG_FILES="$CONFIG_FILES gst/audiofxbad/Makefile" ;;
     "gst/audiomixer/Makefile") CONFIG_FILES="$CONFIG_FILES gst/audiomixer/Makefile" ;;
@@ -57971,7 +60191,6 @@
     "gst/jp2kdecimator/Makefile") CONFIG_FILES="$CONFIG_FILES gst/jp2kdecimator/Makefile" ;;
     "gst/jpegformat/Makefile") CONFIG_FILES="$CONFIG_FILES gst/jpegformat/Makefile" ;;
     "gst/librfb/Makefile") CONFIG_FILES="$CONFIG_FILES gst/librfb/Makefile" ;;
-    "gst/liveadder/Makefile") CONFIG_FILES="$CONFIG_FILES gst/liveadder/Makefile" ;;
     "gst/midi/Makefile") CONFIG_FILES="$CONFIG_FILES gst/midi/Makefile" ;;
     "gst/mpegdemux/Makefile") CONFIG_FILES="$CONFIG_FILES gst/mpegdemux/Makefile" ;;
     "gst/mpegtsdemux/Makefile") CONFIG_FILES="$CONFIG_FILES gst/mpegtsdemux/Makefile" ;;
@@ -57980,6 +60199,7 @@
     "gst/mpegpsmux/Makefile") CONFIG_FILES="$CONFIG_FILES gst/mpegpsmux/Makefile" ;;
     "gst/mve/Makefile") CONFIG_FILES="$CONFIG_FILES gst/mve/Makefile" ;;
     "gst/mxf/Makefile") CONFIG_FILES="$CONFIG_FILES gst/mxf/Makefile" ;;
+    "gst/netsim/Makefile") CONFIG_FILES="$CONFIG_FILES gst/netsim/Makefile" ;;
     "gst/nuvdemux/Makefile") CONFIG_FILES="$CONFIG_FILES gst/nuvdemux/Makefile" ;;
     "gst/onvif/Makefile") CONFIG_FILES="$CONFIG_FILES gst/onvif/Makefile" ;;
     "gst/patchdetect/Makefile") CONFIG_FILES="$CONFIG_FILES gst/patchdetect/Makefile" ;;
@@ -57987,7 +60207,6 @@
     "gst/pnm/Makefile") CONFIG_FILES="$CONFIG_FILES gst/pnm/Makefile" ;;
     "gst/rawparse/Makefile") CONFIG_FILES="$CONFIG_FILES gst/rawparse/Makefile" ;;
     "gst/removesilence/Makefile") CONFIG_FILES="$CONFIG_FILES gst/removesilence/Makefile" ;;
-    "gst/rtp/Makefile") CONFIG_FILES="$CONFIG_FILES gst/rtp/Makefile" ;;
     "gst/sdi/Makefile") CONFIG_FILES="$CONFIG_FILES gst/sdi/Makefile" ;;
     "gst/sdp/Makefile") CONFIG_FILES="$CONFIG_FILES gst/sdp/Makefile" ;;
     "gst/segmentclip/Makefile") CONFIG_FILES="$CONFIG_FILES gst/segmentclip/Makefile" ;;
@@ -58026,7 +60245,9 @@
     "gst-libs/gst/uridownloader/Makefile") CONFIG_FILES="$CONFIG_FILES gst-libs/gst/uridownloader/Makefile" ;;
     "gst-libs/gst/wayland/Makefile") CONFIG_FILES="$CONFIG_FILES gst-libs/gst/wayland/Makefile" ;;
     "gst-libs/gst/base/Makefile") CONFIG_FILES="$CONFIG_FILES gst-libs/gst/base/Makefile" ;;
+    "gst-libs/gst/player/Makefile") CONFIG_FILES="$CONFIG_FILES gst-libs/gst/player/Makefile" ;;
     "gst-libs/gst/video/Makefile") CONFIG_FILES="$CONFIG_FILES gst-libs/gst/video/Makefile" ;;
+    "gst-libs/gst/audio/Makefile") CONFIG_FILES="$CONFIG_FILES gst-libs/gst/audio/Makefile" ;;
     "sys/Makefile") CONFIG_FILES="$CONFIG_FILES sys/Makefile" ;;
     "sys/dshowdecwrapper/Makefile") CONFIG_FILES="$CONFIG_FILES sys/dshowdecwrapper/Makefile" ;;
     "sys/acmenc/Makefile") CONFIG_FILES="$CONFIG_FILES sys/acmenc/Makefile" ;;
@@ -58044,8 +60265,10 @@
     "sys/dvb/Makefile") CONFIG_FILES="$CONFIG_FILES sys/dvb/Makefile" ;;
     "sys/fbdev/Makefile") CONFIG_FILES="$CONFIG_FILES sys/fbdev/Makefile" ;;
     "sys/linsys/Makefile") CONFIG_FILES="$CONFIG_FILES sys/linsys/Makefile" ;;
+    "sys/nvenc/Makefile") CONFIG_FILES="$CONFIG_FILES sys/nvenc/Makefile" ;;
     "sys/opensles/Makefile") CONFIG_FILES="$CONFIG_FILES sys/opensles/Makefile" ;;
     "sys/shm/Makefile") CONFIG_FILES="$CONFIG_FILES sys/shm/Makefile" ;;
+    "sys/tinyalsa/Makefile") CONFIG_FILES="$CONFIG_FILES sys/tinyalsa/Makefile" ;;
     "sys/uvch264/Makefile") CONFIG_FILES="$CONFIG_FILES sys/uvch264/Makefile" ;;
     "sys/vcd/Makefile") CONFIG_FILES="$CONFIG_FILES sys/vcd/Makefile" ;;
     "sys/vdpau/Makefile") CONFIG_FILES="$CONFIG_FILES sys/vdpau/Makefile" ;;
@@ -58084,6 +60307,7 @@
     "tests/examples/mxf/Makefile") CONFIG_FILES="$CONFIG_FILES tests/examples/mxf/Makefile" ;;
     "tests/examples/opencv/Makefile") CONFIG_FILES="$CONFIG_FILES tests/examples/opencv/Makefile" ;;
     "tests/examples/uvch264/Makefile") CONFIG_FILES="$CONFIG_FILES tests/examples/uvch264/Makefile" ;;
+    "tests/examples/waylandsink/Makefile") CONFIG_FILES="$CONFIG_FILES tests/examples/waylandsink/Makefile" ;;
     "tests/icles/Makefile") CONFIG_FILES="$CONFIG_FILES tests/icles/Makefile" ;;
     "ext/voamrwbenc/Makefile") CONFIG_FILES="$CONFIG_FILES ext/voamrwbenc/Makefile" ;;
     "ext/voaacenc/Makefile") CONFIG_FILES="$CONFIG_FILES ext/voaacenc/Makefile" ;;
@@ -58116,7 +60340,6 @@
     "ext/Makefile") CONFIG_FILES="$CONFIG_FILES ext/Makefile" ;;
     "ext/modplug/Makefile") CONFIG_FILES="$CONFIG_FILES ext/modplug/Makefile" ;;
     "ext/mpeg2enc/Makefile") CONFIG_FILES="$CONFIG_FILES ext/mpeg2enc/Makefile" ;;
-    "ext/mpg123/Makefile") CONFIG_FILES="$CONFIG_FILES ext/mpg123/Makefile" ;;
     "ext/mimic/Makefile") CONFIG_FILES="$CONFIG_FILES ext/mimic/Makefile" ;;
     "ext/mplex/Makefile") CONFIG_FILES="$CONFIG_FILES ext/mplex/Makefile" ;;
     "ext/musepack/Makefile") CONFIG_FILES="$CONFIG_FILES ext/musepack/Makefile" ;;
@@ -58145,10 +60368,10 @@
     "ext/srtp/Makefile") CONFIG_FILES="$CONFIG_FILES ext/srtp/Makefile" ;;
     "ext/teletextdec/Makefile") CONFIG_FILES="$CONFIG_FILES ext/teletextdec/Makefile" ;;
     "ext/gme/Makefile") CONFIG_FILES="$CONFIG_FILES ext/gme/Makefile" ;;
-    "ext/gsettings/Makefile") CONFIG_FILES="$CONFIG_FILES ext/gsettings/Makefile" ;;
-    "ext/gsettings/org.freedesktop.gstreamer.default-elements.gschema.xml") CONFIG_FILES="$CONFIG_FILES ext/gsettings/org.freedesktop.gstreamer.default-elements.gschema.xml" ;;
     "ext/spc/Makefile") CONFIG_FILES="$CONFIG_FILES ext/spc/Makefile" ;;
     "ext/timidity/Makefile") CONFIG_FILES="$CONFIG_FILES ext/timidity/Makefile" ;;
+    "ext/vulkan/Makefile") CONFIG_FILES="$CONFIG_FILES ext/vulkan/Makefile" ;;
+    "ext/vulkan/xcb/Makefile") CONFIG_FILES="$CONFIG_FILES ext/vulkan/xcb/Makefile" ;;
     "ext/webp/Makefile") CONFIG_FILES="$CONFIG_FILES ext/webp/Makefile" ;;
     "ext/x265/Makefile") CONFIG_FILES="$CONFIG_FILES ext/x265/Makefile" ;;
     "ext/xvid/Makefile") CONFIG_FILES="$CONFIG_FILES ext/xvid/Makefile" ;;
@@ -58170,12 +60393,16 @@
     "pkgconfig/gstreamer-gl-uninstalled.pc") CONFIG_FILES="$CONFIG_FILES pkgconfig/gstreamer-gl-uninstalled.pc" ;;
     "pkgconfig/gstreamer-mpegts.pc") CONFIG_FILES="$CONFIG_FILES pkgconfig/gstreamer-mpegts.pc" ;;
     "pkgconfig/gstreamer-mpegts-uninstalled.pc") CONFIG_FILES="$CONFIG_FILES pkgconfig/gstreamer-mpegts-uninstalled.pc" ;;
+    "pkgconfig/gstreamer-player.pc") CONFIG_FILES="$CONFIG_FILES pkgconfig/gstreamer-player.pc" ;;
+    "pkgconfig/gstreamer-player-uninstalled.pc") CONFIG_FILES="$CONFIG_FILES pkgconfig/gstreamer-player-uninstalled.pc" ;;
     "pkgconfig/gstreamer-wayland.pc") CONFIG_FILES="$CONFIG_FILES pkgconfig/gstreamer-wayland.pc" ;;
     "pkgconfig/gstreamer-wayland-uninstalled.pc") CONFIG_FILES="$CONFIG_FILES pkgconfig/gstreamer-wayland-uninstalled.pc" ;;
     "pkgconfig/gstreamer-bad-base.pc") CONFIG_FILES="$CONFIG_FILES pkgconfig/gstreamer-bad-base.pc" ;;
     "pkgconfig/gstreamer-bad-base-uninstalled.pc") CONFIG_FILES="$CONFIG_FILES pkgconfig/gstreamer-bad-base-uninstalled.pc" ;;
     "pkgconfig/gstreamer-bad-video.pc") CONFIG_FILES="$CONFIG_FILES pkgconfig/gstreamer-bad-video.pc" ;;
     "pkgconfig/gstreamer-bad-video-uninstalled.pc") CONFIG_FILES="$CONFIG_FILES pkgconfig/gstreamer-bad-video-uninstalled.pc" ;;
+    "pkgconfig/gstreamer-bad-audio.pc") CONFIG_FILES="$CONFIG_FILES pkgconfig/gstreamer-bad-audio.pc" ;;
+    "pkgconfig/gstreamer-bad-audio-uninstalled.pc") CONFIG_FILES="$CONFIG_FILES pkgconfig/gstreamer-bad-audio-uninstalled.pc" ;;
     "tools/Makefile") CONFIG_FILES="$CONFIG_FILES tools/Makefile" ;;
     "m4/Makefile") CONFIG_FILES="$CONFIG_FILES m4/Makefile" ;;
 
@@ -58868,55 +61095,53 @@
  ;;
     "libtool":C)
 
-    # See if we are running on zsh, and set the options which allow our
+    # See if we are running on zsh, and set the options that allow our
     # commands through without removal of \ escapes.
-    if test -n "${ZSH_VERSION+set}" ; then
+    if test -n "${ZSH_VERSION+set}"; then
       setopt NO_GLOB_SUBST
     fi
 
-    cfgfile="${ofile}T"
+    cfgfile=${ofile}T
     trap "$RM \"$cfgfile\"; exit 1" 1 2 15
     $RM "$cfgfile"
 
     cat <<_LT_EOF >> "$cfgfile"
 #! $SHELL
-
-# `$ECHO "$ofile" | sed 's%^.*/%%'` - Provide generalized library-building support services.
-# Generated automatically by $as_me ($PACKAGE$TIMESTAMP) $VERSION
+# Generated automatically by $as_me ($PACKAGE) $VERSION
 # Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`:
 # NOTE: Changes made to this file will be lost: look at ltmain.sh.
+
+# Provide generalized library-building support services.
+# Written by Gordon Matzigkeit, 1996
+
+# Copyright (C) 2014 Free Software Foundation, Inc.
+# This is free software; see the source for copying conditions.  There is NO
+# warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+
+# GNU Libtool is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of of the License, or
+# (at your option) any later version.
 #
-#   Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005,
-#                 2006, 2007, 2008, 2009, 2010, 2011 Free Software
-#                 Foundation, Inc.
-#   Written by Gordon Matzigkeit, 1996
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program or library that is built
+# using GNU Libtool, you may include this file under the  same
+# distribution terms that you use for the rest of that program.
 #
-#   This file is part of GNU Libtool.
-#
-# GNU Libtool is free software; you can redistribute it and/or
-# modify it under the terms of the GNU General Public License as
-# published by the Free Software Foundation; either version 2 of
-# the License, or (at your option) any later version.
-#
-# As a special exception to the GNU General Public License,
-# if you distribute this file as part of a program or library that
-# is built using GNU Libtool, you may include this file under the
-# same distribution terms that you use for the rest of that program.
-#
-# GNU Libtool is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# GNU Libtool is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 # GNU General Public License for more details.
 #
 # You should have received a copy of the GNU General Public License
-# along with GNU Libtool; see the file COPYING.  If not, a copy
-# can be downloaded from http://www.gnu.org/licenses/gpl.html, or
-# obtained by writing to the Free Software Foundation, Inc.,
-# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
 
 # The names of the tagged configurations supported by this script.
-available_tags="CXX "
+available_tags='CXX '
+
+# Configured defaults for sys_lib_dlsearch_path munging.
+: \${LT_SYS_LIBRARY_PATH="$configure_time_lt_sys_library_path"}
 
 # ### BEGIN LIBTOOL CONFIG
 
@@ -58945,6 +61170,9 @@
 # Whether or not to optimize for fast installation.
 fast_install=$enable_fast_install
 
+# Shared archive member basename,for filename based shared library versioning on AIX.
+shared_archive_member_spec=$shared_archive_member_spec
+
 # Shell to use when invoking shell scripts.
 SHELL=$lt_SHELL
 
@@ -59056,18 +61284,27 @@
 # Transform the output of nm in a proper C declaration.
 global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl
 
+# Transform the output of nm into a list of symbols to manually relocate.
+global_symbol_to_import=$lt_lt_cv_sys_global_symbol_to_import
+
 # Transform the output of nm in a C name address pair.
 global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address
 
 # Transform the output of nm in a C name address pair when lib prefix is needed.
 global_symbol_to_c_name_address_lib_prefix=$lt_lt_cv_sys_global_symbol_to_c_name_address_lib_prefix
 
+# The name lister interface.
+nm_interface=$lt_lt_cv_nm_interface
+
 # Specify filename containing input files for \$NM.
 nm_file_list_spec=$lt_nm_file_list_spec
 
-# The root where to search for dependent libraries,and in which our libraries should be installed.
+# The root where to search for dependent libraries,and where our libraries should be installed.
 lt_sysroot=$lt_sysroot
 
+# Command to truncate a binary pipe.
+lt_truncate_bin=$lt_lt_cv_truncate_bin
+
 # The name of the directory that contains temporary libtool files.
 objdir=$objdir
 
@@ -59158,8 +61395,11 @@
 # Compile-time system search path for libraries.
 sys_lib_search_path_spec=$lt_sys_lib_search_path_spec
 
-# Run-time system search path for libraries.
-sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec
+# Detected run-time system search path for libraries.
+sys_lib_dlsearch_path_spec=$lt_configure_time_dlsearch_path
+
+# Explicit LT_SYS_LIBRARY_PATH set during ./configure time.
+configure_time_lt_sys_library_path=$lt_configure_time_lt_sys_library_path
 
 # Whether dlopen is supported.
 dlopen_support=$enable_dlopen
@@ -59252,13 +61492,13 @@
 # Whether we need a single "-rpath" flag with a separated argument.
 hardcode_libdir_separator=$lt_hardcode_libdir_separator
 
-# Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes
+# Set to "yes" if using DIR/libNAME\$shared_ext during linking hardcodes
 # DIR into the resulting binary.
 hardcode_direct=$hardcode_direct
 
-# Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes
+# Set to "yes" if using DIR/libNAME\$shared_ext during linking hardcodes
 # DIR into the resulting binary and the resulting library dependency is
-# "absolute",i.e impossible to change by setting \${shlibpath_var} if the
+# "absolute",i.e impossible to change by setting \$shlibpath_var if the
 # library is relocated.
 hardcode_direct_absolute=$hardcode_direct_absolute
 
@@ -59324,13 +61564,72 @@
 
 _LT_EOF
 
+    cat <<'_LT_EOF' >> "$cfgfile"
+
+# ### BEGIN FUNCTIONS SHARED WITH CONFIGURE
+
+# func_munge_path_list VARIABLE PATH
+# -----------------------------------
+# VARIABLE is name of variable containing _space_ separated list of
+# directories to be munged by the contents of PATH, which is string
+# having a format:
+# "DIR[:DIR]:"
+#       string "DIR[ DIR]" will be prepended to VARIABLE
+# ":DIR[:DIR]"
+#       string "DIR[ DIR]" will be appended to VARIABLE
+# "DIRP[:DIRP]::[DIRA:]DIRA"
+#       string "DIRP[ DIRP]" will be prepended to VARIABLE and string
+#       "DIRA[ DIRA]" will be appended to VARIABLE
+# "DIR[:DIR]"
+#       VARIABLE will be replaced by "DIR[ DIR]"
+func_munge_path_list ()
+{
+    case x$2 in
+    x)
+        ;;
+    *:)
+        eval $1=\"`$ECHO $2 | $SED 's/:/ /g'` \$$1\"
+        ;;
+    x:*)
+        eval $1=\"\$$1 `$ECHO $2 | $SED 's/:/ /g'`\"
+        ;;
+    *::*)
+        eval $1=\"\$$1\ `$ECHO $2 | $SED -e 's/.*:://' -e 's/:/ /g'`\"
+        eval $1=\"`$ECHO $2 | $SED -e 's/::.*//' -e 's/:/ /g'`\ \$$1\"
+        ;;
+    *)
+        eval $1=\"`$ECHO $2 | $SED 's/:/ /g'`\"
+        ;;
+    esac
+}
+
+
+# Calculate cc_basename.  Skip known compiler wrappers and cross-prefix.
+func_cc_basename ()
+{
+    for cc_temp in $*""; do
+      case $cc_temp in
+        compile | *[\\/]compile | ccache | *[\\/]ccache ) ;;
+        distcc | *[\\/]distcc | purify | *[\\/]purify ) ;;
+        \-*) ;;
+        *) break;;
+      esac
+    done
+    func_cc_basename_result=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"`
+}
+
+
+# ### END FUNCTIONS SHARED WITH CONFIGURE
+
+_LT_EOF
+
   case $host_os in
   aix3*)
     cat <<\_LT_EOF >> "$cfgfile"
 # AIX sometimes has problems with the GCC collect2 program.  For some
 # reason, if we set the COLLECT_NAMES environment variable, the problems
 # vanish in a puff of smoke.
-if test "X${COLLECT_NAMES+set}" != Xset; then
+if test set != "${COLLECT_NAMES+set}"; then
   COLLECT_NAMES=
   export COLLECT_NAMES
 fi
@@ -59339,7 +61638,7 @@
   esac
 
 
-ltmain="$ac_aux_dir/ltmain.sh"
+ltmain=$ac_aux_dir/ltmain.sh
 
 
   # We use sed instead of cat because bash on DJGPP gets confused if
@@ -59349,165 +61648,6 @@
   sed '$q' "$ltmain" >> "$cfgfile" \
      || (rm -f "$cfgfile"; exit 1)
 
-  if test x"$xsi_shell" = xyes; then
-  sed -e '/^func_dirname ()$/,/^} # func_dirname /c\
-func_dirname ()\
-{\
-\    case ${1} in\
-\      */*) func_dirname_result="${1%/*}${2}" ;;\
-\      *  ) func_dirname_result="${3}" ;;\
-\    esac\
-} # Extended-shell func_dirname implementation' "$cfgfile" > $cfgfile.tmp \
-  && mv -f "$cfgfile.tmp" "$cfgfile" \
-    || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
-test 0 -eq $? || _lt_function_replace_fail=:
-
-
-  sed -e '/^func_basename ()$/,/^} # func_basename /c\
-func_basename ()\
-{\
-\    func_basename_result="${1##*/}"\
-} # Extended-shell func_basename implementation' "$cfgfile" > $cfgfile.tmp \
-  && mv -f "$cfgfile.tmp" "$cfgfile" \
-    || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
-test 0 -eq $? || _lt_function_replace_fail=:
-
-
-  sed -e '/^func_dirname_and_basename ()$/,/^} # func_dirname_and_basename /c\
-func_dirname_and_basename ()\
-{\
-\    case ${1} in\
-\      */*) func_dirname_result="${1%/*}${2}" ;;\
-\      *  ) func_dirname_result="${3}" ;;\
-\    esac\
-\    func_basename_result="${1##*/}"\
-} # Extended-shell func_dirname_and_basename implementation' "$cfgfile" > $cfgfile.tmp \
-  && mv -f "$cfgfile.tmp" "$cfgfile" \
-    || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
-test 0 -eq $? || _lt_function_replace_fail=:
-
-
-  sed -e '/^func_stripname ()$/,/^} # func_stripname /c\
-func_stripname ()\
-{\
-\    # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are\
-\    # positional parameters, so assign one to ordinary parameter first.\
-\    func_stripname_result=${3}\
-\    func_stripname_result=${func_stripname_result#"${1}"}\
-\    func_stripname_result=${func_stripname_result%"${2}"}\
-} # Extended-shell func_stripname implementation' "$cfgfile" > $cfgfile.tmp \
-  && mv -f "$cfgfile.tmp" "$cfgfile" \
-    || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
-test 0 -eq $? || _lt_function_replace_fail=:
-
-
-  sed -e '/^func_split_long_opt ()$/,/^} # func_split_long_opt /c\
-func_split_long_opt ()\
-{\
-\    func_split_long_opt_name=${1%%=*}\
-\    func_split_long_opt_arg=${1#*=}\
-} # Extended-shell func_split_long_opt implementation' "$cfgfile" > $cfgfile.tmp \
-  && mv -f "$cfgfile.tmp" "$cfgfile" \
-    || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
-test 0 -eq $? || _lt_function_replace_fail=:
-
-
-  sed -e '/^func_split_short_opt ()$/,/^} # func_split_short_opt /c\
-func_split_short_opt ()\
-{\
-\    func_split_short_opt_arg=${1#??}\
-\    func_split_short_opt_name=${1%"$func_split_short_opt_arg"}\
-} # Extended-shell func_split_short_opt implementation' "$cfgfile" > $cfgfile.tmp \
-  && mv -f "$cfgfile.tmp" "$cfgfile" \
-    || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
-test 0 -eq $? || _lt_function_replace_fail=:
-
-
-  sed -e '/^func_lo2o ()$/,/^} # func_lo2o /c\
-func_lo2o ()\
-{\
-\    case ${1} in\
-\      *.lo) func_lo2o_result=${1%.lo}.${objext} ;;\
-\      *)    func_lo2o_result=${1} ;;\
-\    esac\
-} # Extended-shell func_lo2o implementation' "$cfgfile" > $cfgfile.tmp \
-  && mv -f "$cfgfile.tmp" "$cfgfile" \
-    || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
-test 0 -eq $? || _lt_function_replace_fail=:
-
-
-  sed -e '/^func_xform ()$/,/^} # func_xform /c\
-func_xform ()\
-{\
-    func_xform_result=${1%.*}.lo\
-} # Extended-shell func_xform implementation' "$cfgfile" > $cfgfile.tmp \
-  && mv -f "$cfgfile.tmp" "$cfgfile" \
-    || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
-test 0 -eq $? || _lt_function_replace_fail=:
-
-
-  sed -e '/^func_arith ()$/,/^} # func_arith /c\
-func_arith ()\
-{\
-    func_arith_result=$(( $* ))\
-} # Extended-shell func_arith implementation' "$cfgfile" > $cfgfile.tmp \
-  && mv -f "$cfgfile.tmp" "$cfgfile" \
-    || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
-test 0 -eq $? || _lt_function_replace_fail=:
-
-
-  sed -e '/^func_len ()$/,/^} # func_len /c\
-func_len ()\
-{\
-    func_len_result=${#1}\
-} # Extended-shell func_len implementation' "$cfgfile" > $cfgfile.tmp \
-  && mv -f "$cfgfile.tmp" "$cfgfile" \
-    || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
-test 0 -eq $? || _lt_function_replace_fail=:
-
-fi
-
-if test x"$lt_shell_append" = xyes; then
-  sed -e '/^func_append ()$/,/^} # func_append /c\
-func_append ()\
-{\
-    eval "${1}+=\\${2}"\
-} # Extended-shell func_append implementation' "$cfgfile" > $cfgfile.tmp \
-  && mv -f "$cfgfile.tmp" "$cfgfile" \
-    || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
-test 0 -eq $? || _lt_function_replace_fail=:
-
-
-  sed -e '/^func_append_quoted ()$/,/^} # func_append_quoted /c\
-func_append_quoted ()\
-{\
-\    func_quote_for_eval "${2}"\
-\    eval "${1}+=\\\\ \\$func_quote_for_eval_result"\
-} # Extended-shell func_append_quoted implementation' "$cfgfile" > $cfgfile.tmp \
-  && mv -f "$cfgfile.tmp" "$cfgfile" \
-    || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
-test 0 -eq $? || _lt_function_replace_fail=:
-
-
-  # Save a `func_append' function call where possible by direct use of '+='
-  sed -e 's%func_append \([a-zA-Z_]\{1,\}\) "%\1+="%g' $cfgfile > $cfgfile.tmp \
-    && mv -f "$cfgfile.tmp" "$cfgfile" \
-      || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
-  test 0 -eq $? || _lt_function_replace_fail=:
-else
-  # Save a `func_append' function call even when '+=' is not available
-  sed -e 's%func_append \([a-zA-Z_]\{1,\}\) "%\1="$\1%g' $cfgfile > $cfgfile.tmp \
-    && mv -f "$cfgfile.tmp" "$cfgfile" \
-      || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
-  test 0 -eq $? || _lt_function_replace_fail=:
-fi
-
-if test x"$_lt_function_replace_fail" = x":"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Unable to substitute extended shell functions in $ofile" >&5
-$as_echo "$as_me: WARNING: Unable to substitute extended shell functions in $ofile" >&2;}
-fi
-
-
    mv -f "$cfgfile" "$ofile" ||
     (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile")
   chmod +x "$ofile"
@@ -59594,13 +61734,13 @@
 # Whether we need a single "-rpath" flag with a separated argument.
 hardcode_libdir_separator=$lt_hardcode_libdir_separator_CXX
 
-# Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes
+# Set to "yes" if using DIR/libNAME\$shared_ext during linking hardcodes
 # DIR into the resulting binary.
 hardcode_direct=$hardcode_direct_CXX
 
-# Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes
+# Set to "yes" if using DIR/libNAME\$shared_ext during linking hardcodes
 # DIR into the resulting binary and the resulting library dependency is
-# "absolute",i.e impossible to change by setting \${shlibpath_var} if the
+# "absolute",i.e impossible to change by setting \$shlibpath_var if the
 # library is relocated.
 hardcode_direct_absolute=$hardcode_direct_absolute_CXX
 
@@ -60280,6 +62420,43 @@
 	  mv $outfile gst-libs/gst/gl/gstglconfig.h
 	fi
  ;;
+    "ext/vulkan/vkconfig.h":C)
+	outfile=vkconfig.h-tmp
+	cat > $outfile <<\_______EOF
+/* vkconfig.h
+ *
+ * This is a generated file.  Please modify `configure.ac'
+ */
+
+#ifndef __GST_VULKAN_CONFIG_H__
+#define __GST_VULKAN_CONFIG_H__
+
+#include <gst/gst.h>
+
+G_BEGIN_DECLS
+
+_______EOF
+
+	cat >>$outfile <<_______EOF
+$vulkan_config_defines
+_______EOF
+
+	cat >>$outfile <<_______EOF
+
+G_END_DECLS
+
+#endif  /* __GST_VULKAN_CONFIG_H__ */
+_______EOF
+
+
+	if cmp -s $outfile ext/vulkan/vkconfig.h; then
+          { $as_echo "$as_me:${as_lineno-$LINENO}: ext/vulkan/vkconfig.h is unchanged" >&5
+$as_echo "$as_me: ext/vulkan/vkconfig.h is unchanged" >&6;}
+	  rm -f $outfile
+	else
+	  mv $outfile ext/vulkan/vkconfig.h
+	fi
+ ;;
 
   esac
 done # for ac_tag
diff --git a/configure.ac b/configure.ac
index 5d7e2b2..d19954a 100644
--- a/configure.ac
+++ b/configure.ac
@@ -3,7 +3,7 @@
 dnl initialize autoconf
 dnl when going to/from release please set the nano (fourth number) right !
 dnl releases only do Wall, git and prerelease does Werror too
-AC_INIT([GStreamer Bad Plug-ins],[1.6.3],[http://bugzilla.gnome.org/enter_bug.cgi?product=GStreamer],[gst-plugins-bad])
+AC_INIT([GStreamer Bad Plug-ins],[1.7.91],[http://bugzilla.gnome.org/enter_bug.cgi?product=GStreamer],[gst-plugins-bad])
 
 AG_GST_INIT
 
@@ -51,11 +51,11 @@
 dnl - interfaces added -> increment AGE
 dnl - interfaces removed -> AGE = 0
 dnl sets GST_LT_LDFLAGS
-AS_LIBTOOL(GST, 603, 0, 603)
+AS_LIBTOOL(GST, 791, 0, 791)
 
 dnl *** required versions of GStreamer stuff ***
-GST_REQ=1.6.3
-GSTPB_REQ=1.6.3
+GST_REQ=1.7.91
+GSTPB_REQ=1.7.91
 
 dnl *** autotools stuff ****
 
@@ -74,6 +74,7 @@
 dnl *** check for arguments to configure ***
 
 AG_GST_ARG_DISABLE_FATAL_WARNINGS
+AG_GST_ARG_ENABLE_EXTRA_CHECKS
 
 AG_GST_ARG_DEBUG
 AG_GST_ARG_PROFILING
@@ -190,7 +191,7 @@
 AC_CHECK_FUNC(gethostbyname,,[AC_CHECK_LIB(nsl,gethostbyname)])
 
 dnl GLib is required
-GLIB_REQ=2.32.0
+GLIB_REQ=2.40.0
 AG_GST_GLIB_CHECK([$GLIB_REQ])
 
 dnl checks for gstreamer
@@ -241,6 +242,22 @@
 fi
 AM_CONDITIONAL(HAVE_GTK, test "x$HAVE_GTK" = "xyes")
 
+dnl Check for -Bsymbolic-functions linker flag used to avoid
+dnl intra-library PLT jumps, if available.
+AC_ARG_ENABLE(Bsymbolic,
+              [AS_HELP_STRING([--disable-Bsymbolic],[avoid linking with -Bsymbolic])],,
+              [SAVED_LDFLAGS="${LDFLAGS}" SAVED_LIBS="${LIBS}"
+               AC_MSG_CHECKING([for -Bsymbolic-functions linker flag])
+               LDFLAGS=-Wl,-Bsymbolic-functions
+               LIBS=
+               AC_TRY_LINK([], [return 0],
+                           AC_MSG_RESULT(yes)
+                           enable_Bsymbolic=yes,
+                           AC_MSG_RESULT(no)
+                           enable_Bsymbolic=no)
+               LDFLAGS="${SAVED_LDFLAGS}" LIBS="${SAVED_LIBS}"])
+
+dnl *** set variables based on configure arguments ***
 
 dnl GTK is optional and used in examples
 HAVE_GTK3=NO
@@ -379,6 +396,17 @@
 AC_SUBST(GST_PLUGIN_LIBTOOLFLAGS)
 AM_CONDITIONAL(GST_PLUGIN_BUILD_STATIC, test "x$enable_static_plugins" = "xyes")
 
+AC_ARG_WITH([player-tests],
+  AS_HELP_STRING([--with-player-tests],[Enable GstPlayer tests that need network access (default: no)]))
+if test x$with_player_tests = xyes; then
+  AC_PATH_PROG([WGET], [wget], no)
+  if test x$WGET = xno; then
+    AC_MSG_WARN([wget required for GstPlayer tests but not found - disabling])
+    with_player_tests=no
+  fi
+fi
+AM_CONDITIONAL(WITH_GST_PLAYER_TESTS, test "x$with_player_tests" = "xyes")
+
 # set by AG_GST_PARSE_SUBSYSTEM_DISABLES above
 dnl make sure it doesn't complain about unused variables if debugging is disabled
 NO_WARNINGS=""
@@ -423,10 +451,9 @@
  videomeasure \
  linsys \
  apexsink dc1394 \
- gsettings \
  musepack nas sdl timidity \
- acm wininet \
- xvid lv2 teletextdec sndio libvisual"
+ wininet \
+ xvid lv2 sndio libvisual"
 AC_SUBST(GST_PLUGINS_NONPORTED)
 
 dnl these are all the gst plug-ins, compilable without additional libs
@@ -434,6 +461,7 @@
 AG_GST_CHECK_PLUGIN(adpcmdec)
 AG_GST_CHECK_PLUGIN(adpcmenc)
 AG_GST_CHECK_PLUGIN(aiff)
+AG_GST_CHECK_PLUGIN(videoframe_audiolevel)
 AG_GST_CHECK_PLUGIN(asfmux)
 AG_GST_CHECK_PLUGIN(audiofxbad)
 AG_GST_CHECK_PLUGIN(audiomixer)
@@ -466,7 +494,6 @@
 AG_GST_CHECK_PLUGIN(jp2kdecimator)
 AG_GST_CHECK_PLUGIN(jpegformat)
 AG_GST_CHECK_PLUGIN(librfb)
-AG_GST_CHECK_PLUGIN(liveadder)
 AG_GST_CHECK_PLUGIN(midi)
 AG_GST_CHECK_PLUGIN(mpegdemux)
 AG_GST_CHECK_PLUGIN(mpegtsdemux)
@@ -474,6 +501,7 @@
 AG_GST_CHECK_PLUGIN(mpegpsmux)
 AG_GST_CHECK_PLUGIN(mve)
 AG_GST_CHECK_PLUGIN(mxf)
+AG_GST_CHECK_PLUGIN(netsim)
 AG_GST_CHECK_PLUGIN(nuvdemux)
 AG_GST_CHECK_PLUGIN(onvif)
 AG_GST_CHECK_PLUGIN(patchdetect)
@@ -481,7 +509,6 @@
 AG_GST_CHECK_PLUGIN(pnm)
 AG_GST_CHECK_PLUGIN(rawparse)
 AG_GST_CHECK_PLUGIN(removesilence)
-AG_GST_CHECK_PLUGIN(rtp)
 AG_GST_CHECK_PLUGIN(sdi)
 AG_GST_CHECK_PLUGIN(sdp)
 AG_GST_CHECK_PLUGIN(segmentclip)
@@ -670,13 +697,22 @@
   ;;
   *)
     if test "x$NEED_GL" != "xno"; then
-      AG_GST_CHECK_LIBHEADER(GL, GL, glTexImage2D,, GL/gl.h)
+      AG_GST_PKG_CHECK_MODULES(GL, gl)
+      if test "x$HAVE_GL" != "xyes"; then
+        AG_GST_CHECK_LIBHEADER(GL, GL, glTexImage2D,, GL/gl.h)
+      fi
     fi
     if test "x$NEED_GLES2" != "xno"; then
-      AG_GST_CHECK_LIBHEADER(GLES2, GLESv2, glTexImage2D,, GLES2/gl2.h)
+      AG_GST_PKG_CHECK_MODULES(GLES2, glesv2)
+      if test "x$HAVE_GLES2" != "xyes"; then
+        AG_GST_CHECK_LIBHEADER(GLES2, GLESv2, glTexImage2D,, GLES2/gl2.h)
+      fi
     fi
     if test "x$NEED_EGL" != "xno"; then
-      AG_GST_CHECK_LIBHEADER(EGL, EGL, eglGetError,, EGL/egl.h)
+      AG_GST_PKG_CHECK_MODULES(EGL, egl)
+      if test "x$HAVE_EGL" != "xyes"; then
+        AG_GST_CHECK_LIBHEADER(EGL, EGL, eglGetError,, EGL/egl.h)
+      fi
     fi
 
     old_LIBS=$LIBS
@@ -803,9 +839,28 @@
   fi
 fi
 
+dnl check for DMABUF support
+HAVE_DRM_FOURCC_HEADER=no
+AC_CHECK_HEADER(libdrm/drm_fourcc.h,
+  HAVE_DRM_FOURCC_HEADER=yes, )
+
+HAVE_GST_ALLOCATORS=no
+PKG_CHECK_MODULES(GST_ALLOCATORS, gstreamer-allocators-1.0,
+  HAVE_GST_ALLOCATORS=yes, )
+
+if test "x$HAVE_DRM_FOURCC_HEADER" = "xyes" -a \
+        "x$HAVE_GST_ALLOCATORS" = "xyes" -a \
+        "x$HAVE_EGL" = "xyes"; then
+          AC_DEFINE(GST_GL_HAVE_DMABUF, [1] , [DMABUF available for gl plugins])
+fi
+
 dnl check if we can include both GL and GLES2 at the same time
 if test "x$HAVE_GL" = "xyes" -a "x$HAVE_GLES2" = "xyes"; then
   GL_INCLUDES="
+#ifdef __GNUC__
+#  pragma GCC diagnostic push
+#  pragma GCC diagnostic ignored \"-Wredundant-decls\"
+#endif
 #ifndef GL_GLEXT_PROTOTYPES
 #define GL_GLEXT_PROTOTYPES 1
 #endif
@@ -829,11 +884,12 @@
 #   include <GL/glext.h>
 #  endif
 # endif
+int main (int argc, char **argv) { return 0; }
 "
   AC_MSG_CHECKING([whether it is possible to include both GL and GLES2 headers])
-  save_CPPFLAGS="$CPPFLAGS"
-  CPPFLAGS="$CPPFLAGS $ERROR_CFLAGS"
-  AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[$GL_INCLUDES]], [[
+  save_CFLAGS="$CFLAGS"
+  CFLAGS="$CFLAGS $GL_CFLAGS $GLES2_CFLAGS $WARNING_CFLAGS $ERROR_CFLAGS"
+  AC_COMPILE_IFELSE([AC_LANG_SOURCE([[$GL_INCLUDES]], [[
     #if !defined(GL_FALSE)
     #error Failed to include GL headers
     #endif
@@ -851,7 +907,7 @@
       HAVE_GLES2=no
     fi
   ])
-  CPPFLAGS="$save_CPPFLAGS"
+  CFLAGS="$save_CFLAGS"
 fi
 
 #dnl Check for OpenGL
@@ -1283,6 +1339,7 @@
 GST_GL_HAVE_GLINTPTR=0
 GST_GL_HAVE_GLSYNC=0
 GST_GL_HAVE_GLUINT64=0
+GST_GL_HAVE_GLINT64=0
 
 old_CFLAGS=$CFLAGS
 CFLAGS="$GL_CFLAGS $CFLAGS"
@@ -1317,6 +1374,11 @@
   GST_GL_HAVE_GLUINT64=1
 fi
 
+AC_CHECK_TYPES(GLint64, [], [], [[$GL_INCLUDES]])
+if test "x$ac_cv_type_GLint64" = "xyes"; then
+  GST_GL_HAVE_GLINT64=1
+fi
+
 CFLAGS=$old_CFLAGS
 
 GL_CONFIG_DEFINES="$GL_CONFIG_DEFINES
@@ -1326,6 +1388,7 @@
 #define GST_GL_HAVE_GLINTPTR $GST_GL_HAVE_GLINTPTR
 #define GST_GL_HAVE_GLSYNC $GST_GL_HAVE_GLSYNC
 #define GST_GL_HAVE_GLUINT64 $GST_GL_HAVE_GLUINT64
+#define GST_GL_HAVE_GLINT64 $GST_GL_HAVE_GLINT64
 "
 
 AC_CONFIG_COMMANDS([gst-libs/gst/gl/gstglconfig.h], [
@@ -1401,6 +1464,55 @@
 AC_SUBST(HAVE_JPEG)
 AM_CONDITIONAL(HAVE_JPEG, test "x$HAVE_JPEG" = "xyes")
 
+dnl Vulkan
+VULKAN_CONFIG_DEFINES=""
+
+PKG_CHECK_MODULES(XCB, xcb >= 1.10, HAVE_XCB=yes, HAVE_XCB=no)
+
+AM_CONDITIONAL(USE_XCB, test "x$HAVE_XCB" = "xyes")
+if test "x$HAVE_XCB" = "xyes"; then
+  VULKAN_CONFIG_DEFINES="$VULKAN_CONFIG_DEFINES
+  #define GST_VULKAN_HAVE_WINDOW_XCB 1"
+fi
+
+AC_CONFIG_COMMANDS([ext/vulkan/vkconfig.h], [
+	outfile=vkconfig.h-tmp
+	cat > $outfile <<\_______EOF
+/* vkconfig.h
+ *
+ * This is a generated file.  Please modify `configure.ac'
+ */
+
+#ifndef __GST_VULKAN_CONFIG_H__
+#define __GST_VULKAN_CONFIG_H__
+
+#include <gst/gst.h>
+
+G_BEGIN_DECLS
+
+_______EOF
+
+	cat >>$outfile <<_______EOF
+$vulkan_config_defines
+_______EOF
+
+	cat >>$outfile <<_______EOF
+
+G_END_DECLS
+
+#endif  /* __GST_VULKAN_CONFIG_H__ */
+_______EOF
+
+
+	if cmp -s $outfile ext/vulkan/vkconfig.h; then
+          AC_MSG_NOTICE([ext/vulkan/vkconfig.h is unchanged])
+	  rm -f $outfile
+	else
+	  mv $outfile ext/vulkan/vkconfig.h
+	fi
+],[
+vulkan_config_defines='$VULKAN_CONFIG_DEFINES'
+])
 
 dnl *** sys plug-ins ***
 
@@ -1727,6 +1839,114 @@
 AC_SUBST(LIBUSB_CFLAGS)
 AC_SUBST(LIBUSB_LIBS)
 
+dnl *** NVENC ***
+translit(dnm, m, l) AM_CONDITIONAL(USE_NVENC, true)
+AG_GST_CHECK_FEATURE(NVENC, [NVIDIA Encode API], nvenc, [
+  AG_GST_PKG_CHECK_MODULES(GST_VIDEO, gstreamer-video-1.0)
+  AG_GST_PKG_CHECK_MODULES(GST_PBUTILS, gstreamer-pbutils-1.0)
+  AC_ARG_WITH([cuda-prefix],
+          AS_HELP_STRING([--with-cuda-prefix],
+          [Use the provided prefix for detecting the cuda installation]),
+          [AS_IF([test "x$with_cuda_prefix" != "x"],
+                 [CUDA_PREFIX="$with_cuda_prefix"])],
+          [CUDA_PREFIX=""])
+
+  HAVE_CUDA="yes"
+  if test "x$CUDA_PREFIX" != "x"; then
+    dnl only override if not already set
+    if test "x$CUDA_CFLAGS" = "x" -a "x$CUDA_LIBS" = "x"; then
+      dnl this is an educated guess, user can always override these
+      CUDA_CFLAGS="-I$CUDA_PREFIX/include"
+      CUDA_LIBS="-L$CUDA_PREFIX/lib -L$CUDA_PREFIX/lib64 -L$CUDA_PREFIX/lib/stubs -L$CUDA_PREFIX/lib64/stubs -lcuda -lcudart"
+    fi
+  else
+    PKG_CHECK_MODULES([CUDA], [cuda-7.5 cudart-7.5],, [
+      PKG_CHECK_MODULES([CUDA], [cuda-7.0 cudart-7.0],, [
+        PKG_CHECK_MODULES([CUDA], [cuda-6.5 cudart-6.5],, [
+          AC_MSG_WARN([Could not find cuda headers/libraries])])])])
+  fi
+
+  HAVE_CUDA_H=no
+  HAVE_CUDART_H=no
+  save_CPPFLAGS="$CPPFLAGS"
+  CPPFLAGS="$CUDA_CFLAGS $save_CPPFLAGS "
+  AC_CHECK_HEADER([cuda.h], [HAVE_CUDA_H=yes],
+      AC_MSG_WARN([Could not find cuda.h]))
+  AC_CHECK_HEADER([cuda_runtime_api.h], [HAVE_CUDART_H=yes],
+      AC_MSG_WARN([Could not find cuda_runtime_api.h]))
+  CPPFLAGS=$save_CPPFLAGS
+
+  dnl libcuda and libcudart libraries
+  save_LIBS="$LIBS"
+  LIBS="$CUDA_LIBS $save_LIBS"
+  HAVE_CUDART_LIB="no"
+  AC_CHECK_LIB(cudart,cudaGetErrorString,[HAVE_CUDART_LIB="yes"], [
+      AC_MSG_WARN([Could not find cudart library])])
+  HAVE_CUDA_LIB="no"
+  AC_CHECK_LIB(cuda,cuInit,[HAVE_CUDA_LIB="yes"], [
+      AC_MSG_WARN([Could not find cuda library])])
+  LIBS="$save_LIBS"
+
+  dnl nvEncodeAPI.h header
+  HAVE_NVENCODEAPI_H=no
+  AC_ARG_VAR(NVENCODE_CFLAGS, [C compiler flags for NvEncodeAPI.h])
+  save_CPPFLAGS="$CPPFLAGS"
+  CPPFLAGS="$NVENCODE_CFLAGS $save_CPPFLAGS"
+  AC_CHECK_HEADER([nvEncodeAPI.h], [
+      AC_PREPROC_IFELSE([AC_LANG_SOURCE([[#include <nvEncodeAPI.h>
+          #if NVENCAPI_MAJOR_VERSION < 5
+          #error "Need nvEncodeAPI.h >= 5.0"
+          #endif
+          ]])], [
+          HAVE_NVENCODEAPI_H=yes
+          ], [
+          AC_MSG_WARN([nvEncodeAPI.h must be >= 5.0])
+          ])
+      ],
+      AC_MSG_WARN([Could not find nvEncodeAPI.h]))
+  AC_SUBST(NVENCODE_CFLAGS)
+  CPPFLAGS="$save_CPPFLAGS"
+
+  dnl libnvnidia-encode library
+  HAVE_NVENCODE_LIB=no
+  AC_ARG_VAR(NVENCODE_LIBS, [linker flags for nvidia-encode])
+  saved_LIBS="$LIBS"
+  LIBS="$NVENCODE_LIBS $saved_LIBS"
+  AC_CHECK_LIB(nvidia-encode, NvEncodeAPICreateInstance, [HAVE_NVENCODE_LIB="yes"],
+      AC_MSG_WARN([Could not find library nvidia-encode]))
+  NVENCODE_LIBS="$NVENCODE_LIBS -lnvidia-encode"
+  AC_SUBST(NVENCODE_LIBS)
+  LIBS="$saved_LIBS"
+
+  USE_NVENC_GST_GL=no
+  if test "x$HAVE_CUDA_H" = "xyes" \
+      -a "x$HAVE_CUDART_H" = "xyes" \
+      -a "x$HAVE_CUDA_LIB" = "xyes" \
+      -a "x$HAVE_CUDART_LIB" = "xyes" \
+      -a "x$HAVE_NVENCODEAPI_H" = "xyes" \
+      -a "x$HAVE_NVENCODE_LIB" = "xyes"; then
+    HAVE_NVENC="yes"
+    if test x"$USE_OPENGL" = x"yes"; then
+      dnl cuda-gl interop header
+      save_CPPFLAGS="$CPPFLAGS"
+      CPPFLAGS="$save_CPPFLAGS $CUDA_CFLAGS"
+      AC_CHECK_HEADER([cuda_gl_interop.h], [
+        USE_NVENC_GST_GL="yes"
+        AC_DEFINE(HAVE_NVENC_GST_GL, [1] , [NVENC GStreamer OpenGL support available])
+        ])
+      CPPFLAGS="$save_CPPFLAGS"
+    fi
+  else
+    HAVE_NVENC="no"
+  fi
+])
+AM_CONDITIONAL(USE_NVENC_GST_GL, test "x$USE_NVENC_GST_GL" = "xyes")
+
+dnl check for tinyalsa
+translit(dnm, m, l) AM_CONDITIONAL(USE_TINYALSA, true)
+AG_GST_CHECK_FEATURE(TINYALSA, [tinyalsa], tinyalsa, [
+  AC_CHECK_HEADER(tinyalsa/asoundlib.h, HAVE_TINYALSA="yes", HAVE_TINYALSA="no")
+])
 
 dnl *** ext plug-ins ***
 dnl keep this list sorted alphabetically !
@@ -1736,7 +1956,7 @@
 dnl *** assrender ***
 translit(dnm, m, l) AM_CONDITIONAL(USE_ASSRENDER, true)
 AG_GST_CHECK_FEATURE(ASSRENDER, [ASS/SSA renderer], assrender, [
-  PKG_CHECK_MODULES(ASSRENDER, libass >= 0.9.4, [
+  PKG_CHECK_MODULES(ASSRENDER, libass >= 0.10.2, [
     HAVE_ASSRENDER="yes" ], [
     HAVE_ASSRENDER="no"
   ])
@@ -1930,14 +2150,20 @@
 
 dnl **** Wayland ****
 translit(dnm, m, l) AM_CONDITIONAL(USE_WAYLAND, true)
+AC_PATH_PROG([wayland_scanner], [wayland-scanner])
 AG_GST_CHECK_FEATURE(WAYLAND, [wayland sink], wayland , [
-  PKG_CHECK_MODULES(WAYLAND, wayland-client >= 1.4.0 wayland-scanner, [
-    HAVE_WAYLAND="yes" ], [ HAVE_WAYLAND="no"
+  PKG_CHECK_MODULES(WAYLAND, wayland-client >= 1.4.0, [
+    if test "x$wayland_scanner" != "x"; then
+      HAVE_WAYLAND="yes"
+    else
+      AC_MSG_RESULT([wayland-scanner is required to build the wayland plugin])
+      HAVE_WAYLAND="no"
+    fi
+    ],
+    [ HAVE_WAYLAND="no"
   ])
 ])
 
-AC_PATH_PROG([wayland_scanner], [wayland-scanner])
-
 dnl **** WebP ****
 translit(dnm, m, l) AM_CONDITIONAL(USE_WEBP, true)
 AG_GST_CHECK_FEATURE(WEBP, [WebP], webp , [
@@ -1993,60 +2219,27 @@
   AC_SUBST(FAAC_LIBS)
 ])
 
-dnl **** Free AAC Decoder (FAAD) ****
+dnl **** Free AAC Decoder (FAAD2) ****
 translit(dnm, m, l) AM_CONDITIONAL(USE_FAAD, true)
-AG_GST_CHECK_FEATURE(FAAD, [AAC decoder plug-in], faad, [
-  HAVE_FAAD="yes"
-  faad_hdr=""
-  AG_GST_CHECK_LIBHEADER(FAAD, faad, faacDecOpen, $LIBM, faad.h,
-    FAAD_LIBS="-lfaad $LIBM", HAVE_FAAD="no")
-  if test $HAVE_FAAD = "no"; then
-    AG_GST_CHECK_LIBHEADER(FAAD, faad, NeAACDecOpen, $LIBM, neaacdec.h,
-      [ FAAD_LIBS="-lfaad $LIBM"
-        AC_DEFINE(FAAD_IS_NEAAC, 1, [Define if AAC is using new api prefix])
-        faad_hdr="neaacdec.h"
-      ], [
-        HAVE_FAAD="no"
-      ],)
-  else
-    faad_hdr="faad.h"
-  fi
-  if test $HAVE_FAAD = "yes"; then
-    AC_MSG_CHECKING([Checking for FAAD >= 2.0])
+AG_GST_CHECK_FEATURE(FAAD, [FAAD2 AAC decoder plug-in], faad, [
+  AG_GST_CHECK_LIBHEADER(FAAD, faad, NeAACDecOpen, $LIBM, neaacdec.h, [
     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <faad.h>]], [[
-        #if !defined(FAAD2_VERSION) || !defined(FAAD_FMT_DOUBLE)
-        #error Not faad2
-        #else
-        /* Release candidate of 2.0 is not good enough for us. This field
-         * was added only in 2.0 final and does not exist in 2.0-RC3 */
-        faacDecConfiguration conf; conf.dontUpSampleImplicitSBR = 1;
-        #endif
+      #if !defined(FAAD2_VERSION) || !defined(FAAD_FMT_DOUBLE)
+      #error Not faad2
+      #elif !defined(LATM)
+      #error Not faad2 >= 2.7
+      #endif
     ]])],[
       HAVE_FAAD="yes"
-
-      AC_MSG_CHECKING([Checking FAAD2 version in $faad_hdr])
-      for minor in 10 9 8 7 6 5 0; do
-        if test x$faad2_minor_version = "x"; then
-          AC_EGREP_CPP([\"2\.$minor\"$], [
-              #include <$faad_hdr>
-              FAAD2_VERSION
-            ], [
-              faad2_minor_version=$minor
-            ])
-        fi
-      done
-      if test x$faad2_minor_version = "x"; then
-        AC_MSG_RESULT([no idea])
-      else
-        AC_MSG_RESULT([2.$faad2_minor_version])
-        AC_DEFINE_UNQUOTED([FAAD2_MINOR_VERSION], [$faad2_minor_version], [The x in 2.x])
-      fi
-    ],[
+      FAAD_LIBS="-lfaad"
+    ], [
+      AC_MSG_WARN([Found libfaad, but version not recent enough. Need faad2 >= 2.7])
       HAVE_FAAD="no"
     ])
-  fi
+  ], [
+      HAVE_FAAD="no"
+  ])
   AC_SUBST(FAAD_LIBS)
-  AC_SUBST(FAAD_IS_NEAAC)
 ])
 
 dnl *** fbdev ***
@@ -2317,14 +2510,6 @@
   fi
 ])
 
-dnl *** mpg123 ***
-translit(dnm, m, l) AM_CONDITIONAL(USE_MPG123, true)
-AG_GST_CHECK_FEATURE(MPG123, [mpg123 audio decoder], mpg123, [
-  PKG_CHECK_MODULES(MPG123, libmpg123 >= 1.13, HAVE_MPG123="yes", HAVE_MPG123="no")
-  AC_SUBST(MPG123_CFLAGS)
-  AC_SUBST(MPG123_LIBS)
-])
-
 dnl *** mplex ***
 translit(dnm, m, l) AM_CONDITIONAL(USE_MPLEX, true)
 AG_GST_CHECK_FEATURE(MPLEX, [mplex], mplex, [
@@ -2590,17 +2775,7 @@
 dnl *** rsvg ***
 translit(dnm, m, l) AM_CONDITIONAL(USE_RSVG, true)
 AG_GST_CHECK_FEATURE(RSVG, [rsvg decoder], rsvg, [
-  PKG_CHECK_MODULES(RSVG, librsvg-2.0 >= 2.36 cairo, [
-    HAVE_RSVG="yes"
-    PKG_CHECK_MODULES(RSVG_2_36_2, librsvg-2.0 >= 2.36.2, HAVE_RSVG_2_36_2="yes", HAVE_RSVG_2_36_2="no")
-    if test "x$HAVE_RSVG_2_36_2" = "xyes"; then
-      AC_DEFINE(HAVE_RSVG_2_36_2, [1], [Have RSVG 2.36.2 or newer])
-    fi
-  ], [
-    HAVE_RSVG="no"
-  ])
-  AC_SUBST(RSVG_CFLAGS)
-  AC_SUBST(RSVG_LIBS)
+  AG_GST_PKG_CHECK_MODULES(RSVG, librsvg-2.0 >= 2.36.2)
 ])
 
 dnl *** gl ***
@@ -2652,7 +2827,7 @@
 dnl *** Qt ***
 translit(dnm, m, l) AM_CONDITIONAL(USE_QT, true)
 AG_GST_CHECK_FEATURE(QT, [Qt elements], qt, [
-  PKG_CHECK_MODULES(QT, Qt5Core Qt5Gui Qt5Quick >= 5.4.0, [
+  PKG_CHECK_MODULES(QT, Qt5Core Qt5Gui Qt5Qml Qt5Quick >= 5.4.0, [
       QT_PATH=`$PKG_CONFIG --variable=exec_prefix Qt5Core`
       QT_HOST_PATH=`$PKG_CONFIG --variable=host_bins Qt5Core`
       AC_PATH_PROGS(MOC, [moc-qt5 moc], moc, ["${QT_HOST_PATH}" "${QT_PATH}/bin"])
@@ -2681,6 +2856,44 @@
             HAVE_QT_WINDOWING="yes"
           ], [AC_MSG_NOTICE([Could not find Qt Wayland integration])])
         fi
+        if test "x$GST_GL_HAVE_WINDOW_ANDROID" = "x1" -a "x$GST_GL_HAVE_PLATFORM_EGL" = "x1"; then
+          PKG_CHECK_MODULES(QT_ANDROID, Qt5AndroidExtras, [
+            # c++ on android requires a standard library and there are multiple
+            # choices.  cerbero provides a pkg-config file the describes a choice
+            # so try to use that.  Outside cerbero one has to pass these flags
+            # manually for the library one is using
+            PKG_CHECK_MODULES(GNUSTL, gnustl, [
+              QT_CFLAGS="$QT_CFLAGS $GNUSTL_CFLAGS"
+              QT_LIBS="$QT_LIBS $GNUSTL_LIBS"
+              ], [
+              AC_MSG_NOTICE([Could not find Standard C++ library])])
+
+            AC_DEFINE([HAVE_QT_ANDROID], [],
+                [Define if Qt Android integration is installed])
+            QT_CFLAGS="$QT_CFLAGS $QT_ANDROID_CFLAGS"
+            QT_LIBS="$QT_LIBS $QT_ANDROID_LIBS"
+            HAVE_QT_WINDOWING="yes"
+          ], [AC_MSG_NOTICE([Could not find Qt Android integration])])
+        fi
+        if test "x$GST_GL_HAVE_WINDOW_COCOA" = "x1" -a "x$GST_GL_HAVE_PLATFORM_CGL" = "x1"; then
+          PKG_CHECK_MODULES(QT_MAC, Qt5MacExtras, [
+            AC_DEFINE([HAVE_QT_MAC], [],
+                [Define if Qt Mac integration is installed])
+            QT_LIBDIR=`$PKG_CONFIG --variable=libdir Qt5Core`
+            QT_CFLAGS="$QT_CFLAGS $QT_MAC_CFLAGS -F$QT_LIBDIR -framework QtCore -framework QtGui -framework QtQuick -framework QtQml -framework QtMacExtras"
+            QT_LIBS="$QT_LIBS $QT_MAC_LIBS"
+            HAVE_QT_WINDOWING="yes"
+          ], [AC_MSG_NOTICE([Could not find Qt Mac integration])])
+        fi
+        if test "x$GST_GL_HAVE_WINDOW_EAGL" = "x1" -a "x$GST_GL_HAVE_PLATFORM_EAGL" = "x1"; then
+          if test "x$HAVE_IOS" = "xyes"; then
+            # iOS doesn't have its own extras package so if we have the core
+            # modules we are good to go
+            AC_DEFINE([HAVE_QT_IOS], [],
+                [Define if Qt iOS integration is installed])
+            HAVE_QT_WINDOWING="yes"
+          fi
+        fi
         if test "x$HAVE_QT_WINDOWING" = "xno"; then
           AC_MSG_WARN([Could not find any Qt Windowing integration])
           HAVE_QT="no"
@@ -2693,6 +2906,22 @@
   ])
 ])
 
+dnl *** Vulkan ***
+translit(dnm, m, l) AM_CONDITIONAL(USE_VULKAN, true)
+AG_GST_CHECK_FEATURE(VULKAN, [Vulkan elements], vulkan, [
+  HAVE_VULKAN=no
+  AC_CHECK_HEADER(vulkan/vulkan.h, [
+    AC_CHECK_LIB(vulkan, vkCreateDevice, [
+      VULKAN_LIBS="-lvulkan"
+      AC_SUBST(VULKAN_LIBS)
+      dnl TODO check platform support (x11, win32, wayland, android, etc)
+      if test "x$HAVE_XCB" = "xyes"; then
+        HAVE_VULKAN=yes
+      fi
+    ], [])
+  ], [])
+])
+
 dnl *** libvisual ***
 translit(dnm, m, l) AM_CONDITIONAL(USE_LIBVISUAL, true)
 AG_GST_CHECK_FEATURE(LIBVISUAL, [libvisual visualization library], libvisual, [
@@ -3014,15 +3243,6 @@
 AC_SUBST(SPANDSP_CFLAGS)
 AC_SUBST(SPANDSP_LIBS)
 
-dnl *** GSettings ***
-translit(dnm, m, l) AM_CONDITIONAL(USE_GSETTINGS, true)
-AG_GST_CHECK_FEATURE(GSETTINGS, [GSettings plugin], gsettings, [
-  AG_GST_PKG_CHECK_MODULES(GSETTINGS, gio-2.0 >= 2.25.0)
-  if test "x$HAVE_GSETTINGS" = "xyes"; then
-    GLIB_GSETTINGS
-  fi
-])
-
 dnl *** sndio ***
 translit(dnm, m, l) AM_CONDITIONAL(USE_SNDIO, true)
 AG_GST_CHECK_FEATURE(SNDIO, [sndio audio], sndio, [
@@ -3036,28 +3256,62 @@
   fi
 ])
 
+dnl *** hls-crypto ***
+AC_ARG_WITH([hls-crypto],
+  AS_HELP_STRING([--with-hls-crypto=auto|nettle|libgcrypt|openssl], [
+    which cryptographic library version to compile against for hls (default: auto)
+  ]), [
+    AS_CASE([$with_hls_crypto],
+      [nettle],[],
+      [libgcrypt],[],
+      [openssl],[],
+      [with_hls_crypto=auto]
+    )
+  ]
+)
+
 dnl *** hls ***
 translit(dnm, m, l) AM_CONDITIONAL(USE_HLS, true)
 AG_GST_CHECK_FEATURE(HLS, [http live streaming plugin], hls, [
-  PKG_CHECK_MODULES(NETTLE, nettle,
-  [
-    AC_DEFINE(HAVE_NETTLE, 1, [Define if nettle is available])
-    HAVE_HLS="yes"
-  ], [
-    AM_PATH_LIBGCRYPT([1.2.0],
-    [
-      AC_DEFINE(HAVE_LIBGCRYPT, 1, [Define if libgcrypt is available])
-      HAVE_HLS="yes"
-    ], [
-      PKG_CHECK_MODULES(OPENSSL, openssl,
-      [
+  AS_CASE([$with_hls_crypto],
+    [nettle], [
+      PKG_CHECK_MODULES(NETTLE, nettle, [
+        AC_DEFINE(HAVE_NETTLE, 1, [Define if nettle is available])
+        HAVE_HLS="yes"
+      ],[AC_MSG_ERROR([Could not find nettle library])])
+    ],
+    [libgcrypt], [
+      AM_PATH_LIBGCRYPT([1.2.0], [
+        AC_DEFINE(HAVE_LIBGCRYPT, 1, [Define if libgcrypt is available])
+        HAVE_HLS="yes"
+      ],[AC_MSG_ERROR([Could not find libgcrypt library])])
+    ],
+    [openssl], [
+      PKG_CHECK_MODULES(OPENSSL, openssl, [
         AC_DEFINE(HAVE_OPENSSL, 1, [Define if openssl is available])
         HAVE_HLS="yes"
-      ], [
-        HAVE_HLS="no"
+      ],[AC_MSG_ERROR([Could not find openssl library])])
+    ],
+    [
+      dnl Try to find a valid crypto library
+      PKG_CHECK_MODULES(NETTLE, nettle, [
+        AC_DEFINE(HAVE_NETTLE, 1, [Define if nettle is available])
+        HAVE_HLS="yes"
+      ],[
+        AM_PATH_LIBGCRYPT([1.2.0], [
+          AC_DEFINE(HAVE_LIBGCRYPT, 1, [Define if libgcrypt is available])
+          HAVE_HLS="yes"
+        ],[
+          PKG_CHECK_MODULES(OPENSSL, openssl, [
+            AC_DEFINE(HAVE_OPENSSL, 1, [Define if openssl is available])
+            HAVE_HLS="yes"
+          ],[
+            HAVE_HLS="no"
+          ])
+        ])
       ])
-    ])
-  ])
+    ]
+  )
 ])
 
 dnl *** x265 (H.265/HEVC encoder) ***
@@ -3110,7 +3364,6 @@
 AM_CONDITIONAL(USE_MODPLUG, false)
 AM_CONDITIONAL(USE_MIMIC, false)
 AM_CONDITIONAL(USE_MPEG2ENC, false)
-AM_CONDITIONAL(USE_MPG123, false)
 AM_CONDITIONAL(USE_MPLEX, false)
 AM_CONDITIONAL(USE_MUSEPACK, false)
 AM_CONDITIONAL(USE_NAS, false)
@@ -3135,7 +3388,6 @@
 AM_CONDITIONAL(USE_SPC, false)
 AM_CONDITIONAL(USE_SRTP, false)
 AM_CONDITIONAL(USE_GME, false)
-AM_CONDITIONAL(USE_GSETTINGS, false)
 AM_CONDITIONAL(USE_XVID, false)
 AM_CONDITIONAL(USE_DVB, false)
 AM_CONDITIONAL(USE_WININET, false)
@@ -3211,6 +3463,9 @@
 dnl LDFLAGS really should only contain flags, not libs - they get added before
 dnl whatevertarget_LIBS and -L flags here affect the rest of the linking
 GST_ALL_LDFLAGS="-no-undefined"
+if test "x${enable_Bsymbolic}" = "xyes"; then
+  GST_ALL_LDFLAGS="$GST_ALL_LDFLAGS -Wl,-Bsymbolic-functions"
+fi
 AC_SUBST(GST_ALL_LDFLAGS)
 
 dnl GST_LIB_LDFLAGS
@@ -3241,6 +3496,7 @@
 gst/adpcmdec/Makefile
 gst/adpcmenc/Makefile
 gst/aiff/Makefile
+gst/videoframe_audiolevel/Makefile
 gst/asfmux/Makefile
 gst/audiofxbad/Makefile
 gst/audiomixer/Makefile
@@ -3272,7 +3528,6 @@
 gst/jp2kdecimator/Makefile
 gst/jpegformat/Makefile
 gst/librfb/Makefile
-gst/liveadder/Makefile
 gst/midi/Makefile
 gst/mpegdemux/Makefile
 gst/mpegtsdemux/Makefile
@@ -3281,6 +3536,7 @@
 gst/mpegpsmux/Makefile
 gst/mve/Makefile
 gst/mxf/Makefile
+gst/netsim/Makefile
 gst/nuvdemux/Makefile
 gst/onvif/Makefile
 gst/patchdetect/Makefile
@@ -3288,7 +3544,6 @@
 gst/pnm/Makefile
 gst/rawparse/Makefile
 gst/removesilence/Makefile
-gst/rtp/Makefile
 gst/sdi/Makefile
 gst/sdp/Makefile
 gst/segmentclip/Makefile
@@ -3327,7 +3582,9 @@
 gst-libs/gst/uridownloader/Makefile
 gst-libs/gst/wayland/Makefile
 gst-libs/gst/base/Makefile
+gst-libs/gst/player/Makefile
 gst-libs/gst/video/Makefile
+gst-libs/gst/audio/Makefile
 sys/Makefile
 sys/dshowdecwrapper/Makefile
 sys/acmenc/Makefile
@@ -3345,8 +3602,10 @@
 sys/dvb/Makefile
 sys/fbdev/Makefile
 sys/linsys/Makefile
+sys/nvenc/Makefile
 sys/opensles/Makefile
 sys/shm/Makefile
+sys/tinyalsa/Makefile
 sys/uvch264/Makefile
 sys/vcd/Makefile
 sys/vdpau/Makefile
@@ -3385,6 +3644,7 @@
 tests/examples/mxf/Makefile
 tests/examples/opencv/Makefile
 tests/examples/uvch264/Makefile
+tests/examples/waylandsink/Makefile
 tests/icles/Makefile
 ext/voamrwbenc/Makefile
 ext/voaacenc/Makefile
@@ -3417,7 +3677,6 @@
 ext/Makefile
 ext/modplug/Makefile
 ext/mpeg2enc/Makefile
-ext/mpg123/Makefile
 ext/mimic/Makefile
 ext/mplex/Makefile
 ext/musepack/Makefile
@@ -3446,10 +3705,10 @@
 ext/srtp/Makefile
 ext/teletextdec/Makefile
 ext/gme/Makefile
-ext/gsettings/Makefile
-ext/gsettings/org.freedesktop.gstreamer.default-elements.gschema.xml
 ext/spc/Makefile
 ext/timidity/Makefile
+ext/vulkan/Makefile
+ext/vulkan/xcb/Makefile
 ext/webp/Makefile
 ext/x265/Makefile
 ext/xvid/Makefile
@@ -3471,12 +3730,16 @@
 pkgconfig/gstreamer-gl-uninstalled.pc
 pkgconfig/gstreamer-mpegts.pc
 pkgconfig/gstreamer-mpegts-uninstalled.pc
+pkgconfig/gstreamer-player.pc
+pkgconfig/gstreamer-player-uninstalled.pc
 pkgconfig/gstreamer-wayland.pc
 pkgconfig/gstreamer-wayland-uninstalled.pc
 pkgconfig/gstreamer-bad-base.pc
 pkgconfig/gstreamer-bad-base-uninstalled.pc
 pkgconfig/gstreamer-bad-video.pc
 pkgconfig/gstreamer-bad-video-uninstalled.pc
+pkgconfig/gstreamer-bad-audio.pc
+pkgconfig/gstreamer-bad-audio-uninstalled.pc
 tools/Makefile
 m4/Makefile
 )
diff --git a/debian/build-deps b/debian/build-deps
index 68f64c4..6d91d5d 100644
--- a/debian/build-deps
+++ b/debian/build-deps
@@ -15,11 +15,11 @@
 @GST_EXTRA_BUILD_DEPENDS@
 @GST_LIB_DEV_DEP@
 gstreamer@GST_ABI@-doc
-gstreamer@GST_ABI@-plugins-base (>= 1.6.3)
+gstreamer@GST_ABI@-plugins-base (>= 1.7.91)
 gstreamer@GST_ABI@-plugins-base-doc
 gtk-doc-tools (>= 1.12)
 ladspa-sdk
-libass-dev (>= 0.9.4)
+libass-dev (>= 0.10.4)
 libbs2b-dev
 libbz2-dev
 libcairo2-dev
@@ -28,31 +28,30 @@
 libdca-dev
 libde265-dev
 libdirectfb-dev (>= 0.9.25)
+libdrm-dev
 libdvdnav-dev (>= 4.1.2) [!hurd-any]
 libegl1-mesa-dev
 libexempi-dev
 libexif-dev (>= 0.6.16)
-libfaad-dev
+libfaad-dev (>= 2.7)
 libfluidsynth-dev (>= 1.0)
 libgirepository1.0-dev (>= 0.9.12-4~)
 libgl1-mesa-dev
 libgles2-mesa-dev
-libglib2.0-dev (>= 2.32)
+libglib2.0-dev (>= 2.40)
 libglu1-mesa-dev
 libgme-dev
 libgnutls28-dev (>= 2.11.3)
 libgsm1-dev
-libgstreamer-plugins-base@GST_ABI@-dev (>= 1.6.3)
+libgstreamer-plugins-base@GST_ABI@-dev (>= 1.7.91)
 libgtk-3-dev (>= 3.15.0)
 libiptcdata0-dev (>= 1.0.2)
-libjasper-dev
 libkate-dev (>= 0.1.7)
 libmimic-dev (>= 1.0)
 libmjpegtools-dev
 libmms-dev (>= 0.4)
 libmodplug-dev
 libmpcdec-dev
-libmpg123-dev (>= 1.13)
 libofa0-dev (>= 0.9.3)
 libopenal-dev (>= 1:1.14)
 libopencv-dev (>= 2.3.0)
@@ -61,7 +60,7 @@
 libopus-dev (>= 0.9.4)
 liborc-0.4-dev (>= 1:0.4.17)
 libpng-dev
-librsvg2-dev (>= 2.36)
+librsvg2-dev (>= 2.36.2)
 librtmp-dev
 libschroedinger-dev (>= 1.0.7)
 libsndfile1-dev (>= 1.0.16)
diff --git a/debian/build-deps.in b/debian/build-deps.in
index b6847fe..c3e6a21 100644
--- a/debian/build-deps.in
+++ b/debian/build-deps.in
@@ -1,6 +1,6 @@
 @GST_LIB_DEV_DEP@
 @GST_EXTRA_BUILD_DEPENDS@
-libgstreamer-plugins-base@GST_ABI@-dev (>= 1.6.3)
+libgstreamer-plugins-base@GST_ABI@-dev (>= 1.7.91)
 autotools-dev
 dh-autoreconf
 automake (>= 1.14)
@@ -12,7 +12,7 @@
 dpkg-dev (>= 1.15.1)
 pkg-config (>= 0.11.0)
 gtk-doc-tools (>= 1.12)
-libglib2.0-dev (>= 2.32)
+libglib2.0-dev (>= 2.40)
 liborc-0.4-dev (>= 1:0.4.17)
 libbz2-dev
 libdca-dev
@@ -23,25 +23,24 @@
 libgtk-3-dev (>= 3.15.0)
 ladspa-sdk
 libsndfile1-dev (>= 1.0.16)
-libfaad-dev
+libfaad-dev (>= 2.7)
 libdirectfb-dev (>= 0.9.25)
 libexif-dev (>= 0.6.16)
 libexempi-dev
 libiptcdata0-dev (>= 1.0.2)
 libwildmidi-dev (>= 0.2.3)
-gstreamer@GST_ABI@-plugins-base (>= 1.6.3)
+gstreamer@GST_ABI@-plugins-base (>= 1.7.91)
 libofa0-dev (>= 0.9.3)
 libdvdnav-dev (>= 4.1.2) [!hurd-any]
 libssl-dev
-libjasper-dev
 libx11-dev
-libass-dev (>= 0.9.4)
+libass-dev (>= 0.10.4)
 libmodplug-dev
 libkate-dev (>= 0.1.7)
 libschroedinger-dev (>= 1.0.7)
 libmimic-dev (>= 1.0)
 libgme-dev
-librsvg2-dev (>= 2.36)
+librsvg2-dev (>= 2.36.2)
 libcairo2-dev
 libpng-dev
 flite-dev
@@ -58,7 +57,6 @@
 libzvbi-dev
 libspandsp-dev
 libopus-dev (>= 0.9.4)
-libmpg123-dev (>= 1.13)
 libgl1-mesa-dev
 libegl1-mesa-dev
 libgles2-mesa-dev
@@ -82,3 +80,4 @@
 gir1.2-freedesktop
 gir1.2-gstreamer-1.0
 gir1.2-gst-plugins-base-1.0
+libdrm-dev
diff --git a/debian/changelog b/debian/changelog
index c53a388..ca8bdfb 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,8 +1,58 @@
-gst-plugins-bad1.0 (1.6.3-1) unstable; urgency=medium
+gst-plugins-bad1.0 (1.7.91-1) experimental; urgency=medium
 
-  * New upstream bugfix release.
+  * debian/build-deps.in:
+    + Remove libjasper-dev. It's unused and supposed to be removed soon.
+      (Closes: #818213).
+  * New upstream release candidate:
+    + debian/build-deps.in,
+      debian/rules:
+      - Build-depend on GStreamer >= 1.7.91.
 
- -- Sebastian Dröge <slomo@debian.org>  Wed, 20 Jan 2016 14:54:27 +0200
+ -- Sebastian Dröge <slomo@debian.org>  Wed, 02 Mar 2016 16:45:09 +0200
+
+gst-plugins-bad1.0 (1.7.90-1) experimental; urgency=medium
+
+  [ Iain Lane ]
+  * debian/watch: Fix to work with upstream locations
+
+  [ Sebastian Dröge ]
+  * New upstream release candidate:
+    + debian/build-deps.in,
+      debian/rules:
+      - Build-depend on GStreamer >= 1.7.90.
+    + debian/gstreamer-plugins-bad.install:
+      - Ship new opusparse plugin, renamed from opus and only contains
+        the parser now.
+
+ -- Sebastian Dröge <slomo@debian.org>  Tue, 01 Mar 2016 17:25:00 +0200
+
+gst-plugins-bad1.0 (1.7.2-1) experimental; urgency=medium
+
+  * New upstream unstable release:
+    + debian/build-deps.in,
+      debian/rules:
+      - Build-depend on GStreamer >= 1.7.2.
+      - Update faad dependency to >= 2.7 and rsvg to >= 2.36.2.
+    + debian/gstreamer-plugins-bad.install:
+      - Drop mpg123 (moved to -ugly) and rtpbad (moved to -good) plugins.
+      - Add new netsim plugin.
+    + debian/libgstreamer-plugins-bad*.install:
+      - Add new badaudio library.
+
+ -- Sebastian Dröge <slomo@debian.org>  Fri, 19 Feb 2016 11:29:54 +0200
+
+gst-plugins-bad1.0 (1.7.1-1) experimental; urgency=medium
+
+  * New upstream unstable release:
+    + debian/build-deps.in,
+      debian/rules:
+      - Build-depend on GLib >= 2.40 and GStreamer >= 1.7.1.
+      - Build-depend on libass >= 0.10.2.
+      - Build-depend on libdrm-dev.
+    + debian/gstreamer-plugins-base.install:
+      - Drop liveadder plugin and add new videoframe_audiolevel plugin.
+
+ -- Sebastian Dröge <slomo@debian.org>  Thu, 24 Dec 2015 14:23:55 +0100
 
 gst-plugins-bad1.0 (1.6.2-1) unstable; urgency=medium
 
diff --git a/debian/control b/debian/control
index 74bfcaa..d4823dc 100644
--- a/debian/control
+++ b/debian/control
@@ -26,13 +26,13 @@
                libbluetooth-dev (>= 5) [linux-any],
                libsbc-dev (>= 1.1) [linux-any],
                libwayland-dev (>= 1.0) [linux-any],
-               libgstreamer1.0-dev (>= 1.6.3),
+               libgstreamer1.0-dev (>= 1.7.91),
                gstreamer1.0-doc,
-               gstreamer1.0-plugins-base (>= 1.6.3),
+               gstreamer1.0-plugins-base (>= 1.7.91),
                gstreamer1.0-plugins-base-doc,
                gtk-doc-tools (>= 1.12),
                ladspa-sdk,
-               libass-dev (>= 0.9.4),
+               libass-dev (>= 0.10.4),
                libbs2b-dev,
                libbz2-dev,
                libcairo2-dev,
@@ -41,31 +41,30 @@
                libdca-dev,
                libde265-dev,
                libdirectfb-dev (>= 0.9.25),
+               libdrm-dev,
                libdvdnav-dev (>= 4.1.2) [!hurd-any],
                libegl1-mesa-dev,
                libexempi-dev,
                libexif-dev (>= 0.6.16),
-               libfaad-dev,
+               libfaad-dev (>= 2.7),
                libfluidsynth-dev (>= 1.0),
                libgirepository1.0-dev (>= 0.9.12-4~),
                libgl1-mesa-dev,
                libgles2-mesa-dev,
-               libglib2.0-dev (>= 2.32),
+               libglib2.0-dev (>= 2.40),
                libglu1-mesa-dev,
                libgme-dev,
                libgnutls28-dev (>= 2.11.3),
                libgsm1-dev,
-               libgstreamer-plugins-base1.0-dev (>= 1.6.3),
+               libgstreamer-plugins-base1.0-dev (>= 1.7.91),
                libgtk-3-dev (>= 3.15.0),
                libiptcdata0-dev (>= 1.0.2),
-               libjasper-dev,
                libkate-dev (>= 0.1.7),
                libmimic-dev (>= 1.0),
                libmjpegtools-dev,
                libmms-dev (>= 0.4),
                libmodplug-dev,
                libmpcdec-dev,
-               libmpg123-dev (>= 1.13),
                libofa0-dev (>= 0.9.3),
                libopenal-dev (>= 1:1.14),
                libopencv-dev (>= 2.3.0),
@@ -74,7 +73,7 @@
                libopus-dev (>= 0.9.4),
                liborc-0.4-dev (>= 1:0.4.17),
                libpng-dev,
-               librsvg2-dev (>= 2.36),
+               librsvg2-dev (>= 2.36.2),
                librtmp-dev,
                libschroedinger-dev (>= 1.0.7),
                libsndfile1-dev (>= 1.0.16),
diff --git a/debian/gstreamer-plugins-bad.install b/debian/gstreamer-plugins-bad.install
index e84df04..b9b9e11 100644
--- a/debian/gstreamer-plugins-bad.install
+++ b/debian/gstreamer-plugins-bad.install
@@ -27,7 +27,6 @@
 debian/tmp/usr/lib/*/gstreamer-@GST_ABI@/libgstfaad.so
 debian/tmp/usr/lib/*/gstreamer-@GST_ABI@/libgstfestival.so
 debian/tmp/usr/lib/*/gstreamer-@GST_ABI@/libgstfieldanalysis.so
-debian/tmp/usr/lib/*/gstreamer-@GST_ABI@/libgstfragmented.so
 debian/tmp/usr/lib/*/gstreamer-@GST_ABI@/libgstfreeverb.so
 debian/tmp/usr/lib/*/gstreamer-@GST_ABI@/libgstfrei0r.so
 debian/tmp/usr/lib/*/gstreamer-@GST_ABI@/libgstflite.so
@@ -38,6 +37,7 @@
 debian/tmp/usr/lib/*/gstreamer-@GST_ABI@/libgstgme.so
 debian/tmp/usr/lib/*/gstreamer-@GST_ABI@/libgstgsm.so
 debian/tmp/usr/lib/*/gstreamer-@GST_ABI@/libgstgtksink.so
+debian/tmp/usr/lib/*/gstreamer-@GST_ABI@/libgsthls.so
 debian/tmp/usr/lib/*/gstreamer-@GST_ABI@/libgstid3tag.so
 debian/tmp/usr/lib/*/gstreamer-@GST_ABI@/libgstinter.so
 debian/tmp/usr/lib/*/gstreamer-@GST_ABI@/libgstinterlace.so
@@ -48,7 +48,6 @@
 debian/tmp/usr/lib/*/gstreamer-@GST_ABI@/libgstjp2kdecimator.so
 debian/tmp/usr/lib/*/gstreamer-@GST_ABI@/libgstladspa.so
 debian/tmp/usr/lib/*/gstreamer-@GST_ABI@/libgstlibde265.so
-debian/tmp/usr/lib/*/gstreamer-@GST_ABI@/libgstliveadder.so
 debian/tmp/usr/lib/*/gstreamer-@GST_ABI@/libgstmidi.so
 debian/tmp/usr/lib/*/gstreamer-@GST_ABI@/libgstmimic.so
 debian/tmp/usr/lib/*/gstreamer-@GST_ABI@/libgstmms.so
@@ -58,16 +57,16 @@
 debian/tmp/usr/lib/*/gstreamer-@GST_ABI@/libgstmpegtsdemux.so
 debian/tmp/usr/lib/*/gstreamer-@GST_ABI@/libgstmpegpsmux.so
 debian/tmp/usr/lib/*/gstreamer-@GST_ABI@/libgstmpegtsmux.so
-debian/tmp/usr/lib/*/gstreamer-@GST_ABI@/libgstmpg123.so
 debian/tmp/usr/lib/*/gstreamer-@GST_ABI@/libgstmplex.so
 debian/tmp/usr/lib/*/gstreamer-@GST_ABI@/libgstmxf.so
+debian/tmp/usr/lib/*/gstreamer-@GST_ABI@/libgstnetsim.so
 debian/tmp/usr/lib/*/gstreamer-@GST_ABI@/libgstofa.so
 debian/tmp/usr/lib/*/gstreamer-@GST_ABI@/libgstopenal.so
 debian/tmp/usr/lib/*/gstreamer-@GST_ABI@/libgstopencv.so
 debian/tmp/usr/lib/*/gstreamer-@GST_ABI@/libgstopengl.so
 debian/tmp/usr/lib/*/gstreamer-@GST_ABI@/libgstopenexr.so
 debian/tmp/usr/lib/*/gstreamer-@GST_ABI@/libgstopenjpeg.so
-debian/tmp/usr/lib/*/gstreamer-@GST_ABI@/libgstopus.so
+debian/tmp/usr/lib/*/gstreamer-@GST_ABI@/libgstopusparse.so
 debian/tmp/usr/lib/*/gstreamer-@GST_ABI@/libgstpcapparse.so
 debian/tmp/usr/lib/*/gstreamer-@GST_ABI@/libgstpnm.so
 debian/tmp/usr/lib/*/gstreamer-@GST_ABI@/libgstrawparse.so
@@ -76,7 +75,6 @@
 debian/tmp/usr/lib/*/gstreamer-@GST_ABI@/libgstrsvg.so
 debian/tmp/usr/lib/*/gstreamer-@GST_ABI@/libgstrtmp.so
 debian/tmp/usr/lib/*/gstreamer-@GST_ABI@/libgstrtponvif.so
-debian/tmp/usr/lib/*/gstreamer-@GST_ABI@/libgstrtpbad.so
 @sbc@
 debian/tmp/usr/lib/*/gstreamer-@GST_ABI@/libgstschro.so
 debian/tmp/usr/lib/*/gstreamer-@GST_ABI@/libgstsdpelem.so
@@ -93,6 +91,7 @@
 debian/tmp/usr/lib/*/gstreamer-@GST_ABI@/libgststereo.so
 debian/tmp/usr/lib/*/gstreamer-@GST_ABI@/libgstsubenc.so
 debian/tmp/usr/lib/*/gstreamer-@GST_ABI@/libgstvideofiltersbad.so
+debian/tmp/usr/lib/*/gstreamer-@GST_ABI@/libgstvideoframe_audiolevel.so
 debian/tmp/usr/lib/*/gstreamer-@GST_ABI@/libgstvideoparsersbad.so
 debian/tmp/usr/lib/*/gstreamer-@GST_ABI@/libgstvideosignal.so
 debian/tmp/usr/lib/*/gstreamer-@GST_ABI@/libgstvmnc.so
diff --git a/debian/libgstreamer-plugins-bad.install b/debian/libgstreamer-plugins-bad.install
index 8844967..b7375ab 100644
--- a/debian/libgstreamer-plugins-bad.install
+++ b/debian/libgstreamer-plugins-bad.install
@@ -1,5 +1,6 @@
 debian/tmp/usr/lib/*/libgstadaptivedemux-@GST_ABI@.so.*
 debian/tmp/usr/lib/*/libgstphotography-@GST_ABI@.so.*
+debian/tmp/usr/lib/*/libgstbadaudio-@GST_ABI@.so.*
 debian/tmp/usr/lib/*/libgstbadbase-@GST_ABI@.so.*
 debian/tmp/usr/lib/*/libgstbadvideo-@GST_ABI@.so.*
 debian/tmp/usr/lib/*/libgstbasecamerabinsrc-@GST_ABI@.so.*
@@ -7,5 +8,6 @@
 debian/tmp/usr/lib/*/libgstinsertbin-@GST_ABI@.so.*
 debian/tmp/usr/lib/*/libgstcodecparsers-@GST_ABI@.so.*
 debian/tmp/usr/lib/*/libgstmpegts-@GST_ABI@.so.*
+debian/tmp/usr/lib/*/libgstplayer-@GST_ABI@.so.*
 debian/tmp/usr/lib/*/libgsturidownloader-@GST_ABI@.so.*
 @wayland@
diff --git a/debian/rules b/debian/rules
index a6d5a99..bbbae9c 100755
--- a/debian/rules
+++ b/debian/rules
@@ -45,7 +45,7 @@
 gst_lib=libgstreamer$(gst_abi)-0
 gst_lib_dev=libgstreamer$(gst_abi)-dev
 # what gstreamer version is needed
-gst_lib_dev_dep=$(gst_lib_dev) (>= 1.6.3)
+gst_lib_dev_dep=$(gst_lib_dev) (>= 1.7.91)
 
 gst_pkgname=gstreamer$(gst_abi)
 gst_deb_abi=$(gst_abi)-0
diff --git a/debian/watch b/debian/watch
index 12637b7..1b7b8ff 100644
--- a/debian/watch
+++ b/debian/watch
@@ -1,2 +1,2 @@
 version=3
-http://gstreamer.freedesktop.org/src/gst-plugins-bad/gst-plugins-bad-(0\.11\..*)\.tar\.gz
+http://gstreamer.freedesktop.org/src/gst-plugins-bad/gst-plugins-bad-(1\.[\d\.]+)\.tar\.xz
diff --git a/docs/Makefile.in b/docs/Makefile.in
index ad6b0f7..5a80f5e 100644
--- a/docs/Makefile.in
+++ b/docs/Makefile.in
@@ -114,16 +114,15 @@
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
 	$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
-	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gsettings.m4 \
-	$(top_srcdir)/m4/gst-fionread.m4 $(top_srcdir)/m4/gst-sdl.m4 \
-	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
-	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
-	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libgcrypt.m4 \
-	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
-	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
-	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
-	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
-	$(top_srcdir)/configure.ac
+	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gst-fionread.m4 \
+	$(top_srcdir)/m4/gst-sdl.m4 $(top_srcdir)/m4/iconv.m4 \
+	$(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \
+	$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
+	$(top_srcdir)/m4/libgcrypt.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
+	$(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
@@ -247,6 +246,8 @@
 CLUTTER_X11_LIBS = @CLUTTER_X11_LIBS@
 CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
+CUDA_CFLAGS = @CUDA_CFLAGS@
+CUDA_LIBS = @CUDA_LIBS@
 CURL_CFLAGS = @CURL_CFLAGS@
 CURL_LIBS = @CURL_LIBS@
 CXX = @CXX@
@@ -284,6 +285,8 @@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
+EGL_CFLAGS = @EGL_CFLAGS@
+EGL_LIBS = @EGL_LIBS@
 EGREP = @EGREP@
 ERROR_CFLAGS = @ERROR_CFLAGS@
 ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
@@ -292,7 +295,6 @@
 EXIF_CFLAGS = @EXIF_CFLAGS@
 EXIF_LIBS = @EXIF_LIBS@
 FAAC_LIBS = @FAAC_LIBS@
-FAAD_IS_NEAAC = @FAAD_IS_NEAAC@
 FAAD_LIBS = @FAAD_LIBS@
 FFLAGS = @FFLAGS@
 FGREP = @FGREP@
@@ -311,8 +313,9 @@
 GIO_LIBS = @GIO_LIBS@
 GIO_UNIX_CFLAGS = @GIO_UNIX_CFLAGS@
 GIO_UNIX_LIBS = @GIO_UNIX_LIBS@
+GLES2_CFLAGS = @GLES2_CFLAGS@
+GLES2_LIBS = @GLES2_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
-GLIB_COMPILE_SCHEMAS = @GLIB_COMPILE_SCHEMAS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
@@ -329,16 +332,17 @@
 GMODULE_NO_EXPORT_LIBS = @GMODULE_NO_EXPORT_LIBS@
 GMSGFMT = @GMSGFMT@
 GMSGFMT_015 = @GMSGFMT_015@
+GNUSTL_CFLAGS = @GNUSTL_CFLAGS@
+GNUSTL_LIBS = @GNUSTL_LIBS@
 GRAPHENE_CFLAGS = @GRAPHENE_CFLAGS@
 GRAPHENE_LIBS = @GRAPHENE_LIBS@
 GREP = @GREP@
-GSETTINGS_CFLAGS = @GSETTINGS_CFLAGS@
-GSETTINGS_DISABLE_SCHEMAS_COMPILE = @GSETTINGS_DISABLE_SCHEMAS_COMPILE@
-GSETTINGS_LIBS = @GSETTINGS_LIBS@
 GSM_LIBS = @GSM_LIBS@
 GSTPB_PLUGINS_DIR = @GSTPB_PLUGINS_DIR@
 GSTPB_PREFIX = @GSTPB_PREFIX@
 GST_AGE = @GST_AGE@
+GST_ALLOCATORS_CFLAGS = @GST_ALLOCATORS_CFLAGS@
+GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
 GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
 GST_API_VERSION = @GST_API_VERSION@
 GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
@@ -364,6 +368,8 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PBUTILS_CFLAGS = @GST_PBUTILS_CFLAGS@
+GST_PBUTILS_LIBS = @GST_PBUTILS_LIBS@
 GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BAD_CFLAGS = @GST_PLUGINS_BAD_CFLAGS@
@@ -389,6 +395,8 @@
 GST_PREFIX = @GST_PREFIX@
 GST_REVISION = @GST_REVISION@
 GST_TOOLS_DIR = @GST_TOOLS_DIR@
+GST_VIDEO_CFLAGS = @GST_VIDEO_CFLAGS@
+GST_VIDEO_LIBS = @GST_VIDEO_LIBS@
 GTK3_CFLAGS = @GTK3_CFLAGS@
 GTK3_GL_CFLAGS = @GTK3_GL_CFLAGS@
 GTK3_GL_LIBS = @GTK3_GL_LIBS@
@@ -490,6 +498,7 @@
 LTLIBICONV = @LTLIBICONV@
 LTLIBINTL = @LTLIBINTL@
 LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
 MANIFEST_TOOL = @MANIFEST_TOOL@
@@ -503,8 +512,6 @@
 MODPLUG_LIBS = @MODPLUG_LIBS@
 MPEG2ENC_CFLAGS = @MPEG2ENC_CFLAGS@
 MPEG2ENC_LIBS = @MPEG2ENC_LIBS@
-MPG123_CFLAGS = @MPG123_CFLAGS@
-MPG123_LIBS = @MPG123_LIBS@
 MPLEX_CFLAGS = @MPLEX_CFLAGS@
 MPLEX_LDFLAGS = @MPLEX_LDFLAGS@
 MPLEX_LIBS = @MPLEX_LIBS@
@@ -520,6 +527,8 @@
 NETTLE_LIBS = @NETTLE_LIBS@
 NM = @NM@
 NMEDIT = @NMEDIT@
+NVENCODE_CFLAGS = @NVENCODE_CFLAGS@
+NVENCODE_LIBS = @NVENCODE_LIBS@
 OBJC = @OBJC@
 OBJCDEPMODE = @OBJCDEPMODE@
 OBJCFLAGS = @OBJCFLAGS@
@@ -577,16 +586,18 @@
 PYTHON_PLATFORM = @PYTHON_PLATFORM@
 PYTHON_PREFIX = @PYTHON_PREFIX@
 PYTHON_VERSION = @PYTHON_VERSION@
+QT_ANDROID_CFLAGS = @QT_ANDROID_CFLAGS@
+QT_ANDROID_LIBS = @QT_ANDROID_LIBS@
 QT_CFLAGS = @QT_CFLAGS@
 QT_LIBS = @QT_LIBS@
+QT_MAC_CFLAGS = @QT_MAC_CFLAGS@
+QT_MAC_LIBS = @QT_MAC_LIBS@
 QT_WAYLAND_CFLAGS = @QT_WAYLAND_CFLAGS@
 QT_WAYLAND_LIBS = @QT_WAYLAND_LIBS@
 QT_X11_CFLAGS = @QT_X11_CFLAGS@
 QT_X11_LIBS = @QT_X11_LIBS@
 RANLIB = @RANLIB@
 RCC = @RCC@
-RSVG_2_36_2_CFLAGS = @RSVG_2_36_2_CFLAGS@
-RSVG_2_36_2_LIBS = @RSVG_2_36_2_LIBS@
 RSVG_CFLAGS = @RSVG_CFLAGS@
 RSVG_LIBS = @RSVG_LIBS@
 RTMP_CFLAGS = @RTMP_CFLAGS@
@@ -638,6 +649,7 @@
 VOAACENC_LIBS = @VOAACENC_LIBS@
 VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
 VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VULKAN_LIBS = @VULKAN_LIBS@
 WARNING_CFLAGS = @WARNING_CFLAGS@
 WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
 WARNING_OBJCFLAGS = @WARNING_OBJCFLAGS@
@@ -648,6 +660,7 @@
 WAYLAND_LIBS = @WAYLAND_LIBS@
 WEBP_CFLAGS = @WEBP_CFLAGS@
 WEBP_LIBS = @WEBP_LIBS@
+WGET = @WGET@
 WILDMIDI_CFLAGS = @WILDMIDI_CFLAGS@
 WILDMIDI_LIBS = @WILDMIDI_LIBS@
 WINKS_LIBS = @WINKS_LIBS@
@@ -657,6 +670,8 @@
 X11_LIBS = @X11_LIBS@
 X265_CFLAGS = @X265_CFLAGS@
 X265_LIBS = @X265_LIBS@
+XCB_CFLAGS = @XCB_CFLAGS@
+XCB_LIBS = @XCB_LIBS@
 XCOMPOSITE_CFLAGS = @XCOMPOSITE_CFLAGS@
 XCOMPOSITE_LIBS = @XCOMPOSITE_LIBS@
 XGETTEXT = @XGETTEXT@
@@ -694,7 +709,6 @@
 docdir = @docdir@
 dvidir = @dvidir@
 exec_prefix = @exec_prefix@
-gsettingsschemadir = @gsettingsschemadir@
 host = @host@
 host_alias = @host_alias@
 host_cpu = @host_cpu@
diff --git a/docs/libs/Makefile.am b/docs/libs/Makefile.am
index f360db9..7919d66 100644
--- a/docs/libs/Makefile.am
+++ b/docs/libs/Makefile.am
@@ -36,7 +36,13 @@
 CFILE_GLOB=$(top_srcdir)/gst-libs/gst/*/*.c
 
 # Header files to ignore when scanning.
-IGNORE_HFILES = $(top_srcdir)/gst-libs/gst/mpegts/gstmpegts-private.h
+IGNORE_HFILES = \
+	$(top_srcdir)/gst-libs/gst/mpegts/gstmpegts-private.h \
+	$(top_srcdir)/gst-libs/gst/player/gstplayer-signal-dispatcher-private.h \
+	$(top_srcdir)/gst-libs/gst/player/gstplayer-video-renderer-private.h \
+	$(top_srcdir)/gst-libs/gst/player/gstplayer-media-info-private.h \
+	$(top_srcdir)/gst-libs/gst/gl/gstglcontext_private.h \
+	$(top_srcdir)/gst-libs/gst/gl/gstglsl_private.h
 
 # Images to copy into HTML directory.
 HTML_IMAGES =
@@ -55,6 +61,7 @@
 	$(top_builddir)/gst-libs/gst/gl/libgstgl-@GST_API_VERSION@.la \
 	$(top_builddir)/gst-libs/gst/insertbin/libgstinsertbin-@GST_API_VERSION@.la \
 	$(top_builddir)/gst-libs/gst/mpegts/libgstmpegts-@GST_API_VERSION@.la \
+	$(top_builddir)/gst-libs/gst/player/libgstplayer-@GST_API_VERSION@.la \
   $(GST_BASE_LIBS)
 
 # If you need to override some of the declarations, place them in this file
diff --git a/docs/libs/Makefile.in b/docs/libs/Makefile.in
index d352115..765b310 100644
--- a/docs/libs/Makefile.in
+++ b/docs/libs/Makefile.in
@@ -133,16 +133,15 @@
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
 	$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
-	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gsettings.m4 \
-	$(top_srcdir)/m4/gst-fionread.m4 $(top_srcdir)/m4/gst-sdl.m4 \
-	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
-	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
-	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libgcrypt.m4 \
-	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
-	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
-	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
-	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
-	$(top_srcdir)/configure.ac
+	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gst-fionread.m4 \
+	$(top_srcdir)/m4/gst-sdl.m4 $(top_srcdir)/m4/iconv.m4 \
+	$(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \
+	$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
+	$(top_srcdir)/m4/libgcrypt.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
+	$(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
@@ -209,6 +208,8 @@
 CLUTTER_X11_LIBS = @CLUTTER_X11_LIBS@
 CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
+CUDA_CFLAGS = @CUDA_CFLAGS@
+CUDA_LIBS = @CUDA_LIBS@
 CURL_CFLAGS = @CURL_CFLAGS@
 CURL_LIBS = @CURL_LIBS@
 CXX = @CXX@
@@ -246,6 +247,8 @@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
+EGL_CFLAGS = @EGL_CFLAGS@
+EGL_LIBS = @EGL_LIBS@
 EGREP = @EGREP@
 ERROR_CFLAGS = @ERROR_CFLAGS@
 ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
@@ -254,7 +257,6 @@
 EXIF_CFLAGS = @EXIF_CFLAGS@
 EXIF_LIBS = @EXIF_LIBS@
 FAAC_LIBS = @FAAC_LIBS@
-FAAD_IS_NEAAC = @FAAD_IS_NEAAC@
 FAAD_LIBS = @FAAD_LIBS@
 FFLAGS = @FFLAGS@
 FGREP = @FGREP@
@@ -273,8 +275,9 @@
 GIO_LIBS = @GIO_LIBS@
 GIO_UNIX_CFLAGS = @GIO_UNIX_CFLAGS@
 GIO_UNIX_LIBS = @GIO_UNIX_LIBS@
+GLES2_CFLAGS = @GLES2_CFLAGS@
+GLES2_LIBS = @GLES2_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
-GLIB_COMPILE_SCHEMAS = @GLIB_COMPILE_SCHEMAS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
@@ -291,16 +294,17 @@
 GMODULE_NO_EXPORT_LIBS = @GMODULE_NO_EXPORT_LIBS@
 GMSGFMT = @GMSGFMT@
 GMSGFMT_015 = @GMSGFMT_015@
+GNUSTL_CFLAGS = @GNUSTL_CFLAGS@
+GNUSTL_LIBS = @GNUSTL_LIBS@
 GRAPHENE_CFLAGS = @GRAPHENE_CFLAGS@
 GRAPHENE_LIBS = @GRAPHENE_LIBS@
 GREP = @GREP@
-GSETTINGS_CFLAGS = @GSETTINGS_CFLAGS@
-GSETTINGS_DISABLE_SCHEMAS_COMPILE = @GSETTINGS_DISABLE_SCHEMAS_COMPILE@
-GSETTINGS_LIBS = @GSETTINGS_LIBS@
 GSM_LIBS = @GSM_LIBS@
 GSTPB_PLUGINS_DIR = @GSTPB_PLUGINS_DIR@
 GSTPB_PREFIX = @GSTPB_PREFIX@
 GST_AGE = @GST_AGE@
+GST_ALLOCATORS_CFLAGS = @GST_ALLOCATORS_CFLAGS@
+GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
 GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
 GST_API_VERSION = @GST_API_VERSION@
 GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
@@ -326,6 +330,8 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PBUTILS_CFLAGS = @GST_PBUTILS_CFLAGS@
+GST_PBUTILS_LIBS = @GST_PBUTILS_LIBS@
 GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BAD_CFLAGS = @GST_PLUGINS_BAD_CFLAGS@
@@ -351,6 +357,8 @@
 GST_PREFIX = @GST_PREFIX@
 GST_REVISION = @GST_REVISION@
 GST_TOOLS_DIR = @GST_TOOLS_DIR@
+GST_VIDEO_CFLAGS = @GST_VIDEO_CFLAGS@
+GST_VIDEO_LIBS = @GST_VIDEO_LIBS@
 GTK3_CFLAGS = @GTK3_CFLAGS@
 GTK3_GL_CFLAGS = @GTK3_GL_CFLAGS@
 GTK3_GL_LIBS = @GTK3_GL_LIBS@
@@ -452,6 +460,7 @@
 LTLIBICONV = @LTLIBICONV@
 LTLIBINTL = @LTLIBINTL@
 LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
 MANIFEST_TOOL = @MANIFEST_TOOL@
@@ -465,8 +474,6 @@
 MODPLUG_LIBS = @MODPLUG_LIBS@
 MPEG2ENC_CFLAGS = @MPEG2ENC_CFLAGS@
 MPEG2ENC_LIBS = @MPEG2ENC_LIBS@
-MPG123_CFLAGS = @MPG123_CFLAGS@
-MPG123_LIBS = @MPG123_LIBS@
 MPLEX_CFLAGS = @MPLEX_CFLAGS@
 MPLEX_LDFLAGS = @MPLEX_LDFLAGS@
 MPLEX_LIBS = @MPLEX_LIBS@
@@ -482,6 +489,8 @@
 NETTLE_LIBS = @NETTLE_LIBS@
 NM = @NM@
 NMEDIT = @NMEDIT@
+NVENCODE_CFLAGS = @NVENCODE_CFLAGS@
+NVENCODE_LIBS = @NVENCODE_LIBS@
 OBJC = @OBJC@
 OBJCDEPMODE = @OBJCDEPMODE@
 OBJCFLAGS = @OBJCFLAGS@
@@ -539,16 +548,18 @@
 PYTHON_PLATFORM = @PYTHON_PLATFORM@
 PYTHON_PREFIX = @PYTHON_PREFIX@
 PYTHON_VERSION = @PYTHON_VERSION@
+QT_ANDROID_CFLAGS = @QT_ANDROID_CFLAGS@
+QT_ANDROID_LIBS = @QT_ANDROID_LIBS@
 QT_CFLAGS = @QT_CFLAGS@
 QT_LIBS = @QT_LIBS@
+QT_MAC_CFLAGS = @QT_MAC_CFLAGS@
+QT_MAC_LIBS = @QT_MAC_LIBS@
 QT_WAYLAND_CFLAGS = @QT_WAYLAND_CFLAGS@
 QT_WAYLAND_LIBS = @QT_WAYLAND_LIBS@
 QT_X11_CFLAGS = @QT_X11_CFLAGS@
 QT_X11_LIBS = @QT_X11_LIBS@
 RANLIB = @RANLIB@
 RCC = @RCC@
-RSVG_2_36_2_CFLAGS = @RSVG_2_36_2_CFLAGS@
-RSVG_2_36_2_LIBS = @RSVG_2_36_2_LIBS@
 RSVG_CFLAGS = @RSVG_CFLAGS@
 RSVG_LIBS = @RSVG_LIBS@
 RTMP_CFLAGS = @RTMP_CFLAGS@
@@ -600,6 +611,7 @@
 VOAACENC_LIBS = @VOAACENC_LIBS@
 VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
 VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VULKAN_LIBS = @VULKAN_LIBS@
 WARNING_CFLAGS = @WARNING_CFLAGS@
 WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
 WARNING_OBJCFLAGS = @WARNING_OBJCFLAGS@
@@ -610,6 +622,7 @@
 WAYLAND_LIBS = @WAYLAND_LIBS@
 WEBP_CFLAGS = @WEBP_CFLAGS@
 WEBP_LIBS = @WEBP_LIBS@
+WGET = @WGET@
 WILDMIDI_CFLAGS = @WILDMIDI_CFLAGS@
 WILDMIDI_LIBS = @WILDMIDI_LIBS@
 WINKS_LIBS = @WINKS_LIBS@
@@ -619,6 +632,8 @@
 X11_LIBS = @X11_LIBS@
 X265_CFLAGS = @X265_CFLAGS@
 X265_LIBS = @X265_LIBS@
+XCB_CFLAGS = @XCB_CFLAGS@
+XCB_LIBS = @XCB_LIBS@
 XCOMPOSITE_CFLAGS = @XCOMPOSITE_CFLAGS@
 XCOMPOSITE_LIBS = @XCOMPOSITE_LIBS@
 XGETTEXT = @XGETTEXT@
@@ -656,7 +671,6 @@
 docdir = @docdir@
 dvidir = @dvidir@
 exec_prefix = @exec_prefix@
-gsettingsschemadir = @gsettingsschemadir@
 host = @host@
 host_alias = @host_alias@
 host_cpu = @host_cpu@
@@ -737,7 +751,14 @@
 CFILE_GLOB = $(top_srcdir)/gst-libs/gst/*/*.c
 
 # Header files to ignore when scanning.
-IGNORE_HFILES = $(top_srcdir)/gst-libs/gst/mpegts/gstmpegts-private.h
+IGNORE_HFILES = \
+	$(top_srcdir)/gst-libs/gst/mpegts/gstmpegts-private.h \
+	$(top_srcdir)/gst-libs/gst/player/gstplayer-signal-dispatcher-private.h \
+	$(top_srcdir)/gst-libs/gst/player/gstplayer-video-renderer-private.h \
+	$(top_srcdir)/gst-libs/gst/player/gstplayer-media-info-private.h \
+	$(top_srcdir)/gst-libs/gst/gl/gstglcontext_private.h \
+	$(top_srcdir)/gst-libs/gst/gl/gstglsl_private.h
+
 
 # Images to copy into HTML directory.
 HTML_IMAGES = 
@@ -756,6 +777,7 @@
 	$(top_builddir)/gst-libs/gst/gl/libgstgl-@GST_API_VERSION@.la \
 	$(top_builddir)/gst-libs/gst/insertbin/libgstinsertbin-@GST_API_VERSION@.la \
 	$(top_builddir)/gst-libs/gst/mpegts/libgstmpegts-@GST_API_VERSION@.la \
+	$(top_builddir)/gst-libs/gst/player/libgstplayer-@GST_API_VERSION@.la \
   $(GST_BASE_LIBS)
 
 
@@ -1095,17 +1117,18 @@
 @ENABLE_GTK_DOC_TRUE@	            scanobj_options="--verbose"; \
 @ENABLE_GTK_DOC_TRUE@	        fi; \
 @ENABLE_GTK_DOC_TRUE@	    fi; \
-@ENABLE_GTK_DOC_TRUE@	    GST_PLUGIN_SYSTEM_PATH_1_0=`cd $(top_builddir) && pwd`		\
-@ENABLE_GTK_DOC_TRUE@	    GST_PLUGIN_PATH_1_0=						\
+@ENABLE_GTK_DOC_TRUE@	    GST_PLUGIN_SYSTEM_PATH_1_0=`cd $(top_builddir) && pwd`	\
+@ENABLE_GTK_DOC_TRUE@	    GST_PLUGIN_PATH_1_0=					\
 @ENABLE_GTK_DOC_TRUE@	    GST_REGISTRY_1_0=doc-registry.xml				\
 @ENABLE_GTK_DOC_TRUE@	    $(GTKDOC_EXTRA_ENVIRONMENT)					\
 @ENABLE_GTK_DOC_TRUE@	    CC="$(GTKDOC_CC)" LD="$(GTKDOC_LD)" RUN="$(GTKDOC_RUN)"	\
 @ENABLE_GTK_DOC_TRUE@	    CFLAGS="$(GTKDOC_CFLAGS) $(CFLAGS)"				\
 @ENABLE_GTK_DOC_TRUE@	    LDFLAGS="$(GTKDOC_LIBS) $(LDFLAGS)"				\
 @ENABLE_GTK_DOC_TRUE@	    gtkdoc-scangobj --type-init-func="gst_init(NULL,NULL)"	\
-@ENABLE_GTK_DOC_TRUE@	        $$scanobj_options --module=$(DOC_MODULE) ;				\
+@ENABLE_GTK_DOC_TRUE@	        $$scanobj_options --module=$(DOC_MODULE) ;		\
 @ENABLE_GTK_DOC_TRUE@	else								\
 @ENABLE_GTK_DOC_TRUE@	    for i in $(SCANOBJ_FILES) ; do				\
+@ENABLE_GTK_DOC_TRUE@	       $(MKDIR_P) $(dirname $$i) ;				\
 @ENABLE_GTK_DOC_TRUE@	       test -f $$i || touch $$i ;				\
 @ENABLE_GTK_DOC_TRUE@	    done							\
 @ENABLE_GTK_DOC_TRUE@	fi
diff --git a/docs/libs/gst-plugins-bad-libs-docs.sgml b/docs/libs/gst-plugins-bad-libs-docs.sgml
index 76651b7..88fd11d 100644
--- a/docs/libs/gst-plugins-bad-libs-docs.sgml
+++ b/docs/libs/gst-plugins-bad-libs-docs.sgml
@@ -73,6 +73,9 @@
     <chapter id="gl">
       <title>OpenGL Helper Library</title>
       <xi:include href="xml/gstglapi.xml"/>
+      <xi:include href="xml/gstglbasememory.xml"/>
+      <xi:include href="xml/gstglbasefilter.xml"/>
+      <xi:include href="xml/gstglbuffer.xml"/>
       <xi:include href="xml/gstglbufferpool.xml"/>
       <xi:include href="xml/gstglcolorconvert.xml"/>
       <xi:include href="xml/gstglcontext.xml"/>
@@ -82,17 +85,16 @@
       <xi:include href="xml/gstglcontextglx.xml"/>
       <xi:include href="xml/gstglcontextwgl.xml"/>
       <xi:include href="xml/gstgldisplay.xml"/>
-      <xi:include href="xml/gstgldownload.xml"/>
       <xi:include href="xml/gsteglimagememory.xml"/>
-      <xi:include href="xml/gstglbasefilter.xml"/>
       <xi:include href="xml/gstglfilter.xml"/>
       <xi:include href="xml/gstglframebuffer.xml"/>
       <xi:include href="xml/gstglmemory.xml"/>
+      <xi:include href="xml/gstglmemorypbo.xml"/>
       <xi:include href="xml/gstglshader.xml"/>
+      <xi:include href="xml/gstglsl.xml"/>
+      <xi:include href="xml/gstglslstage.xml"/>
       <xi:include href="xml/gstglsyncmeta.xml"/>
       <xi:include href="xml/gstglupload.xml"/>
-      <xi:include href="xml/gstgluploadmeta.xml"/>
-      <xi:include href="xml/gstglutils.xml"/>
       <xi:include href="xml/gstglwindow.xml"/>
       <xi:include href="xml/gstglwindowandroid.xml"/>
       <xi:include href="xml/gstglwindowcocoa.xml"/>
@@ -100,6 +102,18 @@
       <xi:include href="xml/gstglwindowwayland.xml"/>
       <xi:include href="xml/gstglwindowwin32.xml"/>
       <xi:include href="xml/gstglwindowx11.xml"/>
+      <xi:include href="xml/gstgldebug.xml"/>
+      <xi:include href="xml/gstglutils.xml"/>
+      <xi:include href="xml/gstglformat.xml"/>
+    </chapter>
+
+    <chapter id="player">
+      <title>Player Library</title>
+      <xi:include href="xml/gstplayer.xml"/>
+      <xi:include href="xml/gstplayer-mediainfo.xml"/>
+      <xi:include href="xml/gstplayer-gmaincontextsignaldispatcher.xml"/>
+      <xi:include href="xml/gstplayer-videooverlayvideorenderer.xml"/>
+      <xi:include href="xml/gstplayer-visualization.xml"/>
     </chapter>
 
     <chapter>
diff --git a/docs/libs/gst-plugins-bad-libs-sections.txt b/docs/libs/gst-plugins-bad-libs-sections.txt
index 3b7cc05..922da0f 100644
--- a/docs/libs/gst-plugins-bad-libs-sections.txt
+++ b/docs/libs/gst-plugins-bad-libs-sections.txt
@@ -768,7 +768,6 @@
 GstGLPlatform
 gst_gl_platform_to_string
 gst_gl_platform_from_string
-gst_gl_check_extension
 GST_GL_API_GLES1_NAME
 GST_GL_API_GLES2_NAME
 GST_GL_API_OPENGL3_NAME
@@ -784,11 +783,39 @@
 </SECTION>
 
 <SECTION>
+<FILE>gstglbuffer</FILE>
+<TITLE>GstGLBuffer</TITLE>
+GstGLBuffer
+gst_gl_buffer_init_once
+gst_is_gl_buffer
+gst_gl_buffer_alloc
+GstGLBufferAllocationParams
+GST_GL_ALLOCATION_PARAMS_ALLOC_FLAG_BUFFER
+gst_gl_buffer_allocation_params_new
+GstGLBufferAllocator
+GstGLBufferAllocatorClass
+GST_GL_BUFFER_ALLOCATOR_NAME
+GST_CAPS_FEATURE_MEMORY_GL_BUFFER
+<SUBSECTION Standard>
+GST_GL_BUFFER_CAST
+GST_GL_BUFFER_ALLOCATOR
+GST_GL_BUFFER_ALLOCATOR_CAST
+GST_GL_BUFFER_ALLOCATOR_CLASS
+GST_GL_BUFFER_ALLOCATOR_GET_CLASS
+gst_gl_buffer_allocator_get_type
+GST_IS_GL_BUFFER_ALLOCATOR
+GST_IS_GL_BUFFER_ALLOCATOR_CLASS
+GST_TYPE_GL_BUFFER_ALLOCATOR
+</SECTION>
+
+<SECTION>
 <FILE>gstglbufferpool</FILE>
 <TITLE>GstGLBufferPool</TITLE>
 GstGLBufferPool
 GstGLBufferPoolClass
 gst_gl_buffer_pool_new
+gst_buffer_pool_config_get_gl_allocation_params
+gst_buffer_pool_config_set_gl_allocation_params
 <SUBSECTION Standard>
 gst_gl_buffer_pool_replace_last_buffer
 GstGLBufferPoolPrivate
@@ -809,6 +836,8 @@
 gst_gl_color_convert_new
 gst_gl_color_convert_set_caps
 gst_gl_color_convert_transform_caps
+gst_gl_color_convert_fixate_caps
+gst_gl_color_convert_decide_allocation
 gst_gl_color_convert_perform
 <SUBSECTION Standard>
 GstGLColorConvertPrivate
@@ -836,6 +865,7 @@
 gst_gl_context_activate
 gst_gl_context_default_get_proc_address
 gst_gl_context_get_proc_address
+gst_gl_context_get_proc_address_with_platform
 gst_gl_context_get_window
 gst_gl_context_set_window
 gst_gl_context_thread_add
@@ -847,6 +877,8 @@
 gst_gl_context_get_current_gl_api
 gst_gl_context_get_thread
 gst_gl_context_can_share
+gst_gl_context_is_shared
+gst_gl_context_set_shared_with
 gst_gl_context_check_feature
 gst_gl_context_check_gl_version
 gst_gl_context_get_gl_version
@@ -854,11 +886,11 @@
 gst_gl_context_get_current
 <SUBSECTION Standard>
 GST_GL_CONTEXT
-GST_GL_IS_CONTEXT
+GST_IS_GL_CONTEXT
 GST_GL_TYPE_CONTEXT
 GST_GL_CONTEXT_CLASS
 GST_GL_CONTEXT_GET_CLASS
-GST_GL_IS_CONTEXT_CLASS
+GST_IS_GL_CONTEXT_CLASS
 GST_GL_CONTEXT_CAST
 GstGLContextPrivate
 gst_gl_context_get_type
@@ -873,11 +905,11 @@
 gst_gl_context_cocoa_get_pixel_format
 <SUBSECTION Standard>
 GST_GL_CONTEXT_COCOA
-GST_GL_IS_CONTEXT_COCOA
+GST_IS_GL_CONTEXT_COCOA
 GST_GL_TYPE_CONTEXT_COCOA
 GST_GL_CONTEXT_COCOA_CLASS
 GST_GL_CONTEXT_COCOA_GET_CLASS
-GST_GL_IS_CONTEXT_COCOA_CLASS
+GST_IS_GL_CONTEXT_COCOA_CLASS
 GST_GL_CONTEXT_COCOA_CAST
 GstGLContextCocoaPrivate
 gst_gl_context_cocoa_get_type
@@ -894,11 +926,11 @@
 gst_gl_context_egl_get_proc_address
 <SUBSECTION Standard>
 GST_GL_CONTEXT_EGL
-GST_GL_IS_CONTEXT_EGL
+GST_IS_GL_CONTEXT_EGL
 GST_GL_TYPE_CONTEXT_EGL
 GST_GL_CONTEXT_EGL_CLASS
 GST_GL_CONTEXT_EGL_GET_CLASS
-GST_GL_IS_CONTEXT_EGL_CLASS
+GST_IS_GL_CONTEXT_EGL_CLASS
 GST_GL_CONTEXT_EGL_CAST
 GstGLContextEGLPrivate
 gst_gl_context_egl_get_type
@@ -913,11 +945,11 @@
 gst_gl_context_glx_get_proc_address
 <SUBSECTION Standard>
 GST_GL_CONTEXT_GLX
-GST_GL_IS_CONTEXT_GLX
+GST_IS_GL_CONTEXT_GLX
 GST_GL_TYPE_CONTEXT_GLX
 GST_GL_CONTEXT_GLX_CLASS
 GST_GL_CONTEXT_GLX_GET_CLASS
-GST_GL_IS_CONTEXT_GLX_CLASS
+GST_IS_GL_CONTEXT_GLX_CLASS
 GST_GL_CONTEXT_GLX_CAST
 GstGLContextGLXPrivate
 gst_gl_context_glx_get_type
@@ -932,11 +964,11 @@
 gst_gl_context_wgl_get_proc_address
 <SUBSECTION Standard>
 GST_GL_CONTEXT_WGL
-GST_GL_IS_CONTEXT_WGL
+GST_IS_GL_CONTEXT_WGL
 GST_GL_TYPE_CONTEXT_WGL
 GST_GL_CONTEXT_WGL_CLASS
 GST_GL_CONTEXT_WGL_GET_CLASS
-GST_GL_IS_CONTEXT_WGL_CLASS
+GST_IS_GL_CONTEXT_WGL_CLASS
 GST_GL_CONTEXT_WGL_CAST
 GstGLContextWGLPrivate
 gst_gl_context_wgl_get_type
@@ -950,11 +982,11 @@
 gst_gl_context_eagl_get_current_context
 <SUBSECTION Standard>
 GST_GL_CONTEXT_EAGL
-GST_GL_IS_CONTEXT_EAGL
+GST_IS_GL_CONTEXT_EAGL
 GST_GL_TYPE_CONTEXT_EAGL
 GST_GL_CONTEXT_EAGL_CLASS
 GST_GL_CONTEXT_EAGL_GET_CLASS
-GST_GL_IS_CONTEXT_EAGL_CLASS
+GST_IS_GL_CONTEXT_EAGL_CLASS
 GST_GL_CONTEXT_EAGL_CAST
 GstGLContextEaglPrivate
 
@@ -963,6 +995,7 @@
 gst_gl_context_eagl_prepare_draw
 gst_gl_context_eagl_finish_draw
 gst_gl_context_eagl_resize
+gst_gl_context_eagl_update_layer
 </SECTION>
 
 <SECTION>
@@ -978,6 +1011,7 @@
 gst_gl_display_add_context
 gst_gl_display_get_gl_context_for_thread
 gst_gl_display_get_handle
+gst_gl_display_create_context
 gst_context_get_gl_display
 gst_context_set_gl_display
 <SUBSECTION Standard>
@@ -992,23 +1026,22 @@
 </SECTION>
 
 <SECTION>
-<FILE>gstgldownload</FILE>
-<TITLE>GstGLDownload</TITLE>
-GstGLDownload
-gst_gl_download_new
-gst_gl_download_set_format
-gst_gl_download_transform_caps
-gst_gl_download_perform_with_data
-<SUBSECTION Standard>
-GST_GL_DOWNLOAD
-GST_GL_DOWNLOAD_CAST
-GST_GL_DOWNLOAD_CLASS
-GST_GL_DOWNLOAD_GET_CLASS
-gst_gl_download_get_type
-GST_IS_GL_DOWNLOAD
-GST_IS_GL_DOWNLOAD_CLASS
-GST_TYPE_GL_DOWNLOAD
-GstGLDownloadPrivate
+<FILE>gstgldebug</FILE>
+GstGLAsyncDebugLogGetMessage
+<TITLE>OpenGL Debugging</TITLE>
+GstGLAsyncDebug
+gst_gl_async_debug_new
+gst_gl_async_debug_free
+gst_gl_async_debug_init
+gst_gl_async_debug_unset
+gst_gl_async_debug_freeze
+gst_gl_async_debug_thaw
+gst_gl_async_debug_output_log_msg
+gst_gl_async_debug_store_log_msg
+gst_gl_async_debug_store_log_msg_valist
+GST_GL_ASYNC_CAT_LEVEL_LOG_valist
+GST_GL_ASYNC_CAT_LEVEL_LOG
+gst_gl_insert_debug_marker
 </SECTION>
 
 <SECTION>
@@ -1022,7 +1055,7 @@
 GST_TYPE_GL_BASE_FILTER
 gst_gl_base_filter_get_type
 GST_GL_BASE_FILTER_CLASS
-GST_IS_GL_FILTER_CLASS
+GST_IS_GL_BASE_FILTER_CLASS
 GST_GL_BASE_FILTER_GET_CLASS
 GstGLBaseFilterPrivate
 </SECTION>
@@ -1047,6 +1080,29 @@
 </SECTION>
 
 <SECTION>
+<FILE>gstglformat</FILE>
+<TITLE>OpenGL Formats</TITLE>
+GstGLTextureTarget
+GST_GL_TEXTURE_TARGET_2D_STR
+GST_GL_TEXTURE_TARGET_RECTANGLE_STR
+GST_GL_TEXTURE_TARGET_EXTERNAL_OES_STR
+GST_BUFFER_POOL_OPTION_GL_TEXTURE_TARGET_2D
+GST_BUFFER_POOL_OPTION_GL_TEXTURE_TARGET_RECTANGLE
+GST_BUFFER_POOL_OPTION_GL_TEXTURE_TARGET_EXTERNAL_OES
+gst_gl_format_type_n_bytes
+gst_gl_texture_type_n_bytes
+gst_gl_format_from_gl_texture_type
+gst_gl_texture_type_from_format
+gst_gl_sized_gl_format_from_gl_format_type
+gst_gl_texture_target_from_string
+gst_gl_texture_target_to_string
+gst_gl_texture_target_to_gl
+gst_gl_texture_target_from_gl
+gst_gl_texture_target_to_buffer_pool_option
+<SUBSECTION Standard>
+</SECTION>
+
+<SECTION>
 <FILE>gstglframebuffer</FILE>
 <TITLE>GstGLFramebuffer</TITLE>
 GstGLFramebuffer
@@ -1056,6 +1112,7 @@
 gst_gl_framebuffer_delete
 gst_gl_framebuffer_use_v2
 <SUBSECTION Standard>
+GstGLFramebufferPrivate
 GST_GL_FRAMEBUFFER
 GST_GL_FRAMEBUFFER_CAST
 GST_IS_GL_FRAMEBUFFER
@@ -1067,30 +1124,119 @@
 </SECTION>
 
 <SECTION>
+<FILE>gstglbasememory</FILE>
+GstGLBaseMemoryAllocator
+GstGLBaseMemoryAllocatorClass
+GST_GL_BASE_MEMORY_ALLOCATOR_NAME
+GST_MAP_GL
+GstGLBaseMemoryError
+GST_GL_BASE_MEMORY_ERROR
+GstGLBaseMemoryTransfer
+GstGLAllocationParams
+GstGLAllocationParamsCopyFunc
+GstGLAllocationParamsFreeFunc
+GST_GL_ALLOCATION_PARAMS_ALLOC_FLAG_ALLOC
+GST_GL_ALLOCATION_PARAMS_ALLOC_FLAG_WRAP_SYSMEM
+GST_GL_ALLOCATION_PARAMS_ALLOC_FLAG_WRAP_GPU_HANDLE
+GST_GL_ALLOCATION_PARAMS_ALLOC_FLAG_USER
+gst_gl_allocation_params_init
+gst_gl_allocation_params_copy
+gst_gl_allocation_params_free
+gst_gl_allocation_params_free_data
+gst_gl_allocation_params_copy_data
+<TITLE>GstGLBaseMemory</TITLE>
+GstGLBaseMemory
+gst_gl_base_memory_init_once
+gst_gl_base_memory_init
+gst_is_gl_base_memory
+GstGLBaseMemoryAllocatorAllocFunction
+GstGLBaseMemoryAllocatorCreateFunction
+GstGLBaseMemoryAllocatorMapFunction
+GstGLBaseMemoryAllocatorUnmapFunction
+GstGLBaseMemoryAllocatorCopyFunction
+GstGLBaseMemoryAllocatorDestroyFunction
+gst_gl_base_memory_alloc
+gst_gl_base_memory_alloc_data
+gst_gl_base_memory_memcpy
+<SUBSECTION Standard>
+GST_TYPE_GL_ALLOCATION_PARAMS
+gst_gl_allocation_params_get_type
+gst_gl_base_memory_error_quark
+GST_GL_BASE_MEMORY_CAST
+GST_GL_BASE_MEMORY_ALLOCATOR
+GST_GL_BASE_MEMORY_ALLOCATOR_CAST
+GST_GL_BASE_MEMORY_ALLOCATOR_CLASS
+GST_GL_BASE_MEMORY_ALLOCATOR_GET_CLASS
+gst_gl_base_memory_allocator_get_type
+GST_IS_GL_BASE_MEMORY_ALLOCATOR
+GST_IS_GL_BASE_MEMORY_ALLOCATOR_CLASS
+GST_TYPE_GL_BASE_MEMORY_ALLOCATOR
+</SECTION>
+
+<SECTION>
 <FILE>gstglmemory</FILE>
-GstGLAllocator
-GstGLAllocatorClass
-GST_GL_MEMORY_ALLOCATOR
 <TITLE>GstGLMemory</TITLE>
+GST_GL_MEMORY_VIDEO_FORMATS_STR
+GstGLVideoAllocationParams
+GST_GL_ALLOCATION_PARAMS_ALLOC_FLAG_VIDEO
+gst_gl_video_allocation_params_copy_data
+gst_gl_video_allocation_params_free_data
+gst_gl_video_allocation_params_init_full
+gst_gl_video_allocation_params_new
+gst_gl_video_allocation_params_new_wrapped_data
+gst_gl_video_allocation_params_new_wrapped_texture
+GstGLMemoryAllocator
+GstGLMemoryAllocatorClass
+gst_gl_memory_allocator_get_default
+gst_gl_memory_init_once
 GstGLMemory
 gst_gl_memory_init
-gst_gl_memory_alloc
-gst_gl_memory_wrapped
-gst_gl_memory_wrapped_texture
-gst_gl_memory_copy_into_texture
-gst_gl_memory_setup_buffer
-gst_gl_memory_setup_wrapped
-gst_gl_texture_type_from_format
 gst_is_gl_memory
+GST_GL_MEMORY_ALLOCATOR_NAME
+gst_gl_memory_copy_into
+gst_gl_memory_copy_teximage
+gst_gl_memory_read_pixels
+gst_gl_memory_texsubimage
+gst_gl_memory_get_texture_height
+gst_gl_memory_get_texture_id
+gst_gl_memory_get_texture_target
+gst_gl_memory_get_texture_type
+gst_gl_memory_get_texture_width
+gst_gl_memory_setup_buffer
 <SUBSECTION Standard>
-GST_GL_ALLOCATOR
-GST_GL_ALLOCATOR_CAST
-GST_GL_ALLOCATOR_CLASS
-GST_GL_ALLOCATOR_GET_CLASS
-gst_gl_allocator_get_type
-GST_IS_GL_ALLOCATOR
-GST_IS_GL_ALLOCATOR_CLASS
-GST_TYPE_GL_ALLOCATOR
+GST_GL_MEMORY_CAST
+GST_GL_MEMORY_ALLOCATOR
+GST_GL_MEMORY_ALLOCATOR_CAST
+GST_GL_MEMORY_ALLOCATOR_CLASS
+GST_GL_MEMORY_ALLOCATOR_GET_CLASS
+gst_gl_memory_allocator_get_type
+GST_IS_GL_MEMORY_ALLOCATOR
+GST_IS_GL_MEMORY_ALLOCATOR_CLASS
+GST_TYPE_GL_MEMORY_ALLOCATOR
+</SECTION>
+
+<SECTION>
+<FILE>gstglmemorypbo</FILE>
+GstGLMemoryPBOAllocator
+GstGLMemoryPBOAllocatorClass
+GST_GL_MEMORY_PBO_ALLOCATOR_NAME
+<TITLE>GstGLMemoryPBO</TITLE>
+GstGLMemoryPBO
+gst_is_gl_memory_pbo
+gst_gl_memory_pbo_copy_into_texture
+gst_gl_memory_pbo_download_transfer
+gst_gl_memory_pbo_init_once
+gst_gl_memory_pbo_upload_transfer
+<SUBSECTION Standard>
+GST_GL_MEMORY_PBO_CAST
+GST_GL_MEMORY_PBO_ALLOCATOR
+GST_GL_MEMORY_PBO_ALLOCATOR_CAST
+GST_GL_MEMORY_PBO_ALLOCATOR_CLASS
+GST_GL_MEMORY_PBO_ALLOCATOR_GET_CLASS
+gst_gl_memory_pbo_allocator_get_type
+GST_IS_GL_MEMORY_PBO_ALLOCATOR
+GST_IS_GL_MEMORY_PBO_ALLOCATOR_CLASS
+GST_TYPE_GL_MEMORY_PBO_ALLOCATOR
 </SECTION>
 
 <SECTION>
@@ -1110,31 +1256,23 @@
 
 <SECTION>
 <FILE>gstglshader</FILE>
-gst_gl_shader_error_quark
-GST_GL_SHADER_ERROR
-GstGLShaderError
-GstGLShaderSourceType
-gst_gl_shadervariable_desc
-gst_gl_shadervariable_set
-gst_gl_shadervariables_parse
 <TITLE>GstGLShader</TITLE>
 GstGLShader
 gst_gl_shader_new
-gst_gl_shader_set_vertex_source
-gst_gl_shader_set_fragment_source
-gst_gl_shader_get_vertex_source
-gst_gl_shader_get_fragment_source
-gst_gl_shader_get_program_handle
-gst_gl_shader_set_active
-gst_gl_shader_is_compiled
-gst_gl_shader_compile
-gst_gl_shader_compile_and_check
-gst_gl_shader_compile_all_with_attribs_and_check
-gst_gl_shader_compile_with_default_f_and_check
-gst_gl_shader_compile_with_default_v_and_check
-gst_gl_shader_compile_with_default_vf_and_check
-gst_gl_shader_release
+gst_gl_shader_new_default
+gst_gl_shader_new_link_with_stages
+gst_gl_shader_new_with_stages
 gst_gl_shader_use
+gst_gl_shader_get_program_handle
+gst_gl_shader_release
+gst_gl_shader_release_unlocked
+gst_gl_shader_attach
+gst_gl_shader_attach_unlocked
+gst_gl_shader_compile_attach_stage
+gst_gl_shader_detach
+gst_gl_shader_detach_unlocked
+gst_gl_shader_is_linked
+gst_gl_shader_link
 gst_gl_shader_set_uniform_1i
 gst_gl_shader_set_uniform_1f
 gst_gl_shader_set_uniform_1fv
@@ -1165,24 +1303,73 @@
 <SUBSECTION Standard>
 GstGLShaderPrivate
 GST_GL_SHADER
-GST_GL_IS_SHADER
+GST_IS_GL_SHADER
 GST_GL_TYPE_SHADER
 gst_gl_shader_get_type
 GST_GL_SHADER_CLASS
-GST_GL_IS_SHADER_CLASS
+GST_IS_GL_SHADER_CLASS
 GST_GL_SHADER_GET_CLASS
 </SECTION>
 
 <SECTION>
+<FILE>gstglsl</FILE>
+<TITLE>GstGLSL</TITLE>
+GST_GLSL_ERROR
+gst_glsl_error_quark
+GstGLSLError
+GstGLSLProfile
+GstGLSLVersion
+gst_glsl_profile_from_string
+gst_glsl_profile_to_string
+gst_glsl_version_from_string
+gst_glsl_version_to_string
+gst_glsl_version_profile_from_string
+gst_glsl_version_profile_to_string
+gst_glsl_string_get_version_profile
+gst_gl_context_supports_glsl_profile_version
+gst_gl_version_to_glsl_version
+</SECTION>
+
+<SECTION>
+<FILE>gstglslstage</FILE>
+<TITLE>GstGLSLStage</TITLE>
+GstGLSLStage
+GstGLSLStageClass
+gst_glsl_stage_new
+gst_glsl_stage_new_default_fragment
+gst_glsl_stage_new_default_vertex
+gst_glsl_stage_new_with_string
+gst_glsl_stage_new_with_strings
+gst_glsl_stage_set_strings
+gst_glsl_stage_compile
+gst_glsl_stage_get_handle
+gst_glsl_stage_get_profile
+gst_glsl_stage_get_shader_type
+gst_glsl_stage_get_version
+<SUBSECTION Standard>
+GstGLSLStagePrivate
+gst_glsl_stage_get_type
+GST_TYPE_GLSL_STAGE
+GST_IS_GLSL_STAGE
+GST_IS_GLSL_STAGE_CLASS
+GST_GLSL_STAGE
+GST_GLSL_STAGE_CLASS
+GST_GLSL_STAGE_GET_CLASS
+</SECTION>
+
+</SECTION>
+<SECTION>
 <FILE>gstglsyncmeta</FILE>
 <TITLE>GstGLSyncMeta</TITLE>
 GstGLSyncMeta
 gst_buffer_add_gl_sync_meta
+gst_buffer_add_gl_sync_meta_full
 gst_buffer_get_gl_sync_meta
 gst_gl_sync_meta_api_get_type
 gst_gl_sync_meta_get_info
 gst_gl_sync_meta_set_sync_point
 gst_gl_sync_meta_wait
+gst_gl_sync_meta_wait_cpu
 GST_BUFFER_POOL_OPTION_GL_SYNC_META
 <SUBSECTION Standard>
 GST_GL_SYNC_META_API_TYPE
@@ -1199,7 +1386,7 @@
 gst_gl_upload_propose_allocation
 gst_gl_upload_transform_caps
 gst_gl_upload_perform_with_buffer
-gst_gl_upload_release_buffer
+gst_gl_upload_get_input_template_caps
 <SUBSECTION Standard>
 GST_GL_UPLOAD
 GST_GL_UPLOAD_CAST
@@ -1213,28 +1400,8 @@
 </SECTION>
 
 <SECTION>
-<FILE>gstgluploadmeta</FILE>
-<TITLE>GstGLUploadMeta</TITLE>
-GstGLUploadMeta
-gst_gl_upload_meta_new
-gst_gl_upload_meta_set_format
-gst_gl_upload_meta_get_format
-gst_gl_upload_meta_add_to_buffer
-<SUBSECTION Standard>
-GST_GL_UPLOAD_META
-GST_GL_UPLOAD_META_CAST
-GST_GL_UPLOAD_META_CLASS
-GST_GL_UPLOAD_META_GET_CLASS
-gst_gl_upload_meta_get_type
-GST_IS_GL_UPLOAD_META
-GST_IS_GL_UPLOAD_META_CLASS
-GST_TYPE_GL_UPLOAD_META
-GstGLUploadMetaPrivate
-</SECTION>
-
-<SECTION>
 <FILE>gstglutils</FILE>
-<TITLE>Utilities</TITLE>
+<TITLE>OpenGL Miscellaneous Utilities</TITLE>
 GLCB
 GLCB_V2
 CRCB
@@ -1257,7 +1424,38 @@
 gst_gl_caps_replace_all_caps_features
 gst_gl_ensure_element_data
 gst_gl_get_plane_data_size
+gst_gl_get_plane_start
 gst_gl_run_query
+gst_gl_value_get_texture_target_mask
+gst_gl_value_set_texture_target
+gst_gl_value_set_texture_target_from_mask
+</SECTION>
+
+<SECTION>
+<FILE>gstglviewconvert</FILE>
+<TITLE>GstGLViewConvert</TITLE>
+GstGLStereoDownmix
+GstGLViewConvert
+GstGLViewConvertClass
+gst_gl_view_convert_new
+gst_gl_view_convert_set_caps
+gst_gl_view_convert_transform_caps
+gst_gl_view_convert_fixate_caps
+gst_gl_view_convert_submit_input_buffer
+gst_gl_view_convert_get_output
+gst_gl_view_convert_perform
+gst_gl_view_convert_reset
+gst_gl_view_convert_set_context
+<SUBSECTION Standard>
+gst_gl_stereo_downmix_mode_get_type
+GST_IS_GL_VIEW_CONVERT
+GST_IS_GL_VIEW_CONVERT_CLASS
+GST_GL_TYPE_VIEW_CONVERT
+GST_GL_VIEW_CONVERT
+GST_GL_VIEW_CONVERT_CLASS
+GST_GL_VIEW_CONVERT_GET_CLASS
+gst_gl_view_convert_get_type
+GstGLViewConvertPrivate
 </SECTION>
 
 <SECTION>
@@ -1274,7 +1472,6 @@
 GstGLWindowClass
 gst_gl_window_new
 gst_gl_window_draw
-gst_gl_window_draw_unlocked
 gst_gl_window_is_running
 gst_gl_window_quit
 gst_gl_window_run
@@ -1292,8 +1489,8 @@
 gst_gl_window_get_surface_dimensions
 gst_gl_window_handle_events
 <SUBSECTION Standard>
-GST_GL_IS_WINDOW
-GST_GL_IS_WINDOW_CLASS
+GST_IS_GL_WINDOW
+GST_IS_GL_WINDOW_CLASS
 GST_GL_TYPE_WINDOW
 GST_GL_WINDOW
 GST_GL_WINDOW_CLASS
@@ -1314,8 +1511,8 @@
 GstGLWindowAndroidEGLClass
 gst_gl_window_android_egl_new
 <SUBSECTION Standard>
-GST_GL_IS_WINDOW_ANDROID_EGL
-GST_GL_IS_WINDOW_ANDROID_EGL_CLASS
+GST_IS_GL_WINDOW_ANDROID_EGL
+GST_IS_GL_WINDOW_ANDROID_EGL_CLASS
 GST_GL_TYPE_WINDOW_ANDROID_EGL
 GST_GL_WINDOW_ANDROID_EGL
 GST_GL_WINDOW_ANDROID_EGL_CLASS
@@ -1331,8 +1528,8 @@
 gst_gl_window_cocoa_new
 gst_gl_window_cocoa_create_window
 <SUBSECTION Standard>
-GST_GL_IS_WINDOW_COCOA
-GST_GL_IS_WINDOW_COCOA_CLASS
+GST_IS_GL_WINDOW_COCOA
+GST_IS_GL_WINDOW_COCOA_CLASS
 GST_GL_TYPE_WINDOW_COCOA
 GST_GL_WINDOW_COCOA
 GST_GL_WINDOW_COCOA_CLASS
@@ -1348,8 +1545,8 @@
 GstGLWindowDispmanxEGLClass
 gst_gl_window_dispmanx_egl_new
 <SUBSECTION Standard>
-GST_GL_IS_WINDOW_DISPMANX_EGL
-GST_GL_IS_WINDOW_DISPMANX_EGL_CLASS
+GST_IS_GL_WINDOW_DISPMANX_EGL
+GST_IS_GL_WINDOW_DISPMANX_EGL_CLASS
 GST_GL_TYPE_WINDOW_DISPMANX_EGL
 GST_GL_WINDOW_DISPMANX_EGL
 GST_GL_WINDOW_DISPMANX_EGL_CLASS
@@ -1364,8 +1561,8 @@
 GstGLWindowWaylandEGLClass
 gst_gl_window_wayland_egl_new
 <SUBSECTION Standard>
-GST_GL_IS_WINDOW_WAYLAND_EGL
-GST_GL_IS_WINDOW_WAYLAND_EGL_CLASS
+GST_IS_GL_WINDOW_WAYLAND_EGL
+GST_IS_GL_WINDOW_WAYLAND_EGL_CLASS
 GST_GL_TYPE_WINDOW_WAYLAND_EGL
 GST_GL_WINDOW_WAYLAND_EGL
 GST_GL_WINDOW_WAYLAND_EGL_CLASS
@@ -1382,8 +1579,8 @@
 gst_gl_window_win32_new
 gst_gl_window_win32_create_window
 <SUBSECTION Standard>
-GST_GL_IS_WINDOW_WIN32
-GST_GL_IS_WINDOW_WIN32_CLASS
+GST_IS_GL_WINDOW_WIN32
+GST_IS_GL_WINDOW_WIN32_CLASS
 GST_GL_TYPE_WINDOW_WIN32
 GST_GL_WINDOW_WIN32
 GST_GL_WINDOW_WIN32_CLASS
@@ -1402,8 +1599,8 @@
 gst_gl_window_x11_trap_x_errors
 gst_gl_window_x11_untrap_x_errors
 <SUBSECTION Standard>
-GST_GL_IS_WINDOW_X11
-GST_GL_IS_WINDOW_X11_CLASS
+GST_IS_GL_WINDOW_X11
+GST_IS_GL_WINDOW_X11_CLASS
 GST_GL_TYPE_WINDOW_X11
 GST_GL_WINDOW_X11
 GST_GL_WINDOW_X11_CLASS
@@ -1481,3 +1678,249 @@
 GST_VIDEO_AGGREGATOR_PAD_GET_CLASS
 gst_videoaggregator_pad_get_type
 </SECTION>
+
+<SECTION>
+<FILE>gstplayer</FILE>
+GstPlayer
+
+gst_player_new
+
+gst_player_play
+gst_player_pause
+gst_player_stop
+
+gst_player_seek
+
+gst_player_set_uri
+gst_player_get_uri
+
+gst_player_get_duration
+gst_player_get_position
+
+gst_player_set_volume
+gst_player_set_mute
+gst_player_get_volume
+gst_player_get_mute
+
+gst_player_get_pipeline
+
+gst_player_set_position_update_interval
+gst_player_get_position_update_interval
+
+GstPlayerState
+gst_player_state_get_name
+
+GST_PLAYER_ERROR
+GstPlayerError
+gst_player_error_get_name
+
+gst_player_get_media_info
+gst_player_get_audio_streams
+gst_player_get_video_streams
+gst_player_get_subtitle_streams
+
+gst_player_set_audio_track
+gst_player_set_video_track
+gst_player_set_subtitle_track
+
+gst_player_get_current_audio_track
+gst_player_get_current_video_track
+gst_player_get_current_subtitle_track
+
+gst_player_set_audio_track_enabled
+gst_player_set_video_track_enabled
+gst_player_set_subtitle_track_enabled
+
+gst_player_set_subtitle_uri
+gst_player_get_subtitle_uri
+
+gst_player_set_visualization
+gst_player_set_visualization_enabled
+gst_player_get_current_visualization
+
+GstPlayerColorBalanceType
+gst_player_color_balance_type_get_name
+
+gst_player_has_color_balance
+gst_player_set_color_balance
+gst_player_get_color_balance
+
+gst_player_get_rate
+gst_player_set_rate
+
+GstPlayerSignalDispatcher
+GstPlayerSignalDispatcherInterface
+
+GstPlayerVideoRenderer
+GstPlayerVideoRendererInterface
+
+<SUBSECTION Standard>
+GST_IS_PLAYER
+GST_IS_PLAYER_CLASS
+GST_PLAYER
+GST_PLAYER_CAST
+GST_PLAYER_CLASS
+GST_PLAYER_GET_CLASS
+GST_TYPE_PLAYER
+GstPlayerClass
+gst_player_get_type
+
+gst_player_visualization_get_type
+
+GST_TYPE_PLAYER_ERROR
+gst_player_error_quark
+gst_player_error_get_type
+
+GST_TYPE_PLAYER_STATE
+gst_player_state_get_type
+
+GST_TYPE_PLAYER_COLOR_BALANCE_TYPE
+gst_player_color_balance_type_get_type
+
+GST_TYPE_PLAYER_SIGNAL_DISPATCHER
+GST_PLAYER_SIGNAL_DISPATCHER
+GST_IS_PLAYER_SIGNAL_DISPATCHER
+GST_PLAYER_SIGNAL_DISPATCHER_GET_INTERFACE
+gst_player_signal_dispatcher_get_type
+
+GST_TYPE_PLAYER_VIDEO_RENDERER
+GST_IS_PLAYER_VIDEO_RENDERER
+GST_PLAYER_VIDEO_RENDERER
+GST_PLAYER_VIDEO_RENDERER_GET_INTERFACE
+gst_player_video_renderer_get_type
+</SECTION>
+
+<SECTION>
+<FILE>gstplayer-gmaincontextsignaldispatcher</FILE>
+gst_player_g_main_context_signal_dispatcher_new
+
+<SUBSECTION Standard>
+GST_PLAYER_G_MAIN_CONTEXT_SIGNAL_DISPATCHER
+GST_PLAYER_G_MAIN_CONTEXT_SIGNAL_DISPATCHER_CAST
+GST_PLAYER_G_MAIN_CONTEXT_SIGNAL_DISPATCHER_CLASS
+GST_PLAYER_G_MAIN_CONTEXT_SIGNAL_DISPATCHER_GET_CLASS
+GST_IS_PLAYER_G_MAIN_CONTEXT_SIGNAL_DISPATCHER
+GST_IS_PLAYER_G_MAIN_CONTEXT_SIGNAL_DISPATCHER_CLASS
+GST_TYPE_PLAYER_G_MAIN_CONTEXT_SIGNAL_DISPATCHER
+
+gst_player_g_main_context_signal_dispatcher_get_type
+</SECTION>
+
+<SECTION>
+<FILE>gstplayer-videooverlayvideorenderer</FILE>
+GstPlayerVideoOverlayVideoRenderer
+
+gst_player_video_overlay_video_renderer_new
+gst_player_video_overlay_video_renderer_get_window_handle
+gst_player_video_overlay_video_renderer_set_window_handle
+
+gst_player_video_overlay_video_renderer_expose
+
+gst_player_video_overlay_video_renderer_get_render_rectangle
+gst_player_video_overlay_video_renderer_set_render_rectangle
+
+<SUBSECTION Standard>
+GST_PLAYER_VIDEO_OVERLAY_VIDEO_RENDERER
+GST_PLAYER_VIDEO_OVERLAY_VIDEO_RENDERER_CAST
+GST_PLAYER_VIDEO_OVERLAY_VIDEO_RENDERER_CLASS
+GST_PLAYER_VIDEO_OVERLAY_VIDEO_RENDERER_GET_CLASS
+GST_IS_PLAYER_VIDEO_OVERLAY_VIDEO_RENDERER
+GST_IS_PLAYER_VIDEO_OVERLAY_VIDEO_RENDERER_CLASS
+GST_TYPE_PLAYER_VIDEO_OVERLAY_VIDEO_RENDERER
+
+gst_player_video_overlay_video_renderer_get_type
+
+</SECTION>
+
+<SECTION>
+<FILE>gstplayer-visualization</FILE>
+GstPlayerVisualization
+gst_player_visualizations_get
+gst_player_visualizations_free
+gst_player_visualization_copy
+gst_player_visualization_free
+
+<SUBSECTION Standard>
+gst_player_visualization_get_type
+</SECTION>
+
+<SECTION>
+<FILE>gstplayer-mediainfo</FILE>
+GstPlayerMediaInfo
+
+GstPlayerStreamInfo
+GstPlayerAudioInfo
+GstPlayerVideoInfo
+GstPlayerSubtitleInfo
+
+gst_player_media_info_get_uri
+gst_player_media_info_get_duration
+gst_player_media_info_get_title
+gst_player_media_info_get_container_format
+gst_player_media_info_is_seekable
+gst_player_media_info_get_image_sample
+gst_player_media_info_get_tags
+gst_player_media_info_get_stream_list
+
+gst_player_stream_info_get_index
+gst_player_stream_info_get_caps
+gst_player_stream_info_get_tags
+gst_player_stream_info_get_codec
+gst_player_stream_info_get_stream_type
+
+gst_player_audio_info_get_bitrate
+gst_player_audio_info_get_channels
+gst_player_audio_info_get_language
+gst_player_audio_info_get_max_bitrate
+gst_player_audio_info_get_sample_rate
+
+gst_player_video_info_get_bitrate
+gst_player_video_info_get_height
+gst_player_video_info_get_width
+gst_player_video_info_get_framerate
+gst_player_video_info_get_max_bitrate
+gst_player_video_info_get_pixel_aspect_ratio
+
+gst_player_subtitle_info_get_language
+<SUBSECTION Standard>
+GST_PLAYER_MEDIA_INFO
+GST_IS_PLAYER_MEDIA_INFO
+GST_PLAYER_MEDIA_INFO_CLASS
+GST_IS_PLAYER_MEDIA_INFO_CLASS
+GST_TYPE_PLAYER_MEDIA_INFO
+GstPlayerMediaInfoClass
+gst_player_media_info_get_type
+
+GST_PLAYER_STREAM_INFO
+GST_IS_PLAYER_STREAM_INFO
+GST_PLAYER_STREAM_INFO_CLASS
+GST_IS_PLAYER_STREAM_INFO_CLASS
+GST_TYPE_PLAYER_STREAM_INFO
+GstPlayerStreamInfoClass
+gst_player_stream_info_get_type
+
+GST_PLAYER_AUDIO_INFO
+GST_IS_PLAYER_AUDIO_INFO
+GST_PLAYER_AUDIO_INFO_CLASS
+GST_IS_PLAYER_AUDIO_INFO_CLASS
+GST_TYPE_PLAYER_AUDIO_INFO
+GstPlayerAudioInfoClass
+gst_player_audio_info_get_type
+
+GST_PLAYER_VIDEO_INFO
+GST_IS_PLAYER_VIDEO_INFO
+GST_PLAYER_VIDEO_INFO_CLASS
+GST_IS_PLAYER_VIDEO_INFO_CLASS
+GST_TYPE_PLAYER_VIDEO_INFO
+GstPlayerVideoInfoClass
+gst_player_video_info_get_type
+
+GST_IS_PLAYER_SUBTITLE_INFO
+GST_PLAYER_SUBTITLE_INFO
+GST_PLAYER_SUBTITLE_INFO_CLASS
+GST_IS_PLAYER_SUBTITLE_INFO_CLASS
+GST_TYPE_PLAYER_SUBTITLE_INFO
+GstPlayerSubtitleInfoClass
+gst_player_subtitle_info_get_type
+</SECTION>
+
diff --git a/docs/libs/gst-plugins-bad-libs.types b/docs/libs/gst-plugins-bad-libs.types
index 2bf883e..f7f761e 100644
--- a/docs/libs/gst-plugins-bad-libs.types
+++ b/docs/libs/gst-plugins-bad-libs.types
@@ -5,6 +5,7 @@
 #include <gst/insertbin/gstinsertbin.h>
 #include <gst/mpegts/mpegts.h>
 #include <gst/gl/gl.h>
+#include <gst/player/player.h>
 
 gst_mpegts_section_get_type
 gst_mpegts_section_type_get_type
@@ -26,17 +27,34 @@
 gst_insert_bin_get_type
 
 
-gst_gl_allocator_get_type
+gst_gl_buffer_allocator_get_type
+gst_gl_memory_allocator_get_type
+gst_gl_memory_pbo_allocator_get_type
 gst_gl_base_filter_get_type
 gst_gl_buffer_pool_get_type
 gst_gl_color_convert_get_type
 gst_gl_context_get_type
 gst_gl_display_get_type
-gst_gl_download_get_type
 gst_gl_filter_get_type
 gst_gl_framebuffer_get_type
 gst_gl_shader_get_type
+gst_glsl_stage_get_type
 gst_gl_upload_get_type
-gst_gl_upload_meta_get_type
+gst_gl_view_convert_get_type
 gst_gl_window_get_type
 
+gst_player_audio_info_get_type
+gst_player_color_balance_type_get_type
+gst_player_error_get_type
+gst_player_g_main_context_signal_dispatcher_get_type
+gst_player_get_type
+gst_player_media_info_get_type
+gst_player_signal_dispatcher_get_type
+gst_player_state_get_type
+gst_player_stream_info_get_type
+gst_player_subtitle_info_get_type
+gst_player_video_info_get_type
+gst_player_video_overlay_video_renderer_get_type
+gst_player_video_renderer_get_type
+gst_player_visualization_get_type
+
diff --git a/docs/libs/html/GstGLBaseFilter.html b/docs/libs/html/GstGLBaseFilter.html
index 8cc430b..ea6ff61 100644
--- a/docs/libs/html/GstGLBaseFilter.html
+++ b/docs/libs/html/GstGLBaseFilter.html
@@ -3,11 +3,11 @@
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>GstGLBaseFilter: GStreamer Bad Plugins 1.0 Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
 <link rel="home" href="index.html" title="GStreamer Bad Plugins 1.0 Library Reference Manual">
 <link rel="up" href="gl.html" title="OpenGL Helper Library">
-<link rel="prev" href="gst-plugins-bad-libs-GstEGLImageMemory.html" title="GstEGLImageMemory">
-<link rel="next" href="GstGLFilter.html" title="GstGLFilter">
+<link rel="prev" href="gst-plugins-bad-libs-gstglbasememory.html" title="GstGLBaseMemory">
+<link rel="next" href="gst-plugins-bad-libs-GstGLBuffer.html" title="GstGLBuffer">
 <meta name="generator" content="GTK-Doc V1.24 (XML mode)">
 <link rel="stylesheet" href="style.css" type="text/css">
 </head>
@@ -21,21 +21,21 @@
 </td>
 <td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
 <td><a accesskey="u" href="gl.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
-<td><a accesskey="p" href="gst-plugins-bad-libs-GstEGLImageMemory.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
-<td><a accesskey="n" href="GstGLFilter.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
+<td><a accesskey="p" href="gst-plugins-bad-libs-gstglbasememory.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
+<td><a accesskey="n" href="gst-plugins-bad-libs-GstGLBuffer.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
 </tr></table>
 <div class="refentry">
 <a name="GstGLBaseFilter"></a><div class="titlepage"></div>
 <div class="refnamediv"><table width="100%"><tr>
 <td valign="top">
 <h2><span class="refentrytitle"><a name="GstGLBaseFilter.top_of_page"></a>GstGLBaseFilter</span></h2>
-<p>GstGLBaseFilter</p>
+<p>GstGLBaseFilter — <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer-libs/html/GstBaseTransform.html"><span class="type">GstBaseTransform</span></a> subclass for transformin OpenGL resources</p>
 </td>
 <td class="gallery_image" valign="top" align="right"></td>
 </tr></table></div>
 <div class="refsect1">
 <a name="GstGLBaseFilter.properties"></a><h2>Properties</h2>
-<div class="informaltable"><table border="0">
+<div class="informaltable"><table class="informaltable" border="0">
 <colgroup>
 <col width="150px" class="properties_type">
 <col width="300px" class="properties_name">
@@ -51,7 +51,7 @@
 </div>
 <div class="refsect1">
 <a name="GstGLBaseFilter.other"></a><h2>Types and Values</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="name">
 <col class="description">
@@ -81,6 +81,10 @@
 </div>
 <div class="refsect1">
 <a name="GstGLBaseFilter.description"></a><h2>Description</h2>
+<p><a class="link" href="GstGLBaseFilter.html" title="GstGLBaseFilter"><span class="type">GstGLBaseFilter</span></a> handles the nitty gritty details of retrieving an OpenGL
+context.  It also provided some wrappers around <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer-libs/html/GstBaseTransform.html"><span class="type">GstBaseTransform</span></a>'s
+<code class="function">start()</code>, <code class="function">stop()</code> and <code class="function">set_caps()</code> virtual methods that ensure an OpenGL context
+is available and current in the calling thread.</p>
 </div>
 <div class="refsect1">
 <a name="GstGLBaseFilter.functions_details"></a><h2>Functions</h2>
@@ -91,11 +95,9 @@
 <div class="refsect2">
 <a name="GstGLBaseFilter-struct"></a><h3>GstGLBaseFilter</h3>
 <pre class="programlisting">typedef struct _GstGLBaseFilter GstGLBaseFilter;</pre>
-<p><a class="link" href="GstGLBaseFilter.html" title="GstGLBaseFilter"><span class="type">GstGLBaseFilter</span></a> is a base class that provides the logic of getting the
-GL context from the pipeline.</p>
 <div class="refsect3">
-<a name="id-1.2.9.14.8.2.5"></a><h4>Members</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="id-1.2.9.4.8.2.4"></a><h4>Members</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="300px" class="struct_members_name">
 <col class="struct_members_description">
@@ -114,13 +116,12 @@
 
   gboolean (*gl_start)          (GstGLBaseFilter *filter);
   void     (*gl_stop)           (GstGLBaseFilter *filter);
-
-  gpointer _padding[GST_PADDING];
+  gboolean (*gl_set_caps)       (GstGLBaseFilter *filter, GstCaps * incaps, GstCaps * outcaps);
 } GstGLBaseFilterClass;
 </pre>
 <div class="refsect3">
-<a name="id-1.2.9.14.8.3.4"></a><h4>Members</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="id-1.2.9.4.8.3.4"></a><h4>Members</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="300px" class="struct_members_name">
 <col class="struct_members_description">
@@ -129,13 +130,13 @@
 <tbody>
 <tr>
 <td class="struct_member_name"><p><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer-libs/html/GstBaseTransform.html#GstBaseTransformClass"><span class="type">GstBaseTransformClass</span></a> <em class="structfield"><code><a name="GstGLBaseFilterClass.parent-class"></a>parent_class</code></em>;</p></td>
-<td> </td>
-<td> </td>
+<td class="struct_member_description"><p>parent class</p></td>
+<td class="struct_member_annotations"> </td>
 </tr>
 <tr>
 <td class="struct_member_name"><p><a class="link" href="gst-plugins-bad-libs-GstGLAPI.html#GstGLAPI" title="enum GstGLAPI"><span class="type">GstGLAPI</span></a> <em class="structfield"><code><a name="GstGLBaseFilterClass.supported-gl-api"></a>supported_gl_api</code></em>;</p></td>
-<td> </td>
-<td> </td>
+<td class="struct_member_description"><p>the logical-OR of <a class="link" href="gst-plugins-bad-libs-GstGLAPI.html#GstGLAPI" title="enum GstGLAPI"><span class="type">GstGLAPI</span></a>'s supported by this element</p></td>
+<td class="struct_member_annotations"> </td>
 </tr>
 <tr>
 <td class="struct_member_name"><p><em class="structfield"><code><a name="GstGLBaseFilterClass.gl-start"></a>gl_start</code></em> ()</p></td>
@@ -148,9 +149,10 @@
 <td class="struct_member_annotations"> </td>
 </tr>
 <tr>
-<td class="struct_member_name"><p><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> <em class="structfield"><code><a name="GstGLBaseFilterClass.-padding"></a>_padding</code></em>[GST_PADDING];</p></td>
-<td> </td>
-<td> </td>
+<td class="struct_member_name"><p><em class="structfield"><code><a name="GstGLBaseFilterClass.gl-set-caps"></a>gl_set_caps</code></em> ()</p></td>
+<td class="struct_member_description"><p>called in the GL thread when caps are set on <em class="parameter"><code>filter</code></em>
+.</p></td>
+<td class="struct_member_annotations"> </td>
 </tr>
 </tbody>
 </table></div>
@@ -166,6 +168,10 @@
 <p>Flags: Read</p>
 </div>
 </div>
+<div class="refsect1">
+<a name="GstGLBaseFilter.see-also"></a><h2>See Also</h2>
+<p><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer-libs/html/GstBaseTransform.html"><span class="type">GstBaseTransform</span></a></p>
+</div>
 </div>
 <div class="footer">
 <hr>Generated by GTK-Doc V1.24</div>
diff --git a/docs/libs/html/GstGLBufferPool.html b/docs/libs/html/GstGLBufferPool.html
index 84a96f3..95a3765 100644
--- a/docs/libs/html/GstGLBufferPool.html
+++ b/docs/libs/html/GstGLBufferPool.html
@@ -3,10 +3,10 @@
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>GstGLBufferPool: GStreamer Bad Plugins 1.0 Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
 <link rel="home" href="index.html" title="GStreamer Bad Plugins 1.0 Library Reference Manual">
 <link rel="up" href="gl.html" title="OpenGL Helper Library">
-<link rel="prev" href="gst-plugins-bad-libs-GstGLAPI.html" title="GstGLAPI">
+<link rel="prev" href="gst-plugins-bad-libs-GstGLBuffer.html" title="GstGLBuffer">
 <link rel="next" href="GstGLColorConvert.html" title="GstGLColorConvert">
 <meta name="generator" content="GTK-Doc V1.24 (XML mode)">
 <link rel="stylesheet" href="style.css" type="text/css">
@@ -20,7 +20,7 @@
 </td>
 <td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
 <td><a accesskey="u" href="gl.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
-<td><a accesskey="p" href="gst-plugins-bad-libs-GstGLAPI.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
+<td><a accesskey="p" href="gst-plugins-bad-libs-GstGLBuffer.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
 <td><a accesskey="n" href="GstGLColorConvert.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
 </tr></table>
 <div class="refentry">
@@ -28,42 +28,60 @@
 <div class="refnamediv"><table width="100%"><tr>
 <td valign="top">
 <h2><span class="refentrytitle"><a name="GstGLBufferPool.top_of_page"></a>GstGLBufferPool</span></h2>
-<p>GstGLBufferPool — buffer pool for <a class="link" href="gst-plugins-bad-libs-gstglmemory.html#GstGLMemory" title="GstGLMemory"><span class="type">GstGLMemory</span></a> objects</p>
+<p>GstGLBufferPool — buffer pool for <a class="link" href="gst-plugins-bad-libs-GstGLMemory.html#GstGLMemory" title="GstGLMemory"><span class="type">GstGLMemory</span></a> objects</p>
 </td>
 <td class="gallery_image" valign="top" align="right"></td>
 </tr></table></div>
 <div class="refsect1">
 <a name="GstGLBufferPool.functions"></a><h2>Functions</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="functions_return">
 <col class="functions_name">
 </colgroup>
-<tbody><tr>
+<tbody>
+<tr>
 <td class="function_type">
 <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstBufferPool.html"><span class="returnvalue">GstBufferPool</span></a> *
 </td>
 <td class="function_name">
 <a class="link" href="GstGLBufferPool.html#gst-gl-buffer-pool-new" title="gst_gl_buffer_pool_new ()">gst_gl_buffer_pool_new</a> <span class="c_punctuation">()</span>
 </td>
-</tr></tbody>
+</tr>
+<tr>
+<td class="function_type">
+<a class="link" href="gst-plugins-bad-libs-gstglbasememory.html#GstGLAllocationParams" title="struct GstGLAllocationParams"><span class="returnvalue">GstGLAllocationParams</span></a> *
+</td>
+<td class="function_name">
+<a class="link" href="GstGLBufferPool.html#gst-buffer-pool-config-get-gl-allocation-params" title="gst_buffer_pool_config_get_gl_allocation_params ()">gst_buffer_pool_config_get_gl_allocation_params</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
+<a class="link" href="GstGLBufferPool.html#gst-buffer-pool-config-set-gl-allocation-params" title="gst_buffer_pool_config_set_gl_allocation_params ()">gst_buffer_pool_config_set_gl_allocation_params</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+</tbody>
 </table></div>
 </div>
 <div class="refsect1">
 <a name="GstGLBufferPool.other"></a><h2>Types and Values</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="name">
 <col class="description">
 </colgroup>
 <tbody>
 <tr>
-<td class="datatype_keyword">struct</td>
-<td class="function_name"><a class="link" href="GstGLBufferPool.html#GstGLBufferPool-struct" title="struct GstGLBufferPool">GstGLBufferPool</a></td>
+<td class="datatype_keyword"> </td>
+<td class="function_name"><a class="link" href="GstGLBufferPool.html#GstGLBufferPool-struct" title="GstGLBufferPool">GstGLBufferPool</a></td>
 </tr>
 <tr>
-<td class="datatype_keyword">struct</td>
-<td class="function_name"><a class="link" href="GstGLBufferPool.html#GstGLBufferPoolClass" title="struct GstGLBufferPoolClass">GstGLBufferPoolClass</a></td>
+<td class="datatype_keyword"> </td>
+<td class="function_name"><a class="link" href="GstGLBufferPool.html#GstGLBufferPoolClass" title="GstGLBufferPoolClass">GstGLBufferPoolClass</a></td>
 </tr>
 </tbody>
 </table></div>
@@ -79,7 +97,7 @@
 </div>
 <div class="refsect1">
 <a name="GstGLBufferPool.description"></a><h2>Description</h2>
-<p>a <a class="link" href="GstGLBufferPool.html" title="GstGLBufferPool"><span class="type">GstGLBufferPool</span></a> is an object that allocates buffers with <a class="link" href="gst-plugins-bad-libs-gstglmemory.html#GstGLMemory" title="GstGLMemory"><span class="type">GstGLMemory</span></a></p>
+<p>a <a class="link" href="GstGLBufferPool.html" title="GstGLBufferPool"><span class="type">GstGLBufferPool</span></a> is an object that allocates buffers with <a class="link" href="gst-plugins-bad-libs-GstGLMemory.html#GstGLMemory" title="GstGLMemory"><span class="type">GstGLMemory</span></a></p>
 <p>A <a class="link" href="GstGLBufferPool.html" title="GstGLBufferPool"><span class="type">GstGLBufferPool</span></a> is created with <a class="link" href="GstGLBufferPool.html#gst-gl-buffer-pool-new" title="gst_gl_buffer_pool_new ()"><code class="function">gst_gl_buffer_pool_new()</code></a></p>
 <p><a class="link" href="GstGLBufferPool.html" title="GstGLBufferPool"><span class="type">GstGLBufferPool</span></a> implements the VideoMeta buffer pool option 
 <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base-libs/html/gst-plugins-base-libs-GstVideoPool.html#GST-BUFFER-POOL-OPTION-VIDEO-META:CAPS"><span class="type">GST_BUFFER_POOL_OPTION_VIDEO_META</span></a></p>
@@ -91,8 +109,8 @@
 <pre class="programlisting"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstBufferPool.html"><span class="returnvalue">GstBufferPool</span></a> *
 gst_gl_buffer_pool_new (<em class="parameter"><code><a class="link" href="GstGLContext.html" title="GstGLContext"><span class="type">GstGLContext</span></a> *context</code></em>);</pre>
 <div class="refsect3">
-<a name="id-1.2.9.3.7.2.4"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="id-1.2.9.6.7.2.4"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
 <col class="parameters_description">
@@ -106,31 +124,91 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.9.3.7.2.5"></a><h4>Returns</h4>
-<p> a <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstBufferPool.html"><span class="type">GstBufferPool</span></a> that allocates buffers with <a class="link" href="gst-plugins-bad-libs-gstglmemory.html#GstGLMemory" title="GstGLMemory"><span class="type">GstGLMemory</span></a></p>
+<a name="id-1.2.9.6.7.2.5"></a><h4>Returns</h4>
+<p> a <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstBufferPool.html"><span class="type">GstBufferPool</span></a> that allocates buffers with <a class="link" href="gst-plugins-bad-libs-GstGLMemory.html#GstGLMemory" title="GstGLMemory"><span class="type">GstGLMemory</span></a></p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-buffer-pool-config-get-gl-allocation-params"></a><h3>gst_buffer_pool_config_get_gl_allocation_params ()</h3>
+<pre class="programlisting"><a class="link" href="gst-plugins-bad-libs-gstglbasememory.html#GstGLAllocationParams" title="struct GstGLAllocationParams"><span class="returnvalue">GstGLAllocationParams</span></a> *
+gst_buffer_pool_config_get_gl_allocation_params
+                               (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstStructure.html"><span class="type">GstStructure</span></a> *config</code></em>);</pre>
+<div class="refsect3">
+<a name="id-1.2.9.6.7.3.4"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>config</p></td>
+<td class="parameter_description"><p>a buffer pool config</p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="id-1.2.9.6.7.3.5"></a><h4>Returns</h4>
+<p> the currently set <a class="link" href="gst-plugins-bad-libs-gstglbasememory.html#GstGLAllocationParams" title="struct GstGLAllocationParams"><span class="type">GstGLAllocationParams</span></a> or <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>. </p>
+<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-buffer-pool-config-set-gl-allocation-params"></a><h3>gst_buffer_pool_config_set_gl_allocation_params ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+gst_buffer_pool_config_set_gl_allocation_params
+                               (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstStructure.html"><span class="type">GstStructure</span></a> *config</code></em>,
+                                <em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-gstglbasememory.html#GstGLAllocationParams" title="struct GstGLAllocationParams"><span class="type">GstGLAllocationParams</span></a> *params</code></em>);</pre>
+<p>Sets <em class="parameter"><code>params</code></em>
+ on <em class="parameter"><code>config</code></em>
+</p>
+<div class="refsect3">
+<a name="id-1.2.9.6.7.4.5"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>config</p></td>
+<td class="parameter_description"><p>a buffer pool config</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>params</p></td>
+<td class="parameter_description"><p> a <a class="link" href="gst-plugins-bad-libs-gstglbasememory.html#GstGLAllocationParams" title="struct GstGLAllocationParams"><span class="type">GstGLAllocationParams</span></a>. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></td>
+</tr>
+</tbody>
+</table></div>
 </div>
 </div>
 </div>
 <div class="refsect1">
 <a name="GstGLBufferPool.other_details"></a><h2>Types and Values</h2>
 <div class="refsect2">
-<a name="GstGLBufferPool-struct"></a><h3>struct GstGLBufferPool</h3>
-<pre class="programlisting">struct GstGLBufferPool;</pre>
+<a name="GstGLBufferPool-struct"></a><h3>GstGLBufferPool</h3>
+<pre class="programlisting">typedef struct _GstGLBufferPool GstGLBufferPool;</pre>
 <p>Opaque GstGLBufferPool struct</p>
 </div>
 <hr>
 <div class="refsect2">
-<a name="GstGLBufferPoolClass"></a><h3>struct GstGLBufferPoolClass</h3>
-<pre class="programlisting">struct GstGLBufferPoolClass {
+<a name="GstGLBufferPoolClass"></a><h3>GstGLBufferPoolClass</h3>
+<pre class="programlisting">typedef struct {
   GstBufferPoolClass parent_class;
-};
+} GstGLBufferPoolClass;
 </pre>
-<p>The <a class="link" href="GstGLBufferPool.html#GstGLBufferPoolClass" title="struct GstGLBufferPoolClass"><span class="type">GstGLBufferPoolClass</span></a> structure contains only private data</p>
+<p>The <a class="link" href="GstGLBufferPool.html#GstGLBufferPoolClass" title="GstGLBufferPoolClass"><span class="type">GstGLBufferPoolClass</span></a> structure contains only private data</p>
 </div>
 </div>
 <div class="refsect1">
 <a name="GstGLBufferPool.see-also"></a><h2>See Also</h2>
-<p><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstBufferPool.html"><span class="type">GstBufferPool</span></a>, <a class="link" href="gst-plugins-bad-libs-gstglmemory.html#GstGLMemory" title="GstGLMemory"><span class="type">GstGLMemory</span></a></p>
+<p><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstBufferPool.html"><span class="type">GstBufferPool</span></a>, <a class="link" href="gst-plugins-bad-libs-GstGLMemory.html#GstGLMemory" title="GstGLMemory"><span class="type">GstGLMemory</span></a></p>
 </div>
 </div>
 <div class="footer">
diff --git a/docs/libs/html/GstGLColorConvert.html b/docs/libs/html/GstGLColorConvert.html
index 9fd6ad0..908262b 100644
--- a/docs/libs/html/GstGLColorConvert.html
+++ b/docs/libs/html/GstGLColorConvert.html
@@ -3,7 +3,7 @@
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>GstGLColorConvert: GStreamer Bad Plugins 1.0 Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
 <link rel="home" href="index.html" title="GStreamer Bad Plugins 1.0 Library Reference Manual">
 <link rel="up" href="gl.html" title="OpenGL Helper Library">
 <link rel="prev" href="GstGLBufferPool.html" title="GstGLBufferPool">
@@ -34,7 +34,7 @@
 </tr></table></div>
 <div class="refsect1">
 <a name="GstGLColorConvert.functions"></a><h2>Functions</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="functions_return">
 <col class="functions_name">
@@ -66,6 +66,22 @@
 </tr>
 <tr>
 <td class="function_type">
+<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstCaps.html"><span class="returnvalue">GstCaps</span></a> *
+</td>
+<td class="function_name">
+<a class="link" href="GstGLColorConvert.html#gst-gl-color-convert-fixate-caps" title="gst_gl_color_convert_fixate_caps ()">gst_gl_color_convert_fixate_caps</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
+</td>
+<td class="function_name">
+<a class="link" href="GstGLColorConvert.html#gst-gl-color-convert-decide-allocation" title="gst_gl_color_convert_decide_allocation ()">gst_gl_color_convert_decide_allocation</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
 <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstBuffer.html"><span class="returnvalue">GstBuffer</span></a> *
 </td>
 <td class="function_name">
@@ -77,7 +93,7 @@
 </div>
 <div class="refsect1">
 <a name="GstGLColorConvert.other"></a><h2>Types and Values</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="name">
 <col class="description">
@@ -115,8 +131,6 @@
 <p><a class="link" href="GstGLColorConvert.html" title="GstGLColorConvert"><span class="type">GstGLColorConvert</span></a> is an object that converts between color spaces and/or
 formats using OpenGL Shaders.</p>
 <p>A <a class="link" href="GstGLColorConvert.html" title="GstGLColorConvert"><span class="type">GstGLColorConvert</span></a> can be created with <a class="link" href="GstGLColorConvert.html#gst-gl-color-convert-new" title="gst_gl_color_convert_new ()"><code class="function">gst_gl_color_convert_new()</code></a>.</p>
-<p>For handling stride scaling in the shader, see
-<code class="function">gst_gl_color_convert_set_texture_scaling()</code>.</p>
 </div>
 <div class="refsect1">
 <a name="GstGLColorConvert.functions_details"></a><h2>Functions</h2>
@@ -125,8 +139,8 @@
 <pre class="programlisting"><a class="link" href="GstGLColorConvert.html" title="GstGLColorConvert"><span class="returnvalue">GstGLColorConvert</span></a> *
 gst_gl_color_convert_new (<em class="parameter"><code><a class="link" href="GstGLContext.html" title="GstGLContext"><span class="type">GstGLContext</span></a> *context</code></em>);</pre>
 <div class="refsect3">
-<a name="id-1.2.9.4.7.2.4"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="id-1.2.9.7.7.2.4"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
 <col class="parameters_description">
@@ -140,7 +154,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.9.4.7.2.5"></a><h4>Returns</h4>
+<a name="id-1.2.9.7.7.2.5"></a><h4>Returns</h4>
 <p> a new <a class="link" href="GstGLColorConvert.html" title="GstGLColorConvert"><span class="type">GstGLColorConvert</span></a> object</p>
 </div>
 </div>
@@ -154,8 +168,8 @@
 <p>Initializes <em class="parameter"><code>convert</code></em>
  with the information required for conversion.</p>
 <div class="refsect3">
-<a name="id-1.2.9.4.7.3.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="id-1.2.9.7.7.3.5"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
 <col class="parameters_description">
@@ -192,6 +206,23 @@
 </div>
 <hr>
 <div class="refsect2">
+<a name="gst-gl-color-convert-fixate-caps"></a><h3>gst_gl_color_convert_fixate_caps ()</h3>
+<pre class="programlisting"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstCaps.html"><span class="returnvalue">GstCaps</span></a> *
+gst_gl_color_convert_fixate_caps (<em class="parameter"><code><a class="link" href="GstGLContext.html" title="GstGLContext"><span class="type">GstGLContext</span></a> *convert</code></em>,
+                                  <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html#GstPadDirection"><span class="type">GstPadDirection</span></a> direction</code></em>,
+                                  <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstCaps.html"><span class="type">GstCaps</span></a> *caps</code></em>,
+                                  <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstCaps.html"><span class="type">GstCaps</span></a> *other</code></em>);</pre>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-gl-color-convert-decide-allocation"></a><h3>gst_gl_color_convert_decide_allocation ()</h3>
+<pre class="programlisting"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
+gst_gl_color_convert_decide_allocation
+                               (<em class="parameter"><code><a class="link" href="GstGLColorConvert.html" title="GstGLColorConvert"><span class="type">GstGLColorConvert</span></a> *convert</code></em>,
+                                <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstQuery.html"><span class="type">GstQuery</span></a> *query</code></em>);</pre>
+</div>
+<hr>
+<div class="refsect2">
 <a name="gst-gl-color-convert-perform"></a><h3>gst_gl_color_convert_perform ()</h3>
 <pre class="programlisting"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstBuffer.html"><span class="returnvalue">GstBuffer</span></a> *
 gst_gl_color_convert_perform (<em class="parameter"><code><a class="link" href="GstGLColorConvert.html" title="GstGLColorConvert"><span class="type">GstGLColorConvert</span></a> *convert</code></em>,
@@ -200,8 +231,8 @@
  using the formats specified by the
 <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base-libs/html/gst-plugins-base-libs-gstvideo.html#GstVideoInfo"><span class="type">GstVideoInfo</span></a>s passed to <a class="link" href="GstGLColorConvert.html#gst-gl-color-convert-set-caps" title="gst_gl_color_convert_set_caps ()"><code class="function">gst_gl_color_convert_set_caps()</code></a></p>
 <div class="refsect3">
-<a name="id-1.2.9.4.7.5.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="id-1.2.9.7.7.7.5"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
 <col class="parameters_description">
@@ -222,7 +253,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.9.4.7.5.6"></a><h4>Returns</h4>
+<a name="id-1.2.9.7.7.7.6"></a><h4>Returns</h4>
 <p> a converted <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstBuffer.html"><span class="type">GstBuffer</span></a> or <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>%</p>
 </div>
 </div>
@@ -258,7 +289,7 @@
 </div>
 <div class="refsect1">
 <a name="GstGLColorConvert.see-also"></a><h2>See Also</h2>
-<p><a class="link" href="GstGLUpload.html" title="GstGLUpload"><span class="type">GstGLUpload</span></a>, <a class="link" href="GstGLDownload.html" title="GstGLDownload"><span class="type">GstGLDownload</span></a>, <a class="link" href="gst-plugins-bad-libs-gstglmemory.html#GstGLMemory" title="GstGLMemory"><span class="type">GstGLMemory</span></a></p>
+<p><a class="link" href="GstGLUpload.html" title="GstGLUpload"><span class="type">GstGLUpload</span></a>, <a class="link" href="gst-plugins-bad-libs-GstGLMemory.html#GstGLMemory" title="GstGLMemory"><span class="type">GstGLMemory</span></a>, <a class="link" href="gst-plugins-bad-libs-gstglbasememory.html#GstGLBaseMemory" title="GstGLBaseMemory"><span class="type">GstGLBaseMemory</span></a></p>
 </div>
 </div>
 <div class="footer">
diff --git a/docs/libs/html/GstGLContext.html b/docs/libs/html/GstGLContext.html
index 46377d2..bca69d1 100644
--- a/docs/libs/html/GstGLContext.html
+++ b/docs/libs/html/GstGLContext.html
@@ -3,7 +3,7 @@
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>GstGLContext: GStreamer Bad Plugins 1.0 Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
 <link rel="home" href="index.html" title="GStreamer Bad Plugins 1.0 Library Reference Manual">
 <link rel="up" href="gl.html" title="OpenGL Helper Library">
 <link rel="prev" href="GstGLColorConvert.html" title="GstGLColorConvert">
@@ -34,7 +34,7 @@
 </tr></table></div>
 <div class="refsect1">
 <a name="GstGLContext.functions"></a><h2>Functions</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="functions_return">
 <col class="functions_name">
@@ -118,6 +118,14 @@
 </tr>
 <tr>
 <td class="function_type">
+<a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gpointer"><span class="returnvalue">gpointer</span></a>
+</td>
+<td class="function_name">
+<a class="link" href="GstGLContext.html#gst-gl-context-get-proc-address-with-platform" title="gst_gl_context_get_proc_address_with_platform ()">gst_gl_context_get_proc_address_with_platform</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
 <a class="link" href="GstGLWindow.html" title="GstGLWindow"><span class="returnvalue">GstGLWindow</span></a> *
 </td>
 <td class="function_name">
@@ -209,6 +217,22 @@
 <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
 </td>
 <td class="function_name">
+<a class="link" href="GstGLContext.html#gst-gl-context-is-shared" title="gst_gl_context_is_shared ()">gst_gl_context_is_shared</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
+<a class="link" href="GstGLContext.html#gst-gl-context-set-shared-with" title="gst_gl_context_set_shared_with ()">gst_gl_context_set_shared_with</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
+</td>
+<td class="function_name">
 <a class="link" href="GstGLContext.html#gst-gl-context-check-feature" title="gst_gl_context_check_feature ()">gst_gl_context_check_feature</a> <span class="c_punctuation">()</span>
 </td>
 </tr>
@@ -249,7 +273,7 @@
 </div>
 <div class="refsect1">
 <a name="GstGLContext.other"></a><h2>Types and Values</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="name">
 <col class="description">
@@ -303,8 +327,8 @@
  and <em class="parameter"><code>data</code></em>
 </p>
 <div class="refsect3">
-<a name="id-1.2.9.5.7.4.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="id-1.2.9.8.7.4.5"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
 <col class="parameters_description">
@@ -333,8 +357,8 @@
 <p>Create a new <a class="link" href="GstGLContext.html" title="GstGLContext"><span class="type">GstGLContext</span></a> with the specified <em class="parameter"><code>display</code></em>
 </p>
 <div class="refsect3">
-<a name="id-1.2.9.5.7.5.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="id-1.2.9.8.7.5.5"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
 <col class="parameters_description">
@@ -348,7 +372,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.9.5.7.5.6"></a><h4>Returns</h4>
+<a name="id-1.2.9.8.7.5.6"></a><h4>Returns</h4>
 <p> a new <a class="link" href="GstGLContext.html" title="GstGLContext"><span class="type">GstGLContext</span></a></p>
 </div>
 <p class="since">Since: 1.4</p>
@@ -363,8 +387,8 @@
                             <em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-GstGLAPI.html#GstGLAPI" title="enum GstGLAPI"><span class="type">GstGLAPI</span></a> available_apis</code></em>);</pre>
 <p>Wraps an existing OpenGL context into a <a class="link" href="GstGLContext.html" title="GstGLContext"><span class="type">GstGLContext</span></a>.</p>
 <div class="refsect3">
-<a name="id-1.2.9.5.7.6.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="id-1.2.9.8.7.6.5"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
 <col class="parameters_description">
@@ -397,7 +421,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.9.5.7.6.6"></a><h4>Returns</h4>
+<a name="id-1.2.9.8.7.6.6"></a><h4>Returns</h4>
 <p> a <a class="link" href="GstGLContext.html" title="GstGLContext"><span class="type">GstGLContext</span></a> wrapping <em class="parameter"><code>handle</code></em>
 </p>
 </div>
@@ -419,8 +443,8 @@
 of the error and <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> will be returned.</p>
 <p>Should only be called once.</p>
 <div class="refsect3">
-<a name="id-1.2.9.5.7.7.7"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="id-1.2.9.8.7.7.7"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
 <col class="parameters_description">
@@ -446,7 +470,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.9.5.7.7.8"></a><h4>Returns</h4>
+<a name="id-1.2.9.8.7.7.8"></a><h4>Returns</h4>
 <p> whether the context could successfully be created</p>
 </div>
 <p class="since">Since: 1.4</p>
@@ -460,8 +484,8 @@
 <p>Should only be called after <a class="link" href="GstGLContext.html#gst-gl-context-create" title="gst_gl_context_create ()"><code class="function">gst_gl_context_create()</code></a> has been successfully
 called for this context.</p>
 <div class="refsect3">
-<a name="id-1.2.9.5.7.8.6"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="id-1.2.9.8.7.8.6"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
 <col class="parameters_description">
@@ -487,8 +511,8 @@
 <p>In OpenGL terms, calls eglMakeCurrent or similar with this context and the
 currently set window.  See <a class="link" href="GstGLContext.html#gst-gl-context-set-window" title="gst_gl_context_set_window ()"><code class="function">gst_gl_context_set_window()</code></a> for details.</p>
 <div class="refsect3">
-<a name="id-1.2.9.5.7.9.6"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="id-1.2.9.8.7.9.6"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
 <col class="parameters_description">
@@ -509,7 +533,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.9.5.7.9.7"></a><h4>Returns</h4>
+<a name="id-1.2.9.8.7.9.7"></a><h4>Returns</h4>
 <p> Whether the activation succeeded</p>
 </div>
 <p class="since">Since: 1.4</p>
@@ -534,8 +558,8 @@
 <p>Platform specfic functions (names starting 'egl', 'glX', 'wgl', etc) can also
 be retrieved using this method.</p>
 <div class="refsect3">
-<a name="id-1.2.9.5.7.11.6"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="id-1.2.9.8.7.11.6"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
 <col class="parameters_description">
@@ -556,19 +580,28 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.9.5.7.11.7"></a><h4>Returns</h4>
+<a name="id-1.2.9.8.7.11.7"></a><h4>Returns</h4>
 <p> a function pointer or NULL</p>
 </div>
 <p class="since">Since: 1.4</p>
 </div>
 <hr>
 <div class="refsect2">
+<a name="gst-gl-context-get-proc-address-with-platform"></a><h3>gst_gl_context_get_proc_address_with_platform ()</h3>
+<pre class="programlisting"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gpointer"><span class="returnvalue">gpointer</span></a>
+gst_gl_context_get_proc_address_with_platform
+                               (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-GstGLAPI.html#GstGLPlatform" title="enum GstGLPlatform"><span class="type">GstGLPlatform</span></a> context_type</code></em>,
+                                <em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-GstGLAPI.html#GstGLAPI" title="enum GstGLAPI"><span class="type">GstGLAPI</span></a> gl_api</code></em>,
+                                <em class="parameter"><code>const <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *name</code></em>);</pre>
+</div>
+<hr>
+<div class="refsect2">
 <a name="gst-gl-context-get-window"></a><h3>gst_gl_context_get_window ()</h3>
 <pre class="programlisting"><a class="link" href="GstGLWindow.html" title="GstGLWindow"><span class="returnvalue">GstGLWindow</span></a> *
 gst_gl_context_get_window (<em class="parameter"><code><a class="link" href="GstGLContext.html" title="GstGLContext"><span class="type">GstGLContext</span></a> *context</code></em>);</pre>
 <div class="refsect3">
-<a name="id-1.2.9.5.7.12.4"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="id-1.2.9.8.7.13.4"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
 <col class="parameters_description">
@@ -582,7 +615,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.9.5.7.12.5"></a><h4>Returns</h4>
+<a name="id-1.2.9.8.7.13.5"></a><h4>Returns</h4>
 <p> the currently set window</p>
 </div>
 <p class="since">Since: 1.4</p>
@@ -600,8 +633,8 @@
  is not
 already running.</p>
 <div class="refsect3">
-<a name="id-1.2.9.5.7.13.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="id-1.2.9.8.7.14.5"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
 <col class="parameters_description">
@@ -622,7 +655,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.9.5.7.13.6"></a><h4>Returns</h4>
+<a name="id-1.2.9.8.7.14.6"></a><h4>Returns</h4>
 <p> Whether the window was successfully updated</p>
 </div>
 <p class="since">Since: 1.4</p>
@@ -640,8 +673,8 @@
 </p>
 <p>MT-safe</p>
 <div class="refsect3">
-<a name="id-1.2.9.5.7.14.6"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="id-1.2.9.8.7.15.6"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
 <col class="parameters_description">
@@ -675,8 +708,8 @@
 <pre class="programlisting"><a class="link" href="GstGLDisplay.html" title="GstGLDisplay"><span class="returnvalue">GstGLDisplay</span></a> *
 gst_gl_context_get_display (<em class="parameter"><code><a class="link" href="GstGLContext.html" title="GstGLContext"><span class="type">GstGLContext</span></a> *context</code></em>);</pre>
 <div class="refsect3">
-<a name="id-1.2.9.5.7.15.4"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="id-1.2.9.8.7.16.4"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
 <col class="parameters_description">
@@ -690,7 +723,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.9.5.7.15.5"></a><h4>Returns</h4>
+<a name="id-1.2.9.8.7.16.5"></a><h4>Returns</h4>
 <p> the <a class="link" href="GstGLDisplay.html" title="GstGLDisplay"><span class="type">GstGLDisplay</span></a> associated with this <em class="parameter"><code>context</code></em>
 </p>
 </div>
@@ -705,8 +738,8 @@
 <p>The currently available API may be limited by the <a class="link" href="GstGLDisplay.html" title="GstGLDisplay"><span class="type">GstGLDisplay</span></a> in use and/or
 the <a class="link" href="GstGLWindow.html" title="GstGLWindow"><span class="type">GstGLWindow</span></a> chosen.</p>
 <div class="refsect3">
-<a name="id-1.2.9.5.7.16.6"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="id-1.2.9.8.7.17.6"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
 <col class="parameters_description">
@@ -720,7 +753,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.9.5.7.16.7"></a><h4>Returns</h4>
+<a name="id-1.2.9.8.7.17.7"></a><h4>Returns</h4>
 <p> the available OpenGL api</p>
 </div>
 <p class="since">Since: 1.4</p>
@@ -733,8 +766,8 @@
 <p>Gets the backing OpenGL context used by <em class="parameter"><code>context</code></em>
 .</p>
 <div class="refsect3">
-<a name="id-1.2.9.5.7.17.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="id-1.2.9.8.7.18.5"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
 <col class="parameters_description">
@@ -748,7 +781,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.9.5.7.17.6"></a><h4>Returns</h4>
+<a name="id-1.2.9.8.7.18.6"></a><h4>Returns</h4>
 <p> The platform specific backing OpenGL context</p>
 </div>
 <p class="since">Since: 1.4</p>
@@ -761,8 +794,8 @@
 <p>Gets the OpenGL platform that used by <em class="parameter"><code>context</code></em>
 .</p>
 <div class="refsect3">
-<a name="id-1.2.9.5.7.18.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="id-1.2.9.8.7.19.5"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
 <col class="parameters_description">
@@ -776,7 +809,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.9.5.7.18.6"></a><h4>Returns</h4>
+<a name="id-1.2.9.8.7.19.6"></a><h4>Returns</h4>
 <p> The platform specific backing OpenGL context</p>
 </div>
 <p class="since">Since: 1.4</p>
@@ -785,10 +818,10 @@
 <div class="refsect2">
 <a name="gst-gl-context-get-current-gl-context"></a><h3>gst_gl_context_get_current_gl_context ()</h3>
 <pre class="programlisting"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#guintptr"><span class="returnvalue">guintptr</span></a>
-gst_gl_context_get_current_gl_context (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-GstGLAPI.html#GstGLPlatform" title="enum GstGLPlatform"><span class="type">GstGLPlatform</span></a> platform</code></em>);</pre>
+gst_gl_context_get_current_gl_context (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-GstGLAPI.html#GstGLPlatform" title="enum GstGLPlatform"><span class="type">GstGLPlatform</span></a> context_type</code></em>);</pre>
 <div class="refsect3">
-<a name="id-1.2.9.5.7.19.4"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="id-1.2.9.8.7.20.4"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
 <col class="parameters_description">
@@ -802,7 +835,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.9.5.7.19.5"></a><h4>Returns</h4>
+<a name="id-1.2.9.8.7.20.5"></a><h4>Returns</h4>
 <p> The OpenGL context handle current in the calling thread or <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a></p>
 </div>
 <p class="since">Since: 1.6</p>
@@ -819,8 +852,8 @@
  aren't modified and <a class="link" href="gst-plugins-bad-libs-GstGLAPI.html#GST-GL-API-NONE:CAPS"><code class="literal">GST_GL_API_NONE</code></a> is
 returned.</p>
 <div class="refsect3">
-<a name="id-1.2.9.5.7.20.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="id-1.2.9.8.7.21.5"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
 <col class="parameters_description">
@@ -846,7 +879,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.9.5.7.20.6"></a><h4>Returns</h4>
+<a name="id-1.2.9.8.7.21.6"></a><h4>Returns</h4>
 <p> The version supported by the OpenGL context current in the calling
 thread or <a class="link" href="gst-plugins-bad-libs-GstGLAPI.html#GST-GL-API-NONE:CAPS"><code class="literal">GST_GL_API_NONE</code></a></p>
 </div>
@@ -858,8 +891,8 @@
 <pre class="programlisting"><a href="https://developer.gnome.org/glib/unstable/glib-Threads.html#GThread"><span class="returnvalue">GThread</span></a> *
 gst_gl_context_get_thread (<em class="parameter"><code><a class="link" href="GstGLContext.html" title="GstGLContext"><span class="type">GstGLContext</span></a> *context</code></em>);</pre>
 <div class="refsect3">
-<a name="id-1.2.9.5.7.21.4"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="id-1.2.9.8.7.22.4"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
 <col class="parameters_description">
@@ -873,7 +906,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.9.5.7.21.5"></a><h4>Returns</h4>
+<a name="id-1.2.9.8.7.22.5"></a><h4>Returns</h4>
 <p> The <a href="https://developer.gnome.org/glib/unstable/glib-Threads.html#GThread"><span class="type">GThread</span></a>, <em class="parameter"><code>context</code></em>
 is current in or NULL. </p>
 <p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p>
@@ -888,8 +921,8 @@
                           <em class="parameter"><code><a class="link" href="GstGLContext.html" title="GstGLContext"><span class="type">GstGLContext</span></a> *other_context</code></em>);</pre>
 <p>Note: This will always fail for two wrapped <a class="link" href="GstGLContext.html" title="GstGLContext"><span class="type">GstGLContext</span></a>'s</p>
 <div class="refsect3">
-<a name="id-1.2.9.5.7.22.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="id-1.2.9.8.7.23.5"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
 <col class="parameters_description">
@@ -910,7 +943,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.9.5.7.22.6"></a><h4>Returns</h4>
+<a name="id-1.2.9.8.7.23.6"></a><h4>Returns</h4>
 <p> whether <em class="parameter"><code>context</code></em>
 and <em class="parameter"><code>other_context</code></em>
 are able to share OpenGL
@@ -920,6 +953,65 @@
 </div>
 <hr>
 <div class="refsect2">
+<a name="gst-gl-context-is-shared"></a><h3>gst_gl_context_is_shared ()</h3>
+<pre class="programlisting"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
+gst_gl_context_is_shared (<em class="parameter"><code><a class="link" href="GstGLContext.html" title="GstGLContext"><span class="type">GstGLContext</span></a> *context</code></em>);</pre>
+<div class="refsect3">
+<a name="id-1.2.9.8.7.24.4"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>context</p></td>
+<td class="parameter_description"><p>a <a class="link" href="GstGLContext.html" title="GstGLContext"><span class="type">GstGLContext</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="id-1.2.9.8.7.24.5"></a><h4>Returns</h4>
+<p> Whether the <a class="link" href="GstGLContext.html" title="GstGLContext"><span class="type">GstGLContext</span></a> has been shared with another <a class="link" href="GstGLContext.html" title="GstGLContext"><span class="type">GstGLContext</span></a></p>
+</div>
+<p class="since">Since: 1.8</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-gl-context-set-shared-with"></a><h3>gst_gl_context_set_shared_with ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+gst_gl_context_set_shared_with (<em class="parameter"><code><a class="link" href="GstGLContext.html" title="GstGLContext"><span class="type">GstGLContext</span></a> *context</code></em>,
+                                <em class="parameter"><code><a class="link" href="GstGLContext.html" title="GstGLContext"><span class="type">GstGLContext</span></a> *share</code></em>);</pre>
+<p>Will internally set <em class="parameter"><code>context</code></em>
+ as shared with <em class="parameter"><code>share</code></em>
+</p>
+<div class="refsect3">
+<a name="id-1.2.9.8.7.25.5"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>context</p></td>
+<td class="parameter_description"><p>a wrapped <a class="link" href="GstGLContext.html" title="GstGLContext"><span class="type">GstGLContext</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>share</p></td>
+<td class="parameter_description"><p>another <a class="link" href="GstGLContext.html" title="GstGLContext"><span class="type">GstGLContext</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<p class="since">Since: 1.8</p>
+</div>
+<hr>
+<div class="refsect2">
 <a name="gst-gl-context-check-feature"></a><h3>gst_gl_context_check_feature ()</h3>
 <pre class="programlisting"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
 gst_gl_context_check_feature (<em class="parameter"><code><a class="link" href="GstGLContext.html" title="GstGLContext"><span class="type">GstGLContext</span></a> *context</code></em>,
@@ -927,8 +1019,8 @@
 <p>Some features require that the context be created before it is possible to
 determine their existence and so will fail if that is not the case.</p>
 <div class="refsect3">
-<a name="id-1.2.9.5.7.23.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="id-1.2.9.8.7.26.5"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
 <col class="parameters_description">
@@ -949,7 +1041,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.9.5.7.23.6"></a><h4>Returns</h4>
+<a name="id-1.2.9.8.7.26.6"></a><h4>Returns</h4>
 <p> Whether <em class="parameter"><code>feature</code></em>
 is supported by <em class="parameter"><code>context</code></em>
 </p>
@@ -965,8 +1057,8 @@
                                  <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a> maj</code></em>,
                                  <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a> min</code></em>);</pre>
 <div class="refsect3">
-<a name="id-1.2.9.5.7.24.4"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="id-1.2.9.8.7.27.4"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
 <col class="parameters_description">
@@ -997,7 +1089,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.9.5.7.24.5"></a><h4>Returns</h4>
+<a name="id-1.2.9.8.7.27.5"></a><h4>Returns</h4>
 <p> whether OpenGL context implements the required api and specified
 version.</p>
 </div>
@@ -1016,8 +1108,8 @@
 <em class="parameter"><code>context</code></em>
 .</p>
 <div class="refsect3">
-<a name="id-1.2.9.5.7.25.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="id-1.2.9.8.7.28.5"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
 <col class="parameters_description">
@@ -1055,8 +1147,8 @@
 context in the current thread.  Typically used with wrapped contexts to
 allow wrapped contexts to be used as regular <a class="link" href="GstGLContext.html" title="GstGLContext"><span class="type">GstGLContext</span></a>'s.</p>
 <div class="refsect3">
-<a name="id-1.2.9.5.7.26.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="id-1.2.9.8.7.29.5"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
 <col class="parameters_description">
@@ -1078,7 +1170,7 @@
 gst_gl_context_get_current (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
 <p>See also <a class="link" href="GstGLContext.html#gst-gl-context-activate" title="gst_gl_context_activate ()"><code class="function">gst_gl_context_activate()</code></a>.</p>
 <div class="refsect3">
-<a name="id-1.2.9.5.7.27.5"></a><h4>Returns</h4>
+<a name="id-1.2.9.8.7.30.5"></a><h4>Returns</h4>
 <p> the <a class="link" href="GstGLContext.html" title="GstGLContext"><span class="type">GstGLContext</span></a> active in the current thread or <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a></p>
 </div>
 <p class="since">Since: 1.6</p>
@@ -1089,8 +1181,8 @@
 <div class="refsect2">
 <a name="GstGLContextError"></a><h3>enum GstGLContextError</h3>
 <div class="refsect3">
-<a name="id-1.2.9.5.8.2.3"></a><h4>Members</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="id-1.2.9.8.8.2.3"></a><h4>Members</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="300px" class="enum_members_name">
 <col class="enum_members_description">
diff --git a/docs/libs/html/GstGLDisplay.html b/docs/libs/html/GstGLDisplay.html
index 3cc92f2..6d4bc39 100644
--- a/docs/libs/html/GstGLDisplay.html
+++ b/docs/libs/html/GstGLDisplay.html
@@ -3,11 +3,11 @@
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>GstGLDisplay: GStreamer Bad Plugins 1.0 Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
 <link rel="home" href="index.html" title="GStreamer Bad Plugins 1.0 Library Reference Manual">
 <link rel="up" href="gl.html" title="OpenGL Helper Library">
 <link rel="prev" href="gst-plugins-bad-libs-GstGLContextWGL.html" title="GstGLContextWGL">
-<link rel="next" href="GstGLDownload.html" title="GstGLDownload">
+<link rel="next" href="gst-plugins-bad-libs-GstEGLImageMemory.html" title="GstEGLImageMemory">
 <meta name="generator" content="GTK-Doc V1.24 (XML mode)">
 <link rel="stylesheet" href="style.css" type="text/css">
 </head>
@@ -22,7 +22,7 @@
 <td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
 <td><a accesskey="u" href="gl.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
 <td><a accesskey="p" href="gst-plugins-bad-libs-GstGLContextWGL.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
-<td><a accesskey="n" href="GstGLDownload.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
+<td><a accesskey="n" href="gst-plugins-bad-libs-GstEGLImageMemory.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
 </tr></table>
 <div class="refentry">
 <a name="GstGLDisplay"></a><div class="titlepage"></div>
@@ -35,7 +35,7 @@
 </tr></table></div>
 <div class="refsect1">
 <a name="GstGLDisplay.functions"></a><h2>Functions</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="functions_return">
 <col class="functions_name">
@@ -102,6 +102,14 @@
 <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
 </td>
 <td class="function_name">
+<a class="link" href="GstGLDisplay.html#gst-gl-display-create-context" title="gst_gl_display_create_context ()">gst_gl_display_create_context</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
+</td>
+<td class="function_name">
 <a class="link" href="GstGLDisplay.html#gst-context-get-gl-display" title="gst_context_get_gl_display ()">gst_context_get_gl_display</a> <span class="c_punctuation">()</span>
 </td>
 </tr>
@@ -118,7 +126,7 @@
 </div>
 <div class="refsect1">
 <a name="GstGLDisplay.signals"></a><h2>Signals</h2>
-<div class="informaltable"><table border="0">
+<div class="informaltable"><table class="informaltable" border="0">
 <colgroup>
 <col width="150px" class="signals_return">
 <col width="300px" class="signals_name">
@@ -134,7 +142,7 @@
 </div>
 <div class="refsect1">
 <a name="GstGLDisplay.other"></a><h2>Types and Values</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="name">
 <col class="description">
@@ -193,7 +201,7 @@
 <pre class="programlisting"><a class="link" href="GstGLDisplay.html" title="GstGLDisplay"><span class="returnvalue">GstGLDisplay</span></a> *
 gst_gl_display_new (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
 <div class="refsect3">
-<a name="id-1.2.9.11.8.2.4"></a><h4>Returns</h4>
+<a name="id-1.2.9.14.8.2.4"></a><h4>Returns</h4>
 <p> a new <a class="link" href="GstGLDisplay.html" title="GstGLDisplay"><span class="type">GstGLDisplay</span></a>. </p>
 <p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p>
 </div>
@@ -205,8 +213,8 @@
 <pre class="programlisting"><a class="link" href="GstGLDisplay.html#GstGLDisplayType" title="enum GstGLDisplayType"><span class="returnvalue">GstGLDisplayType</span></a>
 gst_gl_display_get_handle_type (<em class="parameter"><code><a class="link" href="GstGLDisplay.html" title="GstGLDisplay"><span class="type">GstGLDisplay</span></a> *display</code></em>);</pre>
 <div class="refsect3">
-<a name="id-1.2.9.11.8.3.4"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="id-1.2.9.14.8.3.4"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
 <col class="parameters_description">
@@ -220,7 +228,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.9.11.8.3.5"></a><h4>Returns</h4>
+<a name="id-1.2.9.14.8.3.5"></a><h4>Returns</h4>
 <p> the <a class="link" href="GstGLDisplay.html#GstGLDisplayType" title="enum GstGLDisplayType"><span class="type">GstGLDisplayType</span></a> of <em class="parameter"><code>display</code></em>
 </p>
 </div>
@@ -231,15 +239,15 @@
 <a name="gst-gl-display-filter-gl-api"></a><h3>gst_gl_display_filter_gl_api ()</h3>
 <pre class="programlisting"><span class="returnvalue">void</span>
 gst_gl_display_filter_gl_api (<em class="parameter"><code><a class="link" href="GstGLDisplay.html" title="GstGLDisplay"><span class="type">GstGLDisplay</span></a> *display</code></em>,
-                              <em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-GstGLAPI.html#GstGLAPI" title="enum GstGLAPI"><span class="type">GstGLAPI</span></a> api</code></em>);</pre>
+                              <em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-GstGLAPI.html#GstGLAPI" title="enum GstGLAPI"><span class="type">GstGLAPI</span></a> gl_api</code></em>);</pre>
 <p>limit the use of OpenGL to the requested <em class="parameter"><code>gl_api</code></em>
 .  This is intended to allow
 application and elements to request a specific set of OpenGL API's based on
 what they support.  See <a class="link" href="GstGLContext.html#gst-gl-context-get-gl-api" title="gst_gl_context_get_gl_api ()"><code class="function">gst_gl_context_get_gl_api()</code></a> for the retreiving the
 API supported by a <a class="link" href="GstGLContext.html" title="GstGLContext"><span class="type">GstGLContext</span></a>.</p>
 <div class="refsect3">
-<a name="id-1.2.9.11.8.4.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="id-1.2.9.14.8.4.5"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
 <col class="parameters_description">
@@ -267,8 +275,8 @@
 gst_gl_display_get_gl_api (<em class="parameter"><code><a class="link" href="GstGLDisplay.html" title="GstGLDisplay"><span class="type">GstGLDisplay</span></a> *display</code></em>);</pre>
 <p>see <a class="link" href="GstGLDisplay.html#gst-gl-display-filter-gl-api" title="gst_gl_display_filter_gl_api ()"><code class="function">gst_gl_display_filter_gl_api()</code></a> for what the returned value represents</p>
 <div class="refsect3">
-<a name="id-1.2.9.11.8.5.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="id-1.2.9.14.8.5.5"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
 <col class="parameters_description">
@@ -282,7 +290,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.9.11.8.5.6"></a><h4>Returns</h4>
+<a name="id-1.2.9.14.8.5.6"></a><h4>Returns</h4>
 <p> the <a class="link" href="gst-plugins-bad-libs-GstGLAPI.html#GstGLAPI" title="enum GstGLAPI"><span class="type">GstGLAPI</span></a> configured for <em class="parameter"><code>display</code></em>
 </p>
 </div>
@@ -294,8 +302,8 @@
 gst_gl_display_add_context (<em class="parameter"><code><a class="link" href="GstGLDisplay.html" title="GstGLDisplay"><span class="type">GstGLDisplay</span></a> *display</code></em>,
                             <em class="parameter"><code><a class="link" href="GstGLContext.html" title="GstGLContext"><span class="type">GstGLContext</span></a> *context</code></em>);</pre>
 <div class="refsect3">
-<a name="id-1.2.9.11.8.6.4"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="id-1.2.9.14.8.6.4"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
 <col class="parameters_description">
@@ -316,7 +324,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.9.11.8.6.5"></a><h4>Returns</h4>
+<a name="id-1.2.9.14.8.6.5"></a><h4>Returns</h4>
 <p> whether <em class="parameter"><code>context</code></em>
 was successfully added. <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> may be returned
 if there already exists another context for <em class="parameter"><code>context</code></em>
@@ -333,8 +341,8 @@
                                (<em class="parameter"><code><a class="link" href="GstGLDisplay.html" title="GstGLDisplay"><span class="type">GstGLDisplay</span></a> *display</code></em>,
                                 <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Threads.html#GThread"><span class="type">GThread</span></a> *thread</code></em>);</pre>
 <div class="refsect3">
-<a name="id-1.2.9.11.8.7.4"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="id-1.2.9.14.8.7.4"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
 <col class="parameters_description">
@@ -355,7 +363,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.9.11.8.7.5"></a><h4>Returns</h4>
+<a name="id-1.2.9.14.8.7.5"></a><h4>Returns</h4>
 <p> the <a class="link" href="GstGLContext.html" title="GstGLContext"><span class="type">GstGLContext</span></a> current on <em class="parameter"><code>thread</code></em>
 or <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a></p>
 <p>Must be called with the object lock held. </p>
@@ -371,13 +379,60 @@
 </div>
 <hr>
 <div class="refsect2">
+<a name="gst-gl-display-create-context"></a><h3>gst_gl_display_create_context ()</h3>
+<pre class="programlisting"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
+gst_gl_display_create_context (<em class="parameter"><code><a class="link" href="GstGLDisplay.html" title="GstGLDisplay"><span class="type">GstGLDisplay</span></a> *display</code></em>,
+                               <em class="parameter"><code><a class="link" href="GstGLContext.html" title="GstGLContext"><span class="type">GstGLContext</span></a> *other_context</code></em>,
+                               <em class="parameter"><code><a class="link" href="GstGLContext.html" title="GstGLContext"><span class="type">GstGLContext</span></a> **p_context</code></em>,
+                               <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Error-Reporting.html#GError"><span class="type">GError</span></a> **error</code></em>);</pre>
+<p>It requires the display's object lock to be held.</p>
+<div class="refsect3">
+<a name="id-1.2.9.14.8.9.5"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>display</p></td>
+<td class="parameter_description"><p>a <a class="link" href="GstGLDisplay.html" title="GstGLDisplay"><span class="type">GstGLDisplay</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>other_context</p></td>
+<td class="parameter_description"><p>other <a class="link" href="GstGLContext.html" title="GstGLContext"><span class="type">GstGLContext</span></a> to share resources with.</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>p_context</p></td>
+<td class="parameter_description"><p>resulting <a class="link" href="GstGLContext.html" title="GstGLContext"><span class="type">GstGLContext</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>error</p></td>
+<td class="parameter_description"><p>resulting <a href="https://developer.gnome.org/glib/unstable/glib-Error-Reporting.html#GError"><span class="type">GError</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="id-1.2.9.14.8.9.6"></a><h4>Returns</h4>
+<p> whether a new context could be created.</p>
+</div>
+<p class="since">Since: 1.6</p>
+</div>
+<hr>
+<div class="refsect2">
 <a name="gst-context-get-gl-display"></a><h3>gst_context_get_gl_display ()</h3>
 <pre class="programlisting"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
 gst_context_get_gl_display (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstContext.html"><span class="type">GstContext</span></a> *context</code></em>,
                             <em class="parameter"><code><a class="link" href="GstGLDisplay.html" title="GstGLDisplay"><span class="type">GstGLDisplay</span></a> **display</code></em>);</pre>
 <div class="refsect3">
-<a name="id-1.2.9.11.8.9.4"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="id-1.2.9.14.8.10.4"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
 <col class="parameters_description">
@@ -398,7 +453,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.9.11.8.9.5"></a><h4>Returns</h4>
+<a name="id-1.2.9.14.8.10.5"></a><h4>Returns</h4>
 <p> Whether <em class="parameter"><code>display</code></em>
 was in <em class="parameter"><code>context</code></em>
 </p>
@@ -415,8 +470,8 @@
  on <em class="parameter"><code>context</code></em>
 </p>
 <div class="refsect3">
-<a name="id-1.2.9.11.8.10.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="id-1.2.9.14.8.11.5"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
 <col class="parameters_description">
@@ -450,8 +505,8 @@
 <div class="refsect2">
 <a name="GstGLDisplayType"></a><h3>enum GstGLDisplayType</h3>
 <div class="refsect3">
-<a name="id-1.2.9.11.9.3.3"></a><h4>Members</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="id-1.2.9.14.9.3.3"></a><h4>Members</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="300px" class="enum_members_name">
 <col class="enum_members_description">
@@ -460,43 +515,59 @@
 <tbody>
 <tr>
 <td class="enum_member_name"><p><a name="GST-GL-DISPLAY-TYPE-NONE:CAPS"></a>GST_GL_DISPLAY_TYPE_NONE</p></td>
-<td> </td>
-<td> </td>
+<td class="enum_member_description">
+<p>no display type</p>
+</td>
+<td class="enum_member_annotations"> </td>
 </tr>
 <tr>
 <td class="enum_member_name"><p><a name="GST-GL-DISPLAY-TYPE-X11:CAPS"></a>GST_GL_DISPLAY_TYPE_X11</p></td>
-<td> </td>
-<td> </td>
+<td class="enum_member_description">
+<p>X11 display</p>
+</td>
+<td class="enum_member_annotations"> </td>
 </tr>
 <tr>
 <td class="enum_member_name"><p><a name="GST-GL-DISPLAY-TYPE-WAYLAND:CAPS"></a>GST_GL_DISPLAY_TYPE_WAYLAND</p></td>
-<td> </td>
-<td> </td>
+<td class="enum_member_description">
+<p>Wayland display</p>
+</td>
+<td class="enum_member_annotations"> </td>
 </tr>
 <tr>
 <td class="enum_member_name"><p><a name="GST-GL-DISPLAY-TYPE-COCOA:CAPS"></a>GST_GL_DISPLAY_TYPE_COCOA</p></td>
-<td> </td>
-<td> </td>
+<td class="enum_member_description">
+<p>Cocoa display</p>
+</td>
+<td class="enum_member_annotations"> </td>
 </tr>
 <tr>
 <td class="enum_member_name"><p><a name="GST-GL-DISPLAY-TYPE-WIN32:CAPS"></a>GST_GL_DISPLAY_TYPE_WIN32</p></td>
-<td> </td>
-<td> </td>
+<td class="enum_member_description">
+<p>Win32 display</p>
+</td>
+<td class="enum_member_annotations"> </td>
 </tr>
 <tr>
 <td class="enum_member_name"><p><a name="GST-GL-DISPLAY-TYPE-DISPMANX:CAPS"></a>GST_GL_DISPLAY_TYPE_DISPMANX</p></td>
-<td> </td>
-<td> </td>
+<td class="enum_member_description">
+<p>Dispmanx display</p>
+</td>
+<td class="enum_member_annotations"> </td>
 </tr>
 <tr>
 <td class="enum_member_name"><p><a name="GST-GL-DISPLAY-TYPE-EGL:CAPS"></a>GST_GL_DISPLAY_TYPE_EGL</p></td>
-<td> </td>
-<td> </td>
+<td class="enum_member_description">
+<p>EGL display</p>
+</td>
+<td class="enum_member_annotations"> </td>
 </tr>
 <tr>
 <td class="enum_member_name"><p><a name="GST-GL-DISPLAY-TYPE-ANY:CAPS"></a>GST_GL_DISPLAY_TYPE_ANY</p></td>
-<td> </td>
-<td> </td>
+<td class="enum_member_description">
+<p>any display type</p>
+</td>
+<td class="enum_member_annotations"> </td>
 </tr>
 </tbody>
 </table></div>
@@ -523,8 +594,8 @@
 It can be called in any thread and it is emitted with
 display's object lock held.</p>
 <div class="refsect3">
-<a name="id-1.2.9.11.10.2.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="id-1.2.9.14.10.2.5"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
 <col class="parameters_description">
@@ -550,7 +621,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.9.11.10.2.6"></a><h4>Returns</h4>
+<a name="id-1.2.9.14.10.2.6"></a><h4>Returns</h4>
 <p> the new context.</p>
 </div>
 <p>Flags: <a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS">Run Last</a></p>
diff --git a/docs/libs/html/GstGLDownload.html b/docs/libs/html/GstGLDownload.html
deleted file mode 100644
index 3ddf3c1..0000000
--- a/docs/libs/html/GstGLDownload.html
+++ /dev/null
@@ -1,238 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html>
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>GstGLDownload: GStreamer Bad Plugins 1.0 Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
-<link rel="home" href="index.html" title="GStreamer Bad Plugins 1.0 Library Reference Manual">
-<link rel="up" href="gl.html" title="OpenGL Helper Library">
-<link rel="prev" href="GstGLDisplay.html" title="GstGLDisplay">
-<link rel="next" href="gst-plugins-bad-libs-GstEGLImageMemory.html" title="GstEGLImageMemory">
-<meta name="generator" content="GTK-Doc V1.24 (XML mode)">
-<link rel="stylesheet" href="style.css" type="text/css">
-</head>
-<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
-<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="5"><tr valign="middle">
-<td width="100%" align="left" class="shortcuts">
-<a href="#" class="shortcut">Top</a><span id="nav_description">  <span class="dim">|</span> 
-                  <a href="#GstGLDownload.description" class="shortcut">Description</a></span><span id="nav_hierarchy">  <span class="dim">|</span> 
-                  <a href="#GstGLDownload.object-hierarchy" class="shortcut">Object Hierarchy</a></span>
-</td>
-<td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
-<td><a accesskey="u" href="gl.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
-<td><a accesskey="p" href="GstGLDisplay.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
-<td><a accesskey="n" href="gst-plugins-bad-libs-GstEGLImageMemory.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
-</tr></table>
-<div class="refentry">
-<a name="GstGLDownload"></a><div class="titlepage"></div>
-<div class="refnamediv"><table width="100%"><tr>
-<td valign="top">
-<h2><span class="refentrytitle"><a name="GstGLDownload.top_of_page"></a>GstGLDownload</span></h2>
-<p>GstGLDownload — an object that downloads GL textures</p>
-</td>
-<td class="gallery_image" valign="top" align="right"></td>
-</tr></table></div>
-<div class="refsect1">
-<a name="GstGLDownload.functions"></a><h2>Functions</h2>
-<div class="informaltable"><table width="100%" border="0">
-<colgroup>
-<col width="150px" class="functions_return">
-<col class="functions_name">
-</colgroup>
-<tbody>
-<tr>
-<td class="function_type">
-<a class="link" href="GstGLDownload.html" title="GstGLDownload"><span class="returnvalue">GstGLDownload</span></a> *
-</td>
-<td class="function_name">
-<a class="link" href="GstGLDownload.html#gst-gl-download-new" title="gst_gl_download_new ()">gst_gl_download_new</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<span class="returnvalue">void</span>
-</td>
-<td class="function_name">
-<a class="link" href="GstGLDownload.html#gst-gl-download-set-format" title="gst_gl_download_set_format ()">gst_gl_download_set_format</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstCaps.html"><span class="returnvalue">GstCaps</span></a> *
-</td>
-<td class="function_name">
-<a class="link" href="GstGLDownload.html#gst-gl-download-transform-caps" title="gst_gl_download_transform_caps ()">gst_gl_download_transform_caps</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="GstGLDownload.html#gst-gl-download-perform-with-data" title="gst_gl_download_perform_with_data ()">gst_gl_download_perform_with_data</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-</tbody>
-</table></div>
-</div>
-<div class="refsect1">
-<a name="GstGLDownload.other"></a><h2>Types and Values</h2>
-<div class="informaltable"><table width="100%" border="0">
-<colgroup>
-<col width="150px" class="name">
-<col class="description">
-</colgroup>
-<tbody><tr>
-<td class="datatype_keyword"> </td>
-<td class="function_name"><a class="link" href="GstGLDownload.html#GstGLDownload-struct" title="GstGLDownload">GstGLDownload</a></td>
-</tr></tbody>
-</table></div>
-</div>
-<div class="refsect1">
-<a name="GstGLDownload.object-hierarchy"></a><h2>Object Hierarchy</h2>
-<pre class="screen">    <a href="https://developer.gnome.org/gobject/unstable/gobject-The-Base-Object-Type.html#GObject">GObject</a>
-    <span class="lineart">╰──</span> <a href="https://developer.gnome.org/gobject/unstable/gobject-The-Base-Object-Type.html#GInitiallyUnowned">GInitiallyUnowned</a>
-        <span class="lineart">╰──</span> <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstObject.html">GstObject</a>
-            <span class="lineart">╰──</span> GstGLDownload
-</pre>
-</div>
-<div class="refsect1">
-<a name="GstGLDownload.description"></a><h2>Description</h2>
-<p><a class="link" href="GstGLDownload.html" title="GstGLDownload"><span class="type">GstGLDownload</span></a> is an object that downloads GL textures into system memory.</p>
-<p>A <a class="link" href="GstGLDownload.html" title="GstGLDownload"><span class="type">GstGLDownload</span></a> can be created with <a class="link" href="GstGLDownload.html#gst-gl-download-new" title="gst_gl_download_new ()"><code class="function">gst_gl_download_new()</code></a></p>
-</div>
-<div class="refsect1">
-<a name="GstGLDownload.functions_details"></a><h2>Functions</h2>
-<div class="refsect2">
-<a name="gst-gl-download-new"></a><h3>gst_gl_download_new ()</h3>
-<pre class="programlisting"><a class="link" href="GstGLDownload.html" title="GstGLDownload"><span class="returnvalue">GstGLDownload</span></a> *
-gst_gl_download_new (<em class="parameter"><code><a class="link" href="GstGLContext.html" title="GstGLContext"><span class="type">GstGLContext</span></a> *context</code></em>);</pre>
-<div class="refsect3">
-<a name="id-1.2.9.12.7.2.4"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
-<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
-</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>context</p></td>
-<td class="parameter_description"><p>a <a class="link" href="GstGLContext.html" title="GstGLContext"><span class="type">GstGLContext</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
-</table></div>
-</div>
-<div class="refsect3">
-<a name="id-1.2.9.12.7.2.5"></a><h4>Returns</h4>
-<p> a new <a class="link" href="GstGLDownload.html" title="GstGLDownload"><span class="type">GstGLDownload</span></a> object</p>
-</div>
-</div>
-<hr>
-<div class="refsect2">
-<a name="gst-gl-download-set-format"></a><h3>gst_gl_download_set_format ()</h3>
-<pre class="programlisting"><span class="returnvalue">void</span>
-gst_gl_download_set_format (<em class="parameter"><code><a class="link" href="GstGLDownload.html" title="GstGLDownload"><span class="type">GstGLDownload</span></a> *download</code></em>,
-                            <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base-libs/html/gst-plugins-base-libs-gstvideo.html#GstVideoInfo"><span class="type">GstVideoInfo</span></a> *out_info</code></em>);</pre>
-<p>Initializes <em class="parameter"><code>download</code></em>
- with the information required for download.</p>
-<div class="refsect3">
-<a name="id-1.2.9.12.7.3.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
-<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
-</colgroup>
-<tbody>
-<tr>
-<td class="parameter_name"><p>download</p></td>
-<td class="parameter_description"><p>a <a class="link" href="GstGLDownload.html" title="GstGLDownload"><span class="type">GstGLDownload</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr>
-<tr>
-<td class="parameter_name"><p>out_info</p></td>
-<td class="parameter_description"><p>a <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base-libs/html/gst-plugins-base-libs-gstvideo.html#GstVideoInfo"><span class="type">GstVideoInfo</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr>
-</tbody>
-</table></div>
-</div>
-</div>
-<hr>
-<div class="refsect2">
-<a name="gst-gl-download-transform-caps"></a><h3>gst_gl_download_transform_caps ()</h3>
-<pre class="programlisting"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstCaps.html"><span class="returnvalue">GstCaps</span></a> *
-gst_gl_download_transform_caps (<em class="parameter"><code><a class="link" href="GstGLContext.html" title="GstGLContext"><span class="type">GstGLContext</span></a> *convert</code></em>,
-                                <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html#GstPadDirection"><span class="type">GstPadDirection</span></a> direction</code></em>,
-                                <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstCaps.html"><span class="type">GstCaps</span></a> *caps</code></em>,
-                                <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstCaps.html"><span class="type">GstCaps</span></a> *filter</code></em>);</pre>
-</div>
-<hr>
-<div class="refsect2">
-<a name="gst-gl-download-perform-with-data"></a><h3>gst_gl_download_perform_with_data ()</h3>
-<pre class="programlisting"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-gst_gl_download_perform_with_data (<em class="parameter"><code><a class="link" href="GstGLDownload.html" title="GstGLDownload"><span class="type">GstGLDownload</span></a> *download</code></em>,
-                                   <em class="parameter"><code><span class="type">GLuint</span> texture_id</code></em>,
-                                   <em class="parameter"><code><span class="type">GLuint</span> texture_target</code></em>,
-                                   <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> data[GST_VIDEO_MAX_PLANES]</code></em>);</pre>
-<p>Downloads <em class="parameter"><code>texture_id</code></em>
- into <em class="parameter"><code>data</code></em>
-. <em class="parameter"><code>data</code></em>
- size and format is specified by
-the <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base-libs/html/gst-plugins-base-libs-gstvideo.html#GstVideoFormat"><span class="type">GstVideoFormat</span></a> passed to <a class="link" href="GstGLDownload.html#gst-gl-download-set-format" title="gst_gl_download_set_format ()"><code class="function">gst_gl_download_set_format()</code></a></p>
-<p>This method can only be used for download a single view.</p>
-<div class="refsect3">
-<a name="id-1.2.9.12.7.5.6"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
-<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
-</colgroup>
-<tbody>
-<tr>
-<td class="parameter_name"><p>download</p></td>
-<td class="parameter_description"><p>a <a class="link" href="GstGLDownload.html" title="GstGLDownload"><span class="type">GstGLDownload</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr>
-<tr>
-<td class="parameter_name"><p>texture_id</p></td>
-<td class="parameter_description"><p>the texture id to download</p></td>
-<td class="parameter_annotations"> </td>
-</tr>
-<tr>
-<td class="parameter_name"><p>texture_target</p></td>
-<td class="parameter_description"><p>the GL texture target</p></td>
-<td class="parameter_annotations"> </td>
-</tr>
-<tr>
-<td class="parameter_name"><p>data</p></td>
-<td class="parameter_description"><p> where the downloaded data should go. </p></td>
-<td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>]</span></td>
-</tr>
-</tbody>
-</table></div>
-</div>
-<div class="refsect3">
-<a name="id-1.2.9.12.7.5.7"></a><h4>Returns</h4>
-<p> whether the download was successful</p>
-</div>
-</div>
-</div>
-<div class="refsect1">
-<a name="GstGLDownload.other_details"></a><h2>Types and Values</h2>
-<div class="refsect2">
-<a name="GstGLDownload-struct"></a><h3>GstGLDownload</h3>
-<pre class="programlisting">typedef struct _GstGLDownload GstGLDownload;</pre>
-<p>Opaque <a class="link" href="GstGLDownload.html" title="GstGLDownload"><span class="type">GstGLDownload</span></a> object</p>
-</div>
-</div>
-<div class="refsect1">
-<a name="GstGLDownload.see-also"></a><h2>See Also</h2>
-<p><a class="link" href="GstGLUpload.html" title="GstGLUpload"><span class="type">GstGLUpload</span></a>, <a class="link" href="gst-plugins-bad-libs-gstglmemory.html#GstGLMemory" title="GstGLMemory"><span class="type">GstGLMemory</span></a></p>
-</div>
-</div>
-<div class="footer">
-<hr>Generated by GTK-Doc V1.24</div>
-</body>
-</html>
\ No newline at end of file
diff --git a/docs/libs/html/GstGLFilter.html b/docs/libs/html/GstGLFilter.html
index 29f3018..a1a20a1 100644
--- a/docs/libs/html/GstGLFilter.html
+++ b/docs/libs/html/GstGLFilter.html
@@ -3,10 +3,10 @@
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>GstGLFilter: GStreamer Bad Plugins 1.0 Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
 <link rel="home" href="index.html" title="GStreamer Bad Plugins 1.0 Library Reference Manual">
 <link rel="up" href="gl.html" title="OpenGL Helper Library">
-<link rel="prev" href="GstGLBaseFilter.html" title="GstGLBaseFilter">
+<link rel="prev" href="gst-plugins-bad-libs-GstEGLImageMemory.html" title="GstEGLImageMemory">
 <link rel="next" href="GstGLFramebuffer.html" title="GstGLFramebuffer">
 <meta name="generator" content="GTK-Doc V1.24 (XML mode)">
 <link rel="stylesheet" href="style.css" type="text/css">
@@ -20,7 +20,7 @@
 </td>
 <td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
 <td><a accesskey="u" href="gl.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
-<td><a accesskey="p" href="GstGLBaseFilter.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
+<td><a accesskey="p" href="gst-plugins-bad-libs-GstEGLImageMemory.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
 <td><a accesskey="n" href="GstGLFramebuffer.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
 </tr></table>
 <div class="refentry">
@@ -34,7 +34,7 @@
 </tr></table></div>
 <div class="refsect1">
 <a name="GstGLFilter.functions"></a><h2>Functions</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="functions_return">
 <col class="functions_name">
@@ -77,7 +77,7 @@
 </div>
 <div class="refsect1">
 <a name="GstGLFilter.other"></a><h2>Types and Values</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="name">
 <col class="description">
@@ -122,8 +122,8 @@
  and <em class="parameter"><code>height</code></em>
 .</p>
 <div class="refsect3">
-<a name="id-1.2.9.15.7.2.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="id-1.2.9.16.7.2.5"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
 <col class="parameters_description">
@@ -163,7 +163,7 @@
                                 <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> resize</code></em>,
                                 <em class="parameter"><code><span class="type">GLuint</span> input</code></em>,
                                 <em class="parameter"><code><span class="type">GLuint</span> target</code></em>,
-                                <em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-Utilities.html#GLCB:CAPS" title="GLCB ()"><span class="type">GLCB</span></a> func</code></em>,
+                                <em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-OpenGL-Miscellaneous-Utilities.html#GLCB:CAPS" title="GLCB ()"><span class="type">GLCB</span></a> func</code></em>,
                                 <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> data</code></em>);</pre>
 <p>Transforms <em class="parameter"><code>input</code></em>
  into <em class="parameter"><code>output</code></em>
@@ -174,8 +174,8 @@
  is the input texture of <em class="parameter"><code>filter</code></em>
 .</p>
 <div class="refsect3">
-<a name="id-1.2.9.15.7.3.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="id-1.2.9.16.7.3.5"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
 <col class="parameters_description">
@@ -230,7 +230,7 @@
                                 <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> resize</code></em>,
                                 <em class="parameter"><code><span class="type">GLuint</span> input</code></em>,
                                 <em class="parameter"><code><span class="type">GLuint</span> target</code></em>,
-                                <em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-gstglshader.html#GstGLShader"><span class="type">GstGLShader</span></a> *shader</code></em>);</pre>
+                                <em class="parameter"><code><a class="link" href="GstGLShader.html" title="GstGLShader"><span class="type">GstGLShader</span></a> *shader</code></em>);</pre>
 <p>Transforms <em class="parameter"><code>input</code></em>
  into <em class="parameter"><code>output</code></em>
  using <em class="parameter"><code>shader</code></em>
@@ -241,8 +241,8 @@
 .</p>
 <p>See also: <a class="link" href="GstGLFilter.html#gst-gl-filter-render-to-target" title="gst_gl_filter_render_to_target ()"><code class="function">gst_gl_filter_render_to_target()</code></a></p>
 <div class="refsect3">
-<a name="id-1.2.9.15.7.4.6"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="id-1.2.9.16.7.4.6"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
 <col class="parameters_description">
@@ -289,8 +289,8 @@
 <p>Perform automatic upload if needed, call filter_texture vfunc and then an
 automatic download if needed.</p>
 <div class="refsect3">
-<a name="id-1.2.9.15.7.5.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="id-1.2.9.16.7.5.5"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
 <col class="parameters_description">
@@ -316,7 +316,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.9.15.7.5.6"></a><h4>Returns</h4>
+<a name="id-1.2.9.16.7.5.6"></a><h4>Returns</h4>
 <p> whether the transformation succeeded</p>
 </div>
 </div>
@@ -327,11 +327,11 @@
 <a name="GstGLFilter-struct"></a><h3>GstGLFilter</h3>
 <pre class="programlisting">typedef struct _GstGLFilter GstGLFilter;</pre>
 <p><a class="link" href="GstGLFilter.html" title="GstGLFilter"><span class="type">GstGLFilter</span></a> is a base class that provides the logic of getting the GL context
-from downstream and automatic upload/download for non-<a class="link" href="gst-plugins-bad-libs-gstglmemory.html#GstGLMemory" title="GstGLMemory"><span class="type">GstGLMemory</span></a>
+from downstream and automatic upload/download for non-<a class="link" href="gst-plugins-bad-libs-GstGLMemory.html#GstGLMemory" title="GstGLMemory"><span class="type">GstGLMemory</span></a>
 <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstBuffer.html"><span class="type">GstBuffer</span></a>s.</p>
 <div class="refsect3">
-<a name="id-1.2.9.15.8.2.5"></a><h4>Members</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="id-1.2.9.16.8.2.5"></a><h4>Members</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="300px" class="struct_members_name">
 <col class="struct_members_description">
@@ -361,8 +361,8 @@
 } GstGLFilterClass;
 </pre>
 <div class="refsect3">
-<a name="id-1.2.9.15.8.3.4"></a><h4>Members</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="id-1.2.9.16.8.3.4"></a><h4>Members</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="300px" class="struct_members_name">
 <col class="struct_members_description">
diff --git a/docs/libs/html/GstGLFramebuffer.html b/docs/libs/html/GstGLFramebuffer.html
index 607c8c4..f25f1d0 100644
--- a/docs/libs/html/GstGLFramebuffer.html
+++ b/docs/libs/html/GstGLFramebuffer.html
@@ -3,11 +3,11 @@
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>GstGLFramebuffer: GStreamer Bad Plugins 1.0 Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
 <link rel="home" href="index.html" title="GStreamer Bad Plugins 1.0 Library Reference Manual">
 <link rel="up" href="gl.html" title="OpenGL Helper Library">
 <link rel="prev" href="GstGLFilter.html" title="GstGLFilter">
-<link rel="next" href="gst-plugins-bad-libs-gstglmemory.html" title="GstGLMemory">
+<link rel="next" href="gst-plugins-bad-libs-GstGLMemory.html" title="GstGLMemory">
 <meta name="generator" content="GTK-Doc V1.24 (XML mode)">
 <link rel="stylesheet" href="style.css" type="text/css">
 </head>
@@ -21,7 +21,7 @@
 <td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
 <td><a accesskey="u" href="gl.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
 <td><a accesskey="p" href="GstGLFilter.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
-<td><a accesskey="n" href="gst-plugins-bad-libs-gstglmemory.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
+<td><a accesskey="n" href="gst-plugins-bad-libs-GstGLMemory.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
 </tr></table>
 <div class="refentry">
 <a name="GstGLFramebuffer"></a><div class="titlepage"></div>
@@ -34,7 +34,7 @@
 </tr></table></div>
 <div class="refsect1">
 <a name="GstGLFramebuffer.functions"></a><h2>Functions</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="functions_return">
 <col class="functions_name">
@@ -77,7 +77,7 @@
 </div>
 <div class="refsect1">
 <a name="GstGLFramebuffer.other"></a><h2>Types and Values</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="name">
 <col class="description">
@@ -138,7 +138,7 @@
                            <em class="parameter"><code><span class="type">GLuint</span> fbo</code></em>,
                            <em class="parameter"><code><span class="type">GLuint</span> depth_buffer</code></em>,
                            <em class="parameter"><code><span class="type">GLuint</span> texture_fbo</code></em>,
-                           <em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-Utilities.html#GLCB-V2:CAPS" title="GLCB_V2 ()"><span class="type">GLCB_V2</span></a> cb</code></em>,
+                           <em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-OpenGL-Miscellaneous-Utilities.html#GLCB-V2:CAPS" title="GLCB_V2 ()"><span class="type">GLCB_V2</span></a> cb</code></em>,
                            <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> stuff</code></em>);</pre>
 </div>
 </div>
diff --git a/docs/libs/html/GstGLShader.html b/docs/libs/html/GstGLShader.html
new file mode 100644
index 0000000..3797a71
--- /dev/null
+++ b/docs/libs/html/GstGLShader.html
@@ -0,0 +1,1237 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>GstGLShader: GStreamer Bad Plugins 1.0 Library Reference Manual</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
+<link rel="home" href="index.html" title="GStreamer Bad Plugins 1.0 Library Reference Manual">
+<link rel="up" href="gl.html" title="OpenGL Helper Library">
+<link rel="prev" href="gst-plugins-bad-libs-gstglmemorypbo.html" title="GstGLMemoryPBO">
+<link rel="next" href="gst-plugins-bad-libs-GstGLSL.html" title="GstGLSL">
+<meta name="generator" content="GTK-Doc V1.24 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="5"><tr valign="middle">
+<td width="100%" align="left" class="shortcuts">
+<a href="#" class="shortcut">Top</a><span id="nav_description">  <span class="dim">|</span> 
+                  <a href="#GstGLShader.description" class="shortcut">Description</a></span><span id="nav_hierarchy">  <span class="dim">|</span> 
+                  <a href="#GstGLShader.object-hierarchy" class="shortcut">Object Hierarchy</a></span><span id="nav_properties">  <span class="dim">|</span> 
+                  <a href="#GstGLShader.properties" class="shortcut">Properties</a></span>
+</td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
+<td><a accesskey="u" href="gl.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
+<td><a accesskey="p" href="gst-plugins-bad-libs-gstglmemorypbo.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
+<td><a accesskey="n" href="gst-plugins-bad-libs-GstGLSL.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
+</tr></table>
+<div class="refentry">
+<a name="GstGLShader"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="GstGLShader.top_of_page"></a>GstGLShader</span></h2>
+<p>GstGLShader — object representing an OpenGL shader program</p>
+</td>
+<td class="gallery_image" valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsect1">
+<a name="GstGLShader.functions"></a><h2>Functions</h2>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="functions_return">
+<col class="functions_name">
+</colgroup>
+<tbody>
+<tr>
+<td class="function_type">
+<a class="link" href="GstGLShader.html" title="GstGLShader"><span class="returnvalue">GstGLShader</span></a> *
+</td>
+<td class="function_name">
+<a class="link" href="GstGLShader.html#gst-gl-shader-new" title="gst_gl_shader_new ()">gst_gl_shader_new</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a class="link" href="GstGLShader.html" title="GstGLShader"><span class="returnvalue">GstGLShader</span></a> *
+</td>
+<td class="function_name">
+<a class="link" href="GstGLShader.html#gst-gl-shader-new-default" title="gst_gl_shader_new_default ()">gst_gl_shader_new_default</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a class="link" href="GstGLShader.html" title="GstGLShader"><span class="returnvalue">GstGLShader</span></a> *
+</td>
+<td class="function_name">
+<a class="link" href="GstGLShader.html#gst-gl-shader-new-link-with-stages" title="gst_gl_shader_new_link_with_stages ()">gst_gl_shader_new_link_with_stages</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a class="link" href="GstGLShader.html" title="GstGLShader"><span class="returnvalue">GstGLShader</span></a> *
+</td>
+<td class="function_name">
+<a class="link" href="GstGLShader.html#gst-gl-shader-new-with-stages" title="gst_gl_shader_new_with_stages ()">gst_gl_shader_new_with_stages</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
+<a class="link" href="GstGLShader.html#gst-gl-shader-use" title="gst_gl_shader_use ()">gst_gl_shader_use</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">int</span>
+</td>
+<td class="function_name">
+<a class="link" href="GstGLShader.html#gst-gl-shader-get-program-handle" title="gst_gl_shader_get_program_handle ()">gst_gl_shader_get_program_handle</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
+<a class="link" href="GstGLShader.html#gst-gl-shader-release" title="gst_gl_shader_release ()">gst_gl_shader_release</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
+<a class="link" href="GstGLShader.html#gst-gl-shader-release-unlocked" title="gst_gl_shader_release_unlocked ()">gst_gl_shader_release_unlocked</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
+</td>
+<td class="function_name">
+<a class="link" href="GstGLShader.html#gst-gl-shader-attach" title="gst_gl_shader_attach ()">gst_gl_shader_attach</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
+</td>
+<td class="function_name">
+<a class="link" href="GstGLShader.html#gst-gl-shader-attach-unlocked" title="gst_gl_shader_attach_unlocked ()">gst_gl_shader_attach_unlocked</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
+</td>
+<td class="function_name">
+<a class="link" href="GstGLShader.html#gst-gl-shader-compile-attach-stage" title="gst_gl_shader_compile_attach_stage ()">gst_gl_shader_compile_attach_stage</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
+<a class="link" href="GstGLShader.html#gst-gl-shader-detach" title="gst_gl_shader_detach ()">gst_gl_shader_detach</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
+<a class="link" href="GstGLShader.html#gst-gl-shader-detach-unlocked" title="gst_gl_shader_detach_unlocked ()">gst_gl_shader_detach_unlocked</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
+</td>
+<td class="function_name">
+<a class="link" href="GstGLShader.html#gst-gl-shader-is-linked" title="gst_gl_shader_is_linked ()">gst_gl_shader_is_linked</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
+</td>
+<td class="function_name">
+<a class="link" href="GstGLShader.html#gst-gl-shader-link" title="gst_gl_shader_link ()">gst_gl_shader_link</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
+<a class="link" href="GstGLShader.html#gst-gl-shader-set-uniform-1i" title="gst_gl_shader_set_uniform_1i ()">gst_gl_shader_set_uniform_1i</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
+<a class="link" href="GstGLShader.html#gst-gl-shader-set-uniform-1f" title="gst_gl_shader_set_uniform_1f ()">gst_gl_shader_set_uniform_1f</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
+<a class="link" href="GstGLShader.html#gst-gl-shader-set-uniform-1fv" title="gst_gl_shader_set_uniform_1fv ()">gst_gl_shader_set_uniform_1fv</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
+<a class="link" href="GstGLShader.html#gst-gl-shader-set-uniform-1iv" title="gst_gl_shader_set_uniform_1iv ()">gst_gl_shader_set_uniform_1iv</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
+<a class="link" href="GstGLShader.html#gst-gl-shader-set-uniform-2f" title="gst_gl_shader_set_uniform_2f ()">gst_gl_shader_set_uniform_2f</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
+<a class="link" href="GstGLShader.html#gst-gl-shader-set-uniform-2fv" title="gst_gl_shader_set_uniform_2fv ()">gst_gl_shader_set_uniform_2fv</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
+<a class="link" href="GstGLShader.html#gst-gl-shader-set-uniform-2i" title="gst_gl_shader_set_uniform_2i ()">gst_gl_shader_set_uniform_2i</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
+<a class="link" href="GstGLShader.html#gst-gl-shader-set-uniform-2iv" title="gst_gl_shader_set_uniform_2iv ()">gst_gl_shader_set_uniform_2iv</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
+<a class="link" href="GstGLShader.html#gst-gl-shader-set-uniform-3f" title="gst_gl_shader_set_uniform_3f ()">gst_gl_shader_set_uniform_3f</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
+<a class="link" href="GstGLShader.html#gst-gl-shader-set-uniform-3fv" title="gst_gl_shader_set_uniform_3fv ()">gst_gl_shader_set_uniform_3fv</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
+<a class="link" href="GstGLShader.html#gst-gl-shader-set-uniform-3i" title="gst_gl_shader_set_uniform_3i ()">gst_gl_shader_set_uniform_3i</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
+<a class="link" href="GstGLShader.html#gst-gl-shader-set-uniform-3iv" title="gst_gl_shader_set_uniform_3iv ()">gst_gl_shader_set_uniform_3iv</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
+<a class="link" href="GstGLShader.html#gst-gl-shader-set-uniform-4f" title="gst_gl_shader_set_uniform_4f ()">gst_gl_shader_set_uniform_4f</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
+<a class="link" href="GstGLShader.html#gst-gl-shader-set-uniform-4fv" title="gst_gl_shader_set_uniform_4fv ()">gst_gl_shader_set_uniform_4fv</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
+<a class="link" href="GstGLShader.html#gst-gl-shader-set-uniform-4i" title="gst_gl_shader_set_uniform_4i ()">gst_gl_shader_set_uniform_4i</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
+<a class="link" href="GstGLShader.html#gst-gl-shader-set-uniform-4iv" title="gst_gl_shader_set_uniform_4iv ()">gst_gl_shader_set_uniform_4iv</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
+<a class="link" href="GstGLShader.html#gst-gl-shader-set-uniform-matrix-2fv" title="gst_gl_shader_set_uniform_matrix_2fv ()">gst_gl_shader_set_uniform_matrix_2fv</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
+<a class="link" href="GstGLShader.html#gst-gl-shader-set-uniform-matrix-2x3fv" title="gst_gl_shader_set_uniform_matrix_2x3fv ()">gst_gl_shader_set_uniform_matrix_2x3fv</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
+<a class="link" href="GstGLShader.html#gst-gl-shader-set-uniform-matrix-2x4fv" title="gst_gl_shader_set_uniform_matrix_2x4fv ()">gst_gl_shader_set_uniform_matrix_2x4fv</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
+<a class="link" href="GstGLShader.html#gst-gl-shader-set-uniform-matrix-3fv" title="gst_gl_shader_set_uniform_matrix_3fv ()">gst_gl_shader_set_uniform_matrix_3fv</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
+<a class="link" href="GstGLShader.html#gst-gl-shader-set-uniform-matrix-3x2fv" title="gst_gl_shader_set_uniform_matrix_3x2fv ()">gst_gl_shader_set_uniform_matrix_3x2fv</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
+<a class="link" href="GstGLShader.html#gst-gl-shader-set-uniform-matrix-3x4fv" title="gst_gl_shader_set_uniform_matrix_3x4fv ()">gst_gl_shader_set_uniform_matrix_3x4fv</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
+<a class="link" href="GstGLShader.html#gst-gl-shader-set-uniform-matrix-4fv" title="gst_gl_shader_set_uniform_matrix_4fv ()">gst_gl_shader_set_uniform_matrix_4fv</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
+<a class="link" href="GstGLShader.html#gst-gl-shader-set-uniform-matrix-4x2fv" title="gst_gl_shader_set_uniform_matrix_4x2fv ()">gst_gl_shader_set_uniform_matrix_4x2fv</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
+<a class="link" href="GstGLShader.html#gst-gl-shader-set-uniform-matrix-4x3fv" title="gst_gl_shader_set_uniform_matrix_4x3fv ()">gst_gl_shader_set_uniform_matrix_4x3fv</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gint"><span class="returnvalue">gint</span></a>
+</td>
+<td class="function_name">
+<a class="link" href="GstGLShader.html#gst-gl-shader-get-attribute-location" title="gst_gl_shader_get_attribute_location ()">gst_gl_shader_get_attribute_location</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
+<a class="link" href="GstGLShader.html#gst-gl-shader-bind-attribute-location" title="gst_gl_shader_bind_attribute_location ()">gst_gl_shader_bind_attribute_location</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect1">
+<a name="GstGLShader.properties"></a><h2>Properties</h2>
+<div class="informaltable"><table class="informaltable" border="0">
+<colgroup>
+<col width="150px" class="properties_type">
+<col width="300px" class="properties_name">
+<col width="200px" class="properties_flags">
+</colgroup>
+<tbody><tr>
+<td class="property_type"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a></td>
+<td class="property_name"><a class="link" href="GstGLShader.html#GstGLShader--linked" title="The “linked” property">linked</a></td>
+<td class="property_flags">Read</td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect1">
+<a name="GstGLShader.other"></a><h2>Types and Values</h2>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="name">
+<col class="description">
+</colgroup>
+<tbody><tr>
+<td class="datatype_keyword"> </td>
+<td class="function_name"><a class="link" href="GstGLShader.html#GstGLShader-struct" title="GstGLShader">GstGLShader</a></td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect1">
+<a name="GstGLShader.object-hierarchy"></a><h2>Object Hierarchy</h2>
+<pre class="screen">    <a href="https://developer.gnome.org/gobject/unstable/gobject-The-Base-Object-Type.html#GObject">GObject</a>
+    <span class="lineart">╰──</span> <a href="https://developer.gnome.org/gobject/unstable/gobject-The-Base-Object-Type.html#GInitiallyUnowned">GInitiallyUnowned</a>
+        <span class="lineart">╰──</span> <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstObject.html">GstObject</a>
+            <span class="lineart">╰──</span> GstGLShader
+</pre>
+</div>
+<div class="refsect1">
+<a name="GstGLShader.description"></a><h2>Description</h2>
+</div>
+<div class="refsect1">
+<a name="GstGLShader.functions_details"></a><h2>Functions</h2>
+<div class="refsect2">
+<a name="gst-gl-shader-new"></a><h3>gst_gl_shader_new ()</h3>
+<pre class="programlisting"><a class="link" href="GstGLShader.html" title="GstGLShader"><span class="returnvalue">GstGLShader</span></a> *
+gst_gl_shader_new (<em class="parameter"><code><a class="link" href="GstGLContext.html" title="GstGLContext"><span class="type">GstGLContext</span></a> *context</code></em>);</pre>
+<p>Note: must be called in the GL thread</p>
+<div class="refsect3">
+<a name="id-1.2.9.20.8.2.5"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>context</p></td>
+<td class="parameter_description"><p>a <a class="link" href="GstGLContext.html" title="GstGLContext"><span class="type">GstGLContext</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="id-1.2.9.20.8.2.6"></a><h4>Returns</h4>
+<p> a new empty <em class="parameter"><code>shader</code></em>
+. </p>
+<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-gl-shader-new-default"></a><h3>gst_gl_shader_new_default ()</h3>
+<pre class="programlisting"><a class="link" href="GstGLShader.html" title="GstGLShader"><span class="returnvalue">GstGLShader</span></a> *
+gst_gl_shader_new_default (<em class="parameter"><code><a class="link" href="GstGLContext.html" title="GstGLContext"><span class="type">GstGLContext</span></a> *context</code></em>,
+                           <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Error-Reporting.html#GError"><span class="type">GError</span></a> **error</code></em>);</pre>
+<p>Note: must be called in the GL thread</p>
+<div class="refsect3">
+<a name="id-1.2.9.20.8.3.5"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>context</p></td>
+<td class="parameter_description"><p>a <a class="link" href="GstGLContext.html" title="GstGLContext"><span class="type">GstGLContext</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>error</p></td>
+<td class="parameter_description"><p>a <a href="https://developer.gnome.org/glib/unstable/glib-Error-Reporting.html#GError"><span class="type">GError</span></a> that is filled on failure</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="id-1.2.9.20.8.3.6"></a><h4>Returns</h4>
+<p> a default <em class="parameter"><code>shader</code></em>
+or <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> on failure. </p>
+<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p>
+</div>
+<p class="since">Since: 1.8</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-gl-shader-new-link-with-stages"></a><h3>gst_gl_shader_new_link_with_stages ()</h3>
+<pre class="programlisting"><a class="link" href="GstGLShader.html" title="GstGLShader"><span class="returnvalue">GstGLShader</span></a> *
+gst_gl_shader_new_link_with_stages (<em class="parameter"><code><a class="link" href="GstGLContext.html" title="GstGLContext"><span class="type">GstGLContext</span></a> *context</code></em>,
+                                    <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Error-Reporting.html#GError"><span class="type">GError</span></a> **error</code></em>,
+                                    <em class="parameter"><code>...</code></em>);</pre>
+<p>Each stage will attempt to be compiled and attached to <em class="parameter"><code>shader</code></em>
+.  Then
+the shader will be linked. On error, <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> will be returned and <em class="parameter"><code>error</code></em>
+ will
+contain the details of the error.</p>
+<p>Note: must be called in the GL thread</p>
+<div class="refsect3">
+<a name="id-1.2.9.20.8.4.6"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>context</p></td>
+<td class="parameter_description"><p>a <a class="link" href="GstGLContext.html" title="GstGLContext"><span class="type">GstGLContext</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>error</p></td>
+<td class="parameter_description"><p>a <a href="https://developer.gnome.org/glib/unstable/glib-Error-Reporting.html#GError"><span class="type">GError</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>...</p></td>
+<td class="parameter_description"><p>a NULL terminated list of <a class="link" href=".html#GstGLSLStage"><span class="type">GstGLSLStage</span></a>'s</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="id-1.2.9.20.8.4.7"></a><h4>Returns</h4>
+<p> a new <em class="parameter"><code>shader</code></em>
+with the specified stages. </p>
+<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p>
+</div>
+<p class="since">Since: 1.8</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-gl-shader-new-with-stages"></a><h3>gst_gl_shader_new_with_stages ()</h3>
+<pre class="programlisting"><a class="link" href="GstGLShader.html" title="GstGLShader"><span class="returnvalue">GstGLShader</span></a> *
+gst_gl_shader_new_with_stages (<em class="parameter"><code><a class="link" href="GstGLContext.html" title="GstGLContext"><span class="type">GstGLContext</span></a> *context</code></em>,
+                               <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Error-Reporting.html#GError"><span class="type">GError</span></a> **error</code></em>,
+                               <em class="parameter"><code>...</code></em>);</pre>
+<p>Each stage will attempt to be compiled and attached to <em class="parameter"><code>shader</code></em>
+.  On error,
+<a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> will be returned and <em class="parameter"><code>error</code></em>
+ will contain the details of the error.</p>
+<p>Note: must be called in the GL thread</p>
+<div class="refsect3">
+<a name="id-1.2.9.20.8.5.6"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>context</p></td>
+<td class="parameter_description"><p>a <a class="link" href="GstGLContext.html" title="GstGLContext"><span class="type">GstGLContext</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>error</p></td>
+<td class="parameter_description"><p>a <a href="https://developer.gnome.org/glib/unstable/glib-Error-Reporting.html#GError"><span class="type">GError</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>...</p></td>
+<td class="parameter_description"><p>a NULL terminated list of <a class="link" href=".html#GstGLSLStage"><span class="type">GstGLSLStage</span></a>'s</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="id-1.2.9.20.8.5.7"></a><h4>Returns</h4>
+<p> a new <em class="parameter"><code>shader</code></em>
+with the specified stages. </p>
+<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p>
+</div>
+<p class="since">Since: 1.8</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-gl-shader-use"></a><h3>gst_gl_shader_use ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+gst_gl_shader_use (<em class="parameter"><code><a class="link" href="GstGLShader.html" title="GstGLShader"><span class="type">GstGLShader</span></a> *shader</code></em>);</pre>
+<p>Mark's <em class="parameter"><code>shader</code></em>
+ as being used for the next GL draw command.</p>
+<p>Note: must be called in the GL thread and <em class="parameter"><code>shader</code></em>
+ must have been linked.</p>
+<div class="refsect3">
+<a name="id-1.2.9.20.8.6.6"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>shader</p></td>
+<td class="parameter_description"><p>a <a class="link" href="GstGLShader.html" title="GstGLShader"><span class="type">GstGLShader</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-gl-shader-get-program-handle"></a><h3>gst_gl_shader_get_program_handle ()</h3>
+<pre class="programlisting"><span class="returnvalue">int</span>
+gst_gl_shader_get_program_handle (<em class="parameter"><code><a class="link" href="GstGLShader.html" title="GstGLShader"><span class="type">GstGLShader</span></a> *shader</code></em>);</pre>
+<div class="refsect3">
+<a name="id-1.2.9.20.8.7.4"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>shader</p></td>
+<td class="parameter_description"><p>a <a class="link" href="GstGLShader.html" title="GstGLShader"><span class="type">GstGLShader</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="id-1.2.9.20.8.7.5"></a><h4>Returns</h4>
+<p> the GL program handle for this shader</p>
+</div>
+<p class="since">Since: 1.8</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-gl-shader-release"></a><h3>gst_gl_shader_release ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+gst_gl_shader_release (<em class="parameter"><code><a class="link" href="GstGLShader.html" title="GstGLShader"><span class="type">GstGLShader</span></a> *shader</code></em>);</pre>
+<p>Releases the shader and stages.</p>
+<p>Note: must be called in the GL thread</p>
+<div class="refsect3">
+<a name="id-1.2.9.20.8.8.6"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>shader</p></td>
+<td class="parameter_description"><p>a <a class="link" href="GstGLShader.html" title="GstGLShader"><span class="type">GstGLShader</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<p class="since">Since: 1.8</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-gl-shader-release-unlocked"></a><h3>gst_gl_shader_release_unlocked ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+gst_gl_shader_release_unlocked (<em class="parameter"><code><a class="link" href="GstGLShader.html" title="GstGLShader"><span class="type">GstGLShader</span></a> *shader</code></em>);</pre>
+<p>Releases the shader and stages.</p>
+<p>Note: must be called in the GL thread</p>
+<div class="refsect3">
+<a name="id-1.2.9.20.8.9.6"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>shader</p></td>
+<td class="parameter_description"><p>a <a class="link" href="GstGLShader.html" title="GstGLShader"><span class="type">GstGLShader</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<p class="since">Since: 1.8</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-gl-shader-attach"></a><h3>gst_gl_shader_attach ()</h3>
+<pre class="programlisting"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
+gst_gl_shader_attach (<em class="parameter"><code><a class="link" href="GstGLShader.html" title="GstGLShader"><span class="type">GstGLShader</span></a> *shader</code></em>,
+                      <em class="parameter"><code><a class="link" href=".html#GstGLSLStage"><span class="type">GstGLSLStage</span></a> *stage</code></em>);</pre>
+<p>Attaches <em class="parameter"><code>stage</code></em>
+ to <em class="parameter"><code>shader</code></em>
+.  <em class="parameter"><code>stage</code></em>
+ must have been successfully compiled
+with <code class="function">gst_glsl_stage_compile()</code>.</p>
+<p>Note: must be called in the GL thread</p>
+<div class="refsect3">
+<a name="id-1.2.9.20.8.10.6"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>shader</p></td>
+<td class="parameter_description"><p>a <a class="link" href="GstGLShader.html" title="GstGLShader"><span class="type">GstGLShader</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>stage</p></td>
+<td class="parameter_description"><p>a <a class="link" href=".html#GstGLSLStage"><span class="type">GstGLSLStage</span></a> to attach</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="id-1.2.9.20.8.10.7"></a><h4>Returns</h4>
+<p> whether <em class="parameter"><code>stage</code></em>
+could be attached to <em class="parameter"><code>shader</code></em>
+</p>
+</div>
+<p class="since">Since: 1.8</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-gl-shader-attach-unlocked"></a><h3>gst_gl_shader_attach_unlocked ()</h3>
+<pre class="programlisting"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
+gst_gl_shader_attach_unlocked (<em class="parameter"><code><a class="link" href="GstGLShader.html" title="GstGLShader"><span class="type">GstGLShader</span></a> *shader</code></em>,
+                               <em class="parameter"><code><a class="link" href=".html#GstGLSLStage"><span class="type">GstGLSLStage</span></a> *stage</code></em>);</pre>
+<p>Attaches <em class="parameter"><code>stage</code></em>
+ to <em class="parameter"><code>shader</code></em>
+.  <em class="parameter"><code>stage</code></em>
+ must have been successfully compiled
+with <code class="function">gst_glsl_stage_compile()</code>.</p>
+<p>Note: must be called in the GL thread</p>
+<div class="refsect3">
+<a name="id-1.2.9.20.8.11.6"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>shader</p></td>
+<td class="parameter_description"><p>a <a class="link" href="GstGLShader.html" title="GstGLShader"><span class="type">GstGLShader</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>stage</p></td>
+<td class="parameter_description"><p>a <a class="link" href=".html#GstGLSLStage"><span class="type">GstGLSLStage</span></a> to attach</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="id-1.2.9.20.8.11.7"></a><h4>Returns</h4>
+<p> whether <em class="parameter"><code>stage</code></em>
+could be attached to <em class="parameter"><code>shader</code></em>
+</p>
+</div>
+<p class="since">Since: 1.8</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-gl-shader-compile-attach-stage"></a><h3>gst_gl_shader_compile_attach_stage ()</h3>
+<pre class="programlisting"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
+gst_gl_shader_compile_attach_stage (<em class="parameter"><code><a class="link" href="GstGLShader.html" title="GstGLShader"><span class="type">GstGLShader</span></a> *shader</code></em>,
+                                    <em class="parameter"><code><a class="link" href=".html#GstGLSLStage"><span class="type">GstGLSLStage</span></a> *stage</code></em>,
+                                    <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Error-Reporting.html#GError"><span class="type">GError</span></a> **error</code></em>);</pre>
+<p>Compiles <em class="parameter"><code>stage</code></em>
+ and attaches it to <em class="parameter"><code>shader</code></em>
+.</p>
+<p>Note: must be called in the GL thread</p>
+<div class="refsect3">
+<a name="id-1.2.9.20.8.12.6"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>shader</p></td>
+<td class="parameter_description"><p>a <a class="link" href="GstGLShader.html" title="GstGLShader"><span class="type">GstGLShader</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>stage</p></td>
+<td class="parameter_description"><p>a <a class="link" href=".html#GstGLSLStage"><span class="type">GstGLSLStage</span></a> to attach</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>error</p></td>
+<td class="parameter_description"><p>a <a href="https://developer.gnome.org/glib/unstable/glib-Error-Reporting.html#GError"><span class="type">GError</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="id-1.2.9.20.8.12.7"></a><h4>Returns</h4>
+<p> whether <em class="parameter"><code>stage</code></em>
+could be compiled and attached to <em class="parameter"><code>shader</code></em>
+</p>
+</div>
+<p class="since">Since: 1.8</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-gl-shader-detach"></a><h3>gst_gl_shader_detach ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+gst_gl_shader_detach (<em class="parameter"><code><a class="link" href="GstGLShader.html" title="GstGLShader"><span class="type">GstGLShader</span></a> *shader</code></em>,
+                      <em class="parameter"><code><a class="link" href=".html#GstGLSLStage"><span class="type">GstGLSLStage</span></a> *stage</code></em>);</pre>
+<p>Detaches <em class="parameter"><code>stage</code></em>
+ from <em class="parameter"><code>shader</code></em>
+.  <em class="parameter"><code>stage</code></em>
+ must have been successfully attached
+to <em class="parameter"><code>shader</code></em>
+ with <a class="link" href="GstGLShader.html#gst-gl-shader-attach" title="gst_gl_shader_attach ()"><code class="function">gst_gl_shader_attach()</code></a> or <a class="link" href="GstGLShader.html#gst-gl-shader-attach-unlocked" title="gst_gl_shader_attach_unlocked ()"><code class="function">gst_gl_shader_attach_unlocked()</code></a>.</p>
+<p>Note: must be called in the GL thread</p>
+<div class="refsect3">
+<a name="id-1.2.9.20.8.13.6"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>shader</p></td>
+<td class="parameter_description"><p>a <a class="link" href="GstGLShader.html" title="GstGLShader"><span class="type">GstGLShader</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>stage</p></td>
+<td class="parameter_description"><p>a <a class="link" href=".html#GstGLSLStage"><span class="type">GstGLSLStage</span></a> to attach</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<p class="since">Since: 1.8</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-gl-shader-detach-unlocked"></a><h3>gst_gl_shader_detach_unlocked ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+gst_gl_shader_detach_unlocked (<em class="parameter"><code><a class="link" href="GstGLShader.html" title="GstGLShader"><span class="type">GstGLShader</span></a> *shader</code></em>,
+                               <em class="parameter"><code><a class="link" href=".html#GstGLSLStage"><span class="type">GstGLSLStage</span></a> *stage</code></em>);</pre>
+<p>Detaches <em class="parameter"><code>stage</code></em>
+ from <em class="parameter"><code>shader</code></em>
+.  <em class="parameter"><code>stage</code></em>
+ must have been successfully attached
+to <em class="parameter"><code>shader</code></em>
+ with <a class="link" href="GstGLShader.html#gst-gl-shader-attach" title="gst_gl_shader_attach ()"><code class="function">gst_gl_shader_attach()</code></a> or <a class="link" href="GstGLShader.html#gst-gl-shader-attach-unlocked" title="gst_gl_shader_attach_unlocked ()"><code class="function">gst_gl_shader_attach_unlocked()</code></a>.</p>
+<p>Note: must be called in the GL thread</p>
+<div class="refsect3">
+<a name="id-1.2.9.20.8.14.6"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>shader</p></td>
+<td class="parameter_description"><p>a <a class="link" href="GstGLShader.html" title="GstGLShader"><span class="type">GstGLShader</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>stage</p></td>
+<td class="parameter_description"><p>a <a class="link" href=".html#GstGLSLStage"><span class="type">GstGLSLStage</span></a> to attach</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<p class="since">Since: 1.8</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-gl-shader-is-linked"></a><h3>gst_gl_shader_is_linked ()</h3>
+<pre class="programlisting"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
+gst_gl_shader_is_linked (<em class="parameter"><code><a class="link" href="GstGLShader.html" title="GstGLShader"><span class="type">GstGLShader</span></a> *shader</code></em>);</pre>
+<p>Note: must be called in the GL thread</p>
+<div class="refsect3">
+<a name="id-1.2.9.20.8.15.5"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>shader</p></td>
+<td class="parameter_description"><p>a <a class="link" href="GstGLShader.html" title="GstGLShader"><span class="type">GstGLShader</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="id-1.2.9.20.8.15.6"></a><h4>Returns</h4>
+<p> whether <em class="parameter"><code>shader</code></em>
+has been successfully linked</p>
+</div>
+<p class="since">Since: 1.8</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-gl-shader-link"></a><h3>gst_gl_shader_link ()</h3>
+<pre class="programlisting"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
+gst_gl_shader_link (<em class="parameter"><code><a class="link" href="GstGLShader.html" title="GstGLShader"><span class="type">GstGLShader</span></a> *shader</code></em>,
+                    <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Error-Reporting.html#GError"><span class="type">GError</span></a> **error</code></em>);</pre>
+<p>Links the current list of <a class="link" href=".html#GstGLSLStage"><span class="type">GstGLSLStage</span></a>'s in <em class="parameter"><code>shader</code></em>
+.</p>
+<p>Note: must be called in the GL thread</p>
+<div class="refsect3">
+<a name="id-1.2.9.20.8.16.6"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>shader</p></td>
+<td class="parameter_description"><p>a <a class="link" href="GstGLShader.html" title="GstGLShader"><span class="type">GstGLShader</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>error</p></td>
+<td class="parameter_description"><p>a <a href="https://developer.gnome.org/glib/unstable/glib-Error-Reporting.html#GError"><span class="type">GError</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="id-1.2.9.20.8.16.7"></a><h4>Returns</h4>
+<p> whether <em class="parameter"><code>shader</code></em>
+could be linked together.</p>
+</div>
+<p class="since">Since: 1.8</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-gl-shader-set-uniform-1i"></a><h3>gst_gl_shader_set_uniform_1i ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+gst_gl_shader_set_uniform_1i (<em class="parameter"><code><a class="link" href="GstGLShader.html" title="GstGLShader"><span class="type">GstGLShader</span></a> *shader</code></em>,
+                              <em class="parameter"><code>const <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *name</code></em>,
+                              <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a> value</code></em>);</pre>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-gl-shader-set-uniform-1f"></a><h3>gst_gl_shader_set_uniform_1f ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+gst_gl_shader_set_uniform_1f (<em class="parameter"><code><a class="link" href="GstGLShader.html" title="GstGLShader"><span class="type">GstGLShader</span></a> *shader</code></em>,
+                              <em class="parameter"><code>const <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *name</code></em>,
+                              <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gfloat"><span class="type">gfloat</span></a> value</code></em>);</pre>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-gl-shader-set-uniform-1fv"></a><h3>gst_gl_shader_set_uniform_1fv ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+gst_gl_shader_set_uniform_1fv (<em class="parameter"><code><a class="link" href="GstGLShader.html" title="GstGLShader"><span class="type">GstGLShader</span></a> *shader</code></em>,
+                               <em class="parameter"><code>const <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *name</code></em>,
+                               <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> count</code></em>,
+                               <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gfloat"><span class="type">gfloat</span></a> *value</code></em>);</pre>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-gl-shader-set-uniform-1iv"></a><h3>gst_gl_shader_set_uniform_1iv ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+gst_gl_shader_set_uniform_1iv (<em class="parameter"><code><a class="link" href="GstGLShader.html" title="GstGLShader"><span class="type">GstGLShader</span></a> *shader</code></em>,
+                               <em class="parameter"><code>const <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *name</code></em>,
+                               <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> count</code></em>,
+                               <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a> *value</code></em>);</pre>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-gl-shader-set-uniform-2f"></a><h3>gst_gl_shader_set_uniform_2f ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+gst_gl_shader_set_uniform_2f (<em class="parameter"><code><a class="link" href="GstGLShader.html" title="GstGLShader"><span class="type">GstGLShader</span></a> *shader</code></em>,
+                              <em class="parameter"><code>const <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *name</code></em>,
+                              <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gfloat"><span class="type">gfloat</span></a> v0</code></em>,
+                              <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gfloat"><span class="type">gfloat</span></a> v1</code></em>);</pre>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-gl-shader-set-uniform-2fv"></a><h3>gst_gl_shader_set_uniform_2fv ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+gst_gl_shader_set_uniform_2fv (<em class="parameter"><code><a class="link" href="GstGLShader.html" title="GstGLShader"><span class="type">GstGLShader</span></a> *shader</code></em>,
+                               <em class="parameter"><code>const <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *name</code></em>,
+                               <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> count</code></em>,
+                               <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gfloat"><span class="type">gfloat</span></a> *value</code></em>);</pre>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-gl-shader-set-uniform-2i"></a><h3>gst_gl_shader_set_uniform_2i ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+gst_gl_shader_set_uniform_2i (<em class="parameter"><code><a class="link" href="GstGLShader.html" title="GstGLShader"><span class="type">GstGLShader</span></a> *shader</code></em>,
+                              <em class="parameter"><code>const <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *name</code></em>,
+                              <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a> v0</code></em>,
+                              <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a> v1</code></em>);</pre>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-gl-shader-set-uniform-2iv"></a><h3>gst_gl_shader_set_uniform_2iv ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+gst_gl_shader_set_uniform_2iv (<em class="parameter"><code><a class="link" href="GstGLShader.html" title="GstGLShader"><span class="type">GstGLShader</span></a> *shader</code></em>,
+                               <em class="parameter"><code>const <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *name</code></em>,
+                               <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> count</code></em>,
+                               <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a> *value</code></em>);</pre>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-gl-shader-set-uniform-3f"></a><h3>gst_gl_shader_set_uniform_3f ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+gst_gl_shader_set_uniform_3f (<em class="parameter"><code><a class="link" href="GstGLShader.html" title="GstGLShader"><span class="type">GstGLShader</span></a> *shader</code></em>,
+                              <em class="parameter"><code>const <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *name</code></em>,
+                              <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gfloat"><span class="type">gfloat</span></a> v0</code></em>,
+                              <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gfloat"><span class="type">gfloat</span></a> v1</code></em>,
+                              <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gfloat"><span class="type">gfloat</span></a> v2</code></em>);</pre>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-gl-shader-set-uniform-3fv"></a><h3>gst_gl_shader_set_uniform_3fv ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+gst_gl_shader_set_uniform_3fv (<em class="parameter"><code><a class="link" href="GstGLShader.html" title="GstGLShader"><span class="type">GstGLShader</span></a> *shader</code></em>,
+                               <em class="parameter"><code>const <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *name</code></em>,
+                               <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> count</code></em>,
+                               <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gfloat"><span class="type">gfloat</span></a> *value</code></em>);</pre>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-gl-shader-set-uniform-3i"></a><h3>gst_gl_shader_set_uniform_3i ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+gst_gl_shader_set_uniform_3i (<em class="parameter"><code><a class="link" href="GstGLShader.html" title="GstGLShader"><span class="type">GstGLShader</span></a> *shader</code></em>,
+                              <em class="parameter"><code>const <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *name</code></em>,
+                              <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a> v0</code></em>,
+                              <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a> v1</code></em>,
+                              <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a> v2</code></em>);</pre>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-gl-shader-set-uniform-3iv"></a><h3>gst_gl_shader_set_uniform_3iv ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+gst_gl_shader_set_uniform_3iv (<em class="parameter"><code><a class="link" href="GstGLShader.html" title="GstGLShader"><span class="type">GstGLShader</span></a> *shader</code></em>,
+                               <em class="parameter"><code>const <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *name</code></em>,
+                               <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> count</code></em>,
+                               <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a> *value</code></em>);</pre>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-gl-shader-set-uniform-4f"></a><h3>gst_gl_shader_set_uniform_4f ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+gst_gl_shader_set_uniform_4f (<em class="parameter"><code><a class="link" href="GstGLShader.html" title="GstGLShader"><span class="type">GstGLShader</span></a> *shader</code></em>,
+                              <em class="parameter"><code>const <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *name</code></em>,
+                              <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gfloat"><span class="type">gfloat</span></a> v0</code></em>,
+                              <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gfloat"><span class="type">gfloat</span></a> v1</code></em>,
+                              <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gfloat"><span class="type">gfloat</span></a> v2</code></em>,
+                              <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gfloat"><span class="type">gfloat</span></a> v3</code></em>);</pre>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-gl-shader-set-uniform-4fv"></a><h3>gst_gl_shader_set_uniform_4fv ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+gst_gl_shader_set_uniform_4fv (<em class="parameter"><code><a class="link" href="GstGLShader.html" title="GstGLShader"><span class="type">GstGLShader</span></a> *shader</code></em>,
+                               <em class="parameter"><code>const <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *name</code></em>,
+                               <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> count</code></em>,
+                               <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gfloat"><span class="type">gfloat</span></a> *value</code></em>);</pre>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-gl-shader-set-uniform-4i"></a><h3>gst_gl_shader_set_uniform_4i ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+gst_gl_shader_set_uniform_4i (<em class="parameter"><code><a class="link" href="GstGLShader.html" title="GstGLShader"><span class="type">GstGLShader</span></a> *shader</code></em>,
+                              <em class="parameter"><code>const <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *name</code></em>,
+                              <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a> v0</code></em>,
+                              <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a> v1</code></em>,
+                              <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a> v2</code></em>,
+                              <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a> v3</code></em>);</pre>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-gl-shader-set-uniform-4iv"></a><h3>gst_gl_shader_set_uniform_4iv ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+gst_gl_shader_set_uniform_4iv (<em class="parameter"><code><a class="link" href="GstGLShader.html" title="GstGLShader"><span class="type">GstGLShader</span></a> *shader</code></em>,
+                               <em class="parameter"><code>const <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *name</code></em>,
+                               <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> count</code></em>,
+                               <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a> *value</code></em>);</pre>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-gl-shader-set-uniform-matrix-2fv"></a><h3>gst_gl_shader_set_uniform_matrix_2fv ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+gst_gl_shader_set_uniform_matrix_2fv (<em class="parameter"><code><a class="link" href="GstGLShader.html" title="GstGLShader"><span class="type">GstGLShader</span></a> *shader</code></em>,
+                                      <em class="parameter"><code>const <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *name</code></em>,
+                                      <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a> count</code></em>,
+                                      <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> transpose</code></em>,
+                                      <em class="parameter"><code>const <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gfloat"><span class="type">gfloat</span></a> *value</code></em>);</pre>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-gl-shader-set-uniform-matrix-2x3fv"></a><h3>gst_gl_shader_set_uniform_matrix_2x3fv ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+gst_gl_shader_set_uniform_matrix_2x3fv
+                               (<em class="parameter"><code><a class="link" href="GstGLShader.html" title="GstGLShader"><span class="type">GstGLShader</span></a> *shader</code></em>,
+                                <em class="parameter"><code>const <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *name</code></em>,
+                                <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a> count</code></em>,
+                                <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> transpose</code></em>,
+                                <em class="parameter"><code>const <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gfloat"><span class="type">gfloat</span></a> *value</code></em>);</pre>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-gl-shader-set-uniform-matrix-2x4fv"></a><h3>gst_gl_shader_set_uniform_matrix_2x4fv ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+gst_gl_shader_set_uniform_matrix_2x4fv
+                               (<em class="parameter"><code><a class="link" href="GstGLShader.html" title="GstGLShader"><span class="type">GstGLShader</span></a> *shader</code></em>,
+                                <em class="parameter"><code>const <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *name</code></em>,
+                                <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a> count</code></em>,
+                                <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> transpose</code></em>,
+                                <em class="parameter"><code>const <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gfloat"><span class="type">gfloat</span></a> *value</code></em>);</pre>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-gl-shader-set-uniform-matrix-3fv"></a><h3>gst_gl_shader_set_uniform_matrix_3fv ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+gst_gl_shader_set_uniform_matrix_3fv (<em class="parameter"><code><a class="link" href="GstGLShader.html" title="GstGLShader"><span class="type">GstGLShader</span></a> *shader</code></em>,
+                                      <em class="parameter"><code>const <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *name</code></em>,
+                                      <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a> count</code></em>,
+                                      <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> transpose</code></em>,
+                                      <em class="parameter"><code>const <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gfloat"><span class="type">gfloat</span></a> *value</code></em>);</pre>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-gl-shader-set-uniform-matrix-3x2fv"></a><h3>gst_gl_shader_set_uniform_matrix_3x2fv ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+gst_gl_shader_set_uniform_matrix_3x2fv
+                               (<em class="parameter"><code><a class="link" href="GstGLShader.html" title="GstGLShader"><span class="type">GstGLShader</span></a> *shader</code></em>,
+                                <em class="parameter"><code>const <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *name</code></em>,
+                                <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a> count</code></em>,
+                                <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> transpose</code></em>,
+                                <em class="parameter"><code>const <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gfloat"><span class="type">gfloat</span></a> *value</code></em>);</pre>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-gl-shader-set-uniform-matrix-3x4fv"></a><h3>gst_gl_shader_set_uniform_matrix_3x4fv ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+gst_gl_shader_set_uniform_matrix_3x4fv
+                               (<em class="parameter"><code><a class="link" href="GstGLShader.html" title="GstGLShader"><span class="type">GstGLShader</span></a> *shader</code></em>,
+                                <em class="parameter"><code>const <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *name</code></em>,
+                                <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a> count</code></em>,
+                                <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> transpose</code></em>,
+                                <em class="parameter"><code>const <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gfloat"><span class="type">gfloat</span></a> *value</code></em>);</pre>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-gl-shader-set-uniform-matrix-4fv"></a><h3>gst_gl_shader_set_uniform_matrix_4fv ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+gst_gl_shader_set_uniform_matrix_4fv (<em class="parameter"><code><a class="link" href="GstGLShader.html" title="GstGLShader"><span class="type">GstGLShader</span></a> *shader</code></em>,
+                                      <em class="parameter"><code>const <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *name</code></em>,
+                                      <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a> count</code></em>,
+                                      <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> transpose</code></em>,
+                                      <em class="parameter"><code>const <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gfloat"><span class="type">gfloat</span></a> *value</code></em>);</pre>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-gl-shader-set-uniform-matrix-4x2fv"></a><h3>gst_gl_shader_set_uniform_matrix_4x2fv ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+gst_gl_shader_set_uniform_matrix_4x2fv
+                               (<em class="parameter"><code><a class="link" href="GstGLShader.html" title="GstGLShader"><span class="type">GstGLShader</span></a> *shader</code></em>,
+                                <em class="parameter"><code>const <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *name</code></em>,
+                                <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a> count</code></em>,
+                                <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> transpose</code></em>,
+                                <em class="parameter"><code>const <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gfloat"><span class="type">gfloat</span></a> *value</code></em>);</pre>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-gl-shader-set-uniform-matrix-4x3fv"></a><h3>gst_gl_shader_set_uniform_matrix_4x3fv ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+gst_gl_shader_set_uniform_matrix_4x3fv
+                               (<em class="parameter"><code><a class="link" href="GstGLShader.html" title="GstGLShader"><span class="type">GstGLShader</span></a> *shader</code></em>,
+                                <em class="parameter"><code>const <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *name</code></em>,
+                                <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a> count</code></em>,
+                                <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> transpose</code></em>,
+                                <em class="parameter"><code>const <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gfloat"><span class="type">gfloat</span></a> *value</code></em>);</pre>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-gl-shader-get-attribute-location"></a><h3>gst_gl_shader_get_attribute_location ()</h3>
+<pre class="programlisting"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gint"><span class="returnvalue">gint</span></a>
+gst_gl_shader_get_attribute_location (<em class="parameter"><code><a class="link" href="GstGLShader.html" title="GstGLShader"><span class="type">GstGLShader</span></a> *shader</code></em>,
+                                      <em class="parameter"><code>const <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *name</code></em>);</pre>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-gl-shader-bind-attribute-location"></a><h3>gst_gl_shader_bind_attribute_location ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+gst_gl_shader_bind_attribute_location (<em class="parameter"><code><a class="link" href="GstGLShader.html" title="GstGLShader"><span class="type">GstGLShader</span></a> *shader</code></em>,
+                                       <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> index</code></em>,
+                                       <em class="parameter"><code>const <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *name</code></em>);</pre>
+</div>
+</div>
+<div class="refsect1">
+<a name="GstGLShader.other_details"></a><h2>Types and Values</h2>
+<div class="refsect2">
+<a name="GstGLShader-struct"></a><h3>GstGLShader</h3>
+<pre class="programlisting">typedef struct _GstGLShader GstGLShader;</pre>
+</div>
+</div>
+<div class="refsect1">
+<a name="GstGLShader.property-details"></a><h2>Property Details</h2>
+<div class="refsect2">
+<a name="GstGLShader--linked"></a><h3>The <code class="literal">“linked”</code> property</h3>
+<pre class="programlisting">  “linked”                   <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a></pre>
+<p>Shader link status.</p>
+<p>Flags: Read</p>
+<p>Default value: FALSE</p>
+</div>
+</div>
+<div class="refsect1">
+<a name="GstGLShader.see-also"></a><h2>See Also</h2>
+<p><a class="link" href=".html#GstGLSLStage"><span class="type">GstGLSLStage</span></a></p>
+</div>
+</div>
+<div class="footer">
+<hr>Generated by GTK-Doc V1.24</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/libs/html/GstGLUpload.html b/docs/libs/html/GstGLUpload.html
index 4700a58..3b15883 100644
--- a/docs/libs/html/GstGLUpload.html
+++ b/docs/libs/html/GstGLUpload.html
@@ -3,11 +3,11 @@
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>GstGLUpload: GStreamer Bad Plugins 1.0 Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
 <link rel="home" href="index.html" title="GStreamer Bad Plugins 1.0 Library Reference Manual">
 <link rel="up" href="gl.html" title="OpenGL Helper Library">
 <link rel="prev" href="gst-plugins-bad-libs-GstGLSyncMeta.html" title="GstGLSyncMeta">
-<link rel="next" href="GstGLUploadMeta.html" title="GstGLUploadMeta">
+<link rel="next" href="GstGLWindow.html" title="GstGLWindow">
 <meta name="generator" content="GTK-Doc V1.24 (XML mode)">
 <link rel="stylesheet" href="style.css" type="text/css">
 </head>
@@ -21,7 +21,7 @@
 <td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
 <td><a accesskey="u" href="gl.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
 <td><a accesskey="p" href="gst-plugins-bad-libs-GstGLSyncMeta.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
-<td><a accesskey="n" href="GstGLUploadMeta.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
+<td><a accesskey="n" href="GstGLWindow.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
 </tr></table>
 <div class="refentry">
 <a name="GstGLUpload"></a><div class="titlepage"></div>
@@ -34,7 +34,7 @@
 </tr></table></div>
 <div class="refsect1">
 <a name="GstGLUpload.functions"></a><h2>Functions</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="functions_return">
 <col class="functions_name">
@@ -90,10 +90,10 @@
 </tr>
 <tr>
 <td class="function_type">
-<span class="returnvalue">void</span>
+<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstCaps.html"><span class="returnvalue">GstCaps</span></a> *
 </td>
 <td class="function_name">
-<a class="link" href="GstGLUpload.html#gst-gl-upload-release-buffer" title="gst_gl_upload_release_buffer ()">gst_gl_upload_release_buffer</a> <span class="c_punctuation">()</span>
+<a class="link" href="GstGLUpload.html#gst-gl-upload-get-input-template-caps" title="gst_gl_upload_get_input_template_caps ()">gst_gl_upload_get_input_template_caps</a> <span class="c_punctuation">()</span>
 </td>
 </tr>
 </tbody>
@@ -101,7 +101,7 @@
 </div>
 <div class="refsect1">
 <a name="GstGLUpload.other"></a><h2>Types and Values</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="name">
 <col class="description">
@@ -132,8 +132,8 @@
 <pre class="programlisting"><a class="link" href="GstGLUpload.html" title="GstGLUpload"><span class="returnvalue">GstGLUpload</span></a> *
 gst_gl_upload_new (<em class="parameter"><code><a class="link" href="GstGLContext.html" title="GstGLContext"><span class="type">GstGLContext</span></a> *context</code></em>);</pre>
 <div class="refsect3">
-<a name="id-1.2.9.20.7.2.4"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="id-1.2.9.24.7.2.4"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
 <col class="parameters_description">
@@ -147,7 +147,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.9.20.7.2.5"></a><h4>Returns</h4>
+<a name="id-1.2.9.24.7.2.5"></a><h4>Returns</h4>
 <p> a new <a class="link" href="GstGLUpload.html" title="GstGLUpload"><span class="type">GstGLUpload</span></a> object</p>
 </div>
 </div>
@@ -159,8 +159,8 @@
                         <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstCaps.html"><span class="type">GstCaps</span></a> **in_caps</code></em>,
                         <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstCaps.html"><span class="type">GstCaps</span></a> **out_caps</code></em>);</pre>
 <div class="refsect3">
-<a name="id-1.2.9.20.7.3.4"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="id-1.2.9.24.7.3.4"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
 <col class="parameters_description">
@@ -186,7 +186,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.9.20.7.3.5"></a><h4>Returns</h4>
+<a name="id-1.2.9.24.7.3.5"></a><h4>Returns</h4>
 <p> The <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstCaps.html"><span class="type">GstCaps</span></a> set by <a class="link" href="GstGLUpload.html#gst-gl-upload-set-caps" title="gst_gl_upload_set_caps ()"><code class="function">gst_gl_upload_set_caps()</code></a>. </p>
 <p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></p>
 </div>
@@ -201,8 +201,8 @@
 <p>Initializes <em class="parameter"><code>upload</code></em>
  with the information required for upload.</p>
 <div class="refsect3">
-<a name="id-1.2.9.20.7.4.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="id-1.2.9.24.7.4.5"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
 <col class="parameters_description">
@@ -228,7 +228,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.9.20.7.4.6"></a><h4>Returns</h4>
+<a name="id-1.2.9.24.7.4.6"></a><h4>Returns</h4>
 <p> whether <em class="parameter"><code>in_caps</code></em>
 and <em class="parameter"><code>out_caps</code></em>
 could be set on <em class="parameter"><code>upload</code></em>
@@ -244,8 +244,8 @@
                                   <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstQuery.html"><span class="type">GstQuery</span></a> *query</code></em>);</pre>
 <p>Adds the required allocation parameters to support uploading.</p>
 <div class="refsect3">
-<a name="id-1.2.9.20.7.5.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="id-1.2.9.24.7.5.5"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
 <col class="parameters_description">
@@ -286,15 +286,14 @@
 <pre class="programlisting"><span class="returnvalue">GstGLUploadReturn</span>
 gst_gl_upload_perform_with_buffer (<em class="parameter"><code><a class="link" href="GstGLUpload.html" title="GstGLUpload"><span class="type">GstGLUpload</span></a> *upload</code></em>,
                                    <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstBuffer.html"><span class="type">GstBuffer</span></a> *buffer</code></em>,
-                                   <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstBuffer.html"><span class="type">GstBuffer</span></a> **outbuf</code></em>);</pre>
+                                   <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstBuffer.html"><span class="type">GstBuffer</span></a> **outbuf_ptr</code></em>);</pre>
 <p>Uploads <em class="parameter"><code>buffer</code></em>
- to the texture given by <em class="parameter"><code>tex_id</code></em>
-.  <em class="parameter"><code>tex_id</code></em>
- is valid
-until <a class="link" href="GstGLUpload.html#gst-gl-upload-release-buffer" title="gst_gl_upload_release_buffer ()"><code class="function">gst_gl_upload_release_buffer()</code></a> is called.</p>
+ using the transformation specified by
+<a class="link" href="GstGLUpload.html#gst-gl-upload-set-caps" title="gst_gl_upload_set_caps ()"><code class="function">gst_gl_upload_set_caps()</code></a> creating a new <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstBuffer.html"><span class="type">GstBuffer</span></a> in <em class="parameter"><code>outbuf_ptr</code></em>
+.</p>
 <div class="refsect3">
-<a name="id-1.2.9.20.7.7.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="id-1.2.9.24.7.7.5"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
 <col class="parameters_description">
@@ -308,44 +307,27 @@
 </tr>
 <tr>
 <td class="parameter_name"><p>buffer</p></td>
-<td class="parameter_description"><p>a <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstBuffer.html"><span class="type">GstBuffer</span></a></p></td>
+<td class="parameter_description"><p>input <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstBuffer.html"><span class="type">GstBuffer</span></a></p></td>
 <td class="parameter_annotations"> </td>
 </tr>
 <tr>
 <td class="parameter_name"><p>outbuf_ptr</p></td>
-<td class="parameter_description"><p> resulting buffer. </p></td>
-<td class="parameter_annotations"><span class="annotation">[<acronym title="NULL is OK, both for passing and for returning."><span class="acronym">allow-none</span></acronym>]</span></td>
+<td class="parameter_description"><p>resulting <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstBuffer.html"><span class="type">GstBuffer</span></a></p></td>
+<td class="parameter_annotations"> </td>
 </tr>
 </tbody>
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.9.20.7.7.6"></a><h4>Returns</h4>
+<a name="id-1.2.9.24.7.7.6"></a><h4>Returns</h4>
 <p> whether the upload was successful</p>
 </div>
 </div>
 <hr>
 <div class="refsect2">
-<a name="gst-gl-upload-release-buffer"></a><h3>gst_gl_upload_release_buffer ()</h3>
-<pre class="programlisting"><span class="returnvalue">void</span>
-gst_gl_upload_release_buffer (<em class="parameter"><code><a class="link" href="GstGLUpload.html" title="GstGLUpload"><span class="type">GstGLUpload</span></a> *upload</code></em>);</pre>
-<p>Releases any buffers currently referenced by <em class="parameter"><code>upload</code></em>
-</p>
-<div class="refsect3">
-<a name="id-1.2.9.20.7.8.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
-<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
-</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>upload</p></td>
-<td class="parameter_description"><p>a <a class="link" href="GstGLUpload.html" title="GstGLUpload"><span class="type">GstGLUpload</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
-</table></div>
-</div>
+<a name="gst-gl-upload-get-input-template-caps"></a><h3>gst_gl_upload_get_input_template_caps ()</h3>
+<pre class="programlisting"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstCaps.html"><span class="returnvalue">GstCaps</span></a> *
+gst_gl_upload_get_input_template_caps (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
 </div>
 </div>
 <div class="refsect1">
@@ -358,7 +340,7 @@
 </div>
 <div class="refsect1">
 <a name="GstGLUpload.see-also"></a><h2>See Also</h2>
-<p><a class="link" href="GstGLDownload.html" title="GstGLDownload"><span class="type">GstGLDownload</span></a>, <a class="link" href="gst-plugins-bad-libs-gstglmemory.html#GstGLMemory" title="GstGLMemory"><span class="type">GstGLMemory</span></a></p>
+<p><span class="type">GstGLDownload</span>, <a class="link" href="gst-plugins-bad-libs-GstGLMemory.html#GstGLMemory" title="GstGLMemory"><span class="type">GstGLMemory</span></a></p>
 </div>
 </div>
 <div class="footer">
diff --git a/docs/libs/html/GstGLUploadMeta.html b/docs/libs/html/GstGLUploadMeta.html
deleted file mode 100644
index b412b10..0000000
--- a/docs/libs/html/GstGLUploadMeta.html
+++ /dev/null
@@ -1,241 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html>
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>GstGLUploadMeta: GStreamer Bad Plugins 1.0 Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
-<link rel="home" href="index.html" title="GStreamer Bad Plugins 1.0 Library Reference Manual">
-<link rel="up" href="gl.html" title="OpenGL Helper Library">
-<link rel="prev" href="GstGLUpload.html" title="GstGLUpload">
-<link rel="next" href="gst-plugins-bad-libs-Utilities.html" title="Utilities">
-<meta name="generator" content="GTK-Doc V1.24 (XML mode)">
-<link rel="stylesheet" href="style.css" type="text/css">
-</head>
-<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
-<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="5"><tr valign="middle">
-<td width="100%" align="left" class="shortcuts">
-<a href="#" class="shortcut">Top</a><span id="nav_description">  <span class="dim">|</span> 
-                  <a href="#GstGLUploadMeta.description" class="shortcut">Description</a></span><span id="nav_hierarchy">  <span class="dim">|</span> 
-                  <a href="#GstGLUploadMeta.object-hierarchy" class="shortcut">Object Hierarchy</a></span>
-</td>
-<td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
-<td><a accesskey="u" href="gl.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
-<td><a accesskey="p" href="GstGLUpload.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
-<td><a accesskey="n" href="gst-plugins-bad-libs-Utilities.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
-</tr></table>
-<div class="refentry">
-<a name="GstGLUploadMeta"></a><div class="titlepage"></div>
-<div class="refnamediv"><table width="100%"><tr>
-<td valign="top">
-<h2><span class="refentrytitle"><a name="GstGLUploadMeta.top_of_page"></a>GstGLUploadMeta</span></h2>
-<p>GstGLUploadMeta — an object that provides <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base-libs/html/gst-plugins-base-libs-gstvideometa.html#GstVideoGLTextureUploadMeta"><span class="type">GstVideoGLTextureUploadMeta</span></a></p>
-</td>
-<td class="gallery_image" valign="top" align="right"></td>
-</tr></table></div>
-<div class="refsect1">
-<a name="GstGLUploadMeta.functions"></a><h2>Functions</h2>
-<div class="informaltable"><table width="100%" border="0">
-<colgroup>
-<col width="150px" class="functions_return">
-<col class="functions_name">
-</colgroup>
-<tbody>
-<tr>
-<td class="function_type">
-<a class="link" href="GstGLUploadMeta.html" title="GstGLUploadMeta"><span class="returnvalue">GstGLUploadMeta</span></a> *
-</td>
-<td class="function_name">
-<a class="link" href="GstGLUploadMeta.html#gst-gl-upload-meta-new" title="gst_gl_upload_meta_new ()">gst_gl_upload_meta_new</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<span class="returnvalue">void</span>
-</td>
-<td class="function_name">
-<a class="link" href="GstGLUploadMeta.html#gst-gl-upload-meta-set-format" title="gst_gl_upload_meta_set_format ()">gst_gl_upload_meta_set_format</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base-libs/html/gst-plugins-base-libs-gstvideo.html#GstVideoInfo"><span class="returnvalue">GstVideoInfo</span></a> *
-</td>
-<td class="function_name">
-<a class="link" href="GstGLUploadMeta.html#gst-gl-upload-meta-get-format" title="gst_gl_upload_meta_get_format ()">gst_gl_upload_meta_get_format</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="GstGLUploadMeta.html#gst-gl-upload-meta-add-to-buffer" title="gst_gl_upload_meta_add_to_buffer ()">gst_gl_upload_meta_add_to_buffer</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-</tbody>
-</table></div>
-</div>
-<div class="refsect1">
-<a name="GstGLUploadMeta.other"></a><h2>Types and Values</h2>
-<div class="informaltable"><table width="100%" border="0">
-<colgroup>
-<col width="150px" class="name">
-<col class="description">
-</colgroup>
-<tbody><tr>
-<td class="datatype_keyword"> </td>
-<td class="function_name"><a class="link" href="GstGLUploadMeta.html#GstGLUploadMeta-struct" title="GstGLUploadMeta">GstGLUploadMeta</a></td>
-</tr></tbody>
-</table></div>
-</div>
-<div class="refsect1">
-<a name="GstGLUploadMeta.object-hierarchy"></a><h2>Object Hierarchy</h2>
-<pre class="screen">    <a href="https://developer.gnome.org/gobject/unstable/gobject-The-Base-Object-Type.html#GObject">GObject</a>
-    <span class="lineart">╰──</span> <a href="https://developer.gnome.org/gobject/unstable/gobject-The-Base-Object-Type.html#GInitiallyUnowned">GInitiallyUnowned</a>
-        <span class="lineart">╰──</span> <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstObject.html">GstObject</a>
-            <span class="lineart">╰──</span> GstGLUploadMeta
-</pre>
-</div>
-<div class="refsect1">
-<a name="GstGLUploadMeta.description"></a><h2>Description</h2>
-<p><a class="link" href="GstGLUploadMeta.html" title="GstGLUploadMeta"><span class="type">GstGLUploadMeta</span></a> is an object that uploads data from system memory into GL textures.</p>
-<p>A <a class="link" href="GstGLUpload.html" title="GstGLUpload"><span class="type">GstGLUpload</span></a> can be created with <a class="link" href="GstGLUpload.html#gst-gl-upload-new" title="gst_gl_upload_new ()"><code class="function">gst_gl_upload_new()</code></a></p>
-</div>
-<div class="refsect1">
-<a name="GstGLUploadMeta.functions_details"></a><h2>Functions</h2>
-<div class="refsect2">
-<a name="gst-gl-upload-meta-new"></a><h3>gst_gl_upload_meta_new ()</h3>
-<pre class="programlisting"><a class="link" href="GstGLUploadMeta.html" title="GstGLUploadMeta"><span class="returnvalue">GstGLUploadMeta</span></a> *
-gst_gl_upload_meta_new (<em class="parameter"><code><a class="link" href="GstGLContext.html" title="GstGLContext"><span class="type">GstGLContext</span></a> *context</code></em>);</pre>
-<div class="refsect3">
-<a name="id-1.2.9.21.7.2.4"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
-<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
-</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>context</p></td>
-<td class="parameter_description"><p>a <a class="link" href="GstGLContext.html" title="GstGLContext"><span class="type">GstGLContext</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
-</table></div>
-</div>
-<div class="refsect3">
-<a name="id-1.2.9.21.7.2.5"></a><h4>Returns</h4>
-<p> a new <a class="link" href="GstGLUploadMeta.html" title="GstGLUploadMeta"><span class="type">GstGLUploadMeta</span></a> object</p>
-</div>
-</div>
-<hr>
-<div class="refsect2">
-<a name="gst-gl-upload-meta-set-format"></a><h3>gst_gl_upload_meta_set_format ()</h3>
-<pre class="programlisting"><span class="returnvalue">void</span>
-gst_gl_upload_meta_set_format (<em class="parameter"><code><a class="link" href="GstGLUploadMeta.html" title="GstGLUploadMeta"><span class="type">GstGLUploadMeta</span></a> *upload</code></em>,
-                               <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base-libs/html/gst-plugins-base-libs-gstvideo.html#GstVideoInfo"><span class="type">GstVideoInfo</span></a> *info</code></em>);</pre>
-<p>Initializes <em class="parameter"><code>upload</code></em>
- with the information required for upload.</p>
-<div class="refsect3">
-<a name="id-1.2.9.21.7.3.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
-<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
-</colgroup>
-<tbody>
-<tr>
-<td class="parameter_name"><p>upload</p></td>
-<td class="parameter_description"><p>a <a class="link" href="GstGLUpload.html" title="GstGLUpload"><span class="type">GstGLUpload</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr>
-<tr>
-<td class="parameter_name"><p>info</p></td>
-<td class="parameter_description"><p>input <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base-libs/html/gst-plugins-base-libs-gstvideo.html#GstVideoInfo"><span class="type">GstVideoInfo</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr>
-</tbody>
-</table></div>
-</div>
-</div>
-<hr>
-<div class="refsect2">
-<a name="gst-gl-upload-meta-get-format"></a><h3>gst_gl_upload_meta_get_format ()</h3>
-<pre class="programlisting"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base-libs/html/gst-plugins-base-libs-gstvideo.html#GstVideoInfo"><span class="returnvalue">GstVideoInfo</span></a> *
-gst_gl_upload_meta_get_format (<em class="parameter"><code><a class="link" href="GstGLUploadMeta.html" title="GstGLUploadMeta"><span class="type">GstGLUploadMeta</span></a> *upload</code></em>);</pre>
-<div class="refsect3">
-<a name="id-1.2.9.21.7.4.4"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
-<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
-</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>upload</p></td>
-<td class="parameter_description"><p>a <a class="link" href="GstGLUpload.html" title="GstGLUpload"><span class="type">GstGLUpload</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
-</table></div>
-</div>
-<div class="refsect3">
-<a name="id-1.2.9.21.7.4.5"></a><h4>Returns</h4>
-<p> The <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base-libs/html/gst-plugins-base-libs-gstvideo.html#GstVideoInfo"><span class="type">GstVideoInfo</span></a> set by
-<a class="link" href="GstGLUploadMeta.html#gst-gl-upload-meta-set-format" title="gst_gl_upload_meta_set_format ()"><code class="function">gst_gl_upload_meta_set_format()</code></a>. </p>
-<p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></p>
-</div>
-</div>
-<hr>
-<div class="refsect2">
-<a name="gst-gl-upload-meta-add-to-buffer"></a><h3>gst_gl_upload_meta_add_to_buffer ()</h3>
-<pre class="programlisting"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-gst_gl_upload_meta_add_to_buffer (<em class="parameter"><code><a class="link" href="GstGLUploadMeta.html" title="GstGLUploadMeta"><span class="type">GstGLUploadMeta</span></a> *upload</code></em>,
-                                  <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstBuffer.html"><span class="type">GstBuffer</span></a> *buffer</code></em>);</pre>
-<p>Adds a <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base-libs/html/gst-plugins-base-libs-gstvideometa.html#GstVideoGLTextureUploadMeta"><span class="type">GstVideoGLTextureUploadMeta</span></a> on <em class="parameter"><code>buffer</code></em>
- using <em class="parameter"><code>upload</code></em>
-</p>
-<div class="refsect3">
-<a name="id-1.2.9.21.7.5.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
-<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
-</colgroup>
-<tbody>
-<tr>
-<td class="parameter_name"><p>upload</p></td>
-<td class="parameter_description"><p>a <a class="link" href="GstGLUploadMeta.html" title="GstGLUploadMeta"><span class="type">GstGLUploadMeta</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr>
-<tr>
-<td class="parameter_name"><p>buffer</p></td>
-<td class="parameter_description"><p>a <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstBuffer.html"><span class="type">GstBuffer</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr>
-</tbody>
-</table></div>
-</div>
-<div class="refsect3">
-<a name="id-1.2.9.21.7.5.6"></a><h4>Returns</h4>
-<p> whether it was successful</p>
-</div>
-</div>
-</div>
-<div class="refsect1">
-<a name="GstGLUploadMeta.other_details"></a><h2>Types and Values</h2>
-<div class="refsect2">
-<a name="GstGLUploadMeta-struct"></a><h3>GstGLUploadMeta</h3>
-<pre class="programlisting">typedef struct _GstGLUploadMeta GstGLUploadMeta;</pre>
-<p>Opaque <a class="link" href="GstGLUploadMeta.html" title="GstGLUploadMeta"><span class="type">GstGLUploadMeta</span></a> object</p>
-</div>
-</div>
-<div class="refsect1">
-<a name="GstGLUploadMeta.see-also"></a><h2>See Also</h2>
-<p><a class="link" href="GstGLUpload.html" title="GstGLUpload"><span class="type">GstGLUpload</span></a>, <a class="link" href="gst-plugins-bad-libs-gstglmemory.html#GstGLMemory" title="GstGLMemory"><span class="type">GstGLMemory</span></a></p>
-</div>
-</div>
-<div class="footer">
-<hr>Generated by GTK-Doc V1.24</div>
-</body>
-</html>
\ No newline at end of file
diff --git a/docs/libs/html/GstGLWindow.html b/docs/libs/html/GstGLWindow.html
index 565211e..24eb4b2 100644
--- a/docs/libs/html/GstGLWindow.html
+++ b/docs/libs/html/GstGLWindow.html
@@ -3,10 +3,10 @@
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>GstGLWindow: GStreamer Bad Plugins 1.0 Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
 <link rel="home" href="index.html" title="GStreamer Bad Plugins 1.0 Library Reference Manual">
 <link rel="up" href="gl.html" title="OpenGL Helper Library">
-<link rel="prev" href="gst-plugins-bad-libs-Utilities.html" title="Utilities">
+<link rel="prev" href="GstGLUpload.html" title="GstGLUpload">
 <link rel="next" href="gst-plugins-bad-libs-GstGLWindowAndroid.html" title="GstGLWindowAndroid">
 <meta name="generator" content="GTK-Doc V1.24 (XML mode)">
 <link rel="stylesheet" href="style.css" type="text/css">
@@ -21,7 +21,7 @@
 </td>
 <td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
 <td><a accesskey="u" href="gl.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
-<td><a accesskey="p" href="gst-plugins-bad-libs-Utilities.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
+<td><a accesskey="p" href="GstGLUpload.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
 <td><a accesskey="n" href="gst-plugins-bad-libs-GstGLWindowAndroid.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
 </tr></table>
 <div class="refentry">
@@ -35,7 +35,7 @@
 </tr></table></div>
 <div class="refsect1">
 <a name="GstGLWindow.functions"></a><h2>Functions</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="functions_return">
 <col class="functions_name">
@@ -99,14 +99,6 @@
 </tr>
 <tr>
 <td class="function_type">
-<span class="returnvalue">void</span>
-</td>
-<td class="function_name">
-<a class="link" href="GstGLWindow.html#gst-gl-window-draw-unlocked" title="gst_gl_window_draw_unlocked ()">gst_gl_window_draw_unlocked</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
 <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
 </td>
 <td class="function_name">
@@ -238,7 +230,7 @@
 </div>
 <div class="refsect1">
 <a name="GstGLWindow.signals"></a><h2>Signals</h2>
-<div class="informaltable"><table border="0">
+<div class="informaltable"><table class="informaltable" border="0">
 <colgroup>
 <col width="150px" class="signals_return">
 <col width="300px" class="signals_name">
@@ -260,7 +252,7 @@
 </div>
 <div class="refsect1">
 <a name="GstGLWindow.other"></a><h2>Types and Values</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="name">
 <col class="description">
@@ -339,8 +331,8 @@
 <pre class="programlisting"><a class="link" href="GstGLWindow.html" title="GstGLWindow"><span class="returnvalue">GstGLWindow</span></a> *
 gst_gl_window_new (<em class="parameter"><code><a class="link" href="GstGLDisplay.html" title="GstGLDisplay"><span class="type">GstGLDisplay</span></a> *display</code></em>);</pre>
 <div class="refsect3">
-<a name="id-1.2.9.23.8.8.4"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="id-1.2.9.25.8.8.4"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
 <col class="parameters_description">
@@ -354,7 +346,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.9.23.8.8.5"></a><h4>Returns</h4>
+<a name="id-1.2.9.25.8.8.5"></a><h4>Returns</h4>
 <p> a new <a class="link" href="GstGLWindow.html" title="GstGLWindow"><span class="type">GstGLWindow</span></a> using <em class="parameter"><code>display</code></em>
 's connection. </p>
 <p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p>
@@ -368,31 +360,8 @@
 gst_gl_window_draw (<em class="parameter"><code><a class="link" href="GstGLWindow.html" title="GstGLWindow"><span class="type">GstGLWindow</span></a> *window</code></em>);</pre>
 <p>Redraw the window contents.  Implementations should invoke the draw callback.</p>
 <div class="refsect3">
-<a name="id-1.2.9.23.8.9.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
-<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
-</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>window</p></td>
-<td class="parameter_description"><p>a <a class="link" href="GstGLWindow.html" title="GstGLWindow"><span class="type">GstGLWindow</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
-</table></div>
-</div>
-<p class="since">Since: 1.4</p>
-</div>
-<hr>
-<div class="refsect2">
-<a name="gst-gl-window-draw-unlocked"></a><h3>gst_gl_window_draw_unlocked ()</h3>
-<pre class="programlisting"><span class="returnvalue">void</span>
-gst_gl_window_draw_unlocked (<em class="parameter"><code><a class="link" href="GstGLWindow.html" title="GstGLWindow"><span class="type">GstGLWindow</span></a> *window</code></em>);</pre>
-<p>Redraw the window contents.  Implementations should invoke the draw callback.</p>
-<div class="refsect3">
-<a name="id-1.2.9.23.8.10.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="id-1.2.9.25.8.9.5"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
 <col class="parameters_description">
@@ -414,8 +383,8 @@
 gst_gl_window_is_running (<em class="parameter"><code><a class="link" href="GstGLWindow.html" title="GstGLWindow"><span class="type">GstGLWindow</span></a> *window</code></em>);</pre>
 <p>Whether the runloop is running</p>
 <div class="refsect3">
-<a name="id-1.2.9.23.8.11.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="id-1.2.9.25.8.10.5"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
 <col class="parameters_description">
@@ -437,8 +406,8 @@
 gst_gl_window_quit (<em class="parameter"><code><a class="link" href="GstGLWindow.html" title="GstGLWindow"><span class="type">GstGLWindow</span></a> *window</code></em>);</pre>
 <p>Quit the runloop's execution.</p>
 <div class="refsect3">
-<a name="id-1.2.9.23.8.12.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="id-1.2.9.25.8.11.5"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
 <col class="parameters_description">
@@ -460,8 +429,8 @@
 gst_gl_window_run (<em class="parameter"><code><a class="link" href="GstGLWindow.html" title="GstGLWindow"><span class="type">GstGLWindow</span></a> *window</code></em>);</pre>
 <p>Start the execution of the runloop.</p>
 <div class="refsect3">
-<a name="id-1.2.9.23.8.13.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="id-1.2.9.25.8.12.5"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
 <col class="parameters_description">
@@ -482,8 +451,8 @@
 <pre class="programlisting"><a class="link" href="GstGLContext.html" title="GstGLContext"><span class="returnvalue">GstGLContext</span></a> *
 gst_gl_window_get_context (<em class="parameter"><code><a class="link" href="GstGLWindow.html" title="GstGLWindow"><span class="type">GstGLWindow</span></a> *window</code></em>);</pre>
 <div class="refsect3">
-<a name="id-1.2.9.23.8.14.4"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="id-1.2.9.25.8.13.4"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
 <col class="parameters_description">
@@ -497,7 +466,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.9.23.8.14.5"></a><h4>Returns</h4>
+<a name="id-1.2.9.25.8.13.5"></a><h4>Returns</h4>
 <p> the <a class="link" href="GstGLContext.html" title="GstGLContext"><span class="type">GstGLContext</span></a> associated with this <em class="parameter"><code>window</code></em>
 . </p>
 <p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p>
@@ -510,8 +479,8 @@
 <pre class="programlisting"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#guintptr"><span class="returnvalue">guintptr</span></a>
 gst_gl_window_get_display (<em class="parameter"><code><a class="link" href="GstGLWindow.html" title="GstGLWindow"><span class="type">GstGLWindow</span></a> *window</code></em>);</pre>
 <div class="refsect3">
-<a name="id-1.2.9.23.8.15.4"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="id-1.2.9.25.8.14.4"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
 <col class="parameters_description">
@@ -525,7 +494,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.9.23.8.15.5"></a><h4>Returns</h4>
+<a name="id-1.2.9.25.8.14.5"></a><h4>Returns</h4>
 <p> the windowing system display handle for this <em class="parameter"><code>window</code></em>
 </p>
 </div>
@@ -543,8 +512,8 @@
  is guarenteed to
 have executed when this function returns.</p>
 <div class="refsect3">
-<a name="id-1.2.9.23.8.16.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="id-1.2.9.25.8.15.5"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
 <col class="parameters_description">
@@ -585,8 +554,8 @@
  on the window thread.  The callback may not
 have been executed when this function returns.</p>
 <div class="refsect3">
-<a name="id-1.2.9.23.8.17.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="id-1.2.9.25.8.16.5"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
 <col class="parameters_description">
@@ -630,8 +599,8 @@
                                   <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Datasets.html#GDestroyNotify"><span class="type">GDestroyNotify</span></a> destroy_notify</code></em>);</pre>
 <p>Sets the callback called when the window is about to close.</p>
 <div class="refsect3">
-<a name="id-1.2.9.23.8.18.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="id-1.2.9.25.8.17.5"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
 <col class="parameters_description">
@@ -675,8 +644,8 @@
                                  <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Datasets.html#GDestroyNotify"><span class="type">GDestroyNotify</span></a> destroy_notify</code></em>);</pre>
 <p>Sets the draw callback called everytime <a class="link" href="GstGLWindow.html#gst-gl-window-draw" title="gst_gl_window_draw ()"><code class="function">gst_gl_window_draw()</code></a> is called</p>
 <div class="refsect3">
-<a name="id-1.2.9.23.8.19.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="id-1.2.9.25.8.18.5"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
 <col class="parameters_description">
@@ -720,8 +689,8 @@
                                    <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Datasets.html#GDestroyNotify"><span class="type">GDestroyNotify</span></a> destroy_notify</code></em>);</pre>
 <p>Sets the resize callback called everytime a resize of the window occurs.</p>
 <div class="refsect3">
-<a name="id-1.2.9.23.8.20.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="id-1.2.9.25.8.19.5"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
 <col class="parameters_description">
@@ -765,8 +734,8 @@
  should render into.  Some implementations
 require this to be called with a valid handle before drawing can commence.</p>
 <div class="refsect3">
-<a name="id-1.2.9.23.8.21.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="id-1.2.9.25.8.20.5"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
 <col class="parameters_description">
@@ -794,8 +763,8 @@
 <pre class="programlisting"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#guintptr"><span class="returnvalue">guintptr</span></a>
 gst_gl_window_get_window_handle (<em class="parameter"><code><a class="link" href="GstGLWindow.html" title="GstGLWindow"><span class="type">GstGLWindow</span></a> *window</code></em>);</pre>
 <div class="refsect3">
-<a name="id-1.2.9.23.8.22.4"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="id-1.2.9.25.8.21.4"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
 <col class="parameters_description">
@@ -809,7 +778,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.9.23.8.22.5"></a><h4>Returns</h4>
+<a name="id-1.2.9.25.8.21.5"></a><h4>Returns</h4>
 <p> the window handle we are currently rendering into</p>
 </div>
 <p class="since">Since: 1.4</p>
@@ -824,8 +793,8 @@
 <p>Set the preferred width and height of the window.  Implementations are free
 to ignore this information.</p>
 <div class="refsect3">
-<a name="id-1.2.9.23.8.23.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="id-1.2.9.25.8.22.5"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
 <col class="parameters_description">
@@ -859,8 +828,8 @@
 gst_gl_window_show (<em class="parameter"><code><a class="link" href="GstGLWindow.html" title="GstGLWindow"><span class="type">GstGLWindow</span></a> *window</code></em>);</pre>
 <p>Present the window to the screen.</p>
 <div class="refsect3">
-<a name="id-1.2.9.23.8.24.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="id-1.2.9.25.8.23.5"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
 <col class="parameters_description">
@@ -883,8 +852,8 @@
                                       <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> *width</code></em>,
                                       <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> *height</code></em>);</pre>
 <div class="refsect3">
-<a name="id-1.2.9.23.8.25.4"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="id-1.2.9.25.8.24.4"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
 <col class="parameters_description">
@@ -925,8 +894,8 @@
 from the <em class="parameter"><code>window</code></em>
 .</p>
 <div class="refsect3">
-<a name="id-1.2.9.23.8.26.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="id-1.2.9.25.8.25.5"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
 <col class="parameters_description">
@@ -953,8 +922,8 @@
 <div class="refsect2">
 <a name="GstGLWindowError"></a><h3>enum GstGLWindowError</h3>
 <div class="refsect3">
-<a name="id-1.2.9.23.9.2.3"></a><h4>Members</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="id-1.2.9.25.9.2.3"></a><h4>Members</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="300px" class="enum_members_name">
 <col class="enum_members_description">
@@ -996,7 +965,6 @@
   guintptr (*get_display)        (GstGLWindow *window);
   void     (*set_window_handle)  (GstGLWindow *window, guintptr id);
   guintptr (*get_window_handle)  (GstGLWindow *window);
-  void     (*draw_unlocked)      (GstGLWindow *window);
   void     (*draw)               (GstGLWindow *window);
   void     (*run)                (GstGLWindow *window);
   void     (*quit)               (GstGLWindow *window);
@@ -1013,8 +981,8 @@
 } GstGLWindowClass;
 </pre>
 <div class="refsect3">
-<a name="id-1.2.9.23.9.4.4"></a><h4>Members</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="id-1.2.9.25.9.4.4"></a><h4>Members</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="300px" class="struct_members_name">
 <col class="struct_members_description">
@@ -1043,11 +1011,6 @@
 <td class="struct_member_annotations"> </td>
 </tr>
 <tr>
-<td class="struct_member_name"><p><em class="structfield"><code><a name="GstGLWindowClass.draw-unlocked"></a>draw_unlocked</code></em> ()</p></td>
-<td class="struct_member_description"><p>redraw the window with the specified dimensions</p></td>
-<td class="struct_member_annotations"> </td>
-</tr>
-<tr>
 <td class="struct_member_name"><p><em class="structfield"><code><a name="GstGLWindowClass.draw"></a>draw</code></em> ()</p></td>
 <td class="struct_member_description"><p>redraw the window with the specified dimensions</p></td>
 <td class="struct_member_annotations"> </td>
@@ -1128,8 +1091,8 @@
                <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a>     user_data)</pre>
 <p>Will be emitted when a key event is received by the GstGLwindow.</p>
 <div class="refsect3">
-<a name="id-1.2.9.23.10.2.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="id-1.2.9.25.10.2.5"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
 <col class="parameters_description">
@@ -1174,8 +1137,8 @@
                <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a>     user_data)</pre>
 <p>Will be emitted when a mouse event is received by the GstGLwindow.</p>
 <div class="refsect3">
-<a name="id-1.2.9.23.10.3.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="id-1.2.9.25.10.3.5"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
 <col class="parameters_description">
diff --git a/docs/libs/html/annotation-glossary.html b/docs/libs/html/annotation-glossary.html
index f49fb27..9d8ecbe 100644
--- a/docs/libs/html/annotation-glossary.html
+++ b/docs/libs/html/annotation-glossary.html
@@ -3,7 +3,7 @@
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Annotation Glossary: GStreamer Bad Plugins 1.0 Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
 <link rel="home" href="index.html" title="GStreamer Bad Plugins 1.0 Library Reference Manual">
 <link rel="up" href="index.html" title="GStreamer Bad Plugins 1.0 Library Reference Manual">
 <link rel="prev" href="api-index-deprecated.html" title="Index of deprecated API">
@@ -38,6 +38,8 @@
 <a name="glsA"></a><h3 class="title">A</h3>
 <dt><span class="glossterm"><a name="annotation-glossterm-allow-none"></a>allow-none</span></dt>
 <dd class="glossdef"><p>NULL is OK, both for passing and for returning.</p></dd>
+<dt><span class="glossterm"><a name="annotation-glossterm-array"></a>array</span></dt>
+<dd class="glossdef"><p>Parameter points to an array of items.</p></dd>
 <a name="glsC"></a><h3 class="title">C</h3>
 <dt><span class="glossterm"><a name="annotation-glossterm-closure"></a>closure</span></dt>
 <dd class="glossdef"><p>This parameter is a 'user_data', for callbacks; many bindings can pass NULL here.</p></dd>
diff --git a/docs/libs/html/api-index-deprecated.html b/docs/libs/html/api-index-deprecated.html
index 1bb359a..f4cd866 100644
--- a/docs/libs/html/api-index-deprecated.html
+++ b/docs/libs/html/api-index-deprecated.html
@@ -3,7 +3,7 @@
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Index of deprecated API: GStreamer Bad Plugins 1.0 Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
 <link rel="home" href="index.html" title="GStreamer Bad Plugins 1.0 Library Reference Manual">
 <link rel="up" href="index.html" title="GStreamer Bad Plugins 1.0 Library Reference Manual">
 <link rel="prev" href="api-index-full.html" title="Index">
diff --git a/docs/libs/html/api-index-full.html b/docs/libs/html/api-index-full.html
index e7c13b4..aaf9f01 100644
--- a/docs/libs/html/api-index-full.html
+++ b/docs/libs/html/api-index-full.html
@@ -3,7 +3,7 @@
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Index: GStreamer Bad Plugins 1.0 Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
 <link rel="home" href="index.html" title="GStreamer Bad Plugins 1.0 Library Reference Manual">
 <link rel="up" href="index.html" title="GStreamer Bad Plugins 1.0 Library Reference Manual">
 <link rel="prev" href="gstreamer-libs-hierarchy.html" title="Part II. Object Hierarchy">
@@ -151,6 +151,10 @@
 </dt>
 <dd></dd>
 <dt>
+<a class="link" href="gst-plugins-bad-libs-GstGLSyncMeta.html#gst-buffer-add-gl-sync-meta-full" title="gst_buffer_add_gl_sync_meta_full ()">gst_buffer_add_gl_sync_meta_full</a>, function in <a class="link" href="gst-plugins-bad-libs-GstGLSyncMeta.html" title="GstGLSyncMeta">GstGLSyncMeta</a>
+</dt>
+<dd></dd>
+<dt>
 <a class="link" href="gst-plugins-bad-libs-gstmpegvideometa.html#gst-buffer-add-mpeg-video-meta" title="gst_buffer_add_mpeg_video_meta ()">gst_buffer_add_mpeg_video_meta</a>, function in <a class="link" href="gst-plugins-bad-libs-gstmpegvideometa.html" title="gstmpegvideometa">gstmpegvideometa</a>
 </dt>
 <dd></dd>
@@ -163,9 +167,29 @@
 </dt>
 <dd></dd>
 <dt>
+<a class="link" href="GstGLBufferPool.html#gst-buffer-pool-config-get-gl-allocation-params" title="gst_buffer_pool_config_get_gl_allocation_params ()">gst_buffer_pool_config_get_gl_allocation_params</a>, function in <a class="link" href="GstGLBufferPool.html" title="GstGLBufferPool">GstGLBufferPool</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="GstGLBufferPool.html#gst-buffer-pool-config-set-gl-allocation-params" title="gst_buffer_pool_config_set_gl_allocation_params ()">gst_buffer_pool_config_set_gl_allocation_params</a>, function in <a class="link" href="GstGLBufferPool.html" title="GstGLBufferPool">GstGLBufferPool</a>
+</dt>
+<dd></dd>
+<dt>
 <a class="link" href="gst-plugins-bad-libs-GstGLSyncMeta.html#GST-BUFFER-POOL-OPTION-GL-SYNC-META:CAPS" title="GST_BUFFER_POOL_OPTION_GL_SYNC_META">GST_BUFFER_POOL_OPTION_GL_SYNC_META</a>, macro in <a class="link" href="gst-plugins-bad-libs-GstGLSyncMeta.html" title="GstGLSyncMeta">GstGLSyncMeta</a>
 </dt>
 <dd></dd>
+<dt>
+<a class="link" href="gst-plugins-bad-libs-OpenGL-Formats.html#GST-BUFFER-POOL-OPTION-GL-TEXTURE-TARGET-2D:CAPS" title="GST_BUFFER_POOL_OPTION_GL_TEXTURE_TARGET_2D">GST_BUFFER_POOL_OPTION_GL_TEXTURE_TARGET_2D</a>, macro in <a class="link" href="gst-plugins-bad-libs-OpenGL-Formats.html" title="OpenGL Formats">OpenGL Formats</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-bad-libs-OpenGL-Formats.html#GST-BUFFER-POOL-OPTION-GL-TEXTURE-TARGET-EXTERNAL-OES:CAPS" title="GST_BUFFER_POOL_OPTION_GL_TEXTURE_TARGET_EXTERNAL_OES">GST_BUFFER_POOL_OPTION_GL_TEXTURE_TARGET_EXTERNAL_OES</a>, macro in <a class="link" href="gst-plugins-bad-libs-OpenGL-Formats.html" title="OpenGL Formats">OpenGL Formats</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-bad-libs-OpenGL-Formats.html#GST-BUFFER-POOL-OPTION-GL-TEXTURE-TARGET-RECTANGLE:CAPS" title="GST_BUFFER_POOL_OPTION_GL_TEXTURE_TARGET_RECTANGLE">GST_BUFFER_POOL_OPTION_GL_TEXTURE_TARGET_RECTANGLE</a>, macro in <a class="link" href="gst-plugins-bad-libs-OpenGL-Formats.html" title="OpenGL Formats">OpenGL Formats</a>
+</dt>
+<dd></dd>
 <a name="idxC"></a><h3 class="title">C</h3>
 <dt>
 GstCameraBinMode, enum in gstcamerabin-enum
@@ -196,7 +220,11 @@
 </dt>
 <dd></dd>
 <dt>
-<a class="link" href="gst-plugins-bad-libs-Utilities.html#CDCB:CAPS" title="CDCB ()">CDCB</a>, user_function in <a class="link" href="gst-plugins-bad-libs-Utilities.html" title="Utilities">Utilities</a>
+<a class="link" href="gst-plugins-bad-libs-GstGLBuffer.html#GST-CAPS-FEATURE-MEMORY-GL-BUFFER:CAPS" title="GST_CAPS_FEATURE_MEMORY_GL_BUFFER">GST_CAPS_FEATURE_MEMORY_GL_BUFFER</a>, macro in <a class="link" href="gst-plugins-bad-libs-GstGLBuffer.html" title="GstGLBuffer">GstGLBuffer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-bad-libs-OpenGL-Miscellaneous-Utilities.html#CDCB:CAPS" title="CDCB ()">CDCB</a>, user_function in <a class="link" href="gst-plugins-bad-libs-OpenGL-Miscellaneous-Utilities.html" title="OpenGL Miscellaneous Utilities">OpenGL Miscellaneous Utilities</a>
 </dt>
 <dd></dd>
 <dt>
@@ -271,11 +299,15 @@
 <dd></dd>
 <a name="idxG"></a><h3 class="title">G</h3>
 <dt>
-<a class="link" href="gst-plugins-bad-libs-gstglmemory.html#GstGLAllocator-struct" title="GstGLAllocator">GstGLAllocator</a>, struct in <a class="link" href="gst-plugins-bad-libs-gstglmemory.html" title="GstGLMemory">gstglmemory</a>
+<a class="link" href="gst-plugins-bad-libs-gstglbasememory.html#GstGLAllocationParams" title="struct GstGLAllocationParams">GstGLAllocationParams</a>, struct in <a class="link" href="gst-plugins-bad-libs-gstglbasememory.html" title="GstGLBaseMemory">gstglbasememory</a>
 </dt>
 <dd></dd>
 <dt>
-<a class="link" href="gst-plugins-bad-libs-gstglmemory.html#GstGLAllocatorClass" title="GstGLAllocatorClass">GstGLAllocatorClass</a>, struct in <a class="link" href="gst-plugins-bad-libs-gstglmemory.html" title="GstGLMemory">gstglmemory</a>
+<a class="link" href="gst-plugins-bad-libs-gstglbasememory.html#GstGLAllocationParamsCopyFunc" title="GstGLAllocationParamsCopyFunc ()">GstGLAllocationParamsCopyFunc</a>, user_function in <a class="link" href="gst-plugins-bad-libs-gstglbasememory.html" title="GstGLBaseMemory">gstglbasememory</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-bad-libs-gstglbasememory.html#GstGLAllocationParamsFreeFunc" title="GstGLAllocationParamsFreeFunc ()">GstGLAllocationParamsFreeFunc</a>, user_function in <a class="link" href="gst-plugins-bad-libs-gstglbasememory.html" title="GstGLBaseMemory">gstglbasememory</a>
 </dt>
 <dd></dd>
 <dt>
@@ -283,6 +315,14 @@
 </dt>
 <dd></dd>
 <dt>
+<a class="link" href="gst-plugins-bad-libs-OpenGL-debugging.html#GstGLAsyncDebug" title="struct GstGLAsyncDebug">GstGLAsyncDebug</a>, struct in <a class="link" href="gst-plugins-bad-libs-OpenGL-debugging.html" title="OpenGL debugging">OpenGL Debugging</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-bad-libs-OpenGL-debugging.html#GstGLAsyncDebugLogGetMessage" title="GstGLAsyncDebugLogGetMessage ()">GstGLAsyncDebugLogGetMessage</a>, user_function in <a class="link" href="gst-plugins-bad-libs-OpenGL-debugging.html" title="OpenGL debugging">OpenGL debugging</a>
+</dt>
+<dd></dd>
+<dt>
 <a class="link" href="GstGLBaseFilter.html#GstGLBaseFilter-struct" title="GstGLBaseFilter">GstGLBaseFilter</a>, struct in <a class="link" href="GstGLBaseFilter.html" title="GstGLBaseFilter">GstGLBaseFilter</a>
 </dt>
 <dd></dd>
@@ -295,19 +335,79 @@
 </dt>
 <dd></dd>
 <dt>
-<a class="link" href="GstGLBufferPool.html#GstGLBufferPool-struct" title="struct GstGLBufferPool">GstGLBufferPool</a>, struct in <a class="link" href="GstGLBufferPool.html" title="GstGLBufferPool">GstGLBufferPool</a>
+<a class="link" href="gst-plugins-bad-libs-gstglbasememory.html#GstGLBaseMemory" title="GstGLBaseMemory">GstGLBaseMemory</a>, struct in <a class="link" href="gst-plugins-bad-libs-gstglbasememory.html" title="GstGLBaseMemory">GstGLBaseMemory</a>
 </dt>
 <dd></dd>
 <dt>
-<a class="link" href="GstGLBufferPool.html#GstGLBufferPoolClass" title="struct GstGLBufferPoolClass">GstGLBufferPoolClass</a>, struct in <a class="link" href="GstGLBufferPool.html" title="GstGLBufferPool">GstGLBufferPool</a>
+<a class="link" href="gst-plugins-bad-libs-gstglbasememory.html#GstGLBaseMemoryAllocator-struct" title="GstGLBaseMemoryAllocator">GstGLBaseMemoryAllocator</a>, struct in <a class="link" href="gst-plugins-bad-libs-gstglbasememory.html" title="GstGLBaseMemory">gstglbasememory</a>
 </dt>
 <dd></dd>
 <dt>
-<a class="link" href="gst-plugins-bad-libs-Utilities.html#GLCB:CAPS" title="GLCB ()">GLCB</a>, user_function in <a class="link" href="gst-plugins-bad-libs-Utilities.html" title="Utilities">Utilities</a>
+<a class="link" href="gst-plugins-bad-libs-gstglbasememory.html#GstGLBaseMemoryAllocatorAllocFunction" title="GstGLBaseMemoryAllocatorAllocFunction ()">GstGLBaseMemoryAllocatorAllocFunction</a>, user_function in <a class="link" href="gst-plugins-bad-libs-gstglbasememory.html" title="GstGLBaseMemory">GstGLBaseMemory</a>
 </dt>
 <dd></dd>
 <dt>
-<a class="link" href="gst-plugins-bad-libs-Utilities.html#GLCB-V2:CAPS" title="GLCB_V2 ()">GLCB_V2</a>, user_function in <a class="link" href="gst-plugins-bad-libs-Utilities.html" title="Utilities">Utilities</a>
+<a class="link" href="gst-plugins-bad-libs-gstglbasememory.html#GstGLBaseMemoryAllocatorClass" title="GstGLBaseMemoryAllocatorClass">GstGLBaseMemoryAllocatorClass</a>, struct in <a class="link" href="gst-plugins-bad-libs-gstglbasememory.html" title="GstGLBaseMemory">gstglbasememory</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-bad-libs-gstglbasememory.html#GstGLBaseMemoryAllocatorCopyFunction" title="GstGLBaseMemoryAllocatorCopyFunction ()">GstGLBaseMemoryAllocatorCopyFunction</a>, user_function in <a class="link" href="gst-plugins-bad-libs-gstglbasememory.html" title="GstGLBaseMemory">GstGLBaseMemory</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-bad-libs-gstglbasememory.html#GstGLBaseMemoryAllocatorCreateFunction" title="GstGLBaseMemoryAllocatorCreateFunction ()">GstGLBaseMemoryAllocatorCreateFunction</a>, user_function in <a class="link" href="gst-plugins-bad-libs-gstglbasememory.html" title="GstGLBaseMemory">GstGLBaseMemory</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-bad-libs-gstglbasememory.html#GstGLBaseMemoryAllocatorDestroyFunction" title="GstGLBaseMemoryAllocatorDestroyFunction ()">GstGLBaseMemoryAllocatorDestroyFunction</a>, user_function in <a class="link" href="gst-plugins-bad-libs-gstglbasememory.html" title="GstGLBaseMemory">GstGLBaseMemory</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-bad-libs-gstglbasememory.html#GstGLBaseMemoryAllocatorMapFunction" title="GstGLBaseMemoryAllocatorMapFunction ()">GstGLBaseMemoryAllocatorMapFunction</a>, user_function in <a class="link" href="gst-plugins-bad-libs-gstglbasememory.html" title="GstGLBaseMemory">GstGLBaseMemory</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-bad-libs-gstglbasememory.html#GstGLBaseMemoryAllocatorUnmapFunction" title="GstGLBaseMemoryAllocatorUnmapFunction ()">GstGLBaseMemoryAllocatorUnmapFunction</a>, user_function in <a class="link" href="gst-plugins-bad-libs-gstglbasememory.html" title="GstGLBaseMemory">GstGLBaseMemory</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-bad-libs-gstglbasememory.html#GstGLBaseMemoryError" title="enum GstGLBaseMemoryError">GstGLBaseMemoryError</a>, enum in <a class="link" href="gst-plugins-bad-libs-gstglbasememory.html" title="GstGLBaseMemory">gstglbasememory</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-bad-libs-gstglbasememory.html#GstGLBaseMemoryTransfer" title="enum GstGLBaseMemoryTransfer">GstGLBaseMemoryTransfer</a>, enum in <a class="link" href="gst-plugins-bad-libs-gstglbasememory.html" title="GstGLBaseMemory">gstglbasememory</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-bad-libs-GstGLBuffer.html#GstGLBuffer" title="GstGLBuffer">GstGLBuffer</a>, struct in <a class="link" href="gst-plugins-bad-libs-GstGLBuffer.html" title="GstGLBuffer">GstGLBuffer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-bad-libs-GstGLBuffer.html#GstGLBufferAllocationParams" title="struct GstGLBufferAllocationParams">GstGLBufferAllocationParams</a>, struct in <a class="link" href="gst-plugins-bad-libs-GstGLBuffer.html" title="GstGLBuffer">GstGLBuffer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-bad-libs-GstGLBuffer.html#GstGLBufferAllocator-struct" title="GstGLBufferAllocator">GstGLBufferAllocator</a>, struct in <a class="link" href="gst-plugins-bad-libs-GstGLBuffer.html" title="GstGLBuffer">GstGLBuffer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-bad-libs-GstGLBuffer.html#GstGLBufferAllocatorClass" title="GstGLBufferAllocatorClass">GstGLBufferAllocatorClass</a>, struct in <a class="link" href="gst-plugins-bad-libs-GstGLBuffer.html" title="GstGLBuffer">GstGLBuffer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="GstGLBufferPool.html#GstGLBufferPool-struct" title="GstGLBufferPool">GstGLBufferPool</a>, struct in <a class="link" href="GstGLBufferPool.html" title="GstGLBufferPool">GstGLBufferPool</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="GstGLBufferPool.html#GstGLBufferPoolClass" title="GstGLBufferPoolClass">GstGLBufferPoolClass</a>, struct in <a class="link" href="GstGLBufferPool.html" title="GstGLBufferPool">GstGLBufferPool</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-bad-libs-OpenGL-Miscellaneous-Utilities.html#GLCB:CAPS" title="GLCB ()">GLCB</a>, user_function in <a class="link" href="gst-plugins-bad-libs-OpenGL-Miscellaneous-Utilities.html" title="OpenGL Miscellaneous Utilities">OpenGL Miscellaneous Utilities</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-bad-libs-OpenGL-Miscellaneous-Utilities.html#GLCB-V2:CAPS" title="GLCB_V2 ()">GLCB_V2</a>, user_function in <a class="link" href="gst-plugins-bad-libs-OpenGL-Miscellaneous-Utilities.html" title="OpenGL Miscellaneous Utilities">OpenGL Miscellaneous Utilities</a>
 </dt>
 <dd></dd>
 <dt>
@@ -359,7 +459,7 @@
 </dt>
 <dd></dd>
 <dt>
-<a class="link" href="gst-plugins-bad-libs-Utilities.html#GstGLDisplayProjection" title="enum GstGLDisplayProjection">GstGLDisplayProjection</a>, enum in <a class="link" href="gst-plugins-bad-libs-Utilities.html" title="Utilities">Utilities</a>
+<a class="link" href="gst-plugins-bad-libs-OpenGL-Miscellaneous-Utilities.html#GstGLDisplayProjection" title="enum GstGLDisplayProjection">GstGLDisplayProjection</a>, enum in <a class="link" href="gst-plugins-bad-libs-OpenGL-Miscellaneous-Utilities.html" title="OpenGL Miscellaneous Utilities">OpenGL Miscellaneous Utilities</a>
 </dt>
 <dd></dd>
 <dt>
@@ -367,10 +467,6 @@
 </dt>
 <dd></dd>
 <dt>
-<a class="link" href="GstGLDownload.html#GstGLDownload-struct" title="GstGLDownload">GstGLDownload</a>, struct in <a class="link" href="GstGLDownload.html" title="GstGLDownload">GstGLDownload</a>
-</dt>
-<dd></dd>
-<dt>
 <a class="link" href="GstGLFilter.html#GstGLFilter-struct" title="GstGLFilter">GstGLFilter</a>, struct in <a class="link" href="GstGLFilter.html" title="GstGLFilter">GstGLFilter</a>
 </dt>
 <dd></dd>
@@ -387,7 +483,27 @@
 </dt>
 <dd></dd>
 <dt>
-<a class="link" href="gst-plugins-bad-libs-gstglmemory.html#GstGLMemory" title="GstGLMemory">GstGLMemory</a>, struct in <a class="link" href="gst-plugins-bad-libs-gstglmemory.html" title="GstGLMemory">GstGLMemory</a>
+<a class="link" href="gst-plugins-bad-libs-GstGLMemory.html#GstGLMemory" title="GstGLMemory">GstGLMemory</a>, struct in <a class="link" href="gst-plugins-bad-libs-GstGLMemory.html" title="GstGLMemory">GstGLMemory</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-bad-libs-GstGLMemory.html#GstGLMemoryAllocator-struct" title="GstGLMemoryAllocator">GstGLMemoryAllocator</a>, struct in <a class="link" href="gst-plugins-bad-libs-GstGLMemory.html" title="GstGLMemory">GstGLMemory</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-bad-libs-GstGLMemory.html#GstGLMemoryAllocatorClass" title="GstGLMemoryAllocatorClass">GstGLMemoryAllocatorClass</a>, struct in <a class="link" href="gst-plugins-bad-libs-GstGLMemory.html" title="GstGLMemory">GstGLMemory</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-bad-libs-gstglmemorypbo.html#GstGLMemoryPBO" title="GstGLMemoryPBO">GstGLMemoryPBO</a>, struct in <a class="link" href="gst-plugins-bad-libs-gstglmemorypbo.html" title="GstGLMemoryPBO">GstGLMemoryPBO</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-bad-libs-gstglmemorypbo.html#GstGLMemoryPBOAllocator-struct" title="GstGLMemoryPBOAllocator">GstGLMemoryPBOAllocator</a>, struct in <a class="link" href="gst-plugins-bad-libs-gstglmemorypbo.html" title="GstGLMemoryPBO">gstglmemorypbo</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-bad-libs-gstglmemorypbo.html#GstGLMemoryPBOAllocatorClass" title="GstGLMemoryPBOAllocatorClass">GstGLMemoryPBOAllocatorClass</a>, struct in <a class="link" href="gst-plugins-bad-libs-gstglmemorypbo.html" title="GstGLMemoryPBO">gstglmemorypbo</a>
 </dt>
 <dd></dd>
 <dt>
@@ -395,31 +511,115 @@
 </dt>
 <dd></dd>
 <dt>
-<a class="link" href="gst-plugins-bad-libs-gstglshader.html#GstGLShader-struct" title="GstGLShader">GstGLShader</a>, struct in <a class="link" href="gst-plugins-bad-libs-gstglshader.html" title="GstGLShader">GstGLShader</a>
+<a class="link" href="GstGLShader.html#GstGLShader-struct" title="GstGLShader">GstGLShader</a>, struct in <a class="link" href="GstGLShader.html" title="GstGLShader">GstGLShader</a>
 </dt>
 <dd></dd>
 <dt>
-<a class="link" href="gst-plugins-bad-libs-gstglshader.html#GstGLShader--active" title="The “active” property">GstGLShader:active</a>, object property in <a class="link" href="gst-plugins-bad-libs-gstglshader.html" title="GstGLShader">GstGLShader</a>
+<a class="link" href="GstGLShader.html#GstGLShader--linked" title="The “linked” property">GstGLShader:linked</a>, object property in <a class="link" href="GstGLShader.html" title="GstGLShader">GstGLShader</a>
 </dt>
 <dd></dd>
 <dt>
-<a class="link" href="gst-plugins-bad-libs-gstglshader.html#GstGLShader--compiled" title="The “compiled” property">GstGLShader:compiled</a>, object property in <a class="link" href="gst-plugins-bad-libs-gstglshader.html" title="GstGLShader">GstGLShader</a>
+<a class="link" href="gst-plugins-bad-libs-GstGLSL.html#GstGLSLError" title="enum GstGLSLError">GstGLSLError</a>, enum in <a class="link" href="gst-plugins-bad-libs-GstGLSL.html" title="GstGLSL">GstGLSL</a>
 </dt>
 <dd></dd>
 <dt>
-<a class="link" href="gst-plugins-bad-libs-gstglshader.html#GstGLShader--fragment-src" title="The “fragment-src” property">GstGLShader:fragment-src</a>, object property in <a class="link" href="gst-plugins-bad-libs-gstglshader.html" title="GstGLShader">GstGLShader</a>
+<a class="link" href="gst-plugins-bad-libs-GstGLSL.html#GstGLSLProfile" title="enum GstGLSLProfile">GstGLSLProfile</a>, enum in <a class="link" href="gst-plugins-bad-libs-GstGLSL.html" title="GstGLSL">GstGLSL</a>
 </dt>
 <dd></dd>
 <dt>
-<a class="link" href="gst-plugins-bad-libs-gstglshader.html#GstGLShader--vertex-src" title="The “vertex-src” property">GstGLShader:vertex-src</a>, object property in <a class="link" href="gst-plugins-bad-libs-gstglshader.html" title="GstGLShader">GstGLShader</a>
+GstGLSLStage, struct in <a class="link" href=".html#GstGLSLStage">GstGLSLStage</a>
 </dt>
 <dd></dd>
 <dt>
-<a class="link" href="gst-plugins-bad-libs-gstglshader.html#GstGLShaderError" title="enum GstGLShaderError">GstGLShaderError</a>, enum in <a class="link" href="gst-plugins-bad-libs-gstglshader.html" title="GstGLShader">gstglshader</a>
+GstGLSLStageClass, struct in <a class="link" href=".html#GstGLSLStage">GstGLSLStage</a>
 </dt>
 <dd></dd>
 <dt>
-<a class="link" href="gst-plugins-bad-libs-gstglshader.html#GstGLShaderSourceType" title="enum GstGLShaderSourceType">GstGLShaderSourceType</a>, enum in <a class="link" href="gst-plugins-bad-libs-gstglshader.html" title="GstGLShader">gstglshader</a>
+<a class="link" href="gst-plugins-bad-libs-GstGLSL.html#GstGLSLVersion" title="enum GstGLSLVersion">GstGLSLVersion</a>, enum in <a class="link" href="gst-plugins-bad-libs-GstGLSL.html" title="GstGLSL">GstGLSL</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-bad-libs-GstGLSL.html#GST-GLSL-ERROR:CAPS" title="GST_GLSL_ERROR">GST_GLSL_ERROR</a>, macro in <a class="link" href="gst-plugins-bad-libs-GstGLSL.html" title="GstGLSL">GstGLSL</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-bad-libs-GstGLSL.html#gst-glsl-error-quark" title="gst_glsl_error_quark ()">gst_glsl_error_quark</a>, function in <a class="link" href="gst-plugins-bad-libs-GstGLSL.html" title="GstGLSL">GstGLSL</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-bad-libs-GstGLSL.html#gst-glsl-profile-from-string" title="gst_glsl_profile_from_string ()">gst_glsl_profile_from_string</a>, function in <a class="link" href="gst-plugins-bad-libs-GstGLSL.html" title="GstGLSL">GstGLSL</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-bad-libs-GstGLSL.html#gst-glsl-profile-to-string" title="gst_glsl_profile_to_string ()">gst_glsl_profile_to_string</a>, function in <a class="link" href="gst-plugins-bad-libs-GstGLSL.html" title="GstGLSL">GstGLSL</a>
+</dt>
+<dd></dd>
+<dt>
+gst_glsl_stage_compile, function in <a class="link" href=".html#GstGLSLStage">GstGLSLStage</a>
+</dt>
+<dd></dd>
+<dt>
+gst_glsl_stage_get_handle, function in <a class="link" href=".html#GstGLSLStage">GstGLSLStage</a>
+</dt>
+<dd></dd>
+<dt>
+gst_glsl_stage_get_profile, function in <a class="link" href=".html#GstGLSLStage">GstGLSLStage</a>
+</dt>
+<dd></dd>
+<dt>
+gst_glsl_stage_get_shader_type, function in <a class="link" href=".html#GstGLSLStage">GstGLSLStage</a>
+</dt>
+<dd></dd>
+<dt>
+gst_glsl_stage_get_version, function in <a class="link" href=".html#GstGLSLStage">GstGLSLStage</a>
+</dt>
+<dd></dd>
+<dt>
+gst_glsl_stage_new, function in <a class="link" href=".html#GstGLSLStage">GstGLSLStage</a>
+</dt>
+<dd></dd>
+<dt>
+gst_glsl_stage_new_default_fragment, function in <a class="link" href=".html#GstGLSLStage">GstGLSLStage</a>
+</dt>
+<dd></dd>
+<dt>
+gst_glsl_stage_new_default_vertex, function in <a class="link" href=".html#GstGLSLStage">GstGLSLStage</a>
+</dt>
+<dd></dd>
+<dt>
+gst_glsl_stage_new_with_string, function in <a class="link" href=".html#GstGLSLStage">GstGLSLStage</a>
+</dt>
+<dd></dd>
+<dt>
+gst_glsl_stage_new_with_strings, function in <a class="link" href=".html#GstGLSLStage">GstGLSLStage</a>
+</dt>
+<dd></dd>
+<dt>
+gst_glsl_stage_set_strings, function in <a class="link" href=".html#GstGLSLStage">GstGLSLStage</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-bad-libs-GstGLSL.html#gst-glsl-string-get-version-profile" title="gst_glsl_string_get_version_profile ()">gst_glsl_string_get_version_profile</a>, function in <a class="link" href="gst-plugins-bad-libs-GstGLSL.html" title="GstGLSL">GstGLSL</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-bad-libs-GstGLSL.html#gst-glsl-version-from-string" title="gst_glsl_version_from_string ()">gst_glsl_version_from_string</a>, function in <a class="link" href="gst-plugins-bad-libs-GstGLSL.html" title="GstGLSL">GstGLSL</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-bad-libs-GstGLSL.html#gst-glsl-version-profile-from-string" title="gst_glsl_version_profile_from_string ()">gst_glsl_version_profile_from_string</a>, function in <a class="link" href="gst-plugins-bad-libs-GstGLSL.html" title="GstGLSL">GstGLSL</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-bad-libs-GstGLSL.html#gst-glsl-version-profile-to-string" title="gst_glsl_version_profile_to_string ()">gst_glsl_version_profile_to_string</a>, function in <a class="link" href="gst-plugins-bad-libs-GstGLSL.html" title="GstGLSL">GstGLSL</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-bad-libs-GstGLSL.html#gst-glsl-version-to-string" title="gst_glsl_version_to_string ()">gst_glsl_version_to_string</a>, function in <a class="link" href="gst-plugins-bad-libs-GstGLSL.html" title="GstGLSL">GstGLSL</a>
+</dt>
+<dd></dd>
+<dt>
+GstGLStereoDownmix, enum in GstGLViewConvert
 </dt>
 <dd></dd>
 <dt>
@@ -427,11 +627,43 @@
 </dt>
 <dd></dd>
 <dt>
+<a class="link" href="gst-plugins-bad-libs-OpenGL-Formats.html#GstGLTextureTarget" title="enum GstGLTextureTarget">GstGLTextureTarget</a>, enum in <a class="link" href="gst-plugins-bad-libs-OpenGL-Formats.html" title="OpenGL Formats">OpenGL Formats</a>
+</dt>
+<dd></dd>
+<dt>
 <a class="link" href="GstGLUpload.html#GstGLUpload-struct" title="GstGLUpload">GstGLUpload</a>, struct in <a class="link" href="GstGLUpload.html" title="GstGLUpload">GstGLUpload</a>
 </dt>
 <dd></dd>
 <dt>
-<a class="link" href="GstGLUploadMeta.html#GstGLUploadMeta-struct" title="GstGLUploadMeta">GstGLUploadMeta</a>, struct in <a class="link" href="GstGLUploadMeta.html" title="GstGLUploadMeta">GstGLUploadMeta</a>
+<a class="link" href="gst-plugins-bad-libs-GstGLMemory.html#GstGLVideoAllocationParams" title="struct GstGLVideoAllocationParams">GstGLVideoAllocationParams</a>, struct in <a class="link" href="gst-plugins-bad-libs-GstGLMemory.html" title="GstGLMemory">GstGLMemory</a>
+</dt>
+<dd></dd>
+<dt>
+GstGLViewConvert, struct in GstGLViewConvert
+</dt>
+<dd></dd>
+<dt>
+GstGLViewConvert:downmix-mode, object property in GstGLViewConvert
+</dt>
+<dd></dd>
+<dt>
+GstGLViewConvert:input-flags-override, object property in GstGLViewConvert
+</dt>
+<dd></dd>
+<dt>
+GstGLViewConvert:input-mode-override, object property in GstGLViewConvert
+</dt>
+<dd></dd>
+<dt>
+GstGLViewConvert:output-flags-override, object property in GstGLViewConvert
+</dt>
+<dd></dd>
+<dt>
+GstGLViewConvert:output-mode-override, object property in GstGLViewConvert
+</dt>
+<dd></dd>
+<dt>
+GstGLViewConvertClass, struct in GstGLViewConvert
 </dt>
 <dd></dd>
 <dt>
@@ -511,6 +743,50 @@
 </dt>
 <dd></dd>
 <dt>
+<a class="link" href="gst-plugins-bad-libs-gstglbasememory.html#GST-GL-ALLOCATION-PARAMS-ALLOC-FLAG-ALLOC:CAPS" title="GST_GL_ALLOCATION_PARAMS_ALLOC_FLAG_ALLOC">GST_GL_ALLOCATION_PARAMS_ALLOC_FLAG_ALLOC</a>, macro in <a class="link" href="gst-plugins-bad-libs-gstglbasememory.html" title="GstGLBaseMemory">gstglbasememory</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-bad-libs-GstGLBuffer.html#GST-GL-ALLOCATION-PARAMS-ALLOC-FLAG-BUFFER:CAPS" title="GST_GL_ALLOCATION_PARAMS_ALLOC_FLAG_BUFFER">GST_GL_ALLOCATION_PARAMS_ALLOC_FLAG_BUFFER</a>, macro in <a class="link" href="gst-plugins-bad-libs-GstGLBuffer.html" title="GstGLBuffer">GstGLBuffer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-bad-libs-gstglbasememory.html#GST-GL-ALLOCATION-PARAMS-ALLOC-FLAG-USER:CAPS" title="GST_GL_ALLOCATION_PARAMS_ALLOC_FLAG_USER">GST_GL_ALLOCATION_PARAMS_ALLOC_FLAG_USER</a>, macro in <a class="link" href="gst-plugins-bad-libs-gstglbasememory.html" title="GstGLBaseMemory">gstglbasememory</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-bad-libs-GstGLMemory.html#GST-GL-ALLOCATION-PARAMS-ALLOC-FLAG-VIDEO:CAPS" title="GST_GL_ALLOCATION_PARAMS_ALLOC_FLAG_VIDEO">GST_GL_ALLOCATION_PARAMS_ALLOC_FLAG_VIDEO</a>, macro in <a class="link" href="gst-plugins-bad-libs-GstGLMemory.html" title="GstGLMemory">GstGLMemory</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-bad-libs-gstglbasememory.html#GST-GL-ALLOCATION-PARAMS-ALLOC-FLAG-WRAP-GPU-HANDLE:CAPS" title="GST_GL_ALLOCATION_PARAMS_ALLOC_FLAG_WRAP_GPU_HANDLE">GST_GL_ALLOCATION_PARAMS_ALLOC_FLAG_WRAP_GPU_HANDLE</a>, macro in <a class="link" href="gst-plugins-bad-libs-gstglbasememory.html" title="GstGLBaseMemory">gstglbasememory</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-bad-libs-gstglbasememory.html#GST-GL-ALLOCATION-PARAMS-ALLOC-FLAG-WRAP-SYSMEM:CAPS" title="GST_GL_ALLOCATION_PARAMS_ALLOC_FLAG_WRAP_SYSMEM">GST_GL_ALLOCATION_PARAMS_ALLOC_FLAG_WRAP_SYSMEM</a>, macro in <a class="link" href="gst-plugins-bad-libs-gstglbasememory.html" title="GstGLBaseMemory">gstglbasememory</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-bad-libs-gstglbasememory.html#gst-gl-allocation-params-copy" title="gst_gl_allocation_params_copy ()">gst_gl_allocation_params_copy</a>, function in <a class="link" href="gst-plugins-bad-libs-gstglbasememory.html" title="GstGLBaseMemory">gstglbasememory</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-bad-libs-gstglbasememory.html#gst-gl-allocation-params-copy-data" title="gst_gl_allocation_params_copy_data ()">gst_gl_allocation_params_copy_data</a>, function in <a class="link" href="gst-plugins-bad-libs-gstglbasememory.html" title="GstGLBaseMemory">gstglbasememory</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-bad-libs-gstglbasememory.html#gst-gl-allocation-params-free" title="gst_gl_allocation_params_free ()">gst_gl_allocation_params_free</a>, function in <a class="link" href="gst-plugins-bad-libs-gstglbasememory.html" title="GstGLBaseMemory">gstglbasememory</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-bad-libs-gstglbasememory.html#gst-gl-allocation-params-free-data" title="gst_gl_allocation_params_free_data ()">gst_gl_allocation_params_free_data</a>, function in <a class="link" href="gst-plugins-bad-libs-gstglbasememory.html" title="GstGLBaseMemory">gstglbasememory</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-bad-libs-gstglbasememory.html#gst-gl-allocation-params-init" title="gst_gl_allocation_params_init ()">gst_gl_allocation_params_init</a>, function in <a class="link" href="gst-plugins-bad-libs-gstglbasememory.html" title="GstGLBaseMemory">gstglbasememory</a>
+</dt>
+<dd></dd>
+<dt>
 <a class="link" href="gst-plugins-bad-libs-GstGLAPI.html#gst-gl-api-from-string" title="gst_gl_api_from_string ()">gst_gl_api_from_string</a>, function in <a class="link" href="gst-plugins-bad-libs-GstGLAPI.html" title="GstGLAPI">GstGLAPI</a>
 </dt>
 <dd></dd>
@@ -535,15 +811,107 @@
 </dt>
 <dd></dd>
 <dt>
+<a class="link" href="gst-plugins-bad-libs-OpenGL-debugging.html#GST-GL-ASYNC-CAT-LEVEL-LOG:CAPS" title="GST_GL_ASYNC_CAT_LEVEL_LOG()">GST_GL_ASYNC_CAT_LEVEL_LOG</a>, macro in <a class="link" href="gst-plugins-bad-libs-OpenGL-debugging.html" title="OpenGL debugging">OpenGL Debugging</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-bad-libs-OpenGL-debugging.html#GST-GL-ASYNC-CAT-LEVEL-LOG-valist" title="GST_GL_ASYNC_CAT_LEVEL_LOG_valist()">GST_GL_ASYNC_CAT_LEVEL_LOG_valist</a>, macro in <a class="link" href="gst-plugins-bad-libs-OpenGL-debugging.html" title="OpenGL debugging">OpenGL Debugging</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-bad-libs-OpenGL-debugging.html#gst-gl-async-debug-free" title="gst_gl_async_debug_free ()">gst_gl_async_debug_free</a>, function in <a class="link" href="gst-plugins-bad-libs-OpenGL-debugging.html" title="OpenGL debugging">OpenGL Debugging</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-bad-libs-OpenGL-debugging.html#gst-gl-async-debug-freeze" title="gst_gl_async_debug_freeze ()">gst_gl_async_debug_freeze</a>, function in <a class="link" href="gst-plugins-bad-libs-OpenGL-debugging.html" title="OpenGL debugging">OpenGL Debugging</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-bad-libs-OpenGL-debugging.html#gst-gl-async-debug-init" title="gst_gl_async_debug_init ()">gst_gl_async_debug_init</a>, function in <a class="link" href="gst-plugins-bad-libs-OpenGL-debugging.html" title="OpenGL debugging">OpenGL Debugging</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-bad-libs-OpenGL-debugging.html#gst-gl-async-debug-new" title="gst_gl_async_debug_new ()">gst_gl_async_debug_new</a>, function in <a class="link" href="gst-plugins-bad-libs-OpenGL-debugging.html" title="OpenGL debugging">OpenGL Debugging</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-bad-libs-OpenGL-debugging.html#gst-gl-async-debug-output-log-msg" title="gst_gl_async_debug_output_log_msg ()">gst_gl_async_debug_output_log_msg</a>, function in <a class="link" href="gst-plugins-bad-libs-OpenGL-debugging.html" title="OpenGL debugging">OpenGL Debugging</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-bad-libs-OpenGL-debugging.html#gst-gl-async-debug-store-log-msg" title="gst_gl_async_debug_store_log_msg ()">gst_gl_async_debug_store_log_msg</a>, function in <a class="link" href="gst-plugins-bad-libs-OpenGL-debugging.html" title="OpenGL debugging">OpenGL Debugging</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-bad-libs-OpenGL-debugging.html#gst-gl-async-debug-store-log-msg-valist" title="gst_gl_async_debug_store_log_msg_valist ()">gst_gl_async_debug_store_log_msg_valist</a>, function in <a class="link" href="gst-plugins-bad-libs-OpenGL-debugging.html" title="OpenGL debugging">OpenGL Debugging</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-bad-libs-OpenGL-debugging.html#gst-gl-async-debug-thaw" title="gst_gl_async_debug_thaw ()">gst_gl_async_debug_thaw</a>, function in <a class="link" href="gst-plugins-bad-libs-OpenGL-debugging.html" title="OpenGL debugging">OpenGL Debugging</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-bad-libs-OpenGL-debugging.html#gst-gl-async-debug-unset" title="gst_gl_async_debug_unset ()">gst_gl_async_debug_unset</a>, function in <a class="link" href="gst-plugins-bad-libs-OpenGL-debugging.html" title="OpenGL debugging">OpenGL Debugging</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-bad-libs-gstglbasememory.html#gst-gl-base-memory-alloc" title="gst_gl_base_memory_alloc ()">gst_gl_base_memory_alloc</a>, function in <a class="link" href="gst-plugins-bad-libs-gstglbasememory.html" title="GstGLBaseMemory">GstGLBaseMemory</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-bad-libs-gstglbasememory.html#GST-GL-BASE-MEMORY-ALLOCATOR-NAME:CAPS" title="GST_GL_BASE_MEMORY_ALLOCATOR_NAME">GST_GL_BASE_MEMORY_ALLOCATOR_NAME</a>, macro in <a class="link" href="gst-plugins-bad-libs-gstglbasememory.html" title="GstGLBaseMemory">gstglbasememory</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-bad-libs-gstglbasememory.html#gst-gl-base-memory-alloc-data" title="gst_gl_base_memory_alloc_data ()">gst_gl_base_memory_alloc_data</a>, function in <a class="link" href="gst-plugins-bad-libs-gstglbasememory.html" title="GstGLBaseMemory">GstGLBaseMemory</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-bad-libs-gstglbasememory.html#GST-GL-BASE-MEMORY-ERROR:CAPS" title="GST_GL_BASE_MEMORY_ERROR">GST_GL_BASE_MEMORY_ERROR</a>, macro in <a class="link" href="gst-plugins-bad-libs-gstglbasememory.html" title="GstGLBaseMemory">gstglbasememory</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-bad-libs-gstglbasememory.html#gst-gl-base-memory-init" title="gst_gl_base_memory_init ()">gst_gl_base_memory_init</a>, function in <a class="link" href="gst-plugins-bad-libs-gstglbasememory.html" title="GstGLBaseMemory">GstGLBaseMemory</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-bad-libs-gstglbasememory.html#gst-gl-base-memory-init-once" title="gst_gl_base_memory_init_once ()">gst_gl_base_memory_init_once</a>, function in <a class="link" href="gst-plugins-bad-libs-gstglbasememory.html" title="GstGLBaseMemory">GstGLBaseMemory</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-bad-libs-gstglbasememory.html#gst-gl-base-memory-memcpy" title="gst_gl_base_memory_memcpy ()">gst_gl_base_memory_memcpy</a>, function in <a class="link" href="gst-plugins-bad-libs-gstglbasememory.html" title="GstGLBaseMemory">GstGLBaseMemory</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-bad-libs-GstGLBuffer.html#gst-gl-buffer-alloc" title="gst_gl_buffer_alloc ()">gst_gl_buffer_alloc</a>, function in <a class="link" href="gst-plugins-bad-libs-GstGLBuffer.html" title="GstGLBuffer">GstGLBuffer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-bad-libs-GstGLBuffer.html#gst-gl-buffer-allocation-params-new" title="gst_gl_buffer_allocation_params_new ()">gst_gl_buffer_allocation_params_new</a>, function in <a class="link" href="gst-plugins-bad-libs-GstGLBuffer.html" title="GstGLBuffer">GstGLBuffer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-bad-libs-GstGLBuffer.html#GST-GL-BUFFER-ALLOCATOR-NAME:CAPS" title="GST_GL_BUFFER_ALLOCATOR_NAME">GST_GL_BUFFER_ALLOCATOR_NAME</a>, macro in <a class="link" href="gst-plugins-bad-libs-GstGLBuffer.html" title="GstGLBuffer">GstGLBuffer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-bad-libs-GstGLBuffer.html#gst-gl-buffer-init-once" title="gst_gl_buffer_init_once ()">gst_gl_buffer_init_once</a>, function in <a class="link" href="gst-plugins-bad-libs-GstGLBuffer.html" title="GstGLBuffer">GstGLBuffer</a>
+</dt>
+<dd></dd>
+<dt>
 <a class="link" href="GstGLBufferPool.html#gst-gl-buffer-pool-new" title="gst_gl_buffer_pool_new ()">gst_gl_buffer_pool_new</a>, function in <a class="link" href="GstGLBufferPool.html" title="GstGLBufferPool">GstGLBufferPool</a>
 </dt>
 <dd></dd>
 <dt>
-<a class="link" href="gst-plugins-bad-libs-Utilities.html#gst-gl-caps-replace-all-caps-features" title="gst_gl_caps_replace_all_caps_features ()">gst_gl_caps_replace_all_caps_features</a>, function in <a class="link" href="gst-plugins-bad-libs-Utilities.html" title="Utilities">Utilities</a>
+<a class="link" href="gst-plugins-bad-libs-OpenGL-Miscellaneous-Utilities.html#gst-gl-caps-replace-all-caps-features" title="gst_gl_caps_replace_all_caps_features ()">gst_gl_caps_replace_all_caps_features</a>, function in <a class="link" href="gst-plugins-bad-libs-OpenGL-Miscellaneous-Utilities.html" title="OpenGL Miscellaneous Utilities">OpenGL Miscellaneous Utilities</a>
 </dt>
 <dd></dd>
 <dt>
-<a class="link" href="gst-plugins-bad-libs-GstGLAPI.html#gst-gl-check-extension" title="gst_gl_check_extension ()">gst_gl_check_extension</a>, function in <a class="link" href="gst-plugins-bad-libs-GstGLAPI.html" title="GstGLAPI">GstGLAPI</a>
+<a class="link" href="GstGLColorConvert.html#gst-gl-color-convert-decide-allocation" title="gst_gl_color_convert_decide_allocation ()">gst_gl_color_convert_decide_allocation</a>, function in <a class="link" href="GstGLColorConvert.html" title="GstGLColorConvert">GstGLColorConvert</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="GstGLColorConvert.html#gst-gl-color-convert-fixate-caps" title="gst_gl_color_convert_fixate_caps ()">gst_gl_color_convert_fixate_caps</a>, function in <a class="link" href="GstGLColorConvert.html" title="GstGLColorConvert">GstGLColorConvert</a>
 </dt>
 <dd></dd>
 <dt>
@@ -583,7 +951,7 @@
 </dt>
 <dd></dd>
 <dt>
-<a class="link" href="gst-plugins-bad-libs-Utilities.html#gst-gl-context-check-framebuffer-status" title="gst_gl_context_check_framebuffer_status ()">gst_gl_context_check_framebuffer_status</a>, function in <a class="link" href="gst-plugins-bad-libs-Utilities.html" title="Utilities">Utilities</a>
+<a class="link" href="gst-plugins-bad-libs-OpenGL-Miscellaneous-Utilities.html#gst-gl-context-check-framebuffer-status" title="gst_gl_context_check_framebuffer_status ()">gst_gl_context_check_framebuffer_status</a>, function in <a class="link" href="gst-plugins-bad-libs-OpenGL-Miscellaneous-Utilities.html" title="OpenGL Miscellaneous Utilities">OpenGL Miscellaneous Utilities</a>
 </dt>
 <dd></dd>
 <dt>
@@ -591,7 +959,7 @@
 </dt>
 <dd></dd>
 <dt>
-<a class="link" href="gst-plugins-bad-libs-Utilities.html#gst-gl-context-clear-shader" title="gst_gl_context_clear_shader ()">gst_gl_context_clear_shader</a>, function in <a class="link" href="gst-plugins-bad-libs-Utilities.html" title="Utilities">Utilities</a>
+<a class="link" href="gst-plugins-bad-libs-OpenGL-Miscellaneous-Utilities.html#gst-gl-context-clear-shader" title="gst_gl_context_clear_shader ()">gst_gl_context_clear_shader</a>, function in <a class="link" href="gst-plugins-bad-libs-OpenGL-Miscellaneous-Utilities.html" title="OpenGL Miscellaneous Utilities">OpenGL Miscellaneous Utilities</a>
 </dt>
 <dd></dd>
 <dt>
@@ -615,15 +983,15 @@
 </dt>
 <dd></dd>
 <dt>
-<a class="link" href="gst-plugins-bad-libs-Utilities.html#gst-gl-context-del-fbo" title="gst_gl_context_del_fbo ()">gst_gl_context_del_fbo</a>, function in <a class="link" href="gst-plugins-bad-libs-Utilities.html" title="Utilities">Utilities</a>
+<a class="link" href="gst-plugins-bad-libs-OpenGL-Miscellaneous-Utilities.html#gst-gl-context-del-fbo" title="gst_gl_context_del_fbo ()">gst_gl_context_del_fbo</a>, function in <a class="link" href="gst-plugins-bad-libs-OpenGL-Miscellaneous-Utilities.html" title="OpenGL Miscellaneous Utilities">OpenGL Miscellaneous Utilities</a>
 </dt>
 <dd></dd>
 <dt>
-<a class="link" href="gst-plugins-bad-libs-Utilities.html#gst-gl-context-del-shader" title="gst_gl_context_del_shader ()">gst_gl_context_del_shader</a>, function in <a class="link" href="gst-plugins-bad-libs-Utilities.html" title="Utilities">Utilities</a>
+<a class="link" href="gst-plugins-bad-libs-OpenGL-Miscellaneous-Utilities.html#gst-gl-context-del-shader" title="gst_gl_context_del_shader ()">gst_gl_context_del_shader</a>, function in <a class="link" href="gst-plugins-bad-libs-OpenGL-Miscellaneous-Utilities.html" title="OpenGL Miscellaneous Utilities">OpenGL Miscellaneous Utilities</a>
 </dt>
 <dd></dd>
 <dt>
-<a class="link" href="gst-plugins-bad-libs-Utilities.html#gst-gl-context-del-texture" title="gst_gl_context_del_texture ()">gst_gl_context_del_texture</a>, function in <a class="link" href="gst-plugins-bad-libs-Utilities.html" title="Utilities">Utilities</a>
+<a class="link" href="gst-plugins-bad-libs-OpenGL-Miscellaneous-Utilities.html#gst-gl-context-del-texture" title="gst_gl_context_del_texture ()">gst_gl_context_del_texture</a>, function in <a class="link" href="gst-plugins-bad-libs-OpenGL-Miscellaneous-Utilities.html" title="OpenGL Miscellaneous Utilities">OpenGL Miscellaneous Utilities</a>
 </dt>
 <dd></dd>
 <dt>
@@ -663,15 +1031,15 @@
 </dt>
 <dd></dd>
 <dt>
-<a class="link" href="gst-plugins-bad-libs-Utilities.html#gst-gl-context-gen-fbo" title="gst_gl_context_gen_fbo ()">gst_gl_context_gen_fbo</a>, function in <a class="link" href="gst-plugins-bad-libs-Utilities.html" title="Utilities">Utilities</a>
+<a class="link" href="gst-plugins-bad-libs-OpenGL-Miscellaneous-Utilities.html#gst-gl-context-gen-fbo" title="gst_gl_context_gen_fbo ()">gst_gl_context_gen_fbo</a>, function in <a class="link" href="gst-plugins-bad-libs-OpenGL-Miscellaneous-Utilities.html" title="OpenGL Miscellaneous Utilities">OpenGL Miscellaneous Utilities</a>
 </dt>
 <dd></dd>
 <dt>
-<a class="link" href="gst-plugins-bad-libs-Utilities.html#gst-gl-context-gen-shader" title="gst_gl_context_gen_shader ()">gst_gl_context_gen_shader</a>, function in <a class="link" href="gst-plugins-bad-libs-Utilities.html" title="Utilities">Utilities</a>
+<a class="link" href="gst-plugins-bad-libs-OpenGL-Miscellaneous-Utilities.html#gst-gl-context-gen-shader" title="gst_gl_context_gen_shader ()">gst_gl_context_gen_shader</a>, function in <a class="link" href="gst-plugins-bad-libs-OpenGL-Miscellaneous-Utilities.html" title="OpenGL Miscellaneous Utilities">OpenGL Miscellaneous Utilities</a>
 </dt>
 <dd></dd>
 <dt>
-<a class="link" href="gst-plugins-bad-libs-Utilities.html#gst-gl-context-gen-texture" title="gst_gl_context_gen_texture ()">gst_gl_context_gen_texture</a>, function in <a class="link" href="gst-plugins-bad-libs-Utilities.html" title="Utilities">Utilities</a>
+<a class="link" href="gst-plugins-bad-libs-OpenGL-Miscellaneous-Utilities.html#gst-gl-context-gen-texture" title="gst_gl_context_gen_texture ()">gst_gl_context_gen_texture</a>, function in <a class="link" href="gst-plugins-bad-libs-OpenGL-Miscellaneous-Utilities.html" title="OpenGL Miscellaneous Utilities">OpenGL Miscellaneous Utilities</a>
 </dt>
 <dd></dd>
 <dt>
@@ -691,7 +1059,7 @@
 </dt>
 <dd></dd>
 <dt>
-<a class="link" href="gst-plugins-bad-libs-Utilities.html#gst-gl-context-get-error" title="gst_gl_context_get_error ()">gst_gl_context_get_error</a>, function in <a class="link" href="gst-plugins-bad-libs-Utilities.html" title="Utilities">Utilities</a>
+<a class="link" href="gst-plugins-bad-libs-OpenGL-Miscellaneous-Utilities.html#gst-gl-context-get-error" title="gst_gl_context_get_error ()">gst_gl_context_get_error</a>, function in <a class="link" href="gst-plugins-bad-libs-OpenGL-Miscellaneous-Utilities.html" title="OpenGL Miscellaneous Utilities">OpenGL Miscellaneous Utilities</a>
 </dt>
 <dd></dd>
 <dt>
@@ -715,6 +1083,10 @@
 </dt>
 <dd></dd>
 <dt>
+<a class="link" href="GstGLContext.html#gst-gl-context-get-proc-address-with-platform" title="gst_gl_context_get_proc_address_with_platform ()">gst_gl_context_get_proc_address_with_platform</a>, function in <a class="link" href="GstGLContext.html" title="GstGLContext">GstGLContext</a>
+</dt>
+<dd></dd>
+<dt>
 <a class="link" href="GstGLContext.html#gst-gl-context-get-thread" title="gst_gl_context_get_thread ()">gst_gl_context_get_thread</a>, function in <a class="link" href="GstGLContext.html" title="GstGLContext">GstGLContext</a>
 </dt>
 <dd></dd>
@@ -735,6 +1107,10 @@
 </dt>
 <dd></dd>
 <dt>
+<a class="link" href="GstGLContext.html#gst-gl-context-is-shared" title="gst_gl_context_is_shared ()">gst_gl_context_is_shared</a>, function in <a class="link" href="GstGLContext.html" title="GstGLContext">GstGLContext</a>
+</dt>
+<dd></dd>
+<dt>
 <a class="link" href="GstGLContext.html#gst-gl-context-new" title="gst_gl_context_new ()">gst_gl_context_new</a>, function in <a class="link" href="GstGLContext.html" title="GstGLContext">GstGLContext</a>
 </dt>
 <dd></dd>
@@ -743,7 +1119,11 @@
 </dt>
 <dd></dd>
 <dt>
-<a class="link" href="gst-plugins-bad-libs-Utilities.html#gst-gl-context-set-error" title="gst_gl_context_set_error ()">gst_gl_context_set_error</a>, function in <a class="link" href="gst-plugins-bad-libs-Utilities.html" title="Utilities">Utilities</a>
+<a class="link" href="gst-plugins-bad-libs-OpenGL-Miscellaneous-Utilities.html#gst-gl-context-set-error" title="gst_gl_context_set_error ()">gst_gl_context_set_error</a>, function in <a class="link" href="gst-plugins-bad-libs-OpenGL-Miscellaneous-Utilities.html" title="OpenGL Miscellaneous Utilities">OpenGL Miscellaneous Utilities</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="GstGLContext.html#gst-gl-context-set-shared-with" title="gst_gl_context_set_shared_with ()">gst_gl_context_set_shared_with</a>, function in <a class="link" href="GstGLContext.html" title="GstGLContext">GstGLContext</a>
 </dt>
 <dd></dd>
 <dt>
@@ -751,11 +1131,15 @@
 </dt>
 <dd></dd>
 <dt>
+<a class="link" href="gst-plugins-bad-libs-GstGLSL.html#gst-gl-context-supports-glsl-profile-version" title="gst_gl_context_supports_glsl_profile_version ()">gst_gl_context_supports_glsl_profile_version</a>, function in <a class="link" href="gst-plugins-bad-libs-GstGLSL.html" title="GstGLSL">GstGLSL</a>
+</dt>
+<dd></dd>
+<dt>
 <a class="link" href="GstGLContext.html#gst-gl-context-thread-add" title="gst_gl_context_thread_add ()">gst_gl_context_thread_add</a>, function in <a class="link" href="GstGLContext.html" title="GstGLContext">GstGLContext</a>
 </dt>
 <dd></dd>
 <dt>
-<a class="link" href="gst-plugins-bad-libs-Utilities.html#gst-gl-context-use-fbo-v2" title="gst_gl_context_use_fbo_v2 ()">gst_gl_context_use_fbo_v2</a>, function in <a class="link" href="gst-plugins-bad-libs-Utilities.html" title="Utilities">Utilities</a>
+<a class="link" href="gst-plugins-bad-libs-OpenGL-Miscellaneous-Utilities.html#gst-gl-context-use-fbo-v2" title="gst_gl_context_use_fbo_v2 ()">gst_gl_context_use_fbo_v2</a>, function in <a class="link" href="gst-plugins-bad-libs-OpenGL-Miscellaneous-Utilities.html" title="OpenGL Miscellaneous Utilities">OpenGL Miscellaneous Utilities</a>
 </dt>
 <dd></dd>
 <dt>
@@ -779,6 +1163,10 @@
 </dt>
 <dd></dd>
 <dt>
+<a class="link" href="GstGLDisplay.html#gst-gl-display-create-context" title="gst_gl_display_create_context ()">gst_gl_display_create_context</a>, function in <a class="link" href="GstGLDisplay.html" title="GstGLDisplay">GstGLDisplay</a>
+</dt>
+<dd></dd>
+<dt>
 <a class="link" href="GstGLDisplay.html#gst-gl-display-filter-gl-api" title="gst_gl_display_filter_gl_api ()">gst_gl_display_filter_gl_api</a>, function in <a class="link" href="GstGLDisplay.html" title="GstGLDisplay">GstGLDisplay</a>
 </dt>
 <dd></dd>
@@ -803,23 +1191,7 @@
 </dt>
 <dd></dd>
 <dt>
-<a class="link" href="GstGLDownload.html#gst-gl-download-new" title="gst_gl_download_new ()">gst_gl_download_new</a>, function in <a class="link" href="GstGLDownload.html" title="GstGLDownload">GstGLDownload</a>
-</dt>
-<dd></dd>
-<dt>
-<a class="link" href="GstGLDownload.html#gst-gl-download-perform-with-data" title="gst_gl_download_perform_with_data ()">gst_gl_download_perform_with_data</a>, function in <a class="link" href="GstGLDownload.html" title="GstGLDownload">GstGLDownload</a>
-</dt>
-<dd></dd>
-<dt>
-<a class="link" href="GstGLDownload.html#gst-gl-download-set-format" title="gst_gl_download_set_format ()">gst_gl_download_set_format</a>, function in <a class="link" href="GstGLDownload.html" title="GstGLDownload">GstGLDownload</a>
-</dt>
-<dd></dd>
-<dt>
-<a class="link" href="GstGLDownload.html#gst-gl-download-transform-caps" title="gst_gl_download_transform_caps ()">gst_gl_download_transform_caps</a>, function in <a class="link" href="GstGLDownload.html" title="GstGLDownload">GstGLDownload</a>
-</dt>
-<dd></dd>
-<dt>
-<a class="link" href="gst-plugins-bad-libs-Utilities.html#gst-gl-ensure-element-data" title="gst_gl_ensure_element_data ()">gst_gl_ensure_element_data</a>, function in <a class="link" href="gst-plugins-bad-libs-Utilities.html" title="Utilities">Utilities</a>
+<a class="link" href="gst-plugins-bad-libs-OpenGL-Miscellaneous-Utilities.html#gst-gl-ensure-element-data" title="gst_gl_ensure_element_data ()">gst_gl_ensure_element_data</a>, function in <a class="link" href="gst-plugins-bad-libs-OpenGL-Miscellaneous-Utilities.html" title="OpenGL Miscellaneous Utilities">OpenGL Miscellaneous Utilities</a>
 </dt>
 <dd></dd>
 <dt>
@@ -839,6 +1211,14 @@
 </dt>
 <dd></dd>
 <dt>
+<a class="link" href="gst-plugins-bad-libs-OpenGL-Formats.html#gst-gl-format-from-gl-texture-type" title="gst_gl_format_from_gl_texture_type ()">gst_gl_format_from_gl_texture_type</a>, function in <a class="link" href="gst-plugins-bad-libs-OpenGL-Formats.html" title="OpenGL Formats">OpenGL Formats</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-bad-libs-OpenGL-Formats.html#gst-gl-format-type-n-bytes" title="gst_gl_format_type_n_bytes ()">gst_gl_format_type_n_bytes</a>, function in <a class="link" href="gst-plugins-bad-libs-OpenGL-Formats.html" title="OpenGL Formats">OpenGL Formats</a>
+</dt>
+<dd></dd>
+<dt>
 <a class="link" href="GstGLFramebuffer.html#gst-gl-framebuffer-delete" title="gst_gl_framebuffer_delete ()">gst_gl_framebuffer_delete</a>, function in <a class="link" href="GstGLFramebuffer.html" title="GstGLFramebuffer">GstGLFramebuffer</a>
 </dt>
 <dd></dd>
@@ -855,51 +1235,107 @@
 </dt>
 <dd></dd>
 <dt>
-<a class="link" href="gst-plugins-bad-libs-Utilities.html#gst-gl-generate-texture-full" title="gst_gl_generate_texture_full ()">gst_gl_generate_texture_full</a>, function in <a class="link" href="gst-plugins-bad-libs-Utilities.html" title="Utilities">Utilities</a>
+<a class="link" href="gst-plugins-bad-libs-OpenGL-Miscellaneous-Utilities.html#gst-gl-generate-texture-full" title="gst_gl_generate_texture_full ()">gst_gl_generate_texture_full</a>, function in <a class="link" href="gst-plugins-bad-libs-OpenGL-Miscellaneous-Utilities.html" title="OpenGL Miscellaneous Utilities">OpenGL Miscellaneous Utilities</a>
 </dt>
 <dd></dd>
 <dt>
-<a class="link" href="gst-plugins-bad-libs-Utilities.html#gst-gl-get-plane-data-size" title="gst_gl_get_plane_data_size ()">gst_gl_get_plane_data_size</a>, function in <a class="link" href="gst-plugins-bad-libs-Utilities.html" title="Utilities">Utilities</a>
+<a class="link" href="gst-plugins-bad-libs-OpenGL-Miscellaneous-Utilities.html#gst-gl-get-plane-data-size" title="gst_gl_get_plane_data_size ()">gst_gl_get_plane_data_size</a>, function in <a class="link" href="gst-plugins-bad-libs-OpenGL-Miscellaneous-Utilities.html" title="OpenGL Miscellaneous Utilities">OpenGL Miscellaneous Utilities</a>
 </dt>
 <dd></dd>
 <dt>
-<a class="link" href="gst-plugins-bad-libs-Utilities.html#gst-gl-handle-context-query" title="gst_gl_handle_context_query ()">gst_gl_handle_context_query</a>, function in <a class="link" href="gst-plugins-bad-libs-Utilities.html" title="Utilities">Utilities</a>
+<a class="link" href="gst-plugins-bad-libs-OpenGL-Miscellaneous-Utilities.html#gst-gl-get-plane-start" title="gst_gl_get_plane_start ()">gst_gl_get_plane_start</a>, function in <a class="link" href="gst-plugins-bad-libs-OpenGL-Miscellaneous-Utilities.html" title="OpenGL Miscellaneous Utilities">OpenGL Miscellaneous Utilities</a>
 </dt>
 <dd></dd>
 <dt>
-<a class="link" href="gst-plugins-bad-libs-Utilities.html#gst-gl-handle-set-context" title="gst_gl_handle_set_context ()">gst_gl_handle_set_context</a>, function in <a class="link" href="gst-plugins-bad-libs-Utilities.html" title="Utilities">Utilities</a>
+<a class="link" href="gst-plugins-bad-libs-OpenGL-Miscellaneous-Utilities.html#gst-gl-handle-context-query" title="gst_gl_handle_context_query ()">gst_gl_handle_context_query</a>, function in <a class="link" href="gst-plugins-bad-libs-OpenGL-Miscellaneous-Utilities.html" title="OpenGL Miscellaneous Utilities">OpenGL Miscellaneous Utilities</a>
 </dt>
 <dd></dd>
 <dt>
-<a class="link" href="gst-plugins-bad-libs-gstglmemory.html#gst-gl-memory-alloc" title="gst_gl_memory_alloc ()">gst_gl_memory_alloc</a>, function in <a class="link" href="gst-plugins-bad-libs-gstglmemory.html" title="GstGLMemory">GstGLMemory</a>
+<a class="link" href="gst-plugins-bad-libs-OpenGL-Miscellaneous-Utilities.html#gst-gl-handle-set-context" title="gst_gl_handle_set_context ()">gst_gl_handle_set_context</a>, function in <a class="link" href="gst-plugins-bad-libs-OpenGL-Miscellaneous-Utilities.html" title="OpenGL Miscellaneous Utilities">OpenGL Miscellaneous Utilities</a>
 </dt>
 <dd></dd>
 <dt>
-<a class="link" href="gst-plugins-bad-libs-gstglmemory.html#GST-GL-MEMORY-ALLOCATOR:CAPS" title="GST_GL_MEMORY_ALLOCATOR">GST_GL_MEMORY_ALLOCATOR</a>, macro in <a class="link" href="gst-plugins-bad-libs-gstglmemory.html" title="GstGLMemory">gstglmemory</a>
+<a class="link" href="gst-plugins-bad-libs-OpenGL-debugging.html#gst-gl-insert-debug-marker" title="gst_gl_insert_debug_marker ()">gst_gl_insert_debug_marker</a>, function in <a class="link" href="gst-plugins-bad-libs-OpenGL-debugging.html" title="OpenGL debugging">OpenGL Debugging</a>
 </dt>
 <dd></dd>
 <dt>
-<a class="link" href="gst-plugins-bad-libs-gstglmemory.html#gst-gl-memory-copy-into-texture" title="gst_gl_memory_copy_into_texture ()">gst_gl_memory_copy_into_texture</a>, function in <a class="link" href="gst-plugins-bad-libs-gstglmemory.html" title="GstGLMemory">GstGLMemory</a>
+<a class="link" href="gst-plugins-bad-libs-GstGLMemory.html#gst-gl-memory-allocator-get-default" title="gst_gl_memory_allocator_get_default ()">gst_gl_memory_allocator_get_default</a>, function in <a class="link" href="gst-plugins-bad-libs-GstGLMemory.html" title="GstGLMemory">GstGLMemory</a>
 </dt>
 <dd></dd>
 <dt>
-<a class="link" href="gst-plugins-bad-libs-gstglmemory.html#gst-gl-memory-init" title="gst_gl_memory_init ()">gst_gl_memory_init</a>, function in <a class="link" href="gst-plugins-bad-libs-gstglmemory.html" title="GstGLMemory">GstGLMemory</a>
+<a class="link" href="gst-plugins-bad-libs-GstGLMemory.html#GST-GL-MEMORY-ALLOCATOR-NAME:CAPS" title="GST_GL_MEMORY_ALLOCATOR_NAME">GST_GL_MEMORY_ALLOCATOR_NAME</a>, macro in <a class="link" href="gst-plugins-bad-libs-GstGLMemory.html" title="GstGLMemory">GstGLMemory</a>
 </dt>
 <dd></dd>
 <dt>
-<a class="link" href="gst-plugins-bad-libs-gstglmemory.html#gst-gl-memory-setup-buffer" title="gst_gl_memory_setup_buffer ()">gst_gl_memory_setup_buffer</a>, function in <a class="link" href="gst-plugins-bad-libs-gstglmemory.html" title="GstGLMemory">GstGLMemory</a>
+<a class="link" href="gst-plugins-bad-libs-GstGLMemory.html#gst-gl-memory-copy-into" title="gst_gl_memory_copy_into ()">gst_gl_memory_copy_into</a>, function in <a class="link" href="gst-plugins-bad-libs-GstGLMemory.html" title="GstGLMemory">GstGLMemory</a>
 </dt>
 <dd></dd>
 <dt>
-<a class="link" href="gst-plugins-bad-libs-gstglmemory.html#gst-gl-memory-setup-wrapped" title="gst_gl_memory_setup_wrapped ()">gst_gl_memory_setup_wrapped</a>, function in <a class="link" href="gst-plugins-bad-libs-gstglmemory.html" title="GstGLMemory">GstGLMemory</a>
+<a class="link" href="gst-plugins-bad-libs-GstGLMemory.html#gst-gl-memory-copy-teximage" title="gst_gl_memory_copy_teximage ()">gst_gl_memory_copy_teximage</a>, function in <a class="link" href="gst-plugins-bad-libs-GstGLMemory.html" title="GstGLMemory">GstGLMemory</a>
 </dt>
 <dd></dd>
 <dt>
-<a class="link" href="gst-plugins-bad-libs-gstglmemory.html#gst-gl-memory-wrapped" title="gst_gl_memory_wrapped ()">gst_gl_memory_wrapped</a>, function in <a class="link" href="gst-plugins-bad-libs-gstglmemory.html" title="GstGLMemory">GstGLMemory</a>
+<a class="link" href="gst-plugins-bad-libs-GstGLMemory.html#gst-gl-memory-get-texture-height" title="gst_gl_memory_get_texture_height ()">gst_gl_memory_get_texture_height</a>, function in <a class="link" href="gst-plugins-bad-libs-GstGLMemory.html" title="GstGLMemory">GstGLMemory</a>
 </dt>
 <dd></dd>
 <dt>
-<a class="link" href="gst-plugins-bad-libs-gstglmemory.html#gst-gl-memory-wrapped-texture" title="gst_gl_memory_wrapped_texture ()">gst_gl_memory_wrapped_texture</a>, function in <a class="link" href="gst-plugins-bad-libs-gstglmemory.html" title="GstGLMemory">GstGLMemory</a>
+<a class="link" href="gst-plugins-bad-libs-GstGLMemory.html#gst-gl-memory-get-texture-id" title="gst_gl_memory_get_texture_id ()">gst_gl_memory_get_texture_id</a>, function in <a class="link" href="gst-plugins-bad-libs-GstGLMemory.html" title="GstGLMemory">GstGLMemory</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-bad-libs-GstGLMemory.html#gst-gl-memory-get-texture-target" title="gst_gl_memory_get_texture_target ()">gst_gl_memory_get_texture_target</a>, function in <a class="link" href="gst-plugins-bad-libs-GstGLMemory.html" title="GstGLMemory">GstGLMemory</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-bad-libs-GstGLMemory.html#gst-gl-memory-get-texture-type" title="gst_gl_memory_get_texture_type ()">gst_gl_memory_get_texture_type</a>, function in <a class="link" href="gst-plugins-bad-libs-GstGLMemory.html" title="GstGLMemory">GstGLMemory</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-bad-libs-GstGLMemory.html#gst-gl-memory-get-texture-width" title="gst_gl_memory_get_texture_width ()">gst_gl_memory_get_texture_width</a>, function in <a class="link" href="gst-plugins-bad-libs-GstGLMemory.html" title="GstGLMemory">GstGLMemory</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-bad-libs-GstGLMemory.html#gst-gl-memory-init" title="gst_gl_memory_init ()">gst_gl_memory_init</a>, function in <a class="link" href="gst-plugins-bad-libs-GstGLMemory.html" title="GstGLMemory">GstGLMemory</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-bad-libs-GstGLMemory.html#gst-gl-memory-init-once" title="gst_gl_memory_init_once ()">gst_gl_memory_init_once</a>, function in <a class="link" href="gst-plugins-bad-libs-GstGLMemory.html" title="GstGLMemory">GstGLMemory</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-bad-libs-gstglmemorypbo.html#GST-GL-MEMORY-PBO-ALLOCATOR-NAME:CAPS" title="GST_GL_MEMORY_PBO_ALLOCATOR_NAME">GST_GL_MEMORY_PBO_ALLOCATOR_NAME</a>, macro in <a class="link" href="gst-plugins-bad-libs-gstglmemorypbo.html" title="GstGLMemoryPBO">gstglmemorypbo</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-bad-libs-gstglmemorypbo.html#gst-gl-memory-pbo-copy-into-texture" title="gst_gl_memory_pbo_copy_into_texture ()">gst_gl_memory_pbo_copy_into_texture</a>, function in <a class="link" href="gst-plugins-bad-libs-gstglmemorypbo.html" title="GstGLMemoryPBO">GstGLMemoryPBO</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-bad-libs-gstglmemorypbo.html#gst-gl-memory-pbo-download-transfer" title="gst_gl_memory_pbo_download_transfer ()">gst_gl_memory_pbo_download_transfer</a>, function in <a class="link" href="gst-plugins-bad-libs-gstglmemorypbo.html" title="GstGLMemoryPBO">GstGLMemoryPBO</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-bad-libs-gstglmemorypbo.html#gst-gl-memory-pbo-init-once" title="gst_gl_memory_pbo_init_once ()">gst_gl_memory_pbo_init_once</a>, function in <a class="link" href="gst-plugins-bad-libs-gstglmemorypbo.html" title="GstGLMemoryPBO">GstGLMemoryPBO</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-bad-libs-gstglmemorypbo.html#gst-gl-memory-pbo-upload-transfer" title="gst_gl_memory_pbo_upload_transfer ()">gst_gl_memory_pbo_upload_transfer</a>, function in <a class="link" href="gst-plugins-bad-libs-gstglmemorypbo.html" title="GstGLMemoryPBO">GstGLMemoryPBO</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-bad-libs-GstGLMemory.html#gst-gl-memory-read-pixels" title="gst_gl_memory_read_pixels ()">gst_gl_memory_read_pixels</a>, function in <a class="link" href="gst-plugins-bad-libs-GstGLMemory.html" title="GstGLMemory">GstGLMemory</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-bad-libs-GstGLMemory.html#gst-gl-memory-setup-buffer" title="gst_gl_memory_setup_buffer ()">gst_gl_memory_setup_buffer</a>, function in <a class="link" href="gst-plugins-bad-libs-GstGLMemory.html" title="GstGLMemory">GstGLMemory</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-bad-libs-GstGLMemory.html#gst-gl-memory-texsubimage" title="gst_gl_memory_texsubimage ()">gst_gl_memory_texsubimage</a>, function in <a class="link" href="gst-plugins-bad-libs-GstGLMemory.html" title="GstGLMemory">GstGLMemory</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-bad-libs-GstGLMemory.html#GST-GL-MEMORY-VIDEO-FORMATS-STR:CAPS" title="GST_GL_MEMORY_VIDEO_FORMATS_STR">GST_GL_MEMORY_VIDEO_FORMATS_STR</a>, macro in <a class="link" href="gst-plugins-bad-libs-GstGLMemory.html" title="GstGLMemory">GstGLMemory</a>
 </dt>
 <dd></dd>
 <dt>
@@ -911,199 +1347,179 @@
 </dt>
 <dd></dd>
 <dt>
-<a class="link" href="gst-plugins-bad-libs-Utilities.html#gst-gl-run-query" title="gst_gl_run_query ()">gst_gl_run_query</a>, function in <a class="link" href="gst-plugins-bad-libs-Utilities.html" title="Utilities">Utilities</a>
+<a class="link" href="gst-plugins-bad-libs-OpenGL-Miscellaneous-Utilities.html#gst-gl-run-query" title="gst_gl_run_query ()">gst_gl_run_query</a>, function in <a class="link" href="gst-plugins-bad-libs-OpenGL-Miscellaneous-Utilities.html" title="OpenGL Miscellaneous Utilities">OpenGL Miscellaneous Utilities</a>
 </dt>
 <dd></dd>
 <dt>
-<a class="link" href="gst-plugins-bad-libs-gstglshader.html#gst-gl-shadervariables-parse" title="gst_gl_shadervariables_parse ()">gst_gl_shadervariables_parse</a>, function in <a class="link" href="gst-plugins-bad-libs-gstglshader.html" title="GstGLShader">gstglshader</a>
+<a class="link" href="GstGLShader.html#gst-gl-shader-attach" title="gst_gl_shader_attach ()">gst_gl_shader_attach</a>, function in <a class="link" href="GstGLShader.html" title="GstGLShader">GstGLShader</a>
 </dt>
 <dd></dd>
 <dt>
-<a class="link" href="gst-plugins-bad-libs-gstglshader.html#gst-gl-shadervariable-desc" title="struct gst_gl_shadervariable_desc">gst_gl_shadervariable_desc</a>, struct in <a class="link" href="gst-plugins-bad-libs-gstglshader.html" title="GstGLShader">gstglshader</a>
+<a class="link" href="GstGLShader.html#gst-gl-shader-attach-unlocked" title="gst_gl_shader_attach_unlocked ()">gst_gl_shader_attach_unlocked</a>, function in <a class="link" href="GstGLShader.html" title="GstGLShader">GstGLShader</a>
 </dt>
 <dd></dd>
 <dt>
-<a class="link" href="gst-plugins-bad-libs-gstglshader.html#gst-gl-shadervariable-set" title="gst_gl_shadervariable_set ()">gst_gl_shadervariable_set</a>, function in <a class="link" href="gst-plugins-bad-libs-gstglshader.html" title="GstGLShader">gstglshader</a>
+<a class="link" href="GstGLShader.html#gst-gl-shader-bind-attribute-location" title="gst_gl_shader_bind_attribute_location ()">gst_gl_shader_bind_attribute_location</a>, function in <a class="link" href="GstGLShader.html" title="GstGLShader">GstGLShader</a>
 </dt>
 <dd></dd>
 <dt>
-<a class="link" href="gst-plugins-bad-libs-gstglshader.html#gst-gl-shader-bind-attribute-location" title="gst_gl_shader_bind_attribute_location ()">gst_gl_shader_bind_attribute_location</a>, function in <a class="link" href="gst-plugins-bad-libs-gstglshader.html" title="GstGLShader">GstGLShader</a>
+<a class="link" href="GstGLShader.html#gst-gl-shader-compile-attach-stage" title="gst_gl_shader_compile_attach_stage ()">gst_gl_shader_compile_attach_stage</a>, function in <a class="link" href="GstGLShader.html" title="GstGLShader">GstGLShader</a>
 </dt>
 <dd></dd>
 <dt>
-<a class="link" href="gst-plugins-bad-libs-gstglshader.html#gst-gl-shader-compile" title="gst_gl_shader_compile ()">gst_gl_shader_compile</a>, function in <a class="link" href="gst-plugins-bad-libs-gstglshader.html" title="GstGLShader">GstGLShader</a>
+<a class="link" href="GstGLShader.html#gst-gl-shader-detach" title="gst_gl_shader_detach ()">gst_gl_shader_detach</a>, function in <a class="link" href="GstGLShader.html" title="GstGLShader">GstGLShader</a>
 </dt>
 <dd></dd>
 <dt>
-<a class="link" href="gst-plugins-bad-libs-gstglshader.html#gst-gl-shader-compile-all-with-attribs-and-check" title="gst_gl_shader_compile_all_with_attribs_and_check ()">gst_gl_shader_compile_all_with_attribs_and_check</a>, function in <a class="link" href="gst-plugins-bad-libs-gstglshader.html" title="GstGLShader">GstGLShader</a>
+<a class="link" href="GstGLShader.html#gst-gl-shader-detach-unlocked" title="gst_gl_shader_detach_unlocked ()">gst_gl_shader_detach_unlocked</a>, function in <a class="link" href="GstGLShader.html" title="GstGLShader">GstGLShader</a>
 </dt>
 <dd></dd>
 <dt>
-<a class="link" href="gst-plugins-bad-libs-gstglshader.html#gst-gl-shader-compile-and-check" title="gst_gl_shader_compile_and_check ()">gst_gl_shader_compile_and_check</a>, function in <a class="link" href="gst-plugins-bad-libs-gstglshader.html" title="GstGLShader">GstGLShader</a>
+<a class="link" href="GstGLShader.html#gst-gl-shader-get-attribute-location" title="gst_gl_shader_get_attribute_location ()">gst_gl_shader_get_attribute_location</a>, function in <a class="link" href="GstGLShader.html" title="GstGLShader">GstGLShader</a>
 </dt>
 <dd></dd>
 <dt>
-<a class="link" href="gst-plugins-bad-libs-gstglshader.html#gst-gl-shader-compile-with-default-f-and-check" title="gst_gl_shader_compile_with_default_f_and_check ()">gst_gl_shader_compile_with_default_f_and_check</a>, function in <a class="link" href="gst-plugins-bad-libs-gstglshader.html" title="GstGLShader">GstGLShader</a>
+<a class="link" href="GstGLShader.html#gst-gl-shader-get-program-handle" title="gst_gl_shader_get_program_handle ()">gst_gl_shader_get_program_handle</a>, function in <a class="link" href="GstGLShader.html" title="GstGLShader">GstGLShader</a>
 </dt>
 <dd></dd>
 <dt>
-<a class="link" href="gst-plugins-bad-libs-gstglshader.html#gst-gl-shader-compile-with-default-vf-and-check" title="gst_gl_shader_compile_with_default_vf_and_check ()">gst_gl_shader_compile_with_default_vf_and_check</a>, function in <a class="link" href="gst-plugins-bad-libs-gstglshader.html" title="GstGLShader">GstGLShader</a>
+<a class="link" href="GstGLShader.html#gst-gl-shader-is-linked" title="gst_gl_shader_is_linked ()">gst_gl_shader_is_linked</a>, function in <a class="link" href="GstGLShader.html" title="GstGLShader">GstGLShader</a>
 </dt>
 <dd></dd>
 <dt>
-<a class="link" href="gst-plugins-bad-libs-gstglshader.html#gst-gl-shader-compile-with-default-v-and-check" title="gst_gl_shader_compile_with_default_v_and_check ()">gst_gl_shader_compile_with_default_v_and_check</a>, function in <a class="link" href="gst-plugins-bad-libs-gstglshader.html" title="GstGLShader">GstGLShader</a>
+<a class="link" href="GstGLShader.html#gst-gl-shader-link" title="gst_gl_shader_link ()">gst_gl_shader_link</a>, function in <a class="link" href="GstGLShader.html" title="GstGLShader">GstGLShader</a>
 </dt>
 <dd></dd>
 <dt>
-<a class="link" href="gst-plugins-bad-libs-gstglshader.html#GST-GL-SHADER-ERROR:CAPS" title="GST_GL_SHADER_ERROR">GST_GL_SHADER_ERROR</a>, macro in <a class="link" href="gst-plugins-bad-libs-gstglshader.html" title="GstGLShader">gstglshader</a>
+<a class="link" href="GstGLShader.html#gst-gl-shader-new" title="gst_gl_shader_new ()">gst_gl_shader_new</a>, function in <a class="link" href="GstGLShader.html" title="GstGLShader">GstGLShader</a>
 </dt>
 <dd></dd>
 <dt>
-<a class="link" href="gst-plugins-bad-libs-gstglshader.html#gst-gl-shader-error-quark" title="gst_gl_shader_error_quark ()">gst_gl_shader_error_quark</a>, function in <a class="link" href="gst-plugins-bad-libs-gstglshader.html" title="GstGLShader">gstglshader</a>
+<a class="link" href="GstGLShader.html#gst-gl-shader-new-default" title="gst_gl_shader_new_default ()">gst_gl_shader_new_default</a>, function in <a class="link" href="GstGLShader.html" title="GstGLShader">GstGLShader</a>
 </dt>
 <dd></dd>
 <dt>
-<a class="link" href="gst-plugins-bad-libs-gstglshader.html#gst-gl-shader-get-attribute-location" title="gst_gl_shader_get_attribute_location ()">gst_gl_shader_get_attribute_location</a>, function in <a class="link" href="gst-plugins-bad-libs-gstglshader.html" title="GstGLShader">GstGLShader</a>
+<a class="link" href="GstGLShader.html#gst-gl-shader-new-link-with-stages" title="gst_gl_shader_new_link_with_stages ()">gst_gl_shader_new_link_with_stages</a>, function in <a class="link" href="GstGLShader.html" title="GstGLShader">GstGLShader</a>
 </dt>
 <dd></dd>
 <dt>
-<a class="link" href="gst-plugins-bad-libs-gstglshader.html#gst-gl-shader-get-fragment-source" title="gst_gl_shader_get_fragment_source ()">gst_gl_shader_get_fragment_source</a>, function in <a class="link" href="gst-plugins-bad-libs-gstglshader.html" title="GstGLShader">GstGLShader</a>
+<a class="link" href="GstGLShader.html#gst-gl-shader-new-with-stages" title="gst_gl_shader_new_with_stages ()">gst_gl_shader_new_with_stages</a>, function in <a class="link" href="GstGLShader.html" title="GstGLShader">GstGLShader</a>
 </dt>
 <dd></dd>
 <dt>
-<a class="link" href="gst-plugins-bad-libs-gstglshader.html#gst-gl-shader-get-program-handle" title="gst_gl_shader_get_program_handle ()">gst_gl_shader_get_program_handle</a>, function in <a class="link" href="gst-plugins-bad-libs-gstglshader.html" title="GstGLShader">GstGLShader</a>
+<a class="link" href="GstGLShader.html#gst-gl-shader-release" title="gst_gl_shader_release ()">gst_gl_shader_release</a>, function in <a class="link" href="GstGLShader.html" title="GstGLShader">GstGLShader</a>
 </dt>
 <dd></dd>
 <dt>
-<a class="link" href="gst-plugins-bad-libs-gstglshader.html#gst-gl-shader-get-vertex-source" title="gst_gl_shader_get_vertex_source ()">gst_gl_shader_get_vertex_source</a>, function in <a class="link" href="gst-plugins-bad-libs-gstglshader.html" title="GstGLShader">GstGLShader</a>
+<a class="link" href="GstGLShader.html#gst-gl-shader-release-unlocked" title="gst_gl_shader_release_unlocked ()">gst_gl_shader_release_unlocked</a>, function in <a class="link" href="GstGLShader.html" title="GstGLShader">GstGLShader</a>
 </dt>
 <dd></dd>
 <dt>
-<a class="link" href="gst-plugins-bad-libs-gstglshader.html#gst-gl-shader-is-compiled" title="gst_gl_shader_is_compiled ()">gst_gl_shader_is_compiled</a>, function in <a class="link" href="gst-plugins-bad-libs-gstglshader.html" title="GstGLShader">GstGLShader</a>
+<a class="link" href="GstGLShader.html#gst-gl-shader-set-uniform-1f" title="gst_gl_shader_set_uniform_1f ()">gst_gl_shader_set_uniform_1f</a>, function in <a class="link" href="GstGLShader.html" title="GstGLShader">GstGLShader</a>
 </dt>
 <dd></dd>
 <dt>
-<a class="link" href="gst-plugins-bad-libs-gstglshader.html#gst-gl-shader-new" title="gst_gl_shader_new ()">gst_gl_shader_new</a>, function in <a class="link" href="gst-plugins-bad-libs-gstglshader.html" title="GstGLShader">GstGLShader</a>
+<a class="link" href="GstGLShader.html#gst-gl-shader-set-uniform-1fv" title="gst_gl_shader_set_uniform_1fv ()">gst_gl_shader_set_uniform_1fv</a>, function in <a class="link" href="GstGLShader.html" title="GstGLShader">GstGLShader</a>
 </dt>
 <dd></dd>
 <dt>
-<a class="link" href="gst-plugins-bad-libs-gstglshader.html#gst-gl-shader-release" title="gst_gl_shader_release ()">gst_gl_shader_release</a>, function in <a class="link" href="gst-plugins-bad-libs-gstglshader.html" title="GstGLShader">GstGLShader</a>
+<a class="link" href="GstGLShader.html#gst-gl-shader-set-uniform-1i" title="gst_gl_shader_set_uniform_1i ()">gst_gl_shader_set_uniform_1i</a>, function in <a class="link" href="GstGLShader.html" title="GstGLShader">GstGLShader</a>
 </dt>
 <dd></dd>
 <dt>
-<a class="link" href="gst-plugins-bad-libs-gstglshader.html#gst-gl-shader-set-active" title="gst_gl_shader_set_active ()">gst_gl_shader_set_active</a>, function in <a class="link" href="gst-plugins-bad-libs-gstglshader.html" title="GstGLShader">GstGLShader</a>
+<a class="link" href="GstGLShader.html#gst-gl-shader-set-uniform-1iv" title="gst_gl_shader_set_uniform_1iv ()">gst_gl_shader_set_uniform_1iv</a>, function in <a class="link" href="GstGLShader.html" title="GstGLShader">GstGLShader</a>
 </dt>
 <dd></dd>
 <dt>
-<a class="link" href="gst-plugins-bad-libs-gstglshader.html#gst-gl-shader-set-fragment-source" title="gst_gl_shader_set_fragment_source ()">gst_gl_shader_set_fragment_source</a>, function in <a class="link" href="gst-plugins-bad-libs-gstglshader.html" title="GstGLShader">GstGLShader</a>
+<a class="link" href="GstGLShader.html#gst-gl-shader-set-uniform-2f" title="gst_gl_shader_set_uniform_2f ()">gst_gl_shader_set_uniform_2f</a>, function in <a class="link" href="GstGLShader.html" title="GstGLShader">GstGLShader</a>
 </dt>
 <dd></dd>
 <dt>
-<a class="link" href="gst-plugins-bad-libs-gstglshader.html#gst-gl-shader-set-uniform-1f" title="gst_gl_shader_set_uniform_1f ()">gst_gl_shader_set_uniform_1f</a>, function in <a class="link" href="gst-plugins-bad-libs-gstglshader.html" title="GstGLShader">GstGLShader</a>
+<a class="link" href="GstGLShader.html#gst-gl-shader-set-uniform-2fv" title="gst_gl_shader_set_uniform_2fv ()">gst_gl_shader_set_uniform_2fv</a>, function in <a class="link" href="GstGLShader.html" title="GstGLShader">GstGLShader</a>
 </dt>
 <dd></dd>
 <dt>
-<a class="link" href="gst-plugins-bad-libs-gstglshader.html#gst-gl-shader-set-uniform-1fv" title="gst_gl_shader_set_uniform_1fv ()">gst_gl_shader_set_uniform_1fv</a>, function in <a class="link" href="gst-plugins-bad-libs-gstglshader.html" title="GstGLShader">GstGLShader</a>
+<a class="link" href="GstGLShader.html#gst-gl-shader-set-uniform-2i" title="gst_gl_shader_set_uniform_2i ()">gst_gl_shader_set_uniform_2i</a>, function in <a class="link" href="GstGLShader.html" title="GstGLShader">GstGLShader</a>
 </dt>
 <dd></dd>
 <dt>
-<a class="link" href="gst-plugins-bad-libs-gstglshader.html#gst-gl-shader-set-uniform-1i" title="gst_gl_shader_set_uniform_1i ()">gst_gl_shader_set_uniform_1i</a>, function in <a class="link" href="gst-plugins-bad-libs-gstglshader.html" title="GstGLShader">GstGLShader</a>
+<a class="link" href="GstGLShader.html#gst-gl-shader-set-uniform-2iv" title="gst_gl_shader_set_uniform_2iv ()">gst_gl_shader_set_uniform_2iv</a>, function in <a class="link" href="GstGLShader.html" title="GstGLShader">GstGLShader</a>
 </dt>
 <dd></dd>
 <dt>
-<a class="link" href="gst-plugins-bad-libs-gstglshader.html#gst-gl-shader-set-uniform-1iv" title="gst_gl_shader_set_uniform_1iv ()">gst_gl_shader_set_uniform_1iv</a>, function in <a class="link" href="gst-plugins-bad-libs-gstglshader.html" title="GstGLShader">GstGLShader</a>
+<a class="link" href="GstGLShader.html#gst-gl-shader-set-uniform-3f" title="gst_gl_shader_set_uniform_3f ()">gst_gl_shader_set_uniform_3f</a>, function in <a class="link" href="GstGLShader.html" title="GstGLShader">GstGLShader</a>
 </dt>
 <dd></dd>
 <dt>
-<a class="link" href="gst-plugins-bad-libs-gstglshader.html#gst-gl-shader-set-uniform-2f" title="gst_gl_shader_set_uniform_2f ()">gst_gl_shader_set_uniform_2f</a>, function in <a class="link" href="gst-plugins-bad-libs-gstglshader.html" title="GstGLShader">GstGLShader</a>
+<a class="link" href="GstGLShader.html#gst-gl-shader-set-uniform-3fv" title="gst_gl_shader_set_uniform_3fv ()">gst_gl_shader_set_uniform_3fv</a>, function in <a class="link" href="GstGLShader.html" title="GstGLShader">GstGLShader</a>
 </dt>
 <dd></dd>
 <dt>
-<a class="link" href="gst-plugins-bad-libs-gstglshader.html#gst-gl-shader-set-uniform-2fv" title="gst_gl_shader_set_uniform_2fv ()">gst_gl_shader_set_uniform_2fv</a>, function in <a class="link" href="gst-plugins-bad-libs-gstglshader.html" title="GstGLShader">GstGLShader</a>
+<a class="link" href="GstGLShader.html#gst-gl-shader-set-uniform-3i" title="gst_gl_shader_set_uniform_3i ()">gst_gl_shader_set_uniform_3i</a>, function in <a class="link" href="GstGLShader.html" title="GstGLShader">GstGLShader</a>
 </dt>
 <dd></dd>
 <dt>
-<a class="link" href="gst-plugins-bad-libs-gstglshader.html#gst-gl-shader-set-uniform-2i" title="gst_gl_shader_set_uniform_2i ()">gst_gl_shader_set_uniform_2i</a>, function in <a class="link" href="gst-plugins-bad-libs-gstglshader.html" title="GstGLShader">GstGLShader</a>
+<a class="link" href="GstGLShader.html#gst-gl-shader-set-uniform-3iv" title="gst_gl_shader_set_uniform_3iv ()">gst_gl_shader_set_uniform_3iv</a>, function in <a class="link" href="GstGLShader.html" title="GstGLShader">GstGLShader</a>
 </dt>
 <dd></dd>
 <dt>
-<a class="link" href="gst-plugins-bad-libs-gstglshader.html#gst-gl-shader-set-uniform-2iv" title="gst_gl_shader_set_uniform_2iv ()">gst_gl_shader_set_uniform_2iv</a>, function in <a class="link" href="gst-plugins-bad-libs-gstglshader.html" title="GstGLShader">GstGLShader</a>
+<a class="link" href="GstGLShader.html#gst-gl-shader-set-uniform-4f" title="gst_gl_shader_set_uniform_4f ()">gst_gl_shader_set_uniform_4f</a>, function in <a class="link" href="GstGLShader.html" title="GstGLShader">GstGLShader</a>
 </dt>
 <dd></dd>
 <dt>
-<a class="link" href="gst-plugins-bad-libs-gstglshader.html#gst-gl-shader-set-uniform-3f" title="gst_gl_shader_set_uniform_3f ()">gst_gl_shader_set_uniform_3f</a>, function in <a class="link" href="gst-plugins-bad-libs-gstglshader.html" title="GstGLShader">GstGLShader</a>
+<a class="link" href="GstGLShader.html#gst-gl-shader-set-uniform-4fv" title="gst_gl_shader_set_uniform_4fv ()">gst_gl_shader_set_uniform_4fv</a>, function in <a class="link" href="GstGLShader.html" title="GstGLShader">GstGLShader</a>
 </dt>
 <dd></dd>
 <dt>
-<a class="link" href="gst-plugins-bad-libs-gstglshader.html#gst-gl-shader-set-uniform-3fv" title="gst_gl_shader_set_uniform_3fv ()">gst_gl_shader_set_uniform_3fv</a>, function in <a class="link" href="gst-plugins-bad-libs-gstglshader.html" title="GstGLShader">GstGLShader</a>
+<a class="link" href="GstGLShader.html#gst-gl-shader-set-uniform-4i" title="gst_gl_shader_set_uniform_4i ()">gst_gl_shader_set_uniform_4i</a>, function in <a class="link" href="GstGLShader.html" title="GstGLShader">GstGLShader</a>
 </dt>
 <dd></dd>
 <dt>
-<a class="link" href="gst-plugins-bad-libs-gstglshader.html#gst-gl-shader-set-uniform-3i" title="gst_gl_shader_set_uniform_3i ()">gst_gl_shader_set_uniform_3i</a>, function in <a class="link" href="gst-plugins-bad-libs-gstglshader.html" title="GstGLShader">GstGLShader</a>
+<a class="link" href="GstGLShader.html#gst-gl-shader-set-uniform-4iv" title="gst_gl_shader_set_uniform_4iv ()">gst_gl_shader_set_uniform_4iv</a>, function in <a class="link" href="GstGLShader.html" title="GstGLShader">GstGLShader</a>
 </dt>
 <dd></dd>
 <dt>
-<a class="link" href="gst-plugins-bad-libs-gstglshader.html#gst-gl-shader-set-uniform-3iv" title="gst_gl_shader_set_uniform_3iv ()">gst_gl_shader_set_uniform_3iv</a>, function in <a class="link" href="gst-plugins-bad-libs-gstglshader.html" title="GstGLShader">GstGLShader</a>
+<a class="link" href="GstGLShader.html#gst-gl-shader-set-uniform-matrix-2fv" title="gst_gl_shader_set_uniform_matrix_2fv ()">gst_gl_shader_set_uniform_matrix_2fv</a>, function in <a class="link" href="GstGLShader.html" title="GstGLShader">GstGLShader</a>
 </dt>
 <dd></dd>
 <dt>
-<a class="link" href="gst-plugins-bad-libs-gstglshader.html#gst-gl-shader-set-uniform-4f" title="gst_gl_shader_set_uniform_4f ()">gst_gl_shader_set_uniform_4f</a>, function in <a class="link" href="gst-plugins-bad-libs-gstglshader.html" title="GstGLShader">GstGLShader</a>
+<a class="link" href="GstGLShader.html#gst-gl-shader-set-uniform-matrix-2x3fv" title="gst_gl_shader_set_uniform_matrix_2x3fv ()">gst_gl_shader_set_uniform_matrix_2x3fv</a>, function in <a class="link" href="GstGLShader.html" title="GstGLShader">GstGLShader</a>
 </dt>
 <dd></dd>
 <dt>
-<a class="link" href="gst-plugins-bad-libs-gstglshader.html#gst-gl-shader-set-uniform-4fv" title="gst_gl_shader_set_uniform_4fv ()">gst_gl_shader_set_uniform_4fv</a>, function in <a class="link" href="gst-plugins-bad-libs-gstglshader.html" title="GstGLShader">GstGLShader</a>
+<a class="link" href="GstGLShader.html#gst-gl-shader-set-uniform-matrix-2x4fv" title="gst_gl_shader_set_uniform_matrix_2x4fv ()">gst_gl_shader_set_uniform_matrix_2x4fv</a>, function in <a class="link" href="GstGLShader.html" title="GstGLShader">GstGLShader</a>
 </dt>
 <dd></dd>
 <dt>
-<a class="link" href="gst-plugins-bad-libs-gstglshader.html#gst-gl-shader-set-uniform-4i" title="gst_gl_shader_set_uniform_4i ()">gst_gl_shader_set_uniform_4i</a>, function in <a class="link" href="gst-plugins-bad-libs-gstglshader.html" title="GstGLShader">GstGLShader</a>
+<a class="link" href="GstGLShader.html#gst-gl-shader-set-uniform-matrix-3fv" title="gst_gl_shader_set_uniform_matrix_3fv ()">gst_gl_shader_set_uniform_matrix_3fv</a>, function in <a class="link" href="GstGLShader.html" title="GstGLShader">GstGLShader</a>
 </dt>
 <dd></dd>
 <dt>
-<a class="link" href="gst-plugins-bad-libs-gstglshader.html#gst-gl-shader-set-uniform-4iv" title="gst_gl_shader_set_uniform_4iv ()">gst_gl_shader_set_uniform_4iv</a>, function in <a class="link" href="gst-plugins-bad-libs-gstglshader.html" title="GstGLShader">GstGLShader</a>
+<a class="link" href="GstGLShader.html#gst-gl-shader-set-uniform-matrix-3x2fv" title="gst_gl_shader_set_uniform_matrix_3x2fv ()">gst_gl_shader_set_uniform_matrix_3x2fv</a>, function in <a class="link" href="GstGLShader.html" title="GstGLShader">GstGLShader</a>
 </dt>
 <dd></dd>
 <dt>
-<a class="link" href="gst-plugins-bad-libs-gstglshader.html#gst-gl-shader-set-uniform-matrix-2fv" title="gst_gl_shader_set_uniform_matrix_2fv ()">gst_gl_shader_set_uniform_matrix_2fv</a>, function in <a class="link" href="gst-plugins-bad-libs-gstglshader.html" title="GstGLShader">GstGLShader</a>
+<a class="link" href="GstGLShader.html#gst-gl-shader-set-uniform-matrix-3x4fv" title="gst_gl_shader_set_uniform_matrix_3x4fv ()">gst_gl_shader_set_uniform_matrix_3x4fv</a>, function in <a class="link" href="GstGLShader.html" title="GstGLShader">GstGLShader</a>
 </dt>
 <dd></dd>
 <dt>
-<a class="link" href="gst-plugins-bad-libs-gstglshader.html#gst-gl-shader-set-uniform-matrix-2x3fv" title="gst_gl_shader_set_uniform_matrix_2x3fv ()">gst_gl_shader_set_uniform_matrix_2x3fv</a>, function in <a class="link" href="gst-plugins-bad-libs-gstglshader.html" title="GstGLShader">GstGLShader</a>
+<a class="link" href="GstGLShader.html#gst-gl-shader-set-uniform-matrix-4fv" title="gst_gl_shader_set_uniform_matrix_4fv ()">gst_gl_shader_set_uniform_matrix_4fv</a>, function in <a class="link" href="GstGLShader.html" title="GstGLShader">GstGLShader</a>
 </dt>
 <dd></dd>
 <dt>
-<a class="link" href="gst-plugins-bad-libs-gstglshader.html#gst-gl-shader-set-uniform-matrix-2x4fv" title="gst_gl_shader_set_uniform_matrix_2x4fv ()">gst_gl_shader_set_uniform_matrix_2x4fv</a>, function in <a class="link" href="gst-plugins-bad-libs-gstglshader.html" title="GstGLShader">GstGLShader</a>
+<a class="link" href="GstGLShader.html#gst-gl-shader-set-uniform-matrix-4x2fv" title="gst_gl_shader_set_uniform_matrix_4x2fv ()">gst_gl_shader_set_uniform_matrix_4x2fv</a>, function in <a class="link" href="GstGLShader.html" title="GstGLShader">GstGLShader</a>
 </dt>
 <dd></dd>
 <dt>
-<a class="link" href="gst-plugins-bad-libs-gstglshader.html#gst-gl-shader-set-uniform-matrix-3fv" title="gst_gl_shader_set_uniform_matrix_3fv ()">gst_gl_shader_set_uniform_matrix_3fv</a>, function in <a class="link" href="gst-plugins-bad-libs-gstglshader.html" title="GstGLShader">GstGLShader</a>
+<a class="link" href="GstGLShader.html#gst-gl-shader-set-uniform-matrix-4x3fv" title="gst_gl_shader_set_uniform_matrix_4x3fv ()">gst_gl_shader_set_uniform_matrix_4x3fv</a>, function in <a class="link" href="GstGLShader.html" title="GstGLShader">GstGLShader</a>
 </dt>
 <dd></dd>
 <dt>
-<a class="link" href="gst-plugins-bad-libs-gstglshader.html#gst-gl-shader-set-uniform-matrix-3x2fv" title="gst_gl_shader_set_uniform_matrix_3x2fv ()">gst_gl_shader_set_uniform_matrix_3x2fv</a>, function in <a class="link" href="gst-plugins-bad-libs-gstglshader.html" title="GstGLShader">GstGLShader</a>
+<a class="link" href="GstGLShader.html#gst-gl-shader-use" title="gst_gl_shader_use ()">gst_gl_shader_use</a>, function in <a class="link" href="GstGLShader.html" title="GstGLShader">GstGLShader</a>
 </dt>
 <dd></dd>
 <dt>
-<a class="link" href="gst-plugins-bad-libs-gstglshader.html#gst-gl-shader-set-uniform-matrix-3x4fv" title="gst_gl_shader_set_uniform_matrix_3x4fv ()">gst_gl_shader_set_uniform_matrix_3x4fv</a>, function in <a class="link" href="gst-plugins-bad-libs-gstglshader.html" title="GstGLShader">GstGLShader</a>
-</dt>
-<dd></dd>
-<dt>
-<a class="link" href="gst-plugins-bad-libs-gstglshader.html#gst-gl-shader-set-uniform-matrix-4fv" title="gst_gl_shader_set_uniform_matrix_4fv ()">gst_gl_shader_set_uniform_matrix_4fv</a>, function in <a class="link" href="gst-plugins-bad-libs-gstglshader.html" title="GstGLShader">GstGLShader</a>
-</dt>
-<dd></dd>
-<dt>
-<a class="link" href="gst-plugins-bad-libs-gstglshader.html#gst-gl-shader-set-uniform-matrix-4x2fv" title="gst_gl_shader_set_uniform_matrix_4x2fv ()">gst_gl_shader_set_uniform_matrix_4x2fv</a>, function in <a class="link" href="gst-plugins-bad-libs-gstglshader.html" title="GstGLShader">GstGLShader</a>
-</dt>
-<dd></dd>
-<dt>
-<a class="link" href="gst-plugins-bad-libs-gstglshader.html#gst-gl-shader-set-uniform-matrix-4x3fv" title="gst_gl_shader_set_uniform_matrix_4x3fv ()">gst_gl_shader_set_uniform_matrix_4x3fv</a>, function in <a class="link" href="gst-plugins-bad-libs-gstglshader.html" title="GstGLShader">GstGLShader</a>
-</dt>
-<dd></dd>
-<dt>
-<a class="link" href="gst-plugins-bad-libs-gstglshader.html#gst-gl-shader-set-vertex-source" title="gst_gl_shader_set_vertex_source ()">gst_gl_shader_set_vertex_source</a>, function in <a class="link" href="gst-plugins-bad-libs-gstglshader.html" title="GstGLShader">GstGLShader</a>
-</dt>
-<dd></dd>
-<dt>
-<a class="link" href="gst-plugins-bad-libs-gstglshader.html#gst-gl-shader-use" title="gst_gl_shader_use ()">gst_gl_shader_use</a>, function in <a class="link" href="gst-plugins-bad-libs-gstglshader.html" title="GstGLShader">GstGLShader</a>
+<a class="link" href="gst-plugins-bad-libs-OpenGL-Formats.html#gst-gl-sized-gl-format-from-gl-format-type" title="gst_gl_sized_gl_format_from_gl_format_type ()">gst_gl_sized_gl_format_from_gl_format_type</a>, function in <a class="link" href="gst-plugins-bad-libs-OpenGL-Formats.html" title="OpenGL Formats">OpenGL Formats</a>
 </dt>
 <dd></dd>
 <dt>
@@ -1123,7 +1539,47 @@
 </dt>
 <dd></dd>
 <dt>
-<a class="link" href="gst-plugins-bad-libs-gstglmemory.html#gst-gl-texture-type-from-format" title="gst_gl_texture_type_from_format ()">gst_gl_texture_type_from_format</a>, function in <a class="link" href="gst-plugins-bad-libs-gstglmemory.html" title="GstGLMemory">GstGLMemory</a>
+<a class="link" href="gst-plugins-bad-libs-GstGLSyncMeta.html#gst-gl-sync-meta-wait-cpu" title="gst_gl_sync_meta_wait_cpu ()">gst_gl_sync_meta_wait_cpu</a>, function in <a class="link" href="gst-plugins-bad-libs-GstGLSyncMeta.html" title="GstGLSyncMeta">GstGLSyncMeta</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-bad-libs-OpenGL-Formats.html#GST-GL-TEXTURE-TARGET-2D-STR:CAPS" title="GST_GL_TEXTURE_TARGET_2D_STR">GST_GL_TEXTURE_TARGET_2D_STR</a>, macro in <a class="link" href="gst-plugins-bad-libs-OpenGL-Formats.html" title="OpenGL Formats">OpenGL Formats</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-bad-libs-OpenGL-Formats.html#GST-GL-TEXTURE-TARGET-EXTERNAL-OES-STR:CAPS" title="GST_GL_TEXTURE_TARGET_EXTERNAL_OES_STR">GST_GL_TEXTURE_TARGET_EXTERNAL_OES_STR</a>, macro in <a class="link" href="gst-plugins-bad-libs-OpenGL-Formats.html" title="OpenGL Formats">OpenGL Formats</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-bad-libs-OpenGL-Formats.html#gst-gl-texture-target-from-gl" title="gst_gl_texture_target_from_gl ()">gst_gl_texture_target_from_gl</a>, function in <a class="link" href="gst-plugins-bad-libs-OpenGL-Formats.html" title="OpenGL Formats">OpenGL Formats</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-bad-libs-OpenGL-Formats.html#gst-gl-texture-target-from-string" title="gst_gl_texture_target_from_string ()">gst_gl_texture_target_from_string</a>, function in <a class="link" href="gst-plugins-bad-libs-OpenGL-Formats.html" title="OpenGL Formats">OpenGL Formats</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-bad-libs-OpenGL-Formats.html#GST-GL-TEXTURE-TARGET-RECTANGLE-STR:CAPS" title="GST_GL_TEXTURE_TARGET_RECTANGLE_STR">GST_GL_TEXTURE_TARGET_RECTANGLE_STR</a>, macro in <a class="link" href="gst-plugins-bad-libs-OpenGL-Formats.html" title="OpenGL Formats">OpenGL Formats</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-bad-libs-OpenGL-Formats.html#gst-gl-texture-target-to-buffer-pool-option" title="gst_gl_texture_target_to_buffer_pool_option ()">gst_gl_texture_target_to_buffer_pool_option</a>, function in <a class="link" href="gst-plugins-bad-libs-OpenGL-Formats.html" title="OpenGL Formats">OpenGL Formats</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-bad-libs-OpenGL-Formats.html#gst-gl-texture-target-to-gl" title="gst_gl_texture_target_to_gl ()">gst_gl_texture_target_to_gl</a>, function in <a class="link" href="gst-plugins-bad-libs-OpenGL-Formats.html" title="OpenGL Formats">OpenGL Formats</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-bad-libs-OpenGL-Formats.html#gst-gl-texture-target-to-string" title="gst_gl_texture_target_to_string ()">gst_gl_texture_target_to_string</a>, function in <a class="link" href="gst-plugins-bad-libs-OpenGL-Formats.html" title="OpenGL Formats">OpenGL Formats</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-bad-libs-OpenGL-Formats.html#gst-gl-texture-type-from-format" title="gst_gl_texture_type_from_format ()">gst_gl_texture_type_from_format</a>, function in <a class="link" href="gst-plugins-bad-libs-OpenGL-Formats.html" title="OpenGL Formats">OpenGL Formats</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-bad-libs-OpenGL-Formats.html#gst-gl-texture-type-n-bytes" title="gst_gl_texture_type_n_bytes ()">gst_gl_texture_type_n_bytes</a>, function in <a class="link" href="gst-plugins-bad-libs-OpenGL-Formats.html" title="OpenGL Formats">OpenGL Formats</a>
 </dt>
 <dd></dd>
 <dt>
@@ -1131,19 +1587,7 @@
 </dt>
 <dd></dd>
 <dt>
-<a class="link" href="GstGLUploadMeta.html#gst-gl-upload-meta-add-to-buffer" title="gst_gl_upload_meta_add_to_buffer ()">gst_gl_upload_meta_add_to_buffer</a>, function in <a class="link" href="GstGLUploadMeta.html" title="GstGLUploadMeta">GstGLUploadMeta</a>
-</dt>
-<dd></dd>
-<dt>
-<a class="link" href="GstGLUploadMeta.html#gst-gl-upload-meta-get-format" title="gst_gl_upload_meta_get_format ()">gst_gl_upload_meta_get_format</a>, function in <a class="link" href="GstGLUploadMeta.html" title="GstGLUploadMeta">GstGLUploadMeta</a>
-</dt>
-<dd></dd>
-<dt>
-<a class="link" href="GstGLUploadMeta.html#gst-gl-upload-meta-new" title="gst_gl_upload_meta_new ()">gst_gl_upload_meta_new</a>, function in <a class="link" href="GstGLUploadMeta.html" title="GstGLUploadMeta">GstGLUploadMeta</a>
-</dt>
-<dd></dd>
-<dt>
-<a class="link" href="GstGLUploadMeta.html#gst-gl-upload-meta-set-format" title="gst_gl_upload_meta_set_format ()">gst_gl_upload_meta_set_format</a>, function in <a class="link" href="GstGLUploadMeta.html" title="GstGLUploadMeta">GstGLUploadMeta</a>
+<a class="link" href="GstGLUpload.html#gst-gl-upload-get-input-template-caps" title="gst_gl_upload_get_input_template_caps ()">gst_gl_upload_get_input_template_caps</a>, function in <a class="link" href="GstGLUpload.html" title="GstGLUpload">GstGLUpload</a>
 </dt>
 <dd></dd>
 <dt>
@@ -1159,10 +1603,6 @@
 </dt>
 <dd></dd>
 <dt>
-<a class="link" href="GstGLUpload.html#gst-gl-upload-release-buffer" title="gst_gl_upload_release_buffer ()">gst_gl_upload_release_buffer</a>, function in <a class="link" href="GstGLUpload.html" title="GstGLUpload">GstGLUpload</a>
-</dt>
-<dd></dd>
-<dt>
 <a class="link" href="GstGLUpload.html#gst-gl-upload-set-caps" title="gst_gl_upload_set_caps ()">gst_gl_upload_set_caps</a>, function in <a class="link" href="GstGLUpload.html" title="GstGLUpload">GstGLUpload</a>
 </dt>
 <dd></dd>
@@ -1171,6 +1611,82 @@
 </dt>
 <dd></dd>
 <dt>
+<a class="link" href="gst-plugins-bad-libs-OpenGL-Miscellaneous-Utilities.html#gst-gl-value-get-texture-target-mask" title="gst_gl_value_get_texture_target_mask ()">gst_gl_value_get_texture_target_mask</a>, function in <a class="link" href="gst-plugins-bad-libs-OpenGL-Miscellaneous-Utilities.html" title="OpenGL Miscellaneous Utilities">OpenGL Miscellaneous Utilities</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-bad-libs-OpenGL-Miscellaneous-Utilities.html#gst-gl-value-set-texture-target" title="gst_gl_value_set_texture_target ()">gst_gl_value_set_texture_target</a>, function in <a class="link" href="gst-plugins-bad-libs-OpenGL-Miscellaneous-Utilities.html" title="OpenGL Miscellaneous Utilities">OpenGL Miscellaneous Utilities</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-bad-libs-OpenGL-Miscellaneous-Utilities.html#gst-gl-value-set-texture-target-from-mask" title="gst_gl_value_set_texture_target_from_mask ()">gst_gl_value_set_texture_target_from_mask</a>, function in <a class="link" href="gst-plugins-bad-libs-OpenGL-Miscellaneous-Utilities.html" title="OpenGL Miscellaneous Utilities">OpenGL Miscellaneous Utilities</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-bad-libs-GstGLSL.html#gst-gl-version-to-glsl-version" title="gst_gl_version_to_glsl_version ()">gst_gl_version_to_glsl_version</a>, function in <a class="link" href="gst-plugins-bad-libs-GstGLSL.html" title="GstGLSL">GstGLSL</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-bad-libs-GstGLMemory.html#gst-gl-video-allocation-params-copy-data" title="gst_gl_video_allocation_params_copy_data ()">gst_gl_video_allocation_params_copy_data</a>, function in <a class="link" href="gst-plugins-bad-libs-GstGLMemory.html" title="GstGLMemory">GstGLMemory</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-bad-libs-GstGLMemory.html#gst-gl-video-allocation-params-free-data" title="gst_gl_video_allocation_params_free_data ()">gst_gl_video_allocation_params_free_data</a>, function in <a class="link" href="gst-plugins-bad-libs-GstGLMemory.html" title="GstGLMemory">GstGLMemory</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-bad-libs-GstGLMemory.html#gst-gl-video-allocation-params-init-full" title="gst_gl_video_allocation_params_init_full ()">gst_gl_video_allocation_params_init_full</a>, function in <a class="link" href="gst-plugins-bad-libs-GstGLMemory.html" title="GstGLMemory">GstGLMemory</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-bad-libs-GstGLMemory.html#gst-gl-video-allocation-params-new" title="gst_gl_video_allocation_params_new ()">gst_gl_video_allocation_params_new</a>, function in <a class="link" href="gst-plugins-bad-libs-GstGLMemory.html" title="GstGLMemory">GstGLMemory</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-bad-libs-GstGLMemory.html#gst-gl-video-allocation-params-new-wrapped-data" title="gst_gl_video_allocation_params_new_wrapped_data ()">gst_gl_video_allocation_params_new_wrapped_data</a>, function in <a class="link" href="gst-plugins-bad-libs-GstGLMemory.html" title="GstGLMemory">GstGLMemory</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-bad-libs-GstGLMemory.html#gst-gl-video-allocation-params-new-wrapped-texture" title="gst_gl_video_allocation_params_new_wrapped_texture ()">gst_gl_video_allocation_params_new_wrapped_texture</a>, function in <a class="link" href="gst-plugins-bad-libs-GstGLMemory.html" title="GstGLMemory">GstGLMemory</a>
+</dt>
+<dd></dd>
+<dt>
+gst_gl_view_convert_fixate_caps, function in GstGLViewConvert
+</dt>
+<dd></dd>
+<dt>
+gst_gl_view_convert_get_output, function in GstGLViewConvert
+</dt>
+<dd></dd>
+<dt>
+gst_gl_view_convert_new, function in GstGLViewConvert
+</dt>
+<dd></dd>
+<dt>
+gst_gl_view_convert_perform, function in GstGLViewConvert
+</dt>
+<dd></dd>
+<dt>
+gst_gl_view_convert_reset, function in GstGLViewConvert
+</dt>
+<dd></dd>
+<dt>
+gst_gl_view_convert_set_caps, function in GstGLViewConvert
+</dt>
+<dd></dd>
+<dt>
+gst_gl_view_convert_set_context, function in GstGLViewConvert
+</dt>
+<dd></dd>
+<dt>
+gst_gl_view_convert_submit_input_buffer, function in GstGLViewConvert
+</dt>
+<dd></dd>
+<dt>
+gst_gl_view_convert_transform_caps, function in GstGLViewConvert
+</dt>
+<dd></dd>
+<dt>
 <a class="link" href="gst-plugins-bad-libs-GstGLWindowAndroid.html#gst-gl-window-android-egl-new" title="gst_gl_window_android_egl_new ()">gst_gl_window_android_egl_new</a>, function in <a class="link" href="gst-plugins-bad-libs-GstGLWindowAndroid.html" title="GstGLWindowAndroid">GstGLWindowAndroid</a>
 </dt>
 <dd></dd>
@@ -1195,10 +1711,6 @@
 </dt>
 <dd></dd>
 <dt>
-<a class="link" href="GstGLWindow.html#gst-gl-window-draw-unlocked" title="gst_gl_window_draw_unlocked ()">gst_gl_window_draw_unlocked</a>, function in <a class="link" href="GstGLWindow.html" title="GstGLWindow">GstGLWindow</a>
-</dt>
-<dd></dd>
-<dt>
 <a class="link" href="GstGLWindow.html#GST-GL-WINDOW-ERROR:CAPS" title="GST_GL_WINDOW_ERROR">GST_GL_WINDOW_ERROR</a>, macro in <a class="link" href="GstGLWindow.html" title="GstGLWindow">GstGLWindow</a>
 </dt>
 <dd></dd>
@@ -1541,7 +2053,19 @@
 </dt>
 <dd></dd>
 <dt>
-<a class="link" href="gst-plugins-bad-libs-gstglmemory.html#gst-is-gl-memory" title="gst_is_gl_memory ()">gst_is_gl_memory</a>, function in <a class="link" href="gst-plugins-bad-libs-gstglmemory.html" title="GstGLMemory">GstGLMemory</a>
+<a class="link" href="gst-plugins-bad-libs-gstglbasememory.html#gst-is-gl-base-memory" title="gst_is_gl_base_memory ()">gst_is_gl_base_memory</a>, function in <a class="link" href="gst-plugins-bad-libs-gstglbasememory.html" title="GstGLBaseMemory">GstGLBaseMemory</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-bad-libs-GstGLBuffer.html#gst-is-gl-buffer" title="gst_is_gl_buffer ()">gst_is_gl_buffer</a>, function in <a class="link" href="gst-plugins-bad-libs-GstGLBuffer.html" title="GstGLBuffer">GstGLBuffer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-bad-libs-GstGLMemory.html#gst-is-gl-memory" title="gst_is_gl_memory ()">gst_is_gl_memory</a>, function in <a class="link" href="gst-plugins-bad-libs-GstGLMemory.html" title="GstGLMemory">GstGLMemory</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-bad-libs-gstglmemorypbo.html#gst-is-gl-memory-pbo" title="gst_is_gl_memory_pbo ()">gst_is_gl_memory_pbo</a>, function in <a class="link" href="gst-plugins-bad-libs-gstglmemorypbo.html" title="GstGLMemoryPBO">GstGLMemoryPBO</a>
 </dt>
 <dd></dd>
 <a name="idxJ"></a><h3 class="title">J</h3>
@@ -1655,6 +2179,10 @@
 <dd></dd>
 <a name="idxM"></a><h3 class="title">M</h3>
 <dt>
+<a class="link" href="gst-plugins-bad-libs-gstglbasememory.html#GST-MAP-GL:CAPS" title="GST_MAP_GL">GST_MAP_GL</a>, macro in <a class="link" href="gst-plugins-bad-libs-gstglbasememory.html" title="GstGLBaseMemory">gstglbasememory</a>
+</dt>
+<dd></dd>
+<dt>
 <a class="link" href="gst-plugins-bad-libs-vc1parser.html#MAX-HRD-NUM-LEAKY-BUCKETS:CAPS" title="MAX_HRD_NUM_LEAKY_BUCKETS">MAX_HRD_NUM_LEAKY_BUCKETS</a>, macro in <a class="link" href="gst-plugins-bad-libs-vc1parser.html" title="vc1parser">vc1parser</a>
 </dt>
 <dd></dd>
@@ -2771,6 +3299,486 @@
 <a class="link" href="gst-plugins-bad-libs-GstPhotography.html#GST-PHOTOGRAPHY-SHAKE-RISK:CAPS" title="GST_PHOTOGRAPHY_SHAKE_RISK">GST_PHOTOGRAPHY_SHAKE_RISK</a>, macro in <a class="link" href="gst-plugins-bad-libs-GstPhotography.html" title="GstPhotography">GstPhotography</a>
 </dt>
 <dd></dd>
+<dt>
+<a class="link" href="gst-plugins-bad-libs-gstplayer.html#GstPlayer-struct" title="GstPlayer">GstPlayer</a>, struct in <a class="link" href="gst-plugins-bad-libs-gstplayer.html" title="gstplayer">gstplayer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-bad-libs-gstplayer.html#GstPlayer-buffering" title="The “buffering” signal">GstPlayer::buffering</a>, object signal in <a class="link" href="gst-plugins-bad-libs-gstplayer.html" title="gstplayer">gstplayer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-bad-libs-gstplayer.html#GstPlayer-duration-changed" title="The “duration-changed” signal">GstPlayer::duration-changed</a>, object signal in <a class="link" href="gst-plugins-bad-libs-gstplayer.html" title="gstplayer">gstplayer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-bad-libs-gstplayer.html#GstPlayer-end-of-stream" title="The “end-of-stream” signal">GstPlayer::end-of-stream</a>, object signal in <a class="link" href="gst-plugins-bad-libs-gstplayer.html" title="gstplayer">gstplayer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-bad-libs-gstplayer.html#GstPlayer-error" title="The “error” signal">GstPlayer::error</a>, object signal in <a class="link" href="gst-plugins-bad-libs-gstplayer.html" title="gstplayer">gstplayer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-bad-libs-gstplayer.html#GstPlayer-media-info-updated" title="The “media-info-updated” signal">GstPlayer::media-info-updated</a>, object signal in <a class="link" href="gst-plugins-bad-libs-gstplayer.html" title="gstplayer">gstplayer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-bad-libs-gstplayer.html#GstPlayer-mute-changed" title="The “mute-changed” signal">GstPlayer::mute-changed</a>, object signal in <a class="link" href="gst-plugins-bad-libs-gstplayer.html" title="gstplayer">gstplayer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-bad-libs-gstplayer.html#GstPlayer-position-updated" title="The “position-updated” signal">GstPlayer::position-updated</a>, object signal in <a class="link" href="gst-plugins-bad-libs-gstplayer.html" title="gstplayer">gstplayer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-bad-libs-gstplayer.html#GstPlayer-seek-done" title="The “seek-done” signal">GstPlayer::seek-done</a>, object signal in <a class="link" href="gst-plugins-bad-libs-gstplayer.html" title="gstplayer">gstplayer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-bad-libs-gstplayer.html#GstPlayer-state-changed" title="The “state-changed” signal">GstPlayer::state-changed</a>, object signal in <a class="link" href="gst-plugins-bad-libs-gstplayer.html" title="gstplayer">gstplayer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-bad-libs-gstplayer.html#GstPlayer-video-dimensions-changed" title="The “video-dimensions-changed” signal">GstPlayer::video-dimensions-changed</a>, object signal in <a class="link" href="gst-plugins-bad-libs-gstplayer.html" title="gstplayer">gstplayer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-bad-libs-gstplayer.html#GstPlayer-volume-changed" title="The “volume-changed” signal">GstPlayer::volume-changed</a>, object signal in <a class="link" href="gst-plugins-bad-libs-gstplayer.html" title="gstplayer">gstplayer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-bad-libs-gstplayer.html#GstPlayer-warning" title="The “warning” signal">GstPlayer::warning</a>, object signal in <a class="link" href="gst-plugins-bad-libs-gstplayer.html" title="gstplayer">gstplayer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-bad-libs-gstplayer.html#GstPlayer--current-audio-track" title="The “current-audio-track” property">GstPlayer:current-audio-track</a>, object property in <a class="link" href="gst-plugins-bad-libs-gstplayer.html" title="gstplayer">gstplayer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-bad-libs-gstplayer.html#GstPlayer--current-subtitle-track" title="The “current-subtitle-track” property">GstPlayer:current-subtitle-track</a>, object property in <a class="link" href="gst-plugins-bad-libs-gstplayer.html" title="gstplayer">gstplayer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-bad-libs-gstplayer.html#GstPlayer--current-video-track" title="The “current-video-track” property">GstPlayer:current-video-track</a>, object property in <a class="link" href="gst-plugins-bad-libs-gstplayer.html" title="gstplayer">gstplayer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-bad-libs-gstplayer.html#GstPlayer--duration" title="The “duration” property">GstPlayer:duration</a>, object property in <a class="link" href="gst-plugins-bad-libs-gstplayer.html" title="gstplayer">gstplayer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-bad-libs-gstplayer.html#GstPlayer--media-info" title="The “media-info” property">GstPlayer:media-info</a>, object property in <a class="link" href="gst-plugins-bad-libs-gstplayer.html" title="gstplayer">gstplayer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-bad-libs-gstplayer.html#GstPlayer--mute" title="The “mute” property">GstPlayer:mute</a>, object property in <a class="link" href="gst-plugins-bad-libs-gstplayer.html" title="gstplayer">gstplayer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-bad-libs-gstplayer.html#GstPlayer--pipeline" title="The “pipeline” property">GstPlayer:pipeline</a>, object property in <a class="link" href="gst-plugins-bad-libs-gstplayer.html" title="gstplayer">gstplayer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-bad-libs-gstplayer.html#GstPlayer--position" title="The “position” property">GstPlayer:position</a>, object property in <a class="link" href="gst-plugins-bad-libs-gstplayer.html" title="gstplayer">gstplayer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-bad-libs-gstplayer.html#GstPlayer--position-update-interval" title="The “position-update-interval” property">GstPlayer:position-update-interval</a>, object property in <a class="link" href="gst-plugins-bad-libs-gstplayer.html" title="gstplayer">gstplayer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-bad-libs-gstplayer.html#GstPlayer--rate" title="The “rate” property">GstPlayer:rate</a>, object property in <a class="link" href="gst-plugins-bad-libs-gstplayer.html" title="gstplayer">gstplayer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-bad-libs-gstplayer.html#GstPlayer--signal-dispatcher" title="The “signal-dispatcher” property">GstPlayer:signal-dispatcher</a>, object property in <a class="link" href="gst-plugins-bad-libs-gstplayer.html" title="gstplayer">gstplayer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-bad-libs-gstplayer.html#GstPlayer--suburi" title="The “suburi” property">GstPlayer:suburi</a>, object property in <a class="link" href="gst-plugins-bad-libs-gstplayer.html" title="gstplayer">gstplayer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-bad-libs-gstplayer.html#GstPlayer--uri" title="The “uri” property">GstPlayer:uri</a>, object property in <a class="link" href="gst-plugins-bad-libs-gstplayer.html" title="gstplayer">gstplayer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-bad-libs-gstplayer.html#GstPlayer--video-renderer" title="The “video-renderer” property">GstPlayer:video-renderer</a>, object property in <a class="link" href="gst-plugins-bad-libs-gstplayer.html" title="gstplayer">gstplayer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-bad-libs-gstplayer.html#GstPlayer--volume" title="The “volume” property">GstPlayer:volume</a>, object property in <a class="link" href="gst-plugins-bad-libs-gstplayer.html" title="gstplayer">gstplayer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-bad-libs-gstplayer-mediainfo.html#GstPlayerAudioInfo-struct" title="GstPlayerAudioInfo">GstPlayerAudioInfo</a>, struct in <a class="link" href="gst-plugins-bad-libs-gstplayer-mediainfo.html" title="gstplayer-mediainfo">gstplayer-mediainfo</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-bad-libs-gstplayer.html#GstPlayerColorBalanceType" title="enum GstPlayerColorBalanceType">GstPlayerColorBalanceType</a>, enum in <a class="link" href="gst-plugins-bad-libs-gstplayer.html" title="gstplayer">gstplayer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-bad-libs-gstplayer.html#GstPlayerError" title="enum GstPlayerError">GstPlayerError</a>, enum in <a class="link" href="gst-plugins-bad-libs-gstplayer.html" title="gstplayer">gstplayer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-bad-libs-gstplayer-mediainfo.html#GstPlayerMediaInfo-struct" title="GstPlayerMediaInfo">GstPlayerMediaInfo</a>, struct in <a class="link" href="gst-plugins-bad-libs-gstplayer-mediainfo.html" title="gstplayer-mediainfo">gstplayer-mediainfo</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-bad-libs-gstplayer.html#GstPlayerSignalDispatcher-struct" title="GstPlayerSignalDispatcher">GstPlayerSignalDispatcher</a>, struct in <a class="link" href="gst-plugins-bad-libs-gstplayer.html" title="gstplayer">gstplayer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-bad-libs-gstplayer.html#GstPlayerSignalDispatcherInterface" title="struct GstPlayerSignalDispatcherInterface">GstPlayerSignalDispatcherInterface</a>, struct in <a class="link" href="gst-plugins-bad-libs-gstplayer.html" title="gstplayer">gstplayer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-bad-libs-gstplayer.html#GstPlayerState" title="enum GstPlayerState">GstPlayerState</a>, enum in <a class="link" href="gst-plugins-bad-libs-gstplayer.html" title="gstplayer">gstplayer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-bad-libs-gstplayer-mediainfo.html#GstPlayerStreamInfo-struct" title="GstPlayerStreamInfo">GstPlayerStreamInfo</a>, struct in <a class="link" href="gst-plugins-bad-libs-gstplayer-mediainfo.html" title="gstplayer-mediainfo">gstplayer-mediainfo</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-bad-libs-gstplayer-mediainfo.html#GstPlayerSubtitleInfo-struct" title="GstPlayerSubtitleInfo">GstPlayerSubtitleInfo</a>, struct in <a class="link" href="gst-plugins-bad-libs-gstplayer-mediainfo.html" title="gstplayer-mediainfo">gstplayer-mediainfo</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-bad-libs-gstplayer-mediainfo.html#GstPlayerVideoInfo-struct" title="GstPlayerVideoInfo">GstPlayerVideoInfo</a>, struct in <a class="link" href="gst-plugins-bad-libs-gstplayer-mediainfo.html" title="gstplayer-mediainfo">gstplayer-mediainfo</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-bad-libs-gstplayer.html#GstPlayerVideoRenderer-struct" title="GstPlayerVideoRenderer">GstPlayerVideoRenderer</a>, struct in <a class="link" href="gst-plugins-bad-libs-gstplayer.html" title="gstplayer">gstplayer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-bad-libs-gstplayer.html#GstPlayerVideoRendererInterface" title="struct GstPlayerVideoRendererInterface">GstPlayerVideoRendererInterface</a>, struct in <a class="link" href="gst-plugins-bad-libs-gstplayer.html" title="gstplayer">gstplayer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-bad-libs-gstplayer-visualization.html#GstPlayerVisualization-struct" title="struct GstPlayerVisualization">GstPlayerVisualization</a>, struct in <a class="link" href="gst-plugins-bad-libs-gstplayer-visualization.html" title="gstplayer-visualization">gstplayer-visualization</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-bad-libs-gstplayer-mediainfo.html#gst-player-audio-info-get-bitrate" title="gst_player_audio_info_get_bitrate ()">gst_player_audio_info_get_bitrate</a>, function in <a class="link" href="gst-plugins-bad-libs-gstplayer-mediainfo.html" title="gstplayer-mediainfo">gstplayer-mediainfo</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-bad-libs-gstplayer-mediainfo.html#gst-player-audio-info-get-channels" title="gst_player_audio_info_get_channels ()">gst_player_audio_info_get_channels</a>, function in <a class="link" href="gst-plugins-bad-libs-gstplayer-mediainfo.html" title="gstplayer-mediainfo">gstplayer-mediainfo</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-bad-libs-gstplayer-mediainfo.html#gst-player-audio-info-get-language" title="gst_player_audio_info_get_language ()">gst_player_audio_info_get_language</a>, function in <a class="link" href="gst-plugins-bad-libs-gstplayer-mediainfo.html" title="gstplayer-mediainfo">gstplayer-mediainfo</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-bad-libs-gstplayer-mediainfo.html#gst-player-audio-info-get-max-bitrate" title="gst_player_audio_info_get_max_bitrate ()">gst_player_audio_info_get_max_bitrate</a>, function in <a class="link" href="gst-plugins-bad-libs-gstplayer-mediainfo.html" title="gstplayer-mediainfo">gstplayer-mediainfo</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-bad-libs-gstplayer-mediainfo.html#gst-player-audio-info-get-sample-rate" title="gst_player_audio_info_get_sample_rate ()">gst_player_audio_info_get_sample_rate</a>, function in <a class="link" href="gst-plugins-bad-libs-gstplayer-mediainfo.html" title="gstplayer-mediainfo">gstplayer-mediainfo</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-bad-libs-gstplayer.html#gst-player-color-balance-type-get-name" title="gst_player_color_balance_type_get_name ()">gst_player_color_balance_type_get_name</a>, function in <a class="link" href="gst-plugins-bad-libs-gstplayer.html" title="gstplayer">gstplayer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-bad-libs-gstplayer.html#GST-PLAYER-ERROR:CAPS" title="GST_PLAYER_ERROR">GST_PLAYER_ERROR</a>, macro in <a class="link" href="gst-plugins-bad-libs-gstplayer.html" title="gstplayer">gstplayer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-bad-libs-gstplayer.html#gst-player-error-get-name" title="gst_player_error_get_name ()">gst_player_error_get_name</a>, function in <a class="link" href="gst-plugins-bad-libs-gstplayer.html" title="gstplayer">gstplayer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-bad-libs-gstplayer.html#gst-player-get-audio-streams" title="gst_player_get_audio_streams ()">gst_player_get_audio_streams</a>, function in <a class="link" href="gst-plugins-bad-libs-gstplayer.html" title="gstplayer">gstplayer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-bad-libs-gstplayer.html#gst-player-get-color-balance" title="gst_player_get_color_balance ()">gst_player_get_color_balance</a>, function in <a class="link" href="gst-plugins-bad-libs-gstplayer.html" title="gstplayer">gstplayer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-bad-libs-gstplayer.html#gst-player-get-current-audio-track" title="gst_player_get_current_audio_track ()">gst_player_get_current_audio_track</a>, function in <a class="link" href="gst-plugins-bad-libs-gstplayer.html" title="gstplayer">gstplayer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-bad-libs-gstplayer.html#gst-player-get-current-subtitle-track" title="gst_player_get_current_subtitle_track ()">gst_player_get_current_subtitle_track</a>, function in <a class="link" href="gst-plugins-bad-libs-gstplayer.html" title="gstplayer">gstplayer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-bad-libs-gstplayer.html#gst-player-get-current-video-track" title="gst_player_get_current_video_track ()">gst_player_get_current_video_track</a>, function in <a class="link" href="gst-plugins-bad-libs-gstplayer.html" title="gstplayer">gstplayer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-bad-libs-gstplayer.html#gst-player-get-current-visualization" title="gst_player_get_current_visualization ()">gst_player_get_current_visualization</a>, function in <a class="link" href="gst-plugins-bad-libs-gstplayer.html" title="gstplayer">gstplayer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-bad-libs-gstplayer.html#gst-player-get-duration" title="gst_player_get_duration ()">gst_player_get_duration</a>, function in <a class="link" href="gst-plugins-bad-libs-gstplayer.html" title="gstplayer">gstplayer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-bad-libs-gstplayer.html#gst-player-get-media-info" title="gst_player_get_media_info ()">gst_player_get_media_info</a>, function in <a class="link" href="gst-plugins-bad-libs-gstplayer.html" title="gstplayer">gstplayer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-bad-libs-gstplayer.html#gst-player-get-mute" title="gst_player_get_mute ()">gst_player_get_mute</a>, function in <a class="link" href="gst-plugins-bad-libs-gstplayer.html" title="gstplayer">gstplayer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-bad-libs-gstplayer.html#gst-player-get-pipeline" title="gst_player_get_pipeline ()">gst_player_get_pipeline</a>, function in <a class="link" href="gst-plugins-bad-libs-gstplayer.html" title="gstplayer">gstplayer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-bad-libs-gstplayer.html#gst-player-get-position" title="gst_player_get_position ()">gst_player_get_position</a>, function in <a class="link" href="gst-plugins-bad-libs-gstplayer.html" title="gstplayer">gstplayer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-bad-libs-gstplayer.html#gst-player-get-position-update-interval" title="gst_player_get_position_update_interval ()">gst_player_get_position_update_interval</a>, function in <a class="link" href="gst-plugins-bad-libs-gstplayer.html" title="gstplayer">gstplayer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-bad-libs-gstplayer.html#gst-player-get-rate" title="gst_player_get_rate ()">gst_player_get_rate</a>, function in <a class="link" href="gst-plugins-bad-libs-gstplayer.html" title="gstplayer">gstplayer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-bad-libs-gstplayer.html#gst-player-get-subtitle-streams" title="gst_player_get_subtitle_streams ()">gst_player_get_subtitle_streams</a>, function in <a class="link" href="gst-plugins-bad-libs-gstplayer.html" title="gstplayer">gstplayer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-bad-libs-gstplayer.html#gst-player-get-subtitle-uri" title="gst_player_get_subtitle_uri ()">gst_player_get_subtitle_uri</a>, function in <a class="link" href="gst-plugins-bad-libs-gstplayer.html" title="gstplayer">gstplayer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-bad-libs-gstplayer.html#gst-player-get-uri" title="gst_player_get_uri ()">gst_player_get_uri</a>, function in <a class="link" href="gst-plugins-bad-libs-gstplayer.html" title="gstplayer">gstplayer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-bad-libs-gstplayer.html#gst-player-get-video-streams" title="gst_player_get_video_streams ()">gst_player_get_video_streams</a>, function in <a class="link" href="gst-plugins-bad-libs-gstplayer.html" title="gstplayer">gstplayer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-bad-libs-gstplayer.html#gst-player-get-volume" title="gst_player_get_volume ()">gst_player_get_volume</a>, function in <a class="link" href="gst-plugins-bad-libs-gstplayer.html" title="gstplayer">gstplayer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-bad-libs-gstplayer-gmaincontextsignaldispatcher.html#gst-player-g-main-context-signal-dispatcher-new" title="gst_player_g_main_context_signal_dispatcher_new ()">gst_player_g_main_context_signal_dispatcher_new</a>, function in <a class="link" href="gst-plugins-bad-libs-gstplayer-gmaincontextsignaldispatcher.html" title="gstplayer-gmaincontextsignaldispatcher">gstplayer-gmaincontextsignaldispatcher</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-bad-libs-gstplayer.html#gst-player-has-color-balance" title="gst_player_has_color_balance ()">gst_player_has_color_balance</a>, function in <a class="link" href="gst-plugins-bad-libs-gstplayer.html" title="gstplayer">gstplayer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-bad-libs-gstplayer-mediainfo.html#gst-player-media-info-get-container-format" title="gst_player_media_info_get_container_format ()">gst_player_media_info_get_container_format</a>, function in <a class="link" href="gst-plugins-bad-libs-gstplayer-mediainfo.html" title="gstplayer-mediainfo">gstplayer-mediainfo</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-bad-libs-gstplayer-mediainfo.html#gst-player-media-info-get-duration" title="gst_player_media_info_get_duration ()">gst_player_media_info_get_duration</a>, function in <a class="link" href="gst-plugins-bad-libs-gstplayer-mediainfo.html" title="gstplayer-mediainfo">gstplayer-mediainfo</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-bad-libs-gstplayer-mediainfo.html#gst-player-media-info-get-image-sample" title="gst_player_media_info_get_image_sample ()">gst_player_media_info_get_image_sample</a>, function in <a class="link" href="gst-plugins-bad-libs-gstplayer-mediainfo.html" title="gstplayer-mediainfo">gstplayer-mediainfo</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-bad-libs-gstplayer-mediainfo.html#gst-player-media-info-get-stream-list" title="gst_player_media_info_get_stream_list ()">gst_player_media_info_get_stream_list</a>, function in <a class="link" href="gst-plugins-bad-libs-gstplayer-mediainfo.html" title="gstplayer-mediainfo">gstplayer-mediainfo</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-bad-libs-gstplayer-mediainfo.html#gst-player-media-info-get-tags" title="gst_player_media_info_get_tags ()">gst_player_media_info_get_tags</a>, function in <a class="link" href="gst-plugins-bad-libs-gstplayer-mediainfo.html" title="gstplayer-mediainfo">gstplayer-mediainfo</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-bad-libs-gstplayer-mediainfo.html#gst-player-media-info-get-title" title="gst_player_media_info_get_title ()">gst_player_media_info_get_title</a>, function in <a class="link" href="gst-plugins-bad-libs-gstplayer-mediainfo.html" title="gstplayer-mediainfo">gstplayer-mediainfo</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-bad-libs-gstplayer-mediainfo.html#gst-player-media-info-get-uri" title="gst_player_media_info_get_uri ()">gst_player_media_info_get_uri</a>, function in <a class="link" href="gst-plugins-bad-libs-gstplayer-mediainfo.html" title="gstplayer-mediainfo">gstplayer-mediainfo</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-bad-libs-gstplayer-mediainfo.html#gst-player-media-info-is-seekable" title="gst_player_media_info_is_seekable ()">gst_player_media_info_is_seekable</a>, function in <a class="link" href="gst-plugins-bad-libs-gstplayer-mediainfo.html" title="gstplayer-mediainfo">gstplayer-mediainfo</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-bad-libs-gstplayer.html#gst-player-new" title="gst_player_new ()">gst_player_new</a>, function in <a class="link" href="gst-plugins-bad-libs-gstplayer.html" title="gstplayer">gstplayer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-bad-libs-gstplayer.html#gst-player-pause" title="gst_player_pause ()">gst_player_pause</a>, function in <a class="link" href="gst-plugins-bad-libs-gstplayer.html" title="gstplayer">gstplayer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-bad-libs-gstplayer.html#gst-player-play" title="gst_player_play ()">gst_player_play</a>, function in <a class="link" href="gst-plugins-bad-libs-gstplayer.html" title="gstplayer">gstplayer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-bad-libs-gstplayer.html#gst-player-seek" title="gst_player_seek ()">gst_player_seek</a>, function in <a class="link" href="gst-plugins-bad-libs-gstplayer.html" title="gstplayer">gstplayer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-bad-libs-gstplayer.html#gst-player-set-audio-track" title="gst_player_set_audio_track ()">gst_player_set_audio_track</a>, function in <a class="link" href="gst-plugins-bad-libs-gstplayer.html" title="gstplayer">gstplayer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-bad-libs-gstplayer.html#gst-player-set-audio-track-enabled" title="gst_player_set_audio_track_enabled ()">gst_player_set_audio_track_enabled</a>, function in <a class="link" href="gst-plugins-bad-libs-gstplayer.html" title="gstplayer">gstplayer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-bad-libs-gstplayer.html#gst-player-set-color-balance" title="gst_player_set_color_balance ()">gst_player_set_color_balance</a>, function in <a class="link" href="gst-plugins-bad-libs-gstplayer.html" title="gstplayer">gstplayer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-bad-libs-gstplayer.html#gst-player-set-mute" title="gst_player_set_mute ()">gst_player_set_mute</a>, function in <a class="link" href="gst-plugins-bad-libs-gstplayer.html" title="gstplayer">gstplayer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-bad-libs-gstplayer.html#gst-player-set-position-update-interval" title="gst_player_set_position_update_interval ()">gst_player_set_position_update_interval</a>, function in <a class="link" href="gst-plugins-bad-libs-gstplayer.html" title="gstplayer">gstplayer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-bad-libs-gstplayer.html#gst-player-set-rate" title="gst_player_set_rate ()">gst_player_set_rate</a>, function in <a class="link" href="gst-plugins-bad-libs-gstplayer.html" title="gstplayer">gstplayer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-bad-libs-gstplayer.html#gst-player-set-subtitle-track" title="gst_player_set_subtitle_track ()">gst_player_set_subtitle_track</a>, function in <a class="link" href="gst-plugins-bad-libs-gstplayer.html" title="gstplayer">gstplayer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-bad-libs-gstplayer.html#gst-player-set-subtitle-track-enabled" title="gst_player_set_subtitle_track_enabled ()">gst_player_set_subtitle_track_enabled</a>, function in <a class="link" href="gst-plugins-bad-libs-gstplayer.html" title="gstplayer">gstplayer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-bad-libs-gstplayer.html#gst-player-set-subtitle-uri" title="gst_player_set_subtitle_uri ()">gst_player_set_subtitle_uri</a>, function in <a class="link" href="gst-plugins-bad-libs-gstplayer.html" title="gstplayer">gstplayer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-bad-libs-gstplayer.html#gst-player-set-uri" title="gst_player_set_uri ()">gst_player_set_uri</a>, function in <a class="link" href="gst-plugins-bad-libs-gstplayer.html" title="gstplayer">gstplayer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-bad-libs-gstplayer.html#gst-player-set-video-track" title="gst_player_set_video_track ()">gst_player_set_video_track</a>, function in <a class="link" href="gst-plugins-bad-libs-gstplayer.html" title="gstplayer">gstplayer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-bad-libs-gstplayer.html#gst-player-set-video-track-enabled" title="gst_player_set_video_track_enabled ()">gst_player_set_video_track_enabled</a>, function in <a class="link" href="gst-plugins-bad-libs-gstplayer.html" title="gstplayer">gstplayer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-bad-libs-gstplayer.html#gst-player-set-visualization" title="gst_player_set_visualization ()">gst_player_set_visualization</a>, function in <a class="link" href="gst-plugins-bad-libs-gstplayer.html" title="gstplayer">gstplayer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-bad-libs-gstplayer.html#gst-player-set-visualization-enabled" title="gst_player_set_visualization_enabled ()">gst_player_set_visualization_enabled</a>, function in <a class="link" href="gst-plugins-bad-libs-gstplayer.html" title="gstplayer">gstplayer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-bad-libs-gstplayer.html#gst-player-set-volume" title="gst_player_set_volume ()">gst_player_set_volume</a>, function in <a class="link" href="gst-plugins-bad-libs-gstplayer.html" title="gstplayer">gstplayer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-bad-libs-gstplayer.html#gst-player-state-get-name" title="gst_player_state_get_name ()">gst_player_state_get_name</a>, function in <a class="link" href="gst-plugins-bad-libs-gstplayer.html" title="gstplayer">gstplayer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-bad-libs-gstplayer.html#gst-player-stop" title="gst_player_stop ()">gst_player_stop</a>, function in <a class="link" href="gst-plugins-bad-libs-gstplayer.html" title="gstplayer">gstplayer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-bad-libs-gstplayer-mediainfo.html#gst-player-stream-info-get-caps" title="gst_player_stream_info_get_caps ()">gst_player_stream_info_get_caps</a>, function in <a class="link" href="gst-plugins-bad-libs-gstplayer-mediainfo.html" title="gstplayer-mediainfo">gstplayer-mediainfo</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-bad-libs-gstplayer-mediainfo.html#gst-player-stream-info-get-codec" title="gst_player_stream_info_get_codec ()">gst_player_stream_info_get_codec</a>, function in <a class="link" href="gst-plugins-bad-libs-gstplayer-mediainfo.html" title="gstplayer-mediainfo">gstplayer-mediainfo</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-bad-libs-gstplayer-mediainfo.html#gst-player-stream-info-get-index" title="gst_player_stream_info_get_index ()">gst_player_stream_info_get_index</a>, function in <a class="link" href="gst-plugins-bad-libs-gstplayer-mediainfo.html" title="gstplayer-mediainfo">gstplayer-mediainfo</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-bad-libs-gstplayer-mediainfo.html#gst-player-stream-info-get-stream-type" title="gst_player_stream_info_get_stream_type ()">gst_player_stream_info_get_stream_type</a>, function in <a class="link" href="gst-plugins-bad-libs-gstplayer-mediainfo.html" title="gstplayer-mediainfo">gstplayer-mediainfo</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-bad-libs-gstplayer-mediainfo.html#gst-player-stream-info-get-tags" title="gst_player_stream_info_get_tags ()">gst_player_stream_info_get_tags</a>, function in <a class="link" href="gst-plugins-bad-libs-gstplayer-mediainfo.html" title="gstplayer-mediainfo">gstplayer-mediainfo</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-bad-libs-gstplayer-mediainfo.html#gst-player-subtitle-info-get-language" title="gst_player_subtitle_info_get_language ()">gst_player_subtitle_info_get_language</a>, function in <a class="link" href="gst-plugins-bad-libs-gstplayer-mediainfo.html" title="gstplayer-mediainfo">gstplayer-mediainfo</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-bad-libs-gstplayer-mediainfo.html#gst-player-video-info-get-bitrate" title="gst_player_video_info_get_bitrate ()">gst_player_video_info_get_bitrate</a>, function in <a class="link" href="gst-plugins-bad-libs-gstplayer-mediainfo.html" title="gstplayer-mediainfo">gstplayer-mediainfo</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-bad-libs-gstplayer-mediainfo.html#gst-player-video-info-get-framerate" title="gst_player_video_info_get_framerate ()">gst_player_video_info_get_framerate</a>, function in <a class="link" href="gst-plugins-bad-libs-gstplayer-mediainfo.html" title="gstplayer-mediainfo">gstplayer-mediainfo</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-bad-libs-gstplayer-mediainfo.html#gst-player-video-info-get-height" title="gst_player_video_info_get_height ()">gst_player_video_info_get_height</a>, function in <a class="link" href="gst-plugins-bad-libs-gstplayer-mediainfo.html" title="gstplayer-mediainfo">gstplayer-mediainfo</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-bad-libs-gstplayer-mediainfo.html#gst-player-video-info-get-max-bitrate" title="gst_player_video_info_get_max_bitrate ()">gst_player_video_info_get_max_bitrate</a>, function in <a class="link" href="gst-plugins-bad-libs-gstplayer-mediainfo.html" title="gstplayer-mediainfo">gstplayer-mediainfo</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-bad-libs-gstplayer-mediainfo.html#gst-player-video-info-get-pixel-aspect-ratio" title="gst_player_video_info_get_pixel_aspect_ratio ()">gst_player_video_info_get_pixel_aspect_ratio</a>, function in <a class="link" href="gst-plugins-bad-libs-gstplayer-mediainfo.html" title="gstplayer-mediainfo">gstplayer-mediainfo</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-bad-libs-gstplayer-mediainfo.html#gst-player-video-info-get-width" title="gst_player_video_info_get_width ()">gst_player_video_info_get_width</a>, function in <a class="link" href="gst-plugins-bad-libs-gstplayer-mediainfo.html" title="gstplayer-mediainfo">gstplayer-mediainfo</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-bad-libs-gstplayer-videooverlayvideorenderer.html#gst-player-video-overlay-video-renderer-expose" title="gst_player_video_overlay_video_renderer_expose ()">gst_player_video_overlay_video_renderer_expose</a>, function in <a class="link" href="gst-plugins-bad-libs-gstplayer-videooverlayvideorenderer.html" title="gstplayer-videooverlayvideorenderer">gstplayer-videooverlayvideorenderer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-bad-libs-gstplayer-videooverlayvideorenderer.html#gst-player-video-overlay-video-renderer-get-render-rectangle" title="gst_player_video_overlay_video_renderer_get_render_rectangle ()">gst_player_video_overlay_video_renderer_get_render_rectangle</a>, function in <a class="link" href="gst-plugins-bad-libs-gstplayer-videooverlayvideorenderer.html" title="gstplayer-videooverlayvideorenderer">gstplayer-videooverlayvideorenderer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-bad-libs-gstplayer-videooverlayvideorenderer.html#gst-player-video-overlay-video-renderer-get-window-handle" title="gst_player_video_overlay_video_renderer_get_window_handle ()">gst_player_video_overlay_video_renderer_get_window_handle</a>, function in <a class="link" href="gst-plugins-bad-libs-gstplayer-videooverlayvideorenderer.html" title="gstplayer-videooverlayvideorenderer">gstplayer-videooverlayvideorenderer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-bad-libs-gstplayer-videooverlayvideorenderer.html#gst-player-video-overlay-video-renderer-new" title="gst_player_video_overlay_video_renderer_new ()">gst_player_video_overlay_video_renderer_new</a>, function in <a class="link" href="gst-plugins-bad-libs-gstplayer-videooverlayvideorenderer.html" title="gstplayer-videooverlayvideorenderer">gstplayer-videooverlayvideorenderer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-bad-libs-gstplayer-videooverlayvideorenderer.html#gst-player-video-overlay-video-renderer-set-render-rectangle" title="gst_player_video_overlay_video_renderer_set_render_rectangle ()">gst_player_video_overlay_video_renderer_set_render_rectangle</a>, function in <a class="link" href="gst-plugins-bad-libs-gstplayer-videooverlayvideorenderer.html" title="gstplayer-videooverlayvideorenderer">gstplayer-videooverlayvideorenderer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-bad-libs-gstplayer-videooverlayvideorenderer.html#gst-player-video-overlay-video-renderer-set-window-handle" title="gst_player_video_overlay_video_renderer_set_window_handle ()">gst_player_video_overlay_video_renderer_set_window_handle</a>, function in <a class="link" href="gst-plugins-bad-libs-gstplayer-videooverlayvideorenderer.html" title="gstplayer-videooverlayvideorenderer">gstplayer-videooverlayvideorenderer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-bad-libs-gstplayer-visualization.html#gst-player-visualizations-free" title="gst_player_visualizations_free ()">gst_player_visualizations_free</a>, function in <a class="link" href="gst-plugins-bad-libs-gstplayer-visualization.html" title="gstplayer-visualization">gstplayer-visualization</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-bad-libs-gstplayer-visualization.html#gst-player-visualizations-get" title="gst_player_visualizations_get ()">gst_player_visualizations_get</a>, function in <a class="link" href="gst-plugins-bad-libs-gstplayer-visualization.html" title="gstplayer-visualization">gstplayer-visualization</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-bad-libs-gstplayer-visualization.html#gst-player-visualization-copy" title="gst_player_visualization_copy ()">gst_player_visualization_copy</a>, function in <a class="link" href="gst-plugins-bad-libs-gstplayer-visualization.html" title="gstplayer-visualization">gstplayer-visualization</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-bad-libs-gstplayer-visualization.html#gst-player-visualization-free" title="gst_player_visualization_free ()">gst_player_visualization_free</a>, function in <a class="link" href="gst-plugins-bad-libs-gstplayer-visualization.html" title="gstplayer-visualization">gstplayer-visualization</a>
+</dt>
+<dd></dd>
 <a name="idxT"></a><h3 class="title">T</h3>
 <dt>
 GST_TYPE_CAMERABIN_MODE, macro in gstcamerabin-enum
diff --git a/docs/libs/html/base.html b/docs/libs/html/base.html
index 4e4f768..ee826c0 100644
--- a/docs/libs/html/base.html
+++ b/docs/libs/html/base.html
@@ -3,7 +3,7 @@
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>GStreamer Base classes from gst-plugins-bad: GStreamer Bad Plugins 1.0 Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
 <link rel="home" href="index.html" title="GStreamer Bad Plugins 1.0 Library Reference Manual">
 <link rel="up" href="gstreamer-plugins-bad.html" title="Part I. GStreamer Bad Plugins Libraries">
 <link rel="prev" href="gst-plugins-bad-libs-GstInsertbin.html" title="GstInsertbin">
diff --git a/docs/libs/html/ch07.html b/docs/libs/html/ch08.html
similarity index 81%
rename from docs/libs/html/ch07.html
rename to docs/libs/html/ch08.html
index b6170a0..5f145ee 100644
--- a/docs/libs/html/ch07.html
+++ b/docs/libs/html/ch08.html
@@ -3,10 +3,10 @@
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Interfaces: GStreamer Bad Plugins 1.0 Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
 <link rel="home" href="index.html" title="GStreamer Bad Plugins 1.0 Library Reference Manual">
 <link rel="up" href="gstreamer-plugins-bad.html" title="Part I. GStreamer Bad Plugins Libraries">
-<link rel="prev" href="gst-plugins-bad-libs-GstGLWindowX11.html" title="GstGLWindowX11">
+<link rel="prev" href="gst-plugins-bad-libs-gstplayer-visualization.html" title="gstplayer-visualization">
 <link rel="next" href="gst-plugins-bad-libs-GstPhotography.html" title="GstPhotography">
 <meta name="generator" content="GTK-Doc V1.24 (XML mode)">
 <link rel="stylesheet" href="style.css" type="text/css">
@@ -16,12 +16,12 @@
 <td width="100%" align="left" class="shortcuts"></td>
 <td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
 <td><a accesskey="u" href="gstreamer-plugins-bad.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
-<td><a accesskey="p" href="gst-plugins-bad-libs-GstGLWindowX11.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
+<td><a accesskey="p" href="gst-plugins-bad-libs-gstplayer-visualization.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
 <td><a accesskey="n" href="gst-plugins-bad-libs-GstPhotography.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
 </tr></table>
 <div class="chapter">
 <div class="titlepage"><div><div><h2 class="title">
-<a name="id-1.2.10"></a>Interfaces</h2></div></div></div>
+<a name="id-1.2.11"></a>Interfaces</h2></div></div></div>
 <div class="toc"><dl class="toc"><dt>
 <span class="refentrytitle"><a href="gst-plugins-bad-libs-GstPhotography.html">GstPhotography</a></span><span class="refpurpose"> — Interface for digital image capture elements</span>
 </dt></dl></div>
diff --git a/docs/libs/html/codecparsers.html b/docs/libs/html/codecparsers.html
index a776dea..1259078 100644
--- a/docs/libs/html/codecparsers.html
+++ b/docs/libs/html/codecparsers.html
@@ -3,7 +3,7 @@
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Bitstream parsing Library: GStreamer Bad Plugins 1.0 Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
 <link rel="home" href="index.html" title="GStreamer Bad Plugins 1.0 Library Reference Manual">
 <link rel="up" href="gstreamer-plugins-bad.html" title="Part I. GStreamer Bad Plugins Libraries">
 <link rel="prev" href="compiling.html" title="Compiling">
diff --git a/docs/libs/html/compiling.html b/docs/libs/html/compiling.html
index be3610f..c9ca33b 100644
--- a/docs/libs/html/compiling.html
+++ b/docs/libs/html/compiling.html
@@ -3,7 +3,7 @@
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Compiling: GStreamer Bad Plugins 1.0 Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
 <link rel="home" href="index.html" title="GStreamer Bad Plugins 1.0 Library Reference Manual">
 <link rel="up" href="gstreamer-plugins-bad.html" title="Part I. GStreamer Bad Plugins Libraries">
 <link rel="prev" href="gstreamer-plugins-bad.html" title="Part I. GStreamer Bad Plugins Libraries">
diff --git a/docs/libs/html/gl.html b/docs/libs/html/gl.html
index 039616a..fc74edc 100644
--- a/docs/libs/html/gl.html
+++ b/docs/libs/html/gl.html
@@ -3,7 +3,7 @@
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>OpenGL Helper Library: GStreamer Bad Plugins 1.0 Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
 <link rel="home" href="index.html" title="GStreamer Bad Plugins 1.0 Library Reference Manual">
 <link rel="up" href="gstreamer-plugins-bad.html" title="Part I. GStreamer Bad Plugins Libraries">
 <link rel="prev" href="gst-plugins-bad-libs-GstVideoAggregatorPad.html" title="GstVideoAggregatorPad">
@@ -27,6 +27,15 @@
 <span class="refentrytitle"><a href="gst-plugins-bad-libs-GstGLAPI.html">GstGLAPI</a></span><span class="refpurpose"></span>
 </dt>
 <dt>
+<span class="refentrytitle"><a href="gst-plugins-bad-libs-gstglbasememory.html">GstGLBaseMemory</a></span><span class="refpurpose"> — memory subclass for GL buffers</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="GstGLBaseFilter.html">GstGLBaseFilter</a></span><span class="refpurpose"> — <span class="type">GstBaseTransform</span> subclass for transformin OpenGL resources</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-bad-libs-GstGLBuffer.html">GstGLBuffer</a></span><span class="refpurpose"> — memory subclass for GL buffers</span>
+</dt>
+<dt>
 <span class="refentrytitle"><a href="GstGLBufferPool.html">GstGLBufferPool</a></span><span class="refpurpose"> — buffer pool for <span class="type">GstGLMemory</span> objects</span>
 </dt>
 <dt>
@@ -54,25 +63,28 @@
 <span class="refentrytitle"><a href="GstGLDisplay.html">GstGLDisplay</a></span><span class="refpurpose"> — window system display connection abstraction</span>
 </dt>
 <dt>
-<span class="refentrytitle"><a href="GstGLDownload.html">GstGLDownload</a></span><span class="refpurpose"> — an object that downloads GL textures</span>
-</dt>
-<dt>
 <span class="refentrytitle"><a href="gst-plugins-bad-libs-GstEGLImageMemory.html">GstEGLImageMemory</a></span><span class="refpurpose"></span>
 </dt>
 <dt>
-<span class="refentrytitle"><a href="GstGLBaseFilter.html">GstGLBaseFilter</a></span><span class="refpurpose"></span>
-</dt>
-<dt>
 <span class="refentrytitle"><a href="GstGLFilter.html">GstGLFilter</a></span><span class="refpurpose"></span>
 </dt>
 <dt>
 <span class="refentrytitle"><a href="GstGLFramebuffer.html">GstGLFramebuffer</a></span><span class="refpurpose"></span>
 </dt>
 <dt>
-<span class="refentrytitle"><a href="gst-plugins-bad-libs-gstglmemory.html">GstGLMemory</a></span><span class="refpurpose"> — memory subclass for GL textures</span>
+<span class="refentrytitle"><a href="gst-plugins-bad-libs-GstGLMemory.html">GstGLMemory</a></span><span class="refpurpose"> — memory subclass for GL textures</span>
 </dt>
 <dt>
-<span class="refentrytitle"><a href="gst-plugins-bad-libs-gstglshader.html">GstGLShader</a></span><span class="refpurpose"></span>
+<span class="refentrytitle"><a href="gst-plugins-bad-libs-gstglmemorypbo.html">GstGLMemoryPBO</a></span><span class="refpurpose"> — memory subclass for GL textures</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="GstGLShader.html">GstGLShader</a></span><span class="refpurpose"> — object representing an OpenGL shader program</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-bad-libs-GstGLSL.html">GstGLSL</a></span><span class="refpurpose"> — helpers for dealing with OpenGL shaders</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href=".html">GstGLSLStage</a></span><span class="refpurpose"> — object for dealing with OpenGL shader stages</span>
 </dt>
 <dt>
 <span class="refentrytitle"><a href="gst-plugins-bad-libs-GstGLSyncMeta.html">GstGLSyncMeta</a></span><span class="refpurpose"></span>
@@ -81,12 +93,6 @@
 <span class="refentrytitle"><a href="GstGLUpload.html">GstGLUpload</a></span><span class="refpurpose"> — an object that uploads to GL textures</span>
 </dt>
 <dt>
-<span class="refentrytitle"><a href="GstGLUploadMeta.html">GstGLUploadMeta</a></span><span class="refpurpose"> — an object that provides <span class="type">GstVideoGLTextureUploadMeta</span></span>
-</dt>
-<dt>
-<span class="refentrytitle"><a href="gst-plugins-bad-libs-Utilities.html">Utilities</a></span><span class="refpurpose"></span>
-</dt>
-<dt>
 <span class="refentrytitle"><a href="GstGLWindow.html">GstGLWindow</a></span><span class="refpurpose"> — window/surface abstraction</span>
 </dt>
 <dt>
@@ -107,6 +113,15 @@
 <dt>
 <span class="refentrytitle"><a href="gst-plugins-bad-libs-GstGLWindowX11.html">GstGLWindowX11</a></span><span class="refpurpose"></span>
 </dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-bad-libs-OpenGL-debugging.html">OpenGL debugging</a></span><span class="refpurpose"> — helper routines for dealing with OpenGL debugging</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-bad-libs-OpenGL-Miscellaneous-Utilities.html">OpenGL Miscellaneous Utilities</a></span><span class="refpurpose"></span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-bad-libs-OpenGL-Formats.html">OpenGL Formats</a></span><span class="refpurpose"></span>
+</dt>
 </dl></div>
 </div>
 <div class="footer">
diff --git a/docs/libs/html/gst-plugins-bad-libs-1.0.devhelp2 b/docs/libs/html/gst-plugins-bad-libs-1.0.devhelp2
index 8cb0c8b..b92d1bf 100644
--- a/docs/libs/html/gst-plugins-bad-libs-1.0.devhelp2
+++ b/docs/libs/html/gst-plugins-bad-libs-1.0.devhelp2
@@ -34,6 +34,9 @@
       </sub>
       <sub name="OpenGL Helper Library" link="gl.html">
         <sub name="GstGLAPI" link="gst-plugins-bad-libs-GstGLAPI.html"/>
+        <sub name="GstGLBaseMemory" link="gst-plugins-bad-libs-gstglbasememory.html"/>
+        <sub name="GstGLBaseFilter" link="GstGLBaseFilter.html"/>
+        <sub name="GstGLBuffer" link="gst-plugins-bad-libs-GstGLBuffer.html"/>
         <sub name="GstGLBufferPool" link="GstGLBufferPool.html"/>
         <sub name="GstGLColorConvert" link="GstGLColorConvert.html"/>
         <sub name="GstGLContext" link="GstGLContext.html"/>
@@ -43,17 +46,16 @@
         <sub name="GstGLContextGLX" link="gst-plugins-bad-libs-GstGLContextGLX.html"/>
         <sub name="GstGLContextWGL" link="gst-plugins-bad-libs-GstGLContextWGL.html"/>
         <sub name="GstGLDisplay" link="GstGLDisplay.html"/>
-        <sub name="GstGLDownload" link="GstGLDownload.html"/>
         <sub name="GstEGLImageMemory" link="gst-plugins-bad-libs-GstEGLImageMemory.html"/>
-        <sub name="GstGLBaseFilter" link="GstGLBaseFilter.html"/>
         <sub name="GstGLFilter" link="GstGLFilter.html"/>
         <sub name="GstGLFramebuffer" link="GstGLFramebuffer.html"/>
-        <sub name="GstGLMemory" link="gst-plugins-bad-libs-gstglmemory.html"/>
-        <sub name="GstGLShader" link="gst-plugins-bad-libs-gstglshader.html"/>
+        <sub name="GstGLMemory" link="gst-plugins-bad-libs-GstGLMemory.html"/>
+        <sub name="GstGLMemoryPBO" link="gst-plugins-bad-libs-gstglmemorypbo.html"/>
+        <sub name="GstGLShader" link="GstGLShader.html"/>
+        <sub name="GstGLSL" link="gst-plugins-bad-libs-GstGLSL.html"/>
+        <sub name="GstGLSLStage" link=".html"/>
         <sub name="GstGLSyncMeta" link="gst-plugins-bad-libs-GstGLSyncMeta.html"/>
         <sub name="GstGLUpload" link="GstGLUpload.html"/>
-        <sub name="GstGLUploadMeta" link="GstGLUploadMeta.html"/>
-        <sub name="Utilities" link="gst-plugins-bad-libs-Utilities.html"/>
         <sub name="GstGLWindow" link="GstGLWindow.html"/>
         <sub name="GstGLWindowAndroid" link="gst-plugins-bad-libs-GstGLWindowAndroid.html"/>
         <sub name="GstGLWindowCocoa" link="gst-plugins-bad-libs-GstGLWindowCocoa.html"/>
@@ -61,8 +63,18 @@
         <sub name="GstGLWindowWayland" link="gst-plugins-bad-libs-GstGLWindowWayland.html"/>
         <sub name="GstGLWindowWin32" link="gst-plugins-bad-libs-GstGLWindowWin32.html"/>
         <sub name="GstGLWindowX11" link="gst-plugins-bad-libs-GstGLWindowX11.html"/>
+        <sub name="OpenGL debugging" link="gst-plugins-bad-libs-OpenGL-debugging.html"/>
+        <sub name="OpenGL Miscellaneous Utilities" link="gst-plugins-bad-libs-OpenGL-Miscellaneous-Utilities.html"/>
+        <sub name="OpenGL Formats" link="gst-plugins-bad-libs-OpenGL-Formats.html"/>
       </sub>
-      <sub name="Interfaces" link="ch07.html">
+      <sub name="Player Library" link="player.html">
+        <sub name="gstplayer" link="gst-plugins-bad-libs-gstplayer.html"/>
+        <sub name="gstplayer-mediainfo" link="gst-plugins-bad-libs-gstplayer-mediainfo.html"/>
+        <sub name="gstplayer-gmaincontextsignaldispatcher" link="gst-plugins-bad-libs-gstplayer-gmaincontextsignaldispatcher.html"/>
+        <sub name="gstplayer-videooverlayvideorenderer" link="gst-plugins-bad-libs-gstplayer-videooverlayvideorenderer.html"/>
+        <sub name="gstplayer-visualization" link="gst-plugins-bad-libs-gstplayer-visualization.html"/>
+      </sub>
+      <sub name="Interfaces" link="ch08.html">
         <sub name="GstPhotography" link="gst-plugins-bad-libs-GstPhotography.html"/>
       </sub>
     </sub>
@@ -433,19 +445,68 @@
     <keyword type="function" name="gst_gl_api_from_string ()" link="gst-plugins-bad-libs-GstGLAPI.html#gst-gl-api-from-string"/>
     <keyword type="function" name="gst_gl_platform_to_string ()" link="gst-plugins-bad-libs-GstGLAPI.html#gst-gl-platform-to-string"/>
     <keyword type="function" name="gst_gl_platform_from_string ()" link="gst-plugins-bad-libs-GstGLAPI.html#gst-gl-platform-from-string"/>
-    <keyword type="function" name="gst_gl_check_extension ()" link="gst-plugins-bad-libs-GstGLAPI.html#gst-gl-check-extension"/>
     <keyword type="enum" name="enum GstGLAPI" link="gst-plugins-bad-libs-GstGLAPI.html#GstGLAPI"/>
     <keyword type="enum" name="enum GstGLPlatform" link="gst-plugins-bad-libs-GstGLAPI.html#GstGLPlatform"/>
     <keyword type="macro" name="GST_GL_API_GLES1_NAME" link="gst-plugins-bad-libs-GstGLAPI.html#GST-GL-API-GLES1-NAME:CAPS"/>
     <keyword type="macro" name="GST_GL_API_GLES2_NAME" link="gst-plugins-bad-libs-GstGLAPI.html#GST-GL-API-GLES2-NAME:CAPS"/>
     <keyword type="macro" name="GST_GL_API_OPENGL3_NAME" link="gst-plugins-bad-libs-GstGLAPI.html#GST-GL-API-OPENGL3-NAME:CAPS"/>
     <keyword type="macro" name="GST_GL_API_OPENGL_NAME" link="gst-plugins-bad-libs-GstGLAPI.html#GST-GL-API-OPENGL-NAME:CAPS"/>
+    <keyword type="macro" name="GST_MAP_GL" link="gst-plugins-bad-libs-gstglbasememory.html#GST-MAP-GL:CAPS"/>
+    <keyword type="macro" name="GST_GL_BASE_MEMORY_ERROR" link="gst-plugins-bad-libs-gstglbasememory.html#GST-GL-BASE-MEMORY-ERROR:CAPS"/>
+    <keyword type="function" name="GstGLAllocationParamsCopyFunc ()" link="gst-plugins-bad-libs-gstglbasememory.html#GstGLAllocationParamsCopyFunc"/>
+    <keyword type="function" name="GstGLAllocationParamsFreeFunc ()" link="gst-plugins-bad-libs-gstglbasememory.html#GstGLAllocationParamsFreeFunc"/>
+    <keyword type="macro" name="GST_GL_ALLOCATION_PARAMS_ALLOC_FLAG_ALLOC" link="gst-plugins-bad-libs-gstglbasememory.html#GST-GL-ALLOCATION-PARAMS-ALLOC-FLAG-ALLOC:CAPS"/>
+    <keyword type="macro" name="GST_GL_ALLOCATION_PARAMS_ALLOC_FLAG_WRAP_SYSMEM" link="gst-plugins-bad-libs-gstglbasememory.html#GST-GL-ALLOCATION-PARAMS-ALLOC-FLAG-WRAP-SYSMEM:CAPS"/>
+    <keyword type="macro" name="GST_GL_ALLOCATION_PARAMS_ALLOC_FLAG_WRAP_GPU_HANDLE" link="gst-plugins-bad-libs-gstglbasememory.html#GST-GL-ALLOCATION-PARAMS-ALLOC-FLAG-WRAP-GPU-HANDLE:CAPS"/>
+    <keyword type="macro" name="GST_GL_ALLOCATION_PARAMS_ALLOC_FLAG_USER" link="gst-plugins-bad-libs-gstglbasememory.html#GST-GL-ALLOCATION-PARAMS-ALLOC-FLAG-USER:CAPS"/>
+    <keyword type="function" name="gst_gl_allocation_params_init ()" link="gst-plugins-bad-libs-gstglbasememory.html#gst-gl-allocation-params-init" since="1.8"/>
+    <keyword type="function" name="gst_gl_allocation_params_copy ()" link="gst-plugins-bad-libs-gstglbasememory.html#gst-gl-allocation-params-copy" since="1.8"/>
+    <keyword type="function" name="gst_gl_allocation_params_free ()" link="gst-plugins-bad-libs-gstglbasememory.html#gst-gl-allocation-params-free" since="1.8"/>
+    <keyword type="function" name="gst_gl_allocation_params_free_data ()" link="gst-plugins-bad-libs-gstglbasememory.html#gst-gl-allocation-params-free-data" since="1.8"/>
+    <keyword type="function" name="gst_gl_allocation_params_copy_data ()" link="gst-plugins-bad-libs-gstglbasememory.html#gst-gl-allocation-params-copy-data" since="1.8"/>
+    <keyword type="function" name="gst_gl_base_memory_init_once ()" link="gst-plugins-bad-libs-gstglbasememory.html#gst-gl-base-memory-init-once" since="1.8"/>
+    <keyword type="function" name="gst_gl_base_memory_init ()" link="gst-plugins-bad-libs-gstglbasememory.html#gst-gl-base-memory-init" since="1.8"/>
+    <keyword type="function" name="gst_is_gl_base_memory ()" link="gst-plugins-bad-libs-gstglbasememory.html#gst-is-gl-base-memory" since="1.8"/>
+    <keyword type="function" name="GstGLBaseMemoryAllocatorAllocFunction ()" link="gst-plugins-bad-libs-gstglbasememory.html#GstGLBaseMemoryAllocatorAllocFunction" since="1.8"/>
+    <keyword type="function" name="GstGLBaseMemoryAllocatorCreateFunction ()" link="gst-plugins-bad-libs-gstglbasememory.html#GstGLBaseMemoryAllocatorCreateFunction" since="1.8"/>
+    <keyword type="function" name="GstGLBaseMemoryAllocatorMapFunction ()" link="gst-plugins-bad-libs-gstglbasememory.html#GstGLBaseMemoryAllocatorMapFunction" since="1.8"/>
+    <keyword type="function" name="GstGLBaseMemoryAllocatorUnmapFunction ()" link="gst-plugins-bad-libs-gstglbasememory.html#GstGLBaseMemoryAllocatorUnmapFunction" since="1.8"/>
+    <keyword type="function" name="GstGLBaseMemoryAllocatorCopyFunction ()" link="gst-plugins-bad-libs-gstglbasememory.html#GstGLBaseMemoryAllocatorCopyFunction" since="1.8"/>
+    <keyword type="function" name="GstGLBaseMemoryAllocatorDestroyFunction ()" link="gst-plugins-bad-libs-gstglbasememory.html#GstGLBaseMemoryAllocatorDestroyFunction" since="1.8"/>
+    <keyword type="function" name="gst_gl_base_memory_alloc ()" link="gst-plugins-bad-libs-gstglbasememory.html#gst-gl-base-memory-alloc" since="1.8"/>
+    <keyword type="function" name="gst_gl_base_memory_alloc_data ()" link="gst-plugins-bad-libs-gstglbasememory.html#gst-gl-base-memory-alloc-data"/>
+    <keyword type="function" name="gst_gl_base_memory_memcpy ()" link="gst-plugins-bad-libs-gstglbasememory.html#gst-gl-base-memory-memcpy" since="1.8"/>
+    <keyword type="struct" name="GstGLBaseMemoryAllocator" link="gst-plugins-bad-libs-gstglbasememory.html#GstGLBaseMemoryAllocator-struct"/>
+    <keyword type="struct" name="GstGLBaseMemoryAllocatorClass" link="gst-plugins-bad-libs-gstglbasememory.html#GstGLBaseMemoryAllocatorClass" since="1.8"/>
+    <keyword type="macro" name="GST_GL_BASE_MEMORY_ALLOCATOR_NAME" link="gst-plugins-bad-libs-gstglbasememory.html#GST-GL-BASE-MEMORY-ALLOCATOR-NAME:CAPS" since="1.8"/>
+    <keyword type="enum" name="enum GstGLBaseMemoryError" link="gst-plugins-bad-libs-gstglbasememory.html#GstGLBaseMemoryError"/>
+    <keyword type="enum" name="enum GstGLBaseMemoryTransfer" link="gst-plugins-bad-libs-gstglbasememory.html#GstGLBaseMemoryTransfer"/>
+    <keyword type="struct" name="struct GstGLAllocationParams" link="gst-plugins-bad-libs-gstglbasememory.html#GstGLAllocationParams"/>
+    <keyword type="struct" name="GstGLBaseMemory" link="gst-plugins-bad-libs-gstglbasememory.html#GstGLBaseMemory"/>
+    <keyword type="struct" name="GstGLBaseFilter" link="GstGLBaseFilter.html#GstGLBaseFilter-struct"/>
+    <keyword type="struct" name="GstGLBaseFilterClass" link="GstGLBaseFilter.html#GstGLBaseFilterClass"/>
+    <keyword type="property" name="The “context” property" link="GstGLBaseFilter.html#GstGLBaseFilter--context"/>
+    <keyword type="function" name="gst_gl_buffer_init_once ()" link="gst-plugins-bad-libs-GstGLBuffer.html#gst-gl-buffer-init-once" since="1.8"/>
+    <keyword type="function" name="gst_is_gl_buffer ()" link="gst-plugins-bad-libs-GstGLBuffer.html#gst-is-gl-buffer" since="1.8"/>
+    <keyword type="function" name="gst_gl_buffer_alloc ()" link="gst-plugins-bad-libs-GstGLBuffer.html#gst-gl-buffer-alloc"/>
+    <keyword type="macro" name="GST_GL_ALLOCATION_PARAMS_ALLOC_FLAG_BUFFER" link="gst-plugins-bad-libs-GstGLBuffer.html#GST-GL-ALLOCATION-PARAMS-ALLOC-FLAG-BUFFER:CAPS"/>
+    <keyword type="function" name="gst_gl_buffer_allocation_params_new ()" link="gst-plugins-bad-libs-GstGLBuffer.html#gst-gl-buffer-allocation-params-new" since="1.8"/>
+    <keyword type="struct" name="GstGLBuffer" link="gst-plugins-bad-libs-GstGLBuffer.html#GstGLBuffer"/>
+    <keyword type="struct" name="struct GstGLBufferAllocationParams" link="gst-plugins-bad-libs-GstGLBuffer.html#GstGLBufferAllocationParams"/>
+    <keyword type="struct" name="GstGLBufferAllocator" link="gst-plugins-bad-libs-GstGLBuffer.html#GstGLBufferAllocator-struct"/>
+    <keyword type="struct" name="GstGLBufferAllocatorClass" link="gst-plugins-bad-libs-GstGLBuffer.html#GstGLBufferAllocatorClass"/>
+    <keyword type="macro" name="GST_GL_BUFFER_ALLOCATOR_NAME" link="gst-plugins-bad-libs-GstGLBuffer.html#GST-GL-BUFFER-ALLOCATOR-NAME:CAPS"/>
+    <keyword type="macro" name="GST_CAPS_FEATURE_MEMORY_GL_BUFFER" link="gst-plugins-bad-libs-GstGLBuffer.html#GST-CAPS-FEATURE-MEMORY-GL-BUFFER:CAPS"/>
     <keyword type="function" name="gst_gl_buffer_pool_new ()" link="GstGLBufferPool.html#gst-gl-buffer-pool-new"/>
-    <keyword type="struct" name="struct GstGLBufferPool" link="GstGLBufferPool.html#GstGLBufferPool-struct"/>
-    <keyword type="struct" name="struct GstGLBufferPoolClass" link="GstGLBufferPool.html#GstGLBufferPoolClass"/>
+    <keyword type="function" name="gst_buffer_pool_config_get_gl_allocation_params ()" link="GstGLBufferPool.html#gst-buffer-pool-config-get-gl-allocation-params"/>
+    <keyword type="function" name="gst_buffer_pool_config_set_gl_allocation_params ()" link="GstGLBufferPool.html#gst-buffer-pool-config-set-gl-allocation-params"/>
+    <keyword type="struct" name="GstGLBufferPool" link="GstGLBufferPool.html#GstGLBufferPool-struct"/>
+    <keyword type="struct" name="GstGLBufferPoolClass" link="GstGLBufferPool.html#GstGLBufferPoolClass"/>
     <keyword type="function" name="gst_gl_color_convert_new ()" link="GstGLColorConvert.html#gst-gl-color-convert-new"/>
     <keyword type="function" name="gst_gl_color_convert_set_caps ()" link="GstGLColorConvert.html#gst-gl-color-convert-set-caps"/>
     <keyword type="function" name="gst_gl_color_convert_transform_caps ()" link="GstGLColorConvert.html#gst-gl-color-convert-transform-caps"/>
+    <keyword type="function" name="gst_gl_color_convert_fixate_caps ()" link="GstGLColorConvert.html#gst-gl-color-convert-fixate-caps"/>
+    <keyword type="function" name="gst_gl_color_convert_decide_allocation ()" link="GstGLColorConvert.html#gst-gl-color-convert-decide-allocation"/>
     <keyword type="function" name="gst_gl_color_convert_perform ()" link="GstGLColorConvert.html#gst-gl-color-convert-perform"/>
     <keyword type="macro" name="GST_GL_COLOR_CONVERT_FORMATS" link="GstGLColorConvert.html#GST-GL-COLOR-CONVERT-FORMATS:CAPS"/>
     <keyword type="macro" name="GST_GL_COLOR_CONVERT_VIDEO_CAPS" link="GstGLColorConvert.html#GST-GL-COLOR-CONVERT-VIDEO-CAPS"/>
@@ -461,6 +522,7 @@
     <keyword type="function" name="gst_gl_context_activate ()" link="GstGLContext.html#gst-gl-context-activate" since="1.4"/>
     <keyword type="function" name="gst_gl_context_default_get_proc_address ()" link="GstGLContext.html#gst-gl-context-default-get-proc-address"/>
     <keyword type="function" name="gst_gl_context_get_proc_address ()" link="GstGLContext.html#gst-gl-context-get-proc-address" since="1.4"/>
+    <keyword type="function" name="gst_gl_context_get_proc_address_with_platform ()" link="GstGLContext.html#gst-gl-context-get-proc-address-with-platform"/>
     <keyword type="function" name="gst_gl_context_get_window ()" link="GstGLContext.html#gst-gl-context-get-window" since="1.4"/>
     <keyword type="function" name="gst_gl_context_set_window ()" link="GstGLContext.html#gst-gl-context-set-window" since="1.4"/>
     <keyword type="function" name="gst_gl_context_thread_add ()" link="GstGLContext.html#gst-gl-context-thread-add" since="1.4"/>
@@ -472,6 +534,8 @@
     <keyword type="function" name="gst_gl_context_get_current_gl_api ()" link="GstGLContext.html#gst-gl-context-get-current-gl-api" since="1.6"/>
     <keyword type="function" name="gst_gl_context_get_thread ()" link="GstGLContext.html#gst-gl-context-get-thread" since="1.6"/>
     <keyword type="function" name="gst_gl_context_can_share ()" link="GstGLContext.html#gst-gl-context-can-share" since="1.6"/>
+    <keyword type="function" name="gst_gl_context_is_shared ()" link="GstGLContext.html#gst-gl-context-is-shared" since="1.8"/>
+    <keyword type="function" name="gst_gl_context_set_shared_with ()" link="GstGLContext.html#gst-gl-context-set-shared-with" since="1.8"/>
     <keyword type="function" name="gst_gl_context_check_feature ()" link="GstGLContext.html#gst-gl-context-check-feature" since="1.4"/>
     <keyword type="function" name="gst_gl_context_check_gl_version ()" link="GstGLContext.html#gst-gl-context-check-gl-version" since="1.4"/>
     <keyword type="function" name="gst_gl_context_get_gl_version ()" link="GstGLContext.html#gst-gl-context-get-gl-version" since="1.4"/>
@@ -505,17 +569,13 @@
     <keyword type="function" name="gst_gl_display_add_context ()" link="GstGLDisplay.html#gst-gl-display-add-context" since="1.6"/>
     <keyword type="function" name="gst_gl_display_get_gl_context_for_thread ()" link="GstGLDisplay.html#gst-gl-display-get-gl-context-for-thread" since="1.6"/>
     <keyword type="function" name="gst_gl_display_get_handle ()" link="GstGLDisplay.html#gst-gl-display-get-handle"/>
+    <keyword type="function" name="gst_gl_display_create_context ()" link="GstGLDisplay.html#gst-gl-display-create-context" since="1.6"/>
     <keyword type="function" name="gst_context_get_gl_display ()" link="GstGLDisplay.html#gst-context-get-gl-display" since="1.4"/>
     <keyword type="function" name="gst_context_set_gl_display ()" link="GstGLDisplay.html#gst-context-set-gl-display" since="1.4"/>
     <keyword type="macro" name="GST_GL_DISPLAY_CONTEXT_TYPE" link="GstGLDisplay.html#GST-GL-DISPLAY-CONTEXT-TYPE:CAPS"/>
     <keyword type="enum" name="enum GstGLDisplayType" link="GstGLDisplay.html#GstGLDisplayType"/>
     <keyword type="struct" name="GstGLDisplay" link="GstGLDisplay.html#GstGLDisplay-struct"/>
     <keyword type="signal" name="The “create-context” signal" link="GstGLDisplay.html#GstGLDisplay-create-context"/>
-    <keyword type="function" name="gst_gl_download_new ()" link="GstGLDownload.html#gst-gl-download-new"/>
-    <keyword type="function" name="gst_gl_download_set_format ()" link="GstGLDownload.html#gst-gl-download-set-format"/>
-    <keyword type="function" name="gst_gl_download_transform_caps ()" link="GstGLDownload.html#gst-gl-download-transform-caps"/>
-    <keyword type="function" name="gst_gl_download_perform_with_data ()" link="GstGLDownload.html#gst-gl-download-perform-with-data"/>
-    <keyword type="struct" name="GstGLDownload" link="GstGLDownload.html#GstGLDownload-struct"/>
     <keyword type="function" name="gst_egl_image_memory_init ()" link="gst-plugins-bad-libs-GstEGLImageMemory.html#gst-egl-image-memory-init"/>
     <keyword type="function" name="gst_egl_image_memory_get_display ()" link="gst-plugins-bad-libs-GstEGLImageMemory.html#gst-egl-image-memory-get-display"/>
     <keyword type="function" name="gst_egl_image_memory_get_image ()" link="gst-plugins-bad-libs-GstEGLImageMemory.html#gst-egl-image-memory-get-image"/>
@@ -525,9 +585,6 @@
     <keyword type="function" name="gst_is_egl_image_memory ()" link="gst-plugins-bad-libs-GstEGLImageMemory.html#gst-is-egl-image-memory"/>
     <keyword type="macro" name="GST_EGL_IMAGE_MEMORY_TYPE" link="gst-plugins-bad-libs-GstEGLImageMemory.html#GST-EGL-IMAGE-MEMORY-TYPE:CAPS"/>
     <keyword type="macro" name="GST_CAPS_FEATURE_MEMORY_EGL_IMAGE" link="gst-plugins-bad-libs-GstEGLImageMemory.html#GST-CAPS-FEATURE-MEMORY-EGL-IMAGE:CAPS"/>
-    <keyword type="struct" name="GstGLBaseFilter" link="GstGLBaseFilter.html#GstGLBaseFilter-struct"/>
-    <keyword type="struct" name="GstGLBaseFilterClass" link="GstGLBaseFilter.html#GstGLBaseFilterClass"/>
-    <keyword type="property" name="The “context” property" link="GstGLBaseFilter.html#GstGLBaseFilter--context"/>
     <keyword type="function" name="gst_gl_filter_draw_texture ()" link="GstGLFilter.html#gst-gl-filter-draw-texture"/>
     <keyword type="function" name="gst_gl_filter_render_to_target ()" link="GstGLFilter.html#gst-gl-filter-render-to-target"/>
     <keyword type="function" name="gst_gl_filter_render_to_target_with_shader ()" link="GstGLFilter.html#gst-gl-filter-render-to-target-with-shader"/>
@@ -540,80 +597,108 @@
     <keyword type="function" name="gst_gl_framebuffer_use_v2 ()" link="GstGLFramebuffer.html#gst-gl-framebuffer-use-v2"/>
     <keyword type="struct" name="struct GstGLFramebuffer" link="GstGLFramebuffer.html#GstGLFramebuffer-struct"/>
     <keyword type="struct" name="struct GstGLFramebufferClass" link="GstGLFramebuffer.html#GstGLFramebufferClass"/>
-    <keyword type="function" name="gst_gl_memory_init ()" link="gst-plugins-bad-libs-gstglmemory.html#gst-gl-memory-init"/>
-    <keyword type="function" name="gst_gl_memory_alloc ()" link="gst-plugins-bad-libs-gstglmemory.html#gst-gl-memory-alloc"/>
-    <keyword type="function" name="gst_gl_memory_wrapped ()" link="gst-plugins-bad-libs-gstglmemory.html#gst-gl-memory-wrapped"/>
-    <keyword type="function" name="gst_gl_memory_wrapped_texture ()" link="gst-plugins-bad-libs-gstglmemory.html#gst-gl-memory-wrapped-texture"/>
-    <keyword type="function" name="gst_gl_memory_copy_into_texture ()" link="gst-plugins-bad-libs-gstglmemory.html#gst-gl-memory-copy-into-texture"/>
-    <keyword type="function" name="gst_gl_memory_setup_buffer ()" link="gst-plugins-bad-libs-gstglmemory.html#gst-gl-memory-setup-buffer"/>
-    <keyword type="function" name="gst_gl_memory_setup_wrapped ()" link="gst-plugins-bad-libs-gstglmemory.html#gst-gl-memory-setup-wrapped"/>
-    <keyword type="function" name="gst_gl_texture_type_from_format ()" link="gst-plugins-bad-libs-gstglmemory.html#gst-gl-texture-type-from-format"/>
-    <keyword type="function" name="gst_is_gl_memory ()" link="gst-plugins-bad-libs-gstglmemory.html#gst-is-gl-memory"/>
-    <keyword type="struct" name="GstGLAllocator" link="gst-plugins-bad-libs-gstglmemory.html#GstGLAllocator-struct"/>
-    <keyword type="struct" name="GstGLAllocatorClass" link="gst-plugins-bad-libs-gstglmemory.html#GstGLAllocatorClass"/>
-    <keyword type="macro" name="GST_GL_MEMORY_ALLOCATOR" link="gst-plugins-bad-libs-gstglmemory.html#GST-GL-MEMORY-ALLOCATOR:CAPS"/>
-    <keyword type="struct" name="GstGLMemory" link="gst-plugins-bad-libs-gstglmemory.html#GstGLMemory"/>
-    <keyword type="function" name="gst_gl_shader_error_quark ()" link="gst-plugins-bad-libs-gstglshader.html#gst-gl-shader-error-quark"/>
-    <keyword type="macro" name="GST_GL_SHADER_ERROR" link="gst-plugins-bad-libs-gstglshader.html#GST-GL-SHADER-ERROR:CAPS"/>
-    <keyword type="function" name="gst_gl_shadervariable_set ()" link="gst-plugins-bad-libs-gstglshader.html#gst-gl-shadervariable-set"/>
-    <keyword type="function" name="gst_gl_shadervariables_parse ()" link="gst-plugins-bad-libs-gstglshader.html#gst-gl-shadervariables-parse"/>
-    <keyword type="function" name="gst_gl_shader_new ()" link="gst-plugins-bad-libs-gstglshader.html#gst-gl-shader-new"/>
-    <keyword type="function" name="gst_gl_shader_set_vertex_source ()" link="gst-plugins-bad-libs-gstglshader.html#gst-gl-shader-set-vertex-source"/>
-    <keyword type="function" name="gst_gl_shader_set_fragment_source ()" link="gst-plugins-bad-libs-gstglshader.html#gst-gl-shader-set-fragment-source"/>
-    <keyword type="function" name="gst_gl_shader_get_vertex_source ()" link="gst-plugins-bad-libs-gstglshader.html#gst-gl-shader-get-vertex-source"/>
-    <keyword type="function" name="gst_gl_shader_get_fragment_source ()" link="gst-plugins-bad-libs-gstglshader.html#gst-gl-shader-get-fragment-source"/>
-    <keyword type="function" name="gst_gl_shader_get_program_handle ()" link="gst-plugins-bad-libs-gstglshader.html#gst-gl-shader-get-program-handle"/>
-    <keyword type="function" name="gst_gl_shader_set_active ()" link="gst-plugins-bad-libs-gstglshader.html#gst-gl-shader-set-active"/>
-    <keyword type="function" name="gst_gl_shader_is_compiled ()" link="gst-plugins-bad-libs-gstglshader.html#gst-gl-shader-is-compiled"/>
-    <keyword type="function" name="gst_gl_shader_compile ()" link="gst-plugins-bad-libs-gstglshader.html#gst-gl-shader-compile"/>
-    <keyword type="function" name="gst_gl_shader_compile_and_check ()" link="gst-plugins-bad-libs-gstglshader.html#gst-gl-shader-compile-and-check"/>
-    <keyword type="function" name="gst_gl_shader_compile_all_with_attribs_and_check ()" link="gst-plugins-bad-libs-gstglshader.html#gst-gl-shader-compile-all-with-attribs-and-check"/>
-    <keyword type="function" name="gst_gl_shader_compile_with_default_f_and_check ()" link="gst-plugins-bad-libs-gstglshader.html#gst-gl-shader-compile-with-default-f-and-check"/>
-    <keyword type="function" name="gst_gl_shader_compile_with_default_v_and_check ()" link="gst-plugins-bad-libs-gstglshader.html#gst-gl-shader-compile-with-default-v-and-check"/>
-    <keyword type="function" name="gst_gl_shader_compile_with_default_vf_and_check ()" link="gst-plugins-bad-libs-gstglshader.html#gst-gl-shader-compile-with-default-vf-and-check"/>
-    <keyword type="function" name="gst_gl_shader_release ()" link="gst-plugins-bad-libs-gstglshader.html#gst-gl-shader-release"/>
-    <keyword type="function" name="gst_gl_shader_use ()" link="gst-plugins-bad-libs-gstglshader.html#gst-gl-shader-use"/>
-    <keyword type="function" name="gst_gl_shader_set_uniform_1i ()" link="gst-plugins-bad-libs-gstglshader.html#gst-gl-shader-set-uniform-1i"/>
-    <keyword type="function" name="gst_gl_shader_set_uniform_1f ()" link="gst-plugins-bad-libs-gstglshader.html#gst-gl-shader-set-uniform-1f"/>
-    <keyword type="function" name="gst_gl_shader_set_uniform_1fv ()" link="gst-plugins-bad-libs-gstglshader.html#gst-gl-shader-set-uniform-1fv"/>
-    <keyword type="function" name="gst_gl_shader_set_uniform_1iv ()" link="gst-plugins-bad-libs-gstglshader.html#gst-gl-shader-set-uniform-1iv"/>
-    <keyword type="function" name="gst_gl_shader_set_uniform_2f ()" link="gst-plugins-bad-libs-gstglshader.html#gst-gl-shader-set-uniform-2f"/>
-    <keyword type="function" name="gst_gl_shader_set_uniform_2fv ()" link="gst-plugins-bad-libs-gstglshader.html#gst-gl-shader-set-uniform-2fv"/>
-    <keyword type="function" name="gst_gl_shader_set_uniform_2i ()" link="gst-plugins-bad-libs-gstglshader.html#gst-gl-shader-set-uniform-2i"/>
-    <keyword type="function" name="gst_gl_shader_set_uniform_2iv ()" link="gst-plugins-bad-libs-gstglshader.html#gst-gl-shader-set-uniform-2iv"/>
-    <keyword type="function" name="gst_gl_shader_set_uniform_3f ()" link="gst-plugins-bad-libs-gstglshader.html#gst-gl-shader-set-uniform-3f"/>
-    <keyword type="function" name="gst_gl_shader_set_uniform_3fv ()" link="gst-plugins-bad-libs-gstglshader.html#gst-gl-shader-set-uniform-3fv"/>
-    <keyword type="function" name="gst_gl_shader_set_uniform_3i ()" link="gst-plugins-bad-libs-gstglshader.html#gst-gl-shader-set-uniform-3i"/>
-    <keyword type="function" name="gst_gl_shader_set_uniform_3iv ()" link="gst-plugins-bad-libs-gstglshader.html#gst-gl-shader-set-uniform-3iv"/>
-    <keyword type="function" name="gst_gl_shader_set_uniform_4f ()" link="gst-plugins-bad-libs-gstglshader.html#gst-gl-shader-set-uniform-4f"/>
-    <keyword type="function" name="gst_gl_shader_set_uniform_4fv ()" link="gst-plugins-bad-libs-gstglshader.html#gst-gl-shader-set-uniform-4fv"/>
-    <keyword type="function" name="gst_gl_shader_set_uniform_4i ()" link="gst-plugins-bad-libs-gstglshader.html#gst-gl-shader-set-uniform-4i"/>
-    <keyword type="function" name="gst_gl_shader_set_uniform_4iv ()" link="gst-plugins-bad-libs-gstglshader.html#gst-gl-shader-set-uniform-4iv"/>
-    <keyword type="function" name="gst_gl_shader_set_uniform_matrix_2fv ()" link="gst-plugins-bad-libs-gstglshader.html#gst-gl-shader-set-uniform-matrix-2fv"/>
-    <keyword type="function" name="gst_gl_shader_set_uniform_matrix_2x3fv ()" link="gst-plugins-bad-libs-gstglshader.html#gst-gl-shader-set-uniform-matrix-2x3fv"/>
-    <keyword type="function" name="gst_gl_shader_set_uniform_matrix_2x4fv ()" link="gst-plugins-bad-libs-gstglshader.html#gst-gl-shader-set-uniform-matrix-2x4fv"/>
-    <keyword type="function" name="gst_gl_shader_set_uniform_matrix_3fv ()" link="gst-plugins-bad-libs-gstglshader.html#gst-gl-shader-set-uniform-matrix-3fv"/>
-    <keyword type="function" name="gst_gl_shader_set_uniform_matrix_3x2fv ()" link="gst-plugins-bad-libs-gstglshader.html#gst-gl-shader-set-uniform-matrix-3x2fv"/>
-    <keyword type="function" name="gst_gl_shader_set_uniform_matrix_3x4fv ()" link="gst-plugins-bad-libs-gstglshader.html#gst-gl-shader-set-uniform-matrix-3x4fv"/>
-    <keyword type="function" name="gst_gl_shader_set_uniform_matrix_4fv ()" link="gst-plugins-bad-libs-gstglshader.html#gst-gl-shader-set-uniform-matrix-4fv"/>
-    <keyword type="function" name="gst_gl_shader_set_uniform_matrix_4x2fv ()" link="gst-plugins-bad-libs-gstglshader.html#gst-gl-shader-set-uniform-matrix-4x2fv"/>
-    <keyword type="function" name="gst_gl_shader_set_uniform_matrix_4x3fv ()" link="gst-plugins-bad-libs-gstglshader.html#gst-gl-shader-set-uniform-matrix-4x3fv"/>
-    <keyword type="function" name="gst_gl_shader_get_attribute_location ()" link="gst-plugins-bad-libs-gstglshader.html#gst-gl-shader-get-attribute-location"/>
-    <keyword type="function" name="gst_gl_shader_bind_attribute_location ()" link="gst-plugins-bad-libs-gstglshader.html#gst-gl-shader-bind-attribute-location"/>
-    <keyword type="enum" name="enum GstGLShaderError" link="gst-plugins-bad-libs-gstglshader.html#GstGLShaderError"/>
-    <keyword type="enum" name="enum GstGLShaderSourceType" link="gst-plugins-bad-libs-gstglshader.html#GstGLShaderSourceType"/>
-    <keyword type="struct" name="struct gst_gl_shadervariable_desc" link="gst-plugins-bad-libs-gstglshader.html#gst-gl-shadervariable-desc"/>
-    <keyword type="struct" name="GstGLShader" link="gst-plugins-bad-libs-gstglshader.html#GstGLShader-struct"/>
-    <keyword type="property" name="The “active” property" link="gst-plugins-bad-libs-gstglshader.html#GstGLShader--active"/>
-    <keyword type="property" name="The “compiled” property" link="gst-plugins-bad-libs-gstglshader.html#GstGLShader--compiled"/>
-    <keyword type="property" name="The “fragment-src” property" link="gst-plugins-bad-libs-gstglshader.html#GstGLShader--fragment-src"/>
-    <keyword type="property" name="The “vertex-src” property" link="gst-plugins-bad-libs-gstglshader.html#GstGLShader--vertex-src"/>
+    <keyword type="macro" name="GST_GL_ALLOCATION_PARAMS_ALLOC_FLAG_VIDEO" link="gst-plugins-bad-libs-GstGLMemory.html#GST-GL-ALLOCATION-PARAMS-ALLOC-FLAG-VIDEO:CAPS"/>
+    <keyword type="function" name="gst_gl_video_allocation_params_copy_data ()" link="gst-plugins-bad-libs-GstGLMemory.html#gst-gl-video-allocation-params-copy-data" since="1.8"/>
+    <keyword type="function" name="gst_gl_video_allocation_params_free_data ()" link="gst-plugins-bad-libs-GstGLMemory.html#gst-gl-video-allocation-params-free-data" since="1.8"/>
+    <keyword type="function" name="gst_gl_video_allocation_params_init_full ()" link="gst-plugins-bad-libs-GstGLMemory.html#gst-gl-video-allocation-params-init-full" since="1.8"/>
+    <keyword type="function" name="gst_gl_video_allocation_params_new ()" link="gst-plugins-bad-libs-GstGLMemory.html#gst-gl-video-allocation-params-new" since="1.8"/>
+    <keyword type="function" name="gst_gl_video_allocation_params_new_wrapped_data ()" link="gst-plugins-bad-libs-GstGLMemory.html#gst-gl-video-allocation-params-new-wrapped-data" since="1.8"/>
+    <keyword type="function" name="gst_gl_video_allocation_params_new_wrapped_texture ()" link="gst-plugins-bad-libs-GstGLMemory.html#gst-gl-video-allocation-params-new-wrapped-texture" since="1.8"/>
+    <keyword type="function" name="gst_gl_memory_allocator_get_default ()" link="gst-plugins-bad-libs-GstGLMemory.html#gst-gl-memory-allocator-get-default" since="1.8"/>
+    <keyword type="function" name="gst_gl_memory_init_once ()" link="gst-plugins-bad-libs-GstGLMemory.html#gst-gl-memory-init-once" since="1.4"/>
+    <keyword type="function" name="gst_gl_memory_init ()" link="gst-plugins-bad-libs-GstGLMemory.html#gst-gl-memory-init" since="1.8"/>
+    <keyword type="function" name="gst_is_gl_memory ()" link="gst-plugins-bad-libs-GstGLMemory.html#gst-is-gl-memory" since="1.4"/>
+    <keyword type="function" name="gst_gl_memory_copy_into ()" link="gst-plugins-bad-libs-GstGLMemory.html#gst-gl-memory-copy-into" since="1.8"/>
+    <keyword type="function" name="gst_gl_memory_copy_teximage ()" link="gst-plugins-bad-libs-GstGLMemory.html#gst-gl-memory-copy-teximage"/>
+    <keyword type="function" name="gst_gl_memory_read_pixels ()" link="gst-plugins-bad-libs-GstGLMemory.html#gst-gl-memory-read-pixels" since="1.8"/>
+    <keyword type="function" name="gst_gl_memory_texsubimage ()" link="gst-plugins-bad-libs-GstGLMemory.html#gst-gl-memory-texsubimage" since="1.8"/>
+    <keyword type="function" name="gst_gl_memory_get_texture_height ()" link="gst-plugins-bad-libs-GstGLMemory.html#gst-gl-memory-get-texture-height" since="1.8"/>
+    <keyword type="function" name="gst_gl_memory_get_texture_id ()" link="gst-plugins-bad-libs-GstGLMemory.html#gst-gl-memory-get-texture-id" since="1.8"/>
+    <keyword type="function" name="gst_gl_memory_get_texture_target ()" link="gst-plugins-bad-libs-GstGLMemory.html#gst-gl-memory-get-texture-target" since="1.8"/>
+    <keyword type="function" name="gst_gl_memory_get_texture_type ()" link="gst-plugins-bad-libs-GstGLMemory.html#gst-gl-memory-get-texture-type" since="1.8"/>
+    <keyword type="function" name="gst_gl_memory_get_texture_width ()" link="gst-plugins-bad-libs-GstGLMemory.html#gst-gl-memory-get-texture-width" since="1.8"/>
+    <keyword type="function" name="gst_gl_memory_setup_buffer ()" link="gst-plugins-bad-libs-GstGLMemory.html#gst-gl-memory-setup-buffer" since="1.8"/>
+    <keyword type="macro" name="GST_GL_MEMORY_VIDEO_FORMATS_STR" link="gst-plugins-bad-libs-GstGLMemory.html#GST-GL-MEMORY-VIDEO-FORMATS-STR:CAPS"/>
+    <keyword type="struct" name="struct GstGLVideoAllocationParams" link="gst-plugins-bad-libs-GstGLMemory.html#GstGLVideoAllocationParams"/>
+    <keyword type="struct" name="GstGLMemoryAllocator" link="gst-plugins-bad-libs-GstGLMemory.html#GstGLMemoryAllocator-struct"/>
+    <keyword type="struct" name="GstGLMemoryAllocatorClass" link="gst-plugins-bad-libs-GstGLMemory.html#GstGLMemoryAllocatorClass"/>
+    <keyword type="struct" name="GstGLMemory" link="gst-plugins-bad-libs-GstGLMemory.html#GstGLMemory"/>
+    <keyword type="macro" name="GST_GL_MEMORY_ALLOCATOR_NAME" link="gst-plugins-bad-libs-GstGLMemory.html#GST-GL-MEMORY-ALLOCATOR-NAME:CAPS"/>
+    <keyword type="function" name="gst_is_gl_memory_pbo ()" link="gst-plugins-bad-libs-gstglmemorypbo.html#gst-is-gl-memory-pbo" since="1.8"/>
+    <keyword type="function" name="gst_gl_memory_pbo_copy_into_texture ()" link="gst-plugins-bad-libs-gstglmemorypbo.html#gst-gl-memory-pbo-copy-into-texture" since="1.8"/>
+    <keyword type="function" name="gst_gl_memory_pbo_download_transfer ()" link="gst-plugins-bad-libs-gstglmemorypbo.html#gst-gl-memory-pbo-download-transfer" since="1.8"/>
+    <keyword type="function" name="gst_gl_memory_pbo_init_once ()" link="gst-plugins-bad-libs-gstglmemorypbo.html#gst-gl-memory-pbo-init-once"/>
+    <keyword type="function" name="gst_gl_memory_pbo_upload_transfer ()" link="gst-plugins-bad-libs-gstglmemorypbo.html#gst-gl-memory-pbo-upload-transfer"/>
+    <keyword type="struct" name="GstGLMemoryPBOAllocator" link="gst-plugins-bad-libs-gstglmemorypbo.html#GstGLMemoryPBOAllocator-struct"/>
+    <keyword type="struct" name="GstGLMemoryPBOAllocatorClass" link="gst-plugins-bad-libs-gstglmemorypbo.html#GstGLMemoryPBOAllocatorClass"/>
+    <keyword type="macro" name="GST_GL_MEMORY_PBO_ALLOCATOR_NAME" link="gst-plugins-bad-libs-gstglmemorypbo.html#GST-GL-MEMORY-PBO-ALLOCATOR-NAME:CAPS"/>
+    <keyword type="struct" name="GstGLMemoryPBO" link="gst-plugins-bad-libs-gstglmemorypbo.html#GstGLMemoryPBO"/>
+    <keyword type="function" name="gst_gl_shader_new ()" link="GstGLShader.html#gst-gl-shader-new"/>
+    <keyword type="function" name="gst_gl_shader_new_default ()" link="GstGLShader.html#gst-gl-shader-new-default" since="1.8"/>
+    <keyword type="function" name="gst_gl_shader_new_link_with_stages ()" link="GstGLShader.html#gst-gl-shader-new-link-with-stages" since="1.8"/>
+    <keyword type="function" name="gst_gl_shader_new_with_stages ()" link="GstGLShader.html#gst-gl-shader-new-with-stages" since="1.8"/>
+    <keyword type="function" name="gst_gl_shader_use ()" link="GstGLShader.html#gst-gl-shader-use"/>
+    <keyword type="function" name="gst_gl_shader_get_program_handle ()" link="GstGLShader.html#gst-gl-shader-get-program-handle" since="1.8"/>
+    <keyword type="function" name="gst_gl_shader_release ()" link="GstGLShader.html#gst-gl-shader-release" since="1.8"/>
+    <keyword type="function" name="gst_gl_shader_release_unlocked ()" link="GstGLShader.html#gst-gl-shader-release-unlocked" since="1.8"/>
+    <keyword type="function" name="gst_gl_shader_attach ()" link="GstGLShader.html#gst-gl-shader-attach" since="1.8"/>
+    <keyword type="function" name="gst_gl_shader_attach_unlocked ()" link="GstGLShader.html#gst-gl-shader-attach-unlocked" since="1.8"/>
+    <keyword type="function" name="gst_gl_shader_compile_attach_stage ()" link="GstGLShader.html#gst-gl-shader-compile-attach-stage" since="1.8"/>
+    <keyword type="function" name="gst_gl_shader_detach ()" link="GstGLShader.html#gst-gl-shader-detach" since="1.8"/>
+    <keyword type="function" name="gst_gl_shader_detach_unlocked ()" link="GstGLShader.html#gst-gl-shader-detach-unlocked" since="1.8"/>
+    <keyword type="function" name="gst_gl_shader_is_linked ()" link="GstGLShader.html#gst-gl-shader-is-linked" since="1.8"/>
+    <keyword type="function" name="gst_gl_shader_link ()" link="GstGLShader.html#gst-gl-shader-link" since="1.8"/>
+    <keyword type="function" name="gst_gl_shader_set_uniform_1i ()" link="GstGLShader.html#gst-gl-shader-set-uniform-1i"/>
+    <keyword type="function" name="gst_gl_shader_set_uniform_1f ()" link="GstGLShader.html#gst-gl-shader-set-uniform-1f"/>
+    <keyword type="function" name="gst_gl_shader_set_uniform_1fv ()" link="GstGLShader.html#gst-gl-shader-set-uniform-1fv"/>
+    <keyword type="function" name="gst_gl_shader_set_uniform_1iv ()" link="GstGLShader.html#gst-gl-shader-set-uniform-1iv"/>
+    <keyword type="function" name="gst_gl_shader_set_uniform_2f ()" link="GstGLShader.html#gst-gl-shader-set-uniform-2f"/>
+    <keyword type="function" name="gst_gl_shader_set_uniform_2fv ()" link="GstGLShader.html#gst-gl-shader-set-uniform-2fv"/>
+    <keyword type="function" name="gst_gl_shader_set_uniform_2i ()" link="GstGLShader.html#gst-gl-shader-set-uniform-2i"/>
+    <keyword type="function" name="gst_gl_shader_set_uniform_2iv ()" link="GstGLShader.html#gst-gl-shader-set-uniform-2iv"/>
+    <keyword type="function" name="gst_gl_shader_set_uniform_3f ()" link="GstGLShader.html#gst-gl-shader-set-uniform-3f"/>
+    <keyword type="function" name="gst_gl_shader_set_uniform_3fv ()" link="GstGLShader.html#gst-gl-shader-set-uniform-3fv"/>
+    <keyword type="function" name="gst_gl_shader_set_uniform_3i ()" link="GstGLShader.html#gst-gl-shader-set-uniform-3i"/>
+    <keyword type="function" name="gst_gl_shader_set_uniform_3iv ()" link="GstGLShader.html#gst-gl-shader-set-uniform-3iv"/>
+    <keyword type="function" name="gst_gl_shader_set_uniform_4f ()" link="GstGLShader.html#gst-gl-shader-set-uniform-4f"/>
+    <keyword type="function" name="gst_gl_shader_set_uniform_4fv ()" link="GstGLShader.html#gst-gl-shader-set-uniform-4fv"/>
+    <keyword type="function" name="gst_gl_shader_set_uniform_4i ()" link="GstGLShader.html#gst-gl-shader-set-uniform-4i"/>
+    <keyword type="function" name="gst_gl_shader_set_uniform_4iv ()" link="GstGLShader.html#gst-gl-shader-set-uniform-4iv"/>
+    <keyword type="function" name="gst_gl_shader_set_uniform_matrix_2fv ()" link="GstGLShader.html#gst-gl-shader-set-uniform-matrix-2fv"/>
+    <keyword type="function" name="gst_gl_shader_set_uniform_matrix_2x3fv ()" link="GstGLShader.html#gst-gl-shader-set-uniform-matrix-2x3fv"/>
+    <keyword type="function" name="gst_gl_shader_set_uniform_matrix_2x4fv ()" link="GstGLShader.html#gst-gl-shader-set-uniform-matrix-2x4fv"/>
+    <keyword type="function" name="gst_gl_shader_set_uniform_matrix_3fv ()" link="GstGLShader.html#gst-gl-shader-set-uniform-matrix-3fv"/>
+    <keyword type="function" name="gst_gl_shader_set_uniform_matrix_3x2fv ()" link="GstGLShader.html#gst-gl-shader-set-uniform-matrix-3x2fv"/>
+    <keyword type="function" name="gst_gl_shader_set_uniform_matrix_3x4fv ()" link="GstGLShader.html#gst-gl-shader-set-uniform-matrix-3x4fv"/>
+    <keyword type="function" name="gst_gl_shader_set_uniform_matrix_4fv ()" link="GstGLShader.html#gst-gl-shader-set-uniform-matrix-4fv"/>
+    <keyword type="function" name="gst_gl_shader_set_uniform_matrix_4x2fv ()" link="GstGLShader.html#gst-gl-shader-set-uniform-matrix-4x2fv"/>
+    <keyword type="function" name="gst_gl_shader_set_uniform_matrix_4x3fv ()" link="GstGLShader.html#gst-gl-shader-set-uniform-matrix-4x3fv"/>
+    <keyword type="function" name="gst_gl_shader_get_attribute_location ()" link="GstGLShader.html#gst-gl-shader-get-attribute-location"/>
+    <keyword type="function" name="gst_gl_shader_bind_attribute_location ()" link="GstGLShader.html#gst-gl-shader-bind-attribute-location"/>
+    <keyword type="struct" name="GstGLShader" link="GstGLShader.html#GstGLShader-struct"/>
+    <keyword type="property" name="The “linked” property" link="GstGLShader.html#GstGLShader--linked"/>
+    <keyword type="macro" name="GST_GLSL_ERROR" link="gst-plugins-bad-libs-GstGLSL.html#GST-GLSL-ERROR:CAPS"/>
+    <keyword type="function" name="gst_glsl_error_quark ()" link="gst-plugins-bad-libs-GstGLSL.html#gst-glsl-error-quark"/>
+    <keyword type="function" name="gst_glsl_profile_from_string ()" link="gst-plugins-bad-libs-GstGLSL.html#gst-glsl-profile-from-string"/>
+    <keyword type="function" name="gst_glsl_profile_to_string ()" link="gst-plugins-bad-libs-GstGLSL.html#gst-glsl-profile-to-string"/>
+    <keyword type="function" name="gst_glsl_version_from_string ()" link="gst-plugins-bad-libs-GstGLSL.html#gst-glsl-version-from-string"/>
+    <keyword type="function" name="gst_glsl_version_to_string ()" link="gst-plugins-bad-libs-GstGLSL.html#gst-glsl-version-to-string"/>
+    <keyword type="function" name="gst_glsl_version_profile_from_string ()" link="gst-plugins-bad-libs-GstGLSL.html#gst-glsl-version-profile-from-string"/>
+    <keyword type="function" name="gst_glsl_version_profile_to_string ()" link="gst-plugins-bad-libs-GstGLSL.html#gst-glsl-version-profile-to-string"/>
+    <keyword type="function" name="gst_glsl_string_get_version_profile ()" link="gst-plugins-bad-libs-GstGLSL.html#gst-glsl-string-get-version-profile"/>
+    <keyword type="function" name="gst_gl_context_supports_glsl_profile_version ()" link="gst-plugins-bad-libs-GstGLSL.html#gst-gl-context-supports-glsl-profile-version"/>
+    <keyword type="function" name="gst_gl_version_to_glsl_version ()" link="gst-plugins-bad-libs-GstGLSL.html#gst-gl-version-to-glsl-version"/>
+    <keyword type="enum" name="enum GstGLSLError" link="gst-plugins-bad-libs-GstGLSL.html#GstGLSLError"/>
+    <keyword type="enum" name="enum GstGLSLProfile" link="gst-plugins-bad-libs-GstGLSL.html#GstGLSLProfile"/>
+    <keyword type="enum" name="enum GstGLSLVersion" link="gst-plugins-bad-libs-GstGLSL.html#GstGLSLVersion"/>
     <keyword type="function" name="gst_buffer_add_gl_sync_meta ()" link="gst-plugins-bad-libs-GstGLSyncMeta.html#gst-buffer-add-gl-sync-meta"/>
+    <keyword type="function" name="gst_buffer_add_gl_sync_meta_full ()" link="gst-plugins-bad-libs-GstGLSyncMeta.html#gst-buffer-add-gl-sync-meta-full"/>
     <keyword type="macro" name="gst_buffer_get_gl_sync_meta()" link="gst-plugins-bad-libs-GstGLSyncMeta.html#gst-buffer-get-gl-sync-meta"/>
     <keyword type="function" name="gst_gl_sync_meta_api_get_type ()" link="gst-plugins-bad-libs-GstGLSyncMeta.html#gst-gl-sync-meta-api-get-type"/>
     <keyword type="function" name="gst_gl_sync_meta_get_info ()" link="gst-plugins-bad-libs-GstGLSyncMeta.html#gst-gl-sync-meta-get-info"/>
     <keyword type="function" name="gst_gl_sync_meta_set_sync_point ()" link="gst-plugins-bad-libs-GstGLSyncMeta.html#gst-gl-sync-meta-set-sync-point"/>
     <keyword type="function" name="gst_gl_sync_meta_wait ()" link="gst-plugins-bad-libs-GstGLSyncMeta.html#gst-gl-sync-meta-wait"/>
+    <keyword type="function" name="gst_gl_sync_meta_wait_cpu ()" link="gst-plugins-bad-libs-GstGLSyncMeta.html#gst-gl-sync-meta-wait-cpu"/>
     <keyword type="struct" name="struct GstGLSyncMeta" link="gst-plugins-bad-libs-GstGLSyncMeta.html#GstGLSyncMeta"/>
     <keyword type="macro" name="GST_BUFFER_POOL_OPTION_GL_SYNC_META" link="gst-plugins-bad-libs-GstGLSyncMeta.html#GST-BUFFER-POOL-OPTION-GL-SYNC-META:CAPS"/>
     <keyword type="function" name="gst_gl_upload_new ()" link="GstGLUpload.html#gst-gl-upload-new"/>
@@ -622,35 +707,8 @@
     <keyword type="function" name="gst_gl_upload_propose_allocation ()" link="GstGLUpload.html#gst-gl-upload-propose-allocation"/>
     <keyword type="function" name="gst_gl_upload_transform_caps ()" link="GstGLUpload.html#gst-gl-upload-transform-caps"/>
     <keyword type="function" name="gst_gl_upload_perform_with_buffer ()" link="GstGLUpload.html#gst-gl-upload-perform-with-buffer"/>
-    <keyword type="function" name="gst_gl_upload_release_buffer ()" link="GstGLUpload.html#gst-gl-upload-release-buffer"/>
+    <keyword type="function" name="gst_gl_upload_get_input_template_caps ()" link="GstGLUpload.html#gst-gl-upload-get-input-template-caps"/>
     <keyword type="struct" name="GstGLUpload" link="GstGLUpload.html#GstGLUpload-struct"/>
-    <keyword type="function" name="gst_gl_upload_meta_new ()" link="GstGLUploadMeta.html#gst-gl-upload-meta-new"/>
-    <keyword type="function" name="gst_gl_upload_meta_set_format ()" link="GstGLUploadMeta.html#gst-gl-upload-meta-set-format"/>
-    <keyword type="function" name="gst_gl_upload_meta_get_format ()" link="GstGLUploadMeta.html#gst-gl-upload-meta-get-format"/>
-    <keyword type="function" name="gst_gl_upload_meta_add_to_buffer ()" link="GstGLUploadMeta.html#gst-gl-upload-meta-add-to-buffer"/>
-    <keyword type="struct" name="GstGLUploadMeta" link="GstGLUploadMeta.html#GstGLUploadMeta-struct"/>
-    <keyword type="function" name="GLCB ()" link="gst-plugins-bad-libs-Utilities.html#GLCB:CAPS"/>
-    <keyword type="function" name="GLCB_V2 ()" link="gst-plugins-bad-libs-Utilities.html#GLCB-V2:CAPS"/>
-    <keyword type="function" name="CDCB ()" link="gst-plugins-bad-libs-Utilities.html#CDCB:CAPS"/>
-    <keyword type="function" name="gst_gl_handle_set_context ()" link="gst-plugins-bad-libs-Utilities.html#gst-gl-handle-set-context"/>
-    <keyword type="function" name="gst_gl_handle_context_query ()" link="gst-plugins-bad-libs-Utilities.html#gst-gl-handle-context-query"/>
-    <keyword type="function" name="gst_gl_context_gen_texture ()" link="gst-plugins-bad-libs-Utilities.html#gst-gl-context-gen-texture"/>
-    <keyword type="function" name="gst_gl_context_del_texture ()" link="gst-plugins-bad-libs-Utilities.html#gst-gl-context-del-texture"/>
-    <keyword type="function" name="gst_gl_context_gen_fbo ()" link="gst-plugins-bad-libs-Utilities.html#gst-gl-context-gen-fbo"/>
-    <keyword type="function" name="gst_gl_context_del_fbo ()" link="gst-plugins-bad-libs-Utilities.html#gst-gl-context-del-fbo"/>
-    <keyword type="function" name="gst_gl_context_use_fbo_v2 ()" link="gst-plugins-bad-libs-Utilities.html#gst-gl-context-use-fbo-v2"/>
-    <keyword type="function" name="gst_gl_context_gen_shader ()" link="gst-plugins-bad-libs-Utilities.html#gst-gl-context-gen-shader"/>
-    <keyword type="function" name="gst_gl_context_del_shader ()" link="gst-plugins-bad-libs-Utilities.html#gst-gl-context-del-shader"/>
-    <keyword type="function" name="gst_gl_context_check_framebuffer_status ()" link="gst-plugins-bad-libs-Utilities.html#gst-gl-context-check-framebuffer-status"/>
-    <keyword type="function" name="gst_gl_context_set_error ()" link="gst-plugins-bad-libs-Utilities.html#gst-gl-context-set-error"/>
-    <keyword type="function" name="gst_gl_context_get_error ()" link="gst-plugins-bad-libs-Utilities.html#gst-gl-context-get-error"/>
-    <keyword type="function" name="gst_gl_context_clear_shader ()" link="gst-plugins-bad-libs-Utilities.html#gst-gl-context-clear-shader"/>
-    <keyword type="function" name="gst_gl_generate_texture_full ()" link="gst-plugins-bad-libs-Utilities.html#gst-gl-generate-texture-full"/>
-    <keyword type="function" name="gst_gl_caps_replace_all_caps_features ()" link="gst-plugins-bad-libs-Utilities.html#gst-gl-caps-replace-all-caps-features"/>
-    <keyword type="function" name="gst_gl_ensure_element_data ()" link="gst-plugins-bad-libs-Utilities.html#gst-gl-ensure-element-data"/>
-    <keyword type="function" name="gst_gl_get_plane_data_size ()" link="gst-plugins-bad-libs-Utilities.html#gst-gl-get-plane-data-size"/>
-    <keyword type="function" name="gst_gl_run_query ()" link="gst-plugins-bad-libs-Utilities.html#gst-gl-run-query"/>
-    <keyword type="enum" name="enum GstGLDisplayProjection" link="gst-plugins-bad-libs-Utilities.html#GstGLDisplayProjection"/>
     <keyword type="function" name="gst_gl_window_error_quark ()" link="GstGLWindow.html#gst-gl-window-error-quark"/>
     <keyword type="macro" name="GST_GL_WINDOW_ERROR" link="GstGLWindow.html#GST-GL-WINDOW-ERROR:CAPS"/>
     <keyword type="function" name="GstGLWindowResizeCB ()" link="GstGLWindow.html#GstGLWindowResizeCB"/>
@@ -659,7 +717,6 @@
     <keyword type="macro" name="GST_GL_WINDOW_CB()" link="GstGLWindow.html#GST-GL-WINDOW-CB:CAPS"/>
     <keyword type="function" name="gst_gl_window_new ()" link="GstGLWindow.html#gst-gl-window-new" since="1.4"/>
     <keyword type="function" name="gst_gl_window_draw ()" link="GstGLWindow.html#gst-gl-window-draw" since="1.4"/>
-    <keyword type="function" name="gst_gl_window_draw_unlocked ()" link="GstGLWindow.html#gst-gl-window-draw-unlocked" since="1.4"/>
     <keyword type="function" name="gst_gl_window_is_running ()" link="GstGLWindow.html#gst-gl-window-is-running" since="1.4"/>
     <keyword type="function" name="gst_gl_window_quit ()" link="GstGLWindow.html#gst-gl-window-quit" since="1.4"/>
     <keyword type="function" name="gst_gl_window_run ()" link="GstGLWindow.html#gst-gl-window-run" since="1.4"/>
@@ -704,6 +761,183 @@
     <keyword type="function" name="gst_gl_window_x11_untrap_x_errors ()" link="gst-plugins-bad-libs-GstGLWindowX11.html#gst-gl-window-x11-untrap-x-errors"/>
     <keyword type="struct" name="struct GstGLWindowX11" link="gst-plugins-bad-libs-GstGLWindowX11.html#GstGLWindowX11"/>
     <keyword type="struct" name="struct GstGLWindowX11Class" link="gst-plugins-bad-libs-GstGLWindowX11.html#GstGLWindowX11Class"/>
+    <keyword type="function" name="GstGLAsyncDebugLogGetMessage ()" link="gst-plugins-bad-libs-OpenGL-debugging.html#GstGLAsyncDebugLogGetMessage"/>
+    <keyword type="function" name="gst_gl_async_debug_new ()" link="gst-plugins-bad-libs-OpenGL-debugging.html#gst-gl-async-debug-new" since="1.8"/>
+    <keyword type="function" name="gst_gl_async_debug_free ()" link="gst-plugins-bad-libs-OpenGL-debugging.html#gst-gl-async-debug-free" since="1.8"/>
+    <keyword type="function" name="gst_gl_async_debug_init ()" link="gst-plugins-bad-libs-OpenGL-debugging.html#gst-gl-async-debug-init" since="1.8"/>
+    <keyword type="function" name="gst_gl_async_debug_unset ()" link="gst-plugins-bad-libs-OpenGL-debugging.html#gst-gl-async-debug-unset"/>
+    <keyword type="function" name="gst_gl_async_debug_freeze ()" link="gst-plugins-bad-libs-OpenGL-debugging.html#gst-gl-async-debug-freeze" since="1.8"/>
+    <keyword type="function" name="gst_gl_async_debug_thaw ()" link="gst-plugins-bad-libs-OpenGL-debugging.html#gst-gl-async-debug-thaw" since="1.8"/>
+    <keyword type="function" name="gst_gl_async_debug_output_log_msg ()" link="gst-plugins-bad-libs-OpenGL-debugging.html#gst-gl-async-debug-output-log-msg"/>
+    <keyword type="function" name="gst_gl_async_debug_store_log_msg ()" link="gst-plugins-bad-libs-OpenGL-debugging.html#gst-gl-async-debug-store-log-msg" since="1.8"/>
+    <keyword type="function" name="gst_gl_async_debug_store_log_msg_valist ()" link="gst-plugins-bad-libs-OpenGL-debugging.html#gst-gl-async-debug-store-log-msg-valist" since="1.8"/>
+    <keyword type="macro" name="GST_GL_ASYNC_CAT_LEVEL_LOG_valist()" link="gst-plugins-bad-libs-OpenGL-debugging.html#GST-GL-ASYNC-CAT-LEVEL-LOG-valist"/>
+    <keyword type="macro" name="GST_GL_ASYNC_CAT_LEVEL_LOG()" link="gst-plugins-bad-libs-OpenGL-debugging.html#GST-GL-ASYNC-CAT-LEVEL-LOG:CAPS"/>
+    <keyword type="function" name="gst_gl_insert_debug_marker ()" link="gst-plugins-bad-libs-OpenGL-debugging.html#gst-gl-insert-debug-marker" since="1.8"/>
+    <keyword type="struct" name="struct GstGLAsyncDebug" link="gst-plugins-bad-libs-OpenGL-debugging.html#GstGLAsyncDebug"/>
+    <keyword type="function" name="GLCB ()" link="gst-plugins-bad-libs-OpenGL-Miscellaneous-Utilities.html#GLCB:CAPS"/>
+    <keyword type="function" name="GLCB_V2 ()" link="gst-plugins-bad-libs-OpenGL-Miscellaneous-Utilities.html#GLCB-V2:CAPS"/>
+    <keyword type="function" name="CDCB ()" link="gst-plugins-bad-libs-OpenGL-Miscellaneous-Utilities.html#CDCB:CAPS"/>
+    <keyword type="function" name="gst_gl_handle_set_context ()" link="gst-plugins-bad-libs-OpenGL-Miscellaneous-Utilities.html#gst-gl-handle-set-context"/>
+    <keyword type="function" name="gst_gl_handle_context_query ()" link="gst-plugins-bad-libs-OpenGL-Miscellaneous-Utilities.html#gst-gl-handle-context-query"/>
+    <keyword type="function" name="gst_gl_context_gen_texture ()" link="gst-plugins-bad-libs-OpenGL-Miscellaneous-Utilities.html#gst-gl-context-gen-texture"/>
+    <keyword type="function" name="gst_gl_context_del_texture ()" link="gst-plugins-bad-libs-OpenGL-Miscellaneous-Utilities.html#gst-gl-context-del-texture"/>
+    <keyword type="function" name="gst_gl_context_gen_fbo ()" link="gst-plugins-bad-libs-OpenGL-Miscellaneous-Utilities.html#gst-gl-context-gen-fbo"/>
+    <keyword type="function" name="gst_gl_context_del_fbo ()" link="gst-plugins-bad-libs-OpenGL-Miscellaneous-Utilities.html#gst-gl-context-del-fbo"/>
+    <keyword type="function" name="gst_gl_context_use_fbo_v2 ()" link="gst-plugins-bad-libs-OpenGL-Miscellaneous-Utilities.html#gst-gl-context-use-fbo-v2"/>
+    <keyword type="function" name="gst_gl_context_gen_shader ()" link="gst-plugins-bad-libs-OpenGL-Miscellaneous-Utilities.html#gst-gl-context-gen-shader"/>
+    <keyword type="function" name="gst_gl_context_del_shader ()" link="gst-plugins-bad-libs-OpenGL-Miscellaneous-Utilities.html#gst-gl-context-del-shader"/>
+    <keyword type="function" name="gst_gl_context_check_framebuffer_status ()" link="gst-plugins-bad-libs-OpenGL-Miscellaneous-Utilities.html#gst-gl-context-check-framebuffer-status"/>
+    <keyword type="function" name="gst_gl_context_set_error ()" link="gst-plugins-bad-libs-OpenGL-Miscellaneous-Utilities.html#gst-gl-context-set-error"/>
+    <keyword type="function" name="gst_gl_context_get_error ()" link="gst-plugins-bad-libs-OpenGL-Miscellaneous-Utilities.html#gst-gl-context-get-error"/>
+    <keyword type="function" name="gst_gl_context_clear_shader ()" link="gst-plugins-bad-libs-OpenGL-Miscellaneous-Utilities.html#gst-gl-context-clear-shader"/>
+    <keyword type="function" name="gst_gl_generate_texture_full ()" link="gst-plugins-bad-libs-OpenGL-Miscellaneous-Utilities.html#gst-gl-generate-texture-full"/>
+    <keyword type="function" name="gst_gl_caps_replace_all_caps_features ()" link="gst-plugins-bad-libs-OpenGL-Miscellaneous-Utilities.html#gst-gl-caps-replace-all-caps-features"/>
+    <keyword type="function" name="gst_gl_ensure_element_data ()" link="gst-plugins-bad-libs-OpenGL-Miscellaneous-Utilities.html#gst-gl-ensure-element-data"/>
+    <keyword type="function" name="gst_gl_get_plane_data_size ()" link="gst-plugins-bad-libs-OpenGL-Miscellaneous-Utilities.html#gst-gl-get-plane-data-size"/>
+    <keyword type="function" name="gst_gl_get_plane_start ()" link="gst-plugins-bad-libs-OpenGL-Miscellaneous-Utilities.html#gst-gl-get-plane-start"/>
+    <keyword type="function" name="gst_gl_run_query ()" link="gst-plugins-bad-libs-OpenGL-Miscellaneous-Utilities.html#gst-gl-run-query"/>
+    <keyword type="function" name="gst_gl_value_get_texture_target_mask ()" link="gst-plugins-bad-libs-OpenGL-Miscellaneous-Utilities.html#gst-gl-value-get-texture-target-mask"/>
+    <keyword type="function" name="gst_gl_value_set_texture_target ()" link="gst-plugins-bad-libs-OpenGL-Miscellaneous-Utilities.html#gst-gl-value-set-texture-target"/>
+    <keyword type="function" name="gst_gl_value_set_texture_target_from_mask ()" link="gst-plugins-bad-libs-OpenGL-Miscellaneous-Utilities.html#gst-gl-value-set-texture-target-from-mask"/>
+    <keyword type="enum" name="enum GstGLDisplayProjection" link="gst-plugins-bad-libs-OpenGL-Miscellaneous-Utilities.html#GstGLDisplayProjection"/>
+    <keyword type="function" name="gst_gl_format_type_n_bytes ()" link="gst-plugins-bad-libs-OpenGL-Formats.html#gst-gl-format-type-n-bytes"/>
+    <keyword type="function" name="gst_gl_texture_type_n_bytes ()" link="gst-plugins-bad-libs-OpenGL-Formats.html#gst-gl-texture-type-n-bytes"/>
+    <keyword type="function" name="gst_gl_format_from_gl_texture_type ()" link="gst-plugins-bad-libs-OpenGL-Formats.html#gst-gl-format-from-gl-texture-type"/>
+    <keyword type="function" name="gst_gl_texture_type_from_format ()" link="gst-plugins-bad-libs-OpenGL-Formats.html#gst-gl-texture-type-from-format"/>
+    <keyword type="function" name="gst_gl_sized_gl_format_from_gl_format_type ()" link="gst-plugins-bad-libs-OpenGL-Formats.html#gst-gl-sized-gl-format-from-gl-format-type"/>
+    <keyword type="function" name="gst_gl_texture_target_from_string ()" link="gst-plugins-bad-libs-OpenGL-Formats.html#gst-gl-texture-target-from-string"/>
+    <keyword type="function" name="gst_gl_texture_target_to_string ()" link="gst-plugins-bad-libs-OpenGL-Formats.html#gst-gl-texture-target-to-string"/>
+    <keyword type="function" name="gst_gl_texture_target_to_gl ()" link="gst-plugins-bad-libs-OpenGL-Formats.html#gst-gl-texture-target-to-gl"/>
+    <keyword type="function" name="gst_gl_texture_target_from_gl ()" link="gst-plugins-bad-libs-OpenGL-Formats.html#gst-gl-texture-target-from-gl"/>
+    <keyword type="function" name="gst_gl_texture_target_to_buffer_pool_option ()" link="gst-plugins-bad-libs-OpenGL-Formats.html#gst-gl-texture-target-to-buffer-pool-option"/>
+    <keyword type="enum" name="enum GstGLTextureTarget" link="gst-plugins-bad-libs-OpenGL-Formats.html#GstGLTextureTarget" since="1.8"/>
+    <keyword type="macro" name="GST_GL_TEXTURE_TARGET_2D_STR" link="gst-plugins-bad-libs-OpenGL-Formats.html#GST-GL-TEXTURE-TARGET-2D-STR:CAPS"/>
+    <keyword type="macro" name="GST_GL_TEXTURE_TARGET_RECTANGLE_STR" link="gst-plugins-bad-libs-OpenGL-Formats.html#GST-GL-TEXTURE-TARGET-RECTANGLE-STR:CAPS"/>
+    <keyword type="macro" name="GST_GL_TEXTURE_TARGET_EXTERNAL_OES_STR" link="gst-plugins-bad-libs-OpenGL-Formats.html#GST-GL-TEXTURE-TARGET-EXTERNAL-OES-STR:CAPS"/>
+    <keyword type="macro" name="GST_BUFFER_POOL_OPTION_GL_TEXTURE_TARGET_2D" link="gst-plugins-bad-libs-OpenGL-Formats.html#GST-BUFFER-POOL-OPTION-GL-TEXTURE-TARGET-2D:CAPS"/>
+    <keyword type="macro" name="GST_BUFFER_POOL_OPTION_GL_TEXTURE_TARGET_RECTANGLE" link="gst-plugins-bad-libs-OpenGL-Formats.html#GST-BUFFER-POOL-OPTION-GL-TEXTURE-TARGET-RECTANGLE:CAPS"/>
+    <keyword type="macro" name="GST_BUFFER_POOL_OPTION_GL_TEXTURE_TARGET_EXTERNAL_OES" link="gst-plugins-bad-libs-OpenGL-Formats.html#GST-BUFFER-POOL-OPTION-GL-TEXTURE-TARGET-EXTERNAL-OES:CAPS"/>
+    <keyword type="function" name="gst_player_new ()" link="gst-plugins-bad-libs-gstplayer.html#gst-player-new"/>
+    <keyword type="function" name="gst_player_play ()" link="gst-plugins-bad-libs-gstplayer.html#gst-player-play"/>
+    <keyword type="function" name="gst_player_pause ()" link="gst-plugins-bad-libs-gstplayer.html#gst-player-pause"/>
+    <keyword type="function" name="gst_player_stop ()" link="gst-plugins-bad-libs-gstplayer.html#gst-player-stop"/>
+    <keyword type="function" name="gst_player_seek ()" link="gst-plugins-bad-libs-gstplayer.html#gst-player-seek"/>
+    <keyword type="function" name="gst_player_set_uri ()" link="gst-plugins-bad-libs-gstplayer.html#gst-player-set-uri"/>
+    <keyword type="function" name="gst_player_get_uri ()" link="gst-plugins-bad-libs-gstplayer.html#gst-player-get-uri"/>
+    <keyword type="function" name="gst_player_get_duration ()" link="gst-plugins-bad-libs-gstplayer.html#gst-player-get-duration"/>
+    <keyword type="function" name="gst_player_get_position ()" link="gst-plugins-bad-libs-gstplayer.html#gst-player-get-position"/>
+    <keyword type="function" name="gst_player_set_volume ()" link="gst-plugins-bad-libs-gstplayer.html#gst-player-set-volume"/>
+    <keyword type="function" name="gst_player_set_mute ()" link="gst-plugins-bad-libs-gstplayer.html#gst-player-set-mute"/>
+    <keyword type="function" name="gst_player_get_volume ()" link="gst-plugins-bad-libs-gstplayer.html#gst-player-get-volume"/>
+    <keyword type="function" name="gst_player_get_mute ()" link="gst-plugins-bad-libs-gstplayer.html#gst-player-get-mute"/>
+    <keyword type="function" name="gst_player_get_pipeline ()" link="gst-plugins-bad-libs-gstplayer.html#gst-player-get-pipeline"/>
+    <keyword type="function" name="gst_player_set_position_update_interval ()" link="gst-plugins-bad-libs-gstplayer.html#gst-player-set-position-update-interval"/>
+    <keyword type="function" name="gst_player_get_position_update_interval ()" link="gst-plugins-bad-libs-gstplayer.html#gst-player-get-position-update-interval"/>
+    <keyword type="function" name="gst_player_state_get_name ()" link="gst-plugins-bad-libs-gstplayer.html#gst-player-state-get-name"/>
+    <keyword type="macro" name="GST_PLAYER_ERROR" link="gst-plugins-bad-libs-gstplayer.html#GST-PLAYER-ERROR:CAPS"/>
+    <keyword type="function" name="gst_player_error_get_name ()" link="gst-plugins-bad-libs-gstplayer.html#gst-player-error-get-name"/>
+    <keyword type="function" name="gst_player_get_media_info ()" link="gst-plugins-bad-libs-gstplayer.html#gst-player-get-media-info"/>
+    <keyword type="function" name="gst_player_get_audio_streams ()" link="gst-plugins-bad-libs-gstplayer.html#gst-player-get-audio-streams"/>
+    <keyword type="function" name="gst_player_get_video_streams ()" link="gst-plugins-bad-libs-gstplayer.html#gst-player-get-video-streams"/>
+    <keyword type="function" name="gst_player_get_subtitle_streams ()" link="gst-plugins-bad-libs-gstplayer.html#gst-player-get-subtitle-streams"/>
+    <keyword type="function" name="gst_player_set_audio_track ()" link="gst-plugins-bad-libs-gstplayer.html#gst-player-set-audio-track"/>
+    <keyword type="function" name="gst_player_set_video_track ()" link="gst-plugins-bad-libs-gstplayer.html#gst-player-set-video-track"/>
+    <keyword type="function" name="gst_player_set_subtitle_track ()" link="gst-plugins-bad-libs-gstplayer.html#gst-player-set-subtitle-track"/>
+    <keyword type="function" name="gst_player_get_current_audio_track ()" link="gst-plugins-bad-libs-gstplayer.html#gst-player-get-current-audio-track"/>
+    <keyword type="function" name="gst_player_get_current_video_track ()" link="gst-plugins-bad-libs-gstplayer.html#gst-player-get-current-video-track"/>
+    <keyword type="function" name="gst_player_get_current_subtitle_track ()" link="gst-plugins-bad-libs-gstplayer.html#gst-player-get-current-subtitle-track"/>
+    <keyword type="function" name="gst_player_set_audio_track_enabled ()" link="gst-plugins-bad-libs-gstplayer.html#gst-player-set-audio-track-enabled"/>
+    <keyword type="function" name="gst_player_set_video_track_enabled ()" link="gst-plugins-bad-libs-gstplayer.html#gst-player-set-video-track-enabled"/>
+    <keyword type="function" name="gst_player_set_subtitle_track_enabled ()" link="gst-plugins-bad-libs-gstplayer.html#gst-player-set-subtitle-track-enabled"/>
+    <keyword type="function" name="gst_player_set_subtitle_uri ()" link="gst-plugins-bad-libs-gstplayer.html#gst-player-set-subtitle-uri"/>
+    <keyword type="function" name="gst_player_get_subtitle_uri ()" link="gst-plugins-bad-libs-gstplayer.html#gst-player-get-subtitle-uri"/>
+    <keyword type="function" name="gst_player_set_visualization ()" link="gst-plugins-bad-libs-gstplayer.html#gst-player-set-visualization"/>
+    <keyword type="function" name="gst_player_set_visualization_enabled ()" link="gst-plugins-bad-libs-gstplayer.html#gst-player-set-visualization-enabled"/>
+    <keyword type="function" name="gst_player_get_current_visualization ()" link="gst-plugins-bad-libs-gstplayer.html#gst-player-get-current-visualization"/>
+    <keyword type="function" name="gst_player_color_balance_type_get_name ()" link="gst-plugins-bad-libs-gstplayer.html#gst-player-color-balance-type-get-name"/>
+    <keyword type="function" name="gst_player_has_color_balance ()" link="gst-plugins-bad-libs-gstplayer.html#gst-player-has-color-balance"/>
+    <keyword type="function" name="gst_player_set_color_balance ()" link="gst-plugins-bad-libs-gstplayer.html#gst-player-set-color-balance"/>
+    <keyword type="function" name="gst_player_get_color_balance ()" link="gst-plugins-bad-libs-gstplayer.html#gst-player-get-color-balance"/>
+    <keyword type="function" name="gst_player_get_rate ()" link="gst-plugins-bad-libs-gstplayer.html#gst-player-get-rate"/>
+    <keyword type="function" name="gst_player_set_rate ()" link="gst-plugins-bad-libs-gstplayer.html#gst-player-set-rate"/>
+    <keyword type="struct" name="GstPlayer" link="gst-plugins-bad-libs-gstplayer.html#GstPlayer-struct"/>
+    <keyword type="enum" name="enum GstPlayerState" link="gst-plugins-bad-libs-gstplayer.html#GstPlayerState"/>
+    <keyword type="enum" name="enum GstPlayerError" link="gst-plugins-bad-libs-gstplayer.html#GstPlayerError"/>
+    <keyword type="enum" name="enum GstPlayerColorBalanceType" link="gst-plugins-bad-libs-gstplayer.html#GstPlayerColorBalanceType"/>
+    <keyword type="struct" name="GstPlayerSignalDispatcher" link="gst-plugins-bad-libs-gstplayer.html#GstPlayerSignalDispatcher-struct"/>
+    <keyword type="struct" name="struct GstPlayerSignalDispatcherInterface" link="gst-plugins-bad-libs-gstplayer.html#GstPlayerSignalDispatcherInterface"/>
+    <keyword type="struct" name="GstPlayerVideoRenderer" link="gst-plugins-bad-libs-gstplayer.html#GstPlayerVideoRenderer-struct"/>
+    <keyword type="struct" name="struct GstPlayerVideoRendererInterface" link="gst-plugins-bad-libs-gstplayer.html#GstPlayerVideoRendererInterface"/>
+    <keyword type="property" name="The “current-audio-track” property" link="gst-plugins-bad-libs-gstplayer.html#GstPlayer--current-audio-track"/>
+    <keyword type="property" name="The “current-subtitle-track” property" link="gst-plugins-bad-libs-gstplayer.html#GstPlayer--current-subtitle-track"/>
+    <keyword type="property" name="The “current-video-track” property" link="gst-plugins-bad-libs-gstplayer.html#GstPlayer--current-video-track"/>
+    <keyword type="property" name="The “duration” property" link="gst-plugins-bad-libs-gstplayer.html#GstPlayer--duration"/>
+    <keyword type="property" name="The “media-info” property" link="gst-plugins-bad-libs-gstplayer.html#GstPlayer--media-info"/>
+    <keyword type="property" name="The “mute” property" link="gst-plugins-bad-libs-gstplayer.html#GstPlayer--mute"/>
+    <keyword type="property" name="The “pipeline” property" link="gst-plugins-bad-libs-gstplayer.html#GstPlayer--pipeline"/>
+    <keyword type="property" name="The “position” property" link="gst-plugins-bad-libs-gstplayer.html#GstPlayer--position"/>
+    <keyword type="property" name="The “position-update-interval” property" link="gst-plugins-bad-libs-gstplayer.html#GstPlayer--position-update-interval"/>
+    <keyword type="property" name="The “rate” property" link="gst-plugins-bad-libs-gstplayer.html#GstPlayer--rate"/>
+    <keyword type="property" name="The “signal-dispatcher” property" link="gst-plugins-bad-libs-gstplayer.html#GstPlayer--signal-dispatcher"/>
+    <keyword type="property" name="The “suburi” property" link="gst-plugins-bad-libs-gstplayer.html#GstPlayer--suburi"/>
+    <keyword type="property" name="The “uri” property" link="gst-plugins-bad-libs-gstplayer.html#GstPlayer--uri"/>
+    <keyword type="property" name="The “video-renderer” property" link="gst-plugins-bad-libs-gstplayer.html#GstPlayer--video-renderer"/>
+    <keyword type="property" name="The “volume” property" link="gst-plugins-bad-libs-gstplayer.html#GstPlayer--volume"/>
+    <keyword type="signal" name="The “buffering” signal" link="gst-plugins-bad-libs-gstplayer.html#GstPlayer-buffering"/>
+    <keyword type="signal" name="The “duration-changed” signal" link="gst-plugins-bad-libs-gstplayer.html#GstPlayer-duration-changed"/>
+    <keyword type="signal" name="The “end-of-stream” signal" link="gst-plugins-bad-libs-gstplayer.html#GstPlayer-end-of-stream"/>
+    <keyword type="signal" name="The “error” signal" link="gst-plugins-bad-libs-gstplayer.html#GstPlayer-error"/>
+    <keyword type="signal" name="The “media-info-updated” signal" link="gst-plugins-bad-libs-gstplayer.html#GstPlayer-media-info-updated"/>
+    <keyword type="signal" name="The “mute-changed” signal" link="gst-plugins-bad-libs-gstplayer.html#GstPlayer-mute-changed"/>
+    <keyword type="signal" name="The “position-updated” signal" link="gst-plugins-bad-libs-gstplayer.html#GstPlayer-position-updated"/>
+    <keyword type="signal" name="The “seek-done” signal" link="gst-plugins-bad-libs-gstplayer.html#GstPlayer-seek-done"/>
+    <keyword type="signal" name="The “state-changed” signal" link="gst-plugins-bad-libs-gstplayer.html#GstPlayer-state-changed"/>
+    <keyword type="signal" name="The “video-dimensions-changed” signal" link="gst-plugins-bad-libs-gstplayer.html#GstPlayer-video-dimensions-changed"/>
+    <keyword type="signal" name="The “volume-changed” signal" link="gst-plugins-bad-libs-gstplayer.html#GstPlayer-volume-changed"/>
+    <keyword type="signal" name="The “warning” signal" link="gst-plugins-bad-libs-gstplayer.html#GstPlayer-warning"/>
+    <keyword type="function" name="gst_player_media_info_get_uri ()" link="gst-plugins-bad-libs-gstplayer-mediainfo.html#gst-player-media-info-get-uri"/>
+    <keyword type="function" name="gst_player_media_info_get_duration ()" link="gst-plugins-bad-libs-gstplayer-mediainfo.html#gst-player-media-info-get-duration"/>
+    <keyword type="function" name="gst_player_media_info_get_title ()" link="gst-plugins-bad-libs-gstplayer-mediainfo.html#gst-player-media-info-get-title"/>
+    <keyword type="function" name="gst_player_media_info_get_container_format ()" link="gst-plugins-bad-libs-gstplayer-mediainfo.html#gst-player-media-info-get-container-format"/>
+    <keyword type="function" name="gst_player_media_info_is_seekable ()" link="gst-plugins-bad-libs-gstplayer-mediainfo.html#gst-player-media-info-is-seekable"/>
+    <keyword type="function" name="gst_player_media_info_get_image_sample ()" link="gst-plugins-bad-libs-gstplayer-mediainfo.html#gst-player-media-info-get-image-sample"/>
+    <keyword type="function" name="gst_player_media_info_get_tags ()" link="gst-plugins-bad-libs-gstplayer-mediainfo.html#gst-player-media-info-get-tags"/>
+    <keyword type="function" name="gst_player_media_info_get_stream_list ()" link="gst-plugins-bad-libs-gstplayer-mediainfo.html#gst-player-media-info-get-stream-list"/>
+    <keyword type="function" name="gst_player_stream_info_get_index ()" link="gst-plugins-bad-libs-gstplayer-mediainfo.html#gst-player-stream-info-get-index"/>
+    <keyword type="function" name="gst_player_stream_info_get_caps ()" link="gst-plugins-bad-libs-gstplayer-mediainfo.html#gst-player-stream-info-get-caps"/>
+    <keyword type="function" name="gst_player_stream_info_get_tags ()" link="gst-plugins-bad-libs-gstplayer-mediainfo.html#gst-player-stream-info-get-tags"/>
+    <keyword type="function" name="gst_player_stream_info_get_codec ()" link="gst-plugins-bad-libs-gstplayer-mediainfo.html#gst-player-stream-info-get-codec"/>
+    <keyword type="function" name="gst_player_stream_info_get_stream_type ()" link="gst-plugins-bad-libs-gstplayer-mediainfo.html#gst-player-stream-info-get-stream-type"/>
+    <keyword type="function" name="gst_player_audio_info_get_bitrate ()" link="gst-plugins-bad-libs-gstplayer-mediainfo.html#gst-player-audio-info-get-bitrate"/>
+    <keyword type="function" name="gst_player_audio_info_get_channels ()" link="gst-plugins-bad-libs-gstplayer-mediainfo.html#gst-player-audio-info-get-channels"/>
+    <keyword type="function" name="gst_player_audio_info_get_language ()" link="gst-plugins-bad-libs-gstplayer-mediainfo.html#gst-player-audio-info-get-language"/>
+    <keyword type="function" name="gst_player_audio_info_get_max_bitrate ()" link="gst-plugins-bad-libs-gstplayer-mediainfo.html#gst-player-audio-info-get-max-bitrate"/>
+    <keyword type="function" name="gst_player_audio_info_get_sample_rate ()" link="gst-plugins-bad-libs-gstplayer-mediainfo.html#gst-player-audio-info-get-sample-rate"/>
+    <keyword type="function" name="gst_player_video_info_get_bitrate ()" link="gst-plugins-bad-libs-gstplayer-mediainfo.html#gst-player-video-info-get-bitrate"/>
+    <keyword type="function" name="gst_player_video_info_get_height ()" link="gst-plugins-bad-libs-gstplayer-mediainfo.html#gst-player-video-info-get-height"/>
+    <keyword type="function" name="gst_player_video_info_get_width ()" link="gst-plugins-bad-libs-gstplayer-mediainfo.html#gst-player-video-info-get-width"/>
+    <keyword type="function" name="gst_player_video_info_get_framerate ()" link="gst-plugins-bad-libs-gstplayer-mediainfo.html#gst-player-video-info-get-framerate"/>
+    <keyword type="function" name="gst_player_video_info_get_max_bitrate ()" link="gst-plugins-bad-libs-gstplayer-mediainfo.html#gst-player-video-info-get-max-bitrate"/>
+    <keyword type="function" name="gst_player_video_info_get_pixel_aspect_ratio ()" link="gst-plugins-bad-libs-gstplayer-mediainfo.html#gst-player-video-info-get-pixel-aspect-ratio"/>
+    <keyword type="function" name="gst_player_subtitle_info_get_language ()" link="gst-plugins-bad-libs-gstplayer-mediainfo.html#gst-player-subtitle-info-get-language"/>
+    <keyword type="struct" name="GstPlayerMediaInfo" link="gst-plugins-bad-libs-gstplayer-mediainfo.html#GstPlayerMediaInfo-struct"/>
+    <keyword type="struct" name="GstPlayerStreamInfo" link="gst-plugins-bad-libs-gstplayer-mediainfo.html#GstPlayerStreamInfo-struct"/>
+    <keyword type="struct" name="GstPlayerAudioInfo" link="gst-plugins-bad-libs-gstplayer-mediainfo.html#GstPlayerAudioInfo-struct"/>
+    <keyword type="struct" name="GstPlayerVideoInfo" link="gst-plugins-bad-libs-gstplayer-mediainfo.html#GstPlayerVideoInfo-struct"/>
+    <keyword type="struct" name="GstPlayerSubtitleInfo" link="gst-plugins-bad-libs-gstplayer-mediainfo.html#GstPlayerSubtitleInfo-struct"/>
+    <keyword type="function" name="gst_player_g_main_context_signal_dispatcher_new ()" link="gst-plugins-bad-libs-gstplayer-gmaincontextsignaldispatcher.html#gst-player-g-main-context-signal-dispatcher-new"/>
+    <keyword type="function" name="gst_player_video_overlay_video_renderer_new ()" link="gst-plugins-bad-libs-gstplayer-videooverlayvideorenderer.html#gst-player-video-overlay-video-renderer-new"/>
+    <keyword type="function" name="gst_player_video_overlay_video_renderer_get_window_handle ()" link="gst-plugins-bad-libs-gstplayer-videooverlayvideorenderer.html#gst-player-video-overlay-video-renderer-get-window-handle"/>
+    <keyword type="function" name="gst_player_video_overlay_video_renderer_set_window_handle ()" link="gst-plugins-bad-libs-gstplayer-videooverlayvideorenderer.html#gst-player-video-overlay-video-renderer-set-window-handle"/>
+    <keyword type="function" name="gst_player_video_overlay_video_renderer_expose ()" link="gst-plugins-bad-libs-gstplayer-videooverlayvideorenderer.html#gst-player-video-overlay-video-renderer-expose"/>
+    <keyword type="function" name="gst_player_video_overlay_video_renderer_get_render_rectangle ()" link="gst-plugins-bad-libs-gstplayer-videooverlayvideorenderer.html#gst-player-video-overlay-video-renderer-get-render-rectangle"/>
+    <keyword type="function" name="gst_player_video_overlay_video_renderer_set_render_rectangle ()" link="gst-plugins-bad-libs-gstplayer-videooverlayvideorenderer.html#gst-player-video-overlay-video-renderer-set-render-rectangle"/>
+    <keyword type="function" name="gst_player_visualizations_get ()" link="gst-plugins-bad-libs-gstplayer-visualization.html#gst-player-visualizations-get"/>
+    <keyword type="function" name="gst_player_visualizations_free ()" link="gst-plugins-bad-libs-gstplayer-visualization.html#gst-player-visualizations-free"/>
+    <keyword type="function" name="gst_player_visualization_copy ()" link="gst-plugins-bad-libs-gstplayer-visualization.html#gst-player-visualization-copy"/>
+    <keyword type="function" name="gst_player_visualization_free ()" link="gst-plugins-bad-libs-gstplayer-visualization.html#gst-player-visualization-free"/>
+    <keyword type="struct" name="struct GstPlayerVisualization" link="gst-plugins-bad-libs-gstplayer-visualization.html#GstPlayerVisualization-struct"/>
     <keyword type="function" name="GstPhotographyCapturePrepared ()" link="gst-plugins-bad-libs-GstPhotography.html#GstPhotographyCapturePrepared"/>
     <keyword type="function" name="gst_photography_get_ev_compensation ()" link="gst-plugins-bad-libs-GstPhotography.html#gst-photography-get-ev-compensation"/>
     <keyword type="function" name="gst_photography_get_iso_speed ()" link="gst-plugins-bad-libs-GstPhotography.html#gst-photography-get-iso-speed"/>
@@ -715,7 +949,7 @@
     <keyword type="function" name="gst_photography_get_flash_mode ()" link="gst-plugins-bad-libs-GstPhotography.html#gst-photography-get-flash-mode"/>
     <keyword type="function" name="gst_photography_get_flicker_mode ()" link="gst-plugins-bad-libs-GstPhotography.html#gst-photography-get-flicker-mode"/>
     <keyword type="function" name="gst_photography_get_focus_mode ()" link="gst-plugins-bad-libs-GstPhotography.html#gst-photography-get-focus-mode"/>
-    <keyword type="function" name="gst_photography_get_noise_reduction ()" link="gst-plugins-bad-libs-GstPhotography.html#gst-photography-get-noise-reduction" since="0.10.21"/>
+    <keyword type="function" name="gst_photography_get_noise_reduction ()" link="gst-plugins-bad-libs-GstPhotography.html#gst-photography-get-noise-reduction"/>
     <keyword type="function" name="gst_photography_get_zoom ()" link="gst-plugins-bad-libs-GstPhotography.html#gst-photography-get-zoom"/>
     <keyword type="function" name="gst_photography_set_ev_compensation ()" link="gst-plugins-bad-libs-GstPhotography.html#gst-photography-set-ev-compensation"/>
     <keyword type="function" name="gst_photography_set_iso_speed ()" link="gst-plugins-bad-libs-GstPhotography.html#gst-photography-set-iso-speed"/>
@@ -727,7 +961,7 @@
     <keyword type="function" name="gst_photography_set_flash_mode ()" link="gst-plugins-bad-libs-GstPhotography.html#gst-photography-set-flash-mode"/>
     <keyword type="function" name="gst_photography_set_flicker_mode ()" link="gst-plugins-bad-libs-GstPhotography.html#gst-photography-set-flicker-mode"/>
     <keyword type="function" name="gst_photography_set_focus_mode ()" link="gst-plugins-bad-libs-GstPhotography.html#gst-photography-set-focus-mode"/>
-    <keyword type="function" name="gst_photography_set_noise_reduction ()" link="gst-plugins-bad-libs-GstPhotography.html#gst-photography-set-noise-reduction" since="0.10.21"/>
+    <keyword type="function" name="gst_photography_set_noise_reduction ()" link="gst-plugins-bad-libs-GstPhotography.html#gst-photography-set-noise-reduction"/>
     <keyword type="function" name="gst_photography_set_zoom ()" link="gst-plugins-bad-libs-GstPhotography.html#gst-photography-set-zoom"/>
     <keyword type="function" name="gst_photography_get_capabilities ()" link="gst-plugins-bad-libs-GstPhotography.html#gst-photography-get-capabilities"/>
     <keyword type="function" name="gst_photography_prepare_for_capture ()" link="gst-plugins-bad-libs-GstPhotography.html#gst-photography-prepare-for-capture"/>
@@ -735,7 +969,7 @@
     <keyword type="function" name="gst_photography_set_config ()" link="gst-plugins-bad-libs-GstPhotography.html#gst-photography-set-config"/>
     <keyword type="function" name="gst_photography_get_config ()" link="gst-plugins-bad-libs-GstPhotography.html#gst-photography-get-config"/>
     <keyword type="struct" name="GstPhotography" link="gst-plugins-bad-libs-GstPhotography.html#GstPhotography"/>
-    <keyword type="enum" name="enum GstPhotographyNoiseReduction" link="gst-plugins-bad-libs-GstPhotography.html#GstPhotographyNoiseReduction" since="0.10.21"/>
+    <keyword type="enum" name="enum GstPhotographyNoiseReduction" link="gst-plugins-bad-libs-GstPhotography.html#GstPhotographyNoiseReduction"/>
     <keyword type="enum" name="enum GstPhotographyWhiteBalanceMode" link="gst-plugins-bad-libs-GstPhotography.html#GstPhotographyWhiteBalanceMode"/>
     <keyword type="enum" name="enum GstPhotographyColorToneMode" link="gst-plugins-bad-libs-GstPhotography.html#GstPhotographyColorToneMode"/>
     <keyword type="enum" name="enum GstPhotographySceneMode" link="gst-plugins-bad-libs-GstPhotography.html#GstPhotographySceneMode"/>
@@ -1449,6 +1683,11 @@
     <keyword type="constant" name="GST_GL_PLATFORM_CGL" link="gst-plugins-bad-libs-GstGLAPI.html#GST-GL-PLATFORM-CGL:CAPS"/>
     <keyword type="constant" name="GST_GL_PLATFORM_EAGL" link="gst-plugins-bad-libs-GstGLAPI.html#GST-GL-PLATFORM-EAGL:CAPS"/>
     <keyword type="constant" name="GST_GL_PLATFORM_ANY" link="gst-plugins-bad-libs-GstGLAPI.html#GST-GL-PLATFORM-ANY:CAPS"/>
+    <keyword type="constant" name="GST_GL_BASE_MEMORY_ERROR_FAILED" link="gst-plugins-bad-libs-gstglbasememory.html#GST-GL-BASE-MEMORY-ERROR-FAILED:CAPS"/>
+    <keyword type="constant" name="GST_GL_BASE_MEMORY_ERROR_OLD_LIBS" link="gst-plugins-bad-libs-gstglbasememory.html#GST-GL-BASE-MEMORY-ERROR-OLD-LIBS:CAPS"/>
+    <keyword type="constant" name="GST_GL_BASE_MEMORY_ERROR_RESOURCE_UNAVAILABLE" link="gst-plugins-bad-libs-gstglbasememory.html#GST-GL-BASE-MEMORY-ERROR-RESOURCE-UNAVAILABLE:CAPS"/>
+    <keyword type="constant" name="GST_GL_BASE_MEMORY_TRANSFER_NEED_DOWNLOAD" link="gst-plugins-bad-libs-gstglbasememory.html#GST-GL-BASE-MEMORY-TRANSFER-NEED-DOWNLOAD:CAPS"/>
+    <keyword type="constant" name="GST_GL_BASE_MEMORY_TRANSFER_NEED_UPLOAD" link="gst-plugins-bad-libs-gstglbasememory.html#GST-GL-BASE-MEMORY-TRANSFER-NEED-UPLOAD:CAPS"/>
     <keyword type="constant" name="GST_GL_CONTEXT_ERROR_FAILED" link="GstGLContext.html#GST-GL-CONTEXT-ERROR-FAILED:CAPS"/>
     <keyword type="constant" name="GST_GL_CONTEXT_ERROR_WRONG_CONFIG" link="GstGLContext.html#GST-GL-CONTEXT-ERROR-WRONG-CONFIG:CAPS"/>
     <keyword type="constant" name="GST_GL_CONTEXT_ERROR_WRONG_API" link="GstGLContext.html#GST-GL-CONTEXT-ERROR-WRONG-API:CAPS"/>
@@ -1463,16 +1702,50 @@
     <keyword type="constant" name="GST_GL_DISPLAY_TYPE_DISPMANX" link="GstGLDisplay.html#GST-GL-DISPLAY-TYPE-DISPMANX:CAPS"/>
     <keyword type="constant" name="GST_GL_DISPLAY_TYPE_EGL" link="GstGLDisplay.html#GST-GL-DISPLAY-TYPE-EGL:CAPS"/>
     <keyword type="constant" name="GST_GL_DISPLAY_TYPE_ANY" link="GstGLDisplay.html#GST-GL-DISPLAY-TYPE-ANY:CAPS"/>
-    <keyword type="constant" name="GST_GL_SHADER_ERROR_COMPILE" link="gst-plugins-bad-libs-gstglshader.html#GST-GL-SHADER-ERROR-COMPILE:CAPS"/>
-    <keyword type="constant" name="GST_GL_SHADER_ERROR_LINK" link="gst-plugins-bad-libs-gstglshader.html#GST-GL-SHADER-ERROR-LINK:CAPS"/>
-    <keyword type="constant" name="GST_GL_SHADER_ERROR_PROGRAM" link="gst-plugins-bad-libs-gstglshader.html#GST-GL-SHADER-ERROR-PROGRAM:CAPS"/>
-    <keyword type="constant" name="GST_GL_SHADER_FRAGMENT_SOURCE" link="gst-plugins-bad-libs-gstglshader.html#GST-GL-SHADER-FRAGMENT-SOURCE:CAPS"/>
-    <keyword type="constant" name="GST_GL_SHADER_VERTEX_SOURCE" link="gst-plugins-bad-libs-gstglshader.html#GST-GL-SHADER-VERTEX-SOURCE:CAPS"/>
-    <keyword type="constant" name="GST_GL_DISPLAY_PROJECTION_ORTHO2D" link="gst-plugins-bad-libs-Utilities.html#GST-GL-DISPLAY-PROJECTION-ORTHO2D:CAPS"/>
-    <keyword type="constant" name="GST_GL_DISPLAY_PROJECTION_PERSPECTIVE" link="gst-plugins-bad-libs-Utilities.html#GST-GL-DISPLAY-PROJECTION-PERSPECTIVE:CAPS"/>
+    <keyword type="constant" name="GST_GLSL_ERROR_COMPILE" link="gst-plugins-bad-libs-GstGLSL.html#GST-GLSL-ERROR-COMPILE:CAPS"/>
+    <keyword type="constant" name="GST_GLSL_ERROR_LINK" link="gst-plugins-bad-libs-GstGLSL.html#GST-GLSL-ERROR-LINK:CAPS"/>
+    <keyword type="constant" name="GST_GLSL_ERROR_PROGRAM" link="gst-plugins-bad-libs-GstGLSL.html#GST-GLSL-ERROR-PROGRAM:CAPS"/>
+    <keyword type="constant" name="GST_GLSL_PROFILE_NONE" link="gst-plugins-bad-libs-GstGLSL.html#GST-GLSL-PROFILE-NONE:CAPS"/>
+    <keyword type="constant" name="GST_GLSL_PROFILE_ES" link="gst-plugins-bad-libs-GstGLSL.html#GST-GLSL-PROFILE-ES:CAPS"/>
+    <keyword type="constant" name="GST_GLSL_PROFILE_CORE" link="gst-plugins-bad-libs-GstGLSL.html#GST-GLSL-PROFILE-CORE:CAPS"/>
+    <keyword type="constant" name="GST_GLSL_PROFILE_COMPATIBILITY" link="gst-plugins-bad-libs-GstGLSL.html#GST-GLSL-PROFILE-COMPATIBILITY:CAPS"/>
+    <keyword type="constant" name="GST_GLSL_PROFILE_ANY" link="gst-plugins-bad-libs-GstGLSL.html#GST-GLSL-PROFILE-ANY:CAPS"/>
+    <keyword type="constant" name="GST_GLSL_VERSION_NONE" link="gst-plugins-bad-libs-GstGLSL.html#GST-GLSL-VERSION-NONE:CAPS"/>
+    <keyword type="constant" name="GST_GLSL_VERSION_100" link="gst-plugins-bad-libs-GstGLSL.html#GST-GLSL-VERSION-100:CAPS"/>
+    <keyword type="constant" name="GST_GLSL_VERSION_110" link="gst-plugins-bad-libs-GstGLSL.html#GST-GLSL-VERSION-110:CAPS"/>
+    <keyword type="constant" name="GST_GLSL_VERSION_120" link="gst-plugins-bad-libs-GstGLSL.html#GST-GLSL-VERSION-120:CAPS"/>
+    <keyword type="constant" name="GST_GLSL_VERSION_130" link="gst-plugins-bad-libs-GstGLSL.html#GST-GLSL-VERSION-130:CAPS"/>
+    <keyword type="constant" name="GST_GLSL_VERSION_140" link="gst-plugins-bad-libs-GstGLSL.html#GST-GLSL-VERSION-140:CAPS"/>
+    <keyword type="constant" name="GST_GLSL_VERSION_150" link="gst-plugins-bad-libs-GstGLSL.html#GST-GLSL-VERSION-150:CAPS"/>
+    <keyword type="constant" name="GST_GLSL_VERSION_300" link="gst-plugins-bad-libs-GstGLSL.html#GST-GLSL-VERSION-300:CAPS"/>
+    <keyword type="constant" name="GST_GLSL_VERSION_310" link="gst-plugins-bad-libs-GstGLSL.html#GST-GLSL-VERSION-310:CAPS"/>
+    <keyword type="constant" name="GST_GLSL_VERSION_320" link="gst-plugins-bad-libs-GstGLSL.html#GST-GLSL-VERSION-320:CAPS"/>
+    <keyword type="constant" name="GST_GLSL_VERSION_330" link="gst-plugins-bad-libs-GstGLSL.html#GST-GLSL-VERSION-330:CAPS"/>
+    <keyword type="constant" name="GST_GLSL_VERSION_400" link="gst-plugins-bad-libs-GstGLSL.html#GST-GLSL-VERSION-400:CAPS"/>
+    <keyword type="constant" name="GST_GLSL_VERSION_410" link="gst-plugins-bad-libs-GstGLSL.html#GST-GLSL-VERSION-410:CAPS"/>
+    <keyword type="constant" name="GST_GLSL_VERSION_420" link="gst-plugins-bad-libs-GstGLSL.html#GST-GLSL-VERSION-420:CAPS"/>
+    <keyword type="constant" name="GST_GLSL_VERSION_430" link="gst-plugins-bad-libs-GstGLSL.html#GST-GLSL-VERSION-430:CAPS"/>
+    <keyword type="constant" name="GST_GLSL_VERSION_440" link="gst-plugins-bad-libs-GstGLSL.html#GST-GLSL-VERSION-440:CAPS"/>
+    <keyword type="constant" name="GST_GLSL_VERSION_450" link="gst-plugins-bad-libs-GstGLSL.html#GST-GLSL-VERSION-450:CAPS"/>
+    <keyword type="constant" name="GST_GLSL_VERSION_ANY" link="gst-plugins-bad-libs-GstGLSL.html#GST-GLSL-VERSION-ANY:CAPS"/>
     <keyword type="constant" name="GST_GL_WINDOW_ERROR_FAILED" link="GstGLWindow.html#GST-GL-WINDOW-ERROR-FAILED:CAPS"/>
     <keyword type="constant" name="GST_GL_WINDOW_ERROR_OLD_LIBS" link="GstGLWindow.html#GST-GL-WINDOW-ERROR-OLD-LIBS:CAPS"/>
     <keyword type="constant" name="GST_GL_WINDOW_ERROR_RESOURCE_UNAVAILABLE" link="GstGLWindow.html#GST-GL-WINDOW-ERROR-RESOURCE-UNAVAILABLE:CAPS"/>
+    <keyword type="constant" name="GST_GL_DISPLAY_PROJECTION_ORTHO2D" link="gst-plugins-bad-libs-OpenGL-Miscellaneous-Utilities.html#GST-GL-DISPLAY-PROJECTION-ORTHO2D:CAPS"/>
+    <keyword type="constant" name="GST_GL_DISPLAY_PROJECTION_PERSPECTIVE" link="gst-plugins-bad-libs-OpenGL-Miscellaneous-Utilities.html#GST-GL-DISPLAY-PROJECTION-PERSPECTIVE:CAPS"/>
+    <keyword type="constant" name="GST_GL_TEXTURE_TARGET_NONE" link="gst-plugins-bad-libs-OpenGL-Formats.html#GST-GL-TEXTURE-TARGET-NONE:CAPS"/>
+    <keyword type="constant" name="GST_GL_TEXTURE_TARGET_2D" link="gst-plugins-bad-libs-OpenGL-Formats.html#GST-GL-TEXTURE-TARGET-2D:CAPS"/>
+    <keyword type="constant" name="GST_GL_TEXTURE_TARGET_RECTANGLE" link="gst-plugins-bad-libs-OpenGL-Formats.html#GST-GL-TEXTURE-TARGET-RECTANGLE:CAPS"/>
+    <keyword type="constant" name="GST_GL_TEXTURE_TARGET_EXTERNAL_OES" link="gst-plugins-bad-libs-OpenGL-Formats.html#GST-GL-TEXTURE-TARGET-EXTERNAL-OES:CAPS"/>
+    <keyword type="constant" name="GST_PLAYER_STATE_STOPPED" link="gst-plugins-bad-libs-gstplayer.html#GST-PLAYER-STATE-STOPPED:CAPS"/>
+    <keyword type="constant" name="GST_PLAYER_STATE_BUFFERING" link="gst-plugins-bad-libs-gstplayer.html#GST-PLAYER-STATE-BUFFERING:CAPS"/>
+    <keyword type="constant" name="GST_PLAYER_STATE_PAUSED" link="gst-plugins-bad-libs-gstplayer.html#GST-PLAYER-STATE-PAUSED:CAPS"/>
+    <keyword type="constant" name="GST_PLAYER_STATE_PLAYING" link="gst-plugins-bad-libs-gstplayer.html#GST-PLAYER-STATE-PLAYING:CAPS"/>
+    <keyword type="constant" name="GST_PLAYER_ERROR_FAILED" link="gst-plugins-bad-libs-gstplayer.html#GST-PLAYER-ERROR-FAILED:CAPS"/>
+    <keyword type="constant" name="GST_PLAYER_COLOR_BALANCE_BRIGHTNESS" link="gst-plugins-bad-libs-gstplayer.html#GST-PLAYER-COLOR-BALANCE-BRIGHTNESS:CAPS"/>
+    <keyword type="constant" name="GST_PLAYER_COLOR_BALANCE_CONTRAST" link="gst-plugins-bad-libs-gstplayer.html#GST-PLAYER-COLOR-BALANCE-CONTRAST:CAPS"/>
+    <keyword type="constant" name="GST_PLAYER_COLOR_BALANCE_SATURATION" link="gst-plugins-bad-libs-gstplayer.html#GST-PLAYER-COLOR-BALANCE-SATURATION:CAPS"/>
+    <keyword type="constant" name="GST_PLAYER_COLOR_BALANCE_HUE" link="gst-plugins-bad-libs-gstplayer.html#GST-PLAYER-COLOR-BALANCE-HUE:CAPS"/>
     <keyword type="constant" name="GST_PHOTOGRAPHY_NOISE_REDUCTION_BAYER" link="gst-plugins-bad-libs-GstPhotography.html#GST-PHOTOGRAPHY-NOISE-REDUCTION-BAYER:CAPS"/>
     <keyword type="constant" name="GST_PHOTOGRAPHY_NOISE_REDUCTION_YCC" link="gst-plugins-bad-libs-GstPhotography.html#GST-PHOTOGRAPHY-NOISE-REDUCTION-YCC:CAPS"/>
     <keyword type="constant" name="GST_PHOTOGRAPHY_NOISE_REDUCTION_TEMPORAL" link="gst-plugins-bad-libs-GstPhotography.html#GST-PHOTOGRAPHY-NOISE-REDUCTION-TEMPORAL:CAPS"/>
diff --git a/docs/libs/html/gst-plugins-bad-libs-ATSC-variants-of-MPEG-TS-descriptors.html b/docs/libs/html/gst-plugins-bad-libs-ATSC-variants-of-MPEG-TS-descriptors.html
index cb6b969..7bb131e 100644
--- a/docs/libs/html/gst-plugins-bad-libs-ATSC-variants-of-MPEG-TS-descriptors.html
+++ b/docs/libs/html/gst-plugins-bad-libs-ATSC-variants-of-MPEG-TS-descriptors.html
@@ -3,7 +3,7 @@
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>ATSC variants of MPEG-TS descriptors: GStreamer Bad Plugins 1.0 Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
 <link rel="home" href="index.html" title="GStreamer Bad Plugins 1.0 Library Reference Manual">
 <link rel="up" href="mpegts.html" title="Mpeg TS helper library">
 <link rel="prev" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-sections.html" title="DVB variants of MPEG-TS sections">
@@ -33,7 +33,7 @@
 </tr></table></div>
 <div class="refsect1">
 <a name="gst-plugins-bad-libs-ATSC-variants-of-MPEG-TS-descriptors.other"></a><h2>Types and Values</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="name">
 <col class="description">
@@ -65,7 +65,7 @@
 <p>Consult the relevant specifications for more details.</p>
 <div class="refsect3">
 <a name="id-1.2.5.8.7.2.5"></a><h4>Members</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="300px" class="enum_members_name">
 <col class="enum_members_description">
diff --git a/docs/libs/html/gst-plugins-bad-libs-ATSC-variants-of-MPEG-TS-sections.html b/docs/libs/html/gst-plugins-bad-libs-ATSC-variants-of-MPEG-TS-sections.html
index e879118..1bb831b 100644
--- a/docs/libs/html/gst-plugins-bad-libs-ATSC-variants-of-MPEG-TS-sections.html
+++ b/docs/libs/html/gst-plugins-bad-libs-ATSC-variants-of-MPEG-TS-sections.html
@@ -3,7 +3,7 @@
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>ATSC variants of MPEG-TS sections: GStreamer Bad Plugins 1.0 Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
 <link rel="home" href="index.html" title="GStreamer Bad Plugins 1.0 Library Reference Manual">
 <link rel="up" href="mpegts.html" title="Mpeg TS helper library">
 <link rel="prev" href="gst-plugins-bad-libs-Base-MPEG-TS-descriptors.html" title="Base MPEG-TS descriptors">
@@ -33,7 +33,7 @@
 </tr></table></div>
 <div class="refsect1">
 <a name="gst-plugins-bad-libs-ATSC-variants-of-MPEG-TS-sections.functions"></a><h2>Functions</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="functions_return">
 <col class="functions_name">
@@ -101,7 +101,7 @@
 </div>
 <div class="refsect1">
 <a name="gst-plugins-bad-libs-ATSC-variants-of-MPEG-TS-sections.other"></a><h2>Types and Values</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="name">
 <col class="description">
@@ -172,7 +172,7 @@
 </p>
 <div class="refsect3">
 <a name="id-1.2.5.6.7.2.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
 <col class="parameters_description">
@@ -200,7 +200,7 @@
 </p>
 <div class="refsect3">
 <a name="id-1.2.5.6.7.3.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
 <col class="parameters_description">
@@ -228,7 +228,7 @@
 .</p>
 <div class="refsect3">
 <a name="id-1.2.5.6.7.4.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
 <col class="parameters_description">
@@ -263,7 +263,7 @@
 .</p>
 <div class="refsect3">
 <a name="id-1.2.5.6.7.6.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
 <col class="parameters_description">
@@ -291,7 +291,7 @@
 .</p>
 <div class="refsect3">
 <a name="id-1.2.5.6.7.7.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
 <col class="parameters_description">
@@ -319,7 +319,7 @@
 .</p>
 <div class="refsect3">
 <a name="id-1.2.5.6.7.8.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
 <col class="parameters_description">
@@ -354,7 +354,7 @@
 <p>see also: <a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-sections.html#GstMpegtsSectionTableID" title="enum GstMpegtsSectionTableID"><span class="type">GstMpegtsSectionTableID</span></a></p>
 <div class="refsect3">
 <a name="id-1.2.5.6.8.2.6"></a><h4>Members</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="300px" class="enum_members_name">
 <col class="enum_members_description">
@@ -478,7 +478,7 @@
 , can be used both for TVCT and CVCT tables</p>
 <div class="refsect3">
 <a name="id-1.2.5.6.8.3.5"></a><h4>Members</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="300px" class="struct_members_name">
 <col class="struct_members_description">
@@ -584,7 +584,7 @@
   Cable Virtual Channel Table (A65)</p>
 <div class="refsect3">
 <a name="id-1.2.5.6.8.4.5"></a><h4>Members</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="300px" class="struct_members_name">
 <col class="struct_members_description">
@@ -620,7 +620,7 @@
 <a name="GstMpegtsAtscMGTTableType"></a><h3>enum GstMpegtsAtscMGTTableType</h3>
 <div class="refsect3">
 <a name="id-1.2.5.6.8.5.3"></a><h4>Members</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="300px" class="enum_members_name">
 <col class="enum_members_description">
@@ -666,7 +666,7 @@
 </p>
 <div class="refsect3">
 <a name="id-1.2.5.6.8.6.5"></a><h4>Members</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="300px" class="struct_members_name">
 <col class="struct_members_description">
@@ -715,7 +715,7 @@
 <p>Master Guide Table (A65)</p>
 <div class="refsect3">
 <a name="id-1.2.5.6.8.7.5"></a><h4>Members</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="300px" class="struct_members_name">
 <col class="struct_members_description">
@@ -756,7 +756,7 @@
 </pre>
 <div class="refsect3">
 <a name="id-1.2.5.6.8.8.4"></a><h4>Members</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="300px" class="struct_members_name">
 <col class="struct_members_description">
@@ -793,7 +793,7 @@
 <p>An ATSC EIT Event</p>
 <div class="refsect3">
 <a name="id-1.2.5.6.8.9.5"></a><h4>Members</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="300px" class="struct_members_name">
 <col class="struct_members_description">
@@ -847,7 +847,7 @@
 <p>Event Information Table (ATSC)</p>
 <div class="refsect3">
 <a name="id-1.2.5.6.8.10.5"></a><h4>Members</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="300px" class="struct_members_name">
 <col class="struct_members_description">
@@ -887,7 +887,7 @@
 <p>Extended Text Table (ATSC)</p>
 <div class="refsect3">
 <a name="id-1.2.5.6.8.11.5"></a><h4>Members</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="300px" class="struct_members_name">
 <col class="struct_members_description">
@@ -936,7 +936,7 @@
 <p>System Time Table (A65)</p>
 <div class="refsect3">
 <a name="id-1.2.5.6.8.12.5"></a><h4>Members</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="300px" class="struct_members_name">
 <col class="struct_members_description">
diff --git a/docs/libs/html/gst-plugins-bad-libs-Base-MPEG-TS-descriptors.html b/docs/libs/html/gst-plugins-bad-libs-Base-MPEG-TS-descriptors.html
index 3f3e64e..6511d48 100644
--- a/docs/libs/html/gst-plugins-bad-libs-Base-MPEG-TS-descriptors.html
+++ b/docs/libs/html/gst-plugins-bad-libs-Base-MPEG-TS-descriptors.html
@@ -3,7 +3,7 @@
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Base MPEG-TS descriptors: GStreamer Bad Plugins 1.0 Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
 <link rel="home" href="index.html" title="GStreamer Bad Plugins 1.0 Library Reference Manual">
 <link rel="up" href="mpegts.html" title="Mpeg TS helper library">
 <link rel="prev" href="gst-plugins-bad-libs-Base-MPEG-TS-sections.html" title="Base MPEG-TS sections">
@@ -34,7 +34,7 @@
 </tr></table></div>
 <div class="refsect1">
 <a name="gst-plugins-bad-libs-Base-MPEG-TS-descriptors.functions"></a><h2>Functions</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="functions_return">
 <col class="functions_name">
@@ -116,7 +116,7 @@
 </div>
 <a name="GstMpegtsDescriptor"></a><div class="refsect1">
 <a name="gst-plugins-bad-libs-Base-MPEG-TS-descriptors.other"></a><h2>Types and Values</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="name">
 <col class="description">
@@ -186,7 +186,7 @@
 array of descriptors, iterate the <a href="https://developer.gnome.org/glib/unstable/glib-Arrays.html#GArray"><span class="type">GArray</span></a> manually.</p>
 <div class="refsect3">
 <a name="id-1.2.5.5.9.2.6"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
 <col class="parameters_description">
@@ -227,7 +227,7 @@
  will not be copied.</p>
 <div class="refsect3">
 <a name="id-1.2.5.5.9.3.6"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
 <col class="parameters_description">
@@ -268,7 +268,7 @@
 </p>
 <div class="refsect3">
 <a name="id-1.2.5.5.9.4.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
 <col class="parameters_description">
@@ -311,7 +311,7 @@
 <p>Return: <a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-descriptors.html#GstMpegtsDescriptor"><span class="type">GstMpegtsDescriptor</span></a>, <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> on failure</p>
 <div class="refsect3">
 <a name="id-1.2.5.5.9.5.6"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
 <col class="parameters_description">
@@ -351,7 +351,7 @@
 ISO 639-1 language code from the returned ISO 639-2 one.</p>
 <div class="refsect3">
 <a name="id-1.2.5.5.9.6.6"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
 <col class="parameters_description">
@@ -391,7 +391,7 @@
 ISO 639-1 language code from the returned ISO 639-2 one.</p>
 <div class="refsect3">
 <a name="id-1.2.5.5.9.7.6"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
 <col class="parameters_description">
@@ -434,7 +434,7 @@
                                (<em class="parameter"><code>const <a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-descriptors.html#GstMpegtsDescriptor"><span class="type">GstMpegtsDescriptor</span></a> *descriptor</code></em>);</pre>
 <div class="refsect3">
 <a name="id-1.2.5.5.9.8.4"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
 <col class="parameters_description">
@@ -471,7 +471,7 @@
 .</p>
 <div class="refsect3">
 <a name="id-1.2.5.5.9.10.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
 <col class="parameters_description">
@@ -511,7 +511,7 @@
 <p>Mpeg-TS descriptor (ISO/IEC 13818-1).</p>
 <div class="refsect3">
 <a name="id-1.2.5.5.10.2.5"></a><h4>Members</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="300px" class="struct_members_name">
 <col class="struct_members_description">
@@ -555,7 +555,7 @@
 <p>Consult the relevant specifications for more details.</p>
 <div class="refsect3">
 <a name="id-1.2.5.5.10.3.6"></a><h4>Members</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="300px" class="enum_members_name">
 <col class="enum_members_description">
@@ -844,7 +844,7 @@
 not yet identified from known specifications.</p>
 <div class="refsect3">
 <a name="id-1.2.5.5.10.4.5"></a><h4>Members</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="300px" class="enum_members_name">
 <col class="enum_members_description">
@@ -880,7 +880,7 @@
 <a name="GstMpegtsIso639AudioType"></a><h3>enum GstMpegtsIso639AudioType</h3>
 <div class="refsect3">
 <a name="id-1.2.5.5.10.6.3"></a><h4>Members</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="300px" class="enum_members_name">
 <col class="enum_members_description">
diff --git a/docs/libs/html/gst-plugins-bad-libs-Base-MPEG-TS-sections.html b/docs/libs/html/gst-plugins-bad-libs-Base-MPEG-TS-sections.html
index c7740c4..4ee4907 100644
--- a/docs/libs/html/gst-plugins-bad-libs-Base-MPEG-TS-sections.html
+++ b/docs/libs/html/gst-plugins-bad-libs-Base-MPEG-TS-sections.html
@@ -3,7 +3,7 @@
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Base MPEG-TS sections: GStreamer Bad Plugins 1.0 Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
 <link rel="home" href="index.html" title="GStreamer Bad Plugins 1.0 Library Reference Manual">
 <link rel="up" href="mpegts.html" title="Mpeg TS helper library">
 <link rel="prev" href="gst-plugins-bad-libs-Mpeg-ts-helper-library.html" title="Mpeg-ts helper library">
@@ -34,7 +34,7 @@
 </tr></table></div>
 <div class="refsect1">
 <a name="gst-plugins-bad-libs-Base-MPEG-TS-sections.functions"></a><h2>Functions</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="functions_return">
 <col class="functions_name">
@@ -190,7 +190,7 @@
 </div>
 <a name="GstMpegtsSection"></a><div class="refsect1">
 <a name="gst-plugins-bad-libs-Base-MPEG-TS-sections.other"></a><h2>Types and Values</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="name">
 <col class="description">
@@ -264,7 +264,7 @@
 .</p>
 <div class="refsect3">
 <a name="id-1.2.5.4.9.3.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
 <col class="parameters_description">
@@ -299,7 +299,7 @@
 <p>Returns the <a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-sections.html#GstMpegtsSection"><span class="type">GstMpegtsSection</span></a> contained in a message.</p>
 <div class="refsect3">
 <a name="id-1.2.5.4.9.4.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
 <col class="parameters_description">
@@ -330,7 +330,7 @@
  <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html"><span class="type">GstElement</span></a>.</p>
 <div class="refsect3">
 <a name="id-1.2.5.4.9.5.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
 <col class="parameters_description">
@@ -364,7 +364,7 @@
  <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstEvent.html"><span class="type">GstEvent</span></a></p>
 <div class="refsect3">
 <a name="id-1.2.5.4.9.6.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
 <col class="parameters_description">
@@ -394,7 +394,7 @@
 immediately. Otherwise, the data field is allocated and populated.</p>
 <div class="refsect3">
 <a name="id-1.2.5.4.9.7.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
 <col class="parameters_description">
@@ -438,7 +438,7 @@
 to the beginning of the section.</p>
 <div class="refsect3">
 <a name="id-1.2.5.4.9.8.7"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
 <col class="parameters_description">
@@ -496,7 +496,7 @@
 .</p>
 <div class="refsect3">
 <a name="id-1.2.5.4.9.11.7"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
 <col class="parameters_description">
@@ -551,7 +551,7 @@
  array of <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-bad-libs/html/gst-plugins-bad-libs-Base-MPEG-TS-sections.html#GstMpegtsPatProgram"><span class="type">GstMpegtsPatPrograms</span></a></p>
 <div class="refsect3">
 <a name="id-1.2.5.4.9.14.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
 <col class="parameters_description">
@@ -586,7 +586,7 @@
 .</p>
 <div class="refsect3">
 <a name="id-1.2.5.4.9.15.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
 <col class="parameters_description">
@@ -640,7 +640,7 @@
 </p>
 <div class="refsect3">
 <a name="id-1.2.5.4.9.18.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
 <col class="parameters_description">
@@ -674,7 +674,7 @@
 <p>Returns the array of <a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-descriptors.html#GstMpegtsDescriptor"><span class="type">GstMpegtsDescriptor</span></a> contained in the section</p>
 <div class="refsect3">
 <a name="id-1.2.5.4.9.19.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
 <col class="parameters_description">
@@ -704,7 +704,7 @@
 Access Table.</p>
 <div class="refsect3">
 <a name="id-1.2.5.4.9.20.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
 <col class="parameters_description">
@@ -750,7 +750,7 @@
 <p>Mpeg-TS Section Information (SI) (ISO/IEC 13818-1)</p>
 <div class="refsect3">
 <a name="id-1.2.5.4.10.2.5"></a><h4>Members</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="300px" class="struct_members_name">
 <col class="struct_members_description">
@@ -816,7 +816,7 @@
 <span class="type">GstMpegtsSectionSCTETableID</span></p>
 <div class="refsect3">
 <a name="id-1.2.5.4.10.3.6"></a><h4>Members</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="300px" class="enum_members_name">
 <col class="enum_members_description">
@@ -908,7 +908,7 @@
 <p>Types of <a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-sections.html#GstMpegtsSection"><span class="type">GstMpegtsSection</span></a> that the library handles.</p>
 <div class="refsect3">
 <a name="id-1.2.5.4.10.4.4"></a><h4>Members</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="300px" class="enum_members_name">
 <col class="enum_members_description">
@@ -1049,7 +1049,7 @@
 <p>A program entry from a Program Association Table (ITU H.222.0, ISO/IEC 13818-1).</p>
 <div class="refsect3">
 <a name="id-1.2.5.4.10.5.5"></a><h4>Members</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="300px" class="struct_members_name">
 <col class="struct_members_description">
@@ -1086,7 +1086,7 @@
 container <a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-sections.html#GstMpegtsSection"><span class="type">GstMpegtsSection</span></a>.</p>
 <div class="refsect3">
 <a name="id-1.2.5.4.10.6.6"></a><h4>Members</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="300px" class="struct_members_name">
 <col class="struct_members_description">
@@ -1130,7 +1130,7 @@
 <p>An individual stream definition.</p>
 <div class="refsect3">
 <a name="id-1.2.5.4.10.7.5"></a><h4>Members</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="300px" class="struct_members_name">
 <col class="struct_members_description">
@@ -1167,7 +1167,7 @@
 <p>Corresponds to table 2-34 of ITU H.222.0 | ISO/IEC 13818-1</p>
 <div class="refsect3">
 <a name="id-1.2.5.4.10.8.6"></a><h4>Members</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="300px" class="enum_members_name">
 <col class="enum_members_description">
diff --git a/docs/libs/html/gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html b/docs/libs/html/gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html
index edeca4b..12009b4 100644
--- a/docs/libs/html/gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html
+++ b/docs/libs/html/gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html
@@ -3,7 +3,7 @@
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>DVB variants of MPEG-TS descriptors: GStreamer Bad Plugins 1.0 Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
 <link rel="home" href="index.html" title="GStreamer Bad Plugins 1.0 Library Reference Manual">
 <link rel="up" href="mpegts.html" title="Mpeg TS helper library">
 <link rel="prev" href="gst-plugins-bad-libs-ATSC-variants-of-MPEG-TS-descriptors.html" title="ATSC variants of MPEG-TS descriptors">
@@ -34,7 +34,7 @@
 </tr></table></div>
 <div class="refsect1">
 <a name="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.functions"></a><h2>Functions</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="functions_return">
 <col class="functions_name">
@@ -370,7 +370,7 @@
 </div>
 <div class="refsect1">
 <a name="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.other"></a><h2>Types and Values</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="name">
 <col class="description">
@@ -554,7 +554,7 @@
 .</p>
 <div class="refsect3">
 <a name="id-1.2.5.9.8.2.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
 <col class="parameters_description">
@@ -597,7 +597,7 @@
 .</p>
 <div class="refsect3">
 <a name="id-1.2.5.9.8.4.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
 <col class="parameters_description">
@@ -640,7 +640,7 @@
 .</p>
 <div class="refsect3">
 <a name="id-1.2.5.9.8.6.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
 <col class="parameters_description">
@@ -676,7 +676,7 @@
 .</p>
 <div class="refsect3">
 <a name="id-1.2.5.9.8.7.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
 <col class="parameters_description">
@@ -712,7 +712,7 @@
 .</p>
 <div class="refsect3">
 <a name="id-1.2.5.9.8.8.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
 <col class="parameters_description">
@@ -748,7 +748,7 @@
 .</p>
 <div class="refsect3">
 <a name="id-1.2.5.9.8.9.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
 <col class="parameters_description">
@@ -791,7 +791,7 @@
 .</p>
 <div class="refsect3">
 <a name="id-1.2.5.9.8.11.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
 <col class="parameters_description">
@@ -829,7 +829,7 @@
 .</p>
 <div class="refsect3">
 <a name="id-1.2.5.9.8.12.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
 <col class="parameters_description">
@@ -875,7 +875,7 @@
 :</p>
 <div class="refsect3">
 <a name="id-1.2.5.9.8.13.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
 <col class="parameters_description">
@@ -912,7 +912,7 @@
 will be allocated, and transferred to the caller.</p>
 <div class="refsect3">
 <a name="id-1.2.5.9.8.14.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
 <col class="parameters_description">
@@ -944,7 +944,7 @@
 .</p>
 <div class="refsect3">
 <a name="id-1.2.5.9.8.15.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
 <col class="parameters_description">
@@ -992,7 +992,7 @@
 and transferred to the caller.</p>
 <div class="refsect3">
 <a name="id-1.2.5.9.8.16.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
 <col class="parameters_description">
@@ -1039,7 +1039,7 @@
 . The language is in ISO639 format.</p>
 <div class="refsect3">
 <a name="id-1.2.5.9.8.17.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
 <col class="parameters_description">
@@ -1094,7 +1094,7 @@
 </p>
 <div class="refsect3">
 <a name="id-1.2.5.9.8.18.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
 <col class="parameters_description">
@@ -1129,7 +1129,7 @@
 ISO 639-1 language code from the returned ISO 639-2 one.</p>
 <div class="refsect3">
 <a name="id-1.2.5.9.8.19.6"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
 <col class="parameters_description">
@@ -1182,7 +1182,7 @@
                                (<em class="parameter"><code>const <a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-descriptors.html#GstMpegtsDescriptor"><span class="type">GstMpegtsDescriptor</span></a> *descriptor</code></em>);</pre>
 <div class="refsect3">
 <a name="id-1.2.5.9.8.20.4"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
 <col class="parameters_description">
@@ -1212,7 +1212,7 @@
                                 <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#guint16"><span class="type">guint16</span></a> ancillary</code></em>);</pre>
 <div class="refsect3">
 <a name="id-1.2.5.9.8.21.4"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
 <col class="parameters_description">
@@ -1258,7 +1258,7 @@
                                (<em class="parameter"><code>const <a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GstMpegtsDVBLinkageDescriptor" title="struct GstMpegtsDVBLinkageDescriptor"><span class="type">GstMpegtsDVBLinkageDescriptor</span></a> *desc</code></em>);</pre>
 <div class="refsect3">
 <a name="id-1.2.5.9.8.23.4"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
 <col class="parameters_description">
@@ -1284,7 +1284,7 @@
                                (<em class="parameter"><code>const <a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GstMpegtsDVBLinkageDescriptor" title="struct GstMpegtsDVBLinkageDescriptor"><span class="type">GstMpegtsDVBLinkageDescriptor</span></a> *desc</code></em>);</pre>
 <div class="refsect3">
 <a name="id-1.2.5.9.8.24.4"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
 <col class="parameters_description">
@@ -1310,7 +1310,7 @@
                                (<em class="parameter"><code>const <a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GstMpegtsDVBLinkageDescriptor" title="struct GstMpegtsDVBLinkageDescriptor"><span class="type">GstMpegtsDVBLinkageDescriptor</span></a> *desc</code></em>);</pre>
 <div class="refsect3">
 <a name="id-1.2.5.9.8.25.4"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
 <col class="parameters_description">
@@ -1340,7 +1340,7 @@
 .</p>
 <div class="refsect3">
 <a name="id-1.2.5.9.8.26.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
 <col class="parameters_description">
@@ -1378,7 +1378,7 @@
 .</p>
 <div class="refsect3">
 <a name="id-1.2.5.9.8.27.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
 <col class="parameters_description">
@@ -1426,7 +1426,7 @@
 .</p>
 <div class="refsect3">
 <a name="id-1.2.5.9.8.28.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
 <col class="parameters_description">
@@ -1475,7 +1475,7 @@
 .</p>
 <div class="refsect3">
 <a name="id-1.2.5.9.8.30.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
 <col class="parameters_description">
@@ -1511,7 +1511,7 @@
 .</p>
 <div class="refsect3">
 <a name="id-1.2.5.9.8.31.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
 <col class="parameters_description">
@@ -1553,7 +1553,7 @@
 .</p>
 <div class="refsect3">
 <a name="id-1.2.5.9.8.32.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
 <col class="parameters_description">
@@ -1599,7 +1599,7 @@
 .</p>
 <div class="refsect3">
 <a name="id-1.2.5.9.8.33.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
 <col class="parameters_description">
@@ -1635,7 +1635,7 @@
 .</p>
 <div class="refsect3">
 <a name="id-1.2.5.9.8.34.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
 <col class="parameters_description">
@@ -1671,7 +1671,7 @@
 .</p>
 <div class="refsect3">
 <a name="id-1.2.5.9.8.35.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
 <col class="parameters_description">
@@ -1709,7 +1709,7 @@
 :</p>
 <div class="refsect3">
 <a name="id-1.2.5.9.8.36.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
 <col class="parameters_description">
@@ -1745,7 +1745,7 @@
 .</p>
 <div class="refsect3">
 <a name="id-1.2.5.9.8.37.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
 <col class="parameters_description">
@@ -1781,7 +1781,7 @@
 .</p>
 <div class="refsect3">
 <a name="id-1.2.5.9.8.38.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
 <col class="parameters_description">
@@ -1810,7 +1810,7 @@
 .</p>
 <div class="refsect3">
 <a name="id-1.2.5.9.8.39.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
 <col class="parameters_description">
@@ -1847,7 +1847,7 @@
 .</p>
 <div class="refsect3">
 <a name="id-1.2.5.9.8.40.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
 <col class="parameters_description">
@@ -1884,7 +1884,7 @@
 .</p>
 <div class="refsect3">
 <a name="id-1.2.5.9.8.41.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
 <col class="parameters_description">
@@ -1922,7 +1922,7 @@
 .</p>
 <div class="refsect3">
 <a name="id-1.2.5.9.8.42.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
 <col class="parameters_description">
@@ -1964,7 +1964,7 @@
 <p>Consult the relevant specifications for more details.</p>
 <div class="refsect3">
 <a name="id-1.2.5.9.9.2.6"></a><h4>Members</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="300px" class="enum_members_name">
 <col class="enum_members_description">
@@ -2304,7 +2304,7 @@
 <p>Consult the relevant specifications for more details.</p>
 <div class="refsect3">
 <a name="id-1.2.5.9.9.3.6"></a><h4>Members</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="300px" class="enum_members_name">
 <col class="enum_members_description">
@@ -2455,7 +2455,7 @@
 <p>Extended Event Descriptor (EN 300 468 v.1.13.1)</p>
 <div class="refsect3">
 <a name="id-1.2.5.9.9.7.5"></a><h4>Members</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="300px" class="struct_members_name">
 <col class="struct_members_description">
@@ -2511,7 +2511,7 @@
 <p>Satellite Delivery System Descriptor (EN 300 468 v.1.13.1)</p>
 <div class="refsect3">
 <a name="id-1.2.5.9.9.8.5"></a><h4>Members</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="300px" class="struct_members_name">
 <col class="struct_members_description">
@@ -2573,7 +2573,7 @@
 <a name="GstMpegtsDVBCodeRate"></a><h3>enum GstMpegtsDVBCodeRate</h3>
 <div class="refsect3">
 <a name="id-1.2.5.9.9.9.3"></a><h4>Members</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="300px" class="enum_members_name">
 <col class="enum_members_description">
@@ -2654,7 +2654,7 @@
 <a name="GstMpegtsModulationType"></a><h3>enum GstMpegtsModulationType</h3>
 <div class="refsect3">
 <a name="id-1.2.5.9.9.10.3"></a><h4>Members</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="300px" class="enum_members_name">
 <col class="enum_members_description">
@@ -2745,7 +2745,7 @@
 <a name="GstMpegtsSatellitePolarizationType"></a><h3>enum GstMpegtsSatellitePolarizationType</h3>
 <div class="refsect3">
 <a name="id-1.2.5.9.9.11.3"></a><h4>Members</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="300px" class="enum_members_name">
 <col class="enum_members_description">
@@ -2781,7 +2781,7 @@
 <a name="GstMpegtsSatelliteRolloff"></a><h3>enum GstMpegtsSatelliteRolloff</h3>
 <div class="refsect3">
 <a name="id-1.2.5.9.9.12.3"></a><h4>Members</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="300px" class="enum_members_name">
 <col class="enum_members_description">
@@ -2832,7 +2832,7 @@
 <p>Cable Delivery System Descriptor (EN 300 468 v.1.13.1)</p>
 <div class="refsect3">
 <a name="id-1.2.5.9.9.13.5"></a><h4>Members</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="300px" class="struct_members_name">
 <col class="struct_members_description">
@@ -2873,7 +2873,7 @@
 <a name="GstMpegtsCableOuterFECScheme"></a><h3>enum GstMpegtsCableOuterFECScheme</h3>
 <div class="refsect3">
 <a name="id-1.2.5.9.9.14.3"></a><h4>Members</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="300px" class="enum_members_name">
 <col class="enum_members_description">
@@ -2920,7 +2920,7 @@
 <p>Terrestrial Delivery System Descriptor (EN 300 468 v.1.13.1)</p>
 <div class="refsect3">
 <a name="id-1.2.5.9.9.15.5"></a><h4>Members</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="300px" class="struct_members_name">
 <col class="struct_members_description">
@@ -2996,7 +2996,7 @@
 <a name="GstMpegtsTerrestrialTransmissionMode"></a><h3>enum GstMpegtsTerrestrialTransmissionMode</h3>
 <div class="refsect3">
 <a name="id-1.2.5.9.9.16.3"></a><h4>Members</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="300px" class="enum_members_name">
 <col class="enum_members_description">
@@ -3057,7 +3057,7 @@
 <a name="GstMpegtsTerrestrialGuardInterval"></a><h3>enum GstMpegtsTerrestrialGuardInterval</h3>
 <div class="refsect3">
 <a name="id-1.2.5.9.9.17.3"></a><h4>Members</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="300px" class="enum_members_name">
 <col class="enum_members_description">
@@ -3128,7 +3128,7 @@
 <a name="GstMpegtsTerrestrialHierarchy"></a><h3>enum GstMpegtsTerrestrialHierarchy</h3>
 <div class="refsect3">
 <a name="id-1.2.5.9.9.18.3"></a><h4>Members</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="300px" class="enum_members_name">
 <col class="enum_members_description">
@@ -3174,7 +3174,7 @@
 </pre>
 <div class="refsect3">
 <a name="id-1.2.5.9.9.19.4"></a><h4>Members</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="300px" class="struct_members_name">
 <col class="struct_members_description">
@@ -3206,7 +3206,7 @@
 </pre>
 <div class="refsect3">
 <a name="id-1.2.5.9.9.20.4"></a><h4>Members</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="300px" class="struct_members_name">
 <col class="struct_members_description">
@@ -3251,7 +3251,7 @@
 <p>describe DVB-T2 transmissions according to EN 302 755</p>
 <div class="refsect3">
 <a name="id-1.2.5.9.9.21.5"></a><h4>Members</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="300px" class="struct_members_name">
 <col class="struct_members_description">
@@ -3314,7 +3314,7 @@
 <p>As specified in Table 87 of ETSI EN 300 468 v1.13.1</p>
 <div class="refsect3">
 <a name="id-1.2.5.9.9.22.5"></a><h4>Members</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="300px" class="enum_members_name">
 <col class="enum_members_description">
@@ -3472,7 +3472,7 @@
 <p>As specified in Table 100 of ETSI EN 300 468 v1.13.1</p>
 <div class="refsect3">
 <a name="id-1.2.5.9.9.23.5"></a><h4>Members</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="300px" class="enum_members_name">
 <col class="enum_members_description">
@@ -3514,7 +3514,7 @@
 <p>Linkage Type (EN 300 468 v.1.13.1)</p>
 <div class="refsect3">
 <a name="id-1.2.5.9.9.24.4"></a><h4>Members</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="300px" class="enum_members_name">
 <col class="enum_members_description">
@@ -3605,7 +3605,7 @@
 <a name="GstMpegtsDVBLinkageHandOverType"></a><h3>enum GstMpegtsDVBLinkageHandOverType</h3>
 <div class="refsect3">
 <a name="id-1.2.5.9.9.25.3"></a><h4>Members</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="300px" class="enum_members_name">
 <col class="enum_members_description">
@@ -3694,7 +3694,7 @@
 </pre>
 <div class="refsect3">
 <a name="id-1.2.5.9.9.29.4"></a><h4>Members</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="300px" class="struct_members_name">
 <col class="struct_members_description">
@@ -3749,7 +3749,7 @@
 </pre>
 <div class="refsect3">
 <a name="id-1.2.5.9.9.30.4"></a><h4>Members</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="300px" class="struct_members_name">
 <col class="struct_members_description">
@@ -3796,7 +3796,7 @@
 <a name="GstMpegtsDVBScramblingModeType"></a><h3>enum GstMpegtsDVBScramblingModeType</h3>
 <div class="refsect3">
 <a name="id-1.2.5.9.9.31.3"></a><h4>Members</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="300px" class="enum_members_name">
 <col class="enum_members_description">
@@ -3871,7 +3871,7 @@
 </pre>
 <div class="refsect3">
 <a name="id-1.2.5.9.9.33.4"></a><h4>Members</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="300px" class="struct_members_name">
 <col class="struct_members_description">
@@ -3903,7 +3903,7 @@
 <p>a multilingual network name entry</p>
 <div class="refsect3">
 <a name="id-1.2.5.9.9.34.5"></a><h4>Members</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="300px" class="struct_members_name">
 <col class="struct_members_description">
@@ -3935,7 +3935,7 @@
 <p>a multilingual bouquet name entry</p>
 <div class="refsect3">
 <a name="id-1.2.5.9.9.35.5"></a><h4>Members</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="300px" class="struct_members_name">
 <col class="struct_members_description">
@@ -3968,7 +3968,7 @@
 <p>a multilingual service name entry</p>
 <div class="refsect3">
 <a name="id-1.2.5.9.9.36.5"></a><h4>Members</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="300px" class="struct_members_name">
 <col class="struct_members_description">
@@ -4004,7 +4004,7 @@
 </pre>
 <div class="refsect3">
 <a name="id-1.2.5.9.9.37.4"></a><h4>Members</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="300px" class="struct_members_name">
 <col class="struct_members_description">
diff --git a/docs/libs/html/gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-sections.html b/docs/libs/html/gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-sections.html
index 60cfa7d..add57a5 100644
--- a/docs/libs/html/gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-sections.html
+++ b/docs/libs/html/gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-sections.html
@@ -3,7 +3,7 @@
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>DVB variants of MPEG-TS sections: GStreamer Bad Plugins 1.0 Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
 <link rel="home" href="index.html" title="GStreamer Bad Plugins 1.0 Library Reference Manual">
 <link rel="up" href="mpegts.html" title="Mpeg TS helper library">
 <link rel="prev" href="gst-plugins-bad-libs-ATSC-variants-of-MPEG-TS-sections.html" title="ATSC variants of MPEG-TS sections">
@@ -34,7 +34,7 @@
 </tr></table></div>
 <div class="refsect1">
 <a name="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-sections.functions"></a><h2>Functions</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="functions_return">
 <col class="functions_name">
@@ -136,7 +136,7 @@
 </div>
 <div class="refsect1">
 <a name="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-sections.other"></a><h2>Types and Values</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="name">
 <col class="description">
@@ -213,7 +213,7 @@
 .</p>
 <div class="refsect3">
 <a name="id-1.2.5.7.8.2.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
 <col class="parameters_description">
@@ -266,7 +266,7 @@
  is managed by the <a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-sections.html#GstMpegtsSection"><span class="type">GstMpegtsSection</span></a></p>
 <div class="refsect3">
 <a name="id-1.2.5.7.8.5.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
 <col class="parameters_description">
@@ -294,7 +294,7 @@
 .</p>
 <div class="refsect3">
 <a name="id-1.2.5.7.8.6.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
 <col class="parameters_description">
@@ -322,7 +322,7 @@
 .</p>
 <div class="refsect3">
 <a name="id-1.2.5.7.8.7.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
 <col class="parameters_description">
@@ -375,7 +375,7 @@
  is managed by the <a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-sections.html#GstMpegtsSection"><span class="type">GstMpegtsSection</span></a></p>
 <div class="refsect3">
 <a name="id-1.2.5.7.8.10.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
 <col class="parameters_description">
@@ -403,7 +403,7 @@
 .</p>
 <div class="refsect3">
 <a name="id-1.2.5.7.8.11.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
 <col class="parameters_description">
@@ -430,7 +430,7 @@
 <p>Returns the <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstDateTime.html"><span class="type">GstDateTime</span></a> of the TDT</p>
 <div class="refsect3">
 <a name="id-1.2.5.7.8.12.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
 <col class="parameters_description">
@@ -458,7 +458,7 @@
 .</p>
 <div class="refsect3">
 <a name="id-1.2.5.7.8.13.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
 <col class="parameters_description">
@@ -487,7 +487,7 @@
 <p>see also: <a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-sections.html#GstMpegtsSectionTableID" title="enum GstMpegtsSectionTableID"><span class="type">GstMpegtsSectionTableID</span></a></p>
 <div class="refsect3">
 <a name="id-1.2.5.7.9.2.6"></a><h4>Members</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="300px" class="enum_members_name">
 <col class="enum_members_description">
@@ -703,7 +703,7 @@
 <p>Network Information Table (ISO/IEC 13818-1 / EN 300 468)</p>
 <div class="refsect3">
 <a name="id-1.2.5.7.9.3.5"></a><h4>Members</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="300px" class="struct_members_name">
 <col class="struct_members_description">
@@ -746,7 +746,7 @@
 </pre>
 <div class="refsect3">
 <a name="id-1.2.5.7.9.4.4"></a><h4>Members</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="300px" class="struct_members_name">
 <col class="struct_members_description">
@@ -784,7 +784,7 @@
 <p>DVB Bouquet Association Table (EN 300 468)</p>
 <div class="refsect3">
 <a name="id-1.2.5.7.9.5.5"></a><h4>Members</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="300px" class="struct_members_name">
 <col class="struct_members_description">
@@ -830,7 +830,7 @@
 <p>Service Description Table (EN 300 468)</p>
 <div class="refsect3">
 <a name="id-1.2.5.7.9.7.5"></a><h4>Members</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="300px" class="struct_members_name">
 <col class="struct_members_description">
@@ -877,7 +877,7 @@
 </pre>
 <div class="refsect3">
 <a name="id-1.2.5.7.9.8.4"></a><h4>Members</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="300px" class="struct_members_name">
 <col class="struct_members_description">
@@ -936,7 +936,7 @@
 <p>Event Information Table (EN 300 468)</p>
 <div class="refsect3">
 <a name="id-1.2.5.7.9.9.5"></a><h4>Members</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="300px" class="struct_members_name">
 <col class="struct_members_description">
@@ -1001,7 +1001,7 @@
 </p>
 <div class="refsect3">
 <a name="id-1.2.5.7.9.10.5"></a><h4>Members</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="300px" class="struct_members_name">
 <col class="struct_members_description">
@@ -1049,7 +1049,7 @@
 <p>Corresponds to table 6 of ETSI EN 300 468 (v1.13.0)</p>
 <div class="refsect3">
 <a name="id-1.2.5.7.9.11.5"></a><h4>Members</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="300px" class="enum_members_name">
 <col class="enum_members_description">
@@ -1102,7 +1102,7 @@
 <p>Time Offset Table (EN 300 468)</p>
 <div class="refsect3">
 <a name="id-1.2.5.7.9.12.5"></a><h4>Members</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="300px" class="struct_members_name">
 <col class="struct_members_description">
diff --git a/docs/libs/html/gst-plugins-bad-libs-GstAggregator.html b/docs/libs/html/gst-plugins-bad-libs-GstAggregator.html
index 8204033..c27b39c 100644
--- a/docs/libs/html/gst-plugins-bad-libs-GstAggregator.html
+++ b/docs/libs/html/gst-plugins-bad-libs-GstAggregator.html
@@ -3,7 +3,7 @@
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>GstAggregator: GStreamer Bad Plugins 1.0 Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
 <link rel="home" href="index.html" title="GStreamer Bad Plugins 1.0 Library Reference Manual">
 <link rel="up" href="base.html" title="GStreamer Base classes from gst-plugins-bad">
 <link rel="prev" href="base.html" title="GStreamer Base classes from gst-plugins-bad">
@@ -34,7 +34,7 @@
 </tr></table></div>
 <div class="refsect1">
 <a name="gst-plugins-bad-libs-GstAggregator.functions"></a><h2>Functions</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="functions_return">
 <col class="functions_name">
@@ -77,7 +77,7 @@
 </div>
 <div class="refsect1">
 <a name="gst-plugins-bad-libs-GstAggregator.other"></a><h2>Types and Values</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="name">
 <col class="description">
@@ -145,7 +145,7 @@
 sent before pushing the buffer.</p>
 <div class="refsect3">
 <a name="id-1.2.7.2.6.2.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
 <col class="parameters_description">
@@ -175,7 +175,7 @@
 <p>Sets the caps to be used on the src pad.</p>
 <div class="refsect3">
 <a name="id-1.2.7.2.6.3.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
 <col class="parameters_description">
@@ -209,7 +209,7 @@
 sink pad.</p>
 <div class="refsect3">
 <a name="id-1.2.7.2.6.4.6"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
 <col class="parameters_description">
@@ -248,7 +248,7 @@
 <p>Typically only called by subclasses.</p>
 <div class="refsect3">
 <a name="id-1.2.7.2.6.5.6"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
 <col class="parameters_description">
@@ -283,7 +283,7 @@
 <p>Aggregator base class object structure.</p>
 <div class="refsect3">
 <a name="id-1.2.7.2.7.2.5"></a><h4>Members</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="300px" class="struct_members_name">
 <col class="struct_members_description">
@@ -352,6 +352,11 @@
   gboolean          (*start)          (GstAggregator    *  aggregator);
 
   GstClockTime      (*get_next_time)  (GstAggregator    *  aggregator);
+
+  GstAggregatorPad * (*create_new_pad) (GstAggregator  * self,
+                                        GstPadTemplate * templ,
+                                        const gchar    * req_name,
+                                        const GstCaps  * caps);
 };
 </pre>
 <p>The aggregator base class will handle in a thread-safe way all manners of
@@ -364,7 +369,7 @@
 _finish_buffer from inside that function.</p>
 <div class="refsect3">
 <a name="id-1.2.7.2.7.3.7"></a><h4>Members</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="300px" class="struct_members_name">
 <col class="struct_members_description">
@@ -470,6 +475,11 @@
 on all sink pads before aggregating.</p></td>
 <td class="struct_member_annotations"> </td>
 </tr>
+<tr>
+<td class="struct_member_name"><p><em class="structfield"><code><a name="GstAggregatorClass.create-new-pad"></a>create_new_pad</code></em> ()</p></td>
+<td> </td>
+<td> </td>
+</tr>
 </tbody>
 </table></div>
 </div>
diff --git a/docs/libs/html/gst-plugins-bad-libs-GstAggregatorPad.html b/docs/libs/html/gst-plugins-bad-libs-GstAggregatorPad.html
index 11dcb33..59fe84a 100644
--- a/docs/libs/html/gst-plugins-bad-libs-GstAggregatorPad.html
+++ b/docs/libs/html/gst-plugins-bad-libs-GstAggregatorPad.html
@@ -3,7 +3,7 @@
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>GstAggregatorPad: GStreamer Bad Plugins 1.0 Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
 <link rel="home" href="index.html" title="GStreamer Bad Plugins 1.0 Library Reference Manual">
 <link rel="up" href="base.html" title="GStreamer Base classes from gst-plugins-bad">
 <link rel="prev" href="gst-plugins-bad-libs-GstAggregator.html" title="GstAggregator">
@@ -33,7 +33,7 @@
 </tr></table></div>
 <div class="refsect1">
 <a name="gst-plugins-bad-libs-GstAggregatorPad.functions"></a><h2>Functions</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="functions_return">
 <col class="functions_name">
@@ -76,7 +76,7 @@
 </div>
 <div class="refsect1">
 <a name="gst-plugins-bad-libs-GstAggregatorPad.other"></a><h2>Types and Values</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="name">
 <col class="description">
@@ -106,7 +106,7 @@
 .</p>
 <div class="refsect3">
 <a name="id-1.2.7.3.6.2.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
 <col class="parameters_description">
@@ -134,7 +134,7 @@
 gst_aggregator_pad_get_buffer (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-GstAggregatorPad.html#GstAggregatorPad" title="struct GstAggregatorPad"><span class="type">GstAggregatorPad</span></a> *pad</code></em>);</pre>
 <div class="refsect3">
 <a name="id-1.2.7.3.6.3.4"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
 <col class="parameters_description">
@@ -165,7 +165,7 @@
 .</p>
 <div class="refsect3">
 <a name="id-1.2.7.3.6.4.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
 <col class="parameters_description">
@@ -212,7 +212,7 @@
 <p>The implementation the GstPad to use with <a class="link" href="gst-plugins-bad-libs-GstAggregator.html#GstAggregator" title="struct GstAggregator"><span class="type">GstAggregator</span></a></p>
 <div class="refsect3">
 <a name="id-1.2.7.3.7.2.5"></a><h4>Members</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="300px" class="struct_members_name">
 <col class="struct_members_description">
@@ -259,7 +259,7 @@
 </pre>
 <div class="refsect3">
 <a name="id-1.2.7.3.7.3.4"></a><h4>Members</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="300px" class="struct_members_name">
 <col class="struct_members_description">
diff --git a/docs/libs/html/gst-plugins-bad-libs-GstEGLImageMemory.html b/docs/libs/html/gst-plugins-bad-libs-GstEGLImageMemory.html
index 24f8f03..44163fc 100644
--- a/docs/libs/html/gst-plugins-bad-libs-GstEGLImageMemory.html
+++ b/docs/libs/html/gst-plugins-bad-libs-GstEGLImageMemory.html
@@ -3,11 +3,11 @@
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>GstEGLImageMemory: GStreamer Bad Plugins 1.0 Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
 <link rel="home" href="index.html" title="GStreamer Bad Plugins 1.0 Library Reference Manual">
 <link rel="up" href="gl.html" title="OpenGL Helper Library">
-<link rel="prev" href="GstGLDownload.html" title="GstGLDownload">
-<link rel="next" href="GstGLBaseFilter.html" title="GstGLBaseFilter">
+<link rel="prev" href="GstGLDisplay.html" title="GstGLDisplay">
+<link rel="next" href="GstGLFilter.html" title="GstGLFilter">
 <meta name="generator" content="GTK-Doc V1.24 (XML mode)">
 <link rel="stylesheet" href="style.css" type="text/css">
 </head>
@@ -19,8 +19,8 @@
 </td>
 <td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
 <td><a accesskey="u" href="gl.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
-<td><a accesskey="p" href="GstGLDownload.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
-<td><a accesskey="n" href="GstGLBaseFilter.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
+<td><a accesskey="p" href="GstGLDisplay.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
+<td><a accesskey="n" href="GstGLFilter.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
 </tr></table>
 <div class="refentry">
 <a name="gst-plugins-bad-libs-GstEGLImageMemory"></a><div class="titlepage"></div>
@@ -33,7 +33,7 @@
 </tr></table></div>
 <div class="refsect1">
 <a name="gst-plugins-bad-libs-GstEGLImageMemory.functions"></a><h2>Functions</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="functions_return">
 <col class="functions_name">
@@ -100,7 +100,7 @@
 </div>
 <div class="refsect1">
 <a name="gst-plugins-bad-libs-GstEGLImageMemory.other"></a><h2>Types and Values</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="name">
 <col class="description">
diff --git a/docs/libs/html/gst-plugins-bad-libs-GstGLAPI.html b/docs/libs/html/gst-plugins-bad-libs-GstGLAPI.html
index 4035ec5..209ad7b 100644
--- a/docs/libs/html/gst-plugins-bad-libs-GstGLAPI.html
+++ b/docs/libs/html/gst-plugins-bad-libs-GstGLAPI.html
@@ -3,11 +3,11 @@
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>GstGLAPI: GStreamer Bad Plugins 1.0 Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
 <link rel="home" href="index.html" title="GStreamer Bad Plugins 1.0 Library Reference Manual">
 <link rel="up" href="gl.html" title="OpenGL Helper Library">
 <link rel="prev" href="gl.html" title="OpenGL Helper Library">
-<link rel="next" href="GstGLBufferPool.html" title="GstGLBufferPool">
+<link rel="next" href="gst-plugins-bad-libs-gstglbasememory.html" title="GstGLBaseMemory">
 <meta name="generator" content="GTK-Doc V1.24 (XML mode)">
 <link rel="stylesheet" href="style.css" type="text/css">
 </head>
@@ -20,7 +20,7 @@
 <td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
 <td><a accesskey="u" href="gl.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
 <td><a accesskey="p" href="gl.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
-<td><a accesskey="n" href="GstGLBufferPool.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
+<td><a accesskey="n" href="gst-plugins-bad-libs-gstglbasememory.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
 </tr></table>
 <div class="refentry">
 <a name="gst-plugins-bad-libs-GstGLAPI"></a><div class="titlepage"></div>
@@ -33,7 +33,7 @@
 </tr></table></div>
 <div class="refsect1">
 <a name="gst-plugins-bad-libs-GstGLAPI.functions"></a><h2>Functions</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="functions_return">
 <col class="functions_name">
@@ -71,20 +71,12 @@
 <a class="link" href="gst-plugins-bad-libs-GstGLAPI.html#gst-gl-platform-from-string" title="gst_gl_platform_from_string ()">gst_gl_platform_from_string</a> <span class="c_punctuation">()</span>
 </td>
 </tr>
-<tr>
-<td class="function_type">
-<a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="gst-plugins-bad-libs-GstGLAPI.html#gst-gl-check-extension" title="gst_gl_check_extension ()">gst_gl_check_extension</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
 </tbody>
 </table></div>
 </div>
 <div class="refsect1">
 <a name="gst-plugins-bad-libs-GstGLAPI.other"></a><h2>Types and Values</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="name">
 <col class="description">
@@ -128,7 +120,7 @@
 gst_gl_api_to_string (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-GstGLAPI.html#GstGLAPI" title="enum GstGLAPI"><span class="type">GstGLAPI</span></a> api</code></em>);</pre>
 <div class="refsect3">
 <a name="id-1.2.9.2.6.2.4"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
 <col class="parameters_description">
@@ -154,7 +146,7 @@
 gst_gl_api_from_string (<em class="parameter"><code>const <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *api_s</code></em>);</pre>
 <div class="refsect3">
 <a name="id-1.2.9.2.6.3.4"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
 <col class="parameters_description">
@@ -177,17 +169,17 @@
 <div class="refsect2">
 <a name="gst-gl-platform-to-string"></a><h3>gst_gl_platform_to_string ()</h3>
 <pre class="programlisting"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> *
-gst_gl_platform_to_string (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-GstGLAPI.html#GstGLPlatform" title="enum GstGLPlatform"><span class="type">GstGLPlatform</span></a> api</code></em>);</pre>
+gst_gl_platform_to_string (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-GstGLAPI.html#GstGLPlatform" title="enum GstGLPlatform"><span class="type">GstGLPlatform</span></a> platform</code></em>);</pre>
 <div class="refsect3">
 <a name="id-1.2.9.2.6.4.4"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
 <col class="parameters_description">
 <col width="200px" class="parameters_annotations">
 </colgroup>
 <tbody><tr>
-<td class="parameter_name"><p>api</p></td>
+<td class="parameter_name"><p>platform</p></td>
 <td class="parameter_description"><p>a <a class="link" href="gst-plugins-bad-libs-GstGLAPI.html#GstGLPlatform" title="enum GstGLPlatform"><span class="type">GstGLPlatform</span></a> to stringify</p></td>
 <td class="parameter_annotations"> </td>
 </tr></tbody>
@@ -195,7 +187,7 @@
 </div>
 <div class="refsect3">
 <a name="id-1.2.9.2.6.4.5"></a><h4>Returns</h4>
-<p> A space seperated string of the OpenGL platforms enabled in <em class="parameter"><code>api</code></em>
+<p> A space seperated string of the OpenGL platforms enabled in <em class="parameter"><code>platform</code></em>
 </p>
 </div>
 </div>
@@ -206,7 +198,7 @@
 gst_gl_platform_from_string (<em class="parameter"><code>const <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *platform_s</code></em>);</pre>
 <div class="refsect3">
 <a name="id-1.2.9.2.6.5.4"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
 <col class="parameters_description">
@@ -225,13 +217,6 @@
 </p>
 </div>
 </div>
-<hr>
-<div class="refsect2">
-<a name="gst-gl-check-extension"></a><h3>gst_gl_check_extension ()</h3>
-<pre class="programlisting"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-gst_gl_check_extension (<em class="parameter"><code>const <span class="type">char</span> *name</code></em>,
-                        <em class="parameter"><code>const <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *ext</code></em>);</pre>
-</div>
 </div>
 <div class="refsect1">
 <a name="gst-plugins-bad-libs-GstGLAPI.other_details"></a><h2>Types and Values</h2>
@@ -239,7 +224,7 @@
 <a name="GstGLAPI"></a><h3>enum GstGLAPI</h3>
 <div class="refsect3">
 <a name="id-1.2.9.2.7.2.3"></a><h4>Members</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="300px" class="enum_members_name">
 <col class="enum_members_description">
@@ -248,33 +233,46 @@
 <tbody>
 <tr>
 <td class="enum_member_name"><p><a name="GST-GL-API-NONE:CAPS"></a>GST_GL_API_NONE</p></td>
-<td> </td>
-<td> </td>
+<td class="enum_member_description">
+<p>no API</p>
+</td>
+<td class="enum_member_annotations"> </td>
 </tr>
 <tr>
 <td class="enum_member_name"><p><a name="GST-GL-API-OPENGL:CAPS"></a>GST_GL_API_OPENGL</p></td>
-<td> </td>
-<td> </td>
+<td class="enum_member_description">
+<p>Desktop OpenGL up to and including 3.1.  The
+                   compatibility profile when the OpenGL version is &gt;= 3.2</p>
+</td>
+<td class="enum_member_annotations"> </td>
 </tr>
 <tr>
 <td class="enum_member_name"><p><a name="GST-GL-API-OPENGL3:CAPS"></a>GST_GL_API_OPENGL3</p></td>
-<td> </td>
-<td> </td>
+<td class="enum_member_description">
+<p>Desktop OpenGL &gt;= 3.2 core profile</p>
+</td>
+<td class="enum_member_annotations"> </td>
 </tr>
 <tr>
 <td class="enum_member_name"><p><a name="GST-GL-API-GLES1:CAPS"></a>GST_GL_API_GLES1</p></td>
-<td> </td>
-<td> </td>
+<td class="enum_member_description">
+<p>OpenGL ES 1.x</p>
+</td>
+<td class="enum_member_annotations"> </td>
 </tr>
 <tr>
 <td class="enum_member_name"><p><a name="GST-GL-API-GLES2:CAPS"></a>GST_GL_API_GLES2</p></td>
-<td> </td>
-<td> </td>
+<td class="enum_member_description">
+<p>OpenGL ES 2.x and 3.x</p>
+</td>
+<td class="enum_member_annotations"> </td>
 </tr>
 <tr>
 <td class="enum_member_name"><p><a name="GST-GL-API-ANY:CAPS"></a>GST_GL_API_ANY</p></td>
-<td> </td>
-<td> </td>
+<td class="enum_member_description">
+<p>Any OpenGL API</p>
+</td>
+<td class="enum_member_annotations"> </td>
 </tr>
 </tbody>
 </table></div>
@@ -285,7 +283,7 @@
 <a name="GstGLPlatform"></a><h3>enum GstGLPlatform</h3>
 <div class="refsect3">
 <a name="id-1.2.9.2.7.3.3"></a><h4>Members</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="300px" class="enum_members_name">
 <col class="enum_members_description">
@@ -294,38 +292,53 @@
 <tbody>
 <tr>
 <td class="enum_member_name"><p><a name="GST-GL-PLATFORM-NONE:CAPS"></a>GST_GL_PLATFORM_NONE</p></td>
-<td> </td>
-<td> </td>
+<td class="enum_member_description">
+<p>no platform</p>
+</td>
+<td class="enum_member_annotations"> </td>
 </tr>
 <tr>
 <td class="enum_member_name"><p><a name="GST-GL-PLATFORM-EGL:CAPS"></a>GST_GL_PLATFORM_EGL</p></td>
-<td> </td>
-<td> </td>
+<td class="enum_member_description">
+<p>the EGL platform used primarily with the X11, wayland
+                     and android window systems as well as on embedded Linux</p>
+</td>
+<td class="enum_member_annotations"> </td>
 </tr>
 <tr>
 <td class="enum_member_name"><p><a name="GST-GL-PLATFORM-GLX:CAPS"></a>GST_GL_PLATFORM_GLX</p></td>
-<td> </td>
-<td> </td>
+<td class="enum_member_description">
+<p>the GLX platform used primarily with the X11 window system</p>
+</td>
+<td class="enum_member_annotations"> </td>
 </tr>
 <tr>
 <td class="enum_member_name"><p><a name="GST-GL-PLATFORM-WGL:CAPS"></a>GST_GL_PLATFORM_WGL</p></td>
-<td> </td>
-<td> </td>
+<td class="enum_member_description">
+<p>the WGL platform used primarily on Windows</p>
+</td>
+<td class="enum_member_annotations"> </td>
 </tr>
 <tr>
 <td class="enum_member_name"><p><a name="GST-GL-PLATFORM-CGL:CAPS"></a>GST_GL_PLATFORM_CGL</p></td>
-<td> </td>
-<td> </td>
+<td class="enum_member_description">
+<p>the CGL platform used primarily on OS X</p>
+</td>
+<td class="enum_member_annotations"> </td>
 </tr>
 <tr>
 <td class="enum_member_name"><p><a name="GST-GL-PLATFORM-EAGL:CAPS"></a>GST_GL_PLATFORM_EAGL</p></td>
-<td> </td>
-<td> </td>
+<td class="enum_member_description">
+<p>the EAGL platform used primarily on iOS</p>
+</td>
+<td class="enum_member_annotations"> </td>
 </tr>
 <tr>
 <td class="enum_member_name"><p><a name="GST-GL-PLATFORM-ANY:CAPS"></a>GST_GL_PLATFORM_ANY</p></td>
-<td> </td>
-<td> </td>
+<td class="enum_member_description">
+<p>any OpenGL platform</p>
+</td>
+<td class="enum_member_annotations"> </td>
 </tr>
 </tbody>
 </table></div>
@@ -336,24 +349,28 @@
 <a name="GST-GL-API-GLES1-NAME:CAPS"></a><h3>GST_GL_API_GLES1_NAME</h3>
 <pre class="programlisting">#define GST_GL_API_GLES1_NAME "gles1"
 </pre>
+<p>The name for <a class="link" href="gst-plugins-bad-libs-GstGLAPI.html#GST-GL-API-GLES1:CAPS"><code class="literal">GST_GL_API_GLES1</code></a> used in various places</p>
 </div>
 <hr>
 <div class="refsect2">
 <a name="GST-GL-API-GLES2-NAME:CAPS"></a><h3>GST_GL_API_GLES2_NAME</h3>
 <pre class="programlisting">#define GST_GL_API_GLES2_NAME "gles2"
 </pre>
+<p>The name for <a class="link" href="gst-plugins-bad-libs-GstGLAPI.html#GST-GL-API-GLES2:CAPS"><code class="literal">GST_GL_API_GLES2</code></a> used in various places</p>
 </div>
 <hr>
 <div class="refsect2">
 <a name="GST-GL-API-OPENGL3-NAME:CAPS"></a><h3>GST_GL_API_OPENGL3_NAME</h3>
 <pre class="programlisting">#define GST_GL_API_OPENGL3_NAME "opengl3"
 </pre>
+<p>The name for <a class="link" href="gst-plugins-bad-libs-GstGLAPI.html#GST-GL-API-OPENGL3:CAPS"><code class="literal">GST_GL_API_OPENGL3</code></a> used in various places</p>
 </div>
 <hr>
 <div class="refsect2">
 <a name="GST-GL-API-OPENGL-NAME:CAPS"></a><h3>GST_GL_API_OPENGL_NAME</h3>
 <pre class="programlisting">#define GST_GL_API_OPENGL_NAME "opengl"
 </pre>
+<p>The name for <a class="link" href="gst-plugins-bad-libs-GstGLAPI.html#GST-GL-API-OPENGL:CAPS"><code class="literal">GST_GL_API_OPENGL</code></a> used in various places</p>
 </div>
 </div>
 </div>
diff --git a/docs/libs/html/gst-plugins-bad-libs-GstGLBuffer.html b/docs/libs/html/gst-plugins-bad-libs-GstGLBuffer.html
new file mode 100644
index 0000000..f1ec657
--- /dev/null
+++ b/docs/libs/html/gst-plugins-bad-libs-GstGLBuffer.html
@@ -0,0 +1,362 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>GstGLBuffer: GStreamer Bad Plugins 1.0 Library Reference Manual</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
+<link rel="home" href="index.html" title="GStreamer Bad Plugins 1.0 Library Reference Manual">
+<link rel="up" href="gl.html" title="OpenGL Helper Library">
+<link rel="prev" href="GstGLBaseFilter.html" title="GstGLBaseFilter">
+<link rel="next" href="GstGLBufferPool.html" title="GstGLBufferPool">
+<meta name="generator" content="GTK-Doc V1.24 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="5"><tr valign="middle">
+<td width="100%" align="left" class="shortcuts">
+<a href="#" class="shortcut">Top</a><span id="nav_description">  <span class="dim">|</span> 
+                  <a href="#gst-plugins-bad-libs-GstGLBuffer.description" class="shortcut">Description</a></span><span id="nav_hierarchy">  <span class="dim">|</span> 
+                  <a href="#gst-plugins-bad-libs-GstGLBuffer.object-hierarchy" class="shortcut">Object Hierarchy</a></span>
+</td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
+<td><a accesskey="u" href="gl.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
+<td><a accesskey="p" href="GstGLBaseFilter.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
+<td><a accesskey="n" href="GstGLBufferPool.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
+</tr></table>
+<div class="refentry">
+<a name="gst-plugins-bad-libs-GstGLBuffer"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="gst-plugins-bad-libs-GstGLBuffer.top_of_page"></a>GstGLBuffer</span></h2>
+<p>GstGLBuffer — memory subclass for GL buffers</p>
+</td>
+<td class="gallery_image" valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsect1">
+<a name="gst-plugins-bad-libs-GstGLBuffer.functions"></a><h2>Functions</h2>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="functions_return">
+<col class="functions_name">
+</colgroup>
+<tbody>
+<tr>
+<td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
+<a class="link" href="gst-plugins-bad-libs-GstGLBuffer.html#gst-gl-buffer-init-once" title="gst_gl_buffer_init_once ()">gst_gl_buffer_init_once</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
+</td>
+<td class="function_name">
+<a class="link" href="gst-plugins-bad-libs-GstGLBuffer.html#gst-is-gl-buffer" title="gst_is_gl_buffer ()">gst_is_gl_buffer</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a class="link" href="gst-plugins-bad-libs-GstGLBuffer.html#GstGLBuffer" title="GstGLBuffer"><span class="returnvalue">GstGLBuffer</span></a> *
+</td>
+<td class="function_name">
+<a class="link" href="gst-plugins-bad-libs-GstGLBuffer.html#gst-gl-buffer-alloc" title="gst_gl_buffer_alloc ()">gst_gl_buffer_alloc</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="define_keyword">#define</td>
+<td class="function_name"><a class="link" href="gst-plugins-bad-libs-GstGLBuffer.html#GST-GL-ALLOCATION-PARAMS-ALLOC-FLAG-BUFFER:CAPS" title="GST_GL_ALLOCATION_PARAMS_ALLOC_FLAG_BUFFER">GST_GL_ALLOCATION_PARAMS_ALLOC_FLAG_BUFFER</a></td>
+</tr>
+<tr>
+<td class="function_type">
+<a class="link" href="gst-plugins-bad-libs-GstGLBuffer.html#GstGLBufferAllocationParams" title="struct GstGLBufferAllocationParams"><span class="returnvalue">GstGLBufferAllocationParams</span></a> *
+</td>
+<td class="function_name">
+<a class="link" href="gst-plugins-bad-libs-GstGLBuffer.html#gst-gl-buffer-allocation-params-new" title="gst_gl_buffer_allocation_params_new ()">gst_gl_buffer_allocation_params_new</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<a name="GstGLBufferAllocator"></a><div class="refsect1">
+<a name="gst-plugins-bad-libs-GstGLBuffer.other"></a><h2>Types and Values</h2>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="name">
+<col class="description">
+</colgroup>
+<tbody>
+<tr>
+<td class="datatype_keyword"> </td>
+<td class="function_name"><a class="link" href="gst-plugins-bad-libs-GstGLBuffer.html#GstGLBuffer" title="GstGLBuffer">GstGLBuffer</a></td>
+</tr>
+<tr>
+<td class="datatype_keyword">struct</td>
+<td class="function_name"><a class="link" href="gst-plugins-bad-libs-GstGLBuffer.html#GstGLBufferAllocationParams" title="struct GstGLBufferAllocationParams">GstGLBufferAllocationParams</a></td>
+</tr>
+<tr>
+<td class="datatype_keyword"> </td>
+<td class="function_name"><a class="link" href="gst-plugins-bad-libs-GstGLBuffer.html#GstGLBufferAllocator-struct" title="GstGLBufferAllocator">GstGLBufferAllocator</a></td>
+</tr>
+<tr>
+<td class="datatype_keyword"> </td>
+<td class="function_name"><a class="link" href="gst-plugins-bad-libs-GstGLBuffer.html#GstGLBufferAllocatorClass" title="GstGLBufferAllocatorClass">GstGLBufferAllocatorClass</a></td>
+</tr>
+<tr>
+<td class="define_keyword">#define</td>
+<td class="function_name"><a class="link" href="gst-plugins-bad-libs-GstGLBuffer.html#GST-GL-BUFFER-ALLOCATOR-NAME:CAPS" title="GST_GL_BUFFER_ALLOCATOR_NAME">GST_GL_BUFFER_ALLOCATOR_NAME</a></td>
+</tr>
+<tr>
+<td class="define_keyword">#define</td>
+<td class="function_name"><a class="link" href="gst-plugins-bad-libs-GstGLBuffer.html#GST-CAPS-FEATURE-MEMORY-GL-BUFFER:CAPS" title="GST_CAPS_FEATURE_MEMORY_GL_BUFFER">GST_CAPS_FEATURE_MEMORY_GL_BUFFER</a></td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-libs-GstGLBuffer.object-hierarchy"></a><h2>Object Hierarchy</h2>
+<pre class="screen">    <a href="https://developer.gnome.org/gobject/unstable/gobject-The-Base-Object-Type.html#GObject">GObject</a>
+    <span class="lineart">╰──</span> <a href="https://developer.gnome.org/gobject/unstable/gobject-The-Base-Object-Type.html#GInitiallyUnowned">GInitiallyUnowned</a>
+        <span class="lineart">╰──</span> <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstObject.html">GstObject</a>
+            <span class="lineart">╰──</span> <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstAllocator.html">GstAllocator</a>
+                <span class="lineart">╰──</span> <a class="link" href="gst-plugins-bad-libs-gstglbasememory.html#GstGLBaseMemoryAllocator">GstGLBaseMemoryAllocator</a>
+                    <span class="lineart">╰──</span> GstGLBufferAllocator
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-libs-GstGLBuffer.description"></a><h2>Description</h2>
+<p>GstGLBuffer is a <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstMemory.html"><span class="type">GstMemory</span></a> subclass providing support for the mapping of
+GL buffers.  </p>
+<p>Data is uploaded or downloaded from the GPU as is necessary.</p>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-libs-GstGLBuffer.functions_details"></a><h2>Functions</h2>
+<div class="refsect2">
+<a name="gst-gl-buffer-init-once"></a><h3>gst_gl_buffer_init_once ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+gst_gl_buffer_init_once (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
+<p>Initializes the GL Buffer allocator. It is safe to call this function
+multiple times.  This must be called before any other <a class="link" href="gst-plugins-bad-libs-GstGLBuffer.html#GstGLBuffer" title="GstGLBuffer"><span class="type">GstGLBuffer</span></a> operation.</p>
+<p class="since">Since: 1.8</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-is-gl-buffer"></a><h3>gst_is_gl_buffer ()</h3>
+<pre class="programlisting"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
+gst_is_gl_buffer (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstMemory.html"><span class="type">GstMemory</span></a> *mem</code></em>);</pre>
+<div class="refsect3">
+<a name="id-1.2.9.5.8.3.4"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>mem</p></td>
+<td class="parameter_description"><p>a <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstMemory.html"><span class="type">GstMemory</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="id-1.2.9.5.8.3.5"></a><h4>Returns</h4>
+<p> whether the memory at <em class="parameter"><code>mem</code></em>
+is a <a class="link" href="gst-plugins-bad-libs-GstGLBuffer.html#GstGLBuffer" title="GstGLBuffer"><span class="type">GstGLBuffer</span></a></p>
+</div>
+<p class="since">Since: 1.8</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-gl-buffer-alloc"></a><h3>gst_gl_buffer_alloc ()</h3>
+<pre class="programlisting"><a class="link" href="gst-plugins-bad-libs-GstGLBuffer.html#GstGLBuffer" title="GstGLBuffer"><span class="returnvalue">GstGLBuffer</span></a> *
+gst_gl_buffer_alloc (<em class="parameter"><code><a class="link" href="GstGLContext.html" title="GstGLContext"><span class="type">GstGLContext</span></a> *context</code></em>,
+                     <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> gl_target</code></em>,
+                     <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> gl_usage</code></em>,
+                     <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstAllocator.html#GstAllocationParams"><span class="type">GstAllocationParams</span></a> *params</code></em>,
+                     <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gsize"><span class="type">gsize</span></a> maxsize</code></em>);</pre>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GST-GL-ALLOCATION-PARAMS-ALLOC-FLAG-BUFFER:CAPS"></a><h3>GST_GL_ALLOCATION_PARAMS_ALLOC_FLAG_BUFFER</h3>
+<pre class="programlisting">#define GST_GL_ALLOCATION_PARAMS_ALLOC_FLAG_BUFFER (1 &lt;&lt; 4)
+</pre>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-gl-buffer-allocation-params-new"></a><h3>gst_gl_buffer_allocation_params_new ()</h3>
+<pre class="programlisting"><a class="link" href="gst-plugins-bad-libs-GstGLBuffer.html#GstGLBufferAllocationParams" title="struct GstGLBufferAllocationParams"><span class="returnvalue">GstGLBufferAllocationParams</span></a> *
+gst_gl_buffer_allocation_params_new (<em class="parameter"><code><a class="link" href="GstGLContext.html" title="GstGLContext"><span class="type">GstGLContext</span></a> *context</code></em>,
+                                     <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gsize"><span class="type">gsize</span></a> alloc_size</code></em>,
+                                     <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstAllocator.html#GstAllocationParams"><span class="type">GstAllocationParams</span></a> *alloc_params</code></em>,
+                                     <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> gl_target</code></em>,
+                                     <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> gl_usage</code></em>);</pre>
+<div class="refsect3">
+<a name="id-1.2.9.5.8.6.4"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>context</p></td>
+<td class="parameter_description"><p>a <a class="link" href="GstGLContext.html" title="GstGLContext"><span class="type">GstGLContext</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>alloc_size</p></td>
+<td class="parameter_description"><p>the size in bytes to allocate</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>alloc_params</p></td>
+<td class="parameter_description"><p> the <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstAllocator.html#GstAllocationParams"><span class="type">GstAllocationParams</span></a> for <em class="parameter"><code>tex_id</code></em>
+. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="NULL is OK, both for passing and for returning."><span class="acronym">allow-none</span></acronym>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>gl_target</p></td>
+<td class="parameter_description"><p>the OpenGL target to allocate</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>gl_usage</p></td>
+<td class="parameter_description"><p>the OpenGL usage hint to allocate with</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="id-1.2.9.5.8.6.5"></a><h4>Returns</h4>
+<p> a new <a class="link" href="gst-plugins-bad-libs-GstGLBuffer.html#GstGLBufferAllocationParams" title="struct GstGLBufferAllocationParams"><span class="type">GstGLBufferAllocationParams</span></a> for allocating OpenGL buffer
+objects</p>
+</div>
+<p class="since">Since: 1.8</p>
+</div>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-libs-GstGLBuffer.other_details"></a><h2>Types and Values</h2>
+<div class="refsect2">
+<a name="GstGLBuffer"></a><h3>GstGLBuffer</h3>
+<pre class="programlisting">typedef struct {
+  GstGLBaseMemory       mem;
+
+  guint                 id;
+  guint                 target;         /* XXX: put this in the allocator? */
+  guint                 usage_hints;     /* XXX: put this in the allocator? */
+} GstGLBuffer;
+</pre>
+<p>Represents information about a GL buffer</p>
+<div class="refsect3">
+<a name="id-1.2.9.5.9.2.5"></a><h4>Members</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="300px" class="struct_members_name">
+<col class="struct_members_description">
+<col width="200px" class="struct_members_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="struct_member_name"><p><a class="link" href="gst-plugins-bad-libs-gstglbasememory.html#GstGLBaseMemory" title="GstGLBaseMemory"><span class="type">GstGLBaseMemory</span></a> <em class="structfield"><code><a name="GstGLBuffer.mem"></a>mem</code></em>;</p></td>
+<td class="struct_member_description"><p>the parent object</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> <em class="structfield"><code><a name="GstGLBuffer.id"></a>id</code></em>;</p></td>
+<td class="struct_member_description"><p>the buffer id for this memory</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> <em class="structfield"><code><a name="GstGLBuffer.target"></a>target</code></em>;</p></td>
+<td class="struct_member_description"><p>the OpenGL target of this texture for binding purposes</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> <em class="structfield"><code><a name="GstGLBuffer.usage-hints"></a>usage_hints</code></em>;</p></td>
+<td class="struct_member_description"><p>the OpenGL usage hints this buffer was created with</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstGLBufferAllocationParams"></a><h3>struct GstGLBufferAllocationParams</h3>
+<pre class="programlisting">struct GstGLBufferAllocationParams {
+  GstGLAllocationParams     parent;
+
+  guint                     gl_target;
+  guint                     gl_usage;
+};
+</pre>
+<div class="refsect3">
+<a name="id-1.2.9.5.9.3.4"></a><h4>Members</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="300px" class="struct_members_name">
+<col class="struct_members_description">
+<col width="200px" class="struct_members_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="struct_member_name"><p><a class="link" href="gst-plugins-bad-libs-gstglbasememory.html#GstGLAllocationParams" title="struct GstGLAllocationParams"><span class="type">GstGLAllocationParams</span></a> <em class="structfield"><code><a name="GstGLBufferAllocationParams.parent"></a>parent</code></em>;</p></td>
+<td class="struct_member_description"><p>parent object</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> <em class="structfield"><code><a name="GstGLBufferAllocationParams.gl-target"></a>gl_target</code></em>;</p></td>
+<td class="struct_member_description"><p>the OpenGL target to bind the buffer to</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> <em class="structfield"><code><a name="GstGLBufferAllocationParams.gl-usage"></a>gl_usage</code></em>;</p></td>
+<td class="struct_member_description"><p>the OpenGL usage hint to create the buffer with</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstGLBufferAllocator-struct"></a><h3>GstGLBufferAllocator</h3>
+<pre class="programlisting">typedef struct _GstGLBufferAllocator GstGLBufferAllocator;</pre>
+<p>Opaque <span class="type">GstGLAllocator</span> struct</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstGLBufferAllocatorClass"></a><h3>GstGLBufferAllocatorClass</h3>
+<pre class="programlisting">typedef struct {
+  GstGLBaseMemoryAllocatorClass parent_class;
+} GstGLBufferAllocatorClass;
+</pre>
+<p>The <a class="link" href="gst-plugins-bad-libs-GstGLBuffer.html#GstGLBufferAllocatorClass" title="GstGLBufferAllocatorClass"><span class="type">GstGLBufferAllocatorClass</span></a> only contains private data</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GST-GL-BUFFER-ALLOCATOR-NAME:CAPS"></a><h3>GST_GL_BUFFER_ALLOCATOR_NAME</h3>
+<pre class="programlisting">#define GST_GL_BUFFER_ALLOCATOR_NAME   "GLBuffer"
+</pre>
+<p>The name of the GL buffer allocator</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GST-CAPS-FEATURE-MEMORY-GL-BUFFER:CAPS"></a><h3>GST_CAPS_FEATURE_MEMORY_GL_BUFFER</h3>
+<pre class="programlisting">#define GST_CAPS_FEATURE_MEMORY_GL_BUFFER "memory:GLBuffer"
+</pre>
+</div>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-libs-GstGLBuffer.see-also"></a><h2>See Also</h2>
+<p><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstMemory.html"><span class="type">GstMemory</span></a>, <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstAllocator.html"><span class="type">GstAllocator</span></a></p>
+</div>
+</div>
+<div class="footer">
+<hr>Generated by GTK-Doc V1.24</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/libs/html/gst-plugins-bad-libs-GstGLContextCocoa.html b/docs/libs/html/gst-plugins-bad-libs-GstGLContextCocoa.html
index 49fc8fe..0f93ee1 100644
--- a/docs/libs/html/gst-plugins-bad-libs-GstGLContextCocoa.html
+++ b/docs/libs/html/gst-plugins-bad-libs-GstGLContextCocoa.html
@@ -3,7 +3,7 @@
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>GstGLContextCocoa: GStreamer Bad Plugins 1.0 Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
 <link rel="home" href="index.html" title="GStreamer Bad Plugins 1.0 Library Reference Manual">
 <link rel="up" href="gl.html" title="OpenGL Helper Library">
 <link rel="prev" href="GstGLContext.html" title="GstGLContext">
@@ -33,7 +33,7 @@
 </tr></table></div>
 <div class="refsect1">
 <a name="gst-plugins-bad-libs-GstGLContextCocoa.functions"></a><h2>Functions</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="functions_return">
 <col class="functions_name">
@@ -68,7 +68,7 @@
 </div>
 <div class="refsect1">
 <a name="gst-plugins-bad-libs-GstGLContextCocoa.other"></a><h2>Types and Values</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="name">
 <col class="description">
diff --git a/docs/libs/html/gst-plugins-bad-libs-GstGLContextEGL.html b/docs/libs/html/gst-plugins-bad-libs-GstGLContextEGL.html
index 5736e8e..989d4e4 100644
--- a/docs/libs/html/gst-plugins-bad-libs-GstGLContextEGL.html
+++ b/docs/libs/html/gst-plugins-bad-libs-GstGLContextEGL.html
@@ -3,7 +3,7 @@
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>GstGLContextEGL: GStreamer Bad Plugins 1.0 Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
 <link rel="home" href="index.html" title="GStreamer Bad Plugins 1.0 Library Reference Manual">
 <link rel="up" href="gl.html" title="OpenGL Helper Library">
 <link rel="prev" href="gst-plugins-bad-libs-GstGLContextCocoa.html" title="GstGLContextCocoa">
@@ -33,7 +33,7 @@
 </tr></table></div>
 <div class="refsect1">
 <a name="gst-plugins-bad-libs-GstGLContextEGL.functions"></a><h2>Functions</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="functions_return">
 <col class="functions_name">
@@ -68,7 +68,7 @@
 </div>
 <div class="refsect1">
 <a name="gst-plugins-bad-libs-GstGLContextEGL.other"></a><h2>Types and Values</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="name">
 <col class="description">
@@ -118,6 +118,8 @@
 
   GstGLAPI gl_api;
 
+  const gchar *egl_exts;
+
   EGLImageKHR (*eglCreateImage) (EGLDisplay dpy, EGLContext ctx, EGLenum target,
       EGLClientBuffer buffer, const EGLint *attrib_list);
   EGLBoolean (*eglDestroyImage) (EGLDisplay dpy, EGLImageKHR image);
diff --git a/docs/libs/html/gst-plugins-bad-libs-GstGLContextEagl.html b/docs/libs/html/gst-plugins-bad-libs-GstGLContextEagl.html
index 137dded..04fc3cc 100644
--- a/docs/libs/html/gst-plugins-bad-libs-GstGLContextEagl.html
+++ b/docs/libs/html/gst-plugins-bad-libs-GstGLContextEagl.html
@@ -3,7 +3,7 @@
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>GstGLContextEagl: GStreamer Bad Plugins 1.0 Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
 <link rel="home" href="index.html" title="GStreamer Bad Plugins 1.0 Library Reference Manual">
 <link rel="up" href="gl.html" title="OpenGL Helper Library">
 <link rel="prev" href="gst-plugins-bad-libs-GstGLContextEGL.html" title="GstGLContextEGL">
@@ -33,7 +33,7 @@
 </tr></table></div>
 <div class="refsect1">
 <a name="gst-plugins-bad-libs-GstGLContextEagl.functions"></a><h2>Functions</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="functions_return">
 <col class="functions_name">
@@ -60,7 +60,7 @@
 </div>
 <div class="refsect1">
 <a name="gst-plugins-bad-libs-GstGLContextEagl.other"></a><h2>Types and Values</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="name">
 <col class="description">
diff --git a/docs/libs/html/gst-plugins-bad-libs-GstGLContextGLX.html b/docs/libs/html/gst-plugins-bad-libs-GstGLContextGLX.html
index 807561a..427b47f 100644
--- a/docs/libs/html/gst-plugins-bad-libs-GstGLContextGLX.html
+++ b/docs/libs/html/gst-plugins-bad-libs-GstGLContextGLX.html
@@ -3,7 +3,7 @@
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>GstGLContextGLX: GStreamer Bad Plugins 1.0 Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
 <link rel="home" href="index.html" title="GStreamer Bad Plugins 1.0 Library Reference Manual">
 <link rel="up" href="gl.html" title="OpenGL Helper Library">
 <link rel="prev" href="gst-plugins-bad-libs-GstGLContextEagl.html" title="GstGLContextEagl">
@@ -33,7 +33,7 @@
 </tr></table></div>
 <div class="refsect1">
 <a name="gst-plugins-bad-libs-GstGLContextGLX.functions"></a><h2>Functions</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="functions_return">
 <col class="functions_name">
@@ -68,7 +68,7 @@
 </div>
 <div class="refsect1">
 <a name="gst-plugins-bad-libs-GstGLContextGLX.other"></a><h2>Types and Values</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="name">
 <col class="description">
diff --git a/docs/libs/html/gst-plugins-bad-libs-GstGLContextWGL.html b/docs/libs/html/gst-plugins-bad-libs-GstGLContextWGL.html
index 0af2373..6a32503 100644
--- a/docs/libs/html/gst-plugins-bad-libs-GstGLContextWGL.html
+++ b/docs/libs/html/gst-plugins-bad-libs-GstGLContextWGL.html
@@ -3,7 +3,7 @@
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>GstGLContextWGL: GStreamer Bad Plugins 1.0 Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
 <link rel="home" href="index.html" title="GStreamer Bad Plugins 1.0 Library Reference Manual">
 <link rel="up" href="gl.html" title="OpenGL Helper Library">
 <link rel="prev" href="gst-plugins-bad-libs-GstGLContextGLX.html" title="GstGLContextGLX">
@@ -33,7 +33,7 @@
 </tr></table></div>
 <div class="refsect1">
 <a name="gst-plugins-bad-libs-GstGLContextWGL.functions"></a><h2>Functions</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="functions_return">
 <col class="functions_name">
@@ -68,7 +68,7 @@
 </div>
 <div class="refsect1">
 <a name="gst-plugins-bad-libs-GstGLContextWGL.other"></a><h2>Types and Values</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="name">
 <col class="description">
diff --git a/docs/libs/html/gst-plugins-bad-libs-GstGLMemory.html b/docs/libs/html/gst-plugins-bad-libs-GstGLMemory.html
new file mode 100644
index 0000000..77bb84c
--- /dev/null
+++ b/docs/libs/html/gst-plugins-bad-libs-GstGLMemory.html
@@ -0,0 +1,1289 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>GstGLMemory: GStreamer Bad Plugins 1.0 Library Reference Manual</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
+<link rel="home" href="index.html" title="GStreamer Bad Plugins 1.0 Library Reference Manual">
+<link rel="up" href="gl.html" title="OpenGL Helper Library">
+<link rel="prev" href="GstGLFramebuffer.html" title="GstGLFramebuffer">
+<link rel="next" href="gst-plugins-bad-libs-gstglmemorypbo.html" title="GstGLMemoryPBO">
+<meta name="generator" content="GTK-Doc V1.24 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="5"><tr valign="middle">
+<td width="100%" align="left" class="shortcuts">
+<a href="#" class="shortcut">Top</a><span id="nav_description">  <span class="dim">|</span> 
+                  <a href="#gst-plugins-bad-libs-GstGLMemory.description" class="shortcut">Description</a></span><span id="nav_hierarchy">  <span class="dim">|</span> 
+                  <a href="#gst-plugins-bad-libs-GstGLMemory.object-hierarchy" class="shortcut">Object Hierarchy</a></span>
+</td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
+<td><a accesskey="u" href="gl.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
+<td><a accesskey="p" href="GstGLFramebuffer.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
+<td><a accesskey="n" href="gst-plugins-bad-libs-gstglmemorypbo.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
+</tr></table>
+<div class="refentry">
+<a name="gst-plugins-bad-libs-GstGLMemory"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="gst-plugins-bad-libs-GstGLMemory.top_of_page"></a>GstGLMemory</span></h2>
+<p>GstGLMemory — memory subclass for GL textures</p>
+</td>
+<td class="gallery_image" valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsect1">
+<a name="gst-plugins-bad-libs-GstGLMemory.functions"></a><h2>Functions</h2>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="functions_return">
+<col class="functions_name">
+</colgroup>
+<tbody>
+<tr>
+<td class="define_keyword">#define</td>
+<td class="function_name"><a class="link" href="gst-plugins-bad-libs-GstGLMemory.html#GST-GL-ALLOCATION-PARAMS-ALLOC-FLAG-VIDEO:CAPS" title="GST_GL_ALLOCATION_PARAMS_ALLOC_FLAG_VIDEO">GST_GL_ALLOCATION_PARAMS_ALLOC_FLAG_VIDEO</a></td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
+<a class="link" href="gst-plugins-bad-libs-GstGLMemory.html#gst-gl-video-allocation-params-copy-data" title="gst_gl_video_allocation_params_copy_data ()">gst_gl_video_allocation_params_copy_data</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
+<a class="link" href="gst-plugins-bad-libs-GstGLMemory.html#gst-gl-video-allocation-params-free-data" title="gst_gl_video_allocation_params_free_data ()">gst_gl_video_allocation_params_free_data</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
+</td>
+<td class="function_name">
+<a class="link" href="gst-plugins-bad-libs-GstGLMemory.html#gst-gl-video-allocation-params-init-full" title="gst_gl_video_allocation_params_init_full ()">gst_gl_video_allocation_params_init_full</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a class="link" href="gst-plugins-bad-libs-GstGLMemory.html#GstGLVideoAllocationParams" title="struct GstGLVideoAllocationParams"><span class="returnvalue">GstGLVideoAllocationParams</span></a> *
+</td>
+<td class="function_name">
+<a class="link" href="gst-plugins-bad-libs-GstGLMemory.html#gst-gl-video-allocation-params-new" title="gst_gl_video_allocation_params_new ()">gst_gl_video_allocation_params_new</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a class="link" href="gst-plugins-bad-libs-GstGLMemory.html#GstGLVideoAllocationParams" title="struct GstGLVideoAllocationParams"><span class="returnvalue">GstGLVideoAllocationParams</span></a> *
+</td>
+<td class="function_name">
+<a class="link" href="gst-plugins-bad-libs-GstGLMemory.html#gst-gl-video-allocation-params-new-wrapped-data" title="gst_gl_video_allocation_params_new_wrapped_data ()">gst_gl_video_allocation_params_new_wrapped_data</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a class="link" href="gst-plugins-bad-libs-GstGLMemory.html#GstGLVideoAllocationParams" title="struct GstGLVideoAllocationParams"><span class="returnvalue">GstGLVideoAllocationParams</span></a> *
+</td>
+<td class="function_name">
+<a class="link" href="gst-plugins-bad-libs-GstGLMemory.html#gst-gl-video-allocation-params-new-wrapped-texture" title="gst_gl_video_allocation_params_new_wrapped_texture ()">gst_gl_video_allocation_params_new_wrapped_texture</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a class="link" href="gst-plugins-bad-libs-GstGLMemory.html#GstGLMemoryAllocator"><span class="returnvalue">GstGLMemoryAllocator</span></a> *
+</td>
+<td class="function_name">
+<a class="link" href="gst-plugins-bad-libs-GstGLMemory.html#gst-gl-memory-allocator-get-default" title="gst_gl_memory_allocator_get_default ()">gst_gl_memory_allocator_get_default</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
+<a class="link" href="gst-plugins-bad-libs-GstGLMemory.html#gst-gl-memory-init-once" title="gst_gl_memory_init_once ()">gst_gl_memory_init_once</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
+<a class="link" href="gst-plugins-bad-libs-GstGLMemory.html#gst-gl-memory-init" title="gst_gl_memory_init ()">gst_gl_memory_init</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
+</td>
+<td class="function_name">
+<a class="link" href="gst-plugins-bad-libs-GstGLMemory.html#gst-is-gl-memory" title="gst_is_gl_memory ()">gst_is_gl_memory</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
+</td>
+<td class="function_name">
+<a class="link" href="gst-plugins-bad-libs-GstGLMemory.html#gst-gl-memory-copy-into" title="gst_gl_memory_copy_into ()">gst_gl_memory_copy_into</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
+</td>
+<td class="function_name">
+<a class="link" href="gst-plugins-bad-libs-GstGLMemory.html#gst-gl-memory-copy-teximage" title="gst_gl_memory_copy_teximage ()">gst_gl_memory_copy_teximage</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
+</td>
+<td class="function_name">
+<a class="link" href="gst-plugins-bad-libs-GstGLMemory.html#gst-gl-memory-read-pixels" title="gst_gl_memory_read_pixels ()">gst_gl_memory_read_pixels</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
+<a class="link" href="gst-plugins-bad-libs-GstGLMemory.html#gst-gl-memory-texsubimage" title="gst_gl_memory_texsubimage ()">gst_gl_memory_texsubimage</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gint"><span class="returnvalue">gint</span></a>
+</td>
+<td class="function_name">
+<a class="link" href="gst-plugins-bad-libs-GstGLMemory.html#gst-gl-memory-get-texture-height" title="gst_gl_memory_get_texture_height ()">gst_gl_memory_get_texture_height</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#guint"><span class="returnvalue">guint</span></a>
+</td>
+<td class="function_name">
+<a class="link" href="gst-plugins-bad-libs-GstGLMemory.html#gst-gl-memory-get-texture-id" title="gst_gl_memory_get_texture_id ()">gst_gl_memory_get_texture_id</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a class="link" href="gst-plugins-bad-libs-OpenGL-Formats.html#GstGLTextureTarget" title="enum GstGLTextureTarget"><span class="returnvalue">GstGLTextureTarget</span></a>
+</td>
+<td class="function_name">
+<a class="link" href="gst-plugins-bad-libs-GstGLMemory.html#gst-gl-memory-get-texture-target" title="gst_gl_memory_get_texture_target ()">gst_gl_memory_get_texture_target</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">GstVideoGLTextureType</span>
+</td>
+<td class="function_name">
+<a class="link" href="gst-plugins-bad-libs-GstGLMemory.html#gst-gl-memory-get-texture-type" title="gst_gl_memory_get_texture_type ()">gst_gl_memory_get_texture_type</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gint"><span class="returnvalue">gint</span></a>
+</td>
+<td class="function_name">
+<a class="link" href="gst-plugins-bad-libs-GstGLMemory.html#gst-gl-memory-get-texture-width" title="gst_gl_memory_get_texture_width ()">gst_gl_memory_get_texture_width</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
+</td>
+<td class="function_name">
+<a class="link" href="gst-plugins-bad-libs-GstGLMemory.html#gst-gl-memory-setup-buffer" title="gst_gl_memory_setup_buffer ()">gst_gl_memory_setup_buffer</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<a name="GstGLMemoryAllocator"></a><div class="refsect1">
+<a name="gst-plugins-bad-libs-GstGLMemory.other"></a><h2>Types and Values</h2>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="name">
+<col class="description">
+</colgroup>
+<tbody>
+<tr>
+<td class="define_keyword">#define</td>
+<td class="function_name"><a class="link" href="gst-plugins-bad-libs-GstGLMemory.html#GST-GL-MEMORY-VIDEO-FORMATS-STR:CAPS" title="GST_GL_MEMORY_VIDEO_FORMATS_STR">GST_GL_MEMORY_VIDEO_FORMATS_STR</a></td>
+</tr>
+<tr>
+<td class="datatype_keyword">struct</td>
+<td class="function_name"><a class="link" href="gst-plugins-bad-libs-GstGLMemory.html#GstGLVideoAllocationParams" title="struct GstGLVideoAllocationParams">GstGLVideoAllocationParams</a></td>
+</tr>
+<tr>
+<td class="datatype_keyword"> </td>
+<td class="function_name"><a class="link" href="gst-plugins-bad-libs-GstGLMemory.html#GstGLMemoryAllocator-struct" title="GstGLMemoryAllocator">GstGLMemoryAllocator</a></td>
+</tr>
+<tr>
+<td class="datatype_keyword"> </td>
+<td class="function_name"><a class="link" href="gst-plugins-bad-libs-GstGLMemory.html#GstGLMemoryAllocatorClass" title="GstGLMemoryAllocatorClass">GstGLMemoryAllocatorClass</a></td>
+</tr>
+<tr>
+<td class="datatype_keyword"> </td>
+<td class="function_name"><a class="link" href="gst-plugins-bad-libs-GstGLMemory.html#GstGLMemory" title="GstGLMemory">GstGLMemory</a></td>
+</tr>
+<tr>
+<td class="define_keyword">#define</td>
+<td class="function_name"><a class="link" href="gst-plugins-bad-libs-GstGLMemory.html#GST-GL-MEMORY-ALLOCATOR-NAME:CAPS" title="GST_GL_MEMORY_ALLOCATOR_NAME">GST_GL_MEMORY_ALLOCATOR_NAME</a></td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-libs-GstGLMemory.object-hierarchy"></a><h2>Object Hierarchy</h2>
+<pre class="screen">    <a href="https://developer.gnome.org/gobject/unstable/gobject-The-Base-Object-Type.html#GObject">GObject</a>
+    <span class="lineart">╰──</span> <a href="https://developer.gnome.org/gobject/unstable/gobject-The-Base-Object-Type.html#GInitiallyUnowned">GInitiallyUnowned</a>
+        <span class="lineart">╰──</span> <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstObject.html">GstObject</a>
+            <span class="lineart">╰──</span> <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstAllocator.html">GstAllocator</a>
+                <span class="lineart">╰──</span> <a class="link" href="gst-plugins-bad-libs-gstglbasememory.html#GstGLBaseMemoryAllocator">GstGLBaseMemoryAllocator</a>
+                    <span class="lineart">╰──</span> GstGLMemoryAllocator
+                        <span class="lineart">╰──</span> <a class="link" href="gst-plugins-bad-libs-gstglmemorypbo.html#GstGLMemoryPBOAllocator">GstGLMemoryPBOAllocator</a>
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-libs-GstGLMemory.description"></a><h2>Description</h2>
+<p>GstGLMemory is a <a class="link" href="gst-plugins-bad-libs-gstglbasememory.html#GstGLBaseMemory" title="GstGLBaseMemory"><span class="type">GstGLBaseMemory</span></a> subclass providing support for the mapping of
+OpenGL textures.  </p>
+<p><a class="link" href="gst-plugins-bad-libs-GstGLMemory.html#GstGLMemory" title="GstGLMemory"><span class="type">GstGLMemory</span></a> is created or wrapped through <a class="link" href="gst-plugins-bad-libs-gstglbasememory.html#gst-gl-base-memory-alloc" title="gst_gl_base_memory_alloc ()"><code class="function">gst_gl_base_memory_alloc()</code></a>
+with <a class="link" href="gst-plugins-bad-libs-GstGLMemory.html#GstGLVideoAllocationParams" title="struct GstGLVideoAllocationParams"><span class="type">GstGLVideoAllocationParams</span></a>.</p>
+<p>Data is uploaded or downloaded from the GPU as is necessary.</p>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-libs-GstGLMemory.functions_details"></a><h2>Functions</h2>
+<div class="refsect2">
+<a name="GST-GL-ALLOCATION-PARAMS-ALLOC-FLAG-VIDEO:CAPS"></a><h3>GST_GL_ALLOCATION_PARAMS_ALLOC_FLAG_VIDEO</h3>
+<pre class="programlisting">#define GST_GL_ALLOCATION_PARAMS_ALLOC_FLAG_VIDEO (1 &lt;&lt; 3)
+</pre>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-gl-video-allocation-params-copy-data"></a><h3>gst_gl_video_allocation_params_copy_data ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+gst_gl_video_allocation_params_copy_data
+                               (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-GstGLMemory.html#GstGLVideoAllocationParams" title="struct GstGLVideoAllocationParams"><span class="type">GstGLVideoAllocationParams</span></a> *src_vid</code></em>,
+                                <em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-GstGLMemory.html#GstGLVideoAllocationParams" title="struct GstGLVideoAllocationParams"><span class="type">GstGLVideoAllocationParams</span></a> *dest_vid</code></em>);</pre>
+<p>Copy and set any dynamically allocated resources in <em class="parameter"><code>dest_vid</code></em>
+.  Intended
+for subclass usage only to chain up at the end of a subclass copy function.</p>
+<div class="refsect3">
+<a name="id-1.2.9.18.8.3.5"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>src_vid</p></td>
+<td class="parameter_description"><p>source <a class="link" href="gst-plugins-bad-libs-GstGLMemory.html#GstGLVideoAllocationParams" title="struct GstGLVideoAllocationParams"><span class="type">GstGLVideoAllocationParams</span></a> to copy from</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>dest_vid</p></td>
+<td class="parameter_description"><p>destination <a class="link" href="gst-plugins-bad-libs-GstGLMemory.html#GstGLVideoAllocationParams" title="struct GstGLVideoAllocationParams"><span class="type">GstGLVideoAllocationParams</span></a> to copy into</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<p class="since">Since: 1.8</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-gl-video-allocation-params-free-data"></a><h3>gst_gl_video_allocation_params_free_data ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+gst_gl_video_allocation_params_free_data
+                               (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-GstGLMemory.html#GstGLVideoAllocationParams" title="struct GstGLVideoAllocationParams"><span class="type">GstGLVideoAllocationParams</span></a> *params</code></em>);</pre>
+<p>Unset and free any dynamically allocated resources.  Intended for subclass
+usage only to chain up at the end of a subclass free function.</p>
+<div class="refsect3">
+<a name="id-1.2.9.18.8.4.5"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>params</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gst-plugins-bad-libs-GstGLMemory.html#GstGLVideoAllocationParams" title="struct GstGLVideoAllocationParams"><span class="type">GstGLVideoAllocationParams</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<p class="since">Since: 1.8</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-gl-video-allocation-params-init-full"></a><h3>gst_gl_video_allocation_params_init_full ()</h3>
+<pre class="programlisting"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
+gst_gl_video_allocation_params_init_full
+                               (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-GstGLMemory.html#GstGLVideoAllocationParams" title="struct GstGLVideoAllocationParams"><span class="type">GstGLVideoAllocationParams</span></a> *params</code></em>,
+                                <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gsize"><span class="type">gsize</span></a> struct_size</code></em>,
+                                <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> alloc_flags</code></em>,
+                                <em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-gstglbasememory.html#GstGLAllocationParamsCopyFunc" title="GstGLAllocationParamsCopyFunc ()"><span class="type">GstGLAllocationParamsCopyFunc</span></a> copy</code></em>,
+                                <em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-gstglbasememory.html#GstGLAllocationParamsFreeFunc" title="GstGLAllocationParamsFreeFunc ()"><span class="type">GstGLAllocationParamsFreeFunc</span></a> free</code></em>,
+                                <em class="parameter"><code><a class="link" href="GstGLContext.html" title="GstGLContext"><span class="type">GstGLContext</span></a> *context</code></em>,
+                                <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstAllocator.html#GstAllocationParams"><span class="type">GstAllocationParams</span></a> *alloc_params</code></em>,
+                                <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base-libs/html/gst-plugins-base-libs-gstvideo.html#GstVideoInfo"><span class="type">GstVideoInfo</span></a> *v_info</code></em>,
+                                <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> plane</code></em>,
+                                <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base-libs/html/gst-plugins-base-libs-gstvideo.html#GstVideoAlignment"><span class="type">GstVideoAlignment</span></a> *valign</code></em>,
+                                <em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-OpenGL-Formats.html#GstGLTextureTarget" title="enum GstGLTextureTarget"><span class="type">GstGLTextureTarget</span></a> target</code></em>,
+                                <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> wrapped_data</code></em>,
+                                <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> gl_handle</code></em>,
+                                <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data</code></em>,
+                                <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Datasets.html#GDestroyNotify"><span class="type">GDestroyNotify</span></a> notify</code></em>);</pre>
+<p>Intended for subclass usage</p>
+<div class="refsect3">
+<a name="id-1.2.9.18.8.5.5"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>params</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gst-plugins-bad-libs-GstGLMemory.html#GstGLVideoAllocationParams" title="struct GstGLVideoAllocationParams"><span class="type">GstGLVideoAllocationParams</span></a> to initialize</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>struct_size</p></td>
+<td class="parameter_description"><p>the size of the struct in <em class="parameter"><code>params</code></em>
+</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>alloc_flags</p></td>
+<td class="parameter_description"><p>some allocation flags</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>copy</p></td>
+<td class="parameter_description"><p>a copy function</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>free</p></td>
+<td class="parameter_description"><p>a free function</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>context</p></td>
+<td class="parameter_description"><p>a <a class="link" href="GstGLContext.html" title="GstGLContext"><span class="type">GstGLContext</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>alloc_params</p></td>
+<td class="parameter_description"><p> the <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstAllocator.html#GstAllocationParams"><span class="type">GstAllocationParams</span></a> for <em class="parameter"><code>wrapped_data</code></em>
+. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="NULL is OK, both for passing and for returning."><span class="acronym">allow-none</span></acronym>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>v_info</p></td>
+<td class="parameter_description"><p>the <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base-libs/html/gst-plugins-base-libs-gstvideo.html#GstVideoInfo"><span class="type">GstVideoInfo</span></a> for <em class="parameter"><code>wrapped_data</code></em>
+</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>plane</p></td>
+<td class="parameter_description"><p>the video plane <em class="parameter"><code>wrapped_data</code></em>
+represents</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>valign</p></td>
+<td class="parameter_description"><p> any <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base-libs/html/gst-plugins-base-libs-gstvideo.html#GstVideoAlignment"><span class="type">GstVideoAlignment</span></a> applied to symem mappings of <em class="parameter"><code>wrapped_data</code></em>
+. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="NULL is OK, both for passing and for returning."><span class="acronym">allow-none</span></acronym>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>target</p></td>
+<td class="parameter_description"><p>the <a class="link" href="gst-plugins-bad-libs-OpenGL-Formats.html#GstGLTextureTarget" title="enum GstGLTextureTarget"><span class="type">GstGLTextureTarget</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>wrapped_data</p></td>
+<td class="parameter_description"><p> the optional data pointer to wrap. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="NULL is OK, both for passing and for returning."><span class="acronym">allow-none</span></acronym>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>gl_handle</p></td>
+<td class="parameter_description"><p>the optional OpenGL handle to wrap or 0</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>user_data</p></td>
+<td class="parameter_description"><p> user data to call <em class="parameter"><code>notify</code></em>
+with. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="NULL is OK, both for passing and for returning."><span class="acronym">allow-none</span></acronym>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>notify</p></td>
+<td class="parameter_description"><p> a <a href="https://developer.gnome.org/glib/unstable/glib-Datasets.html#GDestroyNotify"><span class="type">GDestroyNotify</span></a>. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="NULL is OK, both for passing and for returning."><span class="acronym">allow-none</span></acronym>]</span></td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="id-1.2.9.18.8.5.6"></a><h4>Returns</h4>
+<p> initializes <em class="parameter"><code>params</code></em>
+with the parameters specified</p>
+</div>
+<p class="since">Since: 1.8</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-gl-video-allocation-params-new"></a><h3>gst_gl_video_allocation_params_new ()</h3>
+<pre class="programlisting"><a class="link" href="gst-plugins-bad-libs-GstGLMemory.html#GstGLVideoAllocationParams" title="struct GstGLVideoAllocationParams"><span class="returnvalue">GstGLVideoAllocationParams</span></a> *
+gst_gl_video_allocation_params_new (<em class="parameter"><code><a class="link" href="GstGLContext.html" title="GstGLContext"><span class="type">GstGLContext</span></a> *context</code></em>,
+                                    <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstAllocator.html#GstAllocationParams"><span class="type">GstAllocationParams</span></a> *alloc_params</code></em>,
+                                    <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base-libs/html/gst-plugins-base-libs-gstvideo.html#GstVideoInfo"><span class="type">GstVideoInfo</span></a> *v_info</code></em>,
+                                    <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> plane</code></em>,
+                                    <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base-libs/html/gst-plugins-base-libs-gstvideo.html#GstVideoAlignment"><span class="type">GstVideoAlignment</span></a> *valign</code></em>,
+                                    <em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-OpenGL-Formats.html#GstGLTextureTarget" title="enum GstGLTextureTarget"><span class="type">GstGLTextureTarget</span></a> target</code></em>);</pre>
+<div class="refsect3">
+<a name="id-1.2.9.18.8.6.4"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>context</p></td>
+<td class="parameter_description"><p>a <a class="link" href="GstGLContext.html" title="GstGLContext"><span class="type">GstGLContext</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>alloc_params</p></td>
+<td class="parameter_description"><p> the <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstAllocator.html#GstAllocationParams"><span class="type">GstAllocationParams</span></a> for <em class="parameter"><code>wrapped_data</code></em>
+. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="NULL is OK, both for passing and for returning."><span class="acronym">allow-none</span></acronym>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>v_info</p></td>
+<td class="parameter_description"><p>the <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base-libs/html/gst-plugins-base-libs-gstvideo.html#GstVideoInfo"><span class="type">GstVideoInfo</span></a> for <em class="parameter"><code>wrapped_data</code></em>
+</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>plane</p></td>
+<td class="parameter_description"><p>the video plane <em class="parameter"><code>wrapped_data</code></em>
+represents</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>valign</p></td>
+<td class="parameter_description"><p> any <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base-libs/html/gst-plugins-base-libs-gstvideo.html#GstVideoAlignment"><span class="type">GstVideoAlignment</span></a> applied to symem mappings of <em class="parameter"><code>wrapped_data</code></em>
+. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="NULL is OK, both for passing and for returning."><span class="acronym">allow-none</span></acronym>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>target</p></td>
+<td class="parameter_description"><p>the <a class="link" href="gst-plugins-bad-libs-OpenGL-Formats.html#GstGLTextureTarget" title="enum GstGLTextureTarget"><span class="type">GstGLTextureTarget</span></a> for <em class="parameter"><code>wrapped_data</code></em>
+</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="id-1.2.9.18.8.6.5"></a><h4>Returns</h4>
+<p> a new <a class="link" href="gst-plugins-bad-libs-GstGLMemory.html#GstGLVideoAllocationParams" title="struct GstGLVideoAllocationParams"><span class="type">GstGLVideoAllocationParams</span></a> for allocating <a class="link" href="gst-plugins-bad-libs-GstGLMemory.html#GstGLMemory" title="GstGLMemory"><span class="type">GstGLMemory</span></a>'s</p>
+</div>
+<p class="since">Since: 1.8</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-gl-video-allocation-params-new-wrapped-data"></a><h3>gst_gl_video_allocation_params_new_wrapped_data ()</h3>
+<pre class="programlisting"><a class="link" href="gst-plugins-bad-libs-GstGLMemory.html#GstGLVideoAllocationParams" title="struct GstGLVideoAllocationParams"><span class="returnvalue">GstGLVideoAllocationParams</span></a> *
+gst_gl_video_allocation_params_new_wrapped_data
+                               (<em class="parameter"><code><a class="link" href="GstGLContext.html" title="GstGLContext"><span class="type">GstGLContext</span></a> *context</code></em>,
+                                <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstAllocator.html#GstAllocationParams"><span class="type">GstAllocationParams</span></a> *alloc_params</code></em>,
+                                <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base-libs/html/gst-plugins-base-libs-gstvideo.html#GstVideoInfo"><span class="type">GstVideoInfo</span></a> *v_info</code></em>,
+                                <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> plane</code></em>,
+                                <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base-libs/html/gst-plugins-base-libs-gstvideo.html#GstVideoAlignment"><span class="type">GstVideoAlignment</span></a> *valign</code></em>,
+                                <em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-OpenGL-Formats.html#GstGLTextureTarget" title="enum GstGLTextureTarget"><span class="type">GstGLTextureTarget</span></a> target</code></em>,
+                                <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> wrapped_data</code></em>,
+                                <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data</code></em>,
+                                <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Datasets.html#GDestroyNotify"><span class="type">GDestroyNotify</span></a> notify</code></em>);</pre>
+<div class="refsect3">
+<a name="id-1.2.9.18.8.7.4"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>context</p></td>
+<td class="parameter_description"><p>a <a class="link" href="GstGLContext.html" title="GstGLContext"><span class="type">GstGLContext</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>alloc_params</p></td>
+<td class="parameter_description"><p> the <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstAllocator.html#GstAllocationParams"><span class="type">GstAllocationParams</span></a> for <em class="parameter"><code>wrapped_data</code></em>
+. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="NULL is OK, both for passing and for returning."><span class="acronym">allow-none</span></acronym>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>v_info</p></td>
+<td class="parameter_description"><p>the <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base-libs/html/gst-plugins-base-libs-gstvideo.html#GstVideoInfo"><span class="type">GstVideoInfo</span></a> for <em class="parameter"><code>wrapped_data</code></em>
+</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>plane</p></td>
+<td class="parameter_description"><p>the video plane <em class="parameter"><code>wrapped_data</code></em>
+represents</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>valign</p></td>
+<td class="parameter_description"><p> any <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base-libs/html/gst-plugins-base-libs-gstvideo.html#GstVideoAlignment"><span class="type">GstVideoAlignment</span></a> applied to symem mappings of <em class="parameter"><code>wrapped_data</code></em>
+. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="NULL is OK, both for passing and for returning."><span class="acronym">allow-none</span></acronym>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>target</p></td>
+<td class="parameter_description"><p>the <a class="link" href="gst-plugins-bad-libs-OpenGL-Formats.html#GstGLTextureTarget" title="enum GstGLTextureTarget"><span class="type">GstGLTextureTarget</span></a> for <em class="parameter"><code>wrapped_data</code></em>
+</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>wrapped_data</p></td>
+<td class="parameter_description"><p>the data pointer to wrap</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>user_data</p></td>
+<td class="parameter_description"><p> user data to call <em class="parameter"><code>notify</code></em>
+with. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="NULL is OK, both for passing and for returning."><span class="acronym">allow-none</span></acronym>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>notify</p></td>
+<td class="parameter_description"><p> a <a href="https://developer.gnome.org/glib/unstable/glib-Datasets.html#GDestroyNotify"><span class="type">GDestroyNotify</span></a>. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="NULL is OK, both for passing and for returning."><span class="acronym">allow-none</span></acronym>]</span></td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="id-1.2.9.18.8.7.5"></a><h4>Returns</h4>
+<p> a new <a class="link" href="gst-plugins-bad-libs-GstGLMemory.html#GstGLVideoAllocationParams" title="struct GstGLVideoAllocationParams"><span class="type">GstGLVideoAllocationParams</span></a> for wrapping <em class="parameter"><code>wrapped_data</code></em>
+</p>
+</div>
+<p class="since">Since: 1.8</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-gl-video-allocation-params-new-wrapped-texture"></a><h3>gst_gl_video_allocation_params_new_wrapped_texture ()</h3>
+<pre class="programlisting"><a class="link" href="gst-plugins-bad-libs-GstGLMemory.html#GstGLVideoAllocationParams" title="struct GstGLVideoAllocationParams"><span class="returnvalue">GstGLVideoAllocationParams</span></a> *
+gst_gl_video_allocation_params_new_wrapped_texture
+                               (<em class="parameter"><code><a class="link" href="GstGLContext.html" title="GstGLContext"><span class="type">GstGLContext</span></a> *context</code></em>,
+                                <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstAllocator.html#GstAllocationParams"><span class="type">GstAllocationParams</span></a> *alloc_params</code></em>,
+                                <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base-libs/html/gst-plugins-base-libs-gstvideo.html#GstVideoInfo"><span class="type">GstVideoInfo</span></a> *v_info</code></em>,
+                                <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> plane</code></em>,
+                                <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base-libs/html/gst-plugins-base-libs-gstvideo.html#GstVideoAlignment"><span class="type">GstVideoAlignment</span></a> *valign</code></em>,
+                                <em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-OpenGL-Formats.html#GstGLTextureTarget" title="enum GstGLTextureTarget"><span class="type">GstGLTextureTarget</span></a> target</code></em>,
+                                <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> tex_id</code></em>,
+                                <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data</code></em>,
+                                <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Datasets.html#GDestroyNotify"><span class="type">GDestroyNotify</span></a> notify</code></em>);</pre>
+<div class="refsect3">
+<a name="id-1.2.9.18.8.8.4"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>context</p></td>
+<td class="parameter_description"><p>a <a class="link" href="GstGLContext.html" title="GstGLContext"><span class="type">GstGLContext</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>alloc_params</p></td>
+<td class="parameter_description"><p> the <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstAllocator.html#GstAllocationParams"><span class="type">GstAllocationParams</span></a> for <em class="parameter"><code>tex_id</code></em>
+. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="NULL is OK, both for passing and for returning."><span class="acronym">allow-none</span></acronym>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>v_info</p></td>
+<td class="parameter_description"><p>the <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base-libs/html/gst-plugins-base-libs-gstvideo.html#GstVideoInfo"><span class="type">GstVideoInfo</span></a> for <em class="parameter"><code>tex_id</code></em>
+</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>plane</p></td>
+<td class="parameter_description"><p>the video plane <em class="parameter"><code>tex_id</code></em>
+represents</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>valign</p></td>
+<td class="parameter_description"><p> any <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base-libs/html/gst-plugins-base-libs-gstvideo.html#GstVideoAlignment"><span class="type">GstVideoAlignment</span></a> applied to symem mappings of <em class="parameter"><code>tex_id</code></em>
+. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="NULL is OK, both for passing and for returning."><span class="acronym">allow-none</span></acronym>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>target</p></td>
+<td class="parameter_description"><p>the <a class="link" href="gst-plugins-bad-libs-OpenGL-Formats.html#GstGLTextureTarget" title="enum GstGLTextureTarget"><span class="type">GstGLTextureTarget</span></a> for <em class="parameter"><code>tex_id</code></em>
+</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>tex_id</p></td>
+<td class="parameter_description"><p>the GL texture to wrap</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>user_data</p></td>
+<td class="parameter_description"><p> user data to call <em class="parameter"><code>notify</code></em>
+with. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="NULL is OK, both for passing and for returning."><span class="acronym">allow-none</span></acronym>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>notify</p></td>
+<td class="parameter_description"><p> a <a href="https://developer.gnome.org/glib/unstable/glib-Datasets.html#GDestroyNotify"><span class="type">GDestroyNotify</span></a>. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="NULL is OK, both for passing and for returning."><span class="acronym">allow-none</span></acronym>]</span></td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="id-1.2.9.18.8.8.5"></a><h4>Returns</h4>
+<p> a new <a class="link" href="gst-plugins-bad-libs-GstGLMemory.html#GstGLVideoAllocationParams" title="struct GstGLVideoAllocationParams"><span class="type">GstGLVideoAllocationParams</span></a> for wrapping <em class="parameter"><code>tex_id</code></em>
+</p>
+</div>
+<p class="since">Since: 1.8</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-gl-memory-allocator-get-default"></a><h3>gst_gl_memory_allocator_get_default ()</h3>
+<pre class="programlisting"><a class="link" href="gst-plugins-bad-libs-GstGLMemory.html#GstGLMemoryAllocator"><span class="returnvalue">GstGLMemoryAllocator</span></a> *
+gst_gl_memory_allocator_get_default (<em class="parameter"><code><a class="link" href="GstGLContext.html" title="GstGLContext"><span class="type">GstGLContext</span></a> *context</code></em>);</pre>
+<div class="refsect3">
+<a name="id-1.2.9.18.8.9.4"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>context</p></td>
+<td class="parameter_description"><p>a <a class="link" href="GstGLContext.html" title="GstGLContext"><span class="type">GstGLContext</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="id-1.2.9.18.8.9.5"></a><h4>Returns</h4>
+<p> the default <a class="link" href="gst-plugins-bad-libs-GstGLMemory.html#GstGLMemoryAllocator"><span class="type">GstGLMemoryAllocator</span></a> supported by <em class="parameter"><code>context</code></em>
+</p>
+</div>
+<p class="since">Since: 1.8</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-gl-memory-init-once"></a><h3>gst_gl_memory_init_once ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+gst_gl_memory_init_once (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
+<p>Initializes the GL Base Texture allocator. It is safe to call this function
+multiple times.  This must be called before any other GstGLMemory operation.</p>
+<p class="since">Since: 1.4</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-gl-memory-init"></a><h3>gst_gl_memory_init ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+gst_gl_memory_init (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-GstGLMemory.html#GstGLMemory" title="GstGLMemory"><span class="type">GstGLMemory</span></a> *mem</code></em>,
+                    <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstAllocator.html"><span class="type">GstAllocator</span></a> *allocator</code></em>,
+                    <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstMemory.html"><span class="type">GstMemory</span></a> *parent</code></em>,
+                    <em class="parameter"><code><a class="link" href="GstGLContext.html" title="GstGLContext"><span class="type">GstGLContext</span></a> *context</code></em>,
+                    <em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-OpenGL-Formats.html#GstGLTextureTarget" title="enum GstGLTextureTarget"><span class="type">GstGLTextureTarget</span></a> target</code></em>,
+                    <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstAllocator.html#GstAllocationParams"><span class="type">GstAllocationParams</span></a> *params</code></em>,
+                    <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base-libs/html/gst-plugins-base-libs-gstvideo.html#GstVideoInfo"><span class="type">GstVideoInfo</span></a> *info</code></em>,
+                    <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> plane</code></em>,
+                    <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base-libs/html/gst-plugins-base-libs-gstvideo.html#GstVideoAlignment"><span class="type">GstVideoAlignment</span></a> *valign</code></em>,
+                    <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data</code></em>,
+                    <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Datasets.html#GDestroyNotify"><span class="type">GDestroyNotify</span></a> notify</code></em>);</pre>
+<p>Initializes <em class="parameter"><code>mem</code></em>
+ with the required parameters.  <em class="parameter"><code>info</code></em>
+ is assumed to have
+already have been modified with <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base-libs/html/gst-plugins-base-libs-gstvideo.html#gst-video-info-align"><code class="function">gst_video_info_align()</code></a>.</p>
+<div class="refsect3">
+<a name="id-1.2.9.18.8.11.5"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>mem</p></td>
+<td class="parameter_description"><p>the <a class="link" href="gst-plugins-bad-libs-gstglbasememory.html#GstGLBaseMemory" title="GstGLBaseMemory"><span class="type">GstGLBaseMemory</span></a> to initialize</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>allocator</p></td>
+<td class="parameter_description"><p>the <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstAllocator.html"><span class="type">GstAllocator</span></a> to initialize with</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>parent</p></td>
+<td class="parameter_description"><p> the parent <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstMemory.html"><span class="type">GstMemory</span></a> to initialize with. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="NULL is OK, both for passing and for returning."><span class="acronym">allow-none</span></acronym>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>context</p></td>
+<td class="parameter_description"><p>the <a class="link" href="GstGLContext.html" title="GstGLContext"><span class="type">GstGLContext</span></a> to initialize with</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>target</p></td>
+<td class="parameter_description"><p>the <a class="link" href="gst-plugins-bad-libs-OpenGL-Formats.html#GstGLTextureTarget" title="enum GstGLTextureTarget"><span class="type">GstGLTextureTarget</span></a> for this <a class="link" href="gst-plugins-bad-libs-GstGLMemory.html#GstGLMemory" title="GstGLMemory"><span class="type">GstGLMemory</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>params</p></td>
+<td class="parameter_description"><p> the <em class="parameter"><code>GstAllocationParams</code></em>
+to initialize with. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="NULL is OK, both for passing and for returning."><span class="acronym">allow-none</span></acronym>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>info</p></td>
+<td class="parameter_description"><p>the <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base-libs/html/gst-plugins-base-libs-gstvideo.html#GstVideoInfo"><span class="type">GstVideoInfo</span></a> for this <a class="link" href="gst-plugins-bad-libs-GstGLMemory.html#GstGLMemory" title="GstGLMemory"><span class="type">GstGLMemory</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>plane</p></td>
+<td class="parameter_description"><p>the plane number (starting from 0) for this <a class="link" href="gst-plugins-bad-libs-GstGLMemory.html#GstGLMemory" title="GstGLMemory"><span class="type">GstGLMemory</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>valign</p></td>
+<td class="parameter_description"><p> optional <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base-libs/html/gst-plugins-base-libs-gstvideo.html#GstVideoAlignment"><span class="type">GstVideoAlignment</span></a> parameters. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="NULL is OK, both for passing and for returning."><span class="acronym">allow-none</span></acronym>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>notify</p></td>
+<td class="parameter_description"><p> a <a href="https://developer.gnome.org/glib/unstable/glib-Datasets.html#GDestroyNotify"><span class="type">GDestroyNotify</span></a>. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="NULL is OK, both for passing and for returning."><span class="acronym">allow-none</span></acronym>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>user_data</p></td>
+<td class="parameter_description"><p> user data to call <em class="parameter"><code>notify</code></em>
+with. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="NULL is OK, both for passing and for returning."><span class="acronym">allow-none</span></acronym>]</span></td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<p class="since">Since: 1.8</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-is-gl-memory"></a><h3>gst_is_gl_memory ()</h3>
+<pre class="programlisting"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
+gst_is_gl_memory (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstMemory.html"><span class="type">GstMemory</span></a> *mem</code></em>);</pre>
+<div class="refsect3">
+<a name="id-1.2.9.18.8.12.4"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>mem</p></td>
+<td class="parameter_description"><p>a <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstMemory.html"><span class="type">GstMemory</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="id-1.2.9.18.8.12.5"></a><h4>Returns</h4>
+<p> whether the memory at <em class="parameter"><code>mem</code></em>
+is a <a class="link" href="gst-plugins-bad-libs-GstGLMemory.html#GstGLMemory" title="GstGLMemory"><span class="type">GstGLMemory</span></a></p>
+</div>
+<p class="since">Since: 1.4</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-gl-memory-copy-into"></a><h3>gst_gl_memory_copy_into ()</h3>
+<pre class="programlisting"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
+gst_gl_memory_copy_into (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-GstGLMemory.html#GstGLMemory" title="GstGLMemory"><span class="type">GstGLMemory</span></a> *gl_mem</code></em>,
+                         <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> tex_id</code></em>,
+                         <em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-OpenGL-Formats.html#GstGLTextureTarget" title="enum GstGLTextureTarget"><span class="type">GstGLTextureTarget</span></a> target</code></em>,
+                         <em class="parameter"><code><span class="type">GstVideoGLTextureType</span> tex_type</code></em>,
+                         <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a> width</code></em>,
+                         <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a> height</code></em>);</pre>
+<p>Copies <em class="parameter"><code>gl_mem</code></em>
+ into the texture specfified by <em class="parameter"><code>tex_id</code></em>
+.  The format of <em class="parameter"><code>tex_id</code></em>
+
+is specified by <em class="parameter"><code>tex_type</code></em>
+, <em class="parameter"><code>width</code></em>
+ and <em class="parameter"><code>height</code></em>
+.</p>
+<div class="refsect3">
+<a name="id-1.2.9.18.8.13.5"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>gl_mem</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gst-plugins-bad-libs-GstGLMemory.html#GstGLMemory" title="GstGLMemory"><span class="type">GstGLMemory</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>tex_id</p></td>
+<td class="parameter_description"><p>OpenGL texture id</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>target</p></td>
+<td class="parameter_description"><p>the <a class="link" href="gst-plugins-bad-libs-OpenGL-Formats.html#GstGLTextureTarget" title="enum GstGLTextureTarget"><span class="type">GstGLTextureTarget</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>tex_type</p></td>
+<td class="parameter_description"><p>the <span class="type">GstVideoGLTextureType</span></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>width</p></td>
+<td class="parameter_description"><p>width of <em class="parameter"><code>tex_id</code></em>
+</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>height</p></td>
+<td class="parameter_description"><p>height of <em class="parameter"><code>tex_id</code></em>
+</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="id-1.2.9.18.8.13.6"></a><h4>Returns</h4>
+<p> Whether the copy suceeded</p>
+</div>
+<p class="since">Since: 1.8</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-gl-memory-copy-teximage"></a><h3>gst_gl_memory_copy_teximage ()</h3>
+<pre class="programlisting"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
+gst_gl_memory_copy_teximage (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-GstGLMemory.html#GstGLMemory" title="GstGLMemory"><span class="type">GstGLMemory</span></a> *src</code></em>,
+                             <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> tex_id</code></em>,
+                             <em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-OpenGL-Formats.html#GstGLTextureTarget" title="enum GstGLTextureTarget"><span class="type">GstGLTextureTarget</span></a> out_target</code></em>,
+                             <em class="parameter"><code><span class="type">GstVideoGLTextureType</span> out_tex_type</code></em>,
+                             <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a> width</code></em>,
+                             <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a> height</code></em>);</pre>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-gl-memory-read-pixels"></a><h3>gst_gl_memory_read_pixels ()</h3>
+<pre class="programlisting"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
+gst_gl_memory_read_pixels (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-GstGLMemory.html#GstGLMemory" title="GstGLMemory"><span class="type">GstGLMemory</span></a> *gl_mem</code></em>,
+                           <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> read_pointer</code></em>);</pre>
+<p>Reads the texture in <a class="link" href="gst-plugins-bad-libs-GstGLMemory.html#GstGLMemory" title="GstGLMemory"><span class="type">GstGLMemory</span></a> into <em class="parameter"><code>read_pointer</code></em>
+ if no buffer is bound
+to <code class="literal">GL_PIXEL_PACK_BUFFER</code>.  Otherwise <em class="parameter"><code>read_pointer</code></em>
+ is the byte offset into
+the currently bound <code class="literal">GL_PIXEL_PACK_BUFFER</code> buffer to store the result of
+glReadPixels.  See the OpenGL specification for glReadPixels for more
+details.</p>
+<div class="refsect3">
+<a name="id-1.2.9.18.8.15.5"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>gl_mem</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gst-plugins-bad-libs-GstGLMemory.html#GstGLMemory" title="GstGLMemory"><span class="type">GstGLMemory</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>read_pointer</p></td>
+<td class="parameter_description"><p>the data pointer to pass to glReadPixels</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="id-1.2.9.18.8.15.6"></a><h4>Returns</h4>
+<p> whether theread operation succeeded</p>
+</div>
+<p class="since">Since: 1.8</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-gl-memory-texsubimage"></a><h3>gst_gl_memory_texsubimage ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+gst_gl_memory_texsubimage (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-GstGLMemory.html#GstGLMemory" title="GstGLMemory"><span class="type">GstGLMemory</span></a> *gl_mem</code></em>,
+                           <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> read_pointer</code></em>);</pre>
+<p>See <a class="link" href="gst-plugins-bad-libs-GstGLMemory.html#gst-gl-memory-read-pixels" title="gst_gl_memory_read_pixels ()"><code class="function">gst_gl_memory_read_pixels()</code></a> for what <em class="parameter"><code>read_pointer</code></em>
+ signifies.</p>
+<div class="refsect3">
+<a name="id-1.2.9.18.8.16.5"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>gl_mem</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gst-plugins-bad-libs-GstGLMemory.html#GstGLMemory" title="GstGLMemory"><span class="type">GstGLMemory</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>read_pointer</p></td>
+<td class="parameter_description"><p>the data pointer to pass to glTexSubImage</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<p class="since">Since: 1.8</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-gl-memory-get-texture-height"></a><h3>gst_gl_memory_get_texture_height ()</h3>
+<pre class="programlisting"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gint"><span class="returnvalue">gint</span></a>
+gst_gl_memory_get_texture_height (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-GstGLMemory.html#GstGLMemory" title="GstGLMemory"><span class="type">GstGLMemory</span></a> *gl_mem</code></em>);</pre>
+<div class="refsect3">
+<a name="id-1.2.9.18.8.17.4"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>gl_mem</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gst-plugins-bad-libs-GstGLMemory.html#GstGLMemory" title="GstGLMemory"><span class="type">GstGLMemory</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="id-1.2.9.18.8.17.5"></a><h4>Returns</h4>
+<p> the texture height of <em class="parameter"><code>gl_mem</code></em>
+</p>
+</div>
+<p class="since">Since: 1.8</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-gl-memory-get-texture-id"></a><h3>gst_gl_memory_get_texture_id ()</h3>
+<pre class="programlisting"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#guint"><span class="returnvalue">guint</span></a>
+gst_gl_memory_get_texture_id (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-GstGLMemory.html#GstGLMemory" title="GstGLMemory"><span class="type">GstGLMemory</span></a> *gl_mem</code></em>);</pre>
+<div class="refsect3">
+<a name="id-1.2.9.18.8.18.4"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>gl_mem</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gst-plugins-bad-libs-GstGLMemory.html#GstGLMemory" title="GstGLMemory"><span class="type">GstGLMemory</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="id-1.2.9.18.8.18.5"></a><h4>Returns</h4>
+<p> the OpenGL texture handle of <em class="parameter"><code>gl_mem</code></em>
+</p>
+</div>
+<p class="since">Since: 1.8</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-gl-memory-get-texture-target"></a><h3>gst_gl_memory_get_texture_target ()</h3>
+<pre class="programlisting"><a class="link" href="gst-plugins-bad-libs-OpenGL-Formats.html#GstGLTextureTarget" title="enum GstGLTextureTarget"><span class="returnvalue">GstGLTextureTarget</span></a>
+gst_gl_memory_get_texture_target (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-GstGLMemory.html#GstGLMemory" title="GstGLMemory"><span class="type">GstGLMemory</span></a> *gl_mem</code></em>);</pre>
+<div class="refsect3">
+<a name="id-1.2.9.18.8.19.4"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>gl_mem</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gst-plugins-bad-libs-GstGLMemory.html#GstGLMemory" title="GstGLMemory"><span class="type">GstGLMemory</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="id-1.2.9.18.8.19.5"></a><h4>Returns</h4>
+<p> the <a class="link" href="gst-plugins-bad-libs-OpenGL-Formats.html#GstGLTextureTarget" title="enum GstGLTextureTarget"><span class="type">GstGLTextureTarget</span></a> of <em class="parameter"><code>gl_mem</code></em>
+</p>
+</div>
+<p class="since">Since: 1.8</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-gl-memory-get-texture-type"></a><h3>gst_gl_memory_get_texture_type ()</h3>
+<pre class="programlisting"><span class="returnvalue">GstVideoGLTextureType</span>
+gst_gl_memory_get_texture_type (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-GstGLMemory.html#GstGLMemory" title="GstGLMemory"><span class="type">GstGLMemory</span></a> *gl_mem</code></em>);</pre>
+<div class="refsect3">
+<a name="id-1.2.9.18.8.20.4"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>gl_mem</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gst-plugins-bad-libs-GstGLMemory.html#GstGLMemory" title="GstGLMemory"><span class="type">GstGLMemory</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="id-1.2.9.18.8.20.5"></a><h4>Returns</h4>
+<p> the <span class="type">GstVideoGLTextureType</span> of <em class="parameter"><code>gl_mem</code></em>
+</p>
+</div>
+<p class="since">Since: 1.8</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-gl-memory-get-texture-width"></a><h3>gst_gl_memory_get_texture_width ()</h3>
+<pre class="programlisting"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gint"><span class="returnvalue">gint</span></a>
+gst_gl_memory_get_texture_width (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-GstGLMemory.html#GstGLMemory" title="GstGLMemory"><span class="type">GstGLMemory</span></a> *gl_mem</code></em>);</pre>
+<div class="refsect3">
+<a name="id-1.2.9.18.8.21.4"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>gl_mem</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gst-plugins-bad-libs-GstGLMemory.html#GstGLMemory" title="GstGLMemory"><span class="type">GstGLMemory</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="id-1.2.9.18.8.21.5"></a><h4>Returns</h4>
+<p> the texture width of <em class="parameter"><code>gl_mem</code></em>
+</p>
+</div>
+<p class="since">Since: 1.8</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-gl-memory-setup-buffer"></a><h3>gst_gl_memory_setup_buffer ()</h3>
+<pre class="programlisting"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
+gst_gl_memory_setup_buffer (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-GstGLMemory.html#GstGLMemoryAllocator"><span class="type">GstGLMemoryAllocator</span></a> *allocator</code></em>,
+                            <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstBuffer.html"><span class="type">GstBuffer</span></a> *buffer</code></em>,
+                            <em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-GstGLMemory.html#GstGLVideoAllocationParams" title="struct GstGLVideoAllocationParams"><span class="type">GstGLVideoAllocationParams</span></a> *params</code></em>);</pre>
+<div class="refsect3">
+<a name="id-1.2.9.18.8.22.4"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>allocator</p></td>
+<td class="parameter_description"><p>the <em class="parameter"><code>GstGLMemoryAllocator</code></em>
+to allocate from</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>buffer</p></td>
+<td class="parameter_description"><p>a <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstBuffer.html"><span class="type">GstBuffer</span></a> to setup</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>params</p></td>
+<td class="parameter_description"><p>the <a class="link" href="gst-plugins-bad-libs-GstGLMemory.html#GstGLVideoAllocationParams" title="struct GstGLVideoAllocationParams"><span class="type">GstGLVideoAllocationParams</span></a> to allocate with</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="id-1.2.9.18.8.22.5"></a><h4>Returns</h4>
+<p> whether the buffer was correctly setup</p>
+</div>
+<p class="since">Since: 1.8</p>
+</div>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-libs-GstGLMemory.other_details"></a><h2>Types and Values</h2>
+<div class="refsect2">
+<a name="GST-GL-MEMORY-VIDEO-FORMATS-STR:CAPS"></a><h3>GST_GL_MEMORY_VIDEO_FORMATS_STR</h3>
+<pre class="programlisting">#define             GST_GL_MEMORY_VIDEO_FORMATS_STR</pre>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstGLVideoAllocationParams"></a><h3>struct GstGLVideoAllocationParams</h3>
+<pre class="programlisting">struct GstGLVideoAllocationParams {
+  GstGLAllocationParams  parent;
+
+  GstVideoInfo          *v_info;
+  guint                  plane;
+  GstVideoAlignment     *valign;
+  GstGLTextureTarget     target;
+};
+</pre>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstGLMemoryAllocator-struct"></a><h3>GstGLMemoryAllocator</h3>
+<pre class="programlisting">typedef struct _GstGLMemoryAllocator GstGLMemoryAllocator;</pre>
+<p>Opaque <a class="link" href="gst-plugins-bad-libs-GstGLMemory.html#GstGLMemoryAllocator"><span class="type">GstGLMemoryAllocator</span></a> struct</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstGLMemoryAllocatorClass"></a><h3>GstGLMemoryAllocatorClass</h3>
+<pre class="programlisting">typedef struct {
+  GstGLBaseMemoryAllocatorClass             parent_class;
+
+  GstGLBaseMemoryAllocatorMapFunction       map;
+  GstGLBaseMemoryAllocatorCopyFunction      copy;
+  GstGLBaseMemoryAllocatorUnmapFunction     unmap;
+} GstGLMemoryAllocatorClass;
+</pre>
+<p>The <a class="link" href="gst-plugins-bad-libs-GstGLMemory.html#GstGLMemoryAllocatorClass" title="GstGLMemoryAllocatorClass"><span class="type">GstGLMemoryAllocatorClass</span></a> only contains private data</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstGLMemory"></a><h3>GstGLMemory</h3>
+<pre class="programlisting">typedef struct {
+  GstGLBaseMemory           mem;
+
+  guint                     tex_id;
+  GstGLTextureTarget        tex_target;
+  GstVideoGLTextureType     tex_type;
+  GstVideoInfo              info;
+  GstVideoAlignment         valign;
+  guint                     plane;
+  gfloat                    tex_scaling[2];
+} GstGLMemory;
+</pre>
+<p>Represents information about a GL texture</p>
+<div class="refsect3">
+<a name="id-1.2.9.18.9.6.5"></a><h4>Members</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="300px" class="struct_members_name">
+<col class="struct_members_description">
+<col width="200px" class="struct_members_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="struct_member_name"><p><a class="link" href="gst-plugins-bad-libs-gstglbasememory.html#GstGLBaseMemory" title="GstGLBaseMemory"><span class="type">GstGLBaseMemory</span></a> <em class="structfield"><code><a name="GstGLMemory.mem"></a>mem</code></em>;</p></td>
+<td class="struct_member_description"><p>the parent object</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> <em class="structfield"><code><a name="GstGLMemory.tex-id"></a>tex_id</code></em>;</p></td>
+<td class="struct_member_description"><p>the GL texture id for this memory</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a class="link" href="gst-plugins-bad-libs-OpenGL-Formats.html#GstGLTextureTarget" title="enum GstGLTextureTarget"><span class="type">GstGLTextureTarget</span></a> <em class="structfield"><code><a name="GstGLMemory.tex-target"></a>tex_target</code></em>;</p></td>
+<td class="struct_member_description"><p>the GL texture target for this memory</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><span class="type">GstVideoGLTextureType</span> <em class="structfield"><code><a name="GstGLMemory.tex-type"></a>tex_type</code></em>;</p></td>
+<td class="struct_member_description"><p>the texture type</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base-libs/html/gst-plugins-base-libs-gstvideo.html#GstVideoInfo"><span class="type">GstVideoInfo</span></a> <em class="structfield"><code><a name="GstGLMemory.info"></a>info</code></em>;</p></td>
+<td class="struct_member_description"><p>the texture's <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base-libs/html/gst-plugins-base-libs-gstvideo.html#GstVideoInfo"><span class="type">GstVideoInfo</span></a></p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base-libs/html/gst-plugins-base-libs-gstvideo.html#GstVideoAlignment"><span class="type">GstVideoAlignment</span></a> <em class="structfield"><code><a name="GstGLMemory.valign"></a>valign</code></em>;</p></td>
+<td class="struct_member_description"><p>data alignment for system memory mapping</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> <em class="structfield"><code><a name="GstGLMemory.plane"></a>plane</code></em>;</p></td>
+<td class="struct_member_description"><p>data plane in <em class="parameter"><code>info</code></em>
+</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gfloat"><span class="type">gfloat</span></a> <em class="structfield"><code><a name="GstGLMemory.tex-scaling"></a>tex_scaling</code></em>[2];</p></td>
+<td class="struct_member_description"><p>GL shader scaling parameters for <em class="parameter"><code>valign</code></em>
+and/or width/height</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GST-GL-MEMORY-ALLOCATOR-NAME:CAPS"></a><h3>GST_GL_MEMORY_ALLOCATOR_NAME</h3>
+<pre class="programlisting">#define GST_GL_MEMORY_ALLOCATOR_NAME   "GLMemory"
+</pre>
+<p>The name of the GL memory allocator</p>
+</div>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-libs-GstGLMemory.see-also"></a><h2>See Also</h2>
+<p><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstMemory.html"><span class="type">GstMemory</span></a>, <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstAllocator.html"><span class="type">GstAllocator</span></a>, <a class="link" href="GstGLBufferPool.html" title="GstGLBufferPool"><span class="type">GstGLBufferPool</span></a></p>
+</div>
+</div>
+<div class="footer">
+<hr>Generated by GTK-Doc V1.24</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/libs/html/gst-plugins-bad-libs-GstGLSL.html b/docs/libs/html/gst-plugins-bad-libs-GstGLSL.html
new file mode 100644
index 0000000..91fdeda
--- /dev/null
+++ b/docs/libs/html/gst-plugins-bad-libs-GstGLSL.html
@@ -0,0 +1,419 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>GstGLSL: GStreamer Bad Plugins 1.0 Library Reference Manual</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
+<link rel="home" href="index.html" title="GStreamer Bad Plugins 1.0 Library Reference Manual">
+<link rel="up" href="gl.html" title="OpenGL Helper Library">
+<link rel="prev" href="GstGLShader.html" title="GstGLShader">
+<link rel="next" href=".html" title="GstGLSLStage">
+<meta name="generator" content="GTK-Doc V1.24 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="5"><tr valign="middle">
+<td width="100%" align="left" class="shortcuts">
+<a href="#" class="shortcut">Top</a><span id="nav_description">  <span class="dim">|</span> 
+                  <a href="#gst-plugins-bad-libs-GstGLSL.description" class="shortcut">Description</a></span>
+</td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
+<td><a accesskey="u" href="gl.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
+<td><a accesskey="p" href="GstGLShader.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
+<td><a accesskey="n" href=".html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
+</tr></table>
+<div class="refentry">
+<a name="gst-plugins-bad-libs-GstGLSL"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="gst-plugins-bad-libs-GstGLSL.top_of_page"></a>GstGLSL</span></h2>
+<p>GstGLSL — helpers for dealing with OpenGL shaders</p>
+</td>
+<td class="gallery_image" valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsect1">
+<a name="gst-plugins-bad-libs-GstGLSL.functions"></a><h2>Functions</h2>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="functions_return">
+<col class="functions_name">
+</colgroup>
+<tbody>
+<tr>
+<td class="define_keyword">#define</td>
+<td class="function_name"><a class="link" href="gst-plugins-bad-libs-GstGLSL.html#GST-GLSL-ERROR:CAPS" title="GST_GLSL_ERROR">GST_GLSL_ERROR</a></td>
+</tr>
+<tr>
+<td class="function_type">
+<a href="https://developer.gnome.org/glib/unstable/glib-Quarks.html#GQuark"><span class="returnvalue">GQuark</span></a>
+</td>
+<td class="function_name">
+<a class="link" href="gst-plugins-bad-libs-GstGLSL.html#gst-glsl-error-quark" title="gst_glsl_error_quark ()">gst_glsl_error_quark</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a class="link" href="gst-plugins-bad-libs-GstGLSL.html#GstGLSLProfile" title="enum GstGLSLProfile"><span class="returnvalue">GstGLSLProfile</span></a>
+</td>
+<td class="function_name">
+<a class="link" href="gst-plugins-bad-libs-GstGLSL.html#gst-glsl-profile-from-string" title="gst_glsl_profile_from_string ()">gst_glsl_profile_from_string</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">const <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> *
+</td>
+<td class="function_name">
+<a class="link" href="gst-plugins-bad-libs-GstGLSL.html#gst-glsl-profile-to-string" title="gst_glsl_profile_to_string ()">gst_glsl_profile_to_string</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a class="link" href="gst-plugins-bad-libs-GstGLSL.html#GstGLSLVersion" title="enum GstGLSLVersion"><span class="returnvalue">GstGLSLVersion</span></a>
+</td>
+<td class="function_name">
+<a class="link" href="gst-plugins-bad-libs-GstGLSL.html#gst-glsl-version-from-string" title="gst_glsl_version_from_string ()">gst_glsl_version_from_string</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">const <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> *
+</td>
+<td class="function_name">
+<a class="link" href="gst-plugins-bad-libs-GstGLSL.html#gst-glsl-version-to-string" title="gst_glsl_version_to_string ()">gst_glsl_version_to_string</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
+</td>
+<td class="function_name">
+<a class="link" href="gst-plugins-bad-libs-GstGLSL.html#gst-glsl-version-profile-from-string" title="gst_glsl_version_profile_from_string ()">gst_glsl_version_profile_from_string</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> *
+</td>
+<td class="function_name">
+<a class="link" href="gst-plugins-bad-libs-GstGLSL.html#gst-glsl-version-profile-to-string" title="gst_glsl_version_profile_to_string ()">gst_glsl_version_profile_to_string</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
+</td>
+<td class="function_name">
+<a class="link" href="gst-plugins-bad-libs-GstGLSL.html#gst-glsl-string-get-version-profile" title="gst_glsl_string_get_version_profile ()">gst_glsl_string_get_version_profile</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
+</td>
+<td class="function_name">
+<a class="link" href="gst-plugins-bad-libs-GstGLSL.html#gst-gl-context-supports-glsl-profile-version" title="gst_gl_context_supports_glsl_profile_version ()">gst_gl_context_supports_glsl_profile_version</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a class="link" href="gst-plugins-bad-libs-GstGLSL.html#GstGLSLVersion" title="enum GstGLSLVersion"><span class="returnvalue">GstGLSLVersion</span></a>
+</td>
+<td class="function_name">
+<a class="link" href="gst-plugins-bad-libs-GstGLSL.html#gst-gl-version-to-glsl-version" title="gst_gl_version_to_glsl_version ()">gst_gl_version_to_glsl_version</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-libs-GstGLSL.other"></a><h2>Types and Values</h2>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="name">
+<col class="description">
+</colgroup>
+<tbody>
+<tr>
+<td class="datatype_keyword">enum</td>
+<td class="function_name"><a class="link" href="gst-plugins-bad-libs-GstGLSL.html#GstGLSLError" title="enum GstGLSLError">GstGLSLError</a></td>
+</tr>
+<tr>
+<td class="datatype_keyword">enum</td>
+<td class="function_name"><a class="link" href="gst-plugins-bad-libs-GstGLSL.html#GstGLSLProfile" title="enum GstGLSLProfile">GstGLSLProfile</a></td>
+</tr>
+<tr>
+<td class="datatype_keyword">enum</td>
+<td class="function_name"><a class="link" href="gst-plugins-bad-libs-GstGLSL.html#GstGLSLVersion" title="enum GstGLSLVersion">GstGLSLVersion</a></td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-libs-GstGLSL.description"></a><h2>Description</h2>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-libs-GstGLSL.functions_details"></a><h2>Functions</h2>
+<div class="refsect2">
+<a name="GST-GLSL-ERROR:CAPS"></a><h3>GST_GLSL_ERROR</h3>
+<pre class="programlisting">#define GST_GLSL_ERROR (gst_glsl_error_quark ())
+</pre>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-glsl-error-quark"></a><h3>gst_glsl_error_quark ()</h3>
+<pre class="programlisting"><a href="https://developer.gnome.org/glib/unstable/glib-Quarks.html#GQuark"><span class="returnvalue">GQuark</span></a>
+gst_glsl_error_quark (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-glsl-profile-from-string"></a><h3>gst_glsl_profile_from_string ()</h3>
+<pre class="programlisting"><a class="link" href="gst-plugins-bad-libs-GstGLSL.html#GstGLSLProfile" title="enum GstGLSLProfile"><span class="returnvalue">GstGLSLProfile</span></a>
+gst_glsl_profile_from_string (<em class="parameter"><code>const <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *string</code></em>);</pre>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-glsl-profile-to-string"></a><h3>gst_glsl_profile_to_string ()</h3>
+<pre class="programlisting">const <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> *
+gst_glsl_profile_to_string (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-GstGLSL.html#GstGLSLProfile" title="enum GstGLSLProfile"><span class="type">GstGLSLProfile</span></a> profile</code></em>);</pre>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-glsl-version-from-string"></a><h3>gst_glsl_version_from_string ()</h3>
+<pre class="programlisting"><a class="link" href="gst-plugins-bad-libs-GstGLSL.html#GstGLSLVersion" title="enum GstGLSLVersion"><span class="returnvalue">GstGLSLVersion</span></a>
+gst_glsl_version_from_string (<em class="parameter"><code>const <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *string</code></em>);</pre>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-glsl-version-to-string"></a><h3>gst_glsl_version_to_string ()</h3>
+<pre class="programlisting">const <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> *
+gst_glsl_version_to_string (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-GstGLSL.html#GstGLSLVersion" title="enum GstGLSLVersion"><span class="type">GstGLSLVersion</span></a> version</code></em>);</pre>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-glsl-version-profile-from-string"></a><h3>gst_glsl_version_profile_from_string ()</h3>
+<pre class="programlisting"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
+gst_glsl_version_profile_from_string (<em class="parameter"><code>const <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *string</code></em>,
+                                      <em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-GstGLSL.html#GstGLSLVersion" title="enum GstGLSLVersion"><span class="type">GstGLSLVersion</span></a> *version</code></em>,
+                                      <em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-GstGLSL.html#GstGLSLProfile" title="enum GstGLSLProfile"><span class="type">GstGLSLProfile</span></a> *profile</code></em>);</pre>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-glsl-version-profile-to-string"></a><h3>gst_glsl_version_profile_to_string ()</h3>
+<pre class="programlisting"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> *
+gst_glsl_version_profile_to_string (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-GstGLSL.html#GstGLSLVersion" title="enum GstGLSLVersion"><span class="type">GstGLSLVersion</span></a> version</code></em>,
+                                    <em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-GstGLSL.html#GstGLSLProfile" title="enum GstGLSLProfile"><span class="type">GstGLSLProfile</span></a> profile</code></em>);</pre>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-glsl-string-get-version-profile"></a><h3>gst_glsl_string_get_version_profile ()</h3>
+<pre class="programlisting"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
+gst_glsl_string_get_version_profile (<em class="parameter"><code>const <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *s</code></em>,
+                                     <em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-GstGLSL.html#GstGLSLVersion" title="enum GstGLSLVersion"><span class="type">GstGLSLVersion</span></a> *version</code></em>,
+                                     <em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-GstGLSL.html#GstGLSLProfile" title="enum GstGLSLProfile"><span class="type">GstGLSLProfile</span></a> *profile</code></em>);</pre>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-gl-context-supports-glsl-profile-version"></a><h3>gst_gl_context_supports_glsl_profile_version ()</h3>
+<pre class="programlisting"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
+gst_gl_context_supports_glsl_profile_version
+                               (<em class="parameter"><code><a class="link" href="GstGLContext.html" title="GstGLContext"><span class="type">GstGLContext</span></a> *context</code></em>,
+                                <em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-GstGLSL.html#GstGLSLVersion" title="enum GstGLSLVersion"><span class="type">GstGLSLVersion</span></a> version</code></em>,
+                                <em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-GstGLSL.html#GstGLSLProfile" title="enum GstGLSLProfile"><span class="type">GstGLSLProfile</span></a> profile</code></em>);</pre>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-gl-version-to-glsl-version"></a><h3>gst_gl_version_to_glsl_version ()</h3>
+<pre class="programlisting"><a class="link" href="gst-plugins-bad-libs-GstGLSL.html#GstGLSLVersion" title="enum GstGLSLVersion"><span class="returnvalue">GstGLSLVersion</span></a>
+gst_gl_version_to_glsl_version (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-GstGLAPI.html#GstGLAPI" title="enum GstGLAPI"><span class="type">GstGLAPI</span></a> gl_api</code></em>,
+                                <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a> maj</code></em>,
+                                <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a> min</code></em>);</pre>
+</div>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-libs-GstGLSL.other_details"></a><h2>Types and Values</h2>
+<div class="refsect2">
+<a name="GstGLSLError"></a><h3>enum GstGLSLError</h3>
+<div class="refsect3">
+<a name="id-1.2.9.21.7.2.3"></a><h4>Members</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="300px" class="enum_members_name">
+<col class="enum_members_description">
+<col width="200px" class="enum_members_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="enum_member_name"><p><a name="GST-GLSL-ERROR-COMPILE:CAPS"></a>GST_GLSL_ERROR_COMPILE</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-GLSL-ERROR-LINK:CAPS"></a>GST_GLSL_ERROR_LINK</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-GLSL-ERROR-PROGRAM:CAPS"></a>GST_GLSL_ERROR_PROGRAM</p></td>
+<td> </td>
+<td> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstGLSLProfile"></a><h3>enum GstGLSLProfile</h3>
+<div class="refsect3">
+<a name="id-1.2.9.21.7.3.3"></a><h4>Members</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="300px" class="enum_members_name">
+<col class="enum_members_description">
+<col width="200px" class="enum_members_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="enum_member_name"><p><a name="GST-GLSL-PROFILE-NONE:CAPS"></a>GST_GLSL_PROFILE_NONE</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-GLSL-PROFILE-ES:CAPS"></a>GST_GLSL_PROFILE_ES</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-GLSL-PROFILE-CORE:CAPS"></a>GST_GLSL_PROFILE_CORE</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-GLSL-PROFILE-COMPATIBILITY:CAPS"></a>GST_GLSL_PROFILE_COMPATIBILITY</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-GLSL-PROFILE-ANY:CAPS"></a>GST_GLSL_PROFILE_ANY</p></td>
+<td> </td>
+<td> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstGLSLVersion"></a><h3>enum GstGLSLVersion</h3>
+<div class="refsect3">
+<a name="id-1.2.9.21.7.4.3"></a><h4>Members</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="300px" class="enum_members_name">
+<col class="enum_members_description">
+<col width="200px" class="enum_members_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="enum_member_name"><p><a name="GST-GLSL-VERSION-NONE:CAPS"></a>GST_GLSL_VERSION_NONE</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-GLSL-VERSION-100:CAPS"></a>GST_GLSL_VERSION_100</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-GLSL-VERSION-110:CAPS"></a>GST_GLSL_VERSION_110</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-GLSL-VERSION-120:CAPS"></a>GST_GLSL_VERSION_120</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-GLSL-VERSION-130:CAPS"></a>GST_GLSL_VERSION_130</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-GLSL-VERSION-140:CAPS"></a>GST_GLSL_VERSION_140</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-GLSL-VERSION-150:CAPS"></a>GST_GLSL_VERSION_150</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-GLSL-VERSION-300:CAPS"></a>GST_GLSL_VERSION_300</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-GLSL-VERSION-310:CAPS"></a>GST_GLSL_VERSION_310</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-GLSL-VERSION-320:CAPS"></a>GST_GLSL_VERSION_320</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-GLSL-VERSION-330:CAPS"></a>GST_GLSL_VERSION_330</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-GLSL-VERSION-400:CAPS"></a>GST_GLSL_VERSION_400</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-GLSL-VERSION-410:CAPS"></a>GST_GLSL_VERSION_410</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-GLSL-VERSION-420:CAPS"></a>GST_GLSL_VERSION_420</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-GLSL-VERSION-430:CAPS"></a>GST_GLSL_VERSION_430</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-GLSL-VERSION-440:CAPS"></a>GST_GLSL_VERSION_440</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-GLSL-VERSION-450:CAPS"></a>GST_GLSL_VERSION_450</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-GLSL-VERSION-ANY:CAPS"></a>GST_GLSL_VERSION_ANY</p></td>
+<td> </td>
+<td> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-libs-GstGLSL.see-also"></a><h2>See Also</h2>
+<p><a class="link" href=".html#GstGLSLStage"><span class="type">GstGLSLStage</span></a>, <a class="link" href="GstGLShader.html" title="GstGLShader"><span class="type">GstGLShader</span></a></p>
+</div>
+</div>
+<div class="footer">
+<hr>Generated by GTK-Doc V1.24</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/libs/html/gst-plugins-bad-libs-GstGLSyncMeta.html b/docs/libs/html/gst-plugins-bad-libs-GstGLSyncMeta.html
index ebe4c7c..6d586c1 100644
--- a/docs/libs/html/gst-plugins-bad-libs-GstGLSyncMeta.html
+++ b/docs/libs/html/gst-plugins-bad-libs-GstGLSyncMeta.html
@@ -3,10 +3,10 @@
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>GstGLSyncMeta: GStreamer Bad Plugins 1.0 Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
 <link rel="home" href="index.html" title="GStreamer Bad Plugins 1.0 Library Reference Manual">
 <link rel="up" href="gl.html" title="OpenGL Helper Library">
-<link rel="prev" href="gst-plugins-bad-libs-gstglshader.html" title="GstGLShader">
+<link rel="prev" href=".html" title="GstGLSLStage">
 <link rel="next" href="GstGLUpload.html" title="GstGLUpload">
 <meta name="generator" content="GTK-Doc V1.24 (XML mode)">
 <link rel="stylesheet" href="style.css" type="text/css">
@@ -19,7 +19,7 @@
 </td>
 <td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
 <td><a accesskey="u" href="gl.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
-<td><a accesskey="p" href="gst-plugins-bad-libs-gstglshader.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
+<td><a accesskey="p" href=".html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
 <td><a accesskey="n" href="GstGLUpload.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
 </tr></table>
 <div class="refentry">
@@ -33,7 +33,7 @@
 </tr></table></div>
 <div class="refsect1">
 <a name="gst-plugins-bad-libs-GstGLSyncMeta.functions"></a><h2>Functions</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="functions_return">
 <col class="functions_name">
@@ -48,6 +48,14 @@
 </td>
 </tr>
 <tr>
+<td class="function_type">
+<a class="link" href="gst-plugins-bad-libs-GstGLSyncMeta.html#GstGLSyncMeta" title="struct GstGLSyncMeta"><span class="returnvalue">GstGLSyncMeta</span></a> *
+</td>
+<td class="function_name">
+<a class="link" href="gst-plugins-bad-libs-GstGLSyncMeta.html#gst-buffer-add-gl-sync-meta-full" title="gst_buffer_add_gl_sync_meta_full ()">gst_buffer_add_gl_sync_meta_full</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
 <td class="define_keyword">#define</td>
 <td class="function_name">
 <a class="link" href="gst-plugins-bad-libs-GstGLSyncMeta.html#gst-buffer-get-gl-sync-meta" title="gst_buffer_get_gl_sync_meta()">gst_buffer_get_gl_sync_meta</a><span class="c_punctuation">()</span>
@@ -84,12 +92,20 @@
 <a class="link" href="gst-plugins-bad-libs-GstGLSyncMeta.html#gst-gl-sync-meta-wait" title="gst_gl_sync_meta_wait ()">gst_gl_sync_meta_wait</a> <span class="c_punctuation">()</span>
 </td>
 </tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
+<a class="link" href="gst-plugins-bad-libs-GstGLSyncMeta.html#gst-gl-sync-meta-wait-cpu" title="gst_gl_sync_meta_wait_cpu ()">gst_gl_sync_meta_wait_cpu</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
 </tbody>
 </table></div>
 </div>
 <div class="refsect1">
 <a name="gst-plugins-bad-libs-GstGLSyncMeta.other"></a><h2>Types and Values</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="name">
 <col class="description">
@@ -119,6 +135,14 @@
 </div>
 <hr>
 <div class="refsect2">
+<a name="gst-buffer-add-gl-sync-meta-full"></a><h3>gst_buffer_add_gl_sync_meta_full ()</h3>
+<pre class="programlisting"><a class="link" href="gst-plugins-bad-libs-GstGLSyncMeta.html#GstGLSyncMeta" title="struct GstGLSyncMeta"><span class="returnvalue">GstGLSyncMeta</span></a> *
+gst_buffer_add_gl_sync_meta_full (<em class="parameter"><code><a class="link" href="GstGLContext.html" title="GstGLContext"><span class="type">GstGLContext</span></a> *context</code></em>,
+                                  <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstBuffer.html"><span class="type">GstBuffer</span></a> *buffer</code></em>,
+                                  <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> data</code></em>);</pre>
+</div>
+<hr>
+<div class="refsect2">
 <a name="gst-buffer-get-gl-sync-meta"></a><h3>gst_buffer_get_gl_sync_meta()</h3>
 <pre class="programlisting">#define gst_buffer_get_gl_sync_meta(b) ((GstGLSyncMeta*)gst_buffer_get_meta((b),GST_GL_SYNC_META_API_TYPE))
 </pre>
@@ -149,12 +173,34 @@
 gst_gl_sync_meta_wait (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-GstGLSyncMeta.html#GstGLSyncMeta" title="struct GstGLSyncMeta"><span class="type">GstGLSyncMeta</span></a> *sync</code></em>,
                        <em class="parameter"><code><a class="link" href="GstGLContext.html" title="GstGLContext"><span class="type">GstGLContext</span></a> *context</code></em>);</pre>
 </div>
+<hr>
+<div class="refsect2">
+<a name="gst-gl-sync-meta-wait-cpu"></a><h3>gst_gl_sync_meta_wait_cpu ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+gst_gl_sync_meta_wait_cpu (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-GstGLSyncMeta.html#GstGLSyncMeta" title="struct GstGLSyncMeta"><span class="type">GstGLSyncMeta</span></a> *sync</code></em>,
+                           <em class="parameter"><code><a class="link" href="GstGLContext.html" title="GstGLContext"><span class="type">GstGLContext</span></a> *context</code></em>);</pre>
+</div>
 </div>
 <div class="refsect1">
 <a name="gst-plugins-bad-libs-GstGLSyncMeta.other_details"></a><h2>Types and Values</h2>
 <div class="refsect2">
 <a name="GstGLSyncMeta"></a><h3>struct GstGLSyncMeta</h3>
 <pre class="programlisting">struct GstGLSyncMeta {
+  GstMeta parent;
+
+  GstGLContext *context;
+
+  gpointer      data;
+
+  void (*set_sync) (GstGLSyncMeta * sync, GstGLContext * context);
+  void (*set_sync_gl) (GstGLSyncMeta * sync, GstGLContext * context);
+  void (*wait) (GstGLSyncMeta * sync, GstGLContext * context);
+  void (*wait_gl) (GstGLSyncMeta * sync, GstGLContext * context);
+  void (*wait_cpu) (GstGLSyncMeta * sync, GstGLContext * context);
+  void (*wait_cpu_gl) (GstGLSyncMeta * sync, GstGLContext * context);
+  void (*copy) (GstGLSyncMeta * src, GstBuffer * sbuffer, GstGLSyncMeta * dest, GstBuffer * dbuffer);
+  void (*free) (GstGLSyncMeta * sync, GstGLContext * context);
+  void (*free_gl) (GstGLSyncMeta * sync, GstGLContext * context);
 };
 </pre>
 </div>
diff --git a/docs/libs/html/gst-plugins-bad-libs-GstGLWindowAndroid.html b/docs/libs/html/gst-plugins-bad-libs-GstGLWindowAndroid.html
index 0a8592b..23e4a91 100644
--- a/docs/libs/html/gst-plugins-bad-libs-GstGLWindowAndroid.html
+++ b/docs/libs/html/gst-plugins-bad-libs-GstGLWindowAndroid.html
@@ -3,7 +3,7 @@
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>GstGLWindowAndroid: GStreamer Bad Plugins 1.0 Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
 <link rel="home" href="index.html" title="GStreamer Bad Plugins 1.0 Library Reference Manual">
 <link rel="up" href="gl.html" title="OpenGL Helper Library">
 <link rel="prev" href="GstGLWindow.html" title="GstGLWindow">
@@ -33,7 +33,7 @@
 </tr></table></div>
 <div class="refsect1">
 <a name="gst-plugins-bad-libs-GstGLWindowAndroid.functions"></a><h2>Functions</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="functions_return">
 <col class="functions_name">
@@ -50,7 +50,7 @@
 </div>
 <div class="refsect1">
 <a name="gst-plugins-bad-libs-GstGLWindowAndroid.other"></a><h2>Types and Values</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="name">
 <col class="description">
diff --git a/docs/libs/html/gst-plugins-bad-libs-GstGLWindowCocoa.html b/docs/libs/html/gst-plugins-bad-libs-GstGLWindowCocoa.html
index b1e2e83..1b94a61 100644
--- a/docs/libs/html/gst-plugins-bad-libs-GstGLWindowCocoa.html
+++ b/docs/libs/html/gst-plugins-bad-libs-GstGLWindowCocoa.html
@@ -3,7 +3,7 @@
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>GstGLWindowCocoa: GStreamer Bad Plugins 1.0 Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
 <link rel="home" href="index.html" title="GStreamer Bad Plugins 1.0 Library Reference Manual">
 <link rel="up" href="gl.html" title="OpenGL Helper Library">
 <link rel="prev" href="gst-plugins-bad-libs-GstGLWindowAndroid.html" title="GstGLWindowAndroid">
@@ -33,7 +33,7 @@
 </tr></table></div>
 <div class="refsect1">
 <a name="gst-plugins-bad-libs-GstGLWindowCocoa.functions"></a><h2>Functions</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="functions_return">
 <col class="functions_name">
@@ -60,7 +60,7 @@
 </div>
 <div class="refsect1">
 <a name="gst-plugins-bad-libs-GstGLWindowCocoa.other"></a><h2>Types and Values</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="name">
 <col class="description">
diff --git a/docs/libs/html/gst-plugins-bad-libs-GstGLWindowDispmanx.html b/docs/libs/html/gst-plugins-bad-libs-GstGLWindowDispmanx.html
index 1240617..57e0398 100644
--- a/docs/libs/html/gst-plugins-bad-libs-GstGLWindowDispmanx.html
+++ b/docs/libs/html/gst-plugins-bad-libs-GstGLWindowDispmanx.html
@@ -3,7 +3,7 @@
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>GstGLWindowDispmanx: GStreamer Bad Plugins 1.0 Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
 <link rel="home" href="index.html" title="GStreamer Bad Plugins 1.0 Library Reference Manual">
 <link rel="up" href="gl.html" title="OpenGL Helper Library">
 <link rel="prev" href="gst-plugins-bad-libs-GstGLWindowCocoa.html" title="GstGLWindowCocoa">
@@ -33,7 +33,7 @@
 </tr></table></div>
 <div class="refsect1">
 <a name="gst-plugins-bad-libs-GstGLWindowDispmanx.functions"></a><h2>Functions</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="functions_return">
 <col class="functions_name">
@@ -50,7 +50,7 @@
 </div>
 <div class="refsect1">
 <a name="gst-plugins-bad-libs-GstGLWindowDispmanx.other"></a><h2>Types and Values</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="name">
 <col class="description">
diff --git a/docs/libs/html/gst-plugins-bad-libs-GstGLWindowWayland.html b/docs/libs/html/gst-plugins-bad-libs-GstGLWindowWayland.html
index 7b0935c..3e8a549 100644
--- a/docs/libs/html/gst-plugins-bad-libs-GstGLWindowWayland.html
+++ b/docs/libs/html/gst-plugins-bad-libs-GstGLWindowWayland.html
@@ -3,7 +3,7 @@
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>GstGLWindowWayland: GStreamer Bad Plugins 1.0 Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
 <link rel="home" href="index.html" title="GStreamer Bad Plugins 1.0 Library Reference Manual">
 <link rel="up" href="gl.html" title="OpenGL Helper Library">
 <link rel="prev" href="gst-plugins-bad-libs-GstGLWindowDispmanx.html" title="GstGLWindowDispmanx">
@@ -33,7 +33,7 @@
 </tr></table></div>
 <div class="refsect1">
 <a name="gst-plugins-bad-libs-GstGLWindowWayland.functions"></a><h2>Functions</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="functions_return">
 <col class="functions_name">
@@ -50,7 +50,7 @@
 </div>
 <div class="refsect1">
 <a name="gst-plugins-bad-libs-GstGLWindowWayland.other"></a><h2>Types and Values</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="name">
 <col class="description">
diff --git a/docs/libs/html/gst-plugins-bad-libs-GstGLWindowWin32.html b/docs/libs/html/gst-plugins-bad-libs-GstGLWindowWin32.html
index ecaa029..bc5a710 100644
--- a/docs/libs/html/gst-plugins-bad-libs-GstGLWindowWin32.html
+++ b/docs/libs/html/gst-plugins-bad-libs-GstGLWindowWin32.html
@@ -3,7 +3,7 @@
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>GstGLWindowWin32: GStreamer Bad Plugins 1.0 Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
 <link rel="home" href="index.html" title="GStreamer Bad Plugins 1.0 Library Reference Manual">
 <link rel="up" href="gl.html" title="OpenGL Helper Library">
 <link rel="prev" href="gst-plugins-bad-libs-GstGLWindowWayland.html" title="GstGLWindowWayland">
@@ -33,7 +33,7 @@
 </tr></table></div>
 <div class="refsect1">
 <a name="gst-plugins-bad-libs-GstGLWindowWin32.functions"></a><h2>Functions</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="functions_return">
 <col class="functions_name">
@@ -60,7 +60,7 @@
 </div>
 <div class="refsect1">
 <a name="gst-plugins-bad-libs-GstGLWindowWin32.other"></a><h2>Types and Values</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="name">
 <col class="description">
diff --git a/docs/libs/html/gst-plugins-bad-libs-GstGLWindowX11.html b/docs/libs/html/gst-plugins-bad-libs-GstGLWindowX11.html
index cc12f80..14afbb4 100644
--- a/docs/libs/html/gst-plugins-bad-libs-GstGLWindowX11.html
+++ b/docs/libs/html/gst-plugins-bad-libs-GstGLWindowX11.html
@@ -3,11 +3,11 @@
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>GstGLWindowX11: GStreamer Bad Plugins 1.0 Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
 <link rel="home" href="index.html" title="GStreamer Bad Plugins 1.0 Library Reference Manual">
 <link rel="up" href="gl.html" title="OpenGL Helper Library">
 <link rel="prev" href="gst-plugins-bad-libs-GstGLWindowWin32.html" title="GstGLWindowWin32">
-<link rel="next" href="ch07.html" title="Interfaces">
+<link rel="next" href="gst-plugins-bad-libs-OpenGL-debugging.html" title="OpenGL debugging">
 <meta name="generator" content="GTK-Doc V1.24 (XML mode)">
 <link rel="stylesheet" href="style.css" type="text/css">
 </head>
@@ -20,7 +20,7 @@
 <td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
 <td><a accesskey="u" href="gl.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
 <td><a accesskey="p" href="gst-plugins-bad-libs-GstGLWindowWin32.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
-<td><a accesskey="n" href="ch07.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
+<td><a accesskey="n" href="gst-plugins-bad-libs-OpenGL-debugging.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
 </tr></table>
 <div class="refentry">
 <a name="gst-plugins-bad-libs-GstGLWindowX11"></a><div class="titlepage"></div>
@@ -33,7 +33,7 @@
 </tr></table></div>
 <div class="refsect1">
 <a name="gst-plugins-bad-libs-GstGLWindowX11.functions"></a><h2>Functions</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="functions_return">
 <col class="functions_name">
@@ -76,7 +76,7 @@
 </div>
 <div class="refsect1">
 <a name="gst-plugins-bad-libs-GstGLWindowX11.other"></a><h2>Types and Values</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="name">
 <col class="description">
@@ -123,7 +123,7 @@
 gst_gl_window_x11_untrap_x_errors (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
 <p>Removes the X error trap and returns the current status.</p>
 <div class="refsect3">
-<a name="id-1.2.9.29.6.5.5"></a><h4>Returns</h4>
+<a name="id-1.2.9.31.6.5.5"></a><h4>Returns</h4>
 <p> the trapped error code, or 0 for success</p>
 </div>
 </div>
diff --git a/docs/libs/html/gst-plugins-bad-libs-GstInsertbin.html b/docs/libs/html/gst-plugins-bad-libs-GstInsertbin.html
index 6c0fb9c..0859be6 100644
--- a/docs/libs/html/gst-plugins-bad-libs-GstInsertbin.html
+++ b/docs/libs/html/gst-plugins-bad-libs-GstInsertbin.html
@@ -3,7 +3,7 @@
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>GstInsertbin: GStreamer Bad Plugins 1.0 Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
 <link rel="home" href="index.html" title="GStreamer Bad Plugins 1.0 Library Reference Manual">
 <link rel="up" href="tools.html" title="Useful elements">
 <link rel="prev" href="tools.html" title="Useful elements">
@@ -36,7 +36,7 @@
 </tr></table></div>
 <div class="refsect1">
 <a name="gst-plugins-bad-libs-GstInsertbin.functions"></a><h2>Functions</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="functions_return">
 <col class="functions_name">
@@ -103,7 +103,7 @@
 </div>
 <div class="refsect1">
 <a name="gst-plugins-bad-libs-GstInsertbin.signals"></a><h2>Signals</h2>
-<div class="informaltable"><table border="0">
+<div class="informaltable"><table class="informaltable" border="0">
 <colgroup>
 <col width="150px" class="signals_return">
 <col width="300px" class="signals_name">
@@ -140,7 +140,7 @@
 </div>
 <a name="GstInsertBin"></a><div class="refsect1">
 <a name="gst-plugins-bad-libs-GstInsertbin.other"></a><h2>Types and Values</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="name">
 <col class="description">
@@ -200,7 +200,7 @@
 operation is requested.</p>
 <div class="refsect3">
 <a name="id-1.2.6.2.10.2.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
 <col class="parameters_description">
@@ -239,7 +239,7 @@
 <p>Creates a new <a class="link" href="gst-plugins-bad-libs-GstInsertbin.html#GstInsertBin"><span class="type">GstInsertBin</span></a></p>
 <div class="refsect3">
 <a name="id-1.2.6.2.10.3.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
 <col class="parameters_description">
@@ -271,7 +271,7 @@
 <p>Same as the <a class="link" href="gst-plugins-bad-libs-GstInsertbin.html#GstInsertBin-append" title="The “append” signal"><span class="type">“append”</span></a> signal.</p>
 <div class="refsect3">
 <a name="id-1.2.6.2.10.4.6"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
 <col class="parameters_description">
@@ -312,7 +312,7 @@
 <p>Same as the <a class="link" href="gst-plugins-bad-libs-GstInsertbin.html#GstInsertBin-prepend" title="The “prepend” signal"><span class="type">“prepend”</span></a> signal.</p>
 <div class="refsect3">
 <a name="id-1.2.6.2.10.5.6"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
 <col class="parameters_description">
@@ -355,7 +355,7 @@
 <p>Same as the <a class="link" href="gst-plugins-bad-libs-GstInsertbin.html#GstInsertBin-insert-after" title="The “insert-after” signal"><span class="type">“insert-after”</span></a> signal.</p>
 <div class="refsect3">
 <a name="id-1.2.6.2.10.6.6"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
 <col class="parameters_description">
@@ -404,7 +404,7 @@
 <p>Same as the <a class="link" href="gst-plugins-bad-libs-GstInsertbin.html#GstInsertBin-insert-before" title="The “insert-before” signal"><span class="type">“insert-before”</span></a> signal.</p>
 <div class="refsect3">
 <a name="id-1.2.6.2.10.7.6"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
 <col class="parameters_description">
@@ -450,7 +450,7 @@
 <p>Same as the <a class="link" href="gst-plugins-bad-libs-GstInsertbin.html#GstInsertBin-remove" title="The “remove” signal"><span class="type">“remove”</span></a> signal.</p>
 <div class="refsect3">
 <a name="id-1.2.6.2.10.8.6"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
 <col class="parameters_description">
@@ -511,7 +511,7 @@
 <p>Same as <a class="link" href="gst-plugins-bad-libs-GstInsertbin.html#gst-insert-bin-append" title="gst_insert_bin_append ()"><code class="function">gst_insert_bin_append()</code></a></p>
 <div class="refsect3">
 <a name="id-1.2.6.2.12.2.6"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
 <col class="parameters_description">
@@ -566,7 +566,7 @@
 <p>Same as <a class="link" href="gst-plugins-bad-libs-GstInsertbin.html#gst-insert-bin-insert-after" title="gst_insert_bin_insert_after ()"><code class="function">gst_insert_bin_insert_after()</code></a></p>
 <div class="refsect3">
 <a name="id-1.2.6.2.12.3.6"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
 <col class="parameters_description">
@@ -626,7 +626,7 @@
 <p>Same as <a class="link" href="gst-plugins-bad-libs-GstInsertbin.html#gst-insert-bin-insert-before" title="gst_insert_bin_insert_before ()"><code class="function">gst_insert_bin_insert_before()</code></a></p>
 <div class="refsect3">
 <a name="id-1.2.6.2.12.4.6"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
 <col class="parameters_description">
@@ -684,7 +684,7 @@
 <p>Same as <a class="link" href="gst-plugins-bad-libs-GstInsertbin.html#gst-insert-bin-prepend" title="gst_insert_bin_prepend ()"><code class="function">gst_insert_bin_prepend()</code></a></p>
 <div class="refsect3">
 <a name="id-1.2.6.2.12.5.6"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
 <col class="parameters_description">
@@ -735,7 +735,7 @@
 <p>Same as <a class="link" href="gst-plugins-bad-libs-GstInsertbin.html#gst-insert-bin-remove" title="gst_insert_bin_remove ()"><code class="function">gst_insert_bin_remove()</code></a></p>
 <div class="refsect3">
 <a name="id-1.2.6.2.12.6.6"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
 <col class="parameters_description">
diff --git a/docs/libs/html/gst-plugins-bad-libs-GstPhotography.html b/docs/libs/html/gst-plugins-bad-libs-GstPhotography.html
index 3cb2be4..f138273 100644
--- a/docs/libs/html/gst-plugins-bad-libs-GstPhotography.html
+++ b/docs/libs/html/gst-plugins-bad-libs-GstPhotography.html
@@ -3,10 +3,10 @@
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>GstPhotography: GStreamer Bad Plugins 1.0 Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
 <link rel="home" href="index.html" title="GStreamer Bad Plugins 1.0 Library Reference Manual">
-<link rel="up" href="ch07.html" title="Interfaces">
-<link rel="prev" href="ch07.html" title="Interfaces">
+<link rel="up" href="ch08.html" title="Interfaces">
+<link rel="prev" href="ch08.html" title="Interfaces">
 <link rel="next" href="gstreamer-libs-hierarchy.html" title="Part II. Object Hierarchy">
 <meta name="generator" content="GTK-Doc V1.24 (XML mode)">
 <link rel="stylesheet" href="style.css" type="text/css">
@@ -18,8 +18,8 @@
                   <a href="#gst-plugins-bad-libs-GstPhotography.description" class="shortcut">Description</a></span>
 </td>
 <td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
-<td><a accesskey="u" href="ch07.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
-<td><a accesskey="p" href="ch07.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="ch08.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
+<td><a accesskey="p" href="ch08.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
 <td><a accesskey="n" href="gstreamer-libs-hierarchy.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
 </tr></table>
 <div class="refentry">
@@ -50,7 +50,7 @@
 </div>
 <div class="refsect1">
 <a name="gst-plugins-bad-libs-GstPhotography.functions"></a><h2>Functions</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="functions_return">
 <col class="functions_name">
@@ -301,7 +301,7 @@
 </div>
 <div class="refsect1">
 <a name="gst-plugins-bad-libs-GstPhotography.other"></a><h2>Types and Values</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="name">
 <col class="description">
@@ -443,8 +443,8 @@
  format, so this callback allows the application
 to e.g. reconfigure capsfilters in pipeline if any.</p>
 <div class="refsect3">
-<a name="id-1.2.10.2.7.2.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="id-1.2.11.2.7.2.5"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
 <col class="parameters_description">
@@ -474,8 +474,8 @@
                                      <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gfloat"><span class="type">gfloat</span></a> *ev_comp</code></em>);</pre>
 <p>Get the ev compensation value for the <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html"><span class="type">GstElement</span></a></p>
 <div class="refsect3">
-<a name="id-1.2.10.2.7.3.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="id-1.2.11.2.7.3.5"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
 <col class="parameters_description">
@@ -496,7 +496,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.10.2.7.3.6"></a><h4>Returns</h4>
+<a name="id-1.2.11.2.7.3.6"></a><h4>Returns</h4>
 <p> <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if getting the value succeeded, <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> otherwise</p>
 </div>
 </div>
@@ -508,8 +508,8 @@
                                <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> *iso_speed</code></em>);</pre>
 <p>Get the ISO value (light sensivity) for the <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html"><span class="type">GstElement</span></a></p>
 <div class="refsect3">
-<a name="id-1.2.10.2.7.4.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="id-1.2.11.2.7.4.5"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
 <col class="parameters_description">
@@ -530,7 +530,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.10.2.7.4.6"></a><h4>Returns</h4>
+<a name="id-1.2.11.2.7.4.6"></a><h4>Returns</h4>
 <p> <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if getting the value succeeded, <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> otherwise</p>
 </div>
 </div>
@@ -542,8 +542,8 @@
                               <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> *aperture</code></em>);</pre>
 <p>Get the aperture value for the <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html"><span class="type">GstElement</span></a></p>
 <div class="refsect3">
-<a name="id-1.2.10.2.7.5.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="id-1.2.11.2.7.5.5"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
 <col class="parameters_description">
@@ -564,7 +564,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.10.2.7.5.6"></a><h4>Returns</h4>
+<a name="id-1.2.11.2.7.5.6"></a><h4>Returns</h4>
 <p> <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if getting the value succeeded, <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> otherwise</p>
 </div>
 </div>
@@ -576,8 +576,8 @@
                               <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a> *exposure</code></em>);</pre>
 <p>Get the fixed exposure time (in us) for the <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html"><span class="type">GstElement</span></a></p>
 <div class="refsect3">
-<a name="id-1.2.10.2.7.6.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="id-1.2.11.2.7.6.5"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
 <col class="parameters_description">
@@ -598,7 +598,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.10.2.7.6.6"></a><h4>Returns</h4>
+<a name="id-1.2.11.2.7.6.6"></a><h4>Returns</h4>
 <p> <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if getting the value succeeded, <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> otherwise</p>
 </div>
 </div>
@@ -611,8 +611,8 @@
                                 <em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-GstPhotography.html#GstPhotographyWhiteBalanceMode" title="enum GstPhotographyWhiteBalanceMode"><span class="type">GstPhotographyWhiteBalanceMode</span></a> *wb_mode</code></em>);</pre>
 <p>Get the white balance mode for the <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html"><span class="type">GstElement</span></a></p>
 <div class="refsect3">
-<a name="id-1.2.10.2.7.7.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="id-1.2.11.2.7.7.5"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
 <col class="parameters_description">
@@ -633,7 +633,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.10.2.7.7.6"></a><h4>Returns</h4>
+<a name="id-1.2.11.2.7.7.6"></a><h4>Returns</h4>
 <p> <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if getting the value succeeded, <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> otherwise</p>
 </div>
 </div>
@@ -645,8 +645,8 @@
                                      <em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-GstPhotography.html#GstPhotographyColorToneMode" title="enum GstPhotographyColorToneMode"><span class="type">GstPhotographyColorToneMode</span></a> *tone_mode</code></em>);</pre>
 <p>Get the color tone mode for the <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html"><span class="type">GstElement</span></a></p>
 <div class="refsect3">
-<a name="id-1.2.10.2.7.8.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="id-1.2.11.2.7.8.5"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
 <col class="parameters_description">
@@ -667,7 +667,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.10.2.7.8.6"></a><h4>Returns</h4>
+<a name="id-1.2.11.2.7.8.6"></a><h4>Returns</h4>
 <p> <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if getting the value succeeded, <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> otherwise</p>
 </div>
 </div>
@@ -679,8 +679,8 @@
                                 <em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-GstPhotography.html#GstPhotographySceneMode" title="enum GstPhotographySceneMode"><span class="type">GstPhotographySceneMode</span></a> *scene_mode</code></em>);</pre>
 <p>Get the scene mode for the <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html"><span class="type">GstElement</span></a></p>
 <div class="refsect3">
-<a name="id-1.2.10.2.7.9.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="id-1.2.11.2.7.9.5"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
 <col class="parameters_description">
@@ -701,7 +701,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.10.2.7.9.6"></a><h4>Returns</h4>
+<a name="id-1.2.11.2.7.9.6"></a><h4>Returns</h4>
 <p> <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if getting the value succeeded, <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> otherwise</p>
 </div>
 </div>
@@ -713,8 +713,8 @@
                                 <em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-GstPhotography.html#GstPhotographyFlashMode" title="enum GstPhotographyFlashMode"><span class="type">GstPhotographyFlashMode</span></a> *flash_mode</code></em>);</pre>
 <p>Get the flash mode for the <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html"><span class="type">GstElement</span></a></p>
 <div class="refsect3">
-<a name="id-1.2.10.2.7.10.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="id-1.2.11.2.7.10.5"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
 <col class="parameters_description">
@@ -735,7 +735,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.10.2.7.10.6"></a><h4>Returns</h4>
+<a name="id-1.2.11.2.7.10.6"></a><h4>Returns</h4>
 <p> <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if getting the value succeeded, <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> otherwise</p>
 </div>
 </div>
@@ -747,8 +747,8 @@
                                   <em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-GstPhotography.html#GstPhotographyFlickerReductionMode" title="enum GstPhotographyFlickerReductionMode"><span class="type">GstPhotographyFlickerReductionMode</span></a> *mode</code></em>);</pre>
 <p>Get the flicker mode value for the <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html"><span class="type">GstElement</span></a></p>
 <div class="refsect3">
-<a name="id-1.2.10.2.7.11.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="id-1.2.11.2.7.11.5"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
 <col class="parameters_description">
@@ -769,7 +769,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.10.2.7.11.6"></a><h4>Returns</h4>
+<a name="id-1.2.11.2.7.11.6"></a><h4>Returns</h4>
 <p> <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if getting the value succeeded, <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> otherwise</p>
 </div>
 </div>
@@ -781,8 +781,8 @@
                                 <em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-GstPhotography.html#GstPhotographyFocusMode" title="enum GstPhotographyFocusMode"><span class="type">GstPhotographyFocusMode</span></a> *mode</code></em>);</pre>
 <p>Get the focus mode value for the <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html"><span class="type">GstElement</span></a></p>
 <div class="refsect3">
-<a name="id-1.2.10.2.7.12.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="id-1.2.11.2.7.12.5"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
 <col class="parameters_description">
@@ -803,7 +803,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.10.2.7.12.6"></a><h4>Returns</h4>
+<a name="id-1.2.11.2.7.12.6"></a><h4>Returns</h4>
 <p> <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if getting the value succeeded, <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> otherwise</p>
 </div>
 </div>
@@ -815,8 +815,8 @@
                                      <em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-GstPhotography.html#GstPhotographyNoiseReduction" title="enum GstPhotographyNoiseReduction"><span class="type">GstPhotographyNoiseReduction</span></a> *noise_reduction</code></em>);</pre>
 <p>Get the noise reduction mode for the <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html"><span class="type">GstElement</span></a></p>
 <div class="refsect3">
-<a name="id-1.2.10.2.7.13.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="id-1.2.11.2.7.13.5"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
 <col class="parameters_description">
@@ -837,10 +837,9 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.10.2.7.13.6"></a><h4>Returns</h4>
+<a name="id-1.2.11.2.7.13.6"></a><h4>Returns</h4>
 <p> <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if getting the value succeeded, <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> otherwise</p>
 </div>
-<p class="since">Since: 0.10.21</p>
 </div>
 <hr>
 <div class="refsect2">
@@ -850,8 +849,8 @@
                           <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gfloat"><span class="type">gfloat</span></a> *zoom</code></em>);</pre>
 <p>Get the zoom value for the <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html"><span class="type">GstElement</span></a></p>
 <div class="refsect3">
-<a name="id-1.2.10.2.7.14.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="id-1.2.11.2.7.14.5"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
 <col class="parameters_description">
@@ -872,7 +871,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.10.2.7.14.6"></a><h4>Returns</h4>
+<a name="id-1.2.11.2.7.14.6"></a><h4>Returns</h4>
 <p> <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if getting the value succeeded, <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> otherwise</p>
 </div>
 </div>
@@ -884,8 +883,8 @@
                                      <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gfloat"><span class="type">gfloat</span></a> ev_comp</code></em>);</pre>
 <p>Set the ev compensation value for the <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html"><span class="type">GstElement</span></a></p>
 <div class="refsect3">
-<a name="id-1.2.10.2.7.15.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="id-1.2.11.2.7.15.5"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
 <col class="parameters_description">
@@ -906,7 +905,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.10.2.7.15.6"></a><h4>Returns</h4>
+<a name="id-1.2.11.2.7.15.6"></a><h4>Returns</h4>
 <p> <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if setting the value succeeded, <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> otherwise</p>
 </div>
 </div>
@@ -918,8 +917,8 @@
                                <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> iso_speed</code></em>);</pre>
 <p>Set the ISO value (light sensivity) for the <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html"><span class="type">GstElement</span></a></p>
 <div class="refsect3">
-<a name="id-1.2.10.2.7.16.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="id-1.2.11.2.7.16.5"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
 <col class="parameters_description">
@@ -940,7 +939,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.10.2.7.16.6"></a><h4>Returns</h4>
+<a name="id-1.2.11.2.7.16.6"></a><h4>Returns</h4>
 <p> <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if setting the value succeeded, <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> otherwise</p>
 </div>
 </div>
@@ -952,8 +951,8 @@
                               <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> aperture</code></em>);</pre>
 <p>Set the aperture value for the <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html"><span class="type">GstElement</span></a></p>
 <div class="refsect3">
-<a name="id-1.2.10.2.7.17.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="id-1.2.11.2.7.17.5"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
 <col class="parameters_description">
@@ -974,7 +973,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.10.2.7.17.6"></a><h4>Returns</h4>
+<a name="id-1.2.11.2.7.17.6"></a><h4>Returns</h4>
 <p> <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if setting the value succeeded, <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> otherwise</p>
 </div>
 </div>
@@ -986,8 +985,8 @@
                               <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> exposure</code></em>);</pre>
 <p>Set the fixed exposure time (in us) for the <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html"><span class="type">GstElement</span></a></p>
 <div class="refsect3">
-<a name="id-1.2.10.2.7.18.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="id-1.2.11.2.7.18.5"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
 <col class="parameters_description">
@@ -1008,7 +1007,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.10.2.7.18.6"></a><h4>Returns</h4>
+<a name="id-1.2.11.2.7.18.6"></a><h4>Returns</h4>
 <p> <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if setting the value succeeded, <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> otherwise</p>
 </div>
 </div>
@@ -1021,8 +1020,8 @@
                                 <em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-GstPhotography.html#GstPhotographyWhiteBalanceMode" title="enum GstPhotographyWhiteBalanceMode"><span class="type">GstPhotographyWhiteBalanceMode</span></a> wb_mode</code></em>);</pre>
 <p>Set the white balance mode for the <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html"><span class="type">GstElement</span></a></p>
 <div class="refsect3">
-<a name="id-1.2.10.2.7.19.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="id-1.2.11.2.7.19.5"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
 <col class="parameters_description">
@@ -1043,7 +1042,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.10.2.7.19.6"></a><h4>Returns</h4>
+<a name="id-1.2.11.2.7.19.6"></a><h4>Returns</h4>
 <p> <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if setting the value succeeded, <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> otherwise</p>
 </div>
 </div>
@@ -1055,8 +1054,8 @@
                                      <em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-GstPhotography.html#GstPhotographyColorToneMode" title="enum GstPhotographyColorToneMode"><span class="type">GstPhotographyColorToneMode</span></a> tone_mode</code></em>);</pre>
 <p>Set the color tone mode for the <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html"><span class="type">GstElement</span></a></p>
 <div class="refsect3">
-<a name="id-1.2.10.2.7.20.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="id-1.2.11.2.7.20.5"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
 <col class="parameters_description">
@@ -1077,7 +1076,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.10.2.7.20.6"></a><h4>Returns</h4>
+<a name="id-1.2.11.2.7.20.6"></a><h4>Returns</h4>
 <p> <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if setting the value succeeded, <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> otherwise</p>
 </div>
 </div>
@@ -1089,8 +1088,8 @@
                                 <em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-GstPhotography.html#GstPhotographySceneMode" title="enum GstPhotographySceneMode"><span class="type">GstPhotographySceneMode</span></a> scene_mode</code></em>);</pre>
 <p>Set the scene mode for the <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html"><span class="type">GstElement</span></a></p>
 <div class="refsect3">
-<a name="id-1.2.10.2.7.21.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="id-1.2.11.2.7.21.5"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
 <col class="parameters_description">
@@ -1111,7 +1110,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.10.2.7.21.6"></a><h4>Returns</h4>
+<a name="id-1.2.11.2.7.21.6"></a><h4>Returns</h4>
 <p> <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if setting the value succeeded, <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> otherwise</p>
 </div>
 </div>
@@ -1123,8 +1122,8 @@
                                 <em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-GstPhotography.html#GstPhotographyFlashMode" title="enum GstPhotographyFlashMode"><span class="type">GstPhotographyFlashMode</span></a> flash_mode</code></em>);</pre>
 <p>Set the flash mode for the <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html"><span class="type">GstElement</span></a></p>
 <div class="refsect3">
-<a name="id-1.2.10.2.7.22.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="id-1.2.11.2.7.22.5"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
 <col class="parameters_description">
@@ -1145,7 +1144,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.10.2.7.22.6"></a><h4>Returns</h4>
+<a name="id-1.2.11.2.7.22.6"></a><h4>Returns</h4>
 <p> <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if setting the value succeeded, <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> otherwise</p>
 </div>
 </div>
@@ -1157,8 +1156,8 @@
                                   <em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-GstPhotography.html#GstPhotographyFlickerReductionMode" title="enum GstPhotographyFlickerReductionMode"><span class="type">GstPhotographyFlickerReductionMode</span></a> mode</code></em>);</pre>
 <p>Set the flicker mode value for the <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html"><span class="type">GstElement</span></a>.</p>
 <div class="refsect3">
-<a name="id-1.2.10.2.7.23.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="id-1.2.11.2.7.23.5"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
 <col class="parameters_description">
@@ -1179,7 +1178,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.10.2.7.23.6"></a><h4>Returns</h4>
+<a name="id-1.2.11.2.7.23.6"></a><h4>Returns</h4>
 <p> <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if setting the value succeeded, <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> otherwise</p>
 </div>
 </div>
@@ -1191,8 +1190,8 @@
                                 <em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-GstPhotography.html#GstPhotographyFocusMode" title="enum GstPhotographyFocusMode"><span class="type">GstPhotographyFocusMode</span></a> mode</code></em>);</pre>
 <p>Set the focus mode value for the <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html"><span class="type">GstElement</span></a>.</p>
 <div class="refsect3">
-<a name="id-1.2.10.2.7.24.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="id-1.2.11.2.7.24.5"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
 <col class="parameters_description">
@@ -1213,7 +1212,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.10.2.7.24.6"></a><h4>Returns</h4>
+<a name="id-1.2.11.2.7.24.6"></a><h4>Returns</h4>
 <p> <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if setting the value succeeded, <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> otherwise</p>
 </div>
 </div>
@@ -1225,8 +1224,8 @@
                                      <em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-GstPhotography.html#GstPhotographyNoiseReduction" title="enum GstPhotographyNoiseReduction"><span class="type">GstPhotographyNoiseReduction</span></a> noise_reduction</code></em>);</pre>
 <p>Set the noise reduction mode for the <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html"><span class="type">GstElement</span></a></p>
 <div class="refsect3">
-<a name="id-1.2.10.2.7.25.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="id-1.2.11.2.7.25.5"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
 <col class="parameters_description">
@@ -1247,10 +1246,9 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.10.2.7.25.6"></a><h4>Returns</h4>
+<a name="id-1.2.11.2.7.25.6"></a><h4>Returns</h4>
 <p> <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if setting the value succeeded, <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> otherwise</p>
 </div>
-<p class="since">Since: 0.10.21</p>
 </div>
 <hr>
 <div class="refsect2">
@@ -1261,8 +1259,8 @@
 <p>Set the zoom value for the <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html"><span class="type">GstElement</span></a>.
 E.g. 1.0 to get original image and 3.0 for 3x zoom and so on.</p>
 <div class="refsect3">
-<a name="id-1.2.10.2.7.26.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="id-1.2.11.2.7.26.5"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
 <col class="parameters_description">
@@ -1283,7 +1281,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.10.2.7.26.6"></a><h4>Returns</h4>
+<a name="id-1.2.11.2.7.26.6"></a><h4>Returns</h4>
 <p> <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if setting the value succeeded, <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> otherwise</p>
 </div>
 </div>
@@ -1295,8 +1293,8 @@
 <p>Get <a class="link" href="gst-plugins-bad-libs-GstPhotography.html#GstPhotographyCaps" title="enum GstPhotographyCaps"><span class="type">GstPhotographyCaps</span></a> bitmask value that indicates what photography
 interface features the <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html"><span class="type">GstElement</span></a> supports</p>
 <div class="refsect3">
-<a name="id-1.2.10.2.7.27.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="id-1.2.11.2.7.27.5"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
 <col class="parameters_description">
@@ -1310,7 +1308,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.10.2.7.27.6"></a><h4>Returns</h4>
+<a name="id-1.2.11.2.7.27.6"></a><h4>Returns</h4>
 <p> <a class="link" href="gst-plugins-bad-libs-GstPhotography.html#GstPhotographyCaps" title="enum GstPhotographyCaps"><span class="type">GstPhotographyCaps</span></a> value</p>
 </div>
 </div>
@@ -1327,8 +1325,8 @@
  callback is called after preparations are
 done. Image capture will begin after callback returns.</p>
 <div class="refsect3">
-<a name="id-1.2.10.2.7.28.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="id-1.2.11.2.7.28.5"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
 <col class="parameters_description">
@@ -1360,7 +1358,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.10.2.7.28.6"></a><h4>Returns</h4>
+<a name="id-1.2.11.2.7.28.6"></a><h4>Returns</h4>
 <p> <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if preparations were started (caps were OK), otherwise <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a>.</p>
 </div>
 </div>
@@ -1373,8 +1371,8 @@
 <p>Start or stop autofocusing. <a class="link" href="gst-plugins-bad-libs-GstPhotography.html#GST-PHOTOGRAPHY-AUTOFOCUS-DONE:CAPS" title="GST_PHOTOGRAPHY_AUTOFOCUS_DONE"><code class="literal">GST_PHOTOGRAPHY_AUTOFOCUS_DONE</code></a>
 message is posted to bus when autofocusing has finished.</p>
 <div class="refsect3">
-<a name="id-1.2.10.2.7.29.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="id-1.2.11.2.7.29.5"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
 <col class="parameters_description">
@@ -1403,8 +1401,8 @@
                             <em class="parameter"><code><span class="type">GstPhotographySettings</span> *config</code></em>);</pre>
 <p>Set all configuration settings at once.</p>
 <div class="refsect3">
-<a name="id-1.2.10.2.7.30.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="id-1.2.11.2.7.30.5"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
 <col class="parameters_description">
@@ -1425,7 +1423,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.10.2.7.30.6"></a><h4>Returns</h4>
+<a name="id-1.2.11.2.7.30.6"></a><h4>Returns</h4>
 <p> TRUE if configuration was set successfully, otherwise FALSE.</p>
 </div>
 </div>
@@ -1437,8 +1435,8 @@
                             <em class="parameter"><code><span class="type">GstPhotographySettings</span> *config</code></em>);</pre>
 <p>Get all configuration settings at once.</p>
 <div class="refsect3">
-<a name="id-1.2.10.2.7.31.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="id-1.2.11.2.7.31.5"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
 <col class="parameters_description">
@@ -1459,7 +1457,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.10.2.7.31.6"></a><h4>Returns</h4>
+<a name="id-1.2.11.2.7.31.6"></a><h4>Returns</h4>
 <p> TRUE if configuration was got successfully, otherwise FALSE.</p>
 </div>
 </div>
@@ -1476,8 +1474,8 @@
 <a name="GstPhotographyNoiseReduction"></a><h3>enum GstPhotographyNoiseReduction</h3>
 <p>Noise Reduction features of a photography capture or filter element.</p>
 <div class="refsect3">
-<a name="id-1.2.10.2.8.3.4"></a><h4>Members</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="id-1.2.11.2.8.3.4"></a><h4>Members</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="300px" class="enum_members_name">
 <col class="enum_members_description">
@@ -1529,15 +1527,14 @@
 </tbody>
 </table></div>
 </div>
-<p class="since">Since: 0.10.21</p>
 </div>
 <hr>
 <div class="refsect2">
 <a name="GstPhotographyWhiteBalanceMode"></a><h3>enum GstPhotographyWhiteBalanceMode</h3>
 <p>Modes for white balance control.</p>
 <div class="refsect3">
-<a name="id-1.2.10.2.8.4.4"></a><h4>Members</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="id-1.2.11.2.8.4.4"></a><h4>Members</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="300px" class="enum_members_name">
 <col class="enum_members_description">
@@ -1617,8 +1614,8 @@
 <a name="GstPhotographyColorToneMode"></a><h3>enum GstPhotographyColorToneMode</h3>
 <p>Modes for special color effects.</p>
 <div class="refsect3">
-<a name="id-1.2.10.2.8.5.4"></a><h4>Members</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="id-1.2.11.2.8.5.4"></a><h4>Members</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="300px" class="enum_members_name">
 <col class="enum_members_description">
@@ -1747,8 +1744,8 @@
 <p>Each mode contains preset <a class="link" href="gst-plugins-bad-libs-GstPhotography.html#GstPhotography" title="GstPhotography"><span class="type">GstPhotography</span></a> options in order to produce
 good capturing result in certain scene.</p>
 <div class="refsect3">
-<a name="id-1.2.10.2.8.6.4"></a><h4>Members</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="id-1.2.11.2.8.6.4"></a><h4>Members</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="300px" class="enum_members_name">
 <col class="enum_members_description">
@@ -1896,8 +1893,8 @@
 <a name="GstPhotographyFlashMode"></a><h3>enum GstPhotographyFlashMode</h3>
 <p>Modes for flash control.</p>
 <div class="refsect3">
-<a name="id-1.2.10.2.8.7.4"></a><h4>Members</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="id-1.2.11.2.8.7.4"></a><h4>Members</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="300px" class="enum_members_name">
 <col class="enum_members_description">
@@ -1950,8 +1947,8 @@
 <a name="GstPhotographyFlickerReductionMode"></a><h3>enum GstPhotographyFlickerReductionMode</h3>
 <p>Reduce flicker in video caused by light source fluctuation.</p>
 <div class="refsect3">
-<a name="id-1.2.10.2.8.8.4"></a><h4>Members</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="id-1.2.11.2.8.8.4"></a><h4>Members</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="300px" class="enum_members_name">
 <col class="enum_members_description">
@@ -1995,8 +1992,8 @@
 <a name="GstPhotographyFocusMode"></a><h3>enum GstPhotographyFocusMode</h3>
 <p>Choose mode for focusing algorithm.</p>
 <div class="refsect3">
-<a name="id-1.2.10.2.8.9.4"></a><h4>Members</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="id-1.2.11.2.8.9.4"></a><h4>Members</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="300px" class="enum_members_name">
 <col class="enum_members_description">
@@ -2080,8 +2077,8 @@
 <p>Status of the focusing operation, used in <a class="link" href="gst-plugins-bad-libs-GstPhotography.html#GST-PHOTOGRAPHY-AUTOFOCUS-DONE:CAPS" title="GST_PHOTOGRAPHY_AUTOFOCUS_DONE"><span class="type">GST_PHOTOGRAPHY_AUTOFOCUS_DONE</span></a>
 message.</p>
 <div class="refsect3">
-<a name="id-1.2.10.2.8.10.4"></a><h4>Members</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="id-1.2.11.2.8.10.4"></a><h4>Members</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="300px" class="enum_members_name">
 <col class="enum_members_description">
@@ -2126,8 +2123,8 @@
 <p>Bitmask that indicates which <a class="link" href="gst-plugins-bad-libs-GstPhotography.html#GstPhotography" title="GstPhotography"><span class="type">GstPhotography</span></a> interface features an instance
 supports.</p>
 <div class="refsect3">
-<a name="id-1.2.10.2.8.11.4"></a><h4>Members</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="id-1.2.11.2.8.11.4"></a><h4>Members</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="300px" class="enum_members_name">
 <col class="enum_members_description">
@@ -2224,8 +2221,8 @@
 <p>Risk level of captured image becoming "shaken" due to camera movement and
 too long exposure time. Used in <a class="link" href="gst-plugins-bad-libs-GstPhotography.html#GST-PHOTOGRAPHY-SHAKE-RISK:CAPS" title="GST_PHOTOGRAPHY_SHAKE_RISK"><span class="type">GST_PHOTOGRAPHY_SHAKE_RISK</span></a> <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstMessage.html"><span class="type">GstMessage</span></a>.</p>
 <div class="refsect3">
-<a name="id-1.2.10.2.8.12.4"></a><h4>Members</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="id-1.2.11.2.8.12.4"></a><h4>Members</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="300px" class="enum_members_name">
 <col class="enum_members_description">
diff --git a/docs/libs/html/gst-plugins-bad-libs-GstVideoAggregator.html b/docs/libs/html/gst-plugins-bad-libs-GstVideoAggregator.html
index c8ed5f7..6918daf 100644
--- a/docs/libs/html/gst-plugins-bad-libs-GstVideoAggregator.html
+++ b/docs/libs/html/gst-plugins-bad-libs-GstVideoAggregator.html
@@ -3,7 +3,7 @@
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>GstVideoAggregator: GStreamer Bad Plugins 1.0 Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
 <link rel="home" href="index.html" title="GStreamer Bad Plugins 1.0 Library Reference Manual">
 <link rel="up" href="video.html" title="Video helpers and baseclasses">
 <link rel="prev" href="video.html" title="Video helpers and baseclasses">
@@ -33,7 +33,7 @@
 </tr></table></div>
 <div class="refsect1">
 <a name="gst-plugins-bad-libs-GstVideoAggregator.other"></a><h2>Types and Values</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="name">
 <col class="description">
@@ -77,7 +77,7 @@
 </pre>
 <div class="refsect3">
 <a name="id-1.2.8.2.6.2.4"></a><h4>Members</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="300px" class="struct_members_name">
 <col class="struct_members_description">
@@ -104,6 +104,9 @@
 <a name="GstVideoAggregatorClass"></a><h3>struct GstVideoAggregatorClass</h3>
 <pre class="programlisting">struct GstVideoAggregatorClass {
   GstCaps *          (*update_caps)               (GstVideoAggregator *  videoaggregator,
+                                                   GstCaps            *  caps,
+                                                   GstCaps            *  filter_caps);
+  GstCaps *          (*fixate_caps)               (GstVideoAggregator *  videoaggregator,
                                                    GstCaps            *  caps);
   GstFlowReturn      (*aggregate_frames)          (GstVideoAggregator *  videoaggregator,
                                                    GstBuffer          *  outbuffer);
@@ -116,14 +119,12 @@
                                                    GstVideoInfo       *  best_info,
                                                    gboolean           *  at_least_one_alpha);
 
-  gboolean           preserve_update_caps_result;
-
   GstCaps           *sink_non_alpha_caps;
 };
 </pre>
 <div class="refsect3">
 <a name="id-1.2.8.2.6.3.4"></a><h4>Members</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="300px" class="struct_members_name">
 <col class="struct_members_description">
@@ -138,6 +139,16 @@
 <td class="struct_member_annotations"> </td>
 </tr>
 <tr>
+<td class="struct_member_name"><p><em class="structfield"><code><a name="GstVideoAggregatorClass.fixate-caps"></a>fixate_caps</code></em> ()</p></td>
+<td class="struct_member_description"><p>Fixate and return the src pad caps provided.  The function takes
+ownership of <em class="parameter"><code>caps</code></em>
+and returns a fixated version of
+<em class="parameter"><code>caps</code></em>
+. <em class="parameter"><code>caps</code></em>
+is not guaranteed to be writable.</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
 <td class="struct_member_name"><p><em class="structfield"><code><a name="GstVideoAggregatorClass.aggregate-frames"></a>aggregate_frames</code></em> ()</p></td>
 <td class="struct_member_description"><p>Lets subclasses aggregate frames that are ready. Subclasses
 should iterate the GstElement.sinkpads and use the already
@@ -169,13 +180,6 @@
 <td class="struct_member_annotations"> </td>
 </tr>
 <tr>
-<td class="struct_member_name"><p><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> <em class="structfield"><code><a name="GstVideoAggregatorClass.preserve-update-caps-result"></a>preserve_update_caps_result</code></em>;</p></td>
-<td class="struct_member_description"><p>Sub-classes should set this to true if the return result
-of the <code class="function">update_caps()</code> method should not be further modified
-by GstVideoAggregator by removing fields.</p></td>
-<td class="struct_member_annotations"> </td>
-</tr>
-<tr>
 <td class="struct_member_name"><p><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstCaps.html"><span class="type">GstCaps</span></a> *<em class="structfield"><code><a name="GstVideoAggregatorClass.sink-non-alpha-caps"></a>sink_non_alpha_caps</code></em>;</p></td>
 <td> </td>
 <td> </td>
diff --git a/docs/libs/html/gst-plugins-bad-libs-GstVideoAggregatorPad.html b/docs/libs/html/gst-plugins-bad-libs-GstVideoAggregatorPad.html
index fabcaec..5a4b3ef 100644
--- a/docs/libs/html/gst-plugins-bad-libs-GstVideoAggregatorPad.html
+++ b/docs/libs/html/gst-plugins-bad-libs-GstVideoAggregatorPad.html
@@ -3,7 +3,7 @@
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>GstVideoAggregatorPad: GStreamer Bad Plugins 1.0 Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
 <link rel="home" href="index.html" title="GStreamer Bad Plugins 1.0 Library Reference Manual">
 <link rel="up" href="video.html" title="Video helpers and baseclasses">
 <link rel="prev" href="gst-plugins-bad-libs-GstVideoAggregator.html" title="GstVideoAggregator">
@@ -33,7 +33,7 @@
 </tr></table></div>
 <div class="refsect1">
 <a name="gst-plugins-bad-libs-GstVideoAggregatorPad.other"></a><h2>Types and Values</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="name">
 <col class="description">
@@ -84,7 +84,7 @@
 </pre>
 <div class="refsect3">
 <a name="id-1.2.8.3.6.2.4"></a><h4>Members</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="300px" class="struct_members_name">
 <col class="struct_members_description">
diff --git a/docs/libs/html/gst-plugins-bad-libs-ISDB-variants-of-MPEG-TS-descriptors.html b/docs/libs/html/gst-plugins-bad-libs-ISDB-variants-of-MPEG-TS-descriptors.html
index 2e0bfae..6cf4c6a 100644
--- a/docs/libs/html/gst-plugins-bad-libs-ISDB-variants-of-MPEG-TS-descriptors.html
+++ b/docs/libs/html/gst-plugins-bad-libs-ISDB-variants-of-MPEG-TS-descriptors.html
@@ -3,7 +3,7 @@
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>ISDB variants of MPEG-TS descriptors: GStreamer Bad Plugins 1.0 Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
 <link rel="home" href="index.html" title="GStreamer Bad Plugins 1.0 Library Reference Manual">
 <link rel="up" href="mpegts.html" title="Mpeg TS helper library">
 <link rel="prev" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html" title="DVB variants of MPEG-TS descriptors">
@@ -33,7 +33,7 @@
 </tr></table></div>
 <div class="refsect1">
 <a name="gst-plugins-bad-libs-ISDB-variants-of-MPEG-TS-descriptors.other"></a><h2>Types and Values</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="name">
 <col class="description">
@@ -65,7 +65,7 @@
 <p>Consult the relevant specifications for more details.</p>
 <div class="refsect3">
 <a name="id-1.2.5.10.7.2.5"></a><h4>Members</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="300px" class="enum_members_name">
 <col class="enum_members_description">
diff --git a/docs/libs/html/gst-plugins-bad-libs-Mpeg-ts-helper-library.html b/docs/libs/html/gst-plugins-bad-libs-Mpeg-ts-helper-library.html
index f96b8b9..b54a2d1 100644
--- a/docs/libs/html/gst-plugins-bad-libs-Mpeg-ts-helper-library.html
+++ b/docs/libs/html/gst-plugins-bad-libs-Mpeg-ts-helper-library.html
@@ -3,7 +3,7 @@
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Mpeg-ts helper library: GStreamer Bad Plugins 1.0 Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
 <link rel="home" href="index.html" title="GStreamer Bad Plugins 1.0 Library Reference Manual">
 <link rel="up" href="mpegts.html" title="Mpeg TS helper library">
 <link rel="prev" href="mpegts.html" title="Mpeg TS helper library">
@@ -33,7 +33,7 @@
 </tr></table></div>
 <div class="refsect1">
 <a name="gst-plugins-bad-libs-Mpeg-ts-helper-library.functions"></a><h2>Functions</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="functions_return">
 <col class="functions_name">
diff --git a/docs/libs/html/gst-plugins-bad-libs-OpenGL-Formats.html b/docs/libs/html/gst-plugins-bad-libs-OpenGL-Formats.html
new file mode 100644
index 0000000..3fd841c
--- /dev/null
+++ b/docs/libs/html/gst-plugins-bad-libs-OpenGL-Formats.html
@@ -0,0 +1,549 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>OpenGL Formats: GStreamer Bad Plugins 1.0 Library Reference Manual</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
+<link rel="home" href="index.html" title="GStreamer Bad Plugins 1.0 Library Reference Manual">
+<link rel="up" href="gl.html" title="OpenGL Helper Library">
+<link rel="prev" href="gst-plugins-bad-libs-OpenGL-Miscellaneous-Utilities.html" title="OpenGL Miscellaneous Utilities">
+<link rel="next" href="player.html" title="Player Library">
+<meta name="generator" content="GTK-Doc V1.24 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="5"><tr valign="middle">
+<td width="100%" align="left" class="shortcuts">
+<a href="#" class="shortcut">Top</a><span id="nav_description">  <span class="dim">|</span> 
+                  <a href="#gst-plugins-bad-libs-OpenGL-Formats.description" class="shortcut">Description</a></span>
+</td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
+<td><a accesskey="u" href="gl.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
+<td><a accesskey="p" href="gst-plugins-bad-libs-OpenGL-Miscellaneous-Utilities.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
+<td><a accesskey="n" href="player.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
+</tr></table>
+<div class="refentry">
+<a name="gst-plugins-bad-libs-OpenGL-Formats"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="gst-plugins-bad-libs-OpenGL-Formats.top_of_page"></a>OpenGL Formats</span></h2>
+<p>OpenGL Formats</p>
+</td>
+<td class="gallery_image" valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsect1">
+<a name="gst-plugins-bad-libs-OpenGL-Formats.functions"></a><h2>Functions</h2>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="functions_return">
+<col class="functions_name">
+</colgroup>
+<tbody>
+<tr>
+<td class="function_type">
+<a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#guint"><span class="returnvalue">guint</span></a>
+</td>
+<td class="function_name">
+<a class="link" href="gst-plugins-bad-libs-OpenGL-Formats.html#gst-gl-format-type-n-bytes" title="gst_gl_format_type_n_bytes ()">gst_gl_format_type_n_bytes</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#guint"><span class="returnvalue">guint</span></a>
+</td>
+<td class="function_name">
+<a class="link" href="gst-plugins-bad-libs-OpenGL-Formats.html#gst-gl-texture-type-n-bytes" title="gst_gl_texture_type_n_bytes ()">gst_gl_texture_type_n_bytes</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#guint"><span class="returnvalue">guint</span></a>
+</td>
+<td class="function_name">
+<a class="link" href="gst-plugins-bad-libs-OpenGL-Formats.html#gst-gl-format-from-gl-texture-type" title="gst_gl_format_from_gl_texture_type ()">gst_gl_format_from_gl_texture_type</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">GstVideoGLTextureType</span>
+</td>
+<td class="function_name">
+<a class="link" href="gst-plugins-bad-libs-OpenGL-Formats.html#gst-gl-texture-type-from-format" title="gst_gl_texture_type_from_format ()">gst_gl_texture_type_from_format</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#guint"><span class="returnvalue">guint</span></a>
+</td>
+<td class="function_name">
+<a class="link" href="gst-plugins-bad-libs-OpenGL-Formats.html#gst-gl-sized-gl-format-from-gl-format-type" title="gst_gl_sized_gl_format_from_gl_format_type ()">gst_gl_sized_gl_format_from_gl_format_type</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a class="link" href="gst-plugins-bad-libs-OpenGL-Formats.html#GstGLTextureTarget" title="enum GstGLTextureTarget"><span class="returnvalue">GstGLTextureTarget</span></a>
+</td>
+<td class="function_name">
+<a class="link" href="gst-plugins-bad-libs-OpenGL-Formats.html#gst-gl-texture-target-from-string" title="gst_gl_texture_target_from_string ()">gst_gl_texture_target_from_string</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">const <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> *
+</td>
+<td class="function_name">
+<a class="link" href="gst-plugins-bad-libs-OpenGL-Formats.html#gst-gl-texture-target-to-string" title="gst_gl_texture_target_to_string ()">gst_gl_texture_target_to_string</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#guint"><span class="returnvalue">guint</span></a>
+</td>
+<td class="function_name">
+<a class="link" href="gst-plugins-bad-libs-OpenGL-Formats.html#gst-gl-texture-target-to-gl" title="gst_gl_texture_target_to_gl ()">gst_gl_texture_target_to_gl</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a class="link" href="gst-plugins-bad-libs-OpenGL-Formats.html#GstGLTextureTarget" title="enum GstGLTextureTarget"><span class="returnvalue">GstGLTextureTarget</span></a>
+</td>
+<td class="function_name">
+<a class="link" href="gst-plugins-bad-libs-OpenGL-Formats.html#gst-gl-texture-target-from-gl" title="gst_gl_texture_target_from_gl ()">gst_gl_texture_target_from_gl</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">const <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> *
+</td>
+<td class="function_name">
+<a class="link" href="gst-plugins-bad-libs-OpenGL-Formats.html#gst-gl-texture-target-to-buffer-pool-option" title="gst_gl_texture_target_to_buffer_pool_option ()">gst_gl_texture_target_to_buffer_pool_option</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-libs-OpenGL-Formats.other"></a><h2>Types and Values</h2>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="name">
+<col class="description">
+</colgroup>
+<tbody>
+<tr>
+<td class="datatype_keyword">enum</td>
+<td class="function_name"><a class="link" href="gst-plugins-bad-libs-OpenGL-Formats.html#GstGLTextureTarget" title="enum GstGLTextureTarget">GstGLTextureTarget</a></td>
+</tr>
+<tr>
+<td class="define_keyword">#define</td>
+<td class="function_name"><a class="link" href="gst-plugins-bad-libs-OpenGL-Formats.html#GST-GL-TEXTURE-TARGET-2D-STR:CAPS" title="GST_GL_TEXTURE_TARGET_2D_STR">GST_GL_TEXTURE_TARGET_2D_STR</a></td>
+</tr>
+<tr>
+<td class="define_keyword">#define</td>
+<td class="function_name"><a class="link" href="gst-plugins-bad-libs-OpenGL-Formats.html#GST-GL-TEXTURE-TARGET-RECTANGLE-STR:CAPS" title="GST_GL_TEXTURE_TARGET_RECTANGLE_STR">GST_GL_TEXTURE_TARGET_RECTANGLE_STR</a></td>
+</tr>
+<tr>
+<td class="define_keyword">#define</td>
+<td class="function_name"><a class="link" href="gst-plugins-bad-libs-OpenGL-Formats.html#GST-GL-TEXTURE-TARGET-EXTERNAL-OES-STR:CAPS" title="GST_GL_TEXTURE_TARGET_EXTERNAL_OES_STR">GST_GL_TEXTURE_TARGET_EXTERNAL_OES_STR</a></td>
+</tr>
+<tr>
+<td class="define_keyword">#define</td>
+<td class="function_name"><a class="link" href="gst-plugins-bad-libs-OpenGL-Formats.html#GST-BUFFER-POOL-OPTION-GL-TEXTURE-TARGET-2D:CAPS" title="GST_BUFFER_POOL_OPTION_GL_TEXTURE_TARGET_2D">GST_BUFFER_POOL_OPTION_GL_TEXTURE_TARGET_2D</a></td>
+</tr>
+<tr>
+<td class="define_keyword">#define</td>
+<td class="function_name"><a class="link" href="gst-plugins-bad-libs-OpenGL-Formats.html#GST-BUFFER-POOL-OPTION-GL-TEXTURE-TARGET-RECTANGLE:CAPS" title="GST_BUFFER_POOL_OPTION_GL_TEXTURE_TARGET_RECTANGLE">GST_BUFFER_POOL_OPTION_GL_TEXTURE_TARGET_RECTANGLE</a></td>
+</tr>
+<tr>
+<td class="define_keyword">#define</td>
+<td class="function_name"><a class="link" href="gst-plugins-bad-libs-OpenGL-Formats.html#GST-BUFFER-POOL-OPTION-GL-TEXTURE-TARGET-EXTERNAL-OES:CAPS" title="GST_BUFFER_POOL_OPTION_GL_TEXTURE_TARGET_EXTERNAL_OES">GST_BUFFER_POOL_OPTION_GL_TEXTURE_TARGET_EXTERNAL_OES</a></td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-libs-OpenGL-Formats.description"></a><h2>Description</h2>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-libs-OpenGL-Formats.functions_details"></a><h2>Functions</h2>
+<div class="refsect2">
+<a name="gst-gl-format-type-n-bytes"></a><h3>gst_gl_format_type_n_bytes ()</h3>
+<pre class="programlisting"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#guint"><span class="returnvalue">guint</span></a>
+gst_gl_format_type_n_bytes (<em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> format</code></em>,
+                            <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> type</code></em>);</pre>
+<div class="refsect3">
+<a name="id-1.2.9.34.6.2.4"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>format</p></td>
+<td class="parameter_description"><p>the OpenGL format, <code class="literal">GL_RGBA</code>, <code class="literal">GL_LUMINANCE</code>, etc</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>type</p></td>
+<td class="parameter_description"><p>the OpenGL type, <code class="literal">GL_UNSIGNED_BYTE</code>, <code class="literal">GL_FLOAT</code>, etc</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="id-1.2.9.34.6.2.5"></a><h4>Returns</h4>
+<p> the number of bytes the specified <em class="parameter"><code>format</code></em>
+, <em class="parameter"><code>type</code></em>
+combination takes
+per pixel</p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-gl-texture-type-n-bytes"></a><h3>gst_gl_texture_type_n_bytes ()</h3>
+<pre class="programlisting"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#guint"><span class="returnvalue">guint</span></a>
+gst_gl_texture_type_n_bytes (<em class="parameter"><code><span class="type">GstVideoGLTextureType</span> tex_format</code></em>);</pre>
+<div class="refsect3">
+<a name="id-1.2.9.34.6.3.4"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>tex_format</p></td>
+<td class="parameter_description"><p>a <span class="type">GstVideoGLTextureType</span></p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="id-1.2.9.34.6.3.5"></a><h4>Returns</h4>
+<p> the number of bytes <em class="parameter"><code>tex_format</code></em>
+used per pixel</p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-gl-format-from-gl-texture-type"></a><h3>gst_gl_format_from_gl_texture_type ()</h3>
+<pre class="programlisting"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#guint"><span class="returnvalue">guint</span></a>
+gst_gl_format_from_gl_texture_type (<em class="parameter"><code><span class="type">GstVideoGLTextureType</span> tex_format</code></em>);</pre>
+<div class="refsect3">
+<a name="id-1.2.9.34.6.4.4"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>tex_format</p></td>
+<td class="parameter_description"><p>a <span class="type">GstVideoGLTextureType</span></p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="id-1.2.9.34.6.4.5"></a><h4>Returns</h4>
+<p> the OpenGL format specified by <em class="parameter"><code>tex_format</code></em>
+</p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-gl-texture-type-from-format"></a><h3>gst_gl_texture_type_from_format ()</h3>
+<pre class="programlisting"><span class="returnvalue">GstVideoGLTextureType</span>
+gst_gl_texture_type_from_format (<em class="parameter"><code><a class="link" href="GstGLContext.html" title="GstGLContext"><span class="type">GstGLContext</span></a> *context</code></em>,
+                                 <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base-libs/html/gst-plugins-base-libs-gstvideo.html#GstVideoFormat"><span class="type">GstVideoFormat</span></a> v_format</code></em>,
+                                 <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> plane</code></em>);</pre>
+<div class="refsect3">
+<a name="id-1.2.9.34.6.5.4"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>context</p></td>
+<td class="parameter_description"><p>a <a class="link" href="GstGLContext.html" title="GstGLContext"><span class="type">GstGLContext</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>v_format</p></td>
+<td class="parameter_description"><p>a <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base-libs/html/gst-plugins-base-libs-gstvideo.html#GstVideoFormat"><span class="type">GstVideoFormat</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>plane</p></td>
+<td class="parameter_description"><p>the plane number (starting from 0)</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="id-1.2.9.34.6.5.5"></a><h4>Returns</h4>
+<p> the <span class="type">GstVideoGLTextureType</span> for the specified <em class="parameter"><code>format</code></em>
+and <em class="parameter"><code>plane</code></em>
+that can be allocated using <em class="parameter"><code>context</code></em>
+</p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-gl-sized-gl-format-from-gl-format-type"></a><h3>gst_gl_sized_gl_format_from_gl_format_type ()</h3>
+<pre class="programlisting"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#guint"><span class="returnvalue">guint</span></a>
+gst_gl_sized_gl_format_from_gl_format_type
+                               (<em class="parameter"><code><a class="link" href="GstGLContext.html" title="GstGLContext"><span class="type">GstGLContext</span></a> *context</code></em>,
+                                <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> format</code></em>,
+                                <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> type</code></em>);</pre>
+<div class="refsect3">
+<a name="id-1.2.9.34.6.6.4"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>context</p></td>
+<td class="parameter_description"><p>a <a class="link" href="GstGLContext.html" title="GstGLContext"><span class="type">GstGLContext</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>format</p></td>
+<td class="parameter_description"><p>an OpenGL format, <code class="literal">GL_RGBA</code>, <code class="literal">GL_LUMINANCE</code>, etc</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>type</p></td>
+<td class="parameter_description"><p>an OpenGL type, <code class="literal">GL_UNSIGNED_BYTE</code>, <code class="literal">GL_FLOAT</code>, etc</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="id-1.2.9.34.6.6.5"></a><h4>Returns</h4>
+<p> the sized internal format specified by <em class="parameter"><code>format</code></em>
+and <em class="parameter"><code>type</code></em>
+that can
+be used in <em class="parameter"><code>context</code></em>
+</p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-gl-texture-target-from-string"></a><h3>gst_gl_texture_target_from_string ()</h3>
+<pre class="programlisting"><a class="link" href="gst-plugins-bad-libs-OpenGL-Formats.html#GstGLTextureTarget" title="enum GstGLTextureTarget"><span class="returnvalue">GstGLTextureTarget</span></a>
+gst_gl_texture_target_from_string (<em class="parameter"><code>const <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *str</code></em>);</pre>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-gl-texture-target-to-string"></a><h3>gst_gl_texture_target_to_string ()</h3>
+<pre class="programlisting">const <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> *
+gst_gl_texture_target_to_string (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-OpenGL-Formats.html#GstGLTextureTarget" title="enum GstGLTextureTarget"><span class="type">GstGLTextureTarget</span></a> target</code></em>);</pre>
+<div class="refsect3">
+<a name="id-1.2.9.34.6.8.4"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>str</p></td>
+<td class="parameter_description"><p>a string equivalant to one of the GST_GL_TEXTURE_TARGET_*_STR values</p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="id-1.2.9.34.6.8.5"></a><h4>Returns</h4>
+<p> the <a class="link" href="gst-plugins-bad-libs-OpenGL-Formats.html#GstGLTextureTarget" title="enum GstGLTextureTarget"><span class="type">GstGLTextureTarget</span></a> represented by <em class="parameter"><code>str</code></em>
+or
+<a class="link" href="gst-plugins-bad-libs-OpenGL-Formats.html#GST-GL-TEXTURE-TARGET-NONE:CAPS"><code class="literal">GST_GL_TEXTURE_TARGET_NONE</code></a></p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-gl-texture-target-to-gl"></a><h3>gst_gl_texture_target_to_gl ()</h3>
+<pre class="programlisting"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#guint"><span class="returnvalue">guint</span></a>
+gst_gl_texture_target_to_gl (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-OpenGL-Formats.html#GstGLTextureTarget" title="enum GstGLTextureTarget"><span class="type">GstGLTextureTarget</span></a> target</code></em>);</pre>
+<div class="refsect3">
+<a name="id-1.2.9.34.6.9.4"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>target</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gst-plugins-bad-libs-OpenGL-Formats.html#GstGLTextureTarget" title="enum GstGLTextureTarget"><span class="type">GstGLTextureTarget</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="id-1.2.9.34.6.9.5"></a><h4>Returns</h4>
+<p> the OpenGL value for binding the <em class="parameter"><code>target</code></em>
+with <code class="function">glBindTexture()</code> and
+similar functions or 0</p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-gl-texture-target-from-gl"></a><h3>gst_gl_texture_target_from_gl ()</h3>
+<pre class="programlisting"><a class="link" href="gst-plugins-bad-libs-OpenGL-Formats.html#GstGLTextureTarget" title="enum GstGLTextureTarget"><span class="returnvalue">GstGLTextureTarget</span></a>
+gst_gl_texture_target_from_gl (<em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> target</code></em>);</pre>
+<div class="refsect3">
+<a name="id-1.2.9.34.6.10.4"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>target</p></td>
+<td class="parameter_description"><p>an OpenGL texture binding target</p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="id-1.2.9.34.6.10.5"></a><h4>Returns</h4>
+<p> the <a class="link" href="gst-plugins-bad-libs-OpenGL-Formats.html#GstGLTextureTarget" title="enum GstGLTextureTarget"><span class="type">GstGLTextureTarget</span></a> that's equiavalant to <em class="parameter"><code>target</code></em>
+or
+<a class="link" href="gst-plugins-bad-libs-OpenGL-Formats.html#GST-GL-TEXTURE-TARGET-NONE:CAPS"><code class="literal">GST_GL_TEXTURE_TARGET_NONE</code></a></p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-gl-texture-target-to-buffer-pool-option"></a><h3>gst_gl_texture_target_to_buffer_pool_option ()</h3>
+<pre class="programlisting">const <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> *
+gst_gl_texture_target_to_buffer_pool_option
+                               (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-OpenGL-Formats.html#GstGLTextureTarget" title="enum GstGLTextureTarget"><span class="type">GstGLTextureTarget</span></a> target</code></em>);</pre>
+<div class="refsect3">
+<a name="id-1.2.9.34.6.11.4"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>target</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gst-plugins-bad-libs-OpenGL-Formats.html#GstGLTextureTarget" title="enum GstGLTextureTarget"><span class="type">GstGLTextureTarget</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="id-1.2.9.34.6.11.5"></a><h4>Returns</h4>
+<p> a string representing the <em class="parameter"><code>GstBufferPoolOption</code></em>
+specified by <em class="parameter"><code>target</code></em>
+</p>
+</div>
+</div>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-libs-OpenGL-Formats.other_details"></a><h2>Types and Values</h2>
+<div class="refsect2">
+<a name="GstGLTextureTarget"></a><h3>enum GstGLTextureTarget</h3>
+<div class="refsect3">
+<a name="id-1.2.9.34.7.2.3"></a><h4>Members</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="300px" class="enum_members_name">
+<col class="enum_members_description">
+<col width="200px" class="enum_members_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="enum_member_name"><p><a name="GST-GL-TEXTURE-TARGET-NONE:CAPS"></a>GST_GL_TEXTURE_TARGET_NONE</p></td>
+<td class="enum_member_description">
+<p>no texture target</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-GL-TEXTURE-TARGET-2D:CAPS"></a>GST_GL_TEXTURE_TARGET_2D</p></td>
+<td class="enum_member_description">
+<p>2D texture target</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-GL-TEXTURE-TARGET-RECTANGLE:CAPS"></a>GST_GL_TEXTURE_TARGET_RECTANGLE</p></td>
+<td class="enum_member_description">
+<p>rectangle texture target</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-GL-TEXTURE-TARGET-EXTERNAL-OES:CAPS"></a>GST_GL_TEXTURE_TARGET_EXTERNAL_OES</p></td>
+<td class="enum_member_description">
+<p>external oes texture target</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<p class="since">Since: 1.8</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GST-GL-TEXTURE-TARGET-2D-STR:CAPS"></a><h3>GST_GL_TEXTURE_TARGET_2D_STR</h3>
+<pre class="programlisting">#define GST_GL_TEXTURE_TARGET_2D_STR "2D"
+</pre>
+<p>String used for <a class="link" href="gst-plugins-bad-libs-OpenGL-Formats.html#GST-GL-TEXTURE-TARGET-2D:CAPS"><code class="literal">GST_GL_TEXTURE_TARGET_2D</code></a> in things like caps values</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GST-GL-TEXTURE-TARGET-RECTANGLE-STR:CAPS"></a><h3>GST_GL_TEXTURE_TARGET_RECTANGLE_STR</h3>
+<pre class="programlisting">#define GST_GL_TEXTURE_TARGET_RECTANGLE_STR "rectangle"
+</pre>
+<p>String used for <a class="link" href="gst-plugins-bad-libs-OpenGL-Formats.html#GST-GL-TEXTURE-TARGET-RECTANGLE:CAPS"><code class="literal">GST_GL_TEXTURE_TARGET_RECTANGLE</code></a> in things like caps values</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GST-GL-TEXTURE-TARGET-EXTERNAL-OES-STR:CAPS"></a><h3>GST_GL_TEXTURE_TARGET_EXTERNAL_OES_STR</h3>
+<pre class="programlisting">#define GST_GL_TEXTURE_TARGET_EXTERNAL_OES_STR "external-oes"
+</pre>
+<p>String used for <a class="link" href="gst-plugins-bad-libs-OpenGL-Formats.html#GST-GL-TEXTURE-TARGET-EXTERNAL-OES:CAPS"><code class="literal">GST_GL_TEXTURE_TARGET_EXTERNAL_OES</code></a> in things like caps values</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GST-BUFFER-POOL-OPTION-GL-TEXTURE-TARGET-2D:CAPS"></a><h3>GST_BUFFER_POOL_OPTION_GL_TEXTURE_TARGET_2D</h3>
+<pre class="programlisting">#define GST_BUFFER_POOL_OPTION_GL_TEXTURE_TARGET_2D "GstBufferPoolOptionGLTextureTarget2D"
+</pre>
+<p>String used for <a class="link" href="gst-plugins-bad-libs-OpenGL-Formats.html#GST-GL-TEXTURE-TARGET-2D:CAPS"><code class="literal">GST_GL_TEXTURE_TARGET_2D</code></a> as a <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstBufferPool.html"><span class="type">GstBufferPool</span></a> pool option</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GST-BUFFER-POOL-OPTION-GL-TEXTURE-TARGET-RECTANGLE:CAPS"></a><h3>GST_BUFFER_POOL_OPTION_GL_TEXTURE_TARGET_RECTANGLE</h3>
+<pre class="programlisting">#define GST_BUFFER_POOL_OPTION_GL_TEXTURE_TARGET_RECTANGLE "GstBufferPoolOptionGLTextureTargetRectangle"
+</pre>
+<p>String used for <a class="link" href="gst-plugins-bad-libs-OpenGL-Formats.html#GST-GL-TEXTURE-TARGET-RECTANGLE:CAPS"><code class="literal">GST_GL_TEXTURE_TARGET_RECTANGLE</code></a> as a <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstBufferPool.html"><span class="type">GstBufferPool</span></a> pool option</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GST-BUFFER-POOL-OPTION-GL-TEXTURE-TARGET-EXTERNAL-OES:CAPS"></a><h3>GST_BUFFER_POOL_OPTION_GL_TEXTURE_TARGET_EXTERNAL_OES</h3>
+<pre class="programlisting">#define GST_BUFFER_POOL_OPTION_GL_TEXTURE_TARGET_EXTERNAL_OES "GstBufferPoolOptionGLTextureTargetExternalOES"
+</pre>
+<p>String used for <code class="literal">GST_GL_TEXTURE_TARGET_ESTERNAL_OES</code> as a <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstBufferPool.html"><span class="type">GstBufferPool</span></a> pool option</p>
+</div>
+</div>
+</div>
+<div class="footer">
+<hr>Generated by GTK-Doc V1.24</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/libs/html/gst-plugins-bad-libs-Utilities.html b/docs/libs/html/gst-plugins-bad-libs-OpenGL-Miscellaneous-Utilities.html
similarity index 60%
rename from docs/libs/html/gst-plugins-bad-libs-Utilities.html
rename to docs/libs/html/gst-plugins-bad-libs-OpenGL-Miscellaneous-Utilities.html
index 54c7260..cd64ef4 100644
--- a/docs/libs/html/gst-plugins-bad-libs-Utilities.html
+++ b/docs/libs/html/gst-plugins-bad-libs-OpenGL-Miscellaneous-Utilities.html
@@ -2,12 +2,12 @@
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Utilities: GStreamer Bad Plugins 1.0 Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<title>OpenGL Miscellaneous Utilities: GStreamer Bad Plugins 1.0 Library Reference Manual</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
 <link rel="home" href="index.html" title="GStreamer Bad Plugins 1.0 Library Reference Manual">
 <link rel="up" href="gl.html" title="OpenGL Helper Library">
-<link rel="prev" href="GstGLUploadMeta.html" title="GstGLUploadMeta">
-<link rel="next" href="GstGLWindow.html" title="GstGLWindow">
+<link rel="prev" href="gst-plugins-bad-libs-OpenGL-debugging.html" title="OpenGL debugging">
+<link rel="next" href="gst-plugins-bad-libs-OpenGL-Formats.html" title="OpenGL Formats">
 <meta name="generator" content="GTK-Doc V1.24 (XML mode)">
 <link rel="stylesheet" href="style.css" type="text/css">
 </head>
@@ -15,25 +15,25 @@
 <table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="5"><tr valign="middle">
 <td width="100%" align="left" class="shortcuts">
 <a href="#" class="shortcut">Top</a><span id="nav_description">  <span class="dim">|</span> 
-                  <a href="#gst-plugins-bad-libs-Utilities.description" class="shortcut">Description</a></span>
+                  <a href="#gst-plugins-bad-libs-OpenGL-Miscellaneous-Utilities.description" class="shortcut">Description</a></span>
 </td>
 <td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
 <td><a accesskey="u" href="gl.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
-<td><a accesskey="p" href="GstGLUploadMeta.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
-<td><a accesskey="n" href="GstGLWindow.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
+<td><a accesskey="p" href="gst-plugins-bad-libs-OpenGL-debugging.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
+<td><a accesskey="n" href="gst-plugins-bad-libs-OpenGL-Formats.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
 </tr></table>
 <div class="refentry">
-<a name="gst-plugins-bad-libs-Utilities"></a><div class="titlepage"></div>
+<a name="gst-plugins-bad-libs-OpenGL-Miscellaneous-Utilities"></a><div class="titlepage"></div>
 <div class="refnamediv"><table width="100%"><tr>
 <td valign="top">
-<h2><span class="refentrytitle"><a name="gst-plugins-bad-libs-Utilities.top_of_page"></a>Utilities</span></h2>
-<p>Utilities</p>
+<h2><span class="refentrytitle"><a name="gst-plugins-bad-libs-OpenGL-Miscellaneous-Utilities.top_of_page"></a>OpenGL Miscellaneous Utilities</span></h2>
+<p>OpenGL Miscellaneous Utilities</p>
 </td>
 <td class="gallery_image" valign="top" align="right"></td>
 </tr></table></div>
 <div class="refsect1">
-<a name="gst-plugins-bad-libs-Utilities.functions"></a><h2>Functions</h2>
-<div class="informaltable"><table width="100%" border="0">
+<a name="gst-plugins-bad-libs-OpenGL-Miscellaneous-Utilities.functions"></a><h2>Functions</h2>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="functions_return">
 <col class="functions_name">
@@ -44,7 +44,7 @@
 <span class="returnvalue">void</span>
 </td>
 <td class="function_name">
-<span class="c_punctuation">(</span><a class="link" href="gst-plugins-bad-libs-Utilities.html#GLCB:CAPS" title="GLCB ()">*GLCB</a><span class="c_punctuation">)</span> <span class="c_punctuation">()</span>
+<span class="c_punctuation">(</span><a class="link" href="gst-plugins-bad-libs-OpenGL-Miscellaneous-Utilities.html#GLCB:CAPS" title="GLCB ()">*GLCB</a><span class="c_punctuation">)</span> <span class="c_punctuation">()</span>
 </td>
 </tr>
 <tr>
@@ -52,7 +52,7 @@
 <span class="returnvalue">void</span>
 </td>
 <td class="function_name">
-<span class="c_punctuation">(</span><a class="link" href="gst-plugins-bad-libs-Utilities.html#GLCB-V2:CAPS" title="GLCB_V2 ()">*GLCB_V2</a><span class="c_punctuation">)</span> <span class="c_punctuation">()</span>
+<span class="c_punctuation">(</span><a class="link" href="gst-plugins-bad-libs-OpenGL-Miscellaneous-Utilities.html#GLCB-V2:CAPS" title="GLCB_V2 ()">*GLCB_V2</a><span class="c_punctuation">)</span> <span class="c_punctuation">()</span>
 </td>
 </tr>
 <tr>
@@ -60,7 +60,7 @@
 <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
 </td>
 <td class="function_name">
-<span class="c_punctuation">(</span><a class="link" href="gst-plugins-bad-libs-Utilities.html#CDCB:CAPS" title="CDCB ()">*CDCB</a><span class="c_punctuation">)</span> <span class="c_punctuation">()</span>
+<span class="c_punctuation">(</span><a class="link" href="gst-plugins-bad-libs-OpenGL-Miscellaneous-Utilities.html#CDCB:CAPS" title="CDCB ()">*CDCB</a><span class="c_punctuation">)</span> <span class="c_punctuation">()</span>
 </td>
 </tr>
 <tr>
@@ -68,7 +68,7 @@
 <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
 </td>
 <td class="function_name">
-<a class="link" href="gst-plugins-bad-libs-Utilities.html#gst-gl-handle-set-context" title="gst_gl_handle_set_context ()">gst_gl_handle_set_context</a> <span class="c_punctuation">()</span>
+<a class="link" href="gst-plugins-bad-libs-OpenGL-Miscellaneous-Utilities.html#gst-gl-handle-set-context" title="gst_gl_handle_set_context ()">gst_gl_handle_set_context</a> <span class="c_punctuation">()</span>
 </td>
 </tr>
 <tr>
@@ -76,7 +76,7 @@
 <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
 </td>
 <td class="function_name">
-<a class="link" href="gst-plugins-bad-libs-Utilities.html#gst-gl-handle-context-query" title="gst_gl_handle_context_query ()">gst_gl_handle_context_query</a> <span class="c_punctuation">()</span>
+<a class="link" href="gst-plugins-bad-libs-OpenGL-Miscellaneous-Utilities.html#gst-gl-handle-context-query" title="gst_gl_handle_context_query ()">gst_gl_handle_context_query</a> <span class="c_punctuation">()</span>
 </td>
 </tr>
 <tr>
@@ -84,7 +84,7 @@
 <span class="returnvalue">void</span>
 </td>
 <td class="function_name">
-<a class="link" href="gst-plugins-bad-libs-Utilities.html#gst-gl-context-gen-texture" title="gst_gl_context_gen_texture ()">gst_gl_context_gen_texture</a> <span class="c_punctuation">()</span>
+<a class="link" href="gst-plugins-bad-libs-OpenGL-Miscellaneous-Utilities.html#gst-gl-context-gen-texture" title="gst_gl_context_gen_texture ()">gst_gl_context_gen_texture</a> <span class="c_punctuation">()</span>
 </td>
 </tr>
 <tr>
@@ -92,7 +92,7 @@
 <span class="returnvalue">void</span>
 </td>
 <td class="function_name">
-<a class="link" href="gst-plugins-bad-libs-Utilities.html#gst-gl-context-del-texture" title="gst_gl_context_del_texture ()">gst_gl_context_del_texture</a> <span class="c_punctuation">()</span>
+<a class="link" href="gst-plugins-bad-libs-OpenGL-Miscellaneous-Utilities.html#gst-gl-context-del-texture" title="gst_gl_context_del_texture ()">gst_gl_context_del_texture</a> <span class="c_punctuation">()</span>
 </td>
 </tr>
 <tr>
@@ -100,7 +100,7 @@
 <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
 </td>
 <td class="function_name">
-<a class="link" href="gst-plugins-bad-libs-Utilities.html#gst-gl-context-gen-fbo" title="gst_gl_context_gen_fbo ()">gst_gl_context_gen_fbo</a> <span class="c_punctuation">()</span>
+<a class="link" href="gst-plugins-bad-libs-OpenGL-Miscellaneous-Utilities.html#gst-gl-context-gen-fbo" title="gst_gl_context_gen_fbo ()">gst_gl_context_gen_fbo</a> <span class="c_punctuation">()</span>
 </td>
 </tr>
 <tr>
@@ -108,7 +108,7 @@
 <span class="returnvalue">void</span>
 </td>
 <td class="function_name">
-<a class="link" href="gst-plugins-bad-libs-Utilities.html#gst-gl-context-del-fbo" title="gst_gl_context_del_fbo ()">gst_gl_context_del_fbo</a> <span class="c_punctuation">()</span>
+<a class="link" href="gst-plugins-bad-libs-OpenGL-Miscellaneous-Utilities.html#gst-gl-context-del-fbo" title="gst_gl_context_del_fbo ()">gst_gl_context_del_fbo</a> <span class="c_punctuation">()</span>
 </td>
 </tr>
 <tr>
@@ -116,7 +116,7 @@
 <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
 </td>
 <td class="function_name">
-<a class="link" href="gst-plugins-bad-libs-Utilities.html#gst-gl-context-use-fbo-v2" title="gst_gl_context_use_fbo_v2 ()">gst_gl_context_use_fbo_v2</a> <span class="c_punctuation">()</span>
+<a class="link" href="gst-plugins-bad-libs-OpenGL-Miscellaneous-Utilities.html#gst-gl-context-use-fbo-v2" title="gst_gl_context_use_fbo_v2 ()">gst_gl_context_use_fbo_v2</a> <span class="c_punctuation">()</span>
 </td>
 </tr>
 <tr>
@@ -124,7 +124,7 @@
 <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
 </td>
 <td class="function_name">
-<a class="link" href="gst-plugins-bad-libs-Utilities.html#gst-gl-context-gen-shader" title="gst_gl_context_gen_shader ()">gst_gl_context_gen_shader</a> <span class="c_punctuation">()</span>
+<a class="link" href="gst-plugins-bad-libs-OpenGL-Miscellaneous-Utilities.html#gst-gl-context-gen-shader" title="gst_gl_context_gen_shader ()">gst_gl_context_gen_shader</a> <span class="c_punctuation">()</span>
 </td>
 </tr>
 <tr>
@@ -132,7 +132,7 @@
 <span class="returnvalue">void</span>
 </td>
 <td class="function_name">
-<a class="link" href="gst-plugins-bad-libs-Utilities.html#gst-gl-context-del-shader" title="gst_gl_context_del_shader ()">gst_gl_context_del_shader</a> <span class="c_punctuation">()</span>
+<a class="link" href="gst-plugins-bad-libs-OpenGL-Miscellaneous-Utilities.html#gst-gl-context-del-shader" title="gst_gl_context_del_shader ()">gst_gl_context_del_shader</a> <span class="c_punctuation">()</span>
 </td>
 </tr>
 <tr>
@@ -140,7 +140,7 @@
 <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
 </td>
 <td class="function_name">
-<a class="link" href="gst-plugins-bad-libs-Utilities.html#gst-gl-context-check-framebuffer-status" title="gst_gl_context_check_framebuffer_status ()">gst_gl_context_check_framebuffer_status</a> <span class="c_punctuation">()</span>
+<a class="link" href="gst-plugins-bad-libs-OpenGL-Miscellaneous-Utilities.html#gst-gl-context-check-framebuffer-status" title="gst_gl_context_check_framebuffer_status ()">gst_gl_context_check_framebuffer_status</a> <span class="c_punctuation">()</span>
 </td>
 </tr>
 <tr>
@@ -148,7 +148,7 @@
 <span class="returnvalue">void</span>
 </td>
 <td class="function_name">
-<a class="link" href="gst-plugins-bad-libs-Utilities.html#gst-gl-context-set-error" title="gst_gl_context_set_error ()">gst_gl_context_set_error</a> <span class="c_punctuation">()</span>
+<a class="link" href="gst-plugins-bad-libs-OpenGL-Miscellaneous-Utilities.html#gst-gl-context-set-error" title="gst_gl_context_set_error ()">gst_gl_context_set_error</a> <span class="c_punctuation">()</span>
 </td>
 </tr>
 <tr>
@@ -156,7 +156,7 @@
 <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> *
 </td>
 <td class="function_name">
-<a class="link" href="gst-plugins-bad-libs-Utilities.html#gst-gl-context-get-error" title="gst_gl_context_get_error ()">gst_gl_context_get_error</a> <span class="c_punctuation">()</span>
+<a class="link" href="gst-plugins-bad-libs-OpenGL-Miscellaneous-Utilities.html#gst-gl-context-get-error" title="gst_gl_context_get_error ()">gst_gl_context_get_error</a> <span class="c_punctuation">()</span>
 </td>
 </tr>
 <tr>
@@ -164,7 +164,7 @@
 <span class="returnvalue">void</span>
 </td>
 <td class="function_name">
-<a class="link" href="gst-plugins-bad-libs-Utilities.html#gst-gl-context-clear-shader" title="gst_gl_context_clear_shader ()">gst_gl_context_clear_shader</a> <span class="c_punctuation">()</span>
+<a class="link" href="gst-plugins-bad-libs-OpenGL-Miscellaneous-Utilities.html#gst-gl-context-clear-shader" title="gst_gl_context_clear_shader ()">gst_gl_context_clear_shader</a> <span class="c_punctuation">()</span>
 </td>
 </tr>
 <tr>
@@ -172,7 +172,7 @@
 <span class="returnvalue">void</span>
 </td>
 <td class="function_name">
-<a class="link" href="gst-plugins-bad-libs-Utilities.html#gst-gl-generate-texture-full" title="gst_gl_generate_texture_full ()">gst_gl_generate_texture_full</a> <span class="c_punctuation">()</span>
+<a class="link" href="gst-plugins-bad-libs-OpenGL-Miscellaneous-Utilities.html#gst-gl-generate-texture-full" title="gst_gl_generate_texture_full ()">gst_gl_generate_texture_full</a> <span class="c_punctuation">()</span>
 </td>
 </tr>
 <tr>
@@ -180,7 +180,7 @@
 <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstCaps.html"><span class="returnvalue">GstCaps</span></a> *
 </td>
 <td class="function_name">
-<a class="link" href="gst-plugins-bad-libs-Utilities.html#gst-gl-caps-replace-all-caps-features" title="gst_gl_caps_replace_all_caps_features ()">gst_gl_caps_replace_all_caps_features</a> <span class="c_punctuation">()</span>
+<a class="link" href="gst-plugins-bad-libs-OpenGL-Miscellaneous-Utilities.html#gst-gl-caps-replace-all-caps-features" title="gst_gl_caps_replace_all_caps_features ()">gst_gl_caps_replace_all_caps_features</a> <span class="c_punctuation">()</span>
 </td>
 </tr>
 <tr>
@@ -188,7 +188,7 @@
 <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
 </td>
 <td class="function_name">
-<a class="link" href="gst-plugins-bad-libs-Utilities.html#gst-gl-ensure-element-data" title="gst_gl_ensure_element_data ()">gst_gl_ensure_element_data</a> <span class="c_punctuation">()</span>
+<a class="link" href="gst-plugins-bad-libs-OpenGL-Miscellaneous-Utilities.html#gst-gl-ensure-element-data" title="gst_gl_ensure_element_data ()">gst_gl_ensure_element_data</a> <span class="c_punctuation">()</span>
 </td>
 </tr>
 <tr>
@@ -196,7 +196,15 @@
 <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gsize"><span class="returnvalue">gsize</span></a>
 </td>
 <td class="function_name">
-<a class="link" href="gst-plugins-bad-libs-Utilities.html#gst-gl-get-plane-data-size" title="gst_gl_get_plane_data_size ()">gst_gl_get_plane_data_size</a> <span class="c_punctuation">()</span>
+<a class="link" href="gst-plugins-bad-libs-OpenGL-Miscellaneous-Utilities.html#gst-gl-get-plane-data-size" title="gst_gl_get_plane_data_size ()">gst_gl_get_plane_data_size</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gsize"><span class="returnvalue">gsize</span></a>
+</td>
+<td class="function_name">
+<a class="link" href="gst-plugins-bad-libs-OpenGL-Miscellaneous-Utilities.html#gst-gl-get-plane-start" title="gst_gl_get_plane_start ()">gst_gl_get_plane_start</a> <span class="c_punctuation">()</span>
 </td>
 </tr>
 <tr>
@@ -204,30 +212,54 @@
 <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
 </td>
 <td class="function_name">
-<a class="link" href="gst-plugins-bad-libs-Utilities.html#gst-gl-run-query" title="gst_gl_run_query ()">gst_gl_run_query</a> <span class="c_punctuation">()</span>
+<a class="link" href="gst-plugins-bad-libs-OpenGL-Miscellaneous-Utilities.html#gst-gl-run-query" title="gst_gl_run_query ()">gst_gl_run_query</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a class="link" href="gst-plugins-bad-libs-OpenGL-Formats.html#GstGLTextureTarget" title="enum GstGLTextureTarget"><span class="returnvalue">GstGLTextureTarget</span></a>
+</td>
+<td class="function_name">
+<a class="link" href="gst-plugins-bad-libs-OpenGL-Miscellaneous-Utilities.html#gst-gl-value-get-texture-target-mask" title="gst_gl_value_get_texture_target_mask ()">gst_gl_value_get_texture_target_mask</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
+</td>
+<td class="function_name">
+<a class="link" href="gst-plugins-bad-libs-OpenGL-Miscellaneous-Utilities.html#gst-gl-value-set-texture-target" title="gst_gl_value_set_texture_target ()">gst_gl_value_set_texture_target</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
+</td>
+<td class="function_name">
+<a class="link" href="gst-plugins-bad-libs-OpenGL-Miscellaneous-Utilities.html#gst-gl-value-set-texture-target-from-mask" title="gst_gl_value_set_texture_target_from_mask ()">gst_gl_value_set_texture_target_from_mask</a> <span class="c_punctuation">()</span>
 </td>
 </tr>
 </tbody>
 </table></div>
 </div>
 <div class="refsect1">
-<a name="gst-plugins-bad-libs-Utilities.other"></a><h2>Types and Values</h2>
-<div class="informaltable"><table width="100%" border="0">
+<a name="gst-plugins-bad-libs-OpenGL-Miscellaneous-Utilities.other"></a><h2>Types and Values</h2>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="name">
 <col class="description">
 </colgroup>
 <tbody><tr>
 <td class="datatype_keyword">enum</td>
-<td class="function_name"><a class="link" href="gst-plugins-bad-libs-Utilities.html#GstGLDisplayProjection" title="enum GstGLDisplayProjection">GstGLDisplayProjection</a></td>
+<td class="function_name"><a class="link" href="gst-plugins-bad-libs-OpenGL-Miscellaneous-Utilities.html#GstGLDisplayProjection" title="enum GstGLDisplayProjection">GstGLDisplayProjection</a></td>
 </tr></tbody>
 </table></div>
 </div>
 <div class="refsect1">
-<a name="gst-plugins-bad-libs-Utilities.description"></a><h2>Description</h2>
+<a name="gst-plugins-bad-libs-OpenGL-Miscellaneous-Utilities.description"></a><h2>Description</h2>
 </div>
 <div class="refsect1">
-<a name="gst-plugins-bad-libs-Utilities.functions_details"></a><h2>Functions</h2>
+<a name="gst-plugins-bad-libs-OpenGL-Miscellaneous-Utilities.functions_details"></a><h2>Functions</h2>
 <div class="refsect2">
 <a name="GLCB:CAPS"></a><h3>GLCB ()</h3>
 <pre class="programlisting"><span class="returnvalue">void</span>
@@ -237,8 +269,8 @@
          <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> stuff</code></em>);</pre>
 <p>callback definition for operating on textures</p>
 <div class="refsect3">
-<a name="id-1.2.9.22.6.2.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="id-1.2.9.33.6.2.5"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
 <col class="parameters_description">
@@ -276,8 +308,8 @@
 <span class="c_punctuation">(</span>*GLCB_V2<span class="c_punctuation">)</span> (<em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> stuff</code></em>);</pre>
 <p>callback definition for operating through a Framebuffer object</p>
 <div class="refsect3">
-<a name="id-1.2.9.22.6.3.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="id-1.2.9.33.6.3.5"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
 <col class="parameters_description">
@@ -301,8 +333,8 @@
          <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> data</code></em>);</pre>
 <p>client draw callback</p>
 <div class="refsect3">
-<a name="id-1.2.9.22.6.4.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="id-1.2.9.33.6.4.5"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
 <col class="parameters_description">
@@ -396,7 +428,7 @@
                            <em class="parameter"><code><span class="type">GLuint</span> fbo</code></em>,
                            <em class="parameter"><code><span class="type">GLuint</span> depth_buffer</code></em>,
                            <em class="parameter"><code><span class="type">GLuint</span> texture_fbo</code></em>,
-                           <em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-Utilities.html#GLCB-V2:CAPS" title="GLCB_V2 ()"><span class="type">GLCB_V2</span></a> cb</code></em>,
+                           <em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-OpenGL-Miscellaneous-Utilities.html#GLCB-V2:CAPS" title="GLCB_V2 ()"><span class="type">GLCB_V2</span></a> cb</code></em>,
                            <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> stuff</code></em>);</pre>
 </div>
 <hr>
@@ -406,14 +438,14 @@
 gst_gl_context_gen_shader (<em class="parameter"><code><a class="link" href="GstGLContext.html" title="GstGLContext"><span class="type">GstGLContext</span></a> *context</code></em>,
                            <em class="parameter"><code>const <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *shader_vertex_source</code></em>,
                            <em class="parameter"><code>const <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *shader_fragment_source</code></em>,
-                           <em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-gstglshader.html#GstGLShader"><span class="type">GstGLShader</span></a> **shader</code></em>);</pre>
+                           <em class="parameter"><code><a class="link" href="GstGLShader.html" title="GstGLShader"><span class="type">GstGLShader</span></a> **shader</code></em>);</pre>
 </div>
 <hr>
 <div class="refsect2">
 <a name="gst-gl-context-del-shader"></a><h3>gst_gl_context_del_shader ()</h3>
 <pre class="programlisting"><span class="returnvalue">void</span>
 gst_gl_context_del_shader (<em class="parameter"><code><a class="link" href="GstGLContext.html" title="GstGLContext"><span class="type">GstGLContext</span></a> *context</code></em>,
-                           <em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-gstglshader.html#GstGLShader"><span class="type">GstGLShader</span></a> *shader</code></em>);</pre>
+                           <em class="parameter"><code><a class="link" href="GstGLShader.html" title="GstGLShader"><span class="type">GstGLShader</span></a> *shader</code></em>);</pre>
 </div>
 <hr>
 <div class="refsect2">
@@ -441,6 +473,23 @@
 <a name="gst-gl-context-clear-shader"></a><h3>gst_gl_context_clear_shader ()</h3>
 <pre class="programlisting"><span class="returnvalue">void</span>
 gst_gl_context_clear_shader (<em class="parameter"><code><a class="link" href="GstGLContext.html" title="GstGLContext"><span class="type">GstGLContext</span></a> *context</code></em>);</pre>
+<p>Clear's the currently set shader from the GL state machine.</p>
+<p>Note: must be called in the GL thread.</p>
+<div class="refsect3">
+<a name="id-1.2.9.33.6.17.6"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>context</p></td>
+<td class="parameter_description"><p>a <a class="link" href="GstGLContext.html" title="GstGLContext"><span class="type">GstGLContext</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
 </div>
 <hr>
 <div class="refsect2">
@@ -479,20 +528,128 @@
 </div>
 <hr>
 <div class="refsect2">
+<a name="gst-gl-get-plane-start"></a><h3>gst_gl_get_plane_start ()</h3>
+<pre class="programlisting"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gsize"><span class="returnvalue">gsize</span></a>
+gst_gl_get_plane_start (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base-libs/html/gst-plugins-base-libs-gstvideo.html#GstVideoInfo"><span class="type">GstVideoInfo</span></a> *info</code></em>,
+                        <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base-libs/html/gst-plugins-base-libs-gstvideo.html#GstVideoAlignment"><span class="type">GstVideoAlignment</span></a> *valign</code></em>,
+                        <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> plane</code></em>);</pre>
+</div>
+<hr>
+<div class="refsect2">
 <a name="gst-gl-run-query"></a><h3>gst_gl_run_query ()</h3>
 <pre class="programlisting"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
 gst_gl_run_query (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html"><span class="type">GstElement</span></a> *element</code></em>,
                   <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstQuery.html"><span class="type">GstQuery</span></a> *query</code></em>,
                   <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html#GstPadDirection"><span class="type">GstPadDirection</span></a> direction</code></em>);</pre>
 </div>
+<hr>
+<div class="refsect2">
+<a name="gst-gl-value-get-texture-target-mask"></a><h3>gst_gl_value_get_texture_target_mask ()</h3>
+<pre class="programlisting"><a class="link" href="gst-plugins-bad-libs-OpenGL-Formats.html#GstGLTextureTarget" title="enum GstGLTextureTarget"><span class="returnvalue">GstGLTextureTarget</span></a>
+gst_gl_value_get_texture_target_mask (<em class="parameter"><code>const <a href="https://developer.gnome.org/gobject/unstable/gobject-Generic-values.html#GValue"><span class="type">GValue</span></a> *value</code></em>);</pre>
+<p>See <a class="link" href="gst-plugins-bad-libs-OpenGL-Miscellaneous-Utilities.html#gst-gl-value-set-texture-target-from-mask" title="gst_gl_value_set_texture_target_from_mask ()"><code class="function">gst_gl_value_set_texture_target_from_mask()</code></a> for what entails a mask</p>
+<div class="refsect3">
+<a name="id-1.2.9.33.6.24.5"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>value</p></td>
+<td class="parameter_description"><p>an initialized <a href="https://developer.gnome.org/gobject/unstable/gobject-Generic-values.html#GValue"><span class="type">GValue</span></a> of type G_TYPE_STRING</p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="id-1.2.9.33.6.24.6"></a><h4>Returns</h4>
+<p> the mask of <a class="link" href="gst-plugins-bad-libs-OpenGL-Formats.html#GstGLTextureTarget" title="enum GstGLTextureTarget"><span class="type">GstGLTextureTarget</span></a>'s in <em class="parameter"><code>value</code></em>
+</p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-gl-value-set-texture-target"></a><h3>gst_gl_value_set_texture_target ()</h3>
+<pre class="programlisting"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
+gst_gl_value_set_texture_target (<em class="parameter"><code><a href="https://developer.gnome.org/gobject/unstable/gobject-Generic-values.html#GValue"><span class="type">GValue</span></a> *value</code></em>,
+                                 <em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-OpenGL-Formats.html#GstGLTextureTarget" title="enum GstGLTextureTarget"><span class="type">GstGLTextureTarget</span></a> target</code></em>);</pre>
+<div class="refsect3">
+<a name="id-1.2.9.33.6.25.4"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>value</p></td>
+<td class="parameter_description"><p>an initialized <a href="https://developer.gnome.org/gobject/unstable/gobject-Generic-values.html#GValue"><span class="type">GValue</span></a> of type G_TYPE_STRING</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>target</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gst-plugins-bad-libs-OpenGL-Formats.html#GstGLTextureTarget" title="enum GstGLTextureTarget"><span class="type">GstGLTextureTarget</span></a>'s</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="id-1.2.9.33.6.25.5"></a><h4>Returns</h4>
+<p> whether the <em class="parameter"><code>target</code></em>
+could be set on <em class="parameter"><code>value</code></em>
+</p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-gl-value-set-texture-target-from-mask"></a><h3>gst_gl_value_set_texture_target_from_mask ()</h3>
+<pre class="programlisting"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
+gst_gl_value_set_texture_target_from_mask
+                               (<em class="parameter"><code><a href="https://developer.gnome.org/gobject/unstable/gobject-Generic-values.html#GValue"><span class="type">GValue</span></a> *value</code></em>,
+                                <em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-OpenGL-Formats.html#GstGLTextureTarget" title="enum GstGLTextureTarget"><span class="type">GstGLTextureTarget</span></a> target_mask</code></em>);</pre>
+<p>A mask is a bitwise OR of (1 &lt;&lt; target) where target is a valid
+<a class="link" href="gst-plugins-bad-libs-OpenGL-Formats.html#GstGLTextureTarget" title="enum GstGLTextureTarget"><span class="type">GstGLTextureTarget</span></a></p>
+<div class="refsect3">
+<a name="id-1.2.9.33.6.26.5"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>value</p></td>
+<td class="parameter_description"><p>an uninitialized <a href="https://developer.gnome.org/gobject/unstable/gobject-Generic-values.html#GValue"><span class="type">GValue</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>target_mask</p></td>
+<td class="parameter_description"><p>a bitwise mask of <a class="link" href="gst-plugins-bad-libs-OpenGL-Formats.html#GstGLTextureTarget" title="enum GstGLTextureTarget"><span class="type">GstGLTextureTarget</span></a>'s</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="id-1.2.9.33.6.26.6"></a><h4>Returns</h4>
+<p> whether the <em class="parameter"><code>target_mask</code></em>
+could be set on <em class="parameter"><code>value</code></em>
+</p>
+</div>
+</div>
 </div>
 <div class="refsect1">
-<a name="gst-plugins-bad-libs-Utilities.other_details"></a><h2>Types and Values</h2>
+<a name="gst-plugins-bad-libs-OpenGL-Miscellaneous-Utilities.other_details"></a><h2>Types and Values</h2>
 <div class="refsect2">
 <a name="GstGLDisplayProjection"></a><h3>enum GstGLDisplayProjection</h3>
 <div class="refsect3">
-<a name="id-1.2.9.22.7.2.3"></a><h4>Members</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="id-1.2.9.33.7.2.3"></a><h4>Members</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="300px" class="enum_members_name">
 <col class="enum_members_description">
diff --git a/docs/libs/html/gst-plugins-bad-libs-OpenGL-debugging.html b/docs/libs/html/gst-plugins-bad-libs-OpenGL-debugging.html
new file mode 100644
index 0000000..1737f14
--- /dev/null
+++ b/docs/libs/html/gst-plugins-bad-libs-OpenGL-debugging.html
@@ -0,0 +1,648 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>OpenGL debugging: GStreamer Bad Plugins 1.0 Library Reference Manual</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
+<link rel="home" href="index.html" title="GStreamer Bad Plugins 1.0 Library Reference Manual">
+<link rel="up" href="gl.html" title="OpenGL Helper Library">
+<link rel="prev" href="gst-plugins-bad-libs-GstGLWindowX11.html" title="GstGLWindowX11">
+<link rel="next" href="gst-plugins-bad-libs-OpenGL-Miscellaneous-Utilities.html" title="OpenGL Miscellaneous Utilities">
+<meta name="generator" content="GTK-Doc V1.24 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="5"><tr valign="middle">
+<td width="100%" align="left" class="shortcuts">
+<a href="#" class="shortcut">Top</a><span id="nav_description">  <span class="dim">|</span> 
+                  <a href="#gst-plugins-bad-libs-OpenGL-debugging.description" class="shortcut">Description</a></span>
+</td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
+<td><a accesskey="u" href="gl.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
+<td><a accesskey="p" href="gst-plugins-bad-libs-GstGLWindowX11.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
+<td><a accesskey="n" href="gst-plugins-bad-libs-OpenGL-Miscellaneous-Utilities.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
+</tr></table>
+<div class="refentry">
+<a name="gst-plugins-bad-libs-OpenGL-debugging"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="gst-plugins-bad-libs-OpenGL-debugging.top_of_page"></a>OpenGL debugging</span></h2>
+<p>OpenGL debugging — helper routines for dealing with OpenGL debugging</p>
+</td>
+<td class="gallery_image" valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsect1">
+<a name="gst-plugins-bad-libs-OpenGL-debugging.functions"></a><h2>Functions</h2>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="functions_return">
+<col class="functions_name">
+</colgroup>
+<tbody>
+<tr>
+<td class="function_type">
+<a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> *
+</td>
+<td class="function_name">
+<span class="c_punctuation">(</span><a class="link" href="gst-plugins-bad-libs-OpenGL-debugging.html#GstGLAsyncDebugLogGetMessage" title="GstGLAsyncDebugLogGetMessage ()">*GstGLAsyncDebugLogGetMessage</a><span class="c_punctuation">)</span> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a class="link" href="gst-plugins-bad-libs-OpenGL-debugging.html#GstGLAsyncDebug" title="struct GstGLAsyncDebug"><span class="returnvalue">GstGLAsyncDebug</span></a> *
+</td>
+<td class="function_name">
+<a class="link" href="gst-plugins-bad-libs-OpenGL-debugging.html#gst-gl-async-debug-new" title="gst_gl_async_debug_new ()">gst_gl_async_debug_new</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
+<a class="link" href="gst-plugins-bad-libs-OpenGL-debugging.html#gst-gl-async-debug-free" title="gst_gl_async_debug_free ()">gst_gl_async_debug_free</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
+<a class="link" href="gst-plugins-bad-libs-OpenGL-debugging.html#gst-gl-async-debug-init" title="gst_gl_async_debug_init ()">gst_gl_async_debug_init</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
+<a class="link" href="gst-plugins-bad-libs-OpenGL-debugging.html#gst-gl-async-debug-unset" title="gst_gl_async_debug_unset ()">gst_gl_async_debug_unset</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
+<a class="link" href="gst-plugins-bad-libs-OpenGL-debugging.html#gst-gl-async-debug-freeze" title="gst_gl_async_debug_freeze ()">gst_gl_async_debug_freeze</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
+<a class="link" href="gst-plugins-bad-libs-OpenGL-debugging.html#gst-gl-async-debug-thaw" title="gst_gl_async_debug_thaw ()">gst_gl_async_debug_thaw</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
+<a class="link" href="gst-plugins-bad-libs-OpenGL-debugging.html#gst-gl-async-debug-output-log-msg" title="gst_gl_async_debug_output_log_msg ()">gst_gl_async_debug_output_log_msg</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
+<a class="link" href="gst-plugins-bad-libs-OpenGL-debugging.html#gst-gl-async-debug-store-log-msg" title="gst_gl_async_debug_store_log_msg ()">gst_gl_async_debug_store_log_msg</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
+<a class="link" href="gst-plugins-bad-libs-OpenGL-debugging.html#gst-gl-async-debug-store-log-msg-valist" title="gst_gl_async_debug_store_log_msg_valist ()">gst_gl_async_debug_store_log_msg_valist</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="define_keyword">#define</td>
+<td class="function_name">
+<a class="link" href="gst-plugins-bad-libs-OpenGL-debugging.html#GST-GL-ASYNC-CAT-LEVEL-LOG-valist" title="GST_GL_ASYNC_CAT_LEVEL_LOG_valist()">GST_GL_ASYNC_CAT_LEVEL_LOG_valist</a><span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="define_keyword">#define</td>
+<td class="function_name">
+<a class="link" href="gst-plugins-bad-libs-OpenGL-debugging.html#GST-GL-ASYNC-CAT-LEVEL-LOG:CAPS" title="GST_GL_ASYNC_CAT_LEVEL_LOG()">GST_GL_ASYNC_CAT_LEVEL_LOG</a><span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
+<a class="link" href="gst-plugins-bad-libs-OpenGL-debugging.html#gst-gl-insert-debug-marker" title="gst_gl_insert_debug_marker ()">gst_gl_insert_debug_marker</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-libs-OpenGL-debugging.other"></a><h2>Types and Values</h2>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="name">
+<col class="description">
+</colgroup>
+<tbody><tr>
+<td class="datatype_keyword">struct</td>
+<td class="function_name"><a class="link" href="gst-plugins-bad-libs-OpenGL-debugging.html#GstGLAsyncDebug" title="struct GstGLAsyncDebug">GstGLAsyncDebug</a></td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-libs-OpenGL-debugging.description"></a><h2>Description</h2>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-libs-OpenGL-debugging.functions_details"></a><h2>Functions</h2>
+<div class="refsect2">
+<a name="GstGLAsyncDebugLogGetMessage"></a><h3>GstGLAsyncDebugLogGetMessage ()</h3>
+<pre class="programlisting"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> *
+<span class="c_punctuation">(</span>*GstGLAsyncDebugLogGetMessage<span class="c_punctuation">)</span> (<em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data</code></em>);</pre>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-gl-async-debug-new"></a><h3>gst_gl_async_debug_new ()</h3>
+<pre class="programlisting"><a class="link" href="gst-plugins-bad-libs-OpenGL-debugging.html#GstGLAsyncDebug" title="struct GstGLAsyncDebug"><span class="returnvalue">GstGLAsyncDebug</span></a> *
+gst_gl_async_debug_new (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
+<p>Free with <a class="link" href="gst-plugins-bad-libs-OpenGL-debugging.html#gst-gl-async-debug-free" title="gst_gl_async_debug_free ()"><code class="function">gst_gl_async_debug_free()</code></a></p>
+<div class="refsect3">
+<a name="id-1.2.9.32.6.3.5"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>ad</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gst-plugins-bad-libs-OpenGL-debugging.html#GstGLAsyncDebug" title="struct GstGLAsyncDebug"><span class="type">GstGLAsyncDebug</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="id-1.2.9.32.6.3.6"></a><h4>Returns</h4>
+<p> a new <a class="link" href="gst-plugins-bad-libs-OpenGL-debugging.html#GstGLAsyncDebug" title="struct GstGLAsyncDebug"><span class="type">GstGLAsyncDebug</span></a></p>
+</div>
+<p class="since">Since: 1.8</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-gl-async-debug-free"></a><h3>gst_gl_async_debug_free ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+gst_gl_async_debug_free (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-OpenGL-debugging.html#GstGLAsyncDebug" title="struct GstGLAsyncDebug"><span class="type">GstGLAsyncDebug</span></a> *ad</code></em>);</pre>
+<p>Frees <em class="parameter"><code>ad</code></em>
+</p>
+<div class="refsect3">
+<a name="id-1.2.9.32.6.4.5"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>ad</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gst-plugins-bad-libs-OpenGL-debugging.html#GstGLAsyncDebug" title="struct GstGLAsyncDebug"><span class="type">GstGLAsyncDebug</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<p class="since">Since: 1.8</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-gl-async-debug-init"></a><h3>gst_gl_async_debug_init ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+gst_gl_async_debug_init (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-OpenGL-debugging.html#GstGLAsyncDebug" title="struct GstGLAsyncDebug"><span class="type">GstGLAsyncDebug</span></a> *ad</code></em>);</pre>
+<p>Initialize <em class="parameter"><code>ad</code></em>
+.  Intended for use with <a class="link" href="gst-plugins-bad-libs-OpenGL-debugging.html#GstGLAsyncDebug" title="struct GstGLAsyncDebug"><span class="type">GstGLAsyncDebug</span></a>'s that are embedded
+in other structs.</p>
+<div class="refsect3">
+<a name="id-1.2.9.32.6.5.5"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>ad</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gst-plugins-bad-libs-OpenGL-debugging.html#GstGLAsyncDebug" title="struct GstGLAsyncDebug"><span class="type">GstGLAsyncDebug</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<p class="since">Since: 1.8</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-gl-async-debug-unset"></a><h3>gst_gl_async_debug_unset ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+gst_gl_async_debug_unset (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-OpenGL-debugging.html#GstGLAsyncDebug" title="struct GstGLAsyncDebug"><span class="type">GstGLAsyncDebug</span></a> *ad</code></em>);</pre>
+<p>Unset any dynamically allocated data.  Intended for use with
+<a class="link" href="gst-plugins-bad-libs-OpenGL-debugging.html#GstGLAsyncDebug" title="struct GstGLAsyncDebug"><span class="type">GstGLAsyncDebug</span></a>'s that are embedded in other structs.</p>
+<div class="refsect3">
+<a name="id-1.2.9.32.6.6.5"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>ad</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gst-plugins-bad-libs-OpenGL-debugging.html#GstGLAsyncDebug" title="struct GstGLAsyncDebug"><span class="type">GstGLAsyncDebug</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-gl-async-debug-freeze"></a><h3>gst_gl_async_debug_freeze ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+gst_gl_async_debug_freeze (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-OpenGL-debugging.html#GstGLAsyncDebug" title="struct GstGLAsyncDebug"><span class="type">GstGLAsyncDebug</span></a> *ad</code></em>);</pre>
+<p>freeze the debug output.  While frozen, any call to
+<a class="link" href="gst-plugins-bad-libs-OpenGL-debugging.html#gst-gl-async-debug-output-log-msg" title="gst_gl_async_debug_output_log_msg ()"><code class="function">gst_gl_async_debug_output_log_msg()</code></a> will not output any messages but
+subsequent calls to <a class="link" href="gst-plugins-bad-libs-OpenGL-debugging.html#gst-gl-async-debug-store-log-msg" title="gst_gl_async_debug_store_log_msg ()"><code class="function">gst_gl_async_debug_store_log_msg()</code></a> will overwrite previous
+messages.</p>
+<div class="refsect3">
+<a name="id-1.2.9.32.6.7.5"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>ad</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gst-plugins-bad-libs-OpenGL-debugging.html#GstGLAsyncDebug" title="struct GstGLAsyncDebug"><span class="type">GstGLAsyncDebug</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<p class="since">Since: 1.8</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-gl-async-debug-thaw"></a><h3>gst_gl_async_debug_thaw ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+gst_gl_async_debug_thaw (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-OpenGL-debugging.html#GstGLAsyncDebug" title="struct GstGLAsyncDebug"><span class="type">GstGLAsyncDebug</span></a> *ad</code></em>);</pre>
+<p>unfreeze the debug output.  See <a class="link" href="gst-plugins-bad-libs-OpenGL-debugging.html#gst-gl-async-debug-freeze" title="gst_gl_async_debug_freeze ()"><code class="function">gst_gl_async_debug_freeze()</code></a> for what freezing means</p>
+<div class="refsect3">
+<a name="id-1.2.9.32.6.8.5"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>ad</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gst-plugins-bad-libs-OpenGL-debugging.html#GstGLAsyncDebug" title="struct GstGLAsyncDebug"><span class="type">GstGLAsyncDebug</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<p class="since">Since: 1.8</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-gl-async-debug-output-log-msg"></a><h3>gst_gl_async_debug_output_log_msg ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+gst_gl_async_debug_output_log_msg (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-OpenGL-debugging.html#GstGLAsyncDebug" title="struct GstGLAsyncDebug"><span class="type">GstGLAsyncDebug</span></a> *ad</code></em>);</pre>
+<p>Outputs a previously stored debug message.</p>
+<div class="refsect3">
+<a name="id-1.2.9.32.6.9.5"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>ad</p></td>
+<td class="parameter_description"><p>the <a class="link" href="gst-plugins-bad-libs-OpenGL-debugging.html#GstGLAsyncDebug" title="struct GstGLAsyncDebug"><span class="type">GstGLAsyncDebug</span></a> to store the message in</p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-gl-async-debug-store-log-msg"></a><h3>gst_gl_async_debug_store_log_msg ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+gst_gl_async_debug_store_log_msg (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-OpenGL-debugging.html#GstGLAsyncDebug" title="struct GstGLAsyncDebug"><span class="type">GstGLAsyncDebug</span></a> *ad</code></em>,
+                                  <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstInfo.html#GstDebugCategory"><span class="type">GstDebugCategory</span></a> *cat</code></em>,
+                                  <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstInfo.html#GstDebugLevel"><span class="type">GstDebugLevel</span></a> level</code></em>,
+                                  <em class="parameter"><code>const <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *file</code></em>,
+                                  <em class="parameter"><code>const <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *function</code></em>,
+                                  <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a> line</code></em>,
+                                  <em class="parameter"><code><a href="https://developer.gnome.org/gobject/unstable/gobject-The-Base-Object-Type.html#GObject"><span class="type">GObject</span></a> *object</code></em>,
+                                  <em class="parameter"><code>const <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *format</code></em>,
+                                  <em class="parameter"><code>...</code></em>);</pre>
+<p>Stores a debug message for later output by <a class="link" href="gst-plugins-bad-libs-OpenGL-debugging.html#gst-gl-async-debug-output-log-msg" title="gst_gl_async_debug_output_log_msg ()"><code class="function">gst_gl_async_debug_output_log_msg()</code></a></p>
+<div class="refsect3">
+<a name="id-1.2.9.32.6.10.5"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>ad</p></td>
+<td class="parameter_description"><p>the <a class="link" href="gst-plugins-bad-libs-OpenGL-debugging.html#GstGLAsyncDebug" title="struct GstGLAsyncDebug"><span class="type">GstGLAsyncDebug</span></a> to store the message in</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>cat</p></td>
+<td class="parameter_description"><p>the <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstInfo.html#GstDebugCategory"><span class="type">GstDebugCategory</span></a> to output the message in</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>level</p></td>
+<td class="parameter_description"><p>the <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-good/html/gst-plugins-good-plugins-level.html#GstLevel"><span class="type">GstLevel</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>file</p></td>
+<td class="parameter_description"><p>the file where the debug message originates from</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>function</p></td>
+<td class="parameter_description"><p>the function where the debug message originates from</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>line</p></td>
+<td class="parameter_description"><p>the line in <em class="parameter"><code>file</code></em>
+where the debug message originates from</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>object</p></td>
+<td class="parameter_description"><p> a <a href="https://developer.gnome.org/gobject/unstable/gobject-The-Base-Object-Type.html#GObject"><span class="type">GObject</span></a> to associate with the debug message. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="NULL is OK, both for passing and for returning."><span class="acronym">allow-none</span></acronym>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>format</p></td>
+<td class="parameter_description"><p>a printf style format string</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>...</p></td>
+<td class="parameter_description"><p>the list of arguments for <em class="parameter"><code>format</code></em>
+</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<p class="since">Since: 1.8</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-gl-async-debug-store-log-msg-valist"></a><h3>gst_gl_async_debug_store_log_msg_valist ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+gst_gl_async_debug_store_log_msg_valist
+                               (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-OpenGL-debugging.html#GstGLAsyncDebug" title="struct GstGLAsyncDebug"><span class="type">GstGLAsyncDebug</span></a> *ad</code></em>,
+                                <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstInfo.html#GstDebugCategory"><span class="type">GstDebugCategory</span></a> *cat</code></em>,
+                                <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstInfo.html#GstDebugLevel"><span class="type">GstDebugLevel</span></a> level</code></em>,
+                                <em class="parameter"><code>const <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *file</code></em>,
+                                <em class="parameter"><code>const <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *function</code></em>,
+                                <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a> line</code></em>,
+                                <em class="parameter"><code><a href="https://developer.gnome.org/gobject/unstable/gobject-The-Base-Object-Type.html#GObject"><span class="type">GObject</span></a> *object</code></em>,
+                                <em class="parameter"><code>const <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *format</code></em>,
+                                <em class="parameter"><code><span class="type">va_list</span> varargs</code></em>);</pre>
+<p>Stores a debug message for later output by <a class="link" href="gst-plugins-bad-libs-OpenGL-debugging.html#gst-gl-async-debug-output-log-msg" title="gst_gl_async_debug_output_log_msg ()"><code class="function">gst_gl_async_debug_output_log_msg()</code></a></p>
+<div class="refsect3">
+<a name="id-1.2.9.32.6.11.5"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>ad</p></td>
+<td class="parameter_description"><p>the <a class="link" href="gst-plugins-bad-libs-OpenGL-debugging.html#GstGLAsyncDebug" title="struct GstGLAsyncDebug"><span class="type">GstGLAsyncDebug</span></a> to store the message in</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>cat</p></td>
+<td class="parameter_description"><p>the <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstInfo.html#GstDebugCategory"><span class="type">GstDebugCategory</span></a> to output the message in</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>level</p></td>
+<td class="parameter_description"><p>the <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-good/html/gst-plugins-good-plugins-level.html#GstLevel"><span class="type">GstLevel</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>file</p></td>
+<td class="parameter_description"><p>the file where the debug message originates from</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>function</p></td>
+<td class="parameter_description"><p>the function where the debug message originates from</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>line</p></td>
+<td class="parameter_description"><p>the line in <em class="parameter"><code>file</code></em>
+where the debug message originates from</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>object</p></td>
+<td class="parameter_description"><p> a <a href="https://developer.gnome.org/gobject/unstable/gobject-The-Base-Object-Type.html#GObject"><span class="type">GObject</span></a> to associate with the debug message. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="NULL is OK, both for passing and for returning."><span class="acronym">allow-none</span></acronym>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>format</p></td>
+<td class="parameter_description"><p>a printf style format string</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>varargs</p></td>
+<td class="parameter_description"><p>the list of arguments for <em class="parameter"><code>format</code></em>
+</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<p class="since">Since: 1.8</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GST-GL-ASYNC-CAT-LEVEL-LOG-valist"></a><h3>GST_GL_ASYNC_CAT_LEVEL_LOG_valist()</h3>
+<pre class="programlisting">#define             GST_GL_ASYNC_CAT_LEVEL_LOG_valist(ad,cat,level,object,format,varargs)</pre>
+<p>Stores a debug message in <em class="parameter"><code>ad</code></em>
+ for later output</p>
+<div class="refsect3">
+<a name="id-1.2.9.32.6.12.5"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>ad</p></td>
+<td class="parameter_description"><p>the <a class="link" href="gst-plugins-bad-libs-OpenGL-debugging.html#GstGLAsyncDebug" title="struct GstGLAsyncDebug"><span class="type">GstGLAsyncDebug</span></a> to store the message in</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>cat</p></td>
+<td class="parameter_description"><p>the <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstInfo.html#GstDebugCategory"><span class="type">GstDebugCategory</span></a> to output the message in</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>level</p></td>
+<td class="parameter_description"><p>the <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-good/html/gst-plugins-good-plugins-level.html#GstLevel"><span class="type">GstLevel</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>object</p></td>
+<td class="parameter_description"><p> a <a href="https://developer.gnome.org/gobject/unstable/gobject-The-Base-Object-Type.html#GObject"><span class="type">GObject</span></a> to associate with the debug message. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="NULL is OK, both for passing and for returning."><span class="acronym">allow-none</span></acronym>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>format</p></td>
+<td class="parameter_description"><p>a printf style format string</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>varargs</p></td>
+<td class="parameter_description"><p>the list of arguments for <em class="parameter"><code>format</code></em>
+</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GST-GL-ASYNC-CAT-LEVEL-LOG:CAPS"></a><h3>GST_GL_ASYNC_CAT_LEVEL_LOG()</h3>
+<pre class="programlisting">#define             GST_GL_ASYNC_CAT_LEVEL_LOG(ad,cat,level,object,format,...)</pre>
+<p>Stores a debug message in <em class="parameter"><code>ad</code></em>
+ for later output</p>
+<div class="refsect3">
+<a name="id-1.2.9.32.6.13.5"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>ad</p></td>
+<td class="parameter_description"><p>the <a class="link" href="gst-plugins-bad-libs-OpenGL-debugging.html#GstGLAsyncDebug" title="struct GstGLAsyncDebug"><span class="type">GstGLAsyncDebug</span></a> to store the message in</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>cat</p></td>
+<td class="parameter_description"><p>the <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstInfo.html#GstDebugCategory"><span class="type">GstDebugCategory</span></a> to output the message in</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>level</p></td>
+<td class="parameter_description"><p>the <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-good/html/gst-plugins-good-plugins-level.html#GstLevel"><span class="type">GstLevel</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>object</p></td>
+<td class="parameter_description"><p> a <a href="https://developer.gnome.org/gobject/unstable/gobject-The-Base-Object-Type.html#GObject"><span class="type">GObject</span></a> to associate with the debug message. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="NULL is OK, both for passing and for returning."><span class="acronym">allow-none</span></acronym>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>format</p></td>
+<td class="parameter_description"><p>a printf style format string</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>...</p></td>
+<td class="parameter_description"><p>the list of arguments for <em class="parameter"><code>format</code></em>
+</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-gl-insert-debug-marker"></a><h3>gst_gl_insert_debug_marker ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+gst_gl_insert_debug_marker (<em class="parameter"><code><a class="link" href="GstGLContext.html" title="GstGLContext"><span class="type">GstGLContext</span></a> *context</code></em>,
+                            <em class="parameter"><code>const <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *format</code></em>,
+                            <em class="parameter"><code>...</code></em>);</pre>
+<p>Inserts a marker into a GL debug stream.  Requires the 'gldebugmarker'
+debug category to be at least <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstInfo.html#GST-LEVEL-FIXME:CAPS"><code class="literal">GST_LEVEL_FIXME</code></a>.</p>
+<div class="refsect3">
+<a name="id-1.2.9.32.6.14.5"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>context</p></td>
+<td class="parameter_description"><p>a <a class="link" href="GstGLContext.html" title="GstGLContext"><span class="type">GstGLContext</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>format</p></td>
+<td class="parameter_description"><p>a printf-style format string</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>...</p></td>
+<td class="parameter_description"><p>arguments form <em class="parameter"><code>format</code></em>
+</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<p class="since">Since: 1.8</p>
+</div>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-libs-OpenGL-debugging.other_details"></a><h2>Types and Values</h2>
+<div class="refsect2">
+<a name="GstGLAsyncDebug"></a><h3>struct GstGLAsyncDebug</h3>
+<pre class="programlisting">struct GstGLAsyncDebug {
+};
+</pre>
+<p><a class="link" href="gst-plugins-bad-libs-OpenGL-debugging.html#GstGLAsyncDebug" title="struct GstGLAsyncDebug"><span class="type">GstGLAsyncDebug</span></a> an opaque structure and should only be accessed through the
+provided API.</p>
+</div>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-libs-OpenGL-debugging.see-also"></a><h2>See Also</h2>
+<p><a class="link" href="GstGLContext.html" title="GstGLContext"><span class="type">GstGLContext</span></a></p>
+</div>
+</div>
+<div class="footer">
+<hr>Generated by GTK-Doc V1.24</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/libs/html/gst-plugins-bad-libs-gstglbasememory.html b/docs/libs/html/gst-plugins-bad-libs-gstglbasememory.html
new file mode 100644
index 0000000..0826eaa
--- /dev/null
+++ b/docs/libs/html/gst-plugins-bad-libs-gstglbasememory.html
@@ -0,0 +1,1291 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>GstGLBaseMemory: GStreamer Bad Plugins 1.0 Library Reference Manual</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
+<link rel="home" href="index.html" title="GStreamer Bad Plugins 1.0 Library Reference Manual">
+<link rel="up" href="gl.html" title="OpenGL Helper Library">
+<link rel="prev" href="gst-plugins-bad-libs-GstGLAPI.html" title="GstGLAPI">
+<link rel="next" href="GstGLBaseFilter.html" title="GstGLBaseFilter">
+<meta name="generator" content="GTK-Doc V1.24 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="5"><tr valign="middle">
+<td width="100%" align="left" class="shortcuts">
+<a href="#" class="shortcut">Top</a><span id="nav_description">  <span class="dim">|</span> 
+                  <a href="#gst-plugins-bad-libs-gstglbasememory.description" class="shortcut">Description</a></span><span id="nav_hierarchy">  <span class="dim">|</span> 
+                  <a href="#gst-plugins-bad-libs-gstglbasememory.object-hierarchy" class="shortcut">Object Hierarchy</a></span>
+</td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
+<td><a accesskey="u" href="gl.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
+<td><a accesskey="p" href="gst-plugins-bad-libs-GstGLAPI.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
+<td><a accesskey="n" href="GstGLBaseFilter.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
+</tr></table>
+<div class="refentry">
+<a name="gst-plugins-bad-libs-gstglbasememory"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="gst-plugins-bad-libs-gstglbasememory.top_of_page"></a>GstGLBaseMemory</span></h2>
+<p>GstGLBaseMemory — memory subclass for GL buffers</p>
+</td>
+<td class="gallery_image" valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsect1">
+<a name="gst-plugins-bad-libs-gstglbasememory.functions"></a><h2>Functions</h2>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="functions_return">
+<col class="functions_name">
+</colgroup>
+<tbody>
+<tr>
+<td class="define_keyword">#define</td>
+<td class="function_name"><a class="link" href="gst-plugins-bad-libs-gstglbasememory.html#GST-MAP-GL:CAPS" title="GST_MAP_GL">GST_MAP_GL</a></td>
+</tr>
+<tr>
+<td class="define_keyword">#define</td>
+<td class="function_name"><a class="link" href="gst-plugins-bad-libs-gstglbasememory.html#GST-GL-BASE-MEMORY-ERROR:CAPS" title="GST_GL_BASE_MEMORY_ERROR">GST_GL_BASE_MEMORY_ERROR</a></td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
+<span class="c_punctuation">(</span><a class="link" href="gst-plugins-bad-libs-gstglbasememory.html#GstGLAllocationParamsCopyFunc" title="GstGLAllocationParamsCopyFunc ()">*GstGLAllocationParamsCopyFunc</a><span class="c_punctuation">)</span> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
+<span class="c_punctuation">(</span><a class="link" href="gst-plugins-bad-libs-gstglbasememory.html#GstGLAllocationParamsFreeFunc" title="GstGLAllocationParamsFreeFunc ()">*GstGLAllocationParamsFreeFunc</a><span class="c_punctuation">)</span> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="define_keyword">#define</td>
+<td class="function_name"><a class="link" href="gst-plugins-bad-libs-gstglbasememory.html#GST-GL-ALLOCATION-PARAMS-ALLOC-FLAG-ALLOC:CAPS" title="GST_GL_ALLOCATION_PARAMS_ALLOC_FLAG_ALLOC">GST_GL_ALLOCATION_PARAMS_ALLOC_FLAG_ALLOC</a></td>
+</tr>
+<tr>
+<td class="define_keyword">#define</td>
+<td class="function_name"><a class="link" href="gst-plugins-bad-libs-gstglbasememory.html#GST-GL-ALLOCATION-PARAMS-ALLOC-FLAG-WRAP-SYSMEM:CAPS" title="GST_GL_ALLOCATION_PARAMS_ALLOC_FLAG_WRAP_SYSMEM">GST_GL_ALLOCATION_PARAMS_ALLOC_FLAG_WRAP_SYSMEM</a></td>
+</tr>
+<tr>
+<td class="define_keyword">#define</td>
+<td class="function_name"><a class="link" href="gst-plugins-bad-libs-gstglbasememory.html#GST-GL-ALLOCATION-PARAMS-ALLOC-FLAG-WRAP-GPU-HANDLE:CAPS" title="GST_GL_ALLOCATION_PARAMS_ALLOC_FLAG_WRAP_GPU_HANDLE">GST_GL_ALLOCATION_PARAMS_ALLOC_FLAG_WRAP_GPU_HANDLE</a></td>
+</tr>
+<tr>
+<td class="define_keyword">#define</td>
+<td class="function_name"><a class="link" href="gst-plugins-bad-libs-gstglbasememory.html#GST-GL-ALLOCATION-PARAMS-ALLOC-FLAG-USER:CAPS" title="GST_GL_ALLOCATION_PARAMS_ALLOC_FLAG_USER">GST_GL_ALLOCATION_PARAMS_ALLOC_FLAG_USER</a></td>
+</tr>
+<tr>
+<td class="function_type">
+<a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
+</td>
+<td class="function_name">
+<a class="link" href="gst-plugins-bad-libs-gstglbasememory.html#gst-gl-allocation-params-init" title="gst_gl_allocation_params_init ()">gst_gl_allocation_params_init</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a class="link" href="gst-plugins-bad-libs-gstglbasememory.html#GstGLAllocationParams" title="struct GstGLAllocationParams"><span class="returnvalue">GstGLAllocationParams</span></a> *
+</td>
+<td class="function_name">
+<a class="link" href="gst-plugins-bad-libs-gstglbasememory.html#gst-gl-allocation-params-copy" title="gst_gl_allocation_params_copy ()">gst_gl_allocation_params_copy</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
+<a class="link" href="gst-plugins-bad-libs-gstglbasememory.html#gst-gl-allocation-params-free" title="gst_gl_allocation_params_free ()">gst_gl_allocation_params_free</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
+<a class="link" href="gst-plugins-bad-libs-gstglbasememory.html#gst-gl-allocation-params-free-data" title="gst_gl_allocation_params_free_data ()">gst_gl_allocation_params_free_data</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
+<a class="link" href="gst-plugins-bad-libs-gstglbasememory.html#gst-gl-allocation-params-copy-data" title="gst_gl_allocation_params_copy_data ()">gst_gl_allocation_params_copy_data</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
+<a class="link" href="gst-plugins-bad-libs-gstglbasememory.html#gst-gl-base-memory-init-once" title="gst_gl_base_memory_init_once ()">gst_gl_base_memory_init_once</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
+<a class="link" href="gst-plugins-bad-libs-gstglbasememory.html#gst-gl-base-memory-init" title="gst_gl_base_memory_init ()">gst_gl_base_memory_init</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
+</td>
+<td class="function_name">
+<a class="link" href="gst-plugins-bad-libs-gstglbasememory.html#gst-is-gl-base-memory" title="gst_is_gl_base_memory ()">gst_is_gl_base_memory</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a class="link" href="gst-plugins-bad-libs-gstglbasememory.html#GstGLBaseMemory" title="GstGLBaseMemory"><span class="returnvalue">GstGLBaseMemory</span></a> *
+</td>
+<td class="function_name">
+<span class="c_punctuation">(</span><a class="link" href="gst-plugins-bad-libs-gstglbasememory.html#GstGLBaseMemoryAllocatorAllocFunction" title="GstGLBaseMemoryAllocatorAllocFunction ()">*GstGLBaseMemoryAllocatorAllocFunction</a><span class="c_punctuation">)</span> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
+</td>
+<td class="function_name">
+<span class="c_punctuation">(</span><a class="link" href="gst-plugins-bad-libs-gstglbasememory.html#GstGLBaseMemoryAllocatorCreateFunction" title="GstGLBaseMemoryAllocatorCreateFunction ()">*GstGLBaseMemoryAllocatorCreateFunction</a><span class="c_punctuation">)</span> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gpointer"><span class="returnvalue">gpointer</span></a>
+</td>
+<td class="function_name">
+<span class="c_punctuation">(</span><a class="link" href="gst-plugins-bad-libs-gstglbasememory.html#GstGLBaseMemoryAllocatorMapFunction" title="GstGLBaseMemoryAllocatorMapFunction ()">*GstGLBaseMemoryAllocatorMapFunction</a><span class="c_punctuation">)</span> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
+<span class="c_punctuation">(</span><a class="link" href="gst-plugins-bad-libs-gstglbasememory.html#GstGLBaseMemoryAllocatorUnmapFunction" title="GstGLBaseMemoryAllocatorUnmapFunction ()">*GstGLBaseMemoryAllocatorUnmapFunction</a><span class="c_punctuation">)</span> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a class="link" href="gst-plugins-bad-libs-gstglbasememory.html#GstGLBaseMemory" title="GstGLBaseMemory"><span class="returnvalue">GstGLBaseMemory</span></a> *
+</td>
+<td class="function_name">
+<span class="c_punctuation">(</span><a class="link" href="gst-plugins-bad-libs-gstglbasememory.html#GstGLBaseMemoryAllocatorCopyFunction" title="GstGLBaseMemoryAllocatorCopyFunction ()">*GstGLBaseMemoryAllocatorCopyFunction</a><span class="c_punctuation">)</span> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
+<span class="c_punctuation">(</span><a class="link" href="gst-plugins-bad-libs-gstglbasememory.html#GstGLBaseMemoryAllocatorDestroyFunction" title="GstGLBaseMemoryAllocatorDestroyFunction ()">*GstGLBaseMemoryAllocatorDestroyFunction</a><span class="c_punctuation">)</span> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a class="link" href="gst-plugins-bad-libs-gstglbasememory.html#GstGLBaseMemory" title="GstGLBaseMemory"><span class="returnvalue">GstGLBaseMemory</span></a> *
+</td>
+<td class="function_name">
+<a class="link" href="gst-plugins-bad-libs-gstglbasememory.html#gst-gl-base-memory-alloc" title="gst_gl_base_memory_alloc ()">gst_gl_base_memory_alloc</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
+</td>
+<td class="function_name">
+<a class="link" href="gst-plugins-bad-libs-gstglbasememory.html#gst-gl-base-memory-alloc-data" title="gst_gl_base_memory_alloc_data ()">gst_gl_base_memory_alloc_data</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
+</td>
+<td class="function_name">
+<a class="link" href="gst-plugins-bad-libs-gstglbasememory.html#gst-gl-base-memory-memcpy" title="gst_gl_base_memory_memcpy ()">gst_gl_base_memory_memcpy</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<a name="GstGLBaseMemoryAllocator"></a><div class="refsect1">
+<a name="gst-plugins-bad-libs-gstglbasememory.other"></a><h2>Types and Values</h2>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="name">
+<col class="description">
+</colgroup>
+<tbody>
+<tr>
+<td class="datatype_keyword"> </td>
+<td class="function_name"><a class="link" href="gst-plugins-bad-libs-gstglbasememory.html#GstGLBaseMemoryAllocator-struct" title="GstGLBaseMemoryAllocator">GstGLBaseMemoryAllocator</a></td>
+</tr>
+<tr>
+<td class="datatype_keyword"> </td>
+<td class="function_name"><a class="link" href="gst-plugins-bad-libs-gstglbasememory.html#GstGLBaseMemoryAllocatorClass" title="GstGLBaseMemoryAllocatorClass">GstGLBaseMemoryAllocatorClass</a></td>
+</tr>
+<tr>
+<td class="define_keyword">#define</td>
+<td class="function_name"><a class="link" href="gst-plugins-bad-libs-gstglbasememory.html#GST-GL-BASE-MEMORY-ALLOCATOR-NAME:CAPS" title="GST_GL_BASE_MEMORY_ALLOCATOR_NAME">GST_GL_BASE_MEMORY_ALLOCATOR_NAME</a></td>
+</tr>
+<tr>
+<td class="datatype_keyword">enum</td>
+<td class="function_name"><a class="link" href="gst-plugins-bad-libs-gstglbasememory.html#GstGLBaseMemoryError" title="enum GstGLBaseMemoryError">GstGLBaseMemoryError</a></td>
+</tr>
+<tr>
+<td class="datatype_keyword">enum</td>
+<td class="function_name"><a class="link" href="gst-plugins-bad-libs-gstglbasememory.html#GstGLBaseMemoryTransfer" title="enum GstGLBaseMemoryTransfer">GstGLBaseMemoryTransfer</a></td>
+</tr>
+<tr>
+<td class="datatype_keyword">struct</td>
+<td class="function_name"><a class="link" href="gst-plugins-bad-libs-gstglbasememory.html#GstGLAllocationParams" title="struct GstGLAllocationParams">GstGLAllocationParams</a></td>
+</tr>
+<tr>
+<td class="datatype_keyword"> </td>
+<td class="function_name"><a class="link" href="gst-plugins-bad-libs-gstglbasememory.html#GstGLBaseMemory" title="GstGLBaseMemory">GstGLBaseMemory</a></td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-libs-gstglbasememory.object-hierarchy"></a><h2>Object Hierarchy</h2>
+<pre class="screen">    <a href="https://developer.gnome.org/gobject/unstable/gobject-The-Base-Object-Type.html#GObject">GObject</a>
+    <span class="lineart">╰──</span> <a href="https://developer.gnome.org/gobject/unstable/gobject-The-Base-Object-Type.html#GInitiallyUnowned">GInitiallyUnowned</a>
+        <span class="lineart">╰──</span> <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstObject.html">GstObject</a>
+            <span class="lineart">╰──</span> <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstAllocator.html">GstAllocator</a>
+                <span class="lineart">╰──</span> GstGLBaseMemoryAllocator
+                    <span class="lineart">├──</span> <a class="link" href="gst-plugins-bad-libs-GstGLBuffer.html#GstGLBufferAllocator">GstGLBufferAllocator</a>
+                    <span class="lineart">╰──</span> <a class="link" href="gst-plugins-bad-libs-GstGLMemory.html#GstGLMemoryAllocator">GstGLMemoryAllocator</a>
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-libs-gstglbasememory.description"></a><h2>Description</h2>
+<p>GstGLBaseMemory is a <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstMemory.html"><span class="type">GstMemory</span></a> subclass providing the basis of support
+for the mapping of GL buffers.</p>
+<p>Data is uploaded or downloaded from the GPU as is necessary.</p>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-libs-gstglbasememory.functions_details"></a><h2>Functions</h2>
+<div class="refsect2">
+<a name="GST-MAP-GL:CAPS"></a><h3>GST_MAP_GL</h3>
+<pre class="programlisting">#define GST_MAP_GL (GST_MAP_FLAG_LAST &lt;&lt; 1)
+</pre>
+<p>Flag indicating that we should map the GL object instead of to system memory.</p>
+<p>Combining <a class="link" href="gst-plugins-bad-libs-gstglbasememory.html#GST-MAP-GL:CAPS" title="GST_MAP_GL"><span class="type">GST_MAP_GL</span></a> with <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstMemory.html#GST-MAP-WRITE:CAPS"><span class="type">GST_MAP_WRITE</span></a> has the same semantics as though
+you are writing to OpenGL. Conversely, combining <a class="link" href="gst-plugins-bad-libs-gstglbasememory.html#GST-MAP-GL:CAPS" title="GST_MAP_GL"><span class="type">GST_MAP_GL</span></a> with
+<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstMemory.html#GST-MAP-READ:CAPS"><span class="type">GST_MAP_READ</span></a> has the same semantics as though you are reading from OpenGL.</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GST-GL-BASE-MEMORY-ERROR:CAPS"></a><h3>GST_GL_BASE_MEMORY_ERROR</h3>
+<pre class="programlisting">#define GST_GL_BASE_MEMORY_ERROR (gst_gl_base_memory_error_quark ())
+</pre>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstGLAllocationParamsCopyFunc"></a><h3>GstGLAllocationParamsCopyFunc ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+<span class="c_punctuation">(</span>*GstGLAllocationParamsCopyFunc<span class="c_punctuation">)</span> (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-gstglbasememory.html#GstGLAllocationParams" title="struct GstGLAllocationParams"><span class="type">GstGLAllocationParams</span></a> *src</code></em>,
+                                  <em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-gstglbasememory.html#GstGLAllocationParams" title="struct GstGLAllocationParams"><span class="type">GstGLAllocationParams</span></a> *dest</code></em>);</pre>
+<p>Copies the parameters from <em class="parameter"><code>src</code></em>
+ into <em class="parameter"><code>dest</code></em>
+.  The subclass must compose copy
+functions from the superclass.</p>
+<div class="refsect3">
+<a name="id-1.2.9.3.8.4.5"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>src</p></td>
+<td class="parameter_description"><p>the source <a class="link" href="gst-plugins-bad-libs-gstglbasememory.html#GstGLAllocationParams" title="struct GstGLAllocationParams"><span class="type">GstGLAllocationParams</span></a> to copy from</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>dest</p></td>
+<td class="parameter_description"><p>the source <a class="link" href="gst-plugins-bad-libs-gstglbasememory.html#GstGLAllocationParams" title="struct GstGLAllocationParams"><span class="type">GstGLAllocationParams</span></a> to copy</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstGLAllocationParamsFreeFunc"></a><h3>GstGLAllocationParamsFreeFunc ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+<span class="c_punctuation">(</span>*GstGLAllocationParamsFreeFunc<span class="c_punctuation">)</span> (<em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> params</code></em>);</pre>
+<p>Free any dynamically allocated data.  The subclass must call the superclass'
+free.</p>
+<div class="refsect3">
+<a name="id-1.2.9.3.8.5.5"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>params</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gst-plugins-bad-libs-gstglbasememory.html#GstGLAllocationParams" title="struct GstGLAllocationParams"><span class="type">GstGLAllocationParams</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GST-GL-ALLOCATION-PARAMS-ALLOC-FLAG-ALLOC:CAPS"></a><h3>GST_GL_ALLOCATION_PARAMS_ALLOC_FLAG_ALLOC</h3>
+<pre class="programlisting">#define GST_GL_ALLOCATION_PARAMS_ALLOC_FLAG_ALLOC (1 &lt;&lt; 0)
+</pre>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GST-GL-ALLOCATION-PARAMS-ALLOC-FLAG-WRAP-SYSMEM:CAPS"></a><h3>GST_GL_ALLOCATION_PARAMS_ALLOC_FLAG_WRAP_SYSMEM</h3>
+<pre class="programlisting">#define GST_GL_ALLOCATION_PARAMS_ALLOC_FLAG_WRAP_SYSMEM (1 &lt;&lt; 1)
+</pre>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GST-GL-ALLOCATION-PARAMS-ALLOC-FLAG-WRAP-GPU-HANDLE:CAPS"></a><h3>GST_GL_ALLOCATION_PARAMS_ALLOC_FLAG_WRAP_GPU_HANDLE</h3>
+<pre class="programlisting">#define GST_GL_ALLOCATION_PARAMS_ALLOC_FLAG_WRAP_GPU_HANDLE (1 &lt;&lt; 2)
+</pre>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GST-GL-ALLOCATION-PARAMS-ALLOC-FLAG-USER:CAPS"></a><h3>GST_GL_ALLOCATION_PARAMS_ALLOC_FLAG_USER</h3>
+<pre class="programlisting">#define GST_GL_ALLOCATION_PARAMS_ALLOC_FLAG_USER (1 &lt;&lt; 16)
+</pre>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-gl-allocation-params-init"></a><h3>gst_gl_allocation_params_init ()</h3>
+<pre class="programlisting"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
+gst_gl_allocation_params_init (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-gstglbasememory.html#GstGLAllocationParams" title="struct GstGLAllocationParams"><span class="type">GstGLAllocationParams</span></a> *params</code></em>,
+                               <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gsize"><span class="type">gsize</span></a> struct_size</code></em>,
+                               <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> alloc_flags</code></em>,
+                               <em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-gstglbasememory.html#GstGLAllocationParamsCopyFunc" title="GstGLAllocationParamsCopyFunc ()"><span class="type">GstGLAllocationParamsCopyFunc</span></a> copy</code></em>,
+                               <em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-gstglbasememory.html#GstGLAllocationParamsFreeFunc" title="GstGLAllocationParamsFreeFunc ()"><span class="type">GstGLAllocationParamsFreeFunc</span></a> free</code></em>,
+                               <em class="parameter"><code><a class="link" href="GstGLContext.html" title="GstGLContext"><span class="type">GstGLContext</span></a> *context</code></em>,
+                               <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gsize"><span class="type">gsize</span></a> alloc_size</code></em>,
+                               <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstAllocator.html#GstAllocationParams"><span class="type">GstAllocationParams</span></a> *alloc_params</code></em>,
+                               <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> wrapped_data</code></em>,
+                               <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> gl_handle</code></em>,
+                               <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data</code></em>,
+                               <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Datasets.html#GDestroyNotify"><span class="type">GDestroyNotify</span></a> notify</code></em>);</pre>
+<p><em class="parameter"><code>notify</code></em>
+ will be called once for each allocated memory using these <em class="parameter"><code>params</code></em>
+
+when freeing the memory.</p>
+<div class="refsect3">
+<a name="id-1.2.9.3.8.10.5"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>params</p></td>
+<td class="parameter_description"><p>the <a class="link" href="gst-plugins-bad-libs-gstglbasememory.html#GstGLAllocationParams" title="struct GstGLAllocationParams"><span class="type">GstGLAllocationParams</span></a> to initialize</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>struct_size</p></td>
+<td class="parameter_description"><p>the struct size of the implementation</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>alloc_flags</p></td>
+<td class="parameter_description"><p>some alloc flags</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>copy</p></td>
+<td class="parameter_description"><p>a copy function</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>free</p></td>
+<td class="parameter_description"><p>a free function</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>context</p></td>
+<td class="parameter_description"><p> a <a class="link" href="GstGLContext.html" title="GstGLContext"><span class="type">GstGLContext</span></a>. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>alloc_size</p></td>
+<td class="parameter_description"><p>the number of bytes to allocate.</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>alloc_params</p></td>
+<td class="parameter_description"><p> a <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstAllocator.html#GstAllocationParams"><span class="type">GstAllocationParams</span></a> to apply. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>][<acronym title="NULL is OK, both for passing and for returning."><span class="acronym">allow-none</span></acronym>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>wrapped_data</p></td>
+<td class="parameter_description"><p> a sysmem data pointer to initialize the allocation with. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>][<acronym title="NULL is OK, both for passing and for returning."><span class="acronym">allow-none</span></acronym>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>gl_handle</p></td>
+<td class="parameter_description"><p> a GL handle to initialize the allocation with. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>user_data</p></td>
+<td class="parameter_description"><p> user data to call <em class="parameter"><code>notify</code></em>
+with. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>][<acronym title="NULL is OK, both for passing and for returning."><span class="acronym">allow-none</span></acronym>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>notify</p></td>
+<td class="parameter_description"><p> a <a href="https://developer.gnome.org/glib/unstable/glib-Datasets.html#GDestroyNotify"><span class="type">GDestroyNotify</span></a>. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="NULL is OK, both for passing and for returning."><span class="acronym">allow-none</span></acronym>]</span></td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="id-1.2.9.3.8.10.6"></a><h4>Returns</h4>
+<p> whether the paramaters could be initialized</p>
+</div>
+<p class="since">Since: 1.8</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-gl-allocation-params-copy"></a><h3>gst_gl_allocation_params_copy ()</h3>
+<pre class="programlisting"><a class="link" href="gst-plugins-bad-libs-gstglbasememory.html#GstGLAllocationParams" title="struct GstGLAllocationParams"><span class="returnvalue">GstGLAllocationParams</span></a> *
+gst_gl_allocation_params_copy (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-gstglbasememory.html#GstGLAllocationParams" title="struct GstGLAllocationParams"><span class="type">GstGLAllocationParams</span></a> *src</code></em>);</pre>
+<div class="refsect3">
+<a name="id-1.2.9.3.8.11.4"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>src</p></td>
+<td class="parameter_description"><p>the <a class="link" href="gst-plugins-bad-libs-gstglbasememory.html#GstGLAllocationParams" title="struct GstGLAllocationParams"><span class="type">GstGLAllocationParams</span></a> to initialize</p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="id-1.2.9.3.8.11.5"></a><h4>Returns</h4>
+<p> a copy of the <a class="link" href="gst-plugins-bad-libs-gstglbasememory.html#GstGLAllocationParams" title="struct GstGLAllocationParams"><span class="type">GstGLAllocationParams</span></a> specified by <em class="parameter"><code>src</code></em>
+or <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> on
+failure</p>
+</div>
+<p class="since">Since: 1.8</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-gl-allocation-params-free"></a><h3>gst_gl_allocation_params_free ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+gst_gl_allocation_params_free (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-gstglbasememory.html#GstGLAllocationParams" title="struct GstGLAllocationParams"><span class="type">GstGLAllocationParams</span></a> *params</code></em>);</pre>
+<p>Frees the <a class="link" href="gst-plugins-bad-libs-gstglbasememory.html#GstGLAllocationParams" title="struct GstGLAllocationParams"><span class="type">GstGLAllocationParams</span></a> and all associated data.</p>
+<div class="refsect3">
+<a name="id-1.2.9.3.8.12.5"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>params</p></td>
+<td class="parameter_description"><p>the <a class="link" href="gst-plugins-bad-libs-gstglbasememory.html#GstGLAllocationParams" title="struct GstGLAllocationParams"><span class="type">GstGLAllocationParams</span></a> to initialize</p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<p class="since">Since: 1.8</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-gl-allocation-params-free-data"></a><h3>gst_gl_allocation_params_free_data ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+gst_gl_allocation_params_free_data (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-gstglbasememory.html#GstGLAllocationParams" title="struct GstGLAllocationParams"><span class="type">GstGLAllocationParams</span></a> *params</code></em>);</pre>
+<p>Frees the dynamically allocated data in <em class="parameter"><code>params</code></em>
+.  Direct subclasses
+should call this function in their own overriden free function.</p>
+<div class="refsect3">
+<a name="id-1.2.9.3.8.13.5"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>params</p></td>
+<td class="parameter_description"><p>the source <a class="link" href="gst-plugins-bad-libs-gstglbasememory.html#GstGLAllocationParams" title="struct GstGLAllocationParams"><span class="type">GstGLAllocationParams</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<p class="since">Since: 1.8</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-gl-allocation-params-copy-data"></a><h3>gst_gl_allocation_params_copy_data ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+gst_gl_allocation_params_copy_data (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-gstglbasememory.html#GstGLAllocationParams" title="struct GstGLAllocationParams"><span class="type">GstGLAllocationParams</span></a> *src</code></em>,
+                                    <em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-gstglbasememory.html#GstGLAllocationParams" title="struct GstGLAllocationParams"><span class="type">GstGLAllocationParams</span></a> *dest</code></em>);</pre>
+<p>Copies the dynamically allocated data from <em class="parameter"><code>src</code></em>
+ to <em class="parameter"><code>dest</code></em>
+.  Direct subclasses
+should call this function in their own overriden copy function.</p>
+<div class="refsect3">
+<a name="id-1.2.9.3.8.14.5"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>src</p></td>
+<td class="parameter_description"><p>the source <a class="link" href="gst-plugins-bad-libs-gstglbasememory.html#GstGLAllocationParams" title="struct GstGLAllocationParams"><span class="type">GstGLAllocationParams</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>dest</p></td>
+<td class="parameter_description"><p>the destination <a class="link" href="gst-plugins-bad-libs-gstglbasememory.html#GstGLAllocationParams" title="struct GstGLAllocationParams"><span class="type">GstGLAllocationParams</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<p class="since">Since: 1.8</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-gl-base-memory-init-once"></a><h3>gst_gl_base_memory_init_once ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+gst_gl_base_memory_init_once (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
+<p>Initializes the GL Base Memory allocator. It is safe to call this function
+multiple times.  This must be called before any other GstGLBaseMemory operation.</p>
+<p class="since">Since: 1.8</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-gl-base-memory-init"></a><h3>gst_gl_base_memory_init ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+gst_gl_base_memory_init (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-gstglbasememory.html#GstGLBaseMemory" title="GstGLBaseMemory"><span class="type">GstGLBaseMemory</span></a> *mem</code></em>,
+                         <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstAllocator.html"><span class="type">GstAllocator</span></a> *allocator</code></em>,
+                         <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstMemory.html"><span class="type">GstMemory</span></a> *parent</code></em>,
+                         <em class="parameter"><code><a class="link" href="GstGLContext.html" title="GstGLContext"><span class="type">GstGLContext</span></a> *context</code></em>,
+                         <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstAllocator.html#GstAllocationParams"><span class="type">GstAllocationParams</span></a> *params</code></em>,
+                         <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gsize"><span class="type">gsize</span></a> size</code></em>,
+                         <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data</code></em>,
+                         <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Datasets.html#GDestroyNotify"><span class="type">GDestroyNotify</span></a> notify</code></em>);</pre>
+<p>Initializes <em class="parameter"><code>mem</code></em>
+ with the required parameters</p>
+<div class="refsect3">
+<a name="id-1.2.9.3.8.16.5"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>mem</p></td>
+<td class="parameter_description"><p>the <a class="link" href="gst-plugins-bad-libs-gstglbasememory.html#GstGLBaseMemory" title="GstGLBaseMemory"><span class="type">GstGLBaseMemory</span></a> to initialize</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>allocator</p></td>
+<td class="parameter_description"><p>the <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstAllocator.html"><span class="type">GstAllocator</span></a> to initialize with</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>parent</p></td>
+<td class="parameter_description"><p> the parent <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstMemory.html"><span class="type">GstMemory</span></a> to initialize with. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="NULL is OK, both for passing and for returning."><span class="acronym">allow-none</span></acronym>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>context</p></td>
+<td class="parameter_description"><p>the <a class="link" href="GstGLContext.html" title="GstGLContext"><span class="type">GstGLContext</span></a> to initialize with</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>params</p></td>
+<td class="parameter_description"><p> the <em class="parameter"><code>GstAllocationParams</code></em>
+to initialize with. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="NULL is OK, both for passing and for returning."><span class="acronym">allow-none</span></acronym>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>size</p></td>
+<td class="parameter_description"><p>the number of bytes to be allocated</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>user_data</p></td>
+<td class="parameter_description"><p> user data to call <em class="parameter"><code>notify</code></em>
+with. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="NULL is OK, both for passing and for returning."><span class="acronym">allow-none</span></acronym>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>notify</p></td>
+<td class="parameter_description"><p> a <a href="https://developer.gnome.org/glib/unstable/glib-Datasets.html#GDestroyNotify"><span class="type">GDestroyNotify</span></a>. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="NULL is OK, both for passing and for returning."><span class="acronym">allow-none</span></acronym>]</span></td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<p class="since">Since: 1.8</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-is-gl-base-memory"></a><h3>gst_is_gl_base_memory ()</h3>
+<pre class="programlisting"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
+gst_is_gl_base_memory (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstMemory.html"><span class="type">GstMemory</span></a> *mem</code></em>);</pre>
+<div class="refsect3">
+<a name="id-1.2.9.3.8.17.4"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>mem</p></td>
+<td class="parameter_description"><p>a <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstMemory.html"><span class="type">GstMemory</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="id-1.2.9.3.8.17.5"></a><h4>Returns</h4>
+<p> whether the memory at <em class="parameter"><code>mem</code></em>
+is a <a class="link" href="gst-plugins-bad-libs-gstglbasememory.html#GstGLBaseMemory" title="GstGLBaseMemory"><span class="type">GstGLBaseMemory</span></a></p>
+</div>
+<p class="since">Since: 1.8</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstGLBaseMemoryAllocatorAllocFunction"></a><h3>GstGLBaseMemoryAllocatorAllocFunction ()</h3>
+<pre class="programlisting"><a class="link" href="gst-plugins-bad-libs-gstglbasememory.html#GstGLBaseMemory" title="GstGLBaseMemory"><span class="returnvalue">GstGLBaseMemory</span></a> *
+<span class="c_punctuation">(</span>*GstGLBaseMemoryAllocatorAllocFunction<span class="c_punctuation">)</span>
+                               (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-gstglbasememory.html#GstGLBaseMemoryAllocator"><span class="type">GstGLBaseMemoryAllocator</span></a> *allocator</code></em>,
+                                <em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-gstglbasememory.html#GstGLAllocationParams" title="struct GstGLAllocationParams"><span class="type">GstGLAllocationParams</span></a> *params</code></em>);</pre>
+<p>Note: not called with a GL context current</p>
+<div class="refsect3">
+<a name="id-1.2.9.3.8.18.5"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>allocator</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gst-plugins-bad-libs-gstglbasememory.html#GstGLBaseMemoryAllocator"><span class="type">GstGLBaseMemoryAllocator</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>params</p></td>
+<td class="parameter_description"><p>the <a class="link" href="gst-plugins-bad-libs-gstglbasememory.html#GstGLAllocationParams" title="struct GstGLAllocationParams"><span class="type">GstGLAllocationParams</span></a> to allocate the memory with</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="id-1.2.9.3.8.18.6"></a><h4>Returns</h4>
+<p> a newly allocated <a class="link" href="gst-plugins-bad-libs-gstglbasememory.html#GstGLBaseMemory" title="GstGLBaseMemory"><span class="type">GstGLBaseMemory</span></a> from <em class="parameter"><code>allocator</code></em>
+and <em class="parameter"><code>params</code></em>
+</p>
+</div>
+<p class="since">Since: 1.8</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstGLBaseMemoryAllocatorCreateFunction"></a><h3>GstGLBaseMemoryAllocatorCreateFunction ()</h3>
+<pre class="programlisting"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
+<span class="c_punctuation">(</span>*GstGLBaseMemoryAllocatorCreateFunction<span class="c_punctuation">)</span>
+                               (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-gstglbasememory.html#GstGLBaseMemory" title="GstGLBaseMemory"><span class="type">GstGLBaseMemory</span></a> *mem</code></em>,
+                                <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Error-Reporting.html#GError"><span class="type">GError</span></a> **error</code></em>);</pre>
+<p>As this virtual method is called with an OpenGL context current, use this
+function to allocate and OpenGL resources needed for your application</p>
+<div class="refsect3">
+<a name="id-1.2.9.3.8.19.5"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>mem</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gst-plugins-bad-libs-gstglbasememory.html#GstGLBaseMemory" title="GstGLBaseMemory"><span class="type">GstGLBaseMemory</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>error</p></td>
+<td class="parameter_description"><p>a <a href="https://developer.gnome.org/glib/unstable/glib-Error-Reporting.html#GError"><span class="type">GError</span></a> to use on failure</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="id-1.2.9.3.8.19.6"></a><h4>Returns</h4>
+<p> whether the creation succeeded</p>
+</div>
+<p class="since">Since: 1.8</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstGLBaseMemoryAllocatorMapFunction"></a><h3>GstGLBaseMemoryAllocatorMapFunction ()</h3>
+<pre class="programlisting"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gpointer"><span class="returnvalue">gpointer</span></a>
+<span class="c_punctuation">(</span>*GstGLBaseMemoryAllocatorMapFunction<span class="c_punctuation">)</span>
+                               (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-gstglbasememory.html#GstGLBaseMemory" title="GstGLBaseMemory"><span class="type">GstGLBaseMemory</span></a> *mem</code></em>,
+                                <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstMemory.html#GstMapInfo"><span class="type">GstMapInfo</span></a> *info</code></em>,
+                                <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gsize"><span class="type">gsize</span></a> maxsize</code></em>);</pre>
+<p>Also see <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstMemory.html#gst-memory-map"><code class="function">gst_memory_map()</code></a>;</p>
+<div class="refsect3">
+<a name="id-1.2.9.3.8.20.5"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>mem</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gst-plugins-bad-libs-gstglbasememory.html#GstGLBaseMemory" title="GstGLBaseMemory"><span class="type">GstGLBaseMemory</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>info</p></td>
+<td class="parameter_description"><p>a <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstMemory.html#GstMapInfo"><span class="type">GstMapInfo</span></a> to map with</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>maxsize</p></td>
+<td class="parameter_description"><p>the size to map</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="id-1.2.9.3.8.20.6"></a><h4>Returns</h4>
+<p> the mapped pointer</p>
+</div>
+<p class="since">Since: 1.8</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstGLBaseMemoryAllocatorUnmapFunction"></a><h3>GstGLBaseMemoryAllocatorUnmapFunction ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+<span class="c_punctuation">(</span>*GstGLBaseMemoryAllocatorUnmapFunction<span class="c_punctuation">)</span>
+                               (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-gstglbasememory.html#GstGLBaseMemory" title="GstGLBaseMemory"><span class="type">GstGLBaseMemory</span></a> *mem</code></em>,
+                                <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstMemory.html#GstMapInfo"><span class="type">GstMapInfo</span></a> *info</code></em>);</pre>
+<p>Also see <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstMemory.html#gst-memory-unmap"><code class="function">gst_memory_unmap()</code></a>;</p>
+<div class="refsect3">
+<a name="id-1.2.9.3.8.21.5"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>mem</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gst-plugins-bad-libs-gstglbasememory.html#GstGLBaseMemory" title="GstGLBaseMemory"><span class="type">GstGLBaseMemory</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>info</p></td>
+<td class="parameter_description"><p>a <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstMemory.html#GstMapInfo"><span class="type">GstMapInfo</span></a> to map with</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<p class="since">Since: 1.8</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstGLBaseMemoryAllocatorCopyFunction"></a><h3>GstGLBaseMemoryAllocatorCopyFunction ()</h3>
+<pre class="programlisting"><a class="link" href="gst-plugins-bad-libs-gstglbasememory.html#GstGLBaseMemory" title="GstGLBaseMemory"><span class="returnvalue">GstGLBaseMemory</span></a> *
+<span class="c_punctuation">(</span>*GstGLBaseMemoryAllocatorCopyFunction<span class="c_punctuation">)</span>
+                               (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-gstglbasememory.html#GstGLBaseMemory" title="GstGLBaseMemory"><span class="type">GstGLBaseMemory</span></a> *mem</code></em>,
+                                <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gssize"><span class="type">gssize</span></a> offset</code></em>,
+                                <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gssize"><span class="type">gssize</span></a> size</code></em>);</pre>
+<p>Also see <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstMemory.html#gst-memory-copy"><code class="function">gst_memory_copy()</code></a>;</p>
+<div class="refsect3">
+<a name="id-1.2.9.3.8.22.5"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>mem</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gst-plugins-bad-libs-gstglbasememory.html#GstGLBaseMemory" title="GstGLBaseMemory"><span class="type">GstGLBaseMemory</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>offset</p></td>
+<td class="parameter_description"><p>the offset to copy from</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>size</p></td>
+<td class="parameter_description"><p>the number of bytes to copy</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="id-1.2.9.3.8.22.6"></a><h4>Returns</h4>
+<p> the newly copied <a class="link" href="gst-plugins-bad-libs-GstGLMemory.html#GstGLMemory" title="GstGLMemory"><span class="type">GstGLMemory</span></a> or <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a></p>
+</div>
+<p class="since">Since: 1.8</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstGLBaseMemoryAllocatorDestroyFunction"></a><h3>GstGLBaseMemoryAllocatorDestroyFunction ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+<span class="c_punctuation">(</span>*GstGLBaseMemoryAllocatorDestroyFunction<span class="c_punctuation">)</span>
+                               (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-gstglbasememory.html#GstGLBaseMemory" title="GstGLBaseMemory"><span class="type">GstGLBaseMemory</span></a> *mem</code></em>);</pre>
+<p>Destroy any resources allocated throughout the lifetime of <em class="parameter"><code>mem</code></em>
+</p>
+<div class="refsect3">
+<a name="id-1.2.9.3.8.23.5"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>mem</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gst-plugins-bad-libs-gstglbasememory.html#GstGLBaseMemory" title="GstGLBaseMemory"><span class="type">GstGLBaseMemory</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<p class="since">Since: 1.8</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-gl-base-memory-alloc"></a><h3>gst_gl_base_memory_alloc ()</h3>
+<pre class="programlisting"><a class="link" href="gst-plugins-bad-libs-gstglbasememory.html#GstGLBaseMemory" title="GstGLBaseMemory"><span class="returnvalue">GstGLBaseMemory</span></a> *
+gst_gl_base_memory_alloc (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-gstglbasememory.html#GstGLBaseMemoryAllocator"><span class="type">GstGLBaseMemoryAllocator</span></a> *allocator</code></em>,
+                          <em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-gstglbasememory.html#GstGLAllocationParams" title="struct GstGLAllocationParams"><span class="type">GstGLAllocationParams</span></a> *params</code></em>);</pre>
+<div class="refsect3">
+<a name="id-1.2.9.3.8.24.4"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>allocator</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gst-plugins-bad-libs-gstglbasememory.html#GstGLBaseMemoryAllocator"><span class="type">GstGLBaseMemoryAllocator</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>params</p></td>
+<td class="parameter_description"><p>the <a class="link" href="gst-plugins-bad-libs-gstglbasememory.html#GstGLAllocationParams" title="struct GstGLAllocationParams"><span class="type">GstGLAllocationParams</span></a> to allocate the memory with</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="id-1.2.9.3.8.24.5"></a><h4>Returns</h4>
+<p> a new <a class="link" href="gst-plugins-bad-libs-gstglbasememory.html#GstGLBaseMemory" title="GstGLBaseMemory"><span class="type">GstGLBaseMemory</span></a> from <em class="parameter"><code>allocator</code></em>
+with the requested <em class="parameter"><code>params</code></em>
+.</p>
+</div>
+<p class="since">Since: 1.8</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-gl-base-memory-alloc-data"></a><h3>gst_gl_base_memory_alloc_data ()</h3>
+<pre class="programlisting"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
+gst_gl_base_memory_alloc_data (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-gstglbasememory.html#GstGLBaseMemory" title="GstGLBaseMemory"><span class="type">GstGLBaseMemory</span></a> *gl_mem</code></em>);</pre>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-gl-base-memory-memcpy"></a><h3>gst_gl_base_memory_memcpy ()</h3>
+<pre class="programlisting"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
+gst_gl_base_memory_memcpy (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-gstglbasememory.html#GstGLBaseMemory" title="GstGLBaseMemory"><span class="type">GstGLBaseMemory</span></a> *src</code></em>,
+                           <em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-gstglbasememory.html#GstGLBaseMemory" title="GstGLBaseMemory"><span class="type">GstGLBaseMemory</span></a> *dest</code></em>,
+                           <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gssize"><span class="type">gssize</span></a> offset</code></em>,
+                           <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gssize"><span class="type">gssize</span></a> size</code></em>);</pre>
+<div class="refsect3">
+<a name="id-1.2.9.3.8.26.4"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>src</p></td>
+<td class="parameter_description"><p>the source <a class="link" href="gst-plugins-bad-libs-gstglbasememory.html#GstGLBaseMemory" title="GstGLBaseMemory"><span class="type">GstGLBaseMemory</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>dest</p></td>
+<td class="parameter_description"><p>the destination <a class="link" href="gst-plugins-bad-libs-gstglbasememory.html#GstGLBaseMemory" title="GstGLBaseMemory"><span class="type">GstGLBaseMemory</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>offset</p></td>
+<td class="parameter_description"><p>the offset to start at</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>size</p></td>
+<td class="parameter_description"><p>the number of bytes to copy</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="id-1.2.9.3.8.26.5"></a><h4>Returns</h4>
+<p> whether the copy suceeded.</p>
+</div>
+<p class="since">Since: 1.8</p>
+</div>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-libs-gstglbasememory.other_details"></a><h2>Types and Values</h2>
+<div class="refsect2">
+<a name="GstGLBaseMemoryAllocator-struct"></a><h3>GstGLBaseMemoryAllocator</h3>
+<pre class="programlisting">typedef struct _GstGLBaseMemoryAllocator GstGLBaseMemoryAllocator;</pre>
+<p>Opaque <a class="link" href="gst-plugins-bad-libs-gstglbasememory.html#GstGLBaseMemoryAllocator"><span class="type">GstGLBaseMemoryAllocator</span></a> struct</p>
+<p class="since">Since: 1.8</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstGLBaseMemoryAllocatorClass"></a><h3>GstGLBaseMemoryAllocatorClass</h3>
+<pre class="programlisting">typedef struct {
+  GstAllocatorClass parent_class;
+
+  GstGLBaseMemoryAllocatorAllocFunction         alloc;
+
+  GstGLBaseMemoryAllocatorCreateFunction        create;
+  GstGLBaseMemoryAllocatorMapFunction           map;
+#if 0
+  GstGLBaseMemoryAllocatorFlushFunction         flush;        /* make CPU writes visible to the GPU */
+  GstGLBaseMemoryAllocatorInvalidateFunction    invalidate;   /* make GPU writes visible to the CPU */
+#endif
+  GstGLBaseMemoryAllocatorUnmapFunction         unmap;
+  GstGLBaseMemoryAllocatorCopyFunction          copy;
+  GstGLBaseMemoryAllocatorDestroyFunction       destroy;
+} GstGLBaseMemoryAllocatorClass;
+</pre>
+<div class="refsect3">
+<a name="id-1.2.9.3.9.3.4"></a><h4>Members</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="300px" class="struct_members_name">
+<col class="struct_members_description">
+<col width="200px" class="struct_members_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="struct_member_name"><p><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstAllocator.html#GstAllocatorClass"><span class="type">GstAllocatorClass</span></a> <em class="structfield"><code><a name="GstGLBaseMemoryAllocatorClass.parent-class"></a>parent_class</code></em>;</p></td>
+<td class="struct_member_description"><p>the parent class</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a class="link" href="gst-plugins-bad-libs-gstglbasememory.html#GstGLBaseMemoryAllocatorAllocFunction" title="GstGLBaseMemoryAllocatorAllocFunction ()"><span class="type">GstGLBaseMemoryAllocatorAllocFunction</span></a> <em class="structfield"><code><a name="GstGLBaseMemoryAllocatorClass.alloc"></a>alloc</code></em>;</p></td>
+<td class="struct_member_description"><p>a <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-bad-libs/html/gst-plugins-bad-libs-gstglbasememory.html#GstGLBaseMemoryAllocatorAllocFunction"><span class="type">GstGLBaseMemoryAllocatorAllocFunctions</span></a></p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a class="link" href="gst-plugins-bad-libs-gstglbasememory.html#GstGLBaseMemoryAllocatorCreateFunction" title="GstGLBaseMemoryAllocatorCreateFunction ()"><span class="type">GstGLBaseMemoryAllocatorCreateFunction</span></a> <em class="structfield"><code><a name="GstGLBaseMemoryAllocatorClass.create"></a>create</code></em>;</p></td>
+<td class="struct_member_description"><p>a <a class="link" href="gst-plugins-bad-libs-gstglbasememory.html#GstGLBaseMemoryAllocatorCreateFunction" title="GstGLBaseMemoryAllocatorCreateFunction ()"><span class="type">GstGLBaseMemoryAllocatorCreateFunction</span></a></p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a class="link" href="gst-plugins-bad-libs-gstglbasememory.html#GstGLBaseMemoryAllocatorMapFunction" title="GstGLBaseMemoryAllocatorMapFunction ()"><span class="type">GstGLBaseMemoryAllocatorMapFunction</span></a> <em class="structfield"><code><a name="GstGLBaseMemoryAllocatorClass.map"></a>map</code></em>;</p></td>
+<td class="struct_member_description"><p>a <a class="link" href="gst-plugins-bad-libs-gstglbasememory.html#GstGLBaseMemoryAllocatorMapFunction" title="GstGLBaseMemoryAllocatorMapFunction ()"><span class="type">GstGLBaseMemoryAllocatorMapFunction</span></a></p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><span class="type">GstGLBaseMemoryAllocatorFlushFunction</span> <em class="structfield"><code><a name="GstGLBaseMemoryAllocatorClass.flush"></a>flush</code></em>;</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><span class="type">GstGLBaseMemoryAllocatorInvalidateFunction</span> <em class="structfield"><code><a name="GstGLBaseMemoryAllocatorClass.invalidate"></a>invalidate</code></em>;</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a class="link" href="gst-plugins-bad-libs-gstglbasememory.html#GstGLBaseMemoryAllocatorUnmapFunction" title="GstGLBaseMemoryAllocatorUnmapFunction ()"><span class="type">GstGLBaseMemoryAllocatorUnmapFunction</span></a> <em class="structfield"><code><a name="GstGLBaseMemoryAllocatorClass.unmap"></a>unmap</code></em>;</p></td>
+<td class="struct_member_description"><p>a <a class="link" href="gst-plugins-bad-libs-gstglbasememory.html#GstGLBaseMemoryAllocatorUnmapFunction" title="GstGLBaseMemoryAllocatorUnmapFunction ()"><span class="type">GstGLBaseMemoryAllocatorUnmapFunction</span></a></p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a class="link" href="gst-plugins-bad-libs-gstglbasememory.html#GstGLBaseMemoryAllocatorCopyFunction" title="GstGLBaseMemoryAllocatorCopyFunction ()"><span class="type">GstGLBaseMemoryAllocatorCopyFunction</span></a> <em class="structfield"><code><a name="GstGLBaseMemoryAllocatorClass.copy"></a>copy</code></em>;</p></td>
+<td class="struct_member_description"><p>a <a class="link" href="gst-plugins-bad-libs-gstglbasememory.html#GstGLBaseMemoryAllocatorCopyFunction" title="GstGLBaseMemoryAllocatorCopyFunction ()"><span class="type">GstGLBaseMemoryAllocatorCopyFunction</span></a></p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a class="link" href="gst-plugins-bad-libs-gstglbasememory.html#GstGLBaseMemoryAllocatorDestroyFunction" title="GstGLBaseMemoryAllocatorDestroyFunction ()"><span class="type">GstGLBaseMemoryAllocatorDestroyFunction</span></a> <em class="structfield"><code><a name="GstGLBaseMemoryAllocatorClass.destroy"></a>destroy</code></em>;</p></td>
+<td class="struct_member_description"><p>a <a class="link" href="gst-plugins-bad-libs-gstglbasememory.html#GstGLBaseMemoryAllocatorDestroyFunction" title="GstGLBaseMemoryAllocatorDestroyFunction ()"><span class="type">GstGLBaseMemoryAllocatorDestroyFunction</span></a></p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<p class="since">Since: 1.8</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GST-GL-BASE-MEMORY-ALLOCATOR-NAME:CAPS"></a><h3>GST_GL_BASE_MEMORY_ALLOCATOR_NAME</h3>
+<pre class="programlisting">#define GST_GL_BASE_MEMORY_ALLOCATOR_NAME   "GLBaseMemory"
+</pre>
+<p>The name of the GL buffer allocator</p>
+<p class="since">Since: 1.8</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstGLBaseMemoryError"></a><h3>enum GstGLBaseMemoryError</h3>
+<div class="refsect3">
+<a name="id-1.2.9.3.9.5.3"></a><h4>Members</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="300px" class="enum_members_name">
+<col class="enum_members_description">
+<col width="200px" class="enum_members_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="enum_member_name"><p><a name="GST-GL-BASE-MEMORY-ERROR-FAILED:CAPS"></a>GST_GL_BASE_MEMORY_ERROR_FAILED</p></td>
+<td class="enum_member_description">
+<p>generic faliure</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-GL-BASE-MEMORY-ERROR-OLD-LIBS:CAPS"></a>GST_GL_BASE_MEMORY_ERROR_OLD_LIBS</p></td>
+<td class="enum_member_description">
+<p>the implementation is too old and doesn't
+                                    implement enough features</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-GL-BASE-MEMORY-ERROR-RESOURCE-UNAVAILABLE:CAPS"></a>GST_GL_BASE_MEMORY_ERROR_RESOURCE_UNAVAILABLE</p></td>
+<td class="enum_member_description">
+<p>a resource could not be found</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstGLBaseMemoryTransfer"></a><h3>enum GstGLBaseMemoryTransfer</h3>
+<div class="refsect3">
+<a name="id-1.2.9.3.9.6.3"></a><h4>Members</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="300px" class="enum_members_name">
+<col class="enum_members_description">
+<col width="200px" class="enum_members_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="enum_member_name"><p><a name="GST-GL-BASE-MEMORY-TRANSFER-NEED-DOWNLOAD:CAPS"></a>GST_GL_BASE_MEMORY_TRANSFER_NEED_DOWNLOAD</p></td>
+<td class="enum_member_description">
+<p>the texture needs downloading
+                                            to the data pointer</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-GL-BASE-MEMORY-TRANSFER-NEED-UPLOAD:CAPS"></a>GST_GL_BASE_MEMORY_TRANSFER_NEED_UPLOAD</p></td>
+<td class="enum_member_description">
+<p>the data pointer needs uploading
+                                            to the texture</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstGLAllocationParams"></a><h3>struct GstGLAllocationParams</h3>
+<pre class="programlisting">struct GstGLAllocationParams {
+  gsize                             struct_size;
+  GstGLAllocationParamsCopyFunc     copy;
+  GstGLAllocationParamsFreeFunc     free;
+
+  guint                             alloc_flags;
+  gsize                             alloc_size;
+  GstAllocationParams              *alloc_params;
+  GstGLContext                     *context;
+  GDestroyNotify                    notify;
+  gpointer                          user_data;
+
+  /* GST_GL_ALLOCATION_PARAMS_ALLOC_FLAG_WRAP_SYSMEM only */
+  gpointer                          wrapped_data;
+  /* GST_GL_ALLOCATION_PARAMS_ALLOC_FLAG_WRAP_GPU_HANDLE only */
+  guint                             gl_handle;
+};
+</pre>
+<div class="refsect3">
+<a name="id-1.2.9.3.9.7.4"></a><h4>Members</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="300px" class="struct_members_name">
+<col class="struct_members_description">
+<col width="200px" class="struct_members_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="struct_member_name"><p><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gsize"><span class="type">gsize</span></a> <em class="structfield"><code><a name="GstGLAllocationParams.struct-size"></a>struct_size</code></em>;</p></td>
+<td class="struct_member_description"><p>the size of the struct (including and subclass data)</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a class="link" href="gst-plugins-bad-libs-gstglbasememory.html#GstGLAllocationParamsCopyFunc" title="GstGLAllocationParamsCopyFunc ()"><span class="type">GstGLAllocationParamsCopyFunc</span></a> <em class="structfield"><code><a name="GstGLAllocationParams.copy"></a>copy</code></em>;</p></td>
+<td class="struct_member_description"><p>a <a class="link" href="gst-plugins-bad-libs-gstglbasememory.html#GstGLAllocationParamsCopyFunc" title="GstGLAllocationParamsCopyFunc ()"><span class="type">GstGLAllocationParamsCopyFunc</span></a></p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a class="link" href="gst-plugins-bad-libs-gstglbasememory.html#GstGLAllocationParamsFreeFunc" title="GstGLAllocationParamsFreeFunc ()"><span class="type">GstGLAllocationParamsFreeFunc</span></a> <em class="structfield"><code><a name="GstGLAllocationParams.free"></a>free</code></em>;</p></td>
+<td class="struct_member_description"><p>a <a class="link" href="gst-plugins-bad-libs-gstglbasememory.html#GstGLAllocationParamsFreeFunc" title="GstGLAllocationParamsFreeFunc ()"><span class="type">GstGLAllocationParamsFreeFunc</span></a></p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> <em class="structfield"><code><a name="GstGLAllocationParams.alloc-flags"></a>alloc_flags</code></em>;</p></td>
+<td class="struct_member_description"><p>allocation flags</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gsize"><span class="type">gsize</span></a> <em class="structfield"><code><a name="GstGLAllocationParams.alloc-size"></a>alloc_size</code></em>;</p></td>
+<td class="struct_member_description"><p>the allocation size</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstAllocator.html#GstAllocationParams"><span class="type">GstAllocationParams</span></a> *<em class="structfield"><code><a name="GstGLAllocationParams.alloc-params"></a>alloc_params</code></em>;</p></td>
+<td class="struct_member_description"><p>the <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstAllocator.html#GstAllocationParams"><span class="type">GstAllocationParams</span></a></p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a class="link" href="GstGLContext.html" title="GstGLContext"><span class="type">GstGLContext</span></a> *<em class="structfield"><code><a name="GstGLAllocationParams.context"></a>context</code></em>;</p></td>
+<td class="struct_member_description"><p>a <a class="link" href="GstGLContext.html" title="GstGLContext"><span class="type">GstGLContext</span></a></p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="https://developer.gnome.org/glib/unstable/glib-Datasets.html#GDestroyNotify"><span class="type">GDestroyNotify</span></a> <em class="structfield"><code><a name="GstGLAllocationParams.notify"></a>notify</code></em>;</p></td>
+<td class="struct_member_description"><p>a <a href="https://developer.gnome.org/glib/unstable/glib-Datasets.html#GDestroyNotify"><span class="type">GDestroyNotify</span></a></p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> <em class="structfield"><code><a name="GstGLAllocationParams.user-data"></a>user_data</code></em>;</p></td>
+<td class="struct_member_description"><p>argument to call <em class="parameter"><code>notify</code></em>
+with</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> <em class="structfield"><code><a name="GstGLAllocationParams.wrapped-data"></a>wrapped_data</code></em>;</p></td>
+<td class="struct_member_description"><p>the wrapped data pointer</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> <em class="structfield"><code><a name="GstGLAllocationParams.gl-handle"></a>gl_handle</code></em>;</p></td>
+<td class="struct_member_description"><p>the wrapped OpenGL handle</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstGLBaseMemory"></a><h3>GstGLBaseMemory</h3>
+<pre class="programlisting">typedef struct {
+  GstMemory             mem;
+
+  GstGLContext         *context;
+} GstGLBaseMemory;
+</pre>
+<p>Represents information about a GL memory object</p>
+<div class="refsect3">
+<a name="id-1.2.9.3.9.8.5"></a><h4>Members</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="300px" class="struct_members_name">
+<col class="struct_members_description">
+<col width="200px" class="struct_members_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="struct_member_name"><p><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstMemory.html"><span class="type">GstMemory</span></a> <em class="structfield"><code><a name="GstGLBaseMemory.mem"></a>mem</code></em>;</p></td>
+<td class="struct_member_description"><p>the parent object</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a class="link" href="GstGLContext.html" title="GstGLContext"><span class="type">GstGLContext</span></a> *<em class="structfield"><code><a name="GstGLBaseMemory.context"></a>context</code></em>;</p></td>
+<td class="struct_member_description"><p>the <a class="link" href="GstGLContext.html" title="GstGLContext"><span class="type">GstGLContext</span></a> to use for GL operations</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-libs-gstglbasememory.see-also"></a><h2>See Also</h2>
+<p><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstMemory.html"><span class="type">GstMemory</span></a>, <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstAllocator.html"><span class="type">GstAllocator</span></a></p>
+</div>
+</div>
+<div class="footer">
+<hr>Generated by GTK-Doc V1.24</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/libs/html/gst-plugins-bad-libs-gstglmemory.html b/docs/libs/html/gst-plugins-bad-libs-gstglmemory.html
deleted file mode 100644
index da60855..0000000
--- a/docs/libs/html/gst-plugins-bad-libs-gstglmemory.html
+++ /dev/null
@@ -1,716 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html>
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>GstGLMemory: GStreamer Bad Plugins 1.0 Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
-<link rel="home" href="index.html" title="GStreamer Bad Plugins 1.0 Library Reference Manual">
-<link rel="up" href="gl.html" title="OpenGL Helper Library">
-<link rel="prev" href="GstGLFramebuffer.html" title="GstGLFramebuffer">
-<link rel="next" href="gst-plugins-bad-libs-gstglshader.html" title="GstGLShader">
-<meta name="generator" content="GTK-Doc V1.24 (XML mode)">
-<link rel="stylesheet" href="style.css" type="text/css">
-</head>
-<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
-<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="5"><tr valign="middle">
-<td width="100%" align="left" class="shortcuts">
-<a href="#" class="shortcut">Top</a><span id="nav_description">  <span class="dim">|</span> 
-                  <a href="#gst-plugins-bad-libs-gstglmemory.description" class="shortcut">Description</a></span><span id="nav_hierarchy">  <span class="dim">|</span> 
-                  <a href="#gst-plugins-bad-libs-gstglmemory.object-hierarchy" class="shortcut">Object Hierarchy</a></span>
-</td>
-<td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
-<td><a accesskey="u" href="gl.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
-<td><a accesskey="p" href="GstGLFramebuffer.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
-<td><a accesskey="n" href="gst-plugins-bad-libs-gstglshader.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
-</tr></table>
-<div class="refentry">
-<a name="gst-plugins-bad-libs-gstglmemory"></a><div class="titlepage"></div>
-<div class="refnamediv"><table width="100%"><tr>
-<td valign="top">
-<h2><span class="refentrytitle"><a name="gst-plugins-bad-libs-gstglmemory.top_of_page"></a>GstGLMemory</span></h2>
-<p>GstGLMemory — memory subclass for GL textures</p>
-</td>
-<td class="gallery_image" valign="top" align="right"></td>
-</tr></table></div>
-<div class="refsect1">
-<a name="gst-plugins-bad-libs-gstglmemory.functions"></a><h2>Functions</h2>
-<div class="informaltable"><table width="100%" border="0">
-<colgroup>
-<col width="150px" class="functions_return">
-<col class="functions_name">
-</colgroup>
-<tbody>
-<tr>
-<td class="function_type">
-<span class="returnvalue">void</span>
-</td>
-<td class="function_name">
-<a class="link" href="gst-plugins-bad-libs-gstglmemory.html#gst-gl-memory-init" title="gst_gl_memory_init ()">gst_gl_memory_init</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstMemory.html"><span class="returnvalue">GstMemory</span></a> *
-</td>
-<td class="function_name">
-<a class="link" href="gst-plugins-bad-libs-gstglmemory.html#gst-gl-memory-alloc" title="gst_gl_memory_alloc ()">gst_gl_memory_alloc</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a class="link" href="gst-plugins-bad-libs-gstglmemory.html#GstGLMemory" title="GstGLMemory"><span class="returnvalue">GstGLMemory</span></a> *
-</td>
-<td class="function_name">
-<a class="link" href="gst-plugins-bad-libs-gstglmemory.html#gst-gl-memory-wrapped" title="gst_gl_memory_wrapped ()">gst_gl_memory_wrapped</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a class="link" href="gst-plugins-bad-libs-gstglmemory.html#GstGLMemory" title="GstGLMemory"><span class="returnvalue">GstGLMemory</span></a> *
-</td>
-<td class="function_name">
-<a class="link" href="gst-plugins-bad-libs-gstglmemory.html#gst-gl-memory-wrapped-texture" title="gst_gl_memory_wrapped_texture ()">gst_gl_memory_wrapped_texture</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="gst-plugins-bad-libs-gstglmemory.html#gst-gl-memory-copy-into-texture" title="gst_gl_memory_copy_into_texture ()">gst_gl_memory_copy_into_texture</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="gst-plugins-bad-libs-gstglmemory.html#gst-gl-memory-setup-buffer" title="gst_gl_memory_setup_buffer ()">gst_gl_memory_setup_buffer</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="gst-plugins-bad-libs-gstglmemory.html#gst-gl-memory-setup-wrapped" title="gst_gl_memory_setup_wrapped ()">gst_gl_memory_setup_wrapped</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<span class="returnvalue">GstVideoGLTextureType</span>
-</td>
-<td class="function_name">
-<a class="link" href="gst-plugins-bad-libs-gstglmemory.html#gst-gl-texture-type-from-format" title="gst_gl_texture_type_from_format ()">gst_gl_texture_type_from_format</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="gst-plugins-bad-libs-gstglmemory.html#gst-is-gl-memory" title="gst_is_gl_memory ()">gst_is_gl_memory</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-</tbody>
-</table></div>
-</div>
-<a name="GstGLAllocator"></a><div class="refsect1">
-<a name="gst-plugins-bad-libs-gstglmemory.other"></a><h2>Types and Values</h2>
-<div class="informaltable"><table width="100%" border="0">
-<colgroup>
-<col width="150px" class="name">
-<col class="description">
-</colgroup>
-<tbody>
-<tr>
-<td class="datatype_keyword"> </td>
-<td class="function_name"><a class="link" href="gst-plugins-bad-libs-gstglmemory.html#GstGLAllocator-struct" title="GstGLAllocator">GstGLAllocator</a></td>
-</tr>
-<tr>
-<td class="datatype_keyword"> </td>
-<td class="function_name"><a class="link" href="gst-plugins-bad-libs-gstglmemory.html#GstGLAllocatorClass" title="GstGLAllocatorClass">GstGLAllocatorClass</a></td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="gst-plugins-bad-libs-gstglmemory.html#GST-GL-MEMORY-ALLOCATOR:CAPS" title="GST_GL_MEMORY_ALLOCATOR">GST_GL_MEMORY_ALLOCATOR</a></td>
-</tr>
-<tr>
-<td class="datatype_keyword"> </td>
-<td class="function_name"><a class="link" href="gst-plugins-bad-libs-gstglmemory.html#GstGLMemory" title="GstGLMemory">GstGLMemory</a></td>
-</tr>
-</tbody>
-</table></div>
-</div>
-<div class="refsect1">
-<a name="gst-plugins-bad-libs-gstglmemory.object-hierarchy"></a><h2>Object Hierarchy</h2>
-<pre class="screen">    <a href="https://developer.gnome.org/gobject/unstable/gobject-The-Base-Object-Type.html#GObject">GObject</a>
-    <span class="lineart">╰──</span> <a href="https://developer.gnome.org/gobject/unstable/gobject-The-Base-Object-Type.html#GInitiallyUnowned">GInitiallyUnowned</a>
-        <span class="lineart">╰──</span> <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstObject.html">GstObject</a>
-            <span class="lineart">╰──</span> <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstAllocator.html">GstAllocator</a>
-                <span class="lineart">╰──</span> GstGLBaseBufferAllocator
-                    <span class="lineart">╰──</span> GstGLAllocator
-</pre>
-</div>
-<div class="refsect1">
-<a name="gst-plugins-bad-libs-gstglmemory.description"></a><h2>Description</h2>
-<p>GstGLMemory is a <span class="type">GstGLBaseBuffer</span> subclass providing support for the mapping of
-GL textures.  </p>
-<p><a class="link" href="gst-plugins-bad-libs-gstglmemory.html#GstGLMemory" title="GstGLMemory"><span class="type">GstGLMemory</span></a> is created through <a class="link" href="gst-plugins-bad-libs-gstglmemory.html#gst-gl-memory-alloc" title="gst_gl_memory_alloc ()"><code class="function">gst_gl_memory_alloc()</code></a> or system memory can
-be wrapped through <a class="link" href="gst-plugins-bad-libs-gstglmemory.html#gst-gl-memory-wrapped" title="gst_gl_memory_wrapped ()"><code class="function">gst_gl_memory_wrapped()</code></a>.</p>
-<p>Data is uploaded or downloaded from the GPU as is necessary.</p>
-</div>
-<div class="refsect1">
-<a name="gst-plugins-bad-libs-gstglmemory.functions_details"></a><h2>Functions</h2>
-<div class="refsect2">
-<a name="gst-gl-memory-init"></a><h3>gst_gl_memory_init ()</h3>
-<pre class="programlisting"><span class="returnvalue">void</span>
-gst_gl_memory_init (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
-<p>Initializes the GL Memory allocator. It is safe to call this function
-multiple times.  This must be called before any other GstGLMemory operation.</p>
-</div>
-<hr>
-<div class="refsect2">
-<a name="gst-gl-memory-alloc"></a><h3>gst_gl_memory_alloc ()</h3>
-<pre class="programlisting"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstMemory.html"><span class="returnvalue">GstMemory</span></a> *
-gst_gl_memory_alloc (<em class="parameter"><code><a class="link" href="GstGLContext.html" title="GstGLContext"><span class="type">GstGLContext</span></a> *context</code></em>,
-                     <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstAllocator.html#GstAllocationParams"><span class="type">GstAllocationParams</span></a> *params</code></em>,
-                     <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base-libs/html/gst-plugins-base-libs-gstvideo.html#GstVideoInfo"><span class="type">GstVideoInfo</span></a> *info</code></em>,
-                     <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> plane</code></em>,
-                     <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base-libs/html/gst-plugins-base-libs-gstvideo.html#GstVideoAlignment"><span class="type">GstVideoAlignment</span></a> *valign</code></em>);</pre>
-<p>Allocated a new <span class="type">GstGlMemory</span>.</p>
-<div class="refsect3">
-<a name="id-1.2.9.17.8.3.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
-<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
-</colgroup>
-<tbody>
-<tr>
-<td class="parameter_name"><p>context</p></td>
-<td class="parameter_description"><p>a <a class="link" href="GstGLContext.html" title="GstGLContext"><span class="type">GstGLContext</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr>
-<tr>
-<td class="parameter_name"><p>params</p></td>
-<td class="parameter_description"><p>a <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstAllocator.html#GstAllocationParams"><span class="type">GstAllocationParams</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr>
-<tr>
-<td class="parameter_name"><p>info</p></td>
-<td class="parameter_description"><p>the <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base-libs/html/gst-plugins-base-libs-gstvideo.html#GstVideoInfo"><span class="type">GstVideoInfo</span></a> of the memory</p></td>
-<td class="parameter_annotations"> </td>
-</tr>
-<tr>
-<td class="parameter_name"><p>plane</p></td>
-<td class="parameter_description"><p>the plane this memory will represent</p></td>
-<td class="parameter_annotations"> </td>
-</tr>
-<tr>
-<td class="parameter_name"><p>valign</p></td>
-<td class="parameter_description"><p>the <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base-libs/html/gst-plugins-base-libs-gstvideo.html#GstVideoAlignment"><span class="type">GstVideoAlignment</span></a> applied to <em class="parameter"><code>info</code></em>
-</p></td>
-<td class="parameter_annotations"> </td>
-</tr>
-</tbody>
-</table></div>
-</div>
-<div class="refsect3">
-<a name="id-1.2.9.17.8.3.6"></a><h4>Returns</h4>
-<p> a <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstMemory.html"><span class="type">GstMemory</span></a> object with a GL texture specified by <em class="parameter"><code>vinfo</code></em>
-from <em class="parameter"><code>context</code></em>
-</p>
-</div>
-</div>
-<hr>
-<div class="refsect2">
-<a name="gst-gl-memory-wrapped"></a><h3>gst_gl_memory_wrapped ()</h3>
-<pre class="programlisting"><a class="link" href="gst-plugins-bad-libs-gstglmemory.html#GstGLMemory" title="GstGLMemory"><span class="returnvalue">GstGLMemory</span></a> *
-gst_gl_memory_wrapped (<em class="parameter"><code><a class="link" href="GstGLContext.html" title="GstGLContext"><span class="type">GstGLContext</span></a> *context</code></em>,
-                       <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base-libs/html/gst-plugins-base-libs-gstvideo.html#GstVideoInfo"><span class="type">GstVideoInfo</span></a> *info</code></em>,
-                       <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> plane</code></em>,
-                       <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base-libs/html/gst-plugins-base-libs-gstvideo.html#GstVideoAlignment"><span class="type">GstVideoAlignment</span></a> *valign</code></em>,
-                       <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> data</code></em>,
-                       <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data</code></em>,
-                       <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Datasets.html#GDestroyNotify"><span class="type">GDestroyNotify</span></a> notify</code></em>);</pre>
-<p>Wrapped <em class="parameter"><code>data</code></em>
- into a <a class="link" href="gst-plugins-bad-libs-gstglmemory.html#GstGLMemory" title="GstGLMemory"><span class="type">GstGLMemory</span></a>. This version will account for padding
-added to the allocation and expressed through <em class="parameter"><code>valign</code></em>
-.</p>
-<div class="refsect3">
-<a name="id-1.2.9.17.8.4.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
-<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
-</colgroup>
-<tbody>
-<tr>
-<td class="parameter_name"><p>context</p></td>
-<td class="parameter_description"><p>a <a class="link" href="GstGLContext.html" title="GstGLContext"><span class="type">GstGLContext</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr>
-<tr>
-<td class="parameter_name"><p>info</p></td>
-<td class="parameter_description"><p>the <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base-libs/html/gst-plugins-base-libs-gstvideo.html#GstVideoInfo"><span class="type">GstVideoInfo</span></a> of the memory and data</p></td>
-<td class="parameter_annotations"> </td>
-</tr>
-<tr>
-<td class="parameter_name"><p>plane</p></td>
-<td class="parameter_description"><p>the plane this memory will represent</p></td>
-<td class="parameter_annotations"> </td>
-</tr>
-<tr>
-<td class="parameter_name"><p>valign</p></td>
-<td class="parameter_description"><p>the <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base-libs/html/gst-plugins-base-libs-gstvideo.html#GstVideoAlignment"><span class="type">GstVideoAlignment</span></a> applied to <em class="parameter"><code>info</code></em>
-</p></td>
-<td class="parameter_annotations"> </td>
-</tr>
-<tr>
-<td class="parameter_name"><p>data</p></td>
-<td class="parameter_description"><p>the data to wrap</p></td>
-<td class="parameter_annotations"> </td>
-</tr>
-<tr>
-<td class="parameter_name"><p>user_data</p></td>
-<td class="parameter_description"><p>data called with for <em class="parameter"><code>notify</code></em>
-</p></td>
-<td class="parameter_annotations"> </td>
-</tr>
-<tr>
-<td class="parameter_name"><p>notify</p></td>
-<td class="parameter_description"><p>function called with <em class="parameter"><code>user_data</code></em>
-when <em class="parameter"><code>data</code></em>
-needs to be freed</p></td>
-<td class="parameter_annotations"> </td>
-</tr>
-</tbody>
-</table></div>
-</div>
-<div class="refsect3">
-<a name="id-1.2.9.17.8.4.6"></a><h4>Returns</h4>
-<p> a <a class="link" href="gst-plugins-bad-libs-gstglmemory.html#GstGLMemory" title="GstGLMemory"><span class="type">GstGLMemory</span></a> object with a GL texture specified by <em class="parameter"><code>v_info</code></em>
-from <em class="parameter"><code>context</code></em>
-and contents specified by <em class="parameter"><code>data</code></em>
-</p>
-</div>
-</div>
-<hr>
-<div class="refsect2">
-<a name="gst-gl-memory-wrapped-texture"></a><h3>gst_gl_memory_wrapped_texture ()</h3>
-<pre class="programlisting"><a class="link" href="gst-plugins-bad-libs-gstglmemory.html#GstGLMemory" title="GstGLMemory"><span class="returnvalue">GstGLMemory</span></a> *
-gst_gl_memory_wrapped_texture (<em class="parameter"><code><a class="link" href="GstGLContext.html" title="GstGLContext"><span class="type">GstGLContext</span></a> *context</code></em>,
-                               <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> texture_id</code></em>,
-                               <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> texture_target</code></em>,
-                               <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base-libs/html/gst-plugins-base-libs-gstvideo.html#GstVideoInfo"><span class="type">GstVideoInfo</span></a> *info</code></em>,
-                               <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> plane</code></em>,
-                               <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base-libs/html/gst-plugins-base-libs-gstvideo.html#GstVideoAlignment"><span class="type">GstVideoAlignment</span></a> *valign</code></em>,
-                               <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data</code></em>,
-                               <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Datasets.html#GDestroyNotify"><span class="type">GDestroyNotify</span></a> notify</code></em>);</pre>
-<p>Wraps a texture handle into a <a class="link" href="gst-plugins-bad-libs-gstglmemory.html#GstGLMemory" title="GstGLMemory"><span class="type">GstGLMemory</span></a>.</p>
-<div class="refsect3">
-<a name="id-1.2.9.17.8.5.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
-<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
-</colgroup>
-<tbody>
-<tr>
-<td class="parameter_name"><p>context</p></td>
-<td class="parameter_description"><p>a <a class="link" href="GstGLContext.html" title="GstGLContext"><span class="type">GstGLContext</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr>
-<tr>
-<td class="parameter_name"><p>texture_id</p></td>
-<td class="parameter_description"><p>the GL texture handle</p></td>
-<td class="parameter_annotations"> </td>
-</tr>
-<tr>
-<td class="parameter_name"><p>texture_target</p></td>
-<td class="parameter_description"><p>the GL texture target</p></td>
-<td class="parameter_annotations"> </td>
-</tr>
-<tr>
-<td class="parameter_name"><p>info</p></td>
-<td class="parameter_description"><p>the <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base-libs/html/gst-plugins-base-libs-gstvideo.html#GstVideoInfo"><span class="type">GstVideoInfo</span></a> of the memory</p></td>
-<td class="parameter_annotations"> </td>
-</tr>
-<tr>
-<td class="parameter_name"><p>plane</p></td>
-<td class="parameter_description"><p>The plane this memory will represent</p></td>
-<td class="parameter_annotations"> </td>
-</tr>
-<tr>
-<td class="parameter_name"><p>user_data</p></td>
-<td class="parameter_description"><p>user data</p></td>
-<td class="parameter_annotations"> </td>
-</tr>
-<tr>
-<td class="parameter_name"><p>notify</p></td>
-<td class="parameter_description"><p>Destroy callback for the user data</p></td>
-<td class="parameter_annotations"> </td>
-</tr>
-</tbody>
-</table></div>
-</div>
-<div class="refsect3">
-<a name="id-1.2.9.17.8.5.6"></a><h4>Returns</h4>
-<p> a newly allocated <a class="link" href="gst-plugins-bad-libs-gstglmemory.html#GstGLMemory" title="GstGLMemory"><span class="type">GstGLMemory</span></a></p>
-</div>
-</div>
-<hr>
-<div class="refsect2">
-<a name="gst-gl-memory-copy-into-texture"></a><h3>gst_gl_memory_copy_into_texture ()</h3>
-<pre class="programlisting"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-gst_gl_memory_copy_into_texture (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-gstglmemory.html#GstGLMemory" title="GstGLMemory"><span class="type">GstGLMemory</span></a> *gl_mem</code></em>,
-                                 <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> tex_id</code></em>,
-                                 <em class="parameter"><code><span class="type">GstVideoGLTextureType</span> tex_type</code></em>,
-                                 <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a> width</code></em>,
-                                 <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a> height</code></em>,
-                                 <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a> stride</code></em>,
-                                 <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> respecify</code></em>);</pre>
-<p>Copies <em class="parameter"><code>gl_mem</code></em>
- into the texture specfified by <em class="parameter"><code>tex_id</code></em>
-.  The format of <em class="parameter"><code>tex_id</code></em>
-
-is specified by <em class="parameter"><code>tex_type</code></em>
-, <em class="parameter"><code>width</code></em>
- and <em class="parameter"><code>height</code></em>
-.</p>
-<p>If <em class="parameter"><code>respecify</code></em>
- is <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a>, then the copy is performed in terms of the texture
-data.  This is useful for splitting RGBA textures into RG or R textures or
-vice versa. The requirement for this to succeed is that the backing texture
-data must be the same size, i.e. say a RGBA8 texture is converted into a RG8
-texture, then the RG texture must have twice as many pixels available for
-output as the RGBA texture.</p>
-<p>Otherwise, if <em class="parameter"><code>respecify</code></em>
- is <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a>, then the copy is performed per texel
-using glCopyTexImage.  See the OpenGL specification for details on the
-mappings between texture formats.</p>
-<div class="refsect3">
-<a name="id-1.2.9.17.8.6.7"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
-<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
-</colgroup>
-<tbody>
-<tr>
-<td class="parameter_name"><p>gl_mem</p></td>
-<td class="parameter_description"><p>a <a class="link" href="gst-plugins-bad-libs-gstglmemory.html#GstGLMemory" title="GstGLMemory"><span class="type">GstGLMemory</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr>
-<tr>
-<td class="parameter_name"><p>tex_id</p></td>
-<td class="parameter_description"><p>OpenGL texture id</p></td>
-<td class="parameter_annotations"> </td>
-</tr>
-<tr>
-<td class="parameter_name"><p>tex_type</p></td>
-<td class="parameter_description"><p>a <span class="type">GstVideoGLTextureType</span></p></td>
-<td class="parameter_annotations"> </td>
-</tr>
-<tr>
-<td class="parameter_name"><p>width</p></td>
-<td class="parameter_description"><p>width of <em class="parameter"><code>tex_id</code></em>
-</p></td>
-<td class="parameter_annotations"> </td>
-</tr>
-<tr>
-<td class="parameter_name"><p>height</p></td>
-<td class="parameter_description"><p>height of <em class="parameter"><code>tex_id</code></em>
-</p></td>
-<td class="parameter_annotations"> </td>
-</tr>
-<tr>
-<td class="parameter_name"><p>stride</p></td>
-<td class="parameter_description"><p>stride of the backing texture data</p></td>
-<td class="parameter_annotations"> </td>
-</tr>
-<tr>
-<td class="parameter_name"><p>respecify</p></td>
-<td class="parameter_description"><p>whether to copy the data or copy per texel</p></td>
-<td class="parameter_annotations"> </td>
-</tr>
-</tbody>
-</table></div>
-</div>
-<div class="refsect3">
-<a name="id-1.2.9.17.8.6.8"></a><h4>Returns</h4>
-<p> Whether the copy suceeded</p>
-</div>
-</div>
-<hr>
-<div class="refsect2">
-<a name="gst-gl-memory-setup-buffer"></a><h3>gst_gl_memory_setup_buffer ()</h3>
-<pre class="programlisting"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-gst_gl_memory_setup_buffer (<em class="parameter"><code><a class="link" href="GstGLContext.html" title="GstGLContext"><span class="type">GstGLContext</span></a> *context</code></em>,
-                            <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstAllocator.html#GstAllocationParams"><span class="type">GstAllocationParams</span></a> *params</code></em>,
-                            <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base-libs/html/gst-plugins-base-libs-gstvideo.html#GstVideoInfo"><span class="type">GstVideoInfo</span></a> *info</code></em>,
-                            <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base-libs/html/gst-plugins-base-libs-gstvideo.html#GstVideoAlignment"><span class="type">GstVideoAlignment</span></a> *valign</code></em>,
-                            <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstBuffer.html"><span class="type">GstBuffer</span></a> *buffer</code></em>);</pre>
-<p>Adds the required <a class="link" href="gst-plugins-bad-libs-gstglmemory.html#GstGLMemory" title="GstGLMemory"><span class="type">GstGLMemory</span></a>s with the correct configuration to
-<em class="parameter"><code>buffer</code></em>
- based on <em class="parameter"><code>info</code></em>
-. This version handles padding through <em class="parameter"><code>valign</code></em>
-.</p>
-<div class="refsect3">
-<a name="id-1.2.9.17.8.7.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
-<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
-</colgroup>
-<tbody>
-<tr>
-<td class="parameter_name"><p>context</p></td>
-<td class="parameter_description"><p>a <a class="link" href="GstGLContext.html" title="GstGLContext"><span class="type">GstGLContext</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr>
-<tr>
-<td class="parameter_name"><p>params</p></td>
-<td class="parameter_description"><p>a <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstAllocator.html#GstAllocationParams"><span class="type">GstAllocationParams</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr>
-<tr>
-<td class="parameter_name"><p>info</p></td>
-<td class="parameter_description"><p>a <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base-libs/html/gst-plugins-base-libs-gstvideo.html#GstVideoInfo"><span class="type">GstVideoInfo</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr>
-<tr>
-<td class="parameter_name"><p>valign</p></td>
-<td class="parameter_description"><p>the <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base-libs/html/gst-plugins-base-libs-gstvideo.html#GstVideoAlignment"><span class="type">GstVideoAlignment</span></a> applied to <em class="parameter"><code>info</code></em>
-</p></td>
-<td class="parameter_annotations"> </td>
-</tr>
-<tr>
-<td class="parameter_name"><p>buffer</p></td>
-<td class="parameter_description"><p>a <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstBuffer.html"><span class="type">GstBuffer</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr>
-</tbody>
-</table></div>
-</div>
-<div class="refsect3">
-<a name="id-1.2.9.17.8.7.6"></a><h4>Returns</h4>
-<p> whether the memory's were sucessfully added.</p>
-</div>
-</div>
-<hr>
-<div class="refsect2">
-<a name="gst-gl-memory-setup-wrapped"></a><h3>gst_gl_memory_setup_wrapped ()</h3>
-<pre class="programlisting"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-gst_gl_memory_setup_wrapped (<em class="parameter"><code><a class="link" href="GstGLContext.html" title="GstGLContext"><span class="type">GstGLContext</span></a> *context</code></em>,
-                             <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base-libs/html/gst-plugins-base-libs-gstvideo.html#GstVideoInfo"><span class="type">GstVideoInfo</span></a> *info</code></em>,
-                             <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base-libs/html/gst-plugins-base-libs-gstvideo.html#GstVideoAlignment"><span class="type">GstVideoAlignment</span></a> *valign</code></em>,
-                             <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> data[GST_VIDEO_MAX_PLANES]</code></em>,
-                             <em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-gstglmemory.html#GstGLMemory" title="GstGLMemory"><span class="type">GstGLMemory</span></a> *textures[GST_VIDEO_MAX_PLANES]</code></em>,
-                             <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data</code></em>,
-                             <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Datasets.html#GDestroyNotify"><span class="type">GDestroyNotify</span></a> notify</code></em>);</pre>
-<p>Wraps per plane data pointer in <em class="parameter"><code>data</code></em>
- into the corresponding entry in
-<em class="parameter"><code>textures</code></em>
- based on <em class="parameter"><code>info</code></em>
- and padding from <em class="parameter"><code>valign</code></em>
-. Note that the <em class="parameter"><code>notify</code></em>
-
-will be called as many time as there is planes.</p>
-<div class="refsect3">
-<a name="id-1.2.9.17.8.8.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
-<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
-</colgroup>
-<tbody>
-<tr>
-<td class="parameter_name"><p>context</p></td>
-<td class="parameter_description"><p>a <a class="link" href="GstGLContext.html" title="GstGLContext"><span class="type">GstGLContext</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr>
-<tr>
-<td class="parameter_name"><p>info</p></td>
-<td class="parameter_description"><p>a <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base-libs/html/gst-plugins-base-libs-gstvideo.html#GstVideoInfo"><span class="type">GstVideoInfo</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr>
-<tr>
-<td class="parameter_name"><p>valign</p></td>
-<td class="parameter_description"><p>a <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base-libs/html/gst-plugins-base-libs-gstvideo.html#GstVideoInfo"><span class="type">GstVideoInfo</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr>
-<tr>
-<td class="parameter_name"><p>data</p></td>
-<td class="parameter_description"><p>a list of per plane data pointers</p></td>
-<td class="parameter_annotations"> </td>
-</tr>
-<tr>
-<td class="parameter_name"><p>textures</p></td>
-<td class="parameter_description"><p> a list of <a class="link" href="gst-plugins-bad-libs-gstglmemory.html#GstGLMemory" title="GstGLMemory"><span class="type">GstGLMemory</span></a>. </p></td>
-<td class="parameter_annotations"><span class="annotation">[transfer out]</span></td>
-</tr>
-<tr>
-<td class="parameter_name"><p>user_data</p></td>
-<td class="parameter_description"><p>user data for the destroy function</p></td>
-<td class="parameter_annotations"> </td>
-</tr>
-<tr>
-<td class="parameter_name"><p>notify</p></td>
-<td class="parameter_description"><p>A function called each time a memory is freed</p></td>
-<td class="parameter_annotations"> </td>
-</tr>
-</tbody>
-</table></div>
-</div>
-<div class="refsect3">
-<a name="id-1.2.9.17.8.8.6"></a><h4>Returns</h4>
-<p> whether the memory's were sucessfully created.</p>
-</div>
-</div>
-<hr>
-<div class="refsect2">
-<a name="gst-gl-texture-type-from-format"></a><h3>gst_gl_texture_type_from_format ()</h3>
-<pre class="programlisting"><span class="returnvalue">GstVideoGLTextureType</span>
-gst_gl_texture_type_from_format (<em class="parameter"><code><a class="link" href="GstGLContext.html" title="GstGLContext"><span class="type">GstGLContext</span></a> *context</code></em>,
-                                 <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base-libs/html/gst-plugins-base-libs-gstvideo.html#GstVideoFormat"><span class="type">GstVideoFormat</span></a> v_format</code></em>,
-                                 <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> plane</code></em>);</pre>
-</div>
-<hr>
-<div class="refsect2">
-<a name="gst-is-gl-memory"></a><h3>gst_is_gl_memory ()</h3>
-<pre class="programlisting"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-gst_is_gl_memory (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstMemory.html"><span class="type">GstMemory</span></a> *mem</code></em>);</pre>
-<div class="refsect3">
-<a name="id-1.2.9.17.8.10.4"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
-<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
-</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>mem</p></td>
-<td class="parameter_description"><p>a <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstMemory.html"><span class="type">GstMemory</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
-</table></div>
-</div>
-<div class="refsect3">
-<a name="id-1.2.9.17.8.10.5"></a><h4>Returns</h4>
-<p> whether the memory at <em class="parameter"><code>mem</code></em>
-is a <a class="link" href="gst-plugins-bad-libs-gstglmemory.html#GstGLMemory" title="GstGLMemory"><span class="type">GstGLMemory</span></a></p>
-</div>
-</div>
-</div>
-<div class="refsect1">
-<a name="gst-plugins-bad-libs-gstglmemory.other_details"></a><h2>Types and Values</h2>
-<div class="refsect2">
-<a name="GstGLAllocator-struct"></a><h3>GstGLAllocator</h3>
-<pre class="programlisting">typedef struct _GstGLAllocator GstGLAllocator;</pre>
-<p>Opaque <a class="link" href="gst-plugins-bad-libs-gstglmemory.html#GstGLAllocator"><span class="type">GstGLAllocator</span></a> struct</p>
-</div>
-<hr>
-<div class="refsect2">
-<a name="GstGLAllocatorClass"></a><h3>GstGLAllocatorClass</h3>
-<pre class="programlisting">typedef struct {
-  GstGLBaseBufferAllocatorClass parent_class;
-} GstGLAllocatorClass;
-</pre>
-<p>The <a class="link" href="gst-plugins-bad-libs-gstglmemory.html#GstGLAllocatorClass" title="GstGLAllocatorClass"><span class="type">GstGLAllocatorClass</span></a> only contains private data</p>
-</div>
-<hr>
-<div class="refsect2">
-<a name="GST-GL-MEMORY-ALLOCATOR:CAPS"></a><h3>GST_GL_MEMORY_ALLOCATOR</h3>
-<pre class="programlisting">#define GST_GL_MEMORY_ALLOCATOR   "GLMemory"
-</pre>
-<p>The name of the GL memory allocator</p>
-</div>
-<hr>
-<div class="refsect2">
-<a name="GstGLMemory"></a><h3>GstGLMemory</h3>
-<pre class="programlisting">typedef struct {
-  GstGLBaseBuffer       mem;
-
-  guint                 tex_id;
-  guint                 tex_target;
-  GstVideoGLTextureType tex_type;
-  GstVideoInfo          info;
-  GstVideoAlignment     valign;
-  guint                 plane;
-  gfloat                tex_scaling[2];
-} GstGLMemory;
-</pre>
-<p>Represents information about a GL texture</p>
-<div class="refsect3">
-<a name="id-1.2.9.17.9.5.5"></a><h4>Members</h4>
-<div class="informaltable"><table width="100%" border="0">
-<colgroup>
-<col width="300px" class="struct_members_name">
-<col class="struct_members_description">
-<col width="200px" class="struct_members_annotations">
-</colgroup>
-<tbody>
-<tr>
-<td class="struct_member_name"><p><span class="type">GstGLBaseBuffer</span> <em class="structfield"><code><a name="GstGLMemory.mem"></a>mem</code></em>;</p></td>
-<td class="struct_member_description"><p>the parent object</p></td>
-<td class="struct_member_annotations"> </td>
-</tr>
-<tr>
-<td class="struct_member_name"><p><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> <em class="structfield"><code><a name="GstGLMemory.tex-id"></a>tex_id</code></em>;</p></td>
-<td class="struct_member_description"><p>the GL texture id for this memory</p></td>
-<td class="struct_member_annotations"> </td>
-</tr>
-<tr>
-<td class="struct_member_name"><p><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> <em class="structfield"><code><a name="GstGLMemory.tex-target"></a>tex_target</code></em>;</p></td>
-<td class="struct_member_description"><p>the GL texture target for this memory</p></td>
-<td class="struct_member_annotations"> </td>
-</tr>
-<tr>
-<td class="struct_member_name"><p><span class="type">GstVideoGLTextureType</span> <em class="structfield"><code><a name="GstGLMemory.tex-type"></a>tex_type</code></em>;</p></td>
-<td class="struct_member_description"><p>the texture type</p></td>
-<td class="struct_member_annotations"> </td>
-</tr>
-<tr>
-<td class="struct_member_name"><p><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base-libs/html/gst-plugins-base-libs-gstvideo.html#GstVideoInfo"><span class="type">GstVideoInfo</span></a> <em class="structfield"><code><a name="GstGLMemory.info"></a>info</code></em>;</p></td>
-<td class="struct_member_description"><p>the texture's <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base-libs/html/gst-plugins-base-libs-gstvideo.html#GstVideoInfo"><span class="type">GstVideoInfo</span></a></p></td>
-<td class="struct_member_annotations"> </td>
-</tr>
-<tr>
-<td class="struct_member_name"><p><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base-libs/html/gst-plugins-base-libs-gstvideo.html#GstVideoAlignment"><span class="type">GstVideoAlignment</span></a> <em class="structfield"><code><a name="GstGLMemory.valign"></a>valign</code></em>;</p></td>
-<td class="struct_member_description"><p>data alignment for system memory mapping</p></td>
-<td class="struct_member_annotations"> </td>
-</tr>
-<tr>
-<td class="struct_member_name"><p><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> <em class="structfield"><code><a name="GstGLMemory.plane"></a>plane</code></em>;</p></td>
-<td class="struct_member_description"><p>data plane in <em class="parameter"><code>info</code></em>
-</p></td>
-<td class="struct_member_annotations"> </td>
-</tr>
-<tr>
-<td class="struct_member_name"><p><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gfloat"><span class="type">gfloat</span></a> <em class="structfield"><code><a name="GstGLMemory.tex-scaling"></a>tex_scaling</code></em>[2];</p></td>
-<td class="struct_member_description"><p>GL shader scaling parameters for <em class="parameter"><code>valign</code></em>
-and/or width/height</p></td>
-<td class="struct_member_annotations"> </td>
-</tr>
-</tbody>
-</table></div>
-</div>
-</div>
-</div>
-<div class="refsect1">
-<a name="gst-plugins-bad-libs-gstglmemory.see-also"></a><h2>See Also</h2>
-<p><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstMemory.html"><span class="type">GstMemory</span></a>, <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstAllocator.html"><span class="type">GstAllocator</span></a>, <a class="link" href="GstGLBufferPool.html" title="GstGLBufferPool"><span class="type">GstGLBufferPool</span></a></p>
-</div>
-</div>
-<div class="footer">
-<hr>Generated by GTK-Doc V1.24</div>
-</body>
-</html>
\ No newline at end of file
diff --git a/docs/libs/html/gst-plugins-bad-libs-gstglmemorypbo.html b/docs/libs/html/gst-plugins-bad-libs-gstglmemorypbo.html
new file mode 100644
index 0000000..fcba4d5
--- /dev/null
+++ b/docs/libs/html/gst-plugins-bad-libs-gstglmemorypbo.html
@@ -0,0 +1,325 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>GstGLMemoryPBO: GStreamer Bad Plugins 1.0 Library Reference Manual</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
+<link rel="home" href="index.html" title="GStreamer Bad Plugins 1.0 Library Reference Manual">
+<link rel="up" href="gl.html" title="OpenGL Helper Library">
+<link rel="prev" href="gst-plugins-bad-libs-GstGLMemory.html" title="GstGLMemory">
+<link rel="next" href="GstGLShader.html" title="GstGLShader">
+<meta name="generator" content="GTK-Doc V1.24 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="5"><tr valign="middle">
+<td width="100%" align="left" class="shortcuts">
+<a href="#" class="shortcut">Top</a><span id="nav_description">  <span class="dim">|</span> 
+                  <a href="#gst-plugins-bad-libs-gstglmemorypbo.description" class="shortcut">Description</a></span><span id="nav_hierarchy">  <span class="dim">|</span> 
+                  <a href="#gst-plugins-bad-libs-gstglmemorypbo.object-hierarchy" class="shortcut">Object Hierarchy</a></span>
+</td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
+<td><a accesskey="u" href="gl.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
+<td><a accesskey="p" href="gst-plugins-bad-libs-GstGLMemory.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
+<td><a accesskey="n" href="GstGLShader.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
+</tr></table>
+<div class="refentry">
+<a name="gst-plugins-bad-libs-gstglmemorypbo"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="gst-plugins-bad-libs-gstglmemorypbo.top_of_page"></a>GstGLMemoryPBO</span></h2>
+<p>GstGLMemoryPBO — memory subclass for GL textures</p>
+</td>
+<td class="gallery_image" valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsect1">
+<a name="gst-plugins-bad-libs-gstglmemorypbo.functions"></a><h2>Functions</h2>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="functions_return">
+<col class="functions_name">
+</colgroup>
+<tbody>
+<tr>
+<td class="function_type">
+<a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
+</td>
+<td class="function_name">
+<a class="link" href="gst-plugins-bad-libs-gstglmemorypbo.html#gst-is-gl-memory-pbo" title="gst_is_gl_memory_pbo ()">gst_is_gl_memory_pbo</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
+</td>
+<td class="function_name">
+<a class="link" href="gst-plugins-bad-libs-gstglmemorypbo.html#gst-gl-memory-pbo-copy-into-texture" title="gst_gl_memory_pbo_copy_into_texture ()">gst_gl_memory_pbo_copy_into_texture</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
+<a class="link" href="gst-plugins-bad-libs-gstglmemorypbo.html#gst-gl-memory-pbo-download-transfer" title="gst_gl_memory_pbo_download_transfer ()">gst_gl_memory_pbo_download_transfer</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
+<a class="link" href="gst-plugins-bad-libs-gstglmemorypbo.html#gst-gl-memory-pbo-init-once" title="gst_gl_memory_pbo_init_once ()">gst_gl_memory_pbo_init_once</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
+<a class="link" href="gst-plugins-bad-libs-gstglmemorypbo.html#gst-gl-memory-pbo-upload-transfer" title="gst_gl_memory_pbo_upload_transfer ()">gst_gl_memory_pbo_upload_transfer</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<a name="GstGLMemoryPBOAllocator"></a><div class="refsect1">
+<a name="gst-plugins-bad-libs-gstglmemorypbo.other"></a><h2>Types and Values</h2>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="name">
+<col class="description">
+</colgroup>
+<tbody>
+<tr>
+<td class="datatype_keyword"> </td>
+<td class="function_name"><a class="link" href="gst-plugins-bad-libs-gstglmemorypbo.html#GstGLMemoryPBOAllocator-struct" title="GstGLMemoryPBOAllocator">GstGLMemoryPBOAllocator</a></td>
+</tr>
+<tr>
+<td class="datatype_keyword"> </td>
+<td class="function_name"><a class="link" href="gst-plugins-bad-libs-gstglmemorypbo.html#GstGLMemoryPBOAllocatorClass" title="GstGLMemoryPBOAllocatorClass">GstGLMemoryPBOAllocatorClass</a></td>
+</tr>
+<tr>
+<td class="define_keyword">#define</td>
+<td class="function_name"><a class="link" href="gst-plugins-bad-libs-gstglmemorypbo.html#GST-GL-MEMORY-PBO-ALLOCATOR-NAME:CAPS" title="GST_GL_MEMORY_PBO_ALLOCATOR_NAME">GST_GL_MEMORY_PBO_ALLOCATOR_NAME</a></td>
+</tr>
+<tr>
+<td class="datatype_keyword"> </td>
+<td class="function_name"><a class="link" href="gst-plugins-bad-libs-gstglmemorypbo.html#GstGLMemoryPBO" title="GstGLMemoryPBO">GstGLMemoryPBO</a></td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-libs-gstglmemorypbo.object-hierarchy"></a><h2>Object Hierarchy</h2>
+<pre class="screen">    <a href="https://developer.gnome.org/gobject/unstable/gobject-The-Base-Object-Type.html#GObject">GObject</a>
+    <span class="lineart">╰──</span> <a href="https://developer.gnome.org/gobject/unstable/gobject-The-Base-Object-Type.html#GInitiallyUnowned">GInitiallyUnowned</a>
+        <span class="lineart">╰──</span> <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstObject.html">GstObject</a>
+            <span class="lineart">╰──</span> <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstAllocator.html">GstAllocator</a>
+                <span class="lineart">╰──</span> <a class="link" href="gst-plugins-bad-libs-gstglbasememory.html#GstGLBaseMemoryAllocator">GstGLBaseMemoryAllocator</a>
+                    <span class="lineart">╰──</span> <a class="link" href="gst-plugins-bad-libs-GstGLMemory.html#GstGLMemoryAllocator">GstGLMemoryAllocator</a>
+                        <span class="lineart">╰──</span> GstGLMemoryPBOAllocator
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-libs-gstglmemorypbo.description"></a><h2>Description</h2>
+<p><a class="link" href="gst-plugins-bad-libs-gstglmemorypbo.html#GstGLMemoryPBO" title="GstGLMemoryPBO"><span class="type">GstGLMemoryPBO</span></a> is created or wrapped through <a class="link" href="gst-plugins-bad-libs-gstglbasememory.html#gst-gl-base-memory-alloc" title="gst_gl_base_memory_alloc ()"><code class="function">gst_gl_base_memory_alloc()</code></a>
+with <a class="link" href="gst-plugins-bad-libs-GstGLMemory.html#GstGLVideoAllocationParams" title="struct GstGLVideoAllocationParams"><span class="type">GstGLVideoAllocationParams</span></a>.</p>
+<p><a class="link" href="gst-plugins-bad-libs-gstglmemorypbo.html#GstGLMemoryPBO" title="GstGLMemoryPBO"><span class="type">GstGLMemoryPBO</span></a> is created through <code class="function">gst_gl_memory_pbo_alloc()</code> or system memory can
+be wrapped through <code class="function">gst_gl_memory_pbo_wrapped()</code>.</p>
+<p>Data is uploaded or downloaded from the GPU as is necessary.</p>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-libs-gstglmemorypbo.functions_details"></a><h2>Functions</h2>
+<div class="refsect2">
+<a name="gst-is-gl-memory-pbo"></a><h3>gst_is_gl_memory_pbo ()</h3>
+<pre class="programlisting"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
+gst_is_gl_memory_pbo (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstMemory.html"><span class="type">GstMemory</span></a> *mem</code></em>);</pre>
+<div class="refsect3">
+<a name="id-1.2.9.19.8.2.4"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>mem</p></td>
+<td class="parameter_description"><p>a <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstMemory.html"><span class="type">GstMemory</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="id-1.2.9.19.8.2.5"></a><h4>Returns</h4>
+<p> whether the memory at <em class="parameter"><code>mem</code></em>
+is a <a class="link" href="gst-plugins-bad-libs-gstglmemorypbo.html#GstGLMemoryPBO" title="GstGLMemoryPBO"><span class="type">GstGLMemoryPBO</span></a></p>
+</div>
+<p class="since">Since: 1.8</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-gl-memory-pbo-copy-into-texture"></a><h3>gst_gl_memory_pbo_copy_into_texture ()</h3>
+<pre class="programlisting"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
+gst_gl_memory_pbo_copy_into_texture (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-gstglmemorypbo.html#GstGLMemoryPBO" title="GstGLMemoryPBO"><span class="type">GstGLMemoryPBO</span></a> *gl_mem</code></em>,
+                                     <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> tex_id</code></em>,
+                                     <em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-OpenGL-Formats.html#GstGLTextureTarget" title="enum GstGLTextureTarget"><span class="type">GstGLTextureTarget</span></a> target</code></em>,
+                                     <em class="parameter"><code><span class="type">GstVideoGLTextureType</span> tex_type</code></em>,
+                                     <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a> width</code></em>,
+                                     <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a> height</code></em>,
+                                     <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a> stride</code></em>,
+                                     <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> respecify</code></em>);</pre>
+<p>Copies <em class="parameter"><code>gl_mem</code></em>
+ into the texture specfified by <em class="parameter"><code>tex_id</code></em>
+.  The format of <em class="parameter"><code>tex_id</code></em>
+
+is specified by <em class="parameter"><code>tex_type</code></em>
+, <em class="parameter"><code>width</code></em>
+ and <em class="parameter"><code>height</code></em>
+.</p>
+<p>If <em class="parameter"><code>respecify</code></em>
+ is <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a>, then the copy is performed in terms of the texture
+data.  This is useful for splitting RGBA textures into RG or R textures or
+vice versa. The requirement for this to succeed is that the backing texture
+data must be the same size, i.e. say a RGBA8 texture is converted into a RG8
+texture, then the RG texture must have twice as many pixels available for
+output as the RGBA texture.</p>
+<p>Otherwise, if <em class="parameter"><code>respecify</code></em>
+ is <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a>, then the copy is performed per texel
+using glCopyTexImage.  See the OpenGL specification for details on the
+mappings between texture formats.</p>
+<div class="refsect3">
+<a name="id-1.2.9.19.8.3.7"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>gl_mem</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gst-plugins-bad-libs-gstglmemorypbo.html#GstGLMemoryPBO" title="GstGLMemoryPBO"><span class="type">GstGLMemoryPBO</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>tex_id</p></td>
+<td class="parameter_description"><p>the destination texture id</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>target</p></td>
+<td class="parameter_description"><p>the destination <a class="link" href="gst-plugins-bad-libs-OpenGL-Formats.html#GstGLTextureTarget" title="enum GstGLTextureTarget"><span class="type">GstGLTextureTarget</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>tex_type</p></td>
+<td class="parameter_description"><p>the destination <span class="type">GstVideoGLTextureType</span></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>width</p></td>
+<td class="parameter_description"><p>width of <em class="parameter"><code>tex_id</code></em>
+</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>height</p></td>
+<td class="parameter_description"><p>height of <em class="parameter"><code>tex_id</code></em>
+</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>stride</p></td>
+<td class="parameter_description"><p>stride of the backing texture data</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>respecify</p></td>
+<td class="parameter_description"><p>whether to copy the data or copy per texel</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="id-1.2.9.19.8.3.8"></a><h4>Returns</h4>
+<p> Whether the copy suceeded</p>
+</div>
+<p class="since">Since: 1.8</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-gl-memory-pbo-download-transfer"></a><h3>gst_gl_memory_pbo_download_transfer ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+gst_gl_memory_pbo_download_transfer (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-gstglmemorypbo.html#GstGLMemoryPBO" title="GstGLMemoryPBO"><span class="type">GstGLMemoryPBO</span></a> *gl_mem</code></em>);</pre>
+<p>Transfer the texture data from the PBO into the texture if necessary.</p>
+<div class="refsect3">
+<a name="id-1.2.9.19.8.4.5"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>gl_mem</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gst-plugins-bad-libs-gstglmemorypbo.html#GstGLMemoryPBO" title="GstGLMemoryPBO"><span class="type">GstGLMemoryPBO</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<p class="since">Since: 1.8</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-gl-memory-pbo-init-once"></a><h3>gst_gl_memory_pbo_init_once ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+gst_gl_memory_pbo_init_once (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-gl-memory-pbo-upload-transfer"></a><h3>gst_gl_memory_pbo_upload_transfer ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+gst_gl_memory_pbo_upload_transfer (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-gstglmemorypbo.html#GstGLMemoryPBO" title="GstGLMemoryPBO"><span class="type">GstGLMemoryPBO</span></a> *gl_mem</code></em>);</pre>
+</div>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-libs-gstglmemorypbo.other_details"></a><h2>Types and Values</h2>
+<div class="refsect2">
+<a name="GstGLMemoryPBOAllocator-struct"></a><h3>GstGLMemoryPBOAllocator</h3>
+<pre class="programlisting">typedef struct _GstGLMemoryPBOAllocator GstGLMemoryPBOAllocator;</pre>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstGLMemoryPBOAllocatorClass"></a><h3>GstGLMemoryPBOAllocatorClass</h3>
+<pre class="programlisting">typedef struct {
+  GstGLMemoryAllocatorClass parent_class;
+} GstGLMemoryPBOAllocatorClass;
+</pre>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GST-GL-MEMORY-PBO-ALLOCATOR-NAME:CAPS"></a><h3>GST_GL_MEMORY_PBO_ALLOCATOR_NAME</h3>
+<pre class="programlisting">#define GST_GL_MEMORY_PBO_ALLOCATOR_NAME   "GLMemoryPBO"
+</pre>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstGLMemoryPBO"></a><h3>GstGLMemoryPBO</h3>
+<pre class="programlisting">typedef struct {
+  GstGLMemory      mem;
+} GstGLMemoryPBO;
+</pre>
+<p>Private instance</p>
+</div>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-libs-gstglmemorypbo.see-also"></a><h2>See Also</h2>
+<p><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstMemory.html"><span class="type">GstMemory</span></a>, <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstAllocator.html"><span class="type">GstAllocator</span></a>, <a class="link" href="GstGLBufferPool.html" title="GstGLBufferPool"><span class="type">GstGLBufferPool</span></a></p>
+</div>
+</div>
+<div class="footer">
+<hr>Generated by GTK-Doc V1.24</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/libs/html/gst-plugins-bad-libs-gstglshader.html b/docs/libs/html/gst-plugins-bad-libs-gstglshader.html
deleted file mode 100644
index 04283ef..0000000
--- a/docs/libs/html/gst-plugins-bad-libs-gstglshader.html
+++ /dev/null
@@ -1,1005 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html>
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>GstGLShader: GStreamer Bad Plugins 1.0 Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
-<link rel="home" href="index.html" title="GStreamer Bad Plugins 1.0 Library Reference Manual">
-<link rel="up" href="gl.html" title="OpenGL Helper Library">
-<link rel="prev" href="gst-plugins-bad-libs-gstglmemory.html" title="GstGLMemory">
-<link rel="next" href="gst-plugins-bad-libs-GstGLSyncMeta.html" title="GstGLSyncMeta">
-<meta name="generator" content="GTK-Doc V1.24 (XML mode)">
-<link rel="stylesheet" href="style.css" type="text/css">
-</head>
-<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
-<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="5"><tr valign="middle">
-<td width="100%" align="left" class="shortcuts">
-<a href="#" class="shortcut">Top</a><span id="nav_description">  <span class="dim">|</span> 
-                  <a href="#gst-plugins-bad-libs-gstglshader.description" class="shortcut">Description</a></span><span id="nav_hierarchy">  <span class="dim">|</span> 
-                  <a href="#gst-plugins-bad-libs-gstglshader.object-hierarchy" class="shortcut">Object Hierarchy</a></span><span id="nav_properties">  <span class="dim">|</span> 
-                  <a href="#gst-plugins-bad-libs-gstglshader.properties" class="shortcut">Properties</a></span>
-</td>
-<td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
-<td><a accesskey="u" href="gl.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
-<td><a accesskey="p" href="gst-plugins-bad-libs-gstglmemory.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
-<td><a accesskey="n" href="gst-plugins-bad-libs-GstGLSyncMeta.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
-</tr></table>
-<div class="refentry">
-<a name="gst-plugins-bad-libs-gstglshader"></a><div class="titlepage"></div>
-<div class="refnamediv"><table width="100%"><tr>
-<td valign="top">
-<h2><span class="refentrytitle"><a name="gst-plugins-bad-libs-gstglshader.top_of_page"></a>GstGLShader</span></h2>
-<p>GstGLShader</p>
-</td>
-<td class="gallery_image" valign="top" align="right"></td>
-</tr></table></div>
-<div class="refsect1">
-<a name="gst-plugins-bad-libs-gstglshader.functions"></a><h2>Functions</h2>
-<div class="informaltable"><table width="100%" border="0">
-<colgroup>
-<col width="150px" class="functions_return">
-<col class="functions_name">
-</colgroup>
-<tbody>
-<tr>
-<td class="function_type">
-<a href="https://developer.gnome.org/glib/unstable/glib-Quarks.html#GQuark"><span class="returnvalue">GQuark</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="gst-plugins-bad-libs-gstglshader.html#gst-gl-shader-error-quark" title="gst_gl_shader_error_quark ()">gst_gl_shader_error_quark</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="gst-plugins-bad-libs-gstglshader.html#GST-GL-SHADER-ERROR:CAPS" title="GST_GL_SHADER_ERROR">GST_GL_SHADER_ERROR</a></td>
-</tr>
-<tr>
-<td class="function_type">
-<span class="returnvalue">int</span>
-</td>
-<td class="function_name">
-<a class="link" href="gst-plugins-bad-libs-gstglshader.html#gst-gl-shadervariable-set" title="gst_gl_shadervariable_set ()">gst_gl_shadervariable_set</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<span class="returnvalue">int</span>
-</td>
-<td class="function_name">
-<a class="link" href="gst-plugins-bad-libs-gstglshader.html#gst-gl-shadervariables-parse" title="gst_gl_shadervariables_parse ()">gst_gl_shadervariables_parse</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a class="link" href="gst-plugins-bad-libs-gstglshader.html#GstGLShader"><span class="returnvalue">GstGLShader</span></a> *
-</td>
-<td class="function_name">
-<a class="link" href="gst-plugins-bad-libs-gstglshader.html#gst-gl-shader-new" title="gst_gl_shader_new ()">gst_gl_shader_new</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<span class="returnvalue">void</span>
-</td>
-<td class="function_name">
-<a class="link" href="gst-plugins-bad-libs-gstglshader.html#gst-gl-shader-set-vertex-source" title="gst_gl_shader_set_vertex_source ()">gst_gl_shader_set_vertex_source</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<span class="returnvalue">void</span>
-</td>
-<td class="function_name">
-<a class="link" href="gst-plugins-bad-libs-gstglshader.html#gst-gl-shader-set-fragment-source" title="gst_gl_shader_set_fragment_source ()">gst_gl_shader_set_fragment_source</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">const <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> *
-</td>
-<td class="function_name">
-<a class="link" href="gst-plugins-bad-libs-gstglshader.html#gst-gl-shader-get-vertex-source" title="gst_gl_shader_get_vertex_source ()">gst_gl_shader_get_vertex_source</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">const <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> *
-</td>
-<td class="function_name">
-<a class="link" href="gst-plugins-bad-libs-gstglshader.html#gst-gl-shader-get-fragment-source" title="gst_gl_shader_get_fragment_source ()">gst_gl_shader_get_fragment_source</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<span class="returnvalue">int</span>
-</td>
-<td class="function_name">
-<a class="link" href="gst-plugins-bad-libs-gstglshader.html#gst-gl-shader-get-program-handle" title="gst_gl_shader_get_program_handle ()">gst_gl_shader_get_program_handle</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<span class="returnvalue">void</span>
-</td>
-<td class="function_name">
-<a class="link" href="gst-plugins-bad-libs-gstglshader.html#gst-gl-shader-set-active" title="gst_gl_shader_set_active ()">gst_gl_shader_set_active</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="gst-plugins-bad-libs-gstglshader.html#gst-gl-shader-is-compiled" title="gst_gl_shader_is_compiled ()">gst_gl_shader_is_compiled</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="gst-plugins-bad-libs-gstglshader.html#gst-gl-shader-compile" title="gst_gl_shader_compile ()">gst_gl_shader_compile</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="gst-plugins-bad-libs-gstglshader.html#gst-gl-shader-compile-and-check" title="gst_gl_shader_compile_and_check ()">gst_gl_shader_compile_and_check</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="gst-plugins-bad-libs-gstglshader.html#gst-gl-shader-compile-all-with-attribs-and-check" title="gst_gl_shader_compile_all_with_attribs_and_check ()">gst_gl_shader_compile_all_with_attribs_and_check</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="gst-plugins-bad-libs-gstglshader.html#gst-gl-shader-compile-with-default-f-and-check" title="gst_gl_shader_compile_with_default_f_and_check ()">gst_gl_shader_compile_with_default_f_and_check</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="gst-plugins-bad-libs-gstglshader.html#gst-gl-shader-compile-with-default-v-and-check" title="gst_gl_shader_compile_with_default_v_and_check ()">gst_gl_shader_compile_with_default_v_and_check</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="gst-plugins-bad-libs-gstglshader.html#gst-gl-shader-compile-with-default-vf-and-check" title="gst_gl_shader_compile_with_default_vf_and_check ()">gst_gl_shader_compile_with_default_vf_and_check</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<span class="returnvalue">void</span>
-</td>
-<td class="function_name">
-<a class="link" href="gst-plugins-bad-libs-gstglshader.html#gst-gl-shader-release" title="gst_gl_shader_release ()">gst_gl_shader_release</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<span class="returnvalue">void</span>
-</td>
-<td class="function_name">
-<a class="link" href="gst-plugins-bad-libs-gstglshader.html#gst-gl-shader-use" title="gst_gl_shader_use ()">gst_gl_shader_use</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<span class="returnvalue">void</span>
-</td>
-<td class="function_name">
-<a class="link" href="gst-plugins-bad-libs-gstglshader.html#gst-gl-shader-set-uniform-1i" title="gst_gl_shader_set_uniform_1i ()">gst_gl_shader_set_uniform_1i</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<span class="returnvalue">void</span>
-</td>
-<td class="function_name">
-<a class="link" href="gst-plugins-bad-libs-gstglshader.html#gst-gl-shader-set-uniform-1f" title="gst_gl_shader_set_uniform_1f ()">gst_gl_shader_set_uniform_1f</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<span class="returnvalue">void</span>
-</td>
-<td class="function_name">
-<a class="link" href="gst-plugins-bad-libs-gstglshader.html#gst-gl-shader-set-uniform-1fv" title="gst_gl_shader_set_uniform_1fv ()">gst_gl_shader_set_uniform_1fv</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<span class="returnvalue">void</span>
-</td>
-<td class="function_name">
-<a class="link" href="gst-plugins-bad-libs-gstglshader.html#gst-gl-shader-set-uniform-1iv" title="gst_gl_shader_set_uniform_1iv ()">gst_gl_shader_set_uniform_1iv</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<span class="returnvalue">void</span>
-</td>
-<td class="function_name">
-<a class="link" href="gst-plugins-bad-libs-gstglshader.html#gst-gl-shader-set-uniform-2f" title="gst_gl_shader_set_uniform_2f ()">gst_gl_shader_set_uniform_2f</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<span class="returnvalue">void</span>
-</td>
-<td class="function_name">
-<a class="link" href="gst-plugins-bad-libs-gstglshader.html#gst-gl-shader-set-uniform-2fv" title="gst_gl_shader_set_uniform_2fv ()">gst_gl_shader_set_uniform_2fv</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<span class="returnvalue">void</span>
-</td>
-<td class="function_name">
-<a class="link" href="gst-plugins-bad-libs-gstglshader.html#gst-gl-shader-set-uniform-2i" title="gst_gl_shader_set_uniform_2i ()">gst_gl_shader_set_uniform_2i</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<span class="returnvalue">void</span>
-</td>
-<td class="function_name">
-<a class="link" href="gst-plugins-bad-libs-gstglshader.html#gst-gl-shader-set-uniform-2iv" title="gst_gl_shader_set_uniform_2iv ()">gst_gl_shader_set_uniform_2iv</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<span class="returnvalue">void</span>
-</td>
-<td class="function_name">
-<a class="link" href="gst-plugins-bad-libs-gstglshader.html#gst-gl-shader-set-uniform-3f" title="gst_gl_shader_set_uniform_3f ()">gst_gl_shader_set_uniform_3f</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<span class="returnvalue">void</span>
-</td>
-<td class="function_name">
-<a class="link" href="gst-plugins-bad-libs-gstglshader.html#gst-gl-shader-set-uniform-3fv" title="gst_gl_shader_set_uniform_3fv ()">gst_gl_shader_set_uniform_3fv</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<span class="returnvalue">void</span>
-</td>
-<td class="function_name">
-<a class="link" href="gst-plugins-bad-libs-gstglshader.html#gst-gl-shader-set-uniform-3i" title="gst_gl_shader_set_uniform_3i ()">gst_gl_shader_set_uniform_3i</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<span class="returnvalue">void</span>
-</td>
-<td class="function_name">
-<a class="link" href="gst-plugins-bad-libs-gstglshader.html#gst-gl-shader-set-uniform-3iv" title="gst_gl_shader_set_uniform_3iv ()">gst_gl_shader_set_uniform_3iv</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<span class="returnvalue">void</span>
-</td>
-<td class="function_name">
-<a class="link" href="gst-plugins-bad-libs-gstglshader.html#gst-gl-shader-set-uniform-4f" title="gst_gl_shader_set_uniform_4f ()">gst_gl_shader_set_uniform_4f</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<span class="returnvalue">void</span>
-</td>
-<td class="function_name">
-<a class="link" href="gst-plugins-bad-libs-gstglshader.html#gst-gl-shader-set-uniform-4fv" title="gst_gl_shader_set_uniform_4fv ()">gst_gl_shader_set_uniform_4fv</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<span class="returnvalue">void</span>
-</td>
-<td class="function_name">
-<a class="link" href="gst-plugins-bad-libs-gstglshader.html#gst-gl-shader-set-uniform-4i" title="gst_gl_shader_set_uniform_4i ()">gst_gl_shader_set_uniform_4i</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<span class="returnvalue">void</span>
-</td>
-<td class="function_name">
-<a class="link" href="gst-plugins-bad-libs-gstglshader.html#gst-gl-shader-set-uniform-4iv" title="gst_gl_shader_set_uniform_4iv ()">gst_gl_shader_set_uniform_4iv</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<span class="returnvalue">void</span>
-</td>
-<td class="function_name">
-<a class="link" href="gst-plugins-bad-libs-gstglshader.html#gst-gl-shader-set-uniform-matrix-2fv" title="gst_gl_shader_set_uniform_matrix_2fv ()">gst_gl_shader_set_uniform_matrix_2fv</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<span class="returnvalue">void</span>
-</td>
-<td class="function_name">
-<a class="link" href="gst-plugins-bad-libs-gstglshader.html#gst-gl-shader-set-uniform-matrix-2x3fv" title="gst_gl_shader_set_uniform_matrix_2x3fv ()">gst_gl_shader_set_uniform_matrix_2x3fv</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<span class="returnvalue">void</span>
-</td>
-<td class="function_name">
-<a class="link" href="gst-plugins-bad-libs-gstglshader.html#gst-gl-shader-set-uniform-matrix-2x4fv" title="gst_gl_shader_set_uniform_matrix_2x4fv ()">gst_gl_shader_set_uniform_matrix_2x4fv</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<span class="returnvalue">void</span>
-</td>
-<td class="function_name">
-<a class="link" href="gst-plugins-bad-libs-gstglshader.html#gst-gl-shader-set-uniform-matrix-3fv" title="gst_gl_shader_set_uniform_matrix_3fv ()">gst_gl_shader_set_uniform_matrix_3fv</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<span class="returnvalue">void</span>
-</td>
-<td class="function_name">
-<a class="link" href="gst-plugins-bad-libs-gstglshader.html#gst-gl-shader-set-uniform-matrix-3x2fv" title="gst_gl_shader_set_uniform_matrix_3x2fv ()">gst_gl_shader_set_uniform_matrix_3x2fv</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<span class="returnvalue">void</span>
-</td>
-<td class="function_name">
-<a class="link" href="gst-plugins-bad-libs-gstglshader.html#gst-gl-shader-set-uniform-matrix-3x4fv" title="gst_gl_shader_set_uniform_matrix_3x4fv ()">gst_gl_shader_set_uniform_matrix_3x4fv</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<span class="returnvalue">void</span>
-</td>
-<td class="function_name">
-<a class="link" href="gst-plugins-bad-libs-gstglshader.html#gst-gl-shader-set-uniform-matrix-4fv" title="gst_gl_shader_set_uniform_matrix_4fv ()">gst_gl_shader_set_uniform_matrix_4fv</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<span class="returnvalue">void</span>
-</td>
-<td class="function_name">
-<a class="link" href="gst-plugins-bad-libs-gstglshader.html#gst-gl-shader-set-uniform-matrix-4x2fv" title="gst_gl_shader_set_uniform_matrix_4x2fv ()">gst_gl_shader_set_uniform_matrix_4x2fv</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<span class="returnvalue">void</span>
-</td>
-<td class="function_name">
-<a class="link" href="gst-plugins-bad-libs-gstglshader.html#gst-gl-shader-set-uniform-matrix-4x3fv" title="gst_gl_shader_set_uniform_matrix_4x3fv ()">gst_gl_shader_set_uniform_matrix_4x3fv</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gint"><span class="returnvalue">gint</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="gst-plugins-bad-libs-gstglshader.html#gst-gl-shader-get-attribute-location" title="gst_gl_shader_get_attribute_location ()">gst_gl_shader_get_attribute_location</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<span class="returnvalue">void</span>
-</td>
-<td class="function_name">
-<a class="link" href="gst-plugins-bad-libs-gstglshader.html#gst-gl-shader-bind-attribute-location" title="gst_gl_shader_bind_attribute_location ()">gst_gl_shader_bind_attribute_location</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-</tbody>
-</table></div>
-</div>
-<div class="refsect1">
-<a name="gst-plugins-bad-libs-gstglshader.properties"></a><h2>Properties</h2>
-<div class="informaltable"><table border="0">
-<colgroup>
-<col width="150px" class="properties_type">
-<col width="300px" class="properties_name">
-<col width="200px" class="properties_flags">
-</colgroup>
-<tbody>
-<tr>
-<td class="property_type">
-<a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *</td>
-<td class="property_name"><a class="link" href="gst-plugins-bad-libs-gstglshader.html#GstGLShader--active" title="The “active” property">active</a></td>
-<td class="property_flags">Read / Write</td>
-</tr>
-<tr>
-<td class="property_type"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a></td>
-<td class="property_name"><a class="link" href="gst-plugins-bad-libs-gstglshader.html#GstGLShader--compiled" title="The “compiled” property">compiled</a></td>
-<td class="property_flags">Read</td>
-</tr>
-<tr>
-<td class="property_type">
-<a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *</td>
-<td class="property_name"><a class="link" href="gst-plugins-bad-libs-gstglshader.html#GstGLShader--fragment-src" title="The “fragment-src” property">fragment-src</a></td>
-<td class="property_flags">Read / Write</td>
-</tr>
-<tr>
-<td class="property_type">
-<a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *</td>
-<td class="property_name"><a class="link" href="gst-plugins-bad-libs-gstglshader.html#GstGLShader--vertex-src" title="The “vertex-src” property">vertex-src</a></td>
-<td class="property_flags">Read / Write</td>
-</tr>
-</tbody>
-</table></div>
-</div>
-<a name="GstGLShader"></a><div class="refsect1">
-<a name="gst-plugins-bad-libs-gstglshader.other"></a><h2>Types and Values</h2>
-<div class="informaltable"><table width="100%" border="0">
-<colgroup>
-<col width="150px" class="name">
-<col class="description">
-</colgroup>
-<tbody>
-<tr>
-<td class="datatype_keyword">enum</td>
-<td class="function_name"><a class="link" href="gst-plugins-bad-libs-gstglshader.html#GstGLShaderError" title="enum GstGLShaderError">GstGLShaderError</a></td>
-</tr>
-<tr>
-<td class="datatype_keyword">enum</td>
-<td class="function_name"><a class="link" href="gst-plugins-bad-libs-gstglshader.html#GstGLShaderSourceType" title="enum GstGLShaderSourceType">GstGLShaderSourceType</a></td>
-</tr>
-<tr>
-<td class="datatype_keyword">struct</td>
-<td class="function_name"><a class="link" href="gst-plugins-bad-libs-gstglshader.html#gst-gl-shadervariable-desc" title="struct gst_gl_shadervariable_desc">gst_gl_shadervariable_desc</a></td>
-</tr>
-<tr>
-<td class="datatype_keyword"> </td>
-<td class="function_name"><a class="link" href="gst-plugins-bad-libs-gstglshader.html#GstGLShader-struct" title="GstGLShader">GstGLShader</a></td>
-</tr>
-</tbody>
-</table></div>
-</div>
-<div class="refsect1">
-<a name="gst-plugins-bad-libs-gstglshader.object-hierarchy"></a><h2>Object Hierarchy</h2>
-<pre class="screen">    <a href="https://developer.gnome.org/gobject/unstable/gobject-The-Base-Object-Type.html#GObject">GObject</a>
-    <span class="lineart">╰──</span> <a href="https://developer.gnome.org/gobject/unstable/gobject-The-Base-Object-Type.html#GInitiallyUnowned">GInitiallyUnowned</a>
-        <span class="lineart">╰──</span> <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstObject.html">GstObject</a>
-            <span class="lineart">╰──</span> GstGLShader
-</pre>
-</div>
-<div class="refsect1">
-<a name="gst-plugins-bad-libs-gstglshader.description"></a><h2>Description</h2>
-</div>
-<div class="refsect1">
-<a name="gst-plugins-bad-libs-gstglshader.functions_details"></a><h2>Functions</h2>
-<div class="refsect2">
-<a name="gst-gl-shader-error-quark"></a><h3>gst_gl_shader_error_quark ()</h3>
-<pre class="programlisting"><a href="https://developer.gnome.org/glib/unstable/glib-Quarks.html#GQuark"><span class="returnvalue">GQuark</span></a>
-gst_gl_shader_error_quark (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
-</div>
-<hr>
-<div class="refsect2">
-<a name="GST-GL-SHADER-ERROR:CAPS"></a><h3>GST_GL_SHADER_ERROR</h3>
-<pre class="programlisting">#define GST_GL_SHADER_ERROR (gst_gl_shader_error_quark ())
-</pre>
-</div>
-<hr>
-<div class="refsect2">
-<a name="gst-gl-shadervariable-set"></a><h3>gst_gl_shadervariable_set ()</h3>
-<pre class="programlisting"><span class="returnvalue">int</span>
-gst_gl_shadervariable_set (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-gstglshader.html#GstGLShader"><span class="type">GstGLShader</span></a> *shader</code></em>,
-                           <em class="parameter"><code><span class="type">struct gst_gl_shadervariable_desc</span> *ret</code></em>);</pre>
-</div>
-<hr>
-<div class="refsect2">
-<a name="gst-gl-shadervariables-parse"></a><h3>gst_gl_shadervariables_parse ()</h3>
-<pre class="programlisting"><span class="returnvalue">int</span>
-gst_gl_shadervariables_parse (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-gstglshader.html#GstGLShader"><span class="type">GstGLShader</span></a> *shader</code></em>,
-                              <em class="parameter"><code><span class="type">char</span> *variables</code></em>,
-                              <em class="parameter"><code><span class="type">int</span> (*_setvariable) (GstGLShader * shader, struct gst_gl_shadervariable_desc * v)</code></em>);</pre>
-</div>
-<hr>
-<div class="refsect2">
-<a name="gst-gl-shader-new"></a><h3>gst_gl_shader_new ()</h3>
-<pre class="programlisting"><a class="link" href="gst-plugins-bad-libs-gstglshader.html#GstGLShader"><span class="returnvalue">GstGLShader</span></a> *
-gst_gl_shader_new (<em class="parameter"><code><a class="link" href="GstGLContext.html" title="GstGLContext"><span class="type">GstGLContext</span></a> *context</code></em>);</pre>
-</div>
-<hr>
-<div class="refsect2">
-<a name="gst-gl-shader-set-vertex-source"></a><h3>gst_gl_shader_set_vertex_source ()</h3>
-<pre class="programlisting"><span class="returnvalue">void</span>
-gst_gl_shader_set_vertex_source (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-gstglshader.html#GstGLShader"><span class="type">GstGLShader</span></a> *shader</code></em>,
-                                 <em class="parameter"><code>const <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *src</code></em>);</pre>
-</div>
-<hr>
-<div class="refsect2">
-<a name="gst-gl-shader-set-fragment-source"></a><h3>gst_gl_shader_set_fragment_source ()</h3>
-<pre class="programlisting"><span class="returnvalue">void</span>
-gst_gl_shader_set_fragment_source (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-gstglshader.html#GstGLShader"><span class="type">GstGLShader</span></a> *shader</code></em>,
-                                   <em class="parameter"><code>const <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *src</code></em>);</pre>
-</div>
-<hr>
-<div class="refsect2">
-<a name="gst-gl-shader-get-vertex-source"></a><h3>gst_gl_shader_get_vertex_source ()</h3>
-<pre class="programlisting">const <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> *
-gst_gl_shader_get_vertex_source (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-gstglshader.html#GstGLShader"><span class="type">GstGLShader</span></a> *shader</code></em>);</pre>
-</div>
-<hr>
-<div class="refsect2">
-<a name="gst-gl-shader-get-fragment-source"></a><h3>gst_gl_shader_get_fragment_source ()</h3>
-<pre class="programlisting">const <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> *
-gst_gl_shader_get_fragment_source (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-gstglshader.html#GstGLShader"><span class="type">GstGLShader</span></a> *shader</code></em>);</pre>
-</div>
-<hr>
-<div class="refsect2">
-<a name="gst-gl-shader-get-program-handle"></a><h3>gst_gl_shader_get_program_handle ()</h3>
-<pre class="programlisting"><span class="returnvalue">int</span>
-gst_gl_shader_get_program_handle (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-gstglshader.html#GstGLShader"><span class="type">GstGLShader</span></a> *shader</code></em>);</pre>
-</div>
-<hr>
-<div class="refsect2">
-<a name="gst-gl-shader-set-active"></a><h3>gst_gl_shader_set_active ()</h3>
-<pre class="programlisting"><span class="returnvalue">void</span>
-gst_gl_shader_set_active (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-gstglshader.html#GstGLShader"><span class="type">GstGLShader</span></a> *shader</code></em>,
-                          <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> active</code></em>);</pre>
-</div>
-<hr>
-<div class="refsect2">
-<a name="gst-gl-shader-is-compiled"></a><h3>gst_gl_shader_is_compiled ()</h3>
-<pre class="programlisting"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-gst_gl_shader_is_compiled (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-gstglshader.html#GstGLShader"><span class="type">GstGLShader</span></a> *shader</code></em>);</pre>
-</div>
-<hr>
-<div class="refsect2">
-<a name="gst-gl-shader-compile"></a><h3>gst_gl_shader_compile ()</h3>
-<pre class="programlisting"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-gst_gl_shader_compile (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-gstglshader.html#GstGLShader"><span class="type">GstGLShader</span></a> *shader</code></em>,
-                       <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Error-Reporting.html#GError"><span class="type">GError</span></a> **error</code></em>);</pre>
-</div>
-<hr>
-<div class="refsect2">
-<a name="gst-gl-shader-compile-and-check"></a><h3>gst_gl_shader_compile_and_check ()</h3>
-<pre class="programlisting"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-gst_gl_shader_compile_and_check (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-gstglshader.html#GstGLShader"><span class="type">GstGLShader</span></a> *shader</code></em>,
-                                 <em class="parameter"><code>const <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *source</code></em>,
-                                 <em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-gstglshader.html#GstGLShaderSourceType" title="enum GstGLShaderSourceType"><span class="type">GstGLShaderSourceType</span></a> type</code></em>);</pre>
-</div>
-<hr>
-<div class="refsect2">
-<a name="gst-gl-shader-compile-all-with-attribs-and-check"></a><h3>gst_gl_shader_compile_all_with_attribs_and_check ()</h3>
-<pre class="programlisting"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-gst_gl_shader_compile_all_with_attribs_and_check
-                               (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-gstglshader.html#GstGLShader"><span class="type">GstGLShader</span></a> *shader</code></em>,
-                                <em class="parameter"><code>const <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *v_src</code></em>,
-                                <em class="parameter"><code>const <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *f_src</code></em>,
-                                <em class="parameter"><code>const <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a> n_attribs</code></em>,
-                                <em class="parameter"><code>const <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *attrib_names[]</code></em>,
-                                <em class="parameter"><code><span class="type">GLint</span> attrib_locs[]</code></em>);</pre>
-</div>
-<hr>
-<div class="refsect2">
-<a name="gst-gl-shader-compile-with-default-f-and-check"></a><h3>gst_gl_shader_compile_with_default_f_and_check ()</h3>
-<pre class="programlisting"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-gst_gl_shader_compile_with_default_f_and_check
-                               (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-gstglshader.html#GstGLShader"><span class="type">GstGLShader</span></a> *shader</code></em>,
-                                <em class="parameter"><code>const <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *v_src</code></em>,
-                                <em class="parameter"><code>const <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a> n_attribs</code></em>,
-                                <em class="parameter"><code>const <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *attrib_names[]</code></em>,
-                                <em class="parameter"><code><span class="type">GLint</span> attrib_locs[]</code></em>);</pre>
-</div>
-<hr>
-<div class="refsect2">
-<a name="gst-gl-shader-compile-with-default-v-and-check"></a><h3>gst_gl_shader_compile_with_default_v_and_check ()</h3>
-<pre class="programlisting"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-gst_gl_shader_compile_with_default_v_and_check
-                               (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-gstglshader.html#GstGLShader"><span class="type">GstGLShader</span></a> *shader</code></em>,
-                                <em class="parameter"><code>const <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *f_src</code></em>,
-                                <em class="parameter"><code><span class="type">GLint</span> *pos_loc</code></em>,
-                                <em class="parameter"><code><span class="type">GLint</span> *tex_loc</code></em>);</pre>
-</div>
-<hr>
-<div class="refsect2">
-<a name="gst-gl-shader-compile-with-default-vf-and-check"></a><h3>gst_gl_shader_compile_with_default_vf_and_check ()</h3>
-<pre class="programlisting"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-gst_gl_shader_compile_with_default_vf_and_check
-                               (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-gstglshader.html#GstGLShader"><span class="type">GstGLShader</span></a> *shader</code></em>,
-                                <em class="parameter"><code><span class="type">GLint</span> *pos_loc</code></em>,
-                                <em class="parameter"><code><span class="type">GLint</span> *tex_loc</code></em>);</pre>
-</div>
-<hr>
-<div class="refsect2">
-<a name="gst-gl-shader-release"></a><h3>gst_gl_shader_release ()</h3>
-<pre class="programlisting"><span class="returnvalue">void</span>
-gst_gl_shader_release (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-gstglshader.html#GstGLShader"><span class="type">GstGLShader</span></a> *shader</code></em>);</pre>
-</div>
-<hr>
-<div class="refsect2">
-<a name="gst-gl-shader-use"></a><h3>gst_gl_shader_use ()</h3>
-<pre class="programlisting"><span class="returnvalue">void</span>
-gst_gl_shader_use (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-gstglshader.html#GstGLShader"><span class="type">GstGLShader</span></a> *shader</code></em>);</pre>
-</div>
-<hr>
-<div class="refsect2">
-<a name="gst-gl-shader-set-uniform-1i"></a><h3>gst_gl_shader_set_uniform_1i ()</h3>
-<pre class="programlisting"><span class="returnvalue">void</span>
-gst_gl_shader_set_uniform_1i (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-gstglshader.html#GstGLShader"><span class="type">GstGLShader</span></a> *shader</code></em>,
-                              <em class="parameter"><code>const <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *name</code></em>,
-                              <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a> value</code></em>);</pre>
-</div>
-<hr>
-<div class="refsect2">
-<a name="gst-gl-shader-set-uniform-1f"></a><h3>gst_gl_shader_set_uniform_1f ()</h3>
-<pre class="programlisting"><span class="returnvalue">void</span>
-gst_gl_shader_set_uniform_1f (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-gstglshader.html#GstGLShader"><span class="type">GstGLShader</span></a> *shader</code></em>,
-                              <em class="parameter"><code>const <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *name</code></em>,
-                              <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gfloat"><span class="type">gfloat</span></a> value</code></em>);</pre>
-</div>
-<hr>
-<div class="refsect2">
-<a name="gst-gl-shader-set-uniform-1fv"></a><h3>gst_gl_shader_set_uniform_1fv ()</h3>
-<pre class="programlisting"><span class="returnvalue">void</span>
-gst_gl_shader_set_uniform_1fv (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-gstglshader.html#GstGLShader"><span class="type">GstGLShader</span></a> *shader</code></em>,
-                               <em class="parameter"><code>const <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *name</code></em>,
-                               <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> count</code></em>,
-                               <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gfloat"><span class="type">gfloat</span></a> *value</code></em>);</pre>
-</div>
-<hr>
-<div class="refsect2">
-<a name="gst-gl-shader-set-uniform-1iv"></a><h3>gst_gl_shader_set_uniform_1iv ()</h3>
-<pre class="programlisting"><span class="returnvalue">void</span>
-gst_gl_shader_set_uniform_1iv (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-gstglshader.html#GstGLShader"><span class="type">GstGLShader</span></a> *shader</code></em>,
-                               <em class="parameter"><code>const <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *name</code></em>,
-                               <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> count</code></em>,
-                               <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a> *value</code></em>);</pre>
-</div>
-<hr>
-<div class="refsect2">
-<a name="gst-gl-shader-set-uniform-2f"></a><h3>gst_gl_shader_set_uniform_2f ()</h3>
-<pre class="programlisting"><span class="returnvalue">void</span>
-gst_gl_shader_set_uniform_2f (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-gstglshader.html#GstGLShader"><span class="type">GstGLShader</span></a> *shader</code></em>,
-                              <em class="parameter"><code>const <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *name</code></em>,
-                              <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gfloat"><span class="type">gfloat</span></a> v0</code></em>,
-                              <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gfloat"><span class="type">gfloat</span></a> v1</code></em>);</pre>
-</div>
-<hr>
-<div class="refsect2">
-<a name="gst-gl-shader-set-uniform-2fv"></a><h3>gst_gl_shader_set_uniform_2fv ()</h3>
-<pre class="programlisting"><span class="returnvalue">void</span>
-gst_gl_shader_set_uniform_2fv (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-gstglshader.html#GstGLShader"><span class="type">GstGLShader</span></a> *shader</code></em>,
-                               <em class="parameter"><code>const <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *name</code></em>,
-                               <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> count</code></em>,
-                               <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gfloat"><span class="type">gfloat</span></a> *value</code></em>);</pre>
-</div>
-<hr>
-<div class="refsect2">
-<a name="gst-gl-shader-set-uniform-2i"></a><h3>gst_gl_shader_set_uniform_2i ()</h3>
-<pre class="programlisting"><span class="returnvalue">void</span>
-gst_gl_shader_set_uniform_2i (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-gstglshader.html#GstGLShader"><span class="type">GstGLShader</span></a> *shader</code></em>,
-                              <em class="parameter"><code>const <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *name</code></em>,
-                              <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a> v0</code></em>,
-                              <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a> v1</code></em>);</pre>
-</div>
-<hr>
-<div class="refsect2">
-<a name="gst-gl-shader-set-uniform-2iv"></a><h3>gst_gl_shader_set_uniform_2iv ()</h3>
-<pre class="programlisting"><span class="returnvalue">void</span>
-gst_gl_shader_set_uniform_2iv (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-gstglshader.html#GstGLShader"><span class="type">GstGLShader</span></a> *shader</code></em>,
-                               <em class="parameter"><code>const <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *name</code></em>,
-                               <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> count</code></em>,
-                               <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a> *value</code></em>);</pre>
-</div>
-<hr>
-<div class="refsect2">
-<a name="gst-gl-shader-set-uniform-3f"></a><h3>gst_gl_shader_set_uniform_3f ()</h3>
-<pre class="programlisting"><span class="returnvalue">void</span>
-gst_gl_shader_set_uniform_3f (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-gstglshader.html#GstGLShader"><span class="type">GstGLShader</span></a> *shader</code></em>,
-                              <em class="parameter"><code>const <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *name</code></em>,
-                              <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gfloat"><span class="type">gfloat</span></a> v0</code></em>,
-                              <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gfloat"><span class="type">gfloat</span></a> v1</code></em>,
-                              <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gfloat"><span class="type">gfloat</span></a> v2</code></em>);</pre>
-</div>
-<hr>
-<div class="refsect2">
-<a name="gst-gl-shader-set-uniform-3fv"></a><h3>gst_gl_shader_set_uniform_3fv ()</h3>
-<pre class="programlisting"><span class="returnvalue">void</span>
-gst_gl_shader_set_uniform_3fv (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-gstglshader.html#GstGLShader"><span class="type">GstGLShader</span></a> *shader</code></em>,
-                               <em class="parameter"><code>const <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *name</code></em>,
-                               <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> count</code></em>,
-                               <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gfloat"><span class="type">gfloat</span></a> *value</code></em>);</pre>
-</div>
-<hr>
-<div class="refsect2">
-<a name="gst-gl-shader-set-uniform-3i"></a><h3>gst_gl_shader_set_uniform_3i ()</h3>
-<pre class="programlisting"><span class="returnvalue">void</span>
-gst_gl_shader_set_uniform_3i (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-gstglshader.html#GstGLShader"><span class="type">GstGLShader</span></a> *shader</code></em>,
-                              <em class="parameter"><code>const <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *name</code></em>,
-                              <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a> v0</code></em>,
-                              <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a> v1</code></em>,
-                              <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a> v2</code></em>);</pre>
-</div>
-<hr>
-<div class="refsect2">
-<a name="gst-gl-shader-set-uniform-3iv"></a><h3>gst_gl_shader_set_uniform_3iv ()</h3>
-<pre class="programlisting"><span class="returnvalue">void</span>
-gst_gl_shader_set_uniform_3iv (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-gstglshader.html#GstGLShader"><span class="type">GstGLShader</span></a> *shader</code></em>,
-                               <em class="parameter"><code>const <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *name</code></em>,
-                               <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> count</code></em>,
-                               <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a> *value</code></em>);</pre>
-</div>
-<hr>
-<div class="refsect2">
-<a name="gst-gl-shader-set-uniform-4f"></a><h3>gst_gl_shader_set_uniform_4f ()</h3>
-<pre class="programlisting"><span class="returnvalue">void</span>
-gst_gl_shader_set_uniform_4f (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-gstglshader.html#GstGLShader"><span class="type">GstGLShader</span></a> *shader</code></em>,
-                              <em class="parameter"><code>const <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *name</code></em>,
-                              <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gfloat"><span class="type">gfloat</span></a> v0</code></em>,
-                              <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gfloat"><span class="type">gfloat</span></a> v1</code></em>,
-                              <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gfloat"><span class="type">gfloat</span></a> v2</code></em>,
-                              <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gfloat"><span class="type">gfloat</span></a> v3</code></em>);</pre>
-</div>
-<hr>
-<div class="refsect2">
-<a name="gst-gl-shader-set-uniform-4fv"></a><h3>gst_gl_shader_set_uniform_4fv ()</h3>
-<pre class="programlisting"><span class="returnvalue">void</span>
-gst_gl_shader_set_uniform_4fv (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-gstglshader.html#GstGLShader"><span class="type">GstGLShader</span></a> *shader</code></em>,
-                               <em class="parameter"><code>const <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *name</code></em>,
-                               <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> count</code></em>,
-                               <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gfloat"><span class="type">gfloat</span></a> *value</code></em>);</pre>
-</div>
-<hr>
-<div class="refsect2">
-<a name="gst-gl-shader-set-uniform-4i"></a><h3>gst_gl_shader_set_uniform_4i ()</h3>
-<pre class="programlisting"><span class="returnvalue">void</span>
-gst_gl_shader_set_uniform_4i (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-gstglshader.html#GstGLShader"><span class="type">GstGLShader</span></a> *shader</code></em>,
-                              <em class="parameter"><code>const <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *name</code></em>,
-                              <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a> v0</code></em>,
-                              <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a> v1</code></em>,
-                              <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a> v2</code></em>,
-                              <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a> v3</code></em>);</pre>
-</div>
-<hr>
-<div class="refsect2">
-<a name="gst-gl-shader-set-uniform-4iv"></a><h3>gst_gl_shader_set_uniform_4iv ()</h3>
-<pre class="programlisting"><span class="returnvalue">void</span>
-gst_gl_shader_set_uniform_4iv (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-gstglshader.html#GstGLShader"><span class="type">GstGLShader</span></a> *shader</code></em>,
-                               <em class="parameter"><code>const <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *name</code></em>,
-                               <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> count</code></em>,
-                               <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a> *value</code></em>);</pre>
-</div>
-<hr>
-<div class="refsect2">
-<a name="gst-gl-shader-set-uniform-matrix-2fv"></a><h3>gst_gl_shader_set_uniform_matrix_2fv ()</h3>
-<pre class="programlisting"><span class="returnvalue">void</span>
-gst_gl_shader_set_uniform_matrix_2fv (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-gstglshader.html#GstGLShader"><span class="type">GstGLShader</span></a> *shader</code></em>,
-                                      <em class="parameter"><code>const <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *name</code></em>,
-                                      <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a> count</code></em>,
-                                      <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> transpose</code></em>,
-                                      <em class="parameter"><code>const <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gfloat"><span class="type">gfloat</span></a> *value</code></em>);</pre>
-</div>
-<hr>
-<div class="refsect2">
-<a name="gst-gl-shader-set-uniform-matrix-2x3fv"></a><h3>gst_gl_shader_set_uniform_matrix_2x3fv ()</h3>
-<pre class="programlisting"><span class="returnvalue">void</span>
-gst_gl_shader_set_uniform_matrix_2x3fv
-                               (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-gstglshader.html#GstGLShader"><span class="type">GstGLShader</span></a> *shader</code></em>,
-                                <em class="parameter"><code>const <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *name</code></em>,
-                                <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a> count</code></em>,
-                                <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> transpose</code></em>,
-                                <em class="parameter"><code>const <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gfloat"><span class="type">gfloat</span></a> *value</code></em>);</pre>
-</div>
-<hr>
-<div class="refsect2">
-<a name="gst-gl-shader-set-uniform-matrix-2x4fv"></a><h3>gst_gl_shader_set_uniform_matrix_2x4fv ()</h3>
-<pre class="programlisting"><span class="returnvalue">void</span>
-gst_gl_shader_set_uniform_matrix_2x4fv
-                               (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-gstglshader.html#GstGLShader"><span class="type">GstGLShader</span></a> *shader</code></em>,
-                                <em class="parameter"><code>const <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *name</code></em>,
-                                <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a> count</code></em>,
-                                <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> transpose</code></em>,
-                                <em class="parameter"><code>const <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gfloat"><span class="type">gfloat</span></a> *value</code></em>);</pre>
-</div>
-<hr>
-<div class="refsect2">
-<a name="gst-gl-shader-set-uniform-matrix-3fv"></a><h3>gst_gl_shader_set_uniform_matrix_3fv ()</h3>
-<pre class="programlisting"><span class="returnvalue">void</span>
-gst_gl_shader_set_uniform_matrix_3fv (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-gstglshader.html#GstGLShader"><span class="type">GstGLShader</span></a> *shader</code></em>,
-                                      <em class="parameter"><code>const <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *name</code></em>,
-                                      <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a> count</code></em>,
-                                      <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> transpose</code></em>,
-                                      <em class="parameter"><code>const <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gfloat"><span class="type">gfloat</span></a> *value</code></em>);</pre>
-</div>
-<hr>
-<div class="refsect2">
-<a name="gst-gl-shader-set-uniform-matrix-3x2fv"></a><h3>gst_gl_shader_set_uniform_matrix_3x2fv ()</h3>
-<pre class="programlisting"><span class="returnvalue">void</span>
-gst_gl_shader_set_uniform_matrix_3x2fv
-                               (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-gstglshader.html#GstGLShader"><span class="type">GstGLShader</span></a> *shader</code></em>,
-                                <em class="parameter"><code>const <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *name</code></em>,
-                                <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a> count</code></em>,
-                                <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> transpose</code></em>,
-                                <em class="parameter"><code>const <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gfloat"><span class="type">gfloat</span></a> *value</code></em>);</pre>
-</div>
-<hr>
-<div class="refsect2">
-<a name="gst-gl-shader-set-uniform-matrix-3x4fv"></a><h3>gst_gl_shader_set_uniform_matrix_3x4fv ()</h3>
-<pre class="programlisting"><span class="returnvalue">void</span>
-gst_gl_shader_set_uniform_matrix_3x4fv
-                               (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-gstglshader.html#GstGLShader"><span class="type">GstGLShader</span></a> *shader</code></em>,
-                                <em class="parameter"><code>const <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *name</code></em>,
-                                <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a> count</code></em>,
-                                <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> transpose</code></em>,
-                                <em class="parameter"><code>const <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gfloat"><span class="type">gfloat</span></a> *value</code></em>);</pre>
-</div>
-<hr>
-<div class="refsect2">
-<a name="gst-gl-shader-set-uniform-matrix-4fv"></a><h3>gst_gl_shader_set_uniform_matrix_4fv ()</h3>
-<pre class="programlisting"><span class="returnvalue">void</span>
-gst_gl_shader_set_uniform_matrix_4fv (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-gstglshader.html#GstGLShader"><span class="type">GstGLShader</span></a> *shader</code></em>,
-                                      <em class="parameter"><code>const <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *name</code></em>,
-                                      <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a> count</code></em>,
-                                      <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> transpose</code></em>,
-                                      <em class="parameter"><code>const <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gfloat"><span class="type">gfloat</span></a> *value</code></em>);</pre>
-</div>
-<hr>
-<div class="refsect2">
-<a name="gst-gl-shader-set-uniform-matrix-4x2fv"></a><h3>gst_gl_shader_set_uniform_matrix_4x2fv ()</h3>
-<pre class="programlisting"><span class="returnvalue">void</span>
-gst_gl_shader_set_uniform_matrix_4x2fv
-                               (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-gstglshader.html#GstGLShader"><span class="type">GstGLShader</span></a> *shader</code></em>,
-                                <em class="parameter"><code>const <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *name</code></em>,
-                                <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a> count</code></em>,
-                                <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> transpose</code></em>,
-                                <em class="parameter"><code>const <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gfloat"><span class="type">gfloat</span></a> *value</code></em>);</pre>
-</div>
-<hr>
-<div class="refsect2">
-<a name="gst-gl-shader-set-uniform-matrix-4x3fv"></a><h3>gst_gl_shader_set_uniform_matrix_4x3fv ()</h3>
-<pre class="programlisting"><span class="returnvalue">void</span>
-gst_gl_shader_set_uniform_matrix_4x3fv
-                               (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-gstglshader.html#GstGLShader"><span class="type">GstGLShader</span></a> *shader</code></em>,
-                                <em class="parameter"><code>const <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *name</code></em>,
-                                <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a> count</code></em>,
-                                <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> transpose</code></em>,
-                                <em class="parameter"><code>const <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gfloat"><span class="type">gfloat</span></a> *value</code></em>);</pre>
-</div>
-<hr>
-<div class="refsect2">
-<a name="gst-gl-shader-get-attribute-location"></a><h3>gst_gl_shader_get_attribute_location ()</h3>
-<pre class="programlisting"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gint"><span class="returnvalue">gint</span></a>
-gst_gl_shader_get_attribute_location (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-gstglshader.html#GstGLShader"><span class="type">GstGLShader</span></a> *shader</code></em>,
-                                      <em class="parameter"><code>const <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *name</code></em>);</pre>
-</div>
-<hr>
-<div class="refsect2">
-<a name="gst-gl-shader-bind-attribute-location"></a><h3>gst_gl_shader_bind_attribute_location ()</h3>
-<pre class="programlisting"><span class="returnvalue">void</span>
-gst_gl_shader_bind_attribute_location (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-gstglshader.html#GstGLShader"><span class="type">GstGLShader</span></a> *shader</code></em>,
-                                       <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> index</code></em>,
-                                       <em class="parameter"><code>const <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *name</code></em>);</pre>
-</div>
-</div>
-<div class="refsect1">
-<a name="gst-plugins-bad-libs-gstglshader.other_details"></a><h2>Types and Values</h2>
-<div class="refsect2">
-<a name="GstGLShaderError"></a><h3>enum GstGLShaderError</h3>
-<div class="refsect3">
-<a name="id-1.2.9.18.10.2.3"></a><h4>Members</h4>
-<div class="informaltable"><table width="100%" border="0">
-<colgroup>
-<col width="300px" class="enum_members_name">
-<col class="enum_members_description">
-<col width="200px" class="enum_members_annotations">
-</colgroup>
-<tbody>
-<tr>
-<td class="enum_member_name"><p><a name="GST-GL-SHADER-ERROR-COMPILE:CAPS"></a>GST_GL_SHADER_ERROR_COMPILE</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-GL-SHADER-ERROR-LINK:CAPS"></a>GST_GL_SHADER_ERROR_LINK</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-GL-SHADER-ERROR-PROGRAM:CAPS"></a>GST_GL_SHADER_ERROR_PROGRAM</p></td>
-<td> </td>
-<td> </td>
-</tr>
-</tbody>
-</table></div>
-</div>
-</div>
-<hr>
-<div class="refsect2">
-<a name="GstGLShaderSourceType"></a><h3>enum GstGLShaderSourceType</h3>
-<div class="refsect3">
-<a name="id-1.2.9.18.10.3.3"></a><h4>Members</h4>
-<div class="informaltable"><table width="100%" border="0">
-<colgroup>
-<col width="300px" class="enum_members_name">
-<col class="enum_members_description">
-<col width="200px" class="enum_members_annotations">
-</colgroup>
-<tbody>
-<tr>
-<td class="enum_member_name"><p><a name="GST-GL-SHADER-FRAGMENT-SOURCE:CAPS"></a>GST_GL_SHADER_FRAGMENT_SOURCE</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-GL-SHADER-VERTEX-SOURCE:CAPS"></a>GST_GL_SHADER_VERTEX_SOURCE</p></td>
-<td> </td>
-<td> </td>
-</tr>
-</tbody>
-</table></div>
-</div>
-</div>
-<hr>
-<div class="refsect2">
-<a name="gst-gl-shadervariable-desc"></a><h3>struct gst_gl_shadervariable_desc</h3>
-<pre class="programlisting">struct gst_gl_shadervariable_desc;</pre>
-</div>
-<hr>
-<div class="refsect2">
-<a name="GstGLShader-struct"></a><h3>GstGLShader</h3>
-<pre class="programlisting">typedef struct _GstGLShader GstGLShader;</pre>
-</div>
-</div>
-<div class="refsect1">
-<a name="gst-plugins-bad-libs-gstglshader.property-details"></a><h2>Property Details</h2>
-<div class="refsect2">
-<a name="GstGLShader--active"></a><h3>The <code class="literal">“active”</code> property</h3>
-<pre class="programlisting">  “active”                   <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *</pre>
-<p>Enable/Disable the shader.</p>
-<p>Flags: Read / Write</p>
-<p>Default value: NULL</p>
-</div>
-<hr>
-<div class="refsect2">
-<a name="GstGLShader--compiled"></a><h3>The <code class="literal">“compiled”</code> property</h3>
-<pre class="programlisting">  “compiled”                 <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a></pre>
-<p>Shader compile and link status.</p>
-<p>Flags: Read</p>
-<p>Default value: FALSE</p>
-</div>
-<hr>
-<div class="refsect2">
-<a name="GstGLShader--fragment-src"></a><h3>The <code class="literal">“fragment-src”</code> property</h3>
-<pre class="programlisting">  “fragment-src”             <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *</pre>
-<p>GLSL Fragment Shader source code.</p>
-<p>Flags: Read / Write</p>
-<p>Default value: NULL</p>
-</div>
-<hr>
-<div class="refsect2">
-<a name="GstGLShader--vertex-src"></a><h3>The <code class="literal">“vertex-src”</code> property</h3>
-<pre class="programlisting">  “vertex-src”               <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *</pre>
-<p>GLSL Vertex Shader source code.</p>
-<p>Flags: Read / Write</p>
-<p>Default value: NULL</p>
-</div>
-</div>
-</div>
-<div class="footer">
-<hr>Generated by GTK-Doc V1.24</div>
-</body>
-</html>
\ No newline at end of file
diff --git a/docs/libs/html/gst-plugins-bad-libs-gstmpegvideometa.html b/docs/libs/html/gst-plugins-bad-libs-gstmpegvideometa.html
index 4c1edfd..0c6bc90 100644
--- a/docs/libs/html/gst-plugins-bad-libs-gstmpegvideometa.html
+++ b/docs/libs/html/gst-plugins-bad-libs-gstmpegvideometa.html
@@ -3,7 +3,7 @@
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>gstmpegvideometa: GStreamer Bad Plugins 1.0 Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
 <link rel="home" href="index.html" title="GStreamer Bad Plugins 1.0 Library Reference Manual">
 <link rel="up" href="codecparsers.html" title="Bitstream parsing Library">
 <link rel="prev" href="gst-plugins-bad-libs-vc1parser.html" title="vc1parser">
@@ -33,7 +33,7 @@
 </tr></table></div>
 <div class="refsect1">
 <a name="gst-plugins-bad-libs-gstmpegvideometa.functions"></a><h2>Functions</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="functions_return">
 <col class="functions_name">
@@ -73,7 +73,7 @@
 </div>
 <div class="refsect1">
 <a name="gst-plugins-bad-libs-gstmpegvideometa.other"></a><h2>Types and Values</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="name">
 <col class="description">
@@ -121,7 +121,7 @@
 <p>Provided structures must either be <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> or GSlice-allocated.</p>
 <div class="refsect3">
 <a name="id-1.2.4.8.7.4.6"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
 <col class="parameters_description">
@@ -179,7 +179,7 @@
 If elements wish to use those for longer, they are required to make a copy.</p>
 <div class="refsect3">
 <a name="id-1.2.4.8.8.2.7"></a><h4>Members</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="300px" class="struct_members_name">
 <col class="struct_members_description">
diff --git a/docs/libs/html/gst-plugins-bad-libs-gstplayer-gmaincontextsignaldispatcher.html b/docs/libs/html/gst-plugins-bad-libs-gstplayer-gmaincontextsignaldispatcher.html
new file mode 100644
index 0000000..da80c90
--- /dev/null
+++ b/docs/libs/html/gst-plugins-bad-libs-gstplayer-gmaincontextsignaldispatcher.html
@@ -0,0 +1,93 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>gstplayer-gmaincontextsignaldispatcher: GStreamer Bad Plugins 1.0 Library Reference Manual</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
+<link rel="home" href="index.html" title="GStreamer Bad Plugins 1.0 Library Reference Manual">
+<link rel="up" href="player.html" title="Player Library">
+<link rel="prev" href="gst-plugins-bad-libs-gstplayer-mediainfo.html" title="gstplayer-mediainfo">
+<link rel="next" href="gst-plugins-bad-libs-gstplayer-videooverlayvideorenderer.html" title="gstplayer-videooverlayvideorenderer">
+<meta name="generator" content="GTK-Doc V1.24 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="5"><tr valign="middle">
+<td width="100%" align="left" class="shortcuts">
+<a href="#" class="shortcut">Top</a><span id="nav_description">  <span class="dim">|</span> 
+                  <a href="#gst-plugins-bad-libs-gstplayer-gmaincontextsignaldispatcher.description" class="shortcut">Description</a></span>
+</td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
+<td><a accesskey="u" href="player.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
+<td><a accesskey="p" href="gst-plugins-bad-libs-gstplayer-mediainfo.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
+<td><a accesskey="n" href="gst-plugins-bad-libs-gstplayer-videooverlayvideorenderer.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
+</tr></table>
+<div class="refentry">
+<a name="gst-plugins-bad-libs-gstplayer-gmaincontextsignaldispatcher"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="gst-plugins-bad-libs-gstplayer-gmaincontextsignaldispatcher.top_of_page"></a>gstplayer-gmaincontextsignaldispatcher</span></h2>
+<p>gstplayer-gmaincontextsignaldispatcher — Player GLib MainContext dispatcher</p>
+</td>
+<td class="gallery_image" valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsect1">
+<a name="gst-plugins-bad-libs-gstplayer-gmaincontextsignaldispatcher.functions"></a><h2>Functions</h2>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="functions_return">
+<col class="functions_name">
+</colgroup>
+<tbody><tr>
+<td class="function_type">
+<a class="link" href="gst-plugins-bad-libs-gstplayer.html#GstPlayerSignalDispatcher"><span class="returnvalue">GstPlayerSignalDispatcher</span></a> *
+</td>
+<td class="function_name">
+<a class="link" href="gst-plugins-bad-libs-gstplayer-gmaincontextsignaldispatcher.html#gst-player-g-main-context-signal-dispatcher-new" title="gst_player_g_main_context_signal_dispatcher_new ()">gst_player_g_main_context_signal_dispatcher_new</a> <span class="c_punctuation">()</span>
+</td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-libs-gstplayer-gmaincontextsignaldispatcher.description"></a><h2>Description</h2>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-libs-gstplayer-gmaincontextsignaldispatcher.functions_details"></a><h2>Functions</h2>
+<div class="refsect2">
+<a name="gst-player-g-main-context-signal-dispatcher-new"></a><h3>gst_player_g_main_context_signal_dispatcher_new ()</h3>
+<pre class="programlisting"><a class="link" href="gst-plugins-bad-libs-gstplayer.html#GstPlayerSignalDispatcher"><span class="returnvalue">GstPlayerSignalDispatcher</span></a> *
+gst_player_g_main_context_signal_dispatcher_new
+                               (<em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-The-Main-Event-Loop.html#GMainContext"><span class="type">GMainContext</span></a> *application_context</code></em>);</pre>
+<p>Creates a new GstPlayerSignalDispatcher that uses <em class="parameter"><code>application_context</code></em>
+,
+or the thread default one if <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> is used. See <code class="function">gst_player_new_full()</code>.</p>
+<div class="refsect3">
+<a name="id-1.2.10.4.5.2.5"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>application_context</p></td>
+<td class="parameter_description"><p> GMainContext to use or <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="NULL is OK, both for passing and for returning."><span class="acronym">allow-none</span></acronym>]</span></td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="id-1.2.10.4.5.2.6"></a><h4>Returns</h4>
+<p> the new GstPlayerSignalDispatcher. </p>
+<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p>
+</div>
+</div>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-libs-gstplayer-gmaincontextsignaldispatcher.other_details"></a><h2>Types and Values</h2>
+</div>
+</div>
+<div class="footer">
+<hr>Generated by GTK-Doc V1.24</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/libs/html/gst-plugins-bad-libs-gstplayer-mediainfo.html b/docs/libs/html/gst-plugins-bad-libs-gstplayer-mediainfo.html
new file mode 100644
index 0000000..b370149
--- /dev/null
+++ b/docs/libs/html/gst-plugins-bad-libs-gstplayer-mediainfo.html
@@ -0,0 +1,961 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>gstplayer-mediainfo: GStreamer Bad Plugins 1.0 Library Reference Manual</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
+<link rel="home" href="index.html" title="GStreamer Bad Plugins 1.0 Library Reference Manual">
+<link rel="up" href="player.html" title="Player Library">
+<link rel="prev" href="gst-plugins-bad-libs-gstplayer.html" title="gstplayer">
+<link rel="next" href="gst-plugins-bad-libs-gstplayer-gmaincontextsignaldispatcher.html" title="gstplayer-gmaincontextsignaldispatcher">
+<meta name="generator" content="GTK-Doc V1.24 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="5"><tr valign="middle">
+<td width="100%" align="left" class="shortcuts">
+<a href="#" class="shortcut">Top</a><span id="nav_description">  <span class="dim">|</span> 
+                  <a href="#gst-plugins-bad-libs-gstplayer-mediainfo.description" class="shortcut">Description</a></span><span id="nav_hierarchy">  <span class="dim">|</span> 
+                  <a href="#gst-plugins-bad-libs-gstplayer-mediainfo.object-hierarchy" class="shortcut">Object Hierarchy</a></span>
+</td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
+<td><a accesskey="u" href="player.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
+<td><a accesskey="p" href="gst-plugins-bad-libs-gstplayer.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
+<td><a accesskey="n" href="gst-plugins-bad-libs-gstplayer-gmaincontextsignaldispatcher.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
+</tr></table>
+<div class="refentry">
+<a name="gst-plugins-bad-libs-gstplayer-mediainfo"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="gst-plugins-bad-libs-gstplayer-mediainfo.top_of_page"></a>gstplayer-mediainfo</span></h2>
+<p>gstplayer-mediainfo — Player Media Information</p>
+</td>
+<td class="gallery_image" valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsect1">
+<a name="gst-plugins-bad-libs-gstplayer-mediainfo.functions"></a><h2>Functions</h2>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="functions_return">
+<col class="functions_name">
+</colgroup>
+<tbody>
+<tr>
+<td class="function_type">const <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> *
+</td>
+<td class="function_name">
+<a class="link" href="gst-plugins-bad-libs-gstplayer-mediainfo.html#gst-player-media-info-get-uri" title="gst_player_media_info_get_uri ()">gst_player_media_info_get_uri</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstClock.html#GstClockTime"><span class="returnvalue">GstClockTime</span></a>
+</td>
+<td class="function_name">
+<a class="link" href="gst-plugins-bad-libs-gstplayer-mediainfo.html#gst-player-media-info-get-duration" title="gst_player_media_info_get_duration ()">gst_player_media_info_get_duration</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">const <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> *
+</td>
+<td class="function_name">
+<a class="link" href="gst-plugins-bad-libs-gstplayer-mediainfo.html#gst-player-media-info-get-title" title="gst_player_media_info_get_title ()">gst_player_media_info_get_title</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">const <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> *
+</td>
+<td class="function_name">
+<a class="link" href="gst-plugins-bad-libs-gstplayer-mediainfo.html#gst-player-media-info-get-container-format" title="gst_player_media_info_get_container_format ()">gst_player_media_info_get_container_format</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
+</td>
+<td class="function_name">
+<a class="link" href="gst-plugins-bad-libs-gstplayer-mediainfo.html#gst-player-media-info-is-seekable" title="gst_player_media_info_is_seekable ()">gst_player_media_info_is_seekable</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstSample.html"><span class="returnvalue">GstSample</span></a> *
+</td>
+<td class="function_name">
+<a class="link" href="gst-plugins-bad-libs-gstplayer-mediainfo.html#gst-player-media-info-get-image-sample" title="gst_player_media_info_get_image_sample ()">gst_player_media_info_get_image_sample</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstTagList.html"><span class="returnvalue">GstTagList</span></a> *
+</td>
+<td class="function_name">
+<a class="link" href="gst-plugins-bad-libs-gstplayer-mediainfo.html#gst-player-media-info-get-tags" title="gst_player_media_info_get_tags ()">gst_player_media_info_get_tags</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a href="https://developer.gnome.org/glib/unstable/glib-Doubly-Linked-Lists.html#GList"><span class="returnvalue">GList</span></a> *
+</td>
+<td class="function_name">
+<a class="link" href="gst-plugins-bad-libs-gstplayer-mediainfo.html#gst-player-media-info-get-stream-list" title="gst_player_media_info_get_stream_list ()">gst_player_media_info_get_stream_list</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gint"><span class="returnvalue">gint</span></a>
+</td>
+<td class="function_name">
+<a class="link" href="gst-plugins-bad-libs-gstplayer-mediainfo.html#gst-player-stream-info-get-index" title="gst_player_stream_info_get_index ()">gst_player_stream_info_get_index</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstCaps.html"><span class="returnvalue">GstCaps</span></a> *
+</td>
+<td class="function_name">
+<a class="link" href="gst-plugins-bad-libs-gstplayer-mediainfo.html#gst-player-stream-info-get-caps" title="gst_player_stream_info_get_caps ()">gst_player_stream_info_get_caps</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstTagList.html"><span class="returnvalue">GstTagList</span></a> *
+</td>
+<td class="function_name">
+<a class="link" href="gst-plugins-bad-libs-gstplayer-mediainfo.html#gst-player-stream-info-get-tags" title="gst_player_stream_info_get_tags ()">gst_player_stream_info_get_tags</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">const <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> *
+</td>
+<td class="function_name">
+<a class="link" href="gst-plugins-bad-libs-gstplayer-mediainfo.html#gst-player-stream-info-get-codec" title="gst_player_stream_info_get_codec ()">gst_player_stream_info_get_codec</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">const <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> *
+</td>
+<td class="function_name">
+<a class="link" href="gst-plugins-bad-libs-gstplayer-mediainfo.html#gst-player-stream-info-get-stream-type" title="gst_player_stream_info_get_stream_type ()">gst_player_stream_info_get_stream_type</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gint"><span class="returnvalue">gint</span></a>
+</td>
+<td class="function_name">
+<a class="link" href="gst-plugins-bad-libs-gstplayer-mediainfo.html#gst-player-audio-info-get-bitrate" title="gst_player_audio_info_get_bitrate ()">gst_player_audio_info_get_bitrate</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gint"><span class="returnvalue">gint</span></a>
+</td>
+<td class="function_name">
+<a class="link" href="gst-plugins-bad-libs-gstplayer-mediainfo.html#gst-player-audio-info-get-channels" title="gst_player_audio_info_get_channels ()">gst_player_audio_info_get_channels</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">const <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> *
+</td>
+<td class="function_name">
+<a class="link" href="gst-plugins-bad-libs-gstplayer-mediainfo.html#gst-player-audio-info-get-language" title="gst_player_audio_info_get_language ()">gst_player_audio_info_get_language</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gint"><span class="returnvalue">gint</span></a>
+</td>
+<td class="function_name">
+<a class="link" href="gst-plugins-bad-libs-gstplayer-mediainfo.html#gst-player-audio-info-get-max-bitrate" title="gst_player_audio_info_get_max_bitrate ()">gst_player_audio_info_get_max_bitrate</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gint"><span class="returnvalue">gint</span></a>
+</td>
+<td class="function_name">
+<a class="link" href="gst-plugins-bad-libs-gstplayer-mediainfo.html#gst-player-audio-info-get-sample-rate" title="gst_player_audio_info_get_sample_rate ()">gst_player_audio_info_get_sample_rate</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gint"><span class="returnvalue">gint</span></a>
+</td>
+<td class="function_name">
+<a class="link" href="gst-plugins-bad-libs-gstplayer-mediainfo.html#gst-player-video-info-get-bitrate" title="gst_player_video_info_get_bitrate ()">gst_player_video_info_get_bitrate</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gint"><span class="returnvalue">gint</span></a>
+</td>
+<td class="function_name">
+<a class="link" href="gst-plugins-bad-libs-gstplayer-mediainfo.html#gst-player-video-info-get-height" title="gst_player_video_info_get_height ()">gst_player_video_info_get_height</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gint"><span class="returnvalue">gint</span></a>
+</td>
+<td class="function_name">
+<a class="link" href="gst-plugins-bad-libs-gstplayer-mediainfo.html#gst-player-video-info-get-width" title="gst_player_video_info_get_width ()">gst_player_video_info_get_width</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
+<a class="link" href="gst-plugins-bad-libs-gstplayer-mediainfo.html#gst-player-video-info-get-framerate" title="gst_player_video_info_get_framerate ()">gst_player_video_info_get_framerate</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gint"><span class="returnvalue">gint</span></a>
+</td>
+<td class="function_name">
+<a class="link" href="gst-plugins-bad-libs-gstplayer-mediainfo.html#gst-player-video-info-get-max-bitrate" title="gst_player_video_info_get_max_bitrate ()">gst_player_video_info_get_max_bitrate</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
+<a class="link" href="gst-plugins-bad-libs-gstplayer-mediainfo.html#gst-player-video-info-get-pixel-aspect-ratio" title="gst_player_video_info_get_pixel_aspect_ratio ()">gst_player_video_info_get_pixel_aspect_ratio</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">const <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> *
+</td>
+<td class="function_name">
+<a class="link" href="gst-plugins-bad-libs-gstplayer-mediainfo.html#gst-player-subtitle-info-get-language" title="gst_player_subtitle_info_get_language ()">gst_player_subtitle_info_get_language</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<a name="GstPlayerMediaInfo"></a><a name="GstPlayerStreamInfo"></a><a name="GstPlayerAudioInfo"></a><a name="GstPlayerVideoInfo"></a><a name="GstPlayerSubtitleInfo"></a><div class="refsect1">
+<a name="gst-plugins-bad-libs-gstplayer-mediainfo.other"></a><h2>Types and Values</h2>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="name">
+<col class="description">
+</colgroup>
+<tbody>
+<tr>
+<td class="datatype_keyword"> </td>
+<td class="function_name"><a class="link" href="gst-plugins-bad-libs-gstplayer-mediainfo.html#GstPlayerMediaInfo-struct" title="GstPlayerMediaInfo">GstPlayerMediaInfo</a></td>
+</tr>
+<tr>
+<td class="datatype_keyword"> </td>
+<td class="function_name"><a class="link" href="gst-plugins-bad-libs-gstplayer-mediainfo.html#GstPlayerStreamInfo-struct" title="GstPlayerStreamInfo">GstPlayerStreamInfo</a></td>
+</tr>
+<tr>
+<td class="datatype_keyword"> </td>
+<td class="function_name"><a class="link" href="gst-plugins-bad-libs-gstplayer-mediainfo.html#GstPlayerAudioInfo-struct" title="GstPlayerAudioInfo">GstPlayerAudioInfo</a></td>
+</tr>
+<tr>
+<td class="datatype_keyword"> </td>
+<td class="function_name"><a class="link" href="gst-plugins-bad-libs-gstplayer-mediainfo.html#GstPlayerVideoInfo-struct" title="GstPlayerVideoInfo">GstPlayerVideoInfo</a></td>
+</tr>
+<tr>
+<td class="datatype_keyword"> </td>
+<td class="function_name"><a class="link" href="gst-plugins-bad-libs-gstplayer-mediainfo.html#GstPlayerSubtitleInfo-struct" title="GstPlayerSubtitleInfo">GstPlayerSubtitleInfo</a></td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-libs-gstplayer-mediainfo.object-hierarchy"></a><h2>Object Hierarchy</h2>
+<pre class="screen">    <a href="https://developer.gnome.org/gobject/unstable/gobject-The-Base-Object-Type.html#GObject">GObject</a>
+    <span class="lineart">├──</span> GstPlayerMediaInfo
+    <span class="lineart">╰──</span> GstPlayerStreamInfo
+        <span class="lineart">├──</span> GstPlayerAudioInfo
+        <span class="lineart">├──</span> GstPlayerSubtitleInfo
+        <span class="lineart">╰──</span> GstPlayerVideoInfo
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-libs-gstplayer-mediainfo.description"></a><h2>Description</h2>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-libs-gstplayer-mediainfo.functions_details"></a><h2>Functions</h2>
+<div class="refsect2">
+<a name="gst-player-media-info-get-uri"></a><h3>gst_player_media_info_get_uri ()</h3>
+<pre class="programlisting">const <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> *
+gst_player_media_info_get_uri (<em class="parameter"><code>const <a class="link" href="gst-plugins-bad-libs-gstplayer-mediainfo.html#GstPlayerMediaInfo"><span class="type">GstPlayerMediaInfo</span></a> *info</code></em>);</pre>
+<div class="refsect3">
+<a name="id-1.2.10.3.12.2.4"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>info</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gst-plugins-bad-libs-gstplayer-mediainfo.html#GstPlayerMediaInfo"><span class="type">GstPlayerMediaInfo</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="id-1.2.10.3.12.2.5"></a><h4>Returns</h4>
+<p> the URI associated with <a class="link" href="gst-plugins-bad-libs-gstplayer-mediainfo.html#GstPlayerMediaInfo"><span class="type">GstPlayerMediaInfo</span></a>.</p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-player-media-info-get-duration"></a><h3>gst_player_media_info_get_duration ()</h3>
+<pre class="programlisting"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstClock.html#GstClockTime"><span class="returnvalue">GstClockTime</span></a>
+gst_player_media_info_get_duration (<em class="parameter"><code>const <a class="link" href="gst-plugins-bad-libs-gstplayer-mediainfo.html#GstPlayerMediaInfo"><span class="type">GstPlayerMediaInfo</span></a> *info</code></em>);</pre>
+<div class="refsect3">
+<a name="id-1.2.10.3.12.3.4"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>info</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gst-plugins-bad-libs-gstplayer-mediainfo.html#GstPlayerMediaInfo"><span class="type">GstPlayerMediaInfo</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="id-1.2.10.3.12.3.5"></a><h4>Returns</h4>
+<p> duration of the media.</p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-player-media-info-get-title"></a><h3>gst_player_media_info_get_title ()</h3>
+<pre class="programlisting">const <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> *
+gst_player_media_info_get_title (<em class="parameter"><code>const <a class="link" href="gst-plugins-bad-libs-gstplayer-mediainfo.html#GstPlayerMediaInfo"><span class="type">GstPlayerMediaInfo</span></a> *info</code></em>);</pre>
+<div class="refsect3">
+<a name="id-1.2.10.3.12.4.4"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>info</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gst-plugins-bad-libs-gstplayer-mediainfo.html#GstPlayerMediaInfo"><span class="type">GstPlayerMediaInfo</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="id-1.2.10.3.12.4.5"></a><h4>Returns</h4>
+<p> the media title.</p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-player-media-info-get-container-format"></a><h3>gst_player_media_info_get_container_format ()</h3>
+<pre class="programlisting">const <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> *
+gst_player_media_info_get_container_format
+                               (<em class="parameter"><code>const <a class="link" href="gst-plugins-bad-libs-gstplayer-mediainfo.html#GstPlayerMediaInfo"><span class="type">GstPlayerMediaInfo</span></a> *info</code></em>);</pre>
+<div class="refsect3">
+<a name="id-1.2.10.3.12.5.4"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>info</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gst-plugins-bad-libs-gstplayer-mediainfo.html#GstPlayerMediaInfo"><span class="type">GstPlayerMediaInfo</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="id-1.2.10.3.12.5.5"></a><h4>Returns</h4>
+<p> the container format.</p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-player-media-info-is-seekable"></a><h3>gst_player_media_info_is_seekable ()</h3>
+<pre class="programlisting"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
+gst_player_media_info_is_seekable (<em class="parameter"><code>const <a class="link" href="gst-plugins-bad-libs-gstplayer-mediainfo.html#GstPlayerMediaInfo"><span class="type">GstPlayerMediaInfo</span></a> *info</code></em>);</pre>
+<div class="refsect3">
+<a name="id-1.2.10.3.12.6.4"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>info</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gst-plugins-bad-libs-gstplayer-mediainfo.html#GstPlayerMediaInfo"><span class="type">GstPlayerMediaInfo</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="id-1.2.10.3.12.6.5"></a><h4>Returns</h4>
+<p> <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the media is seekable.</p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-player-media-info-get-image-sample"></a><h3>gst_player_media_info_get_image_sample ()</h3>
+<pre class="programlisting"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstSample.html"><span class="returnvalue">GstSample</span></a> *
+gst_player_media_info_get_image_sample
+                               (<em class="parameter"><code>const <a class="link" href="gst-plugins-bad-libs-gstplayer-mediainfo.html#GstPlayerMediaInfo"><span class="type">GstPlayerMediaInfo</span></a> *info</code></em>);</pre>
+<p>Function to get the image (or preview-image) stored in taglist.
+Application can use gst_sample_*_() API's to get caps, buffer etc.</p>
+<div class="refsect3">
+<a name="id-1.2.10.3.12.7.5"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>info</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gst-plugins-bad-libs-gstplayer-mediainfo.html#GstPlayerMediaInfo"><span class="type">GstPlayerMediaInfo</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="id-1.2.10.3.12.7.6"></a><h4>Returns</h4>
+<p> GstSample or NULL. </p>
+<p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-player-media-info-get-tags"></a><h3>gst_player_media_info_get_tags ()</h3>
+<pre class="programlisting"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstTagList.html"><span class="returnvalue">GstTagList</span></a> *
+gst_player_media_info_get_tags (<em class="parameter"><code>const <a class="link" href="gst-plugins-bad-libs-gstplayer-mediainfo.html#GstPlayerMediaInfo"><span class="type">GstPlayerMediaInfo</span></a> *info</code></em>);</pre>
+<div class="refsect3">
+<a name="id-1.2.10.3.12.8.4"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>info</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gst-plugins-bad-libs-gstplayer-mediainfo.html#GstPlayerMediaInfo"><span class="type">GstPlayerMediaInfo</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="id-1.2.10.3.12.8.5"></a><h4>Returns</h4>
+<p> the tags contained in media info. </p>
+<p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-player-media-info-get-stream-list"></a><h3>gst_player_media_info_get_stream_list ()</h3>
+<pre class="programlisting"><a href="https://developer.gnome.org/glib/unstable/glib-Doubly-Linked-Lists.html#GList"><span class="returnvalue">GList</span></a> *
+gst_player_media_info_get_stream_list (<em class="parameter"><code>const <a class="link" href="gst-plugins-bad-libs-gstplayer-mediainfo.html#GstPlayerMediaInfo"><span class="type">GstPlayerMediaInfo</span></a> *info</code></em>);</pre>
+<div class="refsect3">
+<a name="id-1.2.10.3.12.9.4"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>info</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gst-plugins-bad-libs-gstplayer-mediainfo.html#GstPlayerMediaInfo"><span class="type">GstPlayerMediaInfo</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="id-1.2.10.3.12.9.5"></a><h4>Returns</h4>
+<p> A <a href="https://developer.gnome.org/glib/unstable/glib-Doubly-Linked-Lists.html#GList"><span class="type">GList</span></a> of
+matching <a class="link" href="gst-plugins-bad-libs-gstplayer-mediainfo.html#GstPlayerStreamInfo"><span class="type">GstPlayerStreamInfo</span></a>. </p>
+<p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>][<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> GstPlayerStreamInfo]</span></p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-player-stream-info-get-index"></a><h3>gst_player_stream_info_get_index ()</h3>
+<pre class="programlisting"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gint"><span class="returnvalue">gint</span></a>
+gst_player_stream_info_get_index (<em class="parameter"><code>const <a class="link" href="gst-plugins-bad-libs-gstplayer-mediainfo.html#GstPlayerStreamInfo"><span class="type">GstPlayerStreamInfo</span></a> *info</code></em>);</pre>
+<p>Function to get stream index from <a class="link" href="gst-plugins-bad-libs-gstplayer-mediainfo.html#GstPlayerStreamInfo"><span class="type">GstPlayerStreamInfo</span></a> instance.</p>
+<div class="refsect3">
+<a name="id-1.2.10.3.12.10.5"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>info</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gst-plugins-bad-libs-gstplayer-mediainfo.html#GstPlayerStreamInfo"><span class="type">GstPlayerStreamInfo</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="id-1.2.10.3.12.10.6"></a><h4>Returns</h4>
+<p> the stream index of this stream.</p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-player-stream-info-get-caps"></a><h3>gst_player_stream_info_get_caps ()</h3>
+<pre class="programlisting"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstCaps.html"><span class="returnvalue">GstCaps</span></a> *
+gst_player_stream_info_get_caps (<em class="parameter"><code>const <a class="link" href="gst-plugins-bad-libs-gstplayer-mediainfo.html#GstPlayerStreamInfo"><span class="type">GstPlayerStreamInfo</span></a> *info</code></em>);</pre>
+<div class="refsect3">
+<a name="id-1.2.10.3.12.11.4"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>info</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gst-plugins-bad-libs-gstplayer-mediainfo.html#GstPlayerStreamInfo"><span class="type">GstPlayerStreamInfo</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="id-1.2.10.3.12.11.5"></a><h4>Returns</h4>
+<p> the <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstCaps.html"><span class="type">GstCaps</span></a> of the stream. </p>
+<p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-player-stream-info-get-tags"></a><h3>gst_player_stream_info_get_tags ()</h3>
+<pre class="programlisting"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstTagList.html"><span class="returnvalue">GstTagList</span></a> *
+gst_player_stream_info_get_tags (<em class="parameter"><code>const <a class="link" href="gst-plugins-bad-libs-gstplayer-mediainfo.html#GstPlayerStreamInfo"><span class="type">GstPlayerStreamInfo</span></a> *info</code></em>);</pre>
+<div class="refsect3">
+<a name="id-1.2.10.3.12.12.4"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>info</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gst-plugins-bad-libs-gstplayer-mediainfo.html#GstPlayerStreamInfo"><span class="type">GstPlayerStreamInfo</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="id-1.2.10.3.12.12.5"></a><h4>Returns</h4>
+<p> the tags contained in this stream. </p>
+<p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-player-stream-info-get-codec"></a><h3>gst_player_stream_info_get_codec ()</h3>
+<pre class="programlisting">const <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> *
+gst_player_stream_info_get_codec (<em class="parameter"><code>const <a class="link" href="gst-plugins-bad-libs-gstplayer-mediainfo.html#GstPlayerStreamInfo"><span class="type">GstPlayerStreamInfo</span></a> *info</code></em>);</pre>
+<p>A string describing codec used in <a class="link" href="gst-plugins-bad-libs-gstplayer-mediainfo.html#GstPlayerStreamInfo"><span class="type">GstPlayerStreamInfo</span></a>.</p>
+<div class="refsect3">
+<a name="id-1.2.10.3.12.13.5"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>info</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gst-plugins-bad-libs-gstplayer-mediainfo.html#GstPlayerStreamInfo"><span class="type">GstPlayerStreamInfo</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="id-1.2.10.3.12.13.6"></a><h4>Returns</h4>
+<p> codec string or NULL on unknown.</p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-player-stream-info-get-stream-type"></a><h3>gst_player_stream_info_get_stream_type ()</h3>
+<pre class="programlisting">const <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> *
+gst_player_stream_info_get_stream_type
+                               (<em class="parameter"><code>const <a class="link" href="gst-plugins-bad-libs-gstplayer-mediainfo.html#GstPlayerStreamInfo"><span class="type">GstPlayerStreamInfo</span></a> *info</code></em>);</pre>
+<p>Function to return human readable name for the stream type
+of the given <em class="parameter"><code>info</code></em>
+ (ex: "audio", "video", "subtitle")</p>
+<div class="refsect3">
+<a name="id-1.2.10.3.12.14.5"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>info</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gst-plugins-bad-libs-gstplayer-mediainfo.html#GstPlayerStreamInfo"><span class="type">GstPlayerStreamInfo</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="id-1.2.10.3.12.14.6"></a><h4>Returns</h4>
+<p> a human readable name</p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-player-audio-info-get-bitrate"></a><h3>gst_player_audio_info_get_bitrate ()</h3>
+<pre class="programlisting"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gint"><span class="returnvalue">gint</span></a>
+gst_player_audio_info_get_bitrate (<em class="parameter"><code>const <a class="link" href="gst-plugins-bad-libs-gstplayer-mediainfo.html#GstPlayerAudioInfo"><span class="type">GstPlayerAudioInfo</span></a> *info</code></em>);</pre>
+<div class="refsect3">
+<a name="id-1.2.10.3.12.15.4"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>info</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gst-plugins-bad-libs-gstplayer-mediainfo.html#GstPlayerAudioInfo"><span class="type">GstPlayerAudioInfo</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="id-1.2.10.3.12.15.5"></a><h4>Returns</h4>
+<p> the audio bitrate in <a class="link" href="gst-plugins-bad-libs-gstplayer-mediainfo.html#GstPlayerAudioInfo"><span class="type">GstPlayerAudioInfo</span></a>.</p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-player-audio-info-get-channels"></a><h3>gst_player_audio_info_get_channels ()</h3>
+<pre class="programlisting"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gint"><span class="returnvalue">gint</span></a>
+gst_player_audio_info_get_channels (<em class="parameter"><code>const <a class="link" href="gst-plugins-bad-libs-gstplayer-mediainfo.html#GstPlayerAudioInfo"><span class="type">GstPlayerAudioInfo</span></a> *info</code></em>);</pre>
+<div class="refsect3">
+<a name="id-1.2.10.3.12.16.4"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>info</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gst-plugins-bad-libs-gstplayer-mediainfo.html#GstPlayerAudioInfo"><span class="type">GstPlayerAudioInfo</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="id-1.2.10.3.12.16.5"></a><h4>Returns</h4>
+<p> the number of audio channels in <a class="link" href="gst-plugins-bad-libs-gstplayer-mediainfo.html#GstPlayerAudioInfo"><span class="type">GstPlayerAudioInfo</span></a>.</p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-player-audio-info-get-language"></a><h3>gst_player_audio_info_get_language ()</h3>
+<pre class="programlisting">const <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> *
+gst_player_audio_info_get_language (<em class="parameter"><code>const <a class="link" href="gst-plugins-bad-libs-gstplayer-mediainfo.html#GstPlayerAudioInfo"><span class="type">GstPlayerAudioInfo</span></a> *info</code></em>);</pre>
+<div class="refsect3">
+<a name="id-1.2.10.3.12.17.4"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>info</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gst-plugins-bad-libs-gstplayer-mediainfo.html#GstPlayerAudioInfo"><span class="type">GstPlayerAudioInfo</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="id-1.2.10.3.12.17.5"></a><h4>Returns</h4>
+<p> the language of the stream, or NULL if unknown.</p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-player-audio-info-get-max-bitrate"></a><h3>gst_player_audio_info_get_max_bitrate ()</h3>
+<pre class="programlisting"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gint"><span class="returnvalue">gint</span></a>
+gst_player_audio_info_get_max_bitrate (<em class="parameter"><code>const <a class="link" href="gst-plugins-bad-libs-gstplayer-mediainfo.html#GstPlayerAudioInfo"><span class="type">GstPlayerAudioInfo</span></a> *info</code></em>);</pre>
+<div class="refsect3">
+<a name="id-1.2.10.3.12.18.4"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>info</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gst-plugins-bad-libs-gstplayer-mediainfo.html#GstPlayerAudioInfo"><span class="type">GstPlayerAudioInfo</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="id-1.2.10.3.12.18.5"></a><h4>Returns</h4>
+<p> the audio maximum bitrate in <a class="link" href="gst-plugins-bad-libs-gstplayer-mediainfo.html#GstPlayerAudioInfo"><span class="type">GstPlayerAudioInfo</span></a>.</p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-player-audio-info-get-sample-rate"></a><h3>gst_player_audio_info_get_sample_rate ()</h3>
+<pre class="programlisting"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gint"><span class="returnvalue">gint</span></a>
+gst_player_audio_info_get_sample_rate (<em class="parameter"><code>const <a class="link" href="gst-plugins-bad-libs-gstplayer-mediainfo.html#GstPlayerAudioInfo"><span class="type">GstPlayerAudioInfo</span></a> *info</code></em>);</pre>
+<div class="refsect3">
+<a name="id-1.2.10.3.12.19.4"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>info</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gst-plugins-bad-libs-gstplayer-mediainfo.html#GstPlayerAudioInfo"><span class="type">GstPlayerAudioInfo</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="id-1.2.10.3.12.19.5"></a><h4>Returns</h4>
+<p> the audio sample rate in <a class="link" href="gst-plugins-bad-libs-gstplayer-mediainfo.html#GstPlayerAudioInfo"><span class="type">GstPlayerAudioInfo</span></a>.</p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-player-video-info-get-bitrate"></a><h3>gst_player_video_info_get_bitrate ()</h3>
+<pre class="programlisting"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gint"><span class="returnvalue">gint</span></a>
+gst_player_video_info_get_bitrate (<em class="parameter"><code>const <a class="link" href="gst-plugins-bad-libs-gstplayer-mediainfo.html#GstPlayerVideoInfo"><span class="type">GstPlayerVideoInfo</span></a> *info</code></em>);</pre>
+<div class="refsect3">
+<a name="id-1.2.10.3.12.20.4"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>info</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gst-plugins-bad-libs-gstplayer-mediainfo.html#GstPlayerVideoInfo"><span class="type">GstPlayerVideoInfo</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="id-1.2.10.3.12.20.5"></a><h4>Returns</h4>
+<p> the current bitrate of video in <a class="link" href="gst-plugins-bad-libs-gstplayer-mediainfo.html#GstPlayerVideoInfo"><span class="type">GstPlayerVideoInfo</span></a>.</p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-player-video-info-get-height"></a><h3>gst_player_video_info_get_height ()</h3>
+<pre class="programlisting"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gint"><span class="returnvalue">gint</span></a>
+gst_player_video_info_get_height (<em class="parameter"><code>const <a class="link" href="gst-plugins-bad-libs-gstplayer-mediainfo.html#GstPlayerVideoInfo"><span class="type">GstPlayerVideoInfo</span></a> *info</code></em>);</pre>
+<div class="refsect3">
+<a name="id-1.2.10.3.12.21.4"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>info</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gst-plugins-bad-libs-gstplayer-mediainfo.html#GstPlayerVideoInfo"><span class="type">GstPlayerVideoInfo</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="id-1.2.10.3.12.21.5"></a><h4>Returns</h4>
+<p> the height of video in <a class="link" href="gst-plugins-bad-libs-gstplayer-mediainfo.html#GstPlayerVideoInfo"><span class="type">GstPlayerVideoInfo</span></a>.</p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-player-video-info-get-width"></a><h3>gst_player_video_info_get_width ()</h3>
+<pre class="programlisting"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gint"><span class="returnvalue">gint</span></a>
+gst_player_video_info_get_width (<em class="parameter"><code>const <a class="link" href="gst-plugins-bad-libs-gstplayer-mediainfo.html#GstPlayerVideoInfo"><span class="type">GstPlayerVideoInfo</span></a> *info</code></em>);</pre>
+<div class="refsect3">
+<a name="id-1.2.10.3.12.22.4"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>info</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gst-plugins-bad-libs-gstplayer-mediainfo.html#GstPlayerVideoInfo"><span class="type">GstPlayerVideoInfo</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="id-1.2.10.3.12.22.5"></a><h4>Returns</h4>
+<p> the width of video in <a class="link" href="gst-plugins-bad-libs-gstplayer-mediainfo.html#GstPlayerVideoInfo"><span class="type">GstPlayerVideoInfo</span></a>.</p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-player-video-info-get-framerate"></a><h3>gst_player_video_info_get_framerate ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+gst_player_video_info_get_framerate (<em class="parameter"><code>const <a class="link" href="gst-plugins-bad-libs-gstplayer-mediainfo.html#GstPlayerVideoInfo"><span class="type">GstPlayerVideoInfo</span></a> *info</code></em>,
+                                     <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a> *fps_n</code></em>,
+                                     <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a> *fps_d</code></em>);</pre>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-player-video-info-get-max-bitrate"></a><h3>gst_player_video_info_get_max_bitrate ()</h3>
+<pre class="programlisting"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gint"><span class="returnvalue">gint</span></a>
+gst_player_video_info_get_max_bitrate (<em class="parameter"><code>const <a class="link" href="gst-plugins-bad-libs-gstplayer-mediainfo.html#GstPlayerVideoInfo"><span class="type">GstPlayerVideoInfo</span></a> *info</code></em>);</pre>
+<div class="refsect3">
+<a name="id-1.2.10.3.12.24.4"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>info</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gst-plugins-bad-libs-gstplayer-mediainfo.html#GstPlayerVideoInfo"><span class="type">GstPlayerVideoInfo</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="id-1.2.10.3.12.24.5"></a><h4>Returns</h4>
+<p> the maximum bitrate of video in <a class="link" href="gst-plugins-bad-libs-gstplayer-mediainfo.html#GstPlayerVideoInfo"><span class="type">GstPlayerVideoInfo</span></a>.</p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-player-video-info-get-pixel-aspect-ratio"></a><h3>gst_player_video_info_get_pixel_aspect_ratio ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+gst_player_video_info_get_pixel_aspect_ratio
+                               (<em class="parameter"><code>const <a class="link" href="gst-plugins-bad-libs-gstplayer-mediainfo.html#GstPlayerVideoInfo"><span class="type">GstPlayerVideoInfo</span></a> *info</code></em>,
+                                <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> *par_n</code></em>,
+                                <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> *par_d</code></em>);</pre>
+<p>Returns the pixel aspect ratio in <em class="parameter"><code>par_n</code></em>
+ and <em class="parameter"><code>par_d</code></em>
+</p>
+<div class="refsect3">
+<a name="id-1.2.10.3.12.25.5"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>info</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gst-plugins-bad-libs-gstplayer-mediainfo.html#GstPlayerVideoInfo"><span class="type">GstPlayerVideoInfo</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>par_n</p></td>
+<td class="parameter_description"><p> numerator. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>par_d</p></td>
+<td class="parameter_description"><p> denominator. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>]</span></td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-player-subtitle-info-get-language"></a><h3>gst_player_subtitle_info_get_language ()</h3>
+<pre class="programlisting">const <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> *
+gst_player_subtitle_info_get_language (<em class="parameter"><code>const <a class="link" href="gst-plugins-bad-libs-gstplayer-mediainfo.html#GstPlayerSubtitleInfo"><span class="type">GstPlayerSubtitleInfo</span></a> *info</code></em>);</pre>
+<div class="refsect3">
+<a name="id-1.2.10.3.12.26.4"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>info</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gst-plugins-bad-libs-gstplayer-mediainfo.html#GstPlayerSubtitleInfo"><span class="type">GstPlayerSubtitleInfo</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="id-1.2.10.3.12.26.5"></a><h4>Returns</h4>
+<p> the language of the stream, or NULL if unknown.</p>
+</div>
+</div>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-libs-gstplayer-mediainfo.other_details"></a><h2>Types and Values</h2>
+<div class="refsect2">
+<a name="GstPlayerMediaInfo-struct"></a><h3>GstPlayerMediaInfo</h3>
+<pre class="programlisting">typedef struct _GstPlayerMediaInfo GstPlayerMediaInfo;</pre>
+<p>Structure containing the media information of a URI.</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstPlayerStreamInfo-struct"></a><h3>GstPlayerStreamInfo</h3>
+<pre class="programlisting">typedef struct _GstPlayerStreamInfo GstPlayerStreamInfo;</pre>
+<p>Base structure for information concering a media stream. Depending on
+the stream type, one can find more media-specific information in
+<a class="link" href="gst-plugins-bad-libs-gstplayer-mediainfo.html#GstPlayerVideoInfo"><span class="type">GstPlayerVideoInfo</span></a>, <a class="link" href="gst-plugins-bad-libs-gstplayer-mediainfo.html#GstPlayerAudioInfo"><span class="type">GstPlayerAudioInfo</span></a>, <a class="link" href="gst-plugins-bad-libs-gstplayer-mediainfo.html#GstPlayerSubtitleInfo"><span class="type">GstPlayerSubtitleInfo</span></a>.</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstPlayerAudioInfo-struct"></a><h3>GstPlayerAudioInfo</h3>
+<pre class="programlisting">typedef struct _GstPlayerAudioInfo GstPlayerAudioInfo;</pre>
+<p><a class="link" href="gst-plugins-bad-libs-gstplayer-mediainfo.html#GstPlayerStreamInfo"><span class="type">GstPlayerStreamInfo</span></a> specific to audio streams.</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstPlayerVideoInfo-struct"></a><h3>GstPlayerVideoInfo</h3>
+<pre class="programlisting">typedef struct _GstPlayerVideoInfo GstPlayerVideoInfo;</pre>
+<p><a class="link" href="gst-plugins-bad-libs-gstplayer-mediainfo.html#GstPlayerStreamInfo"><span class="type">GstPlayerStreamInfo</span></a> specific to video streams.</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstPlayerSubtitleInfo-struct"></a><h3>GstPlayerSubtitleInfo</h3>
+<pre class="programlisting">typedef struct _GstPlayerSubtitleInfo GstPlayerSubtitleInfo;</pre>
+<p><a class="link" href="gst-plugins-bad-libs-gstplayer-mediainfo.html#GstPlayerStreamInfo"><span class="type">GstPlayerStreamInfo</span></a> specific to subtitle streams.</p>
+</div>
+</div>
+</div>
+<div class="footer">
+<hr>Generated by GTK-Doc V1.24</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/libs/html/gst-plugins-bad-libs-gstplayer-videooverlayvideorenderer.html b/docs/libs/html/gst-plugins-bad-libs-gstplayer-videooverlayvideorenderer.html
new file mode 100644
index 0000000..e78c400
--- /dev/null
+++ b/docs/libs/html/gst-plugins-bad-libs-gstplayer-videooverlayvideorenderer.html
@@ -0,0 +1,325 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>gstplayer-videooverlayvideorenderer: GStreamer Bad Plugins 1.0 Library Reference Manual</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
+<link rel="home" href="index.html" title="GStreamer Bad Plugins 1.0 Library Reference Manual">
+<link rel="up" href="player.html" title="Player Library">
+<link rel="prev" href="gst-plugins-bad-libs-gstplayer-gmaincontextsignaldispatcher.html" title="gstplayer-gmaincontextsignaldispatcher">
+<link rel="next" href="gst-plugins-bad-libs-gstplayer-visualization.html" title="gstplayer-visualization">
+<meta name="generator" content="GTK-Doc V1.24 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="5"><tr valign="middle">
+<td width="100%" align="left" class="shortcuts">
+<a href="#" class="shortcut">Top</a><span id="nav_description">  <span class="dim">|</span> 
+                  <a href="#gst-plugins-bad-libs-gstplayer-videooverlayvideorenderer.description" class="shortcut">Description</a></span>
+</td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
+<td><a accesskey="u" href="player.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
+<td><a accesskey="p" href="gst-plugins-bad-libs-gstplayer-gmaincontextsignaldispatcher.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
+<td><a accesskey="n" href="gst-plugins-bad-libs-gstplayer-visualization.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
+</tr></table>
+<div class="refentry">
+<a name="gst-plugins-bad-libs-gstplayer-videooverlayvideorenderer"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="gst-plugins-bad-libs-gstplayer-videooverlayvideorenderer.top_of_page"></a>gstplayer-videooverlayvideorenderer</span></h2>
+<p>gstplayer-videooverlayvideorenderer — Player Video Overlay Video Renderer</p>
+</td>
+<td class="gallery_image" valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsect1">
+<a name="gst-plugins-bad-libs-gstplayer-videooverlayvideorenderer.functions"></a><h2>Functions</h2>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="functions_return">
+<col class="functions_name">
+</colgroup>
+<tbody>
+<tr>
+<td class="function_type">
+<a class="link" href="gst-plugins-bad-libs-gstplayer.html#GstPlayerVideoRenderer"><span class="returnvalue">GstPlayerVideoRenderer</span></a> *
+</td>
+<td class="function_name">
+<a class="link" href="gst-plugins-bad-libs-gstplayer-videooverlayvideorenderer.html#gst-player-video-overlay-video-renderer-new" title="gst_player_video_overlay_video_renderer_new ()">gst_player_video_overlay_video_renderer_new</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gpointer"><span class="returnvalue">gpointer</span></a>
+</td>
+<td class="function_name">
+<a class="link" href="gst-plugins-bad-libs-gstplayer-videooverlayvideorenderer.html#gst-player-video-overlay-video-renderer-get-window-handle" title="gst_player_video_overlay_video_renderer_get_window_handle ()">gst_player_video_overlay_video_renderer_get_window_handle</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
+<a class="link" href="gst-plugins-bad-libs-gstplayer-videooverlayvideorenderer.html#gst-player-video-overlay-video-renderer-set-window-handle" title="gst_player_video_overlay_video_renderer_set_window_handle ()">gst_player_video_overlay_video_renderer_set_window_handle</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
+<a class="link" href="gst-plugins-bad-libs-gstplayer-videooverlayvideorenderer.html#gst-player-video-overlay-video-renderer-expose" title="gst_player_video_overlay_video_renderer_expose ()">gst_player_video_overlay_video_renderer_expose</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
+<a class="link" href="gst-plugins-bad-libs-gstplayer-videooverlayvideorenderer.html#gst-player-video-overlay-video-renderer-get-render-rectangle" title="gst_player_video_overlay_video_renderer_get_render_rectangle ()">gst_player_video_overlay_video_renderer_get_render_rectangle</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
+<a class="link" href="gst-plugins-bad-libs-gstplayer-videooverlayvideorenderer.html#gst-player-video-overlay-video-renderer-set-render-rectangle" title="gst_player_video_overlay_video_renderer_set_render_rectangle ()">gst_player_video_overlay_video_renderer_set_render_rectangle</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-libs-gstplayer-videooverlayvideorenderer.description"></a><h2>Description</h2>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-libs-gstplayer-videooverlayvideorenderer.functions_details"></a><h2>Functions</h2>
+<div class="refsect2">
+<a name="gst-player-video-overlay-video-renderer-new"></a><h3>gst_player_video_overlay_video_renderer_new ()</h3>
+<pre class="programlisting"><a class="link" href="gst-plugins-bad-libs-gstplayer.html#GstPlayerVideoRenderer"><span class="returnvalue">GstPlayerVideoRenderer</span></a> *
+gst_player_video_overlay_video_renderer_new
+                               (<em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> window_handle</code></em>);</pre>
+<div class="refsect3">
+<a name="id-1.2.10.5.5.2.4"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>window_handle</p></td>
+<td class="parameter_description"><p> Window handle to use or <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="NULL is OK, both for passing and for returning."><span class="acronym">allow-none</span></acronym>]</span></td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="id-1.2.10.5.5.2.5"></a><h4>Returns</h4>
+<p>. </p>
+<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-player-video-overlay-video-renderer-get-window-handle"></a><h3>gst_player_video_overlay_video_renderer_get_window_handle ()</h3>
+<pre class="programlisting"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gpointer"><span class="returnvalue">gpointer</span></a>
+gst_player_video_overlay_video_renderer_get_window_handle
+                               (<em class="parameter"><code><span class="type">GstPlayerVideoOverlayVideoRenderer</span> *self</code></em>);</pre>
+<div class="refsect3">
+<a name="id-1.2.10.5.5.3.4"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>self</p></td>
+<td class="parameter_description"><p><a class="link" href="gst-plugins-bad-libs-gstplayer.html#GstPlayerVideoRenderer"><span class="type">GstPlayerVideoRenderer</span></a> instance</p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="id-1.2.10.5.5.3.5"></a><h4>Returns</h4>
+<p> The currently set, platform specific window
+handle. </p>
+<p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-player-video-overlay-video-renderer-set-window-handle"></a><h3>gst_player_video_overlay_video_renderer_set_window_handle ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+gst_player_video_overlay_video_renderer_set_window_handle
+                               (<em class="parameter"><code><span class="type">GstPlayerVideoOverlayVideoRenderer</span> *self</code></em>,
+                                <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> window_handle</code></em>);</pre>
+<p>Sets the platform specific window handle into which the video
+should be rendered</p>
+<div class="refsect3">
+<a name="id-1.2.10.5.5.4.5"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>self</p></td>
+<td class="parameter_description"><p><a class="link" href="gst-plugins-bad-libs-gstplayer.html#GstPlayerVideoRenderer"><span class="type">GstPlayerVideoRenderer</span></a> instance</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>window_handle</p></td>
+<td class="parameter_description"><p>handle referencing to the platform specific window</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-player-video-overlay-video-renderer-expose"></a><h3>gst_player_video_overlay_video_renderer_expose ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+gst_player_video_overlay_video_renderer_expose
+                               (<em class="parameter"><code><span class="type">GstPlayerVideoOverlayVideoRenderer</span> *self</code></em>);</pre>
+<p>Tell an overlay that it has been exposed. This will redraw the current frame
+in the drawable even if the pipeline is PAUSED.</p>
+<div class="refsect3">
+<a name="id-1.2.10.5.5.5.5"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>self</p></td>
+<td class="parameter_description"><p>a <span class="type">GstPlayerVideoOverlayVideoRenderer</span> instance.</p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-player-video-overlay-video-renderer-get-render-rectangle"></a><h3>gst_player_video_overlay_video_renderer_get_render_rectangle ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+gst_player_video_overlay_video_renderer_get_render_rectangle
+                               (<em class="parameter"><code><span class="type">GstPlayerVideoOverlayVideoRenderer</span> *self</code></em>,
+                                <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a> *x</code></em>,
+                                <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a> *y</code></em>,
+                                <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a> *width</code></em>,
+                                <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a> *height</code></em>);</pre>
+<p>Return the currently configured render rectangle. See <a class="link" href="gst-plugins-bad-libs-gstplayer-videooverlayvideorenderer.html#gst-player-video-overlay-video-renderer-set-render-rectangle" title="gst_player_video_overlay_video_renderer_set_render_rectangle ()"><code class="function">gst_player_video_overlay_video_renderer_set_render_rectangle()</code></a>
+for details.</p>
+<div class="refsect3">
+<a name="id-1.2.10.5.5.6.5"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>self</p></td>
+<td class="parameter_description"><p>a <span class="type">GstPlayerVideoOverlayVideoRenderer</span> instance</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>x</p></td>
+<td class="parameter_description"><p> the horizontal offset of the render area inside the window. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>][<acronym title="NULL is OK, both for passing and for returning."><span class="acronym">allow-none</span></acronym>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>y</p></td>
+<td class="parameter_description"><p> the vertical offset of the render area inside the window. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>][<acronym title="NULL is OK, both for passing and for returning."><span class="acronym">allow-none</span></acronym>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>width</p></td>
+<td class="parameter_description"><p> the width of the render area inside the window. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>][<acronym title="NULL is OK, both for passing and for returning."><span class="acronym">allow-none</span></acronym>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>height</p></td>
+<td class="parameter_description"><p> the height of the render area inside the window. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>][<acronym title="NULL is OK, both for passing and for returning."><span class="acronym">allow-none</span></acronym>]</span></td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-player-video-overlay-video-renderer-set-render-rectangle"></a><h3>gst_player_video_overlay_video_renderer_set_render_rectangle ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+gst_player_video_overlay_video_renderer_set_render_rectangle
+                               (<em class="parameter"><code><span class="type">GstPlayerVideoOverlayVideoRenderer</span> *self</code></em>,
+                                <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a> x</code></em>,
+                                <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a> y</code></em>,
+                                <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a> width</code></em>,
+                                <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a> height</code></em>);</pre>
+<p>Configure a subregion as a video target within the window set by
+<a class="link" href="gst-plugins-bad-libs-gstplayer-videooverlayvideorenderer.html#gst-player-video-overlay-video-renderer-set-window-handle" title="gst_player_video_overlay_video_renderer_set_window_handle ()"><code class="function">gst_player_video_overlay_video_renderer_set_window_handle()</code></a>. If this is not
+used or not supported the video will fill the area of the window set as the
+overlay to 100%. By specifying the rectangle, the video can be overlayed to
+a specific region of that window only. After setting the new rectangle one
+should call <a class="link" href="gst-plugins-bad-libs-gstplayer-videooverlayvideorenderer.html#gst-player-video-overlay-video-renderer-expose" title="gst_player_video_overlay_video_renderer_expose ()"><code class="function">gst_player_video_overlay_video_renderer_expose()</code></a> to force a
+redraw. To unset the region pass -1 for the <em class="parameter"><code>width</code></em>
+ and <em class="parameter"><code>height</code></em>
+ parameters.</p>
+<p>This method is needed for non fullscreen video overlay in UI toolkits that
+do not support subwindows.</p>
+<div class="refsect3">
+<a name="id-1.2.10.5.5.7.6"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>self</p></td>
+<td class="parameter_description"><p>a <span class="type">GstPlayerVideoOverlayVideoRenderer</span> instance</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>x</p></td>
+<td class="parameter_description"><p>the horizontal offset of the render area inside the window</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>y</p></td>
+<td class="parameter_description"><p>the vertical offset of the render area inside the window</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>width</p></td>
+<td class="parameter_description"><p>the width of the render area inside the window</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>height</p></td>
+<td class="parameter_description"><p>the height of the render area inside the window</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-libs-gstplayer-videooverlayvideorenderer.other_details"></a><h2>Types and Values</h2>
+</div>
+</div>
+<div class="footer">
+<hr>Generated by GTK-Doc V1.24</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/libs/html/gst-plugins-bad-libs-gstplayer-visualization.html b/docs/libs/html/gst-plugins-bad-libs-gstplayer-visualization.html
new file mode 100644
index 0000000..bf839ee
--- /dev/null
+++ b/docs/libs/html/gst-plugins-bad-libs-gstplayer-visualization.html
@@ -0,0 +1,226 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>gstplayer-visualization: GStreamer Bad Plugins 1.0 Library Reference Manual</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
+<link rel="home" href="index.html" title="GStreamer Bad Plugins 1.0 Library Reference Manual">
+<link rel="up" href="player.html" title="Player Library">
+<link rel="prev" href="gst-plugins-bad-libs-gstplayer-videooverlayvideorenderer.html" title="gstplayer-videooverlayvideorenderer">
+<link rel="next" href="ch08.html" title="Interfaces">
+<meta name="generator" content="GTK-Doc V1.24 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="5"><tr valign="middle">
+<td width="100%" align="left" class="shortcuts">
+<a href="#" class="shortcut">Top</a><span id="nav_description">  <span class="dim">|</span> 
+                  <a href="#gst-plugins-bad-libs-gstplayer-visualization.description" class="shortcut">Description</a></span><span id="nav_hierarchy">  <span class="dim">|</span> 
+                  <a href="#gst-plugins-bad-libs-gstplayer-visualization.object-hierarchy" class="shortcut">Object Hierarchy</a></span>
+</td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
+<td><a accesskey="u" href="player.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
+<td><a accesskey="p" href="gst-plugins-bad-libs-gstplayer-videooverlayvideorenderer.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
+<td><a accesskey="n" href="ch08.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
+</tr></table>
+<div class="refentry">
+<a name="gst-plugins-bad-libs-gstplayer-visualization"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="gst-plugins-bad-libs-gstplayer-visualization.top_of_page"></a>gstplayer-visualization</span></h2>
+<p>gstplayer-visualization — Player Visualization</p>
+</td>
+<td class="gallery_image" valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsect1">
+<a name="gst-plugins-bad-libs-gstplayer-visualization.functions"></a><h2>Functions</h2>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="functions_return">
+<col class="functions_name">
+</colgroup>
+<tbody>
+<tr>
+<td class="function_type">
+<a class="link" href="gst-plugins-bad-libs-gstplayer-visualization.html#GstPlayerVisualization"><span class="returnvalue">GstPlayerVisualization</span></a> **
+</td>
+<td class="function_name">
+<a class="link" href="gst-plugins-bad-libs-gstplayer-visualization.html#gst-player-visualizations-get" title="gst_player_visualizations_get ()">gst_player_visualizations_get</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
+<a class="link" href="gst-plugins-bad-libs-gstplayer-visualization.html#gst-player-visualizations-free" title="gst_player_visualizations_free ()">gst_player_visualizations_free</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a class="link" href="gst-plugins-bad-libs-gstplayer-visualization.html#GstPlayerVisualization"><span class="returnvalue">GstPlayerVisualization</span></a> *
+</td>
+<td class="function_name">
+<a class="link" href="gst-plugins-bad-libs-gstplayer-visualization.html#gst-player-visualization-copy" title="gst_player_visualization_copy ()">gst_player_visualization_copy</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
+<a class="link" href="gst-plugins-bad-libs-gstplayer-visualization.html#gst-player-visualization-free" title="gst_player_visualization_free ()">gst_player_visualization_free</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<a name="GstPlayerVisualization"></a><div class="refsect1">
+<a name="gst-plugins-bad-libs-gstplayer-visualization.other"></a><h2>Types and Values</h2>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="name">
+<col class="description">
+</colgroup>
+<tbody><tr>
+<td class="datatype_keyword">struct</td>
+<td class="function_name"><a class="link" href="gst-plugins-bad-libs-gstplayer-visualization.html#GstPlayerVisualization-struct" title="struct GstPlayerVisualization">GstPlayerVisualization</a></td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-libs-gstplayer-visualization.object-hierarchy"></a><h2>Object Hierarchy</h2>
+<pre class="screen">    <a href="https://developer.gnome.org/gobject/unstable/gobject-Boxed-Types.html">GBoxed</a>
+    <span class="lineart">╰──</span> GstPlayerVisualization
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-libs-gstplayer-visualization.description"></a><h2>Description</h2>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-libs-gstplayer-visualization.functions_details"></a><h2>Functions</h2>
+<div class="refsect2">
+<a name="gst-player-visualizations-get"></a><h3>gst_player_visualizations_get ()</h3>
+<pre class="programlisting"><a class="link" href="gst-plugins-bad-libs-gstplayer-visualization.html#GstPlayerVisualization"><span class="returnvalue">GstPlayerVisualization</span></a> **
+gst_player_visualizations_get (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
+<div class="refsect3">
+<a name="id-1.2.10.6.8.2.4"></a><h4>Returns</h4>
+<p> a <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> terminated array containing all available
+visualizations. Use <a class="link" href="gst-plugins-bad-libs-gstplayer-visualization.html#gst-player-visualizations-free" title="gst_player_visualizations_free ()"><code class="function">gst_player_visualizations_free()</code></a> after
+usage. </p>
+<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>][<acronym title="Parameter points to an array of items."><span class="acronym">array</span></acronym> zero-terminated=1][<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> GstPlayerVisualization]</span></p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-player-visualizations-free"></a><h3>gst_player_visualizations_free ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+gst_player_visualizations_free (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-gstplayer-visualization.html#GstPlayerVisualization"><span class="type">GstPlayerVisualization</span></a> **viss</code></em>);</pre>
+<p>Frees a <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> terminated array of <a class="link" href="gst-plugins-bad-libs-gstplayer-visualization.html#GstPlayerVisualization"><span class="type">GstPlayerVisualization</span></a>.</p>
+<div class="refsect3">
+<a name="id-1.2.10.6.8.3.5"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>viss</p></td>
+<td class="parameter_description"><p>a <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> terminated array of <a class="link" href="gst-plugins-bad-libs-gstplayer-visualization.html#GstPlayerVisualization"><span class="type">GstPlayerVisualization</span></a> to free</p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-player-visualization-copy"></a><h3>gst_player_visualization_copy ()</h3>
+<pre class="programlisting"><a class="link" href="gst-plugins-bad-libs-gstplayer-visualization.html#GstPlayerVisualization"><span class="returnvalue">GstPlayerVisualization</span></a> *
+gst_player_visualization_copy (<em class="parameter"><code>const <a class="link" href="gst-plugins-bad-libs-gstplayer-visualization.html#GstPlayerVisualization"><span class="type">GstPlayerVisualization</span></a> *vis</code></em>);</pre>
+<p>Makes a copy of the <a class="link" href="gst-plugins-bad-libs-gstplayer-visualization.html#GstPlayerVisualization"><span class="type">GstPlayerVisualization</span></a>. The result must be
+freed using <a class="link" href="gst-plugins-bad-libs-gstplayer-visualization.html#gst-player-visualization-free" title="gst_player_visualization_free ()"><code class="function">gst_player_visualization_free()</code></a>.</p>
+<div class="refsect3">
+<a name="id-1.2.10.6.8.4.5"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>vis</p></td>
+<td class="parameter_description"><p><a class="link" href="gst-plugins-bad-libs-gstplayer-visualization.html#GstPlayerVisualization"><span class="type">GstPlayerVisualization</span></a> instance</p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="id-1.2.10.6.8.4.6"></a><h4>Returns</h4>
+<p> an allocated copy of <em class="parameter"><code>vis</code></em>
+. </p>
+<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-player-visualization-free"></a><h3>gst_player_visualization_free ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+gst_player_visualization_free (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-gstplayer-visualization.html#GstPlayerVisualization"><span class="type">GstPlayerVisualization</span></a> *vis</code></em>);</pre>
+<p>Frees a <a class="link" href="gst-plugins-bad-libs-gstplayer-visualization.html#GstPlayerVisualization"><span class="type">GstPlayerVisualization</span></a>.</p>
+<div class="refsect3">
+<a name="id-1.2.10.6.8.5.5"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>vis</p></td>
+<td class="parameter_description"><p><a class="link" href="gst-plugins-bad-libs-gstplayer-visualization.html#GstPlayerVisualization"><span class="type">GstPlayerVisualization</span></a> instance</p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+</div>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-libs-gstplayer-visualization.other_details"></a><h2>Types and Values</h2>
+<div class="refsect2">
+<a name="GstPlayerVisualization-struct"></a><h3>struct GstPlayerVisualization</h3>
+<pre class="programlisting">struct GstPlayerVisualization {
+  gchar *name;
+  gchar *description;
+};
+</pre>
+<p>A <a class="link" href="gst-plugins-bad-libs-gstplayer-visualization.html#GstPlayerVisualization"><span class="type">GstPlayerVisualization</span></a> descriptor.</p>
+<div class="refsect3">
+<a name="id-1.2.10.6.9.2.5"></a><h4>Members</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="300px" class="struct_members_name">
+<col class="struct_members_description">
+<col width="200px" class="struct_members_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="struct_member_name"><p><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *<em class="structfield"><code><a name="GstPlayerVisualization-struct.name"></a>name</code></em>;</p></td>
+<td class="struct_member_description"><p>name of the visualization.</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *<em class="structfield"><code><a name="GstPlayerVisualization-struct.description"></a>description</code></em>;</p></td>
+<td class="struct_member_description"><p>description of the visualization.</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+</div>
+</div>
+<div class="footer">
+<hr>Generated by GTK-Doc V1.24</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/libs/html/gst-plugins-bad-libs-gstplayer.html b/docs/libs/html/gst-plugins-bad-libs-gstplayer.html
new file mode 100644
index 0000000..8d116a1
--- /dev/null
+++ b/docs/libs/html/gst-plugins-bad-libs-gstplayer.html
@@ -0,0 +1,2252 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>gstplayer: GStreamer Bad Plugins 1.0 Library Reference Manual</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
+<link rel="home" href="index.html" title="GStreamer Bad Plugins 1.0 Library Reference Manual">
+<link rel="up" href="player.html" title="Player Library">
+<link rel="prev" href="player.html" title="Player Library">
+<link rel="next" href="gst-plugins-bad-libs-gstplayer-mediainfo.html" title="gstplayer-mediainfo">
+<meta name="generator" content="GTK-Doc V1.24 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="5"><tr valign="middle">
+<td width="100%" align="left" class="shortcuts">
+<a href="#" class="shortcut">Top</a><span id="nav_description">  <span class="dim">|</span> 
+                  <a href="#gst-plugins-bad-libs-gstplayer.description" class="shortcut">Description</a></span><span id="nav_hierarchy">  <span class="dim">|</span> 
+                  <a href="#gst-plugins-bad-libs-gstplayer.object-hierarchy" class="shortcut">Object Hierarchy</a></span><span id="nav_prerequisites">  <span class="dim">|</span> 
+                  <a href="#gst-plugins-bad-libs-gstplayer.prerequisites" class="shortcut">Prerequisites</a></span><span id="nav_implementations">  <span class="dim">|</span> 
+                  <a href="#gst-plugins-bad-libs-gstplayer.implementations" class="shortcut">Known Implementations</a></span><span id="nav_properties">  <span class="dim">|</span> 
+                  <a href="#gst-plugins-bad-libs-gstplayer.properties" class="shortcut">Properties</a></span><span id="nav_signals">  <span class="dim">|</span> 
+                  <a href="#gst-plugins-bad-libs-gstplayer.signals" class="shortcut">Signals</a></span>
+</td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
+<td><a accesskey="u" href="player.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
+<td><a accesskey="p" href="player.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
+<td><a accesskey="n" href="gst-plugins-bad-libs-gstplayer-mediainfo.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
+</tr></table>
+<div class="refentry">
+<a name="gst-plugins-bad-libs-gstplayer"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="gst-plugins-bad-libs-gstplayer.top_of_page"></a>gstplayer</span></h2>
+<p>gstplayer — Player</p>
+</td>
+<td class="gallery_image" valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsect1">
+<a name="gst-plugins-bad-libs-gstplayer.functions"></a><h2>Functions</h2>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="functions_return">
+<col class="functions_name">
+</colgroup>
+<tbody>
+<tr>
+<td class="function_type">
+<a class="link" href="gst-plugins-bad-libs-gstplayer.html#GstPlayer"><span class="returnvalue">GstPlayer</span></a> *
+</td>
+<td class="function_name">
+<a class="link" href="gst-plugins-bad-libs-gstplayer.html#gst-player-new" title="gst_player_new ()">gst_player_new</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
+<a class="link" href="gst-plugins-bad-libs-gstplayer.html#gst-player-play" title="gst_player_play ()">gst_player_play</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
+<a class="link" href="gst-plugins-bad-libs-gstplayer.html#gst-player-pause" title="gst_player_pause ()">gst_player_pause</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
+<a class="link" href="gst-plugins-bad-libs-gstplayer.html#gst-player-stop" title="gst_player_stop ()">gst_player_stop</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
+<a class="link" href="gst-plugins-bad-libs-gstplayer.html#gst-player-seek" title="gst_player_seek ()">gst_player_seek</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
+<a class="link" href="gst-plugins-bad-libs-gstplayer.html#gst-player-set-uri" title="gst_player_set_uri ()">gst_player_set_uri</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> *
+</td>
+<td class="function_name">
+<a class="link" href="gst-plugins-bad-libs-gstplayer.html#gst-player-get-uri" title="gst_player_get_uri ()">gst_player_get_uri</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstClock.html#GstClockTime"><span class="returnvalue">GstClockTime</span></a>
+</td>
+<td class="function_name">
+<a class="link" href="gst-plugins-bad-libs-gstplayer.html#gst-player-get-duration" title="gst_player_get_duration ()">gst_player_get_duration</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstClock.html#GstClockTime"><span class="returnvalue">GstClockTime</span></a>
+</td>
+<td class="function_name">
+<a class="link" href="gst-plugins-bad-libs-gstplayer.html#gst-player-get-position" title="gst_player_get_position ()">gst_player_get_position</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
+<a class="link" href="gst-plugins-bad-libs-gstplayer.html#gst-player-set-volume" title="gst_player_set_volume ()">gst_player_set_volume</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
+<a class="link" href="gst-plugins-bad-libs-gstplayer.html#gst-player-set-mute" title="gst_player_set_mute ()">gst_player_set_mute</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gdouble"><span class="returnvalue">gdouble</span></a>
+</td>
+<td class="function_name">
+<a class="link" href="gst-plugins-bad-libs-gstplayer.html#gst-player-get-volume" title="gst_player_get_volume ()">gst_player_get_volume</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
+</td>
+<td class="function_name">
+<a class="link" href="gst-plugins-bad-libs-gstplayer.html#gst-player-get-mute" title="gst_player_get_mute ()">gst_player_get_mute</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html"><span class="returnvalue">GstElement</span></a> *
+</td>
+<td class="function_name">
+<a class="link" href="gst-plugins-bad-libs-gstplayer.html#gst-player-get-pipeline" title="gst_player_get_pipeline ()">gst_player_get_pipeline</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
+<a class="link" href="gst-plugins-bad-libs-gstplayer.html#gst-player-set-position-update-interval" title="gst_player_set_position_update_interval ()">gst_player_set_position_update_interval</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#guint"><span class="returnvalue">guint</span></a>
+</td>
+<td class="function_name">
+<a class="link" href="gst-plugins-bad-libs-gstplayer.html#gst-player-get-position-update-interval" title="gst_player_get_position_update_interval ()">gst_player_get_position_update_interval</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">const <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> *
+</td>
+<td class="function_name">
+<a class="link" href="gst-plugins-bad-libs-gstplayer.html#gst-player-state-get-name" title="gst_player_state_get_name ()">gst_player_state_get_name</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="define_keyword">#define</td>
+<td class="function_name"><a class="link" href="gst-plugins-bad-libs-gstplayer.html#GST-PLAYER-ERROR:CAPS" title="GST_PLAYER_ERROR">GST_PLAYER_ERROR</a></td>
+</tr>
+<tr>
+<td class="function_type">const <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> *
+</td>
+<td class="function_name">
+<a class="link" href="gst-plugins-bad-libs-gstplayer.html#gst-player-error-get-name" title="gst_player_error_get_name ()">gst_player_error_get_name</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a class="link" href="gst-plugins-bad-libs-gstplayer-mediainfo.html#GstPlayerMediaInfo"><span class="returnvalue">GstPlayerMediaInfo</span></a> *
+</td>
+<td class="function_name">
+<a class="link" href="gst-plugins-bad-libs-gstplayer.html#gst-player-get-media-info" title="gst_player_get_media_info ()">gst_player_get_media_info</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a href="https://developer.gnome.org/glib/unstable/glib-Doubly-Linked-Lists.html#GList"><span class="returnvalue">GList</span></a> *
+</td>
+<td class="function_name">
+<a class="link" href="gst-plugins-bad-libs-gstplayer.html#gst-player-get-audio-streams" title="gst_player_get_audio_streams ()">gst_player_get_audio_streams</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a href="https://developer.gnome.org/glib/unstable/glib-Doubly-Linked-Lists.html#GList"><span class="returnvalue">GList</span></a> *
+</td>
+<td class="function_name">
+<a class="link" href="gst-plugins-bad-libs-gstplayer.html#gst-player-get-video-streams" title="gst_player_get_video_streams ()">gst_player_get_video_streams</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a href="https://developer.gnome.org/glib/unstable/glib-Doubly-Linked-Lists.html#GList"><span class="returnvalue">GList</span></a> *
+</td>
+<td class="function_name">
+<a class="link" href="gst-plugins-bad-libs-gstplayer.html#gst-player-get-subtitle-streams" title="gst_player_get_subtitle_streams ()">gst_player_get_subtitle_streams</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
+</td>
+<td class="function_name">
+<a class="link" href="gst-plugins-bad-libs-gstplayer.html#gst-player-set-audio-track" title="gst_player_set_audio_track ()">gst_player_set_audio_track</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
+</td>
+<td class="function_name">
+<a class="link" href="gst-plugins-bad-libs-gstplayer.html#gst-player-set-video-track" title="gst_player_set_video_track ()">gst_player_set_video_track</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
+</td>
+<td class="function_name">
+<a class="link" href="gst-plugins-bad-libs-gstplayer.html#gst-player-set-subtitle-track" title="gst_player_set_subtitle_track ()">gst_player_set_subtitle_track</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a class="link" href="gst-plugins-bad-libs-gstplayer-mediainfo.html#GstPlayerAudioInfo"><span class="returnvalue">GstPlayerAudioInfo</span></a> *
+</td>
+<td class="function_name">
+<a class="link" href="gst-plugins-bad-libs-gstplayer.html#gst-player-get-current-audio-track" title="gst_player_get_current_audio_track ()">gst_player_get_current_audio_track</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a class="link" href="gst-plugins-bad-libs-gstplayer-mediainfo.html#GstPlayerVideoInfo"><span class="returnvalue">GstPlayerVideoInfo</span></a> *
+</td>
+<td class="function_name">
+<a class="link" href="gst-plugins-bad-libs-gstplayer.html#gst-player-get-current-video-track" title="gst_player_get_current_video_track ()">gst_player_get_current_video_track</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a class="link" href="gst-plugins-bad-libs-gstplayer-mediainfo.html#GstPlayerSubtitleInfo"><span class="returnvalue">GstPlayerSubtitleInfo</span></a> *
+</td>
+<td class="function_name">
+<a class="link" href="gst-plugins-bad-libs-gstplayer.html#gst-player-get-current-subtitle-track" title="gst_player_get_current_subtitle_track ()">gst_player_get_current_subtitle_track</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
+<a class="link" href="gst-plugins-bad-libs-gstplayer.html#gst-player-set-audio-track-enabled" title="gst_player_set_audio_track_enabled ()">gst_player_set_audio_track_enabled</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
+<a class="link" href="gst-plugins-bad-libs-gstplayer.html#gst-player-set-video-track-enabled" title="gst_player_set_video_track_enabled ()">gst_player_set_video_track_enabled</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
+<a class="link" href="gst-plugins-bad-libs-gstplayer.html#gst-player-set-subtitle-track-enabled" title="gst_player_set_subtitle_track_enabled ()">gst_player_set_subtitle_track_enabled</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
+</td>
+<td class="function_name">
+<a class="link" href="gst-plugins-bad-libs-gstplayer.html#gst-player-set-subtitle-uri" title="gst_player_set_subtitle_uri ()">gst_player_set_subtitle_uri</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> *
+</td>
+<td class="function_name">
+<a class="link" href="gst-plugins-bad-libs-gstplayer.html#gst-player-get-subtitle-uri" title="gst_player_get_subtitle_uri ()">gst_player_get_subtitle_uri</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
+</td>
+<td class="function_name">
+<a class="link" href="gst-plugins-bad-libs-gstplayer.html#gst-player-set-visualization" title="gst_player_set_visualization ()">gst_player_set_visualization</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
+<a class="link" href="gst-plugins-bad-libs-gstplayer.html#gst-player-set-visualization-enabled" title="gst_player_set_visualization_enabled ()">gst_player_set_visualization_enabled</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> *
+</td>
+<td class="function_name">
+<a class="link" href="gst-plugins-bad-libs-gstplayer.html#gst-player-get-current-visualization" title="gst_player_get_current_visualization ()">gst_player_get_current_visualization</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">const <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> *
+</td>
+<td class="function_name">
+<a class="link" href="gst-plugins-bad-libs-gstplayer.html#gst-player-color-balance-type-get-name" title="gst_player_color_balance_type_get_name ()">gst_player_color_balance_type_get_name</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
+</td>
+<td class="function_name">
+<a class="link" href="gst-plugins-bad-libs-gstplayer.html#gst-player-has-color-balance" title="gst_player_has_color_balance ()">gst_player_has_color_balance</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
+<a class="link" href="gst-plugins-bad-libs-gstplayer.html#gst-player-set-color-balance" title="gst_player_set_color_balance ()">gst_player_set_color_balance</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gdouble"><span class="returnvalue">gdouble</span></a>
+</td>
+<td class="function_name">
+<a class="link" href="gst-plugins-bad-libs-gstplayer.html#gst-player-get-color-balance" title="gst_player_get_color_balance ()">gst_player_get_color_balance</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gdouble"><span class="returnvalue">gdouble</span></a>
+</td>
+<td class="function_name">
+<a class="link" href="gst-plugins-bad-libs-gstplayer.html#gst-player-get-rate" title="gst_player_get_rate ()">gst_player_get_rate</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
+<a class="link" href="gst-plugins-bad-libs-gstplayer.html#gst-player-set-rate" title="gst_player_set_rate ()">gst_player_set_rate</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-libs-gstplayer.properties"></a><h2>Properties</h2>
+<div class="informaltable"><table class="informaltable" border="0">
+<colgroup>
+<col width="150px" class="properties_type">
+<col width="300px" class="properties_name">
+<col width="200px" class="properties_flags">
+</colgroup>
+<tbody>
+<tr>
+<td class="property_type">
+<a class="link" href="gst-plugins-bad-libs-gstplayer-mediainfo.html#GstPlayerAudioInfo"><span class="type">GstPlayerAudioInfo</span></a> *</td>
+<td class="property_name"><a class="link" href="gst-plugins-bad-libs-gstplayer.html#GstPlayer--current-audio-track" title="The “current-audio-track” property">current-audio-track</a></td>
+<td class="property_flags">Read</td>
+</tr>
+<tr>
+<td class="property_type">
+<a class="link" href="gst-plugins-bad-libs-gstplayer-mediainfo.html#GstPlayerSubtitleInfo"><span class="type">GstPlayerSubtitleInfo</span></a> *</td>
+<td class="property_name"><a class="link" href="gst-plugins-bad-libs-gstplayer.html#GstPlayer--current-subtitle-track" title="The “current-subtitle-track” property">current-subtitle-track</a></td>
+<td class="property_flags">Read</td>
+</tr>
+<tr>
+<td class="property_type">
+<a class="link" href="gst-plugins-bad-libs-gstplayer-mediainfo.html#GstPlayerVideoInfo"><span class="type">GstPlayerVideoInfo</span></a> *</td>
+<td class="property_name"><a class="link" href="gst-plugins-bad-libs-gstplayer.html#GstPlayer--current-video-track" title="The “current-video-track” property">current-video-track</a></td>
+<td class="property_flags">Read</td>
+</tr>
+<tr>
+<td class="property_type"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#guint64"><span class="type">guint64</span></a></td>
+<td class="property_name"><a class="link" href="gst-plugins-bad-libs-gstplayer.html#GstPlayer--duration" title="The “duration” property">duration</a></td>
+<td class="property_flags">Read</td>
+</tr>
+<tr>
+<td class="property_type">
+<a class="link" href="gst-plugins-bad-libs-gstplayer-mediainfo.html#GstPlayerMediaInfo"><span class="type">GstPlayerMediaInfo</span></a> *</td>
+<td class="property_name"><a class="link" href="gst-plugins-bad-libs-gstplayer.html#GstPlayer--media-info" title="The “media-info” property">media-info</a></td>
+<td class="property_flags">Read</td>
+</tr>
+<tr>
+<td class="property_type"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a></td>
+<td class="property_name"><a class="link" href="gst-plugins-bad-libs-gstplayer.html#GstPlayer--mute" title="The “mute” property">mute</a></td>
+<td class="property_flags">Read / Write</td>
+</tr>
+<tr>
+<td class="property_type">
+<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html"><span class="type">GstElement</span></a> *</td>
+<td class="property_name"><a class="link" href="gst-plugins-bad-libs-gstplayer.html#GstPlayer--pipeline" title="The “pipeline” property">pipeline</a></td>
+<td class="property_flags">Read</td>
+</tr>
+<tr>
+<td class="property_type"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#guint64"><span class="type">guint64</span></a></td>
+<td class="property_name"><a class="link" href="gst-plugins-bad-libs-gstplayer.html#GstPlayer--position" title="The “position” property">position</a></td>
+<td class="property_flags">Read</td>
+</tr>
+<tr>
+<td class="property_type"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a></td>
+<td class="property_name"><a class="link" href="gst-plugins-bad-libs-gstplayer.html#GstPlayer--position-update-interval" title="The “position-update-interval” property">position-update-interval</a></td>
+<td class="property_flags">Read / Write</td>
+</tr>
+<tr>
+<td class="property_type"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gdouble"><span class="type">gdouble</span></a></td>
+<td class="property_name"><a class="link" href="gst-plugins-bad-libs-gstplayer.html#GstPlayer--rate" title="The “rate” property">rate</a></td>
+<td class="property_flags">Read / Write</td>
+</tr>
+<tr>
+<td class="property_type">
+<a class="link" href="gst-plugins-bad-libs-gstplayer.html#GstPlayerSignalDispatcher"><span class="type">GstPlayerSignalDispatcher</span></a> *</td>
+<td class="property_name"><a class="link" href="gst-plugins-bad-libs-gstplayer.html#GstPlayer--signal-dispatcher" title="The “signal-dispatcher” property">signal-dispatcher</a></td>
+<td class="property_flags">Write / Construct Only</td>
+</tr>
+<tr>
+<td class="property_type">
+<a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *</td>
+<td class="property_name"><a class="link" href="gst-plugins-bad-libs-gstplayer.html#GstPlayer--suburi" title="The “suburi” property">suburi</a></td>
+<td class="property_flags">Read / Write</td>
+</tr>
+<tr>
+<td class="property_type">
+<a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *</td>
+<td class="property_name"><a class="link" href="gst-plugins-bad-libs-gstplayer.html#GstPlayer--uri" title="The “uri” property">uri</a></td>
+<td class="property_flags">Read / Write</td>
+</tr>
+<tr>
+<td class="property_type">
+<a class="link" href="gst-plugins-bad-libs-gstplayer.html#GstPlayerVideoRenderer"><span class="type">GstPlayerVideoRenderer</span></a> *</td>
+<td class="property_name"><a class="link" href="gst-plugins-bad-libs-gstplayer.html#GstPlayer--video-renderer" title="The “video-renderer” property">video-renderer</a></td>
+<td class="property_flags">Write / Construct Only</td>
+</tr>
+<tr>
+<td class="property_type"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gdouble"><span class="type">gdouble</span></a></td>
+<td class="property_name"><a class="link" href="gst-plugins-bad-libs-gstplayer.html#GstPlayer--volume" title="The “volume” property">volume</a></td>
+<td class="property_flags">Read / Write</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-libs-gstplayer.signals"></a><h2>Signals</h2>
+<div class="informaltable"><table class="informaltable" border="0">
+<colgroup>
+<col width="150px" class="signals_return">
+<col width="300px" class="signals_name">
+<col width="200px" class="signals_flags">
+</colgroup>
+<tbody>
+<tr>
+<td class="signal_type"><span class="returnvalue">void</span></td>
+<td class="signal_name"><a class="link" href="gst-plugins-bad-libs-gstplayer.html#GstPlayer-buffering" title="The “buffering” signal">buffering</a></td>
+<td class="signal_flags"><a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-SIGNAL-NO-HOOKS:CAPS">No Hooks</a></td>
+</tr>
+<tr>
+<td class="signal_type"><span class="returnvalue">void</span></td>
+<td class="signal_name"><a class="link" href="gst-plugins-bad-libs-gstplayer.html#GstPlayer-duration-changed" title="The “duration-changed” signal">duration-changed</a></td>
+<td class="signal_flags"><a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-SIGNAL-NO-HOOKS:CAPS">No Hooks</a></td>
+</tr>
+<tr>
+<td class="signal_type"><span class="returnvalue">void</span></td>
+<td class="signal_name"><a class="link" href="gst-plugins-bad-libs-gstplayer.html#GstPlayer-end-of-stream" title="The “end-of-stream” signal">end-of-stream</a></td>
+<td class="signal_flags"><a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-SIGNAL-NO-HOOKS:CAPS">No Hooks</a></td>
+</tr>
+<tr>
+<td class="signal_type"><span class="returnvalue">void</span></td>
+<td class="signal_name"><a class="link" href="gst-plugins-bad-libs-gstplayer.html#GstPlayer-error" title="The “error” signal">error</a></td>
+<td class="signal_flags"><a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-SIGNAL-NO-HOOKS:CAPS">No Hooks</a></td>
+</tr>
+<tr>
+<td class="signal_type"><span class="returnvalue">void</span></td>
+<td class="signal_name"><a class="link" href="gst-plugins-bad-libs-gstplayer.html#GstPlayer-media-info-updated" title="The “media-info-updated” signal">media-info-updated</a></td>
+<td class="signal_flags"><a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-SIGNAL-NO-HOOKS:CAPS">No Hooks</a></td>
+</tr>
+<tr>
+<td class="signal_type"><span class="returnvalue">void</span></td>
+<td class="signal_name"><a class="link" href="gst-plugins-bad-libs-gstplayer.html#GstPlayer-mute-changed" title="The “mute-changed” signal">mute-changed</a></td>
+<td class="signal_flags"><a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-SIGNAL-NO-HOOKS:CAPS">No Hooks</a></td>
+</tr>
+<tr>
+<td class="signal_type"><span class="returnvalue">void</span></td>
+<td class="signal_name"><a class="link" href="gst-plugins-bad-libs-gstplayer.html#GstPlayer-position-updated" title="The “position-updated” signal">position-updated</a></td>
+<td class="signal_flags"><a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-SIGNAL-NO-HOOKS:CAPS">No Hooks</a></td>
+</tr>
+<tr>
+<td class="signal_type"><span class="returnvalue">void</span></td>
+<td class="signal_name"><a class="link" href="gst-plugins-bad-libs-gstplayer.html#GstPlayer-seek-done" title="The “seek-done” signal">seek-done</a></td>
+<td class="signal_flags"><a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-SIGNAL-NO-HOOKS:CAPS">No Hooks</a></td>
+</tr>
+<tr>
+<td class="signal_type"><span class="returnvalue">void</span></td>
+<td class="signal_name"><a class="link" href="gst-plugins-bad-libs-gstplayer.html#GstPlayer-state-changed" title="The “state-changed” signal">state-changed</a></td>
+<td class="signal_flags"><a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-SIGNAL-NO-HOOKS:CAPS">No Hooks</a></td>
+</tr>
+<tr>
+<td class="signal_type"><span class="returnvalue">void</span></td>
+<td class="signal_name"><a class="link" href="gst-plugins-bad-libs-gstplayer.html#GstPlayer-video-dimensions-changed" title="The “video-dimensions-changed” signal">video-dimensions-changed</a></td>
+<td class="signal_flags"><a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-SIGNAL-NO-HOOKS:CAPS">No Hooks</a></td>
+</tr>
+<tr>
+<td class="signal_type"><span class="returnvalue">void</span></td>
+<td class="signal_name"><a class="link" href="gst-plugins-bad-libs-gstplayer.html#GstPlayer-volume-changed" title="The “volume-changed” signal">volume-changed</a></td>
+<td class="signal_flags"><a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-SIGNAL-NO-HOOKS:CAPS">No Hooks</a></td>
+</tr>
+<tr>
+<td class="signal_type"><span class="returnvalue">void</span></td>
+<td class="signal_name"><a class="link" href="gst-plugins-bad-libs-gstplayer.html#GstPlayer-warning" title="The “warning” signal">warning</a></td>
+<td class="signal_flags"><a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-SIGNAL-NO-HOOKS:CAPS">No Hooks</a></td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<a name="GstPlayer"></a><a name="GstPlayerSignalDispatcher"></a><a name="GstPlayerVideoRenderer"></a><div class="refsect1">
+<a name="gst-plugins-bad-libs-gstplayer.other"></a><h2>Types and Values</h2>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="name">
+<col class="description">
+</colgroup>
+<tbody>
+<tr>
+<td class="datatype_keyword"> </td>
+<td class="function_name"><a class="link" href="gst-plugins-bad-libs-gstplayer.html#GstPlayer-struct" title="GstPlayer">GstPlayer</a></td>
+</tr>
+<tr>
+<td class="datatype_keyword">enum</td>
+<td class="function_name"><a class="link" href="gst-plugins-bad-libs-gstplayer.html#GstPlayerState" title="enum GstPlayerState">GstPlayerState</a></td>
+</tr>
+<tr>
+<td class="datatype_keyword">enum</td>
+<td class="function_name"><a class="link" href="gst-plugins-bad-libs-gstplayer.html#GstPlayerError" title="enum GstPlayerError">GstPlayerError</a></td>
+</tr>
+<tr>
+<td class="datatype_keyword">enum</td>
+<td class="function_name"><a class="link" href="gst-plugins-bad-libs-gstplayer.html#GstPlayerColorBalanceType" title="enum GstPlayerColorBalanceType">GstPlayerColorBalanceType</a></td>
+</tr>
+<tr>
+<td class="datatype_keyword"> </td>
+<td class="function_name"><a class="link" href="gst-plugins-bad-libs-gstplayer.html#GstPlayerSignalDispatcher-struct" title="GstPlayerSignalDispatcher">GstPlayerSignalDispatcher</a></td>
+</tr>
+<tr>
+<td class="datatype_keyword">struct</td>
+<td class="function_name"><a class="link" href="gst-plugins-bad-libs-gstplayer.html#GstPlayerSignalDispatcherInterface" title="struct GstPlayerSignalDispatcherInterface">GstPlayerSignalDispatcherInterface</a></td>
+</tr>
+<tr>
+<td class="datatype_keyword"> </td>
+<td class="function_name"><a class="link" href="gst-plugins-bad-libs-gstplayer.html#GstPlayerVideoRenderer-struct" title="GstPlayerVideoRenderer">GstPlayerVideoRenderer</a></td>
+</tr>
+<tr>
+<td class="datatype_keyword">struct</td>
+<td class="function_name"><a class="link" href="gst-plugins-bad-libs-gstplayer.html#GstPlayerVideoRendererInterface" title="struct GstPlayerVideoRendererInterface">GstPlayerVideoRendererInterface</a></td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-libs-gstplayer.object-hierarchy"></a><h2>Object Hierarchy</h2>
+<pre class="screen">    <a href="https://developer.gnome.org/gobject/unstable/gobject-Enumeration-and-Flag-Types.html">GEnum</a>
+    <span class="lineart">├──</span> GstPlayerColorBalanceType
+    <span class="lineart">├──</span> GstPlayerError
+    <span class="lineart">╰──</span> GstPlayerState
+    <a href="https://developer.gnome.org/gobject/unstable/GTypeModule.html">GInterface</a>
+    <span class="lineart">├──</span> GstPlayerSignalDispatcher
+    <span class="lineart">╰──</span> GstPlayerVideoRenderer
+    <a href="https://developer.gnome.org/gobject/unstable/gobject-The-Base-Object-Type.html#GObject">GObject</a>
+    <span class="lineart">╰──</span> <a href="https://developer.gnome.org/gobject/unstable/gobject-The-Base-Object-Type.html#GInitiallyUnowned">GInitiallyUnowned</a>
+        <span class="lineart">╰──</span> <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstObject.html">GstObject</a>
+            <span class="lineart">╰──</span> GstPlayer
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-libs-gstplayer.prerequisites"></a><h2>Prerequisites</h2>
+<p>
+GstPlayerSignalDispatcher requires
+ <a href="https://developer.gnome.org/gobject/unstable/gobject-The-Base-Object-Type.html#GObject">GObject</a>.</p>
+<p>
+GstPlayerVideoRenderer requires
+ <a href="https://developer.gnome.org/gobject/unstable/gobject-The-Base-Object-Type.html#GObject">GObject</a>.</p>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-libs-gstplayer.implementations"></a><h2>Known Implementations</h2>
+<p>
+GstPlayerVideoRenderer is implemented by
+ GstPlayerVideoOverlayVideoRenderer.</p>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-libs-gstplayer.description"></a><h2>Description</h2>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-libs-gstplayer.functions_details"></a><h2>Functions</h2>
+<div class="refsect2">
+<a name="gst-player-new"></a><h3>gst_player_new ()</h3>
+<pre class="programlisting"><a class="link" href="gst-plugins-bad-libs-gstplayer.html#GstPlayer"><span class="returnvalue">GstPlayer</span></a> *
+gst_player_new (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-gstplayer.html#GstPlayerVideoRenderer"><span class="type">GstPlayerVideoRenderer</span></a> *video_renderer</code></em>,
+                <em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-gstplayer.html#GstPlayerSignalDispatcher"><span class="type">GstPlayerSignalDispatcher</span></a> *signal_dispatcher</code></em>);</pre>
+<p>Creates a new <a class="link" href="gst-plugins-bad-libs-gstplayer.html#GstPlayer"><span class="type">GstPlayer</span></a> instance that uses <em class="parameter"><code>signal_dispatcher</code></em>
+ to dispatch
+signals to some event loop system, or emits signals directly if NULL is
+passed. See <a class="link" href="gst-plugins-bad-libs-gstplayer-gmaincontextsignaldispatcher.html#gst-player-g-main-context-signal-dispatcher-new" title="gst_player_g_main_context_signal_dispatcher_new ()"><code class="function">gst_player_g_main_context_signal_dispatcher_new()</code></a>.</p>
+<p>Video is going to be rendered by <em class="parameter"><code>video_renderer</code></em>
+, or if <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> is provided
+no special video set up will be done and some default handling will be
+performed.</p>
+<div class="refsect3">
+<a name="id-1.2.10.2.14.2.6"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>video_renderer</p></td>
+<td class="parameter_description"><p> GstPlayerVideoRenderer to use. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>][<acronym title="NULL is OK, both for passing and for returning."><span class="acronym">allow-none</span></acronym>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>signal_dispatcher</p></td>
+<td class="parameter_description"><p> GstPlayerSignalDispatcher to use. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>][<acronym title="NULL is OK, both for passing and for returning."><span class="acronym">allow-none</span></acronym>]</span></td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="id-1.2.10.2.14.2.7"></a><h4>Returns</h4>
+<p> a new <a class="link" href="gst-plugins-bad-libs-gstplayer.html#GstPlayer"><span class="type">GstPlayer</span></a> instance</p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-player-play"></a><h3>gst_player_play ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+gst_player_play (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-gstplayer.html#GstPlayer"><span class="type">GstPlayer</span></a> *player</code></em>);</pre>
+<p>Request to play the loaded stream.</p>
+<div class="refsect3">
+<a name="id-1.2.10.2.14.3.5"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>player</p></td>
+<td class="parameter_description"><p><a class="link" href="gst-plugins-bad-libs-gstplayer.html#GstPlayer"><span class="type">GstPlayer</span></a> instance</p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-player-pause"></a><h3>gst_player_pause ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+gst_player_pause (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-gstplayer.html#GstPlayer"><span class="type">GstPlayer</span></a> *player</code></em>);</pre>
+<p>Pauses the current stream.</p>
+<div class="refsect3">
+<a name="id-1.2.10.2.14.4.5"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>player</p></td>
+<td class="parameter_description"><p><a class="link" href="gst-plugins-bad-libs-gstplayer.html#GstPlayer"><span class="type">GstPlayer</span></a> instance</p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-player-stop"></a><h3>gst_player_stop ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+gst_player_stop (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-gstplayer.html#GstPlayer"><span class="type">GstPlayer</span></a> *player</code></em>);</pre>
+<p>Stops playing the current stream and resets to the first position
+in the stream.</p>
+<div class="refsect3">
+<a name="id-1.2.10.2.14.5.5"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>player</p></td>
+<td class="parameter_description"><p><a class="link" href="gst-plugins-bad-libs-gstplayer.html#GstPlayer"><span class="type">GstPlayer</span></a> instance</p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-player-seek"></a><h3>gst_player_seek ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+gst_player_seek (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-gstplayer.html#GstPlayer"><span class="type">GstPlayer</span></a> *player</code></em>,
+                 <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstClock.html#GstClockTime"><span class="type">GstClockTime</span></a> position</code></em>);</pre>
+<p>Seeks the currently-playing stream to the absolute <em class="parameter"><code>position</code></em>
+ time
+in nanoseconds.</p>
+<div class="refsect3">
+<a name="id-1.2.10.2.14.6.5"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>player</p></td>
+<td class="parameter_description"><p><a class="link" href="gst-plugins-bad-libs-gstplayer.html#GstPlayer"><span class="type">GstPlayer</span></a> instance</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>position</p></td>
+<td class="parameter_description"><p>position to seek in nanoseconds</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-player-set-uri"></a><h3>gst_player_set_uri ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+gst_player_set_uri (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-gstplayer.html#GstPlayer"><span class="type">GstPlayer</span></a> *player</code></em>,
+                    <em class="parameter"><code>const <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *uri</code></em>);</pre>
+<p>Sets the next URI to play.</p>
+<div class="refsect3">
+<a name="id-1.2.10.2.14.7.5"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>player</p></td>
+<td class="parameter_description"><p><a class="link" href="gst-plugins-bad-libs-gstplayer.html#GstPlayer"><span class="type">GstPlayer</span></a> instance</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>uri</p></td>
+<td class="parameter_description"><p>next URI to play.</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-player-get-uri"></a><h3>gst_player_get_uri ()</h3>
+<pre class="programlisting"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> *
+gst_player_get_uri (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-gstplayer.html#GstPlayer"><span class="type">GstPlayer</span></a> *player</code></em>);</pre>
+<p>Gets the URI of the currently-playing stream.</p>
+<div class="refsect3">
+<a name="id-1.2.10.2.14.8.5"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>player</p></td>
+<td class="parameter_description"><p><a class="link" href="gst-plugins-bad-libs-gstplayer.html#GstPlayer"><span class="type">GstPlayer</span></a> instance</p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="id-1.2.10.2.14.8.6"></a><h4>Returns</h4>
+<p> a string containing the URI of the
+currently-playing stream. <a href="https://developer.gnome.org/glib/unstable/glib-Memory-Allocation.html#g-free"><code class="function">g_free()</code></a> after usage. </p>
+<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-player-get-duration"></a><h3>gst_player_get_duration ()</h3>
+<pre class="programlisting"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstClock.html#GstClockTime"><span class="returnvalue">GstClockTime</span></a>
+gst_player_get_duration (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-gstplayer.html#GstPlayer"><span class="type">GstPlayer</span></a> *player</code></em>);</pre>
+<p>Retrieves the duration of the media stream that self represents.</p>
+<div class="refsect3">
+<a name="id-1.2.10.2.14.9.5"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>player</p></td>
+<td class="parameter_description"><p><a class="link" href="gst-plugins-bad-libs-gstplayer.html#GstPlayer"><span class="type">GstPlayer</span></a> instance</p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="id-1.2.10.2.14.9.6"></a><h4>Returns</h4>
+<p> the duration of the currently-playing media stream, in
+nanoseconds.</p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-player-get-position"></a><h3>gst_player_get_position ()</h3>
+<pre class="programlisting"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstClock.html#GstClockTime"><span class="returnvalue">GstClockTime</span></a>
+gst_player_get_position (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-gstplayer.html#GstPlayer"><span class="type">GstPlayer</span></a> *player</code></em>);</pre>
+<div class="refsect3">
+<a name="id-1.2.10.2.14.10.4"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>player</p></td>
+<td class="parameter_description"><p><a class="link" href="gst-plugins-bad-libs-gstplayer.html#GstPlayer"><span class="type">GstPlayer</span></a> instance</p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="id-1.2.10.2.14.10.5"></a><h4>Returns</h4>
+<p> the absolute position time, in nanoseconds, of the
+currently-playing stream.</p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-player-set-volume"></a><h3>gst_player_set_volume ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+gst_player_set_volume (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-gstplayer.html#GstPlayer"><span class="type">GstPlayer</span></a> *player</code></em>,
+                       <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gdouble"><span class="type">gdouble</span></a> val</code></em>);</pre>
+<p>Sets the volume level of the stream as a percentage between 0 and 1.</p>
+<div class="refsect3">
+<a name="id-1.2.10.2.14.11.5"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>player</p></td>
+<td class="parameter_description"><p><a class="link" href="gst-plugins-bad-libs-gstplayer.html#GstPlayer"><span class="type">GstPlayer</span></a> instance</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>val</p></td>
+<td class="parameter_description"><p>the new volume level, as a percentage between 0 and 1</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-player-set-mute"></a><h3>gst_player_set_mute ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+gst_player_set_mute (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-gstplayer.html#GstPlayer"><span class="type">GstPlayer</span></a> *player</code></em>,
+                     <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> val</code></em>);</pre>
+<p><a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the currently-playing stream should be muted.</p>
+<div class="refsect3">
+<a name="id-1.2.10.2.14.12.5"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>player</p></td>
+<td class="parameter_description"><p><a class="link" href="gst-plugins-bad-libs-gstplayer.html#GstPlayer"><span class="type">GstPlayer</span></a> instance</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>val</p></td>
+<td class="parameter_description"><p>Mute state the should be set</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-player-get-volume"></a><h3>gst_player_get_volume ()</h3>
+<pre class="programlisting"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gdouble"><span class="returnvalue">gdouble</span></a>
+gst_player_get_volume (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-gstplayer.html#GstPlayer"><span class="type">GstPlayer</span></a> *player</code></em>);</pre>
+<p>Returns the current volume level, as a percentage between 0 and 1.</p>
+<div class="refsect3">
+<a name="id-1.2.10.2.14.13.5"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>player</p></td>
+<td class="parameter_description"><p><a class="link" href="gst-plugins-bad-libs-gstplayer.html#GstPlayer"><span class="type">GstPlayer</span></a> instance</p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="id-1.2.10.2.14.13.6"></a><h4>Returns</h4>
+<p> the volume as percentage between 0 and 1.</p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-player-get-mute"></a><h3>gst_player_get_mute ()</h3>
+<pre class="programlisting"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
+gst_player_get_mute (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-gstplayer.html#GstPlayer"><span class="type">GstPlayer</span></a> *player</code></em>);</pre>
+<div class="refsect3">
+<a name="id-1.2.10.2.14.14.4"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>player</p></td>
+<td class="parameter_description"><p><a class="link" href="gst-plugins-bad-libs-gstplayer.html#GstPlayer"><span class="type">GstPlayer</span></a> instance</p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="id-1.2.10.2.14.14.5"></a><h4>Returns</h4>
+<p> <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the currently-playing stream is muted.</p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-player-get-pipeline"></a><h3>gst_player_get_pipeline ()</h3>
+<pre class="programlisting"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html"><span class="returnvalue">GstElement</span></a> *
+gst_player_get_pipeline (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-gstplayer.html#GstPlayer"><span class="type">GstPlayer</span></a> *player</code></em>);</pre>
+<div class="refsect3">
+<a name="id-1.2.10.2.14.15.4"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>player</p></td>
+<td class="parameter_description"><p><a class="link" href="gst-plugins-bad-libs-gstplayer.html#GstPlayer"><span class="type">GstPlayer</span></a> instance</p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="id-1.2.10.2.14.15.5"></a><h4>Returns</h4>
+<p> The internal playbin instance. </p>
+<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-player-set-position-update-interval"></a><h3>gst_player_set_position_update_interval ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+gst_player_set_position_update_interval
+                               (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-gstplayer.html#GstPlayer"><span class="type">GstPlayer</span></a> *player</code></em>,
+                                <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> interval</code></em>);</pre>
+<p>Set interval in milliseconds between two position-updated signals.
+Pass 0 to stop updating the position.</p>
+<div class="refsect3">
+<a name="id-1.2.10.2.14.16.5"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>player</p></td>
+<td class="parameter_description"><p><a class="link" href="gst-plugins-bad-libs-gstplayer.html#GstPlayer"><span class="type">GstPlayer</span></a> instance</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>interval</p></td>
+<td class="parameter_description"><p>interval in ms</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-player-get-position-update-interval"></a><h3>gst_player_get_position_update_interval ()</h3>
+<pre class="programlisting"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#guint"><span class="returnvalue">guint</span></a>
+gst_player_get_position_update_interval
+                               (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-gstplayer.html#GstPlayer"><span class="type">GstPlayer</span></a> *player</code></em>);</pre>
+<div class="refsect3">
+<a name="id-1.2.10.2.14.17.4"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>player</p></td>
+<td class="parameter_description"><p><a class="link" href="gst-plugins-bad-libs-gstplayer.html#GstPlayer"><span class="type">GstPlayer</span></a> instance</p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="id-1.2.10.2.14.17.5"></a><h4>Returns</h4>
+<p> current position update interval in milliseconds</p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-player-state-get-name"></a><h3>gst_player_state_get_name ()</h3>
+<pre class="programlisting">const <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> *
+gst_player_state_get_name (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-gstplayer.html#GstPlayerState" title="enum GstPlayerState"><span class="type">GstPlayerState</span></a> state</code></em>);</pre>
+<p>Gets a string representing the given state.</p>
+<div class="refsect3">
+<a name="id-1.2.10.2.14.18.5"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>state</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gst-plugins-bad-libs-gstplayer.html#GstPlayerState" title="enum GstPlayerState"><span class="type">GstPlayerState</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="id-1.2.10.2.14.18.6"></a><h4>Returns</h4>
+<p> a string with the name of the state. </p>
+<p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GST-PLAYER-ERROR:CAPS"></a><h3>GST_PLAYER_ERROR</h3>
+<pre class="programlisting">#define      GST_PLAYER_ERROR                         (gst_player_error_quark ())
+</pre>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-player-error-get-name"></a><h3>gst_player_error_get_name ()</h3>
+<pre class="programlisting">const <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> *
+gst_player_error_get_name (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-gstplayer.html#GstPlayerError" title="enum GstPlayerError"><span class="type">GstPlayerError</span></a> error</code></em>);</pre>
+<p>Gets a string representing the given error.</p>
+<div class="refsect3">
+<a name="id-1.2.10.2.14.20.5"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>error</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gst-plugins-bad-libs-gstplayer.html#GstPlayerError" title="enum GstPlayerError"><span class="type">GstPlayerError</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="id-1.2.10.2.14.20.6"></a><h4>Returns</h4>
+<p> a string with the given error. </p>
+<p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-player-get-media-info"></a><h3>gst_player_get_media_info ()</h3>
+<pre class="programlisting"><a class="link" href="gst-plugins-bad-libs-gstplayer-mediainfo.html#GstPlayerMediaInfo"><span class="returnvalue">GstPlayerMediaInfo</span></a> *
+gst_player_get_media_info (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-gstplayer.html#GstPlayer"><span class="type">GstPlayer</span></a> *player</code></em>);</pre>
+<p>A Function to get the current media info <a class="link" href="gst-plugins-bad-libs-gstplayer-mediainfo.html#GstPlayerMediaInfo"><span class="type">GstPlayerMediaInfo</span></a> instance.</p>
+<div class="refsect3">
+<a name="id-1.2.10.2.14.21.5"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>player</p></td>
+<td class="parameter_description"><p><a class="link" href="gst-plugins-bad-libs-gstplayer.html#GstPlayer"><span class="type">GstPlayer</span></a> instance</p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="id-1.2.10.2.14.21.6"></a><h4>Returns</h4>
+<p> media info instance.</p>
+<p>The caller should free it with <a href="https://developer.gnome.org/gobject/unstable/gobject-The-Base-Object-Type.html#g-object-unref"><code class="function">g_object_unref()</code></a>. </p>
+<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-player-get-audio-streams"></a><h3>gst_player_get_audio_streams ()</h3>
+<pre class="programlisting"><a href="https://developer.gnome.org/glib/unstable/glib-Doubly-Linked-Lists.html#GList"><span class="returnvalue">GList</span></a> *
+gst_player_get_audio_streams (<em class="parameter"><code>const <a class="link" href="gst-plugins-bad-libs-gstplayer-mediainfo.html#GstPlayerMediaInfo"><span class="type">GstPlayerMediaInfo</span></a> *info</code></em>);</pre>
+<div class="refsect3">
+<a name="id-1.2.10.2.14.22.4"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>info</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gst-plugins-bad-libs-gstplayer-mediainfo.html#GstPlayerMediaInfo"><span class="type">GstPlayerMediaInfo</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="id-1.2.10.2.14.22.5"></a><h4>Returns</h4>
+<p> A <a href="https://developer.gnome.org/glib/unstable/glib-Doubly-Linked-Lists.html#GList"><span class="type">GList</span></a> of
+matching <a class="link" href="gst-plugins-bad-libs-gstplayer-mediainfo.html#GstPlayerAudioInfo"><span class="type">GstPlayerAudioInfo</span></a>. </p>
+<p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>][<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> GstPlayerAudioInfo]</span></p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-player-get-video-streams"></a><h3>gst_player_get_video_streams ()</h3>
+<pre class="programlisting"><a href="https://developer.gnome.org/glib/unstable/glib-Doubly-Linked-Lists.html#GList"><span class="returnvalue">GList</span></a> *
+gst_player_get_video_streams (<em class="parameter"><code>const <a class="link" href="gst-plugins-bad-libs-gstplayer-mediainfo.html#GstPlayerMediaInfo"><span class="type">GstPlayerMediaInfo</span></a> *info</code></em>);</pre>
+<div class="refsect3">
+<a name="id-1.2.10.2.14.23.4"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>info</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gst-plugins-bad-libs-gstplayer-mediainfo.html#GstPlayerMediaInfo"><span class="type">GstPlayerMediaInfo</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="id-1.2.10.2.14.23.5"></a><h4>Returns</h4>
+<p> A <a href="https://developer.gnome.org/glib/unstable/glib-Doubly-Linked-Lists.html#GList"><span class="type">GList</span></a> of
+matching <a class="link" href="gst-plugins-bad-libs-gstplayer-mediainfo.html#GstPlayerVideoInfo"><span class="type">GstPlayerVideoInfo</span></a>. </p>
+<p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>][<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> GstPlayerVideoInfo]</span></p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-player-get-subtitle-streams"></a><h3>gst_player_get_subtitle_streams ()</h3>
+<pre class="programlisting"><a href="https://developer.gnome.org/glib/unstable/glib-Doubly-Linked-Lists.html#GList"><span class="returnvalue">GList</span></a> *
+gst_player_get_subtitle_streams (<em class="parameter"><code>const <a class="link" href="gst-plugins-bad-libs-gstplayer-mediainfo.html#GstPlayerMediaInfo"><span class="type">GstPlayerMediaInfo</span></a> *info</code></em>);</pre>
+<div class="refsect3">
+<a name="id-1.2.10.2.14.24.4"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>info</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gst-plugins-bad-libs-gstplayer-mediainfo.html#GstPlayerMediaInfo"><span class="type">GstPlayerMediaInfo</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="id-1.2.10.2.14.24.5"></a><h4>Returns</h4>
+<p> A <a href="https://developer.gnome.org/glib/unstable/glib-Doubly-Linked-Lists.html#GList"><span class="type">GList</span></a> of
+matching <a class="link" href="gst-plugins-bad-libs-gstplayer-mediainfo.html#GstPlayerSubtitleInfo"><span class="type">GstPlayerSubtitleInfo</span></a>. </p>
+<p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>][<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> GstPlayerSubtitleInfo]</span></p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-player-set-audio-track"></a><h3>gst_player_set_audio_track ()</h3>
+<pre class="programlisting"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
+gst_player_set_audio_track (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-gstplayer.html#GstPlayer"><span class="type">GstPlayer</span></a> *player</code></em>,
+                            <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a> stream_index</code></em>);</pre>
+<div class="refsect3">
+<a name="id-1.2.10.2.14.25.4"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>player</p></td>
+<td class="parameter_description"><p><a class="link" href="gst-plugins-bad-libs-gstplayer.html#GstPlayer"><span class="type">GstPlayer</span></a> instance</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>stream_index</p></td>
+<td class="parameter_description"><p>stream index</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="id-1.2.10.2.14.25.5"></a><h4>Returns</h4>
+<p> <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> or <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a></p>
+<p>Sets the audio track <em class="parameter"><code>stream_idex</code></em>
+.</p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-player-set-video-track"></a><h3>gst_player_set_video_track ()</h3>
+<pre class="programlisting"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
+gst_player_set_video_track (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-gstplayer.html#GstPlayer"><span class="type">GstPlayer</span></a> *player</code></em>,
+                            <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a> stream_index</code></em>);</pre>
+<div class="refsect3">
+<a name="id-1.2.10.2.14.26.4"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>player</p></td>
+<td class="parameter_description"><p><a class="link" href="gst-plugins-bad-libs-gstplayer.html#GstPlayer"><span class="type">GstPlayer</span></a> instance</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>stream_index</p></td>
+<td class="parameter_description"><p>stream index</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="id-1.2.10.2.14.26.5"></a><h4>Returns</h4>
+<p> <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> or <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a></p>
+<p>Sets the video track <em class="parameter"><code>stream_index</code></em>
+.</p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-player-set-subtitle-track"></a><h3>gst_player_set_subtitle_track ()</h3>
+<pre class="programlisting"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
+gst_player_set_subtitle_track (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-gstplayer.html#GstPlayer"><span class="type">GstPlayer</span></a> *player</code></em>,
+                               <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a> stream_index</code></em>);</pre>
+<div class="refsect3">
+<a name="id-1.2.10.2.14.27.4"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>player</p></td>
+<td class="parameter_description"><p><a class="link" href="gst-plugins-bad-libs-gstplayer.html#GstPlayer"><span class="type">GstPlayer</span></a> instance</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>stream_index</p></td>
+<td class="parameter_description"><p>stream index</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="id-1.2.10.2.14.27.5"></a><h4>Returns</h4>
+<p> <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> or <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a></p>
+<p>Sets the subtitle strack <em class="parameter"><code>stream_index</code></em>
+.</p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-player-get-current-audio-track"></a><h3>gst_player_get_current_audio_track ()</h3>
+<pre class="programlisting"><a class="link" href="gst-plugins-bad-libs-gstplayer-mediainfo.html#GstPlayerAudioInfo"><span class="returnvalue">GstPlayerAudioInfo</span></a> *
+gst_player_get_current_audio_track (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-gstplayer.html#GstPlayer"><span class="type">GstPlayer</span></a> *player</code></em>);</pre>
+<p>A Function to get current audio <a class="link" href="gst-plugins-bad-libs-gstplayer-mediainfo.html#GstPlayerAudioInfo"><span class="type">GstPlayerAudioInfo</span></a> instance.</p>
+<div class="refsect3">
+<a name="id-1.2.10.2.14.28.5"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>player</p></td>
+<td class="parameter_description"><p><a class="link" href="gst-plugins-bad-libs-gstplayer.html#GstPlayer"><span class="type">GstPlayer</span></a> instance</p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="id-1.2.10.2.14.28.6"></a><h4>Returns</h4>
+<p> current audio track.</p>
+<p>The caller should free it with <a href="https://developer.gnome.org/gobject/unstable/gobject-The-Base-Object-Type.html#g-object-unref"><code class="function">g_object_unref()</code></a>. </p>
+<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-player-get-current-video-track"></a><h3>gst_player_get_current_video_track ()</h3>
+<pre class="programlisting"><a class="link" href="gst-plugins-bad-libs-gstplayer-mediainfo.html#GstPlayerVideoInfo"><span class="returnvalue">GstPlayerVideoInfo</span></a> *
+gst_player_get_current_video_track (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-gstplayer.html#GstPlayer"><span class="type">GstPlayer</span></a> *player</code></em>);</pre>
+<p>A Function to get current video <a class="link" href="gst-plugins-bad-libs-gstplayer-mediainfo.html#GstPlayerVideoInfo"><span class="type">GstPlayerVideoInfo</span></a> instance.</p>
+<div class="refsect3">
+<a name="id-1.2.10.2.14.29.5"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>player</p></td>
+<td class="parameter_description"><p><a class="link" href="gst-plugins-bad-libs-gstplayer.html#GstPlayer"><span class="type">GstPlayer</span></a> instance</p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="id-1.2.10.2.14.29.6"></a><h4>Returns</h4>
+<p> current video track.</p>
+<p>The caller should free it with <a href="https://developer.gnome.org/gobject/unstable/gobject-The-Base-Object-Type.html#g-object-unref"><code class="function">g_object_unref()</code></a>. </p>
+<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-player-get-current-subtitle-track"></a><h3>gst_player_get_current_subtitle_track ()</h3>
+<pre class="programlisting"><a class="link" href="gst-plugins-bad-libs-gstplayer-mediainfo.html#GstPlayerSubtitleInfo"><span class="returnvalue">GstPlayerSubtitleInfo</span></a> *
+gst_player_get_current_subtitle_track (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-gstplayer.html#GstPlayer"><span class="type">GstPlayer</span></a> *player</code></em>);</pre>
+<p>A Function to get current subtitle <a class="link" href="gst-plugins-bad-libs-gstplayer-mediainfo.html#GstPlayerSubtitleInfo"><span class="type">GstPlayerSubtitleInfo</span></a> instance.</p>
+<div class="refsect3">
+<a name="id-1.2.10.2.14.30.5"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>player</p></td>
+<td class="parameter_description"><p><a class="link" href="gst-plugins-bad-libs-gstplayer.html#GstPlayer"><span class="type">GstPlayer</span></a> instance</p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="id-1.2.10.2.14.30.6"></a><h4>Returns</h4>
+<p> current subtitle track.</p>
+<p>The caller should free it with <a href="https://developer.gnome.org/gobject/unstable/gobject-The-Base-Object-Type.html#g-object-unref"><code class="function">g_object_unref()</code></a>. </p>
+<p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-player-set-audio-track-enabled"></a><h3>gst_player_set_audio_track_enabled ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+gst_player_set_audio_track_enabled (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-gstplayer.html#GstPlayer"><span class="type">GstPlayer</span></a> *player</code></em>,
+                                    <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> enabled</code></em>);</pre>
+<p>Enable or disable the current audio track.</p>
+<div class="refsect3">
+<a name="id-1.2.10.2.14.31.5"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>player</p></td>
+<td class="parameter_description"><p><a class="link" href="gst-plugins-bad-libs-gstplayer.html#GstPlayer"><span class="type">GstPlayer</span></a> instance</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>enabled</p></td>
+<td class="parameter_description"><p>TRUE or FALSE</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-player-set-video-track-enabled"></a><h3>gst_player_set_video_track_enabled ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+gst_player_set_video_track_enabled (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-gstplayer.html#GstPlayer"><span class="type">GstPlayer</span></a> *player</code></em>,
+                                    <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> enabled</code></em>);</pre>
+<p>Enable or disable the current video track.</p>
+<div class="refsect3">
+<a name="id-1.2.10.2.14.32.5"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>player</p></td>
+<td class="parameter_description"><p><a class="link" href="gst-plugins-bad-libs-gstplayer.html#GstPlayer"><span class="type">GstPlayer</span></a> instance</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>enabled</p></td>
+<td class="parameter_description"><p>TRUE or FALSE</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-player-set-subtitle-track-enabled"></a><h3>gst_player_set_subtitle_track_enabled ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+gst_player_set_subtitle_track_enabled (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-gstplayer.html#GstPlayer"><span class="type">GstPlayer</span></a> *player</code></em>,
+                                       <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> enabled</code></em>);</pre>
+<p>Enable or disable the current subtitle track.</p>
+<div class="refsect3">
+<a name="id-1.2.10.2.14.33.5"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>player</p></td>
+<td class="parameter_description"><p><a class="link" href="gst-plugins-bad-libs-gstplayer.html#GstPlayer"><span class="type">GstPlayer</span></a> instance</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>enabled</p></td>
+<td class="parameter_description"><p>TRUE or FALSE</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-player-set-subtitle-uri"></a><h3>gst_player_set_subtitle_uri ()</h3>
+<pre class="programlisting"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
+gst_player_set_subtitle_uri (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-gstplayer.html#GstPlayer"><span class="type">GstPlayer</span></a> *player</code></em>,
+                             <em class="parameter"><code>const <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *uri</code></em>);</pre>
+<div class="refsect3">
+<a name="id-1.2.10.2.14.34.4"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>player</p></td>
+<td class="parameter_description"><p><a class="link" href="gst-plugins-bad-libs-gstplayer.html#GstPlayer"><span class="type">GstPlayer</span></a> instance</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>uri</p></td>
+<td class="parameter_description"><p>subtitle URI</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="id-1.2.10.2.14.34.5"></a><h4>Returns</h4>
+<p> <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> or <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a></p>
+<p>Sets the external subtitle URI.</p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-player-get-subtitle-uri"></a><h3>gst_player_get_subtitle_uri ()</h3>
+<pre class="programlisting"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> *
+gst_player_get_subtitle_uri (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-gstplayer.html#GstPlayer"><span class="type">GstPlayer</span></a> *player</code></em>);</pre>
+<p>current subtitle URI</p>
+<div class="refsect3">
+<a name="id-1.2.10.2.14.35.5"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>player</p></td>
+<td class="parameter_description"><p><a class="link" href="gst-plugins-bad-libs-gstplayer.html#GstPlayer"><span class="type">GstPlayer</span></a> instance</p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="id-1.2.10.2.14.35.6"></a><h4>Returns</h4>
+<p> URI of the current external subtitle.
+<a href="https://developer.gnome.org/glib/unstable/glib-Memory-Allocation.html#g-free"><code class="function">g_free()</code></a> after usage. </p>
+<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-player-set-visualization"></a><h3>gst_player_set_visualization ()</h3>
+<pre class="programlisting"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
+gst_player_set_visualization (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-gstplayer.html#GstPlayer"><span class="type">GstPlayer</span></a> *player</code></em>,
+                              <em class="parameter"><code>const <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *name</code></em>);</pre>
+<div class="refsect3">
+<a name="id-1.2.10.2.14.36.4"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>player</p></td>
+<td class="parameter_description"><p><a class="link" href="gst-plugins-bad-libs-gstplayer.html#GstPlayer"><span class="type">GstPlayer</span></a> instance</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>name</p></td>
+<td class="parameter_description"><p>visualization element obtained from
+<a class="link" href="gst-plugins-bad-libs-gstplayer-visualization.html#gst-player-visualizations-get" title="gst_player_visualizations_get ()"><code class="function">gst_player_visualizations_get()</code></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="id-1.2.10.2.14.36.5"></a><h4>Returns</h4>
+<p> <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the visualizations was set correctly. Otherwise,
+<a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a>.</p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-player-set-visualization-enabled"></a><h3>gst_player_set_visualization_enabled ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+gst_player_set_visualization_enabled (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-gstplayer.html#GstPlayer"><span class="type">GstPlayer</span></a> *player</code></em>,
+                                      <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> enabled</code></em>);</pre>
+<p>Enable or disable the visualization.</p>
+<div class="refsect3">
+<a name="id-1.2.10.2.14.37.5"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>player</p></td>
+<td class="parameter_description"><p><a class="link" href="gst-plugins-bad-libs-gstplayer.html#GstPlayer"><span class="type">GstPlayer</span></a> instance</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>enabled</p></td>
+<td class="parameter_description"><p>TRUE or FALSE</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-player-get-current-visualization"></a><h3>gst_player_get_current_visualization ()</h3>
+<pre class="programlisting"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> *
+gst_player_get_current_visualization (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-gstplayer.html#GstPlayer"><span class="type">GstPlayer</span></a> *player</code></em>);</pre>
+<div class="refsect3">
+<a name="id-1.2.10.2.14.38.4"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>player</p></td>
+<td class="parameter_description"><p><a class="link" href="gst-plugins-bad-libs-gstplayer.html#GstPlayer"><span class="type">GstPlayer</span></a> instance</p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="id-1.2.10.2.14.38.5"></a><h4>Returns</h4>
+<p> Name of the currently enabled visualization.
+<a href="https://developer.gnome.org/glib/unstable/glib-Memory-Allocation.html#g-free"><code class="function">g_free()</code></a> after usage. </p>
+<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-player-color-balance-type-get-name"></a><h3>gst_player_color_balance_type_get_name ()</h3>
+<pre class="programlisting">const <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> *
+gst_player_color_balance_type_get_name
+                               (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-gstplayer.html#GstPlayerColorBalanceType" title="enum GstPlayerColorBalanceType"><span class="type">GstPlayerColorBalanceType</span></a> type</code></em>);</pre>
+<p>Gets a string representing the given color balance type.</p>
+<div class="refsect3">
+<a name="id-1.2.10.2.14.39.5"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>type</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gst-plugins-bad-libs-gstplayer.html#GstPlayerColorBalanceType" title="enum GstPlayerColorBalanceType"><span class="type">GstPlayerColorBalanceType</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="id-1.2.10.2.14.39.6"></a><h4>Returns</h4>
+<p> a string with the name of the color
+balance type. </p>
+<p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-player-has-color-balance"></a><h3>gst_player_has_color_balance ()</h3>
+<pre class="programlisting"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
+gst_player_has_color_balance (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-gstplayer.html#GstPlayer"><span class="type">GstPlayer</span></a> *player</code></em>);</pre>
+<p>Checks whether the <em class="parameter"><code>player</code></em>
+ has color balance support available.</p>
+<div class="refsect3">
+<a name="id-1.2.10.2.14.40.5"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>player</p></td>
+<td class="parameter_description"><p><a class="link" href="gst-plugins-bad-libs-gstplayer.html#GstPlayer"><span class="type">GstPlayer</span></a> instance</p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="id-1.2.10.2.14.40.6"></a><h4>Returns</h4>
+<p> <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if <em class="parameter"><code>player</code></em>
+has color balance support. Otherwise,
+<a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a>.</p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-player-set-color-balance"></a><h3>gst_player_set_color_balance ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+gst_player_set_color_balance (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-gstplayer.html#GstPlayer"><span class="type">GstPlayer</span></a> *player</code></em>,
+                              <em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-gstplayer.html#GstPlayerColorBalanceType" title="enum GstPlayerColorBalanceType"><span class="type">GstPlayerColorBalanceType</span></a> type</code></em>,
+                              <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gdouble"><span class="type">gdouble</span></a> value</code></em>);</pre>
+<p>Sets the current value of the indicated channel <em class="parameter"><code>type</code></em>
+ to the passed
+value.</p>
+<div class="refsect3">
+<a name="id-1.2.10.2.14.41.5"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>player</p></td>
+<td class="parameter_description"><p><a class="link" href="gst-plugins-bad-libs-gstplayer.html#GstPlayer"><span class="type">GstPlayer</span></a> instance</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>type</p></td>
+<td class="parameter_description"><p><a class="link" href="gst-plugins-bad-libs-gstplayer.html#GstPlayerColorBalanceType" title="enum GstPlayerColorBalanceType"><span class="type">GstPlayerColorBalanceType</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>value</p></td>
+<td class="parameter_description"><p>The new value for the <em class="parameter"><code>type</code></em>
+, ranged [0,1]</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-player-get-color-balance"></a><h3>gst_player_get_color_balance ()</h3>
+<pre class="programlisting"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gdouble"><span class="returnvalue">gdouble</span></a>
+gst_player_get_color_balance (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-gstplayer.html#GstPlayer"><span class="type">GstPlayer</span></a> *player</code></em>,
+                              <em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-gstplayer.html#GstPlayerColorBalanceType" title="enum GstPlayerColorBalanceType"><span class="type">GstPlayerColorBalanceType</span></a> type</code></em>);</pre>
+<p>Retrieve the current value of the indicated <em class="parameter"><code>type</code></em>
+.</p>
+<div class="refsect3">
+<a name="id-1.2.10.2.14.42.5"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>player</p></td>
+<td class="parameter_description"><p><a class="link" href="gst-plugins-bad-libs-gstplayer.html#GstPlayer"><span class="type">GstPlayer</span></a> instance</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>type</p></td>
+<td class="parameter_description"><p><a class="link" href="gst-plugins-bad-libs-gstplayer.html#GstPlayerColorBalanceType" title="enum GstPlayerColorBalanceType"><span class="type">GstPlayerColorBalanceType</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="id-1.2.10.2.14.42.6"></a><h4>Returns</h4>
+<p> The current value of <em class="parameter"><code>type</code></em>
+, between [0,1]. In case of
+error -1 is returned.</p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-player-get-rate"></a><h3>gst_player_get_rate ()</h3>
+<pre class="programlisting"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gdouble"><span class="returnvalue">gdouble</span></a>
+gst_player_get_rate (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-gstplayer.html#GstPlayer"><span class="type">GstPlayer</span></a> *player</code></em>);</pre>
+<div class="refsect3">
+<a name="id-1.2.10.2.14.43.4"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>player</p></td>
+<td class="parameter_description"><p><a class="link" href="gst-plugins-bad-libs-gstplayer.html#GstPlayer"><span class="type">GstPlayer</span></a> instance</p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="id-1.2.10.2.14.43.5"></a><h4>Returns</h4>
+<p> current playback rate</p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-player-set-rate"></a><h3>gst_player_set_rate ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+gst_player_set_rate (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-gstplayer.html#GstPlayer"><span class="type">GstPlayer</span></a> *player</code></em>,
+                     <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gdouble"><span class="type">gdouble</span></a> rate</code></em>);</pre>
+<p>Playback at specified rate</p>
+<div class="refsect3">
+<a name="id-1.2.10.2.14.44.5"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>player</p></td>
+<td class="parameter_description"><p><a class="link" href="gst-plugins-bad-libs-gstplayer.html#GstPlayer"><span class="type">GstPlayer</span></a> instance</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>rate</p></td>
+<td class="parameter_description"><p>playback rate</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-libs-gstplayer.other_details"></a><h2>Types and Values</h2>
+<div class="refsect2">
+<a name="GstPlayer-struct"></a><h3>GstPlayer</h3>
+<pre class="programlisting">typedef struct _GstPlayer GstPlayer;</pre>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstPlayerState"></a><h3>enum GstPlayerState</h3>
+<div class="refsect3">
+<a name="id-1.2.10.2.15.3.3"></a><h4>Members</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="300px" class="enum_members_name">
+<col class="enum_members_description">
+<col width="200px" class="enum_members_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="enum_member_name"><p><a name="GST-PLAYER-STATE-STOPPED:CAPS"></a>GST_PLAYER_STATE_STOPPED</p></td>
+<td class="enum_member_description">
+<p>the player is stopped.</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-PLAYER-STATE-BUFFERING:CAPS"></a>GST_PLAYER_STATE_BUFFERING</p></td>
+<td class="enum_member_description">
+<p>the player is buffering.</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-PLAYER-STATE-PAUSED:CAPS"></a>GST_PLAYER_STATE_PAUSED</p></td>
+<td class="enum_member_description">
+<p>the player is paused.</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-PLAYER-STATE-PLAYING:CAPS"></a>GST_PLAYER_STATE_PLAYING</p></td>
+<td class="enum_member_description">
+<p>the player is currently playing a
+stream.</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstPlayerError"></a><h3>enum GstPlayerError</h3>
+<div class="refsect3">
+<a name="id-1.2.10.2.15.4.3"></a><h4>Members</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="300px" class="enum_members_name">
+<col class="enum_members_description">
+<col width="200px" class="enum_members_annotations">
+</colgroup>
+<tbody><tr>
+<td class="enum_member_name"><p><a name="GST-PLAYER-ERROR-FAILED:CAPS"></a>GST_PLAYER_ERROR_FAILED</p></td>
+<td class="enum_member_description">
+<p>generic error.</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstPlayerColorBalanceType"></a><h3>enum GstPlayerColorBalanceType</h3>
+<div class="refsect3">
+<a name="id-1.2.10.2.15.5.3"></a><h4>Members</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="300px" class="enum_members_name">
+<col class="enum_members_description">
+<col width="200px" class="enum_members_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="enum_member_name"><p><a name="GST-PLAYER-COLOR-BALANCE-BRIGHTNESS:CAPS"></a>GST_PLAYER_COLOR_BALANCE_BRIGHTNESS</p></td>
+<td class="enum_member_description">
+<p>brightness or black level.</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-PLAYER-COLOR-BALANCE-CONTRAST:CAPS"></a>GST_PLAYER_COLOR_BALANCE_CONTRAST</p></td>
+<td class="enum_member_description">
+<p>contrast or luma gain.</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-PLAYER-COLOR-BALANCE-SATURATION:CAPS"></a>GST_PLAYER_COLOR_BALANCE_SATURATION</p></td>
+<td class="enum_member_description">
+<p>color saturation or chroma
+gain.</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-PLAYER-COLOR-BALANCE-HUE:CAPS"></a>GST_PLAYER_COLOR_BALANCE_HUE</p></td>
+<td class="enum_member_description">
+<p>hue or color balance.</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstPlayerSignalDispatcher-struct"></a><h3>GstPlayerSignalDispatcher</h3>
+<pre class="programlisting">typedef struct _GstPlayerSignalDispatcher GstPlayerSignalDispatcher;</pre>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstPlayerSignalDispatcherInterface"></a><h3>struct GstPlayerSignalDispatcherInterface</h3>
+<pre class="programlisting">struct GstPlayerSignalDispatcherInterface {
+  GTypeInterface parent_iface;
+
+  void (*dispatch) (GstPlayerSignalDispatcher * self,
+                    GstPlayer * player,
+                    GstPlayerSignalDispatcherFunc emitter,
+                    gpointer data,
+                    GDestroyNotify destroy);
+};
+</pre>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstPlayerVideoRenderer-struct"></a><h3>GstPlayerVideoRenderer</h3>
+<pre class="programlisting">typedef struct _GstPlayerVideoRenderer GstPlayerVideoRenderer;</pre>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstPlayerVideoRendererInterface"></a><h3>struct GstPlayerVideoRendererInterface</h3>
+<pre class="programlisting">struct GstPlayerVideoRendererInterface {
+  GTypeInterface parent_iface;
+
+  GstElement * (*create_video_sink) (GstPlayerVideoRenderer * self, GstPlayer * player);
+};
+</pre>
+</div>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-libs-gstplayer.property-details"></a><h2>Property Details</h2>
+<div class="refsect2">
+<a name="GstPlayer--current-audio-track"></a><h3>The <code class="literal">“current-audio-track”</code> property</h3>
+<pre class="programlisting">  “current-audio-track”      <a class="link" href="gst-plugins-bad-libs-gstplayer-mediainfo.html#GstPlayerAudioInfo"><span class="type">GstPlayerAudioInfo</span></a> *</pre>
+<p>Current audio track information.</p>
+<p>Flags: Read</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstPlayer--current-subtitle-track"></a><h3>The <code class="literal">“current-subtitle-track”</code> property</h3>
+<pre class="programlisting">  “current-subtitle-track”   <a class="link" href="gst-plugins-bad-libs-gstplayer-mediainfo.html#GstPlayerSubtitleInfo"><span class="type">GstPlayerSubtitleInfo</span></a> *</pre>
+<p>Current audio subtitle information.</p>
+<p>Flags: Read</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstPlayer--current-video-track"></a><h3>The <code class="literal">“current-video-track”</code> property</h3>
+<pre class="programlisting">  “current-video-track”      <a class="link" href="gst-plugins-bad-libs-gstplayer-mediainfo.html#GstPlayerVideoInfo"><span class="type">GstPlayerVideoInfo</span></a> *</pre>
+<p>Current video track information.</p>
+<p>Flags: Read</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstPlayer--duration"></a><h3>The <code class="literal">“duration”</code> property</h3>
+<pre class="programlisting">  “duration”                 <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#guint64"><span class="type">guint64</span></a></pre>
+<p>Duration.</p>
+<p>Flags: Read</p>
+<p>Default value: 18446744073709551615</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstPlayer--media-info"></a><h3>The <code class="literal">“media-info”</code> property</h3>
+<pre class="programlisting">  “media-info”               <a class="link" href="gst-plugins-bad-libs-gstplayer-mediainfo.html#GstPlayerMediaInfo"><span class="type">GstPlayerMediaInfo</span></a> *</pre>
+<p>Current media information.</p>
+<p>Flags: Read</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstPlayer--mute"></a><h3>The <code class="literal">“mute”</code> property</h3>
+<pre class="programlisting">  “mute”                     <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a></pre>
+<p>Mute.</p>
+<p>Flags: Read / Write</p>
+<p>Default value: FALSE</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstPlayer--pipeline"></a><h3>The <code class="literal">“pipeline”</code> property</h3>
+<pre class="programlisting">  “pipeline”                 <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html"><span class="type">GstElement</span></a> *</pre>
+<p>GStreamer pipeline that is used.</p>
+<p>Flags: Read</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstPlayer--position"></a><h3>The <code class="literal">“position”</code> property</h3>
+<pre class="programlisting">  “position”                 <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#guint64"><span class="type">guint64</span></a></pre>
+<p>Current Position.</p>
+<p>Flags: Read</p>
+<p>Default value: 18446744073709551615</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstPlayer--position-update-interval"></a><h3>The <code class="literal">“position-update-interval”</code> property</h3>
+<pre class="programlisting">  “position-update-interval” <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a></pre>
+<p>Interval in milliseconds between two position-updated signals.Pass 0 to stop updating the position.</p>
+<p>Flags: Read / Write</p>
+<p>Allowed values: &lt;= 10000</p>
+<p>Default value: 100</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstPlayer--rate"></a><h3>The <code class="literal">“rate”</code> property</h3>
+<pre class="programlisting">  “rate”                     <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gdouble"><span class="type">gdouble</span></a></pre>
+<p>Playback rate.</p>
+<p>Flags: Read / Write</p>
+<p>Allowed values: [-64,64]</p>
+<p>Default value: 1</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstPlayer--signal-dispatcher"></a><h3>The <code class="literal">“signal-dispatcher”</code> property</h3>
+<pre class="programlisting">  “signal-dispatcher”        <a class="link" href="gst-plugins-bad-libs-gstplayer.html#GstPlayerSignalDispatcher"><span class="type">GstPlayerSignalDispatcher</span></a> *</pre>
+<p>Dispatcher for the signals to e.g. event loops.</p>
+<p>Flags: Write / Construct Only</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstPlayer--suburi"></a><h3>The <code class="literal">“suburi”</code> property</h3>
+<pre class="programlisting">  “suburi”                   <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *</pre>
+<p>Current Subtitle URI.</p>
+<p>Flags: Read / Write</p>
+<p>Default value: NULL</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstPlayer--uri"></a><h3>The <code class="literal">“uri”</code> property</h3>
+<pre class="programlisting">  “uri”                      <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *</pre>
+<p>Current URI.</p>
+<p>Flags: Read / Write</p>
+<p>Default value: NULL</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstPlayer--video-renderer"></a><h3>The <code class="literal">“video-renderer”</code> property</h3>
+<pre class="programlisting">  “video-renderer”           <a class="link" href="gst-plugins-bad-libs-gstplayer.html#GstPlayerVideoRenderer"><span class="type">GstPlayerVideoRenderer</span></a> *</pre>
+<p>Video renderer to use for rendering videos.</p>
+<p>Flags: Write / Construct Only</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstPlayer--volume"></a><h3>The <code class="literal">“volume”</code> property</h3>
+<pre class="programlisting">  “volume”                   <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gdouble"><span class="type">gdouble</span></a></pre>
+<p>Volume.</p>
+<p>Flags: Read / Write</p>
+<p>Allowed values: [0,10]</p>
+<p>Default value: 1</p>
+</div>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-libs-gstplayer.signal-details"></a><h2>Signal Details</h2>
+<div class="refsect2">
+<a name="GstPlayer-buffering"></a><h3>The <code class="literal">“buffering”</code> signal</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+user_function (<a class="link" href="gst-plugins-bad-libs-gstplayer.html#GstPlayer"><span class="type">GstPlayer</span></a> *gstplayer,
+               <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a>       arg1,
+               <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a>   user_data)</pre>
+<p>Flags: <a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-SIGNAL-NO-HOOKS:CAPS">No Hooks</a></p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstPlayer-duration-changed"></a><h3>The <code class="literal">“duration-changed”</code> signal</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+user_function (<a class="link" href="gst-plugins-bad-libs-gstplayer.html#GstPlayer"><span class="type">GstPlayer</span></a> *gstplayer,
+               <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#guint64"><span class="type">guint64</span></a>    arg1,
+               <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a>   user_data)</pre>
+<p>Flags: <a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-SIGNAL-NO-HOOKS:CAPS">No Hooks</a></p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstPlayer-end-of-stream"></a><h3>The <code class="literal">“end-of-stream”</code> signal</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+user_function (<a class="link" href="gst-plugins-bad-libs-gstplayer.html#GstPlayer"><span class="type">GstPlayer</span></a> *gstplayer,
+               <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a>   user_data)</pre>
+<p>Flags: <a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-SIGNAL-NO-HOOKS:CAPS">No Hooks</a></p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstPlayer-error"></a><h3>The <code class="literal">“error”</code> signal</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+user_function (<a class="link" href="gst-plugins-bad-libs-gstplayer.html#GstPlayer"><span class="type">GstPlayer</span></a> *gstplayer,
+               <a href="https://developer.gnome.org/glib/unstable/glib-Error-Reporting.html#GError"><span class="type">GError</span></a>    *arg1,
+               <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a>   user_data)</pre>
+<p>Flags: <a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-SIGNAL-NO-HOOKS:CAPS">No Hooks</a></p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstPlayer-media-info-updated"></a><h3>The <code class="literal">“media-info-updated”</code> signal</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+user_function (<a class="link" href="gst-plugins-bad-libs-gstplayer.html#GstPlayer"><span class="type">GstPlayer</span></a>          *gstplayer,
+               <a class="link" href="gst-plugins-bad-libs-gstplayer-mediainfo.html#GstPlayerMediaInfo"><span class="type">GstPlayerMediaInfo</span></a> *arg1,
+               <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a>            user_data)</pre>
+<p>Flags: <a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-SIGNAL-NO-HOOKS:CAPS">No Hooks</a></p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstPlayer-mute-changed"></a><h3>The <code class="literal">“mute-changed”</code> signal</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+user_function (<a class="link" href="gst-plugins-bad-libs-gstplayer.html#GstPlayer"><span class="type">GstPlayer</span></a> *gstplayer,
+               <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a>   user_data)</pre>
+<p>Flags: <a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-SIGNAL-NO-HOOKS:CAPS">No Hooks</a></p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstPlayer-position-updated"></a><h3>The <code class="literal">“position-updated”</code> signal</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+user_function (<a class="link" href="gst-plugins-bad-libs-gstplayer.html#GstPlayer"><span class="type">GstPlayer</span></a> *gstplayer,
+               <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#guint64"><span class="type">guint64</span></a>    arg1,
+               <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a>   user_data)</pre>
+<p>Flags: <a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-SIGNAL-NO-HOOKS:CAPS">No Hooks</a></p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstPlayer-seek-done"></a><h3>The <code class="literal">“seek-done”</code> signal</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+user_function (<a class="link" href="gst-plugins-bad-libs-gstplayer.html#GstPlayer"><span class="type">GstPlayer</span></a> *gstplayer,
+               <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#guint64"><span class="type">guint64</span></a>    arg1,
+               <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a>   user_data)</pre>
+<p>Flags: <a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-SIGNAL-NO-HOOKS:CAPS">No Hooks</a></p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstPlayer-state-changed"></a><h3>The <code class="literal">“state-changed”</code> signal</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+user_function (<a class="link" href="gst-plugins-bad-libs-gstplayer.html#GstPlayer"><span class="type">GstPlayer</span></a>     *gstplayer,
+               <a class="link" href="gst-plugins-bad-libs-gstplayer.html#GstPlayerState" title="enum GstPlayerState"><span class="type">GstPlayerState</span></a> arg1,
+               <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a>       user_data)</pre>
+<p>Flags: <a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-SIGNAL-NO-HOOKS:CAPS">No Hooks</a></p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstPlayer-video-dimensions-changed"></a><h3>The <code class="literal">“video-dimensions-changed”</code> signal</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+user_function (<a class="link" href="gst-plugins-bad-libs-gstplayer.html#GstPlayer"><span class="type">GstPlayer</span></a> *gstplayer,
+               <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a>       arg1,
+               <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a>       arg2,
+               <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a>   user_data)</pre>
+<p>Flags: <a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-SIGNAL-NO-HOOKS:CAPS">No Hooks</a></p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstPlayer-volume-changed"></a><h3>The <code class="literal">“volume-changed”</code> signal</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+user_function (<a class="link" href="gst-plugins-bad-libs-gstplayer.html#GstPlayer"><span class="type">GstPlayer</span></a> *gstplayer,
+               <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a>   user_data)</pre>
+<p>Flags: <a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-SIGNAL-NO-HOOKS:CAPS">No Hooks</a></p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstPlayer-warning"></a><h3>The <code class="literal">“warning”</code> signal</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+user_function (<a class="link" href="gst-plugins-bad-libs-gstplayer.html#GstPlayer"><span class="type">GstPlayer</span></a> *gstplayer,
+               <a href="https://developer.gnome.org/glib/unstable/glib-Error-Reporting.html#GError"><span class="type">GError</span></a>    *arg1,
+               <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a>   user_data)</pre>
+<p>Flags: <a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-SIGNAL-NO-HOOKS:CAPS">No Hooks</a></p>
+</div>
+</div>
+</div>
+<div class="footer">
+<hr>Generated by GTK-Doc V1.24</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/libs/html/gst-plugins-bad-libs-h264parser.html b/docs/libs/html/gst-plugins-bad-libs-h264parser.html
index 066b443..a501690 100644
--- a/docs/libs/html/gst-plugins-bad-libs-h264parser.html
+++ b/docs/libs/html/gst-plugins-bad-libs-h264parser.html
@@ -3,7 +3,7 @@
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>h264parser: GStreamer Bad Plugins 1.0 Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
 <link rel="home" href="index.html" title="GStreamer Bad Plugins 1.0 Library Reference Manual">
 <link rel="up" href="codecparsers.html" title="Bitstream parsing Library">
 <link rel="prev" href="codecparsers.html" title="Bitstream parsing Library">
@@ -34,7 +34,7 @@
 </tr></table></div>
 <div class="refsect1">
 <a name="gst-plugins-bad-libs-h264parser.functions"></a><h2>Functions</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="functions_return">
 <col class="functions_name">
@@ -211,7 +211,7 @@
 </div>
 <div class="refsect1">
 <a name="gst-plugins-bad-libs-h264parser.other"></a><h2>Types and Values</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="name">
 <col class="description">
@@ -400,7 +400,7 @@
 </p>
 <div class="refsect3">
 <a name="id-1.2.4.3.7.7.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
 <col class="parameters_description">
@@ -457,7 +457,7 @@
 .</p>
 <div class="refsect3">
 <a name="id-1.2.4.3.7.8.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
 <col class="parameters_description">
@@ -516,7 +516,7 @@
  is up to date.</p>
 <div class="refsect3">
 <a name="id-1.2.4.3.7.9.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
 <col class="parameters_description">
@@ -555,7 +555,7 @@
  structure.</p>
 <div class="refsect3">
 <a name="id-1.2.4.3.7.10.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
 <col class="parameters_description">
@@ -608,7 +608,7 @@
  structure.</p>
 <div class="refsect3">
 <a name="id-1.2.4.3.7.11.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
 <col class="parameters_description">
@@ -659,7 +659,7 @@
 to parsing a new PPS NAL unit.</p>
 <div class="refsect3">
 <a name="id-1.2.4.3.7.12.6"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
 <col class="parameters_description">
@@ -701,7 +701,7 @@
  array.</p>
 <div class="refsect3">
 <a name="id-1.2.4.3.7.13.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
 <col class="parameters_description">
@@ -752,7 +752,7 @@
  and sets it to <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a></p>
 <div class="refsect3">
 <a name="id-1.2.4.3.7.15.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
 <col class="parameters_description">
@@ -778,7 +778,7 @@
  structure.</p>
 <div class="refsect3">
 <a name="id-1.2.4.3.7.16.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
 <col class="parameters_description">
@@ -824,7 +824,7 @@
 to parsing a new PPS NAL unit.</p>
 <div class="refsect3">
 <a name="id-1.2.4.3.7.17.6"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
 <col class="parameters_description">
@@ -863,7 +863,7 @@
  internal resources.</p>
 <div class="refsect3">
 <a name="id-1.2.4.3.7.18.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
 <col class="parameters_description">
@@ -895,7 +895,7 @@
  arguments.</p>
 <div class="refsect3">
 <a name="id-1.2.4.3.7.19.6"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
 <col class="parameters_description">
@@ -934,7 +934,7 @@
  arguments.</p>
 <div class="refsect3">
 <a name="id-1.2.4.3.7.20.6"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
 <col class="parameters_description">
@@ -973,7 +973,7 @@
  arguments.</p>
 <div class="refsect3">
 <a name="id-1.2.4.3.7.21.6"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
 <col class="parameters_description">
@@ -1012,7 +1012,7 @@
  arguments.</p>
 <div class="refsect3">
 <a name="id-1.2.4.3.7.22.6"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
 <col class="parameters_description">
@@ -1055,7 +1055,7 @@
  to 1.</p>
 <div class="refsect3">
 <a name="id-1.2.4.3.7.23.6"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
 <col class="parameters_description">
@@ -1113,7 +1113,7 @@
 <p>Indicates the type of H264 Nal Units</p>
 <div class="refsect3">
 <a name="id-1.2.4.3.8.4.4"></a><h4>Members</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="300px" class="enum_members_name">
 <col class="enum_members_description">
@@ -1270,7 +1270,7 @@
 <p>The result of parsing H264 data.</p>
 <div class="refsect3">
 <a name="id-1.2.4.3.8.5.4"></a><h4>Members</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="300px" class="enum_members_name">
 <col class="enum_members_description">
@@ -1329,7 +1329,7 @@
 <p>The type of SEI message.</p>
 <div class="refsect3">
 <a name="id-1.2.4.3.8.6.4"></a><h4>Members</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="300px" class="enum_members_name">
 <col class="enum_members_description">
@@ -1383,7 +1383,7 @@
 <p>SEI pic_struct type</p>
 <div class="refsect3">
 <a name="id-1.2.4.3.8.7.4"></a><h4>Members</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="300px" class="enum_members_name">
 <col class="enum_members_description">
@@ -1465,7 +1465,7 @@
 <p>Type of Picture slice</p>
 <div class="refsect3">
 <a name="id-1.2.4.3.8.8.4"></a><h4>Members</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="300px" class="enum_members_name">
 <col class="enum_members_description">
@@ -1560,7 +1560,7 @@
 <p>Structure defining the Nal unit headers</p>
 <div class="refsect3">
 <a name="id-1.2.4.3.8.10.5"></a><h4>Members</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="300px" class="struct_members_name">
 <col class="struct_members_description">
@@ -1710,7 +1710,7 @@
 <p>H264 Sequence Parameter Set (SPS)</p>
 <div class="refsect3">
 <a name="id-1.2.4.3.8.11.5"></a><h4>Members</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="300px" class="struct_members_name">
 <col class="struct_members_description">
@@ -2047,7 +2047,7 @@
 <p>Defines the HRD parameters</p>
 <div class="refsect3">
 <a name="id-1.2.4.3.8.13.5"></a><h4>Members</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="300px" class="struct_members_name">
 <col class="struct_members_description">
@@ -2178,7 +2178,7 @@
 <p>The structure representing the VUI parameters.</p>
 <div class="refsect3">
 <a name="id-1.2.4.3.8.14.5"></a><h4>Members</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="300px" class="struct_members_name">
 <col class="struct_members_description">
diff --git a/docs/libs/html/gst-plugins-bad-libs-jpegparser.html b/docs/libs/html/gst-plugins-bad-libs-jpegparser.html
index b8aa24e..34d2f5c 100644
--- a/docs/libs/html/gst-plugins-bad-libs-jpegparser.html
+++ b/docs/libs/html/gst-plugins-bad-libs-jpegparser.html
@@ -3,7 +3,7 @@
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>jpegparser: GStreamer Bad Plugins 1.0 Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
 <link rel="home" href="index.html" title="GStreamer Bad Plugins 1.0 Library Reference Manual">
 <link rel="up" href="codecparsers.html" title="Bitstream parsing Library">
 <link rel="prev" href="gst-plugins-bad-libs-h264parser.html" title="h264parser">
@@ -33,7 +33,7 @@
 </tr></table></div>
 <div class="refsect1">
 <a name="gst-plugins-bad-libs-jpegparser.functions"></a><h2>Functions</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="functions_return">
 <col class="functions_name">
@@ -108,7 +108,7 @@
 </div>
 <div class="refsect1">
 <a name="gst-plugins-bad-libs-jpegparser.other"></a><h2>Types and Values</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="name">
 <col class="description">
@@ -223,7 +223,7 @@
 data available when parsing the segment.</p>
 <div class="refsect3">
 <a name="id-1.2.4.4.7.2.6"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
 <col class="parameters_description">
@@ -273,7 +273,7 @@
 available.</p>
 <div class="refsect3">
 <a name="id-1.2.4.4.7.3.6"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
 <col class="parameters_description">
@@ -312,7 +312,7 @@
 available.</p>
 <div class="refsect3">
 <a name="id-1.2.4.4.7.4.6"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
 <col class="parameters_description">
@@ -357,7 +357,7 @@
 <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a>;</p>
 <div class="refsect3">
 <a name="id-1.2.4.4.7.5.7"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
 <col class="parameters_description">
@@ -403,7 +403,7 @@
 table will also be set to <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a>.</p>
 <div class="refsect3">
 <a name="id-1.2.4.4.7.6.7"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
 <col class="parameters_description">
@@ -440,7 +440,7 @@
 available.</p>
 <div class="refsect3">
 <a name="id-1.2.4.4.7.7.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
 <col class="parameters_description">
@@ -483,7 +483,7 @@
 specified by the JPEG standard.</p>
 <div class="refsect3">
 <a name="id-1.2.4.4.7.9.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
 <col class="parameters_description">
@@ -566,7 +566,7 @@
 <p>JPEG entropy coding mode.</p>
 <div class="refsect3">
 <a name="id-1.2.4.4.8.11.4"></a><h4>Members</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="300px" class="enum_members_name">
 <col class="enum_members_description">
@@ -598,7 +598,7 @@
 <p>JPEG encoding processes.</p>
 <div class="refsect3">
 <a name="id-1.2.4.4.8.12.4"></a><h4>Members</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="300px" class="enum_members_name">
 <col class="enum_members_description">
@@ -651,7 +651,7 @@
 <p>A structure that contains the type of a segment, its offset and its size.</p>
 <div class="refsect3">
 <a name="id-1.2.4.4.8.13.5"></a><h4>Members</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="300px" class="struct_members_name">
 <col class="struct_members_description">
@@ -702,7 +702,7 @@
 <p>Frame header.</p>
 <div class="refsect3">
 <a name="id-1.2.4.4.8.14.5"></a><h4>Members</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="300px" class="struct_members_name">
 <col class="struct_members_description">
@@ -752,7 +752,7 @@
 <p>Component-specification parameters.</p>
 <div class="refsect3">
 <a name="id-1.2.4.4.8.15.5"></a><h4>Members</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="300px" class="struct_members_name">
 <col class="struct_members_description">
@@ -795,7 +795,7 @@
 <p>Scan header.</p>
 <div class="refsect3">
 <a name="id-1.2.4.4.8.16.5"></a><h4>Members</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="300px" class="struct_members_name">
 <col class="struct_members_description">
@@ -829,7 +829,7 @@
 <p>Component-specification parameters.</p>
 <div class="refsect3">
 <a name="id-1.2.4.4.8.17.5"></a><h4>Members</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="300px" class="struct_members_name">
 <col class="struct_members_description">
@@ -868,7 +868,7 @@
 decode an image.</p>
 <div class="refsect3">
 <a name="id-1.2.4.4.8.18.5"></a><h4>Members</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="300px" class="struct_members_name">
 <col class="struct_members_description">
@@ -902,7 +902,7 @@
 <p>Huffman table.</p>
 <div class="refsect3">
 <a name="id-1.2.4.4.8.19.5"></a><h4>Members</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="300px" class="struct_members_name">
 <col class="struct_members_description">
@@ -942,7 +942,7 @@
 <p>Quantization table.</p>
 <div class="refsect3">
 <a name="id-1.2.4.4.8.20.5"></a><h4>Members</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="300px" class="struct_members_name">
 <col class="struct_members_description">
diff --git a/docs/libs/html/gst-plugins-bad-libs-mpeg4parser.html b/docs/libs/html/gst-plugins-bad-libs-mpeg4parser.html
index 04c76e8..6d08dd6 100644
--- a/docs/libs/html/gst-plugins-bad-libs-mpeg4parser.html
+++ b/docs/libs/html/gst-plugins-bad-libs-mpeg4parser.html
@@ -3,7 +3,7 @@
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>mpeg4parser: GStreamer Bad Plugins 1.0 Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
 <link rel="home" href="index.html" title="GStreamer Bad Plugins 1.0 Library Reference Manual">
 <link rel="up" href="codecparsers.html" title="Bitstream parsing Library">
 <link rel="prev" href="gst-plugins-bad-libs-mpegvideoparser.html" title="mpegvideoparser">
@@ -34,7 +34,7 @@
 </tr></table></div>
 <div class="refsect1">
 <a name="gst-plugins-bad-libs-mpeg4parser.functions"></a><h2>Functions</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="functions_return">
 <col class="functions_name">
@@ -101,7 +101,7 @@
 </div>
 <div class="refsect1">
 <a name="gst-plugins-bad-libs-mpeg4parser.other"></a><h2>Types and Values</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="name">
 <col class="description">
@@ -217,7 +217,7 @@
 found.</p>
 <div class="refsect3">
 <a name="id-1.2.4.6.7.2.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
 <col class="parameters_description">
@@ -279,7 +279,7 @@
 structure.</p>
 <div class="refsect3">
 <a name="id-1.2.4.6.7.3.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
 <col class="parameters_description">
@@ -333,7 +333,7 @@
  structure.</p>
 <div class="refsect3">
 <a name="id-1.2.4.6.7.4.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
 <col class="parameters_description">
@@ -378,7 +378,7 @@
  structure.</p>
 <div class="refsect3">
 <a name="id-1.2.4.6.7.5.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
 <col class="parameters_description">
@@ -428,7 +428,7 @@
  structure.</p>
 <div class="refsect3">
 <a name="id-1.2.4.6.7.6.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
 <col class="parameters_description">
@@ -479,7 +479,7 @@
  structure.</p>
 <div class="refsect3">
 <a name="id-1.2.4.6.7.7.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
 <col class="parameters_description">
@@ -527,7 +527,7 @@
  structure</p>
 <div class="refsect3">
 <a name="id-1.2.4.6.7.8.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
 <col class="parameters_description">
@@ -580,7 +580,7 @@
 defined in: Table 6-3 — Start code values</p>
 <div class="refsect3">
 <a name="id-1.2.4.6.8.2.4"></a><h4>Members</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="300px" class="enum_members_name">
 <col class="enum_members_description">
@@ -718,7 +718,7 @@
 defined in: Table 6-5 -- Meaning of visual object type</p>
 <div class="refsect3">
 <a name="id-1.2.4.6.8.3.4"></a><h4>Members</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="300px" class="enum_members_name">
 <col class="enum_members_description">
@@ -761,7 +761,7 @@
 defined in: Table 6-12 -- Meaning of pixel aspect ratio</p>
 <div class="refsect3">
 <a name="id-1.2.4.6.8.4.4"></a><h4>Members</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="300px" class="enum_members_name">
 <col class="enum_members_description">
@@ -820,7 +820,7 @@
 <p>Result type of any parsing function.</p>
 <div class="refsect3">
 <a name="id-1.2.4.6.8.5.4"></a><h4>Members</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="300px" class="enum_members_name">
 <col class="enum_members_description">
@@ -871,7 +871,7 @@
 Table 6-20 -- Meaning of vop_coding_type</p>
 <div class="refsect3">
 <a name="id-1.2.4.6.8.6.4"></a><h4>Members</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="300px" class="enum_members_name">
 <col class="enum_members_description">
@@ -917,7 +917,7 @@
 defined in: Table 6-13 -- Meaning of chroma_format</p>
 <div class="refsect3">
 <a name="id-1.2.4.6.8.7.4"></a><h4>Members</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="300px" class="enum_members_name">
 <col class="enum_members_description">
@@ -938,7 +938,7 @@
 Table 6-16 — Video Object Layer shape type</p>
 <div class="refsect3">
 <a name="id-1.2.4.6.8.8.4"></a><h4>Members</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="300px" class="enum_members_name">
 <col class="enum_members_description">
@@ -977,7 +977,7 @@
 Table V2 - 2 -- Meaning of sprite_enable codewords</p>
 <div class="refsect3">
 <a name="id-1.2.4.6.8.9.4"></a><h4>Members</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="300px" class="enum_members_name">
 <col class="enum_members_description">
@@ -1012,7 +1012,7 @@
 Table G.1 — FLC table for profile_and_level_indication</p>
 <div class="refsect3">
 <a name="id-1.2.4.6.8.10.5"></a><h4>Members</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="300px" class="enum_members_name">
 <col class="enum_members_description">
@@ -1132,7 +1132,7 @@
 Table G.1 — FLC table for profile_and_level_indication</p>
 <div class="refsect3">
 <a name="id-1.2.4.6.8.11.5"></a><h4>Members</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="300px" class="enum_members_name">
 <col class="enum_members_description">
@@ -1462,7 +1462,7 @@
 <p>A structure that contains the type of a packet, its offset and its size</p>
 <div class="refsect3">
 <a name="id-1.2.4.6.8.20.5"></a><h4>Members</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="300px" class="struct_members_name">
 <col class="struct_members_description">
@@ -1515,7 +1515,7 @@
 6.2.5.2 Video Plane with Short Header</p>
 <div class="refsect3">
 <a name="id-1.2.4.6.8.21.5"></a><h4>Members</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="300px" class="struct_members_name">
 <col class="struct_members_description">
diff --git a/docs/libs/html/gst-plugins-bad-libs-mpegvideoparser.html b/docs/libs/html/gst-plugins-bad-libs-mpegvideoparser.html
index 17486e0..a2323d1 100644
--- a/docs/libs/html/gst-plugins-bad-libs-mpegvideoparser.html
+++ b/docs/libs/html/gst-plugins-bad-libs-mpegvideoparser.html
@@ -3,7 +3,7 @@
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>mpegvideoparser: GStreamer Bad Plugins 1.0 Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
 <link rel="home" href="index.html" title="GStreamer Bad Plugins 1.0 Library Reference Manual">
 <link rel="up" href="codecparsers.html" title="Bitstream parsing Library">
 <link rel="prev" href="gst-plugins-bad-libs-jpegparser.html" title="jpegparser">
@@ -34,7 +34,7 @@
 </tr></table></div>
 <div class="refsect1">
 <a name="gst-plugins-bad-libs-mpegvideoparser.functions"></a><h2>Functions</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="functions_return">
 <col class="functions_name">
@@ -133,7 +133,7 @@
 </div>
 <div class="refsect1">
 <a name="gst-plugins-bad-libs-mpegvideoparser.other"></a><h2>Types and Values</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="name">
 <col class="description">
@@ -219,7 +219,7 @@
 the data to find the next packet if needed.</p>
 <div class="refsect3">
 <a name="id-1.2.4.5.7.2.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
 <col class="parameters_description">
@@ -273,7 +273,7 @@
 </p>
 <div class="refsect3">
 <a name="id-1.2.4.5.7.3.6"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
 <col class="parameters_description">
@@ -327,7 +327,7 @@
 </p>
 <div class="refsect3">
 <a name="id-1.2.4.5.7.4.6"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
 <col class="parameters_description">
@@ -382,7 +382,7 @@
 </p>
 <div class="refsect3">
 <a name="id-1.2.4.5.7.5.6"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
 <col class="parameters_description">
@@ -436,7 +436,7 @@
 </p>
 <div class="refsect3">
 <a name="id-1.2.4.5.7.6.6"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
 <col class="parameters_description">
@@ -490,7 +490,7 @@
 </p>
 <div class="refsect3">
 <a name="id-1.2.4.5.7.7.6"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
 <col class="parameters_description">
@@ -557,7 +557,7 @@
 </p>
 <div class="refsect3">
 <a name="id-1.2.4.5.7.9.6"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
 <col class="parameters_description">
@@ -620,7 +620,7 @@
  arguments.</p>
 <div class="refsect3">
 <a name="id-1.2.4.5.7.11.6"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
 <col class="parameters_description">
@@ -659,7 +659,7 @@
  arguments.</p>
 <div class="refsect3">
 <a name="id-1.2.4.5.7.12.6"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
 <col class="parameters_description">
@@ -689,7 +689,7 @@
 <p>Indicates the type of MPEG packet</p>
 <div class="refsect3">
 <a name="id-1.2.4.5.8.2.4"></a><h4>Members</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="300px" class="enum_members_name">
 <col class="enum_members_description">
@@ -771,7 +771,7 @@
 Picture may occur together or separately.</p>
 <div class="refsect3">
 <a name="id-1.2.4.5.8.3.4"></a><h4>Members</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="300px" class="enum_members_name">
 <col class="enum_members_description">
@@ -823,7 +823,7 @@
 <p>Mpeg-2 Levels.</p>
 <div class="refsect3">
 <a name="id-1.2.4.5.8.4.4"></a><h4>Members</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="300px" class="enum_members_name">
 <col class="enum_members_description">
@@ -868,7 +868,7 @@
 <p>Mpeg-2 Profiles.</p>
 <div class="refsect3">
 <a name="id-1.2.4.5.8.5.4"></a><h4>Members</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="300px" class="enum_members_name">
 <col class="enum_members_description">
@@ -927,7 +927,7 @@
 <p>Picture type.</p>
 <div class="refsect3">
 <a name="id-1.2.4.5.8.6.4"></a><h4>Members</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="300px" class="enum_members_name">
 <col class="enum_members_description">
@@ -972,7 +972,7 @@
 <p>Picture structure type.</p>
 <div class="refsect3">
 <a name="id-1.2.4.5.8.7.4"></a><h4>Members</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="300px" class="enum_members_name">
 <col class="enum_members_description">
@@ -1028,7 +1028,7 @@
 <p>The Mpeg2 Video Sequence Header structure.</p>
 <div class="refsect3">
 <a name="id-1.2.4.5.8.8.5"></a><h4>Members</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="300px" class="struct_members_name">
 <col class="struct_members_description">
@@ -1127,12 +1127,15 @@
   guint8 vbv_buffer_size_extension;
   guint8 low_delay;
   guint8 fps_n_ext, fps_d_ext;
+
+  /* Additional information */
+  guint8 profile_level_escape_bit;
 };
 </pre>
 <p>The Mpeg2 Video Sequence Extension structure.</p>
 <div class="refsect3">
 <a name="id-1.2.4.5.8.9.5"></a><h4>Members</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="300px" class="struct_members_name">
 <col class="struct_members_description">
@@ -1195,6 +1198,14 @@
 <td class="struct_member_description"><p>Framerate denominator code</p></td>
 <td class="struct_member_annotations"> </td>
 </tr>
+<tr>
+<td class="struct_member_name"><p><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#guint8"><span class="type">guint8</span></a> <em class="structfield"><code><a name="GstMpegVideoSequenceExt.profile-level-escape-bit"></a>profile_level_escape_bit</code></em>;</p></td>
+<td class="struct_member_description"><p>Escape bit. If set, the meaning of the
+<em class="parameter"><code>profile</code></em>
+and <em class="parameter"><code>level</code></em>
+fields is different.</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
 </tbody>
 </table></div>
 </div>
@@ -1214,7 +1225,7 @@
 <p>The Mpeg2 Video Picture Header structure.</p>
 <div class="refsect3">
 <a name="id-1.2.4.5.8.10.5"></a><h4>Members</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="300px" class="struct_members_name">
 <col class="struct_members_description">
@@ -1267,7 +1278,7 @@
 <p>The Mpeg Video Group of Picture structure.</p>
 <div class="refsect3">
 <a name="id-1.2.4.5.8.11.5"></a><h4>Members</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="300px" class="struct_members_name">
 <col class="struct_members_description">
@@ -1341,7 +1352,7 @@
 <p>The Mpeg2 Video Picture Extension structure.</p>
 <div class="refsect3">
 <a name="id-1.2.4.5.8.12.5"></a><h4>Members</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="300px" class="struct_members_name">
 <col class="struct_members_description">
diff --git a/docs/libs/html/gst-plugins-bad-libs-vc1parser.html b/docs/libs/html/gst-plugins-bad-libs-vc1parser.html
index 8e59b2f..bfca072 100644
--- a/docs/libs/html/gst-plugins-bad-libs-vc1parser.html
+++ b/docs/libs/html/gst-plugins-bad-libs-vc1parser.html
@@ -3,7 +3,7 @@
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>vc1parser: GStreamer Bad Plugins 1.0 Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
 <link rel="home" href="index.html" title="GStreamer Bad Plugins 1.0 Library Reference Manual">
 <link rel="up" href="codecparsers.html" title="Bitstream parsing Library">
 <link rel="prev" href="gst-plugins-bad-libs-mpeg4parser.html" title="mpeg4parser">
@@ -34,7 +34,7 @@
 </tr></table></div>
 <div class="refsect1">
 <a name="gst-plugins-bad-libs-vc1parser.functions"></a><h2>Functions</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="functions_return">
 <col class="functions_name">
@@ -141,7 +141,7 @@
 </div>
 <div class="refsect1">
 <a name="gst-plugins-bad-libs-vc1parser.other"></a><h2>Types and Values</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="name">
 <col class="description">
@@ -273,7 +273,7 @@
  fields</p>
 <div class="refsect3">
 <a name="id-1.2.4.7.7.2.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
 <col class="parameters_description">
@@ -316,7 +316,7 @@
  fields.</p>
 <div class="refsect3">
 <a name="id-1.2.4.7.7.3.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
 <col class="parameters_description">
@@ -359,7 +359,7 @@
  fields.</p>
 <div class="refsect3">
 <a name="id-1.2.4.7.7.4.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
 <col class="parameters_description">
@@ -403,7 +403,7 @@
  fields.</p>
 <div class="refsect3">
 <a name="id-1.2.4.7.7.5.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
 <col class="parameters_description">
@@ -447,7 +447,7 @@
  fields.</p>
 <div class="refsect3">
 <a name="id-1.2.4.7.7.6.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
 <col class="parameters_description">
@@ -491,7 +491,7 @@
  fields.</p>
 <div class="refsect3">
 <a name="id-1.2.4.7.7.7.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
 <col class="parameters_description">
@@ -535,7 +535,7 @@
  fields.</p>
 <div class="refsect3">
 <a name="id-1.2.4.7.7.8.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
 <col class="parameters_description">
@@ -585,7 +585,7 @@
  fields.</p>
 <div class="refsect3">
 <a name="id-1.2.4.7.7.9.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
 <col class="parameters_description">
@@ -664,7 +664,7 @@
 if in advanced mode.</p>
 <div class="refsect3">
 <a name="id-1.2.4.7.7.13.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
 <col class="parameters_description">
@@ -709,7 +709,7 @@
 <a name="GstVC1StartCode"></a><h3>enum GstVC1StartCode</h3>
 <div class="refsect3">
 <a name="id-1.2.4.7.8.4.3"></a><h4>Members</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="300px" class="enum_members_name">
 <col class="enum_members_description">
@@ -780,7 +780,7 @@
 <a name="GstVC1Profile"></a><h3>enum GstVC1Profile</h3>
 <div class="refsect3">
 <a name="id-1.2.4.7.8.5.3"></a><h4>Members</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="300px" class="enum_members_name">
 <col class="enum_members_description">
@@ -816,7 +816,7 @@
 <a name="GstVC1ParserResult"></a><h3>enum GstVC1ParserResult</h3>
 <div class="refsect3">
 <a name="id-1.2.4.7.8.6.3"></a><h4>Members</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="300px" class="enum_members_name">
 <col class="enum_members_description">
@@ -857,7 +857,7 @@
 <a name="GstVC1PictureType"></a><h3>enum GstVC1PictureType</h3>
 <div class="refsect3">
 <a name="id-1.2.4.7.8.7.3"></a><h4>Members</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="300px" class="enum_members_name">
 <col class="enum_members_description">
@@ -898,7 +898,7 @@
 <a name="GstVC1Level"></a><h3>enum GstVC1Level</h3>
 <div class="refsect3">
 <a name="id-1.2.4.7.8.8.3"></a><h4>Members</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="300px" class="enum_members_name">
 <col class="enum_members_description">
@@ -959,7 +959,7 @@
 <a name="GstVC1QuantizerSpec"></a><h3>enum GstVC1QuantizerSpec</h3>
 <div class="refsect3">
 <a name="id-1.2.4.7.8.9.3"></a><h4>Members</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="300px" class="enum_members_name">
 <col class="enum_members_description">
@@ -995,7 +995,7 @@
 <a name="GstVC1DQProfile"></a><h3>enum GstVC1DQProfile</h3>
 <div class="refsect3">
 <a name="id-1.2.4.7.8.10.3"></a><h4>Members</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="300px" class="enum_members_name">
 <col class="enum_members_description">
@@ -1031,7 +1031,7 @@
 <a name="GstVC1Condover"></a><h3>enum GstVC1Condover</h3>
 <div class="refsect3">
 <a name="id-1.2.4.7.8.11.3"></a><h4>Members</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="300px" class="enum_members_name">
 <col class="enum_members_description">
@@ -1062,7 +1062,7 @@
 <a name="GstVC1MvMode"></a><h3>enum GstVC1MvMode</h3>
 <div class="refsect3">
 <a name="id-1.2.4.7.8.12.3"></a><h4>Members</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="300px" class="enum_members_name">
 <col class="enum_members_description">
@@ -1401,7 +1401,7 @@
 </pre>
 <div class="refsect3">
 <a name="id-1.2.4.7.8.22.4"></a><h4>Members</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="300px" class="struct_members_name">
 <col class="struct_members_description">
@@ -1694,7 +1694,7 @@
 </pre>
 <div class="refsect3">
 <a name="id-1.2.4.7.8.23.4"></a><h4>Members</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="300px" class="struct_members_name">
 <col class="struct_members_description">
diff --git a/docs/libs/html/gstreamer-libs-hierarchy.html b/docs/libs/html/gstreamer-libs-hierarchy.html
index 2de97d4..c898673 100644
--- a/docs/libs/html/gstreamer-libs-hierarchy.html
+++ b/docs/libs/html/gstreamer-libs-hierarchy.html
@@ -3,7 +3,7 @@
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Part II. Object Hierarchy: GStreamer Bad Plugins 1.0 Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
 <link rel="home" href="index.html" title="GStreamer Bad Plugins 1.0 Library Reference Manual">
 <link rel="up" href="index.html" title="GStreamer Bad Plugins 1.0 Library Reference Manual">
 <link rel="prev" href="gst-plugins-bad-libs-GstPhotography.html" title="GstPhotography">
@@ -27,8 +27,10 @@
     <span class="lineart">├──</span> <a href="https://developer.gnome.org/gobject/unstable/gobject-The-Base-Object-Type.html#GInitiallyUnowned">GInitiallyUnowned</a>
     <span class="lineart">│</span>   <span class="lineart">╰──</span> <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstObject.html">GstObject</a>
     <span class="lineart">│</span>       <span class="lineart">├──</span> <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstAllocator.html">GstAllocator</a>
-    <span class="lineart">│</span>       <span class="lineart">│</span>   <span class="lineart">╰──</span> GstGLBaseBufferAllocator
-    <span class="lineart">│</span>       <span class="lineart">│</span>       <span class="lineart">╰──</span> <a class="link" href="gst-plugins-bad-libs-gstglmemory.html#GstGLAllocator">GstGLAllocator</a>
+    <span class="lineart">│</span>       <span class="lineart">│</span>   <span class="lineart">╰──</span> <a class="link" href="gst-plugins-bad-libs-gstglbasememory.html#GstGLBaseMemoryAllocator">GstGLBaseMemoryAllocator</a>
+    <span class="lineart">│</span>       <span class="lineart">│</span>       <span class="lineart">├──</span> <a class="link" href="gst-plugins-bad-libs-GstGLBuffer.html#GstGLBufferAllocator">GstGLBufferAllocator</a>
+    <span class="lineart">│</span>       <span class="lineart">│</span>       <span class="lineart">╰──</span> <a class="link" href="gst-plugins-bad-libs-GstGLMemory.html#GstGLMemoryAllocator">GstGLMemoryAllocator</a>
+    <span class="lineart">│</span>       <span class="lineart">│</span>           <span class="lineart">╰──</span> <a class="link" href="gst-plugins-bad-libs-gstglmemorypbo.html#GstGLMemoryPBOAllocator">GstGLMemoryPBOAllocator</a>
     <span class="lineart">│</span>       <span class="lineart">├──</span> <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html">GstElement</a>
     <span class="lineart">│</span>       <span class="lineart">│</span>   <span class="lineart">├──</span> <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstBin.html">GstBin</a>
     <span class="lineart">│</span>       <span class="lineart">│</span>   <span class="lineart">│</span>   <span class="lineart">╰──</span> <a class="link" href="gst-plugins-bad-libs-GstInsertbin.html#GstInsertBin">GstInsertBin</a>
@@ -40,15 +42,26 @@
     <span class="lineart">│</span>       <span class="lineart">├──</span> <a class="link" href="GstGLColorConvert.html" title="GstGLColorConvert">GstGLColorConvert</a>
     <span class="lineart">│</span>       <span class="lineart">├──</span> <a class="link" href="GstGLContext.html" title="GstGLContext">GstGLContext</a>
     <span class="lineart">│</span>       <span class="lineart">├──</span> <a class="link" href="GstGLDisplay.html" title="GstGLDisplay">GstGLDisplay</a>
-    <span class="lineart">│</span>       <span class="lineart">├──</span> <a class="link" href="GstGLDownload.html" title="GstGLDownload">GstGLDownload</a>
-    <span class="lineart">│</span>       <span class="lineart">├──</span> <a class="link" href="gst-plugins-bad-libs-gstglshader.html#GstGLShader">GstGLShader</a>
+    <span class="lineart">│</span>       <span class="lineart">├──</span> <a class="link" href="GstGLShader.html" title="GstGLShader">GstGLShader</a>
+    <span class="lineart">│</span>       <span class="lineart">├──</span> <a class="link" href=".html#GstGLSLStage">GstGLSLStage</a>
     <span class="lineart">│</span>       <span class="lineart">├──</span> <a class="link" href="GstGLUpload.html" title="GstGLUpload">GstGLUpload</a>
-    <span class="lineart">│</span>       <span class="lineart">├──</span> <a class="link" href="GstGLUploadMeta.html" title="GstGLUploadMeta">GstGLUploadMeta</a>
-    <span class="lineart">│</span>       <span class="lineart">╰──</span> <a class="link" href="GstGLWindow.html" title="GstGLWindow">GstGLWindow</a>
-    <span class="lineart">╰──</span> <a class="link" href="GstGLFramebuffer.html" title="GstGLFramebuffer">GstGLFramebuffer</a>
+    <span class="lineart">│</span>       <span class="lineart">├──</span> GstGLViewConvert
+    <span class="lineart">│</span>       <span class="lineart">├──</span> <a class="link" href="GstGLWindow.html" title="GstGLWindow">GstGLWindow</a>
+    <span class="lineart">│</span>       <span class="lineart">╰──</span> <a class="link" href="gst-plugins-bad-libs-gstplayer.html#GstPlayer">GstPlayer</a>
+    <span class="lineart">├──</span> <a class="link" href="GstGLFramebuffer.html" title="GstGLFramebuffer">GstGLFramebuffer</a>
+    <span class="lineart">├──</span> <a class="link" href="gst-plugins-bad-libs-gstplayer-mediainfo.html#GstPlayerStreamInfo">GstPlayerStreamInfo</a>
+    <span class="lineart">│</span>   <span class="lineart">├──</span> <a class="link" href="gst-plugins-bad-libs-gstplayer-mediainfo.html#GstPlayerAudioInfo">GstPlayerAudioInfo</a>
+    <span class="lineart">│</span>   <span class="lineart">├──</span> <a class="link" href="gst-plugins-bad-libs-gstplayer-mediainfo.html#GstPlayerSubtitleInfo">GstPlayerSubtitleInfo</a>
+    <span class="lineart">│</span>   <span class="lineart">╰──</span> <a class="link" href="gst-plugins-bad-libs-gstplayer-mediainfo.html#GstPlayerVideoInfo">GstPlayerVideoInfo</a>
+    <span class="lineart">├──</span> <a class="link" href="gst-plugins-bad-libs-gstplayer-mediainfo.html#GstPlayerMediaInfo">GstPlayerMediaInfo</a>
+    <span class="lineart">╰──</span> GstPlayerVideoOverlayVideoRenderer
+    <a href="https://developer.gnome.org/gobject/unstable/GTypeModule.html">GInterface</a>
+    <span class="lineart">├──</span> <a class="link" href="gst-plugins-bad-libs-gstplayer.html#GstPlayerSignalDispatcher">GstPlayerSignalDispatcher</a>
+    <span class="lineart">╰──</span> <a class="link" href="gst-plugins-bad-libs-gstplayer.html#GstPlayerVideoRenderer">GstPlayerVideoRenderer</a>
     <a href="https://developer.gnome.org/gobject/unstable/gobject-Boxed-Types.html">GBoxed</a>
     <span class="lineart">├──</span> <a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-sections.html#GstMpegtsSection">GstMpegtsSection</a>
-    <span class="lineart">╰──</span> <a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-descriptors.html#GstMpegtsDescriptor">GstMpegtsDescriptor</a>
+    <span class="lineart">├──</span> <a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-descriptors.html#GstMpegtsDescriptor">GstMpegtsDescriptor</a>
+    <span class="lineart">╰──</span> <a class="link" href="gst-plugins-bad-libs-gstplayer-visualization.html#GstPlayerVisualization">GstPlayerVisualization</a>
     <a href="https://developer.gnome.org/gobject/unstable/gobject-Enumeration-and-Flag-Types.html">GEnum</a>
     <span class="lineart">├──</span> <a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-sections.html#GstMpegtsSectionType" title="enum GstMpegtsSectionType">GstMpegtsSectionType</a>
     <span class="lineart">├──</span> <a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-sections.html#GstMpegtsSectionTableID" title="enum GstMpegtsSectionTableID">GstMpegtsSectionTableID</a>
@@ -61,7 +74,11 @@
     <span class="lineart">├──</span> <a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-descriptors.html#GstMpegtsIso639AudioType" title="enum GstMpegtsIso639AudioType">GstMpegtsIso639AudioType</a>
     <span class="lineart">├──</span> <a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-sections.html#GstMpegtsRunningStatus" title="enum GstMpegtsRunningStatus">GstMpegtsRunningStatus</a>
     <span class="lineart">├──</span> <a class="link" href="gst-plugins-bad-libs-DVB-variants-of-MPEG-TS-descriptors.html#GstMpegtsDVBServiceType" title="enum GstMpegtsDVBServiceType">GstMpegtsDVBServiceType</a>
-    <span class="lineart">╰──</span> <a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-sections.html#GstMpegtsStreamType" title="enum GstMpegtsStreamType">GstMpegtsStreamType</a>
+    <span class="lineart">├──</span> <a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-sections.html#GstMpegtsStreamType" title="enum GstMpegtsStreamType">GstMpegtsStreamType</a>
+    <span class="lineart">├──</span> <a class="link" href="gst-plugins-bad-libs-gstplayer.html#GstPlayerColorBalanceType" title="enum GstPlayerColorBalanceType">GstPlayerColorBalanceType</a>
+    <span class="lineart">├──</span> <a class="link" href="gst-plugins-bad-libs-gstplayer.html#GstPlayerError" title="enum GstPlayerError">GstPlayerError</a>
+    <span class="lineart">├──</span> <a class="link" href="gst-plugins-bad-libs-gstplayer.html#GstPlayerState" title="enum GstPlayerState">GstPlayerState</a>
+    <span class="lineart">╰──</span> GstGLStereoDownmix
 </pre>
 </div>
 <div class="footer">
diff --git a/docs/libs/html/gstreamer-plugins-bad.html b/docs/libs/html/gstreamer-plugins-bad.html
index 46795fa..c2ffb2c 100644
--- a/docs/libs/html/gstreamer-plugins-bad.html
+++ b/docs/libs/html/gstreamer-plugins-bad.html
@@ -3,7 +3,7 @@
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Part I. GStreamer Bad Plugins Libraries: GStreamer Bad Plugins 1.0 Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
 <link rel="home" href="index.html" title="GStreamer Bad Plugins 1.0 Library Reference Manual">
 <link rel="up" href="index.html" title="GStreamer Bad Plugins 1.0 Library Reference Manual">
 <link rel="prev" href="index.html" title="GStreamer Bad Plugins 1.0 Library Reference Manual">
@@ -111,6 +111,15 @@
 <span class="refentrytitle"><a href="gst-plugins-bad-libs-GstGLAPI.html">GstGLAPI</a></span><span class="refpurpose"></span>
 </dt>
 <dt>
+<span class="refentrytitle"><a href="gst-plugins-bad-libs-gstglbasememory.html">GstGLBaseMemory</a></span><span class="refpurpose"> — memory subclass for GL buffers</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="GstGLBaseFilter.html">GstGLBaseFilter</a></span><span class="refpurpose"> — <span class="type">GstBaseTransform</span> subclass for transformin OpenGL resources</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-bad-libs-GstGLBuffer.html">GstGLBuffer</a></span><span class="refpurpose"> — memory subclass for GL buffers</span>
+</dt>
+<dt>
 <span class="refentrytitle"><a href="GstGLBufferPool.html">GstGLBufferPool</a></span><span class="refpurpose"> — buffer pool for <span class="type">GstGLMemory</span> objects</span>
 </dt>
 <dt>
@@ -138,25 +147,28 @@
 <span class="refentrytitle"><a href="GstGLDisplay.html">GstGLDisplay</a></span><span class="refpurpose"> — window system display connection abstraction</span>
 </dt>
 <dt>
-<span class="refentrytitle"><a href="GstGLDownload.html">GstGLDownload</a></span><span class="refpurpose"> — an object that downloads GL textures</span>
-</dt>
-<dt>
 <span class="refentrytitle"><a href="gst-plugins-bad-libs-GstEGLImageMemory.html">GstEGLImageMemory</a></span><span class="refpurpose"></span>
 </dt>
 <dt>
-<span class="refentrytitle"><a href="GstGLBaseFilter.html">GstGLBaseFilter</a></span><span class="refpurpose"></span>
-</dt>
-<dt>
 <span class="refentrytitle"><a href="GstGLFilter.html">GstGLFilter</a></span><span class="refpurpose"></span>
 </dt>
 <dt>
 <span class="refentrytitle"><a href="GstGLFramebuffer.html">GstGLFramebuffer</a></span><span class="refpurpose"></span>
 </dt>
 <dt>
-<span class="refentrytitle"><a href="gst-plugins-bad-libs-gstglmemory.html">GstGLMemory</a></span><span class="refpurpose"> — memory subclass for GL textures</span>
+<span class="refentrytitle"><a href="gst-plugins-bad-libs-GstGLMemory.html">GstGLMemory</a></span><span class="refpurpose"> — memory subclass for GL textures</span>
 </dt>
 <dt>
-<span class="refentrytitle"><a href="gst-plugins-bad-libs-gstglshader.html">GstGLShader</a></span><span class="refpurpose"></span>
+<span class="refentrytitle"><a href="gst-plugins-bad-libs-gstglmemorypbo.html">GstGLMemoryPBO</a></span><span class="refpurpose"> — memory subclass for GL textures</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="GstGLShader.html">GstGLShader</a></span><span class="refpurpose"> — object representing an OpenGL shader program</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-bad-libs-GstGLSL.html">GstGLSL</a></span><span class="refpurpose"> — helpers for dealing with OpenGL shaders</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href=".html">GstGLSLStage</a></span><span class="refpurpose"> — object for dealing with OpenGL shader stages</span>
 </dt>
 <dt>
 <span class="refentrytitle"><a href="gst-plugins-bad-libs-GstGLSyncMeta.html">GstGLSyncMeta</a></span><span class="refpurpose"></span>
@@ -165,12 +177,6 @@
 <span class="refentrytitle"><a href="GstGLUpload.html">GstGLUpload</a></span><span class="refpurpose"> — an object that uploads to GL textures</span>
 </dt>
 <dt>
-<span class="refentrytitle"><a href="GstGLUploadMeta.html">GstGLUploadMeta</a></span><span class="refpurpose"> — an object that provides <span class="type">GstVideoGLTextureUploadMeta</span></span>
-</dt>
-<dt>
-<span class="refentrytitle"><a href="gst-plugins-bad-libs-Utilities.html">Utilities</a></span><span class="refpurpose"></span>
-</dt>
-<dt>
 <span class="refentrytitle"><a href="GstGLWindow.html">GstGLWindow</a></span><span class="refpurpose"> — window/surface abstraction</span>
 </dt>
 <dt>
@@ -191,8 +197,35 @@
 <dt>
 <span class="refentrytitle"><a href="gst-plugins-bad-libs-GstGLWindowX11.html">GstGLWindowX11</a></span><span class="refpurpose"></span>
 </dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-bad-libs-OpenGL-debugging.html">OpenGL debugging</a></span><span class="refpurpose"> — helper routines for dealing with OpenGL debugging</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-bad-libs-OpenGL-Miscellaneous-Utilities.html">OpenGL Miscellaneous Utilities</a></span><span class="refpurpose"></span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-bad-libs-OpenGL-Formats.html">OpenGL Formats</a></span><span class="refpurpose"></span>
+</dt>
 </dl></dd>
-<dt><span class="chapter"><a href="ch07.html">Interfaces</a></span></dt>
+<dt><span class="chapter"><a href="player.html">Player Library</a></span></dt>
+<dd><dl>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-bad-libs-gstplayer.html">gstplayer</a></span><span class="refpurpose"> — Player</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-bad-libs-gstplayer-mediainfo.html">gstplayer-mediainfo</a></span><span class="refpurpose"> — Player Media Information</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-bad-libs-gstplayer-gmaincontextsignaldispatcher.html">gstplayer-gmaincontextsignaldispatcher</a></span><span class="refpurpose"> — Player GLib MainContext dispatcher</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-bad-libs-gstplayer-videooverlayvideorenderer.html">gstplayer-videooverlayvideorenderer</a></span><span class="refpurpose"> — Player Video Overlay Video Renderer</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-bad-libs-gstplayer-visualization.html">gstplayer-visualization</a></span><span class="refpurpose"> — Player Visualization</span>
+</dt>
+</dl></dd>
+<dt><span class="chapter"><a href="ch08.html">Interfaces</a></span></dt>
 <dd><dl><dt>
 <span class="refentrytitle"><a href="gst-plugins-bad-libs-GstPhotography.html">GstPhotography</a></span><span class="refpurpose"> — Interface for digital image capture elements</span>
 </dt></dl></dd>
diff --git a/docs/libs/html/index.html b/docs/libs/html/index.html
index b46acb5..42690c4 100644
--- a/docs/libs/html/index.html
+++ b/docs/libs/html/index.html
@@ -3,7 +3,7 @@
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>GStreamer Bad Plugins 1.0 Library Reference Manual: GStreamer Bad Plugins 1.0 Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
 <link rel="home" href="index.html" title="GStreamer Bad Plugins 1.0 Library Reference Manual">
 <link rel="next" href="gstreamer-plugins-bad.html" title="Part I. GStreamer Bad Plugins Libraries">
 <meta name="generator" content="GTK-Doc V1.24 (XML mode)">
@@ -15,7 +15,7 @@
 <div>
 <div><table class="navigation" id="top" width="100%" cellpadding="2" cellspacing="0"><tr><th valign="middle"><p class="title">GStreamer Bad Plugins 1.0 Library Reference Manual</p></th></tr></table></div>
 <div><p class="releaseinfo">
-      for GStreamer Bad Library 1.0 (1.6.3)
+      for GStreamer Bad Library 1.0 (1.7.91)
       <a class="ulink" href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-bad-libs/html/" target="_top">http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-bad-libs/html/</a>.
     </p></div>
 </div>
@@ -110,6 +110,15 @@
 <span class="refentrytitle"><a href="gst-plugins-bad-libs-GstGLAPI.html">GstGLAPI</a></span><span class="refpurpose"></span>
 </dt>
 <dt>
+<span class="refentrytitle"><a href="gst-plugins-bad-libs-gstglbasememory.html">GstGLBaseMemory</a></span><span class="refpurpose"> — memory subclass for GL buffers</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="GstGLBaseFilter.html">GstGLBaseFilter</a></span><span class="refpurpose"> — <span class="type">GstBaseTransform</span> subclass for transformin OpenGL resources</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-bad-libs-GstGLBuffer.html">GstGLBuffer</a></span><span class="refpurpose"> — memory subclass for GL buffers</span>
+</dt>
+<dt>
 <span class="refentrytitle"><a href="GstGLBufferPool.html">GstGLBufferPool</a></span><span class="refpurpose"> — buffer pool for <span class="type">GstGLMemory</span> objects</span>
 </dt>
 <dt>
@@ -137,25 +146,28 @@
 <span class="refentrytitle"><a href="GstGLDisplay.html">GstGLDisplay</a></span><span class="refpurpose"> — window system display connection abstraction</span>
 </dt>
 <dt>
-<span class="refentrytitle"><a href="GstGLDownload.html">GstGLDownload</a></span><span class="refpurpose"> — an object that downloads GL textures</span>
-</dt>
-<dt>
 <span class="refentrytitle"><a href="gst-plugins-bad-libs-GstEGLImageMemory.html">GstEGLImageMemory</a></span><span class="refpurpose"></span>
 </dt>
 <dt>
-<span class="refentrytitle"><a href="GstGLBaseFilter.html">GstGLBaseFilter</a></span><span class="refpurpose"></span>
-</dt>
-<dt>
 <span class="refentrytitle"><a href="GstGLFilter.html">GstGLFilter</a></span><span class="refpurpose"></span>
 </dt>
 <dt>
 <span class="refentrytitle"><a href="GstGLFramebuffer.html">GstGLFramebuffer</a></span><span class="refpurpose"></span>
 </dt>
 <dt>
-<span class="refentrytitle"><a href="gst-plugins-bad-libs-gstglmemory.html">GstGLMemory</a></span><span class="refpurpose"> — memory subclass for GL textures</span>
+<span class="refentrytitle"><a href="gst-plugins-bad-libs-GstGLMemory.html">GstGLMemory</a></span><span class="refpurpose"> — memory subclass for GL textures</span>
 </dt>
 <dt>
-<span class="refentrytitle"><a href="gst-plugins-bad-libs-gstglshader.html">GstGLShader</a></span><span class="refpurpose"></span>
+<span class="refentrytitle"><a href="gst-plugins-bad-libs-gstglmemorypbo.html">GstGLMemoryPBO</a></span><span class="refpurpose"> — memory subclass for GL textures</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="GstGLShader.html">GstGLShader</a></span><span class="refpurpose"> — object representing an OpenGL shader program</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-bad-libs-GstGLSL.html">GstGLSL</a></span><span class="refpurpose"> — helpers for dealing with OpenGL shaders</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href=".html">GstGLSLStage</a></span><span class="refpurpose"> — object for dealing with OpenGL shader stages</span>
 </dt>
 <dt>
 <span class="refentrytitle"><a href="gst-plugins-bad-libs-GstGLSyncMeta.html">GstGLSyncMeta</a></span><span class="refpurpose"></span>
@@ -164,12 +176,6 @@
 <span class="refentrytitle"><a href="GstGLUpload.html">GstGLUpload</a></span><span class="refpurpose"> — an object that uploads to GL textures</span>
 </dt>
 <dt>
-<span class="refentrytitle"><a href="GstGLUploadMeta.html">GstGLUploadMeta</a></span><span class="refpurpose"> — an object that provides <span class="type">GstVideoGLTextureUploadMeta</span></span>
-</dt>
-<dt>
-<span class="refentrytitle"><a href="gst-plugins-bad-libs-Utilities.html">Utilities</a></span><span class="refpurpose"></span>
-</dt>
-<dt>
 <span class="refentrytitle"><a href="GstGLWindow.html">GstGLWindow</a></span><span class="refpurpose"> — window/surface abstraction</span>
 </dt>
 <dt>
@@ -190,8 +196,35 @@
 <dt>
 <span class="refentrytitle"><a href="gst-plugins-bad-libs-GstGLWindowX11.html">GstGLWindowX11</a></span><span class="refpurpose"></span>
 </dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-bad-libs-OpenGL-debugging.html">OpenGL debugging</a></span><span class="refpurpose"> — helper routines for dealing with OpenGL debugging</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-bad-libs-OpenGL-Miscellaneous-Utilities.html">OpenGL Miscellaneous Utilities</a></span><span class="refpurpose"></span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-bad-libs-OpenGL-Formats.html">OpenGL Formats</a></span><span class="refpurpose"></span>
+</dt>
 </dl></dd>
-<dt><span class="chapter"><a href="ch07.html">Interfaces</a></span></dt>
+<dt><span class="chapter"><a href="player.html">Player Library</a></span></dt>
+<dd><dl>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-bad-libs-gstplayer.html">gstplayer</a></span><span class="refpurpose"> — Player</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-bad-libs-gstplayer-mediainfo.html">gstplayer-mediainfo</a></span><span class="refpurpose"> — Player Media Information</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-bad-libs-gstplayer-gmaincontextsignaldispatcher.html">gstplayer-gmaincontextsignaldispatcher</a></span><span class="refpurpose"> — Player GLib MainContext dispatcher</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-bad-libs-gstplayer-videooverlayvideorenderer.html">gstplayer-videooverlayvideorenderer</a></span><span class="refpurpose"> — Player Video Overlay Video Renderer</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-bad-libs-gstplayer-visualization.html">gstplayer-visualization</a></span><span class="refpurpose"> — Player Visualization</span>
+</dt>
+</dl></dd>
+<dt><span class="chapter"><a href="ch08.html">Interfaces</a></span></dt>
 <dd><dl><dt>
 <span class="refentrytitle"><a href="gst-plugins-bad-libs-GstPhotography.html">GstPhotography</a></span><span class="refpurpose"> — Interface for digital image capture elements</span>
 </dt></dl></dd>
diff --git a/docs/libs/html/index.sgml b/docs/libs/html/index.sgml
index 6cb3874..8f90e42 100644
--- a/docs/libs/html/index.sgml
+++ b/docs/libs/html/index.sgml
@@ -1175,7 +1175,6 @@
 <ANCHOR id="gst-gl-api-from-string" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-GstGLAPI.html#gst-gl-api-from-string">
 <ANCHOR id="gst-gl-platform-to-string" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-GstGLAPI.html#gst-gl-platform-to-string">
 <ANCHOR id="gst-gl-platform-from-string" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-GstGLAPI.html#gst-gl-platform-from-string">
-<ANCHOR id="gst-gl-check-extension" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-GstGLAPI.html#gst-gl-check-extension">
 <ANCHOR id="gst-plugins-bad-libs-GstGLAPI.other_details" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-GstGLAPI.html#gst-plugins-bad-libs-GstGLAPI.other_details">
 <ANCHOR id="GstGLAPI" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-GstGLAPI.html#GstGLAPI">
 <ANCHOR id="GST-GL-API-NONE:CAPS" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-GstGLAPI.html#GST-GL-API-NONE:CAPS">
@@ -1196,6 +1195,84 @@
 <ANCHOR id="GST-GL-API-GLES2-NAME:CAPS" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-GstGLAPI.html#GST-GL-API-GLES2-NAME:CAPS">
 <ANCHOR id="GST-GL-API-OPENGL3-NAME:CAPS" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-GstGLAPI.html#GST-GL-API-OPENGL3-NAME:CAPS">
 <ANCHOR id="GST-GL-API-OPENGL-NAME:CAPS" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-GstGLAPI.html#GST-GL-API-OPENGL-NAME:CAPS">
+<ANCHOR id="gst-plugins-bad-libs-gstglbasememory" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstglbasememory.html">
+<ANCHOR id="gst-plugins-bad-libs-gstglbasememory.functions" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstglbasememory.html#gst-plugins-bad-libs-gstglbasememory.functions">
+<ANCHOR id="GstGLBaseMemoryAllocator" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstglbasememory.html#GstGLBaseMemoryAllocator">
+<ANCHOR id="gst-plugins-bad-libs-gstglbasememory.other" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstglbasememory.html#gst-plugins-bad-libs-gstglbasememory.other">
+<ANCHOR id="gst-plugins-bad-libs-gstglbasememory.object-hierarchy" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstglbasememory.html#gst-plugins-bad-libs-gstglbasememory.object-hierarchy">
+<ANCHOR id="gst-plugins-bad-libs-gstglbasememory.description" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstglbasememory.html#gst-plugins-bad-libs-gstglbasememory.description">
+<ANCHOR id="gst-plugins-bad-libs-gstglbasememory.functions_details" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstglbasememory.html#gst-plugins-bad-libs-gstglbasememory.functions_details">
+<ANCHOR id="GST-MAP-GL:CAPS" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstglbasememory.html#GST-MAP-GL:CAPS">
+<ANCHOR id="GST-GL-BASE-MEMORY-ERROR:CAPS" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstglbasememory.html#GST-GL-BASE-MEMORY-ERROR:CAPS">
+<ANCHOR id="GstGLAllocationParamsCopyFunc" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstglbasememory.html#GstGLAllocationParamsCopyFunc">
+<ANCHOR id="GstGLAllocationParamsFreeFunc" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstglbasememory.html#GstGLAllocationParamsFreeFunc">
+<ANCHOR id="GST-GL-ALLOCATION-PARAMS-ALLOC-FLAG-ALLOC:CAPS" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstglbasememory.html#GST-GL-ALLOCATION-PARAMS-ALLOC-FLAG-ALLOC:CAPS">
+<ANCHOR id="GST-GL-ALLOCATION-PARAMS-ALLOC-FLAG-WRAP-SYSMEM:CAPS" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstglbasememory.html#GST-GL-ALLOCATION-PARAMS-ALLOC-FLAG-WRAP-SYSMEM:CAPS">
+<ANCHOR id="GST-GL-ALLOCATION-PARAMS-ALLOC-FLAG-WRAP-GPU-HANDLE:CAPS" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstglbasememory.html#GST-GL-ALLOCATION-PARAMS-ALLOC-FLAG-WRAP-GPU-HANDLE:CAPS">
+<ANCHOR id="GST-GL-ALLOCATION-PARAMS-ALLOC-FLAG-USER:CAPS" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstglbasememory.html#GST-GL-ALLOCATION-PARAMS-ALLOC-FLAG-USER:CAPS">
+<ANCHOR id="gst-gl-allocation-params-init" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstglbasememory.html#gst-gl-allocation-params-init">
+<ANCHOR id="gst-gl-allocation-params-copy" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstglbasememory.html#gst-gl-allocation-params-copy">
+<ANCHOR id="gst-gl-allocation-params-free" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstglbasememory.html#gst-gl-allocation-params-free">
+<ANCHOR id="gst-gl-allocation-params-free-data" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstglbasememory.html#gst-gl-allocation-params-free-data">
+<ANCHOR id="gst-gl-allocation-params-copy-data" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstglbasememory.html#gst-gl-allocation-params-copy-data">
+<ANCHOR id="gst-gl-base-memory-init-once" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstglbasememory.html#gst-gl-base-memory-init-once">
+<ANCHOR id="gst-gl-base-memory-init" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstglbasememory.html#gst-gl-base-memory-init">
+<ANCHOR id="gst-is-gl-base-memory" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstglbasememory.html#gst-is-gl-base-memory">
+<ANCHOR id="GstGLBaseMemoryAllocatorAllocFunction" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstglbasememory.html#GstGLBaseMemoryAllocatorAllocFunction">
+<ANCHOR id="GstGLBaseMemoryAllocatorCreateFunction" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstglbasememory.html#GstGLBaseMemoryAllocatorCreateFunction">
+<ANCHOR id="GstGLBaseMemoryAllocatorMapFunction" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstglbasememory.html#GstGLBaseMemoryAllocatorMapFunction">
+<ANCHOR id="GstGLBaseMemoryAllocatorUnmapFunction" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstglbasememory.html#GstGLBaseMemoryAllocatorUnmapFunction">
+<ANCHOR id="GstGLBaseMemoryAllocatorCopyFunction" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstglbasememory.html#GstGLBaseMemoryAllocatorCopyFunction">
+<ANCHOR id="GstGLBaseMemoryAllocatorDestroyFunction" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstglbasememory.html#GstGLBaseMemoryAllocatorDestroyFunction">
+<ANCHOR id="gst-gl-base-memory-alloc" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstglbasememory.html#gst-gl-base-memory-alloc">
+<ANCHOR id="gst-gl-base-memory-alloc-data" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstglbasememory.html#gst-gl-base-memory-alloc-data">
+<ANCHOR id="gst-gl-base-memory-memcpy" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstglbasememory.html#gst-gl-base-memory-memcpy">
+<ANCHOR id="gst-plugins-bad-libs-gstglbasememory.other_details" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstglbasememory.html#gst-plugins-bad-libs-gstglbasememory.other_details">
+<ANCHOR id="GstGLBaseMemoryAllocator-struct" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstglbasememory.html#GstGLBaseMemoryAllocator-struct">
+<ANCHOR id="GstGLBaseMemoryAllocatorClass" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstglbasememory.html#GstGLBaseMemoryAllocatorClass">
+<ANCHOR id="GST-GL-BASE-MEMORY-ALLOCATOR-NAME:CAPS" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstglbasememory.html#GST-GL-BASE-MEMORY-ALLOCATOR-NAME:CAPS">
+<ANCHOR id="GstGLBaseMemoryError" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstglbasememory.html#GstGLBaseMemoryError">
+<ANCHOR id="GST-GL-BASE-MEMORY-ERROR-FAILED:CAPS" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstglbasememory.html#GST-GL-BASE-MEMORY-ERROR-FAILED:CAPS">
+<ANCHOR id="GST-GL-BASE-MEMORY-ERROR-OLD-LIBS:CAPS" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstglbasememory.html#GST-GL-BASE-MEMORY-ERROR-OLD-LIBS:CAPS">
+<ANCHOR id="GST-GL-BASE-MEMORY-ERROR-RESOURCE-UNAVAILABLE:CAPS" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstglbasememory.html#GST-GL-BASE-MEMORY-ERROR-RESOURCE-UNAVAILABLE:CAPS">
+<ANCHOR id="GstGLBaseMemoryTransfer" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstglbasememory.html#GstGLBaseMemoryTransfer">
+<ANCHOR id="GST-GL-BASE-MEMORY-TRANSFER-NEED-DOWNLOAD:CAPS" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstglbasememory.html#GST-GL-BASE-MEMORY-TRANSFER-NEED-DOWNLOAD:CAPS">
+<ANCHOR id="GST-GL-BASE-MEMORY-TRANSFER-NEED-UPLOAD:CAPS" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstglbasememory.html#GST-GL-BASE-MEMORY-TRANSFER-NEED-UPLOAD:CAPS">
+<ANCHOR id="GstGLAllocationParams" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstglbasememory.html#GstGLAllocationParams">
+<ANCHOR id="GstGLBaseMemory" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstglbasememory.html#GstGLBaseMemory">
+<ANCHOR id="gst-plugins-bad-libs-gstglbasememory.see-also" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstglbasememory.html#gst-plugins-bad-libs-gstglbasememory.see-also">
+<ANCHOR id="GstGLBaseFilter" href="gst-plugins-bad-libs-1.0/GstGLBaseFilter.html">
+<ANCHOR id="GstGLBaseFilter.properties" href="gst-plugins-bad-libs-1.0/GstGLBaseFilter.html#GstGLBaseFilter.properties">
+<ANCHOR id="GstGLBaseFilter.other" href="gst-plugins-bad-libs-1.0/GstGLBaseFilter.html#GstGLBaseFilter.other">
+<ANCHOR id="GstGLBaseFilter.object-hierarchy" href="gst-plugins-bad-libs-1.0/GstGLBaseFilter.html#GstGLBaseFilter.object-hierarchy">
+<ANCHOR id="GstGLBaseFilter.description" href="gst-plugins-bad-libs-1.0/GstGLBaseFilter.html#GstGLBaseFilter.description">
+<ANCHOR id="GstGLBaseFilter.functions_details" href="gst-plugins-bad-libs-1.0/GstGLBaseFilter.html#GstGLBaseFilter.functions_details">
+<ANCHOR id="GstGLBaseFilter.other_details" href="gst-plugins-bad-libs-1.0/GstGLBaseFilter.html#GstGLBaseFilter.other_details">
+<ANCHOR id="GstGLBaseFilter-struct" href="gst-plugins-bad-libs-1.0/GstGLBaseFilter.html#GstGLBaseFilter-struct">
+<ANCHOR id="GstGLBaseFilterClass" href="gst-plugins-bad-libs-1.0/GstGLBaseFilter.html#GstGLBaseFilterClass">
+<ANCHOR id="GstGLBaseFilter.property-details" href="gst-plugins-bad-libs-1.0/GstGLBaseFilter.html#GstGLBaseFilter.property-details">
+<ANCHOR id="GstGLBaseFilter--context" href="gst-plugins-bad-libs-1.0/GstGLBaseFilter.html#GstGLBaseFilter--context">
+<ANCHOR id="GstGLBaseFilter.see-also" href="gst-plugins-bad-libs-1.0/GstGLBaseFilter.html#GstGLBaseFilter.see-also">
+<ANCHOR id="gst-plugins-bad-libs-GstGLBuffer" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-GstGLBuffer.html">
+<ANCHOR id="gst-plugins-bad-libs-GstGLBuffer.functions" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-GstGLBuffer.html#gst-plugins-bad-libs-GstGLBuffer.functions">
+<ANCHOR id="GstGLBufferAllocator" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-GstGLBuffer.html#GstGLBufferAllocator">
+<ANCHOR id="gst-plugins-bad-libs-GstGLBuffer.other" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-GstGLBuffer.html#gst-plugins-bad-libs-GstGLBuffer.other">
+<ANCHOR id="gst-plugins-bad-libs-GstGLBuffer.object-hierarchy" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-GstGLBuffer.html#gst-plugins-bad-libs-GstGLBuffer.object-hierarchy">
+<ANCHOR id="gst-plugins-bad-libs-GstGLBuffer.description" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-GstGLBuffer.html#gst-plugins-bad-libs-GstGLBuffer.description">
+<ANCHOR id="gst-plugins-bad-libs-GstGLBuffer.functions_details" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-GstGLBuffer.html#gst-plugins-bad-libs-GstGLBuffer.functions_details">
+<ANCHOR id="gst-gl-buffer-init-once" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-GstGLBuffer.html#gst-gl-buffer-init-once">
+<ANCHOR id="gst-is-gl-buffer" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-GstGLBuffer.html#gst-is-gl-buffer">
+<ANCHOR id="gst-gl-buffer-alloc" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-GstGLBuffer.html#gst-gl-buffer-alloc">
+<ANCHOR id="GST-GL-ALLOCATION-PARAMS-ALLOC-FLAG-BUFFER:CAPS" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-GstGLBuffer.html#GST-GL-ALLOCATION-PARAMS-ALLOC-FLAG-BUFFER:CAPS">
+<ANCHOR id="gst-gl-buffer-allocation-params-new" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-GstGLBuffer.html#gst-gl-buffer-allocation-params-new">
+<ANCHOR id="gst-plugins-bad-libs-GstGLBuffer.other_details" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-GstGLBuffer.html#gst-plugins-bad-libs-GstGLBuffer.other_details">
+<ANCHOR id="GstGLBuffer" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-GstGLBuffer.html#GstGLBuffer">
+<ANCHOR id="GstGLBufferAllocationParams" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-GstGLBuffer.html#GstGLBufferAllocationParams">
+<ANCHOR id="GstGLBufferAllocator-struct" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-GstGLBuffer.html#GstGLBufferAllocator-struct">
+<ANCHOR id="GstGLBufferAllocatorClass" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-GstGLBuffer.html#GstGLBufferAllocatorClass">
+<ANCHOR id="GST-GL-BUFFER-ALLOCATOR-NAME:CAPS" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-GstGLBuffer.html#GST-GL-BUFFER-ALLOCATOR-NAME:CAPS">
+<ANCHOR id="GST-CAPS-FEATURE-MEMORY-GL-BUFFER:CAPS" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-GstGLBuffer.html#GST-CAPS-FEATURE-MEMORY-GL-BUFFER:CAPS">
+<ANCHOR id="gst-plugins-bad-libs-GstGLBuffer.see-also" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-GstGLBuffer.html#gst-plugins-bad-libs-GstGLBuffer.see-also">
 <ANCHOR id="GstGLBufferPool" href="gst-plugins-bad-libs-1.0/GstGLBufferPool.html">
 <ANCHOR id="GstGLBufferPool.functions" href="gst-plugins-bad-libs-1.0/GstGLBufferPool.html#GstGLBufferPool.functions">
 <ANCHOR id="GstGLBufferPool.other" href="gst-plugins-bad-libs-1.0/GstGLBufferPool.html#GstGLBufferPool.other">
@@ -1203,6 +1280,8 @@
 <ANCHOR id="GstGLBufferPool.description" href="gst-plugins-bad-libs-1.0/GstGLBufferPool.html#GstGLBufferPool.description">
 <ANCHOR id="GstGLBufferPool.functions_details" href="gst-plugins-bad-libs-1.0/GstGLBufferPool.html#GstGLBufferPool.functions_details">
 <ANCHOR id="gst-gl-buffer-pool-new" href="gst-plugins-bad-libs-1.0/GstGLBufferPool.html#gst-gl-buffer-pool-new">
+<ANCHOR id="gst-buffer-pool-config-get-gl-allocation-params" href="gst-plugins-bad-libs-1.0/GstGLBufferPool.html#gst-buffer-pool-config-get-gl-allocation-params">
+<ANCHOR id="gst-buffer-pool-config-set-gl-allocation-params" href="gst-plugins-bad-libs-1.0/GstGLBufferPool.html#gst-buffer-pool-config-set-gl-allocation-params">
 <ANCHOR id="GstGLBufferPool.other_details" href="gst-plugins-bad-libs-1.0/GstGLBufferPool.html#GstGLBufferPool.other_details">
 <ANCHOR id="GstGLBufferPool-struct" href="gst-plugins-bad-libs-1.0/GstGLBufferPool.html#GstGLBufferPool-struct">
 <ANCHOR id="GstGLBufferPoolClass" href="gst-plugins-bad-libs-1.0/GstGLBufferPool.html#GstGLBufferPoolClass">
@@ -1216,6 +1295,8 @@
 <ANCHOR id="gst-gl-color-convert-new" href="gst-plugins-bad-libs-1.0/GstGLColorConvert.html#gst-gl-color-convert-new">
 <ANCHOR id="gst-gl-color-convert-set-caps" href="gst-plugins-bad-libs-1.0/GstGLColorConvert.html#gst-gl-color-convert-set-caps">
 <ANCHOR id="gst-gl-color-convert-transform-caps" href="gst-plugins-bad-libs-1.0/GstGLColorConvert.html#gst-gl-color-convert-transform-caps">
+<ANCHOR id="gst-gl-color-convert-fixate-caps" href="gst-plugins-bad-libs-1.0/GstGLColorConvert.html#gst-gl-color-convert-fixate-caps">
+<ANCHOR id="gst-gl-color-convert-decide-allocation" href="gst-plugins-bad-libs-1.0/GstGLColorConvert.html#gst-gl-color-convert-decide-allocation">
 <ANCHOR id="gst-gl-color-convert-perform" href="gst-plugins-bad-libs-1.0/GstGLColorConvert.html#gst-gl-color-convert-perform">
 <ANCHOR id="GstGLColorConvert.other_details" href="gst-plugins-bad-libs-1.0/GstGLColorConvert.html#GstGLColorConvert.other_details">
 <ANCHOR id="GST-GL-COLOR-CONVERT-FORMATS:CAPS" href="gst-plugins-bad-libs-1.0/GstGLColorConvert.html#GST-GL-COLOR-CONVERT-FORMATS:CAPS">
@@ -1239,6 +1320,7 @@
 <ANCHOR id="gst-gl-context-activate" href="gst-plugins-bad-libs-1.0/GstGLContext.html#gst-gl-context-activate">
 <ANCHOR id="gst-gl-context-default-get-proc-address" href="gst-plugins-bad-libs-1.0/GstGLContext.html#gst-gl-context-default-get-proc-address">
 <ANCHOR id="gst-gl-context-get-proc-address" href="gst-plugins-bad-libs-1.0/GstGLContext.html#gst-gl-context-get-proc-address">
+<ANCHOR id="gst-gl-context-get-proc-address-with-platform" href="gst-plugins-bad-libs-1.0/GstGLContext.html#gst-gl-context-get-proc-address-with-platform">
 <ANCHOR id="gst-gl-context-get-window" href="gst-plugins-bad-libs-1.0/GstGLContext.html#gst-gl-context-get-window">
 <ANCHOR id="gst-gl-context-set-window" href="gst-plugins-bad-libs-1.0/GstGLContext.html#gst-gl-context-set-window">
 <ANCHOR id="gst-gl-context-thread-add" href="gst-plugins-bad-libs-1.0/GstGLContext.html#gst-gl-context-thread-add">
@@ -1250,6 +1332,8 @@
 <ANCHOR id="gst-gl-context-get-current-gl-api" href="gst-plugins-bad-libs-1.0/GstGLContext.html#gst-gl-context-get-current-gl-api">
 <ANCHOR id="gst-gl-context-get-thread" href="gst-plugins-bad-libs-1.0/GstGLContext.html#gst-gl-context-get-thread">
 <ANCHOR id="gst-gl-context-can-share" href="gst-plugins-bad-libs-1.0/GstGLContext.html#gst-gl-context-can-share">
+<ANCHOR id="gst-gl-context-is-shared" href="gst-plugins-bad-libs-1.0/GstGLContext.html#gst-gl-context-is-shared">
+<ANCHOR id="gst-gl-context-set-shared-with" href="gst-plugins-bad-libs-1.0/GstGLContext.html#gst-gl-context-set-shared-with">
 <ANCHOR id="gst-gl-context-check-feature" href="gst-plugins-bad-libs-1.0/GstGLContext.html#gst-gl-context-check-feature">
 <ANCHOR id="gst-gl-context-check-gl-version" href="gst-plugins-bad-libs-1.0/GstGLContext.html#gst-gl-context-check-gl-version">
 <ANCHOR id="gst-gl-context-get-gl-version" href="gst-plugins-bad-libs-1.0/GstGLContext.html#gst-gl-context-get-gl-version">
@@ -1328,6 +1412,7 @@
 <ANCHOR id="gst-gl-display-add-context" href="gst-plugins-bad-libs-1.0/GstGLDisplay.html#gst-gl-display-add-context">
 <ANCHOR id="gst-gl-display-get-gl-context-for-thread" href="gst-plugins-bad-libs-1.0/GstGLDisplay.html#gst-gl-display-get-gl-context-for-thread">
 <ANCHOR id="gst-gl-display-get-handle" href="gst-plugins-bad-libs-1.0/GstGLDisplay.html#gst-gl-display-get-handle">
+<ANCHOR id="gst-gl-display-create-context" href="gst-plugins-bad-libs-1.0/GstGLDisplay.html#gst-gl-display-create-context">
 <ANCHOR id="gst-context-get-gl-display" href="gst-plugins-bad-libs-1.0/GstGLDisplay.html#gst-context-get-gl-display">
 <ANCHOR id="gst-context-set-gl-display" href="gst-plugins-bad-libs-1.0/GstGLDisplay.html#gst-context-set-gl-display">
 <ANCHOR id="GstGLDisplay.other_details" href="gst-plugins-bad-libs-1.0/GstGLDisplay.html#GstGLDisplay.other_details">
@@ -1345,19 +1430,6 @@
 <ANCHOR id="GstGLDisplay.signal-details" href="gst-plugins-bad-libs-1.0/GstGLDisplay.html#GstGLDisplay.signal-details">
 <ANCHOR id="GstGLDisplay-create-context" href="gst-plugins-bad-libs-1.0/GstGLDisplay.html#GstGLDisplay-create-context">
 <ANCHOR id="GstGLDisplay.see-also" href="gst-plugins-bad-libs-1.0/GstGLDisplay.html#GstGLDisplay.see-also">
-<ANCHOR id="GstGLDownload" href="gst-plugins-bad-libs-1.0/GstGLDownload.html">
-<ANCHOR id="GstGLDownload.functions" href="gst-plugins-bad-libs-1.0/GstGLDownload.html#GstGLDownload.functions">
-<ANCHOR id="GstGLDownload.other" href="gst-plugins-bad-libs-1.0/GstGLDownload.html#GstGLDownload.other">
-<ANCHOR id="GstGLDownload.object-hierarchy" href="gst-plugins-bad-libs-1.0/GstGLDownload.html#GstGLDownload.object-hierarchy">
-<ANCHOR id="GstGLDownload.description" href="gst-plugins-bad-libs-1.0/GstGLDownload.html#GstGLDownload.description">
-<ANCHOR id="GstGLDownload.functions_details" href="gst-plugins-bad-libs-1.0/GstGLDownload.html#GstGLDownload.functions_details">
-<ANCHOR id="gst-gl-download-new" href="gst-plugins-bad-libs-1.0/GstGLDownload.html#gst-gl-download-new">
-<ANCHOR id="gst-gl-download-set-format" href="gst-plugins-bad-libs-1.0/GstGLDownload.html#gst-gl-download-set-format">
-<ANCHOR id="gst-gl-download-transform-caps" href="gst-plugins-bad-libs-1.0/GstGLDownload.html#gst-gl-download-transform-caps">
-<ANCHOR id="gst-gl-download-perform-with-data" href="gst-plugins-bad-libs-1.0/GstGLDownload.html#gst-gl-download-perform-with-data">
-<ANCHOR id="GstGLDownload.other_details" href="gst-plugins-bad-libs-1.0/GstGLDownload.html#GstGLDownload.other_details">
-<ANCHOR id="GstGLDownload-struct" href="gst-plugins-bad-libs-1.0/GstGLDownload.html#GstGLDownload-struct">
-<ANCHOR id="GstGLDownload.see-also" href="gst-plugins-bad-libs-1.0/GstGLDownload.html#GstGLDownload.see-also">
 <ANCHOR id="gst-plugins-bad-libs-GstEGLImageMemory" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-GstEGLImageMemory.html">
 <ANCHOR id="gst-plugins-bad-libs-GstEGLImageMemory.functions" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-GstEGLImageMemory.html#gst-plugins-bad-libs-GstEGLImageMemory.functions">
 <ANCHOR id="gst-plugins-bad-libs-GstEGLImageMemory.other" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-GstEGLImageMemory.html#gst-plugins-bad-libs-GstEGLImageMemory.other">
@@ -1373,17 +1445,6 @@
 <ANCHOR id="gst-plugins-bad-libs-GstEGLImageMemory.other_details" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-GstEGLImageMemory.html#gst-plugins-bad-libs-GstEGLImageMemory.other_details">
 <ANCHOR id="GST-EGL-IMAGE-MEMORY-TYPE:CAPS" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-GstEGLImageMemory.html#GST-EGL-IMAGE-MEMORY-TYPE:CAPS">
 <ANCHOR id="GST-CAPS-FEATURE-MEMORY-EGL-IMAGE:CAPS" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-GstEGLImageMemory.html#GST-CAPS-FEATURE-MEMORY-EGL-IMAGE:CAPS">
-<ANCHOR id="GstGLBaseFilter" href="gst-plugins-bad-libs-1.0/GstGLBaseFilter.html">
-<ANCHOR id="GstGLBaseFilter.properties" href="gst-plugins-bad-libs-1.0/GstGLBaseFilter.html#GstGLBaseFilter.properties">
-<ANCHOR id="GstGLBaseFilter.other" href="gst-plugins-bad-libs-1.0/GstGLBaseFilter.html#GstGLBaseFilter.other">
-<ANCHOR id="GstGLBaseFilter.object-hierarchy" href="gst-plugins-bad-libs-1.0/GstGLBaseFilter.html#GstGLBaseFilter.object-hierarchy">
-<ANCHOR id="GstGLBaseFilter.description" href="gst-plugins-bad-libs-1.0/GstGLBaseFilter.html#GstGLBaseFilter.description">
-<ANCHOR id="GstGLBaseFilter.functions_details" href="gst-plugins-bad-libs-1.0/GstGLBaseFilter.html#GstGLBaseFilter.functions_details">
-<ANCHOR id="GstGLBaseFilter.other_details" href="gst-plugins-bad-libs-1.0/GstGLBaseFilter.html#GstGLBaseFilter.other_details">
-<ANCHOR id="GstGLBaseFilter-struct" href="gst-plugins-bad-libs-1.0/GstGLBaseFilter.html#GstGLBaseFilter-struct">
-<ANCHOR id="GstGLBaseFilterClass" href="gst-plugins-bad-libs-1.0/GstGLBaseFilter.html#GstGLBaseFilterClass">
-<ANCHOR id="GstGLBaseFilter.property-details" href="gst-plugins-bad-libs-1.0/GstGLBaseFilter.html#GstGLBaseFilter.property-details">
-<ANCHOR id="GstGLBaseFilter--context" href="gst-plugins-bad-libs-1.0/GstGLBaseFilter.html#GstGLBaseFilter--context">
 <ANCHOR id="GstGLFilter" href="gst-plugins-bad-libs-1.0/GstGLFilter.html">
 <ANCHOR id="GstGLFilter.functions" href="gst-plugins-bad-libs-1.0/GstGLFilter.html#GstGLFilter.functions">
 <ANCHOR id="GstGLFilter.other" href="gst-plugins-bad-libs-1.0/GstGLFilter.html#GstGLFilter.other">
@@ -1410,109 +1471,180 @@
 <ANCHOR id="GstGLFramebuffer.other_details" href="gst-plugins-bad-libs-1.0/GstGLFramebuffer.html#GstGLFramebuffer.other_details">
 <ANCHOR id="GstGLFramebuffer-struct" href="gst-plugins-bad-libs-1.0/GstGLFramebuffer.html#GstGLFramebuffer-struct">
 <ANCHOR id="GstGLFramebufferClass" href="gst-plugins-bad-libs-1.0/GstGLFramebuffer.html#GstGLFramebufferClass">
-<ANCHOR id="gst-plugins-bad-libs-gstglmemory" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstglmemory.html">
-<ANCHOR id="gst-plugins-bad-libs-gstglmemory.functions" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstglmemory.html#gst-plugins-bad-libs-gstglmemory.functions">
-<ANCHOR id="GstGLAllocator" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstglmemory.html#GstGLAllocator">
-<ANCHOR id="gst-plugins-bad-libs-gstglmemory.other" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstglmemory.html#gst-plugins-bad-libs-gstglmemory.other">
-<ANCHOR id="gst-plugins-bad-libs-gstglmemory.object-hierarchy" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstglmemory.html#gst-plugins-bad-libs-gstglmemory.object-hierarchy">
-<ANCHOR id="gst-plugins-bad-libs-gstglmemory.description" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstglmemory.html#gst-plugins-bad-libs-gstglmemory.description">
-<ANCHOR id="gst-plugins-bad-libs-gstglmemory.functions_details" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstglmemory.html#gst-plugins-bad-libs-gstglmemory.functions_details">
-<ANCHOR id="gst-gl-memory-init" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstglmemory.html#gst-gl-memory-init">
-<ANCHOR id="gst-gl-memory-alloc" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstglmemory.html#gst-gl-memory-alloc">
-<ANCHOR id="gst-gl-memory-wrapped" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstglmemory.html#gst-gl-memory-wrapped">
-<ANCHOR id="gst-gl-memory-wrapped-texture" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstglmemory.html#gst-gl-memory-wrapped-texture">
-<ANCHOR id="gst-gl-memory-copy-into-texture" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstglmemory.html#gst-gl-memory-copy-into-texture">
-<ANCHOR id="gst-gl-memory-setup-buffer" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstglmemory.html#gst-gl-memory-setup-buffer">
-<ANCHOR id="gst-gl-memory-setup-wrapped" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstglmemory.html#gst-gl-memory-setup-wrapped">
-<ANCHOR id="gst-gl-texture-type-from-format" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstglmemory.html#gst-gl-texture-type-from-format">
-<ANCHOR id="gst-is-gl-memory" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstglmemory.html#gst-is-gl-memory">
-<ANCHOR id="gst-plugins-bad-libs-gstglmemory.other_details" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstglmemory.html#gst-plugins-bad-libs-gstglmemory.other_details">
-<ANCHOR id="GstGLAllocator-struct" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstglmemory.html#GstGLAllocator-struct">
-<ANCHOR id="GstGLAllocatorClass" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstglmemory.html#GstGLAllocatorClass">
-<ANCHOR id="GST-GL-MEMORY-ALLOCATOR:CAPS" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstglmemory.html#GST-GL-MEMORY-ALLOCATOR:CAPS">
-<ANCHOR id="GstGLMemory" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstglmemory.html#GstGLMemory">
-<ANCHOR id="gst-plugins-bad-libs-gstglmemory.see-also" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstglmemory.html#gst-plugins-bad-libs-gstglmemory.see-also">
-<ANCHOR id="gst-plugins-bad-libs-gstglshader" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstglshader.html">
-<ANCHOR id="gst-plugins-bad-libs-gstglshader.functions" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstglshader.html#gst-plugins-bad-libs-gstglshader.functions">
-<ANCHOR id="gst-plugins-bad-libs-gstglshader.properties" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstglshader.html#gst-plugins-bad-libs-gstglshader.properties">
-<ANCHOR id="GstGLShader" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstglshader.html#GstGLShader">
-<ANCHOR id="gst-plugins-bad-libs-gstglshader.other" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstglshader.html#gst-plugins-bad-libs-gstglshader.other">
-<ANCHOR id="gst-plugins-bad-libs-gstglshader.object-hierarchy" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstglshader.html#gst-plugins-bad-libs-gstglshader.object-hierarchy">
-<ANCHOR id="gst-plugins-bad-libs-gstglshader.description" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstglshader.html#gst-plugins-bad-libs-gstglshader.description">
-<ANCHOR id="gst-plugins-bad-libs-gstglshader.functions_details" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstglshader.html#gst-plugins-bad-libs-gstglshader.functions_details">
-<ANCHOR id="gst-gl-shader-error-quark" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstglshader.html#gst-gl-shader-error-quark">
-<ANCHOR id="GST-GL-SHADER-ERROR:CAPS" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstglshader.html#GST-GL-SHADER-ERROR:CAPS">
-<ANCHOR id="gst-gl-shadervariable-set" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstglshader.html#gst-gl-shadervariable-set">
-<ANCHOR id="gst-gl-shadervariables-parse" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstglshader.html#gst-gl-shadervariables-parse">
-<ANCHOR id="gst-gl-shader-new" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstglshader.html#gst-gl-shader-new">
-<ANCHOR id="gst-gl-shader-set-vertex-source" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstglshader.html#gst-gl-shader-set-vertex-source">
-<ANCHOR id="gst-gl-shader-set-fragment-source" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstglshader.html#gst-gl-shader-set-fragment-source">
-<ANCHOR id="gst-gl-shader-get-vertex-source" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstglshader.html#gst-gl-shader-get-vertex-source">
-<ANCHOR id="gst-gl-shader-get-fragment-source" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstglshader.html#gst-gl-shader-get-fragment-source">
-<ANCHOR id="gst-gl-shader-get-program-handle" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstglshader.html#gst-gl-shader-get-program-handle">
-<ANCHOR id="gst-gl-shader-set-active" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstglshader.html#gst-gl-shader-set-active">
-<ANCHOR id="gst-gl-shader-is-compiled" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstglshader.html#gst-gl-shader-is-compiled">
-<ANCHOR id="gst-gl-shader-compile" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstglshader.html#gst-gl-shader-compile">
-<ANCHOR id="gst-gl-shader-compile-and-check" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstglshader.html#gst-gl-shader-compile-and-check">
-<ANCHOR id="gst-gl-shader-compile-all-with-attribs-and-check" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstglshader.html#gst-gl-shader-compile-all-with-attribs-and-check">
-<ANCHOR id="gst-gl-shader-compile-with-default-f-and-check" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstglshader.html#gst-gl-shader-compile-with-default-f-and-check">
-<ANCHOR id="gst-gl-shader-compile-with-default-v-and-check" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstglshader.html#gst-gl-shader-compile-with-default-v-and-check">
-<ANCHOR id="gst-gl-shader-compile-with-default-vf-and-check" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstglshader.html#gst-gl-shader-compile-with-default-vf-and-check">
-<ANCHOR id="gst-gl-shader-release" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstglshader.html#gst-gl-shader-release">
-<ANCHOR id="gst-gl-shader-use" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstglshader.html#gst-gl-shader-use">
-<ANCHOR id="gst-gl-shader-set-uniform-1i" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstglshader.html#gst-gl-shader-set-uniform-1i">
-<ANCHOR id="gst-gl-shader-set-uniform-1f" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstglshader.html#gst-gl-shader-set-uniform-1f">
-<ANCHOR id="gst-gl-shader-set-uniform-1fv" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstglshader.html#gst-gl-shader-set-uniform-1fv">
-<ANCHOR id="gst-gl-shader-set-uniform-1iv" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstglshader.html#gst-gl-shader-set-uniform-1iv">
-<ANCHOR id="gst-gl-shader-set-uniform-2f" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstglshader.html#gst-gl-shader-set-uniform-2f">
-<ANCHOR id="gst-gl-shader-set-uniform-2fv" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstglshader.html#gst-gl-shader-set-uniform-2fv">
-<ANCHOR id="gst-gl-shader-set-uniform-2i" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstglshader.html#gst-gl-shader-set-uniform-2i">
-<ANCHOR id="gst-gl-shader-set-uniform-2iv" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstglshader.html#gst-gl-shader-set-uniform-2iv">
-<ANCHOR id="gst-gl-shader-set-uniform-3f" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstglshader.html#gst-gl-shader-set-uniform-3f">
-<ANCHOR id="gst-gl-shader-set-uniform-3fv" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstglshader.html#gst-gl-shader-set-uniform-3fv">
-<ANCHOR id="gst-gl-shader-set-uniform-3i" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstglshader.html#gst-gl-shader-set-uniform-3i">
-<ANCHOR id="gst-gl-shader-set-uniform-3iv" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstglshader.html#gst-gl-shader-set-uniform-3iv">
-<ANCHOR id="gst-gl-shader-set-uniform-4f" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstglshader.html#gst-gl-shader-set-uniform-4f">
-<ANCHOR id="gst-gl-shader-set-uniform-4fv" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstglshader.html#gst-gl-shader-set-uniform-4fv">
-<ANCHOR id="gst-gl-shader-set-uniform-4i" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstglshader.html#gst-gl-shader-set-uniform-4i">
-<ANCHOR id="gst-gl-shader-set-uniform-4iv" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstglshader.html#gst-gl-shader-set-uniform-4iv">
-<ANCHOR id="gst-gl-shader-set-uniform-matrix-2fv" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstglshader.html#gst-gl-shader-set-uniform-matrix-2fv">
-<ANCHOR id="gst-gl-shader-set-uniform-matrix-2x3fv" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstglshader.html#gst-gl-shader-set-uniform-matrix-2x3fv">
-<ANCHOR id="gst-gl-shader-set-uniform-matrix-2x4fv" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstglshader.html#gst-gl-shader-set-uniform-matrix-2x4fv">
-<ANCHOR id="gst-gl-shader-set-uniform-matrix-3fv" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstglshader.html#gst-gl-shader-set-uniform-matrix-3fv">
-<ANCHOR id="gst-gl-shader-set-uniform-matrix-3x2fv" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstglshader.html#gst-gl-shader-set-uniform-matrix-3x2fv">
-<ANCHOR id="gst-gl-shader-set-uniform-matrix-3x4fv" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstglshader.html#gst-gl-shader-set-uniform-matrix-3x4fv">
-<ANCHOR id="gst-gl-shader-set-uniform-matrix-4fv" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstglshader.html#gst-gl-shader-set-uniform-matrix-4fv">
-<ANCHOR id="gst-gl-shader-set-uniform-matrix-4x2fv" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstglshader.html#gst-gl-shader-set-uniform-matrix-4x2fv">
-<ANCHOR id="gst-gl-shader-set-uniform-matrix-4x3fv" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstglshader.html#gst-gl-shader-set-uniform-matrix-4x3fv">
-<ANCHOR id="gst-gl-shader-get-attribute-location" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstglshader.html#gst-gl-shader-get-attribute-location">
-<ANCHOR id="gst-gl-shader-bind-attribute-location" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstglshader.html#gst-gl-shader-bind-attribute-location">
-<ANCHOR id="gst-plugins-bad-libs-gstglshader.other_details" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstglshader.html#gst-plugins-bad-libs-gstglshader.other_details">
-<ANCHOR id="GstGLShaderError" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstglshader.html#GstGLShaderError">
-<ANCHOR id="GST-GL-SHADER-ERROR-COMPILE:CAPS" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstglshader.html#GST-GL-SHADER-ERROR-COMPILE:CAPS">
-<ANCHOR id="GST-GL-SHADER-ERROR-LINK:CAPS" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstglshader.html#GST-GL-SHADER-ERROR-LINK:CAPS">
-<ANCHOR id="GST-GL-SHADER-ERROR-PROGRAM:CAPS" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstglshader.html#GST-GL-SHADER-ERROR-PROGRAM:CAPS">
-<ANCHOR id="GstGLShaderSourceType" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstglshader.html#GstGLShaderSourceType">
-<ANCHOR id="GST-GL-SHADER-FRAGMENT-SOURCE:CAPS" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstglshader.html#GST-GL-SHADER-FRAGMENT-SOURCE:CAPS">
-<ANCHOR id="GST-GL-SHADER-VERTEX-SOURCE:CAPS" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstglshader.html#GST-GL-SHADER-VERTEX-SOURCE:CAPS">
-<ANCHOR id="gst-gl-shadervariable-desc" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstglshader.html#gst-gl-shadervariable-desc">
-<ANCHOR id="GstGLShader-struct" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstglshader.html#GstGLShader-struct">
-<ANCHOR id="gst-plugins-bad-libs-gstglshader.property-details" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstglshader.html#gst-plugins-bad-libs-gstglshader.property-details">
-<ANCHOR id="GstGLShader--active" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstglshader.html#GstGLShader--active">
-<ANCHOR id="GstGLShader--compiled" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstglshader.html#GstGLShader--compiled">
-<ANCHOR id="GstGLShader--fragment-src" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstglshader.html#GstGLShader--fragment-src">
-<ANCHOR id="GstGLShader--vertex-src" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstglshader.html#GstGLShader--vertex-src">
+<ANCHOR id="gst-plugins-bad-libs-GstGLMemory" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-GstGLMemory.html">
+<ANCHOR id="gst-plugins-bad-libs-GstGLMemory.functions" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-GstGLMemory.html#gst-plugins-bad-libs-GstGLMemory.functions">
+<ANCHOR id="GstGLMemoryAllocator" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-GstGLMemory.html#GstGLMemoryAllocator">
+<ANCHOR id="gst-plugins-bad-libs-GstGLMemory.other" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-GstGLMemory.html#gst-plugins-bad-libs-GstGLMemory.other">
+<ANCHOR id="gst-plugins-bad-libs-GstGLMemory.object-hierarchy" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-GstGLMemory.html#gst-plugins-bad-libs-GstGLMemory.object-hierarchy">
+<ANCHOR id="gst-plugins-bad-libs-GstGLMemory.description" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-GstGLMemory.html#gst-plugins-bad-libs-GstGLMemory.description">
+<ANCHOR id="gst-plugins-bad-libs-GstGLMemory.functions_details" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-GstGLMemory.html#gst-plugins-bad-libs-GstGLMemory.functions_details">
+<ANCHOR id="GST-GL-ALLOCATION-PARAMS-ALLOC-FLAG-VIDEO:CAPS" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-GstGLMemory.html#GST-GL-ALLOCATION-PARAMS-ALLOC-FLAG-VIDEO:CAPS">
+<ANCHOR id="gst-gl-video-allocation-params-copy-data" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-GstGLMemory.html#gst-gl-video-allocation-params-copy-data">
+<ANCHOR id="gst-gl-video-allocation-params-free-data" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-GstGLMemory.html#gst-gl-video-allocation-params-free-data">
+<ANCHOR id="gst-gl-video-allocation-params-init-full" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-GstGLMemory.html#gst-gl-video-allocation-params-init-full">
+<ANCHOR id="gst-gl-video-allocation-params-new" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-GstGLMemory.html#gst-gl-video-allocation-params-new">
+<ANCHOR id="gst-gl-video-allocation-params-new-wrapped-data" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-GstGLMemory.html#gst-gl-video-allocation-params-new-wrapped-data">
+<ANCHOR id="gst-gl-video-allocation-params-new-wrapped-texture" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-GstGLMemory.html#gst-gl-video-allocation-params-new-wrapped-texture">
+<ANCHOR id="gst-gl-memory-allocator-get-default" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-GstGLMemory.html#gst-gl-memory-allocator-get-default">
+<ANCHOR id="gst-gl-memory-init-once" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-GstGLMemory.html#gst-gl-memory-init-once">
+<ANCHOR id="gst-gl-memory-init" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-GstGLMemory.html#gst-gl-memory-init">
+<ANCHOR id="gst-is-gl-memory" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-GstGLMemory.html#gst-is-gl-memory">
+<ANCHOR id="gst-gl-memory-copy-into" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-GstGLMemory.html#gst-gl-memory-copy-into">
+<ANCHOR id="gst-gl-memory-copy-teximage" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-GstGLMemory.html#gst-gl-memory-copy-teximage">
+<ANCHOR id="gst-gl-memory-read-pixels" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-GstGLMemory.html#gst-gl-memory-read-pixels">
+<ANCHOR id="gst-gl-memory-texsubimage" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-GstGLMemory.html#gst-gl-memory-texsubimage">
+<ANCHOR id="gst-gl-memory-get-texture-height" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-GstGLMemory.html#gst-gl-memory-get-texture-height">
+<ANCHOR id="gst-gl-memory-get-texture-id" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-GstGLMemory.html#gst-gl-memory-get-texture-id">
+<ANCHOR id="gst-gl-memory-get-texture-target" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-GstGLMemory.html#gst-gl-memory-get-texture-target">
+<ANCHOR id="gst-gl-memory-get-texture-type" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-GstGLMemory.html#gst-gl-memory-get-texture-type">
+<ANCHOR id="gst-gl-memory-get-texture-width" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-GstGLMemory.html#gst-gl-memory-get-texture-width">
+<ANCHOR id="gst-gl-memory-setup-buffer" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-GstGLMemory.html#gst-gl-memory-setup-buffer">
+<ANCHOR id="gst-plugins-bad-libs-GstGLMemory.other_details" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-GstGLMemory.html#gst-plugins-bad-libs-GstGLMemory.other_details">
+<ANCHOR id="GST-GL-MEMORY-VIDEO-FORMATS-STR:CAPS" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-GstGLMemory.html#GST-GL-MEMORY-VIDEO-FORMATS-STR:CAPS">
+<ANCHOR id="GstGLVideoAllocationParams" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-GstGLMemory.html#GstGLVideoAllocationParams">
+<ANCHOR id="GstGLMemoryAllocator-struct" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-GstGLMemory.html#GstGLMemoryAllocator-struct">
+<ANCHOR id="GstGLMemoryAllocatorClass" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-GstGLMemory.html#GstGLMemoryAllocatorClass">
+<ANCHOR id="GstGLMemory" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-GstGLMemory.html#GstGLMemory">
+<ANCHOR id="GST-GL-MEMORY-ALLOCATOR-NAME:CAPS" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-GstGLMemory.html#GST-GL-MEMORY-ALLOCATOR-NAME:CAPS">
+<ANCHOR id="gst-plugins-bad-libs-GstGLMemory.see-also" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-GstGLMemory.html#gst-plugins-bad-libs-GstGLMemory.see-also">
+<ANCHOR id="gst-plugins-bad-libs-gstglmemorypbo" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstglmemorypbo.html">
+<ANCHOR id="gst-plugins-bad-libs-gstglmemorypbo.functions" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstglmemorypbo.html#gst-plugins-bad-libs-gstglmemorypbo.functions">
+<ANCHOR id="GstGLMemoryPBOAllocator" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstglmemorypbo.html#GstGLMemoryPBOAllocator">
+<ANCHOR id="gst-plugins-bad-libs-gstglmemorypbo.other" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstglmemorypbo.html#gst-plugins-bad-libs-gstglmemorypbo.other">
+<ANCHOR id="gst-plugins-bad-libs-gstglmemorypbo.object-hierarchy" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstglmemorypbo.html#gst-plugins-bad-libs-gstglmemorypbo.object-hierarchy">
+<ANCHOR id="gst-plugins-bad-libs-gstglmemorypbo.description" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstglmemorypbo.html#gst-plugins-bad-libs-gstglmemorypbo.description">
+<ANCHOR id="gst-plugins-bad-libs-gstglmemorypbo.functions_details" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstglmemorypbo.html#gst-plugins-bad-libs-gstglmemorypbo.functions_details">
+<ANCHOR id="gst-is-gl-memory-pbo" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstglmemorypbo.html#gst-is-gl-memory-pbo">
+<ANCHOR id="gst-gl-memory-pbo-copy-into-texture" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstglmemorypbo.html#gst-gl-memory-pbo-copy-into-texture">
+<ANCHOR id="gst-gl-memory-pbo-download-transfer" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstglmemorypbo.html#gst-gl-memory-pbo-download-transfer">
+<ANCHOR id="gst-gl-memory-pbo-init-once" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstglmemorypbo.html#gst-gl-memory-pbo-init-once">
+<ANCHOR id="gst-gl-memory-pbo-upload-transfer" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstglmemorypbo.html#gst-gl-memory-pbo-upload-transfer">
+<ANCHOR id="gst-plugins-bad-libs-gstglmemorypbo.other_details" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstglmemorypbo.html#gst-plugins-bad-libs-gstglmemorypbo.other_details">
+<ANCHOR id="GstGLMemoryPBOAllocator-struct" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstglmemorypbo.html#GstGLMemoryPBOAllocator-struct">
+<ANCHOR id="GstGLMemoryPBOAllocatorClass" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstglmemorypbo.html#GstGLMemoryPBOAllocatorClass">
+<ANCHOR id="GST-GL-MEMORY-PBO-ALLOCATOR-NAME:CAPS" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstglmemorypbo.html#GST-GL-MEMORY-PBO-ALLOCATOR-NAME:CAPS">
+<ANCHOR id="GstGLMemoryPBO" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstglmemorypbo.html#GstGLMemoryPBO">
+<ANCHOR id="gst-plugins-bad-libs-gstglmemorypbo.see-also" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstglmemorypbo.html#gst-plugins-bad-libs-gstglmemorypbo.see-also">
+<ANCHOR id="GstGLShader" href="gst-plugins-bad-libs-1.0/GstGLShader.html">
+<ANCHOR id="GstGLShader.functions" href="gst-plugins-bad-libs-1.0/GstGLShader.html#GstGLShader.functions">
+<ANCHOR id="GstGLShader.properties" href="gst-plugins-bad-libs-1.0/GstGLShader.html#GstGLShader.properties">
+<ANCHOR id="GstGLShader.other" href="gst-plugins-bad-libs-1.0/GstGLShader.html#GstGLShader.other">
+<ANCHOR id="GstGLShader.object-hierarchy" href="gst-plugins-bad-libs-1.0/GstGLShader.html#GstGLShader.object-hierarchy">
+<ANCHOR id="GstGLShader.description" href="gst-plugins-bad-libs-1.0/GstGLShader.html#GstGLShader.description">
+<ANCHOR id="GstGLShader.functions_details" href="gst-plugins-bad-libs-1.0/GstGLShader.html#GstGLShader.functions_details">
+<ANCHOR id="gst-gl-shader-new" href="gst-plugins-bad-libs-1.0/GstGLShader.html#gst-gl-shader-new">
+<ANCHOR id="gst-gl-shader-new-default" href="gst-plugins-bad-libs-1.0/GstGLShader.html#gst-gl-shader-new-default">
+<ANCHOR id="gst-gl-shader-new-link-with-stages" href="gst-plugins-bad-libs-1.0/GstGLShader.html#gst-gl-shader-new-link-with-stages">
+<ANCHOR id="gst-gl-shader-new-with-stages" href="gst-plugins-bad-libs-1.0/GstGLShader.html#gst-gl-shader-new-with-stages">
+<ANCHOR id="gst-gl-shader-use" href="gst-plugins-bad-libs-1.0/GstGLShader.html#gst-gl-shader-use">
+<ANCHOR id="gst-gl-shader-get-program-handle" href="gst-plugins-bad-libs-1.0/GstGLShader.html#gst-gl-shader-get-program-handle">
+<ANCHOR id="gst-gl-shader-release" href="gst-plugins-bad-libs-1.0/GstGLShader.html#gst-gl-shader-release">
+<ANCHOR id="gst-gl-shader-release-unlocked" href="gst-plugins-bad-libs-1.0/GstGLShader.html#gst-gl-shader-release-unlocked">
+<ANCHOR id="gst-gl-shader-attach" href="gst-plugins-bad-libs-1.0/GstGLShader.html#gst-gl-shader-attach">
+<ANCHOR id="gst-gl-shader-attach-unlocked" href="gst-plugins-bad-libs-1.0/GstGLShader.html#gst-gl-shader-attach-unlocked">
+<ANCHOR id="gst-gl-shader-compile-attach-stage" href="gst-plugins-bad-libs-1.0/GstGLShader.html#gst-gl-shader-compile-attach-stage">
+<ANCHOR id="gst-gl-shader-detach" href="gst-plugins-bad-libs-1.0/GstGLShader.html#gst-gl-shader-detach">
+<ANCHOR id="gst-gl-shader-detach-unlocked" href="gst-plugins-bad-libs-1.0/GstGLShader.html#gst-gl-shader-detach-unlocked">
+<ANCHOR id="gst-gl-shader-is-linked" href="gst-plugins-bad-libs-1.0/GstGLShader.html#gst-gl-shader-is-linked">
+<ANCHOR id="gst-gl-shader-link" href="gst-plugins-bad-libs-1.0/GstGLShader.html#gst-gl-shader-link">
+<ANCHOR id="gst-gl-shader-set-uniform-1i" href="gst-plugins-bad-libs-1.0/GstGLShader.html#gst-gl-shader-set-uniform-1i">
+<ANCHOR id="gst-gl-shader-set-uniform-1f" href="gst-plugins-bad-libs-1.0/GstGLShader.html#gst-gl-shader-set-uniform-1f">
+<ANCHOR id="gst-gl-shader-set-uniform-1fv" href="gst-plugins-bad-libs-1.0/GstGLShader.html#gst-gl-shader-set-uniform-1fv">
+<ANCHOR id="gst-gl-shader-set-uniform-1iv" href="gst-plugins-bad-libs-1.0/GstGLShader.html#gst-gl-shader-set-uniform-1iv">
+<ANCHOR id="gst-gl-shader-set-uniform-2f" href="gst-plugins-bad-libs-1.0/GstGLShader.html#gst-gl-shader-set-uniform-2f">
+<ANCHOR id="gst-gl-shader-set-uniform-2fv" href="gst-plugins-bad-libs-1.0/GstGLShader.html#gst-gl-shader-set-uniform-2fv">
+<ANCHOR id="gst-gl-shader-set-uniform-2i" href="gst-plugins-bad-libs-1.0/GstGLShader.html#gst-gl-shader-set-uniform-2i">
+<ANCHOR id="gst-gl-shader-set-uniform-2iv" href="gst-plugins-bad-libs-1.0/GstGLShader.html#gst-gl-shader-set-uniform-2iv">
+<ANCHOR id="gst-gl-shader-set-uniform-3f" href="gst-plugins-bad-libs-1.0/GstGLShader.html#gst-gl-shader-set-uniform-3f">
+<ANCHOR id="gst-gl-shader-set-uniform-3fv" href="gst-plugins-bad-libs-1.0/GstGLShader.html#gst-gl-shader-set-uniform-3fv">
+<ANCHOR id="gst-gl-shader-set-uniform-3i" href="gst-plugins-bad-libs-1.0/GstGLShader.html#gst-gl-shader-set-uniform-3i">
+<ANCHOR id="gst-gl-shader-set-uniform-3iv" href="gst-plugins-bad-libs-1.0/GstGLShader.html#gst-gl-shader-set-uniform-3iv">
+<ANCHOR id="gst-gl-shader-set-uniform-4f" href="gst-plugins-bad-libs-1.0/GstGLShader.html#gst-gl-shader-set-uniform-4f">
+<ANCHOR id="gst-gl-shader-set-uniform-4fv" href="gst-plugins-bad-libs-1.0/GstGLShader.html#gst-gl-shader-set-uniform-4fv">
+<ANCHOR id="gst-gl-shader-set-uniform-4i" href="gst-plugins-bad-libs-1.0/GstGLShader.html#gst-gl-shader-set-uniform-4i">
+<ANCHOR id="gst-gl-shader-set-uniform-4iv" href="gst-plugins-bad-libs-1.0/GstGLShader.html#gst-gl-shader-set-uniform-4iv">
+<ANCHOR id="gst-gl-shader-set-uniform-matrix-2fv" href="gst-plugins-bad-libs-1.0/GstGLShader.html#gst-gl-shader-set-uniform-matrix-2fv">
+<ANCHOR id="gst-gl-shader-set-uniform-matrix-2x3fv" href="gst-plugins-bad-libs-1.0/GstGLShader.html#gst-gl-shader-set-uniform-matrix-2x3fv">
+<ANCHOR id="gst-gl-shader-set-uniform-matrix-2x4fv" href="gst-plugins-bad-libs-1.0/GstGLShader.html#gst-gl-shader-set-uniform-matrix-2x4fv">
+<ANCHOR id="gst-gl-shader-set-uniform-matrix-3fv" href="gst-plugins-bad-libs-1.0/GstGLShader.html#gst-gl-shader-set-uniform-matrix-3fv">
+<ANCHOR id="gst-gl-shader-set-uniform-matrix-3x2fv" href="gst-plugins-bad-libs-1.0/GstGLShader.html#gst-gl-shader-set-uniform-matrix-3x2fv">
+<ANCHOR id="gst-gl-shader-set-uniform-matrix-3x4fv" href="gst-plugins-bad-libs-1.0/GstGLShader.html#gst-gl-shader-set-uniform-matrix-3x4fv">
+<ANCHOR id="gst-gl-shader-set-uniform-matrix-4fv" href="gst-plugins-bad-libs-1.0/GstGLShader.html#gst-gl-shader-set-uniform-matrix-4fv">
+<ANCHOR id="gst-gl-shader-set-uniform-matrix-4x2fv" href="gst-plugins-bad-libs-1.0/GstGLShader.html#gst-gl-shader-set-uniform-matrix-4x2fv">
+<ANCHOR id="gst-gl-shader-set-uniform-matrix-4x3fv" href="gst-plugins-bad-libs-1.0/GstGLShader.html#gst-gl-shader-set-uniform-matrix-4x3fv">
+<ANCHOR id="gst-gl-shader-get-attribute-location" href="gst-plugins-bad-libs-1.0/GstGLShader.html#gst-gl-shader-get-attribute-location">
+<ANCHOR id="gst-gl-shader-bind-attribute-location" href="gst-plugins-bad-libs-1.0/GstGLShader.html#gst-gl-shader-bind-attribute-location">
+<ANCHOR id="GstGLShader.other_details" href="gst-plugins-bad-libs-1.0/GstGLShader.html#GstGLShader.other_details">
+<ANCHOR id="GstGLShader-struct" href="gst-plugins-bad-libs-1.0/GstGLShader.html#GstGLShader-struct">
+<ANCHOR id="GstGLShader.property-details" href="gst-plugins-bad-libs-1.0/GstGLShader.html#GstGLShader.property-details">
+<ANCHOR id="GstGLShader--linked" href="gst-plugins-bad-libs-1.0/GstGLShader.html#GstGLShader--linked">
+<ANCHOR id="GstGLShader.see-also" href="gst-plugins-bad-libs-1.0/GstGLShader.html#GstGLShader.see-also">
+<ANCHOR id="gst-plugins-bad-libs-GstGLSL" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-GstGLSL.html">
+<ANCHOR id="gst-plugins-bad-libs-GstGLSL.functions" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-GstGLSL.html#gst-plugins-bad-libs-GstGLSL.functions">
+<ANCHOR id="gst-plugins-bad-libs-GstGLSL.other" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-GstGLSL.html#gst-plugins-bad-libs-GstGLSL.other">
+<ANCHOR id="gst-plugins-bad-libs-GstGLSL.description" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-GstGLSL.html#gst-plugins-bad-libs-GstGLSL.description">
+<ANCHOR id="gst-plugins-bad-libs-GstGLSL.functions_details" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-GstGLSL.html#gst-plugins-bad-libs-GstGLSL.functions_details">
+<ANCHOR id="GST-GLSL-ERROR:CAPS" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-GstGLSL.html#GST-GLSL-ERROR:CAPS">
+<ANCHOR id="gst-glsl-error-quark" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-GstGLSL.html#gst-glsl-error-quark">
+<ANCHOR id="gst-glsl-profile-from-string" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-GstGLSL.html#gst-glsl-profile-from-string">
+<ANCHOR id="gst-glsl-profile-to-string" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-GstGLSL.html#gst-glsl-profile-to-string">
+<ANCHOR id="gst-glsl-version-from-string" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-GstGLSL.html#gst-glsl-version-from-string">
+<ANCHOR id="gst-glsl-version-to-string" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-GstGLSL.html#gst-glsl-version-to-string">
+<ANCHOR id="gst-glsl-version-profile-from-string" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-GstGLSL.html#gst-glsl-version-profile-from-string">
+<ANCHOR id="gst-glsl-version-profile-to-string" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-GstGLSL.html#gst-glsl-version-profile-to-string">
+<ANCHOR id="gst-glsl-string-get-version-profile" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-GstGLSL.html#gst-glsl-string-get-version-profile">
+<ANCHOR id="gst-gl-context-supports-glsl-profile-version" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-GstGLSL.html#gst-gl-context-supports-glsl-profile-version">
+<ANCHOR id="gst-gl-version-to-glsl-version" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-GstGLSL.html#gst-gl-version-to-glsl-version">
+<ANCHOR id="gst-plugins-bad-libs-GstGLSL.other_details" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-GstGLSL.html#gst-plugins-bad-libs-GstGLSL.other_details">
+<ANCHOR id="GstGLSLError" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-GstGLSL.html#GstGLSLError">
+<ANCHOR id="GST-GLSL-ERROR-COMPILE:CAPS" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-GstGLSL.html#GST-GLSL-ERROR-COMPILE:CAPS">
+<ANCHOR id="GST-GLSL-ERROR-LINK:CAPS" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-GstGLSL.html#GST-GLSL-ERROR-LINK:CAPS">
+<ANCHOR id="GST-GLSL-ERROR-PROGRAM:CAPS" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-GstGLSL.html#GST-GLSL-ERROR-PROGRAM:CAPS">
+<ANCHOR id="GstGLSLProfile" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-GstGLSL.html#GstGLSLProfile">
+<ANCHOR id="GST-GLSL-PROFILE-NONE:CAPS" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-GstGLSL.html#GST-GLSL-PROFILE-NONE:CAPS">
+<ANCHOR id="GST-GLSL-PROFILE-ES:CAPS" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-GstGLSL.html#GST-GLSL-PROFILE-ES:CAPS">
+<ANCHOR id="GST-GLSL-PROFILE-CORE:CAPS" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-GstGLSL.html#GST-GLSL-PROFILE-CORE:CAPS">
+<ANCHOR id="GST-GLSL-PROFILE-COMPATIBILITY:CAPS" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-GstGLSL.html#GST-GLSL-PROFILE-COMPATIBILITY:CAPS">
+<ANCHOR id="GST-GLSL-PROFILE-ANY:CAPS" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-GstGLSL.html#GST-GLSL-PROFILE-ANY:CAPS">
+<ANCHOR id="GstGLSLVersion" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-GstGLSL.html#GstGLSLVersion">
+<ANCHOR id="GST-GLSL-VERSION-NONE:CAPS" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-GstGLSL.html#GST-GLSL-VERSION-NONE:CAPS">
+<ANCHOR id="GST-GLSL-VERSION-100:CAPS" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-GstGLSL.html#GST-GLSL-VERSION-100:CAPS">
+<ANCHOR id="GST-GLSL-VERSION-110:CAPS" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-GstGLSL.html#GST-GLSL-VERSION-110:CAPS">
+<ANCHOR id="GST-GLSL-VERSION-120:CAPS" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-GstGLSL.html#GST-GLSL-VERSION-120:CAPS">
+<ANCHOR id="GST-GLSL-VERSION-130:CAPS" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-GstGLSL.html#GST-GLSL-VERSION-130:CAPS">
+<ANCHOR id="GST-GLSL-VERSION-140:CAPS" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-GstGLSL.html#GST-GLSL-VERSION-140:CAPS">
+<ANCHOR id="GST-GLSL-VERSION-150:CAPS" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-GstGLSL.html#GST-GLSL-VERSION-150:CAPS">
+<ANCHOR id="GST-GLSL-VERSION-300:CAPS" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-GstGLSL.html#GST-GLSL-VERSION-300:CAPS">
+<ANCHOR id="GST-GLSL-VERSION-310:CAPS" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-GstGLSL.html#GST-GLSL-VERSION-310:CAPS">
+<ANCHOR id="GST-GLSL-VERSION-320:CAPS" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-GstGLSL.html#GST-GLSL-VERSION-320:CAPS">
+<ANCHOR id="GST-GLSL-VERSION-330:CAPS" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-GstGLSL.html#GST-GLSL-VERSION-330:CAPS">
+<ANCHOR id="GST-GLSL-VERSION-400:CAPS" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-GstGLSL.html#GST-GLSL-VERSION-400:CAPS">
+<ANCHOR id="GST-GLSL-VERSION-410:CAPS" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-GstGLSL.html#GST-GLSL-VERSION-410:CAPS">
+<ANCHOR id="GST-GLSL-VERSION-420:CAPS" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-GstGLSL.html#GST-GLSL-VERSION-420:CAPS">
+<ANCHOR id="GST-GLSL-VERSION-430:CAPS" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-GstGLSL.html#GST-GLSL-VERSION-430:CAPS">
+<ANCHOR id="GST-GLSL-VERSION-440:CAPS" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-GstGLSL.html#GST-GLSL-VERSION-440:CAPS">
+<ANCHOR id="GST-GLSL-VERSION-450:CAPS" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-GstGLSL.html#GST-GLSL-VERSION-450:CAPS">
+<ANCHOR id="GST-GLSL-VERSION-ANY:CAPS" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-GstGLSL.html#GST-GLSL-VERSION-ANY:CAPS">
+<ANCHOR id="gst-plugins-bad-libs-GstGLSL.see-also" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-GstGLSL.html#gst-plugins-bad-libs-GstGLSL.see-also">
+<ANCHOR id="" href="gst-plugins-bad-libs-1.0/.html">
+<ANCHOR id="GstGLSLStage" href="gst-plugins-bad-libs-1.0/.html#GstGLSLStage">
+<ANCHOR id=".description" href="gst-plugins-bad-libs-1.0/.html#.description">
+<ANCHOR id=".functions_details" href="gst-plugins-bad-libs-1.0/.html#.functions_details">
+<ANCHOR id=".other_details" href="gst-plugins-bad-libs-1.0/.html#.other_details">
+<ANCHOR id=".see-also" href="gst-plugins-bad-libs-1.0/.html#.see-also">
 <ANCHOR id="gst-plugins-bad-libs-GstGLSyncMeta" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-GstGLSyncMeta.html">
 <ANCHOR id="gst-plugins-bad-libs-GstGLSyncMeta.functions" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-GstGLSyncMeta.html#gst-plugins-bad-libs-GstGLSyncMeta.functions">
 <ANCHOR id="gst-plugins-bad-libs-GstGLSyncMeta.other" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-GstGLSyncMeta.html#gst-plugins-bad-libs-GstGLSyncMeta.other">
 <ANCHOR id="gst-plugins-bad-libs-GstGLSyncMeta.description" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-GstGLSyncMeta.html#gst-plugins-bad-libs-GstGLSyncMeta.description">
 <ANCHOR id="gst-plugins-bad-libs-GstGLSyncMeta.functions_details" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-GstGLSyncMeta.html#gst-plugins-bad-libs-GstGLSyncMeta.functions_details">
 <ANCHOR id="gst-buffer-add-gl-sync-meta" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-GstGLSyncMeta.html#gst-buffer-add-gl-sync-meta">
+<ANCHOR id="gst-buffer-add-gl-sync-meta-full" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-GstGLSyncMeta.html#gst-buffer-add-gl-sync-meta-full">
 <ANCHOR id="gst-buffer-get-gl-sync-meta" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-GstGLSyncMeta.html#gst-buffer-get-gl-sync-meta">
 <ANCHOR id="gst-gl-sync-meta-api-get-type" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-GstGLSyncMeta.html#gst-gl-sync-meta-api-get-type">
 <ANCHOR id="gst-gl-sync-meta-get-info" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-GstGLSyncMeta.html#gst-gl-sync-meta-get-info">
 <ANCHOR id="gst-gl-sync-meta-set-sync-point" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-GstGLSyncMeta.html#gst-gl-sync-meta-set-sync-point">
 <ANCHOR id="gst-gl-sync-meta-wait" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-GstGLSyncMeta.html#gst-gl-sync-meta-wait">
+<ANCHOR id="gst-gl-sync-meta-wait-cpu" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-GstGLSyncMeta.html#gst-gl-sync-meta-wait-cpu">
 <ANCHOR id="gst-plugins-bad-libs-GstGLSyncMeta.other_details" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-GstGLSyncMeta.html#gst-plugins-bad-libs-GstGLSyncMeta.other_details">
 <ANCHOR id="GstGLSyncMeta" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-GstGLSyncMeta.html#GstGLSyncMeta">
 <ANCHOR id="GST-BUFFER-POOL-OPTION-GL-SYNC-META:CAPS" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-GstGLSyncMeta.html#GST-BUFFER-POOL-OPTION-GL-SYNC-META:CAPS">
@@ -1528,53 +1660,10 @@
 <ANCHOR id="gst-gl-upload-propose-allocation" href="gst-plugins-bad-libs-1.0/GstGLUpload.html#gst-gl-upload-propose-allocation">
 <ANCHOR id="gst-gl-upload-transform-caps" href="gst-plugins-bad-libs-1.0/GstGLUpload.html#gst-gl-upload-transform-caps">
 <ANCHOR id="gst-gl-upload-perform-with-buffer" href="gst-plugins-bad-libs-1.0/GstGLUpload.html#gst-gl-upload-perform-with-buffer">
-<ANCHOR id="gst-gl-upload-release-buffer" href="gst-plugins-bad-libs-1.0/GstGLUpload.html#gst-gl-upload-release-buffer">
+<ANCHOR id="gst-gl-upload-get-input-template-caps" href="gst-plugins-bad-libs-1.0/GstGLUpload.html#gst-gl-upload-get-input-template-caps">
 <ANCHOR id="GstGLUpload.other_details" href="gst-plugins-bad-libs-1.0/GstGLUpload.html#GstGLUpload.other_details">
 <ANCHOR id="GstGLUpload-struct" href="gst-plugins-bad-libs-1.0/GstGLUpload.html#GstGLUpload-struct">
 <ANCHOR id="GstGLUpload.see-also" href="gst-plugins-bad-libs-1.0/GstGLUpload.html#GstGLUpload.see-also">
-<ANCHOR id="GstGLUploadMeta" href="gst-plugins-bad-libs-1.0/GstGLUploadMeta.html">
-<ANCHOR id="GstGLUploadMeta.functions" href="gst-plugins-bad-libs-1.0/GstGLUploadMeta.html#GstGLUploadMeta.functions">
-<ANCHOR id="GstGLUploadMeta.other" href="gst-plugins-bad-libs-1.0/GstGLUploadMeta.html#GstGLUploadMeta.other">
-<ANCHOR id="GstGLUploadMeta.object-hierarchy" href="gst-plugins-bad-libs-1.0/GstGLUploadMeta.html#GstGLUploadMeta.object-hierarchy">
-<ANCHOR id="GstGLUploadMeta.description" href="gst-plugins-bad-libs-1.0/GstGLUploadMeta.html#GstGLUploadMeta.description">
-<ANCHOR id="GstGLUploadMeta.functions_details" href="gst-plugins-bad-libs-1.0/GstGLUploadMeta.html#GstGLUploadMeta.functions_details">
-<ANCHOR id="gst-gl-upload-meta-new" href="gst-plugins-bad-libs-1.0/GstGLUploadMeta.html#gst-gl-upload-meta-new">
-<ANCHOR id="gst-gl-upload-meta-set-format" href="gst-plugins-bad-libs-1.0/GstGLUploadMeta.html#gst-gl-upload-meta-set-format">
-<ANCHOR id="gst-gl-upload-meta-get-format" href="gst-plugins-bad-libs-1.0/GstGLUploadMeta.html#gst-gl-upload-meta-get-format">
-<ANCHOR id="gst-gl-upload-meta-add-to-buffer" href="gst-plugins-bad-libs-1.0/GstGLUploadMeta.html#gst-gl-upload-meta-add-to-buffer">
-<ANCHOR id="GstGLUploadMeta.other_details" href="gst-plugins-bad-libs-1.0/GstGLUploadMeta.html#GstGLUploadMeta.other_details">
-<ANCHOR id="GstGLUploadMeta-struct" href="gst-plugins-bad-libs-1.0/GstGLUploadMeta.html#GstGLUploadMeta-struct">
-<ANCHOR id="GstGLUploadMeta.see-also" href="gst-plugins-bad-libs-1.0/GstGLUploadMeta.html#GstGLUploadMeta.see-also">
-<ANCHOR id="gst-plugins-bad-libs-Utilities" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-Utilities.html">
-<ANCHOR id="gst-plugins-bad-libs-Utilities.functions" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-Utilities.html#gst-plugins-bad-libs-Utilities.functions">
-<ANCHOR id="gst-plugins-bad-libs-Utilities.other" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-Utilities.html#gst-plugins-bad-libs-Utilities.other">
-<ANCHOR id="gst-plugins-bad-libs-Utilities.description" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-Utilities.html#gst-plugins-bad-libs-Utilities.description">
-<ANCHOR id="gst-plugins-bad-libs-Utilities.functions_details" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-Utilities.html#gst-plugins-bad-libs-Utilities.functions_details">
-<ANCHOR id="GLCB:CAPS" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-Utilities.html#GLCB:CAPS">
-<ANCHOR id="GLCB-V2:CAPS" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-Utilities.html#GLCB-V2:CAPS">
-<ANCHOR id="CDCB:CAPS" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-Utilities.html#CDCB:CAPS">
-<ANCHOR id="gst-gl-handle-set-context" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-Utilities.html#gst-gl-handle-set-context">
-<ANCHOR id="gst-gl-handle-context-query" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-Utilities.html#gst-gl-handle-context-query">
-<ANCHOR id="gst-gl-context-gen-texture" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-Utilities.html#gst-gl-context-gen-texture">
-<ANCHOR id="gst-gl-context-del-texture" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-Utilities.html#gst-gl-context-del-texture">
-<ANCHOR id="gst-gl-context-gen-fbo" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-Utilities.html#gst-gl-context-gen-fbo">
-<ANCHOR id="gst-gl-context-del-fbo" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-Utilities.html#gst-gl-context-del-fbo">
-<ANCHOR id="gst-gl-context-use-fbo-v2" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-Utilities.html#gst-gl-context-use-fbo-v2">
-<ANCHOR id="gst-gl-context-gen-shader" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-Utilities.html#gst-gl-context-gen-shader">
-<ANCHOR id="gst-gl-context-del-shader" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-Utilities.html#gst-gl-context-del-shader">
-<ANCHOR id="gst-gl-context-check-framebuffer-status" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-Utilities.html#gst-gl-context-check-framebuffer-status">
-<ANCHOR id="gst-gl-context-set-error" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-Utilities.html#gst-gl-context-set-error">
-<ANCHOR id="gst-gl-context-get-error" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-Utilities.html#gst-gl-context-get-error">
-<ANCHOR id="gst-gl-context-clear-shader" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-Utilities.html#gst-gl-context-clear-shader">
-<ANCHOR id="gst-gl-generate-texture-full" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-Utilities.html#gst-gl-generate-texture-full">
-<ANCHOR id="gst-gl-caps-replace-all-caps-features" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-Utilities.html#gst-gl-caps-replace-all-caps-features">
-<ANCHOR id="gst-gl-ensure-element-data" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-Utilities.html#gst-gl-ensure-element-data">
-<ANCHOR id="gst-gl-get-plane-data-size" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-Utilities.html#gst-gl-get-plane-data-size">
-<ANCHOR id="gst-gl-run-query" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-Utilities.html#gst-gl-run-query">
-<ANCHOR id="gst-plugins-bad-libs-Utilities.other_details" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-Utilities.html#gst-plugins-bad-libs-Utilities.other_details">
-<ANCHOR id="GstGLDisplayProjection" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-Utilities.html#GstGLDisplayProjection">
-<ANCHOR id="GST-GL-DISPLAY-PROJECTION-ORTHO2D:CAPS" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-Utilities.html#GST-GL-DISPLAY-PROJECTION-ORTHO2D:CAPS">
-<ANCHOR id="GST-GL-DISPLAY-PROJECTION-PERSPECTIVE:CAPS" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-Utilities.html#GST-GL-DISPLAY-PROJECTION-PERSPECTIVE:CAPS">
 <ANCHOR id="GstGLWindow" href="gst-plugins-bad-libs-1.0/GstGLWindow.html">
 <ANCHOR id="GstGLWindow.functions" href="gst-plugins-bad-libs-1.0/GstGLWindow.html#GstGLWindow.functions">
 <ANCHOR id="GstGLWindow.signals" href="gst-plugins-bad-libs-1.0/GstGLWindow.html#GstGLWindow.signals">
@@ -1590,7 +1679,6 @@
 <ANCHOR id="GST-GL-WINDOW-CB:CAPS" href="gst-plugins-bad-libs-1.0/GstGLWindow.html#GST-GL-WINDOW-CB:CAPS">
 <ANCHOR id="gst-gl-window-new" href="gst-plugins-bad-libs-1.0/GstGLWindow.html#gst-gl-window-new">
 <ANCHOR id="gst-gl-window-draw" href="gst-plugins-bad-libs-1.0/GstGLWindow.html#gst-gl-window-draw">
-<ANCHOR id="gst-gl-window-draw-unlocked" href="gst-plugins-bad-libs-1.0/GstGLWindow.html#gst-gl-window-draw-unlocked">
 <ANCHOR id="gst-gl-window-is-running" href="gst-plugins-bad-libs-1.0/GstGLWindow.html#gst-gl-window-is-running">
 <ANCHOR id="gst-gl-window-quit" href="gst-plugins-bad-libs-1.0/GstGLWindow.html#gst-gl-window-quit">
 <ANCHOR id="gst-gl-window-run" href="gst-plugins-bad-libs-1.0/GstGLWindow.html#gst-gl-window-run">
@@ -1677,6 +1765,263 @@
 <ANCHOR id="gst-plugins-bad-libs-GstGLWindowX11.other_details" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-GstGLWindowX11.html#gst-plugins-bad-libs-GstGLWindowX11.other_details">
 <ANCHOR id="GstGLWindowX11" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-GstGLWindowX11.html#GstGLWindowX11">
 <ANCHOR id="GstGLWindowX11Class" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-GstGLWindowX11.html#GstGLWindowX11Class">
+<ANCHOR id="gst-plugins-bad-libs-OpenGL-debugging" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-OpenGL-debugging.html">
+<ANCHOR id="gst-plugins-bad-libs-OpenGL-debugging.functions" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-OpenGL-debugging.html#gst-plugins-bad-libs-OpenGL-debugging.functions">
+<ANCHOR id="gst-plugins-bad-libs-OpenGL-debugging.other" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-OpenGL-debugging.html#gst-plugins-bad-libs-OpenGL-debugging.other">
+<ANCHOR id="gst-plugins-bad-libs-OpenGL-debugging.description" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-OpenGL-debugging.html#gst-plugins-bad-libs-OpenGL-debugging.description">
+<ANCHOR id="gst-plugins-bad-libs-OpenGL-debugging.functions_details" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-OpenGL-debugging.html#gst-plugins-bad-libs-OpenGL-debugging.functions_details">
+<ANCHOR id="GstGLAsyncDebugLogGetMessage" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-OpenGL-debugging.html#GstGLAsyncDebugLogGetMessage">
+<ANCHOR id="gst-gl-async-debug-new" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-OpenGL-debugging.html#gst-gl-async-debug-new">
+<ANCHOR id="gst-gl-async-debug-free" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-OpenGL-debugging.html#gst-gl-async-debug-free">
+<ANCHOR id="gst-gl-async-debug-init" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-OpenGL-debugging.html#gst-gl-async-debug-init">
+<ANCHOR id="gst-gl-async-debug-unset" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-OpenGL-debugging.html#gst-gl-async-debug-unset">
+<ANCHOR id="gst-gl-async-debug-freeze" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-OpenGL-debugging.html#gst-gl-async-debug-freeze">
+<ANCHOR id="gst-gl-async-debug-thaw" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-OpenGL-debugging.html#gst-gl-async-debug-thaw">
+<ANCHOR id="gst-gl-async-debug-output-log-msg" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-OpenGL-debugging.html#gst-gl-async-debug-output-log-msg">
+<ANCHOR id="gst-gl-async-debug-store-log-msg" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-OpenGL-debugging.html#gst-gl-async-debug-store-log-msg">
+<ANCHOR id="gst-gl-async-debug-store-log-msg-valist" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-OpenGL-debugging.html#gst-gl-async-debug-store-log-msg-valist">
+<ANCHOR id="GST-GL-ASYNC-CAT-LEVEL-LOG-valist" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-OpenGL-debugging.html#GST-GL-ASYNC-CAT-LEVEL-LOG-valist">
+<ANCHOR id="GST-GL-ASYNC-CAT-LEVEL-LOG:CAPS" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-OpenGL-debugging.html#GST-GL-ASYNC-CAT-LEVEL-LOG:CAPS">
+<ANCHOR id="gst-gl-insert-debug-marker" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-OpenGL-debugging.html#gst-gl-insert-debug-marker">
+<ANCHOR id="gst-plugins-bad-libs-OpenGL-debugging.other_details" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-OpenGL-debugging.html#gst-plugins-bad-libs-OpenGL-debugging.other_details">
+<ANCHOR id="GstGLAsyncDebug" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-OpenGL-debugging.html#GstGLAsyncDebug">
+<ANCHOR id="gst-plugins-bad-libs-OpenGL-debugging.see-also" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-OpenGL-debugging.html#gst-plugins-bad-libs-OpenGL-debugging.see-also">
+<ANCHOR id="gst-plugins-bad-libs-OpenGL-Miscellaneous-Utilities" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-OpenGL-Miscellaneous-Utilities.html">
+<ANCHOR id="gst-plugins-bad-libs-OpenGL-Miscellaneous-Utilities.functions" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-OpenGL-Miscellaneous-Utilities.html#gst-plugins-bad-libs-OpenGL-Miscellaneous-Utilities.functions">
+<ANCHOR id="gst-plugins-bad-libs-OpenGL-Miscellaneous-Utilities.other" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-OpenGL-Miscellaneous-Utilities.html#gst-plugins-bad-libs-OpenGL-Miscellaneous-Utilities.other">
+<ANCHOR id="gst-plugins-bad-libs-OpenGL-Miscellaneous-Utilities.description" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-OpenGL-Miscellaneous-Utilities.html#gst-plugins-bad-libs-OpenGL-Miscellaneous-Utilities.description">
+<ANCHOR id="gst-plugins-bad-libs-OpenGL-Miscellaneous-Utilities.functions_details" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-OpenGL-Miscellaneous-Utilities.html#gst-plugins-bad-libs-OpenGL-Miscellaneous-Utilities.functions_details">
+<ANCHOR id="GLCB:CAPS" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-OpenGL-Miscellaneous-Utilities.html#GLCB:CAPS">
+<ANCHOR id="GLCB-V2:CAPS" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-OpenGL-Miscellaneous-Utilities.html#GLCB-V2:CAPS">
+<ANCHOR id="CDCB:CAPS" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-OpenGL-Miscellaneous-Utilities.html#CDCB:CAPS">
+<ANCHOR id="gst-gl-handle-set-context" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-OpenGL-Miscellaneous-Utilities.html#gst-gl-handle-set-context">
+<ANCHOR id="gst-gl-handle-context-query" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-OpenGL-Miscellaneous-Utilities.html#gst-gl-handle-context-query">
+<ANCHOR id="gst-gl-context-gen-texture" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-OpenGL-Miscellaneous-Utilities.html#gst-gl-context-gen-texture">
+<ANCHOR id="gst-gl-context-del-texture" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-OpenGL-Miscellaneous-Utilities.html#gst-gl-context-del-texture">
+<ANCHOR id="gst-gl-context-gen-fbo" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-OpenGL-Miscellaneous-Utilities.html#gst-gl-context-gen-fbo">
+<ANCHOR id="gst-gl-context-del-fbo" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-OpenGL-Miscellaneous-Utilities.html#gst-gl-context-del-fbo">
+<ANCHOR id="gst-gl-context-use-fbo-v2" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-OpenGL-Miscellaneous-Utilities.html#gst-gl-context-use-fbo-v2">
+<ANCHOR id="gst-gl-context-gen-shader" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-OpenGL-Miscellaneous-Utilities.html#gst-gl-context-gen-shader">
+<ANCHOR id="gst-gl-context-del-shader" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-OpenGL-Miscellaneous-Utilities.html#gst-gl-context-del-shader">
+<ANCHOR id="gst-gl-context-check-framebuffer-status" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-OpenGL-Miscellaneous-Utilities.html#gst-gl-context-check-framebuffer-status">
+<ANCHOR id="gst-gl-context-set-error" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-OpenGL-Miscellaneous-Utilities.html#gst-gl-context-set-error">
+<ANCHOR id="gst-gl-context-get-error" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-OpenGL-Miscellaneous-Utilities.html#gst-gl-context-get-error">
+<ANCHOR id="gst-gl-context-clear-shader" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-OpenGL-Miscellaneous-Utilities.html#gst-gl-context-clear-shader">
+<ANCHOR id="gst-gl-generate-texture-full" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-OpenGL-Miscellaneous-Utilities.html#gst-gl-generate-texture-full">
+<ANCHOR id="gst-gl-caps-replace-all-caps-features" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-OpenGL-Miscellaneous-Utilities.html#gst-gl-caps-replace-all-caps-features">
+<ANCHOR id="gst-gl-ensure-element-data" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-OpenGL-Miscellaneous-Utilities.html#gst-gl-ensure-element-data">
+<ANCHOR id="gst-gl-get-plane-data-size" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-OpenGL-Miscellaneous-Utilities.html#gst-gl-get-plane-data-size">
+<ANCHOR id="gst-gl-get-plane-start" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-OpenGL-Miscellaneous-Utilities.html#gst-gl-get-plane-start">
+<ANCHOR id="gst-gl-run-query" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-OpenGL-Miscellaneous-Utilities.html#gst-gl-run-query">
+<ANCHOR id="gst-gl-value-get-texture-target-mask" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-OpenGL-Miscellaneous-Utilities.html#gst-gl-value-get-texture-target-mask">
+<ANCHOR id="gst-gl-value-set-texture-target" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-OpenGL-Miscellaneous-Utilities.html#gst-gl-value-set-texture-target">
+<ANCHOR id="gst-gl-value-set-texture-target-from-mask" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-OpenGL-Miscellaneous-Utilities.html#gst-gl-value-set-texture-target-from-mask">
+<ANCHOR id="gst-plugins-bad-libs-OpenGL-Miscellaneous-Utilities.other_details" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-OpenGL-Miscellaneous-Utilities.html#gst-plugins-bad-libs-OpenGL-Miscellaneous-Utilities.other_details">
+<ANCHOR id="GstGLDisplayProjection" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-OpenGL-Miscellaneous-Utilities.html#GstGLDisplayProjection">
+<ANCHOR id="GST-GL-DISPLAY-PROJECTION-ORTHO2D:CAPS" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-OpenGL-Miscellaneous-Utilities.html#GST-GL-DISPLAY-PROJECTION-ORTHO2D:CAPS">
+<ANCHOR id="GST-GL-DISPLAY-PROJECTION-PERSPECTIVE:CAPS" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-OpenGL-Miscellaneous-Utilities.html#GST-GL-DISPLAY-PROJECTION-PERSPECTIVE:CAPS">
+<ANCHOR id="gst-plugins-bad-libs-OpenGL-Formats" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-OpenGL-Formats.html">
+<ANCHOR id="gst-plugins-bad-libs-OpenGL-Formats.functions" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-OpenGL-Formats.html#gst-plugins-bad-libs-OpenGL-Formats.functions">
+<ANCHOR id="gst-plugins-bad-libs-OpenGL-Formats.other" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-OpenGL-Formats.html#gst-plugins-bad-libs-OpenGL-Formats.other">
+<ANCHOR id="gst-plugins-bad-libs-OpenGL-Formats.description" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-OpenGL-Formats.html#gst-plugins-bad-libs-OpenGL-Formats.description">
+<ANCHOR id="gst-plugins-bad-libs-OpenGL-Formats.functions_details" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-OpenGL-Formats.html#gst-plugins-bad-libs-OpenGL-Formats.functions_details">
+<ANCHOR id="gst-gl-format-type-n-bytes" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-OpenGL-Formats.html#gst-gl-format-type-n-bytes">
+<ANCHOR id="gst-gl-texture-type-n-bytes" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-OpenGL-Formats.html#gst-gl-texture-type-n-bytes">
+<ANCHOR id="gst-gl-format-from-gl-texture-type" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-OpenGL-Formats.html#gst-gl-format-from-gl-texture-type">
+<ANCHOR id="gst-gl-texture-type-from-format" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-OpenGL-Formats.html#gst-gl-texture-type-from-format">
+<ANCHOR id="gst-gl-sized-gl-format-from-gl-format-type" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-OpenGL-Formats.html#gst-gl-sized-gl-format-from-gl-format-type">
+<ANCHOR id="gst-gl-texture-target-from-string" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-OpenGL-Formats.html#gst-gl-texture-target-from-string">
+<ANCHOR id="gst-gl-texture-target-to-string" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-OpenGL-Formats.html#gst-gl-texture-target-to-string">
+<ANCHOR id="gst-gl-texture-target-to-gl" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-OpenGL-Formats.html#gst-gl-texture-target-to-gl">
+<ANCHOR id="gst-gl-texture-target-from-gl" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-OpenGL-Formats.html#gst-gl-texture-target-from-gl">
+<ANCHOR id="gst-gl-texture-target-to-buffer-pool-option" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-OpenGL-Formats.html#gst-gl-texture-target-to-buffer-pool-option">
+<ANCHOR id="gst-plugins-bad-libs-OpenGL-Formats.other_details" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-OpenGL-Formats.html#gst-plugins-bad-libs-OpenGL-Formats.other_details">
+<ANCHOR id="GstGLTextureTarget" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-OpenGL-Formats.html#GstGLTextureTarget">
+<ANCHOR id="GST-GL-TEXTURE-TARGET-NONE:CAPS" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-OpenGL-Formats.html#GST-GL-TEXTURE-TARGET-NONE:CAPS">
+<ANCHOR id="GST-GL-TEXTURE-TARGET-2D:CAPS" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-OpenGL-Formats.html#GST-GL-TEXTURE-TARGET-2D:CAPS">
+<ANCHOR id="GST-GL-TEXTURE-TARGET-RECTANGLE:CAPS" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-OpenGL-Formats.html#GST-GL-TEXTURE-TARGET-RECTANGLE:CAPS">
+<ANCHOR id="GST-GL-TEXTURE-TARGET-EXTERNAL-OES:CAPS" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-OpenGL-Formats.html#GST-GL-TEXTURE-TARGET-EXTERNAL-OES:CAPS">
+<ANCHOR id="GST-GL-TEXTURE-TARGET-2D-STR:CAPS" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-OpenGL-Formats.html#GST-GL-TEXTURE-TARGET-2D-STR:CAPS">
+<ANCHOR id="GST-GL-TEXTURE-TARGET-RECTANGLE-STR:CAPS" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-OpenGL-Formats.html#GST-GL-TEXTURE-TARGET-RECTANGLE-STR:CAPS">
+<ANCHOR id="GST-GL-TEXTURE-TARGET-EXTERNAL-OES-STR:CAPS" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-OpenGL-Formats.html#GST-GL-TEXTURE-TARGET-EXTERNAL-OES-STR:CAPS">
+<ANCHOR id="GST-BUFFER-POOL-OPTION-GL-TEXTURE-TARGET-2D:CAPS" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-OpenGL-Formats.html#GST-BUFFER-POOL-OPTION-GL-TEXTURE-TARGET-2D:CAPS">
+<ANCHOR id="GST-BUFFER-POOL-OPTION-GL-TEXTURE-TARGET-RECTANGLE:CAPS" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-OpenGL-Formats.html#GST-BUFFER-POOL-OPTION-GL-TEXTURE-TARGET-RECTANGLE:CAPS">
+<ANCHOR id="GST-BUFFER-POOL-OPTION-GL-TEXTURE-TARGET-EXTERNAL-OES:CAPS" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-OpenGL-Formats.html#GST-BUFFER-POOL-OPTION-GL-TEXTURE-TARGET-EXTERNAL-OES:CAPS">
+<ANCHOR id="gst-plugins-bad-libs-gstplayer" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstplayer.html">
+<ANCHOR id="gst-plugins-bad-libs-gstplayer.functions" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstplayer.html#gst-plugins-bad-libs-gstplayer.functions">
+<ANCHOR id="gst-plugins-bad-libs-gstplayer.properties" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstplayer.html#gst-plugins-bad-libs-gstplayer.properties">
+<ANCHOR id="gst-plugins-bad-libs-gstplayer.signals" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstplayer.html#gst-plugins-bad-libs-gstplayer.signals">
+<ANCHOR id="GstPlayer" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstplayer.html#GstPlayer">
+<ANCHOR id="GstPlayerSignalDispatcher" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstplayer.html#GstPlayerSignalDispatcher">
+<ANCHOR id="GstPlayerVideoRenderer" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstplayer.html#GstPlayerVideoRenderer">
+<ANCHOR id="gst-plugins-bad-libs-gstplayer.other" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstplayer.html#gst-plugins-bad-libs-gstplayer.other">
+<ANCHOR id="gst-plugins-bad-libs-gstplayer.object-hierarchy" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstplayer.html#gst-plugins-bad-libs-gstplayer.object-hierarchy">
+<ANCHOR id="gst-plugins-bad-libs-gstplayer.prerequisites" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstplayer.html#gst-plugins-bad-libs-gstplayer.prerequisites">
+<ANCHOR id="gst-plugins-bad-libs-gstplayer.implementations" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstplayer.html#gst-plugins-bad-libs-gstplayer.implementations">
+<ANCHOR id="gst-plugins-bad-libs-gstplayer.description" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstplayer.html#gst-plugins-bad-libs-gstplayer.description">
+<ANCHOR id="gst-plugins-bad-libs-gstplayer.functions_details" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstplayer.html#gst-plugins-bad-libs-gstplayer.functions_details">
+<ANCHOR id="gst-player-new" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstplayer.html#gst-player-new">
+<ANCHOR id="gst-player-play" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstplayer.html#gst-player-play">
+<ANCHOR id="gst-player-pause" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstplayer.html#gst-player-pause">
+<ANCHOR id="gst-player-stop" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstplayer.html#gst-player-stop">
+<ANCHOR id="gst-player-seek" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstplayer.html#gst-player-seek">
+<ANCHOR id="gst-player-set-uri" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstplayer.html#gst-player-set-uri">
+<ANCHOR id="gst-player-get-uri" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstplayer.html#gst-player-get-uri">
+<ANCHOR id="gst-player-get-duration" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstplayer.html#gst-player-get-duration">
+<ANCHOR id="gst-player-get-position" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstplayer.html#gst-player-get-position">
+<ANCHOR id="gst-player-set-volume" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstplayer.html#gst-player-set-volume">
+<ANCHOR id="gst-player-set-mute" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstplayer.html#gst-player-set-mute">
+<ANCHOR id="gst-player-get-volume" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstplayer.html#gst-player-get-volume">
+<ANCHOR id="gst-player-get-mute" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstplayer.html#gst-player-get-mute">
+<ANCHOR id="gst-player-get-pipeline" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstplayer.html#gst-player-get-pipeline">
+<ANCHOR id="gst-player-set-position-update-interval" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstplayer.html#gst-player-set-position-update-interval">
+<ANCHOR id="gst-player-get-position-update-interval" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstplayer.html#gst-player-get-position-update-interval">
+<ANCHOR id="gst-player-state-get-name" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstplayer.html#gst-player-state-get-name">
+<ANCHOR id="GST-PLAYER-ERROR:CAPS" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstplayer.html#GST-PLAYER-ERROR:CAPS">
+<ANCHOR id="gst-player-error-get-name" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstplayer.html#gst-player-error-get-name">
+<ANCHOR id="gst-player-get-media-info" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstplayer.html#gst-player-get-media-info">
+<ANCHOR id="gst-player-get-audio-streams" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstplayer.html#gst-player-get-audio-streams">
+<ANCHOR id="gst-player-get-video-streams" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstplayer.html#gst-player-get-video-streams">
+<ANCHOR id="gst-player-get-subtitle-streams" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstplayer.html#gst-player-get-subtitle-streams">
+<ANCHOR id="gst-player-set-audio-track" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstplayer.html#gst-player-set-audio-track">
+<ANCHOR id="gst-player-set-video-track" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstplayer.html#gst-player-set-video-track">
+<ANCHOR id="gst-player-set-subtitle-track" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstplayer.html#gst-player-set-subtitle-track">
+<ANCHOR id="gst-player-get-current-audio-track" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstplayer.html#gst-player-get-current-audio-track">
+<ANCHOR id="gst-player-get-current-video-track" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstplayer.html#gst-player-get-current-video-track">
+<ANCHOR id="gst-player-get-current-subtitle-track" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstplayer.html#gst-player-get-current-subtitle-track">
+<ANCHOR id="gst-player-set-audio-track-enabled" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstplayer.html#gst-player-set-audio-track-enabled">
+<ANCHOR id="gst-player-set-video-track-enabled" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstplayer.html#gst-player-set-video-track-enabled">
+<ANCHOR id="gst-player-set-subtitle-track-enabled" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstplayer.html#gst-player-set-subtitle-track-enabled">
+<ANCHOR id="gst-player-set-subtitle-uri" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstplayer.html#gst-player-set-subtitle-uri">
+<ANCHOR id="gst-player-get-subtitle-uri" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstplayer.html#gst-player-get-subtitle-uri">
+<ANCHOR id="gst-player-set-visualization" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstplayer.html#gst-player-set-visualization">
+<ANCHOR id="gst-player-set-visualization-enabled" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstplayer.html#gst-player-set-visualization-enabled">
+<ANCHOR id="gst-player-get-current-visualization" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstplayer.html#gst-player-get-current-visualization">
+<ANCHOR id="gst-player-color-balance-type-get-name" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstplayer.html#gst-player-color-balance-type-get-name">
+<ANCHOR id="gst-player-has-color-balance" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstplayer.html#gst-player-has-color-balance">
+<ANCHOR id="gst-player-set-color-balance" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstplayer.html#gst-player-set-color-balance">
+<ANCHOR id="gst-player-get-color-balance" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstplayer.html#gst-player-get-color-balance">
+<ANCHOR id="gst-player-get-rate" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstplayer.html#gst-player-get-rate">
+<ANCHOR id="gst-player-set-rate" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstplayer.html#gst-player-set-rate">
+<ANCHOR id="gst-plugins-bad-libs-gstplayer.other_details" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstplayer.html#gst-plugins-bad-libs-gstplayer.other_details">
+<ANCHOR id="GstPlayer-struct" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstplayer.html#GstPlayer-struct">
+<ANCHOR id="GstPlayerState" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstplayer.html#GstPlayerState">
+<ANCHOR id="GST-PLAYER-STATE-STOPPED:CAPS" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstplayer.html#GST-PLAYER-STATE-STOPPED:CAPS">
+<ANCHOR id="GST-PLAYER-STATE-BUFFERING:CAPS" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstplayer.html#GST-PLAYER-STATE-BUFFERING:CAPS">
+<ANCHOR id="GST-PLAYER-STATE-PAUSED:CAPS" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstplayer.html#GST-PLAYER-STATE-PAUSED:CAPS">
+<ANCHOR id="GST-PLAYER-STATE-PLAYING:CAPS" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstplayer.html#GST-PLAYER-STATE-PLAYING:CAPS">
+<ANCHOR id="GstPlayerError" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstplayer.html#GstPlayerError">
+<ANCHOR id="GST-PLAYER-ERROR-FAILED:CAPS" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstplayer.html#GST-PLAYER-ERROR-FAILED:CAPS">
+<ANCHOR id="GstPlayerColorBalanceType" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstplayer.html#GstPlayerColorBalanceType">
+<ANCHOR id="GST-PLAYER-COLOR-BALANCE-BRIGHTNESS:CAPS" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstplayer.html#GST-PLAYER-COLOR-BALANCE-BRIGHTNESS:CAPS">
+<ANCHOR id="GST-PLAYER-COLOR-BALANCE-CONTRAST:CAPS" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstplayer.html#GST-PLAYER-COLOR-BALANCE-CONTRAST:CAPS">
+<ANCHOR id="GST-PLAYER-COLOR-BALANCE-SATURATION:CAPS" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstplayer.html#GST-PLAYER-COLOR-BALANCE-SATURATION:CAPS">
+<ANCHOR id="GST-PLAYER-COLOR-BALANCE-HUE:CAPS" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstplayer.html#GST-PLAYER-COLOR-BALANCE-HUE:CAPS">
+<ANCHOR id="GstPlayerSignalDispatcher-struct" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstplayer.html#GstPlayerSignalDispatcher-struct">
+<ANCHOR id="GstPlayerSignalDispatcherInterface" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstplayer.html#GstPlayerSignalDispatcherInterface">
+<ANCHOR id="GstPlayerVideoRenderer-struct" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstplayer.html#GstPlayerVideoRenderer-struct">
+<ANCHOR id="GstPlayerVideoRendererInterface" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstplayer.html#GstPlayerVideoRendererInterface">
+<ANCHOR id="gst-plugins-bad-libs-gstplayer.property-details" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstplayer.html#gst-plugins-bad-libs-gstplayer.property-details">
+<ANCHOR id="GstPlayer--current-audio-track" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstplayer.html#GstPlayer--current-audio-track">
+<ANCHOR id="GstPlayer--current-subtitle-track" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstplayer.html#GstPlayer--current-subtitle-track">
+<ANCHOR id="GstPlayer--current-video-track" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstplayer.html#GstPlayer--current-video-track">
+<ANCHOR id="GstPlayer--duration" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstplayer.html#GstPlayer--duration">
+<ANCHOR id="GstPlayer--media-info" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstplayer.html#GstPlayer--media-info">
+<ANCHOR id="GstPlayer--mute" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstplayer.html#GstPlayer--mute">
+<ANCHOR id="GstPlayer--pipeline" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstplayer.html#GstPlayer--pipeline">
+<ANCHOR id="GstPlayer--position" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstplayer.html#GstPlayer--position">
+<ANCHOR id="GstPlayer--position-update-interval" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstplayer.html#GstPlayer--position-update-interval">
+<ANCHOR id="GstPlayer--rate" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstplayer.html#GstPlayer--rate">
+<ANCHOR id="GstPlayer--signal-dispatcher" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstplayer.html#GstPlayer--signal-dispatcher">
+<ANCHOR id="GstPlayer--suburi" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstplayer.html#GstPlayer--suburi">
+<ANCHOR id="GstPlayer--uri" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstplayer.html#GstPlayer--uri">
+<ANCHOR id="GstPlayer--video-renderer" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstplayer.html#GstPlayer--video-renderer">
+<ANCHOR id="GstPlayer--volume" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstplayer.html#GstPlayer--volume">
+<ANCHOR id="gst-plugins-bad-libs-gstplayer.signal-details" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstplayer.html#gst-plugins-bad-libs-gstplayer.signal-details">
+<ANCHOR id="GstPlayer-buffering" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstplayer.html#GstPlayer-buffering">
+<ANCHOR id="GstPlayer-duration-changed" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstplayer.html#GstPlayer-duration-changed">
+<ANCHOR id="GstPlayer-end-of-stream" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstplayer.html#GstPlayer-end-of-stream">
+<ANCHOR id="GstPlayer-error" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstplayer.html#GstPlayer-error">
+<ANCHOR id="GstPlayer-media-info-updated" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstplayer.html#GstPlayer-media-info-updated">
+<ANCHOR id="GstPlayer-mute-changed" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstplayer.html#GstPlayer-mute-changed">
+<ANCHOR id="GstPlayer-position-updated" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstplayer.html#GstPlayer-position-updated">
+<ANCHOR id="GstPlayer-seek-done" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstplayer.html#GstPlayer-seek-done">
+<ANCHOR id="GstPlayer-state-changed" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstplayer.html#GstPlayer-state-changed">
+<ANCHOR id="GstPlayer-video-dimensions-changed" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstplayer.html#GstPlayer-video-dimensions-changed">
+<ANCHOR id="GstPlayer-volume-changed" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstplayer.html#GstPlayer-volume-changed">
+<ANCHOR id="GstPlayer-warning" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstplayer.html#GstPlayer-warning">
+<ANCHOR id="gst-plugins-bad-libs-gstplayer-mediainfo" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstplayer-mediainfo.html">
+<ANCHOR id="gst-plugins-bad-libs-gstplayer-mediainfo.functions" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstplayer-mediainfo.html#gst-plugins-bad-libs-gstplayer-mediainfo.functions">
+<ANCHOR id="GstPlayerMediaInfo" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstplayer-mediainfo.html#GstPlayerMediaInfo">
+<ANCHOR id="GstPlayerStreamInfo" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstplayer-mediainfo.html#GstPlayerStreamInfo">
+<ANCHOR id="GstPlayerAudioInfo" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstplayer-mediainfo.html#GstPlayerAudioInfo">
+<ANCHOR id="GstPlayerVideoInfo" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstplayer-mediainfo.html#GstPlayerVideoInfo">
+<ANCHOR id="GstPlayerSubtitleInfo" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstplayer-mediainfo.html#GstPlayerSubtitleInfo">
+<ANCHOR id="gst-plugins-bad-libs-gstplayer-mediainfo.other" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstplayer-mediainfo.html#gst-plugins-bad-libs-gstplayer-mediainfo.other">
+<ANCHOR id="gst-plugins-bad-libs-gstplayer-mediainfo.object-hierarchy" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstplayer-mediainfo.html#gst-plugins-bad-libs-gstplayer-mediainfo.object-hierarchy">
+<ANCHOR id="gst-plugins-bad-libs-gstplayer-mediainfo.description" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstplayer-mediainfo.html#gst-plugins-bad-libs-gstplayer-mediainfo.description">
+<ANCHOR id="gst-plugins-bad-libs-gstplayer-mediainfo.functions_details" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstplayer-mediainfo.html#gst-plugins-bad-libs-gstplayer-mediainfo.functions_details">
+<ANCHOR id="gst-player-media-info-get-uri" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstplayer-mediainfo.html#gst-player-media-info-get-uri">
+<ANCHOR id="gst-player-media-info-get-duration" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstplayer-mediainfo.html#gst-player-media-info-get-duration">
+<ANCHOR id="gst-player-media-info-get-title" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstplayer-mediainfo.html#gst-player-media-info-get-title">
+<ANCHOR id="gst-player-media-info-get-container-format" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstplayer-mediainfo.html#gst-player-media-info-get-container-format">
+<ANCHOR id="gst-player-media-info-is-seekable" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstplayer-mediainfo.html#gst-player-media-info-is-seekable">
+<ANCHOR id="gst-player-media-info-get-image-sample" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstplayer-mediainfo.html#gst-player-media-info-get-image-sample">
+<ANCHOR id="gst-player-media-info-get-tags" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstplayer-mediainfo.html#gst-player-media-info-get-tags">
+<ANCHOR id="gst-player-media-info-get-stream-list" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstplayer-mediainfo.html#gst-player-media-info-get-stream-list">
+<ANCHOR id="gst-player-stream-info-get-index" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstplayer-mediainfo.html#gst-player-stream-info-get-index">
+<ANCHOR id="gst-player-stream-info-get-caps" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstplayer-mediainfo.html#gst-player-stream-info-get-caps">
+<ANCHOR id="gst-player-stream-info-get-tags" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstplayer-mediainfo.html#gst-player-stream-info-get-tags">
+<ANCHOR id="gst-player-stream-info-get-codec" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstplayer-mediainfo.html#gst-player-stream-info-get-codec">
+<ANCHOR id="gst-player-stream-info-get-stream-type" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstplayer-mediainfo.html#gst-player-stream-info-get-stream-type">
+<ANCHOR id="gst-player-audio-info-get-bitrate" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstplayer-mediainfo.html#gst-player-audio-info-get-bitrate">
+<ANCHOR id="gst-player-audio-info-get-channels" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstplayer-mediainfo.html#gst-player-audio-info-get-channels">
+<ANCHOR id="gst-player-audio-info-get-language" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstplayer-mediainfo.html#gst-player-audio-info-get-language">
+<ANCHOR id="gst-player-audio-info-get-max-bitrate" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstplayer-mediainfo.html#gst-player-audio-info-get-max-bitrate">
+<ANCHOR id="gst-player-audio-info-get-sample-rate" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstplayer-mediainfo.html#gst-player-audio-info-get-sample-rate">
+<ANCHOR id="gst-player-video-info-get-bitrate" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstplayer-mediainfo.html#gst-player-video-info-get-bitrate">
+<ANCHOR id="gst-player-video-info-get-height" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstplayer-mediainfo.html#gst-player-video-info-get-height">
+<ANCHOR id="gst-player-video-info-get-width" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstplayer-mediainfo.html#gst-player-video-info-get-width">
+<ANCHOR id="gst-player-video-info-get-framerate" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstplayer-mediainfo.html#gst-player-video-info-get-framerate">
+<ANCHOR id="gst-player-video-info-get-max-bitrate" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstplayer-mediainfo.html#gst-player-video-info-get-max-bitrate">
+<ANCHOR id="gst-player-video-info-get-pixel-aspect-ratio" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstplayer-mediainfo.html#gst-player-video-info-get-pixel-aspect-ratio">
+<ANCHOR id="gst-player-subtitle-info-get-language" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstplayer-mediainfo.html#gst-player-subtitle-info-get-language">
+<ANCHOR id="gst-plugins-bad-libs-gstplayer-mediainfo.other_details" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstplayer-mediainfo.html#gst-plugins-bad-libs-gstplayer-mediainfo.other_details">
+<ANCHOR id="GstPlayerMediaInfo-struct" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstplayer-mediainfo.html#GstPlayerMediaInfo-struct">
+<ANCHOR id="GstPlayerStreamInfo-struct" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstplayer-mediainfo.html#GstPlayerStreamInfo-struct">
+<ANCHOR id="GstPlayerAudioInfo-struct" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstplayer-mediainfo.html#GstPlayerAudioInfo-struct">
+<ANCHOR id="GstPlayerVideoInfo-struct" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstplayer-mediainfo.html#GstPlayerVideoInfo-struct">
+<ANCHOR id="GstPlayerSubtitleInfo-struct" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstplayer-mediainfo.html#GstPlayerSubtitleInfo-struct">
+<ANCHOR id="gst-plugins-bad-libs-gstplayer-gmaincontextsignaldispatcher" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstplayer-gmaincontextsignaldispatcher.html">
+<ANCHOR id="gst-plugins-bad-libs-gstplayer-gmaincontextsignaldispatcher.functions" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstplayer-gmaincontextsignaldispatcher.html#gst-plugins-bad-libs-gstplayer-gmaincontextsignaldispatcher.functions">
+<ANCHOR id="gst-plugins-bad-libs-gstplayer-gmaincontextsignaldispatcher.description" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstplayer-gmaincontextsignaldispatcher.html#gst-plugins-bad-libs-gstplayer-gmaincontextsignaldispatcher.description">
+<ANCHOR id="gst-plugins-bad-libs-gstplayer-gmaincontextsignaldispatcher.functions_details" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstplayer-gmaincontextsignaldispatcher.html#gst-plugins-bad-libs-gstplayer-gmaincontextsignaldispatcher.functions_details">
+<ANCHOR id="gst-player-g-main-context-signal-dispatcher-new" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstplayer-gmaincontextsignaldispatcher.html#gst-player-g-main-context-signal-dispatcher-new">
+<ANCHOR id="gst-plugins-bad-libs-gstplayer-gmaincontextsignaldispatcher.other_details" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstplayer-gmaincontextsignaldispatcher.html#gst-plugins-bad-libs-gstplayer-gmaincontextsignaldispatcher.other_details">
+<ANCHOR id="gst-plugins-bad-libs-gstplayer-videooverlayvideorenderer" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstplayer-videooverlayvideorenderer.html">
+<ANCHOR id="gst-plugins-bad-libs-gstplayer-videooverlayvideorenderer.functions" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstplayer-videooverlayvideorenderer.html#gst-plugins-bad-libs-gstplayer-videooverlayvideorenderer.functions">
+<ANCHOR id="gst-plugins-bad-libs-gstplayer-videooverlayvideorenderer.description" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstplayer-videooverlayvideorenderer.html#gst-plugins-bad-libs-gstplayer-videooverlayvideorenderer.description">
+<ANCHOR id="gst-plugins-bad-libs-gstplayer-videooverlayvideorenderer.functions_details" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstplayer-videooverlayvideorenderer.html#gst-plugins-bad-libs-gstplayer-videooverlayvideorenderer.functions_details">
+<ANCHOR id="gst-player-video-overlay-video-renderer-new" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstplayer-videooverlayvideorenderer.html#gst-player-video-overlay-video-renderer-new">
+<ANCHOR id="gst-player-video-overlay-video-renderer-get-window-handle" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstplayer-videooverlayvideorenderer.html#gst-player-video-overlay-video-renderer-get-window-handle">
+<ANCHOR id="gst-player-video-overlay-video-renderer-set-window-handle" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstplayer-videooverlayvideorenderer.html#gst-player-video-overlay-video-renderer-set-window-handle">
+<ANCHOR id="gst-player-video-overlay-video-renderer-expose" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstplayer-videooverlayvideorenderer.html#gst-player-video-overlay-video-renderer-expose">
+<ANCHOR id="gst-player-video-overlay-video-renderer-get-render-rectangle" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstplayer-videooverlayvideorenderer.html#gst-player-video-overlay-video-renderer-get-render-rectangle">
+<ANCHOR id="gst-player-video-overlay-video-renderer-set-render-rectangle" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstplayer-videooverlayvideorenderer.html#gst-player-video-overlay-video-renderer-set-render-rectangle">
+<ANCHOR id="gst-plugins-bad-libs-gstplayer-videooverlayvideorenderer.other_details" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstplayer-videooverlayvideorenderer.html#gst-plugins-bad-libs-gstplayer-videooverlayvideorenderer.other_details">
+<ANCHOR id="gst-plugins-bad-libs-gstplayer-visualization" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstplayer-visualization.html">
+<ANCHOR id="gst-plugins-bad-libs-gstplayer-visualization.functions" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstplayer-visualization.html#gst-plugins-bad-libs-gstplayer-visualization.functions">
+<ANCHOR id="GstPlayerVisualization" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstplayer-visualization.html#GstPlayerVisualization">
+<ANCHOR id="gst-plugins-bad-libs-gstplayer-visualization.other" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstplayer-visualization.html#gst-plugins-bad-libs-gstplayer-visualization.other">
+<ANCHOR id="gst-plugins-bad-libs-gstplayer-visualization.object-hierarchy" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstplayer-visualization.html#gst-plugins-bad-libs-gstplayer-visualization.object-hierarchy">
+<ANCHOR id="gst-plugins-bad-libs-gstplayer-visualization.description" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstplayer-visualization.html#gst-plugins-bad-libs-gstplayer-visualization.description">
+<ANCHOR id="gst-plugins-bad-libs-gstplayer-visualization.functions_details" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstplayer-visualization.html#gst-plugins-bad-libs-gstplayer-visualization.functions_details">
+<ANCHOR id="gst-player-visualizations-get" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstplayer-visualization.html#gst-player-visualizations-get">
+<ANCHOR id="gst-player-visualizations-free" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstplayer-visualization.html#gst-player-visualizations-free">
+<ANCHOR id="gst-player-visualization-copy" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstplayer-visualization.html#gst-player-visualization-copy">
+<ANCHOR id="gst-player-visualization-free" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstplayer-visualization.html#gst-player-visualization-free">
+<ANCHOR id="gst-plugins-bad-libs-gstplayer-visualization.other_details" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstplayer-visualization.html#gst-plugins-bad-libs-gstplayer-visualization.other_details">
+<ANCHOR id="GstPlayerVisualization-struct" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-gstplayer-visualization.html#GstPlayerVisualization-struct">
 <ANCHOR id="gst-plugins-bad-libs-GstPhotography" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-GstPhotography.html">
 <ANCHOR id="gst-plugins-bad-libs-GstPhotography.stability-level" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-GstPhotography.html#gst-plugins-bad-libs-GstPhotography.stability-level">
 <ANCHOR id="gst-plugins-bad-libs-GstPhotography.functions" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-GstPhotography.html#gst-plugins-bad-libs-GstPhotography.functions">
@@ -1832,6 +2177,7 @@
 <ANCHOR id="GST-PHOTOGRAPHY-PROP-FOCUS-MODE:CAPS" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-GstPhotography.html#GST-PHOTOGRAPHY-PROP-FOCUS-MODE:CAPS">
 <ANCHOR id="GST-PHOTOGRAPHY-PROP-ZOOM:CAPS" href="gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-GstPhotography.html#GST-PHOTOGRAPHY-PROP-ZOOM:CAPS">
 <ANCHOR id="annotation-glossterm-allow-none" href="gst-plugins-bad-libs-1.0/annotation-glossary.html#annotation-glossterm-allow-none">
+<ANCHOR id="annotation-glossterm-array" href="gst-plugins-bad-libs-1.0/annotation-glossary.html#annotation-glossterm-array">
 <ANCHOR id="annotation-glossterm-closure" href="gst-plugins-bad-libs-1.0/annotation-glossary.html#annotation-glossterm-closure">
 <ANCHOR id="annotation-glossterm-destroy" href="gst-plugins-bad-libs-1.0/annotation-glossary.html#annotation-glossterm-destroy">
 <ANCHOR id="annotation-glossterm-element-type" href="gst-plugins-bad-libs-1.0/annotation-glossary.html#annotation-glossterm-element-type">
diff --git a/docs/libs/html/mpegts.html b/docs/libs/html/mpegts.html
index 27dce1b..a76a196 100644
--- a/docs/libs/html/mpegts.html
+++ b/docs/libs/html/mpegts.html
@@ -3,7 +3,7 @@
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Mpeg TS helper library: GStreamer Bad Plugins 1.0 Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
 <link rel="home" href="index.html" title="GStreamer Bad Plugins 1.0 Library Reference Manual">
 <link rel="up" href="gstreamer-plugins-bad.html" title="Part I. GStreamer Bad Plugins Libraries">
 <link rel="prev" href="gst-plugins-bad-libs-gstmpegvideometa.html" title="gstmpegvideometa">
diff --git a/docs/libs/html/player.html b/docs/libs/html/player.html
new file mode 100644
index 0000000..fd9d122
--- /dev/null
+++ b/docs/libs/html/player.html
@@ -0,0 +1,46 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>Player Library: GStreamer Bad Plugins 1.0 Library Reference Manual</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
+<link rel="home" href="index.html" title="GStreamer Bad Plugins 1.0 Library Reference Manual">
+<link rel="up" href="gstreamer-plugins-bad.html" title="Part I. GStreamer Bad Plugins Libraries">
+<link rel="prev" href="gst-plugins-bad-libs-OpenGL-Formats.html" title="OpenGL Formats">
+<link rel="next" href="gst-plugins-bad-libs-gstplayer.html" title="gstplayer">
+<meta name="generator" content="GTK-Doc V1.24 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="5"><tr valign="middle">
+<td width="100%" align="left" class="shortcuts"></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
+<td><a accesskey="u" href="gstreamer-plugins-bad.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
+<td><a accesskey="p" href="gst-plugins-bad-libs-OpenGL-Formats.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
+<td><a accesskey="n" href="gst-plugins-bad-libs-gstplayer.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
+</tr></table>
+<div class="chapter">
+<div class="titlepage"><div><div><h2 class="title">
+<a name="player"></a>Player Library</h2></div></div></div>
+<div class="toc"><dl class="toc">
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-bad-libs-gstplayer.html">gstplayer</a></span><span class="refpurpose"> — Player</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-bad-libs-gstplayer-mediainfo.html">gstplayer-mediainfo</a></span><span class="refpurpose"> — Player Media Information</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-bad-libs-gstplayer-gmaincontextsignaldispatcher.html">gstplayer-gmaincontextsignaldispatcher</a></span><span class="refpurpose"> — Player GLib MainContext dispatcher</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-bad-libs-gstplayer-videooverlayvideorenderer.html">gstplayer-videooverlayvideorenderer</a></span><span class="refpurpose"> — Player Video Overlay Video Renderer</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-bad-libs-gstplayer-visualization.html">gstplayer-visualization</a></span><span class="refpurpose"> — Player Visualization</span>
+</dt>
+</dl></div>
+</div>
+<div class="footer">
+<hr>Generated by GTK-Doc V1.24</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/libs/html/tools.html b/docs/libs/html/tools.html
index 7e5a3d0..eb97a9f 100644
--- a/docs/libs/html/tools.html
+++ b/docs/libs/html/tools.html
@@ -3,7 +3,7 @@
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Useful elements: GStreamer Bad Plugins 1.0 Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
 <link rel="home" href="index.html" title="GStreamer Bad Plugins 1.0 Library Reference Manual">
 <link rel="up" href="gstreamer-plugins-bad.html" title="Part I. GStreamer Bad Plugins Libraries">
 <link rel="prev" href="gst-plugins-bad-libs-ISDB-variants-of-MPEG-TS-descriptors.html" title="ISDB variants of MPEG-TS descriptors">
diff --git a/docs/libs/html/video.html b/docs/libs/html/video.html
index d10d709..9785deb 100644
--- a/docs/libs/html/video.html
+++ b/docs/libs/html/video.html
@@ -3,7 +3,7 @@
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Video helpers and baseclasses: GStreamer Bad Plugins 1.0 Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
 <link rel="home" href="index.html" title="GStreamer Bad Plugins 1.0 Library Reference Manual">
 <link rel="up" href="gstreamer-plugins-bad.html" title="Part I. GStreamer Bad Plugins Libraries">
 <link rel="prev" href="gst-plugins-bad-libs-GstAggregatorPad.html" title="GstAggregatorPad">
diff --git a/docs/plugins/Makefile.am b/docs/plugins/Makefile.am
index c431f78..7607b55 100644
--- a/docs/plugins/Makefile.am
+++ b/docs/plugins/Makefile.am
@@ -112,7 +112,6 @@
 	$(top_srcdir)/gst/aiff/aiffparse.h \
 	$(top_srcdir)/gst/aiff/aiffmux.h \
 	$(top_srcdir)/gst/autoconvert/gstautoconvert.h \
-	$(top_srcdir)/gst/audiovisualizers/gstaudiovisualizer.h \
 	$(top_srcdir)/gst/audiovisualizers/gstspacescope.h \
 	$(top_srcdir)/gst/audiovisualizers/gstspectrascope.h \
 	$(top_srcdir)/gst/audiovisualizers/gstsynaescope.h \
@@ -151,7 +150,6 @@
 	$(top_srcdir)/gst/geometrictransform/gstwaterripple.h \
 	$(top_srcdir)/gst/ivfparse/gstivfparse.h \
 	$(top_srcdir)/gst/jpegformat/gstjpegparse.h \
-	$(top_srcdir)/gst/liveadder/liveadder.h \
 	$(top_srcdir)/gst/mxf/mxfdemux.h \
 	$(top_srcdir)/gst/mxf/mxfmux.h \
 	$(top_srcdir)/gst/nuvdemux/gstnuvdemux.h \
diff --git a/docs/plugins/Makefile.in b/docs/plugins/Makefile.in
index 1174a97..ed1e36e 100644
--- a/docs/plugins/Makefile.in
+++ b/docs/plugins/Makefile.in
@@ -131,16 +131,15 @@
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
 	$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
-	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gsettings.m4 \
-	$(top_srcdir)/m4/gst-fionread.m4 $(top_srcdir)/m4/gst-sdl.m4 \
-	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
-	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
-	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libgcrypt.m4 \
-	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
-	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
-	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
-	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
-	$(top_srcdir)/configure.ac
+	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gst-fionread.m4 \
+	$(top_srcdir)/m4/gst-sdl.m4 $(top_srcdir)/m4/iconv.m4 \
+	$(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \
+	$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
+	$(top_srcdir)/m4/libgcrypt.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
+	$(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
@@ -267,6 +266,8 @@
 CLUTTER_X11_LIBS = @CLUTTER_X11_LIBS@
 CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
+CUDA_CFLAGS = @CUDA_CFLAGS@
+CUDA_LIBS = @CUDA_LIBS@
 CURL_CFLAGS = @CURL_CFLAGS@
 CURL_LIBS = @CURL_LIBS@
 CXX = @CXX@
@@ -304,6 +305,8 @@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
+EGL_CFLAGS = @EGL_CFLAGS@
+EGL_LIBS = @EGL_LIBS@
 EGREP = @EGREP@
 ERROR_CFLAGS = @ERROR_CFLAGS@
 ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
@@ -312,7 +315,6 @@
 EXIF_CFLAGS = @EXIF_CFLAGS@
 EXIF_LIBS = @EXIF_LIBS@
 FAAC_LIBS = @FAAC_LIBS@
-FAAD_IS_NEAAC = @FAAD_IS_NEAAC@
 FAAD_LIBS = @FAAD_LIBS@
 FFLAGS = @FFLAGS@
 FGREP = @FGREP@
@@ -331,8 +333,9 @@
 GIO_LIBS = @GIO_LIBS@
 GIO_UNIX_CFLAGS = @GIO_UNIX_CFLAGS@
 GIO_UNIX_LIBS = @GIO_UNIX_LIBS@
+GLES2_CFLAGS = @GLES2_CFLAGS@
+GLES2_LIBS = @GLES2_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
-GLIB_COMPILE_SCHEMAS = @GLIB_COMPILE_SCHEMAS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
@@ -349,16 +352,17 @@
 GMODULE_NO_EXPORT_LIBS = @GMODULE_NO_EXPORT_LIBS@
 GMSGFMT = @GMSGFMT@
 GMSGFMT_015 = @GMSGFMT_015@
+GNUSTL_CFLAGS = @GNUSTL_CFLAGS@
+GNUSTL_LIBS = @GNUSTL_LIBS@
 GRAPHENE_CFLAGS = @GRAPHENE_CFLAGS@
 GRAPHENE_LIBS = @GRAPHENE_LIBS@
 GREP = @GREP@
-GSETTINGS_CFLAGS = @GSETTINGS_CFLAGS@
-GSETTINGS_DISABLE_SCHEMAS_COMPILE = @GSETTINGS_DISABLE_SCHEMAS_COMPILE@
-GSETTINGS_LIBS = @GSETTINGS_LIBS@
 GSM_LIBS = @GSM_LIBS@
 GSTPB_PLUGINS_DIR = @GSTPB_PLUGINS_DIR@
 GSTPB_PREFIX = @GSTPB_PREFIX@
 GST_AGE = @GST_AGE@
+GST_ALLOCATORS_CFLAGS = @GST_ALLOCATORS_CFLAGS@
+GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
 GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
 GST_API_VERSION = @GST_API_VERSION@
 GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
@@ -384,6 +388,8 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PBUTILS_CFLAGS = @GST_PBUTILS_CFLAGS@
+GST_PBUTILS_LIBS = @GST_PBUTILS_LIBS@
 GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BAD_CFLAGS = @GST_PLUGINS_BAD_CFLAGS@
@@ -409,6 +415,8 @@
 GST_PREFIX = @GST_PREFIX@
 GST_REVISION = @GST_REVISION@
 GST_TOOLS_DIR = @GST_TOOLS_DIR@
+GST_VIDEO_CFLAGS = @GST_VIDEO_CFLAGS@
+GST_VIDEO_LIBS = @GST_VIDEO_LIBS@
 GTK3_CFLAGS = @GTK3_CFLAGS@
 GTK3_GL_CFLAGS = @GTK3_GL_CFLAGS@
 GTK3_GL_LIBS = @GTK3_GL_LIBS@
@@ -510,6 +518,7 @@
 LTLIBICONV = @LTLIBICONV@
 LTLIBINTL = @LTLIBINTL@
 LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
 MANIFEST_TOOL = @MANIFEST_TOOL@
@@ -523,8 +532,6 @@
 MODPLUG_LIBS = @MODPLUG_LIBS@
 MPEG2ENC_CFLAGS = @MPEG2ENC_CFLAGS@
 MPEG2ENC_LIBS = @MPEG2ENC_LIBS@
-MPG123_CFLAGS = @MPG123_CFLAGS@
-MPG123_LIBS = @MPG123_LIBS@
 MPLEX_CFLAGS = @MPLEX_CFLAGS@
 MPLEX_LDFLAGS = @MPLEX_LDFLAGS@
 MPLEX_LIBS = @MPLEX_LIBS@
@@ -540,6 +547,8 @@
 NETTLE_LIBS = @NETTLE_LIBS@
 NM = @NM@
 NMEDIT = @NMEDIT@
+NVENCODE_CFLAGS = @NVENCODE_CFLAGS@
+NVENCODE_LIBS = @NVENCODE_LIBS@
 OBJC = @OBJC@
 OBJCDEPMODE = @OBJCDEPMODE@
 OBJCFLAGS = @OBJCFLAGS@
@@ -597,16 +606,18 @@
 PYTHON_PLATFORM = @PYTHON_PLATFORM@
 PYTHON_PREFIX = @PYTHON_PREFIX@
 PYTHON_VERSION = @PYTHON_VERSION@
+QT_ANDROID_CFLAGS = @QT_ANDROID_CFLAGS@
+QT_ANDROID_LIBS = @QT_ANDROID_LIBS@
 QT_CFLAGS = @QT_CFLAGS@
 QT_LIBS = @QT_LIBS@
+QT_MAC_CFLAGS = @QT_MAC_CFLAGS@
+QT_MAC_LIBS = @QT_MAC_LIBS@
 QT_WAYLAND_CFLAGS = @QT_WAYLAND_CFLAGS@
 QT_WAYLAND_LIBS = @QT_WAYLAND_LIBS@
 QT_X11_CFLAGS = @QT_X11_CFLAGS@
 QT_X11_LIBS = @QT_X11_LIBS@
 RANLIB = @RANLIB@
 RCC = @RCC@
-RSVG_2_36_2_CFLAGS = @RSVG_2_36_2_CFLAGS@
-RSVG_2_36_2_LIBS = @RSVG_2_36_2_LIBS@
 RSVG_CFLAGS = @RSVG_CFLAGS@
 RSVG_LIBS = @RSVG_LIBS@
 RTMP_CFLAGS = @RTMP_CFLAGS@
@@ -658,6 +669,7 @@
 VOAACENC_LIBS = @VOAACENC_LIBS@
 VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
 VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VULKAN_LIBS = @VULKAN_LIBS@
 WARNING_CFLAGS = @WARNING_CFLAGS@
 WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
 WARNING_OBJCFLAGS = @WARNING_OBJCFLAGS@
@@ -668,6 +680,7 @@
 WAYLAND_LIBS = @WAYLAND_LIBS@
 WEBP_CFLAGS = @WEBP_CFLAGS@
 WEBP_LIBS = @WEBP_LIBS@
+WGET = @WGET@
 WILDMIDI_CFLAGS = @WILDMIDI_CFLAGS@
 WILDMIDI_LIBS = @WILDMIDI_LIBS@
 WINKS_LIBS = @WINKS_LIBS@
@@ -677,6 +690,8 @@
 X11_LIBS = @X11_LIBS@
 X265_CFLAGS = @X265_CFLAGS@
 X265_LIBS = @X265_LIBS@
+XCB_CFLAGS = @XCB_CFLAGS@
+XCB_LIBS = @XCB_LIBS@
 XCOMPOSITE_CFLAGS = @XCOMPOSITE_CFLAGS@
 XCOMPOSITE_LIBS = @XCOMPOSITE_LIBS@
 XGETTEXT = @XGETTEXT@
@@ -714,7 +729,6 @@
 docdir = @docdir@
 dvidir = @dvidir@
 exec_prefix = @exec_prefix@
-gsettingsschemadir = @gsettingsschemadir@
 host = @host@
 host_alias = @host_alias@
 host_cpu = @host_cpu@
@@ -872,7 +886,6 @@
 	$(top_srcdir)/gst/aiff/aiffparse.h \
 	$(top_srcdir)/gst/aiff/aiffmux.h \
 	$(top_srcdir)/gst/autoconvert/gstautoconvert.h \
-	$(top_srcdir)/gst/audiovisualizers/gstaudiovisualizer.h \
 	$(top_srcdir)/gst/audiovisualizers/gstspacescope.h \
 	$(top_srcdir)/gst/audiovisualizers/gstspectrascope.h \
 	$(top_srcdir)/gst/audiovisualizers/gstsynaescope.h \
@@ -911,7 +924,6 @@
 	$(top_srcdir)/gst/geometrictransform/gstwaterripple.h \
 	$(top_srcdir)/gst/ivfparse/gstivfparse.h \
 	$(top_srcdir)/gst/jpegformat/gstjpegparse.h \
-	$(top_srcdir)/gst/liveadder/liveadder.h \
 	$(top_srcdir)/gst/mxf/mxfdemux.h \
 	$(top_srcdir)/gst/mxf/mxfmux.h \
 	$(top_srcdir)/gst/nuvdemux/gstnuvdemux.h \
@@ -1484,7 +1496,7 @@
 @ENABLE_GTK_DOC_TRUE@sgml-build.stamp: scan-build.stamp $(CFILE_GLOB) $(top_srcdir)/common/plugins.xsl $(expand_content_files)
 @ENABLE_GTK_DOC_TRUE@	@echo '  DOC   Building XML'
 @ENABLE_GTK_DOC_TRUE@	@-mkdir -p xml
-@ENABLE_GTK_DOC_TRUE@	@for a in $(srcdir)/$(INSPECT_DIR)/*.xml; do \
+@ENABLE_GTK_DOC_TRUE@	@for a in $(inspect_files); do \
 @ENABLE_GTK_DOC_TRUE@	    xsltproc --stringparam module $(MODULE) \
 @ENABLE_GTK_DOC_TRUE@		$(top_srcdir)/common/plugins.xsl $$a > xml/`basename $$a`; done
 @ENABLE_GTK_DOC_TRUE@	@for f in $(EXAMPLE_CFILES); do \
diff --git a/docs/plugins/gst-plugins-bad-plugins-docs.sgml b/docs/plugins/gst-plugins-bad-plugins-docs.sgml
index 51278e9..710ced5 100644
--- a/docs/plugins/gst-plugins-bad-plugins-docs.sgml
+++ b/docs/plugins/gst-plugins-bad-plugins-docs.sgml
@@ -21,6 +21,7 @@
     <xi:include href="xml/element-aiffparse.xml" />
     <xi:include href="xml/element-aiffmux.xml" />
     <xi:include href="xml/element-assrender.xml" />
+    <xi:include href="xml/element-audiointerleave.xml" />
     <xi:include href="xml/element-audiomixer.xml" />
     <xi:include href="xml/element-autoconvert.xml" />
     <xi:include href="xml/element-bs2b.xml" />
@@ -68,16 +69,10 @@
     <xi:include href="xml/element-mpegpsmux.xml" />
     <xi:include href="xml/element-mpegtsmux.xml" />
     <xi:include href="xml/element-mplex.xml" />
-    <xi:include href="xml/element-mpg123audiodec.xml" />
     <xi:include href="xml/element-neonhttpsrc.xml" />
     <xi:include href="xml/element-ofa.xml" />
     <xi:include href="xml/element-openalsrc.xml" />
     <xi:include href="xml/element-openalsink.xml" />
-    <xi:include href="xml/element-opusdec.xml" />
-    <xi:include href="xml/element-opusenc.xml" />
-    <xi:include href="xml/element-opusparse.xml" />
-    <xi:include href="xml/element-rtpopuspay.xml" />
-    <xi:include href="xml/element-rtpopusdepay.xml" />
     <xi:include href="xml/element-pcapparse.xml" />
     <xi:include href="xml/element-pinch.xml" />
     <xi:include href="xml/element-pyramidsegment.xml" />
@@ -132,7 +127,6 @@
     <xi:include href="xml/plugin-geometrictransform.xml" />
     <xi:include href="xml/plugin-gsm.xml" />
     <xi:include href="xml/plugin-jpegformat.xml" />
-    <xi:include href="xml/plugin-liveadder.xml" />
     <xi:include href="xml/plugin-mimic.xml" />
     <xi:include href="xml/plugin-mms.xml" />
     <xi:include href="xml/plugin-modplug.xml" />
@@ -144,7 +138,6 @@
     <xi:include href="xml/plugin-ofa.xml" />
     <xi:include href="xml/plugin-openal.xml" />
     <xi:include href="xml/plugin-opencv.xml" />
-    <xi:include href="xml/plugin-opus.xml" />
     <xi:include href="xml/plugin-pcapparse.xml" />
     <xi:include href="xml/plugin-rawparse.xml" />
     <xi:include href="xml/plugin-rfbsrc.xml" />
diff --git a/docs/plugins/gst-plugins-bad-plugins-sections.txt b/docs/plugins/gst-plugins-bad-plugins-sections.txt
index 5e869c8..2c1365b 100644
--- a/docs/plugins/gst-plugins-bad-plugins-sections.txt
+++ b/docs/plugins/gst-plugins-bad-plugins-sections.txt
@@ -56,6 +56,20 @@
 </SECTION>
 
 <SECTION>
+<FILE>element-audiointerleave</FILE>
+<TITLE>audiointerleave</TITLE>
+GstAudioInterleave
+<SUBSECTION Standard>
+GstAudioInterleaveClass
+GST_AUDIO_INTERLEAVE
+GST_AUDIO_INTERLEAVE_CLASS
+GST_IS_AUDIO_INTERLEAVE
+GST_IS_AUDIO_INTERLEAVE_CLASS
+GST_TYPE_AUDIO_INTERLEAVE
+gst_audio_interleave_get_type
+</SECTION>
+
+<SECTION>
 <FILE>element-audiomixer</FILE>
 <TITLE>audiomixer</TITLE>
 GstAudioMixer
@@ -720,15 +734,7 @@
 GstLiveAdder
 <SUBSECTION Standard>
 GstLiveAdderClass
-GST_IS_LIVE_ADDER
-GST_IS_LIVE_ADDER_CLASS
-GST_IS_MXF_DEMUX_PAD
-GST_LIVE_ADDER
-GST_LIVE_ADDER_CLASS
-GST_LIVE_ADDER_GET_CLASS
 GST_TYPE_LIVE_ADDER
-GstLiveAdderFormat
-GstLiveAdderFunction
 gst_live_adder_get_type
 </SECTION>
 
@@ -983,20 +989,6 @@
 </SECTION>
 
 <SECTION>
-<FILE>element-mpg123audiodec</FILE>
-<TITLE>mpg123audiodec</TITLE>
-GstMpg123AudioDec
-<SUBSECTION Standard>
-GstMpg123AudioDecClass
-GST_MPG123_AUDIO_DEC
-GST_MPG123_AUDIO_DEC_CLASS
-GST_IS_MPG123_AUDIO_DEC
-GST_IS_MPG123_AUDIO_DEC_CLASS
-GST_TYPE_MPG123_AUDIO_DEC
-gst_mpg123_audio_dec_get_type
-</SECTION>
-
-<SECTION>
 <FILE>element-mxfdemux</FILE>
 <TITLE>mxfdemux</TITLE>
 GstMXFDemux
@@ -1008,6 +1000,7 @@
 GST_MXF_DEMUX_CLASS
 GST_TYPE_MXF_DEMUX
 gst_mxf_demux_get_type
+GST_IS_MXF_DEMUX_PAD
 </SECTION>
 
 <SECTION>
@@ -1109,71 +1102,6 @@
 gst_opencv_text_overlay_plugin_init
 </SECTION>
 
-<FILE>element-opusdec</FILE>
-<TITLE>opusdec</TITLE>
-GstOpusDec
-<SUBSECTION Standard>
-GstOpusDecClass
-gst_opus_dec_get_type
-GST_TYPE_OPUS_DEC
-GST_OPUS_DEC
-GST_OPUS_DEC_CLASS
-GST_IS_OPUS_DEC
-GST_IS_OPUS_DEC_CLASS
-</SECTION>
-
-<FILE>element-opusenc</FILE>
-<TITLE>opusenc</TITLE>
-GstOpusEnc
-<SUBSECTION Standard>
-GstOpusEncClass
-gst_opus_enc_get_type
-GST_TYPE_OPUS_ENC
-GST_OPUS_ENC
-GST_OPUS_ENC_CLASS
-GST_IS_OPUS_ENC
-GST_IS_OPUS_ENC_CLASS
-</SECTION>
-
-<FILE>element-opusparse</FILE>
-<TITLE>opusparse</TITLE>
-GstOpusParse
-<SUBSECTION Standard>
-GstOpusParseClass
-gst_opus_parse_get_type
-GST_TYPE_OPUS_PARSE
-GST_OPUS_PARSE
-GST_OPUS_PARSE_CLASS
-GST_IS_OPUS_PARSE
-GST_IS_OPUS_PARSE_CLASS
-</SECTION>
-
-<FILE>element-rtpopusdepay</FILE>
-<TITLE>rtpopusdepay</TITLE>
-GstRTPOpusDepay
-<SUBSECTION Standard>
-GstRTPOpusDepayClass
-gst_rtp_opus_depay_get_type
-GST_TYPE_RTP_OPUS_DEPAY
-GST_RTP_OPUS_DEPAY
-GST_RTP_OPUS_DEPAY_CLASS
-GST_IS_RTP_OPUS_DEPAY
-GST_IS_RTP_OPUS_DEPAY_CLASS
-</SECTION>
-
-<FILE>element-rtpopuspay</FILE>
-<TITLE>rtpopuspay</TITLE>
-GstRtpOPUSPay
-<SUBSECTION Standard>
-GstRtpOPUSPayClass
-gst_rtp_opus_pay_get_type
-GST_TYPE_RTP_OPUS_PAY
-GST_RTP_OPUS_PAY
-GST_RTP_OPUS_PAY_CLASS
-GST_IS_RTP_OPUS_PAY
-GST_IS_RTP_OPUS_PAY_CLASS
-</SECTION>
-
 <SECTION>
 <FILE>element-pcapparse</FILE>
 <TITLE>pcapparse</TITLE>
diff --git a/docs/plugins/gst-plugins-bad-plugins.args b/docs/plugins/gst-plugins-bad-plugins.args
index 802a56f..0bdbfbd 100644
--- a/docs/plugins/gst-plugins-bad-plugins.args
+++ b/docs/plugins/gst-plugins-bad-plugins.args
@@ -18749,6 +18749,36 @@
 </ARG>
 
 <ARG>
+<NAME>GstVideoParse::framesize</NAME>
+<TYPE>guint</TYPE>
+<RANGE></RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Framesize</NICK>
+<BLURB>Size of an image in raw stream (0: default).</BLURB>
+<DEFAULT>0</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstVideoParse::offsets</NAME>
+<TYPE>gchar*</TYPE>
+<RANGE></RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Offsets</NICK>
+<BLURB>Offset of each planes in bytes using string format: 'o0,o1,o2,o3'.</BLURB>
+<DEFAULT>NULL</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstVideoParse::strides</NAME>
+<TYPE>gchar*</TYPE>
+<RANGE></RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Strides</NICK>
+<BLURB>Stride of each planes in bytes using string format: 's0,s1,s2,s3'.</BLURB>
+<DEFAULT>NULL</DEFAULT>
+</ARG>
+
+<ARG>
 <NAME>GstMetadataParse::exif</NAME>
 <TYPE>gboolean</TYPE>
 <RANGE></RANGE>
@@ -23952,10 +23982,10 @@
 <NAME>GstLiveAdder::latency</NAME>
 <TYPE>guint</TYPE>
 <RANGE></RANGE>
-<FLAGS>rw</FLAGS>
-<NICK>Buffering latency</NICK>
-<BLURB>Amount of data to buffer (in milliseconds).</BLURB>
-<DEFAULT>60</DEFAULT>
+<FLAGS>rwx</FLAGS>
+<NICK>Buffer latency</NICK>
+<BLURB>Additional latency in live mode to allow upstream to take longer to produce buffers for the current position (in milliseconds).</BLURB>
+<DEFAULT>30</DEFAULT>
 </ARG>
 
 <ARG>
@@ -46389,16 +46419,6 @@
 </ARG>
 
 <ARG>
-<NAME>GstGSettingsAudioSink::profile</NAME>
-<TYPE>GstGSettingsAudioSinkProfile</TYPE>
-<RANGE></RANGE>
-<FLAGS>rw</FLAGS>
-<NICK>Profile</NICK>
-<BLURB>Profile.</BLURB>
-<DEFAULT>Sound Events</DEFAULT>
-</ARG>
-
-<ARG>
 <NAME>Gstsolarize::silent</NAME>
 <TYPE>gboolean</TYPE>
 <RANGE></RANGE>
@@ -47079,6 +47099,16 @@
 </ARG>
 
 <ARG>
+<NAME>GstCvSobel::mask</NAME>
+<TYPE>gboolean</TYPE>
+<RANGE></RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Mask</NICK>
+<BLURB>Sets whether the detected derivative edges should be used as a mask on the original input or not.</BLURB>
+<DEFAULT>TRUE</DEFAULT>
+</ARG>
+
+<ARG>
 <NAME>GstCvSmooth::param1</NAME>
 <TYPE>gint</TYPE>
 <RANGE>>= 1</RANGE>
@@ -47134,7 +47164,7 @@
 <RANGE>>= 0</RANGE>
 <FLAGS>rw</FLAGS>
 <NICK>color (gaussian standard deviation or color sigma</NICK>
-<BLURB>If type is gaussian, this means the standard deviation.If type is bilateral, this means the color-sigma. If zero, Default values are used.Check cvSmooth OpenCV docs: http://opencv.willowgarage.com/documentation/image_filtering.html#cvSmooth.</BLURB>
+<BLURB>If type is gaussian, this means the standard deviation.If type is bilateral, this means the color-sigma. If zero, Default values are used.</BLURB>
 <DEFAULT>0</DEFAULT>
 </ARG>
 
@@ -47143,9 +47173,9 @@
 <TYPE>gint</TYPE>
 <RANGE>>= 0</RANGE>
 <FLAGS>rw</FLAGS>
-<NICK>height (aperture height)</NICK>
-<BLURB>The aperture height, if zero, the width is used.(Must be positive and odd or zero, unuset in median and bilateral types). Check cvSmooth OpenCV docs: http://opencv.willowgarage.com/documentation/image_filtering.html#cvSmooth.</BLURB>
-<DEFAULT>0</DEFAULT>
+<NICK>height (kernel height)</NICK>
+<BLURB>The gaussian kernel height (must be positive and odd).</BLURB>
+<DEFAULT>3</DEFAULT>
 </ARG>
 
 <ARG>
@@ -47154,7 +47184,7 @@
 <RANGE>>= 0</RANGE>
 <FLAGS>rw</FLAGS>
 <NICK>spatial (spatial sigma, bilateral only)</NICK>
-<BLURB>Only used in bilateral type, means the spatial-sigma.Check cvSmooth OpenCV docs: http://opencv.willowgarage.com/documentation/image_filtering.html#cvSmooth.</BLURB>
+<BLURB>Only used in bilateral type, means the spatial-sigma.</BLURB>
 <DEFAULT>0</DEFAULT>
 </ARG>
 
@@ -47163,8 +47193,8 @@
 <TYPE>gint</TYPE>
 <RANGE>>= 1</RANGE>
 <FLAGS>rw</FLAGS>
-<NICK>width (aperture width)</NICK>
-<BLURB>The aperture width (Must be positive and odd).Check cvSmooth OpenCV docs: http://opencv.willowgarage.com/documentation/image_filtering.html#cvSmooth.</BLURB>
+<NICK>width (kernel width)</NICK>
+<BLURB>The gaussian kernel width (must be positive and odd).If type is median, this means the aperture linear size.Check OpenCV docs: http://docs.opencv.org/2.4/modules/imgproc/doc/filtering.htm.</BLURB>
 <DEFAULT>3</DEFAULT>
 </ARG>
 
@@ -47179,6 +47209,36 @@
 </ARG>
 
 <ARG>
+<NAME>GstCvLaplace::scale</NAME>
+<TYPE>gdouble</TYPE>
+<RANGE>>= 0</RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>scale factor</NICK>
+<BLURB>Scale factor.</BLURB>
+<DEFAULT>1</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstCvLaplace::shift</NAME>
+<TYPE>gdouble</TYPE>
+<RANGE>>= 0</RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Shift</NICK>
+<BLURB>Value added to the scaled source array elements.</BLURB>
+<DEFAULT>0</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstCvLaplace::mask</NAME>
+<TYPE>gboolean</TYPE>
+<RANGE></RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Mask</NICK>
+<BLURB>Sets whether the detected edges should be used as a mask on the original input or not.</BLURB>
+<DEFAULT>TRUE</DEFAULT>
+</ARG>
+
+<ARG>
 <NAME>GstRotate::angle</NAME>
 <TYPE>gdouble</TYPE>
 <RANGE></RANGE>
@@ -58484,7 +58544,7 @@
 <RANGE></RANGE>
 <FLAGS>rw</FLAGS>
 <NICK>Use in-band FEC</NICK>
-<BLURB>Use forward error correction if available.</BLURB>
+<BLURB>Use forward error correction if available (needs PLC enabled).</BLURB>
 <DEFAULT>FALSE</DEFAULT>
 </ARG>
 
@@ -58654,7 +58714,7 @@
 <RANGE></RANGE>
 <FLAGS>rw</FLAGS>
 <NICK>Calculate Motion</NICK>
-<BLURB>If needs calculate motion on frame you need this property setting true otherwise false.</BLURB>
+<BLURB>Toggles motion calculation. If FALSE, this filter does nothing.</BLURB>
 <DEFAULT>TRUE</DEFAULT>
 </ARG>
 
@@ -58664,7 +58724,7 @@
 <RANGE></RANGE>
 <FLAGS>rw</FLAGS>
 <NICK>Color of Motion Cells</NICK>
-<BLURB>The color of motion cells separated with ",".</BLURB>
+<BLURB>Color for motion cells in R,G,B format. Max per channel is 255.</BLURB>
 <DEFAULT>"255,255,0"</DEFAULT>
 </ARG>
 
@@ -58694,7 +58754,7 @@
 <RANGE></RANGE>
 <FLAGS>rw</FLAGS>
 <NICK>Display</NICK>
-<BLURB>Motion Cells visible or not on Current Frame.</BLURB>
+<BLURB>Toggle display of motion cells on current frame.</BLURB>
 <DEFAULT>FALSE</DEFAULT>
 </ARG>
 
@@ -58703,8 +58763,8 @@
 <TYPE>gint</TYPE>
 <RANGE>[1,60]</RANGE>
 <FLAGS>rw</FLAGS>
-<NICK>Gap is time in second, elapsed time from last motion timestamp. </NICK>
-<BLURB>If elapsed time minus form last motion timestamp is greater or equal than gap then we post motion finished bus message. .</BLURB>
+<NICK>Motion-finished Threshold</NICK>
+<BLURB>Interval in seconds after which motion is considered finished and a motion finished bus message is posted.</BLURB>
 <DEFAULT>5</DEFAULT>
 </ARG>
 
@@ -58714,7 +58774,7 @@
 <RANGE>[8,32]</RANGE>
 <FLAGS>rw</FLAGS>
 <NICK>Number of Horizontal Grids</NICK>
-<BLURB>You can give number of horizontal grid cells.</BLURB>
+<BLURB>Number of horizontal grid cells.</BLURB>
 <DEFAULT>10</DEFAULT>
 </ARG>
 
@@ -58724,7 +58784,7 @@
 <RANGE>[8,32]</RANGE>
 <FLAGS>rw</FLAGS>
 <NICK>Number of Vertical Grids</NICK>
-<BLURB>You can give number of vertical grid cells.</BLURB>
+<BLURB>Number of vertical grid cells.</BLURB>
 <DEFAULT>10</DEFAULT>
 </ARG>
 
@@ -58733,8 +58793,8 @@
 <TYPE>gint</TYPE>
 <RANGE>[1,60]</RANGE>
 <FLAGS>rw</FLAGS>
-<NICK>MINIMUN MOTION FRAMES</NICK>
-<BLURB>Define the minimum number of motion frames that trigger a motion event.</BLURB>
+<NICK>Minimum Motion Frames</NICK>
+<BLURB>Minimum number of motion frames triggering a motion event.</BLURB>
 <DEFAULT>1</DEFAULT>
 </ARG>
 
@@ -58744,7 +58804,7 @@
 <RANGE></RANGE>
 <FLAGS>rw</FLAGS>
 <NICK>Motion Cells Of Interest(MOCI)</NICK>
-<BLURB>The line and column idx separated with ":", describe a cell. Cells separated with ",".</BLURB>
+<BLURB>Describe a cell with its line and column idx separated with ":". Pass multiple cells as a comma-separated list.</BLURB>
 <DEFAULT>NULL</DEFAULT>
 </ARG>
 
@@ -58754,7 +58814,7 @@
 <RANGE>[G_MAXULONG,5]</RANGE>
 <FLAGS>rw</FLAGS>
 <NICK>Motion Cell Thickness</NICK>
-<BLURB>Motion Cell Border Thickness, if it's -1 then motion cell will be fill.</BLURB>
+<BLURB>Motion Cell Border Thickness. Set to -1 to fill motion cell.</BLURB>
 <DEFAULT>1</DEFAULT>
 </ARG>
 
@@ -58764,7 +58824,7 @@
 <RANGE></RANGE>
 <FLAGS>rw</FLAGS>
 <NICK>Motion Mask with Cells Position</NICK>
-<BLURB>The line and column idx separated with ":" what cells want we mask-out, describe a cell. Cells separated with ",".</BLURB>
+<BLURB>Describe a cell with its line and column idx separated with ":". Pass multiple cells as a comma-separated list.</BLURB>
 <DEFAULT>NULL</DEFAULT>
 </ARG>
 
@@ -58774,7 +58834,7 @@
 <RANGE></RANGE>
 <FLAGS>rw</FLAGS>
 <NICK>Motion Mask with Coordinates</NICK>
-<BLURB>The upper left x, y and lower right x, y coordinates separated with ":", describe a region. Regions separated with ",".</BLURB>
+<BLURB>Describe a region with its upper left and lower right x, y coordinates separated with ":". Pass multiple regions as a comma-separated list.</BLURB>
 <DEFAULT>NULL</DEFAULT>
 </ARG>
 
@@ -58784,7 +58844,7 @@
 <RANGE></RANGE>
 <FLAGS>rw</FLAGS>
 <NICK>Post All Motion</NICK>
-<BLURB>Element post bus msg for every motion frame or just motion start and motion stop.</BLURB>
+<BLURB>Post bus messages for every motion frame or just motion start and motion stop.</BLURB>
 <DEFAULT>FALSE</DEFAULT>
 </ARG>
 
@@ -58793,8 +58853,8 @@
 <TYPE>gint</TYPE>
 <RANGE>[0,180]</RANGE>
 <FLAGS>rw</FLAGS>
-<NICK>POSTNOMOTION</NICK>
-<BLURB>If non 0 post a no_motion event is posted on the bus if no motion is detected for N seconds.</BLURB>
+<NICK>No-motion Threshold</NICK>
+<BLURB>If non 0, post a no_motion event on the bus if no motion is detected for the given number of seconds.</BLURB>
 <DEFAULT>0</DEFAULT>
 </ARG>
 
@@ -58804,7 +58864,7 @@
 <RANGE>[0,1]</RANGE>
 <FLAGS>rw</FLAGS>
 <NICK>Motion Sensitivity</NICK>
-<BLURB>You can tunning the element motion sensitivity.</BLURB>
+<BLURB>Motion detection sensitivity.</BLURB>
 <DEFAULT>0.5</DEFAULT>
 </ARG>
 
@@ -58814,7 +58874,7 @@
 <RANGE>[0,1]</RANGE>
 <FLAGS>rw</FLAGS>
 <NICK>Lower bound of motion cells number</NICK>
-<BLURB>Threshold value for motion, when motion cells number greater sum cells * threshold, we show motion.</BLURB>
+<BLURB>Threshold value for motion. Filter detects motion when at least this fraction of the cells have moved.</BLURB>
 <DEFAULT>0.01</DEFAULT>
 </ARG>
 
@@ -58824,7 +58884,7 @@
 <RANGE></RANGE>
 <FLAGS>rw</FLAGS>
 <NICK>Use alpha</NICK>
-<BLURB>Use or not alpha blending on frames with motion cells.</BLURB>
+<BLURB>Toggle usage of alpha blending on frames with motion cells.</BLURB>
 <DEFAULT>TRUE</DEFAULT>
 </ARG>
 
@@ -59939,6 +59999,16 @@
 </ARG>
 
 <ARG>
+<NAME>GstDashDemux::presentation-delay</NAME>
+<TYPE>gchar*</TYPE>
+<RANGE></RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Presentation delay</NICK>
+<BLURB>Default presentation delay (in seconds, milliseconds or fragments) (e.g. 12s, 2500ms, 3f).</BLURB>
+<DEFAULT>NULL</DEFAULT>
+</ARG>
+
+<ARG>
 <NAME>GstSkinDetect::method</NAME>
 <TYPE>GstSkindetectMethod</TYPE>
 <RANGE></RANGE>
@@ -59980,8 +60050,8 @@
 
 <ARG>
 <NAME>GstHanddetect::ROI-HEIGHT</NAME>
-<TYPE>guint</TYPE>
-<RANGE></RANGE>
+<TYPE>gint</TYPE>
+<RANGE>>= 0</RANGE>
 <FLAGS>rw</FLAGS>
 <NICK>ROI_HEIGHT</NICK>
 <BLURB>HEIGHT of left-top pointer in region of interest 
@@ -59991,8 +60061,8 @@
 
 <ARG>
 <NAME>GstHanddetect::ROI-WIDTH</NAME>
-<TYPE>guint</TYPE>
-<RANGE></RANGE>
+<TYPE>gint</TYPE>
+<RANGE>>= 0</RANGE>
 <FLAGS>rw</FLAGS>
 <NICK>ROI_WIDTH</NICK>
 <BLURB>WIDTH of left-top pointer in region of interest 
@@ -60002,8 +60072,8 @@
 
 <ARG>
 <NAME>GstHanddetect::ROI-X</NAME>
-<TYPE>guint</TYPE>
-<RANGE></RANGE>
+<TYPE>gint</TYPE>
+<RANGE>>= 0</RANGE>
 <FLAGS>rw</FLAGS>
 <NICK>ROI_X</NICK>
 <BLURB>X of left-top pointer in region of interest 
@@ -60013,8 +60083,8 @@
 
 <ARG>
 <NAME>GstHanddetect::ROI-Y</NAME>
-<TYPE>guint</TYPE>
-<RANGE></RANGE>
+<TYPE>gint</TYPE>
+<RANGE>>= 0</RANGE>
 <FLAGS>rw</FLAGS>
 <NICK>ROI_Y</NICK>
 <BLURB>Y of left-top pointer in region of interest 
@@ -67063,6 +67133,56 @@
 </ARG>
 
 <ARG>
+<NAME>GstGLFilterShader::fragment</NAME>
+<TYPE>gchar*</TYPE>
+<RANGE></RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Fragment Source</NICK>
+<BLURB>GLSL fragment source.</BLURB>
+<DEFAULT>NULL</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstGLFilterShader::shader</NAME>
+<TYPE>GstGLShader*</TYPE>
+<RANGE></RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Shader object</NICK>
+<BLURB>GstGLShader to use.</BLURB>
+<DEFAULT></DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstGLFilterShader::uniforms</NAME>
+<TYPE>GstStructure*</TYPE>
+<RANGE></RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>GLSL Uniforms</NICK>
+<BLURB>GLSL Uniforms.</BLURB>
+<DEFAULT></DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstGLFilterShader::update-shader</NAME>
+<TYPE>gboolean</TYPE>
+<RANGE></RANGE>
+<FLAGS>w</FLAGS>
+<NICK>Update Shader</NICK>
+<BLURB>Emit the 'create-shader' signal for the next frame.</BLURB>
+<DEFAULT>FALSE</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstGLFilterShader::vertex</NAME>
+<TYPE>gchar*</TYPE>
+<RANGE></RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Vertex Source</NICK>
+<BLURB>GLSL vertex source.</BLURB>
+<DEFAULT>NULL</DEFAULT>
+</ARG>
+
+<ARG>
 <NAME>GstGLOverlay::angle-png</NAME>
 <TYPE>gint</TYPE>
 <RANGE>[-90,90]</RANGE>
@@ -68031,6 +68151,46 @@
 </ARG>
 
 <ARG>
+<NAME>GstGLSinkBin::brightness</NAME>
+<TYPE>gdouble</TYPE>
+<RANGE>[-1,1]</RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Brightness</NICK>
+<BLURB>brightness.</BLURB>
+<DEFAULT>0</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstGLSinkBin::contrast</NAME>
+<TYPE>gdouble</TYPE>
+<RANGE>[0,2]</RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Contrast</NICK>
+<BLURB>contrast.</BLURB>
+<DEFAULT>1</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstGLSinkBin::hue</NAME>
+<TYPE>gdouble</TYPE>
+<RANGE>[-1,1]</RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Hue</NICK>
+<BLURB>hue.</BLURB>
+<DEFAULT>0</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstGLSinkBin::saturation</NAME>
+<TYPE>gdouble</TYPE>
+<RANGE>[0,2]</RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Saturation</NICK>
+<BLURB>saturation.</BLURB>
+<DEFAULT>1</DEFAULT>
+</ARG>
+
+<ARG>
 <NAME>GstGLMixerBin::latency</NAME>
 <TYPE>gint64</TYPE>
 <RANGE>>= 0</RANGE>
@@ -68940,3 +69100,263 @@
 <DEFAULT>128</DEFAULT>
 </ARG>
 
+<ARG>
+<NAME>GstTeletextDec::font-description</NAME>
+<TYPE>gchar*</TYPE>
+<RANGE></RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Pango font description</NICK>
+<BLURB>Font description used for the pango output.</BLURB>
+<DEFAULT>"verdana 12"</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstTeletextDec::page</NAME>
+<TYPE>gint</TYPE>
+<RANGE>[100,999]</RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Page number</NICK>
+<BLURB>Number of page that should displayed.</BLURB>
+<DEFAULT>100</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstTeletextDec::subpage</NAME>
+<TYPE>gint</TYPE>
+<RANGE>[G_MAXULONG,153]</RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Sub-page number</NICK>
+<BLURB>Number of sub-page that should displayed (-1 for all).</BLURB>
+<DEFAULT>-1</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstTeletextDec::subtitles-mode</NAME>
+<TYPE>gboolean</TYPE>
+<RANGE></RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Enable subtitles mode</NICK>
+<BLURB>Enables subtitles mode for text output stripping the blank lines and the teletext state lines.</BLURB>
+<DEFAULT>FALSE</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstTeletextDec::subtitles-template</NAME>
+<TYPE>gchar*</TYPE>
+<RANGE></RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Subtitles output template</NICK>
+<BLURB>Output template used to print each one of the subtitles lines.</BLURB>
+<DEFAULT>"%s\\n"</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstNetSim::delay-probability</NAME>
+<TYPE>gfloat</TYPE>
+<RANGE>[0,1]</RANGE>
+<FLAGS>rwx</FLAGS>
+<NICK>Delay Probability</NICK>
+<BLURB>The Probability a buffer is delayed.</BLURB>
+<DEFAULT>0</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstNetSim::drop-packets</NAME>
+<TYPE>guint</TYPE>
+<RANGE></RANGE>
+<FLAGS>rwx</FLAGS>
+<NICK>Drop Packets</NICK>
+<BLURB>Drop the next n packets.</BLURB>
+<DEFAULT>0</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstNetSim::drop-probability</NAME>
+<TYPE>gfloat</TYPE>
+<RANGE>[0,1]</RANGE>
+<FLAGS>rwx</FLAGS>
+<NICK>Drop Probability</NICK>
+<BLURB>The Probability a buffer is dropped.</BLURB>
+<DEFAULT>0</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstNetSim::duplicate-probability</NAME>
+<TYPE>gfloat</TYPE>
+<RANGE>[0,1]</RANGE>
+<FLAGS>rwx</FLAGS>
+<NICK>Duplicate Probability</NICK>
+<BLURB>The Probability a buffer is duplicated.</BLURB>
+<DEFAULT>0</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstNetSim::max-delay</NAME>
+<TYPE>gint</TYPE>
+<RANGE></RANGE>
+<FLAGS>rwx</FLAGS>
+<NICK>Maximum delay (ms)</NICK>
+<BLURB>The maximum delay in ms to apply to buffers.</BLURB>
+<DEFAULT>400</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstNetSim::min-delay</NAME>
+<TYPE>gint</TYPE>
+<RANGE></RANGE>
+<FLAGS>rwx</FLAGS>
+<NICK>Minimum delay (ms)</NICK>
+<BLURB>The minimum delay in ms to apply to buffers.</BLURB>
+<DEFAULT>200</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstGDPDepay::ts-offset</NAME>
+<TYPE>gint64</TYPE>
+<RANGE></RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Timestamp Offset</NICK>
+<BLURB>Timestamp Offset.</BLURB>
+<DEFAULT>0</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstGLColorBalance::brightness</NAME>
+<TYPE>gdouble</TYPE>
+<RANGE>[-1,1]</RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Brightness</NICK>
+<BLURB>brightness.</BLURB>
+<DEFAULT>0</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstGLColorBalance::contrast</NAME>
+<TYPE>gdouble</TYPE>
+<RANGE>[0,2]</RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Contrast</NICK>
+<BLURB>contrast.</BLURB>
+<DEFAULT>1</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstGLColorBalance::hue</NAME>
+<TYPE>gdouble</TYPE>
+<RANGE>[-1,1]</RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Hue</NICK>
+<BLURB>hue.</BLURB>
+<DEFAULT>0</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstGLColorBalance::saturation</NAME>
+<TYPE>gdouble</TYPE>
+<RANGE>[0,2]</RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Saturation</NICK>
+<BLURB>saturation.</BLURB>
+<DEFAULT>1</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstToneGenerateSrc::freq</NAME>
+<TYPE>gint</TYPE>
+<RANGE>[0,20000]</RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Frequency</NICK>
+<BLURB>Frequency of test signal.</BLURB>
+<DEFAULT>0</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstToneGenerateSrc::freq2</NAME>
+<TYPE>gint</TYPE>
+<RANGE>[0,20000]</RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Second Frequency</NICK>
+<BLURB>Frequency of second telephony tone component.</BLURB>
+<DEFAULT>0</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstToneGenerateSrc::off-time</NAME>
+<TYPE>gint</TYPE>
+<RANGE>>= 0</RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Signal OFF time first period </NICK>
+<BLURB>Time of the first period  when the tone signal is off.</BLURB>
+<DEFAULT>1000</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstToneGenerateSrc::off-time2</NAME>
+<TYPE>gint</TYPE>
+<RANGE>>= 0</RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Signal OFF time first period </NICK>
+<BLURB>Time of the second period  when the tone signal is off.</BLURB>
+<DEFAULT>1000</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstToneGenerateSrc::on-time</NAME>
+<TYPE>gint</TYPE>
+<RANGE>>= 1</RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Signal ON time first period</NICK>
+<BLURB>Time of the first period  when the tone signal is present.</BLURB>
+<DEFAULT>1000</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstToneGenerateSrc::on-time2</NAME>
+<TYPE>gint</TYPE>
+<RANGE>>= 1</RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Signal ON time second period</NICK>
+<BLURB>Time of the second period  when the tone signal is present.</BLURB>
+<DEFAULT>1000</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstToneGenerateSrc::repeat</NAME>
+<TYPE>gboolean</TYPE>
+<RANGE></RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Repeat the specified tone period </NICK>
+<BLURB>Whether to repeat specified tone indefinitly.</BLURB>
+<DEFAULT>FALSE</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstToneGenerateSrc::samplesperbuffer</NAME>
+<TYPE>gint</TYPE>
+<RANGE>>= 1</RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Samples per buffer</NICK>
+<BLURB>Number of samples in each outgoing buffer.</BLURB>
+<DEFAULT>1024</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstToneGenerateSrc::volume</NAME>
+<TYPE>gint</TYPE>
+<RANGE>[-50,0]</RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Volume</NICK>
+<BLURB>Volume of first signal.</BLURB>
+<DEFAULT>0</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstToneGenerateSrc::volume2</NAME>
+<TYPE>gint</TYPE>
+<RANGE>[-50,0]</RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Volume2</NICK>
+<BLURB>Volume of second tone signal.</BLURB>
+<DEFAULT>0</DEFAULT>
+</ARG>
+
diff --git a/docs/plugins/gst-plugins-bad-plugins.hierarchy b/docs/plugins/gst-plugins-bad-plugins.hierarchy
index b09fb5d..22af47a 100644
--- a/docs/plugins/gst-plugins-bad-plugins.hierarchy
+++ b/docs/plugins/gst-plugins-bad-plugins.hierarchy
@@ -3,7 +3,8 @@
     GstObject
       GstAllocator
         GstAllocatorSysmem
-        GstWlShmAllocator
+        GstFdAllocator
+          GstWlShmAllocator
       GstAudioRingBuffer
         GstAudioSinkRingBuffer
         GstAudioSrcRingBuffer
@@ -18,6 +19,8 @@
           GstAudioAggregator
             GstAudioInterleave
             GstAudioMixer
+              GstLiveAdder
+          GstMXFMux
           GstVideoAggregator
             GstCompositor
             GstGLBaseMixer
@@ -34,19 +37,16 @@
           GstDtsDec
           GstFaad
           GstGSMDec
-          GstMpg123AudioDec
-          GstOpusDec
           GstSbcDec
           GstSirenDec
         GstAudioEncoder
           ADPCMEnc
           GstGSMEnc
-          GstOpusEnc
           GstSbcEnc
           GstSirenEnc
           GstVoAacEnc
           GstVoAmrWbEnc
-        GstAudioVisualizer-BadGstAudioVisualizers
+        GstAudioVisualizer
           GstSpaceScope
           GstSpectraScope
           GstSynaeScope
@@ -115,6 +115,7 @@
             GstRTMPSrc
             GstRfbSrc
             GstShmSrc
+            GstToneGenerateSrc
             GstVCDSrc
         GstBaseTransform
           GstAudioFilter
@@ -141,6 +142,7 @@
             GstGLColorConvertElement
             GstGLDownloadElement
             GstGLFilter
+              GstGLColorBalance
               GstGLColorscale
               GstGLDeinterlace
               GstGLDifferenceMatte
@@ -203,23 +205,8 @@
               GstPerspective
               GstRotate
               GstSquare
-            GstGrabcut
-            GstOpencvVideoFilter
-              GstCvDilateErode
-                GstCvDilate
-                GstCvErode
-              GstCvEqualizeHist
-              GstCvLaplace
-              GstCvSmooth
-              GstCvSobel
-              GstFaceBlur
-              GstFaceDetect
-              GstHanddetect
-              GstSkinDetect
-            GstRetinex
             GstRsvgOverlay
             GstSceneChange
-            GstSegmentation
             GstSimpleVideoMark
             GstSimpleVideoMarkDetect
             GstSmooth
@@ -264,11 +251,9 @@
         GstCompare
         GstDVBSubOverlay
         GstDVDSpu
-        GstDisparity
         GstDtlsDec
         GstDtlsEnc
         GstDtlsSrtpDemux
-        GstEdgeDetect
         GstErrorIgnore
         GstFestival
         GstFieldAnalysis
@@ -284,32 +269,25 @@
         GstKateEnc
         GstKateParse
           GstKateTag
-        GstLiveAdder
         GstMXFDemux
         GstMidiParse
         GstMimDec
         GstMimEnc
         GstModPlug
-        GstMotioncells
         GstMpeg2enc
         GstMpegPSDemux
         GstMplex
-        GstOpencvTextOverlay
+        GstNetSim
         GstPcapParse
         GstPitch
-        GstPyramidSegment
-        GstRTPBaseDepayload
-          GstRTPOpusDepay
-          GstRtpH265Depay
         GstRTPBasePayload
           GstRtpAsfPay
-          GstRtpH265Pay
-          GstRtpOPUSPay
         GstRawParse
           GstAudioParse
           GstVideoParse
         GstRtpOnvifParse
         GstRtpOnvifTimestamp
+        GstSFDec
         GstSegmentClip
           GstAudioSegmentClip
           GstVideoSegmentClip
@@ -320,7 +298,7 @@
         GstSrtpEnc
         GstTagMux
           GstId3Mux
-        GstTemplateMatch
+        GstTeletextDec
         GstUvcH264MjpgDemux
         GstVideoDecoder
           GstLibde265Dec
@@ -337,6 +315,7 @@
           GstSchroEnc
           GstWebpEnc
           GstX265Enc
+        GstVideoFrameAudioLevel
         GstWebvttEnc
         GstWildmidi
         GstY4mDec
@@ -346,21 +325,25 @@
           MpegTSParse2
         MpegTsMux
       GstGLContext
+      GstGLShader
       GstPad
         GstAggregatorPad
           GstAudioAggregatorPad
             GstAudioInterleavePad
             GstAudioMixerPad
+          GstMXFMuxPad
           GstVideoAggregatorPad
             GstCompositorPad
             GstGLBaseMixerPad
               GstGLMixerPad
+                GstGLStereoMixPad
                 GstGLVideoMixerPad
       GstPadTemplate
       GstPlugin
       GstPluginFeature
         GstDeviceProviderFactory
         GstElementFactory
+        GstTracerFactory
         GstTypeFindFactory
       GstRegistry
       GstTask
diff --git a/docs/plugins/gst-plugins-bad-plugins.interfaces b/docs/plugins/gst-plugins-bad-plugins.interfaces
index b67338c..c9d803f 100644
--- a/docs/plugins/gst-plugins-bad-plugins.interfaces
+++ b/docs/plugins/gst-plugins-bad-plugins.interfaces
@@ -33,25 +33,22 @@
 GstFaceOverlay GstChildProxy
 GstFreeverb GstPreset
 GstGLBaseMixer GstChildProxy
+GstGLColorBalance GstColorBalance
 GstGLFilterBin GstChildProxy
 GstGLImageSink GstVideoOverlay
 GstGLImageSink GstVideoOverlay GstNavigation
 GstGLImageSinkBin GstChildProxy GstVideoOverlay GstNavigation
+GstGLImageSinkBin GstChildProxy GstVideoOverlay GstNavigation GstColorBalance
 GstGLMixer GstChildProxy
 GstGLMixerBin GstChildProxy
 GstGLMosaic GstChildProxy
 GstGLSinkBin GstChildProxy GstVideoOverlay GstNavigation
+GstGLSinkBin GstChildProxy GstVideoOverlay GstNavigation GstColorBalance
 GstGLSrcBin GstChildProxy
 GstGLStereoMix GstChildProxy
 GstGLVideoMixer GstChildProxy
 GstGLVideoMixerBin GstChildProxy
 GstGSMEnc GstPreset
-GstGSettingsAudioSink GstChildProxy
-GstGSettingsAudioSrc GstChildProxy
-GstGSettingsSwitchSink GstChildProxy
-GstGSettingsSwitchSrc GstChildProxy
-GstGSettingsVideoSink GstChildProxy
-GstGSettingsVideoSrc GstChildProxy
 GstGtkBaseSink GstNavigation
 GstGtkGLSink GstNavigation
 GstGtkSink GstNavigation
@@ -63,6 +60,7 @@
 GstJifMux GstTagSetter GstTagXmpWriter
 GstKateEnc GstTagSetter
 GstKateTag GstTagSetter
+GstLiveAdder GstChildProxy
 GstMMS GstURIHandler
 GstMpeg2enc GstPreset
 GstMssDemux GstChildProxy
diff --git a/docs/plugins/gst-plugins-bad-plugins.signals b/docs/plugins/gst-plugins-bad-plugins.signals
index 1040a7d..7fecee4 100644
--- a/docs/plugins/gst-plugins-bad-plugins.signals
+++ b/docs/plugins/gst-plugins-bad-plugins.signals
@@ -750,3 +750,10 @@
 GstDtlsDec *gstdtlsdec
 </SIGNAL>
 
+<SIGNAL>
+<NAME>GstGLFilterShader::create-shader</NAME>
+<RETURNS>GstGLShader*</RETURNS>
+<FLAGS>l</FLAGS>
+GstGLFilterShader *gstglfiltershader
+</SIGNAL>
+
diff --git a/docs/plugins/html/ch01.html b/docs/plugins/html/ch01.html
index 45e03bd..916ffab 100644
--- a/docs/plugins/html/ch01.html
+++ b/docs/plugins/html/ch01.html
@@ -3,7 +3,7 @@
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>gst-plugins-bad Elements: GStreamer Bad Plugins 1.0 Plugins Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
 <link rel="home" href="index.html" title="GStreamer Bad Plugins 1.0 Plugins Reference Manual">
 <link rel="up" href="index.html" title="GStreamer Bad Plugins 1.0 Plugins Reference Manual">
 <link rel="prev" href="index.html" title="GStreamer Bad Plugins 1.0 Plugins Reference Manual">
@@ -36,6 +36,9 @@
 <span class="refentrytitle"><a href="gst-plugins-bad-plugins-assrender.html">assrender</a></span><span class="refpurpose"></span>
 </dt>
 <dt>
+<span class="refentrytitle"><a href="gst-plugins-bad-plugins-audiointerleave.html">audiointerleave</a></span><span class="refpurpose"></span>
+</dt>
+<dt>
 <span class="refentrytitle"><a href="gst-plugins-bad-plugins-audiomixer.html">audiomixer</a></span><span class="refpurpose"></span>
 </dt>
 <dt>
@@ -174,9 +177,6 @@
 <span class="refentrytitle"><a href="gst-plugins-bad-plugins-mplex.html">mplex</a></span><span class="refpurpose"></span>
 </dt>
 <dt>
-<span class="refentrytitle"><a href="gst-plugins-bad-plugins-mpg123audiodec.html">mpg123audiodec</a></span><span class="refpurpose"></span>
-</dt>
-<dt>
 <span class="refentrytitle"><a href="gst-plugins-bad-plugins-neonhttpsrc.html">neonhttpsrc</a></span><span class="refpurpose"></span>
 </dt>
 <dt>
@@ -189,21 +189,6 @@
 <span class="refentrytitle"><a href="gst-plugins-bad-plugins-openalsink.html">openalsink</a></span><span class="refpurpose"></span>
 </dt>
 <dt>
-<span class="refentrytitle"><a href="gst-plugins-bad-plugins-opusdec.html">opusdec</a></span><span class="refpurpose"></span>
-</dt>
-<dt>
-<span class="refentrytitle"><a href="gst-plugins-bad-plugins-opusenc.html">opusenc</a></span><span class="refpurpose"></span>
-</dt>
-<dt>
-<span class="refentrytitle"><a href="gst-plugins-bad-plugins-opusparse.html">opusparse</a></span><span class="refpurpose"></span>
-</dt>
-<dt>
-<span class="refentrytitle"><a href="gst-plugins-bad-plugins-rtpopuspay.html">rtpopuspay</a></span><span class="refpurpose"></span>
-</dt>
-<dt>
-<span class="refentrytitle"><a href="gst-plugins-bad-plugins-rtpopusdepay.html">rtpopusdepay</a></span><span class="refpurpose"></span>
-</dt>
-<dt>
 <span class="refentrytitle"><a href="gst-plugins-bad-plugins-pcapparse.html">pcapparse</a></span><span class="refpurpose"></span>
 </dt>
 <dt>
diff --git a/docs/plugins/html/ch02.html b/docs/plugins/html/ch02.html
index 2467873..7b56954 100644
--- a/docs/plugins/html/ch02.html
+++ b/docs/plugins/html/ch02.html
@@ -3,7 +3,7 @@
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>gst-plugins-bad Plugins: GStreamer Bad Plugins 1.0 Plugins Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
 <link rel="home" href="index.html" title="GStreamer Bad Plugins 1.0 Plugins Reference Manual">
 <link rel="up" href="index.html" title="GStreamer Bad Plugins 1.0 Plugins Reference Manual">
 <link rel="prev" href="gst-plugins-bad-plugins-wavescope.html" title="wavescope">
@@ -93,9 +93,6 @@
 <span class="refentrytitle"><a href="gst-plugins-bad-plugins-plugin-jpegformat.html">jpegformat</a></span><span class="refpurpose"> — JPEG interchange format plugin</span>
 </dt>
 <dt>
-<span class="refentrytitle"><a href="gst-plugins-bad-plugins-plugin-liveadder.html">liveadder</a></span><span class="refpurpose"> — Adds multiple live discontinuous streams</span>
-</dt>
-<dt>
 <span class="refentrytitle"><a href="gst-plugins-bad-plugins-plugin-mimic.html">mimic</a></span><span class="refpurpose"> — Mimic codec</span>
 </dt>
 <dt>
@@ -129,9 +126,6 @@
 <span class="refentrytitle"><a href="gst-plugins-bad-plugins-plugin-opencv.html">opencv</a></span><span class="refpurpose"> — GStreamer OpenCV Plugins</span>
 </dt>
 <dt>
-<span class="refentrytitle"><a href="gst-plugins-bad-plugins-plugin-opus.html">opus</a></span><span class="refpurpose"> — OPUS plugin library</span>
-</dt>
-<dt>
 <span class="refentrytitle"><a href="gst-plugins-bad-plugins-plugin-pcapparse.html">pcapparse</a></span><span class="refpurpose"> — Element parsing raw pcap streams</span>
 </dt>
 <dt>
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-1.0.devhelp2 b/docs/plugins/html/gst-plugins-bad-plugins-1.0.devhelp2
index a235c15..743b7e5 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-1.0.devhelp2
+++ b/docs/plugins/html/gst-plugins-bad-plugins-1.0.devhelp2
@@ -6,6 +6,7 @@
       <sub name="aiffparse" link="gst-plugins-bad-plugins-aiffparse.html"/>
       <sub name="aiffmux" link="gst-plugins-bad-plugins-aiffmux.html"/>
       <sub name="assrender" link="gst-plugins-bad-plugins-assrender.html"/>
+      <sub name="audiointerleave" link="gst-plugins-bad-plugins-audiointerleave.html"/>
       <sub name="audiomixer" link="gst-plugins-bad-plugins-audiomixer.html"/>
       <sub name="autoconvert" link="gst-plugins-bad-plugins-autoconvert.html"/>
       <sub name="bs2b" link="gst-plugins-bad-plugins-bs2b.html"/>
@@ -52,16 +53,10 @@
       <sub name="mpegpsmux" link="gst-plugins-bad-plugins-mpegpsmux.html"/>
       <sub name="mpegtsmux" link="gst-plugins-bad-plugins-mpegtsmux.html"/>
       <sub name="mplex" link="gst-plugins-bad-plugins-mplex.html"/>
-      <sub name="mpg123audiodec" link="gst-plugins-bad-plugins-mpg123audiodec.html"/>
       <sub name="neonhttpsrc" link="gst-plugins-bad-plugins-neonhttpsrc.html"/>
       <sub name="ofa" link="gst-plugins-bad-plugins-ofa.html"/>
       <sub name="openalsrc" link="gst-plugins-bad-plugins-openalsrc.html"/>
       <sub name="openalsink" link="gst-plugins-bad-plugins-openalsink.html"/>
-      <sub name="opusdec" link="gst-plugins-bad-plugins-opusdec.html"/>
-      <sub name="opusenc" link="gst-plugins-bad-plugins-opusenc.html"/>
-      <sub name="opusparse" link="gst-plugins-bad-plugins-opusparse.html"/>
-      <sub name="rtpopuspay" link="gst-plugins-bad-plugins-rtpopuspay.html"/>
-      <sub name="rtpopusdepay" link="gst-plugins-bad-plugins-rtpopusdepay.html"/>
       <sub name="pcapparse" link="gst-plugins-bad-plugins-pcapparse.html"/>
       <sub name="pinch" link="gst-plugins-bad-plugins-pinch.html"/>
       <sub name="pyramidsegment" link="gst-plugins-bad-plugins-pyramidsegment.html"/>
@@ -114,7 +109,6 @@
       <sub name="geometrictransform" link="gst-plugins-bad-plugins-plugin-geometrictransform.html"/>
       <sub name="gsm" link="gst-plugins-bad-plugins-plugin-gsm.html"/>
       <sub name="jpegformat" link="gst-plugins-bad-plugins-plugin-jpegformat.html"/>
-      <sub name="liveadder" link="gst-plugins-bad-plugins-plugin-liveadder.html"/>
       <sub name="mimic" link="gst-plugins-bad-plugins-plugin-mimic.html"/>
       <sub name="mms" link="gst-plugins-bad-plugins-plugin-mms.html"/>
       <sub name="modplug" link="gst-plugins-bad-plugins-plugin-modplug.html"/>
@@ -126,7 +120,6 @@
       <sub name="ofa" link="gst-plugins-bad-plugins-plugin-ofa.html"/>
       <sub name="openal" link="gst-plugins-bad-plugins-plugin-openal.html"/>
       <sub name="opencv" link="gst-plugins-bad-plugins-plugin-opencv.html"/>
-      <sub name="opus" link="gst-plugins-bad-plugins-plugin-opus.html"/>
       <sub name="pcapparse" link="gst-plugins-bad-plugins-plugin-pcapparse.html"/>
       <sub name="rawparse" link="gst-plugins-bad-plugins-plugin-rawparse.html"/>
       <sub name="rfbsrc" link="gst-plugins-bad-plugins-plugin-rfbsrc.html"/>
@@ -150,6 +143,9 @@
     <keyword type="property" name="The “embeddedfonts” property" link="gst-plugins-bad-plugins-assrender.html#GstAssRender--embeddedfonts"/>
     <keyword type="property" name="The “enable” property" link="gst-plugins-bad-plugins-assrender.html#GstAssRender--enable"/>
     <keyword type="property" name="The “wait-text” property" link="gst-plugins-bad-plugins-assrender.html#GstAssRender--wait-text"/>
+    <keyword type="struct" name="struct GstAudioInterleave" link="gst-plugins-bad-plugins-audiointerleave.html#GstAudioInterleave-struct"/>
+    <keyword type="property" name="The “channel-positions” property" link="gst-plugins-bad-plugins-audiointerleave.html#GstAudioInterleave--channel-positions"/>
+    <keyword type="property" name="The “channel-positions-from-input” property" link="gst-plugins-bad-plugins-audiointerleave.html#GstAudioInterleave--channel-positions-from-input"/>
     <keyword type="struct" name="struct GstAudioMixer" link="gst-plugins-bad-plugins-audiomixer.html#GstAudioMixer-struct"/>
     <keyword type="property" name="The “alignment-threshold” property" link="gst-plugins-bad-plugins-audiomixer.html#GstAudioMixer--alignment-threshold"/>
     <keyword type="property" name="The “caps” property" link="gst-plugins-bad-plugins-audiomixer.html#GstAudioMixer--caps"/>
@@ -175,12 +171,15 @@
     <keyword type="struct" name="struct GstColorEffects" link="gst-plugins-bad-plugins-coloreffects.html#GstColorEffects-struct"/>
     <keyword type="property" name="The “preset” property" link="gst-plugins-bad-plugins-coloreffects.html#GstColorEffects--preset"/>
     <keyword type="property" name="The “background” property" link="gst-plugins-bad-plugins-compositor.html#GstCompositor--background"/>
-    <keyword type="struct" name="struct GstCvDilate" link="gst-plugins-bad-plugins-cvdilate.html#GstCvDilate-struct"/>
-    <keyword type="struct" name="struct GstCvErode" link="gst-plugins-bad-plugins-cverode.html#GstCvErode-struct"/>
-    <keyword type="struct" name="struct GstCvEqualizeHist" link="gst-plugins-bad-plugins-cvequalizehist.html#GstCvEqualizeHist-struct"/>
-    <keyword type="struct" name="struct GstCvLaplace" link="gst-plugins-bad-plugins-cvlaplace.html#GstCvLaplace-struct"/>
+    <keyword type="struct" name="struct GstCvDilate" link="gst-plugins-bad-plugins-cvdilate.html#GstCvDilate"/>
+    <keyword type="struct" name="struct GstCvErode" link="gst-plugins-bad-plugins-cverode.html#GstCvErode"/>
+    <keyword type="struct" name="struct GstCvEqualizeHist" link="gst-plugins-bad-plugins-cvequalizehist.html#GstCvEqualizeHist"/>
+    <keyword type="struct" name="struct GstCvLaplace" link="gst-plugins-bad-plugins-cvlaplace.html#GstCvLaplace"/>
     <keyword type="property" name="The “aperture-size” property" link="gst-plugins-bad-plugins-cvlaplace.html#GstCvLaplace--aperture-size"/>
-    <keyword type="struct" name="struct GstCvSmooth" link="gst-plugins-bad-plugins-cvsmooth.html#GstCvSmooth-struct"/>
+    <keyword type="property" name="The “scale” property" link="gst-plugins-bad-plugins-cvlaplace.html#GstCvLaplace--scale"/>
+    <keyword type="property" name="The “shift” property" link="gst-plugins-bad-plugins-cvlaplace.html#GstCvLaplace--shift"/>
+    <keyword type="property" name="The “mask” property" link="gst-plugins-bad-plugins-cvlaplace.html#GstCvLaplace--mask"/>
+    <keyword type="struct" name="struct GstCvSmooth" link="gst-plugins-bad-plugins-cvsmooth.html#GstCvSmooth"/>
     <keyword type="property" name="The “param1” property" link="gst-plugins-bad-plugins-cvsmooth.html#GstCvSmooth--param1"/>
     <keyword type="property" name="The “param2” property" link="gst-plugins-bad-plugins-cvsmooth.html#GstCvSmooth--param2"/>
     <keyword type="property" name="The “param3” property" link="gst-plugins-bad-plugins-cvsmooth.html#GstCvSmooth--param3"/>
@@ -190,10 +189,11 @@
     <keyword type="property" name="The “height” property" link="gst-plugins-bad-plugins-cvsmooth.html#GstCvSmooth--height"/>
     <keyword type="property" name="The “spatial” property" link="gst-plugins-bad-plugins-cvsmooth.html#GstCvSmooth--spatial"/>
     <keyword type="property" name="The “width” property" link="gst-plugins-bad-plugins-cvsmooth.html#GstCvSmooth--width"/>
-    <keyword type="struct" name="struct GstCvSobel" link="gst-plugins-bad-plugins-cvsobel.html#GstCvSobel-struct"/>
+    <keyword type="struct" name="struct GstCvSobel" link="gst-plugins-bad-plugins-cvsobel.html#GstCvSobel"/>
     <keyword type="property" name="The “aperture-size” property" link="gst-plugins-bad-plugins-cvsobel.html#GstCvSobel--aperture-size"/>
     <keyword type="property" name="The “x-order” property" link="gst-plugins-bad-plugins-cvsobel.html#GstCvSobel--x-order"/>
     <keyword type="property" name="The “y-order” property" link="gst-plugins-bad-plugins-cvsobel.html#GstCvSobel--y-order"/>
+    <keyword type="property" name="The “mask” property" link="gst-plugins-bad-plugins-cvsobel.html#GstCvSobel--mask"/>
     <keyword type="struct" name="struct GstDataURISrc" link="gst-plugins-bad-plugins-dataurisrc.html#GstDataURISrc-struct"/>
     <keyword type="property" name="The “uri” property" link="gst-plugins-bad-plugins-dataurisrc.html#GstDataURISrc--uri"/>
     <keyword type="struct" name="struct GstDiffuse" link="gst-plugins-bad-plugins-diffuse.html#GstDiffuse-struct"/>
@@ -304,8 +304,6 @@
     <keyword type="property" name="The “angle” property" link="gst-plugins-bad-plugins-kaleidoscope.html#GstKaleidoscope--angle"/>
     <keyword type="property" name="The “angle2” property" link="gst-plugins-bad-plugins-kaleidoscope.html#GstKaleidoscope--angle2"/>
     <keyword type="property" name="The “sides” property" link="gst-plugins-bad-plugins-kaleidoscope.html#GstKaleidoscope--sides"/>
-    <keyword type="struct" name="struct GstLiveAdder" link="gst-plugins-bad-plugins-liveadder.html#GstLiveAdder-struct"/>
-    <keyword type="property" name="The “latency” property" link="gst-plugins-bad-plugins-liveadder.html#GstLiveAdder--latency"/>
     <keyword type="struct" name="struct GstMarble" link="gst-plugins-bad-plugins-marble.html#GstMarble-struct"/>
     <keyword type="property" name="The “amount” property" link="gst-plugins-bad-plugins-marble.html#GstMarble--amount"/>
     <keyword type="property" name="The “turbulence” property" link="gst-plugins-bad-plugins-marble.html#GstMarble--turbulence"/>
@@ -379,7 +377,6 @@
     <keyword type="property" name="The “sector-size” property" link="gst-plugins-bad-plugins-mplex.html#GstMplex--sector-size"/>
     <keyword type="property" name="The “system-headers” property" link="gst-plugins-bad-plugins-mplex.html#GstMplex--system-headers"/>
     <keyword type="property" name="The “vbr” property" link="gst-plugins-bad-plugins-mplex.html#GstMplex--vbr"/>
-    <keyword type="struct" name="struct GstMpg123AudioDec" link="gst-plugins-bad-plugins-mpg123audiodec.html#GstMpg123AudioDec-struct"/>
     <keyword type="struct" name="struct GstNeonhttpSrc" link="gst-plugins-bad-plugins-neonhttpsrc.html#GstNeonhttpSrc"/>
     <keyword type="property" name="The “location” property" link="gst-plugins-bad-plugins-neonhttpsrc.html#GstNeonhttpSrc--location"/>
     <keyword type="property" name="The “proxy” property" link="gst-plugins-bad-plugins-neonhttpsrc.html#GstNeonhttpSrc--proxy"/>
@@ -400,26 +397,6 @@
     <keyword type="struct" name="struct GstOpenalSrc" link="gst-plugins-bad-plugins-openalsrc.html#GstOpenalSrc-struct"/>
     <keyword type="property" name="The “device” property" link="gst-plugins-bad-plugins-openalsrc.html#GstOpenalSrc--device"/>
     <keyword type="property" name="The “device-name” property" link="gst-plugins-bad-plugins-openalsrc.html#GstOpenalSrc--device-name"/>
-    <keyword type="struct" name="struct GstOpusDec" link="gst-plugins-bad-plugins-opusdec.html#GstOpusDec-struct"/>
-    <keyword type="property" name="The “apply-gain” property" link="gst-plugins-bad-plugins-opusdec.html#GstOpusDec--apply-gain"/>
-    <keyword type="property" name="The “use-inband-fec” property" link="gst-plugins-bad-plugins-opusdec.html#GstOpusDec--use-inband-fec"/>
-    <keyword type="struct" name="struct GstOpusEnc" link="gst-plugins-bad-plugins-opusenc.html#GstOpusEnc-struct"/>
-    <keyword type="property" name="The “audio” property" link="gst-plugins-bad-plugins-opusenc.html#GstOpusEnc--audio"/>
-    <keyword type="property" name="The “bandwidth” property" link="gst-plugins-bad-plugins-opusenc.html#GstOpusEnc--bandwidth"/>
-    <keyword type="property" name="The “bitrate” property" link="gst-plugins-bad-plugins-opusenc.html#GstOpusEnc--bitrate"/>
-    <keyword type="property" name="The “cbr” property" link="gst-plugins-bad-plugins-opusenc.html#GstOpusEnc--cbr"/>
-    <keyword type="property" name="The “complexity” property" link="gst-plugins-bad-plugins-opusenc.html#GstOpusEnc--complexity"/>
-    <keyword type="property" name="The “constrained-vbr” property" link="gst-plugins-bad-plugins-opusenc.html#GstOpusEnc--constrained-vbr"/>
-    <keyword type="property" name="The “dtx” property" link="gst-plugins-bad-plugins-opusenc.html#GstOpusEnc--dtx"/>
-    <keyword type="property" name="The “frame-size” property" link="gst-plugins-bad-plugins-opusenc.html#GstOpusEnc--frame-size"/>
-    <keyword type="property" name="The “inband-fec” property" link="gst-plugins-bad-plugins-opusenc.html#GstOpusEnc--inband-fec"/>
-    <keyword type="property" name="The “max-payload-size” property" link="gst-plugins-bad-plugins-opusenc.html#GstOpusEnc--max-payload-size"/>
-    <keyword type="property" name="The “packet-loss-percentage” property" link="gst-plugins-bad-plugins-opusenc.html#GstOpusEnc--packet-loss-percentage"/>
-    <keyword type="property" name="The “audio-type” property" link="gst-plugins-bad-plugins-opusenc.html#GstOpusEnc--audio-type"/>
-    <keyword type="property" name="The “bitrate-type” property" link="gst-plugins-bad-plugins-opusenc.html#GstOpusEnc--bitrate-type"/>
-    <keyword type="struct" name="struct GstOpusParse" link="gst-plugins-bad-plugins-opusparse.html#GstOpusParse-struct"/>
-    <keyword type="struct" name="struct GstRtpOPUSPay" link="gst-plugins-bad-plugins-rtpopuspay.html#GstRtpOPUSPay-struct"/>
-    <keyword type="struct" name="struct GstRTPOpusDepay" link="gst-plugins-bad-plugins-rtpopusdepay.html#GstRTPOpusDepay-struct"/>
     <keyword type="struct" name="struct GstPcapParse" link="gst-plugins-bad-plugins-pcapparse.html#GstPcapParse-struct"/>
     <keyword type="property" name="The “dst-ip” property" link="gst-plugins-bad-plugins-pcapparse.html#GstPcapParse--dst-ip"/>
     <keyword type="property" name="The “dst-port” property" link="gst-plugins-bad-plugins-pcapparse.html#GstPcapParse--dst-port"/>
@@ -482,11 +459,11 @@
     <keyword type="property" name="The “zoom” property" link="gst-plugins-bad-plugins-square.html#GstSquare--zoom"/>
     <keyword type="struct" name="struct GstStretch" link="gst-plugins-bad-plugins-stretch.html#GstStretch-struct"/>
     <keyword type="property" name="The “intensity” property" link="gst-plugins-bad-plugins-stretch.html#GstStretch--intensity"/>
-    <keyword type="struct" name="struct GstTemplateMatch" link="gst-plugins-bad-plugins-templatematch.html#GstTemplateMatch-struct"/>
+    <keyword type="struct" name="struct GstTemplateMatch" link="gst-plugins-bad-plugins-templatematch.html#GstTemplateMatch"/>
     <keyword type="property" name="The “display” property" link="gst-plugins-bad-plugins-templatematch.html#GstTemplateMatch--display"/>
     <keyword type="property" name="The “method” property" link="gst-plugins-bad-plugins-templatematch.html#GstTemplateMatch--method"/>
     <keyword type="property" name="The “template” property" link="gst-plugins-bad-plugins-templatematch.html#GstTemplateMatch--template"/>
-    <keyword type="struct" name="struct GstOpencvTextOverlay" link="gst-plugins-bad-plugins-opencvtextoverlay.html#GstOpencvTextOverlay-struct"/>
+    <keyword type="struct" name="struct GstOpencvTextOverlay" link="gst-plugins-bad-plugins-opencvtextoverlay.html#GstOpencvTextOverlay"/>
     <keyword type="property" name="The “colorB” property" link="gst-plugins-bad-plugins-opencvtextoverlay.html#GstOpencvTextOverlay--colorB"/>
     <keyword type="property" name="The “colorG” property" link="gst-plugins-bad-plugins-opencvtextoverlay.html#GstOpencvTextOverlay--colorG"/>
     <keyword type="property" name="The “colorR” property" link="gst-plugins-bad-plugins-opencvtextoverlay.html#GstOpencvTextOverlay--colorR"/>
@@ -514,6 +491,9 @@
     <keyword type="property" name="The “width” property" link="gst-plugins-bad-plugins-videoparse.html#GstVideoParse--width"/>
     <keyword type="property" name="The “interlaced” property" link="gst-plugins-bad-plugins-videoparse.html#GstVideoParse--interlaced"/>
     <keyword type="property" name="The “top-field-first” property" link="gst-plugins-bad-plugins-videoparse.html#GstVideoParse--top-field-first"/>
+    <keyword type="property" name="The “framesize” property" link="gst-plugins-bad-plugins-videoparse.html#GstVideoParse--framesize"/>
+    <keyword type="property" name="The “offsets” property" link="gst-plugins-bad-plugins-videoparse.html#GstVideoParse--offsets"/>
+    <keyword type="property" name="The “strides” property" link="gst-plugins-bad-plugins-videoparse.html#GstVideoParse--strides"/>
     <keyword type="struct" name="struct GstWaterRipple" link="gst-plugins-bad-plugins-waterripple.html#GstWaterRipple-struct"/>
     <keyword type="property" name="The “amplitude” property" link="gst-plugins-bad-plugins-waterripple.html#GstWaterRipple--amplitude"/>
     <keyword type="property" name="The “phase” property" link="gst-plugins-bad-plugins-waterripple.html#GstWaterRipple--phase"/>
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-accurip.html b/docs/plugins/html/gst-plugins-bad-plugins-accurip.html
index 053fbaa..d237171 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-accurip.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-accurip.html
@@ -3,7 +3,7 @@
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>accurip: GStreamer Bad Plugins 1.0 Plugins Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
 <link rel="home" href="index.html" title="GStreamer Bad Plugins 1.0 Plugins Reference Manual">
 <link rel="up" href="ch01.html" title="gst-plugins-bad Elements">
 <link rel="prev" href="ch01.html" title="gst-plugins-bad Elements">
@@ -35,7 +35,7 @@
 </tr></table></div>
 <div class="refsect1">
 <a name="gst-plugins-bad-plugins-accurip.properties"></a><h2>Properties</h2>
-<div class="informaltable"><table border="0">
+<div class="informaltable"><table class="informaltable" border="0">
 <colgroup>
 <col width="150px" class="properties_type">
 <col width="300px" class="properties_name">
@@ -57,7 +57,7 @@
 </div>
 <a name="GstAccurip"></a><div class="refsect1">
 <a name="gst-plugins-bad-plugins-accurip.other"></a><h2>Types and Values</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="name">
 <col class="description">
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-aiffmux.html b/docs/plugins/html/gst-plugins-bad-plugins-aiffmux.html
index b91586e..7f44a85 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-aiffmux.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-aiffmux.html
@@ -3,7 +3,7 @@
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>aiffmux: GStreamer Bad Plugins 1.0 Plugins Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
 <link rel="home" href="index.html" title="GStreamer Bad Plugins 1.0 Plugins Reference Manual">
 <link rel="up" href="ch01.html" title="gst-plugins-bad Elements">
 <link rel="prev" href="gst-plugins-bad-plugins-aiffparse.html" title="aiffparse">
@@ -34,7 +34,7 @@
 </tr></table></div>
 <a name="GstAiffMux"></a><div class="refsect1">
 <a name="gst-plugins-bad-plugins-aiffmux.other"></a><h2>Types and Values</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="name">
 <col class="description">
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-aiffparse.html b/docs/plugins/html/gst-plugins-bad-plugins-aiffparse.html
index 258193b..75f74f1 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-aiffparse.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-aiffparse.html
@@ -3,7 +3,7 @@
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>aiffparse: GStreamer Bad Plugins 1.0 Plugins Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
 <link rel="home" href="index.html" title="GStreamer Bad Plugins 1.0 Plugins Reference Manual">
 <link rel="up" href="ch01.html" title="gst-plugins-bad Elements">
 <link rel="prev" href="gst-plugins-bad-plugins-accurip.html" title="accurip">
@@ -34,7 +34,7 @@
 </tr></table></div>
 <a name="GstAiffParse"></a><div class="refsect1">
 <a name="gst-plugins-bad-plugins-aiffparse.other"></a><h2>Types and Values</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="name">
 <col class="description">
@@ -68,7 +68,7 @@
 <p>
 </p>
 <pre class="programlisting">
-gst-launch filesrc location=sine.aiff ! aiffparse ! audioconvert ! alsasink
+gst-launch-1.0 filesrc location=sine.aiff ! aiffparse ! audioconvert ! alsasink
 </pre>
 <p>
 Read a aiff file and output to the soundcard using the ALSA element. The
@@ -77,7 +77,7 @@
 <p>
 </p>
 <pre class="programlisting">
-gst-launch souphhtpsrc location=http://www.example.org/sine.aiff ! queue ! aiffparse ! audioconvert ! alsasink
+gst-launch-1.0 souphttpsrc location=http://www.example.org/sine.aiff ! queue ! aiffparse ! audioconvert ! alsasink
 </pre>
 <p>
 Stream data from a network url.
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-assrender.html b/docs/plugins/html/gst-plugins-bad-plugins-assrender.html
index d54b130..a117743 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-assrender.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-assrender.html
@@ -3,11 +3,11 @@
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>assrender: GStreamer Bad Plugins 1.0 Plugins Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
 <link rel="home" href="index.html" title="GStreamer Bad Plugins 1.0 Plugins Reference Manual">
 <link rel="up" href="ch01.html" title="gst-plugins-bad Elements">
 <link rel="prev" href="gst-plugins-bad-plugins-aiffmux.html" title="aiffmux">
-<link rel="next" href="gst-plugins-bad-plugins-audiomixer.html" title="audiomixer">
+<link rel="next" href="gst-plugins-bad-plugins-audiointerleave.html" title="audiointerleave">
 <meta name="generator" content="GTK-Doc V1.24 (XML mode)">
 <link rel="stylesheet" href="style.css" type="text/css">
 </head>
@@ -22,7 +22,7 @@
 <td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
 <td><a accesskey="u" href="ch01.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
 <td><a accesskey="p" href="gst-plugins-bad-plugins-aiffmux.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
-<td><a accesskey="n" href="gst-plugins-bad-plugins-audiomixer.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
+<td><a accesskey="n" href="gst-plugins-bad-plugins-audiointerleave.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
 </tr></table>
 <div class="refentry">
 <a name="gst-plugins-bad-plugins-assrender"></a><div class="titlepage"></div>
@@ -35,7 +35,7 @@
 </tr></table></div>
 <div class="refsect1">
 <a name="gst-plugins-bad-plugins-assrender.properties"></a><h2>Properties</h2>
-<div class="informaltable"><table border="0">
+<div class="informaltable"><table class="informaltable" border="0">
 <colgroup>
 <col width="150px" class="properties_type">
 <col width="300px" class="properties_name">
@@ -62,7 +62,7 @@
 </div>
 <a name="GstAssRender"></a><div class="refsect1">
 <a name="gst-plugins-bad-plugins-assrender.other"></a><h2>Types and Values</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="name">
 <col class="description">
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-audiointerleave.html b/docs/plugins/html/gst-plugins-bad-plugins-audiointerleave.html
new file mode 100644
index 0000000..e58e60f
--- /dev/null
+++ b/docs/plugins/html/gst-plugins-bad-plugins-audiointerleave.html
@@ -0,0 +1,206 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>audiointerleave: GStreamer Bad Plugins 1.0 Plugins Reference Manual</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
+<link rel="home" href="index.html" title="GStreamer Bad Plugins 1.0 Plugins Reference Manual">
+<link rel="up" href="ch01.html" title="gst-plugins-bad Elements">
+<link rel="prev" href="gst-plugins-bad-plugins-assrender.html" title="assrender">
+<link rel="next" href="gst-plugins-bad-plugins-audiomixer.html" title="audiomixer">
+<meta name="generator" content="GTK-Doc V1.24 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="5"><tr valign="middle">
+<td width="100%" align="left" class="shortcuts">
+<a href="#" class="shortcut">Top</a><span id="nav_description">  <span class="dim">|</span> 
+                  <a href="#gst-plugins-bad-plugins-audiointerleave.description" class="shortcut">Description</a></span><span id="nav_hierarchy">  <span class="dim">|</span> 
+                  <a href="#gst-plugins-bad-plugins-audiointerleave.object-hierarchy" class="shortcut">Object Hierarchy</a></span><span id="nav_interfaces">  <span class="dim">|</span> 
+                  <a href="#gst-plugins-bad-plugins-audiointerleave.implemented-interfaces" class="shortcut">Implemented Interfaces</a></span><span id="nav_properties">  <span class="dim">|</span> 
+                  <a href="#gst-plugins-bad-plugins-audiointerleave.properties" class="shortcut">Properties</a></span>
+</td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
+<td><a accesskey="u" href="ch01.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
+<td><a accesskey="p" href="gst-plugins-bad-plugins-assrender.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
+<td><a accesskey="n" href="gst-plugins-bad-plugins-audiomixer.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
+</tr></table>
+<div class="refentry">
+<a name="gst-plugins-bad-plugins-audiointerleave"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="gst-plugins-bad-plugins-audiointerleave.top_of_page"></a>audiointerleave</span></h2>
+<p>audiointerleave</p>
+</td>
+<td class="gallery_image" valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsect1">
+<a name="gst-plugins-bad-plugins-audiointerleave.properties"></a><h2>Properties</h2>
+<div class="informaltable"><table class="informaltable" border="0">
+<colgroup>
+<col width="150px" class="properties_type">
+<col width="300px" class="properties_name">
+<col width="200px" class="properties_flags">
+</colgroup>
+<tbody>
+<tr>
+<td class="property_type">
+<a href="https://developer.gnome.org/gobject/unstable/gobject-Value-arrays.html#GValueArray"><span class="type">GValueArray</span></a> *</td>
+<td class="property_name"><a class="link" href="gst-plugins-bad-plugins-audiointerleave.html#GstAudioInterleave--channel-positions" title="The “channel-positions” property">channel-positions</a></td>
+<td class="property_flags">Read / Write</td>
+</tr>
+<tr>
+<td class="property_type"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a></td>
+<td class="property_name"><a class="link" href="gst-plugins-bad-plugins-audiointerleave.html#GstAudioInterleave--channel-positions-from-input" title="The “channel-positions-from-input” property">channel-positions-from-input</a></td>
+<td class="property_flags">Read / Write</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<a name="GstAudioInterleave"></a><div class="refsect1">
+<a name="gst-plugins-bad-plugins-audiointerleave.other"></a><h2>Types and Values</h2>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="name">
+<col class="description">
+</colgroup>
+<tbody><tr>
+<td class="datatype_keyword">struct</td>
+<td class="function_name"><a class="link" href="gst-plugins-bad-plugins-audiointerleave.html#GstAudioInterleave-struct" title="struct GstAudioInterleave">GstAudioInterleave</a></td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-plugins-audiointerleave.object-hierarchy"></a><h2>Object Hierarchy</h2>
+<pre class="screen">    <a href="https://developer.gnome.org/gobject/unstable/gobject-The-Base-Object-Type.html#GObject">GObject</a>
+    <span class="lineart">╰──</span> <a href="https://developer.gnome.org/gobject/unstable/gobject-The-Base-Object-Type.html#GInitiallyUnowned">GInitiallyUnowned</a>
+        <span class="lineart">╰──</span> <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstObject.html">GstObject</a>
+            <span class="lineart">╰──</span> <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html">GstElement</a>
+                <span class="lineart">╰──</span> <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-bad-libs/html/gst-plugins-bad-libs-GstAggregator.html#GstAggregator">GstAggregator</a>
+                    <span class="lineart">╰──</span> GstAudioAggregator
+                        <span class="lineart">╰──</span> GstAudioInterleave
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-plugins-audiointerleave.implemented-interfaces"></a><h2>Implemented Interfaces</h2>
+<p>
+GstAudioInterleave implements
+ <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstChildProxy.html">GstChildProxy</a>.</p>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-plugins-audiointerleave.description"></a><h2>Description</h2>
+<div class="refsynopsisdiv">
+<h2>Synopsis</h2>
+<div class="refsect2">
+<a name="id-1.2.6.8.2.1"></a><h3>Element Information</h3>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term">plugin</span></p></td>
+<td>
+            <a class="link" href="gst-plugins-bad-plugins-plugin-audiomixer.html#plugin-audiomixer">audiomixer</a>
+          </td>
+</tr>
+<tr>
+<td><p><span class="term">author</span></p></td>
+<td>Olivier Crete &lt;olivier.crete@collabora.com&gt;</td>
+</tr>
+<tr>
+<td><p><span class="term">class</span></p></td>
+<td>Generic/Audio</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="id-1.2.6.8.2.2"></a><h3>Element Pads</h3>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term">name</span></p></td>
+<td>sink_%u</td>
+</tr>
+<tr>
+<td><p><span class="term">direction</span></p></td>
+<td>sink</td>
+</tr>
+<tr>
+<td><p><span class="term">presence</span></p></td>
+<td>request</td>
+</tr>
+<tr>
+<td><p><span class="term">details</span></p></td>
+<td>audio/x-raw, rate=(int)[ 1, 2147483647 ], channels=(int)1, format=(string){ S8, U8, S16LE, S16BE, U16LE, U16BE, S24_32LE, S24_32BE, U24_32LE, U24_32BE, S32LE, S32BE, U32LE, U32BE, S24LE, S24BE, U24LE, U24BE, S20LE, S20BE, U20LE, U20BE, S18LE, S18BE, U18LE, U18BE, F32LE, F32BE, F64LE, F64BE }, layout=(string){ non-interleaved, interleaved }</td>
+</tr>
+</tbody>
+</table></div>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term">name</span></p></td>
+<td>src</td>
+</tr>
+<tr>
+<td><p><span class="term">direction</span></p></td>
+<td>source</td>
+</tr>
+<tr>
+<td><p><span class="term">presence</span></p></td>
+<td>always</td>
+</tr>
+<tr>
+<td><p><span class="term">details</span></p></td>
+<td>audio/x-raw, rate=(int)[ 1, 2147483647 ], channels=(int)[ 1, 2147483647 ], format=(string){ S8, U8, S16LE, S16BE, U16LE, U16BE, S24_32LE, S24_32BE, U24_32LE, U24_32BE, S32LE, S32BE, U32LE, U32BE, S24LE, S24BE, U24LE, U24BE, S20LE, S20BE, U20LE, U20BE, S18LE, S18BE, U18LE, U18BE, F32LE, F32BE, F64LE, F64BE }, layout=(string)interleaved</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-plugins-audiointerleave.functions_details"></a><h2>Functions</h2>
+<p></p>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-plugins-audiointerleave.other_details"></a><h2>Types and Values</h2>
+<div class="refsect2">
+<a name="GstAudioInterleave-struct"></a><h3>struct GstAudioInterleave</h3>
+<pre class="programlisting">struct GstAudioInterleave;</pre>
+<p>The GstAudioInterleave object structure.</p>
+</div>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-plugins-audiointerleave.property-details"></a><h2>Property Details</h2>
+<div class="refsect2">
+<a name="GstAudioInterleave--channel-positions"></a><h3>The <code class="literal">“channel-positions”</code> property</h3>
+<pre class="programlisting">  “channel-positions”        <a href="https://developer.gnome.org/gobject/unstable/gobject-Value-arrays.html#GValueArray"><span class="type">GValueArray</span></a> *</pre>
+<p>Channel positions used on the output.</p>
+<p>Flags: Read / Write</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstAudioInterleave--channel-positions-from-input"></a><h3>The <code class="literal">“channel-positions-from-input”</code> property</h3>
+<pre class="programlisting">  “channel-positions-from-input” <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a></pre>
+<p>Take channel positions from the input.</p>
+<p>Flags: Read / Write</p>
+<p>Default value: TRUE</p>
+</div>
+</div>
+</div>
+<div class="footer">
+<hr>Generated by GTK-Doc V1.24</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-audiomixer.html b/docs/plugins/html/gst-plugins-bad-plugins-audiomixer.html
index 72f580f..975b54c 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-audiomixer.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-audiomixer.html
@@ -3,10 +3,10 @@
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>audiomixer: GStreamer Bad Plugins 1.0 Plugins Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
 <link rel="home" href="index.html" title="GStreamer Bad Plugins 1.0 Plugins Reference Manual">
 <link rel="up" href="ch01.html" title="gst-plugins-bad Elements">
-<link rel="prev" href="gst-plugins-bad-plugins-assrender.html" title="assrender">
+<link rel="prev" href="gst-plugins-bad-plugins-audiointerleave.html" title="audiointerleave">
 <link rel="next" href="gst-plugins-bad-plugins-autoconvert.html" title="autoconvert">
 <meta name="generator" content="GTK-Doc V1.24 (XML mode)">
 <link rel="stylesheet" href="style.css" type="text/css">
@@ -22,7 +22,7 @@
 </td>
 <td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
 <td><a accesskey="u" href="ch01.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
-<td><a accesskey="p" href="gst-plugins-bad-plugins-assrender.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
+<td><a accesskey="p" href="gst-plugins-bad-plugins-audiointerleave.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
 <td><a accesskey="n" href="gst-plugins-bad-plugins-autoconvert.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
 </tr></table>
 <div class="refentry">
@@ -36,7 +36,7 @@
 </tr></table></div>
 <div class="refsect1">
 <a name="gst-plugins-bad-plugins-audiomixer.properties"></a><h2>Properties</h2>
-<div class="informaltable"><table border="0">
+<div class="informaltable"><table class="informaltable" border="0">
 <colgroup>
 <col width="150px" class="properties_type">
 <col width="300px" class="properties_name">
@@ -74,7 +74,7 @@
 </div>
 <a name="GstAudioMixer"></a><div class="refsect1">
 <a name="gst-plugins-bad-plugins-audiomixer.other"></a><h2>Types and Values</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="name">
 <col class="description">
@@ -94,6 +94,7 @@
                 <span class="lineart">╰──</span> <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-bad-libs/html/gst-plugins-bad-libs-GstAggregator.html#GstAggregator">GstAggregator</a>
                     <span class="lineart">╰──</span> GstAudioAggregator
                         <span class="lineart">╰──</span> GstAudioMixer
+                            <span class="lineart">╰──</span> GstLiveAdder
 </pre>
 </div>
 <div class="refsect1">
@@ -118,13 +119,13 @@
 </li>
 </ul></div>
 <div class="refsect2">
-<a name="id-1.2.6.8.6"></a><h3>Example launch line</h3>
+<a name="id-1.2.7.8.6"></a><h3>Example launch line</h3>
 <div class="informalexample">
   <table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
     <tbody>
       <tr>
         <td class="listing_lines" align="right"><pre>1</pre></td>
-        <td class="listing_code"><pre class="programlisting">gst<span class="gtkdoc opt">-</span>launch audiotestsrc freq<span class="gtkdoc opt">=</span><span class="number">100</span> <span class="gtkdoc opt">!</span> audiomixer name<span class="gtkdoc opt">=</span>mix <span class="gtkdoc opt">!</span> audioconvert <span class="gtkdoc opt">!</span> alsasink audiotestsrc freq<span class="gtkdoc opt">=</span><span class="number">500</span> <span class="gtkdoc opt">!</span> mix<span class="gtkdoc opt">.</span></pre></td>
+        <td class="listing_code"><pre class="programlisting">gst<span class="gtkdoc opt">-</span>launch<span class="gtkdoc opt">-</span><span class="number">1.0</span> audiotestsrc freq<span class="gtkdoc opt">=</span><span class="number">100</span> <span class="gtkdoc opt">!</span> audiomixer name<span class="gtkdoc opt">=</span>mix <span class="gtkdoc opt">!</span> audioconvert <span class="gtkdoc opt">!</span> alsasink audiotestsrc freq<span class="gtkdoc opt">=</span><span class="number">500</span> <span class="gtkdoc opt">!</span> mix<span class="gtkdoc opt">.</span></pre></td>
       </tr>
     </tbody>
   </table>
@@ -134,7 +135,7 @@
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="id-1.2.6.8.7.1"></a><h3>Element Information</h3>
+<a name="id-1.2.7.8.7.1"></a><h3>Element Information</h3>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
@@ -160,7 +161,7 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="id-1.2.6.8.7.2"></a><h3>Element Pads</h3>
+<a name="id-1.2.7.8.7.2"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-autoconvert.html b/docs/plugins/html/gst-plugins-bad-plugins-autoconvert.html
index 2c7bfd6..1bff64d 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-autoconvert.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-autoconvert.html
@@ -3,7 +3,7 @@
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>autoconvert: GStreamer Bad Plugins 1.0 Plugins Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
 <link rel="home" href="index.html" title="GStreamer Bad Plugins 1.0 Plugins Reference Manual">
 <link rel="up" href="ch01.html" title="gst-plugins-bad Elements">
 <link rel="prev" href="gst-plugins-bad-plugins-audiomixer.html" title="audiomixer">
@@ -36,7 +36,7 @@
 </tr></table></div>
 <div class="refsect1">
 <a name="gst-plugins-bad-plugins-autoconvert.properties"></a><h2>Properties</h2>
-<div class="informaltable"><table border="0">
+<div class="informaltable"><table class="informaltable" border="0">
 <colgroup>
 <col width="150px" class="properties_type">
 <col width="300px" class="properties_name">
@@ -58,7 +58,7 @@
 </div>
 <a name="GstAutoConvert"></a><div class="refsect1">
 <a name="gst-plugins-bad-plugins-autoconvert.other"></a><h2>Types and Values</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="name">
 <col class="description">
@@ -98,7 +98,7 @@
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="id-1.2.7.8.4.1"></a><h3>Element Information</h3>
+<a name="id-1.2.8.8.4.1"></a><h3>Element Information</h3>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
@@ -124,7 +124,7 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="id-1.2.7.8.4.2"></a><h3>Element Pads</h3>
+<a name="id-1.2.8.8.4.2"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-bs2b.html b/docs/plugins/html/gst-plugins-bad-plugins-bs2b.html
index 9643170..38820db 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-bs2b.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-bs2b.html
@@ -3,7 +3,7 @@
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>bs2b: GStreamer Bad Plugins 1.0 Plugins Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
 <link rel="home" href="index.html" title="GStreamer Bad Plugins 1.0 Plugins Reference Manual">
 <link rel="up" href="ch01.html" title="gst-plugins-bad Elements">
 <link rel="prev" href="gst-plugins-bad-plugins-autoconvert.html" title="autoconvert">
@@ -33,7 +33,7 @@
 </tr></table></div>
 <div class="refsect1">
 <a name="gst-plugins-bad-plugins-bs2b.other"></a><h2>Types and Values</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="name">
 <col class="description">
@@ -49,7 +49,7 @@
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="id-1.2.8.4.2.1"></a><h3>Element Information</h3>
+<a name="id-1.2.9.4.2.1"></a><h3>Element Information</h3>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
@@ -75,7 +75,7 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="id-1.2.8.4.2.2"></a><h3>Element Pads</h3>
+<a name="id-1.2.9.4.2.2"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-bulge.html b/docs/plugins/html/gst-plugins-bad-plugins-bulge.html
index 0644338..070b285 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-bulge.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-bulge.html
@@ -3,7 +3,7 @@
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>bulge: GStreamer Bad Plugins 1.0 Plugins Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
 <link rel="home" href="index.html" title="GStreamer Bad Plugins 1.0 Plugins Reference Manual">
 <link rel="up" href="ch01.html" title="gst-plugins-bad Elements">
 <link rel="prev" href="gst-plugins-bad-plugins-bs2b.html" title="bs2b">
@@ -35,7 +35,7 @@
 </tr></table></div>
 <div class="refsect1">
 <a name="gst-plugins-bad-plugins-bulge.properties"></a><h2>Properties</h2>
-<div class="informaltable"><table border="0">
+<div class="informaltable"><table class="informaltable" border="0">
 <colgroup>
 <col width="150px" class="properties_type">
 <col width="300px" class="properties_name">
@@ -50,7 +50,7 @@
 </div>
 <a name="GstBulge"></a><div class="refsect1">
 <a name="gst-plugins-bad-plugins-bulge.other"></a><h2>Types and Values</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="name">
 <col class="description">
@@ -76,10 +76,26 @@
 </div>
 <div class="refsect1">
 <a name="gst-plugins-bad-plugins-bulge.description"></a><h2>Description</h2>
+<p>Bugle is a geometric image transform element. It adds a protuberance in the
+center point.</p>
+<div class="refsect2">
+<a name="id-1.2.10.7.3"></a><h3>Example launch line</h3>
+<div class="informalexample">
+  <table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
+    <tbody>
+      <tr>
+        <td class="listing_lines" align="right"><pre>1</pre></td>
+        <td class="listing_code"><pre class="programlisting">gst<span class="gtkdoc opt">-</span>launch<span class="gtkdoc opt">-</span><span class="number">1.0</span> <span class="gtkdoc opt">-</span>v videotestsrc <span class="gtkdoc opt">!</span> bulge <span class="gtkdoc opt">!</span> videoconvert <span class="gtkdoc opt">!</span> autovideosink</pre></td>
+      </tr>
+    </tbody>
+  </table>
+</div>
+
+</div>
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="id-1.2.9.7.2.1"></a><h3>Element Information</h3>
+<a name="id-1.2.10.7.4.1"></a><h3>Element Information</h3>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
@@ -105,7 +121,7 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="id-1.2.9.7.2.2"></a><h3>Element Pads</h3>
+<a name="id-1.2.10.7.4.2"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
@@ -179,6 +195,10 @@
 <p>Default value: 3</p>
 </div>
 </div>
+<div class="refsect1">
+<a name="gst-plugins-bad-plugins-bulge.see-also"></a><h2>See Also</h2>
+<p>geometrictransform</p>
+</div>
 </div>
 <div class="footer">
 <hr>Generated by GTK-Doc V1.24</div>
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-burn.html b/docs/plugins/html/gst-plugins-bad-plugins-burn.html
index f3f5d62..cdf40b8 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-burn.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-burn.html
@@ -3,7 +3,7 @@
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>burn: GStreamer Bad Plugins 1.0 Plugins Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
 <link rel="home" href="index.html" title="GStreamer Bad Plugins 1.0 Plugins Reference Manual">
 <link rel="up" href="ch01.html" title="gst-plugins-bad Elements">
 <link rel="prev" href="gst-plugins-bad-plugins-bulge.html" title="bulge">
@@ -35,7 +35,7 @@
 </tr></table></div>
 <div class="refsect1">
 <a name="gst-plugins-bad-plugins-burn.properties"></a><h2>Properties</h2>
-<div class="informaltable"><table border="0">
+<div class="informaltable"><table class="informaltable" border="0">
 <colgroup>
 <col width="150px" class="properties_type">
 <col width="300px" class="properties_name">
@@ -57,7 +57,7 @@
 </div>
 <a name="GstBurn"></a><div class="refsect1">
 <a name="gst-plugins-bad-plugins-burn.other"></a><h2>Types and Values</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="name">
 <col class="description">
@@ -83,13 +83,13 @@
 <a name="gst-plugins-bad-plugins-burn.description"></a><h2>Description</h2>
 <p>Burn adjusts the colors of a video stream in realtime.</p>
 <div class="refsect2">
-<a name="id-1.2.10.7.3"></a><h3>Example launch line</h3>
+<a name="id-1.2.11.7.3"></a><h3>Example launch line</h3>
 <div class="informalexample">
   <table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
     <tbody>
       <tr>
         <td class="listing_lines" align="right"><pre>1</pre></td>
-        <td class="listing_code"><pre class="programlisting">gst<span class="gtkdoc opt">-</span>launch <span class="gtkdoc opt">-</span>v videotestsrc <span class="gtkdoc opt">!</span> burn <span class="gtkdoc opt">!</span> videoconvert <span class="gtkdoc opt">!</span> autovideosink</pre></td>
+        <td class="listing_code"><pre class="programlisting">gst<span class="gtkdoc opt">-</span>launch<span class="gtkdoc opt">-</span><span class="number">1.0</span> <span class="gtkdoc opt">-</span>v videotestsrc <span class="gtkdoc opt">!</span> burn <span class="gtkdoc opt">!</span> videoconvert <span class="gtkdoc opt">!</span> autovideosink</pre></td>
       </tr>
     </tbody>
   </table>
@@ -99,7 +99,7 @@
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="id-1.2.10.7.4.1"></a><h3>Element Information</h3>
+<a name="id-1.2.11.7.4.1"></a><h3>Element Information</h3>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
@@ -125,7 +125,7 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="id-1.2.10.7.4.2"></a><h3>Element Pads</h3>
+<a name="id-1.2.11.7.4.2"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-camerabin.html b/docs/plugins/html/gst-plugins-bad-plugins-camerabin.html
index 577dbf3..cd1485b 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-camerabin.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-camerabin.html
@@ -3,7 +3,7 @@
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>camerabin: GStreamer Bad Plugins 1.0 Plugins Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
 <link rel="home" href="index.html" title="GStreamer Bad Plugins 1.0 Plugins Reference Manual">
 <link rel="up" href="ch01.html" title="gst-plugins-bad Elements">
 <link rel="prev" href="gst-plugins-bad-plugins-burn.html" title="burn">
@@ -36,7 +36,7 @@
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="id-1.2.11.3.2.1"></a><h3>Element Information</h3>
+<a name="id-1.2.12.3.2.1"></a><h3>Element Information</h3>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
@@ -62,7 +62,7 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="id-1.2.11.3.2.2"></a><h3>Element Pads</h3>
+<a name="id-1.2.12.3.2.2"></a><h3>Element Pads</h3>
 </div>
 </div>
 </div>
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-chromium.html b/docs/plugins/html/gst-plugins-bad-plugins-chromium.html
index 4012bd5..e2be028 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-chromium.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-chromium.html
@@ -3,7 +3,7 @@
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>chromium: GStreamer Bad Plugins 1.0 Plugins Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
 <link rel="home" href="index.html" title="GStreamer Bad Plugins 1.0 Plugins Reference Manual">
 <link rel="up" href="ch01.html" title="gst-plugins-bad Elements">
 <link rel="prev" href="gst-plugins-bad-plugins-camerabin.html" title="camerabin">
@@ -35,7 +35,7 @@
 </tr></table></div>
 <div class="refsect1">
 <a name="gst-plugins-bad-plugins-chromium.properties"></a><h2>Properties</h2>
-<div class="informaltable"><table border="0">
+<div class="informaltable"><table class="informaltable" border="0">
 <colgroup>
 <col width="150px" class="properties_type">
 <col width="300px" class="properties_name">
@@ -75,13 +75,13 @@
 <a name="gst-plugins-bad-plugins-chromium.description"></a><h2>Description</h2>
 <p>Chromium breaks the colors of a video stream in realtime.</p>
 <div class="refsect2">
-<a name="id-1.2.12.6.3"></a><h3>Example launch line</h3>
+<a name="id-1.2.13.6.3"></a><h3>Example launch line</h3>
 <div class="informalexample">
   <table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
     <tbody>
       <tr>
         <td class="listing_lines" align="right"><pre>1</pre></td>
-        <td class="listing_code"><pre class="programlisting">gst<span class="gtkdoc opt">-</span>launch <span class="gtkdoc opt">-</span>v videotestsrc <span class="gtkdoc opt">!</span> chromium <span class="gtkdoc opt">!</span> videoconvert <span class="gtkdoc opt">!</span> autovideosink</pre></td>
+        <td class="listing_code"><pre class="programlisting">gst<span class="gtkdoc opt">-</span>launch<span class="gtkdoc opt">-</span><span class="number">1.0</span> <span class="gtkdoc opt">-</span>v videotestsrc <span class="gtkdoc opt">!</span> chromium <span class="gtkdoc opt">!</span> videoconvert <span class="gtkdoc opt">!</span> autovideosink</pre></td>
       </tr>
     </tbody>
   </table>
@@ -91,7 +91,7 @@
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="id-1.2.12.6.4.1"></a><h3>Element Information</h3>
+<a name="id-1.2.13.6.4.1"></a><h3>Element Information</h3>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
@@ -117,7 +117,7 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="id-1.2.12.6.4.2"></a><h3>Element Pads</h3>
+<a name="id-1.2.13.6.4.2"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-circle.html b/docs/plugins/html/gst-plugins-bad-plugins-circle.html
index 5eb1249..7e0e986 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-circle.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-circle.html
@@ -3,7 +3,7 @@
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>circle: GStreamer Bad Plugins 1.0 Plugins Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
 <link rel="home" href="index.html" title="GStreamer Bad Plugins 1.0 Plugins Reference Manual">
 <link rel="up" href="ch01.html" title="gst-plugins-bad Elements">
 <link rel="prev" href="gst-plugins-bad-plugins-chromium.html" title="chromium">
@@ -35,7 +35,7 @@
 </tr></table></div>
 <div class="refsect1">
 <a name="gst-plugins-bad-plugins-circle.properties"></a><h2>Properties</h2>
-<div class="informaltable"><table border="0">
+<div class="informaltable"><table class="informaltable" border="0">
 <colgroup>
 <col width="150px" class="properties_type">
 <col width="300px" class="properties_name">
@@ -62,7 +62,7 @@
 </div>
 <a name="GstCircle"></a><div class="refsect1">
 <a name="gst-plugins-bad-plugins-circle.other"></a><h2>Types and Values</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="name">
 <col class="description">
@@ -88,10 +88,26 @@
 </div>
 <div class="refsect1">
 <a name="gst-plugins-bad-plugins-circle.description"></a><h2>Description</h2>
+<p>Circle is a geometric image transform element. It warps the picture into an
+arc shaped form.</p>
+<div class="refsect2">
+<a name="id-1.2.14.7.3"></a><h3>Example launch line</h3>
+<div class="informalexample">
+  <table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
+    <tbody>
+      <tr>
+        <td class="listing_lines" align="right"><pre>1</pre></td>
+        <td class="listing_code"><pre class="programlisting">gst<span class="gtkdoc opt">-</span>launch<span class="gtkdoc opt">-</span><span class="number">1.0</span> <span class="gtkdoc opt">-</span>v videotestsrc <span class="gtkdoc opt">!</span> circle <span class="gtkdoc opt">!</span> videoconvert <span class="gtkdoc opt">!</span> autovideosink</pre></td>
+      </tr>
+    </tbody>
+  </table>
+</div>
+
+</div>
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="id-1.2.13.7.2.1"></a><h3>Element Information</h3>
+<a name="id-1.2.14.7.4.1"></a><h3>Element Information</h3>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
@@ -117,7 +133,7 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="id-1.2.13.7.2.2"></a><h3>Element Pads</h3>
+<a name="id-1.2.14.7.4.2"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
@@ -207,6 +223,10 @@
 <p>Default value: 3.14159</p>
 </div>
 </div>
+<div class="refsect1">
+<a name="gst-plugins-bad-plugins-circle.see-also"></a><h2>See Also</h2>
+<p>geometrictransform</p>
+</div>
 </div>
 <div class="footer">
 <hr>Generated by GTK-Doc V1.24</div>
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-coloreffects.html b/docs/plugins/html/gst-plugins-bad-plugins-coloreffects.html
index 95808c4..e0fef10 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-coloreffects.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-coloreffects.html
@@ -3,7 +3,7 @@
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>coloreffects: GStreamer Bad Plugins 1.0 Plugins Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
 <link rel="home" href="index.html" title="GStreamer Bad Plugins 1.0 Plugins Reference Manual">
 <link rel="up" href="ch01.html" title="gst-plugins-bad Elements">
 <link rel="prev" href="gst-plugins-bad-plugins-circle.html" title="circle">
@@ -35,7 +35,7 @@
 </tr></table></div>
 <div class="refsect1">
 <a name="gst-plugins-bad-plugins-coloreffects.properties"></a><h2>Properties</h2>
-<div class="informaltable"><table border="0">
+<div class="informaltable"><table class="informaltable" border="0">
 <colgroup>
 <col width="150px" class="properties_type">
 <col width="300px" class="properties_name">
@@ -50,7 +50,7 @@
 </div>
 <a name="GstColorEffects"></a><div class="refsect1">
 <a name="gst-plugins-bad-plugins-coloreffects.other"></a><h2>Types and Values</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="name">
 <col class="description">
@@ -76,14 +76,14 @@
 <a name="gst-plugins-bad-plugins-coloreffects.description"></a><h2>Description</h2>
 <p>Map colors of the video input to a lookup table</p>
 <div class="refsect2">
-<a name="id-1.2.14.7.3"></a><h3>Example launch line</h3>
+<a name="id-1.2.15.7.3"></a><h3>Example launch line</h3>
 <div class="informalexample">
   <table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
     <tbody>
       <tr>
         <td class="listing_lines" align="right"><pre>1
 2</pre></td>
-        <td class="listing_code"><pre class="programlisting">gst<span class="gtkdoc opt">-</span>launch <span class="gtkdoc opt">-</span>v videotestsrc <span class="gtkdoc opt">!</span> coloreffects preset<span class="gtkdoc opt">=</span>heat <span class="gtkdoc opt">!</span> videoconvert <span class="gtkdoc opt">!</span>
+        <td class="listing_code"><pre class="programlisting">gst<span class="gtkdoc opt">-</span>launch<span class="gtkdoc opt">-</span><span class="number">1.0</span> <span class="gtkdoc opt">-</span>v videotestsrc <span class="gtkdoc opt">!</span> coloreffects preset<span class="gtkdoc opt">=</span>heat <span class="gtkdoc opt">!</span> videoconvert <span class="gtkdoc opt">!</span>
     autovideosink</pre></td>
       </tr>
     </tbody>
@@ -94,7 +94,7 @@
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="id-1.2.14.7.4.1"></a><h3>Element Information</h3>
+<a name="id-1.2.15.7.4.1"></a><h3>Element Information</h3>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
@@ -120,7 +120,7 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="id-1.2.14.7.4.2"></a><h3>Element Pads</h3>
+<a name="id-1.2.15.7.4.2"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-compositor.html b/docs/plugins/html/gst-plugins-bad-plugins-compositor.html
index 9a982e3..66922f1 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-compositor.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-compositor.html
@@ -3,7 +3,7 @@
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>compositor: GStreamer Bad Plugins 1.0 Plugins Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
 <link rel="home" href="index.html" title="GStreamer Bad Plugins 1.0 Plugins Reference Manual">
 <link rel="up" href="ch01.html" title="gst-plugins-bad Elements">
 <link rel="prev" href="gst-plugins-bad-plugins-coloreffects.html" title="coloreffects">
@@ -35,7 +35,7 @@
 </tr></table></div>
 <div class="refsect1">
 <a name="gst-plugins-bad-plugins-compositor.properties"></a><h2>Properties</h2>
-<div class="informaltable"><table border="0">
+<div class="informaltable"><table class="informaltable" border="0">
 <colgroup>
 <col width="150px" class="properties_type">
 <col width="300px" class="properties_name">
@@ -100,7 +100,7 @@
 </li>
 </ul></div>
 <div class="refsect2">
-<a name="id-1.2.15.7.6"></a><h3>Sample pipelines</h3>
+<a name="id-1.2.16.7.6"></a><h3>Sample pipelines</h3>
 <div class="informalexample">
   <table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
     <tbody>
@@ -199,7 +199,7 @@
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="id-1.2.15.7.7.1"></a><h3>Element Information</h3>
+<a name="id-1.2.16.7.7.1"></a><h3>Element Information</h3>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
@@ -225,7 +225,7 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="id-1.2.15.7.7.2"></a><h3>Element Pads</h3>
+<a name="id-1.2.16.7.7.2"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-cvdilate.html b/docs/plugins/html/gst-plugins-bad-plugins-cvdilate.html
index 2ce59bf..cdb10b8 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-cvdilate.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-cvdilate.html
@@ -3,7 +3,7 @@
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>cvdilate: GStreamer Bad Plugins 1.0 Plugins Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
 <link rel="home" href="index.html" title="GStreamer Bad Plugins 1.0 Plugins Reference Manual">
 <link rel="up" href="ch01.html" title="gst-plugins-bad Elements">
 <link rel="prev" href="gst-plugins-bad-plugins-compositor.html" title="compositor">
@@ -15,8 +15,7 @@
 <table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="5"><tr valign="middle">
 <td width="100%" align="left" class="shortcuts">
 <a href="#" class="shortcut">Top</a><span id="nav_description">  <span class="dim">|</span> 
-                  <a href="#gst-plugins-bad-plugins-cvdilate.description" class="shortcut">Description</a></span><span id="nav_hierarchy">  <span class="dim">|</span> 
-                  <a href="#gst-plugins-bad-plugins-cvdilate.object-hierarchy" class="shortcut">Object Hierarchy</a></span>
+                  <a href="#gst-plugins-bad-plugins-cvdilate.description" class="shortcut">Description</a></span>
 </td>
 <td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
 <td><a accesskey="u" href="ch01.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
@@ -32,38 +31,25 @@
 </td>
 <td class="gallery_image" valign="top" align="right"></td>
 </tr></table></div>
-<a name="GstCvDilate"></a><div class="refsect1">
+<div class="refsect1">
 <a name="gst-plugins-bad-plugins-cvdilate.other"></a><h2>Types and Values</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="name">
 <col class="description">
 </colgroup>
 <tbody><tr>
 <td class="datatype_keyword">struct</td>
-<td class="function_name"><a class="link" href="gst-plugins-bad-plugins-cvdilate.html#GstCvDilate-struct" title="struct GstCvDilate">GstCvDilate</a></td>
+<td class="function_name"><a class="link" href="gst-plugins-bad-plugins-cvdilate.html#GstCvDilate" title="struct GstCvDilate">GstCvDilate</a></td>
 </tr></tbody>
 </table></div>
 </div>
 <div class="refsect1">
-<a name="gst-plugins-bad-plugins-cvdilate.object-hierarchy"></a><h2>Object Hierarchy</h2>
-<pre class="screen">    <a href="https://developer.gnome.org/gobject/unstable/gobject-The-Base-Object-Type.html#GObject">GObject</a>
-    <span class="lineart">╰──</span> <a href="https://developer.gnome.org/gobject/unstable/gobject-The-Base-Object-Type.html#GInitiallyUnowned">GInitiallyUnowned</a>
-        <span class="lineart">╰──</span> <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstObject.html">GstObject</a>
-            <span class="lineart">╰──</span> <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html">GstElement</a>
-                <span class="lineart">╰──</span> <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer-libs/html/GstBaseTransform.html">GstBaseTransform</a>
-                    <span class="lineart">╰──</span> <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base-libs/html/gst-plugins-base-libs-gstvideofilter.html#GstVideoFilter">GstVideoFilter</a>
-                        <span class="lineart">╰──</span> GstOpencvVideoFilter
-                            <span class="lineart">╰──</span> GstCvDilateErode
-                                <span class="lineart">╰──</span> GstCvDilate
-</pre>
-</div>
-<div class="refsect1">
 <a name="gst-plugins-bad-plugins-cvdilate.description"></a><h2>Description</h2>
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="id-1.2.16.6.2.1"></a><h3>Element Information</h3>
+<a name="id-1.2.17.4.2.1"></a><h3>Element Information</h3>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
@@ -89,7 +75,7 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="id-1.2.16.6.2.2"></a><h3>Element Pads</h3>
+<a name="id-1.2.17.4.2.2"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
@@ -244,8 +230,11 @@
 <div class="refsect1">
 <a name="gst-plugins-bad-plugins-cvdilate.other_details"></a><h2>Types and Values</h2>
 <div class="refsect2">
-<a name="GstCvDilate-struct"></a><h3>struct GstCvDilate</h3>
-<pre class="programlisting">struct GstCvDilate;</pre>
+<a name="GstCvDilate"></a><h3>struct GstCvDilate</h3>
+<pre class="programlisting">struct GstCvDilate {
+  GstCvDilateErode element;
+};
+</pre>
 </div>
 </div>
 </div>
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-cvequalizehist.html b/docs/plugins/html/gst-plugins-bad-plugins-cvequalizehist.html
index d425935..bc16c26 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-cvequalizehist.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-cvequalizehist.html
@@ -3,7 +3,7 @@
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>cvequalizehist: GStreamer Bad Plugins 1.0 Plugins Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
 <link rel="home" href="index.html" title="GStreamer Bad Plugins 1.0 Plugins Reference Manual">
 <link rel="up" href="ch01.html" title="gst-plugins-bad Elements">
 <link rel="prev" href="gst-plugins-bad-plugins-cverode.html" title="cverode">
@@ -15,8 +15,7 @@
 <table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="5"><tr valign="middle">
 <td width="100%" align="left" class="shortcuts">
 <a href="#" class="shortcut">Top</a><span id="nav_description">  <span class="dim">|</span> 
-                  <a href="#gst-plugins-bad-plugins-cvequalizehist.description" class="shortcut">Description</a></span><span id="nav_hierarchy">  <span class="dim">|</span> 
-                  <a href="#gst-plugins-bad-plugins-cvequalizehist.object-hierarchy" class="shortcut">Object Hierarchy</a></span>
+                  <a href="#gst-plugins-bad-plugins-cvequalizehist.description" class="shortcut">Description</a></span>
 </td>
 <td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
 <td><a accesskey="u" href="ch01.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
@@ -32,37 +31,25 @@
 </td>
 <td class="gallery_image" valign="top" align="right"></td>
 </tr></table></div>
-<a name="GstCvEqualizeHist"></a><div class="refsect1">
+<div class="refsect1">
 <a name="gst-plugins-bad-plugins-cvequalizehist.other"></a><h2>Types and Values</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="name">
 <col class="description">
 </colgroup>
 <tbody><tr>
 <td class="datatype_keyword">struct</td>
-<td class="function_name"><a class="link" href="gst-plugins-bad-plugins-cvequalizehist.html#GstCvEqualizeHist-struct" title="struct GstCvEqualizeHist">GstCvEqualizeHist</a></td>
+<td class="function_name"><a class="link" href="gst-plugins-bad-plugins-cvequalizehist.html#GstCvEqualizeHist" title="struct GstCvEqualizeHist">GstCvEqualizeHist</a></td>
 </tr></tbody>
 </table></div>
 </div>
 <div class="refsect1">
-<a name="gst-plugins-bad-plugins-cvequalizehist.object-hierarchy"></a><h2>Object Hierarchy</h2>
-<pre class="screen">    <a href="https://developer.gnome.org/gobject/unstable/gobject-The-Base-Object-Type.html#GObject">GObject</a>
-    <span class="lineart">╰──</span> <a href="https://developer.gnome.org/gobject/unstable/gobject-The-Base-Object-Type.html#GInitiallyUnowned">GInitiallyUnowned</a>
-        <span class="lineart">╰──</span> <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstObject.html">GstObject</a>
-            <span class="lineart">╰──</span> <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html">GstElement</a>
-                <span class="lineart">╰──</span> <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer-libs/html/GstBaseTransform.html">GstBaseTransform</a>
-                    <span class="lineart">╰──</span> <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base-libs/html/gst-plugins-base-libs-gstvideofilter.html#GstVideoFilter">GstVideoFilter</a>
-                        <span class="lineart">╰──</span> GstOpencvVideoFilter
-                            <span class="lineart">╰──</span> GstCvEqualizeHist
-</pre>
-</div>
-<div class="refsect1">
 <a name="gst-plugins-bad-plugins-cvequalizehist.description"></a><h2>Description</h2>
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="id-1.2.18.6.2.1"></a><h3>Element Information</h3>
+<a name="id-1.2.19.4.2.1"></a><h3>Element Information</h3>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
@@ -88,7 +75,7 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="id-1.2.18.6.2.2"></a><h3>Element Pads</h3>
+<a name="id-1.2.19.4.2.2"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
@@ -147,8 +134,11 @@
 <div class="refsect1">
 <a name="gst-plugins-bad-plugins-cvequalizehist.other_details"></a><h2>Types and Values</h2>
 <div class="refsect2">
-<a name="GstCvEqualizeHist-struct"></a><h3>struct GstCvEqualizeHist</h3>
-<pre class="programlisting">struct GstCvEqualizeHist;</pre>
+<a name="GstCvEqualizeHist"></a><h3>struct GstCvEqualizeHist</h3>
+<pre class="programlisting">struct GstCvEqualizeHist {
+  GstOpencvVideoFilter element;
+};
+</pre>
 </div>
 </div>
 </div>
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-cverode.html b/docs/plugins/html/gst-plugins-bad-plugins-cverode.html
index 5e1c293..1c165b3 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-cverode.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-cverode.html
@@ -3,7 +3,7 @@
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>cverode: GStreamer Bad Plugins 1.0 Plugins Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
 <link rel="home" href="index.html" title="GStreamer Bad Plugins 1.0 Plugins Reference Manual">
 <link rel="up" href="ch01.html" title="gst-plugins-bad Elements">
 <link rel="prev" href="gst-plugins-bad-plugins-cvdilate.html" title="cvdilate">
@@ -15,8 +15,7 @@
 <table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="5"><tr valign="middle">
 <td width="100%" align="left" class="shortcuts">
 <a href="#" class="shortcut">Top</a><span id="nav_description">  <span class="dim">|</span> 
-                  <a href="#gst-plugins-bad-plugins-cverode.description" class="shortcut">Description</a></span><span id="nav_hierarchy">  <span class="dim">|</span> 
-                  <a href="#gst-plugins-bad-plugins-cverode.object-hierarchy" class="shortcut">Object Hierarchy</a></span>
+                  <a href="#gst-plugins-bad-plugins-cverode.description" class="shortcut">Description</a></span>
 </td>
 <td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
 <td><a accesskey="u" href="ch01.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
@@ -32,38 +31,25 @@
 </td>
 <td class="gallery_image" valign="top" align="right"></td>
 </tr></table></div>
-<a name="GstCvErode"></a><div class="refsect1">
+<div class="refsect1">
 <a name="gst-plugins-bad-plugins-cverode.other"></a><h2>Types and Values</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="name">
 <col class="description">
 </colgroup>
 <tbody><tr>
 <td class="datatype_keyword">struct</td>
-<td class="function_name"><a class="link" href="gst-plugins-bad-plugins-cverode.html#GstCvErode-struct" title="struct GstCvErode">GstCvErode</a></td>
+<td class="function_name"><a class="link" href="gst-plugins-bad-plugins-cverode.html#GstCvErode" title="struct GstCvErode">GstCvErode</a></td>
 </tr></tbody>
 </table></div>
 </div>
 <div class="refsect1">
-<a name="gst-plugins-bad-plugins-cverode.object-hierarchy"></a><h2>Object Hierarchy</h2>
-<pre class="screen">    <a href="https://developer.gnome.org/gobject/unstable/gobject-The-Base-Object-Type.html#GObject">GObject</a>
-    <span class="lineart">╰──</span> <a href="https://developer.gnome.org/gobject/unstable/gobject-The-Base-Object-Type.html#GInitiallyUnowned">GInitiallyUnowned</a>
-        <span class="lineart">╰──</span> <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstObject.html">GstObject</a>
-            <span class="lineart">╰──</span> <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html">GstElement</a>
-                <span class="lineart">╰──</span> <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer-libs/html/GstBaseTransform.html">GstBaseTransform</a>
-                    <span class="lineart">╰──</span> <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base-libs/html/gst-plugins-base-libs-gstvideofilter.html#GstVideoFilter">GstVideoFilter</a>
-                        <span class="lineart">╰──</span> GstOpencvVideoFilter
-                            <span class="lineart">╰──</span> GstCvDilateErode
-                                <span class="lineart">╰──</span> GstCvErode
-</pre>
-</div>
-<div class="refsect1">
 <a name="gst-plugins-bad-plugins-cverode.description"></a><h2>Description</h2>
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="id-1.2.17.6.2.1"></a><h3>Element Information</h3>
+<a name="id-1.2.18.4.2.1"></a><h3>Element Information</h3>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
@@ -89,7 +75,7 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="id-1.2.17.6.2.2"></a><h3>Element Pads</h3>
+<a name="id-1.2.18.4.2.2"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
@@ -244,8 +230,11 @@
 <div class="refsect1">
 <a name="gst-plugins-bad-plugins-cverode.other_details"></a><h2>Types and Values</h2>
 <div class="refsect2">
-<a name="GstCvErode-struct"></a><h3>struct GstCvErode</h3>
-<pre class="programlisting">struct GstCvErode;</pre>
+<a name="GstCvErode"></a><h3>struct GstCvErode</h3>
+<pre class="programlisting">struct GstCvErode {
+  GstCvDilateErode element;
+};
+</pre>
 </div>
 </div>
 </div>
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-cvlaplace.html b/docs/plugins/html/gst-plugins-bad-plugins-cvlaplace.html
index 1861d07..00f9303 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-cvlaplace.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-cvlaplace.html
@@ -3,7 +3,7 @@
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>cvlaplace: GStreamer Bad Plugins 1.0 Plugins Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
 <link rel="home" href="index.html" title="GStreamer Bad Plugins 1.0 Plugins Reference Manual">
 <link rel="up" href="ch01.html" title="gst-plugins-bad Elements">
 <link rel="prev" href="gst-plugins-bad-plugins-cvequalizehist.html" title="cvequalizehist">
@@ -15,8 +15,7 @@
 <table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="5"><tr valign="middle">
 <td width="100%" align="left" class="shortcuts">
 <a href="#" class="shortcut">Top</a><span id="nav_description">  <span class="dim">|</span> 
-                  <a href="#gst-plugins-bad-plugins-cvlaplace.description" class="shortcut">Description</a></span><span id="nav_hierarchy">  <span class="dim">|</span> 
-                  <a href="#gst-plugins-bad-plugins-cvlaplace.object-hierarchy" class="shortcut">Object Hierarchy</a></span><span id="nav_properties">  <span class="dim">|</span> 
+                  <a href="#gst-plugins-bad-plugins-cvlaplace.description" class="shortcut">Description</a></span><span id="nav_properties">  <span class="dim">|</span> 
                   <a href="#gst-plugins-bad-plugins-cvlaplace.properties" class="shortcut">Properties</a></span>
 </td>
 <td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
@@ -35,50 +34,55 @@
 </tr></table></div>
 <div class="refsect1">
 <a name="gst-plugins-bad-plugins-cvlaplace.properties"></a><h2>Properties</h2>
-<div class="informaltable"><table border="0">
+<div class="informaltable"><table class="informaltable" border="0">
 <colgroup>
 <col width="150px" class="properties_type">
 <col width="300px" class="properties_name">
 <col width="200px" class="properties_flags">
 </colgroup>
-<tbody><tr>
+<tbody>
+<tr>
 <td class="property_type"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a></td>
 <td class="property_name"><a class="link" href="gst-plugins-bad-plugins-cvlaplace.html#GstCvLaplace--aperture-size" title="The “aperture-size” property">aperture-size</a></td>
 <td class="property_flags">Read / Write</td>
-</tr></tbody>
+</tr>
+<tr>
+<td class="property_type"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gdouble"><span class="type">gdouble</span></a></td>
+<td class="property_name"><a class="link" href="gst-plugins-bad-plugins-cvlaplace.html#GstCvLaplace--scale" title="The “scale” property">scale</a></td>
+<td class="property_flags">Read / Write</td>
+</tr>
+<tr>
+<td class="property_type"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gdouble"><span class="type">gdouble</span></a></td>
+<td class="property_name"><a class="link" href="gst-plugins-bad-plugins-cvlaplace.html#GstCvLaplace--shift" title="The “shift” property">shift</a></td>
+<td class="property_flags">Read / Write</td>
+</tr>
+<tr>
+<td class="property_type"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a></td>
+<td class="property_name"><a class="link" href="gst-plugins-bad-plugins-cvlaplace.html#GstCvLaplace--mask" title="The “mask” property">mask</a></td>
+<td class="property_flags">Read / Write</td>
+</tr>
+</tbody>
 </table></div>
 </div>
-<a name="GstCvLaplace"></a><div class="refsect1">
+<div class="refsect1">
 <a name="gst-plugins-bad-plugins-cvlaplace.other"></a><h2>Types and Values</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="name">
 <col class="description">
 </colgroup>
 <tbody><tr>
 <td class="datatype_keyword">struct</td>
-<td class="function_name"><a class="link" href="gst-plugins-bad-plugins-cvlaplace.html#GstCvLaplace-struct" title="struct GstCvLaplace">GstCvLaplace</a></td>
+<td class="function_name"><a class="link" href="gst-plugins-bad-plugins-cvlaplace.html#GstCvLaplace" title="struct GstCvLaplace">GstCvLaplace</a></td>
 </tr></tbody>
 </table></div>
 </div>
 <div class="refsect1">
-<a name="gst-plugins-bad-plugins-cvlaplace.object-hierarchy"></a><h2>Object Hierarchy</h2>
-<pre class="screen">    <a href="https://developer.gnome.org/gobject/unstable/gobject-The-Base-Object-Type.html#GObject">GObject</a>
-    <span class="lineart">╰──</span> <a href="https://developer.gnome.org/gobject/unstable/gobject-The-Base-Object-Type.html#GInitiallyUnowned">GInitiallyUnowned</a>
-        <span class="lineart">╰──</span> <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstObject.html">GstObject</a>
-            <span class="lineart">╰──</span> <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html">GstElement</a>
-                <span class="lineart">╰──</span> <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer-libs/html/GstBaseTransform.html">GstBaseTransform</a>
-                    <span class="lineart">╰──</span> <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base-libs/html/gst-plugins-base-libs-gstvideofilter.html#GstVideoFilter">GstVideoFilter</a>
-                        <span class="lineart">╰──</span> GstOpencvVideoFilter
-                            <span class="lineart">╰──</span> GstCvLaplace
-</pre>
-</div>
-<div class="refsect1">
 <a name="gst-plugins-bad-plugins-cvlaplace.description"></a><h2>Description</h2>
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="id-1.2.19.7.2.1"></a><h3>Element Information</h3>
+<a name="id-1.2.20.5.2.1"></a><h3>Element Information</h3>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
@@ -104,7 +108,7 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="id-1.2.19.7.2.2"></a><h3>Element Pads</h3>
+<a name="id-1.2.20.5.2.2"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
@@ -125,7 +129,7 @@
 </tr>
 <tr>
 <td><p><span class="term">details</span></p></td>
-<td>video/x-raw, format=(string)GRAY8, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</td>
+<td>video/x-raw, format=(string)RGB, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</td>
 </tr>
 </tbody>
 </table></div>
@@ -149,7 +153,7 @@
 </tr>
 <tr>
 <td><p><span class="term">details</span></p></td>
-<td>video/x-raw, format=(string)GRAY16_LE, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</td>
+<td>video/x-raw, format=(string)RGB, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</td>
 </tr>
 </tbody>
 </table></div>
@@ -163,8 +167,21 @@
 <div class="refsect1">
 <a name="gst-plugins-bad-plugins-cvlaplace.other_details"></a><h2>Types and Values</h2>
 <div class="refsect2">
-<a name="GstCvLaplace-struct"></a><h3>struct GstCvLaplace</h3>
-<pre class="programlisting">struct GstCvLaplace;</pre>
+<a name="GstCvLaplace"></a><h3>struct GstCvLaplace</h3>
+<pre class="programlisting">struct GstCvLaplace {
+  GstOpencvVideoFilter element;
+
+  gint aperture_size;
+  gdouble scale;
+  gdouble shift;
+  gboolean mask;
+
+  IplImage *intermediary_img;
+  IplImage *cvGray;
+  IplImage *Laplace;
+  IplImage *CLaplace;
+};
+</pre>
 </div>
 </div>
 <div class="refsect1">
@@ -177,6 +194,32 @@
 <p>Allowed values: [1,7]</p>
 <p>Default value: 3</p>
 </div>
+<hr>
+<div class="refsect2">
+<a name="GstCvLaplace--scale"></a><h3>The <code class="literal">“scale”</code> property</h3>
+<pre class="programlisting">  “scale”                    <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gdouble"><span class="type">gdouble</span></a></pre>
+<p>Scale factor.</p>
+<p>Flags: Read / Write</p>
+<p>Allowed values: &gt;= 0</p>
+<p>Default value: 1</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstCvLaplace--shift"></a><h3>The <code class="literal">“shift”</code> property</h3>
+<pre class="programlisting">  “shift”                    <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gdouble"><span class="type">gdouble</span></a></pre>
+<p>Value added to the scaled source array elements.</p>
+<p>Flags: Read / Write</p>
+<p>Allowed values: &gt;= 0</p>
+<p>Default value: 0</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstCvLaplace--mask"></a><h3>The <code class="literal">“mask”</code> property</h3>
+<pre class="programlisting">  “mask”                     <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a></pre>
+<p>Sets whether the detected edges should be used as a mask on the original input or not.</p>
+<p>Flags: Read / Write</p>
+<p>Default value: TRUE</p>
+</div>
 </div>
 </div>
 <div class="footer">
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-cvsmooth.html b/docs/plugins/html/gst-plugins-bad-plugins-cvsmooth.html
index 883abaa..592238c 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-cvsmooth.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-cvsmooth.html
@@ -3,7 +3,7 @@
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>cvsmooth: GStreamer Bad Plugins 1.0 Plugins Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
 <link rel="home" href="index.html" title="GStreamer Bad Plugins 1.0 Plugins Reference Manual">
 <link rel="up" href="ch01.html" title="gst-plugins-bad Elements">
 <link rel="prev" href="gst-plugins-bad-plugins-cvlaplace.html" title="cvlaplace">
@@ -15,8 +15,7 @@
 <table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="5"><tr valign="middle">
 <td width="100%" align="left" class="shortcuts">
 <a href="#" class="shortcut">Top</a><span id="nav_description">  <span class="dim">|</span> 
-                  <a href="#gst-plugins-bad-plugins-cvsmooth.description" class="shortcut">Description</a></span><span id="nav_hierarchy">  <span class="dim">|</span> 
-                  <a href="#gst-plugins-bad-plugins-cvsmooth.object-hierarchy" class="shortcut">Object Hierarchy</a></span><span id="nav_properties">  <span class="dim">|</span> 
+                  <a href="#gst-plugins-bad-plugins-cvsmooth.description" class="shortcut">Description</a></span><span id="nav_properties">  <span class="dim">|</span> 
                   <a href="#gst-plugins-bad-plugins-cvsmooth.properties" class="shortcut">Properties</a></span>
 </td>
 <td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
@@ -35,7 +34,7 @@
 </tr></table></div>
 <div class="refsect1">
 <a name="gst-plugins-bad-plugins-cvsmooth.properties"></a><h2>Properties</h2>
-<div class="informaltable"><table border="0">
+<div class="informaltable"><table class="informaltable" border="0">
 <colgroup>
 <col width="150px" class="properties_type">
 <col width="300px" class="properties_name">
@@ -90,37 +89,25 @@
 </tbody>
 </table></div>
 </div>
-<a name="GstCvSmooth"></a><div class="refsect1">
+<div class="refsect1">
 <a name="gst-plugins-bad-plugins-cvsmooth.other"></a><h2>Types and Values</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="name">
 <col class="description">
 </colgroup>
 <tbody><tr>
 <td class="datatype_keyword">struct</td>
-<td class="function_name"><a class="link" href="gst-plugins-bad-plugins-cvsmooth.html#GstCvSmooth-struct" title="struct GstCvSmooth">GstCvSmooth</a></td>
+<td class="function_name"><a class="link" href="gst-plugins-bad-plugins-cvsmooth.html#GstCvSmooth" title="struct GstCvSmooth">GstCvSmooth</a></td>
 </tr></tbody>
 </table></div>
 </div>
 <div class="refsect1">
-<a name="gst-plugins-bad-plugins-cvsmooth.object-hierarchy"></a><h2>Object Hierarchy</h2>
-<pre class="screen">    <a href="https://developer.gnome.org/gobject/unstable/gobject-The-Base-Object-Type.html#GObject">GObject</a>
-    <span class="lineart">╰──</span> <a href="https://developer.gnome.org/gobject/unstable/gobject-The-Base-Object-Type.html#GInitiallyUnowned">GInitiallyUnowned</a>
-        <span class="lineart">╰──</span> <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstObject.html">GstObject</a>
-            <span class="lineart">╰──</span> <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html">GstElement</a>
-                <span class="lineart">╰──</span> <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer-libs/html/GstBaseTransform.html">GstBaseTransform</a>
-                    <span class="lineart">╰──</span> <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base-libs/html/gst-plugins-base-libs-gstvideofilter.html#GstVideoFilter">GstVideoFilter</a>
-                        <span class="lineart">╰──</span> GstOpencvVideoFilter
-                            <span class="lineart">╰──</span> GstCvSmooth
-</pre>
-</div>
-<div class="refsect1">
 <a name="gst-plugins-bad-plugins-cvsmooth.description"></a><h2>Description</h2>
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="id-1.2.20.7.2.1"></a><h3>Element Information</h3>
+<a name="id-1.2.21.5.2.1"></a><h3>Element Information</h3>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
@@ -146,7 +133,7 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="id-1.2.20.7.2.2"></a><h3>Element Pads</h3>
+<a name="id-1.2.21.5.2.2"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
@@ -221,8 +208,18 @@
 <div class="refsect1">
 <a name="gst-plugins-bad-plugins-cvsmooth.other_details"></a><h2>Types and Values</h2>
 <div class="refsect2">
-<a name="GstCvSmooth-struct"></a><h3>struct GstCvSmooth</h3>
-<pre class="programlisting">struct GstCvSmooth;</pre>
+<a name="GstCvSmooth"></a><h3>struct GstCvSmooth</h3>
+<pre class="programlisting">struct GstCvSmooth {
+  GstOpencvVideoFilter element;
+
+  gint type;
+
+  gint width;
+  gint height;
+  gdouble colorsigma;
+  gdouble spatialsigma;
+};
+</pre>
 </div>
 </div>
 <div class="refsect1">
@@ -274,7 +271,7 @@
 <div class="refsect2">
 <a name="GstCvSmooth--color"></a><h3>The <code class="literal">“color”</code> property</h3>
 <pre class="programlisting">  “color”                    <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gdouble"><span class="type">gdouble</span></a></pre>
-<p>If type is gaussian, this means the standard deviation.If type is bilateral, this means the color-sigma. If zero, Default values are used.Check cvSmooth OpenCV docs: http://opencv.willowgarage.com/documentation/image_filtering.html#cvSmooth.</p>
+<p>If type is gaussian, this means the standard deviation.If type is bilateral, this means the color-sigma. If zero, Default values are used.</p>
 <p>Flags: Read / Write</p>
 <p>Allowed values: &gt;= 0</p>
 <p>Default value: 0</p>
@@ -283,16 +280,16 @@
 <div class="refsect2">
 <a name="GstCvSmooth--height"></a><h3>The <code class="literal">“height”</code> property</h3>
 <pre class="programlisting">  “height”                   <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a></pre>
-<p>The aperture height, if zero, the width is used.(Must be positive and odd or zero, unuset in median and bilateral types). Check cvSmooth OpenCV docs: http://opencv.willowgarage.com/documentation/image_filtering.html#cvSmooth.</p>
+<p>The gaussian kernel height (must be positive and odd).</p>
 <p>Flags: Read / Write</p>
 <p>Allowed values: &gt;= 0</p>
-<p>Default value: 0</p>
+<p>Default value: 3</p>
 </div>
 <hr>
 <div class="refsect2">
 <a name="GstCvSmooth--spatial"></a><h3>The <code class="literal">“spatial”</code> property</h3>
 <pre class="programlisting">  “spatial”                  <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gdouble"><span class="type">gdouble</span></a></pre>
-<p>Only used in bilateral type, means the spatial-sigma.Check cvSmooth OpenCV docs: http://opencv.willowgarage.com/documentation/image_filtering.html#cvSmooth.</p>
+<p>Only used in bilateral type, means the spatial-sigma.</p>
 <p>Flags: Read / Write</p>
 <p>Allowed values: &gt;= 0</p>
 <p>Default value: 0</p>
@@ -301,7 +298,7 @@
 <div class="refsect2">
 <a name="GstCvSmooth--width"></a><h3>The <code class="literal">“width”</code> property</h3>
 <pre class="programlisting">  “width”                    <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a></pre>
-<p>The aperture width (Must be positive and odd).Check cvSmooth OpenCV docs: http://opencv.willowgarage.com/documentation/image_filtering.html#cvSmooth.</p>
+<p>The gaussian kernel width (must be positive and odd).If type is median, this means the aperture linear size.Check OpenCV docs: http://docs.opencv.org/2.4/modules/imgproc/doc/filtering.htm.</p>
 <p>Flags: Read / Write</p>
 <p>Allowed values: &gt;= 1</p>
 <p>Default value: 3</p>
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-cvsobel.html b/docs/plugins/html/gst-plugins-bad-plugins-cvsobel.html
index 2a4fb38..8e68f6d 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-cvsobel.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-cvsobel.html
@@ -3,7 +3,7 @@
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>cvsobel: GStreamer Bad Plugins 1.0 Plugins Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
 <link rel="home" href="index.html" title="GStreamer Bad Plugins 1.0 Plugins Reference Manual">
 <link rel="up" href="ch01.html" title="gst-plugins-bad Elements">
 <link rel="prev" href="gst-plugins-bad-plugins-cvsmooth.html" title="cvsmooth">
@@ -15,8 +15,7 @@
 <table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="5"><tr valign="middle">
 <td width="100%" align="left" class="shortcuts">
 <a href="#" class="shortcut">Top</a><span id="nav_description">  <span class="dim">|</span> 
-                  <a href="#gst-plugins-bad-plugins-cvsobel.description" class="shortcut">Description</a></span><span id="nav_hierarchy">  <span class="dim">|</span> 
-                  <a href="#gst-plugins-bad-plugins-cvsobel.object-hierarchy" class="shortcut">Object Hierarchy</a></span><span id="nav_properties">  <span class="dim">|</span> 
+                  <a href="#gst-plugins-bad-plugins-cvsobel.description" class="shortcut">Description</a></span><span id="nav_properties">  <span class="dim">|</span> 
                   <a href="#gst-plugins-bad-plugins-cvsobel.properties" class="shortcut">Properties</a></span>
 </td>
 <td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
@@ -35,7 +34,7 @@
 </tr></table></div>
 <div class="refsect1">
 <a name="gst-plugins-bad-plugins-cvsobel.properties"></a><h2>Properties</h2>
-<div class="informaltable"><table border="0">
+<div class="informaltable"><table class="informaltable" border="0">
 <colgroup>
 <col width="150px" class="properties_type">
 <col width="300px" class="properties_name">
@@ -57,40 +56,33 @@
 <td class="property_name"><a class="link" href="gst-plugins-bad-plugins-cvsobel.html#GstCvSobel--y-order" title="The “y-order” property">y-order</a></td>
 <td class="property_flags">Read / Write</td>
 </tr>
+<tr>
+<td class="property_type"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a></td>
+<td class="property_name"><a class="link" href="gst-plugins-bad-plugins-cvsobel.html#GstCvSobel--mask" title="The “mask” property">mask</a></td>
+<td class="property_flags">Read / Write</td>
+</tr>
 </tbody>
 </table></div>
 </div>
-<a name="GstCvSobel"></a><div class="refsect1">
+<div class="refsect1">
 <a name="gst-plugins-bad-plugins-cvsobel.other"></a><h2>Types and Values</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="name">
 <col class="description">
 </colgroup>
 <tbody><tr>
 <td class="datatype_keyword">struct</td>
-<td class="function_name"><a class="link" href="gst-plugins-bad-plugins-cvsobel.html#GstCvSobel-struct" title="struct GstCvSobel">GstCvSobel</a></td>
+<td class="function_name"><a class="link" href="gst-plugins-bad-plugins-cvsobel.html#GstCvSobel" title="struct GstCvSobel">GstCvSobel</a></td>
 </tr></tbody>
 </table></div>
 </div>
 <div class="refsect1">
-<a name="gst-plugins-bad-plugins-cvsobel.object-hierarchy"></a><h2>Object Hierarchy</h2>
-<pre class="screen">    <a href="https://developer.gnome.org/gobject/unstable/gobject-The-Base-Object-Type.html#GObject">GObject</a>
-    <span class="lineart">╰──</span> <a href="https://developer.gnome.org/gobject/unstable/gobject-The-Base-Object-Type.html#GInitiallyUnowned">GInitiallyUnowned</a>
-        <span class="lineart">╰──</span> <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstObject.html">GstObject</a>
-            <span class="lineart">╰──</span> <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html">GstElement</a>
-                <span class="lineart">╰──</span> <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer-libs/html/GstBaseTransform.html">GstBaseTransform</a>
-                    <span class="lineart">╰──</span> <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base-libs/html/gst-plugins-base-libs-gstvideofilter.html#GstVideoFilter">GstVideoFilter</a>
-                        <span class="lineart">╰──</span> GstOpencvVideoFilter
-                            <span class="lineart">╰──</span> GstCvSobel
-</pre>
-</div>
-<div class="refsect1">
 <a name="gst-plugins-bad-plugins-cvsobel.description"></a><h2>Description</h2>
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="id-1.2.21.7.2.1"></a><h3>Element Information</h3>
+<a name="id-1.2.22.5.2.1"></a><h3>Element Information</h3>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
@@ -116,7 +108,7 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="id-1.2.21.7.2.2"></a><h3>Element Pads</h3>
+<a name="id-1.2.22.5.2.2"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
@@ -137,7 +129,7 @@
 </tr>
 <tr>
 <td><p><span class="term">details</span></p></td>
-<td>video/x-raw, format=(string)GRAY8, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</td>
+<td>video/x-raw, format=(string)RGB, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</td>
 </tr>
 </tbody>
 </table></div>
@@ -161,7 +153,7 @@
 </tr>
 <tr>
 <td><p><span class="term">details</span></p></td>
-<td>video/x-raw, format=(string)GRAY16_LE, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</td>
+<td>video/x-raw, format=(string)RGB, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</td>
 </tr>
 </tbody>
 </table></div>
@@ -175,8 +167,20 @@
 <div class="refsect1">
 <a name="gst-plugins-bad-plugins-cvsobel.other_details"></a><h2>Types and Values</h2>
 <div class="refsect2">
-<a name="GstCvSobel-struct"></a><h3>struct GstCvSobel</h3>
-<pre class="programlisting">struct GstCvSobel;</pre>
+<a name="GstCvSobel"></a><h3>struct GstCvSobel</h3>
+<pre class="programlisting">struct GstCvSobel {
+  GstOpencvVideoFilter element;
+
+  gint x_order;
+  gint y_order;
+  gint aperture_size;
+  gboolean mask;
+
+  IplImage *cvCSobel;
+  IplImage *cvGray;
+  IplImage *cvSobel;
+};
+</pre>
 </div>
 </div>
 <div class="refsect1">
@@ -207,6 +211,14 @@
 <p>Allowed values: &gt;= G_MAXULONG</p>
 <p>Default value: 0</p>
 </div>
+<hr>
+<div class="refsect2">
+<a name="GstCvSobel--mask"></a><h3>The <code class="literal">“mask”</code> property</h3>
+<pre class="programlisting">  “mask”                     <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a></pre>
+<p>Sets whether the detected derivative edges should be used as a mask on the original input or not.</p>
+<p>Flags: Read / Write</p>
+<p>Default value: TRUE</p>
+</div>
 </div>
 </div>
 <div class="footer">
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-dataurisrc.html b/docs/plugins/html/gst-plugins-bad-plugins-dataurisrc.html
index fd5d278..445c806 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-dataurisrc.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-dataurisrc.html
@@ -3,7 +3,7 @@
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>dataurisrc: GStreamer Bad Plugins 1.0 Plugins Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
 <link rel="home" href="index.html" title="GStreamer Bad Plugins 1.0 Plugins Reference Manual">
 <link rel="up" href="ch01.html" title="gst-plugins-bad Elements">
 <link rel="prev" href="gst-plugins-bad-plugins-cvsobel.html" title="cvsobel">
@@ -36,7 +36,7 @@
 </tr></table></div>
 <div class="refsect1">
 <a name="gst-plugins-bad-plugins-dataurisrc.properties"></a><h2>Properties</h2>
-<div class="informaltable"><table border="0">
+<div class="informaltable"><table class="informaltable" border="0">
 <colgroup>
 <col width="150px" class="properties_type">
 <col width="300px" class="properties_name">
@@ -52,7 +52,7 @@
 </div>
 <a name="GstDataURISrc"></a><div class="refsect1">
 <a name="gst-plugins-bad-plugins-dataurisrc.other"></a><h2>Types and Values</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="name">
 <col class="description">
@@ -83,13 +83,13 @@
 <a name="gst-plugins-bad-plugins-dataurisrc.description"></a><h2>Description</h2>
 <p>dataurisrc handles data: URIs, see <a class="ulink" href="http://tools.ietf.org/html/rfc2397" target="_top">RFC 2397</a> for more information.</p>
 <div class="refsect2">
-<a name="id-1.2.22.8.3"></a><h3>Example launch line</h3>
+<a name="id-1.2.23.8.3"></a><h3>Example launch line</h3>
 <div class="informalexample">
   <table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
     <tbody>
       <tr>
         <td class="listing_lines" align="right"><pre>1</pre></td>
-        <td class="listing_code"><pre class="programlisting">gst<span class="gtkdoc opt">-</span>launch<span class="gtkdoc opt">-</span><span class="number">0.10</span> <span class="gtkdoc opt">-</span>v dataurisrc uri<span class="gtkdoc opt">=</span><span class="string">&quot;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAfElEQVQ4je2MwQnAIAxFgziA4EnczIsO4MEROo/gzZWc4xdTbe1R6LGRR74heYS7iKElzfcMiRnt4hf8gk8EayB6luefue/HzlJfCA50XsNjYRxprZmenXNIKSGEsC+QUqK1hhgj521BzhnWWiilUGvdF5RS4L2HMQZCCJy8sHMm2TYdJAAAAABJRU5ErkJggg==&quot;</span> <span class="gtkdoc opt">!</span> pngdec <span class="gtkdoc opt">!</span> videoconvert <span class="gtkdoc opt">!</span> freeze <span class="gtkdoc opt">!</span> videoconvert <span class="gtkdoc opt">!</span> autovideosink</pre></td>
+        <td class="listing_code"><pre class="programlisting">gst<span class="gtkdoc opt">-</span>launch<span class="gtkdoc opt">-</span><span class="number">1.0</span> <span class="gtkdoc opt">-</span>v dataurisrc uri<span class="gtkdoc opt">=</span><span class="string">&quot;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAfElEQVQ4je2MwQnAIAxFgziA4EnczIsO4MEROo/gzZWc4xdTbe1R6LGRR74heYS7iKElzfcMiRnt4hf8gk8EayB6luefue/HzlJfCA50XsNjYRxprZmenXNIKSGEsC+QUqK1hhgj521BzhnWWiilUGvdF5RS4L2HMQZCCJy8sHMm2TYdJAAAAABJRU5ErkJggg==&quot;</span> <span class="gtkdoc opt">!</span> pngdec <span class="gtkdoc opt">!</span> videoconvert <span class="gtkdoc opt">!</span> imagefreeze <span class="gtkdoc opt">!</span> videoconvert <span class="gtkdoc opt">!</span> autovideosink</pre></td>
       </tr>
     </tbody>
   </table>
@@ -99,7 +99,7 @@
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="id-1.2.22.8.4.1"></a><h3>Element Information</h3>
+<a name="id-1.2.23.8.4.1"></a><h3>Element Information</h3>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
@@ -125,7 +125,7 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="id-1.2.22.8.4.2"></a><h3>Element Pads</h3>
+<a name="id-1.2.23.8.4.2"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-diffuse.html b/docs/plugins/html/gst-plugins-bad-plugins-diffuse.html
index 5b75384..8ff4e2d 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-diffuse.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-diffuse.html
@@ -3,7 +3,7 @@
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>diffuse: GStreamer Bad Plugins 1.0 Plugins Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
 <link rel="home" href="index.html" title="GStreamer Bad Plugins 1.0 Plugins Reference Manual">
 <link rel="up" href="ch01.html" title="gst-plugins-bad Elements">
 <link rel="prev" href="gst-plugins-bad-plugins-dataurisrc.html" title="dataurisrc">
@@ -35,7 +35,7 @@
 </tr></table></div>
 <div class="refsect1">
 <a name="gst-plugins-bad-plugins-diffuse.properties"></a><h2>Properties</h2>
-<div class="informaltable"><table border="0">
+<div class="informaltable"><table class="informaltable" border="0">
 <colgroup>
 <col width="150px" class="properties_type">
 <col width="300px" class="properties_name">
@@ -50,7 +50,7 @@
 </div>
 <a name="GstDiffuse"></a><div class="refsect1">
 <a name="gst-plugins-bad-plugins-diffuse.other"></a><h2>Types and Values</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="name">
 <col class="description">
@@ -75,10 +75,26 @@
 </div>
 <div class="refsect1">
 <a name="gst-plugins-bad-plugins-diffuse.description"></a><h2>Description</h2>
+<p>Diffuse is a geometric image transform element. It diffuses the image by
+moving its pixels in random directions.</p>
+<div class="refsect2">
+<a name="id-1.2.24.7.3"></a><h3>Example launch line</h3>
+<div class="informalexample">
+  <table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
+    <tbody>
+      <tr>
+        <td class="listing_lines" align="right"><pre>1</pre></td>
+        <td class="listing_code"><pre class="programlisting">gst<span class="gtkdoc opt">-</span>launch<span class="gtkdoc opt">-</span><span class="number">1.0</span> <span class="gtkdoc opt">-</span>v videotestsrc <span class="gtkdoc opt">!</span> diffuse <span class="gtkdoc opt">!</span> videoconvert <span class="gtkdoc opt">!</span> autovideosink</pre></td>
+      </tr>
+    </tbody>
+  </table>
+</div>
+
+</div>
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="id-1.2.23.7.2.1"></a><h3>Element Information</h3>
+<a name="id-1.2.24.7.4.1"></a><h3>Element Information</h3>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
@@ -104,7 +120,7 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="id-1.2.23.7.2.2"></a><h3>Element Pads</h3>
+<a name="id-1.2.24.7.4.2"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
@@ -178,6 +194,10 @@
 <p>Default value: 4</p>
 </div>
 </div>
+<div class="refsect1">
+<a name="gst-plugins-bad-plugins-diffuse.see-also"></a><h2>See Also</h2>
+<p>geometrictransform</p>
+</div>
 </div>
 <div class="footer">
 <hr>Generated by GTK-Doc V1.24</div>
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-dilate.html b/docs/plugins/html/gst-plugins-bad-plugins-dilate.html
index 43021aa..1f3b3c6 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-dilate.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-dilate.html
@@ -3,7 +3,7 @@
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>dilate: GStreamer Bad Plugins 1.0 Plugins Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
 <link rel="home" href="index.html" title="GStreamer Bad Plugins 1.0 Plugins Reference Manual">
 <link rel="up" href="ch01.html" title="gst-plugins-bad Elements">
 <link rel="prev" href="gst-plugins-bad-plugins-diffuse.html" title="diffuse">
@@ -35,7 +35,7 @@
 </tr></table></div>
 <div class="refsect1">
 <a name="gst-plugins-bad-plugins-dilate.properties"></a><h2>Properties</h2>
-<div class="informaltable"><table border="0">
+<div class="informaltable"><table class="informaltable" border="0">
 <colgroup>
 <col width="150px" class="properties_type">
 <col width="300px" class="properties_name">
@@ -57,7 +57,7 @@
 </div>
 <a name="GstDilate"></a><div class="refsect1">
 <a name="gst-plugins-bad-plugins-dilate.other"></a><h2>Types and Values</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="name">
 <col class="description">
@@ -83,13 +83,13 @@
 <a name="gst-plugins-bad-plugins-dilate.description"></a><h2>Description</h2>
 <p>Dilate adjusts the colors of a video stream in realtime.</p>
 <div class="refsect2">
-<a name="id-1.2.24.7.3"></a><h3>Example launch line</h3>
+<a name="id-1.2.25.7.3"></a><h3>Example launch line</h3>
 <div class="informalexample">
   <table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
     <tbody>
       <tr>
         <td class="listing_lines" align="right"><pre>1</pre></td>
-        <td class="listing_code"><pre class="programlisting">gst<span class="gtkdoc opt">-</span>launch <span class="gtkdoc opt">-</span>v videotestsrc <span class="gtkdoc opt">!</span> dilate <span class="gtkdoc opt">!</span> videoconvert <span class="gtkdoc opt">!</span> autovideosink</pre></td>
+        <td class="listing_code"><pre class="programlisting">gst<span class="gtkdoc opt">-</span>launch<span class="gtkdoc opt">-</span><span class="number">1.0</span> <span class="gtkdoc opt">-</span>v videotestsrc <span class="gtkdoc opt">!</span> dilate <span class="gtkdoc opt">!</span> videoconvert <span class="gtkdoc opt">!</span> autovideosink</pre></td>
       </tr>
     </tbody>
   </table>
@@ -99,7 +99,7 @@
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="id-1.2.24.7.4.1"></a><h3>Element Information</h3>
+<a name="id-1.2.25.7.4.1"></a><h3>Element Information</h3>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
@@ -125,7 +125,7 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="id-1.2.24.7.4.2"></a><h3>Element Pads</h3>
+<a name="id-1.2.25.7.4.2"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-dodge.html b/docs/plugins/html/gst-plugins-bad-plugins-dodge.html
index 1a1a4c5..b77bf41 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-dodge.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-dodge.html
@@ -3,7 +3,7 @@
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>dodge: GStreamer Bad Plugins 1.0 Plugins Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
 <link rel="home" href="index.html" title="GStreamer Bad Plugins 1.0 Plugins Reference Manual">
 <link rel="up" href="ch01.html" title="gst-plugins-bad Elements">
 <link rel="prev" href="gst-plugins-bad-plugins-dilate.html" title="dilate">
@@ -35,7 +35,7 @@
 </tr></table></div>
 <div class="refsect1">
 <a name="gst-plugins-bad-plugins-dodge.properties"></a><h2>Properties</h2>
-<div class="informaltable"><table border="0">
+<div class="informaltable"><table class="informaltable" border="0">
 <colgroup>
 <col width="150px" class="properties_type">
 <col width="300px" class="properties_name">
@@ -50,7 +50,7 @@
 </div>
 <a name="GstDodge"></a><div class="refsect1">
 <a name="gst-plugins-bad-plugins-dodge.other"></a><h2>Types and Values</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="name">
 <col class="description">
@@ -76,13 +76,13 @@
 <a name="gst-plugins-bad-plugins-dodge.description"></a><h2>Description</h2>
 <p>Dodge saturates the colors of a video stream in realtime.</p>
 <div class="refsect2">
-<a name="id-1.2.25.7.3"></a><h3>Example launch line</h3>
+<a name="id-1.2.26.7.3"></a><h3>Example launch line</h3>
 <div class="informalexample">
   <table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
     <tbody>
       <tr>
         <td class="listing_lines" align="right"><pre>1</pre></td>
-        <td class="listing_code"><pre class="programlisting">gst<span class="gtkdoc opt">-</span>launch <span class="gtkdoc opt">-</span>v videotestsrc <span class="gtkdoc opt">!</span> dodge <span class="gtkdoc opt">!</span> videoconvert <span class="gtkdoc opt">!</span> autovideosink</pre></td>
+        <td class="listing_code"><pre class="programlisting">gst<span class="gtkdoc opt">-</span>launch<span class="gtkdoc opt">-</span><span class="number">1.0</span> <span class="gtkdoc opt">-</span>v videotestsrc <span class="gtkdoc opt">!</span> dodge <span class="gtkdoc opt">!</span> videoconvert <span class="gtkdoc opt">!</span> autovideosink</pre></td>
       </tr>
     </tbody>
   </table>
@@ -92,7 +92,7 @@
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="id-1.2.25.7.4.1"></a><h3>Element Information</h3>
+<a name="id-1.2.26.7.4.1"></a><h3>Element Information</h3>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
@@ -118,7 +118,7 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="id-1.2.25.7.4.2"></a><h3>Element Pads</h3>
+<a name="id-1.2.26.7.4.2"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-dtmfdetect.html b/docs/plugins/html/gst-plugins-bad-plugins-dtmfdetect.html
index 54f4957..f3ec2e0 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-dtmfdetect.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-dtmfdetect.html
@@ -3,7 +3,7 @@
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>dtmfdetect: GStreamer Bad Plugins 1.0 Plugins Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
 <link rel="home" href="index.html" title="GStreamer Bad Plugins 1.0 Plugins Reference Manual">
 <link rel="up" href="ch01.html" title="gst-plugins-bad Elements">
 <link rel="prev" href="gst-plugins-bad-plugins-dodge.html" title="dodge">
@@ -34,7 +34,7 @@
 </tr></table></div>
 <a name="GstDtmfDetect"></a><div class="refsect1">
 <a name="gst-plugins-bad-plugins-dtmfdetect.other"></a><h2>Types and Values</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="name">
 <col class="description">
@@ -60,7 +60,7 @@
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="id-1.2.26.6.2.1"></a><h3>Element Information</h3>
+<a name="id-1.2.27.6.2.1"></a><h3>Element Information</h3>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
@@ -86,7 +86,7 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="id-1.2.26.6.2.2"></a><h3>Element Pads</h3>
+<a name="id-1.2.27.6.2.2"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-dtsdec.html b/docs/plugins/html/gst-plugins-bad-plugins-dtsdec.html
index 7dc3912..e5ff4c1 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-dtsdec.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-dtsdec.html
@@ -3,7 +3,7 @@
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>dtsdec: GStreamer Bad Plugins 1.0 Plugins Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
 <link rel="home" href="index.html" title="GStreamer Bad Plugins 1.0 Plugins Reference Manual">
 <link rel="up" href="ch01.html" title="gst-plugins-bad Elements">
 <link rel="prev" href="gst-plugins-bad-plugins-dtmfdetect.html" title="dtmfdetect">
@@ -35,7 +35,7 @@
 </tr></table></div>
 <div class="refsect1">
 <a name="gst-plugins-bad-plugins-dtsdec.properties"></a><h2>Properties</h2>
-<div class="informaltable"><table border="0">
+<div class="informaltable"><table class="informaltable" border="0">
 <colgroup>
 <col width="150px" class="properties_type">
 <col width="300px" class="properties_name">
@@ -50,7 +50,7 @@
 </div>
 <a name="GstDtsDec"></a><div class="refsect1">
 <a name="gst-plugins-bad-plugins-dtsdec.other"></a><h2>Types and Values</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="name">
 <col class="description">
@@ -76,7 +76,7 @@
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="id-1.2.27.7.2.1"></a><h3>Element Information</h3>
+<a name="id-1.2.28.7.2.1"></a><h3>Element Information</h3>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
@@ -102,7 +102,7 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="id-1.2.27.7.2.2"></a><h3>Element Pads</h3>
+<a name="id-1.2.28.7.2.2"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-dvbsrc.html b/docs/plugins/html/gst-plugins-bad-plugins-dvbsrc.html
index 0bddfdd..efb8f03 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-dvbsrc.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-dvbsrc.html
@@ -3,7 +3,7 @@
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>dvbsrc: GStreamer Bad Plugins 1.0 Plugins Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
 <link rel="home" href="index.html" title="GStreamer Bad Plugins 1.0 Plugins Reference Manual">
 <link rel="up" href="ch01.html" title="gst-plugins-bad Elements">
 <link rel="prev" href="gst-plugins-bad-plugins-dtsdec.html" title="dtsdec">
@@ -36,7 +36,7 @@
 </tr></table></div>
 <div class="refsect1">
 <a name="gst-plugins-bad-plugins-dvbsrc.properties"></a><h2>Properties</h2>
-<div class="informaltable"><table border="0">
+<div class="informaltable"><table class="informaltable" border="0">
 <colgroup>
 <col width="150px" class="properties_type">
 <col width="300px" class="properties_name">
@@ -310,7 +310,7 @@
 </div>
 <div class="refsect1">
 <a name="gst-plugins-bad-plugins-dvbsrc.signals"></a><h2>Signals</h2>
-<div class="informaltable"><table border="0">
+<div class="informaltable"><table class="informaltable" border="0">
 <colgroup>
 <col width="150px" class="signals_return">
 <col width="300px" class="signals_name">
@@ -342,7 +342,7 @@
 </div>
 <a name="GstDvbSrc"></a><div class="refsect1">
 <a name="gst-plugins-bad-plugins-dvbsrc.other"></a><h2>Types and Values</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="name">
 <col class="description">
@@ -369,7 +369,7 @@
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="id-1.2.28.8.2.1"></a><h3>Element Information</h3>
+<a name="id-1.2.29.8.2.1"></a><h3>Element Information</h3>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
@@ -396,7 +396,7 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="id-1.2.28.8.2.2"></a><h3>Element Pads</h3>
+<a name="id-1.2.29.8.2.2"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-dvdspu.html b/docs/plugins/html/gst-plugins-bad-plugins-dvdspu.html
index daf56ba..42babe4 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-dvdspu.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-dvdspu.html
@@ -3,7 +3,7 @@
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>dvdspu: GStreamer Bad Plugins 1.0 Plugins Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
 <link rel="home" href="index.html" title="GStreamer Bad Plugins 1.0 Plugins Reference Manual">
 <link rel="up" href="ch01.html" title="gst-plugins-bad Elements">
 <link rel="prev" href="gst-plugins-bad-plugins-dvbsrc.html" title="dvbsrc">
@@ -34,7 +34,7 @@
 </tr></table></div>
 <a name="GstDVDSpu"></a><div class="refsect1">
 <a name="gst-plugins-bad-plugins-dvdspu.other"></a><h2>Types and Values</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="name">
 <col class="description">
@@ -58,13 +58,13 @@
 <a name="gst-plugins-bad-plugins-dvdspu.description"></a><h2>Description</h2>
 <p>DVD sub picture overlay element.</p>
 <div class="refsect2">
-<a name="id-1.2.29.6.3"></a><h3>Example launch line</h3>
+<a name="id-1.2.30.6.3"></a><h3>Example launch line</h3>
 <div class="informalexample">
   <table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
     <tbody>
       <tr>
         <td class="listing_lines" align="right"><pre>1</pre></td>
-        <td class="listing_code"><pre class="programlisting">FIXME<span class="gtkdoc opt">:</span> gst<span class="gtkdoc opt">-</span>launch <span class="gtkdoc opt">...</span></pre></td>
+        <td class="listing_code"><pre class="programlisting">FIXME<span class="gtkdoc opt">:</span> gst<span class="gtkdoc opt">-</span>launch<span class="gtkdoc opt">-</span><span class="number">1.0</span> <span class="gtkdoc opt">...</span></pre></td>
       </tr>
     </tbody>
   </table>
@@ -74,7 +74,7 @@
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="id-1.2.29.6.4.1"></a><h3>Element Information</h3>
+<a name="id-1.2.30.6.4.1"></a><h3>Element Information</h3>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
@@ -100,7 +100,7 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="id-1.2.29.6.4.2"></a><h3>Element Pads</h3>
+<a name="id-1.2.30.6.4.2"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-edgedetect.html b/docs/plugins/html/gst-plugins-bad-plugins-edgedetect.html
index 112d46a..1c629a9 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-edgedetect.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-edgedetect.html
@@ -3,7 +3,7 @@
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>edgedetect: GStreamer Bad Plugins 1.0 Plugins Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
 <link rel="home" href="index.html" title="GStreamer Bad Plugins 1.0 Plugins Reference Manual">
 <link rel="up" href="ch01.html" title="gst-plugins-bad Elements">
 <link rel="prev" href="gst-plugins-bad-plugins-exclusion.html" title="exclusion">
@@ -36,7 +36,7 @@
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="id-1.2.31.3.2.1"></a><h3>Element Information</h3>
+<a name="id-1.2.32.3.2.1"></a><h3>Element Information</h3>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
@@ -62,7 +62,7 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="id-1.2.31.3.2.2"></a><h3>Element Pads</h3>
+<a name="id-1.2.32.3.2.2"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-exclusion.html b/docs/plugins/html/gst-plugins-bad-plugins-exclusion.html
index 9b228bb..e6de712 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-exclusion.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-exclusion.html
@@ -3,7 +3,7 @@
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>exclusion: GStreamer Bad Plugins 1.0 Plugins Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
 <link rel="home" href="index.html" title="GStreamer Bad Plugins 1.0 Plugins Reference Manual">
 <link rel="up" href="ch01.html" title="gst-plugins-bad Elements">
 <link rel="prev" href="gst-plugins-bad-plugins-dvdspu.html" title="dvdspu">
@@ -35,7 +35,7 @@
 </tr></table></div>
 <div class="refsect1">
 <a name="gst-plugins-bad-plugins-exclusion.properties"></a><h2>Properties</h2>
-<div class="informaltable"><table border="0">
+<div class="informaltable"><table class="informaltable" border="0">
 <colgroup>
 <col width="150px" class="properties_type">
 <col width="300px" class="properties_name">
@@ -57,7 +57,7 @@
 </div>
 <a name="GstExclusion"></a><div class="refsect1">
 <a name="gst-plugins-bad-plugins-exclusion.other"></a><h2>Types and Values</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="name">
 <col class="description">
@@ -83,13 +83,13 @@
 <a name="gst-plugins-bad-plugins-exclusion.description"></a><h2>Description</h2>
 <p>Exclusion saturates the colors of a video stream in realtime.</p>
 <div class="refsect2">
-<a name="id-1.2.30.7.3"></a><h3>Example launch line</h3>
+<a name="id-1.2.31.7.3"></a><h3>Example launch line</h3>
 <div class="informalexample">
   <table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
     <tbody>
       <tr>
         <td class="listing_lines" align="right"><pre>1</pre></td>
-        <td class="listing_code"><pre class="programlisting">gst<span class="gtkdoc opt">-</span>launch <span class="gtkdoc opt">-</span>v videotestsrc <span class="gtkdoc opt">!</span> exclusion <span class="gtkdoc opt">!</span> videoconvert <span class="gtkdoc opt">!</span> autovideosink</pre></td>
+        <td class="listing_code"><pre class="programlisting">gst<span class="gtkdoc opt">-</span>launch<span class="gtkdoc opt">-</span><span class="number">1.0</span> <span class="gtkdoc opt">-</span>v videotestsrc <span class="gtkdoc opt">!</span> exclusion <span class="gtkdoc opt">!</span> videoconvert <span class="gtkdoc opt">!</span> autovideosink</pre></td>
       </tr>
     </tbody>
   </table>
@@ -99,7 +99,7 @@
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="id-1.2.30.7.4.1"></a><h3>Element Information</h3>
+<a name="id-1.2.31.7.4.1"></a><h3>Element Information</h3>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
@@ -125,7 +125,7 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="id-1.2.30.7.4.2"></a><h3>Element Pads</h3>
+<a name="id-1.2.31.7.4.2"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-faac.html b/docs/plugins/html/gst-plugins-bad-plugins-faac.html
index 4f43029..d73de68 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-faac.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-faac.html
@@ -3,7 +3,7 @@
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>faac: GStreamer Bad Plugins 1.0 Plugins Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
 <link rel="home" href="index.html" title="GStreamer Bad Plugins 1.0 Plugins Reference Manual">
 <link rel="up" href="ch01.html" title="gst-plugins-bad Elements">
 <link rel="prev" href="gst-plugins-bad-plugins-edgedetect.html" title="edgedetect">
@@ -35,7 +35,7 @@
 </tr></table></div>
 <div class="refsect1">
 <a name="gst-plugins-bad-plugins-faac.properties"></a><h2>Properties</h2>
-<div class="informaltable"><table border="0">
+<div class="informaltable"><table class="informaltable" border="0">
 <colgroup>
 <col width="150px" class="properties_type">
 <col width="300px" class="properties_name">
@@ -87,7 +87,7 @@
 </div>
 <div class="refsect1">
 <a name="gst-plugins-bad-plugins-faac.other"></a><h2>Types and Values</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="name">
 <col class="description">
@@ -109,7 +109,7 @@
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="id-1.2.32.6.2.1"></a><h3>Element Information</h3>
+<a name="id-1.2.33.6.2.1"></a><h3>Element Information</h3>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
@@ -135,7 +135,7 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="id-1.2.32.6.2.2"></a><h3>Element Pads</h3>
+<a name="id-1.2.33.6.2.2"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
@@ -156,7 +156,27 @@
 </tr>
 <tr>
 <td><p><span class="term">details</span></p></td>
-<td>audio/x-raw, format=(string)S16LE, layout=(string)interleaved, rate=(int){ 8000, 11025, 12000, 16000, 22050, 24000, 32000, 44100, 48000, 64000, 88200, 96000 }, channels=(int)[ 1, 6 ]</td>
+<td>audio/x-raw, format=(string)S16LE, layout=(string)interleaved, rate=(int){ 8000, 11025, 12000, 16000, 22050, 24000, 32000, 44100, 48000, 64000, 88200, 96000 }, channels=(int)1</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> audio/x-raw, format=(string)S16LE, layout=(string)interleaved, rate=(int){ 8000, 11025, 12000, 16000, 22050, 24000, 32000, 44100, 48000, 64000, 88200, 96000 }, channels=(int)2, channel-mask=(bitmask)0x0000000000000003</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> audio/x-raw, format=(string)S16LE, layout=(string)interleaved, rate=(int){ 8000, 11025, 12000, 16000, 22050, 24000, 32000, 44100, 48000, 64000, 88200, 96000 }, channels=(int)3, channel-mask=(bitmask)0x0000000000000007</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> audio/x-raw, format=(string)S16LE, layout=(string)interleaved, rate=(int){ 8000, 11025, 12000, 16000, 22050, 24000, 32000, 44100, 48000, 64000, 88200, 96000 }, channels=(int)4, channel-mask=(bitmask)0x0000000000000107</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> audio/x-raw, format=(string)S16LE, layout=(string)interleaved, rate=(int){ 8000, 11025, 12000, 16000, 22050, 24000, 32000, 44100, 48000, 64000, 88200, 96000 }, channels=(int)5, channel-mask=(bitmask)0x0000000000000037</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> audio/x-raw, format=(string)S16LE, layout=(string)interleaved, rate=(int){ 8000, 11025, 12000, 16000, 22050, 24000, 32000, 44100, 48000, 64000, 88200, 96000 }, channels=(int)6, channel-mask=(bitmask)0x000000000000003f</td>
 </tr>
 </tbody>
 </table></div>
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-faad.html b/docs/plugins/html/gst-plugins-bad-plugins-faad.html
index 403cee7..e57828e 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-faad.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-faad.html
@@ -3,7 +3,7 @@
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>faad: GStreamer Bad Plugins 1.0 Plugins Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
 <link rel="home" href="index.html" title="GStreamer Bad Plugins 1.0 Plugins Reference Manual">
 <link rel="up" href="ch01.html" title="gst-plugins-bad Elements">
 <link rel="prev" href="gst-plugins-bad-plugins-faac.html" title="faac">
@@ -34,7 +34,7 @@
 </tr></table></div>
 <a name="GstFaad"></a><div class="refsect1">
 <a name="gst-plugins-bad-plugins-faad.other"></a><h2>Types and Values</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="name">
 <col class="description">
@@ -60,7 +60,7 @@
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="id-1.2.33.6.2.1"></a><h3>Element Information</h3>
+<a name="id-1.2.34.6.2.1"></a><h3>Element Information</h3>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
@@ -86,7 +86,7 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="id-1.2.33.6.2.2"></a><h3>Element Pads</h3>
+<a name="id-1.2.34.6.2.2"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-faceblur.html b/docs/plugins/html/gst-plugins-bad-plugins-faceblur.html
index 9fd9a38..b45e874 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-faceblur.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-faceblur.html
@@ -3,7 +3,7 @@
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>faceblur: GStreamer Bad Plugins 1.0 Plugins Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
 <link rel="home" href="index.html" title="GStreamer Bad Plugins 1.0 Plugins Reference Manual">
 <link rel="up" href="ch01.html" title="gst-plugins-bad Elements">
 <link rel="prev" href="gst-plugins-bad-plugins-faad.html" title="faad">
@@ -36,7 +36,7 @@
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="id-1.2.34.3.2.1"></a><h3>Element Information</h3>
+<a name="id-1.2.35.3.2.1"></a><h3>Element Information</h3>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
@@ -62,7 +62,7 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="id-1.2.34.3.2.2"></a><h3>Element Pads</h3>
+<a name="id-1.2.35.3.2.2"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-facedetect.html b/docs/plugins/html/gst-plugins-bad-plugins-facedetect.html
index f972681..4477735 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-facedetect.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-facedetect.html
@@ -3,7 +3,7 @@
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>facedetect: GStreamer Bad Plugins 1.0 Plugins Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
 <link rel="home" href="index.html" title="GStreamer Bad Plugins 1.0 Plugins Reference Manual">
 <link rel="up" href="ch01.html" title="gst-plugins-bad Elements">
 <link rel="prev" href="gst-plugins-bad-plugins-faceblur.html" title="faceblur">
@@ -36,7 +36,7 @@
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="id-1.2.35.3.2.1"></a><h3>Element Information</h3>
+<a name="id-1.2.36.3.2.1"></a><h3>Element Information</h3>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
@@ -62,7 +62,7 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="id-1.2.35.3.2.2"></a><h3>Element Pads</h3>
+<a name="id-1.2.36.3.2.2"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-festival.html b/docs/plugins/html/gst-plugins-bad-plugins-festival.html
index 4ce0857..9c61c46 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-festival.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-festival.html
@@ -3,7 +3,7 @@
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>festival: GStreamer Bad Plugins 1.0 Plugins Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
 <link rel="home" href="index.html" title="GStreamer Bad Plugins 1.0 Plugins Reference Manual">
 <link rel="up" href="ch01.html" title="gst-plugins-bad Elements">
 <link rel="prev" href="gst-plugins-bad-plugins-facedetect.html" title="facedetect">
@@ -34,7 +34,7 @@
 </tr></table></div>
 <a name="GstFestival"></a><div class="refsect1">
 <a name="gst-plugins-bad-plugins-festival.other"></a><h2>Types and Values</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="name">
 <col class="description">
@@ -61,13 +61,13 @@
 in server mode, started as </p>
 <pre class="screen">festival --server</pre>
 <div class="refsect2">
-<a name="id-1.2.36.6.5"></a><h3>Example pipeline</h3>
+<a name="id-1.2.37.6.5"></a><h3>Example pipeline</h3>
 <div class="informalexample">
   <table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
     <tbody>
       <tr>
         <td class="listing_lines" align="right"><pre>1</pre></td>
-        <td class="listing_code"><pre class="programlisting">echo <span class="string">'Hello G-Streamer!'</span> <span class="gtkdoc opt">|</span> gst<span class="gtkdoc opt">-</span>launch fdsrc fd<span class="gtkdoc opt">=</span><span class="number">0</span> <span class="gtkdoc opt">!</span> festival <span class="gtkdoc opt">!</span> wavparse <span class="gtkdoc opt">!</span> audioconvert <span class="gtkdoc opt">!</span> alsasink</pre></td>
+        <td class="listing_code"><pre class="programlisting">echo <span class="string">'Hello G-Streamer!'</span> <span class="gtkdoc opt">|</span> gst<span class="gtkdoc opt">-</span>launch<span class="gtkdoc opt">-</span><span class="number">1.0</span> fdsrc fd<span class="gtkdoc opt">=</span><span class="number">0</span> <span class="gtkdoc opt">!</span> festival <span class="gtkdoc opt">!</span> wavparse <span class="gtkdoc opt">!</span> audioconvert <span class="gtkdoc opt">!</span> alsasink</pre></td>
       </tr>
     </tbody>
   </table>
@@ -77,7 +77,7 @@
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="id-1.2.36.6.6.1"></a><h3>Element Information</h3>
+<a name="id-1.2.37.6.6.1"></a><h3>Element Information</h3>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
@@ -103,7 +103,7 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="id-1.2.36.6.6.2"></a><h3>Element Pads</h3>
+<a name="id-1.2.37.6.6.2"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-fisheye.html b/docs/plugins/html/gst-plugins-bad-plugins-fisheye.html
index 41015ff..97f67d4 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-fisheye.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-fisheye.html
@@ -3,7 +3,7 @@
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>fisheye: GStreamer Bad Plugins 1.0 Plugins Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
 <link rel="home" href="index.html" title="GStreamer Bad Plugins 1.0 Plugins Reference Manual">
 <link rel="up" href="ch01.html" title="gst-plugins-bad Elements">
 <link rel="prev" href="gst-plugins-bad-plugins-festival.html" title="festival">
@@ -34,7 +34,7 @@
 </tr></table></div>
 <a name="GstFisheye"></a><div class="refsect1">
 <a name="gst-plugins-bad-plugins-fisheye.other"></a><h2>Types and Values</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="name">
 <col class="description">
@@ -59,10 +59,26 @@
 </div>
 <div class="refsect1">
 <a name="gst-plugins-bad-plugins-fisheye.description"></a><h2>Description</h2>
+<p>Fisheye is a geometric image transform element. It simulates a fisheye lens
+by zooming on the center of the image and compressing the edges.</p>
+<div class="refsect2">
+<a name="id-1.2.38.6.3"></a><h3>Example launch line</h3>
+<div class="informalexample">
+  <table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
+    <tbody>
+      <tr>
+        <td class="listing_lines" align="right"><pre>1</pre></td>
+        <td class="listing_code"><pre class="programlisting">gst<span class="gtkdoc opt">-</span>launch<span class="gtkdoc opt">-</span><span class="number">1.0</span> <span class="gtkdoc opt">-</span>v videotestsrc <span class="gtkdoc opt">!</span> fisheye <span class="gtkdoc opt">!</span> videoconvert <span class="gtkdoc opt">!</span> autovideosink</pre></td>
+      </tr>
+    </tbody>
+  </table>
+</div>
+
+</div>
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="id-1.2.37.6.2.1"></a><h3>Element Information</h3>
+<a name="id-1.2.38.6.4.1"></a><h3>Element Information</h3>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
@@ -88,7 +104,7 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="id-1.2.37.6.2.2"></a><h3>Element Pads</h3>
+<a name="id-1.2.38.6.4.2"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
@@ -151,6 +167,10 @@
 <pre class="programlisting">struct GstFisheye;</pre>
 </div>
 </div>
+<div class="refsect1">
+<a name="gst-plugins-bad-plugins-fisheye.see-also"></a><h2>See Also</h2>
+<p>geometrictransform</p>
+</div>
 </div>
 <div class="footer">
 <hr>Generated by GTK-Doc V1.24</div>
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-fpsdisplaysink.html b/docs/plugins/html/gst-plugins-bad-plugins-fpsdisplaysink.html
index 1bb739d..acb1bcf 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-fpsdisplaysink.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-fpsdisplaysink.html
@@ -3,7 +3,7 @@
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>fpsdisplaysink: GStreamer Bad Plugins 1.0 Plugins Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
 <link rel="home" href="index.html" title="GStreamer Bad Plugins 1.0 Plugins Reference Manual">
 <link rel="up" href="ch01.html" title="gst-plugins-bad Elements">
 <link rel="prev" href="gst-plugins-bad-plugins-fisheye.html" title="fisheye">
@@ -37,7 +37,7 @@
 </tr></table></div>
 <div class="refsect1">
 <a name="gst-plugins-bad-plugins-fpsdisplaysink.properties"></a><h2>Properties</h2>
-<div class="informaltable"><table border="0">
+<div class="informaltable"><table class="informaltable" border="0">
 <colgroup>
 <col width="150px" class="properties_type">
 <col width="300px" class="properties_name">
@@ -106,7 +106,7 @@
 </div>
 <div class="refsect1">
 <a name="gst-plugins-bad-plugins-fpsdisplaysink.signals"></a><h2>Signals</h2>
-<div class="informaltable"><table border="0">
+<div class="informaltable"><table class="informaltable" border="0">
 <colgroup>
 <col width="150px" class="signals_return">
 <col width="300px" class="signals_name">
@@ -121,7 +121,7 @@
 </div>
 <a name="GstFPSDisplaySink"></a><div class="refsect1">
 <a name="gst-plugins-bad-plugins-fpsdisplaysink.other"></a><h2>Types and Values</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="name">
 <col class="description">
@@ -152,7 +152,7 @@
 <a name="gst-plugins-bad-plugins-fpsdisplaysink.description"></a><h2>Description</h2>
 <p>Can display the current and average framerate as a testoverlay or on stdout.</p>
 <div class="refsect2">
-<a name="id-1.2.38.9.3"></a><h3>Example launch lines</h3>
+<a name="id-1.2.39.9.3"></a><h3>Example launch lines</h3>
 <div class="informalexample">
   <table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
     <tbody>
@@ -161,10 +161,10 @@
 2
 3
 4</pre></td>
-        <td class="listing_code"><pre class="programlisting">gst<span class="gtkdoc opt">-</span>launch videotestsrc <span class="gtkdoc opt">!</span> fpsdisplaysink
-gst<span class="gtkdoc opt">-</span>launch videotestsrc <span class="gtkdoc opt">!</span> fpsdisplaysink text<span class="gtkdoc opt">-</span>overlay<span class="gtkdoc opt">=</span><span class="keyword">false</span>
-gst<span class="gtkdoc opt">-</span>launch filesrc location<span class="gtkdoc opt">=</span>video<span class="gtkdoc opt">.</span>avi <span class="gtkdoc opt">!</span> decodebin name<span class="gtkdoc opt">=</span>d <span class="gtkdoc opt">!</span> queue <span class="gtkdoc opt">!</span> fpsdisplaysink d<span class="gtkdoc opt">. !</span> queue <span class="gtkdoc opt">!</span> fakesink sync<span class="gtkdoc opt">=</span><span class="keyword">true</span>
-gst<span class="gtkdoc opt">-</span>launch playbin uri<span class="gtkdoc opt">=</span>file<span class="gtkdoc opt">:</span><span class="gtkdoc slc">///path/to/video.avi video-sink=&quot;fpsdisplaysink&quot; audio-sink=fakesink</span></pre></td>
+        <td class="listing_code"><pre class="programlisting">gst<span class="gtkdoc opt">-</span>launch<span class="gtkdoc opt">-</span><span class="number">1.0</span> videotestsrc <span class="gtkdoc opt">!</span> fpsdisplaysink
+gst<span class="gtkdoc opt">-</span>launch<span class="gtkdoc opt">-</span><span class="number">1.0</span> videotestsrc <span class="gtkdoc opt">!</span> fpsdisplaysink text<span class="gtkdoc opt">-</span>overlay<span class="gtkdoc opt">=</span><span class="keyword">false</span>
+gst<span class="gtkdoc opt">-</span>launch<span class="gtkdoc opt">-</span><span class="number">1.0</span> filesrc location<span class="gtkdoc opt">=</span>video<span class="gtkdoc opt">.</span>avi <span class="gtkdoc opt">!</span> decodebin name<span class="gtkdoc opt">=</span>d <span class="gtkdoc opt">!</span> queue <span class="gtkdoc opt">!</span> fpsdisplaysink d<span class="gtkdoc opt">. !</span> queue <span class="gtkdoc opt">!</span> fakesink sync<span class="gtkdoc opt">=</span><span class="keyword">true</span>
+gst<span class="gtkdoc opt">-</span>launch<span class="gtkdoc opt">-</span><span class="number">1.0</span> playbin uri<span class="gtkdoc opt">=</span>file<span class="gtkdoc opt">:</span><span class="gtkdoc slc">///path/to/video.avi video-sink=&quot;fpsdisplaysink&quot; audio-sink=fakesink</span></pre></td>
       </tr>
     </tbody>
   </table>
@@ -174,7 +174,7 @@
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="id-1.2.38.9.4.1"></a><h3>Element Information</h3>
+<a name="id-1.2.39.9.4.1"></a><h3>Element Information</h3>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
@@ -200,7 +200,7 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="id-1.2.38.9.4.2"></a><h3>Element Pads</h3>
+<a name="id-1.2.39.9.4.2"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
@@ -343,8 +343,8 @@
                <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a>           user_data)</pre>
 <p>Signals the application about the measured fps</p>
 <div class="refsect3">
-<a name="id-1.2.38.13.2.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="id-1.2.39.13.2.5"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
 <col class="parameters_description">
@@ -380,7 +380,6 @@
 </table></div>
 </div>
 <p>Flags: <a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS">Run Last</a></p>
-<p class="since">Since: 0.10.20</p>
 </div>
 </div>
 </div>
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-gaussianblur.html b/docs/plugins/html/gst-plugins-bad-plugins-gaussianblur.html
index db5814c..0f46d95 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-gaussianblur.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-gaussianblur.html
@@ -3,7 +3,7 @@
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>gaussianblur: GStreamer Bad Plugins 1.0 Plugins Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
 <link rel="home" href="index.html" title="GStreamer Bad Plugins 1.0 Plugins Reference Manual">
 <link rel="up" href="ch01.html" title="gst-plugins-bad Elements">
 <link rel="prev" href="gst-plugins-bad-plugins-fpsdisplaysink.html" title="fpsdisplaysink">
@@ -35,13 +35,13 @@
 <a name="gst-plugins-bad-plugins-gaussianblur.description"></a><h2>Description</h2>
 <p>Gaussianblur blurs the video stream in realtime.</p>
 <div class="refsect2">
-<a name="id-1.2.39.3.3"></a><h3>Example launch line</h3>
+<a name="id-1.2.40.3.3"></a><h3>Example launch line</h3>
 <div class="informalexample">
   <table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
     <tbody>
       <tr>
         <td class="listing_lines" align="right"><pre>1</pre></td>
-        <td class="listing_code"><pre class="programlisting">gst<span class="gtkdoc opt">-</span>launch <span class="gtkdoc opt">-</span>v videotestsrc <span class="gtkdoc opt">!</span> gaussianblur <span class="gtkdoc opt">!</span> videoconvert <span class="gtkdoc opt">!</span> autovideosink</pre></td>
+        <td class="listing_code"><pre class="programlisting">gst<span class="gtkdoc opt">-</span>launch<span class="gtkdoc opt">-</span><span class="number">1.0</span> <span class="gtkdoc opt">-</span>v videotestsrc <span class="gtkdoc opt">!</span> gaussianblur <span class="gtkdoc opt">!</span> videoconvert <span class="gtkdoc opt">!</span> autovideosink</pre></td>
       </tr>
     </tbody>
   </table>
@@ -51,7 +51,7 @@
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="id-1.2.39.3.4.1"></a><h3>Element Information</h3>
+<a name="id-1.2.40.3.4.1"></a><h3>Element Information</h3>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
@@ -77,7 +77,7 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="id-1.2.39.3.4.2"></a><h3>Element Pads</h3>
+<a name="id-1.2.40.3.4.2"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-jpegparse.html b/docs/plugins/html/gst-plugins-bad-plugins-jpegparse.html
index 7eefe8e..14ae23f 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-jpegparse.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-jpegparse.html
@@ -3,7 +3,7 @@
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>jpegparse: GStreamer Bad Plugins 1.0 Plugins Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
 <link rel="home" href="index.html" title="GStreamer Bad Plugins 1.0 Plugins Reference Manual">
 <link rel="up" href="ch01.html" title="gst-plugins-bad Elements">
 <link rel="prev" href="gst-plugins-bad-plugins-gaussianblur.html" title="gaussianblur">
@@ -34,7 +34,7 @@
 </tr></table></div>
 <div class="refsect1">
 <a name="gst-plugins-bad-plugins-jpegparse.functions"></a><h2>Functions</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="functions_return">
 <col class="functions_name">
@@ -77,7 +77,7 @@
 </div>
 <a name="GstJpegParse"></a><div class="refsect1">
 <a name="gst-plugins-bad-plugins-jpegparse.other"></a><h2>Types and Values</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="name">
 <col class="description">
@@ -115,13 +115,13 @@
 image header searching for image properties such as width and height
 among others. Jpegparse can also extract metadata (e.g. xmp).</p>
 <div class="refsect2">
-<a name="id-1.2.40.7.3"></a><h3>Example launch line</h3>
+<a name="id-1.2.41.7.3"></a><h3>Example launch line</h3>
 <div class="informalexample">
   <table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
     <tbody>
       <tr>
         <td class="listing_lines" align="right"><pre>1</pre></td>
-        <td class="listing_code"><pre class="programlisting">gst<span class="gtkdoc opt">-</span>launch <span class="gtkdoc opt">-</span>v souphttpsrc location<span class="gtkdoc opt">=... !</span> jpegparse <span class="gtkdoc opt">!</span> matroskamux <span class="gtkdoc opt">!</span> filesink location<span class="gtkdoc opt">=...</span></pre></td>
+        <td class="listing_code"><pre class="programlisting">gst<span class="gtkdoc opt">-</span>launch<span class="gtkdoc opt">-</span><span class="number">1.0</span> <span class="gtkdoc opt">-</span>v souphttpsrc location<span class="gtkdoc opt">=... !</span> jpegparse <span class="gtkdoc opt">!</span> matroskamux <span class="gtkdoc opt">!</span> filesink location<span class="gtkdoc opt">=...</span></pre></td>
       </tr>
     </tbody>
   </table>
@@ -133,7 +133,7 @@
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="id-1.2.40.7.4.1"></a><h3>Element Information</h3>
+<a name="id-1.2.41.7.4.1"></a><h3>Element Information</h3>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
@@ -159,7 +159,7 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="id-1.2.40.7.4.2"></a><h3>Element Pads</h3>
+<a name="id-1.2.41.7.4.2"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-kaleidoscope.html b/docs/plugins/html/gst-plugins-bad-plugins-kaleidoscope.html
index 2f3812e..27bab3d 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-kaleidoscope.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-kaleidoscope.html
@@ -3,7 +3,7 @@
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>kaleidoscope: GStreamer Bad Plugins 1.0 Plugins Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
 <link rel="home" href="index.html" title="GStreamer Bad Plugins 1.0 Plugins Reference Manual">
 <link rel="up" href="ch01.html" title="gst-plugins-bad Elements">
 <link rel="prev" href="gst-plugins-bad-plugins-jpegparse.html" title="jpegparse">
@@ -35,7 +35,7 @@
 </tr></table></div>
 <div class="refsect1">
 <a name="gst-plugins-bad-plugins-kaleidoscope.properties"></a><h2>Properties</h2>
-<div class="informaltable"><table border="0">
+<div class="informaltable"><table class="informaltable" border="0">
 <colgroup>
 <col width="150px" class="properties_type">
 <col width="300px" class="properties_name">
@@ -62,7 +62,7 @@
 </div>
 <a name="GstKaleidoscope"></a><div class="refsect1">
 <a name="gst-plugins-bad-plugins-kaleidoscope.other"></a><h2>Types and Values</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="name">
 <col class="description">
@@ -88,10 +88,26 @@
 </div>
 <div class="refsect1">
 <a name="gst-plugins-bad-plugins-kaleidoscope.description"></a><h2>Description</h2>
+<p>The kaleidscope element applies 'kaleidoscope' geometric transform to the
+image.</p>
+<div class="refsect2">
+<a name="id-1.2.42.7.3"></a><h3>Example launch line</h3>
+<div class="informalexample">
+  <table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
+    <tbody>
+      <tr>
+        <td class="listing_lines" align="right"><pre>1</pre></td>
+        <td class="listing_code"><pre class="programlisting">gst<span class="gtkdoc opt">-</span>launch<span class="gtkdoc opt">-</span><span class="number">1.0</span> <span class="gtkdoc opt">-</span>v videotestsrc <span class="gtkdoc opt">!</span> kaleidoscope <span class="gtkdoc opt">!</span> videoconvert <span class="gtkdoc opt">!</span> autovideosink</pre></td>
+      </tr>
+    </tbody>
+  </table>
+</div>
+
+</div>
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="id-1.2.41.7.2.1"></a><h3>Element Information</h3>
+<a name="id-1.2.42.7.4.1"></a><h3>Element Information</h3>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
@@ -117,7 +133,7 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="id-1.2.41.7.2.2"></a><h3>Element Pads</h3>
+<a name="id-1.2.42.7.4.2"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
@@ -207,6 +223,10 @@
 <p>Default value: 3</p>
 </div>
 </div>
+<div class="refsect1">
+<a name="gst-plugins-bad-plugins-kaleidoscope.see-also"></a><h2>See Also</h2>
+<p>geometrictransform</p>
+</div>
 </div>
 <div class="footer">
 <hr>Generated by GTK-Doc V1.24</div>
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-liveadder.html b/docs/plugins/html/gst-plugins-bad-plugins-liveadder.html
index ffba3c2..de1349b 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-liveadder.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-liveadder.html
@@ -3,7 +3,7 @@
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>liveadder: GStreamer Bad Plugins 1.0 Plugins Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
 <link rel="home" href="index.html" title="GStreamer Bad Plugins 1.0 Plugins Reference Manual">
 <link rel="up" href="ch01.html" title="gst-plugins-bad Elements">
 <link rel="prev" href="gst-plugins-bad-plugins-kaleidoscope.html" title="kaleidoscope">
@@ -15,9 +15,7 @@
 <table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="5"><tr valign="middle">
 <td width="100%" align="left" class="shortcuts">
 <a href="#" class="shortcut">Top</a><span id="nav_description">  <span class="dim">|</span> 
-                  <a href="#gst-plugins-bad-plugins-liveadder.description" class="shortcut">Description</a></span><span id="nav_hierarchy">  <span class="dim">|</span> 
-                  <a href="#gst-plugins-bad-plugins-liveadder.object-hierarchy" class="shortcut">Object Hierarchy</a></span><span id="nav_properties">  <span class="dim">|</span> 
-                  <a href="#gst-plugins-bad-plugins-liveadder.properties" class="shortcut">Properties</a></span>
+                  <a href="#gst-plugins-bad-plugins-liveadder.description" class="shortcut">Description</a></span>
 </td>
 <td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
 <td><a accesskey="u" href="ch01.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
@@ -34,52 +32,11 @@
 <td class="gallery_image" valign="top" align="right"></td>
 </tr></table></div>
 <div class="refsect1">
-<a name="gst-plugins-bad-plugins-liveadder.properties"></a><h2>Properties</h2>
-<div class="informaltable"><table border="0">
-<colgroup>
-<col width="150px" class="properties_type">
-<col width="300px" class="properties_name">
-<col width="200px" class="properties_flags">
-</colgroup>
-<tbody><tr>
-<td class="property_type"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a></td>
-<td class="property_name"><a class="link" href="gst-plugins-bad-plugins-liveadder.html#GstLiveAdder--latency" title="The “latency” property">latency</a></td>
-<td class="property_flags">Read / Write</td>
-</tr></tbody>
-</table></div>
-</div>
-<a name="GstLiveAdder"></a><div class="refsect1">
-<a name="gst-plugins-bad-plugins-liveadder.other"></a><h2>Types and Values</h2>
-<div class="informaltable"><table width="100%" border="0">
-<colgroup>
-<col width="150px" class="name">
-<col class="description">
-</colgroup>
-<tbody><tr>
-<td class="datatype_keyword">struct</td>
-<td class="function_name"><a class="link" href="gst-plugins-bad-plugins-liveadder.html#GstLiveAdder-struct" title="struct GstLiveAdder">GstLiveAdder</a></td>
-</tr></tbody>
-</table></div>
-</div>
-<div class="refsect1">
-<a name="gst-plugins-bad-plugins-liveadder.object-hierarchy"></a><h2>Object Hierarchy</h2>
-<pre class="screen">    <a href="https://developer.gnome.org/gobject/unstable/gobject-The-Base-Object-Type.html#GObject">GObject</a>
-    <span class="lineart">╰──</span> <a href="https://developer.gnome.org/gobject/unstable/gobject-The-Base-Object-Type.html#GInitiallyUnowned">GInitiallyUnowned</a>
-        <span class="lineart">╰──</span> <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstObject.html">GstObject</a>
-            <span class="lineart">╰──</span> <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html">GstElement</a>
-                <span class="lineart">╰──</span> GstLiveAdder
-</pre>
-</div>
-<div class="refsect1">
 <a name="gst-plugins-bad-plugins-liveadder.description"></a><h2>Description</h2>
-<p>The live adder allows to mix several streams into one by adding the data.
-Mixed data is clamped to the min/max values of the data format.</p>
-<p>Unlike the adder, the liveadder mixes the streams according the their
-timestamps and waits for some milli-seconds before trying doing the mixing.</p>
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="id-1.2.42.7.4.1"></a><h3>Element Information</h3>
+<a name="id-1.2.43.3.2.1"></a><h3>Element Information</h3>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
@@ -89,12 +46,12 @@
 <tr>
 <td><p><span class="term">plugin</span></p></td>
 <td>
-            <a class="link" href="gst-plugins-bad-plugins-plugin-liveadder.html#plugin-liveadder">liveadder</a>
+            <a class="link" href="gst-plugins-bad-plugins-plugin-audiomixer.html#plugin-audiomixer">audiomixer</a>
           </td>
 </tr>
 <tr>
 <td><p><span class="term">author</span></p></td>
-<td>Olivier Crete &lt;olivier.crete@collabora.co.uk&gt;</td>
+<td>Sebastian Dröge &lt;sebastian@centricular.com&gt;</td>
 </tr>
 <tr>
 <td><p><span class="term">class</span></p></td>
@@ -105,7 +62,7 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="id-1.2.42.7.4.2"></a><h3>Element Pads</h3>
+<a name="id-1.2.43.3.2.2"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
@@ -126,7 +83,7 @@
 </tr>
 <tr>
 <td><p><span class="term">details</span></p></td>
-<td>audio/x-raw, format=(string){ S8, U8, S16LE, U16LE, S32LE, U32LE, F32LE, F64LE }, rate=(int)[ 1, 2147483647 ], channels=(int)[ 1, 2147483647 ]</td>
+<td>audio/x-raw, format=(string){ S32LE, U32LE, S16LE, U16LE, S8, U8, F32LE, F64LE }, rate=(int)[ 1, 2147483647 ], channels=(int)[ 1, 2147483647 ], layout=(string){ interleaved, non-interleaved }</td>
 </tr>
 </tbody>
 </table></div>
@@ -150,7 +107,7 @@
 </tr>
 <tr>
 <td><p><span class="term">details</span></p></td>
-<td>audio/x-raw, format=(string){ S8, U8, S16LE, U16LE, S32LE, U32LE, F32LE, F64LE }, rate=(int)[ 1, 2147483647 ], channels=(int)[ 1, 2147483647 ]</td>
+<td>audio/x-raw, format=(string){ S32LE, U32LE, S16LE, U16LE, S8, U8, F32LE, F64LE }, rate=(int)[ 1, 2147483647 ], channels=(int)[ 1, 2147483647 ], layout=(string){ interleaved, non-interleaved }</td>
 </tr>
 </tbody>
 </table></div>
@@ -163,25 +120,6 @@
 </div>
 <div class="refsect1">
 <a name="gst-plugins-bad-plugins-liveadder.other_details"></a><h2>Types and Values</h2>
-<div class="refsect2">
-<a name="GstLiveAdder-struct"></a><h3>struct GstLiveAdder</h3>
-<pre class="programlisting">struct GstLiveAdder;</pre>
-<p>The adder object structure.</p>
-</div>
-</div>
-<div class="refsect1">
-<a name="gst-plugins-bad-plugins-liveadder.property-details"></a><h2>Property Details</h2>
-<div class="refsect2">
-<a name="GstLiveAdder--latency"></a><h3>The <code class="literal">“latency”</code> property</h3>
-<pre class="programlisting">  “latency”                  <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a></pre>
-<p>Amount of data to buffer (in milliseconds).</p>
-<p>Flags: Read / Write</p>
-<p>Default value: 60</p>
-</div>
-</div>
-<div class="refsect1">
-<a name="gst-plugins-bad-plugins-liveadder.see-also"></a><h2>See Also</h2>
-<p>adder</p>
 </div>
 </div>
 <div class="footer">
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-marble.html b/docs/plugins/html/gst-plugins-bad-plugins-marble.html
index 63dc5f6..6cf3c0f 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-marble.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-marble.html
@@ -3,7 +3,7 @@
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>marble: GStreamer Bad Plugins 1.0 Plugins Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
 <link rel="home" href="index.html" title="GStreamer Bad Plugins 1.0 Plugins Reference Manual">
 <link rel="up" href="ch01.html" title="gst-plugins-bad Elements">
 <link rel="prev" href="gst-plugins-bad-plugins-liveadder.html" title="liveadder">
@@ -35,7 +35,7 @@
 </tr></table></div>
 <div class="refsect1">
 <a name="gst-plugins-bad-plugins-marble.properties"></a><h2>Properties</h2>
-<div class="informaltable"><table border="0">
+<div class="informaltable"><table class="informaltable" border="0">
 <colgroup>
 <col width="150px" class="properties_type">
 <col width="300px" class="properties_name">
@@ -67,7 +67,7 @@
 </div>
 <a name="GstMarble"></a><div class="refsect1">
 <a name="gst-plugins-bad-plugins-marble.other"></a><h2>Types and Values</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="name">
 <col class="description">
@@ -92,10 +92,26 @@
 </div>
 <div class="refsect1">
 <a name="gst-plugins-bad-plugins-marble.description"></a><h2>Description</h2>
+<p>Marble is a geometric image transform element. It applies a marbling effect
+to the image.</p>
+<div class="refsect2">
+<a name="id-1.2.44.7.3"></a><h3>Example launch line</h3>
+<div class="informalexample">
+  <table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
+    <tbody>
+      <tr>
+        <td class="listing_lines" align="right"><pre>1</pre></td>
+        <td class="listing_code"><pre class="programlisting">gst<span class="gtkdoc opt">-</span>launch<span class="gtkdoc opt">-</span><span class="number">1.0</span> <span class="gtkdoc opt">-</span>v videotestsrc <span class="gtkdoc opt">!</span> marble <span class="gtkdoc opt">!</span> videoconvert <span class="gtkdoc opt">!</span> autovideosink</pre></td>
+      </tr>
+    </tbody>
+  </table>
+</div>
+
+</div>
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="id-1.2.43.7.2.1"></a><h3>Element Information</h3>
+<a name="id-1.2.44.7.4.1"></a><h3>Element Information</h3>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
@@ -121,7 +137,7 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="id-1.2.43.7.2.2"></a><h3>Element Pads</h3>
+<a name="id-1.2.44.7.4.2"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
@@ -222,6 +238,10 @@
 <p>Default value: 4</p>
 </div>
 </div>
+<div class="refsect1">
+<a name="gst-plugins-bad-plugins-marble.see-also"></a><h2>See Also</h2>
+<p>geometrictransform</p>
+</div>
 </div>
 <div class="footer">
 <hr>Generated by GTK-Doc V1.24</div>
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-mimdec.html b/docs/plugins/html/gst-plugins-bad-plugins-mimdec.html
index e8f3aa0..73f0c72 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-mimdec.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-mimdec.html
@@ -3,7 +3,7 @@
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>mimdec: GStreamer Bad Plugins 1.0 Plugins Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
 <link rel="home" href="index.html" title="GStreamer Bad Plugins 1.0 Plugins Reference Manual">
 <link rel="up" href="ch01.html" title="gst-plugins-bad Elements">
 <link rel="prev" href="gst-plugins-bad-plugins-mimenc.html" title="mimenc">
@@ -34,7 +34,7 @@
 </tr></table></div>
 <a name="GstMimDec"></a><div class="refsect1">
 <a name="gst-plugins-bad-plugins-mimdec.other"></a><h2>Types and Values</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="name">
 <col class="description">
@@ -59,7 +59,7 @@
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="id-1.2.45.6.2.1"></a><h3>Element Information</h3>
+<a name="id-1.2.46.6.2.1"></a><h3>Element Information</h3>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
@@ -85,7 +85,7 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="id-1.2.45.6.2.2"></a><h3>Element Pads</h3>
+<a name="id-1.2.46.6.2.2"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-mimenc.html b/docs/plugins/html/gst-plugins-bad-plugins-mimenc.html
index 649662f..8cf5003 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-mimenc.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-mimenc.html
@@ -3,7 +3,7 @@
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>mimenc: GStreamer Bad Plugins 1.0 Plugins Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
 <link rel="home" href="index.html" title="GStreamer Bad Plugins 1.0 Plugins Reference Manual">
 <link rel="up" href="ch01.html" title="gst-plugins-bad Elements">
 <link rel="prev" href="gst-plugins-bad-plugins-marble.html" title="marble">
@@ -35,7 +35,7 @@
 </tr></table></div>
 <div class="refsect1">
 <a name="gst-plugins-bad-plugins-mimenc.properties"></a><h2>Properties</h2>
-<div class="informaltable"><table border="0">
+<div class="informaltable"><table class="informaltable" border="0">
 <colgroup>
 <col width="150px" class="properties_type">
 <col width="300px" class="properties_name">
@@ -50,7 +50,7 @@
 </div>
 <a name="GstMimEnc"></a><div class="refsect1">
 <a name="gst-plugins-bad-plugins-mimenc.other"></a><h2>Types and Values</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="name">
 <col class="description">
@@ -75,7 +75,7 @@
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="id-1.2.44.7.2.1"></a><h3>Element Information</h3>
+<a name="id-1.2.45.7.2.1"></a><h3>Element Information</h3>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
@@ -101,7 +101,7 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="id-1.2.44.7.2.2"></a><h3>Element Pads</h3>
+<a name="id-1.2.45.7.2.2"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-mirror.html b/docs/plugins/html/gst-plugins-bad-plugins-mirror.html
index e290bc0..e4b68c2 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-mirror.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-mirror.html
@@ -3,7 +3,7 @@
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>mirror: GStreamer Bad Plugins 1.0 Plugins Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
 <link rel="home" href="index.html" title="GStreamer Bad Plugins 1.0 Plugins Reference Manual">
 <link rel="up" href="ch01.html" title="gst-plugins-bad Elements">
 <link rel="prev" href="gst-plugins-bad-plugins-mimdec.html" title="mimdec">
@@ -35,7 +35,7 @@
 </tr></table></div>
 <div class="refsect1">
 <a name="gst-plugins-bad-plugins-mirror.properties"></a><h2>Properties</h2>
-<div class="informaltable"><table border="0">
+<div class="informaltable"><table class="informaltable" border="0">
 <colgroup>
 <col width="150px" class="properties_type">
 <col width="300px" class="properties_name">
@@ -50,7 +50,7 @@
 </div>
 <a name="GstMirror"></a><div class="refsect1">
 <a name="gst-plugins-bad-plugins-mirror.other"></a><h2>Types and Values</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="name">
 <col class="description">
@@ -75,10 +75,26 @@
 </div>
 <div class="refsect1">
 <a name="gst-plugins-bad-plugins-mirror.description"></a><h2>Description</h2>
+<p>Mirror is a geometric transform element. It splits the image into two halves
+and reflects one over each other.</p>
+<div class="refsect2">
+<a name="id-1.2.47.7.3"></a><h3>Example launch line</h3>
+<div class="informalexample">
+  <table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
+    <tbody>
+      <tr>
+        <td class="listing_lines" align="right"><pre>1</pre></td>
+        <td class="listing_code"><pre class="programlisting">gst<span class="gtkdoc opt">-</span>launch<span class="gtkdoc opt">-</span><span class="number">1.0</span> <span class="gtkdoc opt">-</span>v videotestsrc <span class="gtkdoc opt">!</span> mirror <span class="gtkdoc opt">!</span> videoconvert <span class="gtkdoc opt">!</span> autovideosink</pre></td>
+      </tr>
+    </tbody>
+  </table>
+</div>
+
+</div>
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="id-1.2.46.7.2.1"></a><h3>Element Information</h3>
+<a name="id-1.2.47.7.4.1"></a><h3>Element Information</h3>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
@@ -104,7 +120,7 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="id-1.2.46.7.2.2"></a><h3>Element Pads</h3>
+<a name="id-1.2.47.7.4.2"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
@@ -177,6 +193,10 @@
 <p>Default value: Split horizontally and reflect left into right</p>
 </div>
 </div>
+<div class="refsect1">
+<a name="gst-plugins-bad-plugins-mirror.see-also"></a><h2>See Also</h2>
+<p>geometrictransform</p>
+</div>
 </div>
 <div class="footer">
 <hr>Generated by GTK-Doc V1.24</div>
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-modplug.html b/docs/plugins/html/gst-plugins-bad-plugins-modplug.html
index 5829ac1..ebf68f8 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-modplug.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-modplug.html
@@ -3,7 +3,7 @@
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>modplug: GStreamer Bad Plugins 1.0 Plugins Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
 <link rel="home" href="index.html" title="GStreamer Bad Plugins 1.0 Plugins Reference Manual">
 <link rel="up" href="ch01.html" title="gst-plugins-bad Elements">
 <link rel="prev" href="gst-plugins-bad-plugins-mirror.html" title="mirror">
@@ -35,7 +35,7 @@
 </tr></table></div>
 <div class="refsect1">
 <a name="gst-plugins-bad-plugins-modplug.properties"></a><h2>Properties</h2>
-<div class="informaltable"><table border="0">
+<div class="informaltable"><table class="informaltable" border="0">
 <colgroup>
 <col width="150px" class="properties_type">
 <col width="300px" class="properties_name">
@@ -108,7 +108,7 @@
 </div>
 <a name="GstModPlug"></a><div class="refsect1">
 <a name="gst-plugins-bad-plugins-modplug.other"></a><h2>Types and Values</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="name">
 <col class="description">
@@ -133,7 +133,7 @@
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="id-1.2.47.7.2.1"></a><h3>Element Information</h3>
+<a name="id-1.2.48.7.2.1"></a><h3>Element Information</h3>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
@@ -159,7 +159,7 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="id-1.2.47.7.2.2"></a><h3>Element Pads</h3>
+<a name="id-1.2.48.7.2.2"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-mpeg2enc.html b/docs/plugins/html/gst-plugins-bad-plugins-mpeg2enc.html
index 6e336d8..ddaece6 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-mpeg2enc.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-mpeg2enc.html
@@ -3,7 +3,7 @@
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>mpeg2enc: GStreamer Bad Plugins 1.0 Plugins Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
 <link rel="home" href="index.html" title="GStreamer Bad Plugins 1.0 Plugins Reference Manual">
 <link rel="up" href="ch01.html" title="gst-plugins-bad Elements">
 <link rel="prev" href="gst-plugins-bad-plugins-modplug.html" title="modplug">
@@ -36,7 +36,7 @@
 </tr></table></div>
 <div class="refsect1">
 <a name="gst-plugins-bad-plugins-mpeg2enc.properties"></a><h2>Properties</h2>
-<div class="informaltable"><table border="0">
+<div class="informaltable"><table class="informaltable" border="0">
 <colgroup>
 <col width="150px" class="properties_type">
 <col width="300px" class="properties_name">
@@ -218,7 +218,7 @@
 </div>
 <a name="GstMpeg2enc"></a><div class="refsect1">
 <a name="gst-plugins-bad-plugins-mpeg2enc.other"></a><h2>Types and Values</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="name">
 <col class="description">
@@ -249,7 +249,7 @@
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="id-1.2.48.8.2.1"></a><h3>Element Information</h3>
+<a name="id-1.2.49.8.2.1"></a><h3>Element Information</h3>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
@@ -276,7 +276,7 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="id-1.2.48.8.2.2"></a><h3>Element Pads</h3>
+<a name="id-1.2.49.8.2.2"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-mpegpsmux.html b/docs/plugins/html/gst-plugins-bad-plugins-mpegpsmux.html
index f27f8ea..e1a5ccb 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-mpegpsmux.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-mpegpsmux.html
@@ -3,7 +3,7 @@
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>mpegpsmux: GStreamer Bad Plugins 1.0 Plugins Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
 <link rel="home" href="index.html" title="GStreamer Bad Plugins 1.0 Plugins Reference Manual">
 <link rel="up" href="ch01.html" title="gst-plugins-bad Elements">
 <link rel="prev" href="gst-plugins-bad-plugins-mpeg2enc.html" title="mpeg2enc">
@@ -35,7 +35,7 @@
 </tr></table></div>
 <div class="refsect1">
 <a name="gst-plugins-bad-plugins-mpegpsmux.properties"></a><h2>Properties</h2>
-<div class="informaltable"><table border="0">
+<div class="informaltable"><table class="informaltable" border="0">
 <colgroup>
 <col width="150px" class="properties_type">
 <col width="300px" class="properties_name">
@@ -62,7 +62,7 @@
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="id-1.2.49.6.2.1"></a><h3>Element Information</h3>
+<a name="id-1.2.50.6.2.1"></a><h3>Element Information</h3>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
@@ -88,7 +88,7 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="id-1.2.49.6.2.2"></a><h3>Element Pads</h3>
+<a name="id-1.2.50.6.2.2"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-mpegtsmux.html b/docs/plugins/html/gst-plugins-bad-plugins-mpegtsmux.html
index 3baf61a..3d7d0c3 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-mpegtsmux.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-mpegtsmux.html
@@ -3,7 +3,7 @@
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>mpegtsmux: GStreamer Bad Plugins 1.0 Plugins Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
 <link rel="home" href="index.html" title="GStreamer Bad Plugins 1.0 Plugins Reference Manual">
 <link rel="up" href="ch01.html" title="gst-plugins-bad Elements">
 <link rel="prev" href="gst-plugins-bad-plugins-mpegpsmux.html" title="mpegpsmux">
@@ -35,7 +35,7 @@
 </tr></table></div>
 <div class="refsect1">
 <a name="gst-plugins-bad-plugins-mpegtsmux.properties"></a><h2>Properties</h2>
-<div class="informaltable"><table border="0">
+<div class="informaltable"><table class="informaltable" border="0">
 <colgroup>
 <col width="150px" class="properties_type">
 <col width="300px" class="properties_name">
@@ -90,7 +90,7 @@
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="id-1.2.50.6.2.1"></a><h3>Element Information</h3>
+<a name="id-1.2.51.6.2.1"></a><h3>Element Information</h3>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
@@ -116,7 +116,7 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="id-1.2.50.6.2.2"></a><h3>Element Pads</h3>
+<a name="id-1.2.51.6.2.2"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
@@ -149,6 +149,10 @@
 </tr>
 <tr>
 <td><p><span class="term"></span></p></td>
+<td> video/x-h265, stream-format=(string)byte-stream, alignment=(string){ au, nal }</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
 <td> audio/mpeg, parsed=(boolean)true, mpegversion=(int){ 1, 2 }</td>
 </tr>
 <tr>
@@ -173,6 +177,10 @@
 </tr>
 <tr>
 <td><p><span class="term"></span></p></td>
+<td> audio/x-opus, channels=(int)[ 1, 8 ], channel-mapping-family=(int){ 0, 1 }</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
 <td> subpicture/x-dvb</td>
 </tr>
 <tr>
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-mpg123audiodec.html b/docs/plugins/html/gst-plugins-bad-plugins-mpg123audiodec.html
deleted file mode 100644
index 3b7b281..0000000
--- a/docs/plugins/html/gst-plugins-bad-plugins-mpg123audiodec.html
+++ /dev/null
@@ -1,156 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html>
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>mpg123audiodec: GStreamer Bad Plugins 1.0 Plugins Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
-<link rel="home" href="index.html" title="GStreamer Bad Plugins 1.0 Plugins Reference Manual">
-<link rel="up" href="ch01.html" title="gst-plugins-bad Elements">
-<link rel="prev" href="gst-plugins-bad-plugins-mplex.html" title="mplex">
-<link rel="next" href="gst-plugins-bad-plugins-neonhttpsrc.html" title="neonhttpsrc">
-<meta name="generator" content="GTK-Doc V1.24 (XML mode)">
-<link rel="stylesheet" href="style.css" type="text/css">
-</head>
-<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
-<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="5"><tr valign="middle">
-<td width="100%" align="left" class="shortcuts">
-<a href="#" class="shortcut">Top</a><span id="nav_description">  <span class="dim">|</span> 
-                  <a href="#gst-plugins-bad-plugins-mpg123audiodec.description" class="shortcut">Description</a></span><span id="nav_hierarchy">  <span class="dim">|</span> 
-                  <a href="#gst-plugins-bad-plugins-mpg123audiodec.object-hierarchy" class="shortcut">Object Hierarchy</a></span>
-</td>
-<td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
-<td><a accesskey="u" href="ch01.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
-<td><a accesskey="p" href="gst-plugins-bad-plugins-mplex.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
-<td><a accesskey="n" href="gst-plugins-bad-plugins-neonhttpsrc.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
-</tr></table>
-<div class="refentry">
-<a name="gst-plugins-bad-plugins-mpg123audiodec"></a><div class="titlepage"></div>
-<div class="refnamediv"><table width="100%"><tr>
-<td valign="top">
-<h2><span class="refentrytitle"><a name="gst-plugins-bad-plugins-mpg123audiodec.top_of_page"></a>mpg123audiodec</span></h2>
-<p>mpg123audiodec</p>
-</td>
-<td class="gallery_image" valign="top" align="right"></td>
-</tr></table></div>
-<a name="GstMpg123AudioDec"></a><div class="refsect1">
-<a name="gst-plugins-bad-plugins-mpg123audiodec.other"></a><h2>Types and Values</h2>
-<div class="informaltable"><table width="100%" border="0">
-<colgroup>
-<col width="150px" class="name">
-<col class="description">
-</colgroup>
-<tbody><tr>
-<td class="datatype_keyword">struct</td>
-<td class="function_name"><a class="link" href="gst-plugins-bad-plugins-mpg123audiodec.html#GstMpg123AudioDec-struct" title="struct GstMpg123AudioDec">GstMpg123AudioDec</a></td>
-</tr></tbody>
-</table></div>
-</div>
-<div class="refsect1">
-<a name="gst-plugins-bad-plugins-mpg123audiodec.object-hierarchy"></a><h2>Object Hierarchy</h2>
-<pre class="screen">    <a href="https://developer.gnome.org/gobject/unstable/gobject-The-Base-Object-Type.html#GObject">GObject</a>
-    <span class="lineart">╰──</span> <a href="https://developer.gnome.org/gobject/unstable/gobject-The-Base-Object-Type.html#GInitiallyUnowned">GInitiallyUnowned</a>
-        <span class="lineart">╰──</span> <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstObject.html">GstObject</a>
-            <span class="lineart">╰──</span> <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html">GstElement</a>
-                <span class="lineart">╰──</span> <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base-libs/html/gst-plugins-base-libs-gstaudiodecoder.html#GstAudioDecoder">GstAudioDecoder</a>
-                    <span class="lineart">╰──</span> GstMpg123AudioDec
-</pre>
-</div>
-<div class="refsect1">
-<a name="gst-plugins-bad-plugins-mpg123audiodec.description"></a><h2>Description</h2>
-<div class="refsynopsisdiv">
-<h2>Synopsis</h2>
-<div class="refsect2">
-<a name="id-1.2.52.6.2.1"></a><h3>Element Information</h3>
-<div class="variablelist"><table border="0" class="variablelist">
-<colgroup>
-<col align="left" valign="top">
-<col>
-</colgroup>
-<tbody>
-<tr>
-<td><p><span class="term">plugin</span></p></td>
-<td>
-            mpg123
-          </td>
-</tr>
-<tr>
-<td><p><span class="term">author</span></p></td>
-<td>Carlos Rafael Giani &lt;dv@pseudoterminal.org&gt;</td>
-</tr>
-<tr>
-<td><p><span class="term">class</span></p></td>
-<td>Codec/Decoder/Audio</td>
-</tr>
-</tbody>
-</table></div>
-</div>
-<hr>
-<div class="refsect2">
-<a name="id-1.2.52.6.2.2"></a><h3>Element Pads</h3>
-<div class="variablelist"><table border="0" class="variablelist">
-<colgroup>
-<col align="left" valign="top">
-<col>
-</colgroup>
-<tbody>
-<tr>
-<td><p><span class="term">name</span></p></td>
-<td>sink</td>
-</tr>
-<tr>
-<td><p><span class="term">direction</span></p></td>
-<td>sink</td>
-</tr>
-<tr>
-<td><p><span class="term">presence</span></p></td>
-<td>always</td>
-</tr>
-<tr>
-<td><p><span class="term">details</span></p></td>
-<td>audio/mpeg, mpegversion=(int)1, layer=(int)[ 1, 3 ], rate=(int){ 8000, 11025, 12000, 16000, 22050, 24000, 32000, 44100, 48000 }, channels=(int)[ 1, 2 ], parsed=(boolean)true</td>
-</tr>
-</tbody>
-</table></div>
-<div class="variablelist"><table border="0" class="variablelist">
-<colgroup>
-<col align="left" valign="top">
-<col>
-</colgroup>
-<tbody>
-<tr>
-<td><p><span class="term">name</span></p></td>
-<td>src</td>
-</tr>
-<tr>
-<td><p><span class="term">direction</span></p></td>
-<td>source</td>
-</tr>
-<tr>
-<td><p><span class="term">presence</span></p></td>
-<td>always</td>
-</tr>
-<tr>
-<td><p><span class="term">details</span></p></td>
-<td>audio/x-raw, format=(string){ S16LE, U16LE, S32LE, U32LE, S24LE, U24LE, F32LE }, rate=(int){ 8000, 11025, 12000, 16000, 22050, 24000, 32000, 44100, 48000 }, channels=(int)[ 1, 2 ], layout=(string)interleaved</td>
-</tr>
-</tbody>
-</table></div>
-</div>
-</div>
-</div>
-<div class="refsect1">
-<a name="gst-plugins-bad-plugins-mpg123audiodec.functions_details"></a><h2>Functions</h2>
-<p></p>
-</div>
-<div class="refsect1">
-<a name="gst-plugins-bad-plugins-mpg123audiodec.other_details"></a><h2>Types and Values</h2>
-<div class="refsect2">
-<a name="GstMpg123AudioDec-struct"></a><h3>struct GstMpg123AudioDec</h3>
-<pre class="programlisting">struct GstMpg123AudioDec;</pre>
-</div>
-</div>
-</div>
-<div class="footer">
-<hr>Generated by GTK-Doc V1.24</div>
-</body>
-</html>
\ No newline at end of file
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-mplex.html b/docs/plugins/html/gst-plugins-bad-plugins-mplex.html
index a9ad171..6043cf9 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-mplex.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-mplex.html
@@ -3,11 +3,11 @@
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>mplex: GStreamer Bad Plugins 1.0 Plugins Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
 <link rel="home" href="index.html" title="GStreamer Bad Plugins 1.0 Plugins Reference Manual">
 <link rel="up" href="ch01.html" title="gst-plugins-bad Elements">
 <link rel="prev" href="gst-plugins-bad-plugins-mpegtsmux.html" title="mpegtsmux">
-<link rel="next" href="gst-plugins-bad-plugins-mpg123audiodec.html" title="mpg123audiodec">
+<link rel="next" href="gst-plugins-bad-plugins-neonhttpsrc.html" title="neonhttpsrc">
 <meta name="generator" content="GTK-Doc V1.24 (XML mode)">
 <link rel="stylesheet" href="style.css" type="text/css">
 </head>
@@ -22,7 +22,7 @@
 <td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
 <td><a accesskey="u" href="ch01.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
 <td><a accesskey="p" href="gst-plugins-bad-plugins-mpegtsmux.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
-<td><a accesskey="n" href="gst-plugins-bad-plugins-mpg123audiodec.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
+<td><a accesskey="n" href="gst-plugins-bad-plugins-neonhttpsrc.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
 </tr></table>
 <div class="refentry">
 <a name="gst-plugins-bad-plugins-mplex"></a><div class="titlepage"></div>
@@ -35,7 +35,7 @@
 </tr></table></div>
 <div class="refsect1">
 <a name="gst-plugins-bad-plugins-mplex.properties"></a><h2>Properties</h2>
-<div class="informaltable"><table border="0">
+<div class="informaltable"><table class="informaltable" border="0">
 <colgroup>
 <col width="150px" class="properties_type">
 <col width="300px" class="properties_name">
@@ -82,7 +82,7 @@
 </div>
 <a name="GstMplex"></a><div class="refsect1">
 <a name="gst-plugins-bad-plugins-mplex.other"></a><h2>Types and Values</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="name">
 <col class="description">
@@ -107,7 +107,7 @@
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="id-1.2.51.7.2.1"></a><h3>Element Information</h3>
+<a name="id-1.2.52.7.2.1"></a><h3>Element Information</h3>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
@@ -135,7 +135,7 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="id-1.2.51.7.2.2"></a><h3>Element Pads</h3>
+<a name="id-1.2.52.7.2.2"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-neonhttpsrc.html b/docs/plugins/html/gst-plugins-bad-plugins-neonhttpsrc.html
index e0b725c..8dd40b1 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-neonhttpsrc.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-neonhttpsrc.html
@@ -3,10 +3,10 @@
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>neonhttpsrc: GStreamer Bad Plugins 1.0 Plugins Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
 <link rel="home" href="index.html" title="GStreamer Bad Plugins 1.0 Plugins Reference Manual">
 <link rel="up" href="ch01.html" title="gst-plugins-bad Elements">
-<link rel="prev" href="gst-plugins-bad-plugins-mpg123audiodec.html" title="mpg123audiodec">
+<link rel="prev" href="gst-plugins-bad-plugins-mplex.html" title="mplex">
 <link rel="next" href="gst-plugins-bad-plugins-ofa.html" title="ofa">
 <meta name="generator" content="GTK-Doc V1.24 (XML mode)">
 <link rel="stylesheet" href="style.css" type="text/css">
@@ -21,7 +21,7 @@
 </td>
 <td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
 <td><a accesskey="u" href="ch01.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
-<td><a accesskey="p" href="gst-plugins-bad-plugins-mpg123audiodec.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
+<td><a accesskey="p" href="gst-plugins-bad-plugins-mplex.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
 <td><a accesskey="n" href="gst-plugins-bad-plugins-ofa.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
 </tr></table>
 <div class="refentry">
@@ -35,7 +35,7 @@
 </tr></table></div>
 <div class="refsect1">
 <a name="gst-plugins-bad-plugins-neonhttpsrc.properties"></a><h2>Properties</h2>
-<div class="informaltable"><table border="0">
+<div class="informaltable"><table class="informaltable" border="0">
 <colgroup>
 <col width="150px" class="properties_type">
 <col width="300px" class="properties_name">
@@ -123,7 +123,7 @@
 </div>
 <div class="refsect1">
 <a name="gst-plugins-bad-plugins-neonhttpsrc.other"></a><h2>Types and Values</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="name">
 <col class="description">
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-ofa.html b/docs/plugins/html/gst-plugins-bad-plugins-ofa.html
index faa4a32..6f77eb5 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-ofa.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-ofa.html
@@ -3,7 +3,7 @@
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>ofa: GStreamer Bad Plugins 1.0 Plugins Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
 <link rel="home" href="index.html" title="GStreamer Bad Plugins 1.0 Plugins Reference Manual">
 <link rel="up" href="ch01.html" title="gst-plugins-bad Elements">
 <link rel="prev" href="gst-plugins-bad-plugins-neonhttpsrc.html" title="neonhttpsrc">
@@ -35,7 +35,7 @@
 </tr></table></div>
 <div class="refsect1">
 <a name="gst-plugins-bad-plugins-ofa.properties"></a><h2>Properties</h2>
-<div class="informaltable"><table border="0">
+<div class="informaltable"><table class="informaltable" border="0">
 <colgroup>
 <col width="150px" class="properties_type">
 <col width="300px" class="properties_name">
@@ -51,7 +51,7 @@
 </div>
 <a name="GstOFA"></a><div class="refsect1">
 <a name="gst-plugins-bad-plugins-ofa.other"></a><h2>Types and Values</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="name">
 <col class="description">
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-openalsink.html b/docs/plugins/html/gst-plugins-bad-plugins-openalsink.html
index 11e753d..a61dd41 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-openalsink.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-openalsink.html
@@ -3,11 +3,11 @@
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>openalsink: GStreamer Bad Plugins 1.0 Plugins Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
 <link rel="home" href="index.html" title="GStreamer Bad Plugins 1.0 Plugins Reference Manual">
 <link rel="up" href="ch01.html" title="gst-plugins-bad Elements">
 <link rel="prev" href="gst-plugins-bad-plugins-openalsrc.html" title="openalsrc">
-<link rel="next" href="gst-plugins-bad-plugins-opusdec.html" title="opusdec">
+<link rel="next" href="gst-plugins-bad-plugins-pcapparse.html" title="pcapparse">
 <meta name="generator" content="GTK-Doc V1.24 (XML mode)">
 <link rel="stylesheet" href="style.css" type="text/css">
 </head>
@@ -20,7 +20,7 @@
 <td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
 <td><a accesskey="u" href="ch01.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
 <td><a accesskey="p" href="gst-plugins-bad-plugins-openalsrc.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
-<td><a accesskey="n" href="gst-plugins-bad-plugins-opusdec.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
+<td><a accesskey="n" href="gst-plugins-bad-plugins-pcapparse.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
 </tr></table>
 <div class="refentry">
 <a name="gst-plugins-bad-plugins-openalsink"></a><div class="titlepage"></div>
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-openalsrc.html b/docs/plugins/html/gst-plugins-bad-plugins-openalsrc.html
index 41f4626..da9a2f9 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-openalsrc.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-openalsrc.html
@@ -3,7 +3,7 @@
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>openalsrc: GStreamer Bad Plugins 1.0 Plugins Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
 <link rel="home" href="index.html" title="GStreamer Bad Plugins 1.0 Plugins Reference Manual">
 <link rel="up" href="ch01.html" title="gst-plugins-bad Elements">
 <link rel="prev" href="gst-plugins-bad-plugins-ofa.html" title="ofa">
@@ -35,7 +35,7 @@
 </tr></table></div>
 <div class="refsect1">
 <a name="gst-plugins-bad-plugins-openalsrc.properties"></a><h2>Properties</h2>
-<div class="informaltable"><table border="0">
+<div class="informaltable"><table class="informaltable" border="0">
 <colgroup>
 <col width="150px" class="properties_type">
 <col width="300px" class="properties_name">
@@ -59,7 +59,7 @@
 </div>
 <a name="GstOpenalSrc"></a><div class="refsect1">
 <a name="gst-plugins-bad-plugins-openalsrc.other"></a><h2>Types and Values</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="name">
 <col class="description">
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-opencvtextoverlay.html b/docs/plugins/html/gst-plugins-bad-plugins-opencvtextoverlay.html
index c412bcd..c0b6a65 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-opencvtextoverlay.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-opencvtextoverlay.html
@@ -3,7 +3,7 @@
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>opencvtextoverlay: GStreamer Bad Plugins 1.0 Plugins Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
 <link rel="home" href="index.html" title="GStreamer Bad Plugins 1.0 Plugins Reference Manual">
 <link rel="up" href="ch01.html" title="gst-plugins-bad Elements">
 <link rel="prev" href="gst-plugins-bad-plugins-templatematch.html" title="templatematch">
@@ -15,8 +15,7 @@
 <table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="5"><tr valign="middle">
 <td width="100%" align="left" class="shortcuts">
 <a href="#" class="shortcut">Top</a><span id="nav_description">  <span class="dim">|</span> 
-                  <a href="#gst-plugins-bad-plugins-opencvtextoverlay.description" class="shortcut">Description</a></span><span id="nav_hierarchy">  <span class="dim">|</span> 
-                  <a href="#gst-plugins-bad-plugins-opencvtextoverlay.object-hierarchy" class="shortcut">Object Hierarchy</a></span><span id="nav_properties">  <span class="dim">|</span> 
+                  <a href="#gst-plugins-bad-plugins-opencvtextoverlay.description" class="shortcut">Description</a></span><span id="nav_properties">  <span class="dim">|</span> 
                   <a href="#gst-plugins-bad-plugins-opencvtextoverlay.properties" class="shortcut">Properties</a></span>
 </td>
 <td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
@@ -35,7 +34,7 @@
 </tr></table></div>
 <div class="refsect1">
 <a name="gst-plugins-bad-plugins-opencvtextoverlay.properties"></a><h2>Properties</h2>
-<div class="informaltable"><table border="0">
+<div class="informaltable"><table class="informaltable" border="0">
 <colgroup>
 <col width="150px" class="properties_type">
 <col width="300px" class="properties_name">
@@ -91,34 +90,25 @@
 </tbody>
 </table></div>
 </div>
-<a name="GstOpenalSrc"></a><a name="GstOpencvTextOverlay"></a><div class="refsect1">
+<a name="GstOpenalSrc"></a><div class="refsect1">
 <a name="gst-plugins-bad-plugins-opencvtextoverlay.other"></a><h2>Types and Values</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="name">
 <col class="description">
 </colgroup>
 <tbody><tr>
 <td class="datatype_keyword">struct</td>
-<td class="function_name"><a class="link" href="gst-plugins-bad-plugins-opencvtextoverlay.html#GstOpencvTextOverlay-struct" title="struct GstOpencvTextOverlay">GstOpencvTextOverlay</a></td>
+<td class="function_name"><a class="link" href="gst-plugins-bad-plugins-opencvtextoverlay.html#GstOpencvTextOverlay" title="struct GstOpencvTextOverlay">GstOpencvTextOverlay</a></td>
 </tr></tbody>
 </table></div>
 </div>
 <div class="refsect1">
-<a name="gst-plugins-bad-plugins-opencvtextoverlay.object-hierarchy"></a><h2>Object Hierarchy</h2>
-<pre class="screen">    <a href="https://developer.gnome.org/gobject/unstable/gobject-The-Base-Object-Type.html#GObject">GObject</a>
-    <span class="lineart">╰──</span> <a href="https://developer.gnome.org/gobject/unstable/gobject-The-Base-Object-Type.html#GInitiallyUnowned">GInitiallyUnowned</a>
-        <span class="lineart">╰──</span> <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstObject.html">GstObject</a>
-            <span class="lineart">╰──</span> <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html">GstElement</a>
-                <span class="lineart">╰──</span> GstOpencvTextOverlay
-</pre>
-</div>
-<div class="refsect1">
 <a name="gst-plugins-bad-plugins-opencvtextoverlay.description"></a><h2>Description</h2>
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="id-1.2.80.8.2.1"></a><h3>Element Information</h3>
+<a name="id-1.2.75.6.2.1"></a><h3>Element Information</h3>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
@@ -144,7 +134,7 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="id-1.2.80.8.2.2"></a><h3>Element Pads</h3>
+<a name="id-1.2.75.6.2.2"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
@@ -203,8 +193,21 @@
 <div class="refsect1">
 <a name="gst-plugins-bad-plugins-opencvtextoverlay.other_details"></a><h2>Types and Values</h2>
 <div class="refsect2">
-<a name="GstOpencvTextOverlay-struct"></a><h3>struct GstOpencvTextOverlay</h3>
-<pre class="programlisting">struct GstOpencvTextOverlay;</pre>
+<a name="GstOpencvTextOverlay"></a><h3>struct GstOpencvTextOverlay</h3>
+<pre class="programlisting">struct GstOpencvTextOverlay {
+  GstOpencvVideoFilter element;
+
+  CvFont font;
+
+  gint xpos;
+  gint ypos;
+  gint thickness;
+  gint colorR,colorG,colorB;
+  gdouble height;
+  gdouble width;
+  gchar *textbuf;
+};
+</pre>
 </div>
 </div>
 <div class="refsect1">
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-opusdec.html b/docs/plugins/html/gst-plugins-bad-plugins-opusdec.html
deleted file mode 100644
index 4f1427c..0000000
--- a/docs/plugins/html/gst-plugins-bad-plugins-opusdec.html
+++ /dev/null
@@ -1,197 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html>
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>opusdec: GStreamer Bad Plugins 1.0 Plugins Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
-<link rel="home" href="index.html" title="GStreamer Bad Plugins 1.0 Plugins Reference Manual">
-<link rel="up" href="ch01.html" title="gst-plugins-bad Elements">
-<link rel="prev" href="gst-plugins-bad-plugins-openalsink.html" title="openalsink">
-<link rel="next" href="gst-plugins-bad-plugins-opusenc.html" title="opusenc">
-<meta name="generator" content="GTK-Doc V1.24 (XML mode)">
-<link rel="stylesheet" href="style.css" type="text/css">
-</head>
-<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
-<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="5"><tr valign="middle">
-<td width="100%" align="left" class="shortcuts">
-<a href="#" class="shortcut">Top</a><span id="nav_description">  <span class="dim">|</span> 
-                  <a href="#gst-plugins-bad-plugins-opusdec.description" class="shortcut">Description</a></span><span id="nav_hierarchy">  <span class="dim">|</span> 
-                  <a href="#gst-plugins-bad-plugins-opusdec.object-hierarchy" class="shortcut">Object Hierarchy</a></span><span id="nav_properties">  <span class="dim">|</span> 
-                  <a href="#gst-plugins-bad-plugins-opusdec.properties" class="shortcut">Properties</a></span>
-</td>
-<td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
-<td><a accesskey="u" href="ch01.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
-<td><a accesskey="p" href="gst-plugins-bad-plugins-openalsink.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
-<td><a accesskey="n" href="gst-plugins-bad-plugins-opusenc.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
-</tr></table>
-<div class="refentry">
-<a name="gst-plugins-bad-plugins-opusdec"></a><div class="titlepage"></div>
-<div class="refnamediv"><table width="100%"><tr>
-<td valign="top">
-<h2><span class="refentrytitle"><a name="gst-plugins-bad-plugins-opusdec.top_of_page"></a>opusdec</span></h2>
-<p>opusdec</p>
-</td>
-<td class="gallery_image" valign="top" align="right"></td>
-</tr></table></div>
-<div class="refsect1">
-<a name="gst-plugins-bad-plugins-opusdec.properties"></a><h2>Properties</h2>
-<div class="informaltable"><table border="0">
-<colgroup>
-<col width="150px" class="properties_type">
-<col width="300px" class="properties_name">
-<col width="200px" class="properties_flags">
-</colgroup>
-<tbody>
-<tr>
-<td class="property_type"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a></td>
-<td class="property_name"><a class="link" href="gst-plugins-bad-plugins-opusdec.html#GstOpusDec--apply-gain" title="The “apply-gain” property">apply-gain</a></td>
-<td class="property_flags">Read / Write</td>
-</tr>
-<tr>
-<td class="property_type"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a></td>
-<td class="property_name"><a class="link" href="gst-plugins-bad-plugins-opusdec.html#GstOpusDec--use-inband-fec" title="The “use-inband-fec” property">use-inband-fec</a></td>
-<td class="property_flags">Read / Write</td>
-</tr>
-</tbody>
-</table></div>
-</div>
-<a name="GstOpenalSrc"></a><a name="GstOpencvTextOverlay"></a><a name="GstOpusDec"></a><div class="refsect1">
-<a name="gst-plugins-bad-plugins-opusdec.other"></a><h2>Types and Values</h2>
-<div class="informaltable"><table width="100%" border="0">
-<colgroup>
-<col width="150px" class="name">
-<col class="description">
-</colgroup>
-<tbody><tr>
-<td class="datatype_keyword">struct</td>
-<td class="function_name"><a class="link" href="gst-plugins-bad-plugins-opusdec.html#GstOpusDec-struct" title="struct GstOpusDec">GstOpusDec</a></td>
-</tr></tbody>
-</table></div>
-</div>
-<div class="refsect1">
-<a name="gst-plugins-bad-plugins-opusdec.object-hierarchy"></a><h2>Object Hierarchy</h2>
-<pre class="screen">    <a href="https://developer.gnome.org/gobject/unstable/gobject-The-Base-Object-Type.html#GObject">GObject</a>
-    <span class="lineart">╰──</span> <a href="https://developer.gnome.org/gobject/unstable/gobject-The-Base-Object-Type.html#GInitiallyUnowned">GInitiallyUnowned</a>
-        <span class="lineart">╰──</span> <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstObject.html">GstObject</a>
-            <span class="lineart">╰──</span> <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html">GstElement</a>
-                <span class="lineart">╰──</span> <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base-libs/html/gst-plugins-base-libs-gstaudiodecoder.html#GstAudioDecoder">GstAudioDecoder</a>
-                    <span class="lineart">╰──</span> GstOpusDec
-</pre>
-</div>
-<div class="refsect1">
-<a name="gst-plugins-bad-plugins-opusdec.description"></a><h2>Description</h2>
-<div class="refsynopsisdiv">
-<h2>Synopsis</h2>
-<div class="refsect2">
-<a name="id-1.2.57.9.2.1"></a><h3>Element Information</h3>
-<div class="variablelist"><table border="0" class="variablelist">
-<colgroup>
-<col align="left" valign="top">
-<col>
-</colgroup>
-<tbody>
-<tr>
-<td><p><span class="term">plugin</span></p></td>
-<td>
-            <a class="link" href="gst-plugins-bad-plugins-plugin-opus.html#plugin-opus">opus</a>
-          </td>
-</tr>
-<tr>
-<td><p><span class="term">author</span></p></td>
-<td>Vincent Penquerc'h &lt;vincent.penquerch@collabora.co.uk&gt;</td>
-</tr>
-<tr>
-<td><p><span class="term">class</span></p></td>
-<td>Codec/Decoder/Audio</td>
-</tr>
-</tbody>
-</table></div>
-</div>
-<hr>
-<div class="refsect2">
-<a name="id-1.2.57.9.2.2"></a><h3>Element Pads</h3>
-<div class="variablelist"><table border="0" class="variablelist">
-<colgroup>
-<col align="left" valign="top">
-<col>
-</colgroup>
-<tbody>
-<tr>
-<td><p><span class="term">name</span></p></td>
-<td>sink</td>
-</tr>
-<tr>
-<td><p><span class="term">direction</span></p></td>
-<td>sink</td>
-</tr>
-<tr>
-<td><p><span class="term">presence</span></p></td>
-<td>always</td>
-</tr>
-<tr>
-<td><p><span class="term">details</span></p></td>
-<td>audio/x-opus</td>
-</tr>
-</tbody>
-</table></div>
-<div class="variablelist"><table border="0" class="variablelist">
-<colgroup>
-<col align="left" valign="top">
-<col>
-</colgroup>
-<tbody>
-<tr>
-<td><p><span class="term">name</span></p></td>
-<td>src</td>
-</tr>
-<tr>
-<td><p><span class="term">direction</span></p></td>
-<td>source</td>
-</tr>
-<tr>
-<td><p><span class="term">presence</span></p></td>
-<td>always</td>
-</tr>
-<tr>
-<td><p><span class="term">details</span></p></td>
-<td>audio/x-raw, format=(string)S16LE, layout=(string)interleaved, rate=(int){ 48000, 24000, 16000, 12000, 8000 }, channels=(int)[ 1, 8 ]</td>
-</tr>
-</tbody>
-</table></div>
-</div>
-</div>
-</div>
-<div class="refsect1">
-<a name="gst-plugins-bad-plugins-opusdec.functions_details"></a><h2>Functions</h2>
-<p></p>
-</div>
-<div class="refsect1">
-<a name="gst-plugins-bad-plugins-opusdec.other_details"></a><h2>Types and Values</h2>
-<div class="refsect2">
-<a name="GstOpusDec-struct"></a><h3>struct GstOpusDec</h3>
-<pre class="programlisting">struct GstOpusDec;</pre>
-</div>
-</div>
-<div class="refsect1">
-<a name="gst-plugins-bad-plugins-opusdec.property-details"></a><h2>Property Details</h2>
-<div class="refsect2">
-<a name="GstOpusDec--apply-gain"></a><h3>The <code class="literal">“apply-gain”</code> property</h3>
-<pre class="programlisting">  “apply-gain”               <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a></pre>
-<p>Apply gain if any is specified in the header.</p>
-<p>Flags: Read / Write</p>
-<p>Default value: TRUE</p>
-</div>
-<hr>
-<div class="refsect2">
-<a name="GstOpusDec--use-inband-fec"></a><h3>The <code class="literal">“use-inband-fec”</code> property</h3>
-<pre class="programlisting">  “use-inband-fec”           <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a></pre>
-<p>Use forward error correction if available.</p>
-<p>Flags: Read / Write</p>
-<p>Default value: FALSE</p>
-</div>
-</div>
-</div>
-<div class="footer">
-<hr>Generated by GTK-Doc V1.24</div>
-</body>
-</html>
\ No newline at end of file
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-opusenc.html b/docs/plugins/html/gst-plugins-bad-plugins-opusenc.html
deleted file mode 100644
index 5804d1c..0000000
--- a/docs/plugins/html/gst-plugins-bad-plugins-opusenc.html
+++ /dev/null
@@ -1,348 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html>
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>opusenc: GStreamer Bad Plugins 1.0 Plugins Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
-<link rel="home" href="index.html" title="GStreamer Bad Plugins 1.0 Plugins Reference Manual">
-<link rel="up" href="ch01.html" title="gst-plugins-bad Elements">
-<link rel="prev" href="gst-plugins-bad-plugins-opusdec.html" title="opusdec">
-<link rel="next" href="gst-plugins-bad-plugins-opusparse.html" title="opusparse">
-<meta name="generator" content="GTK-Doc V1.24 (XML mode)">
-<link rel="stylesheet" href="style.css" type="text/css">
-</head>
-<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
-<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="5"><tr valign="middle">
-<td width="100%" align="left" class="shortcuts">
-<a href="#" class="shortcut">Top</a><span id="nav_description">  <span class="dim">|</span> 
-                  <a href="#gst-plugins-bad-plugins-opusenc.description" class="shortcut">Description</a></span><span id="nav_hierarchy">  <span class="dim">|</span> 
-                  <a href="#gst-plugins-bad-plugins-opusenc.object-hierarchy" class="shortcut">Object Hierarchy</a></span><span id="nav_properties">  <span class="dim">|</span> 
-                  <a href="#gst-plugins-bad-plugins-opusenc.properties" class="shortcut">Properties</a></span>
-</td>
-<td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
-<td><a accesskey="u" href="ch01.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
-<td><a accesskey="p" href="gst-plugins-bad-plugins-opusdec.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
-<td><a accesskey="n" href="gst-plugins-bad-plugins-opusparse.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
-</tr></table>
-<div class="refentry">
-<a name="gst-plugins-bad-plugins-opusenc"></a><div class="titlepage"></div>
-<div class="refnamediv"><table width="100%"><tr>
-<td valign="top">
-<h2><span class="refentrytitle"><a name="gst-plugins-bad-plugins-opusenc.top_of_page"></a>opusenc</span></h2>
-<p>opusenc</p>
-</td>
-<td class="gallery_image" valign="top" align="right"></td>
-</tr></table></div>
-<div class="refsect1">
-<a name="gst-plugins-bad-plugins-opusenc.properties"></a><h2>Properties</h2>
-<div class="informaltable"><table border="0">
-<colgroup>
-<col width="150px" class="properties_type">
-<col width="300px" class="properties_name">
-<col width="200px" class="properties_flags">
-</colgroup>
-<tbody>
-<tr>
-<td class="property_type"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a></td>
-<td class="property_name"><a class="link" href="gst-plugins-bad-plugins-opusenc.html#GstOpusEnc--audio" title="The “audio” property">audio</a></td>
-<td class="property_flags">Read / Write</td>
-</tr>
-<tr>
-<td class="property_type"><span class="type">GstOpusEncBandwidth</span></td>
-<td class="property_name"><a class="link" href="gst-plugins-bad-plugins-opusenc.html#GstOpusEnc--bandwidth" title="The “bandwidth” property">bandwidth</a></td>
-<td class="property_flags">Read / Write</td>
-</tr>
-<tr>
-<td class="property_type"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a></td>
-<td class="property_name"><a class="link" href="gst-plugins-bad-plugins-opusenc.html#GstOpusEnc--bitrate" title="The “bitrate” property">bitrate</a></td>
-<td class="property_flags">Read / Write</td>
-</tr>
-<tr>
-<td class="property_type"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a></td>
-<td class="property_name"><a class="link" href="gst-plugins-bad-plugins-opusenc.html#GstOpusEnc--cbr" title="The “cbr” property">cbr</a></td>
-<td class="property_flags">Read / Write</td>
-</tr>
-<tr>
-<td class="property_type"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a></td>
-<td class="property_name"><a class="link" href="gst-plugins-bad-plugins-opusenc.html#GstOpusEnc--complexity" title="The “complexity” property">complexity</a></td>
-<td class="property_flags">Read / Write</td>
-</tr>
-<tr>
-<td class="property_type"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a></td>
-<td class="property_name"><a class="link" href="gst-plugins-bad-plugins-opusenc.html#GstOpusEnc--constrained-vbr" title="The “constrained-vbr” property">constrained-vbr</a></td>
-<td class="property_flags">Read / Write</td>
-</tr>
-<tr>
-<td class="property_type"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a></td>
-<td class="property_name"><a class="link" href="gst-plugins-bad-plugins-opusenc.html#GstOpusEnc--dtx" title="The “dtx” property">dtx</a></td>
-<td class="property_flags">Read / Write</td>
-</tr>
-<tr>
-<td class="property_type"><span class="type">GstOpusEncFrameSize</span></td>
-<td class="property_name"><a class="link" href="gst-plugins-bad-plugins-opusenc.html#GstOpusEnc--frame-size" title="The “frame-size” property">frame-size</a></td>
-<td class="property_flags">Read / Write</td>
-</tr>
-<tr>
-<td class="property_type"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a></td>
-<td class="property_name"><a class="link" href="gst-plugins-bad-plugins-opusenc.html#GstOpusEnc--inband-fec" title="The “inband-fec” property">inband-fec</a></td>
-<td class="property_flags">Read / Write</td>
-</tr>
-<tr>
-<td class="property_type"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a></td>
-<td class="property_name"><a class="link" href="gst-plugins-bad-plugins-opusenc.html#GstOpusEnc--max-payload-size" title="The “max-payload-size” property">max-payload-size</a></td>
-<td class="property_flags">Read / Write</td>
-</tr>
-<tr>
-<td class="property_type"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a></td>
-<td class="property_name"><a class="link" href="gst-plugins-bad-plugins-opusenc.html#GstOpusEnc--packet-loss-percentage" title="The “packet-loss-percentage” property">packet-loss-percentage</a></td>
-<td class="property_flags">Read / Write</td>
-</tr>
-<tr>
-<td class="property_type"><span class="type">GstOpusEncAudioType</span></td>
-<td class="property_name"><a class="link" href="gst-plugins-bad-plugins-opusenc.html#GstOpusEnc--audio-type" title="The “audio-type” property">audio-type</a></td>
-<td class="property_flags">Read / Write</td>
-</tr>
-<tr>
-<td class="property_type"><span class="type">GstOpusEncBitrateType</span></td>
-<td class="property_name"><a class="link" href="gst-plugins-bad-plugins-opusenc.html#GstOpusEnc--bitrate-type" title="The “bitrate-type” property">bitrate-type</a></td>
-<td class="property_flags">Read / Write</td>
-</tr>
-</tbody>
-</table></div>
-</div>
-<a name="GstOpenalSrc"></a><a name="GstOpencvTextOverlay"></a><a name="GstOpusDec"></a><a name="GstOpusEnc"></a><div class="refsect1">
-<a name="gst-plugins-bad-plugins-opusenc.other"></a><h2>Types and Values</h2>
-<div class="informaltable"><table width="100%" border="0">
-<colgroup>
-<col width="150px" class="name">
-<col class="description">
-</colgroup>
-<tbody><tr>
-<td class="datatype_keyword">struct</td>
-<td class="function_name"><a class="link" href="gst-plugins-bad-plugins-opusenc.html#GstOpusEnc-struct" title="struct GstOpusEnc">GstOpusEnc</a></td>
-</tr></tbody>
-</table></div>
-</div>
-<div class="refsect1">
-<a name="gst-plugins-bad-plugins-opusenc.object-hierarchy"></a><h2>Object Hierarchy</h2>
-<pre class="screen">    <a href="https://developer.gnome.org/gobject/unstable/gobject-The-Base-Object-Type.html#GObject">GObject</a>
-    <span class="lineart">╰──</span> <a href="https://developer.gnome.org/gobject/unstable/gobject-The-Base-Object-Type.html#GInitiallyUnowned">GInitiallyUnowned</a>
-        <span class="lineart">╰──</span> <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstObject.html">GstObject</a>
-            <span class="lineart">╰──</span> <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html">GstElement</a>
-                <span class="lineart">╰──</span> <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base-libs/html/gst-plugins-base-libs-gstaudioencoder.html#GstAudioEncoder">GstAudioEncoder</a>
-                    <span class="lineart">╰──</span> GstOpusEnc
-</pre>
-</div>
-<div class="refsect1">
-<a name="gst-plugins-bad-plugins-opusenc.description"></a><h2>Description</h2>
-<div class="refsynopsisdiv">
-<h2>Synopsis</h2>
-<div class="refsect2">
-<a name="id-1.2.58.10.2.1"></a><h3>Element Information</h3>
-<div class="variablelist"><table border="0" class="variablelist">
-<colgroup>
-<col align="left" valign="top">
-<col>
-</colgroup>
-<tbody>
-<tr>
-<td><p><span class="term">plugin</span></p></td>
-<td>
-            <a class="link" href="gst-plugins-bad-plugins-plugin-opus.html#plugin-opus">opus</a>
-          </td>
-</tr>
-<tr>
-<td><p><span class="term">author</span></p></td>
-<td>Vincent Penquerc'h &lt;vincent.penquerch@collabora.co.uk&gt;</td>
-</tr>
-<tr>
-<td><p><span class="term">class</span></p></td>
-<td>Codec/Encoder/Audio</td>
-</tr>
-</tbody>
-</table></div>
-</div>
-<hr>
-<div class="refsect2">
-<a name="id-1.2.58.10.2.2"></a><h3>Element Pads</h3>
-<div class="variablelist"><table border="0" class="variablelist">
-<colgroup>
-<col align="left" valign="top">
-<col>
-</colgroup>
-<tbody>
-<tr>
-<td><p><span class="term">name</span></p></td>
-<td>sink</td>
-</tr>
-<tr>
-<td><p><span class="term">direction</span></p></td>
-<td>sink</td>
-</tr>
-<tr>
-<td><p><span class="term">presence</span></p></td>
-<td>always</td>
-</tr>
-<tr>
-<td><p><span class="term">details</span></p></td>
-<td>audio/x-raw, format=(string)S16LE, layout=(string)interleaved, rate=(int)48000, channels=(int)[ 1, 2 ]</td>
-</tr>
-<tr>
-<td><p><span class="term"></span></p></td>
-<td> audio/x-raw, format=(string)S16LE, layout=(string)interleaved, rate=(int){ 8000, 12000, 16000, 24000 }, channels=(int)[ 1, 2 ]</td>
-</tr>
-</tbody>
-</table></div>
-<div class="variablelist"><table border="0" class="variablelist">
-<colgroup>
-<col align="left" valign="top">
-<col>
-</colgroup>
-<tbody>
-<tr>
-<td><p><span class="term">name</span></p></td>
-<td>src</td>
-</tr>
-<tr>
-<td><p><span class="term">direction</span></p></td>
-<td>source</td>
-</tr>
-<tr>
-<td><p><span class="term">presence</span></p></td>
-<td>always</td>
-</tr>
-<tr>
-<td><p><span class="term">details</span></p></td>
-<td>audio/x-opus</td>
-</tr>
-</tbody>
-</table></div>
-</div>
-</div>
-</div>
-<div class="refsect1">
-<a name="gst-plugins-bad-plugins-opusenc.functions_details"></a><h2>Functions</h2>
-<p></p>
-</div>
-<div class="refsect1">
-<a name="gst-plugins-bad-plugins-opusenc.other_details"></a><h2>Types and Values</h2>
-<div class="refsect2">
-<a name="GstOpusEnc-struct"></a><h3>struct GstOpusEnc</h3>
-<pre class="programlisting">struct GstOpusEnc;</pre>
-</div>
-</div>
-<div class="refsect1">
-<a name="gst-plugins-bad-plugins-opusenc.property-details"></a><h2>Property Details</h2>
-<div class="refsect2">
-<a name="GstOpusEnc--audio"></a><h3>The <code class="literal">“audio”</code> property</h3>
-<pre class="programlisting">  “audio”                    <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a></pre>
-<p>Audio or voice (DEPRECATED: use audio-type).</p>
-<p>Flags: Read / Write</p>
-<p>Default value: TRUE</p>
-</div>
-<hr>
-<div class="refsect2">
-<a name="GstOpusEnc--bandwidth"></a><h3>The <code class="literal">“bandwidth”</code> property</h3>
-<pre class="programlisting">  “bandwidth”                <span class="type">GstOpusEncBandwidth</span></pre>
-<p>Audio Band Width.</p>
-<p>Flags: Read / Write</p>
-<p>Default value: Full band</p>
-</div>
-<hr>
-<div class="refsect2">
-<a name="GstOpusEnc--bitrate"></a><h3>The <code class="literal">“bitrate”</code> property</h3>
-<pre class="programlisting">  “bitrate”                  <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a></pre>
-<p>Specify an encoding bit-rate (in bps).</p>
-<p>Flags: Read / Write</p>
-<p>Allowed values: [4000,650000]</p>
-<p>Default value: 64000</p>
-</div>
-<hr>
-<div class="refsect2">
-<a name="GstOpusEnc--cbr"></a><h3>The <code class="literal">“cbr”</code> property</h3>
-<pre class="programlisting">  “cbr”                      <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a></pre>
-<p>Constant bit rate (DEPRECATED: use bitrate-type).</p>
-<p>Flags: Read / Write</p>
-<p>Default value: TRUE</p>
-</div>
-<hr>
-<div class="refsect2">
-<a name="GstOpusEnc--complexity"></a><h3>The <code class="literal">“complexity”</code> property</h3>
-<pre class="programlisting">  “complexity”               <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a></pre>
-<p>Complexity.</p>
-<p>Flags: Read / Write</p>
-<p>Allowed values: [0,10]</p>
-<p>Default value: 10</p>
-</div>
-<hr>
-<div class="refsect2">
-<a name="GstOpusEnc--constrained-vbr"></a><h3>The <code class="literal">“constrained-vbr”</code> property</h3>
-<pre class="programlisting">  “constrained-vbr”          <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a></pre>
-<p>Constrained VBR (DEPRECATED: use bitrate-type).</p>
-<p>Flags: Read / Write</p>
-<p>Default value: TRUE</p>
-</div>
-<hr>
-<div class="refsect2">
-<a name="GstOpusEnc--dtx"></a><h3>The <code class="literal">“dtx”</code> property</h3>
-<pre class="programlisting">  “dtx”                      <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a></pre>
-<p>DTX.</p>
-<p>Flags: Read / Write</p>
-<p>Default value: FALSE</p>
-</div>
-<hr>
-<div class="refsect2">
-<a name="GstOpusEnc--frame-size"></a><h3>The <code class="literal">“frame-size”</code> property</h3>
-<pre class="programlisting">  “frame-size”               <span class="type">GstOpusEncFrameSize</span></pre>
-<p>The duration of an audio frame, in ms.</p>
-<p>Flags: Read / Write</p>
-<p>Default value: 20</p>
-</div>
-<hr>
-<div class="refsect2">
-<a name="GstOpusEnc--inband-fec"></a><h3>The <code class="literal">“inband-fec”</code> property</h3>
-<pre class="programlisting">  “inband-fec”               <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a></pre>
-<p>Enable forward error correction.</p>
-<p>Flags: Read / Write</p>
-<p>Default value: FALSE</p>
-</div>
-<hr>
-<div class="refsect2">
-<a name="GstOpusEnc--max-payload-size"></a><h3>The <code class="literal">“max-payload-size”</code> property</h3>
-<pre class="programlisting">  “max-payload-size”         <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a></pre>
-<p>Maximum payload size in bytes.</p>
-<p>Flags: Read / Write</p>
-<p>Allowed values: [2,4000]</p>
-<p>Default value: 4000</p>
-</div>
-<hr>
-<div class="refsect2">
-<a name="GstOpusEnc--packet-loss-percentage"></a><h3>The <code class="literal">“packet-loss-percentage”</code> property</h3>
-<pre class="programlisting">  “packet-loss-percentage”   <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a></pre>
-<p>Packet loss percentage.</p>
-<p>Flags: Read / Write</p>
-<p>Allowed values: [0,100]</p>
-<p>Default value: 0</p>
-</div>
-<hr>
-<div class="refsect2">
-<a name="GstOpusEnc--audio-type"></a><h3>The <code class="literal">“audio-type”</code> property</h3>
-<pre class="programlisting">  “audio-type”               <span class="type">GstOpusEncAudioType</span></pre>
-<p>What type of audio to optimize for.</p>
-<p>Flags: Read / Write</p>
-<p>Default value: Generic audio</p>
-</div>
-<hr>
-<div class="refsect2">
-<a name="GstOpusEnc--bitrate-type"></a><h3>The <code class="literal">“bitrate-type”</code> property</h3>
-<pre class="programlisting">  “bitrate-type”             <span class="type">GstOpusEncBitrateType</span></pre>
-<p>Bitrate type.</p>
-<p>Flags: Read / Write</p>
-<p>Default value: CBR</p>
-</div>
-</div>
-</div>
-<div class="footer">
-<hr>Generated by GTK-Doc V1.24</div>
-</body>
-</html>
\ No newline at end of file
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-opusparse.html b/docs/plugins/html/gst-plugins-bad-plugins-opusparse.html
deleted file mode 100644
index da892bf..0000000
--- a/docs/plugins/html/gst-plugins-bad-plugins-opusparse.html
+++ /dev/null
@@ -1,156 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html>
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>opusparse: GStreamer Bad Plugins 1.0 Plugins Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
-<link rel="home" href="index.html" title="GStreamer Bad Plugins 1.0 Plugins Reference Manual">
-<link rel="up" href="ch01.html" title="gst-plugins-bad Elements">
-<link rel="prev" href="gst-plugins-bad-plugins-opusenc.html" title="opusenc">
-<link rel="next" href="gst-plugins-bad-plugins-rtpopuspay.html" title="rtpopuspay">
-<meta name="generator" content="GTK-Doc V1.24 (XML mode)">
-<link rel="stylesheet" href="style.css" type="text/css">
-</head>
-<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
-<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="5"><tr valign="middle">
-<td width="100%" align="left" class="shortcuts">
-<a href="#" class="shortcut">Top</a><span id="nav_description">  <span class="dim">|</span> 
-                  <a href="#gst-plugins-bad-plugins-opusparse.description" class="shortcut">Description</a></span><span id="nav_hierarchy">  <span class="dim">|</span> 
-                  <a href="#gst-plugins-bad-plugins-opusparse.object-hierarchy" class="shortcut">Object Hierarchy</a></span>
-</td>
-<td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
-<td><a accesskey="u" href="ch01.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
-<td><a accesskey="p" href="gst-plugins-bad-plugins-opusenc.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
-<td><a accesskey="n" href="gst-plugins-bad-plugins-rtpopuspay.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
-</tr></table>
-<div class="refentry">
-<a name="gst-plugins-bad-plugins-opusparse"></a><div class="titlepage"></div>
-<div class="refnamediv"><table width="100%"><tr>
-<td valign="top">
-<h2><span class="refentrytitle"><a name="gst-plugins-bad-plugins-opusparse.top_of_page"></a>opusparse</span></h2>
-<p>opusparse</p>
-</td>
-<td class="gallery_image" valign="top" align="right"></td>
-</tr></table></div>
-<a name="GstOpenalSrc"></a><a name="GstOpencvTextOverlay"></a><a name="GstOpusDec"></a><a name="GstOpusEnc"></a><a name="GstOpusParse"></a><div class="refsect1">
-<a name="gst-plugins-bad-plugins-opusparse.other"></a><h2>Types and Values</h2>
-<div class="informaltable"><table width="100%" border="0">
-<colgroup>
-<col width="150px" class="name">
-<col class="description">
-</colgroup>
-<tbody><tr>
-<td class="datatype_keyword">struct</td>
-<td class="function_name"><a class="link" href="gst-plugins-bad-plugins-opusparse.html#GstOpusParse-struct" title="struct GstOpusParse">GstOpusParse</a></td>
-</tr></tbody>
-</table></div>
-</div>
-<div class="refsect1">
-<a name="gst-plugins-bad-plugins-opusparse.object-hierarchy"></a><h2>Object Hierarchy</h2>
-<pre class="screen">    <a href="https://developer.gnome.org/gobject/unstable/gobject-The-Base-Object-Type.html#GObject">GObject</a>
-    <span class="lineart">╰──</span> <a href="https://developer.gnome.org/gobject/unstable/gobject-The-Base-Object-Type.html#GInitiallyUnowned">GInitiallyUnowned</a>
-        <span class="lineart">╰──</span> <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstObject.html">GstObject</a>
-            <span class="lineart">╰──</span> <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html">GstElement</a>
-                <span class="lineart">╰──</span> <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer-libs/html/GstBaseParse.html">GstBaseParse</a>
-                    <span class="lineart">╰──</span> GstOpusParse
-</pre>
-</div>
-<div class="refsect1">
-<a name="gst-plugins-bad-plugins-opusparse.description"></a><h2>Description</h2>
-<div class="refsynopsisdiv">
-<h2>Synopsis</h2>
-<div class="refsect2">
-<a name="id-1.2.59.10.2.1"></a><h3>Element Information</h3>
-<div class="variablelist"><table border="0" class="variablelist">
-<colgroup>
-<col align="left" valign="top">
-<col>
-</colgroup>
-<tbody>
-<tr>
-<td><p><span class="term">plugin</span></p></td>
-<td>
-            <a class="link" href="gst-plugins-bad-plugins-plugin-opus.html#plugin-opus">opus</a>
-          </td>
-</tr>
-<tr>
-<td><p><span class="term">author</span></p></td>
-<td>Vincent Penquerc'h &lt;vincent.penquerch@collabora.co.uk&gt;</td>
-</tr>
-<tr>
-<td><p><span class="term">class</span></p></td>
-<td>Codec/Parser/Audio</td>
-</tr>
-</tbody>
-</table></div>
-</div>
-<hr>
-<div class="refsect2">
-<a name="id-1.2.59.10.2.2"></a><h3>Element Pads</h3>
-<div class="variablelist"><table border="0" class="variablelist">
-<colgroup>
-<col align="left" valign="top">
-<col>
-</colgroup>
-<tbody>
-<tr>
-<td><p><span class="term">name</span></p></td>
-<td>sink</td>
-</tr>
-<tr>
-<td><p><span class="term">direction</span></p></td>
-<td>sink</td>
-</tr>
-<tr>
-<td><p><span class="term">presence</span></p></td>
-<td>always</td>
-</tr>
-<tr>
-<td><p><span class="term">details</span></p></td>
-<td>audio/x-opus</td>
-</tr>
-</tbody>
-</table></div>
-<div class="variablelist"><table border="0" class="variablelist">
-<colgroup>
-<col align="left" valign="top">
-<col>
-</colgroup>
-<tbody>
-<tr>
-<td><p><span class="term">name</span></p></td>
-<td>src</td>
-</tr>
-<tr>
-<td><p><span class="term">direction</span></p></td>
-<td>source</td>
-</tr>
-<tr>
-<td><p><span class="term">presence</span></p></td>
-<td>always</td>
-</tr>
-<tr>
-<td><p><span class="term">details</span></p></td>
-<td>audio/x-opus, framed=(boolean)true</td>
-</tr>
-</tbody>
-</table></div>
-</div>
-</div>
-</div>
-<div class="refsect1">
-<a name="gst-plugins-bad-plugins-opusparse.functions_details"></a><h2>Functions</h2>
-<p></p>
-</div>
-<div class="refsect1">
-<a name="gst-plugins-bad-plugins-opusparse.other_details"></a><h2>Types and Values</h2>
-<div class="refsect2">
-<a name="GstOpusParse-struct"></a><h3>struct GstOpusParse</h3>
-<pre class="programlisting">struct GstOpusParse;</pre>
-</div>
-</div>
-</div>
-<div class="footer">
-<hr>Generated by GTK-Doc V1.24</div>
-</body>
-</html>
\ No newline at end of file
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-pcapparse.html b/docs/plugins/html/gst-plugins-bad-plugins-pcapparse.html
index 9013560..a3c6ce9 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-pcapparse.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-pcapparse.html
@@ -3,10 +3,10 @@
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>pcapparse: GStreamer Bad Plugins 1.0 Plugins Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
 <link rel="home" href="index.html" title="GStreamer Bad Plugins 1.0 Plugins Reference Manual">
 <link rel="up" href="ch01.html" title="gst-plugins-bad Elements">
-<link rel="prev" href="gst-plugins-bad-plugins-rtpopusdepay.html" title="rtpopusdepay">
+<link rel="prev" href="gst-plugins-bad-plugins-openalsink.html" title="openalsink">
 <link rel="next" href="gst-plugins-bad-plugins-pinch.html" title="pinch">
 <meta name="generator" content="GTK-Doc V1.24 (XML mode)">
 <link rel="stylesheet" href="style.css" type="text/css">
@@ -21,7 +21,7 @@
 </td>
 <td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
 <td><a accesskey="u" href="ch01.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
-<td><a accesskey="p" href="gst-plugins-bad-plugins-rtpopusdepay.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
+<td><a accesskey="p" href="gst-plugins-bad-plugins-openalsink.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
 <td><a accesskey="n" href="gst-plugins-bad-plugins-pinch.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
 </tr></table>
 <div class="refentry">
@@ -35,7 +35,7 @@
 </tr></table></div>
 <div class="refsect1">
 <a name="gst-plugins-bad-plugins-pcapparse.properties"></a><h2>Properties</h2>
-<div class="informaltable"><table border="0">
+<div class="informaltable"><table class="informaltable" border="0">
 <colgroup>
 <col width="150px" class="properties_type">
 <col width="300px" class="properties_name">
@@ -80,7 +80,7 @@
 </div>
 <a name="GstPcapParse"></a><div class="refsect1">
 <a name="gst-plugins-bad-plugins-pcapparse.other"></a><h2>Types and Values</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="name">
 <col class="description">
@@ -107,14 +107,14 @@
 <a class="link" href="gst-plugins-bad-plugins-pcapparse.html#GstPcapParse--src-port" title="The “src-port” property"><span class="type">“src-port”</span></a> and <a class="link" href="gst-plugins-bad-plugins-pcapparse.html#GstPcapParse--dst-port" title="The “dst-port” property"><span class="type">“dst-port”</span></a> to restrict which packets
 should be included.</p>
 <div class="refsect2">
-<a name="id-1.2.62.7.3"></a><h3>Example pipelines</h3>
+<a name="id-1.2.57.7.3"></a><h3>Example pipelines</h3>
 <div class="informalexample">
   <table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
     <tbody>
       <tr>
         <td class="listing_lines" align="right"><pre>1
 2</pre></td>
-        <td class="listing_code"><pre class="programlisting">gst<span class="gtkdoc opt">-</span>launch<span class="gtkdoc opt">-</span><span class="number">0.10</span> filesrc location<span class="gtkdoc opt">=</span>h264crasher<span class="gtkdoc opt">.</span>pcap <span class="gtkdoc opt">!</span> pcapparse <span class="gtkdoc opt">!</span> rtph264depay
+        <td class="listing_code"><pre class="programlisting">gst<span class="gtkdoc opt">-</span>launch<span class="gtkdoc opt">-</span><span class="number">1.0</span> filesrc location<span class="gtkdoc opt">=</span>h264crasher<span class="gtkdoc opt">.</span>pcap <span class="gtkdoc opt">!</span> pcapparse <span class="gtkdoc opt">!</span> rtph264depay
 <span class="gtkdoc opt">!</span> ffdec_h264 <span class="gtkdoc opt">!</span> fakesink</pre></td>
       </tr>
     </tbody>
@@ -126,7 +126,7 @@
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="id-1.2.62.7.4.1"></a><h3>Element Information</h3>
+<a name="id-1.2.57.7.4.1"></a><h3>Element Information</h3>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
@@ -152,7 +152,7 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="id-1.2.62.7.4.2"></a><h3>Element Pads</h3>
+<a name="id-1.2.57.7.4.2"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-pinch.html b/docs/plugins/html/gst-plugins-bad-plugins-pinch.html
index 1663db4..7255d92 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-pinch.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-pinch.html
@@ -3,7 +3,7 @@
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>pinch: GStreamer Bad Plugins 1.0 Plugins Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
 <link rel="home" href="index.html" title="GStreamer Bad Plugins 1.0 Plugins Reference Manual">
 <link rel="up" href="ch01.html" title="gst-plugins-bad Elements">
 <link rel="prev" href="gst-plugins-bad-plugins-pcapparse.html" title="pcapparse">
@@ -35,7 +35,7 @@
 </tr></table></div>
 <div class="refsect1">
 <a name="gst-plugins-bad-plugins-pinch.properties"></a><h2>Properties</h2>
-<div class="informaltable"><table border="0">
+<div class="informaltable"><table class="informaltable" border="0">
 <colgroup>
 <col width="150px" class="properties_type">
 <col width="300px" class="properties_name">
@@ -50,7 +50,7 @@
 </div>
 <a name="GstPinch"></a><div class="refsect1">
 <a name="gst-plugins-bad-plugins-pinch.other"></a><h2>Types and Values</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="name">
 <col class="description">
@@ -76,10 +76,25 @@
 </div>
 <div class="refsect1">
 <a name="gst-plugins-bad-plugins-pinch.description"></a><h2>Description</h2>
+<p>Pinch applies a 'pinch' geometric transform to the image.</p>
+<div class="refsect2">
+<a name="id-1.2.58.7.3"></a><h3>Example launch line</h3>
+<div class="informalexample">
+  <table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
+    <tbody>
+      <tr>
+        <td class="listing_lines" align="right"><pre>1</pre></td>
+        <td class="listing_code"><pre class="programlisting">gst<span class="gtkdoc opt">-</span>launch<span class="gtkdoc opt">-</span><span class="number">1.0</span> <span class="gtkdoc opt">-</span>v videotestsrc <span class="gtkdoc opt">!</span> pinch <span class="gtkdoc opt">!</span> videoconvert <span class="gtkdoc opt">!</span> autovideosink</pre></td>
+      </tr>
+    </tbody>
+  </table>
+</div>
+
+</div>
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="id-1.2.63.7.2.1"></a><h3>Element Information</h3>
+<a name="id-1.2.58.7.4.1"></a><h3>Element Information</h3>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
@@ -105,7 +120,7 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="id-1.2.63.7.2.2"></a><h3>Element Pads</h3>
+<a name="id-1.2.58.7.4.2"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
@@ -179,6 +194,10 @@
 <p>Default value: 0.5</p>
 </div>
 </div>
+<div class="refsect1">
+<a name="gst-plugins-bad-plugins-pinch.see-also"></a><h2>See Also</h2>
+<p>geometrictransform</p>
+</div>
 </div>
 <div class="footer">
 <hr>Generated by GTK-Doc V1.24</div>
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-plugin-aiff.html b/docs/plugins/html/gst-plugins-bad-plugins-plugin-aiff.html
index f23134a..bdb8b11 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-aiff.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-aiff.html
@@ -3,7 +3,7 @@
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>aiff: GStreamer Bad Plugins 1.0 Plugins Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
 <link rel="home" href="index.html" title="GStreamer Bad Plugins 1.0 Plugins Reference Manual">
 <link rel="up" href="ch02.html" title="gst-plugins-bad Plugins">
 <link rel="prev" href="ch02.html" title="gst-plugins-bad Plugins">
@@ -42,7 +42,7 @@
 </tr>
 <tr>
 <td><p><span class="term">version</span></p></td>
-<td>1.6.3</td>
+<td>1.7.91</td>
 </tr>
 <tr>
 <td><p><span class="term">run-time license</span></p></td>
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-plugin-assrender.html b/docs/plugins/html/gst-plugins-bad-plugins-plugin-assrender.html
index 9fc6efb..1948c24 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-assrender.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-assrender.html
@@ -3,7 +3,7 @@
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>assrender: GStreamer Bad Plugins 1.0 Plugins Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
 <link rel="home" href="index.html" title="GStreamer Bad Plugins 1.0 Plugins Reference Manual">
 <link rel="up" href="ch02.html" title="gst-plugins-bad Plugins">
 <link rel="prev" href="gst-plugins-bad-plugins-plugin-autoconvert.html" title="autoconvert">
@@ -42,7 +42,7 @@
 </tr>
 <tr>
 <td><p><span class="term">version</span></p></td>
-<td>1.6.3</td>
+<td>1.7.91</td>
 </tr>
 <tr>
 <td><p><span class="term">run-time license</span></p></td>
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-plugin-audiomixer.html b/docs/plugins/html/gst-plugins-bad-plugins-plugin-audiomixer.html
index b8dfe64..726cc96 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-audiomixer.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-audiomixer.html
@@ -3,7 +3,7 @@
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>audiomixer: GStreamer Bad Plugins 1.0 Plugins Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
 <link rel="home" href="index.html" title="GStreamer Bad Plugins 1.0 Plugins Reference Manual">
 <link rel="up" href="ch02.html" title="gst-plugins-bad Plugins">
 <link rel="prev" href="gst-plugins-bad-plugins-plugin-aiff.html" title="aiff">
@@ -42,7 +42,7 @@
 </tr>
 <tr>
 <td><p><span class="term">version</span></p></td>
-<td>1.6.3</td>
+<td>1.7.91</td>
 </tr>
 <tr>
 <td><p><span class="term">run-time license</span></p></td>
@@ -68,13 +68,17 @@
 </colgroup>
 <tbody>
 <tr>
-<td><p><span class="term">audiointerleave</span></p></td>
+<td><p><span class="term"><a class="link" href="gst-plugins-bad-plugins-audiointerleave.html" title="audiointerleave">audiointerleave</a></span></p></td>
 <td>Mixes multiple audio streams</td>
 </tr>
 <tr>
 <td><p><span class="term"><a class="link" href="gst-plugins-bad-plugins-audiomixer.html" title="audiomixer">audiomixer</a></span></p></td>
 <td>Mixes multiple audio streams</td>
 </tr>
+<tr>
+<td><p><span class="term"><a class="link" href="gst-plugins-bad-plugins-liveadder.html" title="liveadder">liveadder</a></span></p></td>
+<td>Mixes multiple audio streams</td>
+</tr>
 </tbody>
 </table></div>
 </div>
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-plugin-audiovisualizers.html b/docs/plugins/html/gst-plugins-bad-plugins-plugin-audiovisualizers.html
index fa2850e..5076a26 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-audiovisualizers.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-audiovisualizers.html
@@ -3,7 +3,7 @@
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>audiovisualizers: GStreamer Bad Plugins 1.0 Plugins Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
 <link rel="home" href="index.html" title="GStreamer Bad Plugins 1.0 Plugins Reference Manual">
 <link rel="up" href="ch02.html" title="gst-plugins-bad Plugins">
 <link rel="prev" href="gst-plugins-bad-plugins-plugin-audiomixer.html" title="audiomixer">
@@ -42,7 +42,7 @@
 </tr>
 <tr>
 <td><p><span class="term">version</span></p></td>
-<td>1.6.3</td>
+<td>1.7.91</td>
 </tr>
 <tr>
 <td><p><span class="term">run-time license</span></p></td>
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-plugin-autoconvert.html b/docs/plugins/html/gst-plugins-bad-plugins-plugin-autoconvert.html
index 4a63b05..6d248f6 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-autoconvert.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-autoconvert.html
@@ -3,7 +3,7 @@
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>autoconvert: GStreamer Bad Plugins 1.0 Plugins Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
 <link rel="home" href="index.html" title="GStreamer Bad Plugins 1.0 Plugins Reference Manual">
 <link rel="up" href="ch02.html" title="gst-plugins-bad Plugins">
 <link rel="prev" href="gst-plugins-bad-plugins-plugin-audiovisualizers.html" title="audiovisualizers">
@@ -42,7 +42,7 @@
 </tr>
 <tr>
 <td><p><span class="term">version</span></p></td>
-<td>1.6.3</td>
+<td>1.7.91</td>
 </tr>
 <tr>
 <td><p><span class="term">run-time license</span></p></td>
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-plugin-bayer.html b/docs/plugins/html/gst-plugins-bad-plugins-plugin-bayer.html
index 5a8e6f3..b9c5a29 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-bayer.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-bayer.html
@@ -3,7 +3,7 @@
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>bayer: GStreamer Bad Plugins 1.0 Plugins Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
 <link rel="home" href="index.html" title="GStreamer Bad Plugins 1.0 Plugins Reference Manual">
 <link rel="up" href="ch02.html" title="gst-plugins-bad Plugins">
 <link rel="prev" href="gst-plugins-bad-plugins-plugin-assrender.html" title="assrender">
@@ -42,7 +42,7 @@
 </tr>
 <tr>
 <td><p><span class="term">version</span></p></td>
-<td>1.6.3</td>
+<td>1.7.91</td>
 </tr>
 <tr>
 <td><p><span class="term">run-time license</span></p></td>
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-plugin-bs2b.html b/docs/plugins/html/gst-plugins-bad-plugins-plugin-bs2b.html
index 3fb6ab2..d85d680 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-bs2b.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-bs2b.html
@@ -3,7 +3,7 @@
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>bs2b: GStreamer Bad Plugins 1.0 Plugins Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
 <link rel="home" href="index.html" title="GStreamer Bad Plugins 1.0 Plugins Reference Manual">
 <link rel="up" href="ch02.html" title="gst-plugins-bad Plugins">
 <link rel="prev" href="gst-plugins-bad-plugins-plugin-bayer.html" title="bayer">
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-plugin-bz2.html b/docs/plugins/html/gst-plugins-bad-plugins-plugin-bz2.html
index 352a70a..9162e59 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-bz2.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-bz2.html
@@ -3,7 +3,7 @@
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>bz2: GStreamer Bad Plugins 1.0 Plugins Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
 <link rel="home" href="index.html" title="GStreamer Bad Plugins 1.0 Plugins Reference Manual">
 <link rel="up" href="ch02.html" title="gst-plugins-bad Plugins">
 <link rel="prev" href="gst-plugins-bad-plugins-plugin-bs2b.html" title="bs2b">
@@ -42,7 +42,7 @@
 </tr>
 <tr>
 <td><p><span class="term">version</span></p></td>
-<td>1.6.3</td>
+<td>1.7.91</td>
 </tr>
 <tr>
 <td><p><span class="term">run-time license</span></p></td>
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-plugin-camerabin.html b/docs/plugins/html/gst-plugins-bad-plugins-plugin-camerabin.html
index 49c6dc9..acbb0ed 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-camerabin.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-camerabin.html
@@ -3,7 +3,7 @@
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>camerabin: GStreamer Bad Plugins 1.0 Plugins Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
 <link rel="home" href="index.html" title="GStreamer Bad Plugins 1.0 Plugins Reference Manual">
 <link rel="up" href="ch02.html" title="gst-plugins-bad Plugins">
 <link rel="prev" href="gst-plugins-bad-plugins-plugin-bz2.html" title="bz2">
@@ -42,7 +42,7 @@
 </tr>
 <tr>
 <td><p><span class="term">version</span></p></td>
-<td>1.6.3</td>
+<td>1.7.91</td>
 </tr>
 <tr>
 <td><p><span class="term">run-time license</span></p></td>
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-plugin-coloreffects.html b/docs/plugins/html/gst-plugins-bad-plugins-plugin-coloreffects.html
index 5de0766..f133be9 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-coloreffects.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-coloreffects.html
@@ -3,7 +3,7 @@
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>coloreffects: GStreamer Bad Plugins 1.0 Plugins Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
 <link rel="home" href="index.html" title="GStreamer Bad Plugins 1.0 Plugins Reference Manual">
 <link rel="up" href="ch02.html" title="gst-plugins-bad Plugins">
 <link rel="prev" href="gst-plugins-bad-plugins-plugin-camerabin.html" title="camerabin">
@@ -42,7 +42,7 @@
 </tr>
 <tr>
 <td><p><span class="term">version</span></p></td>
-<td>1.6.3</td>
+<td>1.7.91</td>
 </tr>
 <tr>
 <td><p><span class="term">run-time license</span></p></td>
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-plugin-curl.html b/docs/plugins/html/gst-plugins-bad-plugins-plugin-curl.html
index 0527557..51cf995 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-curl.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-curl.html
@@ -3,7 +3,7 @@
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>curl: GStreamer Bad Plugins 1.0 Plugins Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
 <link rel="home" href="index.html" title="GStreamer Bad Plugins 1.0 Plugins Reference Manual">
 <link rel="up" href="ch02.html" title="gst-plugins-bad Plugins">
 <link rel="prev" href="gst-plugins-bad-plugins-plugin-coloreffects.html" title="coloreffects">
@@ -42,7 +42,7 @@
 </tr>
 <tr>
 <td><p><span class="term">version</span></p></td>
-<td>1.6.3</td>
+<td>1.7.91</td>
 </tr>
 <tr>
 <td><p><span class="term">run-time license</span></p></td>
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-plugin-dataurisrc.html b/docs/plugins/html/gst-plugins-bad-plugins-plugin-dataurisrc.html
index 0a18305..ac40505 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-dataurisrc.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-dataurisrc.html
@@ -3,7 +3,7 @@
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>dataurisrc: GStreamer Bad Plugins 1.0 Plugins Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
 <link rel="home" href="index.html" title="GStreamer Bad Plugins 1.0 Plugins Reference Manual">
 <link rel="up" href="ch02.html" title="gst-plugins-bad Plugins">
 <link rel="prev" href="gst-plugins-bad-plugins-plugin-curl.html" title="curl">
@@ -42,7 +42,7 @@
 </tr>
 <tr>
 <td><p><span class="term">version</span></p></td>
-<td>1.6.3</td>
+<td>1.7.91</td>
 </tr>
 <tr>
 <td><p><span class="term">run-time license</span></p></td>
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-plugin-debugutilsbad.html b/docs/plugins/html/gst-plugins-bad-plugins-plugin-debugutilsbad.html
index 5f0f150..6bc859d 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-debugutilsbad.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-debugutilsbad.html
@@ -3,7 +3,7 @@
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>debugutilsbad: GStreamer Bad Plugins 1.0 Plugins Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
 <link rel="home" href="index.html" title="GStreamer Bad Plugins 1.0 Plugins Reference Manual">
 <link rel="up" href="ch02.html" title="gst-plugins-bad Plugins">
 <link rel="prev" href="gst-plugins-bad-plugins-plugin-dataurisrc.html" title="dataurisrc">
@@ -42,7 +42,7 @@
 </tr>
 <tr>
 <td><p><span class="term">version</span></p></td>
-<td>1.6.3</td>
+<td>1.7.91</td>
 </tr>
 <tr>
 <td><p><span class="term">run-time license</span></p></td>
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-plugin-dtsdec.html b/docs/plugins/html/gst-plugins-bad-plugins-plugin-dtsdec.html
index 29b58ee..a0025ae 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-dtsdec.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-dtsdec.html
@@ -3,7 +3,7 @@
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>dtsdec: GStreamer Bad Plugins 1.0 Plugins Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
 <link rel="home" href="index.html" title="GStreamer Bad Plugins 1.0 Plugins Reference Manual">
 <link rel="up" href="ch02.html" title="gst-plugins-bad Plugins">
 <link rel="prev" href="gst-plugins-bad-plugins-plugin-debugutilsbad.html" title="debugutilsbad">
@@ -42,7 +42,7 @@
 </tr>
 <tr>
 <td><p><span class="term">version</span></p></td>
-<td>1.6.3</td>
+<td>1.7.91</td>
 </tr>
 <tr>
 <td><p><span class="term">run-time license</span></p></td>
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-plugin-dvb.html b/docs/plugins/html/gst-plugins-bad-plugins-plugin-dvb.html
index 62f680a..2745b01 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-dvb.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-dvb.html
@@ -3,7 +3,7 @@
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>dvb: GStreamer Bad Plugins 1.0 Plugins Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
 <link rel="home" href="index.html" title="GStreamer Bad Plugins 1.0 Plugins Reference Manual">
 <link rel="up" href="ch02.html" title="gst-plugins-bad Plugins">
 <link rel="prev" href="gst-plugins-bad-plugins-plugin-dtsdec.html" title="dtsdec">
@@ -42,7 +42,7 @@
 </tr>
 <tr>
 <td><p><span class="term">version</span></p></td>
-<td>1.6.3</td>
+<td>1.7.91</td>
 </tr>
 <tr>
 <td><p><span class="term">run-time license</span></p></td>
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-plugin-dvdspu.html b/docs/plugins/html/gst-plugins-bad-plugins-plugin-dvdspu.html
index 0759990..56d16e7 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-dvdspu.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-dvdspu.html
@@ -3,7 +3,7 @@
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>dvdspu: GStreamer Bad Plugins 1.0 Plugins Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
 <link rel="home" href="index.html" title="GStreamer Bad Plugins 1.0 Plugins Reference Manual">
 <link rel="up" href="ch02.html" title="gst-plugins-bad Plugins">
 <link rel="prev" href="gst-plugins-bad-plugins-plugin-dvb.html" title="dvb">
@@ -42,7 +42,7 @@
 </tr>
 <tr>
 <td><p><span class="term">version</span></p></td>
-<td>1.6.3</td>
+<td>1.7.91</td>
 </tr>
 <tr>
 <td><p><span class="term">run-time license</span></p></td>
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-plugin-faac.html b/docs/plugins/html/gst-plugins-bad-plugins-plugin-faac.html
index de9bf31..b5f5a83 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-faac.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-faac.html
@@ -3,7 +3,7 @@
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>faac: GStreamer Bad Plugins 1.0 Plugins Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
 <link rel="home" href="index.html" title="GStreamer Bad Plugins 1.0 Plugins Reference Manual">
 <link rel="up" href="ch02.html" title="gst-plugins-bad Plugins">
 <link rel="prev" href="gst-plugins-bad-plugins-plugin-dvdspu.html" title="dvdspu">
@@ -42,7 +42,7 @@
 </tr>
 <tr>
 <td><p><span class="term">version</span></p></td>
-<td>1.5.0.1</td>
+<td>1.7.0.1</td>
 </tr>
 <tr>
 <td><p><span class="term">run-time license</span></p></td>
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-plugin-faad.html b/docs/plugins/html/gst-plugins-bad-plugins-plugin-faad.html
index 822e30f..1930f88 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-faad.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-faad.html
@@ -3,7 +3,7 @@
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>faad: GStreamer Bad Plugins 1.0 Plugins Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
 <link rel="home" href="index.html" title="GStreamer Bad Plugins 1.0 Plugins Reference Manual">
 <link rel="up" href="ch02.html" title="gst-plugins-bad Plugins">
 <link rel="prev" href="gst-plugins-bad-plugins-plugin-faac.html" title="faac">
@@ -42,7 +42,7 @@
 </tr>
 <tr>
 <td><p><span class="term">version</span></p></td>
-<td>1.6.3</td>
+<td>1.7.91</td>
 </tr>
 <tr>
 <td><p><span class="term">run-time license</span></p></td>
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-plugin-festival.html b/docs/plugins/html/gst-plugins-bad-plugins-plugin-festival.html
index 223f844..556036a 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-festival.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-festival.html
@@ -3,7 +3,7 @@
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>festival: GStreamer Bad Plugins 1.0 Plugins Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
 <link rel="home" href="index.html" title="GStreamer Bad Plugins 1.0 Plugins Reference Manual">
 <link rel="up" href="ch02.html" title="gst-plugins-bad Plugins">
 <link rel="prev" href="gst-plugins-bad-plugins-plugin-faad.html" title="faad">
@@ -42,7 +42,7 @@
 </tr>
 <tr>
 <td><p><span class="term">version</span></p></td>
-<td>1.6.3</td>
+<td>1.7.91</td>
 </tr>
 <tr>
 <td><p><span class="term">run-time license</span></p></td>
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-plugin-gaudieffects.html b/docs/plugins/html/gst-plugins-bad-plugins-plugin-gaudieffects.html
index acd5cf4..6df7c76 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-gaudieffects.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-gaudieffects.html
@@ -3,7 +3,7 @@
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>gaudieffects: GStreamer Bad Plugins 1.0 Plugins Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
 <link rel="home" href="index.html" title="GStreamer Bad Plugins 1.0 Plugins Reference Manual">
 <link rel="up" href="ch02.html" title="gst-plugins-bad Plugins">
 <link rel="prev" href="gst-plugins-bad-plugins-plugin-festival.html" title="festival">
@@ -42,7 +42,7 @@
 </tr>
 <tr>
 <td><p><span class="term">version</span></p></td>
-<td>1.6.3</td>
+<td>1.7.91</td>
 </tr>
 <tr>
 <td><p><span class="term">run-time license</span></p></td>
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-plugin-geometrictransform.html b/docs/plugins/html/gst-plugins-bad-plugins-plugin-geometrictransform.html
index b86034a..44df8ed 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-geometrictransform.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-geometrictransform.html
@@ -3,7 +3,7 @@
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>geometrictransform: GStreamer Bad Plugins 1.0 Plugins Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
 <link rel="home" href="index.html" title="GStreamer Bad Plugins 1.0 Plugins Reference Manual">
 <link rel="up" href="ch02.html" title="gst-plugins-bad Plugins">
 <link rel="prev" href="gst-plugins-bad-plugins-plugin-gaudieffects.html" title="gaudieffects">
@@ -42,7 +42,7 @@
 </tr>
 <tr>
 <td><p><span class="term">version</span></p></td>
-<td>1.6.3</td>
+<td>1.7.91</td>
 </tr>
 <tr>
 <td><p><span class="term">run-time license</span></p></td>
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-plugin-gsm.html b/docs/plugins/html/gst-plugins-bad-plugins-plugin-gsm.html
index 1be49b8..5776321 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-gsm.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-gsm.html
@@ -3,7 +3,7 @@
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>gsm: GStreamer Bad Plugins 1.0 Plugins Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
 <link rel="home" href="index.html" title="GStreamer Bad Plugins 1.0 Plugins Reference Manual">
 <link rel="up" href="ch02.html" title="gst-plugins-bad Plugins">
 <link rel="prev" href="gst-plugins-bad-plugins-plugin-geometrictransform.html" title="geometrictransform">
@@ -42,7 +42,7 @@
 </tr>
 <tr>
 <td><p><span class="term">version</span></p></td>
-<td>1.6.3</td>
+<td>1.7.91</td>
 </tr>
 <tr>
 <td><p><span class="term">run-time license</span></p></td>
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-plugin-jpegformat.html b/docs/plugins/html/gst-plugins-bad-plugins-plugin-jpegformat.html
index 787a6fd..bffbbbd 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-jpegformat.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-jpegformat.html
@@ -3,11 +3,11 @@
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>jpegformat: GStreamer Bad Plugins 1.0 Plugins Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
 <link rel="home" href="index.html" title="GStreamer Bad Plugins 1.0 Plugins Reference Manual">
 <link rel="up" href="ch02.html" title="gst-plugins-bad Plugins">
 <link rel="prev" href="gst-plugins-bad-plugins-plugin-gsm.html" title="gsm">
-<link rel="next" href="gst-plugins-bad-plugins-plugin-liveadder.html" title="liveadder">
+<link rel="next" href="gst-plugins-bad-plugins-plugin-mimic.html" title="mimic">
 <meta name="generator" content="GTK-Doc V1.24 (XML mode)">
 <link rel="stylesheet" href="style.css" type="text/css">
 </head>
@@ -17,7 +17,7 @@
 <td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
 <td><a accesskey="u" href="ch02.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
 <td><a accesskey="p" href="gst-plugins-bad-plugins-plugin-gsm.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
-<td><a accesskey="n" href="gst-plugins-bad-plugins-plugin-liveadder.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
+<td><a accesskey="n" href="gst-plugins-bad-plugins-plugin-mimic.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
 </tr></table>
 <div class="refentry">
 <a name="gst-plugins-bad-plugins-plugin-jpegformat"></a><div class="titlepage"></div>
@@ -42,7 +42,7 @@
 </tr>
 <tr>
 <td><p><span class="term">version</span></p></td>
-<td>1.6.3</td>
+<td>1.7.91</td>
 </tr>
 <tr>
 <td><p><span class="term">run-time license</span></p></td>
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-plugin-liveadder.html b/docs/plugins/html/gst-plugins-bad-plugins-plugin-liveadder.html
deleted file mode 100644
index 5411d36..0000000
--- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-liveadder.html
+++ /dev/null
@@ -1,79 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html>
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>liveadder: GStreamer Bad Plugins 1.0 Plugins Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
-<link rel="home" href="index.html" title="GStreamer Bad Plugins 1.0 Plugins Reference Manual">
-<link rel="up" href="ch02.html" title="gst-plugins-bad Plugins">
-<link rel="prev" href="gst-plugins-bad-plugins-plugin-jpegformat.html" title="jpegformat">
-<link rel="next" href="gst-plugins-bad-plugins-plugin-mimic.html" title="mimic">
-<meta name="generator" content="GTK-Doc V1.24 (XML mode)">
-<link rel="stylesheet" href="style.css" type="text/css">
-</head>
-<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
-<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="5"><tr valign="middle">
-<td width="100%" align="left" class="shortcuts"></td>
-<td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
-<td><a accesskey="u" href="ch02.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
-<td><a accesskey="p" href="gst-plugins-bad-plugins-plugin-jpegformat.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
-<td><a accesskey="n" href="gst-plugins-bad-plugins-plugin-mimic.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
-</tr></table>
-<div class="refentry">
-<a name="gst-plugins-bad-plugins-plugin-liveadder"></a><div class="titlepage"></div>
-<div class="refnamediv"><table width="100%"><tr>
-<td valign="top">
-<h2><span class="refentrytitle">liveadder</span></h2>
-<p>liveadder — <a name="plugin-liveadder"></a>Adds multiple live discontinuous streams</p>
-</td>
-<td class="gallery_image" valign="top" align="right"></td>
-</tr></table></div>
-<div class="refsect1">
-<a name="id-1.3.25.3"></a><h2>Plugin Information</h2>
-<div class="variablelist"><table border="0" class="variablelist">
-<colgroup>
-<col align="left" valign="top">
-<col>
-</colgroup>
-<tbody>
-<tr>
-<td><p><span class="term">filename</span></p></td>
-<td>libgstliveadder.so</td>
-</tr>
-<tr>
-<td><p><span class="term">version</span></p></td>
-<td>1.6.3</td>
-</tr>
-<tr>
-<td><p><span class="term">run-time license</span></p></td>
-<td>LGPL</td>
-</tr>
-<tr>
-<td><p><span class="term">package</span></p></td>
-<td>GStreamer Bad Plug-ins source release</td>
-</tr>
-<tr>
-<td><p><span class="term">origin</span></p></td>
-<td>Unknown package origin</td>
-</tr>
-</tbody>
-</table></div>
-</div>
-<div class="refsect1">
-<a name="id-1.3.25.4"></a><h2>Elements</h2>
-<div class="variablelist"><table border="0" class="variablelist">
-<colgroup>
-<col align="left" valign="top">
-<col>
-</colgroup>
-<tbody><tr>
-<td><p><span class="term"><a class="link" href="gst-plugins-bad-plugins-liveadder.html" title="liveadder">liveadder</a></span></p></td>
-<td>Mixes live/discontinuous audio streams</td>
-</tr></tbody>
-</table></div>
-</div>
-</div>
-<div class="footer">
-<hr>Generated by GTK-Doc V1.24</div>
-</body>
-</html>
\ No newline at end of file
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-plugin-mimic.html b/docs/plugins/html/gst-plugins-bad-plugins-plugin-mimic.html
index f80e9cb..8849553 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-mimic.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-mimic.html
@@ -3,10 +3,10 @@
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>mimic: GStreamer Bad Plugins 1.0 Plugins Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
 <link rel="home" href="index.html" title="GStreamer Bad Plugins 1.0 Plugins Reference Manual">
 <link rel="up" href="ch02.html" title="gst-plugins-bad Plugins">
-<link rel="prev" href="gst-plugins-bad-plugins-plugin-liveadder.html" title="liveadder">
+<link rel="prev" href="gst-plugins-bad-plugins-plugin-jpegformat.html" title="jpegformat">
 <link rel="next" href="gst-plugins-bad-plugins-plugin-mms.html" title="mms">
 <meta name="generator" content="GTK-Doc V1.24 (XML mode)">
 <link rel="stylesheet" href="style.css" type="text/css">
@@ -16,7 +16,7 @@
 <td width="100%" align="left" class="shortcuts"></td>
 <td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
 <td><a accesskey="u" href="ch02.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
-<td><a accesskey="p" href="gst-plugins-bad-plugins-plugin-liveadder.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
+<td><a accesskey="p" href="gst-plugins-bad-plugins-plugin-jpegformat.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
 <td><a accesskey="n" href="gst-plugins-bad-plugins-plugin-mms.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
 </tr></table>
 <div class="refentry">
@@ -29,7 +29,7 @@
 <td class="gallery_image" valign="top" align="right"></td>
 </tr></table></div>
 <div class="refsect1">
-<a name="id-1.3.26.3"></a><h2>Plugin Information</h2>
+<a name="id-1.3.25.3"></a><h2>Plugin Information</h2>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
@@ -42,7 +42,7 @@
 </tr>
 <tr>
 <td><p><span class="term">version</span></p></td>
-<td>1.6.3</td>
+<td>1.7.91</td>
 </tr>
 <tr>
 <td><p><span class="term">run-time license</span></p></td>
@@ -60,7 +60,7 @@
 </table></div>
 </div>
 <div class="refsect1">
-<a name="id-1.3.26.4"></a><h2>Elements</h2>
+<a name="id-1.3.25.4"></a><h2>Elements</h2>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-plugin-mms.html b/docs/plugins/html/gst-plugins-bad-plugins-plugin-mms.html
index fdb7ec4..6ae0c37 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-mms.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-mms.html
@@ -3,7 +3,7 @@
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>mms: GStreamer Bad Plugins 1.0 Plugins Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
 <link rel="home" href="index.html" title="GStreamer Bad Plugins 1.0 Plugins Reference Manual">
 <link rel="up" href="ch02.html" title="gst-plugins-bad Plugins">
 <link rel="prev" href="gst-plugins-bad-plugins-plugin-mimic.html" title="mimic">
@@ -29,7 +29,7 @@
 <td class="gallery_image" valign="top" align="right"></td>
 </tr></table></div>
 <div class="refsect1">
-<a name="id-1.3.27.3"></a><h2>Plugin Information</h2>
+<a name="id-1.3.26.3"></a><h2>Plugin Information</h2>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
@@ -42,7 +42,7 @@
 </tr>
 <tr>
 <td><p><span class="term">version</span></p></td>
-<td>1.6.3</td>
+<td>1.7.91</td>
 </tr>
 <tr>
 <td><p><span class="term">run-time license</span></p></td>
@@ -60,7 +60,7 @@
 </table></div>
 </div>
 <div class="refsect1">
-<a name="id-1.3.27.4"></a><h2>Elements</h2>
+<a name="id-1.3.26.4"></a><h2>Elements</h2>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-plugin-modplug.html b/docs/plugins/html/gst-plugins-bad-plugins-plugin-modplug.html
index 0089e67..dccd02d 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-modplug.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-modplug.html
@@ -3,7 +3,7 @@
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>modplug: GStreamer Bad Plugins 1.0 Plugins Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
 <link rel="home" href="index.html" title="GStreamer Bad Plugins 1.0 Plugins Reference Manual">
 <link rel="up" href="ch02.html" title="gst-plugins-bad Plugins">
 <link rel="prev" href="gst-plugins-bad-plugins-plugin-mms.html" title="mms">
@@ -29,7 +29,7 @@
 <td class="gallery_image" valign="top" align="right"></td>
 </tr></table></div>
 <div class="refsect1">
-<a name="id-1.3.28.3"></a><h2>Plugin Information</h2>
+<a name="id-1.3.27.3"></a><h2>Plugin Information</h2>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
@@ -42,7 +42,7 @@
 </tr>
 <tr>
 <td><p><span class="term">version</span></p></td>
-<td>1.6.3</td>
+<td>1.7.91</td>
 </tr>
 <tr>
 <td><p><span class="term">run-time license</span></p></td>
@@ -60,7 +60,7 @@
 </table></div>
 </div>
 <div class="refsect1">
-<a name="id-1.3.28.4"></a><h2>Elements</h2>
+<a name="id-1.3.27.4"></a><h2>Elements</h2>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-plugin-mpeg2enc.html b/docs/plugins/html/gst-plugins-bad-plugins-plugin-mpeg2enc.html
index 816cbb6..f85d62b 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-mpeg2enc.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-mpeg2enc.html
@@ -3,7 +3,7 @@
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>mpeg2enc: GStreamer Bad Plugins 1.0 Plugins Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
 <link rel="home" href="index.html" title="GStreamer Bad Plugins 1.0 Plugins Reference Manual">
 <link rel="up" href="ch02.html" title="gst-plugins-bad Plugins">
 <link rel="prev" href="gst-plugins-bad-plugins-plugin-modplug.html" title="modplug">
@@ -29,7 +29,7 @@
 <td class="gallery_image" valign="top" align="right"></td>
 </tr></table></div>
 <div class="refsect1">
-<a name="id-1.3.29.3"></a><h2>Plugin Information</h2>
+<a name="id-1.3.28.3"></a><h2>Plugin Information</h2>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
@@ -42,7 +42,7 @@
 </tr>
 <tr>
 <td><p><span class="term">version</span></p></td>
-<td>1.6.3</td>
+<td>1.7.91</td>
 </tr>
 <tr>
 <td><p><span class="term">run-time license</span></p></td>
@@ -60,7 +60,7 @@
 </table></div>
 </div>
 <div class="refsect1">
-<a name="id-1.3.29.4"></a><h2>Elements</h2>
+<a name="id-1.3.28.4"></a><h2>Elements</h2>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-plugin-mpegpsmux.html b/docs/plugins/html/gst-plugins-bad-plugins-plugin-mpegpsmux.html
index 147be9c..6a2feea 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-mpegpsmux.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-mpegpsmux.html
@@ -3,7 +3,7 @@
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>mpegpsmux: GStreamer Bad Plugins 1.0 Plugins Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
 <link rel="home" href="index.html" title="GStreamer Bad Plugins 1.0 Plugins Reference Manual">
 <link rel="up" href="ch02.html" title="gst-plugins-bad Plugins">
 <link rel="prev" href="gst-plugins-bad-plugins-plugin-mpeg2enc.html" title="mpeg2enc">
@@ -29,7 +29,7 @@
 <td class="gallery_image" valign="top" align="right"></td>
 </tr></table></div>
 <div class="refsect1">
-<a name="id-1.3.30.3"></a><h2>Plugin Information</h2>
+<a name="id-1.3.29.3"></a><h2>Plugin Information</h2>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
@@ -42,7 +42,7 @@
 </tr>
 <tr>
 <td><p><span class="term">version</span></p></td>
-<td>1.6.3</td>
+<td>1.7.91</td>
 </tr>
 <tr>
 <td><p><span class="term">run-time license</span></p></td>
@@ -60,7 +60,7 @@
 </table></div>
 </div>
 <div class="refsect1">
-<a name="id-1.3.30.4"></a><h2>Elements</h2>
+<a name="id-1.3.29.4"></a><h2>Elements</h2>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-plugin-mpegtsmux.html b/docs/plugins/html/gst-plugins-bad-plugins-plugin-mpegtsmux.html
index 8309bc3..94b3307 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-mpegtsmux.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-mpegtsmux.html
@@ -3,7 +3,7 @@
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>mpegtsmux: GStreamer Bad Plugins 1.0 Plugins Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
 <link rel="home" href="index.html" title="GStreamer Bad Plugins 1.0 Plugins Reference Manual">
 <link rel="up" href="ch02.html" title="gst-plugins-bad Plugins">
 <link rel="prev" href="gst-plugins-bad-plugins-plugin-mpegpsmux.html" title="mpegpsmux">
@@ -29,7 +29,7 @@
 <td class="gallery_image" valign="top" align="right"></td>
 </tr></table></div>
 <div class="refsect1">
-<a name="id-1.3.31.3"></a><h2>Plugin Information</h2>
+<a name="id-1.3.30.3"></a><h2>Plugin Information</h2>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
@@ -42,7 +42,7 @@
 </tr>
 <tr>
 <td><p><span class="term">version</span></p></td>
-<td>1.6.3</td>
+<td>1.7.91</td>
 </tr>
 <tr>
 <td><p><span class="term">run-time license</span></p></td>
@@ -60,7 +60,7 @@
 </table></div>
 </div>
 <div class="refsect1">
-<a name="id-1.3.31.4"></a><h2>Elements</h2>
+<a name="id-1.3.30.4"></a><h2>Elements</h2>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-plugin-mplex.html b/docs/plugins/html/gst-plugins-bad-plugins-plugin-mplex.html
index d4bd721..a9b0b84 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-mplex.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-mplex.html
@@ -3,7 +3,7 @@
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>mplex: GStreamer Bad Plugins 1.0 Plugins Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
 <link rel="home" href="index.html" title="GStreamer Bad Plugins 1.0 Plugins Reference Manual">
 <link rel="up" href="ch02.html" title="gst-plugins-bad Plugins">
 <link rel="prev" href="gst-plugins-bad-plugins-plugin-mpegtsmux.html" title="mpegtsmux">
@@ -29,7 +29,7 @@
 <td class="gallery_image" valign="top" align="right"></td>
 </tr></table></div>
 <div class="refsect1">
-<a name="id-1.3.32.3"></a><h2>Plugin Information</h2>
+<a name="id-1.3.31.3"></a><h2>Plugin Information</h2>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
@@ -42,7 +42,7 @@
 </tr>
 <tr>
 <td><p><span class="term">version</span></p></td>
-<td>1.6.3</td>
+<td>1.7.91</td>
 </tr>
 <tr>
 <td><p><span class="term">run-time license</span></p></td>
@@ -60,7 +60,7 @@
 </table></div>
 </div>
 <div class="refsect1">
-<a name="id-1.3.32.4"></a><h2>Elements</h2>
+<a name="id-1.3.31.4"></a><h2>Elements</h2>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-plugin-neon.html b/docs/plugins/html/gst-plugins-bad-plugins-plugin-neon.html
index aec58b8..b6865d2 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-neon.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-neon.html
@@ -3,7 +3,7 @@
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>neon: GStreamer Bad Plugins 1.0 Plugins Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
 <link rel="home" href="index.html" title="GStreamer Bad Plugins 1.0 Plugins Reference Manual">
 <link rel="up" href="ch02.html" title="gst-plugins-bad Plugins">
 <link rel="prev" href="gst-plugins-bad-plugins-plugin-mplex.html" title="mplex">
@@ -29,7 +29,7 @@
 <td class="gallery_image" valign="top" align="right"></td>
 </tr></table></div>
 <div class="refsect1">
-<a name="id-1.3.33.3"></a><h2>Plugin Information</h2>
+<a name="id-1.3.32.3"></a><h2>Plugin Information</h2>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
@@ -42,7 +42,7 @@
 </tr>
 <tr>
 <td><p><span class="term">version</span></p></td>
-<td>1.6.2</td>
+<td>1.7.1</td>
 </tr>
 <tr>
 <td><p><span class="term">run-time license</span></p></td>
@@ -60,7 +60,7 @@
 </table></div>
 </div>
 <div class="refsect1">
-<a name="id-1.3.33.4"></a><h2>Elements</h2>
+<a name="id-1.3.32.4"></a><h2>Elements</h2>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-plugin-ofa.html b/docs/plugins/html/gst-plugins-bad-plugins-plugin-ofa.html
index 7c8301b..f242dc2 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-ofa.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-ofa.html
@@ -3,7 +3,7 @@
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>ofa: GStreamer Bad Plugins 1.0 Plugins Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
 <link rel="home" href="index.html" title="GStreamer Bad Plugins 1.0 Plugins Reference Manual">
 <link rel="up" href="ch02.html" title="gst-plugins-bad Plugins">
 <link rel="prev" href="gst-plugins-bad-plugins-plugin-neon.html" title="neon">
@@ -29,7 +29,7 @@
 <td class="gallery_image" valign="top" align="right"></td>
 </tr></table></div>
 <div class="refsect1">
-<a name="id-1.3.34.3"></a><h2>Plugin Information</h2>
+<a name="id-1.3.33.3"></a><h2>Plugin Information</h2>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
@@ -42,7 +42,7 @@
 </tr>
 <tr>
 <td><p><span class="term">version</span></p></td>
-<td>1.6.3</td>
+<td>1.7.91</td>
 </tr>
 <tr>
 <td><p><span class="term">run-time license</span></p></td>
@@ -60,7 +60,7 @@
 </table></div>
 </div>
 <div class="refsect1">
-<a name="id-1.3.34.4"></a><h2>Elements</h2>
+<a name="id-1.3.33.4"></a><h2>Elements</h2>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-plugin-openal.html b/docs/plugins/html/gst-plugins-bad-plugins-plugin-openal.html
index 2929596..050c3a6 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-openal.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-openal.html
@@ -3,7 +3,7 @@
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>openal: GStreamer Bad Plugins 1.0 Plugins Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
 <link rel="home" href="index.html" title="GStreamer Bad Plugins 1.0 Plugins Reference Manual">
 <link rel="up" href="ch02.html" title="gst-plugins-bad Plugins">
 <link rel="prev" href="gst-plugins-bad-plugins-plugin-ofa.html" title="ofa">
@@ -29,7 +29,7 @@
 <td class="gallery_image" valign="top" align="right"></td>
 </tr></table></div>
 <div class="refsect1">
-<a name="id-1.3.35.3"></a><h2>Plugin Information</h2>
+<a name="id-1.3.34.3"></a><h2>Plugin Information</h2>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
@@ -42,7 +42,7 @@
 </tr>
 <tr>
 <td><p><span class="term">version</span></p></td>
-<td>1.6.3</td>
+<td>1.7.91</td>
 </tr>
 <tr>
 <td><p><span class="term">run-time license</span></p></td>
@@ -60,7 +60,7 @@
 </table></div>
 </div>
 <div class="refsect1">
-<a name="id-1.3.35.4"></a><h2>Elements</h2>
+<a name="id-1.3.34.4"></a><h2>Elements</h2>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-plugin-opencv.html b/docs/plugins/html/gst-plugins-bad-plugins-plugin-opencv.html
index 11d57b8..623f6f8 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-opencv.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-opencv.html
@@ -3,11 +3,11 @@
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>opencv: GStreamer Bad Plugins 1.0 Plugins Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
 <link rel="home" href="index.html" title="GStreamer Bad Plugins 1.0 Plugins Reference Manual">
 <link rel="up" href="ch02.html" title="gst-plugins-bad Plugins">
 <link rel="prev" href="gst-plugins-bad-plugins-plugin-openal.html" title="openal">
-<link rel="next" href="gst-plugins-bad-plugins-plugin-opus.html" title="opus">
+<link rel="next" href="gst-plugins-bad-plugins-plugin-pcapparse.html" title="pcapparse">
 <meta name="generator" content="GTK-Doc V1.24 (XML mode)">
 <link rel="stylesheet" href="style.css" type="text/css">
 </head>
@@ -17,7 +17,7 @@
 <td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
 <td><a accesskey="u" href="ch02.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
 <td><a accesskey="p" href="gst-plugins-bad-plugins-plugin-openal.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
-<td><a accesskey="n" href="gst-plugins-bad-plugins-plugin-opus.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
+<td><a accesskey="n" href="gst-plugins-bad-plugins-plugin-pcapparse.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
 </tr></table>
 <div class="refentry">
 <a name="gst-plugins-bad-plugins-plugin-opencv"></a><div class="titlepage"></div>
@@ -29,7 +29,7 @@
 <td class="gallery_image" valign="top" align="right"></td>
 </tr></table></div>
 <div class="refsect1">
-<a name="id-1.3.36.3"></a><h2>Plugin Information</h2>
+<a name="id-1.3.35.3"></a><h2>Plugin Information</h2>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
@@ -42,7 +42,7 @@
 </tr>
 <tr>
 <td><p><span class="term">version</span></p></td>
-<td>1.6.3</td>
+<td>1.7.2</td>
 </tr>
 <tr>
 <td><p><span class="term">run-time license</span></p></td>
@@ -60,7 +60,7 @@
 </table></div>
 </div>
 <div class="refsect1">
-<a name="id-1.3.36.4"></a><h2>Elements</h2>
+<a name="id-1.3.35.4"></a><h2>Elements</h2>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-plugin-opus.html b/docs/plugins/html/gst-plugins-bad-plugins-plugin-opus.html
deleted file mode 100644
index 73eab3a..0000000
--- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-opus.html
+++ /dev/null
@@ -1,97 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html>
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>opus: GStreamer Bad Plugins 1.0 Plugins Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
-<link rel="home" href="index.html" title="GStreamer Bad Plugins 1.0 Plugins Reference Manual">
-<link rel="up" href="ch02.html" title="gst-plugins-bad Plugins">
-<link rel="prev" href="gst-plugins-bad-plugins-plugin-opencv.html" title="opencv">
-<link rel="next" href="gst-plugins-bad-plugins-plugin-pcapparse.html" title="pcapparse">
-<meta name="generator" content="GTK-Doc V1.24 (XML mode)">
-<link rel="stylesheet" href="style.css" type="text/css">
-</head>
-<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
-<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="5"><tr valign="middle">
-<td width="100%" align="left" class="shortcuts"></td>
-<td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
-<td><a accesskey="u" href="ch02.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
-<td><a accesskey="p" href="gst-plugins-bad-plugins-plugin-opencv.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
-<td><a accesskey="n" href="gst-plugins-bad-plugins-plugin-pcapparse.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
-</tr></table>
-<div class="refentry">
-<a name="gst-plugins-bad-plugins-plugin-opus"></a><div class="titlepage"></div>
-<div class="refnamediv"><table width="100%"><tr>
-<td valign="top">
-<h2><span class="refentrytitle">opus</span></h2>
-<p>opus — <a name="plugin-opus"></a>OPUS plugin library</p>
-</td>
-<td class="gallery_image" valign="top" align="right"></td>
-</tr></table></div>
-<div class="refsect1">
-<a name="id-1.3.37.3"></a><h2>Plugin Information</h2>
-<div class="variablelist"><table border="0" class="variablelist">
-<colgroup>
-<col align="left" valign="top">
-<col>
-</colgroup>
-<tbody>
-<tr>
-<td><p><span class="term">filename</span></p></td>
-<td>libgstopus.so</td>
-</tr>
-<tr>
-<td><p><span class="term">version</span></p></td>
-<td>1.6.3</td>
-</tr>
-<tr>
-<td><p><span class="term">run-time license</span></p></td>
-<td>LGPL</td>
-</tr>
-<tr>
-<td><p><span class="term">package</span></p></td>
-<td>GStreamer Bad Plug-ins source release</td>
-</tr>
-<tr>
-<td><p><span class="term">origin</span></p></td>
-<td>Unknown package origin</td>
-</tr>
-</tbody>
-</table></div>
-</div>
-<div class="refsect1">
-<a name="id-1.3.37.4"></a><h2>Elements</h2>
-<div class="variablelist"><table border="0" class="variablelist">
-<colgroup>
-<col align="left" valign="top">
-<col>
-</colgroup>
-<tbody>
-<tr>
-<td><p><span class="term"><a class="link" href="gst-plugins-bad-plugins-opusdec.html" title="opusdec">opusdec</a></span></p></td>
-<td>decode opus streams to audio</td>
-</tr>
-<tr>
-<td><p><span class="term"><a class="link" href="gst-plugins-bad-plugins-opusenc.html" title="opusenc">opusenc</a></span></p></td>
-<td>Encodes audio in Opus format</td>
-</tr>
-<tr>
-<td><p><span class="term"><a class="link" href="gst-plugins-bad-plugins-opusparse.html" title="opusparse">opusparse</a></span></p></td>
-<td>parses opus audio streams</td>
-</tr>
-<tr>
-<td><p><span class="term"><a class="link" href="gst-plugins-bad-plugins-rtpopusdepay.html" title="rtpopusdepay">rtpopusdepay</a></span></p></td>
-<td>Extracts Opus audio from RTP packets</td>
-</tr>
-<tr>
-<td><p><span class="term"><a class="link" href="gst-plugins-bad-plugins-rtpopuspay.html" title="rtpopuspay">rtpopuspay</a></span></p></td>
-<td>Puts Opus audio in RTP packets</td>
-</tr>
-</tbody>
-</table></div>
-</div>
-</div>
-<div class="footer">
-<hr>Generated by GTK-Doc V1.24</div>
-</body>
-</html>
\ No newline at end of file
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-plugin-pcapparse.html b/docs/plugins/html/gst-plugins-bad-plugins-plugin-pcapparse.html
index bc614e1..dee4eec 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-pcapparse.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-pcapparse.html
@@ -3,10 +3,10 @@
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>pcapparse: GStreamer Bad Plugins 1.0 Plugins Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
 <link rel="home" href="index.html" title="GStreamer Bad Plugins 1.0 Plugins Reference Manual">
 <link rel="up" href="ch02.html" title="gst-plugins-bad Plugins">
-<link rel="prev" href="gst-plugins-bad-plugins-plugin-opus.html" title="opus">
+<link rel="prev" href="gst-plugins-bad-plugins-plugin-opencv.html" title="opencv">
 <link rel="next" href="gst-plugins-bad-plugins-plugin-rawparse.html" title="rawparse">
 <meta name="generator" content="GTK-Doc V1.24 (XML mode)">
 <link rel="stylesheet" href="style.css" type="text/css">
@@ -16,7 +16,7 @@
 <td width="100%" align="left" class="shortcuts"></td>
 <td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
 <td><a accesskey="u" href="ch02.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
-<td><a accesskey="p" href="gst-plugins-bad-plugins-plugin-opus.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
+<td><a accesskey="p" href="gst-plugins-bad-plugins-plugin-opencv.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
 <td><a accesskey="n" href="gst-plugins-bad-plugins-plugin-rawparse.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
 </tr></table>
 <div class="refentry">
@@ -29,7 +29,7 @@
 <td class="gallery_image" valign="top" align="right"></td>
 </tr></table></div>
 <div class="refsect1">
-<a name="id-1.3.38.3"></a><h2>Plugin Information</h2>
+<a name="id-1.3.36.3"></a><h2>Plugin Information</h2>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
@@ -42,7 +42,7 @@
 </tr>
 <tr>
 <td><p><span class="term">version</span></p></td>
-<td>1.6.3</td>
+<td>1.7.91</td>
 </tr>
 <tr>
 <td><p><span class="term">run-time license</span></p></td>
@@ -60,7 +60,7 @@
 </table></div>
 </div>
 <div class="refsect1">
-<a name="id-1.3.38.4"></a><h2>Elements</h2>
+<a name="id-1.3.36.4"></a><h2>Elements</h2>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-plugin-rawparse.html b/docs/plugins/html/gst-plugins-bad-plugins-plugin-rawparse.html
index d4ad411..cfe1bfd 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-rawparse.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-rawparse.html
@@ -3,7 +3,7 @@
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>rawparse: GStreamer Bad Plugins 1.0 Plugins Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
 <link rel="home" href="index.html" title="GStreamer Bad Plugins 1.0 Plugins Reference Manual">
 <link rel="up" href="ch02.html" title="gst-plugins-bad Plugins">
 <link rel="prev" href="gst-plugins-bad-plugins-plugin-pcapparse.html" title="pcapparse">
@@ -29,7 +29,7 @@
 <td class="gallery_image" valign="top" align="right"></td>
 </tr></table></div>
 <div class="refsect1">
-<a name="id-1.3.39.3"></a><h2>Plugin Information</h2>
+<a name="id-1.3.37.3"></a><h2>Plugin Information</h2>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
@@ -42,7 +42,7 @@
 </tr>
 <tr>
 <td><p><span class="term">version</span></p></td>
-<td>1.6.3</td>
+<td>1.7.91</td>
 </tr>
 <tr>
 <td><p><span class="term">run-time license</span></p></td>
@@ -60,7 +60,7 @@
 </table></div>
 </div>
 <div class="refsect1">
-<a name="id-1.3.39.4"></a><h2>Elements</h2>
+<a name="id-1.3.37.4"></a><h2>Elements</h2>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-plugin-rfbsrc.html b/docs/plugins/html/gst-plugins-bad-plugins-plugin-rfbsrc.html
index 6e71c50..3eecbb8 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-rfbsrc.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-rfbsrc.html
@@ -3,7 +3,7 @@
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>rfbsrc: GStreamer Bad Plugins 1.0 Plugins Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
 <link rel="home" href="index.html" title="GStreamer Bad Plugins 1.0 Plugins Reference Manual">
 <link rel="up" href="ch02.html" title="gst-plugins-bad Plugins">
 <link rel="prev" href="gst-plugins-bad-plugins-plugin-rawparse.html" title="rawparse">
@@ -29,7 +29,7 @@
 <td class="gallery_image" valign="top" align="right"></td>
 </tr></table></div>
 <div class="refsect1">
-<a name="id-1.3.40.3"></a><h2>Plugin Information</h2>
+<a name="id-1.3.38.3"></a><h2>Plugin Information</h2>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
@@ -42,7 +42,7 @@
 </tr>
 <tr>
 <td><p><span class="term">version</span></p></td>
-<td>1.6.3</td>
+<td>1.7.91</td>
 </tr>
 <tr>
 <td><p><span class="term">run-time license</span></p></td>
@@ -60,7 +60,7 @@
 </table></div>
 </div>
 <div class="refsect1">
-<a name="id-1.3.40.4"></a><h2>Elements</h2>
+<a name="id-1.3.38.4"></a><h2>Elements</h2>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-plugin-rtmp.html b/docs/plugins/html/gst-plugins-bad-plugins-plugin-rtmp.html
index 3eb8e2f..e44766b 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-rtmp.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-rtmp.html
@@ -3,7 +3,7 @@
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>rtmp: GStreamer Bad Plugins 1.0 Plugins Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
 <link rel="home" href="index.html" title="GStreamer Bad Plugins 1.0 Plugins Reference Manual">
 <link rel="up" href="ch02.html" title="gst-plugins-bad Plugins">
 <link rel="prev" href="gst-plugins-bad-plugins-plugin-rfbsrc.html" title="rfbsrc">
@@ -29,7 +29,7 @@
 <td class="gallery_image" valign="top" align="right"></td>
 </tr></table></div>
 <div class="refsect1">
-<a name="id-1.3.41.3"></a><h2>Plugin Information</h2>
+<a name="id-1.3.39.3"></a><h2>Plugin Information</h2>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
@@ -42,7 +42,7 @@
 </tr>
 <tr>
 <td><p><span class="term">version</span></p></td>
-<td>1.6.3</td>
+<td>1.7.91</td>
 </tr>
 <tr>
 <td><p><span class="term">run-time license</span></p></td>
@@ -60,7 +60,7 @@
 </table></div>
 </div>
 <div class="refsect1">
-<a name="id-1.3.41.4"></a><h2>Elements</h2>
+<a name="id-1.3.39.4"></a><h2>Elements</h2>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-plugin-sdp.html b/docs/plugins/html/gst-plugins-bad-plugins-plugin-sdp.html
index 0036aac..13b4557 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-sdp.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-sdp.html
@@ -3,7 +3,7 @@
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>sdp: GStreamer Bad Plugins 1.0 Plugins Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
 <link rel="home" href="index.html" title="GStreamer Bad Plugins 1.0 Plugins Reference Manual">
 <link rel="up" href="ch02.html" title="gst-plugins-bad Plugins">
 <link rel="prev" href="gst-plugins-bad-plugins-plugin-rtmp.html" title="rtmp">
@@ -29,7 +29,7 @@
 <td class="gallery_image" valign="top" align="right"></td>
 </tr></table></div>
 <div class="refsect1">
-<a name="id-1.3.42.3"></a><h2>Plugin Information</h2>
+<a name="id-1.3.40.3"></a><h2>Plugin Information</h2>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
@@ -42,7 +42,7 @@
 </tr>
 <tr>
 <td><p><span class="term">version</span></p></td>
-<td>1.6.3</td>
+<td>1.7.91</td>
 </tr>
 <tr>
 <td><p><span class="term">run-time license</span></p></td>
@@ -60,7 +60,7 @@
 </table></div>
 </div>
 <div class="refsect1">
-<a name="id-1.3.42.4"></a><h2>Elements</h2>
+<a name="id-1.3.40.4"></a><h2>Elements</h2>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-plugin-shm.html b/docs/plugins/html/gst-plugins-bad-plugins-plugin-shm.html
index 7adf579..eb3ef73 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-shm.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-shm.html
@@ -3,7 +3,7 @@
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>shm: GStreamer Bad Plugins 1.0 Plugins Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
 <link rel="home" href="index.html" title="GStreamer Bad Plugins 1.0 Plugins Reference Manual">
 <link rel="up" href="ch02.html" title="gst-plugins-bad Plugins">
 <link rel="prev" href="gst-plugins-bad-plugins-plugin-sdp.html" title="sdp">
@@ -29,7 +29,7 @@
 <td class="gallery_image" valign="top" align="right"></td>
 </tr></table></div>
 <div class="refsect1">
-<a name="id-1.3.43.3"></a><h2>Plugin Information</h2>
+<a name="id-1.3.41.3"></a><h2>Plugin Information</h2>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
@@ -42,7 +42,7 @@
 </tr>
 <tr>
 <td><p><span class="term">version</span></p></td>
-<td>1.6.3</td>
+<td>1.7.91</td>
 </tr>
 <tr>
 <td><p><span class="term">run-time license</span></p></td>
@@ -60,7 +60,7 @@
 </table></div>
 </div>
 <div class="refsect1">
-<a name="id-1.3.43.4"></a><h2>Elements</h2>
+<a name="id-1.3.41.4"></a><h2>Elements</h2>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-plugin-soundtouch.html b/docs/plugins/html/gst-plugins-bad-plugins-plugin-soundtouch.html
index f97ee4f..49cb362 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-soundtouch.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-soundtouch.html
@@ -3,7 +3,7 @@
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>soundtouch: GStreamer Bad Plugins 1.0 Plugins Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
 <link rel="home" href="index.html" title="GStreamer Bad Plugins 1.0 Plugins Reference Manual">
 <link rel="up" href="ch02.html" title="gst-plugins-bad Plugins">
 <link rel="prev" href="gst-plugins-bad-plugins-plugin-shm.html" title="shm">
@@ -29,7 +29,7 @@
 <td class="gallery_image" valign="top" align="right"></td>
 </tr></table></div>
 <div class="refsect1">
-<a name="id-1.3.44.3"></a><h2>Plugin Information</h2>
+<a name="id-1.3.42.3"></a><h2>Plugin Information</h2>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
@@ -42,7 +42,7 @@
 </tr>
 <tr>
 <td><p><span class="term">version</span></p></td>
-<td>1.6.3</td>
+<td>1.7.91</td>
 </tr>
 <tr>
 <td><p><span class="term">run-time license</span></p></td>
@@ -60,7 +60,7 @@
 </table></div>
 </div>
 <div class="refsect1">
-<a name="id-1.3.44.4"></a><h2>Elements</h2>
+<a name="id-1.3.42.4"></a><h2>Elements</h2>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-plugin-speed.html b/docs/plugins/html/gst-plugins-bad-plugins-plugin-speed.html
index 57082bc..3af5ada 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-speed.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-speed.html
@@ -3,7 +3,7 @@
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>speed: GStreamer Bad Plugins 1.0 Plugins Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
 <link rel="home" href="index.html" title="GStreamer Bad Plugins 1.0 Plugins Reference Manual">
 <link rel="up" href="ch02.html" title="gst-plugins-bad Plugins">
 <link rel="prev" href="gst-plugins-bad-plugins-plugin-soundtouch.html" title="soundtouch">
@@ -29,7 +29,7 @@
 <td class="gallery_image" valign="top" align="right"></td>
 </tr></table></div>
 <div class="refsect1">
-<a name="id-1.3.45.3"></a><h2>Plugin Information</h2>
+<a name="id-1.3.43.3"></a><h2>Plugin Information</h2>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
@@ -42,7 +42,7 @@
 </tr>
 <tr>
 <td><p><span class="term">version</span></p></td>
-<td>1.6.3</td>
+<td>1.7.91</td>
 </tr>
 <tr>
 <td><p><span class="term">run-time license</span></p></td>
@@ -60,7 +60,7 @@
 </table></div>
 </div>
 <div class="refsect1">
-<a name="id-1.3.45.4"></a><h2>Elements</h2>
+<a name="id-1.3.43.4"></a><h2>Elements</h2>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-plugin-voaacenc.html b/docs/plugins/html/gst-plugins-bad-plugins-plugin-voaacenc.html
index 9b6bc68..e9484ea 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-voaacenc.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-voaacenc.html
@@ -3,7 +3,7 @@
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>voaacenc: GStreamer Bad Plugins 1.0 Plugins Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
 <link rel="home" href="index.html" title="GStreamer Bad Plugins 1.0 Plugins Reference Manual">
 <link rel="up" href="ch02.html" title="gst-plugins-bad Plugins">
 <link rel="prev" href="gst-plugins-bad-plugins-plugin-speed.html" title="speed">
@@ -29,7 +29,7 @@
 <td class="gallery_image" valign="top" align="right"></td>
 </tr></table></div>
 <div class="refsect1">
-<a name="id-1.3.46.3"></a><h2>Plugin Information</h2>
+<a name="id-1.3.44.3"></a><h2>Plugin Information</h2>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
@@ -42,7 +42,7 @@
 </tr>
 <tr>
 <td><p><span class="term">version</span></p></td>
-<td>1.6.3</td>
+<td>1.7.91</td>
 </tr>
 <tr>
 <td><p><span class="term">run-time license</span></p></td>
@@ -60,7 +60,7 @@
 </table></div>
 </div>
 <div class="refsect1">
-<a name="id-1.3.46.4"></a><h2>Elements</h2>
+<a name="id-1.3.44.4"></a><h2>Elements</h2>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-plugin-voamrwbenc.html b/docs/plugins/html/gst-plugins-bad-plugins-plugin-voamrwbenc.html
index 23f2671..8c79a8b 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-voamrwbenc.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-voamrwbenc.html
@@ -3,7 +3,7 @@
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>voamrwbenc: GStreamer Bad Plugins 1.0 Plugins Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
 <link rel="home" href="index.html" title="GStreamer Bad Plugins 1.0 Plugins Reference Manual">
 <link rel="up" href="ch02.html" title="gst-plugins-bad Plugins">
 <link rel="prev" href="gst-plugins-bad-plugins-plugin-voaacenc.html" title="voaacenc">
@@ -29,7 +29,7 @@
 <td class="gallery_image" valign="top" align="right"></td>
 </tr></table></div>
 <div class="refsect1">
-<a name="id-1.3.47.3"></a><h2>Plugin Information</h2>
+<a name="id-1.3.45.3"></a><h2>Plugin Information</h2>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
@@ -42,7 +42,7 @@
 </tr>
 <tr>
 <td><p><span class="term">version</span></p></td>
-<td>1.6.3</td>
+<td>1.7.91</td>
 </tr>
 <tr>
 <td><p><span class="term">run-time license</span></p></td>
@@ -60,7 +60,7 @@
 </table></div>
 </div>
 <div class="refsect1">
-<a name="id-1.3.47.4"></a><h2>Elements</h2>
+<a name="id-1.3.45.4"></a><h2>Elements</h2>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-plugin-zbar.html b/docs/plugins/html/gst-plugins-bad-plugins-plugin-zbar.html
index 8cd93fd..ec20a00 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-zbar.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-zbar.html
@@ -3,7 +3,7 @@
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>zbar: GStreamer Bad Plugins 1.0 Plugins Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
 <link rel="home" href="index.html" title="GStreamer Bad Plugins 1.0 Plugins Reference Manual">
 <link rel="up" href="ch02.html" title="gst-plugins-bad Plugins">
 <link rel="prev" href="gst-plugins-bad-plugins-plugin-voamrwbenc.html" title="voamrwbenc">
@@ -28,7 +28,7 @@
 <td class="gallery_image" valign="top" align="right"></td>
 </tr></table></div>
 <div class="refsect1">
-<a name="id-1.3.48.3"></a><h2>Plugin Information</h2>
+<a name="id-1.3.46.3"></a><h2>Plugin Information</h2>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
@@ -41,7 +41,7 @@
 </tr>
 <tr>
 <td><p><span class="term">version</span></p></td>
-<td>1.6.3</td>
+<td>1.7.91</td>
 </tr>
 <tr>
 <td><p><span class="term">run-time license</span></p></td>
@@ -59,7 +59,7 @@
 </table></div>
 </div>
 <div class="refsect1">
-<a name="id-1.3.48.4"></a><h2>Elements</h2>
+<a name="id-1.3.46.4"></a><h2>Elements</h2>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-pyramidsegment.html b/docs/plugins/html/gst-plugins-bad-plugins-pyramidsegment.html
index 9936792..4176f2e 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-pyramidsegment.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-pyramidsegment.html
@@ -3,7 +3,7 @@
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>pyramidsegment: GStreamer Bad Plugins 1.0 Plugins Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
 <link rel="home" href="index.html" title="GStreamer Bad Plugins 1.0 Plugins Reference Manual">
 <link rel="up" href="ch01.html" title="gst-plugins-bad Elements">
 <link rel="prev" href="gst-plugins-bad-plugins-pinch.html" title="pinch">
@@ -36,7 +36,7 @@
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="id-1.2.64.4.2.1"></a><h3>Element Information</h3>
+<a name="id-1.2.59.4.2.1"></a><h3>Element Information</h3>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
@@ -62,7 +62,7 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="id-1.2.64.4.2.2"></a><h3>Element Pads</h3>
+<a name="id-1.2.59.4.2.2"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-rfbsrc.html b/docs/plugins/html/gst-plugins-bad-plugins-rfbsrc.html
index 1f72c34..131c7e7 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-rfbsrc.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-rfbsrc.html
@@ -3,7 +3,7 @@
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>rfbsrc: GStreamer Bad Plugins 1.0 Plugins Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
 <link rel="home" href="index.html" title="GStreamer Bad Plugins 1.0 Plugins Reference Manual">
 <link rel="up" href="ch01.html" title="gst-plugins-bad Elements">
 <link rel="prev" href="gst-plugins-bad-plugins-pyramidsegment.html" title="pyramidsegment">
@@ -35,7 +35,7 @@
 </tr></table></div>
 <div class="refsect1">
 <a name="gst-plugins-bad-plugins-rfbsrc.properties"></a><h2>Properties</h2>
-<div class="informaltable"><table border="0">
+<div class="informaltable"><table class="informaltable" border="0">
 <colgroup>
 <col width="150px" class="properties_type">
 <col width="300px" class="properties_name">
@@ -110,7 +110,7 @@
 </div>
 <a name="GstRfbSrc"></a><div class="refsect1">
 <a name="gst-plugins-bad-plugins-rfbsrc.other"></a><h2>Types and Values</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="name">
 <col class="description">
@@ -137,7 +137,7 @@
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="id-1.2.65.7.2.1"></a><h3>Element Information</h3>
+<a name="id-1.2.60.7.2.1"></a><h3>Element Information</h3>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
@@ -163,7 +163,7 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="id-1.2.65.7.2.2"></a><h3>Element Pads</h3>
+<a name="id-1.2.60.7.2.2"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-rtmpsink.html b/docs/plugins/html/gst-plugins-bad-plugins-rtmpsink.html
index 75d17f3..c92c6ce 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-rtmpsink.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-rtmpsink.html
@@ -3,7 +3,7 @@
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>rtmpsink: GStreamer Bad Plugins 1.0 Plugins Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
 <link rel="home" href="index.html" title="GStreamer Bad Plugins 1.0 Plugins Reference Manual">
 <link rel="up" href="ch01.html" title="gst-plugins-bad Elements">
 <link rel="prev" href="gst-plugins-bad-plugins-rfbsrc.html" title="rfbsrc">
@@ -36,7 +36,7 @@
 </tr></table></div>
 <div class="refsect1">
 <a name="gst-plugins-bad-plugins-rtmpsink.properties"></a><h2>Properties</h2>
-<div class="informaltable"><table border="0">
+<div class="informaltable"><table class="informaltable" border="0">
 <colgroup>
 <col width="150px" class="properties_type">
 <col width="300px" class="properties_name">
@@ -52,7 +52,7 @@
 </div>
 <a name="GstRTMPSink"></a><div class="refsect1">
 <a name="gst-plugins-bad-plugins-rtmpsink.other"></a><h2>Types and Values</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="name">
 <col class="description">
@@ -84,7 +84,7 @@
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="id-1.2.66.8.2.1"></a><h3>Element Information</h3>
+<a name="id-1.2.61.8.2.1"></a><h3>Element Information</h3>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
@@ -110,7 +110,7 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="id-1.2.66.8.2.2"></a><h3>Element Pads</h3>
+<a name="id-1.2.61.8.2.2"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-rtmpsrc.html b/docs/plugins/html/gst-plugins-bad-plugins-rtmpsrc.html
index 4a3e760..132d11b 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-rtmpsrc.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-rtmpsrc.html
@@ -3,7 +3,7 @@
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>rtmpsrc: GStreamer Bad Plugins 1.0 Plugins Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
 <link rel="home" href="index.html" title="GStreamer Bad Plugins 1.0 Plugins Reference Manual">
 <link rel="up" href="ch01.html" title="gst-plugins-bad Elements">
 <link rel="prev" href="gst-plugins-bad-plugins-rtmpsink.html" title="rtmpsink">
@@ -36,7 +36,7 @@
 </tr></table></div>
 <div class="refsect1">
 <a name="gst-plugins-bad-plugins-rtmpsrc.properties"></a><h2>Properties</h2>
-<div class="informaltable"><table border="0">
+<div class="informaltable"><table class="informaltable" border="0">
 <colgroup>
 <col width="150px" class="properties_type">
 <col width="300px" class="properties_name">
@@ -52,7 +52,7 @@
 </div>
 <a name="GstRTMPSrc"></a><div class="refsect1">
 <a name="gst-plugins-bad-plugins-rtmpsrc.other"></a><h2>Types and Values</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="name">
 <col class="description">
@@ -85,7 +85,7 @@
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="id-1.2.67.8.2.1"></a><h3>Element Information</h3>
+<a name="id-1.2.62.8.2.1"></a><h3>Element Information</h3>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
@@ -111,7 +111,7 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="id-1.2.67.8.2.2"></a><h3>Element Pads</h3>
+<a name="id-1.2.62.8.2.2"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-rtpopusdepay.html b/docs/plugins/html/gst-plugins-bad-plugins-rtpopusdepay.html
deleted file mode 100644
index 6e76a1e..0000000
--- a/docs/plugins/html/gst-plugins-bad-plugins-rtpopusdepay.html
+++ /dev/null
@@ -1,156 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html>
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>rtpopusdepay: GStreamer Bad Plugins 1.0 Plugins Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
-<link rel="home" href="index.html" title="GStreamer Bad Plugins 1.0 Plugins Reference Manual">
-<link rel="up" href="ch01.html" title="gst-plugins-bad Elements">
-<link rel="prev" href="gst-plugins-bad-plugins-rtpopuspay.html" title="rtpopuspay">
-<link rel="next" href="gst-plugins-bad-plugins-pcapparse.html" title="pcapparse">
-<meta name="generator" content="GTK-Doc V1.24 (XML mode)">
-<link rel="stylesheet" href="style.css" type="text/css">
-</head>
-<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
-<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="5"><tr valign="middle">
-<td width="100%" align="left" class="shortcuts">
-<a href="#" class="shortcut">Top</a><span id="nav_description">  <span class="dim">|</span> 
-                  <a href="#gst-plugins-bad-plugins-rtpopusdepay.description" class="shortcut">Description</a></span><span id="nav_hierarchy">  <span class="dim">|</span> 
-                  <a href="#gst-plugins-bad-plugins-rtpopusdepay.object-hierarchy" class="shortcut">Object Hierarchy</a></span>
-</td>
-<td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
-<td><a accesskey="u" href="ch01.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
-<td><a accesskey="p" href="gst-plugins-bad-plugins-rtpopuspay.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
-<td><a accesskey="n" href="gst-plugins-bad-plugins-pcapparse.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
-</tr></table>
-<div class="refentry">
-<a name="gst-plugins-bad-plugins-rtpopusdepay"></a><div class="titlepage"></div>
-<div class="refnamediv"><table width="100%"><tr>
-<td valign="top">
-<h2><span class="refentrytitle"><a name="gst-plugins-bad-plugins-rtpopusdepay.top_of_page"></a>rtpopusdepay</span></h2>
-<p>rtpopusdepay</p>
-</td>
-<td class="gallery_image" valign="top" align="right"></td>
-</tr></table></div>
-<a name="GstOpenalSrc"></a><a name="GstOpencvTextOverlay"></a><a name="GstOpusDec"></a><a name="GstOpusEnc"></a><a name="GstOpusParse"></a><a name="GstRTPOpusDepay"></a><div class="refsect1">
-<a name="gst-plugins-bad-plugins-rtpopusdepay.other"></a><h2>Types and Values</h2>
-<div class="informaltable"><table width="100%" border="0">
-<colgroup>
-<col width="150px" class="name">
-<col class="description">
-</colgroup>
-<tbody><tr>
-<td class="datatype_keyword">struct</td>
-<td class="function_name"><a class="link" href="gst-plugins-bad-plugins-rtpopusdepay.html#GstRTPOpusDepay-struct" title="struct GstRTPOpusDepay">GstRTPOpusDepay</a></td>
-</tr></tbody>
-</table></div>
-</div>
-<div class="refsect1">
-<a name="gst-plugins-bad-plugins-rtpopusdepay.object-hierarchy"></a><h2>Object Hierarchy</h2>
-<pre class="screen">    <a href="https://developer.gnome.org/gobject/unstable/gobject-The-Base-Object-Type.html#GObject">GObject</a>
-    <span class="lineart">╰──</span> <a href="https://developer.gnome.org/gobject/unstable/gobject-The-Base-Object-Type.html#GInitiallyUnowned">GInitiallyUnowned</a>
-        <span class="lineart">╰──</span> <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstObject.html">GstObject</a>
-            <span class="lineart">╰──</span> <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html">GstElement</a>
-                <span class="lineart">╰──</span> <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base-libs/html/gst-plugins-base-libs-gstrtpbasedepayload.html#GstRTPBaseDepayload">GstRTPBaseDepayload</a>
-                    <span class="lineart">╰──</span> GstRTPOpusDepay
-</pre>
-</div>
-<div class="refsect1">
-<a name="gst-plugins-bad-plugins-rtpopusdepay.description"></a><h2>Description</h2>
-<div class="refsynopsisdiv">
-<h2>Synopsis</h2>
-<div class="refsect2">
-<a name="id-1.2.61.11.2.1"></a><h3>Element Information</h3>
-<div class="variablelist"><table border="0" class="variablelist">
-<colgroup>
-<col align="left" valign="top">
-<col>
-</colgroup>
-<tbody>
-<tr>
-<td><p><span class="term">plugin</span></p></td>
-<td>
-            <a class="link" href="gst-plugins-bad-plugins-plugin-opus.html#plugin-opus">opus</a>
-          </td>
-</tr>
-<tr>
-<td><p><span class="term">author</span></p></td>
-<td>Danilo Cesar Lemes de Paula &lt;danilo.cesar@collabora.co.uk&gt;</td>
-</tr>
-<tr>
-<td><p><span class="term">class</span></p></td>
-<td>Codec/Depayloader/Network/RTP</td>
-</tr>
-</tbody>
-</table></div>
-</div>
-<hr>
-<div class="refsect2">
-<a name="id-1.2.61.11.2.2"></a><h3>Element Pads</h3>
-<div class="variablelist"><table border="0" class="variablelist">
-<colgroup>
-<col align="left" valign="top">
-<col>
-</colgroup>
-<tbody>
-<tr>
-<td><p><span class="term">name</span></p></td>
-<td>sink</td>
-</tr>
-<tr>
-<td><p><span class="term">direction</span></p></td>
-<td>sink</td>
-</tr>
-<tr>
-<td><p><span class="term">presence</span></p></td>
-<td>always</td>
-</tr>
-<tr>
-<td><p><span class="term">details</span></p></td>
-<td>application/x-rtp, media=(string)audio, payload=(int)[ 96, 127 ], clock-rate=(int)48000, encoding-name=(string){ OPUS, X-GST-OPUS-DRAFT-SPITTKA-00 }</td>
-</tr>
-</tbody>
-</table></div>
-<div class="variablelist"><table border="0" class="variablelist">
-<colgroup>
-<col align="left" valign="top">
-<col>
-</colgroup>
-<tbody>
-<tr>
-<td><p><span class="term">name</span></p></td>
-<td>src</td>
-</tr>
-<tr>
-<td><p><span class="term">direction</span></p></td>
-<td>source</td>
-</tr>
-<tr>
-<td><p><span class="term">presence</span></p></td>
-<td>always</td>
-</tr>
-<tr>
-<td><p><span class="term">details</span></p></td>
-<td>audio/x-opus, multistream=(boolean)false</td>
-</tr>
-</tbody>
-</table></div>
-</div>
-</div>
-</div>
-<div class="refsect1">
-<a name="gst-plugins-bad-plugins-rtpopusdepay.functions_details"></a><h2>Functions</h2>
-<p></p>
-</div>
-<div class="refsect1">
-<a name="gst-plugins-bad-plugins-rtpopusdepay.other_details"></a><h2>Types and Values</h2>
-<div class="refsect2">
-<a name="GstRTPOpusDepay-struct"></a><h3>struct GstRTPOpusDepay</h3>
-<pre class="programlisting">struct GstRTPOpusDepay;</pre>
-</div>
-</div>
-</div>
-<div class="footer">
-<hr>Generated by GTK-Doc V1.24</div>
-</body>
-</html>
\ No newline at end of file
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-rtpopuspay.html b/docs/plugins/html/gst-plugins-bad-plugins-rtpopuspay.html
deleted file mode 100644
index a866a3e..0000000
--- a/docs/plugins/html/gst-plugins-bad-plugins-rtpopuspay.html
+++ /dev/null
@@ -1,156 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html>
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>rtpopuspay: GStreamer Bad Plugins 1.0 Plugins Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
-<link rel="home" href="index.html" title="GStreamer Bad Plugins 1.0 Plugins Reference Manual">
-<link rel="up" href="ch01.html" title="gst-plugins-bad Elements">
-<link rel="prev" href="gst-plugins-bad-plugins-opusparse.html" title="opusparse">
-<link rel="next" href="gst-plugins-bad-plugins-rtpopusdepay.html" title="rtpopusdepay">
-<meta name="generator" content="GTK-Doc V1.24 (XML mode)">
-<link rel="stylesheet" href="style.css" type="text/css">
-</head>
-<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
-<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="5"><tr valign="middle">
-<td width="100%" align="left" class="shortcuts">
-<a href="#" class="shortcut">Top</a><span id="nav_description">  <span class="dim">|</span> 
-                  <a href="#gst-plugins-bad-plugins-rtpopuspay.description" class="shortcut">Description</a></span><span id="nav_hierarchy">  <span class="dim">|</span> 
-                  <a href="#gst-plugins-bad-plugins-rtpopuspay.object-hierarchy" class="shortcut">Object Hierarchy</a></span>
-</td>
-<td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
-<td><a accesskey="u" href="ch01.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
-<td><a accesskey="p" href="gst-plugins-bad-plugins-opusparse.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
-<td><a accesskey="n" href="gst-plugins-bad-plugins-rtpopusdepay.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
-</tr></table>
-<div class="refentry">
-<a name="gst-plugins-bad-plugins-rtpopuspay"></a><div class="titlepage"></div>
-<div class="refnamediv"><table width="100%"><tr>
-<td valign="top">
-<h2><span class="refentrytitle"><a name="gst-plugins-bad-plugins-rtpopuspay.top_of_page"></a>rtpopuspay</span></h2>
-<p>rtpopuspay</p>
-</td>
-<td class="gallery_image" valign="top" align="right"></td>
-</tr></table></div>
-<a name="GstOpenalSrc"></a><a name="GstOpencvTextOverlay"></a><a name="GstOpusDec"></a><a name="GstOpusEnc"></a><a name="GstOpusParse"></a><a name="GstRTPOpusDepay"></a><a name="GstRtpOPUSPay"></a><div class="refsect1">
-<a name="gst-plugins-bad-plugins-rtpopuspay.other"></a><h2>Types and Values</h2>
-<div class="informaltable"><table width="100%" border="0">
-<colgroup>
-<col width="150px" class="name">
-<col class="description">
-</colgroup>
-<tbody><tr>
-<td class="datatype_keyword">struct</td>
-<td class="function_name"><a class="link" href="gst-plugins-bad-plugins-rtpopuspay.html#GstRtpOPUSPay-struct" title="struct GstRtpOPUSPay">GstRtpOPUSPay</a></td>
-</tr></tbody>
-</table></div>
-</div>
-<div class="refsect1">
-<a name="gst-plugins-bad-plugins-rtpopuspay.object-hierarchy"></a><h2>Object Hierarchy</h2>
-<pre class="screen">    <a href="https://developer.gnome.org/gobject/unstable/gobject-The-Base-Object-Type.html#GObject">GObject</a>
-    <span class="lineart">╰──</span> <a href="https://developer.gnome.org/gobject/unstable/gobject-The-Base-Object-Type.html#GInitiallyUnowned">GInitiallyUnowned</a>
-        <span class="lineart">╰──</span> <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstObject.html">GstObject</a>
-            <span class="lineart">╰──</span> <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html">GstElement</a>
-                <span class="lineart">╰──</span> <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base-libs/html/gst-plugins-base-libs-gstrtpbasepayload.html#GstRTPBasePayload">GstRTPBasePayload</a>
-                    <span class="lineart">╰──</span> GstRtpOPUSPay
-</pre>
-</div>
-<div class="refsect1">
-<a name="gst-plugins-bad-plugins-rtpopuspay.description"></a><h2>Description</h2>
-<div class="refsynopsisdiv">
-<h2>Synopsis</h2>
-<div class="refsect2">
-<a name="id-1.2.60.12.2.1"></a><h3>Element Information</h3>
-<div class="variablelist"><table border="0" class="variablelist">
-<colgroup>
-<col align="left" valign="top">
-<col>
-</colgroup>
-<tbody>
-<tr>
-<td><p><span class="term">plugin</span></p></td>
-<td>
-            <a class="link" href="gst-plugins-bad-plugins-plugin-opus.html#plugin-opus">opus</a>
-          </td>
-</tr>
-<tr>
-<td><p><span class="term">author</span></p></td>
-<td>Danilo Cesar Lemes de Paula &lt;danilo.cesar@collabora.co.uk&gt;</td>
-</tr>
-<tr>
-<td><p><span class="term">class</span></p></td>
-<td>Codec/Payloader/Network/RTP</td>
-</tr>
-</tbody>
-</table></div>
-</div>
-<hr>
-<div class="refsect2">
-<a name="id-1.2.60.12.2.2"></a><h3>Element Pads</h3>
-<div class="variablelist"><table border="0" class="variablelist">
-<colgroup>
-<col align="left" valign="top">
-<col>
-</colgroup>
-<tbody>
-<tr>
-<td><p><span class="term">name</span></p></td>
-<td>sink</td>
-</tr>
-<tr>
-<td><p><span class="term">direction</span></p></td>
-<td>sink</td>
-</tr>
-<tr>
-<td><p><span class="term">presence</span></p></td>
-<td>always</td>
-</tr>
-<tr>
-<td><p><span class="term">details</span></p></td>
-<td>audio/x-opus, multistream=(boolean)false</td>
-</tr>
-</tbody>
-</table></div>
-<div class="variablelist"><table border="0" class="variablelist">
-<colgroup>
-<col align="left" valign="top">
-<col>
-</colgroup>
-<tbody>
-<tr>
-<td><p><span class="term">name</span></p></td>
-<td>src</td>
-</tr>
-<tr>
-<td><p><span class="term">direction</span></p></td>
-<td>source</td>
-</tr>
-<tr>
-<td><p><span class="term">presence</span></p></td>
-<td>always</td>
-</tr>
-<tr>
-<td><p><span class="term">details</span></p></td>
-<td>application/x-rtp, media=(string)audio, payload=(int)[ 96, 127 ], clock-rate=(int)48000, encoding-params=(string)2, encoding-name=(string){ OPUS, X-GST-OPUS-DRAFT-SPITTKA-00 }</td>
-</tr>
-</tbody>
-</table></div>
-</div>
-</div>
-</div>
-<div class="refsect1">
-<a name="gst-plugins-bad-plugins-rtpopuspay.functions_details"></a><h2>Functions</h2>
-<p></p>
-</div>
-<div class="refsect1">
-<a name="gst-plugins-bad-plugins-rtpopuspay.other_details"></a><h2>Types and Values</h2>
-<div class="refsect2">
-<a name="GstRtpOPUSPay-struct"></a><h3>struct GstRtpOPUSPay</h3>
-<pre class="programlisting">struct GstRtpOPUSPay;</pre>
-</div>
-</div>
-</div>
-<div class="footer">
-<hr>Generated by GTK-Doc V1.24</div>
-</body>
-</html>
\ No newline at end of file
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-sdpdemux.html b/docs/plugins/html/gst-plugins-bad-plugins-sdpdemux.html
index f631006..8ff4560 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-sdpdemux.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-sdpdemux.html
@@ -3,7 +3,7 @@
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>sdpdemux: GStreamer Bad Plugins 1.0 Plugins Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
 <link rel="home" href="index.html" title="GStreamer Bad Plugins 1.0 Plugins Reference Manual">
 <link rel="up" href="ch01.html" title="gst-plugins-bad Elements">
 <link rel="prev" href="gst-plugins-bad-plugins-shmsrc.html" title="shmsrc">
@@ -36,7 +36,7 @@
 </tr></table></div>
 <div class="refsect1">
 <a name="gst-plugins-bad-plugins-sdpdemux.properties"></a><h2>Properties</h2>
-<div class="informaltable"><table border="0">
+<div class="informaltable"><table class="informaltable" border="0">
 <colgroup>
 <col width="150px" class="properties_type">
 <col width="300px" class="properties_name">
@@ -68,7 +68,7 @@
 </div>
 <a name="GstSDPDemux"></a><div class="refsect1">
 <a name="gst-plugins-bad-plugins-sdpdemux.other"></a><h2>Types and Values</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="name">
 <col class="description">
@@ -108,13 +108,13 @@
 <p>sdpdemux acts like a live element and will therefore only generate data in the 
 PLAYING state.</p>
 <div class="refsect2">
-<a name="id-1.2.70.8.5"></a><h3>Example launch line</h3>
+<a name="id-1.2.65.8.5"></a><h3>Example launch line</h3>
 <div class="informalexample">
   <table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
     <tbody>
       <tr>
         <td class="listing_lines" align="right"><pre>1</pre></td>
-        <td class="listing_code"><pre class="programlisting">gst<span class="gtkdoc opt">-</span>launch gnomevfssrc location<span class="gtkdoc opt">=</span>http<span class="gtkdoc opt">:</span><span class="gtkdoc slc">//some.server/session.sdp ! sdpdemux ! fakesink</span></pre></td>
+        <td class="listing_code"><pre class="programlisting">gst<span class="gtkdoc opt">-</span>launch<span class="gtkdoc opt">-</span><span class="number">1.0</span> souphttpsrc location<span class="gtkdoc opt">=</span>http<span class="gtkdoc opt">:</span><span class="gtkdoc slc">//some.server/session.sdp ! sdpdemux ! fakesink</span></pre></td>
       </tr>
     </tbody>
   </table>
@@ -125,7 +125,7 @@
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="id-1.2.70.8.6.1"></a><h3>Element Information</h3>
+<a name="id-1.2.65.8.6.1"></a><h3>Element Information</h3>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
@@ -151,7 +151,7 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="id-1.2.70.8.6.2"></a><h3>Element Pads</h3>
+<a name="id-1.2.65.8.6.2"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-shmsink.html b/docs/plugins/html/gst-plugins-bad-plugins-shmsink.html
index f55f712..9fb7072 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-shmsink.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-shmsink.html
@@ -3,7 +3,7 @@
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>shmsink: GStreamer Bad Plugins 1.0 Plugins Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
 <link rel="home" href="index.html" title="GStreamer Bad Plugins 1.0 Plugins Reference Manual">
 <link rel="up" href="ch01.html" title="gst-plugins-bad Elements">
 <link rel="prev" href="gst-plugins-bad-plugins-rtmpsrc.html" title="rtmpsrc">
@@ -36,7 +36,7 @@
 </tr></table></div>
 <div class="refsect1">
 <a name="gst-plugins-bad-plugins-shmsink.properties"></a><h2>Properties</h2>
-<div class="informaltable"><table border="0">
+<div class="informaltable"><table class="informaltable" border="0">
 <colgroup>
 <col width="150px" class="properties_type">
 <col width="300px" class="properties_name">
@@ -74,7 +74,7 @@
 </div>
 <div class="refsect1">
 <a name="gst-plugins-bad-plugins-shmsink.signals"></a><h2>Signals</h2>
-<div class="informaltable"><table border="0">
+<div class="informaltable"><table class="informaltable" border="0">
 <colgroup>
 <col width="150px" class="signals_return">
 <col width="300px" class="signals_name">
@@ -96,7 +96,7 @@
 </div>
 <a name="GstShmSink"></a><div class="refsect1">
 <a name="gst-plugins-bad-plugins-shmsink.other"></a><h2>Types and Values</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="name">
 <col class="description">
@@ -122,7 +122,7 @@
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="id-1.2.68.8.2.1"></a><h3>Element Information</h3>
+<a name="id-1.2.63.8.2.1"></a><h3>Element Information</h3>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
@@ -148,7 +148,7 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="id-1.2.68.8.2.2"></a><h3>Element Pads</h3>
+<a name="id-1.2.63.8.2.2"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-shmsrc.html b/docs/plugins/html/gst-plugins-bad-plugins-shmsrc.html
index 72e88ef..e2fb2d1 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-shmsrc.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-shmsrc.html
@@ -3,7 +3,7 @@
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>shmsrc: GStreamer Bad Plugins 1.0 Plugins Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
 <link rel="home" href="index.html" title="GStreamer Bad Plugins 1.0 Plugins Reference Manual">
 <link rel="up" href="ch01.html" title="gst-plugins-bad Elements">
 <link rel="prev" href="gst-plugins-bad-plugins-shmsink.html" title="shmsink">
@@ -35,7 +35,7 @@
 </tr></table></div>
 <div class="refsect1">
 <a name="gst-plugins-bad-plugins-shmsrc.properties"></a><h2>Properties</h2>
-<div class="informaltable"><table border="0">
+<div class="informaltable"><table class="informaltable" border="0">
 <colgroup>
 <col width="150px" class="properties_type">
 <col width="300px" class="properties_name">
@@ -64,7 +64,7 @@
 </div>
 <a name="GstShmSrc"></a><div class="refsect1">
 <a name="gst-plugins-bad-plugins-shmsrc.other"></a><h2>Types and Values</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="name">
 <col class="description">
@@ -91,7 +91,7 @@
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="id-1.2.69.7.2.1"></a><h3>Element Information</h3>
+<a name="id-1.2.64.7.2.1"></a><h3>Element Information</h3>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
@@ -117,7 +117,7 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="id-1.2.69.7.2.2"></a><h3>Element Pads</h3>
+<a name="id-1.2.64.7.2.2"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-solarize.html b/docs/plugins/html/gst-plugins-bad-plugins-solarize.html
index 36b57b6..6780096 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-solarize.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-solarize.html
@@ -3,7 +3,7 @@
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>solarize: GStreamer Bad Plugins 1.0 Plugins Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
 <link rel="home" href="index.html" title="GStreamer Bad Plugins 1.0 Plugins Reference Manual">
 <link rel="up" href="ch01.html" title="gst-plugins-bad Elements">
 <link rel="prev" href="gst-plugins-bad-plugins-sdpdemux.html" title="sdpdemux">
@@ -35,7 +35,7 @@
 </tr></table></div>
 <div class="refsect1">
 <a name="gst-plugins-bad-plugins-solarize.properties"></a><h2>Properties</h2>
-<div class="informaltable"><table border="0">
+<div class="informaltable"><table class="informaltable" border="0">
 <colgroup>
 <col width="150px" class="properties_type">
 <col width="300px" class="properties_name">
@@ -67,7 +67,7 @@
 </div>
 <a name="GstSolarize"></a><div class="refsect1">
 <a name="gst-plugins-bad-plugins-solarize.other"></a><h2>Types and Values</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="name">
 <col class="description">
@@ -93,13 +93,13 @@
 <a name="gst-plugins-bad-plugins-solarize.description"></a><h2>Description</h2>
 <p>Solarize does a smart inverse in a video stream in realtime.</p>
 <div class="refsect2">
-<a name="id-1.2.71.7.3"></a><h3>Example launch line</h3>
+<a name="id-1.2.66.7.3"></a><h3>Example launch line</h3>
 <div class="informalexample">
   <table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
     <tbody>
       <tr>
         <td class="listing_lines" align="right"><pre>1</pre></td>
-        <td class="listing_code"><pre class="programlisting">gst<span class="gtkdoc opt">-</span>launch <span class="gtkdoc opt">-</span>v videotestsrc <span class="gtkdoc opt">!</span> solarize <span class="gtkdoc opt">!</span> videoconvert <span class="gtkdoc opt">!</span> autovideosink</pre></td>
+        <td class="listing_code"><pre class="programlisting">gst<span class="gtkdoc opt">-</span>launch<span class="gtkdoc opt">-</span><span class="number">1.0</span> <span class="gtkdoc opt">-</span>v videotestsrc <span class="gtkdoc opt">!</span> solarize <span class="gtkdoc opt">!</span> videoconvert <span class="gtkdoc opt">!</span> autovideosink</pre></td>
       </tr>
     </tbody>
   </table>
@@ -109,7 +109,7 @@
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="id-1.2.71.7.4.1"></a><h3>Element Information</h3>
+<a name="id-1.2.66.7.4.1"></a><h3>Element Information</h3>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
@@ -135,7 +135,7 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="id-1.2.71.7.4.2"></a><h3>Element Pads</h3>
+<a name="id-1.2.66.7.4.2"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-spacescope.html b/docs/plugins/html/gst-plugins-bad-plugins-spacescope.html
index 0e5d7ec..e4d6b38 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-spacescope.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-spacescope.html
@@ -3,7 +3,7 @@
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>spacescope: GStreamer Bad Plugins 1.0 Plugins Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
 <link rel="home" href="index.html" title="GStreamer Bad Plugins 1.0 Plugins Reference Manual">
 <link rel="up" href="ch01.html" title="gst-plugins-bad Elements">
 <link rel="prev" href="gst-plugins-bad-plugins-solarize.html" title="solarize">
@@ -35,7 +35,7 @@
 </tr></table></div>
 <div class="refsect1">
 <a name="gst-plugins-bad-plugins-spacescope.properties"></a><h2>Properties</h2>
-<div class="informaltable"><table border="0">
+<div class="informaltable"><table class="informaltable" border="0">
 <colgroup>
 <col width="150px" class="properties_type">
 <col width="300px" class="properties_name">
@@ -50,7 +50,7 @@
 </div>
 <a name="GstSpaceScope"></a><div class="refsect1">
 <a name="gst-plugins-bad-plugins-spacescope.other"></a><h2>Types and Values</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="name">
 <col class="description">
@@ -67,7 +67,7 @@
     <span class="lineart">╰──</span> <a href="https://developer.gnome.org/gobject/unstable/gobject-The-Base-Object-Type.html#GInitiallyUnowned">GInitiallyUnowned</a>
         <span class="lineart">╰──</span> <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstObject.html">GstObject</a>
             <span class="lineart">╰──</span> <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html">GstElement</a>
-                <span class="lineart">╰──</span> GstAudioVisualizer-BadGstAudioVisualizers
+                <span class="lineart">╰──</span> GstAudioVisualizer
                     <span class="lineart">╰──</span> GstSpaceScope
 </pre>
 </div>
@@ -76,13 +76,13 @@
 <p>Spacescope is a simple audio visualisation element. It maps the left and
 right channel to x and y coordinates.</p>
 <div class="refsect2">
-<a name="id-1.2.72.7.3"></a><h3>Example launch line</h3>
+<a name="id-1.2.67.7.3"></a><h3>Example launch line</h3>
 <div class="informalexample">
   <table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
     <tbody>
       <tr>
         <td class="listing_lines" align="right"><pre>1</pre></td>
-        <td class="listing_code"><pre class="programlisting">gst<span class="gtkdoc opt">-</span>launch audiotestsrc <span class="gtkdoc opt">!</span> audioconvert <span class="gtkdoc opt">!</span> spacescope <span class="gtkdoc opt">!</span> ximagesink</pre></td>
+        <td class="listing_code"><pre class="programlisting">gst<span class="gtkdoc opt">-</span>launch<span class="gtkdoc opt">-</span><span class="number">1.0</span> audiotestsrc <span class="gtkdoc opt">!</span> audioconvert <span class="gtkdoc opt">!</span> spacescope <span class="gtkdoc opt">!</span> ximagesink</pre></td>
       </tr>
     </tbody>
   </table>
@@ -92,7 +92,7 @@
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="id-1.2.72.7.4.1"></a><h3>Element Information</h3>
+<a name="id-1.2.67.7.4.1"></a><h3>Element Information</h3>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
@@ -118,7 +118,7 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="id-1.2.72.7.4.2"></a><h3>Element Pads</h3>
+<a name="id-1.2.67.7.4.2"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-spectrascope.html b/docs/plugins/html/gst-plugins-bad-plugins-spectrascope.html
index 68c1684..b13ab10 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-spectrascope.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-spectrascope.html
@@ -3,7 +3,7 @@
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>spectrascope: GStreamer Bad Plugins 1.0 Plugins Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
 <link rel="home" href="index.html" title="GStreamer Bad Plugins 1.0 Plugins Reference Manual">
 <link rel="up" href="ch01.html" title="gst-plugins-bad Elements">
 <link rel="prev" href="gst-plugins-bad-plugins-spacescope.html" title="spacescope">
@@ -34,7 +34,7 @@
 </tr></table></div>
 <a name="GstSpectraScope"></a><div class="refsect1">
 <a name="gst-plugins-bad-plugins-spectrascope.other"></a><h2>Types and Values</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="name">
 <col class="description">
@@ -51,7 +51,7 @@
     <span class="lineart">╰──</span> <a href="https://developer.gnome.org/gobject/unstable/gobject-The-Base-Object-Type.html#GInitiallyUnowned">GInitiallyUnowned</a>
         <span class="lineart">╰──</span> <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstObject.html">GstObject</a>
             <span class="lineart">╰──</span> <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html">GstElement</a>
-                <span class="lineart">╰──</span> GstAudioVisualizer-BadGstAudioVisualizers
+                <span class="lineart">╰──</span> GstAudioVisualizer
                     <span class="lineart">╰──</span> GstSpectraScope
 </pre>
 </div>
@@ -60,13 +60,13 @@
 <p>Spectrascope is a simple spectrum visualisation element. It renders the
 frequency spectrum as a series of bars.</p>
 <div class="refsect2">
-<a name="id-1.2.73.6.3"></a><h3>Example launch line</h3>
+<a name="id-1.2.68.6.3"></a><h3>Example launch line</h3>
 <div class="informalexample">
   <table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
     <tbody>
       <tr>
         <td class="listing_lines" align="right"><pre>1</pre></td>
-        <td class="listing_code"><pre class="programlisting">gst<span class="gtkdoc opt">-</span>launch audiotestsrc <span class="gtkdoc opt">!</span> audioconvert <span class="gtkdoc opt">!</span> spectrascope <span class="gtkdoc opt">!</span> ximagesink</pre></td>
+        <td class="listing_code"><pre class="programlisting">gst<span class="gtkdoc opt">-</span>launch<span class="gtkdoc opt">-</span><span class="number">1.0</span> audiotestsrc <span class="gtkdoc opt">!</span> audioconvert <span class="gtkdoc opt">!</span> spectrascope <span class="gtkdoc opt">!</span> ximagesink</pre></td>
       </tr>
     </tbody>
   </table>
@@ -76,7 +76,7 @@
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="id-1.2.73.6.4.1"></a><h3>Element Information</h3>
+<a name="id-1.2.68.6.4.1"></a><h3>Element Information</h3>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
@@ -102,7 +102,7 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="id-1.2.73.6.4.2"></a><h3>Element Pads</h3>
+<a name="id-1.2.68.6.4.2"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-speed.html b/docs/plugins/html/gst-plugins-bad-plugins-speed.html
index 4a5ea35..e618480 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-speed.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-speed.html
@@ -3,7 +3,7 @@
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>speed: GStreamer Bad Plugins 1.0 Plugins Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
 <link rel="home" href="index.html" title="GStreamer Bad Plugins 1.0 Plugins Reference Manual">
 <link rel="up" href="ch01.html" title="gst-plugins-bad Elements">
 <link rel="prev" href="gst-plugins-bad-plugins-synaescope.html" title="synaescope">
@@ -35,7 +35,7 @@
 </tr></table></div>
 <div class="refsect1">
 <a name="gst-plugins-bad-plugins-speed.properties"></a><h2>Properties</h2>
-<div class="informaltable"><table border="0">
+<div class="informaltable"><table class="informaltable" border="0">
 <colgroup>
 <col width="150px" class="properties_type">
 <col width="300px" class="properties_name">
@@ -50,7 +50,7 @@
 </div>
 <a name="GstSpeed"></a><div class="refsect1">
 <a name="gst-plugins-bad-plugins-speed.other"></a><h2>Types and Values</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="name">
 <col class="description">
@@ -78,13 +78,13 @@
 element (but relies on the decoder/demuxer to handle this correctly, also
 requires a fairly up-to-date gst-plugins-base, as of February 2007).</p>
 <div class="refsect2">
-<a name="id-1.2.75.7.4"></a><h3>Example launch line</h3>
+<a name="id-1.2.70.7.4"></a><h3>Example launch line</h3>
 <div class="informalexample">
   <table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
     <tbody>
       <tr>
         <td class="listing_lines" align="right"><pre>1</pre></td>
-        <td class="listing_code"><pre class="programlisting">gst<span class="gtkdoc opt">-</span>launch filesrc location<span class="gtkdoc opt">=</span>test<span class="gtkdoc opt">.</span>ogg <span class="gtkdoc opt">!</span> decodebin <span class="gtkdoc opt">!</span> audioconvert <span class="gtkdoc opt">!</span> speed speed<span class="gtkdoc opt">=</span><span class="number">1.5</span> <span class="gtkdoc opt">!</span> audioconvert <span class="gtkdoc opt">!</span> audioresample <span class="gtkdoc opt">!</span> autoaudiosink</pre></td>
+        <td class="listing_code"><pre class="programlisting">gst<span class="gtkdoc opt">-</span>launch<span class="gtkdoc opt">-</span><span class="number">1.0</span> filesrc location<span class="gtkdoc opt">=</span>test<span class="gtkdoc opt">.</span>ogg <span class="gtkdoc opt">!</span> decodebin <span class="gtkdoc opt">!</span> audioconvert <span class="gtkdoc opt">!</span> speed speed<span class="gtkdoc opt">=</span><span class="number">1.5</span> <span class="gtkdoc opt">!</span> audioconvert <span class="gtkdoc opt">!</span> audioresample <span class="gtkdoc opt">!</span> autoaudiosink</pre></td>
       </tr>
     </tbody>
   </table>
@@ -94,7 +94,7 @@
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="id-1.2.75.7.5.1"></a><h3>Element Information</h3>
+<a name="id-1.2.70.7.5.1"></a><h3>Element Information</h3>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
@@ -120,7 +120,7 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="id-1.2.75.7.5.2"></a><h3>Element Pads</h3>
+<a name="id-1.2.70.7.5.2"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-sphere.html b/docs/plugins/html/gst-plugins-bad-plugins-sphere.html
index 2de8a27..2cfdd48 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-sphere.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-sphere.html
@@ -3,7 +3,7 @@
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>sphere: GStreamer Bad Plugins 1.0 Plugins Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
 <link rel="home" href="index.html" title="GStreamer Bad Plugins 1.0 Plugins Reference Manual">
 <link rel="up" href="ch01.html" title="gst-plugins-bad Elements">
 <link rel="prev" href="gst-plugins-bad-plugins-speed.html" title="speed">
@@ -35,7 +35,7 @@
 </tr></table></div>
 <div class="refsect1">
 <a name="gst-plugins-bad-plugins-sphere.properties"></a><h2>Properties</h2>
-<div class="informaltable"><table border="0">
+<div class="informaltable"><table class="informaltable" border="0">
 <colgroup>
 <col width="150px" class="properties_type">
 <col width="300px" class="properties_name">
@@ -50,7 +50,7 @@
 </div>
 <a name="GstSphere"></a><div class="refsect1">
 <a name="gst-plugins-bad-plugins-sphere.other"></a><h2>Types and Values</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="name">
 <col class="description">
@@ -76,10 +76,25 @@
 </div>
 <div class="refsect1">
 <a name="gst-plugins-bad-plugins-sphere.description"></a><h2>Description</h2>
+<p>The sphere element applies a 'sphere' geometric transform to the image.</p>
+<div class="refsect2">
+<a name="id-1.2.71.7.3"></a><h3>Example launch line</h3>
+<div class="informalexample">
+  <table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
+    <tbody>
+      <tr>
+        <td class="listing_lines" align="right"><pre>1</pre></td>
+        <td class="listing_code"><pre class="programlisting">gst<span class="gtkdoc opt">-</span>launch<span class="gtkdoc opt">-</span><span class="number">1.0</span> <span class="gtkdoc opt">-</span>v videotestsrc <span class="gtkdoc opt">!</span> sphere <span class="gtkdoc opt">!</span> videoconvert <span class="gtkdoc opt">!</span> autovideosink</pre></td>
+      </tr>
+    </tbody>
+  </table>
+</div>
+
+</div>
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="id-1.2.76.7.2.1"></a><h3>Element Information</h3>
+<a name="id-1.2.71.7.4.1"></a><h3>Element Information</h3>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
@@ -105,7 +120,7 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="id-1.2.76.7.2.2"></a><h3>Element Pads</h3>
+<a name="id-1.2.71.7.4.2"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
@@ -178,6 +193,10 @@
 <p>Default value: 1.5</p>
 </div>
 </div>
+<div class="refsect1">
+<a name="gst-plugins-bad-plugins-sphere.see-also"></a><h2>See Also</h2>
+<p>geometrictransform</p>
+</div>
 </div>
 <div class="footer">
 <hr>Generated by GTK-Doc V1.24</div>
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-square.html b/docs/plugins/html/gst-plugins-bad-plugins-square.html
index a752be8..19301d1 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-square.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-square.html
@@ -3,7 +3,7 @@
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>square: GStreamer Bad Plugins 1.0 Plugins Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
 <link rel="home" href="index.html" title="GStreamer Bad Plugins 1.0 Plugins Reference Manual">
 <link rel="up" href="ch01.html" title="gst-plugins-bad Elements">
 <link rel="prev" href="gst-plugins-bad-plugins-sphere.html" title="sphere">
@@ -35,7 +35,7 @@
 </tr></table></div>
 <div class="refsect1">
 <a name="gst-plugins-bad-plugins-square.properties"></a><h2>Properties</h2>
-<div class="informaltable"><table border="0">
+<div class="informaltable"><table class="informaltable" border="0">
 <colgroup>
 <col width="150px" class="properties_type">
 <col width="300px" class="properties_name">
@@ -62,7 +62,7 @@
 </div>
 <a name="GstSquare"></a><div class="refsect1">
 <a name="gst-plugins-bad-plugins-square.other"></a><h2>Types and Values</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="name">
 <col class="description">
@@ -87,10 +87,25 @@
 </div>
 <div class="refsect1">
 <a name="gst-plugins-bad-plugins-square.description"></a><h2>Description</h2>
+<p>The square element distorts the center part of the image into a square.</p>
+<div class="refsect2">
+<a name="id-1.2.72.7.3"></a><h3>Example launch line</h3>
+<div class="informalexample">
+  <table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
+    <tbody>
+      <tr>
+        <td class="listing_lines" align="right"><pre>1</pre></td>
+        <td class="listing_code"><pre class="programlisting">gst<span class="gtkdoc opt">-</span>launch<span class="gtkdoc opt">-</span><span class="number">1.0</span> <span class="gtkdoc opt">-</span>v videotestsrc <span class="gtkdoc opt">!</span> square zoom<span class="gtkdoc opt">=</span><span class="number">100</span> <span class="gtkdoc opt">!</span> videoconvert <span class="gtkdoc opt">!</span> autovideosink</pre></td>
+      </tr>
+    </tbody>
+  </table>
+</div>
+
+</div>
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="id-1.2.77.7.2.1"></a><h3>Element Information</h3>
+<a name="id-1.2.72.7.4.1"></a><h3>Element Information</h3>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
@@ -116,7 +131,7 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="id-1.2.77.7.2.2"></a><h3>Element Pads</h3>
+<a name="id-1.2.72.7.4.2"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
@@ -208,6 +223,10 @@
 <p>Default value: 2</p>
 </div>
 </div>
+<div class="refsect1">
+<a name="gst-plugins-bad-plugins-square.see-also"></a><h2>See Also</h2>
+<p>geometrictransform</p>
+</div>
 </div>
 <div class="footer">
 <hr>Generated by GTK-Doc V1.24</div>
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-stretch.html b/docs/plugins/html/gst-plugins-bad-plugins-stretch.html
index a31b72b..ba0db28 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-stretch.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-stretch.html
@@ -3,7 +3,7 @@
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>stretch: GStreamer Bad Plugins 1.0 Plugins Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
 <link rel="home" href="index.html" title="GStreamer Bad Plugins 1.0 Plugins Reference Manual">
 <link rel="up" href="ch01.html" title="gst-plugins-bad Elements">
 <link rel="prev" href="gst-plugins-bad-plugins-square.html" title="square">
@@ -35,7 +35,7 @@
 </tr></table></div>
 <div class="refsect1">
 <a name="gst-plugins-bad-plugins-stretch.properties"></a><h2>Properties</h2>
-<div class="informaltable"><table border="0">
+<div class="informaltable"><table class="informaltable" border="0">
 <colgroup>
 <col width="150px" class="properties_type">
 <col width="300px" class="properties_name">
@@ -50,7 +50,7 @@
 </div>
 <a name="GstStretch"></a><div class="refsect1">
 <a name="gst-plugins-bad-plugins-stretch.other"></a><h2>Types and Values</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="name">
 <col class="description">
@@ -76,10 +76,25 @@
 </div>
 <div class="refsect1">
 <a name="gst-plugins-bad-plugins-stretch.description"></a><h2>Description</h2>
+<p>The stretch element stretches the image in a circle around the center point.</p>
+<div class="refsect2">
+<a name="id-1.2.73.7.3"></a><h3>Example launch line</h3>
+<div class="informalexample">
+  <table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
+    <tbody>
+      <tr>
+        <td class="listing_lines" align="right"><pre>1</pre></td>
+        <td class="listing_code"><pre class="programlisting">gst<span class="gtkdoc opt">-</span>launch<span class="gtkdoc opt">-</span><span class="number">1.0</span> <span class="gtkdoc opt">-</span>v videotestsrc <span class="gtkdoc opt">!</span> stretch <span class="gtkdoc opt">!</span> videoconvert <span class="gtkdoc opt">!</span> autovideosink</pre></td>
+      </tr>
+    </tbody>
+  </table>
+</div>
+
+</div>
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="id-1.2.78.7.2.1"></a><h3>Element Information</h3>
+<a name="id-1.2.73.7.4.1"></a><h3>Element Information</h3>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
@@ -105,7 +120,7 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="id-1.2.78.7.2.2"></a><h3>Element Pads</h3>
+<a name="id-1.2.73.7.4.2"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
@@ -179,6 +194,10 @@
 <p>Default value: 0.5</p>
 </div>
 </div>
+<div class="refsect1">
+<a name="gst-plugins-bad-plugins-stretch.see-also"></a><h2>See Also</h2>
+<p>geometrictransform</p>
+</div>
 </div>
 <div class="footer">
 <hr>Generated by GTK-Doc V1.24</div>
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-synaescope.html b/docs/plugins/html/gst-plugins-bad-plugins-synaescope.html
index 625d945..7ebfa5c 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-synaescope.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-synaescope.html
@@ -3,7 +3,7 @@
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>synaescope: GStreamer Bad Plugins 1.0 Plugins Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
 <link rel="home" href="index.html" title="GStreamer Bad Plugins 1.0 Plugins Reference Manual">
 <link rel="up" href="ch01.html" title="gst-plugins-bad Elements">
 <link rel="prev" href="gst-plugins-bad-plugins-spectrascope.html" title="spectrascope">
@@ -34,7 +34,7 @@
 </tr></table></div>
 <a name="GstSynaeScope"></a><div class="refsect1">
 <a name="gst-plugins-bad-plugins-synaescope.other"></a><h2>Types and Values</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="name">
 <col class="description">
@@ -51,7 +51,7 @@
     <span class="lineart">╰──</span> <a href="https://developer.gnome.org/gobject/unstable/gobject-The-Base-Object-Type.html#GInitiallyUnowned">GInitiallyUnowned</a>
         <span class="lineart">╰──</span> <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstObject.html">GstObject</a>
             <span class="lineart">╰──</span> <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html">GstElement</a>
-                <span class="lineart">╰──</span> GstAudioVisualizer-BadGstAudioVisualizers
+                <span class="lineart">╰──</span> GstAudioVisualizer
                     <span class="lineart">╰──</span> GstSynaeScope
 </pre>
 </div>
@@ -60,13 +60,13 @@
 <p>Synaescope is an audio visualisation element. It analyzes frequencies and
 out-of phase properties of audio and draws this as clouds of stars.</p>
 <div class="refsect2">
-<a name="id-1.2.74.6.3"></a><h3>Example launch line</h3>
+<a name="id-1.2.69.6.3"></a><h3>Example launch line</h3>
 <div class="informalexample">
   <table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
     <tbody>
       <tr>
         <td class="listing_lines" align="right"><pre>1</pre></td>
-        <td class="listing_code"><pre class="programlisting">gst<span class="gtkdoc opt">-</span>launch audiotestsrc <span class="gtkdoc opt">!</span> audioconvert <span class="gtkdoc opt">!</span> synaescope <span class="gtkdoc opt">!</span> ximagesink</pre></td>
+        <td class="listing_code"><pre class="programlisting">gst<span class="gtkdoc opt">-</span>launch<span class="gtkdoc opt">-</span><span class="number">1.0</span> audiotestsrc <span class="gtkdoc opt">!</span> audioconvert <span class="gtkdoc opt">!</span> synaescope <span class="gtkdoc opt">!</span> ximagesink</pre></td>
       </tr>
     </tbody>
   </table>
@@ -76,7 +76,7 @@
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="id-1.2.74.6.4.1"></a><h3>Element Information</h3>
+<a name="id-1.2.69.6.4.1"></a><h3>Element Information</h3>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
@@ -102,7 +102,7 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="id-1.2.74.6.4.2"></a><h3>Element Pads</h3>
+<a name="id-1.2.69.6.4.2"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-templatematch.html b/docs/plugins/html/gst-plugins-bad-plugins-templatematch.html
index 3b2ce86..ab92251 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-templatematch.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-templatematch.html
@@ -3,7 +3,7 @@
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>templatematch: GStreamer Bad Plugins 1.0 Plugins Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
 <link rel="home" href="index.html" title="GStreamer Bad Plugins 1.0 Plugins Reference Manual">
 <link rel="up" href="ch01.html" title="gst-plugins-bad Elements">
 <link rel="prev" href="gst-plugins-bad-plugins-stretch.html" title="stretch">
@@ -15,8 +15,7 @@
 <table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="5"><tr valign="middle">
 <td width="100%" align="left" class="shortcuts">
 <a href="#" class="shortcut">Top</a><span id="nav_description">  <span class="dim">|</span> 
-                  <a href="#gst-plugins-bad-plugins-templatematch.description" class="shortcut">Description</a></span><span id="nav_hierarchy">  <span class="dim">|</span> 
-                  <a href="#gst-plugins-bad-plugins-templatematch.object-hierarchy" class="shortcut">Object Hierarchy</a></span><span id="nav_properties">  <span class="dim">|</span> 
+                  <a href="#gst-plugins-bad-plugins-templatematch.description" class="shortcut">Description</a></span><span id="nav_properties">  <span class="dim">|</span> 
                   <a href="#gst-plugins-bad-plugins-templatematch.properties" class="shortcut">Properties</a></span>
 </td>
 <td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
@@ -35,7 +34,7 @@
 </tr></table></div>
 <div class="refsect1">
 <a name="gst-plugins-bad-plugins-templatematch.properties"></a><h2>Properties</h2>
-<div class="informaltable"><table border="0">
+<div class="informaltable"><table class="informaltable" border="0">
 <colgroup>
 <col width="150px" class="properties_type">
 <col width="300px" class="properties_name">
@@ -61,34 +60,25 @@
 </tbody>
 </table></div>
 </div>
-<a name="GstSynaeScope"></a><a name="GstTemplateMatch"></a><div class="refsect1">
+<a name="GstSynaeScope"></a><div class="refsect1">
 <a name="gst-plugins-bad-plugins-templatematch.other"></a><h2>Types and Values</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="name">
 <col class="description">
 </colgroup>
 <tbody><tr>
 <td class="datatype_keyword">struct</td>
-<td class="function_name"><a class="link" href="gst-plugins-bad-plugins-templatematch.html#GstTemplateMatch-struct" title="struct GstTemplateMatch">GstTemplateMatch</a></td>
+<td class="function_name"><a class="link" href="gst-plugins-bad-plugins-templatematch.html#GstTemplateMatch" title="struct GstTemplateMatch">GstTemplateMatch</a></td>
 </tr></tbody>
 </table></div>
 </div>
 <div class="refsect1">
-<a name="gst-plugins-bad-plugins-templatematch.object-hierarchy"></a><h2>Object Hierarchy</h2>
-<pre class="screen">    <a href="https://developer.gnome.org/gobject/unstable/gobject-The-Base-Object-Type.html#GObject">GObject</a>
-    <span class="lineart">╰──</span> <a href="https://developer.gnome.org/gobject/unstable/gobject-The-Base-Object-Type.html#GInitiallyUnowned">GInitiallyUnowned</a>
-        <span class="lineart">╰──</span> <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstObject.html">GstObject</a>
-            <span class="lineart">╰──</span> <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html">GstElement</a>
-                <span class="lineart">╰──</span> GstTemplateMatch
-</pre>
-</div>
-<div class="refsect1">
 <a name="gst-plugins-bad-plugins-templatematch.description"></a><h2>Description</h2>
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="id-1.2.79.8.2.1"></a><h3>Element Information</h3>
+<a name="id-1.2.74.6.2.1"></a><h3>Element Information</h3>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
@@ -114,7 +104,7 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="id-1.2.79.8.2.2"></a><h3>Element Pads</h3>
+<a name="id-1.2.74.6.2.2"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
@@ -173,8 +163,18 @@
 <div class="refsect1">
 <a name="gst-plugins-bad-plugins-templatematch.other_details"></a><h2>Types and Values</h2>
 <div class="refsect2">
-<a name="GstTemplateMatch-struct"></a><h3>struct GstTemplateMatch</h3>
-<pre class="programlisting">struct GstTemplateMatch;</pre>
+<a name="GstTemplateMatch"></a><h3>struct GstTemplateMatch</h3>
+<pre class="programlisting">struct GstTemplateMatch {
+  GstOpencvVideoFilter element;
+
+  gint method;
+  gboolean display;
+
+  gchar *templ;
+
+  IplImage *cvGray, *cvTemplateImage, *cvDistImage;
+};
+</pre>
 </div>
 </div>
 <div class="refsect1">
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-tunnel.html b/docs/plugins/html/gst-plugins-bad-plugins-tunnel.html
index ebdf9fc..e2042c9 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-tunnel.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-tunnel.html
@@ -3,7 +3,7 @@
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>tunnel: GStreamer Bad Plugins 1.0 Plugins Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
 <link rel="home" href="index.html" title="GStreamer Bad Plugins 1.0 Plugins Reference Manual">
 <link rel="up" href="ch01.html" title="gst-plugins-bad Elements">
 <link rel="prev" href="gst-plugins-bad-plugins-opencvtextoverlay.html" title="opencvtextoverlay">
@@ -34,7 +34,7 @@
 </tr></table></div>
 <a name="GstTunnel"></a><div class="refsect1">
 <a name="gst-plugins-bad-plugins-tunnel.other"></a><h2>Types and Values</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="name">
 <col class="description">
@@ -60,10 +60,26 @@
 </div>
 <div class="refsect1">
 <a name="gst-plugins-bad-plugins-tunnel.description"></a><h2>Description</h2>
+<p>Tunnel is a geometric image transform element. It applies a light tunnel
+effect.</p>
+<div class="refsect2">
+<a name="id-1.2.76.6.3"></a><h3>Example launch line</h3>
+<div class="informalexample">
+  <table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
+    <tbody>
+      <tr>
+        <td class="listing_lines" align="right"><pre>1</pre></td>
+        <td class="listing_code"><pre class="programlisting">gst<span class="gtkdoc opt">-</span>launch<span class="gtkdoc opt">-</span><span class="number">1.0</span> <span class="gtkdoc opt">-</span>v videotestsrc <span class="gtkdoc opt">!</span> tunnel <span class="gtkdoc opt">!</span> videoconvert <span class="gtkdoc opt">!</span> autovideosink</pre></td>
+      </tr>
+    </tbody>
+  </table>
+</div>
+
+</div>
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="id-1.2.81.6.2.1"></a><h3>Element Information</h3>
+<a name="id-1.2.76.6.4.1"></a><h3>Element Information</h3>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
@@ -89,7 +105,7 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="id-1.2.81.6.2.2"></a><h3>Element Pads</h3>
+<a name="id-1.2.76.6.4.2"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
@@ -152,6 +168,10 @@
 <pre class="programlisting">struct GstTunnel;</pre>
 </div>
 </div>
+<div class="refsect1">
+<a name="gst-plugins-bad-plugins-tunnel.see-also"></a><h2>See Also</h2>
+<p>geometrictransform</p>
+</div>
 </div>
 <div class="footer">
 <hr>Generated by GTK-Doc V1.24</div>
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-twirl.html b/docs/plugins/html/gst-plugins-bad-plugins-twirl.html
index 68bdcc7..ea1ba8e 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-twirl.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-twirl.html
@@ -3,7 +3,7 @@
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>twirl: GStreamer Bad Plugins 1.0 Plugins Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
 <link rel="home" href="index.html" title="GStreamer Bad Plugins 1.0 Plugins Reference Manual">
 <link rel="up" href="ch01.html" title="gst-plugins-bad Elements">
 <link rel="prev" href="gst-plugins-bad-plugins-tunnel.html" title="tunnel">
@@ -35,7 +35,7 @@
 </tr></table></div>
 <div class="refsect1">
 <a name="gst-plugins-bad-plugins-twirl.properties"></a><h2>Properties</h2>
-<div class="informaltable"><table border="0">
+<div class="informaltable"><table class="informaltable" border="0">
 <colgroup>
 <col width="150px" class="properties_type">
 <col width="300px" class="properties_name">
@@ -50,7 +50,7 @@
 </div>
 <a name="GstTwirl"></a><div class="refsect1">
 <a name="gst-plugins-bad-plugins-twirl.other"></a><h2>Types and Values</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="name">
 <col class="description">
@@ -76,10 +76,25 @@
 </div>
 <div class="refsect1">
 <a name="gst-plugins-bad-plugins-twirl.description"></a><h2>Description</h2>
+<p>The twirl element twists the image from the center out.</p>
+<div class="refsect2">
+<a name="id-1.2.77.7.3"></a><h3>Example launch line</h3>
+<div class="informalexample">
+  <table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
+    <tbody>
+      <tr>
+        <td class="listing_lines" align="right"><pre>1</pre></td>
+        <td class="listing_code"><pre class="programlisting">gst<span class="gtkdoc opt">-</span>launch<span class="gtkdoc opt">-</span><span class="number">1.0</span> <span class="gtkdoc opt">-</span>v videotestsrc <span class="gtkdoc opt">!</span> twirl <span class="gtkdoc opt">!</span> videoconvert <span class="gtkdoc opt">!</span> autovideosink</pre></td>
+      </tr>
+    </tbody>
+  </table>
+</div>
+
+</div>
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="id-1.2.82.7.2.1"></a><h3>Element Information</h3>
+<a name="id-1.2.77.7.4.1"></a><h3>Element Information</h3>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
@@ -105,7 +120,7 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="id-1.2.82.7.2.2"></a><h3>Element Pads</h3>
+<a name="id-1.2.77.7.4.2"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
@@ -178,6 +193,10 @@
 <p>Default value: 3.14159</p>
 </div>
 </div>
+<div class="refsect1">
+<a name="gst-plugins-bad-plugins-twirl.see-also"></a><h2>See Also</h2>
+<p>geometrictransform</p>
+</div>
 </div>
 <div class="footer">
 <hr>Generated by GTK-Doc V1.24</div>
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-videoparse.html b/docs/plugins/html/gst-plugins-bad-plugins-videoparse.html
index d021987..a11ac14 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-videoparse.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-videoparse.html
@@ -3,7 +3,7 @@
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>videoparse: GStreamer Bad Plugins 1.0 Plugins Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
 <link rel="home" href="index.html" title="GStreamer Bad Plugins 1.0 Plugins Reference Manual">
 <link rel="up" href="ch01.html" title="gst-plugins-bad Elements">
 <link rel="prev" href="gst-plugins-bad-plugins-twirl.html" title="twirl">
@@ -35,7 +35,7 @@
 </tr></table></div>
 <div class="refsect1">
 <a name="gst-plugins-bad-plugins-videoparse.properties"></a><h2>Properties</h2>
-<div class="informaltable"><table border="0">
+<div class="informaltable"><table class="informaltable" border="0">
 <colgroup>
 <col width="150px" class="properties_type">
 <col width="300px" class="properties_name">
@@ -112,12 +112,29 @@
 <td class="property_name"><a class="link" href="gst-plugins-bad-plugins-videoparse.html#GstVideoParse--top-field-first" title="The “top-field-first” property">top-field-first</a></td>
 <td class="property_flags">Read / Write</td>
 </tr>
+<tr>
+<td class="property_type"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a></td>
+<td class="property_name"><a class="link" href="gst-plugins-bad-plugins-videoparse.html#GstVideoParse--framesize" title="The “framesize” property">framesize</a></td>
+<td class="property_flags">Read / Write</td>
+</tr>
+<tr>
+<td class="property_type">
+<a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *</td>
+<td class="property_name"><a class="link" href="gst-plugins-bad-plugins-videoparse.html#GstVideoParse--offsets" title="The “offsets” property">offsets</a></td>
+<td class="property_flags">Read / Write</td>
+</tr>
+<tr>
+<td class="property_type">
+<a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *</td>
+<td class="property_name"><a class="link" href="gst-plugins-bad-plugins-videoparse.html#GstVideoParse--strides" title="The “strides” property">strides</a></td>
+<td class="property_flags">Read / Write</td>
+</tr>
 </tbody>
 </table></div>
 </div>
 <a name="GstVideoParse"></a><div class="refsect1">
 <a name="gst-plugins-bad-plugins-videoparse.other"></a><h2>Types and Values</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="name">
 <col class="description">
@@ -144,7 +161,7 @@
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="id-1.2.83.7.3.1"></a><h3>Element Information</h3>
+<a name="id-1.2.78.7.3.1"></a><h3>Element Information</h3>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
@@ -170,7 +187,7 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="id-1.2.83.7.3.2"></a><h3>Element Pads</h3>
+<a name="id-1.2.78.7.3.2"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
@@ -352,6 +369,30 @@
 <p>Flags: Read / Write</p>
 <p>Default value: TRUE</p>
 </div>
+<hr>
+<div class="refsect2">
+<a name="GstVideoParse--framesize"></a><h3>The <code class="literal">“framesize”</code> property</h3>
+<pre class="programlisting">  “framesize”                <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a></pre>
+<p>Size of an image in raw stream (0: default).</p>
+<p>Flags: Read / Write</p>
+<p>Default value: 0</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstVideoParse--offsets"></a><h3>The <code class="literal">“offsets”</code> property</h3>
+<pre class="programlisting">  “offsets”                  <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *</pre>
+<p>Offset of each planes in bytes using string format: 'o0,o1,o2,o3'.</p>
+<p>Flags: Read / Write</p>
+<p>Default value: NULL</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstVideoParse--strides"></a><h3>The <code class="literal">“strides”</code> property</h3>
+<pre class="programlisting">  “strides”                  <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *</pre>
+<p>Stride of each planes in bytes using string format: 's0,s1,s2,s3'.</p>
+<p>Flags: Read / Write</p>
+<p>Default value: NULL</p>
+</div>
 </div>
 </div>
 <div class="footer">
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-voaacenc.html b/docs/plugins/html/gst-plugins-bad-plugins-voaacenc.html
index 325654d..3d4fa3c 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-voaacenc.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-voaacenc.html
@@ -3,7 +3,7 @@
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>voaacenc: GStreamer Bad Plugins 1.0 Plugins Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
 <link rel="home" href="index.html" title="GStreamer Bad Plugins 1.0 Plugins Reference Manual">
 <link rel="up" href="ch01.html" title="gst-plugins-bad Elements">
 <link rel="prev" href="gst-plugins-bad-plugins-zbar.html" title="zbar">
@@ -36,7 +36,7 @@
 </tr></table></div>
 <div class="refsect1">
 <a name="gst-plugins-bad-plugins-voaacenc.properties"></a><h2>Properties</h2>
-<div class="informaltable"><table border="0">
+<div class="informaltable"><table class="informaltable" border="0">
 <colgroup>
 <col width="150px" class="properties_type">
 <col width="300px" class="properties_name">
@@ -51,7 +51,7 @@
 </div>
 <a name="GstVoAacEnc"></a><div class="refsect1">
 <a name="gst-plugins-bad-plugins-voaacenc.other"></a><h2>Types and Values</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="name">
 <col class="description">
@@ -83,7 +83,7 @@
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="id-1.2.86.8.2.1"></a><h3>Element Information</h3>
+<a name="id-1.2.81.8.2.1"></a><h3>Element Information</h3>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
@@ -109,7 +109,7 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="id-1.2.86.8.2.2"></a><h3>Element Pads</h3>
+<a name="id-1.2.81.8.2.2"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-voamrwbenc.html b/docs/plugins/html/gst-plugins-bad-plugins-voamrwbenc.html
index f18d2d4..81f0575 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-voamrwbenc.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-voamrwbenc.html
@@ -3,7 +3,7 @@
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>voamrwbenc: GStreamer Bad Plugins 1.0 Plugins Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
 <link rel="home" href="index.html" title="GStreamer Bad Plugins 1.0 Plugins Reference Manual">
 <link rel="up" href="ch01.html" title="gst-plugins-bad Elements">
 <link rel="prev" href="gst-plugins-bad-plugins-voaacenc.html" title="voaacenc">
@@ -36,7 +36,7 @@
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="id-1.2.87.3.2.1"></a><h3>Element Information</h3>
+<a name="id-1.2.82.3.2.1"></a><h3>Element Information</h3>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
@@ -62,7 +62,7 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="id-1.2.87.3.2.2"></a><h3>Element Pads</h3>
+<a name="id-1.2.82.3.2.2"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-waterripple.html b/docs/plugins/html/gst-plugins-bad-plugins-waterripple.html
index 1c55430..605d950 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-waterripple.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-waterripple.html
@@ -3,7 +3,7 @@
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>waterripple: GStreamer Bad Plugins 1.0 Plugins Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
 <link rel="home" href="index.html" title="GStreamer Bad Plugins 1.0 Plugins Reference Manual">
 <link rel="up" href="ch01.html" title="gst-plugins-bad Elements">
 <link rel="prev" href="gst-plugins-bad-plugins-videoparse.html" title="videoparse">
@@ -35,7 +35,7 @@
 </tr></table></div>
 <div class="refsect1">
 <a name="gst-plugins-bad-plugins-waterripple.properties"></a><h2>Properties</h2>
-<div class="informaltable"><table border="0">
+<div class="informaltable"><table class="informaltable" border="0">
 <colgroup>
 <col width="150px" class="properties_type">
 <col width="300px" class="properties_name">
@@ -62,7 +62,7 @@
 </div>
 <a name="GstWaterRipple"></a><div class="refsect1">
 <a name="gst-plugins-bad-plugins-waterripple.other"></a><h2>Types and Values</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="name">
 <col class="description">
@@ -88,10 +88,25 @@
 </div>
 <div class="refsect1">
 <a name="gst-plugins-bad-plugins-waterripple.description"></a><h2>Description</h2>
+<p>The waterripple element creates a water ripple effect on the image.</p>
+<div class="refsect2">
+<a name="id-1.2.79.7.3"></a><h3>Example launch line</h3>
+<div class="informalexample">
+  <table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
+    <tbody>
+      <tr>
+        <td class="listing_lines" align="right"><pre>1</pre></td>
+        <td class="listing_code"><pre class="programlisting">gst<span class="gtkdoc opt">-</span>launch<span class="gtkdoc opt">-</span><span class="number">1.0</span> <span class="gtkdoc opt">-</span>v videotestsrc <span class="gtkdoc opt">!</span> waterripple <span class="gtkdoc opt">!</span> videoconvert <span class="gtkdoc opt">!</span> autovideosink</pre></td>
+      </tr>
+    </tbody>
+  </table>
+</div>
+
+</div>
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="id-1.2.84.7.2.1"></a><h3>Element Information</h3>
+<a name="id-1.2.79.7.4.1"></a><h3>Element Information</h3>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
@@ -117,7 +132,7 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="id-1.2.84.7.2.2"></a><h3>Element Pads</h3>
+<a name="id-1.2.79.7.4.2"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
@@ -206,6 +221,10 @@
 <p>Default value: 16</p>
 </div>
 </div>
+<div class="refsect1">
+<a name="gst-plugins-bad-plugins-waterripple.see-also"></a><h2>See Also</h2>
+<p>geometrictransform</p>
+</div>
 </div>
 <div class="footer">
 <hr>Generated by GTK-Doc V1.24</div>
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-wavescope.html b/docs/plugins/html/gst-plugins-bad-plugins-wavescope.html
index 2d88e6c..084bc42 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-wavescope.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-wavescope.html
@@ -3,7 +3,7 @@
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>wavescope: GStreamer Bad Plugins 1.0 Plugins Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
 <link rel="home" href="index.html" title="GStreamer Bad Plugins 1.0 Plugins Reference Manual">
 <link rel="up" href="ch01.html" title="gst-plugins-bad Elements">
 <link rel="prev" href="gst-plugins-bad-plugins-voamrwbenc.html" title="voamrwbenc">
@@ -35,7 +35,7 @@
 </tr></table></div>
 <div class="refsect1">
 <a name="gst-plugins-bad-plugins-wavescope.properties"></a><h2>Properties</h2>
-<div class="informaltable"><table border="0">
+<div class="informaltable"><table class="informaltable" border="0">
 <colgroup>
 <col width="150px" class="properties_type">
 <col width="300px" class="properties_name">
@@ -50,7 +50,7 @@
 </div>
 <a name="GstWaveScope"></a><div class="refsect1">
 <a name="gst-plugins-bad-plugins-wavescope.other"></a><h2>Types and Values</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="name">
 <col class="description">
@@ -67,7 +67,7 @@
     <span class="lineart">╰──</span> <a href="https://developer.gnome.org/gobject/unstable/gobject-The-Base-Object-Type.html#GInitiallyUnowned">GInitiallyUnowned</a>
         <span class="lineart">╰──</span> <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstObject.html">GstObject</a>
             <span class="lineart">╰──</span> <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html">GstElement</a>
-                <span class="lineart">╰──</span> GstAudioVisualizer-BadGstAudioVisualizers
+                <span class="lineart">╰──</span> GstAudioVisualizer
                     <span class="lineart">╰──</span> GstWaveScope
 </pre>
 </div>
@@ -76,13 +76,13 @@
 <p>Wavescope is a simple audio visualisation element. It renders the waveforms
 like on an oscilloscope.</p>
 <div class="refsect2">
-<a name="id-1.2.88.7.3"></a><h3>Example launch line</h3>
+<a name="id-1.2.83.7.3"></a><h3>Example launch line</h3>
 <div class="informalexample">
   <table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
     <tbody>
       <tr>
         <td class="listing_lines" align="right"><pre>1</pre></td>
-        <td class="listing_code"><pre class="programlisting">gst<span class="gtkdoc opt">-</span>launch audiotestsrc <span class="gtkdoc opt">!</span> audioconvert <span class="gtkdoc opt">!</span> wavescope <span class="gtkdoc opt">!</span> ximagesink</pre></td>
+        <td class="listing_code"><pre class="programlisting">gst<span class="gtkdoc opt">-</span>launch<span class="gtkdoc opt">-</span><span class="number">1.0</span> audiotestsrc <span class="gtkdoc opt">!</span> audioconvert <span class="gtkdoc opt">!</span> wavescope <span class="gtkdoc opt">!</span> ximagesink</pre></td>
       </tr>
     </tbody>
   </table>
@@ -92,7 +92,7 @@
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="id-1.2.88.7.4.1"></a><h3>Element Information</h3>
+<a name="id-1.2.83.7.4.1"></a><h3>Element Information</h3>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
@@ -118,7 +118,7 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="id-1.2.88.7.4.2"></a><h3>Element Pads</h3>
+<a name="id-1.2.83.7.4.2"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-zbar.html b/docs/plugins/html/gst-plugins-bad-plugins-zbar.html
index 7e95baf..4452fc8 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-zbar.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-zbar.html
@@ -3,7 +3,7 @@
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>zbar: GStreamer Bad Plugins 1.0 Plugins Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
 <link rel="home" href="index.html" title="GStreamer Bad Plugins 1.0 Plugins Reference Manual">
 <link rel="up" href="ch01.html" title="gst-plugins-bad Elements">
 <link rel="prev" href="gst-plugins-bad-plugins-waterripple.html" title="waterripple">
@@ -35,7 +35,7 @@
 </tr></table></div>
 <div class="refsect1">
 <a name="gst-plugins-bad-plugins-zbar.properties"></a><h2>Properties</h2>
-<div class="informaltable"><table border="0">
+<div class="informaltable"><table class="informaltable" border="0">
 <colgroup>
 <col width="150px" class="properties_type">
 <col width="300px" class="properties_name">
@@ -62,7 +62,7 @@
 </div>
 <a name="GstZBar"></a><div class="refsect1">
 <a name="gst-plugins-bad-plugins-zbar.other"></a><h2>Types and Values</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
 <colgroup>
 <col width="150px" class="name">
 <col class="description">
@@ -89,7 +89,7 @@
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="id-1.2.85.7.2.1"></a><h3>Element Information</h3>
+<a name="id-1.2.80.7.2.1"></a><h3>Element Information</h3>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
@@ -115,7 +115,7 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="id-1.2.85.7.2.2"></a><h3>Element Pads</h3>
+<a name="id-1.2.80.7.2.2"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
diff --git a/docs/plugins/html/index.html b/docs/plugins/html/index.html
index fa72297..dad6a2f 100644
--- a/docs/plugins/html/index.html
+++ b/docs/plugins/html/index.html
@@ -3,7 +3,7 @@
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>GStreamer Bad Plugins 1.0 Plugins Reference Manual: GStreamer Bad Plugins 1.0 Plugins Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
 <link rel="home" href="index.html" title="GStreamer Bad Plugins 1.0 Plugins Reference Manual">
 <link rel="next" href="ch01.html" title="gst-plugins-bad Elements">
 <meta name="generator" content="GTK-Doc V1.24 (XML mode)">
@@ -15,7 +15,7 @@
 <div>
 <div><table class="navigation" id="top" width="100%" cellpadding="2" cellspacing="0"><tr><th valign="middle"><p class="title">GStreamer Bad Plugins 1.0 Plugins Reference Manual</p></th></tr></table></div>
 <div><p class="releaseinfo">
-      for GStreamer Bad Plugins 1.0 (1.6.3)
+      for GStreamer Bad Plugins 1.0 (1.7.91)
       The latest version of this documentation can be found on-line at
       <a class="ulink" href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-bad/html/" target="_top">http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-bad/html/</a>.
     </p></div>
@@ -38,6 +38,9 @@
 <span class="refentrytitle"><a href="gst-plugins-bad-plugins-assrender.html">assrender</a></span><span class="refpurpose"></span>
 </dt>
 <dt>
+<span class="refentrytitle"><a href="gst-plugins-bad-plugins-audiointerleave.html">audiointerleave</a></span><span class="refpurpose"></span>
+</dt>
+<dt>
 <span class="refentrytitle"><a href="gst-plugins-bad-plugins-audiomixer.html">audiomixer</a></span><span class="refpurpose"></span>
 </dt>
 <dt>
@@ -176,9 +179,6 @@
 <span class="refentrytitle"><a href="gst-plugins-bad-plugins-mplex.html">mplex</a></span><span class="refpurpose"></span>
 </dt>
 <dt>
-<span class="refentrytitle"><a href="gst-plugins-bad-plugins-mpg123audiodec.html">mpg123audiodec</a></span><span class="refpurpose"></span>
-</dt>
-<dt>
 <span class="refentrytitle"><a href="gst-plugins-bad-plugins-neonhttpsrc.html">neonhttpsrc</a></span><span class="refpurpose"></span>
 </dt>
 <dt>
@@ -191,21 +191,6 @@
 <span class="refentrytitle"><a href="gst-plugins-bad-plugins-openalsink.html">openalsink</a></span><span class="refpurpose"></span>
 </dt>
 <dt>
-<span class="refentrytitle"><a href="gst-plugins-bad-plugins-opusdec.html">opusdec</a></span><span class="refpurpose"></span>
-</dt>
-<dt>
-<span class="refentrytitle"><a href="gst-plugins-bad-plugins-opusenc.html">opusenc</a></span><span class="refpurpose"></span>
-</dt>
-<dt>
-<span class="refentrytitle"><a href="gst-plugins-bad-plugins-opusparse.html">opusparse</a></span><span class="refpurpose"></span>
-</dt>
-<dt>
-<span class="refentrytitle"><a href="gst-plugins-bad-plugins-rtpopuspay.html">rtpopuspay</a></span><span class="refpurpose"></span>
-</dt>
-<dt>
-<span class="refentrytitle"><a href="gst-plugins-bad-plugins-rtpopusdepay.html">rtpopusdepay</a></span><span class="refpurpose"></span>
-</dt>
-<dt>
 <span class="refentrytitle"><a href="gst-plugins-bad-plugins-pcapparse.html">pcapparse</a></span><span class="refpurpose"></span>
 </dt>
 <dt>
@@ -359,9 +344,6 @@
 <span class="refentrytitle"><a href="gst-plugins-bad-plugins-plugin-jpegformat.html">jpegformat</a></span><span class="refpurpose"> — JPEG interchange format plugin</span>
 </dt>
 <dt>
-<span class="refentrytitle"><a href="gst-plugins-bad-plugins-plugin-liveadder.html">liveadder</a></span><span class="refpurpose"> — Adds multiple live discontinuous streams</span>
-</dt>
-<dt>
 <span class="refentrytitle"><a href="gst-plugins-bad-plugins-plugin-mimic.html">mimic</a></span><span class="refpurpose"> — Mimic codec</span>
 </dt>
 <dt>
@@ -395,9 +377,6 @@
 <span class="refentrytitle"><a href="gst-plugins-bad-plugins-plugin-opencv.html">opencv</a></span><span class="refpurpose"> — GStreamer OpenCV Plugins</span>
 </dt>
 <dt>
-<span class="refentrytitle"><a href="gst-plugins-bad-plugins-plugin-opus.html">opus</a></span><span class="refpurpose"> — OPUS plugin library</span>
-</dt>
-<dt>
 <span class="refentrytitle"><a href="gst-plugins-bad-plugins-plugin-pcapparse.html">pcapparse</a></span><span class="refpurpose"> — Element parsing raw pcap streams</span>
 </dt>
 <dt>
diff --git a/docs/plugins/html/index.sgml b/docs/plugins/html/index.sgml
index e994587..0102cf3 100644
--- a/docs/plugins/html/index.sgml
+++ b/docs/plugins/html/index.sgml
@@ -40,6 +40,19 @@
 <ANCHOR id="GstAssRender--embeddedfonts" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-assrender.html#GstAssRender--embeddedfonts">
 <ANCHOR id="GstAssRender--enable" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-assrender.html#GstAssRender--enable">
 <ANCHOR id="GstAssRender--wait-text" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-assrender.html#GstAssRender--wait-text">
+<ANCHOR id="gst-plugins-bad-plugins-audiointerleave" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-audiointerleave.html">
+<ANCHOR id="gst-plugins-bad-plugins-audiointerleave.properties" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-audiointerleave.html#gst-plugins-bad-plugins-audiointerleave.properties">
+<ANCHOR id="GstAudioInterleave" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-audiointerleave.html#GstAudioInterleave">
+<ANCHOR id="gst-plugins-bad-plugins-audiointerleave.other" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-audiointerleave.html#gst-plugins-bad-plugins-audiointerleave.other">
+<ANCHOR id="gst-plugins-bad-plugins-audiointerleave.object-hierarchy" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-audiointerleave.html#gst-plugins-bad-plugins-audiointerleave.object-hierarchy">
+<ANCHOR id="gst-plugins-bad-plugins-audiointerleave.implemented-interfaces" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-audiointerleave.html#gst-plugins-bad-plugins-audiointerleave.implemented-interfaces">
+<ANCHOR id="gst-plugins-bad-plugins-audiointerleave.description" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-audiointerleave.html#gst-plugins-bad-plugins-audiointerleave.description">
+<ANCHOR id="gst-plugins-bad-plugins-audiointerleave.functions_details" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-audiointerleave.html#gst-plugins-bad-plugins-audiointerleave.functions_details">
+<ANCHOR id="gst-plugins-bad-plugins-audiointerleave.other_details" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-audiointerleave.html#gst-plugins-bad-plugins-audiointerleave.other_details">
+<ANCHOR id="GstAudioInterleave-struct" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-audiointerleave.html#GstAudioInterleave-struct">
+<ANCHOR id="gst-plugins-bad-plugins-audiointerleave.property-details" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-audiointerleave.html#gst-plugins-bad-plugins-audiointerleave.property-details">
+<ANCHOR id="GstAudioInterleave--channel-positions" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-audiointerleave.html#GstAudioInterleave--channel-positions">
+<ANCHOR id="GstAudioInterleave--channel-positions-from-input" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-audiointerleave.html#GstAudioInterleave--channel-positions-from-input">
 <ANCHOR id="gst-plugins-bad-plugins-audiomixer" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-audiomixer.html">
 <ANCHOR id="gst-plugins-bad-plugins-audiomixer.properties" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-audiomixer.html#gst-plugins-bad-plugins-audiomixer.properties">
 <ANCHOR id="GstAudioMixer" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-audiomixer.html#GstAudioMixer">
@@ -86,6 +99,7 @@
 <ANCHOR id="GstBulge-struct" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-bulge.html#GstBulge-struct">
 <ANCHOR id="gst-plugins-bad-plugins-bulge.property-details" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-bulge.html#gst-plugins-bad-plugins-bulge.property-details">
 <ANCHOR id="GstBulge--zoom" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-bulge.html#GstBulge--zoom">
+<ANCHOR id="gst-plugins-bad-plugins-bulge.see-also" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-bulge.html#gst-plugins-bad-plugins-bulge.see-also">
 <ANCHOR id="gst-plugins-bad-plugins-burn" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-burn.html">
 <ANCHOR id="gst-plugins-bad-plugins-burn.properties" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-burn.html#gst-plugins-bad-plugins-burn.properties">
 <ANCHOR id="GstBurn" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-burn.html#GstBurn">
@@ -126,6 +140,7 @@
 <ANCHOR id="GstCircle--angle" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-circle.html#GstCircle--angle">
 <ANCHOR id="GstCircle--height" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-circle.html#GstCircle--height">
 <ANCHOR id="GstCircle--spread-angle" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-circle.html#GstCircle--spread-angle">
+<ANCHOR id="gst-plugins-bad-plugins-circle.see-also" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-circle.html#gst-plugins-bad-plugins-circle.see-also">
 <ANCHOR id="gst-plugins-bad-plugins-coloreffects" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-coloreffects.html">
 <ANCHOR id="gst-plugins-bad-plugins-coloreffects.properties" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-coloreffects.html#gst-plugins-bad-plugins-coloreffects.properties">
 <ANCHOR id="GstColorEffects" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-coloreffects.html#GstColorEffects">
@@ -148,49 +163,42 @@
 <ANCHOR id="gst-plugins-bad-plugins-compositor.property-details" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-compositor.html#gst-plugins-bad-plugins-compositor.property-details">
 <ANCHOR id="GstCompositor--background" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-compositor.html#GstCompositor--background">
 <ANCHOR id="gst-plugins-bad-plugins-cvdilate" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-cvdilate.html">
-<ANCHOR id="GstCvDilate" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-cvdilate.html#GstCvDilate">
 <ANCHOR id="gst-plugins-bad-plugins-cvdilate.other" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-cvdilate.html#gst-plugins-bad-plugins-cvdilate.other">
-<ANCHOR id="gst-plugins-bad-plugins-cvdilate.object-hierarchy" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-cvdilate.html#gst-plugins-bad-plugins-cvdilate.object-hierarchy">
 <ANCHOR id="gst-plugins-bad-plugins-cvdilate.description" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-cvdilate.html#gst-plugins-bad-plugins-cvdilate.description">
 <ANCHOR id="gst-plugins-bad-plugins-cvdilate.functions_details" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-cvdilate.html#gst-plugins-bad-plugins-cvdilate.functions_details">
 <ANCHOR id="gst-plugins-bad-plugins-cvdilate.other_details" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-cvdilate.html#gst-plugins-bad-plugins-cvdilate.other_details">
-<ANCHOR id="GstCvDilate-struct" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-cvdilate.html#GstCvDilate-struct">
+<ANCHOR id="GstCvDilate" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-cvdilate.html#GstCvDilate">
 <ANCHOR id="gst-plugins-bad-plugins-cverode" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-cverode.html">
-<ANCHOR id="GstCvErode" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-cverode.html#GstCvErode">
 <ANCHOR id="gst-plugins-bad-plugins-cverode.other" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-cverode.html#gst-plugins-bad-plugins-cverode.other">
-<ANCHOR id="gst-plugins-bad-plugins-cverode.object-hierarchy" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-cverode.html#gst-plugins-bad-plugins-cverode.object-hierarchy">
 <ANCHOR id="gst-plugins-bad-plugins-cverode.description" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-cverode.html#gst-plugins-bad-plugins-cverode.description">
 <ANCHOR id="gst-plugins-bad-plugins-cverode.functions_details" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-cverode.html#gst-plugins-bad-plugins-cverode.functions_details">
 <ANCHOR id="gst-plugins-bad-plugins-cverode.other_details" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-cverode.html#gst-plugins-bad-plugins-cverode.other_details">
-<ANCHOR id="GstCvErode-struct" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-cverode.html#GstCvErode-struct">
+<ANCHOR id="GstCvErode" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-cverode.html#GstCvErode">
 <ANCHOR id="gst-plugins-bad-plugins-cvequalizehist" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-cvequalizehist.html">
-<ANCHOR id="GstCvEqualizeHist" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-cvequalizehist.html#GstCvEqualizeHist">
 <ANCHOR id="gst-plugins-bad-plugins-cvequalizehist.other" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-cvequalizehist.html#gst-plugins-bad-plugins-cvequalizehist.other">
-<ANCHOR id="gst-plugins-bad-plugins-cvequalizehist.object-hierarchy" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-cvequalizehist.html#gst-plugins-bad-plugins-cvequalizehist.object-hierarchy">
 <ANCHOR id="gst-plugins-bad-plugins-cvequalizehist.description" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-cvequalizehist.html#gst-plugins-bad-plugins-cvequalizehist.description">
 <ANCHOR id="gst-plugins-bad-plugins-cvequalizehist.functions_details" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-cvequalizehist.html#gst-plugins-bad-plugins-cvequalizehist.functions_details">
 <ANCHOR id="gst-plugins-bad-plugins-cvequalizehist.other_details" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-cvequalizehist.html#gst-plugins-bad-plugins-cvequalizehist.other_details">
-<ANCHOR id="GstCvEqualizeHist-struct" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-cvequalizehist.html#GstCvEqualizeHist-struct">
+<ANCHOR id="GstCvEqualizeHist" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-cvequalizehist.html#GstCvEqualizeHist">
 <ANCHOR id="gst-plugins-bad-plugins-cvlaplace" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-cvlaplace.html">
 <ANCHOR id="gst-plugins-bad-plugins-cvlaplace.properties" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-cvlaplace.html#gst-plugins-bad-plugins-cvlaplace.properties">
-<ANCHOR id="GstCvLaplace" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-cvlaplace.html#GstCvLaplace">
 <ANCHOR id="gst-plugins-bad-plugins-cvlaplace.other" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-cvlaplace.html#gst-plugins-bad-plugins-cvlaplace.other">
-<ANCHOR id="gst-plugins-bad-plugins-cvlaplace.object-hierarchy" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-cvlaplace.html#gst-plugins-bad-plugins-cvlaplace.object-hierarchy">
 <ANCHOR id="gst-plugins-bad-plugins-cvlaplace.description" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-cvlaplace.html#gst-plugins-bad-plugins-cvlaplace.description">
 <ANCHOR id="gst-plugins-bad-plugins-cvlaplace.functions_details" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-cvlaplace.html#gst-plugins-bad-plugins-cvlaplace.functions_details">
 <ANCHOR id="gst-plugins-bad-plugins-cvlaplace.other_details" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-cvlaplace.html#gst-plugins-bad-plugins-cvlaplace.other_details">
-<ANCHOR id="GstCvLaplace-struct" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-cvlaplace.html#GstCvLaplace-struct">
+<ANCHOR id="GstCvLaplace" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-cvlaplace.html#GstCvLaplace">
 <ANCHOR id="gst-plugins-bad-plugins-cvlaplace.property-details" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-cvlaplace.html#gst-plugins-bad-plugins-cvlaplace.property-details">
 <ANCHOR id="GstCvLaplace--aperture-size" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-cvlaplace.html#GstCvLaplace--aperture-size">
+<ANCHOR id="GstCvLaplace--scale" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-cvlaplace.html#GstCvLaplace--scale">
+<ANCHOR id="GstCvLaplace--shift" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-cvlaplace.html#GstCvLaplace--shift">
+<ANCHOR id="GstCvLaplace--mask" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-cvlaplace.html#GstCvLaplace--mask">
 <ANCHOR id="gst-plugins-bad-plugins-cvsmooth" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-cvsmooth.html">
 <ANCHOR id="gst-plugins-bad-plugins-cvsmooth.properties" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-cvsmooth.html#gst-plugins-bad-plugins-cvsmooth.properties">
-<ANCHOR id="GstCvSmooth" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-cvsmooth.html#GstCvSmooth">
 <ANCHOR id="gst-plugins-bad-plugins-cvsmooth.other" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-cvsmooth.html#gst-plugins-bad-plugins-cvsmooth.other">
-<ANCHOR id="gst-plugins-bad-plugins-cvsmooth.object-hierarchy" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-cvsmooth.html#gst-plugins-bad-plugins-cvsmooth.object-hierarchy">
 <ANCHOR id="gst-plugins-bad-plugins-cvsmooth.description" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-cvsmooth.html#gst-plugins-bad-plugins-cvsmooth.description">
 <ANCHOR id="gst-plugins-bad-plugins-cvsmooth.functions_details" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-cvsmooth.html#gst-plugins-bad-plugins-cvsmooth.functions_details">
 <ANCHOR id="gst-plugins-bad-plugins-cvsmooth.other_details" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-cvsmooth.html#gst-plugins-bad-plugins-cvsmooth.other_details">
-<ANCHOR id="GstCvSmooth-struct" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-cvsmooth.html#GstCvSmooth-struct">
+<ANCHOR id="GstCvSmooth" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-cvsmooth.html#GstCvSmooth">
 <ANCHOR id="gst-plugins-bad-plugins-cvsmooth.property-details" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-cvsmooth.html#gst-plugins-bad-plugins-cvsmooth.property-details">
 <ANCHOR id="GstCvSmooth--param1" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-cvsmooth.html#GstCvSmooth--param1">
 <ANCHOR id="GstCvSmooth--param2" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-cvsmooth.html#GstCvSmooth--param2">
@@ -203,17 +211,16 @@
 <ANCHOR id="GstCvSmooth--width" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-cvsmooth.html#GstCvSmooth--width">
 <ANCHOR id="gst-plugins-bad-plugins-cvsobel" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-cvsobel.html">
 <ANCHOR id="gst-plugins-bad-plugins-cvsobel.properties" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-cvsobel.html#gst-plugins-bad-plugins-cvsobel.properties">
-<ANCHOR id="GstCvSobel" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-cvsobel.html#GstCvSobel">
 <ANCHOR id="gst-plugins-bad-plugins-cvsobel.other" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-cvsobel.html#gst-plugins-bad-plugins-cvsobel.other">
-<ANCHOR id="gst-plugins-bad-plugins-cvsobel.object-hierarchy" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-cvsobel.html#gst-plugins-bad-plugins-cvsobel.object-hierarchy">
 <ANCHOR id="gst-plugins-bad-plugins-cvsobel.description" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-cvsobel.html#gst-plugins-bad-plugins-cvsobel.description">
 <ANCHOR id="gst-plugins-bad-plugins-cvsobel.functions_details" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-cvsobel.html#gst-plugins-bad-plugins-cvsobel.functions_details">
 <ANCHOR id="gst-plugins-bad-plugins-cvsobel.other_details" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-cvsobel.html#gst-plugins-bad-plugins-cvsobel.other_details">
-<ANCHOR id="GstCvSobel-struct" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-cvsobel.html#GstCvSobel-struct">
+<ANCHOR id="GstCvSobel" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-cvsobel.html#GstCvSobel">
 <ANCHOR id="gst-plugins-bad-plugins-cvsobel.property-details" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-cvsobel.html#gst-plugins-bad-plugins-cvsobel.property-details">
 <ANCHOR id="GstCvSobel--aperture-size" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-cvsobel.html#GstCvSobel--aperture-size">
 <ANCHOR id="GstCvSobel--x-order" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-cvsobel.html#GstCvSobel--x-order">
 <ANCHOR id="GstCvSobel--y-order" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-cvsobel.html#GstCvSobel--y-order">
+<ANCHOR id="GstCvSobel--mask" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-cvsobel.html#GstCvSobel--mask">
 <ANCHOR id="gst-plugins-bad-plugins-dataurisrc" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-dataurisrc.html">
 <ANCHOR id="gst-plugins-bad-plugins-dataurisrc.properties" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-dataurisrc.html#gst-plugins-bad-plugins-dataurisrc.properties">
 <ANCHOR id="GstDataURISrc" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-dataurisrc.html#GstDataURISrc">
@@ -237,6 +244,7 @@
 <ANCHOR id="GstDiffuse-struct" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-diffuse.html#GstDiffuse-struct">
 <ANCHOR id="gst-plugins-bad-plugins-diffuse.property-details" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-diffuse.html#gst-plugins-bad-plugins-diffuse.property-details">
 <ANCHOR id="GstDiffuse--scale" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-diffuse.html#GstDiffuse--scale">
+<ANCHOR id="gst-plugins-bad-plugins-diffuse.see-also" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-diffuse.html#gst-plugins-bad-plugins-diffuse.see-also">
 <ANCHOR id="gst-plugins-bad-plugins-dilate" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-dilate.html">
 <ANCHOR id="gst-plugins-bad-plugins-dilate.properties" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-dilate.html#gst-plugins-bad-plugins-dilate.properties">
 <ANCHOR id="GstDilate" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-dilate.html#GstDilate">
@@ -420,6 +428,7 @@
 <ANCHOR id="gst-plugins-bad-plugins-fisheye.functions_details" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-fisheye.html#gst-plugins-bad-plugins-fisheye.functions_details">
 <ANCHOR id="gst-plugins-bad-plugins-fisheye.other_details" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-fisheye.html#gst-plugins-bad-plugins-fisheye.other_details">
 <ANCHOR id="GstFisheye-struct" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-fisheye.html#GstFisheye-struct">
+<ANCHOR id="gst-plugins-bad-plugins-fisheye.see-also" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-fisheye.html#gst-plugins-bad-plugins-fisheye.see-also">
 <ANCHOR id="gst-plugins-bad-plugins-fpsdisplaysink" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-fpsdisplaysink.html">
 <ANCHOR id="gst-plugins-bad-plugins-fpsdisplaysink.properties" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-fpsdisplaysink.html#gst-plugins-bad-plugins-fpsdisplaysink.properties">
 <ANCHOR id="gst-plugins-bad-plugins-fpsdisplaysink.signals" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-fpsdisplaysink.html#gst-plugins-bad-plugins-fpsdisplaysink.signals">
@@ -478,18 +487,11 @@
 <ANCHOR id="GstKaleidoscope--angle" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-kaleidoscope.html#GstKaleidoscope--angle">
 <ANCHOR id="GstKaleidoscope--angle2" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-kaleidoscope.html#GstKaleidoscope--angle2">
 <ANCHOR id="GstKaleidoscope--sides" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-kaleidoscope.html#GstKaleidoscope--sides">
+<ANCHOR id="gst-plugins-bad-plugins-kaleidoscope.see-also" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-kaleidoscope.html#gst-plugins-bad-plugins-kaleidoscope.see-also">
 <ANCHOR id="gst-plugins-bad-plugins-liveadder" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-liveadder.html">
-<ANCHOR id="gst-plugins-bad-plugins-liveadder.properties" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-liveadder.html#gst-plugins-bad-plugins-liveadder.properties">
-<ANCHOR id="GstLiveAdder" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-liveadder.html#GstLiveAdder">
-<ANCHOR id="gst-plugins-bad-plugins-liveadder.other" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-liveadder.html#gst-plugins-bad-plugins-liveadder.other">
-<ANCHOR id="gst-plugins-bad-plugins-liveadder.object-hierarchy" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-liveadder.html#gst-plugins-bad-plugins-liveadder.object-hierarchy">
 <ANCHOR id="gst-plugins-bad-plugins-liveadder.description" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-liveadder.html#gst-plugins-bad-plugins-liveadder.description">
 <ANCHOR id="gst-plugins-bad-plugins-liveadder.functions_details" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-liveadder.html#gst-plugins-bad-plugins-liveadder.functions_details">
 <ANCHOR id="gst-plugins-bad-plugins-liveadder.other_details" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-liveadder.html#gst-plugins-bad-plugins-liveadder.other_details">
-<ANCHOR id="GstLiveAdder-struct" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-liveadder.html#GstLiveAdder-struct">
-<ANCHOR id="gst-plugins-bad-plugins-liveadder.property-details" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-liveadder.html#gst-plugins-bad-plugins-liveadder.property-details">
-<ANCHOR id="GstLiveAdder--latency" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-liveadder.html#GstLiveAdder--latency">
-<ANCHOR id="gst-plugins-bad-plugins-liveadder.see-also" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-liveadder.html#gst-plugins-bad-plugins-liveadder.see-also">
 <ANCHOR id="gst-plugins-bad-plugins-marble" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-marble.html">
 <ANCHOR id="gst-plugins-bad-plugins-marble.properties" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-marble.html#gst-plugins-bad-plugins-marble.properties">
 <ANCHOR id="GstMarble" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-marble.html#GstMarble">
@@ -504,6 +506,7 @@
 <ANCHOR id="GstMarble--turbulence" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-marble.html#GstMarble--turbulence">
 <ANCHOR id="GstMarble--x-scale" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-marble.html#GstMarble--x-scale">
 <ANCHOR id="GstMarble--y-scale" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-marble.html#GstMarble--y-scale">
+<ANCHOR id="gst-plugins-bad-plugins-marble.see-also" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-marble.html#gst-plugins-bad-plugins-marble.see-also">
 <ANCHOR id="gst-plugins-bad-plugins-mimenc" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-mimenc.html">
 <ANCHOR id="gst-plugins-bad-plugins-mimenc.properties" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-mimenc.html#gst-plugins-bad-plugins-mimenc.properties">
 <ANCHOR id="GstMimEnc" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-mimenc.html#GstMimEnc">
@@ -534,6 +537,7 @@
 <ANCHOR id="GstMirror-struct" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-mirror.html#GstMirror-struct">
 <ANCHOR id="gst-plugins-bad-plugins-mirror.property-details" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-mirror.html#gst-plugins-bad-plugins-mirror.property-details">
 <ANCHOR id="GstMirror--mode" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-mirror.html#GstMirror--mode">
+<ANCHOR id="gst-plugins-bad-plugins-mirror.see-also" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-mirror.html#gst-plugins-bad-plugins-mirror.see-also">
 <ANCHOR id="gst-plugins-bad-plugins-modplug" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-modplug.html">
 <ANCHOR id="gst-plugins-bad-plugins-modplug.properties" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-modplug.html#gst-plugins-bad-plugins-modplug.properties">
 <ANCHOR id="GstModPlug" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-modplug.html#GstModPlug">
@@ -641,14 +645,6 @@
 <ANCHOR id="GstMplex--sector-size" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-mplex.html#GstMplex--sector-size">
 <ANCHOR id="GstMplex--system-headers" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-mplex.html#GstMplex--system-headers">
 <ANCHOR id="GstMplex--vbr" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-mplex.html#GstMplex--vbr">
-<ANCHOR id="gst-plugins-bad-plugins-mpg123audiodec" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-mpg123audiodec.html">
-<ANCHOR id="GstMpg123AudioDec" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-mpg123audiodec.html#GstMpg123AudioDec">
-<ANCHOR id="gst-plugins-bad-plugins-mpg123audiodec.other" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-mpg123audiodec.html#gst-plugins-bad-plugins-mpg123audiodec.other">
-<ANCHOR id="gst-plugins-bad-plugins-mpg123audiodec.object-hierarchy" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-mpg123audiodec.html#gst-plugins-bad-plugins-mpg123audiodec.object-hierarchy">
-<ANCHOR id="gst-plugins-bad-plugins-mpg123audiodec.description" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-mpg123audiodec.html#gst-plugins-bad-plugins-mpg123audiodec.description">
-<ANCHOR id="gst-plugins-bad-plugins-mpg123audiodec.functions_details" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-mpg123audiodec.html#gst-plugins-bad-plugins-mpg123audiodec.functions_details">
-<ANCHOR id="gst-plugins-bad-plugins-mpg123audiodec.other_details" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-mpg123audiodec.html#gst-plugins-bad-plugins-mpg123audiodec.other_details">
-<ANCHOR id="GstMpg123AudioDec-struct" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-mpg123audiodec.html#GstMpg123AudioDec-struct">
 <ANCHOR id="gst-plugins-bad-plugins-neonhttpsrc" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-neonhttpsrc.html">
 <ANCHOR id="gst-plugins-bad-plugins-neonhttpsrc.properties" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-neonhttpsrc.html#gst-plugins-bad-plugins-neonhttpsrc.properties">
 <ANCHOR id="gst-plugins-bad-plugins-neonhttpsrc.other" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-neonhttpsrc.html#gst-plugins-bad-plugins-neonhttpsrc.other">
@@ -699,85 +695,6 @@
 <ANCHOR id="gst-plugins-bad-plugins-openalsink.description" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-openalsink.html#gst-plugins-bad-plugins-openalsink.description">
 <ANCHOR id="gst-plugins-bad-plugins-openalsink.functions_details" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-openalsink.html#gst-plugins-bad-plugins-openalsink.functions_details">
 <ANCHOR id="gst-plugins-bad-plugins-openalsink.other_details" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-openalsink.html#gst-plugins-bad-plugins-openalsink.other_details">
-<ANCHOR id="gst-plugins-bad-plugins-opusdec" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-opusdec.html">
-<ANCHOR id="gst-plugins-bad-plugins-opusdec.properties" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-opusdec.html#gst-plugins-bad-plugins-opusdec.properties">
-<ANCHOR id="GstOpenalSrc" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-opusdec.html#GstOpenalSrc">
-<ANCHOR id="GstOpencvTextOverlay" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-opusdec.html#GstOpencvTextOverlay">
-<ANCHOR id="GstOpusDec" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-opusdec.html#GstOpusDec">
-<ANCHOR id="gst-plugins-bad-plugins-opusdec.other" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-opusdec.html#gst-plugins-bad-plugins-opusdec.other">
-<ANCHOR id="gst-plugins-bad-plugins-opusdec.object-hierarchy" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-opusdec.html#gst-plugins-bad-plugins-opusdec.object-hierarchy">
-<ANCHOR id="gst-plugins-bad-plugins-opusdec.description" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-opusdec.html#gst-plugins-bad-plugins-opusdec.description">
-<ANCHOR id="gst-plugins-bad-plugins-opusdec.functions_details" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-opusdec.html#gst-plugins-bad-plugins-opusdec.functions_details">
-<ANCHOR id="gst-plugins-bad-plugins-opusdec.other_details" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-opusdec.html#gst-plugins-bad-plugins-opusdec.other_details">
-<ANCHOR id="GstOpusDec-struct" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-opusdec.html#GstOpusDec-struct">
-<ANCHOR id="gst-plugins-bad-plugins-opusdec.property-details" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-opusdec.html#gst-plugins-bad-plugins-opusdec.property-details">
-<ANCHOR id="GstOpusDec--apply-gain" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-opusdec.html#GstOpusDec--apply-gain">
-<ANCHOR id="GstOpusDec--use-inband-fec" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-opusdec.html#GstOpusDec--use-inband-fec">
-<ANCHOR id="gst-plugins-bad-plugins-opusenc" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-opusenc.html">
-<ANCHOR id="gst-plugins-bad-plugins-opusenc.properties" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-opusenc.html#gst-plugins-bad-plugins-opusenc.properties">
-<ANCHOR id="GstOpenalSrc" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-opusenc.html#GstOpenalSrc">
-<ANCHOR id="GstOpencvTextOverlay" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-opusenc.html#GstOpencvTextOverlay">
-<ANCHOR id="GstOpusDec" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-opusenc.html#GstOpusDec">
-<ANCHOR id="GstOpusEnc" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-opusenc.html#GstOpusEnc">
-<ANCHOR id="gst-plugins-bad-plugins-opusenc.other" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-opusenc.html#gst-plugins-bad-plugins-opusenc.other">
-<ANCHOR id="gst-plugins-bad-plugins-opusenc.object-hierarchy" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-opusenc.html#gst-plugins-bad-plugins-opusenc.object-hierarchy">
-<ANCHOR id="gst-plugins-bad-plugins-opusenc.description" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-opusenc.html#gst-plugins-bad-plugins-opusenc.description">
-<ANCHOR id="gst-plugins-bad-plugins-opusenc.functions_details" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-opusenc.html#gst-plugins-bad-plugins-opusenc.functions_details">
-<ANCHOR id="gst-plugins-bad-plugins-opusenc.other_details" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-opusenc.html#gst-plugins-bad-plugins-opusenc.other_details">
-<ANCHOR id="GstOpusEnc-struct" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-opusenc.html#GstOpusEnc-struct">
-<ANCHOR id="gst-plugins-bad-plugins-opusenc.property-details" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-opusenc.html#gst-plugins-bad-plugins-opusenc.property-details">
-<ANCHOR id="GstOpusEnc--audio" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-opusenc.html#GstOpusEnc--audio">
-<ANCHOR id="GstOpusEnc--bandwidth" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-opusenc.html#GstOpusEnc--bandwidth">
-<ANCHOR id="GstOpusEnc--bitrate" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-opusenc.html#GstOpusEnc--bitrate">
-<ANCHOR id="GstOpusEnc--cbr" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-opusenc.html#GstOpusEnc--cbr">
-<ANCHOR id="GstOpusEnc--complexity" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-opusenc.html#GstOpusEnc--complexity">
-<ANCHOR id="GstOpusEnc--constrained-vbr" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-opusenc.html#GstOpusEnc--constrained-vbr">
-<ANCHOR id="GstOpusEnc--dtx" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-opusenc.html#GstOpusEnc--dtx">
-<ANCHOR id="GstOpusEnc--frame-size" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-opusenc.html#GstOpusEnc--frame-size">
-<ANCHOR id="GstOpusEnc--inband-fec" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-opusenc.html#GstOpusEnc--inband-fec">
-<ANCHOR id="GstOpusEnc--max-payload-size" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-opusenc.html#GstOpusEnc--max-payload-size">
-<ANCHOR id="GstOpusEnc--packet-loss-percentage" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-opusenc.html#GstOpusEnc--packet-loss-percentage">
-<ANCHOR id="GstOpusEnc--audio-type" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-opusenc.html#GstOpusEnc--audio-type">
-<ANCHOR id="GstOpusEnc--bitrate-type" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-opusenc.html#GstOpusEnc--bitrate-type">
-<ANCHOR id="gst-plugins-bad-plugins-opusparse" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-opusparse.html">
-<ANCHOR id="GstOpenalSrc" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-opusparse.html#GstOpenalSrc">
-<ANCHOR id="GstOpencvTextOverlay" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-opusparse.html#GstOpencvTextOverlay">
-<ANCHOR id="GstOpusDec" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-opusparse.html#GstOpusDec">
-<ANCHOR id="GstOpusEnc" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-opusparse.html#GstOpusEnc">
-<ANCHOR id="GstOpusParse" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-opusparse.html#GstOpusParse">
-<ANCHOR id="gst-plugins-bad-plugins-opusparse.other" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-opusparse.html#gst-plugins-bad-plugins-opusparse.other">
-<ANCHOR id="gst-plugins-bad-plugins-opusparse.object-hierarchy" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-opusparse.html#gst-plugins-bad-plugins-opusparse.object-hierarchy">
-<ANCHOR id="gst-plugins-bad-plugins-opusparse.description" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-opusparse.html#gst-plugins-bad-plugins-opusparse.description">
-<ANCHOR id="gst-plugins-bad-plugins-opusparse.functions_details" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-opusparse.html#gst-plugins-bad-plugins-opusparse.functions_details">
-<ANCHOR id="gst-plugins-bad-plugins-opusparse.other_details" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-opusparse.html#gst-plugins-bad-plugins-opusparse.other_details">
-<ANCHOR id="GstOpusParse-struct" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-opusparse.html#GstOpusParse-struct">
-<ANCHOR id="gst-plugins-bad-plugins-rtpopuspay" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-rtpopuspay.html">
-<ANCHOR id="GstOpenalSrc" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-rtpopuspay.html#GstOpenalSrc">
-<ANCHOR id="GstOpencvTextOverlay" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-rtpopuspay.html#GstOpencvTextOverlay">
-<ANCHOR id="GstOpusDec" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-rtpopuspay.html#GstOpusDec">
-<ANCHOR id="GstOpusEnc" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-rtpopuspay.html#GstOpusEnc">
-<ANCHOR id="GstOpusParse" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-rtpopuspay.html#GstOpusParse">
-<ANCHOR id="GstRTPOpusDepay" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-rtpopuspay.html#GstRTPOpusDepay">
-<ANCHOR id="GstRtpOPUSPay" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-rtpopuspay.html#GstRtpOPUSPay">
-<ANCHOR id="gst-plugins-bad-plugins-rtpopuspay.other" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-rtpopuspay.html#gst-plugins-bad-plugins-rtpopuspay.other">
-<ANCHOR id="gst-plugins-bad-plugins-rtpopuspay.object-hierarchy" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-rtpopuspay.html#gst-plugins-bad-plugins-rtpopuspay.object-hierarchy">
-<ANCHOR id="gst-plugins-bad-plugins-rtpopuspay.description" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-rtpopuspay.html#gst-plugins-bad-plugins-rtpopuspay.description">
-<ANCHOR id="gst-plugins-bad-plugins-rtpopuspay.functions_details" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-rtpopuspay.html#gst-plugins-bad-plugins-rtpopuspay.functions_details">
-<ANCHOR id="gst-plugins-bad-plugins-rtpopuspay.other_details" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-rtpopuspay.html#gst-plugins-bad-plugins-rtpopuspay.other_details">
-<ANCHOR id="GstRtpOPUSPay-struct" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-rtpopuspay.html#GstRtpOPUSPay-struct">
-<ANCHOR id="gst-plugins-bad-plugins-rtpopusdepay" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-rtpopusdepay.html">
-<ANCHOR id="GstOpenalSrc" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-rtpopusdepay.html#GstOpenalSrc">
-<ANCHOR id="GstOpencvTextOverlay" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-rtpopusdepay.html#GstOpencvTextOverlay">
-<ANCHOR id="GstOpusDec" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-rtpopusdepay.html#GstOpusDec">
-<ANCHOR id="GstOpusEnc" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-rtpopusdepay.html#GstOpusEnc">
-<ANCHOR id="GstOpusParse" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-rtpopusdepay.html#GstOpusParse">
-<ANCHOR id="GstRTPOpusDepay" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-rtpopusdepay.html#GstRTPOpusDepay">
-<ANCHOR id="gst-plugins-bad-plugins-rtpopusdepay.other" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-rtpopusdepay.html#gst-plugins-bad-plugins-rtpopusdepay.other">
-<ANCHOR id="gst-plugins-bad-plugins-rtpopusdepay.object-hierarchy" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-rtpopusdepay.html#gst-plugins-bad-plugins-rtpopusdepay.object-hierarchy">
-<ANCHOR id="gst-plugins-bad-plugins-rtpopusdepay.description" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-rtpopusdepay.html#gst-plugins-bad-plugins-rtpopusdepay.description">
-<ANCHOR id="gst-plugins-bad-plugins-rtpopusdepay.functions_details" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-rtpopusdepay.html#gst-plugins-bad-plugins-rtpopusdepay.functions_details">
-<ANCHOR id="gst-plugins-bad-plugins-rtpopusdepay.other_details" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-rtpopusdepay.html#gst-plugins-bad-plugins-rtpopusdepay.other_details">
-<ANCHOR id="GstRTPOpusDepay-struct" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-rtpopusdepay.html#GstRTPOpusDepay-struct">
 <ANCHOR id="gst-plugins-bad-plugins-pcapparse" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-pcapparse.html">
 <ANCHOR id="gst-plugins-bad-plugins-pcapparse.properties" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-pcapparse.html#gst-plugins-bad-plugins-pcapparse.properties">
 <ANCHOR id="GstPcapParse" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-pcapparse.html#GstPcapParse">
@@ -805,6 +722,7 @@
 <ANCHOR id="GstPinch-struct" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-pinch.html#GstPinch-struct">
 <ANCHOR id="gst-plugins-bad-plugins-pinch.property-details" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-pinch.html#gst-plugins-bad-plugins-pinch.property-details">
 <ANCHOR id="GstPinch--intensity" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-pinch.html#GstPinch--intensity">
+<ANCHOR id="gst-plugins-bad-plugins-pinch.see-also" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-pinch.html#gst-plugins-bad-plugins-pinch.see-also">
 <ANCHOR id="gst-plugins-bad-plugins-pyramidsegment" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-pyramidsegment.html">
 <ANCHOR id="GstPinch" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-pyramidsegment.html#GstPinch">
 <ANCHOR id="gst-plugins-bad-plugins-pyramidsegment.description" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-pyramidsegment.html#gst-plugins-bad-plugins-pyramidsegment.description">
@@ -969,6 +887,7 @@
 <ANCHOR id="GstSphere-struct" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-sphere.html#GstSphere-struct">
 <ANCHOR id="gst-plugins-bad-plugins-sphere.property-details" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-sphere.html#gst-plugins-bad-plugins-sphere.property-details">
 <ANCHOR id="GstSphere--refraction" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-sphere.html#GstSphere--refraction">
+<ANCHOR id="gst-plugins-bad-plugins-sphere.see-also" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-sphere.html#gst-plugins-bad-plugins-sphere.see-also">
 <ANCHOR id="gst-plugins-bad-plugins-square" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-square.html">
 <ANCHOR id="gst-plugins-bad-plugins-square.properties" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-square.html#gst-plugins-bad-plugins-square.properties">
 <ANCHOR id="GstSquare" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-square.html#GstSquare">
@@ -982,6 +901,7 @@
 <ANCHOR id="GstSquare--height" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-square.html#GstSquare--height">
 <ANCHOR id="GstSquare--width" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-square.html#GstSquare--width">
 <ANCHOR id="GstSquare--zoom" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-square.html#GstSquare--zoom">
+<ANCHOR id="gst-plugins-bad-plugins-square.see-also" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-square.html#gst-plugins-bad-plugins-square.see-also">
 <ANCHOR id="gst-plugins-bad-plugins-stretch" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-stretch.html">
 <ANCHOR id="gst-plugins-bad-plugins-stretch.properties" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-stretch.html#gst-plugins-bad-plugins-stretch.properties">
 <ANCHOR id="GstStretch" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-stretch.html#GstStretch">
@@ -993,16 +913,15 @@
 <ANCHOR id="GstStretch-struct" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-stretch.html#GstStretch-struct">
 <ANCHOR id="gst-plugins-bad-plugins-stretch.property-details" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-stretch.html#gst-plugins-bad-plugins-stretch.property-details">
 <ANCHOR id="GstStretch--intensity" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-stretch.html#GstStretch--intensity">
+<ANCHOR id="gst-plugins-bad-plugins-stretch.see-also" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-stretch.html#gst-plugins-bad-plugins-stretch.see-also">
 <ANCHOR id="gst-plugins-bad-plugins-templatematch" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-templatematch.html">
 <ANCHOR id="gst-plugins-bad-plugins-templatematch.properties" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-templatematch.html#gst-plugins-bad-plugins-templatematch.properties">
 <ANCHOR id="GstSynaeScope" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-templatematch.html#GstSynaeScope">
-<ANCHOR id="GstTemplateMatch" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-templatematch.html#GstTemplateMatch">
 <ANCHOR id="gst-plugins-bad-plugins-templatematch.other" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-templatematch.html#gst-plugins-bad-plugins-templatematch.other">
-<ANCHOR id="gst-plugins-bad-plugins-templatematch.object-hierarchy" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-templatematch.html#gst-plugins-bad-plugins-templatematch.object-hierarchy">
 <ANCHOR id="gst-plugins-bad-plugins-templatematch.description" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-templatematch.html#gst-plugins-bad-plugins-templatematch.description">
 <ANCHOR id="gst-plugins-bad-plugins-templatematch.functions_details" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-templatematch.html#gst-plugins-bad-plugins-templatematch.functions_details">
 <ANCHOR id="gst-plugins-bad-plugins-templatematch.other_details" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-templatematch.html#gst-plugins-bad-plugins-templatematch.other_details">
-<ANCHOR id="GstTemplateMatch-struct" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-templatematch.html#GstTemplateMatch-struct">
+<ANCHOR id="GstTemplateMatch" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-templatematch.html#GstTemplateMatch">
 <ANCHOR id="gst-plugins-bad-plugins-templatematch.property-details" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-templatematch.html#gst-plugins-bad-plugins-templatematch.property-details">
 <ANCHOR id="GstTemplateMatch--display" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-templatematch.html#GstTemplateMatch--display">
 <ANCHOR id="GstTemplateMatch--method" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-templatematch.html#GstTemplateMatch--method">
@@ -1010,13 +929,11 @@
 <ANCHOR id="gst-plugins-bad-plugins-opencvtextoverlay" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-opencvtextoverlay.html">
 <ANCHOR id="gst-plugins-bad-plugins-opencvtextoverlay.properties" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-opencvtextoverlay.html#gst-plugins-bad-plugins-opencvtextoverlay.properties">
 <ANCHOR id="GstOpenalSrc" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-opencvtextoverlay.html#GstOpenalSrc">
-<ANCHOR id="GstOpencvTextOverlay" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-opencvtextoverlay.html#GstOpencvTextOverlay">
 <ANCHOR id="gst-plugins-bad-plugins-opencvtextoverlay.other" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-opencvtextoverlay.html#gst-plugins-bad-plugins-opencvtextoverlay.other">
-<ANCHOR id="gst-plugins-bad-plugins-opencvtextoverlay.object-hierarchy" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-opencvtextoverlay.html#gst-plugins-bad-plugins-opencvtextoverlay.object-hierarchy">
 <ANCHOR id="gst-plugins-bad-plugins-opencvtextoverlay.description" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-opencvtextoverlay.html#gst-plugins-bad-plugins-opencvtextoverlay.description">
 <ANCHOR id="gst-plugins-bad-plugins-opencvtextoverlay.functions_details" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-opencvtextoverlay.html#gst-plugins-bad-plugins-opencvtextoverlay.functions_details">
 <ANCHOR id="gst-plugins-bad-plugins-opencvtextoverlay.other_details" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-opencvtextoverlay.html#gst-plugins-bad-plugins-opencvtextoverlay.other_details">
-<ANCHOR id="GstOpencvTextOverlay-struct" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-opencvtextoverlay.html#GstOpencvTextOverlay-struct">
+<ANCHOR id="GstOpencvTextOverlay" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-opencvtextoverlay.html#GstOpencvTextOverlay">
 <ANCHOR id="gst-plugins-bad-plugins-opencvtextoverlay.property-details" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-opencvtextoverlay.html#gst-plugins-bad-plugins-opencvtextoverlay.property-details">
 <ANCHOR id="GstOpencvTextOverlay--colorB" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-opencvtextoverlay.html#GstOpencvTextOverlay--colorB">
 <ANCHOR id="GstOpencvTextOverlay--colorG" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-opencvtextoverlay.html#GstOpencvTextOverlay--colorG">
@@ -1035,6 +952,7 @@
 <ANCHOR id="gst-plugins-bad-plugins-tunnel.functions_details" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-tunnel.html#gst-plugins-bad-plugins-tunnel.functions_details">
 <ANCHOR id="gst-plugins-bad-plugins-tunnel.other_details" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-tunnel.html#gst-plugins-bad-plugins-tunnel.other_details">
 <ANCHOR id="GstTunnel-struct" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-tunnel.html#GstTunnel-struct">
+<ANCHOR id="gst-plugins-bad-plugins-tunnel.see-also" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-tunnel.html#gst-plugins-bad-plugins-tunnel.see-also">
 <ANCHOR id="gst-plugins-bad-plugins-twirl" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-twirl.html">
 <ANCHOR id="gst-plugins-bad-plugins-twirl.properties" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-twirl.html#gst-plugins-bad-plugins-twirl.properties">
 <ANCHOR id="GstTwirl" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-twirl.html#GstTwirl">
@@ -1046,6 +964,7 @@
 <ANCHOR id="GstTwirl-struct" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-twirl.html#GstTwirl-struct">
 <ANCHOR id="gst-plugins-bad-plugins-twirl.property-details" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-twirl.html#gst-plugins-bad-plugins-twirl.property-details">
 <ANCHOR id="GstTwirl--angle" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-twirl.html#GstTwirl--angle">
+<ANCHOR id="gst-plugins-bad-plugins-twirl.see-also" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-twirl.html#gst-plugins-bad-plugins-twirl.see-also">
 <ANCHOR id="gst-plugins-bad-plugins-videoparse" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-videoparse.html">
 <ANCHOR id="gst-plugins-bad-plugins-videoparse.properties" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-videoparse.html#gst-plugins-bad-plugins-videoparse.properties">
 <ANCHOR id="GstVideoParse" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-videoparse.html#GstVideoParse">
@@ -1070,6 +989,9 @@
 <ANCHOR id="GstVideoParse--width" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-videoparse.html#GstVideoParse--width">
 <ANCHOR id="GstVideoParse--interlaced" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-videoparse.html#GstVideoParse--interlaced">
 <ANCHOR id="GstVideoParse--top-field-first" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-videoparse.html#GstVideoParse--top-field-first">
+<ANCHOR id="GstVideoParse--framesize" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-videoparse.html#GstVideoParse--framesize">
+<ANCHOR id="GstVideoParse--offsets" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-videoparse.html#GstVideoParse--offsets">
+<ANCHOR id="GstVideoParse--strides" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-videoparse.html#GstVideoParse--strides">
 <ANCHOR id="gst-plugins-bad-plugins-waterripple" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-waterripple.html">
 <ANCHOR id="gst-plugins-bad-plugins-waterripple.properties" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-waterripple.html#gst-plugins-bad-plugins-waterripple.properties">
 <ANCHOR id="GstWaterRipple" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-waterripple.html#GstWaterRipple">
@@ -1083,6 +1005,7 @@
 <ANCHOR id="GstWaterRipple--amplitude" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-waterripple.html#GstWaterRipple--amplitude">
 <ANCHOR id="GstWaterRipple--phase" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-waterripple.html#GstWaterRipple--phase">
 <ANCHOR id="GstWaterRipple--wavelength" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-waterripple.html#GstWaterRipple--wavelength">
+<ANCHOR id="gst-plugins-bad-plugins-waterripple.see-also" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-waterripple.html#gst-plugins-bad-plugins-waterripple.see-also">
 <ANCHOR id="gst-plugins-bad-plugins-zbar" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-zbar.html">
 <ANCHOR id="gst-plugins-bad-plugins-zbar.properties" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-zbar.html#gst-plugins-bad-plugins-zbar.properties">
 <ANCHOR id="GstZBar" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-zbar.html#GstZBar">
@@ -1170,8 +1093,6 @@
 <ANCHOR id="plugin-gsm" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-plugin-gsm.html#plugin-gsm">
 <ANCHOR id="gst-plugins-bad-plugins-plugin-jpegformat" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-plugin-jpegformat.html">
 <ANCHOR id="plugin-jpegformat" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-plugin-jpegformat.html#plugin-jpegformat">
-<ANCHOR id="gst-plugins-bad-plugins-plugin-liveadder" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-plugin-liveadder.html">
-<ANCHOR id="plugin-liveadder" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-plugin-liveadder.html#plugin-liveadder">
 <ANCHOR id="gst-plugins-bad-plugins-plugin-mimic" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-plugin-mimic.html">
 <ANCHOR id="plugin-mimic" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-plugin-mimic.html#plugin-mimic">
 <ANCHOR id="gst-plugins-bad-plugins-plugin-mms" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-plugin-mms.html">
@@ -1194,8 +1115,6 @@
 <ANCHOR id="plugin-openal" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-plugin-openal.html#plugin-openal">
 <ANCHOR id="gst-plugins-bad-plugins-plugin-opencv" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-plugin-opencv.html">
 <ANCHOR id="plugin-opencv" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-plugin-opencv.html#plugin-opencv">
-<ANCHOR id="gst-plugins-bad-plugins-plugin-opus" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-plugin-opus.html">
-<ANCHOR id="plugin-opus" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-plugin-opus.html#plugin-opus">
 <ANCHOR id="gst-plugins-bad-plugins-plugin-pcapparse" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-plugin-pcapparse.html">
 <ANCHOR id="plugin-pcapparse" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-plugin-pcapparse.html#plugin-pcapparse">
 <ANCHOR id="gst-plugins-bad-plugins-plugin-rawparse" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-plugin-rawparse.html">
diff --git a/docs/plugins/inspect/plugin-accurip.xml b/docs/plugins/inspect/plugin-accurip.xml
index 9f557b6..4d1c7e5 100644
--- a/docs/plugins/inspect/plugin-accurip.xml
+++ b/docs/plugins/inspect/plugin-accurip.xml
@@ -3,7 +3,7 @@
   <description>Computes an AccurateRip CRC</description>
   <filename>../../gst/accurip/.libs/libgstaccurip.so</filename>
   <basename>libgstaccurip.so</basename>
-  <version>1.6.3</version>
+  <version>1.7.91</version>
   <license>LGPL</license>
   <source>gst-plugins-bad</source>
   <package>GStreamer Bad Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-adpcmdec.xml b/docs/plugins/inspect/plugin-adpcmdec.xml
index 513822c..a36713c 100644
--- a/docs/plugins/inspect/plugin-adpcmdec.xml
+++ b/docs/plugins/inspect/plugin-adpcmdec.xml
@@ -3,7 +3,7 @@
   <description>ADPCM decoder</description>
   <filename>../../gst/adpcmdec/.libs/libgstadpcmdec.so</filename>
   <basename>libgstadpcmdec.so</basename>
-  <version>1.6.3</version>
+  <version>1.7.91</version>
   <license>LGPL</license>
   <source>gst-plugins-bad</source>
   <package>GStreamer Bad Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-adpcmenc.xml b/docs/plugins/inspect/plugin-adpcmenc.xml
index 10a9ba8..b384a8e 100644
--- a/docs/plugins/inspect/plugin-adpcmenc.xml
+++ b/docs/plugins/inspect/plugin-adpcmenc.xml
@@ -3,7 +3,7 @@
   <description>ADPCM encoder</description>
   <filename>../../gst/adpcmenc/.libs/libgstadpcmenc.so</filename>
   <basename>libgstadpcmenc.so</basename>
-  <version>1.6.3</version>
+  <version>1.7.91</version>
   <license>LGPL</license>
   <source>gst-plugins-bad</source>
   <package>GStreamer Bad Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-aiff.xml b/docs/plugins/inspect/plugin-aiff.xml
index 43d9fab..2df2788 100644
--- a/docs/plugins/inspect/plugin-aiff.xml
+++ b/docs/plugins/inspect/plugin-aiff.xml
@@ -3,7 +3,7 @@
   <description>Create and parse Audio Interchange File Format (AIFF) files</description>
   <filename>../../gst/aiff/.libs/libgstaiff.so</filename>
   <basename>libgstaiff.so</basename>
-  <version>1.6.3</version>
+  <version>1.7.91</version>
   <license>LGPL</license>
   <source>gst-plugins-bad</source>
   <package>GStreamer Bad Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-androidcamera.xml b/docs/plugins/inspect/plugin-androidcamera.xml
new file mode 100644
index 0000000..c9417ca
--- /dev/null
+++ b/docs/plugins/inspect/plugin-androidcamera.xml
@@ -0,0 +1,28 @@
+<plugin>
+  <name>androidcamera</name>
+  <description>Capture from Android cameras</description>
+  <filename>../../sys/androidcamera/.libs/libgstandroidcamera.so</filename>
+  <basename>libgstandroidcamera.so</basename>
+  <version>0.10.22.1</version>
+  <license>LGPL</license>
+  <source>gst-plugins-bad</source>
+  <package>GStreamer Bad Plug-ins git</package>
+  <origin>Unknown package origin</origin>
+  <elements>
+    <element>
+      <name>ahcsrc</name>
+      <longname>Android Camera Source</longname>
+      <class>Source/Video</class>
+      <description>Reads frames from android.hardware.Camera class into buffers</description>
+      <author>Youness Alaoui &lt;youness.alaoui@collabora.co.uk&gt;</author>
+      <pads>
+        <caps>
+          <name>src</name>
+          <direction>source</direction>
+          <presence>always</presence>
+          <details>video/x-raw-yuv, format=(fourcc) { YV12 , YUY2 , NV21 , NV16 }, width=(int) [ 1, 2147483647 ], height=(int) [ 1, 2147483647 ], framerate=(fraction) [ 0/1, 2147483647/1 ]; video/x-raw-rgb, bpp=(int)16, depth=(int)16, red_mask=(int)63488, green_mask=(int)2016, blue_mask=(int)31, width=(int) [ 1, 2147483647 ], height=(int) [ 1, 2147483647 ], framerate=(fraction) [ 0/1, 2147483647/1 ] </details>
+        </caps>
+      </pads>
+    </element>
+  </elements>
+</plugin>
diff --git a/docs/plugins/inspect/plugin-asfmux.xml b/docs/plugins/inspect/plugin-asfmux.xml
index a518e45..e7ffb86 100644
--- a/docs/plugins/inspect/plugin-asfmux.xml
+++ b/docs/plugins/inspect/plugin-asfmux.xml
@@ -3,7 +3,7 @@
   <description>ASF Muxer Plugin</description>
   <filename>../../gst/asfmux/.libs/libgstasfmux.so</filename>
   <basename>libgstasfmux.so</basename>
-  <version>1.6.3</version>
+  <version>1.7.91</version>
   <license>LGPL</license>
   <source>gst-plugins-bad</source>
   <package>GStreamer Bad Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-assrender.xml b/docs/plugins/inspect/plugin-assrender.xml
index 633615b..836f50f 100644
--- a/docs/plugins/inspect/plugin-assrender.xml
+++ b/docs/plugins/inspect/plugin-assrender.xml
@@ -3,7 +3,7 @@
   <description>ASS/SSA subtitle renderer</description>
   <filename>../../ext/assrender/.libs/libgstassrender.so</filename>
   <basename>libgstassrender.so</basename>
-  <version>1.6.3</version>
+  <version>1.7.91</version>
   <license>LGPL</license>
   <source>gst-plugins-bad</source>
   <package>GStreamer Bad Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-audiofxbad.xml b/docs/plugins/inspect/plugin-audiofxbad.xml
index 82f6e24..3f13484 100644
--- a/docs/plugins/inspect/plugin-audiofxbad.xml
+++ b/docs/plugins/inspect/plugin-audiofxbad.xml
@@ -3,7 +3,7 @@
   <description>Audio filters from gst-plugins-bad</description>
   <filename>../../gst/audiofxbad/.libs/libgstaudiofxbad.so</filename>
   <basename>libgstaudiofxbad.so</basename>
-  <version>1.6.3</version>
+  <version>1.7.91</version>
   <license>LGPL</license>
   <source>gst-plugins-bad</source>
   <package>GStreamer Bad Plug-ins</package>
diff --git a/docs/plugins/inspect/plugin-audiomixer.xml b/docs/plugins/inspect/plugin-audiomixer.xml
index a45dbbc..2c74429 100644
--- a/docs/plugins/inspect/plugin-audiomixer.xml
+++ b/docs/plugins/inspect/plugin-audiomixer.xml
@@ -3,7 +3,7 @@
   <description>Mixes multiple audio streams</description>
   <filename>../../gst/audiomixer/.libs/libgstaudiomixer.so</filename>
   <basename>libgstaudiomixer.so</basename>
-  <version>1.6.3</version>
+  <version>1.7.91</version>
   <license>LGPL</license>
   <source>gst-plugins-bad</source>
   <package>GStreamer Bad Plug-ins source release</package>
@@ -51,5 +51,26 @@
         </caps>
       </pads>
     </element>
+    <element>
+      <name>liveadder</name>
+      <longname>AudioMixer</longname>
+      <class>Generic/Audio</class>
+      <description>Mixes multiple audio streams</description>
+      <author>Sebastian Dröge &lt;sebastian@centricular.com&gt;</author>
+      <pads>
+        <caps>
+          <name>sink_%u</name>
+          <direction>sink</direction>
+          <presence>request</presence>
+          <details>audio/x-raw, format=(string){ S32LE, U32LE, S16LE, U16LE, S8, U8, F32LE, F64LE }, rate=(int)[ 1, 2147483647 ], channels=(int)[ 1, 2147483647 ], layout=(string){ interleaved, non-interleaved }</details>
+        </caps>
+        <caps>
+          <name>src</name>
+          <direction>source</direction>
+          <presence>always</presence>
+          <details>audio/x-raw, format=(string){ S32LE, U32LE, S16LE, U16LE, S8, U8, F32LE, F64LE }, rate=(int)[ 1, 2147483647 ], channels=(int)[ 1, 2147483647 ], layout=(string){ interleaved, non-interleaved }</details>
+        </caps>
+      </pads>
+    </element>
   </elements>
 </plugin>
\ No newline at end of file
diff --git a/docs/plugins/inspect/plugin-audiovisualizers.xml b/docs/plugins/inspect/plugin-audiovisualizers.xml
index 82a040c..6a1879d 100644
--- a/docs/plugins/inspect/plugin-audiovisualizers.xml
+++ b/docs/plugins/inspect/plugin-audiovisualizers.xml
@@ -3,7 +3,7 @@
   <description>Creates video visualizations of audio input</description>
   <filename>../../gst/audiovisualizers/.libs/libgstaudiovisualizers.so</filename>
   <basename>libgstaudiovisualizers.so</basename>
-  <version>1.6.3</version>
+  <version>1.7.91</version>
   <license>LGPL</license>
   <source>gst-plugins-bad</source>
   <package>GStreamer Bad Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-autoconvert.xml b/docs/plugins/inspect/plugin-autoconvert.xml
index d01476d..aff2633 100644
--- a/docs/plugins/inspect/plugin-autoconvert.xml
+++ b/docs/plugins/inspect/plugin-autoconvert.xml
@@ -3,7 +3,7 @@
   <description>Selects convertor element based on caps</description>
   <filename>../../gst/autoconvert/.libs/libgstautoconvert.so</filename>
   <basename>libgstautoconvert.so</basename>
-  <version>1.6.3</version>
+  <version>1.7.91</version>
   <license>LGPL</license>
   <source>gst-plugins-bad</source>
   <package>GStreamer Bad Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-bayer.xml b/docs/plugins/inspect/plugin-bayer.xml
index 2d8dbff..fa49e31 100644
--- a/docs/plugins/inspect/plugin-bayer.xml
+++ b/docs/plugins/inspect/plugin-bayer.xml
@@ -3,7 +3,7 @@
   <description>Elements to convert Bayer images</description>
   <filename>../../gst/bayer/.libs/libgstbayer.so</filename>
   <basename>libgstbayer.so</basename>
-  <version>1.6.3</version>
+  <version>1.7.91</version>
   <license>LGPL</license>
   <source>gst-plugins-bad</source>
   <package>GStreamer Bad Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-bluez.xml b/docs/plugins/inspect/plugin-bluez.xml
index 62dfe01..d8a1709 100644
--- a/docs/plugins/inspect/plugin-bluez.xml
+++ b/docs/plugins/inspect/plugin-bluez.xml
@@ -3,7 +3,7 @@
   <description>Bluez-based bluetooth support</description>
   <filename>../../sys/bluez/.libs/libgstbluez.so</filename>
   <basename>libgstbluez.so</basename>
-  <version>1.6.3</version>
+  <version>1.7.91</version>
   <license>LGPL</license>
   <source>gst-plugins-bad</source>
   <package>GStreamer Bad Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-bz2.xml b/docs/plugins/inspect/plugin-bz2.xml
index 0347a34..c071bf8 100644
--- a/docs/plugins/inspect/plugin-bz2.xml
+++ b/docs/plugins/inspect/plugin-bz2.xml
@@ -3,7 +3,7 @@
   <description>Compress or decompress streams</description>
   <filename>../../ext/bz2/.libs/libgstbz2.so</filename>
   <basename>libgstbz2.so</basename>
-  <version>1.6.3</version>
+  <version>1.7.91</version>
   <license>LGPL</license>
   <source>gst-plugins-bad</source>
   <package>GStreamer Bad Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-camerabin.xml b/docs/plugins/inspect/plugin-camerabin.xml
index b9d5eb8..9e9bb4a 100644
--- a/docs/plugins/inspect/plugin-camerabin.xml
+++ b/docs/plugins/inspect/plugin-camerabin.xml
@@ -3,7 +3,7 @@
   <description>Take image snapshots and record movies from camera</description>
   <filename>../../gst/camerabin2/.libs/libgstcamerabin2.so</filename>
   <basename>libgstcamerabin2.so</basename>
-  <version>1.6.3</version>
+  <version>1.7.91</version>
   <license>LGPL</license>
   <source>gst-plugins-bad</source>
   <package>GStreamer Bad Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-chromaprint.xml b/docs/plugins/inspect/plugin-chromaprint.xml
index 6249ecc..e232efd 100644
--- a/docs/plugins/inspect/plugin-chromaprint.xml
+++ b/docs/plugins/inspect/plugin-chromaprint.xml
@@ -3,7 +3,7 @@
   <description>Calculate Chromaprint fingerprint from audio files</description>
   <filename>../../ext/chromaprint/.libs/libgstchromaprint.so</filename>
   <basename>libgstchromaprint.so</basename>
-  <version>1.6.3</version>
+  <version>1.7.91</version>
   <license>LGPL</license>
   <source>gst-plugins-bad</source>
   <package>GStreamer Bad Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-coloreffects.xml b/docs/plugins/inspect/plugin-coloreffects.xml
index 20b5af4..631beb7 100644
--- a/docs/plugins/inspect/plugin-coloreffects.xml
+++ b/docs/plugins/inspect/plugin-coloreffects.xml
@@ -3,7 +3,7 @@
   <description>Color Look-up Table filters</description>
   <filename>../../gst/coloreffects/.libs/libgstcoloreffects.so</filename>
   <basename>libgstcoloreffects.so</basename>
-  <version>1.6.3</version>
+  <version>1.7.91</version>
   <license>LGPL</license>
   <source>gst-plugins-bad</source>
   <package>GStreamer Bad Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-compositor.xml b/docs/plugins/inspect/plugin-compositor.xml
index 0648edc..b6c4746 100644
--- a/docs/plugins/inspect/plugin-compositor.xml
+++ b/docs/plugins/inspect/plugin-compositor.xml
@@ -3,7 +3,7 @@
   <description>Compositor</description>
   <filename>../../gst/compositor/.libs/libgstcompositor.so</filename>
   <basename>libgstcompositor.so</basename>
-  <version>1.6.3</version>
+  <version>1.7.91</version>
   <license>LGPL</license>
   <source>gst-plugins-bad</source>
   <package>GStreamer Bad Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-curl.xml b/docs/plugins/inspect/plugin-curl.xml
index 8fd7072..3122702 100644
--- a/docs/plugins/inspect/plugin-curl.xml
+++ b/docs/plugins/inspect/plugin-curl.xml
@@ -3,7 +3,7 @@
   <description>libcurl-based elements</description>
   <filename>../../ext/curl/.libs/libgstcurl.so</filename>
   <basename>libgstcurl.so</basename>
-  <version>1.6.3</version>
+  <version>1.7.91</version>
   <license>LGPL</license>
   <source>gst-plugins-bad</source>
   <package>GStreamer Bad Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-dashdemux.xml b/docs/plugins/inspect/plugin-dashdemux.xml
index 3b39340..fe92114 100644
--- a/docs/plugins/inspect/plugin-dashdemux.xml
+++ b/docs/plugins/inspect/plugin-dashdemux.xml
@@ -3,7 +3,7 @@
   <description>DASH demuxer plugin</description>
   <filename>../../ext/dash/.libs/libgstdashdemux.so</filename>
   <basename>libgstdashdemux.so</basename>
-  <version>1.6.3</version>
+  <version>1.7.91</version>
   <license>LGPL</license>
   <source>gst-plugins-bad</source>
   <package>GStreamer Bad Plug-ins</package>
@@ -31,6 +31,12 @@
           <details>ANY</details>
         </caps>
         <caps>
+          <name>subtitle_%02u</name>
+          <direction>source</direction>
+          <presence>sometimes</presence>
+          <details>ANY</details>
+        </caps>
+        <caps>
           <name>video_%02u</name>
           <direction>source</direction>
           <presence>sometimes</presence>
diff --git a/docs/plugins/inspect/plugin-dataurisrc.xml b/docs/plugins/inspect/plugin-dataurisrc.xml
index 30f0ff9..5b3233e 100644
--- a/docs/plugins/inspect/plugin-dataurisrc.xml
+++ b/docs/plugins/inspect/plugin-dataurisrc.xml
@@ -3,7 +3,7 @@
   <description>data: URI source</description>
   <filename>../../gst/dataurisrc/.libs/libgstdataurisrc.so</filename>
   <basename>libgstdataurisrc.so</basename>
-  <version>1.6.3</version>
+  <version>1.7.91</version>
   <license>LGPL</license>
   <source>gst-plugins-bad</source>
   <package>GStreamer Bad Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-debugutilsbad.xml b/docs/plugins/inspect/plugin-debugutilsbad.xml
index 00b35ed..5546248 100644
--- a/docs/plugins/inspect/plugin-debugutilsbad.xml
+++ b/docs/plugins/inspect/plugin-debugutilsbad.xml
@@ -3,7 +3,7 @@
   <description>Collection of elements that may or may not be useful for debugging</description>
   <filename>../../gst/debugutils/.libs/libgstdebugutilsbad.so</filename>
   <basename>libgstdebugutilsbad.so</basename>
-  <version>1.6.3</version>
+  <version>1.7.91</version>
   <license>LGPL</license>
   <source>gst-plugins-bad</source>
   <package>GStreamer Bad Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-decklink.xml b/docs/plugins/inspect/plugin-decklink.xml
index 3ffbb2e..69befa6 100644
--- a/docs/plugins/inspect/plugin-decklink.xml
+++ b/docs/plugins/inspect/plugin-decklink.xml
@@ -3,7 +3,7 @@
   <description>Blackmagic Decklink plugin</description>
   <filename>../../sys/decklink/.libs/libgstdecklink.so</filename>
   <basename>libgstdecklink.so</basename>
-  <version>1.6.3</version>
+  <version>1.7.91</version>
   <license>LGPL</license>
   <source>gst-plugins-bad</source>
   <package>GStreamer Bad Plug-ins</package>
@@ -50,7 +50,7 @@
           <name>sink</name>
           <direction>sink</direction>
           <presence>always</presence>
-          <details>video/x-raw, format=(string)UYVY, width=(int)720, height=(int)486, framerate=(fraction)[ 0/1, 2147483647/1 ], interlace-mode=(string)interleaved, pixel-aspect-ratio=(fraction)10/11, colorimetry=(string)bt601, chroma-site=(string)mpeg2; video/x-raw, format=(string)UYVY, width=(int)720, height=(int)486, framerate=(fraction)[ 0/1, 2147483647/1 ], interlace-mode=(string)interleaved, pixel-aspect-ratio=(fraction)10/11, colorimetry=(string)bt601, chroma-site=(string)mpeg2; video/x-raw, format=(string)UYVY, width=(int)720, height=(int)576, framerate=(fraction)[ 0/1, 2147483647/1 ], interlace-mode=(string)interleaved, pixel-aspect-ratio=(fraction)12/11, colorimetry=(string)bt601, chroma-site=(string)mpeg2; video/x-raw, format=(string)UYVY, width=(int)720, height=(int)486, framerate=(fraction)[ 0/1, 2147483647/1 ], interlace-mode=(string)progressive, pixel-aspect-ratio=(fraction)10/11, colorimetry=(string)bt601, chroma-site=(string)mpeg2; video/x-raw, format=(string)UYVY, width=(int)720, height=(int)576, framerate=(fraction)[ 0/1, 2147483647/1 ], interlace-mode=(string)progressive, pixel-aspect-ratio=(fraction)12/11, colorimetry=(string)bt601, chroma-site=(string)mpeg2; video/x-raw, format=(string)UYVY, width=(int)1920, height=(int)1080, framerate=(fraction)[ 0/1, 2147483647/1 ], interlace-mode=(string)progressive, pixel-aspect-ratio=(fraction)1/1, colorimetry=(string)bt709, chroma-site=(string)mpeg2; video/x-raw, format=(string)UYVY, width=(int)1920, height=(int)1080, framerate=(fraction)[ 0/1, 2147483647/1 ], interlace-mode=(string)progressive, pixel-aspect-ratio=(fraction)1/1, colorimetry=(string)bt709, chroma-site=(string)mpeg2; video/x-raw, format=(string)UYVY, width=(int)1920, height=(int)1080, framerate=(fraction)[ 0/1, 2147483647/1 ], interlace-mode=(string)progressive, pixel-aspect-ratio=(fraction)1/1, colorimetry=(string)bt709, chroma-site=(string)mpeg2; video/x-raw, format=(string)UYVY, width=(int)1920, height=(int)1080, framerate=(fraction)[ 0/1, 2147483647/1 ], interlace-mode=(string)progressive, pixel-aspect-ratio=(fraction)1/1, colorimetry=(string)bt709, chroma-site=(string)mpeg2; video/x-raw, format=(string)UYVY, width=(int)1920, height=(int)1080, framerate=(fraction)[ 0/1, 2147483647/1 ], interlace-mode=(string)progressive, pixel-aspect-ratio=(fraction)1/1, colorimetry=(string)bt709, chroma-site=(string)mpeg2; video/x-raw, format=(string)UYVY, width=(int)1920, height=(int)1080, framerate=(fraction)[ 0/1, 2147483647/1 ], interlace-mode=(string)interleaved, pixel-aspect-ratio=(fraction)1/1, colorimetry=(string)bt709, chroma-site=(string)mpeg2; video/x-raw, format=(string)UYVY, width=(int)1920, height=(int)1080, framerate=(fraction)[ 0/1, 2147483647/1 ], interlace-mode=(string)interleaved, pixel-aspect-ratio=(fraction)1/1, colorimetry=(string)bt709, chroma-site=(string)mpeg2; video/x-raw, format=(string)UYVY, width=(int)1920, height=(int)1080, framerate=(fraction)[ 0/1, 2147483647/1 ], interlace-mode=(string)interleaved, pixel-aspect-ratio=(fraction)1/1, colorimetry=(string)bt709, chroma-site=(string)mpeg2; video/x-raw, format=(string)UYVY, width=(int)1920, height=(int)1080, framerate=(fraction)[ 0/1, 2147483647/1 ], interlace-mode=(string)progressive, pixel-aspect-ratio=(fraction)1/1, colorimetry=(string)bt709, chroma-site=(string)mpeg2; video/x-raw, format=(string)UYVY, width=(int)1920, height=(int)1080, framerate=(fraction)[ 0/1, 2147483647/1 ], interlace-mode=(string)progressive, pixel-aspect-ratio=(fraction)1/1, colorimetry=(string)bt709, chroma-site=(string)mpeg2; video/x-raw, format=(string)UYVY, width=(int)1920, height=(int)1080, framerate=(fraction)[ 0/1, 2147483647/1 ], interlace-mode=(string)progressive, pixel-aspect-ratio=(fraction)1/1, colorimetry=(string)bt709, chroma-site=(string)mpeg2; video/x-raw, format=(string)UYVY, width=(int)1280, height=(int)720, framerate=(fraction)[ 0/1, 2147483647/1 ], interlace-mode=(string)progressive, pixel-aspect-ratio=(fraction)1/1, colorimetry=(string)bt709, chroma-site=(string)mpeg2; video/x-raw, format=(string)UYVY, width=(int)1280, height=(int)720, framerate=(fraction)[ 0/1, 2147483647/1 ], interlace-mode=(string)progressive, pixel-aspect-ratio=(fraction)1/1, colorimetry=(string)bt709, chroma-site=(string)mpeg2; video/x-raw, format=(string)UYVY, width=(int)1280, height=(int)720, framerate=(fraction)[ 0/1, 2147483647/1 ], interlace-mode=(string)progressive, pixel-aspect-ratio=(fraction)1/1, colorimetry=(string)bt709, chroma-site=(string)mpeg2; video/x-raw, format=(string)UYVY, width=(int)2048, height=(int)1556, framerate=(fraction)[ 0/1, 2147483647/1 ], interlace-mode=(string)progressive, pixel-aspect-ratio=(fraction)1/1, colorimetry=(string)bt709, chroma-site=(string)mpeg2; video/x-raw, format=(string)UYVY, width=(int)2048, height=(int)1556, framerate=(fraction)[ 0/1, 2147483647/1 ], interlace-mode=(string)progressive, pixel-aspect-ratio=(fraction)1/1, colorimetry=(string)bt709, chroma-site=(string)mpeg2; video/x-raw, format=(string)UYVY, width=(int)2048, height=(int)1556, framerate=(fraction)[ 0/1, 2147483647/1 ], interlace-mode=(string)progressive, pixel-aspect-ratio=(fraction)1/1, colorimetry=(string)bt709, chroma-site=(string)mpeg2; video/x-raw, format=(string)UYVY, width=(int)3840, height=(int)2160, framerate=(fraction)[ 0/1, 2147483647/1 ], interlace-mode=(string)progressive, pixel-aspect-ratio=(fraction)1/1, colorimetry=(string)bt2020, chroma-site=(string)mpeg2; video/x-raw, format=(string)UYVY, width=(int)3840, height=(int)2160, framerate=(fraction)[ 0/1, 2147483647/1 ], interlace-mode=(string)progressive, pixel-aspect-ratio=(fraction)1/1, colorimetry=(string)bt2020, chroma-site=(string)mpeg2; video/x-raw, format=(string)UYVY, width=(int)3840, height=(int)2160, framerate=(fraction)[ 0/1, 2147483647/1 ], interlace-mode=(string)progressive, pixel-aspect-ratio=(fraction)1/1, colorimetry=(string)bt2020, chroma-site=(string)mpeg2; video/x-raw, format=(string)UYVY, width=(int)3840, height=(int)2160, framerate=(fraction)[ 0/1, 2147483647/1 ], interlace-mode=(string)progressive, pixel-aspect-ratio=(fraction)1/1, colorimetry=(string)bt2020, chroma-site=(string)mpeg2; video/x-raw, format=(string)UYVY, width=(int)3840, height=(int)2160, framerate=(fraction)[ 0/1, 2147483647/1 ], interlace-mode=(string)progressive, pixel-aspect-ratio=(fraction)1/1, colorimetry=(string)bt2020, chroma-site=(string)mpeg2; video/x-raw, format=(string)UYVY, width=(int)3840, height=(int)2160, framerate=(fraction)[ 0/1, 2147483647/1 ], interlace-mode=(string)progressive, pixel-aspect-ratio=(fraction)1/1, colorimetry=(string)bt2020, chroma-site=(string)mpeg2; video/x-raw, format=(string)UYVY, width=(int)3840, height=(int)2160, framerate=(fraction)[ 0/1, 2147483647/1 ], interlace-mode=(string)progressive, pixel-aspect-ratio=(fraction)1/1, colorimetry=(string)bt2020, chroma-site=(string)mpeg2; video/x-raw, format=(string)UYVY, width=(int)3840, height=(int)2160, framerate=(fraction)[ 0/1, 2147483647/1 ], interlace-mode=(string)progressive, pixel-aspect-ratio=(fraction)1/1, colorimetry=(string)bt2020, chroma-site=(string)mpeg2</details>
+          <details>video/x-raw, width=(int)720, height=(int)486, pixel-aspect-ratio=(fraction)10/11, interlace-mode=(string)interleaved, framerate=(fraction)[ 0/1, 2147483647/1 ], format=(string)UYVY, colorimetry=(string)bt601, chroma-site=(string)mpeg2; video/x-raw, width=(int)720, height=(int)486, pixel-aspect-ratio=(fraction)10/11, interlace-mode=(string)interleaved, framerate=(fraction)[ 0/1, 2147483647/1 ], format=(string)ARGB; video/x-raw, width=(int)720, height=(int)486, pixel-aspect-ratio=(fraction)10/11, interlace-mode=(string)interleaved, framerate=(fraction)[ 0/1, 2147483647/1 ], format=(string)UYVY, colorimetry=(string)bt601, chroma-site=(string)mpeg2; video/x-raw, width=(int)720, height=(int)486, pixel-aspect-ratio=(fraction)10/11, interlace-mode=(string)interleaved, framerate=(fraction)[ 0/1, 2147483647/1 ], format=(string)ARGB; video/x-raw, width=(int)720, height=(int)576, pixel-aspect-ratio=(fraction)12/11, interlace-mode=(string)interleaved, framerate=(fraction)[ 0/1, 2147483647/1 ], format=(string)UYVY, colorimetry=(string)bt601, chroma-site=(string)mpeg2; video/x-raw, width=(int)720, height=(int)576, pixel-aspect-ratio=(fraction)12/11, interlace-mode=(string)interleaved, framerate=(fraction)[ 0/1, 2147483647/1 ], format=(string)ARGB; video/x-raw, width=(int)720, height=(int)486, pixel-aspect-ratio=(fraction)10/11, interlace-mode=(string)progressive, framerate=(fraction)[ 0/1, 2147483647/1 ], format=(string)UYVY, colorimetry=(string)bt601, chroma-site=(string)mpeg2; video/x-raw, width=(int)720, height=(int)486, pixel-aspect-ratio=(fraction)10/11, interlace-mode=(string)progressive, framerate=(fraction)[ 0/1, 2147483647/1 ], format=(string)ARGB; video/x-raw, width=(int)720, height=(int)576, pixel-aspect-ratio=(fraction)12/11, interlace-mode=(string)progressive, framerate=(fraction)[ 0/1, 2147483647/1 ], format=(string)UYVY, colorimetry=(string)bt601, chroma-site=(string)mpeg2; video/x-raw, width=(int)720, height=(int)576, pixel-aspect-ratio=(fraction)12/11, interlace-mode=(string)progressive, framerate=(fraction)[ 0/1, 2147483647/1 ], format=(string)ARGB; video/x-raw, width=(int)1920, height=(int)1080, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive, framerate=(fraction)[ 0/1, 2147483647/1 ], format=(string)UYVY, colorimetry=(string)bt709, chroma-site=(string)mpeg2; video/x-raw, width=(int)1920, height=(int)1080, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive, framerate=(fraction)[ 0/1, 2147483647/1 ], format=(string)ARGB; video/x-raw, width=(int)1920, height=(int)1080, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive, framerate=(fraction)[ 0/1, 2147483647/1 ], format=(string)UYVY, colorimetry=(string)bt709, chroma-site=(string)mpeg2; video/x-raw, width=(int)1920, height=(int)1080, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive, framerate=(fraction)[ 0/1, 2147483647/1 ], format=(string)ARGB; video/x-raw, width=(int)1920, height=(int)1080, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive, framerate=(fraction)[ 0/1, 2147483647/1 ], format=(string)UYVY, colorimetry=(string)bt709, chroma-site=(string)mpeg2; video/x-raw, width=(int)1920, height=(int)1080, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive, framerate=(fraction)[ 0/1, 2147483647/1 ], format=(string)ARGB; video/x-raw, width=(int)1920, height=(int)1080, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive, framerate=(fraction)[ 0/1, 2147483647/1 ], format=(string)UYVY, colorimetry=(string)bt709, chroma-site=(string)mpeg2; video/x-raw, width=(int)1920, height=(int)1080, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive, framerate=(fraction)[ 0/1, 2147483647/1 ], format=(string)ARGB; video/x-raw, width=(int)1920, height=(int)1080, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive, framerate=(fraction)[ 0/1, 2147483647/1 ], format=(string)UYVY, colorimetry=(string)bt709, chroma-site=(string)mpeg2; video/x-raw, width=(int)1920, height=(int)1080, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive, framerate=(fraction)[ 0/1, 2147483647/1 ], format=(string)ARGB; video/x-raw, width=(int)1920, height=(int)1080, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)interleaved, framerate=(fraction)[ 0/1, 2147483647/1 ], format=(string)UYVY, colorimetry=(string)bt709, chroma-site=(string)mpeg2; video/x-raw, width=(int)1920, height=(int)1080, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)interleaved, framerate=(fraction)[ 0/1, 2147483647/1 ], format=(string)ARGB; video/x-raw, width=(int)1920, height=(int)1080, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)interleaved, framerate=(fraction)[ 0/1, 2147483647/1 ], format=(string)UYVY, colorimetry=(string)bt709, chroma-site=(string)mpeg2; video/x-raw, width=(int)1920, height=(int)1080, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)interleaved, framerate=(fraction)[ 0/1, 2147483647/1 ], format=(string)ARGB; video/x-raw, width=(int)1920, height=(int)1080, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)interleaved, framerate=(fraction)[ 0/1, 2147483647/1 ], format=(string)UYVY, colorimetry=(string)bt709, chroma-site=(string)mpeg2; video/x-raw, width=(int)1920, height=(int)1080, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)interleaved, framerate=(fraction)[ 0/1, 2147483647/1 ], format=(string)ARGB; video/x-raw, width=(int)1920, height=(int)1080, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive, framerate=(fraction)[ 0/1, 2147483647/1 ], format=(string)UYVY, colorimetry=(string)bt709, chroma-site=(string)mpeg2; video/x-raw, width=(int)1920, height=(int)1080, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive, framerate=(fraction)[ 0/1, 2147483647/1 ], format=(string)ARGB; video/x-raw, width=(int)1920, height=(int)1080, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive, framerate=(fraction)[ 0/1, 2147483647/1 ], format=(string)UYVY, colorimetry=(string)bt709, chroma-site=(string)mpeg2; video/x-raw, width=(int)1920, height=(int)1080, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive, framerate=(fraction)[ 0/1, 2147483647/1 ], format=(string)ARGB; video/x-raw, width=(int)1920, height=(int)1080, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive, framerate=(fraction)[ 0/1, 2147483647/1 ], format=(string)UYVY, colorimetry=(string)bt709, chroma-site=(string)mpeg2; video/x-raw, width=(int)1920, height=(int)1080, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive, framerate=(fraction)[ 0/1, 2147483647/1 ], format=(string)ARGB; video/x-raw, width=(int)1280, height=(int)720, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive, framerate=(fraction)[ 0/1, 2147483647/1 ], format=(string)UYVY, colorimetry=(string)bt709, chroma-site=(string)mpeg2; video/x-raw, width=(int)1280, height=(int)720, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive, framerate=(fraction)[ 0/1, 2147483647/1 ], format=(string)ARGB; video/x-raw, width=(int)1280, height=(int)720, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive, framerate=(fraction)[ 0/1, 2147483647/1 ], format=(string)UYVY, colorimetry=(string)bt709, chroma-site=(string)mpeg2; video/x-raw, width=(int)1280, height=(int)720, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive, framerate=(fraction)[ 0/1, 2147483647/1 ], format=(string)ARGB; video/x-raw, width=(int)1280, height=(int)720, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive, framerate=(fraction)[ 0/1, 2147483647/1 ], format=(string)UYVY, colorimetry=(string)bt709, chroma-site=(string)mpeg2; video/x-raw, width=(int)1280, height=(int)720, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive, framerate=(fraction)[ 0/1, 2147483647/1 ], format=(string)ARGB; video/x-raw, width=(int)2048, height=(int)1556, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive, framerate=(fraction)[ 0/1, 2147483647/1 ], format=(string)UYVY, colorimetry=(string)bt709, chroma-site=(string)mpeg2; video/x-raw, width=(int)2048, height=(int)1556, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive, framerate=(fraction)[ 0/1, 2147483647/1 ], format=(string)ARGB; video/x-raw, width=(int)2048, height=(int)1556, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive, framerate=(fraction)[ 0/1, 2147483647/1 ], format=(string)UYVY, colorimetry=(string)bt709, chroma-site=(string)mpeg2; video/x-raw, width=(int)2048, height=(int)1556, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive, framerate=(fraction)[ 0/1, 2147483647/1 ], format=(string)ARGB; video/x-raw, width=(int)2048, height=(int)1556, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive, framerate=(fraction)[ 0/1, 2147483647/1 ], format=(string)UYVY, colorimetry=(string)bt709, chroma-site=(string)mpeg2; video/x-raw, width=(int)2048, height=(int)1556, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive, framerate=(fraction)[ 0/1, 2147483647/1 ], format=(string)ARGB; video/x-raw, width=(int)3840, height=(int)2160, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive, framerate=(fraction)[ 0/1, 2147483647/1 ], format=(string)UYVY, colorimetry=(string)bt2020, chroma-site=(string)mpeg2; video/x-raw, width=(int)3840, height=(int)2160, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive, framerate=(fraction)[ 0/1, 2147483647/1 ], format=(string)ARGB; video/x-raw, width=(int)3840, height=(int)2160, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive, framerate=(fraction)[ 0/1, 2147483647/1 ], format=(string)UYVY, colorimetry=(string)bt2020, chroma-site=(string)mpeg2; video/x-raw, width=(int)3840, height=(int)2160, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive, framerate=(fraction)[ 0/1, 2147483647/1 ], format=(string)ARGB; video/x-raw, width=(int)3840, height=(int)2160, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive, framerate=(fraction)[ 0/1, 2147483647/1 ], format=(string)UYVY, colorimetry=(string)bt2020, chroma-site=(string)mpeg2; video/x-raw, width=(int)3840, height=(int)2160, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive, framerate=(fraction)[ 0/1, 2147483647/1 ], format=(string)ARGB; video/x-raw, width=(int)3840, height=(int)2160, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive, framerate=(fraction)[ 0/1, 2147483647/1 ], format=(string)UYVY, colorimetry=(string)bt2020, chroma-site=(string)mpeg2; video/x-raw, width=(int)3840, height=(int)2160, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive, framerate=(fraction)[ 0/1, 2147483647/1 ], format=(string)ARGB; video/x-raw, width=(int)3840, height=(int)2160, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive, framerate=(fraction)[ 0/1, 2147483647/1 ], format=(string)UYVY, colorimetry=(string)bt2020, chroma-site=(string)mpeg2; video/x-raw, width=(int)3840, height=(int)2160, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive, framerate=(fraction)[ 0/1, 2147483647/1 ], format=(string)ARGB; video/x-raw, width=(int)3840, height=(int)2160, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive, framerate=(fraction)[ 0/1, 2147483647/1 ], format=(string)UYVY, colorimetry=(string)bt2020, chroma-site=(string)mpeg2; video/x-raw, width=(int)3840, height=(int)2160, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive, framerate=(fraction)[ 0/1, 2147483647/1 ], format=(string)ARGB; video/x-raw, width=(int)3840, height=(int)2160, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive, framerate=(fraction)[ 0/1, 2147483647/1 ], format=(string)UYVY, colorimetry=(string)bt2020, chroma-site=(string)mpeg2; video/x-raw, width=(int)3840, height=(int)2160, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive, framerate=(fraction)[ 0/1, 2147483647/1 ], format=(string)ARGB; video/x-raw, width=(int)3840, height=(int)2160, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive, framerate=(fraction)[ 0/1, 2147483647/1 ], format=(string)UYVY, colorimetry=(string)bt2020, chroma-site=(string)mpeg2; video/x-raw, width=(int)3840, height=(int)2160, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive, framerate=(fraction)[ 0/1, 2147483647/1 ], format=(string)ARGB</details>
         </caps>
       </pads>
     </element>
@@ -65,7 +65,7 @@
           <name>src</name>
           <direction>source</direction>
           <presence>always</presence>
-          <details>video/x-raw, format=(string)UYVY, width=(int)720, height=(int)486, framerate=(fraction)30000/1001, interlace-mode=(string)interleaved, pixel-aspect-ratio=(fraction)10/11, colorimetry=(string)bt601, chroma-site=(string)mpeg2; video/x-raw, format=(string)UYVY, width=(int)720, height=(int)486, framerate=(fraction)24000/1001, interlace-mode=(string)interleaved, pixel-aspect-ratio=(fraction)10/11, colorimetry=(string)bt601, chroma-site=(string)mpeg2; video/x-raw, format=(string)UYVY, width=(int)720, height=(int)576, framerate=(fraction)25/1, interlace-mode=(string)interleaved, pixel-aspect-ratio=(fraction)12/11, colorimetry=(string)bt601, chroma-site=(string)mpeg2; video/x-raw, format=(string)UYVY, width=(int)720, height=(int)486, framerate=(fraction)30000/1001, interlace-mode=(string)progressive, pixel-aspect-ratio=(fraction)10/11, colorimetry=(string)bt601, chroma-site=(string)mpeg2; video/x-raw, format=(string)UYVY, width=(int)720, height=(int)576, framerate=(fraction)25/1, interlace-mode=(string)progressive, pixel-aspect-ratio=(fraction)12/11, colorimetry=(string)bt601, chroma-site=(string)mpeg2; video/x-raw, format=(string)UYVY, width=(int)1920, height=(int)1080, framerate=(fraction)24000/1001, interlace-mode=(string)progressive, pixel-aspect-ratio=(fraction)1/1, colorimetry=(string)bt709, chroma-site=(string)mpeg2; video/x-raw, format=(string)UYVY, width=(int)1920, height=(int)1080, framerate=(fraction)24/1, interlace-mode=(string)progressive, pixel-aspect-ratio=(fraction)1/1, colorimetry=(string)bt709, chroma-site=(string)mpeg2; video/x-raw, format=(string)UYVY, width=(int)1920, height=(int)1080, framerate=(fraction)25/1, interlace-mode=(string)progressive, pixel-aspect-ratio=(fraction)1/1, colorimetry=(string)bt709, chroma-site=(string)mpeg2; video/x-raw, format=(string)UYVY, width=(int)1920, height=(int)1080, framerate=(fraction)30000/1001, interlace-mode=(string)progressive, pixel-aspect-ratio=(fraction)1/1, colorimetry=(string)bt709, chroma-site=(string)mpeg2; video/x-raw, format=(string)UYVY, width=(int)1920, height=(int)1080, framerate=(fraction)30/1, interlace-mode=(string)progressive, pixel-aspect-ratio=(fraction)1/1, colorimetry=(string)bt709, chroma-site=(string)mpeg2; video/x-raw, format=(string)UYVY, width=(int)1920, height=(int)1080, framerate=(fraction)25/1, interlace-mode=(string)interleaved, pixel-aspect-ratio=(fraction)1/1, colorimetry=(string)bt709, chroma-site=(string)mpeg2; video/x-raw, format=(string)UYVY, width=(int)1920, height=(int)1080, framerate=(fraction)30000/1001, interlace-mode=(string)interleaved, pixel-aspect-ratio=(fraction)1/1, colorimetry=(string)bt709, chroma-site=(string)mpeg2; video/x-raw, format=(string)UYVY, width=(int)1920, height=(int)1080, framerate=(fraction)30/1, interlace-mode=(string)interleaved, pixel-aspect-ratio=(fraction)1/1, colorimetry=(string)bt709, chroma-site=(string)mpeg2; video/x-raw, format=(string)UYVY, width=(int)1920, height=(int)1080, framerate=(fraction)50/1, interlace-mode=(string)progressive, pixel-aspect-ratio=(fraction)1/1, colorimetry=(string)bt709, chroma-site=(string)mpeg2; video/x-raw, format=(string)UYVY, width=(int)1920, height=(int)1080, framerate=(fraction)60000/1001, interlace-mode=(string)progressive, pixel-aspect-ratio=(fraction)1/1, colorimetry=(string)bt709, chroma-site=(string)mpeg2; video/x-raw, format=(string)UYVY, width=(int)1920, height=(int)1080, framerate=(fraction)60/1, interlace-mode=(string)progressive, pixel-aspect-ratio=(fraction)1/1, colorimetry=(string)bt709, chroma-site=(string)mpeg2; video/x-raw, format=(string)UYVY, width=(int)1280, height=(int)720, framerate=(fraction)50/1, interlace-mode=(string)progressive, pixel-aspect-ratio=(fraction)1/1, colorimetry=(string)bt709, chroma-site=(string)mpeg2; video/x-raw, format=(string)UYVY, width=(int)1280, height=(int)720, framerate=(fraction)60000/1001, interlace-mode=(string)progressive, pixel-aspect-ratio=(fraction)1/1, colorimetry=(string)bt709, chroma-site=(string)mpeg2; video/x-raw, format=(string)UYVY, width=(int)1280, height=(int)720, framerate=(fraction)60/1, interlace-mode=(string)progressive, pixel-aspect-ratio=(fraction)1/1, colorimetry=(string)bt709, chroma-site=(string)mpeg2; video/x-raw, format=(string)UYVY, width=(int)2048, height=(int)1556, framerate=(fraction)24000/1001, interlace-mode=(string)progressive, pixel-aspect-ratio=(fraction)1/1, colorimetry=(string)bt709, chroma-site=(string)mpeg2; video/x-raw, format=(string)UYVY, width=(int)2048, height=(int)1556, framerate=(fraction)24/1, interlace-mode=(string)progressive, pixel-aspect-ratio=(fraction)1/1, colorimetry=(string)bt709, chroma-site=(string)mpeg2; video/x-raw, format=(string)UYVY, width=(int)2048, height=(int)1556, framerate=(fraction)25/1, interlace-mode=(string)progressive, pixel-aspect-ratio=(fraction)1/1, colorimetry=(string)bt709, chroma-site=(string)mpeg2; video/x-raw, format=(string)UYVY, width=(int)3840, height=(int)2160, framerate=(fraction)24000/1001, interlace-mode=(string)progressive, pixel-aspect-ratio=(fraction)1/1, colorimetry=(string)bt2020, chroma-site=(string)mpeg2; video/x-raw, format=(string)UYVY, width=(int)3840, height=(int)2160, framerate=(fraction)24/1, interlace-mode=(string)progressive, pixel-aspect-ratio=(fraction)1/1, colorimetry=(string)bt2020, chroma-site=(string)mpeg2; video/x-raw, format=(string)UYVY, width=(int)3840, height=(int)2160, framerate=(fraction)25/1, interlace-mode=(string)progressive, pixel-aspect-ratio=(fraction)1/1, colorimetry=(string)bt2020, chroma-site=(string)mpeg2; video/x-raw, format=(string)UYVY, width=(int)3840, height=(int)2160, framerate=(fraction)30000/1001, interlace-mode=(string)progressive, pixel-aspect-ratio=(fraction)1/1, colorimetry=(string)bt2020, chroma-site=(string)mpeg2; video/x-raw, format=(string)UYVY, width=(int)3840, height=(int)2160, framerate=(fraction)30/1, interlace-mode=(string)progressive, pixel-aspect-ratio=(fraction)1/1, colorimetry=(string)bt2020, chroma-site=(string)mpeg2; video/x-raw, format=(string)UYVY, width=(int)3840, height=(int)2160, framerate=(fraction)50/1, interlace-mode=(string)progressive, pixel-aspect-ratio=(fraction)1/1, colorimetry=(string)bt2020, chroma-site=(string)mpeg2; video/x-raw, format=(string)UYVY, width=(int)3840, height=(int)2160, framerate=(fraction)60000/1001, interlace-mode=(string)progressive, pixel-aspect-ratio=(fraction)1/1, colorimetry=(string)bt2020, chroma-site=(string)mpeg2; video/x-raw, format=(string)UYVY, width=(int)3840, height=(int)2160, framerate=(fraction)60/1, interlace-mode=(string)progressive, pixel-aspect-ratio=(fraction)1/1, colorimetry=(string)bt2020, chroma-site=(string)mpeg2</details>
+          <details>video/x-raw, width=(int)720, height=(int)486, pixel-aspect-ratio=(fraction)10/11, interlace-mode=(string)interleaved, framerate=(fraction)30000/1001, format=(string)UYVY, colorimetry=(string)bt601, chroma-site=(string)mpeg2; video/x-raw, width=(int)720, height=(int)486, pixel-aspect-ratio=(fraction)10/11, interlace-mode=(string)interleaved, framerate=(fraction)30000/1001, format=(string)ARGB; video/x-raw, width=(int)720, height=(int)486, pixel-aspect-ratio=(fraction)10/11, interlace-mode=(string)interleaved, framerate=(fraction)24000/1001, format=(string)UYVY, colorimetry=(string)bt601, chroma-site=(string)mpeg2; video/x-raw, width=(int)720, height=(int)486, pixel-aspect-ratio=(fraction)10/11, interlace-mode=(string)interleaved, framerate=(fraction)24000/1001, format=(string)ARGB; video/x-raw, width=(int)720, height=(int)576, pixel-aspect-ratio=(fraction)12/11, interlace-mode=(string)interleaved, framerate=(fraction)25/1, format=(string)UYVY, colorimetry=(string)bt601, chroma-site=(string)mpeg2; video/x-raw, width=(int)720, height=(int)576, pixel-aspect-ratio=(fraction)12/11, interlace-mode=(string)interleaved, framerate=(fraction)25/1, format=(string)ARGB; video/x-raw, width=(int)720, height=(int)486, pixel-aspect-ratio=(fraction)10/11, interlace-mode=(string)progressive, framerate=(fraction)30000/1001, format=(string)UYVY, colorimetry=(string)bt601, chroma-site=(string)mpeg2; video/x-raw, width=(int)720, height=(int)486, pixel-aspect-ratio=(fraction)10/11, interlace-mode=(string)progressive, framerate=(fraction)30000/1001, format=(string)ARGB; video/x-raw, width=(int)720, height=(int)576, pixel-aspect-ratio=(fraction)12/11, interlace-mode=(string)progressive, framerate=(fraction)25/1, format=(string)UYVY, colorimetry=(string)bt601, chroma-site=(string)mpeg2; video/x-raw, width=(int)720, height=(int)576, pixel-aspect-ratio=(fraction)12/11, interlace-mode=(string)progressive, framerate=(fraction)25/1, format=(string)ARGB; video/x-raw, width=(int)1920, height=(int)1080, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive, framerate=(fraction)24000/1001, format=(string)UYVY, colorimetry=(string)bt709, chroma-site=(string)mpeg2; video/x-raw, width=(int)1920, height=(int)1080, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive, framerate=(fraction)24000/1001, format=(string)ARGB; video/x-raw, width=(int)1920, height=(int)1080, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive, framerate=(fraction)24/1, format=(string)UYVY, colorimetry=(string)bt709, chroma-site=(string)mpeg2; video/x-raw, width=(int)1920, height=(int)1080, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive, framerate=(fraction)24/1, format=(string)ARGB; video/x-raw, width=(int)1920, height=(int)1080, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive, framerate=(fraction)25/1, format=(string)UYVY, colorimetry=(string)bt709, chroma-site=(string)mpeg2; video/x-raw, width=(int)1920, height=(int)1080, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive, framerate=(fraction)25/1, format=(string)ARGB; video/x-raw, width=(int)1920, height=(int)1080, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive, framerate=(fraction)30000/1001, format=(string)UYVY, colorimetry=(string)bt709, chroma-site=(string)mpeg2; video/x-raw, width=(int)1920, height=(int)1080, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive, framerate=(fraction)30000/1001, format=(string)ARGB; video/x-raw, width=(int)1920, height=(int)1080, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive, framerate=(fraction)30/1, format=(string)UYVY, colorimetry=(string)bt709, chroma-site=(string)mpeg2; video/x-raw, width=(int)1920, height=(int)1080, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive, framerate=(fraction)30/1, format=(string)ARGB; video/x-raw, width=(int)1920, height=(int)1080, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)interleaved, framerate=(fraction)25/1, format=(string)UYVY, colorimetry=(string)bt709, chroma-site=(string)mpeg2; video/x-raw, width=(int)1920, height=(int)1080, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)interleaved, framerate=(fraction)25/1, format=(string)ARGB; video/x-raw, width=(int)1920, height=(int)1080, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)interleaved, framerate=(fraction)30000/1001, format=(string)UYVY, colorimetry=(string)bt709, chroma-site=(string)mpeg2; video/x-raw, width=(int)1920, height=(int)1080, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)interleaved, framerate=(fraction)30000/1001, format=(string)ARGB; video/x-raw, width=(int)1920, height=(int)1080, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)interleaved, framerate=(fraction)30/1, format=(string)UYVY, colorimetry=(string)bt709, chroma-site=(string)mpeg2; video/x-raw, width=(int)1920, height=(int)1080, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)interleaved, framerate=(fraction)30/1, format=(string)ARGB; video/x-raw, width=(int)1920, height=(int)1080, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive, framerate=(fraction)50/1, format=(string)UYVY, colorimetry=(string)bt709, chroma-site=(string)mpeg2; video/x-raw, width=(int)1920, height=(int)1080, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive, framerate=(fraction)50/1, format=(string)ARGB; video/x-raw, width=(int)1920, height=(int)1080, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive, framerate=(fraction)60000/1001, format=(string)UYVY, colorimetry=(string)bt709, chroma-site=(string)mpeg2; video/x-raw, width=(int)1920, height=(int)1080, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive, framerate=(fraction)60000/1001, format=(string)ARGB; video/x-raw, width=(int)1920, height=(int)1080, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive, framerate=(fraction)60/1, format=(string)UYVY, colorimetry=(string)bt709, chroma-site=(string)mpeg2; video/x-raw, width=(int)1920, height=(int)1080, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive, framerate=(fraction)60/1, format=(string)ARGB; video/x-raw, width=(int)1280, height=(int)720, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive, framerate=(fraction)50/1, format=(string)UYVY, colorimetry=(string)bt709, chroma-site=(string)mpeg2; video/x-raw, width=(int)1280, height=(int)720, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive, framerate=(fraction)50/1, format=(string)ARGB; video/x-raw, width=(int)1280, height=(int)720, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive, framerate=(fraction)60000/1001, format=(string)UYVY, colorimetry=(string)bt709, chroma-site=(string)mpeg2; video/x-raw, width=(int)1280, height=(int)720, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive, framerate=(fraction)60000/1001, format=(string)ARGB; video/x-raw, width=(int)1280, height=(int)720, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive, framerate=(fraction)60/1, format=(string)UYVY, colorimetry=(string)bt709, chroma-site=(string)mpeg2; video/x-raw, width=(int)1280, height=(int)720, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive, framerate=(fraction)60/1, format=(string)ARGB; video/x-raw, width=(int)2048, height=(int)1556, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive, framerate=(fraction)24000/1001, format=(string)UYVY, colorimetry=(string)bt709, chroma-site=(string)mpeg2; video/x-raw, width=(int)2048, height=(int)1556, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive, framerate=(fraction)24000/1001, format=(string)ARGB; video/x-raw, width=(int)2048, height=(int)1556, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive, framerate=(fraction)24/1, format=(string)UYVY, colorimetry=(string)bt709, chroma-site=(string)mpeg2; video/x-raw, width=(int)2048, height=(int)1556, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive, framerate=(fraction)24/1, format=(string)ARGB; video/x-raw, width=(int)2048, height=(int)1556, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive, framerate=(fraction)25/1, format=(string)UYVY, colorimetry=(string)bt709, chroma-site=(string)mpeg2; video/x-raw, width=(int)2048, height=(int)1556, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive, framerate=(fraction)25/1, format=(string)ARGB; video/x-raw, width=(int)3840, height=(int)2160, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive, framerate=(fraction)24000/1001, format=(string)UYVY, colorimetry=(string)bt2020, chroma-site=(string)mpeg2; video/x-raw, width=(int)3840, height=(int)2160, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive, framerate=(fraction)24000/1001, format=(string)ARGB; video/x-raw, width=(int)3840, height=(int)2160, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive, framerate=(fraction)24/1, format=(string)UYVY, colorimetry=(string)bt2020, chroma-site=(string)mpeg2; video/x-raw, width=(int)3840, height=(int)2160, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive, framerate=(fraction)24/1, format=(string)ARGB; video/x-raw, width=(int)3840, height=(int)2160, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive, framerate=(fraction)25/1, format=(string)UYVY, colorimetry=(string)bt2020, chroma-site=(string)mpeg2; video/x-raw, width=(int)3840, height=(int)2160, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive, framerate=(fraction)25/1, format=(string)ARGB; video/x-raw, width=(int)3840, height=(int)2160, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive, framerate=(fraction)30000/1001, format=(string)UYVY, colorimetry=(string)bt2020, chroma-site=(string)mpeg2; video/x-raw, width=(int)3840, height=(int)2160, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive, framerate=(fraction)30000/1001, format=(string)ARGB; video/x-raw, width=(int)3840, height=(int)2160, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive, framerate=(fraction)30/1, format=(string)UYVY, colorimetry=(string)bt2020, chroma-site=(string)mpeg2; video/x-raw, width=(int)3840, height=(int)2160, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive, framerate=(fraction)30/1, format=(string)ARGB; video/x-raw, width=(int)3840, height=(int)2160, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive, framerate=(fraction)50/1, format=(string)UYVY, colorimetry=(string)bt2020, chroma-site=(string)mpeg2; video/x-raw, width=(int)3840, height=(int)2160, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive, framerate=(fraction)50/1, format=(string)ARGB; video/x-raw, width=(int)3840, height=(int)2160, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive, framerate=(fraction)60000/1001, format=(string)UYVY, colorimetry=(string)bt2020, chroma-site=(string)mpeg2; video/x-raw, width=(int)3840, height=(int)2160, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive, framerate=(fraction)60000/1001, format=(string)ARGB; video/x-raw, width=(int)3840, height=(int)2160, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive, framerate=(fraction)60/1, format=(string)UYVY, colorimetry=(string)bt2020, chroma-site=(string)mpeg2; video/x-raw, width=(int)3840, height=(int)2160, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive, framerate=(fraction)60/1, format=(string)ARGB</details>
         </caps>
       </pads>
     </element>
diff --git a/docs/plugins/inspect/plugin-dfbvideosink.xml b/docs/plugins/inspect/plugin-dfbvideosink.xml
index 1bb842f..4af58cb 100644
--- a/docs/plugins/inspect/plugin-dfbvideosink.xml
+++ b/docs/plugins/inspect/plugin-dfbvideosink.xml
@@ -3,7 +3,7 @@
   <description>DirectFB video output plugin</description>
   <filename>../../ext/directfb/.libs/libgstdfbvideosink.so</filename>
   <basename>libgstdfbvideosink.so</basename>
-  <version>1.6.3</version>
+  <version>1.7.91</version>
   <license>LGPL</license>
   <source>gst-plugins-bad</source>
   <package>GStreamer Bad Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-dtls.xml b/docs/plugins/inspect/plugin-dtls.xml
index 50a916f..3f17222 100644
--- a/docs/plugins/inspect/plugin-dtls.xml
+++ b/docs/plugins/inspect/plugin-dtls.xml
@@ -3,7 +3,7 @@
   <description>DTLS decoder and encoder plugins</description>
   <filename>../../ext/dtls/.libs/libgstdtls.so</filename>
   <basename>libgstdtls.so</basename>
-  <version>1.6.3</version>
+  <version>1.7.91</version>
   <license>BSD</license>
   <source>gst-plugins-bad</source>
   <package>GStreamer Bad Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-dtsdec.xml b/docs/plugins/inspect/plugin-dtsdec.xml
index 0f43805..ffad0a5 100644
--- a/docs/plugins/inspect/plugin-dtsdec.xml
+++ b/docs/plugins/inspect/plugin-dtsdec.xml
@@ -3,7 +3,7 @@
   <description>Decodes DTS audio streams</description>
   <filename>../../ext/dts/.libs/libgstdtsdec.so</filename>
   <basename>libgstdtsdec.so</basename>
-  <version>1.6.3</version>
+  <version>1.7.91</version>
   <license>GPL</license>
   <source>gst-plugins-bad</source>
   <package>GStreamer Bad Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-dvb.xml b/docs/plugins/inspect/plugin-dvb.xml
index e2fbd66..e3eb4c8 100644
--- a/docs/plugins/inspect/plugin-dvb.xml
+++ b/docs/plugins/inspect/plugin-dvb.xml
@@ -3,7 +3,7 @@
   <description>DVB elements</description>
   <filename>../../sys/dvb/.libs/libgstdvb.so</filename>
   <basename>libgstdvb.so</basename>
-  <version>1.6.3</version>
+  <version>1.7.91</version>
   <license>LGPL</license>
   <source>gst-plugins-bad</source>
   <package>GStreamer Bad Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-dvbsuboverlay.xml b/docs/plugins/inspect/plugin-dvbsuboverlay.xml
index 822b399..e5d17c5 100644
--- a/docs/plugins/inspect/plugin-dvbsuboverlay.xml
+++ b/docs/plugins/inspect/plugin-dvbsuboverlay.xml
@@ -3,7 +3,7 @@
   <description>DVB subtitle renderer</description>
   <filename>../../gst/dvbsuboverlay/.libs/libgstdvbsuboverlay.so</filename>
   <basename>libgstdvbsuboverlay.so</basename>
-  <version>1.6.3</version>
+  <version>1.7.91</version>
   <license>LGPL</license>
   <source>gst-plugins-bad</source>
   <package>GStreamer Bad Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-dvdspu.xml b/docs/plugins/inspect/plugin-dvdspu.xml
index aef0a86..89a8f80 100644
--- a/docs/plugins/inspect/plugin-dvdspu.xml
+++ b/docs/plugins/inspect/plugin-dvdspu.xml
@@ -3,7 +3,7 @@
   <description>DVD Sub-picture Overlay element</description>
   <filename>../../gst/dvdspu/.libs/libgstdvdspu.so</filename>
   <basename>libgstdvdspu.so</basename>
-  <version>1.6.3</version>
+  <version>1.7.91</version>
   <license>LGPL</license>
   <source>gst-plugins-bad</source>
   <package>GStreamer Bad Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-faac.xml b/docs/plugins/inspect/plugin-faac.xml
index 1b91088..1a8a21c 100644
--- a/docs/plugins/inspect/plugin-faac.xml
+++ b/docs/plugins/inspect/plugin-faac.xml
@@ -3,7 +3,7 @@
   <description>Free AAC Encoder (FAAC)</description>
   <filename>../../ext/faac/.libs/libgstfaac.so</filename>
   <basename>libgstfaac.so</basename>
-  <version>1.5.0.1</version>
+  <version>1.7.0.1</version>
   <license>LGPL</license>
   <source>gst-plugins-bad</source>
   <package>GStreamer Bad Plug-ins git</package>
@@ -20,7 +20,7 @@
           <name>sink</name>
           <direction>sink</direction>
           <presence>always</presence>
-          <details>audio/x-raw, format=(string)S16LE, layout=(string)interleaved, rate=(int){ 8000, 11025, 12000, 16000, 22050, 24000, 32000, 44100, 48000, 64000, 88200, 96000 }, channels=(int)[ 1, 6 ]</details>
+          <details>audio/x-raw, format=(string)S16LE, layout=(string)interleaved, rate=(int){ 8000, 11025, 12000, 16000, 22050, 24000, 32000, 44100, 48000, 64000, 88200, 96000 }, channels=(int)1; audio/x-raw, format=(string)S16LE, layout=(string)interleaved, rate=(int){ 8000, 11025, 12000, 16000, 22050, 24000, 32000, 44100, 48000, 64000, 88200, 96000 }, channels=(int)2, channel-mask=(bitmask)0x0000000000000003; audio/x-raw, format=(string)S16LE, layout=(string)interleaved, rate=(int){ 8000, 11025, 12000, 16000, 22050, 24000, 32000, 44100, 48000, 64000, 88200, 96000 }, channels=(int)3, channel-mask=(bitmask)0x0000000000000007; audio/x-raw, format=(string)S16LE, layout=(string)interleaved, rate=(int){ 8000, 11025, 12000, 16000, 22050, 24000, 32000, 44100, 48000, 64000, 88200, 96000 }, channels=(int)4, channel-mask=(bitmask)0x0000000000000107; audio/x-raw, format=(string)S16LE, layout=(string)interleaved, rate=(int){ 8000, 11025, 12000, 16000, 22050, 24000, 32000, 44100, 48000, 64000, 88200, 96000 }, channels=(int)5, channel-mask=(bitmask)0x0000000000000037; audio/x-raw, format=(string)S16LE, layout=(string)interleaved, rate=(int){ 8000, 11025, 12000, 16000, 22050, 24000, 32000, 44100, 48000, 64000, 88200, 96000 }, channels=(int)6, channel-mask=(bitmask)0x000000000000003f</details>
         </caps>
         <caps>
           <name>src</name>
diff --git a/docs/plugins/inspect/plugin-faad.xml b/docs/plugins/inspect/plugin-faad.xml
index 099cccc..7051da6 100644
--- a/docs/plugins/inspect/plugin-faad.xml
+++ b/docs/plugins/inspect/plugin-faad.xml
@@ -3,7 +3,7 @@
   <description>Free AAC Decoder (FAAD)</description>
   <filename>../../ext/faad/.libs/libgstfaad.so</filename>
   <basename>libgstfaad.so</basename>
-  <version>1.6.3</version>
+  <version>1.7.91</version>
   <license>GPL</license>
   <source>gst-plugins-bad</source>
   <package>GStreamer Bad Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-fbdevsink.xml b/docs/plugins/inspect/plugin-fbdevsink.xml
index 2925252..d3b99b9 100644
--- a/docs/plugins/inspect/plugin-fbdevsink.xml
+++ b/docs/plugins/inspect/plugin-fbdevsink.xml
@@ -3,7 +3,7 @@
   <description>Linux framebuffer video sink</description>
   <filename>../../sys/fbdev/.libs/libgstfbdevsink.so</filename>
   <basename>libgstfbdevsink.so</basename>
-  <version>1.6.3</version>
+  <version>1.7.91</version>
   <license>LGPL</license>
   <source>gst-plugins-bad</source>
   <package>GStreamer Bad Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-festival.xml b/docs/plugins/inspect/plugin-festival.xml
index cea4497..177eb4c 100644
--- a/docs/plugins/inspect/plugin-festival.xml
+++ b/docs/plugins/inspect/plugin-festival.xml
@@ -3,7 +3,7 @@
   <description>Synthesizes plain text into audio</description>
   <filename>../../gst/festival/.libs/libgstfestival.so</filename>
   <basename>libgstfestival.so</basename>
-  <version>1.6.3</version>
+  <version>1.7.91</version>
   <license>LGPL</license>
   <source>gst-plugins-bad</source>
   <package>GStreamer Bad Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-fieldanalysis.xml b/docs/plugins/inspect/plugin-fieldanalysis.xml
index 232e578..1d2970a 100644
--- a/docs/plugins/inspect/plugin-fieldanalysis.xml
+++ b/docs/plugins/inspect/plugin-fieldanalysis.xml
@@ -3,7 +3,7 @@
   <description>Video field analysis</description>
   <filename>../../gst/fieldanalysis/.libs/libgstfieldanalysis.so</filename>
   <basename>libgstfieldanalysis.so</basename>
-  <version>1.6.3</version>
+  <version>1.7.91</version>
   <license>LGPL</license>
   <source>gst-plugins-bad</source>
   <package>GStreamer</package>
diff --git a/docs/plugins/inspect/plugin-flite.xml b/docs/plugins/inspect/plugin-flite.xml
index 2c1d860..ff2660e 100644
--- a/docs/plugins/inspect/plugin-flite.xml
+++ b/docs/plugins/inspect/plugin-flite.xml
@@ -3,7 +3,7 @@
   <description>Flite speech synthesizer plugin</description>
   <filename>../../ext/flite/.libs/libgstflite.so</filename>
   <basename>libgstflite.so</basename>
-  <version>1.6.3</version>
+  <version>1.7.91</version>
   <license>LGPL</license>
   <source>gst-plugins-bad</source>
   <package>GStreamer Bad Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-fluidsynthmidi.xml b/docs/plugins/inspect/plugin-fluidsynthmidi.xml
index 35550b9..102f582 100644
--- a/docs/plugins/inspect/plugin-fluidsynthmidi.xml
+++ b/docs/plugins/inspect/plugin-fluidsynthmidi.xml
@@ -3,7 +3,7 @@
   <description>Fluidsynth MIDI Plugin</description>
   <filename>../../ext/fluidsynth/.libs/libgstfluidsynthmidi.so</filename>
   <basename>libgstfluidsynthmidi.so</basename>
-  <version>1.6.3</version>
+  <version>1.7.91</version>
   <license>LGPL</license>
   <source>gst-plugins-bad</source>
   <package>GStreamer Bad Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-freeverb.xml b/docs/plugins/inspect/plugin-freeverb.xml
index a03b867..2f6764c 100644
--- a/docs/plugins/inspect/plugin-freeverb.xml
+++ b/docs/plugins/inspect/plugin-freeverb.xml
@@ -3,7 +3,7 @@
   <description>Reverberation/room effect</description>
   <filename>../../gst/freeverb/.libs/libgstfreeverb.so</filename>
   <basename>libgstfreeverb.so</basename>
-  <version>1.6.3</version>
+  <version>1.7.91</version>
   <license>LGPL</license>
   <source>gst-plugins-bad</source>
   <package>GStreamer Bad Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-frei0r.xml b/docs/plugins/inspect/plugin-frei0r.xml
index f980c37..88cd00f 100644
--- a/docs/plugins/inspect/plugin-frei0r.xml
+++ b/docs/plugins/inspect/plugin-frei0r.xml
@@ -3,7 +3,7 @@
   <description>frei0r plugin library</description>
   <filename>../../gst/frei0r/.libs/libgstfrei0r.so</filename>
   <basename>libgstfrei0r.so</basename>
-  <version>1.6.3</version>
+  <version>1.7.91</version>
   <license>LGPL</license>
   <source>gst-plugins-bad</source>
   <package>GStreamer Bad Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-gaudieffects.xml b/docs/plugins/inspect/plugin-gaudieffects.xml
index 7498d1a..c0d9eef 100644
--- a/docs/plugins/inspect/plugin-gaudieffects.xml
+++ b/docs/plugins/inspect/plugin-gaudieffects.xml
@@ -3,7 +3,7 @@
   <description>Gaudi video effects.</description>
   <filename>../../gst/gaudieffects/.libs/libgstgaudieffects.so</filename>
   <basename>libgstgaudieffects.so</basename>
-  <version>1.6.3</version>
+  <version>1.7.91</version>
   <license>LGPL</license>
   <source>gst-plugins-bad</source>
   <package>GStreamer</package>
diff --git a/docs/plugins/inspect/plugin-gdp.xml b/docs/plugins/inspect/plugin-gdp.xml
index 89bab35..1a6be8a 100644
--- a/docs/plugins/inspect/plugin-gdp.xml
+++ b/docs/plugins/inspect/plugin-gdp.xml
@@ -3,7 +3,7 @@
   <description>Payload/depayload GDP packets</description>
   <filename>../../gst/gdp/.libs/libgstgdp.so</filename>
   <basename>libgstgdp.so</basename>
-  <version>1.6.3</version>
+  <version>1.7.91</version>
   <license>LGPL</license>
   <source>gst-plugins-bad</source>
   <package>GStreamer Bad Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-geometrictransform.xml b/docs/plugins/inspect/plugin-geometrictransform.xml
index 70e42f5..4ba7f40 100644
--- a/docs/plugins/inspect/plugin-geometrictransform.xml
+++ b/docs/plugins/inspect/plugin-geometrictransform.xml
@@ -3,7 +3,7 @@
   <description>Various geometric image transform elements</description>
   <filename>../../gst/geometrictransform/.libs/libgstgeometrictransform.so</filename>
   <basename>libgstgeometrictransform.so</basename>
-  <version>1.6.3</version>
+  <version>1.7.91</version>
   <license>LGPL</license>
   <source>gst-plugins-bad</source>
   <package>GStreamer Bad Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-gmedec.xml b/docs/plugins/inspect/plugin-gmedec.xml
index c753c5a..e8e5ccf 100644
--- a/docs/plugins/inspect/plugin-gmedec.xml
+++ b/docs/plugins/inspect/plugin-gmedec.xml
@@ -3,7 +3,7 @@
   <description>GME Audio Decoder</description>
   <filename>../../ext/gme/.libs/libgstgme.so</filename>
   <basename>libgstgme.so</basename>
-  <version>1.6.3</version>
+  <version>1.7.91</version>
   <license>LGPL</license>
   <source>gst-plugins-bad</source>
   <package>GStreamer Bad Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-gsm.xml b/docs/plugins/inspect/plugin-gsm.xml
index eca8435..8724461 100644
--- a/docs/plugins/inspect/plugin-gsm.xml
+++ b/docs/plugins/inspect/plugin-gsm.xml
@@ -3,7 +3,7 @@
   <description>GSM encoder/decoder</description>
   <filename>../../ext/gsm/.libs/libgstgsm.so</filename>
   <basename>libgstgsm.so</basename>
-  <version>1.6.3</version>
+  <version>1.7.91</version>
   <license>LGPL</license>
   <source>gst-plugins-bad</source>
   <package>GStreamer Bad Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-gstgtk.xml b/docs/plugins/inspect/plugin-gstgtk.xml
index 2ea24d3..ea5f4ab 100644
--- a/docs/plugins/inspect/plugin-gstgtk.xml
+++ b/docs/plugins/inspect/plugin-gstgtk.xml
@@ -3,7 +3,7 @@
   <description>Gtk+ sink</description>
   <filename>../../ext/gtk/.libs/libgstgtksink.so</filename>
   <basename>libgstgtksink.so</basename>
-  <version>1.6.3</version>
+  <version>1.7.91</version>
   <license>LGPL</license>
   <source>gst-plugins-bad</source>
   <package>GStreamer Bad Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-gstsiren.xml b/docs/plugins/inspect/plugin-gstsiren.xml
index 4d2b29d..e753155 100644
--- a/docs/plugins/inspect/plugin-gstsiren.xml
+++ b/docs/plugins/inspect/plugin-gstsiren.xml
@@ -3,7 +3,7 @@
   <description>Siren encoder/decoder/payloader/depayloader plugins</description>
   <filename>../../gst/siren/.libs/libgstsiren.so</filename>
   <basename>libgstsiren.so</basename>
-  <version>1.6.3</version>
+  <version>1.7.91</version>
   <license>LGPL</license>
   <source>gst-plugins-bad</source>
   <package>GStreamer Bad Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-fragmented.xml b/docs/plugins/inspect/plugin-hls.xml
similarity index 83%
rename from docs/plugins/inspect/plugin-fragmented.xml
rename to docs/plugins/inspect/plugin-hls.xml
index b973ed4..5bd8947 100644
--- a/docs/plugins/inspect/plugin-fragmented.xml
+++ b/docs/plugins/inspect/plugin-hls.xml
@@ -1,13 +1,13 @@
 <plugin>
-  <name>fragmented</name>
-  <description>Fragmented streaming plugins</description>
-  <filename>../../ext/hls/.libs/libgstfragmented.so</filename>
-  <basename>libgstfragmented.so</basename>
-  <version>1.6.3</version>
+  <name>hls</name>
+  <description>HTTP Live Streaming (HLS)</description>
+  <filename>../../ext/hls/.libs/libgsthls.so</filename>
+  <basename>libgsthls.so</basename>
+  <version>1.7.91</version>
   <license>LGPL</license>
   <source>gst-plugins-bad</source>
   <package>GStreamer Bad Plug-ins</package>
-  <origin>http://www.gstreamer.org/</origin>
+  <origin>Unknown package origin</origin>
   <elements>
     <element>
       <name>hlsdemux</name>
diff --git a/docs/plugins/inspect/plugin-id3tag.xml b/docs/plugins/inspect/plugin-id3tag.xml
index d23b2f5..7a42dd2 100644
--- a/docs/plugins/inspect/plugin-id3tag.xml
+++ b/docs/plugins/inspect/plugin-id3tag.xml
@@ -3,7 +3,7 @@
   <description>ID3 v1 and v2 muxing plugin</description>
   <filename>../../gst/id3tag/.libs/libgstid3tag.so</filename>
   <basename>libgstid3tag.so</basename>
-  <version>1.6.3</version>
+  <version>1.7.91</version>
   <license>LGPL</license>
   <source>gst-plugins-bad</source>
   <package>GStreamer Bad Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-inter.xml b/docs/plugins/inspect/plugin-inter.xml
index b060654..48b6ccd 100644
--- a/docs/plugins/inspect/plugin-inter.xml
+++ b/docs/plugins/inspect/plugin-inter.xml
@@ -3,7 +3,7 @@
   <description>plugin for inter-pipeline communication</description>
   <filename>../../gst/inter/.libs/libgstinter.so</filename>
   <basename>libgstinter.so</basename>
-  <version>1.6.3</version>
+  <version>1.7.91</version>
   <license>LGPL</license>
   <source>gst-plugins-bad</source>
   <package>GStreamer Bad Plug-ins</package>
diff --git a/docs/plugins/inspect/plugin-interlace.xml b/docs/plugins/inspect/plugin-interlace.xml
index 7905120..3aaad92 100644
--- a/docs/plugins/inspect/plugin-interlace.xml
+++ b/docs/plugins/inspect/plugin-interlace.xml
@@ -3,7 +3,7 @@
   <description>Create an interlaced video stream</description>
   <filename>../../gst/interlace/.libs/libgstinterlace.so</filename>
   <basename>libgstinterlace.so</basename>
-  <version>1.6.3</version>
+  <version>1.7.91</version>
   <license>LGPL</license>
   <source>gst-plugins-bad</source>
   <package>GStreamer Bad Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-ivfparse.xml b/docs/plugins/inspect/plugin-ivfparse.xml
index dd57be2..616c555 100644
--- a/docs/plugins/inspect/plugin-ivfparse.xml
+++ b/docs/plugins/inspect/plugin-ivfparse.xml
@@ -3,7 +3,7 @@
   <description>IVF parser</description>
   <filename>../../gst/ivfparse/.libs/libgstivfparse.so</filename>
   <basename>libgstivfparse.so</basename>
-  <version>1.6.3</version>
+  <version>1.7.91</version>
   <license>LGPL</license>
   <source>gst-plugins-bad</source>
   <package>GStreamer Bad Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-ivtc.xml b/docs/plugins/inspect/plugin-ivtc.xml
index 66609e0..c463720 100644
--- a/docs/plugins/inspect/plugin-ivtc.xml
+++ b/docs/plugins/inspect/plugin-ivtc.xml
@@ -3,7 +3,7 @@
   <description>Inverse Telecine</description>
   <filename>../../gst/ivtc/.libs/libgstivtc.so</filename>
   <basename>libgstivtc.so</basename>
-  <version>1.6.3</version>
+  <version>1.7.91</version>
   <license>LGPL</license>
   <source>gst-plugins-bad</source>
   <package>GStreamer Bad Plug-ins</package>
diff --git a/docs/plugins/inspect/plugin-jp2kdecimator.xml b/docs/plugins/inspect/plugin-jp2kdecimator.xml
index d046eb4..b90c1ee 100644
--- a/docs/plugins/inspect/plugin-jp2kdecimator.xml
+++ b/docs/plugins/inspect/plugin-jp2kdecimator.xml
@@ -3,7 +3,7 @@
   <description>JPEG2000 decimator</description>
   <filename>../../gst/jp2kdecimator/.libs/libgstjp2kdecimator.so</filename>
   <basename>libgstjp2kdecimator.so</basename>
-  <version>1.6.3</version>
+  <version>1.7.91</version>
   <license>LGPL</license>
   <source>gst-plugins-bad</source>
   <package>GStreamer Bad Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-jpegformat.xml b/docs/plugins/inspect/plugin-jpegformat.xml
index 40c4f9c..7711400 100644
--- a/docs/plugins/inspect/plugin-jpegformat.xml
+++ b/docs/plugins/inspect/plugin-jpegformat.xml
@@ -3,7 +3,7 @@
   <description>JPEG interchange format plugin</description>
   <filename>../../gst/jpegformat/.libs/libgstjpegformat.so</filename>
   <basename>libgstjpegformat.so</basename>
-  <version>1.6.3</version>
+  <version>1.7.91</version>
   <license>LGPL</license>
   <source>gst-plugins-bad</source>
   <package>GStreamer Bad Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-kate.xml b/docs/plugins/inspect/plugin-kate.xml
index 9ed4363..4132112 100644
--- a/docs/plugins/inspect/plugin-kate.xml
+++ b/docs/plugins/inspect/plugin-kate.xml
@@ -3,7 +3,7 @@
   <description>Kate plugin</description>
   <filename>../../ext/kate/.libs/libgstkate.so</filename>
   <basename>libgstkate.so</basename>
-  <version>1.6.3</version>
+  <version>1.7.91</version>
   <license>LGPL</license>
   <source>gst-plugins-bad</source>
   <package>GStreamer Bad Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-ladspa.xml b/docs/plugins/inspect/plugin-ladspa.xml
index 5dc67f1..371b788 100644
--- a/docs/plugins/inspect/plugin-ladspa.xml
+++ b/docs/plugins/inspect/plugin-ladspa.xml
@@ -3,7 +3,7 @@
   <description>LADSPA plugin</description>
   <filename>../../ext/ladspa/.libs/libgstladspa.so</filename>
   <basename>libgstladspa.so</basename>
-  <version>1.6.3</version>
+  <version>1.7.91</version>
   <license>LGPL</license>
   <source>gst-plugins-bad</source>
   <package>GStreamer Bad Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-libde265.xml b/docs/plugins/inspect/plugin-libde265.xml
index 13210e6..5ba3b23 100644
--- a/docs/plugins/inspect/plugin-libde265.xml
+++ b/docs/plugins/inspect/plugin-libde265.xml
@@ -3,7 +3,7 @@
   <description>HEVC/H.265 decoder using libde265</description>
   <filename>../../ext/libde265/.libs/libgstlibde265.so</filename>
   <basename>libgstlibde265.so</basename>
-  <version>1.6.3</version>
+  <version>1.7.91</version>
   <license>LGPL</license>
   <source>gst-plugins-bad</source>
   <package>GStreamer Bad Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-liveadder.xml b/docs/plugins/inspect/plugin-liveadder.xml
deleted file mode 100644
index feb83f1..0000000
--- a/docs/plugins/inspect/plugin-liveadder.xml
+++ /dev/null
@@ -1,34 +0,0 @@
-<plugin>
-  <name>liveadder</name>
-  <description>Adds multiple live discontinuous streams</description>
-  <filename>../../gst/liveadder/.libs/libgstliveadder.so</filename>
-  <basename>libgstliveadder.so</basename>
-  <version>1.6.3</version>
-  <license>LGPL</license>
-  <source>gst-plugins-bad</source>
-  <package>GStreamer Bad Plug-ins source release</package>
-  <origin>Unknown package origin</origin>
-  <elements>
-    <element>
-      <name>liveadder</name>
-      <longname>Live Adder element</longname>
-      <class>Generic/Audio</class>
-      <description>Mixes live/discontinuous audio streams</description>
-      <author>Olivier Crete &lt;olivier.crete@collabora.co.uk&gt;</author>
-      <pads>
-        <caps>
-          <name>sink_%u</name>
-          <direction>sink</direction>
-          <presence>request</presence>
-          <details>audio/x-raw, format=(string){ S8, U8, S16LE, U16LE, S32LE, U32LE, F32LE, F64LE }, rate=(int)[ 1, 2147483647 ], channels=(int)[ 1, 2147483647 ]</details>
-        </caps>
-        <caps>
-          <name>src</name>
-          <direction>source</direction>
-          <presence>always</presence>
-          <details>audio/x-raw, format=(string){ S8, U8, S16LE, U16LE, S32LE, U32LE, F32LE, F64LE }, rate=(int)[ 1, 2147483647 ], channels=(int)[ 1, 2147483647 ]</details>
-        </caps>
-      </pads>
-    </element>
-  </elements>
-</plugin>
\ No newline at end of file
diff --git a/docs/plugins/inspect/plugin-midi.xml b/docs/plugins/inspect/plugin-midi.xml
index 718be40..4c4074e 100644
--- a/docs/plugins/inspect/plugin-midi.xml
+++ b/docs/plugins/inspect/plugin-midi.xml
@@ -3,7 +3,7 @@
   <description>Parse MIDI files</description>
   <filename>../../gst/midi/.libs/libgstmidi.so</filename>
   <basename>libgstmidi.so</basename>
-  <version>1.6.3</version>
+  <version>1.7.91</version>
   <license>LGPL</license>
   <source>gst-plugins-bad</source>
   <package>GStreamer Bad Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-mimic.xml b/docs/plugins/inspect/plugin-mimic.xml
index 30d1eb1..b0b09ff 100644
--- a/docs/plugins/inspect/plugin-mimic.xml
+++ b/docs/plugins/inspect/plugin-mimic.xml
@@ -3,7 +3,7 @@
   <description>Mimic codec</description>
   <filename>../../ext/mimic/.libs/libgstmimic.so</filename>
   <basename>libgstmimic.so</basename>
-  <version>1.6.3</version>
+  <version>1.7.91</version>
   <license>LGPL</license>
   <source>gst-plugins-bad</source>
   <package>GStreamer Bad Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-mms.xml b/docs/plugins/inspect/plugin-mms.xml
index 54c081c..f50fecf 100644
--- a/docs/plugins/inspect/plugin-mms.xml
+++ b/docs/plugins/inspect/plugin-mms.xml
@@ -3,7 +3,7 @@
   <description>Microsoft Multi Media Server streaming protocol support</description>
   <filename>../../ext/libmms/.libs/libgstmms.so</filename>
   <basename>libgstmms.so</basename>
-  <version>1.6.3</version>
+  <version>1.7.91</version>
   <license>LGPL</license>
   <source>gst-plugins-bad</source>
   <package>GStreamer Bad Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-modplug.xml b/docs/plugins/inspect/plugin-modplug.xml
index 3320d70..5736b14 100644
--- a/docs/plugins/inspect/plugin-modplug.xml
+++ b/docs/plugins/inspect/plugin-modplug.xml
@@ -3,7 +3,7 @@
   <description>.MOD audio decoding</description>
   <filename>../../ext/modplug/.libs/libgstmodplug.so</filename>
   <basename>libgstmodplug.so</basename>
-  <version>1.6.3</version>
+  <version>1.7.91</version>
   <license>LGPL</license>
   <source>gst-plugins-bad</source>
   <package>GStreamer Bad Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-mpeg2enc.xml b/docs/plugins/inspect/plugin-mpeg2enc.xml
index 95eee84..ef3da65 100644
--- a/docs/plugins/inspect/plugin-mpeg2enc.xml
+++ b/docs/plugins/inspect/plugin-mpeg2enc.xml
@@ -3,7 +3,7 @@
   <description>High-quality MPEG-1/2 video encoder</description>
   <filename>../../ext/mpeg2enc/.libs/libgstmpeg2enc.so</filename>
   <basename>libgstmpeg2enc.so</basename>
-  <version>1.6.3</version>
+  <version>1.7.91</version>
   <license>GPL</license>
   <source>gst-plugins-bad</source>
   <package>GStreamer Bad Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-mpegpsdemux.xml b/docs/plugins/inspect/plugin-mpegpsdemux.xml
index 2dda1d3..ac15f7f 100644
--- a/docs/plugins/inspect/plugin-mpegpsdemux.xml
+++ b/docs/plugins/inspect/plugin-mpegpsdemux.xml
@@ -3,7 +3,7 @@
   <description>MPEG-PS demuxer</description>
   <filename>../../gst/mpegdemux/.libs/libgstmpegpsdemux.so</filename>
   <basename>libgstmpegpsdemux.so</basename>
-  <version>1.6.3</version>
+  <version>1.7.91</version>
   <license>unknown</license>
   <source>gst-plugins-bad</source>
   <package>GStreamer Bad Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-mpegpsmux.xml b/docs/plugins/inspect/plugin-mpegpsmux.xml
index d36db26..671fcbf 100644
--- a/docs/plugins/inspect/plugin-mpegpsmux.xml
+++ b/docs/plugins/inspect/plugin-mpegpsmux.xml
@@ -3,7 +3,7 @@
   <description>MPEG-PS muxer</description>
   <filename>../../gst/mpegpsmux/.libs/libgstmpegpsmux.so</filename>
   <basename>libgstmpegpsmux.so</basename>
-  <version>1.6.3</version>
+  <version>1.7.91</version>
   <license>LGPL</license>
   <source>gst-plugins-bad</source>
   <package>GStreamer Bad Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-mpegtsdemux.xml b/docs/plugins/inspect/plugin-mpegtsdemux.xml
index be48789..bb5074f 100644
--- a/docs/plugins/inspect/plugin-mpegtsdemux.xml
+++ b/docs/plugins/inspect/plugin-mpegtsdemux.xml
@@ -3,7 +3,7 @@
   <description>MPEG TS demuxer</description>
   <filename>../../gst/mpegtsdemux/.libs/libgstmpegtsdemux.so</filename>
   <basename>libgstmpegtsdemux.so</basename>
-  <version>1.6.3</version>
+  <version>1.7.91</version>
   <license>LGPL</license>
   <source>gst-plugins-bad</source>
   <package>GStreamer Bad Plug-ins source release</package>
@@ -27,7 +27,7 @@
           <name>audio_%04x</name>
           <direction>source</direction>
           <presence>sometimes</presence>
-          <details>audio/mpeg, mpegversion=(int)1; audio/mpeg, mpegversion=(int)2, stream-format=(string)adts; audio/mpeg, mpegversion=(int)4, stream-format=(string)loas; audio/x-lpcm, width=(int){ 16, 20, 24 }, rate=(int){ 48000, 96000 }, channels=(int)[ 1, 8 ], dynamic_range=(int)[ 0, 255 ], emphasis=(boolean){ false, true }, mute=(boolean){ false, true }; audio/x-ac3; audio/x-eac3; audio/x-dts; audio/x-private-ts-lpcm</details>
+          <details>audio/mpeg, mpegversion=(int)1; audio/mpeg, mpegversion=(int)2, stream-format=(string)adts; audio/mpeg, mpegversion=(int)4, stream-format=(string)loas; audio/x-lpcm, width=(int){ 16, 20, 24 }, rate=(int){ 48000, 96000 }, channels=(int)[ 1, 8 ], dynamic_range=(int)[ 0, 255 ], emphasis=(boolean){ false, true }, mute=(boolean){ false, true }; audio/x-ac3; audio/x-eac3; audio/x-dts; audio/x-opus; audio/x-private-ts-lpcm</details>
         </caps>
         <caps>
           <name>private_%04x</name>
@@ -39,13 +39,13 @@
           <name>subpicture_%04x</name>
           <direction>source</direction>
           <presence>sometimes</presence>
-          <details>subpicture/x-pgs; subpicture/x-dvd</details>
+          <details>subpicture/x-pgs; subpicture/x-dvd; subpicture/x-dvb</details>
         </caps>
         <caps>
           <name>video_%04x</name>
           <direction>source</direction>
           <presence>sometimes</presence>
-          <details>video/mpeg, mpegversion=(int){ 1, 2, 4 }, systemstream=(boolean)false; video/x-h264, stream-format=(string)byte-stream, alignment=(string)nal; video/x-dirac; video/x-cavs; video/x-wmv, wmvversion=(int)3, format=(string)WVC1</details>
+          <details>video/mpeg, mpegversion=(int){ 1, 2, 4 }, systemstream=(boolean)false; video/x-h264, stream-format=(string)byte-stream, alignment=(string)nal; video/x-h265, stream-format=(string)byte-stream, alignment=(string)nal; video/x-dirac; video/x-cavs; video/x-wmv, wmvversion=(int)3, format=(string)WVC1</details>
         </caps>
       </pads>
     </element>
diff --git a/docs/plugins/inspect/plugin-mpegtsmux.xml b/docs/plugins/inspect/plugin-mpegtsmux.xml
index a4b553b..e3fd119 100644
--- a/docs/plugins/inspect/plugin-mpegtsmux.xml
+++ b/docs/plugins/inspect/plugin-mpegtsmux.xml
@@ -3,7 +3,7 @@
   <description>MPEG-TS muxer</description>
   <filename>../../gst/mpegtsmux/.libs/libgstmpegtsmux.so</filename>
   <basename>libgstmpegtsmux.so</basename>
-  <version>1.6.3</version>
+  <version>1.7.91</version>
   <license>LGPL</license>
   <source>gst-plugins-bad</source>
   <package>GStreamer Bad Plug-ins source release</package>
@@ -20,7 +20,7 @@
           <name>sink_%d</name>
           <direction>sink</direction>
           <presence>request</presence>
-          <details>video/mpeg, parsed=(boolean)true, mpegversion=(int){ 1, 2, 4 }, systemstream=(boolean)false; video/x-dirac; video/x-h264, stream-format=(string)byte-stream, alignment=(string){ au, nal }; audio/mpeg, parsed=(boolean)true, mpegversion=(int){ 1, 2 }; audio/mpeg, framed=(boolean)true, mpegversion=(int)4, stream-format=(string)adts; audio/mpeg, mpegversion=(int)4, stream-format=(string)raw; audio/x-lpcm, width=(int){ 16, 20, 24 }, rate=(int){ 48000, 96000 }, channels=(int)[ 1, 8 ], dynamic_range=(int)[ 0, 255 ], emphasis=(boolean){ false, true }, mute=(boolean){ false, true }; audio/x-ac3, framed=(boolean)true; audio/x-dts, framed=(boolean)true; subpicture/x-dvb; application/x-teletext; meta/x-klv, parsed=(boolean)true</details>
+          <details>video/mpeg, parsed=(boolean)true, mpegversion=(int){ 1, 2, 4 }, systemstream=(boolean)false; video/x-dirac; video/x-h264, stream-format=(string)byte-stream, alignment=(string){ au, nal }; video/x-h265, stream-format=(string)byte-stream, alignment=(string){ au, nal }; audio/mpeg, parsed=(boolean)true, mpegversion=(int){ 1, 2 }; audio/mpeg, framed=(boolean)true, mpegversion=(int)4, stream-format=(string)adts; audio/mpeg, mpegversion=(int)4, stream-format=(string)raw; audio/x-lpcm, width=(int){ 16, 20, 24 }, rate=(int){ 48000, 96000 }, channels=(int)[ 1, 8 ], dynamic_range=(int)[ 0, 255 ], emphasis=(boolean){ false, true }, mute=(boolean){ false, true }; audio/x-ac3, framed=(boolean)true; audio/x-dts, framed=(boolean)true; audio/x-opus, channels=(int)[ 1, 8 ], channel-mapping-family=(int){ 0, 1 }; subpicture/x-dvb; application/x-teletext; meta/x-klv, parsed=(boolean)true</details>
         </caps>
         <caps>
           <name>src</name>
diff --git a/docs/plugins/inspect/plugin-mpg123.xml b/docs/plugins/inspect/plugin-mpg123.xml
deleted file mode 100644
index d805c61..0000000
--- a/docs/plugins/inspect/plugin-mpg123.xml
+++ /dev/null
@@ -1,34 +0,0 @@
-<plugin>
-  <name>mpg123</name>
-  <description>mp3 decoding based on the mpg123 library</description>
-  <filename>../../ext/mpg123/.libs/libgstmpg123.so</filename>
-  <basename>libgstmpg123.so</basename>
-  <version>1.6.3</version>
-  <license>LGPL</license>
-  <source>gst-plugins-bad</source>
-  <package>GStreamer Bad Plug-ins source release</package>
-  <origin>Unknown package origin</origin>
-  <elements>
-    <element>
-      <name>mpg123audiodec</name>
-      <longname>mpg123 mp3 decoder</longname>
-      <class>Codec/Decoder/Audio</class>
-      <description>Decodes mp3 streams using the mpg123 library</description>
-      <author>Carlos Rafael Giani &lt;dv@pseudoterminal.org&gt;</author>
-      <pads>
-        <caps>
-          <name>sink</name>
-          <direction>sink</direction>
-          <presence>always</presence>
-          <details>audio/mpeg, mpegversion=(int)1, layer=(int)[ 1, 3 ], rate=(int){ 8000, 11025, 12000, 16000, 22050, 24000, 32000, 44100, 48000 }, channels=(int)[ 1, 2 ], parsed=(boolean)true</details>
-        </caps>
-        <caps>
-          <name>src</name>
-          <direction>source</direction>
-          <presence>always</presence>
-          <details>audio/x-raw, format=(string){ S16LE, U16LE, S32LE, U32LE, S24LE, U24LE, F32LE }, rate=(int){ 8000, 11025, 12000, 16000, 22050, 24000, 32000, 44100, 48000 }, channels=(int)[ 1, 2 ], layout=(string)interleaved</details>
-        </caps>
-      </pads>
-    </element>
-  </elements>
-</plugin>
\ No newline at end of file
diff --git a/docs/plugins/inspect/plugin-mplex.xml b/docs/plugins/inspect/plugin-mplex.xml
index 022edf1..9ec7b64 100644
--- a/docs/plugins/inspect/plugin-mplex.xml
+++ b/docs/plugins/inspect/plugin-mplex.xml
@@ -3,7 +3,7 @@
   <description>High-quality MPEG/DVD/SVCD/VCD video/audio multiplexer</description>
   <filename>../../ext/mplex/.libs/libgstmplex.so</filename>
   <basename>libgstmplex.so</basename>
-  <version>1.6.3</version>
+  <version>1.7.91</version>
   <license>GPL</license>
   <source>gst-plugins-bad</source>
   <package>GStreamer Bad Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-mxf.xml b/docs/plugins/inspect/plugin-mxf.xml
index c7808c5..094de1d 100644
--- a/docs/plugins/inspect/plugin-mxf.xml
+++ b/docs/plugins/inspect/plugin-mxf.xml
@@ -3,7 +3,7 @@
   <description>MXF plugin library</description>
   <filename>../../gst/mxf/.libs/libgstmxf.so</filename>
   <basename>libgstmxf.so</basename>
-  <version>1.6.3</version>
+  <version>1.7.91</version>
   <license>LGPL</license>
   <source>gst-plugins-bad</source>
   <package>GStreamer Bad Plug-ins source release</package>
@@ -30,5 +30,68 @@
         </caps>
       </pads>
     </element>
+    <element>
+      <name>mxfmux</name>
+      <longname>MXF muxer</longname>
+      <class>Codec/Muxer</class>
+      <description>Muxes video/audio streams into a MXF stream</description>
+      <author>Sebastian Dröge &lt;sebastian.droege@collabora.co.uk&gt;</author>
+      <pads>
+        <caps>
+          <name>alaw_audio_sink_%u</name>
+          <direction>sink</direction>
+          <presence>request</presence>
+          <details>audio/x-alaw, rate=(int)[ 8000, 192000 ], channels=(int)[ 1, 2 ]</details>
+        </caps>
+        <caps>
+          <name>bwf_audio_sink_%u</name>
+          <direction>sink</direction>
+          <presence>request</presence>
+          <details>audio/x-raw, format=(string)S32LE, rate=(int)[ 1, 2147483647 ], channels=(int)[ 1, 2147483647 ]; audio/x-raw, format=(string)S32BE, rate=(int)[ 1, 2147483647 ], channels=(int)[ 1, 2147483647 ]; audio/x-raw, format=(string)S24LE, rate=(int)[ 1, 2147483647 ], channels=(int)[ 1, 2147483647 ]; audio/x-raw, format=(string)S24BE, rate=(int)[ 1, 2147483647 ], channels=(int)[ 1, 2147483647 ]; audio/x-raw, format=(string)S16LE, rate=(int)[ 1, 2147483647 ], channels=(int)[ 1, 2147483647 ]; audio/x-raw, format=(string)S16BE, rate=(int)[ 1, 2147483647 ], channels=(int)[ 1, 2147483647 ]; audio/x-raw, format=(string)U8, rate=(int)[ 1, 2147483647 ], channels=(int)[ 1, 2147483647 ]</details>
+        </caps>
+        <caps>
+          <name>dv_dif_video_sink_%u</name>
+          <direction>sink</direction>
+          <presence>request</presence>
+          <details>video/x-dv, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], systemstream=(boolean)true</details>
+        </caps>
+        <caps>
+          <name>jpeg2000_video_sink_%u</name>
+          <direction>sink</direction>
+          <presence>request</presence>
+          <details>image/x-jpc, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], colorspace=(string){ sRGB, sYUV }</details>
+        </caps>
+        <caps>
+          <name>mpeg_audio_sink_%u</name>
+          <direction>sink</direction>
+          <presence>request</presence>
+          <details>audio/mpeg, mpegversion=(int)1, layer=(int)[ 1, 3 ], rate=(int)[ 8000, 48000 ], channels=(int)[ 1, 2 ], parsed=(boolean)true; audio/x-ac3, rate=(int)[ 4000, 96000 ], channels=(int)[ 1, 6 ]; audio/mpeg, mpegversion=(int)2, rate=(int)[ 8000, 96000 ], channels=(int)[ 1, 8 ]</details>
+        </caps>
+        <caps>
+          <name>mpeg_video_sink_%u</name>
+          <direction>sink</direction>
+          <presence>request</presence>
+          <details>video/mpeg, mpegversion=(int){ 1, 2, 4 }, systemstream=(boolean)false, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-h264, stream-format=(string)byte-stream, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details>
+        </caps>
+        <caps>
+          <name>up_video_sink_%u</name>
+          <direction>sink</direction>
+          <presence>request</presence>
+          <details>video/x-raw, format=(string)RGB, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw, format=(string)BGR, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw, format=(string)RGBx, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw, format=(string)xRGB, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw, format=(string)BGRx, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw, format=(string)xBGR, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw, format=(string)ARGB, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw, format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw, format=(string)ABGR, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw, format=(string)BGRA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw, format=(string)AYUV, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw, format=(string)v308, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw, format=(string)UYVY, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw, format=(string)YUY2, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details>
+        </caps>
+        <caps>
+          <name>vc3_video_sink_%u</name>
+          <direction>sink</direction>
+          <presence>request</presence>
+          <details>video/x-dnxhd, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details>
+        </caps>
+        <caps>
+          <name>src</name>
+          <direction>source</direction>
+          <presence>always</presence>
+          <details>application/mxf</details>
+        </caps>
+      </pads>
+    </element>
   </elements>
 </plugin>
\ No newline at end of file
diff --git a/docs/plugins/inspect/plugin-neon.xml b/docs/plugins/inspect/plugin-neon.xml
index de2ce6b..c53fcd4 100644
--- a/docs/plugins/inspect/plugin-neon.xml
+++ b/docs/plugins/inspect/plugin-neon.xml
@@ -3,7 +3,7 @@
   <description>lib neon http client src</description>
   <filename>../../ext/neon/.libs/libgstneonhttpsrc.so</filename>
   <basename>libgstneonhttpsrc.so</basename>
-  <version>1.6.2</version>
+  <version>1.7.1</version>
   <license>LGPL</license>
   <source>gst-plugins-bad</source>
   <package>GStreamer Bad Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-netsim.xml b/docs/plugins/inspect/plugin-netsim.xml
new file mode 100644
index 0000000..efb5adb
--- /dev/null
+++ b/docs/plugins/inspect/plugin-netsim.xml
@@ -0,0 +1,34 @@
+<plugin>
+  <name>netsim</name>
+  <description>Network Simulator</description>
+  <filename>../../gst/netsim/.libs/libgstnetsim.so</filename>
+  <basename>libgstnetsim.so</basename>
+  <version>1.7.91</version>
+  <license>LGPL</license>
+  <source>gst-plugins-bad</source>
+  <package>GStreamer Bad Plug-ins source release</package>
+  <origin>Unknown package origin</origin>
+  <elements>
+    <element>
+      <name>netsim</name>
+      <longname>Network Simulator</longname>
+      <class>Filter/Network</class>
+      <description>An element that simulates network jitter, packet loss and packet duplication</description>
+      <author>Philippe Kalaf &lt;philippe.kalaf@collabora.co.uk&gt;</author>
+      <pads>
+        <caps>
+          <name>sink</name>
+          <direction>sink</direction>
+          <presence>always</presence>
+          <details>ANY</details>
+        </caps>
+        <caps>
+          <name>src</name>
+          <direction>source</direction>
+          <presence>always</presence>
+          <details>ANY</details>
+        </caps>
+      </pads>
+    </element>
+  </elements>
+</plugin>
\ No newline at end of file
diff --git a/docs/plugins/inspect/plugin-ofa.xml b/docs/plugins/inspect/plugin-ofa.xml
index 56b6977..6a673e2 100644
--- a/docs/plugins/inspect/plugin-ofa.xml
+++ b/docs/plugins/inspect/plugin-ofa.xml
@@ -3,7 +3,7 @@
   <description>Calculate MusicIP fingerprint from audio files</description>
   <filename>../../ext/ofa/.libs/libgstofa.so</filename>
   <basename>libgstofa.so</basename>
-  <version>1.6.3</version>
+  <version>1.7.91</version>
   <license>GPL</license>
   <source>gst-plugins-bad</source>
   <package>GStreamer Bad Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-openal.xml b/docs/plugins/inspect/plugin-openal.xml
index ff013d0..a2d736d 100644
--- a/docs/plugins/inspect/plugin-openal.xml
+++ b/docs/plugins/inspect/plugin-openal.xml
@@ -3,7 +3,7 @@
   <description>OpenAL plugin library</description>
   <filename>../../ext/openal/.libs/libgstopenal.so</filename>
   <basename>libgstopenal.so</basename>
-  <version>1.6.3</version>
+  <version>1.7.91</version>
   <license>LGPL</license>
   <source>gst-plugins-bad</source>
   <package>GStreamer Bad Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-opencv.xml b/docs/plugins/inspect/plugin-opencv.xml
index 7c982cd..9bf44e4 100644
--- a/docs/plugins/inspect/plugin-opencv.xml
+++ b/docs/plugins/inspect/plugin-opencv.xml
@@ -3,7 +3,7 @@
   <description>GStreamer OpenCV Plugins</description>
   <filename>../../ext/opencv/.libs/libgstopencv.so</filename>
   <basename>libgstopencv.so</basename>
-  <version>1.6.3</version>
+  <version>1.7.2</version>
   <license>LGPL</license>
   <source>gst-plugins-bad</source>
   <package>GStreamer Bad Plug-ins source release</package>
@@ -83,13 +83,13 @@
           <name>sink</name>
           <direction>sink</direction>
           <presence>always</presence>
-          <details>video/x-raw, format=(string)GRAY8, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details>
+          <details>video/x-raw, format=(string)RGB, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details>
         </caps>
         <caps>
           <name>src</name>
           <direction>source</direction>
           <presence>always</presence>
-          <details>video/x-raw, format=(string)GRAY16_LE, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details>
+          <details>video/x-raw, format=(string)RGB, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details>
         </caps>
       </pads>
     </element>
@@ -125,13 +125,13 @@
           <name>sink</name>
           <direction>sink</direction>
           <presence>always</presence>
-          <details>video/x-raw, format=(string)GRAY8, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details>
+          <details>video/x-raw, format=(string)RGB, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details>
         </caps>
         <caps>
           <name>src</name>
           <direction>source</direction>
           <presence>always</presence>
-          <details>video/x-raw, format=(string)GRAY16_LE, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details>
+          <details>video/x-raw, format=(string)RGB, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details>
         </caps>
       </pads>
     </element>
diff --git a/docs/plugins/inspect/plugin-openexr.xml b/docs/plugins/inspect/plugin-openexr.xml
index 3350ddf..8446fde 100644
--- a/docs/plugins/inspect/plugin-openexr.xml
+++ b/docs/plugins/inspect/plugin-openexr.xml
@@ -3,7 +3,7 @@
   <description>OpenEXR image plugin</description>
   <filename>../../ext/openexr/.libs/libgstopenexr.so</filename>
   <basename>libgstopenexr.so</basename>
-  <version>1.6.3</version>
+  <version>1.7.91</version>
   <license>LGPL</license>
   <source>gst-plugins-bad</source>
   <package>GStreamer Bad Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-opengl.xml b/docs/plugins/inspect/plugin-opengl.xml
index 51e7544..00c8a6c 100644
--- a/docs/plugins/inspect/plugin-opengl.xml
+++ b/docs/plugins/inspect/plugin-opengl.xml
@@ -3,13 +3,34 @@
   <description>OpenGL plugin</description>
   <filename>../../ext/gl/.libs/libgstopengl.so</filename>
   <basename>libgstopengl.so</basename>
-  <version>1.6.3</version>
+  <version>1.7.91</version>
   <license>LGPL</license>
   <source>gst-plugins-bad</source>
   <package>GStreamer Bad Plug-ins source release</package>
   <origin>Unknown package origin</origin>
   <elements>
     <element>
+      <name>glcolorbalance</name>
+      <longname>Video balance</longname>
+      <class>Filter/Effect/Video</class>
+      <description>Adjusts brightness, contrast, hue, saturation on a video stream</description>
+      <author>Matthew Waters &lt;matthew@centricular.com&gt;</author>
+      <pads>
+        <caps>
+          <name>sink</name>
+          <direction>sink</direction>
+          <presence>always</presence>
+          <details>video/x-raw(memory:GLMemory), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string)2D</details>
+        </caps>
+        <caps>
+          <name>src</name>
+          <direction>source</direction>
+          <presence>always</presence>
+          <details>video/x-raw(memory:GLMemory), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string)2D</details>
+        </caps>
+      </pads>
+    </element>
+    <element>
       <name>glcolorconvert</name>
       <longname>OpenGL color converter</longname>
       <class>Filter/Converter/Video</class>
@@ -20,13 +41,13 @@
           <name>sink</name>
           <direction>sink</direction>
           <presence>always</presence>
-          <details>video/x-raw(memory:GLMemory), format=(string){ RGB, RGBx, RGBA, BGR, BGRx, BGRA, xRGB, xBGR, ARGB, ABGR, Y444, I420, YV12, Y42B, Y41B, NV12, NV21, YUY2, UYVY, AYUV, GRAY8, GRAY16_LE, GRAY16_BE, RGB16, BGR16 }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw(memory:GLMemory, meta:GstVideoOverlayComposition), format=(string){ RGB, RGBx, RGBA, BGR, BGRx, BGRA, xRGB, xBGR, ARGB, ABGR, Y444, I420, YV12, Y42B, Y41B, NV12, NV21, YUY2, UYVY, AYUV, GRAY8, GRAY16_LE, GRAY16_BE, RGB16, BGR16 }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details>
+          <details>video/x-raw(memory:GLMemory), format=(string){ RGBA, RGB, RGBx, BGR, BGRx, BGRA, xRGB, xBGR, ARGB, ABGR, Y444, I420, YV12, Y42B, Y41B, NV12, NV21, YUY2, UYVY, AYUV, GRAY8, GRAY16_LE, GRAY16_BE, RGB16, BGR16 }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string){ 2D, rectangle, external-oes }; video/x-raw(memory:GLMemory, meta:GstVideoOverlayComposition), format=(string){ RGBA, RGB, RGBx, BGR, BGRx, BGRA, xRGB, xBGR, ARGB, ABGR, Y444, I420, YV12, Y42B, Y41B, NV12, NV21, YUY2, UYVY, AYUV, GRAY8, GRAY16_LE, GRAY16_BE, RGB16, BGR16 }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string){ 2D, rectangle, external-oes }</details>
         </caps>
         <caps>
           <name>src</name>
           <direction>source</direction>
           <presence>always</presence>
-          <details>video/x-raw(memory:GLMemory), format=(string){ RGB, RGBx, RGBA, BGR, BGRx, BGRA, xRGB, xBGR, ARGB, ABGR, Y444, I420, YV12, Y42B, Y41B, NV12, NV21, YUY2, UYVY, AYUV, GRAY8, GRAY16_LE, GRAY16_BE, RGB16, BGR16 }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw(memory:GLMemory, meta:GstVideoOverlayComposition), format=(string){ RGB, RGBx, RGBA, BGR, BGRx, BGRA, xRGB, xBGR, ARGB, ABGR, Y444, I420, YV12, Y42B, Y41B, NV12, NV21, YUY2, UYVY, AYUV, GRAY8, GRAY16_LE, GRAY16_BE, RGB16, BGR16 }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details>
+          <details>video/x-raw(memory:GLMemory), format=(string){ RGBA, RGB, RGBx, BGR, BGRx, BGRA, xRGB, xBGR, ARGB, ABGR, Y444, I420, YV12, Y42B, Y41B, NV12, NV21, YUY2, UYVY, AYUV, GRAY8, GRAY16_LE, GRAY16_BE, RGB16, BGR16 }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string){ 2D, rectangle, external-oes }; video/x-raw(memory:GLMemory, meta:GstVideoOverlayComposition), format=(string){ RGBA, RGB, RGBx, BGR, BGRx, BGRA, xRGB, xBGR, ARGB, ABGR, Y444, I420, YV12, Y42B, Y41B, NV12, NV21, YUY2, UYVY, AYUV, GRAY8, GRAY16_LE, GRAY16_BE, RGB16, BGR16 }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string){ 2D, rectangle, external-oes }</details>
         </caps>
       </pads>
     </element>
@@ -35,19 +56,20 @@
       <longname>OpenGL color scale</longname>
       <class>Filter/Effect/Video</class>
       <description>Colorspace converter and video scaler</description>
-      <author>Julien Isorce &lt;julien.isorce@gmail.com&gt;</author>
+      <author>Julien Isorce &lt;julien.isorce@gmail.com&gt;
+Matthew Waters &lt;matthew@centricular.com&gt;</author>
       <pads>
         <caps>
           <name>sink</name>
           <direction>sink</direction>
           <presence>always</presence>
-          <details>video/x-raw(memory:GLMemory), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details>
+          <details>video/x-raw(memory:GLMemory), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string)2D</details>
         </caps>
         <caps>
           <name>src</name>
           <direction>source</direction>
           <presence>always</presence>
-          <details>video/x-raw(memory:GLMemory), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details>
+          <details>video/x-raw(memory:GLMemory), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string)2D</details>
         </caps>
       </pads>
     </element>
@@ -62,13 +84,13 @@
           <name>sink</name>
           <direction>sink</direction>
           <presence>always</presence>
-          <details>video/x-raw(memory:GLMemory), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details>
+          <details>video/x-raw(memory:GLMemory), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string)2D</details>
         </caps>
         <caps>
           <name>src</name>
           <direction>source</direction>
           <presence>always</presence>
-          <details>video/x-raw(memory:GLMemory), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details>
+          <details>video/x-raw(memory:GLMemory), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string)2D</details>
         </caps>
       </pads>
     </element>
@@ -83,13 +105,13 @@
           <name>sink</name>
           <direction>sink</direction>
           <presence>always</presence>
-          <details>video/x-raw(memory:GLMemory), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details>
+          <details>video/x-raw(memory:GLMemory), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string)2D</details>
         </caps>
         <caps>
           <name>src</name>
           <direction>source</direction>
           <presence>always</presence>
-          <details>video/x-raw(memory:GLMemory), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details>
+          <details>video/x-raw(memory:GLMemory), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string)2D</details>
         </caps>
       </pads>
     </element>
@@ -104,7 +126,7 @@
           <name>sink</name>
           <direction>sink</direction>
           <presence>always</presence>
-          <details>video/x-raw(memory:GLMemory)</details>
+          <details>video/x-raw(memory:GLMemory); video/x-raw</details>
         </caps>
         <caps>
           <name>src</name>
@@ -125,412 +147,412 @@
           <name>sink</name>
           <direction>sink</direction>
           <presence>always</presence>
-          <details>video/x-raw(memory:GLMemory), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details>
+          <details>video/x-raw(memory:GLMemory), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string)2D</details>
         </caps>
         <caps>
           <name>src</name>
           <direction>source</direction>
           <presence>always</presence>
-          <details>video/x-raw(memory:GLMemory), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details>
+          <details>video/x-raw(memory:GLMemory), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string)2D</details>
         </caps>
       </pads>
     </element>
     <element>
       <name>gleffects_blur</name>
-      <longname>Gstreamer OpenGL Effects</longname>
+      <longname>Blur with 9x9 separable convolution Effect</longname>
       <class>Filter/Effect/Video</class>
-      <description>GL Shading Language effects</description>
+      <description>GL Shading Language effects - Blur with 9x9 separable convolution Effect</description>
       <author>Filippo Argiolas &lt;filippo.argiolas@gmail.com&gt;</author>
       <pads>
         <caps>
           <name>sink</name>
           <direction>sink</direction>
           <presence>always</presence>
-          <details>video/x-raw(memory:GLMemory), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details>
+          <details>video/x-raw(memory:GLMemory), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string)2D</details>
         </caps>
         <caps>
           <name>src</name>
           <direction>source</direction>
           <presence>always</presence>
-          <details>video/x-raw(memory:GLMemory), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details>
+          <details>video/x-raw(memory:GLMemory), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string)2D</details>
         </caps>
       </pads>
     </element>
     <element>
       <name>gleffects_bulge</name>
-      <longname>Gstreamer OpenGL Effects</longname>
+      <longname>Bulge Effect</longname>
       <class>Filter/Effect/Video</class>
-      <description>GL Shading Language effects</description>
+      <description>GL Shading Language effects - Bulge Effect</description>
       <author>Filippo Argiolas &lt;filippo.argiolas@gmail.com&gt;</author>
       <pads>
         <caps>
           <name>sink</name>
           <direction>sink</direction>
           <presence>always</presence>
-          <details>video/x-raw(memory:GLMemory), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details>
+          <details>video/x-raw(memory:GLMemory), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string)2D</details>
         </caps>
         <caps>
           <name>src</name>
           <direction>source</direction>
           <presence>always</presence>
-          <details>video/x-raw(memory:GLMemory), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details>
+          <details>video/x-raw(memory:GLMemory), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string)2D</details>
         </caps>
       </pads>
     </element>
     <element>
       <name>gleffects_fisheye</name>
-      <longname>Gstreamer OpenGL Effects</longname>
+      <longname>FishEye Effect</longname>
       <class>Filter/Effect/Video</class>
-      <description>GL Shading Language effects</description>
+      <description>GL Shading Language effects - FishEye Effect</description>
       <author>Filippo Argiolas &lt;filippo.argiolas@gmail.com&gt;</author>
       <pads>
         <caps>
           <name>sink</name>
           <direction>sink</direction>
           <presence>always</presence>
-          <details>video/x-raw(memory:GLMemory), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details>
+          <details>video/x-raw(memory:GLMemory), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string)2D</details>
         </caps>
         <caps>
           <name>src</name>
           <direction>source</direction>
           <presence>always</presence>
-          <details>video/x-raw(memory:GLMemory), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details>
+          <details>video/x-raw(memory:GLMemory), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string)2D</details>
         </caps>
       </pads>
     </element>
     <element>
       <name>gleffects_glow</name>
-      <longname>Gstreamer OpenGL Effects</longname>
+      <longname>Glow Lighting Effect</longname>
       <class>Filter/Effect/Video</class>
-      <description>GL Shading Language effects</description>
+      <description>GL Shading Language effects - Glow Lighting Effect</description>
       <author>Filippo Argiolas &lt;filippo.argiolas@gmail.com&gt;</author>
       <pads>
         <caps>
           <name>sink</name>
           <direction>sink</direction>
           <presence>always</presence>
-          <details>video/x-raw(memory:GLMemory), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details>
+          <details>video/x-raw(memory:GLMemory), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string)2D</details>
         </caps>
         <caps>
           <name>src</name>
           <direction>source</direction>
           <presence>always</presence>
-          <details>video/x-raw(memory:GLMemory), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details>
+          <details>video/x-raw(memory:GLMemory), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string)2D</details>
         </caps>
       </pads>
     </element>
     <element>
       <name>gleffects_heat</name>
-      <longname>Gstreamer OpenGL Effects</longname>
+      <longname>Heat Signature Effect</longname>
       <class>Filter/Effect/Video</class>
-      <description>GL Shading Language effects</description>
+      <description>GL Shading Language effects - Heat Signature Effect</description>
       <author>Filippo Argiolas &lt;filippo.argiolas@gmail.com&gt;</author>
       <pads>
         <caps>
           <name>sink</name>
           <direction>sink</direction>
           <presence>always</presence>
-          <details>video/x-raw(memory:GLMemory), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details>
+          <details>video/x-raw(memory:GLMemory), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string)2D</details>
         </caps>
         <caps>
           <name>src</name>
           <direction>source</direction>
           <presence>always</presence>
-          <details>video/x-raw(memory:GLMemory), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details>
+          <details>video/x-raw(memory:GLMemory), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string)2D</details>
         </caps>
       </pads>
     </element>
     <element>
       <name>gleffects_identity</name>
-      <longname>Gstreamer OpenGL Effects</longname>
+      <longname>Do nothing Effect</longname>
       <class>Filter/Effect/Video</class>
-      <description>GL Shading Language effects</description>
+      <description>GL Shading Language effects - Do nothing Effect</description>
       <author>Filippo Argiolas &lt;filippo.argiolas@gmail.com&gt;</author>
       <pads>
         <caps>
           <name>sink</name>
           <direction>sink</direction>
           <presence>always</presence>
-          <details>video/x-raw(memory:GLMemory), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details>
+          <details>video/x-raw(memory:GLMemory), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string)2D</details>
         </caps>
         <caps>
           <name>src</name>
           <direction>source</direction>
           <presence>always</presence>
-          <details>video/x-raw(memory:GLMemory), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details>
+          <details>video/x-raw(memory:GLMemory), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string)2D</details>
         </caps>
       </pads>
     </element>
     <element>
       <name>gleffects_laplacian</name>
-      <longname>Gstreamer OpenGL Effects</longname>
+      <longname>Laplacian Convolution Demo Effect</longname>
       <class>Filter/Effect/Video</class>
-      <description>GL Shading Language effects</description>
+      <description>GL Shading Language effects - Laplacian Convolution Demo Effect</description>
       <author>Filippo Argiolas &lt;filippo.argiolas@gmail.com&gt;</author>
       <pads>
         <caps>
           <name>sink</name>
           <direction>sink</direction>
           <presence>always</presence>
-          <details>video/x-raw(memory:GLMemory), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details>
+          <details>video/x-raw(memory:GLMemory), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string)2D</details>
         </caps>
         <caps>
           <name>src</name>
           <direction>source</direction>
           <presence>always</presence>
-          <details>video/x-raw(memory:GLMemory), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details>
+          <details>video/x-raw(memory:GLMemory), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string)2D</details>
         </caps>
       </pads>
     </element>
     <element>
       <name>gleffects_lumaxpro</name>
-      <longname>Gstreamer OpenGL Effects</longname>
+      <longname>Luma Cross Processing Effect</longname>
       <class>Filter/Effect/Video</class>
-      <description>GL Shading Language effects</description>
+      <description>GL Shading Language effects - Luma Cross Processing Effect</description>
       <author>Filippo Argiolas &lt;filippo.argiolas@gmail.com&gt;</author>
       <pads>
         <caps>
           <name>sink</name>
           <direction>sink</direction>
           <presence>always</presence>
-          <details>video/x-raw(memory:GLMemory), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details>
+          <details>video/x-raw(memory:GLMemory), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string)2D</details>
         </caps>
         <caps>
           <name>src</name>
           <direction>source</direction>
           <presence>always</presence>
-          <details>video/x-raw(memory:GLMemory), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details>
+          <details>video/x-raw(memory:GLMemory), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string)2D</details>
         </caps>
       </pads>
     </element>
     <element>
       <name>gleffects_mirror</name>
-      <longname>Gstreamer OpenGL Effects</longname>
+      <longname>Mirror Effect</longname>
       <class>Filter/Effect/Video</class>
-      <description>GL Shading Language effects</description>
+      <description>GL Shading Language effects - Mirror Effect</description>
       <author>Filippo Argiolas &lt;filippo.argiolas@gmail.com&gt;</author>
       <pads>
         <caps>
           <name>sink</name>
           <direction>sink</direction>
           <presence>always</presence>
-          <details>video/x-raw(memory:GLMemory), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details>
+          <details>video/x-raw(memory:GLMemory), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string)2D</details>
         </caps>
         <caps>
           <name>src</name>
           <direction>source</direction>
           <presence>always</presence>
-          <details>video/x-raw(memory:GLMemory), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details>
+          <details>video/x-raw(memory:GLMemory), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string)2D</details>
         </caps>
       </pads>
     </element>
     <element>
       <name>gleffects_sepia</name>
-      <longname>Gstreamer OpenGL Effects</longname>
+      <longname>Sepia Toning Effect</longname>
       <class>Filter/Effect/Video</class>
-      <description>GL Shading Language effects</description>
+      <description>GL Shading Language effects - Sepia Toning Effect</description>
       <author>Filippo Argiolas &lt;filippo.argiolas@gmail.com&gt;</author>
       <pads>
         <caps>
           <name>sink</name>
           <direction>sink</direction>
           <presence>always</presence>
-          <details>video/x-raw(memory:GLMemory), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details>
+          <details>video/x-raw(memory:GLMemory), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string)2D</details>
         </caps>
         <caps>
           <name>src</name>
           <direction>source</direction>
           <presence>always</presence>
-          <details>video/x-raw(memory:GLMemory), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details>
+          <details>video/x-raw(memory:GLMemory), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string)2D</details>
         </caps>
       </pads>
     </element>
     <element>
       <name>gleffects_sin</name>
-      <longname>Gstreamer OpenGL Effects</longname>
+      <longname>All Grey but Red Effect</longname>
       <class>Filter/Effect/Video</class>
-      <description>GL Shading Language effects</description>
+      <description>GL Shading Language effects - All Grey but Red Effect</description>
       <author>Filippo Argiolas &lt;filippo.argiolas@gmail.com&gt;</author>
       <pads>
         <caps>
           <name>sink</name>
           <direction>sink</direction>
           <presence>always</presence>
-          <details>video/x-raw(memory:GLMemory), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details>
+          <details>video/x-raw(memory:GLMemory), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string)2D</details>
         </caps>
         <caps>
           <name>src</name>
           <direction>source</direction>
           <presence>always</presence>
-          <details>video/x-raw(memory:GLMemory), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details>
+          <details>video/x-raw(memory:GLMemory), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string)2D</details>
         </caps>
       </pads>
     </element>
     <element>
       <name>gleffects_sobel</name>
-      <longname>Gstreamer OpenGL Effects</longname>
+      <longname>Sobel edge detection Effect</longname>
       <class>Filter/Effect/Video</class>
-      <description>GL Shading Language effects</description>
+      <description>GL Shading Language effects - Sobel edge detection Effect</description>
       <author>Filippo Argiolas &lt;filippo.argiolas@gmail.com&gt;</author>
       <pads>
         <caps>
           <name>sink</name>
           <direction>sink</direction>
           <presence>always</presence>
-          <details>video/x-raw(memory:GLMemory), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details>
+          <details>video/x-raw(memory:GLMemory), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string)2D</details>
         </caps>
         <caps>
           <name>src</name>
           <direction>source</direction>
           <presence>always</presence>
-          <details>video/x-raw(memory:GLMemory), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details>
+          <details>video/x-raw(memory:GLMemory), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string)2D</details>
         </caps>
       </pads>
     </element>
     <element>
       <name>gleffects_square</name>
-      <longname>Gstreamer OpenGL Effects</longname>
+      <longname>Square Effect</longname>
       <class>Filter/Effect/Video</class>
-      <description>GL Shading Language effects</description>
+      <description>GL Shading Language effects - Square Effect</description>
       <author>Filippo Argiolas &lt;filippo.argiolas@gmail.com&gt;</author>
       <pads>
         <caps>
           <name>sink</name>
           <direction>sink</direction>
           <presence>always</presence>
-          <details>video/x-raw(memory:GLMemory), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details>
+          <details>video/x-raw(memory:GLMemory), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string)2D</details>
         </caps>
         <caps>
           <name>src</name>
           <direction>source</direction>
           <presence>always</presence>
-          <details>video/x-raw(memory:GLMemory), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details>
+          <details>video/x-raw(memory:GLMemory), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string)2D</details>
         </caps>
       </pads>
     </element>
     <element>
       <name>gleffects_squeeze</name>
-      <longname>Gstreamer OpenGL Effects</longname>
+      <longname>Squeeze Effect</longname>
       <class>Filter/Effect/Video</class>
-      <description>GL Shading Language effects</description>
+      <description>GL Shading Language effects - Squeeze Effect</description>
       <author>Filippo Argiolas &lt;filippo.argiolas@gmail.com&gt;</author>
       <pads>
         <caps>
           <name>sink</name>
           <direction>sink</direction>
           <presence>always</presence>
-          <details>video/x-raw(memory:GLMemory), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details>
+          <details>video/x-raw(memory:GLMemory), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string)2D</details>
         </caps>
         <caps>
           <name>src</name>
           <direction>source</direction>
           <presence>always</presence>
-          <details>video/x-raw(memory:GLMemory), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details>
+          <details>video/x-raw(memory:GLMemory), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string)2D</details>
         </caps>
       </pads>
     </element>
     <element>
       <name>gleffects_stretch</name>
-      <longname>Gstreamer OpenGL Effects</longname>
+      <longname>Stretch Effect</longname>
       <class>Filter/Effect/Video</class>
-      <description>GL Shading Language effects</description>
+      <description>GL Shading Language effects - Stretch Effect</description>
       <author>Filippo Argiolas &lt;filippo.argiolas@gmail.com&gt;</author>
       <pads>
         <caps>
           <name>sink</name>
           <direction>sink</direction>
           <presence>always</presence>
-          <details>video/x-raw(memory:GLMemory), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details>
+          <details>video/x-raw(memory:GLMemory), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string)2D</details>
         </caps>
         <caps>
           <name>src</name>
           <direction>source</direction>
           <presence>always</presence>
-          <details>video/x-raw(memory:GLMemory), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details>
+          <details>video/x-raw(memory:GLMemory), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string)2D</details>
         </caps>
       </pads>
     </element>
     <element>
       <name>gleffects_tunnel</name>
-      <longname>Gstreamer OpenGL Effects</longname>
+      <longname>Light Tunnel Effect</longname>
       <class>Filter/Effect/Video</class>
-      <description>GL Shading Language effects</description>
+      <description>GL Shading Language effects - Light Tunnel Effect</description>
       <author>Filippo Argiolas &lt;filippo.argiolas@gmail.com&gt;</author>
       <pads>
         <caps>
           <name>sink</name>
           <direction>sink</direction>
           <presence>always</presence>
-          <details>video/x-raw(memory:GLMemory), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details>
+          <details>video/x-raw(memory:GLMemory), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string)2D</details>
         </caps>
         <caps>
           <name>src</name>
           <direction>source</direction>
           <presence>always</presence>
-          <details>video/x-raw(memory:GLMemory), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details>
+          <details>video/x-raw(memory:GLMemory), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string)2D</details>
         </caps>
       </pads>
     </element>
     <element>
       <name>gleffects_twirl</name>
-      <longname>Gstreamer OpenGL Effects</longname>
+      <longname>Twirl Effect</longname>
       <class>Filter/Effect/Video</class>
-      <description>GL Shading Language effects</description>
+      <description>GL Shading Language effects - Twirl Effect</description>
       <author>Filippo Argiolas &lt;filippo.argiolas@gmail.com&gt;</author>
       <pads>
         <caps>
           <name>sink</name>
           <direction>sink</direction>
           <presence>always</presence>
-          <details>video/x-raw(memory:GLMemory), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details>
+          <details>video/x-raw(memory:GLMemory), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string)2D</details>
         </caps>
         <caps>
           <name>src</name>
           <direction>source</direction>
           <presence>always</presence>
-          <details>video/x-raw(memory:GLMemory), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details>
+          <details>video/x-raw(memory:GLMemory), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string)2D</details>
         </caps>
       </pads>
     </element>
     <element>
       <name>gleffects_xpro</name>
-      <longname>Gstreamer OpenGL Effects</longname>
+      <longname>Cross Processing Effect</longname>
       <class>Filter/Effect/Video</class>
-      <description>GL Shading Language effects</description>
+      <description>GL Shading Language effects - Cross Processing Effect</description>
       <author>Filippo Argiolas &lt;filippo.argiolas@gmail.com&gt;</author>
       <pads>
         <caps>
           <name>sink</name>
           <direction>sink</direction>
           <presence>always</presence>
-          <details>video/x-raw(memory:GLMemory), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details>
+          <details>video/x-raw(memory:GLMemory), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string)2D</details>
         </caps>
         <caps>
           <name>src</name>
           <direction>source</direction>
           <presence>always</presence>
-          <details>video/x-raw(memory:GLMemory), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details>
+          <details>video/x-raw(memory:GLMemory), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string)2D</details>
         </caps>
       </pads>
     </element>
     <element>
       <name>gleffects_xray</name>
-      <longname>Gstreamer OpenGL Effects</longname>
+      <longname>Glowing negative effect</longname>
       <class>Filter/Effect/Video</class>
-      <description>GL Shading Language effects</description>
+      <description>GL Shading Language effects - Glowing negative effect</description>
       <author>Filippo Argiolas &lt;filippo.argiolas@gmail.com&gt;</author>
       <pads>
         <caps>
           <name>sink</name>
           <direction>sink</direction>
           <presence>always</presence>
-          <details>video/x-raw(memory:GLMemory), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details>
+          <details>video/x-raw(memory:GLMemory), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string)2D</details>
         </caps>
         <caps>
           <name>src</name>
           <direction>source</direction>
           <presence>always</presence>
-          <details>video/x-raw(memory:GLMemory), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details>
+          <details>video/x-raw(memory:GLMemory), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string)2D</details>
         </caps>
       </pads>
     </element>
@@ -545,13 +567,13 @@
           <name>sink</name>
           <direction>sink</direction>
           <presence>always</presence>
-          <details>video/x-raw(memory:GLMemory), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details>
+          <details>video/x-raw(memory:GLMemory), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string)2D</details>
         </caps>
         <caps>
           <name>src</name>
           <direction>source</direction>
           <presence>always</presence>
-          <details>video/x-raw(memory:GLMemory), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details>
+          <details>video/x-raw(memory:GLMemory), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string)2D</details>
         </caps>
       </pads>
     </element>
@@ -566,7 +588,7 @@
           <name>sink</name>
           <direction>sink</direction>
           <presence>always</presence>
-          <details>video/x-raw(memory:GLMemory, meta:GstVideoOverlayComposition), format=(string){ RGBA, BGRA, RGBx, BGRx, ARGB, ABGR, xRGB, xBGR, RGB, BGR, RGB16, BGR16, AYUV, I420, YV12, NV12, NV21, YUY2, UYVY, Y41B, Y42B, Y444, GRAY8, GRAY16_LE, GRAY16_BE }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw(memory:EGLImage, meta:GstVideoOverlayComposition), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw(meta:GstVideoGLTextureUploadMeta, meta:GstVideoOverlayComposition), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw(memory:SystemMemory, meta:GstVideoOverlayComposition), format=(string){ RGBA, BGRA, RGBx, BGRx, ARGB, ABGR, xRGB, xBGR, RGB, BGR, RGB16, BGR16, AYUV, I420, YV12, NV12, NV21, YUY2, UYVY, Y41B, Y42B, Y444, GRAY8, GRAY16_LE, GRAY16_BE }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw(memory:GLMemory), format=(string){ RGBA, BGRA, RGBx, BGRx, ARGB, ABGR, xRGB, xBGR, RGB, BGR, RGB16, BGR16, AYUV, I420, YV12, NV12, NV21, YUY2, UYVY, Y41B, Y42B, Y444, GRAY8, GRAY16_LE, GRAY16_BE }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw(memory:EGLImage), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw(meta:GstVideoGLTextureUploadMeta), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw, format=(string){ RGBA, BGRA, RGBx, BGRx, ARGB, ABGR, xRGB, xBGR, RGB, BGR, RGB16, BGR16, AYUV, I420, YV12, NV12, NV21, YUY2, UYVY, Y41B, Y42B, Y444, GRAY8, GRAY16_LE, GRAY16_BE }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details>
+          <details>video/x-raw(memory:GLMemory, meta:GstVideoOverlayComposition), format=(string){ RGBA, BGRA, RGBx, BGRx, ARGB, ABGR, xRGB, xBGR, RGB, BGR, RGB16, BGR16, AYUV, I420, YV12, NV12, NV21, YUY2, UYVY, Y41B, Y42B, Y444, GRAY8, GRAY16_LE, GRAY16_BE }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw(memory:EGLImage, meta:GstVideoOverlayComposition), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw(memory:SystemMemory, meta:GstVideoOverlayComposition), format=(string){ RGBA, BGRA, RGBx, BGRx, ARGB, ABGR, xRGB, xBGR, RGB, BGR, RGB16, BGR16, AYUV, I420, YV12, NV12, NV21, YUY2, UYVY, Y41B, Y42B, Y444, GRAY8, GRAY16_LE, GRAY16_BE }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw(meta:GstVideoGLTextureUploadMeta, meta:GstVideoOverlayComposition), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw(memory:GLMemory), format=(string){ RGBA, BGRA, RGBx, BGRx, ARGB, ABGR, xRGB, xBGR, RGB, BGR, RGB16, BGR16, AYUV, I420, YV12, NV12, NV21, YUY2, UYVY, Y41B, Y42B, Y444, GRAY8, GRAY16_LE, GRAY16_BE }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw(memory:EGLImage), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw, format=(string){ RGBA, BGRA, RGBx, BGRx, ARGB, ABGR, xRGB, xBGR, RGB, BGR, RGB16, BGR16, AYUV, I420, YV12, NV12, NV21, YUY2, UYVY, Y41B, Y42B, Y444, GRAY8, GRAY16_LE, GRAY16_BE }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw(meta:GstVideoGLTextureUploadMeta), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details>
         </caps>
         <caps>
           <name>src</name>
@@ -587,13 +609,13 @@
           <name>sink</name>
           <direction>sink</direction>
           <presence>always</presence>
-          <details>video/x-raw(memory:GLMemory), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details>
+          <details>video/x-raw(memory:GLMemory), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string)2D</details>
         </caps>
         <caps>
           <name>src</name>
           <direction>source</direction>
           <presence>always</presence>
-          <details>video/x-raw(memory:GLMemory), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details>
+          <details>video/x-raw(memory:GLMemory), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string)2D</details>
         </caps>
       </pads>
     </element>
@@ -608,13 +630,13 @@
           <name>sink</name>
           <direction>sink</direction>
           <presence>always</presence>
-          <details>video/x-raw(memory:GLMemory), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details>
+          <details>video/x-raw(memory:GLMemory), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string)2D</details>
         </caps>
         <caps>
           <name>src</name>
           <direction>source</direction>
           <presence>always</presence>
-          <details>video/x-raw(memory:GLMemory), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details>
+          <details>video/x-raw(memory:GLMemory), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string)2D</details>
         </caps>
       </pads>
     </element>
@@ -629,7 +651,7 @@
           <name>sink</name>
           <direction>sink</direction>
           <presence>always</presence>
-          <details>video/x-raw(memory:GLMemory, meta:GstVideoOverlayComposition), format=(string){ RGBA, BGRA, RGBx, BGRx, ARGB, ABGR, xRGB, xBGR, RGB, BGR, RGB16, BGR16, AYUV, I420, YV12, NV12, NV21, YUY2, UYVY, Y41B, Y42B, Y444, GRAY8, GRAY16_LE, GRAY16_BE }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw(memory:EGLImage, meta:GstVideoOverlayComposition), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw(meta:GstVideoGLTextureUploadMeta, meta:GstVideoOverlayComposition), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw(memory:SystemMemory, meta:GstVideoOverlayComposition), format=(string){ RGBA, BGRA, RGBx, BGRx, ARGB, ABGR, xRGB, xBGR, RGB, BGR, RGB16, BGR16, AYUV, I420, YV12, NV12, NV21, YUY2, UYVY, Y41B, Y42B, Y444, GRAY8, GRAY16_LE, GRAY16_BE }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw(memory:GLMemory), format=(string){ RGBA, BGRA, RGBx, BGRx, ARGB, ABGR, xRGB, xBGR, RGB, BGR, RGB16, BGR16, AYUV, I420, YV12, NV12, NV21, YUY2, UYVY, Y41B, Y42B, Y444, GRAY8, GRAY16_LE, GRAY16_BE }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw(memory:EGLImage), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw(meta:GstVideoGLTextureUploadMeta), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw, format=(string){ RGBA, BGRA, RGBx, BGRx, ARGB, ABGR, xRGB, xBGR, RGB, BGR, RGB16, BGR16, AYUV, I420, YV12, NV12, NV21, YUY2, UYVY, Y41B, Y42B, Y444, GRAY8, GRAY16_LE, GRAY16_BE }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details>
+          <details>video/x-raw(memory:GLMemory, meta:GstVideoOverlayComposition), format=(string){ RGBA, BGRA, RGBx, BGRx, ARGB, ABGR, xRGB, xBGR, RGB, BGR, RGB16, BGR16, AYUV, I420, YV12, NV12, NV21, YUY2, UYVY, Y41B, Y42B, Y444, GRAY8, GRAY16_LE, GRAY16_BE }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw(memory:EGLImage, meta:GstVideoOverlayComposition), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw(memory:SystemMemory, meta:GstVideoOverlayComposition), format=(string){ RGBA, BGRA, RGBx, BGRx, ARGB, ABGR, xRGB, xBGR, RGB, BGR, RGB16, BGR16, AYUV, I420, YV12, NV12, NV21, YUY2, UYVY, Y41B, Y42B, Y444, GRAY8, GRAY16_LE, GRAY16_BE }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw(meta:GstVideoGLTextureUploadMeta, meta:GstVideoOverlayComposition), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw(memory:GLMemory), format=(string){ RGBA, BGRA, RGBx, BGRx, ARGB, ABGR, xRGB, xBGR, RGB, BGR, RGB16, BGR16, AYUV, I420, YV12, NV12, NV21, YUY2, UYVY, Y41B, Y42B, Y444, GRAY8, GRAY16_LE, GRAY16_BE }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw(memory:EGLImage), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw, format=(string){ RGBA, BGRA, RGBx, BGRx, ARGB, ABGR, xRGB, xBGR, RGB, BGR, RGB16, BGR16, AYUV, I420, YV12, NV12, NV21, YUY2, UYVY, Y41B, Y42B, Y444, GRAY8, GRAY16_LE, GRAY16_BE }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw(meta:GstVideoGLTextureUploadMeta), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details>
         </caps>
       </pads>
     </element>
@@ -644,7 +666,7 @@
           <name>sink</name>
           <direction>sink</direction>
           <presence>always</presence>
-          <details>video/x-raw(memory:GLMemory), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw(memory:GLMemory, meta:GstVideoOverlayComposition), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details>
+          <details>video/x-raw(memory:GLMemory), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string){ 2D, external-oes }; video/x-raw(memory:GLMemory, meta:GstVideoOverlayComposition), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string){ 2D, external-oes }</details>
         </caps>
       </pads>
     </element>
@@ -659,7 +681,7 @@
           <name>sink_%u</name>
           <direction>sink</direction>
           <presence>request</presence>
-          <details>video/x-raw(memory:GLMemory, meta:GstVideoOverlayComposition), format=(string){ RGBA, BGRA, RGBx, BGRx, ARGB, ABGR, xRGB, xBGR, RGB, BGR, RGB16, BGR16, AYUV, I420, YV12, NV12, NV21, YUY2, UYVY, Y41B, Y42B, Y444, GRAY8, GRAY16_LE, GRAY16_BE }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw(memory:EGLImage, meta:GstVideoOverlayComposition), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw(meta:GstVideoGLTextureUploadMeta, meta:GstVideoOverlayComposition), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw(memory:SystemMemory, meta:GstVideoOverlayComposition), format=(string){ RGBA, BGRA, RGBx, BGRx, ARGB, ABGR, xRGB, xBGR, RGB, BGR, RGB16, BGR16, AYUV, I420, YV12, NV12, NV21, YUY2, UYVY, Y41B, Y42B, Y444, GRAY8, GRAY16_LE, GRAY16_BE }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw(memory:GLMemory), format=(string){ RGBA, BGRA, RGBx, BGRx, ARGB, ABGR, xRGB, xBGR, RGB, BGR, RGB16, BGR16, AYUV, I420, YV12, NV12, NV21, YUY2, UYVY, Y41B, Y42B, Y444, GRAY8, GRAY16_LE, GRAY16_BE }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw(memory:EGLImage), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw(meta:GstVideoGLTextureUploadMeta), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw, format=(string){ RGBA, BGRA, RGBx, BGRx, ARGB, ABGR, xRGB, xBGR, RGB, BGR, RGB16, BGR16, AYUV, I420, YV12, NV12, NV21, YUY2, UYVY, Y41B, Y42B, Y444, GRAY8, GRAY16_LE, GRAY16_BE }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details>
+          <details>video/x-raw(memory:GLMemory, meta:GstVideoOverlayComposition), format=(string){ RGBA, BGRA, RGBx, BGRx, ARGB, ABGR, xRGB, xBGR, RGB, BGR, RGB16, BGR16, AYUV, I420, YV12, NV12, NV21, YUY2, UYVY, Y41B, Y42B, Y444, GRAY8, GRAY16_LE, GRAY16_BE }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw(memory:EGLImage, meta:GstVideoOverlayComposition), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw(memory:SystemMemory, meta:GstVideoOverlayComposition), format=(string){ RGBA, BGRA, RGBx, BGRx, ARGB, ABGR, xRGB, xBGR, RGB, BGR, RGB16, BGR16, AYUV, I420, YV12, NV12, NV21, YUY2, UYVY, Y41B, Y42B, Y444, GRAY8, GRAY16_LE, GRAY16_BE }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw(meta:GstVideoGLTextureUploadMeta, meta:GstVideoOverlayComposition), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw(memory:GLMemory), format=(string){ RGBA, BGRA, RGBx, BGRx, ARGB, ABGR, xRGB, xBGR, RGB, BGR, RGB16, BGR16, AYUV, I420, YV12, NV12, NV21, YUY2, UYVY, Y41B, Y42B, Y444, GRAY8, GRAY16_LE, GRAY16_BE }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw(memory:EGLImage), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw, format=(string){ RGBA, BGRA, RGBx, BGRx, ARGB, ABGR, xRGB, xBGR, RGB, BGR, RGB16, BGR16, AYUV, I420, YV12, NV12, NV21, YUY2, UYVY, Y41B, Y42B, Y444, GRAY8, GRAY16_LE, GRAY16_BE }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw(meta:GstVideoGLTextureUploadMeta), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details>
         </caps>
         <caps>
           <name>src</name>
@@ -701,13 +723,13 @@
           <name>sink</name>
           <direction>sink</direction>
           <presence>always</presence>
-          <details>video/x-raw(memory:GLMemory), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details>
+          <details>video/x-raw(memory:GLMemory), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string)2D</details>
         </caps>
         <caps>
           <name>src</name>
           <direction>source</direction>
           <presence>always</presence>
-          <details>video/x-raw(memory:GLMemory), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details>
+          <details>video/x-raw(memory:GLMemory), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string)2D</details>
         </caps>
       </pads>
     </element>
@@ -715,20 +737,20 @@
       <name>glshader</name>
       <longname>OpenGL fragment shader filter</longname>
       <class>Filter/Effect</class>
-      <description>Load GLSL fragment shader from file</description>
-      <author>&lt;luc.deschenaux@freesurf.ch&gt;</author>
+      <description>Perform operations with a GLSL shader</description>
+      <author>&lt;matthew@centricular.com&gt;</author>
       <pads>
         <caps>
           <name>sink</name>
           <direction>sink</direction>
           <presence>always</presence>
-          <details>video/x-raw(memory:GLMemory), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details>
+          <details>video/x-raw(memory:GLMemory), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string)2D</details>
         </caps>
         <caps>
           <name>src</name>
           <direction>source</direction>
           <presence>always</presence>
-          <details>video/x-raw(memory:GLMemory), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details>
+          <details>video/x-raw(memory:GLMemory), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string)2D</details>
         </caps>
       </pads>
     </element>
@@ -743,7 +765,7 @@
           <name>sink</name>
           <direction>sink</direction>
           <presence>always</presence>
-          <details>video/x-raw(memory:GLMemory, meta:GstVideoOverlayComposition), format=(string){ RGBA, BGRA, RGBx, BGRx, ARGB, ABGR, xRGB, xBGR, RGB, BGR, RGB16, BGR16, AYUV, I420, YV12, NV12, NV21, YUY2, UYVY, Y41B, Y42B, Y444, GRAY8, GRAY16_LE, GRAY16_BE }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw(memory:EGLImage, meta:GstVideoOverlayComposition), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw(meta:GstVideoGLTextureUploadMeta, meta:GstVideoOverlayComposition), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw(memory:SystemMemory, meta:GstVideoOverlayComposition), format=(string){ RGBA, BGRA, RGBx, BGRx, ARGB, ABGR, xRGB, xBGR, RGB, BGR, RGB16, BGR16, AYUV, I420, YV12, NV12, NV21, YUY2, UYVY, Y41B, Y42B, Y444, GRAY8, GRAY16_LE, GRAY16_BE }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw(memory:GLMemory), format=(string){ RGBA, BGRA, RGBx, BGRx, ARGB, ABGR, xRGB, xBGR, RGB, BGR, RGB16, BGR16, AYUV, I420, YV12, NV12, NV21, YUY2, UYVY, Y41B, Y42B, Y444, GRAY8, GRAY16_LE, GRAY16_BE }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw(memory:EGLImage), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw(meta:GstVideoGLTextureUploadMeta), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw, format=(string){ RGBA, BGRA, RGBx, BGRx, ARGB, ABGR, xRGB, xBGR, RGB, BGR, RGB16, BGR16, AYUV, I420, YV12, NV12, NV21, YUY2, UYVY, Y41B, Y42B, Y444, GRAY8, GRAY16_LE, GRAY16_BE }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details>
+          <details>video/x-raw(memory:GLMemory, meta:GstVideoOverlayComposition), format=(string){ RGBA, BGRA, RGBx, BGRx, ARGB, ABGR, xRGB, xBGR, RGB, BGR, RGB16, BGR16, AYUV, I420, YV12, NV12, NV21, YUY2, UYVY, Y41B, Y42B, Y444, GRAY8, GRAY16_LE, GRAY16_BE }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw(memory:EGLImage, meta:GstVideoOverlayComposition), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw(memory:SystemMemory, meta:GstVideoOverlayComposition), format=(string){ RGBA, BGRA, RGBx, BGRx, ARGB, ABGR, xRGB, xBGR, RGB, BGR, RGB16, BGR16, AYUV, I420, YV12, NV12, NV21, YUY2, UYVY, Y41B, Y42B, Y444, GRAY8, GRAY16_LE, GRAY16_BE }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw(meta:GstVideoGLTextureUploadMeta, meta:GstVideoOverlayComposition), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw(memory:GLMemory), format=(string){ RGBA, BGRA, RGBx, BGRx, ARGB, ABGR, xRGB, xBGR, RGB, BGR, RGB16, BGR16, AYUV, I420, YV12, NV12, NV21, YUY2, UYVY, Y41B, Y42B, Y444, GRAY8, GRAY16_LE, GRAY16_BE }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw(memory:EGLImage), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw, format=(string){ RGBA, BGRA, RGBx, BGRx, ARGB, ABGR, xRGB, xBGR, RGB, BGR, RGB16, BGR16, AYUV, I420, YV12, NV12, NV21, YUY2, UYVY, Y41B, Y42B, Y444, GRAY8, GRAY16_LE, GRAY16_BE }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw(meta:GstVideoGLTextureUploadMeta), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details>
         </caps>
       </pads>
     </element>
@@ -773,13 +795,13 @@
           <name>sink_%u</name>
           <direction>sink</direction>
           <presence>request</presence>
-          <details>video/x-raw(memory:GLMemory), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw(meta:GstVideoGLTextureUploadMeta), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw, format=(string){ RGB, RGBx, RGBA, BGR, BGRx, BGRA, xRGB, xBGR, ARGB, ABGR, Y444, I420, YV12, Y42B, Y41B, NV12, NV21, YUY2, UYVY, AYUV, GRAY8, GRAY16_LE, GRAY16_BE, RGB16, BGR16 }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details>
+          <details>video/x-raw(memory:GLMemory), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string)2D; video/x-raw(meta:GstVideoGLTextureUploadMeta), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw, format=(string){ RGBA, RGB, RGBx, BGR, BGRx, BGRA, xRGB, xBGR, ARGB, ABGR, Y444, I420, YV12, Y42B, Y41B, NV12, NV21, YUY2, UYVY, AYUV, GRAY8, GRAY16_LE, GRAY16_BE, RGB16, BGR16 }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details>
         </caps>
         <caps>
           <name>src</name>
           <direction>source</direction>
           <presence>always</presence>
-          <details>video/x-raw(memory:GLMemory), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw(meta:GstVideoGLTextureUploadMeta), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw, format=(string){ RGB, RGBx, RGBA, BGR, BGRx, BGRA, xRGB, xBGR, ARGB, ABGR, Y444, I420, YV12, Y42B, Y41B, NV12, NV21, YUY2, UYVY, AYUV, GRAY8, GRAY16_LE, GRAY16_BE, RGB16, BGR16 }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details>
+          <details>video/x-raw(memory:GLMemory), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string)2D; video/x-raw(meta:GstVideoGLTextureUploadMeta), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw, format=(string){ RGBA, RGB, RGBx, BGR, BGRx, BGRA, xRGB, xBGR, ARGB, ABGR, Y444, I420, YV12, Y42B, Y41B, NV12, NV21, YUY2, UYVY, AYUV, GRAY8, GRAY16_LE, GRAY16_BE, RGB16, BGR16 }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details>
         </caps>
       </pads>
     </element>
@@ -795,7 +817,7 @@
           <name>sink</name>
           <direction>sink</direction>
           <presence>always</presence>
-          <details>video/x-raw(memory:GLMemory), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw(memory:EGLImage), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw(meta:GstVideoGLTextureUploadMeta), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw, format=(string){ RGB, RGBx, RGBA, BGR, BGRx, BGRA, xRGB, xBGR, ARGB, ABGR, Y444, I420, YV12, Y42B, Y41B, NV12, NV21, YUY2, UYVY, AYUV, GRAY8, GRAY16_LE, GRAY16_BE, RGB16, BGR16 }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details>
+          <details>video/x-raw(memory:GLMemory), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw(memory:EGLImage), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw(meta:GstVideoGLTextureUploadMeta), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw, format=(string){ RGBA, RGB, RGBx, BGR, BGRx, BGRA, xRGB, xBGR, ARGB, ABGR, Y444, I420, YV12, Y42B, Y41B, NV12, NV21, YUY2, UYVY, AYUV, GRAY8, GRAY16_LE, GRAY16_BE, RGB16, BGR16 }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details>
         </caps>
         <caps>
           <name>left</name>
@@ -822,7 +844,7 @@
           <name>src</name>
           <direction>source</direction>
           <presence>always</presence>
-          <details>video/x-raw(memory:GLMemory), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details>
+          <details>video/x-raw(memory:GLMemory), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string)2D</details>
         </caps>
       </pads>
     </element>
@@ -837,7 +859,7 @@
           <name>sink</name>
           <direction>sink</direction>
           <presence>always</presence>
-          <details>video/x-raw(memory:GLMemory, meta:GstVideoOverlayComposition), format=(string){ RGBA, BGRA, RGBx, BGRx, ARGB, ABGR, xRGB, xBGR, RGB, BGR, RGB16, BGR16, AYUV, I420, YV12, NV12, NV21, YUY2, UYVY, Y41B, Y42B, Y444, GRAY8, GRAY16_LE, GRAY16_BE }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw(memory:EGLImage, meta:GstVideoOverlayComposition), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw(meta:GstVideoGLTextureUploadMeta, meta:GstVideoOverlayComposition), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw(memory:SystemMemory, meta:GstVideoOverlayComposition), format=(string){ RGBA, BGRA, RGBx, BGRx, ARGB, ABGR, xRGB, xBGR, RGB, BGR, RGB16, BGR16, AYUV, I420, YV12, NV12, NV21, YUY2, UYVY, Y41B, Y42B, Y444, GRAY8, GRAY16_LE, GRAY16_BE }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw(memory:GLMemory), format=(string){ RGBA, BGRA, RGBx, BGRx, ARGB, ABGR, xRGB, xBGR, RGB, BGR, RGB16, BGR16, AYUV, I420, YV12, NV12, NV21, YUY2, UYVY, Y41B, Y42B, Y444, GRAY8, GRAY16_LE, GRAY16_BE }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw(memory:EGLImage), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw(meta:GstVideoGLTextureUploadMeta), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw, format=(string){ RGBA, BGRA, RGBx, BGRx, ARGB, ABGR, xRGB, xBGR, RGB, BGR, RGB16, BGR16, AYUV, I420, YV12, NV12, NV21, YUY2, UYVY, Y41B, Y42B, Y444, GRAY8, GRAY16_LE, GRAY16_BE }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details>
+          <details>video/x-raw(memory:GLMemory, meta:GstVideoOverlayComposition), format=(string){ RGBA, BGRA, RGBx, BGRx, ARGB, ABGR, xRGB, xBGR, RGB, BGR, RGB16, BGR16, AYUV, I420, YV12, NV12, NV21, YUY2, UYVY, Y41B, Y42B, Y444, GRAY8, GRAY16_LE, GRAY16_BE }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw(memory:EGLImage, meta:GstVideoOverlayComposition), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw(memory:SystemMemory, meta:GstVideoOverlayComposition), format=(string){ RGBA, BGRA, RGBx, BGRx, ARGB, ABGR, xRGB, xBGR, RGB, BGR, RGB16, BGR16, AYUV, I420, YV12, NV12, NV21, YUY2, UYVY, Y41B, Y42B, Y444, GRAY8, GRAY16_LE, GRAY16_BE }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw(meta:GstVideoGLTextureUploadMeta, meta:GstVideoOverlayComposition), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw(memory:GLMemory), format=(string){ RGBA, BGRA, RGBx, BGRx, ARGB, ABGR, xRGB, xBGR, RGB, BGR, RGB16, BGR16, AYUV, I420, YV12, NV12, NV21, YUY2, UYVY, Y41B, Y42B, Y444, GRAY8, GRAY16_LE, GRAY16_BE }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw(memory:EGLImage), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw, format=(string){ RGBA, BGRA, RGBx, BGRx, ARGB, ABGR, xRGB, xBGR, RGB, BGR, RGB16, BGR16, AYUV, I420, YV12, NV12, NV21, YUY2, UYVY, Y41B, Y42B, Y444, GRAY8, GRAY16_LE, GRAY16_BE }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw(meta:GstVideoGLTextureUploadMeta), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details>
         </caps>
         <caps>
           <name>src</name>
@@ -858,7 +880,7 @@
           <name>sink_%u</name>
           <direction>sink</direction>
           <presence>request</presence>
-          <details>video/x-raw(memory:GLMemory, meta:GstVideoOverlayComposition), format=(string){ RGBA, BGRA, RGBx, BGRx, ARGB, ABGR, xRGB, xBGR, RGB, BGR, RGB16, BGR16, AYUV, I420, YV12, NV12, NV21, YUY2, UYVY, Y41B, Y42B, Y444, GRAY8, GRAY16_LE, GRAY16_BE }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw(memory:EGLImage, meta:GstVideoOverlayComposition), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw(meta:GstVideoGLTextureUploadMeta, meta:GstVideoOverlayComposition), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw(memory:SystemMemory, meta:GstVideoOverlayComposition), format=(string){ RGBA, BGRA, RGBx, BGRx, ARGB, ABGR, xRGB, xBGR, RGB, BGR, RGB16, BGR16, AYUV, I420, YV12, NV12, NV21, YUY2, UYVY, Y41B, Y42B, Y444, GRAY8, GRAY16_LE, GRAY16_BE }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw(memory:GLMemory), format=(string){ RGBA, BGRA, RGBx, BGRx, ARGB, ABGR, xRGB, xBGR, RGB, BGR, RGB16, BGR16, AYUV, I420, YV12, NV12, NV21, YUY2, UYVY, Y41B, Y42B, Y444, GRAY8, GRAY16_LE, GRAY16_BE }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw(memory:EGLImage), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw(meta:GstVideoGLTextureUploadMeta), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw, format=(string){ RGBA, BGRA, RGBx, BGRx, ARGB, ABGR, xRGB, xBGR, RGB, BGR, RGB16, BGR16, AYUV, I420, YV12, NV12, NV21, YUY2, UYVY, Y41B, Y42B, Y444, GRAY8, GRAY16_LE, GRAY16_BE }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details>
+          <details>video/x-raw(memory:GLMemory, meta:GstVideoOverlayComposition), format=(string){ RGBA, BGRA, RGBx, BGRx, ARGB, ABGR, xRGB, xBGR, RGB, BGR, RGB16, BGR16, AYUV, I420, YV12, NV12, NV21, YUY2, UYVY, Y41B, Y42B, Y444, GRAY8, GRAY16_LE, GRAY16_BE }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw(memory:EGLImage, meta:GstVideoOverlayComposition), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw(memory:SystemMemory, meta:GstVideoOverlayComposition), format=(string){ RGBA, BGRA, RGBx, BGRx, ARGB, ABGR, xRGB, xBGR, RGB, BGR, RGB16, BGR16, AYUV, I420, YV12, NV12, NV21, YUY2, UYVY, Y41B, Y42B, Y444, GRAY8, GRAY16_LE, GRAY16_BE }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw(meta:GstVideoGLTextureUploadMeta, meta:GstVideoOverlayComposition), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw(memory:GLMemory), format=(string){ RGBA, BGRA, RGBx, BGRx, ARGB, ABGR, xRGB, xBGR, RGB, BGR, RGB16, BGR16, AYUV, I420, YV12, NV12, NV21, YUY2, UYVY, Y41B, Y42B, Y444, GRAY8, GRAY16_LE, GRAY16_BE }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw(memory:EGLImage), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw, format=(string){ RGBA, BGRA, RGBx, BGRx, ARGB, ABGR, xRGB, xBGR, RGB, BGR, RGB16, BGR16, AYUV, I420, YV12, NV12, NV21, YUY2, UYVY, Y41B, Y42B, Y444, GRAY8, GRAY16_LE, GRAY16_BE }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw(meta:GstVideoGLTextureUploadMeta), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details>
         </caps>
         <caps>
           <name>src</name>
@@ -901,13 +923,13 @@
           <name>sink</name>
           <direction>sink</direction>
           <presence>always</presence>
-          <details>video/x-raw(memory:GLMemory), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details>
+          <details>video/x-raw(memory:GLMemory), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string)2D</details>
         </caps>
         <caps>
           <name>src</name>
           <direction>source</direction>
           <presence>always</presence>
-          <details>video/x-raw(memory:GLMemory), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details>
+          <details>video/x-raw(memory:GLMemory), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string)2D</details>
         </caps>
       </pads>
     </element>
diff --git a/docs/plugins/inspect/plugin-openh264.xml b/docs/plugins/inspect/plugin-openh264.xml
new file mode 100644
index 0000000..2c0bb5e
--- /dev/null
+++ b/docs/plugins/inspect/plugin-openh264.xml
@@ -0,0 +1,55 @@
+<plugin>
+  <name>openh264</name>
+  <description>OpenH264 encoder/decoder plugin</description>
+  <filename>../../ext/openh264/.libs/libgstopenh264.so</filename>
+  <basename>libgstopenh264.so</basename>
+  <version>1.5.0.1</version>
+  <license>BSD</license>
+  <source>gst-plugins-bad</source>
+  <package>OpenWebRTC GStreamer plugins</package>
+  <origin>http://www.ericsson.com</origin>
+  <elements>
+    <element>
+      <name>openh264dec</name>
+      <longname>OpenH264 video decoder</longname>
+      <class>Decoder/Video</class>
+      <description>OpenH264 video decoder</description>
+      <author>Ericsson AB, http://www.ericsson.com</author>
+      <pads>
+        <caps>
+          <name>sink</name>
+          <direction>sink</direction>
+          <presence>always</presence>
+          <details>video/x-h264, stream-format=(string)byte-stream, alignment=(string)au, profile=(string){ constrained-baseline, baseline }</details>
+        </caps>
+        <caps>
+          <name>src</name>
+          <direction>source</direction>
+          <presence>always</presence>
+          <details>video/x-raw, format=(string)I420, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details>
+        </caps>
+      </pads>
+    </element>
+    <element>
+      <name>openh264enc</name>
+      <longname>OpenH264 video encoder</longname>
+      <class>Encoder/Video</class>
+      <description>OpenH264 video encoder</description>
+      <author>Ericsson AB, http://www.ericsson.com</author>
+      <pads>
+        <caps>
+          <name>sink</name>
+          <direction>sink</direction>
+          <presence>always</presence>
+          <details>video/x-raw, format=(string)I420, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details>
+        </caps>
+        <caps>
+          <name>src</name>
+          <direction>source</direction>
+          <presence>always</presence>
+          <details>video/x-h264, stream-format=(string)avc, alignment=(string)au, profile=(string)baseline</details>
+        </caps>
+      </pads>
+    </element>
+  </elements>
+</plugin>
\ No newline at end of file
diff --git a/docs/plugins/inspect/plugin-openjpeg.xml b/docs/plugins/inspect/plugin-openjpeg.xml
index 8e18472..96521b5 100644
--- a/docs/plugins/inspect/plugin-openjpeg.xml
+++ b/docs/plugins/inspect/plugin-openjpeg.xml
@@ -3,7 +3,7 @@
   <description>OpenJPEG-based JPEG2000 image decoder/encoder</description>
   <filename>../../ext/openjpeg/.libs/libgstopenjpeg.so</filename>
   <basename>libgstopenjpeg.so</basename>
-  <version>1.6.3</version>
+  <version>1.7.91</version>
   <license>LGPL</license>
   <source>gst-plugins-bad</source>
   <package>GStreamer Bad Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-opus.xml b/docs/plugins/inspect/plugin-opus.xml
deleted file mode 100644
index f1f1977..0000000
--- a/docs/plugins/inspect/plugin-opus.xml
+++ /dev/null
@@ -1,118 +0,0 @@
-<plugin>
-  <name>opus</name>
-  <description>OPUS plugin library</description>
-  <filename>../../ext/opus/.libs/libgstopus.so</filename>
-  <basename>libgstopus.so</basename>
-  <version>1.6.3</version>
-  <license>LGPL</license>
-  <source>gst-plugins-bad</source>
-  <package>GStreamer Bad Plug-ins source release</package>
-  <origin>Unknown package origin</origin>
-  <elements>
-    <element>
-      <name>opusdec</name>
-      <longname>Opus audio decoder</longname>
-      <class>Codec/Decoder/Audio</class>
-      <description>decode opus streams to audio</description>
-      <author>Vincent Penquerc&apos;h &lt;vincent.penquerch@collabora.co.uk&gt;</author>
-      <pads>
-        <caps>
-          <name>sink</name>
-          <direction>sink</direction>
-          <presence>always</presence>
-          <details>audio/x-opus</details>
-        </caps>
-        <caps>
-          <name>src</name>
-          <direction>source</direction>
-          <presence>always</presence>
-          <details>audio/x-raw, format=(string)S16LE, layout=(string)interleaved, rate=(int){ 48000, 24000, 16000, 12000, 8000 }, channels=(int)[ 1, 8 ]</details>
-        </caps>
-      </pads>
-    </element>
-    <element>
-      <name>opusenc</name>
-      <longname>Opus audio encoder</longname>
-      <class>Codec/Encoder/Audio</class>
-      <description>Encodes audio in Opus format</description>
-      <author>Vincent Penquerc&apos;h &lt;vincent.penquerch@collabora.co.uk&gt;</author>
-      <pads>
-        <caps>
-          <name>sink</name>
-          <direction>sink</direction>
-          <presence>always</presence>
-          <details>audio/x-raw, format=(string)S16LE, layout=(string)interleaved, rate=(int)48000, channels=(int)[ 1, 2 ]; audio/x-raw, format=(string)S16LE, layout=(string)interleaved, rate=(int){ 8000, 12000, 16000, 24000 }, channels=(int)[ 1, 2 ]</details>
-        </caps>
-        <caps>
-          <name>src</name>
-          <direction>source</direction>
-          <presence>always</presence>
-          <details>audio/x-opus</details>
-        </caps>
-      </pads>
-    </element>
-    <element>
-      <name>opusparse</name>
-      <longname>Opus audio parser</longname>
-      <class>Codec/Parser/Audio</class>
-      <description>parses opus audio streams</description>
-      <author>Vincent Penquerc&apos;h &lt;vincent.penquerch@collabora.co.uk&gt;</author>
-      <pads>
-        <caps>
-          <name>sink</name>
-          <direction>sink</direction>
-          <presence>always</presence>
-          <details>audio/x-opus</details>
-        </caps>
-        <caps>
-          <name>src</name>
-          <direction>source</direction>
-          <presence>always</presence>
-          <details>audio/x-opus, framed=(boolean)true</details>
-        </caps>
-      </pads>
-    </element>
-    <element>
-      <name>rtpopusdepay</name>
-      <longname>RTP Opus packet depayloader</longname>
-      <class>Codec/Depayloader/Network/RTP</class>
-      <description>Extracts Opus audio from RTP packets</description>
-      <author>Danilo Cesar Lemes de Paula &lt;danilo.cesar@collabora.co.uk&gt;</author>
-      <pads>
-        <caps>
-          <name>sink</name>
-          <direction>sink</direction>
-          <presence>always</presence>
-          <details>application/x-rtp, media=(string)audio, payload=(int)[ 96, 127 ], clock-rate=(int)48000, encoding-name=(string){ OPUS, X-GST-OPUS-DRAFT-SPITTKA-00 }</details>
-        </caps>
-        <caps>
-          <name>src</name>
-          <direction>source</direction>
-          <presence>always</presence>
-          <details>audio/x-opus, multistream=(boolean)false</details>
-        </caps>
-      </pads>
-    </element>
-    <element>
-      <name>rtpopuspay</name>
-      <longname>RTP Opus payloader</longname>
-      <class>Codec/Payloader/Network/RTP</class>
-      <description>Puts Opus audio in RTP packets</description>
-      <author>Danilo Cesar Lemes de Paula &lt;danilo.cesar@collabora.co.uk&gt;</author>
-      <pads>
-        <caps>
-          <name>sink</name>
-          <direction>sink</direction>
-          <presence>always</presence>
-          <details>audio/x-opus, multistream=(boolean)false</details>
-        </caps>
-        <caps>
-          <name>src</name>
-          <direction>source</direction>
-          <presence>always</presence>
-          <details>application/x-rtp, media=(string)audio, payload=(int)[ 96, 127 ], clock-rate=(int)48000, encoding-params=(string)2, encoding-name=(string){ OPUS, X-GST-OPUS-DRAFT-SPITTKA-00 }</details>
-        </caps>
-      </pads>
-    </element>
-  </elements>
-</plugin>
\ No newline at end of file
diff --git a/docs/plugins/inspect/plugin-opusparse.xml b/docs/plugins/inspect/plugin-opusparse.xml
new file mode 100644
index 0000000..e51f301
--- /dev/null
+++ b/docs/plugins/inspect/plugin-opusparse.xml
@@ -0,0 +1,34 @@
+<plugin>
+  <name>opusparse</name>
+  <description>OPUS parse plugin</description>
+  <filename>../../ext/opus/.libs/libgstopusparse.so</filename>
+  <basename>libgstopusparse.so</basename>
+  <version>1.7.91</version>
+  <license>LGPL</license>
+  <source>gst-plugins-bad</source>
+  <package>GStreamer Bad Plug-ins source release</package>
+  <origin>Unknown package origin</origin>
+  <elements>
+    <element>
+      <name>opusparse</name>
+      <longname>Opus audio parser</longname>
+      <class>Codec/Parser/Audio</class>
+      <description>parses opus audio streams</description>
+      <author>Vincent Penquerc&apos;h &lt;vincent.penquerch@collabora.co.uk&gt;</author>
+      <pads>
+        <caps>
+          <name>sink</name>
+          <direction>sink</direction>
+          <presence>always</presence>
+          <details>audio/x-opus</details>
+        </caps>
+        <caps>
+          <name>src</name>
+          <direction>source</direction>
+          <presence>always</presence>
+          <details>audio/x-opus, framed=(boolean)true</details>
+        </caps>
+      </pads>
+    </element>
+  </elements>
+</plugin>
\ No newline at end of file
diff --git a/docs/plugins/inspect/plugin-pcapparse.xml b/docs/plugins/inspect/plugin-pcapparse.xml
index 31b5704..be133f3 100644
--- a/docs/plugins/inspect/plugin-pcapparse.xml
+++ b/docs/plugins/inspect/plugin-pcapparse.xml
@@ -3,7 +3,7 @@
   <description>Element parsing raw pcap streams</description>
   <filename>../../gst/pcapparse/.libs/libgstpcapparse.so</filename>
   <basename>libgstpcapparse.so</basename>
-  <version>1.6.3</version>
+  <version>1.7.91</version>
   <license>LGPL</license>
   <source>gst-plugins-bad</source>
   <package>GStreamer</package>
diff --git a/docs/plugins/inspect/plugin-pnm.xml b/docs/plugins/inspect/plugin-pnm.xml
index ca5a273..3e4cff4 100644
--- a/docs/plugins/inspect/plugin-pnm.xml
+++ b/docs/plugins/inspect/plugin-pnm.xml
@@ -3,7 +3,7 @@
   <description>PNM plugin</description>
   <filename>../../gst/pnm/.libs/libgstpnm.so</filename>
   <basename>libgstpnm.so</basename>
-  <version>1.6.3</version>
+  <version>1.7.91</version>
   <license>LGPL</license>
   <source>gst-plugins-bad</source>
   <package>GStreamer Bad Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-qt.xml b/docs/plugins/inspect/plugin-qt.xml
index 35866c5..e7e1608 100644
--- a/docs/plugins/inspect/plugin-qt.xml
+++ b/docs/plugins/inspect/plugin-qt.xml
@@ -1,9 +1,9 @@
 <plugin>
   <name>qt</name>
   <description>Qt sink</description>
-  <filename>../../ext/qt/.libs/libqtsink.so</filename>
-  <basename>libqtsink.so</basename>
-  <version>1.6.3</version>
+  <filename>../../ext/qt/.libs/libgstqtsink.so</filename>
+  <basename>libgstqtsink.so</basename>
+  <version>1.7.91</version>
   <license>LGPL</license>
   <source>gst-plugins-bad</source>
   <package>GStreamer Bad Plug-ins source release</package>
@@ -20,7 +20,7 @@
           <name>sink</name>
           <direction>sink</direction>
           <presence>always</presence>
-          <details>video/x-raw(memory:GLMemory), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details>
+          <details>video/x-raw(memory:GLMemory), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], texture-target=(string)2D</details>
         </caps>
       </pads>
     </element>
diff --git a/docs/plugins/inspect/plugin-rawparse.xml b/docs/plugins/inspect/plugin-rawparse.xml
index 0d1bda8..8420423 100644
--- a/docs/plugins/inspect/plugin-rawparse.xml
+++ b/docs/plugins/inspect/plugin-rawparse.xml
@@ -3,7 +3,7 @@
   <description>Parses byte streams into raw frames</description>
   <filename>../../gst/rawparse/.libs/libgstrawparse.so</filename>
   <basename>libgstrawparse.so</basename>
-  <version>1.6.3</version>
+  <version>1.7.91</version>
   <license>LGPL</license>
   <source>gst-plugins-bad</source>
   <package>GStreamer Bad Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-removesilence.xml b/docs/plugins/inspect/plugin-removesilence.xml
index 9e8828e..32f26d3 100644
--- a/docs/plugins/inspect/plugin-removesilence.xml
+++ b/docs/plugins/inspect/plugin-removesilence.xml
@@ -3,7 +3,7 @@
   <description>Removes silence from an audio stream</description>
   <filename>../../gst/removesilence/.libs/libgstremovesilence.so</filename>
   <basename>libgstremovesilence.so</basename>
-  <version>1.6.3</version>
+  <version>1.7.91</version>
   <license>LGPL</license>
   <source>gst-plugins-bad</source>
   <package>GStreamer Bad Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-resindvd.xml b/docs/plugins/inspect/plugin-resindvd.xml
index 57a9895..ae4aabd 100644
--- a/docs/plugins/inspect/plugin-resindvd.xml
+++ b/docs/plugins/inspect/plugin-resindvd.xml
@@ -3,7 +3,7 @@
   <description>Resin DVD playback elements</description>
   <filename>../../ext/resindvd/.libs/libgstresindvd.so</filename>
   <basename>libgstresindvd.so</basename>
-  <version>1.6.3</version>
+  <version>1.7.91</version>
   <license>GPL</license>
   <source>gst-plugins-bad</source>
   <package>GStreamer</package>
diff --git a/docs/plugins/inspect/plugin-rfbsrc.xml b/docs/plugins/inspect/plugin-rfbsrc.xml
index b531484..c121565 100644
--- a/docs/plugins/inspect/plugin-rfbsrc.xml
+++ b/docs/plugins/inspect/plugin-rfbsrc.xml
@@ -3,7 +3,7 @@
   <description>Connects to a VNC server and decodes RFB stream</description>
   <filename>../../gst/librfb/.libs/libgstrfbsrc.so</filename>
   <basename>libgstrfbsrc.so</basename>
-  <version>1.6.3</version>
+  <version>1.7.91</version>
   <license>LGPL</license>
   <source>gst-plugins-bad</source>
   <package>GStreamer Bad Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-rsvg.xml b/docs/plugins/inspect/plugin-rsvg.xml
index 73fdb28..be30ece 100644
--- a/docs/plugins/inspect/plugin-rsvg.xml
+++ b/docs/plugins/inspect/plugin-rsvg.xml
@@ -3,7 +3,7 @@
   <description>RSVG plugin library</description>
   <filename>../../ext/rsvg/.libs/libgstrsvg.so</filename>
   <basename>libgstrsvg.so</basename>
-  <version>1.6.3</version>
+  <version>1.7.91</version>
   <license>LGPL</license>
   <source>gst-plugins-bad</source>
   <package>GStreamer Bad Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-rtmp.xml b/docs/plugins/inspect/plugin-rtmp.xml
index de5097e..446977b 100644
--- a/docs/plugins/inspect/plugin-rtmp.xml
+++ b/docs/plugins/inspect/plugin-rtmp.xml
@@ -3,7 +3,7 @@
   <description>RTMP source and sink</description>
   <filename>../../ext/rtmp/.libs/libgstrtmp.so</filename>
   <basename>libgstrtmp.so</basename>
-  <version>1.6.3</version>
+  <version>1.7.91</version>
   <license>LGPL</license>
   <source>gst-plugins-bad</source>
   <package>GStreamer Bad Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-rtpbad.xml b/docs/plugins/inspect/plugin-rtpbad.xml
index aadc556..b4a1b7f 100644
--- a/docs/plugins/inspect/plugin-rtpbad.xml
+++ b/docs/plugins/inspect/plugin-rtpbad.xml
@@ -3,7 +3,7 @@
   <description>Real-time protocol plugins</description>
   <filename>../../gst/rtp/.libs/libgstrtpbad.so</filename>
   <basename>libgstrtpbad.so</basename>
-  <version>1.6.3</version>
+  <version>1.6.0</version>
   <license>LGPL</license>
   <source>gst-plugins-bad</source>
   <package>GStreamer Bad Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-rtponvif.xml b/docs/plugins/inspect/plugin-rtponvif.xml
index 4f0976c..74fe762 100644
--- a/docs/plugins/inspect/plugin-rtponvif.xml
+++ b/docs/plugins/inspect/plugin-rtponvif.xml
@@ -3,7 +3,7 @@
   <description>ONVIF Streaming features</description>
   <filename>../../gst/onvif/.libs/libgstrtponvif.so</filename>
   <basename>libgstrtponvif.so</basename>
-  <version>1.6.3</version>
+  <version>1.7.91</version>
   <license>unknown</license>
   <source>gst-plugins-bad</source>
   <package>GStreamer Bad Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-sbc.xml b/docs/plugins/inspect/plugin-sbc.xml
index 631e0cd..c55cec8 100644
--- a/docs/plugins/inspect/plugin-sbc.xml
+++ b/docs/plugins/inspect/plugin-sbc.xml
@@ -3,7 +3,7 @@
   <description>SBC bluetooth audio support</description>
   <filename>../../ext/sbc/.libs/libgstsbc.so</filename>
   <basename>libgstsbc.so</basename>
-  <version>1.6.3</version>
+  <version>1.7.91</version>
   <license>LGPL</license>
   <source>gst-plugins-bad</source>
   <package>GStreamer Bad Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-schro.xml b/docs/plugins/inspect/plugin-schro.xml
index 1e14e4d..983b74e 100644
--- a/docs/plugins/inspect/plugin-schro.xml
+++ b/docs/plugins/inspect/plugin-schro.xml
@@ -3,7 +3,7 @@
   <description>Schroedinger plugin</description>
   <filename>../../ext/schroedinger/.libs/libgstschro.so</filename>
   <basename>libgstschro.so</basename>
-  <version>1.6.3</version>
+  <version>1.7.91</version>
   <license>LGPL</license>
   <source>gst-plugins-bad</source>
   <package>GStreamer Bad Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-sdp.xml b/docs/plugins/inspect/plugin-sdp.xml
index bafe61d..1c27614 100644
--- a/docs/plugins/inspect/plugin-sdp.xml
+++ b/docs/plugins/inspect/plugin-sdp.xml
@@ -3,7 +3,7 @@
   <description>configure streaming sessions using SDP</description>
   <filename>../../gst/sdp/.libs/libgstsdpelem.so</filename>
   <basename>libgstsdpelem.so</basename>
-  <version>1.6.3</version>
+  <version>1.7.91</version>
   <license>LGPL</license>
   <source>gst-plugins-bad</source>
   <package>GStreamer Bad Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-segmentclip.xml b/docs/plugins/inspect/plugin-segmentclip.xml
index dcb2b5a..2dce8f3 100644
--- a/docs/plugins/inspect/plugin-segmentclip.xml
+++ b/docs/plugins/inspect/plugin-segmentclip.xml
@@ -3,7 +3,7 @@
   <description>Segment clip elements</description>
   <filename>../../gst/segmentclip/.libs/libgstsegmentclip.so</filename>
   <basename>libgstsegmentclip.so</basename>
-  <version>1.6.3</version>
+  <version>1.7.91</version>
   <license>LGPL</license>
   <source>gst-plugins-bad</source>
   <package>GStreamer Bad Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-shm.xml b/docs/plugins/inspect/plugin-shm.xml
index 00a5ec9..bc27b91 100644
--- a/docs/plugins/inspect/plugin-shm.xml
+++ b/docs/plugins/inspect/plugin-shm.xml
@@ -3,7 +3,7 @@
   <description>shared memory sink source</description>
   <filename>../../sys/shm/.libs/libgstshm.so</filename>
   <basename>libgstshm.so</basename>
-  <version>1.6.3</version>
+  <version>1.7.91</version>
   <license>LGPL</license>
   <source>gst-plugins-bad</source>
   <package>GStreamer Bad Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-smooth.xml b/docs/plugins/inspect/plugin-smooth.xml
index bb9c0a9..fa9049c 100644
--- a/docs/plugins/inspect/plugin-smooth.xml
+++ b/docs/plugins/inspect/plugin-smooth.xml
@@ -3,7 +3,7 @@
   <description>Apply a smooth filter to an image</description>
   <filename>../../gst/smooth/.libs/libgstsmooth.so</filename>
   <basename>libgstsmooth.so</basename>
-  <version>1.6.3</version>
+  <version>1.7.91</version>
   <license>LGPL</license>
   <source>gst-plugins-bad</source>
   <package>GStreamer Bad Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-smoothstreaming.xml b/docs/plugins/inspect/plugin-smoothstreaming.xml
index e1d9803..2848f2b 100644
--- a/docs/plugins/inspect/plugin-smoothstreaming.xml
+++ b/docs/plugins/inspect/plugin-smoothstreaming.xml
@@ -3,7 +3,7 @@
   <description>Microsoft&apos;s Smooth Streaming format support </description>
   <filename>../../ext/smoothstreaming/.libs/libgstsmoothstreaming.so</filename>
   <basename>libgstsmoothstreaming.so</basename>
-  <version>1.6.3</version>
+  <version>1.7.91</version>
   <license>LGPL</license>
   <source>gst-plugins-bad</source>
   <package>GStreamer Bad Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-sndfile.xml b/docs/plugins/inspect/plugin-sndfile.xml
new file mode 100644
index 0000000..3c1adac
--- /dev/null
+++ b/docs/plugins/inspect/plugin-sndfile.xml
@@ -0,0 +1,34 @@
+<plugin>
+  <name>sndfile</name>
+  <description>use libsndfile to read and write various audio formats</description>
+  <filename>../../ext/sndfile/.libs/libgstsndfile.so</filename>
+  <basename>libgstsndfile.so</basename>
+  <version>1.7.91</version>
+  <license>LGPL</license>
+  <source>gst-plugins-bad</source>
+  <package>GStreamer Bad Plug-ins source release</package>
+  <origin>Unknown package origin</origin>
+  <elements>
+    <element>
+      <name>sfdec</name>
+      <longname>Sndfile decoder</longname>
+      <class>Decoder/Audio</class>
+      <description>Read audio streams using libsndfile</description>
+      <author>Stefan Sauer &lt;ensonic@user.sf.net&gt;</author>
+      <pads>
+        <caps>
+          <name>sink</name>
+          <direction>sink</direction>
+          <presence>always</presence>
+          <details>audio/x-ircam; audio/x-nist; audio/x-paris; audio/x-rf64; audio/x-sds; audio/x-svx; audio/x-voc; audio/x-w64; audio/x-xi</details>
+        </caps>
+        <caps>
+          <name>src</name>
+          <direction>source</direction>
+          <presence>always</presence>
+          <details>audio/x-raw, format=(string){ F32LE, S32LE, S16LE }, layout=(string)interleaved, rate=(int)[ 1, 2147483647 ], channels=(int)[ 1, 2147483647 ]</details>
+        </caps>
+      </pads>
+    </element>
+  </elements>
+</plugin>
\ No newline at end of file
diff --git a/docs/plugins/inspect/plugin-soundtouch.xml b/docs/plugins/inspect/plugin-soundtouch.xml
index cd98355..687e2c0 100644
--- a/docs/plugins/inspect/plugin-soundtouch.xml
+++ b/docs/plugins/inspect/plugin-soundtouch.xml
@@ -3,7 +3,7 @@
   <description>Audio Pitch Controller &amp; BPM Detection</description>
   <filename>../../ext/soundtouch/.libs/libgstsoundtouch.so</filename>
   <basename>libgstsoundtouch.so</basename>
-  <version>1.6.3</version>
+  <version>1.7.91</version>
   <license>LGPL</license>
   <source>gst-plugins-bad</source>
   <package>GStreamer Bad Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-spandsp.xml b/docs/plugins/inspect/plugin-spandsp.xml
index 80214e2..3fcd1f3 100644
--- a/docs/plugins/inspect/plugin-spandsp.xml
+++ b/docs/plugins/inspect/plugin-spandsp.xml
@@ -3,7 +3,7 @@
   <description>libspandsp plugin</description>
   <filename>../../ext/spandsp/.libs/libgstspandsp.so</filename>
   <basename>libgstspandsp.so</basename>
-  <version>1.6.3</version>
+  <version>1.7.91</version>
   <license>LGPL</license>
   <source>gst-plugins-bad</source>
   <package>GStreamer Bad Plug-ins source release</package>
@@ -51,5 +51,20 @@
         </caps>
       </pads>
     </element>
+    <element>
+      <name>tonegeneratesrc</name>
+      <longname>Telephony Tone  Generator source</longname>
+      <class>Source/Audio</class>
+      <description>Creates telephony signals of given frequency, volume, cadence</description>
+      <author>Iskratel &lt;www.iskratel.com&gt;</author>
+      <pads>
+        <caps>
+          <name>src</name>
+          <direction>source</direction>
+          <presence>always</presence>
+          <details>audio/x-raw, format=(string)S16LE, layout=(string)interleaved, rate=(int)8000, channels=(int)1</details>
+        </caps>
+      </pads>
+    </element>
   </elements>
 </plugin>
\ No newline at end of file
diff --git a/docs/plugins/inspect/plugin-speed.xml b/docs/plugins/inspect/plugin-speed.xml
index b9f835c..da83c50 100644
--- a/docs/plugins/inspect/plugin-speed.xml
+++ b/docs/plugins/inspect/plugin-speed.xml
@@ -3,7 +3,7 @@
   <description>Set speed/pitch on audio/raw streams (resampler)</description>
   <filename>../../gst/speed/.libs/libgstspeed.so</filename>
   <basename>libgstspeed.so</basename>
-  <version>1.6.3</version>
+  <version>1.7.91</version>
   <license>LGPL</license>
   <source>gst-plugins-bad</source>
   <package>GStreamer Bad Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-srtp.xml b/docs/plugins/inspect/plugin-srtp.xml
index 478597a..1343687 100644
--- a/docs/plugins/inspect/plugin-srtp.xml
+++ b/docs/plugins/inspect/plugin-srtp.xml
@@ -3,7 +3,7 @@
   <description>GStreamer SRTP</description>
   <filename>../../ext/srtp/.libs/libgstsrtp.so</filename>
   <basename>libgstsrtp.so</basename>
-  <version>1.6.3</version>
+  <version>1.7.91</version>
   <license>LGPL</license>
   <source>gst-plugins-bad</source>
   <package>GStreamer</package>
diff --git a/docs/plugins/inspect/plugin-stereo.xml b/docs/plugins/inspect/plugin-stereo.xml
index c6faceb..aa456ba 100644
--- a/docs/plugins/inspect/plugin-stereo.xml
+++ b/docs/plugins/inspect/plugin-stereo.xml
@@ -3,7 +3,7 @@
   <description>Muck with the stereo signal, enhance it&apos;s &apos;stereo-ness&apos;</description>
   <filename>../../gst/stereo/.libs/libgststereo.so</filename>
   <basename>libgststereo.so</basename>
-  <version>1.6.3</version>
+  <version>1.7.91</version>
   <license>LGPL</license>
   <source>gst-plugins-bad</source>
   <package>GStreamer Bad Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-subenc.xml b/docs/plugins/inspect/plugin-subenc.xml
index 8e01d37..e69e95b 100644
--- a/docs/plugins/inspect/plugin-subenc.xml
+++ b/docs/plugins/inspect/plugin-subenc.xml
@@ -3,7 +3,7 @@
   <description>subtitle encoders</description>
   <filename>../../gst/subenc/.libs/libgstsubenc.so</filename>
   <basename>libgstsubenc.so</basename>
-  <version>1.6.3</version>
+  <version>1.7.91</version>
   <license>LGPL</license>
   <source>gst-plugins-bad</source>
   <package>GStreamer Bad Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-teletext.xml b/docs/plugins/inspect/plugin-teletext.xml
new file mode 100644
index 0000000..4261a4d
--- /dev/null
+++ b/docs/plugins/inspect/plugin-teletext.xml
@@ -0,0 +1,34 @@
+<plugin>
+  <name>teletext</name>
+  <description>Teletext plugin</description>
+  <filename>../../ext/teletextdec/.libs/libgstteletextdec.so</filename>
+  <basename>libgstteletextdec.so</basename>
+  <version>1.7.91</version>
+  <license>LGPL</license>
+  <source>gst-plugins-bad</source>
+  <package>GStreamer</package>
+  <origin>http://gstreamer.net/</origin>
+  <elements>
+    <element>
+      <name>teletextdec</name>
+      <longname>Teletext decoder</longname>
+      <class>Decoder</class>
+      <description>Decode a raw VBI stream containing teletext information to RGBA and text</description>
+      <author>Sebastian Pölsterl &lt;sebp@k-d-w.org&gt;, Andoni Morales Alastruey &lt;ylatuya@gmail.com&gt;</author>
+      <pads>
+        <caps>
+          <name>sink</name>
+          <direction>sink</direction>
+          <presence>always</presence>
+          <details>application/x-teletext</details>
+        </caps>
+        <caps>
+          <name>src</name>
+          <direction>source</direction>
+          <presence>always</presence>
+          <details>video/x-raw, format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; text/x-raw, format=(string){ utf-8, pango-markup }</details>
+        </caps>
+      </pads>
+    </element>
+  </elements>
+</plugin>
\ No newline at end of file
diff --git a/docs/plugins/inspect/plugin-uvch264.xml b/docs/plugins/inspect/plugin-uvch264.xml
index 280e498..f1c010c 100644
--- a/docs/plugins/inspect/plugin-uvch264.xml
+++ b/docs/plugins/inspect/plugin-uvch264.xml
@@ -3,7 +3,7 @@
   <description>UVC compliant H264 encoding cameras plugin</description>
   <filename>../../sys/uvch264/.libs/libgstuvch264.so</filename>
   <basename>libgstuvch264.so</basename>
-  <version>1.6.3</version>
+  <version>1.7.91</version>
   <license>LGPL</license>
   <source>gst-plugins-bad</source>
   <package>GStreamer Bad Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-vcdsrc.xml b/docs/plugins/inspect/plugin-vcdsrc.xml
index 0222436..88070b3 100644
--- a/docs/plugins/inspect/plugin-vcdsrc.xml
+++ b/docs/plugins/inspect/plugin-vcdsrc.xml
@@ -3,7 +3,7 @@
   <description>Asynchronous read from VCD disk</description>
   <filename>../../sys/vcd/.libs/libgstvcdsrc.so</filename>
   <basename>libgstvcdsrc.so</basename>
-  <version>1.6.3</version>
+  <version>1.7.91</version>
   <license>LGPL</license>
   <source>gst-plugins-bad</source>
   <package>GStreamer Bad Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-videofiltersbad.xml b/docs/plugins/inspect/plugin-videofiltersbad.xml
index 80196f3..3d34d01 100644
--- a/docs/plugins/inspect/plugin-videofiltersbad.xml
+++ b/docs/plugins/inspect/plugin-videofiltersbad.xml
@@ -3,7 +3,7 @@
   <description>Video filters in gst-plugins-bad</description>
   <filename>../../gst/videofilters/.libs/libgstvideofiltersbad.so</filename>
   <basename>libgstvideofiltersbad.so</basename>
-  <version>1.6.3</version>
+  <version>1.7.91</version>
   <license>LGPL</license>
   <source>gst-plugins-bad</source>
   <package>GStreamer Bad Plug-ins</package>
diff --git a/docs/plugins/inspect/plugin-videoframe_audiolevel.xml b/docs/plugins/inspect/plugin-videoframe_audiolevel.xml
new file mode 100644
index 0000000..d5960c2
--- /dev/null
+++ b/docs/plugins/inspect/plugin-videoframe_audiolevel.xml
@@ -0,0 +1,46 @@
+<plugin>
+  <name>videoframe_audiolevel</name>
+  <description>Video frame-synchronized audio level</description>
+  <filename>../../gst/videoframe_audiolevel/.libs/libgstvideoframe_audiolevel.so</filename>
+  <basename>libgstvideoframe_audiolevel.so</basename>
+  <version>1.7.91</version>
+  <license>LGPL</license>
+  <source>gst-plugins-bad</source>
+  <package>GStreamer Bad Plug-ins source release</package>
+  <origin>Unknown package origin</origin>
+  <elements>
+    <element>
+      <name>videoframe-audiolevel</name>
+      <longname>Video-frame audio level</longname>
+      <class>Filter/Analyzer/Audio</class>
+      <description>Synchronized audio/video RMS Level messenger for audio/raw</description>
+      <author>Vivia Nikolaidou &lt;vivia@toolsonair.com&gt;</author>
+      <pads>
+        <caps>
+          <name>asink</name>
+          <direction>sink</direction>
+          <presence>always</presence>
+          <details>audio/x-raw, format=(string){ S8, S16LE, S32LE, F32LE, F64LE }, rate=(int)[ 1, 2147483647 ], channels=(int)[ 1, 2147483647 ]</details>
+        </caps>
+        <caps>
+          <name>vsink</name>
+          <direction>sink</direction>
+          <presence>always</presence>
+          <details>video/x-raw</details>
+        </caps>
+        <caps>
+          <name>asrc</name>
+          <direction>source</direction>
+          <presence>always</presence>
+          <details>audio/x-raw, format=(string){ S8, S16LE, S32LE, F32LE, F64LE }, rate=(int)[ 1, 2147483647 ], channels=(int)[ 1, 2147483647 ]</details>
+        </caps>
+        <caps>
+          <name>vsrc</name>
+          <direction>source</direction>
+          <presence>always</presence>
+          <details>video/x-raw</details>
+        </caps>
+      </pads>
+    </element>
+  </elements>
+</plugin>
\ No newline at end of file
diff --git a/docs/plugins/inspect/plugin-videoparsersbad.xml b/docs/plugins/inspect/plugin-videoparsersbad.xml
index 817735a..a6688c4 100644
--- a/docs/plugins/inspect/plugin-videoparsersbad.xml
+++ b/docs/plugins/inspect/plugin-videoparsersbad.xml
@@ -3,7 +3,7 @@
   <description>videoparsers</description>
   <filename>../../gst/videoparsers/.libs/libgstvideoparsersbad.so</filename>
   <basename>libgstvideoparsersbad.so</basename>
-  <version>1.6.3</version>
+  <version>1.7.91</version>
   <license>LGPL</license>
   <source>gst-plugins-bad</source>
   <package>GStreamer Bad Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-videosignal.xml b/docs/plugins/inspect/plugin-videosignal.xml
index c598dda..6967683 100644
--- a/docs/plugins/inspect/plugin-videosignal.xml
+++ b/docs/plugins/inspect/plugin-videosignal.xml
@@ -3,7 +3,7 @@
   <description>Various video signal analysers</description>
   <filename>../../gst/videosignal/.libs/libgstvideosignal.so</filename>
   <basename>libgstvideosignal.so</basename>
-  <version>1.6.3</version>
+  <version>1.7.91</version>
   <license>LGPL</license>
   <source>gst-plugins-bad</source>
   <package>GStreamer Bad Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-vmnc.xml b/docs/plugins/inspect/plugin-vmnc.xml
index 14bbfd3..5cac684 100644
--- a/docs/plugins/inspect/plugin-vmnc.xml
+++ b/docs/plugins/inspect/plugin-vmnc.xml
@@ -3,7 +3,7 @@
   <description>VmWare Video Codec plugins</description>
   <filename>../../gst/vmnc/.libs/libgstvmnc.so</filename>
   <basename>libgstvmnc.so</basename>
-  <version>1.6.3</version>
+  <version>1.7.91</version>
   <license>LGPL</license>
   <source>gst-plugins-bad</source>
   <package>GStreamer Bad Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-voaacenc.xml b/docs/plugins/inspect/plugin-voaacenc.xml
index a77a0c1..02d4d98 100644
--- a/docs/plugins/inspect/plugin-voaacenc.xml
+++ b/docs/plugins/inspect/plugin-voaacenc.xml
@@ -3,7 +3,7 @@
   <description>AAC audio encoder</description>
   <filename>../../ext/voaacenc/.libs/libgstvoaacenc.so</filename>
   <basename>libgstvoaacenc.so</basename>
-  <version>1.6.3</version>
+  <version>1.7.91</version>
   <license>LGPL</license>
   <source>gst-plugins-bad</source>
   <package>GStreamer Bad Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-voamrwbenc.xml b/docs/plugins/inspect/plugin-voamrwbenc.xml
index e831244..377be05 100644
--- a/docs/plugins/inspect/plugin-voamrwbenc.xml
+++ b/docs/plugins/inspect/plugin-voamrwbenc.xml
@@ -3,7 +3,7 @@
   <description>Adaptive Multi-Rate Wide-Band Encoder</description>
   <filename>../../ext/voamrwbenc/.libs/libgstvoamrwbenc.so</filename>
   <basename>libgstvoamrwbenc.so</basename>
-  <version>1.6.3</version>
+  <version>1.7.91</version>
   <license>unknown</license>
   <source>gst-plugins-bad</source>
   <package>GStreamer Bad Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-waylandsink.xml b/docs/plugins/inspect/plugin-waylandsink.xml
index f1c80dd..3b31924 100644
--- a/docs/plugins/inspect/plugin-waylandsink.xml
+++ b/docs/plugins/inspect/plugin-waylandsink.xml
@@ -3,7 +3,7 @@
   <description>Wayland Video Sink</description>
   <filename>../../ext/wayland/.libs/libgstwaylandsink.so</filename>
   <basename>libgstwaylandsink.so</basename>
-  <version>1.6.3</version>
+  <version>1.7.91</version>
   <license>LGPL</license>
   <source>gst-plugins-bad</source>
   <package>GStreamer Bad Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-webp.xml b/docs/plugins/inspect/plugin-webp.xml
index 6cb8ab3..df1f8ea 100644
--- a/docs/plugins/inspect/plugin-webp.xml
+++ b/docs/plugins/inspect/plugin-webp.xml
@@ -3,7 +3,7 @@
   <description>WebP plugin</description>
   <filename>../../ext/webp/.libs/libgstwebp.so</filename>
   <basename>libgstwebp.so</basename>
-  <version>1.6.3</version>
+  <version>1.7.91</version>
   <license>LGPL</license>
   <source>gst-plugins-bad</source>
   <package>GStreamer Bad Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-wildmidi.xml b/docs/plugins/inspect/plugin-wildmidi.xml
index 76a1e87..dfd7a68 100644
--- a/docs/plugins/inspect/plugin-wildmidi.xml
+++ b/docs/plugins/inspect/plugin-wildmidi.xml
@@ -3,7 +3,7 @@
   <description>Wildmidi Plugin</description>
   <filename>../../ext/timidity/.libs/libgstwildmidi.so</filename>
   <basename>libgstwildmidi.so</basename>
-  <version>1.6.3</version>
+  <version>1.7.91</version>
   <license>GPL</license>
   <source>gst-plugins-bad</source>
   <package>GStreamer Bad Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-x265.xml b/docs/plugins/inspect/plugin-x265.xml
index c0fe36e..ddcbe92 100644
--- a/docs/plugins/inspect/plugin-x265.xml
+++ b/docs/plugins/inspect/plugin-x265.xml
@@ -3,7 +3,7 @@
   <description>x265-based H265 plugins</description>
   <filename>../../ext/x265/.libs/libgstx265.so</filename>
   <basename>libgstx265.so</basename>
-  <version>1.6.3</version>
+  <version>1.7.91</version>
   <license>GPL</license>
   <source>gst-plugins-bad</source>
   <package>GStreamer Bad Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-y4mdec.xml b/docs/plugins/inspect/plugin-y4mdec.xml
index 5728546..2b2c970 100644
--- a/docs/plugins/inspect/plugin-y4mdec.xml
+++ b/docs/plugins/inspect/plugin-y4mdec.xml
@@ -3,7 +3,7 @@
   <description>Demuxes/decodes YUV4MPEG streams</description>
   <filename>../../gst/y4m/.libs/libgsty4mdec.so</filename>
   <basename>libgsty4mdec.so</basename>
-  <version>1.6.3</version>
+  <version>1.7.91</version>
   <license>LGPL</license>
   <source>gst-plugins-bad</source>
   <package>GStreamer Bad Plug-ins</package>
diff --git a/docs/plugins/inspect/plugin-yadif.xml b/docs/plugins/inspect/plugin-yadif.xml
index 00c493f..b96d2a4 100644
--- a/docs/plugins/inspect/plugin-yadif.xml
+++ b/docs/plugins/inspect/plugin-yadif.xml
@@ -3,7 +3,7 @@
   <description>YADIF deinterlacing filter</description>
   <filename>../../gst/yadif/.libs/libgstyadif.so</filename>
   <basename>libgstyadif.so</basename>
-  <version>1.6.3</version>
+  <version>1.7.91</version>
   <license>GPL</license>
   <source>gst-plugins-bad</source>
   <package>GStreamer Bad Plug-ins</package>
diff --git a/docs/plugins/inspect/plugin-zbar.xml b/docs/plugins/inspect/plugin-zbar.xml
index 0a5ee59..e692f6c 100644
--- a/docs/plugins/inspect/plugin-zbar.xml
+++ b/docs/plugins/inspect/plugin-zbar.xml
@@ -3,7 +3,7 @@
   <description>zbar barcode scanner</description>
   <filename>../../ext/zbar/.libs/libgstzbar.so</filename>
   <basename>libgstzbar.so</basename>
-  <version>1.6.3</version>
+  <version>1.7.91</version>
   <license>LGPL</license>
   <source>gst-plugins-bad</source>
   <package>GStreamer Bad Plug-ins source release</package>
diff --git a/ext/Makefile.am b/ext/Makefile.am
index 33ddba7..f97ef44 100644
--- a/ext/Makefile.am
+++ b/ext/Makefile.am
@@ -16,12 +16,6 @@
 APEXSINK_DIR =
 endif
 
-# if USE_AUDIOFILE
-# AUDIOFILE_DIR=audiofile
-# else
-AUDIOFILE_DIR=
-# endif
-
 if USE_BS2B
 BS2B_DIR=bs2b
 else
@@ -166,12 +160,6 @@
 LIBDE265_DIR =
 endif
 
-# if USE_LIBFAME
-# LIBFAME_DIR=libfame
-# else
-LIBFAME_DIR=
-# endif
-
 if USE_LIBMMS
 LIBMMS_DIR=libmms
 else
@@ -196,12 +184,6 @@
 MPEG2ENC_DIR=
 endif
 
-if USE_MPG123
-MPG123_DIR=mpg123
-else
-MPG123_DIR=
-endif
-
 if USE_MIMIC
 MIMIC_DIR=mimic
 else
@@ -382,12 +364,6 @@
 TELETEXTDEC_DIR=
 endif
 
-if USE_GSETTINGS
-GSETTINGS_DIR=gsettings
-else
-GSETTINGS_DIR=
-endif
-
 if USE_XVID
 XVID_DIR=xvid
 else
@@ -430,6 +406,12 @@
 DTLS_DIR=
 endif
 
+if USE_VULKAN
+VULKAN_DIR=vulkan
+else
+VULKAN_DIR=
+endif
+
 SUBDIRS=\
 	$(VOAACENC_DIR) \
 	$(ASSRENDER_DIR) \
@@ -454,19 +436,16 @@
 	$(FAAD_DIR) \
 	$(FLITE_DIR) \
 	$(FLUIDSYNTH_DIR) \
-	$(GSETTINGS_DIR) \
 	$(GSM_DIR) \
 	$(G729_DIR) \
 	$(KATE_DIR) \
 	$(LADSPA_DIR) \
 	$(LV2_DIR) \
 	$(LIBDE265_DIR) \
-	$(LIBFAME_DIR) \
 	$(LIBMMS_DIR) \
 	$(LIBVISUAL_DIR) \
 	$(MODPLUG_DIR) \
 	$(MPEG2ENC_DIR) \
-	$(MPG123_DIR) \
 	$(MIMIC_DIR) \
 	$(MPLEX_DIR) \
 	$(MUSEPACK_DIR) \
@@ -501,7 +480,8 @@
 	$(HLS_DIR) \
 	$(WEBP_DIR) \
 	$(X265_DIR) \
-	$(DTLS_DIR)
+	$(DTLS_DIR) \
+	$(VULKAN_DIR)
 
 DIST_SUBDIRS = \
 	assrender \
@@ -518,7 +498,6 @@
 	faad \
 	flite \
 	fluidsynth \
-	gsettings \
 	gsm \
 	hls \
 	ladspa \
@@ -535,7 +514,6 @@
 	modplug \
 	mimic \
 	mpeg2enc \
-	mpg123 \
 	mplex \
 	musepack \
 	nas \
@@ -570,6 +548,7 @@
 	rtmp \
 	webp \
 	x265 \
-	dtls
+	dtls \
+	vulkan
 
 include $(top_srcdir)/common/parallel-subdirs.mak
diff --git a/ext/Makefile.in b/ext/Makefile.in
index 4f5eae9..82b6d6d 100644
--- a/ext/Makefile.in
+++ b/ext/Makefile.in
@@ -119,16 +119,15 @@
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
 	$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
-	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gsettings.m4 \
-	$(top_srcdir)/m4/gst-fionread.m4 $(top_srcdir)/m4/gst-sdl.m4 \
-	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
-	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
-	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libgcrypt.m4 \
-	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
-	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
-	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
-	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
-	$(top_srcdir)/configure.ac
+	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gst-fionread.m4 \
+	$(top_srcdir)/m4/gst-sdl.m4 $(top_srcdir)/m4/iconv.m4 \
+	$(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \
+	$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
+	$(top_srcdir)/m4/libgcrypt.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
+	$(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
@@ -253,6 +252,8 @@
 CLUTTER_X11_LIBS = @CLUTTER_X11_LIBS@
 CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
+CUDA_CFLAGS = @CUDA_CFLAGS@
+CUDA_LIBS = @CUDA_LIBS@
 CURL_CFLAGS = @CURL_CFLAGS@
 CURL_LIBS = @CURL_LIBS@
 CXX = @CXX@
@@ -290,6 +291,8 @@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
+EGL_CFLAGS = @EGL_CFLAGS@
+EGL_LIBS = @EGL_LIBS@
 EGREP = @EGREP@
 ERROR_CFLAGS = @ERROR_CFLAGS@
 ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
@@ -298,7 +301,6 @@
 EXIF_CFLAGS = @EXIF_CFLAGS@
 EXIF_LIBS = @EXIF_LIBS@
 FAAC_LIBS = @FAAC_LIBS@
-FAAD_IS_NEAAC = @FAAD_IS_NEAAC@
 FAAD_LIBS = @FAAD_LIBS@
 FFLAGS = @FFLAGS@
 FGREP = @FGREP@
@@ -317,8 +319,9 @@
 GIO_LIBS = @GIO_LIBS@
 GIO_UNIX_CFLAGS = @GIO_UNIX_CFLAGS@
 GIO_UNIX_LIBS = @GIO_UNIX_LIBS@
+GLES2_CFLAGS = @GLES2_CFLAGS@
+GLES2_LIBS = @GLES2_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
-GLIB_COMPILE_SCHEMAS = @GLIB_COMPILE_SCHEMAS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
@@ -335,16 +338,17 @@
 GMODULE_NO_EXPORT_LIBS = @GMODULE_NO_EXPORT_LIBS@
 GMSGFMT = @GMSGFMT@
 GMSGFMT_015 = @GMSGFMT_015@
+GNUSTL_CFLAGS = @GNUSTL_CFLAGS@
+GNUSTL_LIBS = @GNUSTL_LIBS@
 GRAPHENE_CFLAGS = @GRAPHENE_CFLAGS@
 GRAPHENE_LIBS = @GRAPHENE_LIBS@
 GREP = @GREP@
-GSETTINGS_CFLAGS = @GSETTINGS_CFLAGS@
-GSETTINGS_DISABLE_SCHEMAS_COMPILE = @GSETTINGS_DISABLE_SCHEMAS_COMPILE@
-GSETTINGS_LIBS = @GSETTINGS_LIBS@
 GSM_LIBS = @GSM_LIBS@
 GSTPB_PLUGINS_DIR = @GSTPB_PLUGINS_DIR@
 GSTPB_PREFIX = @GSTPB_PREFIX@
 GST_AGE = @GST_AGE@
+GST_ALLOCATORS_CFLAGS = @GST_ALLOCATORS_CFLAGS@
+GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
 GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
 GST_API_VERSION = @GST_API_VERSION@
 GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
@@ -370,6 +374,8 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PBUTILS_CFLAGS = @GST_PBUTILS_CFLAGS@
+GST_PBUTILS_LIBS = @GST_PBUTILS_LIBS@
 GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BAD_CFLAGS = @GST_PLUGINS_BAD_CFLAGS@
@@ -395,6 +401,8 @@
 GST_PREFIX = @GST_PREFIX@
 GST_REVISION = @GST_REVISION@
 GST_TOOLS_DIR = @GST_TOOLS_DIR@
+GST_VIDEO_CFLAGS = @GST_VIDEO_CFLAGS@
+GST_VIDEO_LIBS = @GST_VIDEO_LIBS@
 GTK3_CFLAGS = @GTK3_CFLAGS@
 GTK3_GL_CFLAGS = @GTK3_GL_CFLAGS@
 GTK3_GL_LIBS = @GTK3_GL_LIBS@
@@ -496,6 +504,7 @@
 LTLIBICONV = @LTLIBICONV@
 LTLIBINTL = @LTLIBINTL@
 LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
 MANIFEST_TOOL = @MANIFEST_TOOL@
@@ -509,8 +518,6 @@
 MODPLUG_LIBS = @MODPLUG_LIBS@
 MPEG2ENC_CFLAGS = @MPEG2ENC_CFLAGS@
 MPEG2ENC_LIBS = @MPEG2ENC_LIBS@
-MPG123_CFLAGS = @MPG123_CFLAGS@
-MPG123_LIBS = @MPG123_LIBS@
 MPLEX_CFLAGS = @MPLEX_CFLAGS@
 MPLEX_LDFLAGS = @MPLEX_LDFLAGS@
 MPLEX_LIBS = @MPLEX_LIBS@
@@ -526,6 +533,8 @@
 NETTLE_LIBS = @NETTLE_LIBS@
 NM = @NM@
 NMEDIT = @NMEDIT@
+NVENCODE_CFLAGS = @NVENCODE_CFLAGS@
+NVENCODE_LIBS = @NVENCODE_LIBS@
 OBJC = @OBJC@
 OBJCDEPMODE = @OBJCDEPMODE@
 OBJCFLAGS = @OBJCFLAGS@
@@ -583,16 +592,18 @@
 PYTHON_PLATFORM = @PYTHON_PLATFORM@
 PYTHON_PREFIX = @PYTHON_PREFIX@
 PYTHON_VERSION = @PYTHON_VERSION@
+QT_ANDROID_CFLAGS = @QT_ANDROID_CFLAGS@
+QT_ANDROID_LIBS = @QT_ANDROID_LIBS@
 QT_CFLAGS = @QT_CFLAGS@
 QT_LIBS = @QT_LIBS@
+QT_MAC_CFLAGS = @QT_MAC_CFLAGS@
+QT_MAC_LIBS = @QT_MAC_LIBS@
 QT_WAYLAND_CFLAGS = @QT_WAYLAND_CFLAGS@
 QT_WAYLAND_LIBS = @QT_WAYLAND_LIBS@
 QT_X11_CFLAGS = @QT_X11_CFLAGS@
 QT_X11_LIBS = @QT_X11_LIBS@
 RANLIB = @RANLIB@
 RCC = @RCC@
-RSVG_2_36_2_CFLAGS = @RSVG_2_36_2_CFLAGS@
-RSVG_2_36_2_LIBS = @RSVG_2_36_2_LIBS@
 RSVG_CFLAGS = @RSVG_CFLAGS@
 RSVG_LIBS = @RSVG_LIBS@
 RTMP_CFLAGS = @RTMP_CFLAGS@
@@ -644,6 +655,7 @@
 VOAACENC_LIBS = @VOAACENC_LIBS@
 VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
 VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VULKAN_LIBS = @VULKAN_LIBS@
 WARNING_CFLAGS = @WARNING_CFLAGS@
 WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
 WARNING_OBJCFLAGS = @WARNING_OBJCFLAGS@
@@ -654,6 +666,7 @@
 WAYLAND_LIBS = @WAYLAND_LIBS@
 WEBP_CFLAGS = @WEBP_CFLAGS@
 WEBP_LIBS = @WEBP_LIBS@
+WGET = @WGET@
 WILDMIDI_CFLAGS = @WILDMIDI_CFLAGS@
 WILDMIDI_LIBS = @WILDMIDI_LIBS@
 WINKS_LIBS = @WINKS_LIBS@
@@ -663,6 +676,8 @@
 X11_LIBS = @X11_LIBS@
 X265_CFLAGS = @X265_CFLAGS@
 X265_LIBS = @X265_LIBS@
+XCB_CFLAGS = @XCB_CFLAGS@
+XCB_LIBS = @XCB_LIBS@
 XCOMPOSITE_CFLAGS = @XCOMPOSITE_CFLAGS@
 XCOMPOSITE_LIBS = @XCOMPOSITE_LIBS@
 XGETTEXT = @XGETTEXT@
@@ -700,7 +715,6 @@
 docdir = @docdir@
 dvidir = @dvidir@
 exec_prefix = @exec_prefix@
-gsettingsschemadir = @gsettingsschemadir@
 host = @host@
 host_alias = @host_alias@
 host_cpu = @host_cpu@
@@ -746,13 +760,7 @@
 @USE_VOAMRWBENC_TRUE@VOAMRWBENC_DIR = voamrwbenc
 @USE_APEXSINK_FALSE@APEXSINK_DIR = 
 @USE_APEXSINK_TRUE@APEXSINK_DIR = apexsink
-
-# if USE_AUDIOFILE
-# AUDIOFILE_DIR=audiofile
-# else
-AUDIOFILE_DIR = 
 @USE_BS2B_FALSE@BS2B_DIR = 
-# endif
 @USE_BS2B_TRUE@BS2B_DIR = bs2b
 @USE_BZ2_FALSE@BZ2_DIR = 
 @USE_BZ2_TRUE@BZ2_DIR = bz2
@@ -804,13 +812,7 @@
 @USE_LV2_TRUE@LV2_DIR = lv2
 @USE_LIBDE265_FALSE@LIBDE265_DIR = 
 @USE_LIBDE265_TRUE@LIBDE265_DIR = libde265
-
-# if USE_LIBFAME
-# LIBFAME_DIR=libfame
-# else
-LIBFAME_DIR = 
 @USE_LIBMMS_FALSE@LIBMMS_DIR = 
-# endif
 @USE_LIBMMS_TRUE@LIBMMS_DIR = libmms
 @USE_LIBVISUAL_FALSE@LIBVISUAL_DIR = 
 @USE_LIBVISUAL_TRUE@LIBVISUAL_DIR = libvisual
@@ -818,8 +820,6 @@
 @USE_MODPLUG_TRUE@MODPLUG_DIR = modplug
 @USE_MPEG2ENC_FALSE@MPEG2ENC_DIR = 
 @USE_MPEG2ENC_TRUE@MPEG2ENC_DIR = mpeg2enc
-@USE_MPG123_FALSE@MPG123_DIR = 
-@USE_MPG123_TRUE@MPG123_DIR = mpg123
 @USE_MIMIC_FALSE@MIMIC_DIR = 
 @USE_MIMIC_TRUE@MIMIC_DIR = mimic
 @USE_MPLEX_FALSE@MPLEX_DIR = 
@@ -882,8 +882,6 @@
 @USE_GME_TRUE@GME_DIR = gme
 @USE_TELETEXTDEC_FALSE@TELETEXTDEC_DIR = 
 @USE_TELETEXTDEC_TRUE@TELETEXTDEC_DIR = teletextdec
-@USE_GSETTINGS_FALSE@GSETTINGS_DIR = 
-@USE_GSETTINGS_TRUE@GSETTINGS_DIR = gsettings
 @USE_XVID_FALSE@XVID_DIR = 
 @USE_XVID_TRUE@XVID_DIR = xvid
 @USE_ZBAR_FALSE@ZBAR_DIR = 
@@ -898,6 +896,8 @@
 @USE_X265_TRUE@X265_DIR = x265
 @USE_DTLS_FALSE@DTLS_DIR = 
 @USE_DTLS_TRUE@DTLS_DIR = dtls
+@USE_VULKAN_FALSE@VULKAN_DIR = 
+@USE_VULKAN_TRUE@VULKAN_DIR = vulkan
 SUBDIRS = \
 	$(VOAACENC_DIR) \
 	$(ASSRENDER_DIR) \
@@ -922,19 +922,16 @@
 	$(FAAD_DIR) \
 	$(FLITE_DIR) \
 	$(FLUIDSYNTH_DIR) \
-	$(GSETTINGS_DIR) \
 	$(GSM_DIR) \
 	$(G729_DIR) \
 	$(KATE_DIR) \
 	$(LADSPA_DIR) \
 	$(LV2_DIR) \
 	$(LIBDE265_DIR) \
-	$(LIBFAME_DIR) \
 	$(LIBMMS_DIR) \
 	$(LIBVISUAL_DIR) \
 	$(MODPLUG_DIR) \
 	$(MPEG2ENC_DIR) \
-	$(MPG123_DIR) \
 	$(MIMIC_DIR) \
 	$(MPLEX_DIR) \
 	$(MUSEPACK_DIR) \
@@ -969,7 +966,8 @@
 	$(HLS_DIR) \
 	$(WEBP_DIR) \
 	$(X265_DIR) \
-	$(DTLS_DIR)
+	$(DTLS_DIR) \
+	$(VULKAN_DIR)
 
 DIST_SUBDIRS = \
 	assrender \
@@ -986,7 +984,6 @@
 	faad \
 	flite \
 	fluidsynth \
-	gsettings \
 	gsm \
 	hls \
 	ladspa \
@@ -1003,7 +1000,6 @@
 	modplug \
 	mimic \
 	mpeg2enc \
-	mpg123 \
 	mplex \
 	musepack \
 	nas \
@@ -1038,7 +1034,8 @@
 	rtmp \
 	webp \
 	x265 \
-	dtls
+	dtls \
+	vulkan
 
 all: all-recursive
 
diff --git a/ext/apexsink/Makefile.in b/ext/apexsink/Makefile.in
index f673a41..c73888b 100644
--- a/ext/apexsink/Makefile.in
+++ b/ext/apexsink/Makefile.in
@@ -116,16 +116,15 @@
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
 	$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
-	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gsettings.m4 \
-	$(top_srcdir)/m4/gst-fionread.m4 $(top_srcdir)/m4/gst-sdl.m4 \
-	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
-	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
-	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libgcrypt.m4 \
-	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
-	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
-	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
-	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
-	$(top_srcdir)/configure.ac
+	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gst-fionread.m4 \
+	$(top_srcdir)/m4/gst-sdl.m4 $(top_srcdir)/m4/iconv.m4 \
+	$(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \
+	$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
+	$(top_srcdir)/m4/libgcrypt.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
+	$(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \
@@ -277,6 +276,8 @@
 CLUTTER_X11_LIBS = @CLUTTER_X11_LIBS@
 CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
+CUDA_CFLAGS = @CUDA_CFLAGS@
+CUDA_LIBS = @CUDA_LIBS@
 CURL_CFLAGS = @CURL_CFLAGS@
 CURL_LIBS = @CURL_LIBS@
 CXX = @CXX@
@@ -314,6 +315,8 @@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
+EGL_CFLAGS = @EGL_CFLAGS@
+EGL_LIBS = @EGL_LIBS@
 EGREP = @EGREP@
 ERROR_CFLAGS = @ERROR_CFLAGS@
 ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
@@ -322,7 +325,6 @@
 EXIF_CFLAGS = @EXIF_CFLAGS@
 EXIF_LIBS = @EXIF_LIBS@
 FAAC_LIBS = @FAAC_LIBS@
-FAAD_IS_NEAAC = @FAAD_IS_NEAAC@
 FAAD_LIBS = @FAAD_LIBS@
 FFLAGS = @FFLAGS@
 FGREP = @FGREP@
@@ -341,8 +343,9 @@
 GIO_LIBS = @GIO_LIBS@
 GIO_UNIX_CFLAGS = @GIO_UNIX_CFLAGS@
 GIO_UNIX_LIBS = @GIO_UNIX_LIBS@
+GLES2_CFLAGS = @GLES2_CFLAGS@
+GLES2_LIBS = @GLES2_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
-GLIB_COMPILE_SCHEMAS = @GLIB_COMPILE_SCHEMAS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
@@ -359,16 +362,17 @@
 GMODULE_NO_EXPORT_LIBS = @GMODULE_NO_EXPORT_LIBS@
 GMSGFMT = @GMSGFMT@
 GMSGFMT_015 = @GMSGFMT_015@
+GNUSTL_CFLAGS = @GNUSTL_CFLAGS@
+GNUSTL_LIBS = @GNUSTL_LIBS@
 GRAPHENE_CFLAGS = @GRAPHENE_CFLAGS@
 GRAPHENE_LIBS = @GRAPHENE_LIBS@
 GREP = @GREP@
-GSETTINGS_CFLAGS = @GSETTINGS_CFLAGS@
-GSETTINGS_DISABLE_SCHEMAS_COMPILE = @GSETTINGS_DISABLE_SCHEMAS_COMPILE@
-GSETTINGS_LIBS = @GSETTINGS_LIBS@
 GSM_LIBS = @GSM_LIBS@
 GSTPB_PLUGINS_DIR = @GSTPB_PLUGINS_DIR@
 GSTPB_PREFIX = @GSTPB_PREFIX@
 GST_AGE = @GST_AGE@
+GST_ALLOCATORS_CFLAGS = @GST_ALLOCATORS_CFLAGS@
+GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
 GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
 GST_API_VERSION = @GST_API_VERSION@
 GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
@@ -394,6 +398,8 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PBUTILS_CFLAGS = @GST_PBUTILS_CFLAGS@
+GST_PBUTILS_LIBS = @GST_PBUTILS_LIBS@
 GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BAD_CFLAGS = @GST_PLUGINS_BAD_CFLAGS@
@@ -419,6 +425,8 @@
 GST_PREFIX = @GST_PREFIX@
 GST_REVISION = @GST_REVISION@
 GST_TOOLS_DIR = @GST_TOOLS_DIR@
+GST_VIDEO_CFLAGS = @GST_VIDEO_CFLAGS@
+GST_VIDEO_LIBS = @GST_VIDEO_LIBS@
 GTK3_CFLAGS = @GTK3_CFLAGS@
 GTK3_GL_CFLAGS = @GTK3_GL_CFLAGS@
 GTK3_GL_LIBS = @GTK3_GL_LIBS@
@@ -520,6 +528,7 @@
 LTLIBICONV = @LTLIBICONV@
 LTLIBINTL = @LTLIBINTL@
 LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
 MANIFEST_TOOL = @MANIFEST_TOOL@
@@ -533,8 +542,6 @@
 MODPLUG_LIBS = @MODPLUG_LIBS@
 MPEG2ENC_CFLAGS = @MPEG2ENC_CFLAGS@
 MPEG2ENC_LIBS = @MPEG2ENC_LIBS@
-MPG123_CFLAGS = @MPG123_CFLAGS@
-MPG123_LIBS = @MPG123_LIBS@
 MPLEX_CFLAGS = @MPLEX_CFLAGS@
 MPLEX_LDFLAGS = @MPLEX_LDFLAGS@
 MPLEX_LIBS = @MPLEX_LIBS@
@@ -550,6 +557,8 @@
 NETTLE_LIBS = @NETTLE_LIBS@
 NM = @NM@
 NMEDIT = @NMEDIT@
+NVENCODE_CFLAGS = @NVENCODE_CFLAGS@
+NVENCODE_LIBS = @NVENCODE_LIBS@
 OBJC = @OBJC@
 OBJCDEPMODE = @OBJCDEPMODE@
 OBJCFLAGS = @OBJCFLAGS@
@@ -607,16 +616,18 @@
 PYTHON_PLATFORM = @PYTHON_PLATFORM@
 PYTHON_PREFIX = @PYTHON_PREFIX@
 PYTHON_VERSION = @PYTHON_VERSION@
+QT_ANDROID_CFLAGS = @QT_ANDROID_CFLAGS@
+QT_ANDROID_LIBS = @QT_ANDROID_LIBS@
 QT_CFLAGS = @QT_CFLAGS@
 QT_LIBS = @QT_LIBS@
+QT_MAC_CFLAGS = @QT_MAC_CFLAGS@
+QT_MAC_LIBS = @QT_MAC_LIBS@
 QT_WAYLAND_CFLAGS = @QT_WAYLAND_CFLAGS@
 QT_WAYLAND_LIBS = @QT_WAYLAND_LIBS@
 QT_X11_CFLAGS = @QT_X11_CFLAGS@
 QT_X11_LIBS = @QT_X11_LIBS@
 RANLIB = @RANLIB@
 RCC = @RCC@
-RSVG_2_36_2_CFLAGS = @RSVG_2_36_2_CFLAGS@
-RSVG_2_36_2_LIBS = @RSVG_2_36_2_LIBS@
 RSVG_CFLAGS = @RSVG_CFLAGS@
 RSVG_LIBS = @RSVG_LIBS@
 RTMP_CFLAGS = @RTMP_CFLAGS@
@@ -668,6 +679,7 @@
 VOAACENC_LIBS = @VOAACENC_LIBS@
 VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
 VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VULKAN_LIBS = @VULKAN_LIBS@
 WARNING_CFLAGS = @WARNING_CFLAGS@
 WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
 WARNING_OBJCFLAGS = @WARNING_OBJCFLAGS@
@@ -678,6 +690,7 @@
 WAYLAND_LIBS = @WAYLAND_LIBS@
 WEBP_CFLAGS = @WEBP_CFLAGS@
 WEBP_LIBS = @WEBP_LIBS@
+WGET = @WGET@
 WILDMIDI_CFLAGS = @WILDMIDI_CFLAGS@
 WILDMIDI_LIBS = @WILDMIDI_LIBS@
 WINKS_LIBS = @WINKS_LIBS@
@@ -687,6 +700,8 @@
 X11_LIBS = @X11_LIBS@
 X265_CFLAGS = @X265_CFLAGS@
 X265_LIBS = @X265_LIBS@
+XCB_CFLAGS = @XCB_CFLAGS@
+XCB_LIBS = @XCB_LIBS@
 XCOMPOSITE_CFLAGS = @XCOMPOSITE_CFLAGS@
 XCOMPOSITE_LIBS = @XCOMPOSITE_LIBS@
 XGETTEXT = @XGETTEXT@
@@ -724,7 +739,6 @@
 docdir = @docdir@
 dvidir = @dvidir@
 exec_prefix = @exec_prefix@
-gsettingsschemadir = @gsettingsschemadir@
 host = @host@
 host_alias = @host_alias@
 host_cpu = @host_cpu@
diff --git a/ext/assrender/Makefile.in b/ext/assrender/Makefile.in
index 6816025..be23ec2 100644
--- a/ext/assrender/Makefile.in
+++ b/ext/assrender/Makefile.in
@@ -116,16 +116,15 @@
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
 	$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
-	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gsettings.m4 \
-	$(top_srcdir)/m4/gst-fionread.m4 $(top_srcdir)/m4/gst-sdl.m4 \
-	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
-	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
-	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libgcrypt.m4 \
-	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
-	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
-	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
-	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
-	$(top_srcdir)/configure.ac
+	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gst-fionread.m4 \
+	$(top_srcdir)/m4/gst-sdl.m4 $(top_srcdir)/m4/iconv.m4 \
+	$(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \
+	$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
+	$(top_srcdir)/m4/libgcrypt.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
+	$(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \
@@ -274,6 +273,8 @@
 CLUTTER_X11_LIBS = @CLUTTER_X11_LIBS@
 CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
+CUDA_CFLAGS = @CUDA_CFLAGS@
+CUDA_LIBS = @CUDA_LIBS@
 CURL_CFLAGS = @CURL_CFLAGS@
 CURL_LIBS = @CURL_LIBS@
 CXX = @CXX@
@@ -311,6 +312,8 @@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
+EGL_CFLAGS = @EGL_CFLAGS@
+EGL_LIBS = @EGL_LIBS@
 EGREP = @EGREP@
 ERROR_CFLAGS = @ERROR_CFLAGS@
 ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
@@ -319,7 +322,6 @@
 EXIF_CFLAGS = @EXIF_CFLAGS@
 EXIF_LIBS = @EXIF_LIBS@
 FAAC_LIBS = @FAAC_LIBS@
-FAAD_IS_NEAAC = @FAAD_IS_NEAAC@
 FAAD_LIBS = @FAAD_LIBS@
 FFLAGS = @FFLAGS@
 FGREP = @FGREP@
@@ -338,8 +340,9 @@
 GIO_LIBS = @GIO_LIBS@
 GIO_UNIX_CFLAGS = @GIO_UNIX_CFLAGS@
 GIO_UNIX_LIBS = @GIO_UNIX_LIBS@
+GLES2_CFLAGS = @GLES2_CFLAGS@
+GLES2_LIBS = @GLES2_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
-GLIB_COMPILE_SCHEMAS = @GLIB_COMPILE_SCHEMAS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
@@ -356,16 +359,17 @@
 GMODULE_NO_EXPORT_LIBS = @GMODULE_NO_EXPORT_LIBS@
 GMSGFMT = @GMSGFMT@
 GMSGFMT_015 = @GMSGFMT_015@
+GNUSTL_CFLAGS = @GNUSTL_CFLAGS@
+GNUSTL_LIBS = @GNUSTL_LIBS@
 GRAPHENE_CFLAGS = @GRAPHENE_CFLAGS@
 GRAPHENE_LIBS = @GRAPHENE_LIBS@
 GREP = @GREP@
-GSETTINGS_CFLAGS = @GSETTINGS_CFLAGS@
-GSETTINGS_DISABLE_SCHEMAS_COMPILE = @GSETTINGS_DISABLE_SCHEMAS_COMPILE@
-GSETTINGS_LIBS = @GSETTINGS_LIBS@
 GSM_LIBS = @GSM_LIBS@
 GSTPB_PLUGINS_DIR = @GSTPB_PLUGINS_DIR@
 GSTPB_PREFIX = @GSTPB_PREFIX@
 GST_AGE = @GST_AGE@
+GST_ALLOCATORS_CFLAGS = @GST_ALLOCATORS_CFLAGS@
+GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
 GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
 GST_API_VERSION = @GST_API_VERSION@
 GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
@@ -391,6 +395,8 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PBUTILS_CFLAGS = @GST_PBUTILS_CFLAGS@
+GST_PBUTILS_LIBS = @GST_PBUTILS_LIBS@
 GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BAD_CFLAGS = @GST_PLUGINS_BAD_CFLAGS@
@@ -416,6 +422,8 @@
 GST_PREFIX = @GST_PREFIX@
 GST_REVISION = @GST_REVISION@
 GST_TOOLS_DIR = @GST_TOOLS_DIR@
+GST_VIDEO_CFLAGS = @GST_VIDEO_CFLAGS@
+GST_VIDEO_LIBS = @GST_VIDEO_LIBS@
 GTK3_CFLAGS = @GTK3_CFLAGS@
 GTK3_GL_CFLAGS = @GTK3_GL_CFLAGS@
 GTK3_GL_LIBS = @GTK3_GL_LIBS@
@@ -517,6 +525,7 @@
 LTLIBICONV = @LTLIBICONV@
 LTLIBINTL = @LTLIBINTL@
 LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
 MANIFEST_TOOL = @MANIFEST_TOOL@
@@ -530,8 +539,6 @@
 MODPLUG_LIBS = @MODPLUG_LIBS@
 MPEG2ENC_CFLAGS = @MPEG2ENC_CFLAGS@
 MPEG2ENC_LIBS = @MPEG2ENC_LIBS@
-MPG123_CFLAGS = @MPG123_CFLAGS@
-MPG123_LIBS = @MPG123_LIBS@
 MPLEX_CFLAGS = @MPLEX_CFLAGS@
 MPLEX_LDFLAGS = @MPLEX_LDFLAGS@
 MPLEX_LIBS = @MPLEX_LIBS@
@@ -547,6 +554,8 @@
 NETTLE_LIBS = @NETTLE_LIBS@
 NM = @NM@
 NMEDIT = @NMEDIT@
+NVENCODE_CFLAGS = @NVENCODE_CFLAGS@
+NVENCODE_LIBS = @NVENCODE_LIBS@
 OBJC = @OBJC@
 OBJCDEPMODE = @OBJCDEPMODE@
 OBJCFLAGS = @OBJCFLAGS@
@@ -604,16 +613,18 @@
 PYTHON_PLATFORM = @PYTHON_PLATFORM@
 PYTHON_PREFIX = @PYTHON_PREFIX@
 PYTHON_VERSION = @PYTHON_VERSION@
+QT_ANDROID_CFLAGS = @QT_ANDROID_CFLAGS@
+QT_ANDROID_LIBS = @QT_ANDROID_LIBS@
 QT_CFLAGS = @QT_CFLAGS@
 QT_LIBS = @QT_LIBS@
+QT_MAC_CFLAGS = @QT_MAC_CFLAGS@
+QT_MAC_LIBS = @QT_MAC_LIBS@
 QT_WAYLAND_CFLAGS = @QT_WAYLAND_CFLAGS@
 QT_WAYLAND_LIBS = @QT_WAYLAND_LIBS@
 QT_X11_CFLAGS = @QT_X11_CFLAGS@
 QT_X11_LIBS = @QT_X11_LIBS@
 RANLIB = @RANLIB@
 RCC = @RCC@
-RSVG_2_36_2_CFLAGS = @RSVG_2_36_2_CFLAGS@
-RSVG_2_36_2_LIBS = @RSVG_2_36_2_LIBS@
 RSVG_CFLAGS = @RSVG_CFLAGS@
 RSVG_LIBS = @RSVG_LIBS@
 RTMP_CFLAGS = @RTMP_CFLAGS@
@@ -665,6 +676,7 @@
 VOAACENC_LIBS = @VOAACENC_LIBS@
 VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
 VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VULKAN_LIBS = @VULKAN_LIBS@
 WARNING_CFLAGS = @WARNING_CFLAGS@
 WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
 WARNING_OBJCFLAGS = @WARNING_OBJCFLAGS@
@@ -675,6 +687,7 @@
 WAYLAND_LIBS = @WAYLAND_LIBS@
 WEBP_CFLAGS = @WEBP_CFLAGS@
 WEBP_LIBS = @WEBP_LIBS@
+WGET = @WGET@
 WILDMIDI_CFLAGS = @WILDMIDI_CFLAGS@
 WILDMIDI_LIBS = @WILDMIDI_LIBS@
 WINKS_LIBS = @WINKS_LIBS@
@@ -684,6 +697,8 @@
 X11_LIBS = @X11_LIBS@
 X265_CFLAGS = @X265_CFLAGS@
 X265_LIBS = @X265_LIBS@
+XCB_CFLAGS = @XCB_CFLAGS@
+XCB_LIBS = @XCB_LIBS@
 XCOMPOSITE_CFLAGS = @XCOMPOSITE_CFLAGS@
 XCOMPOSITE_LIBS = @XCOMPOSITE_LIBS@
 XGETTEXT = @XGETTEXT@
@@ -721,7 +736,6 @@
 docdir = @docdir@
 dvidir = @dvidir@
 exec_prefix = @exec_prefix@
-gsettingsschemadir = @gsettingsschemadir@
 host = @host@
 host_alias = @host_alias@
 host_cpu = @host_cpu@
diff --git a/ext/assrender/gstassrender.c b/ext/assrender/gstassrender.c
index de76af0..913beb5 100644
--- a/ext/assrender/gstassrender.c
+++ b/ext/assrender/gstassrender.c
@@ -26,7 +26,7 @@
  * <refsect2>
  * <title>Example launch line</title>
  * |[
- * gst-launch -v filesrc location=/path/to/mkv ! matroskademux name=d ! queue ! mp3parse ! mad ! audioconvert ! autoaudiosink  d. ! queue ! ffdec_h264 ! videoconvert ! r.   d. ! queue ! "application/x-ass" ! assrender name=r ! videoconvert ! autovideosink
+ * gst-launch-1.0 -v filesrc location=/path/to/mkv ! matroskademux name=d ! queue ! mpegaudioparse ! mad ! audioconvert ! autoaudiosink  d. ! queue ! h264parse ! avdec_h264 ! videoconvert ! r.   d. ! queue ! "application/x-ass" ! assrender name=r ! videoconvert ! autovideosink
  * ]| This pipeline demuxes a Matroska file with h.264 video, MP3 audio and embedded ASS subtitles and renders the subtitles on top of the video.
  * </refsect2>
  */
@@ -184,7 +184,6 @@
       "Sebastian Dröge <sebastian.droege@collabora.co.uk>");
 }
 
-#if defined(LIBASS_VERSION) && LIBASS_VERSION >= 0x00907000
 static void
 _libass_message_cb (gint level, const gchar * fmt, va_list args,
     gpointer render)
@@ -204,7 +203,6 @@
 
   g_free (message);
 }
-#endif
 
 static void
 gst_ass_render_init (GstAssRender * render)
@@ -256,9 +254,7 @@
 
   g_mutex_init (&render->ass_mutex);
   render->ass_library = ass_library_init ();
-#if defined(LIBASS_VERSION) && LIBASS_VERSION >= 0x00907000
   ass_set_message_cb (render->ass_library, _libass_message_cb, render);
-#endif
   ass_set_extract_fonts (render->ass_library, 1);
 
   render->ass_renderer = ass_renderer_init (render->ass_library);
@@ -298,6 +294,15 @@
 }
 
 static void
+gst_ass_render_reset_composition (GstAssRender * render)
+{
+  if (render->composition) {
+    gst_video_overlay_composition_unref (render->composition);
+    render->composition = NULL;
+  }
+}
+
+static void
 gst_ass_render_set_property (GObject * object, guint prop_id,
     const GValue * value, GParamSpec * pspec)
 {
@@ -391,12 +396,9 @@
       if (render->ass_track)
         ass_free_track (render->ass_track);
       render->ass_track = NULL;
-      if (render->composition) {
-        gst_video_overlay_composition_unref (render->composition);
-        render->composition = NULL;
-      }
       render->track_init_ok = FALSE;
       render->renderer_init_ok = FALSE;
+      gst_ass_render_reset_composition (render);
       g_mutex_unlock (&render->ass_mutex);
       break;
     case GST_STATE_CHANGE_READY_TO_PAUSED:
@@ -684,34 +686,40 @@
     dst_x = ass_image->dst_x + x_off;
     dst_y = ass_image->dst_y + y_off;
 
-    if (dst_y >= height || dst_x >= width)
+    w = MIN (ass_image->w, width - dst_x);
+    h = MIN (ass_image->h, height - dst_y);
+    if (w <= 0 || h <= 0)
       goto next;
 
     alpha = 255 - (ass_image->color & 0xff);
+    if (!alpha)
+      goto next;
+
     r = ((ass_image->color) >> 24) & 0xff;
     g = ((ass_image->color) >> 16) & 0xff;
     b = ((ass_image->color) >> 8) & 0xff;
+
     src = ass_image->bitmap;
     dst = data + dst_y * stride + dst_x * 4;
 
-    w = MIN (ass_image->w, width - dst_x);
-    h = MIN (ass_image->h, height - dst_y);
     src_skip = ass_image->stride - w;
     dst_skip = stride - w * 4;
 
     for (y = 0; y < h; y++) {
       for (x = 0; x < w; x++) {
-        k = src[0] * alpha / 255;
-        if (dst[3] == 0) {
-          dst[3] = k;
-          dst[2] = (k * r) / 255;
-          dst[1] = (k * g) / 255;
-          dst[0] = (k * b) / 255;
-        } else {
-          dst[3] = k + (255 - k) * dst[3] / 255;
-          dst[2] = (k * r + (255 - k) * dst[2]) / 255;
-          dst[1] = (k * g + (255 - k) * dst[1]) / 255;
-          dst[0] = (k * b + (255 - k) * dst[0]) / 255;
+        if (src[0]) {
+          k = src[0] * alpha / 255;
+          if (dst[3] == 0) {
+            dst[3] = k;
+            dst[2] = (k * r) / 255;
+            dst[1] = (k * g) / 255;
+            dst[0] = (k * b) / 255;
+          } else {
+            dst[3] = k + (255 - k) * dst[3] / 255;
+            dst[2] = (k * r + (255 - k) * dst[2]) / 255;
+            dst[1] = (k * g + (255 - k) * dst[1]) / 255;
+            dst[0] = (k * b + (255 - k) * dst[0]) / 255;
+          }
         }
         src++;
         dst += 4;
@@ -740,137 +748,228 @@
   return ret;
 }
 
+static void
+gst_ass_render_update_render_size (GstAssRender * render)
+{
+  gdouble video_aspect = (gdouble) render->info.width /
+      (gdouble) render->info.height;
+  gdouble window_aspect = (gdouble) render->window_width /
+      (gdouble) render->window_height;
+
+  /* render at the window size, with the video aspect ratio */
+  if (video_aspect >= window_aspect) {
+    render->ass_frame_width = render->window_width;
+    render->ass_frame_height = render->window_width / video_aspect;
+  } else {
+    render->ass_frame_width = render->window_height * video_aspect;
+    render->ass_frame_height = render->window_height;
+  }
+}
+
+static gboolean
+gst_ass_render_negotiate (GstAssRender * render, GstCaps * caps)
+{
+  gboolean upstream_has_meta = FALSE;
+  gboolean caps_has_meta = FALSE;
+  gboolean alloc_has_meta = FALSE;
+  gboolean attach = FALSE;
+  gboolean ret = TRUE;
+  guint width, height;
+  GstCapsFeatures *f;
+  GstCaps *overlay_caps;
+  GstQuery *query;
+  guint alloc_index;
+
+  GST_DEBUG_OBJECT (render, "performing negotiation");
+
+  /* Clear cached composition */
+  gst_ass_render_reset_composition (render);
+
+  /* Clear any pending reconfigure flag */
+  gst_pad_check_reconfigure (render->srcpad);
+
+  if (!caps)
+    caps = gst_pad_get_current_caps (render->video_sinkpad);
+  else
+    gst_caps_ref (caps);
+
+  if (!caps || gst_caps_is_empty (caps))
+    goto no_format;
+
+  /* Check if upstream caps have meta */
+  if ((f = gst_caps_get_features (caps, 0))) {
+    upstream_has_meta = gst_caps_features_contains (f,
+        GST_CAPS_FEATURE_META_GST_VIDEO_OVERLAY_COMPOSITION);
+  }
+
+  /* Initialize dimensions */
+  width = render->info.width;
+  height = render->info.height;
+
+  if (upstream_has_meta) {
+    overlay_caps = gst_caps_ref (caps);
+  } else {
+    GstCaps *peercaps;
+
+    /* BaseTransform requires caps for the allocation query to work */
+    overlay_caps = gst_caps_copy (caps);
+    f = gst_caps_get_features (overlay_caps, 0);
+    gst_caps_features_add (f,
+        GST_CAPS_FEATURE_META_GST_VIDEO_OVERLAY_COMPOSITION);
+
+    /* Then check if downstream accept overlay composition in caps */
+    /* FIXME: We should probably check if downstream *prefers* the
+     * overlay meta, and only enforce usage of it if we can't handle
+     * the format ourselves and thus would have to drop the overlays.
+     * Otherwise we should prefer what downstream wants here.
+     */
+    peercaps = gst_pad_peer_query_caps (render->srcpad, NULL);
+    caps_has_meta = gst_caps_can_intersect (peercaps, overlay_caps);
+    gst_caps_unref (peercaps);
+
+    GST_DEBUG ("caps have overlay meta %d", caps_has_meta);
+  }
+
+  if (upstream_has_meta || caps_has_meta) {
+    /* Send caps immediatly, it's needed by GstBaseTransform to get a reply
+     * from allocation query */
+    ret = gst_pad_set_caps (render->srcpad, overlay_caps);
+
+    /* First check if the allocation meta has compositon */
+    query = gst_query_new_allocation (overlay_caps, FALSE);
+
+    if (!gst_pad_peer_query (render->srcpad, query)) {
+      /* no problem, we use the query defaults */
+      GST_DEBUG_OBJECT (render, "ALLOCATION query failed");
+
+      /* In case we were flushing, mark reconfigure and fail this method,
+       * will make it retry */
+      if (render->video_flushing)
+        ret = FALSE;
+    }
+
+    alloc_has_meta = gst_query_find_allocation_meta (query,
+        GST_VIDEO_OVERLAY_COMPOSITION_META_API_TYPE, &alloc_index);
+
+    GST_DEBUG ("sink alloc has overlay meta %d", alloc_has_meta);
+
+    if (alloc_has_meta) {
+      const GstStructure *params;
+
+      gst_query_parse_nth_allocation_meta (query, alloc_index, &params);
+      if (params) {
+        if (gst_structure_get (params, "width", G_TYPE_UINT, &width,
+                "height", G_TYPE_UINT, &height, NULL)) {
+          GST_DEBUG ("received window size: %dx%d", width, height);
+          g_assert (width != 0 && height != 0);
+        }
+      }
+    }
+
+    gst_query_unref (query);
+  }
+
+  /* Update render size if needed */
+  render->window_width = width;
+  render->window_height = height;
+  gst_ass_render_update_render_size (render);
+
+  /* For backward compatbility, we will prefer bliting if downstream
+   * allocation does not support the meta. In other case we will prefer
+   * attaching, and will fail the negotiation in the unlikely case we are
+   * force to blit, but format isn't supported. */
+
+  if (upstream_has_meta) {
+    attach = TRUE;
+  } else if (caps_has_meta) {
+    if (alloc_has_meta) {
+      attach = TRUE;
+    } else {
+      /* Don't attach unless we cannot handle the format */
+      attach = !gst_ass_render_can_handle_caps (caps);
+    }
+  } else {
+    ret = gst_ass_render_can_handle_caps (caps);
+  }
+
+  /* If we attach, then pick the overlay caps */
+  if (attach) {
+    GST_DEBUG_OBJECT (render, "Using caps %" GST_PTR_FORMAT, overlay_caps);
+    /* Caps where already sent */
+  } else if (ret) {
+    GST_DEBUG_OBJECT (render, "Using caps %" GST_PTR_FORMAT, caps);
+    ret = gst_pad_set_caps (render->srcpad, caps);
+  }
+
+  render->attach_compo_to_buffer = attach;
+
+  if (!ret) {
+    GST_DEBUG_OBJECT (render, "negotiation failed, schedule reconfigure");
+    gst_pad_mark_reconfigure (render->srcpad);
+  } else {
+    g_mutex_lock (&render->ass_mutex);
+    ass_set_frame_size (render->ass_renderer,
+        render->ass_frame_width, render->ass_frame_height);
+    ass_set_storage_size (render->ass_renderer,
+        render->info.width, render->info.height);
+    ass_set_pixel_aspect (render->ass_renderer,
+        (gdouble) render->info.par_n / (gdouble) render->info.par_d);
+    ass_set_font_scale (render->ass_renderer, 1.0);
+    ass_set_hinting (render->ass_renderer, ASS_HINTING_LIGHT);
+
+    ass_set_fonts (render->ass_renderer, "Arial", "sans-serif", 1, NULL, 1);
+    ass_set_fonts (render->ass_renderer, NULL, "Sans", 1, NULL, 1);
+    ass_set_margins (render->ass_renderer, 0, 0, 0, 0);
+    ass_set_use_margins (render->ass_renderer, 0);
+    g_mutex_unlock (&render->ass_mutex);
+
+    render->renderer_init_ok = TRUE;
+
+    GST_DEBUG_OBJECT (render, "ass renderer setup complete");
+  }
+
+  gst_caps_unref (overlay_caps);
+  gst_caps_unref (caps);
+
+  return ret;
+
+no_format:
+  {
+    if (caps)
+      gst_caps_unref (caps);
+    return FALSE;
+  }
+}
+
 static gboolean
 gst_ass_render_setcaps_video (GstPad * pad, GstAssRender * render,
     GstCaps * caps)
 {
-  GstQuery *query;
-  gboolean ret = FALSE;
-  gint par_n = 1, par_d = 1;
-  gdouble dar;
   GstVideoInfo info;
-  gboolean attach = FALSE;
-  gboolean caps_has_meta = TRUE;
-  GstCapsFeatures *f;
-  GstCaps *original_caps = caps;
+  gboolean ret;
 
   if (!gst_video_info_from_caps (&info, caps))
     goto invalid_caps;
 
   render->info = info;
-  gst_caps_ref (caps);
 
-  /* Try to use the overlay meta if possible */
-  f = gst_caps_get_features (caps, 0);
+  ret = gst_ass_render_negotiate (render, caps);
 
-  /* if the caps doesn't have the overlay meta, we query if downstream
-   * accepts it before trying the version without the meta
-   * If upstream already is using the meta then we can only use it */
-  if (!f
-      || !gst_caps_features_contains (f,
-          GST_CAPS_FEATURE_META_GST_VIDEO_OVERLAY_COMPOSITION)) {
-    GstCaps *overlay_caps;
+  GST_ASS_RENDER_LOCK (render);
 
-    /* In this case we added the meta, but we can work without it
-     * so preserve the original caps so we can use it as a fallback */
-    overlay_caps = gst_caps_copy (caps);
-
-    f = gst_caps_get_features (overlay_caps, 0);
-    gst_caps_features_add (f,
-        GST_CAPS_FEATURE_META_GST_VIDEO_OVERLAY_COMPOSITION);
-
-    ret = gst_pad_peer_query_accept_caps (render->srcpad, overlay_caps);
-    GST_DEBUG_OBJECT (render, "Downstream accepts the overlay meta: %d", ret);
-    if (ret) {
-      gst_caps_unref (caps);
-      caps = overlay_caps;
-
-    } else {
-      /* fallback to the original */
-      gst_caps_unref (overlay_caps);
-      caps_has_meta = FALSE;
-    }
-
+  if (!render->attach_compo_to_buffer && !gst_ass_render_can_handle_caps (caps)) {
+    GST_DEBUG_OBJECT (render, "unsupported caps %" GST_PTR_FORMAT, caps);
+    ret = FALSE;
   }
-  GST_DEBUG_OBJECT (render, "Using caps %" GST_PTR_FORMAT, caps);
-  ret = gst_pad_set_caps (render->srcpad, caps);
-  gst_caps_unref (caps);
-
-  if (!ret)
-    goto out;
-
-  render->width = info.width;
-  render->height = info.height;
-
-  query = gst_query_new_allocation (caps, FALSE);
-  if (caps_has_meta && gst_pad_peer_query (render->srcpad, query)) {
-    if (gst_query_find_allocation_meta (query,
-            GST_VIDEO_OVERLAY_COMPOSITION_META_API_TYPE, NULL))
-      attach = TRUE;
-  }
-  gst_query_unref (query);
-
-  render->attach_compo_to_buffer = attach;
-
-  if (!attach) {
-    if (caps_has_meta) {
-      /* Some elements (fakesink) claim to accept the meta on caps but won't
-         put it in the allocation query result, this leads below
-         check to fail. Prevent this by removing the meta from caps */
-      caps = original_caps;
-      ret = gst_pad_set_caps (render->srcpad, caps);
-      if (!ret)
-        goto out;
-    }
-    if (!gst_ass_render_can_handle_caps (caps))
-      goto unsupported_caps;
-  }
-
-  g_mutex_lock (&render->ass_mutex);
-  ass_set_frame_size (render->ass_renderer, render->width, render->height);
-
-  dar = (((gdouble) par_n) * ((gdouble) render->width))
-      / (((gdouble) par_d) * ((gdouble) render->height));
-#if !defined(LIBASS_VERSION) || LIBASS_VERSION < 0x00907000
-  ass_set_aspect_ratio (render->ass_renderer, dar);
-#else
-  ass_set_aspect_ratio (render->ass_renderer,
-      dar, ((gdouble) render->width) / ((gdouble) render->height));
-#endif
-  ass_set_font_scale (render->ass_renderer, 1.0);
-  ass_set_hinting (render->ass_renderer, ASS_HINTING_LIGHT);
-
-#if !defined(LIBASS_VERSION) || LIBASS_VERSION < 0x00907000
-  ass_set_fonts (render->ass_renderer, "Arial", "sans-serif");
-  ass_set_fonts (render->ass_renderer, NULL, "Sans");
-#else
-  ass_set_fonts (render->ass_renderer, "Arial", "sans-serif", 1, NULL, 1);
-  ass_set_fonts (render->ass_renderer, NULL, "Sans", 1, NULL, 1);
-#endif
-  ass_set_margins (render->ass_renderer, 0, 0, 0, 0);
-  ass_set_use_margins (render->ass_renderer, 0);
-  g_mutex_unlock (&render->ass_mutex);
-
-  render->renderer_init_ok = TRUE;
-
-  GST_DEBUG_OBJECT (render, "ass renderer setup complete");
-
-out:
+  GST_ASS_RENDER_UNLOCK (render);
 
   return ret;
 
   /* ERRORS */
 invalid_caps:
   {
-    GST_ERROR_OBJECT (render, "Can't parse caps: %" GST_PTR_FORMAT, caps);
-    ret = FALSE;
-    goto out;
-  }
-unsupported_caps:
-  {
-    GST_ERROR_OBJECT (render, "Unsupported caps: %" GST_PTR_FORMAT, caps);
-    ret = FALSE;
-    goto out;
+    GST_ERROR_OBJECT (render, "could not parse caps");
+    return FALSE;
   }
 }
 
@@ -963,6 +1062,7 @@
   gint max_x, max_y;
   gint width, height;
   gint stride;
+  gdouble hscale, vscale;
   gpointer data;
 
   min_x = G_MAXINT;
@@ -982,8 +1082,8 @@
       max_y = image->dst_y + image->h;
   }
 
-  width = MIN (max_x - min_x, render->width);
-  height = MIN (max_y - min_y, render->height);
+  width = MIN (max_x - min_x, render->ass_frame_width);
+  height = MIN (max_y - min_y, render->ass_frame_height);
 
   GST_DEBUG_OBJECT (render, "render overlay rectangle %dx%d%+d%+d",
       width, height, min_x, min_y);
@@ -1007,8 +1107,12 @@
       -min_x, -min_y);
   gst_video_meta_unmap (vmeta, 0, &map);
 
-  rectangle = gst_video_overlay_rectangle_new_raw (buffer, min_x, min_y,
-      width, height, GST_VIDEO_OVERLAY_FORMAT_FLAG_PREMULTIPLIED_ALPHA);
+  hscale = (gdouble) render->info.width / (gdouble) render->ass_frame_width;
+  vscale = (gdouble) render->info.height / (gdouble) render->ass_frame_height;
+
+  rectangle = gst_video_overlay_rectangle_new_raw (buffer,
+      hscale * min_x, vscale * min_y, hscale * width, vscale * height,
+      GST_VIDEO_OVERLAY_FORMAT_FLAG_PREMULTIPLIED_ALPHA);
 
   gst_buffer_unref (buffer);
 
@@ -1057,6 +1161,9 @@
   guint64 start, stop, clip_start = 0, clip_stop = 0;
   ASS_Image *ass_image;
 
+  if (gst_pad_check_reconfigure (render->srcpad))
+    gst_ass_render_negotiate (render, NULL);
+
   if (!GST_BUFFER_TIMESTAMP_IS_VALID (buffer))
     goto missing_timestamp;
 
@@ -1189,8 +1296,7 @@
 
       if ((!ass_image || changed) && render->composition) {
         GST_DEBUG_OBJECT (render, "release overlay (changed %d)", changed);
-        gst_video_overlay_composition_unref (render->composition);
-        render->composition = NULL;
+        gst_ass_render_reset_composition (render);
       }
 
       if (ass_image != NULL) {
diff --git a/ext/assrender/gstassrender.h b/ext/assrender/gstassrender.h
index 4acd9e6..42f74a0 100644
--- a/ext/assrender/gstassrender.h
+++ b/ext/assrender/gstassrender.h
@@ -76,13 +76,14 @@
   ASS_Library *ass_library;
   ASS_Renderer *ass_renderer;
   ASS_Track *ass_track;
+  gint ass_frame_width, ass_frame_height;
 
   gboolean renderer_init_ok, track_init_ok;
   gboolean need_process;
 
   /* overlay stuff */
   GstVideoOverlayComposition *composition;
-  gint width, height;
+  guint window_width, window_height;
   gboolean attach_compo_to_buffer;
 };
 
diff --git a/ext/bs2b/Makefile.in b/ext/bs2b/Makefile.in
index 0433f09..ff99928 100644
--- a/ext/bs2b/Makefile.in
+++ b/ext/bs2b/Makefile.in
@@ -116,16 +116,15 @@
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
 	$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
-	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gsettings.m4 \
-	$(top_srcdir)/m4/gst-fionread.m4 $(top_srcdir)/m4/gst-sdl.m4 \
-	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
-	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
-	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libgcrypt.m4 \
-	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
-	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
-	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
-	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
-	$(top_srcdir)/configure.ac
+	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gst-fionread.m4 \
+	$(top_srcdir)/m4/gst-sdl.m4 $(top_srcdir)/m4/iconv.m4 \
+	$(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \
+	$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
+	$(top_srcdir)/m4/libgcrypt.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
+	$(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \
@@ -275,6 +274,8 @@
 CLUTTER_X11_LIBS = @CLUTTER_X11_LIBS@
 CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
+CUDA_CFLAGS = @CUDA_CFLAGS@
+CUDA_LIBS = @CUDA_LIBS@
 CURL_CFLAGS = @CURL_CFLAGS@
 CURL_LIBS = @CURL_LIBS@
 CXX = @CXX@
@@ -312,6 +313,8 @@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
+EGL_CFLAGS = @EGL_CFLAGS@
+EGL_LIBS = @EGL_LIBS@
 EGREP = @EGREP@
 ERROR_CFLAGS = @ERROR_CFLAGS@
 ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
@@ -320,7 +323,6 @@
 EXIF_CFLAGS = @EXIF_CFLAGS@
 EXIF_LIBS = @EXIF_LIBS@
 FAAC_LIBS = @FAAC_LIBS@
-FAAD_IS_NEAAC = @FAAD_IS_NEAAC@
 FAAD_LIBS = @FAAD_LIBS@
 FFLAGS = @FFLAGS@
 FGREP = @FGREP@
@@ -339,8 +341,9 @@
 GIO_LIBS = @GIO_LIBS@
 GIO_UNIX_CFLAGS = @GIO_UNIX_CFLAGS@
 GIO_UNIX_LIBS = @GIO_UNIX_LIBS@
+GLES2_CFLAGS = @GLES2_CFLAGS@
+GLES2_LIBS = @GLES2_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
-GLIB_COMPILE_SCHEMAS = @GLIB_COMPILE_SCHEMAS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
@@ -357,16 +360,17 @@
 GMODULE_NO_EXPORT_LIBS = @GMODULE_NO_EXPORT_LIBS@
 GMSGFMT = @GMSGFMT@
 GMSGFMT_015 = @GMSGFMT_015@
+GNUSTL_CFLAGS = @GNUSTL_CFLAGS@
+GNUSTL_LIBS = @GNUSTL_LIBS@
 GRAPHENE_CFLAGS = @GRAPHENE_CFLAGS@
 GRAPHENE_LIBS = @GRAPHENE_LIBS@
 GREP = @GREP@
-GSETTINGS_CFLAGS = @GSETTINGS_CFLAGS@
-GSETTINGS_DISABLE_SCHEMAS_COMPILE = @GSETTINGS_DISABLE_SCHEMAS_COMPILE@
-GSETTINGS_LIBS = @GSETTINGS_LIBS@
 GSM_LIBS = @GSM_LIBS@
 GSTPB_PLUGINS_DIR = @GSTPB_PLUGINS_DIR@
 GSTPB_PREFIX = @GSTPB_PREFIX@
 GST_AGE = @GST_AGE@
+GST_ALLOCATORS_CFLAGS = @GST_ALLOCATORS_CFLAGS@
+GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
 GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
 GST_API_VERSION = @GST_API_VERSION@
 GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
@@ -392,6 +396,8 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PBUTILS_CFLAGS = @GST_PBUTILS_CFLAGS@
+GST_PBUTILS_LIBS = @GST_PBUTILS_LIBS@
 GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BAD_CFLAGS = @GST_PLUGINS_BAD_CFLAGS@
@@ -417,6 +423,8 @@
 GST_PREFIX = @GST_PREFIX@
 GST_REVISION = @GST_REVISION@
 GST_TOOLS_DIR = @GST_TOOLS_DIR@
+GST_VIDEO_CFLAGS = @GST_VIDEO_CFLAGS@
+GST_VIDEO_LIBS = @GST_VIDEO_LIBS@
 GTK3_CFLAGS = @GTK3_CFLAGS@
 GTK3_GL_CFLAGS = @GTK3_GL_CFLAGS@
 GTK3_GL_LIBS = @GTK3_GL_LIBS@
@@ -518,6 +526,7 @@
 LTLIBICONV = @LTLIBICONV@
 LTLIBINTL = @LTLIBINTL@
 LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
 MANIFEST_TOOL = @MANIFEST_TOOL@
@@ -531,8 +540,6 @@
 MODPLUG_LIBS = @MODPLUG_LIBS@
 MPEG2ENC_CFLAGS = @MPEG2ENC_CFLAGS@
 MPEG2ENC_LIBS = @MPEG2ENC_LIBS@
-MPG123_CFLAGS = @MPG123_CFLAGS@
-MPG123_LIBS = @MPG123_LIBS@
 MPLEX_CFLAGS = @MPLEX_CFLAGS@
 MPLEX_LDFLAGS = @MPLEX_LDFLAGS@
 MPLEX_LIBS = @MPLEX_LIBS@
@@ -548,6 +555,8 @@
 NETTLE_LIBS = @NETTLE_LIBS@
 NM = @NM@
 NMEDIT = @NMEDIT@
+NVENCODE_CFLAGS = @NVENCODE_CFLAGS@
+NVENCODE_LIBS = @NVENCODE_LIBS@
 OBJC = @OBJC@
 OBJCDEPMODE = @OBJCDEPMODE@
 OBJCFLAGS = @OBJCFLAGS@
@@ -605,16 +614,18 @@
 PYTHON_PLATFORM = @PYTHON_PLATFORM@
 PYTHON_PREFIX = @PYTHON_PREFIX@
 PYTHON_VERSION = @PYTHON_VERSION@
+QT_ANDROID_CFLAGS = @QT_ANDROID_CFLAGS@
+QT_ANDROID_LIBS = @QT_ANDROID_LIBS@
 QT_CFLAGS = @QT_CFLAGS@
 QT_LIBS = @QT_LIBS@
+QT_MAC_CFLAGS = @QT_MAC_CFLAGS@
+QT_MAC_LIBS = @QT_MAC_LIBS@
 QT_WAYLAND_CFLAGS = @QT_WAYLAND_CFLAGS@
 QT_WAYLAND_LIBS = @QT_WAYLAND_LIBS@
 QT_X11_CFLAGS = @QT_X11_CFLAGS@
 QT_X11_LIBS = @QT_X11_LIBS@
 RANLIB = @RANLIB@
 RCC = @RCC@
-RSVG_2_36_2_CFLAGS = @RSVG_2_36_2_CFLAGS@
-RSVG_2_36_2_LIBS = @RSVG_2_36_2_LIBS@
 RSVG_CFLAGS = @RSVG_CFLAGS@
 RSVG_LIBS = @RSVG_LIBS@
 RTMP_CFLAGS = @RTMP_CFLAGS@
@@ -666,6 +677,7 @@
 VOAACENC_LIBS = @VOAACENC_LIBS@
 VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
 VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VULKAN_LIBS = @VULKAN_LIBS@
 WARNING_CFLAGS = @WARNING_CFLAGS@
 WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
 WARNING_OBJCFLAGS = @WARNING_OBJCFLAGS@
@@ -676,6 +688,7 @@
 WAYLAND_LIBS = @WAYLAND_LIBS@
 WEBP_CFLAGS = @WEBP_CFLAGS@
 WEBP_LIBS = @WEBP_LIBS@
+WGET = @WGET@
 WILDMIDI_CFLAGS = @WILDMIDI_CFLAGS@
 WILDMIDI_LIBS = @WILDMIDI_LIBS@
 WINKS_LIBS = @WINKS_LIBS@
@@ -685,6 +698,8 @@
 X11_LIBS = @X11_LIBS@
 X265_CFLAGS = @X265_CFLAGS@
 X265_LIBS = @X265_LIBS@
+XCB_CFLAGS = @XCB_CFLAGS@
+XCB_LIBS = @XCB_LIBS@
 XCOMPOSITE_CFLAGS = @XCOMPOSITE_CFLAGS@
 XCOMPOSITE_LIBS = @XCOMPOSITE_LIBS@
 XGETTEXT = @XGETTEXT@
@@ -722,7 +737,6 @@
 docdir = @docdir@
 dvidir = @dvidir@
 exec_prefix = @exec_prefix@
-gsettingsschemadir = @gsettingsschemadir@
 host = @host@
 host_alias = @host_alias@
 host_cpu = @host_cpu@
diff --git a/ext/bz2/Makefile.in b/ext/bz2/Makefile.in
index 79b3c0d..4567748 100644
--- a/ext/bz2/Makefile.in
+++ b/ext/bz2/Makefile.in
@@ -116,16 +116,15 @@
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
 	$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
-	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gsettings.m4 \
-	$(top_srcdir)/m4/gst-fionread.m4 $(top_srcdir)/m4/gst-sdl.m4 \
-	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
-	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
-	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libgcrypt.m4 \
-	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
-	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
-	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
-	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
-	$(top_srcdir)/configure.ac
+	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gst-fionread.m4 \
+	$(top_srcdir)/m4/gst-sdl.m4 $(top_srcdir)/m4/iconv.m4 \
+	$(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \
+	$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
+	$(top_srcdir)/m4/libgcrypt.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
+	$(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \
@@ -275,6 +274,8 @@
 CLUTTER_X11_LIBS = @CLUTTER_X11_LIBS@
 CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
+CUDA_CFLAGS = @CUDA_CFLAGS@
+CUDA_LIBS = @CUDA_LIBS@
 CURL_CFLAGS = @CURL_CFLAGS@
 CURL_LIBS = @CURL_LIBS@
 CXX = @CXX@
@@ -312,6 +313,8 @@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
+EGL_CFLAGS = @EGL_CFLAGS@
+EGL_LIBS = @EGL_LIBS@
 EGREP = @EGREP@
 ERROR_CFLAGS = @ERROR_CFLAGS@
 ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
@@ -320,7 +323,6 @@
 EXIF_CFLAGS = @EXIF_CFLAGS@
 EXIF_LIBS = @EXIF_LIBS@
 FAAC_LIBS = @FAAC_LIBS@
-FAAD_IS_NEAAC = @FAAD_IS_NEAAC@
 FAAD_LIBS = @FAAD_LIBS@
 FFLAGS = @FFLAGS@
 FGREP = @FGREP@
@@ -339,8 +341,9 @@
 GIO_LIBS = @GIO_LIBS@
 GIO_UNIX_CFLAGS = @GIO_UNIX_CFLAGS@
 GIO_UNIX_LIBS = @GIO_UNIX_LIBS@
+GLES2_CFLAGS = @GLES2_CFLAGS@
+GLES2_LIBS = @GLES2_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
-GLIB_COMPILE_SCHEMAS = @GLIB_COMPILE_SCHEMAS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
@@ -357,16 +360,17 @@
 GMODULE_NO_EXPORT_LIBS = @GMODULE_NO_EXPORT_LIBS@
 GMSGFMT = @GMSGFMT@
 GMSGFMT_015 = @GMSGFMT_015@
+GNUSTL_CFLAGS = @GNUSTL_CFLAGS@
+GNUSTL_LIBS = @GNUSTL_LIBS@
 GRAPHENE_CFLAGS = @GRAPHENE_CFLAGS@
 GRAPHENE_LIBS = @GRAPHENE_LIBS@
 GREP = @GREP@
-GSETTINGS_CFLAGS = @GSETTINGS_CFLAGS@
-GSETTINGS_DISABLE_SCHEMAS_COMPILE = @GSETTINGS_DISABLE_SCHEMAS_COMPILE@
-GSETTINGS_LIBS = @GSETTINGS_LIBS@
 GSM_LIBS = @GSM_LIBS@
 GSTPB_PLUGINS_DIR = @GSTPB_PLUGINS_DIR@
 GSTPB_PREFIX = @GSTPB_PREFIX@
 GST_AGE = @GST_AGE@
+GST_ALLOCATORS_CFLAGS = @GST_ALLOCATORS_CFLAGS@
+GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
 GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
 GST_API_VERSION = @GST_API_VERSION@
 GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
@@ -392,6 +396,8 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PBUTILS_CFLAGS = @GST_PBUTILS_CFLAGS@
+GST_PBUTILS_LIBS = @GST_PBUTILS_LIBS@
 GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BAD_CFLAGS = @GST_PLUGINS_BAD_CFLAGS@
@@ -417,6 +423,8 @@
 GST_PREFIX = @GST_PREFIX@
 GST_REVISION = @GST_REVISION@
 GST_TOOLS_DIR = @GST_TOOLS_DIR@
+GST_VIDEO_CFLAGS = @GST_VIDEO_CFLAGS@
+GST_VIDEO_LIBS = @GST_VIDEO_LIBS@
 GTK3_CFLAGS = @GTK3_CFLAGS@
 GTK3_GL_CFLAGS = @GTK3_GL_CFLAGS@
 GTK3_GL_LIBS = @GTK3_GL_LIBS@
@@ -518,6 +526,7 @@
 LTLIBICONV = @LTLIBICONV@
 LTLIBINTL = @LTLIBINTL@
 LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
 MANIFEST_TOOL = @MANIFEST_TOOL@
@@ -531,8 +540,6 @@
 MODPLUG_LIBS = @MODPLUG_LIBS@
 MPEG2ENC_CFLAGS = @MPEG2ENC_CFLAGS@
 MPEG2ENC_LIBS = @MPEG2ENC_LIBS@
-MPG123_CFLAGS = @MPG123_CFLAGS@
-MPG123_LIBS = @MPG123_LIBS@
 MPLEX_CFLAGS = @MPLEX_CFLAGS@
 MPLEX_LDFLAGS = @MPLEX_LDFLAGS@
 MPLEX_LIBS = @MPLEX_LIBS@
@@ -548,6 +555,8 @@
 NETTLE_LIBS = @NETTLE_LIBS@
 NM = @NM@
 NMEDIT = @NMEDIT@
+NVENCODE_CFLAGS = @NVENCODE_CFLAGS@
+NVENCODE_LIBS = @NVENCODE_LIBS@
 OBJC = @OBJC@
 OBJCDEPMODE = @OBJCDEPMODE@
 OBJCFLAGS = @OBJCFLAGS@
@@ -605,16 +614,18 @@
 PYTHON_PLATFORM = @PYTHON_PLATFORM@
 PYTHON_PREFIX = @PYTHON_PREFIX@
 PYTHON_VERSION = @PYTHON_VERSION@
+QT_ANDROID_CFLAGS = @QT_ANDROID_CFLAGS@
+QT_ANDROID_LIBS = @QT_ANDROID_LIBS@
 QT_CFLAGS = @QT_CFLAGS@
 QT_LIBS = @QT_LIBS@
+QT_MAC_CFLAGS = @QT_MAC_CFLAGS@
+QT_MAC_LIBS = @QT_MAC_LIBS@
 QT_WAYLAND_CFLAGS = @QT_WAYLAND_CFLAGS@
 QT_WAYLAND_LIBS = @QT_WAYLAND_LIBS@
 QT_X11_CFLAGS = @QT_X11_CFLAGS@
 QT_X11_LIBS = @QT_X11_LIBS@
 RANLIB = @RANLIB@
 RCC = @RCC@
-RSVG_2_36_2_CFLAGS = @RSVG_2_36_2_CFLAGS@
-RSVG_2_36_2_LIBS = @RSVG_2_36_2_LIBS@
 RSVG_CFLAGS = @RSVG_CFLAGS@
 RSVG_LIBS = @RSVG_LIBS@
 RTMP_CFLAGS = @RTMP_CFLAGS@
@@ -666,6 +677,7 @@
 VOAACENC_LIBS = @VOAACENC_LIBS@
 VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
 VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VULKAN_LIBS = @VULKAN_LIBS@
 WARNING_CFLAGS = @WARNING_CFLAGS@
 WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
 WARNING_OBJCFLAGS = @WARNING_OBJCFLAGS@
@@ -676,6 +688,7 @@
 WAYLAND_LIBS = @WAYLAND_LIBS@
 WEBP_CFLAGS = @WEBP_CFLAGS@
 WEBP_LIBS = @WEBP_LIBS@
+WGET = @WGET@
 WILDMIDI_CFLAGS = @WILDMIDI_CFLAGS@
 WILDMIDI_LIBS = @WILDMIDI_LIBS@
 WINKS_LIBS = @WINKS_LIBS@
@@ -685,6 +698,8 @@
 X11_LIBS = @X11_LIBS@
 X265_CFLAGS = @X265_CFLAGS@
 X265_LIBS = @X265_LIBS@
+XCB_CFLAGS = @XCB_CFLAGS@
+XCB_LIBS = @XCB_LIBS@
 XCOMPOSITE_CFLAGS = @XCOMPOSITE_CFLAGS@
 XCOMPOSITE_LIBS = @XCOMPOSITE_LIBS@
 XGETTEXT = @XGETTEXT@
@@ -722,7 +737,6 @@
 docdir = @docdir@
 dvidir = @dvidir@
 exec_prefix = @exec_prefix@
-gsettingsschemadir = @gsettingsschemadir@
 host = @host@
 host_alias = @host_alias@
 host_cpu = @host_cpu@
diff --git a/ext/chromaprint/Makefile.in b/ext/chromaprint/Makefile.in
index 37b65a1..cb7d272 100644
--- a/ext/chromaprint/Makefile.in
+++ b/ext/chromaprint/Makefile.in
@@ -116,16 +116,15 @@
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
 	$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
-	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gsettings.m4 \
-	$(top_srcdir)/m4/gst-fionread.m4 $(top_srcdir)/m4/gst-sdl.m4 \
-	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
-	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
-	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libgcrypt.m4 \
-	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
-	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
-	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
-	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
-	$(top_srcdir)/configure.ac
+	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gst-fionread.m4 \
+	$(top_srcdir)/m4/gst-sdl.m4 $(top_srcdir)/m4/iconv.m4 \
+	$(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \
+	$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
+	$(top_srcdir)/m4/libgcrypt.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
+	$(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \
@@ -276,6 +275,8 @@
 CLUTTER_X11_LIBS = @CLUTTER_X11_LIBS@
 CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
+CUDA_CFLAGS = @CUDA_CFLAGS@
+CUDA_LIBS = @CUDA_LIBS@
 CURL_CFLAGS = @CURL_CFLAGS@
 CURL_LIBS = @CURL_LIBS@
 CXX = @CXX@
@@ -313,6 +314,8 @@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
+EGL_CFLAGS = @EGL_CFLAGS@
+EGL_LIBS = @EGL_LIBS@
 EGREP = @EGREP@
 ERROR_CFLAGS = @ERROR_CFLAGS@
 ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
@@ -321,7 +324,6 @@
 EXIF_CFLAGS = @EXIF_CFLAGS@
 EXIF_LIBS = @EXIF_LIBS@
 FAAC_LIBS = @FAAC_LIBS@
-FAAD_IS_NEAAC = @FAAD_IS_NEAAC@
 FAAD_LIBS = @FAAD_LIBS@
 FFLAGS = @FFLAGS@
 FGREP = @FGREP@
@@ -340,8 +342,9 @@
 GIO_LIBS = @GIO_LIBS@
 GIO_UNIX_CFLAGS = @GIO_UNIX_CFLAGS@
 GIO_UNIX_LIBS = @GIO_UNIX_LIBS@
+GLES2_CFLAGS = @GLES2_CFLAGS@
+GLES2_LIBS = @GLES2_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
-GLIB_COMPILE_SCHEMAS = @GLIB_COMPILE_SCHEMAS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
@@ -358,16 +361,17 @@
 GMODULE_NO_EXPORT_LIBS = @GMODULE_NO_EXPORT_LIBS@
 GMSGFMT = @GMSGFMT@
 GMSGFMT_015 = @GMSGFMT_015@
+GNUSTL_CFLAGS = @GNUSTL_CFLAGS@
+GNUSTL_LIBS = @GNUSTL_LIBS@
 GRAPHENE_CFLAGS = @GRAPHENE_CFLAGS@
 GRAPHENE_LIBS = @GRAPHENE_LIBS@
 GREP = @GREP@
-GSETTINGS_CFLAGS = @GSETTINGS_CFLAGS@
-GSETTINGS_DISABLE_SCHEMAS_COMPILE = @GSETTINGS_DISABLE_SCHEMAS_COMPILE@
-GSETTINGS_LIBS = @GSETTINGS_LIBS@
 GSM_LIBS = @GSM_LIBS@
 GSTPB_PLUGINS_DIR = @GSTPB_PLUGINS_DIR@
 GSTPB_PREFIX = @GSTPB_PREFIX@
 GST_AGE = @GST_AGE@
+GST_ALLOCATORS_CFLAGS = @GST_ALLOCATORS_CFLAGS@
+GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
 GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
 GST_API_VERSION = @GST_API_VERSION@
 GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
@@ -393,6 +397,8 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PBUTILS_CFLAGS = @GST_PBUTILS_CFLAGS@
+GST_PBUTILS_LIBS = @GST_PBUTILS_LIBS@
 GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BAD_CFLAGS = @GST_PLUGINS_BAD_CFLAGS@
@@ -418,6 +424,8 @@
 GST_PREFIX = @GST_PREFIX@
 GST_REVISION = @GST_REVISION@
 GST_TOOLS_DIR = @GST_TOOLS_DIR@
+GST_VIDEO_CFLAGS = @GST_VIDEO_CFLAGS@
+GST_VIDEO_LIBS = @GST_VIDEO_LIBS@
 GTK3_CFLAGS = @GTK3_CFLAGS@
 GTK3_GL_CFLAGS = @GTK3_GL_CFLAGS@
 GTK3_GL_LIBS = @GTK3_GL_LIBS@
@@ -519,6 +527,7 @@
 LTLIBICONV = @LTLIBICONV@
 LTLIBINTL = @LTLIBINTL@
 LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
 MANIFEST_TOOL = @MANIFEST_TOOL@
@@ -532,8 +541,6 @@
 MODPLUG_LIBS = @MODPLUG_LIBS@
 MPEG2ENC_CFLAGS = @MPEG2ENC_CFLAGS@
 MPEG2ENC_LIBS = @MPEG2ENC_LIBS@
-MPG123_CFLAGS = @MPG123_CFLAGS@
-MPG123_LIBS = @MPG123_LIBS@
 MPLEX_CFLAGS = @MPLEX_CFLAGS@
 MPLEX_LDFLAGS = @MPLEX_LDFLAGS@
 MPLEX_LIBS = @MPLEX_LIBS@
@@ -549,6 +556,8 @@
 NETTLE_LIBS = @NETTLE_LIBS@
 NM = @NM@
 NMEDIT = @NMEDIT@
+NVENCODE_CFLAGS = @NVENCODE_CFLAGS@
+NVENCODE_LIBS = @NVENCODE_LIBS@
 OBJC = @OBJC@
 OBJCDEPMODE = @OBJCDEPMODE@
 OBJCFLAGS = @OBJCFLAGS@
@@ -606,16 +615,18 @@
 PYTHON_PLATFORM = @PYTHON_PLATFORM@
 PYTHON_PREFIX = @PYTHON_PREFIX@
 PYTHON_VERSION = @PYTHON_VERSION@
+QT_ANDROID_CFLAGS = @QT_ANDROID_CFLAGS@
+QT_ANDROID_LIBS = @QT_ANDROID_LIBS@
 QT_CFLAGS = @QT_CFLAGS@
 QT_LIBS = @QT_LIBS@
+QT_MAC_CFLAGS = @QT_MAC_CFLAGS@
+QT_MAC_LIBS = @QT_MAC_LIBS@
 QT_WAYLAND_CFLAGS = @QT_WAYLAND_CFLAGS@
 QT_WAYLAND_LIBS = @QT_WAYLAND_LIBS@
 QT_X11_CFLAGS = @QT_X11_CFLAGS@
 QT_X11_LIBS = @QT_X11_LIBS@
 RANLIB = @RANLIB@
 RCC = @RCC@
-RSVG_2_36_2_CFLAGS = @RSVG_2_36_2_CFLAGS@
-RSVG_2_36_2_LIBS = @RSVG_2_36_2_LIBS@
 RSVG_CFLAGS = @RSVG_CFLAGS@
 RSVG_LIBS = @RSVG_LIBS@
 RTMP_CFLAGS = @RTMP_CFLAGS@
@@ -667,6 +678,7 @@
 VOAACENC_LIBS = @VOAACENC_LIBS@
 VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
 VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VULKAN_LIBS = @VULKAN_LIBS@
 WARNING_CFLAGS = @WARNING_CFLAGS@
 WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
 WARNING_OBJCFLAGS = @WARNING_OBJCFLAGS@
@@ -677,6 +689,7 @@
 WAYLAND_LIBS = @WAYLAND_LIBS@
 WEBP_CFLAGS = @WEBP_CFLAGS@
 WEBP_LIBS = @WEBP_LIBS@
+WGET = @WGET@
 WILDMIDI_CFLAGS = @WILDMIDI_CFLAGS@
 WILDMIDI_LIBS = @WILDMIDI_LIBS@
 WINKS_LIBS = @WINKS_LIBS@
@@ -686,6 +699,8 @@
 X11_LIBS = @X11_LIBS@
 X265_CFLAGS = @X265_CFLAGS@
 X265_LIBS = @X265_LIBS@
+XCB_CFLAGS = @XCB_CFLAGS@
+XCB_LIBS = @XCB_LIBS@
 XCOMPOSITE_CFLAGS = @XCOMPOSITE_CFLAGS@
 XCOMPOSITE_LIBS = @XCOMPOSITE_LIBS@
 XGETTEXT = @XGETTEXT@
@@ -723,7 +738,6 @@
 docdir = @docdir@
 dvidir = @dvidir@
 exec_prefix = @exec_prefix@
-gsettingsschemadir = @gsettingsschemadir@
 host = @host@
 host_alias = @host_alias@
 host_cpu = @host_cpu@
diff --git a/ext/chromaprint/gstchromaprint.c b/ext/chromaprint/gstchromaprint.c
index 7c05221..b7217a6 100644
--- a/ext/chromaprint/gstchromaprint.c
+++ b/ext/chromaprint/gstchromaprint.c
@@ -32,7 +32,7 @@
  * <refsect2>
  * <title>Example launch line</title>
  * |[
- * gst-launch -m uridecodebin uri=file:///path/to/song.ogg ! audioconvert ! chromaprint ! fakesink
+ * gst-launch-1.0 -m uridecodebin uri=file:///path/to/song.ogg ! audioconvert ! chromaprint ! fakesink
  * ]|
  * </refsect2>
  */
diff --git a/ext/curl/Makefile.in b/ext/curl/Makefile.in
index 21ca399..71e2f56 100644
--- a/ext/curl/Makefile.in
+++ b/ext/curl/Makefile.in
@@ -116,16 +116,15 @@
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
 	$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
-	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gsettings.m4 \
-	$(top_srcdir)/m4/gst-fionread.m4 $(top_srcdir)/m4/gst-sdl.m4 \
-	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
-	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
-	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libgcrypt.m4 \
-	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
-	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
-	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
-	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
-	$(top_srcdir)/configure.ac
+	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gst-fionread.m4 \
+	$(top_srcdir)/m4/gst-sdl.m4 $(top_srcdir)/m4/iconv.m4 \
+	$(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \
+	$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
+	$(top_srcdir)/m4/libgcrypt.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
+	$(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \
@@ -288,6 +287,8 @@
 CLUTTER_X11_LIBS = @CLUTTER_X11_LIBS@
 CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
+CUDA_CFLAGS = @CUDA_CFLAGS@
+CUDA_LIBS = @CUDA_LIBS@
 CURL_CFLAGS = @CURL_CFLAGS@
 CURL_LIBS = @CURL_LIBS@
 CXX = @CXX@
@@ -325,6 +326,8 @@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
+EGL_CFLAGS = @EGL_CFLAGS@
+EGL_LIBS = @EGL_LIBS@
 EGREP = @EGREP@
 ERROR_CFLAGS = @ERROR_CFLAGS@
 ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
@@ -333,7 +336,6 @@
 EXIF_CFLAGS = @EXIF_CFLAGS@
 EXIF_LIBS = @EXIF_LIBS@
 FAAC_LIBS = @FAAC_LIBS@
-FAAD_IS_NEAAC = @FAAD_IS_NEAAC@
 FAAD_LIBS = @FAAD_LIBS@
 FFLAGS = @FFLAGS@
 FGREP = @FGREP@
@@ -352,8 +354,9 @@
 GIO_LIBS = @GIO_LIBS@
 GIO_UNIX_CFLAGS = @GIO_UNIX_CFLAGS@
 GIO_UNIX_LIBS = @GIO_UNIX_LIBS@
+GLES2_CFLAGS = @GLES2_CFLAGS@
+GLES2_LIBS = @GLES2_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
-GLIB_COMPILE_SCHEMAS = @GLIB_COMPILE_SCHEMAS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
@@ -370,16 +373,17 @@
 GMODULE_NO_EXPORT_LIBS = @GMODULE_NO_EXPORT_LIBS@
 GMSGFMT = @GMSGFMT@
 GMSGFMT_015 = @GMSGFMT_015@
+GNUSTL_CFLAGS = @GNUSTL_CFLAGS@
+GNUSTL_LIBS = @GNUSTL_LIBS@
 GRAPHENE_CFLAGS = @GRAPHENE_CFLAGS@
 GRAPHENE_LIBS = @GRAPHENE_LIBS@
 GREP = @GREP@
-GSETTINGS_CFLAGS = @GSETTINGS_CFLAGS@
-GSETTINGS_DISABLE_SCHEMAS_COMPILE = @GSETTINGS_DISABLE_SCHEMAS_COMPILE@
-GSETTINGS_LIBS = @GSETTINGS_LIBS@
 GSM_LIBS = @GSM_LIBS@
 GSTPB_PLUGINS_DIR = @GSTPB_PLUGINS_DIR@
 GSTPB_PREFIX = @GSTPB_PREFIX@
 GST_AGE = @GST_AGE@
+GST_ALLOCATORS_CFLAGS = @GST_ALLOCATORS_CFLAGS@
+GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
 GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
 GST_API_VERSION = @GST_API_VERSION@
 GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
@@ -405,6 +409,8 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PBUTILS_CFLAGS = @GST_PBUTILS_CFLAGS@
+GST_PBUTILS_LIBS = @GST_PBUTILS_LIBS@
 GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BAD_CFLAGS = @GST_PLUGINS_BAD_CFLAGS@
@@ -430,6 +436,8 @@
 GST_PREFIX = @GST_PREFIX@
 GST_REVISION = @GST_REVISION@
 GST_TOOLS_DIR = @GST_TOOLS_DIR@
+GST_VIDEO_CFLAGS = @GST_VIDEO_CFLAGS@
+GST_VIDEO_LIBS = @GST_VIDEO_LIBS@
 GTK3_CFLAGS = @GTK3_CFLAGS@
 GTK3_GL_CFLAGS = @GTK3_GL_CFLAGS@
 GTK3_GL_LIBS = @GTK3_GL_LIBS@
@@ -531,6 +539,7 @@
 LTLIBICONV = @LTLIBICONV@
 LTLIBINTL = @LTLIBINTL@
 LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
 MANIFEST_TOOL = @MANIFEST_TOOL@
@@ -544,8 +553,6 @@
 MODPLUG_LIBS = @MODPLUG_LIBS@
 MPEG2ENC_CFLAGS = @MPEG2ENC_CFLAGS@
 MPEG2ENC_LIBS = @MPEG2ENC_LIBS@
-MPG123_CFLAGS = @MPG123_CFLAGS@
-MPG123_LIBS = @MPG123_LIBS@
 MPLEX_CFLAGS = @MPLEX_CFLAGS@
 MPLEX_LDFLAGS = @MPLEX_LDFLAGS@
 MPLEX_LIBS = @MPLEX_LIBS@
@@ -561,6 +568,8 @@
 NETTLE_LIBS = @NETTLE_LIBS@
 NM = @NM@
 NMEDIT = @NMEDIT@
+NVENCODE_CFLAGS = @NVENCODE_CFLAGS@
+NVENCODE_LIBS = @NVENCODE_LIBS@
 OBJC = @OBJC@
 OBJCDEPMODE = @OBJCDEPMODE@
 OBJCFLAGS = @OBJCFLAGS@
@@ -618,16 +627,18 @@
 PYTHON_PLATFORM = @PYTHON_PLATFORM@
 PYTHON_PREFIX = @PYTHON_PREFIX@
 PYTHON_VERSION = @PYTHON_VERSION@
+QT_ANDROID_CFLAGS = @QT_ANDROID_CFLAGS@
+QT_ANDROID_LIBS = @QT_ANDROID_LIBS@
 QT_CFLAGS = @QT_CFLAGS@
 QT_LIBS = @QT_LIBS@
+QT_MAC_CFLAGS = @QT_MAC_CFLAGS@
+QT_MAC_LIBS = @QT_MAC_LIBS@
 QT_WAYLAND_CFLAGS = @QT_WAYLAND_CFLAGS@
 QT_WAYLAND_LIBS = @QT_WAYLAND_LIBS@
 QT_X11_CFLAGS = @QT_X11_CFLAGS@
 QT_X11_LIBS = @QT_X11_LIBS@
 RANLIB = @RANLIB@
 RCC = @RCC@
-RSVG_2_36_2_CFLAGS = @RSVG_2_36_2_CFLAGS@
-RSVG_2_36_2_LIBS = @RSVG_2_36_2_LIBS@
 RSVG_CFLAGS = @RSVG_CFLAGS@
 RSVG_LIBS = @RSVG_LIBS@
 RTMP_CFLAGS = @RTMP_CFLAGS@
@@ -679,6 +690,7 @@
 VOAACENC_LIBS = @VOAACENC_LIBS@
 VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
 VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VULKAN_LIBS = @VULKAN_LIBS@
 WARNING_CFLAGS = @WARNING_CFLAGS@
 WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
 WARNING_OBJCFLAGS = @WARNING_OBJCFLAGS@
@@ -689,6 +701,7 @@
 WAYLAND_LIBS = @WAYLAND_LIBS@
 WEBP_CFLAGS = @WEBP_CFLAGS@
 WEBP_LIBS = @WEBP_LIBS@
+WGET = @WGET@
 WILDMIDI_CFLAGS = @WILDMIDI_CFLAGS@
 WILDMIDI_LIBS = @WILDMIDI_LIBS@
 WINKS_LIBS = @WINKS_LIBS@
@@ -698,6 +711,8 @@
 X11_LIBS = @X11_LIBS@
 X265_CFLAGS = @X265_CFLAGS@
 X265_LIBS = @X265_LIBS@
+XCB_CFLAGS = @XCB_CFLAGS@
+XCB_LIBS = @XCB_LIBS@
 XCOMPOSITE_CFLAGS = @XCOMPOSITE_CFLAGS@
 XCOMPOSITE_LIBS = @XCOMPOSITE_LIBS@
 XGETTEXT = @XGETTEXT@
@@ -735,7 +750,6 @@
 docdir = @docdir@
 dvidir = @dvidir@
 exec_prefix = @exec_prefix@
-gsettingsschemadir = @gsettingsschemadir@
 host = @host@
 host_alias = @host_alias@
 host_cpu = @host_cpu@
diff --git a/ext/curl/gstcurlbasesink.c b/ext/curl/gstcurlbasesink.c
index b47f246..725f1ac 100644
--- a/ext/curl/gstcurlbasesink.c
+++ b/ext/curl/gstcurlbasesink.c
@@ -28,7 +28,7 @@
  * <refsect2>
  * <title>Example launch line (upload a JPEG file to an HTTP server)</title>
  * |[
- * gst-launch filesrc location=image.jpg ! jpegparse ! curlsink  \
+ * gst-launch-1.0 filesrc location=image.jpg ! jpegparse ! curlsink  \
  *     file-name=image.jpg  \
  *     location=http://192.168.0.1:8080/cgi-bin/patupload.cgi/  \
  *     user=test passwd=test  \
@@ -349,12 +349,17 @@
 
   sink = GST_CURL_BASE_SINK (bsink);
 
-  GST_OBJECT_LOCK (sink);
-
   gst_buffer_map (buf, &map, GST_MAP_READ);
   data = map.data;
   size = map.size;
 
+  if (size == 0) {
+    gst_buffer_unmap (buf, &map);
+    return GST_FLOW_OK;
+  }
+
+  GST_OBJECT_LOCK (sink);
+
   /* check if the transfer thread has encountered problems while the
    * pipeline thread was working elsewhere */
   if (sink->flow_ret != GST_FLOW_OK) {
diff --git a/ext/curl/gstcurlfilesink.c b/ext/curl/gstcurlfilesink.c
index d286540..b4aa174 100644
--- a/ext/curl/gstcurlfilesink.c
+++ b/ext/curl/gstcurlfilesink.c
@@ -29,7 +29,7 @@
  * <title>Example launch line (upload a JPEG file to /home/test/images
  * directory)</title>
  * |[
- * gst-launch filesrc location=image.jpg ! jpegparse ! curlfilesink  \
+ * gst-launch-1.0 filesrc location=image.jpg ! jpegparse ! curlfilesink  \
  *     file-name=image.jpg  \
  *     location=file:///home/test/images/
  * ]|
diff --git a/ext/curl/gstcurlftpsink.c b/ext/curl/gstcurlftpsink.c
index 995fe38..92b5c4e 100644
--- a/ext/curl/gstcurlftpsink.c
+++ b/ext/curl/gstcurlftpsink.c
@@ -29,7 +29,7 @@
  * <title>Example launch line (upload a JPEG file to /home/test/images
  * directory)</title>
  * |[
- * gst-launch filesrc location=image.jpg ! jpegparse ! curlftpsink  \
+ * gst-launch-1.0 filesrc location=image.jpg ! jpegparse ! curlftpsink  \
  *     file-name=image.jpg  \
  *     location=ftp://192.168.0.1/images/
  * ]|
@@ -230,7 +230,8 @@
       return FALSE;
     }
 
-    res = curl_easy_setopt (basesink->curl, CURLOPT_POSTQUOTE, sink->headerlist);
+    res =
+        curl_easy_setopt (basesink->curl, CURLOPT_POSTQUOTE, sink->headerlist);
     if (res != CURLE_OK) {
       basesink->error = g_strdup_printf ("failed to set post quote: %s",
           curl_easy_strerror (res));
diff --git a/ext/curl/gstcurlhttpsink.c b/ext/curl/gstcurlhttpsink.c
index 3660f5b..a50a057 100644
--- a/ext/curl/gstcurlhttpsink.c
+++ b/ext/curl/gstcurlhttpsink.c
@@ -28,7 +28,7 @@
  * <refsect2>
  * <title>Example launch line (upload a JPEG file to an HTTP server)</title>
  * |[
- * gst-launch filesrc location=image.jpg ! jpegparse ! curlhttpsink  \
+ * gst-launch-1.0 filesrc location=image.jpg ! jpegparse ! curlhttpsink  \
  *     file-name=image.jpg  \
  *     location=http://192.168.0.1:8080/cgi-bin/patupload.cgi/  \
  *     user=test passwd=test  \
diff --git a/ext/curl/gstcurlsftpsink.c b/ext/curl/gstcurlsftpsink.c
index 5b544f0..939ebd8 100644
--- a/ext/curl/gstcurlsftpsink.c
+++ b/ext/curl/gstcurlsftpsink.c
@@ -28,7 +28,7 @@
  * <refsect2>
  * <title>Example launch line (upload a file to /home/john/sftp_tests/)</title>
  * |[
- * gst-launch filesrc location=/home/jdoe/some.file ! curlsftpsink  \
+ * gst-launch-1.0 filesrc location=/home/jdoe/some.file ! curlsftpsink  \
  *     file-name=some.file.backup  \
  *     user=john location=sftp://192.168.0.1/~/sftp_tests/  \
  *     ssh-auth-type=1 ssh-key-passphrase=blabla  \
diff --git a/ext/curl/gstcurlsmtpsink.c b/ext/curl/gstcurlsmtpsink.c
index 7de1ddf..40ab016 100644
--- a/ext/curl/gstcurlsmtpsink.c
+++ b/ext/curl/gstcurlsmtpsink.c
@@ -28,7 +28,7 @@
  * <refsect2>
  * <title>Example launch line (upload a JPEG file to an SMTP server)</title>
  * |[
- * gst-launch filesrc location=image.jpg ! jpegparse ! curlsmtpsink  \
+ * gst-launch-1.0 filesrc location=image.jpg ! jpegparse ! curlsmtpsink  \
  *     file-name=image.jpg  \
  *     location=smtp://smtp.gmail.com:507 \
  *     user=test passwd=test  \
diff --git a/ext/daala/Makefile.in b/ext/daala/Makefile.in
index c37c4ad..e92fc4d 100644
--- a/ext/daala/Makefile.in
+++ b/ext/daala/Makefile.in
@@ -116,16 +116,15 @@
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
 	$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
-	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gsettings.m4 \
-	$(top_srcdir)/m4/gst-fionread.m4 $(top_srcdir)/m4/gst-sdl.m4 \
-	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
-	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
-	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libgcrypt.m4 \
-	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
-	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
-	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
-	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
-	$(top_srcdir)/configure.ac
+	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gst-fionread.m4 \
+	$(top_srcdir)/m4/gst-sdl.m4 $(top_srcdir)/m4/iconv.m4 \
+	$(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \
+	$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
+	$(top_srcdir)/m4/libgcrypt.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
+	$(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \
@@ -276,6 +275,8 @@
 CLUTTER_X11_LIBS = @CLUTTER_X11_LIBS@
 CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
+CUDA_CFLAGS = @CUDA_CFLAGS@
+CUDA_LIBS = @CUDA_LIBS@
 CURL_CFLAGS = @CURL_CFLAGS@
 CURL_LIBS = @CURL_LIBS@
 CXX = @CXX@
@@ -313,6 +314,8 @@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
+EGL_CFLAGS = @EGL_CFLAGS@
+EGL_LIBS = @EGL_LIBS@
 EGREP = @EGREP@
 ERROR_CFLAGS = @ERROR_CFLAGS@
 ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
@@ -321,7 +324,6 @@
 EXIF_CFLAGS = @EXIF_CFLAGS@
 EXIF_LIBS = @EXIF_LIBS@
 FAAC_LIBS = @FAAC_LIBS@
-FAAD_IS_NEAAC = @FAAD_IS_NEAAC@
 FAAD_LIBS = @FAAD_LIBS@
 FFLAGS = @FFLAGS@
 FGREP = @FGREP@
@@ -340,8 +342,9 @@
 GIO_LIBS = @GIO_LIBS@
 GIO_UNIX_CFLAGS = @GIO_UNIX_CFLAGS@
 GIO_UNIX_LIBS = @GIO_UNIX_LIBS@
+GLES2_CFLAGS = @GLES2_CFLAGS@
+GLES2_LIBS = @GLES2_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
-GLIB_COMPILE_SCHEMAS = @GLIB_COMPILE_SCHEMAS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
@@ -358,16 +361,17 @@
 GMODULE_NO_EXPORT_LIBS = @GMODULE_NO_EXPORT_LIBS@
 GMSGFMT = @GMSGFMT@
 GMSGFMT_015 = @GMSGFMT_015@
+GNUSTL_CFLAGS = @GNUSTL_CFLAGS@
+GNUSTL_LIBS = @GNUSTL_LIBS@
 GRAPHENE_CFLAGS = @GRAPHENE_CFLAGS@
 GRAPHENE_LIBS = @GRAPHENE_LIBS@
 GREP = @GREP@
-GSETTINGS_CFLAGS = @GSETTINGS_CFLAGS@
-GSETTINGS_DISABLE_SCHEMAS_COMPILE = @GSETTINGS_DISABLE_SCHEMAS_COMPILE@
-GSETTINGS_LIBS = @GSETTINGS_LIBS@
 GSM_LIBS = @GSM_LIBS@
 GSTPB_PLUGINS_DIR = @GSTPB_PLUGINS_DIR@
 GSTPB_PREFIX = @GSTPB_PREFIX@
 GST_AGE = @GST_AGE@
+GST_ALLOCATORS_CFLAGS = @GST_ALLOCATORS_CFLAGS@
+GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
 GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
 GST_API_VERSION = @GST_API_VERSION@
 GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
@@ -393,6 +397,8 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PBUTILS_CFLAGS = @GST_PBUTILS_CFLAGS@
+GST_PBUTILS_LIBS = @GST_PBUTILS_LIBS@
 GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BAD_CFLAGS = @GST_PLUGINS_BAD_CFLAGS@
@@ -418,6 +424,8 @@
 GST_PREFIX = @GST_PREFIX@
 GST_REVISION = @GST_REVISION@
 GST_TOOLS_DIR = @GST_TOOLS_DIR@
+GST_VIDEO_CFLAGS = @GST_VIDEO_CFLAGS@
+GST_VIDEO_LIBS = @GST_VIDEO_LIBS@
 GTK3_CFLAGS = @GTK3_CFLAGS@
 GTK3_GL_CFLAGS = @GTK3_GL_CFLAGS@
 GTK3_GL_LIBS = @GTK3_GL_LIBS@
@@ -519,6 +527,7 @@
 LTLIBICONV = @LTLIBICONV@
 LTLIBINTL = @LTLIBINTL@
 LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
 MANIFEST_TOOL = @MANIFEST_TOOL@
@@ -532,8 +541,6 @@
 MODPLUG_LIBS = @MODPLUG_LIBS@
 MPEG2ENC_CFLAGS = @MPEG2ENC_CFLAGS@
 MPEG2ENC_LIBS = @MPEG2ENC_LIBS@
-MPG123_CFLAGS = @MPG123_CFLAGS@
-MPG123_LIBS = @MPG123_LIBS@
 MPLEX_CFLAGS = @MPLEX_CFLAGS@
 MPLEX_LDFLAGS = @MPLEX_LDFLAGS@
 MPLEX_LIBS = @MPLEX_LIBS@
@@ -549,6 +556,8 @@
 NETTLE_LIBS = @NETTLE_LIBS@
 NM = @NM@
 NMEDIT = @NMEDIT@
+NVENCODE_CFLAGS = @NVENCODE_CFLAGS@
+NVENCODE_LIBS = @NVENCODE_LIBS@
 OBJC = @OBJC@
 OBJCDEPMODE = @OBJCDEPMODE@
 OBJCFLAGS = @OBJCFLAGS@
@@ -606,16 +615,18 @@
 PYTHON_PLATFORM = @PYTHON_PLATFORM@
 PYTHON_PREFIX = @PYTHON_PREFIX@
 PYTHON_VERSION = @PYTHON_VERSION@
+QT_ANDROID_CFLAGS = @QT_ANDROID_CFLAGS@
+QT_ANDROID_LIBS = @QT_ANDROID_LIBS@
 QT_CFLAGS = @QT_CFLAGS@
 QT_LIBS = @QT_LIBS@
+QT_MAC_CFLAGS = @QT_MAC_CFLAGS@
+QT_MAC_LIBS = @QT_MAC_LIBS@
 QT_WAYLAND_CFLAGS = @QT_WAYLAND_CFLAGS@
 QT_WAYLAND_LIBS = @QT_WAYLAND_LIBS@
 QT_X11_CFLAGS = @QT_X11_CFLAGS@
 QT_X11_LIBS = @QT_X11_LIBS@
 RANLIB = @RANLIB@
 RCC = @RCC@
-RSVG_2_36_2_CFLAGS = @RSVG_2_36_2_CFLAGS@
-RSVG_2_36_2_LIBS = @RSVG_2_36_2_LIBS@
 RSVG_CFLAGS = @RSVG_CFLAGS@
 RSVG_LIBS = @RSVG_LIBS@
 RTMP_CFLAGS = @RTMP_CFLAGS@
@@ -667,6 +678,7 @@
 VOAACENC_LIBS = @VOAACENC_LIBS@
 VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
 VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VULKAN_LIBS = @VULKAN_LIBS@
 WARNING_CFLAGS = @WARNING_CFLAGS@
 WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
 WARNING_OBJCFLAGS = @WARNING_OBJCFLAGS@
@@ -677,6 +689,7 @@
 WAYLAND_LIBS = @WAYLAND_LIBS@
 WEBP_CFLAGS = @WEBP_CFLAGS@
 WEBP_LIBS = @WEBP_LIBS@
+WGET = @WGET@
 WILDMIDI_CFLAGS = @WILDMIDI_CFLAGS@
 WILDMIDI_LIBS = @WILDMIDI_LIBS@
 WINKS_LIBS = @WINKS_LIBS@
@@ -686,6 +699,8 @@
 X11_LIBS = @X11_LIBS@
 X265_CFLAGS = @X265_CFLAGS@
 X265_LIBS = @X265_LIBS@
+XCB_CFLAGS = @XCB_CFLAGS@
+XCB_LIBS = @XCB_LIBS@
 XCOMPOSITE_CFLAGS = @XCOMPOSITE_CFLAGS@
 XCOMPOSITE_LIBS = @XCOMPOSITE_LIBS@
 XGETTEXT = @XGETTEXT@
@@ -723,7 +738,6 @@
 docdir = @docdir@
 dvidir = @dvidir@
 exec_prefix = @exec_prefix@
-gsettingsschemadir = @gsettingsschemadir@
 host = @host@
 host_alias = @host_alias@
 host_cpu = @host_cpu@
diff --git a/ext/daala/gstdaaladec.c b/ext/daala/gstdaaladec.c
index 0cf4f63..d40537d 100644
--- a/ext/daala/gstdaaladec.c
+++ b/ext/daala/gstdaaladec.c
@@ -33,7 +33,7 @@
  * <refsect2>
  * <title>Example pipeline</title>
  * |[
- * gst-launch -v filesrc location=videotestsrc.ogg ! oggdemux ! daaladec ! xvimagesink
+ * gst-launch-1.0 -v filesrc location=videotestsrc.ogg ! oggdemux ! daaladec ! xvimagesink
  * ]| This example pipeline will decode an ogg stream and decodes the daala video. Refer to
  * the daalaenc example to create the ogg file.
  * </refsect2>
@@ -50,8 +50,8 @@
 #include <gst/video/gstvideopool.h>
 
 #define GST_CAT_DEFAULT daaladec_debug
-GST_DEBUG_CATEGORY_STATIC (GST_CAT_DEFAULT);
-GST_DEBUG_CATEGORY_EXTERN (GST_CAT_PERFORMANCE);
+GST_DEBUG_CATEGORY_STATIC (daaladec_debug);
+GST_DEBUG_CATEGORY_STATIC (CAT_PERFORMANCE);
 
 /* This was removed from the base class, this is used as a
    temporary return to signal the need to call _drop_frame,
@@ -122,6 +122,7 @@
       GST_DEBUG_FUNCPTR (daala_dec_decide_allocation);
 
   GST_DEBUG_CATEGORY_INIT (daaladec_debug, "daaladec", 0, "Daala decoder");
+  GST_DEBUG_CATEGIRY_GET (CAT_PERFORMANCE, "GST_PERFORMANCE");
 }
 
 static void
@@ -449,7 +450,7 @@
   }
 
   /* if only libdaala would allow us to give it a destination frame */
-  GST_CAT_TRACE_OBJECT (GST_CAT_PERFORMANCE, dec,
+  GST_CAT_TRACE_OBJECT (CAT_PERFORMANCE, dec,
       "doing unavoidable video frame copy");
 
   if (G_UNLIKELY (!gst_video_frame_map (&vframe, &dec->output_state->info,
diff --git a/ext/daala/gstdaalaenc.c b/ext/daala/gstdaalaenc.c
index 77ab0b2..705c7e6 100644
--- a/ext/daala/gstdaalaenc.c
+++ b/ext/daala/gstdaalaenc.c
@@ -33,7 +33,7 @@
  * <refsect2>
  * <title>Example pipeline</title>
  * |[
- * gst-launch -v videotestsrc num-buffers=1000 ! daalaenc ! oggmux ! filesink location=videotestsrc.ogg
+ * gst-launch-1.0 -v videotestsrc num-buffers=1000 ! daalaenc ! oggmux ! filesink location=videotestsrc.ogg
  * ]| This example pipeline will encode a test video source to daala muxed in an
  * ogg container. Refer to the daaladec documentation to decode the create
  * stream.
diff --git a/ext/dash/Makefile.in b/ext/dash/Makefile.in
index 934aaa6..ef65ab0 100644
--- a/ext/dash/Makefile.in
+++ b/ext/dash/Makefile.in
@@ -116,16 +116,15 @@
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
 	$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
-	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gsettings.m4 \
-	$(top_srcdir)/m4/gst-fionread.m4 $(top_srcdir)/m4/gst-sdl.m4 \
-	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
-	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
-	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libgcrypt.m4 \
-	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
-	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
-	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
-	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
-	$(top_srcdir)/configure.ac
+	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gst-fionread.m4 \
+	$(top_srcdir)/m4/gst-sdl.m4 $(top_srcdir)/m4/iconv.m4 \
+	$(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \
+	$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
+	$(top_srcdir)/m4/libgcrypt.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
+	$(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \
@@ -279,6 +278,8 @@
 CLUTTER_X11_LIBS = @CLUTTER_X11_LIBS@
 CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
+CUDA_CFLAGS = @CUDA_CFLAGS@
+CUDA_LIBS = @CUDA_LIBS@
 CURL_CFLAGS = @CURL_CFLAGS@
 CURL_LIBS = @CURL_LIBS@
 CXX = @CXX@
@@ -316,6 +317,8 @@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
+EGL_CFLAGS = @EGL_CFLAGS@
+EGL_LIBS = @EGL_LIBS@
 EGREP = @EGREP@
 ERROR_CFLAGS = @ERROR_CFLAGS@
 ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
@@ -324,7 +327,6 @@
 EXIF_CFLAGS = @EXIF_CFLAGS@
 EXIF_LIBS = @EXIF_LIBS@
 FAAC_LIBS = @FAAC_LIBS@
-FAAD_IS_NEAAC = @FAAD_IS_NEAAC@
 FAAD_LIBS = @FAAD_LIBS@
 FFLAGS = @FFLAGS@
 FGREP = @FGREP@
@@ -343,8 +345,9 @@
 GIO_LIBS = @GIO_LIBS@
 GIO_UNIX_CFLAGS = @GIO_UNIX_CFLAGS@
 GIO_UNIX_LIBS = @GIO_UNIX_LIBS@
+GLES2_CFLAGS = @GLES2_CFLAGS@
+GLES2_LIBS = @GLES2_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
-GLIB_COMPILE_SCHEMAS = @GLIB_COMPILE_SCHEMAS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
@@ -361,16 +364,17 @@
 GMODULE_NO_EXPORT_LIBS = @GMODULE_NO_EXPORT_LIBS@
 GMSGFMT = @GMSGFMT@
 GMSGFMT_015 = @GMSGFMT_015@
+GNUSTL_CFLAGS = @GNUSTL_CFLAGS@
+GNUSTL_LIBS = @GNUSTL_LIBS@
 GRAPHENE_CFLAGS = @GRAPHENE_CFLAGS@
 GRAPHENE_LIBS = @GRAPHENE_LIBS@
 GREP = @GREP@
-GSETTINGS_CFLAGS = @GSETTINGS_CFLAGS@
-GSETTINGS_DISABLE_SCHEMAS_COMPILE = @GSETTINGS_DISABLE_SCHEMAS_COMPILE@
-GSETTINGS_LIBS = @GSETTINGS_LIBS@
 GSM_LIBS = @GSM_LIBS@
 GSTPB_PLUGINS_DIR = @GSTPB_PLUGINS_DIR@
 GSTPB_PREFIX = @GSTPB_PREFIX@
 GST_AGE = @GST_AGE@
+GST_ALLOCATORS_CFLAGS = @GST_ALLOCATORS_CFLAGS@
+GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
 GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
 GST_API_VERSION = @GST_API_VERSION@
 GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
@@ -396,6 +400,8 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PBUTILS_CFLAGS = @GST_PBUTILS_CFLAGS@
+GST_PBUTILS_LIBS = @GST_PBUTILS_LIBS@
 GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BAD_CFLAGS = @GST_PLUGINS_BAD_CFLAGS@
@@ -421,6 +427,8 @@
 GST_PREFIX = @GST_PREFIX@
 GST_REVISION = @GST_REVISION@
 GST_TOOLS_DIR = @GST_TOOLS_DIR@
+GST_VIDEO_CFLAGS = @GST_VIDEO_CFLAGS@
+GST_VIDEO_LIBS = @GST_VIDEO_LIBS@
 GTK3_CFLAGS = @GTK3_CFLAGS@
 GTK3_GL_CFLAGS = @GTK3_GL_CFLAGS@
 GTK3_GL_LIBS = @GTK3_GL_LIBS@
@@ -522,6 +530,7 @@
 LTLIBICONV = @LTLIBICONV@
 LTLIBINTL = @LTLIBINTL@
 LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
 MANIFEST_TOOL = @MANIFEST_TOOL@
@@ -535,8 +544,6 @@
 MODPLUG_LIBS = @MODPLUG_LIBS@
 MPEG2ENC_CFLAGS = @MPEG2ENC_CFLAGS@
 MPEG2ENC_LIBS = @MPEG2ENC_LIBS@
-MPG123_CFLAGS = @MPG123_CFLAGS@
-MPG123_LIBS = @MPG123_LIBS@
 MPLEX_CFLAGS = @MPLEX_CFLAGS@
 MPLEX_LDFLAGS = @MPLEX_LDFLAGS@
 MPLEX_LIBS = @MPLEX_LIBS@
@@ -552,6 +559,8 @@
 NETTLE_LIBS = @NETTLE_LIBS@
 NM = @NM@
 NMEDIT = @NMEDIT@
+NVENCODE_CFLAGS = @NVENCODE_CFLAGS@
+NVENCODE_LIBS = @NVENCODE_LIBS@
 OBJC = @OBJC@
 OBJCDEPMODE = @OBJCDEPMODE@
 OBJCFLAGS = @OBJCFLAGS@
@@ -609,16 +618,18 @@
 PYTHON_PLATFORM = @PYTHON_PLATFORM@
 PYTHON_PREFIX = @PYTHON_PREFIX@
 PYTHON_VERSION = @PYTHON_VERSION@
+QT_ANDROID_CFLAGS = @QT_ANDROID_CFLAGS@
+QT_ANDROID_LIBS = @QT_ANDROID_LIBS@
 QT_CFLAGS = @QT_CFLAGS@
 QT_LIBS = @QT_LIBS@
+QT_MAC_CFLAGS = @QT_MAC_CFLAGS@
+QT_MAC_LIBS = @QT_MAC_LIBS@
 QT_WAYLAND_CFLAGS = @QT_WAYLAND_CFLAGS@
 QT_WAYLAND_LIBS = @QT_WAYLAND_LIBS@
 QT_X11_CFLAGS = @QT_X11_CFLAGS@
 QT_X11_LIBS = @QT_X11_LIBS@
 RANLIB = @RANLIB@
 RCC = @RCC@
-RSVG_2_36_2_CFLAGS = @RSVG_2_36_2_CFLAGS@
-RSVG_2_36_2_LIBS = @RSVG_2_36_2_LIBS@
 RSVG_CFLAGS = @RSVG_CFLAGS@
 RSVG_LIBS = @RSVG_LIBS@
 RTMP_CFLAGS = @RTMP_CFLAGS@
@@ -670,6 +681,7 @@
 VOAACENC_LIBS = @VOAACENC_LIBS@
 VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
 VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VULKAN_LIBS = @VULKAN_LIBS@
 WARNING_CFLAGS = @WARNING_CFLAGS@
 WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
 WARNING_OBJCFLAGS = @WARNING_OBJCFLAGS@
@@ -680,6 +692,7 @@
 WAYLAND_LIBS = @WAYLAND_LIBS@
 WEBP_CFLAGS = @WEBP_CFLAGS@
 WEBP_LIBS = @WEBP_LIBS@
+WGET = @WGET@
 WILDMIDI_CFLAGS = @WILDMIDI_CFLAGS@
 WILDMIDI_LIBS = @WILDMIDI_LIBS@
 WINKS_LIBS = @WINKS_LIBS@
@@ -689,6 +702,8 @@
 X11_LIBS = @X11_LIBS@
 X265_CFLAGS = @X265_CFLAGS@
 X265_LIBS = @X265_LIBS@
+XCB_CFLAGS = @XCB_CFLAGS@
+XCB_LIBS = @XCB_LIBS@
 XCOMPOSITE_CFLAGS = @XCOMPOSITE_CFLAGS@
 XCOMPOSITE_LIBS = @XCOMPOSITE_LIBS@
 XGETTEXT = @XGETTEXT@
@@ -726,7 +741,6 @@
 docdir = @docdir@
 dvidir = @dvidir@
 exec_prefix = @exec_prefix@
-gsettingsschemadir = @gsettingsschemadir@
 host = @host@
 host_alias = @host_alias@
 host_cpu = @host_cpu@
diff --git a/ext/dash/gstdashdemux.c b/ext/dash/gstdashdemux.c
index 20d6764..4c1f999 100644
--- a/ext/dash/gstdashdemux.c
+++ b/ext/dash/gstdashdemux.c
@@ -146,6 +146,7 @@
 
 #include <string.h>
 #include <stdio.h>
+#include <stdlib.h>
 #include <inttypes.h>
 #include <gio/gio.h>
 #include <gst/base/gsttypefindhelper.h>
@@ -167,6 +168,12 @@
     GST_PAD_SOMETIMES,
     GST_STATIC_CAPS_ANY);
 
+static GstStaticPadTemplate gst_dash_demux_subtitlesrc_template =
+GST_STATIC_PAD_TEMPLATE ("subtitle_%02u",
+    GST_PAD_SRC,
+    GST_PAD_SOMETIMES,
+    GST_STATIC_CAPS_ANY);
+
 static GstStaticPadTemplate sinktemplate = GST_STATIC_PAD_TEMPLATE ("sink",
     GST_PAD_SINK,
     GST_PAD_ALWAYS,
@@ -182,6 +189,7 @@
   PROP_MAX_BUFFERING_TIME,
   PROP_BANDWIDTH_USAGE,
   PROP_MAX_BITRATE,
+  PROP_PRESENTATION_DELAY,
   PROP_LAST
 };
 
@@ -189,6 +197,7 @@
 #define DEFAULT_MAX_BUFFERING_TIME       30     /* in seconds */
 #define DEFAULT_BANDWIDTH_USAGE         0.8     /* 0 to 1     */
 #define DEFAULT_MAX_BITRATE        24000000     /* in bit/s  */
+#define DEFAULT_PRESENTATION_DELAY     NULL     /* zero */
 
 /* Clock drift compensation for live streams */
 #define SLOW_CLOCK_UPDATE_INTERVAL  (1000000 * 30 * 60) /* 30 minutes */
@@ -201,11 +210,9 @@
   GMutex clock_lock;            /* used to protect access to struct */
   guint selected_url;
   gint64 next_update;
-  GCond clock_cond;             /* used for waiting until got_clock==TRUE */
   /* @clock_compensation: amount (in usecs) to add to client's idea of
      now to map it to the server's idea of now */
   GTimeSpan clock_compensation;
-  gboolean got_clock;           /* indicates time source has returned a valid clock at least once */
   GstClock *ntp_clock;
 };
 
@@ -226,19 +233,20 @@
 static GstFlowReturn
 gst_dash_demux_stream_update_fragment_info (GstAdaptiveDemuxStream * stream);
 static GstFlowReturn gst_dash_demux_stream_seek (GstAdaptiveDemuxStream *
-    stream, GstClockTime ts);
-static gboolean
-gst_dash_demux_stream_has_next_fragment (GstAdaptiveDemuxStream * stream);
+    stream, gboolean forward, GstSeekFlags flags, GstClockTime ts,
+    GstClockTime * final_ts);
+static gboolean gst_dash_demux_stream_has_next_fragment (GstAdaptiveDemuxStream
+    * stream);
 static GstFlowReturn
 gst_dash_demux_stream_advance_fragment (GstAdaptiveDemuxStream * stream);
 static gboolean
 gst_dash_demux_stream_advance_subfragment (GstAdaptiveDemuxStream * stream);
 static gboolean gst_dash_demux_stream_select_bitrate (GstAdaptiveDemuxStream *
     stream, guint64 bitrate);
-static gint64
-gst_dash_demux_get_manifest_update_interval (GstAdaptiveDemux * demux);
-static GstFlowReturn
-gst_dash_demux_update_manifest_data (GstAdaptiveDemux * demux, GstBuffer * buf);
+static gint64 gst_dash_demux_get_manifest_update_interval (GstAdaptiveDemux *
+    demux);
+static GstFlowReturn gst_dash_demux_update_manifest_data (GstAdaptiveDemux *
+    demux, GstBuffer * buf);
 static gint64
 gst_dash_demux_stream_get_fragment_waiting_time (GstAdaptiveDemuxStream *
     stream);
@@ -293,6 +301,7 @@
 
   gst_dash_demux_clock_drift_free (demux->clock_drift);
   demux->clock_drift = NULL;
+  g_free (demux->default_presentation_delay);
   G_OBJECT_CLASS (parent_class)->dispose (obj);
 }
 
@@ -301,18 +310,33 @@
     gint64 * stop)
 {
   GstDashDemux *self = GST_DASH_DEMUX (demux);
-  GDateTime *now = gst_dash_demux_get_server_now_utc (self);
-  GDateTime *mstart =
-      gst_date_time_to_g_date_time (self->client->
-      mpd_node->availabilityStartTime);
+  GDateTime *now;
+  GDateTime *mstart;
   GTimeSpan stream_now;
 
+  if (self->client->mpd_node->availabilityStartTime == NULL)
+    return FALSE;
+
+  now = gst_dash_demux_get_server_now_utc (self);
+  mstart =
+      gst_date_time_to_g_date_time (self->client->
+      mpd_node->availabilityStartTime);
   stream_now = g_date_time_difference (now, mstart);
   g_date_time_unref (now);
   g_date_time_unref (mstart);
-  *stop = stream_now * GST_USECOND;
 
-  *start = *stop - (self->client->mpd_node->timeShiftBufferDepth * GST_MSECOND);
+  if (stream_now <= 0)
+    return FALSE;
+
+  *stop = stream_now * GST_USECOND;
+  if (self->client->mpd_node->timeShiftBufferDepth == GST_MPD_DURATION_NONE) {
+    *start = 0;
+  } else {
+    *start =
+        *stop - (self->client->mpd_node->timeShiftBufferDepth * GST_MSECOND);
+    if (*start < 0)
+      *start = 0;
+  }
   return TRUE;
 }
 
@@ -364,7 +388,7 @@
           "Percentage of the available bandwidth to use when "
           "selecting representations (deprecated)",
           0, 1, DEFAULT_BANDWIDTH_USAGE,
-          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | G_PARAM_DEPRECATED));
 #endif
 
   g_object_class_install_property (gobject_class, PROP_MAX_BITRATE,
@@ -373,10 +397,18 @@
           1000, G_MAXUINT, DEFAULT_MAX_BITRATE,
           G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
 
+  g_object_class_install_property (gobject_class, PROP_PRESENTATION_DELAY,
+      g_param_spec_string ("presentation-delay", "Presentation delay",
+          "Default presentation delay (in seconds, milliseconds or fragments) (e.g. 12s, 2500ms, 3f)",
+          DEFAULT_PRESENTATION_DELAY,
+          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+
   gst_element_class_add_pad_template (gstelement_class,
       gst_static_pad_template_get (&gst_dash_demux_audiosrc_template));
   gst_element_class_add_pad_template (gstelement_class,
       gst_static_pad_template_get (&gst_dash_demux_videosrc_template));
+  gst_element_class_add_pad_template (gstelement_class,
+      gst_static_pad_template_get (&gst_dash_demux_subtitlesrc_template));
 
   gst_element_class_add_pad_template (gstelement_class,
       gst_static_pad_template_get (&sinktemplate));
@@ -433,6 +465,7 @@
   /* Properties */
   demux->max_buffering_time = DEFAULT_MAX_BUFFERING_TIME * GST_SECOND;
   demux->max_bitrate = DEFAULT_MAX_BITRATE;
+  demux->default_presentation_delay = DEFAULT_PRESENTATION_DELAY;
 
   g_mutex_init (&demux->client_lock);
 
@@ -457,6 +490,10 @@
     case PROP_MAX_BITRATE:
       demux->max_bitrate = g_value_get_uint (value);
       break;
+    case PROP_PRESENTATION_DELAY:
+      g_free (demux->default_presentation_delay);
+      demux->default_presentation_delay = g_value_dup_string (value);
+      break;
     default:
       G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
       break;
@@ -480,6 +517,12 @@
     case PROP_MAX_BITRATE:
       g_value_set_uint (value, demux->max_bitrate);
       break;
+    case PROP_PRESENTATION_DELAY:
+      if (demux->default_presentation_delay == NULL)
+        g_value_set_static_string (value, "");
+      else
+        g_value_set_string (value, demux->default_presentation_delay);
+      break;
     default:
       G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
       break;
@@ -535,11 +578,11 @@
     active_stream = gst_mpdparser_get_active_stream_by_index (demux->client, i);
     if (active_stream == NULL)
       continue;
-    /* TODO: support 'application' mimeType */
-    if (active_stream->mimeType == GST_STREAM_APPLICATION)
-      continue;
 
     srcpad = gst_dash_demux_create_pad (demux, active_stream);
+    if (srcpad == NULL)
+      continue;
+
     caps = gst_dash_demux_get_input_caps (demux, active_stream);
     GST_LOG_OBJECT (demux, "Creating stream %d %" GST_PTR_FORMAT, i, caps);
 
@@ -548,9 +591,16 @@
       lang = adp_set->lang;
 
       /* Fallback to the language in ContentComponent node */
-      if (lang == NULL && g_list_length (adp_set->ContentComponents) == 1) {
-        GstContentComponentNode *cc_node = adp_set->ContentComponents->data;
-        lang = cc_node->lang;
+      if (lang == NULL) {
+        GList *it;
+
+        for (it = adp_set->ContentComponents; it; it = it->next) {
+          GstContentComponentNode *cc_node = it->data;
+          if (cc_node->lang) {
+            lang = cc_node->lang;
+            break;
+          }
+        }
       }
     }
 
@@ -575,9 +625,9 @@
         active_stream->cur_adapt_set->RepresentationBase &&
         active_stream->cur_adapt_set->RepresentationBase->ContentProtection) {
       GST_DEBUG_OBJECT (demux, "Adding ContentProtection events to source pad");
-      g_list_foreach (active_stream->cur_adapt_set->
-          RepresentationBase->ContentProtection,
-          gst_dash_demux_send_content_protection_event, stream);
+      g_list_foreach (active_stream->cur_adapt_set->RepresentationBase->
+          ContentProtection, gst_dash_demux_send_content_protection_event,
+          stream);
     }
 
     gst_isoff_sidx_parser_init (&stream->sidx_parser);
@@ -650,6 +700,11 @@
   period_idx = 0;
   if (gst_mpd_client_is_live (dashdemux->client)) {
     GDateTime *g_now;
+    if (dashdemux->client->mpd_node->availabilityStartTime == NULL) {
+      ret = FALSE;
+      GST_ERROR_OBJECT (demux, "MPD does not have availabilityStartTime");
+      goto done;
+    }
     if (dashdemux->clock_drift == NULL) {
       gchar **urls;
       urls =
@@ -669,6 +724,13 @@
           dashdemux->client->mpd_node->suggestedPresentationDelay * -1000);
       gst_date_time_unref (now);
       now = target;
+    } else if (dashdemux->default_presentation_delay) {
+      gint64 dfp =
+          gst_mpd_client_parse_default_presentation_delay (dashdemux->client,
+          dashdemux->default_presentation_delay);
+      GstDateTime *target = gst_mpd_client_add_time_difference (now, dfp);
+      gst_date_time_unref (now);
+      now = target;
     }
     period_idx =
         gst_mpd_client_get_period_index_at_time (dashdemux->client, now);
@@ -771,13 +833,22 @@
       name = g_strdup_printf ("video_%02u", demux->n_video_streams++);
       tmpl = gst_static_pad_template_get (&gst_dash_demux_videosrc_template);
       break;
+    case GST_STREAM_APPLICATION:
+      if (gst_mpd_client_active_stream_contains_subtitles (stream)) {
+        name = g_strdup_printf ("subtitle_%02u", demux->n_subtitle_streams++);
+        tmpl =
+            gst_static_pad_template_get (&gst_dash_demux_subtitlesrc_template);
+      } else {
+        return NULL;
+      }
+      break;
     default:
       g_assert_not_reached ();
       return NULL;
   }
 
   /* Create and activate new pads */
-  pad = gst_ghost_pad_new_no_target_from_template (name, tmpl);
+  pad = gst_pad_new_from_template (tmpl, name);
   g_free (name);
   gst_object_unref (tmpl);
 
@@ -814,7 +885,8 @@
     GstActiveStream * stream)
 {
   guint width = 0, height = 0;
-  const gchar *mimeType = NULL;
+  gint fps_num = 0, fps_den = 1;
+  gboolean have_fps = FALSE;
   GstCaps *caps = NULL;
 
   if (stream == NULL)
@@ -824,17 +896,23 @@
   if (!gst_mpd_client_get_bitstream_switching_flag (stream)) {
     width = gst_mpd_client_get_video_stream_width (stream);
     height = gst_mpd_client_get_video_stream_height (stream);
+    have_fps =
+        gst_mpd_client_get_video_stream_framerate (stream, &fps_num, &fps_den);
   }
-  mimeType = gst_mpd_client_get_stream_mimeType (stream);
-  if (mimeType == NULL)
+  caps = gst_mpd_client_get_stream_caps (stream);
+  if (caps == NULL)
     return NULL;
 
-  caps = gst_caps_from_string (mimeType);
   if (width > 0 && height > 0) {
     gst_caps_set_simple (caps, "width", G_TYPE_INT, width, "height",
         G_TYPE_INT, height, NULL);
   }
 
+  if (have_fps) {
+    gst_caps_set_simple (caps, "framerate", GST_TYPE_FRACTION, fps_num,
+        fps_den, NULL);
+  }
+
   return caps;
 }
 
@@ -843,7 +921,6 @@
     GstActiveStream * stream)
 {
   guint rate = 0, channels = 0;
-  const gchar *mimeType;
   GstCaps *caps = NULL;
 
   if (stream == NULL)
@@ -854,11 +931,10 @@
     channels = gst_mpd_client_get_audio_stream_num_channels (stream);
     rate = gst_mpd_client_get_audio_stream_rate (stream);
   }
-  mimeType = gst_mpd_client_get_stream_mimeType (stream);
-  if (mimeType == NULL)
+  caps = gst_mpd_client_get_stream_caps (stream);
+  if (caps == NULL)
     return NULL;
 
-  caps = gst_caps_from_string (mimeType);
   if (rate > 0) {
     gst_caps_set_simple (caps, "rate", G_TYPE_INT, rate, NULL);
   }
@@ -873,18 +949,15 @@
 gst_dash_demux_get_application_input_caps (GstDashDemux * demux,
     GstActiveStream * stream)
 {
-  const gchar *mimeType;
   GstCaps *caps = NULL;
 
   if (stream == NULL)
     return NULL;
 
-  mimeType = gst_mpd_client_get_stream_mimeType (stream);
-  if (mimeType == NULL)
+  caps = gst_mpd_client_get_stream_caps (stream);
+  if (caps == NULL)
     return NULL;
 
-  caps = gst_caps_from_string (mimeType);
-
   return caps;
 }
 
@@ -994,42 +1067,94 @@
   return GST_FLOW_EOS;
 }
 
+static gint
+gst_dash_demux_index_entry_search (GstSidxBoxEntry * entry, GstClockTime * ts,
+    gpointer user_data)
+{
+  GstClockTime entry_ts = entry->pts + entry->duration;
+  if (entry_ts < *ts)
+    return -1;
+  else if (entry->pts > *ts)
+    return 1;
+  else
+    return 0;
+}
+
 static void
 gst_dash_demux_stream_sidx_seek (GstDashDemuxStream * dashstream,
-    GstClockTime ts)
+    gboolean forward, GstSeekFlags flags, GstClockTime ts,
+    GstClockTime * final_ts)
 {
   GstSidxBox *sidx = SIDX (dashstream);
-  gint i;
+  GstSidxBoxEntry *entry;
+  gint idx = sidx->entries_count;
 
-  /* TODO optimize to a binary search */
-  for (i = 0; i < sidx->entries_count; i++) {
-    if (sidx->entries[i].pts + sidx->entries[i].duration >= ts)
-      break;
-  }
-  sidx->entry_index = i;
-  dashstream->sidx_index = i;
-  if (i < sidx->entries_count)
-    dashstream->sidx_current_remaining = sidx->entries[i].size;
-  else
+  /* check whether ts is already past the last element or not */
+  if (sidx->entries[idx - 1].pts + sidx->entries[idx - 1].duration < ts) {
     dashstream->sidx_current_remaining = 0;
+  } else {
+    GstSearchMode mode = GST_SEARCH_MODE_BEFORE;
+
+    if ((flags & GST_SEEK_FLAG_SNAP_NEAREST) == GST_SEEK_FLAG_SNAP_NEAREST) {
+      mode = GST_SEARCH_MODE_BEFORE;
+    } else if ((forward && (flags & GST_SEEK_FLAG_SNAP_AFTER)) ||
+        (!forward && (flags & GST_SEEK_FLAG_SNAP_BEFORE))) {
+      mode = GST_SEARCH_MODE_AFTER;
+    } else {
+      mode = GST_SEARCH_MODE_BEFORE;
+    }
+
+    entry =
+        gst_util_array_binary_search (sidx->entries, sidx->entries_count,
+        sizeof (GstSidxBoxEntry),
+        (GCompareDataFunc) gst_dash_demux_index_entry_search, mode, &ts, NULL);
+
+    idx = entry - sidx->entries;
+
+    /* FIXME in reverse mode, if we are exactly at a fragment start it makes more
+     * sense to start from the end of the previous fragment */
+    /* FIXME we should have a GST_SEARCH_MODE_NEAREST */
+    if ((flags & GST_SEEK_FLAG_SNAP_NEAREST) == GST_SEEK_FLAG_SNAP_NEAREST &&
+        idx + 1 < sidx->entries_count) {
+      if (ABS (sidx->entries[idx + 1].pts - ts) <
+          ABS (sidx->entries[idx].pts - ts))
+        idx += 1;
+    }
+
+    dashstream->sidx_current_remaining = sidx->entries[idx].size;
+  }
+
+  sidx->entry_index = idx;
+  dashstream->sidx_index = idx;
+
+  if (final_ts) {
+    if (idx == sidx->entries_count)
+      *final_ts = sidx->entries[idx].pts + sidx->entries[idx].duration;
+    else
+      *final_ts = sidx->entries[idx].pts;
+  }
 }
 
 static GstFlowReturn
-gst_dash_demux_stream_seek (GstAdaptiveDemuxStream * stream, GstClockTime ts)
+gst_dash_demux_stream_seek (GstAdaptiveDemuxStream * stream, gboolean forward,
+    GstSeekFlags flags, GstClockTime ts, GstClockTime * final_ts)
 {
   GstDashDemuxStream *dashstream = (GstDashDemuxStream *) stream;
   GstDashDemux *dashdemux = GST_DASH_DEMUX_CAST (stream->demux);
 
   if (gst_mpd_client_has_isoff_ondemand_profile (dashdemux->client)) {
     if (dashstream->sidx_parser.status == GST_ISOFF_SIDX_PARSER_FINISHED) {
-      gst_dash_demux_stream_sidx_seek (dashstream, ts);
+      gst_dash_demux_stream_sidx_seek (dashstream, forward, flags, ts,
+          final_ts);
     } else {
       /* no index yet, seek when we have it */
+      /* FIXME - the final_ts won't be correct here */
       dashstream->pending_seek_ts = ts;
     }
   }
 
-  gst_mpd_client_stream_seek (dashdemux->client, dashstream->active_stream, ts);
+  gst_mpd_client_stream_seek (dashdemux->client, dashstream->active_stream,
+      forward, flags, ts, final_ts);
   return GST_FLOW_OK;
 }
 
@@ -1183,6 +1308,10 @@
   return ret;
 }
 
+#define SEEK_UPDATES_PLAY_POSITION(r, start_type, stop_type) \
+  ((r >= 0 && start_type != GST_SEEK_TYPE_NONE) || \
+   (r < 0 && stop_type != GST_SEEK_TYPE_NONE))
+
 static gboolean
 gst_dash_demux_seek (GstAdaptiveDemux * demux, GstEvent * seek)
 {
@@ -1202,11 +1331,16 @@
   gst_event_parse_seek (seek, &rate, &format, &flags, &start_type, &start,
       &stop_type, &stop);
 
-  /* TODO check if start-type/stop-type is SET */
-  if (demux->segment.rate > 0.0)
-    target_pos = (GstClockTime) demux->segment.start;
-  else
-    target_pos = (GstClockTime) demux->segment.stop;
+  if (!SEEK_UPDATES_PLAY_POSITION (rate, start_type, stop_type)) {
+    /* nothing to do if we don't have to update the current position */
+    return TRUE;
+  }
+
+  if (demux->segment.rate > 0.0) {
+    target_pos = (GstClockTime) start;
+  } else {
+    target_pos = (GstClockTime) stop;
+  }
 
   /* select the requested Period in the Media Presentation */
   if (!gst_mpd_client_setup_media_presentation (dashdemux->client, target_pos,
@@ -1255,7 +1389,7 @@
       gst_isoff_sidx_parser_clear (&dashstream->sidx_parser);
       gst_isoff_sidx_parser_init (&dashstream->sidx_parser);
     }
-    gst_dash_demux_stream_seek (iter->data, target_pos);
+    gst_dash_demux_stream_seek (iter->data, rate >= 0, 0, target_pos, NULL);
   }
   return TRUE;
 }
@@ -1308,17 +1442,23 @@
     if (period_id) {
       if (!gst_mpd_client_set_period_id (new_client, period_id)) {
         GST_DEBUG_OBJECT (demux, "Error setting up the updated manifest file");
+        gst_mpd_client_free (new_client);
+        gst_buffer_unmap (buffer, &mapinfo);
         return GST_FLOW_EOS;
       }
     } else {
       if (!gst_mpd_client_set_period_index (new_client, period_idx)) {
         GST_DEBUG_OBJECT (demux, "Error setting up the updated manifest file");
+        gst_mpd_client_free (new_client);
+        gst_buffer_unmap (buffer, &mapinfo);
         return GST_FLOW_EOS;
       }
     }
 
     if (!gst_dash_demux_setup_mpdparser_streams (dashdemux, new_client)) {
       GST_ERROR_OBJECT (demux, "Failed to setup streams on manifest " "update");
+      gst_mpd_client_free (new_client);
+      gst_buffer_unmap (buffer, &mapinfo);
       return GST_FLOW_ERROR;
     }
 
@@ -1334,6 +1474,8 @@
         GST_DEBUG_OBJECT (demux,
             "Stream of index %d is missing from manifest update",
             demux_stream->index);
+        gst_mpd_client_free (new_client);
+        gst_buffer_unmap (buffer, &mapinfo);
         return GST_FLOW_EOS;
       }
 
@@ -1353,7 +1495,8 @@
             GST_TIME_FORMAT, GST_TIME_ARGS (ts),
             GST_TIME_ARGS (ts + (10 * GST_USECOND)));
         ts += 10 * GST_USECOND;
-        gst_mpd_client_stream_seek (new_client, new_stream, ts);
+        gst_mpd_client_stream_seek (new_client, new_stream,
+            demux->segment.rate >= 0, 0, ts, NULL);
       }
 
       demux_stream->active_stream = new_stream;
@@ -1371,6 +1514,7 @@
      * source element and we have received the 404 HTML response instead of
      * the manifest */
     GST_WARNING_OBJECT (demux, "Error parsing the manifest.");
+    gst_mpd_client_free (new_client);
     gst_buffer_unmap (buffer, &mapinfo);
     return GST_FLOW_ERROR;
   }
@@ -1386,25 +1530,27 @@
 {
   GstDashDemux *dashdemux = GST_DASH_DEMUX_CAST (stream->demux);
   GstDashDemuxStream *dashstream = (GstDashDemuxStream *) stream;
-  GstDateTime *seg_end_time;
+  GstDateTime *segmentAvailability;
   GstActiveStream *active_stream = dashstream->active_stream;
 
-  seg_end_time =
-      gst_mpd_client_get_next_segment_availability_end_time (dashdemux->client,
-      active_stream);
+  segmentAvailability =
+      gst_mpd_client_get_next_segment_availability_start_time
+      (dashdemux->client, active_stream);
 
-  if (seg_end_time) {
+  if (segmentAvailability) {
     gint64 diff;
     GstDateTime *cur_time;
 
     cur_time = gst_date_time_new_now_utc ();
-    diff = gst_mpd_client_calculate_time_difference (cur_time, seg_end_time);
-    gst_date_time_unref (seg_end_time);
+    diff = gst_mpd_client_calculate_time_difference (cur_time,
+        segmentAvailability);
+    gst_date_time_unref (segmentAvailability);
     gst_date_time_unref (cur_time);
     /* subtract the server's clock drift, so that if the server's
        time is behind our idea of UTC, we need to sleep for longer
        before requesting a fragment */
-    return diff - gst_dash_demux_get_clock_compensation (dashdemux);
+    return diff -
+        gst_dash_demux_get_clock_compensation (dashdemux) * GST_USECOND;
   }
   return 0;
 }
@@ -1512,8 +1658,10 @@
         /* when finished, prepare for real data streaming */
         if (dash_stream->sidx_parser.status == GST_ISOFF_SIDX_PARSER_FINISHED) {
           if (GST_CLOCK_TIME_IS_VALID (dash_stream->pending_seek_ts)) {
+            /* FIXME, preserve seek flags */
             gst_dash_demux_stream_sidx_seek (dash_stream,
-                dash_stream->pending_seek_ts);
+                demux->segment.rate >= 0, 0, dash_stream->pending_seek_ts,
+                NULL);
             dash_stream->pending_seek_ts = GST_CLOCK_TIME_NONE;
           } else {
             SIDX (dash_stream)->entry_index = dash_stream->sidx_index;
@@ -1584,7 +1732,6 @@
 
   clock_drift = g_slice_new0 (GstDashDemuxClockDrift);
   g_mutex_init (&clock_drift->clock_lock);
-  g_cond_init (&clock_drift->clock_cond);
   clock_drift->next_update = g_get_monotonic_time ();
   return clock_drift;
 }
@@ -1596,7 +1743,6 @@
     g_mutex_lock (&clock_drift->clock_lock);
     if (clock_drift->ntp_clock)
       g_object_unref (clock_drift->ntp_clock);
-    g_cond_clear (&clock_drift->clock_cond);
     g_mutex_unlock (&clock_drift->clock_lock);
     g_mutex_clear (&clock_drift->clock_lock);
     g_slice_free (GstDashDemuxClockDrift, clock_drift);
@@ -1678,16 +1824,16 @@
   return gst_date_time_new_from_g_date_time (dt2);
 }
 
-struct Rfc822TimeZone
+struct Rfc5322TimeZone
 {
   const gchar *name;
   gfloat tzoffset;
 };
 
 /*
- Parse an RFC822 (section 5) date-time from the Date: field in the
+ Parse an RFC5322 (section 3.3) date-time from the Date: field in the
  HTTP response. 
- See https://tools.ietf.org/html/rfc822#section-5
+ See https://tools.ietf.org/html/rfc5322#section-3.3
 */
 static GstDateTime *
 gst_dash_demux_parse_http_head (GstDashDemuxClockDrift * clock_drift,
@@ -1697,7 +1843,7 @@
     "May", "Jun", "Jul", "Aug",
     "Sep", "Oct", "Nov", "Dec", NULL
   };
-  static const struct Rfc822TimeZone timezones[] = {
+  static const struct Rfc5322TimeZone timezones[] = {
     {"Z", 0},
     {"UT", 0},
     {"GMT", 0},
@@ -1754,9 +1900,6 @@
         break;
       }
     }
-    while (*z == ' ') {
-      ++z;
-    }
     for (int i = 0; timezones[i].name && !parsed_tz; ++i) {
       if (g_ascii_strncasecmp (timezones[i].name, z,
               strlen (timezones[i].name)) == 0) {
@@ -1785,6 +1928,9 @@
         }
       }
     }
+    /* Accept year in both 2 digit or 4 digit format */
+    if (year < 100)
+      year += 2000;
   }
   if (month > 0 && parsed_tz) {
     value = gst_date_time_new (tzoffset,
@@ -1846,15 +1992,17 @@
 gst_dash_demux_parse_http_xsdate (GstDashDemuxClockDrift * clock_drift,
     GstBuffer * buffer)
 {
-  GstDateTime *value;
+  GstDateTime *value = NULL;
   GstMapInfo mapinfo;
 
   /* the string from the server might not be zero terminated */
-  gst_buffer_resize (buffer, 0, gst_buffer_get_size (buffer) + 1);
-  gst_buffer_map (buffer, &mapinfo, GST_MAP_READ | GST_MAP_WRITE);
-  mapinfo.data[mapinfo.size - 1] = '\0';
-  value = gst_date_time_new_from_iso8601_string ((const gchar *) mapinfo.data);
-  gst_buffer_unmap (buffer, &mapinfo);
+  if (gst_buffer_map (buffer, &mapinfo, GST_MAP_READ)) {
+    gchar *str;
+    str = g_strndup ((const gchar *) mapinfo.data, mapinfo.size);
+    gst_buffer_unmap (buffer, &mapinfo);
+    value = gst_date_time_new_from_iso8601_string (str);
+    g_free (str);
+  }
   return value;
 }
 
@@ -1956,8 +2104,6 @@
       g_mutex_lock (&clock_drift->clock_lock);
       clock_drift->clock_compensation =
           g_date_time_difference (server_now, client_now);
-      clock_drift->got_clock = TRUE;
-      g_cond_broadcast (&clock_drift->clock_cond);
       g_mutex_unlock (&clock_drift->clock_lock);
       GST_DEBUG_OBJECT (demux,
           "Difference between client and server clocks is %lfs",
diff --git a/ext/dash/gstdashdemux.h b/ext/dash/gstdashdemux.h
index ca2af31..5ed9620 100644
--- a/ext/dash/gstdashdemux.h
+++ b/ext/dash/gstdashdemux.h
@@ -96,9 +96,11 @@
   /* Properties */
   GstClockTime max_buffering_time;      /* Maximum buffering time accumulated during playback */
   guint64 max_bitrate;          /* max of bitrate supported by target decoder         */
+  gchar* default_presentation_delay; /* presentation time delay if MPD@suggestedPresentationDelay is not present */
 
   gint n_audio_streams;
   gint n_video_streams;
+  gint n_subtitle_streams;
 };
 
 struct _GstDashDemuxClass
diff --git a/ext/dash/gstmpdparser.c b/ext/dash/gstmpdparser.c
index 80dc0df..778ab2e 100644
--- a/ext/dash/gstmpdparser.c
+++ b/ext/dash/gstmpdparser.c
@@ -33,6 +33,9 @@
 #define GST_CAT_DEFAULT gst_dash_demux_debug
 
 /* Property parsing */
+static gboolean gst_mpdparser_get_xml_prop_validated_string (xmlNode * a_node,
+    const gchar * property_name, gchar ** property_value,
+    gboolean (*validator) (const char *));
 static gboolean gst_mpdparser_get_xml_prop_string (xmlNode * a_node,
     const gchar * property_name, gchar ** property_value);
 static gboolean gst_mpdparser_get_xml_ns_prop_string (xmlNode * a_node,
@@ -69,7 +72,8 @@
 static gboolean gst_mpdparser_get_xml_prop_dateTime (xmlNode * a_node,
     const gchar * property_name, GstDateTime ** property_value);
 static gboolean gst_mpdparser_get_xml_prop_duration (xmlNode * a_node,
-    const gchar * property_name, gint64 default_value, gint64 * property_value);
+    const gchar * property_name, guint64 default_value,
+    guint64 * property_value);
 static gboolean gst_mpdparser_get_xml_node_content (xmlNode * a_node,
     gchar ** content);
 static gchar *gst_mpdparser_get_xml_node_namespace (xmlNode * a_node,
@@ -95,33 +99,36 @@
 static void gst_mpdparser_parse_s_node (GQueue * queue, xmlNode * a_node);
 static void gst_mpdparser_parse_segment_timeline_node (GstSegmentTimelineNode **
     pointer, xmlNode * a_node);
-static void gst_mpdparser_parse_mult_seg_base_type_ext (GstMultSegmentBaseType
-    ** pointer, xmlNode * a_node, GstMultSegmentBaseType * parent);
-static void gst_mpdparser_parse_segment_list_node (GstSegmentListNode **
+static gboolean
+gst_mpdparser_parse_mult_seg_base_type_ext (GstMultSegmentBaseType ** pointer,
+    xmlNode * a_node, GstMultSegmentBaseType * parent);
+static gboolean gst_mpdparser_parse_segment_list_node (GstSegmentListNode **
     pointer, xmlNode * a_node, GstSegmentListNode * parent);
 static void
 gst_mpdparser_parse_representation_base_type (GstRepresentationBaseType **
     pointer, xmlNode * a_node);
-static void gst_mpdparser_parse_representation_node (GList ** list,
+static gboolean gst_mpdparser_parse_representation_node (GList ** list,
     xmlNode * a_node, GstAdaptationSetNode * parent);
-static void gst_mpdparser_parse_adaptation_set_node (GList ** list,
+static gboolean gst_mpdparser_parse_adaptation_set_node (GList ** list,
     xmlNode * a_node, GstPeriodNode * parent);
 static void gst_mpdparser_parse_subset_node (GList ** list, xmlNode * a_node);
-static void gst_mpdparser_parse_segment_template_node (GstSegmentTemplateNode **
-    pointer, xmlNode * a_node, GstSegmentTemplateNode * parent);
-static void gst_mpdparser_parse_period_node (GList ** list, xmlNode * a_node);
+static gboolean
+gst_mpdparser_parse_segment_template_node (GstSegmentTemplateNode ** pointer,
+    xmlNode * a_node, GstSegmentTemplateNode * parent);
+static gboolean gst_mpdparser_parse_period_node (GList ** list,
+    xmlNode * a_node);
 static void gst_mpdparser_parse_program_info_node (GList ** list,
     xmlNode * a_node);
 static void gst_mpdparser_parse_metrics_range_node (GList ** list,
     xmlNode * a_node);
 static void gst_mpdparser_parse_metrics_node (GList ** list, xmlNode * a_node);
-static void gst_mpdparser_parse_root_node (GstMPDNode ** pointer,
+static gboolean gst_mpdparser_parse_root_node (GstMPDNode ** pointer,
     xmlNode * a_node);
 static void gst_mpdparser_parse_utctiming_node (GList ** list,
     xmlNode * a_node);
 
 /* Helper functions */
-static gint convert_to_millisecs (gint decimals, gint pos);
+static guint convert_to_millisecs (guint decimals, gint pos);
 static int strncmp_ext (const char *s1, const char *s2);
 static GstStreamPeriod *gst_mpdparser_get_stream_period (GstMpdClient * client);
 static GstSNode *gst_mpdparser_clone_s_node (GstSNode * pointer);
@@ -140,11 +147,12 @@
 static gchar *gst_mpdparser_build_URL_from_template (const gchar * url_template,
     const gchar * id, guint number, guint bandwidth, guint64 time);
 static gboolean gst_mpd_client_add_media_segment (GstActiveStream * stream,
-    GstSegmentURLNode * url_node, guint number, gint repeat, gint64 scale_start,
-    gint64 scale_duration, GstClockTime start, GstClockTime duration);
+    GstSegmentURLNode * url_node, guint number, gint repeat,
+    guint64 scale_start, guint64 scale_duration, GstClockTime start,
+    GstClockTime duration);
 static const gchar *gst_mpdparser_mimetype_to_caps (const gchar * mimeType);
 static GstClockTime gst_mpd_client_get_segment_duration (GstMpdClient * client,
-    GstActiveStream * stream, gint64 * scale_duration);
+    GstActiveStream * stream, guint64 * scale_duration);
 static GstDateTime *gst_mpd_client_get_availability_start_time (GstMpdClient *
     client);
 
@@ -253,14 +261,20 @@
 
 /* functions to parse node namespaces, content and properties */
 static gboolean
-gst_mpdparser_get_xml_prop_string (xmlNode * a_node,
-    const gchar * property_name, gchar ** property_value)
+gst_mpdparser_get_xml_prop_validated_string (xmlNode * a_node,
+    const gchar * property_name, gchar ** property_value,
+    gboolean (*validate) (const char *))
 {
   xmlChar *prop_string;
   gboolean exists = FALSE;
 
   prop_string = xmlGetProp (a_node, (const xmlChar *) property_name);
   if (prop_string) {
+    if (validate && !(*validate) ((const char *) prop_string)) {
+      GST_WARNING ("Validation failure: %s", prop_string);
+      xmlFree (prop_string);
+      return FALSE;
+    }
     *property_value = (gchar *) prop_string;
     exists = TRUE;
     GST_LOG (" - %s: %s", property_name, prop_string);
@@ -289,6 +303,28 @@
 }
 
 static gboolean
+gst_mpdparser_get_xml_prop_string (xmlNode * a_node,
+    const gchar * property_name, gchar ** property_value)
+{
+  return gst_mpdparser_get_xml_prop_validated_string (a_node, property_name,
+      property_value, NULL);
+}
+
+static gboolean
+gst_mpdparser_validate_no_whitespace (const char *s)
+{
+  return !strpbrk (s, "\r\n\t ");
+}
+
+static gboolean
+gst_mpdparser_get_xml_prop_string_no_whitespace (xmlNode * a_node,
+    const gchar * property_name, gchar ** property_value)
+{
+  return gst_mpdparser_get_xml_prop_validated_string (a_node, property_name,
+      property_value, gst_mpdparser_validate_no_whitespace);
+}
+
+static gboolean
 gst_mpdparser_get_xml_prop_string_vector_type (xmlNode * a_node,
     const gchar * property_name, gchar *** property_value)
 {
@@ -351,13 +387,16 @@
   *property_value = default_val;
   prop_string = xmlGetProp (a_node, (const xmlChar *) property_name);
   if (prop_string) {
-    if (sscanf ((gchar *) prop_string, "%u", property_value) == 1) {
+    if (sscanf ((gchar *) prop_string, "%u", property_value) == 1 &&
+        strstr ((gchar *) prop_string, "-") == NULL) {
       exists = TRUE;
       GST_LOG (" - %s: %u", property_name, *property_value);
     } else {
       GST_WARNING
           ("failed to parse unsigned integer property %s from xml string %s",
           property_name, prop_string);
+      /* sscanf might have written to *property_value. Restore to default */
+      *property_value = default_val;
     }
     xmlFree (prop_string);
   }
@@ -376,13 +415,16 @@
   prop_string = xmlGetProp (a_node, (const xmlChar *) property_name);
   if (prop_string) {
     if (sscanf ((gchar *) prop_string, "%" G_GUINT64_FORMAT,
-            property_value) == 1) {
+            property_value) == 1 &&
+        strstr ((gchar *) prop_string, "-") == NULL) {
       exists = TRUE;
       GST_LOG (" - %s: %" G_GUINT64_FORMAT, property_name, *property_value);
     } else {
       GST_WARNING
           ("failed to parse unsigned integer property %s from xml string %s",
           property_name, prop_string);
+      /* sscanf might have written to *property_value. Restore to default */
+      *property_value = default_val;
     }
     xmlFree (prop_string);
   }
@@ -409,12 +451,21 @@
         exists = TRUE;
         GST_LOG (" - %s:", property_name);
         for (i = 0; i < *value_size; i++) {
-          if (sscanf ((gchar *) str_vector[i], "%u", &prop_uint_vector[i]) == 1) {
+          if (sscanf ((gchar *) str_vector[i], "%u", &prop_uint_vector[i]) == 1
+              && strstr (str_vector[i], "-") == NULL) {
             GST_LOG ("    %u", prop_uint_vector[i]);
           } else {
             GST_WARNING
                 ("failed to parse uint vector type property %s from xml string %s",
                 property_name, str_vector[i]);
+            /* there is no special value to put in prop_uint_vector[i] to
+             * signal it is invalid, so we just clean everything and return
+             * FALSE
+             */
+            g_free (prop_uint_vector);
+            prop_uint_vector = NULL;
+            exists = FALSE;
+            break;
           }
         }
         *property_value = prop_uint_vector;
@@ -562,13 +613,25 @@
     }
     /* read first_byte_pos */
     if (pos != 0) {
-      if (sscanf (str, "%" G_GUINT64_FORMAT, &first_byte_pos) != 1) {
+      /* replace str[pos] with '\0' to allow sscanf to not be confused by
+       * the minus sign (eg " -1" (observe the space before -) would otherwise
+       * be interpreted as range -1 to 1)
+       */
+      str[pos] = 0;
+      if (sscanf (str, "%" G_GUINT64_FORMAT, &first_byte_pos) != 1 ||
+          strstr (str, "-") != NULL) {
+        /* sscanf failed or it found a negative number */
+        /* restore the '-' sign */
+        str[pos] = '-';
         goto error;
       }
+      /* restore the '-' sign */
+      str[pos] = '-';
     }
     /* read last_byte_pos */
     if (pos < (len - 1)) {
-      if (sscanf (str + pos + 1, "%" G_GUINT64_FORMAT, &last_byte_pos) != 1) {
+      if (sscanf (str + pos + 1, "%" G_GUINT64_FORMAT, &last_byte_pos) != 1 ||
+          strstr (str + pos + 1, "-") != NULL) {
         goto error;
       }
     }
@@ -613,6 +676,10 @@
       GST_TRACE ("pos %d >= len %d", pos, len);
       goto error;
     }
+    /* search for negative sign */
+    if (strstr (str, "-") != NULL) {
+      goto error;
+    }
     /* read num */
     if (pos != 0) {
       if (sscanf (str, "%u", &num) != 1) {
@@ -659,6 +726,11 @@
     str = (gchar *) prop_string;
     GST_TRACE ("framerate: %s, len %d", str, len);
 
+    /* search for negative sign */
+    if (strstr (str, "-") != NULL) {
+      goto error;
+    }
+
     /* read "/" if available */
     pos = strcspn (str, "/");
     /* read num */
@@ -717,7 +789,7 @@
       val = 0;
     } else {
       flag = TRUE;
-      if (sscanf (str, "%u", &val) != 1)
+      if (sscanf (str, "%u", &val) != 1 || strstr (str, "-") != NULL)
         goto error;
     }
 
@@ -764,7 +836,8 @@
   xmlChar *prop_string;
   gchar *str;
   gint ret, pos;
-  gint year, month, day, hour, minute, second;
+  gint year, month, day, hour, minute;
+  gdouble second;
   gboolean exists = FALSE;
 
   prop_string = xmlGetProp (a_node, (const xmlChar *) property_name);
@@ -773,46 +846,46 @@
     GST_TRACE ("dateTime: %s, len %d", str, xmlStrlen (prop_string));
     /* parse year */
     ret = sscanf (str, "%d", &year);
-    if (ret != 1)
+    if (ret != 1 || year <= 0)
       goto error;
     pos = strcspn (str, "-");
     str += (pos + 1);
     GST_TRACE (" - year %d", year);
     /* parse month */
     ret = sscanf (str, "%d", &month);
-    if (ret != 1)
+    if (ret != 1 || month <= 0)
       goto error;
     pos = strcspn (str, "-");
     str += (pos + 1);
     GST_TRACE (" - month %d", month);
     /* parse day */
     ret = sscanf (str, "%d", &day);
-    if (ret != 1)
+    if (ret != 1 || day <= 0)
       goto error;
     pos = strcspn (str, "T");
     str += (pos + 1);
     GST_TRACE (" - day %d", day);
     /* parse hour */
     ret = sscanf (str, "%d", &hour);
-    if (ret != 1)
+    if (ret != 1 || hour < 0)
       goto error;
     pos = strcspn (str, ":");
     str += (pos + 1);
     GST_TRACE (" - hour %d", hour);
     /* parse minute */
     ret = sscanf (str, "%d", &minute);
-    if (ret != 1)
+    if (ret != 1 || minute < 0)
       goto error;
     pos = strcspn (str, ":");
     str += (pos + 1);
     GST_TRACE (" - minute %d", minute);
     /* parse second */
-    ret = sscanf (str, "%d", &second);
-    if (ret != 1)
+    ret = sscanf (str, "%lf", &second);
+    if (ret != 1 || second < 0)
       goto error;
-    GST_TRACE (" - second %d", second);
+    GST_TRACE (" - second %lf", second);
 
-    GST_LOG (" - %s: %4d/%02d/%02d %02d:%02d:%02d", property_name,
+    GST_LOG (" - %s: %4d/%02d/%02d %02d:%02d:%09.6lf", property_name,
         year, month, day, hour, minute, second);
 
     exists = TRUE;
@@ -849,10 +922,11 @@
 */
 
 /* this function computes decimals * 10 ^ (3 - pos) */
-static gint
-convert_to_millisecs (gint decimals, gint pos)
+static guint
+convert_to_millisecs (guint decimals, gint pos)
 {
-  gint num = 1, den = 1, i = 3 - pos;
+  guint num = 1, den = 1;
+  gint i = 3 - pos;
 
   while (i < 0) {
     den *= 10;
@@ -867,141 +941,239 @@
 }
 
 static gboolean
+accumulate (guint64 * v, guint64 mul, guint64 add)
+{
+  guint64 tmp;
+
+  if (*v > G_MAXUINT64 / mul)
+    return FALSE;
+  tmp = *v * mul;
+  if (tmp > G_MAXUINT64 - add)
+    return FALSE;
+  *v = tmp + add;
+  return TRUE;
+}
+
+static gboolean
+gst_mpdparser_parse_duration (const char *str, guint64 * value)
+{
+  gint ret, len, pos, posT;
+  gint years = -1, months = -1, days = -1, hours = -1, minutes = -1, seconds =
+      -1, decimals = -1, read;
+  gboolean have_ms = FALSE;
+  guint64 tmp_value;
+
+  len = strlen (str);
+  GST_TRACE ("duration: %s, len %d", str, len);
+  if (strspn (str, "PT0123456789., \tHMDSY") < len) {
+    GST_WARNING ("Invalid character found: '%s'", str);
+    goto error;
+  }
+  /* skip leading/trailing whitespace */
+  while (strchr (" \t", str[0])) {
+    str++;
+    len--;
+  }
+  while (len > 0 && strchr (" \t", str[len - 1]))
+    --len;
+
+  /* read "P" for period */
+  if (str[0] != 'P') {
+    GST_WARNING ("P not found at the beginning of the string!");
+    goto error;
+  }
+  str++;
+  len--;
+
+  /* read "T" for time (if present) */
+  posT = strcspn (str, "T");
+  len -= posT;
+  if (posT > 0) {
+    /* there is some room between P and T, so there must be a period section */
+    /* read years, months, days */
+    do {
+      GST_TRACE ("parsing substring %s", str);
+      pos = strcspn (str, "YMD");
+      ret = sscanf (str, "%u", &read);
+      if (ret != 1) {
+        GST_WARNING ("can not read integer value from string %s!", str);
+        goto error;
+      }
+      switch (str[pos]) {
+        case 'Y':
+          if (years != -1 || months != -1 || days != -1) {
+            GST_WARNING ("year, month or day was already set");
+            goto error;
+          }
+          years = read;
+          break;
+        case 'M':
+          if (months != -1 || days != -1) {
+            GST_WARNING ("month or day was already set");
+            goto error;
+          }
+          months = read;
+          if (months >= 12) {
+            GST_WARNING ("Month out of range");
+            goto error;
+          }
+          break;
+        case 'D':
+          if (days != -1) {
+            GST_WARNING ("day was already set");
+            goto error;
+          }
+          days = read;
+          if (days >= 31) {
+            GST_WARNING ("Day out of range");
+            goto error;
+          }
+          break;
+        default:
+          GST_WARNING ("unexpected char %c!", str[pos]);
+          goto error;
+          break;
+      }
+      GST_TRACE ("read number %u type %c", read, str[pos]);
+      str += (pos + 1);
+      posT -= (pos + 1);
+    } while (posT > 0);
+  }
+
+  if (years == -1)
+    years = 0;
+  if (months == -1)
+    months = 0;
+  if (days == -1)
+    days = 0;
+
+  GST_TRACE ("Y:M:D=%d:%d:%d", years, months, days);
+
+  /* read "T" for time (if present) */
+  /* here T is at pos == 0 */
+  str++;
+  len--;
+  pos = 0;
+  if (pos < len) {
+    /* T found, there is a time section */
+    /* read hours, minutes, seconds, hundredths of second */
+    do {
+      GST_TRACE ("parsing substring %s", str);
+      pos = strcspn (str, "HMS,.");
+      ret = sscanf (str, "%u", &read);
+      if (ret != 1) {
+        GST_WARNING ("can not read integer value from string %s!", str);
+        goto error;
+      }
+      switch (str[pos]) {
+        case 'H':
+          if (hours != -1 || minutes != -1 || seconds != -1) {
+            GST_WARNING ("hour, minute or second was already set");
+            goto error;
+          }
+          hours = read;
+          if (hours >= 24) {
+            GST_WARNING ("Hour out of range");
+            goto error;
+          }
+          break;
+        case 'M':
+          if (minutes != -1 || seconds != -1) {
+            GST_WARNING ("minute or second was already set");
+            goto error;
+          }
+          minutes = read;
+          if (minutes >= 60) {
+            GST_WARNING ("Minute out of range");
+            goto error;
+          }
+          break;
+        case 'S':
+          if (have_ms) {
+            /* we have read the decimal part of the seconds */
+            decimals = convert_to_millisecs (read, pos);
+            GST_TRACE ("decimal number %u (%d digits) -> %d ms", read, pos,
+                decimals);
+          } else {
+            if (seconds != -1) {
+              GST_WARNING ("second was already set");
+              goto error;
+            }
+            /* no decimals */
+            seconds = read;
+          }
+          break;
+        case '.':
+        case ',':
+          /* we have read the integer part of a decimal number in seconds */
+          if (seconds != -1) {
+            GST_WARNING ("second was already set");
+            goto error;
+          }
+          seconds = read;
+          have_ms = TRUE;
+          break;
+        default:
+          GST_WARNING ("unexpected char %c!", str[pos]);
+          goto error;
+          break;
+      }
+      GST_TRACE ("read number %u type %c", read, str[pos]);
+      str += pos + 1;
+      len -= (pos + 1);
+    } while (len > 0);
+  }
+
+  if (hours == -1)
+    hours = 0;
+  if (minutes == -1)
+    minutes = 0;
+  if (seconds == -1)
+    seconds = 0;
+  if (decimals == -1)
+    decimals = 0;
+  GST_TRACE ("H:M:S.MS=%d:%d:%d.%03d", hours, minutes, seconds, decimals);
+
+  tmp_value = 0;
+  if (!accumulate (&tmp_value, 1, years)
+      || !accumulate (&tmp_value, 365, months * 30)
+      || !accumulate (&tmp_value, 1, days)
+      || !accumulate (&tmp_value, 24, hours)
+      || !accumulate (&tmp_value, 60, minutes)
+      || !accumulate (&tmp_value, 60, seconds)
+      || !accumulate (&tmp_value, 1000, decimals))
+    goto error;
+
+  /* ensure it can be converted from milliseconds to nanoseconds */
+  if (tmp_value > G_MAXUINT64 / 1000000)
+    goto error;
+
+  *value = tmp_value;
+  return TRUE;
+
+error:
+  return FALSE;
+}
+
+static gboolean
 gst_mpdparser_get_xml_prop_duration (xmlNode * a_node,
-    const gchar * property_name, gint64 default_value, gint64 * property_value)
+    const gchar * property_name, guint64 default_value,
+    guint64 * property_value)
 {
   xmlChar *prop_string;
   gchar *str;
-  gint ret, read, len, pos, posT;
-  gint years = 0, months = 0, days = 0, hours = 0, minutes = 0, seconds =
-      0, decimals = 0;
-  gint sign = 1;
-  gboolean have_ms = FALSE;
   gboolean exists = FALSE;
 
   *property_value = default_value;
   prop_string = xmlGetProp (a_node, (const xmlChar *) property_name);
   if (prop_string) {
-    len = xmlStrlen (prop_string);
     str = (gchar *) prop_string;
-    GST_TRACE ("duration: %s, len %d", str, len);
-    /* read "-" for sign, if present */
-    pos = strcspn (str, "-");
-    if (pos < len) {            /* found "-" */
-      if (pos != 0) {
-        GST_WARNING ("sign \"-\" non at the beginning of the string");
-        goto error;
-      }
-      GST_TRACE ("found - sign at the beginning");
-      sign = -1;
-      str++;
-      len--;
-    }
-    /* read "P" for period */
-    pos = strcspn (str, "P");
-    if (pos != 0) {
-      GST_WARNING ("P not found at the beginning of the string!");
+    if (!gst_mpdparser_parse_duration (str, property_value))
       goto error;
-    }
-    str++;
-    len--;
-    /* read "T" for time (if present) */
-    posT = strcspn (str, "T");
-    len -= posT;
-    if (posT > 0) {
-      /* there is some room between P and T, so there must be a period section */
-      /* read years, months, days */
-      do {
-        GST_TRACE ("parsing substring %s", str);
-        pos = strcspn (str, "YMD");
-        ret = sscanf (str, "%d", &read);
-        if (ret != 1) {
-          GST_WARNING ("can not read integer value from string %s!", str);
-          goto error;
-        }
-        switch (str[pos]) {
-          case 'Y':
-            years = read;
-            break;
-          case 'M':
-            months = read;
-            break;
-          case 'D':
-            days = read;
-            break;
-          default:
-            GST_WARNING ("unexpected char %c!", str[pos]);
-            goto error;
-            break;
-        }
-        GST_TRACE ("read number %d type %c", read, str[pos]);
-        str += (pos + 1);
-        posT -= (pos + 1);
-      } while (posT > 0);
-
-      GST_TRACE ("Y:M:D=%d:%d:%d", years, months, days);
-    }
-    /* read "T" for time (if present) */
-    /* here T is at pos == 0 */
-    str++;
-    len--;
-    pos = 0;
-    if (pos < len) {
-      /* T found, there is a time section */
-      /* read hours, minutes, seconds, cents of second */
-      do {
-        GST_TRACE ("parsing substring %s", str);
-        pos = strcspn (str, "HMS,.");
-        ret = sscanf (str, "%d", &read);
-        if (ret != 1) {
-          GST_WARNING ("can not read integer value from string %s!", str);
-          goto error;
-        }
-        switch (str[pos]) {
-          case 'H':
-            hours = read;
-            break;
-          case 'M':
-            minutes = read;
-            break;
-          case 'S':
-            if (have_ms) {
-              /* we have read the decimal part of the seconds */
-              decimals = convert_to_millisecs (read, pos);
-              GST_TRACE ("decimal number %d (%d digits) -> %d ms", read, pos,
-                  decimals);
-            } else {
-              /* no decimals */
-              seconds = read;
-            }
-            break;
-          case '.':
-          case ',':
-            /* we have read the integer part of a decimal number in seconds */
-            seconds = read;
-            have_ms = TRUE;
-            break;
-          default:
-            GST_WARNING ("unexpected char %c!", str[pos]);
-            goto error;
-            break;
-        }
-        GST_TRACE ("read number %d type %c", read, str[pos]);
-        str += pos + 1;
-        len -= (pos + 1);
-      } while (len > 0);
-
-      GST_TRACE ("H:M:S.MS=%d:%d:%d.%03d", hours, minutes, seconds, decimals);
-    }
-
+    GST_LOG (" - %s: %" G_GUINT64_FORMAT, property_name, *property_value);
     xmlFree (prop_string);
     exists = TRUE;
-    *property_value =
-        sign * ((((((gint64) years * 365 + months * 30 + days) * 24 +
-                    hours) * 60 + minutes) * 60 + seconds) * 1000 + decimals);
-    GST_LOG (" - %s: %" G_GINT64_FORMAT, property_name, *property_value);
   }
-
   return exists;
 
 error:
@@ -1396,16 +1568,17 @@
   }
 }
 
-static void
+static gboolean
 gst_mpdparser_parse_mult_seg_base_type_ext (GstMultSegmentBaseType ** pointer,
     xmlNode * a_node, GstMultSegmentBaseType * parent)
 {
   xmlNode *cur_node;
   GstMultSegmentBaseType *mult_seg_base_type;
   guint intval;
+  gboolean has_timeline = FALSE, has_duration = FALSE;
 
   gst_mpdparser_free_mult_seg_base_type_ext (*pointer);
-  *pointer = mult_seg_base_type = g_slice_new0 (GstMultSegmentBaseType);
+  mult_seg_base_type = g_slice_new0 (GstMultSegmentBaseType);
 
   mult_seg_base_type->duration = 0;
   mult_seg_base_type->startNumber = 1;
@@ -1424,6 +1597,7 @@
   if (gst_mpdparser_get_xml_prop_unsigned_integer (a_node, "duration", 0,
           &intval)) {
     mult_seg_base_type->duration = intval;
+    has_duration = TRUE;
   }
 
   if (gst_mpdparser_get_xml_prop_unsigned_integer (a_node, "startNumber", 1,
@@ -1442,6 +1616,7 @@
         /* parse frees the segmenttimeline if any */
         gst_mpdparser_parse_segment_timeline_node
             (&mult_seg_base_type->SegmentTimeline, cur_node);
+        has_timeline = TRUE;
       } else if (xmlStrcmp (cur_node->name,
               (xmlChar *) "BitstreamSwitching") == 0) {
         /* parse frees the old url before setting the new one */
@@ -1450,18 +1625,31 @@
       }
     }
   }
+
+  if (!has_duration && !has_timeline) {
+    GST_ERROR ("segment has neither duration nor timeline");
+    goto error;
+  }
+
+  *pointer = mult_seg_base_type;
+  return TRUE;
+
+error:
+  gst_mpdparser_free_mult_seg_base_type_ext (mult_seg_base_type);
+  return FALSE;
 }
 
-static void
+static gboolean
 gst_mpdparser_parse_segment_list_node (GstSegmentListNode ** pointer,
     xmlNode * a_node, GstSegmentListNode * parent)
 {
   xmlNode *cur_node;
   GstSegmentListNode *new_segment_list;
   gchar *actuate;
+  gboolean segment_urls_inherited_from_parent = FALSE;
 
   gst_mpdparser_free_segment_list_node (*pointer);
-  *pointer = new_segment_list = g_slice_new0 (GstSegmentListNode);
+  new_segment_list = g_slice_new0 (GstSegmentListNode);
 
   /* Inherit attribute values from parent */
   if (parent) {
@@ -1473,6 +1661,7 @@
       new_segment_list->SegmentURL =
           g_list_append (new_segment_list->SegmentURL,
           gst_mpdparser_clone_segment_url (seg_url));
+      segment_urls_inherited_from_parent = TRUE;
     }
   }
 
@@ -1487,19 +1676,44 @@
   }
 
   GST_LOG ("extension of SegmentList node:");
-  gst_mpdparser_parse_mult_seg_base_type_ext
+  if (!gst_mpdparser_parse_mult_seg_base_type_ext
       (&new_segment_list->MultSegBaseType, a_node,
-      (parent ? parent->MultSegBaseType : NULL));
+          (parent ? parent->MultSegBaseType : NULL)))
+    goto error;
 
   /* explore children nodes */
   for (cur_node = a_node->children; cur_node; cur_node = cur_node->next) {
     if (cur_node->type == XML_ELEMENT_NODE) {
       if (xmlStrcmp (cur_node->name, (xmlChar *) "SegmentURL") == 0) {
+        if (segment_urls_inherited_from_parent) {
+          /*
+           * SegmentBase, SegmentTemplate and SegmentList shall inherit
+           * attributes and elements from the same element on a higher level.
+           * If the same attribute or element is present on both levels,
+           * the one on the lower level shall take precedence over the one
+           * on the higher level.
+           */
+
+          /* Clear the list of inherited segment URLs */
+          g_list_free_full (new_segment_list->SegmentURL,
+              (GDestroyNotify) gst_mpdparser_free_segment_url_node);
+          new_segment_list->SegmentURL = NULL;
+
+          /* mark the fact that we cleared the list, so that it is not tried again */
+          segment_urls_inherited_from_parent = FALSE;
+        }
         gst_mpdparser_parse_segment_url_node (&new_segment_list->SegmentURL,
             cur_node);
       }
     }
   }
+
+  *pointer = new_segment_list;
+  return TRUE;
+
+error:
+  gst_mpdparser_free_segment_list_node (new_segment_list);
+  return FALSE;
 }
 
 static void
@@ -1522,6 +1736,10 @@
   gst_mpdparser_get_xml_prop_ratio (a_node, "sar", &representation_base->sar);
   gst_mpdparser_get_xml_prop_framerate (a_node, "frameRate",
       &representation_base->frameRate);
+  gst_mpdparser_get_xml_prop_framerate (a_node, "minFrameRate",
+      &representation_base->minFrameRate);
+  gst_mpdparser_get_xml_prop_framerate (a_node, "maxFrameRate",
+      &representation_base->maxFrameRate);
   gst_mpdparser_get_xml_prop_string (a_node, "audioSamplingRate",
       &representation_base->audioSamplingRate);
   gst_mpdparser_get_xml_prop_string (a_node, "mimeType",
@@ -1560,7 +1778,7 @@
   }
 }
 
-static void
+static gboolean
 gst_mpdparser_parse_representation_node (GList ** list, xmlNode * a_node,
     GstAdaptationSetNode * parent)
 {
@@ -1568,10 +1786,10 @@
   GstRepresentationNode *new_representation;
 
   new_representation = g_slice_new0 (GstRepresentationNode);
-  *list = g_list_append (*list, new_representation);
 
   GST_LOG ("attributes of Representation node:");
-  gst_mpdparser_get_xml_prop_string (a_node, "id", &new_representation->id);
+  gst_mpdparser_get_xml_prop_string_no_whitespace (a_node, "id",
+      &new_representation->id);
   gst_mpdparser_get_xml_prop_unsigned_integer (a_node, "bandwidth", 0,
       &new_representation->bandwidth);
   gst_mpdparser_get_xml_prop_unsigned_integer (a_node, "qualityRanking", 0,
@@ -1592,12 +1810,14 @@
         gst_mpdparser_parse_seg_base_type_ext (&new_representation->SegmentBase,
             cur_node, parent->SegmentBase);
       } else if (xmlStrcmp (cur_node->name, (xmlChar *) "SegmentTemplate") == 0) {
-        gst_mpdparser_parse_segment_template_node
+        if (!gst_mpdparser_parse_segment_template_node
             (&new_representation->SegmentTemplate, cur_node,
-            parent->SegmentTemplate);
+                parent->SegmentTemplate))
+          goto error;
       } else if (xmlStrcmp (cur_node->name, (xmlChar *) "SegmentList") == 0) {
-        gst_mpdparser_parse_segment_list_node (&new_representation->SegmentList,
-            cur_node, parent->SegmentList);
+        if (!gst_mpdparser_parse_segment_list_node
+            (&new_representation->SegmentList, cur_node, parent->SegmentList))
+          goto error;
       } else if (xmlStrcmp (cur_node->name, (xmlChar *) "BaseURL") == 0) {
         gst_mpdparser_parse_baseURL_node (&new_representation->BaseURLs,
             cur_node);
@@ -1608,9 +1828,18 @@
       }
     }
   }
+
+  /* some sanity checking */
+
+  *list = g_list_append (*list, new_representation);
+  return TRUE;
+
+error:
+  gst_mpdparser_free_representation_node (new_representation);
+  return FALSE;
 }
 
-static void
+static gboolean
 gst_mpdparser_parse_adaptation_set_node (GList ** list, xmlNode * a_node,
     GstPeriodNode * parent)
 {
@@ -1619,7 +1848,6 @@
   gchar *actuate;
 
   new_adap_set = g_slice_new0 (GstAdaptationSetNode);
-  *list = g_list_append (*list, new_adap_set);
 
   GST_LOG ("attributes of AdaptationSet node:");
 
@@ -1653,14 +1881,19 @@
       &new_adap_set->minHeight);
   gst_mpdparser_get_xml_prop_unsigned_integer (a_node, "maxHeight", 0,
       &new_adap_set->maxHeight);
-  gst_mpdparser_get_xml_prop_framerate (a_node, "minFrameRate",
-      &new_adap_set->minFrameRate);
-  gst_mpdparser_get_xml_prop_framerate (a_node, "maxFrameRate",
-      &new_adap_set->maxFrameRate);
   gst_mpdparser_get_xml_prop_cond_uint (a_node, "segmentAlignment",
       &new_adap_set->segmentAlignment);
   gst_mpdparser_get_xml_prop_boolean (a_node, "bitstreamSwitching",
-      FALSE, &new_adap_set->bitstreamSwitching);
+      parent->bitstreamSwitching, &new_adap_set->bitstreamSwitching);
+  if (parent->bitstreamSwitching && !new_adap_set->bitstreamSwitching) {
+    /* according to the standard, if the Period's bitstreamSwitching attribute
+     * is true, the AdaptationSet should not have the bitstreamSwitching
+     * attribute set to false.
+     * We should return a parsing error, but we are generous and ignore the
+     * standard violation.
+     */
+    new_adap_set->bitstreamSwitching = parent->bitstreamSwitching;
+  }
   gst_mpdparser_get_xml_prop_cond_uint (a_node, "subsegmentAlignment",
       &new_adap_set->subsegmentAlignment);
   gst_mpdparser_get_xml_prop_SAP_type (a_node, "subsegmentStartsWithSAP",
@@ -1691,15 +1924,17 @@
         gst_mpdparser_parse_seg_base_type_ext (&new_adap_set->SegmentBase,
             cur_node, parent->SegmentBase);
       } else if (xmlStrcmp (cur_node->name, (xmlChar *) "SegmentList") == 0) {
-        gst_mpdparser_parse_segment_list_node (&new_adap_set->SegmentList,
-            cur_node, parent->SegmentList);
+        if (!gst_mpdparser_parse_segment_list_node (&new_adap_set->SegmentList,
+                cur_node, parent->SegmentList))
+          goto error;
       } else if (xmlStrcmp (cur_node->name,
               (xmlChar *) "ContentComponent") == 0) {
         gst_mpdparser_parse_content_component_node
             (&new_adap_set->ContentComponents, cur_node);
       } else if (xmlStrcmp (cur_node->name, (xmlChar *) "SegmentTemplate") == 0) {
-        gst_mpdparser_parse_segment_template_node
-            (&new_adap_set->SegmentTemplate, cur_node, parent->SegmentTemplate);
+        if (!gst_mpdparser_parse_segment_template_node
+            (&new_adap_set->SegmentTemplate, cur_node, parent->SegmentTemplate))
+          goto error;
       }
     }
   }
@@ -1711,11 +1946,19 @@
   for (cur_node = a_node->children; cur_node; cur_node = cur_node->next) {
     if (cur_node->type == XML_ELEMENT_NODE) {
       if (xmlStrcmp (cur_node->name, (xmlChar *) "Representation") == 0) {
-        gst_mpdparser_parse_representation_node (&new_adap_set->Representations,
-            cur_node, new_adap_set);
+        if (!gst_mpdparser_parse_representation_node
+            (&new_adap_set->Representations, cur_node, new_adap_set))
+          goto error;
       }
     }
   }
+
+  *list = g_list_append (*list, new_adap_set);
+  return TRUE;
+
+error:
+  gst_mpdparser_free_adaptation_set_node (new_adap_set);
+  return FALSE;
 }
 
 static void
@@ -1731,7 +1974,7 @@
       &new_subset->contains, &new_subset->size);
 }
 
-static void
+static gboolean
 gst_mpdparser_parse_segment_template_node (GstSegmentTemplateNode ** pointer,
     xmlNode * a_node, GstSegmentTemplateNode * parent)
 {
@@ -1739,12 +1982,13 @@
   gchar *strval;
 
   gst_mpdparser_free_segment_template_node (*pointer);
-  *pointer = new_segment_template = g_slice_new0 (GstSegmentTemplateNode);
+  new_segment_template = g_slice_new0 (GstSegmentTemplateNode);
 
   GST_LOG ("extension of SegmentTemplate node:");
-  gst_mpdparser_parse_mult_seg_base_type_ext
+  if (!gst_mpdparser_parse_mult_seg_base_type_ext
       (&new_segment_template->MultSegBaseType, a_node,
-      (parent ? parent->MultSegBaseType : NULL));
+          (parent ? parent->MultSegBaseType : NULL)))
+    goto error;
 
   /* Inherit attribute values from parent when the value isn't found */
   GST_LOG ("attributes of SegmentTemplate node:");
@@ -1773,9 +2017,16 @@
     new_segment_template->bitstreamSwitching =
         xmlMemStrdup (parent->bitstreamSwitching);
   }
+
+  *pointer = new_segment_template;
+  return TRUE;
+
+error:
+  gst_mpdparser_free_segment_template_node (new_segment_template);
+  return FALSE;
 }
 
-static void
+static gboolean
 gst_mpdparser_parse_period_node (GList ** list, xmlNode * a_node)
 {
   xmlNode *cur_node;
@@ -1783,7 +2034,6 @@
   gchar *actuate;
 
   new_period = g_slice_new0 (GstPeriodNode);
-  *list = g_list_append (*list, new_period);
 
   GST_LOG ("attributes of Period node:");
 
@@ -1798,11 +2048,12 @@
   }
 
   gst_mpdparser_get_xml_prop_string (a_node, "id", &new_period->id);
-  gst_mpdparser_get_xml_prop_duration (a_node, "start", -1, &new_period->start);
-  gst_mpdparser_get_xml_prop_duration (a_node, "duration", -1,
-      &new_period->duration);
-  gst_mpdparser_get_xml_prop_boolean (a_node, "bitstreamSwitching",
-      FALSE, &new_period->bitstreamSwitching);
+  gst_mpdparser_get_xml_prop_duration (a_node, "start", GST_MPD_DURATION_NONE,
+      &new_period->start);
+  gst_mpdparser_get_xml_prop_duration (a_node, "duration",
+      GST_MPD_DURATION_NONE, &new_period->duration);
+  gst_mpdparser_get_xml_prop_boolean (a_node, "bitstreamSwitching", FALSE,
+      &new_period->bitstreamSwitching);
 
   /* explore children nodes */
   for (cur_node = a_node->children; cur_node; cur_node = cur_node->next) {
@@ -1811,11 +2062,13 @@
         gst_mpdparser_parse_seg_base_type_ext (&new_period->SegmentBase,
             cur_node, NULL);
       } else if (xmlStrcmp (cur_node->name, (xmlChar *) "SegmentList") == 0) {
-        gst_mpdparser_parse_segment_list_node (&new_period->SegmentList,
-            cur_node, NULL);
+        if (!gst_mpdparser_parse_segment_list_node (&new_period->SegmentList,
+                cur_node, NULL))
+          goto error;
       } else if (xmlStrcmp (cur_node->name, (xmlChar *) "SegmentTemplate") == 0) {
-        gst_mpdparser_parse_segment_template_node (&new_period->SegmentTemplate,
-            cur_node, NULL);
+        if (!gst_mpdparser_parse_segment_template_node
+            (&new_period->SegmentTemplate, cur_node, NULL))
+          goto error;
       } else if (xmlStrcmp (cur_node->name, (xmlChar *) "Subset") == 0) {
         gst_mpdparser_parse_subset_node (&new_period->Subsets, cur_node);
       } else if (xmlStrcmp (cur_node->name, (xmlChar *) "BaseURL") == 0) {
@@ -1831,11 +2084,19 @@
   for (cur_node = a_node->children; cur_node; cur_node = cur_node->next) {
     if (cur_node->type == XML_ELEMENT_NODE) {
       if (xmlStrcmp (cur_node->name, (xmlChar *) "AdaptationSet") == 0) {
-        gst_mpdparser_parse_adaptation_set_node (&new_period->AdaptationSets,
-            cur_node, new_period);
+        if (!gst_mpdparser_parse_adaptation_set_node
+            (&new_period->AdaptationSets, cur_node, new_period))
+          goto error;
       }
     }
   }
+
+  *list = g_list_append (*list, new_period);
+  return TRUE;
+
+error:
+  gst_mpdparser_free_period_node (new_period);
+  return FALSE;
 }
 
 static void
@@ -1877,10 +2138,10 @@
   *list = g_list_append (*list, new_metrics_range);
 
   GST_LOG ("attributes of Metrics Range node:");
-  gst_mpdparser_get_xml_prop_duration (a_node, "starttime", -1,
-      &new_metrics_range->starttime);
-  gst_mpdparser_get_xml_prop_duration (a_node, "duration", -1,
-      &new_metrics_range->duration);
+  gst_mpdparser_get_xml_prop_duration (a_node, "starttime",
+      GST_MPD_DURATION_NONE, &new_metrics_range->starttime);
+  gst_mpdparser_get_xml_prop_duration (a_node, "duration",
+      GST_MPD_DURATION_NONE, &new_metrics_range->duration);
 }
 
 static void
@@ -1946,20 +2207,26 @@
     }
     new_timing->urls = g_strsplit (value, " ", max_tokens);
     xmlFree (value);
+  }
+
+  /* append to list only if both method and urls were set */
+  if (new_timing->method != 0 && new_timing->urls != NULL &&
+      g_strv_length (new_timing->urls) != 0) {
     *list = g_list_append (*list, new_timing);
   } else {
     gst_mpdparser_free_utctiming_node (new_timing);
   }
 }
 
-static void
+static gboolean
 gst_mpdparser_parse_root_node (GstMPDNode ** pointer, xmlNode * a_node)
 {
   xmlNode *cur_node;
   GstMPDNode *new_mpd;
 
   gst_mpdparser_free_mpd_node (*pointer);
-  *pointer = new_mpd = g_slice_new0 (GstMPDNode);
+  *pointer = NULL;
+  new_mpd = g_slice_new0 (GstMPDNode);
 
   GST_LOG ("namespaces of root MPD node:");
   new_mpd->default_namespace =
@@ -1977,26 +2244,27 @@
       &new_mpd->availabilityStartTime);
   gst_mpdparser_get_xml_prop_dateTime (a_node, "availabilityEndTime",
       &new_mpd->availabilityEndTime);
-  gst_mpdparser_get_xml_prop_duration (a_node, "mediaPresentationDuration", -1,
-      &new_mpd->mediaPresentationDuration);
-  gst_mpdparser_get_xml_prop_duration (a_node, "minimumUpdatePeriod", -1,
-      &new_mpd->minimumUpdatePeriod);
-  gst_mpdparser_get_xml_prop_duration (a_node, "minBufferTime", -1,
-      &new_mpd->minBufferTime);
-  gst_mpdparser_get_xml_prop_duration (a_node, "timeShiftBufferDepth", -1,
-      &new_mpd->timeShiftBufferDepth);
-  gst_mpdparser_get_xml_prop_duration (a_node, "suggestedPresentationDelay", -1,
-      &new_mpd->suggestedPresentationDelay);
-  gst_mpdparser_get_xml_prop_duration (a_node, "maxSegmentDuration", -1,
-      &new_mpd->maxSegmentDuration);
-  gst_mpdparser_get_xml_prop_duration (a_node, "maxSubsegmentDuration", -1,
-      &new_mpd->maxSubsegmentDuration);
+  gst_mpdparser_get_xml_prop_duration (a_node, "mediaPresentationDuration",
+      GST_MPD_DURATION_NONE, &new_mpd->mediaPresentationDuration);
+  gst_mpdparser_get_xml_prop_duration (a_node, "minimumUpdatePeriod",
+      GST_MPD_DURATION_NONE, &new_mpd->minimumUpdatePeriod);
+  gst_mpdparser_get_xml_prop_duration (a_node, "minBufferTime",
+      GST_MPD_DURATION_NONE, &new_mpd->minBufferTime);
+  gst_mpdparser_get_xml_prop_duration (a_node, "timeShiftBufferDepth",
+      GST_MPD_DURATION_NONE, &new_mpd->timeShiftBufferDepth);
+  gst_mpdparser_get_xml_prop_duration (a_node, "suggestedPresentationDelay",
+      GST_MPD_DURATION_NONE, &new_mpd->suggestedPresentationDelay);
+  gst_mpdparser_get_xml_prop_duration (a_node, "maxSegmentDuration",
+      GST_MPD_DURATION_NONE, &new_mpd->maxSegmentDuration);
+  gst_mpdparser_get_xml_prop_duration (a_node, "maxSubsegmentDuration",
+      GST_MPD_DURATION_NONE, &new_mpd->maxSubsegmentDuration);
 
   /* explore children Period nodes */
   for (cur_node = a_node->children; cur_node; cur_node = cur_node->next) {
     if (cur_node->type == XML_ELEMENT_NODE) {
       if (xmlStrcmp (cur_node->name, (xmlChar *) "Period") == 0) {
-        gst_mpdparser_parse_period_node (&new_mpd->Periods, cur_node);
+        if (!gst_mpdparser_parse_period_node (&new_mpd->Periods, cur_node))
+          goto error;
       } else if (xmlStrcmp (cur_node->name,
               (xmlChar *) "ProgramInformation") == 0) {
         gst_mpdparser_parse_program_info_node (&new_mpd->ProgramInfo, cur_node);
@@ -2011,6 +2279,14 @@
       }
     }
   }
+
+  gst_mpdparser_free_mpd_node (*pointer);
+  *pointer = new_mpd;
+  return TRUE;
+
+error:
+  gst_mpdparser_free_mpd_node (new_mpd);
+  return FALSE;
 }
 
 /* comparison functions */
@@ -2472,6 +2748,8 @@
       xmlFree (representation_base->profiles);
     g_slice_free (GstRatio, representation_base->sar);
     g_slice_free (GstFrameRate, representation_base->frameRate);
+    g_slice_free (GstFrameRate, representation_base->minFrameRate);
+    g_slice_free (GstFrameRate, representation_base->maxFrameRate);
     if (representation_base->audioSamplingRate)
       xmlFree (representation_base->audioSamplingRate);
     if (representation_base->mimeType)
@@ -2502,8 +2780,6 @@
     if (adaptation_set_node->contentType)
       xmlFree (adaptation_set_node->contentType);
     g_slice_free (GstRatio, adaptation_set_node->par);
-    g_slice_free (GstFrameRate, adaptation_set_node->minFrameRate);
-    g_slice_free (GstFrameRate, adaptation_set_node->maxFrameRate);
     g_slice_free (GstConditionalUintType,
         adaptation_set_node->segmentAlignment);
     g_slice_free (GstConditionalUintType,
@@ -2796,28 +3072,26 @@
 static gboolean
 validate_format (const gchar * format)
 {
-  gchar *p;
+  const gchar *p = format;
 
-  /* Check if there is a % at all */
-  p = strchr (format, '%');
-  if (!p)
-    return TRUE;
+  /* Check if it starts with % */
+  if (!p || p[0] != '%')
+    return FALSE;
   p++;
 
-  /* Following the % must be a 0, or any of d, x or u.
-   * x and u are not part of the spec, but don't hurt us
+  /* the spec mandates a format like %0[width]d */
+  /* Following the %, we must have a 0 */
+  if (p[0] != '0')
+    return FALSE;
+
+  /* Following the % must be a number starting with 0
    */
-  if (p[0] == '0') {
+  while (g_ascii_isdigit (*p))
     p++;
 
-    while (g_ascii_isdigit (*p))
-      p++;
-  }
-
-  /* After any 0 and alphanumeric values, there must be
-   * an d, x or u.
+  /* After any 0 and alphanumeric values, there must be a d.
    */
-  if (p[0] != 'd' && p[0] != 'x' && p[0] != 'u')
+  if (p[0] != 'd')
     return FALSE;
   p++;
 
@@ -2834,16 +3108,13 @@
 static gchar *
 promote_format_to_uint64 (const gchar * format)
 {
-  gchar *p;
+  const gchar *p = format;
   gchar *promoted_format;
 
   /* Must be called with a validated format! */
   g_return_val_if_fail (validate_format (format), NULL);
 
-  /* Check if there is a % at all */
-  p = strchr (format, '%');
-  if (!p)
-    return g_strdup (format);
+  /* it starts with % */
   p++;
 
   /* Following the % must be a 0, or any of d, x or u.
@@ -2856,10 +3127,10 @@
       p++;
   }
 
-  /* After any 0 and alphanumeric values, there must be
-   * an d, x or u. Otherwise validation would have failed
+  /* After any 0 and alphanumeric values, there must be a d.
+   * Otherwise validation would have failed
    */
-  g_assert (p[0] == 'd' || p[0] == 'x' || p[0] == 'u');
+  g_assert (p[0] == 'd');
 
   promoted_format =
       g_strdup_printf ("%.*s" G_GINT64_MODIFIER "%s", (gint) (p - format),
@@ -2868,6 +3139,26 @@
   return promoted_format;
 }
 
+static gboolean
+gst_mpdparser_validate_rfc1738_url (const char *s)
+{
+  while (*s) {
+    if (!strchr
+        (";:@&=aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ0123456789$-_.+!*'(),%/",
+            *s))
+      return FALSE;
+    if (*s == '%') {
+      /* g_ascii_isdigit returns FALSE for NUL, and || is a short circuiting
+         operator, so this is safe for strings ending before two hex digits */
+      if (!g_ascii_isxdigit (s[1]) || !g_ascii_isxdigit (s[2]))
+        return FALSE;
+      s += 2;
+    }
+    s++;
+  }
+  return TRUE;
+}
+
 static gchar *
 gst_mpdparser_build_URL_from_template (const gchar * url_template,
     const gchar * id, guint number, guint bandwidth, guint64 time)
@@ -2876,7 +3167,6 @@
   gchar **tokens, *token, *ret;
   const gchar *format;
   gint i, num_tokens;
-  gboolean last_token_par = TRUE;       /* last token was a parameter */
 
   g_return_val_if_fail (url_template != NULL, NULL);
   tokens = g_strsplit_set (url_template, "$", -1);
@@ -2886,14 +3176,36 @@
   }
   num_tokens = g_strv_length (tokens);
 
+  /*
+   * each identifier is guarded by 2 $, which means that we must have an odd number of tokens
+   * An even number of tokens means the string is not valid.
+   */
+  if ((num_tokens & 1) == 0) {
+    GST_ERROR ("Invalid number of tokens (%d). url_template is '%s'",
+        num_tokens, url_template);
+    g_strfreev (tokens);
+    return NULL;
+  }
+
   for (i = 0; i < num_tokens; i++) {
     token = tokens[i];
     format = default_format;
 
+    /* the tokens to replace must be provided between $ characters, eg $token$
+     * For a string like token0$token1$token2$token3$token4, only the odd number
+     * tokens (1,3,...) must be parsed.
+     *
+     * Skip even tokens
+     */
+    if ((i & 1) == 0)
+      continue;
+
     if (!g_strcmp0 (token, "RepresentationID")) {
+      if (!gst_mpdparser_validate_rfc1738_url (id))
+        goto invalid_representation_id;
+
       tokens[i] = g_strdup_printf ("%s", id);
       g_free (token);
-      last_token_par = TRUE;
     } else if (!strncmp (token, "Number", 6)) {
       if (strlen (token) > 6) {
         format = token + 6;     /* format tag */
@@ -2903,7 +3215,6 @@
 
       tokens[i] = g_strdup_printf (format, number);
       g_free (token);
-      last_token_par = TRUE;
     } else if (!strncmp (token, "Bandwidth", 9)) {
       if (strlen (token) > 9) {
         format = token + 9;     /* format tag */
@@ -2913,7 +3224,6 @@
 
       tokens[i] = g_strdup_printf (format, bandwidth);
       g_free (token);
-      last_token_par = TRUE;
     } else if (!strncmp (token, "Time", 4)) {
       gchar *promoted_format;
 
@@ -2927,17 +3237,16 @@
       tokens[i] = g_strdup_printf (promoted_format, time);
       g_free (promoted_format);
       g_free (token);
-      last_token_par = TRUE;
     } else if (!g_strcmp0 (token, "")) {
-      if (!last_token_par) {
-        tokens[i] = g_strdup_printf ("%s", "$");
-        g_free (token);
-        last_token_par = TRUE;
-      } else {
-        last_token_par = FALSE;
-      }
+      tokens[i] = g_strdup_printf ("%s", "$");
+      g_free (token);
     } else {
-      last_token_par = FALSE;
+      /* unexpected identifier found between $ signs
+       *
+       * "If the URL contains unescaped $ symbols which do not enclose a valid
+       * identifier then the result of URL formation is undefined"
+       */
+      goto invalid_format;
     }
   }
 
@@ -2955,6 +3264,16 @@
 
     return NULL;
   }
+invalid_representation_id:
+  {
+    GST_ERROR
+        ("Representation ID string '%s' has characters invalid in an RFC 1738 URL",
+        id);
+
+    g_strfreev (tokens);
+
+    return NULL;
+  }
 }
 
 guint
@@ -3053,8 +3372,7 @@
     gst_uri_unref (base);
 
     if (ret && query) {
-      if (*query)
-        g_free (*query);
+      g_free (*query);
       *query = gst_uri_get_query_string (ret);
       if (*query) {
         ret = gst_uri_make_writable (ret);
@@ -3120,7 +3438,7 @@
 
 static GstClockTime
 gst_mpd_client_get_segment_duration (GstMpdClient * client,
-    GstActiveStream * stream, gint64 * scale_dur)
+    GstActiveStream * stream, guint64 * scale_dur)
 {
   GstStreamPeriod *stream_period;
   GstMultSegmentBaseType *base = NULL;
@@ -3216,7 +3534,11 @@
 static void
 gst_mpd_client_check_profiles (GstMpdClient * client)
 {
-  GST_DEBUG ("Profiles: %s", client->mpd_node->profiles);
+  GST_DEBUG ("Profiles: %s",
+      client->mpd_node->profiles ? client->mpd_node->profiles : "<none>");
+
+  if (!client->mpd_node->profiles)
+    return;
 
   if (g_strstr_len (client->mpd_node->profiles, -1,
           "urn:mpeg:dash:profile:isoff-on-demand:2011")) {
@@ -3391,6 +3713,8 @@
 gboolean
 gst_mpd_parse (GstMpdClient * client, const gchar * data, gint size)
 {
+  gboolean ret = FALSE;
+
   if (data) {
     xmlDocPtr doc;
     xmlNode *root_element = NULL;
@@ -3409,7 +3733,7 @@
     doc = xmlReadMemory (data, size, "noname.xml", NULL, XML_PARSE_NONET);
     if (doc == NULL) {
       GST_ERROR ("failed to parse the MPD file");
-      return FALSE;
+      ret = FALSE;
     } else {
       /* get the root element node */
       root_element = xmlDocGetRootElement (doc);
@@ -3418,23 +3742,24 @@
           || xmlStrcmp (root_element->name, (xmlChar *) "MPD") != 0) {
         GST_ERROR
             ("can not find the root element MPD, failed to parse the MPD file");
+        ret = FALSE;            /* used to return TRUE before, but this seems wrong */
       } else {
         /* now we can parse the MPD root node and all children nodes, recursively */
-        gst_mpdparser_parse_root_node (&client->mpd_node, root_element);
+        ret = gst_mpdparser_parse_root_node (&client->mpd_node, root_element);
       }
       /* free the document */
       xmlFreeDoc (doc);
     }
 
-    gst_mpd_client_check_profiles (client);
+    if (ret) {
+      gst_mpd_client_check_profiles (client);
 
-    if (!gst_mpd_client_fetch_on_load_external_resources (client))
-      return FALSE;
-
-    return TRUE;
+      if (!gst_mpd_client_fetch_on_load_external_resources (client))
+        return FALSE;
+    }
   }
 
-  return FALSE;
+  return ret;
 }
 
 const gchar *
@@ -3472,89 +3797,9 @@
 }
 
 static gboolean
-gst_mpdparser_find_segment_by_index (GstMpdClient * client,
-    GPtrArray * segments, gint index, GstMediaSegment * result)
-{
-  gint i;
-  for (i = 0; i < segments->len; i++) {
-    GstMediaSegment *s;
-    gint repeat;
-
-    s = g_ptr_array_index (segments, i);
-    if (s->repeat >= 0) {
-      repeat = s->repeat;
-    } else {
-      GstClockTime start = s->start;
-      GstClockTime end =
-          gst_mpdparser_get_segment_end_time (client, segments, s, i);
-      repeat = (guint) (end - start) / s->duration;
-    }
-    if (s->number + repeat >= index) {
-      /* it is in this segment */
-      result->SegmentURL = s->SegmentURL;
-      result->number = index;
-      result->scale_start =
-          s->scale_start + (index - s->number) * s->scale_duration;
-      result->scale_duration = s->scale_duration;
-      result->start = s->start + (index - s->number) * s->duration;
-      result->duration = s->duration;
-      return TRUE;
-    }
-  }
-
-  return FALSE;
-}
-
-gboolean
-gst_mpdparser_get_chunk_by_index (GstMpdClient * client, guint indexStream,
-    guint indexChunk, GstMediaSegment * segment)
-{
-  GstActiveStream *stream;
-
-  /* select stream */
-  g_return_val_if_fail (client != NULL, FALSE);
-  g_return_val_if_fail (client->active_streams != NULL, FALSE);
-  stream = g_list_nth_data (client->active_streams, indexStream);
-  g_return_val_if_fail (stream != NULL, FALSE);
-
-  indexChunk += 1;
-
-  if (stream->segments) {
-    return gst_mpdparser_find_segment_by_index (client, stream->segments,
-        indexChunk, segment);
-  } else {
-    GstClockTime duration;
-    GstStreamPeriod *stream_period;
-    gint64 scale_dur;
-
-    g_return_val_if_fail (stream->cur_seg_template->MultSegBaseType->
-        SegmentTimeline == NULL, FALSE);
-    /* segment template generator */
-    duration = gst_mpd_client_get_segment_duration (client, stream, &scale_dur);
-    if (!GST_CLOCK_TIME_IS_VALID (duration))
-      return FALSE;
-
-    stream_period = gst_mpdparser_get_stream_period (client);
-
-    segment->number = indexChunk
-        + stream->cur_seg_template->MultSegBaseType->startNumber;
-    segment->scale_start = indexChunk * scale_dur;
-    segment->scale_duration = scale_dur;
-    segment->start = duration * indexChunk;
-    segment->duration = duration;
-    segment->SegmentURL = NULL;
-
-    if (segment->start >= stream_period->duration) {
-      return FALSE;
-    }
-  }
-  return TRUE;
-}
-
-static gboolean
 gst_mpd_client_add_media_segment (GstActiveStream * stream,
     GstSegmentURLNode * url_node, guint number, gint repeat,
-    gint64 scale_start, gint64 scale_duration,
+    guint64 scale_start, guint64 scale_duration,
     GstClockTime start, GstClockTime duration)
 {
   GstMediaSegment *media_segment;
@@ -3580,6 +3825,34 @@
   return TRUE;
 }
 
+static void
+gst_mpd_client_stream_update_presentation_time_offset (GstMpdClient * client,
+    GstActiveStream * stream)
+{
+  GstSegmentBaseType *segbase = NULL;
+
+  /* Find the used segbase */
+  if (stream->cur_segment_list) {
+    segbase = stream->cur_segment_list->MultSegBaseType->SegBaseType;
+  } else if (stream->cur_seg_template) {
+    segbase = stream->cur_seg_template->MultSegBaseType->SegBaseType;
+  } else if (stream->cur_segment_base) {
+    segbase = stream->cur_segment_base;
+  }
+
+  if (segbase) {
+    /* Avoid overflows */
+    stream->presentationTimeOffset =
+        gst_util_uint64_scale (segbase->presentationTimeOffset, GST_SECOND,
+        segbase->timescale);
+  } else {
+    stream->presentationTimeOffset = 0;
+  }
+
+  GST_LOG ("Setting stream's presentation time offset to %" GST_TIME_FORMAT,
+      GST_TIME_ARGS (stream->presentationTimeOffset));
+}
+
 gboolean
 gst_mpd_client_setup_representation (GstMpdClient * client,
     GstActiveStream * stream, GstRepresentationNode * representation)
@@ -3681,6 +3954,12 @@
             start_time = gst_util_uint64_scale (S->t, GST_SECOND, timescale);
           }
 
+          if (!SegmentURL) {
+            GST_WARNING
+                ("SegmentTimeline does not have a matching SegmentURL, aborting...");
+            return FALSE;
+          }
+
           if (!gst_mpd_client_add_media_segment (stream, SegmentURL->data, i,
                   S->r, start, S->d, start_time, duration)) {
             return FALSE;
@@ -3691,7 +3970,7 @@
           SegmentURL = g_list_next (SegmentURL);
         }
       } else {
-        gint64 scale_dur;
+        guint64 scale_dur;
 
         duration =
             gst_mpd_client_get_segment_duration (client, stream, &scale_dur);
@@ -3739,13 +4018,6 @@
       GST_LOG ("Building media segment list using this template: %s",
           stream->cur_seg_template->media);
 
-      /* Avoid overflows */
-      stream->presentationTimeOffset =
-          gst_util_uint64_scale (mult_seg->SegBaseType->presentationTimeOffset,
-          GST_SECOND, mult_seg->SegBaseType->timescale);
-      GST_LOG ("Setting stream's presentation time offset to %" GST_TIME_FORMAT,
-          GST_TIME_ARGS (stream->presentationTimeOffset));
-
       if (mult_seg->SegmentTimeline) {
         GstSegmentTimelineNode *timeline;
         GstSNode *S;
@@ -3801,6 +4073,8 @@
   stream->baseURL =
       gst_mpdparser_parse_baseURL (client, stream, &stream->queryURL);
 
+  gst_mpd_client_stream_update_presentation_time_offset (client, stream);
+
   return TRUE;
 }
 
@@ -3943,6 +4217,13 @@
   idx = 0;
   start = 0;
   duration = GST_CLOCK_TIME_NONE;
+
+  if (client->mpd_node->mediaPresentationDuration <= 0 &&
+      client->mpd_node->mediaPresentationDuration != -1) {
+    /* Invalid MPD file: MPD duration is negative or zero */
+    goto syntax_error;
+  }
+
   for (list = client->mpd_node->Periods; list; /* explicitly advanced below */ ) {
     GstPeriodNode *period_node = list->data;
     GstPeriodNode *next_period_node = NULL;
@@ -4064,6 +4345,10 @@
         }
         duration = next_period_node->start * GST_MSECOND - start;
       } else if (period_node->duration != -1) {
+        if (period_node->duration <= 0) {
+          /* Invalid MPD file: duration would be negative or zero */
+          goto syntax_error;
+        }
         duration = period_node->duration * GST_MSECOND;
       } else if (client->mpd_node->type == GST_MPD_FILE_TYPE_DYNAMIC) {
         /* might be a live file, ignore unspecified duration */
@@ -4367,7 +4652,8 @@
 
 gboolean
 gst_mpd_client_stream_seek (GstMpdClient * client, GstActiveStream * stream,
-    GstClockTime ts)
+    gboolean forward, GstSeekFlags flags, GstClockTime ts,
+    GstClockTime * final_ts)
 {
   gint index = 0;
   gint repeat_index = 0;
@@ -4384,18 +4670,48 @@
           stream->segments->len);
       in_segment = FALSE;
       if (segment->start <= ts) {
+        GstClockTime end_time;
+
         if (segment->repeat >= 0) {
-          in_segment =
-              ts < segment->start + (segment->repeat + 1) * segment->duration;
+          end_time = segment->start + (segment->repeat + 1) * segment->duration;
         } else {
-          GstClockTime end =
+          end_time =
               gst_mpdparser_get_segment_end_time (client, stream->segments,
               segment, index);
-          in_segment = ts < end;
         }
+
+        /* avoid downloading another fragment just for 1ns in reverse mode */
+        if (forward)
+          in_segment = ts < end_time;
+        else
+          in_segment = ts <= end_time;
+
         if (in_segment) {
           selectedChunk = segment;
           repeat_index = (ts - segment->start) / segment->duration;
+
+          /* At the end of a segment in reverse mode, start from the previous fragment */
+          if (!forward && repeat_index > 0
+              && ((ts - segment->start) % segment->duration == 0))
+            repeat_index--;
+
+          if ((flags & GST_SEEK_FLAG_SNAP_NEAREST) ==
+              GST_SEEK_FLAG_SNAP_NEAREST) {
+            /* FIXME implement this */
+          } else if ((forward && flags & GST_SEEK_FLAG_SNAP_AFTER) ||
+              (!forward && flags & GST_SEEK_FLAG_SNAP_BEFORE)) {
+
+            if (repeat_index + 1 < segment->repeat) {
+              repeat_index++;
+            } else {
+              repeat_index = 0;
+              if (index + 1 >= stream->segments->len) {
+                selectedChunk = NULL;
+              } else {
+                selectedChunk = g_ptr_array_index (stream->segments, ++index);
+              }
+            }
+          }
           break;
         }
       }
@@ -4407,6 +4723,9 @@
       GST_DEBUG ("Seek to after last segment");
       return FALSE;
     }
+
+    if (final_ts)
+      *final_ts = selectedChunk->start + selectedChunk->duration * repeat_index;
   } else {
     GstClockTime duration =
         gst_mpd_client_get_segment_duration (client, stream, NULL);
@@ -4425,12 +4744,22 @@
       ts = 0;
 
     index = ts / duration;
+
+    if ((flags & GST_SEEK_FLAG_SNAP_NEAREST) == GST_SEEK_FLAG_SNAP_NEAREST) {
+      /* FIXME implement this */
+    } else if ((forward && flags & GST_SEEK_FLAG_SNAP_AFTER) ||
+        (!forward && flags & GST_SEEK_FLAG_SNAP_BEFORE)) {
+      index++;
+    }
+
     if (segments_count > 0 && index >= segments_count) {
       stream->segment_index = segments_count;
       stream->segment_repeat_index = 0;
       GST_DEBUG ("Seek to after last segment");
       return FALSE;
     }
+    if (final_ts)
+      *final_ts = index * duration;
   }
 
   stream->segment_repeat_index = repeat_index;
@@ -4504,20 +4833,25 @@
   stream = g_list_nth_data (client->active_streams, stream_idx);
   g_return_val_if_fail (stream != NULL, 0);
 
-  segment_idx = gst_mpd_client_get_segments_counts (client, stream) - 1;
-  currentChunk = g_ptr_array_index (stream->segments, segment_idx);
-
-  if (currentChunk->repeat >= 0) {
-    *ts =
-        currentChunk->start + (currentChunk->duration * (1 +
-            currentChunk->repeat));
-  } else {
-    /* 5.3.9.6.1: negative repeat means repeat till the end of the
-     * period, or the next update of the MPD (which I think is
-     * implicit, as this will all get deleted/recreated), or the
-     * start of the next segment, if any. */
+  if (!stream->segments) {
     stream_period = gst_mpdparser_get_stream_period (client);
     *ts = stream_period->start + stream_period->duration;
+  } else {
+    segment_idx = gst_mpd_client_get_segments_counts (client, stream) - 1;
+    currentChunk = g_ptr_array_index (stream->segments, segment_idx);
+
+    if (currentChunk->repeat >= 0) {
+      *ts =
+          currentChunk->start + (currentChunk->duration * (1 +
+              currentChunk->repeat));
+    } else {
+      /* 5.3.9.6.1: negative repeat means repeat till the end of the
+       * period, or the next update of the MPD (which I think is
+       * implicit, as this will all get deleted/recreated), or the
+       * start of the next segment, if any. */
+      stream_period = gst_mpdparser_get_stream_period (client);
+      *ts = stream_period->start + stream_period->duration;
+    }
   }
 
   return TRUE;
@@ -4961,22 +5295,12 @@
       *range_start = 0;
       *range_end = stream->cur_segment_base->indexRange->first_byte_pos - 1;
     }
-  } else if (stream->cur_seg_template) {
-    const gchar *initialization = NULL;
-    if (stream->cur_seg_template->initialization) {
-      initialization = stream->cur_seg_template->initialization;
-    } else if (stream->cur_adapt_set->SegmentTemplate
-        && stream->cur_adapt_set->SegmentTemplate->initialization) {
-      initialization = stream->cur_adapt_set->SegmentTemplate->initialization;
-    } else if (stream_period->period->SegmentTemplate
-        && stream_period->period->SegmentTemplate->initialization) {
-      initialization = stream_period->period->SegmentTemplate->initialization;
-    }
-    if (initialization) {
-      *uri = gst_mpdparser_build_URL_from_template (initialization,
-          stream->cur_representation->id, 0,
-          stream->cur_representation->bandwidth, 0);
-    }
+  } else if (stream->cur_seg_template
+      && stream->cur_seg_template->initialization) {
+    *uri =
+        gst_mpdparser_build_URL_from_template (stream->
+        cur_seg_template->initialization, stream->cur_representation->id, 0,
+        stream->cur_representation->bandwidth, 0);
   }
 
   return *uri == NULL ? FALSE : TRUE;
@@ -5004,24 +5328,14 @@
   if (stream->cur_segment_base && stream->cur_segment_base->indexRange) {
     *uri =
         g_strdup (gst_mpdparser_get_initializationURL (stream,
-            stream->cur_segment_base->Initialization));
+            stream->cur_segment_base->RepresentationIndex));
     *range_start = stream->cur_segment_base->indexRange->first_byte_pos;
     *range_end = stream->cur_segment_base->indexRange->last_byte_pos;
-  } else if (stream->cur_seg_template) {
-    const gchar *initialization = NULL;
-    if (stream->cur_seg_template->index) {
-      initialization = stream->cur_seg_template->index;
-    } else if (stream->cur_adapt_set->SegmentTemplate
-        && stream->cur_adapt_set->SegmentTemplate->index) {
-      initialization = stream->cur_adapt_set->SegmentTemplate->index;
-    } else if (stream_period->period->SegmentTemplate
-        && stream_period->period->SegmentTemplate->index) {
-      initialization = stream_period->period->SegmentTemplate->index;
-    }
-    if (initialization)
-      *uri = gst_mpdparser_build_URL_from_template (initialization,
-          stream->cur_representation->id, 0,
-          stream->cur_representation->bandwidth, 0);
+  } else if (stream->cur_seg_template && stream->cur_seg_template->index) {
+    *uri =
+        gst_mpdparser_build_URL_from_template (stream->cur_seg_template->index,
+        stream->cur_representation->id, 0,
+        stream->cur_representation->bandwidth, 0);
   }
 
   return *uri == NULL ? FALSE : TRUE;
@@ -5264,6 +5578,27 @@
   return g_list_nth_data (client->active_streams, stream_idx);
 }
 
+gboolean
+gst_mpd_client_active_stream_contains_subtitles (GstActiveStream * stream)
+{
+  const gchar *mimeType;
+  const gchar *adapt_set_codecs;
+  const gchar *rep_codecs;
+
+  mimeType = stream->cur_representation->RepresentationBase->mimeType;
+  if (!mimeType)
+    mimeType = stream->cur_adapt_set->RepresentationBase->mimeType;
+
+  if (g_strcmp0 (mimeType, "application/ttml+xml") == 0)
+    return TRUE;
+
+  adapt_set_codecs = stream->cur_adapt_set->RepresentationBase->codecs;
+  rep_codecs = stream->cur_representation->RepresentationBase->codecs;
+
+  return (adapt_set_codecs && g_str_has_prefix (adapt_set_codecs, "stpp"))
+      || (rep_codecs && g_str_has_prefix (rep_codecs, "stpp"));
+}
+
 static const gchar *
 gst_mpdparser_mimetype_to_caps (const gchar * mimeType)
 {
@@ -5279,10 +5614,11 @@
     return mimeType;
 }
 
-const gchar *
-gst_mpd_client_get_stream_mimeType (GstActiveStream * stream)
+GstCaps *
+gst_mpd_client_get_stream_caps (GstActiveStream * stream)
 {
-  const gchar *mimeType;
+  const gchar *mimeType, *caps_string;
+  GstCaps *ret = NULL;
 
   if (stream == NULL || stream->cur_adapt_set == NULL
       || stream->cur_representation == NULL)
@@ -5293,7 +5629,16 @@
     mimeType = stream->cur_adapt_set->RepresentationBase->mimeType;
   }
 
-  return gst_mpdparser_mimetype_to_caps (mimeType);
+  caps_string = gst_mpdparser_mimetype_to_caps (mimeType);
+
+  if ((g_strcmp0 (caps_string, "application/mp4") == 0)
+      && gst_mpd_client_active_stream_contains_subtitles (stream))
+    caps_string = "video/quicktime";
+
+  if (caps_string)
+    ret = gst_caps_from_string (caps_string);
+
+  return ret;
 }
 
 gboolean
@@ -5339,6 +5684,46 @@
   return height;
 }
 
+gboolean
+gst_mpd_client_get_video_stream_framerate (GstActiveStream * stream,
+    gint * fps_num, gint * fps_den)
+{
+  if (stream == NULL)
+    return FALSE;
+
+  if (stream->cur_adapt_set &&
+      stream->cur_adapt_set->RepresentationBase->frameRate != NULL) {
+    *fps_num = stream->cur_adapt_set->RepresentationBase->frameRate->num;
+    *fps_den = stream->cur_adapt_set->RepresentationBase->frameRate->den;
+    return TRUE;
+  }
+
+  if (stream->cur_adapt_set &&
+      stream->cur_adapt_set->RepresentationBase->maxFrameRate != NULL) {
+    *fps_num = stream->cur_adapt_set->RepresentationBase->maxFrameRate->num;
+    *fps_den = stream->cur_adapt_set->RepresentationBase->maxFrameRate->den;
+    return TRUE;
+  }
+
+  if (stream->cur_representation &&
+      stream->cur_representation->RepresentationBase->frameRate != NULL) {
+    *fps_num = stream->cur_representation->RepresentationBase->frameRate->num;
+    *fps_den = stream->cur_representation->RepresentationBase->frameRate->den;
+    return TRUE;
+  }
+
+  if (stream->cur_representation &&
+      stream->cur_representation->RepresentationBase->maxFrameRate != NULL) {
+    *fps_num =
+        stream->cur_representation->RepresentationBase->maxFrameRate->num;
+    *fps_den =
+        stream->cur_representation->RepresentationBase->maxFrameRate->den;
+    return TRUE;
+  }
+
+  return FALSE;
+}
+
 guint
 gst_mpd_client_get_audio_stream_rate (GstActiveStream * stream)
 {
@@ -5409,14 +5794,14 @@
 
 
 GstDateTime *
-gst_mpd_client_get_next_segment_availability_end_time (GstMpdClient * client,
+gst_mpd_client_get_next_segment_availability_start_time (GstMpdClient * client,
     GstActiveStream * stream)
 {
   GstDateTime *availability_start_time, *rv;
   gint seg_idx;
-  GstClockTime seg_duration;
-  gint64 offset;
   GstStreamPeriod *stream_period;
+  GstMediaSegment *segment;
+  GstClockTime segmentEndTime;
 
   g_return_val_if_fail (client != NULL, NULL);
   g_return_val_if_fail (stream != NULL, NULL);
@@ -5424,17 +5809,40 @@
   stream_period = gst_mpdparser_get_stream_period (client);
 
   seg_idx = stream->segment_index;
-  seg_duration = gst_mpd_client_get_segment_duration (client, stream, NULL);
-  if (seg_duration == 0)
-    return NULL;
+
+  if (stream->segments) {
+    segment = g_ptr_array_index (stream->segments, seg_idx);
+
+    if (segment->repeat >= 0) {
+      segmentEndTime = segment->start + (stream->segment_repeat_index + 1) *
+          segment->duration;
+    } else if (seg_idx < stream->segments->len - 1) {
+      const GstMediaSegment *next_segment =
+          g_ptr_array_index (stream->segments, seg_idx + 1);
+      segmentEndTime = next_segment->start;
+    } else {
+      const GstStreamPeriod *stream_period;
+      stream_period = gst_mpdparser_get_stream_period (client);
+      segmentEndTime = stream_period->start + stream_period->duration;
+    }
+  } else {
+    GstClockTime seg_duration;
+    seg_duration = gst_mpd_client_get_segment_duration (client, stream, NULL);
+    if (seg_duration == 0)
+      return NULL;
+    segmentEndTime = (1 + seg_idx) * seg_duration;
+  }
+
   availability_start_time = gst_mpd_client_get_availability_start_time (client);
-  if (availability_start_time == NULL)
-    return (GstDateTime *) NULL;
+  if (availability_start_time == NULL) {
+    GST_WARNING_OBJECT (client, "Failed to get availability_start_time");
+    return NULL;
+  }
 
   if (stream_period && stream_period->period) {
     GstDateTime *t =
         gst_mpd_client_add_time_difference (availability_start_time,
-        stream_period->start / 1000);
+        stream_period->start / GST_USECOND);
     gst_date_time_unref (availability_start_time);
     availability_start_time = t;
 
@@ -5444,87 +5852,31 @@
     }
   }
 
-  offset = (1 + seg_idx) * seg_duration;
   rv = gst_mpd_client_add_time_difference (availability_start_time,
-      offset / GST_USECOND);
+      segmentEndTime / GST_USECOND);
   gst_date_time_unref (availability_start_time);
+  if (rv == NULL) {
+    GST_WARNING_OBJECT (client, "Failed to offset availability_start_time");
+    return NULL;
+  }
+
   return rv;
 }
 
-gint
-gst_mpd_client_check_time_position (GstMpdClient * client,
-    GstActiveStream * stream, GstClockTime ts, gint64 * diff)
-{
-  GDateTime *now = g_date_time_new_now_utc ();
-  GDateTime *start =
-      gst_date_time_to_g_date_time (client->mpd_node->availabilityStartTime);
-  GTimeSpan stream_now;
-  GTimeSpan ts_microseconds;
-  GstClockTime duration;
-
-  g_return_val_if_fail (gst_mpd_client_is_live (client), 0);
-
-  duration = gst_mpd_client_get_segment_duration (client, stream, NULL);
-  stream_now = g_date_time_difference (now, start);
-  g_date_time_unref (now);
-  g_date_time_unref (start);
-
-  /* sum duration to check if the segment is fully ready */
-  ts_microseconds = (ts + duration) / GST_USECOND;
-
-  /*
-   * This functions checks if a given ts is in the 'available range' of
-   * a DASH presentation. This only makes sense for live streams, which
-   * are continuously adding new segments and removing old ones.
-   *
-   * Note: Both the client and the server should use UTC as a time reference.
-   *
-   * @ts is the time since the beginning of the stream and we need to find out
-   * if it is currently available. The server should be hosting segments
-   *
-   * * ---------------- ... --- * ----------- * ---- ...
-   * |
-   * | past(unavailable) |      | available   | future(unavailable yet)
-   * |
-   * * ---------------- ... --- * ----------- * ---- ...
-   * |                          |             |
-   * availabilitStartTime       |             UTC now
-   *                            UTC now - timeShiftBufferDepth
-   *
-   * This function should return 0 if @ts is in the 'available' area, 1 for
-   * 'future' and '-1' for past and the corresponding distance to the
-   * 'available' area is set to @diff
-   *
-   * TODO untested with live presentations with multiple periods as no
-   * examples for it could be found/generated
-   */
-
-  if (ts_microseconds > stream_now) {
-    *diff = ts_microseconds - stream_now;
-    return 1;
-  }
-  if (client->mpd_node->timeShiftBufferDepth != -1
-      && ts_microseconds <
-      stream_now - client->mpd_node->timeShiftBufferDepth) {
-    *diff = ts_microseconds - stream_now;
-    return -1;
-  }
-
-  *diff = 0;
-  return 0;
-}
-
 gboolean
 gst_mpd_client_seek_to_time (GstMpdClient * client, GDateTime * time)
 {
-  GDateTime *start =
-      gst_date_time_to_g_date_time (client->mpd_node->availabilityStartTime);
+  GDateTime *start;
   GTimeSpan ts_microseconds;
   GstClockTime ts;
   gboolean ret = TRUE;
   GList *stream;
 
-  g_return_val_if_fail (gst_mpd_client_is_live (client), 0);
+  g_return_val_if_fail (gst_mpd_client_is_live (client), FALSE);
+  g_return_val_if_fail (client->mpd_node->availabilityStartTime != NULL, FALSE);
+
+  start =
+      gst_date_time_to_g_date_time (client->mpd_node->availabilityStartTime);
 
   ts_microseconds = g_date_time_difference (time, start);
   g_date_time_unref (start);
@@ -5535,7 +5887,9 @@
 
   ts = ts_microseconds * GST_USECOND;
   for (stream = client->active_streams; stream; stream = g_list_next (stream)) {
-    ret = ret & gst_mpd_client_stream_seek (client, stream->data, ts);
+    ret =
+        ret & gst_mpd_client_stream_seek (client, stream->data, TRUE, 0, ts,
+        NULL);
   }
   return ret;
 }
@@ -5552,3 +5906,43 @@
 {
   return client->profile_isoff_ondemand;
 }
+
+/**
+ * gst_mpd_client_parse_default_presentation_delay:
+ * @client: #GstMpdClient that has a parsed manifest
+ * @default_presentation_delay: A string that specifies a time period
+ * in fragments (e.g. "5 f"), seconds ("12 s") or milliseconds
+ * ("12000 ms")
+ * Returns: the parsed string in milliseconds
+ *
+ * Since: 1.6
+ */
+gint64
+gst_mpd_client_parse_default_presentation_delay (GstMpdClient * client,
+    const gchar * default_presentation_delay)
+{
+  gint64 value;
+  char *endptr = NULL;
+
+  g_return_val_if_fail (client != NULL, 0);
+  g_return_val_if_fail (default_presentation_delay != NULL, 0);
+  value = strtol (default_presentation_delay, &endptr, 10);
+  if (endptr == default_presentation_delay || value == 0) {
+    return 0;
+  }
+  while (*endptr == ' ')
+    endptr++;
+  if (*endptr == 's' || *endptr == 'S') {
+    value *= 1000;              /* convert to ms */
+  } else if (*endptr == 'f' || *endptr == 'F') {
+    gint64 segment_duration;
+    g_assert (client->mpd_node != NULL);
+    segment_duration = client->mpd_node->maxSegmentDuration;
+    value *= segment_duration;
+  } else if (*endptr != 'm' && *endptr != 'M') {
+    GST_ERROR ("Unable to parse default presentation delay: %s",
+        default_presentation_delay);
+    value = 0;
+  }
+  return value;
+}
diff --git a/ext/dash/gstmpdparser.h b/ext/dash/gstmpdparser.h
index 36569b5..1b303aa 100644
--- a/ext/dash/gstmpdparser.h
+++ b/ext/dash/gstmpdparser.h
@@ -67,6 +67,8 @@
 #define GST_MPD_CLIENT_LOCK(c) g_mutex_lock (&c->lock);
 #define GST_MPD_CLIENT_UNLOCK(c) g_mutex_unlock (&c->lock);
 
+#define GST_MPD_DURATION_NONE ((guint64)-1)
+
 typedef enum
 {
   GST_STREAM_UNKNOWN,
@@ -219,6 +221,8 @@
   guint width;
   guint height;
   GstRatio *sar;
+  GstFrameRate *minFrameRate;
+  GstFrameRate *maxFrameRate;
   GstFrameRate *frameRate;
   gchar *audioSamplingRate;
   gchar *mimeType;
@@ -304,8 +308,6 @@
   guint maxWidth;
   guint minHeight;
   guint maxHeight;
-  GstFrameRate *minFrameRate;
-  GstFrameRate *maxFrameRate;
   GstConditionalUintType *segmentAlignment;
   GstConditionalUintType *subsegmentAlignment;
   GstSAPType subsegmentStartsWithSAP;
@@ -346,8 +348,8 @@
 struct _GstPeriodNode
 {
   gchar *id;
-  gint64 start;                      /* [ms] */
-  gint64 duration;                   /* [ms] */
+  guint64 start;                     /* [ms] */
+  guint64 duration;                  /* [ms] */
   gboolean bitstreamSwitching;
   /* SegmentBase node */
   GstSegmentBaseType *SegmentBase;
@@ -378,8 +380,8 @@
 
 struct _GstMetricsRangeNode
 {
-  gint64 starttime;                  /* [ms] */
-  gint64 duration;                   /* [ms] */
+  guint64 starttime;                 /* [ms] */
+  guint64 duration;                  /* [ms] */
 };
 
 struct _GstMetricsNode
@@ -408,13 +410,13 @@
   GstMPDFileType type;
   GstDateTime *availabilityStartTime;
   GstDateTime *availabilityEndTime;
-  gint64 mediaPresentationDuration;  /* [ms] */
-  gint64 minimumUpdatePeriod;        /* [ms] */
-  gint64 minBufferTime;              /* [ms] */
-  gint64 timeShiftBufferDepth;       /* [ms] */
-  gint64 suggestedPresentationDelay; /* [ms] */
-  gint64 maxSegmentDuration;         /* [ms] */
-  gint64 maxSubsegmentDuration;      /* [ms] */
+  guint64 mediaPresentationDuration;  /* [ms] */
+  guint64 minimumUpdatePeriod;        /* [ms] */
+  guint64 minBufferTime;              /* [ms] */
+  guint64 timeShiftBufferDepth;       /* [ms] */
+  guint64 suggestedPresentationDelay; /* [ms] */
+  guint64 maxSegmentDuration;         /* [ms] */
+  guint64 maxSubsegmentDuration;      /* [ms] */
   /* list of BaseURL nodes */
   GList *BaseURLs;
   /* list of Location nodes */
@@ -452,8 +454,8 @@
   GstSegmentURLNode *SegmentURL;              /* this is NULL when using a SegmentTemplate */
   guint number;                               /* segment number */
   gint repeat;                                /* number of extra repetitions (0 = played only once) */
-  gint64 scale_start;                         /* start time in timescale units */
-  gint64 scale_duration;                      /* duration in timescale units */
+  guint64 scale_start;                        /* start time in timescale units */
+  guint64 scale_duration;                     /* duration in timescale units */
   GstClockTime start;                         /* segment start time */
   GstClockTime duration;                      /* segment duration */
 };
@@ -542,9 +544,8 @@
 gboolean gst_mpd_client_get_next_header (GstMpdClient *client, gchar **uri, guint stream_idx, gint64 * range_start, gint64 * range_end);
 gboolean gst_mpd_client_get_next_header_index (GstMpdClient *client, gchar **uri, guint stream_idx, gint64 * range_start, gint64 * range_end);
 gboolean gst_mpd_client_is_live (GstMpdClient * client);
-gboolean gst_mpd_client_stream_seek (GstMpdClient * client, GstActiveStream * stream, GstClockTime ts);
+gboolean gst_mpd_client_stream_seek (GstMpdClient * client, GstActiveStream * stream, gboolean forward, GstSeekFlags flags, GstClockTime ts, GstClockTime * final_ts);
 gboolean gst_mpd_client_seek_to_time (GstMpdClient * client, GDateTime * time);
-gint gst_mpd_client_check_time_position (GstMpdClient * client, GstActiveStream * stream, GstClockTime ts, gint64 * diff);
 GstClockTime gst_mpd_parser_get_stream_presentation_offset (GstMpdClient *client, guint stream_idx);
 gchar** gst_mpd_client_get_utc_timing_sources (GstMpdClient *client, guint methods, GstMPDUTCTimingType *selected_method);
 GstClockTime gst_mpd_parser_get_period_start_time (GstMpdClient *client);
@@ -564,11 +565,11 @@
 
 /* URL management */
 const gchar *gst_mpdparser_get_baseURL (GstMpdClient *client, guint indexStream);
-gboolean gst_mpdparser_get_chunk_by_index (GstMpdClient *client, guint indexStream, guint indexChunk, GstMediaSegment * segment);
 
 /* Active stream */
 guint gst_mpdparser_get_nb_active_stream (GstMpdClient *client);
 GstActiveStream *gst_mpdparser_get_active_stream_by_index (GstMpdClient *client, guint stream_idx);
+gboolean gst_mpd_client_active_stream_contains_subtitles (GstActiveStream * stream);
 
 /* AdaptationSet */
 guint gst_mpdparser_get_nb_adaptationSet (GstMpdClient *client);
@@ -578,13 +579,14 @@
 gboolean gst_mpd_client_has_next_segment (GstMpdClient * client, GstActiveStream * stream, gboolean forward);
 GstFlowReturn gst_mpd_client_advance_segment (GstMpdClient * client, GstActiveStream * stream, gboolean forward);
 void gst_mpd_client_seek_to_first_segment (GstMpdClient * client);
-GstDateTime *gst_mpd_client_get_next_segment_availability_end_time (GstMpdClient * client, GstActiveStream * stream);
+GstDateTime *gst_mpd_client_get_next_segment_availability_start_time (GstMpdClient * client, GstActiveStream * stream);
 
-/* Get audio/video stream parameters (mimeType, width, height, rate, number of channels) */
-const gchar *gst_mpd_client_get_stream_mimeType (GstActiveStream * stream);
+/* Get audio/video stream parameters (caps, width, height, rate, number of channels) */
+GstCaps * gst_mpd_client_get_stream_caps (GstActiveStream * stream);
 gboolean gst_mpd_client_get_bitstream_switching_flag (GstActiveStream * stream);
 guint gst_mpd_client_get_video_stream_width (GstActiveStream * stream);
 guint gst_mpd_client_get_video_stream_height (GstActiveStream * stream);
+gboolean gst_mpd_client_get_video_stream_framerate (GstActiveStream * stream, gint * fps_num, gint * fps_den);
 guint gst_mpd_client_get_audio_stream_rate (GstActiveStream * stream);
 guint gst_mpd_client_get_audio_stream_num_channels (GstActiveStream * stream);
 
@@ -593,6 +595,7 @@
 
 gint64 gst_mpd_client_calculate_time_difference (const GstDateTime * t1, const GstDateTime * t2);
 GstDateTime *gst_mpd_client_add_time_difference (GstDateTime * t1, gint64 usecs);
+gint64 gst_mpd_client_parse_default_presentation_delay(GstMpdClient * client, const gchar * default_presentation_delay);
 
 /* profiles */
 gboolean gst_mpd_client_has_isoff_ondemand_profile (GstMpdClient *client);
diff --git a/ext/dc1394/Makefile.in b/ext/dc1394/Makefile.in
index 2ff9f98..7a2173b 100644
--- a/ext/dc1394/Makefile.in
+++ b/ext/dc1394/Makefile.in
@@ -116,16 +116,15 @@
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
 	$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
-	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gsettings.m4 \
-	$(top_srcdir)/m4/gst-fionread.m4 $(top_srcdir)/m4/gst-sdl.m4 \
-	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
-	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
-	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libgcrypt.m4 \
-	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
-	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
-	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
-	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
-	$(top_srcdir)/configure.ac
+	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gst-fionread.m4 \
+	$(top_srcdir)/m4/gst-sdl.m4 $(top_srcdir)/m4/iconv.m4 \
+	$(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \
+	$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
+	$(top_srcdir)/m4/libgcrypt.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
+	$(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \
@@ -274,6 +273,8 @@
 CLUTTER_X11_LIBS = @CLUTTER_X11_LIBS@
 CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
+CUDA_CFLAGS = @CUDA_CFLAGS@
+CUDA_LIBS = @CUDA_LIBS@
 CURL_CFLAGS = @CURL_CFLAGS@
 CURL_LIBS = @CURL_LIBS@
 CXX = @CXX@
@@ -311,6 +312,8 @@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
+EGL_CFLAGS = @EGL_CFLAGS@
+EGL_LIBS = @EGL_LIBS@
 EGREP = @EGREP@
 ERROR_CFLAGS = @ERROR_CFLAGS@
 ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
@@ -319,7 +322,6 @@
 EXIF_CFLAGS = @EXIF_CFLAGS@
 EXIF_LIBS = @EXIF_LIBS@
 FAAC_LIBS = @FAAC_LIBS@
-FAAD_IS_NEAAC = @FAAD_IS_NEAAC@
 FAAD_LIBS = @FAAD_LIBS@
 FFLAGS = @FFLAGS@
 FGREP = @FGREP@
@@ -338,8 +340,9 @@
 GIO_LIBS = @GIO_LIBS@
 GIO_UNIX_CFLAGS = @GIO_UNIX_CFLAGS@
 GIO_UNIX_LIBS = @GIO_UNIX_LIBS@
+GLES2_CFLAGS = @GLES2_CFLAGS@
+GLES2_LIBS = @GLES2_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
-GLIB_COMPILE_SCHEMAS = @GLIB_COMPILE_SCHEMAS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
@@ -356,16 +359,17 @@
 GMODULE_NO_EXPORT_LIBS = @GMODULE_NO_EXPORT_LIBS@
 GMSGFMT = @GMSGFMT@
 GMSGFMT_015 = @GMSGFMT_015@
+GNUSTL_CFLAGS = @GNUSTL_CFLAGS@
+GNUSTL_LIBS = @GNUSTL_LIBS@
 GRAPHENE_CFLAGS = @GRAPHENE_CFLAGS@
 GRAPHENE_LIBS = @GRAPHENE_LIBS@
 GREP = @GREP@
-GSETTINGS_CFLAGS = @GSETTINGS_CFLAGS@
-GSETTINGS_DISABLE_SCHEMAS_COMPILE = @GSETTINGS_DISABLE_SCHEMAS_COMPILE@
-GSETTINGS_LIBS = @GSETTINGS_LIBS@
 GSM_LIBS = @GSM_LIBS@
 GSTPB_PLUGINS_DIR = @GSTPB_PLUGINS_DIR@
 GSTPB_PREFIX = @GSTPB_PREFIX@
 GST_AGE = @GST_AGE@
+GST_ALLOCATORS_CFLAGS = @GST_ALLOCATORS_CFLAGS@
+GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
 GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
 GST_API_VERSION = @GST_API_VERSION@
 GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
@@ -391,6 +395,8 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PBUTILS_CFLAGS = @GST_PBUTILS_CFLAGS@
+GST_PBUTILS_LIBS = @GST_PBUTILS_LIBS@
 GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BAD_CFLAGS = @GST_PLUGINS_BAD_CFLAGS@
@@ -416,6 +422,8 @@
 GST_PREFIX = @GST_PREFIX@
 GST_REVISION = @GST_REVISION@
 GST_TOOLS_DIR = @GST_TOOLS_DIR@
+GST_VIDEO_CFLAGS = @GST_VIDEO_CFLAGS@
+GST_VIDEO_LIBS = @GST_VIDEO_LIBS@
 GTK3_CFLAGS = @GTK3_CFLAGS@
 GTK3_GL_CFLAGS = @GTK3_GL_CFLAGS@
 GTK3_GL_LIBS = @GTK3_GL_LIBS@
@@ -517,6 +525,7 @@
 LTLIBICONV = @LTLIBICONV@
 LTLIBINTL = @LTLIBINTL@
 LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
 MANIFEST_TOOL = @MANIFEST_TOOL@
@@ -530,8 +539,6 @@
 MODPLUG_LIBS = @MODPLUG_LIBS@
 MPEG2ENC_CFLAGS = @MPEG2ENC_CFLAGS@
 MPEG2ENC_LIBS = @MPEG2ENC_LIBS@
-MPG123_CFLAGS = @MPG123_CFLAGS@
-MPG123_LIBS = @MPG123_LIBS@
 MPLEX_CFLAGS = @MPLEX_CFLAGS@
 MPLEX_LDFLAGS = @MPLEX_LDFLAGS@
 MPLEX_LIBS = @MPLEX_LIBS@
@@ -547,6 +554,8 @@
 NETTLE_LIBS = @NETTLE_LIBS@
 NM = @NM@
 NMEDIT = @NMEDIT@
+NVENCODE_CFLAGS = @NVENCODE_CFLAGS@
+NVENCODE_LIBS = @NVENCODE_LIBS@
 OBJC = @OBJC@
 OBJCDEPMODE = @OBJCDEPMODE@
 OBJCFLAGS = @OBJCFLAGS@
@@ -604,16 +613,18 @@
 PYTHON_PLATFORM = @PYTHON_PLATFORM@
 PYTHON_PREFIX = @PYTHON_PREFIX@
 PYTHON_VERSION = @PYTHON_VERSION@
+QT_ANDROID_CFLAGS = @QT_ANDROID_CFLAGS@
+QT_ANDROID_LIBS = @QT_ANDROID_LIBS@
 QT_CFLAGS = @QT_CFLAGS@
 QT_LIBS = @QT_LIBS@
+QT_MAC_CFLAGS = @QT_MAC_CFLAGS@
+QT_MAC_LIBS = @QT_MAC_LIBS@
 QT_WAYLAND_CFLAGS = @QT_WAYLAND_CFLAGS@
 QT_WAYLAND_LIBS = @QT_WAYLAND_LIBS@
 QT_X11_CFLAGS = @QT_X11_CFLAGS@
 QT_X11_LIBS = @QT_X11_LIBS@
 RANLIB = @RANLIB@
 RCC = @RCC@
-RSVG_2_36_2_CFLAGS = @RSVG_2_36_2_CFLAGS@
-RSVG_2_36_2_LIBS = @RSVG_2_36_2_LIBS@
 RSVG_CFLAGS = @RSVG_CFLAGS@
 RSVG_LIBS = @RSVG_LIBS@
 RTMP_CFLAGS = @RTMP_CFLAGS@
@@ -665,6 +676,7 @@
 VOAACENC_LIBS = @VOAACENC_LIBS@
 VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
 VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VULKAN_LIBS = @VULKAN_LIBS@
 WARNING_CFLAGS = @WARNING_CFLAGS@
 WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
 WARNING_OBJCFLAGS = @WARNING_OBJCFLAGS@
@@ -675,6 +687,7 @@
 WAYLAND_LIBS = @WAYLAND_LIBS@
 WEBP_CFLAGS = @WEBP_CFLAGS@
 WEBP_LIBS = @WEBP_LIBS@
+WGET = @WGET@
 WILDMIDI_CFLAGS = @WILDMIDI_CFLAGS@
 WILDMIDI_LIBS = @WILDMIDI_LIBS@
 WINKS_LIBS = @WINKS_LIBS@
@@ -684,6 +697,8 @@
 X11_LIBS = @X11_LIBS@
 X265_CFLAGS = @X265_CFLAGS@
 X265_LIBS = @X265_LIBS@
+XCB_CFLAGS = @XCB_CFLAGS@
+XCB_LIBS = @XCB_LIBS@
 XCOMPOSITE_CFLAGS = @XCOMPOSITE_CFLAGS@
 XCOMPOSITE_LIBS = @XCOMPOSITE_LIBS@
 XGETTEXT = @XGETTEXT@
@@ -721,7 +736,6 @@
 docdir = @docdir@
 dvidir = @dvidir@
 exec_prefix = @exec_prefix@
-gsettingsschemadir = @gsettingsschemadir@
 host = @host@
 host_alias = @host_alias@
 host_cpu = @host_cpu@
diff --git a/ext/directfb/Makefile.in b/ext/directfb/Makefile.in
index 0462348..7aa2e3b 100644
--- a/ext/directfb/Makefile.in
+++ b/ext/directfb/Makefile.in
@@ -118,16 +118,15 @@
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
 	$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
-	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gsettings.m4 \
-	$(top_srcdir)/m4/gst-fionread.m4 $(top_srcdir)/m4/gst-sdl.m4 \
-	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
-	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
-	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libgcrypt.m4 \
-	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
-	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
-	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
-	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
-	$(top_srcdir)/configure.ac
+	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gst-fionread.m4 \
+	$(top_srcdir)/m4/gst-sdl.m4 $(top_srcdir)/m4/iconv.m4 \
+	$(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \
+	$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
+	$(top_srcdir)/m4/libgcrypt.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
+	$(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \
@@ -284,6 +283,8 @@
 CLUTTER_X11_LIBS = @CLUTTER_X11_LIBS@
 CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
+CUDA_CFLAGS = @CUDA_CFLAGS@
+CUDA_LIBS = @CUDA_LIBS@
 CURL_CFLAGS = @CURL_CFLAGS@
 CURL_LIBS = @CURL_LIBS@
 CXX = @CXX@
@@ -321,6 +322,8 @@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
+EGL_CFLAGS = @EGL_CFLAGS@
+EGL_LIBS = @EGL_LIBS@
 EGREP = @EGREP@
 ERROR_CFLAGS = @ERROR_CFLAGS@
 ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
@@ -329,7 +332,6 @@
 EXIF_CFLAGS = @EXIF_CFLAGS@
 EXIF_LIBS = @EXIF_LIBS@
 FAAC_LIBS = @FAAC_LIBS@
-FAAD_IS_NEAAC = @FAAD_IS_NEAAC@
 FAAD_LIBS = @FAAD_LIBS@
 FFLAGS = @FFLAGS@
 FGREP = @FGREP@
@@ -348,8 +350,9 @@
 GIO_LIBS = @GIO_LIBS@
 GIO_UNIX_CFLAGS = @GIO_UNIX_CFLAGS@
 GIO_UNIX_LIBS = @GIO_UNIX_LIBS@
+GLES2_CFLAGS = @GLES2_CFLAGS@
+GLES2_LIBS = @GLES2_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
-GLIB_COMPILE_SCHEMAS = @GLIB_COMPILE_SCHEMAS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
@@ -366,16 +369,17 @@
 GMODULE_NO_EXPORT_LIBS = @GMODULE_NO_EXPORT_LIBS@
 GMSGFMT = @GMSGFMT@
 GMSGFMT_015 = @GMSGFMT_015@
+GNUSTL_CFLAGS = @GNUSTL_CFLAGS@
+GNUSTL_LIBS = @GNUSTL_LIBS@
 GRAPHENE_CFLAGS = @GRAPHENE_CFLAGS@
 GRAPHENE_LIBS = @GRAPHENE_LIBS@
 GREP = @GREP@
-GSETTINGS_CFLAGS = @GSETTINGS_CFLAGS@
-GSETTINGS_DISABLE_SCHEMAS_COMPILE = @GSETTINGS_DISABLE_SCHEMAS_COMPILE@
-GSETTINGS_LIBS = @GSETTINGS_LIBS@
 GSM_LIBS = @GSM_LIBS@
 GSTPB_PLUGINS_DIR = @GSTPB_PLUGINS_DIR@
 GSTPB_PREFIX = @GSTPB_PREFIX@
 GST_AGE = @GST_AGE@
+GST_ALLOCATORS_CFLAGS = @GST_ALLOCATORS_CFLAGS@
+GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
 GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
 GST_API_VERSION = @GST_API_VERSION@
 GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
@@ -401,6 +405,8 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PBUTILS_CFLAGS = @GST_PBUTILS_CFLAGS@
+GST_PBUTILS_LIBS = @GST_PBUTILS_LIBS@
 GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BAD_CFLAGS = @GST_PLUGINS_BAD_CFLAGS@
@@ -426,6 +432,8 @@
 GST_PREFIX = @GST_PREFIX@
 GST_REVISION = @GST_REVISION@
 GST_TOOLS_DIR = @GST_TOOLS_DIR@
+GST_VIDEO_CFLAGS = @GST_VIDEO_CFLAGS@
+GST_VIDEO_LIBS = @GST_VIDEO_LIBS@
 GTK3_CFLAGS = @GTK3_CFLAGS@
 GTK3_GL_CFLAGS = @GTK3_GL_CFLAGS@
 GTK3_GL_LIBS = @GTK3_GL_LIBS@
@@ -527,6 +535,7 @@
 LTLIBICONV = @LTLIBICONV@
 LTLIBINTL = @LTLIBINTL@
 LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
 MANIFEST_TOOL = @MANIFEST_TOOL@
@@ -540,8 +549,6 @@
 MODPLUG_LIBS = @MODPLUG_LIBS@
 MPEG2ENC_CFLAGS = @MPEG2ENC_CFLAGS@
 MPEG2ENC_LIBS = @MPEG2ENC_LIBS@
-MPG123_CFLAGS = @MPG123_CFLAGS@
-MPG123_LIBS = @MPG123_LIBS@
 MPLEX_CFLAGS = @MPLEX_CFLAGS@
 MPLEX_LDFLAGS = @MPLEX_LDFLAGS@
 MPLEX_LIBS = @MPLEX_LIBS@
@@ -557,6 +564,8 @@
 NETTLE_LIBS = @NETTLE_LIBS@
 NM = @NM@
 NMEDIT = @NMEDIT@
+NVENCODE_CFLAGS = @NVENCODE_CFLAGS@
+NVENCODE_LIBS = @NVENCODE_LIBS@
 OBJC = @OBJC@
 OBJCDEPMODE = @OBJCDEPMODE@
 OBJCFLAGS = @OBJCFLAGS@
@@ -614,16 +623,18 @@
 PYTHON_PLATFORM = @PYTHON_PLATFORM@
 PYTHON_PREFIX = @PYTHON_PREFIX@
 PYTHON_VERSION = @PYTHON_VERSION@
+QT_ANDROID_CFLAGS = @QT_ANDROID_CFLAGS@
+QT_ANDROID_LIBS = @QT_ANDROID_LIBS@
 QT_CFLAGS = @QT_CFLAGS@
 QT_LIBS = @QT_LIBS@
+QT_MAC_CFLAGS = @QT_MAC_CFLAGS@
+QT_MAC_LIBS = @QT_MAC_LIBS@
 QT_WAYLAND_CFLAGS = @QT_WAYLAND_CFLAGS@
 QT_WAYLAND_LIBS = @QT_WAYLAND_LIBS@
 QT_X11_CFLAGS = @QT_X11_CFLAGS@
 QT_X11_LIBS = @QT_X11_LIBS@
 RANLIB = @RANLIB@
 RCC = @RCC@
-RSVG_2_36_2_CFLAGS = @RSVG_2_36_2_CFLAGS@
-RSVG_2_36_2_LIBS = @RSVG_2_36_2_LIBS@
 RSVG_CFLAGS = @RSVG_CFLAGS@
 RSVG_LIBS = @RSVG_LIBS@
 RTMP_CFLAGS = @RTMP_CFLAGS@
@@ -675,6 +686,7 @@
 VOAACENC_LIBS = @VOAACENC_LIBS@
 VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
 VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VULKAN_LIBS = @VULKAN_LIBS@
 WARNING_CFLAGS = @WARNING_CFLAGS@
 WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
 WARNING_OBJCFLAGS = @WARNING_OBJCFLAGS@
@@ -685,6 +697,7 @@
 WAYLAND_LIBS = @WAYLAND_LIBS@
 WEBP_CFLAGS = @WEBP_CFLAGS@
 WEBP_LIBS = @WEBP_LIBS@
+WGET = @WGET@
 WILDMIDI_CFLAGS = @WILDMIDI_CFLAGS@
 WILDMIDI_LIBS = @WILDMIDI_LIBS@
 WINKS_LIBS = @WINKS_LIBS@
@@ -694,6 +707,8 @@
 X11_LIBS = @X11_LIBS@
 X265_CFLAGS = @X265_CFLAGS@
 X265_LIBS = @X265_LIBS@
+XCB_CFLAGS = @XCB_CFLAGS@
+XCB_LIBS = @XCB_LIBS@
 XCOMPOSITE_CFLAGS = @XCOMPOSITE_CFLAGS@
 XCOMPOSITE_LIBS = @XCOMPOSITE_LIBS@
 XGETTEXT = @XGETTEXT@
@@ -731,7 +746,6 @@
 docdir = @docdir@
 dvidir = @dvidir@
 exec_prefix = @exec_prefix@
-gsettingsschemadir = @gsettingsschemadir@
 host = @host@
 host_alias = @host_alias@
 host_cpu = @host_cpu@
diff --git a/ext/directfb/dfbvideosink.c b/ext/directfb/dfbvideosink.c
index 22dd3d7..db8ef17 100644
--- a/ext/directfb/dfbvideosink.c
+++ b/ext/directfb/dfbvideosink.c
@@ -29,7 +29,7 @@
  *   <para>
  *   Standalone: this mode will take complete control of the monitor forcing
  *   <ulink url="http://www.directfb.org/">DirectFB</ulink> to fullscreen layout.
- *   This is convenient to test using the  gst-launch command line tool or
+ *   This is convenient to test using the  gst-launch-1.0 command line tool or
  *   other simple applications. It is possible to interrupt playback while
  *   being in this mode by pressing the Escape key.
  *   </para>
@@ -77,7 +77,7 @@
  * <refsect2>
  * <title>Example pipelines</title>
  * |[
- * gst-launch -v videotestsrc ! dfbvideosink hue=20000 saturation=40000 brightness=25000
+ * gst-launch-1.0 -v videotestsrc ! dfbvideosink hue=20000 saturation=40000 brightness=25000
  * ]| test the colorbalance interface implementation in dfbvideosink
  * </refsect2>
  */
diff --git a/ext/dtls/Makefile.in b/ext/dtls/Makefile.in
index f860ac7..24a0ef6 100644
--- a/ext/dtls/Makefile.in
+++ b/ext/dtls/Makefile.in
@@ -116,16 +116,15 @@
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
 	$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
-	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gsettings.m4 \
-	$(top_srcdir)/m4/gst-fionread.m4 $(top_srcdir)/m4/gst-sdl.m4 \
-	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
-	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
-	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libgcrypt.m4 \
-	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
-	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
-	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
-	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
-	$(top_srcdir)/configure.ac
+	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gst-fionread.m4 \
+	$(top_srcdir)/m4/gst-sdl.m4 $(top_srcdir)/m4/iconv.m4 \
+	$(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \
+	$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
+	$(top_srcdir)/m4/libgcrypt.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
+	$(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \
@@ -281,6 +280,8 @@
 CLUTTER_X11_LIBS = @CLUTTER_X11_LIBS@
 CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
+CUDA_CFLAGS = @CUDA_CFLAGS@
+CUDA_LIBS = @CUDA_LIBS@
 CURL_CFLAGS = @CURL_CFLAGS@
 CURL_LIBS = @CURL_LIBS@
 CXX = @CXX@
@@ -318,6 +319,8 @@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
+EGL_CFLAGS = @EGL_CFLAGS@
+EGL_LIBS = @EGL_LIBS@
 EGREP = @EGREP@
 ERROR_CFLAGS = @ERROR_CFLAGS@
 ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
@@ -326,7 +329,6 @@
 EXIF_CFLAGS = @EXIF_CFLAGS@
 EXIF_LIBS = @EXIF_LIBS@
 FAAC_LIBS = @FAAC_LIBS@
-FAAD_IS_NEAAC = @FAAD_IS_NEAAC@
 FAAD_LIBS = @FAAD_LIBS@
 FFLAGS = @FFLAGS@
 FGREP = @FGREP@
@@ -345,8 +347,9 @@
 GIO_LIBS = @GIO_LIBS@
 GIO_UNIX_CFLAGS = @GIO_UNIX_CFLAGS@
 GIO_UNIX_LIBS = @GIO_UNIX_LIBS@
+GLES2_CFLAGS = @GLES2_CFLAGS@
+GLES2_LIBS = @GLES2_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
-GLIB_COMPILE_SCHEMAS = @GLIB_COMPILE_SCHEMAS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
@@ -363,16 +366,17 @@
 GMODULE_NO_EXPORT_LIBS = @GMODULE_NO_EXPORT_LIBS@
 GMSGFMT = @GMSGFMT@
 GMSGFMT_015 = @GMSGFMT_015@
+GNUSTL_CFLAGS = @GNUSTL_CFLAGS@
+GNUSTL_LIBS = @GNUSTL_LIBS@
 GRAPHENE_CFLAGS = @GRAPHENE_CFLAGS@
 GRAPHENE_LIBS = @GRAPHENE_LIBS@
 GREP = @GREP@
-GSETTINGS_CFLAGS = @GSETTINGS_CFLAGS@
-GSETTINGS_DISABLE_SCHEMAS_COMPILE = @GSETTINGS_DISABLE_SCHEMAS_COMPILE@
-GSETTINGS_LIBS = @GSETTINGS_LIBS@
 GSM_LIBS = @GSM_LIBS@
 GSTPB_PLUGINS_DIR = @GSTPB_PLUGINS_DIR@
 GSTPB_PREFIX = @GSTPB_PREFIX@
 GST_AGE = @GST_AGE@
+GST_ALLOCATORS_CFLAGS = @GST_ALLOCATORS_CFLAGS@
+GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
 GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
 GST_API_VERSION = @GST_API_VERSION@
 GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
@@ -398,6 +402,8 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PBUTILS_CFLAGS = @GST_PBUTILS_CFLAGS@
+GST_PBUTILS_LIBS = @GST_PBUTILS_LIBS@
 GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BAD_CFLAGS = @GST_PLUGINS_BAD_CFLAGS@
@@ -423,6 +429,8 @@
 GST_PREFIX = @GST_PREFIX@
 GST_REVISION = @GST_REVISION@
 GST_TOOLS_DIR = @GST_TOOLS_DIR@
+GST_VIDEO_CFLAGS = @GST_VIDEO_CFLAGS@
+GST_VIDEO_LIBS = @GST_VIDEO_LIBS@
 GTK3_CFLAGS = @GTK3_CFLAGS@
 GTK3_GL_CFLAGS = @GTK3_GL_CFLAGS@
 GTK3_GL_LIBS = @GTK3_GL_LIBS@
@@ -524,6 +532,7 @@
 LTLIBICONV = @LTLIBICONV@
 LTLIBINTL = @LTLIBINTL@
 LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
 MANIFEST_TOOL = @MANIFEST_TOOL@
@@ -537,8 +546,6 @@
 MODPLUG_LIBS = @MODPLUG_LIBS@
 MPEG2ENC_CFLAGS = @MPEG2ENC_CFLAGS@
 MPEG2ENC_LIBS = @MPEG2ENC_LIBS@
-MPG123_CFLAGS = @MPG123_CFLAGS@
-MPG123_LIBS = @MPG123_LIBS@
 MPLEX_CFLAGS = @MPLEX_CFLAGS@
 MPLEX_LDFLAGS = @MPLEX_LDFLAGS@
 MPLEX_LIBS = @MPLEX_LIBS@
@@ -554,6 +561,8 @@
 NETTLE_LIBS = @NETTLE_LIBS@
 NM = @NM@
 NMEDIT = @NMEDIT@
+NVENCODE_CFLAGS = @NVENCODE_CFLAGS@
+NVENCODE_LIBS = @NVENCODE_LIBS@
 OBJC = @OBJC@
 OBJCDEPMODE = @OBJCDEPMODE@
 OBJCFLAGS = @OBJCFLAGS@
@@ -611,16 +620,18 @@
 PYTHON_PLATFORM = @PYTHON_PLATFORM@
 PYTHON_PREFIX = @PYTHON_PREFIX@
 PYTHON_VERSION = @PYTHON_VERSION@
+QT_ANDROID_CFLAGS = @QT_ANDROID_CFLAGS@
+QT_ANDROID_LIBS = @QT_ANDROID_LIBS@
 QT_CFLAGS = @QT_CFLAGS@
 QT_LIBS = @QT_LIBS@
+QT_MAC_CFLAGS = @QT_MAC_CFLAGS@
+QT_MAC_LIBS = @QT_MAC_LIBS@
 QT_WAYLAND_CFLAGS = @QT_WAYLAND_CFLAGS@
 QT_WAYLAND_LIBS = @QT_WAYLAND_LIBS@
 QT_X11_CFLAGS = @QT_X11_CFLAGS@
 QT_X11_LIBS = @QT_X11_LIBS@
 RANLIB = @RANLIB@
 RCC = @RCC@
-RSVG_2_36_2_CFLAGS = @RSVG_2_36_2_CFLAGS@
-RSVG_2_36_2_LIBS = @RSVG_2_36_2_LIBS@
 RSVG_CFLAGS = @RSVG_CFLAGS@
 RSVG_LIBS = @RSVG_LIBS@
 RTMP_CFLAGS = @RTMP_CFLAGS@
@@ -672,6 +683,7 @@
 VOAACENC_LIBS = @VOAACENC_LIBS@
 VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
 VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VULKAN_LIBS = @VULKAN_LIBS@
 WARNING_CFLAGS = @WARNING_CFLAGS@
 WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
 WARNING_OBJCFLAGS = @WARNING_OBJCFLAGS@
@@ -682,6 +694,7 @@
 WAYLAND_LIBS = @WAYLAND_LIBS@
 WEBP_CFLAGS = @WEBP_CFLAGS@
 WEBP_LIBS = @WEBP_LIBS@
+WGET = @WGET@
 WILDMIDI_CFLAGS = @WILDMIDI_CFLAGS@
 WILDMIDI_LIBS = @WILDMIDI_LIBS@
 WINKS_LIBS = @WINKS_LIBS@
@@ -691,6 +704,8 @@
 X11_LIBS = @X11_LIBS@
 X265_CFLAGS = @X265_CFLAGS@
 X265_LIBS = @X265_LIBS@
+XCB_CFLAGS = @XCB_CFLAGS@
+XCB_LIBS = @XCB_LIBS@
 XCOMPOSITE_CFLAGS = @XCOMPOSITE_CFLAGS@
 XCOMPOSITE_LIBS = @XCOMPOSITE_LIBS@
 XGETTEXT = @XGETTEXT@
@@ -728,7 +743,6 @@
 docdir = @docdir@
 dvidir = @dvidir@
 exec_prefix = @exec_prefix@
-gsettingsschemadir = @gsettingsschemadir@
 host = @host@
 host_alias = @host_alias@
 host_cpu = @host_cpu@
diff --git a/ext/dtls/gstdtlsdec.c b/ext/dtls/gstdtlsdec.c
index eecc458..f05b4f1 100644
--- a/ext/dtls/gstdtlsdec.c
+++ b/ext/dtls/gstdtlsdec.c
@@ -569,7 +569,8 @@
     return GST_FLOW_OK;
   }
 
-  GST_DEBUG_OBJECT (self, "received buffer from %s with length %" G_GSIZE_FORMAT,
+  GST_DEBUG_OBJECT (self,
+      "received buffer from %s with length %" G_GSIZE_FORMAT,
       self->connection_id, gst_buffer_get_size (buffer));
 
   buffer = gst_buffer_make_writable (buffer);
diff --git a/ext/dts/Makefile.in b/ext/dts/Makefile.in
index 42ad365..68e789c 100644
--- a/ext/dts/Makefile.in
+++ b/ext/dts/Makefile.in
@@ -116,16 +116,15 @@
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
 	$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
-	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gsettings.m4 \
-	$(top_srcdir)/m4/gst-fionread.m4 $(top_srcdir)/m4/gst-sdl.m4 \
-	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
-	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
-	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libgcrypt.m4 \
-	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
-	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
-	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
-	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
-	$(top_srcdir)/configure.ac
+	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gst-fionread.m4 \
+	$(top_srcdir)/m4/gst-sdl.m4 $(top_srcdir)/m4/iconv.m4 \
+	$(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \
+	$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
+	$(top_srcdir)/m4/libgcrypt.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
+	$(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \
@@ -275,6 +274,8 @@
 CLUTTER_X11_LIBS = @CLUTTER_X11_LIBS@
 CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
+CUDA_CFLAGS = @CUDA_CFLAGS@
+CUDA_LIBS = @CUDA_LIBS@
 CURL_CFLAGS = @CURL_CFLAGS@
 CURL_LIBS = @CURL_LIBS@
 CXX = @CXX@
@@ -312,6 +313,8 @@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
+EGL_CFLAGS = @EGL_CFLAGS@
+EGL_LIBS = @EGL_LIBS@
 EGREP = @EGREP@
 ERROR_CFLAGS = @ERROR_CFLAGS@
 ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
@@ -320,7 +323,6 @@
 EXIF_CFLAGS = @EXIF_CFLAGS@
 EXIF_LIBS = @EXIF_LIBS@
 FAAC_LIBS = @FAAC_LIBS@
-FAAD_IS_NEAAC = @FAAD_IS_NEAAC@
 FAAD_LIBS = @FAAD_LIBS@
 FFLAGS = @FFLAGS@
 FGREP = @FGREP@
@@ -339,8 +341,9 @@
 GIO_LIBS = @GIO_LIBS@
 GIO_UNIX_CFLAGS = @GIO_UNIX_CFLAGS@
 GIO_UNIX_LIBS = @GIO_UNIX_LIBS@
+GLES2_CFLAGS = @GLES2_CFLAGS@
+GLES2_LIBS = @GLES2_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
-GLIB_COMPILE_SCHEMAS = @GLIB_COMPILE_SCHEMAS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
@@ -357,16 +360,17 @@
 GMODULE_NO_EXPORT_LIBS = @GMODULE_NO_EXPORT_LIBS@
 GMSGFMT = @GMSGFMT@
 GMSGFMT_015 = @GMSGFMT_015@
+GNUSTL_CFLAGS = @GNUSTL_CFLAGS@
+GNUSTL_LIBS = @GNUSTL_LIBS@
 GRAPHENE_CFLAGS = @GRAPHENE_CFLAGS@
 GRAPHENE_LIBS = @GRAPHENE_LIBS@
 GREP = @GREP@
-GSETTINGS_CFLAGS = @GSETTINGS_CFLAGS@
-GSETTINGS_DISABLE_SCHEMAS_COMPILE = @GSETTINGS_DISABLE_SCHEMAS_COMPILE@
-GSETTINGS_LIBS = @GSETTINGS_LIBS@
 GSM_LIBS = @GSM_LIBS@
 GSTPB_PLUGINS_DIR = @GSTPB_PLUGINS_DIR@
 GSTPB_PREFIX = @GSTPB_PREFIX@
 GST_AGE = @GST_AGE@
+GST_ALLOCATORS_CFLAGS = @GST_ALLOCATORS_CFLAGS@
+GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
 GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
 GST_API_VERSION = @GST_API_VERSION@
 GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
@@ -392,6 +396,8 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PBUTILS_CFLAGS = @GST_PBUTILS_CFLAGS@
+GST_PBUTILS_LIBS = @GST_PBUTILS_LIBS@
 GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BAD_CFLAGS = @GST_PLUGINS_BAD_CFLAGS@
@@ -417,6 +423,8 @@
 GST_PREFIX = @GST_PREFIX@
 GST_REVISION = @GST_REVISION@
 GST_TOOLS_DIR = @GST_TOOLS_DIR@
+GST_VIDEO_CFLAGS = @GST_VIDEO_CFLAGS@
+GST_VIDEO_LIBS = @GST_VIDEO_LIBS@
 GTK3_CFLAGS = @GTK3_CFLAGS@
 GTK3_GL_CFLAGS = @GTK3_GL_CFLAGS@
 GTK3_GL_LIBS = @GTK3_GL_LIBS@
@@ -518,6 +526,7 @@
 LTLIBICONV = @LTLIBICONV@
 LTLIBINTL = @LTLIBINTL@
 LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
 MANIFEST_TOOL = @MANIFEST_TOOL@
@@ -531,8 +540,6 @@
 MODPLUG_LIBS = @MODPLUG_LIBS@
 MPEG2ENC_CFLAGS = @MPEG2ENC_CFLAGS@
 MPEG2ENC_LIBS = @MPEG2ENC_LIBS@
-MPG123_CFLAGS = @MPG123_CFLAGS@
-MPG123_LIBS = @MPG123_LIBS@
 MPLEX_CFLAGS = @MPLEX_CFLAGS@
 MPLEX_LDFLAGS = @MPLEX_LDFLAGS@
 MPLEX_LIBS = @MPLEX_LIBS@
@@ -548,6 +555,8 @@
 NETTLE_LIBS = @NETTLE_LIBS@
 NM = @NM@
 NMEDIT = @NMEDIT@
+NVENCODE_CFLAGS = @NVENCODE_CFLAGS@
+NVENCODE_LIBS = @NVENCODE_LIBS@
 OBJC = @OBJC@
 OBJCDEPMODE = @OBJCDEPMODE@
 OBJCFLAGS = @OBJCFLAGS@
@@ -605,16 +614,18 @@
 PYTHON_PLATFORM = @PYTHON_PLATFORM@
 PYTHON_PREFIX = @PYTHON_PREFIX@
 PYTHON_VERSION = @PYTHON_VERSION@
+QT_ANDROID_CFLAGS = @QT_ANDROID_CFLAGS@
+QT_ANDROID_LIBS = @QT_ANDROID_LIBS@
 QT_CFLAGS = @QT_CFLAGS@
 QT_LIBS = @QT_LIBS@
+QT_MAC_CFLAGS = @QT_MAC_CFLAGS@
+QT_MAC_LIBS = @QT_MAC_LIBS@
 QT_WAYLAND_CFLAGS = @QT_WAYLAND_CFLAGS@
 QT_WAYLAND_LIBS = @QT_WAYLAND_LIBS@
 QT_X11_CFLAGS = @QT_X11_CFLAGS@
 QT_X11_LIBS = @QT_X11_LIBS@
 RANLIB = @RANLIB@
 RCC = @RCC@
-RSVG_2_36_2_CFLAGS = @RSVG_2_36_2_CFLAGS@
-RSVG_2_36_2_LIBS = @RSVG_2_36_2_LIBS@
 RSVG_CFLAGS = @RSVG_CFLAGS@
 RSVG_LIBS = @RSVG_LIBS@
 RTMP_CFLAGS = @RTMP_CFLAGS@
@@ -666,6 +677,7 @@
 VOAACENC_LIBS = @VOAACENC_LIBS@
 VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
 VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VULKAN_LIBS = @VULKAN_LIBS@
 WARNING_CFLAGS = @WARNING_CFLAGS@
 WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
 WARNING_OBJCFLAGS = @WARNING_OBJCFLAGS@
@@ -676,6 +688,7 @@
 WAYLAND_LIBS = @WAYLAND_LIBS@
 WEBP_CFLAGS = @WEBP_CFLAGS@
 WEBP_LIBS = @WEBP_LIBS@
+WGET = @WGET@
 WILDMIDI_CFLAGS = @WILDMIDI_CFLAGS@
 WILDMIDI_LIBS = @WILDMIDI_LIBS@
 WINKS_LIBS = @WINKS_LIBS@
@@ -685,6 +698,8 @@
 X11_LIBS = @X11_LIBS@
 X265_CFLAGS = @X265_CFLAGS@
 X265_LIBS = @X265_LIBS@
+XCB_CFLAGS = @XCB_CFLAGS@
+XCB_LIBS = @XCB_LIBS@
 XCOMPOSITE_CFLAGS = @XCOMPOSITE_CFLAGS@
 XCOMPOSITE_LIBS = @XCOMPOSITE_LIBS@
 XGETTEXT = @XGETTEXT@
@@ -722,7 +737,6 @@
 docdir = @docdir@
 dvidir = @dvidir@
 exec_prefix = @exec_prefix@
-gsettingsschemadir = @gsettingsschemadir@
 host = @host@
 host_alias = @host_alias@
 host_cpu = @host_cpu@
diff --git a/ext/dts/gstdtsdec.c b/ext/dts/gstdtsdec.c
index c1f12c5..767b6bf 100644
--- a/ext/dts/gstdtsdec.c
+++ b/ext/dts/gstdtsdec.c
@@ -26,10 +26,10 @@
  * <refsect2>
  * <title>Example launch line</title>
  * |[
- * gst-launch dvdreadsrc title=1 ! mpegpsdemux ! dtsdec ! audioresample ! audioconvert ! alsasink
+ * gst-launch-1.0 dvdreadsrc title=1 ! mpegpsdemux ! dtsdec ! audioresample ! audioconvert ! alsasink
  * ]| Play a DTS audio track from a dvd.
  * |[
- * gst-launch filesrc location=abc.dts ! dtsdec ! audioresample ! audioconvert ! alsasink
+ * gst-launch-1.0 filesrc location=abc.dts ! dtsdec ! audioresample ! audioconvert ! alsasink
  * ]| Decode a standalone file and play it.
  * </refsect2>
  */
diff --git a/ext/faac/Makefile.in b/ext/faac/Makefile.in
index 748ec62..7e3d70b 100644
--- a/ext/faac/Makefile.in
+++ b/ext/faac/Makefile.in
@@ -116,16 +116,15 @@
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
 	$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
-	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gsettings.m4 \
-	$(top_srcdir)/m4/gst-fionread.m4 $(top_srcdir)/m4/gst-sdl.m4 \
-	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
-	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
-	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libgcrypt.m4 \
-	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
-	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
-	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
-	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
-	$(top_srcdir)/configure.ac
+	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gst-fionread.m4 \
+	$(top_srcdir)/m4/gst-sdl.m4 $(top_srcdir)/m4/iconv.m4 \
+	$(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \
+	$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
+	$(top_srcdir)/m4/libgcrypt.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
+	$(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \
@@ -274,6 +273,8 @@
 CLUTTER_X11_LIBS = @CLUTTER_X11_LIBS@
 CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
+CUDA_CFLAGS = @CUDA_CFLAGS@
+CUDA_LIBS = @CUDA_LIBS@
 CURL_CFLAGS = @CURL_CFLAGS@
 CURL_LIBS = @CURL_LIBS@
 CXX = @CXX@
@@ -311,6 +312,8 @@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
+EGL_CFLAGS = @EGL_CFLAGS@
+EGL_LIBS = @EGL_LIBS@
 EGREP = @EGREP@
 ERROR_CFLAGS = @ERROR_CFLAGS@
 ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
@@ -319,7 +322,6 @@
 EXIF_CFLAGS = @EXIF_CFLAGS@
 EXIF_LIBS = @EXIF_LIBS@
 FAAC_LIBS = @FAAC_LIBS@
-FAAD_IS_NEAAC = @FAAD_IS_NEAAC@
 FAAD_LIBS = @FAAD_LIBS@
 FFLAGS = @FFLAGS@
 FGREP = @FGREP@
@@ -338,8 +340,9 @@
 GIO_LIBS = @GIO_LIBS@
 GIO_UNIX_CFLAGS = @GIO_UNIX_CFLAGS@
 GIO_UNIX_LIBS = @GIO_UNIX_LIBS@
+GLES2_CFLAGS = @GLES2_CFLAGS@
+GLES2_LIBS = @GLES2_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
-GLIB_COMPILE_SCHEMAS = @GLIB_COMPILE_SCHEMAS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
@@ -356,16 +359,17 @@
 GMODULE_NO_EXPORT_LIBS = @GMODULE_NO_EXPORT_LIBS@
 GMSGFMT = @GMSGFMT@
 GMSGFMT_015 = @GMSGFMT_015@
+GNUSTL_CFLAGS = @GNUSTL_CFLAGS@
+GNUSTL_LIBS = @GNUSTL_LIBS@
 GRAPHENE_CFLAGS = @GRAPHENE_CFLAGS@
 GRAPHENE_LIBS = @GRAPHENE_LIBS@
 GREP = @GREP@
-GSETTINGS_CFLAGS = @GSETTINGS_CFLAGS@
-GSETTINGS_DISABLE_SCHEMAS_COMPILE = @GSETTINGS_DISABLE_SCHEMAS_COMPILE@
-GSETTINGS_LIBS = @GSETTINGS_LIBS@
 GSM_LIBS = @GSM_LIBS@
 GSTPB_PLUGINS_DIR = @GSTPB_PLUGINS_DIR@
 GSTPB_PREFIX = @GSTPB_PREFIX@
 GST_AGE = @GST_AGE@
+GST_ALLOCATORS_CFLAGS = @GST_ALLOCATORS_CFLAGS@
+GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
 GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
 GST_API_VERSION = @GST_API_VERSION@
 GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
@@ -391,6 +395,8 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PBUTILS_CFLAGS = @GST_PBUTILS_CFLAGS@
+GST_PBUTILS_LIBS = @GST_PBUTILS_LIBS@
 GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BAD_CFLAGS = @GST_PLUGINS_BAD_CFLAGS@
@@ -416,6 +422,8 @@
 GST_PREFIX = @GST_PREFIX@
 GST_REVISION = @GST_REVISION@
 GST_TOOLS_DIR = @GST_TOOLS_DIR@
+GST_VIDEO_CFLAGS = @GST_VIDEO_CFLAGS@
+GST_VIDEO_LIBS = @GST_VIDEO_LIBS@
 GTK3_CFLAGS = @GTK3_CFLAGS@
 GTK3_GL_CFLAGS = @GTK3_GL_CFLAGS@
 GTK3_GL_LIBS = @GTK3_GL_LIBS@
@@ -517,6 +525,7 @@
 LTLIBICONV = @LTLIBICONV@
 LTLIBINTL = @LTLIBINTL@
 LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
 MANIFEST_TOOL = @MANIFEST_TOOL@
@@ -530,8 +539,6 @@
 MODPLUG_LIBS = @MODPLUG_LIBS@
 MPEG2ENC_CFLAGS = @MPEG2ENC_CFLAGS@
 MPEG2ENC_LIBS = @MPEG2ENC_LIBS@
-MPG123_CFLAGS = @MPG123_CFLAGS@
-MPG123_LIBS = @MPG123_LIBS@
 MPLEX_CFLAGS = @MPLEX_CFLAGS@
 MPLEX_LDFLAGS = @MPLEX_LDFLAGS@
 MPLEX_LIBS = @MPLEX_LIBS@
@@ -547,6 +554,8 @@
 NETTLE_LIBS = @NETTLE_LIBS@
 NM = @NM@
 NMEDIT = @NMEDIT@
+NVENCODE_CFLAGS = @NVENCODE_CFLAGS@
+NVENCODE_LIBS = @NVENCODE_LIBS@
 OBJC = @OBJC@
 OBJCDEPMODE = @OBJCDEPMODE@
 OBJCFLAGS = @OBJCFLAGS@
@@ -604,16 +613,18 @@
 PYTHON_PLATFORM = @PYTHON_PLATFORM@
 PYTHON_PREFIX = @PYTHON_PREFIX@
 PYTHON_VERSION = @PYTHON_VERSION@
+QT_ANDROID_CFLAGS = @QT_ANDROID_CFLAGS@
+QT_ANDROID_LIBS = @QT_ANDROID_LIBS@
 QT_CFLAGS = @QT_CFLAGS@
 QT_LIBS = @QT_LIBS@
+QT_MAC_CFLAGS = @QT_MAC_CFLAGS@
+QT_MAC_LIBS = @QT_MAC_LIBS@
 QT_WAYLAND_CFLAGS = @QT_WAYLAND_CFLAGS@
 QT_WAYLAND_LIBS = @QT_WAYLAND_LIBS@
 QT_X11_CFLAGS = @QT_X11_CFLAGS@
 QT_X11_LIBS = @QT_X11_LIBS@
 RANLIB = @RANLIB@
 RCC = @RCC@
-RSVG_2_36_2_CFLAGS = @RSVG_2_36_2_CFLAGS@
-RSVG_2_36_2_LIBS = @RSVG_2_36_2_LIBS@
 RSVG_CFLAGS = @RSVG_CFLAGS@
 RSVG_LIBS = @RSVG_LIBS@
 RTMP_CFLAGS = @RTMP_CFLAGS@
@@ -665,6 +676,7 @@
 VOAACENC_LIBS = @VOAACENC_LIBS@
 VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
 VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VULKAN_LIBS = @VULKAN_LIBS@
 WARNING_CFLAGS = @WARNING_CFLAGS@
 WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
 WARNING_OBJCFLAGS = @WARNING_OBJCFLAGS@
@@ -675,6 +687,7 @@
 WAYLAND_LIBS = @WAYLAND_LIBS@
 WEBP_CFLAGS = @WEBP_CFLAGS@
 WEBP_LIBS = @WEBP_LIBS@
+WGET = @WGET@
 WILDMIDI_CFLAGS = @WILDMIDI_CFLAGS@
 WILDMIDI_LIBS = @WILDMIDI_LIBS@
 WINKS_LIBS = @WINKS_LIBS@
@@ -684,6 +697,8 @@
 X11_LIBS = @X11_LIBS@
 X265_CFLAGS = @X265_CFLAGS@
 X265_LIBS = @X265_LIBS@
+XCB_CFLAGS = @XCB_CFLAGS@
+XCB_LIBS = @XCB_LIBS@
 XCOMPOSITE_CFLAGS = @XCOMPOSITE_CFLAGS@
 XCOMPOSITE_LIBS = @XCOMPOSITE_LIBS@
 XGETTEXT = @XGETTEXT@
@@ -721,7 +736,6 @@
 docdir = @docdir@
 dvidir = @dvidir@
 exec_prefix = @exec_prefix@
-gsettingsschemadir = @gsettingsschemadir@
 host = @host@
 host_alias = @host_alias@
 host_cpu = @host_cpu@
diff --git a/ext/faac/gstfaac.c b/ext/faac/gstfaac.c
index a4a7c36..6804cbf 100644
--- a/ext/faac/gstfaac.c
+++ b/ext/faac/gstfaac.c
@@ -27,7 +27,7 @@
  * <refsect2>
  * <title>Example launch line</title>
  * |[
- * gst-launch audiotestsrc wave=sine num-buffers=100 ! audioconvert ! faac ! matroskamux ! filesink location=sine.mkv
+ * gst-launch-1.0 audiotestsrc wave=sine num-buffers=100 ! audioconvert ! faac ! matroskamux ! filesink location=sine.mkv
  * ]| Encode a sine beep as aac and write to matroska container.
  * </refsect2>
  */
@@ -189,6 +189,8 @@
   gobject_class->set_property = gst_faac_set_property;
   gobject_class->get_property = gst_faac_get_property;
 
+  GST_DEBUG_CATEGORY_INIT (faac_debug, "faac", 0, "AAC encoding");
+
   gst_element_class_add_pad_template (gstelement_class,
       gst_static_pad_template_get (&src_template));
 
@@ -236,8 +238,6 @@
           "Block type encorcing",
           GST_TYPE_FAAC_SHORTCTL, FAAC_DEFAULT_SHORTCTL,
           G_PARAM_CONSTRUCT | G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
-
-  GST_DEBUG_CATEGORY_INIT (faac_debug, "faac", 0, "AAC encoding");
 }
 
 static void
diff --git a/ext/faad/Makefile.am b/ext/faad/Makefile.am
index 2aef183..56ad30f 100644
--- a/ext/faad/Makefile.am
+++ b/ext/faad/Makefile.am
@@ -1,11 +1,11 @@
 plugin_LTLIBRARIES = libgstfaad.la
 
 libgstfaad_la_SOURCES = gstfaad.c
-libgstfaad_la_CFLAGS = -DGST_USE_UNSTABLE_API \
+libgstfaad_la_CFLAGS = \
 	$(GST_PLUGINS_BASE_CFLAGS) \
 	$(GST_BASE_CFLAGS) $(GST_CFLAGS) $(FAAD_CFLAGS)
 libgstfaad_la_LIBADD = $(GST_PLUGINS_BASE_LIBS) -lgstaudio-@GST_API_VERSION@ \
-	$(GST_BASE_LIBS) $(GST_LIBS) $(FAAD_LIBS)
+	$(GST_BASE_LIBS) $(GST_LIBS) $(FAAD_LIBS) $(LIBM)
 libgstfaad_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS)
 libgstfaad_la_LIBTOOLFLAGS = $(GST_PLUGIN_LIBTOOLFLAGS)
 
diff --git a/ext/faad/Makefile.in b/ext/faad/Makefile.in
index 78b78ee..b49d862 100644
--- a/ext/faad/Makefile.in
+++ b/ext/faad/Makefile.in
@@ -116,16 +116,15 @@
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
 	$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
-	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gsettings.m4 \
-	$(top_srcdir)/m4/gst-fionread.m4 $(top_srcdir)/m4/gst-sdl.m4 \
-	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
-	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
-	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libgcrypt.m4 \
-	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
-	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
-	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
-	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
-	$(top_srcdir)/configure.ac
+	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gst-fionread.m4 \
+	$(top_srcdir)/m4/gst-sdl.m4 $(top_srcdir)/m4/iconv.m4 \
+	$(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \
+	$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
+	$(top_srcdir)/m4/libgcrypt.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
+	$(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \
@@ -166,7 +165,7 @@
 am__DEPENDENCIES_1 =
 libgstfaad_la_DEPENDENCIES = $(am__DEPENDENCIES_1) \
 	$(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
-	$(am__DEPENDENCIES_1)
+	$(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1)
 am_libgstfaad_la_OBJECTS = libgstfaad_la-gstfaad.lo
 libgstfaad_la_OBJECTS = $(am_libgstfaad_la_OBJECTS)
 AM_V_lt = $(am__v_lt_@AM_V@)
@@ -275,6 +274,8 @@
 CLUTTER_X11_LIBS = @CLUTTER_X11_LIBS@
 CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
+CUDA_CFLAGS = @CUDA_CFLAGS@
+CUDA_LIBS = @CUDA_LIBS@
 CURL_CFLAGS = @CURL_CFLAGS@
 CURL_LIBS = @CURL_LIBS@
 CXX = @CXX@
@@ -312,6 +313,8 @@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
+EGL_CFLAGS = @EGL_CFLAGS@
+EGL_LIBS = @EGL_LIBS@
 EGREP = @EGREP@
 ERROR_CFLAGS = @ERROR_CFLAGS@
 ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
@@ -320,7 +323,6 @@
 EXIF_CFLAGS = @EXIF_CFLAGS@
 EXIF_LIBS = @EXIF_LIBS@
 FAAC_LIBS = @FAAC_LIBS@
-FAAD_IS_NEAAC = @FAAD_IS_NEAAC@
 FAAD_LIBS = @FAAD_LIBS@
 FFLAGS = @FFLAGS@
 FGREP = @FGREP@
@@ -339,8 +341,9 @@
 GIO_LIBS = @GIO_LIBS@
 GIO_UNIX_CFLAGS = @GIO_UNIX_CFLAGS@
 GIO_UNIX_LIBS = @GIO_UNIX_LIBS@
+GLES2_CFLAGS = @GLES2_CFLAGS@
+GLES2_LIBS = @GLES2_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
-GLIB_COMPILE_SCHEMAS = @GLIB_COMPILE_SCHEMAS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
@@ -357,16 +360,17 @@
 GMODULE_NO_EXPORT_LIBS = @GMODULE_NO_EXPORT_LIBS@
 GMSGFMT = @GMSGFMT@
 GMSGFMT_015 = @GMSGFMT_015@
+GNUSTL_CFLAGS = @GNUSTL_CFLAGS@
+GNUSTL_LIBS = @GNUSTL_LIBS@
 GRAPHENE_CFLAGS = @GRAPHENE_CFLAGS@
 GRAPHENE_LIBS = @GRAPHENE_LIBS@
 GREP = @GREP@
-GSETTINGS_CFLAGS = @GSETTINGS_CFLAGS@
-GSETTINGS_DISABLE_SCHEMAS_COMPILE = @GSETTINGS_DISABLE_SCHEMAS_COMPILE@
-GSETTINGS_LIBS = @GSETTINGS_LIBS@
 GSM_LIBS = @GSM_LIBS@
 GSTPB_PLUGINS_DIR = @GSTPB_PLUGINS_DIR@
 GSTPB_PREFIX = @GSTPB_PREFIX@
 GST_AGE = @GST_AGE@
+GST_ALLOCATORS_CFLAGS = @GST_ALLOCATORS_CFLAGS@
+GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
 GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
 GST_API_VERSION = @GST_API_VERSION@
 GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
@@ -392,6 +396,8 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PBUTILS_CFLAGS = @GST_PBUTILS_CFLAGS@
+GST_PBUTILS_LIBS = @GST_PBUTILS_LIBS@
 GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BAD_CFLAGS = @GST_PLUGINS_BAD_CFLAGS@
@@ -417,6 +423,8 @@
 GST_PREFIX = @GST_PREFIX@
 GST_REVISION = @GST_REVISION@
 GST_TOOLS_DIR = @GST_TOOLS_DIR@
+GST_VIDEO_CFLAGS = @GST_VIDEO_CFLAGS@
+GST_VIDEO_LIBS = @GST_VIDEO_LIBS@
 GTK3_CFLAGS = @GTK3_CFLAGS@
 GTK3_GL_CFLAGS = @GTK3_GL_CFLAGS@
 GTK3_GL_LIBS = @GTK3_GL_LIBS@
@@ -518,6 +526,7 @@
 LTLIBICONV = @LTLIBICONV@
 LTLIBINTL = @LTLIBINTL@
 LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
 MANIFEST_TOOL = @MANIFEST_TOOL@
@@ -531,8 +540,6 @@
 MODPLUG_LIBS = @MODPLUG_LIBS@
 MPEG2ENC_CFLAGS = @MPEG2ENC_CFLAGS@
 MPEG2ENC_LIBS = @MPEG2ENC_LIBS@
-MPG123_CFLAGS = @MPG123_CFLAGS@
-MPG123_LIBS = @MPG123_LIBS@
 MPLEX_CFLAGS = @MPLEX_CFLAGS@
 MPLEX_LDFLAGS = @MPLEX_LDFLAGS@
 MPLEX_LIBS = @MPLEX_LIBS@
@@ -548,6 +555,8 @@
 NETTLE_LIBS = @NETTLE_LIBS@
 NM = @NM@
 NMEDIT = @NMEDIT@
+NVENCODE_CFLAGS = @NVENCODE_CFLAGS@
+NVENCODE_LIBS = @NVENCODE_LIBS@
 OBJC = @OBJC@
 OBJCDEPMODE = @OBJCDEPMODE@
 OBJCFLAGS = @OBJCFLAGS@
@@ -605,16 +614,18 @@
 PYTHON_PLATFORM = @PYTHON_PLATFORM@
 PYTHON_PREFIX = @PYTHON_PREFIX@
 PYTHON_VERSION = @PYTHON_VERSION@
+QT_ANDROID_CFLAGS = @QT_ANDROID_CFLAGS@
+QT_ANDROID_LIBS = @QT_ANDROID_LIBS@
 QT_CFLAGS = @QT_CFLAGS@
 QT_LIBS = @QT_LIBS@
+QT_MAC_CFLAGS = @QT_MAC_CFLAGS@
+QT_MAC_LIBS = @QT_MAC_LIBS@
 QT_WAYLAND_CFLAGS = @QT_WAYLAND_CFLAGS@
 QT_WAYLAND_LIBS = @QT_WAYLAND_LIBS@
 QT_X11_CFLAGS = @QT_X11_CFLAGS@
 QT_X11_LIBS = @QT_X11_LIBS@
 RANLIB = @RANLIB@
 RCC = @RCC@
-RSVG_2_36_2_CFLAGS = @RSVG_2_36_2_CFLAGS@
-RSVG_2_36_2_LIBS = @RSVG_2_36_2_LIBS@
 RSVG_CFLAGS = @RSVG_CFLAGS@
 RSVG_LIBS = @RSVG_LIBS@
 RTMP_CFLAGS = @RTMP_CFLAGS@
@@ -666,6 +677,7 @@
 VOAACENC_LIBS = @VOAACENC_LIBS@
 VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
 VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VULKAN_LIBS = @VULKAN_LIBS@
 WARNING_CFLAGS = @WARNING_CFLAGS@
 WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
 WARNING_OBJCFLAGS = @WARNING_OBJCFLAGS@
@@ -676,6 +688,7 @@
 WAYLAND_LIBS = @WAYLAND_LIBS@
 WEBP_CFLAGS = @WEBP_CFLAGS@
 WEBP_LIBS = @WEBP_LIBS@
+WGET = @WGET@
 WILDMIDI_CFLAGS = @WILDMIDI_CFLAGS@
 WILDMIDI_LIBS = @WILDMIDI_LIBS@
 WINKS_LIBS = @WINKS_LIBS@
@@ -685,6 +698,8 @@
 X11_LIBS = @X11_LIBS@
 X265_CFLAGS = @X265_CFLAGS@
 X265_LIBS = @X265_LIBS@
+XCB_CFLAGS = @XCB_CFLAGS@
+XCB_LIBS = @XCB_LIBS@
 XCOMPOSITE_CFLAGS = @XCOMPOSITE_CFLAGS@
 XCOMPOSITE_LIBS = @XCOMPOSITE_LIBS@
 XGETTEXT = @XGETTEXT@
@@ -722,7 +737,6 @@
 docdir = @docdir@
 dvidir = @dvidir@
 exec_prefix = @exec_prefix@
-gsettingsschemadir = @gsettingsschemadir@
 host = @host@
 host_alias = @host_alias@
 host_cpu = @host_cpu@
@@ -764,12 +778,12 @@
 wayland_scanner = @wayland_scanner@
 plugin_LTLIBRARIES = libgstfaad.la
 libgstfaad_la_SOURCES = gstfaad.c
-libgstfaad_la_CFLAGS = -DGST_USE_UNSTABLE_API \
+libgstfaad_la_CFLAGS = \
 	$(GST_PLUGINS_BASE_CFLAGS) \
 	$(GST_BASE_CFLAGS) $(GST_CFLAGS) $(FAAD_CFLAGS)
 
 libgstfaad_la_LIBADD = $(GST_PLUGINS_BASE_LIBS) -lgstaudio-@GST_API_VERSION@ \
-	$(GST_BASE_LIBS) $(GST_LIBS) $(FAAD_LIBS)
+	$(GST_BASE_LIBS) $(GST_LIBS) $(FAAD_LIBS) $(LIBM)
 
 libgstfaad_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS)
 libgstfaad_la_LIBTOOLFLAGS = $(GST_PLUGIN_LIBTOOLFLAGS)
diff --git a/ext/faad/gstfaad.c b/ext/faad/gstfaad.c
index 65a3f89..b72b42d 100644
--- a/ext/faad/gstfaad.c
+++ b/ext/faad/gstfaad.c
@@ -27,10 +27,10 @@
  * <refsect2>
  * <title>Example launch lines</title>
  * |[
- * gst-launch filesrc location=example.mp4 ! qtdemux ! faad ! audioconvert ! audioresample ! autoaudiosink
+ * gst-launch-1.0 filesrc location=example.mp4 ! qtdemux ! faad ! audioconvert ! audioresample ! autoaudiosink
  * ]| Play aac from mp4 file.
  * |[
- * gst-launch filesrc location=example.adts ! faad ! audioconvert ! audioresample ! autoaudiosink
+ * gst-launch-1.0 filesrc location=example.adts ! faad ! audioconvert ! audioresample ! autoaudiosink
  * ]| Play standalone aac bitstream.
  * </refsect2>
  */
@@ -42,49 +42,8 @@
 #include <string.h>
 #include <gst/audio/audio.h>
 
-/* These are the correct types for these functions, as defined in the source,
- * with types changed to match glib types, since those are defined for us.
- * However, upstream FAAD is distributed with a broken header file that defined
- * these wrongly (in a way which was broken on 64 bit systems).
- *
- * Upstream CVS still has the bug, but has also renamed all the public symbols
- * for Better Corporate Branding (or whatever), so we need to take that
- * (FAAD_IS_NEAAC) into account as well.
- *
- * We must call them using these definitions. Most distributions now have the
- * corrected header file (they distribute a patch along with the source), 
- * but not all, hence this Truly Evil Hack.
- *
- * Note: The prototypes don't need to be defined conditionaly, as the cpp will
- * do that for us.
- */
-#if FAAD2_MINOR_VERSION < 7
-#ifdef FAAD_IS_NEAAC
-#define NeAACDecInit NeAACDecInit_no_definition
-#define NeAACDecInit2 NeAACDecInit2_no_definition
-#else
-#define faacDecInit faacDecInit_no_definition
-#define faacDecInit2 faacDecInit2_no_definition
-#endif
-#endif /* FAAD2_MINOR_VERSION < 7 */
-
 #include "gstfaad.h"
 
-#if FAAD2_MINOR_VERSION < 7
-#ifdef FAAD_IS_NEAAC
-#undef NeAACDecInit
-#undef NeAACDecInit2
-#else
-#undef faacDecInit
-#undef faacDecInit2
-#endif
-
-extern long faacDecInit (faacDecHandle, guint8 *, guint32, guint32 *, guint8 *);
-extern gint8 faacDecInit2 (faacDecHandle, guint8 *, guint32,
-    guint32 *, guint8 *);
-
-#endif /* FAAD2_MINOR_VERSION < 7 */
-
 GST_DEBUG_CATEGORY_STATIC (faad_debug);
 #define GST_CAT_DEFAULT faad_debug
 
@@ -277,11 +236,7 @@
   faad->packetised = FALSE;
 
   if ((value = gst_structure_get_value (str, "codec_data"))) {
-#if FAAD2_MINOR_VERSION >= 7
     unsigned long samplerate;
-#else
-    guint32 samplerate;
-#endif
     guint8 channels;
 
     /* We have codec data, means packetised stream */
@@ -691,11 +646,7 @@
 init:
   /* init if not already done during capsnego */
   if (!faad->init) {
-#if FAAD2_MINOR_VERSION >= 7
     unsigned long rate;
-#else
-    guint32 rate;
-#endif
     guint8 ch;
 
     GST_DEBUG_OBJECT (faad, "initialising ...");
diff --git a/ext/faad/gstfaad.h b/ext/faad/gstfaad.h
index 1e34797..03bd6ab 100644
--- a/ext/faad/gstfaad.h
+++ b/ext/faad/gstfaad.h
@@ -23,11 +23,7 @@
 #include <gst/gst.h>
 #include <gst/audio/gstaudiodecoder.h>
 
-#ifdef FAAD_IS_NEAAC
 #include <neaacdec.h>
-#else
-#include <faad.h>
-#endif
 
 G_BEGIN_DECLS
 
diff --git a/ext/flite/Makefile.in b/ext/flite/Makefile.in
index 4657d60..4145c8d 100644
--- a/ext/flite/Makefile.in
+++ b/ext/flite/Makefile.in
@@ -115,16 +115,15 @@
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
 	$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
-	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gsettings.m4 \
-	$(top_srcdir)/m4/gst-fionread.m4 $(top_srcdir)/m4/gst-sdl.m4 \
-	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
-	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
-	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libgcrypt.m4 \
-	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
-	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
-	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
-	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
-	$(top_srcdir)/configure.ac
+	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gst-fionread.m4 \
+	$(top_srcdir)/m4/gst-sdl.m4 $(top_srcdir)/m4/iconv.m4 \
+	$(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \
+	$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
+	$(top_srcdir)/m4/libgcrypt.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
+	$(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
@@ -273,6 +272,8 @@
 CLUTTER_X11_LIBS = @CLUTTER_X11_LIBS@
 CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
+CUDA_CFLAGS = @CUDA_CFLAGS@
+CUDA_LIBS = @CUDA_LIBS@
 CURL_CFLAGS = @CURL_CFLAGS@
 CURL_LIBS = @CURL_LIBS@
 CXX = @CXX@
@@ -310,6 +311,8 @@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
+EGL_CFLAGS = @EGL_CFLAGS@
+EGL_LIBS = @EGL_LIBS@
 EGREP = @EGREP@
 ERROR_CFLAGS = @ERROR_CFLAGS@
 ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
@@ -318,7 +321,6 @@
 EXIF_CFLAGS = @EXIF_CFLAGS@
 EXIF_LIBS = @EXIF_LIBS@
 FAAC_LIBS = @FAAC_LIBS@
-FAAD_IS_NEAAC = @FAAD_IS_NEAAC@
 FAAD_LIBS = @FAAD_LIBS@
 FFLAGS = @FFLAGS@
 FGREP = @FGREP@
@@ -337,8 +339,9 @@
 GIO_LIBS = @GIO_LIBS@
 GIO_UNIX_CFLAGS = @GIO_UNIX_CFLAGS@
 GIO_UNIX_LIBS = @GIO_UNIX_LIBS@
+GLES2_CFLAGS = @GLES2_CFLAGS@
+GLES2_LIBS = @GLES2_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
-GLIB_COMPILE_SCHEMAS = @GLIB_COMPILE_SCHEMAS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
@@ -355,16 +358,17 @@
 GMODULE_NO_EXPORT_LIBS = @GMODULE_NO_EXPORT_LIBS@
 GMSGFMT = @GMSGFMT@
 GMSGFMT_015 = @GMSGFMT_015@
+GNUSTL_CFLAGS = @GNUSTL_CFLAGS@
+GNUSTL_LIBS = @GNUSTL_LIBS@
 GRAPHENE_CFLAGS = @GRAPHENE_CFLAGS@
 GRAPHENE_LIBS = @GRAPHENE_LIBS@
 GREP = @GREP@
-GSETTINGS_CFLAGS = @GSETTINGS_CFLAGS@
-GSETTINGS_DISABLE_SCHEMAS_COMPILE = @GSETTINGS_DISABLE_SCHEMAS_COMPILE@
-GSETTINGS_LIBS = @GSETTINGS_LIBS@
 GSM_LIBS = @GSM_LIBS@
 GSTPB_PLUGINS_DIR = @GSTPB_PLUGINS_DIR@
 GSTPB_PREFIX = @GSTPB_PREFIX@
 GST_AGE = @GST_AGE@
+GST_ALLOCATORS_CFLAGS = @GST_ALLOCATORS_CFLAGS@
+GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
 GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
 GST_API_VERSION = @GST_API_VERSION@
 GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
@@ -390,6 +394,8 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PBUTILS_CFLAGS = @GST_PBUTILS_CFLAGS@
+GST_PBUTILS_LIBS = @GST_PBUTILS_LIBS@
 GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BAD_CFLAGS = @GST_PLUGINS_BAD_CFLAGS@
@@ -415,6 +421,8 @@
 GST_PREFIX = @GST_PREFIX@
 GST_REVISION = @GST_REVISION@
 GST_TOOLS_DIR = @GST_TOOLS_DIR@
+GST_VIDEO_CFLAGS = @GST_VIDEO_CFLAGS@
+GST_VIDEO_LIBS = @GST_VIDEO_LIBS@
 GTK3_CFLAGS = @GTK3_CFLAGS@
 GTK3_GL_CFLAGS = @GTK3_GL_CFLAGS@
 GTK3_GL_LIBS = @GTK3_GL_LIBS@
@@ -516,6 +524,7 @@
 LTLIBICONV = @LTLIBICONV@
 LTLIBINTL = @LTLIBINTL@
 LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
 MANIFEST_TOOL = @MANIFEST_TOOL@
@@ -529,8 +538,6 @@
 MODPLUG_LIBS = @MODPLUG_LIBS@
 MPEG2ENC_CFLAGS = @MPEG2ENC_CFLAGS@
 MPEG2ENC_LIBS = @MPEG2ENC_LIBS@
-MPG123_CFLAGS = @MPG123_CFLAGS@
-MPG123_LIBS = @MPG123_LIBS@
 MPLEX_CFLAGS = @MPLEX_CFLAGS@
 MPLEX_LDFLAGS = @MPLEX_LDFLAGS@
 MPLEX_LIBS = @MPLEX_LIBS@
@@ -546,6 +553,8 @@
 NETTLE_LIBS = @NETTLE_LIBS@
 NM = @NM@
 NMEDIT = @NMEDIT@
+NVENCODE_CFLAGS = @NVENCODE_CFLAGS@
+NVENCODE_LIBS = @NVENCODE_LIBS@
 OBJC = @OBJC@
 OBJCDEPMODE = @OBJCDEPMODE@
 OBJCFLAGS = @OBJCFLAGS@
@@ -603,16 +612,18 @@
 PYTHON_PLATFORM = @PYTHON_PLATFORM@
 PYTHON_PREFIX = @PYTHON_PREFIX@
 PYTHON_VERSION = @PYTHON_VERSION@
+QT_ANDROID_CFLAGS = @QT_ANDROID_CFLAGS@
+QT_ANDROID_LIBS = @QT_ANDROID_LIBS@
 QT_CFLAGS = @QT_CFLAGS@
 QT_LIBS = @QT_LIBS@
+QT_MAC_CFLAGS = @QT_MAC_CFLAGS@
+QT_MAC_LIBS = @QT_MAC_LIBS@
 QT_WAYLAND_CFLAGS = @QT_WAYLAND_CFLAGS@
 QT_WAYLAND_LIBS = @QT_WAYLAND_LIBS@
 QT_X11_CFLAGS = @QT_X11_CFLAGS@
 QT_X11_LIBS = @QT_X11_LIBS@
 RANLIB = @RANLIB@
 RCC = @RCC@
-RSVG_2_36_2_CFLAGS = @RSVG_2_36_2_CFLAGS@
-RSVG_2_36_2_LIBS = @RSVG_2_36_2_LIBS@
 RSVG_CFLAGS = @RSVG_CFLAGS@
 RSVG_LIBS = @RSVG_LIBS@
 RTMP_CFLAGS = @RTMP_CFLAGS@
@@ -664,6 +675,7 @@
 VOAACENC_LIBS = @VOAACENC_LIBS@
 VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
 VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VULKAN_LIBS = @VULKAN_LIBS@
 WARNING_CFLAGS = @WARNING_CFLAGS@
 WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
 WARNING_OBJCFLAGS = @WARNING_OBJCFLAGS@
@@ -674,6 +686,7 @@
 WAYLAND_LIBS = @WAYLAND_LIBS@
 WEBP_CFLAGS = @WEBP_CFLAGS@
 WEBP_LIBS = @WEBP_LIBS@
+WGET = @WGET@
 WILDMIDI_CFLAGS = @WILDMIDI_CFLAGS@
 WILDMIDI_LIBS = @WILDMIDI_LIBS@
 WINKS_LIBS = @WINKS_LIBS@
@@ -683,6 +696,8 @@
 X11_LIBS = @X11_LIBS@
 X265_CFLAGS = @X265_CFLAGS@
 X265_LIBS = @X265_LIBS@
+XCB_CFLAGS = @XCB_CFLAGS@
+XCB_LIBS = @XCB_LIBS@
 XCOMPOSITE_CFLAGS = @XCOMPOSITE_CFLAGS@
 XCOMPOSITE_LIBS = @XCOMPOSITE_LIBS@
 XGETTEXT = @XGETTEXT@
@@ -720,7 +735,6 @@
 docdir = @docdir@
 dvidir = @dvidir@
 exec_prefix = @exec_prefix@
-gsettingsschemadir = @gsettingsschemadir@
 host = @host@
 host_alias = @host_alias@
 host_cpu = @host_cpu@
diff --git a/ext/fluidsynth/Makefile.in b/ext/fluidsynth/Makefile.in
index 0f8b4fd..f707070 100644
--- a/ext/fluidsynth/Makefile.in
+++ b/ext/fluidsynth/Makefile.in
@@ -117,16 +117,15 @@
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
 	$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
-	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gsettings.m4 \
-	$(top_srcdir)/m4/gst-fionread.m4 $(top_srcdir)/m4/gst-sdl.m4 \
-	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
-	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
-	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libgcrypt.m4 \
-	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
-	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
-	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
-	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
-	$(top_srcdir)/configure.ac
+	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gst-fionread.m4 \
+	$(top_srcdir)/m4/gst-sdl.m4 $(top_srcdir)/m4/iconv.m4 \
+	$(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \
+	$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
+	$(top_srcdir)/m4/libgcrypt.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
+	$(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \
@@ -282,6 +281,8 @@
 CLUTTER_X11_LIBS = @CLUTTER_X11_LIBS@
 CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
+CUDA_CFLAGS = @CUDA_CFLAGS@
+CUDA_LIBS = @CUDA_LIBS@
 CURL_CFLAGS = @CURL_CFLAGS@
 CURL_LIBS = @CURL_LIBS@
 CXX = @CXX@
@@ -319,6 +320,8 @@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
+EGL_CFLAGS = @EGL_CFLAGS@
+EGL_LIBS = @EGL_LIBS@
 EGREP = @EGREP@
 ERROR_CFLAGS = @ERROR_CFLAGS@
 ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
@@ -327,7 +330,6 @@
 EXIF_CFLAGS = @EXIF_CFLAGS@
 EXIF_LIBS = @EXIF_LIBS@
 FAAC_LIBS = @FAAC_LIBS@
-FAAD_IS_NEAAC = @FAAD_IS_NEAAC@
 FAAD_LIBS = @FAAD_LIBS@
 FFLAGS = @FFLAGS@
 FGREP = @FGREP@
@@ -346,8 +348,9 @@
 GIO_LIBS = @GIO_LIBS@
 GIO_UNIX_CFLAGS = @GIO_UNIX_CFLAGS@
 GIO_UNIX_LIBS = @GIO_UNIX_LIBS@
+GLES2_CFLAGS = @GLES2_CFLAGS@
+GLES2_LIBS = @GLES2_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
-GLIB_COMPILE_SCHEMAS = @GLIB_COMPILE_SCHEMAS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
@@ -364,16 +367,17 @@
 GMODULE_NO_EXPORT_LIBS = @GMODULE_NO_EXPORT_LIBS@
 GMSGFMT = @GMSGFMT@
 GMSGFMT_015 = @GMSGFMT_015@
+GNUSTL_CFLAGS = @GNUSTL_CFLAGS@
+GNUSTL_LIBS = @GNUSTL_LIBS@
 GRAPHENE_CFLAGS = @GRAPHENE_CFLAGS@
 GRAPHENE_LIBS = @GRAPHENE_LIBS@
 GREP = @GREP@
-GSETTINGS_CFLAGS = @GSETTINGS_CFLAGS@
-GSETTINGS_DISABLE_SCHEMAS_COMPILE = @GSETTINGS_DISABLE_SCHEMAS_COMPILE@
-GSETTINGS_LIBS = @GSETTINGS_LIBS@
 GSM_LIBS = @GSM_LIBS@
 GSTPB_PLUGINS_DIR = @GSTPB_PLUGINS_DIR@
 GSTPB_PREFIX = @GSTPB_PREFIX@
 GST_AGE = @GST_AGE@
+GST_ALLOCATORS_CFLAGS = @GST_ALLOCATORS_CFLAGS@
+GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
 GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
 GST_API_VERSION = @GST_API_VERSION@
 GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
@@ -399,6 +403,8 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PBUTILS_CFLAGS = @GST_PBUTILS_CFLAGS@
+GST_PBUTILS_LIBS = @GST_PBUTILS_LIBS@
 GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BAD_CFLAGS = @GST_PLUGINS_BAD_CFLAGS@
@@ -424,6 +430,8 @@
 GST_PREFIX = @GST_PREFIX@
 GST_REVISION = @GST_REVISION@
 GST_TOOLS_DIR = @GST_TOOLS_DIR@
+GST_VIDEO_CFLAGS = @GST_VIDEO_CFLAGS@
+GST_VIDEO_LIBS = @GST_VIDEO_LIBS@
 GTK3_CFLAGS = @GTK3_CFLAGS@
 GTK3_GL_CFLAGS = @GTK3_GL_CFLAGS@
 GTK3_GL_LIBS = @GTK3_GL_LIBS@
@@ -525,6 +533,7 @@
 LTLIBICONV = @LTLIBICONV@
 LTLIBINTL = @LTLIBINTL@
 LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
 MANIFEST_TOOL = @MANIFEST_TOOL@
@@ -538,8 +547,6 @@
 MODPLUG_LIBS = @MODPLUG_LIBS@
 MPEG2ENC_CFLAGS = @MPEG2ENC_CFLAGS@
 MPEG2ENC_LIBS = @MPEG2ENC_LIBS@
-MPG123_CFLAGS = @MPG123_CFLAGS@
-MPG123_LIBS = @MPG123_LIBS@
 MPLEX_CFLAGS = @MPLEX_CFLAGS@
 MPLEX_LDFLAGS = @MPLEX_LDFLAGS@
 MPLEX_LIBS = @MPLEX_LIBS@
@@ -555,6 +562,8 @@
 NETTLE_LIBS = @NETTLE_LIBS@
 NM = @NM@
 NMEDIT = @NMEDIT@
+NVENCODE_CFLAGS = @NVENCODE_CFLAGS@
+NVENCODE_LIBS = @NVENCODE_LIBS@
 OBJC = @OBJC@
 OBJCDEPMODE = @OBJCDEPMODE@
 OBJCFLAGS = @OBJCFLAGS@
@@ -612,16 +621,18 @@
 PYTHON_PLATFORM = @PYTHON_PLATFORM@
 PYTHON_PREFIX = @PYTHON_PREFIX@
 PYTHON_VERSION = @PYTHON_VERSION@
+QT_ANDROID_CFLAGS = @QT_ANDROID_CFLAGS@
+QT_ANDROID_LIBS = @QT_ANDROID_LIBS@
 QT_CFLAGS = @QT_CFLAGS@
 QT_LIBS = @QT_LIBS@
+QT_MAC_CFLAGS = @QT_MAC_CFLAGS@
+QT_MAC_LIBS = @QT_MAC_LIBS@
 QT_WAYLAND_CFLAGS = @QT_WAYLAND_CFLAGS@
 QT_WAYLAND_LIBS = @QT_WAYLAND_LIBS@
 QT_X11_CFLAGS = @QT_X11_CFLAGS@
 QT_X11_LIBS = @QT_X11_LIBS@
 RANLIB = @RANLIB@
 RCC = @RCC@
-RSVG_2_36_2_CFLAGS = @RSVG_2_36_2_CFLAGS@
-RSVG_2_36_2_LIBS = @RSVG_2_36_2_LIBS@
 RSVG_CFLAGS = @RSVG_CFLAGS@
 RSVG_LIBS = @RSVG_LIBS@
 RTMP_CFLAGS = @RTMP_CFLAGS@
@@ -673,6 +684,7 @@
 VOAACENC_LIBS = @VOAACENC_LIBS@
 VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
 VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VULKAN_LIBS = @VULKAN_LIBS@
 WARNING_CFLAGS = @WARNING_CFLAGS@
 WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
 WARNING_OBJCFLAGS = @WARNING_OBJCFLAGS@
@@ -683,6 +695,7 @@
 WAYLAND_LIBS = @WAYLAND_LIBS@
 WEBP_CFLAGS = @WEBP_CFLAGS@
 WEBP_LIBS = @WEBP_LIBS@
+WGET = @WGET@
 WILDMIDI_CFLAGS = @WILDMIDI_CFLAGS@
 WILDMIDI_LIBS = @WILDMIDI_LIBS@
 WINKS_LIBS = @WINKS_LIBS@
@@ -692,6 +705,8 @@
 X11_LIBS = @X11_LIBS@
 X265_CFLAGS = @X265_CFLAGS@
 X265_LIBS = @X265_LIBS@
+XCB_CFLAGS = @XCB_CFLAGS@
+XCB_LIBS = @XCB_LIBS@
 XCOMPOSITE_CFLAGS = @XCOMPOSITE_CFLAGS@
 XCOMPOSITE_LIBS = @XCOMPOSITE_LIBS@
 XGETTEXT = @XGETTEXT@
@@ -729,7 +744,6 @@
 docdir = @docdir@
 dvidir = @dvidir@
 exec_prefix = @exec_prefix@
-gsettingsschemadir = @gsettingsschemadir@
 host = @host@
 host_alias = @host_alias@
 host_cpu = @host_cpu@
diff --git a/ext/gl/Makefile.am b/ext/gl/Makefile.am
index 1a634ef..5d55f54 100644
--- a/ext/gl/Makefile.am
+++ b/ext/gl/Makefile.am
@@ -13,6 +13,7 @@
 	gstglimagesink.c \
 	gstglfiltercube.c \
 	gstgleffects.c \
+	effects/gstgleffectscurves.c \
 	effects/gstgleffectssources.c \
 	effects/gstgleffectidentity.c \
 	effects/gstgleffectmirror.c \
@@ -32,10 +33,14 @@
 	effects/gstgleffectsobel.c \
 	effects/gstgleffectlaplacian.c \
 	gstglcolorscale.c \
+	gstglcolorbalance.c \
 	gstglmixer.c \
 	gstglvideomixer.c \
 	gstglfiltershader.c \
-	gstglfilterapp.c
+	gstglfilterapp.c \
+	gstglviewconvert.c \
+	gstglstereosplit.c \
+	gstglstereomix.c
 
 noinst_HEADERS = \
 	gstglbasemixer.h \
@@ -51,19 +56,20 @@
 	gstgleffects.h \
 	effects/gstgleffectssources.h \
 	gstglcolorscale.h \
+	gstglcolorbalance.h \
 	gstglmixer.h \
 	gstglvideomixer.h \
 	gstglfiltershader.h \
-	gstglfilterapp.h
+	gstglfilterapp.h \
+	gstglstereosplit.h \
+	gstglstereomix.h \
+	gstglviewconvert.h
 
 # full opengl required
 if USE_OPENGL
 libgstopengl_la_SOURCES += \
 	gstglfilterglass.c \
 	gstgldeinterlace.c \
-	gstglviewconvert.c \
-	gstglstereosplit.c \
-	gstglstereomix.c \
 	gltestsrc.c \
 	gstgltestsrc.c \
 	gstglmosaic.c
@@ -71,9 +77,6 @@
 noinst_HEADERS += \
 	gstglfilterglass.h \
 	gstgldeinterlace.h \
-	gstglstereosplit.h \
-	gstglstereomix.h \
-	gstglviewconvert.h \
 	gltestsrc.h \
 	gstgltestsrc.h \
 	gstglmosaic.h \
@@ -92,7 +95,11 @@
 if HAVE_GRAPHENE
 libgstopengl_la_SOURCES += \
 	gstgltransformation.c \
-	gstgltransformation.h
+	gstglvideoflip.c
+
+noinst_HEADERS += \
+	gstgltransformation.h \
+	gstglvideoflip.h
 endif
 
 if HAVE_JPEG
diff --git a/ext/gl/Makefile.in b/ext/gl/Makefile.in
index bf0c30c..9c35e8f 100644
--- a/ext/gl/Makefile.in
+++ b/ext/gl/Makefile.in
@@ -95,9 +95,6 @@
 @USE_OPENGL_TRUE@am__append_1 = \
 @USE_OPENGL_TRUE@	gstglfilterglass.c \
 @USE_OPENGL_TRUE@	gstgldeinterlace.c \
-@USE_OPENGL_TRUE@	gstglviewconvert.c \
-@USE_OPENGL_TRUE@	gstglstereosplit.c \
-@USE_OPENGL_TRUE@	gstglstereomix.c \
 @USE_OPENGL_TRUE@	gltestsrc.c \
 @USE_OPENGL_TRUE@	gstgltestsrc.c \
 @USE_OPENGL_TRUE@	gstglmosaic.c
@@ -105,9 +102,6 @@
 @USE_OPENGL_TRUE@am__append_2 = \
 @USE_OPENGL_TRUE@	gstglfilterglass.h \
 @USE_OPENGL_TRUE@	gstgldeinterlace.h \
-@USE_OPENGL_TRUE@	gstglstereosplit.h \
-@USE_OPENGL_TRUE@	gstglstereomix.h \
-@USE_OPENGL_TRUE@	gstglviewconvert.h \
 @USE_OPENGL_TRUE@	gltestsrc.h \
 @USE_OPENGL_TRUE@	gstgltestsrc.h \
 @USE_OPENGL_TRUE@	gstglmosaic.h \
@@ -122,18 +116,22 @@
 
 @HAVE_GRAPHENE_TRUE@am__append_5 = \
 @HAVE_GRAPHENE_TRUE@	gstgltransformation.c \
-@HAVE_GRAPHENE_TRUE@	gstgltransformation.h
+@HAVE_GRAPHENE_TRUE@	gstglvideoflip.c
 
-@HAVE_JPEG_TRUE@@HAVE_PNG_TRUE@am__append_6 = \
-@HAVE_JPEG_TRUE@@HAVE_PNG_TRUE@	gstgloverlay.c
+@HAVE_GRAPHENE_TRUE@am__append_6 = \
+@HAVE_GRAPHENE_TRUE@	gstgltransformation.h \
+@HAVE_GRAPHENE_TRUE@	gstglvideoflip.h
 
 @HAVE_JPEG_TRUE@@HAVE_PNG_TRUE@am__append_7 = \
+@HAVE_JPEG_TRUE@@HAVE_PNG_TRUE@	gstgloverlay.c
+
+@HAVE_JPEG_TRUE@@HAVE_PNG_TRUE@am__append_8 = \
 @HAVE_JPEG_TRUE@@HAVE_PNG_TRUE@	gstgloverlay.h
 
-@HAVE_WINDOW_COCOA_TRUE@am__append_8 = \
+@HAVE_WINDOW_COCOA_TRUE@am__append_9 = \
 @HAVE_WINDOW_COCOA_TRUE@	caopengllayersink.m
 
-@HAVE_WINDOW_COCOA_TRUE@am__append_9 = \
+@HAVE_WINDOW_COCOA_TRUE@am__append_10 = \
 @HAVE_WINDOW_COCOA_TRUE@	caopengllayersink.h
 
 subdir = ext/gl
@@ -162,16 +160,15 @@
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
 	$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
-	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gsettings.m4 \
-	$(top_srcdir)/m4/gst-fionread.m4 $(top_srcdir)/m4/gst-sdl.m4 \
-	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
-	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
-	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libgcrypt.m4 \
-	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
-	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
-	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
-	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
-	$(top_srcdir)/configure.ac
+	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gst-fionread.m4 \
+	$(top_srcdir)/m4/gst-sdl.m4 $(top_srcdir)/m4/iconv.m4 \
+	$(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \
+	$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
+	$(top_srcdir)/m4/libgcrypt.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
+	$(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 DIST_COMMON = $(srcdir)/Makefile.am $(am__noinst_HEADERS_DIST) \
@@ -221,33 +218,33 @@
 	gstgluploadelement.c gstgldownloadelement.c \
 	gstglcolorconvertelement.c gstglfilterbin.c gstglmixerbin.c \
 	gstglsinkbin.c gstglsrcbin.c gstglimagesink.c \
-	gstglfiltercube.c gstgleffects.c effects/gstgleffectssources.c \
-	effects/gstgleffectidentity.c effects/gstgleffectmirror.c \
-	effects/gstgleffectsqueeze.c effects/gstgleffectstretch.c \
-	effects/gstgleffectfisheye.c effects/gstgleffecttwirl.c \
-	effects/gstgleffectbulge.c effects/gstgleffecttunnel.c \
-	effects/gstgleffectsquare.c effects/gstgleffectlumatocurve.c \
+	gstglfiltercube.c gstgleffects.c effects/gstgleffectscurves.c \
+	effects/gstgleffectssources.c effects/gstgleffectidentity.c \
+	effects/gstgleffectmirror.c effects/gstgleffectsqueeze.c \
+	effects/gstgleffectstretch.c effects/gstgleffectfisheye.c \
+	effects/gstgleffecttwirl.c effects/gstgleffectbulge.c \
+	effects/gstgleffecttunnel.c effects/gstgleffectsquare.c \
+	effects/gstgleffectlumatocurve.c \
 	effects/gstgleffectrgbtocurve.c effects/gstgleffectsin.c \
 	effects/gstgleffectxray.c effects/gstgleffectglow.c \
 	effects/gstgleffectblur.c effects/gstgleffectsobel.c \
-	effects/gstgleffectlaplacian.c gstglcolorscale.c gstglmixer.c \
-	gstglvideomixer.c gstglfiltershader.c gstglfilterapp.c \
-	gstglfilterglass.c gstgldeinterlace.c gstglviewconvert.c \
-	gstglstereosplit.c gstglstereomix.c gltestsrc.c gstgltestsrc.c \
-	gstglmosaic.c gstgldifferencematte.c gstgltransformation.c \
-	gstgltransformation.h gstgloverlay.c caopengllayersink.m
+	effects/gstgleffectlaplacian.c gstglcolorscale.c \
+	gstglcolorbalance.c gstglmixer.c gstglvideomixer.c \
+	gstglfiltershader.c gstglfilterapp.c gstglviewconvert.c \
+	gstglstereosplit.c gstglstereomix.c gstglfilterglass.c \
+	gstgldeinterlace.c gltestsrc.c gstgltestsrc.c gstglmosaic.c \
+	gstgldifferencematte.c gstgltransformation.c gstglvideoflip.c \
+	gstgloverlay.c caopengllayersink.m
 am__dirstamp = $(am__leading_dot)dirstamp
 @USE_OPENGL_TRUE@am__objects_1 = libgstopengl_la-gstglfilterglass.lo \
 @USE_OPENGL_TRUE@	libgstopengl_la-gstgldeinterlace.lo \
-@USE_OPENGL_TRUE@	libgstopengl_la-gstglviewconvert.lo \
-@USE_OPENGL_TRUE@	libgstopengl_la-gstglstereosplit.lo \
-@USE_OPENGL_TRUE@	libgstopengl_la-gstglstereomix.lo \
 @USE_OPENGL_TRUE@	libgstopengl_la-gltestsrc.lo \
 @USE_OPENGL_TRUE@	libgstopengl_la-gstgltestsrc.lo \
 @USE_OPENGL_TRUE@	libgstopengl_la-gstglmosaic.lo
 @HAVE_PNG_TRUE@@USE_OPENGL_TRUE@am__objects_2 = libgstopengl_la-gstgldifferencematte.lo
 @HAVE_GRAPHENE_TRUE@am__objects_3 =  \
-@HAVE_GRAPHENE_TRUE@	libgstopengl_la-gstgltransformation.lo
+@HAVE_GRAPHENE_TRUE@	libgstopengl_la-gstgltransformation.lo \
+@HAVE_GRAPHENE_TRUE@	libgstopengl_la-gstglvideoflip.lo
 @HAVE_JPEG_TRUE@@HAVE_PNG_TRUE@am__objects_4 = libgstopengl_la-gstgloverlay.lo
 @HAVE_WINDOW_COCOA_TRUE@am__objects_5 =  \
 @HAVE_WINDOW_COCOA_TRUE@	libgstopengl_la-caopengllayersink.lo
@@ -262,6 +259,7 @@
 	libgstopengl_la-gstglimagesink.lo \
 	libgstopengl_la-gstglfiltercube.lo \
 	libgstopengl_la-gstgleffects.lo \
+	effects/libgstopengl_la-gstgleffectscurves.lo \
 	effects/libgstopengl_la-gstgleffectssources.lo \
 	effects/libgstopengl_la-gstgleffectidentity.lo \
 	effects/libgstopengl_la-gstgleffectmirror.lo \
@@ -281,10 +279,14 @@
 	effects/libgstopengl_la-gstgleffectsobel.lo \
 	effects/libgstopengl_la-gstgleffectlaplacian.lo \
 	libgstopengl_la-gstglcolorscale.lo \
+	libgstopengl_la-gstglcolorbalance.lo \
 	libgstopengl_la-gstglmixer.lo \
 	libgstopengl_la-gstglvideomixer.lo \
 	libgstopengl_la-gstglfiltershader.lo \
-	libgstopengl_la-gstglfilterapp.lo $(am__objects_1) \
+	libgstopengl_la-gstglfilterapp.lo \
+	libgstopengl_la-gstglviewconvert.lo \
+	libgstopengl_la-gstglstereosplit.lo \
+	libgstopengl_la-gstglstereomix.lo $(am__objects_1) \
 	$(am__objects_2) $(am__objects_3) $(am__objects_4) \
 	$(am__objects_5)
 libgstopengl_la_OBJECTS = $(am_libgstopengl_la_OBJECTS)
@@ -359,12 +361,13 @@
 	gstgldownloadelement.h gstglcolorconvertelement.h \
 	gstglfilterbin.h gstglmixerbin.h gstglsinkbin.h gstglsrcbin.h \
 	gstglimagesink.h gstglfiltercube.h gstgleffects.h \
-	effects/gstgleffectssources.h gstglcolorscale.h gstglmixer.h \
-	gstglvideomixer.h gstglfiltershader.h gstglfilterapp.h \
-	gstglfilterglass.h gstgldeinterlace.h gstglstereosplit.h \
-	gstglstereomix.h gstglviewconvert.h gltestsrc.h gstgltestsrc.h \
-	gstglmosaic.h effects/gstgleffectscurves.h \
-	effects/gstgleffectlumatocurve.h gstgldifferencematte.h \
+	effects/gstgleffectssources.h gstglcolorscale.h \
+	gstglcolorbalance.h gstglmixer.h gstglvideomixer.h \
+	gstglfiltershader.h gstglfilterapp.h gstglstereosplit.h \
+	gstglstereomix.h gstglviewconvert.h gstglfilterglass.h \
+	gstgldeinterlace.h gltestsrc.h gstgltestsrc.h gstglmosaic.h \
+	effects/gstgleffectscurves.h effects/gstgleffectlumatocurve.h \
+	gstgldifferencematte.h gstgltransformation.h gstglvideoflip.h \
 	gstgloverlay.h caopengllayersink.h
 HEADERS = $(noinst_HEADERS)
 am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
@@ -423,6 +426,8 @@
 CLUTTER_X11_LIBS = @CLUTTER_X11_LIBS@
 CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
+CUDA_CFLAGS = @CUDA_CFLAGS@
+CUDA_LIBS = @CUDA_LIBS@
 CURL_CFLAGS = @CURL_CFLAGS@
 CURL_LIBS = @CURL_LIBS@
 CXX = @CXX@
@@ -460,6 +465,8 @@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
+EGL_CFLAGS = @EGL_CFLAGS@
+EGL_LIBS = @EGL_LIBS@
 EGREP = @EGREP@
 ERROR_CFLAGS = @ERROR_CFLAGS@
 ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
@@ -468,7 +475,6 @@
 EXIF_CFLAGS = @EXIF_CFLAGS@
 EXIF_LIBS = @EXIF_LIBS@
 FAAC_LIBS = @FAAC_LIBS@
-FAAD_IS_NEAAC = @FAAD_IS_NEAAC@
 FAAD_LIBS = @FAAD_LIBS@
 FFLAGS = @FFLAGS@
 FGREP = @FGREP@
@@ -487,8 +493,9 @@
 GIO_LIBS = @GIO_LIBS@
 GIO_UNIX_CFLAGS = @GIO_UNIX_CFLAGS@
 GIO_UNIX_LIBS = @GIO_UNIX_LIBS@
+GLES2_CFLAGS = @GLES2_CFLAGS@
+GLES2_LIBS = @GLES2_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
-GLIB_COMPILE_SCHEMAS = @GLIB_COMPILE_SCHEMAS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
@@ -505,16 +512,17 @@
 GMODULE_NO_EXPORT_LIBS = @GMODULE_NO_EXPORT_LIBS@
 GMSGFMT = @GMSGFMT@
 GMSGFMT_015 = @GMSGFMT_015@
+GNUSTL_CFLAGS = @GNUSTL_CFLAGS@
+GNUSTL_LIBS = @GNUSTL_LIBS@
 GRAPHENE_CFLAGS = @GRAPHENE_CFLAGS@
 GRAPHENE_LIBS = @GRAPHENE_LIBS@
 GREP = @GREP@
-GSETTINGS_CFLAGS = @GSETTINGS_CFLAGS@
-GSETTINGS_DISABLE_SCHEMAS_COMPILE = @GSETTINGS_DISABLE_SCHEMAS_COMPILE@
-GSETTINGS_LIBS = @GSETTINGS_LIBS@
 GSM_LIBS = @GSM_LIBS@
 GSTPB_PLUGINS_DIR = @GSTPB_PLUGINS_DIR@
 GSTPB_PREFIX = @GSTPB_PREFIX@
 GST_AGE = @GST_AGE@
+GST_ALLOCATORS_CFLAGS = @GST_ALLOCATORS_CFLAGS@
+GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
 GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
 GST_API_VERSION = @GST_API_VERSION@
 GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
@@ -540,6 +548,8 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PBUTILS_CFLAGS = @GST_PBUTILS_CFLAGS@
+GST_PBUTILS_LIBS = @GST_PBUTILS_LIBS@
 GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BAD_CFLAGS = @GST_PLUGINS_BAD_CFLAGS@
@@ -565,6 +575,8 @@
 GST_PREFIX = @GST_PREFIX@
 GST_REVISION = @GST_REVISION@
 GST_TOOLS_DIR = @GST_TOOLS_DIR@
+GST_VIDEO_CFLAGS = @GST_VIDEO_CFLAGS@
+GST_VIDEO_LIBS = @GST_VIDEO_LIBS@
 GTK3_CFLAGS = @GTK3_CFLAGS@
 GTK3_GL_CFLAGS = @GTK3_GL_CFLAGS@
 GTK3_GL_LIBS = @GTK3_GL_LIBS@
@@ -666,6 +678,7 @@
 LTLIBICONV = @LTLIBICONV@
 LTLIBINTL = @LTLIBINTL@
 LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
 MANIFEST_TOOL = @MANIFEST_TOOL@
@@ -679,8 +692,6 @@
 MODPLUG_LIBS = @MODPLUG_LIBS@
 MPEG2ENC_CFLAGS = @MPEG2ENC_CFLAGS@
 MPEG2ENC_LIBS = @MPEG2ENC_LIBS@
-MPG123_CFLAGS = @MPG123_CFLAGS@
-MPG123_LIBS = @MPG123_LIBS@
 MPLEX_CFLAGS = @MPLEX_CFLAGS@
 MPLEX_LDFLAGS = @MPLEX_LDFLAGS@
 MPLEX_LIBS = @MPLEX_LIBS@
@@ -696,6 +707,8 @@
 NETTLE_LIBS = @NETTLE_LIBS@
 NM = @NM@
 NMEDIT = @NMEDIT@
+NVENCODE_CFLAGS = @NVENCODE_CFLAGS@
+NVENCODE_LIBS = @NVENCODE_LIBS@
 OBJC = @OBJC@
 OBJCDEPMODE = @OBJCDEPMODE@
 OBJCFLAGS = @OBJCFLAGS@
@@ -753,16 +766,18 @@
 PYTHON_PLATFORM = @PYTHON_PLATFORM@
 PYTHON_PREFIX = @PYTHON_PREFIX@
 PYTHON_VERSION = @PYTHON_VERSION@
+QT_ANDROID_CFLAGS = @QT_ANDROID_CFLAGS@
+QT_ANDROID_LIBS = @QT_ANDROID_LIBS@
 QT_CFLAGS = @QT_CFLAGS@
 QT_LIBS = @QT_LIBS@
+QT_MAC_CFLAGS = @QT_MAC_CFLAGS@
+QT_MAC_LIBS = @QT_MAC_LIBS@
 QT_WAYLAND_CFLAGS = @QT_WAYLAND_CFLAGS@
 QT_WAYLAND_LIBS = @QT_WAYLAND_LIBS@
 QT_X11_CFLAGS = @QT_X11_CFLAGS@
 QT_X11_LIBS = @QT_X11_LIBS@
 RANLIB = @RANLIB@
 RCC = @RCC@
-RSVG_2_36_2_CFLAGS = @RSVG_2_36_2_CFLAGS@
-RSVG_2_36_2_LIBS = @RSVG_2_36_2_LIBS@
 RSVG_CFLAGS = @RSVG_CFLAGS@
 RSVG_LIBS = @RSVG_LIBS@
 RTMP_CFLAGS = @RTMP_CFLAGS@
@@ -814,6 +829,7 @@
 VOAACENC_LIBS = @VOAACENC_LIBS@
 VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
 VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VULKAN_LIBS = @VULKAN_LIBS@
 WARNING_CFLAGS = @WARNING_CFLAGS@
 WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
 WARNING_OBJCFLAGS = @WARNING_OBJCFLAGS@
@@ -824,6 +840,7 @@
 WAYLAND_LIBS = @WAYLAND_LIBS@
 WEBP_CFLAGS = @WEBP_CFLAGS@
 WEBP_LIBS = @WEBP_LIBS@
+WGET = @WGET@
 WILDMIDI_CFLAGS = @WILDMIDI_CFLAGS@
 WILDMIDI_LIBS = @WILDMIDI_LIBS@
 WINKS_LIBS = @WINKS_LIBS@
@@ -833,6 +850,8 @@
 X11_LIBS = @X11_LIBS@
 X265_CFLAGS = @X265_CFLAGS@
 X265_LIBS = @X265_LIBS@
+XCB_CFLAGS = @XCB_CFLAGS@
+XCB_LIBS = @XCB_LIBS@
 XCOMPOSITE_CFLAGS = @XCOMPOSITE_CFLAGS@
 XCOMPOSITE_LIBS = @XCOMPOSITE_LIBS@
 XGETTEXT = @XGETTEXT@
@@ -870,7 +889,6 @@
 docdir = @docdir@
 dvidir = @dvidir@
 exec_prefix = @exec_prefix@
-gsettingsschemadir = @gsettingsschemadir@
 host = @host@
 host_alias = @host_alias@
 host_cpu = @host_cpu@
@@ -915,27 +933,32 @@
 	gstgluploadelement.c gstgldownloadelement.c \
 	gstglcolorconvertelement.c gstglfilterbin.c gstglmixerbin.c \
 	gstglsinkbin.c gstglsrcbin.c gstglimagesink.c \
-	gstglfiltercube.c gstgleffects.c effects/gstgleffectssources.c \
-	effects/gstgleffectidentity.c effects/gstgleffectmirror.c \
-	effects/gstgleffectsqueeze.c effects/gstgleffectstretch.c \
-	effects/gstgleffectfisheye.c effects/gstgleffecttwirl.c \
-	effects/gstgleffectbulge.c effects/gstgleffecttunnel.c \
-	effects/gstgleffectsquare.c effects/gstgleffectlumatocurve.c \
+	gstglfiltercube.c gstgleffects.c effects/gstgleffectscurves.c \
+	effects/gstgleffectssources.c effects/gstgleffectidentity.c \
+	effects/gstgleffectmirror.c effects/gstgleffectsqueeze.c \
+	effects/gstgleffectstretch.c effects/gstgleffectfisheye.c \
+	effects/gstgleffecttwirl.c effects/gstgleffectbulge.c \
+	effects/gstgleffecttunnel.c effects/gstgleffectsquare.c \
+	effects/gstgleffectlumatocurve.c \
 	effects/gstgleffectrgbtocurve.c effects/gstgleffectsin.c \
 	effects/gstgleffectxray.c effects/gstgleffectglow.c \
 	effects/gstgleffectblur.c effects/gstgleffectsobel.c \
-	effects/gstgleffectlaplacian.c gstglcolorscale.c gstglmixer.c \
-	gstglvideomixer.c gstglfiltershader.c gstglfilterapp.c \
-	$(am__append_1) $(am__append_3) $(am__append_5) \
-	$(am__append_6) $(am__append_8)
+	effects/gstgleffectlaplacian.c gstglcolorscale.c \
+	gstglcolorbalance.c gstglmixer.c gstglvideomixer.c \
+	gstglfiltershader.c gstglfilterapp.c gstglviewconvert.c \
+	gstglstereosplit.c gstglstereomix.c $(am__append_1) \
+	$(am__append_3) $(am__append_5) $(am__append_7) \
+	$(am__append_9)
 noinst_HEADERS = gstglbasemixer.h gstgluploadelement.h \
 	gstgldownloadelement.h gstglcolorconvertelement.h \
 	gstglfilterbin.h gstglmixerbin.h gstglsinkbin.h gstglsrcbin.h \
 	gstglimagesink.h gstglfiltercube.h gstgleffects.h \
-	effects/gstgleffectssources.h gstglcolorscale.h gstglmixer.h \
-	gstglvideomixer.h gstglfiltershader.h gstglfilterapp.h \
-	$(am__append_2) $(am__append_4) $(am__append_7) \
-	$(am__append_9)
+	effects/gstgleffectssources.h gstglcolorscale.h \
+	gstglcolorbalance.h gstglmixer.h gstglvideomixer.h \
+	gstglfiltershader.h gstglfilterapp.h gstglstereosplit.h \
+	gstglstereomix.h gstglviewconvert.h $(am__append_2) \
+	$(am__append_4) $(am__append_6) $(am__append_8) \
+	$(am__append_10)
 libgstopengl_la_OBJCFLAGS = \
 	-I$(top_srcdir)/gst-libs \
 	-I$(top_builddir)/gst-libs \
@@ -1046,6 +1069,8 @@
 effects/$(DEPDIR)/$(am__dirstamp):
 	@$(MKDIR_P) effects/$(DEPDIR)
 	@: > effects/$(DEPDIR)/$(am__dirstamp)
+effects/libgstopengl_la-gstgleffectscurves.lo:  \
+	effects/$(am__dirstamp) effects/$(DEPDIR)/$(am__dirstamp)
 effects/libgstopengl_la-gstgleffectssources.lo:  \
 	effects/$(am__dirstamp) effects/$(DEPDIR)/$(am__dirstamp)
 effects/libgstopengl_la-gstgleffectidentity.lo:  \
@@ -1097,6 +1122,7 @@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstopengl_la-caopengllayersink.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstopengl_la-gltestsrc.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstopengl_la-gstglbasemixer.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstopengl_la-gstglcolorbalance.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstopengl_la-gstglcolorconvertelement.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstopengl_la-gstglcolorscale.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstopengl_la-gstgldeinterlace.Plo@am__quote@
@@ -1120,6 +1146,7 @@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstopengl_la-gstgltestsrc.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstopengl_la-gstgltransformation.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstopengl_la-gstgluploadelement.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstopengl_la-gstglvideoflip.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstopengl_la-gstglvideomixer.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstopengl_la-gstglviewconvert.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstopengl_la-gstopengl.Plo@am__quote@
@@ -1132,6 +1159,7 @@
 @AMDEP_TRUE@@am__include@ @am__quote@effects/$(DEPDIR)/libgstopengl_la-gstgleffectlumatocurve.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@effects/$(DEPDIR)/libgstopengl_la-gstgleffectmirror.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@effects/$(DEPDIR)/libgstopengl_la-gstgleffectrgbtocurve.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@effects/$(DEPDIR)/libgstopengl_la-gstgleffectscurves.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@effects/$(DEPDIR)/libgstopengl_la-gstgleffectsin.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@effects/$(DEPDIR)/libgstopengl_la-gstgleffectsobel.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@effects/$(DEPDIR)/libgstopengl_la-gstgleffectsquare.Plo@am__quote@
@@ -1250,6 +1278,13 @@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstopengl_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstopengl_la_CFLAGS) $(CFLAGS) -c -o libgstopengl_la-gstgleffects.lo `test -f 'gstgleffects.c' || echo '$(srcdir)/'`gstgleffects.c
 
+effects/libgstopengl_la-gstgleffectscurves.lo: effects/gstgleffectscurves.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstopengl_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstopengl_la_CFLAGS) $(CFLAGS) -MT effects/libgstopengl_la-gstgleffectscurves.lo -MD -MP -MF effects/$(DEPDIR)/libgstopengl_la-gstgleffectscurves.Tpo -c -o effects/libgstopengl_la-gstgleffectscurves.lo `test -f 'effects/gstgleffectscurves.c' || echo '$(srcdir)/'`effects/gstgleffectscurves.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) effects/$(DEPDIR)/libgstopengl_la-gstgleffectscurves.Tpo effects/$(DEPDIR)/libgstopengl_la-gstgleffectscurves.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='effects/gstgleffectscurves.c' object='effects/libgstopengl_la-gstgleffectscurves.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstopengl_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstopengl_la_CFLAGS) $(CFLAGS) -c -o effects/libgstopengl_la-gstgleffectscurves.lo `test -f 'effects/gstgleffectscurves.c' || echo '$(srcdir)/'`effects/gstgleffectscurves.c
+
 effects/libgstopengl_la-gstgleffectssources.lo: effects/gstgleffectssources.c
 @am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstopengl_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstopengl_la_CFLAGS) $(CFLAGS) -MT effects/libgstopengl_la-gstgleffectssources.lo -MD -MP -MF effects/$(DEPDIR)/libgstopengl_la-gstgleffectssources.Tpo -c -o effects/libgstopengl_la-gstgleffectssources.lo `test -f 'effects/gstgleffectssources.c' || echo '$(srcdir)/'`effects/gstgleffectssources.c
 @am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) effects/$(DEPDIR)/libgstopengl_la-gstgleffectssources.Tpo effects/$(DEPDIR)/libgstopengl_la-gstgleffectssources.Plo
@@ -1383,6 +1418,13 @@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstopengl_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstopengl_la_CFLAGS) $(CFLAGS) -c -o libgstopengl_la-gstglcolorscale.lo `test -f 'gstglcolorscale.c' || echo '$(srcdir)/'`gstglcolorscale.c
 
+libgstopengl_la-gstglcolorbalance.lo: gstglcolorbalance.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstopengl_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstopengl_la_CFLAGS) $(CFLAGS) -MT libgstopengl_la-gstglcolorbalance.lo -MD -MP -MF $(DEPDIR)/libgstopengl_la-gstglcolorbalance.Tpo -c -o libgstopengl_la-gstglcolorbalance.lo `test -f 'gstglcolorbalance.c' || echo '$(srcdir)/'`gstglcolorbalance.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstopengl_la-gstglcolorbalance.Tpo $(DEPDIR)/libgstopengl_la-gstglcolorbalance.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='gstglcolorbalance.c' object='libgstopengl_la-gstglcolorbalance.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstopengl_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstopengl_la_CFLAGS) $(CFLAGS) -c -o libgstopengl_la-gstglcolorbalance.lo `test -f 'gstglcolorbalance.c' || echo '$(srcdir)/'`gstglcolorbalance.c
+
 libgstopengl_la-gstglmixer.lo: gstglmixer.c
 @am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstopengl_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstopengl_la_CFLAGS) $(CFLAGS) -MT libgstopengl_la-gstglmixer.lo -MD -MP -MF $(DEPDIR)/libgstopengl_la-gstglmixer.Tpo -c -o libgstopengl_la-gstglmixer.lo `test -f 'gstglmixer.c' || echo '$(srcdir)/'`gstglmixer.c
 @am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstopengl_la-gstglmixer.Tpo $(DEPDIR)/libgstopengl_la-gstglmixer.Plo
@@ -1411,20 +1453,6 @@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstopengl_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstopengl_la_CFLAGS) $(CFLAGS) -c -o libgstopengl_la-gstglfilterapp.lo `test -f 'gstglfilterapp.c' || echo '$(srcdir)/'`gstglfilterapp.c
 
-libgstopengl_la-gstglfilterglass.lo: gstglfilterglass.c
-@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstopengl_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstopengl_la_CFLAGS) $(CFLAGS) -MT libgstopengl_la-gstglfilterglass.lo -MD -MP -MF $(DEPDIR)/libgstopengl_la-gstglfilterglass.Tpo -c -o libgstopengl_la-gstglfilterglass.lo `test -f 'gstglfilterglass.c' || echo '$(srcdir)/'`gstglfilterglass.c
-@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstopengl_la-gstglfilterglass.Tpo $(DEPDIR)/libgstopengl_la-gstglfilterglass.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='gstglfilterglass.c' object='libgstopengl_la-gstglfilterglass.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstopengl_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstopengl_la_CFLAGS) $(CFLAGS) -c -o libgstopengl_la-gstglfilterglass.lo `test -f 'gstglfilterglass.c' || echo '$(srcdir)/'`gstglfilterglass.c
-
-libgstopengl_la-gstgldeinterlace.lo: gstgldeinterlace.c
-@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstopengl_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstopengl_la_CFLAGS) $(CFLAGS) -MT libgstopengl_la-gstgldeinterlace.lo -MD -MP -MF $(DEPDIR)/libgstopengl_la-gstgldeinterlace.Tpo -c -o libgstopengl_la-gstgldeinterlace.lo `test -f 'gstgldeinterlace.c' || echo '$(srcdir)/'`gstgldeinterlace.c
-@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstopengl_la-gstgldeinterlace.Tpo $(DEPDIR)/libgstopengl_la-gstgldeinterlace.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='gstgldeinterlace.c' object='libgstopengl_la-gstgldeinterlace.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstopengl_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstopengl_la_CFLAGS) $(CFLAGS) -c -o libgstopengl_la-gstgldeinterlace.lo `test -f 'gstgldeinterlace.c' || echo '$(srcdir)/'`gstgldeinterlace.c
-
 libgstopengl_la-gstglviewconvert.lo: gstglviewconvert.c
 @am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstopengl_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstopengl_la_CFLAGS) $(CFLAGS) -MT libgstopengl_la-gstglviewconvert.lo -MD -MP -MF $(DEPDIR)/libgstopengl_la-gstglviewconvert.Tpo -c -o libgstopengl_la-gstglviewconvert.lo `test -f 'gstglviewconvert.c' || echo '$(srcdir)/'`gstglviewconvert.c
 @am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstopengl_la-gstglviewconvert.Tpo $(DEPDIR)/libgstopengl_la-gstglviewconvert.Plo
@@ -1446,6 +1474,20 @@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstopengl_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstopengl_la_CFLAGS) $(CFLAGS) -c -o libgstopengl_la-gstglstereomix.lo `test -f 'gstglstereomix.c' || echo '$(srcdir)/'`gstglstereomix.c
 
+libgstopengl_la-gstglfilterglass.lo: gstglfilterglass.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstopengl_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstopengl_la_CFLAGS) $(CFLAGS) -MT libgstopengl_la-gstglfilterglass.lo -MD -MP -MF $(DEPDIR)/libgstopengl_la-gstglfilterglass.Tpo -c -o libgstopengl_la-gstglfilterglass.lo `test -f 'gstglfilterglass.c' || echo '$(srcdir)/'`gstglfilterglass.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstopengl_la-gstglfilterglass.Tpo $(DEPDIR)/libgstopengl_la-gstglfilterglass.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='gstglfilterglass.c' object='libgstopengl_la-gstglfilterglass.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstopengl_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstopengl_la_CFLAGS) $(CFLAGS) -c -o libgstopengl_la-gstglfilterglass.lo `test -f 'gstglfilterglass.c' || echo '$(srcdir)/'`gstglfilterglass.c
+
+libgstopengl_la-gstgldeinterlace.lo: gstgldeinterlace.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstopengl_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstopengl_la_CFLAGS) $(CFLAGS) -MT libgstopengl_la-gstgldeinterlace.lo -MD -MP -MF $(DEPDIR)/libgstopengl_la-gstgldeinterlace.Tpo -c -o libgstopengl_la-gstgldeinterlace.lo `test -f 'gstgldeinterlace.c' || echo '$(srcdir)/'`gstgldeinterlace.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstopengl_la-gstgldeinterlace.Tpo $(DEPDIR)/libgstopengl_la-gstgldeinterlace.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='gstgldeinterlace.c' object='libgstopengl_la-gstgldeinterlace.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstopengl_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstopengl_la_CFLAGS) $(CFLAGS) -c -o libgstopengl_la-gstgldeinterlace.lo `test -f 'gstgldeinterlace.c' || echo '$(srcdir)/'`gstgldeinterlace.c
+
 libgstopengl_la-gltestsrc.lo: gltestsrc.c
 @am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstopengl_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstopengl_la_CFLAGS) $(CFLAGS) -MT libgstopengl_la-gltestsrc.lo -MD -MP -MF $(DEPDIR)/libgstopengl_la-gltestsrc.Tpo -c -o libgstopengl_la-gltestsrc.lo `test -f 'gltestsrc.c' || echo '$(srcdir)/'`gltestsrc.c
 @am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstopengl_la-gltestsrc.Tpo $(DEPDIR)/libgstopengl_la-gltestsrc.Plo
@@ -1481,6 +1523,13 @@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstopengl_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstopengl_la_CFLAGS) $(CFLAGS) -c -o libgstopengl_la-gstgltransformation.lo `test -f 'gstgltransformation.c' || echo '$(srcdir)/'`gstgltransformation.c
 
+libgstopengl_la-gstglvideoflip.lo: gstglvideoflip.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstopengl_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstopengl_la_CFLAGS) $(CFLAGS) -MT libgstopengl_la-gstglvideoflip.lo -MD -MP -MF $(DEPDIR)/libgstopengl_la-gstglvideoflip.Tpo -c -o libgstopengl_la-gstglvideoflip.lo `test -f 'gstglvideoflip.c' || echo '$(srcdir)/'`gstglvideoflip.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstopengl_la-gstglvideoflip.Tpo $(DEPDIR)/libgstopengl_la-gstglvideoflip.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='gstglvideoflip.c' object='libgstopengl_la-gstglvideoflip.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstopengl_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstopengl_la_CFLAGS) $(CFLAGS) -c -o libgstopengl_la-gstglvideoflip.lo `test -f 'gstglvideoflip.c' || echo '$(srcdir)/'`gstglvideoflip.c
+
 libgstopengl_la-gstgloverlay.lo: gstgloverlay.c
 @am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstopengl_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstopengl_la_CFLAGS) $(CFLAGS) -MT libgstopengl_la-gstgloverlay.lo -MD -MP -MF $(DEPDIR)/libgstopengl_la-gstgloverlay.Tpo -c -o libgstopengl_la-gstgloverlay.lo `test -f 'gstgloverlay.c' || echo '$(srcdir)/'`gstgloverlay.c
 @am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstopengl_la-gstgloverlay.Tpo $(DEPDIR)/libgstopengl_la-gstgloverlay.Plo
diff --git a/ext/gl/caopengllayersink.m b/ext/gl/caopengllayersink.m
index 22954ff..42b8f90 100644
--- a/ext/gl/caopengllayersink.m
+++ b/ext/gl/caopengllayersink.m
@@ -167,9 +167,12 @@
     GST_STATIC_PAD_TEMPLATE ("sink",
     GST_PAD_SINK,
     GST_PAD_ALWAYS,
-    GST_STATIC_CAPS (GST_VIDEO_CAPS_MAKE_WITH_FEATURES
-        (GST_CAPS_FEATURE_MEMORY_GL_MEMORY,
-            "RGBA"))
+    GST_STATIC_CAPS ("video/x-raw(" GST_CAPS_FEATURE_MEMORY_GL_MEMORY "), "
+      "format = (string) RGBA, "
+      "width = " GST_VIDEO_SIZE_RANGE ", "
+      "height = " GST_VIDEO_SIZE_RANGE ", "
+      "framerate = " GST_VIDEO_FPS_RANGE ","
+      "texture-target = (string) 2D")
     );
 
 enum
@@ -476,6 +479,8 @@
 
   if (ca_sink->display)
     gst_gl_display_filter_gl_api (ca_sink->display, SUPPORTED_GL_APIS);
+
+  GST_ELEMENT_CLASS (parent_class)->set_context (element, context);
 }
 
 static GstStateChangeReturn
@@ -887,13 +892,20 @@
 gst_ca_opengl_layer_sink_thread_init_redisplay (GstCAOpenGLLayerSink * ca_sink)
 {
   const GstGLFuncs *gl = ca_sink->context->gl_vtable;
+  GError *error = NULL;
 
-  ca_sink->redisplay_shader = gst_gl_shader_new (ca_sink->context);
-
-  if (!gst_gl_shader_compile_with_default_vf_and_check
-      (ca_sink->redisplay_shader, &ca_sink->attr_position,
-          &ca_sink->attr_texture))
+  if (!(ca_sink->redisplay_shader = gst_gl_shader_new_default (ca_sink->context, &error))) {
+    GST_ERROR_OBJECT (ca_sink, "Failed to link shader: %s", error->message);
     gst_ca_opengl_layer_sink_cleanup_glthread (ca_sink);
+    return;
+  }
+
+  ca_sink->attr_position =
+      gst_gl_shader_get_attribute_location (ca_sink->redisplay_shader,
+      "a_position");
+  ca_sink->attr_texture =
+      gst_gl_shader_get_attribute_location (ca_sink->redisplay_shader,
+      "a_texcoord");
 
   if (gl->GenVertexArrays) {
     gl->GenVertexArrays (1, &ca_sink->vao);
diff --git a/ext/gl/effects/gstgleffectidentity.c b/ext/gl/effects/gstgleffectidentity.c
index 9740cc7..5687d64 100644
--- a/ext/gl/effects/gstgleffectidentity.c
+++ b/ext/gl/effects/gstgleffectidentity.c
@@ -42,17 +42,20 @@
 
   shader = g_hash_table_lookup (effects->shaderstable, "identity0");
   if (!shader) {
-    shader = gst_gl_shader_new (context);
-    g_hash_table_insert (effects->shaderstable, (gchar *) "identity0", shader);
+    GError *error = NULL;
 
-    if (!gst_gl_shader_compile_with_default_vf_and_check (shader,
-            &filter->draw_attr_position_loc, &filter->draw_attr_texture_loc)) {
-      /* gst gl context error is already set */
+    if (!(shader = gst_gl_shader_new_default (context, &error))) {
       GST_ELEMENT_ERROR (effects, RESOURCE, NOT_FOUND,
-          ("Failed to initialize identity shader, %s",
-              gst_gl_context_get_error ()), (NULL));
+          ("Failed to initialize identity shader: %s", error->message), (NULL));
       return;
     }
+
+    filter->draw_attr_position_loc =
+        gst_gl_shader_get_attribute_location (shader, "a_position");
+    filter->draw_attr_texture_loc =
+        gst_gl_shader_get_attribute_location (shader, "a_texcoord");
+
+    g_hash_table_insert (effects->shaderstable, (gchar *) "identity0", shader);
   }
   gst_gl_shader_use (shader);
 
diff --git a/ext/gl/effects/gstgleffectscurves.c b/ext/gl/effects/gstgleffectscurves.c
new file mode 100644
index 0000000..d16361b
--- /dev/null
+++ b/ext/gl/effects/gstgleffectscurves.c
@@ -0,0 +1,210 @@
+/* 
+ * GStreamer
+ * Copyright (C) 2008 Filippo Argiolas <filippo.argiolas@gmail.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include "gstgleffectscurves.h"
+
+/* CURVE for the heat signature effect */
+const GstGLEffectsCurve xpro_curve = {
+  256, 1, 3,
+  "\0\0\37\0\0\37\0\1\40\0\2!\0\2\"\0\3\"\1\4%\1\4%\1\5%\1\5'\1\7'\1\7(\1\7"
+      "(\1\10*\1\11+\1\11,\1\12,\1\13/\1\14/\1\14" "1\2\15" "1\2\15" "1\2\16"
+      "4\2\17" "" "4\3\17" "5\3\22" "7\3\22" "7\3\23" "8\3\24"
+      "9\3\25;\3\26;\3\27<\3\27=\4\31"
+      "=\4\33?\4\34@\5\34B\5\35C\5\36D\5\40D\5\40G\5!G\6\"H\6$H\7&J\7&K\7*M\7*M"
+      "\10+N\10-P\11-P\11/R\11" "3R\11" "3T\12" "4U\12" "5U\13" "7W\14" "8Y\14"
+      "9Y\14"
+      "<Y\16=[\16@^\16@^\17C^\17D`\20F`\20Jb\22Jb\22Kc\23Me\24Nf\25Qg\26Rg\27Ti"
+      "\27Wj\30Xl\31Yl\33\\m\34^p\35`p\40bp\40fq!fr$gt$lt%lu'mv(px*qy-ty/uz/x|0"
+      "y}3|}4}~5\177\2018\203\2019\203\201;\204\202=\207\203?\210\204@\214\204C"
+      "\214\206D\216\207G\217\210H\223\211K\223\211M\225\212P\226\214Q\231\215T"
+      "\232\215U\234\216X\235\217Y\240\220\\\241\220^\243\221`\244\223b\246\224"
+      "e\250\224f\252\225i\253\226l\255\227m\256\231p\261\231q\262\232t\264\233"
+      "v\265\234x\267\234z\270\235|\271\236~\274\240\201\275\240\202\277\241\204"
+      "\300\242\207\302\243\210\303\243\212\305\244\214\306\245\216\307\246\220"
+      "\311\250\221\313\250\224\315\251\226\316\252\227\317\253\232\321\253\234"
+      "\322\254\235\323\255\240\325\256\242\326\256\242\330\256\245\331\261\250"
+      "\331\262\251\332\262\253\334\263\255\335\264\256\336\265\261\340\266\263"
+      "\341\266\264\342\267\266\343\270\270\344\271\271\344\271\271\346\273\276"
+      "\347\274\277\350\275\277\351\275\302\352\276\304\353\277\306\353\300\307"
+      "\355\300\311\356\301\314\356\302\315\357\303\317\360\304\320\360\304\322"
+      "\361\305\323\362\306\325\362\307\327\363\307\330\363\310\330\364\311\333"
+      "\364\313\334\365\313\336\365\314\340\365\314\342\366\316\342\366\316\346"
+      "\367\317\347\367\320\351\367\320\353\370\322\354\370\322\356\370\323\356"
+      "\370\324\360\371\325\360\371\325\363\371\326\363\371\327\363\372\330\365"
+      "\372\330\366\372\331\366\372\331\370\372\332\371\373\332\371\373\333\372"
+      "\373\334\373\373\335\373\373\336\374\373\336\374\374\337\374\374\340\375"
+      "\374\341\375\374\341\376\374\342\376\374\343\376\374\344\376\374\344\377"
+      "\374\345\377\374\346\377\375\346\377\375\346\377\375\347\377\375\350\377"
+      "\375\351\377\375\352\377\375\352\377\375\352\377\375\353\377\375\353\377"
+      "\376\354\377\376\354\377\376\356\377\376\356\377\376\356\377\376\357\377"
+      "\376\360\377\376\360\377\376\360\377\376\360\377\376\362\377\376\362\377"
+      "\376\363\377\376\363\377\376\363\377\376\363\377\376\364\377\376\364\377"
+      "\376\365\377\377\365\377\377\366\377\377\366\377\377\366\377\377\367\377"
+      "\377\367\377\377\367\377\377\370",
+};
+
+const GstGLEffectsCurve luma_xpro_curve = {
+  256, 1, 3,
+  "\0\0\1\0\1\1\0\1\2\0\1\2\0\1\2\0\1\2\0\1\3\0\2\3\0\2\4\0\2\4\0\2\5\0\2\6"
+      "\0\3\6\0\3\6\0\3\7\0\3\10\0\4\10\0\4\11\0\4\12\0\4\12\1\4\13\1\5\14\1\5\15"
+      "\1\5\15\1\5\16\1\5\17\1\6\17\1\6\20\1\7\21\1\7\23\2\10\23\2\10\24\2\10\24"
+      "\2\11\26\2\11\27\2\11\30\3\11\31\3\12\31\3\13\32\3\13\33\4\13\34\4\14\35"
+      "\4\14\36\4\15\37\5\15\40\5\15\"\6\16#\6\17#\6\20$\7\20%\7\20%\10\21&\10\22"
+      "'\10\22)\11\24*\11\24*\12\24+\12\26.\13\26.\14\27.\14\30/\15\31"
+      "1\15\31" "" "2\16\32" "3\16\33" "3\20\33" "5\20\35" "6\20\36" "7\22\37"
+      "7\23\"9\23#9\24$" ":\25$<\27&<\27'=\31'?\31)?\32*@\35+B\35-C\36.C\37"
+      "1E\"2F#3H$5H&6I'7I)7K"
+      "+:M-<N-<N1@N1BQ2BQ6CQ6EU7HU<IU=IV@NX@NXBQZCS[FU[HU]IV_MZ_N[_Q]`S_bU`dXbe"
+      "Zbe]gg]ig`ji`jjdljenlgpljqnpwppwpqxqszqw|sx}u|\201u}\203w\177\204x\177\206"
+      "x\204\210x\204\212z\212\213|\212\217}\217\221}\221\222}\222\224\177\226\224"
+      "\201\226\226\203\230\233\203\235\235\204\236\235\204\236\236\210\244\242"
+      "\210\244\242\210\245\244\212\251\245\213\252\251\213\254\252\215\257\254"
+      "\215\261\256\217\261\257\221\266\261\221\267\261\222\273\264\224\273\267"
+      "\224\274\267\224\276\273\230\301\273\230\302\274\231\304\276\231\307\302"
+      "\233\312\302\235\312\304\235\314\306\236\316\307\240\320\311\240\321\314"
+      "\242\324\315\242\325\316\244\327\320\245\332\321\245\333\321\245\334\323"
+      "\251\335\325\251\335\330\252\341\332\254\341\332\256\344\334\256\346\334"
+      "\256\347\337\257\347\340\261\350\340\263\351\342\263\352\344\264\354\345"
+      "\266\355\346\266\356\347\267\357\350\271\360\351\273\361\352\273\362\352"
+      "\274\362\355\276\364\356\277\364\357\277\365\360\277\365\360\302\366\361"
+      "\302\367\361\304\370\363\304\370\363\307\370\364\307\371\364\311\371\366"
+      "\312\372\367\312\372\367\314\372\367\316\373\370\316\373\370\320\373\371"
+      "\320\374\371\321\374\372\323\374\372\324\375\372\325\375\372\325\375\373"
+      "\327\375\373\330\375\374\332\375\374\333\375\375\334\376\375\334\376\375"
+      "\335\376\375\337\376\375\337\376\375\340\376\376\342\376\376\344\376\376"
+      "\344\376\376\345\376\376\346\376\376\347\376\376\350\377\376\351\377\377"
+      "\353\377\377\354\377\377\356\377\377\357\377\377\361\377\377\361\377\377"
+      "\361\377\377\364\377\377\365\377\377\366\377\377\367\377\377\367\377\377"
+      "\371\377\377\371\377\377\372\377\377\373\377\377\373\377\377\374\377\377"
+      "\375\377\377\375\377\377\375\377\377\376",
+};
+
+/* CURVE for the heat signature effect */
+const GstGLEffectsCurve heat_curve = {
+  256, 1, 3,
+  "\0\0\0\0\0\0\0\1\0\0\1\0\0\1\1\0\2\1\0\2\1\1\2\1\1\2\2\1\2\2\1\3\2\1\3\3"
+      "\1\3\3\1\4\3\1\4\4\1\5\4\1\5\5\2\5\6\2\6\6\2\6\7\2\6\7\2\7\7\2\7\11\2\10"
+      "\11\2\10\12\3\11\13\3\11\13\3\11\14\3\12\15\3\12\17\3\13\17\3\14\20\3\14"
+      "\22\4\15\23\4\16\24\4\16\26\4\16\27\4\17\31\4\20\34\4\21\34\5\21\40\5\22"
+      "\40\5\22$\5\23$\5\25&\6\25(\6\26-\6\26-\6\27" "0\6\31" "2\7\31"
+      "5\7\32;\7\34"
+      ";\7\34?\10\35C\10\36G\10\37L\10\40V\11!V\11\"[\11$a\11&l\12&l\12'r\12(~\13"
+      "*~\13,\204\14,\213\14.\221\14/\227\14" "1\236\15" "2\244\15" "4\252\15"
+      "5\260" "\16" "7\267\16"
+      "8\275\17:\302\17;\310\17=\323\20?\323\21@\330\21D\335\21D"
+      "\342\22E\346\22I\353\23I\356\23K\362\24M\365\24N\370\25P\372\26R\374\26T"
+      "\376\26V\377\27X\377\27Z\377\30\\\376\31`\376\31`\375\32b\373\32d\371\33"
+      "f\366\34j\363\34j\360\35l\354\36n\350\36r\344\37r\337\40t\333\40w\326!y\321"
+      "\"|\314#~\307$\201\301$\204\267%\207\267&\212\261'\214\254(\217\247(\222"
+      "\241)\226\234*\231\227+\234\222,\237\216-\242\211.\245\205/\251\2010\254"
+      "}1\257z2\262w3\266t4\271p5\274m6\277j7\302f8\305c9\310`:\314\\;\317Y<\321"
+      "V>\324S?\327P@\332LA\335IB\337FC\342CE\344@F\347=G\351;I\3538I\3558M\357"
+      "3P\3610S\363.V\365+Y\366)\\\370'`\371%d\372#g\373\"l\374\40p\374\37t\374"
+      "\35t\375\34}\376\33\202\376\32\202\375\31\213\375\30\220\375\27\225\375\27"
+      "\232\373\26\237\372\25\244\371\24\251\370\23\256\367\23\262\367\22\267\364"
+      "\21\274\362\20\300\361\20\305\357\17\311\355\16\311\353\16\322\351\15\326"
+      "\346\15\332\346\14\336\344\14\341\337\13\341\335\13\350\332\12\353\330\11"
+      "\356\330\11\360\322\10\362\320\10\364\320\10\364\312\7\366\307\7\366\304"
+      "\7\367\302\6\367\277\6\370\274\5\367\271\5\367\271\5\367\263\4\365\260\4"
+      "\364\255\4\363\253\3\362\250\3\361\245\3\360\242\3\357\240\3\357\235\2\355"
+      "\232\2\355\227\2\354\225\2\353\221\1\353\216\1\353\216\1\353\213\1\353\204"
+      "\1\353\201\1\354}\1\354y\0\354v\0\355r\0\355n\0\355j\0\356f\0\356b\0\357"
+      "_\0\357[\0\357W\0\357S\0\360O\0\360O\0\361K\0\361C\0\362@\0\363<\0\3638\0"
+      "\3648\0\3641\0\365.\0\366+\0\366'\0\367'\0\370!\0\370\36\0\370\33\0\371\30"
+      "\0\371\26\0\373\26\0\373\23\0\374\15\0\374\13\0\375\10\0\375\5\0\376\3\0",
+};
+
+const GstGLEffectsCurve sepia_curve = {
+  256, 1, 3,
+  "\0\0\0\0\0\0\0\0\0\0\1\0\1\1\0\1\1\0\1\1\1\2\1\1\2\2\1\3\2\1\3\2\1\3\2\1"
+      "\4\3\2\4\3\2\4\3\2\6\4\2\6\4\2\6\4\2\7\5\2\7\5\3\11\6\3\11\6\3\12\7\3\13"
+      "\10\3\15\10\4\16\11\4\17\11\4\21\12\4\22\13\4\22\13\5\23\14\5\24\15\5\26"
+      "\16\6\31\20\6\31\21\6\32\22\7\34\22\7\35\23\7\40\24\10\40\26\10!\26\11#\30"
+      "\11&\31\12&\32\12'\34\13)\34\13*\37\13,\37\13-\40\14.\"\15" "0\"\15"
+      "2#\17" "" "3&\17" "4&\17" "5'\20" "8(\21"
+      "9)\21:*\23<,\23=-\23A.\24A0\25B0\25C2\26D3"
+      "\30H4\30H7\31K7\32K8\32L9\33M:\34P<\34Q=\35S>\37T?\37UA\40VB!XC!ZD#\\F#^"
+      "G#^J$`J&bK'bM'eM(fO)gP)iQ*kS,mT-mU-nV.oX/rY0sZ2u]2v]3w^3x`4za5{c7|c8~e8\177"
+      "f9\200i:\203i<\204j<\206k=\207m>\210n?\211o?\213qA\214rC\215sC\217uD\220"
+      "vD\221wF\223xG\224zH\225{J\227|K\230~K\231\177L\232\200M\234\202O\235\203"
+      "P\236\204Q\240\206Q\241\207S\242\210T\243\211U\245\213V\246\214X\247\215"
+      "Y\250\217Y\252\220Z\253\221\\\254\223]\254\224^\255\225`\257\227a\260\230"
+      "b\261\231c\262\232e\264\234e\265\235f\266\236g\267\240i\267\241i\272\242"
+      "k\273\243m\274\245n\274\246o\276\247q\277\250r\300\252s\301\253u\302\254"
+      "v\304\255w\305\257x\306\257z\306\261{\307\262|\310\264~\310\265\177\313\266"
+      "\200\314\267\202\315\267\203\316\272\204\317\273\206\317\274\207\320\276"
+      "\210\322\277\211\323\277\213\324\301\214\325\302\215\326\304\217\326\305"
+      "\220\327\306\221\327\307\223\331\310\224\333\311\225\334\311\227\334\313"
+      "\227\335\315\231\335\316\231\337\317\234\340\320\235\341\320\235\341\323"
+      "\240\342\324\241\343\324\242\343\326\243\345\327\245\345\330\245\346\331"
+      "\250\346\333\252\347\334\253\351\335\254\351\335\255\351\337\257\352\340"
+      "\260\353\341\260\354\342\262\355\343\264\355\344\265\355\345\266\356\346"
+      "\266\356\347\272\357\350\273\360\351\274\360\351\276\361\352\277\361\353"
+      "\300\362\353\301\362\354\302\362\355\304\362\356\305\364\357\305\364\357"
+      "\310\364\360\311\365\361\313\365\361\314\366\362\315\366\362\316\366\363"
+      "\316\367\364\320\367\364\320\367\365\324\367\365\324\370\366\326\370\366"
+      "\327\371\366\330\371\367\331\371\367\333\371\370\333\372\370\336\372\370"
+      "\336\372\371\340\373\371\341\373\372\342\373\372\343\374\372\344\374\373"
+      "\344\374\373\347\374\374\350\375\374\351\375\374\351\375\374\352\375\375"
+      "\352\376\375\353\376\376\355\376\376\356\376\376\357\377\377\357",
+};
+
+const GstGLEffectsCurve xray_curve = {
+  256, 1, 3,
+  "\377\377\377\377\377\377\376\376\376\375\375\376\374\375\375\373\374\375"
+      "\372\374\374\371\374\374\370\373\373\366\373\372\366\372\372\365\372\371"
+      "\363\371\371\363\371\370\362\370\370\360\370\367\360\367\366\357\367\365"
+      "\356\366\365\355\366\364\353\365\363\353\365\363\352\364\362\351\363\362"
+      "\347\363\361\346\362\361\345\362\361\344\362\360\343\361\357\343\361\356"
+      "\342\360\356\341\360\356\340\357\355\336\356\354\336\356\354\335\355\353"
+      "\334\355\353\333\355\352\331\354\351\331\353\351\330\353\350\327\353\350"
+      "\325\352\347\325\351\347\324\350\346\323\350\345\322\347\344\321\347\344"
+      "\320\347\344\317\346\343\316\346\342\315\345\341\314\344\341\313\344\340"
+      "\312\344\340\311\343\337\310\342\337\307\342\335\306\341\335\305\341\335"
+      "\303\340\334\303\337\333\302\337\333\301\337\332\300\336\331\276\335\331"
+      "\276\334\330\274\334\330\274\334\327\273\333\327\272\333\326\271\332\325"
+      "\270\332\325\267\331\324\266\330\323\265\330\323\264\327\322\263\327\321"
+      "\262\326\320\261\325\320\257\325\317\257\324\317\256\324\316\254\323\315"
+      "\254\322\315\253\322\314\252\321\313\251\321\313\250\320\312\246\317\311"
+      "\245\317\311\245\316\310\244\316\307\243\315\307\242\314\306\241\314\305"
+      "\240\312\305\237\312\304\236\312\303\235\311\303\234\311\302\233\307\301"
+      "\232\307\300\231\307\300\230\306\277\227\305\276\226\305\276\225\304\275"
+      "\224\303\274\223\303\273\222\302\273\221\301\272\220\301\271\217\300\270"
+      "\216\277\270\215\277\267\214\276\266\213\275\265\212\275\265\211\274\264"
+      "\210\273\263\207\273\262\206\272\262\205\271\261\204\270\260\203\270\257"
+      "\202\267\257\201\266\256\200\266\255\177\265\254~\264\253}\263\253|\263\252"
+      "{\262\251z\261\250y\260\247x\260\247w\257\246v\256\245u\255\244t\255\243"
+      "s\254\243r\253\242q\252\241p\252\240o\251\237n\250\236m\247\235l\246\235"
+      "l\246\235j\245\233i\244\232h\243\231g\242\230f\242\227e\241\226d\240\226"
+      "c\237\225b\236\224a\235\223`\234\222_\234\221_\233\220]\232\217\\\231\216"
+      "\\\230\215Z\227\214Y\226\214X\226\213W\225\212V\224\211U\223\210T\222\207"
+      "S\221\206R\221\205Q\217\204P\216\203O\215\202N\215\201M\214\200M\213\177"
+      "K\212~J\211}I\211|H\210|G\206zG\205zE\204xD\203vC\203vB\201tA\200s@\200q"
+      "@~p>}o>|o<{l<yk;xi9wh8wg8te6sd5qd4pa3n_2m]1k\\0j\\0hY.fW-dU,cT+aR*_P)_O("
+      "]M'YK'XI%VI$TF$RD\"OB!M@\40K?\37I=\37G=\35E9\34C9\34A5\33>5\31<2\31<0\27"
+      ":.\27" "5,\26" "3*\24"
+      "1*\23.&\22.&\22*\"\21'\40\17%\36\16\"\34\15\"\32\14"
+      "\36\32\13\33\26\13\31\24\11\26\22\11\24\20\7\24\16\6\21\16\5\14\14\4\12\10"
+      "\3\7\6\3\5\4\1\2\2",
+};
diff --git a/ext/gl/effects/gstgleffectscurves.h b/ext/gl/effects/gstgleffectscurves.h
index e0e98a5..9b566a5 100644
--- a/ext/gl/effects/gstgleffectscurves.h
+++ b/ext/gl/effects/gstgleffectscurves.h
@@ -21,6 +21,7 @@
 #ifndef __GST_GL_EFFECTS_TEXTURES_H__
 #define __GST_GL_EFFECTS_TEXTURES_H__
 
+#include <glib.h>
 
 struct _GstGLEffectsCurve {
   guint 	 width;
@@ -32,181 +33,15 @@
 typedef struct _GstGLEffectsCurve GstGLEffectsCurve;
 
 /* CURVE for the heat signature effect */
-static const GstGLEffectsCurve xpro_curve = {
-  256, 1, 3,
-  "\0\0\37\0\0\37\0\1\40\0\2!\0\2\"\0\3\"\1\4%\1\4%\1\5%\1\5'\1\7'\1\7(\1\7"
-  "(\1\10*\1\11+\1\11,\1\12,\1\13/\1\14/\1\14""1\2\15""1\2\15""1\2\16""4\2\17"
-  """4\3\17""5\3\22""7\3\22""7\3\23""8\3\24""9\3\25;\3\26;\3\27<\3\27=\4\31"
-  "=\4\33?\4\34@\5\34B\5\35C\5\36D\5\40D\5\40G\5!G\6\"H\6$H\7&J\7&K\7*M\7*M"
-  "\10+N\10-P\11-P\11/R\11""3R\11""3T\12""4U\12""5U\13""7W\14""8Y\14""9Y\14"
-  "<Y\16=[\16@^\16@^\17C^\17D`\20F`\20Jb\22Jb\22Kc\23Me\24Nf\25Qg\26Rg\27Ti"
-  "\27Wj\30Xl\31Yl\33\\m\34^p\35`p\40bp\40fq!fr$gt$lt%lu'mv(px*qy-ty/uz/x|0"
-  "y}3|}4}~5\177\2018\203\2019\203\201;\204\202=\207\203?\210\204@\214\204C"
-  "\214\206D\216\207G\217\210H\223\211K\223\211M\225\212P\226\214Q\231\215T"
-  "\232\215U\234\216X\235\217Y\240\220\\\241\220^\243\221`\244\223b\246\224"
-  "e\250\224f\252\225i\253\226l\255\227m\256\231p\261\231q\262\232t\264\233"
-  "v\265\234x\267\234z\270\235|\271\236~\274\240\201\275\240\202\277\241\204"
-  "\300\242\207\302\243\210\303\243\212\305\244\214\306\245\216\307\246\220"
-  "\311\250\221\313\250\224\315\251\226\316\252\227\317\253\232\321\253\234"
-  "\322\254\235\323\255\240\325\256\242\326\256\242\330\256\245\331\261\250"
-  "\331\262\251\332\262\253\334\263\255\335\264\256\336\265\261\340\266\263"
-  "\341\266\264\342\267\266\343\270\270\344\271\271\344\271\271\346\273\276"
-  "\347\274\277\350\275\277\351\275\302\352\276\304\353\277\306\353\300\307"
-  "\355\300\311\356\301\314\356\302\315\357\303\317\360\304\320\360\304\322"
-  "\361\305\323\362\306\325\362\307\327\363\307\330\363\310\330\364\311\333"
-  "\364\313\334\365\313\336\365\314\340\365\314\342\366\316\342\366\316\346"
-  "\367\317\347\367\320\351\367\320\353\370\322\354\370\322\356\370\323\356"
-  "\370\324\360\371\325\360\371\325\363\371\326\363\371\327\363\372\330\365"
-  "\372\330\366\372\331\366\372\331\370\372\332\371\373\332\371\373\333\372"
-  "\373\334\373\373\335\373\373\336\374\373\336\374\374\337\374\374\340\375"
-  "\374\341\375\374\341\376\374\342\376\374\343\376\374\344\376\374\344\377"
-  "\374\345\377\374\346\377\375\346\377\375\346\377\375\347\377\375\350\377"
-  "\375\351\377\375\352\377\375\352\377\375\352\377\375\353\377\375\353\377"
-  "\376\354\377\376\354\377\376\356\377\376\356\377\376\356\377\376\357\377"
-  "\376\360\377\376\360\377\376\360\377\376\360\377\376\362\377\376\362\377"
-  "\376\363\377\376\363\377\376\363\377\376\363\377\376\364\377\376\364\377"
-  "\376\365\377\377\365\377\377\366\377\377\366\377\377\366\377\377\367\377"
-  "\377\367\377\377\367\377\377\370",
-};
+extern const GstGLEffectsCurve xpro_curve;
 
-static const GstGLEffectsCurve luma_xpro_curve = {
-  256, 1, 3,
-  "\0\0\1\0\1\1\0\1\2\0\1\2\0\1\2\0\1\2\0\1\3\0\2\3\0\2\4\0\2\4\0\2\5\0\2\6"
-  "\0\3\6\0\3\6\0\3\7\0\3\10\0\4\10\0\4\11\0\4\12\0\4\12\1\4\13\1\5\14\1\5\15"
-  "\1\5\15\1\5\16\1\5\17\1\6\17\1\6\20\1\7\21\1\7\23\2\10\23\2\10\24\2\10\24"
-  "\2\11\26\2\11\27\2\11\30\3\11\31\3\12\31\3\13\32\3\13\33\4\13\34\4\14\35"
-  "\4\14\36\4\15\37\5\15\40\5\15\"\6\16#\6\17#\6\20$\7\20%\7\20%\10\21&\10\22"
-  "'\10\22)\11\24*\11\24*\12\24+\12\26.\13\26.\14\27.\14\30/\15\31""1\15\31"
-  """2\16\32""3\16\33""3\20\33""5\20\35""6\20\36""7\22\37""7\23\"9\23#9\24$"
-  ":\25$<\27&<\27'=\31'?\31)?\32*@\35+B\35-C\36.C\37""1E\"2F#3H$5H&6I'7I)7K"
-  "+:M-<N-<N1@N1BQ2BQ6CQ6EU7HU<IU=IV@NX@NXBQZCS[FU[HU]IV_MZ_N[_Q]`S_bU`dXbe"
-  "Zbe]gg]ig`ji`jjdljenlgpljqnpwppwpqxqszqw|sx}u|\201u}\203w\177\204x\177\206"
-  "x\204\210x\204\212z\212\213|\212\217}\217\221}\221\222}\222\224\177\226\224"
-  "\201\226\226\203\230\233\203\235\235\204\236\235\204\236\236\210\244\242"
-  "\210\244\242\210\245\244\212\251\245\213\252\251\213\254\252\215\257\254"
-  "\215\261\256\217\261\257\221\266\261\221\267\261\222\273\264\224\273\267"
-  "\224\274\267\224\276\273\230\301\273\230\302\274\231\304\276\231\307\302"
-  "\233\312\302\235\312\304\235\314\306\236\316\307\240\320\311\240\321\314"
-  "\242\324\315\242\325\316\244\327\320\245\332\321\245\333\321\245\334\323"
-  "\251\335\325\251\335\330\252\341\332\254\341\332\256\344\334\256\346\334"
-  "\256\347\337\257\347\340\261\350\340\263\351\342\263\352\344\264\354\345"
-  "\266\355\346\266\356\347\267\357\350\271\360\351\273\361\352\273\362\352"
-  "\274\362\355\276\364\356\277\364\357\277\365\360\277\365\360\302\366\361"
-  "\302\367\361\304\370\363\304\370\363\307\370\364\307\371\364\311\371\366"
-  "\312\372\367\312\372\367\314\372\367\316\373\370\316\373\370\320\373\371"
-  "\320\374\371\321\374\372\323\374\372\324\375\372\325\375\372\325\375\373"
-  "\327\375\373\330\375\374\332\375\374\333\375\375\334\376\375\334\376\375"
-  "\335\376\375\337\376\375\337\376\375\340\376\376\342\376\376\344\376\376"
-  "\344\376\376\345\376\376\346\376\376\347\376\376\350\377\376\351\377\377"
-  "\353\377\377\354\377\377\356\377\377\357\377\377\361\377\377\361\377\377"
-  "\361\377\377\364\377\377\365\377\377\366\377\377\367\377\377\367\377\377"
-  "\371\377\377\371\377\377\372\377\377\373\377\377\373\377\377\374\377\377"
-  "\375\377\377\375\377\377\375\377\377\376",
-};
+extern const GstGLEffectsCurve luma_xpro_curve;
 
 /* CURVE for the heat signature effect */
-static const GstGLEffectsCurve heat_curve = {
-  256, 1, 3,
-  "\0\0\0\0\0\0\0\1\0\0\1\0\0\1\1\0\2\1\0\2\1\1\2\1\1\2\2\1\2\2\1\3\2\1\3\3"
-  "\1\3\3\1\4\3\1\4\4\1\5\4\1\5\5\2\5\6\2\6\6\2\6\7\2\6\7\2\7\7\2\7\11\2\10"
-  "\11\2\10\12\3\11\13\3\11\13\3\11\14\3\12\15\3\12\17\3\13\17\3\14\20\3\14"
-  "\22\4\15\23\4\16\24\4\16\26\4\16\27\4\17\31\4\20\34\4\21\34\5\21\40\5\22"
-  "\40\5\22$\5\23$\5\25&\6\25(\6\26-\6\26-\6\27""0\6\31""2\7\31""5\7\32;\7\34"
-  ";\7\34?\10\35C\10\36G\10\37L\10\40V\11!V\11\"[\11$a\11&l\12&l\12'r\12(~\13"
-  "*~\13,\204\14,\213\14.\221\14/\227\14""1\236\15""2\244\15""4\252\15""5\260"
-  "\16""7\267\16""8\275\17:\302\17;\310\17=\323\20?\323\21@\330\21D\335\21D"
-  "\342\22E\346\22I\353\23I\356\23K\362\24M\365\24N\370\25P\372\26R\374\26T"
-  "\376\26V\377\27X\377\27Z\377\30\\\376\31`\376\31`\375\32b\373\32d\371\33"
-  "f\366\34j\363\34j\360\35l\354\36n\350\36r\344\37r\337\40t\333\40w\326!y\321"
-  "\"|\314#~\307$\201\301$\204\267%\207\267&\212\261'\214\254(\217\247(\222"
-  "\241)\226\234*\231\227+\234\222,\237\216-\242\211.\245\205/\251\2010\254"
-  "}1\257z2\262w3\266t4\271p5\274m6\277j7\302f8\305c9\310`:\314\\;\317Y<\321"
-  "V>\324S?\327P@\332LA\335IB\337FC\342CE\344@F\347=G\351;I\3538I\3558M\357"
-  "3P\3610S\363.V\365+Y\366)\\\370'`\371%d\372#g\373\"l\374\40p\374\37t\374"
-  "\35t\375\34}\376\33\202\376\32\202\375\31\213\375\30\220\375\27\225\375\27"
-  "\232\373\26\237\372\25\244\371\24\251\370\23\256\367\23\262\367\22\267\364"
-  "\21\274\362\20\300\361\20\305\357\17\311\355\16\311\353\16\322\351\15\326"
-  "\346\15\332\346\14\336\344\14\341\337\13\341\335\13\350\332\12\353\330\11"
-  "\356\330\11\360\322\10\362\320\10\364\320\10\364\312\7\366\307\7\366\304"
-  "\7\367\302\6\367\277\6\370\274\5\367\271\5\367\271\5\367\263\4\365\260\4"
-  "\364\255\4\363\253\3\362\250\3\361\245\3\360\242\3\357\240\3\357\235\2\355"
-  "\232\2\355\227\2\354\225\2\353\221\1\353\216\1\353\216\1\353\213\1\353\204"
-  "\1\353\201\1\354}\1\354y\0\354v\0\355r\0\355n\0\355j\0\356f\0\356b\0\357"
-  "_\0\357[\0\357W\0\357S\0\360O\0\360O\0\361K\0\361C\0\362@\0\363<\0\3638\0"
-  "\3648\0\3641\0\365.\0\366+\0\366'\0\367'\0\370!\0\370\36\0\370\33\0\371\30"
-  "\0\371\26\0\373\26\0\373\23\0\374\15\0\374\13\0\375\10\0\375\5\0\376\3\0",
-};
+extern const GstGLEffectsCurve heat_curve;
 
-static const GstGLEffectsCurve sepia_curve = {
-  256, 1, 3,
-  "\0\0\0\0\0\0\0\0\0\0\1\0\1\1\0\1\1\0\1\1\1\2\1\1\2\2\1\3\2\1\3\2\1\3\2\1"
-  "\4\3\2\4\3\2\4\3\2\6\4\2\6\4\2\6\4\2\7\5\2\7\5\3\11\6\3\11\6\3\12\7\3\13"
-  "\10\3\15\10\4\16\11\4\17\11\4\21\12\4\22\13\4\22\13\5\23\14\5\24\15\5\26"
-  "\16\6\31\20\6\31\21\6\32\22\7\34\22\7\35\23\7\40\24\10\40\26\10!\26\11#\30"
-  "\11&\31\12&\32\12'\34\13)\34\13*\37\13,\37\13-\40\14.\"\15""0\"\15""2#\17"
-  """3&\17""4&\17""5'\20""8(\21""9)\21:*\23<,\23=-\23A.\24A0\25B0\25C2\26D3"
-  "\30H4\30H7\31K7\32K8\32L9\33M:\34P<\34Q=\35S>\37T?\37UA\40VB!XC!ZD#\\F#^"
-  "G#^J$`J&bK'bM'eM(fO)gP)iQ*kS,mT-mU-nV.oX/rY0sZ2u]2v]3w^3x`4za5{c7|c8~e8\177"
-  "f9\200i:\203i<\204j<\206k=\207m>\210n?\211o?\213qA\214rC\215sC\217uD\220"
-  "vD\221wF\223xG\224zH\225{J\227|K\230~K\231\177L\232\200M\234\202O\235\203"
-  "P\236\204Q\240\206Q\241\207S\242\210T\243\211U\245\213V\246\214X\247\215"
-  "Y\250\217Y\252\220Z\253\221\\\254\223]\254\224^\255\225`\257\227a\260\230"
-  "b\261\231c\262\232e\264\234e\265\235f\266\236g\267\240i\267\241i\272\242"
-  "k\273\243m\274\245n\274\246o\276\247q\277\250r\300\252s\301\253u\302\254"
-  "v\304\255w\305\257x\306\257z\306\261{\307\262|\310\264~\310\265\177\313\266"
-  "\200\314\267\202\315\267\203\316\272\204\317\273\206\317\274\207\320\276"
-  "\210\322\277\211\323\277\213\324\301\214\325\302\215\326\304\217\326\305"
-  "\220\327\306\221\327\307\223\331\310\224\333\311\225\334\311\227\334\313"
-  "\227\335\315\231\335\316\231\337\317\234\340\320\235\341\320\235\341\323"
-  "\240\342\324\241\343\324\242\343\326\243\345\327\245\345\330\245\346\331"
-  "\250\346\333\252\347\334\253\351\335\254\351\335\255\351\337\257\352\340"
-  "\260\353\341\260\354\342\262\355\343\264\355\344\265\355\345\266\356\346"
-  "\266\356\347\272\357\350\273\360\351\274\360\351\276\361\352\277\361\353"
-  "\300\362\353\301\362\354\302\362\355\304\362\356\305\364\357\305\364\357"
-  "\310\364\360\311\365\361\313\365\361\314\366\362\315\366\362\316\366\363"
-  "\316\367\364\320\367\364\320\367\365\324\367\365\324\370\366\326\370\366"
-  "\327\371\366\330\371\367\331\371\367\333\371\370\333\372\370\336\372\370"
-  "\336\372\371\340\373\371\341\373\372\342\373\372\343\374\372\344\374\373"
-  "\344\374\373\347\374\374\350\375\374\351\375\374\351\375\374\352\375\375"
-  "\352\376\375\353\376\376\355\376\376\356\376\376\357\377\377\357",
-};
+extern const GstGLEffectsCurve sepia_curve;
 
-static const GstGLEffectsCurve xray_curve = {
-  256, 1, 3,
-  "\377\377\377\377\377\377\376\376\376\375\375\376\374\375\375\373\374\375"
-  "\372\374\374\371\374\374\370\373\373\366\373\372\366\372\372\365\372\371"
-  "\363\371\371\363\371\370\362\370\370\360\370\367\360\367\366\357\367\365"
-  "\356\366\365\355\366\364\353\365\363\353\365\363\352\364\362\351\363\362"
-  "\347\363\361\346\362\361\345\362\361\344\362\360\343\361\357\343\361\356"
-  "\342\360\356\341\360\356\340\357\355\336\356\354\336\356\354\335\355\353"
-  "\334\355\353\333\355\352\331\354\351\331\353\351\330\353\350\327\353\350"
-  "\325\352\347\325\351\347\324\350\346\323\350\345\322\347\344\321\347\344"
-  "\320\347\344\317\346\343\316\346\342\315\345\341\314\344\341\313\344\340"
-  "\312\344\340\311\343\337\310\342\337\307\342\335\306\341\335\305\341\335"
-  "\303\340\334\303\337\333\302\337\333\301\337\332\300\336\331\276\335\331"
-  "\276\334\330\274\334\330\274\334\327\273\333\327\272\333\326\271\332\325"
-  "\270\332\325\267\331\324\266\330\323\265\330\323\264\327\322\263\327\321"
-  "\262\326\320\261\325\320\257\325\317\257\324\317\256\324\316\254\323\315"
-  "\254\322\315\253\322\314\252\321\313\251\321\313\250\320\312\246\317\311"
-  "\245\317\311\245\316\310\244\316\307\243\315\307\242\314\306\241\314\305"
-  "\240\312\305\237\312\304\236\312\303\235\311\303\234\311\302\233\307\301"
-  "\232\307\300\231\307\300\230\306\277\227\305\276\226\305\276\225\304\275"
-  "\224\303\274\223\303\273\222\302\273\221\301\272\220\301\271\217\300\270"
-  "\216\277\270\215\277\267\214\276\266\213\275\265\212\275\265\211\274\264"
-  "\210\273\263\207\273\262\206\272\262\205\271\261\204\270\260\203\270\257"
-  "\202\267\257\201\266\256\200\266\255\177\265\254~\264\253}\263\253|\263\252"
-  "{\262\251z\261\250y\260\247x\260\247w\257\246v\256\245u\255\244t\255\243"
-  "s\254\243r\253\242q\252\241p\252\240o\251\237n\250\236m\247\235l\246\235"
-  "l\246\235j\245\233i\244\232h\243\231g\242\230f\242\227e\241\226d\240\226"
-  "c\237\225b\236\224a\235\223`\234\222_\234\221_\233\220]\232\217\\\231\216"
-  "\\\230\215Z\227\214Y\226\214X\226\213W\225\212V\224\211U\223\210T\222\207"
-  "S\221\206R\221\205Q\217\204P\216\203O\215\202N\215\201M\214\200M\213\177"
-  "K\212~J\211}I\211|H\210|G\206zG\205zE\204xD\203vC\203vB\201tA\200s@\200q"
-  "@~p>}o>|o<{l<yk;xi9wh8wg8te6sd5qd4pa3n_2m]1k\\0j\\0hY.fW-dU,cT+aR*_P)_O("
-  "]M'YK'XI%VI$TF$RD\"OB!M@\40K?\37I=\37G=\35E9\34C9\34A5\33>5\31<2\31<0\27"
-  ":.\27""5,\26""3*\24""1*\23.&\22.&\22*\"\21'\40\17%\36\16\"\34\15\"\32\14"
-  "\36\32\13\33\26\13\31\24\11\26\22\11\24\20\7\24\16\6\21\16\5\14\14\4\12\10"
-  "\3\7\6\3\5\4\1\2\2",
-};
+extern const GstGLEffectsCurve xray_curve;
 
 #endif
diff --git a/ext/gl/effects/gstgleffectssources.c b/ext/gl/effects/gstgleffectssources.c
index 3da856c..6bdc155 100644
--- a/ext/gl/effects/gstgleffectssources.c
+++ b/ext/gl/effects/gstgleffectssources.c
@@ -152,7 +152,7 @@
   "  vec2 normcoord;"
   "  normcoord = texturecoord - 0.5;"
   "  float r = length (normcoord);"
-  "  normcoord *= r * sqrt(2);"
+  "  normcoord *= r * 1.41421;" /* sqrt (2) */
   "  texturecoord = normcoord + 0.5;"
   "  gl_FragColor = texture2D (tex, texturecoord);"
   "}";
diff --git a/ext/gl/gstglbasemixer.c b/ext/gl/gstglbasemixer.c
index 3bad769..d207883 100644
--- a/ext/gl/gstglbasemixer.c
+++ b/ext/gl/gstglbasemixer.c
@@ -320,6 +320,8 @@
 
   if (mix->display)
     gst_gl_display_filter_gl_api (mix->display, mix_class->supported_gl_api);
+
+  GST_ELEMENT_CLASS (parent_class)->set_context (element, context);
 }
 
 static gboolean
@@ -487,11 +489,31 @@
     GST_OBJECT_UNLOCK (mix->display);
   }
 
+  {
+    GstGLAPI current_gl_api = gst_gl_context_get_gl_api (mix->context);
+    if ((current_gl_api & mix_class->supported_gl_api) == 0)
+      goto unsupported_gl_api;
+  }
+
   if (mix_class->decide_allocation)
     ret = mix_class->decide_allocation (mix, query);
 
   return ret;
 
+unsupported_gl_api:
+  {
+    GstGLAPI gl_api = gst_gl_context_get_gl_api (mix->context);
+    gchar *gl_api_str = gst_gl_api_to_string (gl_api);
+    gchar *supported_gl_api_str =
+        gst_gl_api_to_string (mix_class->supported_gl_api);
+    GST_ELEMENT_ERROR (mix, RESOURCE, BUSY,
+        ("GL API's not compatible context: %s supported: %s", gl_api_str,
+            supported_gl_api_str), (NULL));
+
+    g_free (supported_gl_api_str);
+    g_free (gl_api_str);
+    return FALSE;
+  }
 context_error:
   {
     GST_ELEMENT_ERROR (mix, RESOURCE, NOT_FOUND, ("%s", error->message),
diff --git a/ext/gl/gstglcolorbalance.c b/ext/gl/gstglcolorbalance.c
new file mode 100644
index 0000000..27dcb00
--- /dev/null
+++ b/ext/gl/gstglcolorbalance.c
@@ -0,0 +1,557 @@
+/* GStreamer
+ * Copyright (C) <2016> Matthew Waters <matthew@centricular.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+/*
+ * This file was modified from videobalance and converted to OpenGL
+ */
+
+/**
+ * SECTION:element-glcolorbalance
+ *
+ * Adjusts brightness, contrast, hue, saturation on a video stream.
+ *
+ * <refsect2>
+ * <title>Example launch line</title>
+ * |[
+ * gst-launch-1.0 videotestsrc ! glupload ! glcolorbalance saturation=0.0 ! glcolorconvert ! gldownload ! ximagesink
+ * ]| This pipeline converts the image to black and white by setting the
+ * saturation to 0.0.
+ * </refsect2>
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <gst/math-compat.h>
+
+#include "gstglcolorbalance.h"
+#include <string.h>
+
+#include <gst/video/colorbalance.h>
+
+GST_DEBUG_CATEGORY_STATIC (glcolorbalance_debug);
+#define GST_CAT_DEFAULT glcolorbalance_debug
+
+/* GstGLColorBalance properties */
+#define DEFAULT_PROP_CONTRAST       1.0
+#define DEFAULT_PROP_BRIGHTNESS	    0.0
+#define DEFAULT_PROP_HUE            0.0
+#define DEFAULT_PROP_SATURATION	    1.0
+
+/* *INDENT-OFF* */
+static const gchar *color_balance_frag =
+  "#ifdef GL_ES\n"
+  "precision mediump float;\n"
+  "#endif\n"
+  "uniform float brightness;\n"
+  "uniform float contrast;\n"
+  "uniform float saturation;\n"
+  "uniform float hue;\n"
+  "varying vec2 v_texcoord;\n"
+  "uniform sampler2D tex;\n"
+  "#define from_yuv_bt601_offset vec3(-0.0625, -0.5, -0.5)\n"
+  "#define from_yuv_bt601_rcoeff vec3(1.164, 0.000, 1.596)\n"
+  "#define from_yuv_bt601_gcoeff vec3(1.164,-0.391,-0.813)\n"
+  "#define from_yuv_bt601_bcoeff vec3(1.164, 2.018, 0.000)\n"
+  "#define from_rgb_bt601_offset vec3(0.0625, 0.5, 0.5)\n"
+  "#define from_rgb_bt601_ycoeff vec3(0.256816, 0.504154, 0.0979137)\n"
+  "#define from_rgb_bt601_ucoeff vec3(-0.148246, -0.29102, 0.439266)\n"
+  "#define from_rgb_bt601_vcoeff vec3(0.439271, -0.367833, -0.071438)\n"
+  "#define PI 3.14159265\n"
+  "\n"
+  "vec3 yuv_to_rgb (vec3 val) {\n"
+  "  vec3 rgb;\n"
+  "  val += from_yuv_bt601_offset;\n"
+  "  rgb.r = dot(val, from_yuv_bt601_rcoeff);\n"
+  "  rgb.g = dot(val, from_yuv_bt601_gcoeff);\n"
+  "  rgb.b = dot(val, from_yuv_bt601_bcoeff);\n"
+  "  return rgb;\n"
+  "}\n"
+  "vec3 rgb_to_yuv (vec3 val) {\n"
+  "  vec3 yuv;\n"
+  "  yuv.r = dot(val.rgb, from_rgb_bt601_ycoeff);\n"
+  "  yuv.g = dot(val.rgb, from_rgb_bt601_ucoeff);\n"
+  "  yuv.b = dot(val.rgb, from_rgb_bt601_vcoeff);\n"
+  "  yuv += from_rgb_bt601_offset;\n"
+  "  return yuv;\n"
+  "}\n"
+  /* 224 = 256 - (256 - 240) - 16*/
+  "float luma_to_narrow (float luma) {\n"
+  "  return (luma + 16.0 / 256.0) * 219.0 / 256.0;"
+  "}\n"
+  "float luma_to_full (float luma) {\n"
+  "  return (luma * 256.0 / 219.0) - 16.0 / 256.0;"
+  "}\n"
+  "void main () {\n"
+  "  vec3 yuv;\n"
+  /* operations translated from videobalanceand tested with glvideomixer
+   * with one pad's paremeters blend-equation-rgb={subtract,reverse-subtract},
+   * blend-function-src-rgb=src-color and blend-function-dst-rgb=dst-color */
+  "  float hue_cos = cos (PI * hue);\n"
+  "  float hue_sin = sin (PI * hue);\n"
+  "  vec4 rgba = texture2D (tex, v_texcoord);\n"
+  "  yuv = rgb_to_yuv (rgba.rgb);\n"
+  "  yuv.x = clamp (luma_to_narrow (luma_to_full(yuv.x) * contrast) + brightness, 0.0, 1.0);\n"
+  "  vec2 uv = yuv.yz;\n"
+  "  yuv.y = clamp (0.5 + (((uv.x - 0.5) * hue_cos + (uv.y - 0.5) * hue_sin) * saturation), 0.0, 1.0);\n"
+  "  yuv.z = clamp (0.5 + (((0.5 - uv.x) * hue_sin + (uv.y - 0.5) * hue_cos) * saturation), 0.0, 1.0);\n"
+  "  rgba.rgb = yuv_to_rgb (yuv);\n"
+  "  gl_FragColor = rgba;\n"
+  "}\n";
+/* *INDENT-ON* */
+
+enum
+{
+  PROP_0,
+  PROP_CONTRAST,
+  PROP_BRIGHTNESS,
+  PROP_HUE,
+  PROP_SATURATION
+};
+
+static void gst_gl_color_balance_colorbalance_init (GstColorBalanceInterface *
+    iface);
+
+static void gst_gl_color_balance_set_property (GObject * object, guint prop_id,
+    const GValue * value, GParamSpec * pspec);
+static void gst_gl_color_balance_get_property (GObject * object, guint prop_id,
+    GValue * value, GParamSpec * pspec);
+
+#define gst_gl_color_balance_parent_class parent_class
+G_DEFINE_TYPE_WITH_CODE (GstGLColorBalance, gst_gl_color_balance,
+    GST_TYPE_GL_FILTER,
+    G_IMPLEMENT_INTERFACE (GST_TYPE_COLOR_BALANCE,
+        gst_gl_color_balance_colorbalance_init));
+
+static gboolean
+gst_gl_color_balance_is_passthrough (GstGLColorBalance * glcolorbalance)
+{
+  return glcolorbalance->contrast == 1.0 &&
+      glcolorbalance->brightness == 0.0 &&
+      glcolorbalance->hue == 0.0 && glcolorbalance->saturation == 1.0;
+}
+
+static void
+gst_gl_color_balance_update_properties (GstGLColorBalance * glcolorbalance)
+{
+  gboolean passthrough;
+  GstBaseTransform *base = GST_BASE_TRANSFORM (glcolorbalance);
+
+  GST_OBJECT_LOCK (glcolorbalance);
+  passthrough = gst_gl_color_balance_is_passthrough (glcolorbalance);
+  GST_OBJECT_UNLOCK (glcolorbalance);
+
+  gst_base_transform_set_passthrough (base, passthrough);
+}
+
+static gboolean
+_create_shader (GstGLColorBalance * balance)
+{
+  GstGLBaseFilter *base_filter = GST_GL_BASE_FILTER (balance);
+  GstGLFilter *filter = GST_GL_FILTER (balance);
+  GError *error = NULL;
+
+  if (balance->shader)
+    gst_object_unref (balance->shader);
+
+  if (!(balance->shader =
+          gst_gl_shader_new_link_with_stages (base_filter->context, &error,
+              gst_glsl_stage_new_default_vertex (base_filter->context),
+              gst_glsl_stage_new_with_string (base_filter->context,
+                  GL_FRAGMENT_SHADER, GST_GLSL_VERSION_NONE,
+                  GST_GLSL_PROFILE_ES | GST_GLSL_PROFILE_COMPATIBILITY,
+                  color_balance_frag), NULL))) {
+    GST_ELEMENT_ERROR (balance, RESOURCE, NOT_FOUND, ("%s",
+            "Failed to initialize colorbalance shader"), ("%s",
+            error ? error->message : "Unknown error"));
+    return FALSE;
+  }
+
+  filter->draw_attr_position_loc =
+      gst_gl_shader_get_attribute_location (balance->shader, "a_position");
+  filter->draw_attr_texture_loc =
+      gst_gl_shader_get_attribute_location (balance->shader, "a_texcoord");
+
+  return TRUE;
+}
+
+static gboolean
+gst_gl_color_balance_gl_start (GstGLBaseFilter * base_filter)
+{
+  GstGLColorBalance *balance = GST_GL_COLOR_BALANCE (base_filter);
+
+  if (!_create_shader (balance))
+    return FALSE;
+
+  return GST_GL_BASE_FILTER_CLASS (parent_class)->gl_start (base_filter);
+}
+
+static void
+gst_gl_color_balance_gl_stop (GstGLBaseFilter * base_filter)
+{
+  GstGLColorBalance *balance = GST_GL_COLOR_BALANCE (base_filter);
+
+  if (balance->shader)
+    gst_object_unref (balance->shader);
+  balance->shader = NULL;
+
+  GST_GL_BASE_FILTER_CLASS (parent_class)->gl_stop (base_filter);
+}
+
+static void
+gst_gl_color_balance_before_transform (GstBaseTransform * base, GstBuffer * buf)
+{
+  GstGLColorBalance *balance = GST_GL_COLOR_BALANCE (base);
+  GstClockTime timestamp, stream_time;
+
+  timestamp = GST_BUFFER_TIMESTAMP (buf);
+  stream_time =
+      gst_segment_to_stream_time (&base->segment, GST_FORMAT_TIME, timestamp);
+
+  GST_DEBUG_OBJECT (balance, "sync to %" GST_TIME_FORMAT,
+      GST_TIME_ARGS (timestamp));
+
+  if (GST_CLOCK_TIME_IS_VALID (stream_time))
+    gst_object_sync_values (GST_OBJECT (balance), stream_time);
+}
+
+static void
+gst_gl_color_balance_callback (gint width, gint height, guint tex_id,
+    gpointer data)
+{
+  GstGLColorBalance *balance = GST_GL_COLOR_BALANCE (data);
+  GstGLFilter *filter = GST_GL_FILTER (data);
+  const GstGLFuncs *gl = GST_GL_BASE_FILTER (data)->context->gl_vtable;
+
+  if (!balance->shader)
+    _create_shader (balance);
+
+  gst_gl_shader_use (balance->shader);
+  GST_OBJECT_LOCK (balance);
+  gst_gl_shader_set_uniform_1f (balance->shader, "brightness",
+      balance->brightness);
+  gst_gl_shader_set_uniform_1f (balance->shader, "contrast", balance->contrast);
+  gst_gl_shader_set_uniform_1f (balance->shader, "saturation",
+      balance->saturation);
+  gst_gl_shader_set_uniform_1f (balance->shader, "hue", balance->hue);
+  GST_OBJECT_UNLOCK (balance);
+
+  gl->BindTexture (GL_TEXTURE_2D, tex_id);
+
+  gst_gl_filter_draw_texture (filter, tex_id, width, height);
+}
+
+static gboolean
+gst_gl_color_balance_filter_texture (GstGLFilter * filter, guint in_tex,
+    guint out_tex)
+{
+  gst_gl_filter_render_to_target (filter, TRUE, in_tex, out_tex,
+      (GLCB) gst_gl_color_balance_callback, filter);
+
+  return TRUE;
+}
+
+static void
+gst_gl_color_balance_finalize (GObject * object)
+{
+  GstGLColorBalance *balance = GST_GL_COLOR_BALANCE (object);
+  GList *channels = NULL;
+
+  channels = balance->channels;
+  while (channels) {
+    GstColorBalanceChannel *channel = channels->data;
+
+    g_object_unref (channel);
+    channels->data = NULL;
+    channels = g_list_next (channels);
+  }
+
+  if (balance->channels)
+    g_list_free (balance->channels);
+
+  G_OBJECT_CLASS (parent_class)->finalize (object);
+}
+
+static void
+gst_gl_color_balance_class_init (GstGLColorBalanceClass * klass)
+{
+  GObjectClass *gobject_class = (GObjectClass *) klass;
+  GstElementClass *gstelement_class = (GstElementClass *) klass;
+  GstBaseTransformClass *trans_class = (GstBaseTransformClass *) klass;
+  GstGLBaseFilterClass *base_filter_class = (GstGLBaseFilterClass *) klass;
+  GstGLFilterClass *filter_class = (GstGLFilterClass *) klass;
+
+  GST_DEBUG_CATEGORY_INIT (glcolorbalance_debug, "glcolorbalance", 0,
+      "glcolorbalance");
+
+  gobject_class->finalize = gst_gl_color_balance_finalize;
+  gobject_class->set_property = gst_gl_color_balance_set_property;
+  gobject_class->get_property = gst_gl_color_balance_get_property;
+
+  g_object_class_install_property (gobject_class, PROP_CONTRAST,
+      g_param_spec_double ("contrast", "Contrast", "contrast",
+          0.0, 2.0, DEFAULT_PROP_CONTRAST,
+          GST_PARAM_CONTROLLABLE | G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+  g_object_class_install_property (gobject_class, PROP_BRIGHTNESS,
+      g_param_spec_double ("brightness", "Brightness", "brightness", -1.0, 1.0,
+          DEFAULT_PROP_BRIGHTNESS,
+          GST_PARAM_CONTROLLABLE | G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+  g_object_class_install_property (gobject_class, PROP_HUE,
+      g_param_spec_double ("hue", "Hue", "hue", -1.0, 1.0, DEFAULT_PROP_HUE,
+          GST_PARAM_CONTROLLABLE | G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+  g_object_class_install_property (gobject_class, PROP_SATURATION,
+      g_param_spec_double ("saturation", "Saturation", "saturation", 0.0, 2.0,
+          DEFAULT_PROP_SATURATION,
+          GST_PARAM_CONTROLLABLE | G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+
+  gst_element_class_set_static_metadata (gstelement_class, "Video balance",
+      "Filter/Effect/Video",
+      "Adjusts brightness, contrast, hue, saturation on a video stream",
+      "Matthew Waters <matthew@centricular.com>");
+
+  trans_class->before_transform =
+      GST_DEBUG_FUNCPTR (gst_gl_color_balance_before_transform);
+  trans_class->transform_ip_on_passthrough = FALSE;
+
+  base_filter_class->gl_start =
+      GST_DEBUG_FUNCPTR (gst_gl_color_balance_gl_start);
+  base_filter_class->gl_stop = GST_DEBUG_FUNCPTR (gst_gl_color_balance_gl_stop);
+
+  filter_class->filter_texture =
+      GST_DEBUG_FUNCPTR (gst_gl_color_balance_filter_texture);
+}
+
+static void
+gst_gl_color_balance_init (GstGLColorBalance * glcolorbalance)
+{
+  const gchar *channels[4] = { "HUE", "SATURATION",
+    "BRIGHTNESS", "CONTRAST"
+  };
+  gint i;
+
+  /* Initialize propertiews */
+  glcolorbalance->contrast = DEFAULT_PROP_CONTRAST;
+  glcolorbalance->brightness = DEFAULT_PROP_BRIGHTNESS;
+  glcolorbalance->hue = DEFAULT_PROP_HUE;
+  glcolorbalance->saturation = DEFAULT_PROP_SATURATION;
+
+  gst_gl_color_balance_update_properties (glcolorbalance);
+
+  /* Generate the channels list */
+  for (i = 0; i < G_N_ELEMENTS (channels); i++) {
+    GstColorBalanceChannel *channel;
+
+    channel = g_object_new (GST_TYPE_COLOR_BALANCE_CHANNEL, NULL);
+    channel->label = g_strdup (channels[i]);
+    channel->min_value = -1000;
+    channel->max_value = 1000;
+
+    glcolorbalance->channels =
+        g_list_append (glcolorbalance->channels, channel);
+  }
+}
+
+static const GList *
+gst_gl_color_balance_colorbalance_list_channels (GstColorBalance * balance)
+{
+  GstGLColorBalance *glcolorbalance = GST_GL_COLOR_BALANCE (balance);
+
+  g_return_val_if_fail (glcolorbalance != NULL, NULL);
+  g_return_val_if_fail (GST_IS_GL_COLOR_BALANCE (glcolorbalance), NULL);
+
+  return glcolorbalance->channels;
+}
+
+static void
+gst_gl_color_balance_colorbalance_set_value (GstColorBalance * balance,
+    GstColorBalanceChannel * channel, gint value)
+{
+  GstGLColorBalance *vb = GST_GL_COLOR_BALANCE (balance);
+  gdouble new_val;
+  gboolean changed = FALSE;
+
+  g_return_if_fail (vb != NULL);
+  g_return_if_fail (GST_IS_GL_COLOR_BALANCE (vb));
+  g_return_if_fail (channel->label != NULL);
+
+  GST_OBJECT_LOCK (vb);
+  if (!g_ascii_strcasecmp (channel->label, "HUE")) {
+    new_val = (value + 1000.0) * 2.0 / 2000.0 - 1.0;
+    changed = new_val != vb->hue;
+    vb->hue = new_val;
+  } else if (!g_ascii_strcasecmp (channel->label, "SATURATION")) {
+    new_val = (value + 1000.0) * 2.0 / 2000.0;
+    changed = new_val != vb->saturation;
+    vb->saturation = new_val;
+  } else if (!g_ascii_strcasecmp (channel->label, "BRIGHTNESS")) {
+    new_val = (value + 1000.0) * 2.0 / 2000.0 - 1.0;
+    changed = new_val != vb->brightness;
+    vb->brightness = new_val;
+  } else if (!g_ascii_strcasecmp (channel->label, "CONTRAST")) {
+    new_val = (value + 1000.0) * 2.0 / 2000.0;
+    changed = new_val != vb->contrast;
+    vb->contrast = new_val;
+  }
+  GST_OBJECT_UNLOCK (vb);
+
+  if (changed)
+    gst_gl_color_balance_update_properties (vb);
+
+  if (changed) {
+    gst_color_balance_value_changed (balance, channel,
+        gst_color_balance_get_value (balance, channel));
+  }
+}
+
+static gint
+gst_gl_color_balance_colorbalance_get_value (GstColorBalance * balance,
+    GstColorBalanceChannel * channel)
+{
+  GstGLColorBalance *vb = GST_GL_COLOR_BALANCE (balance);
+  gint value = 0;
+
+  g_return_val_if_fail (vb != NULL, 0);
+  g_return_val_if_fail (GST_IS_GL_COLOR_BALANCE (vb), 0);
+  g_return_val_if_fail (channel->label != NULL, 0);
+
+  if (!g_ascii_strcasecmp (channel->label, "HUE")) {
+    value = (vb->hue + 1) * 2000.0 / 2.0 - 1000.0;
+  } else if (!g_ascii_strcasecmp (channel->label, "SATURATION")) {
+    value = vb->saturation * 2000.0 / 2.0 - 1000.0;
+  } else if (!g_ascii_strcasecmp (channel->label, "BRIGHTNESS")) {
+    value = (vb->brightness + 1) * 2000.0 / 2.0 - 1000.0;
+  } else if (!g_ascii_strcasecmp (channel->label, "CONTRAST")) {
+    value = vb->contrast * 2000.0 / 2.0 - 1000.0;
+  }
+
+  return value;
+}
+
+static GstColorBalanceType
+gst_gl_color_balance_colorbalance_get_balance_type (GstColorBalance * balance)
+{
+  return GST_COLOR_BALANCE_HARDWARE;
+}
+
+static void
+gst_gl_color_balance_colorbalance_init (GstColorBalanceInterface * iface)
+{
+  iface->list_channels = gst_gl_color_balance_colorbalance_list_channels;
+  iface->set_value = gst_gl_color_balance_colorbalance_set_value;
+  iface->get_value = gst_gl_color_balance_colorbalance_get_value;
+  iface->get_balance_type = gst_gl_color_balance_colorbalance_get_balance_type;
+}
+
+static GstColorBalanceChannel *
+gst_gl_color_balance_find_channel (GstGLColorBalance * balance,
+    const gchar * label)
+{
+  GList *l;
+
+  for (l = balance->channels; l; l = l->next) {
+    GstColorBalanceChannel *channel = l->data;
+
+    if (g_ascii_strcasecmp (channel->label, label) == 0)
+      return channel;
+  }
+  return NULL;
+}
+
+static void
+gst_gl_color_balance_set_property (GObject * object, guint prop_id,
+    const GValue * value, GParamSpec * pspec)
+{
+  GstGLColorBalance *balance = GST_GL_COLOR_BALANCE (object);
+  gdouble d;
+  const gchar *label = NULL;
+
+  GST_OBJECT_LOCK (balance);
+  switch (prop_id) {
+    case PROP_CONTRAST:
+      d = g_value_get_double (value);
+      GST_DEBUG_OBJECT (balance, "Changing contrast from %lf to %lf",
+          balance->contrast, d);
+      if (d != balance->contrast)
+        label = "CONTRAST";
+      balance->contrast = d;
+      break;
+    case PROP_BRIGHTNESS:
+      d = g_value_get_double (value);
+      GST_DEBUG_OBJECT (balance, "Changing brightness from %lf to %lf",
+          balance->brightness, d);
+      if (d != balance->brightness)
+        label = "BRIGHTNESS";
+      balance->brightness = d;
+      break;
+    case PROP_HUE:
+      d = g_value_get_double (value);
+      GST_DEBUG_OBJECT (balance, "Changing hue from %lf to %lf", balance->hue,
+          d);
+      if (d != balance->hue)
+        label = "HUE";
+      balance->hue = d;
+      break;
+    case PROP_SATURATION:
+      d = g_value_get_double (value);
+      GST_DEBUG_OBJECT (balance, "Changing saturation from %lf to %lf",
+          balance->saturation, d);
+      if (d != balance->saturation)
+        label = "SATURATION";
+      balance->saturation = d;
+      break;
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
+  }
+
+  GST_OBJECT_UNLOCK (balance);
+  gst_gl_color_balance_update_properties (balance);
+
+  if (label) {
+    GstColorBalanceChannel *channel =
+        gst_gl_color_balance_find_channel (balance, label);
+    gst_color_balance_value_changed (GST_COLOR_BALANCE (balance), channel,
+        gst_color_balance_get_value (GST_COLOR_BALANCE (balance), channel));
+  }
+}
+
+static void
+gst_gl_color_balance_get_property (GObject * object, guint prop_id,
+    GValue * value, GParamSpec * pspec)
+{
+  GstGLColorBalance *balance = GST_GL_COLOR_BALANCE (object);
+
+  switch (prop_id) {
+    case PROP_CONTRAST:
+      g_value_set_double (value, balance->contrast);
+      break;
+    case PROP_BRIGHTNESS:
+      g_value_set_double (value, balance->brightness);
+      break;
+    case PROP_HUE:
+      g_value_set_double (value, balance->hue);
+      break;
+    case PROP_SATURATION:
+      g_value_set_double (value, balance->saturation);
+      break;
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
+  }
+}
diff --git a/ext/gl/gstglcolorbalance.h b/ext/gl/gstglcolorbalance.h
new file mode 100644
index 0000000..cf0bcd7
--- /dev/null
+++ b/ext/gl/gstglcolorbalance.h
@@ -0,0 +1,73 @@
+/* GStreamer
+ * Copyright (C) <1999> Erik Walthinsen <omega@cse.ogi.edu>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+
+#ifndef __GST_GL_COLOR_BALANCE_H__
+#define __GST_GL_COLOR_BALANCE_H__
+
+#include <gst/gst.h>
+#include <gst/video/video.h>
+#include <gst/gl/gl.h>
+
+G_BEGIN_DECLS
+
+#define GST_TYPE_GL_COLOR_BALANCE \
+  (gst_gl_color_balance_get_type())
+#define GST_GL_COLOR_BALANCE(obj) \
+  (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_GL_COLOR_BALANCE,GstGLColorBalance))
+#define GST_GL_COLOR_BALANCE_CLASS(klass) \
+  (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_GL_COLOR_BALANCE,GstGLColorBalanceClass))
+#define GST_IS_GL_COLOR_BALANCE(obj) \
+  (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_GL_COLOR_BALANCE))
+#define GST_IS_GL_COLOR_BALANCE_CLASS(klass) \
+  (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_GL_COLOR_BALANCE))
+
+typedef struct _GstGLColorBalance GstGLColorBalance;
+typedef struct _GstGLColorBalanceClass GstGLColorBalanceClass;
+
+/**
+ * GstGLColorBalance:
+ *
+ * Opaque data structure.
+ */
+struct _GstGLColorBalance {
+  GstGLFilter videofilter;
+
+  /* < private > */
+  GstGLShader *shader;
+
+  /* channels for interface */
+  GList *channels;
+
+  /* properties */
+  gdouble contrast;
+  gdouble brightness;
+  gdouble hue;
+  gdouble saturation;
+};
+
+struct _GstGLColorBalanceClass {
+  GstGLFilterClass parent_class;
+};
+
+GType gst_gl_color_balance_get_type(void);
+
+G_END_DECLS
+
+#endif /* __GST_GL_COLOR_BALANCE_H__ */
diff --git a/ext/gl/gstglcolorconvertelement.c b/ext/gl/gstglcolorconvertelement.c
index e4ff6ca..bd4fbeb 100644
--- a/ext/gl/gstglcolorconvertelement.c
+++ b/ext/gl/gstglcolorconvertelement.c
@@ -58,15 +58,13 @@
 GST_STATIC_PAD_TEMPLATE ("src",
     GST_PAD_SRC,
     GST_PAD_ALWAYS,
-    GST_STATIC_CAPS (GST_GL_COLOR_CONVERT_VIDEO_CAPS ";"
-        GST_GL_COLOR_CONVERT_VIDEO_OVERLAY_COMPOSITION_CAPS));
+    GST_STATIC_CAPS (GST_GL_COLOR_CONVERT_VIDEO_CAPS));
 
 static GstStaticPadTemplate gst_gl_color_convert_element_sink_pad_template =
 GST_STATIC_PAD_TEMPLATE ("sink",
     GST_PAD_SINK,
     GST_PAD_ALWAYS,
-    GST_STATIC_CAPS (GST_GL_COLOR_CONVERT_VIDEO_CAPS ";"
-        GST_GL_COLOR_CONVERT_VIDEO_OVERLAY_COMPOSITION_CAPS));
+    GST_STATIC_CAPS (GST_GL_COLOR_CONVERT_VIDEO_CAPS));
 
 static gboolean
 gst_gl_color_convert_element_stop (GstBaseTransform * bt)
@@ -193,6 +191,9 @@
           convert->out_caps))
     return FALSE;
 
+  if (!gst_gl_color_convert_decide_allocation (convert->convert, query))
+    return FALSE;
+
   return TRUE;
 }
 
@@ -240,18 +241,7 @@
 gst_gl_color_convert_element_fixate_caps (GstBaseTransform *
     bt, GstPadDirection direction, GstCaps * caps, GstCaps * othercaps)
 {
-  GstCaps *ret;
+  GstGLContext *context = GST_GL_BASE_FILTER (bt)->context;
 
-  ret =
-      GST_BASE_TRANSFORM_CLASS
-      (gst_gl_color_convert_element_parent_class)->fixate_caps (bt, direction,
-      caps, othercaps);
-
-  if (direction == GST_PAD_SINK) {
-    if (gst_caps_is_subset (caps, ret)) {
-      gst_caps_replace (&ret, caps);
-    }
-  }
-
-  return ret;
+  return gst_gl_color_convert_fixate_caps (context, direction, caps, othercaps);
 }
diff --git a/ext/gl/gstglcolorscale.c b/ext/gl/gstglcolorscale.c
index a79e524..c7df0a8 100644
--- a/ext/gl/gstglcolorscale.c
+++ b/ext/gl/gstglcolorscale.c
@@ -70,24 +70,25 @@
 static void gst_gl_colorscale_get_property (GObject * object, guint prop_id,
     GValue * value, GParamSpec * pspec);
 
-static gboolean gst_gl_colorscale_gen_gl_resources (GstGLFilter * filter);
-static gboolean gst_gl_colorscale_del_gl_resources (GstBaseTransform * trans);
+static gboolean gst_gl_colorscale_gl_start (GstGLBaseFilter * base_filter);
+static void gst_gl_colorscale_gl_stop (GstGLBaseFilter * base_filter);
 
 static gboolean gst_gl_colorscale_filter_texture (GstGLFilter * filter,
     guint in_tex, guint out_tex);
-static void gst_gl_colorscale_callback (gint width, gint height,
-    guint texture, gpointer stuff);
 
 static void
 gst_gl_colorscale_class_init (GstGLColorscaleClass * klass)
 {
   GObjectClass *gobject_class;
   GstElementClass *element_class;
+  GstBaseTransformClass *basetransform_class;
+  GstGLBaseFilterClass *base_filter_class;
   GstGLFilterClass *filter_class;
-  GstBaseTransformClass *basetransform_class = GST_BASE_TRANSFORM_CLASS (klass);
 
   gobject_class = (GObjectClass *) klass;
   element_class = GST_ELEMENT_CLASS (klass);
+  basetransform_class = GST_BASE_TRANSFORM_CLASS (klass);
+  base_filter_class = GST_GL_BASE_FILTER_CLASS (klass);
   filter_class = GST_GL_FILTER_CLASS (klass);
 
   gobject_class->set_property = gst_gl_colorscale_set_property;
@@ -95,24 +96,22 @@
 
   gst_element_class_set_metadata (element_class, "OpenGL color scale",
       "Filter/Effect/Video", "Colorspace converter and video scaler",
-      "Julien Isorce <julien.isorce@gmail.com>");
+      "Julien Isorce <julien.isorce@gmail.com>\n"
+      "Matthew Waters <matthew@centricular.com>");
 
-  filter_class->init_fbo =
-      GST_DEBUG_FUNCPTR (gst_gl_colorscale_gen_gl_resources);
+  basetransform_class->passthrough_on_same_caps = TRUE;
+
+  base_filter_class->gl_start = GST_DEBUG_FUNCPTR (gst_gl_colorscale_gl_start);
+  base_filter_class->gl_stop = GST_DEBUG_FUNCPTR (gst_gl_colorscale_gl_stop);
+  base_filter_class->supported_gl_api =
+      GST_GL_API_OPENGL | GST_GL_API_OPENGL3 | GST_GL_API_GLES2;
 
   filter_class->filter_texture = gst_gl_colorscale_filter_texture;
-
-  basetransform_class->stop =
-      GST_DEBUG_FUNCPTR (gst_gl_colorscale_del_gl_resources);
-  basetransform_class->passthrough_on_same_caps = TRUE;
-  GST_GL_BASE_FILTER_CLASS (klass)->supported_gl_api =
-      GST_GL_API_OPENGL | GST_GL_API_OPENGL3 | GST_GL_API_GLES2;
 }
 
 static void
 gst_gl_colorscale_init (GstGLColorscale * colorscale)
 {
-  colorscale->shader = NULL;
 }
 
 static void
@@ -137,93 +136,53 @@
   }
 }
 
-static void
-_compile_identity_shader (GstGLContext * context, GstGLColorscale * colorscale)
+static gboolean
+gst_gl_colorscale_gl_start (GstGLBaseFilter * base_filter)
 {
-  GstGLFilter *filter = GST_GL_FILTER (colorscale);
+  GstGLColorscale *colorscale = GST_GL_COLORSCALE (base_filter);
+  GstGLFilter *filter = GST_GL_FILTER (base_filter);
+  GstGLShader *shader;
+  GError *error = NULL;
 
-  colorscale->shader = gst_gl_shader_new (context);
+  if (!(shader = gst_gl_shader_new_default (base_filter->context, &error))) {
+    GST_ERROR_OBJECT (colorscale, "Failed to initialize shader: %s",
+        error->message);
+    gst_object_unref (shader);
+    return FALSE;
+  }
 
-  if (!gst_gl_shader_compile_with_default_vf_and_check (colorscale->shader,
-          &filter->draw_attr_position_loc, &filter->draw_attr_texture_loc)) {
-    gst_gl_context_clear_shader (context);
+  filter->draw_attr_position_loc =
+      gst_gl_shader_get_attribute_location (shader, "a_position");
+  filter->draw_attr_texture_loc =
+      gst_gl_shader_get_attribute_location (shader, "a_texcoord");
+
+  colorscale->shader = shader;
+
+  return GST_GL_BASE_FILTER_CLASS (parent_class)->gl_start (base_filter);
+}
+
+static void
+gst_gl_colorscale_gl_stop (GstGLBaseFilter * base_filter)
+{
+  GstGLColorscale *colorscale = GST_GL_COLORSCALE (base_filter);
+
+  if (colorscale->shader) {
     gst_object_unref (colorscale->shader);
     colorscale->shader = NULL;
   }
-}
 
-static gboolean
-gst_gl_colorscale_gen_gl_resources (GstGLFilter * filter)
-{
-  GstGLColorscale *colorscale = GST_GL_COLORSCALE (filter);
-
-  if (gst_gl_context_get_gl_api (GST_GL_BASE_FILTER (filter)->context) &
-      (GST_GL_API_GLES2 | GST_GL_API_OPENGL3)) {
-    gst_gl_context_thread_add (GST_GL_BASE_FILTER (filter)->context,
-        (GstGLContextThreadFunc) _compile_identity_shader, colorscale);
-
-    if (!colorscale->shader) {
-      gst_gl_context_set_error (GST_GL_BASE_FILTER (filter)->context,
-          "Failed to initialize identity shader");
-      GST_ELEMENT_ERROR (colorscale, RESOURCE, NOT_FOUND, ("%s",
-              gst_gl_context_get_error ()), (NULL));
-      return FALSE;
-    }
-  }
-
-  return TRUE;
-}
-
-static gboolean
-gst_gl_colorscale_del_gl_resources (GstBaseTransform * trans)
-{
-  GstGLColorscale *colorscale = GST_GL_COLORSCALE (trans);
-
-  if (colorscale->shader) {
-    gst_gl_context_del_shader (GST_GL_BASE_FILTER (trans)->context,
-        colorscale->shader);
-    colorscale->shader = NULL;
-  }
-
-  return GST_BASE_TRANSFORM_CLASS (parent_class)->stop (trans);
+  return GST_GL_BASE_FILTER_CLASS (parent_class)->gl_stop (base_filter);
 }
 
 static gboolean
 gst_gl_colorscale_filter_texture (GstGLFilter * filter, guint in_tex,
     guint out_tex)
 {
-  GstGLColorscale *colorscale;
+  GstGLColorscale *colorscale = GST_GL_COLORSCALE (filter);
 
-  colorscale = GST_GL_COLORSCALE (filter);
-
-  if (gst_gl_context_get_gl_api (GST_GL_BASE_FILTER (filter)->context) &
-      (GST_GL_API_GLES2 | GST_GL_API_OPENGL3))
+  if (gst_gl_context_get_gl_api (GST_GL_BASE_FILTER (filter)->context))
     gst_gl_filter_render_to_target_with_shader (filter, TRUE, in_tex, out_tex,
         colorscale->shader);
 
-  if (gst_gl_context_get_gl_api (GST_GL_BASE_FILTER (filter)->context) &
-      GST_GL_API_OPENGL)
-    gst_gl_filter_render_to_target (filter, TRUE, in_tex, out_tex,
-        gst_gl_colorscale_callback, colorscale);
-
   return TRUE;
 }
-
-static void
-gst_gl_colorscale_callback (gint width, gint height, guint texture,
-    gpointer stuff)
-{
-  GstGLFilter *filter = GST_GL_FILTER (stuff);
-
-#if GST_GL_HAVE_OPENGL
-  if (gst_gl_context_get_gl_api (GST_GL_BASE_FILTER (filter)->context) &
-      GST_GL_API_OPENGL) {
-    const GstGLFuncs *gl = GST_GL_BASE_FILTER (filter)->context->gl_vtable;
-
-    gl->MatrixMode (GL_PROJECTION);
-    gl->LoadIdentity ();
-  }
-#endif
-
-  gst_gl_filter_draw_texture (filter, texture, width, height);
-}
diff --git a/ext/gl/gstgldeinterlace.c b/ext/gl/gstgldeinterlace.c
index 2d48749..bd0eff0 100644
--- a/ext/gl/gstgldeinterlace.c
+++ b/ext/gl/gstgldeinterlace.c
@@ -26,7 +26,7 @@
  * <refsect2>
  * <title>Examples</title>
  * |[
- * gst-launch videotestsrc ! glupload ! gldeinterlace ! glimagesink
+ * gst-launch-1.0 videotestsrc ! glupload ! gldeinterlace ! glimagesink
  * ]|
  * FBO (Frame Buffer Object) and GLSL (OpenGL Shading Language) are required.
  * </refsect2>
diff --git a/ext/gl/gstgldifferencematte.c b/ext/gl/gstgldifferencematte.c
index b2b5fa5..6304c6d 100644
--- a/ext/gl/gstgldifferencematte.c
+++ b/ext/gl/gstgldifferencematte.c
@@ -26,7 +26,7 @@
  * <refsect2>
  * <title>Examples</title>
  * |[
- * gst-launch videotestsrc ! glupload ! gldifferencemate location=backgroundimagefile ! glimagesink
+ * gst-launch-1.0 videotestsrc ! glupload ! gldifferencemate location=backgroundimagefile ! glimagesink
  * ]|
  * FBO (Frame Buffer Object) and GLSL (OpenGL Shading Language) are required.
  * </refsect2>
@@ -78,7 +78,9 @@
 gst_gl_differencematte_init_gl_resources (GstGLFilter * filter)
 {
   GstGLDifferenceMatte *differencematte = GST_GL_DIFFERENCEMATTE (filter);
-  GstGLFuncs *gl = GST_GL_BASE_FILTER (filter)->context->gl_vtable;
+  GstGLContext *context = GST_GL_BASE_FILTER (filter)->context;
+  const GstGLFuncs *gl = context->gl_vtable;
+  GError *error = NULL;
   gint i;
 
   for (i = 0; i < 4; i++) {
@@ -96,45 +98,57 @@
         gst_gl_shader_new (GST_GL_BASE_FILTER (filter)->context);
   }
 
-  if (!gst_gl_shader_compile_with_default_v_and_check (differencematte->shader
-          [0], difference_fragment_source, &filter->draw_attr_position_loc,
-          &filter->draw_attr_texture_loc)) {
-    gst_gl_context_set_error (GST_GL_BASE_FILTER (differencematte)->context,
-        "Failed to initialize difference shader");
+  if (!(differencematte->shader[0] =
+          gst_gl_shader_new_link_with_stages (context, &error,
+              gst_glsl_stage_new_default_vertex (context),
+              gst_glsl_stage_new_with_string (context, GL_FRAGMENT_SHADER,
+                  GST_GLSL_VERSION_NONE, GST_GLSL_PROFILE_ES,
+                  difference_fragment_source), NULL))) {
     GST_ELEMENT_ERROR (differencematte, RESOURCE, NOT_FOUND, ("%s",
             gst_gl_context_get_error ()), (NULL));
     return;
   }
 
-  if (!gst_gl_shader_compile_with_default_v_and_check (differencematte->shader
-          [1], hconv7_fragment_source_gles2, &filter->draw_attr_position_loc,
-          &filter->draw_attr_texture_loc)) {
-    gst_gl_context_set_error (GST_GL_BASE_FILTER (differencematte)->context,
-        "Failed to initialize hconv7 shader");
+  if (!(differencematte->shader[1] =
+          gst_gl_shader_new_link_with_stages (context, &error,
+              gst_glsl_stage_new_default_vertex (context),
+              gst_glsl_stage_new_with_string (context, GL_FRAGMENT_SHADER,
+                  GST_GLSL_VERSION_NONE, GST_GLSL_PROFILE_ES,
+                  hconv7_fragment_source_gles2), NULL))) {
     GST_ELEMENT_ERROR (differencematte, RESOURCE, NOT_FOUND, ("%s",
             gst_gl_context_get_error ()), (NULL));
     return;
   }
 
-  if (!gst_gl_shader_compile_with_default_v_and_check (differencematte->shader
-          [2], vconv7_fragment_source_gles2, &filter->draw_attr_position_loc,
-          &filter->draw_attr_texture_loc)) {
-    gst_gl_context_set_error (GST_GL_BASE_FILTER (differencematte)->context,
-        "Failed to initialize vconv7 shader");
+  if (!(differencematte->shader[2] =
+          gst_gl_shader_new_link_with_stages (context, &error,
+              gst_glsl_stage_new_default_vertex (context),
+              gst_glsl_stage_new_with_string (context, GL_FRAGMENT_SHADER,
+                  GST_GLSL_VERSION_NONE, GST_GLSL_PROFILE_ES,
+                  vconv7_fragment_source_gles2), NULL))) {
     GST_ELEMENT_ERROR (differencematte, RESOURCE, NOT_FOUND, ("%s",
             gst_gl_context_get_error ()), (NULL));
     return;
   }
 
-  if (!gst_gl_shader_compile_with_default_v_and_check (differencematte->shader
-          [3], texture_interp_fragment_source, &filter->draw_attr_position_loc,
-          &filter->draw_attr_texture_loc)) {
-    gst_gl_context_set_error (GST_GL_BASE_FILTER (differencematte)->context,
-        "Failed to initialize interp shader");
+  if (!(differencematte->shader[3] =
+          gst_gl_shader_new_link_with_stages (context, &error,
+              gst_glsl_stage_new_default_vertex (context),
+              gst_glsl_stage_new_with_string (context, GL_FRAGMENT_SHADER,
+                  GST_GLSL_VERSION_NONE, GST_GLSL_PROFILE_ES,
+                  texture_interp_fragment_source), NULL))) {
     GST_ELEMENT_ERROR (differencematte, RESOURCE, NOT_FOUND, ("%s",
             gst_gl_context_get_error ()), (NULL));
     return;
   }
+
+  /* FIXME: this should really be per shader */
+  filter->draw_attr_position_loc =
+      gst_gl_shader_get_attribute_location (differencematte->shader[3],
+      "a_position");
+  filter->draw_attr_texture_loc =
+      gst_gl_shader_get_attribute_location (differencematte->shader[3],
+      "a_texcoord");
 }
 
 /* free resources that need a gl context */
@@ -222,8 +236,7 @@
 
   switch (prop_id) {
     case PROP_LOCATION:
-      if (differencematte->location != NULL)
-        g_free (differencematte->location);
+      g_free (differencematte->location);
       differencematte->bg_has_changed = TRUE;
       differencematte->location = g_value_dup_string (value);
       break;
diff --git a/ext/gl/gstgldownloadelement.c b/ext/gl/gstgldownloadelement.c
index 94a6e7a..ff931fa 100644
--- a/ext/gl/gstgldownloadelement.c
+++ b/ext/gl/gstgldownloadelement.c
@@ -53,10 +53,10 @@
     GST_STATIC_CAPS ("video/x-raw; video/x-raw(memory:GLMemory)"));
 
 static GstStaticPadTemplate gst_gl_download_element_sink_pad_template =
-GST_STATIC_PAD_TEMPLATE ("sink",
+    GST_STATIC_PAD_TEMPLATE ("sink",
     GST_PAD_SINK,
     GST_PAD_ALWAYS,
-    GST_STATIC_CAPS ("video/x-raw(memory:GLMemory)"));
+    GST_STATIC_CAPS ("video/x-raw(memory:GLMemory); video/x-raw"));
 
 static void
 gst_gl_download_element_class_init (GstGLDownloadElementClass * klass)
@@ -176,7 +176,8 @@
     if (gst_is_gl_memory (mem)) {
       if (!features || gst_caps_features_contains (features,
               GST_CAPS_FEATURE_MEMORY_SYSTEM_MEMORY)) {
-        gst_gl_memory_download_transfer ((GstGLMemory *) mem);
+        if (gst_is_gl_memory_pbo (mem))
+          gst_gl_memory_pbo_download_transfer ((GstGLMemoryPBO *) mem);
       }
     }
   }
diff --git a/ext/gl/gstgleffects.c b/ext/gl/gstgleffects.c
index 6cf5afc..1518a64 100644
--- a/ext/gl/gstgleffects.c
+++ b/ext/gl/gstgleffects.c
@@ -26,7 +26,7 @@
  * <refsect2>
  * <title>Examples</title>
  * |[
- * gst-launch videotestsrc ! glupload ! gleffects effect=5 ! glimagesink
+ * gst-launch-1.0 videotestsrc ! glupload ! gleffects effect=5 ! glimagesink
  * ]|
  * FBO (Frame Buffer Object) and GLSL (OpenGL Shading Language) are required.
  * </refsect2>
@@ -350,6 +350,7 @@
     const GstGLEffectsFilterDescriptor * filter_descriptor)
 {
   GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
+  GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
 
   klass->filter_descriptor = filter_descriptor;
 
@@ -366,6 +367,15 @@
             GST_TYPE_GL_EFFECTS_EFFECT,
             GST_GL_EFFECT_IDENTITY,
             G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+  } else {
+    gchar *description = g_strdup_printf ("GL Shading Language effects - %s",
+        filter_descriptor->filter_longname);
+
+    gst_element_class_set_metadata (element_class,
+        filter_descriptor->filter_longname, "Filter/Effect/Video",
+        description, "Filippo Argiolas <filippo.argiolas@gmail.com>");
+
+    g_free (description);
   }
 
   g_object_class_install_property (gobject_class,
@@ -545,21 +555,23 @@
   shader = g_hash_table_lookup (effects->shaderstable, shader_name);
 
   if (!shader) {
-    shader = gst_gl_shader_new (context);
-    if (!gst_gl_shader_compile_with_default_v_and_check (shader,
-            shader_source_gles2, &filter->draw_attr_position_loc,
-            &filter->draw_attr_texture_loc)) {
-      /* gst gl context error is already set */
-      GST_ELEMENT_ERROR (effects, RESOURCE, NOT_FOUND,
-          ("Failed to initialize %s shader, %s",
-              shader_name, gst_gl_context_get_error ()), (NULL));
-      gst_object_unref (shader);
-      shader = NULL;
-    }
-  }
+    GError *error = NULL;
 
-  if (!shader)
-    return NULL;
+    if (!(shader = gst_gl_shader_new_link_with_stages (context, &error,
+                gst_glsl_stage_new_default_vertex (context),
+                gst_glsl_stage_new_with_string (context, GL_FRAGMENT_SHADER,
+                    GST_GLSL_VERSION_NONE,
+                    GST_GLSL_PROFILE_ES | GST_GLSL_PROFILE_COMPATIBILITY,
+                    shader_source_gles2), NULL))) {
+      GST_ELEMENT_ERROR (effects, RESOURCE, NOT_FOUND,
+          ("Failed to initialize %s shader", shader_name), (NULL));
+    }
+
+    filter->draw_attr_position_loc =
+        gst_gl_shader_get_attribute_location (shader, "a_position");
+    filter->draw_attr_texture_loc =
+        gst_gl_shader_get_attribute_location (shader, "a_texcoord");
+  }
 
   g_hash_table_insert (effects->shaderstable, (gchar *) shader_name, shader);
 
@@ -603,6 +615,7 @@
     for (i = 0; i < n_filters; ++i, ++effect) {
       descriptors[i].effect = effect->value;
       descriptors[i].filter_name = effect->value_nick;
+      descriptors[i].filter_longname = effect->value_name;
     }
 
     for (defined = gst_gl_effects_filters_supported_properties ();
diff --git a/ext/gl/gstgleffects.h b/ext/gl/gstgleffects.h
index 82c33a9..ddd2292 100644
--- a/ext/gl/gstgleffects.h
+++ b/ext/gl/gstgleffects.h
@@ -46,6 +46,7 @@
   gint effect;
   guint supported_properties;
   const gchar *filter_name;
+  const gchar *filter_longname;
 } GstGLEffectsFilterDescriptor;
 
 typedef void (* GstGLEffectProcessFunc) (GstGLEffects *effects);
diff --git a/ext/gl/gstglfilterapp.c b/ext/gl/gstglfilterapp.c
index e347e28..715f6f3 100644
--- a/ext/gl/gstglfilterapp.c
+++ b/ext/gl/gstglfilterapp.c
@@ -57,6 +57,7 @@
 #define DEBUG_INIT \
   GST_DEBUG_CATEGORY_INIT (gst_gl_filter_app_debug, "glfilterapp", 0, "glfilterapp element");
 
+#define gst_gl_filter_app_parent_class parent_class
 G_DEFINE_TYPE_WITH_CODE (GstGLFilterApp, gst_gl_filter_app,
     GST_TYPE_GL_FILTER, DEBUG_INIT);
 
@@ -69,9 +70,9 @@
     GstCaps * incaps, GstCaps * outcaps);
 static gboolean gst_gl_filter_app_filter_texture (GstGLFilter * filter,
     guint in_tex, guint out_tex);
-static void gst_gl_filter_app_callback (gint width, gint height, guint texture,
-    gpointer stuff);
 
+static gboolean gst_gl_filter_app_gl_start (GstGLBaseFilter * base_filter);
+static void gst_gl_filter_app_gl_stop (GstGLBaseFilter * base_filter);
 
 static void
 gst_gl_filter_app_class_init (GstGLFilterAppClass * klass)
@@ -85,6 +86,9 @@
   gobject_class->set_property = gst_gl_filter_app_set_property;
   gobject_class->get_property = gst_gl_filter_app_get_property;
 
+  GST_GL_BASE_FILTER_CLASS (klass)->gl_start = gst_gl_filter_app_gl_start;
+  GST_GL_BASE_FILTER_CLASS (klass)->gl_stop = gst_gl_filter_app_gl_stop;
+
   GST_GL_FILTER_CLASS (klass)->set_caps = gst_gl_filter_app_set_caps;
   GST_GL_FILTER_CLASS (klass)->filter_texture =
       gst_gl_filter_app_filter_texture;
@@ -144,6 +148,34 @@
 }
 
 static gboolean
+gst_gl_filter_app_gl_start (GstGLBaseFilter * base_filter)
+{
+  GstGLFilter *filter = GST_GL_FILTER (base_filter);
+  GError *error = NULL;
+
+  if (!(filter->default_shader =
+          gst_gl_shader_new_default (base_filter->context, &error))) {
+    GST_ELEMENT_ERROR (filter, RESOURCE, NOT_FOUND, ("%s",
+            "Failed to create the default shader"), ("%s", error->message));
+    return FALSE;
+  }
+
+  return GST_GL_BASE_FILTER_CLASS (parent_class)->gl_start (base_filter);
+}
+
+static void
+gst_gl_filter_app_gl_stop (GstGLBaseFilter * base_filter)
+{
+  GstGLFilter *filter = GST_GL_FILTER (base_filter);
+
+  if (filter->default_shader)
+    gst_object_unref (filter->default_shader);
+  filter->default_shader = NULL;
+
+  GST_GL_BASE_FILTER_CLASS (parent_class)->gl_stop (base_filter);
+}
+
+static gboolean
 gst_gl_filter_app_set_caps (GstGLFilter * filter, GstCaps * incaps,
     GstCaps * outcaps)
 {
@@ -202,29 +234,9 @@
       filter->fbo, filter->depthbuffer, out_tex, _glcb2, &cb);
 
   if (app_filter->default_draw) {
-    gst_gl_filter_render_to_target (filter, TRUE, in_tex, out_tex,
-        gst_gl_filter_app_callback, filter);
+    gst_gl_filter_render_to_target_with_shader (filter, TRUE, in_tex, out_tex,
+        filter->default_shader);
   }
 
   return TRUE;
 }
-
-//opengl scene, params: input texture (not the output filter->texture)
-static void
-gst_gl_filter_app_callback (gint width, gint height, guint texture,
-    gpointer stuff)
-{
-  GstGLFilter *filter = GST_GL_FILTER (stuff);
-
-#if GST_GL_HAVE_OPENGL
-  if (gst_gl_context_get_gl_api (GST_GL_BASE_FILTER (filter)->context) &
-      GST_GL_API_OPENGL) {
-    GstGLFuncs *gl = GST_GL_BASE_FILTER (filter)->context->gl_vtable;
-
-    gl->MatrixMode (GL_PROJECTION);
-    gl->LoadIdentity ();
-  }
-#endif
-
-  gst_gl_filter_draw_texture (filter, texture, width, height);
-}
diff --git a/ext/gl/gstglfiltershader.c b/ext/gl/gstglfiltershader.c
index e201f74..2117388 100644
--- a/ext/gl/gstglfiltershader.c
+++ b/ext/gl/gstglfiltershader.c
@@ -22,14 +22,14 @@
 /**
  * SECTION:element-glshader
  *
- * Filter loading OpenGL fragment shader from file
+ * OpenGL fragment shader filter
  *
  * <refsect2>
  * <title>Examples</title>
  * |[
- * gst-launch videotestsrc ! glupload ! glshader location=myshader.fs ! glimagesink
+ * gst-launch-1.0 videotestsrc ! glupload ! glshader fragment="\"`cat myshader.frag`\"" ! glimagesink
  * ]|
- * FBO (Frame Buffer Object) and GLSL (OpenGL Shading Language) are required.
+ * FBO (Frame Buffer Object) and GLSL (OpenGL Shading Language) are required. A #version header is required
  * </refsect2>
  */
 #ifdef HAVE_CONFIG_H
@@ -37,30 +37,31 @@
 #endif
 
 #include <gst/gst.h>
-#include <gst/gl/gstglshadervariables.h>
 
 #include "gstglfiltershader.h"
-
-/* horizontal filter */
-static gchar *hfilter_fragment_source;
-static gchar *hfilter_fragment_variables[2];
+#if HAVE_GRAPHENE
+#include <graphene-gobject.h>
+#endif
 
 enum
 {
   PROP_0,
-  PROP_LOCATION,
-  PROP_PRESET,
-  PROP_VARIABLES
+  PROP_SHADER,
+  PROP_VERTEX,
+  PROP_FRAGMENT,
+  PROP_UNIFORMS,
+  PROP_UPDATE_SHADER,
+  PROP_LAST,
 };
 
-static const gchar text_vertex_shader[] =
-    "attribute vec4 a_position;   \n"
-    "attribute vec2 a_texcoord;   \n"
-    "varying vec2 v_texcoord;     \n"
-    "void main()                  \n"
-    "{                            \n"
-    "   gl_Position = a_position; \n"
-    "   v_texcoord = a_texcoord;  \n" "}                            \n";
+enum
+{
+  SIGNAL_0,
+  SIGNAL_CREATE_SHADER,
+  SIGNAL_LAST,
+};
+
+static guint gst_gl_shader_signals[SIGNAL_LAST] = { 0 };
 
 #define GST_CAT_DEFAULT gst_gl_filtershader_debug
 GST_DEBUG_CATEGORY_STATIC (GST_CAT_DEFAULT);
@@ -71,17 +72,13 @@
 G_DEFINE_TYPE_WITH_CODE (GstGLFilterShader, gst_gl_filtershader,
     GST_TYPE_GL_FILTER, DEBUG_INIT);
 
+static void gst_gl_filtershader_finalize (GObject * object);
 static void gst_gl_filtershader_set_property (GObject * object, guint prop_id,
     const GValue * value, GParamSpec * pspec);
 static void gst_gl_filtershader_get_property (GObject * object, guint prop_id,
     GValue * value, GParamSpec * pspec);
-static gboolean gst_gl_filter_filtershader_reset (GstBaseTransform * trans);
-
-static gboolean gst_gl_filtershader_load_shader (GstGLFilterShader *
-    filter_shader, char *filename, char **storage);
-static gboolean gst_gl_filtershader_load_variables (GstGLFilterShader *
-    filter_shader, char *filename, char **storage);
-static gboolean gst_gl_filtershader_init_shader (GstGLFilter * filter);
+static gboolean gst_gl_filtershader_gl_start (GstGLBaseFilter * base);
+static void gst_gl_filtershader_gl_stop (GstGLBaseFilter * base);
 static gboolean gst_gl_filtershader_filter (GstGLFilter * filter,
     GstBuffer * inbuf, GstBuffer * outbuf);
 static gboolean gst_gl_filtershader_filter_texture (GstGLFilter * filter,
@@ -89,32 +86,6 @@
 static void gst_gl_filtershader_hcallback (gint width, gint height,
     guint texture, gpointer stuff);
 
-
-static void
-gst_gl_filtershader_init_resources (GstGLFilter * filter)
-{
-  GstGLContext *context = GST_GL_BASE_FILTER (filter)->context;
-  guint internal_format;
-
-  internal_format =
-      gst_gl_sized_gl_format_from_gl_format_type (context, GL_RGBA,
-      GL_UNSIGNED_BYTE);
-  glTexImage2D (GL_TEXTURE_2D, 0, internal_format,
-      GST_VIDEO_INFO_WIDTH (&filter->out_info),
-      GST_VIDEO_INFO_HEIGHT (&filter->out_info), 0, GL_RGBA, GL_UNSIGNED_BYTE,
-      NULL);
-  glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
-  glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
-  glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
-  glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
-}
-
-static void
-gst_gl_filtershader_reset_resources (GstGLFilter * filter)
-{
-  //GstGLFilterShader *filtershader = GST_GL_FILTERSHADER (filter);
-}
-
 static void
 gst_gl_filtershader_class_init (GstGLFilterShaderClass * klass)
 {
@@ -124,39 +95,60 @@
   gobject_class = (GObjectClass *) klass;
   element_class = GST_ELEMENT_CLASS (klass);
 
+  gobject_class->finalize = gst_gl_filtershader_finalize;
   gobject_class->set_property = gst_gl_filtershader_set_property;
   gobject_class->get_property = gst_gl_filtershader_get_property;
 
-  g_object_class_install_property (gobject_class, PROP_LOCATION,
-      g_param_spec_string ("location", "File Location",
-          "Location of the GLSL file to load", NULL,
+  g_object_class_install_property (gobject_class, PROP_SHADER,
+      g_param_spec_object ("shader", "Shader object",
+          "GstGLShader to use", GST_GL_TYPE_SHADER,
           G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
 
-  g_object_class_install_property (gobject_class, PROP_PRESET,
-      g_param_spec_string ("preset", "Preset File Location",
-          "Location of the shader uniform variables preset file", NULL,
+  g_object_class_install_property (gobject_class, PROP_VERTEX,
+      g_param_spec_string ("vertex", "Vertex Source",
+          "GLSL vertex source", NULL,
           G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
 
-  g_object_class_install_property (gobject_class, PROP_VARIABLES,
-      g_param_spec_string ("vars", "Uniform variables",
-          "Set the shader uniform variables", NULL,
-          G_PARAM_WRITABLE | GST_PARAM_CONTROLLABLE | G_PARAM_STATIC_STRINGS));
+  g_object_class_install_property (gobject_class, PROP_FRAGMENT,
+      g_param_spec_string ("fragment", "Fragment Source",
+          "GLSL fragment source", NULL,
+          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+  /* FIXME: add other stages */
+
+  g_object_class_install_property (gobject_class, PROP_UNIFORMS,
+      g_param_spec_boxed ("uniforms", "GLSL Uniforms",
+          "GLSL Uniforms", GST_TYPE_STRUCTURE,
+          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+
+  g_object_class_install_property (gobject_class, PROP_UPDATE_SHADER,
+      g_param_spec_boolean ("update-shader", "Update Shader",
+          "Emit the \'create-shader\' signal for the next frame",
+          FALSE, G_PARAM_WRITABLE | G_PARAM_STATIC_STRINGS));
+
+  /*
+   * GstGLFilterShader::create-shader:
+   * @object: the #GstGLFilterShader
+   *
+   * Ask's the application for a shader to render with as a result of
+   * inititialization or setting the 'update-shader' property.
+   *
+   * Returns: a new #GstGLShader for use in the rendering pipeline
+   */
+  gst_gl_shader_signals[SIGNAL_CREATE_SHADER] =
+      g_signal_new ("create-shader", G_TYPE_FROM_CLASS (klass),
+      G_SIGNAL_RUN_LAST, 0, NULL, NULL, g_cclosure_marshal_generic,
+      GST_GL_TYPE_SHADER, 0);
 
   gst_element_class_set_metadata (element_class,
       "OpenGL fragment shader filter", "Filter/Effect",
-      "Load GLSL fragment shader from file", "<luc.deschenaux@freesurf.ch>");
-
-  GST_BASE_TRANSFORM_CLASS (klass)->stop = gst_gl_filter_filtershader_reset;
+      "Perform operations with a GLSL shader", "<matthew@centricular.com>");
 
   GST_GL_FILTER_CLASS (klass)->filter = gst_gl_filtershader_filter;
   GST_GL_FILTER_CLASS (klass)->filter_texture =
       gst_gl_filtershader_filter_texture;
-  GST_GL_FILTER_CLASS (klass)->display_init_cb =
-      gst_gl_filtershader_init_resources;
-  GST_GL_FILTER_CLASS (klass)->display_reset_cb =
-      gst_gl_filtershader_reset_resources;
-  GST_GL_FILTER_CLASS (klass)->init_fbo = gst_gl_filtershader_init_shader;
 
+  GST_GL_BASE_FILTER_CLASS (klass)->gl_start = gst_gl_filtershader_gl_start;
+  GST_GL_BASE_FILTER_CLASS (klass)->gl_stop = gst_gl_filtershader_gl_stop;
   GST_GL_BASE_FILTER_CLASS (klass)->supported_gl_api =
       GST_GL_API_OPENGL | GST_GL_API_GLES2 | GST_GL_API_OPENGL3;
 }
@@ -164,21 +156,25 @@
 static void
 gst_gl_filtershader_init (GstGLFilterShader * filtershader)
 {
-  filtershader->shader0 = NULL;
+  filtershader->new_source = TRUE;
 }
 
-static gboolean
-gst_gl_filter_filtershader_reset (GstBaseTransform * trans)
+static void
+gst_gl_filtershader_finalize (GObject * object)
 {
-  GstGLFilterShader *filtershader = GST_GL_FILTERSHADER (trans);
+  GstGLFilterShader *filtershader = GST_GL_FILTERSHADER (object);
 
-  //blocking call, wait the opengl thread has destroyed the shader
-  if (filtershader->shader0)
-    gst_gl_context_del_shader (GST_GL_BASE_FILTER (trans)->context,
-        filtershader->shader0);
-  filtershader->shader0 = NULL;
+  g_free (filtershader->vertex);
+  filtershader->vertex = NULL;
 
-  return GST_BASE_TRANSFORM_CLASS (parent_class)->stop (trans);
+  g_free (filtershader->fragment);
+  filtershader->fragment = NULL;
+
+  if (filtershader->uniforms)
+    gst_structure_free (filtershader->uniforms);
+  filtershader->uniforms = NULL;
+
+  G_OBJECT_CLASS (gst_gl_filtershader_parent_class)->finalize (object);
 }
 
 static void
@@ -188,59 +184,40 @@
   GstGLFilterShader *filtershader = GST_GL_FILTERSHADER (object);
 
   switch (prop_id) {
-
-    case PROP_LOCATION:
-
-      if (filtershader->filename) {
-        g_free (filtershader->filename);
-      }
-      if (filtershader->compiled) {
-        if (filtershader->shader0)
-          gst_gl_context_del_shader (GST_GL_BASE_FILTER (filtershader)->context,
-              filtershader->shader0);
-        filtershader->shader0 = 0;
-      }
-      filtershader->filename = g_strdup (g_value_get_string (value));
-      filtershader->compiled = 0;
-      filtershader->texSet = 0;
-
+    case PROP_SHADER:
+      GST_OBJECT_LOCK (filtershader);
+      gst_object_replace ((GstObject **) & filtershader->shader,
+          g_value_dup_object (value));
+      filtershader->new_source = FALSE;
+      GST_OBJECT_UNLOCK (filtershader);
       break;
-
-    case PROP_PRESET:
-
-      if (filtershader->presetfile) {
-        g_free (filtershader->presetfile);
-      }
-
-      filtershader->presetfile = g_strdup (g_value_get_string (value));
-
-      if (hfilter_fragment_variables[0]) {
-        g_free (hfilter_fragment_variables[0]);
-        hfilter_fragment_variables[0] = 0;
-      }
-
-      if (!filtershader->presetfile[0]) {
-        g_free (filtershader->presetfile);
-        filtershader->presetfile = 0;
-      }
-
+    case PROP_VERTEX:
+      GST_OBJECT_LOCK (filtershader);
+      g_free (filtershader->vertex);
+      filtershader->vertex = g_value_dup_string (value);
+      filtershader->new_source = TRUE;
+      GST_OBJECT_UNLOCK (filtershader);
       break;
-
-    case PROP_VARIABLES:
-
-      if (hfilter_fragment_variables[1]) {
-        g_free (hfilter_fragment_variables[1]);
-      }
-
-      hfilter_fragment_variables[1] = g_strdup (g_value_get_string (value));
-
-      if (!hfilter_fragment_variables[1][0]) {
-        g_free (hfilter_fragment_variables[1]);
-        hfilter_fragment_variables[1] = 0;
-      }
-
+    case PROP_FRAGMENT:
+      GST_OBJECT_LOCK (filtershader);
+      g_free (filtershader->fragment);
+      filtershader->fragment = g_value_dup_string (value);
+      filtershader->new_source = TRUE;
+      GST_OBJECT_UNLOCK (filtershader);
       break;
-
+    case PROP_UNIFORMS:
+      GST_OBJECT_LOCK (filtershader);
+      if (filtershader->uniforms)
+        gst_structure_free (filtershader->uniforms);
+      filtershader->uniforms = g_value_dup_boxed (value);
+      filtershader->new_uniforms = TRUE;
+      GST_OBJECT_UNLOCK (filtershader);
+      break;
+    case PROP_UPDATE_SHADER:
+      GST_OBJECT_LOCK (filtershader);
+      filtershader->update_shader = g_value_get_boolean (value);
+      GST_OBJECT_UNLOCK (filtershader);
+      break;
     default:
       G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
       break;
@@ -254,101 +231,48 @@
   GstGLFilterShader *filtershader = GST_GL_FILTERSHADER (object);
 
   switch (prop_id) {
-    case PROP_LOCATION:
-      g_value_set_string (value, filtershader->filename);
+    case PROP_SHADER:
+      GST_OBJECT_LOCK (filtershader);
+      g_value_set_object (value, filtershader->shader);
+      GST_OBJECT_UNLOCK (filtershader);
       break;
-
-    case PROP_PRESET:
-      g_value_set_string (value, filtershader->presetfile);
+    case PROP_VERTEX:
+      GST_OBJECT_LOCK (filtershader);
+      g_value_set_string (value, filtershader->vertex);
+      GST_OBJECT_UNLOCK (filtershader);
       break;
-
+    case PROP_FRAGMENT:
+      GST_OBJECT_LOCK (filtershader);
+      g_value_set_string (value, filtershader->fragment);
+      GST_OBJECT_UNLOCK (filtershader);
+      break;
+    case PROP_UNIFORMS:
+      GST_OBJECT_LOCK (filtershader);
+      g_value_set_boxed (value, filtershader->uniforms);
+      GST_OBJECT_UNLOCK (filtershader);
+      break;
     default:
       G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
       break;
   }
 }
 
-static gboolean
-gst_gl_filtershader_load_shader (GstGLFilterShader * filter_shader,
-    char *filename, char **storage)
-{
-  GError *error = NULL;
-  gsize length;
-
-  g_return_val_if_fail (storage != NULL, FALSE);
-
-  if (!filename) {
-    GST_ELEMENT_ERROR (filter_shader, RESOURCE, NOT_FOUND,
-        ("A shader file is required"), (NULL));
-    return FALSE;
-  }
-
-  if (!g_file_get_contents (filename, storage, &length, &error)) {
-    GST_ELEMENT_ERROR (filter_shader, RESOURCE, NOT_FOUND, ("%s",
-            error->message), (NULL));
-    g_error_free (error);
-
-    return FALSE;
-  }
-
-  return TRUE;
-}
-
-static gboolean
-gst_gl_filtershader_load_variables (GstGLFilterShader * filter_shader,
-    char *filename, char **storage)
-{
-  GError *error = NULL;
-  gsize length;
-
-  if (storage[0]) {
-    g_free (storage[0]);
-    storage[0] = 0;
-  }
-
-  if (!filename)
-    return TRUE;
-
-  if (!g_file_get_contents (filename, storage, &length, &error)) {
-    GST_ELEMENT_ERROR (filter_shader, RESOURCE, NOT_FOUND, ("%s",
-            error->message), (NULL));
-    g_error_free (error);
-
-    return FALSE;
-  }
-
-  return TRUE;
-}
-
 static void
-gst_gl_filtershader_variables_parse (GstGLShader * shader, gchar * variables)
+gst_gl_filtershader_gl_stop (GstGLBaseFilter * base)
 {
-  gst_gl_shadervariables_parse (shader, variables, 0);
+  GstGLFilterShader *filtershader = GST_GL_FILTERSHADER (base);
+
+  if (filtershader->shader)
+    gst_object_unref (filtershader->shader);
+  filtershader->shader = NULL;
+
+  GST_GL_BASE_FILTER_CLASS (parent_class)->gl_stop (base);
 }
 
 static gboolean
-gst_gl_filtershader_init_shader (GstGLFilter * filter)
+gst_gl_filtershader_gl_start (GstGLBaseFilter * base)
 {
-
-  GstGLFilterShader *filtershader = GST_GL_FILTERSHADER (filter);
-
-  if (!gst_gl_filtershader_load_shader (filtershader, filtershader->filename,
-          &hfilter_fragment_source))
-    return FALSE;
-
-  //blocking call, wait the opengl thread has compiled the shader
-  if (!gst_gl_context_gen_shader (GST_GL_BASE_FILTER (filter)->context,
-          text_vertex_shader, hfilter_fragment_source, &filtershader->shader0))
-    return FALSE;
-
-
-  if (!gst_gl_filtershader_load_variables (filtershader,
-          filtershader->presetfile, &hfilter_fragment_variables[0]))
-    return FALSE;
-
-  filtershader->compiled = 1;
-
-  return TRUE;
+  return GST_GL_BASE_FILTER_CLASS (parent_class)->gl_start (base);
 }
 
 static inline gboolean
@@ -397,9 +321,178 @@
   gst_gl_filter_render_to_target (filter, TRUE, in_tex, out_tex,
       gst_gl_filtershader_hcallback, filtershader);
 
+  if (!filtershader->shader)
+    return FALSE;
+
   return TRUE;
 }
 
+static gboolean
+_set_uniform (GQuark field_id, const GValue * value, gpointer user_data)
+{
+  GstGLShader *shader = user_data;
+  const gchar *field_name = g_quark_to_string (field_id);
+
+  if (G_TYPE_CHECK_VALUE_TYPE ((value), G_TYPE_INT)) {
+    gst_gl_shader_set_uniform_1i (shader, field_name, g_value_get_int (value));
+  } else if (G_TYPE_CHECK_VALUE_TYPE ((value), G_TYPE_FLOAT)) {
+    gst_gl_shader_set_uniform_1f (shader, field_name,
+        g_value_get_float (value));
+#if HAVE_GRAPHENE
+  } else if (G_TYPE_CHECK_VALUE_TYPE ((value), GRAPHENE_TYPE_VEC2)) {
+    graphene_vec2_t *vec2 = g_value_get_boxed (value);
+    float x = graphene_vec2_get_x (vec2);
+    float y = graphene_vec2_get_y (vec2);
+    gst_gl_shader_set_uniform_2f (shader, field_name, x, y);
+  } else if (G_TYPE_CHECK_VALUE_TYPE ((value), GRAPHENE_TYPE_VEC3)) {
+    graphene_vec3_t *vec3 = g_value_get_boxed (value);
+    float x = graphene_vec3_get_x (vec3);
+    float y = graphene_vec3_get_y (vec3);
+    float z = graphene_vec3_get_z (vec3);
+    gst_gl_shader_set_uniform_3f (shader, field_name, x, y, z);
+  } else if (G_TYPE_CHECK_VALUE_TYPE ((value), GRAPHENE_TYPE_VEC4)) {
+    graphene_vec4_t *vec4 = g_value_get_boxed (value);
+    float x = graphene_vec4_get_x (vec4);
+    float y = graphene_vec4_get_y (vec4);
+    float z = graphene_vec4_get_z (vec4);
+    float w = graphene_vec4_get_w (vec4);
+    gst_gl_shader_set_uniform_4f (shader, field_name, x, y, z, w);
+  } else if (G_TYPE_CHECK_VALUE_TYPE ((value), GRAPHENE_TYPE_MATRIX)) {
+    graphene_matrix_t *matrix = g_value_get_boxed (value);
+    float matrix_f[16];
+    graphene_matrix_to_float (matrix, matrix_f);
+    gst_gl_shader_set_uniform_matrix_4fv (shader, field_name, 1, FALSE,
+        matrix_f);
+#endif
+  } else {
+    /* FIXME: Add support for unsigned ints, non 4x4 matrices, etc */
+    GST_FIXME ("Don't know how to set the \'%s\' paramater.  Unknown type",
+        field_name);
+    return TRUE;
+  }
+
+  return TRUE;
+}
+
+static void
+_update_uniforms (GstGLFilterShader * filtershader)
+{
+  if (filtershader->new_uniforms && filtershader->uniforms) {
+    gst_gl_shader_use (filtershader->shader);
+
+    gst_structure_foreach (filtershader->uniforms,
+        (GstStructureForeachFunc) _set_uniform, filtershader->shader);
+    filtershader->new_uniforms = FALSE;
+  }
+}
+
+static GstGLShader *
+_maybe_recompile_shader (GstGLFilterShader * filtershader)
+{
+  GstGLContext *context = GST_GL_BASE_FILTER (filtershader)->context;
+  GstGLShader *shader;
+  GError *error = NULL;
+
+  GST_OBJECT_LOCK (filtershader);
+
+  if (!filtershader->shader || filtershader->update_shader) {
+    filtershader->update_shader = FALSE;
+    GST_OBJECT_UNLOCK (filtershader);
+    g_signal_emit (filtershader, gst_gl_shader_signals[SIGNAL_CREATE_SHADER], 0,
+        &shader);
+    GST_OBJECT_LOCK (filtershader);
+
+    if (shader) {
+      if (filtershader->shader)
+        gst_object_unref (filtershader->shader);
+      filtershader->new_source = FALSE;
+      filtershader->shader = gst_object_ref (shader);
+      filtershader->new_uniforms = TRUE;
+      _update_uniforms (filtershader);
+      GST_OBJECT_UNLOCK (filtershader);
+      return shader;
+    }
+  }
+
+  if (filtershader->shader) {
+    shader = gst_object_ref (filtershader->shader);
+    _update_uniforms (filtershader);
+    GST_OBJECT_UNLOCK (filtershader);
+    return shader;
+  }
+
+  if (filtershader->new_source) {
+    GstGLSLStage *stage;
+
+    shader = gst_gl_shader_new (context);
+
+    if (filtershader->vertex) {
+      if (!(stage = gst_glsl_stage_new_with_string (context, GL_VERTEX_SHADER,
+                  GST_GLSL_VERSION_NONE, GST_GLSL_PROFILE_NONE,
+                  filtershader->vertex))) {
+        g_set_error (&error, GST_GLSL_ERROR, GST_GLSL_ERROR_COMPILE,
+            "Failed to create shader vertex stage");
+        goto print_error;
+      }
+    } else {
+      stage = gst_glsl_stage_new_default_vertex (context);
+    }
+
+    if (!gst_gl_shader_compile_attach_stage (shader, stage, &error)) {
+      gst_object_unref (stage);
+      goto print_error;
+    }
+
+    if (filtershader->fragment) {
+      if (!(stage = gst_glsl_stage_new_with_string (context, GL_FRAGMENT_SHADER,
+                  GST_GLSL_VERSION_NONE, GST_GLSL_PROFILE_NONE,
+                  filtershader->fragment))) {
+        g_set_error (&error, GST_GLSL_ERROR, GST_GLSL_ERROR_COMPILE,
+            "Failed to create shader fragment stage");
+        goto print_error;
+      }
+    } else {
+      stage = gst_glsl_stage_new_default_fragment (context);
+    }
+
+    if (!gst_gl_shader_compile_attach_stage (shader, stage, &error)) {
+      gst_object_unref (stage);
+      goto print_error;
+    }
+
+    if (!gst_gl_shader_link (shader, &error)) {
+      goto print_error;
+    }
+    if (filtershader->shader)
+      gst_object_unref (filtershader->shader);
+    filtershader->shader = gst_object_ref (shader);
+    filtershader->new_source = FALSE;
+    filtershader->new_uniforms = TRUE;
+    _update_uniforms (filtershader);
+
+    GST_OBJECT_UNLOCK (filtershader);
+    return shader;
+  } else if (filtershader->shader) {
+    _update_uniforms (filtershader);
+    shader = gst_object_ref (filtershader->shader);
+    GST_OBJECT_UNLOCK (filtershader);
+    return shader;
+  }
+
+  return NULL;
+
+print_error:
+  if (shader) {
+    gst_object_unref (shader);
+    shader = NULL;
+  }
+
+  GST_OBJECT_UNLOCK (filtershader);
+  GST_ELEMENT_ERROR (filtershader, RESOURCE, NOT_FOUND,
+      ("%s", error->message), (NULL));
+  return NULL;
+}
+
 static void
 gst_gl_filtershader_hcallback (gint width, gint height, guint texture,
     gpointer stuff)
@@ -407,39 +500,32 @@
   GstGLFilter *filter = GST_GL_FILTER (stuff);
   GstGLFilterShader *filtershader = GST_GL_FILTERSHADER (filter);
   GstGLFuncs *gl = GST_GL_BASE_FILTER (filter)->context->gl_vtable;
+  GstGLShader *shader;
 
-  gst_gl_shader_use (filtershader->shader0);
+  if (!(shader = _maybe_recompile_shader (filtershader)))
+    return;
+
+  gl->ClearColor (0.0, 0.0, 0.0, 1.0);
+  gl->Clear (GL_COLOR_BUFFER_BIT);
+
+  gst_gl_shader_use (shader);
+
+  /* FIXME: propertise these */
+  gst_gl_shader_set_uniform_1i (shader, "tex", 0);
+  gst_gl_shader_set_uniform_1f (shader, "width", width);
+  gst_gl_shader_set_uniform_1f (shader, "height", height);
+  gst_gl_shader_set_uniform_1f (shader, "time", filtershader->time);
+
+  /* FIXME: propertise these */
+  filter->draw_attr_position_loc =
+      gst_gl_shader_get_attribute_location (shader, "a_position");
+  filter->draw_attr_texture_loc =
+      gst_gl_shader_get_attribute_location (shader, "a_texcoord");
 
   gl->ActiveTexture (GL_TEXTURE0);
   gl->BindTexture (GL_TEXTURE_2D, texture);
 
-  gst_gl_shader_set_uniform_1i (filtershader->shader0, "tex", 0);
-  gst_gl_shader_set_uniform_1f (filtershader->shader0, "width", width);
-  gst_gl_shader_set_uniform_1f (filtershader->shader0, "height", height);
-  gst_gl_shader_set_uniform_1f (filtershader->shader0, "time",
-      filtershader->time);
-
-  filter->draw_attr_position_loc =
-      gst_gl_shader_get_attribute_location (filtershader->shader0,
-      "a_position");
-  filter->draw_attr_texture_loc =
-      gst_gl_shader_get_attribute_location (filtershader->shader0,
-      "a_texcoord");
-
-  if (hfilter_fragment_variables[0]) {
-    gst_gl_filtershader_variables_parse (filtershader->shader0,
-        hfilter_fragment_variables[0]);
-    g_free (hfilter_fragment_variables[0]);
-    hfilter_fragment_variables[0] = 0;
-  }
-  if (hfilter_fragment_variables[1]) {
-    gst_gl_filtershader_variables_parse (filtershader->shader0,
-        hfilter_fragment_variables[1]);
-    g_free (hfilter_fragment_variables[1]);
-    hfilter_fragment_variables[1] = 0;
-  }
-
-  gl->Clear (GL_COLOR_BUFFER_BIT);
-
   gst_gl_filter_draw_texture (filter, texture, width, height);
+
+  gst_object_unref (shader);
 }
diff --git a/ext/gl/gstglfiltershader.h b/ext/gl/gstglfiltershader.h
index 615382a..adf1410 100644
--- a/ext/gl/gstglfiltershader.h
+++ b/ext/gl/gstglfiltershader.h
@@ -37,11 +37,16 @@
 struct _GstGLFilterShader
 {
   GstGLFilter filter;
-  GstGLShader *shader0;
-  int compiled;
-  gchar *filename;
-  gchar *presetfile;
-  int texSet;
+
+  /* properties */
+  GstGLShader *shader;
+  gchar *vertex;
+  gchar *fragment;
+  gboolean update_shader; /* update the shader on the next draw */
+  GstStructure *uniforms;
+
+  gboolean new_source;
+  gboolean new_uniforms;
   gdouble time;
 
   gint attr_position_loc;
diff --git a/ext/gl/gstglimagesink.c b/ext/gl/gstglimagesink.c
index 49e59b8..3b5e3b5 100644
--- a/ext/gl/gstglimagesink.c
+++ b/ext/gl/gstglimagesink.c
@@ -89,6 +89,7 @@
 
 #include <gst/video/videooverlay.h>
 #include <gst/video/navigation.h>
+#include <gst/video/gstvideoaffinetransformationmeta.h>
 
 #include "gstglimagesink.h"
 #include "gstglsinkbin.h"
@@ -321,17 +322,26 @@
 static gboolean update_output_format (GstGLImageSink * glimage_sink);
 
 #define GST_GL_SINK_CAPS \
-    GST_VIDEO_CAPS_MAKE_WITH_FEATURES (GST_CAPS_FEATURE_MEMORY_GL_MEMORY, "RGBA")
-
-#define GST_GL_SINK_OVERLAY_CAPS \
-    GST_VIDEO_CAPS_MAKE_WITH_FEATURES (GST_CAPS_FEATURE_MEMORY_GL_MEMORY "," \
-            GST_CAPS_FEATURE_META_GST_VIDEO_OVERLAY_COMPOSITION, "RGBA")
+    "video/x-raw(" GST_CAPS_FEATURE_MEMORY_GL_MEMORY "), "              \
+    "format = (string) RGBA, "                                          \
+    "width = " GST_VIDEO_SIZE_RANGE ", "                                \
+    "height = " GST_VIDEO_SIZE_RANGE ", "                               \
+    "framerate = " GST_VIDEO_FPS_RANGE ", "                             \
+    "texture-target = (string) { 2D, external-oes } "                   \
+    " ; "                                                               \
+    "video/x-raw(" GST_CAPS_FEATURE_MEMORY_GL_MEMORY ","                \
+    GST_CAPS_FEATURE_META_GST_VIDEO_OVERLAY_COMPOSITION "), "           \
+    "format = (string) RGBA, "                                          \
+    "width = " GST_VIDEO_SIZE_RANGE ", "                                \
+    "height = " GST_VIDEO_SIZE_RANGE ", "                               \
+    "framerate = " GST_VIDEO_FPS_RANGE ", "                             \
+    "texture-target = (string) { 2D, external-oes } "
 
 static GstStaticPadTemplate gst_glimage_sink_template =
-    GST_STATIC_PAD_TEMPLATE ("sink",
+GST_STATIC_PAD_TEMPLATE ("sink",
     GST_PAD_SINK,
     GST_PAD_ALWAYS,
-    GST_STATIC_CAPS (GST_GL_SINK_CAPS ";" GST_GL_SINK_OVERLAY_CAPS));
+    GST_STATIC_CAPS (GST_GL_SINK_CAPS));
 
 enum
 {
@@ -399,8 +409,8 @@
     * structure)
 {
   GstGLImageSink *sink = GST_GLIMAGE_SINK (navigation);
+  gboolean handled = FALSE;
   GstEvent *event = NULL;
-  GstPad *pad = NULL;
   GstGLWindow *window;
   guint width, height;
   gdouble x, y;
@@ -411,15 +421,12 @@
   }
 
   window = gst_gl_context_get_window (sink->context);
-  g_return_if_fail (GST_GL_IS_WINDOW (window));
+  g_return_if_fail (GST_IS_GL_WINDOW (window));
 
   width = GST_VIDEO_SINK_WIDTH (sink);
   height = GST_VIDEO_SINK_HEIGHT (sink);
   gst_gl_window_get_surface_dimensions (window, &width, &height);
 
-  event = gst_event_new_navigation (structure);
-
-  pad = gst_pad_get_peer (GST_VIDEO_SINK_PAD (sink));
   /* Converting pointer coordinates to the non scaled geometry */
   if (width != 0 && gst_structure_get_double (structure, "pointer_x", &x)
       && height != 0 && gst_structure_get_double (structure, "pointer_y", &y)) {
@@ -431,10 +438,17 @@
         stream_x, "pointer_y", G_TYPE_DOUBLE, stream_y, NULL);
   }
 
-  if (GST_IS_PAD (pad) && GST_IS_EVENT (event))
-    gst_pad_send_event (pad, event);
+  event = gst_event_new_navigation (structure);
+  if (event) {
+    gst_event_ref (event);
+    handled = gst_pad_push_event (GST_VIDEO_SINK_PAD (sink), event);
 
-  gst_object_unref (pad);
+    if (!handled)
+      gst_element_post_message ((GstElement *) sink,
+          gst_navigation_message_new_event ((GstObject *) sink, event));
+
+    gst_event_unref (event);
+  }
   gst_object_unref (window);
 }
 
@@ -707,8 +721,7 @@
 gst_glimage_sink_key_event_cb (GstGLWindow * window, char *event_name, char
     *key_string, GstGLImageSink * gl_sink)
 {
-  GST_DEBUG_OBJECT (gl_sink, "glimagesink event %s key %s pressed", event_name,
-      key_string);
+  GST_DEBUG_OBJECT (gl_sink, "event %s key %s pressed", event_name, key_string);
   gst_navigation_send_key_event (GST_NAVIGATION (gl_sink),
       event_name, key_string);
 }
@@ -717,8 +730,7 @@
 gst_glimage_sink_mouse_event_cb (GstGLWindow * window, char *event_name,
     int button, double posx, double posy, GstGLImageSink * gl_sink)
 {
-  GST_DEBUG_OBJECT (gl_sink, "glimagesink event %s at %g, %g", event_name, posx,
-      posy);
+  GST_DEBUG_OBJECT (gl_sink, "event %s at %g, %g", event_name, posx, posy);
   gst_navigation_send_mouse_event (GST_NAVIGATION (gl_sink),
       event_name, button, posx, posy);
 }
@@ -884,6 +896,7 @@
       buf[0] = glimage_sink->stored_buffer[0];
       buf[1] = glimage_sink->stored_buffer[1];
       glimage_sink->stored_buffer[0] = glimage_sink->stored_buffer[1] = NULL;
+      glimage_sink->stored_sync_meta = glimage_sink->next_sync_meta = NULL;
       GST_GLIMAGE_SINK_UNLOCK (glimage_sink);
 
       gst_buffer_replace (buf, NULL);
@@ -916,6 +929,8 @@
 
   if (gl_sink->display)
     gst_gl_display_filter_gl_api (gl_sink->display, SUPPORTED_GL_APIS);
+
+  GST_ELEMENT_CLASS (parent_class)->set_context (element, context);
 }
 
 static GstStateChangeReturn
@@ -937,14 +952,11 @@
         return GST_STATE_CHANGE_FAILURE;
 
       gst_gl_display_filter_gl_api (glimage_sink->display, SUPPORTED_GL_APIS);
-      break;
-    case GST_STATE_CHANGE_READY_TO_PAUSED:
+
       if (!_ensure_gl_setup (glimage_sink))
         return GST_STATE_CHANGE_FAILURE;
-
-      glimage_sink->overlay_compositor =
-          gst_gl_overlay_compositor_new (glimage_sink->context);
-
+      break;
+    case GST_STATE_CHANGE_READY_TO_PAUSED:
       g_atomic_int_set (&glimage_sink->to_quit, 0);
       break;
     case GST_STATE_CHANGE_PAUSED_TO_PLAYING:
@@ -972,6 +984,7 @@
       buf[0] = glimage_sink->stored_buffer[0];
       buf[1] = glimage_sink->stored_buffer[1];
       glimage_sink->stored_buffer[0] = glimage_sink->stored_buffer[1] = NULL;
+      glimage_sink->stored_sync_meta = glimage_sink->next_sync_meta = NULL;
 
       if (glimage_sink->stored_sync)
         gst_buffer_unref (glimage_sink->stored_sync);
@@ -999,6 +1012,17 @@
         gst_caps_unref (glimage_sink->out_caps);
         glimage_sink->out_caps = NULL;
       }
+      if (glimage_sink->in_caps) {
+        gst_caps_unref (glimage_sink->in_caps);
+        glimage_sink->in_caps = NULL;
+      }
+      break;
+    }
+    case GST_STATE_CHANGE_READY_TO_NULL:
+      if (glimage_sink->overlay_compositor) {
+        gst_object_unref (glimage_sink->overlay_compositor);
+        glimage_sink->overlay_compositor = NULL;
+      }
 
       if (glimage_sink->context) {
         GstGLWindow *window = gst_gl_context_get_window (glimage_sink->context);
@@ -1017,16 +1041,11 @@
           g_signal_handler_disconnect (window, glimage_sink->mouse_sig_id);
         glimage_sink->mouse_sig_id = 0;
 
-        gst_object_unref (glimage_sink->overlay_compositor);
-        glimage_sink->overlay_compositor = NULL;
-
         gst_object_unref (window);
         gst_object_unref (glimage_sink->context);
         glimage_sink->context = NULL;
       }
-      break;
-    }
-    case GST_STATE_CHANGE_READY_TO_NULL:
+
       if (glimage_sink->other_context) {
         gst_object_unref (glimage_sink->other_context);
         glimage_sink->other_context = NULL;
@@ -1164,9 +1183,14 @@
   gboolean input_is_mono = FALSE;
   GstVideoMultiviewMode mv_mode;
   GstGLWindow *window = NULL;
+  GstGLTextureTarget previous_target;
+  GstStructure *s;
+  const gchar *target_str;
+  GstCaps *out_caps;
   gboolean ret;
 
   *out_info = glimage_sink->in_info;
+  previous_target = glimage_sink->texture_target;
 
   mv_mode = GST_VIDEO_INFO_MULTIVIEW_MODE (&glimage_sink->in_info);
 
@@ -1205,15 +1229,51 @@
     glimage_sink->out_info.height = MAX (1, glimage_sink->display_rect.h);
     GST_LOG_OBJECT (glimage_sink, "Set 3D output scale to %d,%d",
         glimage_sink->display_rect.w, glimage_sink->display_rect.h);
+  }
+
+  s = gst_caps_get_structure (glimage_sink->in_caps, 0);
+  target_str = gst_structure_get_string (s, "texture-target");
+
+  if (!target_str)
+    target_str = GST_GL_TEXTURE_TARGET_2D_STR;
+
+  glimage_sink->texture_target = gst_gl_texture_target_from_string (target_str);
+  if (!glimage_sink->texture_target)
+    return FALSE;
+
+  out_caps = gst_video_info_to_caps (out_info);
+  gst_caps_set_features (out_caps, 0,
+      gst_caps_features_from_string (GST_CAPS_FEATURE_MEMORY_GL_MEMORY));
+  gst_caps_set_simple (out_caps, "texture-target", G_TYPE_STRING,
+      target_str, NULL);
+
+  if (glimage_sink->convert_views) {
+    gst_caps_set_simple (out_caps, "texture-target", G_TYPE_STRING,
+        GST_GL_TEXTURE_TARGET_2D_STR, NULL);
+
+    glimage_sink->texture_target = GST_GL_TEXTURE_TARGET_2D;
 
     GST_GLIMAGE_SINK_UNLOCK (glimage_sink);
-    gst_gl_view_convert_set_format (glimage_sink->convert_views,
-        &glimage_sink->in_info, &glimage_sink->out_info);
+    gst_gl_view_convert_set_caps (glimage_sink->convert_views,
+        glimage_sink->in_caps, out_caps);
     g_object_set (glimage_sink->convert_views, "downmix-mode",
         glimage_sink->mview_downmix_mode, NULL);
     GST_GLIMAGE_SINK_LOCK (glimage_sink);
   }
 
+  if (glimage_sink->out_caps)
+    gst_caps_unref (glimage_sink->out_caps);
+  glimage_sink->out_caps = out_caps;
+
+  if (previous_target != GST_GL_TEXTURE_TARGET_NONE &&
+      glimage_sink->texture_target != previous_target) {
+    /* regenerate the shader for the changed target */
+    GstGLWindow *window = gst_gl_context_get_window (glimage_sink->context);
+    gst_gl_window_send_message (window,
+        GST_GL_WINDOW_CB (gst_glimage_sink_cleanup_glthread), glimage_sink);
+    gst_object_unref (window);
+  }
+
   glimage_sink->output_mode_changed = FALSE;
 
   if (glimage_sink->context)
@@ -1223,10 +1283,6 @@
     gst_object_unref (window);
   }
 
-  if (glimage_sink->out_caps)
-    gst_caps_unref (glimage_sink->out_caps);
-  glimage_sink->out_caps = gst_video_info_to_caps (out_info);
-
   return ret;
 }
 
@@ -1249,6 +1305,9 @@
     return FALSE;
 
   GST_GLIMAGE_SINK_LOCK (glimage_sink);
+  if (glimage_sink->in_caps)
+    gst_caps_unref (glimage_sink->in_caps);
+  glimage_sink->in_caps = gst_caps_ref (caps);
   glimage_sink->in_info = vinfo;
   ok = update_output_format (glimage_sink);
 
@@ -1264,7 +1323,7 @@
 {
   GstBuffer *in_buffer, *next_buffer, *old_buffer;
   GstBuffer *in_buffer2 = NULL, *next_buffer2 = NULL, *old_buffer2;
-  GstBuffer *next_sync, *old_sync;
+  GstBuffer *next_sync = NULL, *old_sync;
   GstGLSyncMeta *sync_meta;
   GstVideoFrame gl_frame;
   GstGLViewConvert *convert_views = NULL;
@@ -1315,6 +1374,7 @@
         goto fail;
     }
     gst_object_unref (convert_views);
+    convert_views = NULL;
 
     if (next_buffer == NULL) {
       /* Not ready to paint a buffer yet */
@@ -1326,20 +1386,33 @@
     info = &glimage_sink->in_info;
   }
 
+  if (!glimage_sink->overlay_compositor) {
+    if (!(glimage_sink->overlay_compositor =
+            gst_gl_overlay_compositor_new (glimage_sink->context))) {
+      gst_buffer_unref (next_buffer);
+      goto fail;
+    }
+  }
+
   gst_gl_overlay_compositor_upload_overlays (glimage_sink->overlay_compositor,
       next_buffer);
 
+  sync_meta = gst_buffer_get_gl_sync_meta (next_buffer);
+
+  if (!sync_meta) {
+    next_sync = gst_buffer_new ();
+    sync_meta = gst_buffer_add_gl_sync_meta (glimage_sink->context, next_sync);
+    gst_gl_sync_meta_set_sync_point (sync_meta, glimage_sink->context);
+  }
+
   /* in_buffer invalid now */
   if (!gst_video_frame_map (&gl_frame, info, next_buffer,
           GST_MAP_READ | GST_MAP_GL)) {
     gst_buffer_unref (next_buffer);
+    GST_ERROR ("Failed to map video frame.");
     goto fail;
   }
 
-  next_sync = gst_buffer_new ();
-  sync_meta = gst_buffer_add_gl_sync_meta (glimage_sink->context, next_sync);
-  gst_gl_sync_meta_set_sync_point (sync_meta, glimage_sink->context);
-
   GST_GLIMAGE_SINK_LOCK (glimage_sink);
   glimage_sink->next_tex = *(guint *) gl_frame.data[0];
 
@@ -1350,6 +1423,7 @@
 
   old_sync = glimage_sink->next_sync;
   glimage_sink->next_sync = next_sync;
+  glimage_sink->next_sync_meta = sync_meta;
 
   /* Need to drop the lock again, to avoid a deadlock if we're
    * dropping the last ref on this buffer and it goes back to our
@@ -1369,6 +1443,8 @@
   return TRUE;
 
 fail:
+  if (convert_views)
+    gst_object_unref (convert_views);
   GST_GLIMAGE_SINK_LOCK (glimage_sink);
   return FALSE;
 }
@@ -1377,6 +1453,7 @@
 gst_glimage_sink_prepare (GstBaseSink * bsink, GstBuffer * buf)
 {
   GstGLImageSink *glimage_sink;
+  GstGLSyncMeta *sync_meta;
   GstBuffer **target;
   GstBuffer *old_input;
 
@@ -1392,7 +1469,20 @@
   if (!_ensure_gl_setup (glimage_sink))
     return GST_FLOW_NOT_NEGOTIATED;
 
+  sync_meta = gst_buffer_get_gl_sync_meta (buf);
+  if (sync_meta)
+    gst_gl_sync_meta_wait (sync_meta, glimage_sink->context);
+
   GST_GLIMAGE_SINK_LOCK (glimage_sink);
+  if (glimage_sink->window_resized) {
+    glimage_sink->window_resized = FALSE;
+    GST_GLIMAGE_SINK_UNLOCK (glimage_sink);
+    GST_DEBUG_OBJECT (glimage_sink, "Sending reconfigure event on sinkpad.");
+    gst_pad_push_event (GST_BASE_SINK (glimage_sink)->sinkpad,
+        gst_event_new_reconfigure ());
+    GST_GLIMAGE_SINK_LOCK (glimage_sink);
+  }
+
   target = &glimage_sink->input_buffer;
   if (GST_VIDEO_INFO_MULTIVIEW_MODE (&glimage_sink->in_info) ==
       GST_VIDEO_MULTIVIEW_MODE_FRAME_BY_FRAME &&
@@ -1682,13 +1772,47 @@
 gst_glimage_sink_thread_init_redisplay (GstGLImageSink * gl_sink)
 {
   const GstGLFuncs *gl = gl_sink->context->gl_vtable;
+  GError *error = NULL;
+  GstGLSLStage *frag_stage, *vert_stage;
 
-  gl_sink->redisplay_shader = gst_gl_shader_new (gl_sink->context);
-
-  if (!gst_gl_shader_compile_with_default_vf_and_check
-      (gl_sink->redisplay_shader, &gl_sink->attr_position,
-          &gl_sink->attr_texture))
+  if (gl_sink->texture_target == GST_GL_TEXTURE_TARGET_EXTERNAL_OES) {
+    vert_stage = gst_glsl_stage_new_with_string (gl_sink->context,
+        GL_VERTEX_SHADER, GST_GLSL_VERSION_NONE,
+        GST_GLSL_PROFILE_ES | GST_GLSL_PROFILE_COMPATIBILITY,
+        gst_gl_shader_string_vertex_mat4_texture_transform);
+    frag_stage = gst_glsl_stage_new_with_string (gl_sink->context,
+        GL_FRAGMENT_SHADER, GST_GLSL_VERSION_NONE,
+        GST_GLSL_PROFILE_ES | GST_GLSL_PROFILE_COMPATIBILITY,
+        gst_gl_shader_string_fragment_external_oes_default);
+  } else {
+    vert_stage = gst_glsl_stage_new_default_vertex (gl_sink->context);
+    frag_stage = gst_glsl_stage_new_default_fragment (gl_sink->context);
+  }
+  if (!vert_stage || !frag_stage) {
+    GST_ERROR_OBJECT (gl_sink, "Failed to retreive fragment shader for "
+        "texture target");
+    if (vert_stage)
+      gst_object_unref (vert_stage);
+    if (frag_stage)
+      gst_object_unref (frag_stage);
     gst_glimage_sink_cleanup_glthread (gl_sink);
+    return;
+  }
+
+  if (!(gl_sink->redisplay_shader =
+          gst_gl_shader_new_link_with_stages (gl_sink->context, &error,
+              vert_stage, frag_stage, NULL))) {
+    GST_ERROR_OBJECT (gl_sink, "Failed to link shader: %s", error->message);
+    gst_glimage_sink_cleanup_glthread (gl_sink);
+    return;
+  }
+
+  gl_sink->attr_position =
+      gst_gl_shader_get_attribute_location (gl_sink->redisplay_shader,
+      "a_position");
+  gl_sink->attr_texture =
+      gst_gl_shader_get_attribute_location (gl_sink->redisplay_shader,
+      "a_texcoord");
 
   if (gl->GenVertexArrays) {
     gl->GenVertexArrays (1, &gl_sink->vao);
@@ -1743,7 +1867,8 @@
     gl_sink->vbo_indices = 0;
   }
 
-  gst_gl_overlay_compositor_free_overlays (gl_sink->overlay_compositor);
+  if (gl_sink->overlay_compositor)
+    gst_gl_overlay_compositor_free_overlays (gl_sink->overlay_compositor);
 }
 
 /* Called with object lock held */
@@ -1755,7 +1880,6 @@
    */
   const GstGLFuncs *gl;
   gboolean do_reshape;
-  gboolean reconfigure;
 
   GST_DEBUG_OBJECT (gl_sink, "GL Window resized to %ux%u", width, height);
 
@@ -1769,7 +1893,7 @@
   height = MAX (1, height);
 
   /* Check if we would suggest a different width/height now */
-  reconfigure = ((gl_sink->window_width != width)
+  gl_sink->window_resized = ((gl_sink->window_width != width)
       || (gl_sink->window_height != height))
       && (gl_sink->window_width != 0)
       && (gl_sink->window_height != 0);
@@ -1777,11 +1901,8 @@
   gl_sink->window_width = width;
   gl_sink->window_height = height;
 
-  if (reconfigure) {
-    GST_DEBUG ("Sending reconfigure event on sinkpad.");
-    gst_pad_push_event (GST_BASE_SINK (gl_sink)->sinkpad,
-        gst_event_new_reconfigure ());
-  }
+  gst_gl_insert_debug_marker (gl_sink->context, "%s window resize to %ix%i",
+      GST_OBJECT_NAME (gl_sink), width, height);
 
   /* default reshape */
   if (!do_reshape) {
@@ -1821,6 +1942,13 @@
   GST_GLIMAGE_SINK_UNLOCK (gl_sink);
 }
 
+static const gfloat identity_matrix[] = {
+  1.0f, 0.0f, 0.0, 0.0f,
+  0.0f, 1.0f, 0.0, 0.0f,
+  0.0f, 0.0f, 1.0, 0.0f,
+  0.0f, 0.0f, 0.0, 1.0f,
+};
+
 static void
 gst_glimage_sink_on_draw (GstGLImageSink * gl_sink)
 {
@@ -1833,8 +1961,8 @@
   const GstGLFuncs *gl = NULL;
   GstGLWindow *window = NULL;
   gboolean do_redisplay = FALSE;
-  GstGLSyncMeta *sync_meta = NULL;
   GstSample *sample = NULL;
+  guint gl_target = gst_gl_texture_target_to_gl (gl_sink->texture_target);
 
   g_return_if_fail (GST_IS_GLIMAGE_SINK (gl_sink));
 
@@ -1852,19 +1980,17 @@
   window->is_drawing = TRUE;
 
   /* opengl scene */
+  gst_gl_insert_debug_marker (gl_sink->context, "%s element drawing texture %u",
+      GST_OBJECT_NAME (gl_sink), gl_sink->redisplay_texture);
   GST_TRACE ("redrawing texture:%u", gl_sink->redisplay_texture);
 
-  sync_meta = gst_buffer_get_gl_sync_meta (gl_sink->stored_sync);
-  if (sync_meta)
-    gst_gl_sync_meta_wait (sync_meta, gst_gl_context_get_current ());
+  if (gl_sink->stored_sync_meta)
+    gst_gl_sync_meta_wait (gl_sink->stored_sync_meta,
+        gst_gl_context_get_current ());
 
   /* make sure that the environnement is clean */
   gst_gl_context_clear_shader (gl_sink->context);
-  gl->BindTexture (GL_TEXTURE_2D, 0);
-#if GST_GL_HAVE_OPENGL
-  if (USING_OPENGL (gl_sink->context))
-    gl->Disable (GL_TEXTURE_2D);
-#endif
+  gl->BindTexture (gl_target, 0);
 
   sample = gst_sample_new (gl_sink->stored_buffer[0],
       gl_sink->out_caps, &GST_BASE_SINK (gl_sink)->segment, NULL);
@@ -1901,11 +2027,25 @@
       _bind_buffer (gl_sink);
 
     gl->ActiveTexture (GL_TEXTURE0);
-    gl->BindTexture (GL_TEXTURE_2D, gl_sink->redisplay_texture);
+    gl->BindTexture (gl_target, gl_sink->redisplay_texture);
     gst_gl_shader_set_uniform_1i (gl_sink->redisplay_shader, "tex", 0);
+    if (gl_sink->texture_target == GST_GL_TEXTURE_TARGET_EXTERNAL_OES) {
+      GstVideoAffineTransformationMeta *af_meta;
+
+      af_meta =
+          gst_buffer_get_video_affine_transformation_meta
+          (gl_sink->stored_buffer[0]);
+      if (af_meta)
+        gst_gl_shader_set_uniform_matrix_4fv (gl_sink->redisplay_shader,
+            "u_transformation", 1, FALSE, af_meta->matrix);
+      else
+        gst_gl_shader_set_uniform_matrix_4fv (gl_sink->redisplay_shader,
+            "u_transformation", 1, FALSE, identity_matrix);
+    }
 
     gl->DrawElements (GL_TRIANGLES, 6, GL_UNSIGNED_SHORT, 0);
 
+    gl->BindTexture (gl_target, 0);
     gst_gl_context_clear_shader (gl_sink->context);
 
     if (gl->GenVertexArrays)
@@ -1981,6 +2121,15 @@
 
     /* Recreate the output texture if needed */
     GST_GLIMAGE_SINK_LOCK (gl_sink);
+    if (gl_sink->window_resized) {
+      gl_sink->window_resized = FALSE;
+      GST_GLIMAGE_SINK_UNLOCK (gl_sink);
+      GST_DEBUG_OBJECT (gl_sink, "Sending reconfigure event on sinkpad.");
+      gst_pad_push_event (GST_BASE_SINK (gl_sink)->sinkpad,
+          gst_event_new_reconfigure ());
+      GST_GLIMAGE_SINK_LOCK (gl_sink);
+    }
+
     if (gl_sink->output_mode_changed && gl_sink->input_buffer != NULL) {
       GST_DEBUG ("Recreating output after mode/size change");
       update_output_format (gl_sink);
@@ -1990,6 +2139,7 @@
     if (gl_sink->next_buffer == NULL) {
       /* Nothing to display yet */
       GST_GLIMAGE_SINK_UNLOCK (gl_sink);
+      gst_object_unref (window);
       return TRUE;
     }
 
@@ -2004,7 +2154,11 @@
       gl_sink->stored_buffer[1] = NULL;
 
     old_sync = gl_sink->stored_sync;
-    gl_sink->stored_sync = gst_buffer_ref (gl_sink->next_sync);
+    if (gl_sink->next_sync)
+      gl_sink->stored_sync = gst_buffer_ref (gl_sink->next_sync);
+    else
+      gl_sink->stored_sync = NULL;
+    gl_sink->stored_sync_meta = gl_sink->next_sync_meta;
     GST_GLIMAGE_SINK_UNLOCK (gl_sink);
 
     gst_buffer_replace (old_stored_buffer, NULL);
diff --git a/ext/gl/gstglimagesink.h b/ext/gl/gstglimagesink.h
index f7b3bfb..6e9b98e 100644
--- a/ext/gl/gstglimagesink.h
+++ b/ext/gl/gstglimagesink.h
@@ -64,10 +64,12 @@
 
     /* Input info before 3d stereo output conversion, if any */
     GstVideoInfo in_info;
+    GstCaps *in_caps;
 
     /* format/caps we actually hand off to the app */
     GstVideoInfo out_info;
     GstCaps *out_caps;
+    GstGLTextureTarget texture_target;
 
     GstGLDisplay *display;
     GstGLContext *context;
@@ -87,6 +89,7 @@
     GstBuffer *next_buffer;
     GstBuffer *next_buffer2; /* frame-by-frame 2nd view */
     GstBuffer *next_sync;
+    GstGLSyncMeta *next_sync_meta;
 
     volatile gint to_quit;
     gboolean keep_aspect_ratio;
@@ -96,9 +99,11 @@
     GMutex drawing_lock;
     GstBuffer *stored_buffer[2];
     GstBuffer *stored_sync;
+    GstGLSyncMeta *stored_sync_meta;
     GLuint redisplay_texture;
 
-    gboolean caps_change;
+    /* protected with drawing_lock */
+    gboolean window_resized;
     guint window_width;
     guint window_height;
 
diff --git a/ext/gl/gstglmixer.c b/ext/gl/gstglmixer.c
index 401e4ed..5ca1316 100644
--- a/ext/gl/gstglmixer.c
+++ b/ext/gl/gstglmixer.c
@@ -221,9 +221,17 @@
 
 /* copies the given caps */
 static GstCaps *
-_update_caps (GstVideoAggregator * vagg, GstCaps * caps)
+_update_caps (GstVideoAggregator * vagg, GstCaps * caps, GstCaps * filter)
 {
-  return gst_gl_caps_replace_all_caps_features (caps,
+  GstCaps *tmp;
+
+  if (filter) {
+    tmp = gst_caps_intersect (caps, filter);
+  } else {
+    tmp = caps;
+  }
+
+  return gst_gl_caps_replace_all_caps_features (tmp,
       GST_CAPS_FEATURE_MEMORY_GL_MEMORY);
 }
 
@@ -408,7 +416,6 @@
 gst_gl_mixer_init (GstGLMixer * mix)
 {
   mix->priv = GST_GL_MIXER_GET_PRIVATE (mix);
-  mix->array_buffers = 0;
   mix->fbo = 0;
   mix->depthbuffer = 0;
 
@@ -591,16 +598,47 @@
   }
 }
 
+static gboolean
+_upload_frames (GstAggregator * agg, GstAggregatorPad * agg_pad,
+    gpointer user_data)
+{
+  GstVideoAggregatorPad *vaggpad = GST_VIDEO_AGGREGATOR_PAD (agg_pad);
+  GstGLMixerPad *pad = GST_GL_MIXER_PAD (agg_pad);
+  GstGLMixer *mix = GST_GL_MIXER (agg);
+
+  if (vaggpad->buffer != NULL) {
+    GstVideoInfo gl_info;
+    GstVideoFrame gl_frame;
+    GstGLSyncMeta *sync_meta;
+
+    gst_video_info_set_format (&gl_info,
+        GST_VIDEO_FORMAT_RGBA,
+        GST_VIDEO_INFO_WIDTH (&vaggpad->info),
+        GST_VIDEO_INFO_HEIGHT (&vaggpad->info));
+
+    sync_meta = gst_buffer_get_gl_sync_meta (vaggpad->buffer);
+    if (sync_meta)
+      gst_gl_sync_meta_wait (sync_meta, GST_GL_BASE_MIXER (mix)->context);
+
+    if (!gst_video_frame_map (&gl_frame, &gl_info, vaggpad->buffer,
+            GST_MAP_READ | GST_MAP_GL)) {
+      GST_ERROR_OBJECT (agg_pad, "Failed to map input frame");
+      return FALSE;
+    }
+
+    pad->current_texture = *(guint *) gl_frame.data[0];
+    gst_video_frame_unmap (&gl_frame);
+  }
+
+  return TRUE;
+}
+
 gboolean
 gst_gl_mixer_process_textures (GstGLMixer * mix, GstBuffer * outbuf)
 {
-  guint i;
-  GList *walk;
   guint out_tex;
   gboolean res = TRUE;
-  guint array_index = 0;
   GstVideoFrame out_frame;
-  GstElement *element = GST_ELEMENT (mix);
   GstVideoAggregator *vagg = GST_VIDEO_AGGREGATOR (mix);
   GstGLMixerClass *mix_class = GST_GL_MIXER_GET_CLASS (mix);
   GstGLMixerPrivate *priv = mix->priv;
@@ -614,47 +652,9 @@
 
   out_tex = *(guint *) out_frame.data[0];
 
-  GST_OBJECT_LOCK (mix);
-  walk = element->sinkpads;
-
-  i = mix->frames->len;
-  g_ptr_array_set_size (mix->frames, element->numsinkpads);
-  for (; i < element->numsinkpads; i++)
-    mix->frames->pdata[i] = g_slice_new0 (GstGLMixerFrameData);
-  while (walk) {
-    GstGLMixerPad *pad = GST_GL_MIXER_PAD (walk->data);
-    GstVideoAggregatorPad *vaggpad = walk->data;
-    GstGLMixerFrameData *frame;
-
-    frame = g_ptr_array_index (mix->frames, array_index);
-    frame->pad = pad;
-    frame->texture = 0;
-
-    walk = g_list_next (walk);
-
-    if (vaggpad->buffer != NULL) {
-      GstVideoInfo gl_info;
-      GstVideoFrame gl_frame;
-      GstGLSyncMeta *sync_meta;
-
-      gst_video_info_set_format (&gl_info,
-          GST_VIDEO_FORMAT_RGBA,
-          GST_VIDEO_INFO_WIDTH (&vaggpad->info),
-          GST_VIDEO_INFO_HEIGHT (&vaggpad->info));
-
-      sync_meta = gst_buffer_get_gl_sync_meta (vaggpad->buffer);
-      if (sync_meta)
-        gst_gl_sync_meta_wait (sync_meta, GST_GL_BASE_MIXER (mix)->context);
-
-      if (gst_video_frame_map (&gl_frame, &gl_info, vaggpad->buffer,
-              GST_MAP_READ | GST_MAP_GL)) {
-        frame->texture = *(guint *) gl_frame.data[0];
-        gst_video_frame_unmap (&gl_frame);
-      }
-    }
-
-    ++array_index;
-  }
+  if (!gst_aggregator_iterate_sinkpads (GST_AGGREGATOR (mix),
+          (GstAggregatorPadForeachFunc) _upload_frames, NULL))
+    return FALSE;
 
   g_mutex_lock (&priv->gl_resource_lock);
   if (!priv->gl_resource_ready)
@@ -668,13 +668,11 @@
     goto out;
   }
 
-  mix_class->process_textures (mix, mix->frames, out_tex);
+  mix_class->process_textures (mix, out_tex);
 
   g_mutex_unlock (&priv->gl_resource_lock);
 
 out:
-  GST_OBJECT_UNLOCK (mix);
-
   gst_video_frame_unmap (&out_frame);
 
   return res;
@@ -683,31 +681,9 @@
 static gboolean
 gst_gl_mixer_process_buffers (GstGLMixer * mix, GstBuffer * outbuf)
 {
-  GList *walk;
-  guint i, array_index = 0;
-  GstElement *element = GST_ELEMENT (mix);
   GstGLMixerClass *mix_class = GST_GL_MIXER_GET_CLASS (mix);
 
-  GST_OBJECT_LOCK (mix);
-  walk = GST_ELEMENT (mix)->sinkpads;
-  i = mix->frames->len;
-  g_ptr_array_set_size (mix->frames, element->numsinkpads);
-  for (; i < element->numsinkpads; i++)
-    mix->frames->pdata[i] = g_slice_new0 (GstGLMixerFrameData);
-  while (walk) {                /* We walk with this list because it's ordered */
-    GstVideoAggregatorPad *vaggpad = walk->data;
-
-    walk = g_list_next (walk);
-
-    if (vaggpad->buffer != NULL) {
-      /* put buffer into array */
-      mix->array_buffers->pdata[array_index] = vaggpad->buffer;
-    }
-    ++array_index;
-  }
-  GST_OBJECT_UNLOCK (mix);
-
-  return mix_class->process_buffers (mix, mix->array_buffers, outbuf);
+  return mix_class->process_buffers (mix, outbuf);
 }
 
 static GstFlowReturn
@@ -753,32 +729,9 @@
   }
 }
 
-static void
-_free_glmixer_frame_data (GstGLMixerFrameData * frame)
-{
-  g_slice_free1 (sizeof (GstGLMixerFrameData), frame);
-}
-
 static gboolean
 gst_gl_mixer_start (GstAggregator * agg)
 {
-  guint i;
-  GstGLMixer *mix = GST_GL_MIXER (agg);
-  GstElement *element = GST_ELEMENT (agg);
-
-  GST_OBJECT_LOCK (mix);
-  mix->array_buffers = g_ptr_array_new_full (element->numsinkpads, NULL);
-  mix->frames = g_ptr_array_new_full (element->numsinkpads,
-      (GDestroyNotify) _free_glmixer_frame_data);
-
-  g_ptr_array_set_size (mix->array_buffers, element->numsinkpads);
-  g_ptr_array_set_size (mix->frames, element->numsinkpads);
-
-  for (i = 0; i < element->numsinkpads; i++)
-    mix->frames->pdata[i] = g_slice_new0 (GstGLMixerFrameData);
-
-  GST_OBJECT_UNLOCK (mix);
-
   return GST_AGGREGATOR_CLASS (parent_class)->start (agg);
 }
 
@@ -789,13 +742,6 @@
   GstGLMixerClass *mixer_class = GST_GL_MIXER_GET_CLASS (mix);
   GstGLContext *context = GST_GL_BASE_MIXER (mix)->context;
 
-  GST_OBJECT_LOCK (agg);
-  g_ptr_array_free (mix->frames, TRUE);
-  mix->frames = NULL;
-  g_ptr_array_free (mix->array_buffers, TRUE);
-  mix->array_buffers = NULL;
-  GST_OBJECT_UNLOCK (agg);
-
   if (mixer_class->reset)
     mixer_class->reset (mix);
   if (mix->fbo) {
diff --git a/ext/gl/gstglmixer.h b/ext/gl/gstglmixer.h
index 01eed34..81976a7 100644
--- a/ext/gl/gstglmixer.h
+++ b/ext/gl/gstglmixer.h
@@ -31,7 +31,6 @@
 typedef struct _GstGLMixer GstGLMixer;
 typedef struct _GstGLMixerClass GstGLMixerClass;
 typedef struct _GstGLMixerPrivate GstGLMixerPrivate;
-typedef struct _GstGLMixerFrameData GstGLMixerFrameData;
 
 #define GST_TYPE_GL_MIXER_PAD (gst_gl_mixer_pad_get_type())
 #define GST_GL_MIXER_PAD(obj) \
@@ -52,6 +51,8 @@
 struct _GstGLMixerPad
 {
   GstGLBaseMixerPad parent;
+
+  guint current_texture;
 };
 
 struct _GstGLMixerPadClass
@@ -76,18 +77,13 @@
 typedef gboolean (*GstGLMixerSetCaps) (GstGLMixer* mixer,
   GstCaps* outcaps);
 typedef void (*GstGLMixerReset) (GstGLMixer *mixer);
-typedef gboolean (*GstGLMixerProcessFunc) (GstGLMixer *mix,
-  GPtrArray *buffers, GstBuffer *outbuf);
-typedef gboolean (*GstGLMixerProcessTextures) (GstGLMixer *mix,
-  GPtrArray *frames, guint out_tex);
+typedef gboolean (*GstGLMixerProcessFunc) (GstGLMixer *mix, GstBuffer *outbuf);
+typedef gboolean (*GstGLMixerProcessTextures) (GstGLMixer *mix, guint out_tex);
 
 struct _GstGLMixer
 {
   GstGLBaseMixer vaggregator;
 
-  GPtrArray *array_buffers;
-  GPtrArray *frames;
-
   GLuint fbo;
   GLuint depthbuffer;
 
@@ -106,12 +102,6 @@
   GstGLMixerProcessTextures process_textures;
 };
 
-struct _GstGLMixerFrameData
-{
-  GstGLMixerPad *pad;
-  guint texture;
-};
-
 GType gst_gl_mixer_get_type(void);
 
 gboolean gst_gl_mixer_process_textures (GstGLMixer * mix, GstBuffer * outbuf);
diff --git a/ext/gl/gstglmixerbin.c b/ext/gl/gstglmixerbin.c
index c6488b5..6f83f82 100644
--- a/ext/gl/gstglmixerbin.c
+++ b/ext/gl/gstglmixerbin.c
@@ -458,7 +458,7 @@
     struct input_chain *chain = l->data;
     if (GST_PAD (chain->ghost_pad) == pad) {
       self->priv->input_chains =
-          g_list_remove_link (self->priv->input_chains, l);
+          g_list_delete_link (self->priv->input_chains, l);
       GST_OBJECT_UNLOCK (element);
 
       _free_input_chain (chain);
diff --git a/ext/gl/gstglmosaic.c b/ext/gl/gstglmosaic.c
index 0a98341..377f718 100644
--- a/ext/gl/gstglmosaic.c
+++ b/ext/gl/gstglmosaic.c
@@ -70,7 +70,7 @@
     GstCaps * outcaps);
 
 static gboolean gst_gl_mosaic_process_textures (GstGLMixer * mixer,
-    GPtrArray * frames, guint out_tex);
+    guint out_tex);
 static void gst_gl_mosaic_callback (gpointer stuff);
 
 //vertex source
@@ -142,7 +142,6 @@
 gst_gl_mosaic_init (GstGLMosaic * mosaic)
 {
   mosaic->shader = NULL;
-  mosaic->input_frames = NULL;
 }
 
 static void
@@ -176,8 +175,6 @@
 {
   GstGLMosaic *mosaic = GST_GL_MOSAIC (mixer);
 
-  mosaic->input_frames = NULL;
-
   //blocking call, wait the opengl thread has destroyed the shader
   if (mosaic->shader)
     gst_gl_context_del_shader (GST_GL_BASE_MIXER (mixer)->context,
@@ -196,13 +193,10 @@
 }
 
 static gboolean
-gst_gl_mosaic_process_textures (GstGLMixer * mix, GPtrArray * frames,
-    guint out_tex)
+gst_gl_mosaic_process_textures (GstGLMixer * mix, guint out_tex)
 {
   GstGLMosaic *mosaic = GST_GL_MOSAIC (mix);
 
-  mosaic->input_frames = frames;
-
   //blocking call, use a FBO
   gst_gl_context_use_fbo_v2 (GST_GL_BASE_MIXER (mix)->context,
       GST_VIDEO_INFO_WIDTH (&GST_VIDEO_AGGREGATOR (mix)->info),
@@ -219,6 +213,7 @@
   GstGLMosaic *mosaic = GST_GL_MOSAIC (stuff);
   GstGLMixer *mixer = GST_GL_MIXER (mosaic);
   GstGLFuncs *gl = GST_GL_BASE_MIXER (mixer)->context->gl_vtable;
+  GList *walk;
 
   static GLfloat xrot = 0;
   static GLfloat yrot = 0;
@@ -255,8 +250,10 @@
   attr_texture_loc =
       gst_gl_shader_get_attribute_location (mosaic->shader, "a_texCoord");
 
-  while (count < mosaic->input_frames->len && count < 6) {
-    GstGLMixerFrameData *frame;
+  GST_OBJECT_LOCK (mosaic);
+  walk = GST_ELEMENT (mosaic)->sinkpads;
+  while (walk) {
+    GstGLMixerPad *pad = walk->data;
     /* *INDENT-OFF* */
     gfloat v_vertices[] = {
       /* front face */
@@ -294,21 +291,15 @@
     guint in_tex;
     guint width, height;
 
-    frame = g_ptr_array_index (mosaic->input_frames, count);
-    if (!frame) {
-      GST_DEBUG ("skipping texture, null frame");
-      count++;
-      continue;
-    }
-    in_tex = frame->texture;
-    width = GST_VIDEO_INFO_WIDTH (&GST_VIDEO_AGGREGATOR_PAD (frame->pad)->info);
-    height =
-        GST_VIDEO_INFO_HEIGHT (&GST_VIDEO_AGGREGATOR_PAD (frame->pad)->info);
+    in_tex = pad->current_texture;
+    width = GST_VIDEO_INFO_WIDTH (&GST_VIDEO_AGGREGATOR_PAD (pad)->info);
+    height = GST_VIDEO_INFO_HEIGHT (&GST_VIDEO_AGGREGATOR_PAD (pad)->info);
 
     if (!in_tex || width <= 0 || height <= 0) {
-      GST_DEBUG ("skipping texture:%u frame:%p width:%u height %u",
-          in_tex, frame, width, height);
+      GST_DEBUG ("skipping texture:%u pad:%p width:%u height %u",
+          in_tex, pad, width, height);
       count++;
+      walk = g_list_next (walk);
       continue;
     }
 
@@ -335,7 +326,10 @@
     gl->DrawElements (GL_TRIANGLES, 6, GL_UNSIGNED_SHORT, indices);
 
     ++count;
+
+    walk = g_list_next (walk);
   }
+  GST_OBJECT_UNLOCK (mosaic);
 
   gl->DisableVertexAttribArray (attr_position_loc);
   gl->DisableVertexAttribArray (attr_texture_loc);
diff --git a/ext/gl/gstglmosaic.h b/ext/gl/gstglmosaic.h
index 49c99e7..e0b340c 100644
--- a/ext/gl/gstglmosaic.h
+++ b/ext/gl/gstglmosaic.h
@@ -40,7 +40,6 @@
     GstGLMixer mixer;
 
     GstGLShader *shader;
-    GPtrArray *input_frames;
 };
 
 struct _GstGLMosaicClass
diff --git a/ext/gl/gstgloverlay.c b/ext/gl/gstgloverlay.c
index ca07f8b..fa6c6c1 100644
--- a/ext/gl/gstgloverlay.c
+++ b/ext/gl/gstgloverlay.c
@@ -277,8 +277,7 @@
 
   switch (prop_id) {
     case PROP_LOCATION:
-      if (overlay->location != NULL)
-        g_free (overlay->location);
+      g_free (overlay->location);
       overlay->location_has_changed = TRUE;
       overlay->location = g_value_dup_string (value);
       break;
@@ -669,6 +668,8 @@
 static gboolean
 gst_gl_overlay_load_jpeg (GstGLOverlay * overlay, FILE * fp)
 {
+  GstGLBaseMemoryAllocator *mem_allocator;
+  GstGLVideoAllocationParams *params;
   GstVideoInfo v_info;
   GstVideoAlignment v_align;
   GstMapInfo map_info;
@@ -696,9 +697,17 @@
   v_align.stride_align[0] = 32 - 1;
   gst_video_info_align (&v_info, &v_align);
 
+  mem_allocator =
+      GST_GL_BASE_MEMORY_ALLOCATOR (gst_gl_memory_allocator_get_default
+      (GST_GL_BASE_FILTER (overlay)->context));
+  params =
+      gst_gl_video_allocation_params_new (GST_GL_BASE_FILTER (overlay)->context,
+      NULL, &v_info, 0, &v_align, GST_GL_TEXTURE_TARGET_2D);
   overlay->image_memory = (GstGLMemory *)
-      gst_gl_memory_alloc (GST_GL_BASE_FILTER (overlay)->context,
-      NULL, &v_info, 0, &v_align);
+      gst_gl_base_memory_alloc (mem_allocator,
+      (GstGLAllocationParams *) params);
+  gst_gl_allocation_params_free ((GstGLAllocationParams *) params);
+  gst_object_unref (mem_allocator);
 
   if (!gst_memory_map ((GstMemory *) overlay->image_memory, &map_info,
           GST_MAP_WRITE)) {
@@ -721,6 +730,8 @@
 static gboolean
 gst_gl_overlay_load_png (GstGLOverlay * overlay, FILE * fp)
 {
+  GstGLBaseMemoryAllocator *mem_allocator;
+  GstGLVideoAllocationParams *params;
   GstVideoInfo v_info;
   GstMapInfo map_info;
 
@@ -801,9 +812,17 @@
   overlay->image_height = height;
 
   gst_video_info_set_format (&v_info, GST_VIDEO_FORMAT_RGBA, width, height);
+  mem_allocator =
+      GST_GL_BASE_MEMORY_ALLOCATOR (gst_gl_memory_allocator_get_default
+      (GST_GL_BASE_FILTER (overlay)->context));
+  params =
+      gst_gl_video_allocation_params_new (GST_GL_BASE_FILTER (overlay)->context,
+      NULL, &v_info, 0, NULL, GST_GL_TEXTURE_TARGET_2D);
   overlay->image_memory = (GstGLMemory *)
-      gst_gl_memory_alloc (GST_GL_BASE_FILTER (overlay)->context,
-      NULL, &v_info, 0, NULL);
+      gst_gl_base_memory_alloc (mem_allocator,
+      (GstGLAllocationParams *) params);
+  gst_gl_allocation_params_free ((GstGLAllocationParams *) params);
+  gst_object_unref (mem_allocator);
 
   if (!gst_memory_map ((GstMemory *) overlay->image_memory, &map_info,
           GST_MAP_WRITE)) {
diff --git a/ext/gl/gstglsinkbin.c b/ext/gl/gstglsinkbin.c
index cab615f..c9c5a72 100644
--- a/ext/gl/gstglsinkbin.c
+++ b/ext/gl/gstglsinkbin.c
@@ -42,6 +42,8 @@
     gpointer g_iface_data);
 static void gst_gl_sink_bin_navigation_interface_init (gpointer g_iface,
     gpointer g_iface_data);
+static void gst_gl_sink_bin_color_balance_init (gpointer g_iface,
+    gpointer g_iface_data);
 
 #define DEFAULT_SYNC                TRUE
 #define DEFAULT_MAX_LATENESS        -1
@@ -54,6 +56,12 @@
 #define DEFAULT_THROTTLE_TIME       0
 #define DEFAULT_MAX_BITRATE         0
 
+/* GstGLColorBalance properties */
+#define DEFAULT_PROP_CONTRAST       1.0
+#define DEFAULT_PROP_BRIGHTNESS	    0.0
+#define DEFAULT_PROP_HUE            0.0
+#define DEFAULT_PROP_SATURATION	    1.0
+
 enum
 {
   PROP_0,
@@ -70,6 +78,10 @@
   PROP_RENDER_DELAY,
   PROP_THROTTLE_TIME,
   PROP_MAX_BITRATE,
+  PROP_CONTRAST,
+  PROP_BRIGHTNESS,
+  PROP_HUE,
+  PROP_SATURATION,
 };
 
 enum
@@ -87,6 +99,8 @@
         gst_gl_sink_bin_video_overlay_init);
     G_IMPLEMENT_INTERFACE (GST_TYPE_NAVIGATION,
         gst_gl_sink_bin_navigation_interface_init);
+    G_IMPLEMENT_INTERFACE (GST_TYPE_COLOR_BALANCE,
+        gst_gl_sink_bin_color_balance_init)
     GST_DEBUG_CATEGORY_INIT (gst_debug_gl_sink_bin, "glimagesink", 0,
         "OpenGL Video Sink Bin"));
 
@@ -166,6 +180,23 @@
           G_MAXUINT64, DEFAULT_MAX_BITRATE,
           G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
 
+  /* colorbalance */
+  g_object_class_install_property (gobject_class, PROP_CONTRAST,
+      g_param_spec_double ("contrast", "Contrast", "contrast",
+          0.0, 2.0, DEFAULT_PROP_CONTRAST,
+          GST_PARAM_CONTROLLABLE | G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+  g_object_class_install_property (gobject_class, PROP_BRIGHTNESS,
+      g_param_spec_double ("brightness", "Brightness", "brightness", -1.0, 1.0,
+          DEFAULT_PROP_BRIGHTNESS,
+          GST_PARAM_CONTROLLABLE | G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+  g_object_class_install_property (gobject_class, PROP_HUE,
+      g_param_spec_double ("hue", "Hue", "hue", -1.0, 1.0, DEFAULT_PROP_HUE,
+          GST_PARAM_CONTROLLABLE | G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+  g_object_class_install_property (gobject_class, PROP_SATURATION,
+      g_param_spec_double ("saturation", "Saturation", "saturation", 0.0, 2.0,
+          DEFAULT_PROP_SATURATION,
+          GST_PARAM_CONTROLLABLE | G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+
   /**
    * GstGLSinkBin::create-element:
    * @object: the #GstGLSinkBin
@@ -198,11 +229,14 @@
 
   self->upload = gst_element_factory_make ("glupload", NULL);
   self->convert = gst_element_factory_make ("glcolorconvert", NULL);
+  self->balance = gst_element_factory_make ("glcolorbalance", NULL);
 
   res &= gst_bin_add (GST_BIN (self), self->upload);
   res &= gst_bin_add (GST_BIN (self), self->convert);
+  res &= gst_bin_add (GST_BIN (self), self->balance);
 
   res &= gst_element_link_pads (self->upload, "src", self->convert, "sink");
+  res &= gst_element_link_pads (self->convert, "src", self->balance, "sink");
 
   pad = gst_element_get_static_pad (self->upload, "sink");
   if (!pad) {
@@ -214,6 +248,15 @@
     gst_object_unref (pad);
   }
 
+  gst_gl_object_add_control_binding_proxy (GST_OBJECT (self->balance),
+      GST_OBJECT (self), "contrast");
+  gst_gl_object_add_control_binding_proxy (GST_OBJECT (self->balance),
+      GST_OBJECT (self), "brightness");
+  gst_gl_object_add_control_binding_proxy (GST_OBJECT (self->balance),
+      GST_OBJECT (self), "hue");
+  gst_gl_object_add_control_binding_proxy (GST_OBJECT (self->balance),
+      GST_OBJECT (self), "saturation");
+
   if (!res) {
     GST_WARNING_OBJECT (self, "Failed to add/connect the necessary machinery");
   }
@@ -227,7 +270,7 @@
   gst_object_set_name (GST_OBJECT (self->sink), "sink");
   res &= gst_bin_add (GST_BIN (self), self->sink);
 
-  res &= gst_element_link_pads (self->convert, "src", self->sink, "sink");
+  res &= gst_element_link_pads (self->balance, "src", self->sink, "sink");
 
   if (!res)
     GST_ERROR_OBJECT (self, "Failed to link sink element into the pipeline");
@@ -281,6 +324,13 @@
       }
       break;
     }
+    case PROP_CONTRAST:
+    case PROP_BRIGHTNESS:
+    case PROP_HUE:
+    case PROP_SATURATION:
+      if (self->balance)
+        g_object_set_property (G_OBJECT (self->balance), pspec->name, value);
+      break;
     default:
       if (self->sink)
         g_object_set_property (G_OBJECT (self->sink), pspec->name, value);
@@ -298,6 +348,13 @@
     case PROP_SINK:
       g_value_set_object (value, self->sink);
       break;
+    case PROP_CONTRAST:
+    case PROP_BRIGHTNESS:
+    case PROP_HUE:
+    case PROP_SATURATION:
+      if (self->balance)
+        g_object_get_property (G_OBJECT (self->balance), pspec->name, value);
+      break;
     default:
       if (self->sink)
         g_object_get_property (G_OBJECT (self->sink), pspec->name, value);
@@ -454,3 +511,89 @@
   iface->set_render_rectangle = gst_gl_sink_bin_overlay_set_render_rectangle;
   iface->set_window_handle = gst_gl_sink_bin_overlay_set_window_handle;
 }
+
+static const GList *
+gst_gl_sink_bin_color_balance_list_channels (GstColorBalance * balance)
+{
+  GstGLSinkBin *self = GST_GL_SINK_BIN (balance);
+  GstColorBalance *balance_element = NULL;
+  const GList *list = NULL;
+
+  balance_element =
+      GST_COLOR_BALANCE (gst_bin_get_by_interface (GST_BIN (self),
+          GST_TYPE_COLOR_BALANCE));
+
+  if (balance_element) {
+    list = gst_color_balance_list_channels (balance_element);
+    gst_object_unref (balance_element);
+  }
+
+  return list;
+}
+
+static void
+gst_gl_sink_bin_color_balance_set_value (GstColorBalance * balance,
+    GstColorBalanceChannel * channel, gint value)
+{
+  GstGLSinkBin *self = GST_GL_SINK_BIN (balance);
+  GstColorBalance *balance_element = NULL;
+
+  balance_element =
+      GST_COLOR_BALANCE (gst_bin_get_by_interface (GST_BIN (self),
+          GST_TYPE_COLOR_BALANCE));
+
+  if (balance_element) {
+    gst_color_balance_set_value (balance_element, channel, value);
+    gst_object_unref (balance_element);
+  }
+}
+
+static gint
+gst_gl_sink_bin_color_balance_get_value (GstColorBalance * balance,
+    GstColorBalanceChannel * channel)
+{
+  GstGLSinkBin *self = GST_GL_SINK_BIN (balance);
+  GstColorBalance *balance_element = NULL;
+  gint val = 0;
+
+  balance_element =
+      GST_COLOR_BALANCE (gst_bin_get_by_interface (GST_BIN (self),
+          GST_TYPE_COLOR_BALANCE));
+
+  if (balance_element) {
+    val = gst_color_balance_get_value (balance_element, channel);
+    gst_object_unref (balance_element);
+  }
+
+  return val;
+}
+
+static GstColorBalanceType
+gst_gl_sink_bin_color_balance_get_balance_type (GstColorBalance * balance)
+{
+  GstGLSinkBin *self = GST_GL_SINK_BIN (balance);
+  GstColorBalance *balance_element = NULL;
+  GstColorBalanceType type = 0;
+
+  balance_element =
+      GST_COLOR_BALANCE (gst_bin_get_by_interface (GST_BIN (self),
+          GST_TYPE_COLOR_BALANCE));
+
+  if (balance_element) {
+    type = gst_color_balance_get_balance_type (balance_element);
+    gst_object_unref (balance_element);
+  }
+
+  return type;
+}
+
+static void
+gst_gl_sink_bin_color_balance_init (gpointer g_iface, gpointer g_iface_data)
+{
+  GstColorBalanceInterface *iface = (GstColorBalanceInterface *) g_iface;
+
+  iface->list_channels = gst_gl_sink_bin_color_balance_list_channels;
+  iface->set_value = gst_gl_sink_bin_color_balance_set_value;
+  iface->get_value = gst_gl_sink_bin_color_balance_get_value;
+  iface->get_balance_type = gst_gl_sink_bin_color_balance_get_balance_type;
+}
diff --git a/ext/gl/gstglsinkbin.h b/ext/gl/gstglsinkbin.h
index 1dbb40d..f4529d0 100644
--- a/ext/gl/gstglsinkbin.h
+++ b/ext/gl/gstglsinkbin.h
@@ -56,6 +56,7 @@
 
   GstElement *upload;
   GstElement *convert;
+  GstElement *balance;
   GstElement *sink;
 };
 
diff --git a/ext/gl/gstglstereomix.c b/ext/gl/gstglstereomix.c
index b880d06..ed604b2 100644
--- a/ext/gl/gstglstereomix.c
+++ b/ext/gl/gstglstereomix.c
@@ -30,15 +30,27 @@
 #define GST_CAT_DEFAULT gst_gl_stereo_mix_debug
 GST_DEBUG_CATEGORY (gst_gl_stereo_mix_debug);
 
+G_DEFINE_TYPE (GstGLStereoMixPad, gst_gl_stereo_mix_pad, GST_TYPE_GL_MIXER_PAD);
+
+static void
+gst_gl_stereo_mix_pad_class_init (GstGLStereoMixPadClass * klass)
+{
+}
+
+static void
+gst_gl_stereo_mix_pad_init (GstGLStereoMixPad * pad)
+{
+}
+
 #define gst_gl_stereo_mix_parent_class parent_class
 G_DEFINE_TYPE (GstGLStereoMix, gst_gl_stereo_mix, GST_TYPE_GL_MIXER);
 
-static GstCaps *_update_caps (GstVideoAggregator * vagg, GstCaps * caps);
+static GstCaps *_update_caps (GstVideoAggregator * vagg, GstCaps * caps,
+    GstCaps * filter);
 static gboolean _negotiated_caps (GstVideoAggregator * videoaggregator,
     GstCaps * caps);
 gboolean gst_gl_stereo_mix_make_output (GstGLStereoMix * mix);
-static gboolean gst_gl_stereo_mix_process_frames (GstGLStereoMix * mixer,
-    GPtrArray * in_frames);
+static gboolean gst_gl_stereo_mix_process_frames (GstGLStereoMix * mixer);
 
 #define DEFAULT_DOWNMIX GST_GL_STEREO_DOWNMIX_ANAGLYPH_GREEN_MAGENTA_DUBOIS
 
@@ -58,9 +70,13 @@
 static GstStaticPadTemplate src_factory = GST_STATIC_PAD_TEMPLATE ("src",
     GST_PAD_SRC,
     GST_PAD_ALWAYS,
-    GST_STATIC_CAPS (GST_VIDEO_CAPS_MAKE_WITH_FEATURES
-        (GST_CAPS_FEATURE_MEMORY_GL_MEMORY,
-            "RGBA") "; "
+    GST_STATIC_CAPS ("video/x-raw(" GST_CAPS_FEATURE_MEMORY_GL_MEMORY "), "
+        "format = (string) RGBA, "
+        "width = " GST_VIDEO_SIZE_RANGE ", "
+        "height = " GST_VIDEO_SIZE_RANGE ", "
+        "framerate = " GST_VIDEO_FPS_RANGE ","
+        "texture-target = (string) 2D"
+        "; "
         GST_VIDEO_CAPS_MAKE_WITH_FEATURES
         (GST_CAPS_FEATURE_META_GST_VIDEO_GL_TEXTURE_UPLOAD_META,
             "RGBA")
@@ -70,9 +86,13 @@
 static GstStaticPadTemplate sink_factory = GST_STATIC_PAD_TEMPLATE ("sink_%u",
     GST_PAD_SINK,
     GST_PAD_REQUEST,
-    GST_STATIC_CAPS (GST_VIDEO_CAPS_MAKE_WITH_FEATURES
-        (GST_CAPS_FEATURE_MEMORY_GL_MEMORY,
-            "RGBA") "; "
+    GST_STATIC_CAPS ("video/x-raw(" GST_CAPS_FEATURE_MEMORY_GL_MEMORY "), "
+        "format = (string) RGBA, "
+        "width = " GST_VIDEO_SIZE_RANGE ", "
+        "height = " GST_VIDEO_SIZE_RANGE ", "
+        "framerate = " GST_VIDEO_FPS_RANGE ","
+        "texture-target = (string) 2D"
+        "; "
         GST_VIDEO_CAPS_MAKE_WITH_FEATURES
         (GST_CAPS_FEATURE_META_GST_VIDEO_GL_TEXTURE_UPLOAD_META,
             "RGBA")
@@ -135,6 +155,7 @@
   gst_element_class_add_pad_template (element_class,
       gst_static_pad_template_get (&sink_factory));
 
+  agg_class->sinkpads_type = GST_TYPE_GL_STEREO_MIX_PAD;
   agg_class->stop = gst_gl_stereo_mix_stop;
   agg_class->start = gst_gl_stereo_mix_start;
   agg_class->src_query = gst_gl_stereo_mix_src_query;
@@ -145,7 +166,6 @@
   videoaggregator_class->get_output_buffer =
       gst_gl_stereo_mix_get_output_buffer;
   videoaggregator_class->find_best_format = gst_gl_stereo_mix_find_best_format;
-  videoaggregator_class->preserve_update_caps_result = TRUE;
 
   base_mix_class->supported_gl_api = GST_GL_API_OPENGL | GST_GL_API_OPENGL3;
 }
@@ -242,10 +262,8 @@
 gboolean
 gst_gl_stereo_mix_make_output (GstGLStereoMix * mix)
 {
-  guint i;
   GList *walk;
   gboolean res = FALSE;
-  guint array_index = 0;
   GstElement *element = GST_ELEMENT (mix);
   gboolean missing_buffer = FALSE;
 
@@ -253,33 +271,23 @@
 
   GST_OBJECT_LOCK (mix);
   walk = element->sinkpads;
-
-  i = mix->frames->len;
-  g_ptr_array_set_size (mix->frames, element->numsinkpads);
-  for (; i < element->numsinkpads; i++)
-    mix->frames->pdata[i] = g_slice_new0 (GstGLStereoMixFrameData);
   while (walk) {
-    GstGLMixerPad *pad = GST_GL_MIXER_PAD (walk->data);
     GstVideoAggregatorPad *vaggpad = walk->data;
-    GstGLStereoMixFrameData *frame;
+    GstGLStereoMixPad *pad = walk->data;
 
     GST_LOG_OBJECT (mix, "Checking pad %" GST_PTR_FORMAT, vaggpad);
 
-    frame = g_ptr_array_index (mix->frames, array_index);
-    frame->base.pad = pad;
-    frame->buf = NULL;
-
-    walk = g_list_next (walk);
-
     if (vaggpad->buffer != NULL) {
-      frame->buf = vaggpad->buffer;
+      pad->current_buffer = vaggpad->buffer;
 
-      GST_DEBUG_OBJECT (pad, "Got buffer %" GST_PTR_FORMAT, frame->buf);
+      GST_DEBUG_OBJECT (pad, "Got buffer %" GST_PTR_FORMAT,
+          pad->current_buffer);
     } else {
       GST_LOG_OBJECT (mix, "No buffer on pad %" GST_PTR_FORMAT, vaggpad);
+      pad->current_buffer = NULL;
       missing_buffer = TRUE;
     }
-    ++array_index;
+    walk = g_list_next (walk);
   }
   if (missing_buffer) {
     /* We're still waiting for a buffer to turn up on at least one input */
@@ -289,7 +297,7 @@
   }
 
   /* Copy GL memory from each input frame to the output */
-  if (!gst_gl_stereo_mix_process_frames (mix, mix->frames)) {
+  if (!gst_gl_stereo_mix_process_frames (mix)) {
     GST_LOG_OBJECT (mix, "Failed to process frames to output");
     goto out;
   }
@@ -363,41 +371,18 @@
   }
 }
 
-static void
-_free_glmixer_frame_data (GstGLStereoMixFrameData * frame)
-{
-  if (frame == NULL)
-    return;
-  if (frame->buf)
-    gst_buffer_unref (frame->buf);
-  g_slice_free1 (sizeof (GstGLStereoMixFrameData), frame);
-}
-
 static gboolean
 gst_gl_stereo_mix_start (GstAggregator * agg)
 {
-  guint i;
   GstGLStereoMix *mix = GST_GL_STEREO_MIX (agg);
-  GstElement *element = GST_ELEMENT (agg);
 
   if (!GST_AGGREGATOR_CLASS (parent_class)->start (agg))
     return FALSE;
 
   GST_OBJECT_LOCK (mix);
-  mix->array_buffers = g_ptr_array_new_full (element->numsinkpads,
-      (GDestroyNotify) _free_glmixer_frame_data);
-  mix->frames = g_ptr_array_new_full (element->numsinkpads, NULL);
-
-  g_ptr_array_set_size (mix->array_buffers, element->numsinkpads);
-  g_ptr_array_set_size (mix->frames, element->numsinkpads);
-
-  for (i = 0; i < element->numsinkpads; i++)
-    mix->frames->pdata[i] = g_slice_new0 (GstGLStereoMixFrameData);
-
   mix->viewconvert = gst_gl_view_convert_new ();
   g_object_set (G_OBJECT (mix->viewconvert), "downmix-mode",
       mix->downmix_mode, NULL);
-
   GST_OBJECT_UNLOCK (mix);
 
   return TRUE;
@@ -411,13 +396,6 @@
   if (!GST_AGGREGATOR_CLASS (parent_class)->stop (agg))
     return FALSE;
 
-  GST_OBJECT_LOCK (agg);
-  g_ptr_array_free (mix->frames, TRUE);
-  mix->frames = NULL;
-  g_ptr_array_free (mix->array_buffers, TRUE);
-  mix->array_buffers = NULL;
-  GST_OBJECT_UNLOCK (agg);
-
   if (mix->viewconvert) {
     gst_object_unref (mix->viewconvert);
     mix->viewconvert = NULL;
@@ -463,7 +441,7 @@
 
 /* Return the possible output caps we decided in find_best_format() */
 static GstCaps *
-_update_caps (GstVideoAggregator * vagg, GstCaps * caps)
+_update_caps (GstVideoAggregator * vagg, GstCaps * caps, GstCaps * filter)
 {
   GstGLStereoMix *mix = GST_GL_STEREO_MIX (vagg);
 
@@ -475,6 +453,7 @@
 _negotiated_caps (GstVideoAggregator * vagg, GstCaps * caps)
 {
   GstGLStereoMix *mix = GST_GL_STEREO_MIX (vagg);
+  GstCaps *in_caps;
 
   GST_LOG_OBJECT (mix, "Configured output caps %" GST_PTR_FORMAT, caps);
 
@@ -490,41 +469,47 @@
   /* We can configure the view_converter now */
   gst_gl_view_convert_set_context (mix->viewconvert,
       GST_GL_BASE_MIXER (mix)->context);
-  gst_gl_view_convert_set_format (mix->viewconvert, &mix->mix_info,
-      &mix->out_info);
+
+  in_caps = gst_video_info_to_caps (&mix->mix_info);
+  gst_caps_set_features (in_caps, 0,
+      gst_caps_features_from_string (GST_CAPS_FEATURE_MEMORY_GL_MEMORY));
+  gst_caps_set_simple (in_caps, "texture-target", G_TYPE_STRING,
+      GST_GL_TEXTURE_TARGET_2D_STR, NULL);
+
+  gst_gl_view_convert_set_caps (mix->viewconvert, in_caps, caps);
 
   return TRUE;
-
 }
 
+/* called with the object lock held */
 static gboolean
-gst_gl_stereo_mix_process_frames (GstGLStereoMix * mixer, GPtrArray * frames)
+gst_gl_stereo_mix_process_frames (GstGLStereoMix * mixer)
 {
   GstVideoAggregator *vagg = GST_VIDEO_AGGREGATOR (mixer);
   GstBuffer *converted_buffer, *inbuf;
   GstVideoInfo *out_info = &vagg->info;
-  gint count = 0;
 #ifndef G_DISABLE_ASSERT
   gint n;
 #endif
   gint v, views;
   gint valid_views = 0;
+  GList *walk;
 
   inbuf = gst_buffer_new ();
-  while (count < frames->len) {
-    GstGLStereoMixFrameData *frame;
+  walk = GST_ELEMENT (mixer)->sinkpads;
+  while (walk) {
+    GstGLStereoMixPad *pad = walk->data;
     GstMemory *in_mem;
 
-    frame = g_ptr_array_index (frames, count);
-    GST_LOG_OBJECT (mixer, "Handling frame %d", count);
+    GST_LOG_OBJECT (mixer, "Handling frame %d", valid_views);
 
-    if (!frame) {
+    if (!pad || !pad->current_buffer) {
       GST_DEBUG ("skipping texture, null frame");
-      count++;
+      walk = g_list_next (walk);
       continue;
     }
 
-    in_mem = gst_buffer_get_memory (frame->buf, 0);
+    in_mem = gst_buffer_get_memory (pad->current_buffer, 0);
 
     GST_LOG_OBJECT (mixer,
         "Appending memory %" GST_PTR_FORMAT " to intermediate buffer", in_mem);
@@ -537,10 +522,10 @@
      */
     gst_buffer_append_memory (inbuf, in_mem);
     /* Use parent buffer meta to keep input buffer alive */
-    gst_buffer_add_parent_buffer_meta (inbuf, frame->buf);
+    gst_buffer_add_parent_buffer_meta (inbuf, pad->current_buffer);
 
-    count++;
     valid_views++;
+    walk = g_list_next (walk);
   }
 
   if (mixer->mix_info.views != valid_views) {
diff --git a/ext/gl/gstglstereomix.h b/ext/gl/gstglstereomix.h
index debe347..b0f1bd2 100644
--- a/ext/gl/gstglstereomix.h
+++ b/ext/gl/gstglstereomix.h
@@ -40,17 +40,31 @@
 
 typedef struct _GstGLStereoMix GstGLStereoMix;
 typedef struct _GstGLStereoMixClass GstGLStereoMixClass;
-typedef struct _GstGLStereoMixFrameData GstGLStereoMixFrameData;
+typedef struct _GstGLStereoMixPad GstGLStereoMixPad;
+typedef struct _GstGLStereoMixPadClass GstGLStereoMixPadClass;
+
+struct _GstGLStereoMixPad
+{
+  GstGLMixerPad mixer_pad;
+
+  gboolean mapped;
+  GstBuffer *current_buffer;
+};
+
+struct _GstGLStereoMixPadClass
+{
+  GstGLMixerPadClass mixer_pad_class;
+};
+
+#define GST_TYPE_GL_STEREO_MIX_PAD (gst_gl_stereo_mix_pad_get_type ())
+GType gst_gl_stereo_mix_pad_get_type (void);
+
 
 struct _GstGLStereoMix
 {
   GstGLMixer mixer;
 
-  GPtrArray *array_buffers;
-  GPtrArray *frames;
-
   GLuint out_tex_id;
-  GstGLDownload *download;
 
   GstGLViewConvert *viewconvert;
   GstGLStereoDownmix downmix_mode;
@@ -70,13 +84,6 @@
     GstGLMixerClass mixer_class;
 };
 
-struct _GstGLStereoMixFrameData
-{
-  GstGLMixerFrameData base;
-  gboolean mapped;
-  GstBuffer *buf;
-};
-
 GType gst_gl_stereo_mix_get_type(void);
 
 G_END_DECLS
diff --git a/ext/gl/gstglstereosplit.c b/ext/gl/gstglstereosplit.c
index e175df8..fc93b1a 100644
--- a/ext/gl/gstglstereosplit.c
+++ b/ext/gl/gstglstereosplit.c
@@ -26,7 +26,7 @@
  * <refsect2>
  * <title>Examples</title>
  * |[
- * gst-launch videotestsrc ! glstereosplit name=s ! queue ! glimagesink s. ! queue ! glimagesink
+ * gst-launch-1.0 videotestsrc ! glstereosplit name=s ! queue ! glimagesink s. ! queue ! glimagesink
  * ]|
  * FBO (Frame Buffer Object) and GLSL (OpenGL Shading Language) are required.
  * </refsect2>
@@ -210,6 +210,9 @@
 
   if (stereosplit->display)
     gst_gl_display_filter_gl_api (stereosplit->display, SUPPORTED_GL_APIS);
+
+  GST_ELEMENT_CLASS (gst_gl_stereosplit_parent_class)->set_context (element,
+      context);
 }
 
 static GstStateChangeReturn
@@ -581,8 +584,27 @@
     GST_OBJECT_UNLOCK (self->display);
   }
 
+  {
+    GstGLAPI current_gl_api = gst_gl_context_get_gl_api (self->context);
+    if ((current_gl_api & (SUPPORTED_GL_APIS)) == 0)
+      goto unsupported_gl_api;
+  }
+
   return TRUE;
 
+unsupported_gl_api:
+  {
+    GstGLAPI gl_api = gst_gl_context_get_gl_api (self->context);
+    gchar *gl_api_str = gst_gl_api_to_string (gl_api);
+    gchar *supported_gl_api_str = gst_gl_api_to_string (SUPPORTED_GL_APIS);
+    GST_ELEMENT_ERROR (self, RESOURCE, BUSY,
+        ("GL API's not compatible context: %s supported: %s", gl_api_str,
+            supported_gl_api_str), (NULL));
+
+    g_free (supported_gl_api_str);
+    g_free (gl_api_str);
+    return FALSE;
+  }
 context_error:
   {
     GST_ELEMENT_ERROR (self, RESOURCE, NOT_FOUND, ("%s", error->message),
diff --git a/ext/gl/gstgltestsrc.c b/ext/gl/gstgltestsrc.c
index 93ddfda..95c7321 100644
--- a/ext/gl/gstgltestsrc.c
+++ b/ext/gl/gstgltestsrc.c
@@ -33,7 +33,7 @@
  * <title>Example launch line</title>
  * <para>
  * <programlisting>
- * gst-launch -v gltestsrc pattern=smpte ! glimagesink
+ * gst-launch-1.0 -v gltestsrc pattern=smpte ! glimagesink
  * </programlisting>
  * Shows original SMPTE color bars in a window.
  * </para>
@@ -63,13 +63,18 @@
       /* FILL ME */
 };
 
+/* *INDENT-OFF* */
 static GstStaticPadTemplate src_factory = GST_STATIC_PAD_TEMPLATE ("src",
     GST_PAD_SRC,
     GST_PAD_ALWAYS,
-    GST_STATIC_CAPS (GST_VIDEO_CAPS_MAKE_WITH_FEATURES
-        (GST_CAPS_FEATURE_MEMORY_GL_MEMORY,
-            "RGBA"))
+    GST_STATIC_CAPS ("video/x-raw(" GST_CAPS_FEATURE_MEMORY_GL_MEMORY "), "
+        "format = (string) RGBA, "
+        "width = " GST_VIDEO_SIZE_RANGE ", "
+        "height = " GST_VIDEO_SIZE_RANGE ", "
+        "framerate = " GST_VIDEO_FPS_RANGE ","
+        "texture-target = (string) 2D")
     );
+/* *INDENT-ON* */
 
 #define gst_gl_test_src_parent_class parent_class
 G_DEFINE_TYPE (GstGLTestSrc, gst_gl_test_src, GST_TYPE_PUSH_SRC);
@@ -459,6 +464,8 @@
 
   if (src->display)
     gst_gl_display_filter_gl_api (src->display, SUPPORTED_GL_APIS);
+
+  GST_ELEMENT_CLASS (parent_class)->set_context (element, context);
 }
 
 static gboolean
@@ -797,6 +804,9 @@
     GST_OBJECT_UNLOCK (src->display);
   }
 
+  if ((gst_gl_context_get_gl_api (src->context) & SUPPORTED_GL_APIS) == 0)
+    goto unsupported_gl_api;
+
   out_width = GST_VIDEO_INFO_WIDTH (&src->out_info);
   out_height = GST_VIDEO_INFO_HEIGHT (&src->out_info);
 
@@ -849,6 +859,19 @@
 
   return TRUE;
 
+unsupported_gl_api:
+  {
+    GstGLAPI gl_api = gst_gl_context_get_gl_api (src->context);
+    gchar *gl_api_str = gst_gl_api_to_string (gl_api);
+    gchar *supported_gl_api_str = gst_gl_api_to_string (SUPPORTED_GL_APIS);
+    GST_ELEMENT_ERROR (src, RESOURCE, BUSY,
+        ("GL API's not compatible context: %s supported: %s", gl_api_str,
+            supported_gl_api_str), (NULL));
+
+    g_free (supported_gl_api_str);
+    g_free (gl_api_str);
+    return FALSE;
+  }
 context_error:
   {
     GST_ELEMENT_ERROR (src, RESOURCE, NOT_FOUND, ("%s", error->message),
diff --git a/ext/gl/gstgltransformation.c b/ext/gl/gstgltransformation.c
index 5a82ade..779447c 100644
--- a/ext/gl/gstgltransformation.c
+++ b/ext/gl/gstgltransformation.c
@@ -1,6 +1,7 @@
 /*
  * GStreamer
  * Copyright (C) 2014 Lubosz Sarnecki <lubosz@gmail.com>
+ * Copyright (C) 2016 Matthew Waters <matthew@centricular.com>
  *
  * This library is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Library General Public
@@ -26,16 +27,16 @@
  * <refsect2>
  * <title>Examples</title>
  * |[
- * gst-launch gltestsrc ! gltransformation rotation-z=45 ! glimagesink
+ * gst-launch-1.0 gltestsrc ! gltransformation rotation-z=45 ! glimagesink
  * ]| A pipeline to rotate by 45 degrees
  * |[
- * gst-launch gltestsrc ! gltransformation translation-x=0.5 ! glimagesink
+ * gst-launch-1.0 gltestsrc ! gltransformation translation-x=0.5 ! glimagesink
  * ]| Translate the video by 0.5
  * |[
- * gst-launch gltestsrc ! gltransformation scale-y=0.5 scale-x=0.5 ! glimagesink
+ * gst-launch-1.0 gltestsrc ! gltransformation scale-y=0.5 scale-x=0.5 ! glimagesink
  * ]| Resize the video by 0.5
  * |[
- * gst-launch gltestsrc ! gltransformation rotation-x=-45 ortho=True ! glimagesink
+ * gst-launch-1.0 gltestsrc ! gltransformation rotation-x=-45 ortho=True ! glimagesink
  * ]| Rotate the video around the X-Axis by -45° with an orthographic projection
  * </refsect2>
  */
@@ -86,6 +87,8 @@
 
 static gboolean gst_gl_transformation_set_caps (GstGLFilter * filter,
     GstCaps * incaps, GstCaps * outcaps);
+static gboolean gst_gl_transformation_src_event (GstBaseTransform * trans,
+    GstEvent * event);
 
 static void gst_gl_transformation_reset_gl (GstGLFilter * filter);
 static gboolean gst_gl_transformation_stop (GstBaseTransform * trans);
@@ -126,13 +129,17 @@
 {
   GObjectClass *gobject_class;
   GstElementClass *element_class;
+  GstBaseTransformClass *base_transform_class;
 
   gobject_class = (GObjectClass *) klass;
   element_class = GST_ELEMENT_CLASS (klass);
+  base_transform_class = GST_BASE_TRANSFORM_CLASS (klass);
 
   gobject_class->set_property = gst_gl_transformation_set_property;
   gobject_class->get_property = gst_gl_transformation_get_property;
 
+  base_transform_class->src_event = gst_gl_transformation_src_event;
+
   GST_GL_FILTER_CLASS (klass)->init_fbo = gst_gl_transformation_init_shader;
   GST_GL_FILTER_CLASS (klass)->display_reset_cb =
       gst_gl_transformation_reset_gl;
@@ -192,12 +199,14 @@
   g_object_class_install_property (gobject_class, PROP_SCALE_X,
       g_param_spec_float ("scale-x", "X Scale",
           "Scale multiplier for the X-Axis.",
-          0.0, G_MAXFLOAT, 1.0, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+          -G_MAXFLOAT, G_MAXFLOAT, 1.0,
+          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
 
   g_object_class_install_property (gobject_class, PROP_SCALE_Y,
       g_param_spec_float ("scale-y", "Y Scale",
           "Scale multiplier for the Y-Axis.",
-          0.0, G_MAXFLOAT, 1.0, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+          -G_MAXFLOAT, G_MAXFLOAT, 1.0,
+          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
 
   /* Pivot */
   g_object_class_install_property (gobject_class, PROP_PIVOT_X,
@@ -218,18 +227,19 @@
       g_param_spec_float ("pivot-z", "Z Pivot",
           "Relevant for rotation in 3D space. You look into the negative Z axis direction",
           -G_MAXFLOAT, G_MAXFLOAT, 0.0,
-          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+          G_PARAM_READABLE | G_PARAM_STATIC_STRINGS));
 
   /* MVP */
   g_object_class_install_property (gobject_class, PROP_MVP,
       g_param_spec_boxed ("mvp-matrix",
           "Modelview Projection Matrix",
           "The final Graphene 4x4 Matrix for transformation",
-          GRAPHENE_TYPE_MATRIX, G_PARAM_READABLE | G_PARAM_STATIC_STRINGS));
+          GRAPHENE_TYPE_MATRIX, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
 
   gst_element_class_set_metadata (element_class, "OpenGL transformation filter",
       "Filter/Effect/Video", "Transform video on the GPU",
-      "Lubosz Sarnecki <lubosz@gmail.com>");
+      "Lubosz Sarnecki <lubosz@gmail.com>\n"
+      "Matthew Waters <matthew@centricular.com>");
 
   GST_GL_BASE_FILTER_CLASS (klass)->supported_gl_api =
       GST_GL_API_OPENGL | GST_GL_API_OPENGL3 | GST_GL_API_GLES2;
@@ -255,69 +265,95 @@
 static void
 gst_gl_transformation_build_mvp (GstGLTransformation * transformation)
 {
-  graphene_point3d_t translation_vector =
-      GRAPHENE_POINT3D_INIT (transformation->xtranslation * 2.0 *
-      transformation->aspect,
-      transformation->ytranslation * 2.0,
-      transformation->ztranslation * 2.0);
+  GstGLFilter *filter = GST_GL_FILTER (transformation);
+  graphene_matrix_t modelview_matrix;
 
-  graphene_point3d_t pivot_vector =
-      GRAPHENE_POINT3D_INIT (-transformation->xpivot * transformation->aspect,
-      transformation->ypivot,
-      -transformation->zpivot);
-
-  graphene_point3d_t negative_pivot_vector;
-
-  graphene_matrix_t model_matrix;
-  graphene_matrix_t projection_matrix;
-  graphene_matrix_t view_matrix;
-  graphene_matrix_t vp_matrix;
-
-  graphene_vec3_t eye;
-  graphene_vec3_t center;
-  graphene_vec3_t up;
-
-  graphene_vec3_init (&eye, 0.f, 0.f, 1.f);
-  graphene_vec3_init (&center, 0.f, 0.f, 0.f);
-  graphene_vec3_init (&up, 0.f, 1.f, 0.f);
-
-  /* Translate into pivot origin */
-  graphene_matrix_init_translate (&model_matrix, &pivot_vector);
-
-  /* Scale */
-  graphene_matrix_scale (&model_matrix,
-      transformation->xscale, transformation->yscale, 1.0f);
-
-  /* Rotation */
-  graphene_matrix_rotate (&model_matrix,
-      transformation->xrotation, graphene_vec3_x_axis ());
-  graphene_matrix_rotate (&model_matrix,
-      transformation->yrotation, graphene_vec3_y_axis ());
-  graphene_matrix_rotate (&model_matrix,
-      transformation->zrotation, graphene_vec3_z_axis ());
-
-  /* Translate back from pivot origin */
-  graphene_point3d_scale (&pivot_vector, -1.0, &negative_pivot_vector);
-  graphene_matrix_translate (&model_matrix, &negative_pivot_vector);
-
-  /* Translation */
-  graphene_matrix_translate (&model_matrix, &translation_vector);
-
-  if (transformation->ortho) {
-    graphene_matrix_init_ortho (&projection_matrix,
-        -transformation->aspect, transformation->aspect,
-        -1, 1, transformation->znear, transformation->zfar);
+  if (!filter->out_info.finfo) {
+    graphene_matrix_init_identity (&transformation->model_matrix);
+    graphene_matrix_init_identity (&transformation->view_matrix);
+    graphene_matrix_init_identity (&transformation->projection_matrix);
   } else {
-    graphene_matrix_init_perspective (&projection_matrix,
-        transformation->fov,
-        transformation->aspect, transformation->znear, transformation->zfar);
+    graphene_point3d_t translation_vector =
+        GRAPHENE_POINT3D_INIT (transformation->xtranslation * 2.0 *
+        transformation->aspect,
+        transformation->ytranslation * 2.0,
+        transformation->ztranslation * 2.0);
+
+    graphene_point3d_t pivot_vector =
+        GRAPHENE_POINT3D_INIT (-transformation->xpivot * transformation->aspect,
+        transformation->ypivot,
+        -transformation->zpivot);
+
+    graphene_point3d_t negative_pivot_vector;
+
+    graphene_vec3_t eye;
+    graphene_vec3_t center;
+    graphene_vec3_t up;
+
+    gboolean current_passthrough;
+    gboolean passthrough;
+
+    graphene_vec3_init (&eye, 0.f, 0.f, 1.f);
+    graphene_vec3_init (&center, 0.f, 0.f, 0.f);
+    graphene_vec3_init (&up, 0.f, 1.f, 0.f);
+
+    /* Translate into pivot origin */
+    graphene_matrix_init_translate (&transformation->model_matrix,
+        &pivot_vector);
+
+    /* Scale */
+    graphene_matrix_scale (&transformation->model_matrix,
+        transformation->xscale, transformation->yscale, 1.0f);
+
+    /* Rotation */
+    graphene_matrix_rotate (&transformation->model_matrix,
+        transformation->xrotation, graphene_vec3_x_axis ());
+    graphene_matrix_rotate (&transformation->model_matrix,
+        transformation->yrotation, graphene_vec3_y_axis ());
+    graphene_matrix_rotate (&transformation->model_matrix,
+        transformation->zrotation, graphene_vec3_z_axis ());
+
+    /* Translate back from pivot origin */
+    graphene_point3d_scale (&pivot_vector, -1.0, &negative_pivot_vector);
+    graphene_matrix_translate (&transformation->model_matrix,
+        &negative_pivot_vector);
+
+    /* Translation */
+    graphene_matrix_translate (&transformation->model_matrix,
+        &translation_vector);
+
+    if (transformation->ortho) {
+      graphene_matrix_init_ortho (&transformation->projection_matrix,
+          -transformation->aspect, transformation->aspect,
+          -1, 1, transformation->znear, transformation->zfar);
+    } else {
+      graphene_matrix_init_perspective (&transformation->projection_matrix,
+          transformation->fov,
+          transformation->aspect, transformation->znear, transformation->zfar);
+    }
+
+    graphene_matrix_init_look_at (&transformation->view_matrix, &eye, &center,
+        &up);
+
+    current_passthrough =
+        gst_base_transform_is_passthrough (GST_BASE_TRANSFORM (transformation));
+    passthrough = transformation->xtranslation == 0.
+        && transformation->ytranslation == 0.
+        && transformation->ztranslation == 0. && transformation->xrotation == 0.
+        && transformation->yrotation == 0. && transformation->zrotation == 0.
+        && transformation->xscale == 1. && transformation->yscale == 1.
+        && gst_video_info_is_equal (&filter->in_info, &filter->out_info);
+    gst_base_transform_set_passthrough (GST_BASE_TRANSFORM (transformation),
+        passthrough);
+    if (current_passthrough != passthrough) {
+      gst_base_transform_reconfigure_src (GST_BASE_TRANSFORM (transformation));
+    }
   }
 
-  graphene_matrix_init_look_at (&view_matrix, &eye, &center, &up);
-
-  graphene_matrix_multiply (&view_matrix, &projection_matrix, &vp_matrix);
-  graphene_matrix_multiply (&model_matrix, &vp_matrix,
-      &transformation->mvp_matrix);
+  graphene_matrix_multiply (&transformation->model_matrix,
+      &transformation->view_matrix, &modelview_matrix);
+  graphene_matrix_multiply (&modelview_matrix,
+      &transformation->projection_matrix, &transformation->mvp_matrix);
 }
 
 static void
@@ -366,11 +402,6 @@
     case PROP_PIVOT_Z:
       filter->zpivot = g_value_get_float (value);
       break;
-    case PROP_MVP:
-      if (g_value_get_boxed (value) != NULL)
-        filter->mvp_matrix = *((graphene_matrix_t *) g_value_get_boxed (value));
-      return;
-      break;
     default:
       G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
       break;
@@ -451,6 +482,152 @@
 }
 
 static void
+_find_plane_normal (const graphene_point3d_t * A, const graphene_point3d_t * B,
+    const graphene_point3d_t * C, graphene_vec3_t * plane_normal)
+{
+  graphene_vec3_t U, V, A_v, B_v, C_v;
+
+  graphene_point3d_to_vec3 (A, &A_v);
+  graphene_point3d_to_vec3 (B, &B_v);
+  graphene_point3d_to_vec3 (C, &C_v);
+
+  graphene_vec3_subtract (&B_v, &A_v, &U);
+  graphene_vec3_subtract (&C_v, &A_v, &V);
+
+  graphene_vec3_cross (&U, &V, plane_normal);
+  graphene_vec3_normalize (plane_normal, plane_normal);
+}
+
+static void
+_find_model_coords (GstGLTransformation * transformation,
+    const graphene_point3d_t * screen_coords, graphene_point3d_t * res)
+{
+  graphene_matrix_t modelview, inverse_proj, inverse_modelview;
+  graphene_vec4_t v1, v2;
+  graphene_point3d_t p1;
+  gfloat w;
+
+  graphene_vec4_init (&v1, screen_coords->x, screen_coords->y, screen_coords->z,
+      1.);
+  graphene_matrix_inverse (&transformation->projection_matrix, &inverse_proj);
+  graphene_matrix_transform_vec4 (&inverse_proj, &v1, &v2);
+
+  /* perspective division */
+  w = graphene_vec4_get_w (&v2);
+  p1.x = graphene_vec4_get_x (&v2) / w;
+  p1.y = graphene_vec4_get_y (&v2) / w;
+  p1.z = graphene_vec4_get_z (&v2) / w;
+
+  graphene_matrix_multiply (&transformation->model_matrix,
+      &transformation->view_matrix, &modelview);
+  graphene_matrix_inverse (&modelview, &inverse_modelview);
+  graphene_matrix_transform_point3d (&inverse_modelview, &p1, res);
+}
+
+static gboolean
+gst_gl_transformation_src_event (GstBaseTransform * trans, GstEvent * event)
+{
+  GstGLTransformation *transformation = GST_GL_TRANSFORMATION (trans);
+  GstGLFilter *filter = GST_GL_FILTER (trans);
+  gdouble new_x, new_y, x, y;
+  GstStructure *structure;
+  gboolean ret;
+
+  GST_DEBUG_OBJECT (trans, "handling %s event", GST_EVENT_TYPE_NAME (event));
+
+  switch (GST_EVENT_TYPE (event)) {
+    case GST_EVENT_NAVIGATION:
+      event =
+          GST_EVENT (gst_mini_object_make_writable (GST_MINI_OBJECT (event)));
+
+      structure = (GstStructure *) gst_event_get_structure (event);
+      if (gst_structure_get_double (structure, "pointer_x", &x) &&
+          gst_structure_get_double (structure, "pointer_y", &y)) {
+        gfloat w = (gfloat) GST_VIDEO_INFO_WIDTH (&filter->in_info);
+        gfloat h = (gfloat) GST_VIDEO_INFO_HEIGHT (&filter->in_info);
+        graphene_point3d_t screen_point_near, screen_point_far;
+        graphene_point3d_t model_coord_near, model_coord_far;
+        graphene_point3d_t bottom_left, bottom_right, top_left, top_right;
+        graphene_point3d_t result;
+        graphene_vec3_t plane_normal;
+        graphene_plane_t video_plane;
+        gfloat d;
+
+        GST_DEBUG_OBJECT (trans, "converting %f,%f", x, y);
+
+        graphene_point3d_init (&top_left, -1., 1., 0.);
+        graphene_point3d_init (&top_right, 1., 1., 0.);
+        graphene_point3d_init (&bottom_left, -1., -1., 0.);
+        graphene_point3d_init (&bottom_right, 1., -1., 0.);
+        /* to NDC */
+        graphene_point3d_init (&screen_point_near, 2. * x / w - 1.,
+            2. * y / h - 1., -1.);
+        graphene_point3d_init (&screen_point_far, 2. * x / w - 1.,
+            2. * y / h - 1., 1.);
+
+        _find_plane_normal (&bottom_left, &top_left, &top_right, &plane_normal);
+        graphene_plane_init_from_point (&video_plane, &plane_normal, &top_left);
+        d = graphene_plane_get_constant (&video_plane);
+
+        /* get the closest and furthest points in the viewing area for the
+         * specified screen coordinate in order to construct a ray */
+        _find_model_coords (transformation, &screen_point_near,
+            &model_coord_near);
+        _find_model_coords (transformation, &screen_point_far,
+            &model_coord_far);
+
+        {
+          graphene_vec3_t model_coord_near_vec3, model_coord_far_vec3;
+          graphene_vec3_t tmp, intersection, coord_dir;
+          gfloat num, denom, t;
+
+          /* get the direction of the ray */
+          graphene_point3d_to_vec3 (&model_coord_near, &model_coord_near_vec3);
+          graphene_point3d_to_vec3 (&model_coord_far, &model_coord_far_vec3);
+          graphene_vec3_subtract (&model_coord_near_vec3, &model_coord_far_vec3,
+              &coord_dir);
+
+          /* Intersect the ray with the video plane to find the distance, t:
+           * Ray: P = P0 + t Pdir
+           * Plane: P dot N + d = 0
+           *
+           * Substituting for P and rearranging gives:
+           *
+           * t = (P0 dot N + d) / (Pdir dot N) */
+          denom = graphene_vec3_dot (&coord_dir, &plane_normal);
+          num = graphene_vec3_dot (&model_coord_near_vec3, &plane_normal);
+          t = -(num + d) / denom;
+
+          /* video coord = P0 + t Pdir */
+          graphene_vec3_scale (&coord_dir, t, &tmp);
+          graphene_vec3_add (&tmp, &model_coord_near_vec3, &intersection);
+          graphene_point3d_init_from_vec3 (&result, &intersection);
+        }
+
+        new_x = (result.x / transformation->aspect + 1.) * w / 2;
+        new_y = (result.y + 1.) * h / 2;
+
+        if (new_x < 0. || new_x > w || new_y < 0 || new_y > h) {
+          /* coords off video surface */
+          gst_event_unref (event);
+          return TRUE;
+        }
+
+        GST_DEBUG_OBJECT (trans, "to %fx%f", new_x, new_y);
+        gst_structure_set (structure, "pointer_x", G_TYPE_DOUBLE, new_x,
+            "pointer_y", G_TYPE_DOUBLE, new_y, NULL);
+      }
+      break;
+    default:
+      break;
+  }
+
+  ret = GST_BASE_TRANSFORM_CLASS (parent_class)->src_event (trans, event);
+
+  return ret;
+}
+
+static void
 gst_gl_transformation_reset_gl (GstGLFilter * filter)
 {
   GstGLTransformation *transformation = GST_GL_TRANSFORMATION (filter);
diff --git a/ext/gl/gstgltransformation.h b/ext/gl/gstgltransformation.h
index 6b9051a..7d41c61 100644
--- a/ext/gl/gstgltransformation.h
+++ b/ext/gl/gstgltransformation.h
@@ -71,6 +71,9 @@
     gfloat zfar;
     gboolean ortho;
 
+    graphene_matrix_t model_matrix;
+    graphene_matrix_t view_matrix;
+    graphene_matrix_t projection_matrix;
     graphene_matrix_t mvp_matrix;
 
     gboolean caps_change;
diff --git a/ext/gl/gstgluploadelement.c b/ext/gl/gstgluploadelement.c
index 83ff24c..86e8b01 100644
--- a/ext/gl/gstgluploadelement.c
+++ b/ext/gl/gstgluploadelement.c
@@ -220,8 +220,6 @@
     return GST_FLOW_NOT_NEGOTIATED;
 
   ret = gst_gl_upload_perform_with_buffer (upload->upload, buffer, outbuf);
-  /* FIXME Having to release after perform is an aberation */
-  gst_gl_upload_release_buffer (upload->upload);
 
   if (ret != GST_GL_UPLOAD_DONE || *outbuf == NULL) {
     GST_ELEMENT_ERROR (bt, RESOURCE, NOT_FOUND, ("%s",
diff --git a/ext/gl/gstglvideoflip.c b/ext/gl/gstglvideoflip.c
new file mode 100644
index 0000000..caae79e
--- /dev/null
+++ b/ext/gl/gstglvideoflip.c
@@ -0,0 +1,509 @@
+/*
+ * GStreamer
+ * Copyright (C) 2016 Matthew Waters <matthew@centricular.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+/**
+ * SECTION:element-glvideo_flip
+ *
+ * Transforms video on the GPU.
+ *
+ * <refsect2>
+ * <title>Examples</title>
+ * |[
+ * gst-launch-1.0 videotestsrc ! glupload ! glvideoflip method=clockwise ! glimagesinkelement
+ * ]| This pipeline flips the test image 90 degrees clockwise.
+ * </refsect2>
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include "gstglvideoflip.h"
+
+#define GST_CAT_DEFAULT gst_gl_video_flip_debug
+GST_DEBUG_CATEGORY_STATIC (GST_CAT_DEFAULT);
+
+#define DEFAULT_METHOD GST_GL_VIDEO_FLIP_METHOD_IDENTITY
+
+enum
+{
+  PROP_0,
+  PROP_METHOD,
+};
+
+static GstStaticPadTemplate _sink_template = GST_STATIC_PAD_TEMPLATE ("sink",
+    GST_PAD_SINK,
+    GST_PAD_ALWAYS,
+    GST_STATIC_CAPS ("video/x-raw(" GST_CAPS_FEATURE_MEMORY_GL_MEMORY "), "
+        "format = (string) RGBA, "
+        "width = " GST_VIDEO_SIZE_RANGE ", "
+        "height = " GST_VIDEO_SIZE_RANGE ", "
+        "framerate = " GST_VIDEO_FPS_RANGE ", "
+        "texture-target = (string) 2D"));
+
+static GstStaticPadTemplate _src_template = GST_STATIC_PAD_TEMPLATE ("src",
+    GST_PAD_SRC,
+    GST_PAD_ALWAYS,
+    GST_STATIC_CAPS ("video/x-raw(" GST_CAPS_FEATURE_MEMORY_GL_MEMORY "), "
+        "format = (string) RGBA, "
+        "width = " GST_VIDEO_SIZE_RANGE ", "
+        "height = " GST_VIDEO_SIZE_RANGE ", "
+        "framerate = " GST_VIDEO_FPS_RANGE ", "
+        "texture-target = (string) 2D"));
+
+#define GST_TYPE_GL_VIDEO_FLIP_METHOD (gst_video_flip_method_get_type())
+static const GEnumValue video_flip_methods[] = {
+  {GST_GL_VIDEO_FLIP_METHOD_IDENTITY, "Identity (no rotation)", "none"},
+  {GST_GL_VIDEO_FLIP_METHOD_90R, "Rotate clockwise 90 degrees", "clockwise"},
+  {GST_GL_VIDEO_FLIP_METHOD_180, "Rotate 180 degrees", "rotate-180"},
+  {GST_GL_VIDEO_FLIP_METHOD_90L, "Rotate counter-clockwise 90 degrees",
+      "counterclockwise"},
+  {GST_GL_VIDEO_FLIP_METHOD_FLIP_HORIZ, "Flip horizontally", "horizontal-flip"},
+  {GST_GL_VIDEO_FLIP_METHOD_FLIP_VERT, "Flip vertically", "vertical-flip"},
+  {GST_GL_VIDEO_FLIP_METHOD_FLIP_UL_LR,
+      "Flip across upper left/lower right diagonal", "upper-left-diagonal"},
+  {GST_GL_VIDEO_FLIP_METHOD_FLIP_UR_LL,
+      "Flip across upper right/lower left diagonal", "upper-right-diagonal"},
+  {GST_GL_VIDEO_FLIP_METHOD_AUTO,
+      "Select flip method based on image-orientation tag", "automatic"},
+  {0, NULL, NULL},
+};
+
+static GType
+gst_video_flip_method_get_type (void)
+{
+  static GType video_flip_method_type = 0;
+
+  if (!video_flip_method_type) {
+    video_flip_method_type = g_enum_register_static ("GstGLVideoFlipMethod",
+        video_flip_methods);
+  }
+  return video_flip_method_type;
+}
+
+#define gst_gl_video_flip_parent_class parent_class
+G_DEFINE_TYPE_WITH_CODE (GstGLVideoFlip, gst_gl_video_flip,
+    GST_TYPE_BIN, GST_DEBUG_CATEGORY_INIT (GST_CAT_DEFAULT,
+        "glvideoflip", 0, "glvideoflip element"););
+
+static void gst_gl_video_flip_finalize (GObject * object);
+static void gst_gl_video_flip_set_property (GObject * object, guint prop_id,
+    const GValue * value, GParamSpec * pspec);
+static void gst_gl_video_flip_get_property (GObject * object, guint prop_id,
+    GValue * value, GParamSpec * pspec);
+
+static GstPadProbeReturn _input_sink_probe (GstPad * pad,
+    GstPadProbeInfo * info, gpointer user_data);
+static GstPadProbeReturn _trans_src_probe (GstPad * pad, GstPadProbeInfo * info,
+    gpointer user_data);
+
+static void
+gst_gl_video_flip_class_init (GstGLVideoFlipClass * klass)
+{
+  GObjectClass *gobject_class;
+  GstElementClass *element_class;
+
+  gobject_class = (GObjectClass *) klass;
+  element_class = GST_ELEMENT_CLASS (klass);
+
+  gobject_class->finalize = gst_gl_video_flip_finalize;
+  gobject_class->set_property = gst_gl_video_flip_set_property;
+  gobject_class->get_property = gst_gl_video_flip_get_property;
+
+  g_object_class_install_property (gobject_class, PROP_METHOD,
+      g_param_spec_enum ("method", "method", "method",
+          GST_TYPE_GL_VIDEO_FLIP_METHOD, DEFAULT_METHOD,
+          GST_PARAM_CONTROLLABLE | G_PARAM_READWRITE | G_PARAM_CONSTRUCT |
+          G_PARAM_STATIC_STRINGS));
+
+  gst_element_class_add_pad_template (element_class,
+      gst_static_pad_template_get (&_src_template));
+  gst_element_class_add_pad_template (element_class,
+      gst_static_pad_template_get (&_sink_template));
+
+  gst_element_class_set_metadata (element_class, "OpenGL video flip filter",
+      "Filter/Effect/Video", "Flip video on the GPU",
+      "Matthew Waters <matthew@centricular.com>");
+}
+
+static void
+gst_gl_video_flip_init (GstGLVideoFlip * flip)
+{
+  gboolean res = TRUE;
+  GstPad *pad;
+
+  flip->aspect = 1.0;
+
+  flip->input_capsfilter = gst_element_factory_make ("capsfilter", NULL);
+  res &= gst_bin_add (GST_BIN (flip), flip->input_capsfilter);
+
+  flip->transformation = gst_element_factory_make ("gltransformation", NULL);
+  g_object_set (flip->transformation, "ortho", TRUE, NULL);
+  res &= gst_bin_add (GST_BIN (flip), flip->transformation);
+
+  flip->output_capsfilter = gst_element_factory_make ("capsfilter", NULL);
+  res &= gst_bin_add (GST_BIN (flip), flip->output_capsfilter);
+
+  res &=
+      gst_element_link_pads (flip->input_capsfilter, "src",
+      flip->transformation, "sink");
+  res &=
+      gst_element_link_pads (flip->transformation, "src",
+      flip->output_capsfilter, "sink");
+
+  pad = gst_element_get_static_pad (flip->input_capsfilter, "sink");
+  if (!pad) {
+    res = FALSE;
+  } else {
+    GST_DEBUG_OBJECT (flip, "setting target sink pad %" GST_PTR_FORMAT, pad);
+    flip->sinkpad = gst_ghost_pad_new ("sink", pad);
+    flip->sink_probe = gst_pad_add_probe (flip->sinkpad,
+        GST_PAD_PROBE_TYPE_EVENT_DOWNSTREAM |
+        GST_PAD_PROBE_TYPE_QUERY_DOWNSTREAM,
+        (GstPadProbeCallback) _input_sink_probe, flip, NULL);
+    gst_element_add_pad (GST_ELEMENT_CAST (flip), flip->sinkpad);
+    gst_object_unref (pad);
+  }
+
+  pad = gst_element_get_static_pad (flip->transformation, "src");
+  flip->src_probe = gst_pad_add_probe (pad,
+      GST_PAD_PROBE_TYPE_QUERY_DOWNSTREAM,
+      (GstPadProbeCallback) _trans_src_probe, flip, NULL);
+  gst_object_unref (pad);
+
+  pad = gst_element_get_static_pad (flip->output_capsfilter, "src");
+  if (!pad) {
+    res = FALSE;
+  } else {
+    GST_DEBUG_OBJECT (flip, "setting target sink pad %" GST_PTR_FORMAT, pad);
+    flip->srcpad = gst_ghost_pad_new ("src", pad);
+    gst_element_add_pad (GST_ELEMENT_CAST (flip), flip->srcpad);
+    gst_object_unref (pad);
+  }
+
+  if (!res) {
+    GST_WARNING_OBJECT (flip, "Failed to add/connect the necessary machinery");
+  }
+}
+
+static void
+gst_gl_video_flip_finalize (GObject * object)
+{
+  GstGLVideoFlip *flip = GST_GL_VIDEO_FLIP (object);
+
+  gst_caps_replace (&flip->input_caps, NULL);
+
+  G_OBJECT_CLASS (parent_class)->finalize (object);
+}
+
+/* Caps negotiation happens like this:
+ *
+ * 1. caps/accept-caps queries bypass the capsfilters on either side of the
+ *    transformation element so the fixed caps don't get in the way.
+ * 2. Receiving a caps event on the sink pad will set fixed caps on either side
+ *    of the transformation element.
+ */
+static GstCaps *
+_transform_caps (GstGLVideoFlip * vf, GstPadDirection direction, GstCaps * caps)
+{
+  GstCaps *output = gst_caps_copy (caps);
+  gint i;
+
+  for (i = 0; i < gst_caps_get_size (output); i++) {
+    GstStructure *structure = gst_caps_get_structure (output, i);
+    gint width, height;
+    gint par_n, par_d;
+
+    if (gst_structure_get_int (structure, "width", &width) &&
+        gst_structure_get_int (structure, "height", &height)) {
+
+      switch (vf->active_method) {
+        case GST_GL_VIDEO_FLIP_METHOD_90R:
+        case GST_GL_VIDEO_FLIP_METHOD_90L:
+        case GST_GL_VIDEO_FLIP_METHOD_FLIP_UL_LR:
+        case GST_GL_VIDEO_FLIP_METHOD_FLIP_UR_LL:
+          gst_structure_set (structure, "width", G_TYPE_INT, height,
+              "height", G_TYPE_INT, width, NULL);
+          if (gst_structure_get_fraction (structure, "pixel-aspect-ratio",
+                  &par_n, &par_d)) {
+            if (par_n != 1 || par_d != 1) {
+              GValue val = { 0, };
+
+              g_value_init (&val, GST_TYPE_FRACTION);
+              gst_value_set_fraction (&val, par_d, par_n);
+              gst_structure_set_value (structure, "pixel-aspect-ratio", &val);
+              g_value_unset (&val);
+            }
+          }
+          break;
+        case GST_GL_VIDEO_FLIP_METHOD_IDENTITY:
+        case GST_GL_VIDEO_FLIP_METHOD_180:
+        case GST_GL_VIDEO_FLIP_METHOD_FLIP_HORIZ:
+        case GST_GL_VIDEO_FLIP_METHOD_FLIP_VERT:
+          break;
+        default:
+          g_assert_not_reached ();
+          break;
+      }
+    }
+  }
+
+  return output;
+}
+
+/* with object lock */
+static void
+_set_active_method (GstGLVideoFlip * vf, GstGLVideoFlipMethod method,
+    GstCaps * caps)
+{
+  gfloat rot_z = 0., scale_x = 1.0, scale_y = 1.0;
+  GstCaps *output_caps, *templ;
+  GstPad *srcpad;
+
+  switch (method) {
+    case GST_GL_VIDEO_FLIP_METHOD_IDENTITY:
+      break;
+    case GST_GL_VIDEO_FLIP_METHOD_90R:
+      scale_x *= vf->aspect;
+      scale_y *= 1. / vf->aspect;
+      rot_z = 90.;
+      break;
+    case GST_GL_VIDEO_FLIP_METHOD_180:
+      rot_z = 180.;
+      break;
+    case GST_GL_VIDEO_FLIP_METHOD_90L:
+      scale_x *= vf->aspect;
+      scale_y *= 1. / vf->aspect;
+      rot_z = 270.;
+      break;
+    case GST_GL_VIDEO_FLIP_METHOD_FLIP_HORIZ:
+      scale_x *= -1.;
+      break;
+    case GST_GL_VIDEO_FLIP_METHOD_FLIP_UR_LL:
+      scale_x *= -vf->aspect;
+      scale_y *= 1. / vf->aspect;
+      rot_z = 90.;
+      break;
+    case GST_GL_VIDEO_FLIP_METHOD_FLIP_VERT:
+      scale_x *= -1.;
+      rot_z = 180.;
+      break;
+    case GST_GL_VIDEO_FLIP_METHOD_FLIP_UL_LR:
+      scale_x *= -vf->aspect;
+      scale_y *= 1. / vf->aspect;
+      rot_z = 270.;
+      break;
+    default:
+      break;
+  }
+  vf->active_method = method;
+
+  output_caps = _transform_caps (vf, GST_PAD_SINK, caps);
+  gst_caps_replace (&vf->input_caps, caps);
+
+  srcpad = gst_element_get_static_pad (vf->transformation, "src");
+  templ = gst_pad_get_pad_template_caps (srcpad);
+  gst_object_unref (srcpad);
+
+  gst_caps_append (output_caps, gst_caps_ref (templ));
+  GST_OBJECT_UNLOCK (vf);
+
+  g_object_set (vf->input_capsfilter, "caps", gst_caps_ref (caps), NULL);
+  g_object_set (vf->output_capsfilter, "caps", output_caps, NULL);
+  g_object_set (vf->transformation, "rotation-z", rot_z, "scale-x", scale_x,
+      "scale-y", scale_y, NULL);
+  GST_OBJECT_LOCK (vf);
+}
+
+static void
+gst_gl_video_flip_set_method (GstGLVideoFlip * vf, GstGLVideoFlipMethod method,
+    gboolean from_tag)
+{
+  GST_OBJECT_LOCK (vf);
+  /* Store updated method */
+  if (from_tag)
+    vf->tag_method = method;
+  else
+    vf->method = method;
+
+  /* Get the new method */
+  if (vf->method == GST_GL_VIDEO_FLIP_METHOD_AUTO)
+    method = vf->tag_method;
+  else
+    method = vf->method;
+
+  if (vf->input_caps)
+    _set_active_method (vf, method, vf->input_caps);
+  else {
+    /* just store the configured method here. The actual transform configuration
+     * will be done once caps are configured. See caps handling in
+     * _input_sink_probe. */
+    vf->active_method = method;
+  }
+
+  GST_OBJECT_UNLOCK (vf);
+}
+
+static void
+gst_gl_video_flip_set_property (GObject * object, guint prop_id,
+    const GValue * value, GParamSpec * pspec)
+{
+  GstGLVideoFlip *vf = GST_GL_VIDEO_FLIP (object);
+
+  switch (prop_id) {
+    case PROP_METHOD:
+      gst_gl_video_flip_set_method (vf, g_value_get_enum (value), FALSE);
+      break;
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
+  }
+}
+
+static void
+gst_gl_video_flip_get_property (GObject * object, guint prop_id,
+    GValue * value, GParamSpec * pspec)
+{
+  GstGLVideoFlip *vf = GST_GL_VIDEO_FLIP (object);
+
+  switch (prop_id) {
+    case PROP_METHOD:
+      g_value_set_enum (value, vf->method);
+      break;
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
+  }
+}
+
+static GstPadProbeReturn
+_input_sink_probe (GstPad * pad, GstPadProbeInfo * info, gpointer user_data)
+{
+  GstGLVideoFlip *vf = GST_GL_VIDEO_FLIP (user_data);
+
+  if (GST_PAD_PROBE_INFO_TYPE (info) & GST_PAD_PROBE_TYPE_EVENT_DOWNSTREAM) {
+    GstEvent *event = GST_PAD_PROBE_INFO_EVENT (info);
+
+    switch (GST_EVENT_TYPE (event)) {
+      case GST_EVENT_TAG:{
+        GstTagList *taglist;
+        gchar *orientation;
+
+        gst_event_parse_tag (event, &taglist);
+
+        if (gst_tag_list_get_string (taglist, "image-orientation",
+                &orientation)) {
+          if (!g_strcmp0 ("rotate-0", orientation))
+            gst_gl_video_flip_set_method (vf, GST_GL_VIDEO_FLIP_METHOD_IDENTITY,
+                TRUE);
+          else if (!g_strcmp0 ("rotate-90", orientation))
+            gst_gl_video_flip_set_method (vf, GST_GL_VIDEO_FLIP_METHOD_90R,
+                TRUE);
+          else if (!g_strcmp0 ("rotate-180", orientation))
+            gst_gl_video_flip_set_method (vf, GST_GL_VIDEO_FLIP_METHOD_180,
+                TRUE);
+          else if (!g_strcmp0 ("rotate-270", orientation))
+            gst_gl_video_flip_set_method (vf, GST_GL_VIDEO_FLIP_METHOD_90L,
+                TRUE);
+          else if (!g_strcmp0 ("flip-rotate-0", orientation))
+            gst_gl_video_flip_set_method (vf,
+                GST_GL_VIDEO_FLIP_METHOD_FLIP_HORIZ, TRUE);
+          else if (!g_strcmp0 ("flip-rotate-90", orientation))
+            gst_gl_video_flip_set_method (vf,
+                GST_GL_VIDEO_FLIP_METHOD_FLIP_UR_LL, TRUE);
+          else if (!g_strcmp0 ("flip-rotate-180", orientation))
+            gst_gl_video_flip_set_method (vf,
+                GST_GL_VIDEO_FLIP_METHOD_FLIP_VERT, TRUE);
+          else if (!g_strcmp0 ("flip-rotate-270", orientation))
+            gst_gl_video_flip_set_method (vf,
+                GST_GL_VIDEO_FLIP_METHOD_FLIP_UL_LR, TRUE);
+
+          g_free (orientation);
+        }
+        break;
+      }
+      case GST_EVENT_CAPS:{
+        GstCaps *caps;
+        GstVideoInfo v_info;
+
+        gst_event_parse_caps (event, &caps);
+        GST_OBJECT_LOCK (vf);
+        if (gst_video_info_from_caps (&v_info, caps))
+          vf->aspect =
+              (gfloat) GST_VIDEO_INFO_WIDTH (&v_info) /
+              (gfloat) GST_VIDEO_INFO_HEIGHT (&v_info);
+        else
+          vf->aspect = 1.0;
+        _set_active_method (vf, vf->active_method, caps);
+        GST_OBJECT_UNLOCK (vf);
+        break;
+      }
+      default:
+        break;
+    }
+  } else if (GST_PAD_PROBE_INFO_TYPE (info) &
+      GST_PAD_PROBE_TYPE_QUERY_DOWNSTREAM) {
+    GstQuery *query = GST_PAD_PROBE_INFO_QUERY (info);
+
+    switch (GST_QUERY_TYPE (query)) {
+        /* bypass the capsfilter */
+      case GST_QUERY_CAPS:
+      case GST_QUERY_ACCEPT_CAPS:{
+        GstPad *pad = gst_element_get_static_pad (vf->transformation, "sink");
+        if (gst_pad_query (pad, query)) {
+          gst_object_unref (pad);
+          return GST_PAD_PROBE_HANDLED;
+        } else {
+          gst_object_unref (pad);
+          return GST_PAD_PROBE_DROP;
+        }
+      }
+      default:
+        break;
+    }
+  }
+
+  return GST_PAD_PROBE_OK;
+}
+
+static GstPadProbeReturn
+_trans_src_probe (GstPad * pad, GstPadProbeInfo * info, gpointer user_data)
+{
+  GstGLVideoFlip *vf = GST_GL_VIDEO_FLIP (user_data);
+
+  if (GST_PAD_PROBE_INFO_TYPE (info) & GST_PAD_PROBE_TYPE_QUERY_DOWNSTREAM) {
+    GstQuery *query = GST_PAD_PROBE_INFO_QUERY (info);
+
+    switch (GST_QUERY_TYPE (query)) {
+        /* bypass the capsfilter */
+      case GST_QUERY_CAPS:
+      case GST_QUERY_ACCEPT_CAPS:{
+        if (gst_pad_peer_query (vf->srcpad, query))
+          return GST_PAD_PROBE_HANDLED;
+        else
+          return GST_PAD_PROBE_DROP;
+      }
+      default:
+        break;
+    }
+  }
+
+  return GST_PAD_PROBE_OK;
+}
diff --git a/ext/gl/gstglvideoflip.h b/ext/gl/gstglvideoflip.h
new file mode 100644
index 0000000..3b8e81b
--- /dev/null
+++ b/ext/gl/gstglvideoflip.h
@@ -0,0 +1,97 @@
+/*
+ * GStreamer
+ * Copyright (C) 2016 Matthew Waters <matthew@centricular.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifndef _GST_GL_VIDEO_FLIP_H_
+#define _GST_GL_VIDEO_FLIP_H_
+
+#include <gst/gl/gl.h>
+
+G_BEGIN_DECLS
+
+#define GST_TYPE_GL_VIDEO_FLIP            (gst_gl_video_flip_get_type())
+#define GST_GL_VIDEO_FLIP(obj)            (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_GL_VIDEO_FLIP,GstGLVideoFlip))
+#define GST_IS_GL_VIDEO_FLIP(obj)         (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_GL_VIDEO_FLIP))
+#define GST_GL_VIDEO_FLIP_CLASS(klass)    (G_TYPE_CHECK_CLASS_CAST((klass) ,GST_TYPE_GL_VIDEO_FLIP,GstGLVideoFlipClass))
+#define GST_IS_GL_VIDEO_FLIP_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass) ,GST_TYPE_GL_VIDEO_FLIP))
+#define GST_GL_VIDEO_FLIP_GET_CLASS(obj)  (G_TYPE_INSTANCE_GET_CLASS((obj) ,GST_TYPE_GL_VIDEO_FLIP,GstGLVideoFlipClass))
+
+/**
+ * GstVideoFlipMethod:
+ * @GST_GL_VIDEO_FLIP_METHOD_IDENTITY: Identity (no rotation)
+ * @GST_GL_VIDEO_FLIP_METHOD_90R: Rotate clockwise 90 degrees
+ * @GST_GL_VIDEO_FLIP_METHOD_180: Rotate 180 degrees
+ * @GST_GL_VIDEO_FLIP_METHOD_90L: Rotate counter-clockwise 90 degrees
+ * @GST_GL_VIDEO_FLIP_METHOD_FLIP_HORIZ: Flip horizontally
+ * @GST_GL_VIDEO_FLIP_METHOD_FLIP_VERT: Flip vertically
+ * @GST_GL_VIDEO_FLIP_METHOD_FLIP_UL_LR: Flip across upper left/lower right diagonal
+ * @GST_GL_VIDEO_FLIP_METHOD_FLIP_UR_LL: Flip across upper right/lower left diagonal
+ * @GST_GL_VIDEO_FLIP_METHOD_AUTO: Select flip method based on image-orientation tag
+ *
+ * The different flip methods.
+ */
+typedef enum {
+  GST_GL_VIDEO_FLIP_METHOD_IDENTITY,
+  GST_GL_VIDEO_FLIP_METHOD_90R,
+  GST_GL_VIDEO_FLIP_METHOD_180,
+  GST_GL_VIDEO_FLIP_METHOD_90L,
+  GST_GL_VIDEO_FLIP_METHOD_FLIP_HORIZ,
+  GST_GL_VIDEO_FLIP_METHOD_FLIP_VERT,
+  GST_GL_VIDEO_FLIP_METHOD_FLIP_UL_LR,
+  GST_GL_VIDEO_FLIP_METHOD_FLIP_UR_LL,
+  GST_GL_VIDEO_FLIP_METHOD_AUTO,
+} GstGLVideoFlipMethod;
+
+typedef struct _GstGLVideoFlip GstGLVideoFlip;
+typedef struct _GstGLVideoFlipClass GstGLVideoFlipClass;
+
+struct _GstGLVideoFlip
+{
+  GstBin        bin;
+
+  GstPad       *srcpad;
+  GstPad       *sinkpad;
+
+  GstElement   *input_capsfilter;
+  GstElement   *transformation;
+  GstElement   *output_capsfilter;
+
+  gulong        sink_probe;
+  gulong        src_probe;
+
+  GstCaps      *input_caps;
+
+  /* properties */
+  GstGLVideoFlipMethod method;
+  GstGLVideoFlipMethod tag_method;
+  GstGLVideoFlipMethod active_method;
+
+  gfloat aspect;
+};
+
+struct _GstGLVideoFlipClass
+{
+  GstBinClass filter_class;
+};
+
+GType gst_gl_video_flip_get_type (void);
+
+G_END_DECLS
+
+#endif /* _GST_GL_VIDEO_FLIP_H_ */
diff --git a/ext/gl/gstglvideomixer.c b/ext/gl/gstglvideomixer.c
index 9376793..208a6df 100644
--- a/ext/gl/gstglvideomixer.c
+++ b/ext/gl/gstglvideomixer.c
@@ -71,151 +71,72 @@
   return mixer_background_type;
 }
 
-typedef struct _GstGLMixerControlBindingProxy GstGLMixerControlBindingProxy;
-typedef struct _GstGLMixerControlBindingProxyClass
-    GstGLMixerControlBindingProxyClass;
-
-struct _GstGLMixerControlBindingProxy
+#define GST_TYPE_GL_VIDEO_MIXER_BLEND_EQUATION (gst_gl_video_mixer_blend_equation_get_type())
+static GType
+gst_gl_video_mixer_blend_equation_get_type (void)
 {
-  GstControlBinding parent;
+  static GType mixer_blend_equation_type = 0;
 
-  GstObject *ref_object;
-  const gchar *property_name;
-};
+  static const GEnumValue mixer_blend_equations[] = {
+    {GST_GL_VIDEO_MIXER_BLEND_EQUATION_ADD, "Add", "add"},
+    {GST_GL_VIDEO_MIXER_BLEND_EQUATION_SUBTRACT, "Subtract", "subtract"},
+    {GST_GL_VIDEO_MIXER_BLEND_EQUATION_REVERSE_SUBTRACT, "Reverse Subtract",
+        "reverse-subtract"},
+    {0, NULL, NULL},
+  };
 
-struct _GstGLMixerControlBindingProxyClass
-{
-  GstControlBindingClass parent_class;
-};
-
-GType gst_gl_mixer_control_binding_proxy_get_type (void);
-#define GST_TYPE_GL_MIXER_CONTROL_BINDING \
-  (gst_gl_mixer_control_binding_proxy_get_type())
-
-G_DEFINE_TYPE (GstGLMixerControlBindingProxy,
-    gst_gl_mixer_control_binding_proxy, GST_TYPE_CONTROL_BINDING);
-
-static void
-gst_gl_mixer_control_binding_proxy_init (GstGLMixerControlBindingProxy * self)
-{
-}
-
-static gboolean
-gst_gl_mixer_control_binding_proxy_sync_values (GstControlBinding * binding,
-    GstObject * object, GstClockTime timestamp, GstClockTime last_sync)
-{
-  GstGLMixerControlBindingProxy *self = (GstGLMixerControlBindingProxy *)
-      binding;
-  GstControlBinding *ref_binding;
-  gboolean ret = TRUE;
-
-  ref_binding = gst_object_get_control_binding (self->ref_object,
-      self->property_name);
-
-  if (ref_binding) {
-    ret = gst_control_binding_sync_values (ref_binding, self->ref_object,
-        timestamp, last_sync);
-    gst_object_unref (ref_binding);
+  if (!mixer_blend_equation_type) {
+    mixer_blend_equation_type =
+        g_enum_register_static ("GstGLVideoMixerBlendEquation",
+        mixer_blend_equations);
   }
-
-  return ret;
+  return mixer_blend_equation_type;
 }
 
-static GValue *
-gst_gl_mixer_control_binding_proxy_get_value (GstControlBinding * binding,
-    GstClockTime timestamp)
+#define GST_TYPE_GL_VIDEO_MIXER_BLEND_FUNCTION (gst_gl_video_mixer_blend_function_get_type())
+static GType
+gst_gl_video_mixer_blend_function_get_type (void)
 {
-  GstGLMixerControlBindingProxy *self = (GstGLMixerControlBindingProxy *)
-      binding;
-  GstControlBinding *ref_binding;
-  GValue *ret = NULL;
+  static GType mixer_blend_function_type = 0;
 
-  ref_binding = gst_object_get_control_binding (self->ref_object,
-      self->property_name);
+  static const GEnumValue mixer_blend_funcs[] = {
+    {GST_GL_VIDEO_MIXER_BLEND_FUNCTION_ZERO, "Zero", "zero"},
+    {GST_GL_VIDEO_MIXER_BLEND_FUNCTION_ONE, "One", "one"},
+    {GST_GL_VIDEO_MIXER_BLEND_FUNCTION_SRC_COLOR, "Source Color", "src-color"},
+    {GST_GL_VIDEO_MIXER_BLEND_FUNCTION_ONE_MINUS_SRC_COLOR,
+        "One Minus Source Color", "one-minus-src-color"},
+    {GST_GL_VIDEO_MIXER_BLEND_FUNCTION_DST_COLOR, "Destination Color",
+        "dst-color"},
+    {GST_GL_VIDEO_MIXER_BLEND_FUNCTION_ONE_MINUS_DST_COLOR,
+        "One Minus Destination Color", "one-minus-dst-color"},
+    {GST_GL_VIDEO_MIXER_BLEND_FUNCTION_SRC_ALPHA, "Source Alpha", "src-alpha"},
+    {GST_GL_VIDEO_MIXER_BLEND_FUNCTION_ONE_MINUS_SRC_ALPHA,
+        "One Minus Source Alpha", "one-minus-src-alpha"},
+    {GST_GL_VIDEO_MIXER_BLEND_FUNCTION_DST_ALPHA, "Destination Alpha",
+        "dst-alpha"},
+    {GST_GL_VIDEO_MIXER_BLEND_FUNCTION_ONE_MINUS_DST_ALPHA,
+        "One Minus Destination Alpha", "one-minus-dst-alpha"},
+    {GST_GL_VIDEO_MIXER_BLEND_FUNCTION_CONSTANT_COLOR, "Constant Color",
+        "constant-color"},
+    {GST_GL_VIDEO_MIXER_BLEND_FUNCTION_ONE_MINUS_CONSTANT_COLOR,
+        "One Minus Constant Color", "one-minus-contant-color"},
+    {GST_GL_VIDEO_MIXER_BLEND_FUNCTION_CONSTANT_ALPHA, "Constant Alpha",
+        "constant-alpha"},
+    {GST_GL_VIDEO_MIXER_BLEND_FUNCTION_ONE_MINUS_CONSTANT_COLOR,
+        "One Minus Constant Alpha", "one-minus-contant-alpha"},
+    {GST_GL_VIDEO_MIXER_BLEND_FUNCTION_SRC_ALPHA_SATURATE,
+        "Source Alpha Saturate", "src-alpha-saturate"},
+    {0, NULL, NULL},
+  };
 
-  if (ref_binding) {
-    ret = gst_control_binding_get_value (ref_binding, timestamp);
-    gst_object_unref (ref_binding);
+  if (!mixer_blend_function_type) {
+    mixer_blend_function_type =
+        g_enum_register_static ("GstGLVideoMixerBlendFunction",
+        mixer_blend_funcs);
   }
-
-  return ret;
+  return mixer_blend_function_type;
 }
 
-static gboolean
-gst_gl_mixer_control_binding_proxy_get_value_array (GstControlBinding * binding,
-    GstClockTime timestamp, GstClockTime interval, guint n_values,
-    gpointer values)
-{
-  GstGLMixerControlBindingProxy *self = (GstGLMixerControlBindingProxy *)
-      binding;
-  GstControlBinding *ref_binding;
-  gboolean ret = FALSE;
-
-  ref_binding = gst_object_get_control_binding (self->ref_object,
-      self->property_name);
-
-  if (ref_binding) {
-    ret = gst_control_binding_get_value_array (ref_binding, timestamp,
-        interval, n_values, values);
-    gst_object_unref (ref_binding);
-  }
-
-  return ret;
-}
-
-static gboolean
-gst_gl_mixer_control_binding_proxy_get_g_value_array (GstControlBinding *
-    binding, GstClockTime timestamp, GstClockTime interval, guint n_values,
-    GValue * values)
-{
-  GstGLMixerControlBindingProxy *self = (GstGLMixerControlBindingProxy *)
-      binding;
-  GstControlBinding *ref_binding;
-  gboolean ret = FALSE;
-
-  ref_binding = gst_object_get_control_binding (self->ref_object,
-      self->property_name);
-
-  if (ref_binding) {
-    ret = gst_control_binding_get_g_value_array (ref_binding, timestamp,
-        interval, n_values, values);
-    gst_object_unref (ref_binding);
-  }
-
-  return ret;
-}
-
-
-static void
-    gst_gl_mixer_control_binding_proxy_class_init
-    (GstGLMixerControlBindingProxyClass * klass)
-{
-  GstControlBindingClass *cb_class = GST_CONTROL_BINDING_CLASS (klass);
-
-  cb_class->sync_values = gst_gl_mixer_control_binding_proxy_sync_values;
-  cb_class->get_value = gst_gl_mixer_control_binding_proxy_get_value;
-  cb_class->get_value_array =
-      gst_gl_mixer_control_binding_proxy_get_value_array;
-  cb_class->get_g_value_array =
-      gst_gl_mixer_control_binding_proxy_get_g_value_array;
-}
-
-static GstControlBinding *
-gst_gl_mixer_control_binding_proxy_new (GstObject * object,
-    const gchar * property_name, GstObject * ref_object,
-    const gchar * ref_property_name)
-{
-  GstGLMixerControlBindingProxy *self =
-      g_object_new (GST_TYPE_GL_MIXER_CONTROL_BINDING, "object", object,
-      "name", property_name, NULL);
-
-  self->ref_object = ref_object;
-  self->property_name = ref_property_name;
-
-  return (GstControlBinding *) self;
-}
-
-
 #define DEFAULT_PAD_XPOS   0
 #define DEFAULT_PAD_YPOS   0
 #define DEFAULT_PAD_WIDTH  0
@@ -223,6 +144,12 @@
 #define DEFAULT_PAD_ALPHA  1.0
 #define DEFAULT_PAD_ZORDER 0
 #define DEFAULT_PAD_IGNORE_EOS FALSE
+#define DEFAULT_PAD_BLEND_EQUATION_RGB GST_GL_VIDEO_MIXER_BLEND_EQUATION_ADD
+#define DEFAULT_PAD_BLEND_EQUATION_ALPHA GST_GL_VIDEO_MIXER_BLEND_EQUATION_ADD
+#define DEFAULT_PAD_BLEND_FUNCTION_SRC_RGB GST_GL_VIDEO_MIXER_BLEND_FUNCTION_SRC_ALPHA
+#define DEFAULT_PAD_BLEND_FUNCTION_SRC_ALPHA GST_GL_VIDEO_MIXER_BLEND_FUNCTION_SRC_ALPHA
+#define DEFAULT_PAD_BLEND_FUNCTION_DST_RGB GST_GL_VIDEO_MIXER_BLEND_FUNCTION_ONE_MINUS_SRC_ALPHA
+#define DEFAULT_PAD_BLEND_FUNCTION_DST_ALPHA GST_GL_VIDEO_MIXER_BLEND_FUNCTION_ONE_MINUS_SRC_ALPHA
 
 enum
 {
@@ -232,6 +159,16 @@
   PROP_INPUT_WIDTH,
   PROP_INPUT_HEIGHT,
   PROP_INPUT_ALPHA,
+  PROP_INPUT_BLEND_EQUATION_RGB,
+  PROP_INPUT_BLEND_EQUATION_ALPHA,
+  PROP_INPUT_BLEND_FUNCTION_SRC_RGB,
+  PROP_INPUT_BLEND_FUNCTION_SRC_ALPHA,
+  PROP_INPUT_BLEND_FUNCTION_DST_RGB,
+  PROP_INPUT_BLEND_FUNCTION_DST_ALPHA,
+  PROP_INPUT_BLEND_FUNCTION_CONSTANT_COLOR_RED,
+  PROP_INPUT_BLEND_FUNCTION_CONSTANT_COLOR_GREEN,
+  PROP_INPUT_BLEND_FUNCTION_CONSTANT_COLOR_BLUE,
+  PROP_INPUT_BLEND_FUNCTION_CONSTANT_COLOR_ALPHA,
   PROP_INPUT_ZORDER,
   PROP_INPUT_IGNORE_EOS,
 };
@@ -299,6 +236,71 @@
       g_param_spec_double ("alpha", "Alpha", "Alpha of the picture", 0.0, 1.0,
           DEFAULT_PAD_ALPHA,
           G_PARAM_READWRITE | GST_PARAM_CONTROLLABLE | G_PARAM_STATIC_STRINGS));
+  g_object_class_install_property (gobject_class, PROP_INPUT_BLEND_EQUATION_RGB,
+      g_param_spec_enum ("blend-equation-rgb", "Blend Equation RGB",
+          "Blend Equation for RGB",
+          GST_TYPE_GL_VIDEO_MIXER_BLEND_EQUATION,
+          DEFAULT_PAD_BLEND_EQUATION_RGB,
+          G_PARAM_READWRITE | GST_PARAM_CONTROLLABLE | G_PARAM_STATIC_STRINGS));
+  g_object_class_install_property (gobject_class,
+      PROP_INPUT_BLEND_EQUATION_ALPHA,
+      g_param_spec_enum ("blend-equation-alpha", "Blend Equation Alpha",
+          "Blend Equation for Alpha", GST_TYPE_GL_VIDEO_MIXER_BLEND_EQUATION,
+          DEFAULT_PAD_BLEND_EQUATION_ALPHA,
+          G_PARAM_READWRITE | GST_PARAM_CONTROLLABLE | G_PARAM_STATIC_STRINGS));
+  g_object_class_install_property (gobject_class,
+      PROP_INPUT_BLEND_FUNCTION_SRC_RGB,
+      g_param_spec_enum ("blend-function-src-rgb", "Blend Function Source RGB",
+          "Blend Function for Source RGB",
+          GST_TYPE_GL_VIDEO_MIXER_BLEND_FUNCTION,
+          DEFAULT_PAD_BLEND_FUNCTION_SRC_RGB,
+          G_PARAM_READWRITE | GST_PARAM_CONTROLLABLE | G_PARAM_STATIC_STRINGS));
+  g_object_class_install_property (gobject_class,
+      PROP_INPUT_BLEND_FUNCTION_SRC_ALPHA,
+      g_param_spec_enum ("blend-function-src-alpha",
+          "Blend Function Source Alpha", "Blend Function for Source Alpha",
+          GST_TYPE_GL_VIDEO_MIXER_BLEND_FUNCTION,
+          DEFAULT_PAD_BLEND_FUNCTION_SRC_ALPHA,
+          G_PARAM_READWRITE | GST_PARAM_CONTROLLABLE | G_PARAM_STATIC_STRINGS));
+  g_object_class_install_property (gobject_class,
+      PROP_INPUT_BLEND_FUNCTION_DST_RGB,
+      g_param_spec_enum ("blend-function-dst-rgb",
+          "Blend Function Destination RGB",
+          "Blend Function for Destination RGB",
+          GST_TYPE_GL_VIDEO_MIXER_BLEND_FUNCTION,
+          DEFAULT_PAD_BLEND_FUNCTION_DST_RGB,
+          G_PARAM_READWRITE | GST_PARAM_CONTROLLABLE | G_PARAM_STATIC_STRINGS));
+  g_object_class_install_property (gobject_class,
+      PROP_INPUT_BLEND_FUNCTION_DST_ALPHA,
+      g_param_spec_enum ("blend-function-dst-alpha",
+          "Blend Function Destination Alpha",
+          "Blend Function for Destiniation Alpha",
+          GST_TYPE_GL_VIDEO_MIXER_BLEND_FUNCTION,
+          DEFAULT_PAD_BLEND_FUNCTION_DST_ALPHA,
+          G_PARAM_READWRITE | GST_PARAM_CONTROLLABLE | G_PARAM_STATIC_STRINGS));
+  g_object_class_install_property (gobject_class,
+      PROP_INPUT_BLEND_FUNCTION_CONSTANT_COLOR_RED,
+      g_param_spec_double ("blend-constant-color-red",
+          "Blend Constant Color Red", "Blend Constant Color Red", 0.0, 1.0, 0.0,
+          G_PARAM_READWRITE | GST_PARAM_CONTROLLABLE | G_PARAM_STATIC_STRINGS));
+  g_object_class_install_property (gobject_class,
+      PROP_INPUT_BLEND_FUNCTION_CONSTANT_COLOR_GREEN,
+      g_param_spec_double ("blend-constant-color-green",
+          "Blend Constant Color Green", "Blend Constant Color Green", 0.0, 1.0,
+          0.0,
+          G_PARAM_READWRITE | GST_PARAM_CONTROLLABLE | G_PARAM_STATIC_STRINGS));
+  g_object_class_install_property (gobject_class,
+      PROP_INPUT_BLEND_FUNCTION_CONSTANT_COLOR_BLUE,
+      g_param_spec_double ("blend-constant-color-blue",
+          "Blend Constant Color Green", "Blend Constant Color Green", 0.0, 1.0,
+          0.0,
+          G_PARAM_READWRITE | GST_PARAM_CONTROLLABLE | G_PARAM_STATIC_STRINGS));
+  g_object_class_install_property (gobject_class,
+      PROP_INPUT_BLEND_FUNCTION_CONSTANT_COLOR_ALPHA,
+      g_param_spec_double ("blend-constant-color-alpha",
+          "Blend Constant Color Alpha", "Blend Constant Color Alpha", 0.0, 1.0,
+          0.0,
+          G_PARAM_READWRITE | GST_PARAM_CONTROLLABLE | G_PARAM_STATIC_STRINGS));
 }
 
 static void
@@ -328,25 +330,44 @@
       g_object_new (gst_gl_video_mixer_input_get_type (), "name",
       GST_OBJECT_NAME (mixer_pad), "direction", GST_PAD_DIRECTION (mixer_pad),
       NULL);
-  GstControlBinding *cb;
 
   if (!gst_ghost_pad_construct (GST_GHOST_PAD (input))) {
     gst_object_unref (input);
     return NULL;
   }
-#define ADD_PROXY_CONTROL_BINDING(prop)                                \
-  cb = gst_gl_mixer_control_binding_proxy_new (GST_OBJECT (mixer_pad), \
-      G_STRINGIFY (prop), GST_OBJECT (input), G_STRINGIFY (prop));     \
-  gst_object_add_control_binding (GST_OBJECT (mixer_pad), cb)
 
-  ADD_PROXY_CONTROL_BINDING (zorder);
-  ADD_PROXY_CONTROL_BINDING (xpos);
-  ADD_PROXY_CONTROL_BINDING (ypos);
-  ADD_PROXY_CONTROL_BINDING (width);
-  ADD_PROXY_CONTROL_BINDING (height);
-  ADD_PROXY_CONTROL_BINDING (alpha);
-
-#undef ADD_PROXY_CONTROL_BINDING
+  gst_gl_object_add_control_binding_proxy (GST_OBJECT (mixer_pad),
+      GST_OBJECT (input), "zorder");
+  gst_gl_object_add_control_binding_proxy (GST_OBJECT (mixer_pad),
+      GST_OBJECT (input), "xpos");
+  gst_gl_object_add_control_binding_proxy (GST_OBJECT (mixer_pad),
+      GST_OBJECT (input), "ypos");
+  gst_gl_object_add_control_binding_proxy (GST_OBJECT (mixer_pad),
+      GST_OBJECT (input), "width");
+  gst_gl_object_add_control_binding_proxy (GST_OBJECT (mixer_pad),
+      GST_OBJECT (input), "height");
+  gst_gl_object_add_control_binding_proxy (GST_OBJECT (mixer_pad),
+      GST_OBJECT (input), "alpha");
+  gst_gl_object_add_control_binding_proxy (GST_OBJECT (mixer_pad),
+      GST_OBJECT (input), "blend-equation-rgb");
+  gst_gl_object_add_control_binding_proxy (GST_OBJECT (mixer_pad),
+      GST_OBJECT (input), "blend-equation-alpha");
+  gst_gl_object_add_control_binding_proxy (GST_OBJECT (mixer_pad),
+      GST_OBJECT (input), "blend-function-src-rgb");
+  gst_gl_object_add_control_binding_proxy (GST_OBJECT (mixer_pad),
+      GST_OBJECT (input), "blend-function-src-alpha");
+  gst_gl_object_add_control_binding_proxy (GST_OBJECT (mixer_pad),
+      GST_OBJECT (input), "blend-function-dst-rgb");
+  gst_gl_object_add_control_binding_proxy (GST_OBJECT (mixer_pad),
+      GST_OBJECT (input), "blend-function-dst-alpha");
+  gst_gl_object_add_control_binding_proxy (GST_OBJECT (mixer_pad),
+      GST_OBJECT (input), "blend-constant-color-red");
+  gst_gl_object_add_control_binding_proxy (GST_OBJECT (mixer_pad),
+      GST_OBJECT (input), "blend-constant-color-green");
+  gst_gl_object_add_control_binding_proxy (GST_OBJECT (mixer_pad),
+      GST_OBJECT (input), "blend-constant-color-blue");
+  gst_gl_object_add_control_binding_proxy (GST_OBJECT (mixer_pad),
+      GST_OBJECT (input), "blend-constant-color-alpha");
 
   input->mixer_pad = mixer_pad;
 
@@ -439,13 +460,15 @@
 static void gst_gl_video_mixer_get_property (GObject * object, guint prop_id,
     GValue * value, GParamSpec * pspec);
 
-static GstCaps *_update_caps (GstVideoAggregator * vagg, GstCaps * caps);
+static GstCaps *_update_caps (GstVideoAggregator * vagg, GstCaps * caps,
+    GstCaps * filter);
+static GstCaps *_fixate_caps (GstVideoAggregator * vagg, GstCaps * caps);
 static void gst_gl_video_mixer_reset (GstGLMixer * mixer);
 static gboolean gst_gl_video_mixer_init_shader (GstGLMixer * mixer,
     GstCaps * outcaps);
 
 static gboolean gst_gl_video_mixer_process_textures (GstGLMixer * mixer,
-    GPtrArray * in_frames, guint out_tex);
+    guint out_tex);
 static void gst_gl_video_mixer_callback (gpointer stuff);
 
 /* *INDENT-OFF* */
@@ -534,6 +557,17 @@
   gint width, height;
   gdouble alpha;
 
+  GstGLVideoMixerBlendEquation blend_equation_rgb;
+  GstGLVideoMixerBlendEquation blend_equation_alpha;
+  GstGLVideoMixerBlendFunction blend_function_src_rgb;
+  GstGLVideoMixerBlendFunction blend_function_src_alpha;
+  GstGLVideoMixerBlendFunction blend_function_dst_rgb;
+  GstGLVideoMixerBlendFunction blend_function_dst_alpha;
+  gdouble blend_constant_color_red;
+  gdouble blend_constant_color_green;
+  gdouble blend_constant_color_blue;
+  gdouble blend_constant_color_alpha;
+
   gboolean geometry_change;
   GLuint vertex_buffer;
 };
@@ -559,13 +593,29 @@
   PROP_PAD_YPOS,
   PROP_PAD_WIDTH,
   PROP_PAD_HEIGHT,
-  PROP_PAD_ALPHA
+  PROP_PAD_ALPHA,
+  PROP_PAD_BLEND_EQUATION_RGB,
+  PROP_PAD_BLEND_EQUATION_ALPHA,
+  PROP_PAD_BLEND_FUNCTION_SRC_RGB,
+  PROP_PAD_BLEND_FUNCTION_SRC_ALPHA,
+  PROP_PAD_BLEND_FUNCTION_DST_RGB,
+  PROP_PAD_BLEND_FUNCTION_DST_ALPHA,
+  PROP_PAD_BLEND_FUNCTION_CONSTANT_COLOR_RED,
+  PROP_PAD_BLEND_FUNCTION_CONSTANT_COLOR_GREEN,
+  PROP_PAD_BLEND_FUNCTION_CONSTANT_COLOR_BLUE,
+  PROP_PAD_BLEND_FUNCTION_CONSTANT_COLOR_ALPHA,
 };
 
 static void
 gst_gl_video_mixer_pad_init (GstGLVideoMixerPad * pad)
 {
-  pad->alpha = 1.0;
+  pad->alpha = DEFAULT_PAD_ALPHA;
+  pad->blend_equation_rgb = DEFAULT_PAD_BLEND_EQUATION_RGB;
+  pad->blend_equation_alpha = DEFAULT_PAD_BLEND_EQUATION_ALPHA;
+  pad->blend_function_src_rgb = DEFAULT_PAD_BLEND_FUNCTION_SRC_RGB;
+  pad->blend_function_src_alpha = DEFAULT_PAD_BLEND_FUNCTION_SRC_ALPHA;
+  pad->blend_function_dst_rgb = DEFAULT_PAD_BLEND_FUNCTION_DST_RGB;
+  pad->blend_function_dst_alpha = DEFAULT_PAD_BLEND_FUNCTION_DST_ALPHA;
 }
 
 static void
@@ -596,6 +646,71 @@
       g_param_spec_double ("alpha", "Alpha", "Alpha of the picture", 0.0, 1.0,
           DEFAULT_PAD_ALPHA,
           G_PARAM_READWRITE | GST_PARAM_CONTROLLABLE | G_PARAM_STATIC_STRINGS));
+  g_object_class_install_property (gobject_class, PROP_INPUT_BLEND_EQUATION_RGB,
+      g_param_spec_enum ("blend-equation-rgb", "Blend Equation RGB",
+          "Blend Equation for RGB",
+          GST_TYPE_GL_VIDEO_MIXER_BLEND_EQUATION,
+          DEFAULT_PAD_BLEND_EQUATION_RGB,
+          G_PARAM_READWRITE | GST_PARAM_CONTROLLABLE | G_PARAM_STATIC_STRINGS));
+  g_object_class_install_property (gobject_class,
+      PROP_INPUT_BLEND_EQUATION_ALPHA,
+      g_param_spec_enum ("blend-equation-alpha", "Blend Equation Alpha",
+          "Blend Equation for Alpha", GST_TYPE_GL_VIDEO_MIXER_BLEND_EQUATION,
+          DEFAULT_PAD_BLEND_EQUATION_ALPHA,
+          G_PARAM_READWRITE | GST_PARAM_CONTROLLABLE | G_PARAM_STATIC_STRINGS));
+  g_object_class_install_property (gobject_class,
+      PROP_INPUT_BLEND_FUNCTION_SRC_RGB,
+      g_param_spec_enum ("blend-function-src-rgb", "Blend Function Source RGB",
+          "Blend Function for Source RGB",
+          GST_TYPE_GL_VIDEO_MIXER_BLEND_FUNCTION,
+          DEFAULT_PAD_BLEND_FUNCTION_SRC_RGB,
+          G_PARAM_READWRITE | GST_PARAM_CONTROLLABLE | G_PARAM_STATIC_STRINGS));
+  g_object_class_install_property (gobject_class,
+      PROP_INPUT_BLEND_FUNCTION_SRC_ALPHA,
+      g_param_spec_enum ("blend-function-src-alpha",
+          "Blend Function Source Alpha", "Blend Function for Source Alpha",
+          GST_TYPE_GL_VIDEO_MIXER_BLEND_FUNCTION,
+          DEFAULT_PAD_BLEND_FUNCTION_SRC_ALPHA,
+          G_PARAM_READWRITE | GST_PARAM_CONTROLLABLE | G_PARAM_STATIC_STRINGS));
+  g_object_class_install_property (gobject_class,
+      PROP_INPUT_BLEND_FUNCTION_DST_RGB,
+      g_param_spec_enum ("blend-function-dst-rgb",
+          "Blend Function Destination RGB",
+          "Blend Function for Destination RGB",
+          GST_TYPE_GL_VIDEO_MIXER_BLEND_FUNCTION,
+          DEFAULT_PAD_BLEND_FUNCTION_DST_RGB,
+          G_PARAM_READWRITE | GST_PARAM_CONTROLLABLE | G_PARAM_STATIC_STRINGS));
+  g_object_class_install_property (gobject_class,
+      PROP_INPUT_BLEND_FUNCTION_DST_ALPHA,
+      g_param_spec_enum ("blend-function-dst-alpha",
+          "Blend Function Destination Alpha",
+          "Blend Function for Destiniation Alpha",
+          GST_TYPE_GL_VIDEO_MIXER_BLEND_FUNCTION,
+          DEFAULT_PAD_BLEND_FUNCTION_DST_ALPHA,
+          G_PARAM_READWRITE | GST_PARAM_CONTROLLABLE | G_PARAM_STATIC_STRINGS));
+  g_object_class_install_property (gobject_class,
+      PROP_PAD_BLEND_FUNCTION_CONSTANT_COLOR_RED,
+      g_param_spec_double ("blend-constant-color-red",
+          "Blend Constant Color Red", "Blend Constant Color Red", 0.0, 1.0, 0.0,
+          G_PARAM_READWRITE | GST_PARAM_CONTROLLABLE | G_PARAM_STATIC_STRINGS));
+  g_object_class_install_property (gobject_class,
+      PROP_PAD_BLEND_FUNCTION_CONSTANT_COLOR_GREEN,
+      g_param_spec_double ("blend-constant-color-green",
+          "Blend Constant Color Green", "Blend Constant Color Green", 0.0, 1.0,
+          0.0,
+          G_PARAM_READWRITE | GST_PARAM_CONTROLLABLE | G_PARAM_STATIC_STRINGS));
+  g_object_class_install_property (gobject_class,
+      PROP_PAD_BLEND_FUNCTION_CONSTANT_COLOR_BLUE,
+      g_param_spec_double ("blend-constant-color-blue",
+          "Blend Constant Color Green", "Blend Constant Color Green", 0.0, 1.0,
+          0.0,
+          G_PARAM_READWRITE | GST_PARAM_CONTROLLABLE | G_PARAM_STATIC_STRINGS));
+  g_object_class_install_property (gobject_class,
+      PROP_PAD_BLEND_FUNCTION_CONSTANT_COLOR_ALPHA,
+      g_param_spec_double ("blend-constant-color-alpha",
+          "Blend Constant Color Alpha", "Blend Constant Color Alpha", 0.0, 1.0,
+          0.0,
+          G_PARAM_READWRITE | GST_PARAM_CONTROLLABLE | G_PARAM_STATIC_STRINGS));
 }
 
 static void
@@ -620,6 +735,36 @@
     case PROP_PAD_ALPHA:
       g_value_set_double (value, pad->alpha);
       break;
+    case PROP_PAD_BLEND_EQUATION_RGB:
+      g_value_set_enum (value, pad->blend_equation_rgb);
+      break;
+    case PROP_PAD_BLEND_EQUATION_ALPHA:
+      g_value_set_enum (value, pad->blend_equation_alpha);
+      break;
+    case PROP_PAD_BLEND_FUNCTION_SRC_RGB:
+      g_value_set_enum (value, pad->blend_function_src_rgb);
+      break;
+    case PROP_PAD_BLEND_FUNCTION_SRC_ALPHA:
+      g_value_set_enum (value, pad->blend_function_src_alpha);
+      break;
+    case PROP_PAD_BLEND_FUNCTION_DST_RGB:
+      g_value_set_enum (value, pad->blend_function_dst_rgb);
+      break;
+    case PROP_PAD_BLEND_FUNCTION_DST_ALPHA:
+      g_value_set_enum (value, pad->blend_function_dst_alpha);
+      break;
+    case PROP_PAD_BLEND_FUNCTION_CONSTANT_COLOR_RED:
+      g_value_set_double (value, pad->blend_constant_color_red);
+      break;
+    case PROP_PAD_BLEND_FUNCTION_CONSTANT_COLOR_GREEN:
+      g_value_set_double (value, pad->blend_constant_color_green);
+      break;
+    case PROP_PAD_BLEND_FUNCTION_CONSTANT_COLOR_BLUE:
+      g_value_set_double (value, pad->blend_constant_color_blue);
+      break;
+    case PROP_PAD_BLEND_FUNCTION_CONSTANT_COLOR_ALPHA:
+      g_value_set_double (value, pad->blend_constant_color_alpha);
+      break;
     default:
       G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
       break;
@@ -653,6 +798,36 @@
     case PROP_PAD_ALPHA:
       pad->alpha = g_value_get_double (value);
       break;
+    case PROP_PAD_BLEND_EQUATION_RGB:
+      pad->blend_equation_rgb = g_value_get_enum (value);
+      break;
+    case PROP_PAD_BLEND_EQUATION_ALPHA:
+      pad->blend_equation_alpha = g_value_get_enum (value);
+      break;
+    case PROP_PAD_BLEND_FUNCTION_SRC_RGB:
+      pad->blend_function_src_rgb = g_value_get_enum (value);
+      break;
+    case PROP_PAD_BLEND_FUNCTION_SRC_ALPHA:
+      pad->blend_function_src_alpha = g_value_get_enum (value);
+      break;
+    case PROP_PAD_BLEND_FUNCTION_DST_RGB:
+      pad->blend_function_dst_rgb = g_value_get_enum (value);
+      break;
+    case PROP_PAD_BLEND_FUNCTION_DST_ALPHA:
+      pad->blend_function_dst_alpha = g_value_get_enum (value);
+      break;
+    case PROP_PAD_BLEND_FUNCTION_CONSTANT_COLOR_RED:
+      pad->blend_constant_color_red = g_value_get_double (value);
+      break;
+    case PROP_PAD_BLEND_FUNCTION_CONSTANT_COLOR_GREEN:
+      pad->blend_constant_color_green = g_value_get_double (value);
+      break;
+    case PROP_PAD_BLEND_FUNCTION_CONSTANT_COLOR_BLUE:
+      pad->blend_constant_color_blue = g_value_get_double (value);
+      break;
+    case PROP_PAD_BLEND_FUNCTION_CONSTANT_COLOR_ALPHA:
+      pad->blend_constant_color_alpha = g_value_get_double (value);
+      break;
     default:
       G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
       break;
@@ -662,6 +837,26 @@
 }
 
 static void
+_del_buffer (GstGLContext * context, GLuint * pBuffer)
+{
+  context->gl_vtable->DeleteBuffers (1, pBuffer);
+}
+
+static void
+gst_gl_video_mixer_release_pad (GstElement * element, GstPad * p)
+{
+  GstGLVideoMixerPad *pad = GST_GL_VIDEO_MIXER_PAD (p);
+  if (pad->vertex_buffer) {
+    GstGLBaseMixer *mix = GST_GL_BASE_MIXER (element);
+    gst_gl_context_thread_add (mix->context, (GstGLContextThreadFunc)
+        _del_buffer, &pad->vertex_buffer);
+    pad->vertex_buffer = 0;
+  }
+  GST_ELEMENT_CLASS (g_type_class_peek_parent (G_OBJECT_GET_CLASS (element)))
+      ->release_pad (element, p);
+}
+
+static void
 gst_gl_video_mixer_class_init (GstGLVideoMixerClass * klass)
 {
   GObjectClass *gobject_class;
@@ -671,6 +866,7 @@
 
   gobject_class = (GObjectClass *) klass;
   element_class = GST_ELEMENT_CLASS (klass);
+  element_class->release_pad = gst_gl_video_mixer_release_pad;
 
   gobject_class->set_property = gst_gl_video_mixer_set_property;
   gobject_class->get_property = gst_gl_video_mixer_get_property;
@@ -690,6 +886,7 @@
       gst_gl_video_mixer_process_textures;
 
   vagg_class->update_caps = _update_caps;
+  vagg_class->fixate_caps = _fixate_caps;
 
   agg_class->sinkpads_type = GST_TYPE_GL_VIDEO_MIXER_PAD;
 
@@ -702,7 +899,6 @@
 {
   video_mixer->background = DEFAULT_BACKGROUND;
   video_mixer->shader = NULL;
-  video_mixer->input_frames = NULL;
 }
 
 static void
@@ -739,9 +935,9 @@
 
 static void
 _mixer_pad_get_output_size (GstGLVideoMixer * mix,
-    GstGLVideoMixerPad * mix_pad, gint * width, gint * height)
+    GstGLVideoMixerPad * mix_pad, gint out_par_n, gint out_par_d, gint * width,
+    gint * height)
 {
-  GstVideoAggregator *vagg = GST_VIDEO_AGGREGATOR (mix);
   GstVideoAggregatorPad *vagg_pad = GST_VIDEO_AGGREGATOR_PAD (mix_pad);
   gint pad_width, pad_height;
   guint dar_n, dar_d;
@@ -764,13 +960,10 @@
 
   gst_video_calculate_display_ratio (&dar_n, &dar_d, pad_width, pad_height,
       GST_VIDEO_INFO_PAR_N (&vagg_pad->info),
-      GST_VIDEO_INFO_PAR_D (&vagg_pad->info),
-      GST_VIDEO_INFO_PAR_N (&vagg->info), GST_VIDEO_INFO_PAR_D (&vagg->info)
-      );
+      GST_VIDEO_INFO_PAR_D (&vagg_pad->info), out_par_n, out_par_d);
   GST_LOG_OBJECT (mix_pad, "scaling %ux%u by %u/%u (%u/%u / %u/%u)", pad_width,
       pad_height, dar_n, dar_d, GST_VIDEO_INFO_PAR_N (&vagg_pad->info),
-      GST_VIDEO_INFO_PAR_D (&vagg_pad->info),
-      GST_VIDEO_INFO_PAR_N (&vagg->info), GST_VIDEO_INFO_PAR_D (&vagg->info));
+      GST_VIDEO_INFO_PAR_D (&vagg_pad->info), out_par_n, out_par_d);
 
   if (pad_height % dar_n == 0) {
     pad_width = gst_util_uint64_scale_int (pad_height, dar_n, dar_d);
@@ -787,17 +980,44 @@
 }
 
 static GstCaps *
-_update_caps (GstVideoAggregator * vagg, GstCaps * caps)
+_update_caps (GstVideoAggregator * vagg, GstCaps * caps, GstCaps * filter)
+{
+  GstCaps *ret;
+
+  ret =
+      GST_VIDEO_AGGREGATOR_CLASS (gst_gl_video_mixer_parent_class)->update_caps
+      (vagg, caps, NULL);
+
+  if (filter) {
+    GstCaps *tmp = gst_caps_intersect (ret, filter);
+    gst_caps_unref (ret);
+    ret = tmp;
+  }
+
+  return ret;
+}
+
+static GstCaps *
+_fixate_caps (GstVideoAggregator * vagg, GstCaps * caps)
 {
   GstGLVideoMixer *mix = GST_GL_VIDEO_MIXER (vagg);
-  GList *l;
-  gint best_width = -1, best_height = -1;
-  GstVideoInfo info;
+  gint best_width = 0, best_height = 0;
+  gint best_fps_n = 0, best_fps_d = 0;
+  gint par_n, par_d;
+  gdouble best_fps = 0.;
   GstCaps *ret = NULL;
-  int i;
+  GstStructure *s;
+  GList *l;
 
-  caps = gst_caps_make_writable (caps);
-  gst_video_info_from_caps (&info, caps);
+  ret = gst_caps_make_writable (caps);
+
+  /* we need this to calculate how large to make the output frame */
+  s = gst_caps_get_structure (ret, 0);
+  if (!gst_structure_has_field (s, "pixel-aspect-ratio")) {
+    gst_structure_set (s, "pixel-aspect-ratio", GST_TYPE_FRACTION, 1, 1, NULL);
+  }
+  gst_structure_fixate_field_nearest_fraction (s, "pixel-aspect-ratio", 1, 1);
+  gst_structure_get_fraction (s, "pixel-aspect-ratio", &par_n, &par_d);
 
   GST_OBJECT_LOCK (vagg);
   for (l = GST_ELEMENT (vagg)->sinkpads; l; l = l->next) {
@@ -805,8 +1025,12 @@
     GstGLVideoMixerPad *mixer_pad = GST_GL_VIDEO_MIXER_PAD (vaggpad);
     gint this_width, this_height;
     gint width, height;
+    gint fps_n, fps_d;
+    gdouble cur_fps;
 
-    _mixer_pad_get_output_size (mix, mixer_pad, &width, &height);
+    fps_n = GST_VIDEO_INFO_FPS_N (&vaggpad->info);
+    fps_d = GST_VIDEO_INFO_FPS_D (&vaggpad->info);
+    _mixer_pad_get_output_size (mix, mixer_pad, par_n, par_d, &width, &height);
 
     if (width == 0 || height == 0)
       continue;
@@ -818,20 +1042,33 @@
       best_width = this_width;
     if (best_height < this_height)
       best_height = this_height;
+
+    if (fps_d == 0)
+      cur_fps = 0.0;
+    else
+      gst_util_fraction_to_double (fps_n, fps_d, &cur_fps);
+
+    if (best_fps < cur_fps) {
+      best_fps = cur_fps;
+      best_fps_n = fps_n;
+      best_fps_d = fps_d;
+    }
   }
   GST_OBJECT_UNLOCK (vagg);
 
-  ret =
-      GST_VIDEO_AGGREGATOR_CLASS (gst_gl_video_mixer_parent_class)->update_caps
-      (vagg, caps);
-
-  for (i = 0; i < gst_caps_get_size (ret); i++) {
-    GstStructure *s = gst_caps_get_structure (ret, i);
-
-    gst_structure_set (s, "width", G_TYPE_INT, best_width, "height", G_TYPE_INT,
-        best_height, NULL);
+  if (best_fps_n <= 0 || best_fps_d <= 0 || best_fps == 0.0) {
+    best_fps_n = 25;
+    best_fps_d = 1;
+    best_fps = 25.0;
   }
 
+  s = gst_caps_get_structure (ret, 0);
+  gst_structure_fixate_field_nearest_int (s, "width", best_width);
+  gst_structure_fixate_field_nearest_int (s, "height", best_height);
+  gst_structure_fixate_field_nearest_fraction (s, "framerate", best_fps_n,
+      best_fps_d);
+  ret = gst_caps_fixate (ret);
+
   return ret;
 }
 
@@ -846,7 +1083,7 @@
     pad->vertex_buffer = 0;
   }
 
-  return FALSE;
+  return TRUE;
 }
 
 static void
@@ -864,6 +1101,11 @@
     video_mixer->vbo_indices = 0;
   }
 
+  if (video_mixer->checker_vbo) {
+    gl->DeleteBuffers (1, &video_mixer->checker_vbo);
+    video_mixer->checker_vbo = 0;
+  }
+
   gst_aggregator_iterate_sinkpads (GST_AGGREGATOR (video_mixer), _reset_pad_gl,
       NULL);
 }
@@ -874,8 +1116,6 @@
   GstGLVideoMixer *video_mixer = GST_GL_VIDEO_MIXER (mixer);
   GstGLContext *context = GST_GL_BASE_MIXER (mixer)->context;
 
-  video_mixer->input_frames = NULL;
-
   GST_DEBUG_OBJECT (mixer, "context:%p", context);
 
   if (video_mixer->shader)
@@ -905,13 +1145,10 @@
 }
 
 static gboolean
-gst_gl_video_mixer_process_textures (GstGLMixer * mix, GPtrArray * frames,
-    guint out_tex)
+gst_gl_video_mixer_process_textures (GstGLMixer * mix, guint out_tex)
 {
   GstGLVideoMixer *video_mixer = GST_GL_VIDEO_MIXER (mix);
 
-  video_mixer->input_frames = frames;
-
   gst_gl_context_use_fbo_v2 (GST_GL_BASE_MIXER (mix)->context,
       GST_VIDEO_INFO_WIDTH (&GST_VIDEO_AGGREGATOR (mix)->info),
       GST_VIDEO_INFO_HEIGHT (&GST_VIDEO_AGGREGATOR (mix)->info),
@@ -1017,6 +1254,123 @@
   return TRUE;
 }
 
+static guint
+_blend_equation_to_gl (GstGLVideoMixerBlendEquation equation)
+{
+  switch (equation) {
+    case GST_GL_VIDEO_MIXER_BLEND_EQUATION_ADD:
+      return GL_FUNC_ADD;
+    case GST_GL_VIDEO_MIXER_BLEND_EQUATION_SUBTRACT:
+      return GL_FUNC_SUBTRACT;
+    case GST_GL_VIDEO_MIXER_BLEND_EQUATION_REVERSE_SUBTRACT:
+      return GL_FUNC_REVERSE_SUBTRACT;
+    default:
+      g_assert_not_reached ();
+      return 0;
+  }
+}
+
+static guint
+_blend_function_to_gl (GstGLVideoMixerBlendFunction equation)
+{
+  switch (equation) {
+    case GST_GL_VIDEO_MIXER_BLEND_FUNCTION_ZERO:
+      return GL_ZERO;
+    case GST_GL_VIDEO_MIXER_BLEND_FUNCTION_ONE:
+      return GL_ONE;
+    case GST_GL_VIDEO_MIXER_BLEND_FUNCTION_SRC_COLOR:
+      return GL_SRC_COLOR;
+    case GST_GL_VIDEO_MIXER_BLEND_FUNCTION_ONE_MINUS_SRC_COLOR:
+      return GL_ONE_MINUS_SRC_COLOR;
+    case GST_GL_VIDEO_MIXER_BLEND_FUNCTION_DST_COLOR:
+      return GL_DST_COLOR;
+    case GST_GL_VIDEO_MIXER_BLEND_FUNCTION_ONE_MINUS_DST_COLOR:
+      return GL_ONE_MINUS_DST_COLOR;
+    case GST_GL_VIDEO_MIXER_BLEND_FUNCTION_SRC_ALPHA:
+      return GL_SRC_ALPHA;
+    case GST_GL_VIDEO_MIXER_BLEND_FUNCTION_ONE_MINUS_SRC_ALPHA:
+      return GL_ONE_MINUS_SRC_ALPHA;
+    case GST_GL_VIDEO_MIXER_BLEND_FUNCTION_DST_ALPHA:
+      return GL_DST_ALPHA;
+    case GST_GL_VIDEO_MIXER_BLEND_FUNCTION_ONE_MINUS_DST_ALPHA:
+      return GL_ONE_MINUS_DST_ALPHA;
+    case GST_GL_VIDEO_MIXER_BLEND_FUNCTION_CONSTANT_COLOR:
+      return GL_CONSTANT_COLOR;
+    case GST_GL_VIDEO_MIXER_BLEND_FUNCTION_ONE_MINUS_CONSTANT_COLOR:
+      return GL_ONE_MINUS_CONSTANT_COLOR;
+    case GST_GL_VIDEO_MIXER_BLEND_FUNCTION_CONSTANT_ALPHA:
+      return GL_CONSTANT_ALPHA;
+    case GST_GL_VIDEO_MIXER_BLEND_FUNCTION_ONE_MINUS_CONSTANT_ALPHA:
+      return GL_ONE_MINUS_CONSTANT_ALPHA;
+    case GST_GL_VIDEO_MIXER_BLEND_FUNCTION_SRC_ALPHA_SATURATE:
+      return GL_SRC_ALPHA_SATURATE;
+    default:
+      g_assert_not_reached ();
+      return 0;
+  }
+}
+
+static gboolean
+_set_blend_state (GstGLVideoMixer * video_mixer, GstGLVideoMixerPad * mix_pad)
+{
+  const GstGLFuncs *gl = GST_GL_BASE_MIXER (video_mixer)->context->gl_vtable;
+  gboolean require_separate = FALSE;
+  guint gl_func_src_rgb, gl_func_src_alpha, gl_func_dst_rgb, gl_func_dst_alpha;
+  guint gl_equation_rgb, gl_equation_alpha;
+
+  require_separate =
+      mix_pad->blend_equation_rgb != mix_pad->blend_equation_alpha
+      || mix_pad->blend_function_src_rgb != mix_pad->blend_function_src_alpha
+      || mix_pad->blend_function_dst_rgb != mix_pad->blend_function_dst_alpha;
+
+  if (require_separate && (!gl->BlendFuncSeparate
+          || !gl->BlendEquationSeparate)) {
+    GST_ERROR_OBJECT (mix_pad,
+        "separated blend equations/functions requested however "
+        "glBlendFuncSeparate or glBlendEquationSeparate not available");
+    return FALSE;
+  }
+
+  if (mix_pad->blend_function_dst_rgb ==
+      GST_GL_VIDEO_MIXER_BLEND_FUNCTION_SRC_ALPHA_SATURATE) {
+    GST_ERROR_OBJECT (mix_pad,
+        "Destination RGB blend function cannot be \'SRC_ALPHA_SATURATE\'");
+    return FALSE;
+  }
+
+  if (mix_pad->blend_function_dst_alpha ==
+      GST_GL_VIDEO_MIXER_BLEND_FUNCTION_SRC_ALPHA_SATURATE) {
+    GST_ERROR_OBJECT (mix_pad,
+        "Destination alpha blend function cannot be \'SRC_ALPHA_SATURATE\'");
+    return FALSE;
+  }
+
+  gl_equation_rgb = _blend_equation_to_gl (mix_pad->blend_equation_rgb);
+  gl_equation_alpha = _blend_equation_to_gl (mix_pad->blend_equation_alpha);
+
+  gl_func_src_rgb = _blend_function_to_gl (mix_pad->blend_function_src_rgb);
+  gl_func_src_alpha = _blend_function_to_gl (mix_pad->blend_function_src_alpha);
+  gl_func_dst_rgb = _blend_function_to_gl (mix_pad->blend_function_dst_rgb);
+  gl_func_dst_alpha = _blend_function_to_gl (mix_pad->blend_function_dst_alpha);
+
+  if (gl->BlendEquationSeparate)
+    gl->BlendEquationSeparate (gl_equation_rgb, gl_equation_alpha);
+  else
+    gl->BlendEquation (gl_equation_rgb);
+
+  if (gl->BlendFuncSeparate)
+    gl->BlendFuncSeparate (gl_func_src_rgb, gl_func_dst_rgb, gl_func_src_alpha,
+        gl_func_dst_alpha);
+  else
+    gl->BlendFunc (gl_func_src_rgb, gl_func_dst_rgb);
+
+  gl->BlendColor (mix_pad->blend_constant_color_red,
+      mix_pad->blend_constant_color_green, mix_pad->blend_constant_color_blue,
+      mix_pad->blend_constant_color_alpha);
+
+  return TRUE;
+}
+
 /* opengl scene, params: input texture (not the output mixer->texture) */
 static void
 gst_gl_video_mixer_callback (gpointer stuff)
@@ -1025,12 +1379,10 @@
   GstVideoAggregator *vagg = GST_VIDEO_AGGREGATOR (stuff);
   GstGLMixer *mixer = GST_GL_MIXER (video_mixer);
   GstGLFuncs *gl = GST_GL_BASE_MIXER (mixer)->context->gl_vtable;
-
   GLint attr_position_loc = 0;
   GLint attr_texture_loc = 0;
   guint out_width, out_height;
-
-  guint count = 0;
+  GList *walk;
 
   out_width = GST_VIDEO_INFO_WIDTH (&vagg->info);
   out_height = GST_VIDEO_INFO_HEIGHT (&vagg->info);
@@ -1059,9 +1411,11 @@
 
   gl->Enable (GL_BLEND);
 
-  while (count < video_mixer->input_frames->len) {
-    GstGLMixerFrameData *frame;
-    GstGLVideoMixerPad *pad;
+  GST_OBJECT_LOCK (video_mixer);
+  walk = GST_ELEMENT (video_mixer)->sinkpads;
+  while (walk) {
+    GstGLMixerPad *mix_pad = walk->data;
+    GstGLVideoMixerPad *pad = walk->data;
     GstVideoInfo *v_info;
     guint in_tex;
     guint in_width, in_height;
@@ -1075,26 +1429,25 @@
     };
     /* *INDENT-ON* */
 
-    frame = g_ptr_array_index (video_mixer->input_frames, count);
-    if (!frame) {
-      GST_DEBUG ("skipping texture, null frame");
-      count++;
-      continue;
-    }
-    pad = (GstGLVideoMixerPad *) frame->pad;
     v_info = &GST_VIDEO_AGGREGATOR_PAD (pad)->info;
     in_width = GST_VIDEO_INFO_WIDTH (v_info);
     in_height = GST_VIDEO_INFO_HEIGHT (v_info);
 
-    if (!frame->texture || in_width <= 0 || in_height <= 0
+    if (!mix_pad->current_texture || in_width <= 0 || in_height <= 0
         || pad->alpha == 0.0f) {
-      GST_DEBUG ("skipping texture:%u frame:%p width:%u height:%u alpha:%f",
-          frame->texture, frame, in_width, in_height, pad->alpha);
-      count++;
+      GST_DEBUG ("skipping texture:%u pad:%p width:%u height:%u alpha:%f",
+          mix_pad->current_texture, pad, in_width, in_height, pad->alpha);
+      walk = g_list_next (walk);
       continue;
     }
 
-    in_tex = frame->texture;
+    if (!_set_blend_state (video_mixer, pad)) {
+      GST_FIXME_OBJECT (pad, "skipping due to incorrect blend parameters");
+      walk = g_list_next (walk);
+      continue;
+    }
+
+    in_tex = mix_pad->current_texture;
 
     _init_vbo_indices (video_mixer);
 
@@ -1102,7 +1455,9 @@
       gint pad_width, pad_height;
       gfloat w, h;
 
-      _mixer_pad_get_output_size (video_mixer, pad, &pad_width, &pad_height);
+      _mixer_pad_get_output_size (video_mixer, pad,
+          GST_VIDEO_INFO_PAR_N (&vagg->info),
+          GST_VIDEO_INFO_PAR_D (&vagg->info), &pad_width, &pad_height);
 
       w = ((gfloat) pad_width / (gfloat) out_width);
       h = ((gfloat) pad_height / (gfloat) out_height);
@@ -1135,9 +1490,6 @@
     }
     gl->BindBuffer (GL_ELEMENT_ARRAY_BUFFER, video_mixer->vbo_indices);
 
-    gl->BlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
-    gl->BlendEquation (GL_FUNC_ADD);
-
     gl->ActiveTexture (GL_TEXTURE0);
     gl->BindTexture (GL_TEXTURE_2D, in_tex);
     gst_gl_shader_set_uniform_1i (video_mixer->shader, "texture", 0);
@@ -1154,8 +1506,9 @@
 
     gl->DrawElements (GL_TRIANGLES, 6, GL_UNSIGNED_SHORT, 0);
 
-    ++count;
+    walk = g_list_next (walk);
   }
+  GST_OBJECT_UNLOCK (video_mixer);
 
   gl->DisableVertexAttribArray (attr_position_loc);
   gl->DisableVertexAttribArray (attr_texture_loc);
diff --git a/ext/gl/gstglvideomixer.h b/ext/gl/gstglvideomixer.h
index 0d0252b..a0776fd 100644
--- a/ext/gl/gstglvideomixer.h
+++ b/ext/gl/gstglvideomixer.h
@@ -53,6 +53,66 @@
 }
 GstGLVideoMixerBackground;
 
+/**
+ * GstGLVideoMixerBlendEquation:
+ * @GST_GL_VIDEO_MIXER_BLEND_EQUATION_ADD: Add the two results.
+ * @GST_GL_VIDEO_MIXER_BLEND_EQUATION_SUBTRACT: Subtract component-wise the destination from the source (S - D).
+ * @GST_GL_VIDEO_MIXER_BLEND_EQUATION_REVERSE_SUBTRACT: Subtract component-wise the source from the destination (D - S).
+ *
+ * The blending equation to use.  See the opengl specificition for
+ * glBlendEquationSeparate
+ */
+typedef enum
+{
+  GST_GL_VIDEO_MIXER_BLEND_EQUATION_ADD,
+  GST_GL_VIDEO_MIXER_BLEND_EQUATION_SUBTRACT,
+  GST_GL_VIDEO_MIXER_BLEND_EQUATION_REVERSE_SUBTRACT,
+}
+GstGLVideoMixerBlendEquation;
+
+/**
+ * GstGLVideoMixerBlendFunction:
+ * @GST_GL_VIDEO_MIXER_BLEND_FUNCTION_ZERO: All components are zero
+ * @GST_GL_VIDEO_MIXER_BLEND_FUNCTION_ONE: All components are one
+ * @GST_GL_VIDEO_MIXER_BLEND_FUNCTION_SRC_COLOR: Use the source color/alpha
+ * @GST_GL_VIDEO_MIXER_BLEND_FUNCTION_ONE_MINUS_SRC_COLOR: One minus the source color/alpha
+ * @GST_GL_VIDEO_MIXER_BLEND_FUNCTION_DST_COLOR: Use the destination color/alpha
+ * @GST_GL_VIDEO_MIXER_BLEND_FUNCTION_ONE_MINUS_DST_COLOR: One minus the destination color/alpha
+ * @GST_GL_VIDEO_MIXER_BLEND_FUNCTION_SRC_ALPHA: All components are the source alpha
+ * @GST_GL_VIDEO_MIXER_BLEND_FUNCTION_ONE_MINUS_SRC_ALPHA: All components are one minus the source alpha
+ * @GST_GL_VIDEO_MIXER_BLEND_FUNCTION_DST_ALPHA: All components are the destination alpha
+ * @GST_GL_VIDEO_MIXER_BLEND_FUNCTION_ONE_MINUS_DST_ALPHA: All components are one minus the destination alpha
+ * @GST_GL_VIDEO_MIXER_BLEND_FUNCTION_CONSTANT_COLOR: Use the constant color/alpha
+ * @GST_GL_VIDEO_MIXER_BLEND_FUNCTION_ONE_MINUS_CONSTANT_COLOR: Use one minus the constant color/alpha
+ * @GST_GL_VIDEO_MIXER_BLEND_FUNCTION_CONSTANT_ALPHA: All components are the constant alpha
+ * @GST_GL_VIDEO_MIXER_BLEND_FUNCTION_ONE_MINUS_CONSTANT_COLOR: All components are one minus the constant alpha
+ * @GST_GL_VIDEO_MIXER_BLEND_FUNCTION_SRC_ALPHA_SATURATE: All color components
+ *     are the minimum of source alpha and one minus the destination alpha.
+ *     Alpha is equal to one.
+ *
+ * The blending function to use.  See the opengl specificition for
+ * glBlendFuncSeparate
+ */
+typedef enum
+{
+  GST_GL_VIDEO_MIXER_BLEND_FUNCTION_ZERO,
+  GST_GL_VIDEO_MIXER_BLEND_FUNCTION_ONE,
+  GST_GL_VIDEO_MIXER_BLEND_FUNCTION_SRC_COLOR,
+  GST_GL_VIDEO_MIXER_BLEND_FUNCTION_ONE_MINUS_SRC_COLOR,
+  GST_GL_VIDEO_MIXER_BLEND_FUNCTION_DST_COLOR,
+  GST_GL_VIDEO_MIXER_BLEND_FUNCTION_ONE_MINUS_DST_COLOR,
+  GST_GL_VIDEO_MIXER_BLEND_FUNCTION_SRC_ALPHA,
+  GST_GL_VIDEO_MIXER_BLEND_FUNCTION_ONE_MINUS_SRC_ALPHA,
+  GST_GL_VIDEO_MIXER_BLEND_FUNCTION_DST_ALPHA,
+  GST_GL_VIDEO_MIXER_BLEND_FUNCTION_ONE_MINUS_DST_ALPHA,
+  GST_GL_VIDEO_MIXER_BLEND_FUNCTION_CONSTANT_COLOR,
+  GST_GL_VIDEO_MIXER_BLEND_FUNCTION_ONE_MINUS_CONSTANT_COLOR,
+  GST_GL_VIDEO_MIXER_BLEND_FUNCTION_CONSTANT_ALPHA,
+  GST_GL_VIDEO_MIXER_BLEND_FUNCTION_ONE_MINUS_CONSTANT_ALPHA,
+  GST_GL_VIDEO_MIXER_BLEND_FUNCTION_SRC_ALPHA_SATURATE,
+}
+GstGLVideoMixerBlendFunction;
+
 struct _GstGLVideoMixer
 {
     GstGLMixer mixer;
@@ -61,7 +121,6 @@
 
     GstGLShader *shader;
     GstGLShader *checker;
-    GPtrArray *input_frames;
 
     GLuint vao;
     GLuint vbo_indices;
diff --git a/ext/gl/gstopengl.c b/ext/gl/gstopengl.c
index 1fad0a2..50676c4 100644
--- a/ext/gl/gstopengl.c
+++ b/ext/gl/gstopengl.c
@@ -47,6 +47,7 @@
 #include "gstgluploadelement.h"
 #include "gstgldownloadelement.h"
 #include "gstglcolorconvertelement.h"
+#include "gstglcolorbalance.h"
 #include "gstglfilterbin.h"
 #include "gstglsinkbin.h"
 #include "gstglsrcbin.h"
@@ -60,9 +61,11 @@
 #include "gstglfilterapp.h"
 #include "gstglstereosplit.h"
 #include "gstglstereomix.h"
+#include "gstglviewconvert.h"
 
 #if HAVE_GRAPHENE
 #include "gstgltransformation.h"
+#include "gstglvideoflip.h"
 #endif
 #if HAVE_JPEG
 #if HAVE_PNG
@@ -75,7 +78,6 @@
 #include "gstglfilterglass.h"
 /* #include "gstglfilterreflectedscreen.h" */
 #include "gstgldeinterlace.h"
-#include "gstglviewconvert.h"
 #include "gstglmosaic.h"
 #if HAVE_PNG
 #include "gstgldifferencematte.h"
@@ -140,6 +142,11 @@
     return FALSE;
   }
 
+  if (!gst_element_register (plugin, "glcolorbalance",
+          GST_RANK_NONE, GST_TYPE_GL_COLOR_BALANCE)) {
+    return FALSE;
+  }
+
   if (!gst_element_register (plugin, "glfilterbin",
           GST_RANK_NONE, GST_TYPE_GL_FILTER_BIN)) {
     return FALSE;
@@ -169,6 +176,11 @@
           GST_RANK_NONE, GST_TYPE_GL_TRANSFORMATION)) {
     return FALSE;
   }
+
+  if (!gst_element_register (plugin, "glvideoflip",
+          GST_RANK_NONE, GST_TYPE_GL_VIDEO_FLIP)) {
+    return FALSE;
+  }
 #endif
 
   if (!gst_gl_effects_register_filters (plugin, GST_RANK_NONE)) {
@@ -199,6 +211,21 @@
           GST_RANK_NONE, GST_TYPE_GL_FILTER_APP)) {
     return FALSE;
   }
+
+  if (!gst_element_register (plugin, "glviewconvert",
+          GST_RANK_NONE, GST_TYPE_GL_VIEW_CONVERT_ELEMENT)) {
+    return FALSE;
+  }
+
+  if (!gst_element_register (plugin, "glstereosplit",
+          GST_RANK_NONE, GST_TYPE_GL_STEREOSPLIT)) {
+    return FALSE;
+  }
+
+  if (!gst_element_register (plugin, "glstereomix",
+          GST_RANK_NONE, GST_TYPE_GL_STEREO_MIX)) {
+    return FALSE;
+  }
 #if HAVE_JPEG
 #if HAVE_PNG
   if (!gst_element_register (plugin, "gloverlay",
@@ -228,11 +255,6 @@
     return FALSE;
   }
 
-  if (!gst_element_register (plugin, "glviewconvert",
-          GST_RANK_NONE, GST_TYPE_GL_VIEW_CONVERT_ELEMENT)) {
-    return FALSE;
-  }
-
   if (!gst_element_register (plugin, "glmosaic",
           GST_RANK_NONE, GST_TYPE_GL_MOSAIC)) {
     return FALSE;
@@ -249,14 +271,6 @@
   }
 #endif
 #endif /* HAVE_PNG */
-  if (!gst_element_register (plugin, "glstereosplit",
-          GST_RANK_NONE, GST_TYPE_GL_STEREOSPLIT)) {
-    return FALSE;
-  }
-  if (!gst_element_register (plugin, "glstereomix",
-          GST_RANK_NONE, GST_TYPE_GL_STEREO_MIX)) {
-    return FALSE;
-  }
 #endif /* GST_GL_HAVE_OPENGL */
 #if GST_GL_HAVE_WINDOW_COCOA
   if (!gst_element_register (plugin, "caopengllayersink",
diff --git a/ext/gme/Makefile.in b/ext/gme/Makefile.in
index 9ab8ce6..a0864b4 100644
--- a/ext/gme/Makefile.in
+++ b/ext/gme/Makefile.in
@@ -116,16 +116,15 @@
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
 	$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
-	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gsettings.m4 \
-	$(top_srcdir)/m4/gst-fionread.m4 $(top_srcdir)/m4/gst-sdl.m4 \
-	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
-	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
-	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libgcrypt.m4 \
-	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
-	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
-	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
-	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
-	$(top_srcdir)/configure.ac
+	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gst-fionread.m4 \
+	$(top_srcdir)/m4/gst-sdl.m4 $(top_srcdir)/m4/iconv.m4 \
+	$(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \
+	$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
+	$(top_srcdir)/m4/libgcrypt.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
+	$(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \
@@ -274,6 +273,8 @@
 CLUTTER_X11_LIBS = @CLUTTER_X11_LIBS@
 CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
+CUDA_CFLAGS = @CUDA_CFLAGS@
+CUDA_LIBS = @CUDA_LIBS@
 CURL_CFLAGS = @CURL_CFLAGS@
 CURL_LIBS = @CURL_LIBS@
 CXX = @CXX@
@@ -311,6 +312,8 @@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
+EGL_CFLAGS = @EGL_CFLAGS@
+EGL_LIBS = @EGL_LIBS@
 EGREP = @EGREP@
 ERROR_CFLAGS = @ERROR_CFLAGS@
 ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
@@ -319,7 +322,6 @@
 EXIF_CFLAGS = @EXIF_CFLAGS@
 EXIF_LIBS = @EXIF_LIBS@
 FAAC_LIBS = @FAAC_LIBS@
-FAAD_IS_NEAAC = @FAAD_IS_NEAAC@
 FAAD_LIBS = @FAAD_LIBS@
 FFLAGS = @FFLAGS@
 FGREP = @FGREP@
@@ -338,8 +340,9 @@
 GIO_LIBS = @GIO_LIBS@
 GIO_UNIX_CFLAGS = @GIO_UNIX_CFLAGS@
 GIO_UNIX_LIBS = @GIO_UNIX_LIBS@
+GLES2_CFLAGS = @GLES2_CFLAGS@
+GLES2_LIBS = @GLES2_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
-GLIB_COMPILE_SCHEMAS = @GLIB_COMPILE_SCHEMAS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
@@ -356,16 +359,17 @@
 GMODULE_NO_EXPORT_LIBS = @GMODULE_NO_EXPORT_LIBS@
 GMSGFMT = @GMSGFMT@
 GMSGFMT_015 = @GMSGFMT_015@
+GNUSTL_CFLAGS = @GNUSTL_CFLAGS@
+GNUSTL_LIBS = @GNUSTL_LIBS@
 GRAPHENE_CFLAGS = @GRAPHENE_CFLAGS@
 GRAPHENE_LIBS = @GRAPHENE_LIBS@
 GREP = @GREP@
-GSETTINGS_CFLAGS = @GSETTINGS_CFLAGS@
-GSETTINGS_DISABLE_SCHEMAS_COMPILE = @GSETTINGS_DISABLE_SCHEMAS_COMPILE@
-GSETTINGS_LIBS = @GSETTINGS_LIBS@
 GSM_LIBS = @GSM_LIBS@
 GSTPB_PLUGINS_DIR = @GSTPB_PLUGINS_DIR@
 GSTPB_PREFIX = @GSTPB_PREFIX@
 GST_AGE = @GST_AGE@
+GST_ALLOCATORS_CFLAGS = @GST_ALLOCATORS_CFLAGS@
+GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
 GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
 GST_API_VERSION = @GST_API_VERSION@
 GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
@@ -391,6 +395,8 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PBUTILS_CFLAGS = @GST_PBUTILS_CFLAGS@
+GST_PBUTILS_LIBS = @GST_PBUTILS_LIBS@
 GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BAD_CFLAGS = @GST_PLUGINS_BAD_CFLAGS@
@@ -416,6 +422,8 @@
 GST_PREFIX = @GST_PREFIX@
 GST_REVISION = @GST_REVISION@
 GST_TOOLS_DIR = @GST_TOOLS_DIR@
+GST_VIDEO_CFLAGS = @GST_VIDEO_CFLAGS@
+GST_VIDEO_LIBS = @GST_VIDEO_LIBS@
 GTK3_CFLAGS = @GTK3_CFLAGS@
 GTK3_GL_CFLAGS = @GTK3_GL_CFLAGS@
 GTK3_GL_LIBS = @GTK3_GL_LIBS@
@@ -517,6 +525,7 @@
 LTLIBICONV = @LTLIBICONV@
 LTLIBINTL = @LTLIBINTL@
 LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
 MANIFEST_TOOL = @MANIFEST_TOOL@
@@ -530,8 +539,6 @@
 MODPLUG_LIBS = @MODPLUG_LIBS@
 MPEG2ENC_CFLAGS = @MPEG2ENC_CFLAGS@
 MPEG2ENC_LIBS = @MPEG2ENC_LIBS@
-MPG123_CFLAGS = @MPG123_CFLAGS@
-MPG123_LIBS = @MPG123_LIBS@
 MPLEX_CFLAGS = @MPLEX_CFLAGS@
 MPLEX_LDFLAGS = @MPLEX_LDFLAGS@
 MPLEX_LIBS = @MPLEX_LIBS@
@@ -547,6 +554,8 @@
 NETTLE_LIBS = @NETTLE_LIBS@
 NM = @NM@
 NMEDIT = @NMEDIT@
+NVENCODE_CFLAGS = @NVENCODE_CFLAGS@
+NVENCODE_LIBS = @NVENCODE_LIBS@
 OBJC = @OBJC@
 OBJCDEPMODE = @OBJCDEPMODE@
 OBJCFLAGS = @OBJCFLAGS@
@@ -604,16 +613,18 @@
 PYTHON_PLATFORM = @PYTHON_PLATFORM@
 PYTHON_PREFIX = @PYTHON_PREFIX@
 PYTHON_VERSION = @PYTHON_VERSION@
+QT_ANDROID_CFLAGS = @QT_ANDROID_CFLAGS@
+QT_ANDROID_LIBS = @QT_ANDROID_LIBS@
 QT_CFLAGS = @QT_CFLAGS@
 QT_LIBS = @QT_LIBS@
+QT_MAC_CFLAGS = @QT_MAC_CFLAGS@
+QT_MAC_LIBS = @QT_MAC_LIBS@
 QT_WAYLAND_CFLAGS = @QT_WAYLAND_CFLAGS@
 QT_WAYLAND_LIBS = @QT_WAYLAND_LIBS@
 QT_X11_CFLAGS = @QT_X11_CFLAGS@
 QT_X11_LIBS = @QT_X11_LIBS@
 RANLIB = @RANLIB@
 RCC = @RCC@
-RSVG_2_36_2_CFLAGS = @RSVG_2_36_2_CFLAGS@
-RSVG_2_36_2_LIBS = @RSVG_2_36_2_LIBS@
 RSVG_CFLAGS = @RSVG_CFLAGS@
 RSVG_LIBS = @RSVG_LIBS@
 RTMP_CFLAGS = @RTMP_CFLAGS@
@@ -665,6 +676,7 @@
 VOAACENC_LIBS = @VOAACENC_LIBS@
 VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
 VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VULKAN_LIBS = @VULKAN_LIBS@
 WARNING_CFLAGS = @WARNING_CFLAGS@
 WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
 WARNING_OBJCFLAGS = @WARNING_OBJCFLAGS@
@@ -675,6 +687,7 @@
 WAYLAND_LIBS = @WAYLAND_LIBS@
 WEBP_CFLAGS = @WEBP_CFLAGS@
 WEBP_LIBS = @WEBP_LIBS@
+WGET = @WGET@
 WILDMIDI_CFLAGS = @WILDMIDI_CFLAGS@
 WILDMIDI_LIBS = @WILDMIDI_LIBS@
 WINKS_LIBS = @WINKS_LIBS@
@@ -684,6 +697,8 @@
 X11_LIBS = @X11_LIBS@
 X265_CFLAGS = @X265_CFLAGS@
 X265_LIBS = @X265_LIBS@
+XCB_CFLAGS = @XCB_CFLAGS@
+XCB_LIBS = @XCB_LIBS@
 XCOMPOSITE_CFLAGS = @XCOMPOSITE_CFLAGS@
 XCOMPOSITE_LIBS = @XCOMPOSITE_LIBS@
 XGETTEXT = @XGETTEXT@
@@ -721,7 +736,6 @@
 docdir = @docdir@
 dvidir = @dvidir@
 exec_prefix = @exec_prefix@
-gsettingsschemadir = @gsettingsschemadir@
 host = @host@
 host_alias = @host_alias@
 host_cpu = @host_cpu@
diff --git a/ext/gsettings/Makefile.am b/ext/gsettings/Makefile.am
deleted file mode 100644
index 4cba8ac..0000000
--- a/ext/gsettings/Makefile.am
+++ /dev/null
@@ -1,41 +0,0 @@
-gsettings_SCHEMAS = org.freedesktop.gstreamer-@GST_API_VERSION@.default-elements.gschema.xml
-
-org.freedesktop.gstreamer-@GST_API_VERSION@.default-elements.gschema.xml: org.freedesktop.gstreamer.default-elements.gschema.xml
-	cp org.freedesktop.gstreamer.default-elements.gschema.xml org.freedesktop.gstreamer-@GST_API_VERSION@.default-elements.gschema.xml
-
-if USE_GSETTINGS
-@GSETTINGS_RULES@
-endif
-
-plugin_LTLIBRARIES = libgstgsettingselements.la
-
-libgstgsettingselements_la_SOURCES = \
-        gstgsettingsaudiosink.c \
-        gstgsettingsaudiosrc.c \
-        gstgsettingsvideosink.c \
-        gstgsettingsvideosrc.c \
-        gstswitchsink.c \
-        gstswitchsrc.c \
-	plugin.c
-
-libgstgsettingselements_la_CFLAGS = $(GST_PLUGINS_BAD_CFLAGS) $(GST_CFLAGS) $(GSETTINGS_CFLAGS) $(DIR_CFLAGS) \
-	-DGstSwitchSrc=GstGSettingsSwitchSrc \
-	-DGstSwitchSrcClass=GstGSettingsSwitchSrcClass \
-	-DGstSwitchSink=GstGSettingsSwitchSink \
-	-DGstSwitchSinkClass=GstGSettingsSwitchSinkClass
-libgstgsettingselements_la_LIBADD = $(GST_LIBS) $(GSETTINGS_LIBS)
-libgstgsettingselements_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS)
-libgstgsettingselements_la_LIBTOOLFLAGS = $(GST_PLUGIN_LIBTOOLFLAGS)
-
-noinst_HEADERS = \
-        gstgsettingsaudiosink.h \
-        gstgsettingsaudiosrc.h \
-        gstgsettingsvideosink.h \
-        gstgsettingsvideosrc.h \
-        gstswitchsink.h \
-        gstswitchsrc.h \
-	gstgsettings.h
-
-EXTRA_DIST = org.freedesktop.gstreamer.default-elements.gschema.xml
-
-CLEANFILES = $(gsettings_SCHEMAS)
diff --git a/ext/gsettings/gstgsettings.h b/ext/gsettings/gstgsettings.h
deleted file mode 100644
index a49aee7..0000000
--- a/ext/gsettings/gstgsettings.h
+++ /dev/null
@@ -1,40 +0,0 @@
-/* GStreamer
- * Copyright (C) 2010 Sebastian Dröge <sebastian.droege@collabora.co.uk>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-#ifndef __GST_GSETTINGS_H__
-#define __GST_GSETTINGS_H__
-
-#include <gst/gst.h>
-
-G_BEGIN_DECLS
-
-#define GST_GSETTINGS_SCHEMA "org.freedesktop.gstreamer-0.10.default-elements"
-#define GST_GSETTINGS_PATH "/desktop/gstreamer/0.10/default-elements/"
-
-#define GST_GSETTINGS_KEY_SOUNDS_AUDIOSINK "sounds-audiosink"
-#define GST_GSETTINGS_KEY_MUSIC_AUDIOSINK "music-audiosink"
-#define GST_GSETTINGS_KEY_CHAT_AUDIOSINK "chat-audiosink"
-#define GST_GSETTINGS_KEY_AUDIOSRC "audiosrc"
-#define GST_GSETTINGS_KEY_VIDEOSINK "videosink"
-#define GST_GSETTINGS_KEY_VIDEOSRC "videosrc"
-#define GST_GSETTINGS_KEY_VISUALIZATION "visualization"
-
-G_END_DECLS
-
-#endif /* __GST_GSETTINGS_H__ */
diff --git a/ext/gsettings/gstgsettingsaudiosink.c b/ext/gsettings/gstgsettingsaudiosink.c
deleted file mode 100644
index f080cb5..0000000
--- a/ext/gsettings/gstgsettingsaudiosink.c
+++ /dev/null
@@ -1,355 +0,0 @@
-/* GStreamer
- * Copyright (C) 2010 Sebastian Dröge <sebastian.droege@collabora.co.uk>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-/**
- * SECTION:element-gsettingsaudiosink
- *
- * This element outputs sound to the audiosink that has been configured in
- * GSettings by the user.
- * 
- * <refsect2>
- * <title>Example launch line</title>
- * |[
- * gst-launch audiotestsrc ! audioconvert ! audioresample ! gsettingsaudiosink
- * ]| Play on configured audiosink
- * </refsect2>
- */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <gst/gst.h>
-#include <gst/glib-compat-private.h>
-#include <string.h>
-
-#include "gstgsettingsaudiosink.h"
-#include "gstgsettings.h"
-
-#define GST_TYPE_GSETTINGS_AUDIOSINK_PROFILE (gst_gsettings_audiosink_profile_get_type())
-static GType
-gst_gsettings_audiosink_profile_get_type (void)
-{
-  static GType gsettings_profile_type = 0;
-  static const GEnumValue gsettings_profiles[] = {
-    {GST_GSETTINGS_AUDIOSINK_PROFILE_SOUNDS, "Sound Events", "sounds"},
-    {GST_GSETTINGS_AUDIOSINK_PROFILE_MUSIC, "Music and Movies (default)",
-        "music"},
-    {GST_GSETTINGS_AUDIOSINK_PROFILE_CHAT, "Audio/Video Conferencing", "chat"},
-    {0, NULL, NULL}
-  };
-
-  if (!gsettings_profile_type) {
-    gsettings_profile_type =
-        g_enum_register_static ("GstGSettingsAudioSinkProfile",
-        gsettings_profiles);
-  }
-  return gsettings_profile_type;
-}
-
-enum
-{
-  PROP_0,
-  PROP_PROFILE
-};
-
-GST_BOILERPLATE (GstGSettingsAudioSink, gst_gsettings_audio_sink, GstSwitchSink,
-    GST_TYPE_SWITCH_SINK);
-
-static gboolean
-gst_gsettings_audio_sink_change_child (GstGSettingsAudioSink * sink)
-{
-  const gchar *key = NULL;
-  gchar *new_string;
-  GError *err = NULL;
-  GstElement *new_kid;
-
-  GST_OBJECT_LOCK (sink);
-  switch (sink->profile) {
-    case GST_GSETTINGS_AUDIOSINK_PROFILE_SOUNDS:
-      key = GST_GSETTINGS_KEY_SOUNDS_AUDIOSINK;
-      break;
-    case GST_GSETTINGS_AUDIOSINK_PROFILE_MUSIC:
-      key = GST_GSETTINGS_KEY_MUSIC_AUDIOSINK;
-      break;
-    case GST_GSETTINGS_AUDIOSINK_PROFILE_CHAT:
-      key = GST_GSETTINGS_KEY_CHAT_AUDIOSINK;
-      break;
-    default:
-      break;
-  }
-
-  new_string = g_settings_get_string (sink->settings, key);
-
-  if (new_string != NULL && sink->gsettings_str != NULL &&
-      (strlen (new_string) == 0 ||
-          strcmp (sink->gsettings_str, new_string) == 0)) {
-    g_free (new_string);
-    GST_DEBUG_OBJECT (sink,
-        "GSettings key was updated, but it didn't change. Ignoring");
-    GST_OBJECT_UNLOCK (sink);
-    return TRUE;
-  }
-  GST_OBJECT_UNLOCK (sink);
-
-  GST_DEBUG_OBJECT (sink, "GSettings key changed from '%s' to '%s'",
-      GST_STR_NULL (sink->gsettings_str), GST_STR_NULL (new_string));
-
-  if (new_string) {
-    new_kid = gst_parse_bin_from_description (new_string, TRUE, &err);
-    if (err) {
-      GST_ERROR_OBJECT (sink, "error creating bin '%s': %s", new_string,
-          err->message);
-      g_error_free (err);
-    }
-  } else {
-    new_kid = NULL;
-  }
-
-  if (new_kid == NULL) {
-    GST_ELEMENT_ERROR (sink, LIBRARY, SETTINGS, (NULL),
-        ("Failed to render audio sink from GSettings"));
-    goto fail;
-  }
-
-  if (!gst_switch_sink_set_child (GST_SWITCH_SINK (sink), new_kid)) {
-    GST_WARNING_OBJECT (sink, "Failed to update child element");
-    goto fail;
-  }
-
-  g_free (sink->gsettings_str);
-  sink->gsettings_str = new_string;
-
-  return TRUE;
-
-fail:
-  g_free (new_string);
-  return FALSE;
-}
-
-static gboolean
-gst_gsettings_audio_sink_switch_profile (GstGSettingsAudioSink * sink,
-    GstGSettingsAudioSinkProfile profile)
-{
-  if (sink->settings == NULL)
-    return TRUE;
-
-  GST_OBJECT_LOCK (sink);
-  sink->profile = profile;
-  GST_OBJECT_UNLOCK (sink);
-
-  return gst_gsettings_audio_sink_change_child (sink);
-}
-
-static void
-on_changed (GSettings * settings, gchar * key, GstGSettingsAudioSink * sink)
-{
-  gboolean changed = FALSE;
-
-  if (!g_str_has_suffix (key, "audiosink"))
-    return;
-
-  GST_OBJECT_LOCK (sink);
-  if ((sink->profile == GST_GSETTINGS_AUDIOSINK_PROFILE_SOUNDS &&
-          g_str_equal (key, GST_GSETTINGS_KEY_SOUNDS_AUDIOSINK)) ||
-      (sink->profile == GST_GSETTINGS_AUDIOSINK_PROFILE_MUSIC &&
-          g_str_equal (key, GST_GSETTINGS_KEY_MUSIC_AUDIOSINK)) ||
-      (sink->profile == GST_GSETTINGS_AUDIOSINK_PROFILE_CHAT &&
-          g_str_equal (key, GST_GSETTINGS_KEY_CHAT_AUDIOSINK)))
-    changed = TRUE;
-  GST_OBJECT_UNLOCK (sink);
-
-  if (changed)
-    gst_gsettings_audio_sink_change_child (sink);
-}
-
-static gboolean
-gst_gsettings_audio_sink_start (GstGSettingsAudioSink * sink)
-{
-  GError *err = NULL;
-  GThread *thread;
-
-  sink->loop = g_main_loop_new (sink->context, FALSE);
-
-  thread =
-      g_thread_create ((GThreadFunc) g_main_loop_run, sink->loop, FALSE, &err);
-  if (!thread) {
-    GST_ELEMENT_ERROR (sink, CORE, STATE_CHANGE, (NULL),
-        ("Failed to create new thread: %s", err->message));
-    g_error_free (err);
-    g_main_loop_unref (sink->loop);
-    sink->loop = NULL;
-    return FALSE;
-  }
-
-  g_main_context_push_thread_default (sink->context);
-  sink->settings = g_settings_new (GST_GSETTINGS_SCHEMA);
-  sink->changed_id =
-      g_signal_connect_data (G_OBJECT (sink->settings), "changed",
-      G_CALLBACK (on_changed), gst_object_ref (sink),
-      (GClosureNotify) gst_object_unref, 0);
-  g_main_context_pop_thread_default (sink->context);
-
-  return TRUE;
-}
-
-static gboolean
-gst_gsettings_audio_sink_reset (GstGSettingsAudioSink * sink)
-{
-  gst_switch_sink_set_child (GST_SWITCH_SINK (sink), NULL);
-
-  if (sink->changed_id) {
-    g_signal_handler_disconnect (sink->settings, sink->changed_id);
-    sink->changed_id = 0;
-  }
-
-  if (sink->loop) {
-    g_main_loop_quit (sink->loop);
-    g_main_loop_unref (sink->loop);
-    sink->loop = NULL;
-  }
-
-  if (sink->settings) {
-    g_object_unref (sink->settings);
-    sink->settings = NULL;
-  }
-
-  GST_OBJECT_LOCK (sink);
-  g_free (sink->gsettings_str);
-  sink->gsettings_str = NULL;
-  GST_OBJECT_UNLOCK (sink);
-
-  return TRUE;
-}
-
-static void
-gst_gsettings_audio_sink_finalize (GObject * object)
-{
-  GstGSettingsAudioSink *sink = GST_GSETTINGS_AUDIO_SINK (object);
-
-  g_free (sink->gsettings_str);
-  g_main_context_unref (sink->context);
-
-  GST_CALL_PARENT (G_OBJECT_CLASS, finalize, ((GObject *) (sink)));
-}
-
-static void
-gst_gsettings_audio_sink_set_property (GObject * object, guint prop_id,
-    const GValue * value, GParamSpec * pspec)
-{
-  GstGSettingsAudioSink *sink = GST_GSETTINGS_AUDIO_SINK (object);
-
-  switch (prop_id) {
-    case PROP_PROFILE:
-      gst_gsettings_audio_sink_switch_profile (sink, g_value_get_enum (value));
-      break;
-    default:
-      break;
-  }
-}
-
-static void
-gst_gsettings_audio_sink_get_property (GObject * object, guint prop_id,
-    GValue * value, GParamSpec * pspec)
-{
-  GstGSettingsAudioSink *sink = GST_GSETTINGS_AUDIO_SINK (object);
-
-  switch (prop_id) {
-    case PROP_PROFILE:
-      g_value_set_enum (value, sink->profile);
-      break;
-    default:
-      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
-      break;
-  }
-}
-
-static GstStateChangeReturn
-gst_gsettings_audio_sink_change_state (GstElement * element,
-    GstStateChange transition)
-{
-  GstStateChangeReturn ret = GST_STATE_CHANGE_SUCCESS;
-  GstGSettingsAudioSink *sink = GST_GSETTINGS_AUDIO_SINK (element);
-
-  switch (transition) {
-    case GST_STATE_CHANGE_NULL_TO_READY:
-      if (!gst_gsettings_audio_sink_start (sink))
-        return GST_STATE_CHANGE_FAILURE;
-
-      if (!gst_gsettings_audio_sink_change_child (sink)) {
-        gst_gsettings_audio_sink_reset (sink);
-        return GST_STATE_CHANGE_FAILURE;
-      }
-      break;
-    default:
-      break;
-  }
-
-  ret = GST_CALL_PARENT_WITH_DEFAULT (GST_ELEMENT_CLASS, change_state,
-      (element, transition), GST_STATE_CHANGE_SUCCESS);
-
-  switch (transition) {
-    case GST_STATE_CHANGE_READY_TO_NULL:
-      gst_gsettings_audio_sink_reset (sink);
-      break;
-    default:
-      break;
-  }
-
-  return ret;
-}
-
-static void
-gst_gsettings_audio_sink_init (GstGSettingsAudioSink * sink,
-    GstGSettingsAudioSinkClass * g_class)
-{
-  sink->context = g_main_context_new ();
-  gst_gsettings_audio_sink_reset (sink);
-
-  sink->profile = GST_GSETTINGS_AUDIOSINK_PROFILE_MUSIC;
-}
-
-static void
-gst_gsettings_audio_sink_base_init (gpointer klass)
-{
-  GstElementClass *eklass = GST_ELEMENT_CLASS (klass);
-
-  gst_element_class_set_static_metadata (eklass, "GSettings audio sink",
-      "Sink/Audio",
-      "Audio sink embedding the GSettings preferences for audio output",
-      "Sebastian Dröge <sebastian.droege@collabora.co.uk>");
-}
-
-static void
-gst_gsettings_audio_sink_class_init (GstGSettingsAudioSinkClass * klass)
-{
-  GObjectClass *oklass = G_OBJECT_CLASS (klass);
-  GstElementClass *eklass = GST_ELEMENT_CLASS (klass);
-
-  oklass->finalize = gst_gsettings_audio_sink_finalize;
-  oklass->set_property = gst_gsettings_audio_sink_set_property;
-  oklass->get_property = gst_gsettings_audio_sink_get_property;
-
-  g_object_class_install_property (oklass, PROP_PROFILE,
-      g_param_spec_enum ("profile", "Profile", "Profile",
-          GST_TYPE_GSETTINGS_AUDIOSINK_PROFILE,
-          GST_GSETTINGS_AUDIOSINK_PROFILE_SOUNDS,
-          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
-
-  eklass->change_state = gst_gsettings_audio_sink_change_state;
-}
diff --git a/ext/gsettings/gstgsettingsaudiosink.h b/ext/gsettings/gstgsettingsaudiosink.h
deleted file mode 100644
index 7a15190..0000000
--- a/ext/gsettings/gstgsettingsaudiosink.h
+++ /dev/null
@@ -1,71 +0,0 @@
-/* GStreamer
- * Copyright (C) 2010 Sebastian Dröge <sebastian.droege@collabora.co.uk>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-#ifndef __GST_GSETTINGS_AUDIO_SINK_H__
-#define __GST_GSETTINGS_AUDIO_SINK_H__
-
-#include <gst/gst.h>
-#include <gio/gio.h>
-#include "gstswitchsink.h"
-
-G_BEGIN_DECLS
-
-#define GST_TYPE_GSETTINGS_AUDIO_SINK \
-  (gst_gsettings_audio_sink_get_type ())
-#define GST_GSETTINGS_AUDIO_SINK(obj) \
-  (G_TYPE_CHECK_INSTANCE_CAST ((obj), GST_TYPE_GSETTINGS_AUDIO_SINK, \
-                               GstGSettingsAudioSink))
-#define GST_GSETTINGS_AUDIO_SINK_CLASS(klass) \
-  (G_TYPE_CHECK_CLASS_CAST ((klass), GST_TYPE_GSETTINGS_AUDIO_SINK, \
-                            GstGSettingsAudioSinkClass))
-#define GST_IS_GSETTINGS_AUDIO_SINK(obj) \
-  (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GST_TYPE_GSETTINGS_AUDIO_SINK))
-#define GST_IS_GSETTINGS_AUDIO_SINK_CLASS(klass) \
-  (G_TYPE_CHECK_CLASS_TYPE ((klass), GST_TYPE_GSETTINGS_AUDIO_SINK))
-
-typedef enum
-{
-  GST_GSETTINGS_AUDIOSINK_PROFILE_SOUNDS,
-  GST_GSETTINGS_AUDIOSINK_PROFILE_MUSIC,
-  GST_GSETTINGS_AUDIOSINK_PROFILE_CHAT,
-  GST_GSETTINGS_AUDIOSINK_PROFILE_NONE /* Internal value only */
-} GstGSettingsAudioSinkProfile;
-
-typedef struct _GstGSettingsAudioSink {
-  GstSwitchSink parent;
-
-  GSettings *settings;
-
-  GMainContext *context;
-  GMainLoop *loop;
-  gulong changed_id;
-
-  GstGSettingsAudioSinkProfile profile;
-  gchar *gsettings_str;
-} GstGSettingsAudioSink;
-
-typedef struct _GstGSettingsAudioSinkClass {
-  GstSwitchSinkClass parent_class;
-} GstGSettingsAudioSinkClass;
-
-GType   gst_gsettings_audio_sink_get_type   (void);
-
-G_END_DECLS
-
-#endif /* __GST_GSETTINGS_AUDIO_SINK_H__ */
diff --git a/ext/gsettings/gstgsettingsaudiosrc.c b/ext/gsettings/gstgsettingsaudiosrc.c
deleted file mode 100644
index ccd7c79..0000000
--- a/ext/gsettings/gstgsettingsaudiosrc.c
+++ /dev/null
@@ -1,246 +0,0 @@
-/* GStreamer
- * Copyright (C) 2010 Sebastian Dröge <sebastian.droege@collabora.co.uk>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-/**
- * SECTION:element-gsettingsaudiosrc
- *
- * This element outputs sound to the audiosrc that has been configured in
- * GSettings by the user.
- * 
- * <refsect2>
- * <title>Example launch line</title>
- * |[
- * gst-launch gsettingsaudiosrc ! audioconvert ! audioresample ! autoaudiosink
- * ]| Play from configured audiosrc
- * </refsect2>
- */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <gst/gst.h>
-#include <gst/glib-compat-private.h>
-#include <string.h>
-
-#include "gstgsettingsaudiosrc.h"
-#include "gstgsettings.h"
-
-GST_BOILERPLATE (GstGSettingsAudioSrc, gst_gsettings_audio_src, GstSwitchSrc,
-    GST_TYPE_SWITCH_SRC);
-
-static gboolean
-gst_gsettings_audio_src_change_child (GstGSettingsAudioSrc * src)
-{
-  gchar *new_string;
-  GError *err = NULL;
-  GstElement *new_kid;
-
-  GST_OBJECT_LOCK (src);
-  new_string =
-      g_settings_get_string (src->settings, GST_GSETTINGS_KEY_AUDIOSRC);
-
-  if (new_string != NULL && src->gsettings_str != NULL &&
-      (strlen (new_string) == 0 ||
-          strcmp (src->gsettings_str, new_string) == 0)) {
-    g_free (new_string);
-    GST_DEBUG_OBJECT (src,
-        "GSettings key was updated, but it didn't change. Ignoring");
-    GST_OBJECT_UNLOCK (src);
-    return TRUE;
-  }
-  GST_OBJECT_UNLOCK (src);
-
-  GST_DEBUG_OBJECT (src, "GSettings key changed from '%s' to '%s'",
-      GST_STR_NULL (src->gsettings_str), GST_STR_NULL (new_string));
-
-  if (new_string) {
-    new_kid = gst_parse_bin_from_description (new_string, TRUE, &err);
-    if (err) {
-      GST_ERROR_OBJECT (src, "error creating bin '%s': %s", new_string,
-          err->message);
-      g_error_free (err);
-    }
-  } else {
-    new_kid = NULL;
-  }
-
-  if (new_kid == NULL) {
-    GST_ELEMENT_ERROR (src, LIBRARY, SETTINGS, (NULL),
-        ("Failed to render audio src from GSettings"));
-    goto fail;
-  }
-
-  if (!gst_switch_src_set_child (GST_SWITCH_SRC (src), new_kid)) {
-    GST_WARNING_OBJECT (src, "Failed to update child element");
-    goto fail;
-  }
-
-  g_free (src->gsettings_str);
-  src->gsettings_str = new_string;
-
-  return TRUE;
-
-fail:
-  g_free (new_string);
-  return FALSE;
-}
-
-static void
-on_changed (GSettings * settings, gchar * key, GstGSettingsAudioSrc * src)
-{
-  if (!g_str_equal (key, "audiosrc"))
-    return;
-
-  gst_gsettings_audio_src_change_child (src);
-}
-
-static gboolean
-gst_gsettings_audio_src_start (GstGSettingsAudioSrc * src)
-{
-  GError *err = NULL;
-  GThread *thread;
-
-  src->loop = g_main_loop_new (src->context, FALSE);
-
-  thread =
-      g_thread_create ((GThreadFunc) g_main_loop_run, src->loop, FALSE, &err);
-  if (!thread) {
-    GST_ELEMENT_ERROR (src, CORE, STATE_CHANGE, (NULL),
-        ("Failed to create new thread: %s", err->message));
-    g_error_free (err);
-    g_main_loop_unref (src->loop);
-    src->loop = NULL;
-    return FALSE;
-  }
-
-  g_main_context_push_thread_default (src->context);
-  src->settings = g_settings_new (GST_GSETTINGS_SCHEMA);
-  src->changed_id =
-      g_signal_connect_data (G_OBJECT (src->settings), "changed",
-      G_CALLBACK (on_changed), gst_object_ref (src),
-      (GClosureNotify) gst_object_unref, 0);
-  g_main_context_pop_thread_default (src->context);
-
-  return TRUE;
-}
-
-static gboolean
-gst_gsettings_audio_src_reset (GstGSettingsAudioSrc * src)
-{
-  gst_switch_src_set_child (GST_SWITCH_SRC (src), NULL);
-
-  if (src->changed_id) {
-    g_signal_handler_disconnect (src->settings, src->changed_id);
-    src->changed_id = 0;
-  }
-
-  if (src->loop) {
-    g_main_loop_quit (src->loop);
-    g_main_loop_unref (src->loop);
-    src->loop = NULL;
-  }
-
-  if (src->settings) {
-    g_object_unref (src->settings);
-    src->settings = NULL;
-  }
-
-  GST_OBJECT_LOCK (src);
-  g_free (src->gsettings_str);
-  src->gsettings_str = NULL;
-  GST_OBJECT_UNLOCK (src);
-
-  return TRUE;
-}
-
-static void
-gst_gsettings_audio_src_finalize (GObject * object)
-{
-  GstGSettingsAudioSrc *src = GST_GSETTINGS_AUDIO_SRC (object);
-
-  g_free (src->gsettings_str);
-  g_main_context_unref (src->context);
-
-  GST_CALL_PARENT (G_OBJECT_CLASS, finalize, ((GObject *) (src)));
-}
-
-static GstStateChangeReturn
-gst_gsettings_audio_src_change_state (GstElement * element,
-    GstStateChange transition)
-{
-  GstStateChangeReturn ret = GST_STATE_CHANGE_SUCCESS;
-  GstGSettingsAudioSrc *src = GST_GSETTINGS_AUDIO_SRC (element);
-
-  switch (transition) {
-    case GST_STATE_CHANGE_NULL_TO_READY:
-      if (!gst_gsettings_audio_src_start (src))
-        return GST_STATE_CHANGE_FAILURE;
-
-      if (!gst_gsettings_audio_src_change_child (src)) {
-        gst_gsettings_audio_src_reset (src);
-        return GST_STATE_CHANGE_FAILURE;
-      }
-      break;
-    default:
-      break;
-  }
-
-  ret = GST_CALL_PARENT_WITH_DEFAULT (GST_ELEMENT_CLASS, change_state,
-      (element, transition), GST_STATE_CHANGE_SUCCESS);
-
-  switch (transition) {
-    case GST_STATE_CHANGE_READY_TO_NULL:
-      gst_gsettings_audio_src_reset (src);
-      break;
-    default:
-      break;
-  }
-
-  return ret;
-}
-
-static void
-gst_gsettings_audio_src_init (GstGSettingsAudioSrc * src,
-    GstGSettingsAudioSrcClass * g_class)
-{
-  src->context = g_main_context_new ();
-  gst_gsettings_audio_src_reset (src);
-}
-
-static void
-gst_gsettings_audio_src_base_init (gpointer klass)
-{
-  GstElementClass *eklass = GST_ELEMENT_CLASS (klass);
-
-  gst_element_class_set_static_metadata (eklass, "GSettings audio src",
-      "Src/Audio",
-      "Audio src embedding the GSettings preferences for audio input",
-      "Sebastian Dröge <sebastian.droege@collabora.co.uk>");
-}
-
-static void
-gst_gsettings_audio_src_class_init (GstGSettingsAudioSrcClass * klass)
-{
-  GObjectClass *oklass = G_OBJECT_CLASS (klass);
-  GstElementClass *eklass = GST_ELEMENT_CLASS (klass);
-
-  oklass->finalize = gst_gsettings_audio_src_finalize;
-
-  eklass->change_state = gst_gsettings_audio_src_change_state;
-}
diff --git a/ext/gsettings/gstgsettingsaudiosrc.h b/ext/gsettings/gstgsettingsaudiosrc.h
deleted file mode 100644
index d5c3fc3..0000000
--- a/ext/gsettings/gstgsettingsaudiosrc.h
+++ /dev/null
@@ -1,62 +0,0 @@
-/* GStreamer
- * Copyright (C) 2010 Sebastian Dröge <sebastian.droege@collabora.co.uk>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-#ifndef __GST_GSETTINGS_AUDIO_SRC_H__
-#define __GST_GSETTINGS_AUDIO_SRC_H__
-
-#include <gst/gst.h>
-#include <gio/gio.h>
-#include "gstswitchsrc.h"
-
-G_BEGIN_DECLS
-
-#define GST_TYPE_GSETTINGS_AUDIO_SRC \
-  (gst_gsettings_audio_src_get_type ())
-#define GST_GSETTINGS_AUDIO_SRC(obj) \
-  (G_TYPE_CHECK_INSTANCE_CAST ((obj), GST_TYPE_GSETTINGS_AUDIO_SRC, \
-                               GstGSettingsAudioSrc))
-#define GST_GSETTINGS_AUDIO_SRC_CLASS(klass) \
-  (G_TYPE_CHECK_CLASS_CAST ((klass), GST_TYPE_GSETTINGS_AUDIO_SRC, \
-                            GstGSettingsAudioSrcClass))
-#define GST_IS_GSETTINGS_AUDIO_SRC(obj) \
-  (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GST_TYPE_GSETTINGS_AUDIO_SRC))
-#define GST_IS_GSETTINGS_AUDIO_SRC_CLASS(klass) \
-  (G_TYPE_CHECK_CLASS_TYPE ((klass), GST_TYPE_GSETTINGS_AUDIO_SRC))
-
-typedef struct _GstGSettingsAudioSrc {
-  GstSwitchSrc parent;
-
-  GSettings *settings;
-
-  GMainContext *context;
-  GMainLoop *loop;
-  gulong changed_id;
-
-  gchar *gsettings_str;
-} GstGSettingsAudioSrc;
-
-typedef struct _GstGSettingsAudioSrcClass {
-  GstSwitchSrcClass parent_class;
-} GstGSettingsAudioSrcClass;
-
-GType   gst_gsettings_audio_src_get_type   (void);
-
-G_END_DECLS
-
-#endif /* __GST_GSETTINGS_AUDIO_SRC_H__ */
diff --git a/ext/gsettings/gstgsettingsvideosink.c b/ext/gsettings/gstgsettingsvideosink.c
deleted file mode 100644
index b7a0a25..0000000
--- a/ext/gsettings/gstgsettingsvideosink.c
+++ /dev/null
@@ -1,246 +0,0 @@
-/* GStreamer
- * Copyright (C) 2010 Sebastian Dröge <sebastian.droege@collabora.co.uk>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-/**
- * SECTION:element-gsettingsvideosink
- *
- * This element outputs sound to the videosink that has been configured in
- * GSettings by the user.
- * 
- * <refsect2>
- * <title>Example launch line</title>
- * |[
- * gst-launch videotestsrc ! videoconvert ! videoscale ! gsettingsvideosink
- * ]| Play on configured videosink
- * </refsect2>
- */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <gst/gst.h>
-#include <gst/glib-compat-private.h>
-#include <string.h>
-
-#include "gstgsettingsvideosink.h"
-#include "gstgsettings.h"
-
-GST_BOILERPLATE (GstGSettingsVideoSink, gst_gsettings_video_sink, GstSwitchSink,
-    GST_TYPE_SWITCH_SINK);
-
-static gboolean
-gst_gsettings_video_sink_change_child (GstGSettingsVideoSink * sink)
-{
-  gchar *new_string;
-  GError *err = NULL;
-  GstElement *new_kid;
-
-  GST_OBJECT_LOCK (sink);
-  new_string =
-      g_settings_get_string (sink->settings, GST_GSETTINGS_KEY_VIDEOSINK);
-
-  if (new_string != NULL && sink->gsettings_str != NULL &&
-      (strlen (new_string) == 0 ||
-          strcmp (sink->gsettings_str, new_string) == 0)) {
-    g_free (new_string);
-    GST_DEBUG_OBJECT (sink,
-        "GSettings key was updated, but it didn't change. Ignoring");
-    GST_OBJECT_UNLOCK (sink);
-    return TRUE;
-  }
-  GST_OBJECT_UNLOCK (sink);
-
-  GST_DEBUG_OBJECT (sink, "GSettings key changed from '%s' to '%s'",
-      GST_STR_NULL (sink->gsettings_str), GST_STR_NULL (new_string));
-
-  if (new_string) {
-    new_kid = gst_parse_bin_from_description (new_string, TRUE, &err);
-    if (err) {
-      GST_ERROR_OBJECT (sink, "error creating bin '%s': %s", new_string,
-          err->message);
-      g_error_free (err);
-    }
-  } else {
-    new_kid = NULL;
-  }
-
-  if (new_kid == NULL) {
-    GST_ELEMENT_ERROR (sink, LIBRARY, SETTINGS, (NULL),
-        ("Failed to render video sink from GSettings"));
-    goto fail;
-  }
-
-  if (!gst_switch_sink_set_child (GST_SWITCH_SINK (sink), new_kid)) {
-    GST_WARNING_OBJECT (sink, "Failed to update child element");
-    goto fail;
-  }
-
-  g_free (sink->gsettings_str);
-  sink->gsettings_str = new_string;
-
-  return TRUE;
-
-fail:
-  g_free (new_string);
-  return FALSE;
-}
-
-static void
-on_changed (GSettings * settings, gchar * key, GstGSettingsVideoSink * sink)
-{
-  if (!g_str_has_suffix (key, "videosink"))
-    return;
-
-  gst_gsettings_video_sink_change_child (sink);
-}
-
-static gboolean
-gst_gsettings_video_sink_start (GstGSettingsVideoSink * sink)
-{
-  GError *err = NULL;
-  GThread *thread;
-
-  sink->loop = g_main_loop_new (sink->context, FALSE);
-
-  thread =
-      g_thread_create ((GThreadFunc) g_main_loop_run, sink->loop, FALSE, &err);
-  if (!thread) {
-    GST_ELEMENT_ERROR (sink, CORE, STATE_CHANGE, (NULL),
-        ("Failed to create new thread: %s", err->message));
-    g_error_free (err);
-    g_main_loop_unref (sink->loop);
-    sink->loop = NULL;
-    return FALSE;
-  }
-
-  g_main_context_push_thread_default (sink->context);
-  sink->settings = g_settings_new (GST_GSETTINGS_SCHEMA);
-  sink->changed_id =
-      g_signal_connect_data (G_OBJECT (sink->settings), "changed",
-      G_CALLBACK (on_changed), gst_object_ref (sink),
-      (GClosureNotify) gst_object_unref, 0);
-  g_main_context_pop_thread_default (sink->context);
-
-  return TRUE;
-}
-
-static gboolean
-gst_gsettings_video_sink_reset (GstGSettingsVideoSink * sink)
-{
-  gst_switch_sink_set_child (GST_SWITCH_SINK (sink), NULL);
-
-  if (sink->changed_id) {
-    g_signal_handler_disconnect (sink->settings, sink->changed_id);
-    sink->changed_id = 0;
-  }
-
-  if (sink->loop) {
-    g_main_loop_quit (sink->loop);
-    g_main_loop_unref (sink->loop);
-    sink->loop = NULL;
-  }
-
-  if (sink->settings) {
-    g_object_unref (sink->settings);
-    sink->settings = NULL;
-  }
-
-  GST_OBJECT_LOCK (sink);
-  g_free (sink->gsettings_str);
-  sink->gsettings_str = NULL;
-  GST_OBJECT_UNLOCK (sink);
-
-  return TRUE;
-}
-
-static void
-gst_gsettings_video_sink_finalize (GObject * object)
-{
-  GstGSettingsVideoSink *sink = GST_GSETTINGS_VIDEO_SINK (object);
-
-  g_free (sink->gsettings_str);
-  g_main_context_unref (sink->context);
-
-  GST_CALL_PARENT (G_OBJECT_CLASS, finalize, ((GObject *) (sink)));
-}
-
-static GstStateChangeReturn
-gst_gsettings_video_sink_change_state (GstElement * element,
-    GstStateChange transition)
-{
-  GstStateChangeReturn ret = GST_STATE_CHANGE_SUCCESS;
-  GstGSettingsVideoSink *sink = GST_GSETTINGS_VIDEO_SINK (element);
-
-  switch (transition) {
-    case GST_STATE_CHANGE_NULL_TO_READY:
-      if (!gst_gsettings_video_sink_start (sink))
-        return GST_STATE_CHANGE_FAILURE;
-
-      if (!gst_gsettings_video_sink_change_child (sink)) {
-        gst_gsettings_video_sink_reset (sink);
-        return GST_STATE_CHANGE_FAILURE;
-      }
-      break;
-    default:
-      break;
-  }
-
-  ret = GST_CALL_PARENT_WITH_DEFAULT (GST_ELEMENT_CLASS, change_state,
-      (element, transition), GST_STATE_CHANGE_SUCCESS);
-
-  switch (transition) {
-    case GST_STATE_CHANGE_READY_TO_NULL:
-      gst_gsettings_video_sink_reset (sink);
-      break;
-    default:
-      break;
-  }
-
-  return ret;
-}
-
-static void
-gst_gsettings_video_sink_init (GstGSettingsVideoSink * sink,
-    GstGSettingsVideoSinkClass * g_class)
-{
-  sink->context = g_main_context_new ();
-  gst_gsettings_video_sink_reset (sink);
-}
-
-static void
-gst_gsettings_video_sink_base_init (gpointer klass)
-{
-  GstElementClass *eklass = GST_ELEMENT_CLASS (klass);
-
-  gst_element_class_set_static_metadata (eklass, "GSettings video sink",
-      "Sink/Video",
-      "Video sink embedding the GSettings preferences for video input",
-      "Sebastian Dröge <sebastian.droege@collabora.co.uk>");
-}
-
-static void
-gst_gsettings_video_sink_class_init (GstGSettingsVideoSinkClass * klass)
-{
-  GObjectClass *oklass = G_OBJECT_CLASS (klass);
-  GstElementClass *eklass = GST_ELEMENT_CLASS (klass);
-
-  oklass->finalize = gst_gsettings_video_sink_finalize;
-
-  eklass->change_state = gst_gsettings_video_sink_change_state;
-}
diff --git a/ext/gsettings/gstgsettingsvideosink.h b/ext/gsettings/gstgsettingsvideosink.h
deleted file mode 100644
index d1f9bc6..0000000
--- a/ext/gsettings/gstgsettingsvideosink.h
+++ /dev/null
@@ -1,62 +0,0 @@
-/* GStreamer
- * Copyright (C) 2010 Sebastian Dröge <sebastian.droege@collabora.co.uk>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-#ifndef __GST_GSETTINGS_VIDEO_SINK_H__
-#define __GST_GSETTINGS_VIDEO_SINK_H__
-
-#include <gst/gst.h>
-#include <gio/gio.h>
-#include "gstswitchsink.h"
-
-G_BEGIN_DECLS
-
-#define GST_TYPE_GSETTINGS_VIDEO_SINK \
-  (gst_gsettings_video_sink_get_type ())
-#define GST_GSETTINGS_VIDEO_SINK(obj) \
-  (G_TYPE_CHECK_INSTANCE_CAST ((obj), GST_TYPE_GSETTINGS_VIDEO_SINK, \
-                               GstGSettingsVideoSink))
-#define GST_GSETTINGS_VIDEO_SINK_CLASS(klass) \
-  (G_TYPE_CHECK_CLASS_CAST ((klass), GST_TYPE_GSETTINGS_VIDEO_SINK, \
-                            GstGSettingsVideoSinkClass))
-#define GST_IS_GSETTINGS_VIDEO_SINK(obj) \
-  (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GST_TYPE_GSETTINGS_VIDEO_SINK))
-#define GST_IS_GSETTINGS_VIDEO_SINK_CLASS(klass) \
-  (G_TYPE_CHECK_CLASS_TYPE ((klass), GST_TYPE_GSETTINGS_VIDEO_SINK))
-
-typedef struct _GstGSettingsVideoSink {
-  GstSwitchSink parent;
-
-  GSettings *settings;
-
-  GMainContext *context;
-  GMainLoop *loop;
-  gulong changed_id;
-
-  gchar *gsettings_str;
-} GstGSettingsVideoSink;
-
-typedef struct _GstGSettingsVideoSinkClass {
-  GstSwitchSinkClass parent_class;
-} GstGSettingsVideoSinkClass;
-
-GType   gst_gsettings_video_sink_get_type   (void);
-
-G_END_DECLS
-
-#endif /* __GST_GSETTINGS_VIDEO_SINK_H__ */
diff --git a/ext/gsettings/gstgsettingsvideosrc.c b/ext/gsettings/gstgsettingsvideosrc.c
deleted file mode 100644
index 2b76867..0000000
--- a/ext/gsettings/gstgsettingsvideosrc.c
+++ /dev/null
@@ -1,246 +0,0 @@
-/* GStreamer
- * Copyright (C) 2010 Sebastian Dröge <sebastian.droege@collabora.co.uk>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-/**
- * SECTION:element-gsettingsvideosrc
- *
- * This element outputs sound to the videosrc that has been configured in
- * GSettings by the user.
- * 
- * <refsect2>
- * <title>Example launch line</title>
- * |[
- * gst-launch gsettingsvideosrc ! videoconvert ! videoscale ! autovideosink
- * ]| Play from configured videosrc
- * </refsect2>
- */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <gst/gst.h>
-#include <gst/glib-compat-private.h>
-#include <string.h>
-
-#include "gstgsettingsvideosrc.h"
-#include "gstgsettings.h"
-
-GST_BOILERPLATE (GstGSettingsVideoSrc, gst_gsettings_video_src, GstSwitchSrc,
-    GST_TYPE_SWITCH_SRC);
-
-static gboolean
-gst_gsettings_video_src_change_child (GstGSettingsVideoSrc * src)
-{
-  gchar *new_string;
-  GError *err = NULL;
-  GstElement *new_kid;
-
-  GST_OBJECT_LOCK (src);
-  new_string =
-      g_settings_get_string (src->settings, GST_GSETTINGS_KEY_VIDEOSRC);
-
-  if (new_string != NULL && src->gsettings_str != NULL &&
-      (strlen (new_string) == 0 ||
-          strcmp (src->gsettings_str, new_string) == 0)) {
-    g_free (new_string);
-    GST_DEBUG_OBJECT (src,
-        "GSettings key was updated, but it didn't change. Ignoring");
-    GST_OBJECT_UNLOCK (src);
-    return TRUE;
-  }
-  GST_OBJECT_UNLOCK (src);
-
-  GST_DEBUG_OBJECT (src, "GSettings key changed from '%s' to '%s'",
-      GST_STR_NULL (src->gsettings_str), GST_STR_NULL (new_string));
-
-  if (new_string) {
-    new_kid = gst_parse_bin_from_description (new_string, TRUE, &err);
-    if (err) {
-      GST_ERROR_OBJECT (src, "error creating bin '%s': %s", new_string,
-          err->message);
-      g_error_free (err);
-    }
-  } else {
-    new_kid = NULL;
-  }
-
-  if (new_kid == NULL) {
-    GST_ELEMENT_ERROR (src, LIBRARY, SETTINGS, (NULL),
-        ("Failed to render video src from GSettings"));
-    goto fail;
-  }
-
-  if (!gst_switch_src_set_child (GST_SWITCH_SRC (src), new_kid)) {
-    GST_WARNING_OBJECT (src, "Failed to update child element");
-    goto fail;
-  }
-
-  g_free (src->gsettings_str);
-  src->gsettings_str = new_string;
-
-  return TRUE;
-
-fail:
-  g_free (new_string);
-  return FALSE;
-}
-
-static void
-on_changed (GSettings * settings, gchar * key, GstGSettingsVideoSrc * src)
-{
-  if (!g_str_equal (key, "videosrc"))
-    return;
-
-  gst_gsettings_video_src_change_child (src);
-}
-
-static gboolean
-gst_gsettings_video_src_start (GstGSettingsVideoSrc * src)
-{
-  GError *err = NULL;
-  GThread *thread;
-
-  src->loop = g_main_loop_new (src->context, FALSE);
-
-  thread =
-      g_thread_create ((GThreadFunc) g_main_loop_run, src->loop, FALSE, &err);
-  if (!thread) {
-    GST_ELEMENT_ERROR (src, CORE, STATE_CHANGE, (NULL),
-        ("Failed to create new thread: %s", err->message));
-    g_error_free (err);
-    g_main_loop_unref (src->loop);
-    src->loop = NULL;
-    return FALSE;
-  }
-
-  g_main_context_push_thread_default (src->context);
-  src->settings = g_settings_new (GST_GSETTINGS_SCHEMA);
-  src->changed_id =
-      g_signal_connect_data (G_OBJECT (src->settings), "changed",
-      G_CALLBACK (on_changed), gst_object_ref (src),
-      (GClosureNotify) gst_object_unref, 0);
-  g_main_context_pop_thread_default (src->context);
-
-  return TRUE;
-}
-
-static gboolean
-gst_gsettings_video_src_reset (GstGSettingsVideoSrc * src)
-{
-  gst_switch_src_set_child (GST_SWITCH_SRC (src), NULL);
-
-  if (src->changed_id) {
-    g_signal_handler_disconnect (src->settings, src->changed_id);
-    src->changed_id = 0;
-  }
-
-  if (src->loop) {
-    g_main_loop_quit (src->loop);
-    g_main_loop_unref (src->loop);
-    src->loop = NULL;
-  }
-
-  if (src->settings) {
-    g_object_unref (src->settings);
-    src->settings = NULL;
-  }
-
-  GST_OBJECT_LOCK (src);
-  g_free (src->gsettings_str);
-  src->gsettings_str = NULL;
-  GST_OBJECT_UNLOCK (src);
-
-  return TRUE;
-}
-
-static void
-gst_gsettings_video_src_finalize (GObject * object)
-{
-  GstGSettingsVideoSrc *src = GST_GSETTINGS_VIDEO_SRC (object);
-
-  g_free (src->gsettings_str);
-  g_main_context_unref (src->context);
-
-  GST_CALL_PARENT (G_OBJECT_CLASS, finalize, ((GObject *) (src)));
-}
-
-static GstStateChangeReturn
-gst_gsettings_video_src_change_state (GstElement * element,
-    GstStateChange transition)
-{
-  GstStateChangeReturn ret = GST_STATE_CHANGE_SUCCESS;
-  GstGSettingsVideoSrc *src = GST_GSETTINGS_VIDEO_SRC (element);
-
-  switch (transition) {
-    case GST_STATE_CHANGE_NULL_TO_READY:
-      if (!gst_gsettings_video_src_start (src))
-        return GST_STATE_CHANGE_FAILURE;
-
-      if (!gst_gsettings_video_src_change_child (src)) {
-        gst_gsettings_video_src_reset (src);
-        return GST_STATE_CHANGE_FAILURE;
-      }
-      break;
-    default:
-      break;
-  }
-
-  ret = GST_CALL_PARENT_WITH_DEFAULT (GST_ELEMENT_CLASS, change_state,
-      (element, transition), GST_STATE_CHANGE_SUCCESS);
-
-  switch (transition) {
-    case GST_STATE_CHANGE_READY_TO_NULL:
-      gst_gsettings_video_src_reset (src);
-      break;
-    default:
-      break;
-  }
-
-  return ret;
-}
-
-static void
-gst_gsettings_video_src_init (GstGSettingsVideoSrc * src,
-    GstGSettingsVideoSrcClass * g_class)
-{
-  src->context = g_main_context_new ();
-  gst_gsettings_video_src_reset (src);
-}
-
-static void
-gst_gsettings_video_src_base_init (gpointer klass)
-{
-  GstElementClass *eklass = GST_ELEMENT_CLASS (klass);
-
-  gst_element_class_set_static_metadata (eklass, "GSettings video src",
-      "Src/Video",
-      "Video src embedding the GSettings preferences for video input",
-      "Sebastian Dröge <sebastian.droege@collabora.co.uk>");
-}
-
-static void
-gst_gsettings_video_src_class_init (GstGSettingsVideoSrcClass * klass)
-{
-  GObjectClass *oklass = G_OBJECT_CLASS (klass);
-  GstElementClass *eklass = GST_ELEMENT_CLASS (klass);
-
-  oklass->finalize = gst_gsettings_video_src_finalize;
-
-  eklass->change_state = gst_gsettings_video_src_change_state;
-}
diff --git a/ext/gsettings/gstgsettingsvideosrc.h b/ext/gsettings/gstgsettingsvideosrc.h
deleted file mode 100644
index 4b7a6cd..0000000
--- a/ext/gsettings/gstgsettingsvideosrc.h
+++ /dev/null
@@ -1,62 +0,0 @@
-/* GStreamer
- * Copyright (C) 2010 Sebastian Dröge <sebastian.droege@collabora.co.uk>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-#ifndef __GST_GSETTINGS_VIDEO_SRC_H__
-#define __GST_GSETTINGS_VIDEO_SRC_H__
-
-#include <gst/gst.h>
-#include <gio/gio.h>
-#include "gstswitchsrc.h"
-
-G_BEGIN_DECLS
-
-#define GST_TYPE_GSETTINGS_VIDEO_SRC \
-  (gst_gsettings_video_src_get_type ())
-#define GST_GSETTINGS_VIDEO_SRC(obj) \
-  (G_TYPE_CHECK_INSTANCE_CAST ((obj), GST_TYPE_GSETTINGS_VIDEO_SRC, \
-                               GstGSettingsVideoSrc))
-#define GST_GSETTINGS_VIDEO_SRC_CLASS(klass) \
-  (G_TYPE_CHECK_CLASS_CAST ((klass), GST_TYPE_GSETTINGS_VIDEO_SRC, \
-                            GstGSettingsVideoSrcClass))
-#define GST_IS_GSETTINGS_VIDEO_SRC(obj) \
-  (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GST_TYPE_GSETTINGS_VIDEO_SRC))
-#define GST_IS_GSETTINGS_VIDEO_SRC_CLASS(klass) \
-  (G_TYPE_CHECK_CLASS_TYPE ((klass), GST_TYPE_GSETTINGS_VIDEO_SRC))
-
-typedef struct _GstGSettingsVideoSrc {
-  GstSwitchSrc parent;
-
-  GSettings *settings;
-
-  GMainContext *context;
-  GMainLoop *loop;
-  gulong changed_id;
-
-  gchar *gsettings_str;
-} GstGSettingsVideoSrc;
-
-typedef struct _GstGSettingsVideoSrcClass {
-  GstSwitchSrcClass parent_class;
-} GstGSettingsVideoSrcClass;
-
-GType   gst_gsettings_video_src_get_type   (void);
-
-G_END_DECLS
-
-#endif /* __GST_GSETTINGS_VIDEO_SRC_H__ */
diff --git a/ext/gsettings/gstswitchsink.c b/ext/gsettings/gstswitchsink.c
deleted file mode 100644
index ce042ce..0000000
--- a/ext/gsettings/gstswitchsink.c
+++ /dev/null
@@ -1,270 +0,0 @@
-/* GStreamer
- * Copyright (c) 2005 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
- * Copyright (c) 2006 Jürg Billeter <j@bitron.ch>
- * Copyright (c) 2007 Jan Schmidt <thaytan@noraisin.net>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include <string.h>
-
-#include "gstswitchsink.h"
-
-GST_DEBUG_CATEGORY_STATIC (switch_debug);
-#define GST_CAT_DEFAULT switch_debug
-
-static void gst_switch_sink_dispose (GObject * object);
-static GstStateChangeReturn
-gst_switch_sink_change_state (GstElement * element, GstStateChange transition);
-
-enum
-{
-  PROP_0
-};
-
-GST_BOILERPLATE (GstSwitchSink, gst_switch_sink, GstBin, GST_TYPE_BIN);
-
-static void
-gst_switch_sink_base_init (gpointer klass)
-{
-  GST_DEBUG_CATEGORY_INIT (switch_debug, "switchsink", 0, "switchsink element");
-}
-
-static void
-gst_switch_sink_class_init (GstSwitchSinkClass * klass)
-{
-  GObjectClass *oklass = G_OBJECT_CLASS (klass);
-  GstElementClass *eklass = GST_ELEMENT_CLASS (klass);
-  static GstStaticPadTemplate sink_template = GST_STATIC_PAD_TEMPLATE ("sink",
-      GST_PAD_SINK,
-      GST_PAD_ALWAYS,
-      GST_STATIC_CAPS_ANY);
-  GstPadTemplate *child_pad_templ;
-
-  oklass->dispose = gst_switch_sink_dispose;
-  eklass->change_state = gst_switch_sink_change_state;
-
-  /* Provide a default pad template if the child didn't */
-  child_pad_templ = gst_element_class_get_pad_template (eklass, "sink");
-  if (child_pad_templ == NULL) {
-    gst_element_class_add_pad_template (eklass,
-        gst_static_pad_template_get (&sink_template));
-  }
-}
-
-static gboolean
-gst_switch_sink_reset (GstSwitchSink * sink)
-{
-  /* this will install fakesink if no other child has been set,
-   * otherwise we rely on the subclass to know when to unset its
-   * custom kid */
-  if (sink->kid == NULL) {
-    return gst_switch_sink_set_child (sink, NULL);
-  }
-
-  return TRUE;
-}
-
-static void
-gst_switch_sink_init (GstSwitchSink * sink, GstSwitchSinkClass * g_class)
-{
-  GstElementClass *eklass = GST_ELEMENT_GET_CLASS (sink);
-  GstPadTemplate *templ;
-
-  templ = gst_element_class_get_pad_template (eklass, "sink");
-  sink->pad = gst_ghost_pad_new_no_target_from_template ("sink", templ);
-  gst_element_add_pad (GST_ELEMENT (sink), sink->pad);
-
-  gst_switch_sink_reset (sink);
-
-  GST_OBJECT_FLAG_SET (sink, GST_ELEMENT_IS_SINK);
-}
-
-static void
-gst_switch_sink_dispose (GObject * object)
-{
-  GstSwitchSink *sink = GST_SWITCH_SINK (object);
-  GstObject *new_kid, *kid;
-
-  GST_OBJECT_LOCK (sink);
-  new_kid = GST_OBJECT_CAST (sink->new_kid);
-  sink->new_kid = NULL;
-
-  kid = GST_OBJECT_CAST (sink->kid);
-  sink->kid = NULL;
-  GST_OBJECT_UNLOCK (sink);
-
-  gst_object_replace (&new_kid, NULL);
-  gst_object_replace (&kid, NULL);
-
-  GST_CALL_PARENT (G_OBJECT_CLASS, dispose, (object));
-}
-
-static gboolean
-gst_switch_sink_commit_new_kid (GstSwitchSink * sink)
-{
-  GstPad *targetpad;
-  GstState kid_state;
-  GstElement *new_kid, *old_kid;
-  gboolean is_fakesink = FALSE;
-  GstBus *bus;
-
-  /* need locking around member accesses */
-  GST_OBJECT_LOCK (sink);
-  /* If we're currently changing state, set the child to the next state
-   * we're transitioning too, rather than our current state which is 
-   * about to change */
-  if (GST_STATE_NEXT (sink) != GST_STATE_VOID_PENDING)
-    kid_state = GST_STATE_NEXT (sink);
-  else
-    kid_state = GST_STATE (sink);
-
-  new_kid = sink->new_kid ? gst_object_ref (sink->new_kid) : NULL;
-  sink->new_kid = NULL;
-  GST_OBJECT_UNLOCK (sink);
-
-  /* Fakesink by default if NULL is passed as the new child */
-  if (new_kid == NULL) {
-    GST_DEBUG_OBJECT (sink, "Replacing kid with fakesink");
-    new_kid = gst_element_factory_make ("fakesink", "testsink");
-    if (new_kid == NULL) {
-      GST_ERROR_OBJECT (sink, "Failed to create fakesink");
-      return FALSE;
-    }
-    /* Add a reference, as it would if the element came from sink->new_kid */
-    gst_object_ref (new_kid);
-    g_object_set (new_kid, "sync", TRUE, NULL);
-    is_fakesink = TRUE;
-  } else {
-    GST_DEBUG_OBJECT (sink, "Setting new kid");
-  }
-
-  /* set temporary bus of our own to catch error messages from the child
-   * (could we just set our own bus on it, or would the state change messages
-   * from the not-yet-added element confuse the state change algorithm? Let's
-   * play it safe for now) */
-  bus = gst_bus_new ();
-  gst_element_set_bus (new_kid, bus);
-  gst_object_unref (bus);
-
-  if (gst_element_set_state (new_kid, kid_state) == GST_STATE_CHANGE_FAILURE) {
-    GstMessage *msg;
-
-    /* check if child posted an error message and if so re-post it on our bus
-     * so that the application gets to see a decent error and not our generic
-     * fallback error message which is completely indecipherable to the user */
-    msg = gst_bus_pop_filtered (GST_ELEMENT_BUS (new_kid), GST_MESSAGE_ERROR);
-    if (msg) {
-      GST_INFO_OBJECT (sink, "Forwarding kid error: %" GST_PTR_FORMAT, msg);
-      gst_element_post_message (GST_ELEMENT (sink), msg);
-    }
-    GST_ELEMENT_ERROR (sink, CORE, STATE_CHANGE, (NULL),
-        ("Failed to set state on new child."));
-    gst_element_set_bus (new_kid, NULL);
-    gst_object_unref (new_kid);
-    return FALSE;
-  }
-  gst_element_set_bus (new_kid, NULL);
-  gst_bin_add (GST_BIN (sink), new_kid);
-
-  /* Now, replace the existing child */
-  GST_OBJECT_LOCK (sink);
-  old_kid = sink->kid;
-  sink->kid = new_kid;
-  /* Mark whether a custom kid or fakesink has been installed */
-  sink->have_kid = !is_fakesink;
-  GST_OBJECT_UNLOCK (sink);
-
-  /* kill old element */
-  if (old_kid) {
-    GST_DEBUG_OBJECT (sink, "Removing old kid %" GST_PTR_FORMAT, old_kid);
-    gst_element_set_state (old_kid, GST_STATE_NULL);
-    gst_bin_remove (GST_BIN (sink), old_kid);
-    gst_object_unref (old_kid);
-    /* Don't lose the SINK flag */
-    GST_OBJECT_FLAG_SET (sink, GST_ELEMENT_IS_SINK);
-  }
-
-  /* re-attach ghostpad */
-  GST_DEBUG_OBJECT (sink, "Creating new ghostpad");
-  targetpad = gst_element_get_static_pad (sink->kid, "sink");
-  gst_ghost_pad_set_target (GST_GHOST_PAD (sink->pad), targetpad);
-  gst_object_unref (targetpad);
-  GST_DEBUG_OBJECT (sink, "done changing child of switchsink");
-
-  /* FIXME: Push new-segment info and pre-roll buffer(s) into the kid */
-
-  return TRUE;
-}
-
-gboolean
-gst_switch_sink_set_child (GstSwitchSink * sink, GstElement * new_kid)
-{
-  GstState cur, next;
-  GstElement **p_kid;
-
-  /* Nothing to do if clearing the child and we've already installed fakesink */
-  if (new_kid == NULL && sink->kid != NULL && sink->have_kid == FALSE)
-    return TRUE;
-
-  /* Store the new kid to be committed later */
-  GST_OBJECT_LOCK (sink);
-  cur = GST_STATE (sink);
-  next = GST_STATE_NEXT (sink);
-  p_kid = &sink->new_kid;
-  gst_object_replace ((GstObject **) p_kid, (GstObject *) new_kid);
-  GST_OBJECT_UNLOCK (sink);
-  if (new_kid)
-    gst_object_unref (new_kid);
-
-  /* Sometime, it would be lovely to allow sink changes even when
-   * already running, but this involves sending an appropriate new-segment
-   * and possibly prerolling etc */
-  /* FIXME: Block the pad and replace the kid when it completes */
-  if (cur > GST_STATE_READY || next == GST_STATE_PAUSED) {
-    GST_DEBUG_OBJECT (sink,
-        "Switch-sink is already running. Ignoring change of child.");
-    gst_object_unref (new_kid);
-    return TRUE;
-  }
-
-  return gst_switch_sink_commit_new_kid (sink);
-}
-
-static GstStateChangeReturn
-gst_switch_sink_change_state (GstElement * element, GstStateChange transition)
-{
-  GstStateChangeReturn ret = GST_STATE_CHANGE_SUCCESS;
-  GstSwitchSink *sink = GST_SWITCH_SINK (element);
-
-  ret = GST_CALL_PARENT_WITH_DEFAULT (GST_ELEMENT_CLASS, change_state,
-      (element, transition), GST_STATE_CHANGE_SUCCESS);
-
-  switch (transition) {
-    case GST_STATE_CHANGE_READY_TO_NULL:
-      if (!gst_switch_sink_reset (sink))
-        ret = GST_STATE_CHANGE_FAILURE;
-      break;
-    default:
-      break;
-  }
-
-  return ret;
-}
diff --git a/ext/gsettings/gstswitchsink.h b/ext/gsettings/gstswitchsink.h
deleted file mode 100644
index d0b3f68..0000000
--- a/ext/gsettings/gstswitchsink.h
+++ /dev/null
@@ -1,62 +0,0 @@
-/* GStreamer
- * Copyright (c) 2005 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
- * Copyright (c) 2007 Jan Schmidt <thaytan@mad.scientist.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-#ifndef __GST_SWITCH_SINK_H__
-#define __GST_SWITCH_SINK_H__
-
-#include <gst/gst.h>
-
-G_BEGIN_DECLS
-
-#define GST_TYPE_SWITCH_SINK \
-  (gst_switch_sink_get_type ())
-#define GST_SWITCH_SINK(obj) \
-  (G_TYPE_CHECK_INSTANCE_CAST ((obj), GST_TYPE_SWITCH_SINK, \
-                               GstSwitchSink))
-#define GST_SWITCH_SINK_CLASS(klass) \
-  (G_TYPE_CHECK_CLASS_CAST ((klass), GST_TYPE_SWITCH_SINK, \
-                            GstSwitchSinkClass))
-#define GST_IS_SWITCH_SINK(obj) \
-  (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GST_TYPE_SWITCH_SINK))
-#define GST_IS_SWITCH_SINK_CLASS(klass) \
-  (G_TYPE_CHECK_CLASS_TYPE ((klass), GST_TYPE_SWITCH_SINK))
-
-typedef struct _GstSwitchSink {
-  GstBin parent;
-
-  GstElement *kid;
-  GstElement *new_kid;
-  GstPad *pad;
-
-  /* If a custom child has been set... */
-  gboolean have_kid;
-} GstSwitchSink;
-
-typedef struct _GstSwitchSinkClass {
-  GstBinClass parent_class;
-} GstSwitchSinkClass;
-
-GType   gst_switch_sink_get_type   (void);
-
-gboolean gst_switch_sink_set_child (GstSwitchSink *ssink, GstElement *new_kid);
-
-G_END_DECLS
-
-#endif /* __GST_SWITCH_SINK_H__ */
diff --git a/ext/gsettings/gstswitchsrc.c b/ext/gsettings/gstswitchsrc.c
deleted file mode 100644
index f25d068..0000000
--- a/ext/gsettings/gstswitchsrc.c
+++ /dev/null
@@ -1,262 +0,0 @@
-/* GStreamer
- * Copyright (c) 2005 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
- * Copyright (c) 2006 Jürg Billeter <j@bitron.ch>
- * Copyright (c) 2007 Jan Schmidt <thaytan@noraisin.net>
- * Copyright (c) 2010 Sebastian Dröge <sebastian.droege@collabora.co.uk>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include <string.h>
-
-#include "gstswitchsrc.h"
-
-GST_DEBUG_CATEGORY_STATIC (switch_debug);
-#define GST_CAT_DEFAULT switch_debug
-
-static void gst_switch_src_dispose (GObject * object);
-static GstStateChangeReturn
-gst_switch_src_change_state (GstElement * element, GstStateChange transition);
-
-GST_BOILERPLATE (GstSwitchSrc, gst_switch_src, GstBin, GST_TYPE_BIN);
-
-static void
-gst_switch_src_base_init (gpointer klass)
-{
-  GST_DEBUG_CATEGORY_INIT (switch_debug, "switchsrc", 0, "switchsrc element");
-}
-
-static void
-gst_switch_src_class_init (GstSwitchSrcClass * klass)
-{
-  GObjectClass *oklass = G_OBJECT_CLASS (klass);
-  GstElementClass *eklass = GST_ELEMENT_CLASS (klass);
-  static GstStaticPadTemplate src_template = GST_STATIC_PAD_TEMPLATE ("src",
-      GST_PAD_SRC,
-      GST_PAD_ALWAYS,
-      GST_STATIC_CAPS_ANY);
-  GstPadTemplate *child_pad_templ;
-
-  oklass->dispose = gst_switch_src_dispose;
-  eklass->change_state = gst_switch_src_change_state;
-
-  /* Provide a default pad template if the child didn't */
-  child_pad_templ = gst_element_class_get_pad_template (eklass, "src");
-  if (child_pad_templ == NULL) {
-    gst_element_class_add_pad_template (eklass,
-        gst_static_pad_template_get (&src_template));
-  }
-}
-
-static gboolean
-gst_switch_src_reset (GstSwitchSrc * src)
-{
-  /* this will install fakesrc if no other child has been set,
-   * otherwise we rely on the subclass to know when to unset its
-   * custom kid */
-  if (src->kid == NULL) {
-    return gst_switch_src_set_child (src, NULL);
-  }
-
-  return TRUE;
-}
-
-static void
-gst_switch_src_init (GstSwitchSrc * src, GstSwitchSrcClass * g_class)
-{
-  GstElementClass *eklass = GST_ELEMENT_GET_CLASS (src);
-  GstPadTemplate *templ;
-
-  templ = gst_element_class_get_pad_template (eklass, "src");
-  src->pad = gst_ghost_pad_new_no_target_from_template ("src", templ);
-  gst_element_add_pad (GST_ELEMENT (src), src->pad);
-
-  gst_switch_src_reset (src);
-
-  GST_OBJECT_FLAG_SET (src, GST_ELEMENT_IS_SOURCE);
-}
-
-static void
-gst_switch_src_dispose (GObject * object)
-{
-  GstSwitchSrc *src = GST_SWITCH_SRC (object);
-  GstObject *new_kid, *kid;
-
-  GST_OBJECT_LOCK (src);
-  new_kid = GST_OBJECT_CAST (src->new_kid);
-  src->new_kid = NULL;
-
-  kid = GST_OBJECT_CAST (src->kid);
-  src->kid = NULL;
-  GST_OBJECT_UNLOCK (src);
-
-  gst_object_replace (&new_kid, NULL);
-  gst_object_replace (&kid, NULL);
-
-  GST_CALL_PARENT (G_OBJECT_CLASS, dispose, (object));
-}
-
-static gboolean
-gst_switch_src_commit_new_kid (GstSwitchSrc * src)
-{
-  GstPad *targetpad;
-  GstState kid_state;
-  GstElement *new_kid, *old_kid;
-  gboolean is_fakesrc = FALSE;
-  GstBus *bus;
-
-  /* need locking around member accesses */
-  GST_OBJECT_LOCK (src);
-  /* If we're currently changing state, set the child to the next state
-   * we're transitioning too, rather than our current state which is 
-   * about to change */
-  if (GST_STATE_NEXT (src) != GST_STATE_VOID_PENDING)
-    kid_state = GST_STATE_NEXT (src);
-  else
-    kid_state = GST_STATE (src);
-
-  new_kid = src->new_kid ? gst_object_ref (src->new_kid) : NULL;
-  src->new_kid = NULL;
-  GST_OBJECT_UNLOCK (src);
-
-  /* Fakesrc by default if NULL is passed as the new child */
-  if (new_kid == NULL) {
-    GST_DEBUG_OBJECT (src, "Replacing kid with fakesrc");
-    new_kid = gst_element_factory_make ("fakesrc", "testsrc");
-    if (new_kid == NULL) {
-      GST_ERROR_OBJECT (src, "Failed to create fakesrc");
-      return FALSE;
-    }
-    /* Add a reference, as it would if the element came from src->new_kid */
-    gst_object_ref (new_kid);
-    is_fakesrc = TRUE;
-  } else {
-    GST_DEBUG_OBJECT (src, "Setting new kid");
-  }
-
-  /* set temporary bus of our own to catch error messages from the child
-   * (could we just set our own bus on it, or would the state change messages
-   * from the not-yet-added element confuse the state change algorithm? Let's
-   * play it safe for now) */
-  bus = gst_bus_new ();
-  gst_element_set_bus (new_kid, bus);
-  gst_object_unref (bus);
-
-  if (gst_element_set_state (new_kid, kid_state) == GST_STATE_CHANGE_FAILURE) {
-    GstMessage *msg;
-
-    /* check if child posted an error message and if so re-post it on our bus
-     * so that the application gets to see a decent error and not our generic
-     * fallback error message which is completely indecipherable to the user */
-    msg = gst_bus_pop_filtered (GST_ELEMENT_BUS (new_kid), GST_MESSAGE_ERROR);
-    if (msg) {
-      GST_INFO_OBJECT (src, "Forwarding kid error: %" GST_PTR_FORMAT, msg);
-      gst_element_post_message (GST_ELEMENT (src), msg);
-    }
-    GST_ELEMENT_ERROR (src, CORE, STATE_CHANGE, (NULL),
-        ("Failed to set state on new child."));
-    gst_element_set_bus (new_kid, NULL);
-    gst_object_unref (new_kid);
-    return FALSE;
-  }
-  gst_element_set_bus (new_kid, NULL);
-  gst_bin_add (GST_BIN (src), new_kid);
-
-  /* Now, replace the existing child */
-  GST_OBJECT_LOCK (src);
-  old_kid = src->kid;
-  src->kid = new_kid;
-  /* Mark whether a custom kid or fakesrc has been installed */
-  src->have_kid = !is_fakesrc;
-  GST_OBJECT_UNLOCK (src);
-
-  /* kill old element */
-  if (old_kid) {
-    GST_DEBUG_OBJECT (src, "Removing old kid %" GST_PTR_FORMAT, old_kid);
-    gst_element_set_state (old_kid, GST_STATE_NULL);
-    gst_bin_remove (GST_BIN (src), old_kid);
-    gst_object_unref (old_kid);
-    /* Don't lose the SOURCE flag */
-    GST_OBJECT_FLAG_SET (src, GST_ELEMENT_IS_SOURCE);
-  }
-
-  /* re-attach ghostpad */
-  GST_DEBUG_OBJECT (src, "Creating new ghostpad");
-  targetpad = gst_element_get_static_pad (src->kid, "src");
-  gst_ghost_pad_set_target (GST_GHOST_PAD (src->pad), targetpad);
-  gst_object_unref (targetpad);
-  GST_DEBUG_OBJECT (src, "done changing child of switchsrc");
-
-  return TRUE;
-}
-
-gboolean
-gst_switch_src_set_child (GstSwitchSrc * src, GstElement * new_kid)
-{
-  GstState cur, next;
-  GstElement **p_kid;
-
-  /* Nothing to do if clearing the child and we've already installed fakesrc */
-  if (new_kid == NULL && src->kid != NULL && src->have_kid == FALSE)
-    return TRUE;
-
-  /* Store the new kid to be committed later */
-  GST_OBJECT_LOCK (src);
-  cur = GST_STATE (src);
-  next = GST_STATE_NEXT (src);
-  p_kid = &src->new_kid;
-  gst_object_replace ((GstObject **) p_kid, (GstObject *) new_kid);
-  GST_OBJECT_UNLOCK (src);
-  if (new_kid)
-    gst_object_unref (new_kid);
-
-  /* Sometime, it would be lovely to allow src changes even when
-   * already running */
-  /* FIXME: Block the pad and replace the kid when it completes */
-  if (cur > GST_STATE_READY || next == GST_STATE_PAUSED) {
-    GST_DEBUG_OBJECT (src,
-        "Switch-src is already running. Ignoring change of child.");
-    gst_object_unref (new_kid);
-    return TRUE;
-  }
-
-  return gst_switch_src_commit_new_kid (src);
-}
-
-static GstStateChangeReturn
-gst_switch_src_change_state (GstElement * element, GstStateChange transition)
-{
-  GstStateChangeReturn ret = GST_STATE_CHANGE_SUCCESS;
-  GstSwitchSrc *src = GST_SWITCH_SRC (element);
-
-  ret = GST_CALL_PARENT_WITH_DEFAULT (GST_ELEMENT_CLASS, change_state,
-      (element, transition), GST_STATE_CHANGE_SUCCESS);
-
-  switch (transition) {
-    case GST_STATE_CHANGE_READY_TO_NULL:
-      if (!gst_switch_src_reset (src))
-        ret = GST_STATE_CHANGE_FAILURE;
-      break;
-    default:
-      break;
-  }
-
-  return ret;
-}
diff --git a/ext/gsettings/gstswitchsrc.h b/ext/gsettings/gstswitchsrc.h
deleted file mode 100644
index 6c698a1..0000000
--- a/ext/gsettings/gstswitchsrc.h
+++ /dev/null
@@ -1,57 +0,0 @@
-/* GStreamer
- *
- * Copyright (c) 2005 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
- * Copyright (c) 2005 Tim-Philipp Müller <tim centricular net>
- * Copyright (c) 2007 Jan Schmidt <thaytan@mad.scientist.com>
- * Copyright (c) 2010 Sebastian Dröge <sebastian.droege@collabora.co.uk>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-#ifndef __GST_SWITCH_SRC_H__
-#define __GST_SWITCH_SRC_H__
-
-#include <gst/gst.h>
-
-G_BEGIN_DECLS
-
-#define GST_TYPE_SWITCH_SRC            (gst_switch_src_get_type ())
-#define GST_SWITCH_SRC(obj)            (G_TYPE_CHECK_INSTANCE_CAST ((obj), GST_TYPE_SWITCH_SRC, GstSwitchSrc))
-#define GST_SWITCH_SRC_CLASS(klass)    (G_TYPE_CHECK_CLASS_CAST ((klass), GST_TYPE_SWITCH_SRC, GstSwitchSrcClass))
-#define GST_IS_SWITCH_SRC(obj)         (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GST_TYPE_SWITCH_SRC))
-#define GST_IS_SWITCH_SRC_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GST_TYPE_SWITCH_SRC))
-
-typedef struct _GstSwitchSrc {
-  GstBin parent;
-
-  GstElement *kid;
-  GstElement *new_kid;
-  GstPad *pad;
-
-  /* If a custom child has been set... */
-  gboolean have_kid;
-} GstSwitchSrc;
-
-typedef struct _GstSwitchSrcClass {
-  GstBinClass parent_class;
-} GstSwitchSrcClass;
-
-GType     gst_switch_src_get_type   (void);
-gboolean  gst_switch_src_set_child  (GstSwitchSrc *ssrc, GstElement *new_kid);
-
-G_END_DECLS
-
-#endif /* __GST_SWITCH_SRC_H__ */
diff --git a/ext/gsettings/org.freedesktop.gstreamer.default-elements.gschema.xml b/ext/gsettings/org.freedesktop.gstreamer.default-elements.gschema.xml
deleted file mode 100644
index ed0c4ce..0000000
--- a/ext/gsettings/org.freedesktop.gstreamer.default-elements.gschema.xml
+++ /dev/null
@@ -1,94 +0,0 @@
-<schemalist>
-  <schema id="org.freedesktop.gstreamer-1.0.default-elements" path="/desktop/gstreamer/1.0/default-elements/" gettext-domain="gst-plugins-bad-1.0">
-    <key name="sounds-audiosink" type="s">
-      <default>"autoaudiosink"</default>
-      <summary>default GStreamer sound events audiosink</summary>
-      <description>GStreamer can play audio using any number of
-      output elements. Some possible choices are osssink, pulsesink
-      and alsasink. The audiosink can be a partial pipeline instead
-      of just one element.</description>
-    </key>
-    <key name="sounds-audiosink-description" type="s">
-      <default>"Default"</default>
-      <summary>description for default GStreamer sound events audiosink</summary>
-      <description>Describes the selected audiosink element.</description>
-    </key>
-    <key name="chat-audiosink" type="s">
-      <default>"autoaudiosink"</default>
-      <summary>default GStreamer audiosink for Audio/Video Conferencing</summary>
-      <description>GStreamer can play audio using any number of
-      output elements. Some possible choices are osssink, pulsesink
-      and alsasink. The audiosink can be a partial pipeline instead
-      of just one element.</description>
-    </key>
-    <key name="chat-audiosink-description" type="s">
-      <default>"Default"</default>
-      <summary>description for default GStreamer audiosink for Audio/Video Conferencing</summary>
-      <description>Describes the selected audiosink element.</description>
-    </key>
-    <key name="music-audiosink" type="s">
-      <default>"autoaudiosink"</default>
-      <summary>default GStreamer audiosink for Music and Movies</summary>
-      <description>GStreamer can play audio using any number of
-      output elements. Some possible choices are osssink, pulsesink
-      and alsasink. The audiosink can be a partial pipeline instead
-      of just one element.</description>
-    </key>
-    <key name="music-audiosink-description" type="s">
-      <default>"Default"</default>
-      <summary>description for default GStreamer audiosink for Music and Movies</summary>
-      <description>Describes the selected audiosink element.</description>
-    </key>
-    <key name="videosink" type="s">
-      <default>"autovideosink"</default>
-      <summary>default GStreamer videosink</summary>
-      <description>GStreamer can play video using any number of
-      output elements. Some possible choices are xvimagesink,
-      ximagesink, sdlvideosink and aasink. The videosink can be
-      a partial pipeline instead of just one element.</description>
-    </key>
-    <key name="videosink-description" type="s">
-      <default>"Default"</default>
-      <summary>description for default GStreamer videosink</summary>
-      <description>Describes the selected videosink element.</description>
-    </key>
-    <key name="audiosrc" type="s">
-      <default>"alsasrc"</default>
-      <summary>default GStreamer audiosrc</summary>
-      <description>GStreamer can record audio using any number of
-      input elements. Some possible choices are osssrc, pulsesrc and
-      alsasrc. The audio source can be a partial pipeline instead of
-      just one element.</description>
-    </key>
-    <key name="audiosrc-description" type="s">
-      <default>"Default"</default>
-      <summary>description for default GStreamer audiosrc</summary>
-      <description>Describes the selected audiosrc element.</description>
-    </key>
-    <key name="videosrc" type="s">
-      <default>"v4l2src"</default>
-      <summary>default GStreamer videosrc</summary>
-      <description>GStreamer can record video from any number of input elements.
-      Some possible choices are v4lsrc, v4l2src and videotestsrc. The video
-      source can be a partial pipeline instead of just one element.</description>
-    </key>
-    <key name="videosrc-description" type="s">
-      <default>"Default"</default>
-      <summary>description for default GStreamer videosrc</summary>
-      <description>Describes the selected videosrc element.</description>
-    </key>
-    <key name="visualization" type="s">
-      <default>"goom"</default>
-      <summary>default GStreamer visualization</summary>
-      <description>GStreamer can put visualization plugins in a pipeline to
-      transform audio streams in video frames. Some possible choices are
-      goom, goom2k1 and synaesthesia. The visualization plugin can be a
-      partial pipeline instead of just one element.</description>
-    </key>
-    <key name="visualization-description" type="s">
-      <default>"Default"</default>
-      <summary>description for default GStreamer visualization</summary>
-      <description>Describes the selected visualization element.</description>
-    </key>
-  </schema>
-</schemalist>
diff --git a/ext/gsettings/org.freedesktop.gstreamer.default-elements.gschema.xml.in b/ext/gsettings/org.freedesktop.gstreamer.default-elements.gschema.xml.in
deleted file mode 100644
index 1a13b3a..0000000
--- a/ext/gsettings/org.freedesktop.gstreamer.default-elements.gschema.xml.in
+++ /dev/null
@@ -1,94 +0,0 @@
-<schemalist>
-  <schema id="org.freedesktop.gstreamer-@GST_API_VERSION@.default-elements" path="/desktop/gstreamer/@GST_API_VERSION@/default-elements/" gettext-domain="@GETTEXT_PACKAGE@">
-    <key name="sounds-audiosink" type="s">
-      <default>"@DEFAULT_AUDIOSINK@"</default>
-      <summary>default GStreamer sound events audiosink</summary>
-      <description>GStreamer can play audio using any number of
-      output elements. Some possible choices are osssink, pulsesink
-      and alsasink. The audiosink can be a partial pipeline instead
-      of just one element.</description>
-    </key>
-    <key name="sounds-audiosink-description" type="s">
-      <default>"Default"</default>
-      <summary>description for default GStreamer sound events audiosink</summary>
-      <description>Describes the selected audiosink element.</description>
-    </key>
-    <key name="chat-audiosink" type="s">
-      <default>"@DEFAULT_AUDIOSINK@"</default>
-      <summary>default GStreamer audiosink for Audio/Video Conferencing</summary>
-      <description>GStreamer can play audio using any number of
-      output elements. Some possible choices are osssink, pulsesink
-      and alsasink. The audiosink can be a partial pipeline instead
-      of just one element.</description>
-    </key>
-    <key name="chat-audiosink-description" type="s">
-      <default>"Default"</default>
-      <summary>description for default GStreamer audiosink for Audio/Video Conferencing</summary>
-      <description>Describes the selected audiosink element.</description>
-    </key>
-    <key name="music-audiosink" type="s">
-      <default>"@DEFAULT_AUDIOSINK@"</default>
-      <summary>default GStreamer audiosink for Music and Movies</summary>
-      <description>GStreamer can play audio using any number of
-      output elements. Some possible choices are osssink, pulsesink
-      and alsasink. The audiosink can be a partial pipeline instead
-      of just one element.</description>
-    </key>
-    <key name="music-audiosink-description" type="s">
-      <default>"Default"</default>
-      <summary>description for default GStreamer audiosink for Music and Movies</summary>
-      <description>Describes the selected audiosink element.</description>
-    </key>
-    <key name="videosink" type="s">
-      <default>"@DEFAULT_VIDEOSINK@"</default>
-      <summary>default GStreamer videosink</summary>
-      <description>GStreamer can play video using any number of
-      output elements. Some possible choices are xvimagesink,
-      ximagesink, sdlvideosink and aasink. The videosink can be
-      a partial pipeline instead of just one element.</description>
-    </key>
-    <key name="videosink-description" type="s">
-      <default>"Default"</default>
-      <summary>description for default GStreamer videosink</summary>
-      <description>Describes the selected videosink element.</description>
-    </key>
-    <key name="audiosrc" type="s">
-      <default>"@DEFAULT_AUDIOSRC@"</default>
-      <summary>default GStreamer audiosrc</summary>
-      <description>GStreamer can record audio using any number of
-      input elements. Some possible choices are osssrc, pulsesrc and
-      alsasrc. The audio source can be a partial pipeline instead of
-      just one element.</description>
-    </key>
-    <key name="audiosrc-description" type="s">
-      <default>"Default"</default>
-      <summary>description for default GStreamer audiosrc</summary>
-      <description>Describes the selected audiosrc element.</description>
-    </key>
-    <key name="videosrc" type="s">
-      <default>"@DEFAULT_VIDEOSRC@"</default>
-      <summary>default GStreamer videosrc</summary>
-      <description>GStreamer can record video from any number of input elements.
-      Some possible choices are v4lsrc, v4l2src and videotestsrc. The video
-      source can be a partial pipeline instead of just one element.</description>
-    </key>
-    <key name="videosrc-description" type="s">
-      <default>"Default"</default>
-      <summary>description for default GStreamer videosrc</summary>
-      <description>Describes the selected videosrc element.</description>
-    </key>
-    <key name="visualization" type="s">
-      <default>"@DEFAULT_VISUALIZER@"</default>
-      <summary>default GStreamer visualization</summary>
-      <description>GStreamer can put visualization plugins in a pipeline to
-      transform audio streams in video frames. Some possible choices are
-      goom, goom2k1 and synaesthesia. The visualization plugin can be a
-      partial pipeline instead of just one element.</description>
-    </key>
-    <key name="visualization-description" type="s">
-      <default>"Default"</default>
-      <summary>description for default GStreamer visualization</summary>
-      <description>Describes the selected visualization element.</description>
-    </key>
-  </schema>
-</schemalist>
diff --git a/ext/gsettings/plugin.c b/ext/gsettings/plugin.c
deleted file mode 100644
index b264967..0000000
--- a/ext/gsettings/plugin.c
+++ /dev/null
@@ -1,50 +0,0 @@
-/* GStreamer
- * Copyright (C) 2010 Sebastian Dröge <sebastian.droege@collabora.co.uk>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <gst/gst.h>
-
-#include "gstgsettingsaudiosrc.h"
-#include "gstgsettingsaudiosink.h"
-#include "gstgsettingsvideosrc.h"
-#include "gstgsettingsvideosink.h"
-
-static gboolean
-plugin_init (GstPlugin * plugin)
-{
-  if (!gst_element_register (plugin, "gsettingsaudiosink", GST_RANK_NONE,
-          GST_TYPE_GSETTINGS_AUDIO_SINK) ||
-      !gst_element_register (plugin, "gsettingsaudiosrc", GST_RANK_NONE,
-          GST_TYPE_GSETTINGS_AUDIO_SRC) ||
-      !gst_element_register (plugin, "gsettingsvideosink", GST_RANK_NONE,
-          GST_TYPE_GSETTINGS_VIDEO_SINK) ||
-      !gst_element_register (plugin, "gsettingsvideosrc", GST_RANK_NONE,
-          GST_TYPE_GSETTINGS_VIDEO_SRC))
-    return FALSE;
-
-  return TRUE;
-}
-
-GST_PLUGIN_DEFINE (GST_VERSION_MAJOR,
-    GST_VERSION_MINOR,
-    gsettings,
-    "GSettings plugin",
-    plugin_init, VERSION, "LGPL", GST_PACKAGE_NAME, GST_PACKAGE_ORIGIN)
diff --git a/ext/gsm/Makefile.in b/ext/gsm/Makefile.in
index 42c750b..8177cbf 100644
--- a/ext/gsm/Makefile.in
+++ b/ext/gsm/Makefile.in
@@ -116,16 +116,15 @@
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
 	$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
-	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gsettings.m4 \
-	$(top_srcdir)/m4/gst-fionread.m4 $(top_srcdir)/m4/gst-sdl.m4 \
-	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
-	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
-	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libgcrypt.m4 \
-	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
-	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
-	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
-	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
-	$(top_srcdir)/configure.ac
+	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gst-fionread.m4 \
+	$(top_srcdir)/m4/gst-sdl.m4 $(top_srcdir)/m4/iconv.m4 \
+	$(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \
+	$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
+	$(top_srcdir)/m4/libgcrypt.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
+	$(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \
@@ -275,6 +274,8 @@
 CLUTTER_X11_LIBS = @CLUTTER_X11_LIBS@
 CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
+CUDA_CFLAGS = @CUDA_CFLAGS@
+CUDA_LIBS = @CUDA_LIBS@
 CURL_CFLAGS = @CURL_CFLAGS@
 CURL_LIBS = @CURL_LIBS@
 CXX = @CXX@
@@ -312,6 +313,8 @@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
+EGL_CFLAGS = @EGL_CFLAGS@
+EGL_LIBS = @EGL_LIBS@
 EGREP = @EGREP@
 ERROR_CFLAGS = @ERROR_CFLAGS@
 ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
@@ -320,7 +323,6 @@
 EXIF_CFLAGS = @EXIF_CFLAGS@
 EXIF_LIBS = @EXIF_LIBS@
 FAAC_LIBS = @FAAC_LIBS@
-FAAD_IS_NEAAC = @FAAD_IS_NEAAC@
 FAAD_LIBS = @FAAD_LIBS@
 FFLAGS = @FFLAGS@
 FGREP = @FGREP@
@@ -339,8 +341,9 @@
 GIO_LIBS = @GIO_LIBS@
 GIO_UNIX_CFLAGS = @GIO_UNIX_CFLAGS@
 GIO_UNIX_LIBS = @GIO_UNIX_LIBS@
+GLES2_CFLAGS = @GLES2_CFLAGS@
+GLES2_LIBS = @GLES2_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
-GLIB_COMPILE_SCHEMAS = @GLIB_COMPILE_SCHEMAS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
@@ -357,16 +360,17 @@
 GMODULE_NO_EXPORT_LIBS = @GMODULE_NO_EXPORT_LIBS@
 GMSGFMT = @GMSGFMT@
 GMSGFMT_015 = @GMSGFMT_015@
+GNUSTL_CFLAGS = @GNUSTL_CFLAGS@
+GNUSTL_LIBS = @GNUSTL_LIBS@
 GRAPHENE_CFLAGS = @GRAPHENE_CFLAGS@
 GRAPHENE_LIBS = @GRAPHENE_LIBS@
 GREP = @GREP@
-GSETTINGS_CFLAGS = @GSETTINGS_CFLAGS@
-GSETTINGS_DISABLE_SCHEMAS_COMPILE = @GSETTINGS_DISABLE_SCHEMAS_COMPILE@
-GSETTINGS_LIBS = @GSETTINGS_LIBS@
 GSM_LIBS = @GSM_LIBS@
 GSTPB_PLUGINS_DIR = @GSTPB_PLUGINS_DIR@
 GSTPB_PREFIX = @GSTPB_PREFIX@
 GST_AGE = @GST_AGE@
+GST_ALLOCATORS_CFLAGS = @GST_ALLOCATORS_CFLAGS@
+GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
 GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
 GST_API_VERSION = @GST_API_VERSION@
 GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
@@ -392,6 +396,8 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PBUTILS_CFLAGS = @GST_PBUTILS_CFLAGS@
+GST_PBUTILS_LIBS = @GST_PBUTILS_LIBS@
 GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BAD_CFLAGS = @GST_PLUGINS_BAD_CFLAGS@
@@ -417,6 +423,8 @@
 GST_PREFIX = @GST_PREFIX@
 GST_REVISION = @GST_REVISION@
 GST_TOOLS_DIR = @GST_TOOLS_DIR@
+GST_VIDEO_CFLAGS = @GST_VIDEO_CFLAGS@
+GST_VIDEO_LIBS = @GST_VIDEO_LIBS@
 GTK3_CFLAGS = @GTK3_CFLAGS@
 GTK3_GL_CFLAGS = @GTK3_GL_CFLAGS@
 GTK3_GL_LIBS = @GTK3_GL_LIBS@
@@ -518,6 +526,7 @@
 LTLIBICONV = @LTLIBICONV@
 LTLIBINTL = @LTLIBINTL@
 LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
 MANIFEST_TOOL = @MANIFEST_TOOL@
@@ -531,8 +540,6 @@
 MODPLUG_LIBS = @MODPLUG_LIBS@
 MPEG2ENC_CFLAGS = @MPEG2ENC_CFLAGS@
 MPEG2ENC_LIBS = @MPEG2ENC_LIBS@
-MPG123_CFLAGS = @MPG123_CFLAGS@
-MPG123_LIBS = @MPG123_LIBS@
 MPLEX_CFLAGS = @MPLEX_CFLAGS@
 MPLEX_LDFLAGS = @MPLEX_LDFLAGS@
 MPLEX_LIBS = @MPLEX_LIBS@
@@ -548,6 +555,8 @@
 NETTLE_LIBS = @NETTLE_LIBS@
 NM = @NM@
 NMEDIT = @NMEDIT@
+NVENCODE_CFLAGS = @NVENCODE_CFLAGS@
+NVENCODE_LIBS = @NVENCODE_LIBS@
 OBJC = @OBJC@
 OBJCDEPMODE = @OBJCDEPMODE@
 OBJCFLAGS = @OBJCFLAGS@
@@ -605,16 +614,18 @@
 PYTHON_PLATFORM = @PYTHON_PLATFORM@
 PYTHON_PREFIX = @PYTHON_PREFIX@
 PYTHON_VERSION = @PYTHON_VERSION@
+QT_ANDROID_CFLAGS = @QT_ANDROID_CFLAGS@
+QT_ANDROID_LIBS = @QT_ANDROID_LIBS@
 QT_CFLAGS = @QT_CFLAGS@
 QT_LIBS = @QT_LIBS@
+QT_MAC_CFLAGS = @QT_MAC_CFLAGS@
+QT_MAC_LIBS = @QT_MAC_LIBS@
 QT_WAYLAND_CFLAGS = @QT_WAYLAND_CFLAGS@
 QT_WAYLAND_LIBS = @QT_WAYLAND_LIBS@
 QT_X11_CFLAGS = @QT_X11_CFLAGS@
 QT_X11_LIBS = @QT_X11_LIBS@
 RANLIB = @RANLIB@
 RCC = @RCC@
-RSVG_2_36_2_CFLAGS = @RSVG_2_36_2_CFLAGS@
-RSVG_2_36_2_LIBS = @RSVG_2_36_2_LIBS@
 RSVG_CFLAGS = @RSVG_CFLAGS@
 RSVG_LIBS = @RSVG_LIBS@
 RTMP_CFLAGS = @RTMP_CFLAGS@
@@ -666,6 +677,7 @@
 VOAACENC_LIBS = @VOAACENC_LIBS@
 VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
 VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VULKAN_LIBS = @VULKAN_LIBS@
 WARNING_CFLAGS = @WARNING_CFLAGS@
 WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
 WARNING_OBJCFLAGS = @WARNING_OBJCFLAGS@
@@ -676,6 +688,7 @@
 WAYLAND_LIBS = @WAYLAND_LIBS@
 WEBP_CFLAGS = @WEBP_CFLAGS@
 WEBP_LIBS = @WEBP_LIBS@
+WGET = @WGET@
 WILDMIDI_CFLAGS = @WILDMIDI_CFLAGS@
 WILDMIDI_LIBS = @WILDMIDI_LIBS@
 WINKS_LIBS = @WINKS_LIBS@
@@ -685,6 +698,8 @@
 X11_LIBS = @X11_LIBS@
 X265_CFLAGS = @X265_CFLAGS@
 X265_LIBS = @X265_LIBS@
+XCB_CFLAGS = @XCB_CFLAGS@
+XCB_LIBS = @XCB_LIBS@
 XCOMPOSITE_CFLAGS = @XCOMPOSITE_CFLAGS@
 XCOMPOSITE_LIBS = @XCOMPOSITE_LIBS@
 XGETTEXT = @XGETTEXT@
@@ -722,7 +737,6 @@
 docdir = @docdir@
 dvidir = @dvidir@
 exec_prefix = @exec_prefix@
-gsettingsschemadir = @gsettingsschemadir@
 host = @host@
 host_alias = @host_alias@
 host_cpu = @host_cpu@
diff --git a/ext/gtk/Makefile.in b/ext/gtk/Makefile.in
index 43ceb56..36c2551 100644
--- a/ext/gtk/Makefile.in
+++ b/ext/gtk/Makefile.in
@@ -119,16 +119,15 @@
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
 	$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
-	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gsettings.m4 \
-	$(top_srcdir)/m4/gst-fionread.m4 $(top_srcdir)/m4/gst-sdl.m4 \
-	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
-	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
-	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libgcrypt.m4 \
-	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
-	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
-	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
-	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
-	$(top_srcdir)/configure.ac
+	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gst-fionread.m4 \
+	$(top_srcdir)/m4/gst-sdl.m4 $(top_srcdir)/m4/iconv.m4 \
+	$(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \
+	$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
+	$(top_srcdir)/m4/libgcrypt.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
+	$(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
@@ -288,6 +287,8 @@
 CLUTTER_X11_LIBS = @CLUTTER_X11_LIBS@
 CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
+CUDA_CFLAGS = @CUDA_CFLAGS@
+CUDA_LIBS = @CUDA_LIBS@
 CURL_CFLAGS = @CURL_CFLAGS@
 CURL_LIBS = @CURL_LIBS@
 CXX = @CXX@
@@ -325,6 +326,8 @@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
+EGL_CFLAGS = @EGL_CFLAGS@
+EGL_LIBS = @EGL_LIBS@
 EGREP = @EGREP@
 ERROR_CFLAGS = @ERROR_CFLAGS@
 ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
@@ -333,7 +336,6 @@
 EXIF_CFLAGS = @EXIF_CFLAGS@
 EXIF_LIBS = @EXIF_LIBS@
 FAAC_LIBS = @FAAC_LIBS@
-FAAD_IS_NEAAC = @FAAD_IS_NEAAC@
 FAAD_LIBS = @FAAD_LIBS@
 FFLAGS = @FFLAGS@
 FGREP = @FGREP@
@@ -352,8 +354,9 @@
 GIO_LIBS = @GIO_LIBS@
 GIO_UNIX_CFLAGS = @GIO_UNIX_CFLAGS@
 GIO_UNIX_LIBS = @GIO_UNIX_LIBS@
+GLES2_CFLAGS = @GLES2_CFLAGS@
+GLES2_LIBS = @GLES2_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
-GLIB_COMPILE_SCHEMAS = @GLIB_COMPILE_SCHEMAS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
@@ -370,16 +373,17 @@
 GMODULE_NO_EXPORT_LIBS = @GMODULE_NO_EXPORT_LIBS@
 GMSGFMT = @GMSGFMT@
 GMSGFMT_015 = @GMSGFMT_015@
+GNUSTL_CFLAGS = @GNUSTL_CFLAGS@
+GNUSTL_LIBS = @GNUSTL_LIBS@
 GRAPHENE_CFLAGS = @GRAPHENE_CFLAGS@
 GRAPHENE_LIBS = @GRAPHENE_LIBS@
 GREP = @GREP@
-GSETTINGS_CFLAGS = @GSETTINGS_CFLAGS@
-GSETTINGS_DISABLE_SCHEMAS_COMPILE = @GSETTINGS_DISABLE_SCHEMAS_COMPILE@
-GSETTINGS_LIBS = @GSETTINGS_LIBS@
 GSM_LIBS = @GSM_LIBS@
 GSTPB_PLUGINS_DIR = @GSTPB_PLUGINS_DIR@
 GSTPB_PREFIX = @GSTPB_PREFIX@
 GST_AGE = @GST_AGE@
+GST_ALLOCATORS_CFLAGS = @GST_ALLOCATORS_CFLAGS@
+GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
 GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
 GST_API_VERSION = @GST_API_VERSION@
 GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
@@ -405,6 +409,8 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PBUTILS_CFLAGS = @GST_PBUTILS_CFLAGS@
+GST_PBUTILS_LIBS = @GST_PBUTILS_LIBS@
 GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BAD_CFLAGS = @GST_PLUGINS_BAD_CFLAGS@
@@ -430,6 +436,8 @@
 GST_PREFIX = @GST_PREFIX@
 GST_REVISION = @GST_REVISION@
 GST_TOOLS_DIR = @GST_TOOLS_DIR@
+GST_VIDEO_CFLAGS = @GST_VIDEO_CFLAGS@
+GST_VIDEO_LIBS = @GST_VIDEO_LIBS@
 GTK3_CFLAGS = @GTK3_CFLAGS@
 GTK3_GL_CFLAGS = @GTK3_GL_CFLAGS@
 GTK3_GL_LIBS = @GTK3_GL_LIBS@
@@ -531,6 +539,7 @@
 LTLIBICONV = @LTLIBICONV@
 LTLIBINTL = @LTLIBINTL@
 LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
 MANIFEST_TOOL = @MANIFEST_TOOL@
@@ -544,8 +553,6 @@
 MODPLUG_LIBS = @MODPLUG_LIBS@
 MPEG2ENC_CFLAGS = @MPEG2ENC_CFLAGS@
 MPEG2ENC_LIBS = @MPEG2ENC_LIBS@
-MPG123_CFLAGS = @MPG123_CFLAGS@
-MPG123_LIBS = @MPG123_LIBS@
 MPLEX_CFLAGS = @MPLEX_CFLAGS@
 MPLEX_LDFLAGS = @MPLEX_LDFLAGS@
 MPLEX_LIBS = @MPLEX_LIBS@
@@ -561,6 +568,8 @@
 NETTLE_LIBS = @NETTLE_LIBS@
 NM = @NM@
 NMEDIT = @NMEDIT@
+NVENCODE_CFLAGS = @NVENCODE_CFLAGS@
+NVENCODE_LIBS = @NVENCODE_LIBS@
 OBJC = @OBJC@
 OBJCDEPMODE = @OBJCDEPMODE@
 OBJCFLAGS = @OBJCFLAGS@
@@ -618,16 +627,18 @@
 PYTHON_PLATFORM = @PYTHON_PLATFORM@
 PYTHON_PREFIX = @PYTHON_PREFIX@
 PYTHON_VERSION = @PYTHON_VERSION@
+QT_ANDROID_CFLAGS = @QT_ANDROID_CFLAGS@
+QT_ANDROID_LIBS = @QT_ANDROID_LIBS@
 QT_CFLAGS = @QT_CFLAGS@
 QT_LIBS = @QT_LIBS@
+QT_MAC_CFLAGS = @QT_MAC_CFLAGS@
+QT_MAC_LIBS = @QT_MAC_LIBS@
 QT_WAYLAND_CFLAGS = @QT_WAYLAND_CFLAGS@
 QT_WAYLAND_LIBS = @QT_WAYLAND_LIBS@
 QT_X11_CFLAGS = @QT_X11_CFLAGS@
 QT_X11_LIBS = @QT_X11_LIBS@
 RANLIB = @RANLIB@
 RCC = @RCC@
-RSVG_2_36_2_CFLAGS = @RSVG_2_36_2_CFLAGS@
-RSVG_2_36_2_LIBS = @RSVG_2_36_2_LIBS@
 RSVG_CFLAGS = @RSVG_CFLAGS@
 RSVG_LIBS = @RSVG_LIBS@
 RTMP_CFLAGS = @RTMP_CFLAGS@
@@ -679,6 +690,7 @@
 VOAACENC_LIBS = @VOAACENC_LIBS@
 VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
 VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VULKAN_LIBS = @VULKAN_LIBS@
 WARNING_CFLAGS = @WARNING_CFLAGS@
 WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
 WARNING_OBJCFLAGS = @WARNING_OBJCFLAGS@
@@ -689,6 +701,7 @@
 WAYLAND_LIBS = @WAYLAND_LIBS@
 WEBP_CFLAGS = @WEBP_CFLAGS@
 WEBP_LIBS = @WEBP_LIBS@
+WGET = @WGET@
 WILDMIDI_CFLAGS = @WILDMIDI_CFLAGS@
 WILDMIDI_LIBS = @WILDMIDI_LIBS@
 WINKS_LIBS = @WINKS_LIBS@
@@ -698,6 +711,8 @@
 X11_LIBS = @X11_LIBS@
 X265_CFLAGS = @X265_CFLAGS@
 X265_LIBS = @X265_LIBS@
+XCB_CFLAGS = @XCB_CFLAGS@
+XCB_LIBS = @XCB_LIBS@
 XCOMPOSITE_CFLAGS = @XCOMPOSITE_CFLAGS@
 XCOMPOSITE_LIBS = @XCOMPOSITE_LIBS@
 XGETTEXT = @XGETTEXT@
@@ -735,7 +750,6 @@
 docdir = @docdir@
 dvidir = @dvidir@
 exec_prefix = @exec_prefix@
-gsettingsschemadir = @gsettingsschemadir@
 host = @host@
 host_alias = @host_alias@
 host_cpu = @host_cpu@
diff --git a/ext/gtk/gstgtkbasesink.c b/ext/gtk/gstgtkbasesink.c
index e192940..f0019bf 100644
--- a/ext/gtk/gstgtkbasesink.c
+++ b/ext/gtk/gstgtkbasesink.c
@@ -141,9 +141,16 @@
 static void
 gst_gtk_base_sink_finalize (GObject * object)
 {
-  GstGtkBaseSink *gtk_sink = GST_GTK_BASE_SINK (object);;
+  GstGtkBaseSink *gtk_sink = GST_GTK_BASE_SINK (object);
+
+  GST_OBJECT_LOCK (gtk_sink);
+  if (gtk_sink->window && gtk_sink->window_destroy_id)
+    g_signal_handler_disconnect (gtk_sink->window, gtk_sink->window_destroy_id);
+  if (gtk_sink->widget && gtk_sink->widget_destroy_id)
+    g_signal_handler_disconnect (gtk_sink->widget, gtk_sink->widget_destroy_id);
 
   g_clear_object (&gtk_sink->widget);
+  GST_OBJECT_UNLOCK (gtk_sink);
 
   G_OBJECT_CLASS (parent_class)->finalize (object);
 }
@@ -194,7 +201,7 @@
   /* Take the floating ref, other wise the destruction of the container will
    * make this widget disapear possibly before we are done. */
   gst_object_ref_sink (gtk_sink->widget);
-  g_signal_connect (gtk_sink->widget, "destroy",
+  gtk_sink->widget_destroy_id = g_signal_connect (gtk_sink->widget, "destroy",
       G_CALLBACK (widget_destroy_cb), gtk_sink);
 
   /* back pointer */
@@ -316,7 +323,7 @@
     gtk_window_set_default_size (GTK_WINDOW (gst_sink->window), 640, 480);
     gtk_window_set_title (GTK_WINDOW (gst_sink->window), klass->window_title);
     gtk_container_add (GTK_CONTAINER (gst_sink->window), toplevel);
-    g_signal_connect (gst_sink->window, "destroy",
+    gst_sink->window_destroy_id = g_signal_connect (gst_sink->window, "destroy",
         G_CALLBACK (window_destroy_cb), gst_sink);
   }
 
diff --git a/ext/gtk/gstgtkbasesink.h b/ext/gtk/gstgtkbasesink.h
index 7260cd5..ef8c284 100644
--- a/ext/gtk/gstgtkbasesink.h
+++ b/ext/gtk/gstgtkbasesink.h
@@ -69,6 +69,8 @@
   GBinding             *bind_ignore_alpha;
 
   GtkWidget            *window;
+  gulong               widget_destroy_id;
+  gulong               window_destroy_id;
 };
 
 /**
diff --git a/ext/gtk/gtkgstglwidget.c b/ext/gtk/gtkgstglwidget.c
index 7b3f37f..c9ad0b6 100644
--- a/ext/gtk/gtkgstglwidget.c
+++ b/ext/gtk/gtkgstglwidget.c
@@ -52,8 +52,7 @@
 
 G_DEFINE_TYPE_WITH_CODE (GtkGstGLWidget, gtk_gst_gl_widget, GTK_TYPE_GL_AREA,
     GST_DEBUG_CATEGORY_INIT (GST_CAT_DEFAULT, "gtkgstglwidget", 0,
-        "Gtk Gst GL Widget");
-    );
+        "Gtk Gst GL Widget"););
 
 #define GTK_GST_GL_WIDGET_GET_PRIVATE(obj) (G_TYPE_INSTANCE_GET_PRIVATE ((obj), \
     GTK_TYPE_GST_GL_WIDGET, GtkGstGLWidgetPrivate))
@@ -119,11 +118,18 @@
 {
   GtkGstGLWidgetPrivate *priv = gst_widget->priv;
   const GstGLFuncs *gl = priv->context->gl_vtable;
+  GError *error = NULL;
 
-  priv->shader = gst_gl_shader_new (priv->context);
+  gst_gl_insert_debug_marker (priv->other_context, "initializing redisplay");
+  if (!(priv->shader = gst_gl_shader_new_default (priv->context, &error))) {
+    GST_ERROR ("Failed to initialize shader: %s", error->message);
+    return;
+  }
 
-  gst_gl_shader_compile_with_default_vf_and_check (priv->shader,
-      &priv->attr_position, &priv->attr_texture);
+  priv->attr_position =
+      gst_gl_shader_get_attribute_location (priv->shader, "a_position");
+  priv->attr_texture =
+      gst_gl_shader_get_attribute_location (priv->shader, "a_texcoord");
 
   if (gl->GenVertexArrays) {
     gl->GenVertexArrays (1, &priv->vao);
@@ -207,6 +213,7 @@
 {
   const GstGLFuncs *gl = context->gl_vtable;
 
+  gst_gl_insert_debug_marker (context, "no buffer.  rendering black");
   gl->ClearColor (0.0, 0.0, 0.0, 0.0);
   gl->Clear (GL_COLOR_BUFFER_BIT);
 }
@@ -244,17 +251,20 @@
       goto done;
     }
 
+    priv->current_tex = *(guint *) gl_frame.data[0];
+    gst_gl_insert_debug_marker (priv->other_context, "redrawing texture %u",
+        priv->current_tex);
+
     gst_gl_overlay_compositor_upload_overlays (priv->overlay_compositor,
         buffer);
 
     sync_meta = gst_buffer_get_gl_sync_meta (buffer);
     if (sync_meta) {
+      /* XXX: the set_sync() seems to be needed for resizing */
       gst_gl_sync_meta_set_sync_point (sync_meta, priv->context);
       gst_gl_sync_meta_wait (sync_meta, priv->other_context);
     }
 
-    priv->current_tex = *(guint *) gl_frame.data[0];
-
     gst_video_frame_unmap (&gl_frame);
 
     if (base_widget->buffer)
@@ -271,6 +281,9 @@
   _redraw_texture (GTK_GST_GL_WIDGET (widget), priv->current_tex);
   gst_gl_overlay_compositor_draw_overlays (priv->overlay_compositor);
 
+  gst_gl_insert_debug_marker (priv->other_context, "texture %u redrawn",
+      priv->current_tex);
+
 done:
   if (priv->other_context)
     gst_gl_context_activate (priv->other_context, FALSE);
@@ -493,7 +506,7 @@
     GTK_GST_BASE_WIDGET_LOCK (gst_widget);
   }
 
-  if (!GST_GL_IS_CONTEXT (priv->other_context)) {
+  if (!GST_IS_GL_CONTEXT (priv->other_context)) {
     GTK_GST_BASE_WIDGET_UNLOCK (gst_widget);
     return FALSE;
   }
diff --git a/ext/hls/Makefile.am b/ext/hls/Makefile.am
index f66880f..189f9e6 100644
--- a/ext/hls/Makefile.am
+++ b/ext/hls/Makefile.am
@@ -1,25 +1,25 @@
 
-plugin_LTLIBRARIES = libgstfragmented.la
+plugin_LTLIBRARIES = libgsthls.la
 
-libgstfragmented_la_SOURCES =			\
+libgsthls_la_SOURCES =			\
 	m3u8.c					\
 	gsthlsdemux.c				\
-	gstfragmentedplugin.c 			\
+	gsthlsplugin.c 			\
 	gsthlssink.c 				\
 	gstm3u8playlist.c
 
-libgstfragmented_la_CFLAGS = $(GST_PLUGINS_BAD_CFLAGS) $(GST_PLUGINS_BASE_CFLAGS) $(GST_BASE_CFLAGS) $(GST_CFLAGS) $(GIO_CFLAGS) $(LIBGCRYPT_CFLAGS) $(NETTLE_CFLAGS)
-libgstfragmented_la_LIBADD = \
+libgsthls_la_CFLAGS = $(GST_PLUGINS_BAD_CFLAGS) $(GST_PLUGINS_BASE_CFLAGS) $(GST_BASE_CFLAGS) $(GST_CFLAGS) $(LIBGCRYPT_CFLAGS) $(NETTLE_CFLAGS) $(OPENSSL_CFLAGS)
+libgsthls_la_LIBADD = \
 	$(top_builddir)/gst-libs/gst/uridownloader/libgsturidownloader-@GST_API_VERSION@.la \
         $(top_builddir)/gst-libs/gst/adaptivedemux/libgstadaptivedemux-@GST_API_VERSION@.la \
 	$(GST_PLUGINS_BASE_LIBS) -lgstpbutils-$(GST_API_VERSION) -lgstvideo-$(GST_API_VERSION) \
-	$(GST_BASE_LIBS) $(GST_LIBS) $(GIO_LIBS) $(LIBM) $(LIBGCRYPT_LIBS) $(NETTLE_LIBS) $(OPENSSL_LIBS)
-libgstfragmented_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS) -no-undefined
-libgstfragmented_la_LIBTOOLFLAGS = $(GST_PLUGIN_LIBTOOLFLAGS)
+	$(GST_BASE_LIBS) $(GST_LIBS) $(LIBM) $(LIBGCRYPT_LIBS) $(NETTLE_LIBS) $(OPENSSL_LIBS)
+libgsthls_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS) -no-undefined
+libgsthls_la_LIBTOOLFLAGS = $(GST_PLUGIN_LIBTOOLFLAGS)
 
 # headers we need but don't want installed
 noinst_HEADERS = 			\
-	gstfragmented.h			\
+	gsthls.h			\
 	gsthlsdemux.h			\
 	gsthlssink.h			\
 	gstm3u8playlist.h		\
diff --git a/ext/hls/Makefile.in b/ext/hls/Makefile.in
index a328db9..7c719d7 100644
--- a/ext/hls/Makefile.in
+++ b/ext/hls/Makefile.in
@@ -116,16 +116,15 @@
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
 	$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
-	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gsettings.m4 \
-	$(top_srcdir)/m4/gst-fionread.m4 $(top_srcdir)/m4/gst-sdl.m4 \
-	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
-	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
-	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libgcrypt.m4 \
-	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
-	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
-	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
-	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
-	$(top_srcdir)/configure.ac
+	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gst-fionread.m4 \
+	$(top_srcdir)/m4/gst-sdl.m4 $(top_srcdir)/m4/iconv.m4 \
+	$(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \
+	$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
+	$(top_srcdir)/m4/libgcrypt.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
+	$(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \
@@ -164,26 +163,24 @@
 am__installdirs = "$(DESTDIR)$(plugindir)"
 LTLIBRARIES = $(plugin_LTLIBRARIES)
 am__DEPENDENCIES_1 =
-libgstfragmented_la_DEPENDENCIES = $(top_builddir)/gst-libs/gst/uridownloader/libgsturidownloader-@GST_API_VERSION@.la \
+libgsthls_la_DEPENDENCIES = $(top_builddir)/gst-libs/gst/uridownloader/libgsturidownloader-@GST_API_VERSION@.la \
 	$(top_builddir)/gst-libs/gst/adaptivedemux/libgstadaptivedemux-@GST_API_VERSION@.la \
 	$(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
 	$(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
 	$(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
-	$(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1)
-am_libgstfragmented_la_OBJECTS = libgstfragmented_la-m3u8.lo \
-	libgstfragmented_la-gsthlsdemux.lo \
-	libgstfragmented_la-gstfragmentedplugin.lo \
-	libgstfragmented_la-gsthlssink.lo \
-	libgstfragmented_la-gstm3u8playlist.lo
-libgstfragmented_la_OBJECTS = $(am_libgstfragmented_la_OBJECTS)
+	$(am__DEPENDENCIES_1)
+am_libgsthls_la_OBJECTS = libgsthls_la-m3u8.lo \
+	libgsthls_la-gsthlsdemux.lo libgsthls_la-gsthlsplugin.lo \
+	libgsthls_la-gsthlssink.lo libgsthls_la-gstm3u8playlist.lo
+libgsthls_la_OBJECTS = $(am_libgsthls_la_OBJECTS)
 AM_V_lt = $(am__v_lt_@AM_V@)
 am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
 am__v_lt_0 = --silent
 am__v_lt_1 = 
-libgstfragmented_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
-	$(libgstfragmented_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
-	--mode=link $(CCLD) $(libgstfragmented_la_CFLAGS) $(CFLAGS) \
-	$(libgstfragmented_la_LDFLAGS) $(LDFLAGS) -o $@
+libgsthls_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
+	$(libgsthls_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link \
+	$(CCLD) $(libgsthls_la_CFLAGS) $(CFLAGS) \
+	$(libgsthls_la_LDFLAGS) $(LDFLAGS) -o $@
 AM_V_P = $(am__v_P_@AM_V@)
 am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
 am__v_P_0 = false
@@ -218,8 +215,8 @@
 am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@)
 am__v_CCLD_0 = @echo "  CCLD    " $@;
 am__v_CCLD_1 = 
-SOURCES = $(libgstfragmented_la_SOURCES)
-DIST_SOURCES = $(libgstfragmented_la_SOURCES)
+SOURCES = $(libgsthls_la_SOURCES)
+DIST_SOURCES = $(libgsthls_la_SOURCES)
 am__can_run_installinfo = \
   case $$AM_UPDATE_INFO_DIR in \
     n|no|NO) false;; \
@@ -282,6 +279,8 @@
 CLUTTER_X11_LIBS = @CLUTTER_X11_LIBS@
 CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
+CUDA_CFLAGS = @CUDA_CFLAGS@
+CUDA_LIBS = @CUDA_LIBS@
 CURL_CFLAGS = @CURL_CFLAGS@
 CURL_LIBS = @CURL_LIBS@
 CXX = @CXX@
@@ -319,6 +318,8 @@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
+EGL_CFLAGS = @EGL_CFLAGS@
+EGL_LIBS = @EGL_LIBS@
 EGREP = @EGREP@
 ERROR_CFLAGS = @ERROR_CFLAGS@
 ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
@@ -327,7 +328,6 @@
 EXIF_CFLAGS = @EXIF_CFLAGS@
 EXIF_LIBS = @EXIF_LIBS@
 FAAC_LIBS = @FAAC_LIBS@
-FAAD_IS_NEAAC = @FAAD_IS_NEAAC@
 FAAD_LIBS = @FAAD_LIBS@
 FFLAGS = @FFLAGS@
 FGREP = @FGREP@
@@ -346,8 +346,9 @@
 GIO_LIBS = @GIO_LIBS@
 GIO_UNIX_CFLAGS = @GIO_UNIX_CFLAGS@
 GIO_UNIX_LIBS = @GIO_UNIX_LIBS@
+GLES2_CFLAGS = @GLES2_CFLAGS@
+GLES2_LIBS = @GLES2_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
-GLIB_COMPILE_SCHEMAS = @GLIB_COMPILE_SCHEMAS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
@@ -364,16 +365,17 @@
 GMODULE_NO_EXPORT_LIBS = @GMODULE_NO_EXPORT_LIBS@
 GMSGFMT = @GMSGFMT@
 GMSGFMT_015 = @GMSGFMT_015@
+GNUSTL_CFLAGS = @GNUSTL_CFLAGS@
+GNUSTL_LIBS = @GNUSTL_LIBS@
 GRAPHENE_CFLAGS = @GRAPHENE_CFLAGS@
 GRAPHENE_LIBS = @GRAPHENE_LIBS@
 GREP = @GREP@
-GSETTINGS_CFLAGS = @GSETTINGS_CFLAGS@
-GSETTINGS_DISABLE_SCHEMAS_COMPILE = @GSETTINGS_DISABLE_SCHEMAS_COMPILE@
-GSETTINGS_LIBS = @GSETTINGS_LIBS@
 GSM_LIBS = @GSM_LIBS@
 GSTPB_PLUGINS_DIR = @GSTPB_PLUGINS_DIR@
 GSTPB_PREFIX = @GSTPB_PREFIX@
 GST_AGE = @GST_AGE@
+GST_ALLOCATORS_CFLAGS = @GST_ALLOCATORS_CFLAGS@
+GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
 GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
 GST_API_VERSION = @GST_API_VERSION@
 GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
@@ -399,6 +401,8 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PBUTILS_CFLAGS = @GST_PBUTILS_CFLAGS@
+GST_PBUTILS_LIBS = @GST_PBUTILS_LIBS@
 GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BAD_CFLAGS = @GST_PLUGINS_BAD_CFLAGS@
@@ -424,6 +428,8 @@
 GST_PREFIX = @GST_PREFIX@
 GST_REVISION = @GST_REVISION@
 GST_TOOLS_DIR = @GST_TOOLS_DIR@
+GST_VIDEO_CFLAGS = @GST_VIDEO_CFLAGS@
+GST_VIDEO_LIBS = @GST_VIDEO_LIBS@
 GTK3_CFLAGS = @GTK3_CFLAGS@
 GTK3_GL_CFLAGS = @GTK3_GL_CFLAGS@
 GTK3_GL_LIBS = @GTK3_GL_LIBS@
@@ -525,6 +531,7 @@
 LTLIBICONV = @LTLIBICONV@
 LTLIBINTL = @LTLIBINTL@
 LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
 MANIFEST_TOOL = @MANIFEST_TOOL@
@@ -538,8 +545,6 @@
 MODPLUG_LIBS = @MODPLUG_LIBS@
 MPEG2ENC_CFLAGS = @MPEG2ENC_CFLAGS@
 MPEG2ENC_LIBS = @MPEG2ENC_LIBS@
-MPG123_CFLAGS = @MPG123_CFLAGS@
-MPG123_LIBS = @MPG123_LIBS@
 MPLEX_CFLAGS = @MPLEX_CFLAGS@
 MPLEX_LDFLAGS = @MPLEX_LDFLAGS@
 MPLEX_LIBS = @MPLEX_LIBS@
@@ -555,6 +560,8 @@
 NETTLE_LIBS = @NETTLE_LIBS@
 NM = @NM@
 NMEDIT = @NMEDIT@
+NVENCODE_CFLAGS = @NVENCODE_CFLAGS@
+NVENCODE_LIBS = @NVENCODE_LIBS@
 OBJC = @OBJC@
 OBJCDEPMODE = @OBJCDEPMODE@
 OBJCFLAGS = @OBJCFLAGS@
@@ -612,16 +619,18 @@
 PYTHON_PLATFORM = @PYTHON_PLATFORM@
 PYTHON_PREFIX = @PYTHON_PREFIX@
 PYTHON_VERSION = @PYTHON_VERSION@
+QT_ANDROID_CFLAGS = @QT_ANDROID_CFLAGS@
+QT_ANDROID_LIBS = @QT_ANDROID_LIBS@
 QT_CFLAGS = @QT_CFLAGS@
 QT_LIBS = @QT_LIBS@
+QT_MAC_CFLAGS = @QT_MAC_CFLAGS@
+QT_MAC_LIBS = @QT_MAC_LIBS@
 QT_WAYLAND_CFLAGS = @QT_WAYLAND_CFLAGS@
 QT_WAYLAND_LIBS = @QT_WAYLAND_LIBS@
 QT_X11_CFLAGS = @QT_X11_CFLAGS@
 QT_X11_LIBS = @QT_X11_LIBS@
 RANLIB = @RANLIB@
 RCC = @RCC@
-RSVG_2_36_2_CFLAGS = @RSVG_2_36_2_CFLAGS@
-RSVG_2_36_2_LIBS = @RSVG_2_36_2_LIBS@
 RSVG_CFLAGS = @RSVG_CFLAGS@
 RSVG_LIBS = @RSVG_LIBS@
 RTMP_CFLAGS = @RTMP_CFLAGS@
@@ -673,6 +682,7 @@
 VOAACENC_LIBS = @VOAACENC_LIBS@
 VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
 VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VULKAN_LIBS = @VULKAN_LIBS@
 WARNING_CFLAGS = @WARNING_CFLAGS@
 WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
 WARNING_OBJCFLAGS = @WARNING_OBJCFLAGS@
@@ -683,6 +693,7 @@
 WAYLAND_LIBS = @WAYLAND_LIBS@
 WEBP_CFLAGS = @WEBP_CFLAGS@
 WEBP_LIBS = @WEBP_LIBS@
+WGET = @WGET@
 WILDMIDI_CFLAGS = @WILDMIDI_CFLAGS@
 WILDMIDI_LIBS = @WILDMIDI_LIBS@
 WINKS_LIBS = @WINKS_LIBS@
@@ -692,6 +703,8 @@
 X11_LIBS = @X11_LIBS@
 X265_CFLAGS = @X265_CFLAGS@
 X265_LIBS = @X265_LIBS@
+XCB_CFLAGS = @XCB_CFLAGS@
+XCB_LIBS = @XCB_LIBS@
 XCOMPOSITE_CFLAGS = @XCOMPOSITE_CFLAGS@
 XCOMPOSITE_LIBS = @XCOMPOSITE_LIBS@
 XGETTEXT = @XGETTEXT@
@@ -729,7 +742,6 @@
 docdir = @docdir@
 dvidir = @dvidir@
 exec_prefix = @exec_prefix@
-gsettingsschemadir = @gsettingsschemadir@
 host = @host@
 host_alias = @host_alias@
 host_cpu = @host_cpu@
@@ -769,27 +781,27 @@
 top_builddir = @top_builddir@
 top_srcdir = @top_srcdir@
 wayland_scanner = @wayland_scanner@
-plugin_LTLIBRARIES = libgstfragmented.la
-libgstfragmented_la_SOURCES = \
+plugin_LTLIBRARIES = libgsthls.la
+libgsthls_la_SOURCES = \
 	m3u8.c					\
 	gsthlsdemux.c				\
-	gstfragmentedplugin.c 			\
+	gsthlsplugin.c 			\
 	gsthlssink.c 				\
 	gstm3u8playlist.c
 
-libgstfragmented_la_CFLAGS = $(GST_PLUGINS_BAD_CFLAGS) $(GST_PLUGINS_BASE_CFLAGS) $(GST_BASE_CFLAGS) $(GST_CFLAGS) $(GIO_CFLAGS) $(LIBGCRYPT_CFLAGS) $(NETTLE_CFLAGS)
-libgstfragmented_la_LIBADD = \
+libgsthls_la_CFLAGS = $(GST_PLUGINS_BAD_CFLAGS) $(GST_PLUGINS_BASE_CFLAGS) $(GST_BASE_CFLAGS) $(GST_CFLAGS) $(LIBGCRYPT_CFLAGS) $(NETTLE_CFLAGS) $(OPENSSL_CFLAGS)
+libgsthls_la_LIBADD = \
 	$(top_builddir)/gst-libs/gst/uridownloader/libgsturidownloader-@GST_API_VERSION@.la \
         $(top_builddir)/gst-libs/gst/adaptivedemux/libgstadaptivedemux-@GST_API_VERSION@.la \
 	$(GST_PLUGINS_BASE_LIBS) -lgstpbutils-$(GST_API_VERSION) -lgstvideo-$(GST_API_VERSION) \
-	$(GST_BASE_LIBS) $(GST_LIBS) $(GIO_LIBS) $(LIBM) $(LIBGCRYPT_LIBS) $(NETTLE_LIBS) $(OPENSSL_LIBS)
+	$(GST_BASE_LIBS) $(GST_LIBS) $(LIBM) $(LIBGCRYPT_LIBS) $(NETTLE_LIBS) $(OPENSSL_LIBS)
 
-libgstfragmented_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS) -no-undefined
-libgstfragmented_la_LIBTOOLFLAGS = $(GST_PLUGIN_LIBTOOLFLAGS)
+libgsthls_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS) -no-undefined
+libgsthls_la_LIBTOOLFLAGS = $(GST_PLUGIN_LIBTOOLFLAGS)
 
 # headers we need but don't want installed
 noinst_HEADERS = \
-	gstfragmented.h			\
+	gsthls.h			\
 	gsthlsdemux.h			\
 	gsthlssink.h			\
 	gstm3u8playlist.h		\
@@ -864,8 +876,8 @@
 	  rm -f $${locs}; \
 	}
 
-libgstfragmented.la: $(libgstfragmented_la_OBJECTS) $(libgstfragmented_la_DEPENDENCIES) $(EXTRA_libgstfragmented_la_DEPENDENCIES) 
-	$(AM_V_CCLD)$(libgstfragmented_la_LINK) -rpath $(plugindir) $(libgstfragmented_la_OBJECTS) $(libgstfragmented_la_LIBADD) $(LIBS)
+libgsthls.la: $(libgsthls_la_OBJECTS) $(libgsthls_la_DEPENDENCIES) $(EXTRA_libgsthls_la_DEPENDENCIES) 
+	$(AM_V_CCLD)$(libgsthls_la_LINK) -rpath $(plugindir) $(libgsthls_la_OBJECTS) $(libgsthls_la_LIBADD) $(LIBS)
 
 mostlyclean-compile:
 	-rm -f *.$(OBJEXT)
@@ -873,11 +885,11 @@
 distclean-compile:
 	-rm -f *.tab.c
 
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstfragmented_la-gstfragmentedplugin.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstfragmented_la-gsthlsdemux.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstfragmented_la-gsthlssink.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstfragmented_la-gstm3u8playlist.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstfragmented_la-m3u8.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgsthls_la-gsthlsdemux.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgsthls_la-gsthlsplugin.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgsthls_la-gsthlssink.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgsthls_la-gstm3u8playlist.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgsthls_la-m3u8.Plo@am__quote@
 
 .c.o:
 @am__fastdepCC_TRUE@	$(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\
@@ -903,40 +915,40 @@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $<
 
-libgstfragmented_la-m3u8.lo: m3u8.c
-@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstfragmented_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstfragmented_la_CFLAGS) $(CFLAGS) -MT libgstfragmented_la-m3u8.lo -MD -MP -MF $(DEPDIR)/libgstfragmented_la-m3u8.Tpo -c -o libgstfragmented_la-m3u8.lo `test -f 'm3u8.c' || echo '$(srcdir)/'`m3u8.c
-@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstfragmented_la-m3u8.Tpo $(DEPDIR)/libgstfragmented_la-m3u8.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='m3u8.c' object='libgstfragmented_la-m3u8.lo' libtool=yes @AMDEPBACKSLASH@
+libgsthls_la-m3u8.lo: m3u8.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgsthls_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgsthls_la_CFLAGS) $(CFLAGS) -MT libgsthls_la-m3u8.lo -MD -MP -MF $(DEPDIR)/libgsthls_la-m3u8.Tpo -c -o libgsthls_la-m3u8.lo `test -f 'm3u8.c' || echo '$(srcdir)/'`m3u8.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgsthls_la-m3u8.Tpo $(DEPDIR)/libgsthls_la-m3u8.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='m3u8.c' object='libgsthls_la-m3u8.lo' libtool=yes @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstfragmented_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstfragmented_la_CFLAGS) $(CFLAGS) -c -o libgstfragmented_la-m3u8.lo `test -f 'm3u8.c' || echo '$(srcdir)/'`m3u8.c
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgsthls_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgsthls_la_CFLAGS) $(CFLAGS) -c -o libgsthls_la-m3u8.lo `test -f 'm3u8.c' || echo '$(srcdir)/'`m3u8.c
 
-libgstfragmented_la-gsthlsdemux.lo: gsthlsdemux.c
-@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstfragmented_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstfragmented_la_CFLAGS) $(CFLAGS) -MT libgstfragmented_la-gsthlsdemux.lo -MD -MP -MF $(DEPDIR)/libgstfragmented_la-gsthlsdemux.Tpo -c -o libgstfragmented_la-gsthlsdemux.lo `test -f 'gsthlsdemux.c' || echo '$(srcdir)/'`gsthlsdemux.c
-@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstfragmented_la-gsthlsdemux.Tpo $(DEPDIR)/libgstfragmented_la-gsthlsdemux.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='gsthlsdemux.c' object='libgstfragmented_la-gsthlsdemux.lo' libtool=yes @AMDEPBACKSLASH@
+libgsthls_la-gsthlsdemux.lo: gsthlsdemux.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgsthls_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgsthls_la_CFLAGS) $(CFLAGS) -MT libgsthls_la-gsthlsdemux.lo -MD -MP -MF $(DEPDIR)/libgsthls_la-gsthlsdemux.Tpo -c -o libgsthls_la-gsthlsdemux.lo `test -f 'gsthlsdemux.c' || echo '$(srcdir)/'`gsthlsdemux.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgsthls_la-gsthlsdemux.Tpo $(DEPDIR)/libgsthls_la-gsthlsdemux.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='gsthlsdemux.c' object='libgsthls_la-gsthlsdemux.lo' libtool=yes @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstfragmented_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstfragmented_la_CFLAGS) $(CFLAGS) -c -o libgstfragmented_la-gsthlsdemux.lo `test -f 'gsthlsdemux.c' || echo '$(srcdir)/'`gsthlsdemux.c
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgsthls_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgsthls_la_CFLAGS) $(CFLAGS) -c -o libgsthls_la-gsthlsdemux.lo `test -f 'gsthlsdemux.c' || echo '$(srcdir)/'`gsthlsdemux.c
 
-libgstfragmented_la-gstfragmentedplugin.lo: gstfragmentedplugin.c
-@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstfragmented_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstfragmented_la_CFLAGS) $(CFLAGS) -MT libgstfragmented_la-gstfragmentedplugin.lo -MD -MP -MF $(DEPDIR)/libgstfragmented_la-gstfragmentedplugin.Tpo -c -o libgstfragmented_la-gstfragmentedplugin.lo `test -f 'gstfragmentedplugin.c' || echo '$(srcdir)/'`gstfragmentedplugin.c
-@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstfragmented_la-gstfragmentedplugin.Tpo $(DEPDIR)/libgstfragmented_la-gstfragmentedplugin.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='gstfragmentedplugin.c' object='libgstfragmented_la-gstfragmentedplugin.lo' libtool=yes @AMDEPBACKSLASH@
+libgsthls_la-gsthlsplugin.lo: gsthlsplugin.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgsthls_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgsthls_la_CFLAGS) $(CFLAGS) -MT libgsthls_la-gsthlsplugin.lo -MD -MP -MF $(DEPDIR)/libgsthls_la-gsthlsplugin.Tpo -c -o libgsthls_la-gsthlsplugin.lo `test -f 'gsthlsplugin.c' || echo '$(srcdir)/'`gsthlsplugin.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgsthls_la-gsthlsplugin.Tpo $(DEPDIR)/libgsthls_la-gsthlsplugin.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='gsthlsplugin.c' object='libgsthls_la-gsthlsplugin.lo' libtool=yes @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstfragmented_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstfragmented_la_CFLAGS) $(CFLAGS) -c -o libgstfragmented_la-gstfragmentedplugin.lo `test -f 'gstfragmentedplugin.c' || echo '$(srcdir)/'`gstfragmentedplugin.c
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgsthls_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgsthls_la_CFLAGS) $(CFLAGS) -c -o libgsthls_la-gsthlsplugin.lo `test -f 'gsthlsplugin.c' || echo '$(srcdir)/'`gsthlsplugin.c
 
-libgstfragmented_la-gsthlssink.lo: gsthlssink.c
-@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstfragmented_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstfragmented_la_CFLAGS) $(CFLAGS) -MT libgstfragmented_la-gsthlssink.lo -MD -MP -MF $(DEPDIR)/libgstfragmented_la-gsthlssink.Tpo -c -o libgstfragmented_la-gsthlssink.lo `test -f 'gsthlssink.c' || echo '$(srcdir)/'`gsthlssink.c
-@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstfragmented_la-gsthlssink.Tpo $(DEPDIR)/libgstfragmented_la-gsthlssink.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='gsthlssink.c' object='libgstfragmented_la-gsthlssink.lo' libtool=yes @AMDEPBACKSLASH@
+libgsthls_la-gsthlssink.lo: gsthlssink.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgsthls_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgsthls_la_CFLAGS) $(CFLAGS) -MT libgsthls_la-gsthlssink.lo -MD -MP -MF $(DEPDIR)/libgsthls_la-gsthlssink.Tpo -c -o libgsthls_la-gsthlssink.lo `test -f 'gsthlssink.c' || echo '$(srcdir)/'`gsthlssink.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgsthls_la-gsthlssink.Tpo $(DEPDIR)/libgsthls_la-gsthlssink.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='gsthlssink.c' object='libgsthls_la-gsthlssink.lo' libtool=yes @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstfragmented_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstfragmented_la_CFLAGS) $(CFLAGS) -c -o libgstfragmented_la-gsthlssink.lo `test -f 'gsthlssink.c' || echo '$(srcdir)/'`gsthlssink.c
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgsthls_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgsthls_la_CFLAGS) $(CFLAGS) -c -o libgsthls_la-gsthlssink.lo `test -f 'gsthlssink.c' || echo '$(srcdir)/'`gsthlssink.c
 
-libgstfragmented_la-gstm3u8playlist.lo: gstm3u8playlist.c
-@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstfragmented_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstfragmented_la_CFLAGS) $(CFLAGS) -MT libgstfragmented_la-gstm3u8playlist.lo -MD -MP -MF $(DEPDIR)/libgstfragmented_la-gstm3u8playlist.Tpo -c -o libgstfragmented_la-gstm3u8playlist.lo `test -f 'gstm3u8playlist.c' || echo '$(srcdir)/'`gstm3u8playlist.c
-@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstfragmented_la-gstm3u8playlist.Tpo $(DEPDIR)/libgstfragmented_la-gstm3u8playlist.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='gstm3u8playlist.c' object='libgstfragmented_la-gstm3u8playlist.lo' libtool=yes @AMDEPBACKSLASH@
+libgsthls_la-gstm3u8playlist.lo: gstm3u8playlist.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgsthls_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgsthls_la_CFLAGS) $(CFLAGS) -MT libgsthls_la-gstm3u8playlist.lo -MD -MP -MF $(DEPDIR)/libgsthls_la-gstm3u8playlist.Tpo -c -o libgsthls_la-gstm3u8playlist.lo `test -f 'gstm3u8playlist.c' || echo '$(srcdir)/'`gstm3u8playlist.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgsthls_la-gstm3u8playlist.Tpo $(DEPDIR)/libgsthls_la-gstm3u8playlist.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='gstm3u8playlist.c' object='libgsthls_la-gstm3u8playlist.lo' libtool=yes @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstfragmented_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstfragmented_la_CFLAGS) $(CFLAGS) -c -o libgstfragmented_la-gstm3u8playlist.lo `test -f 'gstm3u8playlist.c' || echo '$(srcdir)/'`gstm3u8playlist.c
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgsthls_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgsthls_la_CFLAGS) $(CFLAGS) -c -o libgsthls_la-gstm3u8playlist.lo `test -f 'gstm3u8playlist.c' || echo '$(srcdir)/'`gstm3u8playlist.c
 
 mostlyclean-libtool:
 	-rm -f *.lo
diff --git a/ext/hls/gstfragmented.h b/ext/hls/gstfragmented.h
deleted file mode 100644
index c1c7a2b..0000000
--- a/ext/hls/gstfragmented.h
+++ /dev/null
@@ -1,14 +0,0 @@
-#ifndef __GST_FRAGMENTED_H__
-#define __GST_FRAGMENTED_H__
-
-#include <gst/gst.h>
-
-G_BEGIN_DECLS
-
-GST_DEBUG_CATEGORY_EXTERN (fragmented_debug);
-
-#define LOG_CAPS(obj, caps) GST_DEBUG_OBJECT (obj, "%s: %" GST_PTR_FORMAT, #caps, caps)
-
-G_END_DECLS
-
-#endif /* __GST_FRAGMENTED_H__ */
diff --git a/ext/hls/gstfragmentedplugin.c b/ext/hls/gstfragmentedplugin.c
deleted file mode 100644
index 89a7741..0000000
--- a/ext/hls/gstfragmentedplugin.c
+++ /dev/null
@@ -1,32 +0,0 @@
-#ifdef HAVE_CONFIG_H
-#  include <config.h>
-#endif
-
-#include <gst/gst.h>
-
-#include "gstfragmented.h"
-#include "gsthlsdemux.h"
-#include "gsthlssink.h"
-
-GST_DEBUG_CATEGORY (fragmented_debug);
-
-static gboolean
-fragmented_init (GstPlugin * plugin)
-{
-  GST_DEBUG_CATEGORY_INIT (fragmented_debug, "fragmented", 0, "fragmented");
-
-  if (!gst_element_register (plugin, "hlsdemux", GST_RANK_PRIMARY,
-          GST_TYPE_HLS_DEMUX) || FALSE)
-    return FALSE;
-
-  if (!gst_hls_sink_plugin_init (plugin))
-    return FALSE;
-
-  return TRUE;
-}
-
-GST_PLUGIN_DEFINE (GST_VERSION_MAJOR,
-    GST_VERSION_MINOR,
-    fragmented,
-    "Fragmented streaming plugins",
-    fragmented_init, VERSION, "LGPL", PACKAGE_NAME, "http://www.gstreamer.org/")
diff --git a/ext/hls/gsthls.h b/ext/hls/gsthls.h
new file mode 100644
index 0000000..3806f4f
--- /dev/null
+++ b/ext/hls/gsthls.h
@@ -0,0 +1,12 @@
+#ifndef __GST_HLS_H__
+#define __GST_HLS_H__
+
+#include <gst/gst.h>
+
+G_BEGIN_DECLS
+
+GST_DEBUG_CATEGORY_EXTERN (hls_debug);
+
+G_END_DECLS
+
+#endif /* __GST_HLS_H__ */
diff --git a/ext/hls/gsthlsdemux.c b/ext/hls/gsthlsdemux.c
index 1c05fa8..cf51d99 100644
--- a/ext/hls/gsthlsdemux.c
+++ b/ext/hls/gsthlsdemux.c
@@ -57,22 +57,8 @@
 GST_DEBUG_CATEGORY_STATIC (gst_hls_demux_debug);
 #define GST_CAT_DEFAULT gst_hls_demux_debug
 
-enum
-{
-  PROP_0,
-
-  PROP_FRAGMENTS_CACHE,
-  PROP_LAST
-};
-
-#define DEFAULT_FRAGMENTS_CACHE 1
-
 /* GObject */
-static void gst_hls_demux_set_property (GObject * object, guint prop_id,
-    const GValue * value, GParamSpec * pspec);
-static void gst_hls_demux_get_property (GObject * object, guint prop_id,
-    GValue * value, GParamSpec * pspec);
-static void gst_hls_demux_dispose (GObject * obj);
+static void gst_hls_demux_finalize (GObject * obj);
 
 /* GstElement */
 static GstStateChangeReturn
@@ -81,8 +67,6 @@
 /* GstHLSDemux */
 static gboolean gst_hls_demux_update_playlist (GstHLSDemux * demux,
     gboolean update, GError ** err);
-static gboolean gst_hls_demux_set_location (GstHLSDemux * demux,
-    const gchar * uri, const gchar * base_uri);
 static gchar *gst_hls_src_buf_to_utf8_playlist (GstBuffer * buf);
 
 static gboolean gst_hls_demux_change_playlist (GstHLSDemux * demux,
@@ -125,14 +109,14 @@
 G_DEFINE_TYPE (GstHLSDemux, gst_hls_demux, GST_TYPE_ADAPTIVE_DEMUX);
 
 static void
-gst_hls_demux_dispose (GObject * obj)
+gst_hls_demux_finalize (GObject * obj)
 {
   GstHLSDemux *demux = GST_HLS_DEMUX (obj);
 
   gst_hls_demux_reset (GST_ADAPTIVE_DEMUX_CAST (demux));
   gst_m3u8_client_free (demux->client);
 
-  G_OBJECT_CLASS (parent_class)->dispose (obj);
+  G_OBJECT_CLASS (parent_class)->finalize (obj);
 }
 
 static void
@@ -146,18 +130,7 @@
   element_class = (GstElementClass *) klass;
   adaptivedemux_class = (GstAdaptiveDemuxClass *) klass;
 
-  gobject_class->set_property = gst_hls_demux_set_property;
-  gobject_class->get_property = gst_hls_demux_get_property;
-  gobject_class->dispose = gst_hls_demux_dispose;
-
-#ifndef GST_REMOVE_DEPRECATED
-  g_object_class_install_property (gobject_class, PROP_FRAGMENTS_CACHE,
-      g_param_spec_uint ("fragments-cache", "Fragments cache",
-          "Number of fragments needed to be cached to start playing "
-          "(DEPRECATED: Has no effect since 1.3.1)",
-          1, G_MAXUINT, DEFAULT_FRAGMENTS_CACHE,
-          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | G_PARAM_DEPRECATED));
-#endif
+  gobject_class->finalize = gst_hls_demux_finalize;
 
   element_class->change_state = GST_DEBUG_FUNCPTR (gst_hls_demux_change_state);
 
@@ -204,33 +177,6 @@
   demux->do_typefind = TRUE;
 }
 
-static void
-gst_hls_demux_set_property (GObject * object, guint prop_id,
-    const GValue * value, GParamSpec * pspec)
-{
-  switch (prop_id) {
-    case PROP_FRAGMENTS_CACHE:
-      break;
-    default:
-      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
-      break;
-  }
-}
-
-static void
-gst_hls_demux_get_property (GObject * object, guint prop_id, GValue * value,
-    GParamSpec * pspec)
-{
-  switch (prop_id) {
-    case PROP_FRAGMENTS_CACHE:
-      g_value_set_uint (value, 1);
-      break;
-    default:
-      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
-      break;
-  }
-}
-
 static GstStateChangeReturn
 gst_hls_demux_change_state (GstElement * element, GstStateChange transition)
 {
@@ -261,13 +207,10 @@
 gst_hls_demux_create_pad (GstHLSDemux * hlsdemux)
 {
   gchar *name;
-  GstPadTemplate *tmpl;
   GstPad *pad;
 
   name = g_strdup_printf ("src_%u", hlsdemux->srcpad_counter++);
-  tmpl = gst_static_pad_template_get (&srctemplate);
-  pad = gst_ghost_pad_new_no_target_from_template (name, tmpl);
-  gst_object_unref (tmpl);
+  pad = gst_pad_new_from_static_template (&srctemplate, name);
   g_free (name);
 
   return pad;
@@ -301,6 +244,8 @@
   gint64 current_sequence;
   GstM3U8MediaFile *file;
   guint64 bitrate;
+  gboolean snap_before, snap_after, snap_nearest, keyunit;
+  gboolean reverse;
 
   gst_event_parse_seek (seek, &rate, &format, &flags, &start_type, &start,
       &stop_type, &stop);
@@ -357,14 +302,37 @@
   file = GST_M3U8_MEDIA_FILE (hlsdemux->client->current->files->data);
   current_sequence = file->sequence;
   current_pos = 0;
-  target_pos = rate > 0 ? start : stop;
+  reverse = rate < 0;
+  target_pos = reverse ? stop : start;
+
+  /* Snap to segment boundary. Improves seek performance on slow machines. */
+  keyunit = ! !(flags & GST_SEEK_FLAG_KEY_UNIT);
+  snap_nearest =
+      (flags & GST_SEEK_FLAG_SNAP_NEAREST) == GST_SEEK_FLAG_SNAP_NEAREST;
+  snap_before = ! !(flags & GST_SEEK_FLAG_SNAP_BEFORE);
+  snap_after = ! !(flags & GST_SEEK_FLAG_SNAP_AFTER);
+
   /* FIXME: Here we need proper discont handling */
   for (walk = hlsdemux->client->current->files; walk; walk = walk->next) {
     file = walk->data;
 
     current_sequence = file->sequence;
     current_file = walk;
-    if (current_pos <= target_pos && target_pos < current_pos + file->duration) {
+    if ((!reverse && snap_after) || snap_nearest) {
+      if (current_pos >= target_pos)
+        break;
+      if (snap_nearest && target_pos - current_pos < file->duration / 2)
+        break;
+    } else if (reverse && snap_after) {
+      /* check if the next fragment is our target, in this case we want to
+       * start from the previous fragment */
+      GstClockTime next_pos = current_pos + file->duration;
+
+      if (next_pos <= target_pos && target_pos < next_pos + file->duration) {
+        break;
+      }
+    } else if (current_pos <= target_pos
+        && target_pos < current_pos + file->duration) {
       break;
     }
     current_pos += file->duration;
@@ -383,6 +351,19 @@
   hlsdemux->client->sequence_position = current_pos;
   GST_M3U8_CLIENT_UNLOCK (hlsdemux->client);
 
+  /* Play from the end of the current selected segment */
+  if (reverse && (snap_before || snap_after || snap_nearest))
+    current_pos += file->duration;
+
+  if (keyunit || snap_before || snap_after || snap_nearest) {
+    if (!reverse)
+      gst_segment_do_seek (&demux->segment, rate, format, flags, start_type,
+          current_pos, stop_type, stop, NULL);
+    else
+      gst_segment_do_seek (&demux->segment, rate, format, flags, start_type,
+          start, stop_type, current_pos, NULL);
+  }
+
   return TRUE;
 }
 
@@ -416,8 +397,14 @@
   GstHLSDemux *hlsdemux = GST_HLS_DEMUX_CAST (demux);
   gchar *playlist = NULL;
 
-  gst_hls_demux_set_location (hlsdemux, demux->manifest_uri,
-      demux->manifest_base_uri);
+  if (hlsdemux->client)
+    gst_m3u8_client_free (hlsdemux->client);
+
+  hlsdemux->client =
+      gst_m3u8_client_new (demux->manifest_uri, demux->manifest_base_uri);
+
+  GST_INFO_OBJECT (demux, "Changed location: %s (base uri: %s)",
+      demux->manifest_uri, GST_STR_NULL (demux->manifest_base_uri));
 
   playlist = gst_hls_src_buf_to_utf8_playlist (buf);
   if (playlist == NULL) {
@@ -444,6 +431,9 @@
     } else {
       GList *tmp = gst_m3u8_client_get_playlist_for_bitrate (hlsdemux->client,
           demux->connection_speed);
+      GST_M3U8_CLIENT_LOCK (hlsdemux->client);
+      hlsdemux->client->main->current_variant = tmp;
+      GST_M3U8_CLIENT_UNLOCK (hlsdemux->client);
 
       child = GST_M3U8 (tmp->data);
     }
@@ -525,9 +515,12 @@
   return TRUE;
 
 key_failed:
-  /* TODO Raise this error to the user */
-  GST_WARNING_OBJECT (demux, "Failed to decrypt data");
-  return FALSE;
+  {
+    GST_ELEMENT_ERROR (demux, STREAM, DEMUX,
+        ("Couldn't retrieve key for decryption"), (NULL));
+    GST_WARNING_OBJECT (demux, "Failed to decrypt data");
+    return FALSE;
+  }
 }
 
 static GstFlowReturn
@@ -715,23 +708,25 @@
     return GST_FLOW_EOS;
   }
 
+  if (stream->discont)
+    discont = TRUE;
+
   /* set up our source for download */
-  if (hlsdemux->reset_pts || discont) {
+  if (hlsdemux->reset_pts || discont || stream->demux->segment.rate < 0.0) {
     stream->fragment.timestamp = timestamp;
   } else {
     stream->fragment.timestamp = GST_CLOCK_TIME_NONE;
   }
 
-  if (hlsdemux->current_key)
-    g_free (hlsdemux->current_key);
+  g_free (hlsdemux->current_key);
   hlsdemux->current_key = key;
-  if (hlsdemux->current_iv)
-    g_free (hlsdemux->current_iv);
+  g_free (hlsdemux->current_iv);
   hlsdemux->current_iv = iv;
   g_free (stream->fragment.uri);
   stream->fragment.uri = next_fragment_uri;
   stream->fragment.range_start = range_start;
   stream->fragment.range_end = range_end;
+  stream->fragment.duration = duration;
   if (discont)
     stream->discont = discont;
 
@@ -802,18 +797,6 @@
   gst_hls_demux_decrypt_end (demux);
 }
 
-static gboolean
-gst_hls_demux_set_location (GstHLSDemux * demux, const gchar * uri,
-    const gchar * base_uri)
-{
-  if (demux->client)
-    gst_m3u8_client_free (demux->client);
-  demux->client = gst_m3u8_client_new (uri, base_uri);
-  GST_INFO_OBJECT (demux, "Changed location: %s (base uri: %s)", uri,
-      GST_STR_NULL (base_uri));
-  return TRUE;
-}
-
 static gchar *
 gst_hls_src_buf_to_utf8_playlist (GstBuffer * buf)
 {
@@ -858,63 +841,64 @@
       TRUE, TRUE, TRUE, err);
   g_free (main_uri);
   if (download == NULL) {
-    if (!adaptive_demux->cancelled && update && !main_checked
-        && gst_m3u8_client_has_variant_playlist (demux->client)
-        && gst_m3u8_client_has_main (demux->client)) {
-      GError *err2 = NULL;
-      main_uri = gst_m3u8_client_get_uri (demux->client);
-      GST_INFO_OBJECT (demux,
-          "Updating playlist %s failed, attempt to refresh variant playlist %s",
-          uri, main_uri);
-      download =
-          gst_uri_downloader_fetch_uri (adaptive_demux->downloader,
-          main_uri, NULL, TRUE, TRUE, TRUE, &err2);
-      g_free (main_uri);
-      g_clear_error (&err2);
-      if (download != NULL) {
-        gchar *base_uri;
+    gchar *base_uri;
 
-        buf = gst_fragment_get_buffer (download);
-        playlist = gst_hls_src_buf_to_utf8_playlist (buf);
-        gst_buffer_unref (buf);
-
-        if (playlist == NULL) {
-          GST_WARNING_OBJECT (demux,
-              "Failed to validate variant playlist encoding");
-          g_free (uri);
-          g_object_unref (download);
-          return FALSE;
-        }
-
-        g_free (uri);
-        if (download->redirect_permanent && download->redirect_uri) {
-          uri = download->redirect_uri;
-          base_uri = NULL;
-        } else {
-          uri = download->uri;
-          base_uri = download->redirect_uri;
-        }
-
-        if (!gst_m3u8_client_update_variant_playlist (demux->client, playlist,
-                uri, base_uri)) {
-          GST_WARNING_OBJECT (demux, "Failed to update the variant playlist");
-          g_object_unref (download);
-          return FALSE;
-        }
-
-        g_object_unref (download);
-
-        g_clear_error (err);
-        main_checked = TRUE;
-        goto retry;
-      } else {
-        g_free (uri);
-        return FALSE;
-      }
-    } else {
+    if (!update || main_checked
+        || !gst_m3u8_client_has_variant_playlist (demux->client)) {
       g_free (uri);
       return FALSE;
     }
+
+    g_clear_error (err);
+    main_uri = gst_m3u8_client_get_uri (demux->client);
+    GST_INFO_OBJECT (demux,
+        "Updating playlist %s failed, attempt to refresh variant playlist %s",
+        uri, main_uri);
+    download =
+        gst_uri_downloader_fetch_uri (adaptive_demux->downloader,
+        main_uri, NULL, TRUE, TRUE, TRUE, err);
+    g_free (main_uri);
+    if (download == NULL) {
+      g_free (uri);
+      return FALSE;
+    }
+
+    buf = gst_fragment_get_buffer (download);
+    playlist = gst_hls_src_buf_to_utf8_playlist (buf);
+    gst_buffer_unref (buf);
+
+    if (playlist == NULL) {
+      GST_WARNING_OBJECT (demux,
+          "Failed to validate variant playlist encoding");
+      g_free (uri);
+      g_object_unref (download);
+      g_set_error (err, GST_STREAM_ERROR, GST_STREAM_ERROR_WRONG_TYPE,
+          "Couldn't validate playlist encoding");
+      return FALSE;
+    }
+
+    g_free (uri);
+    if (download->redirect_permanent && download->redirect_uri) {
+      uri = download->redirect_uri;
+      base_uri = NULL;
+    } else {
+      uri = download->uri;
+      base_uri = download->redirect_uri;
+    }
+
+    if (!gst_m3u8_client_update_variant_playlist (demux->client, playlist,
+            uri, base_uri)) {
+      GST_WARNING_OBJECT (demux, "Failed to update the variant playlist");
+      g_object_unref (download);
+      g_set_error (err, GST_STREAM_ERROR, GST_STREAM_ERROR_FAILED,
+          "Couldn't update playlist");
+      return FALSE;
+    }
+
+    g_object_unref (download);
+
+    main_checked = TRUE;
+    goto retry;
   }
   g_free (uri);
 
@@ -1000,6 +984,9 @@
       target_pos = MAX (target_pos, demux->client->sequence_position);
     }
 
+    GST_LOG_OBJECT (demux, "Looking for sequence position %"
+        GST_TIME_FORMAT " in updated playlist", GST_TIME_ARGS (target_pos));
+
     current_pos = 0;
     for (walk = demux->client->current->files; walk; walk = walk->next) {
       GstM3U8MediaFile *file = walk->data;
@@ -1058,9 +1045,8 @@
 
   GST_INFO_OBJECT (demux, "Client was on %dbps, max allowed is %dbps, switching"
       " to bitrate %dbps", old_bandwidth, max_bitrate, new_bandwidth);
-  stream->discont = TRUE;
 
-  if (gst_hls_demux_update_playlist (demux, FALSE, NULL)) {
+  if (gst_hls_demux_update_playlist (demux, TRUE, NULL)) {
     gchar *uri;
     gchar *main_uri;
     uri = gst_m3u8_client_get_current_uri (demux->client);
@@ -1075,6 +1061,7 @@
     g_free (main_uri);
     if (changed)
       *changed = TRUE;
+    stream->discont = TRUE;
   } else {
     GList *failover = NULL;
 
diff --git a/ext/hls/gsthlsdemux.h b/ext/hls/gsthlsdemux.h
index daa3670..1154236 100644
--- a/ext/hls/gsthlsdemux.h
+++ b/ext/hls/gsthlsdemux.h
@@ -26,7 +26,7 @@
 
 #include <gst/gst.h>
 #include "m3u8.h"
-#include "gstfragmented.h"
+#include "gsthls.h"
 #include <gst/adaptivedemux/gstadaptivedemux.h>
 #if defined(HAVE_OPENSSL)
 #include <openssl/evp.h>
diff --git a/ext/hls/gsthlsplugin.c b/ext/hls/gsthlsplugin.c
new file mode 100644
index 0000000..552f514
--- /dev/null
+++ b/ext/hls/gsthlsplugin.c
@@ -0,0 +1,32 @@
+#ifdef HAVE_CONFIG_H
+#  include <config.h>
+#endif
+
+#include <gst/gst.h>
+
+#include "gsthls.h"
+#include "gsthlsdemux.h"
+#include "gsthlssink.h"
+
+GST_DEBUG_CATEGORY (hls_debug);
+
+static gboolean
+hls_init (GstPlugin * plugin)
+{
+  GST_DEBUG_CATEGORY_INIT (hls_debug, "hls", 0, "HTTP Live Streaming (HLS)");
+
+  if (!gst_element_register (plugin, "hlsdemux", GST_RANK_PRIMARY,
+          GST_TYPE_HLS_DEMUX) || FALSE)
+    return FALSE;
+
+  if (!gst_hls_sink_plugin_init (plugin))
+    return FALSE;
+
+  return TRUE;
+}
+
+GST_PLUGIN_DEFINE (GST_VERSION_MAJOR,
+    GST_VERSION_MINOR,
+    hls,
+    "HTTP Live Streaming (HLS)",
+    hls_init, VERSION, GST_LICENSE, PACKAGE_NAME, GST_PACKAGE_ORIGIN)
diff --git a/ext/hls/gsthlssink.c b/ext/hls/gsthlssink.c
index de5e84c..03671d0 100644
--- a/ext/hls/gsthlssink.c
+++ b/ext/hls/gsthlssink.c
@@ -36,7 +36,6 @@
 #include "gsthlssink.h"
 #include <gst/pbutils/pbutils.h>
 #include <gst/video/video.h>
-#include <gio/gio.h>
 #include <glib/gstdio.h>
 #include <memory.h>
 
diff --git a/ext/hls/gstm3u8playlist.c b/ext/hls/gstm3u8playlist.c
index f2c556b..c600702 100644
--- a/ext/hls/gstm3u8playlist.c
+++ b/ext/hls/gstm3u8playlist.c
@@ -21,20 +21,10 @@
 
 #include <glib.h>
 
-#include "gstfragmented.h"
+#include "gsthls.h"
 #include "gstm3u8playlist.h"
 
-#define GST_CAT_DEFAULT fragmented_debug
-
-#define M3U8_HEADER_TAG "#EXTM3U\n"
-#define M3U8_VERSION_TAG "#EXT-X-VERSION:%d\n"
-#define M3U8_ALLOW_CACHE_TAG "#EXT-X-ALLOW-CACHE:%s\n"
-#define M3U8_TARGETDURATION_TAG "#EXT-X-TARGETDURATION:%d\n"
-#define M3U8_MEDIA_SEQUENCE_TAG "#EXT-X-MEDIA-SEQUENCE:%d\n"
-#define M3U8_DISCONTINUITY_TAG "#EXT-X-DISCONTINUITY\n"
-#define M3U8_INT_INF_TAG "#EXTINF:%d,%s\n%s\n"
-#define M3U8_FLOAT_INF_TAG "#EXTINF:%s,%s\n%s\n"
-#define M3U8_ENDLIST_TAG "#EXT-X-ENDLIST"
+#define GST_CAT_DEFAULT hls_debug
 
 enum
 {
@@ -42,6 +32,16 @@
   GST_M3U8_PLAYLIST_TYPE_VOD,
 };
 
+typedef struct _GstM3U8Entry GstM3U8Entry;
+
+struct _GstM3U8Entry
+{
+  gfloat duration;
+  gchar *title;
+  gchar *url;
+  gboolean discontinuous;
+};
+
 static GstM3U8Entry *
 gst_m3u8_entry_new (const gchar * url, const gchar * title,
     gfloat duration, gboolean discontinuous)
@@ -68,25 +68,6 @@
   g_free (entry);
 }
 
-static gchar *
-gst_m3u8_entry_render (GstM3U8Entry * entry, guint version)
-{
-  gchar buf[G_ASCII_DTOSTR_BUF_SIZE];
-
-  g_return_val_if_fail (entry != NULL, NULL);
-
-  if (version < 3)
-    return g_strdup_printf ("%s" M3U8_INT_INF_TAG,
-        entry->discontinuous ? M3U8_DISCONTINUITY_TAG : "",
-        (gint) ((entry->duration + 500 * GST_MSECOND) / GST_SECOND),
-        entry->title ? entry->title : "", entry->url);
-
-  return g_strdup_printf ("%s" M3U8_FLOAT_INF_TAG,
-      entry->discontinuous ? M3U8_DISCONTINUITY_TAG : "",
-      g_ascii_dtostr (buf, sizeof (buf), (entry->duration / GST_SECOND)),
-      entry->title ? entry->title : "", entry->url);
-}
-
 GstM3U8Playlist *
 gst_m3u8_playlist_new (guint version, guint window_size, gboolean allow_cache)
 {
@@ -148,12 +129,12 @@
 static guint
 gst_m3u8_playlist_target_duration (GstM3U8Playlist * playlist)
 {
-  gint i;
-  GstM3U8Entry *entry;
   guint64 target_duration = 0;
+  GList *l;
 
-  for (i = 0; i < playlist->entries->length; i++) {
-    entry = (GstM3U8Entry *) g_queue_peek_nth (playlist->entries, i);
+  for (l = playlist->entries->head; l != NULL; l = l->next) {
+    GstM3U8Entry *entry = l->data;
+
     if (entry->duration > target_duration)
       target_duration = entry->duration;
   }
@@ -161,65 +142,52 @@
   return (guint) ((target_duration + 500 * GST_MSECOND) / GST_SECOND);
 }
 
-static void
-render_entry (GstM3U8Entry * entry, GstM3U8Playlist * playlist)
-{
-  gchar *entry_str;
-
-  entry_str = gst_m3u8_entry_render (entry, playlist->version);
-  g_string_append_printf (playlist->playlist_str, "%s", entry_str);
-  g_free (entry_str);
-}
-
 gchar *
 gst_m3u8_playlist_render (GstM3U8Playlist * playlist)
 {
-  gchar *pl;
+  GString *playlist_str;
+  GList *l;
 
   g_return_val_if_fail (playlist != NULL, NULL);
 
-  playlist->playlist_str = g_string_new ("");
+  playlist_str = g_string_new ("#EXTM3U\n");
 
-  /* #EXTM3U */
-  g_string_append_printf (playlist->playlist_str, M3U8_HEADER_TAG);
-  /* #EXT-X-VERSION */
-  g_string_append_printf (playlist->playlist_str, M3U8_VERSION_TAG,
+  g_string_append_printf (playlist_str, "#EXT-X-VERSION:%d\n",
       playlist->version);
-  /* #EXT-X-ALLOW_CACHE */
-  g_string_append_printf (playlist->playlist_str, M3U8_ALLOW_CACHE_TAG,
+
+  g_string_append_printf (playlist_str, "#EXT-X-ALLOW-CACHE:%s\n",
       playlist->allow_cache ? "YES" : "NO");
-  /* #EXT-X-MEDIA-SEQUENCE */
-  g_string_append_printf (playlist->playlist_str, M3U8_MEDIA_SEQUENCE_TAG,
+
+  g_string_append_printf (playlist_str, "#EXT-X-MEDIA-SEQUENCE:%d\n",
       playlist->sequence_number - playlist->entries->length);
-  /* #EXT-X-TARGETDURATION */
-  g_string_append_printf (playlist->playlist_str, M3U8_TARGETDURATION_TAG,
+
+  g_string_append_printf (playlist_str, "#EXT-X-TARGETDURATION:%u\n",
       gst_m3u8_playlist_target_duration (playlist));
-  g_string_append_printf (playlist->playlist_str, "\n");
+  g_string_append (playlist_str, "\n");
 
   /* Entries */
-  g_queue_foreach (playlist->entries, (GFunc) render_entry, playlist);
+  for (l = playlist->entries->head; l != NULL; l = l->next) {
+    gchar buf[G_ASCII_DTOSTR_BUF_SIZE];
+    GstM3U8Entry *entry = l->data;
+
+    if (entry->discontinuous)
+      g_string_append (playlist_str, "#EXT-X-DISCONTINUITY\n");
+
+    if (playlist->version < 3) {
+      g_string_append_printf (playlist_str, "#EXTINF:%d,%s\n",
+          (gint) ((entry->duration + 500 * GST_MSECOND) / GST_SECOND),
+          entry->title ? entry->title : "");
+    } else {
+      g_string_append_printf (playlist_str, "#EXTINF:%s,%s\n",
+          g_ascii_dtostr (buf, sizeof (buf), entry->duration / GST_SECOND),
+          entry->title ? entry->title : "");
+    }
+
+    g_string_append_printf (playlist_str, "%s\n", entry->url);
+  }
 
   if (playlist->end_list)
-    g_string_append_printf (playlist->playlist_str, M3U8_ENDLIST_TAG);
+    g_string_append (playlist_str, "#EXT-X-ENDLIST");
 
-  pl = playlist->playlist_str->str;
-  g_string_free (playlist->playlist_str, FALSE);
-  return pl;
-}
-
-void
-gst_m3u8_playlist_clear (GstM3U8Playlist * playlist)
-{
-  g_return_if_fail (playlist != NULL);
-
-  g_queue_foreach (playlist->entries, (GFunc) gst_m3u8_entry_free, NULL);
-  g_queue_clear (playlist->entries);
-}
-
-guint
-gst_m3u8_playlist_n_entries (GstM3U8Playlist * playlist)
-{
-  g_return_val_if_fail (playlist != NULL, 0);
-
-  return playlist->entries->length;
+  return g_string_free (playlist_str, FALSE);
 }
diff --git a/ext/hls/gstm3u8playlist.h b/ext/hls/gstm3u8playlist.h
index 0e95132..7d80435 100644
--- a/ext/hls/gstm3u8playlist.h
+++ b/ext/hls/gstm3u8playlist.h
@@ -23,21 +23,10 @@
 #define __GST_M3U8_PLAYLIST_H__
 
 #include <glib.h>
-#include <gio/gio.h>
 
 G_BEGIN_DECLS
 
 typedef struct _GstM3U8Playlist GstM3U8Playlist;
-typedef struct _GstM3U8Entry GstM3U8Entry;
-
-
-struct _GstM3U8Entry
-{
-  gfloat duration;
-  gchar *title;
-  gchar *url;
-  gboolean discontinuous;
-};
 
 struct _GstM3U8Playlist
 {
@@ -50,23 +39,24 @@
 
   /*< Private >*/
   GQueue *entries;
-  GString *playlist_str;
 };
 
 
 GstM3U8Playlist * gst_m3u8_playlist_new (guint version, 
 				         guint window_size,
 					 gboolean allow_cache);
-void gst_m3u8_playlist_free (GstM3U8Playlist * playlist);
-gboolean gst_m3u8_playlist_add_entry (GstM3U8Playlist * playlist,
-    				     const gchar * url,
-				     const gchar *title,
-				     gfloat duration,
-				     guint index,
-				     gboolean discontinuous);
-gchar * gst_m3u8_playlist_render (GstM3U8Playlist * playlist); 
-void gst_m3u8_playlist_clear (GstM3U8Playlist * playlist); 
-guint gst_m3u8_playlist_n_entries (GstM3U8Playlist * playlist); 
+
+void              gst_m3u8_playlist_free (GstM3U8Playlist * playlist);
+
+gboolean          gst_m3u8_playlist_add_entry (GstM3U8Playlist * playlist,
+                                               const gchar     * url,
+                                               const gchar     * title,
+                                               gfloat            duration,
+                                               guint             index,
+                                               gboolean          discontinuous);
+
+gchar *           gst_m3u8_playlist_render (GstM3U8Playlist * playlist);
 
 G_END_DECLS
+
 #endif /* __M3U8_H__ */
diff --git a/ext/hls/m3u8.c b/ext/hls/m3u8.c
index 4265f97..df267f7 100644
--- a/ext/hls/m3u8.c
+++ b/ext/hls/m3u8.c
@@ -25,29 +25,10 @@
 #include <glib.h>
 #include <string.h>
 
-#include "gstfragmented.h"
+#include "gsthls.h"
 #include "m3u8.h"
 
-#define GST_CAT_DEFAULT fragmented_debug
-
-#if !GLIB_CHECK_VERSION (2, 33, 4)
-#define g_list_copy_deep gst_g_list_copy_deep
-static GList *
-gst_g_list_copy_deep (GList * list, GCopyFunc func, gpointer user_data)
-{
-  list = g_list_copy (list);
-
-  if (func != NULL) {
-    GList *l;
-
-    for (l = list; l != NULL; l = l->next) {
-      l->data = func (l->data, user_data);
-    }
-  }
-
-  return list;
-}
-#endif
+#define GST_CAT_DEFAULT hls_debug
 
 static GstM3U8 *gst_m3u8_new (void);
 static void gst_m3u8_free (GstM3U8 * m3u8);
@@ -131,84 +112,6 @@
   g_free (self);
 }
 
-static GstM3U8MediaFile *
-gst_m3u8_media_file_copy (const GstM3U8MediaFile * self, gpointer user_data)
-{
-  g_return_val_if_fail (self != NULL, NULL);
-
-  return gst_m3u8_media_file_new (g_strdup (self->uri), g_strdup (self->title),
-      self->duration, self->sequence);
-}
-
-static GstM3U8 *
-_m3u8_copy (const GstM3U8 * self, GstM3U8 * parent)
-{
-  GstM3U8 *dup;
-
-  g_return_val_if_fail (self != NULL, NULL);
-
-  dup = gst_m3u8_new ();
-  dup->uri = g_strdup (self->uri);
-  dup->base_uri = g_strdup (self->base_uri);
-  dup->name = g_strdup (self->name);
-  dup->endlist = self->endlist;
-  dup->version = self->version;
-  dup->targetduration = self->targetduration;
-  dup->allowcache = self->allowcache;
-  dup->bandwidth = self->bandwidth;
-  dup->program_id = self->program_id;
-  dup->codecs = g_strdup (self->codecs);
-  dup->width = self->width;
-  dup->height = self->height;
-  dup->iframe = self->iframe;
-  dup->files =
-      g_list_copy_deep (self->files, (GCopyFunc) gst_m3u8_media_file_copy,
-      NULL);
-
-  /* private */
-  dup->last_data = g_strdup (self->last_data);
-  dup->lists = g_list_copy_deep (self->lists, (GCopyFunc) _m3u8_copy, dup);
-  dup->iframe_lists =
-      g_list_copy_deep (self->iframe_lists, (GCopyFunc) _m3u8_copy, dup);
-  /* NOTE: current_variant will get set in gst_m3u8_copy () */
-  dup->parent = parent;
-  dup->mediasequence = self->mediasequence;
-  return dup;
-}
-
-static GstM3U8 *
-gst_m3u8_copy (const GstM3U8 * self)
-{
-  GList *entry;
-  guint n;
-
-  GstM3U8 *dup = _m3u8_copy (self, NULL);
-
-  if (self->current_variant != NULL) {
-    for (n = 0, entry = self->lists; entry; entry = entry->next, n++) {
-      if (entry == self->current_variant) {
-        dup->current_variant = g_list_nth (dup->lists, n);
-        break;
-      }
-    }
-
-    if (!dup->current_variant) {
-      for (n = 0, entry = self->iframe_lists; entry; entry = entry->next, n++) {
-        if (entry == self->current_variant) {
-          dup->current_variant = g_list_nth (dup->iframe_lists, n);
-          break;
-        }
-      }
-
-      if (!dup->current_variant) {
-        GST_ERROR ("Failed to determine current playlist");
-      }
-    }
-  }
-
-  return dup;
-}
-
 static gboolean
 int_from_string (gchar * ptr, gchar ** endptr, gint * val)
 {
@@ -297,7 +200,7 @@
 static gboolean
 parse_attributes (gchar ** ptr, gchar ** a, gchar ** v)
 {
-  gchar *end = NULL, *p;
+  gchar *end = NULL, *p, *ve;
 
   g_return_val_if_fail (ptr != NULL, FALSE);
   g_return_val_if_fail (*ptr != NULL, FALSE);
@@ -330,8 +233,20 @@
 
   *v = p = g_utf8_strchr (*ptr, -1, '=');
   if (*v) {
-    *v = g_utf8_next_char (*v);
     *p = '\0';
+    *v = g_utf8_next_char (*v);
+    if (**v == '"') {
+      ve = g_utf8_next_char (*v);
+      if (ve) {
+        ve = g_utf8_strchr (ve, -1, '"');
+      }
+      if (ve) {
+        *v = g_utf8_next_char (*v);
+        *ve = '\0';
+      } else {
+        GST_WARNING ("Cannot remove quotation marks from %s", *a);
+      }
+    }
   } else {
     GST_WARNING ("missing = after attribute");
     return FALSE;
@@ -341,28 +256,6 @@
   return TRUE;
 }
 
-static gchar *
-unquote_string (gchar * string)
-{
-  gchar *string_ret;
-
-  string_ret = strchr (string, '"');
-  if (string_ret != NULL) {
-    /* found initialization quotation mark of string */
-    string = string_ret + 1;
-    string_ret = strchr (string, '"');
-    if (string_ret != NULL) {
-      /* found finalizing quotation mark of string */
-      string_ret[0] = '\0';
-    } else {
-      GST_WARNING
-          ("wrong string unqouting - cannot find finalizing quotation mark");
-      return NULL;
-    }
-  }
-  return string;
-}
-
 static gint
 _m3u8_compare_uri (GstM3U8 * a, gchar * uri)
 {
@@ -394,6 +287,7 @@
   gboolean have_iv = FALSE;
   guint8 iv[16] = { 0, };
   gint64 size = -1, offset = -1;
+  gint64 mediasequence;
 
   g_return_val_if_fail (self != NULL, FALSE);
   g_return_val_if_fail (data != NULL, FALSE);
@@ -416,6 +310,8 @@
     return FALSE;
   }
 
+  GST_TRACE ("data:\n%s", data);
+
   g_free (self->last_data);
   self->last_data = data;
 
@@ -426,6 +322,7 @@
     self->files = NULL;
   }
   client->duration = GST_CLOCK_TIME_NONE;
+  mediasequence = 0;
 
   /* By default, allow caching */
   self->allowcache = TRUE;
@@ -469,9 +366,7 @@
         list = NULL;
       } else {
         GstM3U8MediaFile *file;
-        file =
-            gst_m3u8_media_file_new (data, title, duration,
-            self->mediasequence++);
+        file = gst_m3u8_media_file_new (data, title, duration, mediasequence++);
 
         /* set encryption params */
         file->key = current_key ? g_strdup (current_key) : NULL;
@@ -547,7 +442,6 @@
         GstM3U8 *new_list;
 
         new_list = gst_m3u8_new ();
-        new_list->parent = self;
         new_list->iframe = iframe;
         data = data + (iframe ? 26 : 18);
         while (data && parse_attributes (&data, &a, &v)) {
@@ -572,24 +466,13 @@
             }
           } else if (iframe && g_str_equal (a, "URI")) {
             gchar *name;
-            gchar *uri = g_strdup (v);
-            gchar *urip = uri;
+            gchar *uri;
 
-            uri = unquote_string (uri);
+            uri = uri_join (self->base_uri ? self->base_uri : self->uri, v);
             if (uri) {
-              uri = uri_join (self->base_uri ? self->base_uri : self->uri, uri);
-              if (uri == NULL) {
-                g_free (urip);
-                continue;
-              }
               name = g_strdup (uri);
-
               gst_m3u8_set_uri (new_list, uri, NULL, name);
-            } else {
-              GST_WARNING
-                  ("Cannot remove quotation marks from i-frame-stream URI");
             }
-            g_free (urip);
           }
         }
 
@@ -613,7 +496,7 @@
           self->targetduration = val * GST_SECOND;
       } else if (g_str_has_prefix (data_ext_x, "MEDIA-SEQUENCE:")) {
         if (int_from_string (data + 22, &data, &val))
-          self->mediasequence = val;
+          mediasequence = val;
       } else if (g_str_has_prefix (data_ext_x, "DISCONTINUITY")) {
         discontinuity = TRUE;
       } else if (g_str_has_prefix (data_ext_x, "PROGRAM-DATE-TIME:")) {
@@ -632,18 +515,8 @@
         current_key = NULL;
         while (data && parse_attributes (&data, &a, &v)) {
           if (g_str_equal (a, "URI")) {
-            gchar *key = g_strdup (v);
-            gchar *keyp = key;
-
-            key = unquote_string (key);
-            if (key) {
-              current_key =
-                  uri_join (self->base_uri ? self->base_uri : self->uri, key);
-            } else {
-              GST_WARNING
-                  ("Cannot remove quotation marks from decryption key URI");
-            }
-            g_free (keyp);
+            current_key =
+                uri_join (self->base_uri ? self->base_uri : self->uri, v);
           } else if (g_str_equal (a, "IV")) {
             gchar *ivp = v;
             gint i;
@@ -786,7 +659,6 @@
   client->current_file_duration = GST_CLOCK_TIME_NONE;
   client->sequence = -1;
   client->sequence_position = 0;
-  client->update_failed_count = 0;
   client->highest_sequence_number = -1;
   client->duration = GST_CLOCK_TIME_NONE;
   g_mutex_init (&client->lock);
@@ -813,7 +685,6 @@
   GST_M3U8_CLIENT_LOCK (self);
   if (m3u8 != self->current) {
     self->current = m3u8;
-    self->update_failed_count = 0;
     self->duration = GST_CLOCK_TIME_NONE;
     self->current_file = NULL;
   }
@@ -835,10 +706,8 @@
   if (!gst_m3u8_update (self, m3u8, data, &updated))
     goto out;
 
-  if (!updated) {
-    self->update_failed_count++;
+  if (!updated)
     goto out;
-  }
 
   if (self->current && !self->current->files) {
     GST_ERROR ("Invalid media playlist, it does not contain any media files");
@@ -925,7 +794,7 @@
       GList *match = g_list_find_custom (unmatched_lists, list_entry->data,
           (GCompareFunc) _find_m3u8_list_match);
       if (match)
-        unmatched_lists = g_list_remove_link (unmatched_lists, match);
+        unmatched_lists = g_list_delete_link (unmatched_lists, match);
     }
 
     if (unmatched_lists != NULL) {
@@ -941,10 +810,12 @@
       g_list_free (unmatched_lists);
     }
 
-    /* Switch out the variant playlist */
+    /* Switch out the variant playlist, steal it from new_client */
     old = self->main;
 
-    self->main = gst_m3u8_copy (new_client->main);
+    self->main = new_client->main;
+    new_client->main = gst_m3u8_new ();
+
     if (self->main->lists)
       self->current = self->main->current_variant->data;
     else
@@ -962,12 +833,6 @@
   return ret;
 }
 
-static gboolean
-_find_current (GstM3U8MediaFile * file, GstM3U8Client * client)
-{
-  return file->sequence != client->sequence;
-}
-
 static GList *
 find_next_fragment (GstM3U8Client * client, GList * l, gboolean forward)
 {
@@ -1145,16 +1010,34 @@
     GList *l;
 
     GST_DEBUG ("Looking for fragment %" G_GINT64_FORMAT, client->sequence);
-    l = g_list_find_custom (client->current->files, client,
-        (GCompareFunc) _find_current);
-    if (l == NULL) {
+    for (l = client->current->files; l != NULL; l = l->next) {
+      if (GST_M3U8_MEDIA_FILE (l->data)->sequence == client->sequence) {
+        client->current_file = l;
+        break;
+      }
+    }
+    if (client->current_file == NULL) {
       GST_DEBUG
           ("Could not find current fragment, trying next fragment directly");
       alternate_advance (client, forward);
+
+      /* Resync sequence number if the above has failed for live streams */
+      if (client->current_file == NULL && GST_M3U8_CLIENT_IS_LIVE (client)) {
+        /* for live streams, start GST_M3U8_LIVE_MIN_FRAGMENT_DISTANCE from
+           the end of the playlist. See section 6.3.3 of HLS draft */
+        gint pos =
+            g_list_length (client->current->files) -
+            GST_M3U8_LIVE_MIN_FRAGMENT_DISTANCE;
+        client->current_file =
+            g_list_nth (client->current->files, pos >= 0 ? pos : 0);
+        client->current_file_duration =
+            GST_M3U8_MEDIA_FILE (client->current_file->data)->duration;
+
+        GST_WARNING ("Resyncing live playlist");
+      }
       GST_M3U8_CLIENT_UNLOCK (client);
       return;
     }
-    client->current_file = l;
   }
 
   file = GST_M3U8_MEDIA_FILE (client->current_file->data);
@@ -1256,22 +1139,6 @@
 }
 
 gboolean
-gst_m3u8_client_has_main (GstM3U8Client * client)
-{
-  gboolean ret;
-
-  g_return_val_if_fail (client != NULL, FALSE);
-
-  GST_M3U8_CLIENT_LOCK (client);
-  if (client->main)
-    ret = TRUE;
-  else
-    ret = FALSE;
-  GST_M3U8_CLIENT_UNLOCK (client);
-  return ret;
-}
-
-gboolean
 gst_m3u8_client_has_variant_playlist (GstM3U8Client * client)
 {
   gboolean ret;
@@ -1380,28 +1247,6 @@
   return ret;
 }
 
-guint64
-gst_m3u8_client_get_current_fragment_duration (GstM3U8Client * client)
-{
-  guint64 dur;
-  GList *list;
-
-  g_return_val_if_fail (client != NULL, 0);
-
-  GST_M3U8_CLIENT_LOCK (client);
-
-  list = g_list_find_custom (client->current->files, client,
-      (GCompareFunc) _find_current);
-  if (list == NULL) {
-    dur = -1;
-  } else {
-    dur = GST_M3U8_MEDIA_FILE (list->data)->duration;
-  }
-
-  GST_M3U8_CLIENT_UNLOCK (client);
-  return dur;
-}
-
 gboolean
 gst_m3u8_client_get_seek_range (GstM3U8Client * client, gint64 * start,
     gint64 * stop)
@@ -1410,6 +1255,7 @@
   GList *walk;
   GstM3U8MediaFile *file;
   guint count;
+  guint min_distance = 0;
 
   g_return_val_if_fail (client != NULL, FALSE);
 
@@ -1420,13 +1266,16 @@
     return FALSE;
   }
 
+  if (GST_M3U8_CLIENT_IS_LIVE (client)) {
+    /* min_distance is used to make sure the seek range is never closer than
+       GST_M3U8_LIVE_MIN_FRAGMENT_DISTANCE fragments from the end of a live
+       playlist - see 6.3.3. "Playing the Playlist file" of the HLS draft */
+    min_distance = GST_M3U8_LIVE_MIN_FRAGMENT_DISTANCE;
+  }
   count = g_list_length (client->current->files);
 
-  /* count is used to make sure the seek range is never closer than
-     GST_M3U8_LIVE_MIN_FRAGMENT_DISTANCE fragments from the end of the
-     playlist - see 6.3.3. "Playing the Playlist file" of the HLS draft */
   for (walk = client->current->files;
-      walk && count >= GST_M3U8_LIVE_MIN_FRAGMENT_DISTANCE; walk = walk->next) {
+      walk && count >= min_distance; walk = walk->next) {
     file = walk->data;
     --count;
     duration += file->duration;
diff --git a/ext/hls/m3u8.h b/ext/hls/m3u8.h
index 7b09de1..24eaaa1 100644
--- a/ext/hls/m3u8.h
+++ b/ext/hls/m3u8.h
@@ -25,7 +25,9 @@
 
 #include <glib.h>
 
-G_BEGIN_DECLS typedef struct _GstM3U8 GstM3U8;
+G_BEGIN_DECLS
+
+typedef struct _GstM3U8 GstM3U8;
 typedef struct _GstM3U8MediaFile GstM3U8MediaFile;
 typedef struct _GstM3U8Client GstM3U8Client;
 
@@ -36,11 +38,6 @@
 #define GST_M3U8_CLIENT_UNLOCK(c) g_mutex_unlock (&c->lock);
 
 #define GST_M3U8_CLIENT_IS_LIVE(c) ((!(c)->current || (c)->current->endlist) ? FALSE : TRUE)
-/* hlsdemux must not get closer to the end of a live stream than
-   GST_M3U8_LIVE_MIN_FRAGMENT_DISTANCE fragments. Section 6.3.3
-   "Playing the Playlist file" of the HLS draft states that this
-   value is three fragments */
-#define GST_M3U8_LIVE_MIN_FRAGMENT_DISTANCE 3
 
 /* hlsdemux must not get closer to the end of a live stream than
    GST_M3U8_LIVE_MIN_FRAGMENT_DISTANCE fragments. Section 6.3.3
@@ -74,8 +71,6 @@
   GList *lists;                 /* list of GstM3U8 from the main playlist */
   GList *iframe_lists;          /* I-frame lists from the main playlist */
   GList *current_variant;       /* Current variant playlist used */
-  GstM3U8 *parent;              /* main playlist (if any) */
-  gint64 mediasequence;          /* EXT-X-MEDIA-SEQUENCE & increased with new media file */
 };
 
 struct _GstM3U8MediaFile
@@ -94,7 +89,6 @@
 {
   GstM3U8 *main;                /* main playlist */
   GstM3U8 *current;
-  guint update_failed_count;
   GList *current_file;
   GstClockTime current_file_duration; /* Duration of current fragment */
   gint64 sequence;              /* the next sequence for this client */
@@ -107,30 +101,56 @@
 };
 
 
-GstM3U8Client *gst_m3u8_client_new (const gchar * uri, const gchar * base_uri);
-void gst_m3u8_client_free (GstM3U8Client * client);
-gboolean gst_m3u8_client_update (GstM3U8Client * client, gchar * data);
-gboolean gst_m3u8_client_update_variant_playlist (GstM3U8Client * client, gchar * data, const gchar * uri, const gchar * base_uri);
-void gst_m3u8_client_set_current (GstM3U8Client * client, GstM3U8 * m3u8);
-gboolean gst_m3u8_client_get_next_fragment (GstM3U8Client * client,
-    gboolean * discontinuity, gchar ** uri, GstClockTime * duration,
-    GstClockTime * timestamp, gint64 * range_start, gint64 * range_end,
-    gchar ** key, guint8 ** iv, gboolean forward);
-gboolean gst_m3u8_client_has_next_fragment (GstM3U8Client * client, gboolean forward);
-void gst_m3u8_client_advance_fragment (GstM3U8Client * client, gboolean forward);
-GstClockTime gst_m3u8_client_get_duration (GstM3U8Client * client);
-GstClockTime gst_m3u8_client_get_target_duration (GstM3U8Client * client);
-gchar *gst_m3u8_client_get_uri(GstM3U8Client * client);
-gchar *gst_m3u8_client_get_current_uri(GstM3U8Client * client);
-gboolean gst_m3u8_client_has_main(GstM3U8Client * client);
-gboolean gst_m3u8_client_has_variant_playlist(GstM3U8Client * client);
-gboolean gst_m3u8_client_is_live(GstM3U8Client * client);
-GList * gst_m3u8_client_get_playlist_for_bitrate (GstM3U8Client * client,
-    guint bitrate);
+GstM3U8Client * gst_m3u8_client_new (const gchar * uri, const gchar * base_uri);
 
-guint64 gst_m3u8_client_get_current_fragment_duration (GstM3U8Client * client);
+void            gst_m3u8_client_free (GstM3U8Client * client);
 
-gboolean gst_m3u8_client_get_seek_range(GstM3U8Client * client, gint64 * start, gint64 * stop);
+gboolean        gst_m3u8_client_update (GstM3U8Client * client, gchar * data);
+
+gboolean        gst_m3u8_client_update_variant_playlist (GstM3U8Client * client,
+                                                         gchar         * data,
+                                                         const gchar   * uri,
+                                                         const gchar   * base_uri);
+
+void            gst_m3u8_client_set_current         (GstM3U8Client * client,
+                                                     GstM3U8       * m3u8);
+
+gboolean        gst_m3u8_client_get_next_fragment   (GstM3U8Client * client,
+                                                     gboolean      * discontinuity,
+                                                     gchar        ** uri,
+                                                     GstClockTime  * duration,
+                                                     GstClockTime  * timestamp,
+                                                     gint64        * range_start,
+                                                     gint64        * range_end,
+                                                     gchar        ** key,
+                                                     guint8       ** iv,
+                                                     gboolean        forward);
+
+gboolean        gst_m3u8_client_has_next_fragment   (GstM3U8Client * client,
+                                                     gboolean        forward);
+
+void            gst_m3u8_client_advance_fragment    (GstM3U8Client * client,
+                                                     gboolean        forward);
+
+GstClockTime    gst_m3u8_client_get_duration        (GstM3U8Client * client);
+
+GstClockTime    gst_m3u8_client_get_target_duration (GstM3U8Client * client);
+
+gchar *         gst_m3u8_client_get_uri             (GstM3U8Client * client);
+
+gchar *         gst_m3u8_client_get_current_uri     (GstM3U8Client * client);
+
+gboolean        gst_m3u8_client_has_variant_playlist (GstM3U8Client * client);
+
+gboolean        gst_m3u8_client_is_live             (GstM3U8Client * client);
+
+GList *         gst_m3u8_client_get_playlist_for_bitrate (GstM3U8Client * client,
+                                                          guint           bitrate);
+
+gboolean        gst_m3u8_client_get_seek_range      (GstM3U8Client * client,
+                                                     gint64        * start,
+                                                     gint64        * stop);
 
 G_END_DECLS
+
 #endif /* __M3U8_H__ */
diff --git a/ext/kate/Makefile.in b/ext/kate/Makefile.in
index 50bc58c..650799b 100644
--- a/ext/kate/Makefile.in
+++ b/ext/kate/Makefile.in
@@ -118,16 +118,15 @@
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
 	$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
-	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gsettings.m4 \
-	$(top_srcdir)/m4/gst-fionread.m4 $(top_srcdir)/m4/gst-sdl.m4 \
-	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
-	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
-	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libgcrypt.m4 \
-	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
-	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
-	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
-	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
-	$(top_srcdir)/configure.ac
+	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gst-fionread.m4 \
+	$(top_srcdir)/m4/gst-sdl.m4 $(top_srcdir)/m4/iconv.m4 \
+	$(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \
+	$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
+	$(top_srcdir)/m4/libgcrypt.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
+	$(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \
@@ -280,6 +279,8 @@
 CLUTTER_X11_LIBS = @CLUTTER_X11_LIBS@
 CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
+CUDA_CFLAGS = @CUDA_CFLAGS@
+CUDA_LIBS = @CUDA_LIBS@
 CURL_CFLAGS = @CURL_CFLAGS@
 CURL_LIBS = @CURL_LIBS@
 CXX = @CXX@
@@ -317,6 +318,8 @@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
+EGL_CFLAGS = @EGL_CFLAGS@
+EGL_LIBS = @EGL_LIBS@
 EGREP = @EGREP@
 ERROR_CFLAGS = @ERROR_CFLAGS@
 ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
@@ -325,7 +328,6 @@
 EXIF_CFLAGS = @EXIF_CFLAGS@
 EXIF_LIBS = @EXIF_LIBS@
 FAAC_LIBS = @FAAC_LIBS@
-FAAD_IS_NEAAC = @FAAD_IS_NEAAC@
 FAAD_LIBS = @FAAD_LIBS@
 FFLAGS = @FFLAGS@
 FGREP = @FGREP@
@@ -344,8 +346,9 @@
 GIO_LIBS = @GIO_LIBS@
 GIO_UNIX_CFLAGS = @GIO_UNIX_CFLAGS@
 GIO_UNIX_LIBS = @GIO_UNIX_LIBS@
+GLES2_CFLAGS = @GLES2_CFLAGS@
+GLES2_LIBS = @GLES2_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
-GLIB_COMPILE_SCHEMAS = @GLIB_COMPILE_SCHEMAS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
@@ -362,16 +365,17 @@
 GMODULE_NO_EXPORT_LIBS = @GMODULE_NO_EXPORT_LIBS@
 GMSGFMT = @GMSGFMT@
 GMSGFMT_015 = @GMSGFMT_015@
+GNUSTL_CFLAGS = @GNUSTL_CFLAGS@
+GNUSTL_LIBS = @GNUSTL_LIBS@
 GRAPHENE_CFLAGS = @GRAPHENE_CFLAGS@
 GRAPHENE_LIBS = @GRAPHENE_LIBS@
 GREP = @GREP@
-GSETTINGS_CFLAGS = @GSETTINGS_CFLAGS@
-GSETTINGS_DISABLE_SCHEMAS_COMPILE = @GSETTINGS_DISABLE_SCHEMAS_COMPILE@
-GSETTINGS_LIBS = @GSETTINGS_LIBS@
 GSM_LIBS = @GSM_LIBS@
 GSTPB_PLUGINS_DIR = @GSTPB_PLUGINS_DIR@
 GSTPB_PREFIX = @GSTPB_PREFIX@
 GST_AGE = @GST_AGE@
+GST_ALLOCATORS_CFLAGS = @GST_ALLOCATORS_CFLAGS@
+GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
 GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
 GST_API_VERSION = @GST_API_VERSION@
 GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
@@ -397,6 +401,8 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PBUTILS_CFLAGS = @GST_PBUTILS_CFLAGS@
+GST_PBUTILS_LIBS = @GST_PBUTILS_LIBS@
 GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BAD_CFLAGS = @GST_PLUGINS_BAD_CFLAGS@
@@ -422,6 +428,8 @@
 GST_PREFIX = @GST_PREFIX@
 GST_REVISION = @GST_REVISION@
 GST_TOOLS_DIR = @GST_TOOLS_DIR@
+GST_VIDEO_CFLAGS = @GST_VIDEO_CFLAGS@
+GST_VIDEO_LIBS = @GST_VIDEO_LIBS@
 GTK3_CFLAGS = @GTK3_CFLAGS@
 GTK3_GL_CFLAGS = @GTK3_GL_CFLAGS@
 GTK3_GL_LIBS = @GTK3_GL_LIBS@
@@ -523,6 +531,7 @@
 LTLIBICONV = @LTLIBICONV@
 LTLIBINTL = @LTLIBINTL@
 LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
 MANIFEST_TOOL = @MANIFEST_TOOL@
@@ -536,8 +545,6 @@
 MODPLUG_LIBS = @MODPLUG_LIBS@
 MPEG2ENC_CFLAGS = @MPEG2ENC_CFLAGS@
 MPEG2ENC_LIBS = @MPEG2ENC_LIBS@
-MPG123_CFLAGS = @MPG123_CFLAGS@
-MPG123_LIBS = @MPG123_LIBS@
 MPLEX_CFLAGS = @MPLEX_CFLAGS@
 MPLEX_LDFLAGS = @MPLEX_LDFLAGS@
 MPLEX_LIBS = @MPLEX_LIBS@
@@ -553,6 +560,8 @@
 NETTLE_LIBS = @NETTLE_LIBS@
 NM = @NM@
 NMEDIT = @NMEDIT@
+NVENCODE_CFLAGS = @NVENCODE_CFLAGS@
+NVENCODE_LIBS = @NVENCODE_LIBS@
 OBJC = @OBJC@
 OBJCDEPMODE = @OBJCDEPMODE@
 OBJCFLAGS = @OBJCFLAGS@
@@ -610,16 +619,18 @@
 PYTHON_PLATFORM = @PYTHON_PLATFORM@
 PYTHON_PREFIX = @PYTHON_PREFIX@
 PYTHON_VERSION = @PYTHON_VERSION@
+QT_ANDROID_CFLAGS = @QT_ANDROID_CFLAGS@
+QT_ANDROID_LIBS = @QT_ANDROID_LIBS@
 QT_CFLAGS = @QT_CFLAGS@
 QT_LIBS = @QT_LIBS@
+QT_MAC_CFLAGS = @QT_MAC_CFLAGS@
+QT_MAC_LIBS = @QT_MAC_LIBS@
 QT_WAYLAND_CFLAGS = @QT_WAYLAND_CFLAGS@
 QT_WAYLAND_LIBS = @QT_WAYLAND_LIBS@
 QT_X11_CFLAGS = @QT_X11_CFLAGS@
 QT_X11_LIBS = @QT_X11_LIBS@
 RANLIB = @RANLIB@
 RCC = @RCC@
-RSVG_2_36_2_CFLAGS = @RSVG_2_36_2_CFLAGS@
-RSVG_2_36_2_LIBS = @RSVG_2_36_2_LIBS@
 RSVG_CFLAGS = @RSVG_CFLAGS@
 RSVG_LIBS = @RSVG_LIBS@
 RTMP_CFLAGS = @RTMP_CFLAGS@
@@ -671,6 +682,7 @@
 VOAACENC_LIBS = @VOAACENC_LIBS@
 VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
 VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VULKAN_LIBS = @VULKAN_LIBS@
 WARNING_CFLAGS = @WARNING_CFLAGS@
 WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
 WARNING_OBJCFLAGS = @WARNING_OBJCFLAGS@
@@ -681,6 +693,7 @@
 WAYLAND_LIBS = @WAYLAND_LIBS@
 WEBP_CFLAGS = @WEBP_CFLAGS@
 WEBP_LIBS = @WEBP_LIBS@
+WGET = @WGET@
 WILDMIDI_CFLAGS = @WILDMIDI_CFLAGS@
 WILDMIDI_LIBS = @WILDMIDI_LIBS@
 WINKS_LIBS = @WINKS_LIBS@
@@ -690,6 +703,8 @@
 X11_LIBS = @X11_LIBS@
 X265_CFLAGS = @X265_CFLAGS@
 X265_LIBS = @X265_LIBS@
+XCB_CFLAGS = @XCB_CFLAGS@
+XCB_LIBS = @XCB_LIBS@
 XCOMPOSITE_CFLAGS = @XCOMPOSITE_CFLAGS@
 XCOMPOSITE_LIBS = @XCOMPOSITE_LIBS@
 XGETTEXT = @XGETTEXT@
@@ -727,7 +742,6 @@
 docdir = @docdir@
 dvidir = @dvidir@
 exec_prefix = @exec_prefix@
-gsettingsschemadir = @gsettingsschemadir@
 host = @host@
 host_alias = @host_alias@
 host_cpu = @host_cpu@
diff --git a/ext/kate/gstkatedec.c b/ext/kate/gstkatedec.c
index 8748498..c61d514 100644
--- a/ext/kate/gstkatedec.c
+++ b/ext/kate/gstkatedec.c
@@ -61,14 +61,14 @@
  * <para>
  * This explicitely decodes a Kate stream:
  * <programlisting>
- * gst-launch filesrc location=test.ogg ! oggdemux ! katedec ! fakesink silent=TRUE
+ * gst-launch-1.0 filesrc location=test.ogg ! oggdemux ! katedec ! fakesink silent=TRUE
  * </programlisting>
  * </para>
  * <para>
  * This will automatically detect and use any Kate streams multiplexed
  * in an Ogg stream:
  * <programlisting>
- * gst-launch playbin uri=file:///tmp/test.ogg
+ * gst-launch-1.0 playbin uri=file:///tmp/test.ogg
  * </programlisting>
  * </para>
  * </refsect2>
diff --git a/ext/kate/gstkateenc.c b/ext/kate/gstkateenc.c
index 595868f..d88914a 100644
--- a/ext/kate/gstkateenc.c
+++ b/ext/kate/gstkateenc.c
@@ -62,7 +62,7 @@
  * <para>
  * This encodes a DVD SPU track to a Kate stream:
  * <programlisting>
- * gst-launch dvdreadsrc ! dvddemux ! dvdsubparse ! kateenc category=spu-subtitles ! oggmux ! filesink location=test.ogg
+ * gst-launch-1.0 dvdreadsrc ! dvddemux ! dvdsubparse ! kateenc category=spu-subtitles ! oggmux ! filesink location=test.ogg
  * </programlisting>
  * </para>
  * </refsect2>
@@ -791,12 +791,9 @@
   kbitmap = (kate_bitmap *) g_malloc (sizeof (kate_bitmap));
   kpalette = (kate_palette *) g_malloc (sizeof (kate_palette));
   if (!kregion || !kpalette || !kbitmap) {
-    if (kregion)
-      g_free (kregion);
-    if (kbitmap)
-      g_free (kbitmap);
-    if (kpalette)
-      g_free (kpalette);
+    g_free (kregion);
+    g_free (kbitmap);
+    g_free (kpalette);
     GST_ELEMENT_ERROR (ke, STREAM, ENCODE, (NULL), ("Out of memory"));
     return GST_FLOW_ERROR;
   }
diff --git a/ext/kate/gstkateparse.c b/ext/kate/gstkateparse.c
index 86657b8..99ea0c8 100644
--- a/ext/kate/gstkateparse.c
+++ b/ext/kate/gstkateparse.c
@@ -41,14 +41,14 @@
  * <title>Example pipelines</title>
  * <para>
  * <programlisting>
- * gst-launch -v filesrc location=kate.ogg ! oggdemux ! kateparse ! fakesink
+ * gst-launch-1.0 -v filesrc location=kate.ogg ! oggdemux ! kateparse ! fakesink
  * </programlisting>
  * This pipeline shows that the streamheader is set in the caps, and that each
  * buffer has the timestamp, duration, offset, and offset_end set.
  * </para>
  * <para>
  * <programlisting>
- * gst-launch filesrc location=kate.ogg ! oggdemux ! kateparse \
+ * gst-launch-1.0 filesrc location=kate.ogg ! oggdemux ! kateparse \
  *            ! oggmux ! filesink location=kate-remuxed.ogg
  * </programlisting>
  * This pipeline shows remuxing. kate-remuxed.ogg might not be exactly the same
diff --git a/ext/kate/gstkatespu.c b/ext/kate/gstkatespu.c
index bdf0dd8..b7838c1 100644
--- a/ext/kate/gstkatespu.c
+++ b/ext/kate/gstkatespu.c
@@ -911,7 +911,6 @@
 
 error:
   kate_tracker_clear (&kin);
-  if (bytes)
-    g_free (bytes);
+  g_free (bytes);
   return NULL;
 }
diff --git a/ext/kate/gstkatetag.c b/ext/kate/gstkatetag.c
index b7d88ed..e280917 100644
--- a/ext/kate/gstkatetag.c
+++ b/ext/kate/gstkatetag.c
@@ -44,20 +44,20 @@
  * </para>
  * <title>Example pipelines</title>
  * <para>
- * This element is only useful with gst-launch for modifying the language
+ * This element is only useful with gst-launch-1.0 for modifying the language
  * and/or category (which are properties of the stream located in the kate
  * beginning of stream header), because it does not support setting the tags
  * on a #GstTagSetter interface. Conceptually, the element will usually be
  * used like:
  * <programlisting>
- * gst-launch -v filesrc location=foo.ogg ! oggdemux ! katetag ! oggmux ! filesink location=bar.ogg
+ * gst-launch-1.0 -v filesrc location=foo.ogg ! oggdemux ! katetag ! oggmux ! filesink location=bar.ogg
  * </programlisting>
  * </para>
  * <para>
  * This pipeline will set the language and category of the stream to the
  * given values:
  * <programlisting>
- * gst-launch -v filesrc location=foo.ogg ! oggdemux ! katetag language=pt_BR category=subtitles ! oggmux ! filesink location=bar.ogg
+ * gst-launch-1.0 -v filesrc location=foo.ogg ! oggdemux ! katetag language=pt_BR category=subtitles ! oggmux ! filesink location=bar.ogg
  * </programlisting>
  * </para>
  * </refsect2>
diff --git a/ext/kate/gstkateutil.c b/ext/kate/gstkateutil.c
index 93777ab..cf1a2af 100644
--- a/ext/kate/gstkateutil.c
+++ b/ext/kate/gstkateutil.c
@@ -371,11 +371,9 @@
         }
 
         /* update properties */
-        if (decoder->language)
-          g_free (decoder->language);
+        g_free (decoder->language);
         decoder->language = g_strdup (decoder->k.ki->language);
-        if (decoder->category)
-          g_free (decoder->category);
+        g_free (decoder->category);
         decoder->category = g_strdup (decoder->k.ki->category);
         decoder->original_canvas_width = decoder->k.ki->original_canvas_width;
         decoder->original_canvas_height = decoder->k.ki->original_canvas_height;
diff --git a/ext/ladspa/Makefile.in b/ext/ladspa/Makefile.in
index ea14b1e..9c4f1d5 100644
--- a/ext/ladspa/Makefile.in
+++ b/ext/ladspa/Makefile.in
@@ -116,16 +116,15 @@
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
 	$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
-	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gsettings.m4 \
-	$(top_srcdir)/m4/gst-fionread.m4 $(top_srcdir)/m4/gst-sdl.m4 \
-	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
-	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
-	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libgcrypt.m4 \
-	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
-	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
-	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
-	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
-	$(top_srcdir)/configure.ac
+	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gst-fionread.m4 \
+	$(top_srcdir)/m4/gst-sdl.m4 $(top_srcdir)/m4/iconv.m4 \
+	$(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \
+	$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
+	$(top_srcdir)/m4/libgcrypt.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
+	$(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \
@@ -279,6 +278,8 @@
 CLUTTER_X11_LIBS = @CLUTTER_X11_LIBS@
 CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
+CUDA_CFLAGS = @CUDA_CFLAGS@
+CUDA_LIBS = @CUDA_LIBS@
 CURL_CFLAGS = @CURL_CFLAGS@
 CURL_LIBS = @CURL_LIBS@
 CXX = @CXX@
@@ -316,6 +317,8 @@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
+EGL_CFLAGS = @EGL_CFLAGS@
+EGL_LIBS = @EGL_LIBS@
 EGREP = @EGREP@
 ERROR_CFLAGS = @ERROR_CFLAGS@
 ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
@@ -324,7 +327,6 @@
 EXIF_CFLAGS = @EXIF_CFLAGS@
 EXIF_LIBS = @EXIF_LIBS@
 FAAC_LIBS = @FAAC_LIBS@
-FAAD_IS_NEAAC = @FAAD_IS_NEAAC@
 FAAD_LIBS = @FAAD_LIBS@
 FFLAGS = @FFLAGS@
 FGREP = @FGREP@
@@ -343,8 +345,9 @@
 GIO_LIBS = @GIO_LIBS@
 GIO_UNIX_CFLAGS = @GIO_UNIX_CFLAGS@
 GIO_UNIX_LIBS = @GIO_UNIX_LIBS@
+GLES2_CFLAGS = @GLES2_CFLAGS@
+GLES2_LIBS = @GLES2_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
-GLIB_COMPILE_SCHEMAS = @GLIB_COMPILE_SCHEMAS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
@@ -361,16 +364,17 @@
 GMODULE_NO_EXPORT_LIBS = @GMODULE_NO_EXPORT_LIBS@
 GMSGFMT = @GMSGFMT@
 GMSGFMT_015 = @GMSGFMT_015@
+GNUSTL_CFLAGS = @GNUSTL_CFLAGS@
+GNUSTL_LIBS = @GNUSTL_LIBS@
 GRAPHENE_CFLAGS = @GRAPHENE_CFLAGS@
 GRAPHENE_LIBS = @GRAPHENE_LIBS@
 GREP = @GREP@
-GSETTINGS_CFLAGS = @GSETTINGS_CFLAGS@
-GSETTINGS_DISABLE_SCHEMAS_COMPILE = @GSETTINGS_DISABLE_SCHEMAS_COMPILE@
-GSETTINGS_LIBS = @GSETTINGS_LIBS@
 GSM_LIBS = @GSM_LIBS@
 GSTPB_PLUGINS_DIR = @GSTPB_PLUGINS_DIR@
 GSTPB_PREFIX = @GSTPB_PREFIX@
 GST_AGE = @GST_AGE@
+GST_ALLOCATORS_CFLAGS = @GST_ALLOCATORS_CFLAGS@
+GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
 GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
 GST_API_VERSION = @GST_API_VERSION@
 GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
@@ -396,6 +400,8 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PBUTILS_CFLAGS = @GST_PBUTILS_CFLAGS@
+GST_PBUTILS_LIBS = @GST_PBUTILS_LIBS@
 GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BAD_CFLAGS = @GST_PLUGINS_BAD_CFLAGS@
@@ -421,6 +427,8 @@
 GST_PREFIX = @GST_PREFIX@
 GST_REVISION = @GST_REVISION@
 GST_TOOLS_DIR = @GST_TOOLS_DIR@
+GST_VIDEO_CFLAGS = @GST_VIDEO_CFLAGS@
+GST_VIDEO_LIBS = @GST_VIDEO_LIBS@
 GTK3_CFLAGS = @GTK3_CFLAGS@
 GTK3_GL_CFLAGS = @GTK3_GL_CFLAGS@
 GTK3_GL_LIBS = @GTK3_GL_LIBS@
@@ -522,6 +530,7 @@
 LTLIBICONV = @LTLIBICONV@
 LTLIBINTL = @LTLIBINTL@
 LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
 MANIFEST_TOOL = @MANIFEST_TOOL@
@@ -535,8 +544,6 @@
 MODPLUG_LIBS = @MODPLUG_LIBS@
 MPEG2ENC_CFLAGS = @MPEG2ENC_CFLAGS@
 MPEG2ENC_LIBS = @MPEG2ENC_LIBS@
-MPG123_CFLAGS = @MPG123_CFLAGS@
-MPG123_LIBS = @MPG123_LIBS@
 MPLEX_CFLAGS = @MPLEX_CFLAGS@
 MPLEX_LDFLAGS = @MPLEX_LDFLAGS@
 MPLEX_LIBS = @MPLEX_LIBS@
@@ -552,6 +559,8 @@
 NETTLE_LIBS = @NETTLE_LIBS@
 NM = @NM@
 NMEDIT = @NMEDIT@
+NVENCODE_CFLAGS = @NVENCODE_CFLAGS@
+NVENCODE_LIBS = @NVENCODE_LIBS@
 OBJC = @OBJC@
 OBJCDEPMODE = @OBJCDEPMODE@
 OBJCFLAGS = @OBJCFLAGS@
@@ -609,16 +618,18 @@
 PYTHON_PLATFORM = @PYTHON_PLATFORM@
 PYTHON_PREFIX = @PYTHON_PREFIX@
 PYTHON_VERSION = @PYTHON_VERSION@
+QT_ANDROID_CFLAGS = @QT_ANDROID_CFLAGS@
+QT_ANDROID_LIBS = @QT_ANDROID_LIBS@
 QT_CFLAGS = @QT_CFLAGS@
 QT_LIBS = @QT_LIBS@
+QT_MAC_CFLAGS = @QT_MAC_CFLAGS@
+QT_MAC_LIBS = @QT_MAC_LIBS@
 QT_WAYLAND_CFLAGS = @QT_WAYLAND_CFLAGS@
 QT_WAYLAND_LIBS = @QT_WAYLAND_LIBS@
 QT_X11_CFLAGS = @QT_X11_CFLAGS@
 QT_X11_LIBS = @QT_X11_LIBS@
 RANLIB = @RANLIB@
 RCC = @RCC@
-RSVG_2_36_2_CFLAGS = @RSVG_2_36_2_CFLAGS@
-RSVG_2_36_2_LIBS = @RSVG_2_36_2_LIBS@
 RSVG_CFLAGS = @RSVG_CFLAGS@
 RSVG_LIBS = @RSVG_LIBS@
 RTMP_CFLAGS = @RTMP_CFLAGS@
@@ -670,6 +681,7 @@
 VOAACENC_LIBS = @VOAACENC_LIBS@
 VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
 VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VULKAN_LIBS = @VULKAN_LIBS@
 WARNING_CFLAGS = @WARNING_CFLAGS@
 WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
 WARNING_OBJCFLAGS = @WARNING_OBJCFLAGS@
@@ -680,6 +692,7 @@
 WAYLAND_LIBS = @WAYLAND_LIBS@
 WEBP_CFLAGS = @WEBP_CFLAGS@
 WEBP_LIBS = @WEBP_LIBS@
+WGET = @WGET@
 WILDMIDI_CFLAGS = @WILDMIDI_CFLAGS@
 WILDMIDI_LIBS = @WILDMIDI_LIBS@
 WINKS_LIBS = @WINKS_LIBS@
@@ -689,6 +702,8 @@
 X11_LIBS = @X11_LIBS@
 X265_CFLAGS = @X265_CFLAGS@
 X265_LIBS = @X265_LIBS@
+XCB_CFLAGS = @XCB_CFLAGS@
+XCB_LIBS = @XCB_LIBS@
 XCOMPOSITE_CFLAGS = @XCOMPOSITE_CFLAGS@
 XCOMPOSITE_LIBS = @XCOMPOSITE_LIBS@
 XGETTEXT = @XGETTEXT@
@@ -726,7 +741,6 @@
 docdir = @docdir@
 dvidir = @dvidir@
 exec_prefix = @exec_prefix@
-gsettingsschemadir = @gsettingsschemadir@
 host = @host@
 host_alias = @host_alias@
 host_cpu = @host_cpu@
diff --git a/ext/ladspa/gstladspa.c b/ext/ladspa/gstladspa.c
index 02bb179..df06693 100644
--- a/ext/ladspa/gstladspa.c
+++ b/ext/ladspa/gstladspa.c
@@ -37,9 +37,9 @@
  * |[
  * (padsp) listplugins
  * (padsp) analyseplugin cmt.so amp_mono
- * gst-launch -e filesrc location="$myfile" ! decodebin ! audioconvert ! audioresample ! "audio/x-raw,format=S16LE,rate=48000,channels=1" ! wavenc ! filesink location="testin.wav"
+ * gst-launch-1.0 -e filesrc location="$myfile" ! decodebin ! audioconvert ! audioresample ! "audio/x-raw,format=S16LE,rate=48000,channels=1" ! wavenc ! filesink location="testin.wav"
  * (padsp) applyplugin testin.wav testout.wav cmt.so amp_mono 2 
- * gst-launch playbin uri=file://"$PWD"/testout.wav
+ * gst-launch-1.0 playbin uri=file://"$PWD"/testout.wav
  * ]| Decode any audio file into wav with the format expected for the specific ladspa plugin to be applied, apply the ladspa filter and play it.
  * </refsect2>
  *
@@ -48,7 +48,7 @@
  * <refsect2>
  * <title>Example LADSPA line with this plugins</title>
  * |[
- * gst-launch autoaudiosrc ! ladspa-cmt-so-amp-mono gain=2 ! ladspa-caps-so-plate ! ladspa-tap-echo-so-tap-stereo-echo l-delay=500 r-haas-delay=500 ! tee name=myT myT. ! queue ! autoaudiosink myT. ! queue ! audioconvert ! goom ! videoconvert ! xvimagesink pixel-aspect-ratio=3/4
+ * gst-launch-1.0 autoaudiosrc ! ladspa-cmt-so-amp-mono gain=2 ! ladspa-caps-so-plate ! ladspa-tap-echo-so-tap-stereo-echo l-delay=500 r-haas-delay=500 ! tee name=myT myT. ! queue ! autoaudiosink myT. ! queue ! audioconvert ! goom ! videoconvert ! xvimagesink pixel-aspect-ratio=3/4
  * ]| Get audio input, filter it through CAPS Plate and TAP Stereo Echo, play it and show a visualization (recommended hearphones).
  * </refsect2>
  *
@@ -82,7 +82,7 @@
  * <refsect2>
  * <title>Example Filter/Effect/Audio/LADSPA line with this plugins</title>
  * |[
- * gst-launch filesrc location="$myfile" ! decodebin ! audioconvert ! audioresample ! ladspa-calf-so-reverb decay-time=15 high-frq-damp=20000 room-size=5 diffusion=1 wet-amount=2 dry-amount=2 pre-delay=50 bass-cut=20000 treble-cut=20000 ! ladspa-tap-echo-so-tap-stereo-echo l-delay=500 r-haas-delay=500 ! autoaudiosink
+ * gst-launch-1.0 filesrc location="$myfile" ! decodebin ! audioconvert ! audioresample ! ladspa-calf-so-reverb decay-time=15 high-frq-damp=20000 room-size=5 diffusion=1 wet-amount=2 dry-amount=2 pre-delay=50 bass-cut=20000 treble-cut=20000 ! ladspa-tap-echo-so-tap-stereo-echo l-delay=500 r-haas-delay=500 ! autoaudiosink
  * ]| Decode any audio file, filter it through Calf Reverb LADSPA then TAP Stereo Echo, and play it.
  * </refsect2>
  * </listitem>
@@ -90,19 +90,19 @@
  * <refsect2>
  * <title>Example Source/Audio/LADSPA line with this plugins</title>
  * |[
- * gst-launch ladspasrc-sine-so-sine-fcac frequency=220 amplitude=100 ! audioconvert ! autoaudiosink
+ * gst-launch-1.0 ladspasrc-sine-so-sine-fcac frequency=220 amplitude=100 ! audioconvert ! autoaudiosink
  * ]| Generate a sine wave with Sine Oscillator (Freq:control, Amp:control) and play it.
  * </refsect2>
  * <refsect2>
  * <title>Example Source/Audio/LADSPA line with this plugins</title>
  * |[
- * gst-launch ladspasrc-caps-so-click bpm=240 volume=1 ! autoaudiosink
+ * gst-launch-1.0 ladspasrc-caps-so-click bpm=240 volume=1 ! autoaudiosink
  * ]| Generate clicks with CAPS Click - Metronome at 240 beats per minute and play it.
  * </refsect2>
  * <refsect2>
  * <title>Example Source/Audio/LADSPA line with this plugins</title>
  * |[
- * gst-launch ladspasrc-random-1661-so-random-fcsc-oa ! ladspa-cmt-so-amp-mono gain=1.5 ! ladspa-caps-so-plate ! tee name=myT myT. ! queue ! autoaudiosink myT. ! queue ! audioconvert ! wavescope ! videoconvert ! autovideosink
+ * gst-launch-1.0 ladspasrc-random-1661-so-random-fcsc-oa ! ladspa-cmt-so-amp-mono gain=1.5 ! ladspa-caps-so-plate ! tee name=myT myT. ! queue ! autoaudiosink myT. ! queue ! audioconvert ! wavescope ! videoconvert ! autovideosink
  * ]| Generate random wave, filter it trhough Mono Amplifier and Versatile Plate Reverb, and play, while showing, it.
  * </refsect2>
  * </listitem>
@@ -110,7 +110,7 @@
  * <refsect2>
  * <title>Example Sink/Audio/LADSPA line with this plugins</title>
  * |[
- * gst-launch autoaudiosrc ! ladspa-cmt-so-amp-mono gain=2 ! ladspa-caps-so-plate ! ladspa-tap-echo-so-tap-stereo-echo l-delay=500 r-haas-delay=500 ! tee name=myT myT. ! audioconvert ! audioresample ! queue ! ladspasink-cmt-so-null-ai myT. ! audioconvert ! audioresample ! queue ! goom ! videoconvert ! xvimagesink pixel-aspect-ratio=3/4
+ * gst-launch-1.0 autoaudiosrc ! ladspa-cmt-so-amp-mono gain=2 ! ladspa-caps-so-plate ! ladspa-tap-echo-so-tap-stereo-echo l-delay=500 r-haas-delay=500 ! tee name=myT myT. ! audioconvert ! audioresample ! queue ! ladspasink-cmt-so-null-ai myT. ! audioconvert ! audioresample ! queue ! goom ! videoconvert ! xvimagesink pixel-aspect-ratio=3/4
  * ]| Get audio input, filter it trhough Mono Amplifier, CAPS Plate LADSPA and TAP Stereo Echo, explicitily anulate audio with Null (Audio Output), and play a visualization (recommended hearphones).
  * </refsect2>
  * </listitem>
diff --git a/ext/ladspa/gstladspafilter.c b/ext/ladspa/gstladspafilter.c
index 69d0e63..2d1ea45 100644
--- a/ext/ladspa/gstladspafilter.c
+++ b/ext/ladspa/gstladspafilter.c
@@ -105,20 +105,19 @@
       g_assert_not_reached ();
   }
 
-  GST_DEBUG_OBJECT (ladspa_debug, "transformed %" GST_PTR_FORMAT, ret);
+  GST_DEBUG_OBJECT (base, "transformed %" GST_PTR_FORMAT, ret);
 
   if (filter) {
     GstCaps *intersection;
 
-    GST_DEBUG_OBJECT (ladspa_debug, "Using filter caps %" GST_PTR_FORMAT,
-        filter);
+    GST_DEBUG_OBJECT (base, "Using filter caps %" GST_PTR_FORMAT, filter);
 
     intersection =
         gst_caps_intersect_full (filter, ret, GST_CAPS_INTERSECT_FIRST);
     gst_caps_unref (ret);
     ret = intersection;
 
-    GST_DEBUG_OBJECT (ladspa_debug, "Intersection %" GST_PTR_FORMAT, ret);
+    GST_DEBUG_OBJECT (base, "Intersection %" GST_PTR_FORMAT, ret);
   }
 
   gst_caps_unref (srccaps);
diff --git a/ext/libde265/Makefile.in b/ext/libde265/Makefile.in
index 3229225..6405abb 100644
--- a/ext/libde265/Makefile.in
+++ b/ext/libde265/Makefile.in
@@ -116,16 +116,15 @@
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
 	$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
-	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gsettings.m4 \
-	$(top_srcdir)/m4/gst-fionread.m4 $(top_srcdir)/m4/gst-sdl.m4 \
-	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
-	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
-	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libgcrypt.m4 \
-	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
-	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
-	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
-	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
-	$(top_srcdir)/configure.ac
+	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gst-fionread.m4 \
+	$(top_srcdir)/m4/gst-sdl.m4 $(top_srcdir)/m4/iconv.m4 \
+	$(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \
+	$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
+	$(top_srcdir)/m4/libgcrypt.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
+	$(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \
@@ -276,6 +275,8 @@
 CLUTTER_X11_LIBS = @CLUTTER_X11_LIBS@
 CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
+CUDA_CFLAGS = @CUDA_CFLAGS@
+CUDA_LIBS = @CUDA_LIBS@
 CURL_CFLAGS = @CURL_CFLAGS@
 CURL_LIBS = @CURL_LIBS@
 CXX = @CXX@
@@ -313,6 +314,8 @@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
+EGL_CFLAGS = @EGL_CFLAGS@
+EGL_LIBS = @EGL_LIBS@
 EGREP = @EGREP@
 ERROR_CFLAGS = @ERROR_CFLAGS@
 ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
@@ -321,7 +324,6 @@
 EXIF_CFLAGS = @EXIF_CFLAGS@
 EXIF_LIBS = @EXIF_LIBS@
 FAAC_LIBS = @FAAC_LIBS@
-FAAD_IS_NEAAC = @FAAD_IS_NEAAC@
 FAAD_LIBS = @FAAD_LIBS@
 FFLAGS = @FFLAGS@
 FGREP = @FGREP@
@@ -340,8 +342,9 @@
 GIO_LIBS = @GIO_LIBS@
 GIO_UNIX_CFLAGS = @GIO_UNIX_CFLAGS@
 GIO_UNIX_LIBS = @GIO_UNIX_LIBS@
+GLES2_CFLAGS = @GLES2_CFLAGS@
+GLES2_LIBS = @GLES2_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
-GLIB_COMPILE_SCHEMAS = @GLIB_COMPILE_SCHEMAS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
@@ -358,16 +361,17 @@
 GMODULE_NO_EXPORT_LIBS = @GMODULE_NO_EXPORT_LIBS@
 GMSGFMT = @GMSGFMT@
 GMSGFMT_015 = @GMSGFMT_015@
+GNUSTL_CFLAGS = @GNUSTL_CFLAGS@
+GNUSTL_LIBS = @GNUSTL_LIBS@
 GRAPHENE_CFLAGS = @GRAPHENE_CFLAGS@
 GRAPHENE_LIBS = @GRAPHENE_LIBS@
 GREP = @GREP@
-GSETTINGS_CFLAGS = @GSETTINGS_CFLAGS@
-GSETTINGS_DISABLE_SCHEMAS_COMPILE = @GSETTINGS_DISABLE_SCHEMAS_COMPILE@
-GSETTINGS_LIBS = @GSETTINGS_LIBS@
 GSM_LIBS = @GSM_LIBS@
 GSTPB_PLUGINS_DIR = @GSTPB_PLUGINS_DIR@
 GSTPB_PREFIX = @GSTPB_PREFIX@
 GST_AGE = @GST_AGE@
+GST_ALLOCATORS_CFLAGS = @GST_ALLOCATORS_CFLAGS@
+GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
 GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
 GST_API_VERSION = @GST_API_VERSION@
 GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
@@ -393,6 +397,8 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PBUTILS_CFLAGS = @GST_PBUTILS_CFLAGS@
+GST_PBUTILS_LIBS = @GST_PBUTILS_LIBS@
 GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BAD_CFLAGS = @GST_PLUGINS_BAD_CFLAGS@
@@ -418,6 +424,8 @@
 GST_PREFIX = @GST_PREFIX@
 GST_REVISION = @GST_REVISION@
 GST_TOOLS_DIR = @GST_TOOLS_DIR@
+GST_VIDEO_CFLAGS = @GST_VIDEO_CFLAGS@
+GST_VIDEO_LIBS = @GST_VIDEO_LIBS@
 GTK3_CFLAGS = @GTK3_CFLAGS@
 GTK3_GL_CFLAGS = @GTK3_GL_CFLAGS@
 GTK3_GL_LIBS = @GTK3_GL_LIBS@
@@ -519,6 +527,7 @@
 LTLIBICONV = @LTLIBICONV@
 LTLIBINTL = @LTLIBINTL@
 LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
 MANIFEST_TOOL = @MANIFEST_TOOL@
@@ -532,8 +541,6 @@
 MODPLUG_LIBS = @MODPLUG_LIBS@
 MPEG2ENC_CFLAGS = @MPEG2ENC_CFLAGS@
 MPEG2ENC_LIBS = @MPEG2ENC_LIBS@
-MPG123_CFLAGS = @MPG123_CFLAGS@
-MPG123_LIBS = @MPG123_LIBS@
 MPLEX_CFLAGS = @MPLEX_CFLAGS@
 MPLEX_LDFLAGS = @MPLEX_LDFLAGS@
 MPLEX_LIBS = @MPLEX_LIBS@
@@ -549,6 +556,8 @@
 NETTLE_LIBS = @NETTLE_LIBS@
 NM = @NM@
 NMEDIT = @NMEDIT@
+NVENCODE_CFLAGS = @NVENCODE_CFLAGS@
+NVENCODE_LIBS = @NVENCODE_LIBS@
 OBJC = @OBJC@
 OBJCDEPMODE = @OBJCDEPMODE@
 OBJCFLAGS = @OBJCFLAGS@
@@ -606,16 +615,18 @@
 PYTHON_PLATFORM = @PYTHON_PLATFORM@
 PYTHON_PREFIX = @PYTHON_PREFIX@
 PYTHON_VERSION = @PYTHON_VERSION@
+QT_ANDROID_CFLAGS = @QT_ANDROID_CFLAGS@
+QT_ANDROID_LIBS = @QT_ANDROID_LIBS@
 QT_CFLAGS = @QT_CFLAGS@
 QT_LIBS = @QT_LIBS@
+QT_MAC_CFLAGS = @QT_MAC_CFLAGS@
+QT_MAC_LIBS = @QT_MAC_LIBS@
 QT_WAYLAND_CFLAGS = @QT_WAYLAND_CFLAGS@
 QT_WAYLAND_LIBS = @QT_WAYLAND_LIBS@
 QT_X11_CFLAGS = @QT_X11_CFLAGS@
 QT_X11_LIBS = @QT_X11_LIBS@
 RANLIB = @RANLIB@
 RCC = @RCC@
-RSVG_2_36_2_CFLAGS = @RSVG_2_36_2_CFLAGS@
-RSVG_2_36_2_LIBS = @RSVG_2_36_2_LIBS@
 RSVG_CFLAGS = @RSVG_CFLAGS@
 RSVG_LIBS = @RSVG_LIBS@
 RTMP_CFLAGS = @RTMP_CFLAGS@
@@ -667,6 +678,7 @@
 VOAACENC_LIBS = @VOAACENC_LIBS@
 VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
 VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VULKAN_LIBS = @VULKAN_LIBS@
 WARNING_CFLAGS = @WARNING_CFLAGS@
 WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
 WARNING_OBJCFLAGS = @WARNING_OBJCFLAGS@
@@ -677,6 +689,7 @@
 WAYLAND_LIBS = @WAYLAND_LIBS@
 WEBP_CFLAGS = @WEBP_CFLAGS@
 WEBP_LIBS = @WEBP_LIBS@
+WGET = @WGET@
 WILDMIDI_CFLAGS = @WILDMIDI_CFLAGS@
 WILDMIDI_LIBS = @WILDMIDI_LIBS@
 WINKS_LIBS = @WINKS_LIBS@
@@ -686,6 +699,8 @@
 X11_LIBS = @X11_LIBS@
 X265_CFLAGS = @X265_CFLAGS@
 X265_LIBS = @X265_LIBS@
+XCB_CFLAGS = @XCB_CFLAGS@
+XCB_LIBS = @XCB_LIBS@
 XCOMPOSITE_CFLAGS = @XCOMPOSITE_CFLAGS@
 XCOMPOSITE_LIBS = @XCOMPOSITE_LIBS@
 XGETTEXT = @XGETTEXT@
@@ -723,7 +738,6 @@
 docdir = @docdir@
 dvidir = @dvidir@
 exec_prefix = @exec_prefix@
-gsettingsschemadir = @gsettingsschemadir@
 host = @host@
 host_alias = @host_alias@
 host_cpu = @host_cpu@
diff --git a/ext/libde265/libde265-dec.c b/ext/libde265/libde265-dec.c
index 7cba37a..e11f12c 100644
--- a/ext/libde265/libde265-dec.c
+++ b/ext/libde265/libde265-dec.c
@@ -41,58 +41,6 @@
 
 #include "libde265-dec.h"
 
-#if !GLIB_CHECK_VERSION(2, 36, 0)
-#include <stdio.h>
-#ifdef HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-#ifdef G_OS_WIN32
-#include <windows.h>
-#endif
-#define g_get_num_processors gst_g_get_num_processors
-static guint
-gst_g_get_num_processors (void)
-{
-  guint threads = 0;
-
-#if defined(_SC_NPROC_ONLN)
-  threads = sysconf (_SC_NPROC_ONLN);
-#elif defined(_SC_NPROCESSORS_ONLN)
-  threads = sysconf (_SC_NPROCESSORS_ONLN);
-#elif defined(G_OS_WIN32)
-  {
-    SYSTEM_INFO sysinfo;
-    DWORD_PTR process_cpus;
-    DWORD_PTR system_cpus;
-
-    /* This *never* fails, but doesn't take CPU affinity into account */
-    GetSystemInfo (&sysinfo);
-    threads = (int) sysinfo.dwNumberOfProcessors;
-
-    /* This *can* fail, but produces correct results if affinity mask is used,
-     * unlike the simpler code above.
-     */
-    if (GetProcessAffinityMask (GetCurrentProcess (),
-            &process_cpus, &system_cpus)) {
-      unsigned int count;
-
-      for (count = 0; process_cpus != 0; process_cpus >>= 1)
-        if (process_cpus & 1)
-          count++;
-    }
-  }
-#else
-#warning "Don't know how to get number of CPU cores, will use the default thread count"
-  threads = DEFAULT_THREAD_COUNT;
-#endif
-
-  if (threads > 0)
-    return threads;
-
-  return 1;
-}
-#endif /* !GLIB_CHECK_VERSION(2, 36, 0) */
-
 /* use two decoder threads if no information about
  * available CPU cores can be retrieved */
 #define DEFAULT_THREAD_COUNT        2
diff --git a/ext/libmms/Makefile.in b/ext/libmms/Makefile.in
index 795abde..2a5336c 100644
--- a/ext/libmms/Makefile.in
+++ b/ext/libmms/Makefile.in
@@ -116,16 +116,15 @@
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
 	$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
-	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gsettings.m4 \
-	$(top_srcdir)/m4/gst-fionread.m4 $(top_srcdir)/m4/gst-sdl.m4 \
-	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
-	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
-	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libgcrypt.m4 \
-	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
-	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
-	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
-	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
-	$(top_srcdir)/configure.ac
+	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gst-fionread.m4 \
+	$(top_srcdir)/m4/gst-sdl.m4 $(top_srcdir)/m4/iconv.m4 \
+	$(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \
+	$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
+	$(top_srcdir)/m4/libgcrypt.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
+	$(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \
@@ -275,6 +274,8 @@
 CLUTTER_X11_LIBS = @CLUTTER_X11_LIBS@
 CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
+CUDA_CFLAGS = @CUDA_CFLAGS@
+CUDA_LIBS = @CUDA_LIBS@
 CURL_CFLAGS = @CURL_CFLAGS@
 CURL_LIBS = @CURL_LIBS@
 CXX = @CXX@
@@ -312,6 +313,8 @@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
+EGL_CFLAGS = @EGL_CFLAGS@
+EGL_LIBS = @EGL_LIBS@
 EGREP = @EGREP@
 ERROR_CFLAGS = @ERROR_CFLAGS@
 ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
@@ -320,7 +323,6 @@
 EXIF_CFLAGS = @EXIF_CFLAGS@
 EXIF_LIBS = @EXIF_LIBS@
 FAAC_LIBS = @FAAC_LIBS@
-FAAD_IS_NEAAC = @FAAD_IS_NEAAC@
 FAAD_LIBS = @FAAD_LIBS@
 FFLAGS = @FFLAGS@
 FGREP = @FGREP@
@@ -339,8 +341,9 @@
 GIO_LIBS = @GIO_LIBS@
 GIO_UNIX_CFLAGS = @GIO_UNIX_CFLAGS@
 GIO_UNIX_LIBS = @GIO_UNIX_LIBS@
+GLES2_CFLAGS = @GLES2_CFLAGS@
+GLES2_LIBS = @GLES2_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
-GLIB_COMPILE_SCHEMAS = @GLIB_COMPILE_SCHEMAS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
@@ -357,16 +360,17 @@
 GMODULE_NO_EXPORT_LIBS = @GMODULE_NO_EXPORT_LIBS@
 GMSGFMT = @GMSGFMT@
 GMSGFMT_015 = @GMSGFMT_015@
+GNUSTL_CFLAGS = @GNUSTL_CFLAGS@
+GNUSTL_LIBS = @GNUSTL_LIBS@
 GRAPHENE_CFLAGS = @GRAPHENE_CFLAGS@
 GRAPHENE_LIBS = @GRAPHENE_LIBS@
 GREP = @GREP@
-GSETTINGS_CFLAGS = @GSETTINGS_CFLAGS@
-GSETTINGS_DISABLE_SCHEMAS_COMPILE = @GSETTINGS_DISABLE_SCHEMAS_COMPILE@
-GSETTINGS_LIBS = @GSETTINGS_LIBS@
 GSM_LIBS = @GSM_LIBS@
 GSTPB_PLUGINS_DIR = @GSTPB_PLUGINS_DIR@
 GSTPB_PREFIX = @GSTPB_PREFIX@
 GST_AGE = @GST_AGE@
+GST_ALLOCATORS_CFLAGS = @GST_ALLOCATORS_CFLAGS@
+GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
 GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
 GST_API_VERSION = @GST_API_VERSION@
 GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
@@ -392,6 +396,8 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PBUTILS_CFLAGS = @GST_PBUTILS_CFLAGS@
+GST_PBUTILS_LIBS = @GST_PBUTILS_LIBS@
 GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BAD_CFLAGS = @GST_PLUGINS_BAD_CFLAGS@
@@ -417,6 +423,8 @@
 GST_PREFIX = @GST_PREFIX@
 GST_REVISION = @GST_REVISION@
 GST_TOOLS_DIR = @GST_TOOLS_DIR@
+GST_VIDEO_CFLAGS = @GST_VIDEO_CFLAGS@
+GST_VIDEO_LIBS = @GST_VIDEO_LIBS@
 GTK3_CFLAGS = @GTK3_CFLAGS@
 GTK3_GL_CFLAGS = @GTK3_GL_CFLAGS@
 GTK3_GL_LIBS = @GTK3_GL_LIBS@
@@ -518,6 +526,7 @@
 LTLIBICONV = @LTLIBICONV@
 LTLIBINTL = @LTLIBINTL@
 LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
 MANIFEST_TOOL = @MANIFEST_TOOL@
@@ -531,8 +540,6 @@
 MODPLUG_LIBS = @MODPLUG_LIBS@
 MPEG2ENC_CFLAGS = @MPEG2ENC_CFLAGS@
 MPEG2ENC_LIBS = @MPEG2ENC_LIBS@
-MPG123_CFLAGS = @MPG123_CFLAGS@
-MPG123_LIBS = @MPG123_LIBS@
 MPLEX_CFLAGS = @MPLEX_CFLAGS@
 MPLEX_LDFLAGS = @MPLEX_LDFLAGS@
 MPLEX_LIBS = @MPLEX_LIBS@
@@ -548,6 +555,8 @@
 NETTLE_LIBS = @NETTLE_LIBS@
 NM = @NM@
 NMEDIT = @NMEDIT@
+NVENCODE_CFLAGS = @NVENCODE_CFLAGS@
+NVENCODE_LIBS = @NVENCODE_LIBS@
 OBJC = @OBJC@
 OBJCDEPMODE = @OBJCDEPMODE@
 OBJCFLAGS = @OBJCFLAGS@
@@ -605,16 +614,18 @@
 PYTHON_PLATFORM = @PYTHON_PLATFORM@
 PYTHON_PREFIX = @PYTHON_PREFIX@
 PYTHON_VERSION = @PYTHON_VERSION@
+QT_ANDROID_CFLAGS = @QT_ANDROID_CFLAGS@
+QT_ANDROID_LIBS = @QT_ANDROID_LIBS@
 QT_CFLAGS = @QT_CFLAGS@
 QT_LIBS = @QT_LIBS@
+QT_MAC_CFLAGS = @QT_MAC_CFLAGS@
+QT_MAC_LIBS = @QT_MAC_LIBS@
 QT_WAYLAND_CFLAGS = @QT_WAYLAND_CFLAGS@
 QT_WAYLAND_LIBS = @QT_WAYLAND_LIBS@
 QT_X11_CFLAGS = @QT_X11_CFLAGS@
 QT_X11_LIBS = @QT_X11_LIBS@
 RANLIB = @RANLIB@
 RCC = @RCC@
-RSVG_2_36_2_CFLAGS = @RSVG_2_36_2_CFLAGS@
-RSVG_2_36_2_LIBS = @RSVG_2_36_2_LIBS@
 RSVG_CFLAGS = @RSVG_CFLAGS@
 RSVG_LIBS = @RSVG_LIBS@
 RTMP_CFLAGS = @RTMP_CFLAGS@
@@ -666,6 +677,7 @@
 VOAACENC_LIBS = @VOAACENC_LIBS@
 VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
 VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VULKAN_LIBS = @VULKAN_LIBS@
 WARNING_CFLAGS = @WARNING_CFLAGS@
 WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
 WARNING_OBJCFLAGS = @WARNING_OBJCFLAGS@
@@ -676,6 +688,7 @@
 WAYLAND_LIBS = @WAYLAND_LIBS@
 WEBP_CFLAGS = @WEBP_CFLAGS@
 WEBP_LIBS = @WEBP_LIBS@
+WGET = @WGET@
 WILDMIDI_CFLAGS = @WILDMIDI_CFLAGS@
 WILDMIDI_LIBS = @WILDMIDI_LIBS@
 WINKS_LIBS = @WINKS_LIBS@
@@ -685,6 +698,8 @@
 X11_LIBS = @X11_LIBS@
 X265_CFLAGS = @X265_CFLAGS@
 X265_LIBS = @X265_LIBS@
+XCB_CFLAGS = @XCB_CFLAGS@
+XCB_LIBS = @XCB_LIBS@
 XCOMPOSITE_CFLAGS = @XCOMPOSITE_CFLAGS@
 XCOMPOSITE_LIBS = @XCOMPOSITE_LIBS@
 XGETTEXT = @XGETTEXT@
@@ -722,7 +737,6 @@
 docdir = @docdir@
 dvidir = @dvidir@
 exec_prefix = @exec_prefix@
-gsettingsschemadir = @gsettingsschemadir@
 host = @host@
 host_alias = @host_alias@
 host_cpu = @host_cpu@
diff --git a/ext/libmms/gstmms.c b/ext/libmms/gstmms.c
index 25938c8..5e3ff38 100644
--- a/ext/libmms/gstmms.c
+++ b/ext/libmms/gstmms.c
@@ -609,8 +609,7 @@
   }
 
   GST_OBJECT_LOCK (src);
-  if (src->uri_name)
-    g_free (src->uri_name);
+  g_free (src->uri_name);
   src->uri_name = fixed_uri;
   GST_OBJECT_UNLOCK (src);
 
diff --git a/ext/libvisual/Makefile.in b/ext/libvisual/Makefile.in
index 9e59264..c86f3a4 100644
--- a/ext/libvisual/Makefile.in
+++ b/ext/libvisual/Makefile.in
@@ -115,16 +115,15 @@
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
 	$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
-	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gsettings.m4 \
-	$(top_srcdir)/m4/gst-fionread.m4 $(top_srcdir)/m4/gst-sdl.m4 \
-	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
-	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
-	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libgcrypt.m4 \
-	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
-	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
-	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
-	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
-	$(top_srcdir)/configure.ac
+	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gst-fionread.m4 \
+	$(top_srcdir)/m4/gst-sdl.m4 $(top_srcdir)/m4/iconv.m4 \
+	$(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \
+	$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
+	$(top_srcdir)/m4/libgcrypt.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
+	$(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
@@ -272,6 +271,8 @@
 CLUTTER_X11_LIBS = @CLUTTER_X11_LIBS@
 CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
+CUDA_CFLAGS = @CUDA_CFLAGS@
+CUDA_LIBS = @CUDA_LIBS@
 CURL_CFLAGS = @CURL_CFLAGS@
 CURL_LIBS = @CURL_LIBS@
 CXX = @CXX@
@@ -309,6 +310,8 @@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
+EGL_CFLAGS = @EGL_CFLAGS@
+EGL_LIBS = @EGL_LIBS@
 EGREP = @EGREP@
 ERROR_CFLAGS = @ERROR_CFLAGS@
 ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
@@ -317,7 +320,6 @@
 EXIF_CFLAGS = @EXIF_CFLAGS@
 EXIF_LIBS = @EXIF_LIBS@
 FAAC_LIBS = @FAAC_LIBS@
-FAAD_IS_NEAAC = @FAAD_IS_NEAAC@
 FAAD_LIBS = @FAAD_LIBS@
 FFLAGS = @FFLAGS@
 FGREP = @FGREP@
@@ -336,8 +338,9 @@
 GIO_LIBS = @GIO_LIBS@
 GIO_UNIX_CFLAGS = @GIO_UNIX_CFLAGS@
 GIO_UNIX_LIBS = @GIO_UNIX_LIBS@
+GLES2_CFLAGS = @GLES2_CFLAGS@
+GLES2_LIBS = @GLES2_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
-GLIB_COMPILE_SCHEMAS = @GLIB_COMPILE_SCHEMAS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
@@ -354,16 +357,17 @@
 GMODULE_NO_EXPORT_LIBS = @GMODULE_NO_EXPORT_LIBS@
 GMSGFMT = @GMSGFMT@
 GMSGFMT_015 = @GMSGFMT_015@
+GNUSTL_CFLAGS = @GNUSTL_CFLAGS@
+GNUSTL_LIBS = @GNUSTL_LIBS@
 GRAPHENE_CFLAGS = @GRAPHENE_CFLAGS@
 GRAPHENE_LIBS = @GRAPHENE_LIBS@
 GREP = @GREP@
-GSETTINGS_CFLAGS = @GSETTINGS_CFLAGS@
-GSETTINGS_DISABLE_SCHEMAS_COMPILE = @GSETTINGS_DISABLE_SCHEMAS_COMPILE@
-GSETTINGS_LIBS = @GSETTINGS_LIBS@
 GSM_LIBS = @GSM_LIBS@
 GSTPB_PLUGINS_DIR = @GSTPB_PLUGINS_DIR@
 GSTPB_PREFIX = @GSTPB_PREFIX@
 GST_AGE = @GST_AGE@
+GST_ALLOCATORS_CFLAGS = @GST_ALLOCATORS_CFLAGS@
+GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
 GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
 GST_API_VERSION = @GST_API_VERSION@
 GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
@@ -389,6 +393,8 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PBUTILS_CFLAGS = @GST_PBUTILS_CFLAGS@
+GST_PBUTILS_LIBS = @GST_PBUTILS_LIBS@
 GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BAD_CFLAGS = @GST_PLUGINS_BAD_CFLAGS@
@@ -414,6 +420,8 @@
 GST_PREFIX = @GST_PREFIX@
 GST_REVISION = @GST_REVISION@
 GST_TOOLS_DIR = @GST_TOOLS_DIR@
+GST_VIDEO_CFLAGS = @GST_VIDEO_CFLAGS@
+GST_VIDEO_LIBS = @GST_VIDEO_LIBS@
 GTK3_CFLAGS = @GTK3_CFLAGS@
 GTK3_GL_CFLAGS = @GTK3_GL_CFLAGS@
 GTK3_GL_LIBS = @GTK3_GL_LIBS@
@@ -515,6 +523,7 @@
 LTLIBICONV = @LTLIBICONV@
 LTLIBINTL = @LTLIBINTL@
 LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
 MANIFEST_TOOL = @MANIFEST_TOOL@
@@ -528,8 +537,6 @@
 MODPLUG_LIBS = @MODPLUG_LIBS@
 MPEG2ENC_CFLAGS = @MPEG2ENC_CFLAGS@
 MPEG2ENC_LIBS = @MPEG2ENC_LIBS@
-MPG123_CFLAGS = @MPG123_CFLAGS@
-MPG123_LIBS = @MPG123_LIBS@
 MPLEX_CFLAGS = @MPLEX_CFLAGS@
 MPLEX_LDFLAGS = @MPLEX_LDFLAGS@
 MPLEX_LIBS = @MPLEX_LIBS@
@@ -545,6 +552,8 @@
 NETTLE_LIBS = @NETTLE_LIBS@
 NM = @NM@
 NMEDIT = @NMEDIT@
+NVENCODE_CFLAGS = @NVENCODE_CFLAGS@
+NVENCODE_LIBS = @NVENCODE_LIBS@
 OBJC = @OBJC@
 OBJCDEPMODE = @OBJCDEPMODE@
 OBJCFLAGS = @OBJCFLAGS@
@@ -602,16 +611,18 @@
 PYTHON_PLATFORM = @PYTHON_PLATFORM@
 PYTHON_PREFIX = @PYTHON_PREFIX@
 PYTHON_VERSION = @PYTHON_VERSION@
+QT_ANDROID_CFLAGS = @QT_ANDROID_CFLAGS@
+QT_ANDROID_LIBS = @QT_ANDROID_LIBS@
 QT_CFLAGS = @QT_CFLAGS@
 QT_LIBS = @QT_LIBS@
+QT_MAC_CFLAGS = @QT_MAC_CFLAGS@
+QT_MAC_LIBS = @QT_MAC_LIBS@
 QT_WAYLAND_CFLAGS = @QT_WAYLAND_CFLAGS@
 QT_WAYLAND_LIBS = @QT_WAYLAND_LIBS@
 QT_X11_CFLAGS = @QT_X11_CFLAGS@
 QT_X11_LIBS = @QT_X11_LIBS@
 RANLIB = @RANLIB@
 RCC = @RCC@
-RSVG_2_36_2_CFLAGS = @RSVG_2_36_2_CFLAGS@
-RSVG_2_36_2_LIBS = @RSVG_2_36_2_LIBS@
 RSVG_CFLAGS = @RSVG_CFLAGS@
 RSVG_LIBS = @RSVG_LIBS@
 RTMP_CFLAGS = @RTMP_CFLAGS@
@@ -663,6 +674,7 @@
 VOAACENC_LIBS = @VOAACENC_LIBS@
 VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
 VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VULKAN_LIBS = @VULKAN_LIBS@
 WARNING_CFLAGS = @WARNING_CFLAGS@
 WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
 WARNING_OBJCFLAGS = @WARNING_OBJCFLAGS@
@@ -673,6 +685,7 @@
 WAYLAND_LIBS = @WAYLAND_LIBS@
 WEBP_CFLAGS = @WEBP_CFLAGS@
 WEBP_LIBS = @WEBP_LIBS@
+WGET = @WGET@
 WILDMIDI_CFLAGS = @WILDMIDI_CFLAGS@
 WILDMIDI_LIBS = @WILDMIDI_LIBS@
 WINKS_LIBS = @WINKS_LIBS@
@@ -682,6 +695,8 @@
 X11_LIBS = @X11_LIBS@
 X265_CFLAGS = @X265_CFLAGS@
 X265_LIBS = @X265_LIBS@
+XCB_CFLAGS = @XCB_CFLAGS@
+XCB_LIBS = @XCB_LIBS@
 XCOMPOSITE_CFLAGS = @XCOMPOSITE_CFLAGS@
 XCOMPOSITE_LIBS = @XCOMPOSITE_LIBS@
 XGETTEXT = @XGETTEXT@
@@ -719,7 +734,6 @@
 docdir = @docdir@
 dvidir = @dvidir@
 exec_prefix = @exec_prefix@
-gsettingsschemadir = @gsettingsschemadir@
 host = @host@
 host_alias = @host_alias@
 host_cpu = @host_cpu@
diff --git a/ext/libvisual/visual-gl.c b/ext/libvisual/visual-gl.c
index 88b4419..85c91e0 100644
--- a/ext/libvisual/visual-gl.c
+++ b/ext/libvisual/visual-gl.c
@@ -27,7 +27,7 @@
  * <refsect2>
  * <title>Examples</title>
  * |[
- * gst-launch -v audiotestsrc ! libvisual_gl_lv_flower ! glimagesink
+ * gst-launch-1.0 -v audiotestsrc ! libvisual_gl_lv_flower ! glimagesink
  * ]|
  * </refsect2>
  */
diff --git a/ext/lv2/Makefile.in b/ext/lv2/Makefile.in
index 42eae42..2004e5b 100644
--- a/ext/lv2/Makefile.in
+++ b/ext/lv2/Makefile.in
@@ -116,16 +116,15 @@
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
 	$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
-	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gsettings.m4 \
-	$(top_srcdir)/m4/gst-fionread.m4 $(top_srcdir)/m4/gst-sdl.m4 \
-	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
-	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
-	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libgcrypt.m4 \
-	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
-	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
-	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
-	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
-	$(top_srcdir)/configure.ac
+	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gst-fionread.m4 \
+	$(top_srcdir)/m4/gst-sdl.m4 $(top_srcdir)/m4/iconv.m4 \
+	$(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \
+	$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
+	$(top_srcdir)/m4/libgcrypt.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
+	$(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \
@@ -275,6 +274,8 @@
 CLUTTER_X11_LIBS = @CLUTTER_X11_LIBS@
 CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
+CUDA_CFLAGS = @CUDA_CFLAGS@
+CUDA_LIBS = @CUDA_LIBS@
 CURL_CFLAGS = @CURL_CFLAGS@
 CURL_LIBS = @CURL_LIBS@
 CXX = @CXX@
@@ -312,6 +313,8 @@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
+EGL_CFLAGS = @EGL_CFLAGS@
+EGL_LIBS = @EGL_LIBS@
 EGREP = @EGREP@
 ERROR_CFLAGS = @ERROR_CFLAGS@
 ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
@@ -320,7 +323,6 @@
 EXIF_CFLAGS = @EXIF_CFLAGS@
 EXIF_LIBS = @EXIF_LIBS@
 FAAC_LIBS = @FAAC_LIBS@
-FAAD_IS_NEAAC = @FAAD_IS_NEAAC@
 FAAD_LIBS = @FAAD_LIBS@
 FFLAGS = @FFLAGS@
 FGREP = @FGREP@
@@ -339,8 +341,9 @@
 GIO_LIBS = @GIO_LIBS@
 GIO_UNIX_CFLAGS = @GIO_UNIX_CFLAGS@
 GIO_UNIX_LIBS = @GIO_UNIX_LIBS@
+GLES2_CFLAGS = @GLES2_CFLAGS@
+GLES2_LIBS = @GLES2_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
-GLIB_COMPILE_SCHEMAS = @GLIB_COMPILE_SCHEMAS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
@@ -357,16 +360,17 @@
 GMODULE_NO_EXPORT_LIBS = @GMODULE_NO_EXPORT_LIBS@
 GMSGFMT = @GMSGFMT@
 GMSGFMT_015 = @GMSGFMT_015@
+GNUSTL_CFLAGS = @GNUSTL_CFLAGS@
+GNUSTL_LIBS = @GNUSTL_LIBS@
 GRAPHENE_CFLAGS = @GRAPHENE_CFLAGS@
 GRAPHENE_LIBS = @GRAPHENE_LIBS@
 GREP = @GREP@
-GSETTINGS_CFLAGS = @GSETTINGS_CFLAGS@
-GSETTINGS_DISABLE_SCHEMAS_COMPILE = @GSETTINGS_DISABLE_SCHEMAS_COMPILE@
-GSETTINGS_LIBS = @GSETTINGS_LIBS@
 GSM_LIBS = @GSM_LIBS@
 GSTPB_PLUGINS_DIR = @GSTPB_PLUGINS_DIR@
 GSTPB_PREFIX = @GSTPB_PREFIX@
 GST_AGE = @GST_AGE@
+GST_ALLOCATORS_CFLAGS = @GST_ALLOCATORS_CFLAGS@
+GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
 GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
 GST_API_VERSION = @GST_API_VERSION@
 GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
@@ -392,6 +396,8 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PBUTILS_CFLAGS = @GST_PBUTILS_CFLAGS@
+GST_PBUTILS_LIBS = @GST_PBUTILS_LIBS@
 GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BAD_CFLAGS = @GST_PLUGINS_BAD_CFLAGS@
@@ -417,6 +423,8 @@
 GST_PREFIX = @GST_PREFIX@
 GST_REVISION = @GST_REVISION@
 GST_TOOLS_DIR = @GST_TOOLS_DIR@
+GST_VIDEO_CFLAGS = @GST_VIDEO_CFLAGS@
+GST_VIDEO_LIBS = @GST_VIDEO_LIBS@
 GTK3_CFLAGS = @GTK3_CFLAGS@
 GTK3_GL_CFLAGS = @GTK3_GL_CFLAGS@
 GTK3_GL_LIBS = @GTK3_GL_LIBS@
@@ -518,6 +526,7 @@
 LTLIBICONV = @LTLIBICONV@
 LTLIBINTL = @LTLIBINTL@
 LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
 MANIFEST_TOOL = @MANIFEST_TOOL@
@@ -531,8 +540,6 @@
 MODPLUG_LIBS = @MODPLUG_LIBS@
 MPEG2ENC_CFLAGS = @MPEG2ENC_CFLAGS@
 MPEG2ENC_LIBS = @MPEG2ENC_LIBS@
-MPG123_CFLAGS = @MPG123_CFLAGS@
-MPG123_LIBS = @MPG123_LIBS@
 MPLEX_CFLAGS = @MPLEX_CFLAGS@
 MPLEX_LDFLAGS = @MPLEX_LDFLAGS@
 MPLEX_LIBS = @MPLEX_LIBS@
@@ -548,6 +555,8 @@
 NETTLE_LIBS = @NETTLE_LIBS@
 NM = @NM@
 NMEDIT = @NMEDIT@
+NVENCODE_CFLAGS = @NVENCODE_CFLAGS@
+NVENCODE_LIBS = @NVENCODE_LIBS@
 OBJC = @OBJC@
 OBJCDEPMODE = @OBJCDEPMODE@
 OBJCFLAGS = @OBJCFLAGS@
@@ -605,16 +614,18 @@
 PYTHON_PLATFORM = @PYTHON_PLATFORM@
 PYTHON_PREFIX = @PYTHON_PREFIX@
 PYTHON_VERSION = @PYTHON_VERSION@
+QT_ANDROID_CFLAGS = @QT_ANDROID_CFLAGS@
+QT_ANDROID_LIBS = @QT_ANDROID_LIBS@
 QT_CFLAGS = @QT_CFLAGS@
 QT_LIBS = @QT_LIBS@
+QT_MAC_CFLAGS = @QT_MAC_CFLAGS@
+QT_MAC_LIBS = @QT_MAC_LIBS@
 QT_WAYLAND_CFLAGS = @QT_WAYLAND_CFLAGS@
 QT_WAYLAND_LIBS = @QT_WAYLAND_LIBS@
 QT_X11_CFLAGS = @QT_X11_CFLAGS@
 QT_X11_LIBS = @QT_X11_LIBS@
 RANLIB = @RANLIB@
 RCC = @RCC@
-RSVG_2_36_2_CFLAGS = @RSVG_2_36_2_CFLAGS@
-RSVG_2_36_2_LIBS = @RSVG_2_36_2_LIBS@
 RSVG_CFLAGS = @RSVG_CFLAGS@
 RSVG_LIBS = @RSVG_LIBS@
 RTMP_CFLAGS = @RTMP_CFLAGS@
@@ -666,6 +677,7 @@
 VOAACENC_LIBS = @VOAACENC_LIBS@
 VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
 VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VULKAN_LIBS = @VULKAN_LIBS@
 WARNING_CFLAGS = @WARNING_CFLAGS@
 WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
 WARNING_OBJCFLAGS = @WARNING_OBJCFLAGS@
@@ -676,6 +688,7 @@
 WAYLAND_LIBS = @WAYLAND_LIBS@
 WEBP_CFLAGS = @WEBP_CFLAGS@
 WEBP_LIBS = @WEBP_LIBS@
+WGET = @WGET@
 WILDMIDI_CFLAGS = @WILDMIDI_CFLAGS@
 WILDMIDI_LIBS = @WILDMIDI_LIBS@
 WINKS_LIBS = @WINKS_LIBS@
@@ -685,6 +698,8 @@
 X11_LIBS = @X11_LIBS@
 X265_CFLAGS = @X265_CFLAGS@
 X265_LIBS = @X265_LIBS@
+XCB_CFLAGS = @XCB_CFLAGS@
+XCB_LIBS = @XCB_LIBS@
 XCOMPOSITE_CFLAGS = @XCOMPOSITE_CFLAGS@
 XCOMPOSITE_LIBS = @XCOMPOSITE_LIBS@
 XGETTEXT = @XGETTEXT@
@@ -722,7 +737,6 @@
 docdir = @docdir@
 dvidir = @dvidir@
 exec_prefix = @exec_prefix@
-gsettingsschemadir = @gsettingsschemadir@
 host = @host@
 host_alias = @host_alias@
 host_cpu = @host_cpu@
diff --git a/ext/mimic/Makefile.in b/ext/mimic/Makefile.in
index 72b3479..1454831 100644
--- a/ext/mimic/Makefile.in
+++ b/ext/mimic/Makefile.in
@@ -116,16 +116,15 @@
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
 	$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
-	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gsettings.m4 \
-	$(top_srcdir)/m4/gst-fionread.m4 $(top_srcdir)/m4/gst-sdl.m4 \
-	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
-	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
-	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libgcrypt.m4 \
-	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
-	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
-	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
-	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
-	$(top_srcdir)/configure.ac
+	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gst-fionread.m4 \
+	$(top_srcdir)/m4/gst-sdl.m4 $(top_srcdir)/m4/iconv.m4 \
+	$(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \
+	$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
+	$(top_srcdir)/m4/libgcrypt.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
+	$(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \
@@ -275,6 +274,8 @@
 CLUTTER_X11_LIBS = @CLUTTER_X11_LIBS@
 CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
+CUDA_CFLAGS = @CUDA_CFLAGS@
+CUDA_LIBS = @CUDA_LIBS@
 CURL_CFLAGS = @CURL_CFLAGS@
 CURL_LIBS = @CURL_LIBS@
 CXX = @CXX@
@@ -312,6 +313,8 @@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
+EGL_CFLAGS = @EGL_CFLAGS@
+EGL_LIBS = @EGL_LIBS@
 EGREP = @EGREP@
 ERROR_CFLAGS = @ERROR_CFLAGS@
 ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
@@ -320,7 +323,6 @@
 EXIF_CFLAGS = @EXIF_CFLAGS@
 EXIF_LIBS = @EXIF_LIBS@
 FAAC_LIBS = @FAAC_LIBS@
-FAAD_IS_NEAAC = @FAAD_IS_NEAAC@
 FAAD_LIBS = @FAAD_LIBS@
 FFLAGS = @FFLAGS@
 FGREP = @FGREP@
@@ -339,8 +341,9 @@
 GIO_LIBS = @GIO_LIBS@
 GIO_UNIX_CFLAGS = @GIO_UNIX_CFLAGS@
 GIO_UNIX_LIBS = @GIO_UNIX_LIBS@
+GLES2_CFLAGS = @GLES2_CFLAGS@
+GLES2_LIBS = @GLES2_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
-GLIB_COMPILE_SCHEMAS = @GLIB_COMPILE_SCHEMAS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
@@ -357,16 +360,17 @@
 GMODULE_NO_EXPORT_LIBS = @GMODULE_NO_EXPORT_LIBS@
 GMSGFMT = @GMSGFMT@
 GMSGFMT_015 = @GMSGFMT_015@
+GNUSTL_CFLAGS = @GNUSTL_CFLAGS@
+GNUSTL_LIBS = @GNUSTL_LIBS@
 GRAPHENE_CFLAGS = @GRAPHENE_CFLAGS@
 GRAPHENE_LIBS = @GRAPHENE_LIBS@
 GREP = @GREP@
-GSETTINGS_CFLAGS = @GSETTINGS_CFLAGS@
-GSETTINGS_DISABLE_SCHEMAS_COMPILE = @GSETTINGS_DISABLE_SCHEMAS_COMPILE@
-GSETTINGS_LIBS = @GSETTINGS_LIBS@
 GSM_LIBS = @GSM_LIBS@
 GSTPB_PLUGINS_DIR = @GSTPB_PLUGINS_DIR@
 GSTPB_PREFIX = @GSTPB_PREFIX@
 GST_AGE = @GST_AGE@
+GST_ALLOCATORS_CFLAGS = @GST_ALLOCATORS_CFLAGS@
+GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
 GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
 GST_API_VERSION = @GST_API_VERSION@
 GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
@@ -392,6 +396,8 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PBUTILS_CFLAGS = @GST_PBUTILS_CFLAGS@
+GST_PBUTILS_LIBS = @GST_PBUTILS_LIBS@
 GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BAD_CFLAGS = @GST_PLUGINS_BAD_CFLAGS@
@@ -417,6 +423,8 @@
 GST_PREFIX = @GST_PREFIX@
 GST_REVISION = @GST_REVISION@
 GST_TOOLS_DIR = @GST_TOOLS_DIR@
+GST_VIDEO_CFLAGS = @GST_VIDEO_CFLAGS@
+GST_VIDEO_LIBS = @GST_VIDEO_LIBS@
 GTK3_CFLAGS = @GTK3_CFLAGS@
 GTK3_GL_CFLAGS = @GTK3_GL_CFLAGS@
 GTK3_GL_LIBS = @GTK3_GL_LIBS@
@@ -518,6 +526,7 @@
 LTLIBICONV = @LTLIBICONV@
 LTLIBINTL = @LTLIBINTL@
 LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
 MANIFEST_TOOL = @MANIFEST_TOOL@
@@ -531,8 +540,6 @@
 MODPLUG_LIBS = @MODPLUG_LIBS@
 MPEG2ENC_CFLAGS = @MPEG2ENC_CFLAGS@
 MPEG2ENC_LIBS = @MPEG2ENC_LIBS@
-MPG123_CFLAGS = @MPG123_CFLAGS@
-MPG123_LIBS = @MPG123_LIBS@
 MPLEX_CFLAGS = @MPLEX_CFLAGS@
 MPLEX_LDFLAGS = @MPLEX_LDFLAGS@
 MPLEX_LIBS = @MPLEX_LIBS@
@@ -548,6 +555,8 @@
 NETTLE_LIBS = @NETTLE_LIBS@
 NM = @NM@
 NMEDIT = @NMEDIT@
+NVENCODE_CFLAGS = @NVENCODE_CFLAGS@
+NVENCODE_LIBS = @NVENCODE_LIBS@
 OBJC = @OBJC@
 OBJCDEPMODE = @OBJCDEPMODE@
 OBJCFLAGS = @OBJCFLAGS@
@@ -605,16 +614,18 @@
 PYTHON_PLATFORM = @PYTHON_PLATFORM@
 PYTHON_PREFIX = @PYTHON_PREFIX@
 PYTHON_VERSION = @PYTHON_VERSION@
+QT_ANDROID_CFLAGS = @QT_ANDROID_CFLAGS@
+QT_ANDROID_LIBS = @QT_ANDROID_LIBS@
 QT_CFLAGS = @QT_CFLAGS@
 QT_LIBS = @QT_LIBS@
+QT_MAC_CFLAGS = @QT_MAC_CFLAGS@
+QT_MAC_LIBS = @QT_MAC_LIBS@
 QT_WAYLAND_CFLAGS = @QT_WAYLAND_CFLAGS@
 QT_WAYLAND_LIBS = @QT_WAYLAND_LIBS@
 QT_X11_CFLAGS = @QT_X11_CFLAGS@
 QT_X11_LIBS = @QT_X11_LIBS@
 RANLIB = @RANLIB@
 RCC = @RCC@
-RSVG_2_36_2_CFLAGS = @RSVG_2_36_2_CFLAGS@
-RSVG_2_36_2_LIBS = @RSVG_2_36_2_LIBS@
 RSVG_CFLAGS = @RSVG_CFLAGS@
 RSVG_LIBS = @RSVG_LIBS@
 RTMP_CFLAGS = @RTMP_CFLAGS@
@@ -666,6 +677,7 @@
 VOAACENC_LIBS = @VOAACENC_LIBS@
 VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
 VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VULKAN_LIBS = @VULKAN_LIBS@
 WARNING_CFLAGS = @WARNING_CFLAGS@
 WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
 WARNING_OBJCFLAGS = @WARNING_OBJCFLAGS@
@@ -676,6 +688,7 @@
 WAYLAND_LIBS = @WAYLAND_LIBS@
 WEBP_CFLAGS = @WEBP_CFLAGS@
 WEBP_LIBS = @WEBP_LIBS@
+WGET = @WGET@
 WILDMIDI_CFLAGS = @WILDMIDI_CFLAGS@
 WILDMIDI_LIBS = @WILDMIDI_LIBS@
 WINKS_LIBS = @WINKS_LIBS@
@@ -685,6 +698,8 @@
 X11_LIBS = @X11_LIBS@
 X265_CFLAGS = @X265_CFLAGS@
 X265_LIBS = @X265_LIBS@
+XCB_CFLAGS = @XCB_CFLAGS@
+XCB_LIBS = @XCB_LIBS@
 XCOMPOSITE_CFLAGS = @XCOMPOSITE_CFLAGS@
 XCOMPOSITE_LIBS = @XCOMPOSITE_LIBS@
 XGETTEXT = @XGETTEXT@
@@ -722,7 +737,6 @@
 docdir = @docdir@
 dvidir = @dvidir@
 exec_prefix = @exec_prefix@
-gsettingsschemadir = @gsettingsschemadir@
 host = @host@
 host_alias = @host_alias@
 host_cpu = @host_cpu@
diff --git a/ext/modplug/Makefile.in b/ext/modplug/Makefile.in
index fc40634..7e2051a 100644
--- a/ext/modplug/Makefile.in
+++ b/ext/modplug/Makefile.in
@@ -116,16 +116,15 @@
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
 	$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
-	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gsettings.m4 \
-	$(top_srcdir)/m4/gst-fionread.m4 $(top_srcdir)/m4/gst-sdl.m4 \
-	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
-	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
-	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libgcrypt.m4 \
-	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
-	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
-	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
-	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
-	$(top_srcdir)/configure.ac
+	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gst-fionread.m4 \
+	$(top_srcdir)/m4/gst-sdl.m4 $(top_srcdir)/m4/iconv.m4 \
+	$(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \
+	$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
+	$(top_srcdir)/m4/libgcrypt.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
+	$(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \
@@ -274,6 +273,8 @@
 CLUTTER_X11_LIBS = @CLUTTER_X11_LIBS@
 CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
+CUDA_CFLAGS = @CUDA_CFLAGS@
+CUDA_LIBS = @CUDA_LIBS@
 CURL_CFLAGS = @CURL_CFLAGS@
 CURL_LIBS = @CURL_LIBS@
 CXX = @CXX@
@@ -311,6 +312,8 @@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
+EGL_CFLAGS = @EGL_CFLAGS@
+EGL_LIBS = @EGL_LIBS@
 EGREP = @EGREP@
 ERROR_CFLAGS = @ERROR_CFLAGS@
 ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
@@ -319,7 +322,6 @@
 EXIF_CFLAGS = @EXIF_CFLAGS@
 EXIF_LIBS = @EXIF_LIBS@
 FAAC_LIBS = @FAAC_LIBS@
-FAAD_IS_NEAAC = @FAAD_IS_NEAAC@
 FAAD_LIBS = @FAAD_LIBS@
 FFLAGS = @FFLAGS@
 FGREP = @FGREP@
@@ -338,8 +340,9 @@
 GIO_LIBS = @GIO_LIBS@
 GIO_UNIX_CFLAGS = @GIO_UNIX_CFLAGS@
 GIO_UNIX_LIBS = @GIO_UNIX_LIBS@
+GLES2_CFLAGS = @GLES2_CFLAGS@
+GLES2_LIBS = @GLES2_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
-GLIB_COMPILE_SCHEMAS = @GLIB_COMPILE_SCHEMAS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
@@ -356,16 +359,17 @@
 GMODULE_NO_EXPORT_LIBS = @GMODULE_NO_EXPORT_LIBS@
 GMSGFMT = @GMSGFMT@
 GMSGFMT_015 = @GMSGFMT_015@
+GNUSTL_CFLAGS = @GNUSTL_CFLAGS@
+GNUSTL_LIBS = @GNUSTL_LIBS@
 GRAPHENE_CFLAGS = @GRAPHENE_CFLAGS@
 GRAPHENE_LIBS = @GRAPHENE_LIBS@
 GREP = @GREP@
-GSETTINGS_CFLAGS = @GSETTINGS_CFLAGS@
-GSETTINGS_DISABLE_SCHEMAS_COMPILE = @GSETTINGS_DISABLE_SCHEMAS_COMPILE@
-GSETTINGS_LIBS = @GSETTINGS_LIBS@
 GSM_LIBS = @GSM_LIBS@
 GSTPB_PLUGINS_DIR = @GSTPB_PLUGINS_DIR@
 GSTPB_PREFIX = @GSTPB_PREFIX@
 GST_AGE = @GST_AGE@
+GST_ALLOCATORS_CFLAGS = @GST_ALLOCATORS_CFLAGS@
+GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
 GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
 GST_API_VERSION = @GST_API_VERSION@
 GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
@@ -391,6 +395,8 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PBUTILS_CFLAGS = @GST_PBUTILS_CFLAGS@
+GST_PBUTILS_LIBS = @GST_PBUTILS_LIBS@
 GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BAD_CFLAGS = @GST_PLUGINS_BAD_CFLAGS@
@@ -416,6 +422,8 @@
 GST_PREFIX = @GST_PREFIX@
 GST_REVISION = @GST_REVISION@
 GST_TOOLS_DIR = @GST_TOOLS_DIR@
+GST_VIDEO_CFLAGS = @GST_VIDEO_CFLAGS@
+GST_VIDEO_LIBS = @GST_VIDEO_LIBS@
 GTK3_CFLAGS = @GTK3_CFLAGS@
 GTK3_GL_CFLAGS = @GTK3_GL_CFLAGS@
 GTK3_GL_LIBS = @GTK3_GL_LIBS@
@@ -517,6 +525,7 @@
 LTLIBICONV = @LTLIBICONV@
 LTLIBINTL = @LTLIBINTL@
 LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
 MANIFEST_TOOL = @MANIFEST_TOOL@
@@ -530,8 +539,6 @@
 MODPLUG_LIBS = @MODPLUG_LIBS@
 MPEG2ENC_CFLAGS = @MPEG2ENC_CFLAGS@
 MPEG2ENC_LIBS = @MPEG2ENC_LIBS@
-MPG123_CFLAGS = @MPG123_CFLAGS@
-MPG123_LIBS = @MPG123_LIBS@
 MPLEX_CFLAGS = @MPLEX_CFLAGS@
 MPLEX_LDFLAGS = @MPLEX_LDFLAGS@
 MPLEX_LIBS = @MPLEX_LIBS@
@@ -547,6 +554,8 @@
 NETTLE_LIBS = @NETTLE_LIBS@
 NM = @NM@
 NMEDIT = @NMEDIT@
+NVENCODE_CFLAGS = @NVENCODE_CFLAGS@
+NVENCODE_LIBS = @NVENCODE_LIBS@
 OBJC = @OBJC@
 OBJCDEPMODE = @OBJCDEPMODE@
 OBJCFLAGS = @OBJCFLAGS@
@@ -604,16 +613,18 @@
 PYTHON_PLATFORM = @PYTHON_PLATFORM@
 PYTHON_PREFIX = @PYTHON_PREFIX@
 PYTHON_VERSION = @PYTHON_VERSION@
+QT_ANDROID_CFLAGS = @QT_ANDROID_CFLAGS@
+QT_ANDROID_LIBS = @QT_ANDROID_LIBS@
 QT_CFLAGS = @QT_CFLAGS@
 QT_LIBS = @QT_LIBS@
+QT_MAC_CFLAGS = @QT_MAC_CFLAGS@
+QT_MAC_LIBS = @QT_MAC_LIBS@
 QT_WAYLAND_CFLAGS = @QT_WAYLAND_CFLAGS@
 QT_WAYLAND_LIBS = @QT_WAYLAND_LIBS@
 QT_X11_CFLAGS = @QT_X11_CFLAGS@
 QT_X11_LIBS = @QT_X11_LIBS@
 RANLIB = @RANLIB@
 RCC = @RCC@
-RSVG_2_36_2_CFLAGS = @RSVG_2_36_2_CFLAGS@
-RSVG_2_36_2_LIBS = @RSVG_2_36_2_LIBS@
 RSVG_CFLAGS = @RSVG_CFLAGS@
 RSVG_LIBS = @RSVG_LIBS@
 RTMP_CFLAGS = @RTMP_CFLAGS@
@@ -665,6 +676,7 @@
 VOAACENC_LIBS = @VOAACENC_LIBS@
 VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
 VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VULKAN_LIBS = @VULKAN_LIBS@
 WARNING_CFLAGS = @WARNING_CFLAGS@
 WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
 WARNING_OBJCFLAGS = @WARNING_OBJCFLAGS@
@@ -675,6 +687,7 @@
 WAYLAND_LIBS = @WAYLAND_LIBS@
 WEBP_CFLAGS = @WEBP_CFLAGS@
 WEBP_LIBS = @WEBP_LIBS@
+WGET = @WGET@
 WILDMIDI_CFLAGS = @WILDMIDI_CFLAGS@
 WILDMIDI_LIBS = @WILDMIDI_LIBS@
 WINKS_LIBS = @WINKS_LIBS@
@@ -684,6 +697,8 @@
 X11_LIBS = @X11_LIBS@
 X265_CFLAGS = @X265_CFLAGS@
 X265_LIBS = @X265_LIBS@
+XCB_CFLAGS = @XCB_CFLAGS@
+XCB_LIBS = @XCB_LIBS@
 XCOMPOSITE_CFLAGS = @XCOMPOSITE_CFLAGS@
 XCOMPOSITE_LIBS = @XCOMPOSITE_LIBS@
 XGETTEXT = @XGETTEXT@
@@ -721,7 +736,6 @@
 docdir = @docdir@
 dvidir = @dvidir@
 exec_prefix = @exec_prefix@
-gsettingsschemadir = @gsettingsschemadir@
 host = @host@
 host_alias = @host_alias@
 host_cpu = @host_cpu@
diff --git a/ext/modplug/gstmodplug.cc b/ext/modplug/gstmodplug.cc
index 683fbaa..ff3641d 100644
--- a/ext/modplug/gstmodplug.cc
+++ b/ext/modplug/gstmodplug.cc
@@ -91,7 +91,7 @@
 #define DEFAULT_OVERSAMP         TRUE
 #define DEFAULT_NOISE_REDUCTION  TRUE
 
-#define FORMATS "{ "GST_AUDIO_NE (S32)", "GST_AUDIO_NE (S16)", U8 }"
+#define FORMATS "{ " GST_AUDIO_NE (S32) ", " GST_AUDIO_NE (S16) ", U8 }"
 
 static GstStaticPadTemplate modplug_src_template_factory =
 GST_STATIC_PAD_TEMPLATE ("src",
diff --git a/ext/mpeg2enc/Makefile.in b/ext/mpeg2enc/Makefile.in
index f304776..fdf5aa2 100644
--- a/ext/mpeg2enc/Makefile.in
+++ b/ext/mpeg2enc/Makefile.in
@@ -116,16 +116,15 @@
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
 	$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
-	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gsettings.m4 \
-	$(top_srcdir)/m4/gst-fionread.m4 $(top_srcdir)/m4/gst-sdl.m4 \
-	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
-	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
-	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libgcrypt.m4 \
-	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
-	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
-	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
-	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
-	$(top_srcdir)/configure.ac
+	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gst-fionread.m4 \
+	$(top_srcdir)/m4/gst-sdl.m4 $(top_srcdir)/m4/iconv.m4 \
+	$(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \
+	$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
+	$(top_srcdir)/m4/libgcrypt.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
+	$(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \
@@ -278,6 +277,8 @@
 CLUTTER_X11_LIBS = @CLUTTER_X11_LIBS@
 CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
+CUDA_CFLAGS = @CUDA_CFLAGS@
+CUDA_LIBS = @CUDA_LIBS@
 CURL_CFLAGS = @CURL_CFLAGS@
 CURL_LIBS = @CURL_LIBS@
 CXX = @CXX@
@@ -315,6 +316,8 @@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
+EGL_CFLAGS = @EGL_CFLAGS@
+EGL_LIBS = @EGL_LIBS@
 EGREP = @EGREP@
 ERROR_CFLAGS = @ERROR_CFLAGS@
 ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
@@ -323,7 +326,6 @@
 EXIF_CFLAGS = @EXIF_CFLAGS@
 EXIF_LIBS = @EXIF_LIBS@
 FAAC_LIBS = @FAAC_LIBS@
-FAAD_IS_NEAAC = @FAAD_IS_NEAAC@
 FAAD_LIBS = @FAAD_LIBS@
 FFLAGS = @FFLAGS@
 FGREP = @FGREP@
@@ -342,8 +344,9 @@
 GIO_LIBS = @GIO_LIBS@
 GIO_UNIX_CFLAGS = @GIO_UNIX_CFLAGS@
 GIO_UNIX_LIBS = @GIO_UNIX_LIBS@
+GLES2_CFLAGS = @GLES2_CFLAGS@
+GLES2_LIBS = @GLES2_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
-GLIB_COMPILE_SCHEMAS = @GLIB_COMPILE_SCHEMAS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
@@ -360,16 +363,17 @@
 GMODULE_NO_EXPORT_LIBS = @GMODULE_NO_EXPORT_LIBS@
 GMSGFMT = @GMSGFMT@
 GMSGFMT_015 = @GMSGFMT_015@
+GNUSTL_CFLAGS = @GNUSTL_CFLAGS@
+GNUSTL_LIBS = @GNUSTL_LIBS@
 GRAPHENE_CFLAGS = @GRAPHENE_CFLAGS@
 GRAPHENE_LIBS = @GRAPHENE_LIBS@
 GREP = @GREP@
-GSETTINGS_CFLAGS = @GSETTINGS_CFLAGS@
-GSETTINGS_DISABLE_SCHEMAS_COMPILE = @GSETTINGS_DISABLE_SCHEMAS_COMPILE@
-GSETTINGS_LIBS = @GSETTINGS_LIBS@
 GSM_LIBS = @GSM_LIBS@
 GSTPB_PLUGINS_DIR = @GSTPB_PLUGINS_DIR@
 GSTPB_PREFIX = @GSTPB_PREFIX@
 GST_AGE = @GST_AGE@
+GST_ALLOCATORS_CFLAGS = @GST_ALLOCATORS_CFLAGS@
+GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
 GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
 GST_API_VERSION = @GST_API_VERSION@
 GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
@@ -395,6 +399,8 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PBUTILS_CFLAGS = @GST_PBUTILS_CFLAGS@
+GST_PBUTILS_LIBS = @GST_PBUTILS_LIBS@
 GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BAD_CFLAGS = @GST_PLUGINS_BAD_CFLAGS@
@@ -420,6 +426,8 @@
 GST_PREFIX = @GST_PREFIX@
 GST_REVISION = @GST_REVISION@
 GST_TOOLS_DIR = @GST_TOOLS_DIR@
+GST_VIDEO_CFLAGS = @GST_VIDEO_CFLAGS@
+GST_VIDEO_LIBS = @GST_VIDEO_LIBS@
 GTK3_CFLAGS = @GTK3_CFLAGS@
 GTK3_GL_CFLAGS = @GTK3_GL_CFLAGS@
 GTK3_GL_LIBS = @GTK3_GL_LIBS@
@@ -521,6 +529,7 @@
 LTLIBICONV = @LTLIBICONV@
 LTLIBINTL = @LTLIBINTL@
 LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
 MANIFEST_TOOL = @MANIFEST_TOOL@
@@ -534,8 +543,6 @@
 MODPLUG_LIBS = @MODPLUG_LIBS@
 MPEG2ENC_CFLAGS = @MPEG2ENC_CFLAGS@
 MPEG2ENC_LIBS = @MPEG2ENC_LIBS@
-MPG123_CFLAGS = @MPG123_CFLAGS@
-MPG123_LIBS = @MPG123_LIBS@
 MPLEX_CFLAGS = @MPLEX_CFLAGS@
 MPLEX_LDFLAGS = @MPLEX_LDFLAGS@
 MPLEX_LIBS = @MPLEX_LIBS@
@@ -551,6 +558,8 @@
 NETTLE_LIBS = @NETTLE_LIBS@
 NM = @NM@
 NMEDIT = @NMEDIT@
+NVENCODE_CFLAGS = @NVENCODE_CFLAGS@
+NVENCODE_LIBS = @NVENCODE_LIBS@
 OBJC = @OBJC@
 OBJCDEPMODE = @OBJCDEPMODE@
 OBJCFLAGS = @OBJCFLAGS@
@@ -608,16 +617,18 @@
 PYTHON_PLATFORM = @PYTHON_PLATFORM@
 PYTHON_PREFIX = @PYTHON_PREFIX@
 PYTHON_VERSION = @PYTHON_VERSION@
+QT_ANDROID_CFLAGS = @QT_ANDROID_CFLAGS@
+QT_ANDROID_LIBS = @QT_ANDROID_LIBS@
 QT_CFLAGS = @QT_CFLAGS@
 QT_LIBS = @QT_LIBS@
+QT_MAC_CFLAGS = @QT_MAC_CFLAGS@
+QT_MAC_LIBS = @QT_MAC_LIBS@
 QT_WAYLAND_CFLAGS = @QT_WAYLAND_CFLAGS@
 QT_WAYLAND_LIBS = @QT_WAYLAND_LIBS@
 QT_X11_CFLAGS = @QT_X11_CFLAGS@
 QT_X11_LIBS = @QT_X11_LIBS@
 RANLIB = @RANLIB@
 RCC = @RCC@
-RSVG_2_36_2_CFLAGS = @RSVG_2_36_2_CFLAGS@
-RSVG_2_36_2_LIBS = @RSVG_2_36_2_LIBS@
 RSVG_CFLAGS = @RSVG_CFLAGS@
 RSVG_LIBS = @RSVG_LIBS@
 RTMP_CFLAGS = @RTMP_CFLAGS@
@@ -669,6 +680,7 @@
 VOAACENC_LIBS = @VOAACENC_LIBS@
 VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
 VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VULKAN_LIBS = @VULKAN_LIBS@
 WARNING_CFLAGS = @WARNING_CFLAGS@
 WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
 WARNING_OBJCFLAGS = @WARNING_OBJCFLAGS@
@@ -679,6 +691,7 @@
 WAYLAND_LIBS = @WAYLAND_LIBS@
 WEBP_CFLAGS = @WEBP_CFLAGS@
 WEBP_LIBS = @WEBP_LIBS@
+WGET = @WGET@
 WILDMIDI_CFLAGS = @WILDMIDI_CFLAGS@
 WILDMIDI_LIBS = @WILDMIDI_LIBS@
 WINKS_LIBS = @WINKS_LIBS@
@@ -688,6 +701,8 @@
 X11_LIBS = @X11_LIBS@
 X265_CFLAGS = @X265_CFLAGS@
 X265_LIBS = @X265_LIBS@
+XCB_CFLAGS = @XCB_CFLAGS@
+XCB_LIBS = @XCB_LIBS@
 XCOMPOSITE_CFLAGS = @XCOMPOSITE_CFLAGS@
 XCOMPOSITE_LIBS = @XCOMPOSITE_LIBS@
 XGETTEXT = @XGETTEXT@
@@ -725,7 +740,6 @@
 docdir = @docdir@
 dvidir = @dvidir@
 exec_prefix = @exec_prefix@
-gsettingsschemadir = @gsettingsschemadir@
 host = @host@
 host_alias = @host_alias@
 host_cpu = @host_cpu@
diff --git a/ext/mpeg2enc/gstmpeg2enc.cc b/ext/mpeg2enc/gstmpeg2enc.cc
index 9e631e3..5c686cc 100644
--- a/ext/mpeg2enc/gstmpeg2enc.cc
+++ b/ext/mpeg2enc/gstmpeg2enc.cc
@@ -34,7 +34,7 @@
  * <refsect2>
  * <title>Example pipeline</title>
  * |[
- * gst-launch-0.10 videotestsrc num-buffers=1000 ! mpeg2enc ! filesink location=videotestsrc.m1v
+ * gst-launch-1.0 videotestsrc num-buffers=1000 ! mpeg2enc ! filesink location=videotestsrc.m1v
  * ]| This example pipeline will encode a test video source to a an MPEG1
  * elementary stream (with Generic MPEG1 profile).
  * <para>
@@ -47,7 +47,7 @@
  * in the example above) allow most parameters to be adjusted.
  * </para>
  * |[
- * gst-launch-0.10 videotestsrc num-buffers=1000 ! videoscale ! mpeg2enc format=1 norm=p ! filesink location=videotestsrc.m1v
+ * gst-launch-1.0 videotestsrc num-buffers=1000 ! videoscale ! mpeg2enc format=1 norm=p ! filesink location=videotestsrc.m1v
  * ]| This will produce an MPEG1 profile stream according to VCD2.0 specifications
  * for PAL #GstMpeg2enc:norm (as the image height is dependent on video norm).
  * </refsect2>
@@ -255,7 +255,7 @@
   GstStructure *structure;
 
   structure = gst_structure_new ("video/x-raw",
-      "format", G_TYPE_STRING, 'I420', NULL);
+      "format", G_TYPE_STRING, "I420", NULL);
 
   switch (enc->options->norm) {
     case 0:
diff --git a/ext/mpg123/Makefile.am b/ext/mpg123/Makefile.am
deleted file mode 100644
index 6c96207..0000000
--- a/ext/mpg123/Makefile.am
+++ /dev/null
@@ -1,12 +0,0 @@
-plugin_LTLIBRARIES = libgstmpg123.la
-
-libgstmpg123_la_SOURCES = gstmpg123audiodec.c
-libgstmpg123_la_CFLAGS = -DGST_USE_UNSTABLE_API \
-	$(GST_PLUGINS_BASE_CFLAGS) \
-	$(GST_BASE_CFLAGS) $(GST_CFLAGS) $(MPG123_CFLAGS)
-libgstmpg123_la_LIBADD = $(GST_PLUGINS_BASE_LIBS) -lgstaudio-@GST_API_VERSION@ \
-	$(GST_BASE_LIBS) $(GST_LIBS) $(MPG123_LIBS)
-libgstmpg123_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS)
-libgstmpg123_la_LIBTOOLFLAGS = $(GST_PLUGIN_LIBTOOLFLAGS)
-
-noinst_HEADERS = gstmpg123audiodec.h
diff --git a/ext/mpg123/Makefile.in b/ext/mpg123/Makefile.in
deleted file mode 100644
index f3494d8..0000000
--- a/ext/mpg123/Makefile.in
+++ /dev/null
@@ -1,1106 +0,0 @@
-# Makefile.in generated by automake 1.15 from Makefile.am.
-# @configure_input@
-
-# Copyright (C) 1994-2014 Free Software Foundation, Inc.
-
-# This Makefile.in is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
-# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
-# PARTICULAR PURPOSE.
-
-@SET_MAKE@
-
-
-VPATH = @srcdir@
-am__is_gnu_make = { \
-  if test -z '$(MAKELEVEL)'; then \
-    false; \
-  elif test -n '$(MAKE_HOST)'; then \
-    true; \
-  elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
-    true; \
-  else \
-    false; \
-  fi; \
-}
-am__make_running_with_option = \
-  case $${target_option-} in \
-      ?) ;; \
-      *) echo "am__make_running_with_option: internal error: invalid" \
-              "target option '$${target_option-}' specified" >&2; \
-         exit 1;; \
-  esac; \
-  has_opt=no; \
-  sane_makeflags=$$MAKEFLAGS; \
-  if $(am__is_gnu_make); then \
-    sane_makeflags=$$MFLAGS; \
-  else \
-    case $$MAKEFLAGS in \
-      *\\[\ \	]*) \
-        bs=\\; \
-        sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
-          | sed "s/$$bs$$bs[$$bs $$bs	]*//g"`;; \
-    esac; \
-  fi; \
-  skip_next=no; \
-  strip_trailopt () \
-  { \
-    flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
-  }; \
-  for flg in $$sane_makeflags; do \
-    test $$skip_next = yes && { skip_next=no; continue; }; \
-    case $$flg in \
-      *=*|--*) continue;; \
-        -*I) strip_trailopt 'I'; skip_next=yes;; \
-      -*I?*) strip_trailopt 'I';; \
-        -*O) strip_trailopt 'O'; skip_next=yes;; \
-      -*O?*) strip_trailopt 'O';; \
-        -*l) strip_trailopt 'l'; skip_next=yes;; \
-      -*l?*) strip_trailopt 'l';; \
-      -[dEDm]) skip_next=yes;; \
-      -[JT]) skip_next=yes;; \
-    esac; \
-    case $$flg in \
-      *$$target_option*) has_opt=yes; break;; \
-    esac; \
-  done; \
-  test $$has_opt = yes
-am__make_dryrun = (target_option=n; $(am__make_running_with_option))
-am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
-pkgdatadir = $(datadir)/@PACKAGE@
-pkgincludedir = $(includedir)/@PACKAGE@
-pkglibdir = $(libdir)/@PACKAGE@
-pkglibexecdir = $(libexecdir)/@PACKAGE@
-am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
-install_sh_DATA = $(install_sh) -c -m 644
-install_sh_PROGRAM = $(install_sh) -c
-install_sh_SCRIPT = $(install_sh) -c
-INSTALL_HEADER = $(INSTALL_DATA)
-transform = $(program_transform_name)
-NORMAL_INSTALL = :
-PRE_INSTALL = :
-POST_INSTALL = :
-NORMAL_UNINSTALL = :
-PRE_UNINSTALL = :
-POST_UNINSTALL = :
-build_triplet = @build@
-host_triplet = @host@
-target_triplet = @target@
-subdir = ext/mpg123
-ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/common/m4/as-ac-expand.m4 \
-	$(top_srcdir)/common/m4/as-auto-alt.m4 \
-	$(top_srcdir)/common/m4/as-compiler-flag.m4 \
-	$(top_srcdir)/common/m4/as-libtool.m4 \
-	$(top_srcdir)/common/m4/as-version.m4 \
-	$(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
-	$(top_srcdir)/common/m4/ax_pthread.m4 \
-	$(top_srcdir)/common/m4/gst-arch.m4 \
-	$(top_srcdir)/common/m4/gst-args.m4 \
-	$(top_srcdir)/common/m4/gst-check.m4 \
-	$(top_srcdir)/common/m4/gst-default.m4 \
-	$(top_srcdir)/common/m4/gst-dowhile.m4 \
-	$(top_srcdir)/common/m4/gst-error.m4 \
-	$(top_srcdir)/common/m4/gst-feature.m4 \
-	$(top_srcdir)/common/m4/gst-gettext.m4 \
-	$(top_srcdir)/common/m4/gst-glib2.m4 \
-	$(top_srcdir)/common/m4/gst-package-release-datetime.m4 \
-	$(top_srcdir)/common/m4/gst-platform.m4 \
-	$(top_srcdir)/common/m4/gst-plugin-docs.m4 \
-	$(top_srcdir)/common/m4/gst-plugindir.m4 \
-	$(top_srcdir)/common/m4/gst.m4 \
-	$(top_srcdir)/common/m4/gtk-doc.m4 \
-	$(top_srcdir)/common/m4/introspection.m4 \
-	$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
-	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gsettings.m4 \
-	$(top_srcdir)/m4/gst-fionread.m4 $(top_srcdir)/m4/gst-sdl.m4 \
-	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
-	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
-	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libgcrypt.m4 \
-	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
-	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
-	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
-	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
-	$(top_srcdir)/configure.ac
-am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
-	$(ACLOCAL_M4)
-DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \
-	$(am__DIST_COMMON)
-mkinstalldirs = $(install_sh) -d
-CONFIG_HEADER = $(top_builddir)/config.h
-CONFIG_CLEAN_FILES =
-CONFIG_CLEAN_VPATH_FILES =
-am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
-am__vpath_adj = case $$p in \
-    $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
-    *) f=$$p;; \
-  esac;
-am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
-am__install_max = 40
-am__nobase_strip_setup = \
-  srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
-am__nobase_strip = \
-  for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
-am__nobase_list = $(am__nobase_strip_setup); \
-  for p in $$list; do echo "$$p $$p"; done | \
-  sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
-  $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
-    if (++n[$$2] == $(am__install_max)) \
-      { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
-    END { for (dir in files) print dir, files[dir] }'
-am__base_list = \
-  sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
-  sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
-am__uninstall_files_from_dir = { \
-  test -z "$$files" \
-    || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
-    || { echo " ( cd '$$dir' && rm -f" $$files ")"; \
-         $(am__cd) "$$dir" && rm -f $$files; }; \
-  }
-am__installdirs = "$(DESTDIR)$(plugindir)"
-LTLIBRARIES = $(plugin_LTLIBRARIES)
-am__DEPENDENCIES_1 =
-libgstmpg123_la_DEPENDENCIES = $(am__DEPENDENCIES_1) \
-	$(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
-	$(am__DEPENDENCIES_1)
-am_libgstmpg123_la_OBJECTS = libgstmpg123_la-gstmpg123audiodec.lo
-libgstmpg123_la_OBJECTS = $(am_libgstmpg123_la_OBJECTS)
-AM_V_lt = $(am__v_lt_@AM_V@)
-am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
-am__v_lt_0 = --silent
-am__v_lt_1 = 
-libgstmpg123_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
-	$(libgstmpg123_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link \
-	$(CCLD) $(libgstmpg123_la_CFLAGS) $(CFLAGS) \
-	$(libgstmpg123_la_LDFLAGS) $(LDFLAGS) -o $@
-AM_V_P = $(am__v_P_@AM_V@)
-am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
-am__v_P_0 = false
-am__v_P_1 = :
-AM_V_GEN = $(am__v_GEN_@AM_V@)
-am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
-am__v_GEN_0 = @echo "  GEN     " $@;
-am__v_GEN_1 = 
-AM_V_at = $(am__v_at_@AM_V@)
-am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
-am__v_at_0 = @
-am__v_at_1 = 
-DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
-depcomp = $(SHELL) $(top_srcdir)/depcomp
-am__depfiles_maybe = depfiles
-am__mv = mv -f
-COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
-	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
-LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
-	$(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
-	$(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
-	$(AM_CFLAGS) $(CFLAGS)
-AM_V_CC = $(am__v_CC_@AM_V@)
-am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@)
-am__v_CC_0 = @echo "  CC      " $@;
-am__v_CC_1 = 
-CCLD = $(CC)
-LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
-	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
-	$(AM_LDFLAGS) $(LDFLAGS) -o $@
-AM_V_CCLD = $(am__v_CCLD_@AM_V@)
-am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@)
-am__v_CCLD_0 = @echo "  CCLD    " $@;
-am__v_CCLD_1 = 
-SOURCES = $(libgstmpg123_la_SOURCES)
-DIST_SOURCES = $(libgstmpg123_la_SOURCES)
-am__can_run_installinfo = \
-  case $$AM_UPDATE_INFO_DIR in \
-    n|no|NO) false;; \
-    *) (install-info --version) >/dev/null 2>&1;; \
-  esac
-HEADERS = $(noinst_HEADERS)
-am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
-# Read a list of newline-separated strings from the standard input,
-# and print each of them once, without duplicates.  Input order is
-# *not* preserved.
-am__uniquify_input = $(AWK) '\
-  BEGIN { nonempty = 0; } \
-  { items[$$0] = 1; nonempty = 1; } \
-  END { if (nonempty) { for (i in items) print i; }; } \
-'
-# Make sure the list of sources is unique.  This is necessary because,
-# e.g., the same source file might be shared among _SOURCES variables
-# for different programs/libraries.
-am__define_uniq_tagged_files = \
-  list='$(am__tagged_files)'; \
-  unique=`for i in $$list; do \
-    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-  done | $(am__uniquify_input)`
-ETAGS = etags
-CTAGS = ctags
-am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp
-DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
-ACLOCAL = @ACLOCAL@
-ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@
-ACMENC_CFLAGS = @ACMENC_CFLAGS@
-ACMMP3DEC_CFLAGS = @ACMMP3DEC_CFLAGS@
-AMTAR = @AMTAR@
-AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
-APEXSINK_CFLAGS = @APEXSINK_CFLAGS@
-APEXSINK_LIBS = @APEXSINK_LIBS@
-AR = @AR@
-AS = @AS@
-ASSRENDER_CFLAGS = @ASSRENDER_CFLAGS@
-ASSRENDER_LIBS = @ASSRENDER_LIBS@
-AUTOCONF = @AUTOCONF@
-AUTOHEADER = @AUTOHEADER@
-AUTOMAKE = @AUTOMAKE@
-AWK = @AWK@
-BLUEZ5_CFLAGS = @BLUEZ5_CFLAGS@
-BLUEZ5_LIBS = @BLUEZ5_LIBS@
-BS2B_CFLAGS = @BS2B_CFLAGS@
-BS2B_LIBS = @BS2B_LIBS@
-BZ2_LIBS = @BZ2_LIBS@
-CC = @CC@
-CCASFLAGS = @CCASFLAGS@
-CCDEPMODE = @CCDEPMODE@
-CFLAGS = @CFLAGS@
-CHROMAPRINT_CFLAGS = @CHROMAPRINT_CFLAGS@
-CHROMAPRINT_LIBS = @CHROMAPRINT_LIBS@
-CLUTTER_CFLAGS = @CLUTTER_CFLAGS@
-CLUTTER_GLX_CFLAGS = @CLUTTER_GLX_CFLAGS@
-CLUTTER_GLX_LIBS = @CLUTTER_GLX_LIBS@
-CLUTTER_LIBS = @CLUTTER_LIBS@
-CLUTTER_X11_CFLAGS = @CLUTTER_X11_CFLAGS@
-CLUTTER_X11_LIBS = @CLUTTER_X11_LIBS@
-CPP = @CPP@
-CPPFLAGS = @CPPFLAGS@
-CURL_CFLAGS = @CURL_CFLAGS@
-CURL_LIBS = @CURL_LIBS@
-CXX = @CXX@
-CXXCPP = @CXXCPP@
-CXXDEPMODE = @CXXDEPMODE@
-CXXFLAGS = @CXXFLAGS@
-CYGPATH_W = @CYGPATH_W@
-DAALA_CFLAGS = @DAALA_CFLAGS@
-DAALA_LIBS = @DAALA_LIBS@
-DCCP_LIBS = @DCCP_LIBS@
-DECKLINK_CXXFLAGS = @DECKLINK_CXXFLAGS@
-DECKLINK_LIBS = @DECKLINK_LIBS@
-DEFAULT_AUDIOSINK = @DEFAULT_AUDIOSINK@
-DEFAULT_AUDIOSRC = @DEFAULT_AUDIOSRC@
-DEFAULT_VIDEOSINK = @DEFAULT_VIDEOSINK@
-DEFAULT_VIDEOSRC = @DEFAULT_VIDEOSRC@
-DEFAULT_VISUALIZER = @DEFAULT_VISUALIZER@
-DEFS = @DEFS@
-DEPDIR = @DEPDIR@
-DEPRECATED_CFLAGS = @DEPRECATED_CFLAGS@
-DIRECT3D_LIBS = @DIRECT3D_LIBS@
-DIRECTFB_CFLAGS = @DIRECTFB_CFLAGS@
-DIRECTFB_LIBS = @DIRECTFB_LIBS@
-DIRECTSOUND_LIBS = @DIRECTSOUND_LIBS@
-DIRECTX_CFLAGS = @DIRECTX_CFLAGS@
-DIRECTX_LDFLAGS = @DIRECTX_LDFLAGS@
-DLLTOOL = @DLLTOOL@
-DSYMUTIL = @DSYMUTIL@
-DTLS_CFLAGS = @DTLS_CFLAGS@
-DTLS_LIBS = @DTLS_LIBS@
-DTS_LIBS = @DTS_LIBS@
-DUMPBIN = @DUMPBIN@
-DVDNAV_CFLAGS = @DVDNAV_CFLAGS@
-DVDNAV_LIBS = @DVDNAV_LIBS@
-ECHO_C = @ECHO_C@
-ECHO_N = @ECHO_N@
-ECHO_T = @ECHO_T@
-EGREP = @EGREP@
-ERROR_CFLAGS = @ERROR_CFLAGS@
-ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
-ERROR_OBJCFLAGS = @ERROR_OBJCFLAGS@
-EXEEXT = @EXEEXT@
-EXIF_CFLAGS = @EXIF_CFLAGS@
-EXIF_LIBS = @EXIF_LIBS@
-FAAC_LIBS = @FAAC_LIBS@
-FAAD_IS_NEAAC = @FAAD_IS_NEAAC@
-FAAD_LIBS = @FAAD_LIBS@
-FFLAGS = @FFLAGS@
-FGREP = @FGREP@
-FLITE_CFLAGS = @FLITE_CFLAGS@
-FLITE_LIBS = @FLITE_LIBS@
-FLUIDSYNTH_CFLAGS = @FLUIDSYNTH_CFLAGS@
-FLUIDSYNTH_LIBS = @FLUIDSYNTH_LIBS@
-GCOV = @GCOV@
-GCOV_CFLAGS = @GCOV_CFLAGS@
-GCOV_LIBS = @GCOV_LIBS@
-GDBUS_CODEGEN = @GDBUS_CODEGEN@
-GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
-GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
-GIO_CFLAGS = @GIO_CFLAGS@
-GIO_LDFLAGS = @GIO_LDFLAGS@
-GIO_LIBS = @GIO_LIBS@
-GIO_UNIX_CFLAGS = @GIO_UNIX_CFLAGS@
-GIO_UNIX_LIBS = @GIO_UNIX_LIBS@
-GLIB_CFLAGS = @GLIB_CFLAGS@
-GLIB_COMPILE_SCHEMAS = @GLIB_COMPILE_SCHEMAS@
-GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
-GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
-GLIB_LIBS = @GLIB_LIBS@
-GLIB_MKENUMS = @GLIB_MKENUMS@
-GLIB_PREFIX = @GLIB_PREFIX@
-GLIB_REQ = @GLIB_REQ@
-GL_CFLAGS = @GL_CFLAGS@
-GL_LIBS = @GL_LIBS@
-GL_OBJCFLAGS = @GL_OBJCFLAGS@
-GME_LIBS = @GME_LIBS@
-GMODULE_EXPORT_CFLAGS = @GMODULE_EXPORT_CFLAGS@
-GMODULE_EXPORT_LIBS = @GMODULE_EXPORT_LIBS@
-GMODULE_NO_EXPORT_CFLAGS = @GMODULE_NO_EXPORT_CFLAGS@
-GMODULE_NO_EXPORT_LIBS = @GMODULE_NO_EXPORT_LIBS@
-GMSGFMT = @GMSGFMT@
-GMSGFMT_015 = @GMSGFMT_015@
-GRAPHENE_CFLAGS = @GRAPHENE_CFLAGS@
-GRAPHENE_LIBS = @GRAPHENE_LIBS@
-GREP = @GREP@
-GSETTINGS_CFLAGS = @GSETTINGS_CFLAGS@
-GSETTINGS_DISABLE_SCHEMAS_COMPILE = @GSETTINGS_DISABLE_SCHEMAS_COMPILE@
-GSETTINGS_LIBS = @GSETTINGS_LIBS@
-GSM_LIBS = @GSM_LIBS@
-GSTPB_PLUGINS_DIR = @GSTPB_PLUGINS_DIR@
-GSTPB_PREFIX = @GSTPB_PREFIX@
-GST_AGE = @GST_AGE@
-GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
-GST_API_VERSION = @GST_API_VERSION@
-GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
-GST_BASE_LIBS = @GST_BASE_LIBS@
-GST_CFLAGS = @GST_CFLAGS@
-GST_CHECK_CFLAGS = @GST_CHECK_CFLAGS@
-GST_CHECK_LIBS = @GST_CHECK_LIBS@
-GST_CONTROLLER_CFLAGS = @GST_CONTROLLER_CFLAGS@
-GST_CONTROLLER_LIBS = @GST_CONTROLLER_LIBS@
-GST_CURRENT = @GST_CURRENT@
-GST_CXXFLAGS = @GST_CXXFLAGS@
-GST_LEVEL_DEFAULT = @GST_LEVEL_DEFAULT@
-GST_LIBS = @GST_LIBS@
-GST_LIBVERSION = @GST_LIBVERSION@
-GST_LIB_LDFLAGS = @GST_LIB_LDFLAGS@
-GST_LICENSE = @GST_LICENSE@
-GST_LT_LDFLAGS = @GST_LT_LDFLAGS@
-GST_NET_CFLAGS = @GST_NET_CFLAGS@
-GST_NET_LIBS = @GST_NET_LIBS@
-GST_OBJCFLAGS = @GST_OBJCFLAGS@
-GST_OPTION_CFLAGS = @GST_OPTION_CFLAGS@
-GST_OPTION_CXXFLAGS = @GST_OPTION_CXXFLAGS@
-GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
-GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
-GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
-GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
-GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
-GST_PLUGINS_BAD_CFLAGS = @GST_PLUGINS_BAD_CFLAGS@
-GST_PLUGINS_BAD_CXXFLAGS = @GST_PLUGINS_BAD_CXXFLAGS@
-GST_PLUGINS_BAD_OBJCFLAGS = @GST_PLUGINS_BAD_OBJCFLAGS@
-GST_PLUGINS_BASE_CFLAGS = @GST_PLUGINS_BASE_CFLAGS@
-GST_PLUGINS_BASE_DIR = @GST_PLUGINS_BASE_DIR@
-GST_PLUGINS_BASE_LIBS = @GST_PLUGINS_BASE_LIBS@
-GST_PLUGINS_DIR = @GST_PLUGINS_DIR@
-GST_PLUGINS_GOOD_CFLAGS = @GST_PLUGINS_GOOD_CFLAGS@
-GST_PLUGINS_GOOD_DIR = @GST_PLUGINS_GOOD_DIR@
-GST_PLUGINS_GOOD_LIBS = @GST_PLUGINS_GOOD_LIBS@
-GST_PLUGINS_LIBAV_CFLAGS = @GST_PLUGINS_LIBAV_CFLAGS@
-GST_PLUGINS_LIBAV_DIR = @GST_PLUGINS_LIBAV_DIR@
-GST_PLUGINS_LIBAV_LIBS = @GST_PLUGINS_LIBAV_LIBS@
-GST_PLUGINS_NONPORTED = @GST_PLUGINS_NONPORTED@
-GST_PLUGINS_SELECTED = @GST_PLUGINS_SELECTED@
-GST_PLUGINS_UGLY_CFLAGS = @GST_PLUGINS_UGLY_CFLAGS@
-GST_PLUGINS_UGLY_DIR = @GST_PLUGINS_UGLY_DIR@
-GST_PLUGINS_UGLY_LIBS = @GST_PLUGINS_UGLY_LIBS@
-GST_PLUGIN_LDFLAGS = @GST_PLUGIN_LDFLAGS@
-GST_PLUGIN_LIBTOOLFLAGS = @GST_PLUGIN_LIBTOOLFLAGS@
-GST_PREFIX = @GST_PREFIX@
-GST_REVISION = @GST_REVISION@
-GST_TOOLS_DIR = @GST_TOOLS_DIR@
-GTK3_CFLAGS = @GTK3_CFLAGS@
-GTK3_GL_CFLAGS = @GTK3_GL_CFLAGS@
-GTK3_GL_LIBS = @GTK3_GL_LIBS@
-GTK3_LIBS = @GTK3_LIBS@
-GTK3_WAYLAND_CFLAGS = @GTK3_WAYLAND_CFLAGS@
-GTK3_WAYLAND_LIBS = @GTK3_WAYLAND_LIBS@
-GTK3_X11_CFLAGS = @GTK3_X11_CFLAGS@
-GTK3_X11_LIBS = @GTK3_X11_LIBS@
-GTKDOC_CHECK = @GTKDOC_CHECK@
-GTKDOC_DEPS_CFLAGS = @GTKDOC_DEPS_CFLAGS@
-GTKDOC_DEPS_LIBS = @GTKDOC_DEPS_LIBS@
-GTKDOC_MKPDF = @GTKDOC_MKPDF@
-GTKDOC_REBASE = @GTKDOC_REBASE@
-GTK_BASE_DIR = @GTK_BASE_DIR@
-GTK_CFLAGS = @GTK_CFLAGS@
-GTK_LIBS = @GTK_LIBS@
-GTK_VERSION = @GTK_VERSION@
-G_UDEV_CFLAGS = @G_UDEV_CFLAGS@
-G_UDEV_LIBS = @G_UDEV_LIBS@
-HAVE_CLUTTER = @HAVE_CLUTTER@
-HAVE_CLUTTER_GLX = @HAVE_CLUTTER_GLX@
-HAVE_CLUTTER_X11 = @HAVE_CLUTTER_X11@
-HAVE_CXX = @HAVE_CXX@
-HAVE_DIRECT3D = @HAVE_DIRECT3D@
-HAVE_DIRECTSOUND = @HAVE_DIRECTSOUND@
-HAVE_DTS = @HAVE_DTS@
-HAVE_EGL = @HAVE_EGL@
-HAVE_FAAC = @HAVE_FAAC@
-HAVE_FAAD = @HAVE_FAAD@
-HAVE_FLITE = @HAVE_FLITE@
-HAVE_GL = @HAVE_GL@
-HAVE_GLES2 = @HAVE_GLES2@
-HAVE_GRAPHENE = @HAVE_GRAPHENE@
-HAVE_GSM = @HAVE_GSM@
-HAVE_GTK3 = @HAVE_GTK3@
-HAVE_JPEG = @HAVE_JPEG@
-HAVE_NAS = @HAVE_NAS@
-HAVE_OPENJPEG = @HAVE_OPENJPEG@
-HAVE_PNG = @HAVE_PNG@
-HAVE_SRTP = @HAVE_SRTP@
-HAVE_WASAPI = @HAVE_WASAPI@
-HAVE_WILDMIDI = @HAVE_WILDMIDI@
-HAVE_WINKS = @HAVE_WINKS@
-HAVE_WINSCREENCAP = @HAVE_WINSCREENCAP@
-HAVE_X11 = @HAVE_X11@
-HTML_DIR = @HTML_DIR@
-INSTALL = @INSTALL@
-INSTALL_DATA = @INSTALL_DATA@
-INSTALL_PROGRAM = @INSTALL_PROGRAM@
-INSTALL_SCRIPT = @INSTALL_SCRIPT@
-INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
-INTLLIBS = @INTLLIBS@
-INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
-INTROSPECTION_CFLAGS = @INTROSPECTION_CFLAGS@
-INTROSPECTION_COMPILER = @INTROSPECTION_COMPILER@
-INTROSPECTION_GENERATE = @INTROSPECTION_GENERATE@
-INTROSPECTION_GIRDIR = @INTROSPECTION_GIRDIR@
-INTROSPECTION_INIT = @INTROSPECTION_INIT@
-INTROSPECTION_LIBS = @INTROSPECTION_LIBS@
-INTROSPECTION_MAKEFILE = @INTROSPECTION_MAKEFILE@
-INTROSPECTION_SCANNER = @INTROSPECTION_SCANNER@
-INTROSPECTION_TYPELIBDIR = @INTROSPECTION_TYPELIBDIR@
-JPEG_LIBS = @JPEG_LIBS@
-KATE_CFLAGS = @KATE_CFLAGS@
-KATE_LIBS = @KATE_LIBS@
-LD = @LD@
-LDFLAGS = @LDFLAGS@
-LIBDC1394_CFLAGS = @LIBDC1394_CFLAGS@
-LIBDC1394_LIBS = @LIBDC1394_LIBS@
-LIBDE265_CFLAGS = @LIBDE265_CFLAGS@
-LIBDE265_LIBS = @LIBDE265_LIBS@
-LIBDIR = @LIBDIR@
-LIBGCRYPT_CFLAGS = @LIBGCRYPT_CFLAGS@
-LIBGCRYPT_CONFIG = @LIBGCRYPT_CONFIG@
-LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@
-LIBICONV = @LIBICONV@
-LIBINTL = @LIBINTL@
-LIBM = @LIBM@
-LIBMMS_CFLAGS = @LIBMMS_CFLAGS@
-LIBMMS_LIBS = @LIBMMS_LIBS@
-LIBOBJS = @LIBOBJS@
-LIBPNG_CFLAGS = @LIBPNG_CFLAGS@
-LIBPNG_LIBS = @LIBPNG_LIBS@
-LIBS = @LIBS@
-LIBTOOL = @LIBTOOL@
-LIBUDEV_CFLAGS = @LIBUDEV_CFLAGS@
-LIBUDEV_LIBS = @LIBUDEV_LIBS@
-LIBUSB_CFLAGS = @LIBUSB_CFLAGS@
-LIBUSB_LIBS = @LIBUSB_LIBS@
-LIBVISUAL_CFLAGS = @LIBVISUAL_CFLAGS@
-LIBVISUAL_LIBS = @LIBVISUAL_LIBS@
-LIBXML2_CFLAGS = @LIBXML2_CFLAGS@
-LIBXML2_LIBS = @LIBXML2_LIBS@
-LIPO = @LIPO@
-LN_S = @LN_S@
-LOCALEDIR = @LOCALEDIR@
-LRDF_CFLAGS = @LRDF_CFLAGS@
-LRDF_LIBS = @LRDF_LIBS@
-LTLIBICONV = @LTLIBICONV@
-LTLIBINTL = @LTLIBINTL@
-LTLIBOBJS = @LTLIBOBJS@
-MAINT = @MAINT@
-MAKEINFO = @MAKEINFO@
-MANIFEST_TOOL = @MANIFEST_TOOL@
-MIMIC_CFLAGS = @MIMIC_CFLAGS@
-MIMIC_LIBS = @MIMIC_LIBS@
-MJPEG_CFLAGS = @MJPEG_CFLAGS@
-MJPEG_LIBS = @MJPEG_LIBS@
-MKDIR_P = @MKDIR_P@
-MOC = @MOC@
-MODPLUG_CFLAGS = @MODPLUG_CFLAGS@
-MODPLUG_LIBS = @MODPLUG_LIBS@
-MPEG2ENC_CFLAGS = @MPEG2ENC_CFLAGS@
-MPEG2ENC_LIBS = @MPEG2ENC_LIBS@
-MPG123_CFLAGS = @MPG123_CFLAGS@
-MPG123_LIBS = @MPG123_LIBS@
-MPLEX_CFLAGS = @MPLEX_CFLAGS@
-MPLEX_LDFLAGS = @MPLEX_LDFLAGS@
-MPLEX_LIBS = @MPLEX_LIBS@
-MSGFMT = @MSGFMT@
-MSGFMT_015 = @MSGFMT_015@
-MSGMERGE = @MSGMERGE@
-MUSEPACK_LIBS = @MUSEPACK_LIBS@
-NAS_CFLAGS = @NAS_CFLAGS@
-NAS_LIBS = @NAS_LIBS@
-NEON_CFLAGS = @NEON_CFLAGS@
-NEON_LIBS = @NEON_LIBS@
-NETTLE_CFLAGS = @NETTLE_CFLAGS@
-NETTLE_LIBS = @NETTLE_LIBS@
-NM = @NM@
-NMEDIT = @NMEDIT@
-OBJC = @OBJC@
-OBJCDEPMODE = @OBJCDEPMODE@
-OBJCFLAGS = @OBJCFLAGS@
-OBJDUMP = @OBJDUMP@
-OBJEXT = @OBJEXT@
-OFA_CFLAGS = @OFA_CFLAGS@
-OFA_LIBS = @OFA_LIBS@
-OPENAL_CFLAGS = @OPENAL_CFLAGS@
-OPENAL_LIBS = @OPENAL_LIBS@
-OPENCV_CFLAGS = @OPENCV_CFLAGS@
-OPENCV_LIBS = @OPENCV_LIBS@
-OPENCV_PREFIX = @OPENCV_PREFIX@
-OPENEXR_CFLAGS = @OPENEXR_CFLAGS@
-OPENEXR_LIBS = @OPENEXR_LIBS@
-OPENH264_CFLAGS = @OPENH264_CFLAGS@
-OPENH264_LIBS = @OPENH264_LIBS@
-OPENJPEG_CFLAGS = @OPENJPEG_CFLAGS@
-OPENJPEG_LIBS = @OPENJPEG_LIBS@
-OPENNI2_CFLAGS = @OPENNI2_CFLAGS@
-OPENNI2_LIBS = @OPENNI2_LIBS@
-OPENSSL_CFLAGS = @OPENSSL_CFLAGS@
-OPENSSL_LIBS = @OPENSSL_LIBS@
-OPUS_CFLAGS = @OPUS_CFLAGS@
-OPUS_LIBS = @OPUS_LIBS@
-ORCC = @ORCC@
-ORCC_FLAGS = @ORCC_FLAGS@
-ORC_CFLAGS = @ORC_CFLAGS@
-ORC_LIBS = @ORC_LIBS@
-OTOOL = @OTOOL@
-OTOOL64 = @OTOOL64@
-PACKAGE = @PACKAGE@
-PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
-PACKAGE_NAME = @PACKAGE_NAME@
-PACKAGE_STRING = @PACKAGE_STRING@
-PACKAGE_TARNAME = @PACKAGE_TARNAME@
-PACKAGE_URL = @PACKAGE_URL@
-PACKAGE_VERSION = @PACKAGE_VERSION@
-PACKAGE_VERSION_MAJOR = @PACKAGE_VERSION_MAJOR@
-PACKAGE_VERSION_MICRO = @PACKAGE_VERSION_MICRO@
-PACKAGE_VERSION_MINOR = @PACKAGE_VERSION_MINOR@
-PACKAGE_VERSION_NANO = @PACKAGE_VERSION_NANO@
-PACKAGE_VERSION_RELEASE = @PACKAGE_VERSION_RELEASE@
-PATH_SEPARATOR = @PATH_SEPARATOR@
-PKG_CONFIG = @PKG_CONFIG@
-PLUGINDIR = @PLUGINDIR@
-POSUB = @POSUB@
-PROFILE_CFLAGS = @PROFILE_CFLAGS@
-PTHREAD_CC = @PTHREAD_CC@
-PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
-PTHREAD_LIBS = @PTHREAD_LIBS@
-PVR_CFLAGS = @PVR_CFLAGS@
-PVR_LIBS = @PVR_LIBS@
-PYTHON = @PYTHON@
-PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
-PYTHON_PLATFORM = @PYTHON_PLATFORM@
-PYTHON_PREFIX = @PYTHON_PREFIX@
-PYTHON_VERSION = @PYTHON_VERSION@
-QT_CFLAGS = @QT_CFLAGS@
-QT_LIBS = @QT_LIBS@
-QT_WAYLAND_CFLAGS = @QT_WAYLAND_CFLAGS@
-QT_WAYLAND_LIBS = @QT_WAYLAND_LIBS@
-QT_X11_CFLAGS = @QT_X11_CFLAGS@
-QT_X11_LIBS = @QT_X11_LIBS@
-RANLIB = @RANLIB@
-RCC = @RCC@
-RSVG_2_36_2_CFLAGS = @RSVG_2_36_2_CFLAGS@
-RSVG_2_36_2_LIBS = @RSVG_2_36_2_LIBS@
-RSVG_CFLAGS = @RSVG_CFLAGS@
-RSVG_LIBS = @RSVG_LIBS@
-RTMP_CFLAGS = @RTMP_CFLAGS@
-RTMP_LIBS = @RTMP_LIBS@
-SBC_CFLAGS = @SBC_CFLAGS@
-SBC_LIBS = @SBC_LIBS@
-SCHRO_CFLAGS = @SCHRO_CFLAGS@
-SCHRO_LIBS = @SCHRO_LIBS@
-SDL_CFLAGS = @SDL_CFLAGS@
-SDL_CLUTTER = @SDL_CLUTTER@
-SDL_CONFIG = @SDL_CONFIG@
-SDL_LIBS = @SDL_LIBS@
-SED = @SED@
-SET_MAKE = @SET_MAKE@
-SHELL = @SHELL@
-SHM_LIBS = @SHM_LIBS@
-SLV2_CFLAGS = @SLV2_CFLAGS@
-SLV2_LIBS = @SLV2_LIBS@
-SNDFILE_CFLAGS = @SNDFILE_CFLAGS@
-SNDFILE_LIBS = @SNDFILE_LIBS@
-SNDIO_LIBS = @SNDIO_LIBS@
-SOUNDTOUCH_CFLAGS = @SOUNDTOUCH_CFLAGS@
-SOUNDTOUCH_LIBS = @SOUNDTOUCH_LIBS@
-SPANDSP_CFLAGS = @SPANDSP_CFLAGS@
-SPANDSP_LIBS = @SPANDSP_LIBS@
-SPC_LIBS = @SPC_LIBS@
-SRTP_CFLAGS = @SRTP_CFLAGS@
-SRTP_LIBS = @SRTP_LIBS@
-SSH2_CFLAGS = @SSH2_CFLAGS@
-SSH2_LIBS = @SSH2_LIBS@
-STRIP = @STRIP@
-TELETEXTDEC_CFLAGS = @TELETEXTDEC_CFLAGS@
-TELETEXTDEC_LIBS = @TELETEXTDEC_LIBS@
-TIGER_CFLAGS = @TIGER_CFLAGS@
-TIGER_LIBS = @TIGER_LIBS@
-TIMIDITY_CFLAGS = @TIMIDITY_CFLAGS@
-TIMIDITY_LIBS = @TIMIDITY_LIBS@
-UIC = @UIC@
-USE_GLES2 = @USE_GLES2@
-USE_NLS = @USE_NLS@
-USE_OPENGL = @USE_OPENGL@
-VALGRIND_CFLAGS = @VALGRIND_CFLAGS@
-VALGRIND_LIBS = @VALGRIND_LIBS@
-VALGRIND_PATH = @VALGRIND_PATH@
-VDPAU_CFLAGS = @VDPAU_CFLAGS@
-VDPAU_LIBS = @VDPAU_LIBS@
-VERSION = @VERSION@
-VOAACENC_CFLAGS = @VOAACENC_CFLAGS@
-VOAACENC_LIBS = @VOAACENC_LIBS@
-VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
-VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
-WARNING_CFLAGS = @WARNING_CFLAGS@
-WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
-WARNING_OBJCFLAGS = @WARNING_OBJCFLAGS@
-WASAPI_LIBS = @WASAPI_LIBS@
-WAYLAND_CFLAGS = @WAYLAND_CFLAGS@
-WAYLAND_EGL_CFLAGS = @WAYLAND_EGL_CFLAGS@
-WAYLAND_EGL_LIBS = @WAYLAND_EGL_LIBS@
-WAYLAND_LIBS = @WAYLAND_LIBS@
-WEBP_CFLAGS = @WEBP_CFLAGS@
-WEBP_LIBS = @WEBP_LIBS@
-WILDMIDI_CFLAGS = @WILDMIDI_CFLAGS@
-WILDMIDI_LIBS = @WILDMIDI_LIBS@
-WINKS_LIBS = @WINKS_LIBS@
-WINSCREENCAP_LIBS = @WINSCREENCAP_LIBS@
-WINSOCK2_LIBS = @WINSOCK2_LIBS@
-X11_CFLAGS = @X11_CFLAGS@
-X11_LIBS = @X11_LIBS@
-X265_CFLAGS = @X265_CFLAGS@
-X265_LIBS = @X265_LIBS@
-XCOMPOSITE_CFLAGS = @XCOMPOSITE_CFLAGS@
-XCOMPOSITE_LIBS = @XCOMPOSITE_LIBS@
-XGETTEXT = @XGETTEXT@
-XGETTEXT_015 = @XGETTEXT_015@
-XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
-XVID_LIBS = @XVID_LIBS@
-X_CFLAGS = @X_CFLAGS@
-X_LIBS = @X_LIBS@
-ZBAR_CFLAGS = @ZBAR_CFLAGS@
-ZBAR_LIBS = @ZBAR_LIBS@
-abs_builddir = @abs_builddir@
-abs_srcdir = @abs_srcdir@
-abs_top_builddir = @abs_top_builddir@
-abs_top_srcdir = @abs_top_srcdir@
-ac_ct_AR = @ac_ct_AR@
-ac_ct_CC = @ac_ct_CC@
-ac_ct_CXX = @ac_ct_CXX@
-ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
-ac_ct_OBJC = @ac_ct_OBJC@
-am__include = @am__include@
-am__leading_dot = @am__leading_dot@
-am__quote = @am__quote@
-am__tar = @am__tar@
-am__untar = @am__untar@
-ax_pthread_config = @ax_pthread_config@
-bindir = @bindir@
-build = @build@
-build_alias = @build_alias@
-build_cpu = @build_cpu@
-build_os = @build_os@
-build_vendor = @build_vendor@
-builddir = @builddir@
-datadir = @datadir@
-datarootdir = @datarootdir@
-docdir = @docdir@
-dvidir = @dvidir@
-exec_prefix = @exec_prefix@
-gsettingsschemadir = @gsettingsschemadir@
-host = @host@
-host_alias = @host_alias@
-host_cpu = @host_cpu@
-host_os = @host_os@
-host_vendor = @host_vendor@
-htmldir = @htmldir@
-includedir = @includedir@
-infodir = @infodir@
-install_sh = @install_sh@
-libdir = @libdir@
-libexecdir = @libexecdir@
-localedir = @localedir@
-localstatedir = @localstatedir@
-mandir = @mandir@
-mkdir_p = @mkdir_p@
-oldincludedir = @oldincludedir@
-pdfdir = @pdfdir@
-pkgpyexecdir = @pkgpyexecdir@
-pkgpythondir = @pkgpythondir@
-plugindir = @plugindir@
-prefix = @prefix@
-program_transform_name = @program_transform_name@
-psdir = @psdir@
-pyexecdir = @pyexecdir@
-pythondir = @pythondir@
-runstatedir = @runstatedir@
-sbindir = @sbindir@
-sharedstatedir = @sharedstatedir@
-srcdir = @srcdir@
-sysconfdir = @sysconfdir@
-target = @target@
-target_alias = @target_alias@
-target_cpu = @target_cpu@
-target_os = @target_os@
-target_vendor = @target_vendor@
-top_build_prefix = @top_build_prefix@
-top_builddir = @top_builddir@
-top_srcdir = @top_srcdir@
-wayland_scanner = @wayland_scanner@
-plugin_LTLIBRARIES = libgstmpg123.la
-libgstmpg123_la_SOURCES = gstmpg123audiodec.c
-libgstmpg123_la_CFLAGS = -DGST_USE_UNSTABLE_API \
-	$(GST_PLUGINS_BASE_CFLAGS) \
-	$(GST_BASE_CFLAGS) $(GST_CFLAGS) $(MPG123_CFLAGS)
-
-libgstmpg123_la_LIBADD = $(GST_PLUGINS_BASE_LIBS) -lgstaudio-@GST_API_VERSION@ \
-	$(GST_BASE_LIBS) $(GST_LIBS) $(MPG123_LIBS)
-
-libgstmpg123_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS)
-libgstmpg123_la_LIBTOOLFLAGS = $(GST_PLUGIN_LIBTOOLFLAGS)
-noinst_HEADERS = gstmpg123audiodec.h
-all: all-am
-
-.SUFFIXES:
-.SUFFIXES: .c .lo .o .obj
-$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
-	@for dep in $?; do \
-	  case '$(am__configure_deps)' in \
-	    *$$dep*) \
-	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
-	        && { if test -f $@; then exit 0; else break; fi; }; \
-	      exit 1;; \
-	  esac; \
-	done; \
-	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu ext/mpg123/Makefile'; \
-	$(am__cd) $(top_srcdir) && \
-	  $(AUTOMAKE) --gnu ext/mpg123/Makefile
-Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
-	@case '$?' in \
-	  *config.status*) \
-	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
-	  *) \
-	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
-	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
-	esac;
-
-$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-
-$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(am__aclocal_m4_deps):
-
-install-pluginLTLIBRARIES: $(plugin_LTLIBRARIES)
-	@$(NORMAL_INSTALL)
-	@list='$(plugin_LTLIBRARIES)'; test -n "$(plugindir)" || list=; \
-	list2=; for p in $$list; do \
-	  if test -f $$p; then \
-	    list2="$$list2 $$p"; \
-	  else :; fi; \
-	done; \
-	test -z "$$list2" || { \
-	  echo " $(MKDIR_P) '$(DESTDIR)$(plugindir)'"; \
-	  $(MKDIR_P) "$(DESTDIR)$(plugindir)" || exit 1; \
-	  echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(plugindir)'"; \
-	  $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(plugindir)"; \
-	}
-
-uninstall-pluginLTLIBRARIES:
-	@$(NORMAL_UNINSTALL)
-	@list='$(plugin_LTLIBRARIES)'; test -n "$(plugindir)" || list=; \
-	for p in $$list; do \
-	  $(am__strip_dir) \
-	  echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(plugindir)/$$f'"; \
-	  $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(plugindir)/$$f"; \
-	done
-
-clean-pluginLTLIBRARIES:
-	-test -z "$(plugin_LTLIBRARIES)" || rm -f $(plugin_LTLIBRARIES)
-	@list='$(plugin_LTLIBRARIES)'; \
-	locs=`for p in $$list; do echo $$p; done | \
-	      sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \
-	      sort -u`; \
-	test -z "$$locs" || { \
-	  echo rm -f $${locs}; \
-	  rm -f $${locs}; \
-	}
-
-libgstmpg123.la: $(libgstmpg123_la_OBJECTS) $(libgstmpg123_la_DEPENDENCIES) $(EXTRA_libgstmpg123_la_DEPENDENCIES) 
-	$(AM_V_CCLD)$(libgstmpg123_la_LINK) -rpath $(plugindir) $(libgstmpg123_la_OBJECTS) $(libgstmpg123_la_LIBADD) $(LIBS)
-
-mostlyclean-compile:
-	-rm -f *.$(OBJEXT)
-
-distclean-compile:
-	-rm -f *.tab.c
-
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstmpg123_la-gstmpg123audiodec.Plo@am__quote@
-
-.c.o:
-@am__fastdepCC_TRUE@	$(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\
-@am__fastdepCC_TRUE@	$(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\
-@am__fastdepCC_TRUE@	$(am__mv) $$depbase.Tpo $$depbase.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $<
-
-.c.obj:
-@am__fastdepCC_TRUE@	$(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\
-@am__fastdepCC_TRUE@	$(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\
-@am__fastdepCC_TRUE@	$(am__mv) $$depbase.Tpo $$depbase.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
-
-.c.lo:
-@am__fastdepCC_TRUE@	$(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.lo$$||'`;\
-@am__fastdepCC_TRUE@	$(LTCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\
-@am__fastdepCC_TRUE@	$(am__mv) $$depbase.Tpo $$depbase.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $<
-
-libgstmpg123_la-gstmpg123audiodec.lo: gstmpg123audiodec.c
-@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstmpg123_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstmpg123_la_CFLAGS) $(CFLAGS) -MT libgstmpg123_la-gstmpg123audiodec.lo -MD -MP -MF $(DEPDIR)/libgstmpg123_la-gstmpg123audiodec.Tpo -c -o libgstmpg123_la-gstmpg123audiodec.lo `test -f 'gstmpg123audiodec.c' || echo '$(srcdir)/'`gstmpg123audiodec.c
-@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstmpg123_la-gstmpg123audiodec.Tpo $(DEPDIR)/libgstmpg123_la-gstmpg123audiodec.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='gstmpg123audiodec.c' object='libgstmpg123_la-gstmpg123audiodec.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstmpg123_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstmpg123_la_CFLAGS) $(CFLAGS) -c -o libgstmpg123_la-gstmpg123audiodec.lo `test -f 'gstmpg123audiodec.c' || echo '$(srcdir)/'`gstmpg123audiodec.c
-
-mostlyclean-libtool:
-	-rm -f *.lo
-
-clean-libtool:
-	-rm -rf .libs _libs
-
-ID: $(am__tagged_files)
-	$(am__define_uniq_tagged_files); mkid -fID $$unique
-tags: tags-am
-TAGS: tags
-
-tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
-	set x; \
-	here=`pwd`; \
-	$(am__define_uniq_tagged_files); \
-	shift; \
-	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
-	  test -n "$$unique" || unique=$$empty_fix; \
-	  if test $$# -gt 0; then \
-	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
-	      "$$@" $$unique; \
-	  else \
-	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
-	      $$unique; \
-	  fi; \
-	fi
-ctags: ctags-am
-
-CTAGS: ctags
-ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
-	$(am__define_uniq_tagged_files); \
-	test -z "$(CTAGS_ARGS)$$unique" \
-	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
-	     $$unique
-
-GTAGS:
-	here=`$(am__cd) $(top_builddir) && pwd` \
-	  && $(am__cd) $(top_srcdir) \
-	  && gtags -i $(GTAGS_ARGS) "$$here"
-cscopelist: cscopelist-am
-
-cscopelist-am: $(am__tagged_files)
-	list='$(am__tagged_files)'; \
-	case "$(srcdir)" in \
-	  [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
-	  *) sdir=$(subdir)/$(srcdir) ;; \
-	esac; \
-	for i in $$list; do \
-	  if test -f "$$i"; then \
-	    echo "$(subdir)/$$i"; \
-	  else \
-	    echo "$$sdir/$$i"; \
-	  fi; \
-	done >> $(top_builddir)/cscope.files
-
-distclean-tags:
-	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
-
-distdir: $(DISTFILES)
-	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
-	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
-	list='$(DISTFILES)'; \
-	  dist_files=`for file in $$list; do echo $$file; done | \
-	  sed -e "s|^$$srcdirstrip/||;t" \
-	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
-	case $$dist_files in \
-	  */*) $(MKDIR_P) `echo "$$dist_files" | \
-			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
-			   sort -u` ;; \
-	esac; \
-	for file in $$dist_files; do \
-	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
-	  if test -d $$d/$$file; then \
-	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
-	    if test -d "$(distdir)/$$file"; then \
-	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
-	    fi; \
-	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
-	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
-	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
-	    fi; \
-	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
-	  else \
-	    test -f "$(distdir)/$$file" \
-	    || cp -p $$d/$$file "$(distdir)/$$file" \
-	    || exit 1; \
-	  fi; \
-	done
-check-am: all-am
-check: check-am
-all-am: Makefile $(LTLIBRARIES) $(HEADERS)
-installdirs:
-	for dir in "$(DESTDIR)$(plugindir)"; do \
-	  test -z "$$dir" || $(MKDIR_P) "$$dir"; \
-	done
-install: install-am
-install-exec: install-exec-am
-install-data: install-data-am
-uninstall: uninstall-am
-
-install-am: all-am
-	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
-
-installcheck: installcheck-am
-install-strip:
-	if test -z '$(STRIP)'; then \
-	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
-	      install; \
-	else \
-	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
-	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
-	fi
-mostlyclean-generic:
-
-clean-generic:
-
-distclean-generic:
-	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
-	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
-
-maintainer-clean-generic:
-	@echo "This command is intended for maintainers to use"
-	@echo "it deletes files that may require special tools to rebuild."
-clean: clean-am
-
-clean-am: clean-generic clean-libtool clean-pluginLTLIBRARIES \
-	mostlyclean-am
-
-distclean: distclean-am
-	-rm -rf ./$(DEPDIR)
-	-rm -f Makefile
-distclean-am: clean-am distclean-compile distclean-generic \
-	distclean-tags
-
-dvi: dvi-am
-
-dvi-am:
-
-html: html-am
-
-html-am:
-
-info: info-am
-
-info-am:
-
-install-data-am: install-pluginLTLIBRARIES
-
-install-dvi: install-dvi-am
-
-install-dvi-am:
-
-install-exec-am:
-
-install-html: install-html-am
-
-install-html-am:
-
-install-info: install-info-am
-
-install-info-am:
-
-install-man:
-
-install-pdf: install-pdf-am
-
-install-pdf-am:
-
-install-ps: install-ps-am
-
-install-ps-am:
-
-installcheck-am:
-
-maintainer-clean: maintainer-clean-am
-	-rm -rf ./$(DEPDIR)
-	-rm -f Makefile
-maintainer-clean-am: distclean-am maintainer-clean-generic
-
-mostlyclean: mostlyclean-am
-
-mostlyclean-am: mostlyclean-compile mostlyclean-generic \
-	mostlyclean-libtool
-
-pdf: pdf-am
-
-pdf-am:
-
-ps: ps-am
-
-ps-am:
-
-uninstall-am: uninstall-pluginLTLIBRARIES
-
-.MAKE: install-am install-strip
-
-.PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \
-	clean-libtool clean-pluginLTLIBRARIES cscopelist-am ctags \
-	ctags-am distclean distclean-compile distclean-generic \
-	distclean-libtool distclean-tags distdir dvi dvi-am html \
-	html-am info info-am install install-am install-data \
-	install-data-am install-dvi install-dvi-am install-exec \
-	install-exec-am install-html install-html-am install-info \
-	install-info-am install-man install-pdf install-pdf-am \
-	install-pluginLTLIBRARIES install-ps install-ps-am \
-	install-strip installcheck installcheck-am installdirs \
-	maintainer-clean maintainer-clean-generic mostlyclean \
-	mostlyclean-compile mostlyclean-generic mostlyclean-libtool \
-	pdf pdf-am ps ps-am tags tags-am uninstall uninstall-am \
-	uninstall-pluginLTLIBRARIES
-
-.PRECIOUS: Makefile
-
-
-# Tell versions [3.59,3.63) of GNU make to not export all variables.
-# Otherwise a system limit (for SysV at least) may be exceeded.
-.NOEXPORT:
diff --git a/ext/mpg123/gstmpg123audiodec.c b/ext/mpg123/gstmpg123audiodec.c
deleted file mode 100644
index aa8598c..0000000
--- a/ext/mpg123/gstmpg123audiodec.c
+++ /dev/null
@@ -1,633 +0,0 @@
-/*  MP3 decoding plugin for GStreamer using the mpg123 library
- *  Copyright (C) 2012 Carlos Rafael Giani
- *
- *  This library is free software; you can redistribute it and/or
- *  modify it under the terms of the GNU Lesser General Public
- *  License as published by the Free Software Foundation; either
- *  version 2.1 of the License, or (at your option) any later version.
- *
- *  This library is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- *  Lesser General Public License for more details.
- *
- *  You should have received a copy of the GNU Lesser General Public
- *  License along with this library; if not, write to the Free Software
- *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
- */
-
-/**
- * SECTION: element-mpg123audiodec
- * @see_also: lamemp3enc, mad
- *
- * Audio decoder for MPEG-1 layer 1/2/3 audio data.
- *
- * <refsect2>
- * <title>Example pipelines</title>
- * |[
- * gst-launch filesrc location=music.mp3 ! mpegaudioparse ! mpg123audiodec ! audioconvert ! audioresample ! autoaudiosink
- * ]| Decode and play the mp3 file
- * </refsect2>
- */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include "gstmpg123audiodec.h"
-
-#include <stdlib.h>
-#include <string.h>
-
-GST_DEBUG_CATEGORY_STATIC (mpg123_debug);
-#define GST_CAT_DEFAULT mpg123_debug
-
-/* Omitted sample formats that mpg123 supports (or at least can support):
- *  - 8bit integer signed
- *  - 8bit integer unsigned
- *  - a-law
- *  - mu-law
- *  - 64bit float
- *
- * The first four formats are not supported by the GstAudioDecoder base class.
- * (The internal gst_audio_format_from_caps_structure() call fails.)
- *
- * The 64bit float issue is tricky. mpg123 actually decodes to "real",
- * not necessarily to "float".
- *
- * "real" can be fixed point, 32bit float, 64bit float. There seems to be
- * no way how to find out which one of them is actually used.
- *
- * However, in all known installations, "real" equals 32bit float, so that's
- * what is used. */
-
-static GstStaticPadTemplate static_sink_template =
-GST_STATIC_PAD_TEMPLATE ("sink",
-    GST_PAD_SINK,
-    GST_PAD_ALWAYS,
-    GST_STATIC_CAPS ("audio/mpeg, "
-        "mpegversion = (int) 1, "
-        "layer = (int) [ 1, 3 ], "
-        "rate = (int) { 8000, 11025, 12000, 16000, 22050, 24000, 32000, 44100, 48000 }, "
-        "channels = (int) [ 1, 2 ], " "parsed = (boolean) true ")
-    );
-
-static gboolean gst_mpg123_audio_dec_start (GstAudioDecoder * dec);
-static gboolean gst_mpg123_audio_dec_stop (GstAudioDecoder * dec);
-static GstFlowReturn gst_mpg123_audio_dec_push_decoded_bytes (GstMpg123AudioDec
-    * mpg123_decoder, unsigned char const *decoded_bytes,
-    size_t const num_decoded_bytes);
-static GstFlowReturn gst_mpg123_audio_dec_handle_frame (GstAudioDecoder * dec,
-    GstBuffer * input_buffer);
-static gboolean gst_mpg123_audio_dec_set_format (GstAudioDecoder * dec,
-    GstCaps * input_caps);
-static void gst_mpg123_audio_dec_flush (GstAudioDecoder * dec, gboolean hard);
-
-G_DEFINE_TYPE (GstMpg123AudioDec, gst_mpg123_audio_dec, GST_TYPE_AUDIO_DECODER);
-
-static void
-gst_mpg123_audio_dec_class_init (GstMpg123AudioDecClass * klass)
-{
-  GstAudioDecoderClass *base_class;
-  GstElementClass *element_class;
-  GstPadTemplate *src_template, *sink_template;
-  int error;
-
-  GST_DEBUG_CATEGORY_INIT (mpg123_debug, "mpg123", 0, "mpg123 mp3 decoder");
-
-  base_class = GST_AUDIO_DECODER_CLASS (klass);
-  element_class = GST_ELEMENT_CLASS (klass);
-
-  gst_element_class_set_static_metadata (element_class,
-      "mpg123 mp3 decoder",
-      "Codec/Decoder/Audio",
-      "Decodes mp3 streams using the mpg123 library",
-      "Carlos Rafael Giani <dv@pseudoterminal.org>");
-
-  /* Not using static pad template for srccaps, since the comma-separated list
-   * of formats needs to be created depending on whatever mpg123 supports */
-  {
-    const int *format_list;
-    const long *rates_list;
-    size_t num, i;
-    GString *s;
-    GstCaps *src_template_caps;
-
-    s = g_string_new ("audio/x-raw, ");
-
-    mpg123_encodings (&format_list, &num);
-    g_string_append (s, "format = { ");
-    for (i = 0; i < num; ++i) {
-      switch (format_list[i]) {
-        case MPG123_ENC_SIGNED_16:
-          g_string_append (s, (i > 0) ? ", " : "");
-          g_string_append (s, GST_AUDIO_NE (S16));
-          break;
-        case MPG123_ENC_UNSIGNED_16:
-          g_string_append (s, (i > 0) ? ", " : "");
-          g_string_append (s, GST_AUDIO_NE (U16));
-          break;
-        case MPG123_ENC_SIGNED_24:
-          g_string_append (s, (i > 0) ? ", " : "");
-          g_string_append (s, GST_AUDIO_NE (S24));
-          break;
-        case MPG123_ENC_UNSIGNED_24:
-          g_string_append (s, (i > 0) ? ", " : "");
-          g_string_append (s, GST_AUDIO_NE (U24));
-          break;
-        case MPG123_ENC_SIGNED_32:
-          g_string_append (s, (i > 0) ? ", " : "");
-          g_string_append (s, GST_AUDIO_NE (S32));
-          break;
-        case MPG123_ENC_UNSIGNED_32:
-          g_string_append (s, (i > 0) ? ", " : "");
-          g_string_append (s, GST_AUDIO_NE (U32));
-          break;
-        case MPG123_ENC_FLOAT_32:
-          g_string_append (s, (i > 0) ? ", " : "");
-          g_string_append (s, GST_AUDIO_NE (F32));
-          break;
-        default:
-          GST_DEBUG ("Ignoring mpg123 format %d", format_list[i]);
-          break;
-      }
-    }
-    g_string_append (s, " }, ");
-
-    mpg123_rates (&rates_list, &num);
-    g_string_append (s, "rate = (int) { ");
-    for (i = 0; i < num; ++i) {
-      g_string_append_printf (s, "%s%lu", (i > 0) ? ", " : "", rates_list[i]);
-    }
-    g_string_append (s, "}, ");
-
-    g_string_append (s, "channels = (int) [ 1, 2 ], ");
-    g_string_append (s, "layout = (string) interleaved");
-
-    src_template_caps = gst_caps_from_string (s->str);
-    src_template = gst_pad_template_new ("src", GST_PAD_SRC, GST_PAD_ALWAYS,
-        src_template_caps);
-
-    g_string_free (s, TRUE);
-  }
-
-  sink_template = gst_static_pad_template_get (&static_sink_template);
-
-  gst_element_class_add_pad_template (element_class, sink_template);
-  gst_element_class_add_pad_template (element_class, src_template);
-
-  base_class->start = GST_DEBUG_FUNCPTR (gst_mpg123_audio_dec_start);
-  base_class->stop = GST_DEBUG_FUNCPTR (gst_mpg123_audio_dec_stop);
-  base_class->handle_frame =
-      GST_DEBUG_FUNCPTR (gst_mpg123_audio_dec_handle_frame);
-  base_class->set_format = GST_DEBUG_FUNCPTR (gst_mpg123_audio_dec_set_format);
-  base_class->flush = GST_DEBUG_FUNCPTR (gst_mpg123_audio_dec_flush);
-
-  error = mpg123_init ();
-  if (G_UNLIKELY (error != MPG123_OK))
-    GST_ERROR ("Could not initialize mpg123 library: %s",
-        mpg123_plain_strerror (error));
-  else
-    GST_INFO ("mpg123 library initialized");
-}
-
-
-void
-gst_mpg123_audio_dec_init (GstMpg123AudioDec * mpg123_decoder)
-{
-  mpg123_decoder->handle = NULL;
-  gst_audio_decoder_set_needs_format (GST_AUDIO_DECODER (mpg123_decoder), TRUE);
-  gst_audio_decoder_set_use_default_pad_acceptcaps (GST_AUDIO_DECODER_CAST
-      (mpg123_decoder), TRUE);
-  GST_PAD_SET_ACCEPT_TEMPLATE (GST_AUDIO_DECODER_SINK_PAD (mpg123_decoder));
-}
-
-
-static gboolean
-gst_mpg123_audio_dec_start (GstAudioDecoder * dec)
-{
-  GstMpg123AudioDec *mpg123_decoder;
-  int error;
-
-  mpg123_decoder = GST_MPG123_AUDIO_DEC (dec);
-  error = 0;
-
-  mpg123_decoder->handle = mpg123_new (NULL, &error);
-  mpg123_decoder->has_next_audioinfo = FALSE;
-  mpg123_decoder->frame_offset = 0;
-
-  /* Initially, the mpg123 handle comes with a set of default formats
-   * supported. This clears this set.  This is necessary, since only one
-   * format shall be supported (see set_format for more). */
-  mpg123_format_none (mpg123_decoder->handle);
-
-  /* Built-in mpg123 support for gapless decoding is disabled for now,
-   * since it does not work well with seeking */
-  mpg123_param (mpg123_decoder->handle, MPG123_REMOVE_FLAGS, MPG123_GAPLESS, 0);
-  /* Tells mpg123 to use a small read-ahead buffer for better MPEG sync;
-   * essential for MP3 radio streams */
-  mpg123_param (mpg123_decoder->handle, MPG123_ADD_FLAGS, MPG123_SEEKBUFFER, 0);
-  /* Sets the resync limit to the end of the stream (otherwise mpg123 may give
-   * up on decoding prematurely, especially with mp3 web radios) */
-  mpg123_param (mpg123_decoder->handle, MPG123_RESYNC_LIMIT, -1, 0);
-#if MPG123_API_VERSION >= 36
-  /* The precise API version where MPG123_AUTO_RESAMPLE appeared is
-   * somewhere between 29 and 36 */
-  /* Don't let mpg123 resample output */
-  mpg123_param (mpg123_decoder->handle, MPG123_REMOVE_FLAGS,
-      MPG123_AUTO_RESAMPLE, 0);
-#endif
-  /* Don't let mpg123 print messages to stdout/stderr */
-  mpg123_param (mpg123_decoder->handle, MPG123_ADD_FLAGS, MPG123_QUIET, 0);
-
-  /* Open in feed mode (= encoded data is fed manually into the handle). */
-  error = mpg123_open_feed (mpg123_decoder->handle);
-
-  if (G_UNLIKELY (error != MPG123_OK)) {
-    GST_ELEMENT_ERROR (dec, LIBRARY, INIT, (NULL),
-        ("%s", mpg123_strerror (mpg123_decoder->handle)));
-    mpg123_close (mpg123_decoder->handle);
-    mpg123_delete (mpg123_decoder->handle);
-    mpg123_decoder->handle = NULL;
-    return FALSE;
-  }
-
-  GST_INFO_OBJECT (dec, "mpg123 decoder started");
-
-  return TRUE;
-}
-
-
-static gboolean
-gst_mpg123_audio_dec_stop (GstAudioDecoder * dec)
-{
-  GstMpg123AudioDec *mpg123_decoder = GST_MPG123_AUDIO_DEC (dec);
-
-  if (G_LIKELY (mpg123_decoder->handle != NULL)) {
-    mpg123_close (mpg123_decoder->handle);
-    mpg123_delete (mpg123_decoder->handle);
-    mpg123_decoder->handle = NULL;
-  }
-
-  GST_INFO_OBJECT (dec, "mpg123 decoder stopped");
-
-  return TRUE;
-}
-
-
-static GstFlowReturn
-gst_mpg123_audio_dec_push_decoded_bytes (GstMpg123AudioDec * mpg123_decoder,
-    unsigned char const *decoded_bytes, size_t const num_decoded_bytes)
-{
-  GstBuffer *output_buffer;
-  GstAudioDecoder *dec;
-
-  output_buffer = NULL;
-  dec = GST_AUDIO_DECODER (mpg123_decoder);
-
-  if ((num_decoded_bytes == 0) || (decoded_bytes == NULL)) {
-    /* This occurs in the first few frames, which do not carry data; once
-     * MPG123_AUDIO_DEC_NEW_FORMAT is received, the empty frames stop occurring */
-    GST_DEBUG_OBJECT (mpg123_decoder,
-        "cannot decode yet, need more data -> no output buffer to push");
-    return GST_FLOW_OK;
-  }
-
-  output_buffer = gst_buffer_new_allocate (NULL, num_decoded_bytes, NULL);
-
-  if (output_buffer == NULL) {
-    /* This is necessary to advance playback in time,
-     * even when nothing was decoded. */
-    return gst_audio_decoder_finish_frame (dec, NULL, 1);
-  } else {
-    GstMapInfo info;
-
-    if (gst_buffer_map (output_buffer, &info, GST_MAP_WRITE)) {
-      memcpy (info.data, decoded_bytes, num_decoded_bytes);
-      gst_buffer_unmap (output_buffer, &info);
-    } else {
-      GST_ERROR_OBJECT (mpg123_decoder, "gst_buffer_map() returned NULL");
-      gst_buffer_unref (output_buffer);
-      output_buffer = NULL;
-    }
-
-    return gst_audio_decoder_finish_frame (dec, output_buffer, 1);
-  }
-}
-
-
-static GstFlowReturn
-gst_mpg123_audio_dec_handle_frame (GstAudioDecoder * dec,
-    GstBuffer * input_buffer)
-{
-  GstMpg123AudioDec *mpg123_decoder;
-  int decode_error;
-  unsigned char *decoded_bytes;
-  size_t num_decoded_bytes;
-  GstFlowReturn retval;
-
-  mpg123_decoder = GST_MPG123_AUDIO_DEC (dec);
-
-  g_assert (mpg123_decoder->handle != NULL);
-
-  /* The actual decoding */
-  {
-    /* feed input data (if there is any) */
-    if (G_LIKELY (input_buffer != NULL)) {
-      GstMapInfo info;
-
-      if (gst_buffer_map (input_buffer, &info, GST_MAP_READ)) {
-        mpg123_feed (mpg123_decoder->handle, info.data, info.size);
-        gst_buffer_unmap (input_buffer, &info);
-      } else {
-        GST_AUDIO_DECODER_ERROR (mpg123_decoder, 1, RESOURCE, READ, (NULL),
-            ("gst_memory_map() failed"), retval);
-        return retval;
-      }
-    }
-
-    /* Try to decode a frame */
-    decoded_bytes = NULL;
-    num_decoded_bytes = 0;
-    decode_error = mpg123_decode_frame (mpg123_decoder->handle,
-        &mpg123_decoder->frame_offset, &decoded_bytes, &num_decoded_bytes);
-  }
-
-  retval = GST_FLOW_OK;
-
-  switch (decode_error) {
-    case MPG123_NEW_FORMAT:
-      /* As mentioned in gst_mpg123_audio_dec_set_format(), the next audioinfo
-       * is not set immediately; instead, the code waits for mpg123 to take
-       * note of the new format, and then sets the audioinfo. This fixes glitches
-       * with mp3s containing several format headers (for example, first half
-       * using 44.1kHz, second half 32 kHz) */
-
-      GST_LOG_OBJECT (dec,
-          "mpg123 reported a new format -> setting next srccaps");
-
-      gst_mpg123_audio_dec_push_decoded_bytes (mpg123_decoder, decoded_bytes,
-          num_decoded_bytes);
-
-      /* If there is a next audioinfo, use it, then set has_next_audioinfo to
-       * FALSE, to make sure gst_audio_decoder_set_output_format() isn't called
-       * again until set_format is called by the base class */
-      if (mpg123_decoder->has_next_audioinfo) {
-        if (!gst_audio_decoder_set_output_format (dec,
-                &(mpg123_decoder->next_audioinfo))) {
-          GST_WARNING_OBJECT (dec, "Unable to set output format");
-          retval = GST_FLOW_NOT_NEGOTIATED;
-        }
-        mpg123_decoder->has_next_audioinfo = FALSE;
-      }
-
-      break;
-
-    case MPG123_NEED_MORE:
-    case MPG123_OK:
-      retval = gst_mpg123_audio_dec_push_decoded_bytes (mpg123_decoder,
-          decoded_bytes, num_decoded_bytes);
-      break;
-
-    case MPG123_DONE:
-      /* If this happens, then the upstream parser somehow missed the ending
-       * of the bitstream */
-      GST_LOG_OBJECT (dec, "mpg123 is done decoding");
-      gst_mpg123_audio_dec_push_decoded_bytes (mpg123_decoder, decoded_bytes,
-          num_decoded_bytes);
-      retval = GST_FLOW_EOS;
-      break;
-
-    default:
-    {
-      /* Anything else is considered an error */
-      int errcode;
-      retval = GST_FLOW_ERROR;  /* use error by default */
-      switch (decode_error) {
-        case MPG123_ERR:
-          errcode = mpg123_errcode (mpg123_decoder->handle);
-          break;
-        default:
-          errcode = decode_error;
-      }
-      switch (errcode) {
-        case MPG123_BAD_OUTFORMAT:{
-          GstCaps *input_caps =
-              gst_pad_get_current_caps (GST_AUDIO_DECODER_SINK_PAD (dec));
-          GST_ELEMENT_ERROR (dec, STREAM, FORMAT, (NULL),
-              ("Output sample format could not be used when trying to decode frame. "
-                  "This is typically caused when the input caps (often the sample "
-                  "rate) do not match the actual format of the audio data. "
-                  "Input caps: %" GST_PTR_FORMAT, input_caps)
-              );
-          gst_caps_unref (input_caps);
-          break;
-        }
-        default:{
-          char const *errmsg = mpg123_plain_strerror (errcode);
-          /* GST_AUDIO_DECODER_ERROR sets a new return value according to
-           * its estimations */
-          GST_AUDIO_DECODER_ERROR (mpg123_decoder, 1, STREAM, DECODE, (NULL),
-              ("mpg123 decoding error: %s", errmsg), retval);
-        }
-      }
-    }
-  }
-
-  return retval;
-}
-
-
-static gboolean
-gst_mpg123_audio_dec_set_format (GstAudioDecoder * dec, GstCaps * input_caps)
-{
-  /* "encoding" is the sample format specifier for mpg123 */
-  int encoding;
-  int sample_rate, num_channels;
-  GstAudioFormat format;
-  GstMpg123AudioDec *mpg123_decoder;
-  gboolean retval = FALSE;
-
-  mpg123_decoder = GST_MPG123_AUDIO_DEC (dec);
-
-  g_assert (mpg123_decoder->handle != NULL);
-
-  mpg123_decoder->has_next_audioinfo = FALSE;
-
-  /* Get sample rate and number of channels from input_caps */
-  {
-    GstStructure *structure;
-    gboolean err = FALSE;
-
-    /* Only the first structure is used (multiple
-     * input caps structures don't make sense */
-    structure = gst_caps_get_structure (input_caps, 0);
-
-    if (!gst_structure_get_int (structure, "rate", &sample_rate)) {
-      err = TRUE;
-      GST_ERROR_OBJECT (dec, "Input caps do not have a rate value");
-    }
-    if (!gst_structure_get_int (structure, "channels", &num_channels)) {
-      err = TRUE;
-      GST_ERROR_OBJECT (dec, "Input caps do not have a channel value");
-    }
-
-    if (G_UNLIKELY (err))
-      goto done;
-  }
-
-  /* Get sample format from the allowed src caps */
-  {
-    GstCaps *allowed_srccaps =
-        gst_pad_get_allowed_caps (GST_AUDIO_DECODER_SRC_PAD (dec));
-
-    if (allowed_srccaps == NULL) {
-      /* srcpad is not linked (yet), so no peer information is available;
-       * just use the default sample format (16 bit signed integer) */
-      GST_DEBUG_OBJECT (mpg123_decoder,
-          "srcpad is not linked (yet) -> using S16 sample format");
-      format = GST_AUDIO_FORMAT_S16;
-      encoding = MPG123_ENC_SIGNED_16;
-    } else if (gst_caps_is_empty (allowed_srccaps)) {
-      gst_caps_unref (allowed_srccaps);
-      goto done;
-    } else {
-      gchar const *format_str;
-      GValue const *format_value;
-
-      /* Look at the sample format values from the first structure */
-      GstStructure *structure = gst_caps_get_structure (allowed_srccaps, 0);
-      format_value = gst_structure_get_value (structure, "format");
-
-      if (format_value == NULL) {
-        gst_caps_unref (allowed_srccaps);
-        goto done;
-      } else if (GST_VALUE_HOLDS_LIST (format_value)) {
-        /* if value is a format list, pick the first entry */
-        GValue const *fmt_list_value =
-            gst_value_list_get_value (format_value, 0);
-        format_str = g_value_get_string (fmt_list_value);
-      } else if (G_VALUE_HOLDS_STRING (format_value)) {
-        /* if value is a string, use it directly */
-        format_str = g_value_get_string (format_value);
-      } else {
-        GST_ERROR_OBJECT (mpg123_decoder, "unexpected type for 'format' field "
-            "in caps structure %" GST_PTR_FORMAT, structure);
-        gst_caps_unref (allowed_srccaps);
-        goto done;
-      }
-
-      /* get the format value from the string */
-      format = gst_audio_format_from_string (format_str);
-      gst_caps_unref (allowed_srccaps);
-
-      g_assert (format != GST_AUDIO_FORMAT_UNKNOWN);
-
-      /* convert format to mpg123 encoding */
-      switch (format) {
-        case GST_AUDIO_FORMAT_S16:
-          encoding = MPG123_ENC_SIGNED_16;
-          break;
-        case GST_AUDIO_FORMAT_S24:
-          encoding = MPG123_ENC_SIGNED_24;
-          break;
-        case GST_AUDIO_FORMAT_S32:
-          encoding = MPG123_ENC_SIGNED_32;
-          break;
-        case GST_AUDIO_FORMAT_U16:
-          encoding = MPG123_ENC_UNSIGNED_16;
-          break;
-        case GST_AUDIO_FORMAT_U24:
-          encoding = MPG123_ENC_UNSIGNED_24;
-          break;
-        case GST_AUDIO_FORMAT_U32:
-          encoding = MPG123_ENC_UNSIGNED_32;
-          break;
-        case GST_AUDIO_FORMAT_F32:
-          encoding = MPG123_ENC_FLOAT_32;
-          break;
-        default:
-          g_assert_not_reached ();
-          goto done;
-      }
-    }
-  }
-
-  /* Sample rate, number of channels, and sample format are known at this point.
-   * Set the audioinfo structure's values and the mpg123 format. */
-  {
-    int err;
-
-    /* clear all existing format settings from the mpg123 instance */
-    mpg123_format_none (mpg123_decoder->handle);
-    /* set the chosen format */
-    err =
-        mpg123_format (mpg123_decoder->handle, sample_rate, num_channels,
-        encoding);
-
-    if (err != MPG123_OK) {
-      GST_WARNING_OBJECT (dec,
-          "mpg123_format() failed: %s",
-          mpg123_strerror (mpg123_decoder->handle));
-    } else {
-      gst_audio_info_init (&(mpg123_decoder->next_audioinfo));
-      gst_audio_info_set_format (&(mpg123_decoder->next_audioinfo), format,
-          sample_rate, num_channels, NULL);
-      GST_LOG_OBJECT (dec, "The next audio format is: %s, %u Hz, %u channels",
-          gst_audio_format_to_string (format), sample_rate, num_channels);
-      mpg123_decoder->has_next_audioinfo = TRUE;
-
-      retval = TRUE;
-    }
-  }
-
-done:
-  return retval;
-}
-
-
-static void
-gst_mpg123_audio_dec_flush (GstAudioDecoder * dec, gboolean hard)
-{
-  int error;
-  GstMpg123AudioDec *mpg123_decoder;
-
-  GST_LOG_OBJECT (dec, "Flushing decoder");
-
-  mpg123_decoder = GST_MPG123_AUDIO_DEC (dec);
-
-  g_assert (mpg123_decoder->handle != NULL);
-
-  /* Flush by reopening the feed */
-  mpg123_close (mpg123_decoder->handle);
-  error = mpg123_open_feed (mpg123_decoder->handle);
-
-  if (G_UNLIKELY (error != MPG123_OK)) {
-    GST_ELEMENT_ERROR (dec, LIBRARY, INIT, (NULL),
-        ("Error while reopening mpg123 feed: %s",
-            mpg123_plain_strerror (error)));
-    mpg123_close (mpg123_decoder->handle);
-    mpg123_delete (mpg123_decoder->handle);
-    mpg123_decoder->handle = NULL;
-  }
-
-  if (hard)
-    mpg123_decoder->has_next_audioinfo = FALSE;
-
-  /* opening/closing feeds do not affect the format defined by the
-   * mpg123_format() call that was made in gst_mpg123_audio_dec_set_format(),
-   * and since the up/downstream caps are not expected to change here, no
-   * mpg123_format() calls are done */
-}
-
-static gboolean
-plugin_init (GstPlugin * plugin)
-{
-  return gst_element_register (plugin, "mpg123audiodec",
-      GST_RANK_MARGINAL, gst_mpg123_audio_dec_get_type ());
-}
-
-GST_PLUGIN_DEFINE (GST_VERSION_MAJOR,
-    GST_VERSION_MINOR,
-    mpg123, "mp3 decoding based on the mpg123 library",
-    plugin_init, VERSION, "LGPL", GST_PACKAGE_NAME, GST_PACKAGE_ORIGIN)
diff --git a/ext/mpg123/gstmpg123audiodec.h b/ext/mpg123/gstmpg123audiodec.h
deleted file mode 100644
index e837a56..0000000
--- a/ext/mpg123/gstmpg123audiodec.h
+++ /dev/null
@@ -1,62 +0,0 @@
-/*  MP3 decoding plugin for GStreamer using the mpg123 library
- *  Copyright (C) 2012 Carlos Rafael Giani
- *
- *  This library is free software; you can redistribute it and/or
- *  modify it under the terms of the GNU Lesser General Public
- *  License as published by the Free Software Foundation; either
- *  version 2.1 of the License, or (at your option) any later version.
- *
- *  This library is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- *  Lesser General Public License for more details.
- *
- *  You should have received a copy of the GNU Lesser General Public
- *  License along with this library; if not, write to the Free Software
- *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
- */
-
-#ifndef __GST_MPG123_AUDIO_DEC_H__
-#define __GST_MPG123_AUDIO_DEC_H__
-
-#include <gst/gst.h>
-#include <gst/audio/gstaudiodecoder.h>
-#include <mpg123.h>
-
-
-G_BEGIN_DECLS
-
-
-typedef struct _GstMpg123AudioDec GstMpg123AudioDec;
-typedef struct _GstMpg123AudioDecClass GstMpg123AudioDecClass;
-
-
-#define GST_TYPE_MPG123_AUDIO_DEC             (gst_mpg123_audio_dec_get_type())
-#define GST_MPG123_AUDIO_DEC(obj)             (G_TYPE_CHECK_INSTANCE_CAST((obj), GST_TYPE_MPG123_AUDIO_DEC,GstMpg123AudioDec))
-#define GST_MPG123_AUDIO_DEC_CLASS(klass)     (G_TYPE_CHECK_CLASS_CAST((klass), GST_TYPE_MPG123_AUDIO_DEC,GstMpg123AudioDecClass))
-#define GST_IS_MPG123_AUDIO_DEC(obj)          (G_TYPE_CHECK_INSTANCE_TYPE((obj), GST_TYPE_MPG123_AUDIO_DEC))
-#define GST_IS_MPG123_AUDIO_DEC_CLASS(klass)  (G_TYPE_CHECK_CLASS_TYPE((klass), GST_TYPE_MPG123_AUDIO_DEC))
-
-struct _GstMpg123AudioDec
-{
-  GstAudioDecoder parent;
-
-  mpg123_handle *handle;
-
-  GstAudioInfo next_audioinfo;
-  gboolean has_next_audioinfo;
-
-  off_t frame_offset;
-};
-
-
-struct _GstMpg123AudioDecClass
-{
-  GstAudioDecoderClass parent_class;
-};
-
-G_GNUC_INTERNAL GType gst_mpg123_audio_dec_get_type (void);
-
-G_END_DECLS
-
-#endif
diff --git a/ext/mplex/Makefile.in b/ext/mplex/Makefile.in
index a7cf8d5..b911580 100644
--- a/ext/mplex/Makefile.in
+++ b/ext/mplex/Makefile.in
@@ -116,16 +116,15 @@
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
 	$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
-	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gsettings.m4 \
-	$(top_srcdir)/m4/gst-fionread.m4 $(top_srcdir)/m4/gst-sdl.m4 \
-	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
-	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
-	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libgcrypt.m4 \
-	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
-	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
-	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
-	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
-	$(top_srcdir)/configure.ac
+	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gst-fionread.m4 \
+	$(top_srcdir)/m4/gst-sdl.m4 $(top_srcdir)/m4/iconv.m4 \
+	$(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \
+	$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
+	$(top_srcdir)/m4/libgcrypt.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
+	$(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \
@@ -278,6 +277,8 @@
 CLUTTER_X11_LIBS = @CLUTTER_X11_LIBS@
 CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
+CUDA_CFLAGS = @CUDA_CFLAGS@
+CUDA_LIBS = @CUDA_LIBS@
 CURL_CFLAGS = @CURL_CFLAGS@
 CURL_LIBS = @CURL_LIBS@
 CXX = @CXX@
@@ -315,6 +316,8 @@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
+EGL_CFLAGS = @EGL_CFLAGS@
+EGL_LIBS = @EGL_LIBS@
 EGREP = @EGREP@
 ERROR_CFLAGS = @ERROR_CFLAGS@
 ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
@@ -323,7 +326,6 @@
 EXIF_CFLAGS = @EXIF_CFLAGS@
 EXIF_LIBS = @EXIF_LIBS@
 FAAC_LIBS = @FAAC_LIBS@
-FAAD_IS_NEAAC = @FAAD_IS_NEAAC@
 FAAD_LIBS = @FAAD_LIBS@
 FFLAGS = @FFLAGS@
 FGREP = @FGREP@
@@ -342,8 +344,9 @@
 GIO_LIBS = @GIO_LIBS@
 GIO_UNIX_CFLAGS = @GIO_UNIX_CFLAGS@
 GIO_UNIX_LIBS = @GIO_UNIX_LIBS@
+GLES2_CFLAGS = @GLES2_CFLAGS@
+GLES2_LIBS = @GLES2_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
-GLIB_COMPILE_SCHEMAS = @GLIB_COMPILE_SCHEMAS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
@@ -360,16 +363,17 @@
 GMODULE_NO_EXPORT_LIBS = @GMODULE_NO_EXPORT_LIBS@
 GMSGFMT = @GMSGFMT@
 GMSGFMT_015 = @GMSGFMT_015@
+GNUSTL_CFLAGS = @GNUSTL_CFLAGS@
+GNUSTL_LIBS = @GNUSTL_LIBS@
 GRAPHENE_CFLAGS = @GRAPHENE_CFLAGS@
 GRAPHENE_LIBS = @GRAPHENE_LIBS@
 GREP = @GREP@
-GSETTINGS_CFLAGS = @GSETTINGS_CFLAGS@
-GSETTINGS_DISABLE_SCHEMAS_COMPILE = @GSETTINGS_DISABLE_SCHEMAS_COMPILE@
-GSETTINGS_LIBS = @GSETTINGS_LIBS@
 GSM_LIBS = @GSM_LIBS@
 GSTPB_PLUGINS_DIR = @GSTPB_PLUGINS_DIR@
 GSTPB_PREFIX = @GSTPB_PREFIX@
 GST_AGE = @GST_AGE@
+GST_ALLOCATORS_CFLAGS = @GST_ALLOCATORS_CFLAGS@
+GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
 GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
 GST_API_VERSION = @GST_API_VERSION@
 GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
@@ -395,6 +399,8 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PBUTILS_CFLAGS = @GST_PBUTILS_CFLAGS@
+GST_PBUTILS_LIBS = @GST_PBUTILS_LIBS@
 GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BAD_CFLAGS = @GST_PLUGINS_BAD_CFLAGS@
@@ -420,6 +426,8 @@
 GST_PREFIX = @GST_PREFIX@
 GST_REVISION = @GST_REVISION@
 GST_TOOLS_DIR = @GST_TOOLS_DIR@
+GST_VIDEO_CFLAGS = @GST_VIDEO_CFLAGS@
+GST_VIDEO_LIBS = @GST_VIDEO_LIBS@
 GTK3_CFLAGS = @GTK3_CFLAGS@
 GTK3_GL_CFLAGS = @GTK3_GL_CFLAGS@
 GTK3_GL_LIBS = @GTK3_GL_LIBS@
@@ -521,6 +529,7 @@
 LTLIBICONV = @LTLIBICONV@
 LTLIBINTL = @LTLIBINTL@
 LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
 MANIFEST_TOOL = @MANIFEST_TOOL@
@@ -534,8 +543,6 @@
 MODPLUG_LIBS = @MODPLUG_LIBS@
 MPEG2ENC_CFLAGS = @MPEG2ENC_CFLAGS@
 MPEG2ENC_LIBS = @MPEG2ENC_LIBS@
-MPG123_CFLAGS = @MPG123_CFLAGS@
-MPG123_LIBS = @MPG123_LIBS@
 MPLEX_CFLAGS = @MPLEX_CFLAGS@
 MPLEX_LDFLAGS = @MPLEX_LDFLAGS@
 MPLEX_LIBS = @MPLEX_LIBS@
@@ -551,6 +558,8 @@
 NETTLE_LIBS = @NETTLE_LIBS@
 NM = @NM@
 NMEDIT = @NMEDIT@
+NVENCODE_CFLAGS = @NVENCODE_CFLAGS@
+NVENCODE_LIBS = @NVENCODE_LIBS@
 OBJC = @OBJC@
 OBJCDEPMODE = @OBJCDEPMODE@
 OBJCFLAGS = @OBJCFLAGS@
@@ -608,16 +617,18 @@
 PYTHON_PLATFORM = @PYTHON_PLATFORM@
 PYTHON_PREFIX = @PYTHON_PREFIX@
 PYTHON_VERSION = @PYTHON_VERSION@
+QT_ANDROID_CFLAGS = @QT_ANDROID_CFLAGS@
+QT_ANDROID_LIBS = @QT_ANDROID_LIBS@
 QT_CFLAGS = @QT_CFLAGS@
 QT_LIBS = @QT_LIBS@
+QT_MAC_CFLAGS = @QT_MAC_CFLAGS@
+QT_MAC_LIBS = @QT_MAC_LIBS@
 QT_WAYLAND_CFLAGS = @QT_WAYLAND_CFLAGS@
 QT_WAYLAND_LIBS = @QT_WAYLAND_LIBS@
 QT_X11_CFLAGS = @QT_X11_CFLAGS@
 QT_X11_LIBS = @QT_X11_LIBS@
 RANLIB = @RANLIB@
 RCC = @RCC@
-RSVG_2_36_2_CFLAGS = @RSVG_2_36_2_CFLAGS@
-RSVG_2_36_2_LIBS = @RSVG_2_36_2_LIBS@
 RSVG_CFLAGS = @RSVG_CFLAGS@
 RSVG_LIBS = @RSVG_LIBS@
 RTMP_CFLAGS = @RTMP_CFLAGS@
@@ -669,6 +680,7 @@
 VOAACENC_LIBS = @VOAACENC_LIBS@
 VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
 VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VULKAN_LIBS = @VULKAN_LIBS@
 WARNING_CFLAGS = @WARNING_CFLAGS@
 WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
 WARNING_OBJCFLAGS = @WARNING_OBJCFLAGS@
@@ -679,6 +691,7 @@
 WAYLAND_LIBS = @WAYLAND_LIBS@
 WEBP_CFLAGS = @WEBP_CFLAGS@
 WEBP_LIBS = @WEBP_LIBS@
+WGET = @WGET@
 WILDMIDI_CFLAGS = @WILDMIDI_CFLAGS@
 WILDMIDI_LIBS = @WILDMIDI_LIBS@
 WINKS_LIBS = @WINKS_LIBS@
@@ -688,6 +701,8 @@
 X11_LIBS = @X11_LIBS@
 X265_CFLAGS = @X265_CFLAGS@
 X265_LIBS = @X265_LIBS@
+XCB_CFLAGS = @XCB_CFLAGS@
+XCB_LIBS = @XCB_LIBS@
 XCOMPOSITE_CFLAGS = @XCOMPOSITE_CFLAGS@
 XCOMPOSITE_LIBS = @XCOMPOSITE_LIBS@
 XGETTEXT = @XGETTEXT@
@@ -725,7 +740,6 @@
 docdir = @docdir@
 dvidir = @dvidir@
 exec_prefix = @exec_prefix@
-gsettingsschemadir = @gsettingsschemadir@
 host = @host@
 host_alias = @host_alias@
 host_cpu = @host_cpu@
diff --git a/ext/mplex/gstmplex.cc b/ext/mplex/gstmplex.cc
index b109d18..ae50bea 100644
--- a/ext/mplex/gstmplex.cc
+++ b/ext/mplex/gstmplex.cc
@@ -35,7 +35,7 @@
  * <refsect2>
  * <title>Example pipeline</title>
  * |[
- * gst-launch -v videotestsrc num-buffers=1000 ! mpeg2enc ! mplex ! filesink location=videotestsrc.mpg
+ * gst-launch-1.0 -v videotestsrc num-buffers=1000 ! mpeg2enc ! mplex ! filesink location=videotestsrc.mpg
  * ]| This example pipeline will encode a test video source to an
  * MPEG1 elementary stream and multiplexes this to an MPEG system stream.
  * <para>
diff --git a/ext/musepack/Makefile.in b/ext/musepack/Makefile.in
index 466ad3a..506cc5a 100644
--- a/ext/musepack/Makefile.in
+++ b/ext/musepack/Makefile.in
@@ -116,16 +116,15 @@
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
 	$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
-	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gsettings.m4 \
-	$(top_srcdir)/m4/gst-fionread.m4 $(top_srcdir)/m4/gst-sdl.m4 \
-	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
-	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
-	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libgcrypt.m4 \
-	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
-	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
-	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
-	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
-	$(top_srcdir)/configure.ac
+	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gst-fionread.m4 \
+	$(top_srcdir)/m4/gst-sdl.m4 $(top_srcdir)/m4/iconv.m4 \
+	$(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \
+	$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
+	$(top_srcdir)/m4/libgcrypt.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
+	$(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \
@@ -275,6 +274,8 @@
 CLUTTER_X11_LIBS = @CLUTTER_X11_LIBS@
 CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
+CUDA_CFLAGS = @CUDA_CFLAGS@
+CUDA_LIBS = @CUDA_LIBS@
 CURL_CFLAGS = @CURL_CFLAGS@
 CURL_LIBS = @CURL_LIBS@
 CXX = @CXX@
@@ -312,6 +313,8 @@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
+EGL_CFLAGS = @EGL_CFLAGS@
+EGL_LIBS = @EGL_LIBS@
 EGREP = @EGREP@
 ERROR_CFLAGS = @ERROR_CFLAGS@
 ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
@@ -320,7 +323,6 @@
 EXIF_CFLAGS = @EXIF_CFLAGS@
 EXIF_LIBS = @EXIF_LIBS@
 FAAC_LIBS = @FAAC_LIBS@
-FAAD_IS_NEAAC = @FAAD_IS_NEAAC@
 FAAD_LIBS = @FAAD_LIBS@
 FFLAGS = @FFLAGS@
 FGREP = @FGREP@
@@ -339,8 +341,9 @@
 GIO_LIBS = @GIO_LIBS@
 GIO_UNIX_CFLAGS = @GIO_UNIX_CFLAGS@
 GIO_UNIX_LIBS = @GIO_UNIX_LIBS@
+GLES2_CFLAGS = @GLES2_CFLAGS@
+GLES2_LIBS = @GLES2_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
-GLIB_COMPILE_SCHEMAS = @GLIB_COMPILE_SCHEMAS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
@@ -357,16 +360,17 @@
 GMODULE_NO_EXPORT_LIBS = @GMODULE_NO_EXPORT_LIBS@
 GMSGFMT = @GMSGFMT@
 GMSGFMT_015 = @GMSGFMT_015@
+GNUSTL_CFLAGS = @GNUSTL_CFLAGS@
+GNUSTL_LIBS = @GNUSTL_LIBS@
 GRAPHENE_CFLAGS = @GRAPHENE_CFLAGS@
 GRAPHENE_LIBS = @GRAPHENE_LIBS@
 GREP = @GREP@
-GSETTINGS_CFLAGS = @GSETTINGS_CFLAGS@
-GSETTINGS_DISABLE_SCHEMAS_COMPILE = @GSETTINGS_DISABLE_SCHEMAS_COMPILE@
-GSETTINGS_LIBS = @GSETTINGS_LIBS@
 GSM_LIBS = @GSM_LIBS@
 GSTPB_PLUGINS_DIR = @GSTPB_PLUGINS_DIR@
 GSTPB_PREFIX = @GSTPB_PREFIX@
 GST_AGE = @GST_AGE@
+GST_ALLOCATORS_CFLAGS = @GST_ALLOCATORS_CFLAGS@
+GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
 GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
 GST_API_VERSION = @GST_API_VERSION@
 GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
@@ -392,6 +396,8 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PBUTILS_CFLAGS = @GST_PBUTILS_CFLAGS@
+GST_PBUTILS_LIBS = @GST_PBUTILS_LIBS@
 GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BAD_CFLAGS = @GST_PLUGINS_BAD_CFLAGS@
@@ -417,6 +423,8 @@
 GST_PREFIX = @GST_PREFIX@
 GST_REVISION = @GST_REVISION@
 GST_TOOLS_DIR = @GST_TOOLS_DIR@
+GST_VIDEO_CFLAGS = @GST_VIDEO_CFLAGS@
+GST_VIDEO_LIBS = @GST_VIDEO_LIBS@
 GTK3_CFLAGS = @GTK3_CFLAGS@
 GTK3_GL_CFLAGS = @GTK3_GL_CFLAGS@
 GTK3_GL_LIBS = @GTK3_GL_LIBS@
@@ -518,6 +526,7 @@
 LTLIBICONV = @LTLIBICONV@
 LTLIBINTL = @LTLIBINTL@
 LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
 MANIFEST_TOOL = @MANIFEST_TOOL@
@@ -531,8 +540,6 @@
 MODPLUG_LIBS = @MODPLUG_LIBS@
 MPEG2ENC_CFLAGS = @MPEG2ENC_CFLAGS@
 MPEG2ENC_LIBS = @MPEG2ENC_LIBS@
-MPG123_CFLAGS = @MPG123_CFLAGS@
-MPG123_LIBS = @MPG123_LIBS@
 MPLEX_CFLAGS = @MPLEX_CFLAGS@
 MPLEX_LDFLAGS = @MPLEX_LDFLAGS@
 MPLEX_LIBS = @MPLEX_LIBS@
@@ -548,6 +555,8 @@
 NETTLE_LIBS = @NETTLE_LIBS@
 NM = @NM@
 NMEDIT = @NMEDIT@
+NVENCODE_CFLAGS = @NVENCODE_CFLAGS@
+NVENCODE_LIBS = @NVENCODE_LIBS@
 OBJC = @OBJC@
 OBJCDEPMODE = @OBJCDEPMODE@
 OBJCFLAGS = @OBJCFLAGS@
@@ -605,16 +614,18 @@
 PYTHON_PLATFORM = @PYTHON_PLATFORM@
 PYTHON_PREFIX = @PYTHON_PREFIX@
 PYTHON_VERSION = @PYTHON_VERSION@
+QT_ANDROID_CFLAGS = @QT_ANDROID_CFLAGS@
+QT_ANDROID_LIBS = @QT_ANDROID_LIBS@
 QT_CFLAGS = @QT_CFLAGS@
 QT_LIBS = @QT_LIBS@
+QT_MAC_CFLAGS = @QT_MAC_CFLAGS@
+QT_MAC_LIBS = @QT_MAC_LIBS@
 QT_WAYLAND_CFLAGS = @QT_WAYLAND_CFLAGS@
 QT_WAYLAND_LIBS = @QT_WAYLAND_LIBS@
 QT_X11_CFLAGS = @QT_X11_CFLAGS@
 QT_X11_LIBS = @QT_X11_LIBS@
 RANLIB = @RANLIB@
 RCC = @RCC@
-RSVG_2_36_2_CFLAGS = @RSVG_2_36_2_CFLAGS@
-RSVG_2_36_2_LIBS = @RSVG_2_36_2_LIBS@
 RSVG_CFLAGS = @RSVG_CFLAGS@
 RSVG_LIBS = @RSVG_LIBS@
 RTMP_CFLAGS = @RTMP_CFLAGS@
@@ -666,6 +677,7 @@
 VOAACENC_LIBS = @VOAACENC_LIBS@
 VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
 VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VULKAN_LIBS = @VULKAN_LIBS@
 WARNING_CFLAGS = @WARNING_CFLAGS@
 WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
 WARNING_OBJCFLAGS = @WARNING_OBJCFLAGS@
@@ -676,6 +688,7 @@
 WAYLAND_LIBS = @WAYLAND_LIBS@
 WEBP_CFLAGS = @WEBP_CFLAGS@
 WEBP_LIBS = @WEBP_LIBS@
+WGET = @WGET@
 WILDMIDI_CFLAGS = @WILDMIDI_CFLAGS@
 WILDMIDI_LIBS = @WILDMIDI_LIBS@
 WINKS_LIBS = @WINKS_LIBS@
@@ -685,6 +698,8 @@
 X11_LIBS = @X11_LIBS@
 X265_CFLAGS = @X265_CFLAGS@
 X265_LIBS = @X265_LIBS@
+XCB_CFLAGS = @XCB_CFLAGS@
+XCB_LIBS = @XCB_LIBS@
 XCOMPOSITE_CFLAGS = @XCOMPOSITE_CFLAGS@
 XCOMPOSITE_LIBS = @XCOMPOSITE_LIBS@
 XGETTEXT = @XGETTEXT@
@@ -722,7 +737,6 @@
 docdir = @docdir@
 dvidir = @dvidir@
 exec_prefix = @exec_prefix@
-gsettingsschemadir = @gsettingsschemadir@
 host = @host@
 host_alias = @host_alias@
 host_cpu = @host_cpu@
diff --git a/ext/nas/Makefile.in b/ext/nas/Makefile.in
index 48706dd..99a1ec1 100644
--- a/ext/nas/Makefile.in
+++ b/ext/nas/Makefile.in
@@ -116,16 +116,15 @@
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
 	$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
-	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gsettings.m4 \
-	$(top_srcdir)/m4/gst-fionread.m4 $(top_srcdir)/m4/gst-sdl.m4 \
-	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
-	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
-	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libgcrypt.m4 \
-	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
-	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
-	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
-	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
-	$(top_srcdir)/configure.ac
+	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gst-fionread.m4 \
+	$(top_srcdir)/m4/gst-sdl.m4 $(top_srcdir)/m4/iconv.m4 \
+	$(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \
+	$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
+	$(top_srcdir)/m4/libgcrypt.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
+	$(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \
@@ -274,6 +273,8 @@
 CLUTTER_X11_LIBS = @CLUTTER_X11_LIBS@
 CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
+CUDA_CFLAGS = @CUDA_CFLAGS@
+CUDA_LIBS = @CUDA_LIBS@
 CURL_CFLAGS = @CURL_CFLAGS@
 CURL_LIBS = @CURL_LIBS@
 CXX = @CXX@
@@ -311,6 +312,8 @@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
+EGL_CFLAGS = @EGL_CFLAGS@
+EGL_LIBS = @EGL_LIBS@
 EGREP = @EGREP@
 ERROR_CFLAGS = @ERROR_CFLAGS@
 ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
@@ -319,7 +322,6 @@
 EXIF_CFLAGS = @EXIF_CFLAGS@
 EXIF_LIBS = @EXIF_LIBS@
 FAAC_LIBS = @FAAC_LIBS@
-FAAD_IS_NEAAC = @FAAD_IS_NEAAC@
 FAAD_LIBS = @FAAD_LIBS@
 FFLAGS = @FFLAGS@
 FGREP = @FGREP@
@@ -338,8 +340,9 @@
 GIO_LIBS = @GIO_LIBS@
 GIO_UNIX_CFLAGS = @GIO_UNIX_CFLAGS@
 GIO_UNIX_LIBS = @GIO_UNIX_LIBS@
+GLES2_CFLAGS = @GLES2_CFLAGS@
+GLES2_LIBS = @GLES2_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
-GLIB_COMPILE_SCHEMAS = @GLIB_COMPILE_SCHEMAS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
@@ -356,16 +359,17 @@
 GMODULE_NO_EXPORT_LIBS = @GMODULE_NO_EXPORT_LIBS@
 GMSGFMT = @GMSGFMT@
 GMSGFMT_015 = @GMSGFMT_015@
+GNUSTL_CFLAGS = @GNUSTL_CFLAGS@
+GNUSTL_LIBS = @GNUSTL_LIBS@
 GRAPHENE_CFLAGS = @GRAPHENE_CFLAGS@
 GRAPHENE_LIBS = @GRAPHENE_LIBS@
 GREP = @GREP@
-GSETTINGS_CFLAGS = @GSETTINGS_CFLAGS@
-GSETTINGS_DISABLE_SCHEMAS_COMPILE = @GSETTINGS_DISABLE_SCHEMAS_COMPILE@
-GSETTINGS_LIBS = @GSETTINGS_LIBS@
 GSM_LIBS = @GSM_LIBS@
 GSTPB_PLUGINS_DIR = @GSTPB_PLUGINS_DIR@
 GSTPB_PREFIX = @GSTPB_PREFIX@
 GST_AGE = @GST_AGE@
+GST_ALLOCATORS_CFLAGS = @GST_ALLOCATORS_CFLAGS@
+GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
 GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
 GST_API_VERSION = @GST_API_VERSION@
 GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
@@ -391,6 +395,8 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PBUTILS_CFLAGS = @GST_PBUTILS_CFLAGS@
+GST_PBUTILS_LIBS = @GST_PBUTILS_LIBS@
 GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BAD_CFLAGS = @GST_PLUGINS_BAD_CFLAGS@
@@ -416,6 +422,8 @@
 GST_PREFIX = @GST_PREFIX@
 GST_REVISION = @GST_REVISION@
 GST_TOOLS_DIR = @GST_TOOLS_DIR@
+GST_VIDEO_CFLAGS = @GST_VIDEO_CFLAGS@
+GST_VIDEO_LIBS = @GST_VIDEO_LIBS@
 GTK3_CFLAGS = @GTK3_CFLAGS@
 GTK3_GL_CFLAGS = @GTK3_GL_CFLAGS@
 GTK3_GL_LIBS = @GTK3_GL_LIBS@
@@ -517,6 +525,7 @@
 LTLIBICONV = @LTLIBICONV@
 LTLIBINTL = @LTLIBINTL@
 LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
 MANIFEST_TOOL = @MANIFEST_TOOL@
@@ -530,8 +539,6 @@
 MODPLUG_LIBS = @MODPLUG_LIBS@
 MPEG2ENC_CFLAGS = @MPEG2ENC_CFLAGS@
 MPEG2ENC_LIBS = @MPEG2ENC_LIBS@
-MPG123_CFLAGS = @MPG123_CFLAGS@
-MPG123_LIBS = @MPG123_LIBS@
 MPLEX_CFLAGS = @MPLEX_CFLAGS@
 MPLEX_LDFLAGS = @MPLEX_LDFLAGS@
 MPLEX_LIBS = @MPLEX_LIBS@
@@ -547,6 +554,8 @@
 NETTLE_LIBS = @NETTLE_LIBS@
 NM = @NM@
 NMEDIT = @NMEDIT@
+NVENCODE_CFLAGS = @NVENCODE_CFLAGS@
+NVENCODE_LIBS = @NVENCODE_LIBS@
 OBJC = @OBJC@
 OBJCDEPMODE = @OBJCDEPMODE@
 OBJCFLAGS = @OBJCFLAGS@
@@ -604,16 +613,18 @@
 PYTHON_PLATFORM = @PYTHON_PLATFORM@
 PYTHON_PREFIX = @PYTHON_PREFIX@
 PYTHON_VERSION = @PYTHON_VERSION@
+QT_ANDROID_CFLAGS = @QT_ANDROID_CFLAGS@
+QT_ANDROID_LIBS = @QT_ANDROID_LIBS@
 QT_CFLAGS = @QT_CFLAGS@
 QT_LIBS = @QT_LIBS@
+QT_MAC_CFLAGS = @QT_MAC_CFLAGS@
+QT_MAC_LIBS = @QT_MAC_LIBS@
 QT_WAYLAND_CFLAGS = @QT_WAYLAND_CFLAGS@
 QT_WAYLAND_LIBS = @QT_WAYLAND_LIBS@
 QT_X11_CFLAGS = @QT_X11_CFLAGS@
 QT_X11_LIBS = @QT_X11_LIBS@
 RANLIB = @RANLIB@
 RCC = @RCC@
-RSVG_2_36_2_CFLAGS = @RSVG_2_36_2_CFLAGS@
-RSVG_2_36_2_LIBS = @RSVG_2_36_2_LIBS@
 RSVG_CFLAGS = @RSVG_CFLAGS@
 RSVG_LIBS = @RSVG_LIBS@
 RTMP_CFLAGS = @RTMP_CFLAGS@
@@ -665,6 +676,7 @@
 VOAACENC_LIBS = @VOAACENC_LIBS@
 VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
 VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VULKAN_LIBS = @VULKAN_LIBS@
 WARNING_CFLAGS = @WARNING_CFLAGS@
 WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
 WARNING_OBJCFLAGS = @WARNING_OBJCFLAGS@
@@ -675,6 +687,7 @@
 WAYLAND_LIBS = @WAYLAND_LIBS@
 WEBP_CFLAGS = @WEBP_CFLAGS@
 WEBP_LIBS = @WEBP_LIBS@
+WGET = @WGET@
 WILDMIDI_CFLAGS = @WILDMIDI_CFLAGS@
 WILDMIDI_LIBS = @WILDMIDI_LIBS@
 WINKS_LIBS = @WINKS_LIBS@
@@ -684,6 +697,8 @@
 X11_LIBS = @X11_LIBS@
 X265_CFLAGS = @X265_CFLAGS@
 X265_LIBS = @X265_LIBS@
+XCB_CFLAGS = @XCB_CFLAGS@
+XCB_LIBS = @XCB_LIBS@
 XCOMPOSITE_CFLAGS = @XCOMPOSITE_CFLAGS@
 XCOMPOSITE_LIBS = @XCOMPOSITE_LIBS@
 XGETTEXT = @XGETTEXT@
@@ -721,7 +736,6 @@
 docdir = @docdir@
 dvidir = @dvidir@
 exec_prefix = @exec_prefix@
-gsettingsschemadir = @gsettingsschemadir@
 host = @host@
 host_alias = @host_alias@
 host_cpu = @host_cpu@
diff --git a/ext/neon/Makefile.in b/ext/neon/Makefile.in
index 80b7331..d597c2f 100644
--- a/ext/neon/Makefile.in
+++ b/ext/neon/Makefile.in
@@ -116,16 +116,15 @@
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
 	$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
-	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gsettings.m4 \
-	$(top_srcdir)/m4/gst-fionread.m4 $(top_srcdir)/m4/gst-sdl.m4 \
-	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
-	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
-	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libgcrypt.m4 \
-	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
-	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
-	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
-	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
-	$(top_srcdir)/configure.ac
+	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gst-fionread.m4 \
+	$(top_srcdir)/m4/gst-sdl.m4 $(top_srcdir)/m4/iconv.m4 \
+	$(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \
+	$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
+	$(top_srcdir)/m4/libgcrypt.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
+	$(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \
@@ -275,6 +274,8 @@
 CLUTTER_X11_LIBS = @CLUTTER_X11_LIBS@
 CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
+CUDA_CFLAGS = @CUDA_CFLAGS@
+CUDA_LIBS = @CUDA_LIBS@
 CURL_CFLAGS = @CURL_CFLAGS@
 CURL_LIBS = @CURL_LIBS@
 CXX = @CXX@
@@ -312,6 +313,8 @@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
+EGL_CFLAGS = @EGL_CFLAGS@
+EGL_LIBS = @EGL_LIBS@
 EGREP = @EGREP@
 ERROR_CFLAGS = @ERROR_CFLAGS@
 ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
@@ -320,7 +323,6 @@
 EXIF_CFLAGS = @EXIF_CFLAGS@
 EXIF_LIBS = @EXIF_LIBS@
 FAAC_LIBS = @FAAC_LIBS@
-FAAD_IS_NEAAC = @FAAD_IS_NEAAC@
 FAAD_LIBS = @FAAD_LIBS@
 FFLAGS = @FFLAGS@
 FGREP = @FGREP@
@@ -339,8 +341,9 @@
 GIO_LIBS = @GIO_LIBS@
 GIO_UNIX_CFLAGS = @GIO_UNIX_CFLAGS@
 GIO_UNIX_LIBS = @GIO_UNIX_LIBS@
+GLES2_CFLAGS = @GLES2_CFLAGS@
+GLES2_LIBS = @GLES2_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
-GLIB_COMPILE_SCHEMAS = @GLIB_COMPILE_SCHEMAS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
@@ -357,16 +360,17 @@
 GMODULE_NO_EXPORT_LIBS = @GMODULE_NO_EXPORT_LIBS@
 GMSGFMT = @GMSGFMT@
 GMSGFMT_015 = @GMSGFMT_015@
+GNUSTL_CFLAGS = @GNUSTL_CFLAGS@
+GNUSTL_LIBS = @GNUSTL_LIBS@
 GRAPHENE_CFLAGS = @GRAPHENE_CFLAGS@
 GRAPHENE_LIBS = @GRAPHENE_LIBS@
 GREP = @GREP@
-GSETTINGS_CFLAGS = @GSETTINGS_CFLAGS@
-GSETTINGS_DISABLE_SCHEMAS_COMPILE = @GSETTINGS_DISABLE_SCHEMAS_COMPILE@
-GSETTINGS_LIBS = @GSETTINGS_LIBS@
 GSM_LIBS = @GSM_LIBS@
 GSTPB_PLUGINS_DIR = @GSTPB_PLUGINS_DIR@
 GSTPB_PREFIX = @GSTPB_PREFIX@
 GST_AGE = @GST_AGE@
+GST_ALLOCATORS_CFLAGS = @GST_ALLOCATORS_CFLAGS@
+GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
 GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
 GST_API_VERSION = @GST_API_VERSION@
 GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
@@ -392,6 +396,8 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PBUTILS_CFLAGS = @GST_PBUTILS_CFLAGS@
+GST_PBUTILS_LIBS = @GST_PBUTILS_LIBS@
 GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BAD_CFLAGS = @GST_PLUGINS_BAD_CFLAGS@
@@ -417,6 +423,8 @@
 GST_PREFIX = @GST_PREFIX@
 GST_REVISION = @GST_REVISION@
 GST_TOOLS_DIR = @GST_TOOLS_DIR@
+GST_VIDEO_CFLAGS = @GST_VIDEO_CFLAGS@
+GST_VIDEO_LIBS = @GST_VIDEO_LIBS@
 GTK3_CFLAGS = @GTK3_CFLAGS@
 GTK3_GL_CFLAGS = @GTK3_GL_CFLAGS@
 GTK3_GL_LIBS = @GTK3_GL_LIBS@
@@ -518,6 +526,7 @@
 LTLIBICONV = @LTLIBICONV@
 LTLIBINTL = @LTLIBINTL@
 LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
 MANIFEST_TOOL = @MANIFEST_TOOL@
@@ -531,8 +540,6 @@
 MODPLUG_LIBS = @MODPLUG_LIBS@
 MPEG2ENC_CFLAGS = @MPEG2ENC_CFLAGS@
 MPEG2ENC_LIBS = @MPEG2ENC_LIBS@
-MPG123_CFLAGS = @MPG123_CFLAGS@
-MPG123_LIBS = @MPG123_LIBS@
 MPLEX_CFLAGS = @MPLEX_CFLAGS@
 MPLEX_LDFLAGS = @MPLEX_LDFLAGS@
 MPLEX_LIBS = @MPLEX_LIBS@
@@ -548,6 +555,8 @@
 NETTLE_LIBS = @NETTLE_LIBS@
 NM = @NM@
 NMEDIT = @NMEDIT@
+NVENCODE_CFLAGS = @NVENCODE_CFLAGS@
+NVENCODE_LIBS = @NVENCODE_LIBS@
 OBJC = @OBJC@
 OBJCDEPMODE = @OBJCDEPMODE@
 OBJCFLAGS = @OBJCFLAGS@
@@ -605,16 +614,18 @@
 PYTHON_PLATFORM = @PYTHON_PLATFORM@
 PYTHON_PREFIX = @PYTHON_PREFIX@
 PYTHON_VERSION = @PYTHON_VERSION@
+QT_ANDROID_CFLAGS = @QT_ANDROID_CFLAGS@
+QT_ANDROID_LIBS = @QT_ANDROID_LIBS@
 QT_CFLAGS = @QT_CFLAGS@
 QT_LIBS = @QT_LIBS@
+QT_MAC_CFLAGS = @QT_MAC_CFLAGS@
+QT_MAC_LIBS = @QT_MAC_LIBS@
 QT_WAYLAND_CFLAGS = @QT_WAYLAND_CFLAGS@
 QT_WAYLAND_LIBS = @QT_WAYLAND_LIBS@
 QT_X11_CFLAGS = @QT_X11_CFLAGS@
 QT_X11_LIBS = @QT_X11_LIBS@
 RANLIB = @RANLIB@
 RCC = @RCC@
-RSVG_2_36_2_CFLAGS = @RSVG_2_36_2_CFLAGS@
-RSVG_2_36_2_LIBS = @RSVG_2_36_2_LIBS@
 RSVG_CFLAGS = @RSVG_CFLAGS@
 RSVG_LIBS = @RSVG_LIBS@
 RTMP_CFLAGS = @RTMP_CFLAGS@
@@ -666,6 +677,7 @@
 VOAACENC_LIBS = @VOAACENC_LIBS@
 VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
 VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VULKAN_LIBS = @VULKAN_LIBS@
 WARNING_CFLAGS = @WARNING_CFLAGS@
 WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
 WARNING_OBJCFLAGS = @WARNING_OBJCFLAGS@
@@ -676,6 +688,7 @@
 WAYLAND_LIBS = @WAYLAND_LIBS@
 WEBP_CFLAGS = @WEBP_CFLAGS@
 WEBP_LIBS = @WEBP_LIBS@
+WGET = @WGET@
 WILDMIDI_CFLAGS = @WILDMIDI_CFLAGS@
 WILDMIDI_LIBS = @WILDMIDI_LIBS@
 WINKS_LIBS = @WINKS_LIBS@
@@ -685,6 +698,8 @@
 X11_LIBS = @X11_LIBS@
 X265_CFLAGS = @X265_CFLAGS@
 X265_LIBS = @X265_LIBS@
+XCB_CFLAGS = @XCB_CFLAGS@
+XCB_LIBS = @XCB_LIBS@
 XCOMPOSITE_CFLAGS = @XCOMPOSITE_CFLAGS@
 XCOMPOSITE_LIBS = @XCOMPOSITE_LIBS@
 XGETTEXT = @XGETTEXT@
@@ -722,7 +737,6 @@
 docdir = @docdir@
 dvidir = @dvidir@
 exec_prefix = @exec_prefix@
-gsettingsschemadir = @gsettingsschemadir@
 host = @host@
 host_alias = @host_alias@
 host_cpu = @host_cpu@
diff --git a/ext/neon/gstneonhttpsrc.c b/ext/neon/gstneonhttpsrc.c
index e20b509..8a4ff0d 100644
--- a/ext/neon/gstneonhttpsrc.c
+++ b/ext/neon/gstneonhttpsrc.c
@@ -321,8 +321,7 @@
       break;
     }
     case PROP_USER_AGENT:
-      if (src->user_agent)
-        g_free (src->user_agent);
+      g_free (src->user_agent);
       src->user_agent = g_strdup (g_value_get_string (value));
       break;
     case PROP_COOKIES:
diff --git a/ext/ofa/Makefile.in b/ext/ofa/Makefile.in
index a67de80..43b490e 100644
--- a/ext/ofa/Makefile.in
+++ b/ext/ofa/Makefile.in
@@ -116,16 +116,15 @@
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
 	$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
-	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gsettings.m4 \
-	$(top_srcdir)/m4/gst-fionread.m4 $(top_srcdir)/m4/gst-sdl.m4 \
-	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
-	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
-	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libgcrypt.m4 \
-	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
-	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
-	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
-	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
-	$(top_srcdir)/configure.ac
+	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gst-fionread.m4 \
+	$(top_srcdir)/m4/gst-sdl.m4 $(top_srcdir)/m4/iconv.m4 \
+	$(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \
+	$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
+	$(top_srcdir)/m4/libgcrypt.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
+	$(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \
@@ -275,6 +274,8 @@
 CLUTTER_X11_LIBS = @CLUTTER_X11_LIBS@
 CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
+CUDA_CFLAGS = @CUDA_CFLAGS@
+CUDA_LIBS = @CUDA_LIBS@
 CURL_CFLAGS = @CURL_CFLAGS@
 CURL_LIBS = @CURL_LIBS@
 CXX = @CXX@
@@ -312,6 +313,8 @@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
+EGL_CFLAGS = @EGL_CFLAGS@
+EGL_LIBS = @EGL_LIBS@
 EGREP = @EGREP@
 ERROR_CFLAGS = @ERROR_CFLAGS@
 ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
@@ -320,7 +323,6 @@
 EXIF_CFLAGS = @EXIF_CFLAGS@
 EXIF_LIBS = @EXIF_LIBS@
 FAAC_LIBS = @FAAC_LIBS@
-FAAD_IS_NEAAC = @FAAD_IS_NEAAC@
 FAAD_LIBS = @FAAD_LIBS@
 FFLAGS = @FFLAGS@
 FGREP = @FGREP@
@@ -339,8 +341,9 @@
 GIO_LIBS = @GIO_LIBS@
 GIO_UNIX_CFLAGS = @GIO_UNIX_CFLAGS@
 GIO_UNIX_LIBS = @GIO_UNIX_LIBS@
+GLES2_CFLAGS = @GLES2_CFLAGS@
+GLES2_LIBS = @GLES2_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
-GLIB_COMPILE_SCHEMAS = @GLIB_COMPILE_SCHEMAS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
@@ -357,16 +360,17 @@
 GMODULE_NO_EXPORT_LIBS = @GMODULE_NO_EXPORT_LIBS@
 GMSGFMT = @GMSGFMT@
 GMSGFMT_015 = @GMSGFMT_015@
+GNUSTL_CFLAGS = @GNUSTL_CFLAGS@
+GNUSTL_LIBS = @GNUSTL_LIBS@
 GRAPHENE_CFLAGS = @GRAPHENE_CFLAGS@
 GRAPHENE_LIBS = @GRAPHENE_LIBS@
 GREP = @GREP@
-GSETTINGS_CFLAGS = @GSETTINGS_CFLAGS@
-GSETTINGS_DISABLE_SCHEMAS_COMPILE = @GSETTINGS_DISABLE_SCHEMAS_COMPILE@
-GSETTINGS_LIBS = @GSETTINGS_LIBS@
 GSM_LIBS = @GSM_LIBS@
 GSTPB_PLUGINS_DIR = @GSTPB_PLUGINS_DIR@
 GSTPB_PREFIX = @GSTPB_PREFIX@
 GST_AGE = @GST_AGE@
+GST_ALLOCATORS_CFLAGS = @GST_ALLOCATORS_CFLAGS@
+GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
 GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
 GST_API_VERSION = @GST_API_VERSION@
 GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
@@ -392,6 +396,8 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PBUTILS_CFLAGS = @GST_PBUTILS_CFLAGS@
+GST_PBUTILS_LIBS = @GST_PBUTILS_LIBS@
 GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BAD_CFLAGS = @GST_PLUGINS_BAD_CFLAGS@
@@ -417,6 +423,8 @@
 GST_PREFIX = @GST_PREFIX@
 GST_REVISION = @GST_REVISION@
 GST_TOOLS_DIR = @GST_TOOLS_DIR@
+GST_VIDEO_CFLAGS = @GST_VIDEO_CFLAGS@
+GST_VIDEO_LIBS = @GST_VIDEO_LIBS@
 GTK3_CFLAGS = @GTK3_CFLAGS@
 GTK3_GL_CFLAGS = @GTK3_GL_CFLAGS@
 GTK3_GL_LIBS = @GTK3_GL_LIBS@
@@ -518,6 +526,7 @@
 LTLIBICONV = @LTLIBICONV@
 LTLIBINTL = @LTLIBINTL@
 LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
 MANIFEST_TOOL = @MANIFEST_TOOL@
@@ -531,8 +540,6 @@
 MODPLUG_LIBS = @MODPLUG_LIBS@
 MPEG2ENC_CFLAGS = @MPEG2ENC_CFLAGS@
 MPEG2ENC_LIBS = @MPEG2ENC_LIBS@
-MPG123_CFLAGS = @MPG123_CFLAGS@
-MPG123_LIBS = @MPG123_LIBS@
 MPLEX_CFLAGS = @MPLEX_CFLAGS@
 MPLEX_LDFLAGS = @MPLEX_LDFLAGS@
 MPLEX_LIBS = @MPLEX_LIBS@
@@ -548,6 +555,8 @@
 NETTLE_LIBS = @NETTLE_LIBS@
 NM = @NM@
 NMEDIT = @NMEDIT@
+NVENCODE_CFLAGS = @NVENCODE_CFLAGS@
+NVENCODE_LIBS = @NVENCODE_LIBS@
 OBJC = @OBJC@
 OBJCDEPMODE = @OBJCDEPMODE@
 OBJCFLAGS = @OBJCFLAGS@
@@ -605,16 +614,18 @@
 PYTHON_PLATFORM = @PYTHON_PLATFORM@
 PYTHON_PREFIX = @PYTHON_PREFIX@
 PYTHON_VERSION = @PYTHON_VERSION@
+QT_ANDROID_CFLAGS = @QT_ANDROID_CFLAGS@
+QT_ANDROID_LIBS = @QT_ANDROID_LIBS@
 QT_CFLAGS = @QT_CFLAGS@
 QT_LIBS = @QT_LIBS@
+QT_MAC_CFLAGS = @QT_MAC_CFLAGS@
+QT_MAC_LIBS = @QT_MAC_LIBS@
 QT_WAYLAND_CFLAGS = @QT_WAYLAND_CFLAGS@
 QT_WAYLAND_LIBS = @QT_WAYLAND_LIBS@
 QT_X11_CFLAGS = @QT_X11_CFLAGS@
 QT_X11_LIBS = @QT_X11_LIBS@
 RANLIB = @RANLIB@
 RCC = @RCC@
-RSVG_2_36_2_CFLAGS = @RSVG_2_36_2_CFLAGS@
-RSVG_2_36_2_LIBS = @RSVG_2_36_2_LIBS@
 RSVG_CFLAGS = @RSVG_CFLAGS@
 RSVG_LIBS = @RSVG_LIBS@
 RTMP_CFLAGS = @RTMP_CFLAGS@
@@ -666,6 +677,7 @@
 VOAACENC_LIBS = @VOAACENC_LIBS@
 VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
 VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VULKAN_LIBS = @VULKAN_LIBS@
 WARNING_CFLAGS = @WARNING_CFLAGS@
 WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
 WARNING_OBJCFLAGS = @WARNING_OBJCFLAGS@
@@ -676,6 +688,7 @@
 WAYLAND_LIBS = @WAYLAND_LIBS@
 WEBP_CFLAGS = @WEBP_CFLAGS@
 WEBP_LIBS = @WEBP_LIBS@
+WGET = @WGET@
 WILDMIDI_CFLAGS = @WILDMIDI_CFLAGS@
 WILDMIDI_LIBS = @WILDMIDI_LIBS@
 WINKS_LIBS = @WINKS_LIBS@
@@ -685,6 +698,8 @@
 X11_LIBS = @X11_LIBS@
 X265_CFLAGS = @X265_CFLAGS@
 X265_LIBS = @X265_LIBS@
+XCB_CFLAGS = @XCB_CFLAGS@
+XCB_LIBS = @XCB_LIBS@
 XCOMPOSITE_CFLAGS = @XCOMPOSITE_CFLAGS@
 XCOMPOSITE_LIBS = @XCOMPOSITE_LIBS@
 XGETTEXT = @XGETTEXT@
@@ -722,7 +737,6 @@
 docdir = @docdir@
 dvidir = @dvidir@
 exec_prefix = @exec_prefix@
-gsettingsschemadir = @gsettingsschemadir@
 host = @host@
 host_alias = @host_alias@
 host_cpu = @host_cpu@
diff --git a/ext/openal/Makefile.in b/ext/openal/Makefile.in
index 3bf3b97..ac0003f 100644
--- a/ext/openal/Makefile.in
+++ b/ext/openal/Makefile.in
@@ -118,16 +118,15 @@
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
 	$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
-	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gsettings.m4 \
-	$(top_srcdir)/m4/gst-fionread.m4 $(top_srcdir)/m4/gst-sdl.m4 \
-	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
-	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
-	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libgcrypt.m4 \
-	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
-	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
-	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
-	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
-	$(top_srcdir)/configure.ac
+	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gst-fionread.m4 \
+	$(top_srcdir)/m4/gst-sdl.m4 $(top_srcdir)/m4/iconv.m4 \
+	$(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \
+	$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
+	$(top_srcdir)/m4/libgcrypt.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
+	$(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \
@@ -279,6 +278,8 @@
 CLUTTER_X11_LIBS = @CLUTTER_X11_LIBS@
 CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
+CUDA_CFLAGS = @CUDA_CFLAGS@
+CUDA_LIBS = @CUDA_LIBS@
 CURL_CFLAGS = @CURL_CFLAGS@
 CURL_LIBS = @CURL_LIBS@
 CXX = @CXX@
@@ -316,6 +317,8 @@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
+EGL_CFLAGS = @EGL_CFLAGS@
+EGL_LIBS = @EGL_LIBS@
 EGREP = @EGREP@
 ERROR_CFLAGS = @ERROR_CFLAGS@
 ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
@@ -324,7 +327,6 @@
 EXIF_CFLAGS = @EXIF_CFLAGS@
 EXIF_LIBS = @EXIF_LIBS@
 FAAC_LIBS = @FAAC_LIBS@
-FAAD_IS_NEAAC = @FAAD_IS_NEAAC@
 FAAD_LIBS = @FAAD_LIBS@
 FFLAGS = @FFLAGS@
 FGREP = @FGREP@
@@ -343,8 +345,9 @@
 GIO_LIBS = @GIO_LIBS@
 GIO_UNIX_CFLAGS = @GIO_UNIX_CFLAGS@
 GIO_UNIX_LIBS = @GIO_UNIX_LIBS@
+GLES2_CFLAGS = @GLES2_CFLAGS@
+GLES2_LIBS = @GLES2_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
-GLIB_COMPILE_SCHEMAS = @GLIB_COMPILE_SCHEMAS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
@@ -361,16 +364,17 @@
 GMODULE_NO_EXPORT_LIBS = @GMODULE_NO_EXPORT_LIBS@
 GMSGFMT = @GMSGFMT@
 GMSGFMT_015 = @GMSGFMT_015@
+GNUSTL_CFLAGS = @GNUSTL_CFLAGS@
+GNUSTL_LIBS = @GNUSTL_LIBS@
 GRAPHENE_CFLAGS = @GRAPHENE_CFLAGS@
 GRAPHENE_LIBS = @GRAPHENE_LIBS@
 GREP = @GREP@
-GSETTINGS_CFLAGS = @GSETTINGS_CFLAGS@
-GSETTINGS_DISABLE_SCHEMAS_COMPILE = @GSETTINGS_DISABLE_SCHEMAS_COMPILE@
-GSETTINGS_LIBS = @GSETTINGS_LIBS@
 GSM_LIBS = @GSM_LIBS@
 GSTPB_PLUGINS_DIR = @GSTPB_PLUGINS_DIR@
 GSTPB_PREFIX = @GSTPB_PREFIX@
 GST_AGE = @GST_AGE@
+GST_ALLOCATORS_CFLAGS = @GST_ALLOCATORS_CFLAGS@
+GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
 GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
 GST_API_VERSION = @GST_API_VERSION@
 GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
@@ -396,6 +400,8 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PBUTILS_CFLAGS = @GST_PBUTILS_CFLAGS@
+GST_PBUTILS_LIBS = @GST_PBUTILS_LIBS@
 GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BAD_CFLAGS = @GST_PLUGINS_BAD_CFLAGS@
@@ -421,6 +427,8 @@
 GST_PREFIX = @GST_PREFIX@
 GST_REVISION = @GST_REVISION@
 GST_TOOLS_DIR = @GST_TOOLS_DIR@
+GST_VIDEO_CFLAGS = @GST_VIDEO_CFLAGS@
+GST_VIDEO_LIBS = @GST_VIDEO_LIBS@
 GTK3_CFLAGS = @GTK3_CFLAGS@
 GTK3_GL_CFLAGS = @GTK3_GL_CFLAGS@
 GTK3_GL_LIBS = @GTK3_GL_LIBS@
@@ -522,6 +530,7 @@
 LTLIBICONV = @LTLIBICONV@
 LTLIBINTL = @LTLIBINTL@
 LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
 MANIFEST_TOOL = @MANIFEST_TOOL@
@@ -535,8 +544,6 @@
 MODPLUG_LIBS = @MODPLUG_LIBS@
 MPEG2ENC_CFLAGS = @MPEG2ENC_CFLAGS@
 MPEG2ENC_LIBS = @MPEG2ENC_LIBS@
-MPG123_CFLAGS = @MPG123_CFLAGS@
-MPG123_LIBS = @MPG123_LIBS@
 MPLEX_CFLAGS = @MPLEX_CFLAGS@
 MPLEX_LDFLAGS = @MPLEX_LDFLAGS@
 MPLEX_LIBS = @MPLEX_LIBS@
@@ -552,6 +559,8 @@
 NETTLE_LIBS = @NETTLE_LIBS@
 NM = @NM@
 NMEDIT = @NMEDIT@
+NVENCODE_CFLAGS = @NVENCODE_CFLAGS@
+NVENCODE_LIBS = @NVENCODE_LIBS@
 OBJC = @OBJC@
 OBJCDEPMODE = @OBJCDEPMODE@
 OBJCFLAGS = @OBJCFLAGS@
@@ -609,16 +618,18 @@
 PYTHON_PLATFORM = @PYTHON_PLATFORM@
 PYTHON_PREFIX = @PYTHON_PREFIX@
 PYTHON_VERSION = @PYTHON_VERSION@
+QT_ANDROID_CFLAGS = @QT_ANDROID_CFLAGS@
+QT_ANDROID_LIBS = @QT_ANDROID_LIBS@
 QT_CFLAGS = @QT_CFLAGS@
 QT_LIBS = @QT_LIBS@
+QT_MAC_CFLAGS = @QT_MAC_CFLAGS@
+QT_MAC_LIBS = @QT_MAC_LIBS@
 QT_WAYLAND_CFLAGS = @QT_WAYLAND_CFLAGS@
 QT_WAYLAND_LIBS = @QT_WAYLAND_LIBS@
 QT_X11_CFLAGS = @QT_X11_CFLAGS@
 QT_X11_LIBS = @QT_X11_LIBS@
 RANLIB = @RANLIB@
 RCC = @RCC@
-RSVG_2_36_2_CFLAGS = @RSVG_2_36_2_CFLAGS@
-RSVG_2_36_2_LIBS = @RSVG_2_36_2_LIBS@
 RSVG_CFLAGS = @RSVG_CFLAGS@
 RSVG_LIBS = @RSVG_LIBS@
 RTMP_CFLAGS = @RTMP_CFLAGS@
@@ -670,6 +681,7 @@
 VOAACENC_LIBS = @VOAACENC_LIBS@
 VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
 VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VULKAN_LIBS = @VULKAN_LIBS@
 WARNING_CFLAGS = @WARNING_CFLAGS@
 WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
 WARNING_OBJCFLAGS = @WARNING_OBJCFLAGS@
@@ -680,6 +692,7 @@
 WAYLAND_LIBS = @WAYLAND_LIBS@
 WEBP_CFLAGS = @WEBP_CFLAGS@
 WEBP_LIBS = @WEBP_LIBS@
+WGET = @WGET@
 WILDMIDI_CFLAGS = @WILDMIDI_CFLAGS@
 WILDMIDI_LIBS = @WILDMIDI_LIBS@
 WINKS_LIBS = @WINKS_LIBS@
@@ -689,6 +702,8 @@
 X11_LIBS = @X11_LIBS@
 X265_CFLAGS = @X265_CFLAGS@
 X265_LIBS = @X265_LIBS@
+XCB_CFLAGS = @XCB_CFLAGS@
+XCB_LIBS = @XCB_LIBS@
 XCOMPOSITE_CFLAGS = @XCOMPOSITE_CFLAGS@
 XCOMPOSITE_LIBS = @XCOMPOSITE_LIBS@
 XGETTEXT = @XGETTEXT@
@@ -726,7 +741,6 @@
 docdir = @docdir@
 dvidir = @dvidir@
 exec_prefix = @exec_prefix@
-gsettingsschemadir = @gsettingsschemadir@
 host = @host@
 host_alias = @host_alias@
 host_cpu = @host_cpu@
diff --git a/ext/openal/gstopenalsink.c b/ext/openal/gstopenalsink.c
index 1fa1c65..74f58e4 100644
--- a/ext/openal/gstopenalsink.c
+++ b/ext/openal/gstopenalsink.c
@@ -34,13 +34,13 @@
  * <refsect2>
  * <title>Example pipelines</title>
  * |[
- * gst-launch audiotestsrc ! audioconvert ! volume volume=0.5 ! openalsink
+ * gst-launch-1.0 audiotestsrc ! audioconvert ! volume volume=0.5 ! openalsink
  * ]| will play a sine wave (continuous beep sound) through OpenAL.
  * |[
- * gst-launch filesrc location=stream.wav ! decodebin ! audioconvert ! openalsink
+ * gst-launch-1.0 filesrc location=stream.wav ! decodebin ! audioconvert ! openalsink
  * ]| will play a wav audio file through OpenAL.
  * |[
- * gst-launch openalsrc ! "audio/x-raw,format=S16LE,rate=44100" ! audioconvert ! volume volume=0.25 ! openalsink
+ * gst-launch-1.0 openalsrc ! "audio/x-raw,format=S16LE,rate=44100" ! audioconvert ! volume volume=0.25 ! openalsink
  * ]| will capture and play audio through OpenAL.
  * </refsect2>
  */
diff --git a/ext/openal/gstopenalsrc.c b/ext/openal/gstopenalsrc.c
index ef48475..d06b3c4 100644
--- a/ext/openal/gstopenalsrc.c
+++ b/ext/openal/gstopenalsrc.c
@@ -57,10 +57,10 @@
  * <refsect2>
  * <title>Example pipelines</title>
  * |[
- * gst-launch -v openalsrc ! audioconvert ! wavenc ! filesink location=stream.wav
+ * gst-launch-1.0 -v openalsrc ! audioconvert ! wavenc ! filesink location=stream.wav
  * ]| * will capture sound through OpenAL and encode it to a wav file.
  * |[
- * gst-launch openalsrc ! "audio/x-raw,format=S16LE,rate=44100" ! audioconvert ! volume volume=0.25 ! openalsink
+ * gst-launch-1.0 openalsrc ! "audio/x-raw,format=S16LE,rate=44100" ! audioconvert ! volume volume=0.25 ! openalsink
  * ]| will capture and play audio through OpenAL.
  * </refsect2>
  */
diff --git a/ext/opencv/Makefile.am b/ext/opencv/Makefile.am
index 72472fb..0eee38c 100644
--- a/ext/opencv/Makefile.am
+++ b/ext/opencv/Makefile.am
@@ -2,24 +2,24 @@
 
 # sources used to compile this plug-in
 libgstopencv_la_SOURCES = gstopencv.cpp \
-			gstopencvvideofilter.c \
-			gstopencvutils.c \
-			gstcvdilate.c \
-			gstcvdilateerode.c \
-			gstcvequalizehist.c \
-			gstcverode.c \
-			gstcvlaplace.c \
-			gstcvsmooth.c \
-			gstcvsobel.c \
+			gstopencvvideofilter.cpp \
+			gstopencvutils.cpp \
+			gstcvdilate.cpp \
+			gstcvdilateerode.cpp \
+			gstcvequalizehist.cpp \
+			gstcverode.cpp \
+			gstcvlaplace.cpp \
+			gstcvsmooth.cpp \
+			gstcvsobel.cpp \
 			gstedgedetect.cpp \
 			gstfaceblur.cpp \
-			gsthanddetect.c \
-			gstpyramidsegment.c \
-			gsttemplatematch.c \
-			gsttextoverlay.c \
-			gstmotioncells.c \
-			gstskindetect.c \
-			gstretinex.c \
+			gsthanddetect.cpp \
+			gstpyramidsegment.cpp \
+			gsttemplatematch.cpp \
+			gsttextoverlay.cpp \
+			gstmotioncells.cpp \
+			gstskindetect.cpp \
+			gstretinex.cpp \
 			gstfacedetect.cpp \
 			gstsegmentation.cpp \
 			gstgrabcut.cpp \
@@ -27,7 +27,8 @@
 			motioncells_wrapper.cpp \
 			MotionCells.cpp
 
-libgstopencv_la_CXXFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_BASE_CFLAGS) $(GST_CXXFLAGS) $(OPENCV_CFLAGS)
+libgstopencv_la_CXXFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_BASE_CFLAGS) $(GST_CXXFLAGS) $(OPENCV_CFLAGS) \
+	-DGST_HAAR_CASCADES_DIR=\"$(pkgdatadir)/@GST_API_VERSION@/opencv_haarcascades\"
 
 # flags used to compile this facedetect
 # add other _CFLAGS and _LIBS as needed
@@ -36,7 +37,6 @@
 # OpenCV's define isn't good enough to avoid 'unused' gcc warnings (at v2.1.0)
 libgstopencv_la_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_BASE_CFLAGS) \
 	$(GST_CFLAGS) $(OPENCV_CFLAGS) \
-	-DGST_HAAR_CASCADES_DIR=\"$(pkgdatadir)/@GST_API_VERSION@/opencv_haarcascades\" \
 	-DCV_INLINE="static inline" \
 	-DCV_NO_BACKWARD_COMPATIBILITY
 
diff --git a/ext/opencv/Makefile.in b/ext/opencv/Makefile.in
index 4e79c89..5f2e280 100644
--- a/ext/opencv/Makefile.in
+++ b/ext/opencv/Makefile.in
@@ -117,16 +117,15 @@
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
 	$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
-	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gsettings.m4 \
-	$(top_srcdir)/m4/gst-fionread.m4 $(top_srcdir)/m4/gst-sdl.m4 \
-	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
-	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
-	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libgcrypt.m4 \
-	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
-	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
-	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
-	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
-	$(top_srcdir)/configure.ac
+	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gst-fionread.m4 \
+	$(top_srcdir)/m4/gst-sdl.m4 $(top_srcdir)/m4/iconv.m4 \
+	$(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \
+	$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
+	$(top_srcdir)/m4/libgcrypt.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
+	$(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \
@@ -214,24 +213,6 @@
 depcomp = $(SHELL) $(top_srcdir)/depcomp
 am__depfiles_maybe = depfiles
 am__mv = mv -f
-COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
-	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
-LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
-	$(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
-	$(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
-	$(AM_CFLAGS) $(CFLAGS)
-AM_V_CC = $(am__v_CC_@AM_V@)
-am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@)
-am__v_CC_0 = @echo "  CC      " $@;
-am__v_CC_1 = 
-CCLD = $(CC)
-LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
-	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
-	$(AM_LDFLAGS) $(LDFLAGS) -o $@
-AM_V_CCLD = $(am__v_CCLD_@AM_V@)
-am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@)
-am__v_CCLD_0 = @echo "  CCLD    " $@;
-am__v_CCLD_1 = 
 CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
 	$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS)
 LTCXXCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \
@@ -315,6 +296,8 @@
 CLUTTER_X11_LIBS = @CLUTTER_X11_LIBS@
 CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
+CUDA_CFLAGS = @CUDA_CFLAGS@
+CUDA_LIBS = @CUDA_LIBS@
 CURL_CFLAGS = @CURL_CFLAGS@
 CURL_LIBS = @CURL_LIBS@
 CXX = @CXX@
@@ -352,6 +335,8 @@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
+EGL_CFLAGS = @EGL_CFLAGS@
+EGL_LIBS = @EGL_LIBS@
 EGREP = @EGREP@
 ERROR_CFLAGS = @ERROR_CFLAGS@
 ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
@@ -360,7 +345,6 @@
 EXIF_CFLAGS = @EXIF_CFLAGS@
 EXIF_LIBS = @EXIF_LIBS@
 FAAC_LIBS = @FAAC_LIBS@
-FAAD_IS_NEAAC = @FAAD_IS_NEAAC@
 FAAD_LIBS = @FAAD_LIBS@
 FFLAGS = @FFLAGS@
 FGREP = @FGREP@
@@ -379,8 +363,9 @@
 GIO_LIBS = @GIO_LIBS@
 GIO_UNIX_CFLAGS = @GIO_UNIX_CFLAGS@
 GIO_UNIX_LIBS = @GIO_UNIX_LIBS@
+GLES2_CFLAGS = @GLES2_CFLAGS@
+GLES2_LIBS = @GLES2_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
-GLIB_COMPILE_SCHEMAS = @GLIB_COMPILE_SCHEMAS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
@@ -397,16 +382,17 @@
 GMODULE_NO_EXPORT_LIBS = @GMODULE_NO_EXPORT_LIBS@
 GMSGFMT = @GMSGFMT@
 GMSGFMT_015 = @GMSGFMT_015@
+GNUSTL_CFLAGS = @GNUSTL_CFLAGS@
+GNUSTL_LIBS = @GNUSTL_LIBS@
 GRAPHENE_CFLAGS = @GRAPHENE_CFLAGS@
 GRAPHENE_LIBS = @GRAPHENE_LIBS@
 GREP = @GREP@
-GSETTINGS_CFLAGS = @GSETTINGS_CFLAGS@
-GSETTINGS_DISABLE_SCHEMAS_COMPILE = @GSETTINGS_DISABLE_SCHEMAS_COMPILE@
-GSETTINGS_LIBS = @GSETTINGS_LIBS@
 GSM_LIBS = @GSM_LIBS@
 GSTPB_PLUGINS_DIR = @GSTPB_PLUGINS_DIR@
 GSTPB_PREFIX = @GSTPB_PREFIX@
 GST_AGE = @GST_AGE@
+GST_ALLOCATORS_CFLAGS = @GST_ALLOCATORS_CFLAGS@
+GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
 GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
 GST_API_VERSION = @GST_API_VERSION@
 GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
@@ -432,6 +418,8 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PBUTILS_CFLAGS = @GST_PBUTILS_CFLAGS@
+GST_PBUTILS_LIBS = @GST_PBUTILS_LIBS@
 GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BAD_CFLAGS = @GST_PLUGINS_BAD_CFLAGS@
@@ -457,6 +445,8 @@
 GST_PREFIX = @GST_PREFIX@
 GST_REVISION = @GST_REVISION@
 GST_TOOLS_DIR = @GST_TOOLS_DIR@
+GST_VIDEO_CFLAGS = @GST_VIDEO_CFLAGS@
+GST_VIDEO_LIBS = @GST_VIDEO_LIBS@
 GTK3_CFLAGS = @GTK3_CFLAGS@
 GTK3_GL_CFLAGS = @GTK3_GL_CFLAGS@
 GTK3_GL_LIBS = @GTK3_GL_LIBS@
@@ -558,6 +548,7 @@
 LTLIBICONV = @LTLIBICONV@
 LTLIBINTL = @LTLIBINTL@
 LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
 MANIFEST_TOOL = @MANIFEST_TOOL@
@@ -571,8 +562,6 @@
 MODPLUG_LIBS = @MODPLUG_LIBS@
 MPEG2ENC_CFLAGS = @MPEG2ENC_CFLAGS@
 MPEG2ENC_LIBS = @MPEG2ENC_LIBS@
-MPG123_CFLAGS = @MPG123_CFLAGS@
-MPG123_LIBS = @MPG123_LIBS@
 MPLEX_CFLAGS = @MPLEX_CFLAGS@
 MPLEX_LDFLAGS = @MPLEX_LDFLAGS@
 MPLEX_LIBS = @MPLEX_LIBS@
@@ -588,6 +577,8 @@
 NETTLE_LIBS = @NETTLE_LIBS@
 NM = @NM@
 NMEDIT = @NMEDIT@
+NVENCODE_CFLAGS = @NVENCODE_CFLAGS@
+NVENCODE_LIBS = @NVENCODE_LIBS@
 OBJC = @OBJC@
 OBJCDEPMODE = @OBJCDEPMODE@
 OBJCFLAGS = @OBJCFLAGS@
@@ -645,16 +636,18 @@
 PYTHON_PLATFORM = @PYTHON_PLATFORM@
 PYTHON_PREFIX = @PYTHON_PREFIX@
 PYTHON_VERSION = @PYTHON_VERSION@
+QT_ANDROID_CFLAGS = @QT_ANDROID_CFLAGS@
+QT_ANDROID_LIBS = @QT_ANDROID_LIBS@
 QT_CFLAGS = @QT_CFLAGS@
 QT_LIBS = @QT_LIBS@
+QT_MAC_CFLAGS = @QT_MAC_CFLAGS@
+QT_MAC_LIBS = @QT_MAC_LIBS@
 QT_WAYLAND_CFLAGS = @QT_WAYLAND_CFLAGS@
 QT_WAYLAND_LIBS = @QT_WAYLAND_LIBS@
 QT_X11_CFLAGS = @QT_X11_CFLAGS@
 QT_X11_LIBS = @QT_X11_LIBS@
 RANLIB = @RANLIB@
 RCC = @RCC@
-RSVG_2_36_2_CFLAGS = @RSVG_2_36_2_CFLAGS@
-RSVG_2_36_2_LIBS = @RSVG_2_36_2_LIBS@
 RSVG_CFLAGS = @RSVG_CFLAGS@
 RSVG_LIBS = @RSVG_LIBS@
 RTMP_CFLAGS = @RTMP_CFLAGS@
@@ -706,6 +699,7 @@
 VOAACENC_LIBS = @VOAACENC_LIBS@
 VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
 VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VULKAN_LIBS = @VULKAN_LIBS@
 WARNING_CFLAGS = @WARNING_CFLAGS@
 WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
 WARNING_OBJCFLAGS = @WARNING_OBJCFLAGS@
@@ -716,6 +710,7 @@
 WAYLAND_LIBS = @WAYLAND_LIBS@
 WEBP_CFLAGS = @WEBP_CFLAGS@
 WEBP_LIBS = @WEBP_LIBS@
+WGET = @WGET@
 WILDMIDI_CFLAGS = @WILDMIDI_CFLAGS@
 WILDMIDI_LIBS = @WILDMIDI_LIBS@
 WINKS_LIBS = @WINKS_LIBS@
@@ -725,6 +720,8 @@
 X11_LIBS = @X11_LIBS@
 X265_CFLAGS = @X265_CFLAGS@
 X265_LIBS = @X265_LIBS@
+XCB_CFLAGS = @XCB_CFLAGS@
+XCB_LIBS = @XCB_LIBS@
 XCOMPOSITE_CFLAGS = @XCOMPOSITE_CFLAGS@
 XCOMPOSITE_LIBS = @XCOMPOSITE_LIBS@
 XGETTEXT = @XGETTEXT@
@@ -762,7 +759,6 @@
 docdir = @docdir@
 dvidir = @dvidir@
 exec_prefix = @exec_prefix@
-gsettingsschemadir = @gsettingsschemadir@
 host = @host@
 host_alias = @host_alias@
 host_cpu = @host_cpu@
@@ -806,24 +802,24 @@
 
 # sources used to compile this plug-in
 libgstopencv_la_SOURCES = gstopencv.cpp \
-			gstopencvvideofilter.c \
-			gstopencvutils.c \
-			gstcvdilate.c \
-			gstcvdilateerode.c \
-			gstcvequalizehist.c \
-			gstcverode.c \
-			gstcvlaplace.c \
-			gstcvsmooth.c \
-			gstcvsobel.c \
+			gstopencvvideofilter.cpp \
+			gstopencvutils.cpp \
+			gstcvdilate.cpp \
+			gstcvdilateerode.cpp \
+			gstcvequalizehist.cpp \
+			gstcverode.cpp \
+			gstcvlaplace.cpp \
+			gstcvsmooth.cpp \
+			gstcvsobel.cpp \
 			gstedgedetect.cpp \
 			gstfaceblur.cpp \
-			gsthanddetect.c \
-			gstpyramidsegment.c \
-			gsttemplatematch.c \
-			gsttextoverlay.c \
-			gstmotioncells.c \
-			gstskindetect.c \
-			gstretinex.c \
+			gsthanddetect.cpp \
+			gstpyramidsegment.cpp \
+			gsttemplatematch.cpp \
+			gsttextoverlay.cpp \
+			gstmotioncells.cpp \
+			gstskindetect.cpp \
+			gstretinex.cpp \
 			gstfacedetect.cpp \
 			gstsegmentation.cpp \
 			gstgrabcut.cpp \
@@ -831,7 +827,9 @@
 			motioncells_wrapper.cpp \
 			MotionCells.cpp
 
-libgstopencv_la_CXXFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_BASE_CFLAGS) $(GST_CXXFLAGS) $(OPENCV_CFLAGS)
+libgstopencv_la_CXXFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_BASE_CFLAGS) $(GST_CXXFLAGS) $(OPENCV_CFLAGS) \
+	-DGST_HAAR_CASCADES_DIR=\"$(pkgdatadir)/@GST_API_VERSION@/opencv_haarcascades\"
+
 
 # flags used to compile this facedetect
 # add other _CFLAGS and _LIBS as needed
@@ -840,7 +838,6 @@
 # OpenCV's define isn't good enough to avoid 'unused' gcc warnings (at v2.1.0)
 libgstopencv_la_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_BASE_CFLAGS) \
 	$(GST_CFLAGS) $(OPENCV_CFLAGS) \
-	-DGST_HAAR_CASCADES_DIR=\"$(pkgdatadir)/@GST_API_VERSION@/opencv_haarcascades\" \
 	-DCV_INLINE="static inline" \
 	-DCV_NO_BACKWARD_COMPATIBILITY
 
@@ -881,7 +878,7 @@
 all: all-am
 
 .SUFFIXES:
-.SUFFIXES: .c .cpp .lo .o .obj
+.SUFFIXES: .cpp .lo .o .obj
 $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
 	@for dep in $?; do \
 	  case '$(am__configure_deps)' in \
@@ -982,142 +979,6 @@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstopencv_la-gsttextoverlay.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstopencv_la-motioncells_wrapper.Plo@am__quote@
 
-.c.o:
-@am__fastdepCC_TRUE@	$(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\
-@am__fastdepCC_TRUE@	$(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\
-@am__fastdepCC_TRUE@	$(am__mv) $$depbase.Tpo $$depbase.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $<
-
-.c.obj:
-@am__fastdepCC_TRUE@	$(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\
-@am__fastdepCC_TRUE@	$(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\
-@am__fastdepCC_TRUE@	$(am__mv) $$depbase.Tpo $$depbase.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
-
-.c.lo:
-@am__fastdepCC_TRUE@	$(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.lo$$||'`;\
-@am__fastdepCC_TRUE@	$(LTCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\
-@am__fastdepCC_TRUE@	$(am__mv) $$depbase.Tpo $$depbase.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $<
-
-libgstopencv_la-gstopencvvideofilter.lo: gstopencvvideofilter.c
-@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstopencv_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstopencv_la_CFLAGS) $(CFLAGS) -MT libgstopencv_la-gstopencvvideofilter.lo -MD -MP -MF $(DEPDIR)/libgstopencv_la-gstopencvvideofilter.Tpo -c -o libgstopencv_la-gstopencvvideofilter.lo `test -f 'gstopencvvideofilter.c' || echo '$(srcdir)/'`gstopencvvideofilter.c
-@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstopencv_la-gstopencvvideofilter.Tpo $(DEPDIR)/libgstopencv_la-gstopencvvideofilter.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='gstopencvvideofilter.c' object='libgstopencv_la-gstopencvvideofilter.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstopencv_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstopencv_la_CFLAGS) $(CFLAGS) -c -o libgstopencv_la-gstopencvvideofilter.lo `test -f 'gstopencvvideofilter.c' || echo '$(srcdir)/'`gstopencvvideofilter.c
-
-libgstopencv_la-gstopencvutils.lo: gstopencvutils.c
-@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstopencv_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstopencv_la_CFLAGS) $(CFLAGS) -MT libgstopencv_la-gstopencvutils.lo -MD -MP -MF $(DEPDIR)/libgstopencv_la-gstopencvutils.Tpo -c -o libgstopencv_la-gstopencvutils.lo `test -f 'gstopencvutils.c' || echo '$(srcdir)/'`gstopencvutils.c
-@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstopencv_la-gstopencvutils.Tpo $(DEPDIR)/libgstopencv_la-gstopencvutils.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='gstopencvutils.c' object='libgstopencv_la-gstopencvutils.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstopencv_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstopencv_la_CFLAGS) $(CFLAGS) -c -o libgstopencv_la-gstopencvutils.lo `test -f 'gstopencvutils.c' || echo '$(srcdir)/'`gstopencvutils.c
-
-libgstopencv_la-gstcvdilate.lo: gstcvdilate.c
-@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstopencv_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstopencv_la_CFLAGS) $(CFLAGS) -MT libgstopencv_la-gstcvdilate.lo -MD -MP -MF $(DEPDIR)/libgstopencv_la-gstcvdilate.Tpo -c -o libgstopencv_la-gstcvdilate.lo `test -f 'gstcvdilate.c' || echo '$(srcdir)/'`gstcvdilate.c
-@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstopencv_la-gstcvdilate.Tpo $(DEPDIR)/libgstopencv_la-gstcvdilate.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='gstcvdilate.c' object='libgstopencv_la-gstcvdilate.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstopencv_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstopencv_la_CFLAGS) $(CFLAGS) -c -o libgstopencv_la-gstcvdilate.lo `test -f 'gstcvdilate.c' || echo '$(srcdir)/'`gstcvdilate.c
-
-libgstopencv_la-gstcvdilateerode.lo: gstcvdilateerode.c
-@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstopencv_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstopencv_la_CFLAGS) $(CFLAGS) -MT libgstopencv_la-gstcvdilateerode.lo -MD -MP -MF $(DEPDIR)/libgstopencv_la-gstcvdilateerode.Tpo -c -o libgstopencv_la-gstcvdilateerode.lo `test -f 'gstcvdilateerode.c' || echo '$(srcdir)/'`gstcvdilateerode.c
-@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstopencv_la-gstcvdilateerode.Tpo $(DEPDIR)/libgstopencv_la-gstcvdilateerode.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='gstcvdilateerode.c' object='libgstopencv_la-gstcvdilateerode.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstopencv_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstopencv_la_CFLAGS) $(CFLAGS) -c -o libgstopencv_la-gstcvdilateerode.lo `test -f 'gstcvdilateerode.c' || echo '$(srcdir)/'`gstcvdilateerode.c
-
-libgstopencv_la-gstcvequalizehist.lo: gstcvequalizehist.c
-@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstopencv_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstopencv_la_CFLAGS) $(CFLAGS) -MT libgstopencv_la-gstcvequalizehist.lo -MD -MP -MF $(DEPDIR)/libgstopencv_la-gstcvequalizehist.Tpo -c -o libgstopencv_la-gstcvequalizehist.lo `test -f 'gstcvequalizehist.c' || echo '$(srcdir)/'`gstcvequalizehist.c
-@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstopencv_la-gstcvequalizehist.Tpo $(DEPDIR)/libgstopencv_la-gstcvequalizehist.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='gstcvequalizehist.c' object='libgstopencv_la-gstcvequalizehist.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstopencv_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstopencv_la_CFLAGS) $(CFLAGS) -c -o libgstopencv_la-gstcvequalizehist.lo `test -f 'gstcvequalizehist.c' || echo '$(srcdir)/'`gstcvequalizehist.c
-
-libgstopencv_la-gstcverode.lo: gstcverode.c
-@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstopencv_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstopencv_la_CFLAGS) $(CFLAGS) -MT libgstopencv_la-gstcverode.lo -MD -MP -MF $(DEPDIR)/libgstopencv_la-gstcverode.Tpo -c -o libgstopencv_la-gstcverode.lo `test -f 'gstcverode.c' || echo '$(srcdir)/'`gstcverode.c
-@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstopencv_la-gstcverode.Tpo $(DEPDIR)/libgstopencv_la-gstcverode.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='gstcverode.c' object='libgstopencv_la-gstcverode.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstopencv_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstopencv_la_CFLAGS) $(CFLAGS) -c -o libgstopencv_la-gstcverode.lo `test -f 'gstcverode.c' || echo '$(srcdir)/'`gstcverode.c
-
-libgstopencv_la-gstcvlaplace.lo: gstcvlaplace.c
-@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstopencv_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstopencv_la_CFLAGS) $(CFLAGS) -MT libgstopencv_la-gstcvlaplace.lo -MD -MP -MF $(DEPDIR)/libgstopencv_la-gstcvlaplace.Tpo -c -o libgstopencv_la-gstcvlaplace.lo `test -f 'gstcvlaplace.c' || echo '$(srcdir)/'`gstcvlaplace.c
-@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstopencv_la-gstcvlaplace.Tpo $(DEPDIR)/libgstopencv_la-gstcvlaplace.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='gstcvlaplace.c' object='libgstopencv_la-gstcvlaplace.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstopencv_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstopencv_la_CFLAGS) $(CFLAGS) -c -o libgstopencv_la-gstcvlaplace.lo `test -f 'gstcvlaplace.c' || echo '$(srcdir)/'`gstcvlaplace.c
-
-libgstopencv_la-gstcvsmooth.lo: gstcvsmooth.c
-@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstopencv_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstopencv_la_CFLAGS) $(CFLAGS) -MT libgstopencv_la-gstcvsmooth.lo -MD -MP -MF $(DEPDIR)/libgstopencv_la-gstcvsmooth.Tpo -c -o libgstopencv_la-gstcvsmooth.lo `test -f 'gstcvsmooth.c' || echo '$(srcdir)/'`gstcvsmooth.c
-@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstopencv_la-gstcvsmooth.Tpo $(DEPDIR)/libgstopencv_la-gstcvsmooth.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='gstcvsmooth.c' object='libgstopencv_la-gstcvsmooth.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstopencv_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstopencv_la_CFLAGS) $(CFLAGS) -c -o libgstopencv_la-gstcvsmooth.lo `test -f 'gstcvsmooth.c' || echo '$(srcdir)/'`gstcvsmooth.c
-
-libgstopencv_la-gstcvsobel.lo: gstcvsobel.c
-@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstopencv_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstopencv_la_CFLAGS) $(CFLAGS) -MT libgstopencv_la-gstcvsobel.lo -MD -MP -MF $(DEPDIR)/libgstopencv_la-gstcvsobel.Tpo -c -o libgstopencv_la-gstcvsobel.lo `test -f 'gstcvsobel.c' || echo '$(srcdir)/'`gstcvsobel.c
-@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstopencv_la-gstcvsobel.Tpo $(DEPDIR)/libgstopencv_la-gstcvsobel.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='gstcvsobel.c' object='libgstopencv_la-gstcvsobel.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstopencv_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstopencv_la_CFLAGS) $(CFLAGS) -c -o libgstopencv_la-gstcvsobel.lo `test -f 'gstcvsobel.c' || echo '$(srcdir)/'`gstcvsobel.c
-
-libgstopencv_la-gsthanddetect.lo: gsthanddetect.c
-@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstopencv_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstopencv_la_CFLAGS) $(CFLAGS) -MT libgstopencv_la-gsthanddetect.lo -MD -MP -MF $(DEPDIR)/libgstopencv_la-gsthanddetect.Tpo -c -o libgstopencv_la-gsthanddetect.lo `test -f 'gsthanddetect.c' || echo '$(srcdir)/'`gsthanddetect.c
-@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstopencv_la-gsthanddetect.Tpo $(DEPDIR)/libgstopencv_la-gsthanddetect.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='gsthanddetect.c' object='libgstopencv_la-gsthanddetect.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstopencv_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstopencv_la_CFLAGS) $(CFLAGS) -c -o libgstopencv_la-gsthanddetect.lo `test -f 'gsthanddetect.c' || echo '$(srcdir)/'`gsthanddetect.c
-
-libgstopencv_la-gstpyramidsegment.lo: gstpyramidsegment.c
-@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstopencv_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstopencv_la_CFLAGS) $(CFLAGS) -MT libgstopencv_la-gstpyramidsegment.lo -MD -MP -MF $(DEPDIR)/libgstopencv_la-gstpyramidsegment.Tpo -c -o libgstopencv_la-gstpyramidsegment.lo `test -f 'gstpyramidsegment.c' || echo '$(srcdir)/'`gstpyramidsegment.c
-@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstopencv_la-gstpyramidsegment.Tpo $(DEPDIR)/libgstopencv_la-gstpyramidsegment.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='gstpyramidsegment.c' object='libgstopencv_la-gstpyramidsegment.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstopencv_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstopencv_la_CFLAGS) $(CFLAGS) -c -o libgstopencv_la-gstpyramidsegment.lo `test -f 'gstpyramidsegment.c' || echo '$(srcdir)/'`gstpyramidsegment.c
-
-libgstopencv_la-gsttemplatematch.lo: gsttemplatematch.c
-@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstopencv_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstopencv_la_CFLAGS) $(CFLAGS) -MT libgstopencv_la-gsttemplatematch.lo -MD -MP -MF $(DEPDIR)/libgstopencv_la-gsttemplatematch.Tpo -c -o libgstopencv_la-gsttemplatematch.lo `test -f 'gsttemplatematch.c' || echo '$(srcdir)/'`gsttemplatematch.c
-@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstopencv_la-gsttemplatematch.Tpo $(DEPDIR)/libgstopencv_la-gsttemplatematch.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='gsttemplatematch.c' object='libgstopencv_la-gsttemplatematch.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstopencv_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstopencv_la_CFLAGS) $(CFLAGS) -c -o libgstopencv_la-gsttemplatematch.lo `test -f 'gsttemplatematch.c' || echo '$(srcdir)/'`gsttemplatematch.c
-
-libgstopencv_la-gsttextoverlay.lo: gsttextoverlay.c
-@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstopencv_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstopencv_la_CFLAGS) $(CFLAGS) -MT libgstopencv_la-gsttextoverlay.lo -MD -MP -MF $(DEPDIR)/libgstopencv_la-gsttextoverlay.Tpo -c -o libgstopencv_la-gsttextoverlay.lo `test -f 'gsttextoverlay.c' || echo '$(srcdir)/'`gsttextoverlay.c
-@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstopencv_la-gsttextoverlay.Tpo $(DEPDIR)/libgstopencv_la-gsttextoverlay.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='gsttextoverlay.c' object='libgstopencv_la-gsttextoverlay.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstopencv_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstopencv_la_CFLAGS) $(CFLAGS) -c -o libgstopencv_la-gsttextoverlay.lo `test -f 'gsttextoverlay.c' || echo '$(srcdir)/'`gsttextoverlay.c
-
-libgstopencv_la-gstmotioncells.lo: gstmotioncells.c
-@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstopencv_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstopencv_la_CFLAGS) $(CFLAGS) -MT libgstopencv_la-gstmotioncells.lo -MD -MP -MF $(DEPDIR)/libgstopencv_la-gstmotioncells.Tpo -c -o libgstopencv_la-gstmotioncells.lo `test -f 'gstmotioncells.c' || echo '$(srcdir)/'`gstmotioncells.c
-@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstopencv_la-gstmotioncells.Tpo $(DEPDIR)/libgstopencv_la-gstmotioncells.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='gstmotioncells.c' object='libgstopencv_la-gstmotioncells.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstopencv_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstopencv_la_CFLAGS) $(CFLAGS) -c -o libgstopencv_la-gstmotioncells.lo `test -f 'gstmotioncells.c' || echo '$(srcdir)/'`gstmotioncells.c
-
-libgstopencv_la-gstskindetect.lo: gstskindetect.c
-@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstopencv_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstopencv_la_CFLAGS) $(CFLAGS) -MT libgstopencv_la-gstskindetect.lo -MD -MP -MF $(DEPDIR)/libgstopencv_la-gstskindetect.Tpo -c -o libgstopencv_la-gstskindetect.lo `test -f 'gstskindetect.c' || echo '$(srcdir)/'`gstskindetect.c
-@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstopencv_la-gstskindetect.Tpo $(DEPDIR)/libgstopencv_la-gstskindetect.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='gstskindetect.c' object='libgstopencv_la-gstskindetect.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstopencv_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstopencv_la_CFLAGS) $(CFLAGS) -c -o libgstopencv_la-gstskindetect.lo `test -f 'gstskindetect.c' || echo '$(srcdir)/'`gstskindetect.c
-
-libgstopencv_la-gstretinex.lo: gstretinex.c
-@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstopencv_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstopencv_la_CFLAGS) $(CFLAGS) -MT libgstopencv_la-gstretinex.lo -MD -MP -MF $(DEPDIR)/libgstopencv_la-gstretinex.Tpo -c -o libgstopencv_la-gstretinex.lo `test -f 'gstretinex.c' || echo '$(srcdir)/'`gstretinex.c
-@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstopencv_la-gstretinex.Tpo $(DEPDIR)/libgstopencv_la-gstretinex.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='gstretinex.c' object='libgstopencv_la-gstretinex.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstopencv_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstopencv_la_CFLAGS) $(CFLAGS) -c -o libgstopencv_la-gstretinex.lo `test -f 'gstretinex.c' || echo '$(srcdir)/'`gstretinex.c
-
 .cpp.o:
 @am__fastdepCXX_TRUE@	$(AM_V_CXX)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\
 @am__fastdepCXX_TRUE@	$(CXXCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\
@@ -1149,6 +1010,69 @@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCXX_FALSE@	$(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(libgstopencv_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstopencv_la_CXXFLAGS) $(CXXFLAGS) -c -o libgstopencv_la-gstopencv.lo `test -f 'gstopencv.cpp' || echo '$(srcdir)/'`gstopencv.cpp
 
+libgstopencv_la-gstopencvvideofilter.lo: gstopencvvideofilter.cpp
+@am__fastdepCXX_TRUE@	$(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(libgstopencv_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstopencv_la_CXXFLAGS) $(CXXFLAGS) -MT libgstopencv_la-gstopencvvideofilter.lo -MD -MP -MF $(DEPDIR)/libgstopencv_la-gstopencvvideofilter.Tpo -c -o libgstopencv_la-gstopencvvideofilter.lo `test -f 'gstopencvvideofilter.cpp' || echo '$(srcdir)/'`gstopencvvideofilter.cpp
+@am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstopencv_la-gstopencvvideofilter.Tpo $(DEPDIR)/libgstopencv_la-gstopencvvideofilter.Plo
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='gstopencvvideofilter.cpp' object='libgstopencv_la-gstopencvvideofilter.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@	$(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(libgstopencv_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstopencv_la_CXXFLAGS) $(CXXFLAGS) -c -o libgstopencv_la-gstopencvvideofilter.lo `test -f 'gstopencvvideofilter.cpp' || echo '$(srcdir)/'`gstopencvvideofilter.cpp
+
+libgstopencv_la-gstopencvutils.lo: gstopencvutils.cpp
+@am__fastdepCXX_TRUE@	$(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(libgstopencv_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstopencv_la_CXXFLAGS) $(CXXFLAGS) -MT libgstopencv_la-gstopencvutils.lo -MD -MP -MF $(DEPDIR)/libgstopencv_la-gstopencvutils.Tpo -c -o libgstopencv_la-gstopencvutils.lo `test -f 'gstopencvutils.cpp' || echo '$(srcdir)/'`gstopencvutils.cpp
+@am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstopencv_la-gstopencvutils.Tpo $(DEPDIR)/libgstopencv_la-gstopencvutils.Plo
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='gstopencvutils.cpp' object='libgstopencv_la-gstopencvutils.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@	$(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(libgstopencv_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstopencv_la_CXXFLAGS) $(CXXFLAGS) -c -o libgstopencv_la-gstopencvutils.lo `test -f 'gstopencvutils.cpp' || echo '$(srcdir)/'`gstopencvutils.cpp
+
+libgstopencv_la-gstcvdilate.lo: gstcvdilate.cpp
+@am__fastdepCXX_TRUE@	$(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(libgstopencv_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstopencv_la_CXXFLAGS) $(CXXFLAGS) -MT libgstopencv_la-gstcvdilate.lo -MD -MP -MF $(DEPDIR)/libgstopencv_la-gstcvdilate.Tpo -c -o libgstopencv_la-gstcvdilate.lo `test -f 'gstcvdilate.cpp' || echo '$(srcdir)/'`gstcvdilate.cpp
+@am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstopencv_la-gstcvdilate.Tpo $(DEPDIR)/libgstopencv_la-gstcvdilate.Plo
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='gstcvdilate.cpp' object='libgstopencv_la-gstcvdilate.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@	$(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(libgstopencv_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstopencv_la_CXXFLAGS) $(CXXFLAGS) -c -o libgstopencv_la-gstcvdilate.lo `test -f 'gstcvdilate.cpp' || echo '$(srcdir)/'`gstcvdilate.cpp
+
+libgstopencv_la-gstcvdilateerode.lo: gstcvdilateerode.cpp
+@am__fastdepCXX_TRUE@	$(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(libgstopencv_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstopencv_la_CXXFLAGS) $(CXXFLAGS) -MT libgstopencv_la-gstcvdilateerode.lo -MD -MP -MF $(DEPDIR)/libgstopencv_la-gstcvdilateerode.Tpo -c -o libgstopencv_la-gstcvdilateerode.lo `test -f 'gstcvdilateerode.cpp' || echo '$(srcdir)/'`gstcvdilateerode.cpp
+@am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstopencv_la-gstcvdilateerode.Tpo $(DEPDIR)/libgstopencv_la-gstcvdilateerode.Plo
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='gstcvdilateerode.cpp' object='libgstopencv_la-gstcvdilateerode.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@	$(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(libgstopencv_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstopencv_la_CXXFLAGS) $(CXXFLAGS) -c -o libgstopencv_la-gstcvdilateerode.lo `test -f 'gstcvdilateerode.cpp' || echo '$(srcdir)/'`gstcvdilateerode.cpp
+
+libgstopencv_la-gstcvequalizehist.lo: gstcvequalizehist.cpp
+@am__fastdepCXX_TRUE@	$(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(libgstopencv_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstopencv_la_CXXFLAGS) $(CXXFLAGS) -MT libgstopencv_la-gstcvequalizehist.lo -MD -MP -MF $(DEPDIR)/libgstopencv_la-gstcvequalizehist.Tpo -c -o libgstopencv_la-gstcvequalizehist.lo `test -f 'gstcvequalizehist.cpp' || echo '$(srcdir)/'`gstcvequalizehist.cpp
+@am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstopencv_la-gstcvequalizehist.Tpo $(DEPDIR)/libgstopencv_la-gstcvequalizehist.Plo
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='gstcvequalizehist.cpp' object='libgstopencv_la-gstcvequalizehist.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@	$(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(libgstopencv_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstopencv_la_CXXFLAGS) $(CXXFLAGS) -c -o libgstopencv_la-gstcvequalizehist.lo `test -f 'gstcvequalizehist.cpp' || echo '$(srcdir)/'`gstcvequalizehist.cpp
+
+libgstopencv_la-gstcverode.lo: gstcverode.cpp
+@am__fastdepCXX_TRUE@	$(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(libgstopencv_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstopencv_la_CXXFLAGS) $(CXXFLAGS) -MT libgstopencv_la-gstcverode.lo -MD -MP -MF $(DEPDIR)/libgstopencv_la-gstcverode.Tpo -c -o libgstopencv_la-gstcverode.lo `test -f 'gstcverode.cpp' || echo '$(srcdir)/'`gstcverode.cpp
+@am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstopencv_la-gstcverode.Tpo $(DEPDIR)/libgstopencv_la-gstcverode.Plo
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='gstcverode.cpp' object='libgstopencv_la-gstcverode.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@	$(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(libgstopencv_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstopencv_la_CXXFLAGS) $(CXXFLAGS) -c -o libgstopencv_la-gstcverode.lo `test -f 'gstcverode.cpp' || echo '$(srcdir)/'`gstcverode.cpp
+
+libgstopencv_la-gstcvlaplace.lo: gstcvlaplace.cpp
+@am__fastdepCXX_TRUE@	$(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(libgstopencv_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstopencv_la_CXXFLAGS) $(CXXFLAGS) -MT libgstopencv_la-gstcvlaplace.lo -MD -MP -MF $(DEPDIR)/libgstopencv_la-gstcvlaplace.Tpo -c -o libgstopencv_la-gstcvlaplace.lo `test -f 'gstcvlaplace.cpp' || echo '$(srcdir)/'`gstcvlaplace.cpp
+@am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstopencv_la-gstcvlaplace.Tpo $(DEPDIR)/libgstopencv_la-gstcvlaplace.Plo
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='gstcvlaplace.cpp' object='libgstopencv_la-gstcvlaplace.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@	$(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(libgstopencv_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstopencv_la_CXXFLAGS) $(CXXFLAGS) -c -o libgstopencv_la-gstcvlaplace.lo `test -f 'gstcvlaplace.cpp' || echo '$(srcdir)/'`gstcvlaplace.cpp
+
+libgstopencv_la-gstcvsmooth.lo: gstcvsmooth.cpp
+@am__fastdepCXX_TRUE@	$(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(libgstopencv_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstopencv_la_CXXFLAGS) $(CXXFLAGS) -MT libgstopencv_la-gstcvsmooth.lo -MD -MP -MF $(DEPDIR)/libgstopencv_la-gstcvsmooth.Tpo -c -o libgstopencv_la-gstcvsmooth.lo `test -f 'gstcvsmooth.cpp' || echo '$(srcdir)/'`gstcvsmooth.cpp
+@am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstopencv_la-gstcvsmooth.Tpo $(DEPDIR)/libgstopencv_la-gstcvsmooth.Plo
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='gstcvsmooth.cpp' object='libgstopencv_la-gstcvsmooth.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@	$(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(libgstopencv_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstopencv_la_CXXFLAGS) $(CXXFLAGS) -c -o libgstopencv_la-gstcvsmooth.lo `test -f 'gstcvsmooth.cpp' || echo '$(srcdir)/'`gstcvsmooth.cpp
+
+libgstopencv_la-gstcvsobel.lo: gstcvsobel.cpp
+@am__fastdepCXX_TRUE@	$(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(libgstopencv_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstopencv_la_CXXFLAGS) $(CXXFLAGS) -MT libgstopencv_la-gstcvsobel.lo -MD -MP -MF $(DEPDIR)/libgstopencv_la-gstcvsobel.Tpo -c -o libgstopencv_la-gstcvsobel.lo `test -f 'gstcvsobel.cpp' || echo '$(srcdir)/'`gstcvsobel.cpp
+@am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstopencv_la-gstcvsobel.Tpo $(DEPDIR)/libgstopencv_la-gstcvsobel.Plo
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='gstcvsobel.cpp' object='libgstopencv_la-gstcvsobel.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@	$(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(libgstopencv_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstopencv_la_CXXFLAGS) $(CXXFLAGS) -c -o libgstopencv_la-gstcvsobel.lo `test -f 'gstcvsobel.cpp' || echo '$(srcdir)/'`gstcvsobel.cpp
+
 libgstopencv_la-gstedgedetect.lo: gstedgedetect.cpp
 @am__fastdepCXX_TRUE@	$(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(libgstopencv_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstopencv_la_CXXFLAGS) $(CXXFLAGS) -MT libgstopencv_la-gstedgedetect.lo -MD -MP -MF $(DEPDIR)/libgstopencv_la-gstedgedetect.Tpo -c -o libgstopencv_la-gstedgedetect.lo `test -f 'gstedgedetect.cpp' || echo '$(srcdir)/'`gstedgedetect.cpp
 @am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstopencv_la-gstedgedetect.Tpo $(DEPDIR)/libgstopencv_la-gstedgedetect.Plo
@@ -1163,6 +1087,55 @@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCXX_FALSE@	$(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(libgstopencv_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstopencv_la_CXXFLAGS) $(CXXFLAGS) -c -o libgstopencv_la-gstfaceblur.lo `test -f 'gstfaceblur.cpp' || echo '$(srcdir)/'`gstfaceblur.cpp
 
+libgstopencv_la-gsthanddetect.lo: gsthanddetect.cpp
+@am__fastdepCXX_TRUE@	$(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(libgstopencv_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstopencv_la_CXXFLAGS) $(CXXFLAGS) -MT libgstopencv_la-gsthanddetect.lo -MD -MP -MF $(DEPDIR)/libgstopencv_la-gsthanddetect.Tpo -c -o libgstopencv_la-gsthanddetect.lo `test -f 'gsthanddetect.cpp' || echo '$(srcdir)/'`gsthanddetect.cpp
+@am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstopencv_la-gsthanddetect.Tpo $(DEPDIR)/libgstopencv_la-gsthanddetect.Plo
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='gsthanddetect.cpp' object='libgstopencv_la-gsthanddetect.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@	$(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(libgstopencv_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstopencv_la_CXXFLAGS) $(CXXFLAGS) -c -o libgstopencv_la-gsthanddetect.lo `test -f 'gsthanddetect.cpp' || echo '$(srcdir)/'`gsthanddetect.cpp
+
+libgstopencv_la-gstpyramidsegment.lo: gstpyramidsegment.cpp
+@am__fastdepCXX_TRUE@	$(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(libgstopencv_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstopencv_la_CXXFLAGS) $(CXXFLAGS) -MT libgstopencv_la-gstpyramidsegment.lo -MD -MP -MF $(DEPDIR)/libgstopencv_la-gstpyramidsegment.Tpo -c -o libgstopencv_la-gstpyramidsegment.lo `test -f 'gstpyramidsegment.cpp' || echo '$(srcdir)/'`gstpyramidsegment.cpp
+@am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstopencv_la-gstpyramidsegment.Tpo $(DEPDIR)/libgstopencv_la-gstpyramidsegment.Plo
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='gstpyramidsegment.cpp' object='libgstopencv_la-gstpyramidsegment.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@	$(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(libgstopencv_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstopencv_la_CXXFLAGS) $(CXXFLAGS) -c -o libgstopencv_la-gstpyramidsegment.lo `test -f 'gstpyramidsegment.cpp' || echo '$(srcdir)/'`gstpyramidsegment.cpp
+
+libgstopencv_la-gsttemplatematch.lo: gsttemplatematch.cpp
+@am__fastdepCXX_TRUE@	$(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(libgstopencv_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstopencv_la_CXXFLAGS) $(CXXFLAGS) -MT libgstopencv_la-gsttemplatematch.lo -MD -MP -MF $(DEPDIR)/libgstopencv_la-gsttemplatematch.Tpo -c -o libgstopencv_la-gsttemplatematch.lo `test -f 'gsttemplatematch.cpp' || echo '$(srcdir)/'`gsttemplatematch.cpp
+@am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstopencv_la-gsttemplatematch.Tpo $(DEPDIR)/libgstopencv_la-gsttemplatematch.Plo
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='gsttemplatematch.cpp' object='libgstopencv_la-gsttemplatematch.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@	$(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(libgstopencv_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstopencv_la_CXXFLAGS) $(CXXFLAGS) -c -o libgstopencv_la-gsttemplatematch.lo `test -f 'gsttemplatematch.cpp' || echo '$(srcdir)/'`gsttemplatematch.cpp
+
+libgstopencv_la-gsttextoverlay.lo: gsttextoverlay.cpp
+@am__fastdepCXX_TRUE@	$(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(libgstopencv_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstopencv_la_CXXFLAGS) $(CXXFLAGS) -MT libgstopencv_la-gsttextoverlay.lo -MD -MP -MF $(DEPDIR)/libgstopencv_la-gsttextoverlay.Tpo -c -o libgstopencv_la-gsttextoverlay.lo `test -f 'gsttextoverlay.cpp' || echo '$(srcdir)/'`gsttextoverlay.cpp
+@am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstopencv_la-gsttextoverlay.Tpo $(DEPDIR)/libgstopencv_la-gsttextoverlay.Plo
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='gsttextoverlay.cpp' object='libgstopencv_la-gsttextoverlay.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@	$(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(libgstopencv_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstopencv_la_CXXFLAGS) $(CXXFLAGS) -c -o libgstopencv_la-gsttextoverlay.lo `test -f 'gsttextoverlay.cpp' || echo '$(srcdir)/'`gsttextoverlay.cpp
+
+libgstopencv_la-gstmotioncells.lo: gstmotioncells.cpp
+@am__fastdepCXX_TRUE@	$(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(libgstopencv_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstopencv_la_CXXFLAGS) $(CXXFLAGS) -MT libgstopencv_la-gstmotioncells.lo -MD -MP -MF $(DEPDIR)/libgstopencv_la-gstmotioncells.Tpo -c -o libgstopencv_la-gstmotioncells.lo `test -f 'gstmotioncells.cpp' || echo '$(srcdir)/'`gstmotioncells.cpp
+@am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstopencv_la-gstmotioncells.Tpo $(DEPDIR)/libgstopencv_la-gstmotioncells.Plo
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='gstmotioncells.cpp' object='libgstopencv_la-gstmotioncells.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@	$(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(libgstopencv_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstopencv_la_CXXFLAGS) $(CXXFLAGS) -c -o libgstopencv_la-gstmotioncells.lo `test -f 'gstmotioncells.cpp' || echo '$(srcdir)/'`gstmotioncells.cpp
+
+libgstopencv_la-gstskindetect.lo: gstskindetect.cpp
+@am__fastdepCXX_TRUE@	$(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(libgstopencv_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstopencv_la_CXXFLAGS) $(CXXFLAGS) -MT libgstopencv_la-gstskindetect.lo -MD -MP -MF $(DEPDIR)/libgstopencv_la-gstskindetect.Tpo -c -o libgstopencv_la-gstskindetect.lo `test -f 'gstskindetect.cpp' || echo '$(srcdir)/'`gstskindetect.cpp
+@am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstopencv_la-gstskindetect.Tpo $(DEPDIR)/libgstopencv_la-gstskindetect.Plo
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='gstskindetect.cpp' object='libgstopencv_la-gstskindetect.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@	$(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(libgstopencv_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstopencv_la_CXXFLAGS) $(CXXFLAGS) -c -o libgstopencv_la-gstskindetect.lo `test -f 'gstskindetect.cpp' || echo '$(srcdir)/'`gstskindetect.cpp
+
+libgstopencv_la-gstretinex.lo: gstretinex.cpp
+@am__fastdepCXX_TRUE@	$(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(libgstopencv_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstopencv_la_CXXFLAGS) $(CXXFLAGS) -MT libgstopencv_la-gstretinex.lo -MD -MP -MF $(DEPDIR)/libgstopencv_la-gstretinex.Tpo -c -o libgstopencv_la-gstretinex.lo `test -f 'gstretinex.cpp' || echo '$(srcdir)/'`gstretinex.cpp
+@am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstopencv_la-gstretinex.Tpo $(DEPDIR)/libgstopencv_la-gstretinex.Plo
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='gstretinex.cpp' object='libgstopencv_la-gstretinex.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@	$(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(libgstopencv_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstopencv_la_CXXFLAGS) $(CXXFLAGS) -c -o libgstopencv_la-gstretinex.lo `test -f 'gstretinex.cpp' || echo '$(srcdir)/'`gstretinex.cpp
+
 libgstopencv_la-gstfacedetect.lo: gstfacedetect.cpp
 @am__fastdepCXX_TRUE@	$(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(libgstopencv_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstopencv_la_CXXFLAGS) $(CXXFLAGS) -MT libgstopencv_la-gstfacedetect.lo -MD -MP -MF $(DEPDIR)/libgstopencv_la-gstfacedetect.Tpo -c -o libgstopencv_la-gstfacedetect.lo `test -f 'gstfacedetect.cpp' || echo '$(srcdir)/'`gstfacedetect.cpp
 @am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstopencv_la-gstfacedetect.Tpo $(DEPDIR)/libgstopencv_la-gstfacedetect.Plo
diff --git a/ext/opencv/MotionCells.cpp b/ext/opencv/MotionCells.cpp
index eaa013f..9a16176 100644
--- a/ext/opencv/MotionCells.cpp
+++ b/ext/opencv/MotionCells.cpp
@@ -49,10 +49,7 @@
 //#endif
 #endif
 
-#include <cstdlib>
 #include <errno.h>
-#include <math.h>
-#include <gst/gst.h>
 #include "MotionCells.h"
 #include <opencv2/imgproc/imgproc_c.h>
 
diff --git a/ext/opencv/MotionCells.h b/ext/opencv/MotionCells.h
index 41bb9c7..97137bb 100644
--- a/ext/opencv/MotionCells.h
+++ b/ext/opencv/MotionCells.h
@@ -52,11 +52,8 @@
 #ifdef HAVE_OPENCV2_HIGHGUI_HIGHGUI_C_H
 #include <opencv2/highgui/highgui_c.h>            // includes highGUI definitions
 #endif
-#include <iostream>
 #include <fstream>
 #include <vector>
-#include <cstdio>
-#include <cmath>
 #include <glib.h>
 
 //MotionCells defines
diff --git a/ext/opencv/gstcvdilate.c b/ext/opencv/gstcvdilate.cpp
similarity index 86%
rename from ext/opencv/gstcvdilate.c
rename to ext/opencv/gstcvdilate.cpp
index da0713d..bc6b032 100644
--- a/ext/opencv/gstcvdilate.c
+++ b/ext/opencv/gstcvdilate.cpp
@@ -1,7 +1,7 @@
 /*
  * GStreamer
  * Copyright (C) 2010 Thiago Santos <thiago.sousa.santos@collabora.co.uk>
- * 
+ *
  * Permission is hereby granted, free of charge, to any person obtaining a
  * copy of this software and associated documentation files (the "Software"),
  * to deal in the Software without restriction, including without limitation
@@ -41,12 +41,23 @@
  * Boston, MA 02110-1301, USA.
  */
 
+/**
+ * SECTION:element-cvdilate
+ *
+ * Dilates the image with the cvDilate OpenCV function.
+ *
+ * <refsect2>
+ * <title>Example launch line</title>
+ * |[
+ * gst-launch-1.0 videotestsrc ! cvdilate ! videoconvert ! autovideosink
+ * ]|
+ * </refsect2>
+ */
+
 #ifdef HAVE_CONFIG_H
 #  include <config.h>
 #endif
 
-#include <gst/gst.h>
-
 #include "gstcvdilate.h"
 #include <opencv2/imgproc/imgproc_c.h>
 
@@ -57,8 +68,6 @@
 
 static GstFlowReturn gst_cv_dilate_transform_ip (GstOpencvVideoFilter *
     filter, GstBuffer * buf, IplImage * img);
-static GstFlowReturn gst_cv_dilate_transform (GstOpencvVideoFilter * filter,
-    GstBuffer * buf, IplImage * img, GstBuffer * outbuf, IplImage * outimg);
 
 /* initialize the cvdilate's class */
 static void
@@ -70,7 +79,6 @@
   gstopencvbasefilter_class = (GstOpencvVideoFilterClass *) klass;
 
   gstopencvbasefilter_class->cv_trans_ip_func = gst_cv_dilate_transform_ip;
-  gstopencvbasefilter_class->cv_trans_func = gst_cv_dilate_transform;
   gst_element_class_set_static_metadata (element_class,
       "cvdilate",
       "Transform/Effect/Video",
@@ -89,18 +97,6 @@
 }
 
 static GstFlowReturn
-gst_cv_dilate_transform (GstOpencvVideoFilter * base, GstBuffer * buf,
-    IplImage * img, GstBuffer * outbuf, IplImage * outimg)
-{
-  GstCvDilateErode *filter = GST_CV_DILATE_ERODE (base);
-
-  /* TODO support kernel as a parameter */
-  cvDilate (img, outimg, NULL, filter->iterations);
-
-  return GST_FLOW_OK;
-}
-
-static GstFlowReturn
 gst_cv_dilate_transform_ip (GstOpencvVideoFilter * base, GstBuffer * buf,
     IplImage * img)
 {
diff --git a/ext/opencv/gstcvdilateerode.c b/ext/opencv/gstcvdilateerode.cpp
similarity index 96%
rename from ext/opencv/gstcvdilateerode.c
rename to ext/opencv/gstcvdilateerode.cpp
index 13342ab..69a4169 100644
--- a/ext/opencv/gstcvdilateerode.c
+++ b/ext/opencv/gstcvdilateerode.cpp
@@ -1,7 +1,7 @@
 /*
  * GStreamer
  * Copyright (C) 2010 Thiago Santos <thiago.sousa.santos@collabora.co.uk>
- * 
+ *
  * Permission is hereby granted, free of charge, to any person obtaining a
  * copy of this software and associated documentation files (the "Software"),
  * to deal in the Software without restriction, including without limitation
@@ -50,8 +50,6 @@
 #  include <config.h>
 #endif
 
-#include <gst/gst.h>
-
 #include "gstopencvutils.h"
 #include "gstcvdilateerode.h"
 
@@ -131,7 +129,8 @@
   g_object_class_install_property (gobject_class, PROP_ITERATIONS,
       g_param_spec_int ("iterations", "iterations",
           "Number of iterations to run the algorithm", 1, G_MAXINT,
-          DEFAULT_ITERATIONS, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+          DEFAULT_ITERATIONS,
+          (GParamFlags) (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)));
 
   /* add sink and source pad templates */
   caps = gst_opencv_caps_from_cv_image_type (CV_16UC1);
@@ -155,7 +154,8 @@
     GstCvDilateErodeClass * gclass)
 {
   filter->iterations = DEFAULT_ITERATIONS;
-  gst_base_transform_set_in_place (GST_BASE_TRANSFORM (filter), TRUE);
+  gst_opencv_video_filter_set_in_place (GST_OPENCV_VIDEO_FILTER_CAST (filter),
+      TRUE);
 }
 
 static void
diff --git a/ext/opencv/gstcvdilateerode.h b/ext/opencv/gstcvdilateerode.h
index 94425f5..bd2aa7c 100644
--- a/ext/opencv/gstcvdilateerode.h
+++ b/ext/opencv/gstcvdilateerode.h
@@ -1,7 +1,7 @@
 /*
  * GStreamer
  * Copyright (C) 2010 Thiago Santos <thiago.sousa.santos@collabora.co.uk>
- * 
+ *
  * Permission is hereby granted, free of charge, to any person obtaining a
  * copy of this software and associated documentation files (the "Software"),
  * to deal in the Software without restriction, including without limitation
@@ -44,8 +44,6 @@
 #ifndef __GST_CV_DILATE_ERODE_H__
 #define __GST_CV_DILATE_ERODE_H__
 
-#include <gst/gst.h>
-
 #include <gstopencvvideofilter.h>
 
 G_BEGIN_DECLS
@@ -72,7 +70,7 @@
   gint iterations;
 };
 
-struct _GstCvDilateErodeClass 
+struct _GstCvDilateErodeClass
 {
   GstOpencvVideoFilterClass parent_class;
 };
diff --git a/ext/opencv/gstcvequalizehist.c b/ext/opencv/gstcvequalizehist.cpp
similarity index 90%
rename from ext/opencv/gstcvequalizehist.c
rename to ext/opencv/gstcvequalizehist.cpp
index 7384df1..ea1db28 100644
--- a/ext/opencv/gstcvequalizehist.c
+++ b/ext/opencv/gstcvequalizehist.cpp
@@ -1,7 +1,7 @@
 /*
  * GStreamer
  * Copyright (C) 2010 Thiago Santos <thiago.sousa.santos@collabora.co.uk>
- * 
+ *
  * Permission is hereby granted, free of charge, to any person obtaining a
  * copy of this software and associated documentation files (the "Software"),
  * to deal in the Software without restriction, including without limitation
@@ -41,13 +41,25 @@
  * Boston, MA 02110-1301, USA.
  */
 
+/**
+ * SECTION:element-cvequalizehist
+ *
+ * Equalizes the histogram of a grayscale image with the cvEqualizeHist OpenCV
+ * function.
+ *
+ * <refsect2>
+ * <title>Example launch line</title>
+ * |[
+ * gst-launch-1.0 videotestsrc pattern=23 ! cvequalizehist ! videoconvert ! autovideosink
+ * ]|
+ * </refsect2>
+ */
+
+
 #ifdef HAVE_CONFIG_H
 #  include <config.h>
 #endif
 
-#include <gst/gst.h>
-
-#include "gstopencvutils.h"
 #include "gstcvequalizehist.h"
 #include <opencv2/imgproc/imgproc_c.h>
 
@@ -96,7 +108,8 @@
 static void
 gst_cv_equalize_hist_init (GstCvEqualizeHist * filter)
 {
-  gst_base_transform_set_in_place (GST_BASE_TRANSFORM (filter), FALSE);
+  gst_opencv_video_filter_set_in_place (GST_OPENCV_VIDEO_FILTER_CAST (filter),
+      FALSE);
 }
 
 static GstFlowReturn
diff --git a/ext/opencv/gstcvequalizehist.h b/ext/opencv/gstcvequalizehist.h
index d1d600d..c185994 100644
--- a/ext/opencv/gstcvequalizehist.h
+++ b/ext/opencv/gstcvequalizehist.h
@@ -1,7 +1,7 @@
 /*
  * GStreamer
  * Copyright (C) 2010 Thiago Santos <thiago.sousa.santos@collabora.co.uk>
- * 
+ *
  * Permission is hereby granted, free of charge, to any person obtaining a
  * copy of this software and associated documentation files (the "Software"),
  * to deal in the Software without restriction, including without limitation
@@ -44,8 +44,6 @@
 #ifndef __GST_CV_EQUALIZE_HIST_H__
 #define __GST_CV_EQUALIZE_HIST_H__
 
-#include <gst/gst.h>
-
 #include <gstopencvvideofilter.h>
 
 G_BEGIN_DECLS
@@ -70,7 +68,7 @@
   GstOpencvVideoFilter element;
 };
 
-struct _GstCvEqualizeHistClass 
+struct _GstCvEqualizeHistClass
 {
   GstOpencvVideoFilterClass parent_class;
 };
diff --git a/ext/opencv/gstcverode.c b/ext/opencv/gstcverode.cpp
similarity index 86%
rename from ext/opencv/gstcverode.c
rename to ext/opencv/gstcverode.cpp
index 4c62624..39b72be 100644
--- a/ext/opencv/gstcverode.c
+++ b/ext/opencv/gstcverode.cpp
@@ -1,7 +1,7 @@
 /*
  * GStreamer
  * Copyright (C) 2010 Thiago Santos <thiago.sousa.santos@collabora.co.uk>
- * 
+ *
  * Permission is hereby granted, free of charge, to any person obtaining a
  * copy of this software and associated documentation files (the "Software"),
  * to deal in the Software without restriction, including without limitation
@@ -41,12 +41,23 @@
  * Boston, MA 02110-1301, USA.
  */
 
+/**
+ * SECTION:element-cverode
+ *
+ * Erodes the image with the cvErode OpenCV function.
+ *
+ * <refsect2>
+ * <title>Example launch line</title>
+ * |[
+ * gst-launch-1.0 videotestsrc ! cverode ! videoconvert ! autovideosink
+ * ]|
+ * </refsect2>
+ */
+
 #ifdef HAVE_CONFIG_H
 #  include <config.h>
 #endif
 
-#include <gst/gst.h>
-
 #include "gstcverode.h"
 #include <opencv2/imgproc/imgproc_c.h>
 
@@ -57,8 +68,6 @@
 
 static GstFlowReturn gst_cv_erode_transform_ip (GstOpencvVideoFilter *
     filter, GstBuffer * buf, IplImage * img);
-static GstFlowReturn gst_cv_erode_transform (GstOpencvVideoFilter * filter,
-    GstBuffer * buf, IplImage * img, GstBuffer * outbuf, IplImage * outimg);
 
 /* initialize the cverode's class */
 static void
@@ -70,7 +79,6 @@
   gstopencvbasefilter_class = (GstOpencvVideoFilterClass *) klass;
 
   gstopencvbasefilter_class->cv_trans_ip_func = gst_cv_erode_transform_ip;
-  gstopencvbasefilter_class->cv_trans_func = gst_cv_erode_transform;
   gst_element_class_set_static_metadata (element_class,
       "cverode",
       "Transform/Effect/Video",
@@ -89,18 +97,6 @@
 }
 
 static GstFlowReturn
-gst_cv_erode_transform (GstOpencvVideoFilter * base, GstBuffer * buf,
-    IplImage * img, GstBuffer * outbuf, IplImage * outimg)
-{
-  GstCvDilateErode *filter = GST_CV_DILATE_ERODE (base);
-
-  /* TODO support kernel as a parameter */
-  cvErode (img, outimg, NULL, filter->iterations);
-
-  return GST_FLOW_OK;
-}
-
-static GstFlowReturn
 gst_cv_erode_transform_ip (GstOpencvVideoFilter * base, GstBuffer * buf,
     IplImage * img)
 {
diff --git a/ext/opencv/gstcvlaplace.c b/ext/opencv/gstcvlaplace.cpp
similarity index 61%
rename from ext/opencv/gstcvlaplace.c
rename to ext/opencv/gstcvlaplace.cpp
index 5b95618..c989456 100644
--- a/ext/opencv/gstcvlaplace.c
+++ b/ext/opencv/gstcvlaplace.cpp
@@ -1,7 +1,7 @@
 /*
  * GStreamer
  * Copyright (C) 2010 Thiago Santos <thiago.sousa.santos@collabora.co.uk>
- * 
+ *
  * Permission is hereby granted, free of charge, to any person obtaining a
  * copy of this software and associated documentation files (the "Software"),
  * to deal in the Software without restriction, including without limitation
@@ -41,13 +41,23 @@
  * Boston, MA 02110-1301, USA.
  */
 
+/**
+ * SECTION:element-cvlaplace
+ *
+ * Applies cvLaplace OpenCV function to the image.
+ *
+ * <refsect2>
+ * <title>Example launch line</title>
+ * |[
+ * gst-launch-1.0 videotestsrc ! cvlaplace ! videoconvert ! autovideosink
+ * ]|
+ * </refsect2>
+ */
+
 #ifdef HAVE_CONFIG_H
 #  include <config.h>
 #endif
 
-#include <gst/gst.h>
-
-#include "gstopencvutils.h"
 #include "gstcvlaplace.h"
 #include <opencv2/imgproc/imgproc_c.h>
 
@@ -57,22 +67,14 @@
 static GstStaticPadTemplate sink_factory = GST_STATIC_PAD_TEMPLATE ("sink",
     GST_PAD_SINK,
     GST_PAD_ALWAYS,
-    GST_STATIC_CAPS (GST_VIDEO_CAPS_MAKE ("GRAY8"))
+    GST_STATIC_CAPS (GST_VIDEO_CAPS_MAKE ("RGB"))
     );
 
-#if G_BYTE_ORDER == G_BIG_ENDIAN
 static GstStaticPadTemplate src_factory = GST_STATIC_PAD_TEMPLATE ("src",
     GST_PAD_SRC,
     GST_PAD_ALWAYS,
-    GST_STATIC_CAPS (GST_VIDEO_CAPS_MAKE ("GRAY16_BE"))
+    GST_STATIC_CAPS (GST_VIDEO_CAPS_MAKE ("RGB"))
     );
-#else
-static GstStaticPadTemplate src_factory = GST_STATIC_PAD_TEMPLATE ("src",
-    GST_PAD_SRC,
-    GST_PAD_ALWAYS,
-    GST_STATIC_CAPS (GST_VIDEO_CAPS_MAKE ("GRAY16_LE"))
-    );
-#endif
 
 /* Filter signals and args */
 enum
@@ -83,10 +85,16 @@
 enum
 {
   PROP_0,
-  PROP_APERTURE_SIZE
+  PROP_APERTURE_SIZE,
+  PROP_SCALE,
+  PROP_SHIFT,
+  PROP_MASK
 };
 
 #define DEFAULT_APERTURE_SIZE 3
+#define DEFAULT_SCALE_FACTOR 1.0
+#define DEFAULT_SHIFT 0.0
+#define DEFAULT_MASK TRUE
 
 G_DEFINE_TYPE (GstCvLaplace, gst_cv_laplace, GST_TYPE_OPENCV_VIDEO_FILTER);
 
@@ -95,8 +103,8 @@
 static void gst_cv_laplace_get_property (GObject * object, guint prop_id,
     GValue * value, GParamSpec * pspec);
 
-static GstCaps *gst_cv_laplace_transform_caps (GstBaseTransform * trans,
-    GstPadDirection dir, GstCaps * caps, GstCaps * filter);
+static gboolean gst_cv_laplace_handle_sink_event (GstPad * pad,
+    GstObject * parent, GstEvent * event);
 
 static GstFlowReturn gst_cv_laplace_transform (GstOpencvVideoFilter * filter,
     GstBuffer * buf, IplImage * img, GstBuffer * outbuf, IplImage * outimg);
@@ -111,8 +119,12 @@
 {
   GstCvLaplace *filter = GST_CV_LAPLACE (obj);
 
-  if (filter->intermediary_img)
+  if (filter->intermediary_img) {
     cvReleaseImage (&filter->intermediary_img);
+    cvReleaseImage (&filter->cvGray);
+    cvReleaseImage (&filter->Laplace);
+    cvReleaseImage (&filter->CLaplace);
+  }
 
   G_OBJECT_CLASS (gst_cv_laplace_parent_class)->finalize (obj);
 }
@@ -122,27 +134,35 @@
 gst_cv_laplace_class_init (GstCvLaplaceClass * klass)
 {
   GObjectClass *gobject_class;
-  GstBaseTransformClass *gstbasetransform_class;
   GstOpencvVideoFilterClass *gstopencvbasefilter_class;
   GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
 
   gobject_class = (GObjectClass *) klass;
-  gstbasetransform_class = (GstBaseTransformClass *) klass;
   gstopencvbasefilter_class = (GstOpencvVideoFilterClass *) klass;
 
   gobject_class->finalize = GST_DEBUG_FUNCPTR (gst_cv_laplace_finalize);
   gobject_class->set_property = gst_cv_laplace_set_property;
   gobject_class->get_property = gst_cv_laplace_get_property;
 
-  gstbasetransform_class->transform_caps = gst_cv_laplace_transform_caps;
-
   gstopencvbasefilter_class->cv_trans_func = gst_cv_laplace_transform;
   gstopencvbasefilter_class->cv_set_caps = gst_cv_laplace_cv_set_caps;
 
   g_object_class_install_property (gobject_class, PROP_APERTURE_SIZE,
       g_param_spec_int ("aperture-size", "aperture size",
           "Size of the extended Laplace Kernel (1, 3, 5 or 7)", 1, 7,
-          DEFAULT_APERTURE_SIZE, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+          DEFAULT_APERTURE_SIZE, (GParamFlags) (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)));
+  g_object_class_install_property (gobject_class, PROP_SCALE,
+      g_param_spec_double ("scale", "scale factor",
+          "Scale factor", 0.0, G_MAXDOUBLE,
+          DEFAULT_SCALE_FACTOR, (GParamFlags) (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)));
+  g_object_class_install_property (gobject_class, PROP_SHIFT,
+      g_param_spec_double ("shift", "Shift",
+          "Value added to the scaled source array elements", 0.0, G_MAXDOUBLE,
+          DEFAULT_SHIFT, (GParamFlags) (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)));
+  g_object_class_install_property (gobject_class, PROP_MASK,
+      g_param_spec_boolean ("mask", "Mask",
+          "Sets whether the detected edges should be used as a mask on the original input or not",
+          DEFAULT_MASK, (GParamFlags) (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)));
 
   gst_element_class_add_pad_template (element_class,
       gst_static_pad_template_get (&src_factory));
@@ -159,9 +179,16 @@
 static void
 gst_cv_laplace_init (GstCvLaplace * filter)
 {
-  filter->aperture_size = DEFAULT_APERTURE_SIZE;
+  gst_pad_set_event_function (GST_BASE_TRANSFORM_SINK_PAD (filter),
+      GST_DEBUG_FUNCPTR (gst_cv_laplace_handle_sink_event));
 
-  gst_base_transform_set_in_place (GST_BASE_TRANSFORM (filter), FALSE);
+  filter->aperture_size = DEFAULT_APERTURE_SIZE;
+  filter->scale = DEFAULT_SCALE_FACTOR;
+  filter->shift = DEFAULT_SHIFT;
+  filter->mask = DEFAULT_MASK;
+
+  gst_opencv_video_filter_set_in_place (GST_OPENCV_VIDEO_FILTER_CAST (filter),
+      FALSE);
 }
 
 static gboolean
@@ -170,97 +197,17 @@
     gint out_height, gint out_depth, gint out_channels)
 {
   GstCvLaplace *filter = GST_CV_LAPLACE (trans);
-  gint intermediary_depth;
 
-  /* cvLaplace needs an signed output, so we create our intermediary step
-   * image here */
-  switch (out_depth) {
-    case IPL_DEPTH_16U:
-      intermediary_depth = IPL_DEPTH_16S;
-      break;
-    default:
-      GST_WARNING_OBJECT (filter, "Unsupported output depth %d", out_depth);
-      return FALSE;
-  }
   if (filter->intermediary_img) {
     cvReleaseImage (&filter->intermediary_img);
   }
 
-  filter->intermediary_img = cvCreateImage (cvSize (out_width, out_height),
-      intermediary_depth, out_channels);
+  filter->intermediary_img =
+      cvCreateImage (cvSize (out_width, out_height), IPL_DEPTH_16S, 1);
 
   return TRUE;
 }
 
-static GstCaps *
-gst_cv_laplace_transform_caps (GstBaseTransform * trans, GstPadDirection dir,
-    GstCaps * caps, GstCaps * filter)
-{
-  GstCaps *to, *ret;
-  GstCaps *templ;
-  GstStructure *structure;
-  GstPad *other;
-  gint i;
-
-  to = gst_caps_new_empty ();
-
-  for (i = 0; i < gst_caps_get_size (caps); i++) {
-    const GValue *v;
-    GValue list = { 0, };
-    GValue val = { 0, };
-
-    structure = gst_structure_copy (gst_caps_get_structure (caps, i));
-
-    g_value_init (&list, GST_TYPE_LIST);
-
-    g_value_init (&val, G_TYPE_STRING);
-    g_value_set_string (&val, "GRAY8");
-    gst_value_list_append_value (&list, &val);
-    g_value_unset (&val);
-
-    g_value_init (&val, G_TYPE_STRING);
-#if G_BYTE_ORDER == G_BIG_ENDIAN
-    g_value_set_string (&val, "GRAY16_BE");
-#else
-    g_value_set_string (&val, "GRAY16_LE");
-#endif
-    gst_value_list_append_value (&list, &val);
-    g_value_unset (&val);
-
-    v = gst_structure_get_value (structure, "format");
-
-    gst_value_list_merge (&val, v, &list);
-    gst_structure_set_value (structure, "format", &val);
-    g_value_unset (&val);
-    g_value_unset (&list);
-
-    gst_structure_remove_field (structure, "colorimetry");
-    gst_structure_remove_field (structure, "chroma-site");
-
-    gst_caps_append_structure (to, structure);
-
-  }
-
-  /* filter against set allowed caps on the pad */
-  other = (dir == GST_PAD_SINK) ? trans->srcpad : trans->sinkpad;
-  templ = gst_pad_get_pad_template_caps (other);
-  ret = gst_caps_intersect (to, templ);
-  gst_caps_unref (to);
-  gst_caps_unref (templ);
-
-  if (ret && filter) {
-    GstCaps *intersection;
-
-    intersection =
-        gst_caps_intersect_full (filter, ret, GST_CAPS_INTERSECT_FIRST);
-    gst_caps_unref (ret);
-    ret = intersection;
-  }
-
-  return ret;
-
-}
-
 static void
 gst_cv_laplace_set_property (GObject * object, guint prop_id,
     const GValue * value, GParamSpec * pspec)
@@ -277,6 +224,15 @@
         filter->aperture_size = g_value_get_int (value);
     }
       break;
+    case PROP_SCALE:
+      filter->scale = g_value_get_double (value);
+      break;
+    case PROP_SHIFT:
+      filter->shift = g_value_get_double (value);
+      break;
+    case PROP_MASK:
+      filter->mask = g_value_get_boolean (value);
+      break;
     default:
       G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
       break;
@@ -293,22 +249,90 @@
     case PROP_APERTURE_SIZE:
       g_value_set_int (value, filter->aperture_size);
       break;
+    case PROP_SCALE:
+      g_value_set_double (value, filter->scale);
+      break;
+    case PROP_SHIFT:
+      g_value_set_double (value, filter->shift);
+      break;
+    case PROP_MASK:
+      g_value_set_boolean (value, filter->mask);
+      break;
     default:
       G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
       break;
   }
 }
 
+static gboolean
+gst_cv_laplace_handle_sink_event (GstPad * pad, GstObject * parent,
+    GstEvent * event)
+{
+  GstCvLaplace *filter;
+  gint width, height;
+  GstStructure *structure;
+  gboolean res = TRUE;
+
+  filter = GST_CV_LAPLACE (parent);
+
+  switch (GST_EVENT_TYPE (event)) {
+    case GST_EVENT_CAPS:
+    {
+      GstCaps *caps;
+      gst_event_parse_caps (event, &caps);
+
+      structure = gst_caps_get_structure (caps, 0);
+      gst_structure_get_int (structure, "width", &width);
+      gst_structure_get_int (structure, "height", &height);
+
+      if (filter->intermediary_img != NULL) {
+        cvReleaseImage (&filter->intermediary_img);
+        cvReleaseImage (&filter->CLaplace);
+        cvReleaseImage (&filter->cvGray);
+        cvReleaseImage (&filter->Laplace);
+      }
+
+      filter->CLaplace =
+          cvCreateImage (cvSize (width, height), IPL_DEPTH_8U, 3);
+      filter->intermediary_img =
+          cvCreateImage (cvSize (width, height), IPL_DEPTH_16S, 1);
+      filter->cvGray = cvCreateImage (cvSize (width, height), IPL_DEPTH_8U, 1);
+      filter->Laplace = cvCreateImage (cvSize (width, height), IPL_DEPTH_8U, 1);
+      break;
+    }
+    default:
+      break;
+  }
+
+  res = gst_pad_event_default (pad, parent, event);
+
+  return res;
+}
+
 static GstFlowReturn
 gst_cv_laplace_transform (GstOpencvVideoFilter * base, GstBuffer * buf,
     IplImage * img, GstBuffer * outbuf, IplImage * outimg)
 {
   GstCvLaplace *filter = GST_CV_LAPLACE (base);
+  GstMapInfo out_info;
 
   g_assert (filter->intermediary_img);
 
-  cvLaplace (img, filter->intermediary_img, filter->aperture_size);
-  cvConvertScale (filter->intermediary_img, outimg, 1, 0);
+  cvCvtColor (img, filter->cvGray, CV_RGB2GRAY);
+  cvLaplace (filter->cvGray, filter->intermediary_img, filter->aperture_size);
+  cvConvertScale (filter->intermediary_img, filter->Laplace, filter->scale,
+      filter->shift);
+
+  cvZero (filter->CLaplace);
+  if (filter->mask) {
+    cvCopy (img, filter->CLaplace, filter->Laplace);
+  } else {
+    cvCvtColor (filter->Laplace, filter->CLaplace, CV_GRAY2RGB);
+  }
+
+  gst_buffer_map (outbuf, &out_info, GST_MAP_WRITE);
+  memcpy (out_info.data, filter->CLaplace->imageData,
+      gst_buffer_get_size (outbuf));
 
   return GST_FLOW_OK;
 }
diff --git a/ext/opencv/gstcvlaplace.h b/ext/opencv/gstcvlaplace.h
index 098b347..82f237f 100644
--- a/ext/opencv/gstcvlaplace.h
+++ b/ext/opencv/gstcvlaplace.h
@@ -1,7 +1,7 @@
 /*
  * GStreamer
  * Copyright (C) 2010 Thiago Santos <thiago.sousa.santos@collabora.co.uk>
- * 
+ *
  * Permission is hereby granted, free of charge, to any person obtaining a
  * copy of this software and associated documentation files (the "Software"),
  * to deal in the Software without restriction, including without limitation
@@ -44,8 +44,6 @@
 #ifndef __GST_CV_LAPLACE_H__
 #define __GST_CV_LAPLACE_H__
 
-#include <gst/gst.h>
-
 #include <gstopencvvideofilter.h>
 
 G_BEGIN_DECLS
@@ -70,11 +68,17 @@
   GstOpencvVideoFilter element;
 
   gint aperture_size;
+  gdouble scale;
+  gdouble shift;
+  gboolean mask;
 
   IplImage *intermediary_img;
+  IplImage *cvGray;
+  IplImage *Laplace;
+  IplImage *CLaplace;
 };
 
-struct _GstCvLaplaceClass 
+struct _GstCvLaplaceClass
 {
   GstOpencvVideoFilterClass parent_class;
 };
diff --git a/ext/opencv/gstcvsmooth.c b/ext/opencv/gstcvsmooth.cpp
similarity index 79%
rename from ext/opencv/gstcvsmooth.c
rename to ext/opencv/gstcvsmooth.cpp
index 169fd16..8715736 100644
--- a/ext/opencv/gstcvsmooth.c
+++ b/ext/opencv/gstcvsmooth.cpp
@@ -1,7 +1,7 @@
 /*
  * GStreamer
  * Copyright (C) 2010 Thiago Santos <thiago.sousa.santos@collabora.co.uk>
- * 
+ *
  * Permission is hereby granted, free of charge, to any person obtaining a
  * copy of this software and associated documentation files (the "Software"),
  * to deal in the Software without restriction, including without limitation
@@ -41,19 +41,32 @@
  * Boston, MA 02110-1301, USA.
  */
 
+/**
+ * SECTION:element-cvsmooth
+ *
+ * Smooths the image using thes cvSmooth OpenCV function.
+ *
+ * <refsect2>
+ * <title>Example launch line</title>
+ * |[
+ * gst-launch-1.0 videotestsrc ! cvsmooth ! videoconvert ! autovideosink
+ * ]|
+ * </refsect2>
+ */
+
 #ifdef HAVE_CONFIG_H
 #  include <config.h>
 #endif
 
-#include <gst/gst.h>
-
 #include "gstopencvutils.h"
 #include "gstcvsmooth.h"
-#include <opencv2/imgproc/imgproc_c.h>
+#include <opencv2/imgproc/imgproc.hpp>
+
 
 GST_DEBUG_CATEGORY_STATIC (gst_cv_smooth_debug);
 #define GST_CAT_DEFAULT gst_cv_smooth_debug
 
+using namespace cv;
 /* Filter signals and args */
 enum
 {
@@ -86,7 +99,6 @@
   static GType cv_smooth_type_type = 0;
 
   static const GEnumValue smooth_types[] = {
-/*    {CV_BLUR_NO_SCALE, "CV Blur No Scale", "blur-no-scale"}, */
     {CV_BLUR, "CV Blur", "blur"},
     {CV_GAUSSIAN, "CV Gaussian", "gaussian"},
     {CV_MEDIAN, "CV Median", "median"},
@@ -103,7 +115,7 @@
 
 #define DEFAULT_CV_SMOOTH_TYPE CV_GAUSSIAN
 #define DEFAULT_WIDTH 3
-#define DEFAULT_HEIGHT 0
+#define DEFAULT_HEIGHT 3
 #define DEFAULT_COLORSIGMA 0.0
 #define DEFAULT_SPATIALSIGMA 0.0
 
@@ -116,8 +128,6 @@
 
 static GstFlowReturn gst_cv_smooth_transform_ip (GstOpencvVideoFilter *
     filter, GstBuffer * buf, IplImage * img);
-static GstFlowReturn gst_cv_smooth_transform (GstOpencvVideoFilter * filter,
-    GstBuffer * buf, IplImage * img, GstBuffer * outbuf, IplImage * outimg);
 
 /* initialize the cvsmooth's class */
 static void
@@ -136,45 +146,41 @@
   gobject_class->get_property = gst_cv_smooth_get_property;
 
   gstopencvbasefilter_class->cv_trans_ip_func = gst_cv_smooth_transform_ip;
-  gstopencvbasefilter_class->cv_trans_func = gst_cv_smooth_transform;
 
   g_object_class_install_property (gobject_class, PROP_SMOOTH_TYPE,
       g_param_spec_enum ("type",
           "type",
           "Smooth Type",
           GST_TYPE_CV_SMOOTH_TYPE,
-          DEFAULT_CV_SMOOTH_TYPE, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)
+          DEFAULT_CV_SMOOTH_TYPE,
+          (GParamFlags) (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS))
       );
   g_object_class_install_property (gobject_class, PROP_WIDTH,
-      g_param_spec_int ("width", "width (aperture width)",
-          "The aperture width (Must be positive and odd)."
-          "Check cvSmooth OpenCV docs: http://opencv.willowgarage.com"
-          "/documentation/image_filtering.html#cvSmooth", 1, G_MAXINT,
-          DEFAULT_WIDTH, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+      g_param_spec_int ("width", "width (kernel width)",
+          "The gaussian kernel width (must be positive and odd)."
+          "If type is median, this means the aperture linear size."
+          "Check OpenCV docs: http://docs.opencv.org"
+          "/2.4/modules/imgproc/doc/filtering.htm",
+          1, G_MAXINT, DEFAULT_WIDTH,
+          (GParamFlags) (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)));
   g_object_class_install_property (gobject_class, PROP_HEIGHT,
-      g_param_spec_int ("height", "height (aperture height)",
-          "The aperture height, if zero, the width is used."
-          "(Must be positive and odd or zero, unuset in median and bilateral "
-          "types). Check cvSmooth OpenCV docs: http://opencv.willowgarage.com"
-          "/documentation/image_filtering.html#cvSmooth", 0, G_MAXINT,
-          DEFAULT_HEIGHT, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+      g_param_spec_int ("height", "height (kernel height)",
+          "The gaussian kernel height (must be positive and odd).",
+          0, G_MAXINT, DEFAULT_HEIGHT,
+          (GParamFlags) (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)));
   g_object_class_install_property (gobject_class, PROP_COLORSIGMA,
       g_param_spec_double ("color", "color (gaussian standard deviation or "
           "color sigma",
           "If type is gaussian, this means the standard deviation."
           "If type is bilateral, this means the color-sigma. If zero, "
-          "Default values are used."
-          "Check cvSmooth OpenCV docs: http://opencv.willowgarage.com"
-          "/documentation/image_filtering.html#cvSmooth",
+          "Default values are used.",
           0, G_MAXDOUBLE, DEFAULT_COLORSIGMA,
-          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+          (GParamFlags) (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)));
   g_object_class_install_property (gobject_class, PROP_SPATIALSIGMA,
       g_param_spec_double ("spatial", "spatial (spatial sigma, bilateral only)",
-          "Only used in bilateral type, means the spatial-sigma."
-          "Check cvSmooth OpenCV docs: http://opencv.willowgarage.com"
-          "/documentation/image_filtering.html#cvSmooth",
+          "Only used in bilateral type, means the spatial-sigma.",
           0, G_MAXDOUBLE, DEFAULT_SPATIALSIGMA,
-          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+          (GParamFlags) (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)));
 
   gst_element_class_set_static_metadata (element_class,
       "cvsmooth",
@@ -206,7 +212,8 @@
   filter->colorsigma = DEFAULT_COLORSIGMA;
   filter->spatialsigma = DEFAULT_SPATIALSIGMA;
 
-  gst_base_transform_set_in_place (GST_BASE_TRANSFORM (filter), FALSE);
+  gst_opencv_video_filter_set_in_place (GST_OPENCV_VIDEO_FILTER_CAST (filter),
+      TRUE);
 }
 
 static void
@@ -220,10 +227,12 @@
   switch (value) {
     case CV_GAUSSIAN:
     case CV_BLUR:
-      gst_base_transform_set_in_place (GST_BASE_TRANSFORM (filter), TRUE);
+      gst_opencv_video_filter_set_in_place (GST_OPENCV_VIDEO_FILTER_CAST
+          (filter), TRUE);
       break;
     default:
-      gst_base_transform_set_in_place (GST_BASE_TRANSFORM (filter), FALSE);
+      gst_opencv_video_filter_set_in_place (GST_OPENCV_VIDEO_FILTER_CAST
+          (filter), FALSE);
       break;
   }
 }
@@ -252,7 +261,7 @@
     case PROP_HEIGHT:{
       gint prop = g_value_get_int (value);
 
-      if (prop % 2 == 1 || prop == 0) {
+      if (prop % 2 == 1) {
         filter->height = prop;
       } else {
         GST_WARNING_OBJECT (filter, "Ignoring value for height, not odd"
@@ -301,25 +310,29 @@
 }
 
 static GstFlowReturn
-gst_cv_smooth_transform (GstOpencvVideoFilter * base, GstBuffer * buf,
-    IplImage * img, GstBuffer * outbuf, IplImage * outimg)
-{
-  GstCvSmooth *filter = GST_CV_SMOOTH (base);
-
-  cvSmooth (img, outimg, filter->type, filter->width, filter->height,
-      filter->colorsigma, filter->spatialsigma);
-
-  return GST_FLOW_OK;
-}
-
-static GstFlowReturn
 gst_cv_smooth_transform_ip (GstOpencvVideoFilter * base, GstBuffer * buf,
     IplImage * img)
 {
   GstCvSmooth *filter = GST_CV_SMOOTH (base);
 
-  cvSmooth (img, img, filter->type, filter->width, filter->height,
-      filter->colorsigma, filter->spatialsigma);
+  switch (filter->type) {
+    case CV_BLUR:
+      blur (Mat (img), Mat (img), Size (filter->width, filter->height),
+          Point (-1, -1));
+      break;
+    case CV_GAUSSIAN:
+      GaussianBlur (Mat (img), Mat (img), Size (filter->width, filter->height),
+          filter->colorsigma, filter->colorsigma);
+      break;
+    case CV_MEDIAN:
+      medianBlur (Mat (img), Mat (img), filter->width);
+      break;
+    case CV_BILATERAL:
+      bilateralFilter (Mat (img), Mat (img), -1, filter->colorsigma, 0.0);
+      break;
+    default:
+      break;
+  }
 
   return GST_FLOW_OK;
 }
diff --git a/ext/opencv/gstcvsmooth.h b/ext/opencv/gstcvsmooth.h
index c3e5164..7c74fbd 100644
--- a/ext/opencv/gstcvsmooth.h
+++ b/ext/opencv/gstcvsmooth.h
@@ -1,7 +1,7 @@
 /*
  * GStreamer
  * Copyright (C) 2010 Thiago Santos <thiago.sousa.santos@collabora.co.uk>
- * 
+ *
  * Permission is hereby granted, free of charge, to any person obtaining a
  * copy of this software and associated documentation files (the "Software"),
  * to deal in the Software without restriction, including without limitation
@@ -44,8 +44,6 @@
 #ifndef __GST_CV_SMOOTH_H__
 #define __GST_CV_SMOOTH_H__
 
-#include <gst/gst.h>
-
 #include <gstopencvvideofilter.h>
 
 G_BEGIN_DECLS
@@ -77,7 +75,7 @@
   gdouble spatialsigma;
 };
 
-struct _GstCvSmoothClass 
+struct _GstCvSmoothClass
 {
   GstOpencvVideoFilterClass parent_class;
 };
diff --git a/ext/opencv/gstcvsobel.c b/ext/opencv/gstcvsobel.cpp
similarity index 60%
rename from ext/opencv/gstcvsobel.c
rename to ext/opencv/gstcvsobel.cpp
index 1d9b151..d5c9ef7 100644
--- a/ext/opencv/gstcvsobel.c
+++ b/ext/opencv/gstcvsobel.cpp
@@ -1,7 +1,7 @@
 /*
  * GStreamer
  * Copyright (C) 2010 Thiago Santos <thiago.sousa.santos@collabora.co.uk>
- * 
+ *
  * Permission is hereby granted, free of charge, to any person obtaining a
  * copy of this software and associated documentation files (the "Software"),
  * to deal in the Software without restriction, including without limitation
@@ -41,13 +41,23 @@
  * Boston, MA 02110-1301, USA.
  */
 
+/**
+ * SECTION:element-cvsobel
+ *
+ * Applies the cvSobel OpenCV function to the image.
+ *
+ * <refsect2>
+ * <title>Example launch line</title>
+ * |[
+ * gst-launch-1.0 videotestsrc ! cvsobel ! videoconvert ! autovideosink
+ * ]|
+ * </refsect2>
+ */
+
 #ifdef HAVE_CONFIG_H
 #  include <config.h>
 #endif
 
-#include <gst/gst.h>
-
-#include "gstopencvutils.h"
 #include "gstcvsobel.h"
 #include <opencv2/imgproc/imgproc_c.h>
 
@@ -57,23 +67,14 @@
 static GstStaticPadTemplate sink_factory = GST_STATIC_PAD_TEMPLATE ("sink",
     GST_PAD_SINK,
     GST_PAD_ALWAYS,
-    GST_STATIC_CAPS (GST_VIDEO_CAPS_MAKE ("GRAY8"))
+    GST_STATIC_CAPS (GST_VIDEO_CAPS_MAKE ("RGB"))
     );
 
-
-#if G_BYTE_ORDER == G_BIG_ENDIAN
 static GstStaticPadTemplate src_factory = GST_STATIC_PAD_TEMPLATE ("src",
     GST_PAD_SRC,
     GST_PAD_ALWAYS,
-    GST_STATIC_CAPS (GST_VIDEO_CAPS_MAKE ("GRAY16_BE"))
+    GST_STATIC_CAPS (GST_VIDEO_CAPS_MAKE ("RGB"))
     );
-#else
-static GstStaticPadTemplate src_factory = GST_STATIC_PAD_TEMPLATE ("src",
-    GST_PAD_SRC,
-    GST_PAD_ALWAYS,
-    GST_STATIC_CAPS (GST_VIDEO_CAPS_MAKE ("GRAY16_LE"))
-    );
-#endif
 
 /* Filter signals and args */
 enum
@@ -86,12 +87,14 @@
   PROP_0,
   PROP_X_ORDER,
   PROP_Y_ORDER,
-  PROP_APERTURE_SIZE
+  PROP_APERTURE_SIZE,
+  PROP_MASK
 };
 
 #define DEFAULT_X_ORDER 1
 #define DEFAULT_Y_ORDER 0
 #define DEFAULT_APERTURE_SIZE 3
+#define DEFAULT_MASK TRUE
 
 G_DEFINE_TYPE (GstCvSobel, gst_cv_sobel, GST_TYPE_OPENCV_VIDEO_FILTER);
 
@@ -100,44 +103,65 @@
 static void gst_cv_sobel_get_property (GObject * object, guint prop_id,
     GValue * value, GParamSpec * pspec);
 
-static GstCaps *gst_cv_sobel_transform_caps (GstBaseTransform * trans,
-    GstPadDirection dir, GstCaps * caps, GstCaps * filter);
-
+static gboolean gst_cv_sobel_handle_sink_event (GstPad * pad,
+    GstObject * parent, GstEvent * event);
 static GstFlowReturn gst_cv_sobel_transform (GstOpencvVideoFilter * filter,
     GstBuffer * buf, IplImage * img, GstBuffer * outbuf, IplImage * outimg);
+static gboolean gst_cv_sobel_set_caps (GstOpencvVideoFilter * transform,
+    gint in_width, gint in_height, gint in_depth, gint in_channels,
+    gint out_width, gint out_height, gint out_depth, gint out_channels);
+
+/* Clean up */
+static void
+gst_cv_sobel_finalize (GObject * obj)
+{
+  GstCvSobel *filter = GST_CV_SOBEL (obj);
+
+  if (filter->cvSobel != NULL) {
+    cvReleaseImage (&filter->cvCSobel);
+    cvReleaseImage (&filter->cvGray);
+    cvReleaseImage (&filter->cvSobel);
+  }
+
+  G_OBJECT_CLASS (gst_cv_sobel_parent_class)->finalize (obj);
+}
 
 /* initialize the cvsobel's class */
 static void
 gst_cv_sobel_class_init (GstCvSobelClass * klass)
 {
   GObjectClass *gobject_class;
-  GstBaseTransformClass *gstbasetransform_class;
   GstOpencvVideoFilterClass *gstopencvbasefilter_class;
 
   GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
   gobject_class = (GObjectClass *) klass;
-  gstbasetransform_class = (GstBaseTransformClass *) klass;
   gstopencvbasefilter_class = (GstOpencvVideoFilterClass *) klass;
 
+  gobject_class->finalize = GST_DEBUG_FUNCPTR (gst_cv_sobel_finalize);
   gobject_class->set_property = gst_cv_sobel_set_property;
   gobject_class->get_property = gst_cv_sobel_get_property;
 
-  gstbasetransform_class->transform_caps = gst_cv_sobel_transform_caps;
-
   gstopencvbasefilter_class->cv_trans_func = gst_cv_sobel_transform;
+  gstopencvbasefilter_class->cv_set_caps = gst_cv_sobel_set_caps;
 
   g_object_class_install_property (gobject_class, PROP_X_ORDER,
       g_param_spec_int ("x-order", "x order",
           "Order of the derivative x", -1, G_MAXINT,
-          DEFAULT_X_ORDER, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+          DEFAULT_X_ORDER,
+          (GParamFlags) (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)));
   g_object_class_install_property (gobject_class, PROP_Y_ORDER,
-      g_param_spec_int ("y-order", "y order",
-          "Order of the derivative y", -1, G_MAXINT,
-          DEFAULT_Y_ORDER, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+      g_param_spec_int ("y-order", "y order", "Order of the derivative y", -1,
+          G_MAXINT, DEFAULT_Y_ORDER,
+          (GParamFlags) (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)));
   g_object_class_install_property (gobject_class, PROP_APERTURE_SIZE,
       g_param_spec_int ("aperture-size", "aperture size",
           "Size of the extended Sobel Kernel (1, 3, 5 or 7)", 1, 7,
-          DEFAULT_APERTURE_SIZE, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+          DEFAULT_APERTURE_SIZE,
+          (GParamFlags) (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)));
+  g_object_class_install_property (gobject_class, PROP_MASK,
+      g_param_spec_boolean ("mask", "Mask",
+          "Sets whether the detected derivative edges should be used as a mask on the original input or not",
+          DEFAULT_MASK, (GParamFlags) (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)));
 
   gst_element_class_add_pad_template (element_class,
       gst_static_pad_template_get (&src_factory));
@@ -154,78 +178,74 @@
 static void
 gst_cv_sobel_init (GstCvSobel * filter)
 {
+  gst_pad_set_event_function (GST_BASE_TRANSFORM_SINK_PAD (filter),
+      GST_DEBUG_FUNCPTR (gst_cv_sobel_handle_sink_event));
+
   filter->x_order = DEFAULT_X_ORDER;
   filter->y_order = DEFAULT_Y_ORDER;
   filter->aperture_size = DEFAULT_APERTURE_SIZE;
+  filter->mask = DEFAULT_MASK;
 
-  gst_base_transform_set_in_place (GST_BASE_TRANSFORM (filter), FALSE);
+  gst_opencv_video_filter_set_in_place (GST_OPENCV_VIDEO_FILTER_CAST (filter),
+      FALSE);
 }
 
-static GstCaps *
-gst_cv_sobel_transform_caps (GstBaseTransform * trans, GstPadDirection dir,
-    GstCaps * caps, GstCaps * filter)
+/* this function handles the link with other elements */
+static gboolean
+gst_cv_sobel_set_caps (GstOpencvVideoFilter * transform,
+    gint in_width, gint in_height, gint in_depth, gint in_channels,
+    gint out_width, gint out_height, gint out_depth, gint out_channels)
 {
-  GstCaps *to, *ret;
-  GstCaps *templ;
+  GstCvSobel *filter = GST_CV_SOBEL (transform);
+
+  if (filter->cvGray)
+    cvReleaseImage (&filter->cvGray);
+
+  filter->cvGray =
+      cvCreateImage (cvSize (in_width, in_height), IPL_DEPTH_8U, 1);
+
+  return TRUE;
+}
+
+static gboolean
+gst_cv_sobel_handle_sink_event (GstPad * pad, GstObject * parent,
+    GstEvent * event)
+{
+  GstCvSobel *filter;
+  gint width, height;
   GstStructure *structure;
-  GstPad *other;
-  gint i;
+  gboolean res = TRUE;
 
-  to = gst_caps_new_empty ();
+  filter = GST_CV_SOBEL (parent);
 
-  for (i = 0; i < gst_caps_get_size (caps); i++) {
-    const GValue *v;
-    GValue list = { 0, };
-    GValue val = { 0, };
+  switch (GST_EVENT_TYPE (event)) {
+    case GST_EVENT_CAPS:
+    {
+      GstCaps *caps;
+      gst_event_parse_caps (event, &caps);
 
-    structure = gst_structure_copy (gst_caps_get_structure (caps, i));
+      structure = gst_caps_get_structure (caps, 0);
+      gst_structure_get_int (structure, "width", &width);
+      gst_structure_get_int (structure, "height", &height);
 
-    g_value_init (&list, GST_TYPE_LIST);
+      if (filter->cvSobel != NULL) {
+        cvReleaseImage (&filter->cvCSobel);
+        cvReleaseImage (&filter->cvGray);
+        cvReleaseImage (&filter->cvSobel);
+      }
 
-    g_value_init (&val, G_TYPE_STRING);
-    g_value_set_string (&val, "GRAY8");
-    gst_value_list_append_value (&list, &val);
-    g_value_unset (&val);
-
-    g_value_init (&val, G_TYPE_STRING);
-#if G_BYTE_ORDER == G_BIG_ENDIAN
-    g_value_set_string (&val, "GRAY16_BE");
-#else
-    g_value_set_string (&val, "GRAY16_LE");
-#endif
-    gst_value_list_append_value (&list, &val);
-    g_value_unset (&val);
-
-    v = gst_structure_get_value (structure, "format");
-
-    gst_value_list_merge (&val, v, &list);
-    gst_structure_set_value (structure, "format", &val);
-    g_value_unset (&val);
-    g_value_unset (&list);
-
-    gst_structure_remove_field (structure, "colorimetry");
-    gst_structure_remove_field (structure, "chroma-site");
-
-    gst_caps_append_structure (to, structure);
-
-  }
-  /* filter against set allowed caps on the pad */
-  other = (dir == GST_PAD_SINK) ? trans->srcpad : trans->sinkpad;
-  templ = gst_pad_get_pad_template_caps (other);
-  ret = gst_caps_intersect (to, templ);
-  gst_caps_unref (to);
-  gst_caps_unref (templ);
-
-  if (ret && filter) {
-    GstCaps *intersection;
-
-    intersection =
-        gst_caps_intersect_full (filter, ret, GST_CAPS_INTERSECT_FIRST);
-    gst_caps_unref (ret);
-    ret = intersection;
+      filter->cvCSobel = cvCreateImage (cvSize (width, height), IPL_DEPTH_8U, 3);
+      filter->cvGray = cvCreateImage (cvSize (width, height), IPL_DEPTH_8U, 1);
+      filter->cvSobel = cvCreateImage (cvSize (width, height), IPL_DEPTH_8U, 1);
+      break;
+    }
+    default:
+      break;
   }
 
-  return ret;
+  res = gst_pad_event_default (pad, parent, event);
+
+  return res;
 }
 
 static void
@@ -250,6 +270,9 @@
         filter->aperture_size = g_value_get_int (value);
     }
       break;
+    case PROP_MASK:
+      filter->mask = g_value_get_boolean (value);
+      break;
     default:
       G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
       break;
@@ -272,6 +295,9 @@
     case PROP_APERTURE_SIZE:
       g_value_set_int (value, filter->aperture_size);
       break;
+    case PROP_MASK:
+      g_value_set_boolean (value, filter->mask);
+      break;
     default:
       G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
       break;
@@ -283,10 +309,23 @@
     IplImage * img, GstBuffer * outbuf, IplImage * outimg)
 {
   GstCvSobel *filter = GST_CV_SOBEL (base);
+  GstMapInfo out_info;
 
-  cvSobel (img, outimg, filter->x_order, filter->y_order,
+  cvCvtColor (img, filter->cvGray, CV_RGB2GRAY);
+  cvSobel (filter->cvGray, filter->cvSobel, filter->x_order, filter->y_order,
       filter->aperture_size);
 
+  cvZero (filter->cvCSobel);
+  if (filter->mask) {
+    cvCopy (img, filter->cvCSobel, filter->cvSobel);
+  } else {
+    cvCvtColor (filter->cvSobel, filter->cvCSobel, CV_GRAY2RGB);
+  }
+
+  gst_buffer_map (outbuf, &out_info, GST_MAP_WRITE);
+  memcpy (out_info.data, filter->cvCSobel->imageData,
+      gst_buffer_get_size (outbuf));
+
   return GST_FLOW_OK;
 }
 
diff --git a/ext/opencv/gstcvsobel.h b/ext/opencv/gstcvsobel.h
index c6719a0..62cabab 100644
--- a/ext/opencv/gstcvsobel.h
+++ b/ext/opencv/gstcvsobel.h
@@ -1,7 +1,7 @@
 /*
  * GStreamer
  * Copyright (C) 2010 Thiago Santos <thiago.sousa.santos@collabora.co.uk>
- * 
+ *
  * Permission is hereby granted, free of charge, to any person obtaining a
  * copy of this software and associated documentation files (the "Software"),
  * to deal in the Software without restriction, including without limitation
@@ -44,8 +44,6 @@
 #ifndef __GST_CV_SOBEL_H__
 #define __GST_CV_SOBEL_H__
 
-#include <gst/gst.h>
-
 #include <gstopencvvideofilter.h>
 
 G_BEGIN_DECLS
@@ -72,9 +70,14 @@
   gint x_order;
   gint y_order;
   gint aperture_size;
+  gboolean mask;
+
+  IplImage *cvCSobel;
+  IplImage *cvGray;
+  IplImage *cvSobel;
 };
 
-struct _GstCvSobelClass 
+struct _GstCvSobelClass
 {
   GstOpencvVideoFilterClass parent_class;
 };
diff --git a/ext/opencv/gstdisparity.cpp b/ext/opencv/gstdisparity.cpp
index f3f9d64..3ca9015 100644
--- a/ext/opencv/gstdisparity.cpp
+++ b/ext/opencv/gstdisparity.cpp
@@ -53,32 +53,32 @@
  * run prefiltering stages to normalize brightness between the inputs, and to maximize texture.
  *
  * Note that in general is hard to find correspondences between soft textures, for instance a
- * block of gloss blue colour. The output is a gray image with values close to white meaning 
+ * block of gloss blue colour. The output is a gray image with values close to white meaning
  * closer to the cameras and darker far away. Black means that the pixels were not matched
  * correctly (not found). The resulting depth map can be transformed into real world coordinates
  * by means of OpenCV function (reprojectImageTo3D) but for this the camera matrixes need to
  * be fully known.
  *
  * Algorithm 1 is the OpenCV Stereo Block Matching, similar to the one developed by Kurt Konolige
- * [A] and that works by using small Sum-of-absolute-differenc (SAD) windows to find matching 
+ * [A] and that works by using small Sum-of-absolute-differenc (SAD) windows to find matching
  * points between the left and right rectified images. This algorithm finds only strongly matching
  * points between both images, this means normally strong textures. In soft textures, such as a
  * single coloured wall (as opposed to, f.i. a hairy rug), not all pixels might have correspondence.
  *
  * Algorithm 2 is the Semi Global Matching (SGM) algorithm [B] which models the scene structure
- * with a point-wise matching cost and an associated smoothness term. The energy minimization 
- * is then computed in a multitude of 1D lines. For each point, the disparity corresponding to 
- * the minimum aggregated cost is selected. In [B] the author proposes to use 8 or 16 different 
- * independent paths. The SGM approach works well near depth discontinuities, but produces less 
- * accurate results. Despite its relatively large memory footprint, this method is very fast and 
+ * with a point-wise matching cost and an associated smoothness term. The energy minimization
+ * is then computed in a multitude of 1D lines. For each point, the disparity corresponding to
+ * the minimum aggregated cost is selected. In [B] the author proposes to use 8 or 16 different
+ * independent paths. The SGM approach works well near depth discontinuities, but produces less
+ * accurate results. Despite its relatively large memory footprint, this method is very fast and
  * potentially robust to complicated textured regions.
  *
- * Algorithm 3 is the OpenCV implementation of a modification of the variational stereo 
+ * Algorithm 3 is the OpenCV implementation of a modification of the variational stereo
  * correspondence algorithm, described in [C].
  *
- * Algorithm 4 is the Graph Cut stereo vision algorithm (GC) introduced in [D]; it is a global 
+ * Algorithm 4 is the Graph Cut stereo vision algorithm (GC) introduced in [D]; it is a global
  * stereo vision method. It calculates depth discontinuities by minimizing an energy function
- * combingin a point-wise matching cost and a smoothness term. The energy function is passed 
+ * combingin a point-wise matching cost and a smoothness term. The energy function is passed
  * to graph and Graph Cut is used to find a lowest-energy cut. GC is computationally intensive due
  * to its global nature and uses loads of memory, but it can deal with textureless regions and
  * reflections better than other methods.
@@ -86,15 +86,15 @@
  *
  * Some test images can be found here: http://vision.stanford.edu/~birch/p2p/
  *
- * [A] K. Konolige. Small vision system. hardware and implementation. In Proc. International 
+ * [A] K. Konolige. Small vision system. hardware and implementation. In Proc. International
  * Symposium on Robotics Research, pages 111--116, Hayama, Japan, 1997.
- * [B] H. Hirschmüller, “Accurate and efficient stereo processing by semi-global matching and 
- * mutual information,” in Proceedings of the IEEE Conference on Computer Vision and Pattern 
+ * [B] H. Hirschmüller, “Accurate and efficient stereo processing by semi-global matching and
+ * mutual information,” in Proceedings of the IEEE Conference on Computer Vision and Pattern
  * Recognition, 2005, pp. 807–814.
  * [C] S. Kosov, T. Thormaehlen, H.-P. Seidel "Accurate Real-Time Disparity Estimation with
- * Variational Methods" Proceedings of the 5th International Symposium on Visual Computing, 
+ * Variational Methods" Proceedings of the 5th International Symposium on Visual Computing,
  * Vegas, USA
- * [D] Scharstein, D. & Szeliski, R. (2001). A taxonomy and evaluation of dense two-frame stereo 
+ * [D] Scharstein, D. & Szeliski, R. (2001). A taxonomy and evaluation of dense two-frame stereo
  * correspondence algorithms, International Journal of Computer Vision 47: 7–42.
  *
  * <refsect2>
@@ -103,7 +103,7 @@
  * gst-launch-1.0       videotestsrc ! video/x-raw,width=320,height=240 ! disp0.sink_right      videotestsrc ! video/x-raw,width=320,height=240 ! disp0.sink_left      disparity name=disp0 ! videoconvert ! ximagesink
  * ]|
  * Another example, with two png files representing a classical stereo matching,
- * downloadable from http://vision.middlebury.edu/stereo/submit/tsukuba/im4.png and 
+ * downloadable from http://vision.middlebury.edu/stereo/submit/tsukuba/im4.png and
  * im3.png. Note here they are downloaded in ~ (home).
  * |[
 gst-launch-1.0    multifilesrc  location=~/im3.png ! pngdec ! videoconvert  ! disp0.sink_right     multifilesrc  location=~/im4.png ! pngdec ! videoconvert ! disp0.sink_left disparity   name=disp0 method=sbm     disp0.src ! videoconvert ! ximagesink
@@ -119,8 +119,6 @@
 #include <config.h>
 #endif
 
-#include <gst/gst.h>
-#include <gst/video/video.h>
 #include <opencv2/contrib/contrib.hpp>
 #include "gstdisparity.h"
 
@@ -418,12 +416,12 @@
   switch (GST_QUERY_TYPE (query)) {
     case GST_QUERY_CAPS:
       g_mutex_lock (&fs->lock);
-      if (!gst_pad_has_current_caps (fs->srcpad)) {
+      current_caps = gst_pad_get_current_caps (fs->srcpad);
+      if (current_caps == NULL) {
         template_caps = gst_pad_get_pad_template_caps (pad);
         gst_query_set_caps_result (query, template_caps);
         gst_caps_unref (template_caps);
       } else {
-        current_caps = gst_pad_get_current_caps (fs->srcpad);
         gst_query_set_caps_result (query, current_caps);
         gst_caps_unref (current_caps);
       }
@@ -548,19 +546,19 @@
       fs->width, fs->height, fs->actualChannels);
 
   /* Stereo corresponding using semi-global block matching. According to OpenCV:
-     "" The class implements modified H. Hirschmuller algorithm HH08 . The main 
+     "" The class implements modified H. Hirschmuller algorithm HH08 . The main
      differences between the implemented algorithm and the original one are:
 
-     - by default the algorithm is single-pass, i.e. instead of 8 directions we 
+     - by default the algorithm is single-pass, i.e. instead of 8 directions we
      only consider 5. Set fullDP=true to run the full variant of the algorithm
      (which could consume a lot of memory)
      - the algorithm matches blocks, not individual pixels (though, by setting
      SADWindowSize=1 the blocks are reduced to single pixels)
      - mutual information cost function is not implemented. Instead, we use a
-     simpler Birchfield-Tomasi sub-pixel metric from BT96 , though the color 
+     simpler Birchfield-Tomasi sub-pixel metric from BT96 , though the color
      images are supported as well.
-     - we include some pre- and post- processing steps from K. Konolige 
-     algorithm FindStereoCorrespondenceBM , such as pre-filtering 
+     - we include some pre- and post- processing steps from K. Konolige
+     algorithm FindStereoCorrespondenceBM , such as pre-filtering
      ( CV_STEREO_BM_XSOBEL type) and post-filtering (uniqueness check, quadratic
      interpolation and speckle filtering) ""
    */
@@ -572,7 +570,7 @@
         CV_MINMAX, NULL);
     cvCvtColor (fs->cvGray_depth_map2, fs->cvRGB_right, CV_GRAY2RGB);
   }
-  /* Algorithm 1 is the OpenCV Stereo Block Matching, similar to the one 
+  /* Algorithm 1 is the OpenCV Stereo Block Matching, similar to the one
      developed by Kurt Konolige [A] and that works by using small Sum-of-absolute-
      differences (SAD) window. See the comments on top of the file.
    */
@@ -593,9 +591,9 @@
     run_svar_iteration (fs);
     cvCvtColor (fs->cvGray_depth_map2, fs->cvRGB_right, CV_GRAY2RGB);
   }
-  /* The Graph Cut stereo vision algorithm (GC) introduced in [D] is a global 
-     stereo vision method. It calculates depth discontinuities by minimizing an 
-     energy function combingin a point-wise matching cost and a smoothness term. 
+  /* The Graph Cut stereo vision algorithm (GC) introduced in [D] is a global
+     stereo vision method. It calculates depth discontinuities by minimizing an
+     energy function combingin a point-wise matching cost and a smoothness term.
      See the comments on top of the file.
    */
   else if (METHOD_GC == fs->method) {
diff --git a/ext/opencv/gstdisparity.h b/ext/opencv/gstdisparity.h
index adbb9ae..07e2417 100644
--- a/ext/opencv/gstdisparity.h
+++ b/ext/opencv/gstdisparity.h
@@ -45,6 +45,7 @@
 #define __GST_DISPARITY_H__
 
 #include <gst/gst.h>
+#include <gst/video/video.h>
 
 #include <opencv2/legacy/legacy.hpp>
 
diff --git a/ext/opencv/gstedgedetect.cpp b/ext/opencv/gstedgedetect.cpp
index 5ecf8ec..7e6c1e7 100644
--- a/ext/opencv/gstedgedetect.cpp
+++ b/ext/opencv/gstedgedetect.cpp
@@ -3,7 +3,7 @@
  * Copyright (C) 2005 Thomas Vander Stichele <thomas@apestaart.org>
  * Copyright (C) 2005 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
  * Copyright (C) 2008 Michael Sheldon <mike@mikeasoft.com>
- * 
+ *
  * Permission is hereby granted, free of charge, to any person obtaining a
  * copy of this software and associated documentation files (the "Software"),
  * to deal in the Software without restriction, including without limitation
@@ -51,7 +51,7 @@
  * <refsect2>
  * <title>Example launch line</title>
  * |[
- * gst-launch-0.10 videotestsrc ! decodebin ! videoconvert ! edgedetect ! videoconvert ! xvimagesink
+ * gst-launch-1.0 videotestsrc ! decodebin ! videoconvert ! edgedetect ! videoconvert ! xvimagesink
  * ]|
  * </refsect2>
  */
@@ -60,9 +60,6 @@
 #  include <config.h>
 #endif
 
-#include <gst/gst.h>
-
-#include "gstopencvutils.h"
 #include "gstedgedetect.h"
 #include <opencv2/imgproc/imgproc_c.h>
 
@@ -101,7 +98,7 @@
     GST_STATIC_CAPS (GST_VIDEO_CAPS_MAKE ("RGB"))
     );
 
-G_DEFINE_TYPE (GstEdgeDetect, gst_edge_detect, GST_TYPE_ELEMENT);
+G_DEFINE_TYPE (GstEdgeDetect, gst_edge_detect, GST_TYPE_OPENCV_VIDEO_FILTER);
 
 static void gst_edge_detect_set_property (GObject * object, guint prop_id,
     const GValue * value, GParamSpec * pspec);
@@ -110,8 +107,11 @@
 
 static gboolean gst_edge_detect_handle_sink_event (GstPad * pad,
     GstObject * parent, GstEvent * event);
-static GstFlowReturn gst_edge_detect_chain (GstPad * pad, GstObject * parent,
-    GstBuffer * buf);
+static GstFlowReturn gst_edge_detect_transform (GstOpencvVideoFilter * filter,
+    GstBuffer * buf, IplImage * img, GstBuffer * outbuf, IplImage * outimg);
+static gboolean gst_edge_detect_set_caps (GstOpencvVideoFilter * transform,
+    gint in_width, gint in_height, gint in_depth, gint in_channels,
+    gint out_width, gint out_height, gint out_depth, gint out_channels);
 
 /* Clean up */
 static void
@@ -119,8 +119,7 @@
 {
   GstEdgeDetect *filter = GST_EDGE_DETECT (obj);
 
-  if (filter->cvImage != NULL) {
-    cvReleaseImage (&filter->cvImage);
+  if (filter->cvEdge != NULL) {
     cvReleaseImage (&filter->cvCEdge);
     cvReleaseImage (&filter->cvGray);
     cvReleaseImage (&filter->cvEdge);
@@ -134,14 +133,19 @@
 gst_edge_detect_class_init (GstEdgeDetectClass * klass)
 {
   GObjectClass *gobject_class;
+  GstOpencvVideoFilterClass *gstopencvbasefilter_class;
 
   GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
   gobject_class = (GObjectClass *) klass;
+  gstopencvbasefilter_class = (GstOpencvVideoFilterClass *) klass;
 
   gobject_class->finalize = GST_DEBUG_FUNCPTR (gst_edge_detect_finalize);
   gobject_class->set_property = gst_edge_detect_set_property;
   gobject_class->get_property = gst_edge_detect_get_property;
 
+  gstopencvbasefilter_class->cv_trans_func = gst_edge_detect_transform;
+  gstopencvbasefilter_class->cv_set_caps = gst_edge_detect_set_caps;
+
   g_object_class_install_property (gobject_class, PROP_MASK,
       g_param_spec_boolean ("mask", "Mask",
           "Sets whether the detected edges should be used as a mask on the original input or not",
@@ -179,22 +183,16 @@
 static void
 gst_edge_detect_init (GstEdgeDetect * filter)
 {
-  filter->sinkpad = gst_pad_new_from_static_template (&sink_factory, "sink");
-  GST_PAD_SET_PROXY_CAPS (filter->sinkpad);
-  gst_pad_set_event_function (filter->sinkpad,
+  gst_pad_set_event_function (GST_BASE_TRANSFORM_SINK_PAD (filter),
       GST_DEBUG_FUNCPTR (gst_edge_detect_handle_sink_event));
-  gst_pad_set_chain_function (filter->sinkpad,
-      GST_DEBUG_FUNCPTR (gst_edge_detect_chain));
 
-  filter->srcpad = gst_pad_new_from_static_template (&src_factory, "src");
-  GST_PAD_SET_PROXY_CAPS (filter->srcpad);
-
-  gst_element_add_pad (GST_ELEMENT (filter), filter->sinkpad);
-  gst_element_add_pad (GST_ELEMENT (filter), filter->srcpad);
   filter->mask = TRUE;
   filter->threshold1 = 50;
   filter->threshold2 = 150;
   filter->aperture = 3;
+
+  gst_opencv_video_filter_set_in_place (GST_OPENCV_VIDEO_FILTER_CAST (filter),
+      FALSE);
 }
 
 static void
@@ -251,6 +249,23 @@
 
 /* this function handles the link with other elements */
 static gboolean
+gst_edge_detect_set_caps (GstOpencvVideoFilter * transform,
+    gint in_width, gint in_height, gint in_depth, gint in_channels,
+    gint out_width, gint out_height, gint out_depth, gint out_channels)
+{
+  GstEdgeDetect *filter = GST_EDGE_DETECT (transform);
+
+  if (filter->cvGray)
+    cvReleaseImage (&filter->cvGray);
+
+  filter->cvGray =
+      cvCreateImage (cvSize (in_width, in_height), IPL_DEPTH_8U, 1);
+
+  return TRUE;
+}
+
+/* this function handles the link with other elements */
+static gboolean
 gst_edge_detect_handle_sink_event (GstPad * pad, GstObject * parent,
     GstEvent * event)
 {
@@ -271,14 +286,12 @@
       gst_structure_get_int (structure, "width", &width);
       gst_structure_get_int (structure, "height", &height);
 
-      if (filter->cvImage != NULL) {
-        cvReleaseImage (&filter->cvImage);
+      if (filter->cvEdge != NULL) {
         cvReleaseImage (&filter->cvCEdge);
         cvReleaseImage (&filter->cvGray);
         cvReleaseImage (&filter->cvEdge);
       }
 
-      filter->cvImage = cvCreateImage (cvSize (width, height), IPL_DEPTH_8U, 3);
       filter->cvCEdge = cvCreateImage (cvSize (width, height), IPL_DEPTH_8U, 3);
       filter->cvGray = cvCreateImage (cvSize (width, height), IPL_DEPTH_8U, 1);
       filter->cvEdge = cvCreateImage (cvSize (width, height), IPL_DEPTH_8U, 1);
@@ -291,49 +304,31 @@
   res = gst_pad_event_default (pad, parent, event);
 
   return res;
-
 }
 
-/* chain function
- * this function does the actual processing
- */
 static GstFlowReturn
-gst_edge_detect_chain (GstPad * pad, GstObject * parent, GstBuffer * buf)
+gst_edge_detect_transform (GstOpencvVideoFilter * base, GstBuffer * buf,
+    IplImage * img, GstBuffer * outbuf, IplImage * outimg)
 {
-  GstEdgeDetect *filter;
-  GstBuffer *outbuf;
-  GstMapInfo in_info;
+  GstEdgeDetect *filter = GST_EDGE_DETECT (base);
   GstMapInfo out_info;
 
-  filter = GST_EDGE_DETECT (parent);
-
-  buf = gst_buffer_make_writable (buf);
-  gst_buffer_map (buf, &in_info, GST_MAP_WRITE);
-  filter->cvImage->imageData = (char *) in_info.data;
-
-  cvCvtColor (filter->cvImage, filter->cvGray, CV_RGB2GRAY);
+  cvCvtColor (img, filter->cvGray, CV_RGB2GRAY);
   cvCanny (filter->cvGray, filter->cvEdge, filter->threshold1,
       filter->threshold2, filter->aperture);
 
   cvZero (filter->cvCEdge);
   if (filter->mask) {
-    cvCopy (filter->cvImage, filter->cvCEdge, filter->cvEdge);
+    cvCopy (img, filter->cvCEdge, filter->cvEdge);
   } else {
     cvCvtColor (filter->cvEdge, filter->cvCEdge, CV_GRAY2RGB);
   }
 
-  outbuf = gst_buffer_new_and_alloc (filter->cvCEdge->imageSize);
-  gst_buffer_copy_into (outbuf, buf,
-      (GstBufferCopyFlags) GST_BUFFER_COPY_METADATA, 0, -1);
-
   gst_buffer_map (outbuf, &out_info, GST_MAP_WRITE);
   memcpy (out_info.data, filter->cvCEdge->imageData,
       gst_buffer_get_size (outbuf));
 
-  gst_buffer_unmap (buf, &in_info);
-  gst_buffer_unmap (outbuf, &out_info);
-  gst_buffer_unref (buf);
-  return gst_pad_push (filter->srcpad, outbuf);
+  return GST_FLOW_OK;
 }
 
 /* entry point to initialize the plug-in
@@ -343,9 +338,7 @@
 gboolean
 gst_edge_detect_plugin_init (GstPlugin * plugin)
 {
-  /* debug category for fltering log messages
-   *
-   */
+  /* debug category for fltering log messages */
   GST_DEBUG_CATEGORY_INIT (gst_edge_detect_debug, "edgedetect",
       0, "Performs canny edge detection on videos and images");
 
diff --git a/ext/opencv/gstedgedetect.h b/ext/opencv/gstedgedetect.h
index 23c95e6..0472c5d 100644
--- a/ext/opencv/gstedgedetect.h
+++ b/ext/opencv/gstedgedetect.h
@@ -3,7 +3,7 @@
  * Copyright (C) 2005 Thomas Vander Stichele <thomas@apestaart.org>
  * Copyright (C) 2005 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
  * Copyright (C) 2008 Michael Sheldon <mike@mikeasoft.com>
- * 
+ *
  * Permission is hereby granted, free of charge, to any person obtaining a
  * copy of this software and associated documentation files (the "Software"),
  * to deal in the Software without restriction, including without limitation
@@ -46,7 +46,7 @@
 #ifndef __GST_EDGE_DETECT_H__
 #define __GST_EDGE_DETECT_H__
 
-#include <gst/gst.h>
+#include <gstopencvvideofilter.h>
 #include <opencv2/core/core_c.h>
 
 G_BEGIN_DECLS
@@ -61,25 +61,24 @@
   (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_EDGE_DETECT))
 #define GST_IS_EDGE_DETECT_CLASS(klass) \
   (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_EDGE_DETECT))
+
 typedef struct _GstEdgeDetect GstEdgeDetect;
 typedef struct _GstEdgeDetectClass GstEdgeDetectClass;
 
 struct _GstEdgeDetect
 {
-  GstElement element;
-
-  GstPad *sinkpad, *srcpad;
+  GstOpencvVideoFilter element;
 
   gboolean mask;
 
   int threshold1, threshold2, aperture;
 
-  IplImage *cvEdge, *cvGray, *cvImage, *cvCEdge;
+  IplImage *cvEdge, *cvGray, *cvCEdge;
 };
 
 struct _GstEdgeDetectClass
 {
-  GstElementClass parent_class;
+  GstOpencvVideoFilterClass parent_class;
 };
 
 GType gst_edge_detect_get_type (void);
diff --git a/ext/opencv/gstfaceblur.cpp b/ext/opencv/gstfaceblur.cpp
index 40ff4f8..2bc88d1 100644
--- a/ext/opencv/gstfaceblur.cpp
+++ b/ext/opencv/gstfaceblur.cpp
@@ -4,7 +4,7 @@
  * Copyright (C) 2005 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
  * Copyright (C) 2008 Michael Sheldon <mike@mikeasoft.com>
  * Copyright (C) 2011 Robert Jobbagy <jobbagy.robert@gmail.com>
- * 
+ *
  * Permission is hereby granted, free of charge, to any person obtaining a
  * copy of this software and associated documentation files (the "Software"),
  * to deal in the Software without restriction, including without limitation
@@ -61,10 +61,8 @@
 #  include <config.h>
 #endif
 
-#include <gst/gst.h>
 #include <vector>
 
-#include "gstopencvutils.h"
 #include "gstfaceblur.h"
 #include <opencv2/imgproc/imgproc_c.h>
 #include <opencv2/imgproc/imgproc.hpp>
diff --git a/ext/opencv/gstfaceblur.h b/ext/opencv/gstfaceblur.h
index 890c0c9..9c86e1b 100644
--- a/ext/opencv/gstfaceblur.h
+++ b/ext/opencv/gstfaceblur.h
@@ -4,7 +4,7 @@
  * Copyright (C) 2005 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
  * Copyright (C) 2008 Michael Sheldon <mike@mikeasoft.com>
  * Copyright (C) 2011 Robert Jobbagy <jobbagy.robert@gmail.com>
- * 
+ *
  * Permission is hereby granted, free of charge, to any person obtaining a
  * copy of this software and associated documentation files (the "Software"),
  * to deal in the Software without restriction, including without limitation
diff --git a/ext/opencv/gstfacedetect.cpp b/ext/opencv/gstfacedetect.cpp
index 7ec6e39..aff9979 100644
--- a/ext/opencv/gstfacedetect.cpp
+++ b/ext/opencv/gstfacedetect.cpp
@@ -76,11 +76,8 @@
 #  include <config.h>
 #endif
 
-#include <gst/gst.h>
-#include <gst/video/gstvideometa.h>
 #include <vector>
 
-#include "gstopencvutils.h"
 #include "gstfacedetect.h"
 #include <opencv2/imgproc/imgproc_c.h>
 
@@ -573,7 +570,7 @@
   }
 }
 
-/* 
+/*
  * Performs the face detection
  */
 static GstFlowReturn
diff --git a/ext/opencv/gstgrabcut.cpp b/ext/opencv/gstgrabcut.cpp
index c9ff4f9..eaf727b 100644
--- a/ext/opencv/gstgrabcut.cpp
+++ b/ext/opencv/gstgrabcut.cpp
@@ -1,7 +1,7 @@
 /*
  * GStreamer
  * Copyright (C) 2013 Miguel Casas-Sanchez <miguelecasassanchez@gmail.com>
- * 
+ *
  * Permission is hereby granted, free of charge, to any person obtaining a
  * copy of this software and associated documentation files (the "Software"),
  * to deal in the Software without restriction, including without limitation
@@ -48,23 +48,23 @@
  * This element is a wrapper around OpenCV grabcut implementation. GrabCut is an
  * image segmentation method based on graph cuts technique. It can be seen as a
  * way of fine-grain segmenting the image from some FG and BG "seed" areas. The
- * OpenCV implementation follows the article [1]. 
+ * OpenCV implementation follows the article [1].
  * The "seed" areas are taken in this element from either an input bounding box
  * coming from a face detection, or from alpha channel values. The input box is
- * taken from a "face" event such as the one generated from the 'facedetect' 
- * element. The Alpha channel values should be one of the following (cv.hpp): 
- * enum{  
+ * taken from a "face" event such as the one generated from the 'facedetect'
+ * element. The Alpha channel values should be one of the following (cv.hpp):
+ * enum{
  *  GC_BGD    = 0,  //!< background
  *  GC_FGD    = 1,  //!< foreground
  *  GC_PR_BGD = 2,  //!< most probably background
  *  GC_PR_FGD = 3   //!< most probably foreground
  * };
  * with values over GC_PR_FGD interpreted as GC_PR_FGD. IN CASE OF no alpha mask
- * input (all 0's or all 1's), the 'GstOpenCvFaceDetect-face' downstream event 
+ * input (all 0's or all 1's), the 'GstOpenCvFaceDetect-face' downstream event
  * is used to create a bbox of PR_FG elements. If both foreground alpha
  * is not specified and there is no face detection, nothing is done.
  *
- * [1] C. Rother, V. Kolmogorov, and A. Blake, "GrabCut: Interactive foreground 
+ * [1] C. Rother, V. Kolmogorov, and A. Blake, "GrabCut: Interactive foreground
  * extraction using iterated graph cuts, ACM Trans. Graph., vol. 23, pp. 309–314,
  * 2004.
  *
@@ -84,11 +84,9 @@
 #include <config.h>
 #endif
 
-#include <gst/gst.h>
 #include "gstgrabcut.h"
 extern "C"
 {
-#include <gst/video/gstvideometa.h>
 #include <opencv2/imgproc/imgproc_c.h>
 }
 #include <opencv2/imgproc/imgproc.hpp>
@@ -326,8 +324,8 @@
   cvCvtColor (gc->cvRGBAin, gc->cvRGBin, CV_BGRA2BGR);
   compose_matrix_from_image (gc->grabcut_mask, gc->cvD);
 
-  /*  Pass cvD to grabcut_mask for the graphcut stuff but that only if 
-     really there is something in the mask! otherwise -->input bbox is 
+  /*  Pass cvD to grabcut_mask for the graphcut stuff but that only if
+     really there is something in the mask! otherwise -->input bbox is
      what we use */
   alphapixels = cvCountNonZero (gc->cvD);
   if ((0 < alphapixels) && (alphapixels < (gc->width * gc->height))) {
diff --git a/ext/opencv/gsthanddetect.c b/ext/opencv/gsthanddetect.cpp
similarity index 66%
rename from ext/opencv/gsthanddetect.c
rename to ext/opencv/gsthanddetect.cpp
index c4dd390..e36b80e 100644
--- a/ext/opencv/gsthanddetect.c
+++ b/ext/opencv/gsthanddetect.cpp
@@ -62,7 +62,6 @@
 
 /* element header */
 #include "gsthanddetect.h"
-#include "gstopencvutils.h"
 #include <opencv2/imgproc/imgproc_c.h>
 
 GST_DEBUG_CATEGORY_STATIC (gst_handdetect_debug);
@@ -72,6 +71,7 @@
 #define HAAR_FILE_FIST GST_HAAR_CASCADES_DIR G_DIR_SEPARATOR_S "fist.xml"
 #define HAAR_FILE_PALM GST_HAAR_CASCADES_DIR G_DIR_SEPARATOR_S "palm.xml"
 
+using namespace cv;
 /* Filter signals and args */
 enum
 {
@@ -113,8 +113,8 @@
 static GstFlowReturn gst_handdetect_transform_ip (GstOpencvVideoFilter *
     transform, GstBuffer * buffer, IplImage * img);
 
-static CvHaarClassifierCascade *gst_handdetect_load_profile (GstHanddetect *
-    filter, gchar * profile);
+static CascadeClassifier *gst_handdetect_load_profile (GstHanddetect * filter,
+    gchar * profile);
 
 static void gst_handdetect_navigation_interface_init (GstNavigationInterface *
     iface);
@@ -160,10 +160,9 @@
 
   if (filter->cvGray)
     cvReleaseImage (&filter->cvGray);
-  if (filter->cvStorage)
-    cvReleaseMemStorage (&filter->cvStorage);
   g_free (filter->profile_fist);
   g_free (filter->profile_palm);
+  delete (filter->best_r);
 
   G_OBJECT_CLASS (gst_handdetect_parent_class)->finalize (obj);
 }
@@ -191,53 +190,53 @@
       g_param_spec_boolean ("display",
           "Display",
           "Whether the detected hands are highlighted in output frame",
-          TRUE, G_PARAM_READWRITE)
+          TRUE, (GParamFlags)G_PARAM_READWRITE)
       );
   g_object_class_install_property (gobject_class,
       PROP_PROFILE_FIST,
       g_param_spec_string ("profile_fist",
           "Profile_fist",
           "Location of HAAR cascade file (fist gesture)",
-          HAAR_FILE_FIST, G_PARAM_READWRITE)
+          HAAR_FILE_FIST, (GParamFlags)G_PARAM_READWRITE)
       );
   g_object_class_install_property (gobject_class,
       PROP_PROFILE_PALM,
       g_param_spec_string ("profile_palm",
           "Profile_palm",
           "Location of HAAR cascade file (palm gesture)",
-          HAAR_FILE_PALM, G_PARAM_READWRITE)
+          HAAR_FILE_PALM, (GParamFlags)G_PARAM_READWRITE)
       );
   /* FIXME: property name needs fixing */
   g_object_class_install_property (gobject_class,
       PROP_ROI_X,
-      g_param_spec_uint ("ROI_X",
+      g_param_spec_int ("ROI_X",
           "ROI_X",
           "X of left-top pointer in region of interest \nGestures in the defined region of interest will emit messages",
-          0, UINT_MAX, 0, G_PARAM_READWRITE)
+          0, INT_MAX, 0, (GParamFlags)G_PARAM_READWRITE)
       );
   /* FIXME: property name needs fixing */
   g_object_class_install_property (gobject_class,
       PROP_ROI_Y,
-      g_param_spec_uint ("ROI_Y",
+      g_param_spec_int ("ROI_Y",
           "ROI_Y",
           "Y of left-top pointer in region of interest \nGestures in the defined region of interest will emit messages",
-          0, UINT_MAX, 0, G_PARAM_READWRITE)
+          0, INT_MAX, 0, (GParamFlags)G_PARAM_READWRITE)
       );
   /* FIXME: property name needs fixing */
   g_object_class_install_property (gobject_class,
       PROP_ROI_WIDTH,
-      g_param_spec_uint ("ROI_WIDTH",
+      g_param_spec_int ("ROI_WIDTH",
           "ROI_WIDTH",
           "WIDTH of left-top pointer in region of interest \nGestures in the defined region of interest will emit messages",
-          0, UINT_MAX, 0, G_PARAM_READWRITE)
+          0, INT_MAX, 0, (GParamFlags)G_PARAM_READWRITE)
       );
   /* FIXME: property name needs fixing */
   g_object_class_install_property (gobject_class,
       PROP_ROI_HEIGHT,
-      g_param_spec_uint ("ROI_HEIGHT",
+      g_param_spec_int ("ROI_HEIGHT",
           "ROI_HEIGHT",
           "HEIGHT of left-top pointer in region of interest \nGestures in the defined region of interest will emit messages",
-          0, UINT_MAX, 0, G_PARAM_READWRITE)
+          0, INT_MAX, 0, (GParamFlags)G_PARAM_READWRITE)
       );
 
   gst_element_class_set_static_metadata (element_class,
@@ -261,8 +260,17 @@
 static void
 gst_handdetect_init (GstHanddetect * filter)
 {
-  filter->profile_fist = g_strdup (HAAR_FILE_FIST);
-  filter->profile_palm = g_strdup (HAAR_FILE_PALM);
+  const gchar *haar_path;
+
+  haar_path = g_getenv ("GST_HAAR_CASCADES_PATH");
+  if (haar_path) {
+    filter->profile_fist = g_build_filename (haar_path, "fist.xml", NULL);
+    filter->profile_palm = g_build_filename (haar_path, "palm.xml", NULL);
+  } else {
+    filter->profile_fist = g_strdup (HAAR_FILE_FIST);
+    filter->profile_palm = g_strdup (HAAR_FILE_PALM);
+  }
+
   filter->roi_x = 0;
   filter->roi_y = 0;
   filter->roi_width = 0;
@@ -288,7 +296,7 @@
     case PROP_PROFILE_FIST:
       g_free (filter->profile_fist);
       if (filter->cvCascade_fist)
-        cvReleaseHaarClassifierCascade (&filter->cvCascade_fist);
+        delete filter->cvCascade_fist;
       filter->profile_fist = g_value_dup_string (value);
       filter->cvCascade_fist =
           gst_handdetect_load_profile (filter, filter->profile_fist);
@@ -296,7 +304,7 @@
     case PROP_PROFILE_PALM:
       g_free (filter->profile_palm);
       if (filter->cvCascade_palm)
-        cvReleaseHaarClassifierCascade (&filter->cvCascade_palm);
+        delete filter->cvCascade_palm;
       filter->profile_palm = g_value_dup_string (value);
       filter->cvCascade_palm =
           gst_handdetect_load_profile (filter, filter->profile_palm);
@@ -305,16 +313,16 @@
       filter->display = g_value_get_boolean (value);
       break;
     case PROP_ROI_X:
-      filter->roi_x = g_value_get_uint (value);
+      filter->roi_x = g_value_get_int (value);
       break;
     case PROP_ROI_Y:
-      filter->roi_y = g_value_get_uint (value);
+      filter->roi_y = g_value_get_int (value);
       break;
     case PROP_ROI_WIDTH:
-      filter->roi_width = g_value_get_uint (value);
+      filter->roi_width = g_value_get_int (value);
       break;
     case PROP_ROI_HEIGHT:
-      filter->roi_height = g_value_get_uint (value);
+      filter->roi_height = g_value_get_int (value);
       break;
     default:
       G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
@@ -339,16 +347,16 @@
       g_value_set_string (value, filter->profile_palm);
       break;
     case PROP_ROI_X:
-      g_value_set_uint (value, filter->roi_x);
+      g_value_set_int (value, filter->roi_x);
       break;
     case PROP_ROI_Y:
-      g_value_set_uint (value, filter->roi_y);
+      g_value_set_int (value, filter->roi_y);
       break;
     case PROP_ROI_WIDTH:
-      g_value_set_uint (value, filter->roi_width);
+      g_value_set_int (value, filter->roi_width);
       break;
     case PROP_ROI_HEIGHT:
-      g_value_set_uint (value, filter->roi_height);
+      g_value_set_int (value, filter->roi_height);
       break;
     default:
       G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
@@ -376,10 +384,6 @@
   filter->cvGray =
       cvCreateImage (cvSize (in_width, in_height), IPL_DEPTH_8U, 1);
 
-  if (!filter->cvStorage)
-    filter->cvStorage = cvCreateMemStorage (0);
-  else
-    cvClearMemStorage (filter->cvStorage);
   return TRUE;
 }
 
@@ -391,147 +395,54 @@
     GstBuffer * buffer, IplImage * img)
 {
   GstHanddetect *filter = GST_HANDDETECT (transform);
-  CvSeq *hands;
-  CvRect *r;
+  Rect *r;
   GstStructure *s;
   GstMessage *m;
-  int i;
+  unsigned int i;
+  vector < Rect > hands;
 
   /* check detection cascades */
-  if (!filter->cvCascade_fist || !filter->cvCascade_palm)
-    return GST_FLOW_OK;
-
+  if (filter->cvCascade_fist && filter->cvCascade_palm) {
   /* cvt to gray colour space for hand detect */
-  cvCvtColor (img, filter->cvGray, CV_RGB2GRAY);
-  cvClearMemStorage (filter->cvStorage);
+    cvCvtColor (img, filter->cvGray, CV_RGB2GRAY);
 
-  /* detect FIST gesture fist */
-  hands =
-      cvHaarDetectObjects (filter->cvGray, filter->cvCascade_fist,
-      filter->cvStorage, 1.1, 2, CV_HAAR_DO_CANNY_PRUNING, cvSize (24, 24),
-      cvSize (0, 0));
+    /* detect FIST gesture fist */
+    Mat roi (filter->cvGray, Rect (filter->cvGray->origin,
+            filter->cvGray->origin, filter->cvGray->width,
+            filter->cvGray->height));
+    filter->cvCascade_fist->detectMultiScale (roi, hands, 1.1, 2,
+        CV_HAAR_DO_CANNY_PRUNING, cvSize (24, 24), cvSize (0, 0));
 
-  /* if FIST gesture detected */
-  if (hands && hands->total > 0) {
-    int min_distance, distance;
-    CvRect temp_r;
-    CvPoint c;
+    /* if FIST gesture detected */
+    if (!hands.empty ()) {
 
-    GST_DEBUG_OBJECT (filter, "%d FIST gestures detected\n",
-        (int) hands->total);
-
-    /* Go through all detected FIST gestures to get the best one
-     * prev_r => previous hand
-     * best_r => best hand in this frame
-     */
-    /* set min_distance for init comparison */
-    min_distance = img->width + img->height;
-    /* Init filter->prev_r */
-    temp_r = cvRect (0, 0, 0, 0);
-    if (filter->prev_r == NULL)
-      filter->prev_r = &temp_r;
-    /* Get the best FIST gesture */
-    for (i = 0; i < hands->total; i++) {
-      r = (CvRect *) cvGetSeqElem (hands, i);
-      distance = (int) sqrt (pow ((r->x - filter->prev_r->x),
-              2) + pow ((r->y - filter->prev_r->y), 2));
-      if (distance <= min_distance) {
-        min_distance = distance;
-        filter->best_r = r;
-      }
-    }
-    /* Save best_r as prev_r for next frame comparison */
-    filter->prev_r = (CvRect *) filter->best_r;
-    /* send msg to app/bus if the detected gesture falls in the region of interest */
-    /* get center point of gesture */
-    c = cvPoint (filter->best_r->x + filter->best_r->width / 2,
-        filter->best_r->y + filter->best_r->height / 2);
-    /* send message:
-     * if the center point is in the region of interest, OR,
-     * if the region of interest remains default as (0,0,0,0)*/
-    if ((c.x >= filter->roi_x && c.x <= (filter->roi_x + filter->roi_width)
-            && c.y >= filter->roi_y
-            && c.y <= (filter->roi_y + filter->roi_height))
-        || (filter->roi_x == 0
-            && filter->roi_y == 0
-            && filter->roi_width == 0 && filter->roi_height == 0)) {
-      /* Define structure for message post */
-      s = gst_structure_new ("hand-gesture",
-          "gesture", G_TYPE_STRING, "fist",
-          "x", G_TYPE_UINT,
-          (guint) (filter->best_r->x + filter->best_r->width * 0.5), "y",
-          G_TYPE_UINT,
-          (guint) (filter->best_r->y + filter->best_r->height * 0.5), "width",
-          G_TYPE_UINT, (guint) filter->best_r->width, "height", G_TYPE_UINT,
-          (guint) filter->best_r->height, NULL);
-      /* Init message element */
-      m = gst_message_new_element (GST_OBJECT (filter), s);
-      /* Send message */
-      gst_element_post_message (GST_ELEMENT (filter), m);
-
-#if 0
-      /* send event
-       * here we use mouse-move event instead of fist-move or palm-move event
-       * !!! this will CHANGE in the future !!!
-       * !!! by adding gst_navigation_send_hand_detect_event() in navigation.c !!!
-       */
-      gst_navigation_send_mouse_event (GST_NAVIGATION (filter),
-          "mouse-move",
-          0,
-          (double) (filter->best_r->x + filter->best_r->width * 0.5),
-          (double) (filter->best_r->y + filter->best_r->height * 0.5));
-#endif
-    }
-    /* Check filter->display,
-     * If TRUE, displaying red circle marker in the out frame */
-    if (filter->display) {
-      CvPoint center;
-      int radius;
-      center.x = cvRound ((filter->best_r->x + filter->best_r->width * 0.5));
-      center.y = cvRound ((filter->best_r->y + filter->best_r->height * 0.5));
-      radius =
-          cvRound ((filter->best_r->width + filter->best_r->height) * 0.25);
-      cvCircle (img, center, radius, CV_RGB (0, 0, 200), 1, 8, 0);
-    }
-  } else {
-    /* if NO FIST gesture, detecting PALM gesture */
-    hands =
-        cvHaarDetectObjects (filter->cvGray, filter->cvCascade_palm,
-        filter->cvStorage, 1.1, 3, CV_HAAR_DO_CANNY_PRUNING, cvSize (24, 24),
-        cvSize (0, 0));
-    /* if PALM detected */
-    if (hands && hands->total > 0) {
       int min_distance, distance;
-      CvRect temp_r;
+      Rect temp_r;
       CvPoint c;
-      /* set frame buffer writable */
-      if (filter->display) {
-        buffer = gst_buffer_make_writable (buffer);
-        GST_DEBUG_OBJECT (filter, "%d PALM gestures detected\n",
-            (int) hands->total);
-      }
-      /* Go through all detected PALM gestures to get the best one
+
+      /* Go through all detected FIST gestures to get the best one
        * prev_r => previous hand
        * best_r => best hand in this frame
        */
-      /* suppose a min_distance for init comparison */
+      /* set min_distance for init comparison */
       min_distance = img->width + img->height;
       /* Init filter->prev_r */
-      temp_r = cvRect (0, 0, 0, 0);
+      temp_r = Rect (0, 0, 0, 0);
       if (filter->prev_r == NULL)
         filter->prev_r = &temp_r;
-      /* Get the best PALM gesture */
-      for (i = 0; i < hands->total; i++) {
-        r = (CvRect *) cvGetSeqElem (hands, i);
+      /* Get the best FIST gesture */
+      for (i = 0; i < hands.size(); i++) {
+        r = &hands[i];
         distance = (int) sqrt (pow ((r->x - filter->prev_r->x),
                 2) + pow ((r->y - filter->prev_r->y), 2));
         if (distance <= min_distance) {
           min_distance = distance;
-          filter->best_r = r;
+          delete (filter->best_r);
+          filter->best_r = new Rect (*r);
         }
       }
       /* Save best_r as prev_r for next frame comparison */
-      filter->prev_r = (CvRect *) filter->best_r;
+      filter->prev_r = filter->best_r;
 
       /* send msg to app/bus if the detected gesture falls in the region of interest */
       /* get center point of gesture */
@@ -548,13 +459,13 @@
               && filter->roi_width == 0 && filter->roi_height == 0)) {
         /* Define structure for message post */
         s = gst_structure_new ("hand-gesture",
-            "gesture", G_TYPE_STRING, "palm",
-            "x", G_TYPE_UINT,
-            (guint) (filter->best_r->x + filter->best_r->width * 0.5), "y",
-            G_TYPE_UINT,
-            (guint) (filter->best_r->y + filter->best_r->height * 0.5), "width",
-            G_TYPE_UINT, (guint) filter->best_r->width, "height", G_TYPE_UINT,
-            (guint) filter->best_r->height, NULL);
+            "gesture", G_TYPE_STRING, "fist",
+            "x", G_TYPE_INT,
+            (gint) (filter->best_r->x + filter->best_r->width * 0.5), "y",
+            G_TYPE_INT,
+            (gint) (filter->best_r->y + filter->best_r->height * 0.5), "width",
+            G_TYPE_INT, (gint) filter->best_r->width, "height", G_TYPE_INT,
+            (gint) filter->best_r->height, NULL);
         /* Init message element */
         m = gst_message_new_element (GST_OBJECT (filter), s);
         /* Send message */
@@ -572,20 +483,6 @@
             (double) (filter->best_r->x + filter->best_r->width * 0.5),
             (double) (filter->best_r->y + filter->best_r->height * 0.5));
 
-        /* or use another way to send upstream navigation event for debug
-         *
-         * GstEvent *event =
-         * gst_event_new_navigation (gst_structure_new
-         * ("application/x-gst-navigation", "event", G_TYPE_STRING,
-         * "mouse-move",
-         * "button", G_TYPE_INT, 0,
-         * "pointer_x", G_TYPE_DOUBLE,
-         * (double) (filter->best_r->x + filter->best_r->width * 0.5),
-         * "pointer_y", G_TYPE_DOUBLE,
-         * (double) (filter->best_r->y + filter->best_r->height * 0.5),
-         * NULL));
-         * gst_pad_send_event (GST_BASE_TRANSFORM_CAST (filter)->srcpad, event);
-         */
 #endif
       }
       /* Check filter->display,
@@ -599,6 +496,113 @@
             cvRound ((filter->best_r->width + filter->best_r->height) * 0.25);
         cvCircle (img, center, radius, CV_RGB (0, 0, 200), 1, 8, 0);
       }
+    } else {
+     /* if NO FIST gesture, detecting PALM gesture */
+      filter->cvCascade_palm->detectMultiScale (roi, hands, 1.1, 2,
+          CV_HAAR_DO_CANNY_PRUNING, cvSize (24, 24), cvSize (0, 0));
+      /* if PALM detected */
+      if (!hands.empty ()) {
+        int min_distance, distance;
+        Rect temp_r;
+        CvPoint c;
+
+        if (filter->display) {
+          GST_DEBUG_OBJECT (filter, "%d PALM gestures detected\n",
+              (int) hands.size ());
+        }
+        /* Go through all detected PALM gestures to get the best one
+         * prev_r => previous hand
+         * best_r => best hand in this frame
+         */
+        /* suppose a min_distance for init comparison */
+        min_distance = img->width + img->height;
+        /* Init filter->prev_r */
+        temp_r = Rect (0, 0, 0, 0);
+       if (filter->prev_r == NULL)
+          filter->prev_r = &temp_r;
+        /* Get the best PALM gesture */
+        for (i = 0; i < hands.size (); ++i) {
+          r = &hands[i];
+          distance = (int) sqrt (pow ((r->x - filter->prev_r->x),
+                  2) + pow ((r->y - filter->prev_r->y), 2));
+          if (distance <= min_distance) {
+            min_distance = distance;
+            delete (filter->best_r);
+            filter->best_r = new Rect (*r);
+          }
+        }
+        /* Save best_r as prev_r for next frame comparison */
+        filter->prev_r = filter->best_r;
+
+        /* send msg to app/bus if the detected gesture falls in the region of interest */
+        /* get center point of gesture */
+        c = cvPoint (filter->best_r->x + filter->best_r->width / 2,
+            filter->best_r->y + filter->best_r->height / 2);
+        /* send message:
+         * if the center point is in the region of interest, OR,
+         * if the region of interest remains default as (0,0,0,0)*/
+        if (((gint) c.x >= filter->roi_x
+                && (gint) c.x <= (filter->roi_x + filter->roi_width)
+                && (gint) c.y >= filter->roi_y
+                && (gint) c.y <= (filter->roi_y + filter->roi_height))
+            || (filter->roi_x == 0 && filter->roi_y == 0
+                && filter->roi_width == 0 && filter->roi_height == 0)) {
+          /* Define structure for message post */
+          s = gst_structure_new ("hand-gesture",
+              "gesture", G_TYPE_STRING, "palm",
+              "x", G_TYPE_INT,
+              (gint) (filter->best_r->x + filter->best_r->width * 0.5), "y",
+              G_TYPE_INT,
+              (gint) (filter->best_r->y + filter->best_r->height * 0.5),
+              "width", G_TYPE_INT, (gint) filter->best_r->width, "height",
+              G_TYPE_INT, (gint) filter->best_r->height, NULL);
+          /* Init message element */
+          m = gst_message_new_element (GST_OBJECT (filter), s);
+          /* Send message */
+          gst_element_post_message (GST_ELEMENT (filter), m);
+
+#if 0
+          /* send event
+           * here we use mouse-move event instead of fist-move or palm-move event
+           * !!! this will CHANGE in the future !!!
+           * !!! by adding gst_navigation_send_hand_detect_event() in navigation.c !!!
+           */
+          gst_navigation_send_mouse_event (GST_NAVIGATION (filter),
+              "mouse-move",
+              0,
+              (double) (filter->best_r->x + filter->best_r->width * 0.5),
+              (double) (filter->best_r->y + filter->best_r->height * 0.5));
+
+          /* or use another way to send upstream navigation event for debug
+           *
+           * GstEvent *event =
+           * gst_event_new_navigation (gst_structure_new
+           * ("application/x-gst-navigation", "event", G_TYPE_STRING,
+           * "mouse-move",
+           * "button", G_TYPE_INT, 0,
+           * "pointer_x", G_TYPE_DOUBLE,
+           * (double) (filter->best_r->x + filter->best_r->width * 0.5),
+           * "pointer_y", G_TYPE_DOUBLE,
+           * (double) (filter->best_r->y + filter->best_r->height * 0.5),
+           * NULL));
+           * gst_pad_send_event (GST_BASE_TRANSFORM_CAST (filter)->srcpad, event);
+           */
+#endif
+        }
+        /* Check filter->display,
+         * If TRUE, displaying red circle marker in the out frame */
+        if (filter->display) {
+          CvPoint center;
+          int radius;
+          center.x =
+              cvRound ((filter->best_r->x + filter->best_r->width * 0.5));
+          center.y =
+              cvRound ((filter->best_r->y + filter->best_r->height * 0.5));
+          radius =
+              cvRound ((filter->best_r->width + filter->best_r->height) * 0.25);
+          cvCircle (img, center, radius, CV_RGB (0, 0, 200), 1, 8, 0);
+        }
+      }
     }
   }
 
@@ -606,17 +610,18 @@
   return GST_FLOW_OK;
 }
 
-static CvHaarClassifierCascade *
+static CascadeClassifier *
 gst_handdetect_load_profile (GstHanddetect * filter, gchar * profile)
 {
-  CvHaarClassifierCascade *cascade;
+  CascadeClassifier *cascade;
 
-  if (profile == NULL)
+  cascade = new CascadeClassifier (profile);
+  if (cascade->empty ()) {
+    GST_ERROR_OBJECT (filter, "Invalid profile file: %s", profile);
+    delete cascade;
     return NULL;
-  if (!(cascade = (CvHaarClassifierCascade *) cvLoad (profile, 0, 0, 0))) {
-    GST_WARNING_OBJECT (filter, "Couldn't load Haar classifier cascade: %s.",
-        profile);
   }
+
   return cascade;
 }
 
diff --git a/ext/opencv/gsthanddetect.h b/ext/opencv/gsthanddetect.h
index 01a30bd..39308c8 100644
--- a/ext/opencv/gsthanddetect.h
+++ b/ext/opencv/gsthanddetect.h
@@ -45,9 +45,7 @@
 #ifndef __GST_HANDDETECT_H__
 #define __GST_HANDDETECT_H__
 
-#include <gst/gst.h>
-#include <gst/video/video.h>
-#include <gst/video/navigation.h>
+#include <cv.h>
 
 #include "gstopencvvideofilter.h"
 /* opencv */
@@ -83,20 +81,19 @@
   gchar *profile_fist;
   gchar *profile_palm;
   /* region of interest */
-  guint roi_x;
-  guint roi_y;
-  guint roi_width;
-  guint roi_height;
+  gint roi_x;
+  gint roi_y;
+  gint roi_width;
+  gint roi_height;
 
   /* opencv
    * cvGray - image to gray colour
    */
   IplImage *cvGray;
-  CvHaarClassifierCascade *cvCascade_fist;
-  CvHaarClassifierCascade *cvCascade_palm;
-  CvMemStorage *cvStorage;
-  CvRect *prev_r;
-  CvRect *best_r;
+  cv::CascadeClassifier *cvCascade_fist;
+  cv::CascadeClassifier *cvCascade_palm;
+  cv::Rect *prev_r;
+  cv::Rect *best_r;
 };
 
 struct _GstHanddetectClass
diff --git a/ext/opencv/gstmotioncells.c b/ext/opencv/gstmotioncells.cpp
similarity index 66%
rename from ext/opencv/gstmotioncells.c
rename to ext/opencv/gstmotioncells.cpp
index 2de99ab..e1d412f 100644
--- a/ext/opencv/gstmotioncells.c
+++ b/ext/opencv/gstmotioncells.cpp
@@ -1,8 +1,8 @@
 /*
- * GStreamer MotioCells detect areas of motion
+ * GStreamer MotionCells detect areas of motion
  * Copyright (C) 2011 Robert Jobbagy <jobbagy.robert@gmail.com>
  * Copyright (C) 2011 Nicola Murino <nicola.murino@gmail.com>
- * 
+ *
  * Permission is hereby granted, free of charge, to any person obtaining a
  * copy of this software and associated documentation files (the "Software"),
  * to deal in the Software without restriction, including without limitation
@@ -50,7 +50,7 @@
  * <refsect2>
  * <title>Example launch line</title>
  * |[
- * gst-launch-0.10 videotestsrc pattern=18 ! videorate ! videoscale ! video/x-raw,width=320,height=240,framerate=5/1 ! videoconvert ! motioncells ! videoconvert ! xvimagesink
+ * gst-launch-1.0 videotestsrc pattern=18 ! videorate ! videoscale ! video/x-raw,width=320,height=240,framerate=5/1 ! videoconvert ! motioncells ! videoconvert ! xvimagesink
  * ]|
  * </refsect2>
  */
@@ -59,16 +59,7 @@
 #  include <config.h>
 #endif
 
-#include <stdio.h>
-#include <string.h>
-#include <sys/time.h>
-#include <time.h>
-#include <limits.h>
-
-#include <glib.h>
 #include "gstmotioncells.h"
-#include "motioncells_wrapper.h"
-#include <gst/video/video.h>
 
 GST_DEBUG_CATEGORY_STATIC (gst_motion_cells_debug);
 #define GST_CAT_DEFAULT gst_motion_cells_debug
@@ -150,7 +141,7 @@
     GST_PAD_ALWAYS,
     GST_STATIC_CAPS (GST_VIDEO_CAPS_MAKE ("RGB")));
 
-G_DEFINE_TYPE (GstMotioncells, gst_motion_cells, GST_TYPE_ELEMENT);
+G_DEFINE_TYPE (GstMotioncells, gst_motion_cells, GST_TYPE_OPENCV_VIDEO_FILTER);
 
 static void gst_motion_cells_set_property (GObject * object, guint prop_id,
     const GValue * value, GParamSpec * pspec);
@@ -159,8 +150,8 @@
 
 static gboolean gst_motion_cells_handle_sink_event (GstPad * pad,
     GstObject * parent, GstEvent * event);
-static GstFlowReturn gst_motion_cells_chain (GstPad * pad, GstObject * parent,
-    GstBuffer * buf);
+static GstFlowReturn gst_motion_cells_transform_ip (GstOpencvVideoFilter *
+    filter, GstBuffer * buf, IplImage * img);
 
 static void gst_motioncells_update_motion_cells (GstMotioncells * filter);
 static void gst_motioncells_update_motion_masks (GstMotioncells * filter);
@@ -185,10 +176,6 @@
     GFREE (filter->motioncellsidx);
   }
 
-  if (filter->cvImage) {
-    cvReleaseImage (&filter->cvImage);
-  }
-
   GFREE (filter->motioncellscolor);
   GFREE (filter->prev_datafile);
   GFREE (filter->cur_datafile);
@@ -203,106 +190,117 @@
 gst_motion_cells_class_init (GstMotioncellsClass * klass)
 {
   GObjectClass *gobject_class;
+  GstOpencvVideoFilterClass *gstopencvbasefilter_class;
 
   GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
   gobject_class = (GObjectClass *) klass;
+  gstopencvbasefilter_class = (GstOpencvVideoFilterClass *) klass;
 
   gobject_class->finalize = GST_DEBUG_FUNCPTR (gst_motion_cells_finalize);
   gobject_class->set_property = gst_motion_cells_set_property;
   gobject_class->get_property = gst_motion_cells_get_property;
 
+  gstopencvbasefilter_class->cv_trans_ip_func = gst_motion_cells_transform_ip;
+
   g_object_class_install_property (gobject_class, PROP_GRID_X,
       g_param_spec_int ("gridx", "Number of Horizontal Grids",
-          "You can give number of horizontal grid cells.", GRID_MIN, GRID_MAX,
-          GRID_DEF, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+          "Number of horizontal grid cells.", GRID_MIN, GRID_MAX,
+          GRID_DEF,
+          (GParamFlags) (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)));
   g_object_class_install_property (gobject_class, PROP_GRID_Y,
       g_param_spec_int ("gridy", "Number of Vertical Grids",
-          "You can give number of vertical grid cells.", GRID_MIN, GRID_MAX,
-          GRID_DEF, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+          "Number of vertical grid cells.", GRID_MIN, GRID_MAX,
+          GRID_DEF,
+          (GParamFlags) (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)));
   g_object_class_install_property (gobject_class, PROP_SENSITIVITY,
       g_param_spec_double ("sensitivity", "Motion Sensitivity",
-          "You can tunning the element motion sensitivity.", SENSITIVITY_MIN,
+          "Motion detection sensitivity.", SENSITIVITY_MIN,
           SENSITIVITY_MAX, SENSITIVITY_DEFAULT,
-          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+          (GParamFlags) (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)));
   g_object_class_install_property (gobject_class, PROP_THRESHOLD,
       g_param_spec_double ("threshold", "Lower bound of motion cells number",
-          "Threshold value for motion, when motion cells number greater sum cells * threshold, we show motion.",
+          "Threshold value for motion. Filter detects motion when at least "
+          "this fraction of the cells have moved",
           THRESHOLD_MIN, THRESHOLD_MAX, THRESHOLD_DEFAULT,
-          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+          (GParamFlags) (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)));
   g_object_class_install_property (gobject_class, PROP_GAP,
-      g_param_spec_int ("gap",
-          "Gap is time in second, elapsed time from last motion timestamp. ",
-          "If elapsed time minus form last motion timestamp is greater or equal than gap then we post motion finished bus message. ",
+      g_param_spec_int ("gap", "Motion-finished Threshold",
+          "Interval in seconds after which motion is considered finished "
+          "and a motion finished bus message is posted.",
           GAP_MIN, GAP_MAX, GAP_DEF,
-          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+          (GParamFlags) (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)));
   g_object_class_install_property (gobject_class, PROP_POSTNOMOTION,
-      g_param_spec_int ("postnomotion", "POSTNOMOTION",
-          "If non 0 post a no_motion event is posted on the bus if no motion is detected for N seconds",
+      g_param_spec_int ("postnomotion", "No-motion Threshold",
+          "If non 0, post a no_motion event on the bus if no motion is "
+          "detected for the given number of seconds",
           POST_NO_MOTION_MIN, POST_NO_MOTION_MAX, POST_NO_MOTION_DEF,
-          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+          (GParamFlags) (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)));
   g_object_class_install_property (gobject_class, PROP_MINIMUNMOTIONFRAMES,
-      g_param_spec_int ("minimummotionframes", "MINIMUN MOTION FRAMES",
-          "Define the minimum number of motion frames that trigger a motion event",
+      g_param_spec_int ("minimummotionframes", "Minimum Motion Frames",
+          "Minimum number of motion frames triggering a motion event",
           MINIMUM_MOTION_FRAMES_MIN, MINIMUM_MOTION_FRAMES_MAX,
           MINIMUM_MOTION_FRAMES_DEF,
-          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+          (GParamFlags) (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)));
   g_object_class_install_property (gobject_class, PROP_DISPLAY,
       g_param_spec_boolean ("display", "Display",
-          "Motion Cells visible or not on Current Frame", FALSE,
-          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+          "Toggle display of motion cells on current frame", FALSE,
+          (GParamFlags) (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)));
   g_object_class_install_property (gobject_class, PROP_POSTALLMOTION,
       g_param_spec_boolean ("postallmotion", "Post All Motion",
-          "Element post bus msg for every motion frame or just motion start and motion stop",
-          FALSE, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+          "Post bus messages for every motion frame or just motion start and "
+          "motion stop",
+          FALSE, (GParamFlags) (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)));
   g_object_class_install_property (gobject_class, PROP_USEALPHA,
       g_param_spec_boolean ("usealpha", "Use alpha",
-          "Use or not alpha blending on frames with motion cells", TRUE,
-          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+          "Toggle usage of alpha blending on frames with motion cells", TRUE,
+          (GParamFlags) (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)));
 #if 0
   /* FIXME: should not be a long property, make it either gint or gint64
    * (is this property actually used or useful for anything?) */
   g_object_class_install_property (gobject_class, PROP_DATE,
       g_param_spec_long ("date", "Motion Cell Date",
           "Current Date in milliseconds", DATE_MIN, DATE_MAX, DATE_DEF,
-          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+          (GParamFlags) (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)));
 #endif
   g_object_class_install_property (gobject_class, PROP_DATAFILE,
       g_param_spec_string ("datafile", "DataFile",
           "Location of motioncells data file (empty string means no saving)",
-          NULL, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+          NULL, (GParamFlags) (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)));
   g_object_class_install_property (gobject_class, PROP_DATAFILE_EXT,
       g_param_spec_string ("datafileextension", "DataFile Extension",
           "Extension of datafile", DEF_DATAFILEEXT,
-          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+          (GParamFlags) (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)));
   g_object_class_install_property (gobject_class, PROP_MOTIONMASKCOORD,
       g_param_spec_string ("motionmaskcoords", "Motion Mask with Coordinates",
-          "The upper left x, y and lower right x, y coordinates separated with \":\", "
-          "describe a region. Regions separated with \",\"", NULL,
-          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+          "Describe a region with its upper left and lower right x, y "
+          "coordinates separated with \":\". Pass multiple regions as a "
+          "comma-separated list", NULL,
+          (GParamFlags) (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)));
   g_object_class_install_property (gobject_class, PROP_MOTIONMASKCELLSPOS,
       g_param_spec_string ("motionmaskcellspos",
           "Motion Mask with Cells Position",
-          "The line and column idx separated with \":\" what cells want we mask-out, "
-          "describe a cell. Cells separated with \",\"", NULL,
-          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+          "Describe a cell with its line and column idx separated with \":\". "
+          "Pass multiple cells as a comma-separated list", NULL,
+          (GParamFlags) (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)));
   g_object_class_install_property (gobject_class, PROP_CELLSCOLOR,
       g_param_spec_string ("cellscolor", "Color of Motion Cells",
-          "The color of motion cells separated with \",\"", "255,255,0",
-          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+          "Color for motion cells in R,G,B format. Max per channel is 255",
+          "255,255,0",
+          (GParamFlags) (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)));
   g_object_class_install_property (gobject_class, PROP_MOTIONCELLSIDX,
       g_param_spec_string ("motioncellsidx", "Motion Cells Of Interest(MOCI)",
-          "The line and column idx separated with \":\", "
-          "describe a cell. Cells separated with \",\"", NULL,
-          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+          "Describe a cell with its line and column idx separated with \":\". "
+          "Pass multiple cells as a comma-separated list", NULL,
+          (GParamFlags) (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)));
   g_object_class_install_property (gobject_class, PROP_CALCULATEMOTION,
       g_param_spec_boolean ("calculatemotion", "Calculate Motion",
-          "If needs calculate motion on frame you need this property setting true otherwise false",
-          TRUE, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+          "Toggles motion calculation. If FALSE, this filter does nothing",
+          TRUE, (GParamFlags) (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)));
   g_object_class_install_property (gobject_class, PROP_MOTIONCELLTHICKNESS,
       g_param_spec_int ("motioncellthickness", "Motion Cell Thickness",
-          "Motion Cell Border Thickness, if it's -1 then motion cell will be fill",
+          "Motion Cell Border Thickness. Set to -1 to fill motion cell",
           THICKNESS_MIN, THICKNESS_MAX, THICKNESS_DEF,
-          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+          (GParamFlags) (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)));
 
   gst_element_class_set_static_metadata (element_class,
       "motioncells",
@@ -324,19 +322,8 @@
 static void
 gst_motion_cells_init (GstMotioncells * filter)
 {
-  filter->sinkpad = gst_pad_new_from_static_template (&sink_factory, "sink");
-  GST_PAD_SET_PROXY_CAPS (filter->sinkpad);
-
-  gst_pad_set_event_function (filter->sinkpad,
+  gst_pad_set_event_function (GST_BASE_TRANSFORM_SINK_PAD (filter),
       GST_DEBUG_FUNCPTR (gst_motion_cells_handle_sink_event));
-  gst_pad_set_chain_function (filter->sinkpad,
-      GST_DEBUG_FUNCPTR (gst_motion_cells_chain));
-
-  filter->srcpad = gst_pad_new_from_static_template (&src_factory, "src");
-  GST_PAD_SET_PROXY_CAPS (filter->srcpad);
-
-  gst_element_add_pad (GST_ELEMENT (filter), filter->sinkpad);
-  gst_element_add_pad (GST_ELEMENT (filter), filter->srcpad);
 
   filter->display = TRUE;
   filter->calculate_motion = TRUE;
@@ -349,9 +336,9 @@
   filter->postnomotion = POST_NO_MOTION_DEF;
   filter->minimum_motion_frames = MINIMUM_MOTION_FRAMES_DEF;
 
-  filter->prev_datafile = g_strdup (NULL);
-  filter->cur_datafile = g_strdup (NULL);
-  filter->basename_datafile = g_strdup (NULL);
+  filter->prev_datafile = NULL;
+  filter->cur_datafile = NULL;
+  filter->basename_datafile = NULL;
   filter->datafile_extension = g_strdup (DEF_DATAFILEEXT);
   filter->sensitivity = SENSITIVITY_DEFAULT;
   filter->threshold = THRESHOLD_DEFAULT;
@@ -394,6 +381,8 @@
   filter->datafileidx = 0;
   filter->id = motion_cells_init ();
 
+  gst_opencv_video_filter_set_in_place (GST_OPENCV_VIDEO_FILTER_CAST (filter),
+      TRUE);
 }
 
 static void
@@ -467,7 +456,7 @@
       filter->basename_datafile = g_value_dup_string (value);
 
       if (strlen (filter->basename_datafile) == 0) {
-        filter->cur_datafile = g_strdup (NULL);
+        filter->cur_datafile = NULL;
         break;
       }
       filter->cur_datafile =
@@ -518,8 +507,7 @@
           filter->motionmaskcoord_count = 0;
         }
       }
-      if (strs)
-        g_strfreev (strs);
+      g_strfreev (strs);
       tmpux = -1;
       tmpuy = -1;
       tmplx = -1;
@@ -546,18 +534,20 @@
           filter->motionmaskcells_count = 0;
         }
       }
-      if (motionmaskcellsstr)
-        g_strfreev (motionmaskcellsstr);
+      g_strfreev (motionmaskcellsstr);
       tmpux = -1;
       tmpuy = -1;
       tmplx = -1;
       tmply = -1;
       break;
     case PROP_CELLSCOLOR:
-      colorstr = g_strsplit (g_value_get_string (value), ",", 255);
+      colorstr = g_strsplit (g_value_get_string (value), ",", 4);
       for (cellscolorscnt = 0; colorstr[cellscolorscnt] != NULL;
           ++cellscolorscnt);
-      if (cellscolorscnt == 3) {
+      if (cellscolorscnt != 3) {
+        GST_WARNING_OBJECT (filter, "Ignoring badly-formatted cellscolor RGB "
+            "string");
+      } else {
         sscanf (colorstr[0], "%d", &r);
         sscanf (colorstr[1], "%d", &g);
         sscanf (colorstr[2], "%d", &b);
@@ -569,8 +559,7 @@
         filter->motioncellscolor->G_channel_value = g;
         filter->motioncellscolor->B_channel_value = b;
       }
-      if (colorstr)
-        g_strfreev (colorstr);
+      g_strfreev (colorstr);
       break;
     case PROP_MOTIONCELLSIDX:
       motioncellsstr = g_strsplit (g_value_get_string (value), ",", 255);
@@ -596,8 +585,7 @@
           filter->motioncells_count = 0;
         }
       }
-      if (motioncellsstr)
-        g_strfreev (motioncellsstr);
+      g_strfreev (motioncellsstr);
       tmpux = -1;
       tmpuy = -1;
       tmplx = -1;
@@ -834,11 +822,6 @@
       filter->height = info.height;
 
       filter->framerate = (double) info.fps_n / (double) info.fps_d;
-      if (filter->cvImage)
-        cvReleaseImage (&filter->cvImage);
-      filter->cvImage =
-          cvCreateImage (cvSize (filter->width, filter->height), IPL_DEPTH_8U,
-          3);
       break;
     }
     default:
@@ -848,19 +831,17 @@
   res = gst_pad_event_default (pad, parent, event);
 
   return res;
-
-
 }
 
 /* chain function
  * this function does the actual processing
  */
 static GstFlowReturn
-gst_motion_cells_chain (GstPad * pad, GstObject * parent, GstBuffer * buf)
+gst_motion_cells_transform_ip (GstOpencvVideoFilter * base, GstBuffer * buf,
+    IplImage * img)
 {
-  GstMotioncells *filter;
-  GstMapInfo info;
-  filter = gst_motion_cells (parent);
+  GstMotioncells *filter = gst_motion_cells (base);
+
   GST_OBJECT_LOCK (filter);
   if (filter->calculate_motion) {
     double sensitivity;
@@ -868,8 +849,8 @@
         motioncells_count, i;
     int thickness, success, motioncellsidxcnt, numberOfCells,
         motioncellsnumber, cellsOfInterestNumber;
-    int mincellsOfInterestNumber, motiondetect, minimum_motion_frames,
-        postnomotion;
+    int mincellsOfInterestNumber, motiondetect;
+    uint minimum_motion_frames, postnomotion;
     char *datafile;
     bool display, changed_datafile, useAlpha;
     gint64 starttime;
@@ -879,230 +860,235 @@
     motioncellidx *motioncellsidx;
 
     buf = gst_buffer_make_writable (buf);
-    if (gst_buffer_map (buf, &info, GST_MAP_WRITE)) {
-      filter->cvImage->imageData = (char *) info.data;
-      if (filter->firstframe) {
-        setPrevFrame (filter->cvImage, filter->id);
-        filter->firstframe = FALSE;
-      }
-      minimum_motion_frames = filter->minimum_motion_frames;
-      postnomotion = filter->postnomotion;
-      sensitivity = filter->sensitivity;
-      framerate = filter->framerate;
-      gridx = filter->gridx;
-      gridy = filter->gridy;
-      display = filter->display;
-      motionmaskcoord_count = filter->motionmaskcoord_count;
-      motionmaskcoords =
-          g_new0 (motionmaskcoordrect, filter->motionmaskcoord_count);
-      for (i = 0; i < filter->motionmaskcoord_count; i++) {     //we need divide 2 because we use gauss pyramid in C++ side
-        motionmaskcoords[i].upper_left_x =
-            filter->motionmaskcoords[i].upper_left_x / 2;
-        motionmaskcoords[i].upper_left_y =
-            filter->motionmaskcoords[i].upper_left_y / 2;
-        motionmaskcoords[i].lower_right_x =
-            filter->motionmaskcoords[i].lower_right_x / 2;
-        motionmaskcoords[i].lower_right_y =
-            filter->motionmaskcoords[i].lower_right_y / 2;
-      }
+    if (filter->firstframe) {
+      setPrevFrame (img, filter->id);
+      filter->firstframe = FALSE;
+    }
 
-      motioncellscolor.R_channel_value =
-          filter->motioncellscolor->R_channel_value;
-      motioncellscolor.G_channel_value =
-          filter->motioncellscolor->G_channel_value;
-      motioncellscolor.B_channel_value =
-          filter->motioncellscolor->B_channel_value;
+    minimum_motion_frames = filter->minimum_motion_frames;
+    postnomotion = filter->postnomotion;
+    sensitivity = filter->sensitivity;
+    framerate = filter->framerate;
+    gridx = filter->gridx;
+    gridy = filter->gridy;
+    display = filter->display;
+    motionmaskcoord_count = filter->motionmaskcoord_count;
+    motionmaskcoords =
+        g_new0 (motionmaskcoordrect, filter->motionmaskcoord_count);
+    for (i = 0; i < filter->motionmaskcoord_count; i++) {       //we need divide 2 because we use gauss pyramid in C++ side
+      motionmaskcoords[i].upper_left_x =
+          filter->motionmaskcoords[i].upper_left_x / 2;
+      motionmaskcoords[i].upper_left_y =
+          filter->motionmaskcoords[i].upper_left_y / 2;
+      motionmaskcoords[i].lower_right_x =
+          filter->motionmaskcoords[i].lower_right_x / 2;
+      motionmaskcoords[i].lower_right_y =
+          filter->motionmaskcoords[i].lower_right_y / 2;
+    }
 
-      if ((filter->changed_gridx || filter->changed_gridy
-              || filter->changed_startime)) {
-        if ((g_strcmp0 (filter->cur_datafile, NULL) != 0)) {
-          GFREE (filter->cur_datafile);
-          filter->datafileidx++;
-          filter->cur_datafile =
-              g_strdup_printf ("%s-%d.%s", filter->basename_datafile,
-              filter->datafileidx, filter->datafile_extension);
-          filter->changed_datafile = TRUE;
-          motion_cells_free_resources (filter->id);
-        }
-        if (filter->motioncells_count > 0)
-          gst_motioncells_update_motion_cells (filter);
-        if (filter->motionmaskcells_count > 0)
-          gst_motioncells_update_motion_masks (filter);
-        filter->changed_gridx = FALSE;
-        filter->changed_gridy = FALSE;
-        filter->changed_startime = FALSE;
-      }
-      datafile = g_strdup (filter->cur_datafile);
-      filter->cur_buff_timestamp = (GST_BUFFER_TIMESTAMP (buf) / GST_MSECOND);
-      filter->starttime +=
-          (filter->cur_buff_timestamp - filter->prev_buff_timestamp);
-      starttime = filter->starttime;
-      if (filter->changed_datafile || filter->diff_timestamp < 0)
-        filter->diff_timestamp =
-            (gint64) (GST_BUFFER_TIMESTAMP (buf) / GST_MSECOND);
-      changed_datafile = filter->changed_datafile;
-      motionmaskcells_count = filter->motionmaskcells_count;
-      motionmaskcellsidx =
-          g_new0 (motioncellidx, filter->motionmaskcells_count);
-      for (i = 0; i < filter->motionmaskcells_count; i++) {
-        motionmaskcellsidx[i].lineidx = filter->motionmaskcellsidx[i].lineidx;
-        motionmaskcellsidx[i].columnidx =
-            filter->motionmaskcellsidx[i].columnidx;
-      }
-      motioncells_count = filter->motioncells_count;
-      motioncellsidx = g_new0 (motioncellidx, filter->motioncells_count);
-      for (i = 0; i < filter->motioncells_count; i++) {
-        motioncellsidx[i].lineidx = filter->motioncellsidx[i].lineidx;
-        motioncellsidx[i].columnidx = filter->motioncellsidx[i].columnidx;
-      }
-      useAlpha = filter->usealpha;
-      thickness = filter->thickness;
-      success =
-          perform_detection_motion_cells (filter->cvImage, sensitivity,
-          framerate, gridx, gridy,
-          (gint64) (GST_BUFFER_TIMESTAMP (buf) / GST_MSECOND) -
-          filter->diff_timestamp, display, useAlpha, motionmaskcoord_count,
-          motionmaskcoords, motionmaskcells_count, motionmaskcellsidx,
-          motioncellscolor, motioncells_count, motioncellsidx, starttime,
-          datafile, changed_datafile, thickness, filter->id);
+    motioncellscolor.R_channel_value =
+        filter->motioncellscolor->R_channel_value;
+    motioncellscolor.G_channel_value =
+        filter->motioncellscolor->G_channel_value;
+    motioncellscolor.B_channel_value =
+        filter->motioncellscolor->B_channel_value;
 
-      if ((success == 1) && (filter->sent_init_error_msg == FALSE)) {
-        char *initfailedreason;
-        int initerrorcode;
-        GstStructure *s;
-        GstMessage *m;
-        initfailedreason = getInitDataFileFailed (filter->id);
-        initerrorcode = getInitErrorCode (filter->id);
-        s = gst_structure_new ("motion", "init_error_code", G_TYPE_INT,
-            initerrorcode, "details", G_TYPE_STRING, initfailedreason, NULL);
-        m = gst_message_new_element (GST_OBJECT (filter), s);
-        gst_element_post_message (GST_ELEMENT (filter), m);
-        filter->sent_init_error_msg = TRUE;
+    if ((filter->changed_gridx || filter->changed_gridy
+            || filter->changed_startime)) {
+      if ((g_strcmp0 (filter->cur_datafile, NULL) != 0)) {
+        GFREE (filter->cur_datafile);
+        filter->datafileidx++;
+        filter->cur_datafile =
+            g_strdup_printf ("%s-%d.%s", filter->basename_datafile,
+            filter->datafileidx, filter->datafile_extension);
+        filter->changed_datafile = TRUE;
+        motion_cells_free_resources (filter->id);
       }
-      if ((success == -1) && (filter->sent_save_error_msg == FALSE)) {
-        char *savefailedreason;
-        int saveerrorcode;
-        GstStructure *s;
-        GstMessage *m;
-        savefailedreason = getSaveDataFileFailed (filter->id);
-        saveerrorcode = getSaveErrorCode (filter->id);
-        s = gst_structure_new ("motion", "save_error_code", G_TYPE_INT,
-            saveerrorcode, "details", G_TYPE_STRING, savefailedreason, NULL);
-        m = gst_message_new_element (GST_OBJECT (filter), s);
-        gst_element_post_message (GST_ELEMENT (filter), m);
-        filter->sent_save_error_msg = TRUE;
-      }
-      if (success == -2) {
-        GST_LOG_OBJECT (filter, "frame dropped");
-        gst_buffer_unmap (buf, &info);
-        filter->prev_buff_timestamp = filter->cur_buff_timestamp;
-        //free
-        GFREE (datafile);
-        GFREE (motionmaskcoords);
-        GFREE (motionmaskcellsidx);
-        GFREE (motioncellsidx);
-        GST_OBJECT_UNLOCK (filter);
-        return gst_pad_push (filter->srcpad, buf);
-      }
-      filter->changed_datafile = getChangedDataFile (filter->id);
-      motioncellsidxcnt = getMotionCellsIdxCnt (filter->id);
-      numberOfCells = filter->gridx * filter->gridy;
-      motioncellsnumber = motioncellsidxcnt / MSGLEN;
-      cellsOfInterestNumber = (filter->motioncells_count > 0) ? //how many cells interest for us
-          (filter->motioncells_count) : (numberOfCells);
-      mincellsOfInterestNumber =
-          floor ((double) cellsOfInterestNumber * filter->threshold);
-      GST_OBJECT_UNLOCK (filter);
-      motiondetect = (motioncellsnumber >= mincellsOfInterestNumber) ? 1 : 0;
-      if ((motioncellsidxcnt > 0) && (motiondetect == 1)) {
-        char *detectedmotioncells;
-        filter->last_motion_timestamp = GST_BUFFER_TIMESTAMP (buf);
-        detectedmotioncells = getMotionCellsIdx (filter->id);
-        if (detectedmotioncells) {
-          filter->consecutive_motion++;
-          if ((filter->previous_motion == FALSE)
-              && (filter->consecutive_motion >= minimum_motion_frames)) {
-            GstStructure *s;
-            GstMessage *m;
-            GST_DEBUG_OBJECT (filter, "motion started, post msg on the bus");
-            filter->previous_motion = TRUE;
-            filter->motion_begin_timestamp = GST_BUFFER_TIMESTAMP (buf);
-            s = gst_structure_new ("motion", "motion_cells_indices",
-                G_TYPE_STRING, detectedmotioncells, "motion_begin",
-                G_TYPE_UINT64, filter->motion_begin_timestamp, NULL);
-            m = gst_message_new_element (GST_OBJECT (filter), s);
-            gst_element_post_message (GST_ELEMENT (filter), m);
-          } else if (filter->postallmotion) {
-            GstStructure *s;
-            GstMessage *m;
-            GST_DEBUG_OBJECT (filter, "motion, post msg on the bus");
-            filter->motion_timestamp = GST_BUFFER_TIMESTAMP (buf);
-            s = gst_structure_new ("motion", "motion_cells_indices",
-                G_TYPE_STRING, detectedmotioncells, "motion", G_TYPE_UINT64,
-                filter->motion_timestamp, NULL);
-            m = gst_message_new_element (GST_OBJECT (filter), s);
-            gst_element_post_message (GST_ELEMENT (filter), m);
-          }
-        } else {
-          GstStructure *s;
-          GstMessage *m;
-          s = gst_structure_new ("motion", "motion_cells_indices",
-              G_TYPE_STRING, "error", NULL);
-          m = gst_message_new_element (GST_OBJECT (filter), s);
-          gst_element_post_message (GST_ELEMENT (filter), m);
-        }
-      } else {
-        filter->consecutive_motion = 0;
-        if ((((GST_BUFFER_TIMESTAMP (buf) -
-                        filter->last_motion_timestamp) / 1000000000l) >=
-                filter->gap)
-            && (filter->last_motion_timestamp > 0)) {
-          if (filter->previous_motion) {
-            GstStructure *s;
-            GstMessage *m;
-            GST_DEBUG_OBJECT (filter, "motion finished, post msg on the bus");
-            filter->previous_motion = FALSE;
-            s = gst_structure_new ("motion", "motion_finished", G_TYPE_UINT64,
-                filter->last_motion_timestamp, NULL);
-            m = gst_message_new_element (GST_OBJECT (filter), s);
-            gst_element_post_message (GST_ELEMENT (filter), m);
-          }
-        }
-      }
-      if (postnomotion > 0) {
-        guint64 last_buf_timestamp = GST_BUFFER_TIMESTAMP (buf) / 1000000000l;
-        if ((last_buf_timestamp -
-                (filter->last_motion_timestamp / 1000000000l)) >=
-            filter->postnomotion) {
-          GST_DEBUG_OBJECT (filter, "post no motion msg on the bus");
-          if ((last_buf_timestamp -
-                  (filter->last_nomotion_notified / 1000000000l)) >=
-              filter->postnomotion) {
-            GstStructure *s;
-            GstMessage *m;
-            filter->last_nomotion_notified = GST_BUFFER_TIMESTAMP (buf);
-            s = gst_structure_new ("motion", "no_motion", G_TYPE_UINT64,
-                filter->last_motion_timestamp, NULL);
-            m = gst_message_new_element (GST_OBJECT (filter), s);
-            gst_element_post_message (GST_ELEMENT (filter), m);
-          }
-        }
-      }
-      gst_buffer_unmap (buf, &info);
+      if (filter->motioncells_count > 0)
+        gst_motioncells_update_motion_cells (filter);
+      if (filter->motionmaskcells_count > 0)
+        gst_motioncells_update_motion_masks (filter);
+      filter->changed_gridx = FALSE;
+      filter->changed_gridy = FALSE;
+      filter->changed_startime = FALSE;
+    }
+
+    datafile = g_strdup (filter->cur_datafile);
+    filter->cur_buff_timestamp = (GST_BUFFER_TIMESTAMP (buf) / GST_MSECOND);
+    filter->starttime +=
+        (filter->cur_buff_timestamp - filter->prev_buff_timestamp);
+    starttime = filter->starttime;
+    if (filter->changed_datafile || filter->diff_timestamp < 0)
+      filter->diff_timestamp =
+          (gint64) (GST_BUFFER_TIMESTAMP (buf) / GST_MSECOND);
+    changed_datafile = filter->changed_datafile;
+
+    motionmaskcells_count = filter->motionmaskcells_count;
+    motionmaskcellsidx = g_new0 (motioncellidx, filter->motionmaskcells_count);
+    for (i = 0; i < filter->motionmaskcells_count; i++) {
+      motionmaskcellsidx[i].lineidx = filter->motionmaskcellsidx[i].lineidx;
+      motionmaskcellsidx[i].columnidx = filter->motionmaskcellsidx[i].columnidx;
+    }
+    motioncells_count = filter->motioncells_count;
+    motioncellsidx = g_new0 (motioncellidx, filter->motioncells_count);
+    for (i = 0; i < filter->motioncells_count; i++) {
+      motioncellsidx[i].lineidx = filter->motioncellsidx[i].lineidx;
+      motioncellsidx[i].columnidx = filter->motioncellsidx[i].columnidx;
+    }
+
+    useAlpha = filter->usealpha;
+    thickness = filter->thickness;
+    success =
+        perform_detection_motion_cells (img, sensitivity,
+        framerate, gridx, gridy,
+        (gint64) (GST_BUFFER_TIMESTAMP (buf) / GST_MSECOND) -
+        filter->diff_timestamp, display, useAlpha, motionmaskcoord_count,
+        motionmaskcoords, motionmaskcells_count, motionmaskcellsidx,
+        motioncellscolor, motioncells_count, motioncellsidx, starttime,
+        datafile, changed_datafile, thickness, filter->id);
+
+    if ((success == 1) && (filter->sent_init_error_msg == FALSE)) {
+      char *initfailedreason;
+      int initerrorcode;
+      GstStructure *s;
+      GstMessage *m;
+
+      initfailedreason = getInitDataFileFailed (filter->id);
+      initerrorcode = getInitErrorCode (filter->id);
+      s = gst_structure_new ("motion", "init_error_code", G_TYPE_INT,
+          initerrorcode, "details", G_TYPE_STRING, initfailedreason, NULL);
+      m = gst_message_new_element (GST_OBJECT (filter), s);
+      gst_element_post_message (GST_ELEMENT (filter), m);
+      filter->sent_init_error_msg = TRUE;
+    }
+    if ((success == -1) && (filter->sent_save_error_msg == FALSE)) {
+      char *savefailedreason;
+      int saveerrorcode;
+      GstStructure *s;
+      GstMessage *m;
+
+      savefailedreason = getSaveDataFileFailed (filter->id);
+      saveerrorcode = getSaveErrorCode (filter->id);
+      s = gst_structure_new ("motion", "save_error_code", G_TYPE_INT,
+          saveerrorcode, "details", G_TYPE_STRING, savefailedreason, NULL);
+      m = gst_message_new_element (GST_OBJECT (filter), s);
+      gst_element_post_message (GST_ELEMENT (filter), m);
+      filter->sent_save_error_msg = TRUE;
+    }
+    if (success == -2) {
+      GST_LOG_OBJECT (filter, "frame dropped");
       filter->prev_buff_timestamp = filter->cur_buff_timestamp;
       //free
       GFREE (datafile);
       GFREE (motionmaskcoords);
       GFREE (motionmaskcellsidx);
       GFREE (motioncellsidx);
-    } else {
-      GST_WARNING_OBJECT (filter, "error mapping input buffer");
       GST_OBJECT_UNLOCK (filter);
+      return GST_FLOW_OK;
     }
+
+    filter->changed_datafile = getChangedDataFile (filter->id);
+    motioncellsidxcnt = getMotionCellsIdxCnt (filter->id);
+    numberOfCells = filter->gridx * filter->gridy;
+    motioncellsnumber = motioncellsidxcnt / MSGLEN;
+    cellsOfInterestNumber = (filter->motioncells_count > 0) ?   //how many cells interest for us
+        (filter->motioncells_count) : (numberOfCells);
+    mincellsOfInterestNumber =
+        floor ((double) cellsOfInterestNumber * filter->threshold);
+    GST_OBJECT_UNLOCK (filter);
+    motiondetect = (motioncellsnumber >= mincellsOfInterestNumber) ? 1 : 0;
+    if ((motioncellsidxcnt > 0) && (motiondetect == 1)) {
+      char *detectedmotioncells;
+
+      filter->last_motion_timestamp = GST_BUFFER_TIMESTAMP (buf);
+      detectedmotioncells = getMotionCellsIdx (filter->id);
+      if (detectedmotioncells) {
+        filter->consecutive_motion++;
+        if ((filter->previous_motion == FALSE)
+            && (filter->consecutive_motion >= minimum_motion_frames)) {
+          GstStructure *s;
+          GstMessage *m;
+
+          GST_DEBUG_OBJECT (filter, "motion started, post msg on the bus");
+          filter->previous_motion = TRUE;
+          filter->motion_begin_timestamp = GST_BUFFER_TIMESTAMP (buf);
+          s = gst_structure_new ("motion", "motion_cells_indices",
+              G_TYPE_STRING, detectedmotioncells, "motion_begin",
+              G_TYPE_UINT64, filter->motion_begin_timestamp, NULL);
+          m = gst_message_new_element (GST_OBJECT (filter), s);
+          gst_element_post_message (GST_ELEMENT (filter), m);
+        } else if (filter->postallmotion) {
+          GstStructure *s;
+          GstMessage *m;
+
+          GST_DEBUG_OBJECT (filter, "motion, post msg on the bus");
+          filter->motion_timestamp = GST_BUFFER_TIMESTAMP (buf);
+          s = gst_structure_new ("motion", "motion_cells_indices",
+              G_TYPE_STRING, detectedmotioncells, "motion", G_TYPE_UINT64,
+              filter->motion_timestamp, NULL);
+          m = gst_message_new_element (GST_OBJECT (filter), s);
+          gst_element_post_message (GST_ELEMENT (filter), m);
+        }
+      } else {
+        GstStructure *s;
+        GstMessage *m;
+
+        s = gst_structure_new ("motion", "motion_cells_indices",
+            G_TYPE_STRING, "error", NULL);
+        m = gst_message_new_element (GST_OBJECT (filter), s);
+        gst_element_post_message (GST_ELEMENT (filter), m);
+      }
+    } else {
+      filter->consecutive_motion = 0;
+      if ((((GST_BUFFER_TIMESTAMP (buf) -
+                      filter->last_motion_timestamp) / 1000000000l) >=
+              filter->gap)
+          && (filter->last_motion_timestamp > 0)) {
+        if (filter->previous_motion) {
+          GstStructure *s;
+          GstMessage *m;
+
+          GST_DEBUG_OBJECT (filter, "motion finished, post msg on the bus");
+          filter->previous_motion = FALSE;
+          s = gst_structure_new ("motion", "motion_finished", G_TYPE_UINT64,
+              filter->last_motion_timestamp, NULL);
+          m = gst_message_new_element (GST_OBJECT (filter), s);
+          gst_element_post_message (GST_ELEMENT (filter), m);
+        }
+      }
+    }
+    if (postnomotion > 0) {
+      guint64 last_buf_timestamp = GST_BUFFER_TIMESTAMP (buf) / 1000000000l;
+      if ((last_buf_timestamp -
+              (filter->last_motion_timestamp / 1000000000l)) >=
+          filter->postnomotion) {
+        GST_DEBUG_OBJECT (filter, "post no motion msg on the bus");
+        if ((last_buf_timestamp -
+                (filter->last_nomotion_notified / 1000000000l)) >=
+            filter->postnomotion) {
+          GstStructure *s;
+          GstMessage *m;
+
+          filter->last_nomotion_notified = GST_BUFFER_TIMESTAMP (buf);
+          s = gst_structure_new ("motion", "no_motion", G_TYPE_UINT64,
+              filter->last_motion_timestamp, NULL);
+          m = gst_message_new_element (GST_OBJECT (filter), s);
+          gst_element_post_message (GST_ELEMENT (filter), m);
+        }
+      }
+    }
+    filter->prev_buff_timestamp = filter->cur_buff_timestamp;
+
+    //free
+    GFREE (datafile);
+    GFREE (motionmaskcoords);
+    GFREE (motionmaskcellsidx);
+    GFREE (motioncellsidx);
   } else {
+    GST_WARNING_OBJECT (filter, "Motion detection disabled");
     GST_OBJECT_UNLOCK (filter);
   }
-  return gst_pad_push (filter->srcpad, buf);
+  return GST_FLOW_OK;
 }
 
 /* entry point to initialize the plug-in
diff --git a/ext/opencv/gstmotioncells.h b/ext/opencv/gstmotioncells.h
index 0a7daa0..da04a74 100644
--- a/ext/opencv/gstmotioncells.h
+++ b/ext/opencv/gstmotioncells.h
@@ -2,7 +2,7 @@
  * GStreamer
  * Copyright (C) 2011 Robert Jobbagy <jobbagy.robert@gmail.com>
  * Copyright (C) 2011 Nicola Murino <nicola.murino@gmail.com>
- * 
+ *
  * Permission is hereby granted, free of charge, to any person obtaining a
  * copy of this software and associated documentation files (the "Software"),
  * to deal in the Software without restriction, including without limitation
@@ -45,8 +45,9 @@
 #ifndef __GST_MOTIONCELLS_H__
 #define __GST_MOTIONCELLS_H__
 
-#include <gst/gst.h>
+#include <gstopencvvideofilter.h>
 #include <opencv2/core/core_c.h>
+#include "motioncells_wrapper.h"
 
 G_BEGIN_DECLS
 /* #defines don't like whitespacey bits */
@@ -63,28 +64,9 @@
 typedef struct _GstMotioncells GstMotioncells;
 typedef struct _GstMotioncellsClass GstMotioncellsClass;
 
-typedef struct {
-	int upper_left_x;
-	int upper_left_y;
-	int lower_right_x;
-	int lower_right_y;
-} motionmaskcoordrect;
-
-typedef struct {
-	int R_channel_value;
-	int G_channel_value;
-	int B_channel_value;
-} cellscolor;
-
-typedef struct {
-	int lineidx;
-	int columnidx;
-} motioncellidx;
-
 struct _GstMotioncells
 {
-  GstElement element;
-  GstPad *sinkpad, *srcpad;
+  GstOpencvVideoFilter element;
   GstState state;
   gboolean display, calculate_motion, firstgridx, firstgridy, changed_gridx,
       changed_gridy, changed_startime;
@@ -94,12 +76,12 @@
   gchar *prev_datafile, *cur_datafile, *basename_datafile, *datafile_extension;
   gint prevgridx, gridx, prevgridy, gridy, id;
   gdouble sensitivity, threshold;
-  IplImage *cvImage;
   motionmaskcoordrect *motionmaskcoords;
   cellscolor *motioncellscolor;
   motioncellidx *motioncellsidx, *motionmaskcellsidx;
   int motionmaskcoord_count, motioncells_count, motionmaskcells_count;
-  int gap, thickness, datafileidx, postnomotion, minimum_motion_frames;
+  int thickness;
+  guint gap, datafileidx, postnomotion, minimum_motion_frames;
   guint64 motion_begin_timestamp, last_motion_timestamp, motion_timestamp,
       last_nomotion_notified, prev_buff_timestamp, cur_buff_timestamp;
   gint64 diff_timestamp, starttime;
@@ -112,7 +94,7 @@
 
 struct _GstMotioncellsClass
 {
-  GstElementClass parent_class;
+  GstOpencvVideoFilterClass parent_class;
 };
 
 GType gst_motion_cells_get_type (void);
diff --git a/ext/opencv/gstopencvutils.c b/ext/opencv/gstopencvutils.cpp
similarity index 65%
rename from ext/opencv/gstopencvutils.c
rename to ext/opencv/gstopencvutils.cpp
index 89901bf..da6eea9 100644
--- a/ext/opencv/gstopencvutils.c
+++ b/ext/opencv/gstopencvutils.cpp
@@ -26,78 +26,14 @@
 #include "gstopencvutils.h"
 #include <opencv2/core/types_c.h>
 
-static gboolean
-gst_opencv_get_ipl_depth_and_channels (GstStructure * structure,
-    gint * ipldepth, gint * channels, GError ** err)
-{
-  GstVideoFormat format = GST_VIDEO_FORMAT_UNKNOWN;
-  const GstVideoFormatInfo *info;
-  gint depth = 0, i;
-  const gchar *s;
-
-  if (gst_structure_has_name (structure, "video/x-raw")) {
-    if (!(s = gst_structure_get_string (structure, "format")))
-      return FALSE;
-    format = gst_video_format_from_string (s);
-    if (format == GST_VIDEO_FORMAT_UNKNOWN)
-      return FALSE;
-  }
-
-  info = gst_video_format_get_info (format);
-
-  if (GST_VIDEO_FORMAT_INFO_IS_RGB (info))
-    *channels = 3;
-  else if (GST_VIDEO_FORMAT_INFO_IS_GRAY (info))
-    *channels = 1;
-  else {
-    g_set_error (err, GST_CORE_ERROR, GST_CORE_ERROR_NEGOTIATION,
-        "Unsupported structure %s", gst_structure_get_name (structure));
-    return FALSE;
-  }
-
-  for (i = 0; i < GST_VIDEO_FORMAT_INFO_N_COMPONENTS (info); i++)
-    depth += GST_VIDEO_FORMAT_INFO_DEPTH (info, i);
-
-  if (depth / *channels == 8) {
-    /* TODO signdness? */
-    *ipldepth = IPL_DEPTH_8U;
-  } else if (depth / *channels == 16) {
-    *ipldepth = IPL_DEPTH_16U;
-  } else {
-    g_set_error (err, GST_CORE_ERROR, GST_CORE_ERROR_NEGOTIATION,
-        "Unsupported depth/channels %d/%d", depth, *channels);
-    return FALSE;
-  }
-
-  return TRUE;
-}
-
-gboolean
-gst_opencv_parse_iplimage_params_from_structure (GstStructure * structure,
-    gint * width, gint * height, gint * ipldepth, gint * channels,
-    GError ** err)
-{
-  if (!gst_opencv_get_ipl_depth_and_channels (structure, ipldepth, channels,
-          err)) {
-    return FALSE;
-  }
-
-  if (!gst_structure_get_int (structure, "width", width) ||
-      !gst_structure_get_int (structure, "height", height)) {
-    g_set_error (err, GST_CORE_ERROR, GST_CORE_ERROR_NEGOTIATION,
-        "No width/height in caps");
-    return FALSE;
-  }
-
-  return TRUE;
-}
 
 gboolean
 gst_opencv_parse_iplimage_params_from_caps (GstCaps * caps, gint * width,
     gint * height, gint * ipldepth, gint * channels, GError ** err)
 {
   GstVideoInfo info;
-  gint i, depth = 0;
+  gint depth = 0;
+  guint i;
 
   if (!gst_video_info_from_caps (&info, caps)) {
     GST_ERROR ("Failed to get the videoinfo from caps");
diff --git a/ext/opencv/gstopencvutils.h b/ext/opencv/gstopencvutils.h
index 84123f1..13dfd9e 100644
--- a/ext/opencv/gstopencvutils.h
+++ b/ext/opencv/gstopencvutils.h
@@ -30,17 +30,13 @@
 #include <gst/video/video.h>
 
 
-
-gboolean
-gst_opencv_get_ipldepth (gint depth, gint bpp, gint * ipldepth);
+G_BEGIN_DECLS
 
 gboolean gst_opencv_parse_iplimage_params_from_caps
     (GstCaps * caps, gint * width, gint * height, gint * depth,
     gint * channels, GError ** err);
-gboolean gst_opencv_parse_iplimage_params_from_structure
-    (GstStructure * structure, gint * width, gint * height, gint * depth,
-    gint * channels, GError ** err);
 
 GstCaps * gst_opencv_caps_from_cv_image_type (int cv_type);
+G_END_DECLS
 
 #endif /* __GST_OPENCV_UTILS__ */
diff --git a/ext/opencv/gstopencvvideofilter.c b/ext/opencv/gstopencvvideofilter.cpp
similarity index 98%
rename from ext/opencv/gstopencvvideofilter.c
rename to ext/opencv/gstopencvvideofilter.cpp
index c53c7f5..4b8e536 100644
--- a/ext/opencv/gstopencvvideofilter.c
+++ b/ext/opencv/gstopencvvideofilter.cpp
@@ -1,7 +1,7 @@
 /*
  * GStreamer
  * Copyright (C) 2010 Thiago Santos <thiago.sousa.santos@collabora.co.uk>
- * 
+ *
  * Permission is hereby granted, free of charge, to any person obtaining a
  * copy of this software and associated documentation files (the "Software"),
  * to deal in the Software without restriction, including without limitation
@@ -47,8 +47,6 @@
 #  include <config.h>
 #endif
 
-#include <gst/gst.h>
-
 #include "gstopencvvideofilter.h"
 #include "gstopencvutils.h"
 
@@ -135,7 +133,7 @@
 
   gobject_class = (GObjectClass *) klass;
   basetrans_class = (GstBaseTransformClass *) klass;
-  parent_class = g_type_class_peek_parent (klass);
+  parent_class = (GstElementClass *) g_type_class_peek_parent (klass);
 
   GST_DEBUG_CATEGORY_INIT (gst_opencv_video_filter_debug,
       "opencvbasetransform", 0, "opencvbasetransform element");
@@ -217,7 +215,7 @@
   g_return_val_if_fail (fclass->cv_trans_ip_func != NULL, GST_FLOW_ERROR);
   g_return_val_if_fail (transform->cvImage != NULL, GST_FLOW_ERROR);
 
-  if (!gst_buffer_map (buffer, &info, GST_MAP_READWRITE))
+  if (!gst_buffer_map (buffer, &info, (GstMapFlags) (GST_MAP_READWRITE)))
     goto map_failed;
 
   transform->cvImage->imageData = (char *) info.data;
diff --git a/ext/opencv/gstpyramidsegment.c b/ext/opencv/gstpyramidsegment.cpp
similarity index 69%
rename from ext/opencv/gstpyramidsegment.c
rename to ext/opencv/gstpyramidsegment.cpp
index 618ffdf..d8247c0 100644
--- a/ext/opencv/gstpyramidsegment.c
+++ b/ext/opencv/gstpyramidsegment.cpp
@@ -3,7 +3,7 @@
  * Copyright (C) 2005 Thomas Vander Stichele <thomas@apestaart.org>
  * Copyright (C) 2005 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
  * Copyright (C) 2008 Michael Sheldon <mike@mikeasoft.com>
- * 
+ *
  * Permission is hereby granted, free of charge, to any person obtaining a
  * copy of this software and associated documentation files (the "Software"),
  * to deal in the Software without restriction, including without limitation
@@ -51,7 +51,7 @@
  * <refsect2>
  * <title>Example launch line</title>
  * |[
- * gst-launch -v -m fakesrc ! pyramidsegment ! fakesink silent=TRUE
+ * gst-launch-1.0 -v videotestsrc ! pyramidsegment ! videoconvert ! autovideosink
  * ]|
  * </refsect2>
  */
@@ -60,9 +60,6 @@
 #  include <config.h>
 #endif
 
-#include <gst/gst.h>
-
-#include "gstopencvutils.h"
 #include "gstpyramidsegment.h"
 
 #define BLOCK_SIZE 1000
@@ -70,6 +67,7 @@
 GST_DEBUG_CATEGORY_STATIC (gst_pyramid_segment_debug);
 #define GST_CAT_DEFAULT gst_pyramid_segment_debug
 
+using namespace cv;
 /* Filter signals and args */
 enum
 {
@@ -102,17 +100,16 @@
     GST_STATIC_CAPS (GST_VIDEO_CAPS_MAKE ("RGB"))
     );
 
-G_DEFINE_TYPE (GstPyramidSegment, gst_pyramid_segment, GST_TYPE_ELEMENT);
+G_DEFINE_TYPE (GstPyramidSegment, gst_pyramid_segment,
+    GST_TYPE_OPENCV_VIDEO_FILTER);
 
 static void gst_pyramid_segment_set_property (GObject * object, guint prop_id,
     const GValue * value, GParamSpec * pspec);
 static void gst_pyramid_segment_get_property (GObject * object, guint prop_id,
     GValue * value, GParamSpec * pspec);
 
-static gboolean gst_pyramid_segment_handle_sink_event (GstPad * pad,
-    GstObject * parent, GstEvent * event);
-static GstFlowReturn gst_pyramid_segment_chain (GstPad * pad,
-    GstObject * parent, GstBuffer * buf);
+static GstFlowReturn gst_pyramid_segment_transform_ip (GstOpencvVideoFilter *
+    base, GstBuffer * buf, IplImage * img);
 
 /* Clean up */
 static void
@@ -120,10 +117,6 @@
 {
   GstPyramidSegment *filter = GST_PYRAMID_SEGMENT (obj);
 
-  if (filter->cvImage != NULL) {
-    cvReleaseImage (&filter->cvImage);
-  }
-
   cvReleaseMemStorage (&filter->storage);
 
   G_OBJECT_CLASS (gst_pyramid_segment_parent_class)->finalize (obj);
@@ -134,32 +127,37 @@
 gst_pyramid_segment_class_init (GstPyramidSegmentClass * klass)
 {
   GObjectClass *gobject_class;
+  GstOpencvVideoFilterClass *gstopencvbasefilter_class;
 
   GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
   gobject_class = (GObjectClass *) klass;
+  gstopencvbasefilter_class = (GstOpencvVideoFilterClass *) klass;
 
   gobject_class->finalize = GST_DEBUG_FUNCPTR (gst_pyramid_segment_finalize);
   gobject_class->set_property = gst_pyramid_segment_set_property;
   gobject_class->get_property = gst_pyramid_segment_get_property;
 
+  gstopencvbasefilter_class->cv_trans_ip_func =
+      gst_pyramid_segment_transform_ip;
+
   g_object_class_install_property (gobject_class, PROP_SILENT,
       g_param_spec_boolean ("silent", "Silent", "Produce verbose output ?",
-          FALSE, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+          FALSE, (GParamFlags) (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)));
 
   g_object_class_install_property (gobject_class, PROP_THRESHOLD1,
       g_param_spec_double ("threshold1", "Threshold1",
           "Error threshold for establishing links", 0, 1000, 50,
-          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+          (GParamFlags) (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)));
 
   g_object_class_install_property (gobject_class, PROP_THRESHOLD2,
       g_param_spec_double ("threshold2", "Threshold2",
           "Error threshold for segment clustering", 0, 1000, 60,
-          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+          (GParamFlags) (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)));
 
   g_object_class_install_property (gobject_class, PROP_LEVEL,
       g_param_spec_int ("level", "Level",
           "Maximum level of the pyramid segmentation", 1, 4, 4,
-          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+          (GParamFlags) (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)));
 
   gst_element_class_set_static_metadata (element_class,
       "pyramidsegment",
@@ -181,19 +179,6 @@
 static void
 gst_pyramid_segment_init (GstPyramidSegment * filter)
 {
-  filter->sinkpad = gst_pad_new_from_static_template (&sink_factory, "sink");
-  GST_PAD_SET_PROXY_CAPS (filter->sinkpad);
-
-  gst_pad_set_event_function (filter->sinkpad,
-      GST_DEBUG_FUNCPTR (gst_pyramid_segment_handle_sink_event));
-  gst_pad_set_chain_function (filter->sinkpad,
-      GST_DEBUG_FUNCPTR (gst_pyramid_segment_chain));
-
-  filter->srcpad = gst_pad_new_from_static_template (&src_factory, "src");
-  GST_PAD_SET_PROXY_CAPS (filter->srcpad);
-
-  gst_element_add_pad (GST_ELEMENT (filter), filter->sinkpad);
-  gst_element_add_pad (GST_ELEMENT (filter), filter->srcpad);
   filter->storage = cvCreateMemStorage (BLOCK_SIZE);
   filter->comp =
       cvCreateSeq (0, sizeof (CvSeq), sizeof (CvPoint), filter->storage);
@@ -201,6 +186,9 @@
   filter->threshold1 = 50.0;
   filter->threshold2 = 60.0;
   filter->level = 4;
+
+  gst_opencv_video_filter_set_in_place (GST_OPENCV_VIDEO_FILTER_CAST (filter),
+      TRUE);
 }
 
 static void
@@ -253,78 +241,19 @@
   }
 }
 
-/* GstElement vmethod implementations */
-
-/* this function handles the link with other elements */
-static gboolean
-gst_pyramid_segment_handle_sink_event (GstPad * pad, GstObject * parent,
-    GstEvent * event)
-{
-  GstPyramidSegment *filter;
-  GstVideoInfo info;
-  gboolean res = TRUE;
-  filter = GST_PYRAMID_SEGMENT (parent);
-
-  switch (GST_EVENT_TYPE (event)) {
-    case GST_EVENT_CAPS:
-    {
-      GstCaps *caps;
-      gst_event_parse_caps (event, &caps);
-      gst_video_info_from_caps (&info, caps);
-
-      if (filter->cvImage != NULL) {
-        cvReleaseImage (&filter->cvImage);
-      }
-      filter->cvImage =
-          cvCreateImage (cvSize (info.width, info.height), IPL_DEPTH_8U, 3);
-      break;
-    }
-    default:
-      break;
-  }
-
-  res = gst_pad_event_default (pad, parent, event);
-
-  return res;
-}
-
-/* chain function
+/* transform function
  * this function does the actual processing
  */
 static GstFlowReturn
-gst_pyramid_segment_chain (GstPad * pad, GstObject * parent, GstBuffer * buf)
+gst_pyramid_segment_transform_ip (GstOpencvVideoFilter * base, GstBuffer * buf,
+    IplImage * img)
 {
-  GstPyramidSegment *filter;
-  GstBuffer *outbuf;
-  GstMapInfo info;
-  GstMapInfo outinfo;
+  GstPyramidSegment *filter = GST_PYRAMID_SEGMENT (base);
 
-  filter = GST_PYRAMID_SEGMENT (GST_OBJECT_PARENT (pad));
-
-  buf = gst_buffer_make_writable (buf);
-  gst_buffer_map (buf, &info, GST_MAP_READWRITE);
-  filter->cvImage->imageData = (char *) info.data;
-  filter->cvSegmentedImage = cvCloneImage (filter->cvImage);
-
-  cvPyrSegmentation (filter->cvImage, filter->cvSegmentedImage, filter->storage,
+  cvPyrSegmentation (img, img, filter->storage,
       &(filter->comp), filter->level, filter->threshold1, filter->threshold2);
 
-  /* TODO look if there is a way in opencv to reuse the image data and
-   * delete only the struct headers. Would avoid a memcpy here */
-
-  outbuf = gst_buffer_new_and_alloc (filter->cvSegmentedImage->imageSize);
-  gst_buffer_copy_into (outbuf, buf, GST_BUFFER_COPY_METADATA, 0, -1);
-  gst_buffer_map (outbuf, &outinfo, GST_MAP_WRITE);
-  memcpy (outinfo.data, filter->cvSegmentedImage->imageData,
-      gst_buffer_get_size (outbuf));
-
-  gst_buffer_unmap (buf, &info);
-  gst_buffer_unref (buf);
-  cvReleaseImage (&filter->cvSegmentedImage);
-  g_assert (filter->cvSegmentedImage == NULL);
-
-  gst_buffer_unmap (outbuf, &outinfo);
-  return gst_pad_push (filter->srcpad, outbuf);
+  return GST_FLOW_OK;
 }
 
 
diff --git a/ext/opencv/gstpyramidsegment.h b/ext/opencv/gstpyramidsegment.h
index 586ef2c..e715766 100644
--- a/ext/opencv/gstpyramidsegment.h
+++ b/ext/opencv/gstpyramidsegment.h
@@ -3,7 +3,7 @@
  * Copyright (C) 2005 Thomas Vander Stichele <thomas@apestaart.org>
  * Copyright (C) 2005 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
  * Copyright (C) 2008 Michael Sheldon <mike@mikeasoft.com>
- * 
+ *
  * Permission is hereby granted, free of charge, to any person obtaining a
  * copy of this software and associated documentation files (the "Software"),
  * to deal in the Software without restriction, including without limitation
@@ -46,12 +46,9 @@
 #ifndef __GST_PYRAMID_SEGMENT_H__
 #define __GST_PYRAMID_SEGMENT_H__
 
-#include <gst/gst.h>
+#include <gstopencvvideofilter.h>
 #include <opencv2/core/version.hpp>
-
-#if CV_MAJOR_VERSION * 100 + CV_MINOR_VERSION >= 204
 #include <opencv2/legacy/legacy.hpp>
-#endif
 
 G_BEGIN_DECLS
 /* #defines don't like whitespacey bits */
@@ -65,19 +62,18 @@
   (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_PYRAMID_SEGMENT))
 #define GST_IS_PYRAMID_SEGMENT_CLASS(klass) \
   (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_PYRAMID_SEGMENT))
+
 typedef struct _GstPyramidSegment GstPyramidSegment;
 typedef struct _GstPyramidSegmentClass GstPyramidSegmentClass;
 
 struct _GstPyramidSegment
 {
-  GstElement element;
+  GstOpencvVideoFilter element;
 
   GstPad *sinkpad, *srcpad;
 
   gboolean silent;
 
-  IplImage *cvImage, *cvSegmentedImage;
-
   CvMemStorage *storage;
 
   CvSeq *comp;
@@ -89,7 +85,7 @@
 
 struct _GstPyramidSegmentClass
 {
-  GstElementClass parent_class;
+  GstOpencvVideoFilterClass parent_class;
 };
 
 GType gst_pyramid_segment_get_type (void);
diff --git a/ext/opencv/gstretinex.c b/ext/opencv/gstretinex.cpp
similarity index 94%
rename from ext/opencv/gstretinex.c
rename to ext/opencv/gstretinex.cpp
index 9a7c8dc..75842f8 100644
--- a/ext/opencv/gstretinex.c
+++ b/ext/opencv/gstretinex.cpp
@@ -1,7 +1,7 @@
 /*
  * GStreamer
  * Copyright (C) 2013 Miguel Casas-Sanchez <miguelecasassanchez@gmail.com>
- * 
+ *
  * Permission is hereby granted, free of charge, to any person obtaining a
  * copy of this software and associated documentation files (the "Software"),
  * to deal in the Software without restriction, including without limitation
@@ -46,8 +46,8 @@
  *
  * Basic and multiscale retinex for colour image enhancement, see article:
  *
- * Rahman, Zia-ur, Daniel J. Jobson, and Glenn A. Woodell. "Multi-scale retinex for 
- * color image enhancement." Image Processing, 1996. Proceedings., International 
+ * Rahman, Zia-ur, Daniel J. Jobson, and Glenn A. Woodell. "Multi-scale retinex for
+ * color image enhancement." Image Processing, 1996. Proceedings., International
  * Conference on. Vol. 3. IEEE, 1996.
  *
  * <refsect2>
@@ -62,13 +62,14 @@
 #include <config.h>
 #endif
 
-#include <gst/gst.h>
 #include "gstretinex.h"
 #include <opencv2/imgproc/imgproc_c.h>
+#include <opencv2/imgproc/imgproc.hpp>
 
 GST_DEBUG_CATEGORY_STATIC (gst_retinex_debug);
 #define GST_CAT_DEFAULT gst_retinex_debug
 
+using namespace cv;
 /* Filter signals and args */
 enum
 {
@@ -153,12 +154,13 @@
           "Retinex method to use",
           "Retinex method to use",
           GST_TYPE_RETINEX_METHOD, DEFAULT_METHOD,
-          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+          (GParamFlags) (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)));
 
   g_object_class_install_property (gobject_class, PROP_SCALES,
       g_param_spec_int ("scales", "scales",
           "Amount of gaussian filters (scales) used in multiscale retinex", 1,
-          4, DEFAULT_SCALES, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+          4, DEFAULT_SCALES,
+          (GParamFlags) (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)));
 
   gst_element_class_set_static_metadata (element_class,
       "Retinex image colour enhacement", "Filter/Effect/Video",
@@ -169,10 +171,8 @@
       gst_static_pad_template_get (&src_factory));
   gst_element_class_add_pad_template (element_class,
       gst_static_pad_template_get (&sink_factory));
-
 }
 
-
 /* initialize the new element
  * instantiate pads and add them to element
  * set pad calback functions
@@ -184,7 +184,8 @@
   filter->method = DEFAULT_METHOD;
   filter->scales = DEFAULT_SCALES;
   filter->current_scales = 0;
-  gst_base_transform_set_in_place (GST_BASE_TRANSFORM (filter), TRUE);
+  gst_opencv_video_filter_set_in_place (GST_OPENCV_VIDEO_FILTER_CAST (filter),
+      TRUE);
 }
 
 
@@ -293,15 +294,16 @@
   int gain = 128;
   int offset = 128;
   int filter_size;
+  Mat icvD (retinex->cvD, false);
 
-  if (!gst_buffer_map (buf, &info, GST_MAP_READWRITE)) {
+  if (!gst_buffer_map (buf, &info, (GstMapFlags) GST_MAP_READWRITE)) {
     return GST_FLOW_ERROR;
   }
   retinex->cvRGBin->imageData = (char *) info.data;
 
   /* Basic retinex restoration.  The image and a filtered image are converted
      to the log domain and subtracted.
-     O = Log(I) - Log(H(I))   
+     O = Log(I) - Log(H(I))
      where O is the output, H is a gaussian 2d filter and I is the input image. */
   if (METHOD_BASIC == retinex->method) {
     /*  Compute log image */
@@ -313,8 +315,7 @@
     filter_size = filter_size * 2 + 1;
 
     cvConvert (retinex->cvRGBin, retinex->cvD);
-    cvSmooth (retinex->cvD, retinex->cvD, CV_GAUSSIAN, filter_size, filter_size,
-        0.0, 0.0);
+    GaussianBlur (icvD, icvD, Size (filter_size, filter_size), 0.0, 0.0);
     cvLog (retinex->cvD, retinex->cvC);
 
     /*  Compute difference */
@@ -359,8 +360,7 @@
       filter_size = filter_size * 2 + 1;
 
       cvConvert (retinex->cvRGBin, retinex->cvD);
-      cvSmooth (retinex->cvD, retinex->cvD, CV_GAUSSIAN, filter_size,
-          filter_size, 0.0, 0.0);
+      GaussianBlur (icvD, icvD, Size (filter_size, filter_size), 0.0, 0.0);
       cvLog (retinex->cvD, retinex->cvC);
 
       /*  Compute weighted difference */
diff --git a/ext/opencv/gstretinex.h b/ext/opencv/gstretinex.h
index c53d230..d090a5b 100644
--- a/ext/opencv/gstretinex.h
+++ b/ext/opencv/gstretinex.h
@@ -1,7 +1,7 @@
 /*
  * GStreamer
  * Copyright (C) 2013 Miguel Casas-Sanchez <miguelecasassanchez@gmail.com>
- * 
+ *
  * Permission is hereby granted, free of charge, to any person obtaining a
  * copy of this software and associated documentation files (the "Software"),
  * to deal in the Software without restriction, including without limitation
@@ -44,11 +44,9 @@
 #ifndef __GST_RETINEX_H__
 #define __GST_RETINEX_H__
 
-#include <gst/gst.h>
-#include <gst/video/video.h>
-#include <gst/video/gstvideofilter.h>
 #include <opencv2/core/core_c.h>
 
+#include <gstopencvvideofilter.h>
 
 G_BEGIN_DECLS
 /* #defines don't like whitespacey bits */
diff --git a/ext/opencv/gstsegmentation.cpp b/ext/opencv/gstsegmentation.cpp
index 79cbb49..e0aa821 100644
--- a/ext/opencv/gstsegmentation.cpp
+++ b/ext/opencv/gstsegmentation.cpp
@@ -1,15 +1,15 @@
 /*
  * GStreamer
  * Copyright (C) 2013 Miguel Casas-Sanchez <miguelecasassanchez@gmail.com>
- * Except: Parts of code inside the preprocessor define CODE_FROM_OREILLY_BOOK, 
- *  which are downloaded from O'Reilly website 
+ * Except: Parts of code inside the preprocessor define CODE_FROM_OREILLY_BOOK,
+ *  which are downloaded from O'Reilly website
  *  [http://examples.oreilly.com/9780596516130/]
  *  and adapted. Its license reads:
  *  "Oct. 3, 2008
- *   Right to use this code in any way you want without warrenty, support or 
+ *   Right to use this code in any way you want without warrenty, support or
  *   any guarentee of it working. "
  *
- * 
+ *
  * Permission is hereby granted, free of charge, to any person obtaining a
  * copy of this software and associated documentation files (the "Software"),
  * to deal in the Software without restriction, including without limitation
@@ -55,27 +55,27 @@
  *
  * This element creates and updates a fg/bg model using one of several approaches.
  * The one called "codebook" refers to the codebook approach following the opencv
- * O'Reilly book [1] implementation of the algorithm described in K. Kim, 
- * T. H. Chalidabhongse, D. Harwood and L. Davis [2]. BackgroundSubtractorMOG [3], 
- * or MOG for shorts, refers to a Gaussian Mixture-based Background/Foreground 
+ * O'Reilly book [1] implementation of the algorithm described in K. Kim,
+ * T. H. Chalidabhongse, D. Harwood and L. Davis [2]. BackgroundSubtractorMOG [3],
+ * or MOG for shorts, refers to a Gaussian Mixture-based Background/Foreground
  * Segmentation Algorithm. OpenCV MOG implements the algorithm described in [4].
- * BackgroundSubtractorMOG2 [5], refers to another Gaussian Mixture-based 
- * Background/Foreground segmentation algorithm. OpenCV MOG2 implements the 
+ * BackgroundSubtractorMOG2 [5], refers to another Gaussian Mixture-based
+ * Background/Foreground segmentation algorithm. OpenCV MOG2 implements the
  * algorithm described in [6] and [7].
  *
- * [1] Learning OpenCV: Computer Vision with the OpenCV Library by Gary Bradski 
+ * [1] Learning OpenCV: Computer Vision with the OpenCV Library by Gary Bradski
  * and Adrian Kaehler, Published by O'Reilly Media, October 3, 2008
- * [2] "Real-time Foreground-Background Segmentation using Codebook Model", 
+ * [2] "Real-time Foreground-Background Segmentation using Codebook Model",
  * Real-time Imaging, Volume 11, Issue 3, Pages 167-256, June 2005.
  * [3] http://opencv.itseez.com/modules/video/doc/motion_analysis_and_object_tracking.html#backgroundsubtractormog
- * [4] P. KadewTraKuPong and R. Bowden, "An improved adaptive background 
- * mixture model for real-time tracking with shadow detection", Proc. 2nd 
+ * [4] P. KadewTraKuPong and R. Bowden, "An improved adaptive background
+ * mixture model for real-time tracking with shadow detection", Proc. 2nd
  * European Workshop on Advanced Video-Based Surveillance Systems, 2001
  * [5] http://opencv.itseez.com/modules/video/doc/motion_analysis_and_object_tracking.html#backgroundsubtractormog2
- * [6] Z.Zivkovic, "Improved adaptive Gausian mixture model for background 
+ * [6] Z.Zivkovic, "Improved adaptive Gausian mixture model for background
  * subtraction", International Conference Pattern Recognition, UK, August, 2004.
- * [7] Z.Zivkovic, F. van der Heijden, "Efficient Adaptive Density Estimation 
- * per Image Pixel for the Task of Background Subtraction", Pattern Recognition 
+ * [7] Z.Zivkovic, F. van der Heijden, "Efficient Adaptive Density Estimation
+ * per Image Pixel for the Task of Background Subtraction", Pattern Recognition
  * Letters, vol. 27, no. 7, pages 773-780, 2006.
  *
  * <refsect2>
@@ -90,8 +90,6 @@
 #include <config.h>
 #endif
 
-#include <gst/gst.h>
-
 #include "gstsegmentation.h"
 #include <opencv2/video/background_segm.hpp>
 #include <opencv2/imgproc/imgproc_c.h>
@@ -382,12 +380,12 @@
   cvCvtColor (filter->cvRGBA, filter->cvRGB, CV_RGBA2RGB);
   cvCvtColor (filter->cvRGB, filter->cvYUV, CV_RGB2YCrCb);
 
-  /* Create and update a fg/bg model using a codebook approach following the 
+  /* Create and update a fg/bg model using a codebook approach following the
    * opencv O'Reilly book [1] implementation of the algo described in [2].
    *
-   * [1] Learning OpenCV: Computer Vision with the OpenCV Library by Gary 
+   * [1] Learning OpenCV: Computer Vision with the OpenCV Library by Gary
    * Bradski and Adrian Kaehler, Published by O'Reilly Media, October 3, 2008
-   * [2] "Real-time Foreground-Background Segmentation using Codebook Model", 
+   * [2] "Real-time Foreground-Background Segmentation using Codebook Model",
    * Real-time Imaging, Volume 11, Issue 3, Pages 167-256, June 2005. */
   if (METHOD_BOOK == filter->method) {
     unsigned cbBounds[3] = { 10, 5, 5 };
@@ -429,27 +427,27 @@
         filter->mem_storage, filter->contours);
 
   }
-  /* Create the foreground and background masks using BackgroundSubtractorMOG [1], 
-   *  Gaussian Mixture-based Background/Foreground segmentation algorithm. OpenCV 
+  /* Create the foreground and background masks using BackgroundSubtractorMOG [1],
+   *  Gaussian Mixture-based Background/Foreground segmentation algorithm. OpenCV
    * MOG implements the algorithm described in [2].
-   * 
+   *
    * [1] http://opencv.itseez.com/modules/video/doc/motion_analysis_and_object_tracking.html#backgroundsubtractormog
-   * [2] P. KadewTraKuPong and R. Bowden, "An improved adaptive background 
-   * mixture model for real-time tracking with shadow detection", Proc. 2nd 
+   * [2] P. KadewTraKuPong and R. Bowden, "An improved adaptive background
+   * mixture model for real-time tracking with shadow detection", Proc. 2nd
    * European Workshop on Advanced Video-Based Surveillance Systems, 2001
    */
   else if (METHOD_MOG == filter->method) {
     run_mog_iteration (filter);
   }
   /* Create the foreground and background masks using BackgroundSubtractorMOG2
-   * [1], Gaussian Mixture-based Background/Foreground segmentation algorithm. 
+   * [1], Gaussian Mixture-based Background/Foreground segmentation algorithm.
    * OpenCV MOG2 implements the algorithm described in [2] and [3].
-   * 
+   *
    * [1] http://opencv.itseez.com/modules/video/doc/motion_analysis_and_object_tracking.html#backgroundsubtractormog2
-   * [2] Z.Zivkovic, "Improved adaptive Gausian mixture model for background 
+   * [2] Z.Zivkovic, "Improved adaptive Gausian mixture model for background
    * subtraction", International Conference Pattern Recognition, UK, Aug 2004.
-   * [3] Z.Zivkovic, F. van der Heijden, "Efficient Adaptive Density Estimation 
-   * per Image Pixel for the Task of Background Subtraction", Pattern 
+   * [3] Z.Zivkovic, F. van der Heijden, "Efficient Adaptive Density Estimation
+   * per Image Pixel for the Task of Background Subtraction", Pattern
    * Recognition Letters, vol. 27, no. 7, pages 773-780, 2006.   */
   else if (METHOD_MOG2 == filter->method) {
     run_mog2_iteration (filter);
@@ -487,20 +485,20 @@
 
 
 #ifdef CODE_FROM_OREILLY_BOOK   /* See license at the beginning of the page */
-/* 
-  int update_codebook(uchar *p, codeBook &c, unsigned cbBounds) 
-  Updates the codebook entry with a new data point 
-  
-  p Pointer to a YUV or HSI pixel 
-  c Codebook for this pixel 
-  cbBounds Learning bounds for codebook (Rule of thumb: 10) 
-  numChannels Number of color channels we¡¯re learning 
-  
-  NOTES: 
-  cvBounds must be of length equal to numChannels 
-  
-  RETURN 
-  codebook index 
+/*
+  int update_codebook(uchar *p, codeBook &c, unsigned cbBounds)
+  Updates the codebook entry with a new data point
+
+  p Pointer to a YUV or HSI pixel
+  c Codebook for this pixel
+  cbBounds Learning bounds for codebook (Rule of thumb: 10)
+  numChannels Number of color channels we¡¯re learning
+
+  NOTES:
+  cvBounds must be of length equal to numChannels
+
+  RETURN
+  codebook index
 */
 int
 update_codebook (unsigned char *p, codeBook * c, unsigned *cbBounds,
@@ -589,14 +587,14 @@
 
 
 /*
- int clear_stale_entries(codeBook &c) 
-  During learning, after you've learned for some period of time, 
-  periodically call this to clear out stale codebook entries 
-  
-  c Codebook to clean up 
-  
-  Return 
-  number of entries cleared 
+ int clear_stale_entries(codeBook &c)
+  During learning, after you've learned for some period of time,
+  periodically call this to clear out stale codebook entries
+
+  c Codebook to clean up
+
+  Return
+  number of entries cleared
 */
 int
 clear_stale_entries (codeBook * c)
@@ -640,27 +638,27 @@
 
 
 /*
-  uchar background_diff( uchar *p, codeBook &c, 
-  int minMod, int maxMod) 
-  Given a pixel and a codebook, determine if the pixel is 
-  covered by the codebook 
-  
-  p Pixel pointer (YUV interleaved) 
-  c Codebook reference 
-  numChannels Number of channels we are testing 
-  maxMod Add this (possibly negative) number onto 
+  uchar background_diff( uchar *p, codeBook &c,
+  int minMod, int maxMod)
+  Given a pixel and a codebook, determine if the pixel is
+  covered by the codebook
 
-  max level when determining if new pixel is foreground 
-  minMod Subract this (possibly negative) number from 
-  min level when determining if new pixel is foreground 
-  
-  NOTES: 
-  minMod and maxMod must have length numChannels, 
-  e.g. 3 channels => minMod[3], maxMod[3]. There is one min and 
-  one max threshold per channel. 
-  
-  Return 
-  0 => background, 255 => foreground 
+  p Pixel pointer (YUV interleaved)
+  c Codebook reference
+  numChannels Number of channels we are testing
+  maxMod Add this (possibly negative) number onto
+
+  max level when determining if new pixel is foreground
+  minMod Subract this (possibly negative) number from
+  min level when determining if new pixel is foreground
+
+  NOTES:
+  minMod and maxMod must have length numChannels,
+  e.g. 3 channels => minMod[3], maxMod[3]. There is one min and
+  one max threshold per channel.
+
+  Return
+  0 => background, 255 => foreground
 */
 unsigned char
 background_diff (unsigned char *p, codeBook * c, int numChannels,
@@ -799,12 +797,12 @@
       (uchar *) filter->cvFG->imageData;
 
   /*
-     BackgroundSubtractorMOG [1], Gaussian Mixture-based Background/Foreground 
+     BackgroundSubtractorMOG [1], Gaussian Mixture-based Background/Foreground
      Segmentation Algorithm. OpenCV MOG implements the algorithm described in [2].
 
      [1] http://opencv.itseez.com/modules/video/doc/motion_analysis_and_object_tracking.html#backgroundsubtractormog
-     [2] P. KadewTraKuPong and R. Bowden, "An improved adaptive background 
-     mixture model for real-time tracking with shadow detection", Proc. 2nd 
+     [2] P. KadewTraKuPong and R. Bowden, "An improved adaptive background
+     mixture model for real-time tracking with shadow detection", Proc. 2nd
      European Workshop on Advanced Video-Based Surveillance Systems, 2001
    */
 
@@ -824,15 +822,15 @@
       (uchar *) filter->cvFG->imageData;
 
   /*
-     BackgroundSubtractorMOG2 [1], Gaussian Mixture-based Background/Foreground 
-     segmentation algorithm. OpenCV MOG2 implements the algorithm described in 
+     BackgroundSubtractorMOG2 [1], Gaussian Mixture-based Background/Foreground
+     segmentation algorithm. OpenCV MOG2 implements the algorithm described in
      [2] and [3].
 
      [1] http://opencv.itseez.com/modules/video/doc/motion_analysis_and_object_tracking.html#backgroundsubtractormog2
-     [2] Z.Zivkovic, "Improved adaptive Gausian mixture model for background 
+     [2] Z.Zivkovic, "Improved adaptive Gausian mixture model for background
      subtraction", International Conference Pattern Recognition, UK, August, 2004.
-     [3] Z.Zivkovic, F. van der Heijden, "Efficient Adaptive Density Estimation per 
-     Image Pixel for the Task of Background Subtraction", Pattern Recognition 
+     [3] Z.Zivkovic, F. van der Heijden, "Efficient Adaptive Density Estimation per
+     Image Pixel for the Task of Background Subtraction", Pattern Recognition
      Letters, vol. 27, no. 7, pages 773-780, 2006.
    */
 
diff --git a/ext/opencv/gstskindetect.c b/ext/opencv/gstskindetect.cpp
similarity index 97%
rename from ext/opencv/gstskindetect.c
rename to ext/opencv/gstskindetect.cpp
index caf38ec..aade23c 100644
--- a/ext/opencv/gstskindetect.c
+++ b/ext/opencv/gstskindetect.cpp
@@ -1,7 +1,7 @@
 /*
  * GStreamer
  * Copyright (C) 2013 Miguel Casas-Sanchez <miguelecasassanchez@gmail.com>
- * 
+ *
  * Permission is hereby granted, free of charge, to any person obtaining a
  * copy of this software and associated documentation files (the "Software"),
  * to deal in the Software without restriction, including without limitation
@@ -58,9 +58,6 @@
 #include <config.h>
 #endif
 
-#include <gst/gst.h>
-
-#include "gstopencvutils.h"
 #include "gstskindetect.h"
 #include <opencv2/imgproc/imgproc_c.h>
 #include <opencv2/legacy/compat.hpp>
@@ -158,7 +155,7 @@
           "Method to use",
           "Method to use",
           GST_TYPE_SKIN_DETECT_METHOD, HSV,
-          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+          (GParamFlags) (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)));
 
   gst_element_class_set_static_metadata (element_class,
       "skindetect",
@@ -186,7 +183,8 @@
   filter->postprocess = TRUE;
   filter->method = HSV;
 
-  gst_base_transform_set_in_place (GST_BASE_TRANSFORM (filter), FALSE);
+  gst_opencv_video_filter_set_in_place (GST_OPENCV_VIDEO_FILTER_CAST (filter),
+      FALSE);
 }
 
 
@@ -316,17 +314,15 @@
 {
   GstSkinDetect *filter = GST_SKIN_DETECT (base);
 
-
-
   filter->cvRGB->imageData = (char *) img->imageData;
   filter->cvSkin->imageData = (char *) outimg->imageData;
 
   /* SKIN COLOUR BLOB DETECTION */
   if (HSV == filter->method) {
     cvCvtColor (filter->cvRGB, filter->cvHSV, CV_RGB2HSV);
-    cvCvtPixToPlane (filter->cvHSV, filter->cvH, filter->cvS, filter->cvV, 0);  /*  Extract the 3 color components. */
+    cvSplit (filter->cvHSV, filter->cvH, filter->cvS, filter->cvV, 0);  /*  Extract the 3 color components. */
 
-    /*  Detect which pixels in each of the H, S and V channels are probably skin pixels. 
+    /*  Detect which pixels in each of the H, S and V channels are probably skin pixels.
        Assume that skin has a Hue between 0 to 18 (out of 180), and Saturation above 50, and Brightness above 80. */
     cvThreshold (filter->cvH, filter->cvH2, 10, UCHAR_MAX, CV_THRESH_BINARY);   /* (hue > 10) */
     cvThreshold (filter->cvH, filter->cvH, 20, UCHAR_MAX, CV_THRESH_BINARY_INV);        /* (hue < 20) */
@@ -336,7 +332,7 @@
     /*  erode the HUE to get rid of noise. */
     cvErode (filter->cvH, filter->cvH, NULL, 1);
 
-    /*  Combine all 3 thresholded color components, so that an output pixel will only 
+    /*  Combine all 3 thresholded color components, so that an output pixel will only
        be white (255) if the H, S and V pixels were also white.
        imageSkin = (hue > 10) ^ (hue < 20) ^ (sat > 48) ^ (val > 80), where   ^ mean pixels-wise AND */
     cvAnd (filter->cvH, filter->cvS, filter->cvSkinPixels1, NULL);
@@ -374,7 +370,7 @@
     cvCvtColor (filter->cvdraft, filter->cvRGB, CV_GRAY2RGB);
   }
 
-  /* After this we have a RGB Black and white image with the skin, in 
+  /* After this we have a RGB Black and white image with the skin, in
      filter->cvRGB. We can postprocess by applying 1 erode-dilate and 1
      dilate-erode, or alternatively 1 opening-closing all together, with
      the goal of removing small (spurious) skin spots and creating large
diff --git a/ext/opencv/gstskindetect.h b/ext/opencv/gstskindetect.h
index 910d22e..a9c548d 100644
--- a/ext/opencv/gstskindetect.h
+++ b/ext/opencv/gstskindetect.h
@@ -3,7 +3,7 @@
  * Copyright (C) 2005 Thomas Vander Stichele <thomas@apestaart.org>
  * Copyright (C) 2005 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
  * Copyright (C) 2008 Michael Sheldon <mike@mikeasoft.com>
- * 
+ *
  * Permission is hereby granted, free of charge, to any person obtaining a
  * copy of this software and associated documentation files (the "Software"),
  * to deal in the Software without restriction, including without limitation
@@ -46,8 +46,6 @@
 #ifndef __GST_SKIN_DETECT_H__
 #define __GST_SKIN_DETECT_H__
 
-#include <gst/gst.h>
-
 #include <gstopencvvideofilter.h>
 
 G_BEGIN_DECLS
diff --git a/ext/opencv/gsttemplatematch.c b/ext/opencv/gsttemplatematch.cpp
similarity index 78%
rename from ext/opencv/gsttemplatematch.c
rename to ext/opencv/gsttemplatematch.cpp
index 21d8cd4..1223066 100644
--- a/ext/opencv/gsttemplatematch.c
+++ b/ext/opencv/gsttemplatematch.cpp
@@ -4,7 +4,7 @@
  * Copyright (C) 2005 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
  * Copyright (C) 2008 Michael Sheldon <mike@mikeasoft.com>
  * Copyright (C) 2009 Noam Lewis <jones.noamle@gmail.com>
- * 
+ *
  * Permission is hereby granted, free of charge, to any person obtaining a
  * copy of this software and associated documentation files (the "Software"),
  * to deal in the Software without restriction, including without limitation
@@ -52,7 +52,7 @@
  * <refsect2>
  * <title>Example launch line</title>
  * |[
- * gst-launch-0.10 videotestsrc ! decodebin ! videoconvert ! templatematch template=/path/to/file.jpg ! videoconvert ! xvimagesink
+ * gst-launch-1.0 videotestsrc ! decodebin ! videoconvert ! templatematch template=/path/to/file.jpg ! videoconvert ! xvimagesink
  * ]|
  * </refsect2>
  */
@@ -61,10 +61,7 @@
 #  include <config.h>
 #endif
 
-#include <gst/gst.h>
-
 #include "../../gst-libs/gst/gst-i18n-plugin.h"
-#include "gstopencvutils.h"
 #include "gsttemplatematch.h"
 #include <opencv2/imgproc/imgproc_c.h>
 
@@ -102,7 +99,8 @@
     GST_STATIC_CAPS (GST_VIDEO_CAPS_MAKE ("BGR"))
     );
 
-G_DEFINE_TYPE (GstTemplateMatch, gst_template_match, GST_TYPE_ELEMENT);
+G_DEFINE_TYPE (GstTemplateMatch, gst_template_match,
+    GST_TYPE_OPENCV_VIDEO_FILTER);
 
 static void gst_template_match_finalize (GObject * object);
 static void gst_template_match_set_property (GObject * object, guint prop_id,
@@ -110,42 +108,38 @@
 static void gst_template_match_get_property (GObject * object, guint prop_id,
     GValue * value, GParamSpec * pspec);
 
-static gboolean gst_template_match_handle_sink_event (GstPad * pad,
-    GstObject * parent, GstEvent * event);
-static GstFlowReturn gst_template_match_chain (GstPad * pad, GstObject * parent,
-    GstBuffer * buf);
-
-static void gst_template_match_load_template (GstTemplateMatch * filter,
-    gchar * template);
-static void gst_template_match_match (IplImage * input, IplImage * template,
-    IplImage * dist_image, double *best_res, CvPoint * best_pos, int method);
-
-
+static GstFlowReturn gst_template_match_transform_ip (GstOpencvVideoFilter *
+    filter, GstBuffer * buf, IplImage * img);
 
 /* initialize the templatematch's class */
 static void
 gst_template_match_class_init (GstTemplateMatchClass * klass)
 {
   GObjectClass *gobject_class;
+  GstOpencvVideoFilterClass *gstopencvbasefilter_class;
   GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
 
   gobject_class = (GObjectClass *) klass;
+  gstopencvbasefilter_class = (GstOpencvVideoFilterClass *) klass;
 
   gobject_class->finalize = gst_template_match_finalize;
   gobject_class->set_property = gst_template_match_set_property;
   gobject_class->get_property = gst_template_match_get_property;
 
+  gstopencvbasefilter_class->cv_trans_ip_func = gst_template_match_transform_ip;
+
   g_object_class_install_property (gobject_class, PROP_METHOD,
       g_param_spec_int ("method", "Method",
           "Specifies the way the template must be compared with image regions. 0=SQDIFF, 1=SQDIFF_NORMED, 2=CCOR, 3=CCOR_NORMED, 4=CCOEFF, 5=CCOEFF_NORMED.",
-          0, 5, DEFAULT_METHOD, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+          0, 5, DEFAULT_METHOD,
+          (GParamFlags) (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)));
   g_object_class_install_property (gobject_class, PROP_TEMPLATE,
       g_param_spec_string ("template", "Template", "Filename of template image",
-          NULL, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+          NULL, (GParamFlags) (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)));
   g_object_class_install_property (gobject_class, PROP_DISPLAY,
       g_param_spec_boolean ("display", "Display",
           "Sets whether the detected template should be highlighted in the output",
-          TRUE, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+          TRUE, (GParamFlags) (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)));
 
   gst_element_class_set_static_metadata (element_class,
       "templatematch",
@@ -167,24 +161,50 @@
 static void
 gst_template_match_init (GstTemplateMatch * filter)
 {
-  filter->sinkpad = gst_pad_new_from_static_template (&sink_factory, "sink");
-  gst_pad_set_event_function (filter->sinkpad,
-      GST_DEBUG_FUNCPTR (gst_template_match_handle_sink_event));
-  gst_pad_set_chain_function (filter->sinkpad,
-      GST_DEBUG_FUNCPTR (gst_template_match_chain));
-  GST_PAD_SET_PROXY_CAPS (filter->sinkpad);
-
-  filter->srcpad = gst_pad_new_from_static_template (&src_factory, "src");
-  GST_PAD_SET_PROXY_CAPS (filter->srcpad);
-
-  gst_element_add_pad (GST_ELEMENT (filter), filter->sinkpad);
-  gst_element_add_pad (GST_ELEMENT (filter), filter->srcpad);
   filter->templ = NULL;
   filter->display = TRUE;
   filter->cvTemplateImage = NULL;
   filter->cvDistImage = NULL;
-  filter->cvImage = NULL;
   filter->method = DEFAULT_METHOD;
+
+  gst_opencv_video_filter_set_in_place (GST_OPENCV_VIDEO_FILTER_CAST (filter),
+      TRUE);
+}
+
+/* We take ownership of template here */
+static void
+gst_template_match_load_template (GstTemplateMatch * filter, gchar * templ)
+{
+  gchar *oldTemplateFilename = NULL;
+  IplImage *oldTemplateImage = NULL, *newTemplateImage = NULL, *oldDistImage =
+      NULL;
+
+  if (templ) {
+    newTemplateImage = cvLoadImage (templ, CV_LOAD_IMAGE_COLOR);
+    if (!newTemplateImage) {
+      /* Unfortunately OpenCV doesn't seem to provide any way of finding out
+         why the image load failed, so we can't be more specific than FAILED: */
+      GST_ELEMENT_WARNING (filter, RESOURCE, FAILED,
+          (_("OpenCV failed to load template image")),
+          ("While attempting to load template '%s'", templ));
+      g_free (templ);
+      templ = NULL;
+    }
+  }
+
+  GST_OBJECT_LOCK (filter);
+  oldTemplateFilename = filter->templ;
+  filter->templ = templ;
+  oldTemplateImage = filter->cvTemplateImage;
+  filter->cvTemplateImage = newTemplateImage;
+  oldDistImage = filter->cvDistImage;
+  /* This will be recreated in the chain function as required: */
+  filter->cvDistImage = NULL;
+  GST_OBJECT_UNLOCK (filter);
+
+  cvReleaseImage (&oldDistImage);
+  cvReleaseImage (&oldTemplateImage);
+  g_free (oldTemplateFilename);
 }
 
 static void
@@ -256,42 +276,6 @@
 
 /* GstElement vmethod implementations */
 
-/* this function handles the link with other elements */
-static gboolean
-gst_template_match_handle_sink_event (GstPad * pad, GstObject * parent,
-    GstEvent * event)
-{
-  GstTemplateMatch *filter;
-  GstVideoInfo info;
-  gboolean res = TRUE;
-
-  filter = GST_TEMPLATE_MATCH (parent);
-  switch (GST_EVENT_TYPE (event)) {
-    case GST_EVENT_CAPS:
-    {
-      GstCaps *caps;
-      gst_event_parse_caps (event, &caps);
-      gst_video_info_from_caps (&info, caps);
-
-      if (filter->cvImage) {
-        cvReleaseImageHeader (&filter->cvImage);
-      }
-      filter->cvImage =
-          cvCreateImageHeader (cvSize (info.width, info.height), IPL_DEPTH_8U,
-          3);
-      break;
-    }
-    default:
-      break;
-  }
-
-  res = gst_pad_event_default (pad, parent, event);
-
-  return res;
-
-
-}
-
 static void
 gst_template_match_finalize (GObject * object)
 {
@@ -299,9 +283,7 @@
   filter = GST_TEMPLATE_MATCH (object);
 
   g_free (filter->templ);
-  if (filter->cvImage) {
-    cvReleaseImageHeader (&filter->cvImage);
-  }
+
   if (filter->cvDistImage) {
     cvReleaseImage (&filter->cvDistImage);
   }
@@ -312,45 +294,57 @@
   G_OBJECT_CLASS (gst_template_match_parent_class)->finalize (object);
 }
 
+static void
+gst_template_match_match (IplImage * input, IplImage * templ,
+    IplImage * dist_image, double *best_res, CvPoint * best_pos, int method)
+{
+  double dist_min = 0, dist_max = 0;
+  CvPoint min_pos, max_pos;
+  cvMatchTemplate (input, templ, dist_image, method);
+  cvMinMaxLoc (dist_image, &dist_min, &dist_max, &min_pos, &max_pos, NULL);
+  if ((CV_TM_SQDIFF_NORMED == method) || (CV_TM_SQDIFF == method)) {
+    *best_res = dist_min;
+    *best_pos = min_pos;
+    if (CV_TM_SQDIFF_NORMED == method) {
+      *best_res = 1 - *best_res;
+    }
+  } else {
+    *best_res = dist_max;
+    *best_pos = max_pos;
+  }
+}
+
 /* chain function
  * this function does the actual processing
  */
 static GstFlowReturn
-gst_template_match_chain (GstPad * pad, GstObject * parent, GstBuffer * buf)
+gst_template_match_transform_ip (GstOpencvVideoFilter * base, GstBuffer * buf,
+    IplImage * img)
 {
   GstTemplateMatch *filter;
   CvPoint best_pos;
   double best_res;
-  GstMapInfo info;
   GstMessage *m = NULL;
 
-  filter = GST_TEMPLATE_MATCH (parent);
+  filter = GST_TEMPLATE_MATCH (base);
 
-  if ((!filter) || (!buf)) {
-    return GST_FLOW_OK;
-  }
   GST_LOG_OBJECT (filter, "Buffer size %u", (guint) gst_buffer_get_size (buf));
 
-  buf = gst_buffer_make_writable (buf);
-  gst_buffer_map (buf, &info, GST_MAP_READWRITE);
-  filter->cvImage->imageData = (char *) info.data;
-
   GST_OBJECT_LOCK (filter);
   if (filter->cvTemplateImage && !filter->cvDistImage) {
-    if (filter->cvTemplateImage->width > filter->cvImage->width) {
+    if (filter->cvTemplateImage->width > img->width) {
       GST_WARNING ("Template Image is wider than input image");
-    } else if (filter->cvTemplateImage->height > filter->cvImage->height) {
+    } else if (filter->cvTemplateImage->height > img->height) {
       GST_WARNING ("Template Image is taller than input image");
     } else {
 
       GST_DEBUG_OBJECT (filter, "cvCreateImage (Size(%d-%d+1,%d) %d, %d)",
-          filter->cvImage->width, filter->cvTemplateImage->width,
-          filter->cvImage->height - filter->cvTemplateImage->height + 1,
-          IPL_DEPTH_32F, 1);
+          img->width, filter->cvTemplateImage->width,
+          img->height - filter->cvTemplateImage->height + 1, IPL_DEPTH_32F, 1);
       filter->cvDistImage =
-          cvCreateImage (cvSize (filter->cvImage->width -
+          cvCreateImage (cvSize (img->width -
               filter->cvTemplateImage->width + 1,
-              filter->cvImage->height - filter->cvTemplateImage->height + 1),
+              img->height - filter->cvTemplateImage->height + 1),
           IPL_DEPTH_32F, 1);
       if (!filter->cvDistImage) {
         GST_WARNING ("Couldn't create dist image.");
@@ -360,7 +354,7 @@
   if (filter->cvTemplateImage && filter->cvDistImage) {
     GstStructure *s;
 
-    gst_template_match_match (filter->cvImage, filter->cvTemplateImage,
+    gst_template_match_match (img, filter->cvTemplateImage,
         filter->cvDistImage, &best_res, &best_pos, filter->method);
 
     s = gst_structure_new ("template_match",
@@ -390,7 +384,7 @@
 
       corner.x += filter->cvTemplateImage->width;
       corner.y += filter->cvTemplateImage->height;
-      cvRectangle (filter->cvImage, best_pos, corner, color, 3, 8, 0);
+      cvRectangle (img, best_pos, corner, color, 3, 8, 0);
     }
 
   }
@@ -399,69 +393,9 @@
   if (m) {
     gst_element_post_message (GST_ELEMENT (filter), m);
   }
-  return gst_pad_push (filter->srcpad, buf);
+  return GST_FLOW_OK;
 }
 
-
-
-static void
-gst_template_match_match (IplImage * input, IplImage * templ,
-    IplImage * dist_image, double *best_res, CvPoint * best_pos, int method)
-{
-  double dist_min = 0, dist_max = 0;
-  CvPoint min_pos, max_pos;
-  cvMatchTemplate (input, templ, dist_image, method);
-  cvMinMaxLoc (dist_image, &dist_min, &dist_max, &min_pos, &max_pos, NULL);
-  if ((CV_TM_SQDIFF_NORMED == method) || (CV_TM_SQDIFF == method)) {
-    *best_res = dist_min;
-    *best_pos = min_pos;
-    if (CV_TM_SQDIFF_NORMED == method) {
-      *best_res = 1 - *best_res;
-    }
-  } else {
-    *best_res = dist_max;
-    *best_pos = max_pos;
-  }
-}
-
-
-/* We take ownership of template here */
-static void
-gst_template_match_load_template (GstTemplateMatch * filter, gchar * templ)
-{
-  gchar *oldTemplateFilename = NULL;
-  IplImage *oldTemplateImage = NULL, *newTemplateImage = NULL, *oldDistImage =
-      NULL;
-
-  if (templ) {
-    newTemplateImage = cvLoadImage (templ, CV_LOAD_IMAGE_COLOR);
-    if (!newTemplateImage) {
-      /* Unfortunately OpenCV doesn't seem to provide any way of finding out
-         why the image load failed, so we can't be more specific than FAILED: */
-      GST_ELEMENT_WARNING (filter, RESOURCE, FAILED,
-          (_("OpenCV failed to load template image")),
-          ("While attempting to load template '%s'", templ));
-      g_free (templ);
-      templ = NULL;
-    }
-  }
-
-  GST_OBJECT_LOCK (filter);
-  oldTemplateFilename = filter->templ;
-  filter->templ = templ;
-  oldTemplateImage = filter->cvTemplateImage;
-  filter->cvTemplateImage = newTemplateImage;
-  oldDistImage = filter->cvDistImage;
-  /* This will be recreated in the chain function as required: */
-  filter->cvDistImage = NULL;
-  GST_OBJECT_UNLOCK (filter);
-
-  cvReleaseImage (&oldDistImage);
-  cvReleaseImage (&oldTemplateImage);
-  g_free (oldTemplateFilename);
-}
-
-
 /* entry point to initialize the plug-in
  * initialize the plug-in itself
  * register the element factories and other features
diff --git a/ext/opencv/gsttemplatematch.h b/ext/opencv/gsttemplatematch.h
index b6c0426..e7c0202 100644
--- a/ext/opencv/gsttemplatematch.h
+++ b/ext/opencv/gsttemplatematch.h
@@ -3,7 +3,7 @@
  * Copyright (C) 2005 Thomas Vander Stichele <thomas@apestaart.org>
  * Copyright (C) 2005 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
  * Copyright (C) 2008 Michael Sheldon <mike@mikeasoft.com>
- * 
+ *
  * Permission is hereby granted, free of charge, to any person obtaining a
  * copy of this software and associated documentation files (the "Software"),
  * to deal in the Software without restriction, including without limitation
@@ -46,7 +46,7 @@
 #ifndef __GST_TEMPLATE_MATCH_H__
 #define __GST_TEMPLATE_MATCH_H__
 
-#include <gst/gst.h>
+#include <gstopencvvideofilter.h>
 
 #ifdef HAVE_HIGHGUI_H
 #include <highgui.h>            // includes highGUI definitions
@@ -72,21 +72,19 @@
 
 struct _GstTemplateMatch
 {
-  GstElement element;
-
-  GstPad *sinkpad, *srcpad;
+  GstOpencvVideoFilter element;
 
   gint method;
   gboolean display;
 
   gchar *templ;
 
-  IplImage *cvImage, *cvGray, *cvTemplateImage, *cvDistImage;
+  IplImage *cvGray, *cvTemplateImage, *cvDistImage;
 };
 
 struct _GstTemplateMatchClass
 {
-  GstElementClass parent_class;
+  GstOpencvVideoFilterClass parent_class;
 };
 
 GType gst_template_match_get_type (void);
diff --git a/ext/opencv/gsttextoverlay.c b/ext/opencv/gsttextoverlay.cpp
similarity index 76%
rename from ext/opencv/gsttextoverlay.c
rename to ext/opencv/gsttextoverlay.cpp
index 9f7e4b7..7025b36 100644
--- a/ext/opencv/gsttextoverlay.c
+++ b/ext/opencv/gsttextoverlay.cpp
@@ -3,7 +3,7 @@
  * Copyright (C) 2005 Thomas Vander Stichele <thomas@apestaart.org>
  * Copyright (C) 2005 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
  * Copyright (C) 2010 Sreerenj Balachandran <bsreerenj@gmail.com>
- * 
+ *
  * Permission is hereby granted, free of charge, to any person obtaining a
  * copy of this software and associated documentation files (the "Software"),
  * to deal in the Software without restriction, including without limitation
@@ -60,9 +60,6 @@
 #  include <config.h>
 #endif
 
-#include <gst/gst.h>
-
-#include "gstopencvutils.h"
 #include "gsttextoverlay.h"
 
 GST_DEBUG_CATEGORY_STATIC (gst_opencv_text_overlay_debug);
@@ -115,17 +112,16 @@
     GST_STATIC_CAPS (GST_VIDEO_CAPS_MAKE ("RGB"))
     );
 
-G_DEFINE_TYPE (GstOpencvTextOverlay, gst_opencv_text_overlay, GST_TYPE_ELEMENT);
+G_DEFINE_TYPE (GstOpencvTextOverlay, gst_opencv_text_overlay,
+    GST_TYPE_OPENCV_VIDEO_FILTER);
 
 static void gst_opencv_text_overlay_set_property (GObject * object,
     guint prop_id, const GValue * value, GParamSpec * pspec);
 static void gst_opencv_text_overlay_get_property (GObject * object,
     guint prop_id, GValue * value, GParamSpec * pspec);
 
-static gboolean gst_opencv_text_overlay_handle_sink_event (GstPad * pad,
-    GstObject * parent, GstEvent * event);
-static GstFlowReturn gst_opencv_text_overlay_chain (GstPad * pad,
-    GstObject * parent, GstBuffer * buf);
+static GstFlowReturn gst_opencv_text_overlay_transform_ip (GstOpencvVideoFilter
+    * filter, GstBuffer * buf, IplImage * img);
 
 /* Clean up */
 static void
@@ -133,10 +129,6 @@
 {
   GstOpencvTextOverlay *filter = GST_OPENCV_TEXT_OVERLAY (obj);
 
-  if (filter->cvImage) {
-    cvReleaseImage (&filter->cvImage);
-  }
-
   g_free (filter->textbuf);
 
   G_OBJECT_CLASS (gst_opencv_text_overlay_parent_class)->finalize (obj);
@@ -147,12 +139,16 @@
 gst_opencv_text_overlay_class_init (GstOpencvTextOverlayClass * klass)
 {
   GObjectClass *gobject_class;
-
+  GstOpencvVideoFilterClass *gstopencvbasefilter_class;
   GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
-  gobject_class = (GObjectClass *) klass;
 
+  gobject_class = (GObjectClass *) klass;
   gobject_class->finalize =
       GST_DEBUG_FUNCPTR (gst_opencv_text_overlay_finalize);
+  gstopencvbasefilter_class = (GstOpencvVideoFilterClass *) klass;
+
+  gstopencvbasefilter_class->cv_trans_ip_func =
+      gst_opencv_text_overlay_transform_ip;
 
   gobject_class->set_property = gst_opencv_text_overlay_set_property;
   gobject_class->get_property = gst_opencv_text_overlay_get_property;
@@ -160,47 +156,55 @@
   g_object_class_install_property (gobject_class, PROP_TEXT,
       g_param_spec_string ("text", "text",
           "Text to be display.", DEFAULT_PROP_TEXT,
-          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+          (GParamFlags) (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)));
 
   g_object_class_install_property (gobject_class, PROP_XPOS,
       g_param_spec_int ("xpos", "horizontal position",
           "Sets the Horizontal position", 0, G_MAXINT,
-          DEFAULT_PROP_XPOS, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+          DEFAULT_PROP_XPOS,
+          (GParamFlags) (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)));
 
   g_object_class_install_property (gobject_class, PROP_YPOS,
       g_param_spec_int ("ypos", "vertical position",
           "Sets the Vertical position", 0, G_MAXINT,
-          DEFAULT_PROP_YPOS, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+          DEFAULT_PROP_YPOS,
+          (GParamFlags) (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)));
 
   g_object_class_install_property (gobject_class, PROP_THICKNESS,
       g_param_spec_int ("thickness", "font thickness",
           "Sets the Thickness of Font", 0, G_MAXINT,
-          DEFAULT_PROP_THICKNESS, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+          DEFAULT_PROP_THICKNESS,
+          (GParamFlags) (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)));
 
   g_object_class_install_property (gobject_class, PROP_COLOR_R,
       g_param_spec_int ("colorR", "color -Red ",
           "Sets the color -R", 0, 255,
-          DEFAULT_PROP_COLOR, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+          DEFAULT_PROP_COLOR,
+          (GParamFlags) (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)));
 
   g_object_class_install_property (gobject_class, PROP_COLOR_G,
       g_param_spec_int ("colorG", "color -Green",
           "Sets the color -G", 0, 255,
-          DEFAULT_PROP_COLOR, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+          DEFAULT_PROP_COLOR,
+          (GParamFlags) (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)));
 
   g_object_class_install_property (gobject_class, PROP_COLOR_B,
       g_param_spec_int ("colorB", "color -Blue",
           "Sets the color -B", 0, 255,
-          DEFAULT_PROP_COLOR, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+          DEFAULT_PROP_COLOR,
+          (GParamFlags) (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)));
 
   g_object_class_install_property (gobject_class, PROP_HEIGHT,
       g_param_spec_double ("height", "Height",
           "Sets the height of fonts", 1.0, 5.0,
-          DEFAULT_HEIGHT, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+          DEFAULT_HEIGHT,
+          (GParamFlags) (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)));
 
   g_object_class_install_property (gobject_class, PROP_WIDTH,
       g_param_spec_double ("width", "Width",
           "Sets the width of fonts", 1.0, 5.0,
-          DEFAULT_WIDTH, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+          DEFAULT_WIDTH,
+          (GParamFlags) (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)));
 
   gst_element_class_set_static_metadata (element_class,
       "opencvtextoverlay",
@@ -222,20 +226,6 @@
 static void
 gst_opencv_text_overlay_init (GstOpencvTextOverlay * filter)
 {
-  filter->sinkpad = gst_pad_new_from_static_template (&sink_factory, "sink");
-  GST_PAD_SET_PROXY_CAPS (filter->sinkpad);
-  gst_element_add_pad (GST_ELEMENT (filter), filter->sinkpad);
-
-  gst_pad_set_event_function (filter->sinkpad,
-      GST_DEBUG_FUNCPTR (gst_opencv_text_overlay_handle_sink_event));
-
-  gst_pad_set_chain_function (filter->sinkpad,
-      GST_DEBUG_FUNCPTR (gst_opencv_text_overlay_chain));
-
-  filter->srcpad = gst_pad_new_from_static_template (&src_factory, "src");
-  GST_PAD_SET_PROXY_CAPS (filter->srcpad);
-  gst_element_add_pad (GST_ELEMENT (filter), filter->srcpad);
-
   filter->textbuf = g_strdup (DEFAULT_PROP_TEXT);
   filter->width = DEFAULT_PROP_WIDTH;
   filter->height = DEFAULT_PROP_HEIGHT;
@@ -245,6 +235,9 @@
   filter->colorR = DEFAULT_PROP_COLOR;
   filter->colorG = DEFAULT_PROP_COLOR;
   filter->colorB = DEFAULT_PROP_COLOR;
+
+  gst_opencv_video_filter_set_in_place (GST_OPENCV_VIDEO_FILTER_CAST (filter),
+      TRUE);
 }
 
 static void
@@ -330,71 +323,22 @@
   }
 }
 
-static gboolean
-gst_opencv_text_overlay_handle_sink_event (GstPad * pad, GstObject * parent,
-    GstEvent * event)
-{
-  GstOpencvTextOverlay *filter;
-  gint width, height;
-  GstStructure *structure;
-  gboolean res = TRUE;
-
-  filter = GST_OPENCV_TEXT_OVERLAY (parent);
-
-  switch (GST_EVENT_TYPE (event)) {
-    case GST_EVENT_CAPS:
-    {
-      GstCaps *caps;
-      gst_event_parse_caps (event, &caps);
-
-      structure = gst_caps_get_structure (caps, 0);
-      gst_structure_get_int (structure, "width", &width);
-      gst_structure_get_int (structure, "height", &height);
-
-      if (filter->cvImage) {
-        cvReleaseImage (&filter->cvImage);
-      }
-      filter->cvImage = cvCreateImage (cvSize (width, height), IPL_DEPTH_8U, 3);
-
-      break;
-    }
-    default:
-      break;
-  }
-
-  res = gst_pad_event_default (pad, parent, event);
-  return res;
-}
-
-
 /* chain function
  * this function does the actual processing
  */
 static GstFlowReturn
-gst_opencv_text_overlay_chain (GstPad * pad, GstObject * parent,
-    GstBuffer * buf)
+gst_opencv_text_overlay_transform_ip (GstOpencvVideoFilter * base,
+    GstBuffer * buf, IplImage * img)
 {
-  GstOpencvTextOverlay *filter;
-  GstMapInfo map_info;
-  guint8 *data;
-
-  filter = GST_OPENCV_TEXT_OVERLAY (parent);
-
-  gst_buffer_map (buf, &map_info, GST_MAP_READ);
-  data = map_info.data;
-
-  filter->cvImage->imageData = (char *) data;
+  GstOpencvTextOverlay *filter = GST_OPENCV_TEXT_OVERLAY (base);
 
   cvInitFont (&(filter->font), CV_FONT_VECTOR0, filter->width, filter->height,
       0, filter->thickness, 0);
-
-  buf = gst_buffer_make_writable (buf);
-  cvPutText (filter->cvImage, filter->textbuf, cvPoint (filter->xpos,
+  cvPutText (img, filter->textbuf, cvPoint (filter->xpos,
           filter->ypos), &(filter->font), cvScalar (filter->colorR,
           filter->colorG, filter->colorB, 0));
 
-  gst_buffer_unmap (buf, &map_info);
-  return gst_pad_push (filter->srcpad, buf);
+  return GST_FLOW_OK;
 }
 
 
diff --git a/ext/opencv/gsttextoverlay.h b/ext/opencv/gsttextoverlay.h
index e92ab07..65a7d75 100644
--- a/ext/opencv/gsttextoverlay.h
+++ b/ext/opencv/gsttextoverlay.h
@@ -3,7 +3,7 @@
  * Copyright (C) 2005 Thomas Vander Stichele <thomas@apestaart.org>
  * Copyright (C) 2005 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
  * Copyright (C) 2010 Sreerenj Balachandran <bsreerenj@gmail.com>
- * 
+ *
  * Permission is hereby granted, free of charge, to any person obtaining a
  * copy of this software and associated documentation files (the "Software"),
  * to deal in the Software without restriction, including without limitation
@@ -46,8 +46,7 @@
 #ifndef __GST_OPENCV_TEXT_OVERLAY_H__
 #define __GST_OPENCV_TEXT_OVERLAY_H__
 
-#include <gst/gst.h>
-#include "gstopencvutils.h"
+#include <gstopencvvideofilter.h>
 #include <opencv2/core/core_c.h>
 G_BEGIN_DECLS
 
@@ -68,12 +67,9 @@
 
 struct _GstOpencvTextOverlay
 {
-  GstElement element;
+  GstOpencvVideoFilter element;
 
-  GstPad *sinkpad, *srcpad;
-
-  IplImage *cvImage;
-  CvFont font;  
+  CvFont font;
 
   gint xpos;
   gint ypos;
@@ -85,9 +81,9 @@
 
 };
 
-struct _GstOpencvTextOverlayClass 
+struct _GstOpencvTextOverlayClass
 {
-  GstElementClass parent_class;
+  GstOpencvVideoFilterClass parent_class;
 };
 
 GType gst_opencv_text_overlay_get_type (void);
diff --git a/ext/opencv/motioncells_wrapper.cpp b/ext/opencv/motioncells_wrapper.cpp
index e9794cf..9bce838 100644
--- a/ext/opencv/motioncells_wrapper.cpp
+++ b/ext/opencv/motioncells_wrapper.cpp
@@ -56,6 +56,9 @@
 static int instanceCounter = 0;
 static bool element_id_was_max = false;
 
+vector < instanceOfMC > motioncellsvector;
+vector < int > motioncellsfreeids;
+
 MotionCells *mc;
 char p_str[] = "idx failed";
 
diff --git a/ext/opencv/motioncells_wrapper.h b/ext/opencv/motioncells_wrapper.h
index 1fe5dc3..b6869a1 100644
--- a/ext/opencv/motioncells_wrapper.h
+++ b/ext/opencv/motioncells_wrapper.h
@@ -54,8 +54,6 @@
   int id;
   MotionCells *mc;
 };
-vector < instanceOfMC > motioncellsvector;
-vector < int >motioncellsfreeids;
 
 int searchIdx (int p_id);
 extern "C"
diff --git a/ext/openexr/Makefile.in b/ext/openexr/Makefile.in
index a715b01..71abb32 100644
--- a/ext/openexr/Makefile.in
+++ b/ext/openexr/Makefile.in
@@ -116,16 +116,15 @@
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
 	$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
-	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gsettings.m4 \
-	$(top_srcdir)/m4/gst-fionread.m4 $(top_srcdir)/m4/gst-sdl.m4 \
-	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
-	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
-	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libgcrypt.m4 \
-	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
-	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
-	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
-	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
-	$(top_srcdir)/configure.ac
+	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gst-fionread.m4 \
+	$(top_srcdir)/m4/gst-sdl.m4 $(top_srcdir)/m4/iconv.m4 \
+	$(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \
+	$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
+	$(top_srcdir)/m4/libgcrypt.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
+	$(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \
@@ -294,6 +293,8 @@
 CLUTTER_X11_LIBS = @CLUTTER_X11_LIBS@
 CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
+CUDA_CFLAGS = @CUDA_CFLAGS@
+CUDA_LIBS = @CUDA_LIBS@
 CURL_CFLAGS = @CURL_CFLAGS@
 CURL_LIBS = @CURL_LIBS@
 CXX = @CXX@
@@ -331,6 +332,8 @@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
+EGL_CFLAGS = @EGL_CFLAGS@
+EGL_LIBS = @EGL_LIBS@
 EGREP = @EGREP@
 ERROR_CFLAGS = @ERROR_CFLAGS@
 ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
@@ -339,7 +342,6 @@
 EXIF_CFLAGS = @EXIF_CFLAGS@
 EXIF_LIBS = @EXIF_LIBS@
 FAAC_LIBS = @FAAC_LIBS@
-FAAD_IS_NEAAC = @FAAD_IS_NEAAC@
 FAAD_LIBS = @FAAD_LIBS@
 FFLAGS = @FFLAGS@
 FGREP = @FGREP@
@@ -358,8 +360,9 @@
 GIO_LIBS = @GIO_LIBS@
 GIO_UNIX_CFLAGS = @GIO_UNIX_CFLAGS@
 GIO_UNIX_LIBS = @GIO_UNIX_LIBS@
+GLES2_CFLAGS = @GLES2_CFLAGS@
+GLES2_LIBS = @GLES2_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
-GLIB_COMPILE_SCHEMAS = @GLIB_COMPILE_SCHEMAS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
@@ -376,16 +379,17 @@
 GMODULE_NO_EXPORT_LIBS = @GMODULE_NO_EXPORT_LIBS@
 GMSGFMT = @GMSGFMT@
 GMSGFMT_015 = @GMSGFMT_015@
+GNUSTL_CFLAGS = @GNUSTL_CFLAGS@
+GNUSTL_LIBS = @GNUSTL_LIBS@
 GRAPHENE_CFLAGS = @GRAPHENE_CFLAGS@
 GRAPHENE_LIBS = @GRAPHENE_LIBS@
 GREP = @GREP@
-GSETTINGS_CFLAGS = @GSETTINGS_CFLAGS@
-GSETTINGS_DISABLE_SCHEMAS_COMPILE = @GSETTINGS_DISABLE_SCHEMAS_COMPILE@
-GSETTINGS_LIBS = @GSETTINGS_LIBS@
 GSM_LIBS = @GSM_LIBS@
 GSTPB_PLUGINS_DIR = @GSTPB_PLUGINS_DIR@
 GSTPB_PREFIX = @GSTPB_PREFIX@
 GST_AGE = @GST_AGE@
+GST_ALLOCATORS_CFLAGS = @GST_ALLOCATORS_CFLAGS@
+GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
 GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
 GST_API_VERSION = @GST_API_VERSION@
 GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
@@ -411,6 +415,8 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PBUTILS_CFLAGS = @GST_PBUTILS_CFLAGS@
+GST_PBUTILS_LIBS = @GST_PBUTILS_LIBS@
 GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BAD_CFLAGS = @GST_PLUGINS_BAD_CFLAGS@
@@ -436,6 +442,8 @@
 GST_PREFIX = @GST_PREFIX@
 GST_REVISION = @GST_REVISION@
 GST_TOOLS_DIR = @GST_TOOLS_DIR@
+GST_VIDEO_CFLAGS = @GST_VIDEO_CFLAGS@
+GST_VIDEO_LIBS = @GST_VIDEO_LIBS@
 GTK3_CFLAGS = @GTK3_CFLAGS@
 GTK3_GL_CFLAGS = @GTK3_GL_CFLAGS@
 GTK3_GL_LIBS = @GTK3_GL_LIBS@
@@ -537,6 +545,7 @@
 LTLIBICONV = @LTLIBICONV@
 LTLIBINTL = @LTLIBINTL@
 LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
 MANIFEST_TOOL = @MANIFEST_TOOL@
@@ -550,8 +559,6 @@
 MODPLUG_LIBS = @MODPLUG_LIBS@
 MPEG2ENC_CFLAGS = @MPEG2ENC_CFLAGS@
 MPEG2ENC_LIBS = @MPEG2ENC_LIBS@
-MPG123_CFLAGS = @MPG123_CFLAGS@
-MPG123_LIBS = @MPG123_LIBS@
 MPLEX_CFLAGS = @MPLEX_CFLAGS@
 MPLEX_LDFLAGS = @MPLEX_LDFLAGS@
 MPLEX_LIBS = @MPLEX_LIBS@
@@ -567,6 +574,8 @@
 NETTLE_LIBS = @NETTLE_LIBS@
 NM = @NM@
 NMEDIT = @NMEDIT@
+NVENCODE_CFLAGS = @NVENCODE_CFLAGS@
+NVENCODE_LIBS = @NVENCODE_LIBS@
 OBJC = @OBJC@
 OBJCDEPMODE = @OBJCDEPMODE@
 OBJCFLAGS = @OBJCFLAGS@
@@ -624,16 +633,18 @@
 PYTHON_PLATFORM = @PYTHON_PLATFORM@
 PYTHON_PREFIX = @PYTHON_PREFIX@
 PYTHON_VERSION = @PYTHON_VERSION@
+QT_ANDROID_CFLAGS = @QT_ANDROID_CFLAGS@
+QT_ANDROID_LIBS = @QT_ANDROID_LIBS@
 QT_CFLAGS = @QT_CFLAGS@
 QT_LIBS = @QT_LIBS@
+QT_MAC_CFLAGS = @QT_MAC_CFLAGS@
+QT_MAC_LIBS = @QT_MAC_LIBS@
 QT_WAYLAND_CFLAGS = @QT_WAYLAND_CFLAGS@
 QT_WAYLAND_LIBS = @QT_WAYLAND_LIBS@
 QT_X11_CFLAGS = @QT_X11_CFLAGS@
 QT_X11_LIBS = @QT_X11_LIBS@
 RANLIB = @RANLIB@
 RCC = @RCC@
-RSVG_2_36_2_CFLAGS = @RSVG_2_36_2_CFLAGS@
-RSVG_2_36_2_LIBS = @RSVG_2_36_2_LIBS@
 RSVG_CFLAGS = @RSVG_CFLAGS@
 RSVG_LIBS = @RSVG_LIBS@
 RTMP_CFLAGS = @RTMP_CFLAGS@
@@ -685,6 +696,7 @@
 VOAACENC_LIBS = @VOAACENC_LIBS@
 VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
 VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VULKAN_LIBS = @VULKAN_LIBS@
 WARNING_CFLAGS = @WARNING_CFLAGS@
 WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
 WARNING_OBJCFLAGS = @WARNING_OBJCFLAGS@
@@ -695,6 +707,7 @@
 WAYLAND_LIBS = @WAYLAND_LIBS@
 WEBP_CFLAGS = @WEBP_CFLAGS@
 WEBP_LIBS = @WEBP_LIBS@
+WGET = @WGET@
 WILDMIDI_CFLAGS = @WILDMIDI_CFLAGS@
 WILDMIDI_LIBS = @WILDMIDI_LIBS@
 WINKS_LIBS = @WINKS_LIBS@
@@ -704,6 +717,8 @@
 X11_LIBS = @X11_LIBS@
 X265_CFLAGS = @X265_CFLAGS@
 X265_LIBS = @X265_LIBS@
+XCB_CFLAGS = @XCB_CFLAGS@
+XCB_LIBS = @XCB_LIBS@
 XCOMPOSITE_CFLAGS = @XCOMPOSITE_CFLAGS@
 XCOMPOSITE_LIBS = @XCOMPOSITE_LIBS@
 XGETTEXT = @XGETTEXT@
@@ -741,7 +756,6 @@
 docdir = @docdir@
 dvidir = @dvidir@
 exec_prefix = @exec_prefix@
-gsettingsschemadir = @gsettingsschemadir@
 host = @host@
 host_alias = @host_alias@
 host_cpu = @host_cpu@
diff --git a/ext/openh264/Makefile.in b/ext/openh264/Makefile.in
index ca7109c..18316c1 100644
--- a/ext/openh264/Makefile.in
+++ b/ext/openh264/Makefile.in
@@ -116,16 +116,15 @@
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
 	$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
-	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gsettings.m4 \
-	$(top_srcdir)/m4/gst-fionread.m4 $(top_srcdir)/m4/gst-sdl.m4 \
-	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
-	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
-	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libgcrypt.m4 \
-	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
-	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
-	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
-	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
-	$(top_srcdir)/configure.ac
+	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gst-fionread.m4 \
+	$(top_srcdir)/m4/gst-sdl.m4 $(top_srcdir)/m4/iconv.m4 \
+	$(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \
+	$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
+	$(top_srcdir)/m4/libgcrypt.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
+	$(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \
@@ -294,6 +293,8 @@
 CLUTTER_X11_LIBS = @CLUTTER_X11_LIBS@
 CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
+CUDA_CFLAGS = @CUDA_CFLAGS@
+CUDA_LIBS = @CUDA_LIBS@
 CURL_CFLAGS = @CURL_CFLAGS@
 CURL_LIBS = @CURL_LIBS@
 CXX = @CXX@
@@ -331,6 +332,8 @@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
+EGL_CFLAGS = @EGL_CFLAGS@
+EGL_LIBS = @EGL_LIBS@
 EGREP = @EGREP@
 ERROR_CFLAGS = @ERROR_CFLAGS@
 ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
@@ -339,7 +342,6 @@
 EXIF_CFLAGS = @EXIF_CFLAGS@
 EXIF_LIBS = @EXIF_LIBS@
 FAAC_LIBS = @FAAC_LIBS@
-FAAD_IS_NEAAC = @FAAD_IS_NEAAC@
 FAAD_LIBS = @FAAD_LIBS@
 FFLAGS = @FFLAGS@
 FGREP = @FGREP@
@@ -358,8 +360,9 @@
 GIO_LIBS = @GIO_LIBS@
 GIO_UNIX_CFLAGS = @GIO_UNIX_CFLAGS@
 GIO_UNIX_LIBS = @GIO_UNIX_LIBS@
+GLES2_CFLAGS = @GLES2_CFLAGS@
+GLES2_LIBS = @GLES2_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
-GLIB_COMPILE_SCHEMAS = @GLIB_COMPILE_SCHEMAS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
@@ -376,16 +379,17 @@
 GMODULE_NO_EXPORT_LIBS = @GMODULE_NO_EXPORT_LIBS@
 GMSGFMT = @GMSGFMT@
 GMSGFMT_015 = @GMSGFMT_015@
+GNUSTL_CFLAGS = @GNUSTL_CFLAGS@
+GNUSTL_LIBS = @GNUSTL_LIBS@
 GRAPHENE_CFLAGS = @GRAPHENE_CFLAGS@
 GRAPHENE_LIBS = @GRAPHENE_LIBS@
 GREP = @GREP@
-GSETTINGS_CFLAGS = @GSETTINGS_CFLAGS@
-GSETTINGS_DISABLE_SCHEMAS_COMPILE = @GSETTINGS_DISABLE_SCHEMAS_COMPILE@
-GSETTINGS_LIBS = @GSETTINGS_LIBS@
 GSM_LIBS = @GSM_LIBS@
 GSTPB_PLUGINS_DIR = @GSTPB_PLUGINS_DIR@
 GSTPB_PREFIX = @GSTPB_PREFIX@
 GST_AGE = @GST_AGE@
+GST_ALLOCATORS_CFLAGS = @GST_ALLOCATORS_CFLAGS@
+GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
 GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
 GST_API_VERSION = @GST_API_VERSION@
 GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
@@ -411,6 +415,8 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PBUTILS_CFLAGS = @GST_PBUTILS_CFLAGS@
+GST_PBUTILS_LIBS = @GST_PBUTILS_LIBS@
 GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BAD_CFLAGS = @GST_PLUGINS_BAD_CFLAGS@
@@ -436,6 +442,8 @@
 GST_PREFIX = @GST_PREFIX@
 GST_REVISION = @GST_REVISION@
 GST_TOOLS_DIR = @GST_TOOLS_DIR@
+GST_VIDEO_CFLAGS = @GST_VIDEO_CFLAGS@
+GST_VIDEO_LIBS = @GST_VIDEO_LIBS@
 GTK3_CFLAGS = @GTK3_CFLAGS@
 GTK3_GL_CFLAGS = @GTK3_GL_CFLAGS@
 GTK3_GL_LIBS = @GTK3_GL_LIBS@
@@ -537,6 +545,7 @@
 LTLIBICONV = @LTLIBICONV@
 LTLIBINTL = @LTLIBINTL@
 LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
 MANIFEST_TOOL = @MANIFEST_TOOL@
@@ -550,8 +559,6 @@
 MODPLUG_LIBS = @MODPLUG_LIBS@
 MPEG2ENC_CFLAGS = @MPEG2ENC_CFLAGS@
 MPEG2ENC_LIBS = @MPEG2ENC_LIBS@
-MPG123_CFLAGS = @MPG123_CFLAGS@
-MPG123_LIBS = @MPG123_LIBS@
 MPLEX_CFLAGS = @MPLEX_CFLAGS@
 MPLEX_LDFLAGS = @MPLEX_LDFLAGS@
 MPLEX_LIBS = @MPLEX_LIBS@
@@ -567,6 +574,8 @@
 NETTLE_LIBS = @NETTLE_LIBS@
 NM = @NM@
 NMEDIT = @NMEDIT@
+NVENCODE_CFLAGS = @NVENCODE_CFLAGS@
+NVENCODE_LIBS = @NVENCODE_LIBS@
 OBJC = @OBJC@
 OBJCDEPMODE = @OBJCDEPMODE@
 OBJCFLAGS = @OBJCFLAGS@
@@ -624,16 +633,18 @@
 PYTHON_PLATFORM = @PYTHON_PLATFORM@
 PYTHON_PREFIX = @PYTHON_PREFIX@
 PYTHON_VERSION = @PYTHON_VERSION@
+QT_ANDROID_CFLAGS = @QT_ANDROID_CFLAGS@
+QT_ANDROID_LIBS = @QT_ANDROID_LIBS@
 QT_CFLAGS = @QT_CFLAGS@
 QT_LIBS = @QT_LIBS@
+QT_MAC_CFLAGS = @QT_MAC_CFLAGS@
+QT_MAC_LIBS = @QT_MAC_LIBS@
 QT_WAYLAND_CFLAGS = @QT_WAYLAND_CFLAGS@
 QT_WAYLAND_LIBS = @QT_WAYLAND_LIBS@
 QT_X11_CFLAGS = @QT_X11_CFLAGS@
 QT_X11_LIBS = @QT_X11_LIBS@
 RANLIB = @RANLIB@
 RCC = @RCC@
-RSVG_2_36_2_CFLAGS = @RSVG_2_36_2_CFLAGS@
-RSVG_2_36_2_LIBS = @RSVG_2_36_2_LIBS@
 RSVG_CFLAGS = @RSVG_CFLAGS@
 RSVG_LIBS = @RSVG_LIBS@
 RTMP_CFLAGS = @RTMP_CFLAGS@
@@ -685,6 +696,7 @@
 VOAACENC_LIBS = @VOAACENC_LIBS@
 VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
 VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VULKAN_LIBS = @VULKAN_LIBS@
 WARNING_CFLAGS = @WARNING_CFLAGS@
 WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
 WARNING_OBJCFLAGS = @WARNING_OBJCFLAGS@
@@ -695,6 +707,7 @@
 WAYLAND_LIBS = @WAYLAND_LIBS@
 WEBP_CFLAGS = @WEBP_CFLAGS@
 WEBP_LIBS = @WEBP_LIBS@
+WGET = @WGET@
 WILDMIDI_CFLAGS = @WILDMIDI_CFLAGS@
 WILDMIDI_LIBS = @WILDMIDI_LIBS@
 WINKS_LIBS = @WINKS_LIBS@
@@ -704,6 +717,8 @@
 X11_LIBS = @X11_LIBS@
 X265_CFLAGS = @X265_CFLAGS@
 X265_LIBS = @X265_LIBS@
+XCB_CFLAGS = @XCB_CFLAGS@
+XCB_LIBS = @XCB_LIBS@
 XCOMPOSITE_CFLAGS = @XCOMPOSITE_CFLAGS@
 XCOMPOSITE_LIBS = @XCOMPOSITE_LIBS@
 XGETTEXT = @XGETTEXT@
@@ -741,7 +756,6 @@
 docdir = @docdir@
 dvidir = @dvidir@
 exec_prefix = @exec_prefix@
-gsettingsschemadir = @gsettingsschemadir@
 host = @host@
 host_alias = @host_alias@
 host_cpu = @host_cpu@
diff --git a/ext/openjpeg/Makefile.in b/ext/openjpeg/Makefile.in
index 7bf13a7..d37771a 100644
--- a/ext/openjpeg/Makefile.in
+++ b/ext/openjpeg/Makefile.in
@@ -116,16 +116,15 @@
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
 	$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
-	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gsettings.m4 \
-	$(top_srcdir)/m4/gst-fionread.m4 $(top_srcdir)/m4/gst-sdl.m4 \
-	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
-	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
-	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libgcrypt.m4 \
-	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
-	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
-	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
-	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
-	$(top_srcdir)/configure.ac
+	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gst-fionread.m4 \
+	$(top_srcdir)/m4/gst-sdl.m4 $(top_srcdir)/m4/iconv.m4 \
+	$(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \
+	$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
+	$(top_srcdir)/m4/libgcrypt.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
+	$(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \
@@ -276,6 +275,8 @@
 CLUTTER_X11_LIBS = @CLUTTER_X11_LIBS@
 CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
+CUDA_CFLAGS = @CUDA_CFLAGS@
+CUDA_LIBS = @CUDA_LIBS@
 CURL_CFLAGS = @CURL_CFLAGS@
 CURL_LIBS = @CURL_LIBS@
 CXX = @CXX@
@@ -313,6 +314,8 @@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
+EGL_CFLAGS = @EGL_CFLAGS@
+EGL_LIBS = @EGL_LIBS@
 EGREP = @EGREP@
 ERROR_CFLAGS = @ERROR_CFLAGS@
 ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
@@ -321,7 +324,6 @@
 EXIF_CFLAGS = @EXIF_CFLAGS@
 EXIF_LIBS = @EXIF_LIBS@
 FAAC_LIBS = @FAAC_LIBS@
-FAAD_IS_NEAAC = @FAAD_IS_NEAAC@
 FAAD_LIBS = @FAAD_LIBS@
 FFLAGS = @FFLAGS@
 FGREP = @FGREP@
@@ -340,8 +342,9 @@
 GIO_LIBS = @GIO_LIBS@
 GIO_UNIX_CFLAGS = @GIO_UNIX_CFLAGS@
 GIO_UNIX_LIBS = @GIO_UNIX_LIBS@
+GLES2_CFLAGS = @GLES2_CFLAGS@
+GLES2_LIBS = @GLES2_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
-GLIB_COMPILE_SCHEMAS = @GLIB_COMPILE_SCHEMAS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
@@ -358,16 +361,17 @@
 GMODULE_NO_EXPORT_LIBS = @GMODULE_NO_EXPORT_LIBS@
 GMSGFMT = @GMSGFMT@
 GMSGFMT_015 = @GMSGFMT_015@
+GNUSTL_CFLAGS = @GNUSTL_CFLAGS@
+GNUSTL_LIBS = @GNUSTL_LIBS@
 GRAPHENE_CFLAGS = @GRAPHENE_CFLAGS@
 GRAPHENE_LIBS = @GRAPHENE_LIBS@
 GREP = @GREP@
-GSETTINGS_CFLAGS = @GSETTINGS_CFLAGS@
-GSETTINGS_DISABLE_SCHEMAS_COMPILE = @GSETTINGS_DISABLE_SCHEMAS_COMPILE@
-GSETTINGS_LIBS = @GSETTINGS_LIBS@
 GSM_LIBS = @GSM_LIBS@
 GSTPB_PLUGINS_DIR = @GSTPB_PLUGINS_DIR@
 GSTPB_PREFIX = @GSTPB_PREFIX@
 GST_AGE = @GST_AGE@
+GST_ALLOCATORS_CFLAGS = @GST_ALLOCATORS_CFLAGS@
+GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
 GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
 GST_API_VERSION = @GST_API_VERSION@
 GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
@@ -393,6 +397,8 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PBUTILS_CFLAGS = @GST_PBUTILS_CFLAGS@
+GST_PBUTILS_LIBS = @GST_PBUTILS_LIBS@
 GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BAD_CFLAGS = @GST_PLUGINS_BAD_CFLAGS@
@@ -418,6 +424,8 @@
 GST_PREFIX = @GST_PREFIX@
 GST_REVISION = @GST_REVISION@
 GST_TOOLS_DIR = @GST_TOOLS_DIR@
+GST_VIDEO_CFLAGS = @GST_VIDEO_CFLAGS@
+GST_VIDEO_LIBS = @GST_VIDEO_LIBS@
 GTK3_CFLAGS = @GTK3_CFLAGS@
 GTK3_GL_CFLAGS = @GTK3_GL_CFLAGS@
 GTK3_GL_LIBS = @GTK3_GL_LIBS@
@@ -519,6 +527,7 @@
 LTLIBICONV = @LTLIBICONV@
 LTLIBINTL = @LTLIBINTL@
 LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
 MANIFEST_TOOL = @MANIFEST_TOOL@
@@ -532,8 +541,6 @@
 MODPLUG_LIBS = @MODPLUG_LIBS@
 MPEG2ENC_CFLAGS = @MPEG2ENC_CFLAGS@
 MPEG2ENC_LIBS = @MPEG2ENC_LIBS@
-MPG123_CFLAGS = @MPG123_CFLAGS@
-MPG123_LIBS = @MPG123_LIBS@
 MPLEX_CFLAGS = @MPLEX_CFLAGS@
 MPLEX_LDFLAGS = @MPLEX_LDFLAGS@
 MPLEX_LIBS = @MPLEX_LIBS@
@@ -549,6 +556,8 @@
 NETTLE_LIBS = @NETTLE_LIBS@
 NM = @NM@
 NMEDIT = @NMEDIT@
+NVENCODE_CFLAGS = @NVENCODE_CFLAGS@
+NVENCODE_LIBS = @NVENCODE_LIBS@
 OBJC = @OBJC@
 OBJCDEPMODE = @OBJCDEPMODE@
 OBJCFLAGS = @OBJCFLAGS@
@@ -606,16 +615,18 @@
 PYTHON_PLATFORM = @PYTHON_PLATFORM@
 PYTHON_PREFIX = @PYTHON_PREFIX@
 PYTHON_VERSION = @PYTHON_VERSION@
+QT_ANDROID_CFLAGS = @QT_ANDROID_CFLAGS@
+QT_ANDROID_LIBS = @QT_ANDROID_LIBS@
 QT_CFLAGS = @QT_CFLAGS@
 QT_LIBS = @QT_LIBS@
+QT_MAC_CFLAGS = @QT_MAC_CFLAGS@
+QT_MAC_LIBS = @QT_MAC_LIBS@
 QT_WAYLAND_CFLAGS = @QT_WAYLAND_CFLAGS@
 QT_WAYLAND_LIBS = @QT_WAYLAND_LIBS@
 QT_X11_CFLAGS = @QT_X11_CFLAGS@
 QT_X11_LIBS = @QT_X11_LIBS@
 RANLIB = @RANLIB@
 RCC = @RCC@
-RSVG_2_36_2_CFLAGS = @RSVG_2_36_2_CFLAGS@
-RSVG_2_36_2_LIBS = @RSVG_2_36_2_LIBS@
 RSVG_CFLAGS = @RSVG_CFLAGS@
 RSVG_LIBS = @RSVG_LIBS@
 RTMP_CFLAGS = @RTMP_CFLAGS@
@@ -667,6 +678,7 @@
 VOAACENC_LIBS = @VOAACENC_LIBS@
 VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
 VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VULKAN_LIBS = @VULKAN_LIBS@
 WARNING_CFLAGS = @WARNING_CFLAGS@
 WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
 WARNING_OBJCFLAGS = @WARNING_OBJCFLAGS@
@@ -677,6 +689,7 @@
 WAYLAND_LIBS = @WAYLAND_LIBS@
 WEBP_CFLAGS = @WEBP_CFLAGS@
 WEBP_LIBS = @WEBP_LIBS@
+WGET = @WGET@
 WILDMIDI_CFLAGS = @WILDMIDI_CFLAGS@
 WILDMIDI_LIBS = @WILDMIDI_LIBS@
 WINKS_LIBS = @WINKS_LIBS@
@@ -686,6 +699,8 @@
 X11_LIBS = @X11_LIBS@
 X265_CFLAGS = @X265_CFLAGS@
 X265_LIBS = @X265_LIBS@
+XCB_CFLAGS = @XCB_CFLAGS@
+XCB_LIBS = @XCB_LIBS@
 XCOMPOSITE_CFLAGS = @XCOMPOSITE_CFLAGS@
 XCOMPOSITE_LIBS = @XCOMPOSITE_LIBS@
 XGETTEXT = @XGETTEXT@
@@ -723,7 +738,6 @@
 docdir = @docdir@
 dvidir = @dvidir@
 exec_prefix = @exec_prefix@
-gsettingsschemadir = @gsettingsschemadir@
 host = @host@
 host_alias = @host_alias@
 host_cpu = @host_cpu@
diff --git a/ext/openni2/Makefile.in b/ext/openni2/Makefile.in
index e82ac76..4027595 100644
--- a/ext/openni2/Makefile.in
+++ b/ext/openni2/Makefile.in
@@ -116,16 +116,15 @@
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
 	$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
-	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gsettings.m4 \
-	$(top_srcdir)/m4/gst-fionread.m4 $(top_srcdir)/m4/gst-sdl.m4 \
-	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
-	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
-	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libgcrypt.m4 \
-	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
-	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
-	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
-	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
-	$(top_srcdir)/configure.ac
+	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gst-fionread.m4 \
+	$(top_srcdir)/m4/gst-sdl.m4 $(top_srcdir)/m4/iconv.m4 \
+	$(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \
+	$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
+	$(top_srcdir)/m4/libgcrypt.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
+	$(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \
@@ -275,6 +274,8 @@
 CLUTTER_X11_LIBS = @CLUTTER_X11_LIBS@
 CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
+CUDA_CFLAGS = @CUDA_CFLAGS@
+CUDA_LIBS = @CUDA_LIBS@
 CURL_CFLAGS = @CURL_CFLAGS@
 CURL_LIBS = @CURL_LIBS@
 CXX = @CXX@
@@ -312,6 +313,8 @@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
+EGL_CFLAGS = @EGL_CFLAGS@
+EGL_LIBS = @EGL_LIBS@
 EGREP = @EGREP@
 ERROR_CFLAGS = @ERROR_CFLAGS@
 ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
@@ -320,7 +323,6 @@
 EXIF_CFLAGS = @EXIF_CFLAGS@
 EXIF_LIBS = @EXIF_LIBS@
 FAAC_LIBS = @FAAC_LIBS@
-FAAD_IS_NEAAC = @FAAD_IS_NEAAC@
 FAAD_LIBS = @FAAD_LIBS@
 FFLAGS = @FFLAGS@
 FGREP = @FGREP@
@@ -339,8 +341,9 @@
 GIO_LIBS = @GIO_LIBS@
 GIO_UNIX_CFLAGS = @GIO_UNIX_CFLAGS@
 GIO_UNIX_LIBS = @GIO_UNIX_LIBS@
+GLES2_CFLAGS = @GLES2_CFLAGS@
+GLES2_LIBS = @GLES2_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
-GLIB_COMPILE_SCHEMAS = @GLIB_COMPILE_SCHEMAS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
@@ -357,16 +360,17 @@
 GMODULE_NO_EXPORT_LIBS = @GMODULE_NO_EXPORT_LIBS@
 GMSGFMT = @GMSGFMT@
 GMSGFMT_015 = @GMSGFMT_015@
+GNUSTL_CFLAGS = @GNUSTL_CFLAGS@
+GNUSTL_LIBS = @GNUSTL_LIBS@
 GRAPHENE_CFLAGS = @GRAPHENE_CFLAGS@
 GRAPHENE_LIBS = @GRAPHENE_LIBS@
 GREP = @GREP@
-GSETTINGS_CFLAGS = @GSETTINGS_CFLAGS@
-GSETTINGS_DISABLE_SCHEMAS_COMPILE = @GSETTINGS_DISABLE_SCHEMAS_COMPILE@
-GSETTINGS_LIBS = @GSETTINGS_LIBS@
 GSM_LIBS = @GSM_LIBS@
 GSTPB_PLUGINS_DIR = @GSTPB_PLUGINS_DIR@
 GSTPB_PREFIX = @GSTPB_PREFIX@
 GST_AGE = @GST_AGE@
+GST_ALLOCATORS_CFLAGS = @GST_ALLOCATORS_CFLAGS@
+GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
 GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
 GST_API_VERSION = @GST_API_VERSION@
 GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
@@ -392,6 +396,8 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PBUTILS_CFLAGS = @GST_PBUTILS_CFLAGS@
+GST_PBUTILS_LIBS = @GST_PBUTILS_LIBS@
 GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BAD_CFLAGS = @GST_PLUGINS_BAD_CFLAGS@
@@ -417,6 +423,8 @@
 GST_PREFIX = @GST_PREFIX@
 GST_REVISION = @GST_REVISION@
 GST_TOOLS_DIR = @GST_TOOLS_DIR@
+GST_VIDEO_CFLAGS = @GST_VIDEO_CFLAGS@
+GST_VIDEO_LIBS = @GST_VIDEO_LIBS@
 GTK3_CFLAGS = @GTK3_CFLAGS@
 GTK3_GL_CFLAGS = @GTK3_GL_CFLAGS@
 GTK3_GL_LIBS = @GTK3_GL_LIBS@
@@ -518,6 +526,7 @@
 LTLIBICONV = @LTLIBICONV@
 LTLIBINTL = @LTLIBINTL@
 LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
 MANIFEST_TOOL = @MANIFEST_TOOL@
@@ -531,8 +540,6 @@
 MODPLUG_LIBS = @MODPLUG_LIBS@
 MPEG2ENC_CFLAGS = @MPEG2ENC_CFLAGS@
 MPEG2ENC_LIBS = @MPEG2ENC_LIBS@
-MPG123_CFLAGS = @MPG123_CFLAGS@
-MPG123_LIBS = @MPG123_LIBS@
 MPLEX_CFLAGS = @MPLEX_CFLAGS@
 MPLEX_LDFLAGS = @MPLEX_LDFLAGS@
 MPLEX_LIBS = @MPLEX_LIBS@
@@ -548,6 +555,8 @@
 NETTLE_LIBS = @NETTLE_LIBS@
 NM = @NM@
 NMEDIT = @NMEDIT@
+NVENCODE_CFLAGS = @NVENCODE_CFLAGS@
+NVENCODE_LIBS = @NVENCODE_LIBS@
 OBJC = @OBJC@
 OBJCDEPMODE = @OBJCDEPMODE@
 OBJCFLAGS = @OBJCFLAGS@
@@ -605,16 +614,18 @@
 PYTHON_PLATFORM = @PYTHON_PLATFORM@
 PYTHON_PREFIX = @PYTHON_PREFIX@
 PYTHON_VERSION = @PYTHON_VERSION@
+QT_ANDROID_CFLAGS = @QT_ANDROID_CFLAGS@
+QT_ANDROID_LIBS = @QT_ANDROID_LIBS@
 QT_CFLAGS = @QT_CFLAGS@
 QT_LIBS = @QT_LIBS@
+QT_MAC_CFLAGS = @QT_MAC_CFLAGS@
+QT_MAC_LIBS = @QT_MAC_LIBS@
 QT_WAYLAND_CFLAGS = @QT_WAYLAND_CFLAGS@
 QT_WAYLAND_LIBS = @QT_WAYLAND_LIBS@
 QT_X11_CFLAGS = @QT_X11_CFLAGS@
 QT_X11_LIBS = @QT_X11_LIBS@
 RANLIB = @RANLIB@
 RCC = @RCC@
-RSVG_2_36_2_CFLAGS = @RSVG_2_36_2_CFLAGS@
-RSVG_2_36_2_LIBS = @RSVG_2_36_2_LIBS@
 RSVG_CFLAGS = @RSVG_CFLAGS@
 RSVG_LIBS = @RSVG_LIBS@
 RTMP_CFLAGS = @RTMP_CFLAGS@
@@ -666,6 +677,7 @@
 VOAACENC_LIBS = @VOAACENC_LIBS@
 VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
 VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VULKAN_LIBS = @VULKAN_LIBS@
 WARNING_CFLAGS = @WARNING_CFLAGS@
 WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
 WARNING_OBJCFLAGS = @WARNING_OBJCFLAGS@
@@ -676,6 +688,7 @@
 WAYLAND_LIBS = @WAYLAND_LIBS@
 WEBP_CFLAGS = @WEBP_CFLAGS@
 WEBP_LIBS = @WEBP_LIBS@
+WGET = @WGET@
 WILDMIDI_CFLAGS = @WILDMIDI_CFLAGS@
 WILDMIDI_LIBS = @WILDMIDI_LIBS@
 WINKS_LIBS = @WINKS_LIBS@
@@ -685,6 +698,8 @@
 X11_LIBS = @X11_LIBS@
 X265_CFLAGS = @X265_CFLAGS@
 X265_LIBS = @X265_LIBS@
+XCB_CFLAGS = @XCB_CFLAGS@
+XCB_LIBS = @XCB_LIBS@
 XCOMPOSITE_CFLAGS = @XCOMPOSITE_CFLAGS@
 XCOMPOSITE_LIBS = @XCOMPOSITE_LIBS@
 XGETTEXT = @XGETTEXT@
@@ -722,7 +737,6 @@
 docdir = @docdir@
 dvidir = @dvidir@
 exec_prefix = @exec_prefix@
-gsettingsschemadir = @gsettingsschemadir@
 host = @host@
 host_alias = @host_alias@
 host_cpu = @host_cpu@
diff --git a/ext/opus/Makefile.am b/ext/opus/Makefile.am
index d22c664..c6c1a80 100644
--- a/ext/opus/Makefile.am
+++ b/ext/opus/Makefile.am
@@ -1,19 +1,20 @@
-plugin_LTLIBRARIES = libgstopus.la
+plugin_LTLIBRARIES = libgstopusparse.la
 
-libgstopus_la_SOURCES = gstopus.c gstopusdec.c gstopusenc.c gstopusparse.c gstopusheader.c gstopuscommon.c gstrtpopuspay.c gstrtpopusdepay.c
-libgstopus_la_CFLAGS = \
+libgstopusparse_la_SOURCES = gstopus.c gstopusparse.c gstopusheader.c
+libgstopusparse_la_CFLAGS = \
         -DGST_USE_UNSTABLE_API \
 	$(GST_PLUGINS_BAD_CFLAGS) \
 	$(GST_PLUGINS_BASE_CFLAGS) \
 	$(GST_CFLAGS) \
 	$(OPUS_CFLAGS)
-libgstopus_la_LIBADD = \
+libgstopusparse_la_LIBADD = \
 	$(GST_PLUGINS_BASE_LIBS) -lgstaudio-$(GST_API_VERSION) \
-	-lgsttag-$(GST_API_VERSION) -lgstrtp-$(GST_API_VERSION) \
+	-lgsttag-$(GST_API_VERSION) \
+	-lgstpbutils-$(GST_API_VERSION) \
 	$(GST_BASE_LIBS) \
 	$(GST_LIBS) \
 	$(OPUS_LIBS)
-libgstopus_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS) $(LIBM)
-libgstopus_la_LIBTOOLFLAGS = $(GST_PLUGIN_LIBTOOLFLAGS)
+libgstopusparse_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS) $(LIBM)
+libgstopusparse_la_LIBTOOLFLAGS = $(GST_PLUGIN_LIBTOOLFLAGS)
 
-noinst_HEADERS = gstopusenc.h gstopusdec.h gstopusparse.h gstopusheader.h gstopuscommon.h gstrtpopuspay.h gstrtpopusdepay.h
+noinst_HEADERS = gstopusparse.h gstopusheader.h
diff --git a/ext/opus/Makefile.in b/ext/opus/Makefile.in
index 8c255d2..74a952e 100644
--- a/ext/opus/Makefile.in
+++ b/ext/opus/Makefile.in
@@ -116,16 +116,15 @@
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
 	$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
-	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gsettings.m4 \
-	$(top_srcdir)/m4/gst-fionread.m4 $(top_srcdir)/m4/gst-sdl.m4 \
-	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
-	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
-	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libgcrypt.m4 \
-	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
-	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
-	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
-	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
-	$(top_srcdir)/configure.ac
+	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gst-fionread.m4 \
+	$(top_srcdir)/m4/gst-sdl.m4 $(top_srcdir)/m4/iconv.m4 \
+	$(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \
+	$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
+	$(top_srcdir)/m4/libgcrypt.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
+	$(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \
@@ -164,23 +163,21 @@
 am__installdirs = "$(DESTDIR)$(plugindir)"
 LTLIBRARIES = $(plugin_LTLIBRARIES)
 am__DEPENDENCIES_1 =
-libgstopus_la_DEPENDENCIES = $(am__DEPENDENCIES_1) \
+libgstopusparse_la_DEPENDENCIES = $(am__DEPENDENCIES_1) \
 	$(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
 	$(am__DEPENDENCIES_1)
-am_libgstopus_la_OBJECTS = libgstopus_la-gstopus.lo \
-	libgstopus_la-gstopusdec.lo libgstopus_la-gstopusenc.lo \
-	libgstopus_la-gstopusparse.lo libgstopus_la-gstopusheader.lo \
-	libgstopus_la-gstopuscommon.lo libgstopus_la-gstrtpopuspay.lo \
-	libgstopus_la-gstrtpopusdepay.lo
-libgstopus_la_OBJECTS = $(am_libgstopus_la_OBJECTS)
+am_libgstopusparse_la_OBJECTS = libgstopusparse_la-gstopus.lo \
+	libgstopusparse_la-gstopusparse.lo \
+	libgstopusparse_la-gstopusheader.lo
+libgstopusparse_la_OBJECTS = $(am_libgstopusparse_la_OBJECTS)
 AM_V_lt = $(am__v_lt_@AM_V@)
 am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
 am__v_lt_0 = --silent
 am__v_lt_1 = 
-libgstopus_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
-	$(libgstopus_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link \
-	$(CCLD) $(libgstopus_la_CFLAGS) $(CFLAGS) \
-	$(libgstopus_la_LDFLAGS) $(LDFLAGS) -o $@
+libgstopusparse_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
+	$(libgstopusparse_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link \
+	$(CCLD) $(libgstopusparse_la_CFLAGS) $(CFLAGS) \
+	$(libgstopusparse_la_LDFLAGS) $(LDFLAGS) -o $@
 AM_V_P = $(am__v_P_@AM_V@)
 am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
 am__v_P_0 = false
@@ -215,8 +212,8 @@
 am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@)
 am__v_CCLD_0 = @echo "  CCLD    " $@;
 am__v_CCLD_1 = 
-SOURCES = $(libgstopus_la_SOURCES)
-DIST_SOURCES = $(libgstopus_la_SOURCES)
+SOURCES = $(libgstopusparse_la_SOURCES)
+DIST_SOURCES = $(libgstopusparse_la_SOURCES)
 am__can_run_installinfo = \
   case $$AM_UPDATE_INFO_DIR in \
     n|no|NO) false;; \
@@ -279,6 +276,8 @@
 CLUTTER_X11_LIBS = @CLUTTER_X11_LIBS@
 CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
+CUDA_CFLAGS = @CUDA_CFLAGS@
+CUDA_LIBS = @CUDA_LIBS@
 CURL_CFLAGS = @CURL_CFLAGS@
 CURL_LIBS = @CURL_LIBS@
 CXX = @CXX@
@@ -316,6 +315,8 @@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
+EGL_CFLAGS = @EGL_CFLAGS@
+EGL_LIBS = @EGL_LIBS@
 EGREP = @EGREP@
 ERROR_CFLAGS = @ERROR_CFLAGS@
 ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
@@ -324,7 +325,6 @@
 EXIF_CFLAGS = @EXIF_CFLAGS@
 EXIF_LIBS = @EXIF_LIBS@
 FAAC_LIBS = @FAAC_LIBS@
-FAAD_IS_NEAAC = @FAAD_IS_NEAAC@
 FAAD_LIBS = @FAAD_LIBS@
 FFLAGS = @FFLAGS@
 FGREP = @FGREP@
@@ -343,8 +343,9 @@
 GIO_LIBS = @GIO_LIBS@
 GIO_UNIX_CFLAGS = @GIO_UNIX_CFLAGS@
 GIO_UNIX_LIBS = @GIO_UNIX_LIBS@
+GLES2_CFLAGS = @GLES2_CFLAGS@
+GLES2_LIBS = @GLES2_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
-GLIB_COMPILE_SCHEMAS = @GLIB_COMPILE_SCHEMAS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
@@ -361,16 +362,17 @@
 GMODULE_NO_EXPORT_LIBS = @GMODULE_NO_EXPORT_LIBS@
 GMSGFMT = @GMSGFMT@
 GMSGFMT_015 = @GMSGFMT_015@
+GNUSTL_CFLAGS = @GNUSTL_CFLAGS@
+GNUSTL_LIBS = @GNUSTL_LIBS@
 GRAPHENE_CFLAGS = @GRAPHENE_CFLAGS@
 GRAPHENE_LIBS = @GRAPHENE_LIBS@
 GREP = @GREP@
-GSETTINGS_CFLAGS = @GSETTINGS_CFLAGS@
-GSETTINGS_DISABLE_SCHEMAS_COMPILE = @GSETTINGS_DISABLE_SCHEMAS_COMPILE@
-GSETTINGS_LIBS = @GSETTINGS_LIBS@
 GSM_LIBS = @GSM_LIBS@
 GSTPB_PLUGINS_DIR = @GSTPB_PLUGINS_DIR@
 GSTPB_PREFIX = @GSTPB_PREFIX@
 GST_AGE = @GST_AGE@
+GST_ALLOCATORS_CFLAGS = @GST_ALLOCATORS_CFLAGS@
+GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
 GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
 GST_API_VERSION = @GST_API_VERSION@
 GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
@@ -396,6 +398,8 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PBUTILS_CFLAGS = @GST_PBUTILS_CFLAGS@
+GST_PBUTILS_LIBS = @GST_PBUTILS_LIBS@
 GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BAD_CFLAGS = @GST_PLUGINS_BAD_CFLAGS@
@@ -421,6 +425,8 @@
 GST_PREFIX = @GST_PREFIX@
 GST_REVISION = @GST_REVISION@
 GST_TOOLS_DIR = @GST_TOOLS_DIR@
+GST_VIDEO_CFLAGS = @GST_VIDEO_CFLAGS@
+GST_VIDEO_LIBS = @GST_VIDEO_LIBS@
 GTK3_CFLAGS = @GTK3_CFLAGS@
 GTK3_GL_CFLAGS = @GTK3_GL_CFLAGS@
 GTK3_GL_LIBS = @GTK3_GL_LIBS@
@@ -522,6 +528,7 @@
 LTLIBICONV = @LTLIBICONV@
 LTLIBINTL = @LTLIBINTL@
 LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
 MANIFEST_TOOL = @MANIFEST_TOOL@
@@ -535,8 +542,6 @@
 MODPLUG_LIBS = @MODPLUG_LIBS@
 MPEG2ENC_CFLAGS = @MPEG2ENC_CFLAGS@
 MPEG2ENC_LIBS = @MPEG2ENC_LIBS@
-MPG123_CFLAGS = @MPG123_CFLAGS@
-MPG123_LIBS = @MPG123_LIBS@
 MPLEX_CFLAGS = @MPLEX_CFLAGS@
 MPLEX_LDFLAGS = @MPLEX_LDFLAGS@
 MPLEX_LIBS = @MPLEX_LIBS@
@@ -552,6 +557,8 @@
 NETTLE_LIBS = @NETTLE_LIBS@
 NM = @NM@
 NMEDIT = @NMEDIT@
+NVENCODE_CFLAGS = @NVENCODE_CFLAGS@
+NVENCODE_LIBS = @NVENCODE_LIBS@
 OBJC = @OBJC@
 OBJCDEPMODE = @OBJCDEPMODE@
 OBJCFLAGS = @OBJCFLAGS@
@@ -609,16 +616,18 @@
 PYTHON_PLATFORM = @PYTHON_PLATFORM@
 PYTHON_PREFIX = @PYTHON_PREFIX@
 PYTHON_VERSION = @PYTHON_VERSION@
+QT_ANDROID_CFLAGS = @QT_ANDROID_CFLAGS@
+QT_ANDROID_LIBS = @QT_ANDROID_LIBS@
 QT_CFLAGS = @QT_CFLAGS@
 QT_LIBS = @QT_LIBS@
+QT_MAC_CFLAGS = @QT_MAC_CFLAGS@
+QT_MAC_LIBS = @QT_MAC_LIBS@
 QT_WAYLAND_CFLAGS = @QT_WAYLAND_CFLAGS@
 QT_WAYLAND_LIBS = @QT_WAYLAND_LIBS@
 QT_X11_CFLAGS = @QT_X11_CFLAGS@
 QT_X11_LIBS = @QT_X11_LIBS@
 RANLIB = @RANLIB@
 RCC = @RCC@
-RSVG_2_36_2_CFLAGS = @RSVG_2_36_2_CFLAGS@
-RSVG_2_36_2_LIBS = @RSVG_2_36_2_LIBS@
 RSVG_CFLAGS = @RSVG_CFLAGS@
 RSVG_LIBS = @RSVG_LIBS@
 RTMP_CFLAGS = @RTMP_CFLAGS@
@@ -670,6 +679,7 @@
 VOAACENC_LIBS = @VOAACENC_LIBS@
 VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
 VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VULKAN_LIBS = @VULKAN_LIBS@
 WARNING_CFLAGS = @WARNING_CFLAGS@
 WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
 WARNING_OBJCFLAGS = @WARNING_OBJCFLAGS@
@@ -680,6 +690,7 @@
 WAYLAND_LIBS = @WAYLAND_LIBS@
 WEBP_CFLAGS = @WEBP_CFLAGS@
 WEBP_LIBS = @WEBP_LIBS@
+WGET = @WGET@
 WILDMIDI_CFLAGS = @WILDMIDI_CFLAGS@
 WILDMIDI_LIBS = @WILDMIDI_LIBS@
 WINKS_LIBS = @WINKS_LIBS@
@@ -689,6 +700,8 @@
 X11_LIBS = @X11_LIBS@
 X265_CFLAGS = @X265_CFLAGS@
 X265_LIBS = @X265_LIBS@
+XCB_CFLAGS = @XCB_CFLAGS@
+XCB_LIBS = @XCB_LIBS@
 XCOMPOSITE_CFLAGS = @XCOMPOSITE_CFLAGS@
 XCOMPOSITE_LIBS = @XCOMPOSITE_LIBS@
 XGETTEXT = @XGETTEXT@
@@ -726,7 +739,6 @@
 docdir = @docdir@
 dvidir = @dvidir@
 exec_prefix = @exec_prefix@
-gsettingsschemadir = @gsettingsschemadir@
 host = @host@
 host_alias = @host_alias@
 host_cpu = @host_cpu@
@@ -766,25 +778,26 @@
 top_builddir = @top_builddir@
 top_srcdir = @top_srcdir@
 wayland_scanner = @wayland_scanner@
-plugin_LTLIBRARIES = libgstopus.la
-libgstopus_la_SOURCES = gstopus.c gstopusdec.c gstopusenc.c gstopusparse.c gstopusheader.c gstopuscommon.c gstrtpopuspay.c gstrtpopusdepay.c
-libgstopus_la_CFLAGS = \
+plugin_LTLIBRARIES = libgstopusparse.la
+libgstopusparse_la_SOURCES = gstopus.c gstopusparse.c gstopusheader.c
+libgstopusparse_la_CFLAGS = \
         -DGST_USE_UNSTABLE_API \
 	$(GST_PLUGINS_BAD_CFLAGS) \
 	$(GST_PLUGINS_BASE_CFLAGS) \
 	$(GST_CFLAGS) \
 	$(OPUS_CFLAGS)
 
-libgstopus_la_LIBADD = \
+libgstopusparse_la_LIBADD = \
 	$(GST_PLUGINS_BASE_LIBS) -lgstaudio-$(GST_API_VERSION) \
-	-lgsttag-$(GST_API_VERSION) -lgstrtp-$(GST_API_VERSION) \
+	-lgsttag-$(GST_API_VERSION) \
+	-lgstpbutils-$(GST_API_VERSION) \
 	$(GST_BASE_LIBS) \
 	$(GST_LIBS) \
 	$(OPUS_LIBS)
 
-libgstopus_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS) $(LIBM)
-libgstopus_la_LIBTOOLFLAGS = $(GST_PLUGIN_LIBTOOLFLAGS)
-noinst_HEADERS = gstopusenc.h gstopusdec.h gstopusparse.h gstopusheader.h gstopuscommon.h gstrtpopuspay.h gstrtpopusdepay.h
+libgstopusparse_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS) $(LIBM)
+libgstopusparse_la_LIBTOOLFLAGS = $(GST_PLUGIN_LIBTOOLFLAGS)
+noinst_HEADERS = gstopusparse.h gstopusheader.h
 all: all-am
 
 .SUFFIXES:
@@ -854,8 +867,8 @@
 	  rm -f $${locs}; \
 	}
 
-libgstopus.la: $(libgstopus_la_OBJECTS) $(libgstopus_la_DEPENDENCIES) $(EXTRA_libgstopus_la_DEPENDENCIES) 
-	$(AM_V_CCLD)$(libgstopus_la_LINK) -rpath $(plugindir) $(libgstopus_la_OBJECTS) $(libgstopus_la_LIBADD) $(LIBS)
+libgstopusparse.la: $(libgstopusparse_la_OBJECTS) $(libgstopusparse_la_DEPENDENCIES) $(EXTRA_libgstopusparse_la_DEPENDENCIES) 
+	$(AM_V_CCLD)$(libgstopusparse_la_LINK) -rpath $(plugindir) $(libgstopusparse_la_OBJECTS) $(libgstopusparse_la_LIBADD) $(LIBS)
 
 mostlyclean-compile:
 	-rm -f *.$(OBJEXT)
@@ -863,14 +876,9 @@
 distclean-compile:
 	-rm -f *.tab.c
 
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstopus_la-gstopus.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstopus_la-gstopuscommon.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstopus_la-gstopusdec.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstopus_la-gstopusenc.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstopus_la-gstopusheader.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstopus_la-gstopusparse.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstopus_la-gstrtpopusdepay.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstopus_la-gstrtpopuspay.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstopusparse_la-gstopus.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstopusparse_la-gstopusheader.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstopusparse_la-gstopusparse.Plo@am__quote@
 
 .c.o:
 @am__fastdepCC_TRUE@	$(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\
@@ -896,61 +904,26 @@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $<
 
-libgstopus_la-gstopus.lo: gstopus.c
-@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstopus_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstopus_la_CFLAGS) $(CFLAGS) -MT libgstopus_la-gstopus.lo -MD -MP -MF $(DEPDIR)/libgstopus_la-gstopus.Tpo -c -o libgstopus_la-gstopus.lo `test -f 'gstopus.c' || echo '$(srcdir)/'`gstopus.c
-@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstopus_la-gstopus.Tpo $(DEPDIR)/libgstopus_la-gstopus.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='gstopus.c' object='libgstopus_la-gstopus.lo' libtool=yes @AMDEPBACKSLASH@
+libgstopusparse_la-gstopus.lo: gstopus.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstopusparse_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstopusparse_la_CFLAGS) $(CFLAGS) -MT libgstopusparse_la-gstopus.lo -MD -MP -MF $(DEPDIR)/libgstopusparse_la-gstopus.Tpo -c -o libgstopusparse_la-gstopus.lo `test -f 'gstopus.c' || echo '$(srcdir)/'`gstopus.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstopusparse_la-gstopus.Tpo $(DEPDIR)/libgstopusparse_la-gstopus.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='gstopus.c' object='libgstopusparse_la-gstopus.lo' libtool=yes @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstopus_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstopus_la_CFLAGS) $(CFLAGS) -c -o libgstopus_la-gstopus.lo `test -f 'gstopus.c' || echo '$(srcdir)/'`gstopus.c
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstopusparse_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstopusparse_la_CFLAGS) $(CFLAGS) -c -o libgstopusparse_la-gstopus.lo `test -f 'gstopus.c' || echo '$(srcdir)/'`gstopus.c
 
-libgstopus_la-gstopusdec.lo: gstopusdec.c
-@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstopus_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstopus_la_CFLAGS) $(CFLAGS) -MT libgstopus_la-gstopusdec.lo -MD -MP -MF $(DEPDIR)/libgstopus_la-gstopusdec.Tpo -c -o libgstopus_la-gstopusdec.lo `test -f 'gstopusdec.c' || echo '$(srcdir)/'`gstopusdec.c
-@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstopus_la-gstopusdec.Tpo $(DEPDIR)/libgstopus_la-gstopusdec.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='gstopusdec.c' object='libgstopus_la-gstopusdec.lo' libtool=yes @AMDEPBACKSLASH@
+libgstopusparse_la-gstopusparse.lo: gstopusparse.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstopusparse_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstopusparse_la_CFLAGS) $(CFLAGS) -MT libgstopusparse_la-gstopusparse.lo -MD -MP -MF $(DEPDIR)/libgstopusparse_la-gstopusparse.Tpo -c -o libgstopusparse_la-gstopusparse.lo `test -f 'gstopusparse.c' || echo '$(srcdir)/'`gstopusparse.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstopusparse_la-gstopusparse.Tpo $(DEPDIR)/libgstopusparse_la-gstopusparse.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='gstopusparse.c' object='libgstopusparse_la-gstopusparse.lo' libtool=yes @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstopus_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstopus_la_CFLAGS) $(CFLAGS) -c -o libgstopus_la-gstopusdec.lo `test -f 'gstopusdec.c' || echo '$(srcdir)/'`gstopusdec.c
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstopusparse_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstopusparse_la_CFLAGS) $(CFLAGS) -c -o libgstopusparse_la-gstopusparse.lo `test -f 'gstopusparse.c' || echo '$(srcdir)/'`gstopusparse.c
 
-libgstopus_la-gstopusenc.lo: gstopusenc.c
-@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstopus_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstopus_la_CFLAGS) $(CFLAGS) -MT libgstopus_la-gstopusenc.lo -MD -MP -MF $(DEPDIR)/libgstopus_la-gstopusenc.Tpo -c -o libgstopus_la-gstopusenc.lo `test -f 'gstopusenc.c' || echo '$(srcdir)/'`gstopusenc.c
-@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstopus_la-gstopusenc.Tpo $(DEPDIR)/libgstopus_la-gstopusenc.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='gstopusenc.c' object='libgstopus_la-gstopusenc.lo' libtool=yes @AMDEPBACKSLASH@
+libgstopusparse_la-gstopusheader.lo: gstopusheader.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstopusparse_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstopusparse_la_CFLAGS) $(CFLAGS) -MT libgstopusparse_la-gstopusheader.lo -MD -MP -MF $(DEPDIR)/libgstopusparse_la-gstopusheader.Tpo -c -o libgstopusparse_la-gstopusheader.lo `test -f 'gstopusheader.c' || echo '$(srcdir)/'`gstopusheader.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstopusparse_la-gstopusheader.Tpo $(DEPDIR)/libgstopusparse_la-gstopusheader.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='gstopusheader.c' object='libgstopusparse_la-gstopusheader.lo' libtool=yes @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstopus_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstopus_la_CFLAGS) $(CFLAGS) -c -o libgstopus_la-gstopusenc.lo `test -f 'gstopusenc.c' || echo '$(srcdir)/'`gstopusenc.c
-
-libgstopus_la-gstopusparse.lo: gstopusparse.c
-@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstopus_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstopus_la_CFLAGS) $(CFLAGS) -MT libgstopus_la-gstopusparse.lo -MD -MP -MF $(DEPDIR)/libgstopus_la-gstopusparse.Tpo -c -o libgstopus_la-gstopusparse.lo `test -f 'gstopusparse.c' || echo '$(srcdir)/'`gstopusparse.c
-@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstopus_la-gstopusparse.Tpo $(DEPDIR)/libgstopus_la-gstopusparse.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='gstopusparse.c' object='libgstopus_la-gstopusparse.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstopus_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstopus_la_CFLAGS) $(CFLAGS) -c -o libgstopus_la-gstopusparse.lo `test -f 'gstopusparse.c' || echo '$(srcdir)/'`gstopusparse.c
-
-libgstopus_la-gstopusheader.lo: gstopusheader.c
-@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstopus_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstopus_la_CFLAGS) $(CFLAGS) -MT libgstopus_la-gstopusheader.lo -MD -MP -MF $(DEPDIR)/libgstopus_la-gstopusheader.Tpo -c -o libgstopus_la-gstopusheader.lo `test -f 'gstopusheader.c' || echo '$(srcdir)/'`gstopusheader.c
-@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstopus_la-gstopusheader.Tpo $(DEPDIR)/libgstopus_la-gstopusheader.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='gstopusheader.c' object='libgstopus_la-gstopusheader.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstopus_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstopus_la_CFLAGS) $(CFLAGS) -c -o libgstopus_la-gstopusheader.lo `test -f 'gstopusheader.c' || echo '$(srcdir)/'`gstopusheader.c
-
-libgstopus_la-gstopuscommon.lo: gstopuscommon.c
-@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstopus_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstopus_la_CFLAGS) $(CFLAGS) -MT libgstopus_la-gstopuscommon.lo -MD -MP -MF $(DEPDIR)/libgstopus_la-gstopuscommon.Tpo -c -o libgstopus_la-gstopuscommon.lo `test -f 'gstopuscommon.c' || echo '$(srcdir)/'`gstopuscommon.c
-@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstopus_la-gstopuscommon.Tpo $(DEPDIR)/libgstopus_la-gstopuscommon.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='gstopuscommon.c' object='libgstopus_la-gstopuscommon.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstopus_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstopus_la_CFLAGS) $(CFLAGS) -c -o libgstopus_la-gstopuscommon.lo `test -f 'gstopuscommon.c' || echo '$(srcdir)/'`gstopuscommon.c
-
-libgstopus_la-gstrtpopuspay.lo: gstrtpopuspay.c
-@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstopus_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstopus_la_CFLAGS) $(CFLAGS) -MT libgstopus_la-gstrtpopuspay.lo -MD -MP -MF $(DEPDIR)/libgstopus_la-gstrtpopuspay.Tpo -c -o libgstopus_la-gstrtpopuspay.lo `test -f 'gstrtpopuspay.c' || echo '$(srcdir)/'`gstrtpopuspay.c
-@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstopus_la-gstrtpopuspay.Tpo $(DEPDIR)/libgstopus_la-gstrtpopuspay.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='gstrtpopuspay.c' object='libgstopus_la-gstrtpopuspay.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstopus_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstopus_la_CFLAGS) $(CFLAGS) -c -o libgstopus_la-gstrtpopuspay.lo `test -f 'gstrtpopuspay.c' || echo '$(srcdir)/'`gstrtpopuspay.c
-
-libgstopus_la-gstrtpopusdepay.lo: gstrtpopusdepay.c
-@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstopus_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstopus_la_CFLAGS) $(CFLAGS) -MT libgstopus_la-gstrtpopusdepay.lo -MD -MP -MF $(DEPDIR)/libgstopus_la-gstrtpopusdepay.Tpo -c -o libgstopus_la-gstrtpopusdepay.lo `test -f 'gstrtpopusdepay.c' || echo '$(srcdir)/'`gstrtpopusdepay.c
-@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstopus_la-gstrtpopusdepay.Tpo $(DEPDIR)/libgstopus_la-gstrtpopusdepay.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='gstrtpopusdepay.c' object='libgstopus_la-gstrtpopusdepay.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstopus_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstopus_la_CFLAGS) $(CFLAGS) -c -o libgstopus_la-gstrtpopusdepay.lo `test -f 'gstrtpopusdepay.c' || echo '$(srcdir)/'`gstrtpopusdepay.c
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstopusparse_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstopusparse_la_CFLAGS) $(CFLAGS) -c -o libgstopusparse_la-gstopusheader.lo `test -f 'gstopusheader.c' || echo '$(srcdir)/'`gstopusheader.c
 
 mostlyclean-libtool:
 	-rm -f *.lo
diff --git a/ext/opus/gstopus.c b/ext/opus/gstopus.c
index a3427b2..d536000 100644
--- a/ext/opus/gstopus.c
+++ b/ext/opus/gstopus.c
@@ -21,39 +21,17 @@
 #include <config.h>
 #endif
 
-#include "gstopusdec.h"
-#include "gstopusenc.h"
 #include "gstopusparse.h"
 
-#include "gstrtpopuspay.h"
-#include "gstrtpopusdepay.h"
-
 #include <gst/tag/tag.h>
 
 static gboolean
 plugin_init (GstPlugin * plugin)
 {
-
-  if (!gst_element_register (plugin, "opusenc", GST_RANK_PRIMARY,
-          GST_TYPE_OPUS_ENC))
-    return FALSE;
-
-  if (!gst_element_register (plugin, "opusdec", GST_RANK_PRIMARY,
-          GST_TYPE_OPUS_DEC))
-    return FALSE;
-
   if (!gst_element_register (plugin, "opusparse", GST_RANK_NONE,
           GST_TYPE_OPUS_PARSE))
     return FALSE;
 
-  if (!gst_element_register (plugin, "rtpopusdepay", GST_RANK_SECONDARY,
-          GST_TYPE_RTP_OPUS_DEPAY))
-    return FALSE;
-
-  if (!gst_element_register (plugin, "rtpopuspay", GST_RANK_SECONDARY,
-          GST_TYPE_RTP_OPUS_PAY))
-    return FALSE;
-
   gst_tag_register_musicbrainz_tags ();
 
   return TRUE;
@@ -61,6 +39,6 @@
 
 GST_PLUGIN_DEFINE (GST_VERSION_MAJOR,
     GST_VERSION_MINOR,
-    opus,
-    "OPUS plugin library",
+    opusparse,
+    "OPUS parse plugin",
     plugin_init, VERSION, "LGPL", GST_PACKAGE_NAME, GST_PACKAGE_ORIGIN)
diff --git a/ext/opus/gstopuscommon.c b/ext/opus/gstopuscommon.c
deleted file mode 100644
index febccd8..0000000
--- a/ext/opus/gstopuscommon.c
+++ /dev/null
@@ -1,111 +0,0 @@
-/* GStreamer
- * Copyright (C) 2009 Sebastian Dröge <sebastian.droege@collabora.co.uk>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-#include <stdio.h>
-#include <string.h>
-#include "gstopuscommon.h"
-
-/* http://www.xiph.org/vorbis/doc/Vorbis_I_spec.html#x1-800004.3.9 */
-/* copy of the same structure in the vorbis plugin */
-const GstAudioChannelPosition gst_opus_channel_positions[][8] = {
-  {                             /* Mono */
-      GST_AUDIO_CHANNEL_POSITION_MONO},
-  {                             /* Stereo */
-        GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT,
-      GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT},
-  {                             /* Stereo + Centre */
-        GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT,
-        GST_AUDIO_CHANNEL_POSITION_FRONT_CENTER,
-      GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT},
-  {                             /* Quadraphonic */
-        GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT,
-        GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT,
-        GST_AUDIO_CHANNEL_POSITION_REAR_LEFT,
-        GST_AUDIO_CHANNEL_POSITION_REAR_RIGHT,
-      },
-  {                             /* Stereo + Centre + rear stereo */
-        GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT,
-        GST_AUDIO_CHANNEL_POSITION_FRONT_CENTER,
-        GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT,
-        GST_AUDIO_CHANNEL_POSITION_REAR_LEFT,
-        GST_AUDIO_CHANNEL_POSITION_REAR_RIGHT,
-      },
-  {                             /* Full 5.1 Surround */
-        GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT,
-        GST_AUDIO_CHANNEL_POSITION_FRONT_CENTER,
-        GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT,
-        GST_AUDIO_CHANNEL_POSITION_REAR_LEFT,
-        GST_AUDIO_CHANNEL_POSITION_REAR_RIGHT,
-        GST_AUDIO_CHANNEL_POSITION_LFE1,
-      },
-  {                             /* 6.1 Surround, in Vorbis spec since 2010-01-13 */
-        GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT,
-        GST_AUDIO_CHANNEL_POSITION_FRONT_CENTER,
-        GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT,
-        GST_AUDIO_CHANNEL_POSITION_SIDE_LEFT,
-        GST_AUDIO_CHANNEL_POSITION_SIDE_RIGHT,
-        GST_AUDIO_CHANNEL_POSITION_REAR_CENTER,
-      GST_AUDIO_CHANNEL_POSITION_LFE1},
-  {                             /* 7.1 Surround, in Vorbis spec since 2010-01-13 */
-        GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT,
-        GST_AUDIO_CHANNEL_POSITION_FRONT_CENTER,
-        GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT,
-        GST_AUDIO_CHANNEL_POSITION_SIDE_LEFT,
-        GST_AUDIO_CHANNEL_POSITION_SIDE_RIGHT,
-        GST_AUDIO_CHANNEL_POSITION_REAR_LEFT,
-        GST_AUDIO_CHANNEL_POSITION_REAR_RIGHT,
-      GST_AUDIO_CHANNEL_POSITION_LFE1},
-};
-
-const char *gst_opus_channel_names[] = {
-  "mono",
-  "front left",
-  "front right",
-  "rear center",
-  "rear left",
-  "rear right",
-  "lfe",
-  "front center",
-  "front left of center",
-  "front right of center",
-  "side left",
-  "side right",
-  "none"
-};
-
-void
-gst_opus_common_log_channel_mapping_table (GstElement * element,
-    GstDebugCategory * category, const char *msg, int n_channels,
-    const guint8 * table)
-{
-  int n;
-  GString *s;
-
-  if (gst_debug_category_get_threshold (category) < GST_LEVEL_INFO)
-    return;
-
-  s = g_string_new ("[ ");
-  for (n = 0; n < n_channels; ++n) {
-    g_string_append_printf (s, "%d ", table[n]);
-  }
-  g_string_append (s, "]");
-
-  GST_CAT_LEVEL_LOG (category, GST_LEVEL_INFO, element, "%s: %s", msg, s->str);
-  g_string_free (s, TRUE);
-}
diff --git a/ext/opus/gstopusdec.c b/ext/opus/gstopusdec.c
deleted file mode 100644
index b081b99..0000000
--- a/ext/opus/gstopusdec.c
+++ /dev/null
@@ -1,794 +0,0 @@
-/* GStreamer
- * Copyright (C) 2004 Wim Taymans <wim@fluendo.com>
- * Copyright (C) 2006 Tim-Philipp Müller <tim centricular net>
- * Copyright (C) 2008 Sebastian Dröge <sebastian.droege@collabora.co.uk>
- * Copyright (C) 2011-2012 Vincent Penquerc'h <vincent.penquerch@collabora.co.uk>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-/*
- * Based on the speexdec element.
- */
-
-/**
- * SECTION:element-opusdec
- * @see_also: opusenc, oggdemux
- *
- * This element decodes a OPUS stream to raw integer audio.
- *
- * <refsect2>
- * <title>Example pipelines</title>
- * |[
- * gst-launch -v filesrc location=opus.ogg ! oggdemux ! opusdec ! audioconvert ! audioresample ! alsasink
- * ]| Decode an Ogg/Opus file. To create an Ogg/Opus file refer to the documentation of opusenc.
- * </refsect2>
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include <math.h>
-#include <string.h>
-#include "gstopusheader.h"
-#include "gstopuscommon.h"
-#include "gstopusdec.h"
-
-GST_DEBUG_CATEGORY_STATIC (opusdec_debug);
-#define GST_CAT_DEFAULT opusdec_debug
-
-static GstStaticPadTemplate opus_dec_src_factory =
-GST_STATIC_PAD_TEMPLATE ("src",
-    GST_PAD_SRC,
-    GST_PAD_ALWAYS,
-    GST_STATIC_CAPS ("audio/x-raw, "
-        "format = (string) " GST_AUDIO_NE (S16) ", "
-        "layout = (string) interleaved, "
-        "rate = (int) { 48000, 24000, 16000, 12000, 8000 }, "
-        "channels = (int) [ 1, 8 ] ")
-    );
-
-static GstStaticPadTemplate opus_dec_sink_factory =
-GST_STATIC_PAD_TEMPLATE ("sink",
-    GST_PAD_SINK,
-    GST_PAD_ALWAYS,
-    GST_STATIC_CAPS ("audio/x-opus")
-    );
-
-G_DEFINE_TYPE (GstOpusDec, gst_opus_dec, GST_TYPE_AUDIO_DECODER);
-
-#define DB_TO_LINEAR(x) pow (10., (x) / 20.)
-
-#define DEFAULT_USE_INBAND_FEC FALSE
-#define DEFAULT_APPLY_GAIN TRUE
-
-enum
-{
-  PROP_0,
-  PROP_USE_INBAND_FEC,
-  PROP_APPLY_GAIN
-};
-
-
-static GstFlowReturn gst_opus_dec_parse_header (GstOpusDec * dec,
-    GstBuffer * buf);
-static gboolean gst_opus_dec_start (GstAudioDecoder * dec);
-static gboolean gst_opus_dec_stop (GstAudioDecoder * dec);
-static GstFlowReturn gst_opus_dec_handle_frame (GstAudioDecoder * dec,
-    GstBuffer * buffer);
-static gboolean gst_opus_dec_set_format (GstAudioDecoder * bdec,
-    GstCaps * caps);
-static void gst_opus_dec_get_property (GObject * object, guint prop_id,
-    GValue * value, GParamSpec * pspec);
-static void gst_opus_dec_set_property (GObject * object, guint prop_id,
-    const GValue * value, GParamSpec * pspec);
-
-
-static void
-gst_opus_dec_class_init (GstOpusDecClass * klass)
-{
-  GObjectClass *gobject_class;
-  GstAudioDecoderClass *adclass;
-  GstElementClass *element_class;
-
-  gobject_class = (GObjectClass *) klass;
-  adclass = (GstAudioDecoderClass *) klass;
-  element_class = (GstElementClass *) klass;
-
-  gobject_class->set_property = gst_opus_dec_set_property;
-  gobject_class->get_property = gst_opus_dec_get_property;
-
-  adclass->start = GST_DEBUG_FUNCPTR (gst_opus_dec_start);
-  adclass->stop = GST_DEBUG_FUNCPTR (gst_opus_dec_stop);
-  adclass->handle_frame = GST_DEBUG_FUNCPTR (gst_opus_dec_handle_frame);
-  adclass->set_format = GST_DEBUG_FUNCPTR (gst_opus_dec_set_format);
-
-  gst_element_class_add_pad_template (element_class,
-      gst_static_pad_template_get (&opus_dec_src_factory));
-  gst_element_class_add_pad_template (element_class,
-      gst_static_pad_template_get (&opus_dec_sink_factory));
-  gst_element_class_set_static_metadata (element_class, "Opus audio decoder",
-      "Codec/Decoder/Audio",
-      "decode opus streams to audio",
-      "Vincent Penquerc'h <vincent.penquerch@collabora.co.uk>");
-  g_object_class_install_property (gobject_class, PROP_USE_INBAND_FEC,
-      g_param_spec_boolean ("use-inband-fec", "Use in-band FEC",
-          "Use forward error correction if available", DEFAULT_USE_INBAND_FEC,
-          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
-
-  g_object_class_install_property (gobject_class, PROP_APPLY_GAIN,
-      g_param_spec_boolean ("apply-gain", "Apply gain",
-          "Apply gain if any is specified in the header", DEFAULT_APPLY_GAIN,
-          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
-
-  GST_DEBUG_CATEGORY_INIT (opusdec_debug, "opusdec", 0,
-      "opus decoding element");
-}
-
-static void
-gst_opus_dec_reset (GstOpusDec * dec)
-{
-  dec->packetno = 0;
-  if (dec->state) {
-    opus_multistream_decoder_destroy (dec->state);
-    dec->state = NULL;
-  }
-
-  gst_buffer_replace (&dec->streamheader, NULL);
-  gst_buffer_replace (&dec->vorbiscomment, NULL);
-  gst_buffer_replace (&dec->last_buffer, NULL);
-  dec->primed = FALSE;
-
-  dec->pre_skip = 0;
-  dec->r128_gain = 0;
-  dec->sample_rate = 0;
-  dec->n_channels = 0;
-  dec->leftover_plc_duration = 0;
-}
-
-static void
-gst_opus_dec_init (GstOpusDec * dec)
-{
-  dec->use_inband_fec = FALSE;
-  dec->apply_gain = DEFAULT_APPLY_GAIN;
-
-  gst_audio_decoder_set_needs_format (GST_AUDIO_DECODER (dec), TRUE);
-  gst_audio_decoder_set_use_default_pad_acceptcaps (GST_AUDIO_DECODER_CAST
-      (dec), TRUE);
-  GST_PAD_SET_ACCEPT_TEMPLATE (GST_AUDIO_DECODER_SINK_PAD (dec));
-
-  gst_opus_dec_reset (dec);
-}
-
-static gboolean
-gst_opus_dec_start (GstAudioDecoder * dec)
-{
-  GstOpusDec *odec = GST_OPUS_DEC (dec);
-
-  gst_opus_dec_reset (odec);
-
-  /* we know about concealment */
-  gst_audio_decoder_set_plc_aware (dec, TRUE);
-
-  if (odec->use_inband_fec) {
-    /* opusdec outputs samples directly from an input buffer, except if
-     * FEC is on, in which case it buffers one buffer in case one buffer
-     * goes missing.
-     */
-    gst_audio_decoder_set_latency (dec, 120 * GST_MSECOND, 120 * GST_MSECOND);
-  }
-
-  return TRUE;
-}
-
-static gboolean
-gst_opus_dec_stop (GstAudioDecoder * dec)
-{
-  GstOpusDec *odec = GST_OPUS_DEC (dec);
-
-  gst_opus_dec_reset (odec);
-
-  return TRUE;
-}
-
-static double
-gst_opus_dec_get_r128_gain (gint16 r128_gain)
-{
-  return r128_gain / (double) (1 << 8);
-}
-
-static double
-gst_opus_dec_get_r128_volume (gint16 r128_gain)
-{
-  return DB_TO_LINEAR (gst_opus_dec_get_r128_gain (r128_gain));
-}
-
-static void
-gst_opus_dec_negotiate (GstOpusDec * dec, const GstAudioChannelPosition * pos)
-{
-  GstCaps *caps = gst_pad_get_allowed_caps (GST_AUDIO_DECODER_SRC_PAD (dec));
-  GstStructure *s;
-  GstAudioInfo info;
-
-  if (caps) {
-    caps = gst_caps_truncate (caps);
-    caps = gst_caps_make_writable (caps);
-    s = gst_caps_get_structure (caps, 0);
-
-    if (gst_structure_has_field (s, "rate"))
-      gst_structure_fixate_field_nearest_int (s, "rate", dec->sample_rate);
-    else
-      gst_structure_set (s, "rate", G_TYPE_INT, dec->sample_rate, NULL);
-    gst_structure_get_int (s, "rate", &dec->sample_rate);
-
-    if (gst_structure_has_field (s, "channels"))
-      gst_structure_fixate_field_nearest_int (s, "channels", dec->n_channels);
-    else
-      gst_structure_set (s, "channels", G_TYPE_INT, dec->n_channels, NULL);
-    gst_structure_get_int (s, "channels", &dec->n_channels);
-
-    gst_caps_unref (caps);
-  }
-
-  if (dec->n_channels == 0) {
-    GST_DEBUG_OBJECT (dec, "Using a default of 2 channels");
-    dec->n_channels = 2;
-    pos = NULL;
-  }
-
-  if (dec->sample_rate == 0) {
-    GST_DEBUG_OBJECT (dec, "Using a default of 48kHz sample rate");
-    dec->sample_rate = 48000;
-  }
-
-  GST_INFO_OBJECT (dec, "Negotiated %d channels, %d Hz", dec->n_channels,
-      dec->sample_rate);
-
-  /* pass valid order to audio info */
-  if (pos) {
-    memcpy (dec->opus_pos, pos, sizeof (pos[0]) * dec->n_channels);
-    gst_audio_channel_positions_to_valid_order (dec->opus_pos, dec->n_channels);
-  }
-
-  /* set up source format */
-  gst_audio_info_init (&info);
-  gst_audio_info_set_format (&info, GST_AUDIO_FORMAT_S16,
-      dec->sample_rate, dec->n_channels, pos ? dec->opus_pos : NULL);
-  gst_audio_decoder_set_output_format (GST_AUDIO_DECODER (dec), &info);
-
-  /* but we still need the opus order for later reordering */
-  if (pos) {
-    memcpy (dec->opus_pos, pos, sizeof (pos[0]) * dec->n_channels);
-    gst_audio_channel_positions_to_valid_order (dec->opus_pos, dec->n_channels);
-  } else {
-    dec->opus_pos[0] = GST_AUDIO_CHANNEL_POSITION_INVALID;
-  }
-
-  dec->info = info;
-}
-
-static GstFlowReturn
-gst_opus_dec_parse_header (GstOpusDec * dec, GstBuffer * buf)
-{
-  const guint8 *data;
-  GstAudioChannelPosition pos[64];
-  const GstAudioChannelPosition *posn = NULL;
-  GstMapInfo map;
-
-  if (!gst_opus_header_is_id_header (buf)) {
-    GST_ERROR_OBJECT (dec, "Header is not an Opus ID header");
-    return GST_FLOW_ERROR;
-  }
-
-  gst_buffer_map (buf, &map, GST_MAP_READ);
-  data = map.data;
-
-  dec->n_channels = data[9];
-  dec->sample_rate = GST_READ_UINT32_LE (data + 12);
-  if (dec->sample_rate == 0)
-    dec->sample_rate = 48000;
-  dec->pre_skip = GST_READ_UINT16_LE (data + 10);
-  dec->r128_gain = GST_READ_UINT16_LE (data + 16);
-  dec->r128_gain_volume = gst_opus_dec_get_r128_volume (dec->r128_gain);
-  GST_INFO_OBJECT (dec,
-      "Found pre-skip of %u samples, R128 gain %d (volume %f)",
-      dec->pre_skip, dec->r128_gain, dec->r128_gain_volume);
-
-  dec->channel_mapping_family = data[18];
-  if (dec->channel_mapping_family == 0) {
-    /* implicit mapping */
-    GST_INFO_OBJECT (dec, "Channel mapping family 0, implicit mapping");
-    dec->n_streams = dec->n_stereo_streams = 1;
-    dec->channel_mapping[0] = 0;
-    dec->channel_mapping[1] = 1;
-  } else {
-    dec->n_streams = data[19];
-    dec->n_stereo_streams = data[20];
-    memcpy (dec->channel_mapping, data + 21, dec->n_channels);
-
-    if (dec->channel_mapping_family == 1) {
-      GST_INFO_OBJECT (dec, "Channel mapping family 1, Vorbis mapping");
-      switch (dec->n_channels) {
-        case 1:
-        case 2:
-          /* nothing */
-          break;
-        case 3:
-        case 4:
-        case 5:
-        case 6:
-        case 7:
-        case 8:
-          posn = gst_opus_channel_positions[dec->n_channels - 1];
-          break;
-        default:{
-          gint i;
-
-          GST_ELEMENT_WARNING (GST_ELEMENT (dec), STREAM, DECODE,
-              (NULL), ("Using NONE channel layout for more than 8 channels"));
-
-          for (i = 0; i < dec->n_channels; i++)
-            pos[i] = GST_AUDIO_CHANNEL_POSITION_NONE;
-
-          posn = pos;
-        }
-      }
-    } else {
-      GST_INFO_OBJECT (dec, "Channel mapping family %d",
-          dec->channel_mapping_family);
-    }
-  }
-
-  gst_opus_dec_negotiate (dec, posn);
-
-  gst_buffer_unmap (buf, &map);
-
-  return GST_FLOW_OK;
-}
-
-
-static GstFlowReturn
-gst_opus_dec_parse_comments (GstOpusDec * dec, GstBuffer * buf)
-{
-  return GST_FLOW_OK;
-}
-
-static GstFlowReturn
-opus_dec_chain_parse_data (GstOpusDec * dec, GstBuffer * buffer)
-{
-  GstFlowReturn res = GST_FLOW_OK;
-  gsize size;
-  guint8 *data;
-  GstBuffer *outbuf;
-  gint16 *out_data;
-  int n, err;
-  int samples;
-  unsigned int packet_size;
-  GstBuffer *buf;
-  GstMapInfo map, omap;
-
-  if (dec->state == NULL) {
-    /* If we did not get any headers, default to 2 channels */
-    if (dec->n_channels == 0) {
-      GST_INFO_OBJECT (dec, "No header, assuming single stream");
-      dec->n_channels = 2;
-      dec->sample_rate = 48000;
-      /* default stereo mapping */
-      dec->channel_mapping_family = 0;
-      dec->channel_mapping[0] = 0;
-      dec->channel_mapping[1] = 1;
-      dec->n_streams = 1;
-      dec->n_stereo_streams = 1;
-
-      gst_opus_dec_negotiate (dec, NULL);
-    }
-
-    GST_DEBUG_OBJECT (dec, "Creating decoder with %d channels, %d Hz",
-        dec->n_channels, dec->sample_rate);
-#ifndef GST_DISABLE_GST_DEBUG
-    gst_opus_common_log_channel_mapping_table (GST_ELEMENT (dec), opusdec_debug,
-        "Mapping table", dec->n_channels, dec->channel_mapping);
-#endif
-
-    GST_DEBUG_OBJECT (dec, "%d streams, %d stereo", dec->n_streams,
-        dec->n_stereo_streams);
-    dec->state =
-        opus_multistream_decoder_create (dec->sample_rate, dec->n_channels,
-        dec->n_streams, dec->n_stereo_streams, dec->channel_mapping, &err);
-    if (!dec->state || err != OPUS_OK)
-      goto creation_failed;
-  }
-
-  if (buffer) {
-    GST_DEBUG_OBJECT (dec, "Received buffer of size %" G_GSIZE_FORMAT,
-        gst_buffer_get_size (buffer));
-  } else {
-    GST_DEBUG_OBJECT (dec, "Received missing buffer");
-  }
-
-  /* if using in-band FEC, we introdude one extra frame's delay as we need
-     to potentially wait for next buffer to decode a missing buffer */
-  if (dec->use_inband_fec && !dec->primed) {
-    GST_DEBUG_OBJECT (dec, "First buffer received in FEC mode, early out");
-    gst_buffer_replace (&dec->last_buffer, buffer);
-    dec->primed = TRUE;
-    goto done;
-  }
-
-  /* That's the buffer we'll be sending to the opus decoder. */
-  buf = (dec->use_inband_fec
-      && gst_buffer_get_size (dec->last_buffer) >
-      0) ? dec->last_buffer : buffer;
-
-  if (buf && gst_buffer_get_size (buf) > 0) {
-    gst_buffer_map (buf, &map, GST_MAP_READ);
-    data = map.data;
-    size = map.size;
-    GST_DEBUG_OBJECT (dec, "Using buffer of size %" G_GSIZE_FORMAT, size);
-  } else {
-    /* concealment data, pass NULL as the bits parameters */
-    GST_DEBUG_OBJECT (dec, "Using NULL buffer");
-    data = NULL;
-    size = 0;
-  }
-
-  if (gst_buffer_get_size (buffer) == 0) {
-    GstClockTime const opus_plc_alignment = 2500 * GST_USECOND;
-    GstClockTime aligned_missing_duration;
-    GstClockTime missing_duration = GST_BUFFER_DURATION (buffer);
-
-    GST_DEBUG_OBJECT (dec,
-        "missing buffer, doing PLC duration %" GST_TIME_FORMAT
-        " plus leftover %" GST_TIME_FORMAT, GST_TIME_ARGS (missing_duration),
-        GST_TIME_ARGS (dec->leftover_plc_duration));
-
-    /* add the leftover PLC duration to that of the buffer */
-    missing_duration += dec->leftover_plc_duration;
-
-    /* align the combined buffer and leftover PLC duration to multiples
-     * of 2.5ms, always rounding down, and store excess duration for later */
-    aligned_missing_duration =
-        (missing_duration / opus_plc_alignment) * opus_plc_alignment;
-    dec->leftover_plc_duration = missing_duration - aligned_missing_duration;
-
-    /* Opus' PLC cannot operate with less than 2.5ms; skip PLC
-     * and accumulate the missing duration in the leftover_plc_duration
-     * for the next PLC attempt */
-    if (aligned_missing_duration < opus_plc_alignment) {
-      GST_DEBUG_OBJECT (dec,
-          "current duration %" GST_TIME_FORMAT
-          " of missing data not enough for PLC (minimum needed: %"
-          GST_TIME_FORMAT ") - skipping", GST_TIME_ARGS (missing_duration),
-          GST_TIME_ARGS (opus_plc_alignment));
-      goto done;
-    }
-
-    /* convert the duration (in nanoseconds) to sample count */
-    samples =
-        gst_util_uint64_scale_int (aligned_missing_duration, dec->sample_rate,
-        GST_SECOND);
-
-    GST_DEBUG_OBJECT (dec,
-        "calculated PLC frame length: %" GST_TIME_FORMAT
-        " num frame samples: %d new leftover: %" GST_TIME_FORMAT,
-        GST_TIME_ARGS (aligned_missing_duration), samples,
-        GST_TIME_ARGS (dec->leftover_plc_duration));
-  } else {
-    /* use maximum size (120 ms) as the number of returned samples is
-       not constant over the stream. */
-    samples = 120 * dec->sample_rate / 1000;
-  }
-
-  packet_size = samples * dec->n_channels * 2;
-
-  outbuf =
-      gst_audio_decoder_allocate_output_buffer (GST_AUDIO_DECODER (dec),
-      packet_size);
-  if (!outbuf) {
-    goto buffer_failed;
-  }
-
-  gst_buffer_map (outbuf, &omap, GST_MAP_WRITE);
-  out_data = (gint16 *) omap.data;
-
-  if (dec->use_inband_fec) {
-    if (gst_buffer_get_size (dec->last_buffer) > 0) {
-      /* normal delayed decode */
-      GST_LOG_OBJECT (dec, "FEC enabled, decoding last delayed buffer");
-      n = opus_multistream_decode (dec->state, data, size, out_data, samples,
-          0);
-    } else {
-      /* FEC reconstruction decode */
-      GST_LOG_OBJECT (dec, "FEC enabled, reconstructing last buffer");
-      n = opus_multistream_decode (dec->state, data, size, out_data, samples,
-          1);
-    }
-  } else {
-    /* normal decode */
-    GST_LOG_OBJECT (dec, "FEC disabled, decoding buffer");
-    n = opus_multistream_decode (dec->state, data, size, out_data, samples, 0);
-  }
-  gst_buffer_unmap (outbuf, &omap);
-  if (data != NULL)
-    gst_buffer_unmap (buf, &map);
-
-  if (n < 0) {
-    GST_ELEMENT_ERROR (dec, STREAM, DECODE, ("Decoding error: %d", n), (NULL));
-    gst_buffer_unref (outbuf);
-    return GST_FLOW_ERROR;
-  }
-  GST_DEBUG_OBJECT (dec, "decoded %d samples", n);
-  gst_buffer_set_size (outbuf, n * 2 * dec->n_channels);
-
-  /* Skip any samples that need skipping */
-  if (dec->pre_skip > 0) {
-    guint scaled_pre_skip = dec->pre_skip * dec->sample_rate / 48000;
-    guint skip = scaled_pre_skip > n ? n : scaled_pre_skip;
-    guint scaled_skip = skip * 48000 / dec->sample_rate;
-
-    gst_buffer_resize (outbuf, skip * 2 * dec->n_channels, -1);
-    dec->pre_skip -= scaled_skip;
-    GST_INFO_OBJECT (dec,
-        "Skipping %u samples (%u at 48000 Hz, %u left to skip)", skip,
-        scaled_skip, dec->pre_skip);
-  }
-
-  if (gst_buffer_get_size (outbuf) == 0) {
-    gst_buffer_unref (outbuf);
-    outbuf = NULL;
-  } else if (dec->opus_pos[0] != GST_AUDIO_CHANNEL_POSITION_INVALID) {
-    gst_audio_buffer_reorder_channels (outbuf, GST_AUDIO_FORMAT_S16,
-        dec->n_channels, dec->opus_pos, dec->info.position);
-  }
-
-  /* Apply gain */
-  /* Would be better off leaving this to a volume element, as this is
-     a naive conversion that does too many int/float conversions.
-     However, we don't have control over the pipeline...
-     So make it optional if the user program wants to use a volume,
-     but do it by default so the correct volume goes out by default */
-  if (dec->apply_gain && outbuf && dec->r128_gain) {
-    gsize rsize;
-    unsigned int i, nsamples;
-    double volume = dec->r128_gain_volume;
-    gint16 *samples;
-
-    gst_buffer_map (outbuf, &omap, GST_MAP_READWRITE);
-    samples = (gint16 *) omap.data;
-    rsize = omap.size;
-    GST_DEBUG_OBJECT (dec, "Applying gain: volume %f", volume);
-    nsamples = rsize / 2;
-    for (i = 0; i < nsamples; ++i) {
-      int sample = (int) (samples[i] * volume + 0.5);
-      samples[i] = sample < -32768 ? -32768 : sample > 32767 ? 32767 : sample;
-    }
-    gst_buffer_unmap (outbuf, &omap);
-  }
-
-  if (dec->use_inband_fec) {
-    gst_buffer_replace (&dec->last_buffer, buffer);
-  }
-
-  res = gst_audio_decoder_finish_frame (GST_AUDIO_DECODER (dec), outbuf, 1);
-
-  if (res != GST_FLOW_OK)
-    GST_DEBUG_OBJECT (dec, "flow: %s", gst_flow_get_name (res));
-
-done:
-  return res;
-
-creation_failed:
-  GST_ERROR_OBJECT (dec, "Failed to create Opus decoder: %d", err);
-  return GST_FLOW_ERROR;
-
-buffer_failed:
-  GST_ERROR_OBJECT (dec, "Failed to create %u byte buffer", packet_size);
-  return GST_FLOW_ERROR;
-}
-
-static gboolean
-gst_opus_dec_set_format (GstAudioDecoder * bdec, GstCaps * caps)
-{
-  GstOpusDec *dec = GST_OPUS_DEC (bdec);
-  gboolean ret = TRUE;
-  GstStructure *s;
-  const GValue *streamheader;
-  GstCaps *old_caps;
-
-  GST_DEBUG_OBJECT (dec, "set_format: %" GST_PTR_FORMAT, caps);
-
-  if ((old_caps = gst_pad_get_current_caps (GST_AUDIO_DECODER_SINK_PAD (bdec)))) {
-    if (gst_caps_is_equal (caps, old_caps)) {
-      gst_caps_unref (old_caps);
-      GST_DEBUG_OBJECT (dec, "caps didn't change");
-      goto done;
-    }
-
-    GST_DEBUG_OBJECT (dec, "caps have changed, resetting decoder");
-    gst_opus_dec_reset (dec);
-    gst_caps_unref (old_caps);
-  }
-
-  s = gst_caps_get_structure (caps, 0);
-  if ((streamheader = gst_structure_get_value (s, "streamheader")) &&
-      G_VALUE_HOLDS (streamheader, GST_TYPE_ARRAY) &&
-      gst_value_array_get_size (streamheader) >= 2) {
-    const GValue *header, *vorbiscomment;
-    GstBuffer *buf;
-    GstFlowReturn res = GST_FLOW_OK;
-
-    header = gst_value_array_get_value (streamheader, 0);
-    if (header && G_VALUE_HOLDS (header, GST_TYPE_BUFFER)) {
-      buf = gst_value_get_buffer (header);
-      res = gst_opus_dec_parse_header (dec, buf);
-      if (res != GST_FLOW_OK)
-        goto done;
-      gst_buffer_replace (&dec->streamheader, buf);
-    }
-
-    vorbiscomment = gst_value_array_get_value (streamheader, 1);
-    if (vorbiscomment && G_VALUE_HOLDS (vorbiscomment, GST_TYPE_BUFFER)) {
-      buf = gst_value_get_buffer (vorbiscomment);
-      res = gst_opus_dec_parse_comments (dec, buf);
-      if (res != GST_FLOW_OK)
-        goto done;
-      gst_buffer_replace (&dec->vorbiscomment, buf);
-    }
-  } else {
-    /* defaults if not in the caps */
-    dec->n_channels = 2;
-    dec->sample_rate = 48000;
-
-    gst_structure_get_int (s, "channels", &dec->n_channels);
-    gst_structure_get_int (s, "rate", &dec->sample_rate);
-
-    /* default stereo mapping */
-    dec->channel_mapping_family = 0;
-    dec->channel_mapping[0] = 0;
-    dec->channel_mapping[1] = 1;
-    dec->n_streams = 1;
-    dec->n_stereo_streams = 1;
-
-    gst_opus_dec_negotiate (dec, NULL);
-  }
-
-done:
-  return ret;
-}
-
-static gboolean
-memcmp_buffers (GstBuffer * buf1, GstBuffer * buf2)
-{
-  gsize size1, size2;
-  gboolean res;
-  GstMapInfo map;
-
-  size1 = gst_buffer_get_size (buf1);
-  size2 = gst_buffer_get_size (buf2);
-
-  if (size1 != size2)
-    return FALSE;
-
-  gst_buffer_map (buf1, &map, GST_MAP_READ);
-  res = gst_buffer_memcmp (buf2, 0, map.data, map.size) == 0;
-  gst_buffer_unmap (buf1, &map);
-
-  return res;
-}
-
-static GstFlowReturn
-gst_opus_dec_handle_frame (GstAudioDecoder * adec, GstBuffer * buf)
-{
-  GstFlowReturn res;
-  GstOpusDec *dec;
-
-  /* no fancy draining */
-  if (G_UNLIKELY (!buf))
-    return GST_FLOW_OK;
-
-  dec = GST_OPUS_DEC (adec);
-  GST_LOG_OBJECT (dec,
-      "Got buffer ts %" GST_TIME_FORMAT ", duration %" GST_TIME_FORMAT,
-      GST_TIME_ARGS (GST_BUFFER_TIMESTAMP (buf)),
-      GST_TIME_ARGS (GST_BUFFER_DURATION (buf)));
-
-  /* If we have the streamheader and vorbiscomment from the caps already
-   * ignore them here */
-  if (dec->streamheader && dec->vorbiscomment) {
-    if (memcmp_buffers (dec->streamheader, buf)) {
-      GST_DEBUG_OBJECT (dec, "found streamheader");
-      gst_audio_decoder_finish_frame (adec, NULL, 1);
-      res = GST_FLOW_OK;
-    } else if (memcmp_buffers (dec->vorbiscomment, buf)) {
-      GST_DEBUG_OBJECT (dec, "found vorbiscomments");
-      gst_audio_decoder_finish_frame (adec, NULL, 1);
-      res = GST_FLOW_OK;
-    } else {
-      res = opus_dec_chain_parse_data (dec, buf);
-    }
-  } else {
-    /* Otherwise fall back to packet counting and assume that the
-     * first two packets might be the headers, checking magic. */
-    switch (dec->packetno) {
-      case 0:
-        if (gst_opus_header_is_header (buf, "OpusHead", 8)) {
-          GST_DEBUG_OBJECT (dec, "found streamheader");
-          res = gst_opus_dec_parse_header (dec, buf);
-          gst_audio_decoder_finish_frame (adec, NULL, 1);
-        } else {
-          res = opus_dec_chain_parse_data (dec, buf);
-        }
-        break;
-      case 1:
-        if (gst_opus_header_is_header (buf, "OpusTags", 8)) {
-          GST_DEBUG_OBJECT (dec, "counted vorbiscomments");
-          res = gst_opus_dec_parse_comments (dec, buf);
-          gst_audio_decoder_finish_frame (adec, NULL, 1);
-        } else {
-          res = opus_dec_chain_parse_data (dec, buf);
-        }
-        break;
-      default:
-      {
-        res = opus_dec_chain_parse_data (dec, buf);
-        break;
-      }
-    }
-  }
-
-  dec->packetno++;
-
-  return res;
-}
-
-static void
-gst_opus_dec_get_property (GObject * object, guint prop_id, GValue * value,
-    GParamSpec * pspec)
-{
-  GstOpusDec *dec = GST_OPUS_DEC (object);
-
-  switch (prop_id) {
-    case PROP_USE_INBAND_FEC:
-      g_value_set_boolean (value, dec->use_inband_fec);
-      break;
-    case PROP_APPLY_GAIN:
-      g_value_set_boolean (value, dec->apply_gain);
-      break;
-    default:
-      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
-      break;
-  }
-}
-
-static void
-gst_opus_dec_set_property (GObject * object, guint prop_id,
-    const GValue * value, GParamSpec * pspec)
-{
-  GstOpusDec *dec = GST_OPUS_DEC (object);
-
-  switch (prop_id) {
-    case PROP_USE_INBAND_FEC:
-      dec->use_inband_fec = g_value_get_boolean (value);
-      break;
-    case PROP_APPLY_GAIN:
-      dec->apply_gain = g_value_get_boolean (value);
-      break;
-    default:
-      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
-      break;
-  }
-}
diff --git a/ext/opus/gstopusdec.h b/ext/opus/gstopusdec.h
deleted file mode 100644
index f8d43a9..0000000
--- a/ext/opus/gstopusdec.h
+++ /dev/null
@@ -1,86 +0,0 @@
-/* GStreamer
- * Copyright (C) <1999> Erik Walthinsen <omega@cse.ogi.edu>
- * Copyright (C) <2008> Sebastian Dröge <sebastian.droege@collabora.co.uk>
- * Copyright (C) <2011-2012> Vincent Penquerc'h <vincent.penquerch@collabora.co.uk>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-#ifndef __GST_OPUS_DEC_H__
-#define __GST_OPUS_DEC_H__
-
-#include <gst/gst.h>
-#include <gst/audio/gstaudiodecoder.h>
-#include <opus_multistream.h>
-
-G_BEGIN_DECLS
-
-#define GST_TYPE_OPUS_DEC \
-  (gst_opus_dec_get_type())
-#define GST_OPUS_DEC(obj) \
-  (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_OPUS_DEC,GstOpusDec))
-#define GST_OPUS_DEC_CLASS(klass) \
-  (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_OPUS_DEC,GstOpusDecClass))
-#define GST_IS_OPUS_DEC(obj) \
-  (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_OPUS_DEC))
-#define GST_IS_OPUS_DEC_CLASS(klass) \
-  (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_OPUS_DEC))
-
-typedef struct _GstOpusDec GstOpusDec;
-typedef struct _GstOpusDecClass GstOpusDecClass;
-
-struct _GstOpusDec {
-  GstAudioDecoder       element;
-
-  OpusMSDecoder        *state;
-
-  guint64               packetno;
-
-  GstBuffer            *streamheader;
-  GstBuffer            *vorbiscomment;
-
-  int sample_rate;
-  int n_channels;
-  guint32 pre_skip;
-  gint16 r128_gain;
-
-  GstAudioChannelPosition opus_pos[64];
-  GstAudioInfo info;
-
-  guint8 n_streams;
-  guint8 n_stereo_streams;
-  guint8 channel_mapping_family;
-  guint8 channel_mapping[256];
-
-  gboolean apply_gain;
-  double r128_gain_volume;
-
-  gboolean use_inband_fec;
-  GstBuffer *last_buffer;
-  gboolean primed;
-
-  guint64 leftover_plc_duration;
-};
-
-struct _GstOpusDecClass {
-  GstAudioDecoderClass parent_class;
-};
-
-GType gst_opus_dec_get_type (void);
-
-G_END_DECLS
-
-#endif /* __GST_OPUS_DEC_H__ */
diff --git a/ext/opus/gstopusenc.c b/ext/opus/gstopusenc.c
deleted file mode 100644
index 7dfd441..0000000
--- a/ext/opus/gstopusenc.c
+++ /dev/null
@@ -1,1182 +0,0 @@
-/* GStreamer Opus Encoder
- * Copyright (C) <1999> Erik Walthinsen <omega@cse.ogi.edu>
- * Copyright (C) <2008> Sebastian Dröge <sebastian.droege@collabora.co.uk>
- * Copyright (C) <2011> Vincent Penquerc'h <vincent.penquerch@collabora.co.uk>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-/*
- * Based on the speexenc element
- */
-
-/**
- * SECTION:element-opusenc
- * @see_also: opusdec, oggmux
- *
- * This element encodes raw audio to OPUS.
- *
- * <refsect2>
- * <title>Example pipelines</title>
- * |[
- * gst-launch -v audiotestsrc wave=sine num-buffers=100 ! audioconvert ! opusenc ! oggmux ! filesink location=sine.ogg
- * ]| Encode a test sine signal to Ogg/OPUS.
- * </refsect2>
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-#include <stdlib.h>
-#include <string.h>
-#include <time.h>
-#include <math.h>
-#include <opus.h>
-
-#include <gst/gsttagsetter.h>
-#include <gst/audio/audio.h>
-#include <gst/glib-compat-private.h>
-#include "gstopusheader.h"
-#include "gstopuscommon.h"
-#include "gstopusenc.h"
-
-GST_DEBUG_CATEGORY_STATIC (opusenc_debug);
-#define GST_CAT_DEFAULT opusenc_debug
-
-/* Some arbitrary bounds beyond which it really doesn't make sense.
-   The spec mentions 6 kb/s to 510 kb/s, so 4000 and 650000 ought to be
-   safe as property bounds. */
-#define LOWEST_BITRATE 4000
-#define HIGHEST_BITRATE 650000
-
-#define GST_OPUS_ENC_TYPE_BANDWIDTH (gst_opus_enc_bandwidth_get_type())
-static GType
-gst_opus_enc_bandwidth_get_type (void)
-{
-  static const GEnumValue values[] = {
-    {OPUS_BANDWIDTH_NARROWBAND, "Narrow band", "narrowband"},
-    {OPUS_BANDWIDTH_MEDIUMBAND, "Medium band", "mediumband"},
-    {OPUS_BANDWIDTH_WIDEBAND, "Wide band", "wideband"},
-    {OPUS_BANDWIDTH_SUPERWIDEBAND, "Super wide band", "superwideband"},
-    {OPUS_BANDWIDTH_FULLBAND, "Full band", "fullband"},
-    {OPUS_AUTO, "Auto", "auto"},
-    {0, NULL, NULL}
-  };
-  static volatile GType id = 0;
-
-  if (g_once_init_enter ((gsize *) & id)) {
-    GType _id;
-
-    _id = g_enum_register_static ("GstOpusEncBandwidth", values);
-
-    g_once_init_leave ((gsize *) & id, _id);
-  }
-
-  return id;
-}
-
-#define GST_OPUS_ENC_TYPE_FRAME_SIZE (gst_opus_enc_frame_size_get_type())
-static GType
-gst_opus_enc_frame_size_get_type (void)
-{
-  static const GEnumValue values[] = {
-    {2, "2.5", "2.5"},
-    {5, "5", "5"},
-    {10, "10", "10"},
-    {20, "20", "20"},
-    {40, "40", "40"},
-    {60, "60", "60"},
-    {0, NULL, NULL}
-  };
-  static volatile GType id = 0;
-
-  if (g_once_init_enter ((gsize *) & id)) {
-    GType _id;
-
-    _id = g_enum_register_static ("GstOpusEncFrameSize", values);
-
-    g_once_init_leave ((gsize *) & id, _id);
-  }
-
-  return id;
-}
-
-#define GST_OPUS_ENC_TYPE_AUDIO_TYPE (gst_opus_enc_audio_type_get_type())
-static GType
-gst_opus_enc_audio_type_get_type (void)
-{
-  static const GEnumValue values[] = {
-    {OPUS_APPLICATION_AUDIO, "Generic audio", "generic"},
-    {OPUS_APPLICATION_VOIP, "Voice", "voice"},
-    {0, NULL, NULL}
-  };
-  static volatile GType id = 0;
-
-  if (g_once_init_enter ((gsize *) & id)) {
-    GType _id;
-
-    _id = g_enum_register_static ("GstOpusEncAudioType", values);
-
-    g_once_init_leave ((gsize *) & id, _id);
-  }
-
-  return id;
-}
-
-#define GST_OPUS_ENC_TYPE_BITRATE_TYPE (gst_opus_enc_bitrate_type_get_type())
-static GType
-gst_opus_enc_bitrate_type_get_type (void)
-{
-  static const GEnumValue values[] = {
-    {BITRATE_TYPE_CBR, "CBR", "cbr"},
-    {BITRATE_TYPE_VBR, "VBR", "vbr"},
-    {BITRATE_TYPE_CONSTRAINED_VBR, "Constrained VBR", "constrained-vbr"},
-    {0, NULL, NULL}
-  };
-  static volatile GType id = 0;
-
-  if (g_once_init_enter ((gsize *) & id)) {
-    GType _id;
-
-    _id = g_enum_register_static ("GstOpusEncBitrateType", values);
-
-    g_once_init_leave ((gsize *) & id, _id);
-  }
-
-  return id;
-}
-
-#define FORMAT_STR GST_AUDIO_NE(S16)
-static GstStaticPadTemplate sink_factory = GST_STATIC_PAD_TEMPLATE ("sink",
-    GST_PAD_SINK,
-    GST_PAD_ALWAYS,
-    GST_STATIC_CAPS ("audio/x-raw, "
-        "format = (string) " FORMAT_STR ", "
-        "layout = (string) interleaved, "
-        "rate = (int) 48000, "
-        "channels = (int) [ 1, 2 ]; "
-        "audio/x-raw, "
-        "format = (string) " FORMAT_STR ", "
-        "layout = (string) interleaved, "
-        "rate = (int) { 8000, 12000, 16000, 24000 }, "
-        "channels = (int) [ 1, 2 ] ")
-    );
-
-static GstStaticPadTemplate src_factory = GST_STATIC_PAD_TEMPLATE ("src",
-    GST_PAD_SRC,
-    GST_PAD_ALWAYS,
-    GST_STATIC_CAPS ("audio/x-opus")
-    );
-
-#define DEFAULT_AUDIO           TRUE
-#define DEFAULT_AUDIO_TYPE      OPUS_APPLICATION_AUDIO
-#define DEFAULT_BITRATE         64000
-#define DEFAULT_BANDWIDTH       OPUS_BANDWIDTH_FULLBAND
-#define DEFAULT_FRAMESIZE       20
-#define DEFAULT_CBR             TRUE
-#define DEFAULT_CONSTRAINED_VBR TRUE
-#define DEFAULT_BITRATE_TYPE    BITRATE_TYPE_CBR
-#define DEFAULT_COMPLEXITY      10
-#define DEFAULT_INBAND_FEC      FALSE
-#define DEFAULT_DTX             FALSE
-#define DEFAULT_PACKET_LOSS_PERCENT 0
-#define DEFAULT_MAX_PAYLOAD_SIZE 4000
-
-enum
-{
-  PROP_0,
-  PROP_AUDIO,
-  PROP_AUDIO_TYPE,
-  PROP_BITRATE,
-  PROP_BANDWIDTH,
-  PROP_FRAME_SIZE,
-  PROP_CBR,
-  PROP_CONSTRAINED_VBR,
-  PROP_BITRATE_TYPE,
-  PROP_COMPLEXITY,
-  PROP_INBAND_FEC,
-  PROP_DTX,
-  PROP_PACKET_LOSS_PERCENT,
-  PROP_MAX_PAYLOAD_SIZE
-};
-
-static void gst_opus_enc_finalize (GObject * object);
-
-static gboolean gst_opus_enc_sink_event (GstAudioEncoder * benc,
-    GstEvent * event);
-static GstCaps *gst_opus_enc_sink_getcaps (GstAudioEncoder * benc,
-    GstCaps * filter);
-static gboolean gst_opus_enc_setup (GstOpusEnc * enc);
-
-static void gst_opus_enc_get_property (GObject * object, guint prop_id,
-    GValue * value, GParamSpec * pspec);
-static void gst_opus_enc_set_property (GObject * object, guint prop_id,
-    const GValue * value, GParamSpec * pspec);
-
-static void gst_opus_enc_set_tags (GstOpusEnc * enc);
-static gboolean gst_opus_enc_start (GstAudioEncoder * benc);
-static gboolean gst_opus_enc_stop (GstAudioEncoder * benc);
-static gboolean gst_opus_enc_set_format (GstAudioEncoder * benc,
-    GstAudioInfo * info);
-static GstFlowReturn gst_opus_enc_handle_frame (GstAudioEncoder * benc,
-    GstBuffer * buf);
-static gint64 gst_opus_enc_get_latency (GstOpusEnc * enc);
-
-static GstFlowReturn gst_opus_enc_encode (GstOpusEnc * enc, GstBuffer * buffer);
-
-#define gst_opus_enc_parent_class parent_class
-G_DEFINE_TYPE_WITH_CODE (GstOpusEnc, gst_opus_enc, GST_TYPE_AUDIO_ENCODER,
-    G_IMPLEMENT_INTERFACE (GST_TYPE_TAG_SETTER, NULL);
-    G_IMPLEMENT_INTERFACE (GST_TYPE_PRESET, NULL));
-
-static void
-gst_opus_enc_set_tags (GstOpusEnc * enc)
-{
-  GstTagList *taglist;
-
-  /* create a taglist and add a bitrate tag to it */
-  taglist = gst_tag_list_new_empty ();
-  gst_tag_list_add (taglist, GST_TAG_MERGE_REPLACE,
-      GST_TAG_BITRATE, enc->bitrate, NULL);
-
-  gst_audio_encoder_merge_tags (GST_AUDIO_ENCODER (enc), taglist,
-      GST_TAG_MERGE_REPLACE);
-
-  gst_tag_list_unref (taglist);
-}
-
-static void
-gst_opus_enc_class_init (GstOpusEncClass * klass)
-{
-  GObjectClass *gobject_class;
-  GstAudioEncoderClass *base_class;
-  GstElementClass *gstelement_class;
-
-  gobject_class = (GObjectClass *) klass;
-  base_class = (GstAudioEncoderClass *) klass;
-  gstelement_class = (GstElementClass *) klass;
-
-  gobject_class->set_property = gst_opus_enc_set_property;
-  gobject_class->get_property = gst_opus_enc_get_property;
-
-  gst_element_class_add_pad_template (gstelement_class,
-      gst_static_pad_template_get (&src_factory));
-  gst_element_class_add_pad_template (gstelement_class,
-      gst_static_pad_template_get (&sink_factory));
-  gst_element_class_set_static_metadata (gstelement_class, "Opus audio encoder",
-      "Codec/Encoder/Audio",
-      "Encodes audio in Opus format",
-      "Vincent Penquerc'h <vincent.penquerch@collabora.co.uk>");
-
-  base_class->start = GST_DEBUG_FUNCPTR (gst_opus_enc_start);
-  base_class->stop = GST_DEBUG_FUNCPTR (gst_opus_enc_stop);
-  base_class->set_format = GST_DEBUG_FUNCPTR (gst_opus_enc_set_format);
-  base_class->handle_frame = GST_DEBUG_FUNCPTR (gst_opus_enc_handle_frame);
-  base_class->sink_event = GST_DEBUG_FUNCPTR (gst_opus_enc_sink_event);
-  base_class->getcaps = GST_DEBUG_FUNCPTR (gst_opus_enc_sink_getcaps);
-
-  g_object_class_install_property (gobject_class, PROP_AUDIO,
-      g_param_spec_boolean ("audio",
-          "Audio or voice",
-          "Audio or voice (DEPRECATED: use audio-type)", DEFAULT_AUDIO,
-          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | G_PARAM_DEPRECATED));
-  g_object_class_install_property (gobject_class, PROP_AUDIO_TYPE,
-      g_param_spec_enum ("audio-type", "What type of audio to optimize for",
-          "What type of audio to optimize for", GST_OPUS_ENC_TYPE_AUDIO_TYPE,
-          DEFAULT_AUDIO_TYPE, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
-  g_object_class_install_property (G_OBJECT_CLASS (klass), PROP_BITRATE,
-      g_param_spec_int ("bitrate", "Encoding Bit-rate",
-          "Specify an encoding bit-rate (in bps).", LOWEST_BITRATE,
-          HIGHEST_BITRATE, DEFAULT_BITRATE,
-          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS |
-          GST_PARAM_MUTABLE_PLAYING));
-  g_object_class_install_property (gobject_class, PROP_BANDWIDTH,
-      g_param_spec_enum ("bandwidth", "Band Width", "Audio Band Width",
-          GST_OPUS_ENC_TYPE_BANDWIDTH, DEFAULT_BANDWIDTH,
-          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS |
-          GST_PARAM_MUTABLE_PLAYING));
-  g_object_class_install_property (gobject_class, PROP_FRAME_SIZE,
-      g_param_spec_enum ("frame-size", "Frame Size",
-          "The duration of an audio frame, in ms", GST_OPUS_ENC_TYPE_FRAME_SIZE,
-          DEFAULT_FRAMESIZE,
-          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS |
-          GST_PARAM_MUTABLE_PLAYING));
-  g_object_class_install_property (gobject_class, PROP_CBR,
-      g_param_spec_boolean ("cbr", "Constant bit rate",
-          "Constant bit rate (DEPRECATED: use bitrate-type)", DEFAULT_CBR,
-          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | GST_PARAM_MUTABLE_PLAYING
-          | G_PARAM_DEPRECATED));
-  g_object_class_install_property (gobject_class, PROP_CONSTRAINED_VBR,
-      g_param_spec_boolean ("constrained-vbr", "Constrained VBR",
-          "Constrained VBR (DEPRECATED: use bitrate-type)",
-          DEFAULT_CONSTRAINED_VBR,
-          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | GST_PARAM_MUTABLE_PLAYING
-          | G_PARAM_DEPRECATED));
-  g_object_class_install_property (gobject_class, PROP_BITRATE_TYPE,
-      g_param_spec_enum ("bitrate-type", "Bitrate type", "Bitrate type",
-          GST_OPUS_ENC_TYPE_BITRATE_TYPE, DEFAULT_BITRATE_TYPE,
-          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS |
-          GST_PARAM_MUTABLE_PLAYING));
-  g_object_class_install_property (gobject_class, PROP_COMPLEXITY,
-      g_param_spec_int ("complexity", "Complexity", "Complexity", 0, 10,
-          DEFAULT_COMPLEXITY,
-          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS |
-          GST_PARAM_MUTABLE_PLAYING));
-  g_object_class_install_property (gobject_class, PROP_INBAND_FEC,
-      g_param_spec_boolean ("inband-fec", "In-band FEC",
-          "Enable forward error correction", DEFAULT_INBAND_FEC,
-          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS |
-          GST_PARAM_MUTABLE_PLAYING));
-  g_object_class_install_property (gobject_class, PROP_DTX,
-      g_param_spec_boolean ("dtx", "DTX", "DTX", DEFAULT_DTX,
-          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS |
-          GST_PARAM_MUTABLE_PLAYING));
-  g_object_class_install_property (G_OBJECT_CLASS (klass),
-      PROP_PACKET_LOSS_PERCENT, g_param_spec_int ("packet-loss-percentage",
-          "Loss percentage", "Packet loss percentage", 0, 100,
-          DEFAULT_PACKET_LOSS_PERCENT,
-          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS |
-          GST_PARAM_MUTABLE_PLAYING));
-  g_object_class_install_property (G_OBJECT_CLASS (klass),
-      PROP_MAX_PAYLOAD_SIZE, g_param_spec_uint ("max-payload-size",
-          "Max payload size", "Maximum payload size in bytes", 2, 4000,
-          DEFAULT_MAX_PAYLOAD_SIZE,
-          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS |
-          GST_PARAM_MUTABLE_PLAYING));
-
-  gobject_class->finalize = GST_DEBUG_FUNCPTR (gst_opus_enc_finalize);
-
-  GST_DEBUG_CATEGORY_INIT (opusenc_debug, "opusenc", 0, "Opus encoder");
-}
-
-static void
-gst_opus_enc_finalize (GObject * object)
-{
-  GstOpusEnc *enc;
-
-  enc = GST_OPUS_ENC (object);
-
-  g_mutex_clear (&enc->property_lock);
-
-  G_OBJECT_CLASS (parent_class)->finalize (object);
-}
-
-static void
-gst_opus_enc_init (GstOpusEnc * enc)
-{
-  GstAudioEncoder *benc = GST_AUDIO_ENCODER (enc);
-
-  GST_DEBUG_OBJECT (enc, "init");
-
-  GST_PAD_SET_ACCEPT_TEMPLATE (GST_AUDIO_ENCODER_SINK_PAD (enc));
-
-  g_mutex_init (&enc->property_lock);
-
-  enc->n_channels = -1;
-  enc->sample_rate = -1;
-  enc->frame_samples = 0;
-
-  enc->bitrate = DEFAULT_BITRATE;
-  enc->bandwidth = DEFAULT_BANDWIDTH;
-  enc->frame_size = DEFAULT_FRAMESIZE;
-  enc->bitrate_type = DEFAULT_BITRATE_TYPE;
-  enc->complexity = DEFAULT_COMPLEXITY;
-  enc->inband_fec = DEFAULT_INBAND_FEC;
-  enc->dtx = DEFAULT_DTX;
-  enc->packet_loss_percentage = DEFAULT_PACKET_LOSS_PERCENT;
-  enc->max_payload_size = DEFAULT_MAX_PAYLOAD_SIZE;
-  enc->audio_type = DEFAULT_AUDIO_TYPE;
-
-  /* arrange granulepos marking (and required perfect ts) */
-  gst_audio_encoder_set_mark_granule (benc, TRUE);
-  gst_audio_encoder_set_perfect_timestamp (benc, TRUE);
-}
-
-static gboolean
-gst_opus_enc_start (GstAudioEncoder * benc)
-{
-  GstOpusEnc *enc = GST_OPUS_ENC (benc);
-
-  GST_DEBUG_OBJECT (enc, "start");
-  enc->encoded_samples = 0;
-
-  return TRUE;
-}
-
-static gboolean
-gst_opus_enc_stop (GstAudioEncoder * benc)
-{
-  GstOpusEnc *enc = GST_OPUS_ENC (benc);
-
-  GST_DEBUG_OBJECT (enc, "stop");
-  if (enc->state) {
-    opus_multistream_encoder_destroy (enc->state);
-    enc->state = NULL;
-  }
-  gst_tag_setter_reset_tags (GST_TAG_SETTER (enc));
-
-  return TRUE;
-}
-
-static gint64
-gst_opus_enc_get_latency (GstOpusEnc * enc)
-{
-  gint64 latency = gst_util_uint64_scale (enc->frame_samples, GST_SECOND,
-      enc->sample_rate);
-  GST_DEBUG_OBJECT (enc, "Latency: %" GST_TIME_FORMAT, GST_TIME_ARGS (latency));
-  return latency;
-}
-
-static void
-gst_opus_enc_setup_base_class (GstOpusEnc * enc, GstAudioEncoder * benc)
-{
-  gst_audio_encoder_set_latency (benc,
-      gst_opus_enc_get_latency (enc), gst_opus_enc_get_latency (enc));
-  gst_audio_encoder_set_frame_samples_min (benc, enc->frame_samples);
-  gst_audio_encoder_set_frame_samples_max (benc, enc->frame_samples);
-  gst_audio_encoder_set_frame_max (benc, 1);
-}
-
-static gint
-gst_opus_enc_get_frame_samples (GstOpusEnc * enc)
-{
-  gint frame_samples = 0;
-  switch (enc->frame_size) {
-    case 2:
-      frame_samples = enc->sample_rate / 400;
-      break;
-    case 5:
-      frame_samples = enc->sample_rate / 200;
-      break;
-    case 10:
-      frame_samples = enc->sample_rate / 100;
-      break;
-    case 20:
-      frame_samples = enc->sample_rate / 50;
-      break;
-    case 40:
-      frame_samples = enc->sample_rate / 25;
-      break;
-    case 60:
-      frame_samples = 3 * enc->sample_rate / 50;
-      break;
-    default:
-      GST_WARNING_OBJECT (enc, "Unsupported frame size: %d", enc->frame_size);
-      frame_samples = 0;
-      break;
-  }
-  return frame_samples;
-}
-
-static void
-gst_opus_enc_setup_trivial_mapping (GstOpusEnc * enc, guint8 mapping[256])
-{
-  int n;
-
-  for (n = 0; n < 255; ++n)
-    mapping[n] = n;
-}
-
-static int
-gst_opus_enc_find_channel_position (GstOpusEnc * enc, const GstAudioInfo * info,
-    GstAudioChannelPosition position)
-{
-  int n;
-  for (n = 0; n < enc->n_channels; ++n) {
-    if (GST_AUDIO_INFO_POSITION (info, n) == position) {
-      return n;
-    }
-  }
-  return -1;
-}
-
-static int
-gst_opus_enc_find_channel_position_in_vorbis_order (GstOpusEnc * enc,
-    GstAudioChannelPosition position)
-{
-  int c;
-
-  for (c = 0; c < enc->n_channels; ++c) {
-    if (gst_opus_channel_positions[enc->n_channels - 1][c] == position) {
-      GST_INFO_OBJECT (enc,
-          "Channel position %s maps to index %d in Vorbis order",
-          gst_opus_channel_names[position], c);
-      return c;
-    }
-  }
-  GST_WARNING_OBJECT (enc,
-      "Channel position %s is not representable in Vorbis order",
-      gst_opus_channel_names[position]);
-  return -1;
-}
-
-static void
-gst_opus_enc_setup_channel_mappings (GstOpusEnc * enc,
-    const GstAudioInfo * info)
-{
-#define MAPS(idx,pos) (GST_AUDIO_INFO_POSITION (info, (idx)) == GST_AUDIO_CHANNEL_POSITION_##pos)
-
-  int n;
-
-  GST_DEBUG_OBJECT (enc, "Setting up channel mapping for %d channels",
-      enc->n_channels);
-
-  /* Start by setting up a default trivial mapping */
-  enc->n_stereo_streams = 0;
-  gst_opus_enc_setup_trivial_mapping (enc, enc->encoding_channel_mapping);
-  gst_opus_enc_setup_trivial_mapping (enc, enc->decoding_channel_mapping);
-
-  /* For one channel, use the basic RTP mapping */
-  if (enc->n_channels == 1) {
-    GST_INFO_OBJECT (enc, "Mono, trivial RTP mapping");
-    enc->channel_mapping_family = 0;
-    /* implicit mapping for family 0 */
-    return;
-  }
-
-  /* For two channels, use the basic RTP mapping if the channels are
-     mapped as left/right. */
-  if (enc->n_channels == 2) {
-    if (MAPS (0, FRONT_LEFT) && MAPS (1, FRONT_RIGHT)) {
-      GST_INFO_OBJECT (enc, "Stereo, canonical mapping");
-      enc->channel_mapping_family = 0;
-      enc->n_stereo_streams = 1;
-      /* The channel mapping is implicit for family 0, that's why we do not
-         attempt to create one for right/left - this will be mapped to the
-         Vorbis mapping below. */
-      return;
-    } else {
-      GST_DEBUG_OBJECT (enc, "Stereo, but not canonical mapping, continuing");
-    }
-  }
-
-  /* For channels between 1 and 8, we use the Vorbis mapping if we can
-     find a permutation that matches it. Mono will have been taken care
-     of earlier, but this code also handles it. Same for left/right stereo.
-     There are two mappings. One maps the input channels to an ordering
-     which has the natural pairs first so they can benefit from the Opus
-     stereo channel coupling, and the other maps this ordering to the
-     Vorbis ordering. */
-  if (enc->n_channels >= 1 && enc->n_channels <= 8) {
-    int c0, c1, c0v, c1v;
-    int mapped;
-    gboolean positions_done[256];
-    static const GstAudioChannelPosition pairs[][2] = {
-      {GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT,
-          GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT},
-      {GST_AUDIO_CHANNEL_POSITION_REAR_LEFT,
-          GST_AUDIO_CHANNEL_POSITION_REAR_RIGHT},
-      {GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT_OF_CENTER,
-          GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT_OF_CENTER},
-      {GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT_OF_CENTER,
-          GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT_OF_CENTER},
-      {GST_AUDIO_CHANNEL_POSITION_SIDE_LEFT,
-          GST_AUDIO_CHANNEL_POSITION_SIDE_RIGHT},
-    };
-    size_t pair;
-
-    GST_DEBUG_OBJECT (enc,
-        "In range for the Vorbis mapping, building channel mapping tables");
-
-    enc->n_stereo_streams = 0;
-    mapped = 0;
-    for (n = 0; n < 256; ++n)
-      positions_done[n] = FALSE;
-
-    /* First, find any natural pairs, and move them to the front */
-    for (pair = 0; pair < G_N_ELEMENTS (pairs); ++pair) {
-      GstAudioChannelPosition p0 = pairs[pair][0];
-      GstAudioChannelPosition p1 = pairs[pair][1];
-      c0 = gst_opus_enc_find_channel_position (enc, info, p0);
-      c1 = gst_opus_enc_find_channel_position (enc, info, p1);
-      if (c0 >= 0 && c1 >= 0) {
-        /* We found a natural pair */
-        GST_DEBUG_OBJECT (enc, "Natural pair '%s/%s' found at %d %d",
-            gst_opus_channel_names[p0], gst_opus_channel_names[p1], c0, c1);
-        /* Find where they map in Vorbis order */
-        c0v = gst_opus_enc_find_channel_position_in_vorbis_order (enc, p0);
-        c1v = gst_opus_enc_find_channel_position_in_vorbis_order (enc, p1);
-        if (c0v < 0 || c1v < 0) {
-          GST_WARNING_OBJECT (enc,
-              "Cannot map channel positions to Vorbis order, using unknown mapping");
-          enc->channel_mapping_family = 255;
-          enc->n_stereo_streams = 0;
-          return;
-        }
-
-        enc->encoding_channel_mapping[mapped] = c0;
-        enc->encoding_channel_mapping[mapped + 1] = c1;
-        enc->decoding_channel_mapping[c0v] = mapped;
-        enc->decoding_channel_mapping[c1v] = mapped + 1;
-        enc->n_stereo_streams++;
-        mapped += 2;
-        positions_done[p0] = positions_done[p1] = TRUE;
-      }
-    }
-
-    /* Now add all other input channels as mono streams */
-    for (n = 0; n < enc->n_channels; ++n) {
-      GstAudioChannelPosition position = GST_AUDIO_INFO_POSITION (info, n);
-
-      /* if we already mapped it while searching for pairs, nothing else
-         needs to be done */
-      if (!positions_done[position]) {
-        int cv;
-        GST_DEBUG_OBJECT (enc, "Channel position %s is not mapped yet, adding",
-            gst_opus_channel_names[position]);
-        cv = gst_opus_enc_find_channel_position_in_vorbis_order (enc, position);
-        if (cv < 0) {
-          GST_WARNING_OBJECT (enc,
-              "Cannot map channel positions to Vorbis order, using unknown mapping");
-          enc->channel_mapping_family = 255;
-          enc->n_stereo_streams = 0;
-          return;
-        }
-        enc->encoding_channel_mapping[mapped] = n;
-        enc->decoding_channel_mapping[cv] = mapped;
-        mapped++;
-      }
-    }
-
-#ifndef GST_DISABLE_GST_DEBUG
-    GST_INFO_OBJECT (enc,
-        "Mapping tables built: %d channels, %d stereo streams", enc->n_channels,
-        enc->n_stereo_streams);
-    gst_opus_common_log_channel_mapping_table (GST_ELEMENT (enc), opusenc_debug,
-        "Encoding mapping table", enc->n_channels,
-        enc->encoding_channel_mapping);
-    gst_opus_common_log_channel_mapping_table (GST_ELEMENT (enc), opusenc_debug,
-        "Decoding mapping table", enc->n_channels,
-        enc->decoding_channel_mapping);
-#endif
-
-    enc->channel_mapping_family = 1;
-    return;
-  }
-
-  /* More than 8 channels, if future mappings are added for those */
-
-  /* For other cases, we use undefined, with the default trivial mapping
-     and all mono streams */
-  GST_WARNING_OBJECT (enc, "Unknown mapping");
-  enc->channel_mapping_family = 255;
-  enc->n_stereo_streams = 0;
-
-#undef MAPS
-}
-
-static gboolean
-gst_opus_enc_set_format (GstAudioEncoder * benc, GstAudioInfo * info)
-{
-  GstOpusEnc *enc;
-
-  enc = GST_OPUS_ENC (benc);
-
-  g_mutex_lock (&enc->property_lock);
-
-  enc->n_channels = GST_AUDIO_INFO_CHANNELS (info);
-  enc->sample_rate = GST_AUDIO_INFO_RATE (info);
-  gst_opus_enc_setup_channel_mappings (enc, info);
-  GST_DEBUG_OBJECT (benc, "Setup with %d channels, %d Hz", enc->n_channels,
-      enc->sample_rate);
-
-  /* handle reconfigure */
-  if (enc->state) {
-    opus_multistream_encoder_destroy (enc->state);
-    enc->state = NULL;
-  }
-  if (!gst_opus_enc_setup (enc)) {
-    g_mutex_unlock (&enc->property_lock);
-    return FALSE;
-  }
-
-  /* update the tags */
-  gst_opus_enc_set_tags (enc);
-
-  enc->frame_samples = gst_opus_enc_get_frame_samples (enc);
-
-  /* feedback to base class */
-  gst_opus_enc_setup_base_class (enc, benc);
-
-  g_mutex_unlock (&enc->property_lock);
-
-  return TRUE;
-}
-
-static gboolean
-gst_opus_enc_setup (GstOpusEnc * enc)
-{
-  int error = OPUS_OK;
-  GstCaps *caps;
-  gboolean ret;
-
-#ifndef GST_DISABLE_GST_DEBUG
-  GST_DEBUG_OBJECT (enc,
-      "setup: %d Hz, %d channels, %d stereo streams, family %d",
-      enc->sample_rate, enc->n_channels, enc->n_stereo_streams,
-      enc->channel_mapping_family);
-  GST_INFO_OBJECT (enc, "Mapping tables built: %d channels, %d stereo streams",
-      enc->n_channels, enc->n_stereo_streams);
-  gst_opus_common_log_channel_mapping_table (GST_ELEMENT (enc), opusenc_debug,
-      "Encoding mapping table", enc->n_channels, enc->encoding_channel_mapping);
-  gst_opus_common_log_channel_mapping_table (GST_ELEMENT (enc), opusenc_debug,
-      "Decoding mapping table", enc->n_channels, enc->decoding_channel_mapping);
-#endif
-
-  enc->state = opus_multistream_encoder_create (enc->sample_rate,
-      enc->n_channels, enc->n_channels - enc->n_stereo_streams,
-      enc->n_stereo_streams, enc->encoding_channel_mapping,
-      enc->audio_type, &error);
-  if (!enc->state || error != OPUS_OK)
-    goto encoder_creation_failed;
-
-  opus_multistream_encoder_ctl (enc->state, OPUS_SET_BITRATE (enc->bitrate), 0);
-  opus_multistream_encoder_ctl (enc->state, OPUS_SET_BANDWIDTH (enc->bandwidth),
-      0);
-  opus_multistream_encoder_ctl (enc->state,
-      OPUS_SET_VBR (enc->bitrate_type != BITRATE_TYPE_CBR), 0);
-  opus_multistream_encoder_ctl (enc->state,
-      OPUS_SET_VBR_CONSTRAINT (enc->bitrate_type ==
-          BITRATE_TYPE_CONSTRAINED_VBR), 0);
-  opus_multistream_encoder_ctl (enc->state,
-      OPUS_SET_COMPLEXITY (enc->complexity), 0);
-  opus_multistream_encoder_ctl (enc->state,
-      OPUS_SET_INBAND_FEC (enc->inband_fec), 0);
-  opus_multistream_encoder_ctl (enc->state, OPUS_SET_DTX (enc->dtx), 0);
-  opus_multistream_encoder_ctl (enc->state,
-      OPUS_SET_PACKET_LOSS_PERC (enc->packet_loss_percentage), 0);
-
-  GST_LOG_OBJECT (enc, "we have frame size %d", enc->frame_size);
-
-  gst_opus_header_create_caps (&caps, NULL, enc->n_channels,
-      enc->n_stereo_streams, enc->sample_rate, enc->channel_mapping_family,
-      enc->decoding_channel_mapping,
-      gst_tag_setter_get_tag_list (GST_TAG_SETTER (enc)));
-
-  /* negotiate with these caps */
-  GST_DEBUG_OBJECT (enc, "here are the caps: %" GST_PTR_FORMAT, caps);
-
-  ret = gst_audio_encoder_set_output_format (GST_AUDIO_ENCODER (enc), caps);
-  gst_caps_unref (caps);
-
-  return ret;
-
-encoder_creation_failed:
-  GST_ERROR_OBJECT (enc, "Encoder creation failed");
-  return FALSE;
-}
-
-static gboolean
-gst_opus_enc_sink_event (GstAudioEncoder * benc, GstEvent * event)
-{
-  GstOpusEnc *enc;
-
-  enc = GST_OPUS_ENC (benc);
-
-  GST_DEBUG_OBJECT (enc, "sink event: %s", GST_EVENT_TYPE_NAME (event));
-  switch (GST_EVENT_TYPE (event)) {
-    case GST_EVENT_TAG:
-    {
-      GstTagList *list;
-      GstTagSetter *setter = GST_TAG_SETTER (enc);
-      const GstTagMergeMode mode = gst_tag_setter_get_tag_merge_mode (setter);
-
-      gst_event_parse_tag (event, &list);
-      gst_tag_setter_merge_tags (setter, list, mode);
-      break;
-    }
-    case GST_EVENT_SEGMENT:
-      enc->encoded_samples = 0;
-      break;
-
-    default:
-      break;
-  }
-
-  return GST_AUDIO_ENCODER_CLASS (parent_class)->sink_event (benc, event);
-}
-
-static GstCaps *
-gst_opus_enc_sink_getcaps (GstAudioEncoder * benc, GstCaps * filter)
-{
-  GstOpusEnc *enc;
-  GstCaps *caps;
-  GstCaps *tcaps;
-  GstCaps *peercaps = NULL;
-  GstCaps *intersect = NULL;
-  guint i;
-  gboolean allow_multistream;
-
-  enc = GST_OPUS_ENC (benc);
-
-  GST_DEBUG_OBJECT (enc, "sink getcaps");
-
-  peercaps = gst_pad_peer_query_caps (GST_AUDIO_ENCODER_SRC_PAD (benc), NULL);
-  if (!peercaps) {
-    GST_DEBUG_OBJECT (benc, "No peercaps, returning template sink caps");
-    return gst_pad_get_pad_template_caps (GST_AUDIO_ENCODER_SINK_PAD (benc));
-  }
-
-  tcaps = gst_pad_get_pad_template_caps (GST_AUDIO_ENCODER_SRC_PAD (benc));
-  intersect = gst_caps_intersect (peercaps, tcaps);
-  gst_caps_unref (tcaps);
-  gst_caps_unref (peercaps);
-
-  if (gst_caps_is_empty (intersect))
-    return intersect;
-
-  allow_multistream = FALSE;
-  for (i = 0; i < gst_caps_get_size (intersect); i++) {
-    GstStructure *s = gst_caps_get_structure (intersect, i);
-    gboolean multistream;
-    if (gst_structure_get_boolean (s, "multistream", &multistream)) {
-      if (multistream) {
-        allow_multistream = TRUE;
-      }
-    } else {
-      allow_multistream = TRUE;
-    }
-  }
-
-  gst_caps_unref (intersect);
-
-  caps = gst_pad_get_pad_template_caps (GST_AUDIO_ENCODER_SINK_PAD (benc));
-  caps = gst_caps_make_writable (caps);
-  if (!allow_multistream) {
-    GValue range = { 0 };
-    g_value_init (&range, GST_TYPE_INT_RANGE);
-    gst_value_set_int_range (&range, 1, 2);
-    for (i = 0; i < gst_caps_get_size (caps); i++) {
-      GstStructure *s = gst_caps_get_structure (caps, i);
-      gst_structure_set_value (s, "channels", &range);
-    }
-    g_value_unset (&range);
-  }
-
-  if (filter) {
-    GstCaps *tmp = gst_caps_intersect_full (caps, filter,
-        GST_CAPS_INTERSECT_FIRST);
-    gst_caps_unref (caps);
-    caps = tmp;
-  }
-
-  GST_DEBUG_OBJECT (enc, "Returning caps: %" GST_PTR_FORMAT, caps);
-  return caps;
-}
-
-static GstFlowReturn
-gst_opus_enc_encode (GstOpusEnc * enc, GstBuffer * buf)
-{
-  guint8 *bdata = NULL, *data, *mdata = NULL;
-  gsize bsize, size;
-  gsize bytes;
-  gint ret = GST_FLOW_OK;
-  GstMapInfo map;
-  GstMapInfo omap;
-  gint outsize;
-  GstBuffer *outbuf;
-  GstSegment *segment;
-  GstClockTime duration;
-
-  guint max_payload_size;
-  gint frame_samples;
-
-  g_mutex_lock (&enc->property_lock);
-
-  bytes = enc->frame_samples * enc->n_channels * 2;
-  max_payload_size = enc->max_payload_size;
-  frame_samples = enc->frame_samples;
-
-  g_mutex_unlock (&enc->property_lock);
-
-  if (G_LIKELY (buf)) {
-    gst_buffer_map (buf, &map, GST_MAP_READ);
-    bdata = map.data;
-    bsize = map.size;
-
-    if (G_UNLIKELY (bsize % bytes)) {
-      GST_DEBUG_OBJECT (enc, "draining; adding silence samples");
-
-      /* If encoding part of a frame, and we have no set stop time on
-       * the output segment, we update the segment stop time to reflect
-       * the last sample. This will let oggmux set the last page's
-       * granpos to tell a decoder the dummy samples should be clipped.
-       */
-      segment = &GST_AUDIO_ENCODER_OUTPUT_SEGMENT (enc);
-      if (!GST_CLOCK_TIME_IS_VALID (segment->stop)) {
-        int input_samples = bsize / (enc->n_channels * 2);
-        GST_DEBUG_OBJECT (enc,
-            "No stop time and partial frame, updating segment");
-        duration =
-            gst_util_uint64_scale (enc->encoded_samples + input_samples,
-            GST_SECOND, enc->sample_rate);
-        segment->stop = segment->start + duration;
-        GST_DEBUG_OBJECT (enc, "new output segment %" GST_SEGMENT_FORMAT,
-            segment);
-        gst_pad_push_event (GST_AUDIO_ENCODER_SRC_PAD (enc),
-            gst_event_new_segment (segment));
-      }
-
-      size = ((bsize / bytes) + 1) * bytes;
-      mdata = g_malloc0 (size);
-      memcpy (mdata, bdata, bsize);
-      data = mdata;
-    } else {
-      data = bdata;
-      size = bsize;
-    }
-  } else {
-    GST_DEBUG_OBJECT (enc, "nothing to drain");
-    goto done;
-  }
-
-  g_assert (size == bytes);
-
-  outbuf =
-      gst_audio_encoder_allocate_output_buffer (GST_AUDIO_ENCODER (enc),
-      max_payload_size * enc->n_channels);
-  if (!outbuf)
-    goto done;
-
-  GST_DEBUG_OBJECT (enc, "encoding %d samples (%d bytes)",
-      frame_samples, (int) bytes);
-
-  gst_buffer_map (outbuf, &omap, GST_MAP_WRITE);
-
-  GST_DEBUG_OBJECT (enc, "encoding %d samples (%d bytes)",
-      frame_samples, (int) bytes);
-
-  outsize =
-      opus_multistream_encode (enc->state, (const gint16 *) data,
-      frame_samples, omap.data, max_payload_size * enc->n_channels);
-
-  gst_buffer_unmap (outbuf, &omap);
-
-  if (outsize < 0) {
-    GST_ERROR_OBJECT (enc, "Encoding failed: %d", outsize);
-    ret = GST_FLOW_ERROR;
-    goto done;
-  } else if (outsize > max_payload_size) {
-    GST_WARNING_OBJECT (enc,
-        "Encoded size %d is higher than max payload size (%d bytes)",
-        outsize, max_payload_size);
-    ret = GST_FLOW_ERROR;
-    goto done;
-  }
-
-  GST_DEBUG_OBJECT (enc, "Output packet is %u bytes", outsize);
-  gst_buffer_set_size (outbuf, outsize);
-
-  ret =
-      gst_audio_encoder_finish_frame (GST_AUDIO_ENCODER (enc), outbuf,
-      frame_samples);
-  enc->encoded_samples += frame_samples;
-
-done:
-
-  if (bdata)
-    gst_buffer_unmap (buf, &map);
-
-  if (mdata)
-    g_free (mdata);
-
-  return ret;
-}
-
-static GstFlowReturn
-gst_opus_enc_handle_frame (GstAudioEncoder * benc, GstBuffer * buf)
-{
-  GstOpusEnc *enc;
-  GstFlowReturn ret = GST_FLOW_OK;
-
-  enc = GST_OPUS_ENC (benc);
-  GST_DEBUG_OBJECT (enc, "handle_frame");
-  GST_DEBUG_OBJECT (enc, "received buffer %p of %" G_GSIZE_FORMAT " bytes", buf,
-      buf ? gst_buffer_get_size (buf) : 0);
-
-  ret = gst_opus_enc_encode (enc, buf);
-
-  return ret;
-}
-
-static void
-gst_opus_enc_get_property (GObject * object, guint prop_id, GValue * value,
-    GParamSpec * pspec)
-{
-  GstOpusEnc *enc;
-
-  enc = GST_OPUS_ENC (object);
-
-  g_mutex_lock (&enc->property_lock);
-
-  switch (prop_id) {
-    case PROP_AUDIO:
-      g_value_set_boolean (value,
-          enc->audio_type == OPUS_APPLICATION_AUDIO ? TRUE : FALSE);
-      break;
-    case PROP_AUDIO_TYPE:
-      g_value_set_enum (value, enc->audio_type);
-      break;
-    case PROP_BITRATE:
-      g_value_set_int (value, enc->bitrate);
-      break;
-    case PROP_BANDWIDTH:
-      g_value_set_enum (value, enc->bandwidth);
-      break;
-    case PROP_FRAME_SIZE:
-      g_value_set_enum (value, enc->frame_size);
-      break;
-    case PROP_CBR:
-      GST_WARNING_OBJECT (enc,
-          "cbr property is deprecated; use bitrate-type instead");
-      g_value_set_boolean (value, enc->bitrate_type == BITRATE_TYPE_CBR);
-      break;
-    case PROP_CONSTRAINED_VBR:
-      GST_WARNING_OBJECT (enc,
-          "constrained-vbr property is deprecated; use bitrate-type instead");
-      g_value_set_boolean (value,
-          enc->bitrate_type == BITRATE_TYPE_CONSTRAINED_VBR);
-      break;
-    case PROP_BITRATE_TYPE:
-      g_value_set_enum (value, enc->bitrate_type);
-      break;
-    case PROP_COMPLEXITY:
-      g_value_set_int (value, enc->complexity);
-      break;
-    case PROP_INBAND_FEC:
-      g_value_set_boolean (value, enc->inband_fec);
-      break;
-    case PROP_DTX:
-      g_value_set_boolean (value, enc->dtx);
-      break;
-    case PROP_PACKET_LOSS_PERCENT:
-      g_value_set_int (value, enc->packet_loss_percentage);
-      break;
-    case PROP_MAX_PAYLOAD_SIZE:
-      g_value_set_uint (value, enc->max_payload_size);
-      break;
-    default:
-      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
-      break;
-  }
-
-  g_mutex_unlock (&enc->property_lock);
-}
-
-static void
-gst_opus_enc_set_property (GObject * object, guint prop_id,
-    const GValue * value, GParamSpec * pspec)
-{
-  GstOpusEnc *enc;
-
-  enc = GST_OPUS_ENC (object);
-
-#define GST_OPUS_UPDATE_PROPERTY(prop,type,ctl) do { \
-  g_mutex_lock (&enc->property_lock); \
-  enc->prop = g_value_get_##type (value); \
-  if (enc->state) { \
-    opus_multistream_encoder_ctl (enc->state, OPUS_SET_##ctl (enc->prop)); \
-  } \
-  g_mutex_unlock (&enc->property_lock); \
-} while(0)
-
-  switch (prop_id) {
-    case PROP_AUDIO:
-      enc->audio_type =
-          g_value_get_boolean (value) ? OPUS_APPLICATION_AUDIO :
-          OPUS_APPLICATION_VOIP;
-      break;
-    case PROP_AUDIO_TYPE:
-      enc->audio_type = g_value_get_enum (value);
-      break;
-    case PROP_BITRATE:
-      GST_OPUS_UPDATE_PROPERTY (bitrate, int, BITRATE);
-      break;
-    case PROP_BANDWIDTH:
-      GST_OPUS_UPDATE_PROPERTY (bandwidth, enum, BANDWIDTH);
-      break;
-    case PROP_FRAME_SIZE:
-      g_mutex_lock (&enc->property_lock);
-      enc->frame_size = g_value_get_enum (value);
-      enc->frame_samples = gst_opus_enc_get_frame_samples (enc);
-      gst_opus_enc_setup_base_class (enc, GST_AUDIO_ENCODER (enc));
-      g_mutex_unlock (&enc->property_lock);
-      break;
-    case PROP_CBR:
-      GST_WARNING_OBJECT (enc,
-          "cbr property is deprecated; use bitrate-type instead");
-      g_warning ("cbr property is deprecated; use bitrate-type instead");
-      g_mutex_lock (&enc->property_lock);
-      enc->bitrate_type = BITRATE_TYPE_CBR;
-      if (enc->state) {
-        opus_multistream_encoder_ctl (enc->state, OPUS_SET_VBR (FALSE));
-        opus_multistream_encoder_ctl (enc->state,
-            OPUS_SET_VBR_CONSTRAINT (FALSE), 0);
-      }
-      g_mutex_unlock (&enc->property_lock);
-      break;
-    case PROP_CONSTRAINED_VBR:
-      GST_WARNING_OBJECT (enc,
-          "constrained-vbr property is deprecated; use bitrate-type instead");
-      g_warning
-          ("constrained-vbr property is deprecated; use bitrate-type instead");
-      g_mutex_lock (&enc->property_lock);
-      enc->bitrate_type = BITRATE_TYPE_CONSTRAINED_VBR;
-      if (enc->state) {
-        opus_multistream_encoder_ctl (enc->state, OPUS_SET_VBR (TRUE));
-        opus_multistream_encoder_ctl (enc->state,
-            OPUS_SET_VBR_CONSTRAINT (TRUE), 0);
-      }
-      g_mutex_unlock (&enc->property_lock);
-      break;
-    case PROP_BITRATE_TYPE:
-      /* this one has an opposite meaning to the opus ctl... */
-      g_mutex_lock (&enc->property_lock);
-      enc->bitrate_type = g_value_get_enum (value);
-      if (enc->state) {
-        opus_multistream_encoder_ctl (enc->state,
-            OPUS_SET_VBR (enc->bitrate_type != BITRATE_TYPE_CBR));
-        opus_multistream_encoder_ctl (enc->state,
-            OPUS_SET_VBR_CONSTRAINT (enc->bitrate_type ==
-                BITRATE_TYPE_CONSTRAINED_VBR), 0);
-      }
-      g_mutex_unlock (&enc->property_lock);
-      break;
-    case PROP_COMPLEXITY:
-      GST_OPUS_UPDATE_PROPERTY (complexity, int, COMPLEXITY);
-      break;
-    case PROP_INBAND_FEC:
-      GST_OPUS_UPDATE_PROPERTY (inband_fec, boolean, INBAND_FEC);
-      break;
-    case PROP_DTX:
-      GST_OPUS_UPDATE_PROPERTY (dtx, boolean, DTX);
-      break;
-    case PROP_PACKET_LOSS_PERCENT:
-      GST_OPUS_UPDATE_PROPERTY (packet_loss_percentage, int, PACKET_LOSS_PERC);
-      break;
-    case PROP_MAX_PAYLOAD_SIZE:
-      g_mutex_lock (&enc->property_lock);
-      enc->max_payload_size = g_value_get_uint (value);
-      g_mutex_unlock (&enc->property_lock);
-      break;
-    default:
-      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
-      break;
-  }
-
-#undef GST_OPUS_UPDATE_PROPERTY
-
-}
diff --git a/ext/opus/gstopusenc.h b/ext/opus/gstopusenc.h
deleted file mode 100644
index 43eaac8..0000000
--- a/ext/opus/gstopusenc.h
+++ /dev/null
@@ -1,101 +0,0 @@
-/* GStreamer Opus Encoder
- * Copyright (C) <1999> Erik Walthinsen <omega@cse.ogi.edu>
- * Copyright (C) <2008> Sebastian Dröge <sebastian.droege@collabora.co.uk>
- * Copyright (C) <2011-2012> Vincent Penquerc'h <vincent.penquerch@collabora.co.uk>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-
-#ifndef __GST_OPUS_ENC_H__
-#define __GST_OPUS_ENC_H__
-
-
-#include <gst/gst.h>
-#include <gst/audio/gstaudioencoder.h>
-
-#include <opus_multistream.h>
-
-G_BEGIN_DECLS
-
-#define GST_TYPE_OPUS_ENC \
-  (gst_opus_enc_get_type())
-#define GST_OPUS_ENC(obj) \
-  (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_OPUS_ENC,GstOpusEnc))
-#define GST_OPUS_ENC_CLASS(klass) \
-  (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_OPUS_ENC,GstOpusEncClass))
-#define GST_IS_OPUS_ENC(obj) \
-  (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_OPUS_ENC))
-#define GST_IS_OPUS_ENC_CLASS(klass) \
-  (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_OPUS_ENC))
-
-#define MAX_FRAME_SIZE 2000*2
-#define MAX_FRAME_BYTES 2000
-
-typedef enum
-{
-  BITRATE_TYPE_CBR,
-  BITRATE_TYPE_VBR,
-  BITRATE_TYPE_CONSTRAINED_VBR,
-} GstOpusEncBitrateType;
-
-typedef struct _GstOpusEnc GstOpusEnc;
-typedef struct _GstOpusEncClass GstOpusEncClass;
-
-struct _GstOpusEnc {
-  GstAudioEncoder       element;
-
-  OpusMSEncoder        *state;
-
-  /* Locks those properties which may be changed at play time */
-  GMutex                property_lock;
-
-  /* properties */
-  gint                  audio_type;
-  gint                  bitrate;
-  gint                  bandwidth;
-  gint                  frame_size;
-  GstOpusEncBitrateType bitrate_type;
-  gint                  complexity;
-  gboolean              inband_fec;
-  gboolean              dtx;
-  gint                  packet_loss_percentage;
-  guint                 max_payload_size;
-
-  gint                  frame_samples;
-  gint                  n_channels;
-  gint                  sample_rate;
-
-  guint64               encoded_samples;
-
-  guint8                channel_mapping_family;
-  guint8                encoding_channel_mapping[256];
-  guint8                decoding_channel_mapping[256];
-  guint8                n_stereo_streams;
-};
-
-struct _GstOpusEncClass {
-  GstAudioEncoderClass parent_class;
-
-  /* signals */
-  void (*frame_encoded) (GstElement *element);
-};
-
-GType gst_opus_enc_get_type (void);
-
-G_END_DECLS
-
-#endif /* __GST_OPUS_ENC_H__ */
diff --git a/ext/opus/gstopusheader.c b/ext/opus/gstopusheader.c
index 1521c1c..dcc8589 100644
--- a/ext/opus/gstopusheader.c
+++ b/ext/opus/gstopusheader.c
@@ -26,219 +26,6 @@
 #include <gst/base/gstbytewriter.h>
 #include "gstopusheader.h"
 
-static GstBuffer *
-gst_opus_enc_create_id_buffer (gint nchannels, gint n_stereo_streams,
-    gint sample_rate, guint8 channel_mapping_family,
-    const guint8 * channel_mapping)
-{
-  GstBuffer *buffer;
-  GstByteWriter bw;
-  gboolean hdl = TRUE;
-
-  g_return_val_if_fail (nchannels > 0 && nchannels < 256, NULL);
-  g_return_val_if_fail (n_stereo_streams >= 0, NULL);
-  g_return_val_if_fail (n_stereo_streams <= nchannels - n_stereo_streams, NULL);
-
-  gst_byte_writer_init (&bw);
-
-  /* See http://wiki.xiph.org/OggOpus */
-  hdl &= gst_byte_writer_put_data (&bw, (const guint8 *) "OpusHead", 8);
-  hdl &= gst_byte_writer_put_uint8 (&bw, 0x01); /* version number */
-  hdl &= gst_byte_writer_put_uint8 (&bw, nchannels);
-  hdl &= gst_byte_writer_put_uint16_le (&bw, 0);        /* pre-skip */
-  hdl &= gst_byte_writer_put_uint32_le (&bw, sample_rate);
-  hdl &= gst_byte_writer_put_uint16_le (&bw, 0);        /* output gain */
-  hdl &= gst_byte_writer_put_uint8 (&bw, channel_mapping_family);
-  if (channel_mapping_family > 0) {
-    hdl &= gst_byte_writer_put_uint8 (&bw, nchannels - n_stereo_streams);
-    hdl &= gst_byte_writer_put_uint8 (&bw, n_stereo_streams);
-    hdl &= gst_byte_writer_put_data (&bw, channel_mapping, nchannels);
-  }
-
-  if (!hdl)
-    GST_WARNING ("Error creating header");
-
-  buffer = gst_byte_writer_reset_and_get_buffer (&bw);
-
-  GST_BUFFER_OFFSET (buffer) = 0;
-  GST_BUFFER_OFFSET_END (buffer) = 0;
-
-  return buffer;
-}
-
-static GstBuffer *
-gst_opus_enc_create_metadata_buffer (const GstTagList * tags)
-{
-  GstTagList *empty_tags = NULL;
-  GstBuffer *comments = NULL;
-
-  GST_DEBUG ("tags = %" GST_PTR_FORMAT, tags);
-
-  if (tags == NULL) {
-    /* FIXME: better fix chain of callers to not write metadata at all,
-     * if there is none */
-    empty_tags = gst_tag_list_new_empty ();
-    tags = empty_tags;
-  }
-  comments =
-      gst_tag_list_to_vorbiscomment_buffer (tags, (const guint8 *) "OpusTags",
-      8, "Encoded with GStreamer Opusenc");
-
-  GST_BUFFER_OFFSET (comments) = 0;
-  GST_BUFFER_OFFSET_END (comments) = 0;
-
-  if (empty_tags)
-    gst_tag_list_unref (empty_tags);
-
-  return comments;
-}
-
-/*
- * (really really) FIXME: move into core (dixit tpm)
- */
-/*
- * _gst_caps_set_buffer_array:
- * @caps: (transfer full): a #GstCaps
- * @field: field in caps to set
- * @buf: header buffers
- *
- * Adds given buffers to an array of buffers set as the given @field
- * on the given @caps.  List of buffer arguments must be NULL-terminated.
- *
- * Returns: (transfer full): input caps with a streamheader field added, or NULL
- *     if some error occurred
- */
-static GstCaps *
-_gst_caps_set_buffer_array (GstCaps * caps, const gchar * field,
-    GstBuffer * buf, ...)
-{
-  GstStructure *structure = NULL;
-  va_list va;
-  GValue array = { 0 };
-  GValue value = { 0 };
-
-  g_return_val_if_fail (caps != NULL, NULL);
-  g_return_val_if_fail (gst_caps_is_fixed (caps), NULL);
-  g_return_val_if_fail (field != NULL, NULL);
-
-  caps = gst_caps_make_writable (caps);
-  structure = gst_caps_get_structure (caps, 0);
-
-  g_value_init (&array, GST_TYPE_ARRAY);
-
-  va_start (va, buf);
-  /* put buffers in a fixed list */
-  while (buf) {
-    g_assert (gst_buffer_is_writable (buf));
-
-    /* mark buffer */
-    GST_BUFFER_FLAG_SET (buf, GST_BUFFER_FLAG_HEADER);
-
-    g_value_init (&value, GST_TYPE_BUFFER);
-    buf = gst_buffer_copy (buf);
-    GST_BUFFER_FLAG_SET (buf, GST_BUFFER_FLAG_HEADER);
-    gst_value_set_buffer (&value, buf);
-    gst_buffer_unref (buf);
-    gst_value_array_append_value (&array, &value);
-    g_value_unset (&value);
-
-    buf = va_arg (va, GstBuffer *);
-  }
-  va_end (va);
-
-  gst_structure_set_value (structure, field, &array);
-  g_value_unset (&array);
-
-  return caps;
-}
-
-void
-gst_opus_header_create_caps_from_headers (GstCaps ** caps, GSList ** headers,
-    GstBuffer * buf1, GstBuffer * buf2)
-{
-  int n_streams, family;
-  gint channels, rate;
-  gboolean multistream;
-  GstMapInfo map;
-  guint8 *data;
-
-  g_return_if_fail (caps);
-  g_return_if_fail (!headers || !*headers);
-  g_return_if_fail (gst_buffer_get_size (buf1) >= 19);
-
-  gst_buffer_map (buf1, &map, GST_MAP_READ);
-  data = map.data;
-
-  channels = data[9];
-  rate = GST_READ_UINT32_LE (data + 12);
-
-  /* work out the number of streams */
-  family = data[18];
-  if (family == 0) {
-    n_streams = 1;
-  } else {
-    /* only included in the header for family > 0 */
-    if (map.size >= 20)
-      n_streams = data[19];
-    else {
-      g_warning ("family > 0 but header buffer size < 20");
-      gst_buffer_unmap (buf1, &map);
-      return;
-    }
-  }
-
-  /* TODO: should probably also put the channel mapping into the caps too once
-   * we actually support multi channel, and pre-skip and other fields */
-
-  gst_buffer_unmap (buf1, &map);
-
-  /* mark and put on caps */
-  multistream = n_streams > 1;
-  *caps = gst_caps_new_simple ("audio/x-opus",
-      "multistream", G_TYPE_BOOLEAN, multistream,
-      "channels", G_TYPE_INT, channels, NULL);
-
-  if (rate > 0) {
-    gst_caps_set_simple (*caps, "rate", G_TYPE_INT, rate, NULL);
-  }
-
-  *caps = _gst_caps_set_buffer_array (*caps, "streamheader", buf1, buf2, NULL);
-
-  if (headers) {
-    *headers = g_slist_prepend (*headers, gst_buffer_ref (buf2));
-    *headers = g_slist_prepend (*headers, gst_buffer_ref (buf1));
-  }
-}
-
-void
-gst_opus_header_create_caps (GstCaps ** caps, GSList ** headers, gint nchannels,
-    gint n_stereo_streams, gint sample_rate, guint8 channel_mapping_family,
-    const guint8 * channel_mapping, const GstTagList * tags)
-{
-  GstBuffer *buf1, *buf2;
-
-  g_return_if_fail (caps);
-  g_return_if_fail (!headers || !*headers);
-  g_return_if_fail (nchannels > 0);
-  g_return_if_fail (sample_rate >= 0);  /* 0 -> unset */
-  g_return_if_fail (channel_mapping_family == 0 || channel_mapping);
-
-  /* Opus streams in Ogg begin with two headers; the initial header (with
-     most of the codec setup parameters) which is mandated by the Ogg
-     bitstream spec.  The second header holds any comment fields. */
-
-  /* create header buffers */
-  buf1 =
-      gst_opus_enc_create_id_buffer (nchannels, n_stereo_streams, sample_rate,
-      channel_mapping_family, channel_mapping);
-  buf2 = gst_opus_enc_create_metadata_buffer (tags);
-
-  gst_opus_header_create_caps_from_headers (caps, headers, buf1, buf2);
-
-  gst_buffer_unref (buf2);
-  gst_buffer_unref (buf1);
-}
-
 gboolean
 gst_opus_header_is_header (GstBuffer * buf, const char *magic, guint magic_size)
 {
diff --git a/ext/opus/gstopusheader.h b/ext/opus/gstopusheader.h
index 14c88c0..2a91c03 100644
--- a/ext/opus/gstopusheader.h
+++ b/ext/opus/gstopusheader.h
@@ -26,12 +26,6 @@
 
 G_BEGIN_DECLS
 
-extern void gst_opus_header_create_caps_from_headers (GstCaps **caps, GSList **headers,
-    GstBuffer *id_header, GstBuffer *comment_header);
-extern void gst_opus_header_create_caps (GstCaps **caps, GSList **headers,
-    gint nchannels, gint n_stereo_streams, gint sample_rate,
-    guint8 channel_mapping_family, const guint8 *channel_mapping,
-    const GstTagList *tags);
 extern gboolean gst_opus_header_is_header (GstBuffer * buf,
     const char *magic, guint magic_size);
 extern gboolean gst_opus_header_is_id_header (GstBuffer * buf);
diff --git a/ext/opus/gstopusparse.c b/ext/opus/gstopusparse.c
index 71f0639..ea3252e 100644
--- a/ext/opus/gstopusparse.c
+++ b/ext/opus/gstopusparse.c
@@ -29,7 +29,7 @@
  * <refsect2>
  * <title>Example pipelines</title>
  * |[
- * gst-launch -v filesrc location=opusdata ! opusparse ! opusdec ! audioconvert ! audioresample ! alsasink
+ * gst-launch-1.0 -v filesrc location=opusdata ! opusparse ! opusdec ! audioconvert ! audioresample ! alsasink
  * ]| Decode and plays an unmuxed Opus file.
  * </refsect2>
  */
@@ -43,6 +43,9 @@
 #include "gstopusheader.h"
 #include "gstopusparse.h"
 
+#include <gst/audio/audio.h>
+#include <gst/pbutils/pbutils.h>
+
 GST_DEBUG_CATEGORY_STATIC (opusparse_debug);
 #define GST_CAT_DEFAULT opusparse_debug
 
@@ -101,6 +104,8 @@
 gst_opus_parse_init (GstOpusParse * parse)
 {
   parse->header_sent = FALSE;
+  parse->got_headers = FALSE;
+  parse->pre_skip = 0;
 }
 
 static gboolean
@@ -109,6 +114,8 @@
   GstOpusParse *parse = GST_OPUS_PARSE (base);
 
   parse->header_sent = FALSE;
+  parse->got_headers = FALSE;
+  parse->pre_skip = 0;
   parse->next_ts = 0;
 
   return TRUE;
@@ -119,11 +126,9 @@
 {
   GstOpusParse *parse = GST_OPUS_PARSE (base);
 
-  g_slist_foreach (parse->headers, (GFunc) gst_buffer_unref, NULL);
-  g_slist_free (parse->headers);
-  parse->headers = NULL;
-
   parse->header_sent = FALSE;
+  parse->got_headers = FALSE;
+  parse->pre_skip = 0;
 
   return TRUE;
 }
@@ -195,7 +200,6 @@
       }
 
       packet_offset = 8;
-      data += packet_offset;
 
       /* for ad hoc framing, heed the framing, so we eat any padding */
       payload_offset = packet_size;
@@ -241,7 +245,7 @@
     return GST_FLOW_OK;
 
   /* FIXME some day ... should not mess with buffer itself */
-  if (!parse->header_sent) {
+  if (!parse->got_headers) {
     gst_buffer_replace (&frame->buffer,
         gst_buffer_copy_region (frame->buffer, GST_BUFFER_COPY_ALL, 0, size));
     gst_buffer_unref (frame->buffer);
@@ -322,15 +326,18 @@
   GstOpusParse *parse;
   gboolean is_idheader, is_commentheader;
   GstMapInfo map;
+  GstAudioClippingMeta *cmeta =
+      gst_buffer_get_audio_clipping_meta (frame->buffer);
 
   parse = GST_OPUS_PARSE (base);
 
+  g_assert (!cmeta || cmeta->format == GST_FORMAT_DEFAULT);
+
   is_idheader = gst_opus_header_is_id_header (frame->buffer);
   is_commentheader = gst_opus_header_is_comment_header (frame->buffer);
 
-  if (!parse->header_sent) {
+  if (!parse->got_headers || !parse->header_sent) {
     GstCaps *caps;
-    guint8 channels;
 
     /* Opus streams can decode to 1 or 2 channels, so use the header
        value if we have one, or 2 otherwise */
@@ -344,31 +351,77 @@
       return GST_BASE_PARSE_FLOW_DROPPED;
     }
 
-    g_slist_foreach (parse->headers, (GFunc) gst_buffer_unref, NULL);
-    g_slist_free (parse->headers);
-    parse->headers = NULL;
+    parse->got_headers = TRUE;
 
-    if (parse->id_header && parse->comment_header) {
-      gst_opus_header_create_caps_from_headers (&caps, &parse->headers,
-          parse->id_header, parse->comment_header);
-    } else {
-      guint8 channel_mapping_family, channel_mapping[256];
-      GST_INFO_OBJECT (parse,
-          "No headers, blindly setting up canonical stereo");
-      channels = 2;
-      channel_mapping_family = 0;
-      channel_mapping[0] = 0;
-      channel_mapping[1] = 1;
-      gst_opus_header_create_caps (&caps, &parse->headers, channels, 1, 48000,
-          channel_mapping_family, channel_mapping, NULL);
+    if (cmeta && cmeta->start) {
+      parse->pre_skip += cmeta->start;
+
+      gst_buffer_map (frame->buffer, &map, GST_MAP_READ);
+      duration = packet_duration_opus (map.data, map.size);
+      gst_buffer_unmap (frame->buffer, &map);
+
+      /* Queue frame for later once we know all initial padding */
+      if (duration == cmeta->start) {
+        frame->flags |= GST_BASE_PARSE_FRAME_FLAG_QUEUE;
+      }
     }
 
-    gst_buffer_replace (&parse->id_header, NULL);
-    gst_buffer_replace (&parse->comment_header, NULL);
+    if (!(frame->flags & GST_BASE_PARSE_FRAME_FLAG_QUEUE)) {
+      if (FALSE && parse->id_header && parse->comment_header) {
+        guint16 pre_skip;
 
-    gst_pad_set_caps (GST_BASE_PARSE_SRC_PAD (parse), caps);
-    gst_caps_unref (caps);
-    parse->header_sent = TRUE;
+        gst_buffer_map (parse->id_header, &map, GST_MAP_READWRITE);
+        pre_skip = GST_READ_UINT16_LE (map.data + 10);
+        if (pre_skip != parse->pre_skip) {
+          GST_DEBUG_OBJECT (parse,
+              "Fixing up pre-skip %u -> %" G_GUINT64_FORMAT, pre_skip,
+              parse->pre_skip);
+          GST_WRITE_UINT16_LE (map.data + 10, parse->pre_skip);
+        }
+        gst_buffer_unmap (parse->id_header, &map);
+
+        caps =
+            gst_codec_utils_opus_create_caps_from_header (parse->id_header,
+            parse->comment_header);
+      } else {
+        GstCaps *sink_caps;
+        guint32 sample_rate = 48000;
+        guint8 n_channels, n_streams, n_stereo_streams, channel_mapping_family;
+        guint8 channel_mapping[256];
+        GstBuffer *id_header;
+
+        sink_caps = gst_pad_get_current_caps (GST_BASE_PARSE_SINK_PAD (parse));
+        if (!sink_caps
+            || !gst_codec_utils_opus_parse_caps (sink_caps, &sample_rate,
+                &n_channels, &channel_mapping_family, &n_streams,
+                &n_stereo_streams, channel_mapping)) {
+          GST_INFO_OBJECT (parse,
+              "No headers and no caps, blindly setting up canonical stereo");
+          n_channels = 2;
+          n_streams = 1;
+          n_stereo_streams = 1;
+          channel_mapping_family = 0;
+          channel_mapping[0] = 0;
+          channel_mapping[1] = 1;
+        }
+        if (sink_caps)
+          gst_caps_unref (sink_caps);
+
+        id_header =
+            gst_codec_utils_opus_create_header (sample_rate, n_channels,
+            channel_mapping_family, n_streams, n_stereo_streams,
+            channel_mapping, parse->pre_skip, 0);
+        caps = gst_codec_utils_opus_create_caps_from_header (id_header, NULL);
+        gst_buffer_unref (id_header);
+      }
+
+      gst_buffer_replace (&parse->id_header, NULL);
+      gst_buffer_replace (&parse->comment_header, NULL);
+
+      gst_pad_set_caps (GST_BASE_PARSE_SRC_PAD (parse), caps);
+      gst_caps_unref (caps);
+      parse->header_sent = TRUE;
+    }
   }
 
   GST_BUFFER_TIMESTAMP (frame->buffer) = parse->next_ts;
diff --git a/ext/opus/gstopusparse.h b/ext/opus/gstopusparse.h
index 6d120cc..6379de0 100644
--- a/ext/opus/gstopusparse.h
+++ b/ext/opus/gstopusparse.h
@@ -44,8 +44,8 @@
 struct _GstOpusParse {
   GstBaseParse       element;
 
-  gboolean header_sent;
-  GSList *headers;
+  gboolean got_headers, header_sent;
+  guint64 pre_skip;
   GstClockTime next_ts;
   GstBuffer *id_header;
   GstBuffer *comment_header;
diff --git a/ext/opus/gstrtpopusdepay.c b/ext/opus/gstrtpopusdepay.c
deleted file mode 100644
index abb7218..0000000
--- a/ext/opus/gstrtpopusdepay.c
+++ /dev/null
@@ -1,175 +0,0 @@
-/*
- * Opus Depayloader Gst Element
- *
- *   @author: Danilo Cesar Lemes de Paula <danilo.cesar@collabora.co.uk>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-#ifdef HAVE_CONFIG_H
-#  include "config.h"
-#endif
-
-#include <string.h>
-#include <stdlib.h>
-#include <gst/rtp/gstrtpbuffer.h>
-#include <gst/audio/audio.h>
-#include "gstrtpopusdepay.h"
-
-GST_DEBUG_CATEGORY_STATIC (rtpopusdepay_debug);
-#define GST_CAT_DEFAULT (rtpopusdepay_debug)
-
-static GstStaticPadTemplate gst_rtp_opus_depay_sink_template =
-GST_STATIC_PAD_TEMPLATE ("sink",
-    GST_PAD_SINK,
-    GST_PAD_ALWAYS,
-    GST_STATIC_CAPS ("application/x-rtp, "
-        "media = (string) \"audio\", "
-        "payload = (int) " GST_RTP_PAYLOAD_DYNAMIC_STRING ","
-        "clock-rate = (int) 48000, "
-        "encoding-name = (string) { \"OPUS\", \"X-GST-OPUS-DRAFT-SPITTKA-00\" }")
-    );
-
-static GstStaticPadTemplate gst_rtp_opus_depay_src_template =
-GST_STATIC_PAD_TEMPLATE ("src",
-    GST_PAD_SRC,
-    GST_PAD_ALWAYS,
-    GST_STATIC_CAPS ("audio/x-opus, multistream = (boolean) FALSE")
-    );
-
-static GstBuffer *gst_rtp_opus_depay_process (GstRTPBaseDepayload * depayload,
-    GstBuffer * buf);
-static gboolean gst_rtp_opus_depay_setcaps (GstRTPBaseDepayload * depayload,
-    GstCaps * caps);
-
-G_DEFINE_TYPE (GstRTPOpusDepay, gst_rtp_opus_depay,
-    GST_TYPE_RTP_BASE_DEPAYLOAD);
-
-static void
-gst_rtp_opus_depay_class_init (GstRTPOpusDepayClass * klass)
-{
-  GstRTPBaseDepayloadClass *gstbasertpdepayload_class;
-  GstElementClass *element_class;
-
-  element_class = GST_ELEMENT_CLASS (klass);
-  gstbasertpdepayload_class = (GstRTPBaseDepayloadClass *) klass;
-
-  gst_element_class_add_pad_template (element_class,
-      gst_static_pad_template_get (&gst_rtp_opus_depay_src_template));
-  gst_element_class_add_pad_template (element_class,
-      gst_static_pad_template_get (&gst_rtp_opus_depay_sink_template));
-  gst_element_class_set_static_metadata (element_class,
-      "RTP Opus packet depayloader", "Codec/Depayloader/Network/RTP",
-      "Extracts Opus audio from RTP packets",
-      "Danilo Cesar Lemes de Paula <danilo.cesar@collabora.co.uk>");
-
-  gstbasertpdepayload_class->process = gst_rtp_opus_depay_process;
-  gstbasertpdepayload_class->set_caps = gst_rtp_opus_depay_setcaps;
-
-  GST_DEBUG_CATEGORY_INIT (rtpopusdepay_debug, "rtpopusdepay", 0,
-      "Opus RTP Depayloader");
-}
-
-static void
-gst_rtp_opus_depay_init (GstRTPOpusDepay * rtpopusdepay)
-{
-
-}
-
-static gboolean
-gst_rtp_opus_depay_setcaps (GstRTPBaseDepayload * depayload, GstCaps * caps)
-{
-  GstCaps *srccaps;
-  GstStructure *s;
-  gboolean ret;
-  const gchar *sprop_stereo, *sprop_maxcapturerate;
-
-  srccaps =
-      gst_caps_new_simple ("audio/x-opus", "multistream", G_TYPE_BOOLEAN, FALSE,
-      NULL);
-
-  s = gst_caps_get_structure (caps, 0);
-  if ((sprop_stereo = gst_structure_get_string (s, "sprop-stereo"))) {
-    if (strcmp (sprop_stereo, "0") == 0)
-      gst_caps_set_simple (srccaps, "channels", G_TYPE_INT, 1, NULL);
-    else if (strcmp (sprop_stereo, "1") == 0)
-      gst_caps_set_simple (srccaps, "channels", G_TYPE_INT, 2, NULL);
-    else
-      GST_WARNING_OBJECT (depayload, "Unknown sprop-stereo value '%s'",
-          sprop_stereo);
-  }
-
-  if ((sprop_maxcapturerate =
-          gst_structure_get_string (s, "sprop-maxcapturerate"))) {
-    gulong rate;
-    gchar *tailptr;
-
-    rate = strtoul (sprop_maxcapturerate, &tailptr, 10);
-    if (rate > INT_MAX || *tailptr != '\0') {
-      GST_WARNING_OBJECT (depayload,
-          "Failed to parse sprop-maxcapturerate value '%s'",
-          sprop_maxcapturerate);
-    } else {
-      gst_caps_set_simple (srccaps, "rate", G_TYPE_INT, rate, NULL);
-    }
-  }
-
-  ret = gst_pad_set_caps (GST_RTP_BASE_DEPAYLOAD_SRCPAD (depayload), srccaps);
-
-  GST_DEBUG_OBJECT (depayload,
-      "set caps on source: %" GST_PTR_FORMAT " (ret=%d)", srccaps, ret);
-  gst_caps_unref (srccaps);
-
-  depayload->clock_rate = 48000;
-
-  return ret;
-}
-
-static gboolean
-foreach_metadata (GstBuffer * inbuf, GstMeta ** meta, gpointer user_data)
-{
-  GstRTPOpusDepay *depay = user_data;
-  const GstMetaInfo *info = (*meta)->info;
-  const gchar *const *tags = gst_meta_api_type_get_tags (info->api);
-
-  if (!tags || (g_strv_length ((gchar **) tags) == 1
-          && gst_meta_api_type_has_tag (info->api,
-              g_quark_from_string (GST_META_TAG_AUDIO_STR)))) {
-    GST_DEBUG_OBJECT (depay, "keeping metadata %s", g_type_name (info->api));
-  } else {
-    GST_DEBUG_OBJECT (depay, "dropping metadata %s", g_type_name (info->api));
-    *meta = NULL;
-  }
-
-  return TRUE;
-}
-
-static GstBuffer *
-gst_rtp_opus_depay_process (GstRTPBaseDepayload * depayload, GstBuffer * buf)
-{
-  GstBuffer *outbuf;
-  GstRTPBuffer rtpbuf = { NULL, };
-
-  gst_rtp_buffer_map (buf, GST_MAP_READ, &rtpbuf);
-  outbuf = gst_rtp_buffer_get_payload_buffer (&rtpbuf);
-  gst_rtp_buffer_unmap (&rtpbuf);
-
-  outbuf = gst_buffer_make_writable (outbuf);
-  /* Filter away all metas that are not sensible to copy */
-  gst_buffer_foreach_meta (outbuf, foreach_metadata, depayload);
-
-  return outbuf;
-}
diff --git a/ext/opus/gstrtpopusdepay.h b/ext/opus/gstrtpopusdepay.h
deleted file mode 100644
index 7890eb1..0000000
--- a/ext/opus/gstrtpopusdepay.h
+++ /dev/null
@@ -1,57 +0,0 @@
-/*
- * Opus Depayloader Gst Element
- *
- *   @author: Danilo Cesar Lemes de Paula <danilo.eu@gmail.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-#ifndef __GST_RTP_OPUS_DEPAY_H__
-#define __GST_RTP_OPUS_DEPAY_H__
-
-#include <gst/gst.h>
-#include <gst/rtp/gstrtpbasedepayload.h>
-
-G_BEGIN_DECLS typedef struct _GstRTPOpusDepay GstRTPOpusDepay;
-typedef struct _GstRTPOpusDepayClass GstRTPOpusDepayClass;
-
-#define GST_TYPE_RTP_OPUS_DEPAY \
-  (gst_rtp_opus_depay_get_type())
-#define GST_RTP_OPUS_DEPAY(obj) \
-  (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_RTP_OPUS_DEPAY,GstRTPOpusDepay))
-#define GST_RTP_OPUS_DEPAY_CLASS(klass) \
-  (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_RTP_OPUS_DEPAY,GstRTPOpusDepayClass))
-#define GST_IS_RTP_OPUS_DEPAY(obj) \
-  (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_RTP_OPUS_DEPAY))
-#define GST_IS_RTP_OPUS_DEPAY_CLASS(klass) \
-  (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_RTP_OPUS_DEPAY))
-
-
-struct _GstRTPOpusDepay
-{
-  GstRTPBaseDepayload depayload;
-
-};
-
-struct _GstRTPOpusDepayClass
-{
-  GstRTPBaseDepayloadClass parent_class;
-};
-
-GType gst_rtp_opus_depay_get_type (void);
-
-G_END_DECLS
-#endif /* __GST_RTP_OPUS_DEPAY_H__ */
diff --git a/ext/opus/gstrtpopuspay.c b/ext/opus/gstrtpopuspay.c
deleted file mode 100644
index ead49a5..0000000
--- a/ext/opus/gstrtpopuspay.c
+++ /dev/null
@@ -1,277 +0,0 @@
-/*
- * Opus Payloader Gst Element
- *
- *   @author: Danilo Cesar Lemes de Paula <danilo.cesar@collabora.co.uk>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-#ifdef HAVE_CONFIG_H
-#  include "config.h"
-#endif
-
-#include <string.h>
-
-#include <gst/rtp/gstrtpbuffer.h>
-#include <gst/audio/audio.h>
-
-#include "gstrtpopuspay.h"
-
-GST_DEBUG_CATEGORY_STATIC (rtpopuspay_debug);
-#define GST_CAT_DEFAULT (rtpopuspay_debug)
-
-
-static GstStaticPadTemplate gst_rtp_opus_pay_sink_template =
-GST_STATIC_PAD_TEMPLATE ("sink",
-    GST_PAD_SINK,
-    GST_PAD_ALWAYS,
-    GST_STATIC_CAPS ("audio/x-opus, multistream = (boolean) FALSE")
-    );
-
-static GstStaticPadTemplate gst_rtp_opus_pay_src_template =
-GST_STATIC_PAD_TEMPLATE ("src",
-    GST_PAD_SRC,
-    GST_PAD_ALWAYS,
-    GST_STATIC_CAPS ("application/x-rtp, "
-        "media = (string) \"audio\", "
-        "payload = (int) " GST_RTP_PAYLOAD_DYNAMIC_STRING ", "
-        "clock-rate = (int) 48000, "
-        "encoding-params = (string) \"2\", "
-        "encoding-name = (string) { \"OPUS\", \"X-GST-OPUS-DRAFT-SPITTKA-00\" }")
-    );
-
-static gboolean gst_rtp_opus_pay_setcaps (GstRTPBasePayload * payload,
-    GstCaps * caps);
-static GstCaps *gst_rtp_opus_pay_getcaps (GstRTPBasePayload * payload,
-    GstPad * pad, GstCaps * filter);
-static GstFlowReturn gst_rtp_opus_pay_handle_buffer (GstRTPBasePayload *
-    payload, GstBuffer * buffer);
-
-G_DEFINE_TYPE (GstRtpOPUSPay, gst_rtp_opus_pay, GST_TYPE_RTP_BASE_PAYLOAD);
-
-static void
-gst_rtp_opus_pay_class_init (GstRtpOPUSPayClass * klass)
-{
-  GstRTPBasePayloadClass *gstbasertppayload_class;
-  GstElementClass *element_class;
-
-  gstbasertppayload_class = (GstRTPBasePayloadClass *) klass;
-  element_class = GST_ELEMENT_CLASS (klass);
-
-  gstbasertppayload_class->set_caps = gst_rtp_opus_pay_setcaps;
-  gstbasertppayload_class->get_caps = gst_rtp_opus_pay_getcaps;
-  gstbasertppayload_class->handle_buffer = gst_rtp_opus_pay_handle_buffer;
-
-  gst_element_class_add_pad_template (element_class,
-      gst_static_pad_template_get (&gst_rtp_opus_pay_src_template));
-  gst_element_class_add_pad_template (element_class,
-      gst_static_pad_template_get (&gst_rtp_opus_pay_sink_template));
-
-  gst_element_class_set_static_metadata (element_class,
-      "RTP Opus payloader",
-      "Codec/Payloader/Network/RTP",
-      "Puts Opus audio in RTP packets",
-      "Danilo Cesar Lemes de Paula <danilo.cesar@collabora.co.uk>");
-
-  GST_DEBUG_CATEGORY_INIT (rtpopuspay_debug, "rtpopuspay", 0,
-      "Opus RTP Payloader");
-}
-
-static void
-gst_rtp_opus_pay_init (GstRtpOPUSPay * rtpopuspay)
-{
-}
-
-static gboolean
-gst_rtp_opus_pay_setcaps (GstRTPBasePayload * payload, GstCaps * caps)
-{
-  gboolean res;
-  GstCaps *src_caps;
-  GstStructure *s;
-  char *encoding_name;
-  gint channels, rate;
-  const char *sprop_stereo = NULL;
-  char *sprop_maxcapturerate = NULL;
-
-  src_caps = gst_pad_get_allowed_caps (GST_RTP_BASE_PAYLOAD_SRCPAD (payload));
-  if (src_caps) {
-    src_caps = gst_caps_make_writable (src_caps);
-    src_caps = gst_caps_truncate (src_caps);
-    s = gst_caps_get_structure (src_caps, 0);
-    gst_structure_fixate_field_string (s, "encoding-name", "OPUS");
-    encoding_name = g_strdup (gst_structure_get_string (s, "encoding-name"));
-    gst_caps_unref (src_caps);
-  } else {
-    encoding_name = g_strdup ("X-GST-OPUS-DRAFT-SPITTKA-00");
-  }
-
-  s = gst_caps_get_structure (caps, 0);
-  if (gst_structure_get_int (s, "channels", &channels)) {
-    if (channels > 2) {
-      GST_ERROR_OBJECT (payload,
-          "More than 2 channels with multistream=FALSE is invalid");
-      return FALSE;
-    } else if (channels == 2) {
-      sprop_stereo = "1";
-    } else {
-      sprop_stereo = "0";
-    }
-  }
-
-  if (gst_structure_get_int (s, "rate", &rate)) {
-    sprop_maxcapturerate = g_strdup_printf ("%d", rate);
-  }
-
-  gst_rtp_base_payload_set_options (payload, "audio", FALSE,
-      encoding_name, 48000);
-  g_free (encoding_name);
-
-  if (sprop_maxcapturerate && sprop_stereo) {
-    res =
-        gst_rtp_base_payload_set_outcaps (payload, "sprop-maxcapturerate",
-        G_TYPE_STRING, sprop_maxcapturerate, "sprop-stereo", G_TYPE_STRING,
-        sprop_stereo, NULL);
-  } else if (sprop_maxcapturerate) {
-    res =
-        gst_rtp_base_payload_set_outcaps (payload, "sprop-maxcapturerate",
-        G_TYPE_STRING, sprop_maxcapturerate, NULL);
-  } else if (sprop_stereo) {
-    res =
-        gst_rtp_base_payload_set_outcaps (payload, "sprop-stereo",
-        G_TYPE_STRING, sprop_stereo, NULL);
-  } else {
-    res = gst_rtp_base_payload_set_outcaps (payload, NULL);
-  }
-
-  g_free (sprop_maxcapturerate);
-
-  return res;
-}
-
-typedef struct
-{
-  GstRtpOPUSPay *pay;
-  GstBuffer *outbuf;
-} CopyMetaData;
-
-static gboolean
-foreach_metadata (GstBuffer * inbuf, GstMeta ** meta, gpointer user_data)
-{
-  CopyMetaData *data = user_data;
-  GstRtpOPUSPay *pay = data->pay;
-  GstBuffer *outbuf = data->outbuf;
-  const GstMetaInfo *info = (*meta)->info;
-  const gchar *const *tags = gst_meta_api_type_get_tags (info->api);
-
-  if (!tags || (g_strv_length ((gchar **) tags) == 1
-          && gst_meta_api_type_has_tag (info->api,
-              g_quark_from_string (GST_META_TAG_AUDIO_STR)))) {
-    GstMetaTransformCopy copy_data = { FALSE, 0, -1 };
-    GST_DEBUG_OBJECT (pay, "copy metadata %s", g_type_name (info->api));
-    /* simply copy then */
-    info->transform_func (outbuf, *meta, inbuf,
-        _gst_meta_transform_copy, &copy_data);
-  } else {
-    GST_DEBUG_OBJECT (pay, "not copying metadata %s", g_type_name (info->api));
-  }
-
-  return TRUE;
-}
-
-static GstFlowReturn
-gst_rtp_opus_pay_handle_buffer (GstRTPBasePayload * basepayload,
-    GstBuffer * buffer)
-{
-  GstBuffer *outbuf;
-  GstClockTime pts, dts, duration;
-  CopyMetaData data;
-
-  pts = GST_BUFFER_PTS (buffer);
-  dts = GST_BUFFER_DTS (buffer);
-  duration = GST_BUFFER_DURATION (buffer);
-
-  outbuf = gst_rtp_buffer_new_allocate (0, 0, 0);
-  data.pay = GST_RTP_OPUS_PAY (basepayload);
-  data.outbuf = outbuf;
-  gst_buffer_foreach_meta (buffer, foreach_metadata, &data);
-  outbuf = gst_buffer_append (outbuf, buffer);
-
-  GST_BUFFER_PTS (outbuf) = pts;
-  GST_BUFFER_DTS (outbuf) = dts;
-  GST_BUFFER_DURATION (outbuf) = duration;
-
-  /* Push out */
-  return gst_rtp_base_payload_push (basepayload, outbuf);
-}
-
-static GstCaps *
-gst_rtp_opus_pay_getcaps (GstRTPBasePayload * payload,
-    GstPad * pad, GstCaps * filter)
-{
-  GstCaps *caps, *peercaps, *tcaps;
-  GstStructure *s;
-  const gchar *stereo;
-
-  if (pad == GST_RTP_BASE_PAYLOAD_SRCPAD (payload))
-    return
-        GST_RTP_BASE_PAYLOAD_CLASS (gst_rtp_opus_pay_parent_class)->get_caps
-        (payload, pad, filter);
-
-  tcaps = gst_pad_get_pad_template_caps (GST_RTP_BASE_PAYLOAD_SRCPAD (payload));
-  peercaps = gst_pad_peer_query_caps (GST_RTP_BASE_PAYLOAD_SRCPAD (payload),
-      tcaps);
-  gst_caps_unref (tcaps);
-  if (!peercaps)
-    return
-        GST_RTP_BASE_PAYLOAD_CLASS (gst_rtp_opus_pay_parent_class)->get_caps
-        (payload, pad, filter);
-
-  if (gst_caps_is_empty (peercaps))
-    return peercaps;
-
-  caps = gst_pad_get_pad_template_caps (GST_RTP_BASE_PAYLOAD_SINKPAD (payload));
-
-  s = gst_caps_get_structure (peercaps, 0);
-  stereo = gst_structure_get_string (s, "stereo");
-  if (stereo != NULL) {
-    caps = gst_caps_make_writable (caps);
-
-    if (!strcmp (stereo, "1")) {
-      GstCaps *caps2 = gst_caps_copy (caps);
-
-      gst_caps_set_simple (caps, "channels", G_TYPE_INT, 2, NULL);
-      gst_caps_set_simple (caps2, "channels", G_TYPE_INT, 1, NULL);
-      caps = gst_caps_merge (caps, caps2);
-    } else if (!strcmp (stereo, "0")) {
-      GstCaps *caps2 = gst_caps_copy (caps);
-
-      gst_caps_set_simple (caps, "channels", G_TYPE_INT, 1, NULL);
-      gst_caps_set_simple (caps2, "channels", G_TYPE_INT, 2, NULL);
-      caps = gst_caps_merge (caps, caps2);
-    }
-  }
-  gst_caps_unref (peercaps);
-
-  if (filter) {
-    GstCaps *tmp = gst_caps_intersect_full (caps, filter,
-        GST_CAPS_INTERSECT_FIRST);
-    gst_caps_unref (caps);
-    caps = tmp;
-  }
-
-  GST_DEBUG_OBJECT (payload, "Returning caps: %" GST_PTR_FORMAT, caps);
-  return caps;
-}
diff --git a/ext/opus/gstrtpopuspay.h b/ext/opus/gstrtpopuspay.h
deleted file mode 100644
index e21bbe3..0000000
--- a/ext/opus/gstrtpopuspay.h
+++ /dev/null
@@ -1,58 +0,0 @@
-/*
- * Opus Payloader Gst Element
- *
- *   @author: Danilo Cesar Lemes de Paula <danilo.eu@gmail.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-#ifndef __GST_RTP_OPUS_PAY_H__
-#define __GST_RTP_OPUS_PAY_H__
-
-#include <gst/gst.h>
-#include <gst/rtp/gstrtpbasepayload.h>
-
-G_BEGIN_DECLS
-
-#define GST_TYPE_RTP_OPUS_PAY \
-  (gst_rtp_opus_pay_get_type())
-#define GST_RTP_OPUS_PAY(obj) \
-  (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_RTP_OPUS_PAY,GstRtpOPUSPay))
-#define GST_RTP_OPUS_PAY_CLASS(klass) \
-  (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_RTP_OPUS_PAY,GstRtpOPUSPayClass))
-#define GST_IS_RTP_OPUS_PAY(obj) \
-  (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_RTP_OPUS_PAY))
-#define GST_IS_RTP_OPUS_PAY_CLASS(klass) \
-  (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_RTP_OPUS_PAY))
-
-typedef struct _GstRtpOPUSPay GstRtpOPUSPay;
-typedef struct _GstRtpOPUSPayClass GstRtpOPUSPayClass;
-
-struct _GstRtpOPUSPay
-{
-  GstRTPBasePayload payload;
-};
-
-struct _GstRtpOPUSPayClass
-{
-  GstRTPBasePayloadClass parent_class;
-};
-
-GType gst_rtp_opus_pay_get_type (void);
-
-G_END_DECLS
-
-#endif /* __GST_RTP_OPUS_PAY_H__ */
diff --git a/ext/qt/Makefile.am b/ext/qt/Makefile.am
index 059ee7b..5fdd90a 100644
--- a/ext/qt/Makefile.am
+++ b/ext/qt/Makefile.am
@@ -1,4 +1,4 @@
-plugin_LTLIBRARIES = libqtsink.la
+plugin_LTLIBRARIES = libgstqtsink.la
 
 noinst_HEADERS = \
 	gstqsgtexture.h \
@@ -13,36 +13,38 @@
 BUILT_SOURCES = $(moc_generated)
 CLEANFILES = $(moc_generated)
 
-nodist_libqtsink_la_SOURCES = $(BUILT_SOURCES)
+nodist_libgstqtsink_la_SOURCES = $(BUILT_SOURCES)
 
-libqtsink_la_SOURCES = \
+libgstqtsink_la_SOURCES = \
 	gstqsgtexture.cc \
 	qtitem.cc \
 	gstqtsink.cc \
 	gstqtsink.h \
+	gstqtgl.h \
 	gstplugin.cc
 
-libqtsink_la_CXXFLAGS = \
+libgstqtsink_la_CXXFLAGS = \
 	-I$(top_srcdir)/gst-libs \
 	-I$(top_builddir)/gst-libs \
 	$(GST_CXXFLAGS) \
 	$(GST_BASE_CFLAGS) \
 	$(GST_PLUGINS_BASE_CFLAGS) \
-	$(QT_CFLAGS)
+	$(QT_CFLAGS) \
+	$(GL_CFLAGS)
 
-libqtsink_la_LIBADD = \
+libgstqtsink_la_LIBADD = \
 	$(GST_BASE_LIBS) \
 	$(GST_PLUGINS_BASE_LIBS) \
 	$(QT_LIBS) \
 	$(top_builddir)/gst-libs/gst/gl/libgstgl-$(GST_API_VERSION).la \
 	-lgstvideo-$(GST_API_VERSION)
 
-libqtsink_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS)
-libqtsink_la_LIBTOOLFLAGS = $(GST_PLUGIN_LIBTOOLFLAGS)
+libgstqtsink_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS)
+libgstqtsink_la_LIBTOOLFLAGS = $(GST_PLUGIN_LIBTOOLFLAGS)
 
 
 $(moc_generated): moc_%.cc: %.h
-	@MOC@ -o $@ $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(MOC_CPPFLAGS) $<
+	@MOC@ -o $@ $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(MOC_CPPFLAGS) $<
 
 ui-%.h: %.ui
 	@UIC@ -o $@ $<
diff --git a/ext/qt/Makefile.in b/ext/qt/Makefile.in
index 3d24c28..b4293a5 100644
--- a/ext/qt/Makefile.in
+++ b/ext/qt/Makefile.in
@@ -116,16 +116,15 @@
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
 	$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
-	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gsettings.m4 \
-	$(top_srcdir)/m4/gst-fionread.m4 $(top_srcdir)/m4/gst-sdl.m4 \
-	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
-	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
-	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libgcrypt.m4 \
-	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
-	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
-	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
-	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
-	$(top_srcdir)/configure.ac
+	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gst-fionread.m4 \
+	$(top_srcdir)/m4/gst-sdl.m4 $(top_srcdir)/m4/iconv.m4 \
+	$(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \
+	$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
+	$(top_srcdir)/m4/libgcrypt.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
+	$(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \
@@ -164,26 +163,26 @@
 am__installdirs = "$(DESTDIR)$(plugindir)"
 LTLIBRARIES = $(plugin_LTLIBRARIES)
 am__DEPENDENCIES_1 =
-libqtsink_la_DEPENDENCIES = $(am__DEPENDENCIES_1) \
+libgstqtsink_la_DEPENDENCIES = $(am__DEPENDENCIES_1) \
 	$(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
 	$(top_builddir)/gst-libs/gst/gl/libgstgl-$(GST_API_VERSION).la
-am_libqtsink_la_OBJECTS = libqtsink_la-gstqsgtexture.lo \
-	libqtsink_la-qtitem.lo libqtsink_la-gstqtsink.lo \
-	libqtsink_la-gstplugin.lo
-am__objects_1 = libqtsink_la-moc_qtitem.lo \
-	libqtsink_la-moc_gstqsgtexture.lo
+am_libgstqtsink_la_OBJECTS = libgstqtsink_la-gstqsgtexture.lo \
+	libgstqtsink_la-qtitem.lo libgstqtsink_la-gstqtsink.lo \
+	libgstqtsink_la-gstplugin.lo
+am__objects_1 = libgstqtsink_la-moc_qtitem.lo \
+	libgstqtsink_la-moc_gstqsgtexture.lo
 am__objects_2 = $(am__objects_1)
-nodist_libqtsink_la_OBJECTS = $(am__objects_2)
-libqtsink_la_OBJECTS = $(am_libqtsink_la_OBJECTS) \
-	$(nodist_libqtsink_la_OBJECTS)
+nodist_libgstqtsink_la_OBJECTS = $(am__objects_2)
+libgstqtsink_la_OBJECTS = $(am_libgstqtsink_la_OBJECTS) \
+	$(nodist_libgstqtsink_la_OBJECTS)
 AM_V_lt = $(am__v_lt_@AM_V@)
 am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
 am__v_lt_0 = --silent
 am__v_lt_1 = 
-libqtsink_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX \
-	$(libqtsink_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link \
-	$(CXXLD) $(libqtsink_la_CXXFLAGS) $(CXXFLAGS) \
-	$(libqtsink_la_LDFLAGS) $(LDFLAGS) -o $@
+libgstqtsink_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX \
+	$(libgstqtsink_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link \
+	$(CXXLD) $(libgstqtsink_la_CXXFLAGS) $(CXXFLAGS) \
+	$(libgstqtsink_la_LDFLAGS) $(LDFLAGS) -o $@
 AM_V_P = $(am__v_P_@AM_V@)
 am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
 am__v_P_0 = false
@@ -236,8 +235,8 @@
 am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@)
 am__v_CCLD_0 = @echo "  CCLD    " $@;
 am__v_CCLD_1 = 
-SOURCES = $(libqtsink_la_SOURCES) $(nodist_libqtsink_la_SOURCES)
-DIST_SOURCES = $(libqtsink_la_SOURCES)
+SOURCES = $(libgstqtsink_la_SOURCES) $(nodist_libgstqtsink_la_SOURCES)
+DIST_SOURCES = $(libgstqtsink_la_SOURCES)
 am__can_run_installinfo = \
   case $$AM_UPDATE_INFO_DIR in \
     n|no|NO) false;; \
@@ -300,6 +299,8 @@
 CLUTTER_X11_LIBS = @CLUTTER_X11_LIBS@
 CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
+CUDA_CFLAGS = @CUDA_CFLAGS@
+CUDA_LIBS = @CUDA_LIBS@
 CURL_CFLAGS = @CURL_CFLAGS@
 CURL_LIBS = @CURL_LIBS@
 CXX = @CXX@
@@ -337,6 +338,8 @@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
+EGL_CFLAGS = @EGL_CFLAGS@
+EGL_LIBS = @EGL_LIBS@
 EGREP = @EGREP@
 ERROR_CFLAGS = @ERROR_CFLAGS@
 ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
@@ -345,7 +348,6 @@
 EXIF_CFLAGS = @EXIF_CFLAGS@
 EXIF_LIBS = @EXIF_LIBS@
 FAAC_LIBS = @FAAC_LIBS@
-FAAD_IS_NEAAC = @FAAD_IS_NEAAC@
 FAAD_LIBS = @FAAD_LIBS@
 FFLAGS = @FFLAGS@
 FGREP = @FGREP@
@@ -364,8 +366,9 @@
 GIO_LIBS = @GIO_LIBS@
 GIO_UNIX_CFLAGS = @GIO_UNIX_CFLAGS@
 GIO_UNIX_LIBS = @GIO_UNIX_LIBS@
+GLES2_CFLAGS = @GLES2_CFLAGS@
+GLES2_LIBS = @GLES2_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
-GLIB_COMPILE_SCHEMAS = @GLIB_COMPILE_SCHEMAS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
@@ -382,16 +385,17 @@
 GMODULE_NO_EXPORT_LIBS = @GMODULE_NO_EXPORT_LIBS@
 GMSGFMT = @GMSGFMT@
 GMSGFMT_015 = @GMSGFMT_015@
+GNUSTL_CFLAGS = @GNUSTL_CFLAGS@
+GNUSTL_LIBS = @GNUSTL_LIBS@
 GRAPHENE_CFLAGS = @GRAPHENE_CFLAGS@
 GRAPHENE_LIBS = @GRAPHENE_LIBS@
 GREP = @GREP@
-GSETTINGS_CFLAGS = @GSETTINGS_CFLAGS@
-GSETTINGS_DISABLE_SCHEMAS_COMPILE = @GSETTINGS_DISABLE_SCHEMAS_COMPILE@
-GSETTINGS_LIBS = @GSETTINGS_LIBS@
 GSM_LIBS = @GSM_LIBS@
 GSTPB_PLUGINS_DIR = @GSTPB_PLUGINS_DIR@
 GSTPB_PREFIX = @GSTPB_PREFIX@
 GST_AGE = @GST_AGE@
+GST_ALLOCATORS_CFLAGS = @GST_ALLOCATORS_CFLAGS@
+GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
 GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
 GST_API_VERSION = @GST_API_VERSION@
 GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
@@ -417,6 +421,8 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PBUTILS_CFLAGS = @GST_PBUTILS_CFLAGS@
+GST_PBUTILS_LIBS = @GST_PBUTILS_LIBS@
 GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BAD_CFLAGS = @GST_PLUGINS_BAD_CFLAGS@
@@ -442,6 +448,8 @@
 GST_PREFIX = @GST_PREFIX@
 GST_REVISION = @GST_REVISION@
 GST_TOOLS_DIR = @GST_TOOLS_DIR@
+GST_VIDEO_CFLAGS = @GST_VIDEO_CFLAGS@
+GST_VIDEO_LIBS = @GST_VIDEO_LIBS@
 GTK3_CFLAGS = @GTK3_CFLAGS@
 GTK3_GL_CFLAGS = @GTK3_GL_CFLAGS@
 GTK3_GL_LIBS = @GTK3_GL_LIBS@
@@ -543,6 +551,7 @@
 LTLIBICONV = @LTLIBICONV@
 LTLIBINTL = @LTLIBINTL@
 LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
 MANIFEST_TOOL = @MANIFEST_TOOL@
@@ -556,8 +565,6 @@
 MODPLUG_LIBS = @MODPLUG_LIBS@
 MPEG2ENC_CFLAGS = @MPEG2ENC_CFLAGS@
 MPEG2ENC_LIBS = @MPEG2ENC_LIBS@
-MPG123_CFLAGS = @MPG123_CFLAGS@
-MPG123_LIBS = @MPG123_LIBS@
 MPLEX_CFLAGS = @MPLEX_CFLAGS@
 MPLEX_LDFLAGS = @MPLEX_LDFLAGS@
 MPLEX_LIBS = @MPLEX_LIBS@
@@ -573,6 +580,8 @@
 NETTLE_LIBS = @NETTLE_LIBS@
 NM = @NM@
 NMEDIT = @NMEDIT@
+NVENCODE_CFLAGS = @NVENCODE_CFLAGS@
+NVENCODE_LIBS = @NVENCODE_LIBS@
 OBJC = @OBJC@
 OBJCDEPMODE = @OBJCDEPMODE@
 OBJCFLAGS = @OBJCFLAGS@
@@ -630,16 +639,18 @@
 PYTHON_PLATFORM = @PYTHON_PLATFORM@
 PYTHON_PREFIX = @PYTHON_PREFIX@
 PYTHON_VERSION = @PYTHON_VERSION@
+QT_ANDROID_CFLAGS = @QT_ANDROID_CFLAGS@
+QT_ANDROID_LIBS = @QT_ANDROID_LIBS@
 QT_CFLAGS = @QT_CFLAGS@
 QT_LIBS = @QT_LIBS@
+QT_MAC_CFLAGS = @QT_MAC_CFLAGS@
+QT_MAC_LIBS = @QT_MAC_LIBS@
 QT_WAYLAND_CFLAGS = @QT_WAYLAND_CFLAGS@
 QT_WAYLAND_LIBS = @QT_WAYLAND_LIBS@
 QT_X11_CFLAGS = @QT_X11_CFLAGS@
 QT_X11_LIBS = @QT_X11_LIBS@
 RANLIB = @RANLIB@
 RCC = @RCC@
-RSVG_2_36_2_CFLAGS = @RSVG_2_36_2_CFLAGS@
-RSVG_2_36_2_LIBS = @RSVG_2_36_2_LIBS@
 RSVG_CFLAGS = @RSVG_CFLAGS@
 RSVG_LIBS = @RSVG_LIBS@
 RTMP_CFLAGS = @RTMP_CFLAGS@
@@ -691,6 +702,7 @@
 VOAACENC_LIBS = @VOAACENC_LIBS@
 VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
 VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VULKAN_LIBS = @VULKAN_LIBS@
 WARNING_CFLAGS = @WARNING_CFLAGS@
 WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
 WARNING_OBJCFLAGS = @WARNING_OBJCFLAGS@
@@ -701,6 +713,7 @@
 WAYLAND_LIBS = @WAYLAND_LIBS@
 WEBP_CFLAGS = @WEBP_CFLAGS@
 WEBP_LIBS = @WEBP_LIBS@
+WGET = @WGET@
 WILDMIDI_CFLAGS = @WILDMIDI_CFLAGS@
 WILDMIDI_LIBS = @WILDMIDI_LIBS@
 WINKS_LIBS = @WINKS_LIBS@
@@ -710,6 +723,8 @@
 X11_LIBS = @X11_LIBS@
 X265_CFLAGS = @X265_CFLAGS@
 X265_LIBS = @X265_LIBS@
+XCB_CFLAGS = @XCB_CFLAGS@
+XCB_LIBS = @XCB_LIBS@
 XCOMPOSITE_CFLAGS = @XCOMPOSITE_CFLAGS@
 XCOMPOSITE_LIBS = @XCOMPOSITE_LIBS@
 XGETTEXT = @XGETTEXT@
@@ -747,7 +762,6 @@
 docdir = @docdir@
 dvidir = @dvidir@
 exec_prefix = @exec_prefix@
-gsettingsschemadir = @gsettingsschemadir@
 host = @host@
 host_alias = @host_alias@
 host_cpu = @host_cpu@
@@ -787,7 +801,7 @@
 top_builddir = @top_builddir@
 top_srcdir = @top_srcdir@
 wayland_scanner = @wayland_scanner@
-plugin_LTLIBRARIES = libqtsink.la
+plugin_LTLIBRARIES = libgstqtsink.la
 noinst_HEADERS = \
 	gstqsgtexture.h \
 	gstqtsink.h \
@@ -801,31 +815,33 @@
 #anything generated by the Qt tools...
 BUILT_SOURCES = $(moc_generated)
 CLEANFILES = $(moc_generated)
-nodist_libqtsink_la_SOURCES = $(BUILT_SOURCES)
-libqtsink_la_SOURCES = \
+nodist_libgstqtsink_la_SOURCES = $(BUILT_SOURCES)
+libgstqtsink_la_SOURCES = \
 	gstqsgtexture.cc \
 	qtitem.cc \
 	gstqtsink.cc \
 	gstqtsink.h \
+	gstqtgl.h \
 	gstplugin.cc
 
-libqtsink_la_CXXFLAGS = \
+libgstqtsink_la_CXXFLAGS = \
 	-I$(top_srcdir)/gst-libs \
 	-I$(top_builddir)/gst-libs \
 	$(GST_CXXFLAGS) \
 	$(GST_BASE_CFLAGS) \
 	$(GST_PLUGINS_BASE_CFLAGS) \
-	$(QT_CFLAGS)
+	$(QT_CFLAGS) \
+	$(GL_CFLAGS)
 
-libqtsink_la_LIBADD = \
+libgstqtsink_la_LIBADD = \
 	$(GST_BASE_LIBS) \
 	$(GST_PLUGINS_BASE_LIBS) \
 	$(QT_LIBS) \
 	$(top_builddir)/gst-libs/gst/gl/libgstgl-$(GST_API_VERSION).la \
 	-lgstvideo-$(GST_API_VERSION)
 
-libqtsink_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS)
-libqtsink_la_LIBTOOLFLAGS = $(GST_PLUGIN_LIBTOOLFLAGS)
+libgstqtsink_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS)
+libgstqtsink_la_LIBTOOLFLAGS = $(GST_PLUGIN_LIBTOOLFLAGS)
 all: $(BUILT_SOURCES)
 	$(MAKE) $(AM_MAKEFLAGS) all-am
 
@@ -896,8 +912,8 @@
 	  rm -f $${locs}; \
 	}
 
-libqtsink.la: $(libqtsink_la_OBJECTS) $(libqtsink_la_DEPENDENCIES) $(EXTRA_libqtsink_la_DEPENDENCIES) 
-	$(AM_V_CXXLD)$(libqtsink_la_LINK) -rpath $(plugindir) $(libqtsink_la_OBJECTS) $(libqtsink_la_LIBADD) $(LIBS)
+libgstqtsink.la: $(libgstqtsink_la_OBJECTS) $(libgstqtsink_la_DEPENDENCIES) $(EXTRA_libgstqtsink_la_DEPENDENCIES) 
+	$(AM_V_CXXLD)$(libgstqtsink_la_LINK) -rpath $(plugindir) $(libgstqtsink_la_OBJECTS) $(libgstqtsink_la_LIBADD) $(LIBS)
 
 mostlyclean-compile:
 	-rm -f *.$(OBJEXT)
@@ -905,12 +921,12 @@
 distclean-compile:
 	-rm -f *.tab.c
 
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libqtsink_la-gstplugin.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libqtsink_la-gstqsgtexture.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libqtsink_la-gstqtsink.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libqtsink_la-moc_gstqsgtexture.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libqtsink_la-moc_qtitem.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libqtsink_la-qtitem.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstqtsink_la-gstplugin.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstqtsink_la-gstqsgtexture.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstqtsink_la-gstqtsink.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstqtsink_la-moc_gstqsgtexture.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstqtsink_la-moc_qtitem.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstqtsink_la-qtitem.Plo@am__quote@
 
 .cc.o:
 @am__fastdepCXX_TRUE@	$(AM_V_CXX)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\
@@ -936,47 +952,47 @@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCXX_FALSE@	$(AM_V_CXX@am__nodep@)$(LTCXXCOMPILE) -c -o $@ $<
 
-libqtsink_la-gstqsgtexture.lo: gstqsgtexture.cc
-@am__fastdepCXX_TRUE@	$(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(libqtsink_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libqtsink_la_CXXFLAGS) $(CXXFLAGS) -MT libqtsink_la-gstqsgtexture.lo -MD -MP -MF $(DEPDIR)/libqtsink_la-gstqsgtexture.Tpo -c -o libqtsink_la-gstqsgtexture.lo `test -f 'gstqsgtexture.cc' || echo '$(srcdir)/'`gstqsgtexture.cc
-@am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libqtsink_la-gstqsgtexture.Tpo $(DEPDIR)/libqtsink_la-gstqsgtexture.Plo
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='gstqsgtexture.cc' object='libqtsink_la-gstqsgtexture.lo' libtool=yes @AMDEPBACKSLASH@
+libgstqtsink_la-gstqsgtexture.lo: gstqsgtexture.cc
+@am__fastdepCXX_TRUE@	$(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(libgstqtsink_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstqtsink_la_CXXFLAGS) $(CXXFLAGS) -MT libgstqtsink_la-gstqsgtexture.lo -MD -MP -MF $(DEPDIR)/libgstqtsink_la-gstqsgtexture.Tpo -c -o libgstqtsink_la-gstqsgtexture.lo `test -f 'gstqsgtexture.cc' || echo '$(srcdir)/'`gstqsgtexture.cc
+@am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstqtsink_la-gstqsgtexture.Tpo $(DEPDIR)/libgstqtsink_la-gstqsgtexture.Plo
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='gstqsgtexture.cc' object='libgstqtsink_la-gstqsgtexture.lo' libtool=yes @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCXX_FALSE@	$(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(libqtsink_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libqtsink_la_CXXFLAGS) $(CXXFLAGS) -c -o libqtsink_la-gstqsgtexture.lo `test -f 'gstqsgtexture.cc' || echo '$(srcdir)/'`gstqsgtexture.cc
+@am__fastdepCXX_FALSE@	$(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(libgstqtsink_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstqtsink_la_CXXFLAGS) $(CXXFLAGS) -c -o libgstqtsink_la-gstqsgtexture.lo `test -f 'gstqsgtexture.cc' || echo '$(srcdir)/'`gstqsgtexture.cc
 
-libqtsink_la-qtitem.lo: qtitem.cc
-@am__fastdepCXX_TRUE@	$(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(libqtsink_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libqtsink_la_CXXFLAGS) $(CXXFLAGS) -MT libqtsink_la-qtitem.lo -MD -MP -MF $(DEPDIR)/libqtsink_la-qtitem.Tpo -c -o libqtsink_la-qtitem.lo `test -f 'qtitem.cc' || echo '$(srcdir)/'`qtitem.cc
-@am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libqtsink_la-qtitem.Tpo $(DEPDIR)/libqtsink_la-qtitem.Plo
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='qtitem.cc' object='libqtsink_la-qtitem.lo' libtool=yes @AMDEPBACKSLASH@
+libgstqtsink_la-qtitem.lo: qtitem.cc
+@am__fastdepCXX_TRUE@	$(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(libgstqtsink_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstqtsink_la_CXXFLAGS) $(CXXFLAGS) -MT libgstqtsink_la-qtitem.lo -MD -MP -MF $(DEPDIR)/libgstqtsink_la-qtitem.Tpo -c -o libgstqtsink_la-qtitem.lo `test -f 'qtitem.cc' || echo '$(srcdir)/'`qtitem.cc
+@am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstqtsink_la-qtitem.Tpo $(DEPDIR)/libgstqtsink_la-qtitem.Plo
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='qtitem.cc' object='libgstqtsink_la-qtitem.lo' libtool=yes @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCXX_FALSE@	$(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(libqtsink_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libqtsink_la_CXXFLAGS) $(CXXFLAGS) -c -o libqtsink_la-qtitem.lo `test -f 'qtitem.cc' || echo '$(srcdir)/'`qtitem.cc
+@am__fastdepCXX_FALSE@	$(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(libgstqtsink_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstqtsink_la_CXXFLAGS) $(CXXFLAGS) -c -o libgstqtsink_la-qtitem.lo `test -f 'qtitem.cc' || echo '$(srcdir)/'`qtitem.cc
 
-libqtsink_la-gstqtsink.lo: gstqtsink.cc
-@am__fastdepCXX_TRUE@	$(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(libqtsink_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libqtsink_la_CXXFLAGS) $(CXXFLAGS) -MT libqtsink_la-gstqtsink.lo -MD -MP -MF $(DEPDIR)/libqtsink_la-gstqtsink.Tpo -c -o libqtsink_la-gstqtsink.lo `test -f 'gstqtsink.cc' || echo '$(srcdir)/'`gstqtsink.cc
-@am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libqtsink_la-gstqtsink.Tpo $(DEPDIR)/libqtsink_la-gstqtsink.Plo
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='gstqtsink.cc' object='libqtsink_la-gstqtsink.lo' libtool=yes @AMDEPBACKSLASH@
+libgstqtsink_la-gstqtsink.lo: gstqtsink.cc
+@am__fastdepCXX_TRUE@	$(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(libgstqtsink_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstqtsink_la_CXXFLAGS) $(CXXFLAGS) -MT libgstqtsink_la-gstqtsink.lo -MD -MP -MF $(DEPDIR)/libgstqtsink_la-gstqtsink.Tpo -c -o libgstqtsink_la-gstqtsink.lo `test -f 'gstqtsink.cc' || echo '$(srcdir)/'`gstqtsink.cc
+@am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstqtsink_la-gstqtsink.Tpo $(DEPDIR)/libgstqtsink_la-gstqtsink.Plo
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='gstqtsink.cc' object='libgstqtsink_la-gstqtsink.lo' libtool=yes @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCXX_FALSE@	$(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(libqtsink_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libqtsink_la_CXXFLAGS) $(CXXFLAGS) -c -o libqtsink_la-gstqtsink.lo `test -f 'gstqtsink.cc' || echo '$(srcdir)/'`gstqtsink.cc
+@am__fastdepCXX_FALSE@	$(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(libgstqtsink_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstqtsink_la_CXXFLAGS) $(CXXFLAGS) -c -o libgstqtsink_la-gstqtsink.lo `test -f 'gstqtsink.cc' || echo '$(srcdir)/'`gstqtsink.cc
 
-libqtsink_la-gstplugin.lo: gstplugin.cc
-@am__fastdepCXX_TRUE@	$(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(libqtsink_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libqtsink_la_CXXFLAGS) $(CXXFLAGS) -MT libqtsink_la-gstplugin.lo -MD -MP -MF $(DEPDIR)/libqtsink_la-gstplugin.Tpo -c -o libqtsink_la-gstplugin.lo `test -f 'gstplugin.cc' || echo '$(srcdir)/'`gstplugin.cc
-@am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libqtsink_la-gstplugin.Tpo $(DEPDIR)/libqtsink_la-gstplugin.Plo
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='gstplugin.cc' object='libqtsink_la-gstplugin.lo' libtool=yes @AMDEPBACKSLASH@
+libgstqtsink_la-gstplugin.lo: gstplugin.cc
+@am__fastdepCXX_TRUE@	$(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(libgstqtsink_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstqtsink_la_CXXFLAGS) $(CXXFLAGS) -MT libgstqtsink_la-gstplugin.lo -MD -MP -MF $(DEPDIR)/libgstqtsink_la-gstplugin.Tpo -c -o libgstqtsink_la-gstplugin.lo `test -f 'gstplugin.cc' || echo '$(srcdir)/'`gstplugin.cc
+@am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstqtsink_la-gstplugin.Tpo $(DEPDIR)/libgstqtsink_la-gstplugin.Plo
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='gstplugin.cc' object='libgstqtsink_la-gstplugin.lo' libtool=yes @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCXX_FALSE@	$(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(libqtsink_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libqtsink_la_CXXFLAGS) $(CXXFLAGS) -c -o libqtsink_la-gstplugin.lo `test -f 'gstplugin.cc' || echo '$(srcdir)/'`gstplugin.cc
+@am__fastdepCXX_FALSE@	$(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(libgstqtsink_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstqtsink_la_CXXFLAGS) $(CXXFLAGS) -c -o libgstqtsink_la-gstplugin.lo `test -f 'gstplugin.cc' || echo '$(srcdir)/'`gstplugin.cc
 
-libqtsink_la-moc_qtitem.lo: moc_qtitem.cc
-@am__fastdepCXX_TRUE@	$(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(libqtsink_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libqtsink_la_CXXFLAGS) $(CXXFLAGS) -MT libqtsink_la-moc_qtitem.lo -MD -MP -MF $(DEPDIR)/libqtsink_la-moc_qtitem.Tpo -c -o libqtsink_la-moc_qtitem.lo `test -f 'moc_qtitem.cc' || echo '$(srcdir)/'`moc_qtitem.cc
-@am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libqtsink_la-moc_qtitem.Tpo $(DEPDIR)/libqtsink_la-moc_qtitem.Plo
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='moc_qtitem.cc' object='libqtsink_la-moc_qtitem.lo' libtool=yes @AMDEPBACKSLASH@
+libgstqtsink_la-moc_qtitem.lo: moc_qtitem.cc
+@am__fastdepCXX_TRUE@	$(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(libgstqtsink_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstqtsink_la_CXXFLAGS) $(CXXFLAGS) -MT libgstqtsink_la-moc_qtitem.lo -MD -MP -MF $(DEPDIR)/libgstqtsink_la-moc_qtitem.Tpo -c -o libgstqtsink_la-moc_qtitem.lo `test -f 'moc_qtitem.cc' || echo '$(srcdir)/'`moc_qtitem.cc
+@am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstqtsink_la-moc_qtitem.Tpo $(DEPDIR)/libgstqtsink_la-moc_qtitem.Plo
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='moc_qtitem.cc' object='libgstqtsink_la-moc_qtitem.lo' libtool=yes @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCXX_FALSE@	$(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(libqtsink_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libqtsink_la_CXXFLAGS) $(CXXFLAGS) -c -o libqtsink_la-moc_qtitem.lo `test -f 'moc_qtitem.cc' || echo '$(srcdir)/'`moc_qtitem.cc
+@am__fastdepCXX_FALSE@	$(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(libgstqtsink_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstqtsink_la_CXXFLAGS) $(CXXFLAGS) -c -o libgstqtsink_la-moc_qtitem.lo `test -f 'moc_qtitem.cc' || echo '$(srcdir)/'`moc_qtitem.cc
 
-libqtsink_la-moc_gstqsgtexture.lo: moc_gstqsgtexture.cc
-@am__fastdepCXX_TRUE@	$(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(libqtsink_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libqtsink_la_CXXFLAGS) $(CXXFLAGS) -MT libqtsink_la-moc_gstqsgtexture.lo -MD -MP -MF $(DEPDIR)/libqtsink_la-moc_gstqsgtexture.Tpo -c -o libqtsink_la-moc_gstqsgtexture.lo `test -f 'moc_gstqsgtexture.cc' || echo '$(srcdir)/'`moc_gstqsgtexture.cc
-@am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libqtsink_la-moc_gstqsgtexture.Tpo $(DEPDIR)/libqtsink_la-moc_gstqsgtexture.Plo
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='moc_gstqsgtexture.cc' object='libqtsink_la-moc_gstqsgtexture.lo' libtool=yes @AMDEPBACKSLASH@
+libgstqtsink_la-moc_gstqsgtexture.lo: moc_gstqsgtexture.cc
+@am__fastdepCXX_TRUE@	$(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(libgstqtsink_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstqtsink_la_CXXFLAGS) $(CXXFLAGS) -MT libgstqtsink_la-moc_gstqsgtexture.lo -MD -MP -MF $(DEPDIR)/libgstqtsink_la-moc_gstqsgtexture.Tpo -c -o libgstqtsink_la-moc_gstqsgtexture.lo `test -f 'moc_gstqsgtexture.cc' || echo '$(srcdir)/'`moc_gstqsgtexture.cc
+@am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstqtsink_la-moc_gstqsgtexture.Tpo $(DEPDIR)/libgstqtsink_la-moc_gstqsgtexture.Plo
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='moc_gstqsgtexture.cc' object='libgstqtsink_la-moc_gstqsgtexture.lo' libtool=yes @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCXX_FALSE@	$(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(libqtsink_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libqtsink_la_CXXFLAGS) $(CXXFLAGS) -c -o libqtsink_la-moc_gstqsgtexture.lo `test -f 'moc_gstqsgtexture.cc' || echo '$(srcdir)/'`moc_gstqsgtexture.cc
+@am__fastdepCXX_FALSE@	$(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(libgstqtsink_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstqtsink_la_CXXFLAGS) $(CXXFLAGS) -c -o libgstqtsink_la-moc_gstqsgtexture.lo `test -f 'moc_gstqsgtexture.cc' || echo '$(srcdir)/'`moc_gstqsgtexture.cc
 
 mostlyclean-libtool:
 	-rm -f *.lo
@@ -1199,7 +1215,7 @@
 
 
 $(moc_generated): moc_%.cc: %.h
-	@MOC@ -o $@ $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(MOC_CPPFLAGS) $<
+	@MOC@ -o $@ $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(MOC_CPPFLAGS) $<
 
 ui-%.h: %.ui
 	@UIC@ -o $@ $<
diff --git a/ext/qt/gstplugin.cc b/ext/qt/gstplugin.cc
index 70b6310..2fa10f5 100644
--- a/ext/qt/gstplugin.cc
+++ b/ext/qt/gstplugin.cc
@@ -23,7 +23,7 @@
 #endif
 
 #include "gstqtsink.h"
-#include <QQmlApplicationEngine>
+#include <QtQml/QQmlApplicationEngine>
 
 static gboolean
 plugin_init (GstPlugin * plugin)
diff --git a/ext/qt/gstqsgtexture.cc b/ext/qt/gstqsgtexture.cc
index 0986a82..13208c0 100644
--- a/ext/qt/gstqsgtexture.cc
+++ b/ext/qt/gstqsgtexture.cc
@@ -111,7 +111,7 @@
   mem = gst_buffer_peek_memory (this->buffer_, 0);
   g_assert (gst_is_gl_memory (mem));
 
-  context = ((GstGLBaseBuffer *)mem)->context;
+  context = ((GstGLBaseMemory *)mem)->context;
 
   sync_meta = gst_buffer_get_gl_sync_meta (this->sync_buffer_);
   if (!sync_meta)
diff --git a/ext/qt/gstqsgtexture.h b/ext/qt/gstqsgtexture.h
index bf8f03f..a5a6f9f 100644
--- a/ext/qt/gstqsgtexture.h
+++ b/ext/qt/gstqsgtexture.h
@@ -22,11 +22,13 @@
 #define __GST_QSG_TEXTURE_H__
 
 #include <gst/gst.h>
-#include <QSGTexture>
-#include <QOpenGLFunctions>
 #include <gst/video/video.h>
 #include <gst/gl/gl.h>
 
+#include "gstqtgl.h"
+#include <QtQuick/QSGTexture>
+#include <QtGui/QOpenGLFunctions>
+
 class GstQSGTexture : public QSGTexture, protected QOpenGLFunctions
 {
     Q_OBJECT
diff --git a/ext/qt/gstqtgl.h b/ext/qt/gstqtgl.h
new file mode 100644
index 0000000..673ef22
--- /dev/null
+++ b/ext/qt/gstqtgl.h
@@ -0,0 +1,34 @@
+/*
+ * GStreamer
+ * Copyright (C) 2015 Matthew Waters <matthew@centricular.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+/* qt uses the same trick as us to typedef GLsync on gles2 but to a different
+ * type which confuses the preprocessor.  As it's never actually used by qt
+ * public headers, define it to something else to avoid redefinition
+ * warnings/errors */
+
+#include <gst/gl/gstglconfig.h>
+#include <QtCore/qglobal.h>
+
+#if defined(QT_OPENGL_ES_2) && GST_GL_HAVE_WINDOW_ANDROID
+#define GLsync gst_qt_GLsync
+#include <QOpenGLContext>
+#include <QOpenGLFunctions>
+#undef GLsync
+#endif /* defined(QT_OPENGL_ES_2) */
diff --git a/ext/qt/gstqtsink.cc b/ext/qt/gstqtsink.cc
index 9ff13b0..df44a7d 100644
--- a/ext/qt/gstqtsink.cc
+++ b/ext/qt/gstqtsink.cc
@@ -28,7 +28,7 @@
 #endif
 
 #include "gstqtsink.h"
-#include <QGuiApplication>
+#include <QtGui/QGuiApplication>
 
 #define GST_CAT_DEFAULT gst_debug_qt_gl_sink
 GST_DEBUG_CATEGORY (GST_CAT_DEFAULT);
@@ -58,8 +58,12 @@
 GST_STATIC_PAD_TEMPLATE ("sink",
     GST_PAD_SINK,
     GST_PAD_ALWAYS,
-    GST_STATIC_CAPS (GST_VIDEO_CAPS_MAKE_WITH_FEATURES
-        (GST_CAPS_FEATURE_MEMORY_GL_MEMORY, "RGBA")));
+    GST_STATIC_CAPS ("video/x-raw(" GST_CAPS_FEATURE_MEMORY_GL_MEMORY "), "
+    "format = (string) RGBA, "
+    "width = " GST_VIDEO_SIZE_RANGE ", "
+    "height = " GST_VIDEO_SIZE_RANGE ", "
+    "framerate = " GST_VIDEO_FPS_RANGE ", "
+    "texture-target = (string) 2D"));
 
 #define DEFAULT_FORCE_ASPECT_RATIO  TRUE
 #define DEFAULT_PAR_N               0
@@ -271,6 +275,8 @@
 
       if (ret)
         return ret;
+
+      /* fallthrough */
     }
     default:
       res = GST_BASE_SINK_CLASS (parent_class)->query (bsink, query);
@@ -299,7 +305,7 @@
 
   switch (transition) {
     case GST_STATE_CHANGE_NULL_TO_READY:
-      app = dynamic_cast<QGuiApplication *> (QCoreApplication::instance ());
+      app = static_cast<QGuiApplication *> (QCoreApplication::instance ());
       if (!app) {
         GST_ELEMENT_ERROR (element, RESOURCE, NOT_FOUND,
             ("%s", "Failed to connect to Qt"),
diff --git a/ext/qt/qtitem.cc b/ext/qt/qtitem.cc
index ab64d9e..e1f91e7 100644
--- a/ext/qt/qtitem.cc
+++ b/ext/qt/qtitem.cc
@@ -25,12 +25,14 @@
 #include <stdio.h>
 
 #include <gst/video/video.h>
-#include <QGuiApplication>
-#include <QQuickWindow>
-#include <QSGSimpleTextureNode>
 #include "qtitem.h"
 #include "gstqsgtexture.h"
 
+#include <QtCore/QRunnable>
+#include <QtGui/QGuiApplication>
+#include <QtQuick/QQuickWindow>
+#include <QtQuick/QSGSimpleTextureNode>
+
 #if GST_GL_HAVE_WINDOW_X11 && GST_GL_HAVE_PLATFORM_GLX && defined (HAVE_QT_X11)
 #include <QX11Info>
 #include <gst/gl/x11/gstgldisplay_x11.h>
@@ -41,6 +43,15 @@
 #include <gst/gl/wayland/gstgldisplay_wayland.h>
 #endif
 
+#if GST_GL_HAVE_WINDOW_ANDROID && GST_GL_HAVE_PLATFORM_EGL && defined (HAVE_QT_ANDROID)
+#include <gst/gl/egl/gstgldisplay_egl.h>
+#include <gst/gl/egl/gstglcontext_egl.h>
+#endif
+
+#if GST_GL_HAVE_WINDOW_COCOA && GST_GL_HAVE_PLATFORM_COCOA && defined (HAVE_QT_MAC)
+#include <gst/gl/coaoa/gstgldisplay_cocoa.h>
+#endif
+
 /**
  * SECTION:gtkgstglwidget
  * @short_description: a #GtkGLArea that renders GStreamer video #GstBuffers
@@ -89,9 +100,29 @@
   GstGLContext *context;
 };
 
+class InitializeSceneGraph : public QRunnable
+{
+public:
+  InitializeSceneGraph(QtGLVideoItem *item);
+  void run();
+
+private:
+  QtGLVideoItem *item_;
+};
+
+InitializeSceneGraph::InitializeSceneGraph(QtGLVideoItem *item) :
+  item_(item)
+{
+}
+
+void InitializeSceneGraph::run()
+{
+  item_->onSceneGraphInitialized();
+}
+
 QtGLVideoItem::QtGLVideoItem()
 {
-  QGuiApplication *app = dynamic_cast<QGuiApplication *> (QCoreApplication::instance ());
+  QGuiApplication *app = static_cast<QGuiApplication *> (QCoreApplication::instance ());
   static volatile gsize _debug;
 
   g_assert (app != NULL);
@@ -100,7 +131,7 @@
     GST_DEBUG_CATEGORY_INIT (GST_CAT_DEFAULT, "qtglwidget", 0, "Qt GL Widget");
     g_once_init_leave (&_debug, 1);
   }
-
+  this->m_openGlContextInitialized = false;
   this->setFlag (QQuickItem::ItemHasContents, true);
 
   this->priv = g_new0 (QtGLVideoItemPrivate, 1);
@@ -116,6 +147,18 @@
     this->priv->display = (GstGLDisplay *)
         gst_gl_display_x11_new_with_display (QX11Info::display ());
 #endif
+#if GST_GL_HAVE_WINDOW_ANDROID && GST_GL_HAVE_PLATFORM_EGL && defined (HAVE_QT_ANDROID)
+  if (QString::fromUtf8 ("android") == app->platformName())
+    this->priv->display = (GstGLDisplay *) gst_gl_display_egl_new ();
+#endif
+#if GST_GL_HAVE_WINDOW_COCOA && GST_GL_HAVE_PLATFORM_COCOA && defined (HAVE_QT_MAC)
+  if (QString::fromUtf8 ("cocoa") == app->platformName())
+    this->priv->display = (GstGLDisplay *) gst_gl_display_cocoa_new ();
+#endif
+#if GST_GL_HAVE_WINDOW_EAGL && GST_GL_HAVE_PLATFORM_EAGL && defined (HAVE_QT_IOS)
+  if (QString::fromUtf8 ("ios") == app->platformName())
+    this->priv->display = gst_gl_display_new ();
+#endif
 
   if (!this->priv->display)
     this->priv->display = gst_gl_display_new ();
@@ -129,7 +172,10 @@
 QtGLVideoItem::~QtGLVideoItem()
 {
   g_mutex_clear (&this->priv->lock);
-
+  if (this->priv->context)
+    gst_object_unref(this->priv->context);
+  if (this->priv->other_context)
+    gst_object_unref(this->priv->other_context);
   g_free (this->priv);
   this->priv = NULL;
 }
@@ -166,6 +212,10 @@
 QtGLVideoItem::updatePaintNode(QSGNode * oldNode,
     UpdatePaintNodeData * updatePaintNodeData)
 {
+  if (!m_openGlContextInitialized) {
+    return oldNode;
+  }
+
   QSGSimpleTextureNode *texNode = static_cast<QSGSimpleTextureNode *> (oldNode);
   GstVideoRectangle src, dst, result;
   GstQSGTexture *tex;
@@ -283,6 +333,39 @@
           platform, gl_api);
   }
 #endif
+#if GST_GL_HAVE_WINDOW_ANDROID && GST_GL_HAVE_PLATFORM_EGL && defined (HAVE_QT_ANDROID)
+  if (GST_IS_GL_DISPLAY_EGL (this->priv->display)) {
+    platform = GST_GL_PLATFORM_EGL;
+    gl_api = gst_gl_context_get_current_gl_api (platform, NULL, NULL);
+    gl_handle = gst_gl_context_get_current_gl_context (platform);
+    if (gl_handle)
+      this->priv->other_context =
+          gst_gl_context_new_wrapped (this->priv->display, gl_handle,
+          platform, gl_api);
+  }
+#endif
+#if GST_GL_HAVE_WINDOW_COCOA && GST_GL_HAVE_PLATFORM_COCOA && defined (HAVE_QT_MAC)
+  if (this->priv->display) {
+    platform = GST_GL_PLATFORM_CGL;
+    gl_api = gst_gl_context_get_current_gl_api (platform, NULL, NULL);
+    gl_handle = gst_gl_context_get_current_gl_context (platform);
+    if (gl_handle)
+      this->priv->other_context =
+          gst_gl_context_new_wrapped (this->priv->display, gl_handle,
+          platform, gl_api);
+  }
+#endif
+#if GST_GL_HAVE_WINDOW_EAGL && GST_GL_HAVE_PLATFORM_EAGL && defined (HAVE_QT_IOS)
+  if (this->priv->display) {
+    platform = GST_GL_PLATFORM_EAGL;
+    gl_api = gst_gl_context_get_current_gl_api (platform, NULL, NULL);
+    gl_handle = gst_gl_context_get_current_gl_context (platform);
+    if (gl_handle)
+      this->priv->other_context =
+          gst_gl_context_new_wrapped (this->priv->display, gl_handle,
+          platform, gl_api);
+  }
+#endif
 
   (void) platform;
   (void) gl_api;
@@ -299,6 +382,7 @@
     } else {
       gst_gl_display_filter_gl_api (this->priv->display, gst_gl_context_get_gl_api (this->priv->other_context));
       gst_gl_context_activate (this->priv->other_context, FALSE);
+      m_openGlContextInitialized = true;
     }
   }
 
@@ -333,7 +417,7 @@
     return FALSE;
   }
 
-  if (!GST_GL_IS_CONTEXT (widget->priv->other_context)) {
+  if (!GST_IS_GL_CONTEXT (widget->priv->other_context)) {
     GST_ERROR ("%p failed to retrieve wrapped context %" GST_PTR_FORMAT, widget,
         widget->priv->other_context);
     g_mutex_unlock (&widget->priv->lock);
@@ -359,9 +443,9 @@
 {
   if (win) {
     if (win->isSceneGraphInitialized())
-      onSceneGraphInitialized();
+      win->scheduleRenderJob(new InitializeSceneGraph(this), QQuickWindow::BeforeSynchronizingStage);
     else
-	  connect(win, SIGNAL(sceneGraphInitialized()), this, SLOT(onSceneGraphInitialized()), Qt::DirectConnection);
+      connect(win, SIGNAL(sceneGraphInitialized()), this, SLOT(onSceneGraphInitialized()), Qt::DirectConnection);
 
     connect(win, SIGNAL(sceneGraphInvalidated()), this, SLOT(onSceneGraphInvalidated()), Qt::DirectConnection);
   } else {
diff --git a/ext/qt/qtitem.h b/ext/qt/qtitem.h
index afd2869..ae23eff 100644
--- a/ext/qt/qtitem.h
+++ b/ext/qt/qtitem.h
@@ -23,12 +23,16 @@
 
 #include <gst/gst.h>
 #include <gst/gl/gl.h>
-#include <QQuickItem>
-#include <QOpenGLContext>
-#include <QOpenGLFunctions>
+
+#include "gstqtgl.h"
+#include <QtQuick/QQuickItem>
+#include <QtGui/QOpenGLContext>
+#include <QtGui/QOpenGLFunctions>
 
 typedef struct _QtGLVideoItemPrivate QtGLVideoItemPrivate;
 
+class InitializeSceneGraph;
+
 class QtGLVideoItem : public QQuickItem, protected QOpenGLFunctions
 {
     Q_OBJECT
@@ -53,10 +57,12 @@
     QSGNode * updatePaintNode (QSGNode * oldNode, UpdatePaintNodeData * updatePaintNodeData);
 
 private:
+    friend class InitializeSceneGraph;
     void setViewportSize(const QSize &size);
     void shareContext();
 
     QSize m_viewportSize;
+    bool m_openGlContextInitialized;
 };
 
 extern "C"
diff --git a/ext/resindvd/Makefile.in b/ext/resindvd/Makefile.in
index 12dc062..09c023b 100644
--- a/ext/resindvd/Makefile.in
+++ b/ext/resindvd/Makefile.in
@@ -118,16 +118,15 @@
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
 	$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
-	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gsettings.m4 \
-	$(top_srcdir)/m4/gst-fionread.m4 $(top_srcdir)/m4/gst-sdl.m4 \
-	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
-	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
-	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libgcrypt.m4 \
-	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
-	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
-	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
-	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
-	$(top_srcdir)/configure.ac
+	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gst-fionread.m4 \
+	$(top_srcdir)/m4/gst-sdl.m4 $(top_srcdir)/m4/iconv.m4 \
+	$(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \
+	$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
+	$(top_srcdir)/m4/libgcrypt.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
+	$(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \
@@ -284,6 +283,8 @@
 CLUTTER_X11_LIBS = @CLUTTER_X11_LIBS@
 CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
+CUDA_CFLAGS = @CUDA_CFLAGS@
+CUDA_LIBS = @CUDA_LIBS@
 CURL_CFLAGS = @CURL_CFLAGS@
 CURL_LIBS = @CURL_LIBS@
 CXX = @CXX@
@@ -321,6 +322,8 @@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
+EGL_CFLAGS = @EGL_CFLAGS@
+EGL_LIBS = @EGL_LIBS@
 EGREP = @EGREP@
 ERROR_CFLAGS = @ERROR_CFLAGS@
 ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
@@ -329,7 +332,6 @@
 EXIF_CFLAGS = @EXIF_CFLAGS@
 EXIF_LIBS = @EXIF_LIBS@
 FAAC_LIBS = @FAAC_LIBS@
-FAAD_IS_NEAAC = @FAAD_IS_NEAAC@
 FAAD_LIBS = @FAAD_LIBS@
 FFLAGS = @FFLAGS@
 FGREP = @FGREP@
@@ -348,8 +350,9 @@
 GIO_LIBS = @GIO_LIBS@
 GIO_UNIX_CFLAGS = @GIO_UNIX_CFLAGS@
 GIO_UNIX_LIBS = @GIO_UNIX_LIBS@
+GLES2_CFLAGS = @GLES2_CFLAGS@
+GLES2_LIBS = @GLES2_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
-GLIB_COMPILE_SCHEMAS = @GLIB_COMPILE_SCHEMAS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
@@ -366,16 +369,17 @@
 GMODULE_NO_EXPORT_LIBS = @GMODULE_NO_EXPORT_LIBS@
 GMSGFMT = @GMSGFMT@
 GMSGFMT_015 = @GMSGFMT_015@
+GNUSTL_CFLAGS = @GNUSTL_CFLAGS@
+GNUSTL_LIBS = @GNUSTL_LIBS@
 GRAPHENE_CFLAGS = @GRAPHENE_CFLAGS@
 GRAPHENE_LIBS = @GRAPHENE_LIBS@
 GREP = @GREP@
-GSETTINGS_CFLAGS = @GSETTINGS_CFLAGS@
-GSETTINGS_DISABLE_SCHEMAS_COMPILE = @GSETTINGS_DISABLE_SCHEMAS_COMPILE@
-GSETTINGS_LIBS = @GSETTINGS_LIBS@
 GSM_LIBS = @GSM_LIBS@
 GSTPB_PLUGINS_DIR = @GSTPB_PLUGINS_DIR@
 GSTPB_PREFIX = @GSTPB_PREFIX@
 GST_AGE = @GST_AGE@
+GST_ALLOCATORS_CFLAGS = @GST_ALLOCATORS_CFLAGS@
+GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
 GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
 GST_API_VERSION = @GST_API_VERSION@
 GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
@@ -401,6 +405,8 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PBUTILS_CFLAGS = @GST_PBUTILS_CFLAGS@
+GST_PBUTILS_LIBS = @GST_PBUTILS_LIBS@
 GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BAD_CFLAGS = @GST_PLUGINS_BAD_CFLAGS@
@@ -426,6 +432,8 @@
 GST_PREFIX = @GST_PREFIX@
 GST_REVISION = @GST_REVISION@
 GST_TOOLS_DIR = @GST_TOOLS_DIR@
+GST_VIDEO_CFLAGS = @GST_VIDEO_CFLAGS@
+GST_VIDEO_LIBS = @GST_VIDEO_LIBS@
 GTK3_CFLAGS = @GTK3_CFLAGS@
 GTK3_GL_CFLAGS = @GTK3_GL_CFLAGS@
 GTK3_GL_LIBS = @GTK3_GL_LIBS@
@@ -527,6 +535,7 @@
 LTLIBICONV = @LTLIBICONV@
 LTLIBINTL = @LTLIBINTL@
 LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
 MANIFEST_TOOL = @MANIFEST_TOOL@
@@ -540,8 +549,6 @@
 MODPLUG_LIBS = @MODPLUG_LIBS@
 MPEG2ENC_CFLAGS = @MPEG2ENC_CFLAGS@
 MPEG2ENC_LIBS = @MPEG2ENC_LIBS@
-MPG123_CFLAGS = @MPG123_CFLAGS@
-MPG123_LIBS = @MPG123_LIBS@
 MPLEX_CFLAGS = @MPLEX_CFLAGS@
 MPLEX_LDFLAGS = @MPLEX_LDFLAGS@
 MPLEX_LIBS = @MPLEX_LIBS@
@@ -557,6 +564,8 @@
 NETTLE_LIBS = @NETTLE_LIBS@
 NM = @NM@
 NMEDIT = @NMEDIT@
+NVENCODE_CFLAGS = @NVENCODE_CFLAGS@
+NVENCODE_LIBS = @NVENCODE_LIBS@
 OBJC = @OBJC@
 OBJCDEPMODE = @OBJCDEPMODE@
 OBJCFLAGS = @OBJCFLAGS@
@@ -614,16 +623,18 @@
 PYTHON_PLATFORM = @PYTHON_PLATFORM@
 PYTHON_PREFIX = @PYTHON_PREFIX@
 PYTHON_VERSION = @PYTHON_VERSION@
+QT_ANDROID_CFLAGS = @QT_ANDROID_CFLAGS@
+QT_ANDROID_LIBS = @QT_ANDROID_LIBS@
 QT_CFLAGS = @QT_CFLAGS@
 QT_LIBS = @QT_LIBS@
+QT_MAC_CFLAGS = @QT_MAC_CFLAGS@
+QT_MAC_LIBS = @QT_MAC_LIBS@
 QT_WAYLAND_CFLAGS = @QT_WAYLAND_CFLAGS@
 QT_WAYLAND_LIBS = @QT_WAYLAND_LIBS@
 QT_X11_CFLAGS = @QT_X11_CFLAGS@
 QT_X11_LIBS = @QT_X11_LIBS@
 RANLIB = @RANLIB@
 RCC = @RCC@
-RSVG_2_36_2_CFLAGS = @RSVG_2_36_2_CFLAGS@
-RSVG_2_36_2_LIBS = @RSVG_2_36_2_LIBS@
 RSVG_CFLAGS = @RSVG_CFLAGS@
 RSVG_LIBS = @RSVG_LIBS@
 RTMP_CFLAGS = @RTMP_CFLAGS@
@@ -675,6 +686,7 @@
 VOAACENC_LIBS = @VOAACENC_LIBS@
 VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
 VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VULKAN_LIBS = @VULKAN_LIBS@
 WARNING_CFLAGS = @WARNING_CFLAGS@
 WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
 WARNING_OBJCFLAGS = @WARNING_OBJCFLAGS@
@@ -685,6 +697,7 @@
 WAYLAND_LIBS = @WAYLAND_LIBS@
 WEBP_CFLAGS = @WEBP_CFLAGS@
 WEBP_LIBS = @WEBP_LIBS@
+WGET = @WGET@
 WILDMIDI_CFLAGS = @WILDMIDI_CFLAGS@
 WILDMIDI_LIBS = @WILDMIDI_LIBS@
 WINKS_LIBS = @WINKS_LIBS@
@@ -694,6 +707,8 @@
 X11_LIBS = @X11_LIBS@
 X265_CFLAGS = @X265_CFLAGS@
 X265_LIBS = @X265_LIBS@
+XCB_CFLAGS = @XCB_CFLAGS@
+XCB_LIBS = @XCB_LIBS@
 XCOMPOSITE_CFLAGS = @XCOMPOSITE_CFLAGS@
 XCOMPOSITE_LIBS = @XCOMPOSITE_LIBS@
 XGETTEXT = @XGETTEXT@
@@ -731,7 +746,6 @@
 docdir = @docdir@
 dvidir = @dvidir@
 exec_prefix = @exec_prefix@
-gsettingsschemadir = @gsettingsschemadir@
 host = @host@
 host_alias = @host_alias@
 host_cpu = @host_cpu@
diff --git a/ext/resindvd/resin-play b/ext/resindvd/resin-play
index 5066e5b..46b36cf 100755
--- a/ext/resindvd/resin-play
+++ b/ext/resindvd/resin-play
@@ -6,7 +6,7 @@
   DEVICE_OPT=""
 fi
 
-gst-launch rsndvdbin name=dvd "$DEVICE_OPT" \
+gst-launch-1.0 rsndvdbin name=dvd "$DEVICE_OPT" \
    dvdspu name=spu ! videoconvert ! videoscale ! ximagesink force-aspect-ratio=true \
    dvd. ! queue max-size-buffers=3 max-size-bytes=0 ! spu.video \
    dvd. ! spu.subpicture \
diff --git a/ext/resindvd/resin-play2 b/ext/resindvd/resin-play2
index e35a732..ed89a50 100755
--- a/ext/resindvd/resin-play2
+++ b/ext/resindvd/resin-play2
@@ -6,7 +6,7 @@
   DEVICE_OPT=""
 fi
 
-gst-launch rsndvdbin name=dvd "$DEVICE_OPT" \
+gst-launch-1.0 rsndvdbin name=dvd "$DEVICE_OPT" \
    dvdspu name=spu ! deinterlace ! xvimagesink force-aspect-ratio=false \
    dvd. ! queue max-size-buffers=3 max-size-bytes=0 ! spu.video \
    dvd. ! spu.subpicture \
diff --git a/ext/resindvd/resindvdbin.c b/ext/resindvd/resindvdbin.c
index f9cc5bd..107f9d6 100644
--- a/ext/resindvd/resindvdbin.c
+++ b/ext/resindvd/resindvdbin.c
@@ -32,7 +32,6 @@
 #include "resindvdbin.h"
 #include "resindvdsrc.h"
 #include "rsninputselector.h"
-// #include "rsnaudiomunge.h"
 #include "rsndec.h"
 #include "rsnparsetter.h"
 
@@ -43,11 +42,11 @@
 GST_DEBUG_CATEGORY_EXTERN (resindvd_debug);
 #define GST_CAT_DEFAULT resindvd_debug
 
-#define DVDBIN_LOCK(d) g_mutex_lock((d)->dvd_lock)
-#define DVDBIN_UNLOCK(d) g_mutex_unlock((d)->dvd_lock)
+#define DVDBIN_LOCK(d) g_mutex_lock(&(d)->dvd_lock)
+#define DVDBIN_UNLOCK(d) g_mutex_unlock(&(d)->dvd_lock)
 
-#define DVDBIN_PREROLL_LOCK(d) g_mutex_lock((d)->preroll_lock)
-#define DVDBIN_PREROLL_UNLOCK(d) g_mutex_unlock((d)->preroll_lock)
+#define DVDBIN_PREROLL_LOCK(d) g_mutex_lock(&(d)->preroll_lock)
+#define DVDBIN_PREROLL_UNLOCK(d) g_mutex_unlock(&(d)->preroll_lock)
 
 #define DEFAULT_DEVICE "/dev/dvd"
 enum
@@ -135,8 +134,8 @@
 static void
 rsn_dvdbin_init (RsnDvdBin * dvdbin)
 {
-  dvdbin->dvd_lock = g_mutex_new ();
-  dvdbin->preroll_lock = g_mutex_new ();
+  g_mutex_init (&dvdbin->dvd_lock);
+  g_mutex_init (&dvdbin->preroll_lock);
 }
 
 static void
@@ -144,8 +143,8 @@
 {
   RsnDvdBin *dvdbin = RESINDVDBIN (object);
 
-  g_mutex_free (dvdbin->dvd_lock);
-  g_mutex_free (dvdbin->preroll_lock);
+  g_mutex_clear (&dvdbin->dvd_lock);
+  g_mutex_clear (&dvdbin->preroll_lock);
   g_free (dvdbin->last_uri);
   g_free (dvdbin->device);
 
diff --git a/ext/resindvd/resindvdbin.h b/ext/resindvd/resindvdbin.h
index f2434c1..2eab516 100644
--- a/ext/resindvd/resindvdbin.h
+++ b/ext/resindvd/resindvdbin.h
@@ -58,8 +58,8 @@
   GstBin element;
 
   /* Protects pieces list and properties */
-  GMutex *dvd_lock;
-  GMutex *preroll_lock;
+  GMutex dvd_lock;
+  GMutex preroll_lock;
 
   gchar *device;
   gchar *last_uri;
diff --git a/ext/resindvd/resindvdsrc.c b/ext/resindvd/resindvdsrc.c
index 95d3ca1..505302b 100644
--- a/ext/resindvd/resindvdsrc.c
+++ b/ext/resindvd/resindvdsrc.c
@@ -249,10 +249,10 @@
     rsndvdsrc->faststart = DEFAULT_FASTSTART;
 
   rsndvdsrc->device = g_strdup (DEFAULT_DEVICE);
-  rsndvdsrc->dvd_lock = g_mutex_new ();
-  rsndvdsrc->branch_lock = g_mutex_new ();
+  g_mutex_init (&rsndvdsrc->dvd_lock);
+  g_mutex_init (&rsndvdsrc->branch_lock);
   rsndvdsrc->branching = FALSE;
-  rsndvdsrc->still_cond = g_cond_new ();
+  g_cond_init (&rsndvdsrc->still_cond);
 
   gst_base_src_set_format (GST_BASE_SRC (rsndvdsrc), GST_FORMAT_TIME);
 }
@@ -262,9 +262,9 @@
 {
   resinDvdSrc *src = RESINDVDSRC (object);
 
-  g_mutex_free (src->dvd_lock);
-  g_mutex_free (src->branch_lock);
-  g_cond_free (src->still_cond);
+  g_mutex_clear (&src->dvd_lock);
+  g_mutex_clear (&src->branch_lock);
+  g_cond_clear (&src->still_cond);
   g_free (src->device);
 
   gst_buffer_replace (&src->alloc_buf, NULL);
@@ -278,10 +278,10 @@
 {
   resinDvdSrc *src = RESINDVDSRC (bsrc);
 
-  g_mutex_lock (src->branch_lock);
+  g_mutex_lock (&src->branch_lock);
   src->branching = TRUE;
-  g_cond_broadcast (src->still_cond);
-  g_mutex_unlock (src->branch_lock);
+  g_cond_broadcast (&src->still_cond);
+  g_mutex_unlock (&src->branch_lock);
 
   return TRUE;
 }
@@ -291,9 +291,9 @@
 {
   resinDvdSrc *src = RESINDVDSRC (bsrc);
 
-  g_mutex_lock (src->branch_lock);
+  g_mutex_lock (&src->branch_lock);
   src->branching = FALSE;
-  g_mutex_unlock (src->branch_lock);
+  g_mutex_unlock (&src->branch_lock);
 
   return TRUE;
 }
@@ -356,7 +356,7 @@
   const char *disc_name;
   gchar lang[8];
 
-  g_mutex_lock (src->dvd_lock);
+  g_mutex_lock (&src->dvd_lock);
   if (!read_vts_info (src)) {
     GST_ELEMENT_ERROR (src, RESOURCE, OPEN_READ,
         (_("Could not read title information for DVD.")), GST_ERROR_SYSTEM);
@@ -440,7 +440,7 @@
   memset (src->cur_clut, 0, sizeof (guint32) * 16);
   src->cur_audio_phys_stream = -1;
 
-  g_mutex_unlock (src->dvd_lock);
+  g_mutex_unlock (&src->dvd_lock);
 
   return TRUE;
 
@@ -449,7 +449,7 @@
     dvdnav_close (src->dvdnav);
     src->dvdnav = NULL;
   }
-  g_mutex_unlock (src->dvd_lock);
+  g_mutex_unlock (&src->dvd_lock);
   return FALSE;
 }
 
@@ -543,7 +543,7 @@
   gboolean ret = TRUE;
   GstMessage *mouse_over_msg = NULL;
 
-  g_mutex_lock (src->dvd_lock);
+  g_mutex_lock (&src->dvd_lock);
 
   if (src->nav_clock_id) {
     gst_clock_id_unschedule (src->nav_clock_id);
@@ -610,7 +610,7 @@
     src->dvdread = NULL;
   }
 
-  g_mutex_unlock (src->dvd_lock);
+  g_mutex_unlock (&src->dvd_lock);
 
   if (mouse_over_msg)
     gst_element_post_message (GST_ELEMENT_CAST (src), mouse_over_msg);
@@ -654,7 +654,7 @@
 
     /* Now, send the events. We need to drop the dvd lock while doing so,
      * and then check after if we got flushed */
-    g_mutex_unlock (src->dvd_lock);
+    g_mutex_unlock (&src->dvd_lock);
     gst_pad_push_event (GST_BASE_SRC_PAD (src), still_event);
     gst_pad_push_event (GST_BASE_SRC_PAD (src), seg_event);
     if (hl_event) {
@@ -664,21 +664,21 @@
     if (cmds_changed)
       rsn_dvdsrc_send_commands_changed (src);
 
-    g_mutex_lock (src->dvd_lock);
+    g_mutex_lock (&src->dvd_lock);
 
-    g_mutex_lock (src->branch_lock);
+    g_mutex_lock (&src->branch_lock);
 
     src->in_still_state = TRUE;
   } else {
     GST_DEBUG_OBJECT (src,
         "Re-entering still wait with %" GST_TIME_FORMAT " remaining",
         GST_TIME_ARGS (src->still_time_remaining));
-    g_mutex_lock (src->branch_lock);
+    g_mutex_lock (&src->branch_lock);
   }
 
   if (src->branching) {
     GST_INFO_OBJECT (src, "Branching - aborting still");
-    g_mutex_unlock (src->branch_lock);
+    g_mutex_unlock (&src->branch_lock);
     return TRUE;
   }
 
@@ -690,49 +690,48 @@
      */
     src->need_segment = TRUE;
 
-    g_mutex_unlock (src->dvd_lock);
+    g_mutex_unlock (&src->dvd_lock);
     GST_LOG_OBJECT (src, "Entering cond_wait still");
-    g_cond_wait (src->still_cond, src->branch_lock);
+    g_cond_wait (&src->still_cond, &src->branch_lock);
     GST_LOG_OBJECT (src, "cond_wait still over, branching = %d",
         src->branching);
 
     if (src->branching) {
-      g_mutex_unlock (src->branch_lock);
-      g_mutex_lock (src->dvd_lock);
+      g_mutex_unlock (&src->branch_lock);
+      g_mutex_lock (&src->dvd_lock);
       return TRUE;
     }
     src->in_still_state = FALSE;
 
-    g_mutex_unlock (src->branch_lock);
-    g_mutex_lock (src->dvd_lock);
+    g_mutex_unlock (&src->branch_lock);
+    g_mutex_lock (&src->dvd_lock);
   } else {
-    GTimeVal end_time;
     gboolean was_signalled;
 
     if (src->still_time_remaining > 0) {
-      g_get_current_time (&end_time);
-      g_time_val_add (&end_time, src->still_time_remaining / GST_USECOND);
+      gint64 end_time;
+
+      end_time =
+          g_get_monotonic_time () + src->still_time_remaining / GST_USECOND;
 
       /* Implement timed stills by sleeping, possibly
        * in multiple steps if we get paused/unpaused */
-      g_mutex_unlock (src->dvd_lock);
+      g_mutex_unlock (&src->dvd_lock);
       GST_LOG_OBJECT (src, "cond_timed_wait still for %d sec", duration);
       was_signalled =
-          g_cond_timed_wait (src->still_cond, src->branch_lock, &end_time);
+          g_cond_wait_until (&src->still_cond, &src->branch_lock, end_time);
       was_signalled |= src->branching;
 
-      g_mutex_unlock (src->branch_lock);
-      g_mutex_lock (src->dvd_lock);
+      g_mutex_unlock (&src->branch_lock);
+      g_mutex_lock (&src->dvd_lock);
 
       if (was_signalled) {
         /* Signalled - must be flushing */
-        GTimeVal cur_time;
+        gint64 cur_time;
         GstClockTimeDiff remain;
 
-        g_get_current_time (&cur_time);
-        remain =
-            (end_time.tv_sec - cur_time.tv_sec) * GST_SECOND +
-            (end_time.tv_usec - cur_time.tv_usec) * GST_USECOND;
+        cur_time = g_get_monotonic_time ();
+        remain = (end_time - cur_time) * GST_USECOND;
         if (remain < 0)
           src->still_time_remaining = 0;
         else
@@ -769,9 +768,9 @@
           GST_TIME_ARGS (segment->position));
     }
 
-    g_mutex_unlock (src->dvd_lock);
+    g_mutex_unlock (&src->dvd_lock);
     gst_pad_push_event (GST_BASE_SRC_PAD (src), still_event);
-    g_mutex_lock (src->dvd_lock);
+    g_mutex_lock (&src->dvd_lock);
   }
 
   return TRUE;
@@ -930,10 +929,10 @@
   dvdnav_ret = dvdnav_get_next_block (src->dvdnav, mmap.data, &event, &len);
   if (dvdnav_ret != DVDNAV_STATUS_OK)
     goto read_error;
-  g_mutex_lock (src->branch_lock);
+  g_mutex_lock (&src->branch_lock);
   if (src->branching)
     goto branching;
-  g_mutex_unlock (src->branch_lock);
+  g_mutex_unlock (&src->branch_lock);
 
   switch (event) {
     case DVDNAV_BLOCK_OK:
@@ -970,9 +969,9 @@
       }
 
       GST_LOG_OBJECT (src, "NAV packet start TS %" GST_TIME_FORMAT
-          " end TS %" GST_TIME_FORMAT " base %" G_GINT64_FORMAT " %s",
+          " end TS %" GST_TIME_FORMAT " base %" GST_STIME_FORMAT " %s",
           GST_TIME_ARGS (new_start_ptm), GST_TIME_ARGS (new_end_ptm),
-          new_base_time, discont ? "discont" : "");
+          GST_STIME_ARGS (new_base_time), discont ? "discont" : "");
 
 #if 0
       g_print ("NAV packet start TS %" GST_TIME_FORMAT
@@ -1033,10 +1032,10 @@
       if (!rsn_dvdsrc_do_still (src, info->length))
         goto internal_error;
 
-      g_mutex_lock (src->branch_lock);
+      g_mutex_lock (&src->branch_lock);
       if (src->branching)
         goto branching;
-      g_mutex_unlock (src->branch_lock);
+      g_mutex_unlock (&src->branch_lock);
       break;
     }
     case DVDNAV_WAIT:
@@ -1148,11 +1147,11 @@
     GstEvent *hl_event = src->highlight_event;
 
     src->highlight_event = NULL;
-    g_mutex_unlock (src->dvd_lock);
+    g_mutex_unlock (&src->dvd_lock);
     GST_DEBUG_OBJECT (src, "Sending highlight event - button %d",
         src->active_button);
     gst_pad_push_event (GST_BASE_SRC_PAD (src), hl_event);
-    g_mutex_lock (src->dvd_lock);
+    g_mutex_lock (&src->dvd_lock);
   }
 
   return ret;
@@ -1184,7 +1183,7 @@
   }
 branching:
   {
-    g_mutex_unlock (src->branch_lock);
+    g_mutex_unlock (&src->branch_lock);
     gst_buffer_unmap (src->alloc_buf, &mmap);
     return GST_FLOW_FLUSHING;
   }
@@ -1215,7 +1214,7 @@
   cmds[n_cmds++] = GST_NAVIGATION_COMMAND_DVD_ANGLE_MENU;
   cmds[n_cmds++] = GST_NAVIGATION_COMMAND_DVD_CHAPTER_MENU;
 
-  g_mutex_lock (src->dvd_lock);
+  g_mutex_lock (&src->dvd_lock);
 
   /* Multiple angles available? */
   if (src->n_angles > 1) {
@@ -1237,7 +1236,7 @@
     cmds[n_cmds++] = GST_NAVIGATION_COMMAND_UP;
   if (src->cur_btn_mask & RSN_BTN_DOWN)
     cmds[n_cmds++] = GST_NAVIGATION_COMMAND_DOWN;
-  g_mutex_unlock (src->dvd_lock);
+  g_mutex_unlock (&src->dvd_lock);
 
   gst_navigation_query_set_commandsv (query, n_cmds, cmds);
 
@@ -1250,13 +1249,13 @@
   gint cur_agl, n_angles;
   gboolean res = FALSE;
 
-  g_mutex_lock (src->dvd_lock);
+  g_mutex_lock (&src->dvd_lock);
   if (dvdnav_get_angle_info (src->dvdnav, &cur_agl,
           &n_angles) == DVDNAV_STATUS_OK) {
     gst_navigation_query_set_angles (query, cur_agl, n_angles);
     res = TRUE;
   }
-  g_mutex_unlock (src->dvd_lock);
+  g_mutex_unlock (&src->dvd_lock);
 
   return res;
 }
@@ -1321,10 +1320,10 @@
 
   *outbuf = NULL;
 
-  g_mutex_lock (src->dvd_lock);
+  g_mutex_lock (&src->dvd_lock);
   ret = rsn_dvdsrc_prepare_next_block (src, TRUE);
   if (ret != GST_FLOW_OK) {
-    g_mutex_unlock (src->dvd_lock);
+    g_mutex_unlock (&src->dvd_lock);
     return ret;
   }
 
@@ -1359,7 +1358,7 @@
     src->need_tag_update = FALSE;
   }
 
-  g_mutex_unlock (src->dvd_lock);
+  g_mutex_unlock (&src->dvd_lock);
 
   /* Push in-band events now that we've dropped the dvd_lock, before
    * we change segment */
@@ -1416,7 +1415,7 @@
     gst_pad_push_event (GST_BASE_SRC_PAD (src), tag_event);
     tags = NULL;
   }
-  g_mutex_lock (src->dvd_lock);
+  g_mutex_lock (&src->dvd_lock);
 
   if (src->next_buf != NULL) {
     /* Now that we're in the new segment, we can enqueue any nav packet
@@ -1446,7 +1445,7 @@
   /* Schedule a clock callback for the any pending nav packet */
   rsn_dvdsrc_check_nav_blocks (src);
 
-  g_mutex_unlock (src->dvd_lock);
+  g_mutex_unlock (&src->dvd_lock);
 
   if (highlight_event) {
     GST_LOG_OBJECT (src, "Pushing highlight event with TS %" GST_TIME_FORMAT,
@@ -1534,7 +1533,7 @@
   if (result == RSN_NAV_RESULT_HIGHLIGHT) {
     /* If we're *only* changing the highlight, wake up the still condition.
      * If we're branching, that will happen anyway */
-    g_cond_broadcast (src->still_cond);
+    g_cond_broadcast (&src->still_cond);
   }
 
   return result;
@@ -1645,7 +1644,7 @@
 
       GST_DEBUG ("dvdnavsrc got a keypress: %s", key);
 
-      g_mutex_lock (src->dvd_lock);
+      g_mutex_lock (&src->dvd_lock);
       have_lock = TRUE;
       if (!src->running)
         goto not_running;
@@ -1700,7 +1699,7 @@
       if (!gst_navigation_event_parse_mouse_move_event (event, &x, &y))
         return FALSE;
 
-      g_mutex_lock (src->dvd_lock);
+      g_mutex_lock (&src->dvd_lock);
       have_lock = TRUE;
       if (!src->running)
         goto not_running;
@@ -1735,7 +1734,7 @@
 
       GST_DEBUG_OBJECT (src, "Got click at %g, %g", x, y);
 
-      g_mutex_lock (src->dvd_lock);
+      g_mutex_lock (&src->dvd_lock);
       have_lock = TRUE;
       if (!src->running)
         goto not_running;
@@ -1754,7 +1753,7 @@
       if (command == GST_NAVIGATION_COMMAND_INVALID)
         return FALSE;
 
-      g_mutex_lock (src->dvd_lock);
+      g_mutex_lock (&src->dvd_lock);
       have_lock = TRUE;
       if (!src->running)
         goto not_running;
@@ -1786,16 +1785,16 @@
       GstEvent *seek;
 
       GST_DEBUG_OBJECT (src, "Processing flush and jump");
-      g_mutex_lock (src->branch_lock);
+      g_mutex_lock (&src->branch_lock);
       src->branching = TRUE;
-      g_cond_broadcast (src->still_cond);
-      g_mutex_unlock (src->branch_lock);
+      g_cond_broadcast (&src->still_cond);
+      g_mutex_unlock (&src->branch_lock);
 
       hl_event = src->highlight_event;
       src->highlight_event = NULL;
       src->active_highlight = FALSE;
 
-      g_mutex_unlock (src->dvd_lock);
+      g_mutex_unlock (&src->dvd_lock);
 
       if (hl_event) {
         GST_DEBUG_OBJECT (src, "Sending highlight change event - button: %d",
@@ -1809,7 +1808,7 @@
       src->flushing_seek = TRUE;
       gst_element_send_event (GST_ELEMENT (src), seek);
 
-      g_mutex_lock (src->dvd_lock);
+      g_mutex_lock (&src->dvd_lock);
 
       rsn_dvdsrc_update_highlight (src);
     }
@@ -1833,7 +1832,7 @@
     cmds_changed = src->commands_changed;
     src->commands_changed = FALSE;
 
-    g_mutex_unlock (src->dvd_lock);
+    g_mutex_unlock (&src->dvd_lock);
 
     if (hl_event) {
       GST_DEBUG_OBJECT (src, "Sending highlight change event - button: %d",
@@ -1856,7 +1855,7 @@
   return TRUE;
 not_running:
   if (have_lock)
-    g_mutex_unlock (src->dvd_lock);
+    g_mutex_unlock (&src->dvd_lock);
   GST_DEBUG_OBJECT (src, "Element not started. Ignoring navigation event");
   return FALSE;
 }
@@ -2289,7 +2288,7 @@
 
   if (src->highlight_event && src->in_still_state) {
     GST_LOG_OBJECT (src, "Signalling still condition due to highlight change");
-    g_cond_broadcast (src->still_cond);
+    g_cond_broadcast (&src->still_cond);
   }
 }
 
@@ -2323,7 +2322,7 @@
       GST_TIME_FORMAT, GST_TIME_ARGS (time),
       GST_TIME_ARGS (gst_clock_get_time (clock) - base_time));
 
-  g_mutex_lock (src->dvd_lock);
+  g_mutex_lock (&src->dvd_lock);
 
   /* Destroy the clock id that caused this callback */
   if (src->nav_clock_id) {
@@ -2358,7 +2357,7 @@
     rsn_dvdsrc_schedule_nav_cb (src, next_nav);
   }
 
-  g_mutex_unlock (src->dvd_lock);
+  g_mutex_unlock (&src->dvd_lock);
 
   return TRUE;
 }
@@ -2394,11 +2393,11 @@
   GST_LOG_OBJECT (src, "Schedule nav pack for running TS %" GST_TIME_FORMAT,
       GST_TIME_ARGS (next_nav->running_ts));
 
-  g_mutex_unlock (src->dvd_lock);
+  g_mutex_unlock (&src->dvd_lock);
   gst_clock_id_wait_async (src->nav_clock_id, rsn_dvdsrc_nav_clock_cb, src,
       NULL);
   gst_object_unref (clock);
-  g_mutex_lock (src->dvd_lock);
+  g_mutex_lock (&src->dvd_lock);
 }
 
 /* Called with dvd_lock held */
@@ -2514,14 +2513,14 @@
     case GST_STATE_CHANGE_PLAYING_TO_PAUSED:
       GST_DEBUG_OBJECT (element, "Switching to PAUSED");
       /* Unschedule any NAV packet callback */
-      g_mutex_lock (src->dvd_lock);
+      g_mutex_lock (&src->dvd_lock);
       src->in_playing = FALSE;
       if (src->nav_clock_id) {
         gst_clock_id_unschedule (src->nav_clock_id);
         gst_clock_id_unref (src->nav_clock_id);
         src->nav_clock_id = NULL;
       }
-      g_mutex_unlock (src->dvd_lock);
+      g_mutex_unlock (&src->dvd_lock);
       break;
     default:
       break;
@@ -2535,10 +2534,10 @@
     case GST_STATE_CHANGE_PAUSED_TO_PLAYING:
       GST_DEBUG_OBJECT (element, "Switching to PLAYING");
       /* Kick off the NAV packet callback if needed */
-      g_mutex_lock (src->dvd_lock);
+      g_mutex_lock (&src->dvd_lock);
       src->in_playing = TRUE;
       rsn_dvdsrc_check_nav_blocks (src);
-      g_mutex_unlock (src->dvd_lock);
+      g_mutex_unlock (&src->dvd_lock);
       break;
     case GST_STATE_CHANGE_READY_TO_PAUSED:
       rsn_dvdsrc_post_title_info (element);
@@ -2561,9 +2560,9 @@
   switch (GST_QUERY_TYPE (query)) {
     case GST_QUERY_DURATION:
       gst_query_parse_duration (query, &format, NULL);
-      g_mutex_lock (src->dvd_lock);
+      g_mutex_lock (&src->dvd_lock);
       if (!src->running) {
-        g_mutex_unlock (src->dvd_lock);
+        g_mutex_unlock (&src->dvd_lock);
         break;
       }
 
@@ -2598,14 +2597,14 @@
           }
         }
       }
-      g_mutex_unlock (src->dvd_lock);
+      g_mutex_unlock (&src->dvd_lock);
       break;
     case GST_QUERY_POSITION:
       gst_query_parse_position (query, &format, NULL);
 
-      g_mutex_lock (src->dvd_lock);
+      g_mutex_lock (&src->dvd_lock);
       if (!src->running) {
-        g_mutex_unlock (src->dvd_lock);
+        g_mutex_unlock (&src->dvd_lock);
         break;
       }
       if (format == title_format) {
@@ -2627,7 +2626,7 @@
           res = TRUE;
         }
       }
-      g_mutex_unlock (src->dvd_lock);
+      g_mutex_unlock (&src->dvd_lock);
       break;
     case GST_QUERY_CUSTOM:
     {
@@ -2837,14 +2836,14 @@
   } else {
     /* Handle other formats: Time, title, chapter, angle */
     if (segment->format == GST_FORMAT_TIME) {
-      g_mutex_lock (src->dvd_lock);
+      g_mutex_lock (&src->dvd_lock);
       src->discont = TRUE;
       ret = rsn_dvdsrc_seek_to_time (src, segment->start);
-      g_mutex_unlock (src->dvd_lock);
+      g_mutex_unlock (&src->dvd_lock);
     } else if (segment->format == title_format) {
       gint titles;
 
-      g_mutex_lock (src->dvd_lock);
+      g_mutex_lock (&src->dvd_lock);
       if (src->running &&
           dvdnav_get_number_of_titles (src->dvdnav,
               &titles) == DVDNAV_STATUS_OK) {
@@ -2854,9 +2853,9 @@
           src->discont = TRUE;
         }
       }
-      g_mutex_unlock (src->dvd_lock);
+      g_mutex_unlock (&src->dvd_lock);
     } else if (segment->format == chapter_format) {
-      g_mutex_lock (src->dvd_lock);
+      g_mutex_lock (&src->dvd_lock);
       if (src->running) {
         gint32 title, chapters, x;
         if (dvdnav_current_title_info (src->dvdnav, &title, &x) ==
@@ -2884,7 +2883,7 @@
           }
         }
       }
-      g_mutex_unlock (src->dvd_lock);
+      g_mutex_unlock (&src->dvd_lock);
     }
   }
 
@@ -2894,7 +2893,7 @@
 
     if (src->flushing_seek) {
       GstMessage *mouse_over_msg = NULL;
-      g_mutex_lock (src->dvd_lock);
+      g_mutex_lock (&src->dvd_lock);
       src->flushing_seek = FALSE;
 
       gst_buffer_replace (&src->next_buf, NULL);
@@ -2913,7 +2912,7 @@
             gst_navigation_message_new_mouse_over ((GstObject *) src, FALSE);
         src->was_mouse_over = FALSE;
       }
-      g_mutex_unlock (src->dvd_lock);
+      g_mutex_unlock (&src->dvd_lock);
 
       if (mouse_over_msg)
         gst_element_post_message (GST_ELEMENT_CAST (src), mouse_over_msg);
diff --git a/ext/resindvd/resindvdsrc.h b/ext/resindvd/resindvdsrc.h
index 5804c07..cc2bb04 100644
--- a/ext/resindvd/resindvdsrc.h
+++ b/ext/resindvd/resindvdsrc.h
@@ -50,9 +50,9 @@
 
   gboolean	faststart;
 
-  GMutex	*dvd_lock;
-  GCond		*still_cond;
-  GMutex	*branch_lock;
+  GMutex	dvd_lock;
+  GCond		still_cond;
+  GMutex	branch_lock;
   gboolean	branching;
 
   gchar		*device;
diff --git a/ext/rsvg/Makefile.in b/ext/rsvg/Makefile.in
index 95b9d99..210403a 100644
--- a/ext/rsvg/Makefile.in
+++ b/ext/rsvg/Makefile.in
@@ -116,16 +116,15 @@
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
 	$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
-	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gsettings.m4 \
-	$(top_srcdir)/m4/gst-fionread.m4 $(top_srcdir)/m4/gst-sdl.m4 \
-	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
-	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
-	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libgcrypt.m4 \
-	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
-	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
-	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
-	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
-	$(top_srcdir)/configure.ac
+	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gst-fionread.m4 \
+	$(top_srcdir)/m4/gst-sdl.m4 $(top_srcdir)/m4/iconv.m4 \
+	$(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \
+	$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
+	$(top_srcdir)/m4/libgcrypt.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
+	$(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \
@@ -276,6 +275,8 @@
 CLUTTER_X11_LIBS = @CLUTTER_X11_LIBS@
 CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
+CUDA_CFLAGS = @CUDA_CFLAGS@
+CUDA_LIBS = @CUDA_LIBS@
 CURL_CFLAGS = @CURL_CFLAGS@
 CURL_LIBS = @CURL_LIBS@
 CXX = @CXX@
@@ -313,6 +314,8 @@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
+EGL_CFLAGS = @EGL_CFLAGS@
+EGL_LIBS = @EGL_LIBS@
 EGREP = @EGREP@
 ERROR_CFLAGS = @ERROR_CFLAGS@
 ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
@@ -321,7 +324,6 @@
 EXIF_CFLAGS = @EXIF_CFLAGS@
 EXIF_LIBS = @EXIF_LIBS@
 FAAC_LIBS = @FAAC_LIBS@
-FAAD_IS_NEAAC = @FAAD_IS_NEAAC@
 FAAD_LIBS = @FAAD_LIBS@
 FFLAGS = @FFLAGS@
 FGREP = @FGREP@
@@ -340,8 +342,9 @@
 GIO_LIBS = @GIO_LIBS@
 GIO_UNIX_CFLAGS = @GIO_UNIX_CFLAGS@
 GIO_UNIX_LIBS = @GIO_UNIX_LIBS@
+GLES2_CFLAGS = @GLES2_CFLAGS@
+GLES2_LIBS = @GLES2_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
-GLIB_COMPILE_SCHEMAS = @GLIB_COMPILE_SCHEMAS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
@@ -358,16 +361,17 @@
 GMODULE_NO_EXPORT_LIBS = @GMODULE_NO_EXPORT_LIBS@
 GMSGFMT = @GMSGFMT@
 GMSGFMT_015 = @GMSGFMT_015@
+GNUSTL_CFLAGS = @GNUSTL_CFLAGS@
+GNUSTL_LIBS = @GNUSTL_LIBS@
 GRAPHENE_CFLAGS = @GRAPHENE_CFLAGS@
 GRAPHENE_LIBS = @GRAPHENE_LIBS@
 GREP = @GREP@
-GSETTINGS_CFLAGS = @GSETTINGS_CFLAGS@
-GSETTINGS_DISABLE_SCHEMAS_COMPILE = @GSETTINGS_DISABLE_SCHEMAS_COMPILE@
-GSETTINGS_LIBS = @GSETTINGS_LIBS@
 GSM_LIBS = @GSM_LIBS@
 GSTPB_PLUGINS_DIR = @GSTPB_PLUGINS_DIR@
 GSTPB_PREFIX = @GSTPB_PREFIX@
 GST_AGE = @GST_AGE@
+GST_ALLOCATORS_CFLAGS = @GST_ALLOCATORS_CFLAGS@
+GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
 GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
 GST_API_VERSION = @GST_API_VERSION@
 GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
@@ -393,6 +397,8 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PBUTILS_CFLAGS = @GST_PBUTILS_CFLAGS@
+GST_PBUTILS_LIBS = @GST_PBUTILS_LIBS@
 GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BAD_CFLAGS = @GST_PLUGINS_BAD_CFLAGS@
@@ -418,6 +424,8 @@
 GST_PREFIX = @GST_PREFIX@
 GST_REVISION = @GST_REVISION@
 GST_TOOLS_DIR = @GST_TOOLS_DIR@
+GST_VIDEO_CFLAGS = @GST_VIDEO_CFLAGS@
+GST_VIDEO_LIBS = @GST_VIDEO_LIBS@
 GTK3_CFLAGS = @GTK3_CFLAGS@
 GTK3_GL_CFLAGS = @GTK3_GL_CFLAGS@
 GTK3_GL_LIBS = @GTK3_GL_LIBS@
@@ -519,6 +527,7 @@
 LTLIBICONV = @LTLIBICONV@
 LTLIBINTL = @LTLIBINTL@
 LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
 MANIFEST_TOOL = @MANIFEST_TOOL@
@@ -532,8 +541,6 @@
 MODPLUG_LIBS = @MODPLUG_LIBS@
 MPEG2ENC_CFLAGS = @MPEG2ENC_CFLAGS@
 MPEG2ENC_LIBS = @MPEG2ENC_LIBS@
-MPG123_CFLAGS = @MPG123_CFLAGS@
-MPG123_LIBS = @MPG123_LIBS@
 MPLEX_CFLAGS = @MPLEX_CFLAGS@
 MPLEX_LDFLAGS = @MPLEX_LDFLAGS@
 MPLEX_LIBS = @MPLEX_LIBS@
@@ -549,6 +556,8 @@
 NETTLE_LIBS = @NETTLE_LIBS@
 NM = @NM@
 NMEDIT = @NMEDIT@
+NVENCODE_CFLAGS = @NVENCODE_CFLAGS@
+NVENCODE_LIBS = @NVENCODE_LIBS@
 OBJC = @OBJC@
 OBJCDEPMODE = @OBJCDEPMODE@
 OBJCFLAGS = @OBJCFLAGS@
@@ -606,16 +615,18 @@
 PYTHON_PLATFORM = @PYTHON_PLATFORM@
 PYTHON_PREFIX = @PYTHON_PREFIX@
 PYTHON_VERSION = @PYTHON_VERSION@
+QT_ANDROID_CFLAGS = @QT_ANDROID_CFLAGS@
+QT_ANDROID_LIBS = @QT_ANDROID_LIBS@
 QT_CFLAGS = @QT_CFLAGS@
 QT_LIBS = @QT_LIBS@
+QT_MAC_CFLAGS = @QT_MAC_CFLAGS@
+QT_MAC_LIBS = @QT_MAC_LIBS@
 QT_WAYLAND_CFLAGS = @QT_WAYLAND_CFLAGS@
 QT_WAYLAND_LIBS = @QT_WAYLAND_LIBS@
 QT_X11_CFLAGS = @QT_X11_CFLAGS@
 QT_X11_LIBS = @QT_X11_LIBS@
 RANLIB = @RANLIB@
 RCC = @RCC@
-RSVG_2_36_2_CFLAGS = @RSVG_2_36_2_CFLAGS@
-RSVG_2_36_2_LIBS = @RSVG_2_36_2_LIBS@
 RSVG_CFLAGS = @RSVG_CFLAGS@
 RSVG_LIBS = @RSVG_LIBS@
 RTMP_CFLAGS = @RTMP_CFLAGS@
@@ -667,6 +678,7 @@
 VOAACENC_LIBS = @VOAACENC_LIBS@
 VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
 VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VULKAN_LIBS = @VULKAN_LIBS@
 WARNING_CFLAGS = @WARNING_CFLAGS@
 WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
 WARNING_OBJCFLAGS = @WARNING_OBJCFLAGS@
@@ -677,6 +689,7 @@
 WAYLAND_LIBS = @WAYLAND_LIBS@
 WEBP_CFLAGS = @WEBP_CFLAGS@
 WEBP_LIBS = @WEBP_LIBS@
+WGET = @WGET@
 WILDMIDI_CFLAGS = @WILDMIDI_CFLAGS@
 WILDMIDI_LIBS = @WILDMIDI_LIBS@
 WINKS_LIBS = @WINKS_LIBS@
@@ -686,6 +699,8 @@
 X11_LIBS = @X11_LIBS@
 X265_CFLAGS = @X265_CFLAGS@
 X265_LIBS = @X265_LIBS@
+XCB_CFLAGS = @XCB_CFLAGS@
+XCB_LIBS = @XCB_LIBS@
 XCOMPOSITE_CFLAGS = @XCOMPOSITE_CFLAGS@
 XCOMPOSITE_LIBS = @XCOMPOSITE_LIBS@
 XGETTEXT = @XGETTEXT@
@@ -723,7 +738,6 @@
 docdir = @docdir@
 dvidir = @dvidir@
 exec_prefix = @exec_prefix@
-gsettingsschemadir = @gsettingsschemadir@
 host = @host@
 host_alias = @host_alias@
 host_cpu = @host_cpu@
diff --git a/ext/rsvg/gstrsvgdec.c b/ext/rsvg/gstrsvgdec.c
index 17ebcb1..d87c6ca 100644
--- a/ext/rsvg/gstrsvgdec.c
+++ b/ext/rsvg/gstrsvgdec.c
@@ -25,7 +25,7 @@
  * <refsect2>
  * <title>Example launch lines</title>
  * |[
- * gst-launch filesrc location=image.svg ! rsvgdec ! imagefreeze ! videoconvert ! autovideosink
+ * gst-launch-1.0 filesrc location=image.svg ! rsvgdec ! imagefreeze ! videoconvert ! autovideosink
  * ]| render and show a svg image.
  * </refsect2>
  */
diff --git a/ext/rsvg/gstrsvgdec.h b/ext/rsvg/gstrsvgdec.h
index 8d7173b..3770020 100644
--- a/ext/rsvg/gstrsvgdec.h
+++ b/ext/rsvg/gstrsvgdec.h
@@ -27,9 +27,6 @@
 #include <cairo/cairo.h>
 
 #include <librsvg/rsvg.h>
-#ifndef HAVE_RSVG_2_36_2
-#include <librsvg/rsvg-cairo.h>
-#endif
 
 G_BEGIN_DECLS
 
diff --git a/ext/rsvg/gstrsvgoverlay.c b/ext/rsvg/gstrsvgoverlay.c
index 6c68113..69f99ad 100644
--- a/ext/rsvg/gstrsvgoverlay.c
+++ b/ext/rsvg/gstrsvgoverlay.c
@@ -47,13 +47,13 @@
  * <refsect2>
  * <title>Example launch lines</title>
  * |[
- * gst-launch -v videotestsrc ! videoconvert ! rsvgoverlay location=foo.svg ! videoconvert ! autovideosink
+ * gst-launch-1.0 -v videotestsrc ! videoconvert ! rsvgoverlay location=foo.svg ! videoconvert ! autovideosink
  * ]| specifies the SVG location through the filename property.
  * |[
- * gst-launch -v videotestsrc ! videoconvert ! rsvgoverlay name=overlay ! videoconvert ! autovideosink filesrc location=foo.svg ! image/svg ! overlay.data_sink
+ * gst-launch-1.0 -v videotestsrc ! videoconvert ! rsvgoverlay name=overlay ! videoconvert ! autovideosink filesrc location=foo.svg ! image/svg ! overlay.data_sink
  * ]| does the same by feeding data through the data_sink pad. You can also specify the SVG data itself as parameter:
  * |[
- * gst-launch -v videotestsrc ! videoconvert ! rsvgoverlay data='&lt;svg viewBox="0 0 800 600"&gt;&lt;image x="80%" y="80%" width="10%" height="10%" xlink:href="foo.jpg" /&gt;&lt;/svg&gt;' ! videoconvert ! autovideosink
+ * gst-launch-1.0 -v videotestsrc ! videoconvert ! rsvgoverlay data='&lt;svg viewBox="0 0 800 600"&gt;&lt;image x="80%" y="80%" width="10%" height="10%" xlink:href="foo.jpg" /&gt;&lt;/svg&gt;' ! videoconvert ! autovideosink
  * ]|
  * </refsect2>
  */
diff --git a/ext/rsvg/gstrsvgoverlay.h b/ext/rsvg/gstrsvgoverlay.h
index 151d094..9cd00fa 100644
--- a/ext/rsvg/gstrsvgoverlay.h
+++ b/ext/rsvg/gstrsvgoverlay.h
@@ -21,9 +21,6 @@
 #define __GST_RSVG_OVERLAY_H__
 
 #include <librsvg/rsvg.h>
-#ifndef HAVE_RSVG_2_36_2
-#include <librsvg/rsvg-cairo.h>
-#endif
 #include <gst/gst.h>
 #include <gst/video/video.h>
 #include <gst/video/gstvideofilter.h>
diff --git a/ext/rtmp/Makefile.in b/ext/rtmp/Makefile.in
index ec8d861..d99969a 100644
--- a/ext/rtmp/Makefile.in
+++ b/ext/rtmp/Makefile.in
@@ -116,16 +116,15 @@
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
 	$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
-	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gsettings.m4 \
-	$(top_srcdir)/m4/gst-fionread.m4 $(top_srcdir)/m4/gst-sdl.m4 \
-	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
-	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
-	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libgcrypt.m4 \
-	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
-	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
-	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
-	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
-	$(top_srcdir)/configure.ac
+	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gst-fionread.m4 \
+	$(top_srcdir)/m4/gst-sdl.m4 $(top_srcdir)/m4/iconv.m4 \
+	$(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \
+	$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
+	$(top_srcdir)/m4/libgcrypt.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
+	$(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \
@@ -276,6 +275,8 @@
 CLUTTER_X11_LIBS = @CLUTTER_X11_LIBS@
 CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
+CUDA_CFLAGS = @CUDA_CFLAGS@
+CUDA_LIBS = @CUDA_LIBS@
 CURL_CFLAGS = @CURL_CFLAGS@
 CURL_LIBS = @CURL_LIBS@
 CXX = @CXX@
@@ -313,6 +314,8 @@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
+EGL_CFLAGS = @EGL_CFLAGS@
+EGL_LIBS = @EGL_LIBS@
 EGREP = @EGREP@
 ERROR_CFLAGS = @ERROR_CFLAGS@
 ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
@@ -321,7 +324,6 @@
 EXIF_CFLAGS = @EXIF_CFLAGS@
 EXIF_LIBS = @EXIF_LIBS@
 FAAC_LIBS = @FAAC_LIBS@
-FAAD_IS_NEAAC = @FAAD_IS_NEAAC@
 FAAD_LIBS = @FAAD_LIBS@
 FFLAGS = @FFLAGS@
 FGREP = @FGREP@
@@ -340,8 +342,9 @@
 GIO_LIBS = @GIO_LIBS@
 GIO_UNIX_CFLAGS = @GIO_UNIX_CFLAGS@
 GIO_UNIX_LIBS = @GIO_UNIX_LIBS@
+GLES2_CFLAGS = @GLES2_CFLAGS@
+GLES2_LIBS = @GLES2_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
-GLIB_COMPILE_SCHEMAS = @GLIB_COMPILE_SCHEMAS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
@@ -358,16 +361,17 @@
 GMODULE_NO_EXPORT_LIBS = @GMODULE_NO_EXPORT_LIBS@
 GMSGFMT = @GMSGFMT@
 GMSGFMT_015 = @GMSGFMT_015@
+GNUSTL_CFLAGS = @GNUSTL_CFLAGS@
+GNUSTL_LIBS = @GNUSTL_LIBS@
 GRAPHENE_CFLAGS = @GRAPHENE_CFLAGS@
 GRAPHENE_LIBS = @GRAPHENE_LIBS@
 GREP = @GREP@
-GSETTINGS_CFLAGS = @GSETTINGS_CFLAGS@
-GSETTINGS_DISABLE_SCHEMAS_COMPILE = @GSETTINGS_DISABLE_SCHEMAS_COMPILE@
-GSETTINGS_LIBS = @GSETTINGS_LIBS@
 GSM_LIBS = @GSM_LIBS@
 GSTPB_PLUGINS_DIR = @GSTPB_PLUGINS_DIR@
 GSTPB_PREFIX = @GSTPB_PREFIX@
 GST_AGE = @GST_AGE@
+GST_ALLOCATORS_CFLAGS = @GST_ALLOCATORS_CFLAGS@
+GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
 GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
 GST_API_VERSION = @GST_API_VERSION@
 GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
@@ -393,6 +397,8 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PBUTILS_CFLAGS = @GST_PBUTILS_CFLAGS@
+GST_PBUTILS_LIBS = @GST_PBUTILS_LIBS@
 GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BAD_CFLAGS = @GST_PLUGINS_BAD_CFLAGS@
@@ -418,6 +424,8 @@
 GST_PREFIX = @GST_PREFIX@
 GST_REVISION = @GST_REVISION@
 GST_TOOLS_DIR = @GST_TOOLS_DIR@
+GST_VIDEO_CFLAGS = @GST_VIDEO_CFLAGS@
+GST_VIDEO_LIBS = @GST_VIDEO_LIBS@
 GTK3_CFLAGS = @GTK3_CFLAGS@
 GTK3_GL_CFLAGS = @GTK3_GL_CFLAGS@
 GTK3_GL_LIBS = @GTK3_GL_LIBS@
@@ -519,6 +527,7 @@
 LTLIBICONV = @LTLIBICONV@
 LTLIBINTL = @LTLIBINTL@
 LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
 MANIFEST_TOOL = @MANIFEST_TOOL@
@@ -532,8 +541,6 @@
 MODPLUG_LIBS = @MODPLUG_LIBS@
 MPEG2ENC_CFLAGS = @MPEG2ENC_CFLAGS@
 MPEG2ENC_LIBS = @MPEG2ENC_LIBS@
-MPG123_CFLAGS = @MPG123_CFLAGS@
-MPG123_LIBS = @MPG123_LIBS@
 MPLEX_CFLAGS = @MPLEX_CFLAGS@
 MPLEX_LDFLAGS = @MPLEX_LDFLAGS@
 MPLEX_LIBS = @MPLEX_LIBS@
@@ -549,6 +556,8 @@
 NETTLE_LIBS = @NETTLE_LIBS@
 NM = @NM@
 NMEDIT = @NMEDIT@
+NVENCODE_CFLAGS = @NVENCODE_CFLAGS@
+NVENCODE_LIBS = @NVENCODE_LIBS@
 OBJC = @OBJC@
 OBJCDEPMODE = @OBJCDEPMODE@
 OBJCFLAGS = @OBJCFLAGS@
@@ -606,16 +615,18 @@
 PYTHON_PLATFORM = @PYTHON_PLATFORM@
 PYTHON_PREFIX = @PYTHON_PREFIX@
 PYTHON_VERSION = @PYTHON_VERSION@
+QT_ANDROID_CFLAGS = @QT_ANDROID_CFLAGS@
+QT_ANDROID_LIBS = @QT_ANDROID_LIBS@
 QT_CFLAGS = @QT_CFLAGS@
 QT_LIBS = @QT_LIBS@
+QT_MAC_CFLAGS = @QT_MAC_CFLAGS@
+QT_MAC_LIBS = @QT_MAC_LIBS@
 QT_WAYLAND_CFLAGS = @QT_WAYLAND_CFLAGS@
 QT_WAYLAND_LIBS = @QT_WAYLAND_LIBS@
 QT_X11_CFLAGS = @QT_X11_CFLAGS@
 QT_X11_LIBS = @QT_X11_LIBS@
 RANLIB = @RANLIB@
 RCC = @RCC@
-RSVG_2_36_2_CFLAGS = @RSVG_2_36_2_CFLAGS@
-RSVG_2_36_2_LIBS = @RSVG_2_36_2_LIBS@
 RSVG_CFLAGS = @RSVG_CFLAGS@
 RSVG_LIBS = @RSVG_LIBS@
 RTMP_CFLAGS = @RTMP_CFLAGS@
@@ -667,6 +678,7 @@
 VOAACENC_LIBS = @VOAACENC_LIBS@
 VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
 VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VULKAN_LIBS = @VULKAN_LIBS@
 WARNING_CFLAGS = @WARNING_CFLAGS@
 WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
 WARNING_OBJCFLAGS = @WARNING_OBJCFLAGS@
@@ -677,6 +689,7 @@
 WAYLAND_LIBS = @WAYLAND_LIBS@
 WEBP_CFLAGS = @WEBP_CFLAGS@
 WEBP_LIBS = @WEBP_LIBS@
+WGET = @WGET@
 WILDMIDI_CFLAGS = @WILDMIDI_CFLAGS@
 WILDMIDI_LIBS = @WILDMIDI_LIBS@
 WINKS_LIBS = @WINKS_LIBS@
@@ -686,6 +699,8 @@
 X11_LIBS = @X11_LIBS@
 X265_CFLAGS = @X265_CFLAGS@
 X265_LIBS = @X265_LIBS@
+XCB_CFLAGS = @XCB_CFLAGS@
+XCB_LIBS = @XCB_LIBS@
 XCOMPOSITE_CFLAGS = @XCOMPOSITE_CFLAGS@
 XCOMPOSITE_LIBS = @XCOMPOSITE_LIBS@
 XGETTEXT = @XGETTEXT@
@@ -723,7 +738,6 @@
 docdir = @docdir@
 dvidir = @dvidir@
 exec_prefix = @exec_prefix@
-gsettingsschemadir = @gsettingsschemadir@
 host = @host@
 host_alias = @host_alias@
 host_cpu = @host_cpu@
diff --git a/ext/rtmp/README b/ext/rtmp/README
index e9860a5..4f6e413 100644
--- a/ext/rtmp/README
+++ b/ext/rtmp/README
@@ -1,6 +1,6 @@
-rtmpsrc:
+rtmpsrc/sink:
 
-This plugin requires librtmp from http://rtmpdump.mplayerhq.hu/
+These plugins require librtmp from http://rtmpdump.mplayerhq.hu/
 
 You have to build librtmp with -fPIC to be able to use it
 with the GStreamer plugin: make XCFLAGS="-fPIC"
diff --git a/ext/rtmp/gstrtmp.c b/ext/rtmp/gstrtmp.c
index 76173f3..935304d 100644
--- a/ext/rtmp/gstrtmp.c
+++ b/ext/rtmp/gstrtmp.c
@@ -50,11 +50,17 @@
     case RTMP_LOGWARNING:
       gst_level = GST_LEVEL_WARNING;
       break;
+    case RTMP_LOGINFO:
+      gst_level = GST_LEVEL_INFO;
+      break;
     case RTMP_LOGDEBUG:
       gst_level = GST_LEVEL_DEBUG;
       break;
+    case RTMP_LOGDEBUG2:
+      gst_level = GST_LEVEL_LOG;
+      break;
     default:
-      gst_level = GST_LEVEL_INFO;
+      gst_level = GST_LEVEL_TRACE;
       break;
   }
 
@@ -68,14 +74,27 @@
 
   RTMP_LogSetCallback (gst_rtmp_log_callback);
   gst_level = gst_debug_category_get_threshold (rtmp_debug);
-  if (gst_level >= GST_LEVEL_LOG)
-    RTMP_LogSetLevel (RTMP_LOGALL);
-  else if (gst_level >= GST_LEVEL_DEBUG)
-    RTMP_LogSetLevel (RTMP_LOGDEBUG);
-  else if (gst_level >= GST_LEVEL_INFO)
-    RTMP_LogSetLevel (RTMP_LOGINFO);
-  else if (gst_level >= GST_LEVEL_WARNING)
-    RTMP_LogSetLevel (RTMP_LOGWARNING);
+
+  switch (gst_level) {
+    case GST_LEVEL_ERROR:
+      RTMP_LogSetLevel (RTMP_LOGERROR);
+      break;
+    case GST_LEVEL_WARNING:
+    case GST_LEVEL_FIXME:
+      RTMP_LogSetLevel (RTMP_LOGWARNING);
+      break;
+    case GST_LEVEL_INFO:
+      RTMP_LogSetLevel (RTMP_LOGINFO);
+      break;
+    case GST_LEVEL_DEBUG:
+      RTMP_LogSetLevel (RTMP_LOGDEBUG);
+      break;
+    case GST_LEVEL_LOG:
+      RTMP_LogSetLevel (RTMP_LOGDEBUG2);
+      break;
+    default:                   /* _TRACE and beyond */
+      RTMP_LogSetLevel (RTMP_LOGALL);
+  }
 }
 #endif
 
diff --git a/ext/rtmp/gstrtmpsink.c b/ext/rtmp/gstrtmpsink.c
index d2e7dbf..781f3bf 100644
--- a/ext/rtmp/gstrtmpsink.c
+++ b/ext/rtmp/gstrtmpsink.c
@@ -30,7 +30,7 @@
  * <refsect2>
  * <title>Example launch line</title>
  * |[
- * gst-launch -v videotestsrc ! ffenc_flv ! flvmux ! rtmpsink location='rtmp://localhost/path/to/stream live=1'
+ * gst-launch-1.0 -v videotestsrc ! ffenc_flv ! flvmux ! rtmpsink location='rtmp://localhost/path/to/stream live=1'
  * ]| Encode a test video stream to FLV video format and stream it via RTMP.
  * </refsect2>
  */
@@ -76,6 +76,7 @@
 static gboolean gst_rtmp_sink_stop (GstBaseSink * sink);
 static gboolean gst_rtmp_sink_start (GstBaseSink * sink);
 static gboolean gst_rtmp_sink_event (GstBaseSink * sink, GstEvent * event);
+static gboolean gst_rtmp_sink_setcaps (GstBaseSink * sink, GstCaps * caps);
 static GstFlowReturn gst_rtmp_sink_render (GstBaseSink * sink, GstBuffer * buf);
 
 #define gst_rtmp_sink_parent_class parent_class
@@ -114,7 +115,8 @@
   gstbasesink_class->start = GST_DEBUG_FUNCPTR (gst_rtmp_sink_start);
   gstbasesink_class->stop = GST_DEBUG_FUNCPTR (gst_rtmp_sink_stop);
   gstbasesink_class->render = GST_DEBUG_FUNCPTR (gst_rtmp_sink_render);
-  gstbasesink_class->event = gst_rtmp_sink_event;
+  gstbasesink_class->set_caps = GST_DEBUG_FUNCPTR (gst_rtmp_sink_setcaps);
+  gstbasesink_class->event = GST_DEBUG_FUNCPTR (gst_rtmp_sink_event);
 
   GST_DEBUG_CATEGORY_INIT (gst_rtmp_sink_debug, "rtmpsink", 0,
       "RTMP server element");
@@ -162,15 +164,17 @@
 
   sink->rtmp_uri = g_strdup (sink->uri);
   sink->rtmp = RTMP_Alloc ();
+
+  if (!sink->rtmp) {
+    GST_ERROR_OBJECT (sink, "Could not allocate librtmp's RTMP context");
+    goto error;
+  }
+
   RTMP_Init (sink->rtmp);
   if (!RTMP_SetupURL (sink->rtmp, sink->rtmp_uri)) {
     GST_ELEMENT_ERROR (sink, RESOURCE, OPEN_WRITE, (NULL),
         ("Failed to setup URL '%s'", sink->uri));
-    RTMP_Free (sink->rtmp);
-    sink->rtmp = NULL;
-    g_free (sink->rtmp_uri);
-    sink->rtmp_uri = NULL;
-    return FALSE;
+    goto error;
   }
 
   GST_DEBUG_OBJECT (sink, "Created RTMP object");
@@ -182,6 +186,15 @@
   sink->have_write_error = FALSE;
 
   return TRUE;
+
+error:
+  if (sink->rtmp) {
+    RTMP_Free (sink->rtmp);
+    sink->rtmp = NULL;
+  }
+  g_free (sink->rtmp_uri);
+  sink->rtmp_uri = NULL;
+  return FALSE;
 }
 
 static gboolean
@@ -189,8 +202,10 @@
 {
   GstRTMPSink *sink = GST_RTMP_SINK (basesink);
 
-  gst_buffer_replace (&sink->cache, NULL);
-
+  if (sink->header) {
+    gst_buffer_unref (sink->header);
+    sink->header = NULL;
+  }
   if (sink->rtmp) {
     RTMP_Close (sink->rtmp);
     RTMP_Free (sink->rtmp);
@@ -208,7 +223,7 @@
 gst_rtmp_sink_render (GstBaseSink * bsink, GstBuffer * buf)
 {
   GstRTMPSink *sink = GST_RTMP_SINK (bsink);
-  GstBuffer *reffed_buf = NULL;
+  gboolean need_unref = FALSE;
   GstMapInfo map = GST_MAP_INFO_INIT;
 
   if (sink->rtmp == NULL) {
@@ -217,6 +232,11 @@
     return GST_FLOW_ERROR;
   }
 
+  /* Ignore buffers that are in the stream headers (caps) */
+  if (GST_BUFFER_FLAG_IS_SET (buf, GST_BUFFER_FLAG_HEADER)) {
+    return GST_FLOW_OK;
+  }
+
   if (sink->first) {
     /* open the connection */
     if (!RTMP_IsConnected (sink->rtmp)) {
@@ -234,21 +254,14 @@
       GST_DEBUG_OBJECT (sink, "Opened connection to %s", sink->rtmp_uri);
     }
 
-    /* FIXME: Parse the first buffer and see if it contains a header plus a packet instead
-     * of just assuming it's only the header */
-    GST_LOG_OBJECT (sink, "Caching first buffer of size %" G_GSIZE_FORMAT
-        " for concatenation", gst_buffer_get_size (buf));
-    gst_buffer_replace (&sink->cache, buf);
-    sink->first = FALSE;
-    return GST_FLOW_OK;
-  }
+    /* Prepend the header from the caps to the first non header buffer */
+    if (sink->header) {
+      buf = gst_buffer_append (gst_buffer_ref (sink->header),
+          gst_buffer_ref (buf));
+      need_unref = TRUE;
+    }
 
-  if (sink->cache) {
-    GST_LOG_OBJECT (sink, "Joining 2nd buffer of size %" G_GSIZE_FORMAT
-        " to cached buf", gst_buffer_get_size (buf));
-    gst_buffer_ref (buf);
-    reffed_buf = buf = gst_buffer_append (sink->cache, buf);
-    sink->cache = NULL;
+    sink->first = FALSE;
   }
 
   if (sink->have_write_error)
@@ -263,8 +276,8 @@
     goto write_failed;
 
   gst_buffer_unmap (buf, &map);
-  if (reffed_buf)
-    gst_buffer_unref (reffed_buf);
+  if (need_unref)
+    gst_buffer_unref (buf);
 
   return GST_FLOW_OK;
 
@@ -273,8 +286,8 @@
   {
     GST_ELEMENT_ERROR (sink, RESOURCE, WRITE, (NULL), ("Failed to write data"));
     gst_buffer_unmap (buf, &map);
-    if (reffed_buf)
-      gst_buffer_unref (reffed_buf);
+    if (need_unref)
+      gst_buffer_unref (buf);
     sink->have_write_error = TRUE;
     return GST_FLOW_ERROR;
   }
@@ -381,6 +394,49 @@
 }
 
 static gboolean
+gst_rtmp_sink_setcaps (GstBaseSink * sink, GstCaps * caps)
+{
+  GstRTMPSink *rtmpsink = GST_RTMP_SINK (sink);
+  GstStructure *s;
+  const GValue *sh;
+  GArray *buffers;
+  gint i;
+
+  GST_DEBUG_OBJECT (sink, "caps set to %" GST_PTR_FORMAT, caps);
+
+  /* Clear our current header buffer */
+  if (rtmpsink->header) {
+    gst_buffer_unref (rtmpsink->header);
+    rtmpsink->header = NULL;
+  }
+
+  rtmpsink->header = gst_buffer_new ();
+
+  s = gst_caps_get_structure (caps, 0);
+
+  sh = gst_structure_get_value (s, "streamheader");
+  buffers = g_value_peek_pointer (sh);
+
+  /* Concatenate all buffers in streamheader into one */
+  for (i = 0; i < buffers->len; ++i) {
+    GValue *val;
+    GstBuffer *buf;
+
+    val = &g_array_index (buffers, GValue, i);
+    buf = g_value_peek_pointer (val);
+
+    gst_buffer_ref (buf);
+
+    rtmpsink->header = gst_buffer_append (rtmpsink->header, buf);
+  }
+
+  GST_DEBUG_OBJECT (rtmpsink, "have %" G_GSIZE_FORMAT " bytes of header data",
+      gst_buffer_get_size (rtmpsink->header));
+
+  return TRUE;
+}
+
+static gboolean
 gst_rtmp_sink_event (GstBaseSink * sink, GstEvent * event)
 {
   GstRTMPSink *rtmpsink = GST_RTMP_SINK (sink);
diff --git a/ext/rtmp/gstrtmpsink.h b/ext/rtmp/gstrtmpsink.h
index 523f5ae..b9072f5 100644
--- a/ext/rtmp/gstrtmpsink.h
+++ b/ext/rtmp/gstrtmpsink.h
@@ -53,7 +53,7 @@
   RTMP *rtmp;
   gchar *rtmp_uri; /* copy of url for librtmp */
 
-  GstBuffer *cache; /* Cached buffer */
+  GstBuffer *header;
   gboolean first;
   gboolean have_write_error;
 };
diff --git a/ext/rtmp/gstrtmpsrc.c b/ext/rtmp/gstrtmpsrc.c
index bbed8b0..02cbec1 100644
--- a/ext/rtmp/gstrtmpsrc.c
+++ b/ext/rtmp/gstrtmpsrc.c
@@ -34,7 +34,7 @@
  * <refsect2>
  * <title>Example launch lines</title>
  * |[
- * gst-launch -v rtmpsrc location=rtmp://somehost/someurl ! fakesink
+ * gst-launch-1.0 -v rtmpsrc location=rtmp://somehost/someurl ! fakesink
  * ]| Open an RTMP location and pass its content to fakesink.
  * </refsect2>
  */
@@ -440,8 +440,8 @@
     }
     case GST_QUERY_SCHEDULING:{
       gst_query_set_scheduling (query,
-          GST_SCHEDULING_FLAG_SEQUENTIAL | GST_SCHEDULING_FLAG_BANDWIDTH_LIMITED,
-          1, -1, 0);
+          GST_SCHEDULING_FLAG_SEQUENTIAL |
+          GST_SCHEDULING_FLAG_BANDWIDTH_LIMITED, 1, -1, 0);
       gst_query_add_scheduling_mode (query, GST_PAD_MODE_PUSH);
 
       ret = TRUE;
@@ -575,13 +575,17 @@
   src->discont = TRUE;
 
   src->rtmp = RTMP_Alloc ();
+
+  if (!src->rtmp) {
+    GST_ERROR_OBJECT (src, "Could not allocate librtmp's RTMP context");
+    goto error;
+  }
+
   RTMP_Init (src->rtmp);
   if (!RTMP_SetupURL (src->rtmp, src->uri)) {
     GST_ELEMENT_ERROR (src, RESOURCE, OPEN_READ, (NULL),
         ("Failed to setup URL '%s'", src->uri));
-    RTMP_Free (src->rtmp);
-    src->rtmp = NULL;
-    return FALSE;
+    goto error;
   }
   src->seekable = !(src->rtmp->Link.lFlags & RTMP_LF_LIVE);
   GST_INFO_OBJECT (src, "seekable %d", src->seekable);
@@ -591,13 +595,18 @@
     if (!RTMP_Connect (src->rtmp, NULL)) {
       GST_ELEMENT_ERROR (src, RESOURCE, OPEN_READ, (NULL),
           ("Could not connect to RTMP stream \"%s\" for reading", src->uri));
-      RTMP_Free (src->rtmp);
-      src->rtmp = NULL;
-      return FALSE;
+      goto error;
     }
   }
 
   return TRUE;
+
+error:
+  if (src->rtmp) {
+    RTMP_Free (src->rtmp);
+    src->rtmp = NULL;
+  }
+  return FALSE;
 }
 
 #undef STR2AVAL
diff --git a/ext/sbc/Makefile.in b/ext/sbc/Makefile.in
index da67127..1fbcab3 100644
--- a/ext/sbc/Makefile.in
+++ b/ext/sbc/Makefile.in
@@ -116,16 +116,15 @@
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
 	$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
-	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gsettings.m4 \
-	$(top_srcdir)/m4/gst-fionread.m4 $(top_srcdir)/m4/gst-sdl.m4 \
-	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
-	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
-	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libgcrypt.m4 \
-	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
-	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
-	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
-	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
-	$(top_srcdir)/configure.ac
+	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gst-fionread.m4 \
+	$(top_srcdir)/m4/gst-sdl.m4 $(top_srcdir)/m4/iconv.m4 \
+	$(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \
+	$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
+	$(top_srcdir)/m4/libgcrypt.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
+	$(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \
@@ -276,6 +275,8 @@
 CLUTTER_X11_LIBS = @CLUTTER_X11_LIBS@
 CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
+CUDA_CFLAGS = @CUDA_CFLAGS@
+CUDA_LIBS = @CUDA_LIBS@
 CURL_CFLAGS = @CURL_CFLAGS@
 CURL_LIBS = @CURL_LIBS@
 CXX = @CXX@
@@ -313,6 +314,8 @@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
+EGL_CFLAGS = @EGL_CFLAGS@
+EGL_LIBS = @EGL_LIBS@
 EGREP = @EGREP@
 ERROR_CFLAGS = @ERROR_CFLAGS@
 ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
@@ -321,7 +324,6 @@
 EXIF_CFLAGS = @EXIF_CFLAGS@
 EXIF_LIBS = @EXIF_LIBS@
 FAAC_LIBS = @FAAC_LIBS@
-FAAD_IS_NEAAC = @FAAD_IS_NEAAC@
 FAAD_LIBS = @FAAD_LIBS@
 FFLAGS = @FFLAGS@
 FGREP = @FGREP@
@@ -340,8 +342,9 @@
 GIO_LIBS = @GIO_LIBS@
 GIO_UNIX_CFLAGS = @GIO_UNIX_CFLAGS@
 GIO_UNIX_LIBS = @GIO_UNIX_LIBS@
+GLES2_CFLAGS = @GLES2_CFLAGS@
+GLES2_LIBS = @GLES2_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
-GLIB_COMPILE_SCHEMAS = @GLIB_COMPILE_SCHEMAS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
@@ -358,16 +361,17 @@
 GMODULE_NO_EXPORT_LIBS = @GMODULE_NO_EXPORT_LIBS@
 GMSGFMT = @GMSGFMT@
 GMSGFMT_015 = @GMSGFMT_015@
+GNUSTL_CFLAGS = @GNUSTL_CFLAGS@
+GNUSTL_LIBS = @GNUSTL_LIBS@
 GRAPHENE_CFLAGS = @GRAPHENE_CFLAGS@
 GRAPHENE_LIBS = @GRAPHENE_LIBS@
 GREP = @GREP@
-GSETTINGS_CFLAGS = @GSETTINGS_CFLAGS@
-GSETTINGS_DISABLE_SCHEMAS_COMPILE = @GSETTINGS_DISABLE_SCHEMAS_COMPILE@
-GSETTINGS_LIBS = @GSETTINGS_LIBS@
 GSM_LIBS = @GSM_LIBS@
 GSTPB_PLUGINS_DIR = @GSTPB_PLUGINS_DIR@
 GSTPB_PREFIX = @GSTPB_PREFIX@
 GST_AGE = @GST_AGE@
+GST_ALLOCATORS_CFLAGS = @GST_ALLOCATORS_CFLAGS@
+GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
 GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
 GST_API_VERSION = @GST_API_VERSION@
 GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
@@ -393,6 +397,8 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PBUTILS_CFLAGS = @GST_PBUTILS_CFLAGS@
+GST_PBUTILS_LIBS = @GST_PBUTILS_LIBS@
 GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BAD_CFLAGS = @GST_PLUGINS_BAD_CFLAGS@
@@ -418,6 +424,8 @@
 GST_PREFIX = @GST_PREFIX@
 GST_REVISION = @GST_REVISION@
 GST_TOOLS_DIR = @GST_TOOLS_DIR@
+GST_VIDEO_CFLAGS = @GST_VIDEO_CFLAGS@
+GST_VIDEO_LIBS = @GST_VIDEO_LIBS@
 GTK3_CFLAGS = @GTK3_CFLAGS@
 GTK3_GL_CFLAGS = @GTK3_GL_CFLAGS@
 GTK3_GL_LIBS = @GTK3_GL_LIBS@
@@ -519,6 +527,7 @@
 LTLIBICONV = @LTLIBICONV@
 LTLIBINTL = @LTLIBINTL@
 LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
 MANIFEST_TOOL = @MANIFEST_TOOL@
@@ -532,8 +541,6 @@
 MODPLUG_LIBS = @MODPLUG_LIBS@
 MPEG2ENC_CFLAGS = @MPEG2ENC_CFLAGS@
 MPEG2ENC_LIBS = @MPEG2ENC_LIBS@
-MPG123_CFLAGS = @MPG123_CFLAGS@
-MPG123_LIBS = @MPG123_LIBS@
 MPLEX_CFLAGS = @MPLEX_CFLAGS@
 MPLEX_LDFLAGS = @MPLEX_LDFLAGS@
 MPLEX_LIBS = @MPLEX_LIBS@
@@ -549,6 +556,8 @@
 NETTLE_LIBS = @NETTLE_LIBS@
 NM = @NM@
 NMEDIT = @NMEDIT@
+NVENCODE_CFLAGS = @NVENCODE_CFLAGS@
+NVENCODE_LIBS = @NVENCODE_LIBS@
 OBJC = @OBJC@
 OBJCDEPMODE = @OBJCDEPMODE@
 OBJCFLAGS = @OBJCFLAGS@
@@ -606,16 +615,18 @@
 PYTHON_PLATFORM = @PYTHON_PLATFORM@
 PYTHON_PREFIX = @PYTHON_PREFIX@
 PYTHON_VERSION = @PYTHON_VERSION@
+QT_ANDROID_CFLAGS = @QT_ANDROID_CFLAGS@
+QT_ANDROID_LIBS = @QT_ANDROID_LIBS@
 QT_CFLAGS = @QT_CFLAGS@
 QT_LIBS = @QT_LIBS@
+QT_MAC_CFLAGS = @QT_MAC_CFLAGS@
+QT_MAC_LIBS = @QT_MAC_LIBS@
 QT_WAYLAND_CFLAGS = @QT_WAYLAND_CFLAGS@
 QT_WAYLAND_LIBS = @QT_WAYLAND_LIBS@
 QT_X11_CFLAGS = @QT_X11_CFLAGS@
 QT_X11_LIBS = @QT_X11_LIBS@
 RANLIB = @RANLIB@
 RCC = @RCC@
-RSVG_2_36_2_CFLAGS = @RSVG_2_36_2_CFLAGS@
-RSVG_2_36_2_LIBS = @RSVG_2_36_2_LIBS@
 RSVG_CFLAGS = @RSVG_CFLAGS@
 RSVG_LIBS = @RSVG_LIBS@
 RTMP_CFLAGS = @RTMP_CFLAGS@
@@ -667,6 +678,7 @@
 VOAACENC_LIBS = @VOAACENC_LIBS@
 VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
 VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VULKAN_LIBS = @VULKAN_LIBS@
 WARNING_CFLAGS = @WARNING_CFLAGS@
 WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
 WARNING_OBJCFLAGS = @WARNING_OBJCFLAGS@
@@ -677,6 +689,7 @@
 WAYLAND_LIBS = @WAYLAND_LIBS@
 WEBP_CFLAGS = @WEBP_CFLAGS@
 WEBP_LIBS = @WEBP_LIBS@
+WGET = @WGET@
 WILDMIDI_CFLAGS = @WILDMIDI_CFLAGS@
 WILDMIDI_LIBS = @WILDMIDI_LIBS@
 WINKS_LIBS = @WINKS_LIBS@
@@ -686,6 +699,8 @@
 X11_LIBS = @X11_LIBS@
 X265_CFLAGS = @X265_CFLAGS@
 X265_LIBS = @X265_LIBS@
+XCB_CFLAGS = @XCB_CFLAGS@
+XCB_LIBS = @XCB_LIBS@
 XCOMPOSITE_CFLAGS = @XCOMPOSITE_CFLAGS@
 XCOMPOSITE_LIBS = @XCOMPOSITE_LIBS@
 XGETTEXT = @XGETTEXT@
@@ -723,7 +738,6 @@
 docdir = @docdir@
 dvidir = @dvidir@
 exec_prefix = @exec_prefix@
-gsettingsschemadir = @gsettingsschemadir@
 host = @host@
 host_alias = @host_alias@
 host_cpu = @host_cpu@
diff --git a/ext/schroedinger/Makefile.in b/ext/schroedinger/Makefile.in
index 9f4fbc9..6f99e31 100644
--- a/ext/schroedinger/Makefile.in
+++ b/ext/schroedinger/Makefile.in
@@ -116,16 +116,15 @@
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
 	$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
-	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gsettings.m4 \
-	$(top_srcdir)/m4/gst-fionread.m4 $(top_srcdir)/m4/gst-sdl.m4 \
-	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
-	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
-	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libgcrypt.m4 \
-	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
-	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
-	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
-	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
-	$(top_srcdir)/configure.ac
+	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gst-fionread.m4 \
+	$(top_srcdir)/m4/gst-sdl.m4 $(top_srcdir)/m4/iconv.m4 \
+	$(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \
+	$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
+	$(top_srcdir)/m4/libgcrypt.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
+	$(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \
@@ -277,6 +276,8 @@
 CLUTTER_X11_LIBS = @CLUTTER_X11_LIBS@
 CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
+CUDA_CFLAGS = @CUDA_CFLAGS@
+CUDA_LIBS = @CUDA_LIBS@
 CURL_CFLAGS = @CURL_CFLAGS@
 CURL_LIBS = @CURL_LIBS@
 CXX = @CXX@
@@ -314,6 +315,8 @@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
+EGL_CFLAGS = @EGL_CFLAGS@
+EGL_LIBS = @EGL_LIBS@
 EGREP = @EGREP@
 ERROR_CFLAGS = @ERROR_CFLAGS@
 ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
@@ -322,7 +325,6 @@
 EXIF_CFLAGS = @EXIF_CFLAGS@
 EXIF_LIBS = @EXIF_LIBS@
 FAAC_LIBS = @FAAC_LIBS@
-FAAD_IS_NEAAC = @FAAD_IS_NEAAC@
 FAAD_LIBS = @FAAD_LIBS@
 FFLAGS = @FFLAGS@
 FGREP = @FGREP@
@@ -341,8 +343,9 @@
 GIO_LIBS = @GIO_LIBS@
 GIO_UNIX_CFLAGS = @GIO_UNIX_CFLAGS@
 GIO_UNIX_LIBS = @GIO_UNIX_LIBS@
+GLES2_CFLAGS = @GLES2_CFLAGS@
+GLES2_LIBS = @GLES2_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
-GLIB_COMPILE_SCHEMAS = @GLIB_COMPILE_SCHEMAS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
@@ -359,16 +362,17 @@
 GMODULE_NO_EXPORT_LIBS = @GMODULE_NO_EXPORT_LIBS@
 GMSGFMT = @GMSGFMT@
 GMSGFMT_015 = @GMSGFMT_015@
+GNUSTL_CFLAGS = @GNUSTL_CFLAGS@
+GNUSTL_LIBS = @GNUSTL_LIBS@
 GRAPHENE_CFLAGS = @GRAPHENE_CFLAGS@
 GRAPHENE_LIBS = @GRAPHENE_LIBS@
 GREP = @GREP@
-GSETTINGS_CFLAGS = @GSETTINGS_CFLAGS@
-GSETTINGS_DISABLE_SCHEMAS_COMPILE = @GSETTINGS_DISABLE_SCHEMAS_COMPILE@
-GSETTINGS_LIBS = @GSETTINGS_LIBS@
 GSM_LIBS = @GSM_LIBS@
 GSTPB_PLUGINS_DIR = @GSTPB_PLUGINS_DIR@
 GSTPB_PREFIX = @GSTPB_PREFIX@
 GST_AGE = @GST_AGE@
+GST_ALLOCATORS_CFLAGS = @GST_ALLOCATORS_CFLAGS@
+GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
 GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
 GST_API_VERSION = @GST_API_VERSION@
 GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
@@ -394,6 +398,8 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PBUTILS_CFLAGS = @GST_PBUTILS_CFLAGS@
+GST_PBUTILS_LIBS = @GST_PBUTILS_LIBS@
 GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BAD_CFLAGS = @GST_PLUGINS_BAD_CFLAGS@
@@ -419,6 +425,8 @@
 GST_PREFIX = @GST_PREFIX@
 GST_REVISION = @GST_REVISION@
 GST_TOOLS_DIR = @GST_TOOLS_DIR@
+GST_VIDEO_CFLAGS = @GST_VIDEO_CFLAGS@
+GST_VIDEO_LIBS = @GST_VIDEO_LIBS@
 GTK3_CFLAGS = @GTK3_CFLAGS@
 GTK3_GL_CFLAGS = @GTK3_GL_CFLAGS@
 GTK3_GL_LIBS = @GTK3_GL_LIBS@
@@ -520,6 +528,7 @@
 LTLIBICONV = @LTLIBICONV@
 LTLIBINTL = @LTLIBINTL@
 LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
 MANIFEST_TOOL = @MANIFEST_TOOL@
@@ -533,8 +542,6 @@
 MODPLUG_LIBS = @MODPLUG_LIBS@
 MPEG2ENC_CFLAGS = @MPEG2ENC_CFLAGS@
 MPEG2ENC_LIBS = @MPEG2ENC_LIBS@
-MPG123_CFLAGS = @MPG123_CFLAGS@
-MPG123_LIBS = @MPG123_LIBS@
 MPLEX_CFLAGS = @MPLEX_CFLAGS@
 MPLEX_LDFLAGS = @MPLEX_LDFLAGS@
 MPLEX_LIBS = @MPLEX_LIBS@
@@ -550,6 +557,8 @@
 NETTLE_LIBS = @NETTLE_LIBS@
 NM = @NM@
 NMEDIT = @NMEDIT@
+NVENCODE_CFLAGS = @NVENCODE_CFLAGS@
+NVENCODE_LIBS = @NVENCODE_LIBS@
 OBJC = @OBJC@
 OBJCDEPMODE = @OBJCDEPMODE@
 OBJCFLAGS = @OBJCFLAGS@
@@ -607,16 +616,18 @@
 PYTHON_PLATFORM = @PYTHON_PLATFORM@
 PYTHON_PREFIX = @PYTHON_PREFIX@
 PYTHON_VERSION = @PYTHON_VERSION@
+QT_ANDROID_CFLAGS = @QT_ANDROID_CFLAGS@
+QT_ANDROID_LIBS = @QT_ANDROID_LIBS@
 QT_CFLAGS = @QT_CFLAGS@
 QT_LIBS = @QT_LIBS@
+QT_MAC_CFLAGS = @QT_MAC_CFLAGS@
+QT_MAC_LIBS = @QT_MAC_LIBS@
 QT_WAYLAND_CFLAGS = @QT_WAYLAND_CFLAGS@
 QT_WAYLAND_LIBS = @QT_WAYLAND_LIBS@
 QT_X11_CFLAGS = @QT_X11_CFLAGS@
 QT_X11_LIBS = @QT_X11_LIBS@
 RANLIB = @RANLIB@
 RCC = @RCC@
-RSVG_2_36_2_CFLAGS = @RSVG_2_36_2_CFLAGS@
-RSVG_2_36_2_LIBS = @RSVG_2_36_2_LIBS@
 RSVG_CFLAGS = @RSVG_CFLAGS@
 RSVG_LIBS = @RSVG_LIBS@
 RTMP_CFLAGS = @RTMP_CFLAGS@
@@ -668,6 +679,7 @@
 VOAACENC_LIBS = @VOAACENC_LIBS@
 VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
 VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VULKAN_LIBS = @VULKAN_LIBS@
 WARNING_CFLAGS = @WARNING_CFLAGS@
 WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
 WARNING_OBJCFLAGS = @WARNING_OBJCFLAGS@
@@ -678,6 +690,7 @@
 WAYLAND_LIBS = @WAYLAND_LIBS@
 WEBP_CFLAGS = @WEBP_CFLAGS@
 WEBP_LIBS = @WEBP_LIBS@
+WGET = @WGET@
 WILDMIDI_CFLAGS = @WILDMIDI_CFLAGS@
 WILDMIDI_LIBS = @WILDMIDI_LIBS@
 WINKS_LIBS = @WINKS_LIBS@
@@ -687,6 +700,8 @@
 X11_LIBS = @X11_LIBS@
 X265_CFLAGS = @X265_CFLAGS@
 X265_LIBS = @X265_LIBS@
+XCB_CFLAGS = @XCB_CFLAGS@
+XCB_LIBS = @XCB_LIBS@
 XCOMPOSITE_CFLAGS = @XCOMPOSITE_CFLAGS@
 XCOMPOSITE_LIBS = @XCOMPOSITE_LIBS@
 XGETTEXT = @XGETTEXT@
@@ -724,7 +739,6 @@
 docdir = @docdir@
 dvidir = @dvidir@
 exec_prefix = @exec_prefix@
-gsettingsschemadir = @gsettingsschemadir@
 host = @host@
 host_alias = @host_alias@
 host_cpu = @host_cpu@
diff --git a/ext/sdl/Makefile.in b/ext/sdl/Makefile.in
index 38426ec..9aa7c90 100644
--- a/ext/sdl/Makefile.in
+++ b/ext/sdl/Makefile.in
@@ -116,16 +116,15 @@
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
 	$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
-	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gsettings.m4 \
-	$(top_srcdir)/m4/gst-fionread.m4 $(top_srcdir)/m4/gst-sdl.m4 \
-	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
-	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
-	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libgcrypt.m4 \
-	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
-	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
-	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
-	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
-	$(top_srcdir)/configure.ac
+	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gst-fionread.m4 \
+	$(top_srcdir)/m4/gst-sdl.m4 $(top_srcdir)/m4/iconv.m4 \
+	$(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \
+	$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
+	$(top_srcdir)/m4/libgcrypt.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
+	$(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \
@@ -275,6 +274,8 @@
 CLUTTER_X11_LIBS = @CLUTTER_X11_LIBS@
 CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
+CUDA_CFLAGS = @CUDA_CFLAGS@
+CUDA_LIBS = @CUDA_LIBS@
 CURL_CFLAGS = @CURL_CFLAGS@
 CURL_LIBS = @CURL_LIBS@
 CXX = @CXX@
@@ -312,6 +313,8 @@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
+EGL_CFLAGS = @EGL_CFLAGS@
+EGL_LIBS = @EGL_LIBS@
 EGREP = @EGREP@
 ERROR_CFLAGS = @ERROR_CFLAGS@
 ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
@@ -320,7 +323,6 @@
 EXIF_CFLAGS = @EXIF_CFLAGS@
 EXIF_LIBS = @EXIF_LIBS@
 FAAC_LIBS = @FAAC_LIBS@
-FAAD_IS_NEAAC = @FAAD_IS_NEAAC@
 FAAD_LIBS = @FAAD_LIBS@
 FFLAGS = @FFLAGS@
 FGREP = @FGREP@
@@ -339,8 +341,9 @@
 GIO_LIBS = @GIO_LIBS@
 GIO_UNIX_CFLAGS = @GIO_UNIX_CFLAGS@
 GIO_UNIX_LIBS = @GIO_UNIX_LIBS@
+GLES2_CFLAGS = @GLES2_CFLAGS@
+GLES2_LIBS = @GLES2_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
-GLIB_COMPILE_SCHEMAS = @GLIB_COMPILE_SCHEMAS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
@@ -357,16 +360,17 @@
 GMODULE_NO_EXPORT_LIBS = @GMODULE_NO_EXPORT_LIBS@
 GMSGFMT = @GMSGFMT@
 GMSGFMT_015 = @GMSGFMT_015@
+GNUSTL_CFLAGS = @GNUSTL_CFLAGS@
+GNUSTL_LIBS = @GNUSTL_LIBS@
 GRAPHENE_CFLAGS = @GRAPHENE_CFLAGS@
 GRAPHENE_LIBS = @GRAPHENE_LIBS@
 GREP = @GREP@
-GSETTINGS_CFLAGS = @GSETTINGS_CFLAGS@
-GSETTINGS_DISABLE_SCHEMAS_COMPILE = @GSETTINGS_DISABLE_SCHEMAS_COMPILE@
-GSETTINGS_LIBS = @GSETTINGS_LIBS@
 GSM_LIBS = @GSM_LIBS@
 GSTPB_PLUGINS_DIR = @GSTPB_PLUGINS_DIR@
 GSTPB_PREFIX = @GSTPB_PREFIX@
 GST_AGE = @GST_AGE@
+GST_ALLOCATORS_CFLAGS = @GST_ALLOCATORS_CFLAGS@
+GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
 GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
 GST_API_VERSION = @GST_API_VERSION@
 GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
@@ -392,6 +396,8 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PBUTILS_CFLAGS = @GST_PBUTILS_CFLAGS@
+GST_PBUTILS_LIBS = @GST_PBUTILS_LIBS@
 GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BAD_CFLAGS = @GST_PLUGINS_BAD_CFLAGS@
@@ -417,6 +423,8 @@
 GST_PREFIX = @GST_PREFIX@
 GST_REVISION = @GST_REVISION@
 GST_TOOLS_DIR = @GST_TOOLS_DIR@
+GST_VIDEO_CFLAGS = @GST_VIDEO_CFLAGS@
+GST_VIDEO_LIBS = @GST_VIDEO_LIBS@
 GTK3_CFLAGS = @GTK3_CFLAGS@
 GTK3_GL_CFLAGS = @GTK3_GL_CFLAGS@
 GTK3_GL_LIBS = @GTK3_GL_LIBS@
@@ -518,6 +526,7 @@
 LTLIBICONV = @LTLIBICONV@
 LTLIBINTL = @LTLIBINTL@
 LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
 MANIFEST_TOOL = @MANIFEST_TOOL@
@@ -531,8 +540,6 @@
 MODPLUG_LIBS = @MODPLUG_LIBS@
 MPEG2ENC_CFLAGS = @MPEG2ENC_CFLAGS@
 MPEG2ENC_LIBS = @MPEG2ENC_LIBS@
-MPG123_CFLAGS = @MPG123_CFLAGS@
-MPG123_LIBS = @MPG123_LIBS@
 MPLEX_CFLAGS = @MPLEX_CFLAGS@
 MPLEX_LDFLAGS = @MPLEX_LDFLAGS@
 MPLEX_LIBS = @MPLEX_LIBS@
@@ -548,6 +555,8 @@
 NETTLE_LIBS = @NETTLE_LIBS@
 NM = @NM@
 NMEDIT = @NMEDIT@
+NVENCODE_CFLAGS = @NVENCODE_CFLAGS@
+NVENCODE_LIBS = @NVENCODE_LIBS@
 OBJC = @OBJC@
 OBJCDEPMODE = @OBJCDEPMODE@
 OBJCFLAGS = @OBJCFLAGS@
@@ -605,16 +614,18 @@
 PYTHON_PLATFORM = @PYTHON_PLATFORM@
 PYTHON_PREFIX = @PYTHON_PREFIX@
 PYTHON_VERSION = @PYTHON_VERSION@
+QT_ANDROID_CFLAGS = @QT_ANDROID_CFLAGS@
+QT_ANDROID_LIBS = @QT_ANDROID_LIBS@
 QT_CFLAGS = @QT_CFLAGS@
 QT_LIBS = @QT_LIBS@
+QT_MAC_CFLAGS = @QT_MAC_CFLAGS@
+QT_MAC_LIBS = @QT_MAC_LIBS@
 QT_WAYLAND_CFLAGS = @QT_WAYLAND_CFLAGS@
 QT_WAYLAND_LIBS = @QT_WAYLAND_LIBS@
 QT_X11_CFLAGS = @QT_X11_CFLAGS@
 QT_X11_LIBS = @QT_X11_LIBS@
 RANLIB = @RANLIB@
 RCC = @RCC@
-RSVG_2_36_2_CFLAGS = @RSVG_2_36_2_CFLAGS@
-RSVG_2_36_2_LIBS = @RSVG_2_36_2_LIBS@
 RSVG_CFLAGS = @RSVG_CFLAGS@
 RSVG_LIBS = @RSVG_LIBS@
 RTMP_CFLAGS = @RTMP_CFLAGS@
@@ -666,6 +677,7 @@
 VOAACENC_LIBS = @VOAACENC_LIBS@
 VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
 VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VULKAN_LIBS = @VULKAN_LIBS@
 WARNING_CFLAGS = @WARNING_CFLAGS@
 WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
 WARNING_OBJCFLAGS = @WARNING_OBJCFLAGS@
@@ -676,6 +688,7 @@
 WAYLAND_LIBS = @WAYLAND_LIBS@
 WEBP_CFLAGS = @WEBP_CFLAGS@
 WEBP_LIBS = @WEBP_LIBS@
+WGET = @WGET@
 WILDMIDI_CFLAGS = @WILDMIDI_CFLAGS@
 WILDMIDI_LIBS = @WILDMIDI_LIBS@
 WINKS_LIBS = @WINKS_LIBS@
@@ -685,6 +698,8 @@
 X11_LIBS = @X11_LIBS@
 X265_CFLAGS = @X265_CFLAGS@
 X265_LIBS = @X265_LIBS@
+XCB_CFLAGS = @XCB_CFLAGS@
+XCB_LIBS = @XCB_LIBS@
 XCOMPOSITE_CFLAGS = @XCOMPOSITE_CFLAGS@
 XCOMPOSITE_LIBS = @XCOMPOSITE_LIBS@
 XGETTEXT = @XGETTEXT@
@@ -722,7 +737,6 @@
 docdir = @docdir@
 dvidir = @dvidir@
 exec_prefix = @exec_prefix@
-gsettingsschemadir = @gsettingsschemadir@
 host = @host@
 host_alias = @host_alias@
 host_cpu = @host_cpu@
diff --git a/ext/smoothstreaming/Makefile.am b/ext/smoothstreaming/Makefile.am
index 5f331f3..4faf9df 100644
--- a/ext/smoothstreaming/Makefile.am
+++ b/ext/smoothstreaming/Makefile.am
@@ -6,7 +6,6 @@
     -DGST_USE_UNSTABLE_API $(LIBXML2_CFLAGS)
 libgstsmoothstreaming_la_LIBADD = \
     $(top_builddir)/gst-libs/gst/codecparsers/libgstcodecparsers-$(GST_API_VERSION).la \
-    $(top_builddir)/gst-libs/gst/uridownloader/libgsturidownloader-$(GST_API_VERSION).la \
     $(top_builddir)/gst-libs/gst/adaptivedemux/libgstadaptivedemux-@GST_API_VERSION@.la \
     $(GST_PLUGINS_BASE_LIBS) \
     -lgsttag-$(GST_API_VERSION) \
diff --git a/ext/smoothstreaming/Makefile.in b/ext/smoothstreaming/Makefile.in
index d1265bf..77abcae 100644
--- a/ext/smoothstreaming/Makefile.in
+++ b/ext/smoothstreaming/Makefile.in
@@ -116,16 +116,15 @@
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
 	$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
-	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gsettings.m4 \
-	$(top_srcdir)/m4/gst-fionread.m4 $(top_srcdir)/m4/gst-sdl.m4 \
-	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
-	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
-	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libgcrypt.m4 \
-	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
-	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
-	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
-	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
-	$(top_srcdir)/configure.ac
+	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gst-fionread.m4 \
+	$(top_srcdir)/m4/gst-sdl.m4 $(top_srcdir)/m4/iconv.m4 \
+	$(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \
+	$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
+	$(top_srcdir)/m4/libgcrypt.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
+	$(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \
@@ -165,7 +164,6 @@
 LTLIBRARIES = $(plugin_LTLIBRARIES)
 am__DEPENDENCIES_1 =
 libgstsmoothstreaming_la_DEPENDENCIES = $(top_builddir)/gst-libs/gst/codecparsers/libgstcodecparsers-$(GST_API_VERSION).la \
-	$(top_builddir)/gst-libs/gst/uridownloader/libgsturidownloader-$(GST_API_VERSION).la \
 	$(top_builddir)/gst-libs/gst/adaptivedemux/libgstadaptivedemux-@GST_API_VERSION@.la \
 	$(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
 	$(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1)
@@ -281,6 +279,8 @@
 CLUTTER_X11_LIBS = @CLUTTER_X11_LIBS@
 CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
+CUDA_CFLAGS = @CUDA_CFLAGS@
+CUDA_LIBS = @CUDA_LIBS@
 CURL_CFLAGS = @CURL_CFLAGS@
 CURL_LIBS = @CURL_LIBS@
 CXX = @CXX@
@@ -318,6 +318,8 @@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
+EGL_CFLAGS = @EGL_CFLAGS@
+EGL_LIBS = @EGL_LIBS@
 EGREP = @EGREP@
 ERROR_CFLAGS = @ERROR_CFLAGS@
 ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
@@ -326,7 +328,6 @@
 EXIF_CFLAGS = @EXIF_CFLAGS@
 EXIF_LIBS = @EXIF_LIBS@
 FAAC_LIBS = @FAAC_LIBS@
-FAAD_IS_NEAAC = @FAAD_IS_NEAAC@
 FAAD_LIBS = @FAAD_LIBS@
 FFLAGS = @FFLAGS@
 FGREP = @FGREP@
@@ -345,8 +346,9 @@
 GIO_LIBS = @GIO_LIBS@
 GIO_UNIX_CFLAGS = @GIO_UNIX_CFLAGS@
 GIO_UNIX_LIBS = @GIO_UNIX_LIBS@
+GLES2_CFLAGS = @GLES2_CFLAGS@
+GLES2_LIBS = @GLES2_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
-GLIB_COMPILE_SCHEMAS = @GLIB_COMPILE_SCHEMAS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
@@ -363,16 +365,17 @@
 GMODULE_NO_EXPORT_LIBS = @GMODULE_NO_EXPORT_LIBS@
 GMSGFMT = @GMSGFMT@
 GMSGFMT_015 = @GMSGFMT_015@
+GNUSTL_CFLAGS = @GNUSTL_CFLAGS@
+GNUSTL_LIBS = @GNUSTL_LIBS@
 GRAPHENE_CFLAGS = @GRAPHENE_CFLAGS@
 GRAPHENE_LIBS = @GRAPHENE_LIBS@
 GREP = @GREP@
-GSETTINGS_CFLAGS = @GSETTINGS_CFLAGS@
-GSETTINGS_DISABLE_SCHEMAS_COMPILE = @GSETTINGS_DISABLE_SCHEMAS_COMPILE@
-GSETTINGS_LIBS = @GSETTINGS_LIBS@
 GSM_LIBS = @GSM_LIBS@
 GSTPB_PLUGINS_DIR = @GSTPB_PLUGINS_DIR@
 GSTPB_PREFIX = @GSTPB_PREFIX@
 GST_AGE = @GST_AGE@
+GST_ALLOCATORS_CFLAGS = @GST_ALLOCATORS_CFLAGS@
+GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
 GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
 GST_API_VERSION = @GST_API_VERSION@
 GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
@@ -398,6 +401,8 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PBUTILS_CFLAGS = @GST_PBUTILS_CFLAGS@
+GST_PBUTILS_LIBS = @GST_PBUTILS_LIBS@
 GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BAD_CFLAGS = @GST_PLUGINS_BAD_CFLAGS@
@@ -423,6 +428,8 @@
 GST_PREFIX = @GST_PREFIX@
 GST_REVISION = @GST_REVISION@
 GST_TOOLS_DIR = @GST_TOOLS_DIR@
+GST_VIDEO_CFLAGS = @GST_VIDEO_CFLAGS@
+GST_VIDEO_LIBS = @GST_VIDEO_LIBS@
 GTK3_CFLAGS = @GTK3_CFLAGS@
 GTK3_GL_CFLAGS = @GTK3_GL_CFLAGS@
 GTK3_GL_LIBS = @GTK3_GL_LIBS@
@@ -524,6 +531,7 @@
 LTLIBICONV = @LTLIBICONV@
 LTLIBINTL = @LTLIBINTL@
 LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
 MANIFEST_TOOL = @MANIFEST_TOOL@
@@ -537,8 +545,6 @@
 MODPLUG_LIBS = @MODPLUG_LIBS@
 MPEG2ENC_CFLAGS = @MPEG2ENC_CFLAGS@
 MPEG2ENC_LIBS = @MPEG2ENC_LIBS@
-MPG123_CFLAGS = @MPG123_CFLAGS@
-MPG123_LIBS = @MPG123_LIBS@
 MPLEX_CFLAGS = @MPLEX_CFLAGS@
 MPLEX_LDFLAGS = @MPLEX_LDFLAGS@
 MPLEX_LIBS = @MPLEX_LIBS@
@@ -554,6 +560,8 @@
 NETTLE_LIBS = @NETTLE_LIBS@
 NM = @NM@
 NMEDIT = @NMEDIT@
+NVENCODE_CFLAGS = @NVENCODE_CFLAGS@
+NVENCODE_LIBS = @NVENCODE_LIBS@
 OBJC = @OBJC@
 OBJCDEPMODE = @OBJCDEPMODE@
 OBJCFLAGS = @OBJCFLAGS@
@@ -611,16 +619,18 @@
 PYTHON_PLATFORM = @PYTHON_PLATFORM@
 PYTHON_PREFIX = @PYTHON_PREFIX@
 PYTHON_VERSION = @PYTHON_VERSION@
+QT_ANDROID_CFLAGS = @QT_ANDROID_CFLAGS@
+QT_ANDROID_LIBS = @QT_ANDROID_LIBS@
 QT_CFLAGS = @QT_CFLAGS@
 QT_LIBS = @QT_LIBS@
+QT_MAC_CFLAGS = @QT_MAC_CFLAGS@
+QT_MAC_LIBS = @QT_MAC_LIBS@
 QT_WAYLAND_CFLAGS = @QT_WAYLAND_CFLAGS@
 QT_WAYLAND_LIBS = @QT_WAYLAND_LIBS@
 QT_X11_CFLAGS = @QT_X11_CFLAGS@
 QT_X11_LIBS = @QT_X11_LIBS@
 RANLIB = @RANLIB@
 RCC = @RCC@
-RSVG_2_36_2_CFLAGS = @RSVG_2_36_2_CFLAGS@
-RSVG_2_36_2_LIBS = @RSVG_2_36_2_LIBS@
 RSVG_CFLAGS = @RSVG_CFLAGS@
 RSVG_LIBS = @RSVG_LIBS@
 RTMP_CFLAGS = @RTMP_CFLAGS@
@@ -672,6 +682,7 @@
 VOAACENC_LIBS = @VOAACENC_LIBS@
 VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
 VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VULKAN_LIBS = @VULKAN_LIBS@
 WARNING_CFLAGS = @WARNING_CFLAGS@
 WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
 WARNING_OBJCFLAGS = @WARNING_OBJCFLAGS@
@@ -682,6 +693,7 @@
 WAYLAND_LIBS = @WAYLAND_LIBS@
 WEBP_CFLAGS = @WEBP_CFLAGS@
 WEBP_LIBS = @WEBP_LIBS@
+WGET = @WGET@
 WILDMIDI_CFLAGS = @WILDMIDI_CFLAGS@
 WILDMIDI_LIBS = @WILDMIDI_LIBS@
 WINKS_LIBS = @WINKS_LIBS@
@@ -691,6 +703,8 @@
 X11_LIBS = @X11_LIBS@
 X265_CFLAGS = @X265_CFLAGS@
 X265_LIBS = @X265_LIBS@
+XCB_CFLAGS = @XCB_CFLAGS@
+XCB_LIBS = @XCB_LIBS@
 XCOMPOSITE_CFLAGS = @XCOMPOSITE_CFLAGS@
 XCOMPOSITE_LIBS = @XCOMPOSITE_LIBS@
 XGETTEXT = @XGETTEXT@
@@ -728,7 +742,6 @@
 docdir = @docdir@
 dvidir = @dvidir@
 exec_prefix = @exec_prefix@
-gsettingsschemadir = @gsettingsschemadir@
 host = @host@
 host_alias = @host_alias@
 host_cpu = @host_cpu@
@@ -775,7 +788,6 @@
 
 libgstsmoothstreaming_la_LIBADD = \
     $(top_builddir)/gst-libs/gst/codecparsers/libgstcodecparsers-$(GST_API_VERSION).la \
-    $(top_builddir)/gst-libs/gst/uridownloader/libgsturidownloader-$(GST_API_VERSION).la \
     $(top_builddir)/gst-libs/gst/adaptivedemux/libgstadaptivedemux-@GST_API_VERSION@.la \
     $(GST_PLUGINS_BASE_LIBS) \
     -lgsttag-$(GST_API_VERSION) \
diff --git a/ext/smoothstreaming/gstmssdemux.c b/ext/smoothstreaming/gstmssdemux.c
index 196ce41..c975e17 100644
--- a/ext/smoothstreaming/gstmssdemux.c
+++ b/ext/smoothstreaming/gstmssdemux.c
@@ -122,9 +122,10 @@
 static GstClockTime gst_mss_demux_get_duration (GstAdaptiveDemux * demux);
 static void gst_mss_demux_reset (GstAdaptiveDemux * demux);
 static GstFlowReturn gst_mss_demux_stream_seek (GstAdaptiveDemuxStream * stream,
-    GstClockTime ts);
-static gboolean
-gst_mss_demux_stream_has_next_fragment (GstAdaptiveDemuxStream * stream);
+    gboolean forward, GstSeekFlags flags, GstClockTime ts,
+    GstClockTime * final_ts);
+static gboolean gst_mss_demux_stream_has_next_fragment (GstAdaptiveDemuxStream *
+    stream);
 static GstFlowReturn
 gst_mss_demux_stream_advance_fragment (GstAdaptiveDemuxStream * stream);
 static gboolean gst_mss_demux_stream_select_bitrate (GstAdaptiveDemuxStream *
@@ -304,11 +305,13 @@
 }
 
 static GstFlowReturn
-gst_mss_demux_stream_seek (GstAdaptiveDemuxStream * stream, GstClockTime ts)
+gst_mss_demux_stream_seek (GstAdaptiveDemuxStream * stream, gboolean forward,
+    GstSeekFlags flags, GstClockTime ts, GstClockTime * final_ts)
 {
   GstMssDemuxStream *mssstream = (GstMssDemuxStream *) stream;
 
-  gst_mss_stream_seek (mssstream->manifest_stream, ts);
+  gst_mss_stream_seek (mssstream->manifest_stream, forward, flags, ts,
+      final_ts);
   return GST_FLOW_OK;
 }
 
@@ -354,8 +357,7 @@
   }
 
   if (tmpl != NULL) {
-    srcpad =
-        GST_PAD_CAST (gst_ghost_pad_new_no_target_from_template (name, tmpl));
+    srcpad = GST_PAD_CAST (gst_pad_new_from_template (tmpl, name));
     g_free (name);
     gst_object_unref (tmpl);
   }
@@ -367,13 +369,35 @@
   return srcpad;
 }
 
+static void
+gst_mss_demux_apply_protection_system (GstCaps * caps,
+    const gchar * selected_system)
+{
+  GstStructure *s;
+
+  g_return_if_fail (selected_system);
+  s = gst_caps_get_structure (caps, 0);
+  gst_structure_set (s,
+      "original-media-type", G_TYPE_STRING, gst_structure_get_name (s),
+      GST_PROTECTION_SYSTEM_ID_CAPS_FIELD, G_TYPE_STRING, selected_system,
+      NULL);
+  gst_structure_set_name (s, "application/x-cenc");
+
+}
+
 static gboolean
 gst_mss_demux_setup_streams (GstAdaptiveDemux * demux)
 {
   GstMssDemux *mssdemux = GST_MSS_DEMUX_CAST (demux);
   GSList *streams = gst_mss_manifest_get_streams (mssdemux->manifest);
-  GSList *iter;
   GSList *active_streams = NULL;
+  GSList *iter;
+  const gchar *protection_system_id =
+      gst_mss_manifest_get_protection_system_id (mssdemux->manifest);
+  const gchar *protection_data =
+      gst_mss_manifest_get_protection_data (mssdemux->manifest);
+  gboolean protected = protection_system_id && protection_data;
+  const gchar *selected_system = NULL;
 
   if (streams == NULL) {
     GST_INFO_OBJECT (mssdemux, "No streams found in the manifest");
@@ -383,7 +407,23 @@
     return FALSE;
   }
 
+  if (protected) {
+    const gchar *sys_ids[2] = { protection_system_id, NULL };
+
+    selected_system = gst_protection_select_system (sys_ids);
+    if (!selected_system) {
+      GST_ERROR_OBJECT (mssdemux, "stream is protected, but no "
+          "suitable decryptor element has been found");
+      return FALSE;
+    }
+  }
+
+  GST_INFO_OBJECT (mssdemux, "Changing max bitrate to %u",
+      demux->connection_speed);
+  gst_mss_manifest_change_bitrate (mssdemux->manifest, demux->connection_speed);
+
   GST_INFO_OBJECT (mssdemux, "Activating streams");
+
   for (iter = streams; iter; iter = g_slist_next (iter)) {
     GstPad *srcpad = NULL;
     GstMssDemuxStream *stream = NULL;
@@ -413,6 +453,11 @@
     const gchar *lang;
 
     caps = gst_mss_stream_get_caps (stream->manifest_stream);
+
+    if (protected) {
+      gst_mss_demux_apply_protection_system (caps, selected_system);
+    }
+
     gst_adaptive_demux_stream_set_caps (GST_ADAPTIVE_DEMUX_STREAM_CAST (stream),
         create_mss_caps (stream, caps));
     gst_caps_unref (caps);
@@ -425,6 +470,22 @@
       gst_adaptive_demux_stream_set_tags (GST_ADAPTIVE_DEMUX_STREAM_CAST
           (stream), tags);
     }
+
+    if (protected) {
+      gsize protection_data_len;
+      guchar *decoded_data =
+          g_base64_decode (protection_data, &protection_data_len);
+      GstBuffer *protection_buffer =
+          gst_buffer_new_wrapped (decoded_data, protection_data_len);
+      GstEvent *event =
+          gst_event_new_protection (protection_system_id, protection_buffer,
+          "smooth-streaming");
+
+      GST_LOG_OBJECT (stream, "Queuing Protection event on source pad");
+      gst_adaptive_demux_stream_queue_event ((GstAdaptiveDemuxStream *) stream,
+          event);
+      gst_buffer_unref (protection_buffer);
+    }
   }
 
   g_slist_free (active_streams);
@@ -485,10 +546,31 @@
   if (gst_mss_stream_select_bitrate (mssstream->manifest_stream, bitrate)) {
     GstCaps *caps;
     GstCaps *msscaps;
+    GstMssDemux *mssdemux = GST_MSS_DEMUX_CAST (stream->demux);
+    const gchar *protection_system_id =
+        gst_mss_manifest_get_protection_system_id (mssdemux->manifest);
+    const gchar *protection_data =
+        gst_mss_manifest_get_protection_data (mssdemux->manifest);
+    gboolean protected = protection_system_id && protection_data;
+
     caps = gst_mss_stream_get_caps (mssstream->manifest_stream);
 
     GST_DEBUG_OBJECT (stream->pad,
         "Starting streams reconfiguration due to bitrate changes");
+
+    if (protected) {
+      const gchar *sys_ids[2] = { protection_system_id, NULL };
+      const gchar *selected_system = gst_protection_select_system (sys_ids);
+
+      if (!selected_system) {
+        GST_ERROR_OBJECT (mssdemux, "stream is protected, but no "
+            "suitable decryptor element has been found");
+        return FALSE;
+      }
+
+      gst_mss_demux_apply_protection_system (caps, selected_system);
+    }
+
     msscaps = create_mss_caps (mssstream, caps);
 
     GST_DEBUG_OBJECT (stream->pad,
@@ -505,6 +587,10 @@
   return ret;
 }
 
+#define SEEK_UPDATES_PLAY_POSITION(r, start_type, stop_type) \
+  ((r >= 0 && start_type != GST_SEEK_TYPE_NONE) || \
+   (r < 0 && stop_type != GST_SEEK_TYPE_NONE))
+
 static gboolean
 gst_mss_demux_seek (GstAdaptiveDemux * demux, GstEvent * seek)
 {
@@ -522,7 +608,12 @@
       "seek event, rate: %f start: %" GST_TIME_FORMAT " stop: %"
       GST_TIME_FORMAT, rate, GST_TIME_ARGS (start), GST_TIME_ARGS (stop));
 
-  gst_mss_manifest_seek (mssdemux->manifest, start);
+  if (SEEK_UPDATES_PLAY_POSITION (rate, start_type, stop_type)) {
+    if (rate >= 0)
+      gst_mss_manifest_seek (mssdemux->manifest, rate >= 0, start);
+    else
+      gst_mss_manifest_seek (mssdemux->manifest, rate >= 0, stop);
+  }
 
   return TRUE;
 }
diff --git a/ext/smoothstreaming/gstmssdemux.h b/ext/smoothstreaming/gstmssdemux.h
index cc5ff7f..f3ea6cf 100644
--- a/ext/smoothstreaming/gstmssdemux.h
+++ b/ext/smoothstreaming/gstmssdemux.h
@@ -27,8 +27,8 @@
 #include <gst/adaptivedemux/gstadaptivedemux.h>
 #include <gst/base/gstadapter.h>
 #include <gst/base/gstdataqueue.h>
+#include <gst/gstprotection.h>
 #include "gstmssmanifest.h"
-#include <gst/uridownloader/gsturidownloader.h>
 
 G_BEGIN_DECLS
 
diff --git a/ext/smoothstreaming/gstmssmanifest.c b/ext/smoothstreaming/gstmssmanifest.c
index 6559c2e..02e559c 100644
--- a/ext/smoothstreaming/gstmssmanifest.c
+++ b/ext/smoothstreaming/gstmssmanifest.c
@@ -95,6 +95,9 @@
 
   gboolean is_live;
 
+  GString *protection_system_id;
+  gchar *protection_data;
+
   GSList *streams;
 };
 
@@ -267,6 +270,41 @@
   stream->regex_position = g_regex_new ("\\{start[ _]time\\}", 0, 0, NULL);
 }
 
+
+static void
+_gst_mss_parse_protection (GstMssManifest * manifest,
+    xmlNodePtr protection_node)
+{
+  xmlNodePtr nodeiter;
+
+  for (nodeiter = protection_node->children; nodeiter;
+      nodeiter = nodeiter->next) {
+    if (nodeiter->type == XML_ELEMENT_NODE
+        && (strcmp ((const char *) nodeiter->name, "ProtectionHeader") == 0)) {
+      xmlChar *system_id_attribute =
+          xmlGetProp (nodeiter, (xmlChar *) "SystemID");
+      gchar *value = (gchar *) system_id_attribute;
+      int id_len = strlen (value);
+      GString *system_id;
+
+      if (value[0] == '{') {
+        value++;
+        id_len--;
+      }
+
+      system_id = g_string_new (value);
+      system_id = g_string_ascii_down (system_id);
+      if (value[id_len - 1] == '}')
+        system_id = g_string_truncate (system_id, id_len - 1);
+
+      manifest->protection_system_id = system_id;
+      manifest->protection_data = (gchar *) xmlNodeGetContent (nodeiter);
+      xmlFree (system_id_attribute);
+      break;
+    }
+  }
+}
+
 GstMssManifest *
 gst_mss_manifest_new (GstBuffer * data)
 {
@@ -300,6 +338,11 @@
       manifest->streams = g_slist_append (manifest->streams, stream);
       _gst_mss_stream_init (stream, nodeiter);
     }
+
+    if (nodeiter->type == XML_ELEMENT_NODE
+        && (strcmp ((const char *) nodeiter->name, "Protection") == 0)) {
+      _gst_mss_parse_protection (manifest, nodeiter);
+    }
   }
 
   gst_buffer_unmap (data, &mapinfo);
@@ -327,10 +370,28 @@
 
   g_slist_free_full (manifest->streams, (GDestroyNotify) gst_mss_stream_free);
 
+  if (manifest->protection_system_id != NULL)
+    g_string_free (manifest->protection_system_id, TRUE);
+  xmlFree (manifest->protection_data);
+
   xmlFreeDoc (manifest->xml);
   g_free (manifest);
 }
 
+const gchar *
+gst_mss_manifest_get_protection_system_id (GstMssManifest * manifest)
+{
+  if (manifest->protection_system_id != NULL)
+    return manifest->protection_system_id->str;
+  return NULL;
+}
+
+const gchar *
+gst_mss_manifest_get_protection_data (GstMssManifest * manifest)
+{
+  return manifest->protection_data;
+}
+
 GSList *
 gst_mss_manifest_get_streams (GstMssManifest * manifest)
 {
@@ -639,11 +700,13 @@
   gchar *audiotag = (gchar *) xmlGetProp (node, (xmlChar *) "AudioTag");
   gchar *channels_str = (gchar *) xmlGetProp (node, (xmlChar *) "Channels");
   gchar *rate_str = (gchar *) xmlGetProp (node, (xmlChar *) "SamplingRate");
+  gchar *depth_str = (gchar *) xmlGetProp (node, (xmlChar *) "BitsPerSample");
   gchar *block_align_str =
       (gchar *) xmlGetProp (node, (xmlChar *) "PacketSize");
   gchar *codec_data_str =
       (gchar *) xmlGetProp (node, (xmlChar *) "CodecPrivateData");
   GstBuffer *codec_data = NULL;
+  gint depth = 0;
   gint block_align = 0;
   gint rate = 0;
   gint channels = 0;
@@ -671,6 +734,8 @@
     rate = (gint) g_ascii_strtoull (rate_str, NULL, 10);
   if (channels_str)
     channels = (int) g_ascii_strtoull (channels_str, NULL, 10);
+  if (depth_str)
+    depth = (gint) g_ascii_strtoull (depth_str, NULL, 10);
   if (block_align_str)
     block_align = (int) g_ascii_strtoull (block_align_str, NULL, 10);
 
@@ -697,6 +762,9 @@
         if (!block_align) {
           block_align = GST_READ_UINT16_LE (mapinfo.data + 12);
         }
+        if (!depth) {
+          depth = GST_READ_UINT16_LE (mapinfo.data + 14);
+        }
         gst_buffer_unmap (codec_data, &mapinfo);
 
         /* Consume all the WAVEFORMATEX structure, and pass only the rest of
@@ -723,6 +791,9 @@
   if (rate)
     gst_structure_set (structure, "rate", G_TYPE_INT, rate, NULL);
 
+  if (depth)
+    gst_structure_set (structure, "depth", G_TYPE_INT, depth, NULL);
+
   if (q->bitrate)
     gst_structure_set (structure, "bitrate", G_TYPE_INT, (int) q->bitrate,
         NULL);
@@ -738,6 +809,7 @@
   xmlFree (audiotag);
   xmlFree (channels_str);
   xmlFree (rate_str);
+  xmlFree (depth_str);
   xmlFree (block_align_str);
   xmlFree (codec_data_str);
 
@@ -915,7 +987,9 @@
     time = fragment->time + (fragment->duration * fragment->repetitions);
   } else {
     fragment = stream->current_fragment->data;
-    time = fragment->time + (fragment->duration * stream->fragment_repetition_index);
+    time =
+        fragment->time +
+        (fragment->duration * stream->fragment_repetition_index);
   }
 
   timescale = gst_mss_stream_get_timescale (stream);
@@ -1015,25 +1089,32 @@
 /**
  * Seeks all streams to the fragment that contains the set time
  *
+ * @forward: if this is forward playback
  * @time: time in nanoseconds
  */
 void
-gst_mss_manifest_seek (GstMssManifest * manifest, guint64 time)
+gst_mss_manifest_seek (GstMssManifest * manifest, gboolean forward,
+    guint64 time)
 {
   GSList *iter;
 
   for (iter = manifest->streams; iter; iter = g_slist_next (iter)) {
-    gst_mss_stream_seek (iter->data, time);
+    gst_mss_stream_seek (iter->data, forward, 0, time, NULL);
   }
 }
 
+#define SNAP_AFTER(forward,flags) \
+    ((forward && (flags & GST_SEEK_FLAG_SNAP_AFTER)) || \
+    (!forward && (flags & GST_SEEK_FLAG_SNAP_BEFORE)))
+
 /**
  * Seeks this stream to the fragment that contains the sample at time
  *
  * @time: time in nanoseconds
  */
 void
-gst_mss_stream_seek (GstMssStream * stream, guint64 time)
+gst_mss_stream_seek (GstMssStream * stream, gboolean forward,
+    GstSeekFlags flags, guint64 time, guint64 * final_time)
 {
   GList *iter;
   guint64 timescale;
@@ -1043,37 +1124,60 @@
   time = gst_util_uint64_scale_round (time, timescale, GST_SECOND);
 
   GST_DEBUG ("Stream %s seeking to %" G_GUINT64_FORMAT, stream->url, time);
-
   for (iter = stream->fragments; iter; iter = g_list_next (iter)) {
-    GList *next = g_list_next (iter);
-    if (next) {
-      fragment = next->data;
+    fragment = iter->data;
+    if (fragment->time + fragment->repetitions * fragment->duration > time) {
+      stream->current_fragment = iter;
+      stream->fragment_repetition_index =
+          (time - fragment->time) / fragment->duration;
+      if (((time - fragment->time) % fragment->duration) == 0) {
 
-      if (fragment->time > time) {
-        stream->current_fragment = iter;
-        break;
+        /* for reverse playback, start from the previous fragment when we are
+         * exactly at a limit */
+        if (!forward)
+          stream->fragment_repetition_index--;
+      } else if (SNAP_AFTER (forward, flags))
+        stream->fragment_repetition_index++;
+
+      if (stream->fragment_repetition_index == fragment->repetitions) {
+        /* move to the next one */
+        stream->fragment_repetition_index = 0;
+        stream->current_fragment = g_list_next (iter);
+        fragment =
+            stream->current_fragment ? stream->current_fragment->data : NULL;
+
+      } else if (stream->fragment_repetition_index == -1) {
+        if (g_list_previous (iter)) {
+          stream->current_fragment = g_list_previous (iter);
+          fragment = stream->current_fragment->data;
+          g_assert (fragment);
+          stream->fragment_repetition_index = fragment->repetitions - 1;
+        } else {
+          stream->fragment_repetition_index = 0;
+        }
       }
-    } else {
-      fragment = iter->data;
-      if (fragment->time + fragment->repetitions * fragment->duration > time) {
-        stream->current_fragment = iter;
-      } else {
-        stream->current_fragment = NULL;        /* EOS */
-      }
+
       break;
     }
-  }
 
-  /* position inside the repetitions */
-  if (stream->current_fragment) {
-    fragment = stream->current_fragment->data;
-    stream->fragment_repetition_index =
-        (time - fragment->time) / fragment->duration;
   }
 
   GST_DEBUG ("Stream %s seeked to fragment time %" G_GUINT64_FORMAT
-      " repetition %u", stream->url, fragment->time,
+      " repetition %u", stream->url,
+      fragment ? fragment->time : GST_CLOCK_TIME_NONE,
       stream->fragment_repetition_index);
+  if (final_time) {
+    if (fragment) {
+      *final_time = gst_util_uint64_scale_round (fragment->time +
+          stream->fragment_repetition_index * fragment->duration,
+          GST_SECOND, timescale);
+    } else {
+      GstMssStreamFragment *last_fragment = g_list_last (iter)->data;
+      *final_time = gst_util_uint64_scale_round (last_fragment->time +
+          last_fragment->repetitions * last_fragment->duration,
+          GST_SECOND, timescale);
+    }
+  }
 }
 
 guint64
@@ -1126,7 +1230,9 @@
     g_list_free_full (stream->fragments, g_free);
     stream->fragments = g_list_reverse (builder.fragments);
     stream->current_fragment = stream->fragments;
-    gst_mss_stream_seek (stream, current_gst_time);
+    /* TODO Verify how repositioning here works for reverse
+     * playback - it might start from the wrong fragment */
+    gst_mss_stream_seek (stream, TRUE, 0, current_gst_time, NULL);
   }
 }
 
@@ -1156,8 +1262,6 @@
   xmlNodePtr root;
   GstMapInfo info;
 
-  g_return_if_fail (manifest->is_live);
-
   gst_buffer_map (data, &info, GST_MAP_READ);
 
   xml = xmlReadMemory ((const gchar *) info.data,
diff --git a/ext/smoothstreaming/gstmssmanifest.h b/ext/smoothstreaming/gstmssmanifest.h
index 364f6d1..af7419c 100644
--- a/ext/smoothstreaming/gstmssmanifest.h
+++ b/ext/smoothstreaming/gstmssmanifest.h
@@ -44,7 +44,7 @@
 guint64 gst_mss_manifest_get_timescale (GstMssManifest * manifest);
 guint64 gst_mss_manifest_get_duration (GstMssManifest * manifest);
 GstClockTime gst_mss_manifest_get_gst_duration (GstMssManifest * manifest);
-void gst_mss_manifest_seek (GstMssManifest * manifest, guint64 time);
+void gst_mss_manifest_seek (GstMssManifest * manifest, gboolean forward, guint64 time);
 gboolean gst_mss_manifest_change_bitrate (GstMssManifest *manifest, guint64 bitrate);
 guint64 gst_mss_manifest_get_current_bitrate (GstMssManifest * manifest);
 gboolean gst_mss_manifest_is_live (GstMssManifest * manifest);
@@ -52,6 +52,8 @@
 gint gst_mss_manifest_get_look_ahead_fragments_count (GstMssManifest * manifest);
 void gst_mss_manifest_reload_fragments (GstMssManifest * manifest, GstBuffer * data);
 GstClockTime gst_mss_manifest_get_min_fragment_duration (GstMssManifest * manifest);
+const gchar * gst_mss_manifest_get_protection_system_id (GstMssManifest * manifest);
+const gchar * gst_mss_manifest_get_protection_data (GstMssManifest * manifest);
 
 GstMssStreamType gst_mss_stream_get_type (GstMssStream *stream);
 GstCaps * gst_mss_stream_get_caps (GstMssStream * stream);
@@ -65,7 +67,7 @@
 gboolean gst_mss_stream_has_next_fragment (GstMssStream * stream);
 GstFlowReturn gst_mss_stream_advance_fragment (GstMssStream * stream);
 GstFlowReturn gst_mss_stream_regress_fragment (GstMssStream * stream);
-void gst_mss_stream_seek (GstMssStream * stream, guint64 time);
+void gst_mss_stream_seek (GstMssStream * stream, gboolean forward, GstSeekFlags flags, guint64 time, guint64 * final_time);
 const gchar * gst_mss_stream_get_lang (GstMssStream * stream);
 
 const gchar * gst_mss_stream_type_name (GstMssStreamType streamtype);
diff --git a/ext/sndfile/Makefile.in b/ext/sndfile/Makefile.in
index a630097..0a42660 100644
--- a/ext/sndfile/Makefile.in
+++ b/ext/sndfile/Makefile.in
@@ -116,16 +116,15 @@
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
 	$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
-	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gsettings.m4 \
-	$(top_srcdir)/m4/gst-fionread.m4 $(top_srcdir)/m4/gst-sdl.m4 \
-	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
-	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
-	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libgcrypt.m4 \
-	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
-	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
-	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
-	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
-	$(top_srcdir)/configure.ac
+	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gst-fionread.m4 \
+	$(top_srcdir)/m4/gst-sdl.m4 $(top_srcdir)/m4/iconv.m4 \
+	$(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \
+	$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
+	$(top_srcdir)/m4/libgcrypt.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
+	$(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \
@@ -276,6 +275,8 @@
 CLUTTER_X11_LIBS = @CLUTTER_X11_LIBS@
 CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
+CUDA_CFLAGS = @CUDA_CFLAGS@
+CUDA_LIBS = @CUDA_LIBS@
 CURL_CFLAGS = @CURL_CFLAGS@
 CURL_LIBS = @CURL_LIBS@
 CXX = @CXX@
@@ -313,6 +314,8 @@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
+EGL_CFLAGS = @EGL_CFLAGS@
+EGL_LIBS = @EGL_LIBS@
 EGREP = @EGREP@
 ERROR_CFLAGS = @ERROR_CFLAGS@
 ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
@@ -321,7 +324,6 @@
 EXIF_CFLAGS = @EXIF_CFLAGS@
 EXIF_LIBS = @EXIF_LIBS@
 FAAC_LIBS = @FAAC_LIBS@
-FAAD_IS_NEAAC = @FAAD_IS_NEAAC@
 FAAD_LIBS = @FAAD_LIBS@
 FFLAGS = @FFLAGS@
 FGREP = @FGREP@
@@ -340,8 +342,9 @@
 GIO_LIBS = @GIO_LIBS@
 GIO_UNIX_CFLAGS = @GIO_UNIX_CFLAGS@
 GIO_UNIX_LIBS = @GIO_UNIX_LIBS@
+GLES2_CFLAGS = @GLES2_CFLAGS@
+GLES2_LIBS = @GLES2_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
-GLIB_COMPILE_SCHEMAS = @GLIB_COMPILE_SCHEMAS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
@@ -358,16 +361,17 @@
 GMODULE_NO_EXPORT_LIBS = @GMODULE_NO_EXPORT_LIBS@
 GMSGFMT = @GMSGFMT@
 GMSGFMT_015 = @GMSGFMT_015@
+GNUSTL_CFLAGS = @GNUSTL_CFLAGS@
+GNUSTL_LIBS = @GNUSTL_LIBS@
 GRAPHENE_CFLAGS = @GRAPHENE_CFLAGS@
 GRAPHENE_LIBS = @GRAPHENE_LIBS@
 GREP = @GREP@
-GSETTINGS_CFLAGS = @GSETTINGS_CFLAGS@
-GSETTINGS_DISABLE_SCHEMAS_COMPILE = @GSETTINGS_DISABLE_SCHEMAS_COMPILE@
-GSETTINGS_LIBS = @GSETTINGS_LIBS@
 GSM_LIBS = @GSM_LIBS@
 GSTPB_PLUGINS_DIR = @GSTPB_PLUGINS_DIR@
 GSTPB_PREFIX = @GSTPB_PREFIX@
 GST_AGE = @GST_AGE@
+GST_ALLOCATORS_CFLAGS = @GST_ALLOCATORS_CFLAGS@
+GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
 GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
 GST_API_VERSION = @GST_API_VERSION@
 GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
@@ -393,6 +397,8 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PBUTILS_CFLAGS = @GST_PBUTILS_CFLAGS@
+GST_PBUTILS_LIBS = @GST_PBUTILS_LIBS@
 GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BAD_CFLAGS = @GST_PLUGINS_BAD_CFLAGS@
@@ -418,6 +424,8 @@
 GST_PREFIX = @GST_PREFIX@
 GST_REVISION = @GST_REVISION@
 GST_TOOLS_DIR = @GST_TOOLS_DIR@
+GST_VIDEO_CFLAGS = @GST_VIDEO_CFLAGS@
+GST_VIDEO_LIBS = @GST_VIDEO_LIBS@
 GTK3_CFLAGS = @GTK3_CFLAGS@
 GTK3_GL_CFLAGS = @GTK3_GL_CFLAGS@
 GTK3_GL_LIBS = @GTK3_GL_LIBS@
@@ -519,6 +527,7 @@
 LTLIBICONV = @LTLIBICONV@
 LTLIBINTL = @LTLIBINTL@
 LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
 MANIFEST_TOOL = @MANIFEST_TOOL@
@@ -532,8 +541,6 @@
 MODPLUG_LIBS = @MODPLUG_LIBS@
 MPEG2ENC_CFLAGS = @MPEG2ENC_CFLAGS@
 MPEG2ENC_LIBS = @MPEG2ENC_LIBS@
-MPG123_CFLAGS = @MPG123_CFLAGS@
-MPG123_LIBS = @MPG123_LIBS@
 MPLEX_CFLAGS = @MPLEX_CFLAGS@
 MPLEX_LDFLAGS = @MPLEX_LDFLAGS@
 MPLEX_LIBS = @MPLEX_LIBS@
@@ -549,6 +556,8 @@
 NETTLE_LIBS = @NETTLE_LIBS@
 NM = @NM@
 NMEDIT = @NMEDIT@
+NVENCODE_CFLAGS = @NVENCODE_CFLAGS@
+NVENCODE_LIBS = @NVENCODE_LIBS@
 OBJC = @OBJC@
 OBJCDEPMODE = @OBJCDEPMODE@
 OBJCFLAGS = @OBJCFLAGS@
@@ -606,16 +615,18 @@
 PYTHON_PLATFORM = @PYTHON_PLATFORM@
 PYTHON_PREFIX = @PYTHON_PREFIX@
 PYTHON_VERSION = @PYTHON_VERSION@
+QT_ANDROID_CFLAGS = @QT_ANDROID_CFLAGS@
+QT_ANDROID_LIBS = @QT_ANDROID_LIBS@
 QT_CFLAGS = @QT_CFLAGS@
 QT_LIBS = @QT_LIBS@
+QT_MAC_CFLAGS = @QT_MAC_CFLAGS@
+QT_MAC_LIBS = @QT_MAC_LIBS@
 QT_WAYLAND_CFLAGS = @QT_WAYLAND_CFLAGS@
 QT_WAYLAND_LIBS = @QT_WAYLAND_LIBS@
 QT_X11_CFLAGS = @QT_X11_CFLAGS@
 QT_X11_LIBS = @QT_X11_LIBS@
 RANLIB = @RANLIB@
 RCC = @RCC@
-RSVG_2_36_2_CFLAGS = @RSVG_2_36_2_CFLAGS@
-RSVG_2_36_2_LIBS = @RSVG_2_36_2_LIBS@
 RSVG_CFLAGS = @RSVG_CFLAGS@
 RSVG_LIBS = @RSVG_LIBS@
 RTMP_CFLAGS = @RTMP_CFLAGS@
@@ -667,6 +678,7 @@
 VOAACENC_LIBS = @VOAACENC_LIBS@
 VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
 VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VULKAN_LIBS = @VULKAN_LIBS@
 WARNING_CFLAGS = @WARNING_CFLAGS@
 WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
 WARNING_OBJCFLAGS = @WARNING_OBJCFLAGS@
@@ -677,6 +689,7 @@
 WAYLAND_LIBS = @WAYLAND_LIBS@
 WEBP_CFLAGS = @WEBP_CFLAGS@
 WEBP_LIBS = @WEBP_LIBS@
+WGET = @WGET@
 WILDMIDI_CFLAGS = @WILDMIDI_CFLAGS@
 WILDMIDI_LIBS = @WILDMIDI_LIBS@
 WINKS_LIBS = @WINKS_LIBS@
@@ -686,6 +699,8 @@
 X11_LIBS = @X11_LIBS@
 X265_CFLAGS = @X265_CFLAGS@
 X265_LIBS = @X265_LIBS@
+XCB_CFLAGS = @XCB_CFLAGS@
+XCB_LIBS = @XCB_LIBS@
 XCOMPOSITE_CFLAGS = @XCOMPOSITE_CFLAGS@
 XCOMPOSITE_LIBS = @XCOMPOSITE_LIBS@
 XGETTEXT = @XGETTEXT@
@@ -723,7 +738,6 @@
 docdir = @docdir@
 dvidir = @dvidir@
 exec_prefix = @exec_prefix@
-gsettingsschemadir = @gsettingsschemadir@
 host = @host@
 host_alias = @host_alias@
 host_cpu = @host_cpu@
diff --git a/ext/sndfile/gstsfdec.c b/ext/sndfile/gstsfdec.c
index b67a743..d854dba 100644
--- a/ext/sndfile/gstsfdec.c
+++ b/ext/sndfile/gstsfdec.c
@@ -206,7 +206,7 @@
 
   /* FIXME: we should be using GstSegment for all this */
   if (cur_type != GST_SEEK_TYPE_SET || stop_type != GST_SEEK_TYPE_NONE)
-    goto unsuported_type;
+    goto unsupported_type;
 
   if (stop_type == GST_SEEK_TYPE_NONE)
     stop = GST_CLOCK_TIME_NONE;
@@ -270,7 +270,7 @@
     GST_DEBUG_OBJECT (self, "seeking is only supported in TIME format");
     return FALSE;
   }
-unsuported_type:
+unsupported_type:
   {
     GST_DEBUG_OBJECT (self, "unsupported seek type");
     return FALSE;
diff --git a/ext/sndio/Makefile.in b/ext/sndio/Makefile.in
index bedcd8d..5e89c76 100644
--- a/ext/sndio/Makefile.in
+++ b/ext/sndio/Makefile.in
@@ -116,16 +116,15 @@
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
 	$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
-	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gsettings.m4 \
-	$(top_srcdir)/m4/gst-fionread.m4 $(top_srcdir)/m4/gst-sdl.m4 \
-	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
-	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
-	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libgcrypt.m4 \
-	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
-	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
-	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
-	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
-	$(top_srcdir)/configure.ac
+	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gst-fionread.m4 \
+	$(top_srcdir)/m4/gst-sdl.m4 $(top_srcdir)/m4/iconv.m4 \
+	$(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \
+	$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
+	$(top_srcdir)/m4/libgcrypt.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
+	$(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \
@@ -275,6 +274,8 @@
 CLUTTER_X11_LIBS = @CLUTTER_X11_LIBS@
 CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
+CUDA_CFLAGS = @CUDA_CFLAGS@
+CUDA_LIBS = @CUDA_LIBS@
 CURL_CFLAGS = @CURL_CFLAGS@
 CURL_LIBS = @CURL_LIBS@
 CXX = @CXX@
@@ -312,6 +313,8 @@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
+EGL_CFLAGS = @EGL_CFLAGS@
+EGL_LIBS = @EGL_LIBS@
 EGREP = @EGREP@
 ERROR_CFLAGS = @ERROR_CFLAGS@
 ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
@@ -320,7 +323,6 @@
 EXIF_CFLAGS = @EXIF_CFLAGS@
 EXIF_LIBS = @EXIF_LIBS@
 FAAC_LIBS = @FAAC_LIBS@
-FAAD_IS_NEAAC = @FAAD_IS_NEAAC@
 FAAD_LIBS = @FAAD_LIBS@
 FFLAGS = @FFLAGS@
 FGREP = @FGREP@
@@ -339,8 +341,9 @@
 GIO_LIBS = @GIO_LIBS@
 GIO_UNIX_CFLAGS = @GIO_UNIX_CFLAGS@
 GIO_UNIX_LIBS = @GIO_UNIX_LIBS@
+GLES2_CFLAGS = @GLES2_CFLAGS@
+GLES2_LIBS = @GLES2_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
-GLIB_COMPILE_SCHEMAS = @GLIB_COMPILE_SCHEMAS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
@@ -357,16 +360,17 @@
 GMODULE_NO_EXPORT_LIBS = @GMODULE_NO_EXPORT_LIBS@
 GMSGFMT = @GMSGFMT@
 GMSGFMT_015 = @GMSGFMT_015@
+GNUSTL_CFLAGS = @GNUSTL_CFLAGS@
+GNUSTL_LIBS = @GNUSTL_LIBS@
 GRAPHENE_CFLAGS = @GRAPHENE_CFLAGS@
 GRAPHENE_LIBS = @GRAPHENE_LIBS@
 GREP = @GREP@
-GSETTINGS_CFLAGS = @GSETTINGS_CFLAGS@
-GSETTINGS_DISABLE_SCHEMAS_COMPILE = @GSETTINGS_DISABLE_SCHEMAS_COMPILE@
-GSETTINGS_LIBS = @GSETTINGS_LIBS@
 GSM_LIBS = @GSM_LIBS@
 GSTPB_PLUGINS_DIR = @GSTPB_PLUGINS_DIR@
 GSTPB_PREFIX = @GSTPB_PREFIX@
 GST_AGE = @GST_AGE@
+GST_ALLOCATORS_CFLAGS = @GST_ALLOCATORS_CFLAGS@
+GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
 GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
 GST_API_VERSION = @GST_API_VERSION@
 GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
@@ -392,6 +396,8 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PBUTILS_CFLAGS = @GST_PBUTILS_CFLAGS@
+GST_PBUTILS_LIBS = @GST_PBUTILS_LIBS@
 GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BAD_CFLAGS = @GST_PLUGINS_BAD_CFLAGS@
@@ -417,6 +423,8 @@
 GST_PREFIX = @GST_PREFIX@
 GST_REVISION = @GST_REVISION@
 GST_TOOLS_DIR = @GST_TOOLS_DIR@
+GST_VIDEO_CFLAGS = @GST_VIDEO_CFLAGS@
+GST_VIDEO_LIBS = @GST_VIDEO_LIBS@
 GTK3_CFLAGS = @GTK3_CFLAGS@
 GTK3_GL_CFLAGS = @GTK3_GL_CFLAGS@
 GTK3_GL_LIBS = @GTK3_GL_LIBS@
@@ -518,6 +526,7 @@
 LTLIBICONV = @LTLIBICONV@
 LTLIBINTL = @LTLIBINTL@
 LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
 MANIFEST_TOOL = @MANIFEST_TOOL@
@@ -531,8 +540,6 @@
 MODPLUG_LIBS = @MODPLUG_LIBS@
 MPEG2ENC_CFLAGS = @MPEG2ENC_CFLAGS@
 MPEG2ENC_LIBS = @MPEG2ENC_LIBS@
-MPG123_CFLAGS = @MPG123_CFLAGS@
-MPG123_LIBS = @MPG123_LIBS@
 MPLEX_CFLAGS = @MPLEX_CFLAGS@
 MPLEX_LDFLAGS = @MPLEX_LDFLAGS@
 MPLEX_LIBS = @MPLEX_LIBS@
@@ -548,6 +555,8 @@
 NETTLE_LIBS = @NETTLE_LIBS@
 NM = @NM@
 NMEDIT = @NMEDIT@
+NVENCODE_CFLAGS = @NVENCODE_CFLAGS@
+NVENCODE_LIBS = @NVENCODE_LIBS@
 OBJC = @OBJC@
 OBJCDEPMODE = @OBJCDEPMODE@
 OBJCFLAGS = @OBJCFLAGS@
@@ -605,16 +614,18 @@
 PYTHON_PLATFORM = @PYTHON_PLATFORM@
 PYTHON_PREFIX = @PYTHON_PREFIX@
 PYTHON_VERSION = @PYTHON_VERSION@
+QT_ANDROID_CFLAGS = @QT_ANDROID_CFLAGS@
+QT_ANDROID_LIBS = @QT_ANDROID_LIBS@
 QT_CFLAGS = @QT_CFLAGS@
 QT_LIBS = @QT_LIBS@
+QT_MAC_CFLAGS = @QT_MAC_CFLAGS@
+QT_MAC_LIBS = @QT_MAC_LIBS@
 QT_WAYLAND_CFLAGS = @QT_WAYLAND_CFLAGS@
 QT_WAYLAND_LIBS = @QT_WAYLAND_LIBS@
 QT_X11_CFLAGS = @QT_X11_CFLAGS@
 QT_X11_LIBS = @QT_X11_LIBS@
 RANLIB = @RANLIB@
 RCC = @RCC@
-RSVG_2_36_2_CFLAGS = @RSVG_2_36_2_CFLAGS@
-RSVG_2_36_2_LIBS = @RSVG_2_36_2_LIBS@
 RSVG_CFLAGS = @RSVG_CFLAGS@
 RSVG_LIBS = @RSVG_LIBS@
 RTMP_CFLAGS = @RTMP_CFLAGS@
@@ -666,6 +677,7 @@
 VOAACENC_LIBS = @VOAACENC_LIBS@
 VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
 VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VULKAN_LIBS = @VULKAN_LIBS@
 WARNING_CFLAGS = @WARNING_CFLAGS@
 WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
 WARNING_OBJCFLAGS = @WARNING_OBJCFLAGS@
@@ -676,6 +688,7 @@
 WAYLAND_LIBS = @WAYLAND_LIBS@
 WEBP_CFLAGS = @WEBP_CFLAGS@
 WEBP_LIBS = @WEBP_LIBS@
+WGET = @WGET@
 WILDMIDI_CFLAGS = @WILDMIDI_CFLAGS@
 WILDMIDI_LIBS = @WILDMIDI_LIBS@
 WINKS_LIBS = @WINKS_LIBS@
@@ -685,6 +698,8 @@
 X11_LIBS = @X11_LIBS@
 X265_CFLAGS = @X265_CFLAGS@
 X265_LIBS = @X265_LIBS@
+XCB_CFLAGS = @XCB_CFLAGS@
+XCB_LIBS = @XCB_LIBS@
 XCOMPOSITE_CFLAGS = @XCOMPOSITE_CFLAGS@
 XCOMPOSITE_LIBS = @XCOMPOSITE_LIBS@
 XGETTEXT = @XGETTEXT@
@@ -722,7 +737,6 @@
 docdir = @docdir@
 dvidir = @dvidir@
 exec_prefix = @exec_prefix@
-gsettingsschemadir = @gsettingsschemadir@
 host = @host@
 host_alias = @host_alias@
 host_cpu = @host_cpu@
diff --git a/ext/sndio/sndiosink.c b/ext/sndio/sndiosink.c
index d2680a5..1eab800 100644
--- a/ext/sndio/sndiosink.c
+++ b/ext/sndio/sndiosink.c
@@ -25,7 +25,7 @@
  * <para>
  * Simple example pipeline that plays an Ogg/Vorbis file via sndio:
  * <programlisting>
- * gst-launch -v filesrc location=foo.ogg ! decodebin ! audioconvert ! audioresample ! sndiosink
+ * gst-launch-1.0 -v filesrc location=foo.ogg ! decodebin ! audioconvert ! audioresample ! sndiosink
  * </programlisting>
  * </para>
  * </refsect2>
diff --git a/ext/sndio/sndiosrc.c b/ext/sndio/sndiosrc.c
index 19776c2..6800c7d 100644
--- a/ext/sndio/sndiosrc.c
+++ b/ext/sndio/sndiosrc.c
@@ -25,7 +25,7 @@
  * <para>
  * Simple example pipeline that records an Ogg/Vorbis file via sndio:
  * <programlisting>
- * gst-launch -v sndiosrc ! audioconvert ! vorbisenc ! oggmux ! filesink location=foo.ogg 
+ * gst-launch-1.0 -v sndiosrc ! audioconvert ! vorbisenc ! oggmux ! filesink location=foo.ogg
  * </programlisting>
  * </para>
  * </refsect2>
diff --git a/ext/soundtouch/Makefile.in b/ext/soundtouch/Makefile.in
index 7c2a018..cfa1b09 100644
--- a/ext/soundtouch/Makefile.in
+++ b/ext/soundtouch/Makefile.in
@@ -116,16 +116,15 @@
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
 	$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
-	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gsettings.m4 \
-	$(top_srcdir)/m4/gst-fionread.m4 $(top_srcdir)/m4/gst-sdl.m4 \
-	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
-	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
-	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libgcrypt.m4 \
-	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
-	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
-	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
-	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
-	$(top_srcdir)/configure.ac
+	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gst-fionread.m4 \
+	$(top_srcdir)/m4/gst-sdl.m4 $(top_srcdir)/m4/iconv.m4 \
+	$(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \
+	$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
+	$(top_srcdir)/m4/libgcrypt.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
+	$(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \
@@ -295,6 +294,8 @@
 CLUTTER_X11_LIBS = @CLUTTER_X11_LIBS@
 CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
+CUDA_CFLAGS = @CUDA_CFLAGS@
+CUDA_LIBS = @CUDA_LIBS@
 CURL_CFLAGS = @CURL_CFLAGS@
 CURL_LIBS = @CURL_LIBS@
 CXX = @CXX@
@@ -332,6 +333,8 @@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
+EGL_CFLAGS = @EGL_CFLAGS@
+EGL_LIBS = @EGL_LIBS@
 EGREP = @EGREP@
 ERROR_CFLAGS = @ERROR_CFLAGS@
 ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
@@ -340,7 +343,6 @@
 EXIF_CFLAGS = @EXIF_CFLAGS@
 EXIF_LIBS = @EXIF_LIBS@
 FAAC_LIBS = @FAAC_LIBS@
-FAAD_IS_NEAAC = @FAAD_IS_NEAAC@
 FAAD_LIBS = @FAAD_LIBS@
 FFLAGS = @FFLAGS@
 FGREP = @FGREP@
@@ -359,8 +361,9 @@
 GIO_LIBS = @GIO_LIBS@
 GIO_UNIX_CFLAGS = @GIO_UNIX_CFLAGS@
 GIO_UNIX_LIBS = @GIO_UNIX_LIBS@
+GLES2_CFLAGS = @GLES2_CFLAGS@
+GLES2_LIBS = @GLES2_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
-GLIB_COMPILE_SCHEMAS = @GLIB_COMPILE_SCHEMAS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
@@ -377,16 +380,17 @@
 GMODULE_NO_EXPORT_LIBS = @GMODULE_NO_EXPORT_LIBS@
 GMSGFMT = @GMSGFMT@
 GMSGFMT_015 = @GMSGFMT_015@
+GNUSTL_CFLAGS = @GNUSTL_CFLAGS@
+GNUSTL_LIBS = @GNUSTL_LIBS@
 GRAPHENE_CFLAGS = @GRAPHENE_CFLAGS@
 GRAPHENE_LIBS = @GRAPHENE_LIBS@
 GREP = @GREP@
-GSETTINGS_CFLAGS = @GSETTINGS_CFLAGS@
-GSETTINGS_DISABLE_SCHEMAS_COMPILE = @GSETTINGS_DISABLE_SCHEMAS_COMPILE@
-GSETTINGS_LIBS = @GSETTINGS_LIBS@
 GSM_LIBS = @GSM_LIBS@
 GSTPB_PLUGINS_DIR = @GSTPB_PLUGINS_DIR@
 GSTPB_PREFIX = @GSTPB_PREFIX@
 GST_AGE = @GST_AGE@
+GST_ALLOCATORS_CFLAGS = @GST_ALLOCATORS_CFLAGS@
+GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
 GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
 GST_API_VERSION = @GST_API_VERSION@
 GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
@@ -412,6 +416,8 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PBUTILS_CFLAGS = @GST_PBUTILS_CFLAGS@
+GST_PBUTILS_LIBS = @GST_PBUTILS_LIBS@
 GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BAD_CFLAGS = @GST_PLUGINS_BAD_CFLAGS@
@@ -437,6 +443,8 @@
 GST_PREFIX = @GST_PREFIX@
 GST_REVISION = @GST_REVISION@
 GST_TOOLS_DIR = @GST_TOOLS_DIR@
+GST_VIDEO_CFLAGS = @GST_VIDEO_CFLAGS@
+GST_VIDEO_LIBS = @GST_VIDEO_LIBS@
 GTK3_CFLAGS = @GTK3_CFLAGS@
 GTK3_GL_CFLAGS = @GTK3_GL_CFLAGS@
 GTK3_GL_LIBS = @GTK3_GL_LIBS@
@@ -538,6 +546,7 @@
 LTLIBICONV = @LTLIBICONV@
 LTLIBINTL = @LTLIBINTL@
 LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
 MANIFEST_TOOL = @MANIFEST_TOOL@
@@ -551,8 +560,6 @@
 MODPLUG_LIBS = @MODPLUG_LIBS@
 MPEG2ENC_CFLAGS = @MPEG2ENC_CFLAGS@
 MPEG2ENC_LIBS = @MPEG2ENC_LIBS@
-MPG123_CFLAGS = @MPG123_CFLAGS@
-MPG123_LIBS = @MPG123_LIBS@
 MPLEX_CFLAGS = @MPLEX_CFLAGS@
 MPLEX_LDFLAGS = @MPLEX_LDFLAGS@
 MPLEX_LIBS = @MPLEX_LIBS@
@@ -568,6 +575,8 @@
 NETTLE_LIBS = @NETTLE_LIBS@
 NM = @NM@
 NMEDIT = @NMEDIT@
+NVENCODE_CFLAGS = @NVENCODE_CFLAGS@
+NVENCODE_LIBS = @NVENCODE_LIBS@
 OBJC = @OBJC@
 OBJCDEPMODE = @OBJCDEPMODE@
 OBJCFLAGS = @OBJCFLAGS@
@@ -625,16 +634,18 @@
 PYTHON_PLATFORM = @PYTHON_PLATFORM@
 PYTHON_PREFIX = @PYTHON_PREFIX@
 PYTHON_VERSION = @PYTHON_VERSION@
+QT_ANDROID_CFLAGS = @QT_ANDROID_CFLAGS@
+QT_ANDROID_LIBS = @QT_ANDROID_LIBS@
 QT_CFLAGS = @QT_CFLAGS@
 QT_LIBS = @QT_LIBS@
+QT_MAC_CFLAGS = @QT_MAC_CFLAGS@
+QT_MAC_LIBS = @QT_MAC_LIBS@
 QT_WAYLAND_CFLAGS = @QT_WAYLAND_CFLAGS@
 QT_WAYLAND_LIBS = @QT_WAYLAND_LIBS@
 QT_X11_CFLAGS = @QT_X11_CFLAGS@
 QT_X11_LIBS = @QT_X11_LIBS@
 RANLIB = @RANLIB@
 RCC = @RCC@
-RSVG_2_36_2_CFLAGS = @RSVG_2_36_2_CFLAGS@
-RSVG_2_36_2_LIBS = @RSVG_2_36_2_LIBS@
 RSVG_CFLAGS = @RSVG_CFLAGS@
 RSVG_LIBS = @RSVG_LIBS@
 RTMP_CFLAGS = @RTMP_CFLAGS@
@@ -686,6 +697,7 @@
 VOAACENC_LIBS = @VOAACENC_LIBS@
 VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
 VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VULKAN_LIBS = @VULKAN_LIBS@
 WARNING_CFLAGS = @WARNING_CFLAGS@
 WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
 WARNING_OBJCFLAGS = @WARNING_OBJCFLAGS@
@@ -696,6 +708,7 @@
 WAYLAND_LIBS = @WAYLAND_LIBS@
 WEBP_CFLAGS = @WEBP_CFLAGS@
 WEBP_LIBS = @WEBP_LIBS@
+WGET = @WGET@
 WILDMIDI_CFLAGS = @WILDMIDI_CFLAGS@
 WILDMIDI_LIBS = @WILDMIDI_LIBS@
 WINKS_LIBS = @WINKS_LIBS@
@@ -705,6 +718,8 @@
 X11_LIBS = @X11_LIBS@
 X265_CFLAGS = @X265_CFLAGS@
 X265_LIBS = @X265_LIBS@
+XCB_CFLAGS = @XCB_CFLAGS@
+XCB_LIBS = @XCB_LIBS@
 XCOMPOSITE_CFLAGS = @XCOMPOSITE_CFLAGS@
 XCOMPOSITE_LIBS = @XCOMPOSITE_LIBS@
 XGETTEXT = @XGETTEXT@
@@ -742,7 +757,6 @@
 docdir = @docdir@
 dvidir = @dvidir@
 exec_prefix = @exec_prefix@
-gsettingsschemadir = @gsettingsschemadir@
 host = @host@
 host_alias = @host_alias@
 host_cpu = @host_cpu@
diff --git a/ext/spandsp/Makefile.am b/ext/spandsp/Makefile.am
index 95ab3d9..405068e 100644
--- a/ext/spandsp/Makefile.am
+++ b/ext/spandsp/Makefile.am
@@ -1,10 +1,10 @@
 plugin_LTLIBRARIES = libgstspandsp.la
 
-libgstspandsp_la_SOURCES = gstspandsp.c gstspanplc.c gstdtmfdetect.c
+libgstspandsp_la_SOURCES = gstspandsp.c gstspanplc.c gstdtmfdetect.c gsttonegeneratesrc.c
 libgstspandsp_la_CFLAGS = $(GST_CFLAGS) $(GST_PLUGINS_BASE_CFLAGS) $(SPANDSP_CFLAGS)
 libgstspandsp_la_LIBADD = $(SPANDSP_LIBS) $(GST_PLUGINS_BASE_LIBS) \
 	 $(GST_BASE_LIBS) $(GST_LIBS)
 libgstspandsp_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS)
 libgstspandsp_la_LIBTOOLFLAGS = $(GST_PLUGIN_LIBTOOLFLAGS)
 
-noinst_HEADERS = gstspanplc.h gstdtmfdetect.h
+noinst_HEADERS = gstspanplc.h gstdtmfdetect.h gsttonegeneratesrc.h
diff --git a/ext/spandsp/Makefile.in b/ext/spandsp/Makefile.in
index a12f263..2924b61 100644
--- a/ext/spandsp/Makefile.in
+++ b/ext/spandsp/Makefile.in
@@ -116,16 +116,15 @@
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
 	$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
-	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gsettings.m4 \
-	$(top_srcdir)/m4/gst-fionread.m4 $(top_srcdir)/m4/gst-sdl.m4 \
-	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
-	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
-	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libgcrypt.m4 \
-	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
-	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
-	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
-	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
-	$(top_srcdir)/configure.ac
+	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gst-fionread.m4 \
+	$(top_srcdir)/m4/gst-sdl.m4 $(top_srcdir)/m4/iconv.m4 \
+	$(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \
+	$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
+	$(top_srcdir)/m4/libgcrypt.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
+	$(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \
@@ -169,7 +168,8 @@
 	$(am__DEPENDENCIES_1)
 am_libgstspandsp_la_OBJECTS = libgstspandsp_la-gstspandsp.lo \
 	libgstspandsp_la-gstspanplc.lo \
-	libgstspandsp_la-gstdtmfdetect.lo
+	libgstspandsp_la-gstdtmfdetect.lo \
+	libgstspandsp_la-gsttonegeneratesrc.lo
 libgstspandsp_la_OBJECTS = $(am_libgstspandsp_la_OBJECTS)
 AM_V_lt = $(am__v_lt_@AM_V@)
 am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
@@ -277,6 +277,8 @@
 CLUTTER_X11_LIBS = @CLUTTER_X11_LIBS@
 CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
+CUDA_CFLAGS = @CUDA_CFLAGS@
+CUDA_LIBS = @CUDA_LIBS@
 CURL_CFLAGS = @CURL_CFLAGS@
 CURL_LIBS = @CURL_LIBS@
 CXX = @CXX@
@@ -314,6 +316,8 @@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
+EGL_CFLAGS = @EGL_CFLAGS@
+EGL_LIBS = @EGL_LIBS@
 EGREP = @EGREP@
 ERROR_CFLAGS = @ERROR_CFLAGS@
 ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
@@ -322,7 +326,6 @@
 EXIF_CFLAGS = @EXIF_CFLAGS@
 EXIF_LIBS = @EXIF_LIBS@
 FAAC_LIBS = @FAAC_LIBS@
-FAAD_IS_NEAAC = @FAAD_IS_NEAAC@
 FAAD_LIBS = @FAAD_LIBS@
 FFLAGS = @FFLAGS@
 FGREP = @FGREP@
@@ -341,8 +344,9 @@
 GIO_LIBS = @GIO_LIBS@
 GIO_UNIX_CFLAGS = @GIO_UNIX_CFLAGS@
 GIO_UNIX_LIBS = @GIO_UNIX_LIBS@
+GLES2_CFLAGS = @GLES2_CFLAGS@
+GLES2_LIBS = @GLES2_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
-GLIB_COMPILE_SCHEMAS = @GLIB_COMPILE_SCHEMAS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
@@ -359,16 +363,17 @@
 GMODULE_NO_EXPORT_LIBS = @GMODULE_NO_EXPORT_LIBS@
 GMSGFMT = @GMSGFMT@
 GMSGFMT_015 = @GMSGFMT_015@
+GNUSTL_CFLAGS = @GNUSTL_CFLAGS@
+GNUSTL_LIBS = @GNUSTL_LIBS@
 GRAPHENE_CFLAGS = @GRAPHENE_CFLAGS@
 GRAPHENE_LIBS = @GRAPHENE_LIBS@
 GREP = @GREP@
-GSETTINGS_CFLAGS = @GSETTINGS_CFLAGS@
-GSETTINGS_DISABLE_SCHEMAS_COMPILE = @GSETTINGS_DISABLE_SCHEMAS_COMPILE@
-GSETTINGS_LIBS = @GSETTINGS_LIBS@
 GSM_LIBS = @GSM_LIBS@
 GSTPB_PLUGINS_DIR = @GSTPB_PLUGINS_DIR@
 GSTPB_PREFIX = @GSTPB_PREFIX@
 GST_AGE = @GST_AGE@
+GST_ALLOCATORS_CFLAGS = @GST_ALLOCATORS_CFLAGS@
+GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
 GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
 GST_API_VERSION = @GST_API_VERSION@
 GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
@@ -394,6 +399,8 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PBUTILS_CFLAGS = @GST_PBUTILS_CFLAGS@
+GST_PBUTILS_LIBS = @GST_PBUTILS_LIBS@
 GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BAD_CFLAGS = @GST_PLUGINS_BAD_CFLAGS@
@@ -419,6 +426,8 @@
 GST_PREFIX = @GST_PREFIX@
 GST_REVISION = @GST_REVISION@
 GST_TOOLS_DIR = @GST_TOOLS_DIR@
+GST_VIDEO_CFLAGS = @GST_VIDEO_CFLAGS@
+GST_VIDEO_LIBS = @GST_VIDEO_LIBS@
 GTK3_CFLAGS = @GTK3_CFLAGS@
 GTK3_GL_CFLAGS = @GTK3_GL_CFLAGS@
 GTK3_GL_LIBS = @GTK3_GL_LIBS@
@@ -520,6 +529,7 @@
 LTLIBICONV = @LTLIBICONV@
 LTLIBINTL = @LTLIBINTL@
 LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
 MANIFEST_TOOL = @MANIFEST_TOOL@
@@ -533,8 +543,6 @@
 MODPLUG_LIBS = @MODPLUG_LIBS@
 MPEG2ENC_CFLAGS = @MPEG2ENC_CFLAGS@
 MPEG2ENC_LIBS = @MPEG2ENC_LIBS@
-MPG123_CFLAGS = @MPG123_CFLAGS@
-MPG123_LIBS = @MPG123_LIBS@
 MPLEX_CFLAGS = @MPLEX_CFLAGS@
 MPLEX_LDFLAGS = @MPLEX_LDFLAGS@
 MPLEX_LIBS = @MPLEX_LIBS@
@@ -550,6 +558,8 @@
 NETTLE_LIBS = @NETTLE_LIBS@
 NM = @NM@
 NMEDIT = @NMEDIT@
+NVENCODE_CFLAGS = @NVENCODE_CFLAGS@
+NVENCODE_LIBS = @NVENCODE_LIBS@
 OBJC = @OBJC@
 OBJCDEPMODE = @OBJCDEPMODE@
 OBJCFLAGS = @OBJCFLAGS@
@@ -607,16 +617,18 @@
 PYTHON_PLATFORM = @PYTHON_PLATFORM@
 PYTHON_PREFIX = @PYTHON_PREFIX@
 PYTHON_VERSION = @PYTHON_VERSION@
+QT_ANDROID_CFLAGS = @QT_ANDROID_CFLAGS@
+QT_ANDROID_LIBS = @QT_ANDROID_LIBS@
 QT_CFLAGS = @QT_CFLAGS@
 QT_LIBS = @QT_LIBS@
+QT_MAC_CFLAGS = @QT_MAC_CFLAGS@
+QT_MAC_LIBS = @QT_MAC_LIBS@
 QT_WAYLAND_CFLAGS = @QT_WAYLAND_CFLAGS@
 QT_WAYLAND_LIBS = @QT_WAYLAND_LIBS@
 QT_X11_CFLAGS = @QT_X11_CFLAGS@
 QT_X11_LIBS = @QT_X11_LIBS@
 RANLIB = @RANLIB@
 RCC = @RCC@
-RSVG_2_36_2_CFLAGS = @RSVG_2_36_2_CFLAGS@
-RSVG_2_36_2_LIBS = @RSVG_2_36_2_LIBS@
 RSVG_CFLAGS = @RSVG_CFLAGS@
 RSVG_LIBS = @RSVG_LIBS@
 RTMP_CFLAGS = @RTMP_CFLAGS@
@@ -668,6 +680,7 @@
 VOAACENC_LIBS = @VOAACENC_LIBS@
 VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
 VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VULKAN_LIBS = @VULKAN_LIBS@
 WARNING_CFLAGS = @WARNING_CFLAGS@
 WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
 WARNING_OBJCFLAGS = @WARNING_OBJCFLAGS@
@@ -678,6 +691,7 @@
 WAYLAND_LIBS = @WAYLAND_LIBS@
 WEBP_CFLAGS = @WEBP_CFLAGS@
 WEBP_LIBS = @WEBP_LIBS@
+WGET = @WGET@
 WILDMIDI_CFLAGS = @WILDMIDI_CFLAGS@
 WILDMIDI_LIBS = @WILDMIDI_LIBS@
 WINKS_LIBS = @WINKS_LIBS@
@@ -687,6 +701,8 @@
 X11_LIBS = @X11_LIBS@
 X265_CFLAGS = @X265_CFLAGS@
 X265_LIBS = @X265_LIBS@
+XCB_CFLAGS = @XCB_CFLAGS@
+XCB_LIBS = @XCB_LIBS@
 XCOMPOSITE_CFLAGS = @XCOMPOSITE_CFLAGS@
 XCOMPOSITE_LIBS = @XCOMPOSITE_LIBS@
 XGETTEXT = @XGETTEXT@
@@ -724,7 +740,6 @@
 docdir = @docdir@
 dvidir = @dvidir@
 exec_prefix = @exec_prefix@
-gsettingsschemadir = @gsettingsschemadir@
 host = @host@
 host_alias = @host_alias@
 host_cpu = @host_cpu@
@@ -765,14 +780,14 @@
 top_srcdir = @top_srcdir@
 wayland_scanner = @wayland_scanner@
 plugin_LTLIBRARIES = libgstspandsp.la
-libgstspandsp_la_SOURCES = gstspandsp.c gstspanplc.c gstdtmfdetect.c
+libgstspandsp_la_SOURCES = gstspandsp.c gstspanplc.c gstdtmfdetect.c gsttonegeneratesrc.c
 libgstspandsp_la_CFLAGS = $(GST_CFLAGS) $(GST_PLUGINS_BASE_CFLAGS) $(SPANDSP_CFLAGS)
 libgstspandsp_la_LIBADD = $(SPANDSP_LIBS) $(GST_PLUGINS_BASE_LIBS) \
 	 $(GST_BASE_LIBS) $(GST_LIBS)
 
 libgstspandsp_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS)
 libgstspandsp_la_LIBTOOLFLAGS = $(GST_PLUGIN_LIBTOOLFLAGS)
-noinst_HEADERS = gstspanplc.h gstdtmfdetect.h
+noinst_HEADERS = gstspanplc.h gstdtmfdetect.h gsttonegeneratesrc.h
 all: all-am
 
 .SUFFIXES:
@@ -854,6 +869,7 @@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstspandsp_la-gstdtmfdetect.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstspandsp_la-gstspandsp.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstspandsp_la-gstspanplc.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstspandsp_la-gsttonegeneratesrc.Plo@am__quote@
 
 .c.o:
 @am__fastdepCC_TRUE@	$(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\
@@ -900,6 +916,13 @@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstspandsp_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstspandsp_la_CFLAGS) $(CFLAGS) -c -o libgstspandsp_la-gstdtmfdetect.lo `test -f 'gstdtmfdetect.c' || echo '$(srcdir)/'`gstdtmfdetect.c
 
+libgstspandsp_la-gsttonegeneratesrc.lo: gsttonegeneratesrc.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstspandsp_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstspandsp_la_CFLAGS) $(CFLAGS) -MT libgstspandsp_la-gsttonegeneratesrc.lo -MD -MP -MF $(DEPDIR)/libgstspandsp_la-gsttonegeneratesrc.Tpo -c -o libgstspandsp_la-gsttonegeneratesrc.lo `test -f 'gsttonegeneratesrc.c' || echo '$(srcdir)/'`gsttonegeneratesrc.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstspandsp_la-gsttonegeneratesrc.Tpo $(DEPDIR)/libgstspandsp_la-gsttonegeneratesrc.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='gsttonegeneratesrc.c' object='libgstspandsp_la-gsttonegeneratesrc.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstspandsp_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstspandsp_la_CFLAGS) $(CFLAGS) -c -o libgstspandsp_la-gsttonegeneratesrc.lo `test -f 'gsttonegeneratesrc.c' || echo '$(srcdir)/'`gsttonegeneratesrc.c
+
 mostlyclean-libtool:
 	-rm -f *.lo
 
diff --git a/ext/spandsp/gstspandsp.c b/ext/spandsp/gstspandsp.c
index 0fdce79..37a0806 100644
--- a/ext/spandsp/gstspandsp.c
+++ b/ext/spandsp/gstspandsp.c
@@ -26,13 +26,15 @@
 
 #include "gstspanplc.h"
 #include "gstdtmfdetect.h"
+#include "gsttonegeneratesrc.h"
 
 static gboolean
 plugin_init (GstPlugin * plugin)
 {
   return gst_element_register (plugin, "spanplc",
       GST_RANK_PRIMARY, GST_TYPE_SPAN_PLC) &&
-      gst_dtmf_detect_plugin_init (plugin);
+      gst_dtmf_detect_plugin_init (plugin) &&
+      gst_tone_generate_src_plugin_init (plugin);
 }
 
 GST_PLUGIN_DEFINE (GST_VERSION_MAJOR,
diff --git a/ext/spandsp/gsttonegeneratesrc.c b/ext/spandsp/gsttonegeneratesrc.c
new file mode 100644
index 0000000..2b0cae7
--- /dev/null
+++ b/ext/spandsp/gsttonegeneratesrc.c
@@ -0,0 +1,415 @@
+/* GStreamer
+ * Copyright (C) 2016 Iskratel d.o.o.
+ *   Author: Okrslar Ales <okrslar@iskratel.si>
+ * Copyright (C) 2016 Sebastian Dröge <sebastian@centricular.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include "gsttonegeneratesrc.h"
+
+#undef IT_DBG
+
+GST_DEBUG_CATEGORY_STATIC (tone_generate_src_debug);
+#define GST_CAT_DEFAULT tone_generate_src_debug
+
+#define DEFAULT_SAMPLES_PER_BUFFER   1024
+#define DEFAULT_FREQ                 0
+#define DEFAULT_VOLUME               0
+#define DEFAULT_ON_TIME              1000
+#define DEFAULT_OFF_TIME             1000
+#define DEFAULT_REPEAT               FALSE
+
+enum
+{
+  PROP_0,
+  PROP_SAMPLES_PER_BUFFER,
+  PROP_FREQ,
+  PROP_VOLUME,
+  PROP_FREQ2,
+  PROP_VOLUME2,
+  PROP_ON_TIME,
+  PROP_OFF_TIME,
+  PROP_ON_TIME2,
+  PROP_OFF_TIME2,
+  PROP_REPEAT,
+  PROP_LAST
+};
+
+static GstStaticPadTemplate gst_tone_generate_src_src_template =
+GST_STATIC_PAD_TEMPLATE ("src",
+    GST_PAD_SRC,
+    GST_PAD_ALWAYS,
+    GST_STATIC_CAPS ("audio/x-raw, "
+        "format = (string) " GST_AUDIO_NE (S16) ", "
+        "layout = (string) interleaved, " "rate = (int) 8000, " "channels = 1")
+    );
+
+#define gst_tone_generate_src_parent_class parent_class
+G_DEFINE_TYPE (GstToneGenerateSrc, gst_tone_generate_src, GST_TYPE_PUSH_SRC);
+
+static void gst_tone_generate_src_finalize (GObject * object);
+static void gst_tone_generate_src_set_property (GObject * object, guint prop_id,
+    const GValue * value, GParamSpec * pspec);
+static void gst_tone_generate_src_get_property (GObject * object, guint prop_id,
+    GValue * value, GParamSpec * pspec);
+static gboolean gst_tone_generate_src_start (GstBaseSrc * basesrc);
+static gboolean gst_tone_generate_src_stop (GstBaseSrc * basesrc);
+static GstFlowReturn gst_tone_generate_src_fill (GstPushSrc * basesrc,
+    GstBuffer * buffer);
+
+static void
+gst_tone_generate_src_class_init (GstToneGenerateSrcClass * klass)
+{
+  GObjectClass *gobject_class;
+  GstElementClass *gstelement_class;
+  GstBaseSrcClass *gstbasesrc_class;
+  GstPushSrcClass *gstpushsrc_class;
+
+  gobject_class = (GObjectClass *) klass;
+  gstelement_class = (GstElementClass *) klass;
+  gstbasesrc_class = (GstBaseSrcClass *) klass;
+  gstpushsrc_class = (GstPushSrcClass *) klass;
+
+  gobject_class->set_property = gst_tone_generate_src_set_property;
+  gobject_class->get_property = gst_tone_generate_src_get_property;
+  gobject_class->finalize = gst_tone_generate_src_finalize;
+
+  g_object_class_install_property (gobject_class, PROP_SAMPLES_PER_BUFFER,
+      g_param_spec_int ("samplesperbuffer", "Samples per buffer",
+          "Number of samples in each outgoing buffer",
+          1, G_MAXINT, DEFAULT_SAMPLES_PER_BUFFER,
+          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+
+  g_object_class_install_property (gobject_class, PROP_FREQ,
+      g_param_spec_int ("freq", "Frequency", "Frequency of test signal",
+          0, 20000, DEFAULT_FREQ, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+
+  g_object_class_install_property (gobject_class, PROP_VOLUME,
+      g_param_spec_int ("volume", "Volume",
+          "Volume of first signal",
+          -50, 0, DEFAULT_VOLUME, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+
+  g_object_class_install_property (gobject_class, PROP_FREQ2,
+      g_param_spec_int ("freq2", "Second Frequency",
+          "Frequency of second telephony tone component",
+          0, 20000, DEFAULT_FREQ, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+
+  g_object_class_install_property (gobject_class, PROP_VOLUME2,
+      g_param_spec_int ("volume2", "Volume2",
+          "Volume of second tone signal",
+          -50, 0, DEFAULT_VOLUME, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+
+  g_object_class_install_property (gobject_class, PROP_ON_TIME,
+      g_param_spec_int ("on-time", "Signal ON time first period",
+          "Time of the first period  when the tone signal is present", 1,
+          G_MAXINT, DEFAULT_ON_TIME, G_PARAM_READWRITE));
+
+  g_object_class_install_property (gobject_class, PROP_OFF_TIME,
+      g_param_spec_int ("off-time", "Signal OFF time first period ",
+          "Time of the first period  when the tone signal is off", 0, G_MAXINT,
+          DEFAULT_OFF_TIME, G_PARAM_READWRITE));
+
+  g_object_class_install_property (gobject_class, PROP_ON_TIME2,
+      g_param_spec_int ("on-time2", "Signal ON time second period",
+          "Time of the second period  when the tone signal is present", 1,
+          G_MAXINT, DEFAULT_ON_TIME, G_PARAM_READWRITE));
+
+  g_object_class_install_property (gobject_class, PROP_OFF_TIME2,
+      g_param_spec_int ("off-time2", "Signal OFF time first period ",
+          "Time of the second period  when the tone signal is off", 0, G_MAXINT,
+          DEFAULT_ON_TIME, G_PARAM_READWRITE));
+
+  g_object_class_install_property (gobject_class, PROP_REPEAT,
+      g_param_spec_boolean ("repeat", "Repeat the specified tone period ",
+          "Whether to repeat specified tone indefinitly", DEFAULT_REPEAT,
+          G_PARAM_READWRITE));
+
+  gst_element_class_add_pad_template (gstelement_class,
+      gst_static_pad_template_get (&gst_tone_generate_src_src_template));
+
+  gst_element_class_set_static_metadata (gstelement_class,
+      "Telephony Tone  Generator source", "Source/Audio",
+      "Creates telephony signals of given frequency, volume, cadence",
+      "Iskratel <www.iskratel.com>");
+
+  gstbasesrc_class->start = GST_DEBUG_FUNCPTR (gst_tone_generate_src_start);
+  gstbasesrc_class->stop = GST_DEBUG_FUNCPTR (gst_tone_generate_src_stop);
+  gstpushsrc_class->fill = GST_DEBUG_FUNCPTR (gst_tone_generate_src_fill);
+}
+
+static void
+gst_tone_generate_src_init (GstToneGenerateSrc * src)
+{
+  src->volume = DEFAULT_VOLUME;
+  src->freq = DEFAULT_FREQ;
+  src->on_time = DEFAULT_ON_TIME;
+  src->off_time = DEFAULT_OFF_TIME;
+  src->volume2 = DEFAULT_VOLUME;
+  src->freq2 = DEFAULT_FREQ;
+  src->on_time2 = DEFAULT_ON_TIME;
+  src->off_time2 = DEFAULT_OFF_TIME;
+  src->repeat = DEFAULT_REPEAT;
+
+  gst_base_src_set_format (GST_BASE_SRC (src), GST_FORMAT_TIME);
+
+  src->samples_per_buffer = DEFAULT_SAMPLES_PER_BUFFER;
+  gst_base_src_set_blocksize (GST_BASE_SRC (src), 2 * src->samples_per_buffer);
+}
+
+static void
+gst_tone_generate_src_finalize (GObject * object)
+{
+  GstToneGenerateSrc *src = GST_TONE_GENERATE_SRC (object);
+
+  if (src->tone_desc) {
+    tone_gen_descriptor_free (src->tone_desc);
+    src->tone_desc = NULL;
+  }
+
+  if (src->tone_state) {
+    tone_gen_free (src->tone_state);
+    src->tone_state = NULL;
+  }
+
+  G_OBJECT_CLASS (parent_class)->finalize (object);
+}
+
+static gboolean
+gst_tone_generate_src_start (GstBaseSrc * basesrc)
+{
+  GstToneGenerateSrc *src = GST_TONE_GENERATE_SRC (basesrc);
+
+  GST_OBJECT_LOCK (src);
+  src->properties_changed = FALSE;
+  GST_OBJECT_UNLOCK (src);
+
+  src->next_sample = 0;
+  src->next_time = 0;
+
+  return TRUE;
+}
+
+static gboolean
+gst_tone_generate_src_stop (GstBaseSrc * basesrc)
+{
+  GstToneGenerateSrc *src = GST_TONE_GENERATE_SRC (basesrc);
+
+  GST_OBJECT_LOCK (src);
+  if (src->tone_desc) {
+    tone_gen_descriptor_free (src->tone_desc);
+    src->tone_desc = NULL;
+  }
+
+  if (src->tone_state) {
+    tone_gen_free (src->tone_state);
+    src->tone_state = NULL;
+  }
+  src->properties_changed = FALSE;
+  GST_OBJECT_UNLOCK (src);
+
+  return TRUE;
+}
+
+static GstFlowReturn
+gst_tone_generate_src_fill (GstPushSrc * basesrc, GstBuffer * buffer)
+{
+  GstToneGenerateSrc *src;
+  GstClockTime next_time;
+  gint64 next_sample;
+  gint bytes, samples;
+  GstMapInfo map;
+  const gint samplerate = 8000, bpf = 2;
+
+  src = GST_TONE_GENERATE_SRC (basesrc);
+
+  bytes = gst_buffer_get_size (buffer);
+  samples = bytes / bpf;
+
+  /* calculate full buffer */
+  next_sample = src->next_sample + samples;
+
+  next_time = gst_util_uint64_scale_int (next_sample, GST_SECOND, samplerate);
+
+  GST_LOG_OBJECT (src, "samplerate %d", samplerate);
+  GST_LOG_OBJECT (src, "next_sample %" G_GINT64_FORMAT ", ts %" GST_TIME_FORMAT,
+      next_sample, GST_TIME_ARGS (next_time));
+
+  GST_BUFFER_OFFSET (buffer) = src->next_sample;
+  GST_BUFFER_OFFSET_END (buffer) = next_sample;
+  GST_BUFFER_TIMESTAMP (buffer) = src->next_time;
+  GST_BUFFER_DURATION (buffer) = next_time - src->next_time;
+
+  gst_object_sync_values (GST_OBJECT (src), GST_BUFFER_TIMESTAMP (buffer));
+
+  src->next_time = next_time;
+  src->next_sample = next_sample;
+
+  GST_LOG_OBJECT (src, "generating %u samples at ts %" GST_TIME_FORMAT,
+      samples, GST_TIME_ARGS (GST_BUFFER_TIMESTAMP (buffer)));
+
+  gst_buffer_map (buffer, &map, GST_MAP_WRITE);
+
+  GST_OBJECT_LOCK (src);
+  if (!src->tone_state || src->properties_changed) {
+    src->tone_desc = tone_gen_descriptor_init (src->tone_desc,
+        src->freq,
+        src->volume,
+        src->freq2,
+        src->volume2,
+        src->on_time,
+        src->off_time, src->on_time2, src->off_time2, src->repeat);
+
+    src->tone_state = tone_gen_init (src->tone_state, src->tone_desc);
+    src->properties_changed = FALSE;
+  }
+
+  tone_gen (src->tone_state, (int16_t *) map.data, samples);
+  GST_OBJECT_UNLOCK (src);
+
+  gst_buffer_unmap (buffer, &map);
+
+  return GST_FLOW_OK;
+}
+
+static void
+gst_tone_generate_src_set_property (GObject * object, guint prop_id,
+    const GValue * value, GParamSpec * pspec)
+{
+  GstToneGenerateSrc *src = GST_TONE_GENERATE_SRC (object);
+
+  switch (prop_id) {
+    case PROP_SAMPLES_PER_BUFFER:
+      src->samples_per_buffer = g_value_get_int (value);
+      gst_base_src_set_blocksize (GST_BASE_SRC_CAST (src),
+          2 * src->samples_per_buffer);
+      break;
+    case PROP_FREQ:
+      GST_OBJECT_LOCK (src);
+      src->freq = g_value_get_int (value);
+      src->properties_changed = TRUE;
+      GST_OBJECT_UNLOCK (src);
+      break;
+    case PROP_VOLUME:
+      GST_OBJECT_LOCK (src);
+      src->volume = g_value_get_int (value);
+      src->properties_changed = TRUE;
+      GST_OBJECT_UNLOCK (src);
+      break;
+    case PROP_FREQ2:
+      GST_OBJECT_LOCK (src);
+      src->freq2 = g_value_get_int (value);
+      src->properties_changed = TRUE;
+      GST_OBJECT_UNLOCK (src);
+      break;
+    case PROP_VOLUME2:
+      GST_OBJECT_LOCK (src);
+      src->volume2 = g_value_get_int (value);
+      src->properties_changed = TRUE;
+      GST_OBJECT_UNLOCK (src);
+      break;
+    case PROP_ON_TIME:
+      GST_OBJECT_LOCK (src);
+      src->on_time = g_value_get_int (value);
+      src->properties_changed = TRUE;
+      GST_OBJECT_UNLOCK (src);
+      break;
+    case PROP_ON_TIME2:
+      GST_OBJECT_LOCK (src);
+      src->on_time2 = g_value_get_int (value);
+      src->properties_changed = TRUE;
+      GST_OBJECT_UNLOCK (src);
+      break;
+    case PROP_OFF_TIME:
+      GST_OBJECT_LOCK (src);
+      src->off_time = g_value_get_int (value);
+      src->properties_changed = TRUE;
+      GST_OBJECT_UNLOCK (src);
+      break;
+    case PROP_OFF_TIME2:
+      GST_OBJECT_LOCK (src);
+      src->off_time2 = g_value_get_int (value);
+      src->properties_changed = TRUE;
+      GST_OBJECT_UNLOCK (src);
+      break;
+    case PROP_REPEAT:
+      GST_OBJECT_LOCK (src);
+      src->repeat = g_value_get_boolean (value);
+      src->properties_changed = TRUE;
+      GST_OBJECT_UNLOCK (src);
+      break;
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
+  }
+}
+
+static void
+gst_tone_generate_src_get_property (GObject * object, guint prop_id,
+    GValue * value, GParamSpec * pspec)
+{
+  GstToneGenerateSrc *src = GST_TONE_GENERATE_SRC (object);
+
+  switch (prop_id) {
+    case PROP_SAMPLES_PER_BUFFER:
+      g_value_set_int (value, src->samples_per_buffer);
+      break;
+    case PROP_FREQ:
+      g_value_set_int (value, src->freq);
+      break;
+    case PROP_VOLUME:
+      g_value_set_int (value, src->volume);
+      break;
+    case PROP_FREQ2:
+      g_value_set_int (value, src->freq2);
+      break;
+    case PROP_VOLUME2:
+      g_value_set_int (value, src->volume2);
+      break;
+    case PROP_ON_TIME:
+      g_value_set_int (value, src->on_time);
+      break;
+    case PROP_OFF_TIME:
+      g_value_set_int (value, src->off_time);
+      break;
+    case PROP_ON_TIME2:
+      g_value_set_int (value, src->on_time2);
+      break;
+    case PROP_OFF_TIME2:
+      g_value_set_int (value, src->off_time2);
+      break;
+    case PROP_REPEAT:
+      g_value_set_boolean (value, src->repeat);
+      break;
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
+  }
+}
+
+gboolean
+gst_tone_generate_src_plugin_init (GstPlugin * plugin)
+{
+  GST_DEBUG_CATEGORY_INIT (tone_generate_src_debug, "tonegeneratesrc", 0,
+      "Telephony Tone Test Source");
+
+  return gst_element_register (plugin, "tonegeneratesrc",
+      GST_RANK_NONE, GST_TYPE_TONE_GENERATE_SRC);
+}
diff --git a/ext/spandsp/gsttonegeneratesrc.h b/ext/spandsp/gsttonegeneratesrc.h
new file mode 100644
index 0000000..200e13d
--- /dev/null
+++ b/ext/spandsp/gsttonegeneratesrc.h
@@ -0,0 +1,89 @@
+/* GStreamer
+ * Copyright (C) 2016 Iskratel d.o.o.
+ *   Author: Okrslar Ales <okrslar@iskratel.si>
+ * Copyright (C) 2016 Sebastian Dröge <sebastian@centricular.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifndef __GST_TONE_GENERATE_SRC_H__
+#define __GST_TONE_GENERATE_SRC_H__
+
+
+#include <gst/gst.h>
+#include <gst/base/gstbasesrc.h>
+
+#include <gst/audio/audio.h>
+#include <spandsp.h>
+
+G_BEGIN_DECLS
+
+#define GST_TYPE_TONE_GENERATE_SRC \
+  (gst_tone_generate_src_get_type())
+#define GST_TONE_GENERATE_SRC(obj) \
+  (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_TONE_GENERATE_SRC,GstToneGenerateSrc))
+#define GST_TONE_GENERATE_SRC_CLASS(klass) \
+  (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_TONE_GENERATE_SRC,GstToneGenerateSrcClass))
+#define GST_IS_TONE_GENERATE_SRC(obj) \
+  (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_TONE_GENERATE_SRC))
+#define GST_IS_TONE_GENERATE_SRC_CLASS(klass) \
+  (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_TONE_GENERATE_SRC))
+
+typedef struct _GstToneGenerateSrc GstToneGenerateSrc;
+typedef struct _GstToneGenerateSrcClass GstToneGenerateSrcClass;
+
+/**
+ * GstToneGenerateSrc:
+ *
+ * tonegeneratesrc object structure.
+ */
+struct _GstToneGenerateSrc {
+  GstPushSrc parent;
+
+  /* parameters */
+  gint volume;      /* The level of the first frequency, in dBm0 */
+  gint volume2;     /* The level of the second frequency, in dBm0, or the percentage modulation depth for an AM modulated tone. */
+  gint freq;        /* The first frequency, in Hz */
+  gint freq2;       /* 0 for no second frequency, a positive number for the second frequency, in Hz, or a negative number for an AM modulation frequency, in Hz */
+  gint on_time;         /* On time for the first presence of tone signal. */
+  gint off_time;        /* Off time between first and second presence of tone signal. */
+  gint on_time2;        /* On time for the second presence of tone signal. */
+  gint off_time2;       /* Off time after the second presence of tone signal. */
+  gboolean repeat;         /* 0/1 if the tone repeates itself or not. */
+
+  /* audio parameters */
+  gint samples_per_buffer;
+
+  /*< private >*/
+  GstClockTime next_time;               /* next timestamp */
+  gint64 next_sample;                   /* next sample to send */
+
+  /* SpanDSP */
+  tone_gen_state_t *tone_state;
+  tone_gen_descriptor_t *tone_desc;
+  gboolean properties_changed;
+};
+
+struct _GstToneGenerateSrcClass {
+  GstPushSrcClass parent_class;
+};
+
+GType gst_tone_generate_src_get_type (void);
+gboolean gst_tone_generate_src_plugin_init (GstPlugin *plugin);
+
+G_END_DECLS
+
+#endif /* __GST_TONE_GENERATE_SRC_H__ */
diff --git a/ext/spc/Makefile.in b/ext/spc/Makefile.in
index 03b70d1..57ae8a2 100644
--- a/ext/spc/Makefile.in
+++ b/ext/spc/Makefile.in
@@ -116,16 +116,15 @@
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
 	$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
-	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gsettings.m4 \
-	$(top_srcdir)/m4/gst-fionread.m4 $(top_srcdir)/m4/gst-sdl.m4 \
-	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
-	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
-	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libgcrypt.m4 \
-	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
-	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
-	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
-	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
-	$(top_srcdir)/configure.ac
+	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gst-fionread.m4 \
+	$(top_srcdir)/m4/gst-sdl.m4 $(top_srcdir)/m4/iconv.m4 \
+	$(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \
+	$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
+	$(top_srcdir)/m4/libgcrypt.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
+	$(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \
@@ -274,6 +273,8 @@
 CLUTTER_X11_LIBS = @CLUTTER_X11_LIBS@
 CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
+CUDA_CFLAGS = @CUDA_CFLAGS@
+CUDA_LIBS = @CUDA_LIBS@
 CURL_CFLAGS = @CURL_CFLAGS@
 CURL_LIBS = @CURL_LIBS@
 CXX = @CXX@
@@ -311,6 +312,8 @@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
+EGL_CFLAGS = @EGL_CFLAGS@
+EGL_LIBS = @EGL_LIBS@
 EGREP = @EGREP@
 ERROR_CFLAGS = @ERROR_CFLAGS@
 ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
@@ -319,7 +322,6 @@
 EXIF_CFLAGS = @EXIF_CFLAGS@
 EXIF_LIBS = @EXIF_LIBS@
 FAAC_LIBS = @FAAC_LIBS@
-FAAD_IS_NEAAC = @FAAD_IS_NEAAC@
 FAAD_LIBS = @FAAD_LIBS@
 FFLAGS = @FFLAGS@
 FGREP = @FGREP@
@@ -338,8 +340,9 @@
 GIO_LIBS = @GIO_LIBS@
 GIO_UNIX_CFLAGS = @GIO_UNIX_CFLAGS@
 GIO_UNIX_LIBS = @GIO_UNIX_LIBS@
+GLES2_CFLAGS = @GLES2_CFLAGS@
+GLES2_LIBS = @GLES2_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
-GLIB_COMPILE_SCHEMAS = @GLIB_COMPILE_SCHEMAS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
@@ -356,16 +359,17 @@
 GMODULE_NO_EXPORT_LIBS = @GMODULE_NO_EXPORT_LIBS@
 GMSGFMT = @GMSGFMT@
 GMSGFMT_015 = @GMSGFMT_015@
+GNUSTL_CFLAGS = @GNUSTL_CFLAGS@
+GNUSTL_LIBS = @GNUSTL_LIBS@
 GRAPHENE_CFLAGS = @GRAPHENE_CFLAGS@
 GRAPHENE_LIBS = @GRAPHENE_LIBS@
 GREP = @GREP@
-GSETTINGS_CFLAGS = @GSETTINGS_CFLAGS@
-GSETTINGS_DISABLE_SCHEMAS_COMPILE = @GSETTINGS_DISABLE_SCHEMAS_COMPILE@
-GSETTINGS_LIBS = @GSETTINGS_LIBS@
 GSM_LIBS = @GSM_LIBS@
 GSTPB_PLUGINS_DIR = @GSTPB_PLUGINS_DIR@
 GSTPB_PREFIX = @GSTPB_PREFIX@
 GST_AGE = @GST_AGE@
+GST_ALLOCATORS_CFLAGS = @GST_ALLOCATORS_CFLAGS@
+GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
 GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
 GST_API_VERSION = @GST_API_VERSION@
 GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
@@ -391,6 +395,8 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PBUTILS_CFLAGS = @GST_PBUTILS_CFLAGS@
+GST_PBUTILS_LIBS = @GST_PBUTILS_LIBS@
 GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BAD_CFLAGS = @GST_PLUGINS_BAD_CFLAGS@
@@ -416,6 +422,8 @@
 GST_PREFIX = @GST_PREFIX@
 GST_REVISION = @GST_REVISION@
 GST_TOOLS_DIR = @GST_TOOLS_DIR@
+GST_VIDEO_CFLAGS = @GST_VIDEO_CFLAGS@
+GST_VIDEO_LIBS = @GST_VIDEO_LIBS@
 GTK3_CFLAGS = @GTK3_CFLAGS@
 GTK3_GL_CFLAGS = @GTK3_GL_CFLAGS@
 GTK3_GL_LIBS = @GTK3_GL_LIBS@
@@ -517,6 +525,7 @@
 LTLIBICONV = @LTLIBICONV@
 LTLIBINTL = @LTLIBINTL@
 LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
 MANIFEST_TOOL = @MANIFEST_TOOL@
@@ -530,8 +539,6 @@
 MODPLUG_LIBS = @MODPLUG_LIBS@
 MPEG2ENC_CFLAGS = @MPEG2ENC_CFLAGS@
 MPEG2ENC_LIBS = @MPEG2ENC_LIBS@
-MPG123_CFLAGS = @MPG123_CFLAGS@
-MPG123_LIBS = @MPG123_LIBS@
 MPLEX_CFLAGS = @MPLEX_CFLAGS@
 MPLEX_LDFLAGS = @MPLEX_LDFLAGS@
 MPLEX_LIBS = @MPLEX_LIBS@
@@ -547,6 +554,8 @@
 NETTLE_LIBS = @NETTLE_LIBS@
 NM = @NM@
 NMEDIT = @NMEDIT@
+NVENCODE_CFLAGS = @NVENCODE_CFLAGS@
+NVENCODE_LIBS = @NVENCODE_LIBS@
 OBJC = @OBJC@
 OBJCDEPMODE = @OBJCDEPMODE@
 OBJCFLAGS = @OBJCFLAGS@
@@ -604,16 +613,18 @@
 PYTHON_PLATFORM = @PYTHON_PLATFORM@
 PYTHON_PREFIX = @PYTHON_PREFIX@
 PYTHON_VERSION = @PYTHON_VERSION@
+QT_ANDROID_CFLAGS = @QT_ANDROID_CFLAGS@
+QT_ANDROID_LIBS = @QT_ANDROID_LIBS@
 QT_CFLAGS = @QT_CFLAGS@
 QT_LIBS = @QT_LIBS@
+QT_MAC_CFLAGS = @QT_MAC_CFLAGS@
+QT_MAC_LIBS = @QT_MAC_LIBS@
 QT_WAYLAND_CFLAGS = @QT_WAYLAND_CFLAGS@
 QT_WAYLAND_LIBS = @QT_WAYLAND_LIBS@
 QT_X11_CFLAGS = @QT_X11_CFLAGS@
 QT_X11_LIBS = @QT_X11_LIBS@
 RANLIB = @RANLIB@
 RCC = @RCC@
-RSVG_2_36_2_CFLAGS = @RSVG_2_36_2_CFLAGS@
-RSVG_2_36_2_LIBS = @RSVG_2_36_2_LIBS@
 RSVG_CFLAGS = @RSVG_CFLAGS@
 RSVG_LIBS = @RSVG_LIBS@
 RTMP_CFLAGS = @RTMP_CFLAGS@
@@ -665,6 +676,7 @@
 VOAACENC_LIBS = @VOAACENC_LIBS@
 VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
 VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VULKAN_LIBS = @VULKAN_LIBS@
 WARNING_CFLAGS = @WARNING_CFLAGS@
 WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
 WARNING_OBJCFLAGS = @WARNING_OBJCFLAGS@
@@ -675,6 +687,7 @@
 WAYLAND_LIBS = @WAYLAND_LIBS@
 WEBP_CFLAGS = @WEBP_CFLAGS@
 WEBP_LIBS = @WEBP_LIBS@
+WGET = @WGET@
 WILDMIDI_CFLAGS = @WILDMIDI_CFLAGS@
 WILDMIDI_LIBS = @WILDMIDI_LIBS@
 WINKS_LIBS = @WINKS_LIBS@
@@ -684,6 +697,8 @@
 X11_LIBS = @X11_LIBS@
 X265_CFLAGS = @X265_CFLAGS@
 X265_LIBS = @X265_LIBS@
+XCB_CFLAGS = @XCB_CFLAGS@
+XCB_LIBS = @XCB_LIBS@
 XCOMPOSITE_CFLAGS = @XCOMPOSITE_CFLAGS@
 XCOMPOSITE_LIBS = @XCOMPOSITE_LIBS@
 XGETTEXT = @XGETTEXT@
@@ -721,7 +736,6 @@
 docdir = @docdir@
 dvidir = @dvidir@
 exec_prefix = @exec_prefix@
-gsettingsschemadir = @gsettingsschemadir@
 host = @host@
 host_alias = @host_alias@
 host_cpu = @host_cpu@
diff --git a/ext/spc/tag.c b/ext/spc/tag.c
index 61e59d5..bc13ecb 100644
--- a/ext/spc/tag.c
+++ b/ext/spc/tag.c
@@ -328,20 +328,13 @@
 void
 spc_tag_free (spc_tag_info * info)
 {
-  if (info->title)
-    g_free (info->title);
-  if (info->game)
-    g_free (info->game);
-  if (info->artist)
-    g_free (info->artist);
-  if (info->album)
-    g_free (info->album);
-  if (info->publisher)
-    g_free (info->publisher);
-  if (info->comment)
-    g_free (info->comment);
-  if (info->dumper)
-    g_free (info->dumper);
+  g_free (info->title);
+  g_free (info->game);
+  g_free (info->artist);
+  g_free (info->album);
+  g_free (info->publisher);
+  g_free (info->comment);
+  g_free (info->dumper);
   if (info->dump_date)
     g_date_free (info->dump_date);
 }
diff --git a/ext/srtp/Makefile.in b/ext/srtp/Makefile.in
index cd07766..ef2c336 100644
--- a/ext/srtp/Makefile.in
+++ b/ext/srtp/Makefile.in
@@ -123,16 +123,15 @@
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
 	$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
-	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gsettings.m4 \
-	$(top_srcdir)/m4/gst-fionread.m4 $(top_srcdir)/m4/gst-sdl.m4 \
-	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
-	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
-	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libgcrypt.m4 \
-	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
-	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
-	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
-	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
-	$(top_srcdir)/configure.ac
+	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gst-fionread.m4 \
+	$(top_srcdir)/m4/gst-sdl.m4 $(top_srcdir)/m4/iconv.m4 \
+	$(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \
+	$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
+	$(top_srcdir)/m4/libgcrypt.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
+	$(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
@@ -284,6 +283,8 @@
 CLUTTER_X11_LIBS = @CLUTTER_X11_LIBS@
 CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
+CUDA_CFLAGS = @CUDA_CFLAGS@
+CUDA_LIBS = @CUDA_LIBS@
 CURL_CFLAGS = @CURL_CFLAGS@
 CURL_LIBS = @CURL_LIBS@
 CXX = @CXX@
@@ -321,6 +322,8 @@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
+EGL_CFLAGS = @EGL_CFLAGS@
+EGL_LIBS = @EGL_LIBS@
 EGREP = @EGREP@
 ERROR_CFLAGS = @ERROR_CFLAGS@
 ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
@@ -329,7 +332,6 @@
 EXIF_CFLAGS = @EXIF_CFLAGS@
 EXIF_LIBS = @EXIF_LIBS@
 FAAC_LIBS = @FAAC_LIBS@
-FAAD_IS_NEAAC = @FAAD_IS_NEAAC@
 FAAD_LIBS = @FAAD_LIBS@
 FFLAGS = @FFLAGS@
 FGREP = @FGREP@
@@ -348,8 +350,9 @@
 GIO_LIBS = @GIO_LIBS@
 GIO_UNIX_CFLAGS = @GIO_UNIX_CFLAGS@
 GIO_UNIX_LIBS = @GIO_UNIX_LIBS@
+GLES2_CFLAGS = @GLES2_CFLAGS@
+GLES2_LIBS = @GLES2_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
-GLIB_COMPILE_SCHEMAS = @GLIB_COMPILE_SCHEMAS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
@@ -366,16 +369,17 @@
 GMODULE_NO_EXPORT_LIBS = @GMODULE_NO_EXPORT_LIBS@
 GMSGFMT = @GMSGFMT@
 GMSGFMT_015 = @GMSGFMT_015@
+GNUSTL_CFLAGS = @GNUSTL_CFLAGS@
+GNUSTL_LIBS = @GNUSTL_LIBS@
 GRAPHENE_CFLAGS = @GRAPHENE_CFLAGS@
 GRAPHENE_LIBS = @GRAPHENE_LIBS@
 GREP = @GREP@
-GSETTINGS_CFLAGS = @GSETTINGS_CFLAGS@
-GSETTINGS_DISABLE_SCHEMAS_COMPILE = @GSETTINGS_DISABLE_SCHEMAS_COMPILE@
-GSETTINGS_LIBS = @GSETTINGS_LIBS@
 GSM_LIBS = @GSM_LIBS@
 GSTPB_PLUGINS_DIR = @GSTPB_PLUGINS_DIR@
 GSTPB_PREFIX = @GSTPB_PREFIX@
 GST_AGE = @GST_AGE@
+GST_ALLOCATORS_CFLAGS = @GST_ALLOCATORS_CFLAGS@
+GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
 GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
 GST_API_VERSION = @GST_API_VERSION@
 GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
@@ -401,6 +405,8 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PBUTILS_CFLAGS = @GST_PBUTILS_CFLAGS@
+GST_PBUTILS_LIBS = @GST_PBUTILS_LIBS@
 GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BAD_CFLAGS = @GST_PLUGINS_BAD_CFLAGS@
@@ -426,6 +432,8 @@
 GST_PREFIX = @GST_PREFIX@
 GST_REVISION = @GST_REVISION@
 GST_TOOLS_DIR = @GST_TOOLS_DIR@
+GST_VIDEO_CFLAGS = @GST_VIDEO_CFLAGS@
+GST_VIDEO_LIBS = @GST_VIDEO_LIBS@
 GTK3_CFLAGS = @GTK3_CFLAGS@
 GTK3_GL_CFLAGS = @GTK3_GL_CFLAGS@
 GTK3_GL_LIBS = @GTK3_GL_LIBS@
@@ -527,6 +535,7 @@
 LTLIBICONV = @LTLIBICONV@
 LTLIBINTL = @LTLIBINTL@
 LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
 MANIFEST_TOOL = @MANIFEST_TOOL@
@@ -540,8 +549,6 @@
 MODPLUG_LIBS = @MODPLUG_LIBS@
 MPEG2ENC_CFLAGS = @MPEG2ENC_CFLAGS@
 MPEG2ENC_LIBS = @MPEG2ENC_LIBS@
-MPG123_CFLAGS = @MPG123_CFLAGS@
-MPG123_LIBS = @MPG123_LIBS@
 MPLEX_CFLAGS = @MPLEX_CFLAGS@
 MPLEX_LDFLAGS = @MPLEX_LDFLAGS@
 MPLEX_LIBS = @MPLEX_LIBS@
@@ -557,6 +564,8 @@
 NETTLE_LIBS = @NETTLE_LIBS@
 NM = @NM@
 NMEDIT = @NMEDIT@
+NVENCODE_CFLAGS = @NVENCODE_CFLAGS@
+NVENCODE_LIBS = @NVENCODE_LIBS@
 OBJC = @OBJC@
 OBJCDEPMODE = @OBJCDEPMODE@
 OBJCFLAGS = @OBJCFLAGS@
@@ -614,16 +623,18 @@
 PYTHON_PLATFORM = @PYTHON_PLATFORM@
 PYTHON_PREFIX = @PYTHON_PREFIX@
 PYTHON_VERSION = @PYTHON_VERSION@
+QT_ANDROID_CFLAGS = @QT_ANDROID_CFLAGS@
+QT_ANDROID_LIBS = @QT_ANDROID_LIBS@
 QT_CFLAGS = @QT_CFLAGS@
 QT_LIBS = @QT_LIBS@
+QT_MAC_CFLAGS = @QT_MAC_CFLAGS@
+QT_MAC_LIBS = @QT_MAC_LIBS@
 QT_WAYLAND_CFLAGS = @QT_WAYLAND_CFLAGS@
 QT_WAYLAND_LIBS = @QT_WAYLAND_LIBS@
 QT_X11_CFLAGS = @QT_X11_CFLAGS@
 QT_X11_LIBS = @QT_X11_LIBS@
 RANLIB = @RANLIB@
 RCC = @RCC@
-RSVG_2_36_2_CFLAGS = @RSVG_2_36_2_CFLAGS@
-RSVG_2_36_2_LIBS = @RSVG_2_36_2_LIBS@
 RSVG_CFLAGS = @RSVG_CFLAGS@
 RSVG_LIBS = @RSVG_LIBS@
 RTMP_CFLAGS = @RTMP_CFLAGS@
@@ -675,6 +686,7 @@
 VOAACENC_LIBS = @VOAACENC_LIBS@
 VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
 VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VULKAN_LIBS = @VULKAN_LIBS@
 WARNING_CFLAGS = @WARNING_CFLAGS@
 WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
 WARNING_OBJCFLAGS = @WARNING_OBJCFLAGS@
@@ -685,6 +697,7 @@
 WAYLAND_LIBS = @WAYLAND_LIBS@
 WEBP_CFLAGS = @WEBP_CFLAGS@
 WEBP_LIBS = @WEBP_LIBS@
+WGET = @WGET@
 WILDMIDI_CFLAGS = @WILDMIDI_CFLAGS@
 WILDMIDI_LIBS = @WILDMIDI_LIBS@
 WINKS_LIBS = @WINKS_LIBS@
@@ -694,6 +707,8 @@
 X11_LIBS = @X11_LIBS@
 X265_CFLAGS = @X265_CFLAGS@
 X265_LIBS = @X265_LIBS@
+XCB_CFLAGS = @XCB_CFLAGS@
+XCB_LIBS = @XCB_LIBS@
 XCOMPOSITE_CFLAGS = @XCOMPOSITE_CFLAGS@
 XCOMPOSITE_LIBS = @XCOMPOSITE_LIBS@
 XGETTEXT = @XGETTEXT@
@@ -731,7 +746,6 @@
 docdir = @docdir@
 dvidir = @dvidir@
 exec_prefix = @exec_prefix@
-gsettingsschemadir = @gsettingsschemadir@
 host = @host@
 host_alias = @host_alias@
 host_cpu = @host_cpu@
diff --git a/ext/teletextdec/Makefile.am b/ext/teletextdec/Makefile.am
index 838eb5f..5aa8ab5 100644
--- a/ext/teletextdec/Makefile.am
+++ b/ext/teletextdec/Makefile.am
@@ -1,6 +1,6 @@
 plugin_LTLIBRARIES = libgstteletextdec.la
 
-libgstteletextdec_la_SOURCES = gstteletextdec.c teletext.c
+libgstteletextdec_la_SOURCES = gstteletextdec.c
 
 libgstteletextdec_la_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_CFLAGS) $(TELETEXTDEC_CFLAGS)
 libgstteletextdec_la_LIBADD = $(GST_PLUGINS_BASE_CFLAGS) $(GST_BASE_LIBS) $(TELETEXTDEC_LIBS)
diff --git a/ext/teletextdec/Makefile.in b/ext/teletextdec/Makefile.in
index 9e06484..0641041 100644
--- a/ext/teletextdec/Makefile.in
+++ b/ext/teletextdec/Makefile.in
@@ -116,16 +116,15 @@
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
 	$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
-	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gsettings.m4 \
-	$(top_srcdir)/m4/gst-fionread.m4 $(top_srcdir)/m4/gst-sdl.m4 \
-	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
-	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
-	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libgcrypt.m4 \
-	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
-	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
-	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
-	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
-	$(top_srcdir)/configure.ac
+	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gst-fionread.m4 \
+	$(top_srcdir)/m4/gst-sdl.m4 $(top_srcdir)/m4/iconv.m4 \
+	$(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \
+	$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
+	$(top_srcdir)/m4/libgcrypt.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
+	$(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \
@@ -167,8 +166,7 @@
 libgstteletextdec_la_DEPENDENCIES = $(am__DEPENDENCIES_1) \
 	$(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1)
 am_libgstteletextdec_la_OBJECTS =  \
-	libgstteletextdec_la-gstteletextdec.lo \
-	libgstteletextdec_la-teletext.lo
+	libgstteletextdec_la-gstteletextdec.lo
 libgstteletextdec_la_OBJECTS = $(am_libgstteletextdec_la_OBJECTS)
 AM_V_lt = $(am__v_lt_@AM_V@)
 am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
@@ -276,6 +274,8 @@
 CLUTTER_X11_LIBS = @CLUTTER_X11_LIBS@
 CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
+CUDA_CFLAGS = @CUDA_CFLAGS@
+CUDA_LIBS = @CUDA_LIBS@
 CURL_CFLAGS = @CURL_CFLAGS@
 CURL_LIBS = @CURL_LIBS@
 CXX = @CXX@
@@ -313,6 +313,8 @@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
+EGL_CFLAGS = @EGL_CFLAGS@
+EGL_LIBS = @EGL_LIBS@
 EGREP = @EGREP@
 ERROR_CFLAGS = @ERROR_CFLAGS@
 ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
@@ -321,7 +323,6 @@
 EXIF_CFLAGS = @EXIF_CFLAGS@
 EXIF_LIBS = @EXIF_LIBS@
 FAAC_LIBS = @FAAC_LIBS@
-FAAD_IS_NEAAC = @FAAD_IS_NEAAC@
 FAAD_LIBS = @FAAD_LIBS@
 FFLAGS = @FFLAGS@
 FGREP = @FGREP@
@@ -340,8 +341,9 @@
 GIO_LIBS = @GIO_LIBS@
 GIO_UNIX_CFLAGS = @GIO_UNIX_CFLAGS@
 GIO_UNIX_LIBS = @GIO_UNIX_LIBS@
+GLES2_CFLAGS = @GLES2_CFLAGS@
+GLES2_LIBS = @GLES2_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
-GLIB_COMPILE_SCHEMAS = @GLIB_COMPILE_SCHEMAS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
@@ -358,16 +360,17 @@
 GMODULE_NO_EXPORT_LIBS = @GMODULE_NO_EXPORT_LIBS@
 GMSGFMT = @GMSGFMT@
 GMSGFMT_015 = @GMSGFMT_015@
+GNUSTL_CFLAGS = @GNUSTL_CFLAGS@
+GNUSTL_LIBS = @GNUSTL_LIBS@
 GRAPHENE_CFLAGS = @GRAPHENE_CFLAGS@
 GRAPHENE_LIBS = @GRAPHENE_LIBS@
 GREP = @GREP@
-GSETTINGS_CFLAGS = @GSETTINGS_CFLAGS@
-GSETTINGS_DISABLE_SCHEMAS_COMPILE = @GSETTINGS_DISABLE_SCHEMAS_COMPILE@
-GSETTINGS_LIBS = @GSETTINGS_LIBS@
 GSM_LIBS = @GSM_LIBS@
 GSTPB_PLUGINS_DIR = @GSTPB_PLUGINS_DIR@
 GSTPB_PREFIX = @GSTPB_PREFIX@
 GST_AGE = @GST_AGE@
+GST_ALLOCATORS_CFLAGS = @GST_ALLOCATORS_CFLAGS@
+GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
 GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
 GST_API_VERSION = @GST_API_VERSION@
 GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
@@ -393,6 +396,8 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PBUTILS_CFLAGS = @GST_PBUTILS_CFLAGS@
+GST_PBUTILS_LIBS = @GST_PBUTILS_LIBS@
 GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BAD_CFLAGS = @GST_PLUGINS_BAD_CFLAGS@
@@ -418,6 +423,8 @@
 GST_PREFIX = @GST_PREFIX@
 GST_REVISION = @GST_REVISION@
 GST_TOOLS_DIR = @GST_TOOLS_DIR@
+GST_VIDEO_CFLAGS = @GST_VIDEO_CFLAGS@
+GST_VIDEO_LIBS = @GST_VIDEO_LIBS@
 GTK3_CFLAGS = @GTK3_CFLAGS@
 GTK3_GL_CFLAGS = @GTK3_GL_CFLAGS@
 GTK3_GL_LIBS = @GTK3_GL_LIBS@
@@ -519,6 +526,7 @@
 LTLIBICONV = @LTLIBICONV@
 LTLIBINTL = @LTLIBINTL@
 LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
 MANIFEST_TOOL = @MANIFEST_TOOL@
@@ -532,8 +540,6 @@
 MODPLUG_LIBS = @MODPLUG_LIBS@
 MPEG2ENC_CFLAGS = @MPEG2ENC_CFLAGS@
 MPEG2ENC_LIBS = @MPEG2ENC_LIBS@
-MPG123_CFLAGS = @MPG123_CFLAGS@
-MPG123_LIBS = @MPG123_LIBS@
 MPLEX_CFLAGS = @MPLEX_CFLAGS@
 MPLEX_LDFLAGS = @MPLEX_LDFLAGS@
 MPLEX_LIBS = @MPLEX_LIBS@
@@ -549,6 +555,8 @@
 NETTLE_LIBS = @NETTLE_LIBS@
 NM = @NM@
 NMEDIT = @NMEDIT@
+NVENCODE_CFLAGS = @NVENCODE_CFLAGS@
+NVENCODE_LIBS = @NVENCODE_LIBS@
 OBJC = @OBJC@
 OBJCDEPMODE = @OBJCDEPMODE@
 OBJCFLAGS = @OBJCFLAGS@
@@ -606,16 +614,18 @@
 PYTHON_PLATFORM = @PYTHON_PLATFORM@
 PYTHON_PREFIX = @PYTHON_PREFIX@
 PYTHON_VERSION = @PYTHON_VERSION@
+QT_ANDROID_CFLAGS = @QT_ANDROID_CFLAGS@
+QT_ANDROID_LIBS = @QT_ANDROID_LIBS@
 QT_CFLAGS = @QT_CFLAGS@
 QT_LIBS = @QT_LIBS@
+QT_MAC_CFLAGS = @QT_MAC_CFLAGS@
+QT_MAC_LIBS = @QT_MAC_LIBS@
 QT_WAYLAND_CFLAGS = @QT_WAYLAND_CFLAGS@
 QT_WAYLAND_LIBS = @QT_WAYLAND_LIBS@
 QT_X11_CFLAGS = @QT_X11_CFLAGS@
 QT_X11_LIBS = @QT_X11_LIBS@
 RANLIB = @RANLIB@
 RCC = @RCC@
-RSVG_2_36_2_CFLAGS = @RSVG_2_36_2_CFLAGS@
-RSVG_2_36_2_LIBS = @RSVG_2_36_2_LIBS@
 RSVG_CFLAGS = @RSVG_CFLAGS@
 RSVG_LIBS = @RSVG_LIBS@
 RTMP_CFLAGS = @RTMP_CFLAGS@
@@ -667,6 +677,7 @@
 VOAACENC_LIBS = @VOAACENC_LIBS@
 VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
 VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VULKAN_LIBS = @VULKAN_LIBS@
 WARNING_CFLAGS = @WARNING_CFLAGS@
 WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
 WARNING_OBJCFLAGS = @WARNING_OBJCFLAGS@
@@ -677,6 +688,7 @@
 WAYLAND_LIBS = @WAYLAND_LIBS@
 WEBP_CFLAGS = @WEBP_CFLAGS@
 WEBP_LIBS = @WEBP_LIBS@
+WGET = @WGET@
 WILDMIDI_CFLAGS = @WILDMIDI_CFLAGS@
 WILDMIDI_LIBS = @WILDMIDI_LIBS@
 WINKS_LIBS = @WINKS_LIBS@
@@ -686,6 +698,8 @@
 X11_LIBS = @X11_LIBS@
 X265_CFLAGS = @X265_CFLAGS@
 X265_LIBS = @X265_LIBS@
+XCB_CFLAGS = @XCB_CFLAGS@
+XCB_LIBS = @XCB_LIBS@
 XCOMPOSITE_CFLAGS = @XCOMPOSITE_CFLAGS@
 XCOMPOSITE_LIBS = @XCOMPOSITE_LIBS@
 XGETTEXT = @XGETTEXT@
@@ -723,7 +737,6 @@
 docdir = @docdir@
 dvidir = @dvidir@
 exec_prefix = @exec_prefix@
-gsettingsschemadir = @gsettingsschemadir@
 host = @host@
 host_alias = @host_alias@
 host_cpu = @host_cpu@
@@ -764,7 +777,7 @@
 top_srcdir = @top_srcdir@
 wayland_scanner = @wayland_scanner@
 plugin_LTLIBRARIES = libgstteletextdec.la
-libgstteletextdec_la_SOURCES = gstteletextdec.c teletext.c
+libgstteletextdec_la_SOURCES = gstteletextdec.c
 libgstteletextdec_la_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_CFLAGS) $(TELETEXTDEC_CFLAGS)
 libgstteletextdec_la_LIBADD = $(GST_PLUGINS_BASE_CFLAGS) $(GST_BASE_LIBS) $(TELETEXTDEC_LIBS)
 libgstteletextdec_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS)
@@ -849,7 +862,6 @@
 	-rm -f *.tab.c
 
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstteletextdec_la-gstteletextdec.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstteletextdec_la-teletext.Plo@am__quote@
 
 .c.o:
 @am__fastdepCC_TRUE@	$(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\
@@ -882,13 +894,6 @@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstteletextdec_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstteletextdec_la_CFLAGS) $(CFLAGS) -c -o libgstteletextdec_la-gstteletextdec.lo `test -f 'gstteletextdec.c' || echo '$(srcdir)/'`gstteletextdec.c
 
-libgstteletextdec_la-teletext.lo: teletext.c
-@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstteletextdec_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstteletextdec_la_CFLAGS) $(CFLAGS) -MT libgstteletextdec_la-teletext.lo -MD -MP -MF $(DEPDIR)/libgstteletextdec_la-teletext.Tpo -c -o libgstteletextdec_la-teletext.lo `test -f 'teletext.c' || echo '$(srcdir)/'`teletext.c
-@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstteletextdec_la-teletext.Tpo $(DEPDIR)/libgstteletextdec_la-teletext.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='teletext.c' object='libgstteletextdec_la-teletext.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstteletextdec_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstteletextdec_la_CFLAGS) $(CFLAGS) -c -o libgstteletextdec_la-teletext.lo `test -f 'teletext.c' || echo '$(srcdir)/'`teletext.c
-
 mostlyclean-libtool:
 	-rm -f *.lo
 
diff --git a/ext/teletextdec/gstteletextdec.c b/ext/teletextdec/gstteletextdec.c
index 622b972..91b73c2 100644
--- a/ext/teletextdec/gstteletextdec.c
+++ b/ext/teletextdec/gstteletextdec.c
@@ -22,12 +22,13 @@
 /**
  * SECTION:element-teletextdec
  *
- * Decode PES stream containing teletext information to RGBA stream
+ * Decode a stream of raw VBI packets containing teletext information to a RGBA
+ * stream.
  *
  * <refsect2>
  * <title>Example launch line</title>
  * |[
- * gst-launch -v -m filesrc location=recording.mpeg ! mpegtsdemux ! private/teletext ! teletextdec ! videoconvert ! ximagesink
+ * gst-launch-1.0 -v -m filesrc location=recording.mpeg ! tsdemux ! teletextdec ! videoconvert ! ximagesink
  * ]|
  * </refsect2>
  */
@@ -39,12 +40,15 @@
 #include <gst/gst.h>
 #include <gst/video/video.h>
 #include <string.h>
+#include <stdlib.h>
 
 #include "gstteletextdec.h"
 
 GST_DEBUG_CATEGORY_STATIC (gst_teletextdec_debug);
 #define GST_CAT_DEFAULT gst_teletextdec_debug
 
+#define parent_class gst_teletextdec_parent_class
+
 #define SUBTITLES_PAGE 888
 #define MAX_SLICES 32
 #define DEFAULT_FONT_DESCRIPTION "verdana 12"
@@ -120,26 +124,25 @@
   "#FF00FF", "#00FFFF", "#EEEEEE"
 };
 
+/* in RGBA mode, one character occupies 12 x 10 pixels. */
+#define COLUMNS_TO_WIDTH(cols) ((cols) * 12)
+#define ROWS_TO_HEIGHT(rows) ((rows) * 10)
+
 static GstStaticPadTemplate sink_template = GST_STATIC_PAD_TEMPLATE ("sink",
     GST_PAD_SINK,
     GST_PAD_ALWAYS,
-    GST_STATIC_CAPS
-    ("video/mpeg,mpegversion=2,systemstream=TRUE ; private/teletext")
+    GST_STATIC_CAPS ("application/x-teletext;")
     );
 
 static GstStaticPadTemplate src_template = GST_STATIC_PAD_TEMPLATE ("src",
     GST_PAD_SRC,
     GST_PAD_ALWAYS,
     GST_STATIC_CAPS
-    (GST_VIDEO_CAPS_RGBA "; text/plain ; text/html ; text/x-pango-markup")
+    (GST_VIDEO_CAPS_MAKE ("RGBA") ";"
+        "text/x-raw, format={utf-8,pango-markup} ;")
     );
 
-/* debug category for filtering log messages */
-#define DEBUG_INIT(bla) \
-  GST_DEBUG_CATEGORY_INIT (gst_teletextdec_debug, "teletext", 0, "Teletext decoder");
-
-GST_BOILERPLATE_FULL (GstTeletextDec, gst_teletextdec, GstElement,
-    GST_TYPE_ELEMENT, DEBUG_INIT);
+G_DEFINE_TYPE (GstTeletextDec, gst_teletextdec, GST_TYPE_ELEMENT);
 
 static void gst_teletextdec_set_property (GObject * object, guint prop_id,
     const GValue * value, GParamSpec * pspec);
@@ -147,60 +150,35 @@
     GValue * value, GParamSpec * pspec);
 static void gst_teletextdec_finalize (GObject * object);
 
-static GstStateChangeReturn gst_teletextdec_change_state (GstElement * element,
-    GstStateChange transition);
+static GstStateChangeReturn gst_teletextdec_change_state (GstElement *
+    element, GstStateChange transition);
 
-static GstFlowReturn gst_teletextdec_chain (GstPad * pad, GstBuffer * buf);
-static gboolean gst_teletextdec_sink_setcaps (GstPad * pad, GstCaps * caps);
-static gboolean gst_teletextdec_sink_event (GstPad * pad, GstEvent * event);
-static GstPadLinkReturn gst_teletextdec_src_set_caps (GstPad * pad,
-    GstCaps * caps);
+static GstFlowReturn gst_teletextdec_chain (GstPad * pad, GstObject * parent,
+    GstBuffer * buffer);
+static gboolean gst_teletextdec_sink_event (GstPad * pad, GstObject * parent,
+    GstEvent * event);
+static gboolean gst_teletextdec_src_event (GstPad * pad, GstObject * parent,
+    GstEvent * event);
 
-static vbi_bool gst_teletextdec_convert (vbi_dvb_demux * dx, gpointer user_data,
-    const vbi_sliced * sliced, guint n_lines, gint64 pts);
 static void gst_teletextdec_event_handler (vbi_event * ev, void *user_data);
 
 static GstFlowReturn gst_teletextdec_push_page (GstTeletextDec * teletext);
 static GstFlowReturn gst_teletextdec_export_text_page (GstTeletextDec *
     teletext, vbi_page * page, GstBuffer ** buf);
-static GstFlowReturn gst_teletextdec_export_html_page (GstTeletextDec *
-    teletext, vbi_page * page, GstBuffer ** buf);
 static GstFlowReturn gst_teletextdec_export_rgba_page (GstTeletextDec *
     teletext, vbi_page * page, GstBuffer ** buf);
 static GstFlowReturn gst_teletextdec_export_pango_page (GstTeletextDec *
     teletext, vbi_page * page, GstBuffer ** buf);
 
-
-static gboolean gst_teletextdec_push_preroll_buffer (GstTeletextDec * teletext);
 static void gst_teletextdec_process_telx_buffer (GstTeletextDec * teletext,
     GstBuffer * buf);
-static void gst_teletextdec_process_pes_buffer (GstTeletextDec * teletext,
-    GstBuffer * buf);
-static gboolean gst_teletextdec_extract_data_units (GstTeletextDec * teletext,
-    GstTeletextFrame * f, guint8 * packet, guint * offset, gint size);
+static gboolean gst_teletextdec_extract_data_units (GstTeletextDec *
+    teletext, GstTeletextFrame * f, const guint8 * packet, guint * offset,
+    gsize size);
 
 static void gst_teletextdec_zvbi_init (GstTeletextDec * teletext);
 static void gst_teletextdec_zvbi_clear (GstTeletextDec * teletext);
-
-/* GObject vmethod implementations */
-
-static void
-gst_teletextdec_base_init (gpointer klass)
-{
-  GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
-
-  gst_element_class_set_static_metadata (element_class,
-      "Teletext decoder",
-      "Decoder",
-      "Decode PES or raw VBI stream containing teletext information to RGBA, HTML and text",
-      "Sebastian Pölsterl <sebp@k-d-w.org>, "
-      "Andoni Morales Alastruey <ylatuya@gmail.com>");
-
-  gst_element_class_add_pad_template (element_class,
-      gst_static_pad_template_get (&src_template));
-  gst_element_class_add_pad_template (element_class,
-      gst_static_pad_template_get (&sink_template));
-}
+static void gst_teletextdec_reset_frame (GstTeletextDec * teletext);
 
 /* initialize the gstteletext's class */
 static void
@@ -245,18 +223,28 @@
           "Font description used for the pango output.",
           DEFAULT_FONT_DESCRIPTION,
           G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+
+  gst_element_class_set_static_metadata (gstelement_class,
+      "Teletext decoder",
+      "Decoder",
+      "Decode a raw VBI stream containing teletext information to RGBA and text",
+      "Sebastian Pölsterl <sebp@k-d-w.org>, "
+      "Andoni Morales Alastruey <ylatuya@gmail.com>");
+
+  gst_element_class_add_pad_template (gstelement_class,
+      gst_static_pad_template_get (&src_template));
+  gst_element_class_add_pad_template (gstelement_class,
+      gst_static_pad_template_get (&sink_template));
 }
 
 /* initialize the new element
  * initialize instance structure
  */
 static void
-gst_teletextdec_init (GstTeletextDec * teletext, GstTeletextDecClass * klass)
+gst_teletextdec_init (GstTeletextDec * teletext)
 {
   /* Create sink pad */
   teletext->sinkpad = gst_pad_new_from_static_template (&sink_template, "sink");
-  gst_pad_set_setcaps_function (teletext->sinkpad,
-      GST_DEBUG_FUNCPTR (gst_teletextdec_sink_setcaps));
   gst_pad_set_chain_function (teletext->sinkpad,
       GST_DEBUG_FUNCPTR (gst_teletextdec_chain));
   gst_pad_set_event_function (teletext->sinkpad,
@@ -265,11 +253,11 @@
 
   /* Create src pad */
   teletext->srcpad = gst_pad_new_from_static_template (&src_template, "src");
-  gst_pad_set_setcaps_function (teletext->srcpad,
-      GST_DEBUG_FUNCPTR (gst_teletextdec_src_set_caps));
+  gst_pad_set_event_function (teletext->srcpad,
+      GST_DEBUG_FUNCPTR (gst_teletextdec_src_event));
   gst_element_add_pad (GST_ELEMENT (teletext), teletext->srcpad);
 
-  teletext->demux = NULL;
+  teletext->segment = NULL;
   teletext->decoder = NULL;
   teletext->pageno = 0x100;
   teletext->subno = -1;
@@ -284,16 +272,14 @@
   teletext->rate_denominator = 1;
 
   teletext->queue = NULL;
-  teletext->queue_lock = g_mutex_new ();
+  g_mutex_init (&teletext->queue_lock);
 
-  teletext->frame = g_new0 (GstTeletextFrame, 1);
-  teletext->frame->sliced_begin = g_new (vbi_sliced, MAX_SLICES);
-  teletext->frame->current_slice = teletext->frame->sliced_begin;
-  teletext->frame->sliced_end = teletext->frame->sliced_begin + MAX_SLICES;
+  gst_teletextdec_reset_frame (teletext);
 
   teletext->last_ts = 0;
 
-  teletext->process_buf_func = NULL;
+  teletext->export_func = NULL;
+  teletext->buf_pool = NULL;
 }
 
 static void
@@ -301,7 +287,7 @@
 {
   GstTeletextDec *teletext = GST_TELETEXTDEC (object);
 
-  g_mutex_free (teletext->queue_lock);
+  g_mutex_clear (&teletext->queue_lock);
 
   g_free (teletext->frame);
 
@@ -321,9 +307,9 @@
       VBI_EVENT_TTX_PAGE | VBI_EVENT_CAPTION,
       gst_teletextdec_event_handler, teletext);
 
-  g_mutex_lock (teletext->queue_lock);
+  g_mutex_lock (&teletext->queue_lock);
   teletext->queue = g_queue_new ();
-  g_mutex_unlock (teletext->queue_lock);
+  g_mutex_unlock (&teletext->queue_lock);
 }
 
 static void
@@ -333,25 +319,23 @@
 
   GST_LOG_OBJECT (teletext, "Clearing structures");
 
-  if (teletext->demux != NULL) {
-    vbi_dvb_demux_delete (teletext->demux);
-    teletext->demux = NULL;
-  }
   if (teletext->decoder != NULL) {
     vbi_decoder_delete (teletext->decoder);
     teletext->decoder = NULL;
   }
   if (teletext->frame != NULL) {
+    if (teletext->frame->sliced_begin)
+      g_free (teletext->frame->sliced_begin);
     g_free (teletext->frame);
     teletext->frame = NULL;
   }
 
-  g_mutex_lock (teletext->queue_lock);
+  g_mutex_lock (&teletext->queue_lock);
   if (teletext->queue != NULL) {
     g_queue_free (teletext->queue);
     teletext->queue = NULL;
   }
-  g_mutex_unlock (teletext->queue_lock);
+  g_mutex_unlock (&teletext->queue_lock);
 
   teletext->in_timestamp = GST_CLOCK_TIME_NONE;
   teletext->in_duration = GST_CLOCK_TIME_NONE;
@@ -417,21 +401,31 @@
 }
 
 static gboolean
-gst_teletextdec_sink_event (GstPad * pad, GstEvent * event)
+gst_teletextdec_sink_event (GstPad * pad, GstObject * parent, GstEvent * event)
 {
   gboolean ret;
-  GstTeletextDec *teletext = GST_TELETEXTDEC (gst_pad_get_parent (pad));
+  GstTeletextDec *teletext = GST_TELETEXTDEC (parent);
 
   GST_DEBUG_OBJECT (teletext, "got event %s",
       gst_event_type_get_name (GST_EVENT_TYPE (event)));
 
   switch (GST_EVENT_TYPE (event)) {
-    case GST_EVENT_NEWSEGMENT:
+    case GST_EVENT_SEGMENT:
       /* maybe save and/or update the current segment (e.g. for output
        * clipping) or convert the event into one in a different format
        * (e.g. BYTES to TIME) or drop it and set a flag to send a newsegment
        * event in a different format later */
-      ret = gst_pad_push_event (teletext->srcpad, event);
+      if (NULL == teletext->export_func) {
+        /* save the segment event and send it after sending caps. replace the
+         * old event if present. */
+        if (teletext->segment) {
+          gst_event_unref (teletext->segment);
+        }
+        teletext->segment = event;
+        ret = TRUE;
+      } else {
+        ret = gst_pad_push_event (teletext->srcpad, event);
+      }
       break;
     case GST_EVENT_EOS:
       /* end-of-stream, we should close down all stream leftovers here */
@@ -444,12 +438,31 @@
       ret = gst_pad_push_event (teletext->srcpad, event);
       break;
     default:
-      ret = gst_pad_event_default (pad, event);
+      ret = gst_pad_event_default (pad, parent, event);
       break;
   }
 
-  gst_object_unref (teletext);
+  return ret;
+}
 
+static gboolean
+gst_teletextdec_src_event (GstPad * pad, GstObject * parent, GstEvent * event)
+{
+  gboolean ret;
+  GstTeletextDec *teletext = GST_TELETEXTDEC (parent);
+
+  switch (GST_EVENT_TYPE (event)) {
+    case GST_EVENT_RECONFIGURE:
+      /* setting export_func to NULL will cause the element to renegotiate caps
+       * before pushing a buffer. */
+      teletext->export_func = NULL;
+      ret = TRUE;
+      break;
+
+    default:
+      ret = gst_pad_event_default (pad, parent, event);
+      break;
+  }
   return ret;
 }
 
@@ -484,109 +497,13 @@
   return ret;
 }
 
-static gboolean
-gst_teletextdec_sink_setcaps (GstPad * pad, GstCaps * caps)
-{
-  GstTeletextDec *teletext = GST_TELETEXTDEC (gst_pad_get_parent (pad));
-  GstStructure *structure = gst_caps_get_structure (caps, 0);
-  const gchar *mimetype = gst_structure_get_name (structure);
-
-  GST_DEBUG_OBJECT (teletext, "%s:%s, caps=%" GST_PTR_FORMAT,
-      GST_DEBUG_PAD_NAME (pad), caps);
-
-  if (g_strcmp0 (mimetype, "private/teletext") == 0) {
-    teletext->process_buf_func = gst_teletextdec_process_telx_buffer;
-    goto accept_caps;
-  } else if (g_strcmp0 (mimetype, "video/mpeg") == 0) {
-    gint version;
-    gboolean is_systemstream;
-
-    if (!gst_structure_get_int (structure, "mpegversion", &version) ||
-        !gst_structure_get_boolean (structure, "systemstream",
-            &is_systemstream))
-      goto refuse_caps;
-
-    if (version != 2 || !is_systemstream)
-      goto refuse_caps;
-
-    teletext->process_buf_func = gst_teletextdec_process_pes_buffer;
-    teletext->demux = vbi_dvb_pes_demux_new (gst_teletextdec_convert, teletext);
-    goto accept_caps;
-  } else
-    goto refuse_caps;
-
-accept_caps:
-  {
-    gst_object_unref (teletext);
-    return gst_teletextdec_push_preroll_buffer (teletext);
-  }
-
-refuse_caps:
-  {
-    GST_ERROR_OBJECT (teletext,
-        "pad %s refused renegotiation to %" GST_PTR_FORMAT,
-        GST_PAD_NAME (pad), caps);
-    gst_object_unref (teletext);
-    return FALSE;
-  }
-}
-
-static gboolean
-gst_teletextdec_src_set_caps (GstPad * pad, GstCaps * caps)
-{
-  GstTeletextDec *teletext;
-  GstStructure *structure = NULL;
-  const gchar *mimetype;
-  GstPad *peer;
-
-  teletext = GST_TELETEXTDEC (gst_pad_get_parent (pad));
-  GST_DEBUG_OBJECT (teletext, "Linking teletext source pad");
-
-  if (gst_caps_is_empty (caps)) {
-    GST_ERROR_OBJECT (teletext,
-        "pad %s refused renegotiation to %" GST_PTR_FORMAT,
-        GST_PAD_NAME (pad), caps);
-    goto refuse_caps;
-  }
-
-  peer = gst_pad_get_peer (pad);
-  if (peer) {
-    gst_pad_set_caps (peer, caps);
-    gst_object_unref (peer);
-  }
-
-  structure = gst_caps_get_structure (caps, 0);
-  mimetype = gst_structure_get_name (structure);
-
-  if (g_strcmp0 (mimetype, "video/x-raw-rgb") == 0) {
-    teletext->output_format = GST_TELETEXTDEC_OUTPUT_FORMAT_RGBA;
-    GST_DEBUG_OBJECT (teletext, "Selected RGBA output format");
-  } else if (g_strcmp0 (mimetype, "text/html") == 0) {
-    teletext->output_format = GST_TELETEXTDEC_OUTPUT_FORMAT_HTML;
-    GST_DEBUG_OBJECT (teletext, "Selected HTML output format");
-  } else if (g_strcmp0 (mimetype, "text/plain") == 0) {
-    teletext->output_format = GST_TELETEXTDEC_OUTPUT_FORMAT_TEXT;
-    GST_DEBUG_OBJECT (teletext, "Selected text output format");
-  } else if (g_strcmp0 (mimetype, "text/x-pango-markup") == 0) {
-    teletext->output_format = GST_TELETEXTDEC_OUTPUT_FORMAT_PANGO;
-    GST_DEBUG_OBJECT (teletext, "Selected pango markup output format");
-  } else
-    goto refuse_caps;
-
-  gst_object_unref (teletext);
-  return TRUE;
-
-
-refuse_caps:
-  {
-    gst_object_unref (teletext);
-    return FALSE;
-  }
-}
-
 static void
 gst_teletextdec_reset_frame (GstTeletextDec * teletext)
 {
+  if (teletext->frame == NULL)
+    teletext->frame = g_new0 (GstTeletextFrame, 1);
+  if (teletext->frame->sliced_begin == NULL)
+    teletext->frame->sliced_begin = g_new (vbi_sliced, MAX_SLICES);
   teletext->frame->current_slice = teletext->frame->sliced_begin;
   teletext->frame->sliced_end = teletext->frame->sliced_begin + MAX_SLICES;
   teletext->frame->last_field = 0;
@@ -595,32 +512,23 @@
 }
 
 static void
-gst_teletextdec_process_pes_buffer (GstTeletextDec * teletext, GstBuffer * buf)
-{
-  vbi_dvb_demux_feed (teletext->demux, GST_BUFFER_DATA (buf),
-      GST_BUFFER_SIZE (buf));
-  return;
-}
-
-static void
 gst_teletextdec_process_telx_buffer (GstTeletextDec * teletext, GstBuffer * buf)
 {
-  guint8 *data = GST_BUFFER_DATA (buf);
-  const gint size = GST_BUFFER_SIZE (buf);
+  GstMapInfo buf_map;
   guint offset = 0;
   gint res;
+  gst_buffer_map (buf, &buf_map, GST_MAP_READ);
 
   teletext->in_timestamp = GST_BUFFER_TIMESTAMP (buf);
   teletext->in_duration = GST_BUFFER_DURATION (buf);
 
-  if (teletext->frame == NULL) {
+  if (teletext->frame == NULL)
     gst_teletextdec_reset_frame (teletext);
-  }
 
-  while (offset < size) {
+  while (offset < buf_map.size) {
     res =
-        gst_teletextdec_extract_data_units (teletext, teletext->frame, data,
-        &offset, size);
+        gst_teletextdec_extract_data_units (teletext, teletext->frame,
+        buf_map.data, &offset, buf_map.size);
 
     if (res == VBI_NEW_FRAME) {
       /* We have a new frame, it's time to feed the decoder */
@@ -646,32 +554,14 @@
       gst_teletextdec_reset_frame (teletext);
     } else if (res == VBI_ERROR) {
       gst_teletextdec_reset_frame (teletext);
-      return;
+      goto beach;
     }
   }
+beach:
+  gst_buffer_unmap (buf, &buf_map);
   return;
 }
 
-static vbi_bool
-gst_teletextdec_convert (vbi_dvb_demux * dx,
-    gpointer user_data, const vbi_sliced * sliced, guint n_lines, gint64 pts)
-{
-  gdouble sample_time;
-  vbi_sliced *s;
-
-  GstTeletextDec *teletext = GST_TELETEXTDEC (user_data);
-
-  GST_DEBUG_OBJECT (teletext, "Converting %u lines to decode", n_lines);
-
-  sample_time = pts * (1 / 90000.0);
-
-  s = g_memdup (sliced, n_lines * sizeof (vbi_sliced));
-  vbi_decode (teletext->decoder, s, n_lines, sample_time);
-  g_free (s);
-
-  return GST_FLOW_OK;
-}
-
 static void
 gst_teletextdec_event_handler (vbi_event * ev, void *user_data)
 {
@@ -697,9 +587,9 @@
       pi->pgno = pgno;
       pi->subno = subno;
 
-      g_mutex_lock (teletext->queue_lock);
+      g_mutex_lock (&teletext->queue_lock);
       g_queue_push_tail (teletext->queue, pi);
-      g_mutex_unlock (teletext->queue_lock);
+      g_mutex_unlock (&teletext->queue_lock);
       break;
     case VBI_EVENT_CAPTION:
       /* TODO: Handle subtitles in caption teletext pages */
@@ -711,29 +601,148 @@
   return;
 }
 
+static void
+gst_teletextdec_try_get_buffer_pool (GstTeletextDec * teletext, GstCaps * caps,
+    gssize size)
+{
+  guint pool_bufsize, min_bufs, max_bufs;
+  GstStructure *poolcfg;
+  GstBufferPool *new_pool;
+  GstQuery *alloc = gst_query_new_allocation (caps, TRUE);
+
+  if (teletext->buf_pool) {
+    /* this function is called only on a caps/size change, so it's practically
+     * impossible that we'll be able to reuse the old pool. */
+    gst_buffer_pool_set_active (teletext->buf_pool, FALSE);
+    gst_object_unref (teletext->buf_pool);
+  }
+
+  if (!gst_pad_peer_query (teletext->srcpad, alloc)) {
+    GST_DEBUG_OBJECT (teletext, "Failed to query peer pad for allocation "
+        "parameters");
+    teletext->buf_pool = NULL;
+    goto beach;
+  }
+
+  if (gst_query_get_n_allocation_pools (alloc) > 0) {
+    gst_query_parse_nth_allocation_pool (alloc, 0, &new_pool, &pool_bufsize,
+        &min_bufs, &max_bufs);
+  } else {
+    new_pool = gst_buffer_pool_new ();
+    max_bufs = 0;
+    min_bufs = 1;
+  }
+
+  poolcfg = gst_buffer_pool_get_config (new_pool);
+  gst_buffer_pool_config_set_params (poolcfg, gst_caps_copy (caps), size,
+      min_bufs, max_bufs);
+  if (!gst_buffer_pool_set_config (new_pool, poolcfg)) {
+    GST_DEBUG_OBJECT (teletext, "Failed to configure the buffer pool");
+    gst_object_unref (new_pool);
+    teletext->buf_pool = NULL;
+    goto beach;
+  }
+  if (!gst_buffer_pool_set_active (new_pool, TRUE)) {
+    GST_DEBUG_OBJECT (teletext, "Failed to make the buffer pool active");
+    gst_object_unref (new_pool);
+    teletext->buf_pool = NULL;
+    goto beach;
+  }
+
+  teletext->buf_pool = new_pool;
+
+beach:
+  gst_query_unref (alloc);
+}
+
+static gboolean
+gst_teletextdec_negotiate_caps (GstTeletextDec * teletext, guint width,
+    guint height)
+{
+  guint i, caps_size;
+  gboolean rv = FALSE;
+
+  /* get the peer's caps filtered by our own ones. */
+  GstCaps *ourcaps = gst_pad_query_caps (teletext->srcpad, NULL);
+  GstCaps *peercaps = gst_pad_peer_query_caps (teletext->srcpad, ourcaps);
+  gst_caps_unref (ourcaps);
+
+  if (gst_caps_is_empty (peercaps)) {
+    goto beach;
+  }
+
+  /* make them writable in case we need to fixate them (video/x-raw). */
+  peercaps = gst_caps_make_writable (peercaps);
+  caps_size = gst_caps_get_size (peercaps);
+
+  for (i = 0; i < caps_size; i++) {
+    GstStructure *caps_struct = gst_caps_get_structure (peercaps, i);
+    const gchar *caps_name = gst_structure_get_name (caps_struct);
+    const gchar *caps_fmt = gst_structure_get_string (caps_struct, "format");
+
+    if (g_strcmp0 (caps_name, "video/x-raw") == 0) {
+      teletext->width = width;
+      teletext->height = height;
+      teletext->export_func = gst_teletextdec_export_rgba_page;
+      gst_structure_set (caps_struct,
+          "width", G_TYPE_INT, width,
+          "height", G_TYPE_INT, height,
+          "framerate", GST_TYPE_FRACTION, 0, 1, NULL);
+      break;
+    } else if ((g_strcmp0 (caps_name, "text/x-raw") == 0) &&
+        (g_strcmp0 (caps_fmt, "utf-8") == 0)) {
+      teletext->export_func = gst_teletextdec_export_text_page;
+      break;
+    } else if ((g_strcmp0 (caps_name, "text/x-raw") == 0) &&
+        (g_strcmp0 (caps_fmt, "pango-markup") == 0)) {
+      teletext->export_func = gst_teletextdec_export_pango_page;
+      break;
+    } else {
+      goto beach;
+    }
+  }
+
+  if (!gst_pad_push_event (teletext->srcpad, gst_event_new_caps (peercaps))) {
+    goto beach;
+  }
+
+  /* try to get a bufferpool from the peer pad in case of RGBA output. */
+  if (gst_teletextdec_export_rgba_page == teletext->export_func) {
+    gst_teletextdec_try_get_buffer_pool (teletext, peercaps,
+        width * height * sizeof (vbi_rgba));
+  }
+
+  /* we can happily return a success now. */
+  rv = TRUE;
+
+beach:
+  gst_caps_unref (peercaps);
+  return rv;
+}
+
 /* this function does the actual processing
  */
 static GstFlowReturn
-gst_teletextdec_chain (GstPad * pad, GstBuffer * buf)
+gst_teletextdec_chain (GstPad * pad, GstObject * parent, GstBuffer * buf)
 {
-  GstTeletextDec *teletext = GST_TELETEXTDEC (GST_PAD_PARENT (pad));
+  GstTeletextDec *teletext = GST_TELETEXTDEC (parent);
   GstFlowReturn ret = GST_FLOW_OK;
 
   teletext->in_timestamp = GST_BUFFER_TIMESTAMP (buf);
   teletext->in_duration = GST_BUFFER_DURATION (buf);
 
-  teletext->process_buf_func (teletext, buf);
+  gst_teletextdec_process_telx_buffer (teletext, buf);
   gst_buffer_unref (buf);
 
-  g_mutex_lock (teletext->queue_lock);
+  g_mutex_lock (&teletext->queue_lock);
   if (!g_queue_is_empty (teletext->queue)) {
     ret = gst_teletextdec_push_page (teletext);
     if (ret != GST_FLOW_OK) {
-      g_mutex_unlock (teletext->queue_lock);
+      g_mutex_unlock (&teletext->queue_lock);
       goto error;
     }
   }
-  g_mutex_unlock (teletext->queue_lock);
+  g_mutex_unlock (&teletext->queue_lock);
 
   return ret;
 
@@ -760,9 +769,9 @@
   page_info *pi;
   gint pgno, subno;
   gboolean success;
+  guint width, height;
 
-  pi = (page_info *) g_queue_pop_head (teletext->queue);
-
+  pi = g_queue_pop_head (teletext->queue);
   pgno = vbi_bcd2dec (pi->pgno);
   subno = vbi_bcd2dec (pi->subno);
 
@@ -770,37 +779,37 @@
 
   success = vbi_fetch_vt_page (teletext->decoder, &page, pi->pgno, pi->subno,
       VBI_WST_LEVEL_3p5, 25, FALSE);
+  g_free (pi);
   if (G_UNLIKELY (!success))
     goto fetch_page_failed;
 
-  switch (teletext->output_format) {
-    case GST_TELETEXTDEC_OUTPUT_FORMAT_TEXT:
-      ret = gst_teletextdec_export_text_page (teletext, &page, &buf);
-      break;
-    case GST_TELETEXTDEC_OUTPUT_FORMAT_HTML:
-      ret = gst_teletextdec_export_html_page (teletext, &page, &buf);
-      break;
-    case GST_TELETEXTDEC_OUTPUT_FORMAT_RGBA:
-      ret = gst_teletextdec_export_rgba_page (teletext, &page, &buf);
-      break;
-    case GST_TELETEXTDEC_OUTPUT_FORMAT_PANGO:
-      ret = gst_teletextdec_export_pango_page (teletext, &page, &buf);
-      break;
-    default:
-      g_assert_not_reached ();
-      break;
-  }
-  vbi_unref_page (&page);
-  g_free (pi);
+  width = COLUMNS_TO_WIDTH (page.columns);
+  height = ROWS_TO_HEIGHT (page.rows);
 
-  if (ret != GST_FLOW_OK)
-    goto alloc_failed;
+  /* if output_func is NULL, we need to (re-)negotiate. also, it is possible
+   * (though unlikely) that we received a page of a different size. */
+  if (G_UNLIKELY (NULL == teletext->export_func ||
+          teletext->width != width || teletext->height != height)) {
+    /* if negotiate_caps returns FALSE, that means we weren't able to
+     * negotiate. */
+    if (G_UNLIKELY (!gst_teletextdec_negotiate_caps (teletext, width, height))) {
+      ret = GST_FLOW_NOT_NEGOTIATED;
+      goto push_failed;
+    }
+    if (G_UNLIKELY (teletext->segment)) {
+      gst_pad_push_event (teletext->srcpad, teletext->segment);
+      teletext->segment = NULL;
+    }
+  }
+
+  teletext->export_func (teletext, &page, &buf);
+  vbi_unref_page (&page);
 
   GST_BUFFER_TIMESTAMP (buf) = teletext->in_timestamp;
   GST_BUFFER_DURATION (buf) = teletext->in_duration;
 
-  GST_INFO_OBJECT (teletext, "Pushing buffer of size %d",
-      GST_BUFFER_SIZE (buf));
+  GST_INFO_OBJECT (teletext, "Pushing buffer of size %" G_GSIZE_FORMAT,
+      gst_buffer_get_size (buf));
 
   ret = gst_pad_push (teletext->srcpad, buf);
   if (ret != GST_FLOW_OK)
@@ -814,13 +823,6 @@
     return GST_FLOW_ERROR;
   }
 
-alloc_failed:
-  {
-    GST_ERROR_OBJECT (teletext, "Error allocating output buffer, reason %s",
-        gst_flow_get_name (ret));
-    return ret;
-  }
-
 push_failed:
   {
     GST_ERROR_OBJECT (teletext, "Pushing buffer failed, reason %s",
@@ -830,17 +832,17 @@
 }
 
 static gchar **
-gst_teletextdec_vbi_page_to_text_lines (GstTeletextDec * teletext,
-    guint start, guint stop, vbi_page * page)
+gst_teletextdec_vbi_page_to_text_lines (guint start, guint stop, vbi_page *
+    page)
 {
   const guint lines_count = stop - start + 1;
   const guint line_length = page->columns;
   gchar **lines;
-  gint i;
+  guint i;
 
   /* allocate a new NULL-terminated array of strings */
   lines = (gchar **) g_malloc (sizeof (gchar *) * (lines_count + 1));
-  lines[lines_count] = g_strdup ('\0');
+  lines[lines_count] = NULL;
 
   /* export each line in the range of the teletext page in text format */
   for (i = start; i <= stop; i++) {
@@ -858,8 +860,6 @@
 gst_teletextdec_export_text_page (GstTeletextDec * teletext, vbi_page * page,
     GstBuffer ** buf)
 {
-  GstCaps *caps;
-  GstFlowReturn ret;
   gchar *text;
   guint size;
 
@@ -868,7 +868,7 @@
     GString *subs;
     guint i;
 
-    lines = gst_teletextdec_vbi_page_to_text_lines (teletext, 1, 23, page);
+    lines = gst_teletextdec_vbi_page_to_text_lines (1, 23, page);
     subs = g_string_new ("");
     /* Strip white spaces and squash blank lines */
     for (i = 0; i < 23; i++) {
@@ -892,52 +892,9 @@
   }
 
   /* Allocate new buffer */
-  caps = gst_caps_new_simple ("text/plain", NULL);
-  ret = gst_pad_alloc_buffer (teletext->srcpad, GST_BUFFER_OFFSET_NONE,
-      size, caps, &(*buf));
-  if (G_LIKELY (ret == GST_FLOW_OK))
-    GST_BUFFER_DATA (*buf) = GST_BUFFER_MALLOCDATA (*buf) = (guint8 *) text;
-  else
-    gst_buffer_unref (*buf);
+  *buf = gst_buffer_new_wrapped (text, size);
 
-  gst_caps_unref (caps);
-  return ret;
-}
-
-static GstFlowReturn
-gst_teletextdec_export_html_page (GstTeletextDec * teletext, vbi_page * page,
-    GstBuffer ** buf)
-{
-  GstCaps *caps;
-  GstFlowReturn ret;
-  gchar *html;
-  gssize size;
-  vbi_export *ex;
-  gchar *err;
-
-  if (!(ex = vbi_export_new ("html", &err))) {
-    GST_ELEMENT_ERROR (teletext, LIBRARY, SETTINGS,
-        ("Can't open the HTML export module: %s", err), (NULL));
-    g_free (err);
-    return GST_FLOW_ERROR;
-  }
-
-  /* export to NULL to get size of the memory needed to allocate the page */
-  size = vbi_export_mem (ex, NULL, 0, page);
-  if (size < 0)
-    return GST_FLOW_ERROR;
-  html = g_malloc (size);
-  vbi_export_mem (ex, html, size, page);
-
-  /* Allocate new buffer */
-  caps = gst_caps_new_simple ("text/html", NULL);
-  ret = gst_pad_alloc_buffer (teletext->srcpad, GST_BUFFER_OFFSET_NONE,
-      size, caps, &(*buf));
-  if (G_LIKELY (ret == GST_FLOW_OK))
-    GST_BUFFER_DATA (*buf) = GST_BUFFER_MALLOCDATA (*buf) = (guint8 *) html;
-
-  gst_caps_unref (caps);
-  return ret;
+  return GST_FLOW_OK;
 }
 
 static GstFlowReturn
@@ -945,40 +902,34 @@
     GstBuffer ** buf)
 {
   guint size;
-  GstCaps *caps, *out_caps;
-  GstFlowReturn ret;
-  gint width, height;
-  GstPadTemplate *templ;
+  GstBuffer *lbuf;
+  GstMapInfo buf_map;
 
-  /* one character occupies 12 x 10 pixels */
-  width = page->columns * 12;
-  height = page->rows * 10;
+  size = teletext->width * teletext->height * sizeof (vbi_rgba);
 
-  caps = gst_caps_new_simple ("video/x-raw-rgb",
-      "width", G_TYPE_INT, width,
-      "height", G_TYPE_INT, height,
-      "framerate", GST_TYPE_FRACTION, teletext->rate_numerator,
-      teletext->rate_denominator, NULL);
-
-  templ = gst_static_pad_template_get (&src_template);
-  out_caps = gst_caps_intersect (caps, gst_pad_template_get_caps (templ));
-  gst_caps_unref (caps);
-  gst_object_unref (templ);
-
-  size = (guint) width *(guint) height *sizeof (vbi_rgba);
-
-  ret = gst_pad_alloc_buffer_and_set_caps (teletext->srcpad,
-      GST_BUFFER_OFFSET_NONE, size, out_caps, &(*buf));
-
-  if (ret == GST_FLOW_OK) {
-    GST_DEBUG_OBJECT (teletext, "Creating image with %d rows and %d cols",
-        page->rows, page->columns);
-    vbi_draw_vt_page (page, VBI_PIXFMT_RGBA32_LE,
-        (vbi_rgba *) GST_BUFFER_DATA (*buf), FALSE, TRUE);
+  /* Allocate new buffer, using the negotiated pool if available. */
+  if (teletext->buf_pool) {
+    GstFlowReturn acquire_rv =
+        gst_buffer_pool_acquire_buffer (teletext->buf_pool, &lbuf, NULL);
+    if (acquire_rv != GST_FLOW_OK) {
+      return acquire_rv;
+    }
+  } else {
+    lbuf = gst_buffer_new_allocate (NULL, size, NULL);
+    if (NULL == lbuf)
+      return GST_FLOW_ERROR;
   }
 
-  gst_caps_unref (out_caps);
-  return ret;
+  if (!gst_buffer_map (lbuf, &buf_map, GST_MAP_WRITE)) {
+    gst_buffer_unref (lbuf);
+    return GST_FLOW_ERROR;
+  }
+
+  vbi_draw_vt_page (page, VBI_PIXFMT_RGBA32_LE, buf_map.data, FALSE, TRUE);
+  gst_buffer_unmap (lbuf, &buf_map);
+  *buf = lbuf;
+
+  return GST_FLOW_OK;
 }
 
 static GstFlowReturn
@@ -990,13 +941,11 @@
   gchar **colors;
   gchar **lines;
   GString *subs;
-  GstCaps *caps;
-  GstFlowReturn ret;
-  guint start, stop;
-  guint i, j;
+  guint start, stop, k;
+  gint i, j;
 
   colors = (gchar **) g_malloc (sizeof (gchar *) * (rows + 1));
-  colors[rows] = g_strdup ('\0');
+  colors[rows] = NULL;
 
   /* parse all the lines and approximate it's foreground color using the first
    * non null character */
@@ -1013,77 +962,24 @@
   /* get an array of strings with each line of the telext page */
   start = teletext->subtitles_mode ? 1 : 0;
   stop = teletext->subtitles_mode ? rows - 2 : rows - 1;
-  lines = gst_teletextdec_vbi_page_to_text_lines (teletext, start, stop, page);
+  lines = gst_teletextdec_vbi_page_to_text_lines (start, stop, page);
 
   /* format each line in pango markup */
   subs = g_string_new ("");
-  for (i = start; i <= stop; i++) {
+  for (k = start; k <= stop; k++) {
     g_string_append_printf (subs, PANGO_TEMPLATE,
-        teletext->font_description, colors[i], lines[i - start]);
+        teletext->font_description, colors[k], lines[k - start]);
   }
 
   /* Allocate new buffer */
-  caps = gst_caps_new_simple ("text/x-pango-markup", NULL);
-  ret = gst_pad_alloc_buffer (teletext->srcpad, GST_BUFFER_OFFSET_NONE,
-      subs->len + 1, caps, &(*buf));
-  if (G_LIKELY (ret == GST_FLOW_OK))
-    GST_BUFFER_DATA (*buf) = GST_BUFFER_MALLOCDATA (*buf) =
-        (guint8 *) subs->str;
-  else
-    gst_buffer_unref (*buf);
+  *buf = gst_buffer_new_wrapped (subs->str, subs->len + 1);
 
   g_strfreev (lines);
   g_strfreev (colors);
   g_string_free (subs, FALSE);
-  gst_caps_unref (caps);
-  return ret;
+  return GST_FLOW_OK;
 }
 
-static gboolean
-gst_teletextdec_push_preroll_buffer (GstTeletextDec * teletext)
-{
-  GstFlowReturn ret;
-  GstBuffer *buf;
-  gboolean res = TRUE;
-  GstStructure *structure;
-  const gchar *mimetype;
-  GstCaps *out_caps, *peer_caps, *pad_caps;
-
-  /* the stream is sparse, we send a dummy buffer for preroll */
-  peer_caps = gst_pad_peer_get_caps (teletext->srcpad);
-  pad_caps = gst_pad_get_caps (teletext->srcpad);
-  out_caps = gst_caps_intersect (pad_caps, peer_caps);
-
-  if (gst_caps_is_empty (out_caps)) {
-    res = FALSE;
-    goto beach;
-  }
-
-  gst_caps_truncate (out_caps);
-  structure = gst_caps_get_structure (out_caps, 0);
-  mimetype = gst_structure_get_name (structure);
-  if (g_strcmp0 (mimetype, "video/x-raw-rgb") == 0) {
-    /* omit preroll buffer for this format */
-    goto beach;
-  }
-
-  buf = gst_buffer_new_and_alloc (1);
-  GST_BUFFER_DATA (buf)[0] = 0;
-  gst_buffer_set_caps (buf, out_caps);
-  ret = gst_pad_push (teletext->srcpad, buf);
-  if (ret != GST_FLOW_OK)
-    res = FALSE;
-
-beach:
-  {
-    gst_caps_unref (out_caps);
-    gst_caps_unref (pad_caps);
-    gst_caps_unref (peer_caps);
-    return res;
-  }
-}
-
-
 /* Converts the line_offset / field_parity byte of a VBI data unit. */
 static void
 gst_teletextdec_lofp_to_line (guint * field, guint * field_line,
@@ -1160,9 +1056,9 @@
 
 static gboolean
 gst_teletextdec_extract_data_units (GstTeletextDec * teletext,
-    GstTeletextFrame * f, guint8 * packet, guint * offset, gint size)
+    GstTeletextFrame * f, const guint8 * packet, guint * offset, gsize size)
 {
-  guint8 *data_unit;
+  const guint8 *data_unit;
   guint i;
 
   while (*offset < size) {
@@ -1243,3 +1139,18 @@
   }
   return VBI_SUCCESS;
 }
+
+static gboolean
+teletext_init (GstPlugin * teletext)
+{
+  GST_DEBUG_CATEGORY_INIT (gst_teletextdec_debug, "teletext", 0,
+      "Teletext decoder");
+  return gst_element_register (teletext, "teletextdec", GST_RANK_NONE,
+      GST_TYPE_TELETEXTDEC);
+}
+
+GST_PLUGIN_DEFINE (GST_VERSION_MAJOR,
+    GST_VERSION_MINOR,
+    teletext,
+    "Teletext plugin",
+    teletext_init, VERSION, "LGPL", "GStreamer", "http://gstreamer.net/")
diff --git a/ext/teletextdec/gstteletextdec.h b/ext/teletextdec/gstteletextdec.h
index 460793d..7c544ba 100644
--- a/ext/teletextdec/gstteletextdec.h
+++ b/ext/teletextdec/gstteletextdec.h
@@ -41,16 +41,8 @@
 typedef struct _GstTeletextFrame GstTeletextFrame;
 typedef enum _GstTeletextOutputFormat GstTeletextOutputFormat;
 
-enum _GstTeletextOutputFormat
-{
-  GST_TELETEXTDEC_OUTPUT_FORMAT_RGBA,
-  GST_TELETEXTDEC_OUTPUT_FORMAT_TEXT,
-  GST_TELETEXTDEC_OUTPUT_FORMAT_HTML,
-  GST_TELETEXTDEC_OUTPUT_FORMAT_PANGO
-};
-
-typedef void (*GstTeletextProcessBufferFunc) (GstTeletextDec *
-    teletext, GstBuffer * buf);
+typedef GstFlowReturn (*GstTeletextExportFunc) (GstTeletextDec * teletext,
+    vbi_page * page, GstBuffer ** buf);
 
 struct _GstTeletextDec
 {
@@ -58,6 +50,7 @@
 
   GstPad *sinkpad;
   GstPad *srcpad;
+  GstEvent *segment;
 
   GstClockTime in_timestamp;
   GstClockTime in_duration;
@@ -71,17 +64,22 @@
   gchar *subtitles_template;
   gchar *font_description;
 
-  vbi_dvb_demux *demux;
   vbi_decoder *decoder;
-  vbi_export *exporter;
+
   GQueue *queue;
-  GMutex *queue_lock;
+  GMutex queue_lock;
 
   GstTeletextFrame *frame;
   float last_ts;
-  GstTeletextOutputFormat output_format;
 
-  GstTeletextProcessBufferFunc process_buf_func;
+  GstTeletextExportFunc export_func;
+
+  /* negotiated size of the output image in RGBA mode. */
+  guint width;
+  guint height;
+
+  /* buffer pool received from the peer pad - used in RGBA output only. */
+  GstBufferPool *buf_pool;
 };
 
 struct _GstTeletextFrame
diff --git a/ext/teletextdec/teletext.c b/ext/teletextdec/teletext.c
deleted file mode 100644
index 5d3f13e..0000000
--- a/ext/teletextdec/teletext.c
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * GStreamer
- * Copyright (C) 2009 Sebastian Pölsterl <sebp@k-d-w.org>
- *
- * This library is free software; you can redistribute it and/or
- * mod1ify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor,
- * Boston, MA  02110-1301  USA
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include <gst/gst.h>
-#include "gstteletextdec.h"
-
-/* entry point to initialize the plug-in
- * initialize the plug-in itself
- * register the element factories and other features
- */
-static gboolean
-teletext_init (GstPlugin * teletext)
-{
-  return gst_element_register (teletext, "teletextdec", GST_RANK_NONE,
-      GST_TYPE_TELETEXTDEC);
-}
-
-GST_PLUGIN_DEFINE (GST_VERSION_MAJOR,
-    GST_VERSION_MINOR,
-    teletext,
-    "Teletext plugin",
-    teletext_init, VERSION, "LGPL", "GStreamer", "http://gstreamer.net/")
diff --git a/ext/timidity/Makefile.in b/ext/timidity/Makefile.in
index bd67165..9544679 100644
--- a/ext/timidity/Makefile.in
+++ b/ext/timidity/Makefile.in
@@ -118,16 +118,15 @@
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
 	$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
-	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gsettings.m4 \
-	$(top_srcdir)/m4/gst-fionread.m4 $(top_srcdir)/m4/gst-sdl.m4 \
-	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
-	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
-	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libgcrypt.m4 \
-	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
-	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
-	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
-	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
-	$(top_srcdir)/configure.ac
+	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gst-fionread.m4 \
+	$(top_srcdir)/m4/gst-sdl.m4 $(top_srcdir)/m4/iconv.m4 \
+	$(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \
+	$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
+	$(top_srcdir)/m4/libgcrypt.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
+	$(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \
@@ -293,6 +292,8 @@
 CLUTTER_X11_LIBS = @CLUTTER_X11_LIBS@
 CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
+CUDA_CFLAGS = @CUDA_CFLAGS@
+CUDA_LIBS = @CUDA_LIBS@
 CURL_CFLAGS = @CURL_CFLAGS@
 CURL_LIBS = @CURL_LIBS@
 CXX = @CXX@
@@ -330,6 +331,8 @@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
+EGL_CFLAGS = @EGL_CFLAGS@
+EGL_LIBS = @EGL_LIBS@
 EGREP = @EGREP@
 ERROR_CFLAGS = @ERROR_CFLAGS@
 ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
@@ -338,7 +341,6 @@
 EXIF_CFLAGS = @EXIF_CFLAGS@
 EXIF_LIBS = @EXIF_LIBS@
 FAAC_LIBS = @FAAC_LIBS@
-FAAD_IS_NEAAC = @FAAD_IS_NEAAC@
 FAAD_LIBS = @FAAD_LIBS@
 FFLAGS = @FFLAGS@
 FGREP = @FGREP@
@@ -357,8 +359,9 @@
 GIO_LIBS = @GIO_LIBS@
 GIO_UNIX_CFLAGS = @GIO_UNIX_CFLAGS@
 GIO_UNIX_LIBS = @GIO_UNIX_LIBS@
+GLES2_CFLAGS = @GLES2_CFLAGS@
+GLES2_LIBS = @GLES2_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
-GLIB_COMPILE_SCHEMAS = @GLIB_COMPILE_SCHEMAS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
@@ -375,16 +378,17 @@
 GMODULE_NO_EXPORT_LIBS = @GMODULE_NO_EXPORT_LIBS@
 GMSGFMT = @GMSGFMT@
 GMSGFMT_015 = @GMSGFMT_015@
+GNUSTL_CFLAGS = @GNUSTL_CFLAGS@
+GNUSTL_LIBS = @GNUSTL_LIBS@
 GRAPHENE_CFLAGS = @GRAPHENE_CFLAGS@
 GRAPHENE_LIBS = @GRAPHENE_LIBS@
 GREP = @GREP@
-GSETTINGS_CFLAGS = @GSETTINGS_CFLAGS@
-GSETTINGS_DISABLE_SCHEMAS_COMPILE = @GSETTINGS_DISABLE_SCHEMAS_COMPILE@
-GSETTINGS_LIBS = @GSETTINGS_LIBS@
 GSM_LIBS = @GSM_LIBS@
 GSTPB_PLUGINS_DIR = @GSTPB_PLUGINS_DIR@
 GSTPB_PREFIX = @GSTPB_PREFIX@
 GST_AGE = @GST_AGE@
+GST_ALLOCATORS_CFLAGS = @GST_ALLOCATORS_CFLAGS@
+GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
 GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
 GST_API_VERSION = @GST_API_VERSION@
 GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
@@ -410,6 +414,8 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PBUTILS_CFLAGS = @GST_PBUTILS_CFLAGS@
+GST_PBUTILS_LIBS = @GST_PBUTILS_LIBS@
 GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BAD_CFLAGS = @GST_PLUGINS_BAD_CFLAGS@
@@ -435,6 +441,8 @@
 GST_PREFIX = @GST_PREFIX@
 GST_REVISION = @GST_REVISION@
 GST_TOOLS_DIR = @GST_TOOLS_DIR@
+GST_VIDEO_CFLAGS = @GST_VIDEO_CFLAGS@
+GST_VIDEO_LIBS = @GST_VIDEO_LIBS@
 GTK3_CFLAGS = @GTK3_CFLAGS@
 GTK3_GL_CFLAGS = @GTK3_GL_CFLAGS@
 GTK3_GL_LIBS = @GTK3_GL_LIBS@
@@ -536,6 +544,7 @@
 LTLIBICONV = @LTLIBICONV@
 LTLIBINTL = @LTLIBINTL@
 LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
 MANIFEST_TOOL = @MANIFEST_TOOL@
@@ -549,8 +558,6 @@
 MODPLUG_LIBS = @MODPLUG_LIBS@
 MPEG2ENC_CFLAGS = @MPEG2ENC_CFLAGS@
 MPEG2ENC_LIBS = @MPEG2ENC_LIBS@
-MPG123_CFLAGS = @MPG123_CFLAGS@
-MPG123_LIBS = @MPG123_LIBS@
 MPLEX_CFLAGS = @MPLEX_CFLAGS@
 MPLEX_LDFLAGS = @MPLEX_LDFLAGS@
 MPLEX_LIBS = @MPLEX_LIBS@
@@ -566,6 +573,8 @@
 NETTLE_LIBS = @NETTLE_LIBS@
 NM = @NM@
 NMEDIT = @NMEDIT@
+NVENCODE_CFLAGS = @NVENCODE_CFLAGS@
+NVENCODE_LIBS = @NVENCODE_LIBS@
 OBJC = @OBJC@
 OBJCDEPMODE = @OBJCDEPMODE@
 OBJCFLAGS = @OBJCFLAGS@
@@ -623,16 +632,18 @@
 PYTHON_PLATFORM = @PYTHON_PLATFORM@
 PYTHON_PREFIX = @PYTHON_PREFIX@
 PYTHON_VERSION = @PYTHON_VERSION@
+QT_ANDROID_CFLAGS = @QT_ANDROID_CFLAGS@
+QT_ANDROID_LIBS = @QT_ANDROID_LIBS@
 QT_CFLAGS = @QT_CFLAGS@
 QT_LIBS = @QT_LIBS@
+QT_MAC_CFLAGS = @QT_MAC_CFLAGS@
+QT_MAC_LIBS = @QT_MAC_LIBS@
 QT_WAYLAND_CFLAGS = @QT_WAYLAND_CFLAGS@
 QT_WAYLAND_LIBS = @QT_WAYLAND_LIBS@
 QT_X11_CFLAGS = @QT_X11_CFLAGS@
 QT_X11_LIBS = @QT_X11_LIBS@
 RANLIB = @RANLIB@
 RCC = @RCC@
-RSVG_2_36_2_CFLAGS = @RSVG_2_36_2_CFLAGS@
-RSVG_2_36_2_LIBS = @RSVG_2_36_2_LIBS@
 RSVG_CFLAGS = @RSVG_CFLAGS@
 RSVG_LIBS = @RSVG_LIBS@
 RTMP_CFLAGS = @RTMP_CFLAGS@
@@ -684,6 +695,7 @@
 VOAACENC_LIBS = @VOAACENC_LIBS@
 VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
 VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VULKAN_LIBS = @VULKAN_LIBS@
 WARNING_CFLAGS = @WARNING_CFLAGS@
 WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
 WARNING_OBJCFLAGS = @WARNING_OBJCFLAGS@
@@ -694,6 +706,7 @@
 WAYLAND_LIBS = @WAYLAND_LIBS@
 WEBP_CFLAGS = @WEBP_CFLAGS@
 WEBP_LIBS = @WEBP_LIBS@
+WGET = @WGET@
 WILDMIDI_CFLAGS = @WILDMIDI_CFLAGS@
 WILDMIDI_LIBS = @WILDMIDI_LIBS@
 WINKS_LIBS = @WINKS_LIBS@
@@ -703,6 +716,8 @@
 X11_LIBS = @X11_LIBS@
 X265_CFLAGS = @X265_CFLAGS@
 X265_LIBS = @X265_LIBS@
+XCB_CFLAGS = @XCB_CFLAGS@
+XCB_LIBS = @XCB_LIBS@
 XCOMPOSITE_CFLAGS = @XCOMPOSITE_CFLAGS@
 XCOMPOSITE_LIBS = @XCOMPOSITE_LIBS@
 XGETTEXT = @XGETTEXT@
@@ -740,7 +755,6 @@
 docdir = @docdir@
 dvidir = @dvidir@
 exec_prefix = @exec_prefix@
-gsettingsschemadir = @gsettingsschemadir@
 host = @host@
 host_alias = @host_alias@
 host_cpu = @host_cpu@
diff --git a/ext/timidity/gsttimidity.c b/ext/timidity/gsttimidity.c
index 0867795..418a5fe 100644
--- a/ext/timidity/gsttimidity.c
+++ b/ext/timidity/gsttimidity.c
@@ -588,8 +588,7 @@
       goto paused;
     }
 
-    if (timidity->mididata)
-      g_free (timidity->mididata);
+    g_free (timidity->mididata);
 
     timidity->mididata = g_malloc (timidity->mididata_size);
     timidity->mididata_offset = 0;
diff --git a/ext/voaacenc/Makefile.in b/ext/voaacenc/Makefile.in
index 259775a..05f2225 100644
--- a/ext/voaacenc/Makefile.in
+++ b/ext/voaacenc/Makefile.in
@@ -116,16 +116,15 @@
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
 	$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
-	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gsettings.m4 \
-	$(top_srcdir)/m4/gst-fionread.m4 $(top_srcdir)/m4/gst-sdl.m4 \
-	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
-	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
-	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libgcrypt.m4 \
-	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
-	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
-	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
-	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
-	$(top_srcdir)/configure.ac
+	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gst-fionread.m4 \
+	$(top_srcdir)/m4/gst-sdl.m4 $(top_srcdir)/m4/iconv.m4 \
+	$(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \
+	$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
+	$(top_srcdir)/m4/libgcrypt.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
+	$(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \
@@ -276,6 +275,8 @@
 CLUTTER_X11_LIBS = @CLUTTER_X11_LIBS@
 CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
+CUDA_CFLAGS = @CUDA_CFLAGS@
+CUDA_LIBS = @CUDA_LIBS@
 CURL_CFLAGS = @CURL_CFLAGS@
 CURL_LIBS = @CURL_LIBS@
 CXX = @CXX@
@@ -313,6 +314,8 @@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
+EGL_CFLAGS = @EGL_CFLAGS@
+EGL_LIBS = @EGL_LIBS@
 EGREP = @EGREP@
 ERROR_CFLAGS = @ERROR_CFLAGS@
 ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
@@ -321,7 +324,6 @@
 EXIF_CFLAGS = @EXIF_CFLAGS@
 EXIF_LIBS = @EXIF_LIBS@
 FAAC_LIBS = @FAAC_LIBS@
-FAAD_IS_NEAAC = @FAAD_IS_NEAAC@
 FAAD_LIBS = @FAAD_LIBS@
 FFLAGS = @FFLAGS@
 FGREP = @FGREP@
@@ -340,8 +342,9 @@
 GIO_LIBS = @GIO_LIBS@
 GIO_UNIX_CFLAGS = @GIO_UNIX_CFLAGS@
 GIO_UNIX_LIBS = @GIO_UNIX_LIBS@
+GLES2_CFLAGS = @GLES2_CFLAGS@
+GLES2_LIBS = @GLES2_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
-GLIB_COMPILE_SCHEMAS = @GLIB_COMPILE_SCHEMAS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
@@ -358,16 +361,17 @@
 GMODULE_NO_EXPORT_LIBS = @GMODULE_NO_EXPORT_LIBS@
 GMSGFMT = @GMSGFMT@
 GMSGFMT_015 = @GMSGFMT_015@
+GNUSTL_CFLAGS = @GNUSTL_CFLAGS@
+GNUSTL_LIBS = @GNUSTL_LIBS@
 GRAPHENE_CFLAGS = @GRAPHENE_CFLAGS@
 GRAPHENE_LIBS = @GRAPHENE_LIBS@
 GREP = @GREP@
-GSETTINGS_CFLAGS = @GSETTINGS_CFLAGS@
-GSETTINGS_DISABLE_SCHEMAS_COMPILE = @GSETTINGS_DISABLE_SCHEMAS_COMPILE@
-GSETTINGS_LIBS = @GSETTINGS_LIBS@
 GSM_LIBS = @GSM_LIBS@
 GSTPB_PLUGINS_DIR = @GSTPB_PLUGINS_DIR@
 GSTPB_PREFIX = @GSTPB_PREFIX@
 GST_AGE = @GST_AGE@
+GST_ALLOCATORS_CFLAGS = @GST_ALLOCATORS_CFLAGS@
+GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
 GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
 GST_API_VERSION = @GST_API_VERSION@
 GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
@@ -393,6 +397,8 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PBUTILS_CFLAGS = @GST_PBUTILS_CFLAGS@
+GST_PBUTILS_LIBS = @GST_PBUTILS_LIBS@
 GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BAD_CFLAGS = @GST_PLUGINS_BAD_CFLAGS@
@@ -418,6 +424,8 @@
 GST_PREFIX = @GST_PREFIX@
 GST_REVISION = @GST_REVISION@
 GST_TOOLS_DIR = @GST_TOOLS_DIR@
+GST_VIDEO_CFLAGS = @GST_VIDEO_CFLAGS@
+GST_VIDEO_LIBS = @GST_VIDEO_LIBS@
 GTK3_CFLAGS = @GTK3_CFLAGS@
 GTK3_GL_CFLAGS = @GTK3_GL_CFLAGS@
 GTK3_GL_LIBS = @GTK3_GL_LIBS@
@@ -519,6 +527,7 @@
 LTLIBICONV = @LTLIBICONV@
 LTLIBINTL = @LTLIBINTL@
 LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
 MANIFEST_TOOL = @MANIFEST_TOOL@
@@ -532,8 +541,6 @@
 MODPLUG_LIBS = @MODPLUG_LIBS@
 MPEG2ENC_CFLAGS = @MPEG2ENC_CFLAGS@
 MPEG2ENC_LIBS = @MPEG2ENC_LIBS@
-MPG123_CFLAGS = @MPG123_CFLAGS@
-MPG123_LIBS = @MPG123_LIBS@
 MPLEX_CFLAGS = @MPLEX_CFLAGS@
 MPLEX_LDFLAGS = @MPLEX_LDFLAGS@
 MPLEX_LIBS = @MPLEX_LIBS@
@@ -549,6 +556,8 @@
 NETTLE_LIBS = @NETTLE_LIBS@
 NM = @NM@
 NMEDIT = @NMEDIT@
+NVENCODE_CFLAGS = @NVENCODE_CFLAGS@
+NVENCODE_LIBS = @NVENCODE_LIBS@
 OBJC = @OBJC@
 OBJCDEPMODE = @OBJCDEPMODE@
 OBJCFLAGS = @OBJCFLAGS@
@@ -606,16 +615,18 @@
 PYTHON_PLATFORM = @PYTHON_PLATFORM@
 PYTHON_PREFIX = @PYTHON_PREFIX@
 PYTHON_VERSION = @PYTHON_VERSION@
+QT_ANDROID_CFLAGS = @QT_ANDROID_CFLAGS@
+QT_ANDROID_LIBS = @QT_ANDROID_LIBS@
 QT_CFLAGS = @QT_CFLAGS@
 QT_LIBS = @QT_LIBS@
+QT_MAC_CFLAGS = @QT_MAC_CFLAGS@
+QT_MAC_LIBS = @QT_MAC_LIBS@
 QT_WAYLAND_CFLAGS = @QT_WAYLAND_CFLAGS@
 QT_WAYLAND_LIBS = @QT_WAYLAND_LIBS@
 QT_X11_CFLAGS = @QT_X11_CFLAGS@
 QT_X11_LIBS = @QT_X11_LIBS@
 RANLIB = @RANLIB@
 RCC = @RCC@
-RSVG_2_36_2_CFLAGS = @RSVG_2_36_2_CFLAGS@
-RSVG_2_36_2_LIBS = @RSVG_2_36_2_LIBS@
 RSVG_CFLAGS = @RSVG_CFLAGS@
 RSVG_LIBS = @RSVG_LIBS@
 RTMP_CFLAGS = @RTMP_CFLAGS@
@@ -667,6 +678,7 @@
 VOAACENC_LIBS = @VOAACENC_LIBS@
 VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
 VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VULKAN_LIBS = @VULKAN_LIBS@
 WARNING_CFLAGS = @WARNING_CFLAGS@
 WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
 WARNING_OBJCFLAGS = @WARNING_OBJCFLAGS@
@@ -677,6 +689,7 @@
 WAYLAND_LIBS = @WAYLAND_LIBS@
 WEBP_CFLAGS = @WEBP_CFLAGS@
 WEBP_LIBS = @WEBP_LIBS@
+WGET = @WGET@
 WILDMIDI_CFLAGS = @WILDMIDI_CFLAGS@
 WILDMIDI_LIBS = @WILDMIDI_LIBS@
 WINKS_LIBS = @WINKS_LIBS@
@@ -686,6 +699,8 @@
 X11_LIBS = @X11_LIBS@
 X265_CFLAGS = @X265_CFLAGS@
 X265_LIBS = @X265_LIBS@
+XCB_CFLAGS = @XCB_CFLAGS@
+XCB_LIBS = @XCB_LIBS@
 XCOMPOSITE_CFLAGS = @XCOMPOSITE_CFLAGS@
 XCOMPOSITE_LIBS = @XCOMPOSITE_LIBS@
 XGETTEXT = @XGETTEXT@
@@ -723,7 +738,6 @@
 docdir = @docdir@
 dvidir = @dvidir@
 exec_prefix = @exec_prefix@
-gsettingsschemadir = @gsettingsschemadir@
 host = @host@
 host_alias = @host_alias@
 host_cpu = @host_cpu@
diff --git a/ext/voamrwbenc/Makefile.in b/ext/voamrwbenc/Makefile.in
index 62c4b4e..9004117 100644
--- a/ext/voamrwbenc/Makefile.in
+++ b/ext/voamrwbenc/Makefile.in
@@ -117,16 +117,15 @@
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
 	$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
-	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gsettings.m4 \
-	$(top_srcdir)/m4/gst-fionread.m4 $(top_srcdir)/m4/gst-sdl.m4 \
-	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
-	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
-	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libgcrypt.m4 \
-	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
-	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
-	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
-	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
-	$(top_srcdir)/configure.ac
+	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gst-fionread.m4 \
+	$(top_srcdir)/m4/gst-sdl.m4 $(top_srcdir)/m4/iconv.m4 \
+	$(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \
+	$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
+	$(top_srcdir)/m4/libgcrypt.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
+	$(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \
@@ -277,6 +276,8 @@
 CLUTTER_X11_LIBS = @CLUTTER_X11_LIBS@
 CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
+CUDA_CFLAGS = @CUDA_CFLAGS@
+CUDA_LIBS = @CUDA_LIBS@
 CURL_CFLAGS = @CURL_CFLAGS@
 CURL_LIBS = @CURL_LIBS@
 CXX = @CXX@
@@ -314,6 +315,8 @@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
+EGL_CFLAGS = @EGL_CFLAGS@
+EGL_LIBS = @EGL_LIBS@
 EGREP = @EGREP@
 ERROR_CFLAGS = @ERROR_CFLAGS@
 ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
@@ -322,7 +325,6 @@
 EXIF_CFLAGS = @EXIF_CFLAGS@
 EXIF_LIBS = @EXIF_LIBS@
 FAAC_LIBS = @FAAC_LIBS@
-FAAD_IS_NEAAC = @FAAD_IS_NEAAC@
 FAAD_LIBS = @FAAD_LIBS@
 FFLAGS = @FFLAGS@
 FGREP = @FGREP@
@@ -341,8 +343,9 @@
 GIO_LIBS = @GIO_LIBS@
 GIO_UNIX_CFLAGS = @GIO_UNIX_CFLAGS@
 GIO_UNIX_LIBS = @GIO_UNIX_LIBS@
+GLES2_CFLAGS = @GLES2_CFLAGS@
+GLES2_LIBS = @GLES2_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
-GLIB_COMPILE_SCHEMAS = @GLIB_COMPILE_SCHEMAS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
@@ -359,16 +362,17 @@
 GMODULE_NO_EXPORT_LIBS = @GMODULE_NO_EXPORT_LIBS@
 GMSGFMT = @GMSGFMT@
 GMSGFMT_015 = @GMSGFMT_015@
+GNUSTL_CFLAGS = @GNUSTL_CFLAGS@
+GNUSTL_LIBS = @GNUSTL_LIBS@
 GRAPHENE_CFLAGS = @GRAPHENE_CFLAGS@
 GRAPHENE_LIBS = @GRAPHENE_LIBS@
 GREP = @GREP@
-GSETTINGS_CFLAGS = @GSETTINGS_CFLAGS@
-GSETTINGS_DISABLE_SCHEMAS_COMPILE = @GSETTINGS_DISABLE_SCHEMAS_COMPILE@
-GSETTINGS_LIBS = @GSETTINGS_LIBS@
 GSM_LIBS = @GSM_LIBS@
 GSTPB_PLUGINS_DIR = @GSTPB_PLUGINS_DIR@
 GSTPB_PREFIX = @GSTPB_PREFIX@
 GST_AGE = @GST_AGE@
+GST_ALLOCATORS_CFLAGS = @GST_ALLOCATORS_CFLAGS@
+GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
 GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
 GST_API_VERSION = @GST_API_VERSION@
 GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
@@ -394,6 +398,8 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PBUTILS_CFLAGS = @GST_PBUTILS_CFLAGS@
+GST_PBUTILS_LIBS = @GST_PBUTILS_LIBS@
 GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BAD_CFLAGS = @GST_PLUGINS_BAD_CFLAGS@
@@ -419,6 +425,8 @@
 GST_PREFIX = @GST_PREFIX@
 GST_REVISION = @GST_REVISION@
 GST_TOOLS_DIR = @GST_TOOLS_DIR@
+GST_VIDEO_CFLAGS = @GST_VIDEO_CFLAGS@
+GST_VIDEO_LIBS = @GST_VIDEO_LIBS@
 GTK3_CFLAGS = @GTK3_CFLAGS@
 GTK3_GL_CFLAGS = @GTK3_GL_CFLAGS@
 GTK3_GL_LIBS = @GTK3_GL_LIBS@
@@ -520,6 +528,7 @@
 LTLIBICONV = @LTLIBICONV@
 LTLIBINTL = @LTLIBINTL@
 LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
 MANIFEST_TOOL = @MANIFEST_TOOL@
@@ -533,8 +542,6 @@
 MODPLUG_LIBS = @MODPLUG_LIBS@
 MPEG2ENC_CFLAGS = @MPEG2ENC_CFLAGS@
 MPEG2ENC_LIBS = @MPEG2ENC_LIBS@
-MPG123_CFLAGS = @MPG123_CFLAGS@
-MPG123_LIBS = @MPG123_LIBS@
 MPLEX_CFLAGS = @MPLEX_CFLAGS@
 MPLEX_LDFLAGS = @MPLEX_LDFLAGS@
 MPLEX_LIBS = @MPLEX_LIBS@
@@ -550,6 +557,8 @@
 NETTLE_LIBS = @NETTLE_LIBS@
 NM = @NM@
 NMEDIT = @NMEDIT@
+NVENCODE_CFLAGS = @NVENCODE_CFLAGS@
+NVENCODE_LIBS = @NVENCODE_LIBS@
 OBJC = @OBJC@
 OBJCDEPMODE = @OBJCDEPMODE@
 OBJCFLAGS = @OBJCFLAGS@
@@ -607,16 +616,18 @@
 PYTHON_PLATFORM = @PYTHON_PLATFORM@
 PYTHON_PREFIX = @PYTHON_PREFIX@
 PYTHON_VERSION = @PYTHON_VERSION@
+QT_ANDROID_CFLAGS = @QT_ANDROID_CFLAGS@
+QT_ANDROID_LIBS = @QT_ANDROID_LIBS@
 QT_CFLAGS = @QT_CFLAGS@
 QT_LIBS = @QT_LIBS@
+QT_MAC_CFLAGS = @QT_MAC_CFLAGS@
+QT_MAC_LIBS = @QT_MAC_LIBS@
 QT_WAYLAND_CFLAGS = @QT_WAYLAND_CFLAGS@
 QT_WAYLAND_LIBS = @QT_WAYLAND_LIBS@
 QT_X11_CFLAGS = @QT_X11_CFLAGS@
 QT_X11_LIBS = @QT_X11_LIBS@
 RANLIB = @RANLIB@
 RCC = @RCC@
-RSVG_2_36_2_CFLAGS = @RSVG_2_36_2_CFLAGS@
-RSVG_2_36_2_LIBS = @RSVG_2_36_2_LIBS@
 RSVG_CFLAGS = @RSVG_CFLAGS@
 RSVG_LIBS = @RSVG_LIBS@
 RTMP_CFLAGS = @RTMP_CFLAGS@
@@ -668,6 +679,7 @@
 VOAACENC_LIBS = @VOAACENC_LIBS@
 VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
 VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VULKAN_LIBS = @VULKAN_LIBS@
 WARNING_CFLAGS = @WARNING_CFLAGS@
 WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
 WARNING_OBJCFLAGS = @WARNING_OBJCFLAGS@
@@ -678,6 +690,7 @@
 WAYLAND_LIBS = @WAYLAND_LIBS@
 WEBP_CFLAGS = @WEBP_CFLAGS@
 WEBP_LIBS = @WEBP_LIBS@
+WGET = @WGET@
 WILDMIDI_CFLAGS = @WILDMIDI_CFLAGS@
 WILDMIDI_LIBS = @WILDMIDI_LIBS@
 WINKS_LIBS = @WINKS_LIBS@
@@ -687,6 +700,8 @@
 X11_LIBS = @X11_LIBS@
 X265_CFLAGS = @X265_CFLAGS@
 X265_LIBS = @X265_LIBS@
+XCB_CFLAGS = @XCB_CFLAGS@
+XCB_LIBS = @XCB_LIBS@
 XCOMPOSITE_CFLAGS = @XCOMPOSITE_CFLAGS@
 XCOMPOSITE_LIBS = @XCOMPOSITE_LIBS@
 XGETTEXT = @XGETTEXT@
@@ -724,7 +739,6 @@
 docdir = @docdir@
 dvidir = @dvidir@
 exec_prefix = @exec_prefix@
-gsettingsschemadir = @gsettingsschemadir@
 host = @host@
 host_alias = @host_alias@
 host_cpu = @host_cpu@
diff --git a/ext/vulkan/Makefile.am b/ext/vulkan/Makefile.am
new file mode 100644
index 0000000..8c57e34
--- /dev/null
+++ b/ext/vulkan/Makefile.am
@@ -0,0 +1,65 @@
+plugin_LTLIBRARIES = libgstvulkan.la
+
+SUBDIRS =
+DIST_SUBDIRS = xcb
+DISTCLEANFILES = vkconfig.h
+
+libgstvulkan_la_SOURCES = \
+	gstvulkan.c \
+	vkdevice.c \
+	vkdisplay.c \
+	vkerror.c \
+	vkbuffermemory.c \
+	vkimagememory.c \
+	vkbufferpool.c \
+	vkinstance.c \
+	vkmemory.c \
+	vkqueue.c \
+	vksink.c \
+	vkswapper.c \
+	vkupload.c \
+	vkutils.c \
+	vkwindow.c
+
+noinst_HEADERS = \
+	vk.h \
+	vk_fwd.h \
+	vkdevice.h \
+	vkdisplay.h \
+	vkerror.h \
+	vkbuffermemory.h \
+	vkimagememory.h \
+	vkbufferpool.h \
+	vkinstance.h \
+	vkmemory.h \
+	vkqueue.h \
+	vksink.h \
+	vkswapper.h \
+	vkupload.h \
+	vkutils.h \
+	vkutils_private.h \
+	vkwindow.h
+
+libgstvulkan_la_CFLAGS = \
+	-I$(top_srcdir)/gst-libs \
+	-I$(top_builddir)/gst-libs \
+	$(GST_CFLAGS) \
+	$(GST_BASE_CFLAGS) \
+	$(GST_PLUGINS_BASE_CFLAGS) \
+	$(VULKAN_CFLAGS)
+
+libgstvulkan_la_LIBADD = \
+	$(GST_BASE_LIBS) \
+	$(GST_PLUGINS_BASE_LIBS) \
+	-lgstvideo-$(GST_API_VERSION) \
+	$(VULKAN_LIBS)
+
+if USE_XCB
+SUBDIRS += xcb
+libgstvulkan_la_LIBADD += xcb/libgstvulkan-xcb.la
+endif
+
+libgstvulkan_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS)
+libgstvulkan_la_LIBTOOLFLAGS = $(GST_PLUGIN_LIBTOOLFLAGS)
+
+
diff --git a/ext/vulkan/Makefile.in b/ext/vulkan/Makefile.in
new file mode 100644
index 0000000..8dfd1da
--- /dev/null
+++ b/ext/vulkan/Makefile.in
@@ -0,0 +1,1397 @@
+# Makefile.in generated by automake 1.15 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2014 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+
+VPATH = @srcdir@
+am__is_gnu_make = { \
+  if test -z '$(MAKELEVEL)'; then \
+    false; \
+  elif test -n '$(MAKE_HOST)'; then \
+    true; \
+  elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+    true; \
+  else \
+    false; \
+  fi; \
+}
+am__make_running_with_option = \
+  case $${target_option-} in \
+      ?) ;; \
+      *) echo "am__make_running_with_option: internal error: invalid" \
+              "target option '$${target_option-}' specified" >&2; \
+         exit 1;; \
+  esac; \
+  has_opt=no; \
+  sane_makeflags=$$MAKEFLAGS; \
+  if $(am__is_gnu_make); then \
+    sane_makeflags=$$MFLAGS; \
+  else \
+    case $$MAKEFLAGS in \
+      *\\[\ \	]*) \
+        bs=\\; \
+        sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+          | sed "s/$$bs$$bs[$$bs $$bs	]*//g"`;; \
+    esac; \
+  fi; \
+  skip_next=no; \
+  strip_trailopt () \
+  { \
+    flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+  }; \
+  for flg in $$sane_makeflags; do \
+    test $$skip_next = yes && { skip_next=no; continue; }; \
+    case $$flg in \
+      *=*|--*) continue;; \
+        -*I) strip_trailopt 'I'; skip_next=yes;; \
+      -*I?*) strip_trailopt 'I';; \
+        -*O) strip_trailopt 'O'; skip_next=yes;; \
+      -*O?*) strip_trailopt 'O';; \
+        -*l) strip_trailopt 'l'; skip_next=yes;; \
+      -*l?*) strip_trailopt 'l';; \
+      -[dEDm]) skip_next=yes;; \
+      -[JT]) skip_next=yes;; \
+    esac; \
+    case $$flg in \
+      *$$target_option*) has_opt=yes; break;; \
+    esac; \
+  done; \
+  test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+target_triplet = @target@
+@USE_XCB_TRUE@am__append_1 = xcb
+@USE_XCB_TRUE@am__append_2 = xcb/libgstvulkan-xcb.la
+subdir = ext/vulkan
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/common/m4/as-ac-expand.m4 \
+	$(top_srcdir)/common/m4/as-auto-alt.m4 \
+	$(top_srcdir)/common/m4/as-compiler-flag.m4 \
+	$(top_srcdir)/common/m4/as-libtool.m4 \
+	$(top_srcdir)/common/m4/as-version.m4 \
+	$(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
+	$(top_srcdir)/common/m4/ax_pthread.m4 \
+	$(top_srcdir)/common/m4/gst-arch.m4 \
+	$(top_srcdir)/common/m4/gst-args.m4 \
+	$(top_srcdir)/common/m4/gst-check.m4 \
+	$(top_srcdir)/common/m4/gst-default.m4 \
+	$(top_srcdir)/common/m4/gst-dowhile.m4 \
+	$(top_srcdir)/common/m4/gst-error.m4 \
+	$(top_srcdir)/common/m4/gst-feature.m4 \
+	$(top_srcdir)/common/m4/gst-gettext.m4 \
+	$(top_srcdir)/common/m4/gst-glib2.m4 \
+	$(top_srcdir)/common/m4/gst-package-release-datetime.m4 \
+	$(top_srcdir)/common/m4/gst-platform.m4 \
+	$(top_srcdir)/common/m4/gst-plugin-docs.m4 \
+	$(top_srcdir)/common/m4/gst-plugindir.m4 \
+	$(top_srcdir)/common/m4/gst.m4 \
+	$(top_srcdir)/common/m4/gtk-doc.m4 \
+	$(top_srcdir)/common/m4/introspection.m4 \
+	$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
+	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gst-fionread.m4 \
+	$(top_srcdir)/m4/gst-sdl.m4 $(top_srcdir)/m4/iconv.m4 \
+	$(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \
+	$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
+	$(top_srcdir)/m4/libgcrypt.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
+	$(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \
+	$(am__DIST_COMMON)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+    $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+    *) f=$$p;; \
+  esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+  srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+  for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+  for p in $$list; do echo "$$p $$p"; done | \
+  sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+  $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+    if (++n[$$2] == $(am__install_max)) \
+      { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+    END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+  sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+  sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__uninstall_files_from_dir = { \
+  test -z "$$files" \
+    || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
+    || { echo " ( cd '$$dir' && rm -f" $$files ")"; \
+         $(am__cd) "$$dir" && rm -f $$files; }; \
+  }
+am__installdirs = "$(DESTDIR)$(plugindir)"
+LTLIBRARIES = $(plugin_LTLIBRARIES)
+am__DEPENDENCIES_1 =
+libgstvulkan_la_DEPENDENCIES = $(am__DEPENDENCIES_1) \
+	$(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) $(am__append_2)
+am_libgstvulkan_la_OBJECTS = libgstvulkan_la-gstvulkan.lo \
+	libgstvulkan_la-vkdevice.lo libgstvulkan_la-vkdisplay.lo \
+	libgstvulkan_la-vkerror.lo libgstvulkan_la-vkbuffermemory.lo \
+	libgstvulkan_la-vkimagememory.lo \
+	libgstvulkan_la-vkbufferpool.lo libgstvulkan_la-vkinstance.lo \
+	libgstvulkan_la-vkmemory.lo libgstvulkan_la-vkqueue.lo \
+	libgstvulkan_la-vksink.lo libgstvulkan_la-vkswapper.lo \
+	libgstvulkan_la-vkupload.lo libgstvulkan_la-vkutils.lo \
+	libgstvulkan_la-vkwindow.lo
+libgstvulkan_la_OBJECTS = $(am_libgstvulkan_la_OBJECTS)
+AM_V_lt = $(am__v_lt_@AM_V@)
+am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
+am__v_lt_0 = --silent
+am__v_lt_1 = 
+libgstvulkan_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
+	$(libgstvulkan_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link \
+	$(CCLD) $(libgstvulkan_la_CFLAGS) $(CFLAGS) \
+	$(libgstvulkan_la_LDFLAGS) $(LDFLAGS) -o $@
+AM_V_P = $(am__v_P_@AM_V@)
+am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_@AM_V@)
+am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
+am__v_GEN_0 = @echo "  GEN     " $@;
+am__v_GEN_1 = 
+AM_V_at = $(am__v_at_@AM_V@)
+am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 = 
+DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
+depcomp = $(SHELL) $(top_srcdir)/depcomp
+am__depfiles_maybe = depfiles
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
+	$(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+	$(AM_CFLAGS) $(CFLAGS)
+AM_V_CC = $(am__v_CC_@AM_V@)
+am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@)
+am__v_CC_0 = @echo "  CC      " $@;
+am__v_CC_1 = 
+CCLD = $(CC)
+LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+	$(AM_LDFLAGS) $(LDFLAGS) -o $@
+AM_V_CCLD = $(am__v_CCLD_@AM_V@)
+am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@)
+am__v_CCLD_0 = @echo "  CCLD    " $@;
+am__v_CCLD_1 = 
+SOURCES = $(libgstvulkan_la_SOURCES)
+DIST_SOURCES = $(libgstvulkan_la_SOURCES)
+RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \
+	ctags-recursive dvi-recursive html-recursive info-recursive \
+	install-data-recursive install-dvi-recursive \
+	install-exec-recursive install-html-recursive \
+	install-info-recursive install-pdf-recursive \
+	install-ps-recursive install-recursive installcheck-recursive \
+	installdirs-recursive pdf-recursive ps-recursive \
+	tags-recursive uninstall-recursive
+am__can_run_installinfo = \
+  case $$AM_UPDATE_INFO_DIR in \
+    n|no|NO) false;; \
+    *) (install-info --version) >/dev/null 2>&1;; \
+  esac
+HEADERS = $(noinst_HEADERS)
+RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive	\
+  distclean-recursive maintainer-clean-recursive
+am__recursive_targets = \
+  $(RECURSIVE_TARGETS) \
+  $(RECURSIVE_CLEAN_TARGETS) \
+  $(am__extra_recursive_targets)
+AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \
+	distdir
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+# Read a list of newline-separated strings from the standard input,
+# and print each of them once, without duplicates.  Input order is
+# *not* preserved.
+am__uniquify_input = $(AWK) '\
+  BEGIN { nonempty = 0; } \
+  { items[$$0] = 1; nonempty = 1; } \
+  END { if (nonempty) { for (i in items) print i; }; } \
+'
+# Make sure the list of sources is unique.  This is necessary because,
+# e.g., the same source file might be shared among _SOURCES variables
+# for different programs/libraries.
+am__define_uniq_tagged_files = \
+  list='$(am__tagged_files)'; \
+  unique=`for i in $$list; do \
+    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+  done | $(am__uniquify_input)`
+ETAGS = etags
+CTAGS = ctags
+am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+am__relativize = \
+  dir0=`pwd`; \
+  sed_first='s,^\([^/]*\)/.*$$,\1,'; \
+  sed_rest='s,^[^/]*/*,,'; \
+  sed_last='s,^.*/\([^/]*\)$$,\1,'; \
+  sed_butlast='s,/*[^/]*$$,,'; \
+  while test -n "$$dir1"; do \
+    first=`echo "$$dir1" | sed -e "$$sed_first"`; \
+    if test "$$first" != "."; then \
+      if test "$$first" = ".."; then \
+        dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \
+        dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \
+      else \
+        first2=`echo "$$dir2" | sed -e "$$sed_first"`; \
+        if test "$$first2" = "$$first"; then \
+          dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \
+        else \
+          dir2="../$$dir2"; \
+        fi; \
+        dir0="$$dir0"/"$$first"; \
+      fi; \
+    fi; \
+    dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \
+  done; \
+  reldir="$$dir2"
+ACLOCAL = @ACLOCAL@
+ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@
+ACMENC_CFLAGS = @ACMENC_CFLAGS@
+ACMMP3DEC_CFLAGS = @ACMMP3DEC_CFLAGS@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+APEXSINK_CFLAGS = @APEXSINK_CFLAGS@
+APEXSINK_LIBS = @APEXSINK_LIBS@
+AR = @AR@
+AS = @AS@
+ASSRENDER_CFLAGS = @ASSRENDER_CFLAGS@
+ASSRENDER_LIBS = @ASSRENDER_LIBS@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+BLUEZ5_CFLAGS = @BLUEZ5_CFLAGS@
+BLUEZ5_LIBS = @BLUEZ5_LIBS@
+BS2B_CFLAGS = @BS2B_CFLAGS@
+BS2B_LIBS = @BS2B_LIBS@
+BZ2_LIBS = @BZ2_LIBS@
+CC = @CC@
+CCASFLAGS = @CCASFLAGS@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CHROMAPRINT_CFLAGS = @CHROMAPRINT_CFLAGS@
+CHROMAPRINT_LIBS = @CHROMAPRINT_LIBS@
+CLUTTER_CFLAGS = @CLUTTER_CFLAGS@
+CLUTTER_GLX_CFLAGS = @CLUTTER_GLX_CFLAGS@
+CLUTTER_GLX_LIBS = @CLUTTER_GLX_LIBS@
+CLUTTER_LIBS = @CLUTTER_LIBS@
+CLUTTER_X11_CFLAGS = @CLUTTER_X11_CFLAGS@
+CLUTTER_X11_LIBS = @CLUTTER_X11_LIBS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CUDA_CFLAGS = @CUDA_CFLAGS@
+CUDA_LIBS = @CUDA_LIBS@
+CURL_CFLAGS = @CURL_CFLAGS@
+CURL_LIBS = @CURL_LIBS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DAALA_CFLAGS = @DAALA_CFLAGS@
+DAALA_LIBS = @DAALA_LIBS@
+DCCP_LIBS = @DCCP_LIBS@
+DECKLINK_CXXFLAGS = @DECKLINK_CXXFLAGS@
+DECKLINK_LIBS = @DECKLINK_LIBS@
+DEFAULT_AUDIOSINK = @DEFAULT_AUDIOSINK@
+DEFAULT_AUDIOSRC = @DEFAULT_AUDIOSRC@
+DEFAULT_VIDEOSINK = @DEFAULT_VIDEOSINK@
+DEFAULT_VIDEOSRC = @DEFAULT_VIDEOSRC@
+DEFAULT_VISUALIZER = @DEFAULT_VISUALIZER@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DEPRECATED_CFLAGS = @DEPRECATED_CFLAGS@
+DIRECT3D_LIBS = @DIRECT3D_LIBS@
+DIRECTFB_CFLAGS = @DIRECTFB_CFLAGS@
+DIRECTFB_LIBS = @DIRECTFB_LIBS@
+DIRECTSOUND_LIBS = @DIRECTSOUND_LIBS@
+DIRECTX_CFLAGS = @DIRECTX_CFLAGS@
+DIRECTX_LDFLAGS = @DIRECTX_LDFLAGS@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DTLS_CFLAGS = @DTLS_CFLAGS@
+DTLS_LIBS = @DTLS_LIBS@
+DTS_LIBS = @DTS_LIBS@
+DUMPBIN = @DUMPBIN@
+DVDNAV_CFLAGS = @DVDNAV_CFLAGS@
+DVDNAV_LIBS = @DVDNAV_LIBS@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGL_CFLAGS = @EGL_CFLAGS@
+EGL_LIBS = @EGL_LIBS@
+EGREP = @EGREP@
+ERROR_CFLAGS = @ERROR_CFLAGS@
+ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
+ERROR_OBJCFLAGS = @ERROR_OBJCFLAGS@
+EXEEXT = @EXEEXT@
+EXIF_CFLAGS = @EXIF_CFLAGS@
+EXIF_LIBS = @EXIF_LIBS@
+FAAC_LIBS = @FAAC_LIBS@
+FAAD_LIBS = @FAAD_LIBS@
+FFLAGS = @FFLAGS@
+FGREP = @FGREP@
+FLITE_CFLAGS = @FLITE_CFLAGS@
+FLITE_LIBS = @FLITE_LIBS@
+FLUIDSYNTH_CFLAGS = @FLUIDSYNTH_CFLAGS@
+FLUIDSYNTH_LIBS = @FLUIDSYNTH_LIBS@
+GCOV = @GCOV@
+GCOV_CFLAGS = @GCOV_CFLAGS@
+GCOV_LIBS = @GCOV_LIBS@
+GDBUS_CODEGEN = @GDBUS_CODEGEN@
+GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
+GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
+GIO_CFLAGS = @GIO_CFLAGS@
+GIO_LDFLAGS = @GIO_LDFLAGS@
+GIO_LIBS = @GIO_LIBS@
+GIO_UNIX_CFLAGS = @GIO_UNIX_CFLAGS@
+GIO_UNIX_LIBS = @GIO_UNIX_LIBS@
+GLES2_CFLAGS = @GLES2_CFLAGS@
+GLES2_LIBS = @GLES2_LIBS@
+GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
+GLIB_LIBS = @GLIB_LIBS@
+GLIB_MKENUMS = @GLIB_MKENUMS@
+GLIB_PREFIX = @GLIB_PREFIX@
+GLIB_REQ = @GLIB_REQ@
+GL_CFLAGS = @GL_CFLAGS@
+GL_LIBS = @GL_LIBS@
+GL_OBJCFLAGS = @GL_OBJCFLAGS@
+GME_LIBS = @GME_LIBS@
+GMODULE_EXPORT_CFLAGS = @GMODULE_EXPORT_CFLAGS@
+GMODULE_EXPORT_LIBS = @GMODULE_EXPORT_LIBS@
+GMODULE_NO_EXPORT_CFLAGS = @GMODULE_NO_EXPORT_CFLAGS@
+GMODULE_NO_EXPORT_LIBS = @GMODULE_NO_EXPORT_LIBS@
+GMSGFMT = @GMSGFMT@
+GMSGFMT_015 = @GMSGFMT_015@
+GNUSTL_CFLAGS = @GNUSTL_CFLAGS@
+GNUSTL_LIBS = @GNUSTL_LIBS@
+GRAPHENE_CFLAGS = @GRAPHENE_CFLAGS@
+GRAPHENE_LIBS = @GRAPHENE_LIBS@
+GREP = @GREP@
+GSM_LIBS = @GSM_LIBS@
+GSTPB_PLUGINS_DIR = @GSTPB_PLUGINS_DIR@
+GSTPB_PREFIX = @GSTPB_PREFIX@
+GST_AGE = @GST_AGE@
+GST_ALLOCATORS_CFLAGS = @GST_ALLOCATORS_CFLAGS@
+GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
+GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
+GST_API_VERSION = @GST_API_VERSION@
+GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
+GST_BASE_LIBS = @GST_BASE_LIBS@
+GST_CFLAGS = @GST_CFLAGS@
+GST_CHECK_CFLAGS = @GST_CHECK_CFLAGS@
+GST_CHECK_LIBS = @GST_CHECK_LIBS@
+GST_CONTROLLER_CFLAGS = @GST_CONTROLLER_CFLAGS@
+GST_CONTROLLER_LIBS = @GST_CONTROLLER_LIBS@
+GST_CURRENT = @GST_CURRENT@
+GST_CXXFLAGS = @GST_CXXFLAGS@
+GST_LEVEL_DEFAULT = @GST_LEVEL_DEFAULT@
+GST_LIBS = @GST_LIBS@
+GST_LIBVERSION = @GST_LIBVERSION@
+GST_LIB_LDFLAGS = @GST_LIB_LDFLAGS@
+GST_LICENSE = @GST_LICENSE@
+GST_LT_LDFLAGS = @GST_LT_LDFLAGS@
+GST_NET_CFLAGS = @GST_NET_CFLAGS@
+GST_NET_LIBS = @GST_NET_LIBS@
+GST_OBJCFLAGS = @GST_OBJCFLAGS@
+GST_OPTION_CFLAGS = @GST_OPTION_CFLAGS@
+GST_OPTION_CXXFLAGS = @GST_OPTION_CXXFLAGS@
+GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
+GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
+GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PBUTILS_CFLAGS = @GST_PBUTILS_CFLAGS@
+GST_PBUTILS_LIBS = @GST_PBUTILS_LIBS@
+GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
+GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
+GST_PLUGINS_BAD_CFLAGS = @GST_PLUGINS_BAD_CFLAGS@
+GST_PLUGINS_BAD_CXXFLAGS = @GST_PLUGINS_BAD_CXXFLAGS@
+GST_PLUGINS_BAD_OBJCFLAGS = @GST_PLUGINS_BAD_OBJCFLAGS@
+GST_PLUGINS_BASE_CFLAGS = @GST_PLUGINS_BASE_CFLAGS@
+GST_PLUGINS_BASE_DIR = @GST_PLUGINS_BASE_DIR@
+GST_PLUGINS_BASE_LIBS = @GST_PLUGINS_BASE_LIBS@
+GST_PLUGINS_DIR = @GST_PLUGINS_DIR@
+GST_PLUGINS_GOOD_CFLAGS = @GST_PLUGINS_GOOD_CFLAGS@
+GST_PLUGINS_GOOD_DIR = @GST_PLUGINS_GOOD_DIR@
+GST_PLUGINS_GOOD_LIBS = @GST_PLUGINS_GOOD_LIBS@
+GST_PLUGINS_LIBAV_CFLAGS = @GST_PLUGINS_LIBAV_CFLAGS@
+GST_PLUGINS_LIBAV_DIR = @GST_PLUGINS_LIBAV_DIR@
+GST_PLUGINS_LIBAV_LIBS = @GST_PLUGINS_LIBAV_LIBS@
+GST_PLUGINS_NONPORTED = @GST_PLUGINS_NONPORTED@
+GST_PLUGINS_SELECTED = @GST_PLUGINS_SELECTED@
+GST_PLUGINS_UGLY_CFLAGS = @GST_PLUGINS_UGLY_CFLAGS@
+GST_PLUGINS_UGLY_DIR = @GST_PLUGINS_UGLY_DIR@
+GST_PLUGINS_UGLY_LIBS = @GST_PLUGINS_UGLY_LIBS@
+GST_PLUGIN_LDFLAGS = @GST_PLUGIN_LDFLAGS@
+GST_PLUGIN_LIBTOOLFLAGS = @GST_PLUGIN_LIBTOOLFLAGS@
+GST_PREFIX = @GST_PREFIX@
+GST_REVISION = @GST_REVISION@
+GST_TOOLS_DIR = @GST_TOOLS_DIR@
+GST_VIDEO_CFLAGS = @GST_VIDEO_CFLAGS@
+GST_VIDEO_LIBS = @GST_VIDEO_LIBS@
+GTK3_CFLAGS = @GTK3_CFLAGS@
+GTK3_GL_CFLAGS = @GTK3_GL_CFLAGS@
+GTK3_GL_LIBS = @GTK3_GL_LIBS@
+GTK3_LIBS = @GTK3_LIBS@
+GTK3_WAYLAND_CFLAGS = @GTK3_WAYLAND_CFLAGS@
+GTK3_WAYLAND_LIBS = @GTK3_WAYLAND_LIBS@
+GTK3_X11_CFLAGS = @GTK3_X11_CFLAGS@
+GTK3_X11_LIBS = @GTK3_X11_LIBS@
+GTKDOC_CHECK = @GTKDOC_CHECK@
+GTKDOC_DEPS_CFLAGS = @GTKDOC_DEPS_CFLAGS@
+GTKDOC_DEPS_LIBS = @GTKDOC_DEPS_LIBS@
+GTKDOC_MKPDF = @GTKDOC_MKPDF@
+GTKDOC_REBASE = @GTKDOC_REBASE@
+GTK_BASE_DIR = @GTK_BASE_DIR@
+GTK_CFLAGS = @GTK_CFLAGS@
+GTK_LIBS = @GTK_LIBS@
+GTK_VERSION = @GTK_VERSION@
+G_UDEV_CFLAGS = @G_UDEV_CFLAGS@
+G_UDEV_LIBS = @G_UDEV_LIBS@
+HAVE_CLUTTER = @HAVE_CLUTTER@
+HAVE_CLUTTER_GLX = @HAVE_CLUTTER_GLX@
+HAVE_CLUTTER_X11 = @HAVE_CLUTTER_X11@
+HAVE_CXX = @HAVE_CXX@
+HAVE_DIRECT3D = @HAVE_DIRECT3D@
+HAVE_DIRECTSOUND = @HAVE_DIRECTSOUND@
+HAVE_DTS = @HAVE_DTS@
+HAVE_EGL = @HAVE_EGL@
+HAVE_FAAC = @HAVE_FAAC@
+HAVE_FAAD = @HAVE_FAAD@
+HAVE_FLITE = @HAVE_FLITE@
+HAVE_GL = @HAVE_GL@
+HAVE_GLES2 = @HAVE_GLES2@
+HAVE_GRAPHENE = @HAVE_GRAPHENE@
+HAVE_GSM = @HAVE_GSM@
+HAVE_GTK3 = @HAVE_GTK3@
+HAVE_JPEG = @HAVE_JPEG@
+HAVE_NAS = @HAVE_NAS@
+HAVE_OPENJPEG = @HAVE_OPENJPEG@
+HAVE_PNG = @HAVE_PNG@
+HAVE_SRTP = @HAVE_SRTP@
+HAVE_WASAPI = @HAVE_WASAPI@
+HAVE_WILDMIDI = @HAVE_WILDMIDI@
+HAVE_WINKS = @HAVE_WINKS@
+HAVE_WINSCREENCAP = @HAVE_WINSCREENCAP@
+HAVE_X11 = @HAVE_X11@
+HTML_DIR = @HTML_DIR@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTLLIBS = @INTLLIBS@
+INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
+INTROSPECTION_CFLAGS = @INTROSPECTION_CFLAGS@
+INTROSPECTION_COMPILER = @INTROSPECTION_COMPILER@
+INTROSPECTION_GENERATE = @INTROSPECTION_GENERATE@
+INTROSPECTION_GIRDIR = @INTROSPECTION_GIRDIR@
+INTROSPECTION_INIT = @INTROSPECTION_INIT@
+INTROSPECTION_LIBS = @INTROSPECTION_LIBS@
+INTROSPECTION_MAKEFILE = @INTROSPECTION_MAKEFILE@
+INTROSPECTION_SCANNER = @INTROSPECTION_SCANNER@
+INTROSPECTION_TYPELIBDIR = @INTROSPECTION_TYPELIBDIR@
+JPEG_LIBS = @JPEG_LIBS@
+KATE_CFLAGS = @KATE_CFLAGS@
+KATE_LIBS = @KATE_LIBS@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBDC1394_CFLAGS = @LIBDC1394_CFLAGS@
+LIBDC1394_LIBS = @LIBDC1394_LIBS@
+LIBDE265_CFLAGS = @LIBDE265_CFLAGS@
+LIBDE265_LIBS = @LIBDE265_LIBS@
+LIBDIR = @LIBDIR@
+LIBGCRYPT_CFLAGS = @LIBGCRYPT_CFLAGS@
+LIBGCRYPT_CONFIG = @LIBGCRYPT_CONFIG@
+LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@
+LIBICONV = @LIBICONV@
+LIBINTL = @LIBINTL@
+LIBM = @LIBM@
+LIBMMS_CFLAGS = @LIBMMS_CFLAGS@
+LIBMMS_LIBS = @LIBMMS_LIBS@
+LIBOBJS = @LIBOBJS@
+LIBPNG_CFLAGS = @LIBPNG_CFLAGS@
+LIBPNG_LIBS = @LIBPNG_LIBS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIBUDEV_CFLAGS = @LIBUDEV_CFLAGS@
+LIBUDEV_LIBS = @LIBUDEV_LIBS@
+LIBUSB_CFLAGS = @LIBUSB_CFLAGS@
+LIBUSB_LIBS = @LIBUSB_LIBS@
+LIBVISUAL_CFLAGS = @LIBVISUAL_CFLAGS@
+LIBVISUAL_LIBS = @LIBVISUAL_LIBS@
+LIBXML2_CFLAGS = @LIBXML2_CFLAGS@
+LIBXML2_LIBS = @LIBXML2_LIBS@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LOCALEDIR = @LOCALEDIR@
+LRDF_CFLAGS = @LRDF_CFLAGS@
+LRDF_LIBS = @LRDF_LIBS@
+LTLIBICONV = @LTLIBICONV@
+LTLIBINTL = @LTLIBINTL@
+LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MIMIC_CFLAGS = @MIMIC_CFLAGS@
+MIMIC_LIBS = @MIMIC_LIBS@
+MJPEG_CFLAGS = @MJPEG_CFLAGS@
+MJPEG_LIBS = @MJPEG_LIBS@
+MKDIR_P = @MKDIR_P@
+MOC = @MOC@
+MODPLUG_CFLAGS = @MODPLUG_CFLAGS@
+MODPLUG_LIBS = @MODPLUG_LIBS@
+MPEG2ENC_CFLAGS = @MPEG2ENC_CFLAGS@
+MPEG2ENC_LIBS = @MPEG2ENC_LIBS@
+MPLEX_CFLAGS = @MPLEX_CFLAGS@
+MPLEX_LDFLAGS = @MPLEX_LDFLAGS@
+MPLEX_LIBS = @MPLEX_LIBS@
+MSGFMT = @MSGFMT@
+MSGFMT_015 = @MSGFMT_015@
+MSGMERGE = @MSGMERGE@
+MUSEPACK_LIBS = @MUSEPACK_LIBS@
+NAS_CFLAGS = @NAS_CFLAGS@
+NAS_LIBS = @NAS_LIBS@
+NEON_CFLAGS = @NEON_CFLAGS@
+NEON_LIBS = @NEON_LIBS@
+NETTLE_CFLAGS = @NETTLE_CFLAGS@
+NETTLE_LIBS = @NETTLE_LIBS@
+NM = @NM@
+NMEDIT = @NMEDIT@
+NVENCODE_CFLAGS = @NVENCODE_CFLAGS@
+NVENCODE_LIBS = @NVENCODE_LIBS@
+OBJC = @OBJC@
+OBJCDEPMODE = @OBJCDEPMODE@
+OBJCFLAGS = @OBJCFLAGS@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OFA_CFLAGS = @OFA_CFLAGS@
+OFA_LIBS = @OFA_LIBS@
+OPENAL_CFLAGS = @OPENAL_CFLAGS@
+OPENAL_LIBS = @OPENAL_LIBS@
+OPENCV_CFLAGS = @OPENCV_CFLAGS@
+OPENCV_LIBS = @OPENCV_LIBS@
+OPENCV_PREFIX = @OPENCV_PREFIX@
+OPENEXR_CFLAGS = @OPENEXR_CFLAGS@
+OPENEXR_LIBS = @OPENEXR_LIBS@
+OPENH264_CFLAGS = @OPENH264_CFLAGS@
+OPENH264_LIBS = @OPENH264_LIBS@
+OPENJPEG_CFLAGS = @OPENJPEG_CFLAGS@
+OPENJPEG_LIBS = @OPENJPEG_LIBS@
+OPENNI2_CFLAGS = @OPENNI2_CFLAGS@
+OPENNI2_LIBS = @OPENNI2_LIBS@
+OPENSSL_CFLAGS = @OPENSSL_CFLAGS@
+OPENSSL_LIBS = @OPENSSL_LIBS@
+OPUS_CFLAGS = @OPUS_CFLAGS@
+OPUS_LIBS = @OPUS_LIBS@
+ORCC = @ORCC@
+ORCC_FLAGS = @ORCC_FLAGS@
+ORC_CFLAGS = @ORC_CFLAGS@
+ORC_LIBS = @ORC_LIBS@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PACKAGE_VERSION_MAJOR = @PACKAGE_VERSION_MAJOR@
+PACKAGE_VERSION_MICRO = @PACKAGE_VERSION_MICRO@
+PACKAGE_VERSION_MINOR = @PACKAGE_VERSION_MINOR@
+PACKAGE_VERSION_NANO = @PACKAGE_VERSION_NANO@
+PACKAGE_VERSION_RELEASE = @PACKAGE_VERSION_RELEASE@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PKG_CONFIG = @PKG_CONFIG@
+PLUGINDIR = @PLUGINDIR@
+POSUB = @POSUB@
+PROFILE_CFLAGS = @PROFILE_CFLAGS@
+PTHREAD_CC = @PTHREAD_CC@
+PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
+PTHREAD_LIBS = @PTHREAD_LIBS@
+PVR_CFLAGS = @PVR_CFLAGS@
+PVR_LIBS = @PVR_LIBS@
+PYTHON = @PYTHON@
+PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
+PYTHON_PLATFORM = @PYTHON_PLATFORM@
+PYTHON_PREFIX = @PYTHON_PREFIX@
+PYTHON_VERSION = @PYTHON_VERSION@
+QT_ANDROID_CFLAGS = @QT_ANDROID_CFLAGS@
+QT_ANDROID_LIBS = @QT_ANDROID_LIBS@
+QT_CFLAGS = @QT_CFLAGS@
+QT_LIBS = @QT_LIBS@
+QT_MAC_CFLAGS = @QT_MAC_CFLAGS@
+QT_MAC_LIBS = @QT_MAC_LIBS@
+QT_WAYLAND_CFLAGS = @QT_WAYLAND_CFLAGS@
+QT_WAYLAND_LIBS = @QT_WAYLAND_LIBS@
+QT_X11_CFLAGS = @QT_X11_CFLAGS@
+QT_X11_LIBS = @QT_X11_LIBS@
+RANLIB = @RANLIB@
+RCC = @RCC@
+RSVG_CFLAGS = @RSVG_CFLAGS@
+RSVG_LIBS = @RSVG_LIBS@
+RTMP_CFLAGS = @RTMP_CFLAGS@
+RTMP_LIBS = @RTMP_LIBS@
+SBC_CFLAGS = @SBC_CFLAGS@
+SBC_LIBS = @SBC_LIBS@
+SCHRO_CFLAGS = @SCHRO_CFLAGS@
+SCHRO_LIBS = @SCHRO_LIBS@
+SDL_CFLAGS = @SDL_CFLAGS@
+SDL_CLUTTER = @SDL_CLUTTER@
+SDL_CONFIG = @SDL_CONFIG@
+SDL_LIBS = @SDL_LIBS@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SHM_LIBS = @SHM_LIBS@
+SLV2_CFLAGS = @SLV2_CFLAGS@
+SLV2_LIBS = @SLV2_LIBS@
+SNDFILE_CFLAGS = @SNDFILE_CFLAGS@
+SNDFILE_LIBS = @SNDFILE_LIBS@
+SNDIO_LIBS = @SNDIO_LIBS@
+SOUNDTOUCH_CFLAGS = @SOUNDTOUCH_CFLAGS@
+SOUNDTOUCH_LIBS = @SOUNDTOUCH_LIBS@
+SPANDSP_CFLAGS = @SPANDSP_CFLAGS@
+SPANDSP_LIBS = @SPANDSP_LIBS@
+SPC_LIBS = @SPC_LIBS@
+SRTP_CFLAGS = @SRTP_CFLAGS@
+SRTP_LIBS = @SRTP_LIBS@
+SSH2_CFLAGS = @SSH2_CFLAGS@
+SSH2_LIBS = @SSH2_LIBS@
+STRIP = @STRIP@
+TELETEXTDEC_CFLAGS = @TELETEXTDEC_CFLAGS@
+TELETEXTDEC_LIBS = @TELETEXTDEC_LIBS@
+TIGER_CFLAGS = @TIGER_CFLAGS@
+TIGER_LIBS = @TIGER_LIBS@
+TIMIDITY_CFLAGS = @TIMIDITY_CFLAGS@
+TIMIDITY_LIBS = @TIMIDITY_LIBS@
+UIC = @UIC@
+USE_GLES2 = @USE_GLES2@
+USE_NLS = @USE_NLS@
+USE_OPENGL = @USE_OPENGL@
+VALGRIND_CFLAGS = @VALGRIND_CFLAGS@
+VALGRIND_LIBS = @VALGRIND_LIBS@
+VALGRIND_PATH = @VALGRIND_PATH@
+VDPAU_CFLAGS = @VDPAU_CFLAGS@
+VDPAU_LIBS = @VDPAU_LIBS@
+VERSION = @VERSION@
+VOAACENC_CFLAGS = @VOAACENC_CFLAGS@
+VOAACENC_LIBS = @VOAACENC_LIBS@
+VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
+VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VULKAN_LIBS = @VULKAN_LIBS@
+WARNING_CFLAGS = @WARNING_CFLAGS@
+WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
+WARNING_OBJCFLAGS = @WARNING_OBJCFLAGS@
+WASAPI_LIBS = @WASAPI_LIBS@
+WAYLAND_CFLAGS = @WAYLAND_CFLAGS@
+WAYLAND_EGL_CFLAGS = @WAYLAND_EGL_CFLAGS@
+WAYLAND_EGL_LIBS = @WAYLAND_EGL_LIBS@
+WAYLAND_LIBS = @WAYLAND_LIBS@
+WEBP_CFLAGS = @WEBP_CFLAGS@
+WEBP_LIBS = @WEBP_LIBS@
+WGET = @WGET@
+WILDMIDI_CFLAGS = @WILDMIDI_CFLAGS@
+WILDMIDI_LIBS = @WILDMIDI_LIBS@
+WINKS_LIBS = @WINKS_LIBS@
+WINSCREENCAP_LIBS = @WINSCREENCAP_LIBS@
+WINSOCK2_LIBS = @WINSOCK2_LIBS@
+X11_CFLAGS = @X11_CFLAGS@
+X11_LIBS = @X11_LIBS@
+X265_CFLAGS = @X265_CFLAGS@
+X265_LIBS = @X265_LIBS@
+XCB_CFLAGS = @XCB_CFLAGS@
+XCB_LIBS = @XCB_LIBS@
+XCOMPOSITE_CFLAGS = @XCOMPOSITE_CFLAGS@
+XCOMPOSITE_LIBS = @XCOMPOSITE_LIBS@
+XGETTEXT = @XGETTEXT@
+XGETTEXT_015 = @XGETTEXT_015@
+XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
+XVID_LIBS = @XVID_LIBS@
+X_CFLAGS = @X_CFLAGS@
+X_LIBS = @X_LIBS@
+ZBAR_CFLAGS = @ZBAR_CFLAGS@
+ZBAR_LIBS = @ZBAR_LIBS@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+ac_ct_OBJC = @ac_ct_OBJC@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+ax_pthread_config = @ax_pthread_config@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+pkgpyexecdir = @pkgpyexecdir@
+pkgpythondir = @pkgpythondir@
+plugindir = @plugindir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+pyexecdir = @pyexecdir@
+pythondir = @pythondir@
+runstatedir = @runstatedir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target = @target@
+target_alias = @target_alias@
+target_cpu = @target_cpu@
+target_os = @target_os@
+target_vendor = @target_vendor@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+wayland_scanner = @wayland_scanner@
+plugin_LTLIBRARIES = libgstvulkan.la
+SUBDIRS = $(am__append_1)
+DIST_SUBDIRS = xcb
+DISTCLEANFILES = vkconfig.h
+libgstvulkan_la_SOURCES = \
+	gstvulkan.c \
+	vkdevice.c \
+	vkdisplay.c \
+	vkerror.c \
+	vkbuffermemory.c \
+	vkimagememory.c \
+	vkbufferpool.c \
+	vkinstance.c \
+	vkmemory.c \
+	vkqueue.c \
+	vksink.c \
+	vkswapper.c \
+	vkupload.c \
+	vkutils.c \
+	vkwindow.c
+
+noinst_HEADERS = \
+	vk.h \
+	vk_fwd.h \
+	vkdevice.h \
+	vkdisplay.h \
+	vkerror.h \
+	vkbuffermemory.h \
+	vkimagememory.h \
+	vkbufferpool.h \
+	vkinstance.h \
+	vkmemory.h \
+	vkqueue.h \
+	vksink.h \
+	vkswapper.h \
+	vkupload.h \
+	vkutils.h \
+	vkutils_private.h \
+	vkwindow.h
+
+libgstvulkan_la_CFLAGS = \
+	-I$(top_srcdir)/gst-libs \
+	-I$(top_builddir)/gst-libs \
+	$(GST_CFLAGS) \
+	$(GST_BASE_CFLAGS) \
+	$(GST_PLUGINS_BASE_CFLAGS) \
+	$(VULKAN_CFLAGS)
+
+libgstvulkan_la_LIBADD = $(GST_BASE_LIBS) $(GST_PLUGINS_BASE_LIBS) \
+	-lgstvideo-$(GST_API_VERSION) $(VULKAN_LIBS) $(am__append_2)
+libgstvulkan_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS)
+libgstvulkan_la_LIBTOOLFLAGS = $(GST_PLUGIN_LIBTOOLFLAGS)
+all: all-recursive
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+	        && { if test -f $@; then exit 0; else break; fi; }; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu ext/vulkan/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --gnu ext/vulkan/Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+install-pluginLTLIBRARIES: $(plugin_LTLIBRARIES)
+	@$(NORMAL_INSTALL)
+	@list='$(plugin_LTLIBRARIES)'; test -n "$(plugindir)" || list=; \
+	list2=; for p in $$list; do \
+	  if test -f $$p; then \
+	    list2="$$list2 $$p"; \
+	  else :; fi; \
+	done; \
+	test -z "$$list2" || { \
+	  echo " $(MKDIR_P) '$(DESTDIR)$(plugindir)'"; \
+	  $(MKDIR_P) "$(DESTDIR)$(plugindir)" || exit 1; \
+	  echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(plugindir)'"; \
+	  $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(plugindir)"; \
+	}
+
+uninstall-pluginLTLIBRARIES:
+	@$(NORMAL_UNINSTALL)
+	@list='$(plugin_LTLIBRARIES)'; test -n "$(plugindir)" || list=; \
+	for p in $$list; do \
+	  $(am__strip_dir) \
+	  echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(plugindir)/$$f'"; \
+	  $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(plugindir)/$$f"; \
+	done
+
+clean-pluginLTLIBRARIES:
+	-test -z "$(plugin_LTLIBRARIES)" || rm -f $(plugin_LTLIBRARIES)
+	@list='$(plugin_LTLIBRARIES)'; \
+	locs=`for p in $$list; do echo $$p; done | \
+	      sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \
+	      sort -u`; \
+	test -z "$$locs" || { \
+	  echo rm -f $${locs}; \
+	  rm -f $${locs}; \
+	}
+
+libgstvulkan.la: $(libgstvulkan_la_OBJECTS) $(libgstvulkan_la_DEPENDENCIES) $(EXTRA_libgstvulkan_la_DEPENDENCIES) 
+	$(AM_V_CCLD)$(libgstvulkan_la_LINK) -rpath $(plugindir) $(libgstvulkan_la_OBJECTS) $(libgstvulkan_la_LIBADD) $(LIBS)
+
+mostlyclean-compile:
+	-rm -f *.$(OBJEXT)
+
+distclean-compile:
+	-rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstvulkan_la-gstvulkan.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstvulkan_la-vkbuffermemory.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstvulkan_la-vkbufferpool.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstvulkan_la-vkdevice.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstvulkan_la-vkdisplay.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstvulkan_la-vkerror.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstvulkan_la-vkimagememory.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstvulkan_la-vkinstance.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstvulkan_la-vkmemory.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstvulkan_la-vkqueue.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstvulkan_la-vksink.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstvulkan_la-vkswapper.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstvulkan_la-vkupload.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstvulkan_la-vkutils.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstvulkan_la-vkwindow.Plo@am__quote@
+
+.c.o:
+@am__fastdepCC_TRUE@	$(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\
+@am__fastdepCC_TRUE@	$(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\
+@am__fastdepCC_TRUE@	$(am__mv) $$depbase.Tpo $$depbase.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $<
+
+.c.obj:
+@am__fastdepCC_TRUE@	$(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\
+@am__fastdepCC_TRUE@	$(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\
+@am__fastdepCC_TRUE@	$(am__mv) $$depbase.Tpo $$depbase.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
+
+.c.lo:
+@am__fastdepCC_TRUE@	$(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.lo$$||'`;\
+@am__fastdepCC_TRUE@	$(LTCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\
+@am__fastdepCC_TRUE@	$(am__mv) $$depbase.Tpo $$depbase.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $<
+
+libgstvulkan_la-gstvulkan.lo: gstvulkan.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstvulkan_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstvulkan_la_CFLAGS) $(CFLAGS) -MT libgstvulkan_la-gstvulkan.lo -MD -MP -MF $(DEPDIR)/libgstvulkan_la-gstvulkan.Tpo -c -o libgstvulkan_la-gstvulkan.lo `test -f 'gstvulkan.c' || echo '$(srcdir)/'`gstvulkan.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstvulkan_la-gstvulkan.Tpo $(DEPDIR)/libgstvulkan_la-gstvulkan.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='gstvulkan.c' object='libgstvulkan_la-gstvulkan.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstvulkan_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstvulkan_la_CFLAGS) $(CFLAGS) -c -o libgstvulkan_la-gstvulkan.lo `test -f 'gstvulkan.c' || echo '$(srcdir)/'`gstvulkan.c
+
+libgstvulkan_la-vkdevice.lo: vkdevice.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstvulkan_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstvulkan_la_CFLAGS) $(CFLAGS) -MT libgstvulkan_la-vkdevice.lo -MD -MP -MF $(DEPDIR)/libgstvulkan_la-vkdevice.Tpo -c -o libgstvulkan_la-vkdevice.lo `test -f 'vkdevice.c' || echo '$(srcdir)/'`vkdevice.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstvulkan_la-vkdevice.Tpo $(DEPDIR)/libgstvulkan_la-vkdevice.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='vkdevice.c' object='libgstvulkan_la-vkdevice.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstvulkan_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstvulkan_la_CFLAGS) $(CFLAGS) -c -o libgstvulkan_la-vkdevice.lo `test -f 'vkdevice.c' || echo '$(srcdir)/'`vkdevice.c
+
+libgstvulkan_la-vkdisplay.lo: vkdisplay.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstvulkan_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstvulkan_la_CFLAGS) $(CFLAGS) -MT libgstvulkan_la-vkdisplay.lo -MD -MP -MF $(DEPDIR)/libgstvulkan_la-vkdisplay.Tpo -c -o libgstvulkan_la-vkdisplay.lo `test -f 'vkdisplay.c' || echo '$(srcdir)/'`vkdisplay.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstvulkan_la-vkdisplay.Tpo $(DEPDIR)/libgstvulkan_la-vkdisplay.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='vkdisplay.c' object='libgstvulkan_la-vkdisplay.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstvulkan_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstvulkan_la_CFLAGS) $(CFLAGS) -c -o libgstvulkan_la-vkdisplay.lo `test -f 'vkdisplay.c' || echo '$(srcdir)/'`vkdisplay.c
+
+libgstvulkan_la-vkerror.lo: vkerror.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstvulkan_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstvulkan_la_CFLAGS) $(CFLAGS) -MT libgstvulkan_la-vkerror.lo -MD -MP -MF $(DEPDIR)/libgstvulkan_la-vkerror.Tpo -c -o libgstvulkan_la-vkerror.lo `test -f 'vkerror.c' || echo '$(srcdir)/'`vkerror.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstvulkan_la-vkerror.Tpo $(DEPDIR)/libgstvulkan_la-vkerror.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='vkerror.c' object='libgstvulkan_la-vkerror.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstvulkan_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstvulkan_la_CFLAGS) $(CFLAGS) -c -o libgstvulkan_la-vkerror.lo `test -f 'vkerror.c' || echo '$(srcdir)/'`vkerror.c
+
+libgstvulkan_la-vkbuffermemory.lo: vkbuffermemory.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstvulkan_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstvulkan_la_CFLAGS) $(CFLAGS) -MT libgstvulkan_la-vkbuffermemory.lo -MD -MP -MF $(DEPDIR)/libgstvulkan_la-vkbuffermemory.Tpo -c -o libgstvulkan_la-vkbuffermemory.lo `test -f 'vkbuffermemory.c' || echo '$(srcdir)/'`vkbuffermemory.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstvulkan_la-vkbuffermemory.Tpo $(DEPDIR)/libgstvulkan_la-vkbuffermemory.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='vkbuffermemory.c' object='libgstvulkan_la-vkbuffermemory.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstvulkan_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstvulkan_la_CFLAGS) $(CFLAGS) -c -o libgstvulkan_la-vkbuffermemory.lo `test -f 'vkbuffermemory.c' || echo '$(srcdir)/'`vkbuffermemory.c
+
+libgstvulkan_la-vkimagememory.lo: vkimagememory.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstvulkan_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstvulkan_la_CFLAGS) $(CFLAGS) -MT libgstvulkan_la-vkimagememory.lo -MD -MP -MF $(DEPDIR)/libgstvulkan_la-vkimagememory.Tpo -c -o libgstvulkan_la-vkimagememory.lo `test -f 'vkimagememory.c' || echo '$(srcdir)/'`vkimagememory.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstvulkan_la-vkimagememory.Tpo $(DEPDIR)/libgstvulkan_la-vkimagememory.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='vkimagememory.c' object='libgstvulkan_la-vkimagememory.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstvulkan_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstvulkan_la_CFLAGS) $(CFLAGS) -c -o libgstvulkan_la-vkimagememory.lo `test -f 'vkimagememory.c' || echo '$(srcdir)/'`vkimagememory.c
+
+libgstvulkan_la-vkbufferpool.lo: vkbufferpool.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstvulkan_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstvulkan_la_CFLAGS) $(CFLAGS) -MT libgstvulkan_la-vkbufferpool.lo -MD -MP -MF $(DEPDIR)/libgstvulkan_la-vkbufferpool.Tpo -c -o libgstvulkan_la-vkbufferpool.lo `test -f 'vkbufferpool.c' || echo '$(srcdir)/'`vkbufferpool.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstvulkan_la-vkbufferpool.Tpo $(DEPDIR)/libgstvulkan_la-vkbufferpool.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='vkbufferpool.c' object='libgstvulkan_la-vkbufferpool.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstvulkan_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstvulkan_la_CFLAGS) $(CFLAGS) -c -o libgstvulkan_la-vkbufferpool.lo `test -f 'vkbufferpool.c' || echo '$(srcdir)/'`vkbufferpool.c
+
+libgstvulkan_la-vkinstance.lo: vkinstance.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstvulkan_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstvulkan_la_CFLAGS) $(CFLAGS) -MT libgstvulkan_la-vkinstance.lo -MD -MP -MF $(DEPDIR)/libgstvulkan_la-vkinstance.Tpo -c -o libgstvulkan_la-vkinstance.lo `test -f 'vkinstance.c' || echo '$(srcdir)/'`vkinstance.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstvulkan_la-vkinstance.Tpo $(DEPDIR)/libgstvulkan_la-vkinstance.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='vkinstance.c' object='libgstvulkan_la-vkinstance.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstvulkan_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstvulkan_la_CFLAGS) $(CFLAGS) -c -o libgstvulkan_la-vkinstance.lo `test -f 'vkinstance.c' || echo '$(srcdir)/'`vkinstance.c
+
+libgstvulkan_la-vkmemory.lo: vkmemory.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstvulkan_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstvulkan_la_CFLAGS) $(CFLAGS) -MT libgstvulkan_la-vkmemory.lo -MD -MP -MF $(DEPDIR)/libgstvulkan_la-vkmemory.Tpo -c -o libgstvulkan_la-vkmemory.lo `test -f 'vkmemory.c' || echo '$(srcdir)/'`vkmemory.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstvulkan_la-vkmemory.Tpo $(DEPDIR)/libgstvulkan_la-vkmemory.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='vkmemory.c' object='libgstvulkan_la-vkmemory.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstvulkan_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstvulkan_la_CFLAGS) $(CFLAGS) -c -o libgstvulkan_la-vkmemory.lo `test -f 'vkmemory.c' || echo '$(srcdir)/'`vkmemory.c
+
+libgstvulkan_la-vkqueue.lo: vkqueue.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstvulkan_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstvulkan_la_CFLAGS) $(CFLAGS) -MT libgstvulkan_la-vkqueue.lo -MD -MP -MF $(DEPDIR)/libgstvulkan_la-vkqueue.Tpo -c -o libgstvulkan_la-vkqueue.lo `test -f 'vkqueue.c' || echo '$(srcdir)/'`vkqueue.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstvulkan_la-vkqueue.Tpo $(DEPDIR)/libgstvulkan_la-vkqueue.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='vkqueue.c' object='libgstvulkan_la-vkqueue.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstvulkan_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstvulkan_la_CFLAGS) $(CFLAGS) -c -o libgstvulkan_la-vkqueue.lo `test -f 'vkqueue.c' || echo '$(srcdir)/'`vkqueue.c
+
+libgstvulkan_la-vksink.lo: vksink.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstvulkan_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstvulkan_la_CFLAGS) $(CFLAGS) -MT libgstvulkan_la-vksink.lo -MD -MP -MF $(DEPDIR)/libgstvulkan_la-vksink.Tpo -c -o libgstvulkan_la-vksink.lo `test -f 'vksink.c' || echo '$(srcdir)/'`vksink.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstvulkan_la-vksink.Tpo $(DEPDIR)/libgstvulkan_la-vksink.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='vksink.c' object='libgstvulkan_la-vksink.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstvulkan_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstvulkan_la_CFLAGS) $(CFLAGS) -c -o libgstvulkan_la-vksink.lo `test -f 'vksink.c' || echo '$(srcdir)/'`vksink.c
+
+libgstvulkan_la-vkswapper.lo: vkswapper.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstvulkan_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstvulkan_la_CFLAGS) $(CFLAGS) -MT libgstvulkan_la-vkswapper.lo -MD -MP -MF $(DEPDIR)/libgstvulkan_la-vkswapper.Tpo -c -o libgstvulkan_la-vkswapper.lo `test -f 'vkswapper.c' || echo '$(srcdir)/'`vkswapper.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstvulkan_la-vkswapper.Tpo $(DEPDIR)/libgstvulkan_la-vkswapper.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='vkswapper.c' object='libgstvulkan_la-vkswapper.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstvulkan_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstvulkan_la_CFLAGS) $(CFLAGS) -c -o libgstvulkan_la-vkswapper.lo `test -f 'vkswapper.c' || echo '$(srcdir)/'`vkswapper.c
+
+libgstvulkan_la-vkupload.lo: vkupload.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstvulkan_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstvulkan_la_CFLAGS) $(CFLAGS) -MT libgstvulkan_la-vkupload.lo -MD -MP -MF $(DEPDIR)/libgstvulkan_la-vkupload.Tpo -c -o libgstvulkan_la-vkupload.lo `test -f 'vkupload.c' || echo '$(srcdir)/'`vkupload.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstvulkan_la-vkupload.Tpo $(DEPDIR)/libgstvulkan_la-vkupload.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='vkupload.c' object='libgstvulkan_la-vkupload.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstvulkan_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstvulkan_la_CFLAGS) $(CFLAGS) -c -o libgstvulkan_la-vkupload.lo `test -f 'vkupload.c' || echo '$(srcdir)/'`vkupload.c
+
+libgstvulkan_la-vkutils.lo: vkutils.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstvulkan_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstvulkan_la_CFLAGS) $(CFLAGS) -MT libgstvulkan_la-vkutils.lo -MD -MP -MF $(DEPDIR)/libgstvulkan_la-vkutils.Tpo -c -o libgstvulkan_la-vkutils.lo `test -f 'vkutils.c' || echo '$(srcdir)/'`vkutils.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstvulkan_la-vkutils.Tpo $(DEPDIR)/libgstvulkan_la-vkutils.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='vkutils.c' object='libgstvulkan_la-vkutils.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstvulkan_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstvulkan_la_CFLAGS) $(CFLAGS) -c -o libgstvulkan_la-vkutils.lo `test -f 'vkutils.c' || echo '$(srcdir)/'`vkutils.c
+
+libgstvulkan_la-vkwindow.lo: vkwindow.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstvulkan_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstvulkan_la_CFLAGS) $(CFLAGS) -MT libgstvulkan_la-vkwindow.lo -MD -MP -MF $(DEPDIR)/libgstvulkan_la-vkwindow.Tpo -c -o libgstvulkan_la-vkwindow.lo `test -f 'vkwindow.c' || echo '$(srcdir)/'`vkwindow.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstvulkan_la-vkwindow.Tpo $(DEPDIR)/libgstvulkan_la-vkwindow.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='vkwindow.c' object='libgstvulkan_la-vkwindow.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstvulkan_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstvulkan_la_CFLAGS) $(CFLAGS) -c -o libgstvulkan_la-vkwindow.lo `test -f 'vkwindow.c' || echo '$(srcdir)/'`vkwindow.c
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+
+# This directory's subdirectories are mostly independent; you can cd
+# into them and run 'make' without going through this Makefile.
+# To change the values of 'make' variables: instead of editing Makefiles,
+# (1) if the variable is set in 'config.status', edit 'config.status'
+#     (which will cause the Makefiles to be regenerated when you run 'make');
+# (2) otherwise, pass the desired values on the 'make' command line.
+$(am__recursive_targets):
+	@fail=; \
+	if $(am__make_keepgoing); then \
+	  failcom='fail=yes'; \
+	else \
+	  failcom='exit 1'; \
+	fi; \
+	dot_seen=no; \
+	target=`echo $@ | sed s/-recursive//`; \
+	case "$@" in \
+	  distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
+	  *) list='$(SUBDIRS)' ;; \
+	esac; \
+	for subdir in $$list; do \
+	  echo "Making $$target in $$subdir"; \
+	  if test "$$subdir" = "."; then \
+	    dot_seen=yes; \
+	    local_target="$$target-am"; \
+	  else \
+	    local_target="$$target"; \
+	  fi; \
+	  ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+	  || eval $$failcom; \
+	done; \
+	if test "$$dot_seen" = "no"; then \
+	  $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
+	fi; test -z "$$fail"
+
+ID: $(am__tagged_files)
+	$(am__define_uniq_tagged_files); mkid -fID $$unique
+tags: tags-recursive
+TAGS: tags
+
+tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+	set x; \
+	here=`pwd`; \
+	if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
+	  include_option=--etags-include; \
+	  empty_fix=.; \
+	else \
+	  include_option=--include; \
+	  empty_fix=; \
+	fi; \
+	list='$(SUBDIRS)'; for subdir in $$list; do \
+	  if test "$$subdir" = .; then :; else \
+	    test ! -f $$subdir/TAGS || \
+	      set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \
+	  fi; \
+	done; \
+	$(am__define_uniq_tagged_files); \
+	shift; \
+	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+	  test -n "$$unique" || unique=$$empty_fix; \
+	  if test $$# -gt 0; then \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      "$$@" $$unique; \
+	  else \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      $$unique; \
+	  fi; \
+	fi
+ctags: ctags-recursive
+
+CTAGS: ctags
+ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+	$(am__define_uniq_tagged_files); \
+	test -z "$(CTAGS_ARGS)$$unique" \
+	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+	     $$unique
+
+GTAGS:
+	here=`$(am__cd) $(top_builddir) && pwd` \
+	  && $(am__cd) $(top_srcdir) \
+	  && gtags -i $(GTAGS_ARGS) "$$here"
+cscopelist: cscopelist-recursive
+
+cscopelist-am: $(am__tagged_files)
+	list='$(am__tagged_files)'; \
+	case "$(srcdir)" in \
+	  [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+	  *) sdir=$(subdir)/$(srcdir) ;; \
+	esac; \
+	for i in $$list; do \
+	  if test -f "$$i"; then \
+	    echo "$(subdir)/$$i"; \
+	  else \
+	    echo "$$sdir/$$i"; \
+	  fi; \
+	done >> $(top_builddir)/cscope.files
+
+distclean-tags:
+	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+	  else \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
+	    || exit 1; \
+	  fi; \
+	done
+	@list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
+	  if test "$$subdir" = .; then :; else \
+	    $(am__make_dryrun) \
+	      || test -d "$(distdir)/$$subdir" \
+	      || $(MKDIR_P) "$(distdir)/$$subdir" \
+	      || exit 1; \
+	    dir1=$$subdir; dir2="$(distdir)/$$subdir"; \
+	    $(am__relativize); \
+	    new_distdir=$$reldir; \
+	    dir1=$$subdir; dir2="$(top_distdir)"; \
+	    $(am__relativize); \
+	    new_top_distdir=$$reldir; \
+	    echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \
+	    echo "     am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \
+	    ($(am__cd) $$subdir && \
+	      $(MAKE) $(AM_MAKEFLAGS) \
+	        top_distdir="$$new_top_distdir" \
+	        distdir="$$new_distdir" \
+		am__remove_distdir=: \
+		am__skip_length_check=: \
+		am__skip_mode_fix=: \
+	        distdir) \
+	      || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+check: check-recursive
+all-am: Makefile $(LTLIBRARIES) $(HEADERS)
+installdirs: installdirs-recursive
+installdirs-am:
+	for dir in "$(DESTDIR)$(plugindir)"; do \
+	  test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+	done
+install: install-recursive
+install-exec: install-exec-recursive
+install-data: install-data-recursive
+uninstall: uninstall-recursive
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-recursive
+install-strip:
+	if test -z '$(STRIP)'; then \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	      install; \
+	else \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+	fi
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+	-test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+clean: clean-recursive
+
+clean-am: clean-generic clean-libtool clean-pluginLTLIBRARIES \
+	mostlyclean-am
+
+distclean: distclean-recursive
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+	distclean-tags
+
+dvi: dvi-recursive
+
+dvi-am:
+
+html: html-recursive
+
+html-am:
+
+info: info-recursive
+
+info-am:
+
+install-data-am: install-pluginLTLIBRARIES
+
+install-dvi: install-dvi-recursive
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-recursive
+
+install-html-am:
+
+install-info: install-info-recursive
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-recursive
+
+install-pdf-am:
+
+install-ps: install-ps-recursive
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-recursive
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-recursive
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+	mostlyclean-libtool
+
+pdf: pdf-recursive
+
+pdf-am:
+
+ps: ps-recursive
+
+ps-am:
+
+uninstall-am: uninstall-pluginLTLIBRARIES
+
+.MAKE: $(am__recursive_targets) install-am install-strip
+
+.PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am check \
+	check-am clean clean-generic clean-libtool \
+	clean-pluginLTLIBRARIES cscopelist-am ctags ctags-am distclean \
+	distclean-compile distclean-generic distclean-libtool \
+	distclean-tags distdir dvi dvi-am html html-am info info-am \
+	install install-am install-data install-data-am install-dvi \
+	install-dvi-am install-exec install-exec-am install-html \
+	install-html-am install-info install-info-am install-man \
+	install-pdf install-pdf-am install-pluginLTLIBRARIES \
+	install-ps install-ps-am install-strip installcheck \
+	installcheck-am installdirs installdirs-am maintainer-clean \
+	maintainer-clean-generic mostlyclean mostlyclean-compile \
+	mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+	tags tags-am uninstall uninstall-am \
+	uninstall-pluginLTLIBRARIES
+
+.PRECIOUS: Makefile
+
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/ext/vulkan/gstvulkan.c b/ext/vulkan/gstvulkan.c
new file mode 100644
index 0000000..7158895
--- /dev/null
+++ b/ext/vulkan/gstvulkan.c
@@ -0,0 +1,68 @@
+/*
+ * GStreamer
+ * Copyright (C) 2015 Matthew Waters <matthew@centricular.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+/**
+ * SECTION:plugin-vulkan
+ *
+ * Cross-platform Vulkan plugin.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include "vksink.h"
+#include "vkupload.h"
+
+#if GST_VULKAN_HAVE_WINDOW_X11
+#include <X11/Xlib.h>
+#endif
+
+#define GST_CAT_DEFAULT gst_gl_gstgl_debug
+GST_DEBUG_CATEGORY_STATIC (GST_CAT_DEFAULT);
+
+static gboolean
+plugin_init (GstPlugin * plugin)
+{
+  GST_DEBUG_CATEGORY_INIT (gst_gl_gstgl_debug, "gstvulkan", 0, "gstvulkan");
+
+#if GST_VULKAN_HAVE_WINDOW_X11
+  if (g_getenv ("GST_VULKAN_XINITTHREADS"))
+    XInitThreads ();
+#endif
+
+  if (!gst_element_register (plugin, "vulkansink",
+          GST_RANK_NONE, GST_TYPE_VULKAN_SINK)) {
+    return FALSE;
+  }
+
+  if (!gst_element_register (plugin, "vulkanupload",
+          GST_RANK_NONE, GST_TYPE_VULKAN_UPLOAD)) {
+    return FALSE;
+  }
+
+  return TRUE;
+}
+
+GST_PLUGIN_DEFINE (GST_VERSION_MAJOR,
+    GST_VERSION_MINOR,
+    vulkan,
+    "Vulkan plugin",
+    plugin_init, VERSION, GST_LICENSE, GST_PACKAGE_NAME, GST_PACKAGE_ORIGIN)
diff --git a/ext/vulkan/vk.h b/ext/vulkan/vk.h
new file mode 100644
index 0000000..0225ed3
--- /dev/null
+++ b/ext/vulkan/vk.h
@@ -0,0 +1,41 @@
+/*
+ * GStreamer
+ * Copyright (C) 2015 Matthew Waters <matthew@centricular.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifndef _VK_H_
+#define _VK_H_
+
+#include <gst/gst.h>
+
+#include "vkapi.h"
+
+#include "vkerror.h"
+#include "vkinstance.h"
+#include "vkdevice.h"
+#include "vkqueue.h"
+#include "vkdisplay.h"
+#include "vkwindow.h"
+#include "vkswapper.h"
+#include "vkmemory.h"
+#include "vkbuffermemory.h"
+#include "vkimagememory.h"
+#include "vkbufferpool.h"
+#include "vkutils.h"
+
+#endif /* _VK_H_ */
diff --git a/ext/vulkan/vk_fwd.h b/ext/vulkan/vk_fwd.h
new file mode 100644
index 0000000..ed6f024
--- /dev/null
+++ b/ext/vulkan/vk_fwd.h
@@ -0,0 +1,71 @@
+/*
+ * GStreamer
+ * Copyright (C) 2015 Matthew Waters <matthew@centricular.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifndef _VK_FWD_H_
+#define _VK_FWD_H_
+
+#include <gst/gst.h>
+
+G_BEGIN_DECLS
+
+typedef struct _GstVulkanInstance GstVulkanInstance;
+typedef struct _GstVulkanInstanceClass GstVulkanInstanceClass;
+typedef struct _GstVulkanInstancePrivate GstVulkanInstancePrivate;
+
+typedef struct _GstVulkanDevice GstVulkanDevice;
+typedef struct _GstVulkanDeviceClass GstVulkanDeviceClass;
+typedef struct _GstVulkanDevicePrivate GstVulkanDevicePrivate;
+
+typedef struct _GstVulkanQueue GstVulkanQueue;
+typedef struct _GstVulkanQueueClass GstVulkanQueueClass;
+
+typedef enum _GstVulkanDisplayType GstVulkanDisplayType;
+
+typedef struct _GstVulkanDisplay GstVulkanDisplay;
+typedef struct _GstVulkanDisplayClass GstVulkanDisplayClass;
+typedef struct _GstVulkanDisplayPrivate GstVulkanDisplayPrivate;
+
+typedef struct _GstVulkanWindow GstVulkanWindow;
+typedef struct _GstVulkanWindowClass GstVulkanWindowClass;
+typedef struct _GstVulkanWindowPrivate GstVulkanWindowPrivate;
+
+typedef struct _GstVulkanSwapper GstVulkanSwapper;
+typedef struct _GstVulkanSwapperClass GstVulkanSwapperClass;
+typedef struct _GstVulkanSwapperPrivate GstVulkanSwapperPrivate;
+
+typedef struct _GstVulkanMemory GstVulkanMemory;
+typedef struct _GstVulkanMemoryAllocator GstVulkanMemoryAllocator;
+typedef struct _GstVulkanMemoryAllocatorClass GstVulkanMemoryAllocatorClass;
+
+typedef struct _GstVulkanBufferMemory GstVulkanBufferMemory;
+typedef struct _GstVulkanBufferMemoryAllocator GstVulkanBufferMemoryAllocator;
+typedef struct _GstVulkanBufferMemoryAllocatorClass GstVulkanBufferMemoryAllocatorClass;
+
+typedef struct _GstVulkanImageMemory GstVulkanImageMemory;
+typedef struct _GstVulkanImageMemoryAllocator GstVulkanImageMemoryAllocator;
+typedef struct _GstVulkanImageMemoryAllocatorClass GstVulkanImageMemoryAllocatorClass;
+
+typedef struct _GstVulkanBufferPool GstVulkanBufferPool;
+typedef struct _GstVulkanBufferPoolClass GstVulkanBufferPoolClass;
+typedef struct _GstVulkanBufferPoolPrivate GstVulkanBufferPoolPrivate;
+
+G_END_DECLS
+
+#endif /* _VK_FWD_H_ */
diff --git a/ext/vulkan/vkbuffermemory.c b/ext/vulkan/vkbuffermemory.c
new file mode 100644
index 0000000..e54d159
--- /dev/null
+++ b/ext/vulkan/vkbuffermemory.c
@@ -0,0 +1,432 @@
+/*
+ * GStreamer
+ * Copyright (C) 2016 Matthew Waters <matthew@centricular.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include "vkbuffermemory.h"
+
+/**
+ * SECTION:vkbuffermemory
+ * @short_description: memory subclass for Vulkan buffer memory
+ * @see_also: #GstMemory, #GstAllocator
+ *
+ * GstVulkanBufferMemory is a #GstMemory subclass providing support for the
+ * mapping of Vulkan device memory.
+ */
+
+#define GST_CAT_DEFUALT GST_CAT_VULKAN_BUFFER_MEMORY
+GST_DEBUG_CATEGORY_STATIC (GST_CAT_DEFUALT);
+
+static GstAllocator *_vulkan_buffer_memory_allocator;
+
+#define GST_VK_BUFFER_CREATE_INFO_INIT GST_VK_STRUCT_8
+#define GST_VK_BUFFER_CREATE_INFO(info, pNext, flags, size, usage, sharingMode, queueFamilyIndexCount, pQueueFamilyIndices ) \
+  G_STMT_START { \
+    VkBufferCreateInfo tmp = GST_VK_BUFFER_CREATE_INFO_INIT (VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO, pNext, flags, size, usage, sharingMode, queueFamilyIndexCount, pQueueFamilyIndices); \
+    (info) = tmp; \
+  } G_STMT_END
+
+static gboolean
+_create_info_from_args (VkBufferCreateInfo * info, gsize size,
+    VkBufferUsageFlags usage)
+{
+  /* FIXME: validate these */
+  GST_VK_BUFFER_CREATE_INFO (*info, NULL, 0, size, usage,
+      VK_SHARING_MODE_EXCLUSIVE, 0, NULL);
+
+  return TRUE;
+}
+
+#define GST_VK_BUFFER_VIEW_CREATE_INFO_INIT GST_VK_STRUCT_7
+#define GST_VK_BUFFER_VIEW_CREATE_INFO(info, pNext, flags, buffer, format, offset, range) \
+  G_STMT_START { \
+    VkBufferViewCreateInfo tmp = GST_VK_BUFFER_VIEW_CREATE_INFO_INIT (VK_STRUCTURE_TYPE_BUFFER_VIEW_CREATE_INFO, pNext, flags, buffer, format, offset, range); \
+    (info) = tmp; \
+  } G_STMT_END
+
+static gboolean
+_create_view_from_args (VkBufferViewCreateInfo * info, VkBuffer buffer,
+    VkFormat format, gsize offset, gsize range)
+{
+  /* FIXME: validate these */
+  g_assert (format != VK_FORMAT_UNDEFINED);
+
+  GST_VK_BUFFER_VIEW_CREATE_INFO (*info, NULL, 0, buffer, format, offset,
+      range);
+
+  return TRUE;
+}
+
+static void
+_vk_buffer_mem_init (GstVulkanBufferMemory * mem, GstAllocator * allocator,
+    GstMemory * parent, GstVulkanDevice * device, VkBufferUsageFlags usage,
+    GstAllocationParams * params, gsize size, gpointer user_data,
+    GDestroyNotify notify)
+{
+  gsize align = gst_memory_alignment, offset = 0, maxsize = size;
+  GstMemoryFlags flags = 0;
+
+  if (params) {
+    flags = params->flags;
+    align |= params->align;
+    offset = params->prefix;
+    maxsize += params->prefix + params->padding + align;
+  }
+
+  gst_memory_init (GST_MEMORY_CAST (mem), flags, allocator, parent, maxsize,
+      align, offset, size);
+
+  mem->device = gst_object_ref (device);
+  mem->wrapped = FALSE;
+  mem->notify = notify;
+  mem->user_data = user_data;
+
+  g_mutex_init (&mem->lock);
+
+  GST_CAT_DEBUG (GST_CAT_VULKAN_BUFFER_MEMORY,
+      "new Vulkan Buffer memory:%p size:%" G_GSIZE_FORMAT, mem, maxsize);
+}
+
+static GstVulkanBufferMemory *
+_vk_buffer_mem_new_alloc (GstAllocator * allocator, GstMemory * parent,
+    GstVulkanDevice * device, VkFormat format, gsize size,
+    VkBufferUsageFlags usage, VkMemoryPropertyFlags mem_prop_flags,
+    gpointer user_data, GDestroyNotify notify)
+{
+  GstVulkanBufferMemory *mem = NULL;
+  GstAllocationParams params = { 0, };
+  VkBufferCreateInfo buffer_info;
+  GError *error = NULL;
+  guint32 type_idx;
+  VkBuffer buffer;
+  VkResult err;
+
+  if (!_create_info_from_args (&buffer_info, size, usage)) {
+    GST_CAT_ERROR (GST_CAT_VULKAN_BUFFER_MEMORY, "Incorrect buffer parameters");
+    goto error;
+  }
+
+  err = vkCreateBuffer (device->device, &buffer_info, NULL, &buffer);
+  if (gst_vulkan_error_to_g_error (err, &error, "vkCreateBuffer") < 0)
+    goto vk_error;
+
+  mem = g_new0 (GstVulkanBufferMemory, 1);
+  vkGetBufferMemoryRequirements (device->device, buffer, &mem->requirements);
+
+  /* XXX: assumes alignment is a power of 2 */
+  params.align = mem->requirements.alignment - 1;
+  _vk_buffer_mem_init (mem, allocator, parent, device, usage, &params,
+      mem->requirements.size, user_data, notify);
+  mem->buffer = buffer;
+
+  if (!gst_vulkan_memory_find_memory_type_index_with_type_properties (device,
+          mem->requirements.memoryTypeBits, mem_prop_flags, &type_idx))
+    goto error;
+
+  mem->vk_mem = (GstVulkanMemory *) gst_vulkan_memory_alloc (device, type_idx,
+      &params, mem->requirements.size, mem_prop_flags);
+  if (!mem->vk_mem)
+    goto error;
+
+  err = vkBindBufferMemory (device->device, buffer, mem->vk_mem->mem_ptr, 0);
+  if (gst_vulkan_error_to_g_error (err, &error, "vkBindBufferMemory") < 0)
+    goto vk_error;
+
+  if (usage & (VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT |
+          VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT |
+          VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT |
+          VK_BUFFER_USAGE_STORAGE_BUFFER_BIT |
+          VK_BUFFER_USAGE_INDEX_BUFFER_BIT |
+          VK_BUFFER_USAGE_VERTEX_BUFFER_BIT |
+          VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT)) {
+    VkBufferViewCreateInfo view_info;
+
+    _create_view_from_args (&view_info, mem->buffer, format, 0,
+        mem->requirements.size);
+    err = vkCreateBufferView (device->device, &view_info, NULL, &mem->view);
+    if (gst_vulkan_error_to_g_error (err, &error, "vkCreateBufferView") < 0)
+      goto vk_error;
+  }
+
+  return mem;
+
+vk_error:
+  {
+    GST_CAT_ERROR (GST_CAT_VULKAN_BUFFER_MEMORY,
+        "Failed to allocate buffer memory %s", error->message);
+    g_clear_error (&error);
+    goto error;
+  }
+
+error:
+  {
+    if (mem)
+      gst_memory_unref ((GstMemory *) mem);
+    return NULL;
+  }
+}
+
+static GstVulkanBufferMemory *
+_vk_buffer_mem_new_wrapped (GstAllocator * allocator, GstMemory * parent,
+    GstVulkanDevice * device, VkBuffer buffer, VkFormat format,
+    VkBufferUsageFlags usage, gpointer user_data, GDestroyNotify notify)
+{
+  GstVulkanBufferMemory *mem = g_new0 (GstVulkanBufferMemory, 1);
+  GstAllocationParams params = { 0, };
+  GError *error = NULL;
+  VkResult err;
+
+  mem->buffer = buffer;
+
+  vkGetBufferMemoryRequirements (device->device, mem->buffer,
+      &mem->requirements);
+
+  params.align = mem->requirements.alignment - 1;
+  params.flags = GST_MEMORY_FLAG_NOT_MAPPABLE;
+  _vk_buffer_mem_init (mem, allocator, parent, device, usage, &params,
+      mem->requirements.size, user_data, notify);
+  mem->wrapped = TRUE;
+
+  /* XXX: we don't actually if the buffer has a vkDeviceMemory bound so
+   * this may fail */
+  if (usage & (VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT |
+          VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT |
+          VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT |
+          VK_BUFFER_USAGE_STORAGE_BUFFER_BIT |
+          VK_BUFFER_USAGE_INDEX_BUFFER_BIT |
+          VK_BUFFER_USAGE_VERTEX_BUFFER_BIT |
+          VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT)) {
+    VkBufferViewCreateInfo view_info;
+
+    _create_view_from_args (&view_info, mem->buffer, format, 0,
+        mem->requirements.size);
+    err = vkCreateBufferView (device->device, &view_info, NULL, &mem->view);
+    if (gst_vulkan_error_to_g_error (err, &error, "vkCreateBufferView") < 0)
+      goto vk_error;
+  }
+
+  return mem;
+
+vk_error:
+  {
+    GST_CAT_ERROR (GST_CAT_VULKAN_BUFFER_MEMORY,
+        "Failed to allocate buffer memory %s", error->message);
+    g_clear_error (&error);
+    goto error;
+  }
+
+error:
+  {
+    gst_memory_unref ((GstMemory *) mem);
+    return NULL;
+  }
+}
+
+static gpointer
+_vk_buffer_mem_map_full (GstVulkanBufferMemory * mem, GstMapInfo * info,
+    gsize size)
+{
+  GstMapInfo *vk_map_info;
+
+  /* FIXME: possible barrier needed */
+  g_mutex_lock (&mem->lock);
+
+  if (!mem->vk_mem) {
+    g_mutex_unlock (&mem->lock);
+    return NULL;
+  }
+
+  vk_map_info = g_new0 (GstMapInfo, 1);
+  info->user_data[0] = vk_map_info;
+  if (!gst_memory_map ((GstMemory *) mem->vk_mem, vk_map_info, info->flags)) {
+    g_free (vk_map_info);
+    g_mutex_unlock (&mem->lock);
+    return NULL;
+  }
+  g_mutex_unlock (&mem->lock);
+
+  return vk_map_info->data;
+}
+
+static void
+_vk_buffer_mem_unmap_full (GstVulkanBufferMemory * mem, GstMapInfo * info)
+{
+  g_mutex_lock (&mem->lock);
+  gst_memory_unmap ((GstMemory *) mem->vk_mem, info->user_data[0]);
+  g_mutex_unlock (&mem->lock);
+
+  g_free (info->user_data[0]);
+}
+
+static GstMemory *
+_vk_buffer_mem_copy (GstVulkanBufferMemory * src, gssize offset, gssize size)
+{
+  return NULL;
+}
+
+static GstMemory *
+_vk_buffer_mem_share (GstVulkanBufferMemory * mem, gssize offset, gssize size)
+{
+  return NULL;
+}
+
+static gboolean
+_vk_buffer_mem_is_span (GstVulkanBufferMemory * mem1,
+    GstVulkanBufferMemory * mem2, gsize * offset)
+{
+  return FALSE;
+}
+
+static GstMemory *
+_vk_buffer_mem_alloc (GstAllocator * allocator, gsize size,
+    GstAllocationParams * params)
+{
+  g_critical ("Subclass should override GstAllocatorClass::alloc() function");
+
+  return NULL;
+}
+
+static void
+_vk_buffer_mem_free (GstAllocator * allocator, GstMemory * memory)
+{
+  GstVulkanBufferMemory *mem = (GstVulkanBufferMemory *) memory;
+
+  GST_CAT_TRACE (GST_CAT_VULKAN_BUFFER_MEMORY, "freeing buffer memory:%p "
+      "id:%" G_GUINT64_FORMAT, mem, (guint64) mem->buffer);
+
+  if (mem->buffer && !mem->wrapped)
+    vkDestroyBuffer (mem->device->device, mem->buffer, NULL);
+
+  if (mem->view)
+    vkDestroyBufferView (mem->device->device, mem->view, NULL);
+
+  if (mem->vk_mem)
+    gst_memory_unref ((GstMemory *) mem->vk_mem);
+
+  if (mem->notify)
+    mem->notify (mem->user_data);
+
+  gst_object_unref (mem->device);
+}
+
+/**
+ * gst_vulkan_buffer_memory_alloc:
+ * @device:a #GstVulkanDevice
+ * @memory_type_index: the Vulkan memory type index
+ * @params: a #GstAllocationParams
+ * @size: the size to allocate
+ *
+ * Allocated a new #GstVulkanBufferMemory.
+ *
+ * Returns: a #GstMemory object backed by a vulkan device memory
+ */
+GstMemory *
+gst_vulkan_buffer_memory_alloc (GstVulkanDevice * device, VkFormat format,
+    gsize size, VkBufferUsageFlags usage, VkMemoryPropertyFlags mem_prop_flags)
+{
+  GstVulkanBufferMemory *mem;
+
+  mem = _vk_buffer_mem_new_alloc (_vulkan_buffer_memory_allocator, NULL, device,
+      format, size, usage, mem_prop_flags, NULL, NULL);
+
+  return (GstMemory *) mem;
+}
+
+GstMemory *
+gst_vulkan_buffer_memory_wrapped (GstVulkanDevice * device, VkBuffer buffer,
+    VkFormat format, VkBufferUsageFlags usage, gpointer user_data,
+    GDestroyNotify notify)
+{
+  GstVulkanBufferMemory *mem;
+
+  mem =
+      _vk_buffer_mem_new_wrapped (_vulkan_buffer_memory_allocator, NULL, device,
+      buffer, format, usage, user_data, notify);
+
+  return (GstMemory *) mem;
+}
+
+G_DEFINE_TYPE (GstVulkanBufferMemoryAllocator,
+    gst_vulkan_buffer_memory_allocator, GST_TYPE_ALLOCATOR);
+
+static void
+    gst_vulkan_buffer_memory_allocator_class_init
+    (GstVulkanBufferMemoryAllocatorClass * klass)
+{
+  GstAllocatorClass *allocator_class = (GstAllocatorClass *) klass;
+
+  allocator_class->alloc = _vk_buffer_mem_alloc;
+  allocator_class->free = _vk_buffer_mem_free;
+}
+
+static void
+gst_vulkan_buffer_memory_allocator_init (GstVulkanBufferMemoryAllocator *
+    allocator)
+{
+  GstAllocator *alloc = GST_ALLOCATOR_CAST (allocator);
+
+  alloc->mem_type = GST_VULKAN_BUFFER_MEMORY_ALLOCATOR_NAME;
+  alloc->mem_map_full = (GstMemoryMapFullFunction) _vk_buffer_mem_map_full;
+  alloc->mem_unmap_full =
+      (GstMemoryUnmapFullFunction) _vk_buffer_mem_unmap_full;
+  alloc->mem_copy = (GstMemoryCopyFunction) _vk_buffer_mem_copy;
+  alloc->mem_share = (GstMemoryShareFunction) _vk_buffer_mem_share;
+  alloc->mem_is_span = (GstMemoryIsSpanFunction) _vk_buffer_mem_is_span;
+}
+
+/**
+ * gst_vulkan_buffer_memory_init_once:
+ *
+ * Initializes the Vulkan memory allocator. It is safe to call this function
+ * multiple times.  This must be called before any other #GstVulkanBufferMemory operation.
+ */
+void
+gst_vulkan_buffer_memory_init_once (void)
+{
+  static volatile gsize _init = 0;
+
+  if (g_once_init_enter (&_init)) {
+    GST_DEBUG_CATEGORY_INIT (GST_CAT_VULKAN_BUFFER_MEMORY, "vulkanbuffermemory",
+        0, "Vulkan Buffer Memory");
+
+    _vulkan_buffer_memory_allocator =
+        g_object_new (gst_vulkan_buffer_memory_allocator_get_type (), NULL);
+
+    gst_allocator_register (GST_VULKAN_BUFFER_MEMORY_ALLOCATOR_NAME,
+        gst_object_ref (_vulkan_buffer_memory_allocator));
+    g_once_init_leave (&_init, 1);
+  }
+}
+
+/**
+ * gst_is_vulkan_buffer_memory:
+ * @mem:a #GstMemory
+ * 
+ * Returns: whether the memory at @mem is a #GstVulkanBufferMemory
+ */
+gboolean
+gst_is_vulkan_buffer_memory (GstMemory * mem)
+{
+  return mem != NULL && mem->allocator != NULL &&
+      g_type_is_a (G_OBJECT_TYPE (mem->allocator),
+      GST_TYPE_VULKAN_BUFFER_MEMORY_ALLOCATOR);
+}
diff --git a/ext/vulkan/vkbuffermemory.h b/ext/vulkan/vkbuffermemory.h
new file mode 100644
index 0000000..3b58282
--- /dev/null
+++ b/ext/vulkan/vkbuffermemory.h
@@ -0,0 +1,102 @@
+/*
+ * GStreamer
+ * Copyright (C) 2015 Matthew Waters <matthew@centricular.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifndef _VK_BUFFER_MEMORY_H_
+#define _VK_BUFFER_MEMORY_H_
+
+#include <gst/gst.h>
+#include <gst/gstallocator.h>
+#include <gst/gstmemory.h>
+
+#include <vk.h>
+
+G_BEGIN_DECLS
+
+#define GST_TYPE_VULKAN_BUFFER_MEMORY_ALLOCATOR (gst_vulkan_buffer_memory_allocator_get_type())
+GType gst_vulkan_buffer_memory_allocator_get_type(void);
+
+#define GST_IS_VULKAN_BUFFER_MEMORY_ALLOCATOR(obj)              (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GST_TYPE_VULKAN_BUFFER_MEMORY_ALLOCATOR))
+#define GST_IS_VULKAN_BUFFER_MEMORY_ALLOCATOR_CLASS(klass)      (G_TYPE_CHECK_CLASS_TYPE ((klass), GST_TYPE_VULKAN_BUFFER_MEMORY_ALLOCATOR))
+#define GST_VULKAN_BUFFER_MEMORY_ALLOCATOR_GET_CLASS(obj)       (G_TYPE_INSTANCE_GET_CLASS ((obj), GST_TYPE_VULKAN_MEMORY_ALLOCATOR, GstVulkanBufferMemoryAllocatorClass))
+#define GST_VULKAN_BUFFER_MEMORY_ALLOCATOR(obj)                 (G_TYPE_CHECK_INSTANCE_CAST ((obj), GST_TYPE_VULKAN_MEMORY_ALLOCATOR, GstVulkanBufferMemoryAllocator))
+#define GST_VULKAN_BUFFER_MEMORY_ALLOCATOR_CLASS(klass)         (G_TYPE_CHECK_CLASS_CAST ((klass), GST_TYPE_VULKAN_MEMORY_ALLOCATOR, GstVulkanBufferMemoryAllocatorClass))
+#define GST_VULKAN_BUFFER_MEMORY_ALLOCATOR_CAST(obj)            ((GstVulkanBufferMemoryAllocator *)(obj))
+
+#define GST_VULKAN_BUFFER_MEMORY_ALLOCATOR_NAME "VulkanBuffer"
+#define GST_CAPS_FEATURE_MEMORY_VULKAN_BUFFER "memory:" GST_VULKAN_BUFFER_MEMORY_ALLOCATOR_NAME
+
+struct _GstVulkanBufferMemory
+{
+  GstMemory parent;
+
+  GstVulkanDevice * device;
+
+  VkBuffer buffer;
+  VkBufferView view;
+  GstVulkanMemory *vk_mem;
+
+  VkMemoryRequirements requirements;
+  VkBufferUsageFlags usage;
+
+  GMutex lock;
+  gboolean wrapped;
+  GDestroyNotify notify;
+  gpointer user_data;
+};
+
+/**
+ * GstVulkanBufferMemoryAllocator
+ *
+ * Opaque #GstVulkanBufferMemoryAllocator struct
+ */
+struct _GstVulkanBufferMemoryAllocator
+{
+  GstAllocator parent;
+};
+
+/**
+ * GstVulkanBufferMemoryAllocatorClass:
+ *
+ * The #GstVulkanBufferMemoryAllocatorClass only contains private data
+ */
+struct _GstVulkanBufferMemoryAllocatorClass
+{
+  GstAllocatorClass parent_class;
+};
+
+void            gst_vulkan_buffer_memory_init_once       (void);
+gboolean        gst_is_vulkan_buffer_memory              (GstMemory * mem);
+
+GstMemory *     gst_vulkan_buffer_memory_alloc           (GstVulkanDevice * device,
+                                                         VkFormat format,
+                                                         gsize size,
+                                                         VkBufferUsageFlags usage,
+                                                         VkMemoryPropertyFlags mem_prop_flags);
+
+GstMemory *     gst_vulkan_buffer_memory_wrapped         (GstVulkanDevice * device,
+                                                         VkBuffer buffer,
+                                                         VkFormat format,
+                                                         VkBufferUsageFlags usage,
+                                                         gpointer user_data,
+                                                         GDestroyNotify notify);
+
+G_END_DECLS
+
+#endif /* _VK_BUFFER_MEMORY_H_ */
diff --git a/ext/vulkan/vkbufferpool.c b/ext/vulkan/vkbufferpool.c
new file mode 100644
index 0000000..01fb2fb
--- /dev/null
+++ b/ext/vulkan/vkbufferpool.c
@@ -0,0 +1,256 @@
+/*
+ * GStreamer
+ * Copyright (C) 2016 Matthew Waters <matthew@centricular.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include "vkbufferpool.h"
+
+/**
+ * SECTION:vkbufferpool
+ * @short_description: buffer pool for #GstVulkanBufferMemory objects
+ * @see_also: #GstBufferPool, #GstVulkanBufferMemory
+ *
+ * a #GstVulkanBufferPool is an object that allocates buffers with #GstVulkanBufferMemory
+ *
+ * A #GstVulkanBufferPool is created with gst_vulkan_buffer_pool_new()
+ *
+ * #GstVulkanBufferPool implements the VideoMeta buffer pool option 
+ * #GST_BUFFER_POOL_OPTION_VIDEO_META
+ */
+
+/* bufferpool */
+struct _GstVulkanBufferPoolPrivate
+{
+  GstCaps *caps;
+  GstVideoInfo v_info;
+  gboolean add_videometa;
+  gsize alloc_sizes[GST_VIDEO_MAX_PLANES];
+};
+
+static void gst_vulkan_buffer_pool_finalize (GObject * object);
+
+GST_DEBUG_CATEGORY_STATIC (GST_CAT_VULKAN_BUFFER_POOL);
+#define GST_CAT_DEFAULT GST_CAT_VULKAN_BUFFER_POOL
+
+#define GST_VULKAN_BUFFER_POOL_GET_PRIVATE(obj)  \
+   (G_TYPE_INSTANCE_GET_PRIVATE ((obj), GST_TYPE_VULKAN_BUFFER_POOL, GstVulkanBufferPoolPrivate))
+
+#define gst_vulkan_buffer_pool_parent_class parent_class
+G_DEFINE_TYPE_WITH_CODE (GstVulkanBufferPool, gst_vulkan_buffer_pool,
+    GST_TYPE_BUFFER_POOL, GST_DEBUG_CATEGORY_INIT (GST_CAT_VULKAN_BUFFER_POOL,
+        "vulkanbufferpool", 0, "Vulkan Buffer Pool"));
+
+static const gchar **
+gst_vulkan_buffer_pool_get_options (GstBufferPool * pool)
+{
+  static const gchar *options[] = { GST_BUFFER_POOL_OPTION_VIDEO_META,
+    NULL
+  };
+
+  return options;
+}
+
+static gboolean
+gst_vulkan_buffer_pool_set_config (GstBufferPool * pool, GstStructure * config)
+{
+  GstVulkanBufferPool *vk_pool = GST_VULKAN_BUFFER_POOL_CAST (pool);
+  GstVulkanBufferPoolPrivate *priv = vk_pool->priv;
+  guint min_buffers, max_buffers;
+  GstCaps *caps = NULL;
+  gboolean ret = TRUE;
+  guint i;
+
+  if (!gst_buffer_pool_config_get_params (config, &caps, NULL, &min_buffers,
+          &max_buffers))
+    goto wrong_config;
+
+  if (caps == NULL)
+    goto no_caps;
+
+  /* now parse the caps from the config */
+  if (!gst_video_info_from_caps (&priv->v_info, caps))
+    goto wrong_caps;
+
+  GST_LOG_OBJECT (pool, "%dx%d, caps %" GST_PTR_FORMAT, priv->v_info.width,
+      priv->v_info.height, caps);
+
+  gst_caps_replace (&priv->caps, caps);
+
+  /* get the size of the buffer to allocate */
+  for (i = 0; i < GST_VIDEO_INFO_N_PLANES (&priv->v_info); i++) {
+    GstVideoFormat v_format = GST_VIDEO_INFO_FORMAT (&priv->v_info);
+    GstVulkanImageMemory *img_mem;
+    guint width, height;
+    VkFormat vk_format;
+
+    vk_format = gst_vulkan_format_from_video_format (v_format, i);
+    width = GST_VIDEO_INFO_WIDTH (&priv->v_info);
+    height = GST_VIDEO_INFO_HEIGHT (&priv->v_info);
+
+    img_mem = (GstVulkanImageMemory *)
+        gst_vulkan_image_memory_alloc (vk_pool->device, vk_format, width,
+        height, VK_IMAGE_TILING_OPTIMAL,
+        VK_IMAGE_USAGE_TRANSFER_DST_BIT | VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT,
+        VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT);
+
+    priv->alloc_sizes[i] = img_mem->requirements.size;
+
+    gst_memory_unref (GST_MEMORY_CAST (img_mem));
+  }
+
+  priv->add_videometa = gst_buffer_pool_config_has_option (config,
+      GST_BUFFER_POOL_OPTION_VIDEO_META);
+
+  gst_buffer_pool_config_set_params (config, caps,
+      priv->v_info.size, min_buffers, max_buffers);
+
+  return GST_BUFFER_POOL_CLASS (parent_class)->set_config (pool, config) && ret;
+
+  /* ERRORS */
+wrong_config:
+  {
+    GST_WARNING_OBJECT (pool, "invalid config");
+    return FALSE;
+  }
+no_caps:
+  {
+    GST_WARNING_OBJECT (pool, "no caps in config");
+    return FALSE;
+  }
+wrong_caps:
+  {
+    GST_WARNING_OBJECT (pool,
+        "failed getting geometry from caps %" GST_PTR_FORMAT, caps);
+    return FALSE;
+  }
+}
+
+/* This function handles GstBuffer creation */
+static GstFlowReturn
+gst_vulkan_buffer_pool_alloc (GstBufferPool * pool, GstBuffer ** buffer,
+    GstBufferPoolAcquireParams * params)
+{
+  GstVulkanBufferPool *vk_pool = GST_VULKAN_BUFFER_POOL_CAST (pool);
+  GstVulkanBufferPoolPrivate *priv = vk_pool->priv;
+  GstBuffer *buf;
+  guint i;
+
+  if (!(buf = gst_buffer_new ())) {
+    goto no_buffer;
+  }
+
+  for (i = 0; i < GST_VIDEO_INFO_N_PLANES (&priv->v_info); i++) {
+    GstVideoFormat v_format = GST_VIDEO_INFO_FORMAT (&priv->v_info);
+    VkFormat vk_format;
+    GstMemory *mem;
+
+    vk_format = gst_vulkan_format_from_video_format (v_format, i);
+
+    mem = gst_vulkan_buffer_memory_alloc (vk_pool->device,
+        vk_format, priv->alloc_sizes[i],
+        VK_BUFFER_USAGE_TRANSFER_SRC_BIT | VK_BUFFER_USAGE_TRANSFER_DST_BIT,
+        VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT);
+    if (!mem) {
+      gst_buffer_unref (buf);
+      goto mem_create_failed;
+    }
+
+    gst_buffer_append_memory (buf, mem);
+  }
+
+  *buffer = buf;
+
+  return GST_FLOW_OK;
+
+  /* ERROR */
+no_buffer:
+  {
+    GST_WARNING_OBJECT (pool, "can't create image");
+    return GST_FLOW_ERROR;
+  }
+mem_create_failed:
+  {
+    GST_WARNING_OBJECT (pool, "Could not create Vulkan Memory");
+    return GST_FLOW_ERROR;
+  }
+}
+
+/**
+ * gst_vulkan_buffer_pool_new:
+ * @context: the #GstGLContext to use
+ *
+ * Returns: a #GstBufferPool that allocates buffers with #GstGLMemory
+ */
+GstBufferPool *
+gst_vulkan_buffer_pool_new (GstVulkanDevice * device)
+{
+  GstVulkanBufferPool *pool;
+
+  pool = g_object_new (GST_TYPE_VULKAN_BUFFER_POOL, NULL);
+  pool->device = gst_object_ref (device);
+
+  GST_LOG_OBJECT (pool, "new Vulkan buffer pool for device %" GST_PTR_FORMAT,
+      device);
+
+  return GST_BUFFER_POOL_CAST (pool);
+}
+
+static void
+gst_vulkan_buffer_pool_class_init (GstVulkanBufferPoolClass * klass)
+{
+  GObjectClass *gobject_class = (GObjectClass *) klass;
+  GstBufferPoolClass *gstbufferpool_class = (GstBufferPoolClass *) klass;
+
+  g_type_class_add_private (klass, sizeof (GstVulkanBufferPoolPrivate));
+
+  gobject_class->finalize = gst_vulkan_buffer_pool_finalize;
+
+  gstbufferpool_class->get_options = gst_vulkan_buffer_pool_get_options;
+  gstbufferpool_class->set_config = gst_vulkan_buffer_pool_set_config;
+  gstbufferpool_class->alloc_buffer = gst_vulkan_buffer_pool_alloc;
+}
+
+static void
+gst_vulkan_buffer_pool_init (GstVulkanBufferPool * pool)
+{
+  pool->priv = GST_VULKAN_BUFFER_POOL_GET_PRIVATE (pool);
+}
+
+static void
+gst_vulkan_buffer_pool_finalize (GObject * object)
+{
+  GstVulkanBufferPool *pool = GST_VULKAN_BUFFER_POOL_CAST (object);
+  GstVulkanBufferPoolPrivate *priv = pool->priv;
+
+  GST_LOG_OBJECT (pool, "finalize Vulkan buffer pool %p", pool);
+
+  if (priv->caps)
+    gst_caps_unref (priv->caps);
+
+  G_OBJECT_CLASS (gst_vulkan_buffer_pool_parent_class)->finalize (object);
+
+  /* only release the context once all our memory have been deleted */
+  if (pool->device) {
+    gst_object_unref (pool->device);
+    pool->device = NULL;
+  }
+}
diff --git a/ext/vulkan/vkbufferpool.h b/ext/vulkan/vkbufferpool.h
new file mode 100644
index 0000000..5dd4baf
--- /dev/null
+++ b/ext/vulkan/vkbufferpool.h
@@ -0,0 +1,67 @@
+/*
+ * GStreamer
+ * Copyright (C) 2016 Matthew Waters <matthew@centricular.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifndef _GST_VULKAN_BUFFER_POOL_H_
+#define _GST_VULKAN_BUFFER_POOL_H_
+
+#include <gst/video/video.h>
+#include <gst/video/gstvideometa.h>
+#include <gst/video/gstvideopool.h>
+
+#include <vk.h>
+
+G_BEGIN_DECLS
+
+/* buffer pool functions */
+GType gst_vulkan_buffer_pool_get_type (void);
+#define GST_TYPE_VULKAN_BUFFER_POOL      (gst_vulkan_buffer_pool_get_type())
+#define GST_IS_VULKAN_BUFFER_POOL(obj)   (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GST_TYPE_VULKAN_BUFFER_POOL))
+#define GST_VULKAN_BUFFER_POOL(obj)      (G_TYPE_CHECK_INSTANCE_CAST ((obj), GST_TYPE_VULKAN_BUFFER_POOL, GstVulkanBufferPool))
+#define GST_VULKAN_BUFFER_POOL_CAST(obj) ((GstVulkanBufferPool*)(obj))
+
+/**
+ * GstVulkanBufferPool:
+ *
+ * Opaque GstVulkanBufferPool struct
+ */
+struct _GstVulkanBufferPool
+{
+  GstBufferPool bufferpool;
+
+  GstVulkanDevice *device;
+
+  GstVulkanBufferPoolPrivate *priv;
+};
+
+/**
+ * GstVulkanBufferPoolClass:
+ *
+ * The #GstVulkanBufferPoolClass structure contains only private data
+ */
+struct _GstVulkanBufferPoolClass
+{
+  GstBufferPoolClass parent_class;
+};
+
+GstBufferPool *gst_vulkan_buffer_pool_new (GstVulkanDevice * device);
+
+G_END_DECLS
+
+#endif /* _GST_VULKAN_BUFFER_POOL_H_ */
diff --git a/ext/vulkan/vkdevice.c b/ext/vulkan/vkdevice.c
new file mode 100644
index 0000000..8814d60
--- /dev/null
+++ b/ext/vulkan/vkdevice.c
@@ -0,0 +1,549 @@
+/*
+ * GStreamer
+ * Copyright (C) 2015 Matthew Waters <matthew@centricular.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include "vkdevice.h"
+#include "vkutils_private.h"
+
+#include <string.h>
+
+static const char *device_validation_layers[] = {
+  "VK_LAYER_LUNARG_threading",
+  "VK_LAYER_LUNARG_mem_tracker",
+  "VK_LAYER_LUNARG_object_tracker",
+  "VK_LAYER_LUNARG_draw_state",
+  "VK_LAYER_LUNARG_param_checker",
+  "VK_LAYER_LUNARG_swapchain",
+  "VK_LAYER_LUNARG_device_limits",
+  "VK_LAYER_LUNARG_image",
+};
+
+#define GST_CAT_DEFAULT gst_vulkan_device_debug
+GST_DEBUG_CATEGORY (GST_CAT_DEFAULT);
+GST_DEBUG_CATEGORY_STATIC (GST_CAT_CONTEXT);
+
+#define gst_vulkan_device_parent_class parent_class
+G_DEFINE_TYPE_WITH_CODE (GstVulkanDevice, gst_vulkan_device, GST_TYPE_OBJECT,
+    GST_DEBUG_CATEGORY_INIT (GST_CAT_DEFAULT, "vulkandevice", 0,
+        "Vulkan Device");
+    GST_DEBUG_CATEGORY_GET (GST_CAT_CONTEXT, "GST_CONTEXT"));
+
+static void gst_vulkan_device_finalize (GObject * object);
+
+struct _GstVulkanDevicePrivate
+{
+  gboolean opened;
+};
+
+GstVulkanDevice *
+gst_vulkan_device_new (GstVulkanInstance * instance)
+{
+  GstVulkanDevice *device = g_object_new (GST_TYPE_VULKAN_DEVICE, NULL);
+
+  device->instance = gst_object_ref (instance);
+  /* FIXME: select this externally */
+  device->device_index = 0;
+
+  return device;
+}
+
+static void
+gst_vulkan_device_init (GstVulkanDevice * device)
+{
+  device->priv = G_TYPE_INSTANCE_GET_PRIVATE ((device),
+      GST_TYPE_VULKAN_DEVICE, GstVulkanDevicePrivate);
+}
+
+static void
+gst_vulkan_device_class_init (GstVulkanDeviceClass * device_class)
+{
+  GObjectClass *gobject_class = (GObjectClass *) device_class;
+
+  g_type_class_add_private (device_class, sizeof (GstVulkanDevicePrivate));
+
+  gobject_class->finalize = gst_vulkan_device_finalize;
+}
+
+static void
+gst_vulkan_device_finalize (GObject * object)
+{
+  GstVulkanDevice *device = GST_VULKAN_DEVICE (object);
+
+  g_free (device->queue_family_props);
+  device->queue_family_props = NULL;
+
+  if (device->cmd_pool)
+    vkDestroyCommandPool (device->device, device->cmd_pool, NULL);
+  device->cmd_pool = VK_NULL_HANDLE;
+
+  if (device->device) {
+    vkDeviceWaitIdle (device->device);
+    vkDestroyDevice (device->device, NULL);
+  }
+  device->device = VK_NULL_HANDLE;
+
+  if (device->instance)
+    gst_object_unref (device->instance);
+  device->instance = VK_NULL_HANDLE;
+
+  G_OBJECT_CLASS (parent_class)->finalize (object);
+}
+
+static const gchar *
+_device_type_to_string (VkPhysicalDeviceType type)
+{
+  switch (type) {
+    case VK_PHYSICAL_DEVICE_TYPE_OTHER:
+      return "other";
+    case VK_PHYSICAL_DEVICE_TYPE_INTEGRATED_GPU:
+      return "integrated";
+    case VK_PHYSICAL_DEVICE_TYPE_DISCRETE_GPU:
+      return "discrete";
+    case VK_PHYSICAL_DEVICE_TYPE_VIRTUAL_GPU:
+      return "virtual";
+    case VK_PHYSICAL_DEVICE_TYPE_CPU:
+      return "CPU";
+    default:
+      return "unknown";
+  }
+}
+
+static gboolean
+_physical_device_info (GstVulkanDevice * device, GError ** error)
+{
+  VkPhysicalDeviceProperties props;
+  VkPhysicalDevice gpu;
+
+  gpu = gst_vulkan_device_get_physical_device (device);
+  if (!gpu) {
+    g_set_error (error, GST_VULKAN_ERROR, VK_ERROR_INITIALIZATION_FAILED,
+        "Failed to retrieve physical device");
+    return FALSE;
+  }
+
+  vkGetPhysicalDeviceProperties (gpu, &props);
+
+  GST_INFO_OBJECT (device, "device name %s type %s api version %u, "
+      "driver version %u vendor ID 0x%x, device ID 0x%x", props.deviceName,
+      _device_type_to_string (props.deviceType), props.apiVersion,
+      props.driverVersion, props.vendorID, props.deviceID);
+
+  return TRUE;
+}
+
+gboolean
+gst_vulkan_device_open (GstVulkanDevice * device, GError ** error)
+{
+  const char *extension_names[64];
+  uint32_t enabled_extension_count = 0;
+  uint32_t device_extension_count = 0;
+  VkExtensionProperties *device_extensions = NULL;
+  uint32_t enabled_layer_count = 0;
+  uint32_t device_layer_count = 0;
+  VkLayerProperties *device_layers;
+  gboolean have_swapchain_ext;
+  gboolean validation_found;
+  VkPhysicalDevice gpu;
+  VkResult err;
+  guint i;
+
+  g_return_val_if_fail (GST_IS_VULKAN_DEVICE (device), FALSE);
+
+  GST_OBJECT_LOCK (device);
+
+  if (device->priv->opened) {
+    GST_OBJECT_UNLOCK (device);
+    return TRUE;
+  }
+
+  if (!_physical_device_info (device, error))
+    goto error;
+
+  gpu = gst_vulkan_device_get_physical_device (device);
+
+  /* Look for validation layers */
+  err = vkEnumerateDeviceLayerProperties (gpu, &device_layer_count, NULL);
+  if (gst_vulkan_error_to_g_error (err, error,
+          "vkEnumerateDeviceLayerProperties") < 0)
+    goto error;
+
+  device_layers = g_new0 (VkLayerProperties, device_layer_count);
+  err =
+      vkEnumerateDeviceLayerProperties (gpu, &device_layer_count,
+      device_layers);
+  if (gst_vulkan_error_to_g_error (err, error,
+          "vkEnumerateDeviceLayerProperties") < 0) {
+    g_free (device_layers);
+    goto error;
+  }
+
+  validation_found =
+      _check_for_all_layers (G_N_ELEMENTS (device_validation_layers),
+      device_validation_layers, device_layer_count, device_layers);
+  g_free (device_layers);
+  device_layers = NULL;
+  if (!validation_found) {
+    g_error ("vkEnumerateDeviceLayerProperties failed to find"
+        "a required validation layer.\n\n"
+        "Please look at the Getting Started guide for additional "
+        "information.\nvkCreateDevice Failure");
+    goto error;
+  }
+  enabled_layer_count = G_N_ELEMENTS (device_validation_layers);
+
+  err =
+      vkEnumerateDeviceExtensionProperties (gpu, NULL,
+      &device_extension_count, NULL);
+  if (gst_vulkan_error_to_g_error (err, error,
+          "vkEnumerateDeviceExtensionProperties") < 0)
+    goto error;
+  GST_DEBUG_OBJECT (device, "Found %u extensions", device_extension_count);
+
+  have_swapchain_ext = 0;
+  enabled_extension_count = 0;
+  memset (extension_names, 0, sizeof (extension_names));
+  device_extensions = g_new0 (VkExtensionProperties, device_extension_count);
+  err = vkEnumerateDeviceExtensionProperties (gpu, NULL,
+      &device_extension_count, device_extensions);
+  if (gst_vulkan_error_to_g_error (err, error,
+          "vkEnumerateDeviceExtensionProperties") < 0) {
+    g_free (device_extensions);
+    goto error;
+  }
+
+  for (uint32_t i = 0; i < device_extension_count; i++) {
+    GST_TRACE_OBJECT (device, "checking device extension %s",
+        device_extensions[i].extensionName);
+    if (!strcmp (VK_KHR_SWAPCHAIN_EXTENSION_NAME,
+            device_extensions[i].extensionName)) {
+      have_swapchain_ext = TRUE;
+      extension_names[enabled_extension_count++] =
+          (gchar *) VK_KHR_SWAPCHAIN_EXTENSION_NAME;
+    }
+    g_assert (enabled_extension_count < 64);
+  }
+  if (!have_swapchain_ext) {
+    g_error ("vkEnumerateDeviceExtensionProperties failed to find the \""
+        VK_KHR_SWAPCHAIN_EXTENSION_NAME
+        "\" extension.\n\nDo you have a compatible "
+        "Vulkan installable client driver (ICD) installed?\nPlease "
+        "look at the Getting Started guide for additional "
+        "information.\nvkCreateInstance Failure");
+  }
+  g_free (device_extensions);
+
+  vkGetPhysicalDeviceProperties (gpu, &device->gpu_props);
+  vkGetPhysicalDeviceMemoryProperties (gpu, &device->memory_properties);
+  vkGetPhysicalDeviceFeatures (gpu, &device->gpu_features);
+
+  vkGetPhysicalDeviceQueueFamilyProperties (gpu, &device->n_queue_families,
+      NULL);
+  g_assert (device->n_queue_families >= 1);
+
+  device->queue_family_props =
+      g_new0 (VkQueueFamilyProperties, device->n_queue_families);
+  vkGetPhysicalDeviceQueueFamilyProperties (gpu, &device->n_queue_families,
+      device->queue_family_props);
+
+  /* FIXME: allow overriding/selecting */
+  for (i = 0; i < device->n_queue_families; i++) {
+    if (device->queue_family_props[i].queueFlags & VK_QUEUE_GRAPHICS_BIT)
+      break;
+  }
+  if (i >= device->n_queue_families) {
+    g_set_error (error, GST_VULKAN_ERROR, VK_ERROR_INITIALIZATION_FAILED,
+        "Failed to find a compatible queue family");
+    goto error;
+  }
+  device->queue_family_id = i;
+  device->n_queues = 1;
+
+  {
+    VkDeviceQueueCreateInfo queue_info = { 0, };
+    VkDeviceCreateInfo device_info = { 0, };
+    gfloat queue_priority = 0.5;
+
+    queue_info.sType = VK_STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO;
+    queue_info.pNext = NULL;
+    queue_info.queueFamilyIndex = device->queue_family_id;
+    queue_info.queueCount = device->n_queues;
+    queue_info.pQueuePriorities = &queue_priority;
+
+    device_info.sType = VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO;
+    device_info.pNext = NULL;
+    device_info.queueCreateInfoCount = 1;
+    device_info.pQueueCreateInfos = &queue_info;
+    device_info.enabledLayerCount = enabled_layer_count;
+    device_info.ppEnabledLayerNames =
+        (const char *const *) device_validation_layers;
+    device_info.enabledExtensionCount = enabled_extension_count;
+    device_info.ppEnabledExtensionNames = (const char *const *) extension_names;
+    device_info.pEnabledFeatures = NULL;
+
+    err = vkCreateDevice (gpu, &device_info, NULL, &device->device);
+    if (gst_vulkan_error_to_g_error (err, error, "vkCreateDevice") < 0)
+      goto error;
+  }
+  {
+    VkCommandPoolCreateInfo cmd_pool_info = { 0, };
+
+    cmd_pool_info.sType = VK_STRUCTURE_TYPE_COMMAND_POOL_CREATE_INFO;
+    cmd_pool_info.pNext = NULL;
+    cmd_pool_info.queueFamilyIndex = device->queue_family_id;
+    cmd_pool_info.flags = 0;
+
+    err =
+        vkCreateCommandPool (device->device, &cmd_pool_info, NULL,
+        &device->cmd_pool);
+    if (gst_vulkan_error_to_g_error (err, error, "vkCreateCommandPool") < 0)
+      goto error;
+  }
+
+  GST_OBJECT_UNLOCK (device);
+  return TRUE;
+
+error:
+  {
+    GST_OBJECT_UNLOCK (device);
+    return FALSE;
+  }
+}
+
+GstVulkanQueue *
+gst_vulkan_device_get_queue (GstVulkanDevice * device, guint32 queue_family,
+    guint32 queue_i)
+{
+  GstVulkanQueue *ret;
+
+  g_return_val_if_fail (GST_IS_VULKAN_DEVICE (device), NULL);
+  g_return_val_if_fail (device->device != NULL, NULL);
+  g_return_val_if_fail (queue_family < device->n_queues, NULL);
+  g_return_val_if_fail (queue_i <
+      device->queue_family_props[queue_family].queueCount, NULL);
+
+  ret = g_object_new (GST_TYPE_VULKAN_QUEUE, NULL);
+  ret->device = gst_object_ref (device);
+  ret->family = queue_family;
+  ret->index = queue_i;
+
+  vkGetDeviceQueue (device->device, queue_family, queue_i, &ret->queue);
+
+  return ret;
+}
+
+void
+gst_vulkan_device_foreach_queue (GstVulkanDevice * device,
+    GstVulkanDeviceForEachQueueFunc func, gpointer user_data)
+{
+  gboolean done = FALSE;
+  guint i;
+
+  for (i = 0; i < device->n_queues; i++) {
+    GstVulkanQueue *queue =
+        gst_vulkan_device_get_queue (device, device->queue_family_id, i);
+
+    if (!func (device, queue, user_data))
+      done = TRUE;
+
+    gst_object_unref (queue);
+
+    if (done)
+      break;
+  }
+}
+
+gpointer
+gst_vulkan_device_get_proc_address (GstVulkanDevice * device,
+    const gchar * name)
+{
+  g_return_val_if_fail (GST_IS_VULKAN_DEVICE (device), NULL);
+  g_return_val_if_fail (device->device != NULL, NULL);
+  g_return_val_if_fail (name != NULL, NULL);
+
+  GST_TRACE_OBJECT (device, "%s", name);
+
+  return vkGetDeviceProcAddr (device->device, name);
+}
+
+GstVulkanInstance *
+gst_vulkan_device_get_instance (GstVulkanDevice * device)
+{
+  g_return_val_if_fail (GST_IS_VULKAN_DEVICE (device), NULL);
+
+  return device->instance ? gst_object_ref (device->instance) : NULL;
+}
+
+VkPhysicalDevice
+gst_vulkan_device_get_physical_device (GstVulkanDevice * device)
+{
+  g_return_val_if_fail (GST_IS_VULKAN_DEVICE (device), NULL);
+
+  if (device->instance->physical_devices == NULL)
+    return NULL;
+  if (device->device_index >= device->instance->n_physical_devices)
+    return NULL;
+
+  return device->instance->physical_devices[device->device_index];
+}
+
+gboolean
+gst_vulkan_device_create_cmd_buffer (GstVulkanDevice * device,
+    VkCommandBuffer * cmd, GError ** error)
+{
+  VkResult err;
+  VkCommandBufferAllocateInfo cmd_info = { 0, };
+
+  cmd_info.sType = VK_STRUCTURE_TYPE_COMMAND_BUFFER_ALLOCATE_INFO;
+  cmd_info.pNext = NULL;
+  cmd_info.commandPool = device->cmd_pool;
+  cmd_info.level = VK_COMMAND_BUFFER_LEVEL_PRIMARY;
+  cmd_info.commandBufferCount = 1;
+
+  err = vkAllocateCommandBuffers (device->device, &cmd_info, cmd);
+  if (gst_vulkan_error_to_g_error (err, error, "vkCreateCommandBuffer") < 0)
+    return FALSE;
+
+  GST_LOG_OBJECT (device, "created cmd buffer %p", cmd);
+
+  return TRUE;
+}
+
+/**
+ * gst_context_set_vulkan_device:
+ * @context: a #GstContext
+ * @device: a #GstVulkanDevice
+ *
+ * Sets @device on @context
+ *
+ * Since: 1.10
+ */
+void
+gst_context_set_vulkan_device (GstContext * context, GstVulkanDevice * device)
+{
+  GstStructure *s;
+
+  g_return_if_fail (context != NULL);
+  g_return_if_fail (gst_context_is_writable (context));
+
+  if (device)
+    GST_CAT_LOG (GST_CAT_CONTEXT,
+        "setting GstVulkanDevice(%" GST_PTR_FORMAT ") on context(%"
+        GST_PTR_FORMAT ")", device, context);
+
+  s = gst_context_writable_structure (context);
+  gst_structure_set (s, GST_VULKAN_DEVICE_CONTEXT_TYPE_STR,
+      GST_TYPE_VULKAN_DEVICE, device, NULL);
+}
+
+/**
+ * gst_context_get_vulkan_device:
+ * @context: a #GstContext
+ * @device: resulting #GstVulkanDevice
+ *
+ * Returns: Whether @device was in @context
+ *
+ * Since: 1.10
+ */
+gboolean
+gst_context_get_vulkan_device (GstContext * context, GstVulkanDevice ** device)
+{
+  const GstStructure *s;
+  gboolean ret;
+
+  g_return_val_if_fail (device != NULL, FALSE);
+  g_return_val_if_fail (context != NULL, FALSE);
+
+  s = gst_context_get_structure (context);
+  ret = gst_structure_get (s, GST_VULKAN_DEVICE_CONTEXT_TYPE_STR,
+      GST_TYPE_VULKAN_DEVICE, device, NULL);
+
+  GST_CAT_LOG (GST_CAT_CONTEXT, "got GstVulkanDevice(%" GST_PTR_FORMAT
+      ") from context(%" GST_PTR_FORMAT ")", *device, context);
+
+  return ret;
+}
+
+gboolean
+gst_vulkan_device_handle_context_query (GstElement * element, GstQuery * query,
+    GstVulkanDevice ** device)
+{
+  gboolean res = FALSE;
+  const gchar *context_type;
+  GstContext *context, *old_context;
+
+  g_return_val_if_fail (element != NULL, FALSE);
+  g_return_val_if_fail (query != NULL, FALSE);
+  g_return_val_if_fail (GST_QUERY_TYPE (query) == GST_QUERY_CONTEXT, FALSE);
+  g_return_val_if_fail (device != NULL, FALSE);
+
+  gst_query_parse_context_type (query, &context_type);
+
+  if (g_strcmp0 (context_type, GST_VULKAN_DEVICE_CONTEXT_TYPE_STR) == 0) {
+    gst_query_parse_context (query, &old_context);
+
+    if (old_context)
+      context = gst_context_copy (old_context);
+    else
+      context = gst_context_new (GST_VULKAN_DEVICE_CONTEXT_TYPE_STR, TRUE);
+
+    gst_context_set_vulkan_device (context, *device);
+    gst_query_set_context (query, context);
+    gst_context_unref (context);
+
+    res = *device != NULL;
+  }
+
+  return res;
+}
+
+gboolean
+gst_vulkan_device_run_context_query (GstElement * element,
+    GstVulkanDevice ** device)
+{
+  GstQuery *query;
+
+  g_return_val_if_fail (GST_IS_ELEMENT (element), FALSE);
+  g_return_val_if_fail (device != NULL, FALSE);
+
+  if (*device && GST_IS_VULKAN_DEVICE (*device))
+    return TRUE;
+
+  if ((query =
+          gst_vulkan_local_context_query (element,
+              GST_VULKAN_DEVICE_CONTEXT_TYPE_STR, FALSE))) {
+    GstContext *context;
+
+    gst_query_parse_context (query, &context);
+    if (context)
+      gst_context_get_vulkan_device (context, device);
+  }
+
+  GST_DEBUG_OBJECT (element, "found device %p", *device);
+
+  gst_query_unref (query);
+
+  if (*device)
+    return TRUE;
+
+  return FALSE;
+}
diff --git a/ext/vulkan/vkdevice.h b/ext/vulkan/vkdevice.h
new file mode 100644
index 0000000..b2b1065
--- /dev/null
+++ b/ext/vulkan/vkdevice.h
@@ -0,0 +1,99 @@
+/*
+ * GStreamer
+ * Copyright (C) 2015 Matthew Waters <matthew@centricular.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifndef _VK_DEVICE_H_
+#define _VK_DEVICE_H_
+
+#include <gst/gst.h>
+#include "vk.h"
+
+G_BEGIN_DECLS
+
+#define GST_TYPE_VULKAN_DEVICE         (gst_vulkan_device_get_type())
+#define GST_VULKAN_DEVICE(o)           (G_TYPE_CHECK_INSTANCE_CAST((o), GST_TYPE_VULKAN_DEVICE, GstVulkanDevice))
+#define GST_VULKAN_DEVICE_CLASS(k)     (G_TYPE_CHECK_CLASS_CAST((k), GST_TYPE_VULKAN_DEVICE, GstVulkanDeviceClass))
+#define GST_IS_VULKAN_DEVICE(o)        (G_TYPE_CHECK_INSTANCE_TYPE((o), GST_TYPE_VULKAN_DEVICE))
+#define GST_IS_VULKAN_DEVICE_CLASS(k)  (G_TYPE_CHECK_CLASS_TYPE((k), GST_TYPE_VULKAN_DEVICE))
+#define GST_VULKAN_DEVICE_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS((o), GST_TYPE_VULKAN_DEVICE, GstVulkanDeviceClass))
+GType gst_vulkan_device_get_type       (void);
+
+#define GST_VULKAN_DEVICE_CONTEXT_TYPE_STR "gst.vulkan.device"
+
+typedef gboolean (*GstVulkanDeviceForEachQueueFunc) (GstVulkanDevice * device, GstVulkanQueue * queue, gpointer user_data);
+
+struct _GstVulkanDevice
+{
+  GstObject parent;
+
+  GstVulkanInstance *instance;
+
+  guint device_index;
+  VkDevice device; /* hides a pointer */
+  VkPhysicalDeviceProperties gpu_props;
+  VkPhysicalDeviceFeatures gpu_features;
+  VkPhysicalDeviceMemoryProperties memory_properties;
+
+  VkQueueFamilyProperties *queue_family_props;
+  guint32 n_queue_families;
+
+  guint32 queue_family_id;
+  guint32 n_queues;
+
+  VkCommandPool cmd_pool;
+
+  GstVulkanDevicePrivate *priv;
+};
+
+struct _GstVulkanDeviceClass
+{
+  GstObjectClass parent_class;
+};
+
+GstVulkanDevice *   gst_vulkan_device_new                   (GstVulkanInstance * instance);
+GstVulkanInstance * gst_vulkan_device_get_instance           (GstVulkanDevice * device);
+gboolean            gst_vulkan_device_open                  (GstVulkanDevice * device,
+                                                             GError ** error);
+
+gpointer            gst_vulkan_device_get_proc_address      (GstVulkanDevice * device,
+                                                             const gchar * name);
+void                gst_vulkan_device_foreach_queue         (GstVulkanDevice * device,
+                                                             GstVulkanDeviceForEachQueueFunc func,
+                                                             gpointer user_data);
+GstVulkanQueue *    gst_vulkan_device_get_queue             (GstVulkanDevice * device,
+                                                             guint32 queue_family,
+                                                             guint32 queue_i);
+VkPhysicalDevice    gst_vulkan_device_get_physical_device   (GstVulkanDevice * device);
+gboolean            gst_vulkan_device_create_cmd_buffer     (GstVulkanDevice * device,
+                                                             VkCommandBuffer * cmd,
+                                                             GError ** error);
+
+void                gst_context_set_vulkan_device           (GstContext * context,
+                                                             GstVulkanDevice * device);
+gboolean            gst_context_get_vulkan_device           (GstContext * context,
+                                                             GstVulkanDevice ** device);
+gboolean            gst_vulkan_device_handle_context_query  (GstElement * element,
+                                                             GstQuery * query,
+                                                             GstVulkanDevice ** device);
+gboolean            gst_vulkan_device_run_context_query     (GstElement * element,
+                                                             GstVulkanDevice ** device);
+
+G_END_DECLS
+
+#endif /* _VK_DEVICE_H_ */
diff --git a/ext/vulkan/vkdisplay.c b/ext/vulkan/vkdisplay.c
new file mode 100644
index 0000000..a066821
--- /dev/null
+++ b/ext/vulkan/vkdisplay.c
@@ -0,0 +1,466 @@
+/*
+ * GStreamer
+ * Copyright (C) 2007 David A. Schleef <ds@schleef.org>
+ * Copyright (C) 2008 Julien Isorce <julien.isorce@gmail.com>
+ * Copyright (C) 2008 Filippo Argiolas <filippo.argiolas@gmail.com>
+ * Copyright (C) 2013 Matthew Waters <ystreet00@gmail.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include "vkdisplay.h"
+
+#if GST_VULKAN_HAVE_WINDOW_X11
+#include "x11/vkdisplay_x11.h"
+#endif
+#if GST_VULKAN_HAVE_WINDOW_XCB
+#include "xcb/vkdisplay_xcb.h"
+#endif
+
+GST_DEBUG_CATEGORY_STATIC (GST_CAT_CONTEXT);
+#define GST_CAT_DEFAULT gst_vulkan_display_debug
+GST_DEBUG_CATEGORY_STATIC (GST_CAT_DEFAULT);
+
+static void
+_init_debug (void)
+{
+  static volatile gsize _init = 0;
+
+  if (g_once_init_enter (&_init)) {
+    GST_DEBUG_CATEGORY_INIT (GST_CAT_DEFAULT, "vulkandisplay", 0,
+        "Vulkan display");
+    GST_DEBUG_CATEGORY_GET (GST_CAT_CONTEXT, "GST_CONTEXT");
+    g_once_init_leave (&_init, 1);
+  }
+}
+
+G_DEFINE_TYPE_WITH_CODE (GstVulkanDisplay, gst_vulkan_display, GST_TYPE_OBJECT,
+    _init_debug ());
+
+#define GST_VULKAN_DISPLAY_GET_PRIVATE(o) \
+  (G_TYPE_INSTANCE_GET_PRIVATE((o), GST_TYPE_VULKAN_DISPLAY, GstVulkanDisplayPrivate))
+
+enum
+{
+  SIGNAL_0,
+  CREATE_CONTEXT,
+  LAST_SIGNAL
+};
+
+/* static guint gst_vulkan_display_signals[LAST_SIGNAL] = { 0 }; */
+
+static void gst_vulkan_display_finalize (GObject * object);
+static gpointer gst_vulkan_display_default_get_handle (GstVulkanDisplay *
+    display);
+static GstVulkanWindow
+    * gst_vulkan_display_default_create_window (GstVulkanDisplay * display);
+
+struct _GstVulkanDisplayPrivate
+{
+  GThread *event_thread;
+
+  GMutex thread_lock;
+  GCond thread_cond;
+};
+
+static gpointer
+_event_thread_main (GstVulkanDisplay * display)
+{
+  g_mutex_lock (&display->priv->thread_lock);
+
+  display->main_context = g_main_context_new ();
+  display->main_loop = g_main_loop_new (display->main_context, FALSE);
+
+  g_cond_broadcast (&display->priv->thread_cond);
+  g_mutex_unlock (&display->priv->thread_lock);
+
+  g_main_loop_run (display->main_loop);
+
+  g_mutex_lock (&display->priv->thread_lock);
+
+  g_main_loop_unref (display->main_loop);
+  g_main_context_unref (display->main_context);
+
+  display->main_loop = NULL;
+  display->main_context = NULL;
+
+  g_cond_broadcast (&display->priv->thread_cond);
+  g_mutex_unlock (&display->priv->thread_lock);
+
+  return NULL;
+}
+
+static void
+gst_vulkan_display_class_init (GstVulkanDisplayClass * klass)
+{
+  g_type_class_add_private (klass, sizeof (GstVulkanDisplayPrivate));
+
+  klass->get_handle = gst_vulkan_display_default_get_handle;
+  klass->create_window = gst_vulkan_display_default_create_window;
+
+  G_OBJECT_CLASS (klass)->finalize = gst_vulkan_display_finalize;
+}
+
+static void
+gst_vulkan_display_init (GstVulkanDisplay * display)
+{
+  display->priv = GST_VULKAN_DISPLAY_GET_PRIVATE (display);
+  display->type = GST_VULKAN_DISPLAY_TYPE_ANY;
+
+  g_mutex_init (&display->priv->thread_lock);
+  g_cond_init (&display->priv->thread_cond);
+
+  display->priv->event_thread = g_thread_new ("vkdisplay-event",
+      (GThreadFunc) _event_thread_main, display);
+
+  g_mutex_lock (&display->priv->thread_lock);
+  while (!display->main_loop)
+    g_cond_wait (&display->priv->thread_cond, &display->priv->thread_lock);
+  g_mutex_unlock (&display->priv->thread_lock);
+}
+
+static void
+gst_vulkan_display_finalize (GObject * object)
+{
+  GstVulkanDisplay *display = GST_VULKAN_DISPLAY (object);
+
+  g_mutex_lock (&display->priv->thread_lock);
+  if (display->main_context && display->event_source) {
+    g_source_destroy (display->event_source);
+    g_source_unref (display->event_source);
+  }
+  display->event_source = NULL;
+
+  if (display->main_loop)
+    g_main_loop_quit (display->main_loop);
+
+  while (display->main_loop)
+    g_cond_wait (&display->priv->thread_cond, &display->priv->thread_lock);
+
+  if (display->priv->event_thread)
+    g_thread_unref (display->priv->event_thread);
+  display->priv->event_thread = NULL;
+  g_mutex_unlock (&display->priv->thread_lock);
+
+  if (display->instance) {
+    gst_object_unref (display->instance);
+  }
+
+  G_OBJECT_CLASS (gst_vulkan_display_parent_class)->finalize (object);
+}
+
+GstVulkanDisplay *
+gst_vulkan_display_new_with_type (GstVulkanInstance * instance,
+    GstVulkanDisplayType type)
+{
+  GstVulkanDisplay *display = NULL;
+
+  _init_debug ();
+
+#if GST_VULKAN_HAVE_WINDOW_XCB
+  if (!display && type & GST_VULKAN_DISPLAY_TYPE_XCB) {
+    display = GST_VULKAN_DISPLAY (gst_vulkan_display_xcb_new (NULL));
+  }
+#endif
+
+  if (display)
+    display->instance = gst_object_ref (instance);
+
+  return display;
+}
+
+/**
+ * gst_vulkan_display_new:
+ *
+ * Returns: (transfer full): a new #GstVulkanDisplay
+ *
+ * Since: 1.10
+ */
+GstVulkanDisplay *
+gst_vulkan_display_new (GstVulkanInstance * instance)
+{
+  GstVulkanDisplayType type;
+  GstVulkanDisplay *display = NULL;
+
+  type = gst_vulkan_display_choose_type (instance);
+  display = gst_vulkan_display_new_with_type (instance, type);
+
+  if (!display) {
+    /* subclass returned a NULL display */
+    GST_FIXME ("creating dummy display");
+
+    display = g_object_new (GST_TYPE_VULKAN_DISPLAY, NULL);
+    display->instance = gst_object_ref (instance);
+  }
+
+  return display;
+}
+
+/**
+ * gst_vulkan_display_get_handle:
+ * @display: a #GstVulkanDisplay
+ *
+ * Returns: the winsys specific handle of @display
+ *
+ * Since: 1.10
+ */
+gpointer
+gst_vulkan_display_get_handle (GstVulkanDisplay * display)
+{
+  GstVulkanDisplayClass *klass;
+
+  g_return_val_if_fail (GST_IS_VULKAN_DISPLAY (display), NULL);
+  klass = GST_VULKAN_DISPLAY_GET_CLASS (display);
+  g_return_val_if_fail (klass->get_handle != NULL, NULL);
+
+  return klass->get_handle (display);
+}
+
+static gpointer
+gst_vulkan_display_default_get_handle (GstVulkanDisplay * display)
+{
+  return 0;
+}
+
+/**
+ * gst_vulkan_display_get_handle_type:
+ * @display: a #GstVulkanDisplay
+ *
+ * Returns: the #GstVulkanDisplayType of @display
+ *
+ * Since: 1.10
+ */
+GstVulkanDisplayType
+gst_vulkan_display_get_handle_type (GstVulkanDisplay * display)
+{
+  g_return_val_if_fail (GST_IS_VULKAN_DISPLAY (display),
+      GST_VULKAN_DISPLAY_TYPE_NONE);
+
+  return display->type;
+}
+
+/**
+ * gst_vulkan_display_create_window:
+ * @display: a #GstVulkanDisplay
+ *
+ * Returns: a new #GstVulkanWindow for @display or %NULL.
+ */
+GstVulkanWindow *
+gst_vulkan_display_create_window (GstVulkanDisplay * display)
+{
+  GstVulkanDisplayClass *klass;
+  GstVulkanWindow *window;
+
+  g_return_val_if_fail (GST_IS_VULKAN_DISPLAY (display), NULL);
+  klass = GST_VULKAN_DISPLAY_GET_CLASS (display);
+  g_return_val_if_fail (klass->create_window != NULL, NULL);
+
+  window = klass->create_window (display);
+
+  if (window) {
+    GST_OBJECT_LOCK (display);
+    display->windows = g_list_prepend (display->windows, window);
+    GST_OBJECT_UNLOCK (display);
+  }
+
+  return window;
+}
+
+static GstVulkanWindow *
+gst_vulkan_display_default_create_window (GstVulkanDisplay * display)
+{
+  return gst_vulkan_window_new (display);
+}
+
+gboolean
+gst_vulkan_display_remove_window (GstVulkanDisplay * display,
+    GstVulkanWindow * window)
+{
+  gboolean ret = FALSE;
+  GList *l;
+
+  GST_OBJECT_LOCK (display);
+  l = g_list_find (display->windows, window);
+  if (l) {
+    display->windows = g_list_delete_link (display->windows, l);
+    ret = TRUE;
+  }
+  GST_OBJECT_UNLOCK (display);
+
+  return ret;
+}
+
+/**
+ * gst_context_set_vulkan_display:
+ * @context: a #GstContext
+ * @display: a #GstVulkanDisplay
+ *
+ * Sets @display on @context
+ *
+ * Since: 1.10
+ */
+void
+gst_context_set_vulkan_display (GstContext * context,
+    GstVulkanDisplay * display)
+{
+  GstStructure *s;
+
+  g_return_if_fail (context != NULL);
+  g_return_if_fail (gst_context_is_writable (context));
+
+  if (display)
+    GST_CAT_LOG (GST_CAT_CONTEXT,
+        "setting GstVulkanDisplay(%" GST_PTR_FORMAT ") on context(%"
+        GST_PTR_FORMAT ")", display, context);
+
+  s = gst_context_writable_structure (context);
+  gst_structure_set (s, GST_VULKAN_DISPLAY_CONTEXT_TYPE_STR,
+      GST_TYPE_VULKAN_DISPLAY, display, NULL);
+}
+
+/**
+ * gst_context_get_vulkan_display:
+ * @context: a #GstContext
+ * @display: resulting #GstVulkanDisplay
+ *
+ * Returns: Whether @display was in @context
+ *
+ * Since: 1.10
+ */
+gboolean
+gst_context_get_vulkan_display (GstContext * context,
+    GstVulkanDisplay ** display)
+{
+  const GstStructure *s;
+  gboolean ret;
+
+  g_return_val_if_fail (display != NULL, FALSE);
+  g_return_val_if_fail (context != NULL, FALSE);
+
+  s = gst_context_get_structure (context);
+  ret = gst_structure_get (s, GST_VULKAN_DISPLAY_CONTEXT_TYPE_STR,
+      GST_TYPE_VULKAN_DISPLAY, display, NULL);
+
+  GST_CAT_LOG (GST_CAT_CONTEXT, "got GstVulkanDisplay(%" GST_PTR_FORMAT
+      ") from context(%" GST_PTR_FORMAT ")", *display, context);
+
+  return ret;
+}
+
+GstVulkanDisplayType
+gst_vulkan_display_choose_type (GstVulkanInstance * instance)
+{
+  const gchar *window_str;
+  GstVulkanDisplayType type = GST_VULKAN_DISPLAY_TYPE_NONE;
+  GstVulkanDisplayType first_supported = GST_VULKAN_DISPLAY_TYPE_NONE;
+
+  window_str = g_getenv ("GST_VULKAN_WINDOW");
+
+  /* FIXME: enumerate instance extensions for the supported winsys' */
+
+#define CHOOSE_WINSYS(lname,uname) \
+  G_STMT_START { \
+    if (!type && g_strcmp0 (window_str, G_STRINGIFY (lname)) == 0) { \
+      type = G_PASTE(GST_VULKAN_DISPLAY_TYPE_,uname); \
+    } \
+    if (!first_supported) \
+      first_supported = G_PASTE(GST_VULKAN_DISPLAY_TYPE_,uname); \
+  } G_STMT_END
+
+#if GST_VULKAN_HAVE_WINDOW_XCB
+  CHOOSE_WINSYS (xcb, XCB);
+#endif
+
+#undef CHOOSE_WINSYS
+
+  if (type)
+    return type;
+
+  if (first_supported)
+    return first_supported;
+
+  return GST_VULKAN_DISPLAY_TYPE_NONE;
+}
+
+const gchar *
+gst_vulkan_display_type_to_extension_string (GstVulkanDisplayType type)
+{
+  if (type == GST_VULKAN_DISPLAY_TYPE_NONE)
+    return NULL;
+
+  if (type & GST_VULKAN_DISPLAY_TYPE_XCB)
+    return VK_KHR_XCB_SURFACE_EXTENSION_NAME;
+
+  return NULL;
+}
+
+gboolean
+gst_vulkan_display_handle_context_query (GstElement * element, GstQuery * query,
+    GstVulkanDisplay ** display)
+{
+  gboolean res = FALSE;
+  const gchar *context_type;
+  GstContext *context, *old_context;
+
+  g_return_val_if_fail (element != NULL, FALSE);
+  g_return_val_if_fail (query != NULL, FALSE);
+  g_return_val_if_fail (GST_QUERY_TYPE (query) == GST_QUERY_CONTEXT, FALSE);
+  g_return_val_if_fail (display != NULL, FALSE);
+
+  gst_query_parse_context_type (query, &context_type);
+
+  if (g_strcmp0 (context_type, GST_VULKAN_DISPLAY_CONTEXT_TYPE_STR) == 0) {
+    gst_query_parse_context (query, &old_context);
+
+    if (old_context)
+      context = gst_context_copy (old_context);
+    else
+      context = gst_context_new (GST_VULKAN_DISPLAY_CONTEXT_TYPE_STR, TRUE);
+
+    gst_context_set_vulkan_display (context, *display);
+    gst_query_set_context (query, context);
+    gst_context_unref (context);
+
+    res = *display != NULL;
+  }
+
+  return res;
+}
+
+gboolean
+gst_vulkan_display_run_context_query (GstElement * element,
+    GstVulkanDisplay ** display)
+{
+  g_return_val_if_fail (GST_IS_ELEMENT (element), FALSE);
+  g_return_val_if_fail (display != NULL, FALSE);
+
+  if (*display && GST_IS_VULKAN_DISPLAY (*display))
+    return TRUE;
+
+  gst_vulkan_global_context_query (element,
+      GST_VULKAN_DISPLAY_CONTEXT_TYPE_STR);
+
+  GST_DEBUG_OBJECT (element, "found display %p", *display);
+
+  if (*display)
+    return TRUE;
+
+  return FALSE;
+}
diff --git a/ext/vulkan/vkdisplay.h b/ext/vulkan/vkdisplay.h
new file mode 100644
index 0000000..b0bbb4f
--- /dev/null
+++ b/ext/vulkan/vkdisplay.h
@@ -0,0 +1,116 @@
+/*
+ * GStreamer
+ * Copyright (C) 2007 David A. Schleef <ds@schleef.org>
+ * Copyright (C) 2008 Julien Isorce <julien.isorce@gmail.com>
+ * Copyright (C) 2008 Filippo Argiolas <filippo.argiolas@gmail.com>
+ * Copyright (C) 2013 Matthew Waters <ystreet00@gmail.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifndef __GST_VULKAN_DISPLAY_H__
+#define __GST_VULKAN_DISPLAY_H__
+
+#include <gst/gst.h>
+
+#include <vk.h>
+
+G_BEGIN_DECLS
+
+#define GST_TYPE_VULKAN_DISPLAY             (gst_vulkan_display_get_type())
+#define GST_VULKAN_DISPLAY(obj)             (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_VULKAN_DISPLAY,GstVulkanDisplay))
+#define GST_VULKAN_DISPLAY_CLASS(klass)     (G_TYPE_CHECK_CLASS_CAST((klass), GST_TYPE_VULKAN_DISPLAY,GstVulkanDisplayClass))
+#define GST_IS_VULKAN_DISPLAY(obj)          (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_VULKAN_DISPLAY))
+#define GST_IS_VULKAN_DISPLAY_CLASS(klass)  (G_TYPE_CHECK_CLASS_TYPE((klass), GST_TYPE_VULKAN_DISPLAY))
+#define GST_VULKAN_DISPLAY_CAST(obj)        ((GstVulkanDisplay*)(obj))
+#define GST_VULKAN_DISPLAY_GET_CLASS(o)     (G_TYPE_INSTANCE_GET_CLASS((o), GST_TYPE_VULKAN_DISPLAY, GstVulkanDisplayClass))
+GType gst_vulkan_display_get_type (void);
+
+#define GST_VULKAN_DISPLAY_CONTEXT_TYPE_STR "gst.vulkan.display"
+
+enum _GstVulkanDisplayType
+{
+  GST_VULKAN_DISPLAY_TYPE_NONE = 0,
+  GST_VULKAN_DISPLAY_TYPE_X11 = (1 << 0),
+  GST_VULKAN_DISPLAY_TYPE_XCB = (1 << 1),
+  GST_VULKAN_DISPLAY_TYPE_WAYLAND = (1 << 2),
+  GST_VULKAN_DISPLAY_TYPE_MIR = (1 << 3),
+  GST_VULKAN_DISPLAY_TYPE_WIN32 = (1 << 4),
+
+  GST_VULKAN_DISPLAY_TYPE_ANY = G_MAXUINT32
+};
+
+/**
+ * GstVulkanDisplay:
+ *
+ * The contents of a #GstVulkanDisplay are private and should only be accessed
+ * through the provided API
+ */
+struct _GstVulkanDisplay
+{
+  /* <private> */
+  GstObject                 object;
+
+  GstVulkanDisplayType      type;
+
+  GstVulkanInstance        *instance;
+
+  /* <protected> */
+  GList                    *windows;        /* OBJECT lock */
+  GMainContext             *main_context;
+  GMainLoop                *main_loop;
+  GSource                  *event_source;
+
+  /* <private> */
+  GstVulkanDisplayPrivate  *priv;
+};
+
+struct _GstVulkanDisplayClass
+{
+  GstObjectClass object_class;
+
+  gpointer          (*get_handle)           (GstVulkanDisplay * display);
+  GstVulkanWindow * (*create_window)        (GstVulkanDisplay * display);
+};
+
+GstVulkanDisplay *      gst_vulkan_display_new                      (GstVulkanInstance *instance);
+GstVulkanDisplay *      gst_vulkan_display_new_with_type            (GstVulkanInstance *instance,
+                                                                     GstVulkanDisplayType type);
+GstVulkanDisplayType    gst_vulkan_display_choose_type              (GstVulkanInstance *instance);
+const gchar *           gst_vulkan_display_type_to_extension_string (GstVulkanDisplayType type);
+
+
+gpointer                gst_vulkan_display_get_handle               (GstVulkanDisplay * display);
+GstVulkanDisplayType    gst_vulkan_display_get_handle_type          (GstVulkanDisplay * display);
+GstVulkanWindow *       gst_vulkan_display_create_window            (GstVulkanDisplay * display);
+
+gboolean                gst_context_get_vulkan_display              (GstContext * context,
+                                                                     GstVulkanDisplay ** display);
+void                    gst_context_set_vulkan_display              (GstContext * context,
+                                                                     GstVulkanDisplay * display);
+gboolean                gst_vulkan_display_handle_context_query     (GstElement * element,
+                                                                     GstQuery * query,
+                                                                     GstVulkanDisplay ** display);
+gboolean                gst_vulkan_display_run_context_query        (GstElement * element,
+                                                                     GstVulkanDisplay ** display);
+
+/* GstVulkanWindow usage only */
+gboolean                gst_vulkan_display_remove_window            (GstVulkanDisplay * display, GstVulkanWindow * window);
+
+
+G_END_DECLS
+
+#endif /* __GST_VULKAN_DISPLAY_H__ */
diff --git a/ext/vulkan/vkerror.c b/ext/vulkan/vkerror.c
new file mode 100644
index 0000000..3fec27e
--- /dev/null
+++ b/ext/vulkan/vkerror.c
@@ -0,0 +1,100 @@
+/*
+ * GStreamer
+ * Copyright (C) 2015 Matthew Waters <matthew@centricular.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <glib/gprintf.h>
+
+#include "vkerror.h"
+
+/* *INDENT-OFF* */
+static const struct 
+{
+  VkResult result;
+  const char *str;
+} vk_result_string_map[] = {
+  {VK_ERROR_OUT_OF_HOST_MEMORY, "Out Of host memory"},
+  {VK_ERROR_OUT_OF_DEVICE_MEMORY, "Out of device memory"},
+  {VK_ERROR_INITIALIZATION_FAILED, "Initialization failed"},
+  {VK_ERROR_DEVICE_LOST, "Device lost"},
+  {VK_ERROR_MEMORY_MAP_FAILED, "Map failed"},
+  {VK_ERROR_LAYER_NOT_PRESENT, "Layer not present"},
+  {VK_ERROR_EXTENSION_NOT_PRESENT, "Extension not present"},
+  {VK_ERROR_FEATURE_NOT_PRESENT, "Feature not present"},
+  {VK_ERROR_INCOMPATIBLE_DRIVER, "Incompatible driver"},
+  {VK_ERROR_TOO_MANY_OBJECTS, "Too many objects"},
+  {VK_ERROR_FORMAT_NOT_SUPPORTED, "format not supported"},
+  {VK_ERROR_SURFACE_LOST_KHR, "Surface lost"},
+  {VK_ERROR_OUT_OF_DATE_KHR, "out of date"},
+  {VK_ERROR_INCOMPATIBLE_DISPLAY_KHR, "Incompatible display"},
+  {VK_ERROR_NATIVE_WINDOW_IN_USE_KHR, "Native window in use"},
+};
+/* *INDENT-ON* */
+
+GQuark
+gst_vulkan_error_quark (void)
+{
+  return g_quark_from_static_string ("gst-vulkan-error");
+}
+
+static const char *
+_vk_result_to_string (VkResult result)
+{
+  int i;
+
+  if (result >= 0)
+    return NULL;
+  if (result < VK_RESULT_BEGIN_RANGE)
+    return "Unknown Error";
+
+  for (i = 0; i < G_N_ELEMENTS (vk_result_string_map); i++) {
+    if (result == vk_result_string_map[i].result)
+      return vk_result_string_map[i].str;
+  }
+
+  return "Unknown Error";
+}
+
+VkResult
+gst_vulkan_error_to_g_error (VkResult result, GError ** error,
+    const char *format, ...)
+{
+  const char *result_str;
+  gchar *string;
+  va_list args;
+
+  if (error == NULL)
+    /* we don't have an error to set */
+    return result;
+
+  result_str = _vk_result_to_string (result);
+  if (result_str == NULL)
+    return result;
+
+  va_start (args, format);
+  g_vasprintf (&string, format, args);
+  va_end (args);
+
+  g_set_error (error, GST_VULKAN_ERROR, result, "%s: %s", result_str, string);
+
+  return result;
+}
diff --git a/ext/opus/gstopuscommon.h b/ext/vulkan/vkerror.h
similarity index 60%
copy from ext/opus/gstopuscommon.h
copy to ext/vulkan/vkerror.h
index 71771ae..788e66d 100644
--- a/ext/opus/gstopuscommon.h
+++ b/ext/vulkan/vkerror.h
@@ -1,5 +1,6 @@
-/* GStreamer Opus Encoder
- * Copyright (C) 2009 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+/*
+ * GStreamer
+ * Copyright (C) 2015 Matthew Waters <matthew@centricular.com>
  *
  * This library is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Library General Public
@@ -17,21 +18,20 @@
  * Boston, MA 02110-1301, USA.
  */
 
-
-#ifndef __GST_OPUS_COMMON_H__
-#define __GST_OPUS_COMMON_H__
+#ifndef _VK_ERROR_H_
+#define _VK_ERROR_H_
 
 #include <gst/gst.h>
-#include <gst/audio/audio.h>
+#include <vulkan/vulkan.h>
 
 G_BEGIN_DECLS
 
-extern const GstAudioChannelPosition gst_opus_channel_positions[][8];
-extern const char *gst_opus_channel_names[];
-extern void gst_opus_common_log_channel_mapping_table (GstElement *element,
-    GstDebugCategory * category, const char *msg,
-    int n_channels, const guint8 *table);
+#define GST_VULKAN_ERROR (gst_vulkan_error_quark ())
+GQuark gst_vulkan_error_quark (void);
+
+/* only fills error iff error != NULL and result < 0 */
+VkResult gst_vulkan_error_to_g_error (VkResult result, GError ** error, const char * format, ...) G_GNUC_PRINTF (3, 4);
 
 G_END_DECLS
 
-#endif /* __GST_OPUS_COMMON_H__ */
+#endif /* _VK_INSTANCE_H_ */
diff --git a/ext/vulkan/vkimagememory.c b/ext/vulkan/vkimagememory.c
new file mode 100644
index 0000000..b1263b0
--- /dev/null
+++ b/ext/vulkan/vkimagememory.c
@@ -0,0 +1,569 @@
+/*
+ * GStreamer
+ * Copyright (C) 2015 Matthew Waters <matthew@centricular.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include "vkimagememory.h"
+
+/**
+ * SECTION:vkimagememory
+ * @short_description: memory subclass for Vulkan image memory
+ * @see_also: #GstMemory, #GstAllocator
+ *
+ * GstVulkanImageMemory is a #GstMemory subclass providing support for the
+ * mapping of Vulkan device memory.
+ */
+
+#define GST_CAT_DEFUALT GST_CAT_VULKAN_IMAGE_MEMORY
+GST_DEBUG_CATEGORY_STATIC (GST_CAT_DEFUALT);
+
+static GstAllocator *_vulkan_image_memory_allocator;
+
+VkFormat
+gst_vulkan_format_from_video_format (GstVideoFormat v_format, guint plane)
+{
+  guint n_plane_components;
+
+  switch (v_format) {
+    case GST_VIDEO_FORMAT_RGBx:
+    case GST_VIDEO_FORMAT_BGRx:
+    case GST_VIDEO_FORMAT_xRGB:
+    case GST_VIDEO_FORMAT_xBGR:
+    case GST_VIDEO_FORMAT_RGBA:
+    case GST_VIDEO_FORMAT_BGRA:
+    case GST_VIDEO_FORMAT_ARGB:
+    case GST_VIDEO_FORMAT_ABGR:
+    case GST_VIDEO_FORMAT_AYUV:
+      n_plane_components = 4;
+      break;
+    case GST_VIDEO_FORMAT_RGB:
+    case GST_VIDEO_FORMAT_BGR:
+      n_plane_components = 3;
+      break;
+    case GST_VIDEO_FORMAT_RGB16:
+    case GST_VIDEO_FORMAT_BGR16:
+      return GST_VIDEO_GL_TEXTURE_TYPE_RGB16;
+    case GST_VIDEO_FORMAT_GRAY16_BE:
+    case GST_VIDEO_FORMAT_GRAY16_LE:
+    case GST_VIDEO_FORMAT_YUY2:
+    case GST_VIDEO_FORMAT_UYVY:
+      n_plane_components = 2;
+      break;
+    case GST_VIDEO_FORMAT_NV12:
+    case GST_VIDEO_FORMAT_NV21:
+      n_plane_components = plane == 0 ? 1 : 2;
+      break;
+    case GST_VIDEO_FORMAT_GRAY8:
+    case GST_VIDEO_FORMAT_Y444:
+    case GST_VIDEO_FORMAT_Y42B:
+    case GST_VIDEO_FORMAT_Y41B:
+    case GST_VIDEO_FORMAT_I420:
+    case GST_VIDEO_FORMAT_YV12:
+      n_plane_components = 1;
+      break;
+    default:
+      n_plane_components = 4;
+      g_assert_not_reached ();
+      break;
+  }
+
+  switch (n_plane_components) {
+    case 4:
+      return VK_FORMAT_R8G8B8A8_UNORM;
+    case 3:
+      return VK_FORMAT_R8G8B8_UNORM;
+    case 2:
+      return VK_FORMAT_R8G8_UNORM;
+    case 1:
+      return VK_FORMAT_R8_UNORM;
+    default:
+      g_assert_not_reached ();
+      return VK_FORMAT_R8G8B8A8_UNORM;
+  }
+}
+
+static void
+_view_create_info (VkImage image, VkFormat format, VkImageViewCreateInfo * info)
+{
+  info->sType = VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO;
+  info->pNext = NULL;
+  info->image = image;
+  info->format = format;
+  info->viewType = VK_IMAGE_VIEW_TYPE_2D;
+  info->flags = 0;
+
+  GST_VK_COMPONENT_MAPPING (info->components, VK_COMPONENT_SWIZZLE_R,
+      VK_COMPONENT_SWIZZLE_G, VK_COMPONENT_SWIZZLE_B, VK_COMPONENT_SWIZZLE_A);
+  GST_VK_IMAGE_SUBRESOURCE_RANGE (info->subresourceRange,
+      VK_IMAGE_ASPECT_COLOR_BIT, 0, 1, 0, 1);
+}
+
+static gboolean
+_create_info_from_args (VkImageCreateInfo * info, VkFormat format, gsize width,
+    gsize height, VkImageTiling tiling, VkImageUsageFlags usage)
+{
+  /* FIXME: validate these */
+
+  info->sType = VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO;
+  info->pNext = NULL;
+  info->flags = 0;
+  info->imageType = VK_IMAGE_TYPE_2D;
+  info->format = format;
+  GST_VK_EXTENT3D (info->extent, width, height, 1);
+  info->mipLevels = 1;
+  info->arrayLayers = 1;
+  info->samples = VK_SAMPLE_COUNT_1_BIT;
+  info->tiling = tiling;
+  info->usage = usage;
+  info->sharingMode = VK_SHARING_MODE_EXCLUSIVE;
+  info->queueFamilyIndexCount = 0;
+  info->pQueueFamilyIndices = NULL;
+  info->initialLayout = VK_IMAGE_LAYOUT_UNDEFINED;
+
+  return TRUE;
+}
+
+static void
+_vk_image_mem_init (GstVulkanImageMemory * mem, GstAllocator * allocator,
+    GstMemory * parent, GstVulkanDevice * device, VkImageUsageFlags usage,
+    GstAllocationParams * params, gsize size, gpointer user_data,
+    GDestroyNotify notify)
+{
+  gsize align = gst_memory_alignment, offset = 0, maxsize = size;
+  GstMemoryFlags flags = 0;
+
+  if (params) {
+    flags = params->flags;
+    align |= params->align;
+    offset = params->prefix;
+    maxsize += params->prefix + params->padding + align;
+  }
+
+  gst_memory_init (GST_MEMORY_CAST (mem), flags, allocator, parent, maxsize,
+      align, offset, size);
+
+  mem->device = gst_object_ref (device);
+  mem->image_layout = VK_IMAGE_LAYOUT_UNDEFINED;
+  mem->usage = usage;
+  mem->wrapped = FALSE;
+  mem->notify = notify;
+  mem->user_data = user_data;
+
+  g_mutex_init (&mem->lock);
+
+  GST_CAT_DEBUG (GST_CAT_VULKAN_IMAGE_MEMORY,
+      "new Vulkan Image memory:%p size:%" G_GSIZE_FORMAT, mem, maxsize);
+}
+
+static GstVulkanImageMemory *
+_vk_image_mem_new_alloc (GstAllocator * allocator, GstMemory * parent,
+    GstVulkanDevice * device, VkFormat format, gsize width, gsize height,
+    VkImageTiling tiling, VkImageUsageFlags usage,
+    VkMemoryPropertyFlags mem_prop_flags, gpointer user_data,
+    GDestroyNotify notify)
+{
+  GstVulkanImageMemory *mem = NULL;
+  GstAllocationParams params = { 0, };
+  VkImageViewCreateInfo view_info;
+  VkImageCreateInfo image_info;
+  VkPhysicalDevice gpu;
+  GError *error = NULL;
+  guint32 type_idx;
+  VkImage image;
+  VkResult err;
+
+  gpu = gst_vulkan_device_get_physical_device (device);
+  if (!_create_info_from_args (&image_info, format, width, height, tiling,
+          usage)) {
+    GST_CAT_ERROR (GST_CAT_VULKAN_IMAGE_MEMORY, "Incorrect image parameters");
+    goto error;
+  }
+
+  err = vkCreateImage (device->device, &image_info, NULL, &image);
+  if (gst_vulkan_error_to_g_error (err, &error, "vkCreateImage") < 0)
+    goto vk_error;
+
+  mem = g_new0 (GstVulkanImageMemory, 1);
+  _vk_image_mem_init (mem, allocator, parent, device, usage, &params,
+      mem->requirements.size, user_data, notify);
+  mem->create_info = image_info;
+  mem->image = image;
+
+  vkGetImageMemoryRequirements (device->device, image, &mem->requirements);
+  err = vkGetPhysicalDeviceImageFormatProperties (gpu, format, VK_IMAGE_TYPE_2D,
+      tiling, usage, 0, &mem->format_properties);
+  if (gst_vulkan_error_to_g_error (err, &error,
+          "vkGetPhysicalDeviceImageFormatProperties") < 0)
+    goto vk_error;
+
+  if (!gst_vulkan_memory_find_memory_type_index_with_type_properties (device,
+          mem->requirements.memoryTypeBits, mem_prop_flags, &type_idx))
+    goto error;
+
+  /* XXX: assumes alignment is a power of 2 */
+  params.align = mem->requirements.alignment - 1;
+  mem->vk_mem = (GstVulkanMemory *) gst_vulkan_memory_alloc (device, type_idx,
+      &params, mem->requirements.size, mem_prop_flags);
+  if (!mem->vk_mem)
+    goto error;
+
+  err = vkBindImageMemory (device->device, image, mem->vk_mem->mem_ptr, 0);
+  if (gst_vulkan_error_to_g_error (err, &error, "vkBindImageMemory") < 0)
+    goto vk_error;
+
+  if (usage & (VK_IMAGE_USAGE_SAMPLED_BIT | VK_IMAGE_USAGE_STORAGE_BIT |
+          VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT)) {
+    _view_create_info (mem->image, format, &view_info);
+    err = vkCreateImageView (device->device, &view_info, NULL, &mem->view);
+    if (gst_vulkan_error_to_g_error (err, &error, "vkCreateImageView") < 0)
+      goto vk_error;
+  }
+
+  return mem;
+
+vk_error:
+  {
+    GST_CAT_ERROR (GST_CAT_VULKAN_IMAGE_MEMORY,
+        "Failed to allocate image memory %s", error->message);
+    g_clear_error (&error);
+    goto error;
+  }
+
+error:
+  {
+    if (mem)
+      gst_memory_unref ((GstMemory *) mem);
+    return NULL;
+  }
+}
+
+static GstVulkanImageMemory *
+_vk_image_mem_new_wrapped (GstAllocator * allocator, GstMemory * parent,
+    GstVulkanDevice * device, VkImage image, VkFormat format, gsize width,
+    gsize height, VkImageTiling tiling, VkImageUsageFlags usage,
+    gpointer user_data, GDestroyNotify notify)
+{
+  GstVulkanImageMemory *mem = g_new0 (GstVulkanImageMemory, 1);
+  GstAllocationParams params = { 0, };
+  VkImageViewCreateInfo view_info;
+  VkPhysicalDevice gpu;
+  GError *error = NULL;
+  VkResult err;
+
+  gpu = gst_vulkan_device_get_physical_device (device);
+  mem->image = image;
+
+  vkGetImageMemoryRequirements (device->device, mem->image, &mem->requirements);
+
+  /* XXX: assumes alignment is a power of 2 */
+  params.align = mem->requirements.alignment - 1;
+  params.flags = GST_MEMORY_FLAG_NOT_MAPPABLE;
+  _vk_image_mem_init (mem, allocator, parent, device, usage, &params,
+      mem->requirements.size, user_data, notify);
+  mem->wrapped = TRUE;
+
+  if (!_create_info_from_args (&mem->create_info, format, width, height, tiling,
+          usage)) {
+    GST_CAT_ERROR (GST_CAT_VULKAN_IMAGE_MEMORY, "Incorrect image parameters");
+    goto error;
+  }
+
+  err = vkGetPhysicalDeviceImageFormatProperties (gpu, format, VK_IMAGE_TYPE_2D,
+      tiling, usage, 0, &mem->format_properties);
+  if (gst_vulkan_error_to_g_error (err, &error,
+          "vkGetPhysicalDeviceImageFormatProperties") < 0)
+    goto vk_error;
+
+  /* XXX: we don't actually if the image has a vkDeviceMemory bound so
+   * this may fail */
+  if (usage & (VK_IMAGE_USAGE_SAMPLED_BIT | VK_IMAGE_USAGE_STORAGE_BIT |
+          VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT)) {
+    _view_create_info (mem->image, format, &view_info);
+    err = vkCreateImageView (device->device, &view_info, NULL, &mem->view);
+    if (gst_vulkan_error_to_g_error (err, &error, "vkCreateImageView") < 0)
+      goto vk_error;
+  }
+
+  return mem;
+
+vk_error:
+  {
+    GST_CAT_ERROR (GST_CAT_VULKAN_IMAGE_MEMORY,
+        "Failed to allocate image memory %s", error->message);
+    g_clear_error (&error);
+    goto error;
+  }
+
+error:
+  {
+    gst_memory_unref ((GstMemory *) mem);
+    return NULL;
+  }
+}
+
+static gpointer
+_vk_image_mem_map_full (GstVulkanImageMemory * mem, GstMapInfo * info,
+    gsize size)
+{
+  GstMapInfo *vk_map_info;
+
+  /* FIXME: possible layout transformation needed */
+  g_mutex_lock (&mem->lock);
+
+  if (!mem->vk_mem) {
+    g_mutex_unlock (&mem->lock);
+    return NULL;
+  }
+
+  vk_map_info = g_new0 (GstMapInfo, 1);
+  info->user_data[0] = vk_map_info;
+  if (!gst_memory_map ((GstMemory *) mem->vk_mem, vk_map_info, info->flags)) {
+    g_free (vk_map_info);
+    g_mutex_unlock (&mem->lock);
+    return NULL;
+  }
+  g_mutex_unlock (&mem->lock);
+
+  return vk_map_info->data;
+}
+
+static void
+_vk_image_mem_unmap_full (GstVulkanImageMemory * mem, GstMapInfo * info)
+{
+  g_mutex_lock (&mem->lock);
+  gst_memory_unmap ((GstMemory *) mem->vk_mem, info->user_data[0]);
+  g_mutex_unlock (&mem->lock);
+
+  g_free (info->user_data[0]);
+}
+
+static GstMemory *
+_vk_image_mem_copy (GstVulkanImageMemory * src, gssize offset, gssize size)
+{
+  return NULL;
+}
+
+static GstMemory *
+_vk_image_mem_share (GstVulkanImageMemory * mem, gssize offset, gssize size)
+{
+  return NULL;
+}
+
+static gboolean
+_vk_image_mem_is_span (GstVulkanImageMemory * mem1, GstVulkanImageMemory * mem2,
+    gsize * offset)
+{
+  return FALSE;
+}
+
+static GstMemory *
+_vk_image_mem_alloc (GstAllocator * allocator, gsize size,
+    GstAllocationParams * params)
+{
+  g_critical ("Subclass should override GstAllocatorClass::alloc() function");
+
+  return NULL;
+}
+
+static void
+_vk_image_mem_free (GstAllocator * allocator, GstMemory * memory)
+{
+  GstVulkanImageMemory *mem = (GstVulkanImageMemory *) memory;
+
+  GST_CAT_TRACE (GST_CAT_VULKAN_IMAGE_MEMORY, "freeing image memory:%p "
+      "id:%" G_GUINT64_FORMAT, mem, (guint64) mem->image);
+
+  if (mem->image && !mem->wrapped)
+    vkDestroyImage (mem->device->device, mem->image, NULL);
+
+  if (mem->view)
+    vkDestroyImageView (mem->device->device, mem->view, NULL);
+
+  if (mem->vk_mem)
+    gst_memory_unref ((GstMemory *) mem->vk_mem);
+
+  if (mem->notify)
+    mem->notify (mem->user_data);
+
+  gst_object_unref (mem->device);
+
+  g_free (mem);
+}
+
+static VkAccessFlags
+_access_flags_from_layout (VkImageLayout image_layout)
+{
+  if (image_layout == VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL)
+    return VK_ACCESS_TRANSFER_WRITE_BIT;
+
+  if (image_layout == VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL)
+    return VK_ACCESS_TRANSFER_READ_BIT;
+
+  if (image_layout == VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL)
+    return VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT;
+
+  if (image_layout == VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL)
+    return VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT;
+
+  if (image_layout == VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL)
+    return VK_ACCESS_SHADER_READ_BIT | VK_ACCESS_INPUT_ATTACHMENT_READ_BIT;
+
+  return 0;
+}
+
+gboolean
+gst_vulkan_image_memory_set_layout (GstVulkanImageMemory * vk_mem,
+    VkImageLayout image_layout, VkImageMemoryBarrier * barrier)
+{
+  /* validate vk_mem->usage with image_layout */
+
+  barrier->sType = VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER;
+  barrier->pNext = NULL;
+  barrier->dstAccessMask = _access_flags_from_layout (image_layout);
+  barrier->srcAccessMask = _access_flags_from_layout (vk_mem->image_layout);
+  barrier->oldLayout = vk_mem->image_layout;
+  barrier->newLayout = image_layout;
+  barrier->image = vk_mem->image;
+  GST_VK_IMAGE_SUBRESOURCE_RANGE (barrier->subresourceRange,
+      VK_IMAGE_ASPECT_COLOR_BIT, 0, 1, 0, 1);
+
+  /* FIXME: what if the barrier is never submitted or is submitted out of order? */
+  vk_mem->image_layout = image_layout;
+
+  return TRUE;
+}
+
+/**
+ * gst_vulkan_image_memory_alloc:
+ *
+ * Allocated a new #GstVulkanImageMemory.
+ *
+ * Returns: a #GstMemory object backed by a vulkan device memory
+ */
+GstMemory *
+gst_vulkan_image_memory_alloc (GstVulkanDevice * device, VkFormat format,
+    gsize width, gsize height, VkImageTiling tiling, VkImageUsageFlags usage,
+    VkMemoryPropertyFlags mem_prop_flags)
+{
+  GstVulkanImageMemory *mem;
+
+  mem = _vk_image_mem_new_alloc (_vulkan_image_memory_allocator, NULL, device,
+      format, width, height, tiling, usage, mem_prop_flags, NULL, NULL);
+
+  return (GstMemory *) mem;
+}
+
+GstMemory *
+gst_vulkan_image_memory_wrapped (GstVulkanDevice * device, VkImage image,
+    VkFormat format, gsize width, gsize height, VkImageTiling tiling,
+    VkImageUsageFlags usage, gpointer user_data, GDestroyNotify notify)
+{
+  GstVulkanImageMemory *mem;
+
+  mem = _vk_image_mem_new_wrapped (_vulkan_image_memory_allocator, NULL, device,
+      image, format, width, height, tiling, usage, user_data, notify);
+
+  return (GstMemory *) mem;
+}
+
+guint32
+gst_vulkan_image_memory_get_width (GstVulkanImageMemory * image)
+{
+  g_return_val_if_fail (gst_is_vulkan_image_memory (GST_MEMORY_CAST (image)),
+      0);
+
+  return image->create_info.extent.width;
+}
+
+guint32
+gst_vulkan_image_memory_get_height (GstVulkanImageMemory * image)
+{
+  g_return_val_if_fail (gst_is_vulkan_image_memory (GST_MEMORY_CAST (image)),
+      0);
+
+  return image->create_info.extent.height;
+}
+
+G_DEFINE_TYPE (GstVulkanImageMemoryAllocator, gst_vulkan_image_memory_allocator,
+    GST_TYPE_ALLOCATOR);
+
+static void
+gst_vulkan_image_memory_allocator_class_init (GstVulkanImageMemoryAllocatorClass
+    * klass)
+{
+  GstAllocatorClass *allocator_class = (GstAllocatorClass *) klass;
+
+  allocator_class->alloc = _vk_image_mem_alloc;
+  allocator_class->free = _vk_image_mem_free;
+}
+
+static void
+gst_vulkan_image_memory_allocator_init (GstVulkanImageMemoryAllocator *
+    allocator)
+{
+  GstAllocator *alloc = GST_ALLOCATOR_CAST (allocator);
+
+  alloc->mem_type = GST_VULKAN_IMAGE_MEMORY_ALLOCATOR_NAME;
+  alloc->mem_map_full = (GstMemoryMapFullFunction) _vk_image_mem_map_full;
+  alloc->mem_unmap_full = (GstMemoryUnmapFullFunction) _vk_image_mem_unmap_full;
+  alloc->mem_copy = (GstMemoryCopyFunction) _vk_image_mem_copy;
+  alloc->mem_share = (GstMemoryShareFunction) _vk_image_mem_share;
+  alloc->mem_is_span = (GstMemoryIsSpanFunction) _vk_image_mem_is_span;
+}
+
+/**
+ * gst_vulkan_image_memory_init_once:
+ *
+ * Initializes the Vulkan memory allocator. It is safe to call this function
+ * multiple times.  This must be called before any other #GstVulkanImageMemory operation.
+ */
+void
+gst_vulkan_image_memory_init_once (void)
+{
+  static volatile gsize _init = 0;
+
+  if (g_once_init_enter (&_init)) {
+    GST_DEBUG_CATEGORY_INIT (GST_CAT_VULKAN_IMAGE_MEMORY, "vulkanimagememory",
+        0, "Vulkan Image Memory");
+
+    _vulkan_image_memory_allocator =
+        g_object_new (gst_vulkan_image_memory_allocator_get_type (), NULL);
+
+    gst_allocator_register (GST_VULKAN_IMAGE_MEMORY_ALLOCATOR_NAME,
+        gst_object_ref (_vulkan_image_memory_allocator));
+    g_once_init_leave (&_init, 1);
+  }
+}
+
+/**
+ * gst_is_vulkan_image_memory:
+ * @mem:a #GstMemory
+ * 
+ * Returns: whether the memory at @mem is a #GstVulkanImageMemory
+ */
+gboolean
+gst_is_vulkan_image_memory (GstMemory * mem)
+{
+  return mem != NULL && mem->allocator != NULL &&
+      g_type_is_a (G_OBJECT_TYPE (mem->allocator),
+      GST_TYPE_VULKAN_IMAGE_MEMORY_ALLOCATOR);
+}
diff --git a/ext/vulkan/vkimagememory.h b/ext/vulkan/vkimagememory.h
new file mode 100644
index 0000000..aa6cad6
--- /dev/null
+++ b/ext/vulkan/vkimagememory.h
@@ -0,0 +1,122 @@
+/*
+ * GStreamer
+ * Copyright (C) 2015 Matthew Waters <matthew@centricular.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifndef _VK_IMAGE_MEMORY_H_
+#define _VK_IMAGE_MEMORY_H_
+
+#include <gst/gst.h>
+#include <gst/gstallocator.h>
+#include <gst/gstmemory.h>
+
+#include <gst/video/video.h>
+
+#include <vk.h>
+
+G_BEGIN_DECLS
+
+#define GST_TYPE_VULKAN_IMAGE_MEMORY_ALLOCATOR (gst_vulkan_image_memory_allocator_get_type())
+GType gst_vulkan_image_memory_allocator_get_type(void);
+
+#define GST_IS_VULKAN_IMAGE_MEMORY_ALLOCATOR(obj)              (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GST_TYPE_VULKAN_IMAGE_MEMORY_ALLOCATOR))
+#define GST_IS_VULKAN_IMAGE_MEMORY_ALLOCATOR_CLASS(klass)      (G_TYPE_CHECK_CLASS_TYPE ((klass), GST_TYPE_VULKAN_IMAGE_MEMORY_ALLOCATOR))
+#define GST_VULKAN_IMAGE_MEMORY_ALLOCATOR_GET_CLASS(obj)       (G_TYPE_INSTANCE_GET_CLASS ((obj), GST_TYPE_VULKAN_MEMORY_ALLOCATOR, GstVulkanImageMemoryAllocatorClass))
+#define GST_VULKAN_IMAGE_MEMORY_ALLOCATOR(obj)                 (G_TYPE_CHECK_INSTANCE_CAST ((obj), GST_TYPE_VULKAN_MEMORY_ALLOCATOR, GstVulkanImageMemoryAllocator))
+#define GST_VULKAN_IMAGE_MEMORY_ALLOCATOR_CLASS(klass)         (G_TYPE_CHECK_CLASS_CAST ((klass), GST_TYPE_VULKAN_MEMORY_ALLOCATOR, GstVulkanImageMemoryAllocatorClass))
+#define GST_VULKAN_IMAGE_MEMORY_ALLOCATOR_CAST(obj)            ((GstVulkanImageMemoryAllocator *)(obj))
+
+#define GST_VULKAN_IMAGE_MEMORY_ALLOCATOR_NAME "VulkanImage"
+#define GST_CAPS_FEATURE_MEMORY_VULKAN_IMAGE "memory:" GST_VULKAN_IMAGE_MEMORY_ALLOCATOR_NAME
+
+struct _GstVulkanImageMemory
+{
+  GstMemory parent;
+
+  GstVulkanDevice * device;
+
+  VkImage image;
+  VkImageLayout image_layout;
+  VkImageView view;
+  GstVulkanMemory *vk_mem;
+
+  VkImageCreateInfo create_info;
+  VkMemoryRequirements requirements;
+  VkImageFormatProperties format_properties;
+  VkImageUsageFlags usage;
+
+  GMutex lock;
+  gboolean wrapped;
+  GDestroyNotify notify;
+  gpointer user_data;
+};
+
+/**
+ * GstVulkanImageMemoryAllocator
+ *
+ * Opaque #GstVulkanImageMemoryAllocator struct
+ */
+struct _GstVulkanImageMemoryAllocator
+{
+  GstAllocator parent;
+};
+
+/**
+ * GstVulkanImageMemoryAllocatorClass:
+ *
+ * The #GstVulkanImageMemoryAllocatorClass only contains private data
+ */
+struct _GstVulkanImageMemoryAllocatorClass
+{
+  GstAllocatorClass parent_class;
+};
+
+void            gst_vulkan_image_memory_init_once       (void);
+gboolean        gst_is_vulkan_image_memory              (GstMemory * mem);
+
+GstMemory *     gst_vulkan_image_memory_alloc           (GstVulkanDevice * device,
+                                                         VkFormat format,
+                                                         gsize width,
+                                                         gsize height,
+                                                         VkImageTiling tiling,
+                                                         VkImageUsageFlags usage,
+                                                         VkMemoryPropertyFlags mem_prop_flags);
+
+GstMemory *     gst_vulkan_image_memory_wrapped         (GstVulkanDevice * device,
+                                                         VkImage image,
+                                                         VkFormat format,
+                                                         gsize width,
+                                                         gsize height,
+                                                         VkImageTiling tiling,
+                                                         VkImageUsageFlags usage,
+                                                         gpointer user_data,
+                                                         GDestroyNotify notify);
+
+gboolean        gst_vulkan_image_memory_set_layout      (GstVulkanImageMemory * vk_mem,
+                                                         VkImageLayout,
+                                                         VkImageMemoryBarrier * barrier);
+
+guint32         gst_vulkan_image_memory_get_width       (GstVulkanImageMemory * image);
+guint32         gst_vulkan_image_memory_get_height      (GstVulkanImageMemory * image);
+
+VkFormat gst_vulkan_format_from_video_format (GstVideoFormat v_format,
+                                              guint plane);
+
+G_END_DECLS
+
+#endif /* _VK_IMAGE_MEMORY_H_ */
diff --git a/ext/vulkan/vkinstance.c b/ext/vulkan/vkinstance.c
new file mode 100644
index 0000000..28c4e78
--- /dev/null
+++ b/ext/vulkan/vkinstance.c
@@ -0,0 +1,542 @@
+/*
+ * GStreamer
+ * Copyright (C) 2015 Matthew Waters <matthew@centricular.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include "vkinstance.h"
+#include "vkutils_private.h"
+
+#include <string.h>
+
+#define APP_SHORT_NAME "GStreamer"
+
+static const char *instance_validation_layers[] = {
+  "VK_LAYER_LUNARG_threading",
+  "VK_LAYER_LUNARG_mem_tracker",
+  "VK_LAYER_LUNARG_object_tracker",
+  "VK_LAYER_LUNARG_draw_state",
+  "VK_LAYER_LUNARG_param_checker",
+  "VK_LAYER_LUNARG_swapchain",
+  "VK_LAYER_LUNARG_device_limits",
+  "VK_LAYER_LUNARG_image",
+};
+
+#define GST_CAT_DEFAULT gst_vulkan_instance_debug
+GST_DEBUG_CATEGORY (GST_CAT_DEFAULT);
+GST_DEBUG_CATEGORY (GST_VULKAN_DEBUG_CAT);
+GST_DEBUG_CATEGORY_STATIC (GST_CAT_CONTEXT);
+
+enum
+{
+  SIGNAL_0,
+  SIGNAL_CREATE_DEVICE,
+  LAST_SIGNAL
+};
+
+static guint gst_vulkan_instance_signals[LAST_SIGNAL] = { 0 };
+
+#define gst_vulkan_instance_parent_class parent_class
+G_DEFINE_TYPE_WITH_CODE (GstVulkanInstance, gst_vulkan_instance,
+    GST_TYPE_OBJECT, GST_DEBUG_CATEGORY_INIT (GST_CAT_DEFAULT,
+        "vulkaninstance", 0, "Vulkan Instance");
+    GST_DEBUG_CATEGORY_INIT (GST_VULKAN_DEBUG_CAT,
+        "vulkandebug", 0, "Vulkan Debug");
+    GST_DEBUG_CATEGORY_GET (GST_CAT_CONTEXT, "GST_CONTEXT"));
+
+static void gst_vulkan_instance_finalize (GObject * object);
+
+struct _GstVulkanInstancePrivate
+{
+  gboolean opened;
+};
+
+GstVulkanInstance *
+gst_vulkan_instance_new (void)
+{
+  return g_object_new (GST_TYPE_VULKAN_INSTANCE, NULL);
+}
+
+static void
+gst_vulkan_instance_init (GstVulkanInstance * instance)
+{
+  instance->priv = G_TYPE_INSTANCE_GET_PRIVATE ((instance),
+      GST_TYPE_VULKAN_INSTANCE, GstVulkanInstancePrivate);
+}
+
+static void
+gst_vulkan_instance_class_init (GstVulkanInstanceClass * klass)
+{
+  gst_vulkan_memory_init_once ();
+  gst_vulkan_image_memory_init_once ();
+  gst_vulkan_buffer_memory_init_once ();
+
+  g_type_class_add_private (klass, sizeof (GstVulkanInstancePrivate));
+
+  /**
+   * GstVulkanInstance::create-device:
+   * @object: the #GstVulkanDisplay
+   *
+   * Overrides the #GstVulkanDevice creation mechanism.
+   * It can be called from any thread.
+   *
+   * Returns: the newly created #GstVulkanDevice.
+   */
+  gst_vulkan_instance_signals[SIGNAL_CREATE_DEVICE] =
+      g_signal_new ("create-device", G_TYPE_FROM_CLASS (klass),
+      G_SIGNAL_RUN_LAST, 0, NULL, NULL, g_cclosure_marshal_generic,
+      GST_TYPE_VULKAN_DEVICE, 0);
+
+  G_OBJECT_CLASS (klass)->finalize = gst_vulkan_instance_finalize;
+}
+
+static void
+gst_vulkan_instance_finalize (GObject * object)
+{
+  GstVulkanInstance *instance = GST_VULKAN_INSTANCE (object);
+
+  if (instance->priv->opened) {
+    if (instance->dbgDestroyDebugReportCallback)
+      instance->dbgDestroyDebugReportCallback (instance->instance,
+          instance->msg_callback, NULL);
+
+    g_free (instance->physical_devices);
+  }
+  instance->priv->opened = FALSE;
+
+  if (instance->instance)
+    vkDestroyInstance (instance->instance, NULL);
+  instance->instance = NULL;
+
+  G_OBJECT_CLASS (parent_class)->finalize (object);
+}
+
+static VkBool32
+_gst_vk_debug_callback (VkDebugReportFlagsEXT msgFlags,
+    VkDebugReportObjectTypeEXT objType, uint64_t srcObject, size_t location,
+    int32_t msgCode, const char *pLayerPrefix, const char *pMsg,
+    void *pUserData)
+{
+  if (msgFlags & VK_DEBUG_REPORT_ERROR_BIT_EXT) {
+    GST_CAT_ERROR (GST_VULKAN_DEBUG_CAT, "[%s] Code %d : %s", pLayerPrefix,
+        msgCode, pMsg);
+  } else if (msgFlags & VK_DEBUG_REPORT_WARNING_BIT_EXT) {
+    GST_CAT_WARNING (GST_VULKAN_DEBUG_CAT, "[%s] Code %d : %s", pLayerPrefix,
+        msgCode, pMsg);
+  } else if (msgFlags & VK_DEBUG_REPORT_INFORMATION_BIT_EXT) {
+    GST_CAT_LOG (GST_VULKAN_DEBUG_CAT, "[%s] Code %d : %s", pLayerPrefix,
+        msgCode, pMsg);
+  } else if (msgFlags & VK_DEBUG_REPORT_PERFORMANCE_WARNING_BIT_EXT) {
+    GST_CAT_FIXME (GST_VULKAN_DEBUG_CAT, "[%s] Code %d : %s", pLayerPrefix,
+        msgCode, pMsg);
+  } else if (msgFlags & VK_DEBUG_REPORT_DEBUG_BIT_EXT) {
+    GST_CAT_TRACE (GST_VULKAN_DEBUG_CAT, "[%s] Code %d : %s", pLayerPrefix,
+        msgCode, pMsg);
+  } else {
+    return FALSE;
+  }
+
+  /*
+   * false indicates that layer should not bail-out of an
+   * API call that had validation failures. This may mean that the
+   * app dies inside the driver due to invalid parameter(s).
+   * That's what would happen without validation layers, so we'll
+   * keep that behavior here.
+   */
+  return FALSE;
+}
+
+gboolean
+gst_vulkan_instance_open (GstVulkanInstance * instance, GError ** error)
+{
+  VkExtensionProperties *instance_extensions;
+  char *extension_names[64];    /* FIXME: make dynamic */
+  VkLayerProperties *instance_layers;
+  uint32_t instance_extension_count = 0;
+  uint32_t enabled_extension_count = 0;
+  uint32_t instance_layer_count = 0;
+  uint32_t enabled_layer_count = 0;
+  gboolean validation_found;
+  VkResult err;
+
+  GST_OBJECT_LOCK (instance);
+  if (instance->priv->opened) {
+    GST_OBJECT_UNLOCK (instance);
+    return TRUE;
+  }
+
+  /* Look for validation layers */
+  err = vkEnumerateInstanceLayerProperties (&instance_layer_count, NULL);
+  if (gst_vulkan_error_to_g_error (err, error,
+          "vKEnumerateInstanceLayerProperties") < 0)
+    goto error;
+
+  instance_layers = g_new0 (VkLayerProperties, instance_layer_count);
+  err =
+      vkEnumerateInstanceLayerProperties (&instance_layer_count,
+      instance_layers);
+  if (gst_vulkan_error_to_g_error (err, error,
+          "vKEnumerateInstanceLayerProperties") < 0) {
+    g_free (instance_layers);
+    goto error;
+  }
+
+  /* TODO: allow outside selection */
+  validation_found =
+      _check_for_all_layers (G_N_ELEMENTS (instance_validation_layers),
+      instance_validation_layers, instance_layer_count, instance_layers);
+  if (!validation_found) {
+    g_error ("vkEnumerateInstanceLayerProperties failed to find"
+        "required validation layer.\n\n"
+        "Please look at the Getting Started guide for additional "
+        "information.\nvkCreateInstance Failure");
+  }
+  enabled_layer_count = G_N_ELEMENTS (instance_validation_layers);
+
+  err =
+      vkEnumerateInstanceExtensionProperties (NULL, &instance_extension_count,
+      NULL);
+  if (gst_vulkan_error_to_g_error (err, error,
+          "vkEnumerateInstanceExtensionProperties") < 0) {
+    g_free (instance_layers);
+    goto error;
+  }
+  GST_DEBUG_OBJECT (instance, "Found %u extensions", instance_extension_count);
+
+  memset (extension_names, 0, sizeof (extension_names));
+  instance_extensions =
+      g_new0 (VkExtensionProperties, instance_extension_count);
+  err =
+      vkEnumerateInstanceExtensionProperties (NULL, &instance_extension_count,
+      instance_extensions);
+  if (gst_vulkan_error_to_g_error (err, error,
+          "vkEnumerateInstanceExtensionProperties") < 0) {
+    g_free (instance_layers);
+    g_free (instance_extensions);
+    goto error;
+  }
+
+  {
+    GstVulkanDisplayType display_type;
+    gboolean swapchain_ext_found = FALSE;
+    gboolean winsys_ext_found = FALSE;
+    const gchar *winsys_ext_name;
+
+    display_type = gst_vulkan_display_choose_type (instance);
+
+    winsys_ext_name =
+        gst_vulkan_display_type_to_extension_string (display_type);
+    if (!winsys_ext_name) {
+      GST_WARNING_OBJECT (instance, "No window system extension enabled");
+      winsys_ext_found = TRUE;  /* Don't error out completely */
+    }
+
+    /* TODO: allow outside selection */
+    for (uint32_t i = 0; i < instance_extension_count; i++) {
+      GST_TRACE_OBJECT (instance, "checking instance extension %s",
+          instance_extensions[i].extensionName);
+
+      if (!g_strcmp0 (VK_KHR_SURFACE_EXTENSION_NAME,
+              instance_extensions[i].extensionName)) {
+        swapchain_ext_found = TRUE;
+        extension_names[enabled_extension_count++] =
+            (gchar *) VK_KHR_SURFACE_EXTENSION_NAME;
+      }
+      if (!g_strcmp0 (VK_EXT_DEBUG_REPORT_EXTENSION_NAME,
+              instance_extensions[i].extensionName)) {
+        extension_names[enabled_extension_count++] =
+            (gchar *) VK_EXT_DEBUG_REPORT_EXTENSION_NAME;
+      }
+      if (!g_strcmp0 (winsys_ext_name, instance_extensions[i].extensionName)) {
+        winsys_ext_found = TRUE;
+        extension_names[enabled_extension_count++] = (gchar *) winsys_ext_name;
+      }
+      g_assert (enabled_extension_count < 64);
+    }
+    if (!swapchain_ext_found) {
+      g_set_error (error, GST_VULKAN_ERROR, VK_ERROR_INITIALIZATION_FAILED,
+          "vkEnumerateInstanceExtensionProperties failed to find the required "
+          "\"" VK_KHR_SURFACE_EXTENSION_NAME "\" extension");
+      g_free (instance_layers);
+      g_free (instance_extensions);
+      goto error;
+    }
+    if (!winsys_ext_found) {
+      g_set_error (error, GST_VULKAN_ERROR, VK_ERROR_INITIALIZATION_FAILED,
+          "vkEnumerateInstanceExtensionProperties failed to find the required "
+          "\"%s\" window system extension", winsys_ext_name);
+      g_free (instance_layers);
+      g_free (instance_extensions);
+      goto error;
+    }
+  }
+
+  {
+    VkApplicationInfo app = { 0, };
+    VkInstanceCreateInfo inst_info = { 0, };
+
+    app.sType = VK_STRUCTURE_TYPE_APPLICATION_INFO;
+    app.pNext = NULL;
+    app.pApplicationName = APP_SHORT_NAME;
+    app.applicationVersion = 0;
+    app.pEngineName = APP_SHORT_NAME;
+    app.engineVersion = 0;
+    app.apiVersion = VK_API_VERSION;
+
+    inst_info.sType = VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO;
+    inst_info.pNext = NULL;
+    inst_info.pApplicationInfo = &app;
+    inst_info.enabledLayerCount = enabled_layer_count;
+    inst_info.ppEnabledLayerNames =
+        (const char *const *) instance_validation_layers;
+    inst_info.enabledExtensionCount = enabled_extension_count;
+    inst_info.ppEnabledExtensionNames = (const char *const *) extension_names;
+
+    err = vkCreateInstance (&inst_info, NULL, &instance->instance);
+    if (gst_vulkan_error_to_g_error (err, error, "vkCreateInstance") < 0) {
+      g_free (instance_layers);
+      g_free (instance_extensions);
+      goto error;
+    }
+  }
+
+  g_free (instance_layers);
+  g_free (instance_extensions);
+
+  err =
+      vkEnumeratePhysicalDevices (instance->instance,
+      &instance->n_physical_devices, NULL);
+  if (gst_vulkan_error_to_g_error (err, error,
+          "vkEnumeratePhysicalDevices") < 0)
+    goto error;
+  g_assert (instance->n_physical_devices > 0);
+  instance->physical_devices =
+      g_new0 (VkPhysicalDevice, instance->n_physical_devices);
+  err =
+      vkEnumeratePhysicalDevices (instance->instance,
+      &instance->n_physical_devices, instance->physical_devices);
+  if (gst_vulkan_error_to_g_error (err, error,
+          "vkEnumeratePhysicalDevices") < 0)
+    goto error;
+
+  instance->dbgCreateDebugReportCallback = (PFN_vkCreateDebugReportCallbackEXT)
+      gst_vulkan_instance_get_proc_address (instance,
+      "vkCreateDebugReportCallbackEXT");
+  if (!instance->dbgCreateDebugReportCallback) {
+    g_set_error (error, GST_VULKAN_ERROR, VK_ERROR_INITIALIZATION_FAILED,
+        "Failed to retreive vkCreateDebugReportCallback");
+    goto error;
+  }
+  instance->dbgDestroyDebugReportCallback =
+      (PFN_vkDestroyDebugReportCallbackEXT)
+      gst_vulkan_instance_get_proc_address (instance,
+      "vkDestroyDebugReportCallbackEXT");
+  if (!instance->dbgDestroyDebugReportCallback) {
+    g_set_error (error, GST_VULKAN_ERROR, VK_ERROR_INITIALIZATION_FAILED,
+        "Failed to retreive vkDestroyDebugReportCallback");
+    goto error;
+  }
+  instance->dbgReportMessage = (PFN_vkDebugReportMessageEXT)
+      gst_vulkan_instance_get_proc_address (instance,
+      "vkDebugReportMessageEXT");
+  if (!instance->dbgReportMessage) {
+    g_set_error (error, GST_VULKAN_ERROR, VK_ERROR_INITIALIZATION_FAILED,
+        "Failed to retreive vkDebugReportMessage");
+    goto error;
+  }
+
+  {
+    VkDebugReportCallbackCreateInfoEXT info = { 0, };
+
+    info.sType = VK_STRUCTURE_TYPE_DEBUG_REPORT_CREATE_INFO_EXT;
+    info.pNext = NULL;
+    info.flags =
+        VK_DEBUG_REPORT_ERROR_BIT_EXT | VK_DEBUG_REPORT_WARNING_BIT_EXT |
+        VK_DEBUG_REPORT_INFORMATION_BIT_EXT | VK_DEBUG_REPORT_DEBUG_BIT_EXT |
+        VK_DEBUG_REPORT_PERFORMANCE_WARNING_BIT_EXT;
+    info.pfnCallback = (PFN_vkDebugReportCallbackEXT) _gst_vk_debug_callback;
+    info.pUserData = NULL;
+
+    err =
+        instance->dbgCreateDebugReportCallback (instance->instance, &info, NULL,
+        &instance->msg_callback);
+    if (gst_vulkan_error_to_g_error (err, error,
+            "vkCreateDebugReportCallback") < 0)
+      goto error;
+  }
+
+  instance->priv->opened = TRUE;
+  GST_OBJECT_UNLOCK (instance);
+
+  return TRUE;
+
+error:
+  {
+    GST_OBJECT_UNLOCK (instance);
+    return FALSE;
+  }
+}
+
+gpointer
+gst_vulkan_instance_get_proc_address (GstVulkanInstance * instance,
+    const gchar * name)
+{
+  g_return_val_if_fail (GST_IS_VULKAN_INSTANCE (instance), NULL);
+  g_return_val_if_fail (instance->instance != NULL, NULL);
+  g_return_val_if_fail (name != NULL, NULL);
+
+  GST_TRACE_OBJECT (instance, "%s", name);
+
+  return vkGetInstanceProcAddr (instance->instance, name);
+}
+
+GstVulkanDevice *
+gst_vulkan_instance_create_device (GstVulkanInstance * instance,
+    GError ** error)
+{
+  GstVulkanDevice *device;
+
+  g_return_val_if_fail (GST_IS_VULKAN_INSTANCE (instance), NULL);
+
+  g_signal_emit (instance, gst_vulkan_instance_signals[SIGNAL_CREATE_DEVICE], 0,
+      &device);
+
+  if (!device)
+    device = gst_vulkan_device_new (instance);
+
+  if (!gst_vulkan_device_open (device, error)) {
+    gst_object_unref (device);
+    device = NULL;
+  }
+
+  return device;
+}
+
+/**
+ * gst_context_set_vulkan_instance:
+ * @context: a #GstContext
+ * @instance: a #GstVulkanInstance
+ *
+ * Sets @instance on @context
+ *
+ * Since: 1.10
+ */
+void
+gst_context_set_vulkan_instance (GstContext * context,
+    GstVulkanInstance * instance)
+{
+  GstStructure *s;
+
+  g_return_if_fail (context != NULL);
+  g_return_if_fail (gst_context_is_writable (context));
+
+  if (instance)
+    GST_CAT_LOG (GST_CAT_CONTEXT,
+        "setting GstVulkanInstance(%" GST_PTR_FORMAT ") on context(%"
+        GST_PTR_FORMAT ")", instance, context);
+
+  s = gst_context_writable_structure (context);
+  gst_structure_set (s, GST_VULKAN_INSTANCE_CONTEXT_TYPE_STR,
+      GST_TYPE_VULKAN_INSTANCE, instance, NULL);
+}
+
+/**
+ * gst_context_get_vulkan_instance:
+ * @context: a #GstContext
+ * @instance: resulting #GstVulkanInstance
+ *
+ * Returns: Whether @instance was in @context
+ *
+ * Since: 1.10
+ */
+gboolean
+gst_context_get_vulkan_instance (GstContext * context,
+    GstVulkanInstance ** instance)
+{
+  const GstStructure *s;
+  gboolean ret;
+
+  g_return_val_if_fail (instance != NULL, FALSE);
+  g_return_val_if_fail (context != NULL, FALSE);
+
+  s = gst_context_get_structure (context);
+  ret = gst_structure_get (s, GST_VULKAN_INSTANCE_CONTEXT_TYPE_STR,
+      GST_TYPE_VULKAN_INSTANCE, instance, NULL);
+
+  GST_CAT_LOG (GST_CAT_CONTEXT, "got GstVulkanInstance(%" GST_PTR_FORMAT
+      ") from context(%" GST_PTR_FORMAT ")", *instance, context);
+
+  return ret;
+}
+
+gboolean
+gst_vulkan_instance_handle_context_query (GstElement * element,
+    GstQuery * query, GstVulkanInstance ** instance)
+{
+  gboolean res = FALSE;
+  const gchar *context_type;
+  GstContext *context, *old_context;
+
+  g_return_val_if_fail (element != NULL, FALSE);
+  g_return_val_if_fail (query != NULL, FALSE);
+  g_return_val_if_fail (GST_QUERY_TYPE (query) == GST_QUERY_CONTEXT, FALSE);
+  g_return_val_if_fail (instance != NULL, FALSE);
+
+  gst_query_parse_context_type (query, &context_type);
+
+  if (g_strcmp0 (context_type, GST_VULKAN_INSTANCE_CONTEXT_TYPE_STR) == 0) {
+    gst_query_parse_context (query, &old_context);
+
+    if (old_context)
+      context = gst_context_copy (old_context);
+    else
+      context = gst_context_new (GST_VULKAN_INSTANCE_CONTEXT_TYPE_STR, TRUE);
+
+    gst_context_set_vulkan_instance (context, *instance);
+    gst_query_set_context (query, context);
+    gst_context_unref (context);
+
+    res = *instance != NULL;
+  }
+
+  return res;
+}
+
+gboolean
+gst_vulkan_instance_run_context_query (GstElement * element,
+    GstVulkanInstance ** instance)
+{
+  g_return_val_if_fail (GST_IS_ELEMENT (element), FALSE);
+  g_return_val_if_fail (instance != NULL, FALSE);
+
+  if (*instance && GST_IS_VULKAN_INSTANCE (*instance))
+    return TRUE;
+
+  gst_vulkan_global_context_query (element,
+      GST_VULKAN_INSTANCE_CONTEXT_TYPE_STR);
+
+  GST_DEBUG_OBJECT (element, "found instance %p", *instance);
+
+  if (*instance)
+    return TRUE;
+
+  return FALSE;
+}
diff --git a/ext/vulkan/vkinstance.h b/ext/vulkan/vkinstance.h
new file mode 100644
index 0000000..e7d8e49
--- /dev/null
+++ b/ext/vulkan/vkinstance.h
@@ -0,0 +1,81 @@
+/*
+ * GStreamer
+ * Copyright (C) 2015 Matthew Waters <matthew@centricular.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifndef _VK_INSTANCE_H_
+#define _VK_INSTANCE_H_
+
+#include <vk.h>
+
+G_BEGIN_DECLS
+
+#define GST_TYPE_VULKAN_INSTANCE         (gst_vulkan_instance_get_type())
+#define GST_VULKAN_INSTANCE(o)           (G_TYPE_CHECK_INSTANCE_CAST((o), GST_TYPE_VULKAN_INSTANCE, GstVulkanInstance))
+#define GST_VULKAN_INSTANCE_CLASS(k)     (G_TYPE_CHECK_CLASS_CAST((k), GST_TYPE_VULKAN_INSTANCE, GstVulkanInstanceClass))
+#define GST_IS_VULKAN_INSTANCE(o)        (G_TYPE_CHECK_INSTANCE_TYPE((o), GST_TYPE_VULKAN_INSTANCE))
+#define GST_IS_VULKAN_INSTANCE_CLASS(k)  (G_TYPE_CHECK_CLASS_TYPE((k), GST_TYPE_VULKAN_INSTANCE))
+#define GST_VULKAN_INSTANCE_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS((o), GST_TYPE_VULKAN_INSTANCE, GstVulkanInstanceClass))
+GType gst_vulkan_instance_get_type       (void);
+
+#define GST_VULKAN_INSTANCE_CONTEXT_TYPE_STR "gst.vulkan.instance"
+
+struct _GstVulkanInstance
+{
+  GstObject parent;
+
+  VkInstance instance; /* hides a pointer */
+  VkPhysicalDevice *physical_devices; /* hides a pointer */
+  guint32 n_physical_devices;
+
+  VkDebugReportCallbackEXT msg_callback;
+  PFN_vkCreateDebugReportCallbackEXT dbgCreateDebugReportCallback;
+  PFN_vkDestroyDebugReportCallbackEXT dbgDestroyDebugReportCallback;
+  PFN_vkDebugReportMessageEXT dbgReportMessage;
+
+  GstVulkanInstancePrivate *priv;
+};
+
+struct _GstVulkanInstanceClass
+{
+  GstObjectClass parent_class;
+};
+
+GstVulkanInstance * gst_vulkan_instance_new                     (void);
+gboolean            gst_vulkan_instance_open                    (GstVulkanInstance * instance,
+                                                                 GError ** error);
+
+gpointer            gst_vulkan_instance_get_proc_address        (GstVulkanInstance * instance,
+                                                                 const gchar * name);
+
+GstVulkanDevice *   gst_vulkan_instance_create_device           (GstVulkanInstance * instance,
+                                                                 GError ** error);
+
+void                gst_context_set_vulkan_instance             (GstContext * context,
+                                                                 GstVulkanInstance * instance);
+gboolean            gst_context_get_vulkan_instance             (GstContext * context,
+                                                                 GstVulkanInstance ** instance);
+gboolean            gst_vulkan_instance_handle_context_query    (GstElement * element,
+                                                                 GstQuery * query,
+                                                                 GstVulkanInstance ** instance);
+gboolean            gst_vulkan_instance_run_context_query       (GstElement * element,
+                                                                 GstVulkanInstance ** instance);
+
+G_END_DECLS
+
+#endif /* _VK_INSTANCE_H_ */
diff --git a/ext/vulkan/vkmemory.c b/ext/vulkan/vkmemory.c
new file mode 100644
index 0000000..52855c1
--- /dev/null
+++ b/ext/vulkan/vkmemory.c
@@ -0,0 +1,359 @@
+/*
+ * GStreamer
+ * Copyright (C) 2015 Matthew Waters <matthew@centricular.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <string.h>
+
+#include "vkmemory.h"
+
+/**
+ * SECTION:vkmemory
+ * @short_description: memory subclass for Vulkan device memory
+ * @see_also: #GstMemory, #GstAllocator
+ *
+ * GstVulkanMemory is a #GstMemory subclass providing support for the mapping of
+ * Vulkan device memory.  
+ */
+
+/* WARNING: while suballocation is allowed, nothing prevents aliasing which
+ * requires external synchronisation */
+
+#define GST_CAT_DEFUALT GST_CAT_VULKAN_MEMORY
+GST_DEBUG_CATEGORY_STATIC (GST_CAT_DEFUALT);
+
+static GstAllocator *_vulkan_memory_allocator;
+
+static gchar *
+_memory_properties_to_string (VkMemoryPropertyFlags prop_bits)
+{
+  GString *s;
+  gboolean first = TRUE;
+
+#define STR_APPEND(s,str) \
+  G_STMT_START { \
+    if (!first) \
+      g_string_append (s, "|"); \
+    g_string_append (s, str); \
+    first = FALSE; \
+  } G_STMT_END
+
+  s = g_string_new (NULL);
+  if (prop_bits & VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT) {
+    STR_APPEND (s, "device-local");
+  }
+  if (prop_bits & VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT) {
+    STR_APPEND (s, "host-visible");
+    if (prop_bits & VK_MEMORY_PROPERTY_HOST_COHERENT_BIT) {
+      STR_APPEND (s, "host-coherent");
+    } else {
+      STR_APPEND (s, "host-incoherent");
+    }
+    if (prop_bits & VK_MEMORY_PROPERTY_HOST_CACHED_BIT) {
+      STR_APPEND (s, "host-cached");
+    } else {
+      STR_APPEND (s, "host-uncached");
+    }
+  }
+
+  if (prop_bits & VK_MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT) {
+    STR_APPEND (s, "lazily-allocated");
+  }
+
+  return g_string_free (s, FALSE);
+}
+
+static void
+_vk_mem_init (GstVulkanMemory * mem, GstAllocator * allocator,
+    GstMemory * parent, GstVulkanDevice * device, guint32 memory_type_index,
+    GstAllocationParams * params, gsize size,
+    VkMemoryPropertyFlags mem_prop_flags, gpointer user_data,
+    GDestroyNotify notify)
+{
+  gsize align = gst_memory_alignment, offset = 0, maxsize = size;
+  GstMemoryFlags flags = 0;
+  gchar *props_str;
+
+  if (params) {
+    flags = params->flags;
+    align |= params->align;
+    offset = params->prefix;
+    maxsize += params->prefix + params->padding;
+    if ((maxsize & align) != 0)
+      maxsize += ~(maxsize & align) + 1;
+  }
+
+  gst_memory_init (GST_MEMORY_CAST (mem), flags, allocator, parent, maxsize,
+      align, offset, size);
+
+  mem->device = gst_object_ref (device);
+  mem->alloc_info.sType = VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO;
+  mem->alloc_info.pNext = NULL;
+  mem->alloc_info.allocationSize = (VkDeviceSize) mem->mem.maxsize;
+  mem->alloc_info.memoryTypeIndex = memory_type_index;
+  mem->properties = mem_prop_flags;
+  mem->notify = notify;
+  mem->user_data = user_data;
+  mem->vk_offset = 0;
+
+  g_mutex_init (&mem->lock);
+
+  props_str = _memory_properties_to_string (mem_prop_flags);
+
+  GST_CAT_DEBUG (GST_CAT_VULKAN_MEMORY, "new Vulkan memory:%p size:%"
+      G_GSIZE_FORMAT " properties:%s", mem, maxsize, props_str);
+
+  g_free (props_str);
+}
+
+static GstVulkanMemory *
+_vk_mem_new (GstAllocator * allocator, GstMemory * parent,
+    GstVulkanDevice * device, guint32 memory_type_index,
+    GstAllocationParams * params, gsize size,
+    VkMemoryPropertyFlags mem_props_flags, gpointer user_data,
+    GDestroyNotify notify)
+{
+  GstVulkanMemory *mem = g_new0 (GstVulkanMemory, 1);
+  GError *error = NULL;
+  VkResult err;
+
+  _vk_mem_init (mem, allocator, parent, device, memory_type_index, params,
+      size, mem_props_flags, user_data, notify);
+
+  err =
+      vkAllocateMemory (device->device, &mem->alloc_info, NULL, &mem->mem_ptr);
+  if (gst_vulkan_error_to_g_error (err, &error, "vkAllocMemory") < 0) {
+    GST_CAT_ERROR (GST_CAT_VULKAN_MEMORY, "Failed to allocate device memory %s",
+        error->message);
+    gst_memory_unref ((GstMemory *) mem);
+    g_clear_error (&error);
+    return NULL;
+  }
+
+  return mem;
+}
+
+static gpointer
+_vk_mem_map_full (GstVulkanMemory * mem, GstMapInfo * info, gsize size)
+{
+  gpointer data;
+  VkResult err;
+  GError *error = NULL;
+
+  if ((mem->properties & VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT) == 0) {
+    GST_CAT_ERROR (GST_CAT_VULKAN_MEMORY, "Cannot map host-invisible memory");
+    return NULL;
+  }
+
+  err = vkMapMemory (mem->device->device, mem->mem_ptr, mem->vk_offset,
+      size, 0, &data);
+  if (gst_vulkan_error_to_g_error (err, &error, "vkMapMemory") < 0) {
+    GST_CAT_ERROR (GST_CAT_VULKAN_MEMORY, "Failed to map device memory %s",
+        error->message);
+    g_clear_error (&error);
+    return NULL;
+  }
+
+  return data;
+}
+
+static void
+_vk_mem_unmap_full (GstVulkanMemory * mem, GstMapInfo * info)
+{
+  vkUnmapMemory (mem->device->device, mem->mem_ptr);
+}
+
+static GstMemory *
+_vk_mem_copy (GstVulkanMemory * src, gssize offset, gssize size)
+{
+  return NULL;
+}
+
+static GstMemory *
+_vk_mem_share (GstVulkanMemory * mem, gssize offset, gsize size)
+{
+  GstVulkanMemory *shared = g_new0 (GstVulkanMemory, 1);
+  GstVulkanMemory *parent = mem;
+  GstAllocationParams params = { 0, };
+
+  if (size == -1)
+    size = mem->mem.size - offset;
+
+  g_return_val_if_fail (size > 0, NULL);
+
+  while ((parent = (GstVulkanMemory *) (GST_MEMORY_CAST (parent)->parent)));
+
+  params.flags = GST_MEMORY_FLAGS (mem);
+  params.align = GST_MEMORY_CAST (parent)->align;
+
+  _vk_mem_init (shared, _vulkan_memory_allocator, GST_MEMORY_CAST (mem),
+      parent->device, parent->alloc_info.memoryTypeIndex, &params, size,
+      parent->properties, NULL, NULL);
+  shared->mem_ptr = parent->mem_ptr;
+  shared->wrapped = TRUE;
+  shared->vk_offset = offset + mem->vk_offset;
+
+  return GST_MEMORY_CAST (shared);
+}
+
+static gboolean
+_vk_mem_is_span (GstVulkanMemory * mem1, GstVulkanMemory * mem2, gsize * offset)
+{
+  return FALSE;
+}
+
+static GstMemory *
+_vk_mem_alloc (GstAllocator * allocator, gsize size,
+    GstAllocationParams * params)
+{
+  g_critical ("Subclass should override GstAllocatorClass::alloc() function");
+
+  return NULL;
+}
+
+static void
+_vk_mem_free (GstAllocator * allocator, GstMemory * memory)
+{
+  GstVulkanMemory *mem = (GstVulkanMemory *) memory;
+
+  GST_CAT_TRACE (GST_CAT_VULKAN_MEMORY, "freeing buffer memory:%p "
+      "id:%" G_GUINT64_FORMAT, mem, (guint64) mem->mem_ptr);
+
+  g_mutex_clear (&mem->lock);
+
+  if (mem->notify)
+    mem->notify (mem->user_data);
+
+  if (mem->mem_ptr && !mem->wrapped)
+    vkFreeMemory (mem->device->device, mem->mem_ptr, NULL);
+
+  gst_object_unref (mem->device);
+}
+
+gboolean
+gst_vulkan_memory_find_memory_type_index_with_type_properties (GstVulkanDevice *
+    device, guint32 typeBits, VkMemoryPropertyFlags properties,
+    guint32 * typeIndex)
+{
+  guint32 i;
+
+  /* Search memtypes to find first index with those properties */
+  for (i = 0; i < 32; i++) {
+    if ((typeBits & 1) == 1) {
+      /* Type is available, does it match user properties? */
+      if ((device->memory_properties.memoryTypes[i].
+              propertyFlags & properties) == properties) {
+        *typeIndex = i;
+        return TRUE;
+      }
+    }
+    typeBits >>= 1;
+  }
+
+  return FALSE;
+}
+
+/**
+ * gst_vulkan_memory_alloc:
+ * @device:a #GstVulkanDevice
+ * @memory_type_index: the Vulkan memory type index
+ * @params: a #GstAllocationParams
+ * @size: the size to allocate
+ *
+ * Allocated a new #GstVulkanMemory.
+ *
+ * Returns: a #GstMemory object backed by a vulkan device memory
+ */
+GstMemory *
+gst_vulkan_memory_alloc (GstVulkanDevice * device, guint32 memory_type_index,
+    GstAllocationParams * params, gsize size, VkMemoryPropertyFlags mem_flags)
+{
+  GstVulkanMemory *mem;
+
+  mem = _vk_mem_new (_vulkan_memory_allocator, NULL, device, memory_type_index,
+      params, size, mem_flags, NULL, NULL);
+
+  return (GstMemory *) mem;
+}
+
+G_DEFINE_TYPE (GstVulkanMemoryAllocator, gst_vulkan_memory_allocator,
+    GST_TYPE_ALLOCATOR);
+
+static void
+gst_vulkan_memory_allocator_class_init (GstVulkanMemoryAllocatorClass * klass)
+{
+  GstAllocatorClass *allocator_class = (GstAllocatorClass *) klass;
+
+  allocator_class->alloc = _vk_mem_alloc;
+  allocator_class->free = _vk_mem_free;
+}
+
+static void
+gst_vulkan_memory_allocator_init (GstVulkanMemoryAllocator * allocator)
+{
+  GstAllocator *alloc = GST_ALLOCATOR_CAST (allocator);
+
+  alloc->mem_type = GST_VULKAN_MEMORY_ALLOCATOR_NAME;
+  alloc->mem_map_full = (GstMemoryMapFullFunction) _vk_mem_map_full;
+  alloc->mem_unmap_full = (GstMemoryUnmapFullFunction) _vk_mem_unmap_full;
+  alloc->mem_copy = (GstMemoryCopyFunction) _vk_mem_copy;
+  alloc->mem_share = (GstMemoryShareFunction) _vk_mem_share;
+  alloc->mem_is_span = (GstMemoryIsSpanFunction) _vk_mem_is_span;
+}
+
+/**
+ * gst_vulkan_memory_init_once:
+ *
+ * Initializes the Vulkan memory allocator. It is safe to call this function
+ * multiple times.  This must be called before any other #GstVulkanMemory operation.
+ */
+void
+gst_vulkan_memory_init_once (void)
+{
+  static volatile gsize _init = 0;
+
+  if (g_once_init_enter (&_init)) {
+    GST_DEBUG_CATEGORY_INIT (GST_CAT_VULKAN_MEMORY, "vulkanmemory", 0,
+        "Vulkan Memory");
+
+    _vulkan_memory_allocator =
+        g_object_new (gst_vulkan_memory_allocator_get_type (), NULL);
+
+    gst_allocator_register (GST_VULKAN_MEMORY_ALLOCATOR_NAME,
+        gst_object_ref (_vulkan_memory_allocator));
+    g_once_init_leave (&_init, 1);
+  }
+}
+
+/**
+ * gst_is_vulkan_memory:
+ * @mem:a #GstMemory
+ * 
+ * Returns: whether the memory at @mem is a #GstVulkanMemory
+ */
+gboolean
+gst_is_vulkan_memory (GstMemory * mem)
+{
+  return mem != NULL && mem->allocator != NULL &&
+      g_type_is_a (G_OBJECT_TYPE (mem->allocator),
+      GST_TYPE_VULKAN_MEMORY_ALLOCATOR);
+}
diff --git a/ext/vulkan/vkmemory.h b/ext/vulkan/vkmemory.h
new file mode 100644
index 0000000..db552a6
--- /dev/null
+++ b/ext/vulkan/vkmemory.h
@@ -0,0 +1,106 @@
+/*
+ * GStreamer
+ * Copyright (C) 2015 Matthew Waters <matthew@centricular.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifndef _GST_VULKAN_BASE_BUFFER_H_
+#define _GST_VULKAN_BASE_BUFFER_H_
+
+#include <gst/gst.h>
+#include <gst/gstallocator.h>
+#include <gst/gstmemory.h>
+
+#include <vk.h>
+
+G_BEGIN_DECLS
+
+#define GST_TYPE_VULKAN_MEMORY_ALLOCATOR (gst_vulkan_memory_allocator_get_type())
+GType gst_vulkan_memory_allocator_get_type(void);
+
+#define GST_IS_VULKAN_MEMORY_ALLOCATOR(obj)              (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GST_TYPE_VULKAN_MEMORY_ALLOCATOR))
+#define GST_IS_VULKAN_MEMORY_ALLOCATOR_CLASS(klass)      (G_TYPE_CHECK_CLASS_TYPE ((klass), GST_TYPE_VULKAN_MEMORY_ALLOCATOR))
+#define GST_VULKAN_MEMORY_ALLOCATOR_GET_CLASS(obj)       (G_TYPE_INSTANCE_GET_CLASS ((obj), GST_TYPE_VULKAN_MEMORY_ALLOCATOR, GstVulkanMemoryAllocatorClass))
+#define GST_VULKAN_MEMORY_ALLOCATOR(obj)                 (G_TYPE_CHECK_INSTANCE_CAST ((obj), GST_TYPE_VULKAN_MEMORY_ALLOCATOR, GstVulkanMemoryAllocator))
+#define GST_VULKAN_MEMORY_ALLOCATOR_CLASS(klass)         (G_TYPE_CHECK_CLASS_CAST ((klass), GST_TYPE_VULKAN_MEMORY_ALLOCATOR, GstVulkanMemoryAllocatorClass))
+#define GST_VULKAN_MEMORY_ALLOCATOR_CAST(obj)            ((GstVulkanMemoryAllocator *)(obj))
+
+#define GST_VULKAN_MEMORY_ALLOCATOR_NAME "Vulkan"
+
+struct _GstVulkanMemory
+{
+  GstMemory                 mem;
+
+  GstVulkanDevice          *device;
+
+  VkDeviceMemory            mem_ptr;
+
+  /* <protected> */
+  GMutex                    lock;
+  guint                     map_count;
+
+  /* <private> */
+  GDestroyNotify            notify;
+  gpointer                  user_data;
+
+  VkMemoryAllocateInfo      alloc_info;
+  VkMemoryPropertyFlags     properties;
+
+  /* we need our own offset because GstMemory's is used to offset into the
+   * mapped pointer which when suballocating, we need to avoid.  This in
+   * relation to the root memory */
+  guint64                   vk_offset;
+  gboolean                  wrapped;
+};
+
+/**
+ * GstVulkanMemoryAllocator
+ *
+ * Opaque #GstVulkanMemoryAllocator struct
+ */
+struct _GstVulkanMemoryAllocator
+{
+  GstAllocator parent;
+};
+
+/**
+ * GstVulkanMemoryAllocatorClass:
+ *
+ * The #GstVulkanMemoryAllocatorClass only contains private data
+ */
+struct _GstVulkanMemoryAllocatorClass
+{
+  GstAllocatorClass parent_class;
+};
+
+void            gst_vulkan_memory_init_once     (void);
+gboolean        gst_is_vulkan_memory            (GstMemory * mem);
+
+GstMemory *     gst_vulkan_memory_alloc         (GstVulkanDevice * device,
+                                                 guint32 memory_type_index,
+                                                 GstAllocationParams * params,
+                                                 gsize size,
+                                                 VkMemoryPropertyFlags mem_prop_flags);
+
+gboolean        gst_vulkan_memory_find_memory_type_index_with_type_properties   (GstVulkanDevice * device,
+                                                                                 guint32 typeBits,
+                                                                                 VkMemoryPropertyFlags properties,
+                                                                                 guint32 * typeIndex);
+
+G_END_DECLS
+
+#endif /* _GST_VULKAN_BASE_BUFFER_H_ */
diff --git a/ext/vulkan/vkqueue.c b/ext/vulkan/vkqueue.c
new file mode 100644
index 0000000..7984fbf
--- /dev/null
+++ b/ext/vulkan/vkqueue.c
@@ -0,0 +1,187 @@
+/*
+ * GStreamer
+ * Copyright (C) 2015 Matthew Waters <matthew@centricular.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include "vkqueue.h"
+
+#define GST_CAT_DEFAULT gst_vulkan_queue_debug
+GST_DEBUG_CATEGORY (GST_CAT_DEFAULT);
+GST_DEBUG_CATEGORY_STATIC (GST_CAT_CONTEXT);
+
+G_DEFINE_TYPE_WITH_CODE (GstVulkanQueue, gst_vulkan_queue, GST_TYPE_OBJECT,
+    GST_DEBUG_CATEGORY_INIT (GST_CAT_DEFAULT, "vulkanqueue", 0,
+        "Vulkan Queue");
+    GST_DEBUG_CATEGORY_GET (GST_CAT_CONTEXT, "GST_CONTEXT"));
+
+static void gst_vulkan_queue_dispose (GObject * object);
+
+static void
+gst_vulkan_queue_init (GstVulkanQueue * device)
+{
+}
+
+static void
+gst_vulkan_queue_class_init (GstVulkanQueueClass * device_class)
+{
+  GObjectClass *gobject_class = (GObjectClass *) device_class;
+
+  gobject_class->dispose = gst_vulkan_queue_dispose;
+}
+
+static void
+gst_vulkan_queue_dispose (GObject * object)
+{
+  GstVulkanQueue *queue = GST_VULKAN_QUEUE (object);
+
+  if (queue->device)
+    gst_object_unref (queue->device);
+  queue->device = NULL;
+}
+
+GstVulkanDevice *
+gst_vulkan_queue_get_device (GstVulkanQueue * queue)
+{
+  g_return_val_if_fail (GST_IS_VULKAN_QUEUE (queue), NULL);
+
+  return queue->device ? gst_object_ref (queue->device) : NULL;
+}
+
+/**
+ * gst_context_set_vulkan_queue:
+ * @context: a #GstContext
+ * @queue: a #GstVulkanQueue
+ *
+ * Sets @queue on @context
+ *
+ * Since: 1.10
+ */
+void
+gst_context_set_vulkan_queue (GstContext * context, GstVulkanQueue * queue)
+{
+  GstStructure *s;
+
+  g_return_if_fail (context != NULL);
+  g_return_if_fail (gst_context_is_writable (context));
+
+  if (queue)
+    GST_CAT_LOG (GST_CAT_CONTEXT,
+        "setting GstVulkanQueue(%" GST_PTR_FORMAT ") on context(%"
+        GST_PTR_FORMAT ")", queue, context);
+
+  s = gst_context_writable_structure (context);
+  gst_structure_set (s, GST_VULKAN_QUEUE_CONTEXT_TYPE_STR,
+      GST_TYPE_VULKAN_QUEUE, queue, NULL);
+}
+
+/**
+ * gst_context_get_vulkan_queue:
+ * @context: a #GstContext
+ * @queue: resulting #GstVulkanQueue
+ *
+ * Returns: Whether @queue was in @context
+ *
+ * Since: 1.10
+ */
+gboolean
+gst_context_get_vulkan_queue (GstContext * context, GstVulkanQueue ** queue)
+{
+  const GstStructure *s;
+  gboolean ret;
+
+  g_return_val_if_fail (queue != NULL, FALSE);
+  g_return_val_if_fail (context != NULL, FALSE);
+
+  s = gst_context_get_structure (context);
+  ret = gst_structure_get (s, GST_VULKAN_QUEUE_CONTEXT_TYPE_STR,
+      GST_TYPE_VULKAN_QUEUE, queue, NULL);
+
+  GST_CAT_LOG (GST_CAT_CONTEXT, "got GstVulkanQueue(%" GST_PTR_FORMAT
+      ") from context(%" GST_PTR_FORMAT ")", *queue, context);
+
+  return ret;
+}
+
+gboolean
+gst_vulkan_queue_handle_context_query (GstElement * element, GstQuery * query,
+    GstVulkanQueue ** queue)
+{
+  gboolean res = FALSE;
+  const gchar *context_type;
+  GstContext *context, *old_context;
+
+  g_return_val_if_fail (element != NULL, FALSE);
+  g_return_val_if_fail (query != NULL, FALSE);
+  g_return_val_if_fail (GST_QUERY_TYPE (query) == GST_QUERY_CONTEXT, FALSE);
+  g_return_val_if_fail (queue != NULL, FALSE);
+
+  gst_query_parse_context_type (query, &context_type);
+
+  if (g_strcmp0 (context_type, GST_VULKAN_QUEUE_CONTEXT_TYPE_STR) == 0) {
+    gst_query_parse_context (query, &old_context);
+
+    if (old_context)
+      context = gst_context_copy (old_context);
+    else
+      context = gst_context_new (GST_VULKAN_QUEUE_CONTEXT_TYPE_STR, TRUE);
+
+    gst_context_set_vulkan_queue (context, *queue);
+    gst_query_set_context (query, context);
+    gst_context_unref (context);
+
+    res = *queue != NULL;
+  }
+
+  return res;
+}
+
+gboolean
+gst_vulkan_queue_run_context_query (GstElement * element,
+    GstVulkanQueue ** queue)
+{
+  GstQuery *query;
+
+  g_return_val_if_fail (GST_IS_ELEMENT (element), FALSE);
+  g_return_val_if_fail (queue != NULL, FALSE);
+
+  if (*queue && GST_IS_VULKAN_QUEUE (*queue))
+    return TRUE;
+
+  if ((query =
+          gst_vulkan_local_context_query (element,
+              GST_VULKAN_QUEUE_CONTEXT_TYPE_STR, FALSE))) {
+    GstContext *context;
+
+    gst_query_parse_context (query, &context);
+    if (context)
+      gst_context_get_vulkan_queue (context, queue);
+  }
+
+  GST_DEBUG_OBJECT (element, "found queue %p", *queue);
+
+  gst_query_unref (query);
+
+  if (*queue)
+    return TRUE;
+
+  return FALSE;
+}
diff --git a/ext/vulkan/vkqueue.h b/ext/vulkan/vkqueue.h
new file mode 100644
index 0000000..04b1313
--- /dev/null
+++ b/ext/vulkan/vkqueue.h
@@ -0,0 +1,64 @@
+/*
+ * GStreamer
+ * Copyright (C) 2015 Matthew Waters <matthew@centricular.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifndef _VK_QUEUE_H_
+#define _VK_QUEUE_H_
+
+#include "vk.h"
+
+#define GST_TYPE_VULKAN_QUEUE         (gst_vulkan_queue_get_type())
+#define GST_VULKAN_QUEUE(o)           (G_TYPE_CHECK_INSTANCE_CAST((o), GST_TYPE_VULKAN_QUEUE, GstVulkanQueue))
+#define GST_VULKAN_QUEUE_CLASS(k)     (G_TYPE_CHECK_CLASS_CAST((k), GST_TYPE_VULKAN_QUEUE, GstVulkanQueueClass))
+#define GST_IS_VULKAN_QUEUE(o)        (G_TYPE_CHECK_INSTANCE_TYPE((o), GST_TYPE_VULKAN_QUEUE))
+#define GST_IS_VULKAN_QUEUE_CLASS(k)  (G_TYPE_CHECK_CLASS_TYPE((k), GST_TYPE_VULKAN_QUEUE))
+#define GST_VULKAN_QUEUE_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS((o), GST_TYPE_VULKAN_QUEUE, GstVulkanQueueClass))
+GType gst_vulkan_queue_get_type       (void);
+
+#define GST_VULKAN_QUEUE_CONTEXT_TYPE_STR "gst.vulkan.queue"
+
+struct _GstVulkanQueue
+{
+  GstObject parent;
+
+  GstVulkanDevice *device;
+
+  VkQueue queue; /* hides a pointer */
+  guint32 family;
+  guint32 index;
+};
+
+struct _GstVulkanQueueClass
+{
+  GstObjectClass parent_class;
+};
+
+GstVulkanDevice *   gst_vulkan_queue_get_device (GstVulkanQueue * queue);
+
+void                gst_context_set_vulkan_queue                (GstContext * context,
+                                                                 GstVulkanQueue * queue);
+gboolean            gst_context_get_vulkan_queue                (GstContext * context,
+                                                                 GstVulkanQueue ** queue);
+gboolean            gst_vulkan_queue_handle_context_query       (GstElement * element,
+                                                                 GstQuery * query,
+                                                                 GstVulkanQueue ** queue);
+gboolean            gst_vulkan_queue_run_context_query          (GstElement * element,
+                                                                 GstVulkanQueue ** queue);
+
+#endif /* _VK_QUEUE_H_ */
diff --git a/ext/vulkan/vksink.c b/ext/vulkan/vksink.c
new file mode 100644
index 0000000..cb8530d
--- /dev/null
+++ b/ext/vulkan/vksink.c
@@ -0,0 +1,502 @@
+/*
+ * GStreamer
+ * Copyright (C) 2015 Matthew Waters <matthew@centricular.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+/**
+ * SECTION:element-vulkansink
+ *
+ * vulkansink renders video frames to a drawable on a local or remote
+ * display using Vulkan.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+//#include <gst/video/videooverlay.h>
+
+#include "vksink.h"
+#include "vkdevice.h"
+
+GST_DEBUG_CATEGORY (gst_debug_vulkan_sink);
+#define GST_CAT_DEFAULT gst_debug_vulkan_sink
+
+#define DEFAULT_FORCE_ASPECT_RATIO TRUE
+#define DEFAULT_PIXEL_ASPECT_RATIO_N 0
+#define DEFAULT_PIXEL_ASPECT_RATIO_D 1
+
+static void gst_vulkan_sink_finalize (GObject * object);
+static void gst_vulkan_sink_set_property (GObject * object, guint prop_id,
+    const GValue * value, GParamSpec * param_spec);
+static void gst_vulkan_sink_get_property (GObject * object, guint prop_id,
+    GValue * value, GParamSpec * param_spec);
+
+static gboolean gst_vulkan_sink_query (GstBaseSink * bsink, GstQuery * query);
+static void gst_vulkan_sink_set_context (GstElement * element,
+    GstContext * context);
+
+static GstStateChangeReturn
+gst_vulkan_sink_change_state (GstElement * element, GstStateChange transition);
+
+static void gst_vulkan_sink_get_times (GstBaseSink * bsink, GstBuffer * buf,
+    GstClockTime * start, GstClockTime * end);
+static gboolean gst_vulkan_sink_set_caps (GstBaseSink * bsink, GstCaps * caps);
+static GstCaps *gst_vulkan_sink_get_caps (GstBaseSink * bsink,
+    GstCaps * filter);
+static GstFlowReturn gst_vulkan_sink_prepare (GstBaseSink * bsink,
+    GstBuffer * buf);
+static GstFlowReturn gst_vulkan_sink_show_frame (GstVideoSink * bsink,
+    GstBuffer * buf);
+
+static GstStaticPadTemplate gst_vulkan_sink_template =
+GST_STATIC_PAD_TEMPLATE ("sink",
+    GST_PAD_SINK,
+    GST_PAD_ALWAYS,
+    GST_STATIC_CAPS (GST_VIDEO_CAPS_MAKE_WITH_FEATURES
+        (GST_CAPS_FEATURE_MEMORY_VULKAN_BUFFER,
+            GST_VULKAN_SWAPPER_VIDEO_FORMATS)));
+
+enum
+{
+  PROP_0,
+  PROP_FORCE_ASPECT_RATIO,
+  PROP_PIXEL_ASPECT_RATIO,
+};
+
+enum
+{
+  SIGNAL_0,
+  LAST_SIGNAL
+};
+
+/* static guint gst_vulkan_sink_signals[LAST_SIGNAL] = { 0 }; */
+
+#define gst_vulkan_sink_parent_class parent_class
+G_DEFINE_TYPE_WITH_CODE (GstVulkanSink, gst_vulkan_sink,
+    GST_TYPE_VIDEO_SINK, GST_DEBUG_CATEGORY_INIT (gst_debug_vulkan_sink,
+        "vulkansink", 0, "Vulkan Video Sink"));
+
+static void
+gst_vulkan_sink_class_init (GstVulkanSinkClass * klass)
+{
+  GObjectClass *gobject_class;
+  GstElementClass *gstelement_class;
+  GstBaseSinkClass *gstbasesink_class;
+  GstVideoSinkClass *gstvideosink_class;
+  GstElementClass *element_class;
+
+  gobject_class = (GObjectClass *) klass;
+  gstelement_class = (GstElementClass *) klass;
+  gstbasesink_class = (GstBaseSinkClass *) klass;
+  gstvideosink_class = (GstVideoSinkClass *) klass;
+  element_class = GST_ELEMENT_CLASS (klass);
+
+  gobject_class->set_property = gst_vulkan_sink_set_property;
+  gobject_class->get_property = gst_vulkan_sink_get_property;
+
+  g_object_class_install_property (gobject_class, PROP_FORCE_ASPECT_RATIO,
+      g_param_spec_boolean ("force-aspect-ratio", "Force aspect ratio",
+          "When enabled, scaling will respect original aspect ratio",
+          DEFAULT_FORCE_ASPECT_RATIO,
+          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+
+  g_object_class_install_property (gobject_class, PROP_PIXEL_ASPECT_RATIO,
+      gst_param_spec_fraction ("pixel-aspect-ratio", "Pixel Aspect Ratio",
+          "The pixel aspect ratio of the device", 0, 1, G_MAXINT, 1, 1, 1,
+          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+
+  gst_element_class_set_metadata (element_class, "Vulkan video sink",
+      "Sink/Video", "A videosink based on OpenGL",
+      "Matthew Waters <matthew@centricular.com>");
+
+  gst_element_class_add_pad_template (element_class,
+      gst_static_pad_template_get (&gst_vulkan_sink_template));
+
+  gobject_class->finalize = gst_vulkan_sink_finalize;
+
+  gstelement_class->change_state = gst_vulkan_sink_change_state;
+  gstelement_class->set_context = gst_vulkan_sink_set_context;
+  gstbasesink_class->query = GST_DEBUG_FUNCPTR (gst_vulkan_sink_query);
+  gstbasesink_class->set_caps = gst_vulkan_sink_set_caps;
+  gstbasesink_class->get_caps = gst_vulkan_sink_get_caps;
+  gstbasesink_class->get_times = gst_vulkan_sink_get_times;
+  gstbasesink_class->prepare = gst_vulkan_sink_prepare;
+
+  gstvideosink_class->show_frame =
+      GST_DEBUG_FUNCPTR (gst_vulkan_sink_show_frame);
+}
+
+static void
+gst_vulkan_sink_init (GstVulkanSink * vk_sink)
+{
+  vk_sink->force_aspect_ratio = DEFAULT_FORCE_ASPECT_RATIO;
+  vk_sink->par_n = DEFAULT_PIXEL_ASPECT_RATIO_N;
+  vk_sink->par_d = DEFAULT_PIXEL_ASPECT_RATIO_D;
+
+//  g_mutex_init (&vk_sink->drawing_lock);
+}
+
+static void
+gst_vulkan_sink_finalize (GObject * object)
+{
+//  GstVulkanSink *vk_sink = GST_VULKAN_SINK (object);
+//  g_mutex_clear (&vk_sink->drawing_lock);
+
+//  GST_DEBUG ("finalized");
+  G_OBJECT_CLASS (parent_class)->finalize (object);
+}
+
+static void
+gst_vulkan_sink_set_property (GObject * object, guint prop_id,
+    const GValue * value, GParamSpec * pspec)
+{
+  GstVulkanSink *vk_sink = GST_VULKAN_SINK (object);
+
+  switch (prop_id) {
+    case PROP_FORCE_ASPECT_RATIO:
+      vk_sink->force_aspect_ratio = g_value_get_boolean (value);
+      break;
+    case PROP_PIXEL_ASPECT_RATIO:
+      vk_sink->par_n = gst_value_get_fraction_numerator (value);
+      vk_sink->par_d = gst_value_get_fraction_denominator (value);
+      break;
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
+  }
+}
+
+static void
+gst_vulkan_sink_get_property (GObject * object, guint prop_id,
+    GValue * value, GParamSpec * pspec)
+{
+  GstVulkanSink *vk_sink = GST_VULKAN_SINK (object);
+
+  switch (prop_id) {
+    case PROP_FORCE_ASPECT_RATIO:
+      g_value_set_boolean (value, vk_sink->force_aspect_ratio);
+      break;
+    case PROP_PIXEL_ASPECT_RATIO:
+      gst_value_set_fraction (value, vk_sink->par_n, vk_sink->par_d);
+      break;
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
+  }
+}
+
+static gboolean
+gst_vulkan_sink_query (GstBaseSink * bsink, GstQuery * query)
+{
+  GstVulkanSink *vk_sink = GST_VULKAN_SINK (bsink);
+
+  switch (GST_QUERY_TYPE (query)) {
+    case GST_QUERY_CONTEXT:{
+      if (gst_vulkan_handle_context_query (GST_ELEMENT (vk_sink), query,
+              &vk_sink->display, &vk_sink->instance, &vk_sink->device))
+        return TRUE;
+
+      break;
+    }
+    default:
+      break;
+  }
+
+  return GST_BASE_SINK_CLASS (parent_class)->query (bsink, query);
+}
+
+static void
+gst_vulkan_sink_set_context (GstElement * element, GstContext * context)
+{
+  GstVulkanSink *vk_sink = GST_VULKAN_SINK (element);
+
+  gst_vulkan_handle_set_context (element, context, &vk_sink->display,
+      &vk_sink->instance);
+
+  GST_ELEMENT_CLASS (parent_class)->set_context (element, context);
+}
+
+static GstStateChangeReturn
+gst_vulkan_sink_change_state (GstElement * element, GstStateChange transition)
+{
+  GstVulkanSink *vk_sink = GST_VULKAN_SINK (element);
+  GstStateChangeReturn ret = GST_STATE_CHANGE_SUCCESS;
+  GError *error = NULL;
+
+  GST_DEBUG ("changing state: %s => %s",
+      gst_element_state_get_name (GST_STATE_TRANSITION_CURRENT (transition)),
+      gst_element_state_get_name (GST_STATE_TRANSITION_NEXT (transition)));
+
+  switch (transition) {
+    case GST_STATE_CHANGE_NULL_TO_READY:
+      if (!gst_vulkan_ensure_element_data (element, &vk_sink->display,
+              &vk_sink->instance)) {
+        GST_ELEMENT_ERROR (vk_sink, RESOURCE, NOT_FOUND,
+            ("Failed to retrieve vulkan instance/display"), (NULL));
+        return GST_STATE_CHANGE_FAILURE;
+      }
+
+      if (!(vk_sink->device =
+              gst_vulkan_instance_create_device (vk_sink->instance, &error))) {
+        GST_ELEMENT_ERROR (vk_sink, RESOURCE, NOT_FOUND,
+            ("Failed to create vulkan device"), ("%s", error->message));
+        g_clear_error (&error);
+        return GST_STATE_CHANGE_FAILURE;
+      }
+
+      if (!(vk_sink->window =
+              gst_vulkan_display_create_window (vk_sink->display))) {
+        GST_ELEMENT_ERROR (vk_sink, RESOURCE, NOT_FOUND,
+            ("Failed to create a window"), (NULL));
+        return GST_STATE_CHANGE_FAILURE;
+      }
+
+      if (!gst_vulkan_window_open (vk_sink->window, &error)) {
+        GST_ELEMENT_ERROR (vk_sink, RESOURCE, NOT_FOUND,
+            ("Failed to open window"), ("%s", error->message));
+        g_clear_error (&error);
+        return GST_STATE_CHANGE_FAILURE;
+      }
+
+      if (!(vk_sink->swapper =
+              gst_vulkan_swapper_new (vk_sink->device, vk_sink->window))) {
+        GST_ELEMENT_ERROR (vk_sink, RESOURCE, NOT_FOUND,
+            ("Failed to create a swapper"), (NULL));
+        return GST_STATE_CHANGE_FAILURE;
+      }
+      break;
+    case GST_STATE_CHANGE_READY_TO_PAUSED:
+      break;
+    case GST_STATE_CHANGE_PAUSED_TO_PLAYING:
+      break;
+    default:
+      break;
+  }
+
+  ret = GST_ELEMENT_CLASS (parent_class)->change_state (element, transition);
+  if (ret == GST_STATE_CHANGE_FAILURE)
+    return ret;
+
+  switch (transition) {
+    case GST_STATE_CHANGE_PLAYING_TO_PAUSED:
+      break;
+    case GST_STATE_CHANGE_PAUSED_TO_READY:
+      break;
+    case GST_STATE_CHANGE_READY_TO_NULL:
+      if (vk_sink->swapper)
+        gst_object_unref (vk_sink->swapper);
+      vk_sink->swapper = NULL;
+      if (vk_sink->display)
+        gst_object_unref (vk_sink->display);
+      vk_sink->display = NULL;
+      if (vk_sink->window) {
+        gst_vulkan_window_close (vk_sink->window);
+        gst_object_unref (vk_sink->window);
+      }
+      vk_sink->window = NULL;
+      if (vk_sink->device)
+        gst_object_unref (vk_sink->device);
+      vk_sink->device = NULL;
+      if (vk_sink->instance)
+        gst_object_unref (vk_sink->instance);
+      vk_sink->instance = NULL;
+      break;
+    default:
+      break;
+  }
+
+  return ret;
+}
+
+static void
+gst_vulkan_sink_get_times (GstBaseSink * bsink, GstBuffer * buf,
+    GstClockTime * start, GstClockTime * end)
+{
+  GstVulkanSink *vk_sink = GST_VULKAN_SINK (bsink);
+
+  if (GST_BUFFER_TIMESTAMP_IS_VALID (buf)) {
+    *start = GST_BUFFER_TIMESTAMP (buf);
+    if (GST_BUFFER_DURATION_IS_VALID (buf))
+      *end = *start + GST_BUFFER_DURATION (buf);
+    else {
+      if (GST_VIDEO_INFO_FPS_N (&vk_sink->v_info) > 0) {
+        *end = *start +
+            gst_util_uint64_scale_int (GST_SECOND,
+            GST_VIDEO_INFO_FPS_D (&vk_sink->v_info),
+            GST_VIDEO_INFO_FPS_N (&vk_sink->v_info));
+      }
+    }
+  }
+}
+
+static GstCaps *
+gst_vulkan_sink_get_caps (GstBaseSink * bsink, GstCaps * filter)
+{
+  GstVulkanSink *vk_sink = GST_VULKAN_SINK (bsink);
+  GstCaps *tmp = NULL;
+  GstCaps *result = NULL;
+  GError *error = NULL;
+
+  if (vk_sink->swapper) {
+    if (!(result =
+            gst_vulkan_swapper_get_supported_caps (vk_sink->swapper, &error))) {
+      GST_ELEMENT_ERROR (bsink, RESOURCE, NOT_FOUND, ("%s", error->message),
+          (NULL));
+      g_clear_error (&error);
+      return NULL;
+    }
+    return result;
+  }
+
+  tmp = gst_pad_get_pad_template_caps (GST_BASE_SINK_PAD (bsink));
+
+  if (filter) {
+    GST_DEBUG_OBJECT (bsink, "intersecting with filter caps %" GST_PTR_FORMAT,
+        filter);
+
+    result = gst_caps_intersect_full (filter, tmp, GST_CAPS_INTERSECT_FIRST);
+    gst_caps_unref (tmp);
+  } else {
+    result = tmp;
+  }
+
+  GST_DEBUG_OBJECT (bsink, "returning caps: %" GST_PTR_FORMAT, result);
+
+  return result;
+}
+
+static gboolean
+_configure_display_from_info (GstVulkanSink * vk_sink, GstVideoInfo * vinfo)
+{
+  guint display_ratio_num, display_ratio_den;
+  gint display_par_n, display_par_d;
+  gint par_n, par_d;
+  gint width, height;
+  gboolean ok;
+
+  width = GST_VIDEO_INFO_WIDTH (vinfo);
+  height = GST_VIDEO_INFO_HEIGHT (vinfo);
+
+  par_n = GST_VIDEO_INFO_PAR_N (vinfo);
+  par_d = GST_VIDEO_INFO_PAR_D (vinfo);
+
+  if (!par_n)
+    par_n = 1;
+
+  /* get display's PAR */
+  if (vk_sink->par_n != 0 && vk_sink->par_d != 0) {
+    display_par_n = vk_sink->par_n;
+    display_par_d = vk_sink->par_d;
+  } else {
+    display_par_n = 1;
+    display_par_d = 1;
+  }
+
+  ok = gst_video_calculate_display_ratio (&display_ratio_num,
+      &display_ratio_den, width, height, par_n, par_d, display_par_n,
+      display_par_d);
+
+  if (!ok)
+    return FALSE;
+
+  GST_TRACE ("PAR: %u/%u DAR:%u/%u", par_n, par_d, display_par_n,
+      display_par_d);
+
+  if (height % display_ratio_den == 0) {
+    GST_DEBUG ("keeping video height");
+    GST_VIDEO_SINK_WIDTH (vk_sink) = (guint)
+        gst_util_uint64_scale_int (height, display_ratio_num,
+        display_ratio_den);
+    GST_VIDEO_SINK_HEIGHT (vk_sink) = height;
+  } else if (width % display_ratio_num == 0) {
+    GST_DEBUG ("keeping video width");
+    GST_VIDEO_SINK_WIDTH (vk_sink) = width;
+    GST_VIDEO_SINK_HEIGHT (vk_sink) = (guint)
+        gst_util_uint64_scale_int (width, display_ratio_den, display_ratio_num);
+  } else {
+    GST_DEBUG ("approximating while keeping video height");
+    GST_VIDEO_SINK_WIDTH (vk_sink) = (guint)
+        gst_util_uint64_scale_int (height, display_ratio_num,
+        display_ratio_den);
+    GST_VIDEO_SINK_HEIGHT (vk_sink) = height;
+  }
+  GST_DEBUG ("scaling to %dx%d", GST_VIDEO_SINK_WIDTH (vk_sink),
+      GST_VIDEO_SINK_HEIGHT (vk_sink));
+
+  return TRUE;
+}
+
+static gboolean
+gst_vulkan_sink_set_caps (GstBaseSink * bsink, GstCaps * caps)
+{
+  GstVulkanSink *vk_sink = GST_VULKAN_SINK (bsink);
+  GError *error = NULL;
+  GstVideoInfo v_info;
+
+  GST_DEBUG_OBJECT (bsink, "set caps with %" GST_PTR_FORMAT, caps);
+
+  if (!gst_video_info_from_caps (&v_info, caps))
+    return FALSE;
+
+  if (!_configure_display_from_info (vk_sink, &v_info))
+    return FALSE;
+
+  if (!gst_vulkan_swapper_set_caps (vk_sink->swapper, caps, &error)) {
+    GST_ELEMENT_ERROR (vk_sink, RESOURCE, NOT_FOUND,
+        ("Failed to configure caps"), ("%s", error->message));
+    g_clear_error (&error);
+    return FALSE;
+  }
+
+  vk_sink->v_info = v_info;
+
+  return TRUE;
+}
+
+static GstFlowReturn
+gst_vulkan_sink_prepare (GstBaseSink * bsink, GstBuffer * buf)
+{
+  GstVulkanSink *vk_sink = GST_VULKAN_SINK (bsink);
+
+  GST_TRACE_OBJECT (vk_sink, "preparing buffer %" GST_PTR_FORMAT, buf);
+
+  if (GST_VIDEO_SINK_WIDTH (vk_sink) < 1 || GST_VIDEO_SINK_HEIGHT (vk_sink) < 1) {
+    return GST_FLOW_NOT_NEGOTIATED;
+  }
+
+  return GST_FLOW_OK;
+}
+
+static GstFlowReturn
+gst_vulkan_sink_show_frame (GstVideoSink * vsink, GstBuffer * buf)
+{
+  GstVulkanSink *vk_sink = GST_VULKAN_SINK (vsink);
+  GError *error = NULL;
+
+  GST_TRACE_OBJECT (vk_sink, "rendering buffer %" GST_PTR_FORMAT, buf);
+
+  if (!gst_vulkan_swapper_render_buffer (vk_sink->swapper, buf, &error)) {
+    GST_ELEMENT_ERROR (vk_sink, RESOURCE, NOT_FOUND,
+        ("Failed to render buffer"), ("%s", error->message));
+    g_clear_error (&error);
+    return GST_FLOW_ERROR;
+  }
+
+  return GST_FLOW_OK;
+}
diff --git a/ext/vulkan/vksink.h b/ext/vulkan/vksink.h
new file mode 100644
index 0000000..9f95cf3
--- /dev/null
+++ b/ext/vulkan/vksink.h
@@ -0,0 +1,70 @@
+/*
+ * GStreamer
+ * Copyright (C) 2015 Matthew Waters <matthew@centricular.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifndef _VK_SINK_H_
+#define _VK_SINK_H_
+
+#include <gst/gst.h>
+#include <gst/video/gstvideosink.h>
+#include <gst/video/video.h>
+#include "vk.h"
+
+G_BEGIN_DECLS
+
+#define GST_TYPE_VULKAN_SINK            (gst_vulkan_sink_get_type())
+#define GST_VULKAN_SINK(obj)            (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_VULKAN_SINK,GstVulkanSink))
+#define GST_VULKAN_SINK_CLASS(klass)    (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_VULKAN_SINK,GstVulkanSinkClass))
+#define GST_IS_VULKAN_SINK(obj)         (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_VULKAN_SINK))
+#define GST_IS_VULKAN_SINK_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_VULKAN_SINK))
+
+typedef struct _GstVulkanSink GstVulkanSink;
+typedef struct _GstVulkanSinkClass GstVulkanSinkClass;
+
+struct _GstVulkanSink
+{
+  GstVideoSink video_sink;
+
+  GstVulkanInstance *instance;
+  GstVulkanDevice *device;
+
+  GstVulkanDisplay *display;
+  GstVulkanWindow *window;
+
+  GstVulkanSwapper *swapper;
+
+  /* properties */
+  gboolean force_aspect_ratio;
+  gint par_n;
+  gint par_d;
+
+  /* stream configuration */
+  GstVideoInfo v_info;
+};
+
+struct _GstVulkanSinkClass
+{
+    GstVideoSinkClass video_sink_class;
+};
+
+GType gst_vulkan_sink_get_type(void);
+
+G_END_DECLS
+
+#endif
diff --git a/ext/vulkan/vkswapper.c b/ext/vulkan/vkswapper.c
new file mode 100644
index 0000000..2034c0a
--- /dev/null
+++ b/ext/vulkan/vkswapper.c
@@ -0,0 +1,1041 @@
+/*
+ * GStreamer
+ * Copyright (C) 2015 Matthew Waters <matthew@centricular.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <string.h>
+
+#include "vkswapper.h"
+
+#define GST_CAT_DEFAULT gst_vulkan_swapper_debug
+GST_DEBUG_CATEGORY (GST_CAT_DEFAULT);
+
+#define gst_vulkan_swapper_parent_class parent_class
+G_DEFINE_TYPE_WITH_CODE (GstVulkanSwapper, gst_vulkan_swapper,
+    GST_TYPE_OBJECT, GST_DEBUG_CATEGORY_INIT (GST_CAT_DEFAULT,
+        "vulkanswapper", 0, "Vulkan Swapper"));
+
+#define RENDER_GET_LOCK(o) &(GST_VULKAN_SWAPPER (o)->priv->render_lock)
+#define RENDER_LOCK(o) g_mutex_lock (RENDER_GET_LOCK(o));
+#define RENDER_UNLOCK(o) g_mutex_unlock (RENDER_GET_LOCK(o));
+
+struct _GstVulkanSwapperPrivate
+{
+  GMutex render_lock;
+};
+
+static void _on_window_draw (GstVulkanWindow * window,
+    GstVulkanSwapper * swapper);
+
+static gboolean
+_get_function_table (GstVulkanSwapper * swapper)
+{
+  GstVulkanDevice *device = swapper->device;
+  GstVulkanInstance *instance = gst_vulkan_device_get_instance (device);
+
+  if (!instance) {
+    GST_ERROR_OBJECT (swapper, "Failed to get instance from the device");
+    return FALSE;
+  }
+#define GET_PROC_ADDRESS_REQUIRED(obj, type, name) \
+  G_STMT_START { \
+    obj->G_PASTE (, name) = G_PASTE(G_PASTE(gst_vulkan_, type), _get_proc_address) (type, "vk" G_STRINGIFY(name)); \
+    if (!obj->G_PASTE(, name)) { \
+      GST_ERROR_OBJECT (obj, "Failed to find required function vk" G_STRINGIFY(name)); \
+      gst_object_unref (instance); \
+      return FALSE; \
+    } \
+  } G_STMT_END
+
+  GET_PROC_ADDRESS_REQUIRED (swapper, instance,
+      GetPhysicalDeviceSurfaceSupportKHR);
+  GET_PROC_ADDRESS_REQUIRED (swapper, instance,
+      GetPhysicalDeviceSurfaceCapabilitiesKHR);
+  GET_PROC_ADDRESS_REQUIRED (swapper, instance,
+      GetPhysicalDeviceSurfaceFormatsKHR);
+  GET_PROC_ADDRESS_REQUIRED (swapper, instance,
+      GetPhysicalDeviceSurfacePresentModesKHR);
+  GET_PROC_ADDRESS_REQUIRED (swapper, device, CreateSwapchainKHR);
+  GET_PROC_ADDRESS_REQUIRED (swapper, device, DestroySwapchainKHR);
+  GET_PROC_ADDRESS_REQUIRED (swapper, device, GetSwapchainImagesKHR);
+  GET_PROC_ADDRESS_REQUIRED (swapper, device, AcquireNextImageKHR);
+  GET_PROC_ADDRESS_REQUIRED (swapper, device, QueuePresentKHR);
+
+  gst_object_unref (instance);
+
+  return TRUE;
+
+#undef GET_PROC_ADDRESS_REQUIRED
+}
+
+static GstVideoFormat
+_vk_format_to_video_format (VkFormat format)
+{
+  switch (format) {
+      /* double check endianess */
+    case VK_FORMAT_R8G8B8A8_UNORM:
+      return GST_VIDEO_FORMAT_RGBA;
+    case VK_FORMAT_R8G8B8_UNORM:
+      return GST_VIDEO_FORMAT_RGB;
+    case VK_FORMAT_B8G8R8A8_UNORM:
+      return GST_VIDEO_FORMAT_BGRA;
+    case VK_FORMAT_B8G8R8_UNORM:
+      return GST_VIDEO_FORMAT_BGR;
+    default:
+      return GST_VIDEO_FORMAT_UNKNOWN;
+  }
+}
+
+static VkFormat
+_vk_format_from_video_format (GstVideoFormat v_format)
+{
+  switch (v_format) {
+    case GST_VIDEO_FORMAT_RGBA:
+      return VK_FORMAT_R8G8B8A8_UNORM;
+    case GST_VIDEO_FORMAT_RGB:
+      return VK_FORMAT_R8G8B8_UNORM;
+    case GST_VIDEO_FORMAT_BGRA:
+      return VK_FORMAT_B8G8R8A8_UNORM;
+    case GST_VIDEO_FORMAT_BGR:
+      return VK_FORMAT_B8G8R8_UNORM;
+    default:
+      return VK_FORMAT_UNDEFINED;
+  }
+}
+
+static VkColorSpaceKHR
+_vk_color_space_from_video_info (GstVideoInfo * v_info)
+{
+  return VK_COLORSPACE_SRGB_NONLINEAR_KHR;
+}
+
+static void
+_add_vk_format_to_list (GValue * list, VkFormat format)
+{
+  GstVideoFormat v_format;
+  const gchar *format_str;
+
+  v_format = _vk_format_to_video_format (format);
+  if (v_format) {
+    GValue item = G_VALUE_INIT;
+
+    g_value_init (&item, G_TYPE_STRING);
+    format_str = gst_video_format_to_string (v_format);
+    g_value_set_string (&item, format_str);
+    gst_value_list_append_value (list, &item);
+    g_value_unset (&item);
+  }
+}
+
+static gboolean
+_vulkan_swapper_ensure_surface (GstVulkanSwapper * swapper, GError ** error)
+{
+  if (!swapper->surface) {
+    if (!(swapper->surface =
+            gst_vulkan_window_get_surface (swapper->window, error))) {
+      return FALSE;
+    }
+  }
+
+  return TRUE;
+}
+
+struct choose_data
+{
+  GstVulkanSwapper *swapper;
+  GstVulkanQueue *graphics_queue;
+  GstVulkanQueue *present_queue;
+};
+
+static gboolean
+_choose_queue (GstVulkanDevice * device, GstVulkanQueue * queue,
+    struct choose_data *data)
+{
+  guint flags = device->queue_family_props[queue->family].queueFlags;
+  VkPhysicalDevice gpu;
+  gboolean supports_present;
+
+  gpu = gst_vulkan_device_get_physical_device (data->swapper->device);
+
+  {
+    VkResult err;
+    GError *error = NULL;
+    VkBool32 physical_device_supported;
+
+    err =
+        data->swapper->GetPhysicalDeviceSurfaceSupportKHR (gpu, queue->index,
+        data->swapper->surface, &physical_device_supported);
+    if (gst_vulkan_error_to_g_error (err, &error,
+            "GetPhysicalDeviceSurfaceSupport") < 0) {
+      GST_DEBUG_OBJECT (data->swapper,
+          "surface not supported by the physical device: %s", error->message);
+      return TRUE;
+    }
+  }
+
+  supports_present =
+      gst_vulkan_window_get_presentation_support (data->swapper->window,
+      device, queue->index);
+
+  if ((flags & VK_QUEUE_GRAPHICS_BIT) != 0) {
+    if (supports_present) {
+      /* found one that supports both */
+      if (data->graphics_queue)
+        gst_object_unref (data->graphics_queue);
+      data->graphics_queue = gst_object_ref (queue);
+      if (data->present_queue)
+        gst_object_unref (data->present_queue);
+      data->present_queue = gst_object_ref (queue);
+      return FALSE;
+    }
+    if (!data->graphics_queue)
+      data->present_queue = gst_object_ref (queue);
+  } else if (supports_present) {
+    if (!data->present_queue)
+      data->present_queue = gst_object_ref (queue);
+  }
+
+  return TRUE;
+}
+
+static gboolean
+_vulkan_swapper_retrieve_surface_properties (GstVulkanSwapper * swapper,
+    GError ** error)
+{
+  struct choose_data data;
+  VkPhysicalDevice gpu;
+  VkResult err;
+
+  if (swapper->surf_formats)
+    return TRUE;
+
+  if (!_vulkan_swapper_ensure_surface (swapper, error))
+    return FALSE;
+
+  gpu = gst_vulkan_device_get_physical_device (swapper->device);
+
+  data.swapper = swapper;
+  data.present_queue = NULL;
+  data.graphics_queue = NULL;
+
+  gst_vulkan_device_foreach_queue (swapper->device,
+      (GstVulkanDeviceForEachQueueFunc) _choose_queue, &data);
+
+  if (data.graphics_queue != data.present_queue) {
+    /* FIXME: add support for separate graphics/present queues */
+    g_set_error (error, GST_VULKAN_ERROR,
+        VK_ERROR_INITIALIZATION_FAILED,
+        "Failed to find a compatible present/graphics queue");
+    if (data.present_queue)
+      gst_object_unref (data.present_queue);
+    if (data.graphics_queue)
+      gst_object_unref (data.graphics_queue);
+    return FALSE;
+  }
+
+  swapper->queue = gst_object_ref (data.present_queue);
+  if (data.present_queue)
+    gst_object_unref (data.present_queue);
+  if (data.graphics_queue)
+    gst_object_unref (data.graphics_queue);
+
+  err =
+      swapper->GetPhysicalDeviceSurfaceCapabilitiesKHR (gpu, swapper->surface,
+      &swapper->surf_props);
+  if (gst_vulkan_error_to_g_error (err, error,
+          "GetPhysicalDeviceSurfaceCapabilitiesKHR") < 0)
+    return FALSE;
+
+  err =
+      swapper->GetPhysicalDeviceSurfaceFormatsKHR (gpu, swapper->surface,
+      &swapper->n_surf_formats, NULL);
+  if (gst_vulkan_error_to_g_error (err, error,
+          "GetPhysicalDeviceSurfaceFormatsKHR") < 0)
+    return FALSE;
+
+  swapper->surf_formats = g_new0 (VkSurfaceFormatKHR, swapper->n_surf_formats);
+  err =
+      swapper->GetPhysicalDeviceSurfaceFormatsKHR (gpu, swapper->surface,
+      &swapper->n_surf_formats, swapper->surf_formats);
+  if (gst_vulkan_error_to_g_error (err, error,
+          "GetPhysicalDeviceSurfaceFormatsKHR") < 0)
+    return FALSE;
+
+  err =
+      swapper->GetPhysicalDeviceSurfacePresentModesKHR (gpu, swapper->surface,
+      &swapper->n_surf_present_modes, NULL);
+  if (gst_vulkan_error_to_g_error (err, error,
+          "GetPhysicalDeviceSurfacePresentModesKHR") < 0)
+    return FALSE;
+
+  swapper->surf_present_modes =
+      g_new0 (VkPresentModeKHR, swapper->n_surf_present_modes);
+  err =
+      swapper->GetPhysicalDeviceSurfacePresentModesKHR (gpu, swapper->surface,
+      &swapper->n_surf_present_modes, swapper->surf_present_modes);
+  if (gst_vulkan_error_to_g_error (err, error,
+          "GetPhysicalDeviceSurfacePresentModesKHR") < 0)
+    return FALSE;
+
+  return TRUE;
+}
+
+static gboolean
+_on_window_close (GstVulkanWindow * window, GstVulkanSwapper * swapper)
+{
+  g_atomic_int_set (&swapper->to_quit, 1);
+
+  return TRUE;
+}
+
+static void
+gst_vulkan_swapper_finalize (GObject * object)
+{
+  GstVulkanSwapper *swapper = GST_VULKAN_SWAPPER (object);
+  int i;
+
+  if (swapper->swap_chain_images) {
+    for (i = 0; i < swapper->n_swap_chain_images; i++) {
+      gst_memory_unref ((GstMemory *) swapper->swap_chain_images[i]);
+      swapper->swap_chain_images[i] = NULL;
+    }
+    g_free (swapper->swap_chain_images);
+  }
+  swapper->swap_chain_images = NULL;
+
+  if (swapper->swap_chain)
+    swapper->DestroySwapchainKHR (swapper->device->device, swapper->swap_chain,
+        NULL);
+  swapper->swap_chain = VK_NULL_HANDLE;
+
+  if (swapper->queue)
+    gst_object_unref (swapper->queue);
+  swapper->queue = NULL;
+
+  if (swapper->device)
+    gst_object_unref (swapper->device);
+  swapper->device = NULL;
+
+  g_signal_handler_disconnect (swapper->window, swapper->draw_id);
+  swapper->draw_id = 0;
+
+  g_signal_handler_disconnect (swapper->window, swapper->close_id);
+  swapper->close_id = 0;
+
+  if (swapper->window)
+    gst_object_unref (swapper->window);
+  swapper->window = NULL;
+
+  g_free (swapper->surf_present_modes);
+  swapper->surf_present_modes = NULL;
+
+  g_free (swapper->surf_formats);
+  swapper->surf_formats = NULL;
+
+  gst_buffer_replace (&swapper->current_buffer, NULL);
+  gst_caps_replace (&swapper->caps, NULL);
+
+  g_mutex_clear (&swapper->priv->render_lock);
+
+  G_OBJECT_CLASS (parent_class)->finalize (object);
+}
+
+static void
+gst_vulkan_swapper_init (GstVulkanSwapper * swapper)
+{
+  swapper->priv =
+      G_TYPE_INSTANCE_GET_PRIVATE (swapper, GST_TYPE_VULKAN_SWAPPER,
+      GstVulkanSwapperPrivate);
+
+  g_mutex_init (&swapper->priv->render_lock);
+}
+
+static void
+gst_vulkan_swapper_class_init (GstVulkanSwapperClass * klass)
+{
+  g_type_class_add_private (klass, sizeof (GstVulkanSwapperPrivate));
+
+  G_OBJECT_CLASS (klass)->finalize = gst_vulkan_swapper_finalize;
+}
+
+GstVulkanSwapper *
+gst_vulkan_swapper_new (GstVulkanDevice * device, GstVulkanWindow * window)
+{
+  GstVulkanSwapper *swapper;
+
+  swapper = g_object_new (GST_TYPE_VULKAN_SWAPPER, NULL);
+  swapper->device = gst_object_ref (device);
+  swapper->window = gst_object_ref (window);
+
+  if (!_get_function_table (swapper)) {
+    gst_object_unref (swapper);
+    return NULL;
+  }
+
+  swapper->close_id = g_signal_connect (swapper->window, "close",
+      (GCallback) _on_window_close, swapper);
+  swapper->draw_id = g_signal_connect (swapper->window, "draw",
+      (GCallback) _on_window_draw, swapper);
+
+  return swapper;
+}
+
+GstCaps *
+gst_vulkan_swapper_get_supported_caps (GstVulkanSwapper * swapper,
+    GError ** error)
+{
+  GstStructure *s;
+  GstCaps *caps;
+
+  g_return_val_if_fail (GST_IS_VULKAN_SWAPPER (swapper), NULL);
+
+  if (!_vulkan_swapper_retrieve_surface_properties (swapper, error))
+    return NULL;
+
+  caps = gst_caps_new_empty_simple ("video/x-raw");
+  gst_caps_set_features (caps, 0,
+      gst_caps_features_from_string (GST_CAPS_FEATURE_MEMORY_VULKAN_BUFFER));
+  s = gst_caps_get_structure (caps, 0);
+
+  {
+    int i;
+    GValue list = G_VALUE_INIT;
+
+    g_value_init (&list, GST_TYPE_LIST);
+
+    if (swapper->n_surf_formats
+        && swapper->surf_formats[0].format == VK_FORMAT_UNDEFINED) {
+      _add_vk_format_to_list (&list, VK_FORMAT_B8G8R8A8_UNORM);
+    } else {
+      for (i = 0; i < swapper->n_surf_formats; i++) {
+        _add_vk_format_to_list (&list, swapper->surf_formats[i].format);
+      }
+    }
+
+    gst_structure_set_value (s, "format", &list);
+    g_value_unset (&list);
+  }
+  {
+    guint32 max_dim = swapper->device->gpu_props.limits.maxImageDimension2D;
+
+    gst_structure_set (s, "width", GST_TYPE_INT_RANGE, 1, (gint) max_dim,
+        "height", GST_TYPE_INT_RANGE, 1, (gint) max_dim, "pixel-aspect-ratio",
+        GST_TYPE_FRACTION, 1, 1, "framerate", GST_TYPE_FRACTION_RANGE, 0, 1,
+        G_MAXINT, 1, NULL);
+  }
+
+  GST_INFO_OBJECT (swapper, "Probed the following caps %" GST_PTR_FORMAT, caps);
+
+  return caps;
+}
+
+static gboolean
+_swapper_set_image_layout_with_cmd (GstVulkanSwapper * swapper,
+    VkCommandBuffer cmd, GstVulkanImageMemory * image,
+    VkImageLayout new_image_layout, GError ** error)
+{
+  VkPipelineStageFlags src_stages = VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT;
+  VkPipelineStageFlags dest_stages = VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT;
+  VkImageMemoryBarrier image_memory_barrier;
+
+  gst_vulkan_image_memory_set_layout (image, new_image_layout,
+      &image_memory_barrier);
+
+  vkCmdPipelineBarrier (cmd, src_stages, dest_stages, 0, 0, NULL, 0, NULL, 1,
+      &image_memory_barrier);
+
+  return TRUE;
+}
+
+static gboolean
+_new_fence (GstVulkanDevice * device, VkFence * fence, GError ** error)
+{
+  VkFenceCreateInfo fence_info;
+  VkResult err;
+
+  fence_info.sType = VK_STRUCTURE_TYPE_FENCE_CREATE_INFO;
+  fence_info.pNext = NULL;
+  fence_info.flags = 0;
+
+  err = vkCreateFence (device->device, &fence_info, NULL, fence);
+  if (gst_vulkan_error_to_g_error (err, error, "vkCreateFence") < 0)
+    return FALSE;
+
+  return TRUE;
+}
+
+static gboolean
+_swapper_set_image_layout (GstVulkanSwapper * swapper,
+    GstVulkanImageMemory * image, VkImageLayout new_image_layout,
+    GError ** error)
+{
+  VkCommandBuffer cmd;
+  VkFence fence;
+  VkResult err;
+
+  if (!gst_vulkan_device_create_cmd_buffer (swapper->device, &cmd, error))
+    return FALSE;
+
+  if (!_new_fence (swapper->device, &fence, error))
+    return FALSE;
+
+  {
+    VkCommandBufferInheritanceInfo buf_inh = { 0, };
+    VkCommandBufferBeginInfo cmd_buf_info = { 0, };
+
+    buf_inh.sType = VK_STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_INFO;
+    buf_inh.pNext = NULL;
+    buf_inh.renderPass = VK_NULL_HANDLE;
+    buf_inh.subpass = 0;
+    buf_inh.framebuffer = VK_NULL_HANDLE;
+    buf_inh.occlusionQueryEnable = FALSE;
+    buf_inh.queryFlags = 0;
+    buf_inh.pipelineStatistics = 0;
+
+    cmd_buf_info.sType = VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO;
+    cmd_buf_info.pNext = NULL;
+    cmd_buf_info.flags = VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT;
+    cmd_buf_info.pInheritanceInfo = &buf_inh;
+
+    err = vkBeginCommandBuffer (cmd, &cmd_buf_info);
+    if (gst_vulkan_error_to_g_error (err, error, "vkBeginCommandBuffer") < 0)
+      return FALSE;
+  }
+
+  if (!_swapper_set_image_layout_with_cmd (swapper, cmd, image,
+          new_image_layout, error))
+    return FALSE;
+
+  err = vkEndCommandBuffer (cmd);
+  if (gst_vulkan_error_to_g_error (err, error, "vkEndCommandBuffer") < 0)
+    return FALSE;
+
+  {
+    VkSubmitInfo submit_info = { 0, };
+
+    submit_info.sType = VK_STRUCTURE_TYPE_SUBMIT_INFO;
+    submit_info.pNext = NULL;
+    submit_info.waitSemaphoreCount = 0;
+    submit_info.pWaitSemaphores = NULL;
+    submit_info.commandBufferCount = 1;
+    submit_info.pCommandBuffers = &cmd;
+    submit_info.signalSemaphoreCount = 0;
+    submit_info.pSignalSemaphores = NULL;
+
+    err = vkQueueSubmit (swapper->queue->queue, 1, &submit_info, fence);
+    if (gst_vulkan_error_to_g_error (err, error, "vkQueueSubmit") < 0)
+      return FALSE;
+  }
+
+  err = vkWaitForFences (swapper->device->device, 1, &fence, TRUE, -1);
+  if (gst_vulkan_error_to_g_error (err, error, "vkWaitForFences") < 0)
+    return FALSE;
+  vkFreeCommandBuffers (swapper->device->device, swapper->device->cmd_pool, 1,
+      &cmd);
+
+  vkDestroyFence (swapper->device->device, fence, NULL);
+
+  return TRUE;
+}
+
+static gboolean
+_allocate_swapchain (GstVulkanSwapper * swapper, GstCaps * caps,
+    GError ** error)
+{
+  VkSurfaceTransformFlagsKHR preTransform;
+  VkCompositeAlphaFlagsKHR alpha_flags;
+  VkPresentModeKHR present_mode;
+  VkImageUsageFlags usage = 0;
+  VkColorSpaceKHR color_space;
+  VkImage *swap_chain_images;
+  VkExtent2D swapchain_dims;
+  guint32 n_images_wanted;
+  VkPhysicalDevice gpu;
+  VkFormat format;
+  VkResult err;
+  guint32 i;
+
+  if (!_vulkan_swapper_ensure_surface (swapper, error))
+    return FALSE;
+
+  gpu = gst_vulkan_device_get_physical_device (swapper->device);
+  err =
+      swapper->GetPhysicalDeviceSurfaceCapabilitiesKHR (gpu,
+      swapper->surface, &swapper->surf_props);
+  if (gst_vulkan_error_to_g_error (err, error,
+          "GetPhysicalDeviceSurfaceCapabilitiesKHR") < 0)
+    return FALSE;
+
+  /* width and height are either both -1, or both not -1. */
+  if (swapper->surf_props.currentExtent.width == -1) {
+    /* If the surface size is undefined, the size is set to
+     * the size of the images requested. */
+    swapchain_dims.width = 320;
+    swapchain_dims.height = 240;
+  } else {
+    /* If the surface size is defined, the swap chain size must match */
+    swapchain_dims = swapper->surf_props.currentExtent;
+  }
+
+  /* If mailbox mode is available, use it, as is the lowest-latency non-
+   * tearing mode.  If not, try IMMEDIATE which will usually be available,
+   * and is fastest (though it tears).  If not, fall back to FIFO which is
+   * always available. */
+  present_mode = VK_PRESENT_MODE_FIFO_KHR;
+  for (gsize i = 0; i < swapper->n_surf_present_modes; i++) {
+    if (swapper->surf_present_modes[i] == VK_PRESENT_MODE_MAILBOX_KHR) {
+      present_mode = VK_PRESENT_MODE_MAILBOX_KHR;
+      break;
+    }
+    if ((present_mode != VK_PRESENT_MODE_MAILBOX_KHR) &&
+        (swapper->surf_present_modes[i] == VK_PRESENT_MODE_IMMEDIATE_KHR)) {
+      present_mode = VK_PRESENT_MODE_IMMEDIATE_KHR;
+    }
+  }
+
+  /* Determine the number of VkImage's to use in the swap chain (we desire to
+   * own only 1 image at a time, besides the images being displayed and
+   * queued for display): */
+  n_images_wanted = swapper->surf_props.minImageCount + 1;
+  if ((swapper->surf_props.maxImageCount > 0) &&
+      (n_images_wanted > swapper->surf_props.maxImageCount)) {
+    /* Application must settle for fewer images than desired: */
+    n_images_wanted = swapper->surf_props.maxImageCount;
+  }
+
+  if (swapper->
+      surf_props.supportedTransforms & VK_SURFACE_TRANSFORM_IDENTITY_BIT_KHR) {
+    preTransform = VK_SURFACE_TRANSFORM_IDENTITY_BIT_KHR;
+  } else {
+    preTransform = swapper->surf_props.currentTransform;
+  }
+
+  format =
+      _vk_format_from_video_format (GST_VIDEO_INFO_FORMAT (&swapper->v_info));
+  color_space = _vk_color_space_from_video_info (&swapper->v_info);
+
+  if ((swapper->surf_props.supportedCompositeAlpha &
+          VK_COMPOSITE_ALPHA_OPAQUE_BIT_KHR) != 0) {
+    alpha_flags = VK_COMPOSITE_ALPHA_OPAQUE_BIT_KHR;
+  } else if ((swapper->surf_props.supportedCompositeAlpha &
+          VK_COMPOSITE_ALPHA_PRE_MULTIPLIED_BIT_KHR) != 0) {
+    alpha_flags = VK_COMPOSITE_ALPHA_PRE_MULTIPLIED_BIT_KHR;
+  } else {
+    g_set_error (error, GST_VULKAN_ERROR,
+        VK_ERROR_INITIALIZATION_FAILED,
+        "Incorrect alpha flags available for the swap images");
+    return FALSE;
+  }
+
+  if ((swapper->surf_props.supportedUsageFlags &
+          VK_IMAGE_USAGE_TRANSFER_DST_BIT) != 0) {
+    usage |= VK_IMAGE_USAGE_TRANSFER_DST_BIT;
+  } else {
+    g_set_error (error, GST_VULKAN_ERROR,
+        VK_ERROR_INITIALIZATION_FAILED,
+        "Incorrect usage flags available for the swap images");
+    return FALSE;
+  }
+  if ((swapper->surf_props.
+          supportedUsageFlags & VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT)
+      != 0) {
+    usage |= VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT;
+  } else {
+    g_set_error (error, GST_VULKAN_ERROR,
+        VK_ERROR_INITIALIZATION_FAILED,
+        "Incorrect usage flags available for the swap images");
+    return FALSE;
+  }
+
+  {
+    VkSwapchainCreateInfoKHR swap_chain_info = { 0, };
+    VkSwapchainKHR old_swap_chain;
+
+    old_swap_chain = swapper->swap_chain;
+
+    swap_chain_info.sType = VK_STRUCTURE_TYPE_SWAPCHAIN_CREATE_INFO_KHR;
+    swap_chain_info.pNext = NULL;
+    swap_chain_info.surface = swapper->surface;
+    swap_chain_info.minImageCount = n_images_wanted;
+    swap_chain_info.imageFormat = format;
+    swap_chain_info.imageColorSpace = color_space;
+    swap_chain_info.imageExtent = swapchain_dims;
+    swap_chain_info.imageArrayLayers = 1;
+    swap_chain_info.imageUsage = usage;
+    swap_chain_info.imageSharingMode = VK_SHARING_MODE_EXCLUSIVE;
+    swap_chain_info.queueFamilyIndexCount = 0;
+    swap_chain_info.pQueueFamilyIndices = NULL;
+    swap_chain_info.preTransform = preTransform;
+    swap_chain_info.presentMode = present_mode;
+    swap_chain_info.compositeAlpha = alpha_flags;
+    swap_chain_info.clipped = TRUE;
+    swap_chain_info.oldSwapchain = swapper->swap_chain;
+
+    err =
+        swapper->CreateSwapchainKHR (swapper->device->device, &swap_chain_info,
+        NULL, &swapper->swap_chain);
+    if (gst_vulkan_error_to_g_error (err, error, "vkCreateSwapchainKHR") < 0)
+      return FALSE;
+
+    if (old_swap_chain != VK_NULL_HANDLE) {
+      swapper->DestroySwapchainKHR (swapper->device->device, old_swap_chain,
+          NULL);
+    }
+  }
+
+  err =
+      swapper->GetSwapchainImagesKHR (swapper->device->device,
+      swapper->swap_chain, &swapper->n_swap_chain_images, NULL);
+  if (gst_vulkan_error_to_g_error (err, error, "vkGetSwapchainImagesKHR") < 0)
+    return FALSE;
+
+  swap_chain_images = g_new0 (VkImage, swapper->n_swap_chain_images);
+  err =
+      swapper->GetSwapchainImagesKHR (swapper->device->device,
+      swapper->swap_chain, &swapper->n_swap_chain_images, swap_chain_images);
+  if (gst_vulkan_error_to_g_error (err, error, "vkGetSwapchainImagesKHR") < 0) {
+    g_free (swap_chain_images);
+    return FALSE;
+  }
+
+  swapper->swap_chain_images =
+      g_new0 (GstVulkanImageMemory *, swapper->n_swap_chain_images);
+  for (i = 0; i < swapper->n_swap_chain_images; i++) {
+    swapper->swap_chain_images[i] = (GstVulkanImageMemory *)
+        gst_vulkan_image_memory_wrapped (swapper->device, swap_chain_images[i],
+        format, swapchain_dims.width, swapchain_dims.height,
+        VK_IMAGE_TILING_OPTIMAL, usage, NULL, NULL);
+
+    if (!_swapper_set_image_layout (swapper, swapper->swap_chain_images[i],
+            VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL, error)) {
+      g_free (swap_chain_images);
+      return FALSE;
+    }
+  }
+
+  g_free (swap_chain_images);
+  return TRUE;
+}
+
+static gboolean
+_swapchain_resize (GstVulkanSwapper * swapper, GError ** error)
+{
+  int i;
+
+  if (!swapper->queue) {
+    if (!_vulkan_swapper_retrieve_surface_properties (swapper, error)) {
+      return FALSE;
+    }
+  }
+
+  if (swapper->swap_chain_images) {
+    for (i = 0; i < swapper->n_swap_chain_images; i++) {
+      if (swapper->swap_chain_images[i])
+        gst_memory_unref ((GstMemory *) swapper->swap_chain_images[i]);
+    }
+    g_free (swapper->swap_chain_images);
+  }
+
+  return _allocate_swapchain (swapper, swapper->caps, error);
+}
+
+gboolean
+gst_vulkan_swapper_set_caps (GstVulkanSwapper * swapper, GstCaps * caps,
+    GError ** error)
+{
+  if (!gst_video_info_from_caps (&swapper->v_info, caps)) {
+    g_set_error (error, GST_VULKAN_ERROR,
+        VK_ERROR_INITIALIZATION_FAILED,
+        "Failed to geto GstVideoInfo from caps");
+    return FALSE;
+  }
+
+  gst_caps_replace (&swapper->caps, caps);
+
+  return _swapchain_resize (swapper, error);
+}
+
+struct cmd_data
+{
+  VkCommandBuffer cmd;
+  VkFence fence;
+  GDestroyNotify notify;
+  gpointer data;
+};
+
+static gboolean
+_build_render_buffer_cmd (GstVulkanSwapper * swapper, guint32 swap_idx,
+    GstBuffer * buffer, struct cmd_data *cmd_data, GError ** error)
+{
+  GstVulkanBufferMemory *buf_mem;
+  GstVulkanImageMemory *swap_mem;
+  VkCommandBuffer cmd;
+  VkResult err;
+
+  g_return_val_if_fail (swap_idx < swapper->n_swap_chain_images, FALSE);
+  swap_mem = swapper->swap_chain_images[swap_idx];
+
+  cmd_data->notify = NULL;
+
+  if (!gst_vulkan_device_create_cmd_buffer (swapper->device, &cmd, error))
+    return FALSE;
+
+  buf_mem = (GstVulkanBufferMemory *) gst_buffer_peek_memory (buffer, 0);
+
+  {
+    VkCommandBufferInheritanceInfo buf_inh = { 0, };
+    VkCommandBufferBeginInfo cmd_buf_info = { 0, };
+
+    buf_inh.sType = VK_STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_INFO;
+    buf_inh.pNext = NULL;
+    buf_inh.renderPass = VK_NULL_HANDLE;
+    buf_inh.subpass = 0;
+    buf_inh.framebuffer = VK_NULL_HANDLE;
+    buf_inh.occlusionQueryEnable = FALSE;
+    buf_inh.queryFlags = 0;
+    buf_inh.pipelineStatistics = 0;
+
+    cmd_buf_info.sType = VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO;
+    cmd_buf_info.pNext = NULL;
+    cmd_buf_info.flags = VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT;
+    cmd_buf_info.pInheritanceInfo = &buf_inh;
+
+    err = vkBeginCommandBuffer (cmd, &cmd_buf_info);
+    if (gst_vulkan_error_to_g_error (err, error, "vkBeginCommandBuffer") < 0)
+      return FALSE;
+  }
+
+  if (!_swapper_set_image_layout_with_cmd (swapper, cmd, swap_mem,
+          VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, error)) {
+    return FALSE;
+  }
+
+  {
+    VkBufferImageCopy region = { 0, };
+    guint32 dst_width = gst_vulkan_image_memory_get_width (swap_mem);
+    guint32 dst_height = gst_vulkan_image_memory_get_height (swap_mem);
+    guint src_width = GST_VIDEO_INFO_WIDTH (&swapper->v_info);
+    guint src_height = GST_VIDEO_INFO_HEIGHT (&swapper->v_info);
+    guint x, y;
+
+    if (src_width != dst_width || src_height != dst_height) {
+/* FIXME: broken with LunarG's driver
+      x = (src_width - dst_width) / 2;
+      y = (src_height - dst_height) / 2;*/
+      x = y = 0;
+    } else {
+      x = y = 0;
+    }
+    /* FIXME: scale rect */
+    GST_VK_BUFFER_IMAGE_COPY (region, 0, src_width, src_height,
+        GST_VK_IMAGE_SUBRESOURCE_LAYERS_INIT (VK_IMAGE_ASPECT_COLOR_BIT, 0, 0,
+            1), GST_VK_OFFSET3D_INIT (x, y, 0), GST_VK_EXTENT3D_INIT (src_width,
+            src_height, 1));
+
+    vkCmdCopyBufferToImage (cmd, buf_mem->buffer, swap_mem->image,
+        swap_mem->image_layout, 1, &region);
+  }
+
+  if (!_swapper_set_image_layout_with_cmd (swapper, cmd, swap_mem,
+          VK_IMAGE_LAYOUT_PRESENT_SRC_KHR, error)) {
+    return FALSE;
+  }
+
+  err = vkEndCommandBuffer (cmd);
+  if (gst_vulkan_error_to_g_error (err, error, "vkEndCommandBuffer") < 0)
+    return FALSE;
+
+  cmd_data->cmd = cmd;
+  cmd_data->notify = NULL;
+
+  if (!_new_fence (swapper->device, &cmd_data->fence, error)) {
+    return FALSE;
+  }
+
+  return TRUE;
+}
+
+static gboolean
+_render_buffer_unlocked (GstVulkanSwapper * swapper,
+    GstBuffer * buffer, GError ** error)
+{
+  VkSemaphore semaphore = { 0, };
+  VkSemaphoreCreateInfo semaphore_info = { 0, };
+  VkPresentInfoKHR present;
+  struct cmd_data cmd_data = { 0, };
+  guint32 swap_idx;
+  VkResult err, present_err;
+
+  semaphore_info.sType = VK_STRUCTURE_TYPE_SEMAPHORE_CREATE_INFO;
+  semaphore_info.pNext = NULL;
+  semaphore_info.flags = 0;
+
+  if (!buffer) {
+    g_set_error (error, GST_VULKAN_ERROR,
+        VK_ERROR_INITIALIZATION_FAILED, "Invalid buffer");
+    goto error;
+  }
+
+  if (g_atomic_int_get (&swapper->to_quit)) {
+    g_set_error (error, GST_VULKAN_ERROR, VK_ERROR_SURFACE_LOST_KHR,
+        "Output window was closed");
+    goto error;
+  }
+
+  gst_buffer_replace (&swapper->current_buffer, buffer);
+
+reacquire:
+  err = vkCreateSemaphore (swapper->device->device, &semaphore_info,
+      NULL, &semaphore);
+  if (gst_vulkan_error_to_g_error (err, error, "vkCreateSemaphore") < 0)
+    goto error;
+
+  err =
+      swapper->AcquireNextImageKHR (swapper->device->device,
+      swapper->swap_chain, -1, semaphore, VK_NULL_HANDLE, &swap_idx);
+  /* TODO: Deal with the VK_SUBOPTIMAL_KHR and VK_ERROR_OUT_OF_DATE_KHR */
+  if (err == VK_ERROR_OUT_OF_DATE_KHR) {
+    GST_DEBUG_OBJECT (swapper, "out of date frame acquired");
+
+    vkDestroySemaphore (swapper->device->device, semaphore, NULL);
+    if (!_swapchain_resize (swapper, error))
+      goto error;
+    goto reacquire;
+  } else if (gst_vulkan_error_to_g_error (err, error,
+          "vkAcquireNextImageKHR") < 0) {
+    goto error;
+  }
+
+  if (!_build_render_buffer_cmd (swapper, swap_idx, buffer, &cmd_data, error))
+    goto error;
+
+  {
+    VkSubmitInfo submit_info = { 0, };
+
+    submit_info.sType = VK_STRUCTURE_TYPE_SUBMIT_INFO;
+    submit_info.pNext = NULL;
+    submit_info.waitSemaphoreCount = 1;
+    submit_info.pWaitSemaphores = &semaphore;
+    submit_info.commandBufferCount = 1;
+    submit_info.pCommandBuffers = &cmd_data.cmd;
+    submit_info.signalSemaphoreCount = 0;
+    submit_info.pSignalSemaphores = NULL;
+
+    err =
+        vkQueueSubmit (swapper->queue->queue, 1, &submit_info, cmd_data.fence);
+    if (gst_vulkan_error_to_g_error (err, error, "vkQueueSubmit") < 0) {
+      return FALSE;
+    }
+  }
+
+  present.sType = VK_STRUCTURE_TYPE_PRESENT_INFO_KHR;
+  present.pNext = NULL;
+  present.waitSemaphoreCount = 0;
+  present.pWaitSemaphores = NULL;
+  present.swapchainCount = 1;
+  present.pSwapchains = &swapper->swap_chain;
+  present.pImageIndices = &swap_idx;
+  present.pResults = &present_err;
+
+  err = swapper->QueuePresentKHR (swapper->queue->queue, &present);
+  if (err == VK_ERROR_OUT_OF_DATE_KHR) {
+    GST_DEBUG_OBJECT (swapper, "out of date frame submitted");
+
+    if (!_swapchain_resize (swapper, error))
+      goto error;
+  } else if (gst_vulkan_error_to_g_error (err, error, "vkQueuePresentKHR") < 0)
+    goto error;
+
+  err = vkWaitForFences (swapper->device->device, 1, &cmd_data.fence, TRUE, -1);
+  if (gst_vulkan_error_to_g_error (err, error, "vkWaitForFences") < 0)
+    goto error;
+
+  if (semaphore)
+    vkDestroySemaphore (swapper->device->device, semaphore, NULL);
+  if (cmd_data.cmd)
+    vkFreeCommandBuffers (swapper->device->device, swapper->device->cmd_pool,
+        1, &cmd_data.cmd);
+  if (cmd_data.fence)
+    vkDestroyFence (swapper->device->device, cmd_data.fence, NULL);
+  if (cmd_data.notify)
+    cmd_data.notify (cmd_data.data);
+  return TRUE;
+
+error:
+  {
+    if (semaphore)
+      vkDestroySemaphore (swapper->device->device, semaphore, NULL);
+    if (cmd_data.cmd)
+      vkFreeCommandBuffers (swapper->device->device, swapper->device->cmd_pool,
+          1, &cmd_data.cmd);
+    if (cmd_data.fence)
+      vkDestroyFence (swapper->device->device, cmd_data.fence, NULL);
+    if (cmd_data.notify)
+      cmd_data.notify (cmd_data.data);
+    return FALSE;
+  }
+}
+
+gboolean
+gst_vulkan_swapper_render_buffer (GstVulkanSwapper * swapper,
+    GstBuffer * buffer, GError ** error)
+{
+  GstMemory *mem;
+  gboolean ret;
+
+  mem = gst_buffer_peek_memory (buffer, 0);
+  if (!mem) {
+    g_set_error_literal (error, GST_VULKAN_ERROR, VK_ERROR_FORMAT_NOT_SUPPORTED,
+        "Buffer has no memory");
+    return FALSE;
+  }
+  if (!gst_is_vulkan_buffer_memory (mem)) {
+    g_set_error_literal (error, GST_VULKAN_ERROR, VK_ERROR_FORMAT_NOT_SUPPORTED,
+        "Incorrect memory type");
+    return FALSE;
+  }
+
+  RENDER_LOCK (swapper);
+  ret = _render_buffer_unlocked (swapper, buffer, error);
+  RENDER_UNLOCK (swapper);
+
+  return ret;
+}
+
+static void
+_on_window_draw (GstVulkanWindow * window, GstVulkanSwapper * swapper)
+{
+  GError *error = NULL;
+
+  RENDER_LOCK (swapper);
+  if (!swapper->current_buffer) {
+    RENDER_UNLOCK (swapper);
+    return;
+  }
+
+  /* TODO: perform some rate limiting of the number of redraw events */
+  if (!_render_buffer_unlocked (swapper, swapper->current_buffer, &error))
+    GST_ERROR_OBJECT (swapper, "Failed to redraw buffer %p %s",
+        swapper->current_buffer, error->message);
+  g_clear_error (&error);
+  RENDER_UNLOCK (swapper);
+}
diff --git a/ext/vulkan/vkswapper.h b/ext/vulkan/vkswapper.h
new file mode 100644
index 0000000..0486036
--- /dev/null
+++ b/ext/vulkan/vkswapper.h
@@ -0,0 +1,104 @@
+/*
+ * GStreamer
+ * Copyright (C) 2015 Matthew Waters <matthew@centricular.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifndef _VK_SWAPPER_H_
+#define _VK_SWAPPER_H_
+
+#include <gst/video/video.h>
+
+#include <vk.h>
+
+G_BEGIN_DECLS
+
+#define GST_TYPE_VULKAN_SWAPPER         (gst_vulkan_swapper_get_type())
+#define GST_VULKAN_SWAPPER(o)           (G_TYPE_CHECK_INSTANCE_CAST((o), GST_TYPE_VULKAN_SWAPPER, GstVulkanSwapper))
+#define GST_VULKAN_SWAPPER_CLASS(k)     (G_TYPE_CHECK_CLASS_CAST((k), GST_TYPE_VULKAN_SWAPPER, GstVulkanSwapperClass))
+#define GST_IS_VULKAN_SWAPPER(o)        (G_TYPE_CHECK_INSTANCE_TYPE((o), GST_TYPE_VULKAN_SWAPPER))
+#define GST_IS_VULKAN_SWAPPER_CLASS(k)  (G_TYPE_CHECK_CLASS_TYPE((k), GST_TYPE_VULKAN_SWAPPER))
+#define GST_VULKAN_SWAPPER_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS((o), GST_TYPE_VULKAN_SWAPPER, GstVulkanSwapperClass))
+GType gst_vulkan_swapper_get_type       (void);
+
+#define GST_VULKAN_SWAPPER_VIDEO_FORMATS " { RGBA, BGRA, RGB, BGR } "
+
+struct _GstVulkanSwapper
+{
+  GstObject parent;
+
+  GstVulkanDevice *device;
+  GstVulkanWindow *window;
+  GstVulkanQueue *queue;
+
+  VkSurfaceKHR    surface;
+
+  VkSurfaceCapabilitiesKHR surf_props;
+  VkSurfaceFormatKHR *surf_formats;
+  guint32 n_surf_formats;
+  VkPresentModeKHR *surf_present_modes;
+  guint32 n_surf_present_modes;
+
+  VkSwapchainKHR swap_chain;
+  GstVulkanImageMemory **swap_chain_images;
+  guint32 n_swap_chain_images;
+
+  GstCaps *caps;
+  GstVideoInfo v_info;
+
+  PFN_vkGetPhysicalDeviceSurfaceSupportKHR GetPhysicalDeviceSurfaceSupportKHR;
+  PFN_vkGetPhysicalDeviceSurfaceCapabilitiesKHR GetPhysicalDeviceSurfaceCapabilitiesKHR;
+  PFN_vkGetPhysicalDeviceSurfaceFormatsKHR GetPhysicalDeviceSurfaceFormatsKHR;
+  PFN_vkGetPhysicalDeviceSurfacePresentModesKHR GetPhysicalDeviceSurfacePresentModesKHR;
+  PFN_vkCreateSwapchainKHR CreateSwapchainKHR;
+  PFN_vkDestroySwapchainKHR DestroySwapchainKHR;
+  PFN_vkGetSwapchainImagesKHR GetSwapchainImagesKHR;
+  PFN_vkAcquireNextImageKHR AcquireNextImageKHR;
+  PFN_vkQueuePresentKHR QueuePresentKHR;
+
+  /* <private> */
+  /* runtime variables */
+  gint to_quit;
+  GstBuffer *current_buffer;
+
+  /* signal handlers */
+  gulong close_id;
+  gulong draw_id;
+
+  GstVulkanSwapperPrivate *priv;
+};
+
+struct _GstVulkanSwapperClass
+{
+  GstObjectClass parent_class;
+};
+
+GstVulkanSwapper *  gst_vulkan_swapper_new                      (GstVulkanDevice * device,
+                                                                 GstVulkanWindow * window);
+
+GstCaps *           gst_vulkan_swapper_get_supported_caps       (GstVulkanSwapper * swapper,
+                                                                 GError ** error);
+gboolean            gst_vulkan_swapper_set_caps                 (GstVulkanSwapper * swapper,
+                                                                 GstCaps * caps,
+                                                                 GError ** error);
+gboolean            gst_vulkan_swapper_render_buffer            (GstVulkanSwapper * swapper,
+                                                                 GstBuffer * buffer,
+                                                                 GError ** error);
+
+G_END_DECLS
+
+#endif /* _VK_INSTANCE_H_ */
diff --git a/ext/vulkan/vkupload.c b/ext/vulkan/vkupload.c
new file mode 100644
index 0000000..95c36cf
--- /dev/null
+++ b/ext/vulkan/vkupload.c
@@ -0,0 +1,829 @@
+/*
+ * GStreamer
+ * Copyright (C) 2016 Matthew Waters <matthew@centricular.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+/**
+ * SECTION:element-vulkanupload
+ *
+ * vulkanupload uploads data into Vulkan memory objects.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <string.h>
+
+#include "vkupload.h"
+
+GST_DEBUG_CATEGORY (gst_debug_vulkan_upload);
+#define GST_CAT_DEFAULT gst_debug_vulkan_upload
+
+static GstCaps *
+_set_caps_features_with_passthrough (const GstCaps * caps,
+    const gchar * feature_name, GstCapsFeatures * passthrough)
+{
+  guint i, j, m, n;
+  GstCaps *tmp;
+
+  tmp = gst_caps_copy (caps);
+
+  n = gst_caps_get_size (caps);
+  for (i = 0; i < n; i++) {
+    GstCapsFeatures *features, *orig_features;
+
+    orig_features = gst_caps_get_features (caps, i);
+    features = gst_caps_features_new (feature_name, NULL);
+
+    m = gst_caps_features_get_size (orig_features);
+    for (j = 0; j < m; j++) {
+      const gchar *feature = gst_caps_features_get_nth (orig_features, j);
+
+      /* if we already have the features */
+      if (gst_caps_features_contains (features, feature))
+        continue;
+
+      if (g_strcmp0 (feature, GST_CAPS_FEATURE_MEMORY_SYSTEM_MEMORY) == 0)
+        continue;
+
+      if (passthrough && gst_caps_features_contains (passthrough, feature)) {
+        gst_caps_features_add (features, feature);
+      }
+    }
+
+    gst_caps_set_features (tmp, i, features);
+  }
+
+  return tmp;
+}
+
+struct BufferUpload
+{
+  GstVulkanUpload *upload;
+};
+
+static gpointer
+_buffer_new_impl (GstVulkanUpload * upload)
+{
+  struct BufferUpload *raw = g_new0 (struct BufferUpload, 1);
+
+  raw->upload = upload;
+
+  return raw;
+}
+
+static GstCaps *
+_buffer_transform_caps (gpointer impl, GstPadDirection direction,
+    GstCaps * caps)
+{
+  return gst_caps_ref (caps);
+}
+
+static gboolean
+_buffer_set_caps (gpointer impl, GstCaps * in_caps, GstCaps * out_caps)
+{
+  return TRUE;
+}
+
+static void
+_buffer_propose_allocation (gpointer impl, GstQuery * decide_query,
+    GstQuery * query)
+{
+  struct BufferUpload *raw = impl;
+  gboolean need_pool;
+  GstCaps *caps;
+  guint size;
+
+  gst_query_parse_allocation (query, &caps, &need_pool);
+
+  if (caps == NULL)
+    return;
+
+  if (need_pool) {
+    GstBufferPool *pool;
+    GstStructure *config;
+    GstVideoInfo info;
+
+    if (!gst_video_info_from_caps (&info, caps))
+      return;
+
+    /* the normal size of a frame */
+    size = info.size;
+
+    pool = gst_vulkan_buffer_pool_new (raw->upload->device);
+
+    config = gst_buffer_pool_get_config (pool);
+    gst_buffer_pool_config_set_params (config, caps, size, 0, 0);
+
+    if (!gst_buffer_pool_set_config (pool, config)) {
+      g_object_unref (pool);
+      return;
+    }
+
+    gst_query_add_allocation_pool (query, pool, size, 1, 0);
+    g_object_unref (pool);
+  }
+
+  return;
+}
+
+static GstFlowReturn
+_buffer_perform (gpointer impl, GstBuffer * inbuf, GstBuffer ** outbuf)
+{
+  if (!gst_is_vulkan_buffer_memory (gst_buffer_peek_memory (inbuf, 0)))
+    return GST_FLOW_ERROR;
+
+  *outbuf = inbuf;
+
+  return GST_FLOW_OK;
+}
+
+static void
+_buffer_free (gpointer impl)
+{
+  g_free (impl);
+}
+
+static GstStaticCaps _buffer_in_templ =
+GST_STATIC_CAPS ("video/x-raw(" GST_CAPS_FEATURE_MEMORY_VULKAN_BUFFER ")");
+static GstStaticCaps _buffer_out_templ =
+GST_STATIC_CAPS ("video/x-raw(" GST_CAPS_FEATURE_MEMORY_VULKAN_BUFFER ")");
+
+static const struct UploadMethod buffer_upload = {
+  "VulkanBuffer",
+  &_buffer_in_templ,
+  &_buffer_out_templ,
+  _buffer_new_impl,
+  _buffer_transform_caps,
+  _buffer_set_caps,
+  _buffer_propose_allocation,
+  _buffer_perform,
+  _buffer_free,
+};
+
+struct RawToBufferUpload
+{
+  GstVulkanUpload *upload;
+
+  GstVideoInfo in_info;
+  GstVideoInfo out_info;
+
+  GstBufferPool *pool;
+  gboolean pool_active;
+
+  gsize alloc_sizes[GST_VIDEO_MAX_PLANES];
+};
+
+static gpointer
+_raw_to_buffer_new_impl (GstVulkanUpload * upload)
+{
+  struct RawToBufferUpload *raw = g_new0 (struct RawToBufferUpload, 1);
+
+  raw->upload = upload;
+
+  return raw;
+}
+
+static GstCaps *
+_raw_to_buffer_transform_caps (gpointer impl, GstPadDirection direction,
+    GstCaps * caps)
+{
+  GstCaps *ret;
+
+  if (direction == GST_PAD_SINK) {
+    ret =
+        _set_caps_features_with_passthrough (caps,
+        GST_CAPS_FEATURE_MEMORY_VULKAN_BUFFER, NULL);
+  } else {
+    ret =
+        _set_caps_features_with_passthrough (caps,
+        GST_CAPS_FEATURE_MEMORY_SYSTEM_MEMORY, NULL);
+  }
+
+  return ret;
+}
+
+static gboolean
+_raw_to_buffer_set_caps (gpointer impl, GstCaps * in_caps, GstCaps * out_caps)
+{
+  struct RawToBufferUpload *raw = impl;
+  guint out_width, out_height;
+  guint i;
+
+  if (!gst_video_info_from_caps (&raw->in_info, in_caps))
+    return FALSE;
+
+  if (!gst_video_info_from_caps (&raw->out_info, out_caps))
+    return FALSE;
+
+  out_width = GST_VIDEO_INFO_WIDTH (&raw->out_info);
+  out_height = GST_VIDEO_INFO_HEIGHT (&raw->out_info);
+
+  for (i = 0; i < GST_VIDEO_INFO_N_PLANES (&raw->out_info); i++) {
+    GstVideoFormat v_format = GST_VIDEO_INFO_FORMAT (&raw->out_info);
+    GstVulkanImageMemory *img_mem;
+    VkFormat vk_format;
+
+    vk_format = gst_vulkan_format_from_video_format (v_format, i);
+
+    img_mem = (GstVulkanImageMemory *)
+        gst_vulkan_image_memory_alloc (raw->upload->device, vk_format,
+        out_width, out_height, VK_IMAGE_TILING_OPTIMAL,
+        VK_IMAGE_USAGE_TRANSFER_DST_BIT | VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT,
+        VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT);
+
+    raw->alloc_sizes[i] = img_mem->requirements.size;
+
+    gst_memory_unref (GST_MEMORY_CAST (img_mem));
+  }
+
+  return TRUE;
+}
+
+static void
+_raw_to_buffer_propose_allocation (gpointer impl, GstQuery * decide_query,
+    GstQuery * query)
+{
+  /* a little trickery with the impl pointer */
+  _buffer_propose_allocation (impl, decide_query, query);
+}
+
+static GstFlowReturn
+_raw_to_buffer_perform (gpointer impl, GstBuffer * inbuf, GstBuffer ** outbuf)
+{
+  struct RawToBufferUpload *raw = impl;
+  GstVideoFrame v_frame;
+  GstFlowReturn ret;
+  guint i;
+
+  if (!raw->pool) {
+    GstStructure *config;
+    guint min = 0, max = 0;
+    gsize size = 1;
+
+    raw->pool = gst_vulkan_buffer_pool_new (raw->upload->device);
+    config = gst_buffer_pool_get_config (raw->pool);
+    gst_buffer_pool_config_set_params (config, raw->upload->out_caps, size, min,
+        max);
+    gst_buffer_pool_set_config (raw->pool, config);
+  }
+  if (!raw->pool_active) {
+    gst_buffer_pool_set_active (raw->pool, TRUE);
+    raw->pool_active = TRUE;
+  }
+
+  if ((ret =
+          gst_buffer_pool_acquire_buffer (raw->pool, outbuf,
+              NULL)) != GST_FLOW_OK)
+    goto out;
+
+  if (!gst_video_frame_map (&v_frame, &raw->in_info, inbuf, GST_MAP_READ)) {
+    GST_ELEMENT_ERROR (raw->upload, RESOURCE, NOT_FOUND,
+        ("%s", "Failed to map input buffer"), NULL);
+    return GST_FLOW_ERROR;
+  }
+
+  for (i = 0; i < GST_VIDEO_INFO_N_PLANES (&raw->out_info); i++) {
+    GstMapInfo map_info;
+    gsize plane_size;
+    GstMemory *mem;
+
+    mem = gst_buffer_peek_memory (*outbuf, i);
+    if (!gst_memory_map (GST_MEMORY_CAST (mem), &map_info, GST_MAP_WRITE)) {
+      GST_ELEMENT_ERROR (raw->upload, RESOURCE, NOT_FOUND,
+          ("%s", "Failed to map output memory"), NULL);
+      gst_buffer_unref (*outbuf);
+      *outbuf = NULL;
+      ret = GST_FLOW_ERROR;
+      goto out;
+    }
+
+    plane_size =
+        GST_VIDEO_INFO_PLANE_STRIDE (&raw->out_info,
+        i) * GST_VIDEO_INFO_COMP_HEIGHT (&raw->out_info, i);
+    g_assert (plane_size < map_info.size);
+    memcpy (map_info.data, v_frame.data[i], plane_size);
+
+    gst_memory_unmap (GST_MEMORY_CAST (mem), &map_info);
+  }
+
+  gst_video_frame_unmap (&v_frame);
+
+  ret = GST_FLOW_OK;
+
+out:
+  return ret;
+}
+
+static void
+_raw_to_buffer_free (gpointer impl)
+{
+  struct RawToBufferUpload *raw = impl;
+
+  if (raw->pool) {
+    if (raw->pool_active) {
+      gst_buffer_pool_set_active (raw->pool, FALSE);
+    }
+    raw->pool_active = FALSE;
+    gst_object_unref (raw->pool);
+    raw->pool = NULL;
+  }
+
+  g_free (impl);
+}
+
+static GstStaticCaps _raw_to_buffer_in_templ = GST_STATIC_CAPS ("video/x-raw");
+static GstStaticCaps _raw_to_buffer_out_templ =
+GST_STATIC_CAPS ("video/x-raw(" GST_CAPS_FEATURE_MEMORY_VULKAN_BUFFER ")");
+
+static const struct UploadMethod raw_to_buffer_upload = {
+  "RawToVulkanBuffer",
+  &_raw_to_buffer_in_templ,
+  &_raw_to_buffer_out_templ,
+  _raw_to_buffer_new_impl,
+  _raw_to_buffer_transform_caps,
+  _raw_to_buffer_set_caps,
+  _raw_to_buffer_propose_allocation,
+  _raw_to_buffer_perform,
+  _raw_to_buffer_free,
+};
+
+static const struct UploadMethod *upload_methods[] = {
+  &buffer_upload,
+  &raw_to_buffer_upload,
+};
+
+static GstCaps *
+_get_input_template_caps (void)
+{
+  GstCaps *ret = NULL;
+  gint i;
+
+  /* FIXME: cache this and invalidate on changes to upload_methods */
+  for (i = 0; i < G_N_ELEMENTS (upload_methods); i++) {
+    GstCaps *template = gst_static_caps_get (upload_methods[i]->in_template);
+    ret = ret == NULL ? template : gst_caps_merge (ret, template);
+  }
+
+  ret = gst_caps_simplify (ret);
+
+  return ret;
+}
+
+static GstCaps *
+_get_output_template_caps (void)
+{
+  GstCaps *ret = NULL;
+  gint i;
+
+  /* FIXME: cache this and invalidate on changes to upload_methods */
+  for (i = 0; i < G_N_ELEMENTS (upload_methods); i++) {
+    GstCaps *template = gst_static_caps_get (upload_methods[i]->out_template);
+    ret = ret == NULL ? template : gst_caps_merge (ret, template);
+  }
+
+  ret = gst_caps_simplify (ret);
+
+  return ret;
+}
+
+static void gst_vulkan_upload_finalize (GObject * object);
+static void gst_vulkan_upload_set_property (GObject * object, guint prop_id,
+    const GValue * value, GParamSpec * param_spec);
+static void gst_vulkan_upload_get_property (GObject * object, guint prop_id,
+    GValue * value, GParamSpec * param_spec);
+
+static gboolean gst_vulkan_upload_query (GstBaseTransform * bt,
+    GstPadDirection direction, GstQuery * query);
+static void gst_vulkan_upload_set_context (GstElement * element,
+    GstContext * context);
+static GstStateChangeReturn gst_vulkan_upload_change_state (GstElement *
+    element, GstStateChange transition);
+
+static gboolean gst_vulkan_upload_set_caps (GstBaseTransform * bt,
+    GstCaps * in_caps, GstCaps * out_caps);
+static GstCaps *gst_vulkan_upload_transform_caps (GstBaseTransform * bt,
+    GstPadDirection direction, GstCaps * caps, GstCaps * filter);
+static gboolean gst_vulkan_upload_propose_allocation (GstBaseTransform * bt,
+    GstQuery * decide_query, GstQuery * query);
+static gboolean gst_vulkan_upload_decide_allocation (GstBaseTransform * bt,
+    GstQuery * query);
+static GstFlowReturn gst_vulkan_upload_transform (GstBaseTransform * bt,
+    GstBuffer * inbuf, GstBuffer * outbuf);
+static GstFlowReturn gst_vulkan_upload_prepare_output_buffer (GstBaseTransform *
+    bt, GstBuffer * inbuf, GstBuffer ** outbuf);
+
+enum
+{
+  PROP_0,
+};
+
+enum
+{
+  SIGNAL_0,
+  LAST_SIGNAL
+};
+
+/* static guint gst_vulkan_upload_signals[LAST_SIGNAL] = { 0 }; */
+
+#define gst_vulkan_upload_parent_class parent_class
+G_DEFINE_TYPE_WITH_CODE (GstVulkanUpload, gst_vulkan_upload,
+    GST_TYPE_BASE_TRANSFORM, GST_DEBUG_CATEGORY_INIT (gst_debug_vulkan_upload,
+        "vulkanupload", 0, "Vulkan Uploader"));
+
+static void
+gst_vulkan_upload_class_init (GstVulkanUploadClass * klass)
+{
+  GObjectClass *gobject_class;
+  GstElementClass *gstelement_class;
+  GstBaseTransformClass *gstbasetransform_class;
+
+  gobject_class = (GObjectClass *) klass;
+  gstelement_class = (GstElementClass *) klass;
+  gstbasetransform_class = (GstBaseTransformClass *) klass;
+
+  gobject_class->set_property = gst_vulkan_upload_set_property;
+  gobject_class->get_property = gst_vulkan_upload_get_property;
+
+  gst_element_class_set_metadata (gstelement_class, "Vulkan Uploader",
+      "Filter/Video", "A Vulkan data uploader",
+      "Matthew Waters <matthew@centricular.com>");
+
+  {
+    GstCaps *caps;
+
+    caps = _get_input_template_caps ();
+    gst_element_class_add_pad_template (gstelement_class,
+        gst_pad_template_new ("sink", GST_PAD_SINK, GST_PAD_ALWAYS, caps));
+    gst_caps_unref (caps);
+
+    caps = _get_output_template_caps ();
+    gst_element_class_add_pad_template (gstelement_class,
+        gst_pad_template_new ("src", GST_PAD_SRC, GST_PAD_ALWAYS, caps));
+    gst_caps_unref (caps);
+  }
+
+  gobject_class->finalize = gst_vulkan_upload_finalize;
+
+  gstelement_class->change_state = gst_vulkan_upload_change_state;
+  gstelement_class->set_context = gst_vulkan_upload_set_context;
+  gstbasetransform_class->query = GST_DEBUG_FUNCPTR (gst_vulkan_upload_query);
+  gstbasetransform_class->set_caps = gst_vulkan_upload_set_caps;
+  gstbasetransform_class->transform_caps = gst_vulkan_upload_transform_caps;
+  gstbasetransform_class->propose_allocation =
+      gst_vulkan_upload_propose_allocation;
+  gstbasetransform_class->decide_allocation =
+      gst_vulkan_upload_decide_allocation;
+  gstbasetransform_class->transform = gst_vulkan_upload_transform;
+  gstbasetransform_class->prepare_output_buffer =
+      gst_vulkan_upload_prepare_output_buffer;
+}
+
+static void
+gst_vulkan_upload_init (GstVulkanUpload * vk_upload)
+{
+  guint i, n;
+
+  n = G_N_ELEMENTS (upload_methods);
+  vk_upload->upload_impls = g_malloc (sizeof (gpointer) * n);
+  for (i = 0; i < n; i++) {
+    vk_upload->upload_impls[i] = upload_methods[i]->new_impl (vk_upload);
+  }
+}
+
+static void
+gst_vulkan_upload_finalize (GObject * object)
+{
+  GstVulkanUpload *vk_upload = GST_VULKAN_UPLOAD (object);
+  guint i;
+
+  gst_caps_replace (&vk_upload->in_caps, NULL);
+  gst_caps_replace (&vk_upload->out_caps, NULL);
+
+  for (i = 0; i < G_N_ELEMENTS (upload_methods); i++) {
+    upload_methods[i]->free (vk_upload->upload_impls[i]);
+  }
+
+  G_OBJECT_CLASS (parent_class)->finalize (object);
+}
+
+static void
+gst_vulkan_upload_set_property (GObject * object, guint prop_id,
+    const GValue * value, GParamSpec * pspec)
+{
+//  GstVulkanUpload *vk_upload = GST_VULKAN_UPLOAD (object);
+
+  switch (prop_id) {
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
+  }
+}
+
+static void
+gst_vulkan_upload_get_property (GObject * object, guint prop_id,
+    GValue * value, GParamSpec * pspec)
+{
+//  GstVulkanUpload *vk_upload = GST_VULKAN_UPLOAD (object);
+
+  switch (prop_id) {
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
+  }
+}
+
+static gboolean
+gst_vulkan_upload_query (GstBaseTransform * bt, GstPadDirection direction,
+    GstQuery * query)
+{
+  GstVulkanUpload *vk_upload = GST_VULKAN_UPLOAD (bt);
+  gboolean res = FALSE;
+
+  switch (GST_QUERY_TYPE (query)) {
+    case GST_QUERY_CONTEXT:{
+      res = gst_vulkan_handle_context_query (GST_ELEMENT (vk_upload), query,
+          &vk_upload->display, &vk_upload->instance, &vk_upload->device);
+
+      if (res)
+        return res;
+      break;
+    }
+    default:
+      break;
+  }
+
+  return GST_BASE_TRANSFORM_CLASS (parent_class)->query (bt, direction, query);
+}
+
+static void
+gst_vulkan_upload_set_context (GstElement * element, GstContext * context)
+{
+  GstVulkanUpload *vk_upload = GST_VULKAN_UPLOAD (element);
+
+  gst_vulkan_handle_set_context (element, context, &vk_upload->display,
+      &vk_upload->instance);
+
+  GST_ELEMENT_CLASS (parent_class)->set_context (element, context);
+}
+
+static GstStateChangeReturn
+gst_vulkan_upload_change_state (GstElement * element, GstStateChange transition)
+{
+  GstVulkanUpload *vk_upload = GST_VULKAN_UPLOAD (element);
+  GstStateChangeReturn ret = GST_STATE_CHANGE_SUCCESS;
+
+  GST_DEBUG ("changing state: %s => %s",
+      gst_element_state_get_name (GST_STATE_TRANSITION_CURRENT (transition)),
+      gst_element_state_get_name (GST_STATE_TRANSITION_NEXT (transition)));
+
+  switch (transition) {
+    case GST_STATE_CHANGE_NULL_TO_READY:
+      break;
+    case GST_STATE_CHANGE_READY_TO_PAUSED:
+      if (!gst_vulkan_ensure_element_data (element, &vk_upload->display,
+              &vk_upload->instance)) {
+        GST_ELEMENT_ERROR (vk_upload, RESOURCE, NOT_FOUND,
+            ("Failed to retreive vulkan instance/display"), (NULL));
+        return GST_STATE_CHANGE_FAILURE;
+      }
+      if (!gst_vulkan_device_run_context_query (GST_ELEMENT (vk_upload),
+              &vk_upload->device)) {
+        GST_ELEMENT_ERROR (vk_upload, RESOURCE, NOT_FOUND,
+            ("Failed to retreive vulkan device"), (NULL));
+        return GST_STATE_CHANGE_FAILURE;
+      }
+      break;
+    case GST_STATE_CHANGE_PAUSED_TO_PLAYING:
+      break;
+    default:
+      break;
+  }
+
+  ret = GST_ELEMENT_CLASS (parent_class)->change_state (element, transition);
+  if (ret == GST_STATE_CHANGE_FAILURE)
+    return ret;
+
+  switch (transition) {
+    case GST_STATE_CHANGE_PLAYING_TO_PAUSED:
+      break;
+    case GST_STATE_CHANGE_PAUSED_TO_READY:
+      if (vk_upload->display)
+        gst_object_unref (vk_upload->display);
+      vk_upload->display = NULL;
+      if (vk_upload->device)
+        gst_object_unref (vk_upload->device);
+      vk_upload->device = NULL;
+      if (vk_upload->instance)
+        gst_object_unref (vk_upload->instance);
+      vk_upload->instance = NULL;
+      break;
+    case GST_STATE_CHANGE_READY_TO_NULL:
+      break;
+    default:
+      break;
+  }
+
+  return ret;
+}
+
+static GstCaps *
+gst_vulkan_upload_transform_caps (GstBaseTransform * bt,
+    GstPadDirection direction, GstCaps * caps, GstCaps * filter)
+{
+  GstVulkanUpload *vk_upload = GST_VULKAN_UPLOAD (bt);
+  GstCaps *result, *tmp;
+  gint i;
+
+  tmp = gst_caps_new_empty ();
+
+  for (i = 0; i < G_N_ELEMENTS (upload_methods); i++) {
+    GstCaps *tmp2;
+    GstCaps *templ;
+
+    if (direction == GST_PAD_SINK) {
+      templ = gst_static_caps_get (upload_methods[i]->in_template);
+    } else {
+      templ = gst_static_caps_get (upload_methods[i]->out_template);
+    }
+    if (!gst_caps_can_intersect (caps, templ)) {
+      gst_caps_unref (templ);
+      continue;
+    }
+    gst_caps_unref (templ);
+
+    tmp2 = upload_methods[i]->transform_caps (vk_upload->upload_impls[i],
+        direction, caps);
+
+    if (tmp2)
+      tmp = gst_caps_merge (tmp, tmp2);
+  }
+
+  if (filter) {
+    result = gst_caps_intersect_full (filter, tmp, GST_CAPS_INTERSECT_FIRST);
+    gst_caps_unref (tmp);
+  } else {
+    result = tmp;
+  }
+
+  return result;
+}
+
+static gboolean
+gst_vulkan_upload_set_caps (GstBaseTransform * bt, GstCaps * in_caps,
+    GstCaps * out_caps)
+{
+  GstVulkanUpload *vk_upload = GST_VULKAN_UPLOAD (bt);
+  gboolean found_method = FALSE;
+  guint i;
+
+  gst_caps_replace (&vk_upload->in_caps, in_caps);
+  gst_caps_replace (&vk_upload->out_caps, out_caps);
+
+  for (i = 0; i < G_N_ELEMENTS (upload_methods); i++) {
+    GstCaps *templ;
+
+    templ = gst_static_caps_get (upload_methods[i]->in_template);
+    if (!gst_caps_can_intersect (in_caps, templ)) {
+      gst_caps_unref (templ);
+      continue;
+    }
+    gst_caps_unref (templ);
+
+    templ = gst_static_caps_get (upload_methods[i]->out_template);
+    if (!gst_caps_can_intersect (out_caps, templ)) {
+      gst_caps_unref (templ);
+      continue;
+    }
+    gst_caps_unref (templ);
+
+    if (!upload_methods[i]->set_caps (vk_upload->upload_impls[i], in_caps,
+            out_caps))
+      continue;
+
+    GST_LOG_OBJECT (bt, "uploader %s accepted caps in: %" GST_PTR_FORMAT
+        " out: %" GST_PTR_FORMAT, upload_methods[i]->name, in_caps, out_caps);
+
+    vk_upload->current_impl = i;
+    found_method = TRUE;
+    break;
+  }
+
+  GST_DEBUG_OBJECT (bt,
+      "set caps in: %" GST_PTR_FORMAT " out: %" GST_PTR_FORMAT, in_caps,
+      out_caps);
+
+  return found_method;
+}
+
+static gboolean
+gst_vulkan_upload_propose_allocation (GstBaseTransform * bt,
+    GstQuery * decide_query, GstQuery * query)
+{
+  GstVulkanUpload *vk_upload = GST_VULKAN_UPLOAD (bt);
+  guint i;
+
+  for (i = 0; i < G_N_ELEMENTS (upload_methods); i++) {
+    GstCaps *templ;
+
+    templ = gst_static_caps_get (upload_methods[i]->in_template);
+    if (!gst_caps_can_intersect (vk_upload->in_caps, templ)) {
+      gst_caps_unref (templ);
+      continue;
+    }
+    gst_caps_unref (templ);
+
+    templ = gst_static_caps_get (upload_methods[i]->out_template);
+    if (!gst_caps_can_intersect (vk_upload->out_caps, templ)) {
+      gst_caps_unref (templ);
+      continue;
+    }
+    gst_caps_unref (templ);
+
+    upload_methods[i]->propose_allocation (vk_upload->upload_impls[i],
+        decide_query, query);
+  }
+
+  return TRUE;
+}
+
+static gboolean
+gst_vulkan_upload_decide_allocation (GstBaseTransform * bt, GstQuery * query)
+{
+  return TRUE;
+}
+
+static gboolean
+_upload_find_method (GstVulkanUpload * vk_upload)
+{
+  vk_upload->current_impl++;
+
+  if (vk_upload->current_impl > G_N_ELEMENTS (upload_methods))
+    return FALSE;
+
+  GST_DEBUG_OBJECT (vk_upload, "attempting upload with uploader %s",
+      upload_methods[vk_upload->current_impl]->name);
+
+  return TRUE;
+}
+
+static GstFlowReturn
+gst_vulkan_upload_prepare_output_buffer (GstBaseTransform * bt,
+    GstBuffer * inbuf, GstBuffer ** outbuf)
+{
+  GstVulkanUpload *vk_upload = GST_VULKAN_UPLOAD (bt);
+  GstFlowReturn ret;
+
+  do {
+    gpointer method_impl;
+    const struct UploadMethod *method;
+
+    method = upload_methods[vk_upload->current_impl];
+    method_impl = vk_upload->upload_impls[vk_upload->current_impl];
+
+    ret = method->perform (method_impl, inbuf, outbuf);
+    if (ret != GST_FLOW_OK) {
+      do {
+        if (!_upload_find_method (vk_upload)) {
+          GST_ELEMENT_ERROR (bt, RESOURCE, NOT_FOUND,
+              ("Could not find suitable uploader"), (NULL));
+          return GST_FLOW_ERROR;
+        }
+
+        method = upload_methods[vk_upload->current_impl];
+        method_impl = vk_upload->upload_impls[vk_upload->current_impl];
+        if (!method->set_caps (method_impl, vk_upload->in_caps,
+                vk_upload->out_caps))
+          /* try the next method */
+          continue;
+      } while (FALSE);
+      /* try the uploading with the next method */
+      continue;
+    }
+  } while (FALSE);
+
+  return ret;
+}
+
+static GstFlowReturn
+gst_vulkan_upload_transform (GstBaseTransform * bt, GstBuffer * inbuf,
+    GstBuffer * outbuf)
+{
+  return GST_FLOW_OK;
+}
diff --git a/ext/vulkan/vkupload.h b/ext/vulkan/vkupload.h
new file mode 100644
index 0000000..8ea3d72
--- /dev/null
+++ b/ext/vulkan/vkupload.h
@@ -0,0 +1,88 @@
+/*
+ * GStreamer
+ * Copyright (C) 2016 Matthew Waters <matthew@centricular.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifndef _VK_UPLOAD_H_
+#define _VK_UPLOAD_H_
+
+#include <gst/gst.h>
+#include <gst/video/video.h>
+#include <vk.h>
+
+G_BEGIN_DECLS
+
+#define GST_TYPE_VULKAN_UPLOAD            (gst_vulkan_upload_get_type())
+#define GST_VULKAN_UPLOAD(obj)            (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_VULKAN_UPLOAD,GstVulkanUpload))
+#define GST_VULKAN_UPLOAD_CLASS(klass)    (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_VULKAN_UPLOAD,GstVulkanUploadClass))
+#define GST_IS_VULKAN_UPLOAD(obj)         (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_VULKAN_UPLOAD))
+#define GST_IS_VULKAN_UPLOAD_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_VULKAN_UPLOAD))
+
+typedef struct _GstVulkanUpload GstVulkanUpload;
+typedef struct _GstVulkanUploadClass GstVulkanUploadClass;
+
+struct UploadMethod
+{
+  const gchar       *name;
+
+  GstStaticCaps     *in_template;
+  GstStaticCaps     *out_template;
+
+  gpointer          (*new_impl)                 (GstVulkanUpload * upload);
+  GstCaps *         (*transform_caps)           (gpointer impl,
+                                                 GstPadDirection direction,
+                                                 GstCaps * caps);
+  gboolean          (*set_caps)                 (gpointer impl,
+                                                 GstCaps * in_caps,
+                                                 GstCaps * out_caps);
+  void              (*propose_allocation)       (gpointer impl,
+                                                 GstQuery * decide_query,
+                                                 GstQuery * query);
+  GstFlowReturn     (*perform)                  (gpointer impl,
+                                                 GstBuffer * buffer,
+                                                 GstBuffer ** outbuf);
+  void              (*free)                     (gpointer impl);
+};
+
+struct _GstVulkanUpload
+{
+  GstBaseTransform      parent;
+
+  GstVulkanInstance     *instance;
+  GstVulkanDevice       *device;
+
+  GstVulkanDisplay      *display;
+
+  GstCaps               *in_caps;
+  GstCaps               *out_caps;
+
+  /* all impl pointers */
+  gpointer              *upload_impls;
+  guint                 current_impl;
+};
+
+struct _GstVulkanUploadClass
+{
+  GstBaseTransformClass video_sink_class;
+};
+
+GType gst_vulkan_upload_get_type(void);
+
+G_END_DECLS
+
+#endif
diff --git a/ext/vulkan/vkutils.c b/ext/vulkan/vkutils.c
new file mode 100644
index 0000000..6223db5
--- /dev/null
+++ b/ext/vulkan/vkutils.c
@@ -0,0 +1,325 @@
+/*
+ * GStreamer
+ * Copyright (C) 2015 Matthew Waters <matthew@centricular.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include "vkutils.h"
+#include "vkutils_private.h"
+
+GST_DEBUG_CATEGORY_STATIC (GST_CAT_CONTEXT);
+
+gboolean
+_check_for_all_layers (uint32_t check_count, const char **check_names,
+    uint32_t layer_count, VkLayerProperties * layers)
+{
+  uint32_t i, j;
+
+  for (i = 0; i < check_count; i++) {
+    gboolean found = FALSE;
+    for (j = 0; j < layer_count; j++) {
+      if (g_strcmp0 (check_names[i], layers[j].layerName) == 0) {
+        found = TRUE;
+      }
+    }
+    if (!found) {
+      GST_ERROR ("Cannot find layer: %s", check_names[i]);
+      return FALSE;
+    }
+  }
+  return TRUE;
+}
+
+static void
+_init_context_debug (void)
+{
+#ifndef GST_DISABLE_GST_DEBUG
+  static volatile gsize _init = 0;
+
+  if (g_once_init_enter (&_init)) {
+    GST_DEBUG_CATEGORY_GET (GST_CAT_CONTEXT, "GST_CONTEXT");
+    g_once_init_leave (&_init, 1);
+  }
+#endif
+}
+
+static gboolean
+_vk_pad_query (const GValue * item, GValue * value, gpointer user_data)
+{
+  GstPad *pad = g_value_get_object (item);
+  GstQuery *query = user_data;
+  gboolean res;
+
+  _init_context_debug ();
+
+  res = gst_pad_peer_query (pad, query);
+
+  if (res) {
+    g_value_set_boolean (value, TRUE);
+    return FALSE;
+  }
+
+  GST_CAT_INFO_OBJECT (GST_CAT_CONTEXT, pad, "pad peer query failed");
+  return TRUE;
+}
+
+gboolean
+gst_vulkan_run_query (GstElement * element, GstQuery * query,
+    GstPadDirection direction)
+{
+  GstIterator *it;
+  GstIteratorFoldFunction func = _vk_pad_query;
+  GValue res = { 0 };
+
+  g_value_init (&res, G_TYPE_BOOLEAN);
+  g_value_set_boolean (&res, FALSE);
+
+  /* Ask neighbor */
+  if (direction == GST_PAD_SRC)
+    it = gst_element_iterate_src_pads (element);
+  else
+    it = gst_element_iterate_sink_pads (element);
+
+  while (gst_iterator_fold (it, func, &res, query) == GST_ITERATOR_RESYNC)
+    gst_iterator_resync (it);
+
+  gst_iterator_free (it);
+
+  return g_value_get_boolean (&res);
+}
+
+void
+gst_vulkan_global_context_query (GstElement * element,
+    const gchar * context_type)
+{
+  GstQuery *query;
+  GstMessage *msg;
+
+  if ((query = gst_vulkan_local_context_query (element, context_type, TRUE))) {
+    gst_query_unref (query);
+    return;
+  }
+
+  /* 3) Post a GST_MESSAGE_NEED_CONTEXT message on the bus with
+   *    the required context type and afterwards check if a
+   *    usable context was set now as in 1). The message could
+   *    be handled by the parent bins of the element and the
+   *    application.
+   */
+  GST_CAT_INFO_OBJECT (GST_CAT_CONTEXT, element,
+      "posting need context message");
+  msg = gst_message_new_need_context (GST_OBJECT_CAST (element), context_type);
+  gst_element_post_message (element, msg);
+
+  /*
+   * Whomever responds to the need-context message performs a
+   * GstElement::set_context() with the required context in which the element
+   * is required to update the display_ptr or call gst_vulkan_handle_set_context().
+   */
+}
+
+GstQuery *
+gst_vulkan_local_context_query (GstElement * element,
+    const gchar * context_type, gboolean set_context)
+{
+  GstQuery *query;
+  GstContext *ctxt;
+
+  _init_context_debug ();
+
+  /*  2a) Query downstream with GST_QUERY_CONTEXT for the context and
+   *      check if downstream already has a context of the specific type
+   *  2b) Query upstream as above.
+   */
+  query = gst_query_new_context (context_type);
+  if (gst_vulkan_run_query (element, query, GST_PAD_SRC)) {
+    gst_query_parse_context (query, &ctxt);
+    GST_CAT_INFO_OBJECT (GST_CAT_CONTEXT, element,
+        "found context (%p) in downstream query", ctxt);
+    if (set_context)
+      gst_element_set_context (element, ctxt);
+  } else if (gst_vulkan_run_query (element, query, GST_PAD_SINK)) {
+    gst_query_parse_context (query, &ctxt);
+    GST_CAT_INFO_OBJECT (GST_CAT_CONTEXT, element,
+        "found context (%p) in upstream query", ctxt);
+    if (set_context)
+      gst_element_set_context (element, ctxt);
+  } else {
+    gst_query_unref (query);
+    query = NULL;
+  }
+
+  return query;
+}
+
+static void
+_vk_display_context_query (GstElement * element,
+    GstVulkanDisplay ** display_ptr)
+{
+  gst_vulkan_global_context_query (element,
+      GST_VULKAN_DISPLAY_CONTEXT_TYPE_STR);
+}
+
+/*  4) Create a context by itself and post a GST_MESSAGE_HAVE_CONTEXT
+ *     message.
+ */
+/*
+ * @element: (transfer none):
+ * @context: (transfer full):
+ */
+static void
+_vk_context_propagate (GstElement * element, GstContext * context)
+{
+  GstMessage *msg;
+
+  _init_context_debug ();
+
+  gst_element_set_context (element, context);
+
+  GST_CAT_INFO_OBJECT (GST_CAT_CONTEXT, element,
+      "posting have context (%" GST_PTR_FORMAT ") message", context);
+  msg = gst_message_new_have_context (GST_OBJECT_CAST (element), context);
+  gst_element_post_message (GST_ELEMENT_CAST (element), msg);
+}
+
+gboolean
+gst_vulkan_ensure_element_data (gpointer element,
+    GstVulkanDisplay ** display_ptr, GstVulkanInstance ** instance_ptr)
+{
+  g_return_val_if_fail (element != NULL, FALSE);
+  g_return_val_if_fail (display_ptr != NULL, FALSE);
+  g_return_val_if_fail (instance_ptr != NULL, FALSE);
+
+  /*  1) Check if the element already has a context of the specific
+   *     type.
+   */
+  if (!*instance_ptr) {
+    GError *error = NULL;
+
+    gst_vulkan_global_context_query (element,
+        GST_VULKAN_INSTANCE_CONTEXT_TYPE_STR);
+
+    /* Neighbour found and it updated the display */
+    if (!*instance_ptr) {
+      GstContext *context;
+
+      /* If no neighboor, or application not interested, use system default */
+      *instance_ptr = gst_vulkan_instance_new ();
+
+      context = gst_context_new (GST_VULKAN_INSTANCE_CONTEXT_TYPE_STR, TRUE);
+      gst_context_set_vulkan_instance (context, *instance_ptr);
+
+      _vk_context_propagate (element, context);
+    }
+
+    if (!gst_vulkan_instance_open (*instance_ptr, &error)) {
+      GST_ELEMENT_ERROR (element, RESOURCE, NOT_FOUND,
+          ("Failed to create vulkan instance"), ("%s", error->message));
+      g_clear_error (&error);
+      return FALSE;
+    }
+  }
+
+  if (!*display_ptr) {
+    _vk_display_context_query (element, display_ptr);
+
+    /* Neighbour found and it updated the display */
+    if (!*display_ptr) {
+      GstContext *context;
+
+      /* instance is required before the display */
+      g_return_val_if_fail (*instance_ptr != NULL, FALSE);
+
+      /* If no neighboor, or application not interested, use system default */
+      *display_ptr = gst_vulkan_display_new (*instance_ptr);
+
+      context = gst_context_new (GST_VULKAN_DISPLAY_CONTEXT_TYPE_STR, TRUE);
+      gst_context_set_vulkan_display (context, *display_ptr);
+
+      _vk_context_propagate (element, context);
+    }
+  }
+
+  return *display_ptr != NULL && *instance_ptr != NULL;
+}
+
+gboolean
+gst_vulkan_handle_set_context (GstElement * element, GstContext * context,
+    GstVulkanDisplay ** display, GstVulkanInstance ** instance)
+{
+  GstVulkanDisplay *display_replacement = NULL;
+  GstVulkanInstance *instance_replacement = NULL;
+  const gchar *context_type;
+
+  g_return_val_if_fail (display != NULL, FALSE);
+  g_return_val_if_fail (instance != NULL, FALSE);
+
+  if (!context)
+    return FALSE;
+
+  context_type = gst_context_get_context_type (context);
+
+  if (g_strcmp0 (context_type, GST_VULKAN_DISPLAY_CONTEXT_TYPE_STR) == 0) {
+    if (!gst_context_get_vulkan_display (context, &display_replacement)) {
+      GST_WARNING_OBJECT (element, "Failed to get display from context");
+      return FALSE;
+    }
+  } else if (g_strcmp0 (context_type,
+          GST_VULKAN_INSTANCE_CONTEXT_TYPE_STR) == 0) {
+    if (!gst_context_get_vulkan_instance (context, &instance_replacement)) {
+      GST_WARNING_OBJECT (element, "Failed to get instance from context");
+      return FALSE;
+    }
+  }
+
+  if (display_replacement) {
+    GstVulkanDisplay *old = *display;
+    *display = display_replacement;
+
+    if (old)
+      gst_object_unref (old);
+  }
+
+  if (instance_replacement) {
+    GstVulkanInstance *old = *instance;
+    *instance = instance_replacement;
+
+    if (old)
+      gst_object_unref (old);
+  }
+
+  return TRUE;
+}
+
+gboolean
+gst_vulkan_handle_context_query (GstElement * element, GstQuery * query,
+    GstVulkanDisplay ** display, GstVulkanInstance ** instance,
+    GstVulkanDevice ** device)
+{
+  if (gst_vulkan_display_handle_context_query (element, query, display))
+    return TRUE;
+  if (gst_vulkan_instance_handle_context_query (element, query, instance))
+    return TRUE;
+  if (gst_vulkan_device_handle_context_query (element, query, device))
+    return TRUE;
+
+  return FALSE;
+}
diff --git a/ext/vulkan/vkutils.h b/ext/vulkan/vkutils.h
new file mode 100644
index 0000000..04f6395
--- /dev/null
+++ b/ext/vulkan/vkutils.h
@@ -0,0 +1,42 @@
+/*
+ * GStreamer
+ * Copyright (C) 2015 Matthew Waters <matthew@centricular.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+#ifndef _VK_UTILS_H_
+#define _VK_UTILS_H_
+
+#include <gst/gst.h>
+#include <vk.h>
+
+G_BEGIN_DECLS
+
+gboolean gst_vulkan_ensure_element_data (gpointer element,
+    GstVulkanDisplay **display_ptr, GstVulkanInstance ** instance_ptr);
+gboolean gst_vulkan_handle_set_context (GstElement * element, GstContext * context,
+    GstVulkanDisplay ** display, GstVulkanInstance ** instance);
+gboolean gst_vulkan_handle_context_query (GstElement * element, GstQuery * query,
+    GstVulkanDisplay ** display, GstVulkanInstance ** instance, GstVulkanDevice ** device);
+
+void gst_vulkan_global_context_query (GstElement * element, const gchar * context_type);
+GstQuery * gst_vulkan_local_context_query (GstElement * element, const gchar * context_type, gboolean set_context);
+gboolean gst_vulkan_run_query (GstElement * element,
+    GstQuery * query, GstPadDirection direction);
+
+G_END_DECLS
+
+#endif /*_VK_UTILS_H_ */
diff --git a/ext/opus/gstopuscommon.h b/ext/vulkan/vkutils_private.h
similarity index 60%
rename from ext/opus/gstopuscommon.h
rename to ext/vulkan/vkutils_private.h
index 71771ae..aebf44b 100644
--- a/ext/opus/gstopuscommon.h
+++ b/ext/vulkan/vkutils_private.h
@@ -1,5 +1,6 @@
-/* GStreamer Opus Encoder
- * Copyright (C) 2009 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+/*
+ * GStreamer
+ * Copyright (C) 2015 Matthew Waters <matthew@centricular.com>
  *
  * This library is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Library General Public
@@ -16,22 +17,17 @@
  * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
  * Boston, MA 02110-1301, USA.
  */
-
-
-#ifndef __GST_OPUS_COMMON_H__
-#define __GST_OPUS_COMMON_H__
+#ifndef _VK_UTILS_PRIVATE_H_
+#define _VK_UTILS_PRIVATE_H_
 
 #include <gst/gst.h>
-#include <gst/audio/audio.h>
+#include "vk.h"
 
 G_BEGIN_DECLS
 
-extern const GstAudioChannelPosition gst_opus_channel_positions[][8];
-extern const char *gst_opus_channel_names[];
-extern void gst_opus_common_log_channel_mapping_table (GstElement *element,
-    GstDebugCategory * category, const char *msg,
-    int n_channels, const guint8 *table);
+gboolean _check_for_all_layers (uint32_t check_count, const char ** check_names,
+    uint32_t layer_count, VkLayerProperties * layers);
 
 G_END_DECLS
 
-#endif /* __GST_OPUS_COMMON_H__ */
+#endif /*_VK_UTILS_H_ */
diff --git a/ext/vulkan/vkwindow.c b/ext/vulkan/vkwindow.c
new file mode 100644
index 0000000..caa3c47
--- /dev/null
+++ b/ext/vulkan/vkwindow.c
@@ -0,0 +1,308 @@
+/*
+ * GStreamer
+ * Copyright (C) 2012 Matthew Waters <ystreet00@gmail.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+/**
+ * SECTION:gstglwindow
+ * @short_description: window/surface abstraction
+ * @title: GstVulkanWindow
+ * @see_also: #GstGLContext, #GstGLDisplay
+ *
+ * GstVulkanWindow represents a window that elements can render into.  A window can
+ * either be a user visible window (onscreen) or hidden (offscreen).
+ */
+
+#if HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include <gmodule.h>
+#include <stdio.h>
+
+#include "vkwindow.h"
+
+#if GST_VULKAN_HAVE_WINDOW_X11
+#include "x11/vkwindow_x11.h"
+#endif
+#if GST_VULKAN_HAVE_WINDOW_XCB
+#include "xcb/vkwindow_xcb.h"
+#endif
+
+#define GST_CAT_DEFAULT gst_vulkan_window_debug
+GST_DEBUG_CATEGORY (GST_CAT_DEFAULT);
+
+#define gst_vulkan_window_parent_class parent_class
+G_DEFINE_ABSTRACT_TYPE (GstVulkanWindow, gst_vulkan_window, GST_TYPE_OBJECT);
+
+#define GST_VULKAN_WINDOW_GET_PRIVATE(o) \
+  (G_TYPE_INSTANCE_GET_PRIVATE((o), GST_TYPE_VULKAN_WINDOW, GstVulkanWindowPrivate))
+
+struct _GstVulkanWindowPrivate
+{
+  guint surface_width;
+  guint surface_height;
+};
+
+static void gst_vulkan_window_finalize (GObject * object);
+
+typedef struct _GstVulkanDummyWindow
+{
+  GstVulkanWindow parent;
+
+  guintptr handle;
+} GstVulkanDummyWindow;
+
+typedef struct _GstVulkanDummyWindowCass
+{
+  GstVulkanWindowClass parent;
+} GstVulkanDummyWindowClass;
+
+GstVulkanDummyWindow *gst_vulkan_dummy_window_new (void);
+
+enum
+{
+  SIGNAL_0,
+  SIGNAL_CLOSE,
+  SIGNAL_DRAW,
+  LAST_SIGNAL
+};
+
+static guint gst_vulkan_window_signals[LAST_SIGNAL] = { 0 };
+
+static gboolean
+_accum_logical_and (GSignalInvocationHint * ihint, GValue * return_accu,
+    const GValue * handler_return, gpointer data)
+{
+  gboolean val = g_value_get_boolean (handler_return);
+  gboolean val2 = g_value_get_boolean (return_accu);
+
+  g_value_set_boolean (return_accu, val && val2);
+
+  return TRUE;
+}
+
+GQuark
+gst_vulkan_window_error_quark (void)
+{
+  return g_quark_from_static_string ("gst-gl-window-error-quark");
+}
+
+static gboolean
+gst_vulkan_window_default_open (GstVulkanWindow * window, GError ** error)
+{
+  return TRUE;
+}
+
+static void
+gst_vulkan_window_default_close (GstVulkanWindow * window)
+{
+}
+
+static void
+_init_debug (void)
+{
+  static volatile gsize _init = 0;
+
+  if (g_once_init_enter (&_init)) {
+    GST_DEBUG_CATEGORY_INIT (GST_CAT_DEFAULT, "vulkanwindow", 0,
+        "Vulkan Window");
+    g_once_init_leave (&_init, 1);
+  }
+}
+
+static void
+gst_vulkan_window_init (GstVulkanWindow * window)
+{
+  window->priv =
+      G_TYPE_INSTANCE_GET_PRIVATE (window, GST_TYPE_VULKAN_WINDOW,
+      GstVulkanWindowPrivate);
+}
+
+static void
+gst_vulkan_window_class_init (GstVulkanWindowClass * klass)
+{
+  g_type_class_add_private (klass, sizeof (GstVulkanWindowPrivate));
+
+  klass->open = GST_DEBUG_FUNCPTR (gst_vulkan_window_default_open);
+  klass->close = GST_DEBUG_FUNCPTR (gst_vulkan_window_default_close);
+
+  gst_vulkan_window_signals[SIGNAL_CLOSE] =
+      g_signal_new ("close", G_TYPE_FROM_CLASS (klass), G_SIGNAL_RUN_LAST, 0,
+      (GSignalAccumulator) _accum_logical_and, NULL, NULL, G_TYPE_BOOLEAN, 0);
+
+  gst_vulkan_window_signals[SIGNAL_DRAW] =
+      g_signal_new ("draw", G_TYPE_FROM_CLASS (klass), G_SIGNAL_RUN_LAST, 0,
+      NULL, NULL, NULL, G_TYPE_NONE, 0);
+
+  G_OBJECT_CLASS (klass)->finalize = gst_vulkan_window_finalize;
+
+  _init_debug ();
+}
+
+/**
+ * gst_vulkan_window_new:
+ * @display: a #GstGLDisplay
+ *
+ * Returns: (transfer full): a new #GstVulkanWindow using @display's connection
+ *
+ * Since: 1.10
+ */
+GstVulkanWindow *
+gst_vulkan_window_new (GstVulkanDisplay * display)
+{
+  GstVulkanWindow *window = NULL;
+  const gchar *user_choice;
+
+  g_return_val_if_fail (display != NULL, NULL);
+
+  _init_debug ();
+
+  user_choice = g_getenv ("GST_VULKAN_WINDOW");
+  GST_INFO ("creating a window, user choice:%s", user_choice);
+#if GST_VULKAN_HAVE_WINDOW_X11
+  if (!window && (!user_choice || g_strstr_len (user_choice, 3, "x11")))
+    window = GST_VULKAN_WINDOW (gst_vulkan_window_x11_new (display));
+#endif
+#if GST_VULKAN_HAVE_WINDOW_XCB
+  if (!window && (!user_choice || g_strstr_len (user_choice, 3, "xcb")))
+    window = GST_VULKAN_WINDOW (gst_vulkan_window_xcb_new (display));
+#endif
+  if (!window) {
+    /* subclass returned a NULL window */
+    GST_WARNING ("Could not create window. user specified %s, creating dummy"
+        " window", user_choice ? user_choice : "(null)");
+
+    window = GST_VULKAN_WINDOW (gst_vulkan_dummy_window_new ());
+  }
+
+  window->display = gst_object_ref (display);
+
+  return window;
+}
+
+static void
+gst_vulkan_window_finalize (GObject * object)
+{
+  GstVulkanWindow *window = GST_VULKAN_WINDOW (object);
+
+  gst_object_unref (window->display);
+
+  G_OBJECT_CLASS (gst_vulkan_window_parent_class)->finalize (object);
+}
+
+GstVulkanDisplay *
+gst_vulkan_window_get_display (GstVulkanWindow * window)
+{
+  g_return_val_if_fail (GST_IS_VULKAN_WINDOW (window), NULL);
+
+  return gst_object_ref (window->display);
+}
+
+VkSurfaceKHR
+gst_vulkan_window_get_surface (GstVulkanWindow * window, GError ** error)
+{
+  GstVulkanWindowClass *klass;
+
+  g_return_val_if_fail (GST_IS_VULKAN_WINDOW (window), NULL);
+  klass = GST_VULKAN_WINDOW_GET_CLASS (window);
+  g_return_val_if_fail (klass->get_surface != NULL, NULL);
+
+  return klass->get_surface (window, error);
+}
+
+gboolean
+gst_vulkan_window_get_presentation_support (GstVulkanWindow * window,
+    GstVulkanDevice * device, guint32 queue_family_idx)
+{
+  GstVulkanWindowClass *klass;
+
+  g_return_val_if_fail (GST_IS_VULKAN_WINDOW (window), FALSE);
+  klass = GST_VULKAN_WINDOW_GET_CLASS (window);
+  g_return_val_if_fail (klass->get_presentation_support != NULL, FALSE);
+
+  return klass->get_presentation_support (window, device, queue_family_idx);
+}
+
+gboolean
+gst_vulkan_window_open (GstVulkanWindow * window, GError ** error)
+{
+  GstVulkanWindowClass *klass;
+
+  g_return_val_if_fail (GST_IS_VULKAN_WINDOW (window), FALSE);
+  klass = GST_VULKAN_WINDOW_GET_CLASS (window);
+  g_return_val_if_fail (klass->open != NULL, FALSE);
+
+  return klass->open (window, error);
+}
+
+void
+gst_vulkan_window_close (GstVulkanWindow * window)
+{
+  GstVulkanWindowClass *klass;
+  gboolean to_close;
+
+  g_return_if_fail (GST_IS_VULKAN_WINDOW (window));
+  klass = GST_VULKAN_WINDOW_GET_CLASS (window);
+  g_return_if_fail (klass->close != NULL);
+
+  g_signal_emit (window, gst_vulkan_window_signals[SIGNAL_CLOSE], 0, &to_close);
+
+  if (to_close)
+    klass->close (window);
+}
+
+void
+gst_vulkan_window_resize (GstVulkanWindow * window, gint width, gint height)
+{
+  g_return_if_fail (GST_IS_VULKAN_WINDOW (window));
+
+  window->priv->surface_width = width;
+  window->priv->surface_height = height;
+
+  /* XXX: possibly queue a resize/redraw */
+}
+
+void
+gst_vulkan_window_redraw (GstVulkanWindow * window)
+{
+  g_return_if_fail (GST_IS_VULKAN_WINDOW (window));
+
+  g_signal_emit (window, gst_vulkan_window_signals[SIGNAL_DRAW], 0);
+}
+
+GType gst_vulkan_dummy_window_get_type (void);
+G_DEFINE_TYPE (GstVulkanDummyWindow, gst_vulkan_dummy_window,
+    GST_TYPE_VULKAN_WINDOW);
+
+static void
+gst_vulkan_dummy_window_class_init (GstVulkanDummyWindowClass * klass)
+{
+}
+
+static void
+gst_vulkan_dummy_window_init (GstVulkanDummyWindow * dummy)
+{
+  dummy->handle = 0;
+}
+
+GstVulkanDummyWindow *
+gst_vulkan_dummy_window_new (void)
+{
+  return g_object_new (gst_vulkan_dummy_window_get_type (), NULL);
+}
diff --git a/ext/vulkan/vkwindow.h b/ext/vulkan/vkwindow.h
new file mode 100644
index 0000000..58be80a
--- /dev/null
+++ b/ext/vulkan/vkwindow.h
@@ -0,0 +1,115 @@
+/*
+ * GStreamer
+ * Copyright (C) 2008 Julien Isorce <julien.isorce@gmail.com>
+ * Copyright (C) 2012 Matthew Waters <ystreet00@gmail.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifndef __GST_VULKAN_WINDOW_H__
+#define __GST_VULKAN_WINDOW_H__
+
+#include <gst/gst.h>
+
+#include <vk.h>
+
+G_BEGIN_DECLS
+
+#define GST_TYPE_VULKAN_WINDOW         (gst_vulkan_window_get_type())
+#define GST_VULKAN_WINDOW(o)           (G_TYPE_CHECK_INSTANCE_CAST((o), GST_TYPE_VULKAN_WINDOW, GstVulkanWindow))
+#define GST_VULKAN_WINDOW_CLASS(k)     (G_TYPE_CHECK_CLASS_CAST((k), GST_TYPE_VULKAN_WINDOW, GstVulkanWindowClass))
+#define GST_IS_VULKAN_WINDOW(o)        (G_TYPE_CHECK_INSTANCE_TYPE((o), GST_TYPE_VULKAN_WINDOW))
+#define GST_IS_VULKAN_WINDOW_CLASS(k)  (G_TYPE_CHECK_CLASS_TYPE((k), GST_TYPE_VULKAN_WINDOW))
+#define GST_VULKAN_WINDOW_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS((o), GST_TYPE_VULKAN_WINDOW, GstVulkanWindowClass))
+GType gst_vulkan_window_get_type     (void);
+
+#define GST_VULKAN_WINDOW_LOCK(w) g_mutex_lock(&GST_VULKAN_WINDOW(w)->lock)
+#define GST_VULKAN_WINDOW_UNLOCK(w) g_mutex_unlock(&GST_VULKAN_WINDOW(w)->lock)
+#define GST_VULKAN_WINDOW_GET_LOCK(w) (&GST_VULKAN_WINDOW(w)->lock)
+
+#define GST_VULKAN_WINDOW_ERROR (gst_vulkan_window_error_quark ())
+GQuark gst_vulkan_window_error_quark (void);
+
+typedef enum
+{
+  GST_VULKAN_WINDOW_ERROR_FAILED,
+  GST_VULKAN_WINDOW_ERROR_OLD_LIBS,
+  GST_VULKAN_WINDOW_ERROR_RESOURCE_UNAVAILABLE,
+} GstVulkanWindowError;
+
+/**
+ * GstVulkanWindow:
+ *
+ * #GstVulkanWindow is an opaque struct and should only be accessed through the
+ * provided api.
+ */
+struct _GstVulkanWindow {
+  /*< private >*/
+  GstObject parent;
+
+  GstVulkanDisplay       *display;
+
+  GMutex                  lock;
+
+  GstVulkanWindowPrivate *priv;
+
+  gpointer                _reserved[GST_PADDING];
+};
+
+/**
+ * GstVulkanWindowClass:
+ * @parent_class: Parent class
+ * @open: open the connection to the display
+ * @close: close the connection to the display
+ */
+struct _GstVulkanWindowClass {
+  GstObjectClass parent_class;
+
+  gboolean      (*open)                         (GstVulkanWindow *window,
+                                                 GError **error);
+  void          (*close)                        (GstVulkanWindow *window);
+
+  VkSurfaceKHR  (*get_surface)                  (GstVulkanWindow *window,
+                                                 GError **error);
+  gboolean      (*get_presentation_support)     (GstVulkanWindow *window,
+                                                 GstVulkanDevice *device,
+                                                 guint32 queue_family_idx);
+
+  /*< private >*/
+  gpointer _reserved[GST_PADDING];
+};
+
+GstVulkanWindow *  gst_vulkan_window_new                            (GstVulkanDisplay *display);
+
+GstVulkanDisplay * gst_vulkan_window_get_display                    (GstVulkanWindow *window);
+VkSurfaceKHR       gst_vulkan_window_get_surface                    (GstVulkanWindow *window,
+                                                                     GError **error);
+gboolean           gst_vulkan_window_get_presentation_support       (GstVulkanWindow *window,
+                                                                     GstVulkanDevice *device,
+                                                                     guint32 queue_family_idx);
+
+gboolean           gst_vulkan_window_open                           (GstVulkanWindow *window,
+                                                                     GError ** error);
+void               gst_vulkan_window_close                          (GstVulkanWindow *window);
+
+void               gst_vulkan_window_resize                         (GstVulkanWindow *window,
+                                                                     gint width,
+                                                                     gint height);
+void               gst_vulkan_window_redraw                         (GstVulkanWindow *window);
+
+G_END_DECLS
+
+#endif /* __GST_VULKAN_WINDOW_H__ */
diff --git a/ext/vulkan/xcb/Makefile.am b/ext/vulkan/xcb/Makefile.am
new file mode 100644
index 0000000..7debcff
--- /dev/null
+++ b/ext/vulkan/xcb/Makefile.am
@@ -0,0 +1,29 @@
+## Process this file with automake to produce Makefile.in
+
+noinst_LTLIBRARIES = libgstvulkan-xcb.la
+
+libgstvulkan_xcb_la_SOURCES = \
+	vkdisplay_xcb.c \
+	vkwindow_xcb.c \
+	xcb_event_source.c
+
+noinst_HEADERS = \
+	vkdisplay_xcb.h \
+	vkwindow_xcb.h \
+	xcb_event_source.h
+
+libgstvulkan_xcb_la_CFLAGS = \
+	-I$(top_srcdir)/gst-libs \
+	-I$(top_srcdir)/ext/vulkan \
+	-I$(top_builddir)/gst-libs \
+	$(GST_PLUGINS_BASE_CFLAGS) \
+	$(GST_BASE_CFLAGS) \
+	$(GST_CFLAGS) \
+	$(XCB_CFLAGS)
+
+libgstvulkan_xcb_la_LIBADD = \
+	$(XCB_LIBS)
+
+libgstvulkan_xcb_la_LDFLAGS = \
+	$(GST_LIB_LDFLAGS) \
+	$(GST_ALL_LDFLAGS)
diff --git a/gst/liveadder/Makefile.in b/ext/vulkan/xcb/Makefile.in
similarity index 80%
copy from gst/liveadder/Makefile.in
copy to ext/vulkan/xcb/Makefile.in
index ba9e5a2..2e9729f 100644
--- a/gst/liveadder/Makefile.in
+++ b/ext/vulkan/xcb/Makefile.in
@@ -90,7 +90,7 @@
 build_triplet = @build@
 host_triplet = @host@
 target_triplet = @target@
-subdir = gst/liveadder
+subdir = ext/vulkan/xcb
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
 am__aclocal_m4_deps = $(top_srcdir)/common/m4/as-ac-expand.m4 \
 	$(top_srcdir)/common/m4/as-auto-alt.m4 \
@@ -116,16 +116,15 @@
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
 	$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
-	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gsettings.m4 \
-	$(top_srcdir)/m4/gst-fionread.m4 $(top_srcdir)/m4/gst-sdl.m4 \
-	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
-	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
-	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libgcrypt.m4 \
-	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
-	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
-	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
-	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
-	$(top_srcdir)/configure.ac
+	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gst-fionread.m4 \
+	$(top_srcdir)/m4/gst-sdl.m4 $(top_srcdir)/m4/iconv.m4 \
+	$(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \
+	$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
+	$(top_srcdir)/m4/libgcrypt.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
+	$(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \
@@ -134,48 +133,21 @@
 CONFIG_HEADER = $(top_builddir)/config.h
 CONFIG_CLEAN_FILES =
 CONFIG_CLEAN_VPATH_FILES =
-am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
-am__vpath_adj = case $$p in \
-    $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
-    *) f=$$p;; \
-  esac;
-am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
-am__install_max = 40
-am__nobase_strip_setup = \
-  srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
-am__nobase_strip = \
-  for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
-am__nobase_list = $(am__nobase_strip_setup); \
-  for p in $$list; do echo "$$p $$p"; done | \
-  sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
-  $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
-    if (++n[$$2] == $(am__install_max)) \
-      { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
-    END { for (dir in files) print dir, files[dir] }'
-am__base_list = \
-  sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
-  sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
-am__uninstall_files_from_dir = { \
-  test -z "$$files" \
-    || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
-    || { echo " ( cd '$$dir' && rm -f" $$files ")"; \
-         $(am__cd) "$$dir" && rm -f $$files; }; \
-  }
-am__installdirs = "$(DESTDIR)$(plugindir)"
-LTLIBRARIES = $(plugin_LTLIBRARIES)
+LTLIBRARIES = $(noinst_LTLIBRARIES)
 am__DEPENDENCIES_1 =
-libgstliveadder_la_DEPENDENCIES = $(am__DEPENDENCIES_1) \
-	$(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1)
-am_libgstliveadder_la_OBJECTS = libgstliveadder_la-liveadder.lo
-libgstliveadder_la_OBJECTS = $(am_libgstliveadder_la_OBJECTS)
+libgstvulkan_xcb_la_DEPENDENCIES = $(am__DEPENDENCIES_1)
+am_libgstvulkan_xcb_la_OBJECTS = libgstvulkan_xcb_la-vkdisplay_xcb.lo \
+	libgstvulkan_xcb_la-vkwindow_xcb.lo \
+	libgstvulkan_xcb_la-xcb_event_source.lo
+libgstvulkan_xcb_la_OBJECTS = $(am_libgstvulkan_xcb_la_OBJECTS)
 AM_V_lt = $(am__v_lt_@AM_V@)
 am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
 am__v_lt_0 = --silent
 am__v_lt_1 = 
-libgstliveadder_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
-	$(libgstliveadder_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link \
-	$(CCLD) $(libgstliveadder_la_CFLAGS) $(CFLAGS) \
-	$(libgstliveadder_la_LDFLAGS) $(LDFLAGS) -o $@
+libgstvulkan_xcb_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
+	$(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
+	$(libgstvulkan_xcb_la_CFLAGS) $(CFLAGS) \
+	$(libgstvulkan_xcb_la_LDFLAGS) $(LDFLAGS) -o $@
 AM_V_P = $(am__v_P_@AM_V@)
 am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
 am__v_P_0 = false
@@ -210,8 +182,8 @@
 am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@)
 am__v_CCLD_0 = @echo "  CCLD    " $@;
 am__v_CCLD_1 = 
-SOURCES = $(libgstliveadder_la_SOURCES)
-DIST_SOURCES = $(libgstliveadder_la_SOURCES)
+SOURCES = $(libgstvulkan_xcb_la_SOURCES)
+DIST_SOURCES = $(libgstvulkan_xcb_la_SOURCES)
 am__can_run_installinfo = \
   case $$AM_UPDATE_INFO_DIR in \
     n|no|NO) false;; \
@@ -274,6 +246,8 @@
 CLUTTER_X11_LIBS = @CLUTTER_X11_LIBS@
 CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
+CUDA_CFLAGS = @CUDA_CFLAGS@
+CUDA_LIBS = @CUDA_LIBS@
 CURL_CFLAGS = @CURL_CFLAGS@
 CURL_LIBS = @CURL_LIBS@
 CXX = @CXX@
@@ -311,6 +285,8 @@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
+EGL_CFLAGS = @EGL_CFLAGS@
+EGL_LIBS = @EGL_LIBS@
 EGREP = @EGREP@
 ERROR_CFLAGS = @ERROR_CFLAGS@
 ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
@@ -319,7 +295,6 @@
 EXIF_CFLAGS = @EXIF_CFLAGS@
 EXIF_LIBS = @EXIF_LIBS@
 FAAC_LIBS = @FAAC_LIBS@
-FAAD_IS_NEAAC = @FAAD_IS_NEAAC@
 FAAD_LIBS = @FAAD_LIBS@
 FFLAGS = @FFLAGS@
 FGREP = @FGREP@
@@ -338,8 +313,9 @@
 GIO_LIBS = @GIO_LIBS@
 GIO_UNIX_CFLAGS = @GIO_UNIX_CFLAGS@
 GIO_UNIX_LIBS = @GIO_UNIX_LIBS@
+GLES2_CFLAGS = @GLES2_CFLAGS@
+GLES2_LIBS = @GLES2_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
-GLIB_COMPILE_SCHEMAS = @GLIB_COMPILE_SCHEMAS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
@@ -356,16 +332,17 @@
 GMODULE_NO_EXPORT_LIBS = @GMODULE_NO_EXPORT_LIBS@
 GMSGFMT = @GMSGFMT@
 GMSGFMT_015 = @GMSGFMT_015@
+GNUSTL_CFLAGS = @GNUSTL_CFLAGS@
+GNUSTL_LIBS = @GNUSTL_LIBS@
 GRAPHENE_CFLAGS = @GRAPHENE_CFLAGS@
 GRAPHENE_LIBS = @GRAPHENE_LIBS@
 GREP = @GREP@
-GSETTINGS_CFLAGS = @GSETTINGS_CFLAGS@
-GSETTINGS_DISABLE_SCHEMAS_COMPILE = @GSETTINGS_DISABLE_SCHEMAS_COMPILE@
-GSETTINGS_LIBS = @GSETTINGS_LIBS@
 GSM_LIBS = @GSM_LIBS@
 GSTPB_PLUGINS_DIR = @GSTPB_PLUGINS_DIR@
 GSTPB_PREFIX = @GSTPB_PREFIX@
 GST_AGE = @GST_AGE@
+GST_ALLOCATORS_CFLAGS = @GST_ALLOCATORS_CFLAGS@
+GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
 GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
 GST_API_VERSION = @GST_API_VERSION@
 GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
@@ -391,6 +368,8 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PBUTILS_CFLAGS = @GST_PBUTILS_CFLAGS@
+GST_PBUTILS_LIBS = @GST_PBUTILS_LIBS@
 GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BAD_CFLAGS = @GST_PLUGINS_BAD_CFLAGS@
@@ -416,6 +395,8 @@
 GST_PREFIX = @GST_PREFIX@
 GST_REVISION = @GST_REVISION@
 GST_TOOLS_DIR = @GST_TOOLS_DIR@
+GST_VIDEO_CFLAGS = @GST_VIDEO_CFLAGS@
+GST_VIDEO_LIBS = @GST_VIDEO_LIBS@
 GTK3_CFLAGS = @GTK3_CFLAGS@
 GTK3_GL_CFLAGS = @GTK3_GL_CFLAGS@
 GTK3_GL_LIBS = @GTK3_GL_LIBS@
@@ -517,6 +498,7 @@
 LTLIBICONV = @LTLIBICONV@
 LTLIBINTL = @LTLIBINTL@
 LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
 MANIFEST_TOOL = @MANIFEST_TOOL@
@@ -530,8 +512,6 @@
 MODPLUG_LIBS = @MODPLUG_LIBS@
 MPEG2ENC_CFLAGS = @MPEG2ENC_CFLAGS@
 MPEG2ENC_LIBS = @MPEG2ENC_LIBS@
-MPG123_CFLAGS = @MPG123_CFLAGS@
-MPG123_LIBS = @MPG123_LIBS@
 MPLEX_CFLAGS = @MPLEX_CFLAGS@
 MPLEX_LDFLAGS = @MPLEX_LDFLAGS@
 MPLEX_LIBS = @MPLEX_LIBS@
@@ -547,6 +527,8 @@
 NETTLE_LIBS = @NETTLE_LIBS@
 NM = @NM@
 NMEDIT = @NMEDIT@
+NVENCODE_CFLAGS = @NVENCODE_CFLAGS@
+NVENCODE_LIBS = @NVENCODE_LIBS@
 OBJC = @OBJC@
 OBJCDEPMODE = @OBJCDEPMODE@
 OBJCFLAGS = @OBJCFLAGS@
@@ -604,16 +586,18 @@
 PYTHON_PLATFORM = @PYTHON_PLATFORM@
 PYTHON_PREFIX = @PYTHON_PREFIX@
 PYTHON_VERSION = @PYTHON_VERSION@
+QT_ANDROID_CFLAGS = @QT_ANDROID_CFLAGS@
+QT_ANDROID_LIBS = @QT_ANDROID_LIBS@
 QT_CFLAGS = @QT_CFLAGS@
 QT_LIBS = @QT_LIBS@
+QT_MAC_CFLAGS = @QT_MAC_CFLAGS@
+QT_MAC_LIBS = @QT_MAC_LIBS@
 QT_WAYLAND_CFLAGS = @QT_WAYLAND_CFLAGS@
 QT_WAYLAND_LIBS = @QT_WAYLAND_LIBS@
 QT_X11_CFLAGS = @QT_X11_CFLAGS@
 QT_X11_LIBS = @QT_X11_LIBS@
 RANLIB = @RANLIB@
 RCC = @RCC@
-RSVG_2_36_2_CFLAGS = @RSVG_2_36_2_CFLAGS@
-RSVG_2_36_2_LIBS = @RSVG_2_36_2_LIBS@
 RSVG_CFLAGS = @RSVG_CFLAGS@
 RSVG_LIBS = @RSVG_LIBS@
 RTMP_CFLAGS = @RTMP_CFLAGS@
@@ -665,6 +649,7 @@
 VOAACENC_LIBS = @VOAACENC_LIBS@
 VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
 VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VULKAN_LIBS = @VULKAN_LIBS@
 WARNING_CFLAGS = @WARNING_CFLAGS@
 WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
 WARNING_OBJCFLAGS = @WARNING_OBJCFLAGS@
@@ -675,6 +660,7 @@
 WAYLAND_LIBS = @WAYLAND_LIBS@
 WEBP_CFLAGS = @WEBP_CFLAGS@
 WEBP_LIBS = @WEBP_LIBS@
+WGET = @WGET@
 WILDMIDI_CFLAGS = @WILDMIDI_CFLAGS@
 WILDMIDI_LIBS = @WILDMIDI_LIBS@
 WINKS_LIBS = @WINKS_LIBS@
@@ -684,6 +670,8 @@
 X11_LIBS = @X11_LIBS@
 X265_CFLAGS = @X265_CFLAGS@
 X265_LIBS = @X265_LIBS@
+XCB_CFLAGS = @XCB_CFLAGS@
+XCB_LIBS = @XCB_LIBS@
 XCOMPOSITE_CFLAGS = @XCOMPOSITE_CFLAGS@
 XCOMPOSITE_LIBS = @XCOMPOSITE_LIBS@
 XGETTEXT = @XGETTEXT@
@@ -721,7 +709,6 @@
 docdir = @docdir@
 dvidir = @dvidir@
 exec_prefix = @exec_prefix@
-gsettingsschemadir = @gsettingsschemadir@
 host = @host@
 host_alias = @host_alias@
 host_cpu = @host_cpu@
@@ -761,16 +748,33 @@
 top_builddir = @top_builddir@
 top_srcdir = @top_srcdir@
 wayland_scanner = @wayland_scanner@
-plugin_LTLIBRARIES = libgstliveadder.la
-libgstliveadder_la_SOURCES = liveadder.c
-libgstliveadder_la_CFLAGS = $(GST_PLUGINS_BAD_CFLAGS) $(GST_PLUGINS_BASE_CFLAGS) $(GST_CFLAGS)
-libgstliveadder_la_LIBADD = \
-	$(GST_PLUGINS_BASE_LIBS) -lgstaudio-@GST_API_VERSION@ \
-	$(GST_BASE_LIBS) $(GST_LIBS)
+noinst_LTLIBRARIES = libgstvulkan-xcb.la
+libgstvulkan_xcb_la_SOURCES = \
+	vkdisplay_xcb.c \
+	vkwindow_xcb.c \
+	xcb_event_source.c
 
-libgstliveadder_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS)
-libgstliveadder_la_LIBTOOLFLAGS = $(GST_PLUGIN_LIBTOOLFLAGS)
-noinst_HEADERS = liveadder.h
+noinst_HEADERS = \
+	vkdisplay_xcb.h \
+	vkwindow_xcb.h \
+	xcb_event_source.h
+
+libgstvulkan_xcb_la_CFLAGS = \
+	-I$(top_srcdir)/gst-libs \
+	-I$(top_srcdir)/ext/vulkan \
+	-I$(top_builddir)/gst-libs \
+	$(GST_PLUGINS_BASE_CFLAGS) \
+	$(GST_BASE_CFLAGS) \
+	$(GST_CFLAGS) \
+	$(XCB_CFLAGS)
+
+libgstvulkan_xcb_la_LIBADD = \
+	$(XCB_LIBS)
+
+libgstvulkan_xcb_la_LDFLAGS = \
+	$(GST_LIB_LDFLAGS) \
+	$(GST_ALL_LDFLAGS)
+
 all: all-am
 
 .SUFFIXES:
@@ -784,9 +788,9 @@
 	      exit 1;; \
 	  esac; \
 	done; \
-	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu gst/liveadder/Makefile'; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu ext/vulkan/xcb/Makefile'; \
 	$(am__cd) $(top_srcdir) && \
-	  $(AUTOMAKE) --gnu gst/liveadder/Makefile
+	  $(AUTOMAKE) --gnu ext/vulkan/xcb/Makefile
 Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
 	@case '$?' in \
 	  *config.status*) \
@@ -805,33 +809,9 @@
 	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
 $(am__aclocal_m4_deps):
 
-install-pluginLTLIBRARIES: $(plugin_LTLIBRARIES)
-	@$(NORMAL_INSTALL)
-	@list='$(plugin_LTLIBRARIES)'; test -n "$(plugindir)" || list=; \
-	list2=; for p in $$list; do \
-	  if test -f $$p; then \
-	    list2="$$list2 $$p"; \
-	  else :; fi; \
-	done; \
-	test -z "$$list2" || { \
-	  echo " $(MKDIR_P) '$(DESTDIR)$(plugindir)'"; \
-	  $(MKDIR_P) "$(DESTDIR)$(plugindir)" || exit 1; \
-	  echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(plugindir)'"; \
-	  $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(plugindir)"; \
-	}
-
-uninstall-pluginLTLIBRARIES:
-	@$(NORMAL_UNINSTALL)
-	@list='$(plugin_LTLIBRARIES)'; test -n "$(plugindir)" || list=; \
-	for p in $$list; do \
-	  $(am__strip_dir) \
-	  echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(plugindir)/$$f'"; \
-	  $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(plugindir)/$$f"; \
-	done
-
-clean-pluginLTLIBRARIES:
-	-test -z "$(plugin_LTLIBRARIES)" || rm -f $(plugin_LTLIBRARIES)
-	@list='$(plugin_LTLIBRARIES)'; \
+clean-noinstLTLIBRARIES:
+	-test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES)
+	@list='$(noinst_LTLIBRARIES)'; \
 	locs=`for p in $$list; do echo $$p; done | \
 	      sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \
 	      sort -u`; \
@@ -840,8 +820,8 @@
 	  rm -f $${locs}; \
 	}
 
-libgstliveadder.la: $(libgstliveadder_la_OBJECTS) $(libgstliveadder_la_DEPENDENCIES) $(EXTRA_libgstliveadder_la_DEPENDENCIES) 
-	$(AM_V_CCLD)$(libgstliveadder_la_LINK) -rpath $(plugindir) $(libgstliveadder_la_OBJECTS) $(libgstliveadder_la_LIBADD) $(LIBS)
+libgstvulkan-xcb.la: $(libgstvulkan_xcb_la_OBJECTS) $(libgstvulkan_xcb_la_DEPENDENCIES) $(EXTRA_libgstvulkan_xcb_la_DEPENDENCIES) 
+	$(AM_V_CCLD)$(libgstvulkan_xcb_la_LINK)  $(libgstvulkan_xcb_la_OBJECTS) $(libgstvulkan_xcb_la_LIBADD) $(LIBS)
 
 mostlyclean-compile:
 	-rm -f *.$(OBJEXT)
@@ -849,7 +829,9 @@
 distclean-compile:
 	-rm -f *.tab.c
 
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstliveadder_la-liveadder.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstvulkan_xcb_la-vkdisplay_xcb.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstvulkan_xcb_la-vkwindow_xcb.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstvulkan_xcb_la-xcb_event_source.Plo@am__quote@
 
 .c.o:
 @am__fastdepCC_TRUE@	$(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\
@@ -875,12 +857,26 @@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $<
 
-libgstliveadder_la-liveadder.lo: liveadder.c
-@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstliveadder_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstliveadder_la_CFLAGS) $(CFLAGS) -MT libgstliveadder_la-liveadder.lo -MD -MP -MF $(DEPDIR)/libgstliveadder_la-liveadder.Tpo -c -o libgstliveadder_la-liveadder.lo `test -f 'liveadder.c' || echo '$(srcdir)/'`liveadder.c
-@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstliveadder_la-liveadder.Tpo $(DEPDIR)/libgstliveadder_la-liveadder.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='liveadder.c' object='libgstliveadder_la-liveadder.lo' libtool=yes @AMDEPBACKSLASH@
+libgstvulkan_xcb_la-vkdisplay_xcb.lo: vkdisplay_xcb.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstvulkan_xcb_la_CFLAGS) $(CFLAGS) -MT libgstvulkan_xcb_la-vkdisplay_xcb.lo -MD -MP -MF $(DEPDIR)/libgstvulkan_xcb_la-vkdisplay_xcb.Tpo -c -o libgstvulkan_xcb_la-vkdisplay_xcb.lo `test -f 'vkdisplay_xcb.c' || echo '$(srcdir)/'`vkdisplay_xcb.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstvulkan_xcb_la-vkdisplay_xcb.Tpo $(DEPDIR)/libgstvulkan_xcb_la-vkdisplay_xcb.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='vkdisplay_xcb.c' object='libgstvulkan_xcb_la-vkdisplay_xcb.lo' libtool=yes @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstliveadder_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstliveadder_la_CFLAGS) $(CFLAGS) -c -o libgstliveadder_la-liveadder.lo `test -f 'liveadder.c' || echo '$(srcdir)/'`liveadder.c
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstvulkan_xcb_la_CFLAGS) $(CFLAGS) -c -o libgstvulkan_xcb_la-vkdisplay_xcb.lo `test -f 'vkdisplay_xcb.c' || echo '$(srcdir)/'`vkdisplay_xcb.c
+
+libgstvulkan_xcb_la-vkwindow_xcb.lo: vkwindow_xcb.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstvulkan_xcb_la_CFLAGS) $(CFLAGS) -MT libgstvulkan_xcb_la-vkwindow_xcb.lo -MD -MP -MF $(DEPDIR)/libgstvulkan_xcb_la-vkwindow_xcb.Tpo -c -o libgstvulkan_xcb_la-vkwindow_xcb.lo `test -f 'vkwindow_xcb.c' || echo '$(srcdir)/'`vkwindow_xcb.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstvulkan_xcb_la-vkwindow_xcb.Tpo $(DEPDIR)/libgstvulkan_xcb_la-vkwindow_xcb.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='vkwindow_xcb.c' object='libgstvulkan_xcb_la-vkwindow_xcb.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstvulkan_xcb_la_CFLAGS) $(CFLAGS) -c -o libgstvulkan_xcb_la-vkwindow_xcb.lo `test -f 'vkwindow_xcb.c' || echo '$(srcdir)/'`vkwindow_xcb.c
+
+libgstvulkan_xcb_la-xcb_event_source.lo: xcb_event_source.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstvulkan_xcb_la_CFLAGS) $(CFLAGS) -MT libgstvulkan_xcb_la-xcb_event_source.lo -MD -MP -MF $(DEPDIR)/libgstvulkan_xcb_la-xcb_event_source.Tpo -c -o libgstvulkan_xcb_la-xcb_event_source.lo `test -f 'xcb_event_source.c' || echo '$(srcdir)/'`xcb_event_source.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstvulkan_xcb_la-xcb_event_source.Tpo $(DEPDIR)/libgstvulkan_xcb_la-xcb_event_source.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='xcb_event_source.c' object='libgstvulkan_xcb_la-xcb_event_source.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstvulkan_xcb_la_CFLAGS) $(CFLAGS) -c -o libgstvulkan_xcb_la-xcb_event_source.lo `test -f 'xcb_event_source.c' || echo '$(srcdir)/'`xcb_event_source.c
 
 mostlyclean-libtool:
 	-rm -f *.lo
@@ -974,9 +970,6 @@
 check: check-am
 all-am: Makefile $(LTLIBRARIES) $(HEADERS)
 installdirs:
-	for dir in "$(DESTDIR)$(plugindir)"; do \
-	  test -z "$$dir" || $(MKDIR_P) "$$dir"; \
-	done
 install: install-am
 install-exec: install-exec-am
 install-data: install-data-am
@@ -1009,7 +1002,7 @@
 	@echo "it deletes files that may require special tools to rebuild."
 clean: clean-am
 
-clean-am: clean-generic clean-libtool clean-pluginLTLIBRARIES \
+clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \
 	mostlyclean-am
 
 distclean: distclean-am
@@ -1030,7 +1023,7 @@
 
 info-am:
 
-install-data-am: install-pluginLTLIBRARIES
+install-data-am:
 
 install-dvi: install-dvi-am
 
@@ -1076,24 +1069,23 @@
 
 ps-am:
 
-uninstall-am: uninstall-pluginLTLIBRARIES
+uninstall-am:
 
 .MAKE: install-am install-strip
 
 .PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \
-	clean-libtool clean-pluginLTLIBRARIES cscopelist-am ctags \
+	clean-libtool clean-noinstLTLIBRARIES cscopelist-am ctags \
 	ctags-am distclean distclean-compile distclean-generic \
 	distclean-libtool distclean-tags distdir dvi dvi-am html \
 	html-am info info-am install install-am install-data \
 	install-data-am install-dvi install-dvi-am install-exec \
 	install-exec-am install-html install-html-am install-info \
 	install-info-am install-man install-pdf install-pdf-am \
-	install-pluginLTLIBRARIES install-ps install-ps-am \
-	install-strip installcheck installcheck-am installdirs \
-	maintainer-clean maintainer-clean-generic mostlyclean \
-	mostlyclean-compile mostlyclean-generic mostlyclean-libtool \
-	pdf pdf-am ps ps-am tags tags-am uninstall uninstall-am \
-	uninstall-pluginLTLIBRARIES
+	install-ps install-ps-am install-strip installcheck \
+	installcheck-am installdirs maintainer-clean \
+	maintainer-clean-generic mostlyclean mostlyclean-compile \
+	mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+	tags tags-am uninstall uninstall-am
 
 .PRECIOUS: Makefile
 
diff --git a/ext/vulkan/xcb/vkdisplay_xcb.c b/ext/vulkan/xcb/vkdisplay_xcb.c
new file mode 100644
index 0000000..763f5d5
--- /dev/null
+++ b/ext/vulkan/xcb/vkdisplay_xcb.c
@@ -0,0 +1,146 @@
+/*
+ * GStreamer
+ * Copyright (C) 2015 Matthew Waters <matthew@centricular.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include "vkdisplay_xcb.h"
+#include "xcb_event_source.h"
+
+#define GST_CAT_DEFAULT gst_vulkan_display_debug
+GST_DEBUG_CATEGORY_STATIC (gst_vulkan_display_debug);
+
+G_DEFINE_TYPE (GstVulkanDisplayXCB, gst_vulkan_display_xcb,
+    GST_TYPE_VULKAN_DISPLAY);
+
+static void gst_vulkan_display_xcb_finalize (GObject * object);
+static gpointer gst_vulkan_display_xcb_get_handle (GstVulkanDisplay * display);
+
+static void
+gst_vulkan_display_xcb_class_init (GstVulkanDisplayXCBClass * klass)
+{
+  GST_VULKAN_DISPLAY_CLASS (klass)->get_handle =
+      GST_DEBUG_FUNCPTR (gst_vulkan_display_xcb_get_handle);
+
+  G_OBJECT_CLASS (klass)->finalize = gst_vulkan_display_xcb_finalize;
+}
+
+static void
+gst_vulkan_display_xcb_init (GstVulkanDisplayXCB * display_xcb)
+{
+  GstVulkanDisplay *display = (GstVulkanDisplay *) display_xcb;
+
+  display->type = GST_VULKAN_DISPLAY_TYPE_XCB;
+  display_xcb->foreign_display = FALSE;
+}
+
+static void
+gst_vulkan_display_xcb_finalize (GObject * object)
+{
+  GstVulkanDisplayXCB *display_xcb = GST_VULKAN_DISPLAY_XCB (object);
+
+  G_OBJECT_CLASS (gst_vulkan_display_xcb_parent_class)->finalize (object);
+
+  if (!display_xcb->foreign_display && display_xcb->connection)
+    xcb_disconnect (display_xcb->connection);
+  display_xcb->connection = NULL;
+}
+
+static xcb_screen_t *
+_get_screen_from_connection (xcb_connection_t * connection, int screen_no)
+{
+  const xcb_setup_t *setup;
+  xcb_screen_iterator_t iter;
+
+  setup = xcb_get_setup (connection);
+  iter = xcb_setup_roots_iterator (setup);
+  while (screen_no-- > 0)
+    xcb_screen_next (&iter);
+
+  return iter.data;
+}
+
+/**
+ * gst_vulkan_display_xcb_new:
+ * @name: (allow-none): a display name
+ *
+ * Create a new #GstVulkanDisplayXCB from the xcb display name.  See XOpenDisplay()
+ * for details on what is a valid name.
+ *
+ * Returns: (transfer full): a new #GstVulkanDisplayXCB or %NULL
+ */
+GstVulkanDisplayXCB *
+gst_vulkan_display_xcb_new (const gchar * name)
+{
+  xcb_connection_t *connection;
+  GstVulkanDisplayXCB *ret;
+  int screen_no = 0;
+
+  GST_DEBUG_CATEGORY_GET (gst_vulkan_display_debug, "gldisplay");
+
+  connection = xcb_connect (NULL, &screen_no);
+  if (connection == NULL || xcb_connection_has_error (connection)) {
+    GST_ERROR ("Failed to open XCB display connection with name, \'%s\'", name);
+    return NULL;
+  }
+
+  ret = gst_vulkan_display_xcb_new_with_connection (connection, screen_no);
+  GST_VULKAN_DISPLAY (ret)->event_source = xcb_event_source_new (ret);
+  g_source_attach (GST_VULKAN_DISPLAY (ret)->event_source,
+      GST_VULKAN_DISPLAY (ret)->main_context);
+  ret->foreign_display = FALSE;
+
+  return ret;
+}
+
+/**
+ * gst_vulkan_display_xcb_new_with_connection:
+ * @display: an existing, xcb display
+ *
+ * Creates a new display connection from a XCB Display.
+ *
+ * Returns: (transfer full): a new #GstVulkanDisplayXCB
+ */
+GstVulkanDisplayXCB *
+gst_vulkan_display_xcb_new_with_connection (xcb_connection_t * connection,
+    int screen_no)
+{
+  GstVulkanDisplayXCB *ret;
+
+  g_return_val_if_fail (connection != NULL, NULL);
+
+  GST_DEBUG_CATEGORY_GET (gst_vulkan_display_debug, "gldisplay");
+
+  ret = g_object_new (GST_TYPE_VULKAN_DISPLAY_XCB, NULL);
+
+  ret->connection = connection;
+  ret->screen = _get_screen_from_connection (connection, screen_no);
+  ret->root_window = ret->screen->root;
+  ret->foreign_display = TRUE;
+
+  return ret;
+}
+
+static gpointer
+gst_vulkan_display_xcb_get_handle (GstVulkanDisplay * display)
+{
+  return (gpointer) GST_VULKAN_DISPLAY_XCB_CONNECTION (display);
+}
diff --git a/ext/vulkan/xcb/vkdisplay_xcb.h b/ext/vulkan/xcb/vkdisplay_xcb.h
new file mode 100644
index 0000000..7c0f1ec
--- /dev/null
+++ b/ext/vulkan/xcb/vkdisplay_xcb.h
@@ -0,0 +1,84 @@
+/*
+ * GStreamer
+ * Copyright (C) 2013 Matthew Waters <ystreet00@gmail.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifndef __GST_VULKAN_DISPLAY_XCB_H__
+#define __GST_VULKAN_DISPLAY_XCB_H__
+
+#include <gst/gst.h>
+
+#include <xcb/xcb.h>
+
+#include <vk.h>
+#ifndef VK_USE_PLATFORM_XCB_KHR
+#error "VK_USE_PLATFORM_XCB_KHR not defined before including this header"
+#error "Either include vkapi.h or define VK_USE_PLATFORM_XCB_KHR before including this header"
+#endif
+#include <vulkan/vulkan.h>
+
+G_BEGIN_DECLS
+
+GType gst_vulkan_display_xcb_get_type (void);
+
+#define GST_TYPE_VULKAN_DISPLAY_XCB             (gst_vulkan_display_xcb_get_type())
+#define GST_VULKAN_DISPLAY_XCB(obj)             (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_VULKAN_DISPLAY_XCB,GstVulkanDisplayXCB))
+#define GST_VULKAN_DISPLAY_XCB_CLASS(klass)     (G_TYPE_CHECK_CLASS_CAST((klass), GST_TYPE_VULKAN_DISPLAY_XCB,GstVulkanDisplayXCBClass))
+#define GST_IS_VULKAN_DISPLAY_XCB(obj)          (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_VULKAN_DISPLAY_XCB))
+#define GST_IS_VULKAN_DISPLAY_XCB_CLASS(klass)  (G_TYPE_CHECK_CLASS_TYPE((klass), GST_TYPE_VULKAN_DISPLAY_XCB))
+#define GST_VULKAN_DISPLAY_XCB_CAST(obj)        ((GstVulkanDisplayXCB*)(obj))
+
+typedef struct _GstVulkanDisplayXCB GstVulkanDisplayXCB;
+typedef struct _GstVulkanDisplayXCBClass GstVulkanDisplayXCBClass;
+
+#define GST_VULKAN_DISPLAY_XCB_CONNECTION(d) (GST_VULKAN_DISPLAY_XCB(d)->connection)
+#define GST_VULKAN_DISPLAY_XCB_ROOT_WINDOW(d) (GST_VULKAN_DISPLAY_XCB(d)->root_window)
+#define GST_VULKAN_DISPLAY_XCB_SCREEN(d) (GST_VULKAN_DISPLAY_XCB(d)->screen)
+
+/**
+ * GstVulkanDisplayXCB:
+ *
+ * the contents of a #GstVulkanDisplayXCB are private and should only be accessed
+ * through the provided API
+ */
+struct _GstVulkanDisplayXCB
+{
+  GstVulkanDisplay          parent;
+
+  xcb_connection_t *connection;
+  xcb_window_t      root_window;
+  xcb_screen_t     *screen;
+
+  /* <private> */
+  gboolean foreign_display;
+
+  GSource *event_source;
+};
+
+struct _GstVulkanDisplayXCBClass
+{
+  GstVulkanDisplayClass object_class;
+};
+
+GstVulkanDisplayXCB * gst_vulkan_display_xcb_new                    (const gchar * name);
+GstVulkanDisplayXCB * gst_vulkan_display_xcb_new_with_connection    (xcb_connection_t * connection,
+                                                                     int screen_no);
+
+G_END_DECLS
+
+#endif /* __GST_VULKAN_DISPLAY_XCB_H__ */
diff --git a/ext/vulkan/xcb/vkwindow_xcb.c b/ext/vulkan/xcb/vkwindow_xcb.c
new file mode 100644
index 0000000..6369a1d
--- /dev/null
+++ b/ext/vulkan/xcb/vkwindow_xcb.c
@@ -0,0 +1,286 @@
+/*
+ * GStreamer
+ * Copyright (C) 2015 Matthew Waters <matthew@centricular.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <gst/gst.h>
+#include <locale.h>
+
+#include "vkwindow_xcb.h"
+#include "vkdisplay_xcb.h"
+
+#define GST_VULKAN_WINDOW_XCB_GET_PRIVATE(o)  \
+  (G_TYPE_INSTANCE_GET_PRIVATE((o), GST_TYPE_VULKAN_WINDOW_XCB, GstVulkanWindowXCBPrivate))
+
+#define GST_CAT_DEFAULT gst_vulkan_window_xcb_debug
+GST_DEBUG_CATEGORY_STATIC (GST_CAT_DEFAULT);
+
+static void
+_init_debug (void)
+{
+  static volatile gsize _init = 0;
+
+  if (g_once_init_enter (&_init)) {
+    GST_DEBUG_CATEGORY_INIT (GST_CAT_DEFAULT, "vulkanwindowxcb", 0,
+        "Vulkan XCB Window");
+    g_once_init_leave (&_init, 1);
+  }
+}
+
+#define gst_vulkan_window_xcb_parent_class parent_class
+G_DEFINE_TYPE_WITH_CODE (GstVulkanWindowXCB, gst_vulkan_window_xcb,
+    GST_TYPE_VULKAN_WINDOW, _init_debug ());
+
+gboolean gst_vulkan_window_xcb_handle_event (GstVulkanWindowXCB * window_xcb);
+
+enum
+{
+  PROP_0,
+};
+
+struct _GstVulkanWindowXCBPrivate
+{
+  gboolean activate;
+  gboolean activate_result;
+
+  gint preferred_width;
+  gint preferred_height;
+
+  xcb_intern_atom_reply_t *atom_wm_delete_window;
+};
+
+static VkSurfaceKHR gst_vulkan_window_xcb_get_surface (GstVulkanWindow * window,
+    GError ** error);
+static gboolean gst_vulkan_window_xcb_get_presentation_support (GstVulkanWindow
+    * window, GstVulkanDevice * device, guint32 queue_family_idx);
+static gboolean gst_vulkan_window_xcb_open (GstVulkanWindow * window,
+    GError ** error);
+static void gst_vulkan_window_xcb_close (GstVulkanWindow * window);
+
+static void
+gst_vulkan_window_xcb_finalize (GObject * object)
+{
+  G_OBJECT_CLASS (parent_class)->finalize (object);
+}
+
+static void
+gst_vulkan_window_xcb_class_init (GstVulkanWindowXCBClass * klass)
+{
+  GObjectClass *obj_class = G_OBJECT_CLASS (klass);
+  GstVulkanWindowClass *window_class = (GstVulkanWindowClass *) klass;
+
+  g_type_class_add_private (klass, sizeof (GstVulkanWindowXCBPrivate));
+
+  obj_class->finalize = gst_vulkan_window_xcb_finalize;
+
+  window_class->open = GST_DEBUG_FUNCPTR (gst_vulkan_window_xcb_open);
+  window_class->close = GST_DEBUG_FUNCPTR (gst_vulkan_window_xcb_close);
+  window_class->get_surface = gst_vulkan_window_xcb_get_surface;
+  window_class->get_presentation_support =
+      gst_vulkan_window_xcb_get_presentation_support;
+}
+
+static void
+gst_vulkan_window_xcb_init (GstVulkanWindowXCB * window)
+{
+  window->priv = GST_VULKAN_WINDOW_XCB_GET_PRIVATE (window);
+}
+
+/* Must be called in the gl thread */
+GstVulkanWindowXCB *
+gst_vulkan_window_xcb_new (GstVulkanDisplay * display)
+{
+  _init_debug ();
+
+  if ((gst_vulkan_display_get_handle_type (display) &
+          GST_VULKAN_DISPLAY_TYPE_XCB)
+      == GST_VULKAN_DISPLAY_TYPE_NONE) {
+    GST_INFO ("Wrong display type %u for this window type %u", display->type,
+        GST_VULKAN_DISPLAY_TYPE_XCB);
+    return NULL;
+  }
+
+  return g_object_new (GST_TYPE_VULKAN_WINDOW_XCB, NULL);
+}
+
+static void
+gst_vulkan_window_xcb_show (GstVulkanWindow * window)
+{
+  GstVulkanWindowXCB *window_xcb = GST_VULKAN_WINDOW_XCB (window);
+  GstVulkanDisplayXCB *display_xcb = GST_VULKAN_DISPLAY_XCB (window->display);
+  xcb_connection_t *connection =
+      GST_VULKAN_DISPLAY_XCB_CONNECTION (display_xcb);
+
+  if (!window_xcb->visible) {
+    xcb_map_window (connection, window_xcb->win_id);
+    xcb_flush (connection);
+    window_xcb->visible = TRUE;
+  }
+}
+
+static void
+gst_vulkan_window_xcb_hide (GstVulkanWindow * window)
+{
+  GstVulkanWindowXCB *window_xcb = GST_VULKAN_WINDOW_XCB (window);
+  GstVulkanDisplayXCB *display_xcb = GST_VULKAN_DISPLAY_XCB (window->display);
+  xcb_connection_t *connection =
+      GST_VULKAN_DISPLAY_XCB_CONNECTION (display_xcb);
+
+  if (window_xcb->visible) {
+    xcb_unmap_window (connection, window_xcb->win_id);
+    window_xcb->visible = FALSE;
+  }
+}
+
+gboolean
+gst_vulkan_window_xcb_create_window (GstVulkanWindowXCB * window_xcb)
+{
+  GstVulkanDisplayXCB *display_xcb;
+  xcb_connection_t *connection;
+  xcb_screen_t *screen;
+  xcb_window_t root_window;
+  uint32_t value_mask, value_list[32];
+  xcb_intern_atom_cookie_t cookie, cookie2;
+  xcb_intern_atom_reply_t *reply, *reply2;
+//  const gchar *title = "OpenGL renderer";
+  gint x = 0, y = 0, width = 320, height = 240;
+
+  display_xcb =
+      GST_VULKAN_DISPLAY_XCB (GST_VULKAN_WINDOW (window_xcb)->display);
+  connection = GST_VULKAN_DISPLAY_XCB_CONNECTION (display_xcb);
+  root_window = GST_VULKAN_DISPLAY_XCB_ROOT_WINDOW (display_xcb);
+  screen = GST_VULKAN_DISPLAY_XCB_SCREEN (display_xcb);
+
+  window_xcb->win_id = xcb_generate_id (connection);
+
+  value_mask = XCB_CW_BACK_PIXEL | XCB_CW_EVENT_MASK;
+  value_list[0] = screen->black_pixel;
+  value_list[1] =
+      XCB_EVENT_MASK_KEY_RELEASE | XCB_EVENT_MASK_EXPOSURE |
+      XCB_EVENT_MASK_STRUCTURE_NOTIFY;
+
+  xcb_create_window (connection, XCB_COPY_FROM_PARENT, window_xcb->win_id,
+      root_window, x, y, width, height, 0, XCB_WINDOW_CLASS_INPUT_OUTPUT,
+      screen->root_visual, value_mask, value_list);
+
+  GST_LOG_OBJECT (window_xcb, "gl window id: %p",
+      (gpointer) (guintptr) window_xcb->win_id);
+  GST_LOG_OBJECT (window_xcb, "gl window props: x:%d y:%d", x, y);
+
+  /* Magic code that will send notification when window is destroyed */
+  cookie = xcb_intern_atom (connection, 1, 12, "WM_PROTOCOLS");
+  reply = xcb_intern_atom_reply (connection, cookie, 0);
+
+  cookie2 = xcb_intern_atom (connection, 0, 16, "WM_DELETE_WINDOW");
+  reply2 = xcb_intern_atom_reply (connection, cookie2, 0);
+
+  xcb_change_property (connection, XCB_PROP_MODE_REPLACE, window_xcb->win_id,
+      reply->atom, 4, 32, 1, &reply2->atom);
+  g_free (reply);
+  g_free (reply2);
+
+  gst_vulkan_window_xcb_show (GST_VULKAN_WINDOW (window_xcb));
+
+  return TRUE;
+}
+
+static VkSurfaceKHR
+gst_vulkan_window_xcb_get_surface (GstVulkanWindow * window, GError ** error)
+{
+  VkXcbSurfaceCreateInfoKHR info = { 0, };
+  VkSurfaceKHR ret;
+  VkResult err;
+
+  info.sType = VK_STRUCTURE_TYPE_XCB_SURFACE_CREATE_INFO_KHR;
+  info.pNext = NULL;
+  info.flags = 0;
+  info.connection = GST_VULKAN_DISPLAY_XCB_CONNECTION (window->display);
+  info.window = GST_VULKAN_WINDOW_XCB (window)->win_id;
+
+  err =
+      vkCreateXcbSurfaceKHR (window->display->instance->instance, &info, NULL,
+      &ret);
+  if (gst_vulkan_error_to_g_error (err, error, "vkCreateXcbSurfaceKHR") < 0)
+    return NULL;
+
+  return ret;
+}
+
+static gboolean
+gst_vulkan_window_xcb_get_presentation_support (GstVulkanWindow * window,
+    GstVulkanDevice * device, guint32 queue_family_idx)
+{
+  VkPhysicalDevice gpu;
+  xcb_screen_t *screen;
+
+  screen = GST_VULKAN_DISPLAY_XCB_SCREEN (window->display);
+
+  gpu = gst_vulkan_device_get_physical_device (device);
+  if (vkGetPhysicalDeviceXcbPresentationSupportKHR (gpu, queue_family_idx,
+          GST_VULKAN_DISPLAY_XCB_CONNECTION (window->display),
+          screen->root_visual))
+    return TRUE;
+  return FALSE;
+}
+
+static gboolean
+gst_vulkan_window_xcb_open (GstVulkanWindow * window, GError ** error)
+{
+  GstVulkanWindowXCB *window_xcb = GST_VULKAN_WINDOW_XCB (window);
+  GstVulkanDisplayXCB *display_xcb = (GstVulkanDisplayXCB *) window->display;
+  xcb_connection_t *connection;
+
+  connection = GST_VULKAN_DISPLAY_XCB_CONNECTION (display_xcb);
+  if (connection == NULL) {
+    g_set_error (error, GST_VULKAN_WINDOW_ERROR,
+        GST_VULKAN_WINDOW_ERROR_RESOURCE_UNAVAILABLE,
+        "Failed to connect to X display server with XCB");
+    goto failure;
+  }
+
+  if (!GST_VULKAN_WINDOW_CLASS (parent_class)->open (window, error))
+    return FALSE;
+
+  return gst_vulkan_window_xcb_create_window (window_xcb);
+
+failure:
+  return FALSE;
+}
+
+static void
+gst_vulkan_window_xcb_close (GstVulkanWindow * window)
+{
+  GstVulkanWindowXCB *window_xcb = GST_VULKAN_WINDOW_XCB (window);
+  GstVulkanDisplayXCB *display_xcb = (GstVulkanDisplayXCB *) window->display;
+  xcb_connection_t *connection =
+      GST_VULKAN_DISPLAY_XCB_CONNECTION (display_xcb);
+
+  if (connection) {
+    gst_vulkan_window_xcb_hide (window);
+
+    g_free (window_xcb->priv->atom_wm_delete_window);
+    window_xcb->priv->atom_wm_delete_window = NULL;
+    GST_DEBUG ("display receiver closed");
+  }
+
+  GST_VULKAN_WINDOW_CLASS (parent_class)->close (window);
+}
diff --git a/ext/vulkan/xcb/vkwindow_xcb.h b/ext/vulkan/xcb/vkwindow_xcb.h
new file mode 100644
index 0000000..517a488
--- /dev/null
+++ b/ext/vulkan/xcb/vkwindow_xcb.h
@@ -0,0 +1,83 @@
+/*
+ * GStreamer
+ * Copyright (C) 2012 Matthew Waters <ystreet00@gmail.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifndef __GST_VULKAN_WINDOW_XCB_H__
+#define __GST_VULKAN_WINDOW_XCB_H__
+
+#include <xcb/xcb.h>
+
+#include <vk.h>
+
+G_BEGIN_DECLS
+
+#define GST_TYPE_VULKAN_WINDOW_XCB         (gst_vulkan_window_xcb_get_type())
+#define GST_VULKAN_WINDOW_XCB(o)           (G_TYPE_CHECK_INSTANCE_CAST((o), GST_TYPE_VULKAN_WINDOW_XCB, GstVulkanWindowXCB))
+#define GST_VULKAN_WINDOW_XCB_CLASS(k)     (G_TYPE_CHECK_CLASS((k), GST_TYPE_VULKAN_WINDOW_XCB, GstVulkanWindowXCBClass))
+#define GST_IS_VULKAN_WINDOW_XCB(o)        (G_TYPE_CHECK_INSTANCE_TYPE((o), GST_TYPE_VULKAN_WINDOW_XCB))
+#define GST_IS_VULKAN_WINDOW_XCB_CLASS(k)  (G_TYPE_CHECK_CLASS_TYPE((k), GST_TYPE_VULKAN_WINDOW_XCB))
+#define GST_VULKAN_WINDOW_XCB_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS((o), GST_TYPE_VULKAN_WINDOW_XCB, GstVulkanWindowXCBClass))
+
+typedef struct _GstVulkanWindowXCB        GstVulkanWindowXCB;
+typedef struct _GstVulkanWindowXCBPrivate GstVulkanWindowXCBPrivate;
+typedef struct _GstVulkanWindowXCBClass   GstVulkanWindowXCBClass;
+
+/**
+ * GstVulkanWindowXCB:
+ *
+ * Opaque #GstVulkanWindowXCB object
+ */
+struct _GstVulkanWindowXCB
+{
+  /*< private >*/
+  GstVulkanWindow parent;
+
+  /* X window */
+  xcb_window_t win_id;
+
+  gint          visible :1;
+
+  /*< private >*/
+  GstVulkanWindowXCBPrivate *priv;
+  
+  gpointer _reserved[GST_PADDING];
+};
+
+/**
+ * GstVulkanWindowXCBClass:
+ *
+ * Opaque #GstVulkanWindowXCBClass object
+ */
+struct _GstVulkanWindowXCBClass {
+  /*< private >*/
+  GstVulkanWindowClass parent_class;
+
+  /*< private >*/
+  gpointer _reserved[GST_PADDING_LARGE];
+};
+
+GType gst_vulkan_window_xcb_get_type     (void);
+
+GstVulkanWindowXCB * gst_vulkan_window_xcb_new (GstVulkanDisplay * display);
+
+gboolean gst_vulkan_window_xcb_create_window (GstVulkanWindowXCB * window_xcb);
+
+G_END_DECLS
+
+#endif /* __GST_VULKAN_WINDOW_XCB_H__ */
diff --git a/ext/vulkan/xcb/xcb_event_source.c b/ext/vulkan/xcb/xcb_event_source.c
new file mode 100644
index 0000000..3368f19
--- /dev/null
+++ b/ext/vulkan/xcb/xcb_event_source.c
@@ -0,0 +1,255 @@
+/*
+ * GStreamer
+ * Copyright (C) 2012 Matthew Waters <ystreet00@gmail.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <stdint.h>
+#include <stdlib.h>
+
+#include "xcb_event_source.h"
+#include "vkdisplay_xcb.h"
+#include "vkwindow_xcb.h"
+
+static gint
+_compare_xcb_window (GstVulkanWindowXCB * window_xcb, xcb_window_t * window_id)
+{
+  return window_xcb->win_id - *window_id;
+}
+
+static GstVulkanWindowXCB *
+_find_window_from_xcb_window (GstVulkanDisplayXCB * display_xcb,
+    xcb_window_t window_id)
+{
+  GstVulkanDisplay *display = GST_VULKAN_DISPLAY (display_xcb);
+  GstVulkanWindowXCB *ret = NULL;
+  GList *l;
+
+  if (!window_id)
+    return NULL;
+
+  GST_OBJECT_LOCK (display);
+  l = g_list_find_custom (display->windows, &window_id,
+      (GCompareFunc) _compare_xcb_window);
+  if (l)
+    ret = gst_object_ref (l->data);
+  GST_OBJECT_UNLOCK (display);
+
+  return ret;
+}
+
+static gboolean
+_xcb_handle_event (GstVulkanDisplayXCB * display_xcb)
+{
+  xcb_connection_t *connection =
+      GST_VULKAN_DISPLAY_XCB_CONNECTION (display_xcb);
+  xcb_generic_event_t *event;
+  gboolean ret = TRUE;
+
+  while ((event = xcb_poll_for_event (connection))) {
+    uint8_t event_code = event->response_type & 0x7f;
+
+    switch (event_code) {
+      case XCB_CLIENT_MESSAGE:{
+        xcb_client_message_event_t *client_event;
+        xcb_intern_atom_cookie_t cookie;
+        xcb_intern_atom_reply_t *reply;
+
+        client_event = (xcb_client_message_event_t *) event;
+        cookie = xcb_intern_atom (connection, 0, 16, "WM_DELETE_WINDOW");
+        reply = xcb_intern_atom_reply (connection, cookie, 0);
+
+        if (client_event->data.data32[0] == reply->atom) {
+          GstVulkanWindowXCB *window_xcb;
+
+          window_xcb =
+              _find_window_from_xcb_window (display_xcb, client_event->window);
+
+          if (window_xcb) {
+            GST_INFO_OBJECT (window_xcb, "Close requested");
+
+            gst_vulkan_window_close (GST_VULKAN_WINDOW (window_xcb));
+            gst_vulkan_display_remove_window (GST_VULKAN_DISPLAY (display_xcb),
+                GST_VULKAN_WINDOW (window_xcb));
+            gst_object_unref (window_xcb);
+          }
+        }
+
+        g_free (reply);
+        break;
+      }
+      case XCB_CONFIGURE_NOTIFY:{
+        xcb_configure_notify_event_t *configure_event;
+        GstVulkanWindowXCB *window_xcb;
+
+        configure_event = (xcb_configure_notify_event_t *) event;
+        window_xcb =
+            _find_window_from_xcb_window (display_xcb, configure_event->window);
+
+        if (window_xcb) {
+          gst_vulkan_window_resize (GST_VULKAN_WINDOW (window_xcb),
+              configure_event->width, configure_event->height);
+
+          gst_object_unref (window_xcb);
+        }
+        break;
+      }
+      case XCB_EXPOSE:{
+        xcb_expose_event_t *expose_event = (xcb_expose_event_t *) event;
+        GstVulkanWindowXCB *window_xcb;
+
+        /* non-zero means that other Expose follows
+         * so just wait for the last one
+         * in theory we should not receive non-zero because
+         * we have no sub areas here but just in case */
+        if (expose_event->count != 0)
+          break;
+
+        window_xcb =
+            _find_window_from_xcb_window (display_xcb, expose_event->window);
+
+        if (window_xcb) {
+          gst_vulkan_window_redraw (GST_VULKAN_WINDOW (window_xcb));
+          gst_object_unref (window_xcb);
+        }
+        break;
+      }
+#if 0
+      case KeyPress:
+      case KeyRelease:
+        keysym = XkbKeycodeToKeysym (window_xcb->device,
+            event.xkey.keycode, 0, 0);
+        key_str = XKeysymToString (keysym);
+        key_data = g_slice_new (struct key_event);
+        key_data->window = window;
+        key_data->key_str = XKeysymToString (keysym);
+        key_data->event_type =
+            event.type == KeyPress ? "key-press" : "key-release";
+        GST_DEBUG ("input event key %d pressed over window at %d,%d (%s)",
+            event.xkey.keycode, event.xkey.x, event.xkey.y, key_str);
+        g_main_context_invoke (window->navigation_context,
+            (GSourceFunc) gst_vulkan_window_key_event_cb, key_data);
+        break;
+      case ButtonPress:
+      case ButtonRelease:
+        GST_DEBUG ("input event mouse button %d pressed over window at %d,%d",
+            event.xbutton.button, event.xbutton.x, event.xbutton.y);
+        mouse_data = g_slice_new (struct mouse_event);
+        mouse_data->window = window;
+        mouse_data->event_type =
+            event.type ==
+            ButtonPress ? "mouse-button-press" : "mouse-button-release";
+        mouse_data->button = event.xbutton.button;
+        mouse_data->posx = (double) event.xbutton.x;
+        mouse_data->posy = (double) event.xbutton.y;
+
+        g_main_context_invoke (window->navigation_context,
+            (GSourceFunc) gst_vulkan_window_mouse_event_cb, mouse_data);
+        break;
+      case MotionNotify:
+        GST_DEBUG ("input event pointer moved over window at %d,%d",
+            event.xmotion.x, event.xmotion.y);
+        mouse_data = g_slice_new (struct mouse_event);
+        mouse_data->window = window;
+        mouse_data->event_type = "mouse-move";
+        mouse_data->button = 0;
+        mouse_data->posx = (double) event.xbutton.x;
+        mouse_data->posy = (double) event.xbutton.y;
+
+        g_main_context_invoke (window->navigation_context, (GSourceFunc)
+            gst_vulkan_window_mouse_event_cb, mouse_data);
+        break;
+#endif
+      default:
+        GST_DEBUG ("unhandled XCB type: %u", event_code);
+        break;
+    }
+
+    g_free (event);
+  }
+
+  return ret;
+}
+
+typedef struct _XCBEventSource
+{
+  GSource source;
+  GPollFD pfd;
+  uint32_t mask;
+  GstVulkanDisplayXCB *display_xcb;
+} XCBEventSource;
+
+static gboolean
+xcb_event_source_prepare (GSource * base, gint * timeout)
+{
+  *timeout = -1;
+  return FALSE;
+}
+
+static gboolean
+xcb_event_source_check (GSource * base)
+{
+  XCBEventSource *source = (XCBEventSource *) base;
+  gboolean retval;
+
+  retval = source->pfd.revents;
+
+  return retval;
+}
+
+static gboolean
+xcb_event_source_dispatch (GSource * base, GSourceFunc callback, gpointer data)
+{
+  XCBEventSource *source = (XCBEventSource *) base;
+
+  gboolean ret = _xcb_handle_event (source->display_xcb);
+
+  if (callback)
+    callback (data);
+
+  return ret;
+}
+
+static GSourceFuncs xcb_event_source_funcs = {
+  xcb_event_source_prepare,
+  xcb_event_source_check,
+  xcb_event_source_dispatch,
+  NULL
+};
+
+GSource *
+xcb_event_source_new (GstVulkanDisplayXCB * display_xcb)
+{
+  xcb_connection_t *connection;
+  XCBEventSource *source;
+
+  connection = GST_VULKAN_DISPLAY_XCB_CONNECTION (display_xcb);
+  g_return_val_if_fail (connection != NULL, NULL);
+
+  source = (XCBEventSource *)
+      g_source_new (&xcb_event_source_funcs, sizeof (XCBEventSource));
+  source->display_xcb = display_xcb;
+  source->pfd.fd = xcb_get_file_descriptor (connection);
+  source->pfd.events = G_IO_IN | G_IO_ERR;
+  g_source_add_poll (&source->source, &source->pfd);
+
+  return &source->source;
+}
diff --git a/ext/vulkan/xcb/xcb_event_source.h b/ext/vulkan/xcb/xcb_event_source.h
new file mode 100644
index 0000000..cd9b41c
--- /dev/null
+++ b/ext/vulkan/xcb/xcb_event_source.h
@@ -0,0 +1,30 @@
+/*
+ * GStreamer
+ * Copyright (C) 2012 Matthew Waters <ystreet00@gmail.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifndef __VULKAN_XCB_EVENT_SOURCE_H__
+#define __VULKAN_XCB_EVENT_SOURCE_H__
+
+#include <glib-object.h>
+#include "vkdisplay_xcb.h"
+
+GSource *
+xcb_event_source_new (GstVulkanDisplayXCB *display_xcb);
+
+#endif /* __VULKAN_XCB_EVENT_SOURCE_H__ */
diff --git a/ext/wayland/Makefile.am b/ext/wayland/Makefile.am
index e12d99a..c742bfc 100644
--- a/ext/wayland/Makefile.am
+++ b/ext/wayland/Makefile.am
@@ -14,6 +14,7 @@
 libgstwaylandsink_la_LIBADD = \
 	$(GST_PLUGINS_BASE_LIBS) \
 	-lgstvideo-$(GST_API_VERSION) \
+	-lgstallocators-$(GST_API_VERSION) \
 	$(WAYLAND_LIBS) \
 	$(top_builddir)/gst-libs/gst/wayland/libgstwayland-$(GST_API_VERSION).la
 libgstwaylandsink_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS)
diff --git a/ext/wayland/Makefile.in b/ext/wayland/Makefile.in
index 55e3762..42ded05 100644
--- a/ext/wayland/Makefile.in
+++ b/ext/wayland/Makefile.in
@@ -116,16 +116,15 @@
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
 	$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
-	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gsettings.m4 \
-	$(top_srcdir)/m4/gst-fionread.m4 $(top_srcdir)/m4/gst-sdl.m4 \
-	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
-	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
-	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libgcrypt.m4 \
-	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
-	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
-	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
-	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
-	$(top_srcdir)/configure.ac
+	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gst-fionread.m4 \
+	$(top_srcdir)/m4/gst-sdl.m4 $(top_srcdir)/m4/iconv.m4 \
+	$(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \
+	$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
+	$(top_srcdir)/m4/libgcrypt.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
+	$(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \
@@ -282,6 +281,8 @@
 CLUTTER_X11_LIBS = @CLUTTER_X11_LIBS@
 CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
+CUDA_CFLAGS = @CUDA_CFLAGS@
+CUDA_LIBS = @CUDA_LIBS@
 CURL_CFLAGS = @CURL_CFLAGS@
 CURL_LIBS = @CURL_LIBS@
 CXX = @CXX@
@@ -319,6 +320,8 @@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
+EGL_CFLAGS = @EGL_CFLAGS@
+EGL_LIBS = @EGL_LIBS@
 EGREP = @EGREP@
 ERROR_CFLAGS = @ERROR_CFLAGS@
 ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
@@ -327,7 +330,6 @@
 EXIF_CFLAGS = @EXIF_CFLAGS@
 EXIF_LIBS = @EXIF_LIBS@
 FAAC_LIBS = @FAAC_LIBS@
-FAAD_IS_NEAAC = @FAAD_IS_NEAAC@
 FAAD_LIBS = @FAAD_LIBS@
 FFLAGS = @FFLAGS@
 FGREP = @FGREP@
@@ -346,8 +348,9 @@
 GIO_LIBS = @GIO_LIBS@
 GIO_UNIX_CFLAGS = @GIO_UNIX_CFLAGS@
 GIO_UNIX_LIBS = @GIO_UNIX_LIBS@
+GLES2_CFLAGS = @GLES2_CFLAGS@
+GLES2_LIBS = @GLES2_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
-GLIB_COMPILE_SCHEMAS = @GLIB_COMPILE_SCHEMAS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
@@ -364,16 +367,17 @@
 GMODULE_NO_EXPORT_LIBS = @GMODULE_NO_EXPORT_LIBS@
 GMSGFMT = @GMSGFMT@
 GMSGFMT_015 = @GMSGFMT_015@
+GNUSTL_CFLAGS = @GNUSTL_CFLAGS@
+GNUSTL_LIBS = @GNUSTL_LIBS@
 GRAPHENE_CFLAGS = @GRAPHENE_CFLAGS@
 GRAPHENE_LIBS = @GRAPHENE_LIBS@
 GREP = @GREP@
-GSETTINGS_CFLAGS = @GSETTINGS_CFLAGS@
-GSETTINGS_DISABLE_SCHEMAS_COMPILE = @GSETTINGS_DISABLE_SCHEMAS_COMPILE@
-GSETTINGS_LIBS = @GSETTINGS_LIBS@
 GSM_LIBS = @GSM_LIBS@
 GSTPB_PLUGINS_DIR = @GSTPB_PLUGINS_DIR@
 GSTPB_PREFIX = @GSTPB_PREFIX@
 GST_AGE = @GST_AGE@
+GST_ALLOCATORS_CFLAGS = @GST_ALLOCATORS_CFLAGS@
+GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
 GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
 GST_API_VERSION = @GST_API_VERSION@
 GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
@@ -399,6 +403,8 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PBUTILS_CFLAGS = @GST_PBUTILS_CFLAGS@
+GST_PBUTILS_LIBS = @GST_PBUTILS_LIBS@
 GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BAD_CFLAGS = @GST_PLUGINS_BAD_CFLAGS@
@@ -424,6 +430,8 @@
 GST_PREFIX = @GST_PREFIX@
 GST_REVISION = @GST_REVISION@
 GST_TOOLS_DIR = @GST_TOOLS_DIR@
+GST_VIDEO_CFLAGS = @GST_VIDEO_CFLAGS@
+GST_VIDEO_LIBS = @GST_VIDEO_LIBS@
 GTK3_CFLAGS = @GTK3_CFLAGS@
 GTK3_GL_CFLAGS = @GTK3_GL_CFLAGS@
 GTK3_GL_LIBS = @GTK3_GL_LIBS@
@@ -525,6 +533,7 @@
 LTLIBICONV = @LTLIBICONV@
 LTLIBINTL = @LTLIBINTL@
 LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
 MANIFEST_TOOL = @MANIFEST_TOOL@
@@ -538,8 +547,6 @@
 MODPLUG_LIBS = @MODPLUG_LIBS@
 MPEG2ENC_CFLAGS = @MPEG2ENC_CFLAGS@
 MPEG2ENC_LIBS = @MPEG2ENC_LIBS@
-MPG123_CFLAGS = @MPG123_CFLAGS@
-MPG123_LIBS = @MPG123_LIBS@
 MPLEX_CFLAGS = @MPLEX_CFLAGS@
 MPLEX_LDFLAGS = @MPLEX_LDFLAGS@
 MPLEX_LIBS = @MPLEX_LIBS@
@@ -555,6 +562,8 @@
 NETTLE_LIBS = @NETTLE_LIBS@
 NM = @NM@
 NMEDIT = @NMEDIT@
+NVENCODE_CFLAGS = @NVENCODE_CFLAGS@
+NVENCODE_LIBS = @NVENCODE_LIBS@
 OBJC = @OBJC@
 OBJCDEPMODE = @OBJCDEPMODE@
 OBJCFLAGS = @OBJCFLAGS@
@@ -612,16 +621,18 @@
 PYTHON_PLATFORM = @PYTHON_PLATFORM@
 PYTHON_PREFIX = @PYTHON_PREFIX@
 PYTHON_VERSION = @PYTHON_VERSION@
+QT_ANDROID_CFLAGS = @QT_ANDROID_CFLAGS@
+QT_ANDROID_LIBS = @QT_ANDROID_LIBS@
 QT_CFLAGS = @QT_CFLAGS@
 QT_LIBS = @QT_LIBS@
+QT_MAC_CFLAGS = @QT_MAC_CFLAGS@
+QT_MAC_LIBS = @QT_MAC_LIBS@
 QT_WAYLAND_CFLAGS = @QT_WAYLAND_CFLAGS@
 QT_WAYLAND_LIBS = @QT_WAYLAND_LIBS@
 QT_X11_CFLAGS = @QT_X11_CFLAGS@
 QT_X11_LIBS = @QT_X11_LIBS@
 RANLIB = @RANLIB@
 RCC = @RCC@
-RSVG_2_36_2_CFLAGS = @RSVG_2_36_2_CFLAGS@
-RSVG_2_36_2_LIBS = @RSVG_2_36_2_LIBS@
 RSVG_CFLAGS = @RSVG_CFLAGS@
 RSVG_LIBS = @RSVG_LIBS@
 RTMP_CFLAGS = @RTMP_CFLAGS@
@@ -673,6 +684,7 @@
 VOAACENC_LIBS = @VOAACENC_LIBS@
 VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
 VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VULKAN_LIBS = @VULKAN_LIBS@
 WARNING_CFLAGS = @WARNING_CFLAGS@
 WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
 WARNING_OBJCFLAGS = @WARNING_OBJCFLAGS@
@@ -683,6 +695,7 @@
 WAYLAND_LIBS = @WAYLAND_LIBS@
 WEBP_CFLAGS = @WEBP_CFLAGS@
 WEBP_LIBS = @WEBP_LIBS@
+WGET = @WGET@
 WILDMIDI_CFLAGS = @WILDMIDI_CFLAGS@
 WILDMIDI_LIBS = @WILDMIDI_LIBS@
 WINKS_LIBS = @WINKS_LIBS@
@@ -692,6 +705,8 @@
 X11_LIBS = @X11_LIBS@
 X265_CFLAGS = @X265_CFLAGS@
 X265_LIBS = @X265_LIBS@
+XCB_CFLAGS = @XCB_CFLAGS@
+XCB_LIBS = @XCB_LIBS@
 XCOMPOSITE_CFLAGS = @XCOMPOSITE_CFLAGS@
 XCOMPOSITE_LIBS = @XCOMPOSITE_LIBS@
 XGETTEXT = @XGETTEXT@
@@ -729,7 +744,6 @@
 docdir = @docdir@
 dvidir = @dvidir@
 exec_prefix = @exec_prefix@
-gsettingsschemadir = @gsettingsschemadir@
 host = @host@
 host_alias = @host_alias@
 host_cpu = @host_cpu@
@@ -785,6 +799,7 @@
 libgstwaylandsink_la_LIBADD = \
 	$(GST_PLUGINS_BASE_LIBS) \
 	-lgstvideo-$(GST_API_VERSION) \
+	-lgstallocators-$(GST_API_VERSION) \
 	$(WAYLAND_LIBS) \
 	$(top_builddir)/gst-libs/gst/wayland/libgstwayland-$(GST_API_VERSION).la
 
diff --git a/ext/wayland/gstwaylandsink.c b/ext/wayland/gstwaylandsink.c
index 7cc4bba..f4f34a8 100644
--- a/ext/wayland/gstwaylandsink.c
+++ b/ext/wayland/gstwaylandsink.c
@@ -32,7 +32,7 @@
  * <refsect2>
  * <title>Example pipelines</title>
  * |[
- * gst-launch -v videotestsrc ! waylandsink
+ * gst-launch-1.0 -v videotestsrc ! waylandsink
  * ]| test the video rendering in wayland
  * </refsect2>
  */
@@ -219,8 +219,7 @@
   if (sink->pool)
     gst_object_unref (sink->pool);
 
-  if (sink->display_name)
-    g_free (sink->display_name);
+  g_free (sink->display_name);
 
   g_mutex_clear (&sink->display_lock);
   g_mutex_clear (&sink->render_lock);
@@ -364,10 +363,13 @@
   if (gst_context_has_context_type (context,
           GST_WAYLAND_DISPLAY_HANDLE_CONTEXT_TYPE)) {
     g_mutex_lock (&sink->display_lock);
-    if (G_LIKELY (!sink->display))
+    if (G_LIKELY (!sink->display)) {
       gst_wayland_sink_set_display_from_context (sink, context);
-    else
+    } else {
       GST_WARNING_OBJECT (element, "changing display handle is not supported");
+      g_mutex_unlock (&sink->display_lock);
+      return;
+    }
     g_mutex_unlock (&sink->display_lock);
   }
 
@@ -397,7 +399,7 @@
     g_value_init (&list, GST_TYPE_LIST);
     g_value_init (&value, G_TYPE_STRING);
 
-    formats = sink->display->formats;
+    formats = sink->display->shm_formats;
     for (i = 0; i < formats->len; i++) {
       fmt = g_array_index (formats, uint32_t, i);
       g_value_set_string (&value, gst_wl_shm_format_to_string (fmt));
@@ -448,7 +450,7 @@
     goto invalid_format;
 
   /* verify we support the requested format */
-  formats = sink->display->formats;
+  formats = sink->display->shm_formats;
   for (i = 0; i < formats->len; i++) {
     if (g_array_index (formats, uint32_t, i) == format)
       break;
@@ -646,7 +648,7 @@
 
       /* the first time we acquire a buffer,
        * we need to attach a wl_buffer on it */
-      wlbuffer = gst_buffer_get_wl_buffer (buffer);
+      wlbuffer = gst_buffer_get_wl_buffer (to_render);
       if (G_UNLIKELY (!wlbuffer)) {
         mem = gst_buffer_peek_memory (to_render, 0);
         wbuf = gst_wl_shm_memory_construct_wl_buffer (mem, sink->display,
@@ -654,7 +656,7 @@
         if (G_UNLIKELY (!wbuf))
           goto no_wl_buffer;
 
-        gst_buffer_add_wl_buffer (buffer, wbuf, sink->display);
+        gst_buffer_add_wl_buffer (to_render, wbuf, sink->display);
       }
 
       gst_buffer_map (buffer, &src, GST_MAP_READ);
@@ -724,6 +726,11 @@
 
   g_return_if_fail (sink != NULL);
 
+  if (sink->window != NULL) {
+    GST_WARNING_OBJECT (sink, "changing window handle is not supported");
+    return;
+  }
+
   g_mutex_lock (&sink->render_lock);
 
   GST_DEBUG_OBJECT (sink, "Setting window handle %" GST_PTR_FORMAT,
diff --git a/ext/wayland/wldisplay.c b/ext/wayland/wldisplay.c
index 8c5eeaf..616ded3 100644
--- a/ext/wayland/wldisplay.c
+++ b/ext/wayland/wldisplay.c
@@ -44,7 +44,7 @@
 static void
 gst_wl_display_init (GstWlDisplay * self)
 {
-  self->formats = g_array_new (FALSE, FALSE, sizeof (uint32_t));
+  self->shm_formats = g_array_new (FALSE, FALSE, sizeof (uint32_t));
   self->wl_fd_poll = gst_poll_new (TRUE);
   self->buffers = g_hash_table_new (g_direct_hash, g_direct_equal);
   g_mutex_init (&self->buffers_mutex);
@@ -69,7 +69,7 @@
       (GHFunc) gst_wl_buffer_force_release_and_unref, NULL);
   g_hash_table_remove_all (self->buffers);
 
-  g_array_unref (self->formats);
+  g_array_unref (self->shm_formats);
   gst_poll_free (self->wl_fd_poll);
   g_hash_table_unref (self->buffers);
   g_mutex_clear (&self->buffers_mutex);
@@ -136,7 +136,7 @@
 {
   GstWlDisplay *self = data;
 
-  g_array_append_val (self->formats, format);
+  g_array_append_val (self->shm_formats, format);
 }
 
 static const struct wl_shm_listener shm_listener = {
diff --git a/ext/wayland/wldisplay.h b/ext/wayland/wldisplay.h
index 5505d60..e9df749 100644
--- a/ext/wayland/wldisplay.h
+++ b/ext/wayland/wldisplay.h
@@ -52,7 +52,7 @@
   struct wl_shell *shell;
   struct wl_shm *shm;
   struct wl_scaler *scaler;
-  GArray *formats;
+  GArray *shm_formats;
 
   /* private */
   gboolean own_display;
diff --git a/ext/wayland/wlshmallocator.c b/ext/wayland/wlshmallocator.c
index 6d82b23..94fbbf1 100644
--- a/ext/wayland/wlshmallocator.c
+++ b/ext/wayland/wlshmallocator.c
@@ -34,7 +34,7 @@
 GST_DEBUG_CATEGORY_EXTERN (gstwayland_debug);
 #define GST_CAT_DEFAULT gstwayland_debug
 
-G_DEFINE_TYPE (GstWlShmAllocator, gst_wl_shm_allocator, GST_TYPE_ALLOCATOR);
+G_DEFINE_TYPE (GstWlShmAllocator, gst_wl_shm_allocator, GST_TYPE_FD_ALLOCATOR);
 
 static GstMemory *
 gst_wl_shm_allocator_alloc (GstAllocator * allocator, gsize size,
@@ -44,8 +44,8 @@
   char filename[1024];
   static int init = 0;
   int fd;
-  gpointer data;
-  GstWlShmMemory *mem;
+  GstMemory *mem;
+  GstMapInfo info;
 
   /* TODO: make use of the allocation params, if necessary */
 
@@ -65,45 +65,28 @@
     return NULL;
   }
 
-  data = mmap (NULL, size, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);
-  if (data == MAP_FAILED) {
-    GST_ERROR_OBJECT (self, "mmap failed: %s", strerror (errno));
+  mem = gst_fd_allocator_alloc (allocator, fd, size,
+      GST_FD_MEMORY_FLAG_KEEP_MAPPED);
+  if (G_UNLIKELY (!mem)) {
+    GST_ERROR_OBJECT (self, "GstFdMemory allocation failed");
     close (fd);
     return NULL;
   }
 
+  /* we need to map the memory in order to unlink the file without losing it */
+  if (!gst_memory_map (mem, &info, GST_MAP_READWRITE)) {
+    GST_ERROR_OBJECT (self, "GstFdMemory map failed");
+    close (fd);
+    return NULL;
+  }
+
+  /* unmap will not really munmap(), we just
+   * need it to release the miniobject lock */
+  gst_memory_unmap (mem, &info);
+
   unlink (filename);
 
-  mem = g_slice_new0 (GstWlShmMemory);
-  gst_memory_init ((GstMemory *) mem, GST_MEMORY_FLAG_NO_SHARE, allocator, NULL,
-      size, 0, 0, size);
-  mem->data = data;
-  mem->fd = fd;
-
-  return (GstMemory *) mem;
-}
-
-static void
-gst_wl_shm_allocator_free (GstAllocator * allocator, GstMemory * memory)
-{
-  GstWlShmMemory *shm_mem = (GstWlShmMemory *) memory;
-
-  if (shm_mem->fd != -1)
-    close (shm_mem->fd);
-  munmap (shm_mem->data, memory->maxsize);
-
-  g_slice_free (GstWlShmMemory, shm_mem);
-}
-
-static gpointer
-gst_wl_shm_mem_map (GstMemory * mem, gsize maxsize, GstMapFlags flags)
-{
-  return ((GstWlShmMemory *) mem)->data;
-}
-
-static void
-gst_wl_shm_mem_unmap (GstMemory * mem)
-{
+  return mem;
 }
 
 static void
@@ -112,17 +95,16 @@
   GstAllocatorClass *alloc_class = (GstAllocatorClass *) klass;
 
   alloc_class->alloc = GST_DEBUG_FUNCPTR (gst_wl_shm_allocator_alloc);
-  alloc_class->free = GST_DEBUG_FUNCPTR (gst_wl_shm_allocator_free);
 }
 
 static void
 gst_wl_shm_allocator_init (GstWlShmAllocator * self)
 {
-  self->parent_instance.mem_type = GST_ALLOCATOR_WL_SHM;
-  self->parent_instance.mem_map = gst_wl_shm_mem_map;
-  self->parent_instance.mem_unmap = gst_wl_shm_mem_unmap;
+  GstAllocator *alloc = GST_ALLOCATOR_CAST (self);
 
-  GST_OBJECT_FLAG_SET (self, GST_ALLOCATOR_FLAG_CUSTOM_ALLOC);
+  alloc->mem_type = GST_ALLOCATOR_WL_SHM;
+
+  GST_OBJECT_FLAG_UNSET (self, GST_ALLOCATOR_FLAG_CUSTOM_ALLOC);
 }
 
 void
@@ -148,7 +130,6 @@
 gst_wl_shm_memory_construct_wl_buffer (GstMemory * mem, GstWlDisplay * display,
     const GstVideoInfo * info)
 {
-  GstWlShmMemory *shm_mem = (GstWlShmMemory *) mem;
   gint width, height, stride;
   gsize size;
   enum wl_shm_format format;
@@ -163,18 +144,15 @@
 
   g_return_val_if_fail (gst_is_wl_shm_memory (mem), NULL);
   g_return_val_if_fail (size <= mem->size, NULL);
-  g_return_val_if_fail (shm_mem->fd != -1, NULL);
 
   GST_DEBUG_OBJECT (mem->allocator, "Creating wl_buffer of size %"
       G_GSSIZE_FORMAT " (%d x %d, stride %d), format %s", size, width, height,
       stride, gst_wl_shm_format_to_string (format));
 
-  wl_pool = wl_shm_create_pool (display->shm, shm_mem->fd, mem->size);
+  wl_pool = wl_shm_create_pool (display->shm, gst_fd_memory_get_fd (mem),
+      mem->size);
   wbuffer = wl_shm_pool_create_buffer (wl_pool, 0, width, height, stride,
       format);
-
-  close (shm_mem->fd);
-  shm_mem->fd = -1;
   wl_shm_pool_destroy (wl_pool);
 
   return wbuffer;
diff --git a/ext/wayland/wlshmallocator.h b/ext/wayland/wlshmallocator.h
index f12882c..07ae17f 100644
--- a/ext/wayland/wlshmallocator.h
+++ b/ext/wayland/wlshmallocator.h
@@ -24,6 +24,7 @@
 #define __GST_WL_SHM_ALLOCATOR_H__
 
 #include <gst/video/video.h>
+#include <gst/allocators/allocators.h>
 #include <wayland-client-protocol.h>
 #include "wldisplay.h"
 
@@ -38,26 +39,17 @@
 
 #define GST_ALLOCATOR_WL_SHM "wl_shm"
 
-typedef struct _GstWlShmMemory GstWlShmMemory;
 typedef struct _GstWlShmAllocator GstWlShmAllocator;
 typedef struct _GstWlShmAllocatorClass GstWlShmAllocatorClass;
 
-struct _GstWlShmMemory
-{
-  GstMemory parent;
-
-  gpointer data;
-  gint fd;
-};
-
 struct _GstWlShmAllocator
 {
-  GstAllocator parent_instance;
+  GstFdAllocator parent_instance;
 };
 
 struct _GstWlShmAllocatorClass
 {
-  GstAllocatorClass parent_class;
+  GstFdAllocatorClass parent_class;
 };
 
 GType gst_wl_shm_allocator_get_type (void);
diff --git a/ext/wayland/wlwindow.c b/ext/wayland/wlwindow.c
index a964335..79000ae 100644
--- a/ext/wayland/wlwindow.c
+++ b/ext/wayland/wlwindow.c
@@ -238,12 +238,15 @@
 gst_wl_window_resize_video_surface (GstWlWindow * window, gboolean commit)
 {
   GstVideoRectangle src = { 0, };
+  GstVideoRectangle dst = { 0, };
   GstVideoRectangle res;
 
   /* center the video_subsurface inside area_subsurface */
   src.w = window->video_width;
   src.h = window->video_height;
-  gst_video_sink_center_rect (src, window->render_rectangle, &res, TRUE);
+  dst.w = window->render_rectangle.w;
+  dst.h = window->render_rectangle.h;
+  gst_video_sink_center_rect (src, dst, &res, TRUE);
 
   wl_subsurface_set_position (window->video_subsurface, res.x, res.y);
   wl_viewport_set_destination (window->video_viewport, res.w, res.h);
diff --git a/ext/webp/Makefile.in b/ext/webp/Makefile.in
index 259988d..f64b913 100644
--- a/ext/webp/Makefile.in
+++ b/ext/webp/Makefile.in
@@ -116,16 +116,15 @@
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
 	$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
-	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gsettings.m4 \
-	$(top_srcdir)/m4/gst-fionread.m4 $(top_srcdir)/m4/gst-sdl.m4 \
-	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
-	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
-	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libgcrypt.m4 \
-	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
-	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
-	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
-	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
-	$(top_srcdir)/configure.ac
+	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gst-fionread.m4 \
+	$(top_srcdir)/m4/gst-sdl.m4 $(top_srcdir)/m4/iconv.m4 \
+	$(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \
+	$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
+	$(top_srcdir)/m4/libgcrypt.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
+	$(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \
@@ -276,6 +275,8 @@
 CLUTTER_X11_LIBS = @CLUTTER_X11_LIBS@
 CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
+CUDA_CFLAGS = @CUDA_CFLAGS@
+CUDA_LIBS = @CUDA_LIBS@
 CURL_CFLAGS = @CURL_CFLAGS@
 CURL_LIBS = @CURL_LIBS@
 CXX = @CXX@
@@ -313,6 +314,8 @@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
+EGL_CFLAGS = @EGL_CFLAGS@
+EGL_LIBS = @EGL_LIBS@
 EGREP = @EGREP@
 ERROR_CFLAGS = @ERROR_CFLAGS@
 ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
@@ -321,7 +324,6 @@
 EXIF_CFLAGS = @EXIF_CFLAGS@
 EXIF_LIBS = @EXIF_LIBS@
 FAAC_LIBS = @FAAC_LIBS@
-FAAD_IS_NEAAC = @FAAD_IS_NEAAC@
 FAAD_LIBS = @FAAD_LIBS@
 FFLAGS = @FFLAGS@
 FGREP = @FGREP@
@@ -340,8 +342,9 @@
 GIO_LIBS = @GIO_LIBS@
 GIO_UNIX_CFLAGS = @GIO_UNIX_CFLAGS@
 GIO_UNIX_LIBS = @GIO_UNIX_LIBS@
+GLES2_CFLAGS = @GLES2_CFLAGS@
+GLES2_LIBS = @GLES2_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
-GLIB_COMPILE_SCHEMAS = @GLIB_COMPILE_SCHEMAS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
@@ -358,16 +361,17 @@
 GMODULE_NO_EXPORT_LIBS = @GMODULE_NO_EXPORT_LIBS@
 GMSGFMT = @GMSGFMT@
 GMSGFMT_015 = @GMSGFMT_015@
+GNUSTL_CFLAGS = @GNUSTL_CFLAGS@
+GNUSTL_LIBS = @GNUSTL_LIBS@
 GRAPHENE_CFLAGS = @GRAPHENE_CFLAGS@
 GRAPHENE_LIBS = @GRAPHENE_LIBS@
 GREP = @GREP@
-GSETTINGS_CFLAGS = @GSETTINGS_CFLAGS@
-GSETTINGS_DISABLE_SCHEMAS_COMPILE = @GSETTINGS_DISABLE_SCHEMAS_COMPILE@
-GSETTINGS_LIBS = @GSETTINGS_LIBS@
 GSM_LIBS = @GSM_LIBS@
 GSTPB_PLUGINS_DIR = @GSTPB_PLUGINS_DIR@
 GSTPB_PREFIX = @GSTPB_PREFIX@
 GST_AGE = @GST_AGE@
+GST_ALLOCATORS_CFLAGS = @GST_ALLOCATORS_CFLAGS@
+GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
 GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
 GST_API_VERSION = @GST_API_VERSION@
 GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
@@ -393,6 +397,8 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PBUTILS_CFLAGS = @GST_PBUTILS_CFLAGS@
+GST_PBUTILS_LIBS = @GST_PBUTILS_LIBS@
 GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BAD_CFLAGS = @GST_PLUGINS_BAD_CFLAGS@
@@ -418,6 +424,8 @@
 GST_PREFIX = @GST_PREFIX@
 GST_REVISION = @GST_REVISION@
 GST_TOOLS_DIR = @GST_TOOLS_DIR@
+GST_VIDEO_CFLAGS = @GST_VIDEO_CFLAGS@
+GST_VIDEO_LIBS = @GST_VIDEO_LIBS@
 GTK3_CFLAGS = @GTK3_CFLAGS@
 GTK3_GL_CFLAGS = @GTK3_GL_CFLAGS@
 GTK3_GL_LIBS = @GTK3_GL_LIBS@
@@ -519,6 +527,7 @@
 LTLIBICONV = @LTLIBICONV@
 LTLIBINTL = @LTLIBINTL@
 LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
 MANIFEST_TOOL = @MANIFEST_TOOL@
@@ -532,8 +541,6 @@
 MODPLUG_LIBS = @MODPLUG_LIBS@
 MPEG2ENC_CFLAGS = @MPEG2ENC_CFLAGS@
 MPEG2ENC_LIBS = @MPEG2ENC_LIBS@
-MPG123_CFLAGS = @MPG123_CFLAGS@
-MPG123_LIBS = @MPG123_LIBS@
 MPLEX_CFLAGS = @MPLEX_CFLAGS@
 MPLEX_LDFLAGS = @MPLEX_LDFLAGS@
 MPLEX_LIBS = @MPLEX_LIBS@
@@ -549,6 +556,8 @@
 NETTLE_LIBS = @NETTLE_LIBS@
 NM = @NM@
 NMEDIT = @NMEDIT@
+NVENCODE_CFLAGS = @NVENCODE_CFLAGS@
+NVENCODE_LIBS = @NVENCODE_LIBS@
 OBJC = @OBJC@
 OBJCDEPMODE = @OBJCDEPMODE@
 OBJCFLAGS = @OBJCFLAGS@
@@ -606,16 +615,18 @@
 PYTHON_PLATFORM = @PYTHON_PLATFORM@
 PYTHON_PREFIX = @PYTHON_PREFIX@
 PYTHON_VERSION = @PYTHON_VERSION@
+QT_ANDROID_CFLAGS = @QT_ANDROID_CFLAGS@
+QT_ANDROID_LIBS = @QT_ANDROID_LIBS@
 QT_CFLAGS = @QT_CFLAGS@
 QT_LIBS = @QT_LIBS@
+QT_MAC_CFLAGS = @QT_MAC_CFLAGS@
+QT_MAC_LIBS = @QT_MAC_LIBS@
 QT_WAYLAND_CFLAGS = @QT_WAYLAND_CFLAGS@
 QT_WAYLAND_LIBS = @QT_WAYLAND_LIBS@
 QT_X11_CFLAGS = @QT_X11_CFLAGS@
 QT_X11_LIBS = @QT_X11_LIBS@
 RANLIB = @RANLIB@
 RCC = @RCC@
-RSVG_2_36_2_CFLAGS = @RSVG_2_36_2_CFLAGS@
-RSVG_2_36_2_LIBS = @RSVG_2_36_2_LIBS@
 RSVG_CFLAGS = @RSVG_CFLAGS@
 RSVG_LIBS = @RSVG_LIBS@
 RTMP_CFLAGS = @RTMP_CFLAGS@
@@ -667,6 +678,7 @@
 VOAACENC_LIBS = @VOAACENC_LIBS@
 VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
 VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VULKAN_LIBS = @VULKAN_LIBS@
 WARNING_CFLAGS = @WARNING_CFLAGS@
 WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
 WARNING_OBJCFLAGS = @WARNING_OBJCFLAGS@
@@ -677,6 +689,7 @@
 WAYLAND_LIBS = @WAYLAND_LIBS@
 WEBP_CFLAGS = @WEBP_CFLAGS@
 WEBP_LIBS = @WEBP_LIBS@
+WGET = @WGET@
 WILDMIDI_CFLAGS = @WILDMIDI_CFLAGS@
 WILDMIDI_LIBS = @WILDMIDI_LIBS@
 WINKS_LIBS = @WINKS_LIBS@
@@ -686,6 +699,8 @@
 X11_LIBS = @X11_LIBS@
 X265_CFLAGS = @X265_CFLAGS@
 X265_LIBS = @X265_LIBS@
+XCB_CFLAGS = @XCB_CFLAGS@
+XCB_LIBS = @XCB_LIBS@
 XCOMPOSITE_CFLAGS = @XCOMPOSITE_CFLAGS@
 XCOMPOSITE_LIBS = @XCOMPOSITE_LIBS@
 XGETTEXT = @XGETTEXT@
@@ -723,7 +738,6 @@
 docdir = @docdir@
 dvidir = @dvidir@
 exec_prefix = @exec_prefix@
-gsettingsschemadir = @gsettingsschemadir@
 host = @host@
 host_alias = @host_alias@
 host_cpu = @host_cpu@
diff --git a/ext/x265/Makefile.in b/ext/x265/Makefile.in
index 3bffdd3..be6f2d2 100644
--- a/ext/x265/Makefile.in
+++ b/ext/x265/Makefile.in
@@ -116,16 +116,15 @@
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
 	$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
-	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gsettings.m4 \
-	$(top_srcdir)/m4/gst-fionread.m4 $(top_srcdir)/m4/gst-sdl.m4 \
-	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
-	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
-	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libgcrypt.m4 \
-	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
-	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
-	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
-	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
-	$(top_srcdir)/configure.ac
+	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gst-fionread.m4 \
+	$(top_srcdir)/m4/gst-sdl.m4 $(top_srcdir)/m4/iconv.m4 \
+	$(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \
+	$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
+	$(top_srcdir)/m4/libgcrypt.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
+	$(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \
@@ -274,6 +273,8 @@
 CLUTTER_X11_LIBS = @CLUTTER_X11_LIBS@
 CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
+CUDA_CFLAGS = @CUDA_CFLAGS@
+CUDA_LIBS = @CUDA_LIBS@
 CURL_CFLAGS = @CURL_CFLAGS@
 CURL_LIBS = @CURL_LIBS@
 CXX = @CXX@
@@ -311,6 +312,8 @@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
+EGL_CFLAGS = @EGL_CFLAGS@
+EGL_LIBS = @EGL_LIBS@
 EGREP = @EGREP@
 ERROR_CFLAGS = @ERROR_CFLAGS@
 ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
@@ -319,7 +322,6 @@
 EXIF_CFLAGS = @EXIF_CFLAGS@
 EXIF_LIBS = @EXIF_LIBS@
 FAAC_LIBS = @FAAC_LIBS@
-FAAD_IS_NEAAC = @FAAD_IS_NEAAC@
 FAAD_LIBS = @FAAD_LIBS@
 FFLAGS = @FFLAGS@
 FGREP = @FGREP@
@@ -338,8 +340,9 @@
 GIO_LIBS = @GIO_LIBS@
 GIO_UNIX_CFLAGS = @GIO_UNIX_CFLAGS@
 GIO_UNIX_LIBS = @GIO_UNIX_LIBS@
+GLES2_CFLAGS = @GLES2_CFLAGS@
+GLES2_LIBS = @GLES2_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
-GLIB_COMPILE_SCHEMAS = @GLIB_COMPILE_SCHEMAS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
@@ -356,16 +359,17 @@
 GMODULE_NO_EXPORT_LIBS = @GMODULE_NO_EXPORT_LIBS@
 GMSGFMT = @GMSGFMT@
 GMSGFMT_015 = @GMSGFMT_015@
+GNUSTL_CFLAGS = @GNUSTL_CFLAGS@
+GNUSTL_LIBS = @GNUSTL_LIBS@
 GRAPHENE_CFLAGS = @GRAPHENE_CFLAGS@
 GRAPHENE_LIBS = @GRAPHENE_LIBS@
 GREP = @GREP@
-GSETTINGS_CFLAGS = @GSETTINGS_CFLAGS@
-GSETTINGS_DISABLE_SCHEMAS_COMPILE = @GSETTINGS_DISABLE_SCHEMAS_COMPILE@
-GSETTINGS_LIBS = @GSETTINGS_LIBS@
 GSM_LIBS = @GSM_LIBS@
 GSTPB_PLUGINS_DIR = @GSTPB_PLUGINS_DIR@
 GSTPB_PREFIX = @GSTPB_PREFIX@
 GST_AGE = @GST_AGE@
+GST_ALLOCATORS_CFLAGS = @GST_ALLOCATORS_CFLAGS@
+GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
 GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
 GST_API_VERSION = @GST_API_VERSION@
 GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
@@ -391,6 +395,8 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PBUTILS_CFLAGS = @GST_PBUTILS_CFLAGS@
+GST_PBUTILS_LIBS = @GST_PBUTILS_LIBS@
 GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BAD_CFLAGS = @GST_PLUGINS_BAD_CFLAGS@
@@ -416,6 +422,8 @@
 GST_PREFIX = @GST_PREFIX@
 GST_REVISION = @GST_REVISION@
 GST_TOOLS_DIR = @GST_TOOLS_DIR@
+GST_VIDEO_CFLAGS = @GST_VIDEO_CFLAGS@
+GST_VIDEO_LIBS = @GST_VIDEO_LIBS@
 GTK3_CFLAGS = @GTK3_CFLAGS@
 GTK3_GL_CFLAGS = @GTK3_GL_CFLAGS@
 GTK3_GL_LIBS = @GTK3_GL_LIBS@
@@ -517,6 +525,7 @@
 LTLIBICONV = @LTLIBICONV@
 LTLIBINTL = @LTLIBINTL@
 LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
 MANIFEST_TOOL = @MANIFEST_TOOL@
@@ -530,8 +539,6 @@
 MODPLUG_LIBS = @MODPLUG_LIBS@
 MPEG2ENC_CFLAGS = @MPEG2ENC_CFLAGS@
 MPEG2ENC_LIBS = @MPEG2ENC_LIBS@
-MPG123_CFLAGS = @MPG123_CFLAGS@
-MPG123_LIBS = @MPG123_LIBS@
 MPLEX_CFLAGS = @MPLEX_CFLAGS@
 MPLEX_LDFLAGS = @MPLEX_LDFLAGS@
 MPLEX_LIBS = @MPLEX_LIBS@
@@ -547,6 +554,8 @@
 NETTLE_LIBS = @NETTLE_LIBS@
 NM = @NM@
 NMEDIT = @NMEDIT@
+NVENCODE_CFLAGS = @NVENCODE_CFLAGS@
+NVENCODE_LIBS = @NVENCODE_LIBS@
 OBJC = @OBJC@
 OBJCDEPMODE = @OBJCDEPMODE@
 OBJCFLAGS = @OBJCFLAGS@
@@ -604,16 +613,18 @@
 PYTHON_PLATFORM = @PYTHON_PLATFORM@
 PYTHON_PREFIX = @PYTHON_PREFIX@
 PYTHON_VERSION = @PYTHON_VERSION@
+QT_ANDROID_CFLAGS = @QT_ANDROID_CFLAGS@
+QT_ANDROID_LIBS = @QT_ANDROID_LIBS@
 QT_CFLAGS = @QT_CFLAGS@
 QT_LIBS = @QT_LIBS@
+QT_MAC_CFLAGS = @QT_MAC_CFLAGS@
+QT_MAC_LIBS = @QT_MAC_LIBS@
 QT_WAYLAND_CFLAGS = @QT_WAYLAND_CFLAGS@
 QT_WAYLAND_LIBS = @QT_WAYLAND_LIBS@
 QT_X11_CFLAGS = @QT_X11_CFLAGS@
 QT_X11_LIBS = @QT_X11_LIBS@
 RANLIB = @RANLIB@
 RCC = @RCC@
-RSVG_2_36_2_CFLAGS = @RSVG_2_36_2_CFLAGS@
-RSVG_2_36_2_LIBS = @RSVG_2_36_2_LIBS@
 RSVG_CFLAGS = @RSVG_CFLAGS@
 RSVG_LIBS = @RSVG_LIBS@
 RTMP_CFLAGS = @RTMP_CFLAGS@
@@ -665,6 +676,7 @@
 VOAACENC_LIBS = @VOAACENC_LIBS@
 VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
 VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VULKAN_LIBS = @VULKAN_LIBS@
 WARNING_CFLAGS = @WARNING_CFLAGS@
 WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
 WARNING_OBJCFLAGS = @WARNING_OBJCFLAGS@
@@ -675,6 +687,7 @@
 WAYLAND_LIBS = @WAYLAND_LIBS@
 WEBP_CFLAGS = @WEBP_CFLAGS@
 WEBP_LIBS = @WEBP_LIBS@
+WGET = @WGET@
 WILDMIDI_CFLAGS = @WILDMIDI_CFLAGS@
 WILDMIDI_LIBS = @WILDMIDI_LIBS@
 WINKS_LIBS = @WINKS_LIBS@
@@ -684,6 +697,8 @@
 X11_LIBS = @X11_LIBS@
 X265_CFLAGS = @X265_CFLAGS@
 X265_LIBS = @X265_LIBS@
+XCB_CFLAGS = @XCB_CFLAGS@
+XCB_LIBS = @XCB_LIBS@
 XCOMPOSITE_CFLAGS = @XCOMPOSITE_CFLAGS@
 XCOMPOSITE_LIBS = @XCOMPOSITE_LIBS@
 XGETTEXT = @XGETTEXT@
@@ -721,7 +736,6 @@
 docdir = @docdir@
 dvidir = @dvidir@
 exec_prefix = @exec_prefix@
-gsettingsschemadir = @gsettingsschemadir@
 host = @host@
 host_alias = @host_alias@
 host_cpu = @host_cpu@
diff --git a/ext/x265/gstx265enc.h b/ext/x265/gstx265enc.h
index 58ba7c0..66a8135 100644
--- a/ext/x265/gstx265enc.h
+++ b/ext/x265/gstx265enc.h
@@ -25,7 +25,6 @@
 #include <gst/gst.h>
 #include <gst/video/video.h>
 #include <gst/video/gstvideoencoder.h>
-#include "_stdint.h"
 #include <x265.h>
 
 G_BEGIN_DECLS
diff --git a/ext/xvid/Makefile.in b/ext/xvid/Makefile.in
index 011619e..d4c120d 100644
--- a/ext/xvid/Makefile.in
+++ b/ext/xvid/Makefile.in
@@ -116,16 +116,15 @@
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
 	$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
-	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gsettings.m4 \
-	$(top_srcdir)/m4/gst-fionread.m4 $(top_srcdir)/m4/gst-sdl.m4 \
-	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
-	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
-	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libgcrypt.m4 \
-	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
-	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
-	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
-	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
-	$(top_srcdir)/configure.ac
+	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gst-fionread.m4 \
+	$(top_srcdir)/m4/gst-sdl.m4 $(top_srcdir)/m4/iconv.m4 \
+	$(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \
+	$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
+	$(top_srcdir)/m4/libgcrypt.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
+	$(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \
@@ -275,6 +274,8 @@
 CLUTTER_X11_LIBS = @CLUTTER_X11_LIBS@
 CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
+CUDA_CFLAGS = @CUDA_CFLAGS@
+CUDA_LIBS = @CUDA_LIBS@
 CURL_CFLAGS = @CURL_CFLAGS@
 CURL_LIBS = @CURL_LIBS@
 CXX = @CXX@
@@ -312,6 +313,8 @@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
+EGL_CFLAGS = @EGL_CFLAGS@
+EGL_LIBS = @EGL_LIBS@
 EGREP = @EGREP@
 ERROR_CFLAGS = @ERROR_CFLAGS@
 ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
@@ -320,7 +323,6 @@
 EXIF_CFLAGS = @EXIF_CFLAGS@
 EXIF_LIBS = @EXIF_LIBS@
 FAAC_LIBS = @FAAC_LIBS@
-FAAD_IS_NEAAC = @FAAD_IS_NEAAC@
 FAAD_LIBS = @FAAD_LIBS@
 FFLAGS = @FFLAGS@
 FGREP = @FGREP@
@@ -339,8 +341,9 @@
 GIO_LIBS = @GIO_LIBS@
 GIO_UNIX_CFLAGS = @GIO_UNIX_CFLAGS@
 GIO_UNIX_LIBS = @GIO_UNIX_LIBS@
+GLES2_CFLAGS = @GLES2_CFLAGS@
+GLES2_LIBS = @GLES2_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
-GLIB_COMPILE_SCHEMAS = @GLIB_COMPILE_SCHEMAS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
@@ -357,16 +360,17 @@
 GMODULE_NO_EXPORT_LIBS = @GMODULE_NO_EXPORT_LIBS@
 GMSGFMT = @GMSGFMT@
 GMSGFMT_015 = @GMSGFMT_015@
+GNUSTL_CFLAGS = @GNUSTL_CFLAGS@
+GNUSTL_LIBS = @GNUSTL_LIBS@
 GRAPHENE_CFLAGS = @GRAPHENE_CFLAGS@
 GRAPHENE_LIBS = @GRAPHENE_LIBS@
 GREP = @GREP@
-GSETTINGS_CFLAGS = @GSETTINGS_CFLAGS@
-GSETTINGS_DISABLE_SCHEMAS_COMPILE = @GSETTINGS_DISABLE_SCHEMAS_COMPILE@
-GSETTINGS_LIBS = @GSETTINGS_LIBS@
 GSM_LIBS = @GSM_LIBS@
 GSTPB_PLUGINS_DIR = @GSTPB_PLUGINS_DIR@
 GSTPB_PREFIX = @GSTPB_PREFIX@
 GST_AGE = @GST_AGE@
+GST_ALLOCATORS_CFLAGS = @GST_ALLOCATORS_CFLAGS@
+GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
 GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
 GST_API_VERSION = @GST_API_VERSION@
 GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
@@ -392,6 +396,8 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PBUTILS_CFLAGS = @GST_PBUTILS_CFLAGS@
+GST_PBUTILS_LIBS = @GST_PBUTILS_LIBS@
 GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BAD_CFLAGS = @GST_PLUGINS_BAD_CFLAGS@
@@ -417,6 +423,8 @@
 GST_PREFIX = @GST_PREFIX@
 GST_REVISION = @GST_REVISION@
 GST_TOOLS_DIR = @GST_TOOLS_DIR@
+GST_VIDEO_CFLAGS = @GST_VIDEO_CFLAGS@
+GST_VIDEO_LIBS = @GST_VIDEO_LIBS@
 GTK3_CFLAGS = @GTK3_CFLAGS@
 GTK3_GL_CFLAGS = @GTK3_GL_CFLAGS@
 GTK3_GL_LIBS = @GTK3_GL_LIBS@
@@ -518,6 +526,7 @@
 LTLIBICONV = @LTLIBICONV@
 LTLIBINTL = @LTLIBINTL@
 LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
 MANIFEST_TOOL = @MANIFEST_TOOL@
@@ -531,8 +540,6 @@
 MODPLUG_LIBS = @MODPLUG_LIBS@
 MPEG2ENC_CFLAGS = @MPEG2ENC_CFLAGS@
 MPEG2ENC_LIBS = @MPEG2ENC_LIBS@
-MPG123_CFLAGS = @MPG123_CFLAGS@
-MPG123_LIBS = @MPG123_LIBS@
 MPLEX_CFLAGS = @MPLEX_CFLAGS@
 MPLEX_LDFLAGS = @MPLEX_LDFLAGS@
 MPLEX_LIBS = @MPLEX_LIBS@
@@ -548,6 +555,8 @@
 NETTLE_LIBS = @NETTLE_LIBS@
 NM = @NM@
 NMEDIT = @NMEDIT@
+NVENCODE_CFLAGS = @NVENCODE_CFLAGS@
+NVENCODE_LIBS = @NVENCODE_LIBS@
 OBJC = @OBJC@
 OBJCDEPMODE = @OBJCDEPMODE@
 OBJCFLAGS = @OBJCFLAGS@
@@ -605,16 +614,18 @@
 PYTHON_PLATFORM = @PYTHON_PLATFORM@
 PYTHON_PREFIX = @PYTHON_PREFIX@
 PYTHON_VERSION = @PYTHON_VERSION@
+QT_ANDROID_CFLAGS = @QT_ANDROID_CFLAGS@
+QT_ANDROID_LIBS = @QT_ANDROID_LIBS@
 QT_CFLAGS = @QT_CFLAGS@
 QT_LIBS = @QT_LIBS@
+QT_MAC_CFLAGS = @QT_MAC_CFLAGS@
+QT_MAC_LIBS = @QT_MAC_LIBS@
 QT_WAYLAND_CFLAGS = @QT_WAYLAND_CFLAGS@
 QT_WAYLAND_LIBS = @QT_WAYLAND_LIBS@
 QT_X11_CFLAGS = @QT_X11_CFLAGS@
 QT_X11_LIBS = @QT_X11_LIBS@
 RANLIB = @RANLIB@
 RCC = @RCC@
-RSVG_2_36_2_CFLAGS = @RSVG_2_36_2_CFLAGS@
-RSVG_2_36_2_LIBS = @RSVG_2_36_2_LIBS@
 RSVG_CFLAGS = @RSVG_CFLAGS@
 RSVG_LIBS = @RSVG_LIBS@
 RTMP_CFLAGS = @RTMP_CFLAGS@
@@ -666,6 +677,7 @@
 VOAACENC_LIBS = @VOAACENC_LIBS@
 VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
 VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VULKAN_LIBS = @VULKAN_LIBS@
 WARNING_CFLAGS = @WARNING_CFLAGS@
 WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
 WARNING_OBJCFLAGS = @WARNING_OBJCFLAGS@
@@ -676,6 +688,7 @@
 WAYLAND_LIBS = @WAYLAND_LIBS@
 WEBP_CFLAGS = @WEBP_CFLAGS@
 WEBP_LIBS = @WEBP_LIBS@
+WGET = @WGET@
 WILDMIDI_CFLAGS = @WILDMIDI_CFLAGS@
 WILDMIDI_LIBS = @WILDMIDI_LIBS@
 WINKS_LIBS = @WINKS_LIBS@
@@ -685,6 +698,8 @@
 X11_LIBS = @X11_LIBS@
 X265_CFLAGS = @X265_CFLAGS@
 X265_LIBS = @X265_LIBS@
+XCB_CFLAGS = @XCB_CFLAGS@
+XCB_LIBS = @XCB_LIBS@
 XCOMPOSITE_CFLAGS = @XCOMPOSITE_CFLAGS@
 XCOMPOSITE_LIBS = @XCOMPOSITE_LIBS@
 XGETTEXT = @XGETTEXT@
@@ -722,7 +737,6 @@
 docdir = @docdir@
 dvidir = @dvidir@
 exec_prefix = @exec_prefix@
-gsettingsschemadir = @gsettingsschemadir@
 host = @host@
 host_alias = @host_alias@
 host_cpu = @host_cpu@
diff --git a/ext/zbar/Makefile.in b/ext/zbar/Makefile.in
index 61081f8..f524574 100644
--- a/ext/zbar/Makefile.in
+++ b/ext/zbar/Makefile.in
@@ -116,16 +116,15 @@
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
 	$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
-	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gsettings.m4 \
-	$(top_srcdir)/m4/gst-fionread.m4 $(top_srcdir)/m4/gst-sdl.m4 \
-	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
-	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
-	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libgcrypt.m4 \
-	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
-	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
-	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
-	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
-	$(top_srcdir)/configure.ac
+	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gst-fionread.m4 \
+	$(top_srcdir)/m4/gst-sdl.m4 $(top_srcdir)/m4/iconv.m4 \
+	$(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \
+	$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
+	$(top_srcdir)/m4/libgcrypt.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
+	$(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \
@@ -275,6 +274,8 @@
 CLUTTER_X11_LIBS = @CLUTTER_X11_LIBS@
 CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
+CUDA_CFLAGS = @CUDA_CFLAGS@
+CUDA_LIBS = @CUDA_LIBS@
 CURL_CFLAGS = @CURL_CFLAGS@
 CURL_LIBS = @CURL_LIBS@
 CXX = @CXX@
@@ -312,6 +313,8 @@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
+EGL_CFLAGS = @EGL_CFLAGS@
+EGL_LIBS = @EGL_LIBS@
 EGREP = @EGREP@
 ERROR_CFLAGS = @ERROR_CFLAGS@
 ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
@@ -320,7 +323,6 @@
 EXIF_CFLAGS = @EXIF_CFLAGS@
 EXIF_LIBS = @EXIF_LIBS@
 FAAC_LIBS = @FAAC_LIBS@
-FAAD_IS_NEAAC = @FAAD_IS_NEAAC@
 FAAD_LIBS = @FAAD_LIBS@
 FFLAGS = @FFLAGS@
 FGREP = @FGREP@
@@ -339,8 +341,9 @@
 GIO_LIBS = @GIO_LIBS@
 GIO_UNIX_CFLAGS = @GIO_UNIX_CFLAGS@
 GIO_UNIX_LIBS = @GIO_UNIX_LIBS@
+GLES2_CFLAGS = @GLES2_CFLAGS@
+GLES2_LIBS = @GLES2_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
-GLIB_COMPILE_SCHEMAS = @GLIB_COMPILE_SCHEMAS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
@@ -357,16 +360,17 @@
 GMODULE_NO_EXPORT_LIBS = @GMODULE_NO_EXPORT_LIBS@
 GMSGFMT = @GMSGFMT@
 GMSGFMT_015 = @GMSGFMT_015@
+GNUSTL_CFLAGS = @GNUSTL_CFLAGS@
+GNUSTL_LIBS = @GNUSTL_LIBS@
 GRAPHENE_CFLAGS = @GRAPHENE_CFLAGS@
 GRAPHENE_LIBS = @GRAPHENE_LIBS@
 GREP = @GREP@
-GSETTINGS_CFLAGS = @GSETTINGS_CFLAGS@
-GSETTINGS_DISABLE_SCHEMAS_COMPILE = @GSETTINGS_DISABLE_SCHEMAS_COMPILE@
-GSETTINGS_LIBS = @GSETTINGS_LIBS@
 GSM_LIBS = @GSM_LIBS@
 GSTPB_PLUGINS_DIR = @GSTPB_PLUGINS_DIR@
 GSTPB_PREFIX = @GSTPB_PREFIX@
 GST_AGE = @GST_AGE@
+GST_ALLOCATORS_CFLAGS = @GST_ALLOCATORS_CFLAGS@
+GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
 GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
 GST_API_VERSION = @GST_API_VERSION@
 GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
@@ -392,6 +396,8 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PBUTILS_CFLAGS = @GST_PBUTILS_CFLAGS@
+GST_PBUTILS_LIBS = @GST_PBUTILS_LIBS@
 GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BAD_CFLAGS = @GST_PLUGINS_BAD_CFLAGS@
@@ -417,6 +423,8 @@
 GST_PREFIX = @GST_PREFIX@
 GST_REVISION = @GST_REVISION@
 GST_TOOLS_DIR = @GST_TOOLS_DIR@
+GST_VIDEO_CFLAGS = @GST_VIDEO_CFLAGS@
+GST_VIDEO_LIBS = @GST_VIDEO_LIBS@
 GTK3_CFLAGS = @GTK3_CFLAGS@
 GTK3_GL_CFLAGS = @GTK3_GL_CFLAGS@
 GTK3_GL_LIBS = @GTK3_GL_LIBS@
@@ -518,6 +526,7 @@
 LTLIBICONV = @LTLIBICONV@
 LTLIBINTL = @LTLIBINTL@
 LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
 MANIFEST_TOOL = @MANIFEST_TOOL@
@@ -531,8 +540,6 @@
 MODPLUG_LIBS = @MODPLUG_LIBS@
 MPEG2ENC_CFLAGS = @MPEG2ENC_CFLAGS@
 MPEG2ENC_LIBS = @MPEG2ENC_LIBS@
-MPG123_CFLAGS = @MPG123_CFLAGS@
-MPG123_LIBS = @MPG123_LIBS@
 MPLEX_CFLAGS = @MPLEX_CFLAGS@
 MPLEX_LDFLAGS = @MPLEX_LDFLAGS@
 MPLEX_LIBS = @MPLEX_LIBS@
@@ -548,6 +555,8 @@
 NETTLE_LIBS = @NETTLE_LIBS@
 NM = @NM@
 NMEDIT = @NMEDIT@
+NVENCODE_CFLAGS = @NVENCODE_CFLAGS@
+NVENCODE_LIBS = @NVENCODE_LIBS@
 OBJC = @OBJC@
 OBJCDEPMODE = @OBJCDEPMODE@
 OBJCFLAGS = @OBJCFLAGS@
@@ -605,16 +614,18 @@
 PYTHON_PLATFORM = @PYTHON_PLATFORM@
 PYTHON_PREFIX = @PYTHON_PREFIX@
 PYTHON_VERSION = @PYTHON_VERSION@
+QT_ANDROID_CFLAGS = @QT_ANDROID_CFLAGS@
+QT_ANDROID_LIBS = @QT_ANDROID_LIBS@
 QT_CFLAGS = @QT_CFLAGS@
 QT_LIBS = @QT_LIBS@
+QT_MAC_CFLAGS = @QT_MAC_CFLAGS@
+QT_MAC_LIBS = @QT_MAC_LIBS@
 QT_WAYLAND_CFLAGS = @QT_WAYLAND_CFLAGS@
 QT_WAYLAND_LIBS = @QT_WAYLAND_LIBS@
 QT_X11_CFLAGS = @QT_X11_CFLAGS@
 QT_X11_LIBS = @QT_X11_LIBS@
 RANLIB = @RANLIB@
 RCC = @RCC@
-RSVG_2_36_2_CFLAGS = @RSVG_2_36_2_CFLAGS@
-RSVG_2_36_2_LIBS = @RSVG_2_36_2_LIBS@
 RSVG_CFLAGS = @RSVG_CFLAGS@
 RSVG_LIBS = @RSVG_LIBS@
 RTMP_CFLAGS = @RTMP_CFLAGS@
@@ -666,6 +677,7 @@
 VOAACENC_LIBS = @VOAACENC_LIBS@
 VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
 VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VULKAN_LIBS = @VULKAN_LIBS@
 WARNING_CFLAGS = @WARNING_CFLAGS@
 WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
 WARNING_OBJCFLAGS = @WARNING_OBJCFLAGS@
@@ -676,6 +688,7 @@
 WAYLAND_LIBS = @WAYLAND_LIBS@
 WEBP_CFLAGS = @WEBP_CFLAGS@
 WEBP_LIBS = @WEBP_LIBS@
+WGET = @WGET@
 WILDMIDI_CFLAGS = @WILDMIDI_CFLAGS@
 WILDMIDI_LIBS = @WILDMIDI_LIBS@
 WINKS_LIBS = @WINKS_LIBS@
@@ -685,6 +698,8 @@
 X11_LIBS = @X11_LIBS@
 X265_CFLAGS = @X265_CFLAGS@
 X265_LIBS = @X265_LIBS@
+XCB_CFLAGS = @XCB_CFLAGS@
+XCB_LIBS = @XCB_LIBS@
 XCOMPOSITE_CFLAGS = @XCOMPOSITE_CFLAGS@
 XCOMPOSITE_LIBS = @XCOMPOSITE_LIBS@
 XGETTEXT = @XGETTEXT@
@@ -722,7 +737,6 @@
 docdir = @docdir@
 dvidir = @dvidir@
 exec_prefix = @exec_prefix@
-gsettingsschemadir = @gsettingsschemadir@
 host = @host@
 host_alias = @host_alias@
 host_cpu = @host_cpu@
diff --git a/ext/zbar/gstzbar.c b/ext/zbar/gstzbar.c
index 2bb0a7d..62fb106 100644
--- a/ext/zbar/gstzbar.c
+++ b/ext/zbar/gstzbar.c
@@ -71,10 +71,10 @@
  * <refsect2>
  * <title>Example launch lines</title>
  * |[
- * gst-launch -m v4l2src ! videoconvert ! zbar ! videoconvert ! xvimagesink
+ * gst-launch-1.0 -m v4l2src ! videoconvert ! zbar ! videoconvert ! xvimagesink
  * ]| This pipeline will detect barcodes and send them as messages.
  * |[
- * gst-launch -m v4l2src ! tee name=t ! queue ! videoconvert ! zbar ! fakesink t. ! queue ! xvimagesink
+ * gst-launch-1.0 -m v4l2src ! tee name=t ! queue ! videoconvert ! zbar ! fakesink t. ! queue ! xvimagesink
  * ]| Same as above, but running the filter on a branch to keep the display in color
  * </refsect2>
  */
diff --git a/gst-libs/Makefile.in b/gst-libs/Makefile.in
index c5e573b..a37fd22 100644
--- a/gst-libs/Makefile.in
+++ b/gst-libs/Makefile.in
@@ -114,16 +114,15 @@
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
 	$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
-	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gsettings.m4 \
-	$(top_srcdir)/m4/gst-fionread.m4 $(top_srcdir)/m4/gst-sdl.m4 \
-	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
-	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
-	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libgcrypt.m4 \
-	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
-	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
-	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
-	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
-	$(top_srcdir)/configure.ac
+	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gst-fionread.m4 \
+	$(top_srcdir)/m4/gst-sdl.m4 $(top_srcdir)/m4/iconv.m4 \
+	$(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \
+	$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
+	$(top_srcdir)/m4/libgcrypt.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
+	$(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
@@ -248,6 +247,8 @@
 CLUTTER_X11_LIBS = @CLUTTER_X11_LIBS@
 CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
+CUDA_CFLAGS = @CUDA_CFLAGS@
+CUDA_LIBS = @CUDA_LIBS@
 CURL_CFLAGS = @CURL_CFLAGS@
 CURL_LIBS = @CURL_LIBS@
 CXX = @CXX@
@@ -285,6 +286,8 @@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
+EGL_CFLAGS = @EGL_CFLAGS@
+EGL_LIBS = @EGL_LIBS@
 EGREP = @EGREP@
 ERROR_CFLAGS = @ERROR_CFLAGS@
 ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
@@ -293,7 +296,6 @@
 EXIF_CFLAGS = @EXIF_CFLAGS@
 EXIF_LIBS = @EXIF_LIBS@
 FAAC_LIBS = @FAAC_LIBS@
-FAAD_IS_NEAAC = @FAAD_IS_NEAAC@
 FAAD_LIBS = @FAAD_LIBS@
 FFLAGS = @FFLAGS@
 FGREP = @FGREP@
@@ -312,8 +314,9 @@
 GIO_LIBS = @GIO_LIBS@
 GIO_UNIX_CFLAGS = @GIO_UNIX_CFLAGS@
 GIO_UNIX_LIBS = @GIO_UNIX_LIBS@
+GLES2_CFLAGS = @GLES2_CFLAGS@
+GLES2_LIBS = @GLES2_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
-GLIB_COMPILE_SCHEMAS = @GLIB_COMPILE_SCHEMAS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
@@ -330,16 +333,17 @@
 GMODULE_NO_EXPORT_LIBS = @GMODULE_NO_EXPORT_LIBS@
 GMSGFMT = @GMSGFMT@
 GMSGFMT_015 = @GMSGFMT_015@
+GNUSTL_CFLAGS = @GNUSTL_CFLAGS@
+GNUSTL_LIBS = @GNUSTL_LIBS@
 GRAPHENE_CFLAGS = @GRAPHENE_CFLAGS@
 GRAPHENE_LIBS = @GRAPHENE_LIBS@
 GREP = @GREP@
-GSETTINGS_CFLAGS = @GSETTINGS_CFLAGS@
-GSETTINGS_DISABLE_SCHEMAS_COMPILE = @GSETTINGS_DISABLE_SCHEMAS_COMPILE@
-GSETTINGS_LIBS = @GSETTINGS_LIBS@
 GSM_LIBS = @GSM_LIBS@
 GSTPB_PLUGINS_DIR = @GSTPB_PLUGINS_DIR@
 GSTPB_PREFIX = @GSTPB_PREFIX@
 GST_AGE = @GST_AGE@
+GST_ALLOCATORS_CFLAGS = @GST_ALLOCATORS_CFLAGS@
+GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
 GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
 GST_API_VERSION = @GST_API_VERSION@
 GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
@@ -365,6 +369,8 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PBUTILS_CFLAGS = @GST_PBUTILS_CFLAGS@
+GST_PBUTILS_LIBS = @GST_PBUTILS_LIBS@
 GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BAD_CFLAGS = @GST_PLUGINS_BAD_CFLAGS@
@@ -390,6 +396,8 @@
 GST_PREFIX = @GST_PREFIX@
 GST_REVISION = @GST_REVISION@
 GST_TOOLS_DIR = @GST_TOOLS_DIR@
+GST_VIDEO_CFLAGS = @GST_VIDEO_CFLAGS@
+GST_VIDEO_LIBS = @GST_VIDEO_LIBS@
 GTK3_CFLAGS = @GTK3_CFLAGS@
 GTK3_GL_CFLAGS = @GTK3_GL_CFLAGS@
 GTK3_GL_LIBS = @GTK3_GL_LIBS@
@@ -491,6 +499,7 @@
 LTLIBICONV = @LTLIBICONV@
 LTLIBINTL = @LTLIBINTL@
 LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
 MANIFEST_TOOL = @MANIFEST_TOOL@
@@ -504,8 +513,6 @@
 MODPLUG_LIBS = @MODPLUG_LIBS@
 MPEG2ENC_CFLAGS = @MPEG2ENC_CFLAGS@
 MPEG2ENC_LIBS = @MPEG2ENC_LIBS@
-MPG123_CFLAGS = @MPG123_CFLAGS@
-MPG123_LIBS = @MPG123_LIBS@
 MPLEX_CFLAGS = @MPLEX_CFLAGS@
 MPLEX_LDFLAGS = @MPLEX_LDFLAGS@
 MPLEX_LIBS = @MPLEX_LIBS@
@@ -521,6 +528,8 @@
 NETTLE_LIBS = @NETTLE_LIBS@
 NM = @NM@
 NMEDIT = @NMEDIT@
+NVENCODE_CFLAGS = @NVENCODE_CFLAGS@
+NVENCODE_LIBS = @NVENCODE_LIBS@
 OBJC = @OBJC@
 OBJCDEPMODE = @OBJCDEPMODE@
 OBJCFLAGS = @OBJCFLAGS@
@@ -578,16 +587,18 @@
 PYTHON_PLATFORM = @PYTHON_PLATFORM@
 PYTHON_PREFIX = @PYTHON_PREFIX@
 PYTHON_VERSION = @PYTHON_VERSION@
+QT_ANDROID_CFLAGS = @QT_ANDROID_CFLAGS@
+QT_ANDROID_LIBS = @QT_ANDROID_LIBS@
 QT_CFLAGS = @QT_CFLAGS@
 QT_LIBS = @QT_LIBS@
+QT_MAC_CFLAGS = @QT_MAC_CFLAGS@
+QT_MAC_LIBS = @QT_MAC_LIBS@
 QT_WAYLAND_CFLAGS = @QT_WAYLAND_CFLAGS@
 QT_WAYLAND_LIBS = @QT_WAYLAND_LIBS@
 QT_X11_CFLAGS = @QT_X11_CFLAGS@
 QT_X11_LIBS = @QT_X11_LIBS@
 RANLIB = @RANLIB@
 RCC = @RCC@
-RSVG_2_36_2_CFLAGS = @RSVG_2_36_2_CFLAGS@
-RSVG_2_36_2_LIBS = @RSVG_2_36_2_LIBS@
 RSVG_CFLAGS = @RSVG_CFLAGS@
 RSVG_LIBS = @RSVG_LIBS@
 RTMP_CFLAGS = @RTMP_CFLAGS@
@@ -639,6 +650,7 @@
 VOAACENC_LIBS = @VOAACENC_LIBS@
 VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
 VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VULKAN_LIBS = @VULKAN_LIBS@
 WARNING_CFLAGS = @WARNING_CFLAGS@
 WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
 WARNING_OBJCFLAGS = @WARNING_OBJCFLAGS@
@@ -649,6 +661,7 @@
 WAYLAND_LIBS = @WAYLAND_LIBS@
 WEBP_CFLAGS = @WEBP_CFLAGS@
 WEBP_LIBS = @WEBP_LIBS@
+WGET = @WGET@
 WILDMIDI_CFLAGS = @WILDMIDI_CFLAGS@
 WILDMIDI_LIBS = @WILDMIDI_LIBS@
 WINKS_LIBS = @WINKS_LIBS@
@@ -658,6 +671,8 @@
 X11_LIBS = @X11_LIBS@
 X265_CFLAGS = @X265_CFLAGS@
 X265_LIBS = @X265_LIBS@
+XCB_CFLAGS = @XCB_CFLAGS@
+XCB_LIBS = @XCB_LIBS@
 XCOMPOSITE_CFLAGS = @XCOMPOSITE_CFLAGS@
 XCOMPOSITE_LIBS = @XCOMPOSITE_LIBS@
 XGETTEXT = @XGETTEXT@
@@ -695,7 +710,6 @@
 docdir = @docdir@
 dvidir = @dvidir@
 exec_prefix = @exec_prefix@
-gsettingsschemadir = @gsettingsschemadir@
 host = @host@
 host_alias = @host_alias@
 host_cpu = @host_cpu@
diff --git a/gst-libs/gst/Makefile.am b/gst-libs/gst/Makefile.am
index a7380f8..7d0b309 100644
--- a/gst-libs/gst/Makefile.am
+++ b/gst-libs/gst/Makefile.am
@@ -11,20 +11,20 @@
 endif
 
 SUBDIRS = uridownloader adaptivedemux interfaces basecamerabinsrc codecparsers \
-	 insertbin mpegts base video $(GL_DIR) $(WAYLAND_DIR)
+	 insertbin mpegts base video audio player $(GL_DIR) $(WAYLAND_DIR)
 
 noinst_HEADERS = gst-i18n-plugin.h gettext.h glib-compat-private.h
 DIST_SUBDIRS = uridownloader adaptivedemux interfaces gl basecamerabinsrc \
-	codecparsers insertbin mpegts wayland base video
+	codecparsers insertbin mpegts wayland base video audio player
 
 #dependencies
-video: base
+video, audio: base
 
 adaptivedemux: uridownloader
 
 INDEPENDENT_SUBDIRS = \
 	interfaces basecamerabinsrc codecparsers insertbin uridownloader \
-	mpegts base $(GL_DIR) $(WAYLAND_DIR)
+	mpegts base player $(GL_DIR) $(WAYLAND_DIR)
 
 .PHONY: independent-subdirs $(INDEPENDENT_SUBDIRS)
 
diff --git a/gst-libs/gst/Makefile.in b/gst-libs/gst/Makefile.in
index 1d8a7ae..3129dc7 100644
--- a/gst-libs/gst/Makefile.in
+++ b/gst-libs/gst/Makefile.in
@@ -115,16 +115,15 @@
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
 	$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
-	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gsettings.m4 \
-	$(top_srcdir)/m4/gst-fionread.m4 $(top_srcdir)/m4/gst-sdl.m4 \
-	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
-	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
-	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libgcrypt.m4 \
-	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
-	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
-	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
-	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
-	$(top_srcdir)/configure.ac
+	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gst-fionread.m4 \
+	$(top_srcdir)/m4/gst-sdl.m4 $(top_srcdir)/m4/iconv.m4 \
+	$(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \
+	$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
+	$(top_srcdir)/m4/libgcrypt.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
+	$(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \
@@ -250,6 +249,8 @@
 CLUTTER_X11_LIBS = @CLUTTER_X11_LIBS@
 CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
+CUDA_CFLAGS = @CUDA_CFLAGS@
+CUDA_LIBS = @CUDA_LIBS@
 CURL_CFLAGS = @CURL_CFLAGS@
 CURL_LIBS = @CURL_LIBS@
 CXX = @CXX@
@@ -287,6 +288,8 @@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
+EGL_CFLAGS = @EGL_CFLAGS@
+EGL_LIBS = @EGL_LIBS@
 EGREP = @EGREP@
 ERROR_CFLAGS = @ERROR_CFLAGS@
 ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
@@ -295,7 +298,6 @@
 EXIF_CFLAGS = @EXIF_CFLAGS@
 EXIF_LIBS = @EXIF_LIBS@
 FAAC_LIBS = @FAAC_LIBS@
-FAAD_IS_NEAAC = @FAAD_IS_NEAAC@
 FAAD_LIBS = @FAAD_LIBS@
 FFLAGS = @FFLAGS@
 FGREP = @FGREP@
@@ -314,8 +316,9 @@
 GIO_LIBS = @GIO_LIBS@
 GIO_UNIX_CFLAGS = @GIO_UNIX_CFLAGS@
 GIO_UNIX_LIBS = @GIO_UNIX_LIBS@
+GLES2_CFLAGS = @GLES2_CFLAGS@
+GLES2_LIBS = @GLES2_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
-GLIB_COMPILE_SCHEMAS = @GLIB_COMPILE_SCHEMAS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
@@ -332,16 +335,17 @@
 GMODULE_NO_EXPORT_LIBS = @GMODULE_NO_EXPORT_LIBS@
 GMSGFMT = @GMSGFMT@
 GMSGFMT_015 = @GMSGFMT_015@
+GNUSTL_CFLAGS = @GNUSTL_CFLAGS@
+GNUSTL_LIBS = @GNUSTL_LIBS@
 GRAPHENE_CFLAGS = @GRAPHENE_CFLAGS@
 GRAPHENE_LIBS = @GRAPHENE_LIBS@
 GREP = @GREP@
-GSETTINGS_CFLAGS = @GSETTINGS_CFLAGS@
-GSETTINGS_DISABLE_SCHEMAS_COMPILE = @GSETTINGS_DISABLE_SCHEMAS_COMPILE@
-GSETTINGS_LIBS = @GSETTINGS_LIBS@
 GSM_LIBS = @GSM_LIBS@
 GSTPB_PLUGINS_DIR = @GSTPB_PLUGINS_DIR@
 GSTPB_PREFIX = @GSTPB_PREFIX@
 GST_AGE = @GST_AGE@
+GST_ALLOCATORS_CFLAGS = @GST_ALLOCATORS_CFLAGS@
+GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
 GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
 GST_API_VERSION = @GST_API_VERSION@
 GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
@@ -367,6 +371,8 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PBUTILS_CFLAGS = @GST_PBUTILS_CFLAGS@
+GST_PBUTILS_LIBS = @GST_PBUTILS_LIBS@
 GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BAD_CFLAGS = @GST_PLUGINS_BAD_CFLAGS@
@@ -392,6 +398,8 @@
 GST_PREFIX = @GST_PREFIX@
 GST_REVISION = @GST_REVISION@
 GST_TOOLS_DIR = @GST_TOOLS_DIR@
+GST_VIDEO_CFLAGS = @GST_VIDEO_CFLAGS@
+GST_VIDEO_LIBS = @GST_VIDEO_LIBS@
 GTK3_CFLAGS = @GTK3_CFLAGS@
 GTK3_GL_CFLAGS = @GTK3_GL_CFLAGS@
 GTK3_GL_LIBS = @GTK3_GL_LIBS@
@@ -493,6 +501,7 @@
 LTLIBICONV = @LTLIBICONV@
 LTLIBINTL = @LTLIBINTL@
 LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
 MANIFEST_TOOL = @MANIFEST_TOOL@
@@ -506,8 +515,6 @@
 MODPLUG_LIBS = @MODPLUG_LIBS@
 MPEG2ENC_CFLAGS = @MPEG2ENC_CFLAGS@
 MPEG2ENC_LIBS = @MPEG2ENC_LIBS@
-MPG123_CFLAGS = @MPG123_CFLAGS@
-MPG123_LIBS = @MPG123_LIBS@
 MPLEX_CFLAGS = @MPLEX_CFLAGS@
 MPLEX_LDFLAGS = @MPLEX_LDFLAGS@
 MPLEX_LIBS = @MPLEX_LIBS@
@@ -523,6 +530,8 @@
 NETTLE_LIBS = @NETTLE_LIBS@
 NM = @NM@
 NMEDIT = @NMEDIT@
+NVENCODE_CFLAGS = @NVENCODE_CFLAGS@
+NVENCODE_LIBS = @NVENCODE_LIBS@
 OBJC = @OBJC@
 OBJCDEPMODE = @OBJCDEPMODE@
 OBJCFLAGS = @OBJCFLAGS@
@@ -580,16 +589,18 @@
 PYTHON_PLATFORM = @PYTHON_PLATFORM@
 PYTHON_PREFIX = @PYTHON_PREFIX@
 PYTHON_VERSION = @PYTHON_VERSION@
+QT_ANDROID_CFLAGS = @QT_ANDROID_CFLAGS@
+QT_ANDROID_LIBS = @QT_ANDROID_LIBS@
 QT_CFLAGS = @QT_CFLAGS@
 QT_LIBS = @QT_LIBS@
+QT_MAC_CFLAGS = @QT_MAC_CFLAGS@
+QT_MAC_LIBS = @QT_MAC_LIBS@
 QT_WAYLAND_CFLAGS = @QT_WAYLAND_CFLAGS@
 QT_WAYLAND_LIBS = @QT_WAYLAND_LIBS@
 QT_X11_CFLAGS = @QT_X11_CFLAGS@
 QT_X11_LIBS = @QT_X11_LIBS@
 RANLIB = @RANLIB@
 RCC = @RCC@
-RSVG_2_36_2_CFLAGS = @RSVG_2_36_2_CFLAGS@
-RSVG_2_36_2_LIBS = @RSVG_2_36_2_LIBS@
 RSVG_CFLAGS = @RSVG_CFLAGS@
 RSVG_LIBS = @RSVG_LIBS@
 RTMP_CFLAGS = @RTMP_CFLAGS@
@@ -641,6 +652,7 @@
 VOAACENC_LIBS = @VOAACENC_LIBS@
 VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
 VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VULKAN_LIBS = @VULKAN_LIBS@
 WARNING_CFLAGS = @WARNING_CFLAGS@
 WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
 WARNING_OBJCFLAGS = @WARNING_OBJCFLAGS@
@@ -651,6 +663,7 @@
 WAYLAND_LIBS = @WAYLAND_LIBS@
 WEBP_CFLAGS = @WEBP_CFLAGS@
 WEBP_LIBS = @WEBP_LIBS@
+WGET = @WGET@
 WILDMIDI_CFLAGS = @WILDMIDI_CFLAGS@
 WILDMIDI_LIBS = @WILDMIDI_LIBS@
 WINKS_LIBS = @WINKS_LIBS@
@@ -660,6 +673,8 @@
 X11_LIBS = @X11_LIBS@
 X265_CFLAGS = @X265_CFLAGS@
 X265_LIBS = @X265_LIBS@
+XCB_CFLAGS = @XCB_CFLAGS@
+XCB_LIBS = @XCB_LIBS@
 XCOMPOSITE_CFLAGS = @XCOMPOSITE_CFLAGS@
 XCOMPOSITE_LIBS = @XCOMPOSITE_LIBS@
 XGETTEXT = @XGETTEXT@
@@ -697,7 +712,6 @@
 docdir = @docdir@
 dvidir = @dvidir@
 exec_prefix = @exec_prefix@
-gsettingsschemadir = @gsettingsschemadir@
 host = @host@
 host_alias = @host_alias@
 host_cpu = @host_cpu@
@@ -741,15 +755,15 @@
 @USE_OPENGL_TRUE@GL_DIR = gl
 @USE_WAYLAND_TRUE@WAYLAND_DIR = wayland
 SUBDIRS = uridownloader adaptivedemux interfaces basecamerabinsrc codecparsers \
-	 insertbin mpegts base video $(GL_DIR) $(WAYLAND_DIR)
+	 insertbin mpegts base video audio player $(GL_DIR) $(WAYLAND_DIR)
 
 noinst_HEADERS = gst-i18n-plugin.h gettext.h glib-compat-private.h
 DIST_SUBDIRS = uridownloader adaptivedemux interfaces gl basecamerabinsrc \
-	codecparsers insertbin mpegts wayland base video
+	codecparsers insertbin mpegts wayland base video audio player
 
 INDEPENDENT_SUBDIRS = \
 	interfaces basecamerabinsrc codecparsers insertbin uridownloader \
-	mpegts base $(GL_DIR) $(WAYLAND_DIR)
+	mpegts base player $(GL_DIR) $(WAYLAND_DIR)
 
 all: all-recursive
 
@@ -1064,7 +1078,7 @@
 
 
 #dependencies
-video: base
+video, audio: base
 
 adaptivedemux: uridownloader
 
diff --git a/gst-libs/gst/adaptivedemux/Makefile.in b/gst-libs/gst/adaptivedemux/Makefile.in
index 001d8b5..8719883 100644
--- a/gst-libs/gst/adaptivedemux/Makefile.in
+++ b/gst-libs/gst/adaptivedemux/Makefile.in
@@ -116,16 +116,15 @@
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
 	$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
-	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gsettings.m4 \
-	$(top_srcdir)/m4/gst-fionread.m4 $(top_srcdir)/m4/gst-sdl.m4 \
-	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
-	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
-	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libgcrypt.m4 \
-	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
-	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
-	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
-	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
-	$(top_srcdir)/configure.ac
+	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gst-fionread.m4 \
+	$(top_srcdir)/m4/gst-sdl.m4 $(top_srcdir)/m4/iconv.m4 \
+	$(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \
+	$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
+	$(top_srcdir)/m4/libgcrypt.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
+	$(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \
@@ -278,6 +277,8 @@
 CLUTTER_X11_LIBS = @CLUTTER_X11_LIBS@
 CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
+CUDA_CFLAGS = @CUDA_CFLAGS@
+CUDA_LIBS = @CUDA_LIBS@
 CURL_CFLAGS = @CURL_CFLAGS@
 CURL_LIBS = @CURL_LIBS@
 CXX = @CXX@
@@ -315,6 +316,8 @@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
+EGL_CFLAGS = @EGL_CFLAGS@
+EGL_LIBS = @EGL_LIBS@
 EGREP = @EGREP@
 ERROR_CFLAGS = @ERROR_CFLAGS@
 ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
@@ -323,7 +326,6 @@
 EXIF_CFLAGS = @EXIF_CFLAGS@
 EXIF_LIBS = @EXIF_LIBS@
 FAAC_LIBS = @FAAC_LIBS@
-FAAD_IS_NEAAC = @FAAD_IS_NEAAC@
 FAAD_LIBS = @FAAD_LIBS@
 FFLAGS = @FFLAGS@
 FGREP = @FGREP@
@@ -342,8 +344,9 @@
 GIO_LIBS = @GIO_LIBS@
 GIO_UNIX_CFLAGS = @GIO_UNIX_CFLAGS@
 GIO_UNIX_LIBS = @GIO_UNIX_LIBS@
+GLES2_CFLAGS = @GLES2_CFLAGS@
+GLES2_LIBS = @GLES2_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
-GLIB_COMPILE_SCHEMAS = @GLIB_COMPILE_SCHEMAS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
@@ -360,16 +363,17 @@
 GMODULE_NO_EXPORT_LIBS = @GMODULE_NO_EXPORT_LIBS@
 GMSGFMT = @GMSGFMT@
 GMSGFMT_015 = @GMSGFMT_015@
+GNUSTL_CFLAGS = @GNUSTL_CFLAGS@
+GNUSTL_LIBS = @GNUSTL_LIBS@
 GRAPHENE_CFLAGS = @GRAPHENE_CFLAGS@
 GRAPHENE_LIBS = @GRAPHENE_LIBS@
 GREP = @GREP@
-GSETTINGS_CFLAGS = @GSETTINGS_CFLAGS@
-GSETTINGS_DISABLE_SCHEMAS_COMPILE = @GSETTINGS_DISABLE_SCHEMAS_COMPILE@
-GSETTINGS_LIBS = @GSETTINGS_LIBS@
 GSM_LIBS = @GSM_LIBS@
 GSTPB_PLUGINS_DIR = @GSTPB_PLUGINS_DIR@
 GSTPB_PREFIX = @GSTPB_PREFIX@
 GST_AGE = @GST_AGE@
+GST_ALLOCATORS_CFLAGS = @GST_ALLOCATORS_CFLAGS@
+GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
 GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
 GST_API_VERSION = @GST_API_VERSION@
 GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
@@ -395,6 +399,8 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PBUTILS_CFLAGS = @GST_PBUTILS_CFLAGS@
+GST_PBUTILS_LIBS = @GST_PBUTILS_LIBS@
 GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BAD_CFLAGS = @GST_PLUGINS_BAD_CFLAGS@
@@ -420,6 +426,8 @@
 GST_PREFIX = @GST_PREFIX@
 GST_REVISION = @GST_REVISION@
 GST_TOOLS_DIR = @GST_TOOLS_DIR@
+GST_VIDEO_CFLAGS = @GST_VIDEO_CFLAGS@
+GST_VIDEO_LIBS = @GST_VIDEO_LIBS@
 GTK3_CFLAGS = @GTK3_CFLAGS@
 GTK3_GL_CFLAGS = @GTK3_GL_CFLAGS@
 GTK3_GL_LIBS = @GTK3_GL_LIBS@
@@ -521,6 +529,7 @@
 LTLIBICONV = @LTLIBICONV@
 LTLIBINTL = @LTLIBINTL@
 LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
 MANIFEST_TOOL = @MANIFEST_TOOL@
@@ -534,8 +543,6 @@
 MODPLUG_LIBS = @MODPLUG_LIBS@
 MPEG2ENC_CFLAGS = @MPEG2ENC_CFLAGS@
 MPEG2ENC_LIBS = @MPEG2ENC_LIBS@
-MPG123_CFLAGS = @MPG123_CFLAGS@
-MPG123_LIBS = @MPG123_LIBS@
 MPLEX_CFLAGS = @MPLEX_CFLAGS@
 MPLEX_LDFLAGS = @MPLEX_LDFLAGS@
 MPLEX_LIBS = @MPLEX_LIBS@
@@ -551,6 +558,8 @@
 NETTLE_LIBS = @NETTLE_LIBS@
 NM = @NM@
 NMEDIT = @NMEDIT@
+NVENCODE_CFLAGS = @NVENCODE_CFLAGS@
+NVENCODE_LIBS = @NVENCODE_LIBS@
 OBJC = @OBJC@
 OBJCDEPMODE = @OBJCDEPMODE@
 OBJCFLAGS = @OBJCFLAGS@
@@ -608,16 +617,18 @@
 PYTHON_PLATFORM = @PYTHON_PLATFORM@
 PYTHON_PREFIX = @PYTHON_PREFIX@
 PYTHON_VERSION = @PYTHON_VERSION@
+QT_ANDROID_CFLAGS = @QT_ANDROID_CFLAGS@
+QT_ANDROID_LIBS = @QT_ANDROID_LIBS@
 QT_CFLAGS = @QT_CFLAGS@
 QT_LIBS = @QT_LIBS@
+QT_MAC_CFLAGS = @QT_MAC_CFLAGS@
+QT_MAC_LIBS = @QT_MAC_LIBS@
 QT_WAYLAND_CFLAGS = @QT_WAYLAND_CFLAGS@
 QT_WAYLAND_LIBS = @QT_WAYLAND_LIBS@
 QT_X11_CFLAGS = @QT_X11_CFLAGS@
 QT_X11_LIBS = @QT_X11_LIBS@
 RANLIB = @RANLIB@
 RCC = @RCC@
-RSVG_2_36_2_CFLAGS = @RSVG_2_36_2_CFLAGS@
-RSVG_2_36_2_LIBS = @RSVG_2_36_2_LIBS@
 RSVG_CFLAGS = @RSVG_CFLAGS@
 RSVG_LIBS = @RSVG_LIBS@
 RTMP_CFLAGS = @RTMP_CFLAGS@
@@ -669,6 +680,7 @@
 VOAACENC_LIBS = @VOAACENC_LIBS@
 VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
 VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VULKAN_LIBS = @VULKAN_LIBS@
 WARNING_CFLAGS = @WARNING_CFLAGS@
 WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
 WARNING_OBJCFLAGS = @WARNING_OBJCFLAGS@
@@ -679,6 +691,7 @@
 WAYLAND_LIBS = @WAYLAND_LIBS@
 WEBP_CFLAGS = @WEBP_CFLAGS@
 WEBP_LIBS = @WEBP_LIBS@
+WGET = @WGET@
 WILDMIDI_CFLAGS = @WILDMIDI_CFLAGS@
 WILDMIDI_LIBS = @WILDMIDI_LIBS@
 WINKS_LIBS = @WINKS_LIBS@
@@ -688,6 +701,8 @@
 X11_LIBS = @X11_LIBS@
 X265_CFLAGS = @X265_CFLAGS@
 X265_LIBS = @X265_LIBS@
+XCB_CFLAGS = @XCB_CFLAGS@
+XCB_LIBS = @XCB_LIBS@
 XCOMPOSITE_CFLAGS = @XCOMPOSITE_CFLAGS@
 XCOMPOSITE_LIBS = @XCOMPOSITE_LIBS@
 XGETTEXT = @XGETTEXT@
@@ -725,7 +740,6 @@
 docdir = @docdir@
 dvidir = @dvidir@
 exec_prefix = @exec_prefix@
-gsettingsschemadir = @gsettingsschemadir@
 host = @host@
 host_alias = @host_alias@
 host_cpu = @host_cpu@
diff --git a/gst-libs/gst/adaptivedemux/gstadaptivedemux.c b/gst-libs/gst/adaptivedemux/gstadaptivedemux.c
index 9f74c65..dfe7ba7 100644
--- a/gst-libs/gst/adaptivedemux/gstadaptivedemux.c
+++ b/gst-libs/gst/adaptivedemux/gstadaptivedemux.c
@@ -68,6 +68,53 @@
  * information.
  */
 
+/*
+MT safety.
+The following rules were observed while implementing MT safety in adaptive demux:
+1. If a variable is accessed from multiple threads and at least one thread
+writes to it, then all the accesses needs to be done from inside a critical section.
+2. If thread A wants to join thread B then at the moment it calls gst_task_join
+it must not hold any mutexes that thread B might take.
+
+Adaptive demux API can be called from several threads. More, adaptive demux
+starts some threads to monitor the download of fragments. In order to protect
+accesses to shared variables (demux and streams) all the API functions that
+can be run in different threads will need to get a mutex (manifest_lock)
+when they start and release it when they end. Because some of those functions
+can indirectly call other API functions (eg they can generate events or messages
+that are processed in the same thread) the manifest_lock must be recursive.
+
+The manifest_lock will serialize the public API making access to shared
+variables safe. But some of these functions will try at some moment to join
+threads created by adaptive demux, or to change the state of src elements
+(which will block trying to join the src element streaming thread). Because
+of rule 2, those functions will need to release the manifest_lock during the
+call of gst_task_join. During this time they can be interrupted by other API calls.
+For example, during the precessing of a seek event, gst_adaptive_demux_stop_tasks
+is called and this will join all threads. In order to prevent interruptions
+during such period, all the API functions will also use a second lock: api_lock.
+This will be taken at the beginning of the function and released at the end,
+but this time this lock will not be temporarily released during join.
+This lock will be used only by API calls (not by gst_adaptive_demux_stream_download_loop
+or gst_adaptive_demux_updates_loop or _src_chain or _src_event) so it is safe
+to hold it while joining the threads or changing the src element state. The
+api_lock will serialise all external requests to adaptive demux. In order to
+avoid deadlocks, if a function needs to acquire both manifest and api locks,
+the api_lock will be taken first and the manifest_lock second.
+
+By using the api_lock a thread is protected against other API calls. But when
+temporarily dropping the manifest_lock, it will be vulnerable to changes from
+threads that use only the manifest_lock and not the api_lock. These threads run
+one of the following functions: gst_adaptive_demux_stream_download_loop,
+gst_adaptive_demux_updates_loop, _src_chain, _src_event. In order to guarantee
+that all operations during an API call are not impacted by other writes, the
+above mentioned functions must check a cancelled flag every time they reacquire
+the manifest_lock. If the flag is set, they must exit immediately, without
+performing any changes on the shared data. In this way, an API call (eg seek
+request) can set the cancel flag before releasing the manifest_lock and be sure
+that the demux object and its streams are not changed by anybody else.
+*/
+
 #ifdef HAVE_CONFIG_H
 #include "config.h"
 #endif
@@ -85,14 +132,26 @@
 
 #define MAX_DOWNLOAD_ERROR_COUNT 3
 #define DEFAULT_FAILED_COUNT 3
-#define DEFAULT_LOOKBACK_FRAGMENTS 3
 #define DEFAULT_CONNECTION_SPEED 0
 #define DEFAULT_BITRATE_LIMIT 0.8
+#define SRC_QUEUE_MAX_BYTES 20 * 1024 * 1024    /* For safety. Large enough to hold a segment. */
+#define NUM_LOOKBACK_FRAGMENTS 3
+
+#define GST_MANIFEST_GET_LOCK(d) (&(GST_ADAPTIVE_DEMUX_CAST(d)->priv->manifest_lock))
+#define GST_MANIFEST_LOCK(d) g_rec_mutex_lock (GST_MANIFEST_GET_LOCK (d));
+#define GST_MANIFEST_UNLOCK(d) g_rec_mutex_unlock (GST_MANIFEST_GET_LOCK (d));
+
+#define GST_API_GET_LOCK(d) (&(GST_ADAPTIVE_DEMUX_CAST(d)->priv->api_lock))
+#define GST_API_LOCK(d)   g_mutex_lock (GST_API_GET_LOCK (d));
+#define GST_API_UNLOCK(d) g_mutex_unlock (GST_API_GET_LOCK (d));
+
+#define GST_ADAPTIVE_DEMUX_SEGMENT_GET_LOCK(d) (&GST_ADAPTIVE_DEMUX_CAST(d)->priv->segment_lock)
+#define GST_ADAPTIVE_DEMUX_SEGMENT_LOCK(d) g_mutex_lock (GST_ADAPTIVE_DEMUX_SEGMENT_GET_LOCK (d))
+#define GST_ADAPTIVE_DEMUX_SEGMENT_UNLOCK(d) g_mutex_unlock (GST_ADAPTIVE_DEMUX_SEGMENT_GET_LOCK (d))
 
 enum
 {
   PROP_0,
-  PROP_LOOKBACK_FRAGMENTS,
   PROP_CONNECTION_SPEED,
   PROP_BITRATE_LIMIT,
   PROP_LAST
@@ -105,24 +164,41 @@
 
 struct _GstAdaptiveDemuxPrivate
 {
-  GstAdapter *input_adapter;
-  gboolean have_manifest;
+  GstAdapter *input_adapter;    /* protected by manifest_lock */
+  gboolean have_manifest;       /* protected by manifest_lock */
 
-  GstUriDownloader *downloader;
+  GList *old_streams;           /* protected by manifest_lock */
 
-  GList *old_streams;
-
-  GstTask *updates_task;
+  GstTask *updates_task;        /* MT safe */
   GRecMutex updates_lock;
   GMutex updates_timed_lock;
-  GCond updates_timed_cond;
-  gboolean stop_updates_task;
+  GCond updates_timed_cond;     /* protected by updates_timed_lock */
+  gboolean stop_updates_task;   /* protected by updates_timed_lock */
+
+  /* used only from updates_task, no need to protect it */
   gint update_failed_count;
 
-  gint64 next_update;
+  guint32 segment_seqnum;       /* protected by manifest_lock */
 
-  gboolean exposing;
-  guint32 segment_seqnum;
+  /* main lock used to protect adaptive demux and all its streams.
+   * It serializes the adaptive demux public API.
+   */
+  GRecMutex manifest_lock;
+
+  /* condition to wait for manifest updates on a live stream.
+   * In order to signal the manifest_cond, the caller needs to hold both
+   * manifest_lock and manifest_update_lock (taken in this order)
+   */
+  GCond manifest_cond;
+  GMutex manifest_update_lock;
+
+  GMutex api_lock;
+
+  /* Protects demux and stream segment information
+   * Needed because seeks can update segment information
+   * without needing to stop tasks when they just want to
+   * update the segment boundaries */
+  GMutex segment_lock;
 };
 
 static GstBinClass *parent_class = NULL;
@@ -155,7 +231,8 @@
     gboolean first_and_live);
 static gboolean gst_adaptive_demux_is_live (GstAdaptiveDemux * demux);
 static GstFlowReturn gst_adaptive_demux_stream_seek (GstAdaptiveDemux * demux,
-    GstAdaptiveDemuxStream * stream, GstClockTime ts);
+    GstAdaptiveDemuxStream * stream, gboolean forward, GstSeekFlags flags,
+    GstClockTime ts, GstClockTime * final_ts);
 static gboolean gst_adaptive_demux_stream_has_next_fragment (GstAdaptiveDemux *
     demux, GstAdaptiveDemuxStream * stream);
 static gboolean gst_adaptive_demux_stream_select_bitrate (GstAdaptiveDemux *
@@ -177,8 +254,6 @@
 static GstFlowReturn
 gst_adaptive_demux_stream_push_event (GstAdaptiveDemuxStream * stream,
     GstEvent * event);
-static void gst_adaptive_demux_stream_download_wait (GstAdaptiveDemuxStream *
-    stream, GstClockTime time_diff);
 
 static void gst_adaptive_demux_start_tasks (GstAdaptiveDemux * demux);
 static void gst_adaptive_demux_stop_tasks (GstAdaptiveDemux * demux);
@@ -193,6 +268,9 @@
 static GstFlowReturn
 gst_adaptive_demux_stream_finish_fragment_default (GstAdaptiveDemux * demux,
     GstAdaptiveDemuxStream * stream);
+static GstFlowReturn
+gst_adaptive_demux_stream_advance_fragment_unlocked (GstAdaptiveDemux * demux,
+    GstAdaptiveDemuxStream * stream, GstClockTime duration);
 
 
 /* we can't use G_DEFINE_ABSTRACT_TYPE because we need the klass in the _init
@@ -229,10 +307,10 @@
 {
   GstAdaptiveDemux *demux = GST_ADAPTIVE_DEMUX (object);
 
+  GST_API_LOCK (demux);
+  GST_MANIFEST_LOCK (demux);
+
   switch (prop_id) {
-    case PROP_LOOKBACK_FRAGMENTS:
-      demux->num_lookback_fragments = g_value_get_uint (value);
-      break;
     case PROP_CONNECTION_SPEED:
       demux->connection_speed = g_value_get_uint (value) * 1000;
       GST_DEBUG_OBJECT (demux, "Connection speed set to %u",
@@ -245,6 +323,9 @@
       G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
       break;
   }
+
+  GST_MANIFEST_UNLOCK (demux);
+  GST_API_UNLOCK (demux);
 }
 
 static void
@@ -253,10 +334,9 @@
 {
   GstAdaptiveDemux *demux = GST_ADAPTIVE_DEMUX (object);
 
+  GST_MANIFEST_LOCK (demux);
+
   switch (prop_id) {
-    case PROP_LOOKBACK_FRAGMENTS:
-      g_value_set_uint (value, demux->num_lookback_fragments);
-      break;
     case PROP_CONNECTION_SPEED:
       g_value_set_uint (value, demux->connection_speed / 1000);
       break;
@@ -267,6 +347,8 @@
       G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
       break;
   }
+
+  GST_MANIFEST_UNLOCK (demux);
 }
 
 static void
@@ -290,13 +372,6 @@
   gobject_class->get_property = gst_adaptive_demux_get_property;
   gobject_class->finalize = gst_adaptive_demux_finalize;
 
-  g_object_class_install_property (gobject_class, PROP_LOOKBACK_FRAGMENTS,
-      g_param_spec_uint ("num-lookback-fragments",
-          "Number of fragments to look back",
-          "The number of fragments the demuxer will look back to calculate an average bitrate",
-          1, G_MAXUINT, DEFAULT_LOOKBACK_FRAGMENTS,
-          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | G_PARAM_CONSTRUCT_ONLY));
-
   g_object_class_install_property (gobject_class, PROP_CONNECTION_SPEED,
       g_param_spec_uint ("connection-speed", "Connection Speed",
           "Network connection speed in kbps (0 = calculate from downloaded"
@@ -325,7 +400,6 @@
     GstAdaptiveDemuxClass * klass)
 {
   GstPadTemplate *pad_template;
-  GstPad *pad;
 
   GST_DEBUG_OBJECT (demux, "gst_adaptive_demux_init");
 
@@ -348,21 +422,24 @@
   g_mutex_init (&demux->priv->updates_timed_lock);
   g_cond_init (&demux->priv->updates_timed_cond);
 
-  g_cond_init (&demux->manifest_cond);
-  g_mutex_init (&demux->manifest_lock);
+  g_cond_init (&demux->priv->manifest_cond);
+  g_mutex_init (&demux->priv->manifest_update_lock);
+
+  g_rec_mutex_init (&demux->priv->manifest_lock);
+  g_mutex_init (&demux->priv->api_lock);
+  g_mutex_init (&demux->priv->segment_lock);
 
   pad_template =
       gst_element_class_get_pad_template (GST_ELEMENT_CLASS (klass), "sink");
   g_return_if_fail (pad_template != NULL);
 
-  demux->sinkpad = pad = gst_pad_new_from_template (pad_template, "sink");
+  demux->sinkpad = gst_pad_new_from_template (pad_template, "sink");
   gst_pad_set_event_function (demux->sinkpad,
       GST_DEBUG_FUNCPTR (gst_adaptive_demux_sink_event));
   gst_pad_set_chain_function (demux->sinkpad,
       GST_DEBUG_FUNCPTR (gst_adaptive_demux_sink_chain));
 
   /* Properties */
-  demux->num_lookback_fragments = DEFAULT_LOOKBACK_FRAGMENTS;
   demux->bitrate_limit = DEFAULT_BITRATE_LIMIT;
   demux->connection_speed = DEFAULT_CONNECTION_SPEED;
 
@@ -382,10 +459,13 @@
 
   g_mutex_clear (&priv->updates_timed_lock);
   g_cond_clear (&priv->updates_timed_cond);
-  g_cond_clear (&demux->manifest_cond);
+  g_mutex_clear (&demux->priv->manifest_update_lock);
+  g_cond_clear (&demux->priv->manifest_cond);
   g_object_unref (priv->updates_task);
   g_rec_mutex_clear (&priv->updates_lock);
-  g_mutex_clear (&demux->manifest_lock);
+  g_rec_mutex_clear (&demux->priv->manifest_lock);
+  g_mutex_clear (&demux->priv->api_lock);
+  g_mutex_clear (&demux->priv->segment_lock);
 
   G_OBJECT_CLASS (parent_class)->finalize (object);
 }
@@ -397,16 +477,26 @@
   GstAdaptiveDemux *demux = GST_ADAPTIVE_DEMUX_CAST (element);
   GstStateChangeReturn result = GST_STATE_CHANGE_FAILURE;
 
+  GST_API_LOCK (demux);
+
   switch (transition) {
     case GST_STATE_CHANGE_PAUSED_TO_READY:
+      GST_MANIFEST_LOCK (demux);
       gst_adaptive_demux_reset (demux);
+      GST_MANIFEST_UNLOCK (demux);
       break;
     default:
       break;
   }
 
+  /* this must be run without MANIFEST_LOCK taken.
+   * For PLAYING to PLAYING state changes, it will want to take a lock in
+   * src element and that lock is held while the streaming thread is running.
+   * The streaming thread will take the MANIFEST_LOCK, leading to a deadlock.
+   */
   result = GST_ELEMENT_CLASS (parent_class)->change_state (element, transition);
 
+  GST_API_UNLOCK (demux);
   return result;
 }
 
@@ -416,11 +506,21 @@
 {
   GstAdaptiveDemux *demux = GST_ADAPTIVE_DEMUX_CAST (parent);
   GstAdaptiveDemuxClass *demux_class;
+  gboolean ret;
 
   switch (event->type) {
     case GST_EVENT_FLUSH_STOP:
+      GST_API_LOCK (demux);
+      GST_MANIFEST_LOCK (demux);
+
       gst_adaptive_demux_reset (demux);
-      break;
+
+      ret = gst_pad_event_default (pad, parent, event);
+
+      GST_MANIFEST_UNLOCK (demux);
+      GST_API_UNLOCK (demux);
+
+      return ret;
     case GST_EVENT_EOS:{
       GstQuery *query;
       gboolean query_res;
@@ -428,12 +528,21 @@
       gsize available;
       GstBuffer *manifest_buffer;
 
+      GST_API_LOCK (demux);
+      GST_MANIFEST_LOCK (demux);
+
       demux_class = GST_ADAPTIVE_DEMUX_GET_CLASS (demux);
+
       available = gst_adapter_available (demux->priv->input_adapter);
 
       if (available == 0) {
         GST_WARNING_OBJECT (demux, "Received EOS without a manifest.");
-        break;
+        ret = gst_pad_event_default (pad, parent, event);
+
+        GST_MANIFEST_UNLOCK (demux);
+        GST_API_UNLOCK (demux);
+
+        return ret;
       }
 
       GST_DEBUG_OBJECT (demux, "Got EOS on the sink pad: manifest fetched");
@@ -442,7 +551,6 @@
        * uris */
       query = gst_query_new_uri ();
       query_res = gst_pad_peer_query (pad, query);
-      GST_MANIFEST_LOCK (demux);
       if (query_res) {
         gchar *uri, *redirect_uri;
         gboolean permanent;
@@ -529,6 +637,7 @@
 
       }
       GST_MANIFEST_UNLOCK (demux);
+      GST_API_UNLOCK (demux);
 
       gst_event_unref (event);
       return ret;
@@ -549,19 +658,32 @@
     GstBuffer * buffer)
 {
   GstAdaptiveDemux *demux = GST_ADAPTIVE_DEMUX_CAST (parent);
+
+  GST_MANIFEST_LOCK (demux);
+
   gst_adapter_push (demux->priv->input_adapter, buffer);
 
   GST_INFO_OBJECT (demux, "Received manifest buffer, total size is %i bytes",
       (gint) gst_adapter_available (demux->priv->input_adapter));
 
+  GST_MANIFEST_UNLOCK (demux);
   return GST_FLOW_OK;
 }
 
+/* must be called with manifest_lock taken */
 static void
 gst_adaptive_demux_reset (GstAdaptiveDemux * demux)
 {
   GstAdaptiveDemuxClass *klass = GST_ADAPTIVE_DEMUX_GET_CLASS (demux);
   GList *iter;
+  GList *old_streams;
+  GstEvent *eos;
+
+  /* take ownership of old_streams before releasing the manifest_lock in
+   * gst_adaptive_demux_stop_tasks
+   */
+  old_streams = demux->priv->old_streams;
+  demux->priv->old_streams = NULL;
 
   gst_adaptive_demux_stop_tasks (demux);
   gst_uri_downloader_reset (demux->downloader);
@@ -569,19 +691,24 @@
   if (klass->reset)
     klass->reset (demux);
 
+  eos = gst_event_new_eos ();
   for (iter = demux->streams; iter; iter = g_list_next (iter)) {
     GstAdaptiveDemuxStream *stream = iter->data;
-    if (stream->pad)
+    if (stream->pad) {
+      gst_pad_push_event (stream->pad, gst_event_ref (eos));
+      gst_pad_set_active (stream->pad, FALSE);
+
       gst_element_remove_pad (GST_ELEMENT_CAST (demux), stream->pad);
+    }
     gst_adaptive_demux_stream_free (stream);
   }
+  gst_event_unref (eos);
   g_list_free (demux->streams);
   demux->streams = NULL;
 
-  if (demux->priv->old_streams) {
-    g_list_free_full (demux->priv->old_streams,
+  if (old_streams) {
+    g_list_free_full (old_streams,
         (GDestroyNotify) gst_adaptive_demux_stream_free);
-    demux->priv->old_streams = NULL;
   }
 
   g_free (demux->manifest_uri);
@@ -596,7 +723,6 @@
 
   demux->have_group_id = FALSE;
   demux->group_id = G_MAXUINT;
-  demux->priv->exposing = FALSE;
   demux->priv->segment_seqnum = gst_util_seqnum_next ();
 }
 
@@ -613,9 +739,12 @@
       gchar *debug = NULL;
       gchar *new_error = NULL;
 
+      GST_MANIFEST_LOCK (demux);
+
       for (iter = demux->streams; iter; iter = g_list_next (iter)) {
         stream = iter->data;
-        if (GST_OBJECT_CAST (stream->src) == GST_MESSAGE_SRC (msg)) {
+        if (gst_object_has_as_ancestor (GST_MESSAGE_SRC (msg),
+                GST_OBJECT_CAST (stream->src))) {
           gst_message_parse_error (msg, &err, &debug);
 
           GST_WARNING_OBJECT (GST_ADAPTIVE_DEMUX_STREAM_PAD (stream),
@@ -639,6 +768,8 @@
         }
       }
 
+      GST_MANIFEST_UNLOCK (demux);
+
       gst_message_unref (msg);
       msg = NULL;
     }
@@ -655,9 +786,14 @@
 gst_adaptive_demux_set_stream_struct_size (GstAdaptiveDemux * demux,
     gsize struct_size)
 {
+  GST_API_LOCK (demux);
+  GST_MANIFEST_LOCK (demux);
   demux->stream_struct_size = struct_size;
+  GST_MANIFEST_UNLOCK (demux);
+  GST_API_UNLOCK (demux);
 }
 
+/* must be called with manifest_lock taken */
 static gboolean
 gst_adaptive_demux_expose_stream (GstAdaptiveDemux * demux,
     GstAdaptiveDemuxStream * stream)
@@ -702,7 +838,6 @@
     stream->pending_caps = NULL;
   }
 
-  stream->download_finished = FALSE;
   stream->discont = FALSE;
 
   gst_object_ref (pad);
@@ -710,6 +845,7 @@
   return gst_element_add_pad (GST_ELEMENT_CAST (demux), pad);
 }
 
+/* must be called with manifest_lock taken */
 static GstClockTime
 gst_adaptive_demux_stream_get_presentation_offset (GstAdaptiveDemux * demux,
     GstAdaptiveDemuxStream * stream)
@@ -724,6 +860,7 @@
   return klass->get_presentation_offset (demux, stream);
 }
 
+/* must be called with manifest_lock taken */
 static GstClockTime
 gst_adaptive_demux_get_period_start_time (GstAdaptiveDemux * demux)
 {
@@ -737,6 +874,7 @@
   return klass->get_period_start_time (demux);
 }
 
+/* must be called with manifest_lock taken */
 static gboolean
 gst_adaptive_demux_expose_streams (GstAdaptiveDemux * demux,
     gboolean first_and_live)
@@ -747,7 +885,6 @@
 
   g_return_val_if_fail (demux->next_streams != NULL, FALSE);
 
-  demux->priv->exposing = TRUE;
   old_streams = demux->streams;
   demux->streams = demux->next_streams;
   demux->next_streams = NULL;
@@ -863,11 +1000,14 @@
   }
 
   gst_element_no_more_pads (GST_ELEMENT_CAST (demux));
-  demux->priv->exposing = FALSE;
 
   if (old_streams) {
     GstEvent *eos = gst_event_new_eos ();
 
+    /* before we put streams in the demux->priv->old_streams list,
+     * we ask the download task to stop. In this way, it will no longer be
+     * allowed to change the demux object.
+     */
     for (iter = old_streams; iter; iter = g_list_next (iter)) {
       GstAdaptiveDemuxStream *stream = iter->data;
 
@@ -875,20 +1015,37 @@
       gst_pad_push_event (stream->pad, gst_event_ref (eos));
       gst_pad_set_active (stream->pad, FALSE);
       gst_element_remove_pad (GST_ELEMENT (demux), stream->pad);
+
+      /* ask the download task to stop.
+       * We will not join it now, because our thread can be one of these tasks.
+       * We will do the joining later, from another stream download task or
+       * from gst_adaptive_demux_stop_tasks.
+       * We also cannot change the state of the stream->src element, because
+       * that will wait on the streaming thread (which could be this thread)
+       * to stop first.
+       * Because we sent an EOS to the downstream element, the stream->src
+       * element should detect this in its streaming task and stop.
+       * Even if it doesn't do that, we will change its state later in
+       * gst_adaptive_demux_stop_tasks.
+       */
+      gst_task_stop (stream->download_task);
+      g_mutex_lock (&stream->fragment_download_lock);
+      stream->cancelled = TRUE;
+      g_cond_signal (&stream->fragment_download_cond);
+      g_mutex_unlock (&stream->fragment_download_lock);
     }
     gst_event_unref (eos);
 
     /* The list should be freed from another thread as we can't properly
      * cleanup a GstTask from itself */
-    GST_OBJECT_LOCK (demux);
     demux->priv->old_streams =
         g_list_concat (demux->priv->old_streams, old_streams);
-    GST_OBJECT_UNLOCK (demux);
   }
 
   return TRUE;
 }
 
+/* must be called with manifest_lock taken */
 GstAdaptiveDemuxStream *
 gst_adaptive_demux_stream_new (GstAdaptiveDemux * demux, GstPad * pad)
 {
@@ -906,7 +1063,7 @@
   stream->pad = pad;
   stream->demux = demux;
   stream->fragment_bitrates =
-      g_malloc0 (sizeof (guint64) * demux->num_lookback_fragments);
+      g_malloc0 (sizeof (guint64) * NUM_LOOKBACK_FRAGMENTS);
   gst_pad_set_element_private (pad, stream);
 
   gst_pad_set_query_function (pad,
@@ -924,6 +1081,27 @@
   return stream;
 }
 
+GstAdaptiveDemuxStream *
+gst_adaptive_demux_find_stream_for_pad (GstAdaptiveDemux * demux, GstPad * pad)
+{
+  GList *iter;
+
+  for (iter = demux->streams; iter; iter = g_list_next (iter)) {
+    GstAdaptiveDemuxStream *stream = iter->data;
+    if (stream->pad == pad) {
+      return stream;
+    }
+  }
+  g_assert_not_reached ();
+  return NULL;
+}
+
+/* must be called with manifest_lock taken.
+ * It will temporarily drop the manifest_lock in order to join the task.
+ * It will join only the old_streams (the demux->streams are joined by
+ * gst_adaptive_demux_stop_tasks before gst_adaptive_demux_stream_free is
+ * called)
+ */
 static void
 gst_adaptive_demux_stream_free (GstAdaptiveDemuxStream * stream)
 {
@@ -939,11 +1117,22 @@
       GST_DEBUG_OBJECT (demux, "Leaving streaming task %s:%s",
           GST_DEBUG_PAD_NAME (stream->pad));
 
-      g_cond_signal (&stream->fragment_download_cond);
       gst_task_stop (stream->download_task);
+
+      g_mutex_lock (&stream->fragment_download_lock);
+      stream->cancelled = TRUE;
+      g_cond_signal (&stream->fragment_download_cond);
+      g_mutex_unlock (&stream->fragment_download_lock);
     }
     GST_LOG_OBJECT (demux, "Waiting for task to finish");
+
+    /* temporarily drop the manifest lock to join the task */
+    GST_MANIFEST_UNLOCK (demux);
+
     gst_task_join (stream->download_task);
+
+    GST_MANIFEST_LOCK (demux);
+
     GST_LOG_OBJECT (demux, "Finished");
     gst_object_unref (stream->download_task);
     g_rec_mutex_clear (&stream->download_lock);
@@ -962,6 +1151,10 @@
     stream->pending_events = NULL;
   }
 
+  if (stream->internal_pad) {
+    gst_object_unparent (GST_OBJECT_CAST (stream->internal_pad));
+  }
+
   if (stream->src_srcpad) {
     gst_object_unref (stream->src_srcpad);
     stream->src_srcpad = NULL;
@@ -975,7 +1168,6 @@
 
   g_cond_clear (&stream->fragment_download_cond);
   g_mutex_clear (&stream->fragment_download_lock);
-
   g_free (stream->fragment_bitrates);
 
   if (stream->pad) {
@@ -990,6 +1182,7 @@
   g_free (stream);
 }
 
+/* must be called with manifest_lock taken */
 static gboolean
 gst_adaptive_demux_get_live_seek_range (GstAdaptiveDemux * demux,
     gint64 * range_start, gint64 * range_stop)
@@ -1003,6 +1196,7 @@
   return klass->get_live_seek_range (demux, range_start, range_stop);
 }
 
+/* must be called with manifest_lock taken */
 static gboolean
 gst_adaptive_demux_can_seek (GstAdaptiveDemux * demux)
 {
@@ -1016,6 +1210,13 @@
   return klass->seek != NULL;
 }
 
+#define IS_SNAP_SEEK(f) (f & (GST_SEEK_FLAG_SNAP_BEFORE | \
+                              GST_SEEK_FLAG_SNAP_AFTER | \
+                              GST_SEEK_FLAG_SNAP_NEAREST))
+#define REMOVE_SNAP_FLAGS(f) (f & ~(GST_SEEK_FLAG_SNAP_BEFORE | \
+                              GST_SEEK_FLAG_SNAP_AFTER | \
+                              GST_SEEK_FLAG_SNAP_NEAREST))
+
 static gboolean
 gst_adaptive_demux_src_event (GstPad * pad, GstObject * parent,
     GstEvent * event)
@@ -1026,6 +1227,8 @@
   demux = GST_ADAPTIVE_DEMUX_CAST (parent);
   demux_class = GST_ADAPTIVE_DEMUX_GET_CLASS (demux);
 
+  /* FIXME handle events received on pads that are to be removed */
+
   switch (event->type) {
     case GST_EVENT_SEEK:
     {
@@ -1041,18 +1244,22 @@
 
       GST_INFO_OBJECT (demux, "Received seek event");
 
+      GST_API_LOCK (demux);
       GST_MANIFEST_LOCK (demux);
+
       if (!gst_adaptive_demux_can_seek (demux)) {
         GST_MANIFEST_UNLOCK (demux);
+        GST_API_UNLOCK (demux);
         gst_event_unref (event);
         return FALSE;
       }
-      GST_MANIFEST_UNLOCK (demux);
 
       gst_event_parse_seek (event, &rate, &format, &flags, &start_type, &start,
           &stop_type, &stop);
 
       if (format != GST_FORMAT_TIME) {
+        GST_MANIFEST_UNLOCK (demux);
+        GST_API_UNLOCK (demux);
         gst_event_unref (event);
         return FALSE;
       }
@@ -1061,10 +1268,14 @@
         gint64 range_start, range_stop;
         if (!gst_adaptive_demux_get_live_seek_range (demux, &range_start,
                 &range_stop)) {
+          GST_MANIFEST_UNLOCK (demux);
+          GST_API_UNLOCK (demux);
           gst_event_unref (event);
           return FALSE;
         }
         if (start < range_start || start >= range_stop) {
+          GST_MANIFEST_UNLOCK (demux);
+          GST_API_UNLOCK (demux);
           GST_WARNING_OBJECT (demux, "Seek to invalid position");
           gst_event_unref (event);
           return FALSE;
@@ -1073,17 +1284,11 @@
 
       seqnum = gst_event_get_seqnum (event);
 
-      GST_DEBUG_OBJECT (demux,
-          "seek event, rate: %f type: %d start: %" GST_TIME_FORMAT " stop: %"
-          GST_TIME_FORMAT, rate, start_type, GST_TIME_ARGS (start),
-          GST_TIME_ARGS (stop));
+      GST_DEBUG_OBJECT (demux, "seek event, %" GST_PTR_FORMAT, event);
 
       /* have a backup in case seek fails */
       gst_segment_copy_into (&demux->segment, &oldsegment);
 
-      gst_segment_do_seek (&demux->segment, rate, format, flags, start_type,
-          start, stop_type, stop, &update);
-
       if (flags & GST_SEEK_FLAG_FLUSH) {
         GstEvent *fevent;
 
@@ -1091,12 +1296,85 @@
         fevent = gst_event_new_flush_start ();
         gst_event_set_seqnum (fevent, seqnum);
         gst_adaptive_demux_push_src_event (demux, fevent);
-      }
-      gst_adaptive_demux_stop_tasks (demux);
-      GST_DEBUG_OBJECT (demux, "Seeking to segment %" GST_SEGMENT_FORMAT,
-          &demux->segment);
 
-      GST_MANIFEST_LOCK (demux);
+        gst_adaptive_demux_stop_tasks (demux);
+      } else if ((rate > 0 && start_type != GST_SEEK_TYPE_NONE) ||
+          (rate < 0 && stop_type != GST_SEEK_TYPE_NONE)) {
+
+        gst_adaptive_demux_stop_tasks (demux);
+      }
+
+      GST_ADAPTIVE_DEMUX_SEGMENT_LOCK (demux);
+
+      /*
+       * Handle snap seeks as follows:
+       * 1) do the snap seeking on the stream that received
+       *    the event
+       * 2) use the final position on this stream to seek
+       *    on the other streams to the same position
+       *
+       * We can't snap at all streams at the same time as
+       * they might end in different positions, so just
+       * use the one that received the event as the 'leading'
+       * one to do the snap seek.
+       */
+      if (IS_SNAP_SEEK (flags) && demux_class->stream_seek) {
+        GstAdaptiveDemuxStream *stream =
+            gst_adaptive_demux_find_stream_for_pad (demux, pad);
+        GstClockTime ts;
+        GstSeekFlags stream_seek_flags = flags;
+
+        /* snap-seek on the stream that received the event and then
+         * use the resulting position to seek on all streams */
+
+        if (rate >= 0) {
+          if (start_type != GST_SEEK_TYPE_NONE)
+            ts = start;
+          else {
+            ts = stream->segment.position;
+            start_type = GST_SEEK_TYPE_SET;
+          }
+        } else {
+          if (stop_type != GST_SEEK_TYPE_NONE)
+            ts = stop;
+          else {
+            stop_type = GST_SEEK_TYPE_SET;
+            ts = stream->segment.position;
+          }
+        }
+
+        demux_class->stream_seek (stream, rate >= 0, stream_seek_flags, ts,
+            &ts);
+
+        /* replace event with a new one without snaping to seek on all streams */
+        gst_event_unref (event);
+        if (rate >= 0) {
+          start = ts;
+        } else {
+          stop = ts;
+        }
+        event =
+            gst_event_new_seek (rate, format, REMOVE_SNAP_FLAGS (flags),
+            start_type, start, stop_type, stop);
+        GST_DEBUG_OBJECT (demux, "Adapted snap seek to %" GST_PTR_FORMAT,
+            event);
+      }
+
+      gst_segment_do_seek (&demux->segment, rate, format, flags, start_type,
+          start, stop_type, stop, &update);
+
+      /* FIXME - this seems unatural, do_seek() is updating base when we
+       * only want the start/stop position to change, maybe do_seek() needs
+       * some fixing? */
+      if (!(flags & GST_SEEK_FLAG_FLUSH) && ((rate > 0
+                  && start_type == GST_SEEK_TYPE_NONE) || (rate < 0
+                  && stop_type == GST_SEEK_TYPE_NONE))) {
+        demux->segment.base = oldsegment.base;
+      }
+
+      GST_DEBUG_OBJECT (demux, "Calling subclass seek: %" GST_PTR_FORMAT,
+          event);
+
       ret = demux_class->seek (demux, event);
 
       if (!ret) {
@@ -1105,6 +1383,7 @@
       } else {
         demux->priv->segment_seqnum = seqnum;
       }
+      GST_ADAPTIVE_DEMUX_SEGMENT_UNLOCK (demux);
 
       if (flags & GST_SEEK_FLAG_FLUSH) {
         GstEvent *fevent;
@@ -1122,6 +1401,7 @@
         GstClockTime period_start =
             gst_adaptive_demux_get_period_start_time (demux);
 
+        GST_ADAPTIVE_DEMUX_SEGMENT_LOCK (demux);
         for (iter = demux->streams; iter; iter = g_list_next (iter)) {
           GstAdaptiveDemuxStream *stream = iter->data;
           GstEvent *seg_evt;
@@ -1133,54 +1413,47 @@
           offset =
               gst_adaptive_demux_stream_get_presentation_offset (demux, stream);
           stream->segment.start += offset - period_start;
-          stream->segment.position = stream->segment.start;
+          if (demux->segment.rate > 0 && start_type != GST_SEEK_TYPE_NONE)
+            stream->segment.position = stream->segment.start;
+          else if (demux->segment.rate < 0 && stop_type != GST_SEEK_TYPE_NONE)
+            stream->segment.position = stream->segment.stop;
           seg_evt = gst_event_new_segment (&stream->segment);
           gst_event_set_seqnum (seg_evt, demux->priv->segment_seqnum);
           gst_event_replace (&stream->pending_segment, seg_evt);
           gst_event_unref (seg_evt);
         }
+
+        GST_ADAPTIVE_DEMUX_SEGMENT_UNLOCK (demux);
       }
 
       /* Restart the demux */
       gst_adaptive_demux_start_tasks (demux);
       GST_MANIFEST_UNLOCK (demux);
+      GST_API_UNLOCK (demux);
 
       gst_event_unref (event);
       return ret;
     }
     case GST_EVENT_RECONFIGURE:{
-      GList *iter;
+      GstAdaptiveDemuxStream *stream;
 
-      /* When exposing pads reconfigure events are received as result
-       * of the linking of the pads. The exposing and reconfigure happens
-       * from the same thread. This prevents a deadlock and, although
-       * not beautiful, makes this safe by avoiding that the demux->streams
-       * list gets modified while this loop is running */
-      if (!demux->priv->exposing)
-        GST_MANIFEST_LOCK (demux);
+      GST_MANIFEST_LOCK (demux);
+      stream = gst_adaptive_demux_find_stream_for_pad (demux, pad);
 
-      for (iter = demux->streams; iter; iter = g_list_next (iter)) {
-        GstAdaptiveDemuxStream *stream = iter->data;
-
-        if (stream->pad == pad) {
-          g_mutex_lock (&stream->fragment_download_lock);
-          if (stream->last_ret == GST_FLOW_NOT_LINKED) {
-            stream->last_ret = GST_FLOW_OK;
-            stream->restart_download = TRUE;
-            stream->need_header = TRUE;
-            stream->discont = TRUE;
-            GST_DEBUG_OBJECT (stream->pad, "Restarting download loop");
-            gst_task_start (stream->download_task);
-          }
-          g_mutex_unlock (&stream->fragment_download_lock);
-          gst_event_unref (event);
-          if (!demux->priv->exposing)
-            GST_MANIFEST_UNLOCK (demux);
-          return TRUE;
+      if (stream) {
+        if (stream->last_ret == GST_FLOW_NOT_LINKED) {
+          stream->last_ret = GST_FLOW_OK;
+          stream->restart_download = TRUE;
+          stream->need_header = TRUE;
+          stream->discont = TRUE;
+          GST_DEBUG_OBJECT (stream->pad, "Restarting download loop");
+          gst_task_start (stream->download_task);
         }
-      }
-      if (!demux->priv->exposing)
+        gst_event_unref (event);
         GST_MANIFEST_UNLOCK (demux);
+        return TRUE;
+      }
+      GST_MANIFEST_UNLOCK (demux);
     }
       break;
     case GST_EVENT_LATENCY:{
@@ -1216,8 +1489,10 @@
       GstClockTime duration = -1;
       GstFormat fmt;
 
-      GST_MANIFEST_LOCK (demux);
       gst_query_parse_duration (query, &fmt, NULL);
+
+      GST_MANIFEST_LOCK (demux);
+
       if (fmt == GST_FORMAT_TIME && demux->priv->have_manifest
           && !gst_adaptive_demux_is_live (demux)) {
         duration = demux_class->get_duration (demux);
@@ -1227,7 +1502,9 @@
           ret = TRUE;
         }
       }
+
       GST_MANIFEST_UNLOCK (demux);
+
       GST_LOG_OBJECT (demux, "GST_QUERY_DURATION returns %s with duration %"
           GST_TIME_FORMAT, ret ? "TRUE" : "FALSE", GST_TIME_ARGS (duration));
       break;
@@ -1243,6 +1520,7 @@
       gint64 start = 0;
 
       GST_MANIFEST_LOCK (demux);
+
       if (!demux->priv->have_manifest) {
         GST_MANIFEST_UNLOCK (demux);
         GST_INFO_OBJECT (demux,
@@ -1260,6 +1538,11 @@
         if (can_seek) {
           if (gst_adaptive_demux_is_live (demux)) {
             ret = gst_adaptive_demux_get_live_seek_range (demux, &start, &stop);
+            if (!ret) {
+              GST_MANIFEST_UNLOCK (demux);
+              GST_INFO_OBJECT (demux, "can't answer seeking query");
+              return FALSE;
+            }
           } else {
             duration = demux_class->get_duration (demux);
             if (GST_CLOCK_TIME_IS_VALID (duration) && duration > 0)
@@ -1275,14 +1558,17 @@
       break;
     }
     case GST_QUERY_URI:
-      /* TODO HLS can answer this differently it seems */
+
       GST_MANIFEST_LOCK (demux);
+
+      /* TODO HLS can answer this differently it seems */
       if (demux->manifest_uri) {
         /* FIXME: (hls) Do we answer with the variant playlist, with the current
          * playlist or the the uri of the last downlowaded fragment? */
         gst_query_set_uri (query, demux->manifest_uri);
         ret = TRUE;
       }
+
       GST_MANIFEST_UNLOCK (demux);
       break;
     default:
@@ -1296,59 +1582,101 @@
   return ret;
 }
 
+/* must be called with manifest_lock taken */
 static void
 gst_adaptive_demux_start_tasks (GstAdaptiveDemux * demux)
 {
   GList *iter;
 
   GST_INFO_OBJECT (demux, "Starting streams' tasks");
-  demux->cancelled = FALSE;
   for (iter = demux->streams; iter; iter = g_list_next (iter)) {
     GstAdaptiveDemuxStream *stream = iter->data;
+
+    g_mutex_lock (&stream->fragment_download_lock);
+    stream->cancelled = FALSE;
+    g_mutex_unlock (&stream->fragment_download_lock);
+
     stream->last_ret = GST_FLOW_OK;
     gst_task_start (stream->download_task);
   }
 }
 
+/* must be called with manifest_lock taken
+ * This function will temporarily release manifest_lock in order to join the
+ * download threads.
+ * The api_lock will still protect it against other threads trying to modify
+ * the demux element.
+ */
 static void
 gst_adaptive_demux_stop_tasks (GstAdaptiveDemux * demux)
 {
   GList *iter;
 
-  demux->cancelled = TRUE;
-
-  demux->priv->stop_updates_task = TRUE;
   gst_task_stop (demux->priv->updates_task);
-  g_cond_signal (&demux->priv->updates_timed_cond);
 
-  GST_MANIFEST_LOCK (demux);
-  g_cond_broadcast (&demux->manifest_cond);
-  GST_MANIFEST_UNLOCK (demux);
+  g_mutex_lock (&demux->priv->updates_timed_lock);
+  demux->priv->stop_updates_task = TRUE;
+  g_cond_signal (&demux->priv->updates_timed_cond);
+  g_mutex_unlock (&demux->priv->updates_timed_lock);
 
   gst_uri_downloader_cancel (demux->downloader);
+
   for (iter = demux->streams; iter; iter = g_list_next (iter)) {
     GstAdaptiveDemuxStream *stream = iter->data;
 
-    gst_task_stop (stream->download_task);
-    if (stream->src)
-      gst_element_set_state (stream->src, GST_STATE_READY);
     g_mutex_lock (&stream->fragment_download_lock);
-    stream->download_finished = TRUE;
+    stream->cancelled = TRUE;
+    gst_task_stop (stream->download_task);
     g_cond_signal (&stream->fragment_download_cond);
     g_mutex_unlock (&stream->fragment_download_lock);
   }
 
+  g_mutex_lock (&demux->priv->manifest_update_lock);
+  g_cond_broadcast (&demux->priv->manifest_cond);
+  g_mutex_unlock (&demux->priv->manifest_update_lock);
+
+  /* need to release manifest_lock before stopping the src element.
+   * The streams were asked to cancel, so they will not make any writes to demux
+   * object. Even if we temporarily release manifest_lock, the demux->streams
+   * cannot change and iter cannot be invalidated.
+   */
+  for (iter = demux->streams; iter; iter = g_list_next (iter)) {
+    GstAdaptiveDemuxStream *stream = iter->data;
+    GstElement *src = stream->src;
+
+    GST_MANIFEST_UNLOCK (demux);
+
+    if (src) {
+      gst_element_set_state (src, GST_STATE_READY);
+    }
+
+    /* stream->download_task value never changes, so it is safe to read it
+     * outside critical section
+     */
+    gst_task_join (stream->download_task);
+
+    GST_MANIFEST_LOCK (demux);
+  }
+
+  GST_MANIFEST_UNLOCK (demux);
+
+  /* demux->priv->updates_task value never changes, so it is safe to read it
+   * outside critical section
+   */
+  gst_task_join (demux->priv->updates_task);
+
+  GST_MANIFEST_LOCK (demux);
+
   for (iter = demux->streams; iter; iter = g_list_next (iter)) {
     GstAdaptiveDemuxStream *stream = iter->data;
 
-    gst_task_join (stream->download_task);
     stream->download_error_count = 0;
     stream->need_header = TRUE;
     gst_adapter_clear (stream->adapter);
   }
-  gst_task_join (demux->priv->updates_task);
 }
 
+/* must be called with manifest_lock taken */
 static gboolean
 gst_adaptive_demux_push_src_event (GstAdaptiveDemux * demux, GstEvent * event)
 {
@@ -1364,6 +1692,7 @@
   return ret;
 }
 
+/* must be called with manifest_lock taken */
 void
 gst_adaptive_demux_stream_set_caps (GstAdaptiveDemuxStream * stream,
     GstCaps * caps)
@@ -1374,6 +1703,7 @@
   gst_caps_unref (caps);
 }
 
+/* must be called with manifest_lock taken */
 void
 gst_adaptive_demux_stream_set_tags (GstAdaptiveDemuxStream * stream,
     GstTagList * tags)
@@ -1386,6 +1716,7 @@
   stream->pending_tags = tags;
 }
 
+/* must be called with manifest_lock taken */
 void
 gst_adaptive_demux_stream_queue_event (GstAdaptiveDemuxStream * stream,
     GstEvent * event)
@@ -1393,11 +1724,12 @@
   stream->pending_events = g_list_append (stream->pending_events, event);
 }
 
+/* must be called with manifest_lock taken */
 static guint64
 _update_average_bitrate (GstAdaptiveDemux * demux,
     GstAdaptiveDemuxStream * stream, guint64 new_bitrate)
 {
-  gint index = stream->moving_index % demux->num_lookback_fragments;
+  gint index = stream->moving_index % NUM_LOOKBACK_FRAGMENTS;
 
   stream->moving_bitrate -= stream->fragment_bitrates[index];
   stream->fragment_bitrates[index] = new_bitrate;
@@ -1405,11 +1737,12 @@
 
   stream->moving_index += 1;
 
-  if (stream->moving_index > demux->num_lookback_fragments)
-    return stream->moving_bitrate / demux->num_lookback_fragments;
+  if (stream->moving_index > NUM_LOOKBACK_FRAGMENTS)
+    return stream->moving_bitrate / NUM_LOOKBACK_FRAGMENTS;
   return stream->moving_bitrate / stream->moving_index;
 }
 
+/* must be called with manifest_lock taken */
 static guint64
 gst_adaptive_demux_stream_update_current_bitrate (GstAdaptiveDemux * demux,
     GstAdaptiveDemuxStream * stream)
@@ -1417,11 +1750,16 @@
   guint64 average_bitrate;
   guint64 fragment_bitrate;
 
-  fragment_bitrate =
-      (stream->fragment_total_size * 8) /
-      ((double) stream->fragment_total_time / G_GUINT64_CONSTANT (1000000));
-  stream->fragment_total_size = 0;
-  stream->fragment_total_time = 0;
+  if (demux->connection_speed) {
+    GST_LOG_OBJECT (demux, "Connection-speed is set to %u kbps, using it",
+        demux->connection_speed / 1000);
+    return demux->connection_speed;
+  }
+
+  g_object_get (stream->queue, "avg-in-rate", &fragment_bitrate, NULL);
+  fragment_bitrate *= 8;
+  GST_DEBUG_OBJECT (demux, "Download bitrate is : %" G_GUINT64_FORMAT " bps",
+      fragment_bitrate);
 
   average_bitrate = _update_average_bitrate (demux, stream, fragment_bitrate);
 
@@ -1429,24 +1767,19 @@
       fragment_bitrate);
   GST_INFO_OBJECT (stream,
       "Last %u fragments average bitrate is %" G_GUINT64_FORMAT,
-      demux->num_lookback_fragments, average_bitrate);
+      NUM_LOOKBACK_FRAGMENTS, average_bitrate);
 
   /* Conservative approach, make sure we don't upgrade too fast */
   stream->current_download_rate = MIN (average_bitrate, fragment_bitrate);
 
-  if (demux->connection_speed) {
-    GST_LOG_OBJECT (demux, "Connection-speed is set to %u kbps, using it",
-        demux->connection_speed / 1000);
-    return demux->connection_speed;
-  }
-
   stream->current_download_rate *= demux->bitrate_limit;
   GST_DEBUG_OBJECT (demux, "Bitrate after bitrate limit (%0.2f): %"
-      G_GUINT64_FORMAT, demux->bitrate_limit, stream->current_download_rate);
-
+      G_GUINT64_FORMAT, demux->bitrate_limit,
+      stream->current_download_rate * 8);
   return stream->current_download_rate;
 }
 
+/* must be called with manifest_lock taken */
 static GstFlowReturn
 gst_adaptive_demux_combine_flows (GstAdaptiveDemux * demux)
 {
@@ -1457,7 +1790,6 @@
   for (iter = demux->streams; iter; iter = g_list_next (iter)) {
     GstAdaptiveDemuxStream *stream = iter->data;
 
-    g_mutex_lock (&stream->fragment_download_lock);
     if (stream->last_ret != GST_FLOW_NOT_LINKED) {
       all_notlinked = FALSE;
       if (stream->last_ret != GST_FLOW_EOS)
@@ -1466,10 +1798,8 @@
 
     if (stream->last_ret <= GST_FLOW_NOT_NEGOTIATED
         || stream->last_ret == GST_FLOW_FLUSHING) {
-      g_mutex_unlock (&stream->fragment_download_lock);
       return stream->last_ret;
     }
-    g_mutex_unlock (&stream->fragment_download_lock);
   }
   if (all_notlinked)
     return GST_FLOW_NOT_LINKED;
@@ -1478,6 +1808,9 @@
   return GST_FLOW_OK;
 }
 
+/* must be called with manifest_lock taken.
+ * Temporarily releases manifest_lock
+ */
 GstFlowReturn
 gst_adaptive_demux_stream_push_buffer (GstAdaptiveDemuxStream * stream,
     GstBuffer * buffer)
@@ -1485,6 +1818,9 @@
   GstAdaptiveDemux *demux = stream->demux;
   GstFlowReturn ret = GST_FLOW_OK;
   gboolean discont = FALSE;
+  /* Pending events */
+  GstEvent *pending_caps = NULL, *pending_segment = NULL, *pending_tags = NULL;
+  GList *pending_events = NULL;
 
   if (stream->first_fragment_buffer) {
     GstClockTime offset =
@@ -1492,6 +1828,7 @@
     GstClockTime period_start =
         gst_adaptive_demux_get_period_start_time (demux);
 
+    GST_ADAPTIVE_DEMUX_SEGMENT_LOCK (demux);
     if (demux->segment.rate < 0)
       /* Set DISCONT flag for every first buffer in reverse playback mode
        * as each fragment for its own has to be reversed */
@@ -1511,6 +1848,11 @@
         demux->segment.position =
             stream->segment.position - offset + period_start;
     }
+    GST_ADAPTIVE_DEMUX_SEGMENT_UNLOCK (demux);
+
+    GST_LOG_OBJECT (stream->pad,
+        "Going to push buffer with PTS %" GST_TIME_FORMAT,
+        GST_TIME_ARGS (GST_BUFFER_PTS (buffer)));
   } else {
     GST_BUFFER_PTS (buffer) = GST_CLOCK_TIME_NONE;
   }
@@ -1531,43 +1873,85 @@
 
   GST_BUFFER_DURATION (buffer) = GST_CLOCK_TIME_NONE;
   GST_BUFFER_DTS (buffer) = GST_CLOCK_TIME_NONE;
-
   if (G_UNLIKELY (stream->pending_caps)) {
-    GST_DEBUG_OBJECT (stream->pad, "Setting pending caps: %" GST_PTR_FORMAT,
-        stream->pending_caps);
-    gst_pad_set_caps (stream->pad, stream->pending_caps);
+    pending_caps = gst_event_new_caps (stream->pending_caps);
     gst_caps_unref (stream->pending_caps);
     stream->pending_caps = NULL;
   }
   if (G_UNLIKELY (stream->pending_segment)) {
-    GST_DEBUG_OBJECT (stream->pad, "Sending pending seg: %" GST_PTR_FORMAT,
-        stream->pending_segment);
-    gst_pad_push_event (stream->pad, stream->pending_segment);
+    GST_ADAPTIVE_DEMUX_SEGMENT_LOCK (demux);
+    pending_segment = stream->pending_segment;
     stream->pending_segment = NULL;
+    GST_ADAPTIVE_DEMUX_SEGMENT_UNLOCK (demux);
   }
-  if (G_UNLIKELY (stream->pending_tags)) {
-    GST_DEBUG_OBJECT (stream->pad, "Sending pending tags: %" GST_PTR_FORMAT,
-        stream->pending_tags);
-    gst_pad_push_event (stream->pad, gst_event_new_tag (stream->pending_tags));
+  if (G_UNLIKELY (stream->pending_tags || stream->bitrate_changed)) {
+    GstTagList *tags = stream->pending_tags;
+
     stream->pending_tags = NULL;
+    stream->bitrate_changed = 0;
+
+    if (stream->fragment.bitrate != 0) {
+      if (tags)
+        tags = gst_tag_list_make_writable (tags);
+      else
+        tags = gst_tag_list_new_empty ();
+
+      gst_tag_list_add (tags, GST_TAG_MERGE_KEEP,
+          GST_TAG_NOMINAL_BITRATE, stream->fragment.bitrate, NULL);
+    }
+    pending_tags = gst_event_new_tag (tags);
   }
-  while (stream->pending_events != NULL) {
-    GstEvent *event = stream->pending_events->data;
+  if (G_UNLIKELY (stream->pending_events)) {
+    pending_events = stream->pending_events;
+    stream->pending_events = NULL;
+  }
+
+  GST_MANIFEST_UNLOCK (demux);
+
+  /* Do not push events or buffers holding the manifest lock */
+  if (G_UNLIKELY (pending_caps)) {
+    GST_DEBUG_OBJECT (stream->pad, "Setting pending caps: %" GST_PTR_FORMAT,
+        pending_caps);
+    gst_pad_push_event (stream->pad, pending_caps);
+  }
+  if (G_UNLIKELY (pending_segment)) {
+    GST_DEBUG_OBJECT (stream->pad, "Sending pending seg: %" GST_PTR_FORMAT,
+        pending_segment);
+    gst_pad_push_event (stream->pad, pending_segment);
+  }
+  if (G_UNLIKELY (pending_tags)) {
+    GST_DEBUG_OBJECT (stream->pad, "Sending pending tags: %" GST_PTR_FORMAT,
+        pending_tags);
+    gst_pad_push_event (stream->pad, pending_tags);
+  }
+  while (pending_events != NULL) {
+    GstEvent *event = pending_events->data;
 
     if (!gst_pad_push_event (stream->pad, event))
       GST_ERROR_OBJECT (stream->pad, "Failed to send pending event");
 
-    stream->pending_events =
-        g_list_delete_link (stream->pending_events, stream->pending_events);
+    pending_events = g_list_delete_link (pending_events, pending_events);
   }
 
   ret = gst_pad_push (stream->pad, buffer);
+
+  GST_MANIFEST_LOCK (demux);
+
+  g_mutex_lock (&stream->fragment_download_lock);
+  if (G_UNLIKELY (stream->cancelled)) {
+    ret = stream->last_ret = GST_FLOW_FLUSHING;
+    g_mutex_unlock (&stream->fragment_download_lock);
+    return ret;
+  }
+  g_mutex_unlock (&stream->fragment_download_lock);
+
   GST_LOG_OBJECT (stream->pad, "Push result: %d %s", ret,
       gst_flow_get_name (ret));
 
   return ret;
 }
 
+/* must be called with manifest_lock taken */
 static GstFlowReturn
 gst_adaptive_demux_stream_finish_fragment_default (GstAdaptiveDemux * demux,
     GstAdaptiveDemuxStream * stream)
@@ -1580,6 +1964,9 @@
       stream->fragment.duration);
 }
 
+/* must be called with manifest_lock taken.
+ * Can temporarily release manifest_lock
+ */
 static GstFlowReturn
 gst_adaptive_demux_stream_data_received_default (GstAdaptiveDemux * demux,
     GstAdaptiveDemuxStream * stream)
@@ -1594,12 +1981,28 @@
 static GstFlowReturn
 _src_chain (GstPad * pad, GstObject * parent, GstBuffer * buffer)
 {
-  GstPad *srcpad = (GstPad *) parent;
-  GstAdaptiveDemuxStream *stream = gst_pad_get_element_private (srcpad);
-  GstAdaptiveDemux *demux = stream->demux;
-  GstAdaptiveDemuxClass *klass = GST_ADAPTIVE_DEMUX_GET_CLASS (demux);
+  GstAdaptiveDemuxStream *stream;
+  GstAdaptiveDemux *demux;
+  GstAdaptiveDemuxClass *klass;
   GstFlowReturn ret = GST_FLOW_OK;
 
+  demux = GST_ADAPTIVE_DEMUX_CAST (parent);
+  stream = gst_pad_get_element_private (pad);
+  klass = GST_ADAPTIVE_DEMUX_GET_CLASS (demux);
+
+  GST_MANIFEST_LOCK (demux);
+
+  /* do not make any changes if the stream is cancelled */
+  g_mutex_lock (&stream->fragment_download_lock);
+  if (G_UNLIKELY (stream->cancelled)) {
+    g_mutex_unlock (&stream->fragment_download_lock);
+    gst_buffer_unref (buffer);
+    ret = stream->last_ret = GST_FLOW_FLUSHING;
+    GST_MANIFEST_UNLOCK (demux);
+    return ret;
+  }
+  g_mutex_unlock (&stream->fragment_download_lock);
+
   if (stream->starting_fragment) {
     GstClockTime offset =
         gst_adaptive_demux_stream_get_presentation_offset (demux, stream);
@@ -1608,7 +2011,10 @@
 
     stream->starting_fragment = FALSE;
     if (klass->start_fragment) {
-      klass->start_fragment (demux, stream);
+      if (!klass->start_fragment (demux, stream)) {
+        ret = GST_FLOW_ERROR;
+        goto error;
+      }
     }
 
     GST_BUFFER_PTS (buffer) = stream->fragment.timestamp;
@@ -1619,6 +2025,7 @@
         GST_TIME_ARGS (GST_BUFFER_PTS (buffer)));
 
     if (GST_BUFFER_PTS_IS_VALID (buffer)) {
+      GST_ADAPTIVE_DEMUX_SEGMENT_LOCK (demux);
       stream->segment.position = GST_BUFFER_PTS (buffer);
 
       /* Convert from position inside the stream's segment to the demuxer's
@@ -1627,25 +2034,63 @@
           demux->segment.position)
         demux->segment.position =
             stream->segment.position - offset + period_start;
+      GST_ADAPTIVE_DEMUX_SEGMENT_UNLOCK (demux);
     }
 
   } else {
     GST_BUFFER_PTS (buffer) = GST_CLOCK_TIME_NONE;
   }
+  if (stream->downloading_first_buffer) {
+    gint64 chunk_size = 0;
+
+    stream->downloading_first_buffer = FALSE;
+
+    if (!stream->downloading_header && !stream->downloading_index) {
+      /* If this is the first buffer of a fragment (not the headers or index)
+       * and we don't have a birate from the sub-class, then see if we
+       * can work it out from the fragment size and duration */
+      if (stream->fragment.bitrate == 0 &&
+          stream->fragment.duration != 0 &&
+          gst_element_query_duration (stream->uri_handler, GST_FORMAT_BYTES,
+              &chunk_size)) {
+        guint bitrate = MIN (G_MAXUINT, gst_util_uint64_scale (chunk_size,
+                8 * GST_SECOND, stream->fragment.duration));
+        GST_LOG_OBJECT (demux,
+            "Fragment has size %" G_GUINT64_FORMAT " duration %" GST_TIME_FORMAT
+            " = bitrate %u", chunk_size,
+            GST_TIME_ARGS (stream->fragment.duration), bitrate);
+        stream->fragment.bitrate = bitrate;
+      }
+      if (stream->fragment.bitrate) {
+        stream->bitrate_changed = TRUE;
+      } else {
+        GST_WARNING_OBJECT (demux, "Bitrate for fragment not available");
+      }
+    }
+  }
 
   stream->download_total_time +=
       g_get_monotonic_time () - stream->download_chunk_start_time;
   stream->download_total_bytes += gst_buffer_get_size (buffer);
 
-  stream->fragment_total_size += gst_buffer_get_size (buffer);
-  stream->fragment_total_time +=
-      g_get_monotonic_time () - stream->download_chunk_start_time;
-
   gst_adapter_push (stream->adapter, buffer);
   GST_DEBUG_OBJECT (stream->pad, "Received buffer of size %" G_GSIZE_FORMAT
       ". Now %" G_GSIZE_FORMAT " on adapter", gst_buffer_get_size (buffer),
       gst_adapter_available (stream->adapter));
+
   ret = klass->data_received (demux, stream);
+
+  if (ret == GST_FLOW_FLUSHING) {
+    /* do not make any changes if the stream is cancelled */
+    g_mutex_lock (&stream->fragment_download_lock);
+    if (G_UNLIKELY (stream->cancelled)) {
+      g_mutex_unlock (&stream->fragment_download_lock);
+      GST_MANIFEST_UNLOCK (demux);
+      return ret;
+    }
+    g_mutex_unlock (&stream->fragment_download_lock);
+  }
+
   stream->download_chunk_start_time = g_get_monotonic_time ();
 
   if (ret != GST_FLOW_OK) {
@@ -1665,16 +2110,18 @@
       ret = GST_FLOW_EOS;       /* return EOS to make the source stop */
   }
 
+error:
+
+  GST_MANIFEST_UNLOCK (demux);
+
   return ret;
 }
 
+/* must be called with manifest_lock taken */
 static void
 gst_adaptive_demux_stream_fragment_download_finish (GstAdaptiveDemuxStream *
     stream, GstFlowReturn ret, GError * err)
 {
-  g_mutex_lock (&stream->fragment_download_lock);
-  stream->download_finished = TRUE;
-
   GST_DEBUG_OBJECT (stream->pad, "Download finish: %d %s - err: %p", ret,
       gst_flow_get_name (ret), err);
 
@@ -1687,6 +2134,8 @@
       stream->last_error = g_error_copy (err);
     }
   }
+  g_mutex_lock (&stream->fragment_download_lock);
+  stream->download_finished = TRUE;
   g_cond_signal (&stream->fragment_download_cond);
   g_mutex_unlock (&stream->fragment_download_lock);
 }
@@ -1694,17 +2143,21 @@
 static gboolean
 _src_event (GstPad * pad, GstObject * parent, GstEvent * event)
 {
-  GstPad *srcpad = GST_PAD_CAST (parent);
-  GstAdaptiveDemuxStream *stream = gst_pad_get_element_private (srcpad);
+  GstAdaptiveDemuxStream *stream = gst_pad_get_element_private (pad);
+  GstAdaptiveDemux *demux = stream->demux;
 
   switch (GST_EVENT_TYPE (event)) {
     case GST_EVENT_EOS:{
       GstAdaptiveDemuxClass *klass;
       GstFlowReturn ret;
 
-      klass = GST_ADAPTIVE_DEMUX_GET_CLASS (stream->demux);
-      ret = klass->finish_fragment (stream->demux, stream);
+      GST_MANIFEST_LOCK (demux);
+
+      klass = GST_ADAPTIVE_DEMUX_GET_CLASS (demux);
+      ret = klass->finish_fragment (demux, stream);
       gst_adaptive_demux_stream_fragment_download_finish (stream, ret, NULL);
+
+      GST_MANIFEST_UNLOCK (demux);
       break;
     }
     default:
@@ -1719,6 +2172,8 @@
 static gboolean
 _src_query (GstPad * pad, GstObject * parent, GstQuery * query)
 {
+  GstAdaptiveDemuxStream *stream = gst_pad_get_element_private (pad);
+
   switch (GST_QUERY_TYPE (query)) {
     case GST_QUERY_ALLOCATION:
       return FALSE;
@@ -1727,9 +2182,12 @@
       break;
   }
 
-  return gst_pad_query_default (pad, parent, query);
+  return gst_pad_peer_query (stream->pad, query);
 }
 
+/* must be called with manifest_lock taken.
+ * Can temporarily release manifest_lock
+ */
 static gboolean
 gst_adaptive_demux_stream_wait_manifest_update (GstAdaptiveDemux * demux,
     GstAdaptiveDemuxStream * stream)
@@ -1740,13 +2198,33 @@
    * us to download in the playlist or the playlist
    * became non-live */
   while (TRUE) {
-    if (demux->cancelled) {
+    GST_DEBUG_OBJECT (demux, "No fragment left but live playlist, wait a bit");
+
+    /* get the manifest_update_lock while still holding the manifest_lock.
+     * This will prevent other threads to signal the condition (they will need
+     * both manifest_lock and manifest_update_lock in order to signal).
+     * It cannot deadlock because all threads always get the manifest_lock first
+     * and manifest_update_lock second.
+     */
+    g_mutex_lock (&demux->priv->manifest_update_lock);
+
+    GST_MANIFEST_UNLOCK (demux);
+
+    g_cond_wait (&demux->priv->manifest_cond,
+        &demux->priv->manifest_update_lock);
+    g_mutex_unlock (&demux->priv->manifest_update_lock);
+
+    GST_MANIFEST_LOCK (demux);
+
+    /* check for cancelled every time we get the manifest_lock */
+    g_mutex_lock (&stream->fragment_download_lock);
+    if (G_UNLIKELY (stream->cancelled)) {
       ret = FALSE;
+      stream->last_ret = GST_FLOW_FLUSHING;
+      g_mutex_unlock (&stream->fragment_download_lock);
       break;
     }
-
-    GST_DEBUG_OBJECT (demux, "No fragment left but live playlist, wait a bit");
-    g_cond_wait (&demux->manifest_cond, GST_MANIFEST_GET_LOCK (demux));
+    g_mutex_unlock (&stream->fragment_download_lock);
 
     /* Got a new fragment or not live anymore? */
     if (gst_adaptive_demux_stream_has_next_fragment (demux, stream)) {
@@ -1767,36 +2245,7 @@
   return ret;
 }
 
-static gboolean
-_adaptive_demux_pad_remove_eos_sticky (GstPad * pad, GstEvent ** event,
-    gpointer udata)
-{
-  if (GST_EVENT_TYPE (*event) == GST_EVENT_EOS) {
-    gst_event_replace (event, NULL);
-    return FALSE;
-  }
-  return TRUE;
-}
-
-static void
-gst_adaptive_demux_stream_clear_eos_and_flush_state (GstAdaptiveDemuxStream *
-    stream)
-{
-  GstPad *internal_pad;
-
-  internal_pad =
-      GST_PAD_CAST (gst_proxy_pad_get_internal (GST_PROXY_PAD (stream->pad)));
-  gst_pad_sticky_events_foreach (internal_pad,
-      _adaptive_demux_pad_remove_eos_sticky, NULL);
-  GST_OBJECT_FLAG_UNSET (internal_pad, GST_PAD_FLAG_EOS);
-  /* In case the stream is recovering from a flushing seek it is also needed
-   * to remove the flushing state from this pad. The flushing state is set
-   * because of the flow return propagating until the source element */
-  GST_PAD_UNSET_FLUSHING (internal_pad);
-
-  gst_object_unref (internal_pad);
-}
-
+/* must be called with manifest_lock taken */
 static gboolean
 gst_adaptive_demux_stream_update_source (GstAdaptiveDemuxStream * stream,
     const gchar * uri, const gchar * referer, gboolean refresh,
@@ -1813,7 +2262,7 @@
     gchar *old_protocol, *new_protocol;
     gchar *old_uri;
 
-    old_uri = gst_uri_handler_get_uri (GST_URI_HANDLER (stream->src));
+    old_uri = gst_uri_handler_get_uri (GST_URI_HANDLER (stream->uri_handler));
     old_protocol = gst_uri_get_protocol (old_uri);
     new_protocol = gst_uri_get_protocol (uri);
 
@@ -1828,7 +2277,8 @@
       GError *err = NULL;
 
       GST_DEBUG_OBJECT (demux, "Re-using old source element");
-      if (!gst_uri_handler_set_uri (GST_URI_HANDLER (stream->src), uri, &err)) {
+      if (!gst_uri_handler_set_uri (GST_URI_HANDLER (stream->uri_handler), uri,
+              &err)) {
         GST_DEBUG_OBJECT (demux, "Failed to re-use old source element: %s",
             err->message);
         g_clear_error (&err);
@@ -1845,22 +2295,42 @@
   }
 
   if (stream->src == NULL) {
+    GstPad *uri_handler_src;
+    GstPad *queue_sink;
+    GstPad *queue_src;
+    GstElement *uri_handler;
+    GstElement *queue;
+    GstPadLinkReturn pad_link_ret;
     GObjectClass *gobject_class;
-    GstPad *internal_pad;
+    gchar *internal_name, *bin_name;
 
-    stream->src = gst_element_make_from_uri (GST_URI_SRC, uri, NULL, NULL);
-    if (stream->src == NULL) {
+    /* Our src consists of a bin containing uri_handler -> queue2 . The
+     * purpose of the queue2 is to allow the uri_handler to download an
+     * entire fragment without blocking, so we can accurately measure the
+     * download bitrate. */
+
+    queue = gst_element_factory_make ("queue2", NULL);
+    if (queue == NULL)
+      return FALSE;
+
+    g_object_set (queue, "max-size-bytes", (guint) SRC_QUEUE_MAX_BYTES, NULL);
+    g_object_set (queue, "max-size-buffers", (guint) 0, NULL);
+    g_object_set (queue, "max-size-time", (guint64) 0, NULL);
+
+    uri_handler = gst_element_make_from_uri (GST_URI_SRC, uri, NULL, NULL);
+    if (uri_handler == NULL) {
       GST_ELEMENT_ERROR (demux, CORE, MISSING_PLUGIN,
           ("Missing plugin to handle URI: '%s'", uri), (NULL));
+      gst_object_unref (queue);
       return FALSE;
     }
 
-    gobject_class = G_OBJECT_GET_CLASS (stream->src);
+    gobject_class = G_OBJECT_GET_CLASS (uri_handler);
 
     if (g_object_class_find_property (gobject_class, "compress"))
-      g_object_set (stream->src, "compress", FALSE, NULL);
+      g_object_set (uri_handler, "compress", FALSE, NULL);
     if (g_object_class_find_property (gobject_class, "keep-alive"))
-      g_object_set (stream->src, "keep-alive", TRUE, NULL);
+      g_object_set (uri_handler, "keep-alive", TRUE, NULL);
     if (g_object_class_find_property (gobject_class, "extra-headers")) {
       if (referer || refresh || !allow_cache) {
         GstStructure *extra_headers = gst_structure_new_empty ("headers");
@@ -1876,37 +2346,86 @@
           gst_structure_set (extra_headers, "Cache-Control", G_TYPE_STRING,
               "max-age=0", NULL);
 
-        g_object_set (stream->src, "extra-headers", extra_headers, NULL);
+        g_object_set (uri_handler, "extra-headers", extra_headers, NULL);
 
         gst_structure_free (extra_headers);
       } else {
-        g_object_set (stream->src, "extra-headers", NULL, NULL);
+        g_object_set (uri_handler, "extra-headers", NULL, NULL);
       }
     }
 
+    /* Source bin creation */
+    bin_name = g_strdup_printf ("srcbin-%s", GST_PAD_NAME (stream->pad));
+    stream->src = gst_bin_new (bin_name);
+    g_free (bin_name);
+    if (stream->src == NULL) {
+      gst_object_unref (queue);
+      gst_object_unref (uri_handler);
+      return FALSE;
+    }
+
+    gst_bin_add (GST_BIN_CAST (stream->src), queue);
+    gst_bin_add (GST_BIN_CAST (stream->src), uri_handler);
+
+    uri_handler_src = gst_element_get_static_pad (uri_handler, "src");
+    queue_sink = gst_element_get_static_pad (queue, "sink");
+
+    pad_link_ret =
+        gst_pad_link_full (uri_handler_src, queue_sink,
+        GST_PAD_LINK_CHECK_NOTHING);
+    if (GST_PAD_LINK_FAILED (pad_link_ret)) {
+      GST_WARNING_OBJECT (demux,
+          "Could not link pads %s:%s to %s:%s for reason %d",
+          GST_DEBUG_PAD_NAME (uri_handler_src), GST_DEBUG_PAD_NAME (queue_sink),
+          pad_link_ret);
+      g_object_unref (queue_sink);
+      g_object_unref (uri_handler_src);
+      gst_object_unref (stream->src);
+      stream->src = NULL;
+      return FALSE;
+    }
+
+    g_object_unref (queue_sink);
+    g_object_unref (uri_handler_src);
+    queue_src = gst_element_get_static_pad (queue, "src");
+    stream->src_srcpad = gst_ghost_pad_new ("src", queue_src);
+    g_object_unref (queue_src);
+    gst_element_add_pad (stream->src, stream->src_srcpad);
+
     gst_element_set_locked_state (stream->src, TRUE);
     gst_bin_add (GST_BIN_CAST (demux), stream->src);
     stream->src_srcpad = gst_element_get_static_pad (stream->src, "src");
 
-    gst_ghost_pad_set_target (GST_GHOST_PAD_CAST (stream->pad),
-        stream->src_srcpad);
-
-    /* set up our internal pad to drop all events from
+    /* set up our internal floating pad to drop all events from
      * the http src we don't care about. On the chain function
-     * we just push the buffer forward, but this way dash can get
-     * the flow return from downstream */
-    internal_pad =
-        GST_PAD_CAST (gst_proxy_pad_get_internal (GST_PROXY_PAD (stream->pad)));
-    gst_pad_set_chain_function (GST_PAD_CAST (internal_pad), _src_chain);
-    gst_pad_set_event_function (GST_PAD_CAST (internal_pad), _src_event);
-    /* need to set query otherwise deadlocks happen with allocation queries */
-    gst_pad_set_query_function (GST_PAD_CAST (internal_pad), _src_query);
-    gst_object_unref (internal_pad);
+     * we just push the buffer forward */
+    internal_name = g_strdup_printf ("internal-%s", GST_PAD_NAME (stream->pad));
+    stream->internal_pad = gst_pad_new (internal_name, GST_PAD_SINK);
+    g_free (internal_name);
+    gst_object_set_parent (GST_OBJECT_CAST (stream->internal_pad),
+        GST_OBJECT_CAST (demux));
+    GST_OBJECT_FLAG_SET (stream->internal_pad, GST_PAD_FLAG_NEED_PARENT);
+    gst_pad_set_element_private (stream->internal_pad, stream);
+    gst_pad_set_active (stream->internal_pad, TRUE);
+    gst_pad_set_chain_function (stream->internal_pad, _src_chain);
+    gst_pad_set_event_function (stream->internal_pad, _src_event);
+    gst_pad_set_query_function (stream->internal_pad, _src_query);
+
+    if (gst_pad_link_full (stream->src_srcpad, stream->internal_pad,
+            GST_PAD_LINK_CHECK_NOTHING) != GST_PAD_LINK_OK) {
+      GST_ERROR_OBJECT (stream->pad, "Failed to link internal pad");
+      return FALSE;
+    }
+
+    stream->uri_handler = uri_handler;
+    stream->queue = queue;
   }
   return TRUE;
 }
 
-/* must be called with the stream's fragment_download_lock */
+/* must be called with manifest_lock taken.
+ * Can temporarily release manifest_lock
+ */
 static GstFlowReturn
 gst_adaptive_demux_stream_download_uri (GstAdaptiveDemux * demux,
     GstAdaptiveDemuxStream * stream, const gchar * uri, gint64 start,
@@ -1916,19 +2435,21 @@
   GST_DEBUG_OBJECT (stream->pad, "Downloading uri: %s, range:%" G_GINT64_FORMAT
       " - %" G_GINT64_FORMAT, uri, start, end);
 
-  stream->download_finished = FALSE;
-
   if (!gst_adaptive_demux_stream_update_source (stream, uri, NULL, FALSE, TRUE)) {
-    g_mutex_lock (&stream->fragment_download_lock);
     ret = stream->last_ret = GST_FLOW_ERROR;
-    g_mutex_unlock (&stream->fragment_download_lock);
     return ret;
   }
 
   if (gst_element_set_state (stream->src,
           GST_STATE_READY) != GST_STATE_CHANGE_FAILURE) {
     if (start != 0 || end != -1) {
-      if (!gst_element_send_event (stream->src, gst_event_new_seek (1.0,
+      /* HTTP ranges are inclusive, GStreamer segments are exclusive for the
+       * stop position */
+      if (end != -1)
+        end += 1;
+      /* Send the seek event to the uri_handler, as the other pipeline elements
+       * can't handle it when READY. */
+      if (!gst_element_send_event (stream->uri_handler, gst_event_new_seek (1.0,
                   GST_FORMAT_BYTES, (GstSeekFlags) GST_SEEK_FLAG_FLUSH,
                   GST_SEEK_TYPE_SET, start, GST_SEEK_TYPE_SET, end))) {
 
@@ -1941,45 +2462,91 @@
       }
     }
 
-    g_mutex_lock (&stream->fragment_download_lock);
     if (G_LIKELY (stream->last_ret == GST_FLOW_OK)) {
       stream->download_start_time = g_get_monotonic_time ();
       stream->download_chunk_start_time = g_get_monotonic_time ();
-      g_mutex_unlock (&stream->fragment_download_lock);
-      gst_element_sync_state_with_parent (stream->src);
+
+      /* src element is in state READY. Before we start it, we reset
+       * download_finished
+       */
       g_mutex_lock (&stream->fragment_download_lock);
+      stream->download_finished = FALSE;
+      stream->downloading_first_buffer = TRUE;
+      g_mutex_unlock (&stream->fragment_download_lock);
+
+      GST_MANIFEST_UNLOCK (demux);
+
+      if (!gst_element_sync_state_with_parent (stream->src)) {
+        GST_WARNING_OBJECT (demux, "Could not sync state for src element");
+        GST_MANIFEST_LOCK (demux);
+        ret = stream->last_ret = GST_FLOW_ERROR;
+        return ret;
+      }
 
       /* wait for the fragment to be completely downloaded */
       GST_DEBUG_OBJECT (stream->pad,
           "Waiting for fragment download to finish: %s", uri);
-      while (!stream->demux->cancelled && !stream->download_finished) {
+
+      g_mutex_lock (&stream->fragment_download_lock);
+      if (G_UNLIKELY (stream->cancelled)) {
+        g_mutex_unlock (&stream->fragment_download_lock);
+        GST_MANIFEST_LOCK (demux);
+        ret = stream->last_ret = GST_FLOW_FLUSHING;
+        return ret;
+      }
+      while (!stream->cancelled && !stream->download_finished) {
         g_cond_wait (&stream->fragment_download_cond,
             &stream->fragment_download_lock);
       }
+      g_mutex_unlock (&stream->fragment_download_lock);
+
+      GST_MANIFEST_LOCK (demux);
+      g_mutex_lock (&stream->fragment_download_lock);
+      if (G_UNLIKELY (stream->cancelled)) {
+        ret = stream->last_ret = GST_FLOW_FLUSHING;
+        g_mutex_unlock (&stream->fragment_download_lock);
+        return ret;
+      }
+      g_mutex_unlock (&stream->fragment_download_lock);
+
       ret = stream->last_ret;
 
       GST_DEBUG_OBJECT (stream->pad, "Fragment download finished: %s %d %s",
           uri, stream->last_ret, gst_flow_get_name (stream->last_ret));
     }
-    g_mutex_unlock (&stream->fragment_download_lock);
   } else {
-    g_mutex_lock (&stream->fragment_download_lock);
     if (stream->last_ret == GST_FLOW_OK)
       stream->last_ret = GST_FLOW_CUSTOM_ERROR;
     ret = GST_FLOW_CUSTOM_ERROR;
-    g_mutex_unlock (&stream->fragment_download_lock);
   }
 
-  /* flush the proxypads so that the EOS state is reset */
-  gst_pad_push_event (stream->src_srcpad, gst_event_new_flush_start ());
-  gst_pad_push_event (stream->src_srcpad, gst_event_new_flush_stop (TRUE));
+  /* changing src element state might try to join the streaming thread, so
+   * we must not hold the manifest lock.
+   */
+  GST_MANIFEST_UNLOCK (demux);
 
   gst_element_set_state (stream->src, GST_STATE_READY);
-  gst_adaptive_demux_stream_clear_eos_and_flush_state (stream);
+
+  GST_MANIFEST_LOCK (demux);
+  g_mutex_lock (&stream->fragment_download_lock);
+  if (G_UNLIKELY (stream->cancelled)) {
+    ret = stream->last_ret = GST_FLOW_FLUSHING;
+    g_mutex_unlock (&stream->fragment_download_lock);
+    return ret;
+  }
+  g_mutex_unlock (&stream->fragment_download_lock);
+
+  /* deactivate and reactivate our ghostpad to make it fresh for a new
+   * stream */
+  gst_pad_set_active (stream->internal_pad, FALSE);
+  gst_pad_set_active (stream->internal_pad, TRUE);
 
   return ret;
 }
 
+/* must be called with manifest_lock taken.
+ * Can temporarily release manifest_lock
+ */
 static GstFlowReturn
 gst_adaptive_demux_stream_download_header_fragment (GstAdaptiveDemuxStream *
     stream)
@@ -2000,7 +2567,7 @@
   }
 
   /* check if we have an index */
-  if (!demux->cancelled && ret == GST_FLOW_OK) {        /* TODO check for other valid types */
+  if (ret == GST_FLOW_OK) {     /* TODO check for other valid types */
 
     if (stream->fragment.index_uri != NULL) {
       GST_DEBUG_OBJECT (demux,
@@ -2018,6 +2585,9 @@
   return ret;
 }
 
+/* must be called with manifest_lock taken.
+ * Can temporarily release manifest_lock
+ */
 static GstFlowReturn
 gst_adaptive_demux_stream_download_fragment (GstAdaptiveDemuxStream * stream)
 {
@@ -2025,11 +2595,9 @@
   gchar *url = NULL;
   GstFlowReturn ret = GST_FLOW_OK;
 
-  g_mutex_lock (&stream->fragment_download_lock);
   stream->starting_fragment = TRUE;
   stream->last_ret = GST_FLOW_OK;
   stream->first_fragment_buffer = TRUE;
-  g_mutex_unlock (&stream->fragment_download_lock);
 
   if (stream->fragment.uri == NULL && stream->fragment.header_uri == NULL &&
       stream->fragment.index_uri == NULL)
@@ -2037,10 +2605,10 @@
 
   if (stream->need_header) {
     ret = gst_adaptive_demux_stream_download_header_fragment (stream);
-    stream->need_header = FALSE;
     if (ret != GST_FLOW_OK) {
       return ret;
     }
+    stream->need_header = FALSE;
   }
 
   url = stream->fragment.uri;
@@ -2052,7 +2620,14 @@
     GST_DEBUG_OBJECT (stream->pad, "Fragment download result: %d %s",
         stream->last_ret, gst_flow_get_name (stream->last_ret));
     if (ret != GST_FLOW_OK) {
-      /* TODO check if we are truly stoping */
+      g_mutex_lock (&stream->fragment_download_lock);
+      if (G_UNLIKELY (stream->cancelled)) {
+        g_mutex_unlock (&stream->fragment_download_lock);
+        return ret;
+      }
+      g_mutex_unlock (&stream->fragment_download_lock);
+
+      /* TODO check if we are truly stopping */
       if (ret == GST_FLOW_CUSTOM_ERROR && gst_adaptive_demux_is_live (demux)) {
         if (++stream->download_error_count <= MAX_DOWNLOAD_ERROR_COUNT) {
           /* looks like there is no way of knowing when a live stream has ended
@@ -2085,68 +2660,81 @@
   }
 }
 
+/* this function will take the manifest_lock and will keep it until the end.
+ * It will release it temporarily only when going to sleep.
+ * Every time it takes the manifest_lock, it will check for cancelled condition
+ */
 static void
 gst_adaptive_demux_stream_download_loop (GstAdaptiveDemuxStream * stream)
 {
   GstAdaptiveDemux *demux = stream->demux;
-  guint64 next_download = 0;
+  guint64 next_download = g_get_monotonic_time ();
   GstFlowReturn ret;
   gboolean live;
 
   GST_LOG_OBJECT (stream->pad, "download loop start");
 
+  GST_MANIFEST_LOCK (demux);
+
+  g_mutex_lock (&stream->fragment_download_lock);
+  if (G_UNLIKELY (stream->cancelled)) {
+    stream->last_ret = GST_FLOW_FLUSHING;
+    g_mutex_unlock (&stream->fragment_download_lock);
+    goto cancelled;
+  }
+  g_mutex_unlock (&stream->fragment_download_lock);
+
   /* Check if we're done with our segment */
+  GST_ADAPTIVE_DEMUX_SEGMENT_LOCK (demux);
   if (demux->segment.rate > 0) {
     if (GST_CLOCK_TIME_IS_VALID (demux->segment.stop)
         && stream->segment.position >= stream->segment.stop) {
+      GST_ADAPTIVE_DEMUX_SEGMENT_UNLOCK (demux);
       ret = GST_FLOW_EOS;
       gst_task_stop (stream->download_task);
       goto end_of_manifest;
     }
   } else {
     if (GST_CLOCK_TIME_IS_VALID (demux->segment.start)
-        && stream->segment.position < stream->segment.start) {
+        && stream->segment.position <= stream->segment.start) {
+      GST_ADAPTIVE_DEMUX_SEGMENT_UNLOCK (demux);
       ret = GST_FLOW_EOS;
       gst_task_stop (stream->download_task);
       goto end_of_manifest;
     }
   }
-
-  GST_OBJECT_LOCK (demux);
-  if (demux->cancelled) {
-    stream->last_ret = GST_FLOW_FLUSHING;
-    goto cancelled;
-  }
+  GST_ADAPTIVE_DEMUX_SEGMENT_UNLOCK (demux);
 
   /* Cleanup old streams if any */
   if (G_UNLIKELY (demux->priv->old_streams != NULL)) {
     GList *old_streams = demux->priv->old_streams;
     demux->priv->old_streams = NULL;
-    GST_OBJECT_UNLOCK (demux);
 
-    /* Need to unlock as it might post messages to the bus */
     GST_DEBUG_OBJECT (stream->pad, "Cleaning up old streams");
     g_list_free_full (old_streams,
         (GDestroyNotify) gst_adaptive_demux_stream_free);
     GST_DEBUG_OBJECT (stream->pad, "Cleaning up old streams (done)");
-  } else {
-    GST_OBJECT_UNLOCK (demux);
+
+    /* gst_adaptive_demux_stream_free had temporarily released the manifest_lock.
+     * Recheck the cancelled flag.
+     */
+    g_mutex_lock (&stream->fragment_download_lock);
+    if (G_UNLIKELY (stream->cancelled)) {
+      stream->last_ret = GST_FLOW_FLUSHING;
+      g_mutex_unlock (&stream->fragment_download_lock);
+      goto cancelled;
+    }
+    g_mutex_unlock (&stream->fragment_download_lock);
   }
 
-  GST_MANIFEST_LOCK (demux);
   if (G_UNLIKELY (stream->restart_download)) {
-    GstSegment segment;
     GstEvent *seg_event;
-    GstClockTime cur, ts;
+    GstClockTime cur, ts = 0;
     gint64 pos;
 
     GST_DEBUG_OBJECT (stream->pad,
         "Activating stream due to reconfigure event");
 
-    cur = ts =
-        gst_segment_to_stream_time (&stream->segment, GST_FORMAT_TIME,
-        stream->segment.position);
-
     if (gst_pad_peer_query_position (stream->pad, GST_FORMAT_TIME, &pos)) {
       ts = (GstClockTime) pos;
       GST_DEBUG_OBJECT (demux, "Downstream position: %"
@@ -2171,12 +2759,16 @@
       }
     }
 
+    GST_ADAPTIVE_DEMUX_SEGMENT_LOCK (demux);
+    cur =
+        gst_segment_to_stream_time (&stream->segment, GST_FORMAT_TIME,
+        stream->segment.position);
+
     /* we might have already pushed this data */
     ts = MAX (ts, cur);
 
     GST_DEBUG_OBJECT (stream->pad, "Restarting stream at "
         "position %" GST_TIME_FORMAT, GST_TIME_ARGS (ts));
-    gst_segment_copy_into (&demux->segment, &segment);
 
     if (GST_CLOCK_TIME_IS_VALID (ts)) {
       GstClockTime offset, period_start;
@@ -2186,9 +2778,10 @@
       period_start = gst_adaptive_demux_get_period_start_time (demux);
 
       /* TODO check return */
-      gst_adaptive_demux_stream_seek (demux, stream, ts);
+      gst_adaptive_demux_stream_seek (demux, stream, demux->segment.rate >= 0,
+          0, ts, &ts);
 
-      segment.position = ts - period_start + offset;
+      stream->segment.position = ts - period_start + offset;
     }
 
     /* The stream's segment is still correct except for
@@ -2196,19 +2789,14 @@
      * updated position */
     seg_event = gst_event_new_segment (&stream->segment);
     gst_event_set_seqnum (seg_event, demux->priv->segment_seqnum);
+    GST_ADAPTIVE_DEMUX_SEGMENT_UNLOCK (demux);
+
     GST_DEBUG_OBJECT (stream->pad, "Sending restart segment: %"
         GST_PTR_FORMAT, seg_event);
     gst_pad_push_event (stream->pad, seg_event);
 
     stream->restart_download = FALSE;
   }
-  GST_OBJECT_LOCK (demux);
-  if (demux->cancelled) {
-    stream->last_ret = GST_FLOW_FLUSHING;
-    GST_MANIFEST_UNLOCK (demux);
-    goto cancelled;
-  }
-  GST_OBJECT_UNLOCK (demux);
 
   live = gst_adaptive_demux_is_live (demux);
 
@@ -2221,32 +2809,54 @@
     if (live) {
       gint64 wait_time =
           gst_adaptive_demux_stream_get_fragment_waiting_time (demux, stream);
-      GST_MANIFEST_UNLOCK (demux);
-      if (wait_time > 0)
-        gst_adaptive_demux_stream_download_wait (stream, wait_time);
-    } else {
-      GST_MANIFEST_UNLOCK (demux);
-    }
+      if (wait_time > 0) {
+        gint64 end_time = g_get_monotonic_time () + wait_time / GST_USECOND;
 
-    GST_OBJECT_LOCK (demux);
-    if (demux->cancelled) {
-      stream->last_ret = GST_FLOW_FLUSHING;
-      goto cancelled;
+        GST_DEBUG_OBJECT (stream->pad, "Download waiting for %" GST_TIME_FORMAT,
+            GST_TIME_ARGS (wait_time));
+
+        GST_MANIFEST_UNLOCK (demux);
+
+        g_mutex_lock (&stream->fragment_download_lock);
+        if (G_UNLIKELY (stream->cancelled)) {
+          g_mutex_unlock (&stream->fragment_download_lock);
+          GST_MANIFEST_LOCK (demux);
+          stream->last_ret = GST_FLOW_FLUSHING;
+          goto cancelled;
+        }
+        g_cond_wait_until (&stream->fragment_download_cond,
+            &stream->fragment_download_lock, end_time);
+        g_mutex_unlock (&stream->fragment_download_lock);
+
+        GST_DEBUG_OBJECT (stream->pad, "Download finished waiting");
+
+        GST_MANIFEST_LOCK (demux);
+
+        g_mutex_lock (&stream->fragment_download_lock);
+        if (G_UNLIKELY (stream->cancelled)) {
+          stream->last_ret = GST_FLOW_FLUSHING;
+          g_mutex_unlock (&stream->fragment_download_lock);
+          goto cancelled;
+        }
+        g_mutex_unlock (&stream->fragment_download_lock);
+      }
     }
-    GST_OBJECT_UNLOCK (demux);
 
     stream->last_ret = GST_FLOW_OK;
+
     next_download = g_get_monotonic_time ();
     ret = gst_adaptive_demux_stream_download_fragment (stream);
 
-    GST_OBJECT_LOCK (demux);
-    if (demux->cancelled) {
-      stream->last_ret = GST_FLOW_FLUSHING;
-      goto cancelled;
+    if (ret == GST_FLOW_FLUSHING) {
+      g_mutex_lock (&stream->fragment_download_lock);
+      if (G_UNLIKELY (stream->cancelled)) {
+        stream->last_ret = GST_FLOW_FLUSHING;
+        g_mutex_unlock (&stream->fragment_download_lock);
+        goto cancelled;
+      }
+      g_mutex_unlock (&stream->fragment_download_lock);
     }
-    GST_OBJECT_UNLOCK (demux);
 
-    GST_MANIFEST_LOCK (demux);
   } else {
     stream->last_ret = ret;
   }
@@ -2259,8 +2869,7 @@
       /* we push the EOS after releasing the object lock */
       if (gst_adaptive_demux_is_live (demux)) {
         if (gst_adaptive_demux_stream_wait_manifest_update (demux, stream)) {
-          GST_MANIFEST_UNLOCK (demux);
-          return;
+          goto end;
         }
         gst_task_stop (stream->download_task);
       } else {
@@ -2301,7 +2910,6 @@
         gboolean is_live = gst_adaptive_demux_is_live (demux);
         GST_WARNING_OBJECT (demux, "Error while downloading fragment");
         if (++stream->download_error_count > MAX_DOWNLOAD_ERROR_COUNT) {
-          GST_MANIFEST_UNLOCK (demux);
           goto download_error;
         }
 
@@ -2313,13 +2921,12 @@
          * a bit to not flood the server */
         if (stream->download_error_count == 1 && !is_live) {
           /* TODO hlsdemux had more options to this function (boolean and err) */
-          GST_MANIFEST_UNLOCK (demux);
+
           if (gst_adaptive_demux_update_manifest (demux) == GST_FLOW_OK) {
             /* Retry immediately, the playlist actually has changed */
             GST_DEBUG_OBJECT (demux, "Updated the playlist");
-            return;
+            goto end;
           }
-          GST_MANIFEST_LOCK (demux);
         }
 
         /* Wait half the fragment duration before retrying */
@@ -2328,40 +2935,53 @@
             (stream->fragment.duration, G_USEC_PER_SEC, 2 * GST_SECOND);
 
         GST_MANIFEST_UNLOCK (demux);
+
         g_mutex_lock (&stream->fragment_download_lock);
-        if (demux->cancelled) {
+        if (G_UNLIKELY (stream->cancelled)) {
           g_mutex_unlock (&stream->fragment_download_lock);
-          return;
+          GST_MANIFEST_LOCK (demux);
+          stream->last_ret = GST_FLOW_FLUSHING;
+          goto cancelled;
         }
         g_cond_wait_until (&stream->fragment_download_cond,
             &stream->fragment_download_lock, next_download);
         g_mutex_unlock (&stream->fragment_download_lock);
+
         GST_DEBUG_OBJECT (demux, "Retrying now");
 
+        GST_MANIFEST_LOCK (demux);
+
+        g_mutex_lock (&stream->fragment_download_lock);
+        if (G_UNLIKELY (stream->cancelled)) {
+          stream->last_ret = GST_FLOW_FLUSHING;
+          g_mutex_unlock (&stream->fragment_download_lock);
+          goto cancelled;
+        }
+        g_mutex_unlock (&stream->fragment_download_lock);
+
         /* Refetch the playlist now after we waited */
         if (!is_live
             && gst_adaptive_demux_update_manifest (demux) == GST_FLOW_OK) {
           GST_DEBUG_OBJECT (demux, "Updated the playlist");
         }
-        return;
+        goto end;
       }
       break;
   }
 
-  GST_MANIFEST_UNLOCK (demux);
 end_of_manifest:
   if (G_UNLIKELY (ret == GST_FLOW_EOS)) {
     gst_adaptive_demux_stream_push_event (stream, gst_event_new_eos ());
   }
 
 end:
+  GST_MANIFEST_UNLOCK (demux);
   GST_LOG_OBJECT (stream->pad, "download loop end");
   return;
 
 cancelled:
   {
     GST_DEBUG_OBJECT (stream->pad, "Stream has been cancelled");
-    GST_OBJECT_UNLOCK (demux);
     goto end;
   }
 download_error:
@@ -2389,7 +3009,15 @@
           "Download error: Couldn't download fragments, too many failures");
     }
 
+    gst_task_stop (stream->download_task);
+    if (stream->src) {
+      gst_element_set_state (stream->src, GST_STATE_NULL);
+      gst_bin_remove (GST_BIN_CAST (demux), stream->src);
+      stream->src = NULL;
+    }
+
     gst_element_post_message (GST_ELEMENT_CAST (demux), msg);
+
     goto end;
   }
 }
@@ -2397,6 +3025,7 @@
 static void
 gst_adaptive_demux_updates_loop (GstAdaptiveDemux * demux)
 {
+  gint64 next_update;
   GstAdaptiveDemuxClass *klass = GST_ADAPTIVE_DEMUX_GET_CLASS (demux);
 
   /* Loop for updating of the playlist. This periodically checks if
@@ -2406,8 +3035,10 @@
   /* block until the next scheduled update or the signal to quit this thread */
   GST_DEBUG_OBJECT (demux, "Started updates task");
 
-  demux->priv->next_update =
-      g_get_monotonic_time () + klass->get_manifest_update_interval (demux);
+  GST_MANIFEST_LOCK (demux);
+
+  next_update = g_get_monotonic_time () +
+      klass->get_manifest_update_interval (demux);
 
   /* Updating playlist only needed for live playlists */
   while (gst_adaptive_demux_is_live (demux)) {
@@ -2416,62 +3047,73 @@
     /* Wait here until we should do the next update or we're cancelled */
     GST_DEBUG_OBJECT (demux, "Wait for next playlist update");
 
+    GST_MANIFEST_UNLOCK (demux);
+
     g_mutex_lock (&demux->priv->updates_timed_lock);
     if (demux->priv->stop_updates_task) {
       g_mutex_unlock (&demux->priv->updates_timed_lock);
       goto quit;
     }
     g_cond_wait_until (&demux->priv->updates_timed_cond,
-        &demux->priv->updates_timed_lock, demux->priv->next_update);
+        &demux->priv->updates_timed_lock, next_update);
+    g_mutex_unlock (&demux->priv->updates_timed_lock);
+
+    GST_MANIFEST_LOCK (demux);
+
+    g_mutex_lock (&demux->priv->updates_timed_lock);
     if (demux->priv->stop_updates_task) {
       g_mutex_unlock (&demux->priv->updates_timed_lock);
+      GST_MANIFEST_UNLOCK (demux);
       goto quit;
     }
     g_mutex_unlock (&demux->priv->updates_timed_lock);
 
     GST_DEBUG_OBJECT (demux, "Updating playlist");
+
     ret = gst_adaptive_demux_update_manifest (demux);
+
     if (ret == GST_FLOW_EOS) {
     } else if (ret != GST_FLOW_OK) {
-      if (demux->priv->stop_updates_task)
-        goto quit;
+      /* update_failed_count is used only here, no need to protect it */
       demux->priv->update_failed_count++;
       if (demux->priv->update_failed_count <= DEFAULT_FAILED_COUNT) {
         GST_WARNING_OBJECT (demux, "Could not update the playlist");
-        demux->priv->next_update =
-            g_get_monotonic_time () +
+        next_update = g_get_monotonic_time () +
             klass->get_manifest_update_interval (demux);
       } else {
         GST_ELEMENT_ERROR (demux, STREAM, FAILED,
             (_("Internal data stream error.")), ("Could not update playlist"));
-        goto error;
+        GST_DEBUG_OBJECT (demux, "Stopped updates task because of error");
+        gst_task_stop (demux->priv->updates_task);
+        GST_MANIFEST_UNLOCK (demux);
+        goto end;
       }
     } else {
       GST_DEBUG_OBJECT (demux, "Updated playlist successfully");
-      GST_MANIFEST_LOCK (demux);
-      demux->priv->next_update =
-          g_get_monotonic_time () + klass->get_manifest_update_interval (demux);
-      /* Wake up download task */
-      g_cond_broadcast (&demux->manifest_cond);
-      GST_MANIFEST_UNLOCK (demux);
+      next_update = g_get_monotonic_time () +
+          klass->get_manifest_update_interval (demux);
+
+      /* Wake up download tasks */
+      g_mutex_lock (&demux->priv->manifest_update_lock);
+      g_cond_broadcast (&demux->priv->manifest_cond);
+      g_mutex_unlock (&demux->priv->manifest_update_lock);
     }
   }
 
+  GST_MANIFEST_UNLOCK (demux);
+
 quit:
   {
-    GST_DEBUG_OBJECT (demux, "Stopped updates task");
-    gst_task_stop (demux->priv->updates_task);
-    return;
+    GST_DEBUG_OBJECT (demux, "Stop updates task request detected.");
   }
 
-error:
+end:
   {
-    GST_DEBUG_OBJECT (demux, "Stopped updates task because of error");
-    gst_task_stop (demux->priv->updates_task);
+    return;
   }
 }
 
-
+/* must be called with manifest_lock taken */
 static gboolean
 gst_adaptive_demux_stream_push_event (GstAdaptiveDemuxStream * stream,
     GstEvent * event)
@@ -2487,6 +3129,7 @@
   return ret;
 }
 
+/* must be called with manifest_lock taken */
 static gboolean
 gst_adaptive_demux_is_live (GstAdaptiveDemux * demux)
 {
@@ -2497,17 +3140,20 @@
   return FALSE;
 }
 
+/* must be called with manifest_lock taken */
 static GstFlowReturn
 gst_adaptive_demux_stream_seek (GstAdaptiveDemux * demux,
-    GstAdaptiveDemuxStream * stream, GstClockTime ts)
+    GstAdaptiveDemuxStream * stream, gboolean forward, GstSeekFlags flags,
+    GstClockTime ts, GstClockTime * final_ts)
 {
   GstAdaptiveDemuxClass *klass = GST_ADAPTIVE_DEMUX_GET_CLASS (demux);
 
   if (klass->stream_seek)
-    return klass->stream_seek (stream, ts);
+    return klass->stream_seek (stream, forward, flags, ts, final_ts);
   return GST_FLOW_ERROR;
 }
 
+/* must be called with manifest_lock taken */
 static gboolean
 gst_adaptive_demux_stream_has_next_fragment (GstAdaptiveDemux * demux,
     GstAdaptiveDemuxStream * stream)
@@ -2521,24 +3167,24 @@
   return ret;
 }
 
+/* must be called with manifest_lock taken */
 GstFlowReturn
 gst_adaptive_demux_stream_advance_fragment (GstAdaptiveDemux * demux,
     GstAdaptiveDemuxStream * stream, GstClockTime duration)
 {
   GstFlowReturn ret;
 
-  GST_MANIFEST_LOCK (demux);
   if (stream->last_ret == GST_FLOW_OK) {
     stream->last_ret =
         gst_adaptive_demux_stream_advance_fragment_unlocked (demux, stream,
         duration);
   }
   ret = stream->last_ret;
-  GST_MANIFEST_UNLOCK (demux);
 
   return ret;
 }
 
+/* must be called with manifest_lock taken */
 GstFlowReturn
 gst_adaptive_demux_stream_advance_fragment_unlocked (GstAdaptiveDemux * demux,
     GstAdaptiveDemuxStream * stream, GstClockTime duration)
@@ -2550,10 +3196,6 @@
 
   stream->download_error_count = 0;
   g_clear_error (&stream->last_error);
-  stream->download_total_time +=
-      g_get_monotonic_time () - stream->download_chunk_start_time;
-  stream->fragment_total_time +=
-      g_get_monotonic_time () - stream->download_chunk_start_time;
 
   /* FIXME - url has no indication of byte ranges for subsegments */
   gst_element_post_message (GST_ELEMENT_CAST (demux),
@@ -2569,7 +3211,9 @@
               GST_TYPE_CLOCK_TIME,
               stream->download_total_time * GST_USECOND, NULL)));
 
-  if (GST_CLOCK_TIME_IS_VALID (duration)) {
+  /* Don't update to the end of the segment if in reverse playback */
+  GST_ADAPTIVE_DEMUX_SEGMENT_LOCK (demux);
+  if (GST_CLOCK_TIME_IS_VALID (duration) && demux->segment.rate > 0) {
     GstClockTime offset =
         gst_adaptive_demux_stream_get_presentation_offset (demux, stream);
     GstClockTime period_start =
@@ -2584,6 +3228,7 @@
       demux->segment.position =
           stream->segment.position - offset + period_start;
   }
+  GST_ADAPTIVE_DEMUX_SEGMENT_UNLOCK (demux);
 
   if (gst_adaptive_demux_is_live (demux)
       || gst_adaptive_demux_stream_has_next_fragment (demux, stream)) {
@@ -2618,6 +3263,7 @@
   return ret;
 }
 
+/* must be called with manifest_lock taken */
 static gboolean
 gst_adaptive_demux_stream_select_bitrate (GstAdaptiveDemux *
     demux, GstAdaptiveDemuxStream * stream, guint64 bitrate)
@@ -2635,6 +3281,7 @@
   return FALSE;
 }
 
+/* must be called with manifest_lock taken */
 static GstFlowReturn
 gst_adaptive_demux_stream_update_fragment_info (GstAdaptiveDemux * demux,
     GstAdaptiveDemuxStream * stream)
@@ -2644,9 +3291,14 @@
   g_return_val_if_fail (klass->stream_update_fragment_info != NULL,
       GST_FLOW_ERROR);
 
+  /* Make sure the sub-class will update bitrate, or else
+   * we will later */
+  stream->fragment.bitrate = 0;
+
   return klass->stream_update_fragment_info (stream);
 }
 
+/* must be called with manifest_lock taken */
 static gint64
 gst_adaptive_demux_stream_get_fragment_waiting_time (GstAdaptiveDemux *
     demux, GstAdaptiveDemuxStream * stream)
@@ -2658,6 +3310,7 @@
   return 0;
 }
 
+/* must be called with manifest_lock taken */
 static GstFlowReturn
 gst_adaptive_demux_update_manifest_default (GstAdaptiveDemux * demux)
 {
@@ -2669,7 +3322,6 @@
   download = gst_uri_downloader_fetch_uri (demux->downloader,
       demux->manifest_uri, NULL, TRUE, TRUE, TRUE, NULL);
   if (download) {
-    GST_MANIFEST_LOCK (demux);
     g_free (demux->manifest_uri);
     g_free (demux->manifest_base_uri);
     if (download->redirect_permanent && download->redirect_uri) {
@@ -2684,7 +3336,6 @@
     g_object_unref (download);
     ret = klass->update_manifest_data (demux, buffer);
     gst_buffer_unref (buffer);
-    GST_MANIFEST_UNLOCK (demux);
     /* FIXME: Should the manifest uri vars be reverted to original
      * values if updating fails? */
   } else {
@@ -2694,6 +3345,7 @@
   return ret;
 }
 
+/* must be called with manifest_lock taken */
 static GstFlowReturn
 gst_adaptive_demux_update_manifest (GstAdaptiveDemux * demux)
 {
@@ -2704,10 +3356,8 @@
 
   if (ret == GST_FLOW_OK) {
     GstClockTime duration;
-    GST_MANIFEST_LOCK (demux);
     /* Send an updated duration message */
     duration = klass->get_duration (demux);
-    GST_MANIFEST_UNLOCK (demux);
     if (duration != GST_CLOCK_TIME_NONE) {
       GST_DEBUG_OBJECT (demux,
           "Sending duration message : %" GST_TIME_FORMAT,
@@ -2742,6 +3392,7 @@
   f->index_range_end = -1;
 }
 
+/* must be called with manifest_lock taken */
 static gboolean
 gst_adaptive_demux_has_next_period (GstAdaptiveDemux * demux)
 {
@@ -2754,6 +3405,7 @@
   return ret;
 }
 
+/* must be called with manifest_lock taken */
 static void
 gst_adaptive_demux_advance_period (GstAdaptiveDemux * demux)
 {
@@ -2766,18 +3418,3 @@
   gst_adaptive_demux_expose_streams (demux, FALSE);
   gst_adaptive_demux_start_tasks (demux);
 }
-
-static void
-gst_adaptive_demux_stream_download_wait (GstAdaptiveDemuxStream * stream,
-    GstClockTime time_diff)
-{
-  gint64 end_time = g_get_monotonic_time () + time_diff / GST_USECOND;
-
-  GST_DEBUG_OBJECT (stream->pad, "Download waiting for %" GST_TIME_FORMAT,
-      GST_TIME_ARGS (time_diff));
-  g_mutex_lock (&stream->fragment_download_lock);
-  g_cond_wait_until (&stream->fragment_download_cond,
-      &stream->fragment_download_lock, end_time);
-  g_mutex_unlock (&stream->fragment_download_lock);
-  GST_DEBUG_OBJECT (stream->pad, "Download finished waiting");
-}
diff --git a/gst-libs/gst/adaptivedemux/gstadaptivedemux.h b/gst-libs/gst/adaptivedemux/gstadaptivedemux.h
index b65b6d6..ae2d895 100644
--- a/gst-libs/gst/adaptivedemux/gstadaptivedemux.h
+++ b/gst-libs/gst/adaptivedemux/gstadaptivedemux.h
@@ -72,10 +72,6 @@
  */
 #define GST_ADAPTIVE_DEMUX_STATISTICS_MESSAGE_NAME "adaptive-streaming-statistics"
 
-#define GST_MANIFEST_GET_LOCK(d) (&(GST_ADAPTIVE_DEMUX_CAST(d)->manifest_lock))
-#define GST_MANIFEST_LOCK(d) (g_mutex_lock (GST_MANIFEST_GET_LOCK (d)))
-#define GST_MANIFEST_UNLOCK(d) (g_mutex_unlock (GST_MANIFEST_GET_LOCK (d)))
-
 #define GST_ELEMENT_ERROR_FROM_ERROR(el, msg, err) G_STMT_START { \
   gchar *__dbg = g_strdup_printf ("%s: %s", msg, err->message);         \
   GST_WARNING_OBJECT (el, "error: %s", __dbg);                          \
@@ -109,11 +105,16 @@
   gchar *index_uri;
   gint64 index_range_start;
   gint64 index_range_end;
+
+  /* Nominal bitrate as provided by
+   * sub-class or calculated by base-class */
+  guint bitrate;
 };
 
 struct _GstAdaptiveDemuxStream
 {
   GstPad *pad;
+  GstPad *internal_pad;
 
   GstAdaptiveDemux *demux;
 
@@ -136,15 +137,21 @@
   gboolean restart_download;
   gboolean discont;
 
+  gboolean downloading_first_buffer;
   gboolean downloading_header;
   gboolean downloading_index;
 
+  gboolean bitrate_changed;
+
   /* download tooling */
   GstElement *src;
   GstPad *src_srcpad;
+  GstElement *uri_handler;
+  GstElement *queue;
   GMutex fragment_download_lock;
   GCond fragment_download_cond;
-  gboolean download_finished;
+  gboolean download_finished;   /* protected by fragment_download_lock */
+  gboolean cancelled;           /* protected by fragment_download_lock */
   gboolean starting_fragment;
   gboolean first_fragment_buffer;
   gint64 download_start_time;
@@ -153,10 +160,6 @@
   gint64 download_total_bytes;
   guint64 current_download_rate;
 
-  /* Per fragment download information */
-  guint64 fragment_total_time;
-  guint64 fragment_total_size;
-
   /* Average for the last fragments */
   guint64 moving_bitrate;
   guint moving_index;
@@ -192,16 +195,10 @@
 
   GstSegment segment;
 
-  gboolean cancelled;
-
-  GMutex manifest_lock;
-  GCond manifest_cond;
-
   gchar *manifest_uri;
   gchar *manifest_base_uri;
 
   /* Properties */
-  guint num_lookback_fragments;
   gfloat bitrate_limit;         /* limit of the available bitrate to use */
   guint connection_speed;
 
@@ -318,7 +315,7 @@
   void          (*advance_period)  (GstAdaptiveDemux * demux);
 
   void          (*stream_free)     (GstAdaptiveDemuxStream * stream);
-  GstFlowReturn (*stream_seek)     (GstAdaptiveDemuxStream * stream, GstClockTime ts);
+  GstFlowReturn (*stream_seek)     (GstAdaptiveDemuxStream * stream, gboolean forward, GstSeekFlags flags, GstClockTime target_ts, GstClockTime * final_ts);
   gboolean      (*stream_has_next_fragment)  (GstAdaptiveDemuxStream * stream);
   GstFlowReturn (*stream_advance_fragment) (GstAdaptiveDemuxStream * stream);
   /**
@@ -438,6 +435,8 @@
 
 GstAdaptiveDemuxStream *gst_adaptive_demux_stream_new (GstAdaptiveDemux * demux,
                                                        GstPad * pad);
+GstAdaptiveDemuxStream *gst_adaptive_demux_find_stream_for_pad (GstAdaptiveDemux * demux,
+                                                                GstPad * pad);
 void gst_adaptive_demux_stream_set_caps (GstAdaptiveDemuxStream * stream,
                                          GstCaps * caps);
 void gst_adaptive_demux_stream_set_tags (GstAdaptiveDemuxStream * stream,
@@ -451,10 +450,6 @@
 void gst_adaptive_demux_stream_queue_event (GstAdaptiveDemuxStream * stream,
     GstEvent * event);
 
-GstFlowReturn
-gst_adaptive_demux_stream_advance_fragment_unlocked (GstAdaptiveDemux * demux,
-    GstAdaptiveDemuxStream * stream, GstClockTime duration);
-
 G_END_DECLS
 
 #endif
diff --git a/gst-libs/gst/audio/Makefile.am b/gst-libs/gst/audio/Makefile.am
new file mode 100644
index 0000000..d810148
--- /dev/null
+++ b/gst-libs/gst/audio/Makefile.am
@@ -0,0 +1,27 @@
+# variables used for enum generation
+lib_LTLIBRARIES = libgstbadaudio-@GST_API_VERSION@.la
+
+CLEANFILES =
+
+libgstbadaudio_@GST_API_VERSION@_la_SOURCES = \
+	gstaudioaggregator.c
+
+nodist_libgstbadaudio_@GST_API_VERSION@_la_SOURCES = $(BUILT_SOURCES)
+
+libgstbadaudio_@GST_API_VERSION@_la_CFLAGS = \
+	-DGST_USE_UNSTABLE_API \
+	-I$(top_srcdir)/gst-libs \
+	-I$(top_builddir)/gst-libs \
+	$(GST_CFLAGS) $(ORC_CFLAGS) \
+	$(GST_PLUGINS_BASE_CFLAGS) \
+	$(GST_BASE_CFLAGS)
+
+libgstbadaudio_@GST_API_VERSION@_la_LIBADD = \
+	$(top_builddir)/gst-libs/gst/base/libgstbadbase-$(GST_API_VERSION).la \
+	$(GST_PLUGINS_BASE_LIBS) -lgstaudio-$(GST_API_VERSION) \
+	$(GST_BASE_LIBS) $(GST_LIBS) $(ORC_LIBS) $(LIBM)
+
+libgstbadaudio_@GST_API_VERSION@_la_LDFLAGS = $(GST_LIB_LDFLAGS) $(GST_ALL_LDFLAGS) $(GST_LT_LDFLAGS)
+
+libgstaudio_@GST_API_VERSION@includedir = $(includedir)/gstreamer-@GST_API_VERSION@/gst/audio
+libgstaudio_@GST_API_VERSION@include_HEADERS = gstaudioaggregator.h
diff --git a/gst/liveadder/Makefile.in b/gst-libs/gst/audio/Makefile.in
similarity index 77%
copy from gst/liveadder/Makefile.in
copy to gst-libs/gst/audio/Makefile.in
index ba9e5a2..c854e91 100644
--- a/gst/liveadder/Makefile.in
+++ b/gst-libs/gst/audio/Makefile.in
@@ -90,7 +90,7 @@
 build_triplet = @build@
 host_triplet = @host@
 target_triplet = @target@
-subdir = gst/liveadder
+subdir = gst-libs/gst/audio
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
 am__aclocal_m4_deps = $(top_srcdir)/common/m4/as-ac-expand.m4 \
 	$(top_srcdir)/common/m4/as-auto-alt.m4 \
@@ -116,19 +116,19 @@
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
 	$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
-	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gsettings.m4 \
-	$(top_srcdir)/m4/gst-fionread.m4 $(top_srcdir)/m4/gst-sdl.m4 \
-	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
-	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
-	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libgcrypt.m4 \
-	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
-	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
-	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
-	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
-	$(top_srcdir)/configure.ac
+	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gst-fionread.m4 \
+	$(top_srcdir)/m4/gst-sdl.m4 $(top_srcdir)/m4/iconv.m4 \
+	$(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \
+	$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
+	$(top_srcdir)/m4/libgcrypt.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
+	$(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
-DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \
+DIST_COMMON = $(srcdir)/Makefile.am \
+	$(libgstaudio_@GST_API_VERSION@include_HEADERS) \
 	$(am__DIST_COMMON)
 mkinstalldirs = $(install_sh) -d
 CONFIG_HEADER = $(top_builddir)/config.h
@@ -161,21 +161,29 @@
     || { echo " ( cd '$$dir' && rm -f" $$files ")"; \
          $(am__cd) "$$dir" && rm -f $$files; }; \
   }
-am__installdirs = "$(DESTDIR)$(plugindir)"
-LTLIBRARIES = $(plugin_LTLIBRARIES)
+am__installdirs = "$(DESTDIR)$(libdir)" \
+	"$(DESTDIR)$(libgstaudio_@GST_API_VERSION@includedir)"
+LTLIBRARIES = $(lib_LTLIBRARIES)
 am__DEPENDENCIES_1 =
-libgstliveadder_la_DEPENDENCIES = $(am__DEPENDENCIES_1) \
-	$(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1)
-am_libgstliveadder_la_OBJECTS = libgstliveadder_la-liveadder.lo
-libgstliveadder_la_OBJECTS = $(am_libgstliveadder_la_OBJECTS)
+libgstbadaudio_@GST_API_VERSION@_la_DEPENDENCIES = $(top_builddir)/gst-libs/gst/base/libgstbadbase-$(GST_API_VERSION).la \
+	$(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
+	$(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
+	$(am__DEPENDENCIES_1)
+am_libgstbadaudio_@GST_API_VERSION@_la_OBJECTS =  \
+	libgstbadaudio_@GST_API_VERSION@_la-gstaudioaggregator.lo
+nodist_libgstbadaudio_@GST_API_VERSION@_la_OBJECTS =
+libgstbadaudio_@GST_API_VERSION@_la_OBJECTS =  \
+	$(am_libgstbadaudio_@GST_API_VERSION@_la_OBJECTS) \
+	$(nodist_libgstbadaudio_@GST_API_VERSION@_la_OBJECTS)
 AM_V_lt = $(am__v_lt_@AM_V@)
 am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
 am__v_lt_0 = --silent
 am__v_lt_1 = 
-libgstliveadder_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
-	$(libgstliveadder_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link \
-	$(CCLD) $(libgstliveadder_la_CFLAGS) $(CFLAGS) \
-	$(libgstliveadder_la_LDFLAGS) $(LDFLAGS) -o $@
+libgstbadaudio_@GST_API_VERSION@_la_LINK = $(LIBTOOL) $(AM_V_lt) \
+	--tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link \
+	$(CCLD) $(libgstbadaudio_@GST_API_VERSION@_la_CFLAGS) \
+	$(CFLAGS) $(libgstbadaudio_@GST_API_VERSION@_la_LDFLAGS) \
+	$(LDFLAGS) -o $@
 AM_V_P = $(am__v_P_@AM_V@)
 am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
 am__v_P_0 = false
@@ -210,33 +218,16 @@
 am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@)
 am__v_CCLD_0 = @echo "  CCLD    " $@;
 am__v_CCLD_1 = 
-SOURCES = $(libgstliveadder_la_SOURCES)
-DIST_SOURCES = $(libgstliveadder_la_SOURCES)
+SOURCES = $(libgstbadaudio_@GST_API_VERSION@_la_SOURCES) \
+	$(nodist_libgstbadaudio_@GST_API_VERSION@_la_SOURCES)
+DIST_SOURCES = $(libgstbadaudio_@GST_API_VERSION@_la_SOURCES)
 am__can_run_installinfo = \
   case $$AM_UPDATE_INFO_DIR in \
     n|no|NO) false;; \
     *) (install-info --version) >/dev/null 2>&1;; \
   esac
-HEADERS = $(noinst_HEADERS)
+HEADERS = $(libgstaudio_@GST_API_VERSION@include_HEADERS)
 am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
-# Read a list of newline-separated strings from the standard input,
-# and print each of them once, without duplicates.  Input order is
-# *not* preserved.
-am__uniquify_input = $(AWK) '\
-  BEGIN { nonempty = 0; } \
-  { items[$$0] = 1; nonempty = 1; } \
-  END { if (nonempty) { for (i in items) print i; }; } \
-'
-# Make sure the list of sources is unique.  This is necessary because,
-# e.g., the same source file might be shared among _SOURCES variables
-# for different programs/libraries.
-am__define_uniq_tagged_files = \
-  list='$(am__tagged_files)'; \
-  unique=`for i in $$list; do \
-    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-  done | $(am__uniquify_input)`
-ETAGS = etags
-CTAGS = ctags
 am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp
 DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
 ACLOCAL = @ACLOCAL@
@@ -274,6 +265,8 @@
 CLUTTER_X11_LIBS = @CLUTTER_X11_LIBS@
 CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
+CUDA_CFLAGS = @CUDA_CFLAGS@
+CUDA_LIBS = @CUDA_LIBS@
 CURL_CFLAGS = @CURL_CFLAGS@
 CURL_LIBS = @CURL_LIBS@
 CXX = @CXX@
@@ -311,6 +304,8 @@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
+EGL_CFLAGS = @EGL_CFLAGS@
+EGL_LIBS = @EGL_LIBS@
 EGREP = @EGREP@
 ERROR_CFLAGS = @ERROR_CFLAGS@
 ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
@@ -319,7 +314,6 @@
 EXIF_CFLAGS = @EXIF_CFLAGS@
 EXIF_LIBS = @EXIF_LIBS@
 FAAC_LIBS = @FAAC_LIBS@
-FAAD_IS_NEAAC = @FAAD_IS_NEAAC@
 FAAD_LIBS = @FAAD_LIBS@
 FFLAGS = @FFLAGS@
 FGREP = @FGREP@
@@ -338,8 +332,9 @@
 GIO_LIBS = @GIO_LIBS@
 GIO_UNIX_CFLAGS = @GIO_UNIX_CFLAGS@
 GIO_UNIX_LIBS = @GIO_UNIX_LIBS@
+GLES2_CFLAGS = @GLES2_CFLAGS@
+GLES2_LIBS = @GLES2_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
-GLIB_COMPILE_SCHEMAS = @GLIB_COMPILE_SCHEMAS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
@@ -356,16 +351,17 @@
 GMODULE_NO_EXPORT_LIBS = @GMODULE_NO_EXPORT_LIBS@
 GMSGFMT = @GMSGFMT@
 GMSGFMT_015 = @GMSGFMT_015@
+GNUSTL_CFLAGS = @GNUSTL_CFLAGS@
+GNUSTL_LIBS = @GNUSTL_LIBS@
 GRAPHENE_CFLAGS = @GRAPHENE_CFLAGS@
 GRAPHENE_LIBS = @GRAPHENE_LIBS@
 GREP = @GREP@
-GSETTINGS_CFLAGS = @GSETTINGS_CFLAGS@
-GSETTINGS_DISABLE_SCHEMAS_COMPILE = @GSETTINGS_DISABLE_SCHEMAS_COMPILE@
-GSETTINGS_LIBS = @GSETTINGS_LIBS@
 GSM_LIBS = @GSM_LIBS@
 GSTPB_PLUGINS_DIR = @GSTPB_PLUGINS_DIR@
 GSTPB_PREFIX = @GSTPB_PREFIX@
 GST_AGE = @GST_AGE@
+GST_ALLOCATORS_CFLAGS = @GST_ALLOCATORS_CFLAGS@
+GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
 GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
 GST_API_VERSION = @GST_API_VERSION@
 GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
@@ -391,6 +387,8 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PBUTILS_CFLAGS = @GST_PBUTILS_CFLAGS@
+GST_PBUTILS_LIBS = @GST_PBUTILS_LIBS@
 GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BAD_CFLAGS = @GST_PLUGINS_BAD_CFLAGS@
@@ -416,6 +414,8 @@
 GST_PREFIX = @GST_PREFIX@
 GST_REVISION = @GST_REVISION@
 GST_TOOLS_DIR = @GST_TOOLS_DIR@
+GST_VIDEO_CFLAGS = @GST_VIDEO_CFLAGS@
+GST_VIDEO_LIBS = @GST_VIDEO_LIBS@
 GTK3_CFLAGS = @GTK3_CFLAGS@
 GTK3_GL_CFLAGS = @GTK3_GL_CFLAGS@
 GTK3_GL_LIBS = @GTK3_GL_LIBS@
@@ -517,6 +517,7 @@
 LTLIBICONV = @LTLIBICONV@
 LTLIBINTL = @LTLIBINTL@
 LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
 MANIFEST_TOOL = @MANIFEST_TOOL@
@@ -530,8 +531,6 @@
 MODPLUG_LIBS = @MODPLUG_LIBS@
 MPEG2ENC_CFLAGS = @MPEG2ENC_CFLAGS@
 MPEG2ENC_LIBS = @MPEG2ENC_LIBS@
-MPG123_CFLAGS = @MPG123_CFLAGS@
-MPG123_LIBS = @MPG123_LIBS@
 MPLEX_CFLAGS = @MPLEX_CFLAGS@
 MPLEX_LDFLAGS = @MPLEX_LDFLAGS@
 MPLEX_LIBS = @MPLEX_LIBS@
@@ -547,6 +546,8 @@
 NETTLE_LIBS = @NETTLE_LIBS@
 NM = @NM@
 NMEDIT = @NMEDIT@
+NVENCODE_CFLAGS = @NVENCODE_CFLAGS@
+NVENCODE_LIBS = @NVENCODE_LIBS@
 OBJC = @OBJC@
 OBJCDEPMODE = @OBJCDEPMODE@
 OBJCFLAGS = @OBJCFLAGS@
@@ -604,16 +605,18 @@
 PYTHON_PLATFORM = @PYTHON_PLATFORM@
 PYTHON_PREFIX = @PYTHON_PREFIX@
 PYTHON_VERSION = @PYTHON_VERSION@
+QT_ANDROID_CFLAGS = @QT_ANDROID_CFLAGS@
+QT_ANDROID_LIBS = @QT_ANDROID_LIBS@
 QT_CFLAGS = @QT_CFLAGS@
 QT_LIBS = @QT_LIBS@
+QT_MAC_CFLAGS = @QT_MAC_CFLAGS@
+QT_MAC_LIBS = @QT_MAC_LIBS@
 QT_WAYLAND_CFLAGS = @QT_WAYLAND_CFLAGS@
 QT_WAYLAND_LIBS = @QT_WAYLAND_LIBS@
 QT_X11_CFLAGS = @QT_X11_CFLAGS@
 QT_X11_LIBS = @QT_X11_LIBS@
 RANLIB = @RANLIB@
 RCC = @RCC@
-RSVG_2_36_2_CFLAGS = @RSVG_2_36_2_CFLAGS@
-RSVG_2_36_2_LIBS = @RSVG_2_36_2_LIBS@
 RSVG_CFLAGS = @RSVG_CFLAGS@
 RSVG_LIBS = @RSVG_LIBS@
 RTMP_CFLAGS = @RTMP_CFLAGS@
@@ -665,6 +668,7 @@
 VOAACENC_LIBS = @VOAACENC_LIBS@
 VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
 VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VULKAN_LIBS = @VULKAN_LIBS@
 WARNING_CFLAGS = @WARNING_CFLAGS@
 WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
 WARNING_OBJCFLAGS = @WARNING_OBJCFLAGS@
@@ -675,6 +679,7 @@
 WAYLAND_LIBS = @WAYLAND_LIBS@
 WEBP_CFLAGS = @WEBP_CFLAGS@
 WEBP_LIBS = @WEBP_LIBS@
+WGET = @WGET@
 WILDMIDI_CFLAGS = @WILDMIDI_CFLAGS@
 WILDMIDI_LIBS = @WILDMIDI_LIBS@
 WINKS_LIBS = @WINKS_LIBS@
@@ -684,6 +689,8 @@
 X11_LIBS = @X11_LIBS@
 X265_CFLAGS = @X265_CFLAGS@
 X265_LIBS = @X265_LIBS@
+XCB_CFLAGS = @XCB_CFLAGS@
+XCB_LIBS = @XCB_LIBS@
 XCOMPOSITE_CFLAGS = @XCOMPOSITE_CFLAGS@
 XCOMPOSITE_LIBS = @XCOMPOSITE_LIBS@
 XGETTEXT = @XGETTEXT@
@@ -721,7 +728,6 @@
 docdir = @docdir@
 dvidir = @dvidir@
 exec_prefix = @exec_prefix@
-gsettingsschemadir = @gsettingsschemadir@
 host = @host@
 host_alias = @host_alias@
 host_cpu = @host_cpu@
@@ -761,16 +767,30 @@
 top_builddir = @top_builddir@
 top_srcdir = @top_srcdir@
 wayland_scanner = @wayland_scanner@
-plugin_LTLIBRARIES = libgstliveadder.la
-libgstliveadder_la_SOURCES = liveadder.c
-libgstliveadder_la_CFLAGS = $(GST_PLUGINS_BAD_CFLAGS) $(GST_PLUGINS_BASE_CFLAGS) $(GST_CFLAGS)
-libgstliveadder_la_LIBADD = \
-	$(GST_PLUGINS_BASE_LIBS) -lgstaudio-@GST_API_VERSION@ \
-	$(GST_BASE_LIBS) $(GST_LIBS)
 
-libgstliveadder_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS)
-libgstliveadder_la_LIBTOOLFLAGS = $(GST_PLUGIN_LIBTOOLFLAGS)
-noinst_HEADERS = liveadder.h
+# variables used for enum generation
+lib_LTLIBRARIES = libgstbadaudio-@GST_API_VERSION@.la
+CLEANFILES = 
+libgstbadaudio_@GST_API_VERSION@_la_SOURCES = \
+	gstaudioaggregator.c
+
+nodist_libgstbadaudio_@GST_API_VERSION@_la_SOURCES = $(BUILT_SOURCES)
+libgstbadaudio_@GST_API_VERSION@_la_CFLAGS = \
+	-DGST_USE_UNSTABLE_API \
+	-I$(top_srcdir)/gst-libs \
+	-I$(top_builddir)/gst-libs \
+	$(GST_CFLAGS) $(ORC_CFLAGS) \
+	$(GST_PLUGINS_BASE_CFLAGS) \
+	$(GST_BASE_CFLAGS)
+
+libgstbadaudio_@GST_API_VERSION@_la_LIBADD = \
+	$(top_builddir)/gst-libs/gst/base/libgstbadbase-$(GST_API_VERSION).la \
+	$(GST_PLUGINS_BASE_LIBS) -lgstaudio-$(GST_API_VERSION) \
+	$(GST_BASE_LIBS) $(GST_LIBS) $(ORC_LIBS) $(LIBM)
+
+libgstbadaudio_@GST_API_VERSION@_la_LDFLAGS = $(GST_LIB_LDFLAGS) $(GST_ALL_LDFLAGS) $(GST_LT_LDFLAGS)
+libgstaudio_@GST_API_VERSION@includedir = $(includedir)/gstreamer-@GST_API_VERSION@/gst/audio
+libgstaudio_@GST_API_VERSION@include_HEADERS = gstaudioaggregator.h
 all: all-am
 
 .SUFFIXES:
@@ -784,9 +804,9 @@
 	      exit 1;; \
 	  esac; \
 	done; \
-	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu gst/liveadder/Makefile'; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu gst-libs/gst/audio/Makefile'; \
 	$(am__cd) $(top_srcdir) && \
-	  $(AUTOMAKE) --gnu gst/liveadder/Makefile
+	  $(AUTOMAKE) --gnu gst-libs/gst/audio/Makefile
 Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
 	@case '$?' in \
 	  *config.status*) \
@@ -805,33 +825,33 @@
 	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
 $(am__aclocal_m4_deps):
 
-install-pluginLTLIBRARIES: $(plugin_LTLIBRARIES)
+install-libLTLIBRARIES: $(lib_LTLIBRARIES)
 	@$(NORMAL_INSTALL)
-	@list='$(plugin_LTLIBRARIES)'; test -n "$(plugindir)" || list=; \
+	@list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \
 	list2=; for p in $$list; do \
 	  if test -f $$p; then \
 	    list2="$$list2 $$p"; \
 	  else :; fi; \
 	done; \
 	test -z "$$list2" || { \
-	  echo " $(MKDIR_P) '$(DESTDIR)$(plugindir)'"; \
-	  $(MKDIR_P) "$(DESTDIR)$(plugindir)" || exit 1; \
-	  echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(plugindir)'"; \
-	  $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(plugindir)"; \
+	  echo " $(MKDIR_P) '$(DESTDIR)$(libdir)'"; \
+	  $(MKDIR_P) "$(DESTDIR)$(libdir)" || exit 1; \
+	  echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(libdir)'"; \
+	  $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(libdir)"; \
 	}
 
-uninstall-pluginLTLIBRARIES:
+uninstall-libLTLIBRARIES:
 	@$(NORMAL_UNINSTALL)
-	@list='$(plugin_LTLIBRARIES)'; test -n "$(plugindir)" || list=; \
+	@list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \
 	for p in $$list; do \
 	  $(am__strip_dir) \
-	  echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(plugindir)/$$f'"; \
-	  $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(plugindir)/$$f"; \
+	  echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$f'"; \
+	  $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$f"; \
 	done
 
-clean-pluginLTLIBRARIES:
-	-test -z "$(plugin_LTLIBRARIES)" || rm -f $(plugin_LTLIBRARIES)
-	@list='$(plugin_LTLIBRARIES)'; \
+clean-libLTLIBRARIES:
+	-test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES)
+	@list='$(lib_LTLIBRARIES)'; \
 	locs=`for p in $$list; do echo $$p; done | \
 	      sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \
 	      sort -u`; \
@@ -840,8 +860,8 @@
 	  rm -f $${locs}; \
 	}
 
-libgstliveadder.la: $(libgstliveadder_la_OBJECTS) $(libgstliveadder_la_DEPENDENCIES) $(EXTRA_libgstliveadder_la_DEPENDENCIES) 
-	$(AM_V_CCLD)$(libgstliveadder_la_LINK) -rpath $(plugindir) $(libgstliveadder_la_OBJECTS) $(libgstliveadder_la_LIBADD) $(LIBS)
+libgstbadaudio-@GST_API_VERSION@.la: $(libgstbadaudio_@GST_API_VERSION@_la_OBJECTS) $(libgstbadaudio_@GST_API_VERSION@_la_DEPENDENCIES) $(EXTRA_libgstbadaudio_@GST_API_VERSION@_la_DEPENDENCIES) 
+	$(AM_V_CCLD)$(libgstbadaudio_@GST_API_VERSION@_la_LINK) -rpath $(libdir) $(libgstbadaudio_@GST_API_VERSION@_la_OBJECTS) $(libgstbadaudio_@GST_API_VERSION@_la_LIBADD) $(LIBS)
 
 mostlyclean-compile:
 	-rm -f *.$(OBJEXT)
@@ -849,7 +869,7 @@
 distclean-compile:
 	-rm -f *.tab.c
 
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstliveadder_la-liveadder.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstbadaudio_@GST_API_VERSION@_la-gstaudioaggregator.Plo@am__quote@
 
 .c.o:
 @am__fastdepCC_TRUE@	$(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\
@@ -875,70 +895,45 @@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $<
 
-libgstliveadder_la-liveadder.lo: liveadder.c
-@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstliveadder_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstliveadder_la_CFLAGS) $(CFLAGS) -MT libgstliveadder_la-liveadder.lo -MD -MP -MF $(DEPDIR)/libgstliveadder_la-liveadder.Tpo -c -o libgstliveadder_la-liveadder.lo `test -f 'liveadder.c' || echo '$(srcdir)/'`liveadder.c
-@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstliveadder_la-liveadder.Tpo $(DEPDIR)/libgstliveadder_la-liveadder.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='liveadder.c' object='libgstliveadder_la-liveadder.lo' libtool=yes @AMDEPBACKSLASH@
+libgstbadaudio_@GST_API_VERSION@_la-gstaudioaggregator.lo: gstaudioaggregator.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstbadaudio_@GST_API_VERSION@_la_CFLAGS) $(CFLAGS) -MT libgstbadaudio_@GST_API_VERSION@_la-gstaudioaggregator.lo -MD -MP -MF $(DEPDIR)/libgstbadaudio_@GST_API_VERSION@_la-gstaudioaggregator.Tpo -c -o libgstbadaudio_@GST_API_VERSION@_la-gstaudioaggregator.lo `test -f 'gstaudioaggregator.c' || echo '$(srcdir)/'`gstaudioaggregator.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstbadaudio_@GST_API_VERSION@_la-gstaudioaggregator.Tpo $(DEPDIR)/libgstbadaudio_@GST_API_VERSION@_la-gstaudioaggregator.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='gstaudioaggregator.c' object='libgstbadaudio_@GST_API_VERSION@_la-gstaudioaggregator.lo' libtool=yes @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstliveadder_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstliveadder_la_CFLAGS) $(CFLAGS) -c -o libgstliveadder_la-liveadder.lo `test -f 'liveadder.c' || echo '$(srcdir)/'`liveadder.c
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstbadaudio_@GST_API_VERSION@_la_CFLAGS) $(CFLAGS) -c -o libgstbadaudio_@GST_API_VERSION@_la-gstaudioaggregator.lo `test -f 'gstaudioaggregator.c' || echo '$(srcdir)/'`gstaudioaggregator.c
 
 mostlyclean-libtool:
 	-rm -f *.lo
 
 clean-libtool:
 	-rm -rf .libs _libs
+install-libgstaudio_@GST_API_VERSION@includeHEADERS: $(libgstaudio_@GST_API_VERSION@include_HEADERS)
+	@$(NORMAL_INSTALL)
+	@list='$(libgstaudio_@GST_API_VERSION@include_HEADERS)'; test -n "$(libgstaudio_@GST_API_VERSION@includedir)" || list=; \
+	if test -n "$$list"; then \
+	  echo " $(MKDIR_P) '$(DESTDIR)$(libgstaudio_@GST_API_VERSION@includedir)'"; \
+	  $(MKDIR_P) "$(DESTDIR)$(libgstaudio_@GST_API_VERSION@includedir)" || exit 1; \
+	fi; \
+	for p in $$list; do \
+	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+	  echo "$$d$$p"; \
+	done | $(am__base_list) | \
+	while read files; do \
+	  echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(libgstaudio_@GST_API_VERSION@includedir)'"; \
+	  $(INSTALL_HEADER) $$files "$(DESTDIR)$(libgstaudio_@GST_API_VERSION@includedir)" || exit $$?; \
+	done
 
-ID: $(am__tagged_files)
-	$(am__define_uniq_tagged_files); mkid -fID $$unique
-tags: tags-am
-TAGS: tags
+uninstall-libgstaudio_@GST_API_VERSION@includeHEADERS:
+	@$(NORMAL_UNINSTALL)
+	@list='$(libgstaudio_@GST_API_VERSION@include_HEADERS)'; test -n "$(libgstaudio_@GST_API_VERSION@includedir)" || list=; \
+	files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+	dir='$(DESTDIR)$(libgstaudio_@GST_API_VERSION@includedir)'; $(am__uninstall_files_from_dir)
+tags TAGS:
 
-tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
-	set x; \
-	here=`pwd`; \
-	$(am__define_uniq_tagged_files); \
-	shift; \
-	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
-	  test -n "$$unique" || unique=$$empty_fix; \
-	  if test $$# -gt 0; then \
-	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
-	      "$$@" $$unique; \
-	  else \
-	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
-	      $$unique; \
-	  fi; \
-	fi
-ctags: ctags-am
+ctags CTAGS:
 
-CTAGS: ctags
-ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
-	$(am__define_uniq_tagged_files); \
-	test -z "$(CTAGS_ARGS)$$unique" \
-	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
-	     $$unique
+cscope cscopelist:
 
-GTAGS:
-	here=`$(am__cd) $(top_builddir) && pwd` \
-	  && $(am__cd) $(top_srcdir) \
-	  && gtags -i $(GTAGS_ARGS) "$$here"
-cscopelist: cscopelist-am
-
-cscopelist-am: $(am__tagged_files)
-	list='$(am__tagged_files)'; \
-	case "$(srcdir)" in \
-	  [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
-	  *) sdir=$(subdir)/$(srcdir) ;; \
-	esac; \
-	for i in $$list; do \
-	  if test -f "$$i"; then \
-	    echo "$(subdir)/$$i"; \
-	  else \
-	    echo "$$sdir/$$i"; \
-	  fi; \
-	done >> $(top_builddir)/cscope.files
-
-distclean-tags:
-	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
 
 distdir: $(DISTFILES)
 	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
@@ -974,7 +969,7 @@
 check: check-am
 all-am: Makefile $(LTLIBRARIES) $(HEADERS)
 installdirs:
-	for dir in "$(DESTDIR)$(plugindir)"; do \
+	for dir in "$(DESTDIR)$(libdir)" "$(DESTDIR)$(libgstaudio_@GST_API_VERSION@includedir)"; do \
 	  test -z "$$dir" || $(MKDIR_P) "$$dir"; \
 	done
 install: install-am
@@ -999,6 +994,7 @@
 mostlyclean-generic:
 
 clean-generic:
+	-test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
 
 distclean-generic:
 	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
@@ -1009,14 +1005,13 @@
 	@echo "it deletes files that may require special tools to rebuild."
 clean: clean-am
 
-clean-am: clean-generic clean-libtool clean-pluginLTLIBRARIES \
+clean-am: clean-generic clean-libLTLIBRARIES clean-libtool \
 	mostlyclean-am
 
 distclean: distclean-am
 	-rm -rf ./$(DEPDIR)
 	-rm -f Makefile
-distclean-am: clean-am distclean-compile distclean-generic \
-	distclean-tags
+distclean-am: clean-am distclean-compile distclean-generic
 
 dvi: dvi-am
 
@@ -1030,13 +1025,13 @@
 
 info-am:
 
-install-data-am: install-pluginLTLIBRARIES
+install-data-am: install-libgstaudio_@GST_API_VERSION@includeHEADERS
 
 install-dvi: install-dvi-am
 
 install-dvi-am:
 
-install-exec-am:
+install-exec-am: install-libLTLIBRARIES
 
 install-html: install-html-am
 
@@ -1076,24 +1071,27 @@
 
 ps-am:
 
-uninstall-am: uninstall-pluginLTLIBRARIES
+uninstall-am: uninstall-libLTLIBRARIES \
+	uninstall-libgstaudio_@GST_API_VERSION@includeHEADERS
 
 .MAKE: install-am install-strip
 
-.PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \
-	clean-libtool clean-pluginLTLIBRARIES cscopelist-am ctags \
-	ctags-am distclean distclean-compile distclean-generic \
-	distclean-libtool distclean-tags distdir dvi dvi-am html \
-	html-am info info-am install install-am install-data \
-	install-data-am install-dvi install-dvi-am install-exec \
-	install-exec-am install-html install-html-am install-info \
-	install-info-am install-man install-pdf install-pdf-am \
-	install-pluginLTLIBRARIES install-ps install-ps-am \
-	install-strip installcheck installcheck-am installdirs \
-	maintainer-clean maintainer-clean-generic mostlyclean \
-	mostlyclean-compile mostlyclean-generic mostlyclean-libtool \
-	pdf pdf-am ps ps-am tags tags-am uninstall uninstall-am \
-	uninstall-pluginLTLIBRARIES
+.PHONY: all all-am check check-am clean clean-generic \
+	clean-libLTLIBRARIES clean-libtool cscopelist-am ctags-am \
+	distclean distclean-compile distclean-generic \
+	distclean-libtool distdir dvi dvi-am html html-am info info-am \
+	install install-am install-data install-data-am install-dvi \
+	install-dvi-am install-exec install-exec-am install-html \
+	install-html-am install-info install-info-am \
+	install-libLTLIBRARIES \
+	install-libgstaudio_@GST_API_VERSION@includeHEADERS \
+	install-man install-pdf install-pdf-am install-ps \
+	install-ps-am install-strip installcheck installcheck-am \
+	installdirs maintainer-clean maintainer-clean-generic \
+	mostlyclean mostlyclean-compile mostlyclean-generic \
+	mostlyclean-libtool pdf pdf-am ps ps-am tags-am uninstall \
+	uninstall-am uninstall-libLTLIBRARIES \
+	uninstall-libgstaudio_@GST_API_VERSION@includeHEADERS
 
 .PRECIOUS: Makefile
 
diff --git a/gst/audiomixer/gstaudioaggregator.c b/gst-libs/gst/audio/gstaudioaggregator.c
similarity index 97%
rename from gst/audiomixer/gstaudioaggregator.c
rename to gst-libs/gst/audio/gstaudioaggregator.c
index 8ca7913..5d7e8d6 100644
--- a/gst/audiomixer/gstaudioaggregator.c
+++ b/gst-libs/gst/audio/gstaudioaggregator.c
@@ -175,6 +175,8 @@
     GstAggregatorPad * bpad, GstBuffer * buffer, GstBuffer ** outbuf);
 static GstFlowReturn gst_audio_aggregator_aggregate (GstAggregator * agg,
     gboolean timeout);
+static gboolean sync_pad_values (GstAudioAggregator * aagg,
+    GstAudioAggregatorPad * pad);
 
 #define DEFAULT_OUTPUT_BUFFER_DURATION (10 * GST_MSECOND)
 #define DEFAULT_ALIGNMENT_THRESHOLD   (40 * GST_MSECOND)
@@ -240,6 +242,8 @@
 
   klass->create_output_buffer = gst_audio_aggregator_create_output_buffer;
 
+  GST_DEBUG_REGISTER_FUNCPTR (sync_pad_values);
+
   GST_DEBUG_CATEGORY_INIT (audio_aggregator_debug, "audioaggregator",
       GST_DEBUG_FG_MAGENTA, "GstAudioAggregator");
 
@@ -829,7 +833,7 @@
   if (discont) {
     /* Have discont, need resync */
     if (pad->priv->next_offset != -1)
-      GST_INFO_OBJECT (pad, "Have discont. Expected %"
+      GST_DEBUG_OBJECT (pad, "Have discont. Expected %"
           G_GUINT64_FORMAT ", got %" G_GUINT64_FORMAT,
           pad->priv->next_offset, start_offset);
     pad->priv->output_offset = -1;
@@ -853,7 +857,7 @@
 
     /* Convert to position in the output segment */
     start_output_offset =
-        gst_segment_to_position (&agg->segment, GST_FORMAT_TIME,
+        gst_segment_position_from_running_time (&agg->segment, GST_FORMAT_TIME,
         start_running_time);
     if (start_output_offset != -1)
       start_output_offset =
@@ -861,7 +865,7 @@
           GST_SECOND);
 
     end_output_offset =
-        gst_segment_to_position (&agg->segment, GST_FORMAT_TIME,
+        gst_segment_position_from_running_time (&agg->segment, GST_FORMAT_TIME,
         end_running_time);
     if (end_output_offset != -1)
       end_output_offset =
@@ -995,7 +999,7 @@
   if (pad->priv->position == pad->priv->size) {
     /* Buffer done, drop it */
     gst_buffer_replace (&pad->priv->buffer, NULL);
-    GST_DEBUG_OBJECT (pad, "Finished mixing buffer, waiting for next");
+    GST_LOG_OBJECT (pad, "Finished mixing buffer, waiting for next");
     return FALSE;
   }
 
@@ -1089,7 +1093,7 @@
 
   /* Sync pad properties to the stream time */
   gst_aggregator_iterate_sinkpads (agg,
-      (GstAggregatorPadForeachFunc) GST_DEBUG_FUNCPTR (sync_pad_values), NULL);
+      (GstAggregatorPadForeachFunc) sync_pad_values, NULL);
 
   GST_AUDIO_AGGREGATOR_LOCK (aagg);
   GST_OBJECT_LOCK (agg);
@@ -1194,8 +1198,8 @@
       if (timeout) {
         if (pad->priv->output_offset < next_offset) {
           gint64 diff = next_offset - pad->priv->output_offset;
-          GST_LOG_OBJECT (pad, "Timeout, missing %" G_GINT64_FORMAT " frames (%"
-              GST_TIME_FORMAT ")", diff,
+          GST_DEBUG_OBJECT (pad, "Timeout, missing %" G_GINT64_FORMAT
+              " frames (%" GST_TIME_FORMAT ")", diff,
               GST_TIME_ARGS (gst_util_uint64_scale (diff, GST_SECOND,
                       GST_AUDIO_INFO_RATE (&aagg->info))));
         }
@@ -1241,7 +1245,7 @@
       pad->priv->output_offset += diff;
 
       if (pad->priv->position == pad->priv->size) {
-        GST_LOG_OBJECT (pad, "Buffer was late by %" GST_TIME_FORMAT
+        GST_DEBUG_OBJECT (pad, "Buffer was late by %" GST_TIME_FORMAT
             ", dropping %" GST_PTR_FORMAT,
             GST_TIME_ARGS (gst_util_uint64_scale (odiff, GST_SECOND,
                     GST_AUDIO_INFO_RATE (&aagg->info))), pad->priv->buffer);
@@ -1262,8 +1266,8 @@
       drop_buf = !gst_audio_aggregator_mix_buffer (aagg, pad, pad->priv->buffer,
           outbuf);
       if (pad->priv->output_offset >= next_offset) {
-        GST_DEBUG_OBJECT (pad,
-            "Pad is after current offset: %" G_GUINT64_FORMAT " >= %"
+        GST_LOG_OBJECT (pad,
+            "Pad is at or after current offset: %" G_GUINT64_FORMAT " >= %"
             G_GINT64_FORMAT, pad->priv->output_offset, next_offset);
       } else {
         is_done = FALSE;
@@ -1279,15 +1283,15 @@
 
   if (dropped) {
     /* We dropped a buffer, retry */
-    GST_INFO_OBJECT (aagg, "A pad dropped a buffer, wait for the next one");
+    GST_LOG_OBJECT (aagg, "A pad dropped a buffer, wait for the next one");
     GST_AUDIO_AGGREGATOR_UNLOCK (aagg);
     return GST_FLOW_OK;
   }
 
   if (!is_done && !is_eos) {
     /* Get more buffers */
-    GST_INFO_OBJECT (aagg,
-        "We're not done yet for the current offset," " waiting for more data");
+    GST_LOG_OBJECT (aagg,
+        "We're not done yet for the current offset, waiting for more data");
     GST_AUDIO_AGGREGATOR_UNLOCK (aagg);
     return GST_FLOW_OK;
   }
diff --git a/gst/audiomixer/gstaudioaggregator.h b/gst-libs/gst/audio/gstaudioaggregator.h
similarity index 100%
rename from gst/audiomixer/gstaudioaggregator.h
rename to gst-libs/gst/audio/gstaudioaggregator.h
diff --git a/gst-libs/gst/base/Makefile.am b/gst-libs/gst/base/Makefile.am
index 0d55368..993701d 100644
--- a/gst-libs/gst/base/Makefile.am
+++ b/gst-libs/gst/base/Makefile.am
@@ -9,8 +9,8 @@
 libgstbadbase_@GST_API_VERSION@_la_LIBADD = $(GST_LIBS)
 libgstbadbase_@GST_API_VERSION@_la_LDFLAGS = $(GST_LIB_LDFLAGS) $(GST_ALL_LDFLAGS) $(GST_LT_LDFLAGS)
 
-noinst_HEADERS =	\
-	gstaggregator.h
+libgstbase_@GST_API_VERSION@includedir = $(includedir)/gstreamer-@GST_API_VERSION@/gst/base
+libgstbase_@GST_API_VERSION@include_HEADERS = gstaggregator.h
 
 EXTRA_DIST = 
 
diff --git a/gst-libs/gst/base/Makefile.in b/gst-libs/gst/base/Makefile.in
index ad5b62e..f7c8438 100644
--- a/gst-libs/gst/base/Makefile.in
+++ b/gst-libs/gst/base/Makefile.in
@@ -116,19 +116,19 @@
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
 	$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
-	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gsettings.m4 \
-	$(top_srcdir)/m4/gst-fionread.m4 $(top_srcdir)/m4/gst-sdl.m4 \
-	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
-	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
-	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libgcrypt.m4 \
-	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
-	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
-	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
-	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
-	$(top_srcdir)/configure.ac
+	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gst-fionread.m4 \
+	$(top_srcdir)/m4/gst-sdl.m4 $(top_srcdir)/m4/iconv.m4 \
+	$(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \
+	$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
+	$(top_srcdir)/m4/libgcrypt.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
+	$(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
-DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \
+DIST_COMMON = $(srcdir)/Makefile.am \
+	$(libgstbase_@GST_API_VERSION@include_HEADERS) \
 	$(am__DIST_COMMON)
 mkinstalldirs = $(install_sh) -d
 CONFIG_HEADER = $(top_builddir)/config.h
@@ -161,7 +161,8 @@
     || { echo " ( cd '$$dir' && rm -f" $$files ")"; \
          $(am__cd) "$$dir" && rm -f $$files; }; \
   }
-am__installdirs = "$(DESTDIR)$(libdir)"
+am__installdirs = "$(DESTDIR)$(libdir)" \
+	"$(DESTDIR)$(libgstbase_@GST_API_VERSION@includedir)"
 LTLIBRARIES = $(lib_LTLIBRARIES)
 am__DEPENDENCIES_1 =
 libgstbadbase_@GST_API_VERSION@_la_DEPENDENCIES =  \
@@ -219,26 +220,8 @@
     n|no|NO) false;; \
     *) (install-info --version) >/dev/null 2>&1;; \
   esac
-HEADERS = $(noinst_HEADERS)
+HEADERS = $(libgstbase_@GST_API_VERSION@include_HEADERS)
 am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
-# Read a list of newline-separated strings from the standard input,
-# and print each of them once, without duplicates.  Input order is
-# *not* preserved.
-am__uniquify_input = $(AWK) '\
-  BEGIN { nonempty = 0; } \
-  { items[$$0] = 1; nonempty = 1; } \
-  END { if (nonempty) { for (i in items) print i; }; } \
-'
-# Make sure the list of sources is unique.  This is necessary because,
-# e.g., the same source file might be shared among _SOURCES variables
-# for different programs/libraries.
-am__define_uniq_tagged_files = \
-  list='$(am__tagged_files)'; \
-  unique=`for i in $$list; do \
-    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-  done | $(am__uniquify_input)`
-ETAGS = etags
-CTAGS = ctags
 am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp
 DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
 ACLOCAL = @ACLOCAL@
@@ -276,6 +259,8 @@
 CLUTTER_X11_LIBS = @CLUTTER_X11_LIBS@
 CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
+CUDA_CFLAGS = @CUDA_CFLAGS@
+CUDA_LIBS = @CUDA_LIBS@
 CURL_CFLAGS = @CURL_CFLAGS@
 CURL_LIBS = @CURL_LIBS@
 CXX = @CXX@
@@ -313,6 +298,8 @@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
+EGL_CFLAGS = @EGL_CFLAGS@
+EGL_LIBS = @EGL_LIBS@
 EGREP = @EGREP@
 ERROR_CFLAGS = @ERROR_CFLAGS@
 ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
@@ -321,7 +308,6 @@
 EXIF_CFLAGS = @EXIF_CFLAGS@
 EXIF_LIBS = @EXIF_LIBS@
 FAAC_LIBS = @FAAC_LIBS@
-FAAD_IS_NEAAC = @FAAD_IS_NEAAC@
 FAAD_LIBS = @FAAD_LIBS@
 FFLAGS = @FFLAGS@
 FGREP = @FGREP@
@@ -340,8 +326,9 @@
 GIO_LIBS = @GIO_LIBS@
 GIO_UNIX_CFLAGS = @GIO_UNIX_CFLAGS@
 GIO_UNIX_LIBS = @GIO_UNIX_LIBS@
+GLES2_CFLAGS = @GLES2_CFLAGS@
+GLES2_LIBS = @GLES2_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
-GLIB_COMPILE_SCHEMAS = @GLIB_COMPILE_SCHEMAS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
@@ -358,16 +345,17 @@
 GMODULE_NO_EXPORT_LIBS = @GMODULE_NO_EXPORT_LIBS@
 GMSGFMT = @GMSGFMT@
 GMSGFMT_015 = @GMSGFMT_015@
+GNUSTL_CFLAGS = @GNUSTL_CFLAGS@
+GNUSTL_LIBS = @GNUSTL_LIBS@
 GRAPHENE_CFLAGS = @GRAPHENE_CFLAGS@
 GRAPHENE_LIBS = @GRAPHENE_LIBS@
 GREP = @GREP@
-GSETTINGS_CFLAGS = @GSETTINGS_CFLAGS@
-GSETTINGS_DISABLE_SCHEMAS_COMPILE = @GSETTINGS_DISABLE_SCHEMAS_COMPILE@
-GSETTINGS_LIBS = @GSETTINGS_LIBS@
 GSM_LIBS = @GSM_LIBS@
 GSTPB_PLUGINS_DIR = @GSTPB_PLUGINS_DIR@
 GSTPB_PREFIX = @GSTPB_PREFIX@
 GST_AGE = @GST_AGE@
+GST_ALLOCATORS_CFLAGS = @GST_ALLOCATORS_CFLAGS@
+GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
 GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
 GST_API_VERSION = @GST_API_VERSION@
 GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
@@ -393,6 +381,8 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PBUTILS_CFLAGS = @GST_PBUTILS_CFLAGS@
+GST_PBUTILS_LIBS = @GST_PBUTILS_LIBS@
 GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BAD_CFLAGS = @GST_PLUGINS_BAD_CFLAGS@
@@ -418,6 +408,8 @@
 GST_PREFIX = @GST_PREFIX@
 GST_REVISION = @GST_REVISION@
 GST_TOOLS_DIR = @GST_TOOLS_DIR@
+GST_VIDEO_CFLAGS = @GST_VIDEO_CFLAGS@
+GST_VIDEO_LIBS = @GST_VIDEO_LIBS@
 GTK3_CFLAGS = @GTK3_CFLAGS@
 GTK3_GL_CFLAGS = @GTK3_GL_CFLAGS@
 GTK3_GL_LIBS = @GTK3_GL_LIBS@
@@ -519,6 +511,7 @@
 LTLIBICONV = @LTLIBICONV@
 LTLIBINTL = @LTLIBINTL@
 LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
 MANIFEST_TOOL = @MANIFEST_TOOL@
@@ -532,8 +525,6 @@
 MODPLUG_LIBS = @MODPLUG_LIBS@
 MPEG2ENC_CFLAGS = @MPEG2ENC_CFLAGS@
 MPEG2ENC_LIBS = @MPEG2ENC_LIBS@
-MPG123_CFLAGS = @MPG123_CFLAGS@
-MPG123_LIBS = @MPG123_LIBS@
 MPLEX_CFLAGS = @MPLEX_CFLAGS@
 MPLEX_LDFLAGS = @MPLEX_LDFLAGS@
 MPLEX_LIBS = @MPLEX_LIBS@
@@ -549,6 +540,8 @@
 NETTLE_LIBS = @NETTLE_LIBS@
 NM = @NM@
 NMEDIT = @NMEDIT@
+NVENCODE_CFLAGS = @NVENCODE_CFLAGS@
+NVENCODE_LIBS = @NVENCODE_LIBS@
 OBJC = @OBJC@
 OBJCDEPMODE = @OBJCDEPMODE@
 OBJCFLAGS = @OBJCFLAGS@
@@ -606,16 +599,18 @@
 PYTHON_PLATFORM = @PYTHON_PLATFORM@
 PYTHON_PREFIX = @PYTHON_PREFIX@
 PYTHON_VERSION = @PYTHON_VERSION@
+QT_ANDROID_CFLAGS = @QT_ANDROID_CFLAGS@
+QT_ANDROID_LIBS = @QT_ANDROID_LIBS@
 QT_CFLAGS = @QT_CFLAGS@
 QT_LIBS = @QT_LIBS@
+QT_MAC_CFLAGS = @QT_MAC_CFLAGS@
+QT_MAC_LIBS = @QT_MAC_LIBS@
 QT_WAYLAND_CFLAGS = @QT_WAYLAND_CFLAGS@
 QT_WAYLAND_LIBS = @QT_WAYLAND_LIBS@
 QT_X11_CFLAGS = @QT_X11_CFLAGS@
 QT_X11_LIBS = @QT_X11_LIBS@
 RANLIB = @RANLIB@
 RCC = @RCC@
-RSVG_2_36_2_CFLAGS = @RSVG_2_36_2_CFLAGS@
-RSVG_2_36_2_LIBS = @RSVG_2_36_2_LIBS@
 RSVG_CFLAGS = @RSVG_CFLAGS@
 RSVG_LIBS = @RSVG_LIBS@
 RTMP_CFLAGS = @RTMP_CFLAGS@
@@ -667,6 +662,7 @@
 VOAACENC_LIBS = @VOAACENC_LIBS@
 VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
 VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VULKAN_LIBS = @VULKAN_LIBS@
 WARNING_CFLAGS = @WARNING_CFLAGS@
 WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
 WARNING_OBJCFLAGS = @WARNING_OBJCFLAGS@
@@ -677,6 +673,7 @@
 WAYLAND_LIBS = @WAYLAND_LIBS@
 WEBP_CFLAGS = @WEBP_CFLAGS@
 WEBP_LIBS = @WEBP_LIBS@
+WGET = @WGET@
 WILDMIDI_CFLAGS = @WILDMIDI_CFLAGS@
 WILDMIDI_LIBS = @WILDMIDI_LIBS@
 WINKS_LIBS = @WINKS_LIBS@
@@ -686,6 +683,8 @@
 X11_LIBS = @X11_LIBS@
 X265_CFLAGS = @X265_CFLAGS@
 X265_LIBS = @X265_LIBS@
+XCB_CFLAGS = @XCB_CFLAGS@
+XCB_LIBS = @XCB_LIBS@
 XCOMPOSITE_CFLAGS = @XCOMPOSITE_CFLAGS@
 XCOMPOSITE_LIBS = @XCOMPOSITE_LIBS@
 XGETTEXT = @XGETTEXT@
@@ -723,7 +722,6 @@
 docdir = @docdir@
 dvidir = @dvidir@
 exec_prefix = @exec_prefix@
-gsettingsschemadir = @gsettingsschemadir@
 host = @host@
 host_alias = @host_alias@
 host_cpu = @host_cpu@
@@ -772,9 +770,8 @@
 
 libgstbadbase_@GST_API_VERSION@_la_LIBADD = $(GST_LIBS)
 libgstbadbase_@GST_API_VERSION@_la_LDFLAGS = $(GST_LIB_LDFLAGS) $(GST_ALL_LDFLAGS) $(GST_LT_LDFLAGS)
-noinst_HEADERS = \
-	gstaggregator.h
-
+libgstbase_@GST_API_VERSION@includedir = $(includedir)/gstreamer-@GST_API_VERSION@/gst/base
+libgstbase_@GST_API_VERSION@include_HEADERS = gstaggregator.h
 EXTRA_DIST = 
 all: all-am
 
@@ -892,58 +889,33 @@
 
 clean-libtool:
 	-rm -rf .libs _libs
+install-libgstbase_@GST_API_VERSION@includeHEADERS: $(libgstbase_@GST_API_VERSION@include_HEADERS)
+	@$(NORMAL_INSTALL)
+	@list='$(libgstbase_@GST_API_VERSION@include_HEADERS)'; test -n "$(libgstbase_@GST_API_VERSION@includedir)" || list=; \
+	if test -n "$$list"; then \
+	  echo " $(MKDIR_P) '$(DESTDIR)$(libgstbase_@GST_API_VERSION@includedir)'"; \
+	  $(MKDIR_P) "$(DESTDIR)$(libgstbase_@GST_API_VERSION@includedir)" || exit 1; \
+	fi; \
+	for p in $$list; do \
+	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+	  echo "$$d$$p"; \
+	done | $(am__base_list) | \
+	while read files; do \
+	  echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(libgstbase_@GST_API_VERSION@includedir)'"; \
+	  $(INSTALL_HEADER) $$files "$(DESTDIR)$(libgstbase_@GST_API_VERSION@includedir)" || exit $$?; \
+	done
 
-ID: $(am__tagged_files)
-	$(am__define_uniq_tagged_files); mkid -fID $$unique
-tags: tags-am
-TAGS: tags
+uninstall-libgstbase_@GST_API_VERSION@includeHEADERS:
+	@$(NORMAL_UNINSTALL)
+	@list='$(libgstbase_@GST_API_VERSION@include_HEADERS)'; test -n "$(libgstbase_@GST_API_VERSION@includedir)" || list=; \
+	files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+	dir='$(DESTDIR)$(libgstbase_@GST_API_VERSION@includedir)'; $(am__uninstall_files_from_dir)
+tags TAGS:
 
-tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
-	set x; \
-	here=`pwd`; \
-	$(am__define_uniq_tagged_files); \
-	shift; \
-	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
-	  test -n "$$unique" || unique=$$empty_fix; \
-	  if test $$# -gt 0; then \
-	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
-	      "$$@" $$unique; \
-	  else \
-	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
-	      $$unique; \
-	  fi; \
-	fi
-ctags: ctags-am
+ctags CTAGS:
 
-CTAGS: ctags
-ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
-	$(am__define_uniq_tagged_files); \
-	test -z "$(CTAGS_ARGS)$$unique" \
-	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
-	     $$unique
+cscope cscopelist:
 
-GTAGS:
-	here=`$(am__cd) $(top_builddir) && pwd` \
-	  && $(am__cd) $(top_srcdir) \
-	  && gtags -i $(GTAGS_ARGS) "$$here"
-cscopelist: cscopelist-am
-
-cscopelist-am: $(am__tagged_files)
-	list='$(am__tagged_files)'; \
-	case "$(srcdir)" in \
-	  [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
-	  *) sdir=$(subdir)/$(srcdir) ;; \
-	esac; \
-	for i in $$list; do \
-	  if test -f "$$i"; then \
-	    echo "$(subdir)/$$i"; \
-	  else \
-	    echo "$$sdir/$$i"; \
-	  fi; \
-	done >> $(top_builddir)/cscope.files
-
-distclean-tags:
-	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
 
 distdir: $(DISTFILES)
 	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
@@ -979,7 +951,7 @@
 check: check-am
 all-am: Makefile $(LTLIBRARIES) $(HEADERS)
 installdirs:
-	for dir in "$(DESTDIR)$(libdir)"; do \
+	for dir in "$(DESTDIR)$(libdir)" "$(DESTDIR)$(libgstbase_@GST_API_VERSION@includedir)"; do \
 	  test -z "$$dir" || $(MKDIR_P) "$$dir"; \
 	done
 install: install-am
@@ -1020,8 +992,7 @@
 distclean: distclean-am
 	-rm -rf ./$(DEPDIR)
 	-rm -f Makefile
-distclean-am: clean-am distclean-compile distclean-generic \
-	distclean-tags
+distclean-am: clean-am distclean-compile distclean-generic
 
 dvi: dvi-am
 
@@ -1035,7 +1006,7 @@
 
 info-am:
 
-install-data-am:
+install-data-am: install-libgstbase_@GST_API_VERSION@includeHEADERS
 
 install-dvi: install-dvi-am
 
@@ -1081,23 +1052,27 @@
 
 ps-am:
 
-uninstall-am: uninstall-libLTLIBRARIES
+uninstall-am: uninstall-libLTLIBRARIES \
+	uninstall-libgstbase_@GST_API_VERSION@includeHEADERS
 
 .MAKE: install-am install-strip
 
-.PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \
-	clean-libLTLIBRARIES clean-libtool cscopelist-am ctags \
-	ctags-am distclean distclean-compile distclean-generic \
-	distclean-libtool distclean-tags distdir dvi dvi-am html \
-	html-am info info-am install install-am install-data \
-	install-data-am install-dvi install-dvi-am install-exec \
-	install-exec-am install-html install-html-am install-info \
-	install-info-am install-libLTLIBRARIES install-man install-pdf \
-	install-pdf-am install-ps install-ps-am install-strip \
-	installcheck installcheck-am installdirs maintainer-clean \
-	maintainer-clean-generic mostlyclean mostlyclean-compile \
-	mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
-	tags tags-am uninstall uninstall-am uninstall-libLTLIBRARIES
+.PHONY: all all-am check check-am clean clean-generic \
+	clean-libLTLIBRARIES clean-libtool cscopelist-am ctags-am \
+	distclean distclean-compile distclean-generic \
+	distclean-libtool distdir dvi dvi-am html html-am info info-am \
+	install install-am install-data install-data-am install-dvi \
+	install-dvi-am install-exec install-exec-am install-html \
+	install-html-am install-info install-info-am \
+	install-libLTLIBRARIES \
+	install-libgstbase_@GST_API_VERSION@includeHEADERS install-man \
+	install-pdf install-pdf-am install-ps install-ps-am \
+	install-strip installcheck installcheck-am installdirs \
+	maintainer-clean maintainer-clean-generic mostlyclean \
+	mostlyclean-compile mostlyclean-generic mostlyclean-libtool \
+	pdf pdf-am ps ps-am tags-am uninstall uninstall-am \
+	uninstall-libLTLIBRARIES \
+	uninstall-libgstbase_@GST_API_VERSION@includeHEADERS
 
 .PRECIOUS: Makefile
 
diff --git a/gst-libs/gst/base/gstaggregator.c b/gst-libs/gst/base/gstaggregator.c
index 1416f6c..ec297df 100644
--- a/gst-libs/gst/base/gstaggregator.c
+++ b/gst-libs/gst/base/gstaggregator.c
@@ -215,6 +215,8 @@
   gboolean pending_flush_stop;
   gboolean pending_eos;
 
+  gboolean first_buffer;
+
   GQueue buffers;
   guint num_buffers;
   GstClockTime head_position;
@@ -288,7 +290,7 @@
   gboolean peer_latency_live;   /* protected by src_lock */
   GstClockTime peer_latency_min;        /* protected by src_lock */
   GstClockTime peer_latency_max;        /* protected by src_lock */
-  gboolean has_peer_latency;
+  gboolean has_peer_latency;    /* protected by src_lock */
 
   GstClockTime sub_latency_min; /* protected by src_lock */
   GstClockTime sub_latency_max; /* protected by src_lock */
@@ -298,7 +300,7 @@
   GMutex src_lock;
   GCond src_cond;
 
-  gboolean first_buffer;
+  gboolean first_buffer;        /* protected by object lock */
   GstAggregatorStartTimeSelection start_time_selection;
   GstClockTime start_time;
 
@@ -311,6 +313,7 @@
   GstEvent *event;
   gboolean result;
   gboolean flush;
+  gboolean only_to_active_pads;
 
   gboolean one_actually_seeked;
 } EventData;
@@ -698,9 +701,8 @@
     }
 
     GST_DEBUG_OBJECT (self,
-        "clock returned %d (jitter: %s%" GST_TIME_FORMAT ")",
-        status, (jitter < 0 ? "-" : " "),
-        GST_TIME_ARGS ((jitter < 0 ? -jitter : jitter)));
+        "clock returned %d (jitter: %" GST_STIME_FORMAT ")",
+        status, GST_STIME_ARGS (jitter));
 
     /* we timed out */
     if (status == GST_CLOCK_OK || status == GST_CLOCK_EARLY) {
@@ -858,7 +860,6 @@
   GstAggregatorClass *klass;
   gboolean result;
 
-  self->priv->running = TRUE;
   self->priv->send_stream_start = TRUE;
   self->priv->send_segment = TRUE;
   self->priv->send_eos = TRUE;
@@ -1086,6 +1087,8 @@
         GST_OBJECT_UNLOCK (self);
       }
 
+      aggpad->priv->first_buffer = TRUE;
+
       /* We never forward the event */
       goto eat;
     }
@@ -1303,42 +1306,62 @@
   SRC_UNLOCK (self);
 }
 
+static GstAggregatorPad *
+gst_aggregator_default_create_new_pad (GstAggregator * self,
+    GstPadTemplate * templ, const gchar * req_name, const GstCaps * caps)
+{
+  GstAggregatorPad *agg_pad;
+  GstAggregatorPrivate *priv = self->priv;
+  gint serial = 0;
+  gchar *name = NULL;
+
+  if (templ->direction != GST_PAD_SINK ||
+      g_strcmp0 (templ->name_template, "sink_%u"))
+    goto not_sink;
+
+  GST_OBJECT_LOCK (self);
+  if (req_name == NULL || strlen (req_name) < 6
+      || !g_str_has_prefix (req_name, "sink_")) {
+    /* no name given when requesting the pad, use next available int */
+    priv->padcount++;
+  } else {
+    /* parse serial number from requested padname */
+    serial = g_ascii_strtoull (&req_name[5], NULL, 10);
+    if (serial >= priv->padcount)
+      priv->padcount = serial;
+  }
+
+  name = g_strdup_printf ("sink_%u", priv->padcount);
+  agg_pad = g_object_new (GST_AGGREGATOR_GET_CLASS (self)->sinkpads_type,
+      "name", name, "direction", GST_PAD_SINK, "template", templ, NULL);
+  g_free (name);
+
+  GST_OBJECT_UNLOCK (self);
+
+  return agg_pad;
+
+  /* errors */
+not_sink:
+  {
+    GST_WARNING_OBJECT (self, "request new pad that is not a SINK pad\n");
+    return NULL;
+  }
+}
+
 static GstPad *
 gst_aggregator_request_new_pad (GstElement * element,
     GstPadTemplate * templ, const gchar * req_name, const GstCaps * caps)
 {
   GstAggregator *self;
   GstAggregatorPad *agg_pad;
-
-  GstElementClass *klass = GST_ELEMENT_GET_CLASS (element);
+  GstAggregatorClass *klass = GST_AGGREGATOR_GET_CLASS (element);
   GstAggregatorPrivate *priv = GST_AGGREGATOR (element)->priv;
 
   self = GST_AGGREGATOR (element);
 
-  if (templ == gst_element_class_get_pad_template (klass, "sink_%u")) {
-    gint serial = 0;
-    gchar *name = NULL;
-
-    GST_OBJECT_LOCK (element);
-    if (req_name == NULL || strlen (req_name) < 6
-        || !g_str_has_prefix (req_name, "sink_")) {
-      /* no name given when requesting the pad, use next available int */
-      priv->padcount++;
-    } else {
-      /* parse serial number from requested padname */
-      serial = g_ascii_strtoull (&req_name[5], NULL, 10);
-      if (serial >= priv->padcount)
-        priv->padcount = serial;
-    }
-
-    name = g_strdup_printf ("sink_%u", priv->padcount);
-    agg_pad = g_object_new (GST_AGGREGATOR_GET_CLASS (self)->sinkpads_type,
-        "name", name, "direction", GST_PAD_SINK, "template", templ, NULL);
-    g_free (name);
-
-    GST_OBJECT_UNLOCK (element);
-
-  } else {
+  agg_pad = klass->create_new_pad (self, templ, req_name, caps);
+  if (!agg_pad) {
+    GST_ERROR_OBJECT (element, "Couldn't create new pad");
     return NULL;
   }
 
@@ -1401,18 +1424,6 @@
   else
     max = GST_CLOCK_TIME_NONE;
 
-  if (live && min > max) {
-    GST_ELEMENT_WARNING (self, CORE, NEGOTIATION,
-        ("%s", "Latency too big"),
-        ("The requested latency value is too big for the current pipeline. "
-            "Limiting to %" G_GINT64_FORMAT, max));
-    min = max;
-    /* FIXME: This could in theory become negative, but in
-     * that case all is lost anyway */
-    self->priv->latency -= min - max;
-    /* FIXME: shouldn't we g_object_notify() the change here? */
-  }
-
   SRC_BROADCAST (self);
 
   GST_DEBUG_OBJECT (self, "configured latency live:%s min:%" G_GINT64_FORMAT
@@ -1554,9 +1565,14 @@
   GstAggregatorPad *aggpad = GST_AGGREGATOR_PAD (pad);
 
   if (peer) {
-    ret = gst_pad_send_event (peer, gst_event_ref (evdata->event));
-    GST_DEBUG_OBJECT (pad, "return of event push is %d", ret);
-    gst_object_unref (peer);
+    if (evdata->only_to_active_pads && aggpad->priv->first_buffer) {
+      GST_DEBUG_OBJECT (pad, "not sending event to inactive pad");
+      ret = TRUE;
+    } else {
+      ret = gst_pad_send_event (peer, gst_event_ref (evdata->event));
+      GST_DEBUG_OBJECT (pad, "return of event push is %d", ret);
+      gst_object_unref (peer);
+    }
   }
 
   if (ret == FALSE) {
@@ -1601,7 +1617,7 @@
 
 static EventData
 gst_aggregator_forward_event_to_all_sinkpads (GstAggregator * self,
-    GstEvent * event, gboolean flush)
+    GstEvent * event, gboolean flush, gboolean only_to_active_pads)
 {
   EventData evdata;
 
@@ -1609,6 +1625,7 @@
   evdata.result = TRUE;
   evdata.flush = flush;
   evdata.one_actually_seeked = FALSE;
+  evdata.only_to_active_pads = only_to_active_pads;
 
   /* We first need to set all pads as flushing in a first pass
    * as flush_start flush_stop is sometimes sent synchronously
@@ -1668,7 +1685,8 @@
   GST_OBJECT_UNLOCK (self);
 
   /* forward the seek upstream */
-  evdata = gst_aggregator_forward_event_to_all_sinkpads (self, event, flush);
+  evdata =
+      gst_aggregator_forward_event_to_all_sinkpads (self, event, flush, FALSE);
   event = NULL;
 
   if (!evdata.result || !evdata.one_actually_seeked) {
@@ -1711,7 +1729,12 @@
     }
   }
 
-  evdata = gst_aggregator_forward_event_to_all_sinkpads (self, event, FALSE);
+  /* Don't forward QOS events to pads that had no active buffer yet. Otherwise
+   * they will receive a QOS event that has earliest_time=0 (because we can't
+   * have negative timestamps), and consider their buffer as too late */
+  evdata =
+      gst_aggregator_forward_event_to_all_sinkpads (self, event, FALSE,
+      GST_EVENT_TYPE (event) == GST_EVENT_QOS);
   res = evdata.result;
 
 done:
@@ -1849,7 +1872,7 @@
  * Gets the latency value. See gst_aggregator_set_latency for
  * more details.
  *
- * Returns: The time in nanoseconds to wait for data to arrive on a sink pad 
+ * Returns: The time in nanoseconds to wait for data to arrive on a sink pad
  * before a pad is deemed unresponsive. A value of -1 means an
  * unlimited time.
  */
@@ -1932,6 +1955,8 @@
   klass->src_event = gst_aggregator_default_src_event;
   klass->src_query = gst_aggregator_default_src_query;
 
+  klass->create_new_pad = gst_aggregator_default_create_new_pad;
+
   gstelement_class->request_new_pad =
       GST_DEBUG_FUNCPTR (gst_aggregator_request_new_pad);
   gstelement_class->send_event = GST_DEBUG_FUNCPTR (gst_aggregator_send_event);
@@ -2131,8 +2156,11 @@
 
   buf_pts = GST_BUFFER_PTS (actual_buf);
 
+  aggpad->priv->first_buffer = FALSE;
+
   for (;;) {
     SRC_LOCK (self);
+    GST_OBJECT_LOCK (self);
     PAD_LOCK (aggpad);
     if (gst_aggregator_pad_has_space (self, aggpad)
         && aggpad->priv->flow_return == GST_FLOW_OK) {
@@ -2149,10 +2177,12 @@
 
     flow_return = aggpad->priv->flow_return;
     if (flow_return != GST_FLOW_OK) {
+      GST_OBJECT_UNLOCK (self);
       SRC_UNLOCK (self);
       goto flushing;
     }
     GST_DEBUG_OBJECT (aggpad, "Waiting for buffer to be consumed");
+    GST_OBJECT_UNLOCK (self);
     SRC_UNLOCK (self);
     PAD_WAIT_EVENT (aggpad);
 
@@ -2168,6 +2198,7 @@
         start_time = 0;
         break;
       case GST_AGGREGATOR_START_TIME_SELECTION_FIRST:
+        GST_OBJECT_LOCK (aggpad);
         if (aggpad->segment.format == GST_FORMAT_TIME) {
           start_time = buf_pts;
           if (start_time != -1) {
@@ -2183,6 +2214,7 @@
               "as the segment is a %s segment instead of a time segment",
               gst_format_get_name (aggpad->segment.format));
         }
+        GST_OBJECT_UNLOCK (aggpad);
         break;
       case GST_AGGREGATOR_START_TIME_SELECTION_SET:
         start_time = self->priv->start_time;
@@ -2203,6 +2235,7 @@
   }
 
   PAD_UNLOCK (aggpad);
+  GST_OBJECT_UNLOCK (self);
   SRC_UNLOCK (self);
 
 done:
@@ -2414,6 +2447,8 @@
 
   g_mutex_init (&pad->priv->flush_lock);
   g_mutex_init (&pad->priv->lock);
+
+  pad->priv->first_buffer = TRUE;
 }
 
 /**
diff --git a/gst-libs/gst/base/gstaggregator.h b/gst-libs/gst/base/gstaggregator.h
index 8eda7dc..e1afea4 100644
--- a/gst-libs/gst/base/gstaggregator.h
+++ b/gst-libs/gst/base/gstaggregator.h
@@ -245,6 +245,11 @@
 
   GstClockTime      (*get_next_time)  (GstAggregator    *  aggregator);
 
+  GstAggregatorPad * (*create_new_pad) (GstAggregator  * self,
+                                        GstPadTemplate * templ,
+                                        const gchar    * req_name,
+                                        const GstCaps  * caps);
+
   /*< private >*/
   gpointer          _gst_reserved[GST_PADDING_LARGE];
 };
diff --git a/gst-libs/gst/basecamerabinsrc/Makefile.in b/gst-libs/gst/basecamerabinsrc/Makefile.in
index 66daa27..2ead3f1 100644
--- a/gst-libs/gst/basecamerabinsrc/Makefile.in
+++ b/gst-libs/gst/basecamerabinsrc/Makefile.in
@@ -116,16 +116,15 @@
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
 	$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
-	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gsettings.m4 \
-	$(top_srcdir)/m4/gst-fionread.m4 $(top_srcdir)/m4/gst-sdl.m4 \
-	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
-	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
-	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libgcrypt.m4 \
-	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
-	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
-	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
-	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
-	$(top_srcdir)/configure.ac
+	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gst-fionread.m4 \
+	$(top_srcdir)/m4/gst-sdl.m4 $(top_srcdir)/m4/iconv.m4 \
+	$(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \
+	$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
+	$(top_srcdir)/m4/libgcrypt.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
+	$(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 DIST_COMMON = $(srcdir)/Makefile.am \
@@ -265,6 +264,8 @@
 CLUTTER_X11_LIBS = @CLUTTER_X11_LIBS@
 CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
+CUDA_CFLAGS = @CUDA_CFLAGS@
+CUDA_LIBS = @CUDA_LIBS@
 CURL_CFLAGS = @CURL_CFLAGS@
 CURL_LIBS = @CURL_LIBS@
 CXX = @CXX@
@@ -302,6 +303,8 @@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
+EGL_CFLAGS = @EGL_CFLAGS@
+EGL_LIBS = @EGL_LIBS@
 EGREP = @EGREP@
 ERROR_CFLAGS = @ERROR_CFLAGS@
 ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
@@ -310,7 +313,6 @@
 EXIF_CFLAGS = @EXIF_CFLAGS@
 EXIF_LIBS = @EXIF_LIBS@
 FAAC_LIBS = @FAAC_LIBS@
-FAAD_IS_NEAAC = @FAAD_IS_NEAAC@
 FAAD_LIBS = @FAAD_LIBS@
 FFLAGS = @FFLAGS@
 FGREP = @FGREP@
@@ -329,8 +331,9 @@
 GIO_LIBS = @GIO_LIBS@
 GIO_UNIX_CFLAGS = @GIO_UNIX_CFLAGS@
 GIO_UNIX_LIBS = @GIO_UNIX_LIBS@
+GLES2_CFLAGS = @GLES2_CFLAGS@
+GLES2_LIBS = @GLES2_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
-GLIB_COMPILE_SCHEMAS = @GLIB_COMPILE_SCHEMAS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
@@ -347,16 +350,17 @@
 GMODULE_NO_EXPORT_LIBS = @GMODULE_NO_EXPORT_LIBS@
 GMSGFMT = @GMSGFMT@
 GMSGFMT_015 = @GMSGFMT_015@
+GNUSTL_CFLAGS = @GNUSTL_CFLAGS@
+GNUSTL_LIBS = @GNUSTL_LIBS@
 GRAPHENE_CFLAGS = @GRAPHENE_CFLAGS@
 GRAPHENE_LIBS = @GRAPHENE_LIBS@
 GREP = @GREP@
-GSETTINGS_CFLAGS = @GSETTINGS_CFLAGS@
-GSETTINGS_DISABLE_SCHEMAS_COMPILE = @GSETTINGS_DISABLE_SCHEMAS_COMPILE@
-GSETTINGS_LIBS = @GSETTINGS_LIBS@
 GSM_LIBS = @GSM_LIBS@
 GSTPB_PLUGINS_DIR = @GSTPB_PLUGINS_DIR@
 GSTPB_PREFIX = @GSTPB_PREFIX@
 GST_AGE = @GST_AGE@
+GST_ALLOCATORS_CFLAGS = @GST_ALLOCATORS_CFLAGS@
+GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
 GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
 GST_API_VERSION = @GST_API_VERSION@
 GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
@@ -382,6 +386,8 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PBUTILS_CFLAGS = @GST_PBUTILS_CFLAGS@
+GST_PBUTILS_LIBS = @GST_PBUTILS_LIBS@
 GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BAD_CFLAGS = @GST_PLUGINS_BAD_CFLAGS@
@@ -407,6 +413,8 @@
 GST_PREFIX = @GST_PREFIX@
 GST_REVISION = @GST_REVISION@
 GST_TOOLS_DIR = @GST_TOOLS_DIR@
+GST_VIDEO_CFLAGS = @GST_VIDEO_CFLAGS@
+GST_VIDEO_LIBS = @GST_VIDEO_LIBS@
 GTK3_CFLAGS = @GTK3_CFLAGS@
 GTK3_GL_CFLAGS = @GTK3_GL_CFLAGS@
 GTK3_GL_LIBS = @GTK3_GL_LIBS@
@@ -508,6 +516,7 @@
 LTLIBICONV = @LTLIBICONV@
 LTLIBINTL = @LTLIBINTL@
 LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
 MANIFEST_TOOL = @MANIFEST_TOOL@
@@ -521,8 +530,6 @@
 MODPLUG_LIBS = @MODPLUG_LIBS@
 MPEG2ENC_CFLAGS = @MPEG2ENC_CFLAGS@
 MPEG2ENC_LIBS = @MPEG2ENC_LIBS@
-MPG123_CFLAGS = @MPG123_CFLAGS@
-MPG123_LIBS = @MPG123_LIBS@
 MPLEX_CFLAGS = @MPLEX_CFLAGS@
 MPLEX_LDFLAGS = @MPLEX_LDFLAGS@
 MPLEX_LIBS = @MPLEX_LIBS@
@@ -538,6 +545,8 @@
 NETTLE_LIBS = @NETTLE_LIBS@
 NM = @NM@
 NMEDIT = @NMEDIT@
+NVENCODE_CFLAGS = @NVENCODE_CFLAGS@
+NVENCODE_LIBS = @NVENCODE_LIBS@
 OBJC = @OBJC@
 OBJCDEPMODE = @OBJCDEPMODE@
 OBJCFLAGS = @OBJCFLAGS@
@@ -595,16 +604,18 @@
 PYTHON_PLATFORM = @PYTHON_PLATFORM@
 PYTHON_PREFIX = @PYTHON_PREFIX@
 PYTHON_VERSION = @PYTHON_VERSION@
+QT_ANDROID_CFLAGS = @QT_ANDROID_CFLAGS@
+QT_ANDROID_LIBS = @QT_ANDROID_LIBS@
 QT_CFLAGS = @QT_CFLAGS@
 QT_LIBS = @QT_LIBS@
+QT_MAC_CFLAGS = @QT_MAC_CFLAGS@
+QT_MAC_LIBS = @QT_MAC_LIBS@
 QT_WAYLAND_CFLAGS = @QT_WAYLAND_CFLAGS@
 QT_WAYLAND_LIBS = @QT_WAYLAND_LIBS@
 QT_X11_CFLAGS = @QT_X11_CFLAGS@
 QT_X11_LIBS = @QT_X11_LIBS@
 RANLIB = @RANLIB@
 RCC = @RCC@
-RSVG_2_36_2_CFLAGS = @RSVG_2_36_2_CFLAGS@
-RSVG_2_36_2_LIBS = @RSVG_2_36_2_LIBS@
 RSVG_CFLAGS = @RSVG_CFLAGS@
 RSVG_LIBS = @RSVG_LIBS@
 RTMP_CFLAGS = @RTMP_CFLAGS@
@@ -656,6 +667,7 @@
 VOAACENC_LIBS = @VOAACENC_LIBS@
 VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
 VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VULKAN_LIBS = @VULKAN_LIBS@
 WARNING_CFLAGS = @WARNING_CFLAGS@
 WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
 WARNING_OBJCFLAGS = @WARNING_OBJCFLAGS@
@@ -666,6 +678,7 @@
 WAYLAND_LIBS = @WAYLAND_LIBS@
 WEBP_CFLAGS = @WEBP_CFLAGS@
 WEBP_LIBS = @WEBP_LIBS@
+WGET = @WGET@
 WILDMIDI_CFLAGS = @WILDMIDI_CFLAGS@
 WILDMIDI_LIBS = @WILDMIDI_LIBS@
 WINKS_LIBS = @WINKS_LIBS@
@@ -675,6 +688,8 @@
 X11_LIBS = @X11_LIBS@
 X265_CFLAGS = @X265_CFLAGS@
 X265_LIBS = @X265_LIBS@
+XCB_CFLAGS = @XCB_CFLAGS@
+XCB_LIBS = @XCB_LIBS@
 XCOMPOSITE_CFLAGS = @XCOMPOSITE_CFLAGS@
 XCOMPOSITE_LIBS = @XCOMPOSITE_LIBS@
 XGETTEXT = @XGETTEXT@
@@ -712,7 +727,6 @@
 docdir = @docdir@
 dvidir = @dvidir@
 exec_prefix = @exec_prefix@
-gsettingsschemadir = @gsettingsschemadir@
 host = @host@
 host_alias = @host_alias@
 host_cpu = @host_cpu@
diff --git a/gst-libs/gst/codecparsers/Makefile.am b/gst-libs/gst/codecparsers/Makefile.am
index e2498db..b180570 100644
--- a/gst-libs/gst/codecparsers/Makefile.am
+++ b/gst-libs/gst/codecparsers/Makefile.am
@@ -5,18 +5,20 @@
 	gsth265parser.c gstvp8parser.c gstvp8rangedecoder.c \
 	parserutils.c nalutils.c dboolhuff.c vp8utils.c \
 	gstjpegparser.c \
-	gstmpegvideometa.c
+	gstmpegvideometa.c \
+	gstvp9parser.c vp9utils.c
 
 libgstcodecparsers_@GST_API_VERSION@includedir = \
 	$(includedir)/gstreamer-@GST_API_VERSION@/gst/codecparsers
 
-noinst_HEADERS = parserutils.h nalutils.h dboolhuff.h vp8utils.h
+noinst_HEADERS = parserutils.h nalutils.h dboolhuff.h vp8utils.h vp9utils.h
 
 libgstcodecparsers_@GST_API_VERSION@include_HEADERS = \
 	gstmpegvideoparser.h gsth264parser.h gstvc1parser.h gstmpeg4parser.h \
 	gsth265parser.h gstvp8parser.h gstvp8rangedecoder.h \
 	gstjpegparser.h \
-	gstmpegvideometa.h
+	gstmpegvideometa.h \
+	gstvp9parser.h
 
 libgstcodecparsers_@GST_API_VERSION@_la_CFLAGS = \
 	$(GST_PLUGINS_BAD_CFLAGS) \
diff --git a/gst-libs/gst/codecparsers/Makefile.in b/gst-libs/gst/codecparsers/Makefile.in
index 7abad77..10119ba 100644
--- a/gst-libs/gst/codecparsers/Makefile.in
+++ b/gst-libs/gst/codecparsers/Makefile.in
@@ -116,16 +116,15 @@
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
 	$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
-	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gsettings.m4 \
-	$(top_srcdir)/m4/gst-fionread.m4 $(top_srcdir)/m4/gst-sdl.m4 \
-	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
-	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
-	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libgcrypt.m4 \
-	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
-	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
-	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
-	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
-	$(top_srcdir)/configure.ac
+	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gst-fionread.m4 \
+	$(top_srcdir)/m4/gst-sdl.m4 $(top_srcdir)/m4/iconv.m4 \
+	$(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \
+	$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
+	$(top_srcdir)/m4/libgcrypt.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
+	$(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 DIST_COMMON = $(srcdir)/Makefile.am \
@@ -182,7 +181,9 @@
 	libgstcodecparsers_@GST_API_VERSION@_la-dboolhuff.lo \
 	libgstcodecparsers_@GST_API_VERSION@_la-vp8utils.lo \
 	libgstcodecparsers_@GST_API_VERSION@_la-gstjpegparser.lo \
-	libgstcodecparsers_@GST_API_VERSION@_la-gstmpegvideometa.lo
+	libgstcodecparsers_@GST_API_VERSION@_la-gstmpegvideometa.lo \
+	libgstcodecparsers_@GST_API_VERSION@_la-gstvp9parser.lo \
+	libgstcodecparsers_@GST_API_VERSION@_la-vp9utils.lo
 libgstcodecparsers_@GST_API_VERSION@_la_OBJECTS =  \
 	$(am_libgstcodecparsers_@GST_API_VERSION@_la_OBJECTS)
 AM_V_lt = $(am__v_lt_@AM_V@)
@@ -293,6 +294,8 @@
 CLUTTER_X11_LIBS = @CLUTTER_X11_LIBS@
 CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
+CUDA_CFLAGS = @CUDA_CFLAGS@
+CUDA_LIBS = @CUDA_LIBS@
 CURL_CFLAGS = @CURL_CFLAGS@
 CURL_LIBS = @CURL_LIBS@
 CXX = @CXX@
@@ -330,6 +333,8 @@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
+EGL_CFLAGS = @EGL_CFLAGS@
+EGL_LIBS = @EGL_LIBS@
 EGREP = @EGREP@
 ERROR_CFLAGS = @ERROR_CFLAGS@
 ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
@@ -338,7 +343,6 @@
 EXIF_CFLAGS = @EXIF_CFLAGS@
 EXIF_LIBS = @EXIF_LIBS@
 FAAC_LIBS = @FAAC_LIBS@
-FAAD_IS_NEAAC = @FAAD_IS_NEAAC@
 FAAD_LIBS = @FAAD_LIBS@
 FFLAGS = @FFLAGS@
 FGREP = @FGREP@
@@ -357,8 +361,9 @@
 GIO_LIBS = @GIO_LIBS@
 GIO_UNIX_CFLAGS = @GIO_UNIX_CFLAGS@
 GIO_UNIX_LIBS = @GIO_UNIX_LIBS@
+GLES2_CFLAGS = @GLES2_CFLAGS@
+GLES2_LIBS = @GLES2_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
-GLIB_COMPILE_SCHEMAS = @GLIB_COMPILE_SCHEMAS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
@@ -375,16 +380,17 @@
 GMODULE_NO_EXPORT_LIBS = @GMODULE_NO_EXPORT_LIBS@
 GMSGFMT = @GMSGFMT@
 GMSGFMT_015 = @GMSGFMT_015@
+GNUSTL_CFLAGS = @GNUSTL_CFLAGS@
+GNUSTL_LIBS = @GNUSTL_LIBS@
 GRAPHENE_CFLAGS = @GRAPHENE_CFLAGS@
 GRAPHENE_LIBS = @GRAPHENE_LIBS@
 GREP = @GREP@
-GSETTINGS_CFLAGS = @GSETTINGS_CFLAGS@
-GSETTINGS_DISABLE_SCHEMAS_COMPILE = @GSETTINGS_DISABLE_SCHEMAS_COMPILE@
-GSETTINGS_LIBS = @GSETTINGS_LIBS@
 GSM_LIBS = @GSM_LIBS@
 GSTPB_PLUGINS_DIR = @GSTPB_PLUGINS_DIR@
 GSTPB_PREFIX = @GSTPB_PREFIX@
 GST_AGE = @GST_AGE@
+GST_ALLOCATORS_CFLAGS = @GST_ALLOCATORS_CFLAGS@
+GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
 GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
 GST_API_VERSION = @GST_API_VERSION@
 GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
@@ -410,6 +416,8 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PBUTILS_CFLAGS = @GST_PBUTILS_CFLAGS@
+GST_PBUTILS_LIBS = @GST_PBUTILS_LIBS@
 GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BAD_CFLAGS = @GST_PLUGINS_BAD_CFLAGS@
@@ -435,6 +443,8 @@
 GST_PREFIX = @GST_PREFIX@
 GST_REVISION = @GST_REVISION@
 GST_TOOLS_DIR = @GST_TOOLS_DIR@
+GST_VIDEO_CFLAGS = @GST_VIDEO_CFLAGS@
+GST_VIDEO_LIBS = @GST_VIDEO_LIBS@
 GTK3_CFLAGS = @GTK3_CFLAGS@
 GTK3_GL_CFLAGS = @GTK3_GL_CFLAGS@
 GTK3_GL_LIBS = @GTK3_GL_LIBS@
@@ -536,6 +546,7 @@
 LTLIBICONV = @LTLIBICONV@
 LTLIBINTL = @LTLIBINTL@
 LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
 MANIFEST_TOOL = @MANIFEST_TOOL@
@@ -549,8 +560,6 @@
 MODPLUG_LIBS = @MODPLUG_LIBS@
 MPEG2ENC_CFLAGS = @MPEG2ENC_CFLAGS@
 MPEG2ENC_LIBS = @MPEG2ENC_LIBS@
-MPG123_CFLAGS = @MPG123_CFLAGS@
-MPG123_LIBS = @MPG123_LIBS@
 MPLEX_CFLAGS = @MPLEX_CFLAGS@
 MPLEX_LDFLAGS = @MPLEX_LDFLAGS@
 MPLEX_LIBS = @MPLEX_LIBS@
@@ -566,6 +575,8 @@
 NETTLE_LIBS = @NETTLE_LIBS@
 NM = @NM@
 NMEDIT = @NMEDIT@
+NVENCODE_CFLAGS = @NVENCODE_CFLAGS@
+NVENCODE_LIBS = @NVENCODE_LIBS@
 OBJC = @OBJC@
 OBJCDEPMODE = @OBJCDEPMODE@
 OBJCFLAGS = @OBJCFLAGS@
@@ -623,16 +634,18 @@
 PYTHON_PLATFORM = @PYTHON_PLATFORM@
 PYTHON_PREFIX = @PYTHON_PREFIX@
 PYTHON_VERSION = @PYTHON_VERSION@
+QT_ANDROID_CFLAGS = @QT_ANDROID_CFLAGS@
+QT_ANDROID_LIBS = @QT_ANDROID_LIBS@
 QT_CFLAGS = @QT_CFLAGS@
 QT_LIBS = @QT_LIBS@
+QT_MAC_CFLAGS = @QT_MAC_CFLAGS@
+QT_MAC_LIBS = @QT_MAC_LIBS@
 QT_WAYLAND_CFLAGS = @QT_WAYLAND_CFLAGS@
 QT_WAYLAND_LIBS = @QT_WAYLAND_LIBS@
 QT_X11_CFLAGS = @QT_X11_CFLAGS@
 QT_X11_LIBS = @QT_X11_LIBS@
 RANLIB = @RANLIB@
 RCC = @RCC@
-RSVG_2_36_2_CFLAGS = @RSVG_2_36_2_CFLAGS@
-RSVG_2_36_2_LIBS = @RSVG_2_36_2_LIBS@
 RSVG_CFLAGS = @RSVG_CFLAGS@
 RSVG_LIBS = @RSVG_LIBS@
 RTMP_CFLAGS = @RTMP_CFLAGS@
@@ -684,6 +697,7 @@
 VOAACENC_LIBS = @VOAACENC_LIBS@
 VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
 VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VULKAN_LIBS = @VULKAN_LIBS@
 WARNING_CFLAGS = @WARNING_CFLAGS@
 WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
 WARNING_OBJCFLAGS = @WARNING_OBJCFLAGS@
@@ -694,6 +708,7 @@
 WAYLAND_LIBS = @WAYLAND_LIBS@
 WEBP_CFLAGS = @WEBP_CFLAGS@
 WEBP_LIBS = @WEBP_LIBS@
+WGET = @WGET@
 WILDMIDI_CFLAGS = @WILDMIDI_CFLAGS@
 WILDMIDI_LIBS = @WILDMIDI_LIBS@
 WINKS_LIBS = @WINKS_LIBS@
@@ -703,6 +718,8 @@
 X11_LIBS = @X11_LIBS@
 X265_CFLAGS = @X265_CFLAGS@
 X265_LIBS = @X265_LIBS@
+XCB_CFLAGS = @XCB_CFLAGS@
+XCB_LIBS = @XCB_LIBS@
 XCOMPOSITE_CFLAGS = @XCOMPOSITE_CFLAGS@
 XCOMPOSITE_LIBS = @XCOMPOSITE_LIBS@
 XGETTEXT = @XGETTEXT@
@@ -740,7 +757,6 @@
 docdir = @docdir@
 dvidir = @dvidir@
 exec_prefix = @exec_prefix@
-gsettingsschemadir = @gsettingsschemadir@
 host = @host@
 host_alias = @host_alias@
 host_cpu = @host_cpu@
@@ -786,17 +802,19 @@
 	gsth265parser.c gstvp8parser.c gstvp8rangedecoder.c \
 	parserutils.c nalutils.c dboolhuff.c vp8utils.c \
 	gstjpegparser.c \
-	gstmpegvideometa.c
+	gstmpegvideometa.c \
+	gstvp9parser.c vp9utils.c
 
 libgstcodecparsers_@GST_API_VERSION@includedir = \
 	$(includedir)/gstreamer-@GST_API_VERSION@/gst/codecparsers
 
-noinst_HEADERS = parserutils.h nalutils.h dboolhuff.h vp8utils.h
+noinst_HEADERS = parserutils.h nalutils.h dboolhuff.h vp8utils.h vp9utils.h
 libgstcodecparsers_@GST_API_VERSION@include_HEADERS = \
 	gstmpegvideoparser.h gsth264parser.h gstvc1parser.h gstmpeg4parser.h \
 	gsth265parser.h gstvp8parser.h gstvp8rangedecoder.h \
 	gstjpegparser.h \
-	gstmpegvideometa.h
+	gstmpegvideometa.h \
+	gstvp9parser.h
 
 libgstcodecparsers_@GST_API_VERSION@_la_CFLAGS = \
 	$(GST_PLUGINS_BAD_CFLAGS) \
@@ -905,9 +923,11 @@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstcodecparsers_@GST_API_VERSION@_la-gstvc1parser.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstcodecparsers_@GST_API_VERSION@_la-gstvp8parser.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstcodecparsers_@GST_API_VERSION@_la-gstvp8rangedecoder.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstcodecparsers_@GST_API_VERSION@_la-gstvp9parser.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstcodecparsers_@GST_API_VERSION@_la-nalutils.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstcodecparsers_@GST_API_VERSION@_la-parserutils.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstcodecparsers_@GST_API_VERSION@_la-vp8utils.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstcodecparsers_@GST_API_VERSION@_la-vp9utils.Plo@am__quote@
 
 .c.o:
 @am__fastdepCC_TRUE@	$(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\
@@ -1024,6 +1044,20 @@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstcodecparsers_@GST_API_VERSION@_la_CFLAGS) $(CFLAGS) -c -o libgstcodecparsers_@GST_API_VERSION@_la-gstmpegvideometa.lo `test -f 'gstmpegvideometa.c' || echo '$(srcdir)/'`gstmpegvideometa.c
 
+libgstcodecparsers_@GST_API_VERSION@_la-gstvp9parser.lo: gstvp9parser.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstcodecparsers_@GST_API_VERSION@_la_CFLAGS) $(CFLAGS) -MT libgstcodecparsers_@GST_API_VERSION@_la-gstvp9parser.lo -MD -MP -MF $(DEPDIR)/libgstcodecparsers_@GST_API_VERSION@_la-gstvp9parser.Tpo -c -o libgstcodecparsers_@GST_API_VERSION@_la-gstvp9parser.lo `test -f 'gstvp9parser.c' || echo '$(srcdir)/'`gstvp9parser.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstcodecparsers_@GST_API_VERSION@_la-gstvp9parser.Tpo $(DEPDIR)/libgstcodecparsers_@GST_API_VERSION@_la-gstvp9parser.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='gstvp9parser.c' object='libgstcodecparsers_@GST_API_VERSION@_la-gstvp9parser.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstcodecparsers_@GST_API_VERSION@_la_CFLAGS) $(CFLAGS) -c -o libgstcodecparsers_@GST_API_VERSION@_la-gstvp9parser.lo `test -f 'gstvp9parser.c' || echo '$(srcdir)/'`gstvp9parser.c
+
+libgstcodecparsers_@GST_API_VERSION@_la-vp9utils.lo: vp9utils.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstcodecparsers_@GST_API_VERSION@_la_CFLAGS) $(CFLAGS) -MT libgstcodecparsers_@GST_API_VERSION@_la-vp9utils.lo -MD -MP -MF $(DEPDIR)/libgstcodecparsers_@GST_API_VERSION@_la-vp9utils.Tpo -c -o libgstcodecparsers_@GST_API_VERSION@_la-vp9utils.lo `test -f 'vp9utils.c' || echo '$(srcdir)/'`vp9utils.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstcodecparsers_@GST_API_VERSION@_la-vp9utils.Tpo $(DEPDIR)/libgstcodecparsers_@GST_API_VERSION@_la-vp9utils.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='vp9utils.c' object='libgstcodecparsers_@GST_API_VERSION@_la-vp9utils.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstcodecparsers_@GST_API_VERSION@_la_CFLAGS) $(CFLAGS) -c -o libgstcodecparsers_@GST_API_VERSION@_la-vp9utils.lo `test -f 'vp9utils.c' || echo '$(srcdir)/'`vp9utils.c
+
 mostlyclean-libtool:
 	-rm -f *.lo
 
diff --git a/gst-libs/gst/codecparsers/dboolhuff.h b/gst-libs/gst/codecparsers/dboolhuff.h
index 5d27eaf..1ca51c1 100644
--- a/gst-libs/gst/codecparsers/dboolhuff.h
+++ b/gst-libs/gst/codecparsers/dboolhuff.h
@@ -15,6 +15,7 @@
 #include <stdint.h>
 #include <stddef.h>
 #include <limits.h>
+#include <glib.h>
 
 typedef size_t VP8_BD_VALUE;
 
@@ -42,14 +43,17 @@
     void                *decrypt_state;
 } BOOL_DECODER;
 
+G_GNUC_INTERNAL
 extern const unsigned char vp8_norm[256];
 
+G_GNUC_INTERNAL
 int vp8dx_start_decode(BOOL_DECODER *br,
                        const unsigned char *source,
                        unsigned int source_sz,
                        vp8_decrypt_cb *decrypt_cb,
                        void *decrypt_state);
 
+G_GNUC_INTERNAL
 void vp8dx_bool_decoder_fill(BOOL_DECODER *br);
 
 
diff --git a/gst-libs/gst/codecparsers/gsth264parser.c b/gst-libs/gst/codecparsers/gsth264parser.c
index 4092acb..9dc9822 100644
--- a/gst-libs/gst/codecparsers/gsth264parser.c
+++ b/gst-libs/gst/codecparsers/gsth264parser.c
@@ -428,17 +428,10 @@
 
   /* set default values for fields that might not be present in the bitstream
      and have valid defaults */
-  vui->aspect_ratio_idc = 0;
   vui->video_format = 5;
-  vui->video_full_range_flag = 0;
   vui->colour_primaries = 2;
   vui->transfer_characteristics = 2;
   vui->matrix_coefficients = 2;
-  vui->chroma_sample_loc_type_top_field = 0;
-  vui->chroma_sample_loc_type_bottom_field = 0;
-  vui->low_delay_hrd_flag = 0;
-  vui->par_n = 0;
-  vui->par_d = 0;
 
   READ_UINT8 (nr, vui->aspect_ratio_info_present_flag, 1);
   if (vui->aspect_ratio_info_present_flag) {
@@ -780,11 +773,9 @@
   default_luma_weight = 1 << p->luma_log2_weight_denom;
   for (i = 0; i < G_N_ELEMENTS (p->luma_weight_l0); i++)
     p->luma_weight_l0[i] = default_luma_weight;
-  memset (p->luma_offset_l0, 0, sizeof (p->luma_offset_l0));
   if (GST_H264_IS_B_SLICE (slice)) {
     for (i = 0; i < G_N_ELEMENTS (p->luma_weight_l1); i++)
       p->luma_weight_l1[i] = default_luma_weight;
-    memset (p->luma_offset_l1, 0, sizeof (p->luma_offset_l1));
   }
 
   if (chroma_array_type != 0) {
@@ -795,13 +786,11 @@
       p->chroma_weight_l0[i][0] = default_chroma_weight;
       p->chroma_weight_l0[i][1] = default_chroma_weight;
     }
-    memset (p->chroma_offset_l0, 0, sizeof (p->chroma_offset_l0));
     if (GST_H264_IS_B_SLICE (slice)) {
       for (i = 0; i < G_N_ELEMENTS (p->chroma_weight_l1); i++) {
         p->chroma_weight_l1[i][0] = default_chroma_weight;
         p->chroma_weight_l1[i][1] = default_chroma_weight;
       }
-      memset (p->chroma_offset_l1, 0, sizeof (p->chroma_offset_l1));
     }
   }
 
@@ -985,12 +974,6 @@
     goto error;
   }
 
-  /* default values */
-  tim->cpb_removal_delay = 0;
-  tim->dpb_output_delay = 0;
-  tim->pic_struct_present_flag = FALSE;
-  memset (tim->clock_timestamp_flag, 0, 3);
-
   if (nalparser->last_sps->vui_parameters_present_flag) {
     GstH264VUIParams *vui = &nalparser->last_sps->vui_parameters;
 
@@ -1154,7 +1137,8 @@
 
   GST_DEBUG ("parsing \"Sei message\"");
 
-  sei->payloadType = 0;
+  memset (sei, 0, sizeof (*sei));
+
   do {
     READ_UINT8 (nr, payload_type_byte, 8);
     sei->payloadType += payload_type_byte;
@@ -1294,6 +1278,8 @@
 {
   gint off1;
 
+  memset (nalu, 0, sizeof (*nalu));
+
   if (size < offset + 4) {
     GST_DEBUG ("Can't parse, buffer has too small size %" G_GSIZE_FORMAT
         ", offset %u", size, offset);
@@ -1414,6 +1400,8 @@
 {
   GstBitReader br;
 
+  memset (nalu, 0, sizeof (*nalu));
+
   if (size < offset + nal_length_size) {
     GST_DEBUG ("Can't parse, buffer has too small size %" G_GSIZE_FORMAT
         ", offset %u", size, offset);
@@ -1512,22 +1500,14 @@
   guint subhc[] = { 1, 2, 1, 1 };
   GstH264VUIParams *vui = NULL;
 
+  memset (sps, 0, sizeof (*sps));
+
   /* set default values for fields that might not be present in the bitstream
      and have valid defaults */
   sps->extension_type = GST_H264_NAL_EXTENSION_NONE;
   sps->chroma_format_idc = 1;
-  sps->separate_colour_plane_flag = 0;
-  sps->bit_depth_luma_minus8 = 0;
-  sps->bit_depth_chroma_minus8 = 0;
   memset (sps->scaling_lists_4x4, 16, 96);
   memset (sps->scaling_lists_8x8, 16, 384);
-  memset (&sps->vui_parameters, 0, sizeof (sps->vui_parameters));
-  sps->mb_adaptive_frame_field_flag = 0;
-  sps->frame_crop_left_offset = 0;
-  sps->frame_crop_right_offset = 0;
-  sps->frame_crop_top_offset = 0;
-  sps->frame_crop_bottom_offset = 0;
-  sps->delta_pic_order_always_zero_flag = 0;
 
   READ_UINT8 (nr, sps->profile_idc, 8);
   READ_UINT8 (nr, sps->constraint_set0_flag, 1);
@@ -1616,9 +1596,7 @@
   }
 
   /* calculate ChromaArrayType */
-  if (sps->separate_colour_plane_flag)
-    sps->chroma_array_type = 0;
-  else
+  if (!sps->separate_colour_plane_flag)
     sps->chroma_array_type = sps->chroma_format_idc;
 
   /* Calculate  width and height */
@@ -1936,6 +1914,8 @@
   nal_reader_init (&nr, nalu->data + nalu->offset + nalu->header_bytes,
       nalu->size - nalu->header_bytes);
 
+  memset (pps, 0, sizeof (*pps));
+
   READ_UE_MAX (&nr, pps->id, GST_H264_MAX_PPS_COUNT - 1);
   READ_UE_MAX (&nr, sps_id, GST_H264_MAX_SPS_COUNT - 1);
 
@@ -1951,8 +1931,6 @@
 
   /* set default values for fields that might not be present in the bitstream
      and have valid defaults */
-  pps->slice_group_id = NULL;
-  pps->transform_8x8_mode_flag = 0;
   memcpy (&pps->scaling_lists_4x4, &sps->scaling_lists_4x4, 96);
   memcpy (&pps->scaling_lists_8x8, &sps->scaling_lists_8x8, 384);
 
@@ -2113,12 +2091,13 @@
   GstH264PPS *pps;
   GstH264SPS *sps;
 
+  memset (slice, 0, sizeof (*slice));
+
   if (!nalu->size) {
     GST_DEBUG ("Invalid Nal Unit");
     return GST_H264_PARSER_ERROR;
   }
 
-
   nal_reader_init (&nr, nalu->data + nalu->offset + nalu->header_bytes,
       nalu->size - nalu->header_bytes);
 
@@ -2153,17 +2132,8 @@
 
   /* set default values for fields that might not be present in the bitstream
      and have valid defaults */
-  slice->field_pic_flag = 0;
-  slice->bottom_field_flag = 0;
-  slice->delta_pic_order_cnt_bottom = 0;
-  slice->delta_pic_order_cnt[0] = 0;
-  slice->delta_pic_order_cnt[1] = 0;
-  slice->redundant_pic_cnt = 0;
   slice->num_ref_idx_l0_active_minus1 = pps->num_ref_idx_l0_active_minus1;
   slice->num_ref_idx_l1_active_minus1 = pps->num_ref_idx_l1_active_minus1;
-  slice->disable_deblocking_filter_idc = 0;
-  slice->slice_alpha_c0_offset_div2 = 0;
-  slice->slice_beta_offset_div2 = 0;
 
   if (sps->separate_colour_plane_flag)
     READ_UINT8 (&nr, slice->colour_plane_id, 2);
diff --git a/gst-libs/gst/codecparsers/gsth265parser.c b/gst-libs/gst/codecparsers/gsth265parser.c
index 77a4610..52a1fc2 100644
--- a/gst-libs/gst/codecparsers/gsth265parser.c
+++ b/gst-libs/gst/codecparsers/gsth265parser.c
@@ -266,11 +266,6 @@
   guint i, j;
   GST_DEBUG ("parsing \"ProfileTierLevel parameters\"");
 
-  /* set default values for fields that might not be present in the
-   * bitstream and have valid defaults */
-  for (i = 0; i < maxNumSubLayersMinus1; i++)
-    ptl->sub_layer_tier_flag[i] = 0;
-
   READ_UINT8 (nr, ptl->profile_space, 2);
   READ_UINT8 (nr, ptl->tier_flag, 1);
   READ_UINT8 (nr, ptl->profile_idc, 5);
@@ -336,11 +331,6 @@
 
   GST_DEBUG ("parsing \"SubLayer HRD Parameters\"");
 
-  /* set default values for fields that might not be present in the bitstream
-     and have valid defaults */
-  for (i = 0; i <= CpbCnt; i++)
-    sub_hrd->cbr_flag[i] = 0;
-
   for (i = 0; i <= CpbCnt; i++) {
     READ_UE_MAX (nr, sub_hrd->bit_rate_value_minus1[i], G_MAXUINT32 - 1);
     READ_UE_MAX (nr, sub_hrd->cpb_size_value_minus1[i], G_MAXUINT32 - 1);
@@ -370,16 +360,9 @@
 
   /* set default values for fields that might not be present in the bitstream
      and have valid defaults */
-  hrd->sub_pic_hrd_params_present_flag = 0;
-  hrd->sub_pic_cpb_params_in_pic_timing_sei_flag = 0;
   hrd->initial_cpb_removal_delay_length_minus1 = 23;
   hrd->au_cpb_removal_delay_length_minus1 = 23;
   hrd->dpb_output_delay_length_minus1 = 23;
-  for (i = 0; i <= maxNumSubLayersMinus1; i++) {
-    hrd->fixed_pic_rate_general_flag[i] = 0;
-    hrd->low_delay_hrd_flag[i] = 0;
-    hrd->cpb_cnt_minus1[i] = 0;
-  }
 
   if (commonInfPresentFlag) {
     READ_UINT8 (nr, hrd->nal_hrd_parameters_present_flag, 1);
@@ -454,35 +437,19 @@
 
   /* set default values for fields that might not be present in the bitstream
      and have valid defaults */
-  vui->aspect_ratio_idc = 0;
   vui->video_format = 5;
-  vui->video_full_range_flag = 0;
   vui->colour_primaries = 2;
   vui->transfer_characteristics = 2;
   vui->matrix_coefficients = 2;
-  vui->chroma_sample_loc_type_top_field = 0;
-  vui->chroma_sample_loc_type_bottom_field = 0;
-  vui->neutral_chroma_indication_flag = 0;
-  vui->field_seq_flag = 0;
-  vui->def_disp_win_left_offset = 0;
-  vui->def_disp_win_right_offset = 0;
-  vui->def_disp_win_top_offset = 0;
-  vui->def_disp_win_bottom_offset = 0;
-  vui->tiles_fixed_structure_flag = 0;
   vui->motion_vectors_over_pic_boundaries_flag = 1;
-  vui->min_spatial_segmentation_idc = 0;
   vui->max_bytes_per_pic_denom = 2;
   vui->max_bits_per_min_cu_denom = 1;
   vui->log2_max_mv_length_horizontal = 15;
   vui->log2_max_mv_length_vertical = 15;
-  vui->par_n = 0;
-  vui->par_d = 0;
 
   if (sps && sps->profile_tier_level.progressive_source_flag
       && sps->profile_tier_level.interlaced_source_flag)
     vui->frame_field_info_present_flag = 1;
-  else
-    vui->frame_field_info_present_flag = 0;
 
   READ_UINT8 (nr, vui->aspect_ratio_info_present_flag, 1);
   if (vui->aspect_ratio_info_present_flag) {
@@ -755,8 +722,6 @@
 
   /* set default values for fields that might not be present in the bitstream
      and have valid defaults */
-  stRPS->inter_ref_pic_set_prediction_flag = 0;
-  stRPS->delta_idx_minus1 = 0;
   for (j = 0; j < 16; j++)
     use_delta_flag[j] = 1;
 
@@ -892,14 +857,6 @@
   GstH265RefPicListModification *rpl_mod = &slice->ref_pic_list_modification;
   const guint n = ceil_log2 (NumPocTotalCurr);
 
-  /* set default values */
-  rpl_mod->ref_pic_list_modification_flag_l0 = 0;
-  rpl_mod->ref_pic_list_modification_flag_l1 = 0;
-  for (i = 0; i < slice->num_ref_idx_l0_active_minus1; i++)
-    rpl_mod->list_entry_l0[i] = 0;
-  for (i = 0; i <= slice->num_ref_idx_l1_active_minus1; i++)
-    rpl_mod->list_entry_l1[i] = 0;
-
   READ_UINT8 (nr, rpl_mod->ref_pic_list_modification_flag_l0, 1);
 
   if (rpl_mod->ref_pic_list_modification_flag_l0) {
@@ -938,19 +895,6 @@
 
   READ_UE_MAX (nr, p->luma_log2_weight_denom, 7);
 
-  /* set default values */
-  for (i = 0; i < G_N_ELEMENTS (p->chroma_weight_l0_flag); i++) {
-    p->chroma_weight_l0_flag[i] = 0;
-    p->luma_offset_l0[i] = 0;
-  }
-
-  if (GST_H265_IS_B_SLICE (slice)) {
-    for (i = 0; i < G_N_ELEMENTS (p->luma_weight_l1_flag); i++) {
-      p->chroma_weight_l1_flag[i] = 0;
-      p->luma_offset_l1[i] = 0;
-    }
-  }
-
   if (sps->chroma_format_idc != 0) {
     READ_SE_ALLOWED (nr, p->delta_chroma_log2_weight_denom,
         (0 - p->luma_log2_weight_denom), (7 - p->luma_log2_weight_denom));
@@ -1022,11 +966,6 @@
   }
   per->sps = sps;
 
-  /* set default values if not present */
-  per->irap_cpb_params_present_flag = 0;
-  per->cpb_delay_offset = 0;
-  per->dpb_delay_offset = 0;
-
   if (sps->vui_parameters_present_flag) {
     GstH265VUIParams *vui = &sps->vui_params;
     GstH265HRDParams *hrd = &vui->hrd_params;
@@ -1096,7 +1035,6 @@
   profile_tier_level = &parser->last_sps->profile_tier_level;
 
   /* set default values */
-  tim->pic_struct = 0;
   if (!profile_tier_level->progressive_source_flag
       && profile_tier_level->interlaced_source_flag)
     tim->source_scan_type = 0;
@@ -1220,6 +1158,8 @@
 {
   gint off1;
 
+  memset (nalu, 0, sizeof (*nalu));
+
   if (size < offset + 4) {
     GST_DEBUG ("Can't parse, buffer has too small size %" G_GSIZE_FORMAT
         ", offset %u", size, offset);
@@ -1335,6 +1275,8 @@
 {
   GstBitReader br;
 
+  memset (nalu, 0, sizeof (*nalu));
+
   if (size < offset + nal_length_size) {
     GST_DEBUG ("Can't parse, buffer has too small size %" G_GSIZE_FORMAT
         ", offset %u", size, offset);
@@ -1450,8 +1392,8 @@
   nal_reader_init (&nr, nalu->data + nalu->offset + nalu->header_bytes,
       nalu->size - nalu->header_bytes);
 
-  memset (&vps->profile_tier_level, 0, sizeof (vps->profile_tier_level));
-  memset (&vps->hrd_params, 0, sizeof (vps->hrd_params));
+  memset (vps, 0, sizeof (*vps));
+
   vps->cprms_present_flag = 1;
 
   READ_UINT8 (&nr, vps->id, 4);
@@ -1594,17 +1536,7 @@
   nal_reader_init (&nr, nalu->data + nalu->offset + nalu->header_bytes,
       nalu->size - nalu->header_bytes);
 
-  /* set default values for fields that might not be present in the bitstream
-     and have valid defaults */
-  memset (&sps->profile_tier_level, 0, sizeof (sps->profile_tier_level));
-  memset (sps->short_term_ref_pic_set, 0, sizeof (sps->short_term_ref_pic_set));
-  sps->scaling_list_data_present_flag = 0;
-  sps->separate_colour_plane_flag = 0;
-  sps->conf_win_left_offset = 0;
-  sps->conf_win_right_offset = 0;
-  sps->conf_win_top_offset = 0;
-  sps->conf_win_bottom_offset = 0;
-  sps->pcm_loop_filter_disabled_flag = 0;
+  memset (sps, 0, sizeof (*sps));
 
   READ_UINT8 (&nr, vps_id, 4);
   vps = gst_h265_parser_get_vps (parser, vps_id);
@@ -1722,9 +1654,7 @@
   READ_UINT8 (&nr, sps->sps_extension_flag, 1);
 
   /* calculate ChromaArrayType */
-  if (sps->separate_colour_plane_flag)
-    sps->chroma_array_type = 0;
-  else
+  if (!sps->separate_colour_plane_flag)
     sps->chroma_array_type = sps->chroma_format_idc;
 
   /* Calculate  width and height */
@@ -1804,6 +1734,8 @@
   nal_reader_init (&nr, nalu->data + nalu->offset + nalu->header_bytes,
       nalu->size - nalu->header_bytes);
 
+  memset (pps, 0, sizeof (*pps));
+
   READ_UE_MAX (&nr, pps->id, GST_H265_MAX_PPS_COUNT - 1);
   READ_UE_MAX (&nr, sps_id, GST_H265_MAX_SPS_COUNT - 1);
 
@@ -1826,15 +1758,8 @@
 
   /* set default values for fields that might not be present in the bitstream
      and have valid defaults */
-  pps->diff_cu_qp_delta_depth = 0;
-  pps->num_tile_columns_minus1 = 0;
-  pps->num_tile_rows_minus1 = 0;
   pps->uniform_spacing_flag = 1;
   pps->loop_filter_across_tiles_enabled_flag = 1;
-  pps->deblocking_filter_override_enabled_flag = 0;
-  pps->deblocking_filter_disabled_flag = 0;
-  pps->beta_offset_div2 = 0;
-  pps->tc_offset_div2 = 0;
 
   READ_UINT8 (&nr, pps->dependent_slice_segments_enabled_flag, 1);
   READ_UINT8 (&nr, pps->output_flag_present_flag, 1);
@@ -1990,6 +1915,8 @@
   guint32 PicSizeInCtbsY;
   gint NumPocTotalCurr = 0;
 
+  memset (slice, 0, sizeof (*slice));
+
   if (!nalu->size) {
     GST_DEBUG ("Invalid Nal Unit");
     return GST_H265_PARSER_ERROR;
@@ -2026,32 +1953,13 @@
   PicSizeInCtbsY = pps->PicWidthInCtbsY * pps->PicHeightInCtbsY;
   /* set default values for fields that might not be present in the bitstream
    * and have valid defaults */
-  slice->dependent_slice_segment_flag = 0;
-  slice->segment_address = 0;
   slice->pic_output_flag = 1;
-  slice->pic_order_cnt_lsb = 0;
-  slice->short_term_ref_pic_set_idx = 0;
-  slice->num_long_term_sps = 0;
-  slice->num_long_term_pics = 0;
-  for (i = 0; i < 16; i++) {
-    slice->lt_idx_sps[i] = 0;
-    slice->delta_poc_msb_cycle_lt[i] = 0;
-  }
-  slice->temporal_mvp_enabled_flag = 0;
-  slice->sao_luma_flag = 0;
-  slice->sao_chroma_flag = 0;
-  slice->cabac_init_flag = 0;
   slice->collocated_from_l0_flag = 1;
-  slice->cb_qp_offset = 0;
-  slice->cr_qp_offset = 0;
-  slice->deblocking_filter_override_flag = 0;
-  slice->deblocking_filter_disabled_flag = 0;
+  slice->deblocking_filter_disabled_flag = pps->deblocking_filter_disabled_flag;
   slice->beta_offset_div2 = pps->beta_offset_div2;
   slice->tc_offset_div2 = pps->tc_offset_div2;
   slice->loop_filter_across_slices_enabled_flag =
       pps->loop_filter_across_slices_enabled_flag;
-  slice->num_entry_point_offsets = 0;
-  slice->entry_point_offset_minus1 = NULL;
 
   if (!slice->first_slice_segment_in_pic_flag) {
     const guint n = ceil_log2 (PicSizeInCtbsY);
@@ -2303,7 +2211,8 @@
 
   GST_DEBUG ("parsing \"Sei message\"");
 
-  sei->payloadType = 0;
+  memset (sei, 0, sizeof (*sei));
+
   do {
     READ_UINT8 (nr, payload_type_byte, 8);
     sei->payloadType += payload_type_byte;
diff --git a/gst-libs/gst/codecparsers/gstmpeg4parser.c b/gst-libs/gst/codecparsers/gstmpeg4parser.c
index ce156c5..b23fc87 100644
--- a/gst-libs/gst/codecparsers/gstmpeg4parser.c
+++ b/gst-libs/gst/codecparsers/gstmpeg4parser.c
@@ -481,8 +481,11 @@
   packet->type = (GstMpeg4StartCode) (data[off1 + 3]);
 
 find_end:
-  off2 = gst_byte_reader_masked_scan_uint32 (&br, 0xffffff00, 0x00000100,
-      off1 + 4, size - off1 - 4);
+  if (off1 < size - 4)
+    off2 = gst_byte_reader_masked_scan_uint32 (&br, 0xffffff00, 0x00000100,
+        off1 + 4, size - off1 - 4);
+  else
+    off2 = -1;
 
   if (off2 == -1) {
     GST_DEBUG ("Packet start %d, No end found", off1 + 4);
diff --git a/gst-libs/gst/codecparsers/gstmpegvideoparser.c b/gst-libs/gst/codecparsers/gstmpegvideoparser.c
index 6384105..debafa0 100644
--- a/gst-libs/gst/codecparsers/gstmpegvideoparser.c
+++ b/gst-libs/gst/codecparsers/gstmpegvideoparser.c
@@ -408,7 +408,8 @@
   }
 
   /* skip profile and level escape bit */
-  gst_bit_reader_skip_unchecked (&br, 1);
+  seqext->profile_level_escape_bit =
+      gst_bit_reader_get_bits_uint8_unchecked (&br, 1);
 
   seqext->profile = gst_bit_reader_get_bits_uint8_unchecked (&br, 3);
   seqext->level = gst_bit_reader_get_bits_uint8_unchecked (&br, 4);
diff --git a/gst-libs/gst/codecparsers/gstmpegvideoparser.h b/gst-libs/gst/codecparsers/gstmpegvideoparser.h
index 35f7c6f..1298ed7 100644
--- a/gst-libs/gst/codecparsers/gstmpegvideoparser.h
+++ b/gst-libs/gst/codecparsers/gstmpegvideoparser.h
@@ -249,6 +249,8 @@
  * otherwise
  * @fps_n_ext: Framerate nominator code
  * @fps_d_ext: Framerate denominator code
+ * @profile_level_escape_bit: Escape bit. If set, the meaning of the
+ *    @profile and @level fields is different.
  *
  * The Mpeg2 Video Sequence Extension structure.
  **/
@@ -269,6 +271,8 @@
   guint8 low_delay;
   guint8 fps_n_ext, fps_d_ext;
 
+  /* Additional information */
+  guint8 profile_level_escape_bit;
 };
 
 /**
diff --git a/gst-libs/gst/codecparsers/gstvp9parser.c b/gst-libs/gst/codecparsers/gstvp9parser.c
new file mode 100644
index 0000000..e518dee
--- /dev/null
+++ b/gst-libs/gst/codecparsers/gstvp9parser.c
@@ -0,0 +1,819 @@
+/* gstvp9parser.c
+ *
+ *  Copyright (C) 2013-2014 Intel Corporation
+ *  Copyright (C) 2015 Intel Corporation
+ *    Author: XuGuangxin<Guangxin.Xu@intel.com>
+ *    Author: Sreerenj Balachandran<sreerenj.balachandran@intel.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+/**
+ * SECTION:gstvp9parser
+ * @short_description: Convenience library for parsing vp9 video bitstream.
+ *
+ * For more details about the structures, you can refer to the
+ * specifications:
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <string.h>
+#include <stdlib.h>
+#include <gst/base/gstbitreader.h>
+#include "vp9utils.h"
+#include "gstvp9parser.h"
+
+#define MIN_TILE_WIDTH_B64 4
+#define MAX_TILE_WIDTH_B64 64
+
+/* order of sb64, where sb64 = 64x64 */
+#define ALIGN_SB64(w) ((w + 63) >> 6)
+
+GST_DEBUG_CATEGORY (gst_vp9_parser_debug);
+#define GST_CAT_DEFAULT gst_vp9_parser_debug
+
+static gboolean initialized = FALSE;
+#define INITIALIZE_DEBUG_CATEGORY \
+  if (!initialized) { \
+    GST_DEBUG_CATEGORY_INIT (gst_vp9_parser_debug, "codecparsers_vp9", 0, \
+        "vp9 parser library"); \
+    initialized = TRUE; \
+  }
+
+#define gst_vp9_read_bit(br) gst_bit_reader_get_bits_uint8_unchecked(br, 1)
+#define gst_vp9_read_bits(br, bits) gst_bit_reader_get_bits_uint32_unchecked(br, bits)
+
+#define GST_VP9_PARSER_GET_PRIVATE(parser)  ((GstVp9ParserPrivate *)(parser->priv))
+
+typedef struct _ReferenceSize
+{
+  guint32 width;
+  guint32 height;
+} ReferenceSize;
+
+typedef struct
+{
+  /* for loop filters */
+  gint8 ref_deltas[GST_VP9_MAX_REF_LF_DELTAS];
+  gint8 mode_deltas[GST_VP9_MAX_MODE_LF_DELTAS];
+
+  guint8 segmentation_abs_delta;
+  GstVp9SegmentationInfoData segmentation[GST_VP9_MAX_SEGMENTS];
+
+  ReferenceSize reference[GST_VP9_REF_FRAMES];
+} GstVp9ParserPrivate;
+
+static gint32
+gst_vp9_read_signed_bits (GstBitReader * br, int bits)
+{
+  const gint32 value = gst_vp9_read_bits (br, bits);
+  return gst_vp9_read_bit (br) ? -value : value;
+}
+
+static gboolean
+verify_frame_marker (GstBitReader * br)
+{
+  guint8 frame_marker = gst_vp9_read_bits (br, 2);
+  if (frame_marker != GST_VP9_FRAME_MARKER) {
+    GST_ERROR ("Invalid VP9 Frame Marker !");
+    return FALSE;
+  }
+  return TRUE;
+}
+
+static gboolean
+verify_sync_code (GstBitReader * const br)
+{
+  return (gst_vp9_read_bits (br, 24) == GST_VP9_SYNC_CODE);
+}
+
+static gboolean
+parse_bitdepth_colorspace_sampling (GstBitReader * const br,
+    GstVp9FrameHdr * frame_hdr)
+{
+  if (frame_hdr->profile > GST_VP9_PROFILE_1)
+    frame_hdr->bit_depth =
+        gst_vp9_read_bit (br) ? GST_VP9_BIT_DEPTH_12 : GST_VP9_BIT_DEPTH_10;
+  else
+    frame_hdr->bit_depth = GST_VP9_BIT_DEPTH_8;
+
+  frame_hdr->color_space = gst_vp9_read_bits (br, 3);
+  if (frame_hdr->color_space != GST_VP9_CS_SRGB) {
+    frame_hdr->color_range = gst_vp9_read_bit (br);
+
+    if (frame_hdr->profile == GST_VP9_PROFILE_1
+        || frame_hdr->profile == GST_VP9_PROFILE_3) {
+
+      frame_hdr->subsampling_x = gst_vp9_read_bit (br);
+      frame_hdr->subsampling_y = gst_vp9_read_bit (br);
+
+      if (frame_hdr->subsampling_x == 1 && frame_hdr->subsampling_y == 1) {
+        GST_ERROR
+            ("4:2:0 subsampling is not supported in profile_1 or profile_3");
+        goto error;
+      }
+
+      if (gst_vp9_read_bit (br)) {
+        GST_ERROR ("Reserved bit set!");
+        goto error;
+      }
+    } else {
+      frame_hdr->subsampling_y = frame_hdr->subsampling_x = 1;
+    }
+  } else {
+    frame_hdr->color_range = GST_VP9_CR_FULL;
+
+    if (frame_hdr->profile == GST_VP9_PROFILE_1
+        || frame_hdr->profile == GST_VP9_PROFILE_3) {
+      if (gst_vp9_read_bit (br)) {
+        GST_ERROR ("Reserved bit set!");
+        goto error;
+      }
+    } else {
+      GST_ERROR
+          ("4:4:4 subsampling is not supported in profile_0 and profile_2");
+      goto error;
+    }
+  }
+  return TRUE;
+
+error:
+  return FALSE;
+}
+
+static guint
+parse_profile (GstBitReader * br)
+{
+  guint8 profile = gst_vp9_read_bit (br);
+  profile |= gst_vp9_read_bit (br) << 1;
+  if (profile > 2)
+    profile += gst_vp9_read_bit (br);
+  return profile;
+}
+
+static void
+parse_frame_size (GstBitReader * br, guint32 * width, guint32 * height)
+{
+  const guint32 w = gst_vp9_read_bits (br, 16) + 1;
+  const guint32 h = gst_vp9_read_bits (br, 16) + 1;
+  *width = w;
+  *height = h;
+}
+
+static void
+parse_display_frame_size (GstBitReader * br, GstVp9FrameHdr * frame_hdr)
+{
+  frame_hdr->display_size_enabled = gst_vp9_read_bit (br);
+  if (frame_hdr->display_size_enabled)
+    parse_frame_size (br, &frame_hdr->display_width,
+        &frame_hdr->display_height);
+}
+
+static void
+parse_frame_size_from_refs (const GstVp9Parser * parser,
+    GstVp9FrameHdr * frame_hdr, GstBitReader * br)
+{
+  gboolean found = FALSE;
+  int i;
+  GstVp9ParserPrivate *priv = GST_VP9_PARSER_GET_PRIVATE (parser);
+
+  for (i = 0; i < GST_VP9_REFS_PER_FRAME; i++) {
+    found = gst_vp9_read_bit (br);
+
+    if (found) {
+      guint8 idx = frame_hdr->ref_frame_indices[i];
+      frame_hdr->width = priv->reference[idx].width;
+      frame_hdr->height = priv->reference[idx].height;
+      break;
+    }
+  }
+  if (!found)
+    parse_frame_size (br, &frame_hdr->width, &frame_hdr->height);
+}
+
+static GstVp9InterpolationFilter
+parse_interp_filter (GstBitReader * br)
+{
+  static const GstVp9InterpolationFilter filter_map[] = {
+    GST_VP9_INTERPOLATION_FILTER_EIGHTTAP_SMOOTH,
+    GST_VP9_INTERPOLATION_FILTER_EIGHTTAP,
+    GST_VP9_INTERPOLATION_FILTER_EIGHTTAP_SHARP,
+    GST_VP9_INTERPOLATION_FILTER_BILINEAR
+  };
+
+  return gst_vp9_read_bit (br) ? GST_VP9_INTERPOLATION_FILTER_SWITCHABLE :
+      filter_map[gst_vp9_read_bits (br, 2)];
+}
+
+static void
+parse_loopfilter (GstVp9LoopFilter * lf, GstBitReader * br)
+{
+  lf->filter_level = gst_vp9_read_bits (br, 6);
+  lf->sharpness_level = gst_vp9_read_bits (br, 3);
+
+  lf->mode_ref_delta_update = 0;
+
+  lf->mode_ref_delta_enabled = gst_vp9_read_bit (br);
+  if (lf->mode_ref_delta_enabled) {
+    lf->mode_ref_delta_update = gst_vp9_read_bit (br);
+    if (lf->mode_ref_delta_update) {
+      int i;
+      for (i = 0; i < GST_VP9_MAX_REF_LF_DELTAS; i++) {
+        lf->update_ref_deltas[i] = gst_vp9_read_bit (br);
+        if (lf->update_ref_deltas[i])
+          lf->ref_deltas[i] = gst_vp9_read_signed_bits (br, 6);
+      }
+
+      for (i = 0; i < GST_VP9_MAX_MODE_LF_DELTAS; i++) {
+        lf->update_mode_deltas[i] = gst_vp9_read_bit (br);
+        if (lf->update_mode_deltas[i])
+          lf->mode_deltas[i] = gst_vp9_read_signed_bits (br, 6);
+      }
+    }
+  }
+}
+
+static gint8
+parse_delta_q (GstBitReader * br)
+{
+  return gst_vp9_read_bit (br) ? gst_vp9_read_signed_bits (br, 4) : 0;
+}
+
+static void
+parse_quantization (GstVp9QuantIndices * quant_indices, GstBitReader * br)
+{
+  quant_indices->y_ac_qi = gst_vp9_read_bits (br, QINDEX_BITS);
+  quant_indices->y_dc_delta = parse_delta_q (br);
+  quant_indices->uv_dc_delta = parse_delta_q (br);
+  quant_indices->uv_ac_delta = parse_delta_q (br);
+}
+
+static void
+parse_segmentation (GstVp9SegmentationInfo * seg, GstBitReader * br)
+{
+  int i;
+
+  seg->update_map = FALSE;
+  seg->update_data = FALSE;
+
+  seg->enabled = gst_vp9_read_bit (br);
+  if (!seg->enabled)
+    return;
+
+  /* Segmentation map update */
+  seg->update_map = gst_vp9_read_bit (br);
+  if (seg->update_map) {
+    for (i = 0; i < GST_VP9_SEG_TREE_PROBS; i++) {
+      seg->update_tree_probs[i] = gst_vp9_read_bit (br);
+      seg->tree_probs[i] = seg->update_tree_probs[i] ?
+          gst_vp9_read_bits (br, 8) : GST_VP9_MAX_PROB;
+    }
+
+    seg->temporal_update = gst_vp9_read_bit (br);
+    if (seg->temporal_update) {
+      for (i = 0; i < GST_VP9_PREDICTION_PROBS; i++) {
+        seg->update_pred_probs[i] = gst_vp9_read_bit (br);
+        seg->pred_probs[i] = seg->update_pred_probs[i] ?
+            gst_vp9_read_bits (br, 8) : GST_VP9_MAX_PROB;
+      }
+    } else {
+      for (i = 0; i < GST_VP9_PREDICTION_PROBS; i++)
+        seg->pred_probs[i] = GST_VP9_MAX_PROB;
+    }
+  }
+
+  /* Segmentation data update */
+  seg->update_data = gst_vp9_read_bit (br);
+
+  if (seg->update_data) {
+    /* clear all features */
+    memset (seg->data, 0, sizeof (seg->data));
+
+    seg->abs_delta = gst_vp9_read_bit (br);
+
+    for (i = 0; i < GST_VP9_MAX_SEGMENTS; i++) {
+      GstVp9SegmentationInfoData *seg_data = seg->data + i;
+      guint8 data;
+
+      /* SEG_LVL_ALT_Q */
+      seg_data->alternate_quantizer_enabled = gst_vp9_read_bit (br);
+      if (seg_data->alternate_quantizer_enabled) {
+        data = gst_vp9_read_bits (br, 8);
+        seg_data->alternate_quantizer = gst_vp9_read_bit (br) ? -data : data;
+      }
+
+      /* SEG_LVL_ALT_LF */
+      seg_data->alternate_loop_filter_enabled = gst_vp9_read_bit (br);
+      if (seg_data->alternate_loop_filter_enabled) {
+        data = gst_vp9_read_bits (br, 6);
+        seg_data->alternate_loop_filter = gst_vp9_read_bit (br) ? -data : data;
+      }
+
+      /* SEG_LVL_REF_FRAME */
+      seg_data->reference_frame_enabled = gst_vp9_read_bit (br);
+      if (seg_data->reference_frame_enabled) {
+        seg_data->reference_frame = gst_vp9_read_bits (br, 2);
+      }
+
+      seg_data->reference_skip = gst_vp9_read_bit (br);
+    }
+  }
+}
+
+static guint32
+get_max_lb_tile_cols (guint32 sb_cols)
+{
+  gint max_log2 = 1;
+  while ((sb_cols >> max_log2) >= MIN_TILE_WIDTH_B64)
+    ++max_log2;
+  return max_log2 - 1;
+}
+
+static guint32
+get_min_lb_tile_cols (guint32 sb_cols)
+{
+  gint min_log2 = 0;
+  while ((MAX_TILE_WIDTH_B64 << min_log2) < sb_cols)
+    ++min_log2;
+  return min_log2;
+}
+
+static gboolean
+parse_tile_info (GstVp9FrameHdr * frame_hdr, GstBitReader * br)
+{
+  guint32 max_ones;
+  const guint32 sb_cols = ALIGN_SB64 (frame_hdr->width);
+  guint32 min_lb_tile_cols = get_min_lb_tile_cols (sb_cols);
+  guint32 max_lb_tile_cols = get_max_lb_tile_cols (sb_cols);
+
+  g_assert (min_lb_tile_cols <= max_lb_tile_cols);
+  max_ones = max_lb_tile_cols - min_lb_tile_cols;
+
+  /* columns */
+  frame_hdr->log2_tile_columns = min_lb_tile_cols;
+  while (max_ones-- && gst_vp9_read_bit (br))
+    frame_hdr->log2_tile_columns++;
+
+  if (frame_hdr->log2_tile_columns > 6) {
+    GST_ERROR ("Invalid number of tile columns..!");
+    return FALSE;
+  }
+
+  /* row */
+  frame_hdr->log2_tile_rows = gst_vp9_read_bit (br);
+  if (frame_hdr->log2_tile_rows)
+    frame_hdr->log2_tile_rows += gst_vp9_read_bit (br);
+
+  return TRUE;
+}
+
+static void
+loop_filter_update (GstVp9Parser * parser, const GstVp9LoopFilter * lf)
+{
+  GstVp9ParserPrivate *priv = GST_VP9_PARSER_GET_PRIVATE (parser);
+  int i;
+
+  for (i = 0; i < GST_VP9_MAX_REF_LF_DELTAS; i++) {
+    if (lf->update_ref_deltas[i])
+      priv->ref_deltas[i] = lf->ref_deltas[i];
+  }
+
+  for (i = 0; i < GST_VP9_MAX_MODE_LF_DELTAS; i++) {
+    if (lf->update_mode_deltas[i])
+      priv->mode_deltas[i] = lf->mode_deltas[i];
+  }
+}
+
+static guint8
+seg_get_base_qindex (const GstVp9Parser * parser,
+    const GstVp9FrameHdr * frame_hdr, int segid)
+{
+  int seg_base = frame_hdr->quant_indices.y_ac_qi;
+  GstVp9ParserPrivate *priv = GST_VP9_PARSER_GET_PRIVATE (parser);
+  const GstVp9SegmentationInfoData *seg = priv->segmentation + segid;
+  /* DEBUG("id = %d, seg_base = %d, seg enable = %d, alt eanble = %d, abs = %d, alt= %d\n",segid,
+     seg_base, frame_hdr->segmentation.enabled, seg->alternate_quantizer_enabled, priv->segmentation_abs_delta,  seg->alternate_quantizer);
+   */
+  if (frame_hdr->segmentation.enabled && seg->alternate_quantizer_enabled) {
+    if (priv->segmentation_abs_delta)
+      seg_base = seg->alternate_quantizer;
+    else
+      seg_base += seg->alternate_quantizer;
+  }
+  return CLAMP (seg_base, 0, MAXQ);
+}
+
+static guint8
+seg_get_filter_level (const GstVp9Parser * parser,
+    const GstVp9FrameHdr * frame_hdr, int segid)
+{
+  int seg_filter = frame_hdr->loopfilter.filter_level;
+  GstVp9ParserPrivate *priv = GST_VP9_PARSER_GET_PRIVATE (parser);
+  const GstVp9SegmentationInfoData *seg = priv->segmentation + segid;
+
+  if (frame_hdr->segmentation.enabled && seg->alternate_loop_filter_enabled) {
+    if (priv->segmentation_abs_delta)
+      seg_filter = seg->alternate_loop_filter;
+    else
+      seg_filter += seg->alternate_loop_filter;
+  }
+  return CLAMP (seg_filter, 0, GST_VP9_MAX_LOOP_FILTER);
+}
+
+/*save segmentation info from frame header to parser*/
+static void
+segmentation_save (GstVp9Parser * parser, const GstVp9FrameHdr * frame_hdr)
+{
+  const GstVp9SegmentationInfo *info = &frame_hdr->segmentation;
+  if (!info->enabled)
+    return;
+
+  if (info->update_map) {
+    g_assert (G_N_ELEMENTS (parser->mb_segment_tree_probs) ==
+        G_N_ELEMENTS (info->tree_probs));
+    g_assert (G_N_ELEMENTS (parser->segment_pred_probs) ==
+        G_N_ELEMENTS (info->pred_probs));
+    memcpy (parser->mb_segment_tree_probs, info->tree_probs,
+        sizeof (info->tree_probs));
+    memcpy (parser->segment_pred_probs, info->pred_probs,
+        sizeof (info->pred_probs));
+  }
+
+  if (info->update_data) {
+    GstVp9ParserPrivate *priv = GST_VP9_PARSER_GET_PRIVATE (parser);
+    priv->segmentation_abs_delta = info->abs_delta;
+    g_assert (G_N_ELEMENTS (priv->segmentation) == G_N_ELEMENTS (info->data));
+    memcpy (priv->segmentation, info->data, sizeof (info->data));
+  }
+}
+
+static void
+segmentation_update (GstVp9Parser * parser, const GstVp9FrameHdr * frame_hdr)
+{
+  int i = 0;
+  const GstVp9ParserPrivate *priv = GST_VP9_PARSER_GET_PRIVATE (parser);
+  const GstVp9LoopFilter *lf = &frame_hdr->loopfilter;
+  const GstVp9QuantIndices *quant_indices = &frame_hdr->quant_indices;
+  int default_filter = lf->filter_level;
+  const int scale = 1 << (default_filter >> 5);
+
+  segmentation_save (parser, frame_hdr);
+
+  for (i = 0; i < GST_VP9_MAX_SEGMENTS; i++) {
+    guint8 q = seg_get_base_qindex (parser, frame_hdr, i);
+
+    GstVp9Segmentation *seg = parser->segmentation + i;
+    const GstVp9SegmentationInfoData *info = priv->segmentation + i;
+
+    seg->luma_dc_quant_scale =
+        gst_vp9_dc_quant (q, quant_indices->y_dc_delta, frame_hdr->bit_depth);
+    seg->luma_ac_quant_scale = gst_vp9_ac_quant (q, 0, frame_hdr->bit_depth);
+    seg->chroma_dc_quant_scale =
+        gst_vp9_dc_quant (q, quant_indices->uv_dc_delta, frame_hdr->bit_depth);
+    seg->chroma_ac_quant_scale =
+        gst_vp9_ac_quant (q, quant_indices->uv_ac_delta, frame_hdr->bit_depth);
+
+    if (lf->filter_level) {
+      guint8 filter = seg_get_filter_level (parser, frame_hdr, i);
+
+      if (!lf->mode_ref_delta_enabled) {
+        memset (seg->filter_level, filter, sizeof (seg->filter_level));
+      } else {
+        int ref, mode;
+        const int intra_filter =
+            filter + priv->ref_deltas[GST_VP9_REF_FRAME_INTRA] * scale;
+        seg->filter_level[GST_VP9_REF_FRAME_INTRA][0] =
+            CLAMP (intra_filter, 0, GST_VP9_MAX_LOOP_FILTER);
+        for (ref = GST_VP9_REF_FRAME_LAST; ref < GST_VP9_REF_FRAME_MAX; ++ref) {
+          for (mode = 0; mode < GST_VP9_MAX_MODE_LF_DELTAS; ++mode) {
+            const int inter_filter = filter + priv->ref_deltas[ref] * scale
+                + priv->mode_deltas[mode] * scale;
+            seg->filter_level[ref][mode] =
+                CLAMP (inter_filter, 0, GST_VP9_MAX_LOOP_FILTER);
+          }
+        }
+      }
+    }
+    seg->reference_frame_enabled = info->reference_frame_enabled;;
+    seg->reference_frame = info->reference_frame;
+    seg->reference_skip = info->reference_skip;
+  }
+}
+
+static void
+reference_update (GstVp9Parser * parser, const GstVp9FrameHdr * const frame_hdr)
+{
+  guint8 flag = 1;
+  guint8 refresh_frame_flags;
+  int i;
+  GstVp9ParserPrivate *priv = GST_VP9_PARSER_GET_PRIVATE (parser);
+  ReferenceSize *reference = priv->reference;
+  if (frame_hdr->frame_type == GST_VP9_KEY_FRAME) {
+    refresh_frame_flags = 0xff;
+  } else {
+    refresh_frame_flags = frame_hdr->refresh_frame_flags;
+  }
+  for (i = 0; i < GST_VP9_REF_FRAMES; i++) {
+    if (refresh_frame_flags & flag) {
+      reference[i].width = frame_hdr->width;
+      reference[i].height = frame_hdr->height;
+    }
+    flag <<= 1;
+  }
+}
+
+static inline int
+frame_is_intra_only (const GstVp9FrameHdr * frame_hdr)
+{
+  return frame_hdr->frame_type == GST_VP9_KEY_FRAME || frame_hdr->intra_only;
+}
+
+static void
+set_default_lf_deltas (GstVp9Parser * parser)
+{
+  GstVp9ParserPrivate *priv = GST_VP9_PARSER_GET_PRIVATE (parser);
+  priv->ref_deltas[GST_VP9_REF_FRAME_INTRA] = 1;
+  priv->ref_deltas[GST_VP9_REF_FRAME_LAST] = 0;
+  priv->ref_deltas[GST_VP9_REF_FRAME_GOLDEN] = -1;
+  priv->ref_deltas[GST_VP9_REF_FRAME_ALTREF] = -1;
+
+  priv->mode_deltas[0] = 0;
+  priv->mode_deltas[1] = 0;
+}
+
+static void
+set_default_segmentation_info (GstVp9Parser * parser)
+{
+  GstVp9ParserPrivate *priv = GST_VP9_PARSER_GET_PRIVATE (parser);
+
+  memset (priv->segmentation, 0, sizeof (priv->segmentation));
+
+  priv->segmentation_abs_delta = FALSE;
+}
+
+static void
+setup_past_independence (GstVp9Parser * parser,
+    GstVp9FrameHdr * const frame_hdr)
+{
+  set_default_lf_deltas (parser);
+  set_default_segmentation_info (parser);
+
+  memset (frame_hdr->ref_frame_sign_bias, 0,
+      sizeof (frame_hdr->ref_frame_sign_bias));
+}
+
+static void
+gst_vp9_parser_init (GstVp9Parser * parser)
+{
+  GstVp9ParserPrivate *priv = parser->priv;
+
+  memset (parser, 0, sizeof (GstVp9Parser));
+  memset (priv, 0, sizeof (GstVp9ParserPrivate));
+
+  parser->priv = priv;
+}
+
+static GstVp9ParserResult
+gst_vp9_parser_update (GstVp9Parser * parser, GstVp9FrameHdr * const frame_hdr)
+{
+  if (frame_hdr->frame_type == GST_VP9_KEY_FRAME)
+    gst_vp9_parser_init (parser);
+
+  if (frame_is_intra_only (frame_hdr) || frame_hdr->error_resilient_mode)
+    setup_past_independence (parser, frame_hdr);
+
+  loop_filter_update (parser, &frame_hdr->loopfilter);
+  segmentation_update (parser, frame_hdr);
+  reference_update (parser, frame_hdr);
+
+  return GST_VP9_PARSER_OK;
+}
+
+
+/******** API *************/
+
+/**
+ * gst_vp9_parser_new:
+ *
+ * Creates a new #GstVp9Parser. It should be freed with
+ * gst_vp9_parser_free() after use.
+ *
+ * Returns: a new #GstVp9Parser
+ *
+ * Since: 1.8
+ */
+GstVp9Parser *
+gst_vp9_parser_new (void)
+{
+  GstVp9Parser *parser;
+  GstVp9ParserPrivate *priv;
+
+  INITIALIZE_DEBUG_CATEGORY;
+  GST_DEBUG ("Create VP9 Parser");
+
+  parser = g_slice_new (GstVp9Parser);
+  if (!parser)
+    return NULL;
+
+  priv = g_slice_new (GstVp9ParserPrivate);
+  if (!priv)
+    return NULL;
+
+  parser->priv = priv;
+  gst_vp9_parser_init (parser);
+
+  return parser;
+}
+
+/**
+ * gst_vp9_parser_free:
+ * @parser: the #GstVp9Parser to free
+ *
+ * Frees @parser.
+ *
+ * Since: 1.8
+ */
+void
+gst_vp9_parser_free (GstVp9Parser * parser)
+{
+  if (parser) {
+    if (parser->priv) {
+      g_slice_free (GstVp9ParserPrivate, parser->priv);
+      parser->priv = NULL;
+    }
+    g_slice_free (GstVp9Parser, parser);
+  }
+}
+
+/**
+ * gst_vp9_parser_parse_frame_header:
+ * @parser: The #GstVp9Parser
+ * @frame_hdr: The #GstVp9FrameHdr to fill
+ * @data: The data to parse
+ * @size: The size of the @data to parse
+ *
+ * Parses the VP9 bitstream contained in @data, and fills in @frame_hdr
+ * with the information. The @size argument represent the whole frame size.
+ *
+ * Returns: a #GstVp9ParserResult
+ *
+ * Since: 1.8
+ */
+GstVp9ParserResult
+gst_vp9_parser_parse_frame_header (GstVp9Parser * parser,
+    GstVp9FrameHdr * frame_hdr, const guint8 * data, gsize size)
+{
+  GstBitReader bit_reader;
+  GstBitReader *br = &bit_reader;
+
+  gst_bit_reader_init (br, data, size);
+  memset (frame_hdr, 0, sizeof (*frame_hdr));
+
+  /* Parsing Uncompressed Data Chunk */
+
+  if (!verify_frame_marker (br))
+    goto error;
+
+  frame_hdr->profile = parse_profile (br);
+  if (frame_hdr->profile > GST_VP9_PROFILE_UNDEFINED) {
+    GST_ERROR ("Stream has undefined VP9  profile !");
+    goto error;
+  }
+
+  frame_hdr->show_existing_frame = gst_vp9_read_bit (br);
+  if (frame_hdr->show_existing_frame) {
+    frame_hdr->frame_to_show = gst_vp9_read_bits (br, GST_VP9_REF_FRAMES_LOG2);
+    return GST_VP9_PARSER_OK;
+  }
+
+  frame_hdr->frame_type = gst_vp9_read_bit (br);
+  frame_hdr->show_frame = gst_vp9_read_bit (br);
+  frame_hdr->error_resilient_mode = gst_vp9_read_bit (br);
+
+  if (frame_hdr->frame_type == GST_VP9_KEY_FRAME) {
+
+    if (!verify_sync_code (br)) {
+      GST_ERROR ("Invalid VP9 Key-frame sync code !");
+      goto error;
+    }
+
+    if (!parse_bitdepth_colorspace_sampling (br, frame_hdr)) {
+      GST_ERROR ("Failed to parse color_space/bit_depth info !");
+      goto error;
+    }
+
+    parse_frame_size (br, &frame_hdr->width, &frame_hdr->height);
+
+    parse_display_frame_size (br, frame_hdr);
+
+  } else {
+    frame_hdr->intra_only = frame_hdr->show_frame ? 0 : gst_vp9_read_bit (br);
+    frame_hdr->reset_frame_context = frame_hdr->error_resilient_mode ?
+        0 : gst_vp9_read_bits (br, 2);
+
+    if (frame_hdr->intra_only) {
+
+      if (!verify_sync_code (br)) {
+        GST_ERROR ("Invalid VP9 sync code in intra-only frame !");
+        goto error;
+      }
+
+      if (frame_hdr->profile > GST_VP9_PROFILE_0) {
+        if (!parse_bitdepth_colorspace_sampling (br, frame_hdr)) {
+          GST_ERROR ("Failed to parse color_space/bit_depth info !");
+          goto error;
+        }
+      } else {
+        frame_hdr->color_space = GST_VP9_CS_BT_601;
+        frame_hdr->color_range = GST_VP9_CR_LIMITED;
+        frame_hdr->subsampling_y = frame_hdr->subsampling_x = 1;
+        frame_hdr->bit_depth = GST_VP9_BIT_DEPTH_8;
+      }
+
+      frame_hdr->refresh_frame_flags =
+          gst_vp9_read_bits (br, GST_VP9_REF_FRAMES);
+      parse_frame_size (br, &frame_hdr->width, &frame_hdr->height);
+      parse_display_frame_size (br, frame_hdr);
+
+    } else {
+      int i;
+      frame_hdr->refresh_frame_flags =
+          gst_vp9_read_bits (br, GST_VP9_REF_FRAMES);
+
+      for (i = 0; i < GST_VP9_REFS_PER_FRAME; i++) {
+        frame_hdr->ref_frame_indices[i] =
+            gst_vp9_read_bits (br, GST_VP9_REF_FRAMES_LOG2);
+        frame_hdr->ref_frame_sign_bias[i] = gst_vp9_read_bit (br);
+      }
+
+      parse_frame_size_from_refs (parser, frame_hdr, br);
+      parse_display_frame_size (br, frame_hdr);
+
+      frame_hdr->allow_high_precision_mv = gst_vp9_read_bit (br);
+      frame_hdr->mcomp_filter_type = parse_interp_filter (br);
+
+      /* Assing defalut values */
+      frame_hdr->color_space = GST_VP9_CS_BT_601;
+      frame_hdr->color_range = GST_VP9_CR_LIMITED;
+      frame_hdr->subsampling_y = frame_hdr->subsampling_x = 1;
+      frame_hdr->bit_depth = GST_VP9_BIT_DEPTH_8;
+    }
+  }
+
+  frame_hdr->refresh_frame_context =
+      frame_hdr->error_resilient_mode ? 0 : gst_vp9_read_bit (br);
+  frame_hdr->frame_parallel_decoding_mode =
+      frame_hdr->error_resilient_mode ? 1 : gst_vp9_read_bit (br);
+  frame_hdr->frame_context_idx =
+      gst_vp9_read_bits (br, GST_VP9_FRAME_CONTEXTS_LOG2);
+
+  /* loopfilter header  */
+  parse_loopfilter (&frame_hdr->loopfilter, br);
+
+  /* quantization header */
+  parse_quantization (&frame_hdr->quant_indices, br);
+  /* set lossless_flag */
+  frame_hdr->lossless_flag = frame_hdr->quant_indices.y_ac_qi == 0 &&
+      frame_hdr->quant_indices.y_dc_delta == 0 &&
+      frame_hdr->quant_indices.uv_dc_delta == 0
+      && frame_hdr->quant_indices.uv_ac_delta == 0;
+
+  /* segmentation header */
+  parse_segmentation (&frame_hdr->segmentation, br);
+
+  /* tile header */
+  if (!parse_tile_info (frame_hdr, br)) {
+    GST_ERROR ("Failed to parse tile info...!");
+    goto error;
+  }
+
+  /* size of the rest of the header */
+  frame_hdr->first_partition_size = gst_vp9_read_bits (br, 16);
+  if (!frame_hdr->first_partition_size) {
+    GST_ERROR ("Failed to parse the first partition size...!");
+    goto error;
+  }
+
+  frame_hdr->frame_header_length_in_bytes =
+      (gst_bit_reader_get_pos (br) + 7) / 8;
+
+  return gst_vp9_parser_update (parser, frame_hdr);
+
+error:
+  return GST_VP9_PARSER_ERROR;
+}
diff --git a/gst-libs/gst/codecparsers/gstvp9parser.h b/gst-libs/gst/codecparsers/gstvp9parser.h
new file mode 100644
index 0000000..fd45e54
--- /dev/null
+++ b/gst-libs/gst/codecparsers/gstvp9parser.h
@@ -0,0 +1,493 @@
+/*
+ * gstvp9parser.h
+ *
+ *  Copyright (C) 2013-2014 Intel Corporation
+ *  Copyright (C) 2015 Intel Corporation
+ *    Author: XuGuangxin<Guangxin.Xu@intel.com>
+ *    Author: Sreerenj Balachandran<sreerenj.balachandran@intel.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifndef GST_VP9_PARSER_H
+#define GST_VP9_PARSER_H
+
+#ifndef GST_USE_UNSTABLE_API
+#warning "The VP9 parsing library is unstable API and may change in future."
+#warning "You can define GST_USE_UNSTABLE_API to avoid this warning."
+#endif
+
+#include <gst/gst.h>
+
+G_BEGIN_DECLS
+
+#define GST_VP9_FRAME_MARKER 0x02
+#define GST_VP9_SYNC_CODE 0x498342
+
+#define GST_VP9_MAX_LOOP_FILTER    63
+#define GST_VP9_MAX_PROB           255
+
+#define GST_VP9_REFS_PER_FRAME     3
+#define GST_VP9_REF_FRAMES_LOG2    3
+#define GST_VP9_REF_FRAMES         (1 << GST_VP9_REF_FRAMES_LOG2)
+
+#define GST_VP9_FRAME_CONTEXTS_LOG2 2
+
+#define GST_VP9_MAX_LOOP_FILTER    63
+#define GST_VP9_MAX_SHARPNESS      7
+
+#define GST_VP9_MAX_REF_LF_DELTAS  4
+#define GST_VP9_MAX_MODE_LF_DELTAS 2
+
+#define GST_VP9_SEGMENT_DELTADATA  0
+#define GST_VP9_SEGMENT_ABSDATA    1
+
+#define GST_VP9_MAX_SEGMENTS       8
+#define GST_VP9_SEG_TREE_PROBS     (GST_VP9_MAX_SEGMENTS-1)
+
+#define GST_VP9_PREDICTION_PROBS   3
+
+typedef struct _GstVp9Parser               GstVp9Parser;
+typedef struct _GstVp9FrameHdr             GstVp9FrameHdr;
+typedef struct _GstVp9LoopFilter           GstVp9LoopFilter;
+typedef struct _GstVp9QuantIndices         GstVp9QuantIndices;
+typedef struct _GstVp9Segmentation         GstVp9Segmentation;
+typedef struct _GstVp9SegmentationInfo     GstVp9SegmentationInfo;
+typedef struct _GstVp9SegmentationInfoData GstVp9SegmentationInfoData;
+
+/**
+ * GstVp9ParseResult:
+ * @GST_VP9_PARSER_OK: The parsing went well
+ * @GST_VP9_PARSER_BROKEN_DATA: The data to parse is broken
+ * @GST_VP9_PARSER_NO_PACKET_ERROR: An error occured during the parsing
+ *
+ * Result type of any parsing function.
+ *
+ * Since: 1.8
+ */
+typedef enum
+{
+  GST_VP9_PARSER_OK,
+  GST_VP9_PARSER_BROKEN_DATA,
+  GST_VP9_PARSER_ERROR,
+} GstVp9ParserResult;
+
+/**
+ * GstVp9Profile: Bitstream profiles indicated by 2-3 bits in the uncompressed header
+ * @GST_VP9_PROFILE_0: Profile 0, 8-bit 4:2:0 only.
+ * @GST_VP9_PROFILE_1: Profile 1, 8-bit 4:4:4, 4:2:2, and 4:4:0.
+ * @GST_VP9_PROFILE_2: Profile 2, 10-bit and 12-bit color only, with 4:2:0 sampling.
+ * @GST_VP9_PROFILE_3: Profile 3, 10-bit and 12-bit color only, with 4:2:2/4:4:4/4:4:0 sampling.
+ * @GST_VP9_PROFILE_UNDEFINED: Undefined profile
+ *
+ * VP9 Profiles
+ *
+ * Since: 1.8
+ */
+typedef enum {
+  GST_VP9_PROFILE_0,
+  GST_VP9_PROFILE_1,
+  GST_VP9_PROFILE_2,
+  GST_VP9_PROFILE_3,
+  GST_VP9_PROFILE_UNDEFINED
+} GstVP9Profile;
+
+/**
+ * GstVp9FrameType:
+ * @GST_VP9_KEY_FRAME: Key frame, only have intra blocks
+ * @GST_VP9_INTER_FRAME: Inter frame, both intra and inter blocks
+ *
+ * VP9 frame types
+ *
+ * Since: 1.8
+ */
+typedef enum {
+  GST_VP9_KEY_FRAME   = 0,
+  GST_VP9_INTER_FRAME = 1
+} GstVp9FrameType;
+
+/**
+ * GstVp9BitDepth:
+ * @GST_VP9_BIT_DEPTH_8: Bit depth is 8
+ * @GST_VP9_BIT_DEPTH_10 Bit depth is 10
+ * @GST_VP9_BIT_DEPTH_12:Bit depth is 12
+ *
+ * Bit depths of encoded frames
+ *
+ * Since: 1.8
+ */
+typedef enum {
+  GST_VP9_BIT_DEPTH_8  = 8,
+  GST_VP9_BIT_DEPTH_10 = 10,
+  GST_VP9_BIT_DEPTH_12 = 12
+} GstVp9BitDepth;
+
+/**
+ * GstVp9ColorSpace:
+ * @GST_VP9_CS_UNKNOWN: Unknown color space
+ * @GST_VP9_CS_BT_601: BT.601
+ * @GST_VP9_CS_BT_709: BT.709
+ * @GST_VP9_CS_SMPTE_170: SMPTE.170
+ * @GST_VP9_CS_SMPTE_240: SMPTE.240
+ * @GST_VP9_CS_BT_2020: BT.2020
+ * @GST_VP9_CS_RESERVED: Reserved
+ * @GST_VP9_CS_SRGB: sRGB
+ *
+ * Supported ColorSpace standards
+ *
+ * Since: 1.8
+ */
+typedef enum {
+  GST_VP9_CS_UNKNOWN               = 0,
+  GST_VP9_CS_BT_601                = 1,
+  GST_VP9_CS_BT_709                = 2,
+  GST_VP9_CS_SMPTE_170             = 3,
+  GST_VP9_CS_SMPTE_240             = 4,
+  GST_VP9_CS_BT_2020               = 5,
+  GST_VP9_CS_RESERVED_2            = 6,
+  GST_VP9_CS_SRGB                  = 7
+} GstVp9ColorSpace;
+
+/**
+ * GstVp9ColorRange:
+ * @GST_VP9_CR_LIMITED: Y range is [16-235], UV range is [16-240]
+ * @GST_VP9_CR_FULL: Full range for Y,U and V [0-255]
+ *
+ * Possible color value ranges
+ *
+ * Since: 1.8
+ */
+typedef enum {
+  GST_VP9_CR_LIMITED,
+  GST_VP9_CR_FULL
+} GstVp9ColorRange;
+
+/**
+ * GstVp9InterpolationFilter:
+ * @GST_VP9_INTERPOLATION_FILTER_EIGHTTAP: EightTap interpolation filter
+ * @GST_VP9_INTERPOLATION_FILTER_EIGHTTAP_SMOOTH: Smooth interpolation filter
+ * @GST_VP9_INTERPOLATION_FILTER_EIGHTTAP_SHARP: Shart interpolation filter
+ * @GST_VP9_INTERPOLATION_FILTER_BILINEAR: Bilinear interpolation filter
+ * @GST_VP9_INTERPOLATION_FILTER_SWITCHABLE: Selectable interpolation filter
+ *
+ * Interpolation Filters Types
+ *
+ * Since: 1.8
+ */
+typedef enum {
+  GST_VP9_INTERPOLATION_FILTER_EIGHTTAP        = 0,
+  GST_VP9_INTERPOLATION_FILTER_EIGHTTAP_SMOOTH = 1,
+  GST_VP9_INTERPOLATION_FILTER_EIGHTTAP_SHARP  = 2,
+  GST_VP9_INTERPOLATION_FILTER_BILINEAR        = 3,
+  GST_VP9_INTERPOLATION_FILTER_SWITCHABLE      = 4
+} GstVp9InterpolationFilter;
+
+/**
+ * GstVp9RefFrameType:
+ * @GST_VP9_REF_FRAME_INTRA: Intra reference frame
+ * @GST_VP9_REF_FRAME_LAST: Last Reference frame
+ * @GST_VP9_REF_FRAME_GOLDEN: Golden Reference frame
+ * @GST_VP9_REF_FRAME_ALTREF: Alternate Reference frame
+ * @GST_VP9_REF_FRAME_MAX:
+ *
+ * Reference Frame types
+ *
+ * Since: 1.8
+ */
+typedef enum {
+  GST_VP9_REF_FRAME_INTRA  = 0,
+  GST_VP9_REF_FRAME_LAST   = 1,
+  GST_VP9_REF_FRAME_GOLDEN = 2,
+  GST_VP9_REF_FRAME_ALTREF = 3,
+  GST_VP9_REF_FRAME_MAX    = 4
+} GstVp9RefFrameType;
+
+/**
+ * GstVp9QuantIndices:
+ * @y_ac_qi: indicates the dequantization table index used for the
+ *   luma AC coefficients
+ * @y_dc_delta: indicates the delta value that is added to the
+ *   baseline index to obtain the luma DC coefficient dequantization
+ *   index
+ * @uv_dc_delta: indicates the delta value that is added to the
+ *   baseline index to obtain the chroma DC coefficient dequantization
+ *   index
+ * @uv_ac_delta: indicates the delta value that is added to the
+ *   baseline index to obtain the chroma AC coefficient dequantization
+ *   index
+ *
+ * Dequantization indices.
+ *
+ * Since: 1.8
+ */
+struct _GstVp9QuantIndices
+{
+  guint8 y_ac_qi;
+  gint8 y_dc_delta;
+  gint8 uv_dc_delta;
+  gint8 uv_ac_delta;
+};
+
+/**
+ * GstVp9LoopFilter:
+ * @filter_level: indicates loop filter level for the current frame
+ * @sharpness_level: indicates sharpness level for thecurrent frame
+ * @mode_ref_delta_enabled: indicate if filter adjust is on
+ * @mode_ref_delta_update: indicates if the delta values used in an
+ *   adjustment are updated in the current frame
+ * @update_ref_deltas: indicate which ref deltas are updated
+ * @ref_deltas:  Loop filter strength adjustments based on
+ *  frame type (intra, inter)
+ * @update_mode_deltas: indicate with mode deltas are updated
+ * @mode_deltas: Loop filter strength adjustments based on
+ *   mode (zero, new mv)
+ *
+ * Loop filter values
+ *
+ * Since: 1.8
+ */
+struct _GstVp9LoopFilter {
+  gint filter_level;
+  gint sharpness_level;
+
+  guint8 mode_ref_delta_enabled;
+  guint8 mode_ref_delta_update;
+  guint8 update_ref_deltas[GST_VP9_MAX_REF_LF_DELTAS];
+  gint8 ref_deltas[GST_VP9_MAX_REF_LF_DELTAS];
+  guint8 update_mode_deltas[GST_VP9_MAX_MODE_LF_DELTAS];
+  gint8 mode_deltas[GST_VP9_MAX_MODE_LF_DELTAS];
+};
+
+/**
+ * GstVp9SegmentationInfoData:
+ * @alternate_quantizer_enabled: indicate alternate quantizer enabled at segment level
+ * @alternate_quantizer: alternate quantizer value
+ * @alternate_loop_filter_enabled: indicate alternate loop filter enabled at segment level
+ * @alternate_loop_filter: alternate loop filter
+ * @reference_frame_enabled: indicate alternate reference frame at segment level
+ * @reference_frame: alternate reference frame
+ * @reference_skip: a block skip mode that implies both the use of a (0,0)
+ *   motion vector and that no residual will be coded.
+ *
+ * Segmentation info for each segment
+ *
+ * Since: 1.8
+ */
+struct _GstVp9SegmentationInfoData {
+  /* SEG_LVL_ALT_Q */
+  guint8 alternate_quantizer_enabled;
+  gint16 alternate_quantizer;
+
+  /* SEG_LVL_ALT_LF */
+  guint8 alternate_loop_filter_enabled;
+  gint8 alternate_loop_filter;
+
+  /* SEG_LVL_REF_FRAME */
+  guint8 reference_frame_enabled;
+  gint reference_frame;
+
+  guint8 reference_skip;
+};
+
+/**
+ * GstVp9SegmentationInfo:
+ * @enabled: enables the segmentation feature for the current frame
+ * @update_map: determines if segmentation is updated in the current frame
+ * @update_tree_probs: determines if tree probabilities updated or not
+ * @tree_probs: segment tree probabilities
+ * @update_pred_probs:determines if prediction probabilities updated or not
+ * @pred_probs: prediction probabilities
+ * @abs_delta: interpretation of segment data values
+ * @temporal_update: type of map update
+ * @update_data: indicates if the segment feature data
+ *   is updated in the current frame
+ * @data: segment feature data
+ *
+ * Segmentation info
+ *
+ * Since: 1.8
+ */
+struct _GstVp9SegmentationInfo {
+  /* enable in setup_segmentation*/
+  guint8  enabled;
+  /* update_map in setup_segmentation*/
+  guint8 update_map;
+  /* tree_probs exist or not*/
+  guint8 update_tree_probs[GST_VP9_SEG_TREE_PROBS];
+  guint8 tree_probs[GST_VP9_SEG_TREE_PROBS];
+  /* pred_probs exist or not*/
+  guint8 update_pred_probs[GST_VP9_PREDICTION_PROBS];
+  guint8 pred_probs[GST_VP9_PREDICTION_PROBS];
+
+  /* abs_delta in setup_segmentation */
+  guint8 abs_delta;
+  /* temporal_update in setup_segmentation */
+  guint8 temporal_update;
+
+  /* update_data in setup_segmentation*/
+  guint8 update_data;
+  GstVp9SegmentationInfoData data[GST_VP9_MAX_SEGMENTS];
+};
+
+/**
+ * GstVp9FrameHdr:
+ * @profile: encoded profile
+ * @show_existing_frame: display already decoded frame instead of doing the decoding
+ * @frame_to_show: which frame to show if show_existing_frame is true
+ * @frame_type: frame type
+ * @show_frame: indicate whether it is a displayable frame or not
+ * @error_resilient_mode: error resilent mode
+ * @subsampling_x: horizontal subsampling
+ * @subsampling_y: vertical subsampling
+ * @width: frame width
+ * @height: frame height
+ * @display_size_enabled: display size enabled (cropping)
+ * @display_width: display width
+ * @display_height: display height
+ * @frame_context_idx: frame context index
+ * @bit_depth: bit depth of the stream
+ * @color_space: color space standard
+ * @color_range: color range standard
+ * @intra_only: intra only frame
+ * @reset_frame_context: reset frame context
+ * @refresh_frame_flags: refresh reference frame flags
+ * @ref_frame_indices: reference frame index
+ * @ref_frame_sign_bias: sign bias for selecting altref,last and golden frames
+ * @allow_high_precision_mv: allow hight precision motion vector
+ * @mcomp_filter_type: interpolation filter type
+ * @refresh_frame_context: refresh frame context indicator
+ * @frame_parallel_decoding_mode: enable or disable parallel decoding support.
+ * @loopfilter: loopfilter values
+ * @quant_indices: quantization indeces
+ * @segmentation: segmentation info
+ * @log2_tile_rows: tile row indicator
+ * @log2_tile_columns:  tile column indicator
+ * @first_partition_size: first partition size (after the uncompressed header)
+ * @lossless_flag: lossless mode decode
+ * @frame_header_length_in_bytes: length of uncompressed header
+ *
+ * Frame header
+ *
+ * Since: 1.8
+ */
+struct _GstVp9FrameHdr
+{
+  guint profile;
+  guint8 show_existing_frame;
+  gint  frame_to_show;
+  guint frame_type;
+  guint8 show_frame;
+  guint8 error_resilient_mode;
+  gint subsampling_x;
+  gint subsampling_y;
+  guint32 width;
+  guint32 height;
+  guint8 display_size_enabled;
+  guint32 display_width;
+  guint32 display_height;
+  guint frame_context_idx;
+
+  guint bit_depth;
+  guint color_space;
+  guint color_range;
+
+  guint8 intra_only;
+  gint reset_frame_context;
+  gint refresh_frame_flags;
+
+  gint ref_frame_indices[GST_VP9_REFS_PER_FRAME];
+  gint ref_frame_sign_bias[GST_VP9_REFS_PER_FRAME];
+  gint allow_high_precision_mv;
+  guint8 mcomp_filter_type;
+
+  gint refresh_frame_context;
+  /* frame_parallel_decoding_mode in vp9 code*/
+  gint frame_parallel_decoding_mode;
+
+  GstVp9LoopFilter loopfilter;
+  GstVp9QuantIndices quant_indices;
+  GstVp9SegmentationInfo segmentation;
+
+  gint log2_tile_rows;
+  gint log2_tile_columns;
+
+  guint32 first_partition_size;
+
+  /* calculated values */
+  guint lossless_flag;
+  guint32 frame_header_length_in_bytes;
+};
+
+/**
+ * GstVp9Segmentation:
+ * @filter_level: loop filter level
+ * @luma_ac_quant_scale: AC quant scale for luma(Y) component
+ * @luma_dc_quant_scale: DC quant scale for luma(Y) component
+ * @chroma_ac_quant_scale AC quant scale for chroma(U/V) component
+ * @chroma_dc_quant_scale: DC quant scale for chroma (U/V) component
+ * @reference_frame_enabled: alternate reference frame enablement
+ * @reference_frame: alternate reference frame
+ * @reference_skip:  a block skip mode that implies both the use of a (0,0)
+ *   motion vector and that no residual will be coded
+ *
+ * Segmentation info kept across multipe frames
+ *
+ * Since: 1.8
+ */
+struct _GstVp9Segmentation
+{
+  guint8 filter_level[4][2];
+  gint16 luma_ac_quant_scale;
+  gint16 luma_dc_quant_scale;
+  gint16 chroma_ac_quant_scale;
+  gint16 chroma_dc_quant_scale;
+
+  guint8 reference_frame_enabled;
+  gint reference_frame;
+
+  guint8 reference_skip;
+};
+
+/**
+ * GstVp9Parser:
+ * @priv: GstVp9ParserPrivate struct to keep track of state variables
+ * @mb_segment_tree_probs: decoding tree probabilities
+ * @segment_pred_probs: segment prediction probabiilties
+ * @segmentation: Segmentation info
+ *
+ * Parser context that needs to be live across frames
+ *
+ * Since: 1.8
+ */
+struct _GstVp9Parser
+{
+  /* private stuct for tracking state variables across frames */
+  void *priv;
+
+  guint8 mb_segment_tree_probs[GST_VP9_SEG_TREE_PROBS];
+  guint8 segment_pred_probs[GST_VP9_PREDICTION_PROBS];
+  GstVp9Segmentation segmentation[GST_VP9_MAX_SEGMENTS];
+};
+
+GstVp9Parser *     gst_vp9_parser_new (void);
+
+GstVp9ParserResult gst_vp9_parser_parse_frame_header (GstVp9Parser* parser, GstVp9FrameHdr * frame_hdr, const guint8 * data, gsize size);
+
+void               gst_vp9_parser_free (GstVp9Parser * parser);
+
+G_END_DECLS
+
+#endif /* GST_VP9_PARSER_H */
diff --git a/gst-libs/gst/codecparsers/nalutils.h b/gst-libs/gst/codecparsers/nalutils.h
index 11cbe7a..7e23ab1 100644
--- a/gst-libs/gst/codecparsers/nalutils.h
+++ b/gst-libs/gst/codecparsers/nalutils.h
@@ -53,19 +53,35 @@
   guint64 cache;                /* cached bytes */
 } NalReader;
 
+G_GNUC_INTERNAL
 void nal_reader_init (NalReader * nr, const guint8 * data, guint size);
 
+G_GNUC_INTERNAL
 gboolean nal_reader_read (NalReader * nr, guint nbits);
+
+G_GNUC_INTERNAL
 gboolean nal_reader_skip (NalReader * nr, guint nbits);
+
+G_GNUC_INTERNAL
 gboolean nal_reader_skip_long (NalReader * nr, guint nbits);
+
+G_GNUC_INTERNAL
 guint nal_reader_get_pos (const NalReader * nr);
+
+G_GNUC_INTERNAL
 guint nal_reader_get_remaining (const NalReader * nr);
+
+G_GNUC_INTERNAL
 guint nal_reader_get_epb_count (const NalReader * nr);
 
+G_GNUC_INTERNAL
 gboolean nal_reader_is_byte_aligned (NalReader * nr);
+
+G_GNUC_INTERNAL
 gboolean nal_reader_has_more_data (NalReader * nr);
 
 #define NAL_READER_READ_BITS_H(bits) \
+G_GNUC_INTERNAL \
 gboolean nal_reader_get_bits_uint##bits (NalReader *nr, guint##bits *val, guint nbits)
 
 NAL_READER_READ_BITS_H (8);
@@ -73,11 +89,15 @@
 NAL_READER_READ_BITS_H (32);
 
 #define NAL_READER_PEEK_BITS_H(bits) \
+G_GNUC_INTERNAL \
 gboolean nal_reader_peek_bits_uint##bits (const NalReader *nr, guint##bits *val, guint nbits)
 
 NAL_READER_PEEK_BITS_H (8);
 
+G_GNUC_INTERNAL
 gboolean nal_reader_get_ue (NalReader * nr, guint32 * val);
+
+G_GNUC_INTERNAL
 gboolean nal_reader_get_se (NalReader * nr, gint32 * val);
 
 #define CHECK_ALLOWED_MAX(val, max) { \
@@ -159,4 +179,5 @@
   val = tmp; \
 }
 
+G_GNUC_INTERNAL
 gint scan_for_start_codes (const guint8 * data, guint size);
diff --git a/gst-libs/gst/codecparsers/parserutils.h b/gst-libs/gst/codecparsers/parserutils.h
index 6b54ded..e1bf18f 100644
--- a/gst-libs/gst/codecparsers/parserutils.h
+++ b/gst-libs/gst/codecparsers/parserutils.h
@@ -101,7 +101,7 @@
   guint cbits;
 };
 
-gboolean
+G_GNUC_INTERNAL gboolean
 decode_vlc (GstBitReader * br, guint * res, const VLCTable * table,
     guint length);
 
diff --git a/gst-libs/gst/codecparsers/vp8utils.h b/gst-libs/gst/codecparsers/vp8utils.h
index c8fc96b..5715a5b 100644
--- a/gst-libs/gst/codecparsers/vp8utils.h
+++ b/gst-libs/gst/codecparsers/vp8utils.h
@@ -25,19 +25,19 @@
 
 #include <gst/codecparsers/gstvp8parser.h>
 
-void
+G_GNUC_INTERNAL void
 gst_vp8_token_update_probs_init (GstVp8TokenProbs * probs);
 
-void
+G_GNUC_INTERNAL void
 gst_vp8_token_probs_init_defaults (GstVp8TokenProbs * probs);
 
-void
+G_GNUC_INTERNAL void
 gst_vp8_mv_update_probs_init (GstVp8MvProbs * probs);
 
-void
+G_GNUC_INTERNAL void
 gst_vp8_mv_probs_init_defaults (GstVp8MvProbs * probs);
 
-void
+G_GNUC_INTERNAL void
 gst_vp8_mode_probs_init_defaults (GstVp8ModeProbs * probs, gboolean key_frame);
 
 #endif /* GST_VP8_UTILS_H */
diff --git a/gst-libs/gst/codecparsers/vp9utils.c b/gst-libs/gst/codecparsers/vp9utils.c
new file mode 100644
index 0000000..009fa24
--- /dev/null
+++ b/gst-libs/gst/codecparsers/vp9utils.c
@@ -0,0 +1,290 @@
+/*
+ *  Copyright (c) 2010 The WebM project authors. All Rights Reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ *   * Redistributions of source code must retain the above copyright
+ *     notice, this list of conditions and the following disclaimer.
+ *
+ *   * Redistributions in binary form must reproduce the above copyright
+ *     notice, this list of conditions and the following disclaimer in
+ *     the documentation and/or other materials provided with the
+ *     distribution.
+ *
+ *   * Neither the name of Google, nor the WebM Project, nor the names
+ *     of its contributors may be used to endorse or promote products
+ *     derived from this software without specific prior written
+ *     permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include "vp9utils.h"
+
+static const int16_t dc_qlookup[QINDEX_RANGE] = {
+  4, 8, 8, 9, 10, 11, 12, 12,
+  13, 14, 15, 16, 17, 18, 19, 19,
+  20, 21, 22, 23, 24, 25, 26, 26,
+  27, 28, 29, 30, 31, 32, 32, 33,
+  34, 35, 36, 37, 38, 38, 39, 40,
+  41, 42, 43, 43, 44, 45, 46, 47,
+  48, 48, 49, 50, 51, 52, 53, 53,
+  54, 55, 56, 57, 57, 58, 59, 60,
+  61, 62, 62, 63, 64, 65, 66, 66,
+  67, 68, 69, 70, 70, 71, 72, 73,
+  74, 74, 75, 76, 77, 78, 78, 79,
+  80, 81, 81, 82, 83, 84, 85, 85,
+  87, 88, 90, 92, 93, 95, 96, 98,
+  99, 101, 102, 104, 105, 107, 108, 110,
+  111, 113, 114, 116, 117, 118, 120, 121,
+  123, 125, 127, 129, 131, 134, 136, 138,
+  140, 142, 144, 146, 148, 150, 152, 154,
+  156, 158, 161, 164, 166, 169, 172, 174,
+  177, 180, 182, 185, 187, 190, 192, 195,
+  199, 202, 205, 208, 211, 214, 217, 220,
+  223, 226, 230, 233, 237, 240, 243, 247,
+  250, 253, 257, 261, 265, 269, 272, 276,
+  280, 284, 288, 292, 296, 300, 304, 309,
+  313, 317, 322, 326, 330, 335, 340, 344,
+  349, 354, 359, 364, 369, 374, 379, 384,
+  389, 395, 400, 406, 411, 417, 423, 429,
+  435, 441, 447, 454, 461, 467, 475, 482,
+  489, 497, 505, 513, 522, 530, 539, 549,
+  559, 569, 579, 590, 602, 614, 626, 640,
+  654, 668, 684, 700, 717, 736, 755, 775,
+  796, 819, 843, 869, 896, 925, 955, 988,
+  1022, 1058, 1098, 1139, 1184, 1232, 1282, 1336,
+};
+
+static const int16_t dc_qlookup_10[QINDEX_RANGE] = {
+  4, 9, 10, 13, 15, 17, 20, 22,
+  25, 28, 31, 34, 37, 40, 43, 47,
+  50, 53, 57, 60, 64, 68, 71, 75,
+  78, 82, 86, 90, 93, 97, 101, 105,
+  109, 113, 116, 120, 124, 128, 132, 136,
+  140, 143, 147, 151, 155, 159, 163, 166,
+  170, 174, 178, 182, 185, 189, 193, 197,
+  200, 204, 208, 212, 215, 219, 223, 226,
+  230, 233, 237, 241, 244, 248, 251, 255,
+  259, 262, 266, 269, 273, 276, 280, 283,
+  287, 290, 293, 297, 300, 304, 307, 310,
+  314, 317, 321, 324, 327, 331, 334, 337,
+  343, 350, 356, 362, 369, 375, 381, 387,
+  394, 400, 406, 412, 418, 424, 430, 436,
+  442, 448, 454, 460, 466, 472, 478, 484,
+  490, 499, 507, 516, 525, 533, 542, 550,
+  559, 567, 576, 584, 592, 601, 609, 617,
+  625, 634, 644, 655, 666, 676, 687, 698,
+  708, 718, 729, 739, 749, 759, 770, 782,
+  795, 807, 819, 831, 844, 856, 868, 880,
+  891, 906, 920, 933, 947, 961, 975, 988,
+  1001, 1015, 1030, 1045, 1061, 1076, 1090, 1105,
+  1120, 1137, 1153, 1170, 1186, 1202, 1218, 1236,
+  1253, 1271, 1288, 1306, 1323, 1342, 1361, 1379,
+  1398, 1416, 1436, 1456, 1476, 1496, 1516, 1537,
+  1559, 1580, 1601, 1624, 1647, 1670, 1692, 1717,
+  1741, 1766, 1791, 1817, 1844, 1871, 1900, 1929,
+  1958, 1990, 2021, 2054, 2088, 2123, 2159, 2197,
+  2236, 2276, 2319, 2363, 2410, 2458, 2508, 2561,
+  2616, 2675, 2737, 2802, 2871, 2944, 3020, 3102,
+  3188, 3280, 3375, 3478, 3586, 3702, 3823, 3953,
+  4089, 4236, 4394, 4559, 4737, 4929, 5130, 5347,
+};
+
+static const int16_t dc_qlookup_12[QINDEX_RANGE] = {
+  4, 12, 18, 25, 33, 41, 50, 60,
+  70, 80, 91, 103, 115, 127, 140, 153,
+  166, 180, 194, 208, 222, 237, 251, 266,
+  281, 296, 312, 327, 343, 358, 374, 390,
+  405, 421, 437, 453, 469, 484, 500, 516,
+  532, 548, 564, 580, 596, 611, 627, 643,
+  659, 674, 690, 706, 721, 737, 752, 768,
+  783, 798, 814, 829, 844, 859, 874, 889,
+  904, 919, 934, 949, 964, 978, 993, 1008,
+  1022, 1037, 1051, 1065, 1080, 1094, 1108, 1122,
+  1136, 1151, 1165, 1179, 1192, 1206, 1220, 1234,
+  1248, 1261, 1275, 1288, 1302, 1315, 1329, 1342,
+  1368, 1393, 1419, 1444, 1469, 1494, 1519, 1544,
+  1569, 1594, 1618, 1643, 1668, 1692, 1717, 1741,
+  1765, 1789, 1814, 1838, 1862, 1885, 1909, 1933,
+  1957, 1992, 2027, 2061, 2096, 2130, 2165, 2199,
+  2233, 2267, 2300, 2334, 2367, 2400, 2434, 2467,
+  2499, 2532, 2575, 2618, 2661, 2704, 2746, 2788,
+  2830, 2872, 2913, 2954, 2995, 3036, 3076, 3127,
+  3177, 3226, 3275, 3324, 3373, 3421, 3469, 3517,
+  3565, 3621, 3677, 3733, 3788, 3843, 3897, 3951,
+  4005, 4058, 4119, 4181, 4241, 4301, 4361, 4420,
+  4479, 4546, 4612, 4677, 4742, 4807, 4871, 4942,
+  5013, 5083, 5153, 5222, 5291, 5367, 5442, 5517,
+  5591, 5665, 5745, 5825, 5905, 5984, 6063, 6149,
+  6234, 6319, 6404, 6495, 6587, 6678, 6769, 6867,
+  6966, 7064, 7163, 7269, 7376, 7483, 7599, 7715,
+  7832, 7958, 8085, 8214, 8352, 8492, 8635, 8788,
+  8945, 9104, 9275, 9450, 9639, 9832, 10031, 10245,
+  10465, 10702, 10946, 11210, 11482, 11776, 12081, 12409,
+  12750, 13118, 13501, 13913, 14343, 14807, 15290, 15812,
+  16356, 16943, 17575, 18237, 18949, 19718, 20521, 21387,
+};
+
+static const int16_t ac_qlookup[QINDEX_RANGE] = {
+  4, 8, 9, 10, 11, 12, 13, 14,
+  15, 16, 17, 18, 19, 20, 21, 22,
+  23, 24, 25, 26, 27, 28, 29, 30,
+  31, 32, 33, 34, 35, 36, 37, 38,
+  39, 40, 41, 42, 43, 44, 45, 46,
+  47, 48, 49, 50, 51, 52, 53, 54,
+  55, 56, 57, 58, 59, 60, 61, 62,
+  63, 64, 65, 66, 67, 68, 69, 70,
+  71, 72, 73, 74, 75, 76, 77, 78,
+  79, 80, 81, 82, 83, 84, 85, 86,
+  87, 88, 89, 90, 91, 92, 93, 94,
+  95, 96, 97, 98, 99, 100, 101, 102,
+  104, 106, 108, 110, 112, 114, 116, 118,
+  120, 122, 124, 126, 128, 130, 132, 134,
+  136, 138, 140, 142, 144, 146, 148, 150,
+  152, 155, 158, 161, 164, 167, 170, 173,
+  176, 179, 182, 185, 188, 191, 194, 197,
+  200, 203, 207, 211, 215, 219, 223, 227,
+  231, 235, 239, 243, 247, 251, 255, 260,
+  265, 270, 275, 280, 285, 290, 295, 300,
+  305, 311, 317, 323, 329, 335, 341, 347,
+  353, 359, 366, 373, 380, 387, 394, 401,
+  408, 416, 424, 432, 440, 448, 456, 465,
+  474, 483, 492, 501, 510, 520, 530, 540,
+  550, 560, 571, 582, 593, 604, 615, 627,
+  639, 651, 663, 676, 689, 702, 715, 729,
+  743, 757, 771, 786, 801, 816, 832, 848,
+  864, 881, 898, 915, 933, 951, 969, 988,
+  1007, 1026, 1046, 1066, 1087, 1108, 1129, 1151,
+  1173, 1196, 1219, 1243, 1267, 1292, 1317, 1343,
+  1369, 1396, 1423, 1451, 1479, 1508, 1537, 1567,
+  1597, 1628, 1660, 1692, 1725, 1759, 1793, 1828,
+};
+
+static const int16_t ac_qlookup_10[QINDEX_RANGE] = {
+  4, 9, 11, 13, 16, 18, 21, 24,
+  27, 30, 33, 37, 40, 44, 48, 51,
+  55, 59, 63, 67, 71, 75, 79, 83,
+  88, 92, 96, 100, 105, 109, 114, 118,
+  122, 127, 131, 136, 140, 145, 149, 154,
+  158, 163, 168, 172, 177, 181, 186, 190,
+  195, 199, 204, 208, 213, 217, 222, 226,
+  231, 235, 240, 244, 249, 253, 258, 262,
+  267, 271, 275, 280, 284, 289, 293, 297,
+  302, 306, 311, 315, 319, 324, 328, 332,
+  337, 341, 345, 349, 354, 358, 362, 367,
+  371, 375, 379, 384, 388, 392, 396, 401,
+  409, 417, 425, 433, 441, 449, 458, 466,
+  474, 482, 490, 498, 506, 514, 523, 531,
+  539, 547, 555, 563, 571, 579, 588, 596,
+  604, 616, 628, 640, 652, 664, 676, 688,
+  700, 713, 725, 737, 749, 761, 773, 785,
+  797, 809, 825, 841, 857, 873, 889, 905,
+  922, 938, 954, 970, 986, 1002, 1018, 1038,
+  1058, 1078, 1098, 1118, 1138, 1158, 1178, 1198,
+  1218, 1242, 1266, 1290, 1314, 1338, 1362, 1386,
+  1411, 1435, 1463, 1491, 1519, 1547, 1575, 1603,
+  1631, 1663, 1695, 1727, 1759, 1791, 1823, 1859,
+  1895, 1931, 1967, 2003, 2039, 2079, 2119, 2159,
+  2199, 2239, 2283, 2327, 2371, 2415, 2459, 2507,
+  2555, 2603, 2651, 2703, 2755, 2807, 2859, 2915,
+  2971, 3027, 3083, 3143, 3203, 3263, 3327, 3391,
+  3455, 3523, 3591, 3659, 3731, 3803, 3876, 3952,
+  4028, 4104, 4184, 4264, 4348, 4432, 4516, 4604,
+  4692, 4784, 4876, 4972, 5068, 5168, 5268, 5372,
+  5476, 5584, 5692, 5804, 5916, 6032, 6148, 6268,
+  6388, 6512, 6640, 6768, 6900, 7036, 7172, 7312,
+};
+
+static const int16_t ac_qlookup_12[QINDEX_RANGE] = {
+  4, 13, 19, 27, 35, 44, 54, 64,
+  75, 87, 99, 112, 126, 139, 154, 168,
+  183, 199, 214, 230, 247, 263, 280, 297,
+  314, 331, 349, 366, 384, 402, 420, 438,
+  456, 475, 493, 511, 530, 548, 567, 586,
+  604, 623, 642, 660, 679, 698, 716, 735,
+  753, 772, 791, 809, 828, 846, 865, 884,
+  902, 920, 939, 957, 976, 994, 1012, 1030,
+  1049, 1067, 1085, 1103, 1121, 1139, 1157, 1175,
+  1193, 1211, 1229, 1246, 1264, 1282, 1299, 1317,
+  1335, 1352, 1370, 1387, 1405, 1422, 1440, 1457,
+  1474, 1491, 1509, 1526, 1543, 1560, 1577, 1595,
+  1627, 1660, 1693, 1725, 1758, 1791, 1824, 1856,
+  1889, 1922, 1954, 1987, 2020, 2052, 2085, 2118,
+  2150, 2183, 2216, 2248, 2281, 2313, 2346, 2378,
+  2411, 2459, 2508, 2556, 2605, 2653, 2701, 2750,
+  2798, 2847, 2895, 2943, 2992, 3040, 3088, 3137,
+  3185, 3234, 3298, 3362, 3426, 3491, 3555, 3619,
+  3684, 3748, 3812, 3876, 3941, 4005, 4069, 4149,
+  4230, 4310, 4390, 4470, 4550, 4631, 4711, 4791,
+  4871, 4967, 5064, 5160, 5256, 5352, 5448, 5544,
+  5641, 5737, 5849, 5961, 6073, 6185, 6297, 6410,
+  6522, 6650, 6778, 6906, 7034, 7162, 7290, 7435,
+  7579, 7723, 7867, 8011, 8155, 8315, 8475, 8635,
+  8795, 8956, 9132, 9308, 9484, 9660, 9836, 10028,
+  10220, 10412, 10604, 10812, 11020, 11228, 11437, 11661,
+  11885, 12109, 12333, 12573, 12813, 13053, 13309, 13565,
+  13821, 14093, 14365, 14637, 14925, 15213, 15502, 15806,
+  16110, 16414, 16734, 17054, 17390, 17726, 18062, 18414,
+  18766, 19134, 19502, 19886, 20270, 20670, 21070, 21486,
+  21902, 22334, 22766, 23214, 23662, 24126, 24590, 25070,
+  25551, 26047, 26559, 27071, 27599, 28143, 28687, 29247,
+};
+
+static int
+clamp (int value, int low, int high)
+{
+  return value < low ? low : (value > high ? high : value);
+}
+
+int16_t
+gst_vp9_dc_quant (int qindex, int delta, int bit_depth)
+{
+  const uint8_t q_table_idx = clamp (qindex + delta, 0, MAXQ);
+
+  switch (bit_depth) {
+    case 8:
+      return dc_qlookup[q_table_idx];
+    case 10:
+      return dc_qlookup_10[q_table_idx];
+    case 12:
+      return dc_qlookup_12[q_table_idx];
+    default:
+      return -1;
+  }
+  return -1;
+}
+
+int16_t
+gst_vp9_ac_quant (int qindex, int delta, int bit_depth)
+{
+  const uint8_t q_table_idx = clamp (qindex + delta, 0, MAXQ);
+
+  switch (bit_depth) {
+    case 8:
+      return ac_qlookup[q_table_idx];
+    case 10:
+      return ac_qlookup_10[q_table_idx];
+    case 12:
+      return ac_qlookup_12[q_table_idx];
+    default:
+      return -1;
+  }
+  return -1;
+}
diff --git a/gst-libs/gst/codecparsers/vp9utils.h b/gst-libs/gst/codecparsers/vp9utils.h
new file mode 100644
index 0000000..7f8240b
--- /dev/null
+++ b/gst-libs/gst/codecparsers/vp9utils.h
@@ -0,0 +1,51 @@
+/*
+ *  Copyright (c) 2010 The WebM project authors. All Rights Reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ *   * Redistributions of source code must retain the above copyright
+ *     notice, this list of conditions and the following disclaimer.
+ *
+ *   * Redistributions in binary form must reproduce the above copyright
+ *     notice, this list of conditions and the following disclaimer in
+ *     the documentation and/or other materials provided with the
+ *     distribution.
+ *
+ *   * Neither the name of Google, nor the WebM Project, nor the names
+ *     of its contributors may be used to endorse or promote products
+ *     derived from this software without specific prior written
+ *     permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *
+ */
+
+#ifndef __VP9_QUANT_H__
+#define __VP9_QUANT_H__
+
+#include <stdint.h>
+#include <glib.h>
+
+#define MAXQ 255
+#define QINDEX_RANGE 256
+#define QINDEX_BITS 8
+
+G_GNUC_INTERNAL
+int16_t gst_vp9_dc_quant(int qindex, int delta, int bit_depth);
+
+G_GNUC_INTERNAL
+int16_t gst_vp9_ac_quant(int qindex, int delta, int bit_depth);
+
+
+#endif //__VP9_QUANT_H__
diff --git a/gst-libs/gst/gl/Makefile.am b/gst-libs/gst/gl/Makefile.am
index f968357..f1cb9e1 100644
--- a/gst-libs/gst/gl/Makefile.am
+++ b/gst-libs/gst/gl/Makefile.am
@@ -4,24 +4,26 @@
 SUBDIRS = glprototypes
 DIST_SUBDIRS = glprototypes android x11 win32 cocoa wayland dispmanx egl eagl
 
-noinst_HEADERS =
-
 built_sys_header_configure = gstglconfig.h
 
 libgstgl_@GST_API_VERSION@_la_SOURCES = \
 	gstgldisplay.c \
 	gstglcontext.c \
-	gstglbasebuffer.c \
+	gstgldebug.c \
+	gstglbasememory.c \
+	gstglbuffer.c \
 	gstglmemory.c \
+	gstglmemorypbo.c \
 	gstglbufferpool.c \
 	gstglfilter.c \
+	gstglformat.c \
 	gstglbasefilter.c \
 	gstglshader.c \
-	gstglshadervariables.c \
+	gstglshaderstrings.c \
+	gstglsl.c \
+	gstglslstage.c \
 	gstglcolorconvert.c \
-	gstgldownload.c \
 	gstglupload.c \
-	gstgluploadmeta.c \
 	gstglwindow.c \
 	gstglapi.c \
 	gstglfeature.c \
@@ -30,23 +32,28 @@
 	gstglsyncmeta.c \
 	gstglviewconvert.c \
 	gstgloverlaycompositor.c \
-	utils/opengl_versions.h
+	gstglquery.c \
+	gstglcontrolbindingproxy.c
 
 libgstgl_@GST_API_VERSION@includedir = $(includedir)/gstreamer-@GST_API_VERSION@/gst/gl
 libgstgl_@GST_API_VERSION@include_HEADERS = \
 	gstglwindow.h \
 	gstgldisplay.h \
 	gstglcontext.h \
-	gstglbasebuffer.h \
+	gstgldebug.h \
+	gstglbasememory.h \
+	gstglbuffer.h \
 	gstglmemory.h \
+	gstglmemorypbo.h \
 	gstglbufferpool.h \
 	gstglfilter.h \
+	gstglformat.h \
 	gstglbasefilter.h \
-	gstglshadervariables.h \
 	gstglshader.h \
+	gstglshaderstrings.h \
+	gstglsl.h \
+	gstglslstage.h \
 	gstglcolorconvert.h \
-	gstgldownload.h \
-	gstgluploadmeta.h \
 	gstglupload.h \
 	gstglapi.h \
 	gstglfeature.h \
@@ -55,9 +62,18 @@
 	gstglsyncmeta.h \
 	gstglviewconvert.h \
 	gstgloverlaycompositor.h \
+	gstglquery.h \
+	gstglcontrolbindingproxy.h \
 	gstgl_fwd.h \
+	gstgl_enums.h \
 	gl.h
 
+noinst_HEADERS = \
+	gstglsl_private.h \
+	utils/opengl_versions.h \
+	utils/gles_versions.h
+
+
 libgstgl_@GST_API_VERSION@_la_LIBADD = \
 	$(GMODULE_NO_EXPORT_LIBS) \
 	$(GST_PLUGINS_BASE_LIBS) \
@@ -104,6 +120,7 @@
 if USE_EGL
 SUBDIRS += egl
 libgstgl_@GST_API_VERSION@_la_LIBADD += egl/libgstgl-egl.la
+libgstgl_@GST_API_VERSION@_la_LIBADD += -lgstallocators-$(GST_API_VERSION)
 endif
 
 configexecincludedir = $(libdir)/gstreamer-@GST_API_VERSION@/include/gst/gl
@@ -137,7 +154,8 @@
 		GST_PLUGIN_SYSTEM_PATH_1_0="" GST_PLUGIN_PATH_1_0="" GST_REGISTRY_UPDATE=no \
 		$(INTROSPECTION_SCANNER) -v --namespace GstGL \
 		--nsversion=@GST_API_VERSION@ \
-		--strip-prefix=Gst \
+		--identifier-prefix=Gst \
+		--symbol-prefix=gst \
 		--warn-all \
 		--c-include "gst/gl/gl.h" \
 		-I$(top_srcdir)/gst-libs \
@@ -154,7 +172,7 @@
 		--pkg gstreamer-base-@GST_API_VERSION@ \
 		--pkg gstreamer-video-@GST_API_VERSION@ \
 		--pkg-export gstreamer-gl-@GST_API_VERSION@ \
-		--add-init-section="gst_init(NULL,NULL);" \
+		--add-init-section="$(INTROSPECTION_INIT)" \
 		-DGST_USE_UNSTABLE_API \
 		--output $@ \
 		$(gir_headers) \
diff --git a/gst-libs/gst/gl/Makefile.in b/gst-libs/gst/gl/Makefile.in
index 75df518..42e795f 100644
--- a/gst-libs/gst/gl/Makefile.in
+++ b/gst-libs/gst/gl/Makefile.in
@@ -106,7 +106,8 @@
 @HAVE_WINDOW_EAGL_TRUE@am__append_13 = eagl
 @HAVE_WINDOW_EAGL_TRUE@am__append_14 = eagl/libgstgl-eagl.la
 @USE_EGL_TRUE@am__append_15 = egl
-@USE_EGL_TRUE@am__append_16 = egl/libgstgl-egl.la
+@USE_EGL_TRUE@am__append_16 = egl/libgstgl-egl.la \
+@USE_EGL_TRUE@	-lgstallocators-$(GST_API_VERSION)
 subdir = gst-libs/gst/gl
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
 am__aclocal_m4_deps = $(top_srcdir)/common/m4/as-ac-expand.m4 \
@@ -133,16 +134,15 @@
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
 	$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
-	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gsettings.m4 \
-	$(top_srcdir)/m4/gst-fionread.m4 $(top_srcdir)/m4/gst-sdl.m4 \
-	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
-	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
-	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libgcrypt.m4 \
-	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
-	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
-	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
-	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
-	$(top_srcdir)/configure.ac
+	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gst-fionread.m4 \
+	$(top_srcdir)/m4/gst-sdl.m4 $(top_srcdir)/m4/iconv.m4 \
+	$(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \
+	$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
+	$(top_srcdir)/m4/libgcrypt.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
+	$(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 DIST_COMMON = $(srcdir)/Makefile.am \
@@ -185,26 +185,31 @@
 	"$(DESTDIR)$(configexecincludedir)"
 LTLIBRARIES = $(lib_LTLIBRARIES)
 am__DEPENDENCIES_1 =
+@USE_EGL_TRUE@am__DEPENDENCIES_2 = egl/libgstgl-egl.la
 libgstgl_@GST_API_VERSION@_la_DEPENDENCIES = $(am__DEPENDENCIES_1) \
 	$(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
 	$(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) $(am__append_2) \
 	$(am__append_4) $(am__append_6) $(am__append_8) \
 	$(am__append_10) $(am__append_12) $(am__append_14) \
-	$(am__append_16)
+	$(am__DEPENDENCIES_2)
 am_libgstgl_@GST_API_VERSION@_la_OBJECTS =  \
 	libgstgl_@GST_API_VERSION@_la-gstgldisplay.lo \
 	libgstgl_@GST_API_VERSION@_la-gstglcontext.lo \
-	libgstgl_@GST_API_VERSION@_la-gstglbasebuffer.lo \
+	libgstgl_@GST_API_VERSION@_la-gstgldebug.lo \
+	libgstgl_@GST_API_VERSION@_la-gstglbasememory.lo \
+	libgstgl_@GST_API_VERSION@_la-gstglbuffer.lo \
 	libgstgl_@GST_API_VERSION@_la-gstglmemory.lo \
+	libgstgl_@GST_API_VERSION@_la-gstglmemorypbo.lo \
 	libgstgl_@GST_API_VERSION@_la-gstglbufferpool.lo \
 	libgstgl_@GST_API_VERSION@_la-gstglfilter.lo \
+	libgstgl_@GST_API_VERSION@_la-gstglformat.lo \
 	libgstgl_@GST_API_VERSION@_la-gstglbasefilter.lo \
 	libgstgl_@GST_API_VERSION@_la-gstglshader.lo \
-	libgstgl_@GST_API_VERSION@_la-gstglshadervariables.lo \
+	libgstgl_@GST_API_VERSION@_la-gstglshaderstrings.lo \
+	libgstgl_@GST_API_VERSION@_la-gstglsl.lo \
+	libgstgl_@GST_API_VERSION@_la-gstglslstage.lo \
 	libgstgl_@GST_API_VERSION@_la-gstglcolorconvert.lo \
-	libgstgl_@GST_API_VERSION@_la-gstgldownload.lo \
 	libgstgl_@GST_API_VERSION@_la-gstglupload.lo \
-	libgstgl_@GST_API_VERSION@_la-gstgluploadmeta.lo \
 	libgstgl_@GST_API_VERSION@_la-gstglwindow.lo \
 	libgstgl_@GST_API_VERSION@_la-gstglapi.lo \
 	libgstgl_@GST_API_VERSION@_la-gstglfeature.lo \
@@ -212,7 +217,9 @@
 	libgstgl_@GST_API_VERSION@_la-gstglframebuffer.lo \
 	libgstgl_@GST_API_VERSION@_la-gstglsyncmeta.lo \
 	libgstgl_@GST_API_VERSION@_la-gstglviewconvert.lo \
-	libgstgl_@GST_API_VERSION@_la-gstgloverlaycompositor.lo
+	libgstgl_@GST_API_VERSION@_la-gstgloverlaycompositor.lo \
+	libgstgl_@GST_API_VERSION@_la-gstglquery.lo \
+	libgstgl_@GST_API_VERSION@_la-gstglcontrolbindingproxy.lo
 libgstgl_@GST_API_VERSION@_la_OBJECTS =  \
 	$(am_libgstgl_@GST_API_VERSION@_la_OBJECTS)
 AM_V_lt = $(am__v_lt_@AM_V@)
@@ -364,6 +371,8 @@
 CLUTTER_X11_LIBS = @CLUTTER_X11_LIBS@
 CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
+CUDA_CFLAGS = @CUDA_CFLAGS@
+CUDA_LIBS = @CUDA_LIBS@
 CURL_CFLAGS = @CURL_CFLAGS@
 CURL_LIBS = @CURL_LIBS@
 CXX = @CXX@
@@ -401,6 +410,8 @@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
+EGL_CFLAGS = @EGL_CFLAGS@
+EGL_LIBS = @EGL_LIBS@
 EGREP = @EGREP@
 ERROR_CFLAGS = @ERROR_CFLAGS@
 ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
@@ -409,7 +420,6 @@
 EXIF_CFLAGS = @EXIF_CFLAGS@
 EXIF_LIBS = @EXIF_LIBS@
 FAAC_LIBS = @FAAC_LIBS@
-FAAD_IS_NEAAC = @FAAD_IS_NEAAC@
 FAAD_LIBS = @FAAD_LIBS@
 FFLAGS = @FFLAGS@
 FGREP = @FGREP@
@@ -428,8 +438,9 @@
 GIO_LIBS = @GIO_LIBS@
 GIO_UNIX_CFLAGS = @GIO_UNIX_CFLAGS@
 GIO_UNIX_LIBS = @GIO_UNIX_LIBS@
+GLES2_CFLAGS = @GLES2_CFLAGS@
+GLES2_LIBS = @GLES2_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
-GLIB_COMPILE_SCHEMAS = @GLIB_COMPILE_SCHEMAS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
@@ -446,16 +457,17 @@
 GMODULE_NO_EXPORT_LIBS = @GMODULE_NO_EXPORT_LIBS@
 GMSGFMT = @GMSGFMT@
 GMSGFMT_015 = @GMSGFMT_015@
+GNUSTL_CFLAGS = @GNUSTL_CFLAGS@
+GNUSTL_LIBS = @GNUSTL_LIBS@
 GRAPHENE_CFLAGS = @GRAPHENE_CFLAGS@
 GRAPHENE_LIBS = @GRAPHENE_LIBS@
 GREP = @GREP@
-GSETTINGS_CFLAGS = @GSETTINGS_CFLAGS@
-GSETTINGS_DISABLE_SCHEMAS_COMPILE = @GSETTINGS_DISABLE_SCHEMAS_COMPILE@
-GSETTINGS_LIBS = @GSETTINGS_LIBS@
 GSM_LIBS = @GSM_LIBS@
 GSTPB_PLUGINS_DIR = @GSTPB_PLUGINS_DIR@
 GSTPB_PREFIX = @GSTPB_PREFIX@
 GST_AGE = @GST_AGE@
+GST_ALLOCATORS_CFLAGS = @GST_ALLOCATORS_CFLAGS@
+GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
 GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
 GST_API_VERSION = @GST_API_VERSION@
 GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
@@ -481,6 +493,8 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PBUTILS_CFLAGS = @GST_PBUTILS_CFLAGS@
+GST_PBUTILS_LIBS = @GST_PBUTILS_LIBS@
 GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BAD_CFLAGS = @GST_PLUGINS_BAD_CFLAGS@
@@ -506,6 +520,8 @@
 GST_PREFIX = @GST_PREFIX@
 GST_REVISION = @GST_REVISION@
 GST_TOOLS_DIR = @GST_TOOLS_DIR@
+GST_VIDEO_CFLAGS = @GST_VIDEO_CFLAGS@
+GST_VIDEO_LIBS = @GST_VIDEO_LIBS@
 GTK3_CFLAGS = @GTK3_CFLAGS@
 GTK3_GL_CFLAGS = @GTK3_GL_CFLAGS@
 GTK3_GL_LIBS = @GTK3_GL_LIBS@
@@ -607,6 +623,7 @@
 LTLIBICONV = @LTLIBICONV@
 LTLIBINTL = @LTLIBINTL@
 LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
 MANIFEST_TOOL = @MANIFEST_TOOL@
@@ -620,8 +637,6 @@
 MODPLUG_LIBS = @MODPLUG_LIBS@
 MPEG2ENC_CFLAGS = @MPEG2ENC_CFLAGS@
 MPEG2ENC_LIBS = @MPEG2ENC_LIBS@
-MPG123_CFLAGS = @MPG123_CFLAGS@
-MPG123_LIBS = @MPG123_LIBS@
 MPLEX_CFLAGS = @MPLEX_CFLAGS@
 MPLEX_LDFLAGS = @MPLEX_LDFLAGS@
 MPLEX_LIBS = @MPLEX_LIBS@
@@ -637,6 +652,8 @@
 NETTLE_LIBS = @NETTLE_LIBS@
 NM = @NM@
 NMEDIT = @NMEDIT@
+NVENCODE_CFLAGS = @NVENCODE_CFLAGS@
+NVENCODE_LIBS = @NVENCODE_LIBS@
 OBJC = @OBJC@
 OBJCDEPMODE = @OBJCDEPMODE@
 OBJCFLAGS = @OBJCFLAGS@
@@ -694,16 +711,18 @@
 PYTHON_PLATFORM = @PYTHON_PLATFORM@
 PYTHON_PREFIX = @PYTHON_PREFIX@
 PYTHON_VERSION = @PYTHON_VERSION@
+QT_ANDROID_CFLAGS = @QT_ANDROID_CFLAGS@
+QT_ANDROID_LIBS = @QT_ANDROID_LIBS@
 QT_CFLAGS = @QT_CFLAGS@
 QT_LIBS = @QT_LIBS@
+QT_MAC_CFLAGS = @QT_MAC_CFLAGS@
+QT_MAC_LIBS = @QT_MAC_LIBS@
 QT_WAYLAND_CFLAGS = @QT_WAYLAND_CFLAGS@
 QT_WAYLAND_LIBS = @QT_WAYLAND_LIBS@
 QT_X11_CFLAGS = @QT_X11_CFLAGS@
 QT_X11_LIBS = @QT_X11_LIBS@
 RANLIB = @RANLIB@
 RCC = @RCC@
-RSVG_2_36_2_CFLAGS = @RSVG_2_36_2_CFLAGS@
-RSVG_2_36_2_LIBS = @RSVG_2_36_2_LIBS@
 RSVG_CFLAGS = @RSVG_CFLAGS@
 RSVG_LIBS = @RSVG_LIBS@
 RTMP_CFLAGS = @RTMP_CFLAGS@
@@ -755,6 +774,7 @@
 VOAACENC_LIBS = @VOAACENC_LIBS@
 VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
 VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VULKAN_LIBS = @VULKAN_LIBS@
 WARNING_CFLAGS = @WARNING_CFLAGS@
 WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
 WARNING_OBJCFLAGS = @WARNING_OBJCFLAGS@
@@ -765,6 +785,7 @@
 WAYLAND_LIBS = @WAYLAND_LIBS@
 WEBP_CFLAGS = @WEBP_CFLAGS@
 WEBP_LIBS = @WEBP_LIBS@
+WGET = @WGET@
 WILDMIDI_CFLAGS = @WILDMIDI_CFLAGS@
 WILDMIDI_LIBS = @WILDMIDI_LIBS@
 WINKS_LIBS = @WINKS_LIBS@
@@ -774,6 +795,8 @@
 X11_LIBS = @X11_LIBS@
 X265_CFLAGS = @X265_CFLAGS@
 X265_LIBS = @X265_LIBS@
+XCB_CFLAGS = @XCB_CFLAGS@
+XCB_LIBS = @XCB_LIBS@
 XCOMPOSITE_CFLAGS = @XCOMPOSITE_CFLAGS@
 XCOMPOSITE_LIBS = @XCOMPOSITE_LIBS@
 XGETTEXT = @XGETTEXT@
@@ -811,7 +834,6 @@
 docdir = @docdir@
 dvidir = @dvidir@
 exec_prefix = @exec_prefix@
-gsettingsschemadir = @gsettingsschemadir@
 host = @host@
 host_alias = @host_alias@
 host_cpu = @host_cpu@
@@ -856,22 +878,25 @@
 	$(am__append_7) $(am__append_9) $(am__append_11) \
 	$(am__append_13) $(am__append_15)
 DIST_SUBDIRS = glprototypes android x11 win32 cocoa wayland dispmanx egl eagl
-noinst_HEADERS = 
 built_sys_header_configure = gstglconfig.h
 libgstgl_@GST_API_VERSION@_la_SOURCES = \
 	gstgldisplay.c \
 	gstglcontext.c \
-	gstglbasebuffer.c \
+	gstgldebug.c \
+	gstglbasememory.c \
+	gstglbuffer.c \
 	gstglmemory.c \
+	gstglmemorypbo.c \
 	gstglbufferpool.c \
 	gstglfilter.c \
+	gstglformat.c \
 	gstglbasefilter.c \
 	gstglshader.c \
-	gstglshadervariables.c \
+	gstglshaderstrings.c \
+	gstglsl.c \
+	gstglslstage.c \
 	gstglcolorconvert.c \
-	gstgldownload.c \
 	gstglupload.c \
-	gstgluploadmeta.c \
 	gstglwindow.c \
 	gstglapi.c \
 	gstglfeature.c \
@@ -880,23 +905,28 @@
 	gstglsyncmeta.c \
 	gstglviewconvert.c \
 	gstgloverlaycompositor.c \
-	utils/opengl_versions.h
+	gstglquery.c \
+	gstglcontrolbindingproxy.c
 
 libgstgl_@GST_API_VERSION@includedir = $(includedir)/gstreamer-@GST_API_VERSION@/gst/gl
 libgstgl_@GST_API_VERSION@include_HEADERS = \
 	gstglwindow.h \
 	gstgldisplay.h \
 	gstglcontext.h \
-	gstglbasebuffer.h \
+	gstgldebug.h \
+	gstglbasememory.h \
+	gstglbuffer.h \
 	gstglmemory.h \
+	gstglmemorypbo.h \
 	gstglbufferpool.h \
 	gstglfilter.h \
+	gstglformat.h \
 	gstglbasefilter.h \
-	gstglshadervariables.h \
 	gstglshader.h \
+	gstglshaderstrings.h \
+	gstglsl.h \
+	gstglslstage.h \
 	gstglcolorconvert.h \
-	gstgldownload.h \
-	gstgluploadmeta.h \
 	gstglupload.h \
 	gstglapi.h \
 	gstglfeature.h \
@@ -905,9 +935,17 @@
 	gstglsyncmeta.h \
 	gstglviewconvert.h \
 	gstgloverlaycompositor.h \
+	gstglquery.h \
+	gstglcontrolbindingproxy.h \
 	gstgl_fwd.h \
+	gstgl_enums.h \
 	gl.h
 
+noinst_HEADERS = \
+	gstglsl_private.h \
+	utils/opengl_versions.h \
+	utils/gles_versions.h
+
 libgstgl_@GST_API_VERSION@_la_LIBADD = $(GMODULE_NO_EXPORT_LIBS) \
 	$(GST_PLUGINS_BASE_LIBS) -lgstvideo-$(GST_API_VERSION) \
 	$(GST_BASE_LIBS) $(GST_LIBS) $(GL_LIBS) $(am__append_2) \
@@ -1023,23 +1061,29 @@
 	-rm -f *.tab.c
 
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstgl_@GST_API_VERSION@_la-gstglapi.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstgl_@GST_API_VERSION@_la-gstglbasebuffer.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstgl_@GST_API_VERSION@_la-gstglbasefilter.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstgl_@GST_API_VERSION@_la-gstglbasememory.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstgl_@GST_API_VERSION@_la-gstglbuffer.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstgl_@GST_API_VERSION@_la-gstglbufferpool.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstgl_@GST_API_VERSION@_la-gstglcolorconvert.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstgl_@GST_API_VERSION@_la-gstglcontext.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstgl_@GST_API_VERSION@_la-gstglcontrolbindingproxy.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstgl_@GST_API_VERSION@_la-gstgldebug.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstgl_@GST_API_VERSION@_la-gstgldisplay.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstgl_@GST_API_VERSION@_la-gstgldownload.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstgl_@GST_API_VERSION@_la-gstglfeature.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstgl_@GST_API_VERSION@_la-gstglfilter.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstgl_@GST_API_VERSION@_la-gstglformat.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstgl_@GST_API_VERSION@_la-gstglframebuffer.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstgl_@GST_API_VERSION@_la-gstglmemory.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstgl_@GST_API_VERSION@_la-gstglmemorypbo.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstgl_@GST_API_VERSION@_la-gstgloverlaycompositor.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstgl_@GST_API_VERSION@_la-gstglquery.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstgl_@GST_API_VERSION@_la-gstglshader.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstgl_@GST_API_VERSION@_la-gstglshadervariables.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstgl_@GST_API_VERSION@_la-gstglshaderstrings.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstgl_@GST_API_VERSION@_la-gstglsl.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstgl_@GST_API_VERSION@_la-gstglslstage.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstgl_@GST_API_VERSION@_la-gstglsyncmeta.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstgl_@GST_API_VERSION@_la-gstglupload.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstgl_@GST_API_VERSION@_la-gstgluploadmeta.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstgl_@GST_API_VERSION@_la-gstglutils.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstgl_@GST_API_VERSION@_la-gstglviewconvert.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstgl_@GST_API_VERSION@_la-gstglwindow.Plo@am__quote@
@@ -1082,12 +1126,26 @@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstgl_@GST_API_VERSION@_la_CFLAGS) $(CFLAGS) -c -o libgstgl_@GST_API_VERSION@_la-gstglcontext.lo `test -f 'gstglcontext.c' || echo '$(srcdir)/'`gstglcontext.c
 
-libgstgl_@GST_API_VERSION@_la-gstglbasebuffer.lo: gstglbasebuffer.c
-@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstgl_@GST_API_VERSION@_la_CFLAGS) $(CFLAGS) -MT libgstgl_@GST_API_VERSION@_la-gstglbasebuffer.lo -MD -MP -MF $(DEPDIR)/libgstgl_@GST_API_VERSION@_la-gstglbasebuffer.Tpo -c -o libgstgl_@GST_API_VERSION@_la-gstglbasebuffer.lo `test -f 'gstglbasebuffer.c' || echo '$(srcdir)/'`gstglbasebuffer.c
-@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstgl_@GST_API_VERSION@_la-gstglbasebuffer.Tpo $(DEPDIR)/libgstgl_@GST_API_VERSION@_la-gstglbasebuffer.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='gstglbasebuffer.c' object='libgstgl_@GST_API_VERSION@_la-gstglbasebuffer.lo' libtool=yes @AMDEPBACKSLASH@
+libgstgl_@GST_API_VERSION@_la-gstgldebug.lo: gstgldebug.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstgl_@GST_API_VERSION@_la_CFLAGS) $(CFLAGS) -MT libgstgl_@GST_API_VERSION@_la-gstgldebug.lo -MD -MP -MF $(DEPDIR)/libgstgl_@GST_API_VERSION@_la-gstgldebug.Tpo -c -o libgstgl_@GST_API_VERSION@_la-gstgldebug.lo `test -f 'gstgldebug.c' || echo '$(srcdir)/'`gstgldebug.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstgl_@GST_API_VERSION@_la-gstgldebug.Tpo $(DEPDIR)/libgstgl_@GST_API_VERSION@_la-gstgldebug.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='gstgldebug.c' object='libgstgl_@GST_API_VERSION@_la-gstgldebug.lo' libtool=yes @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstgl_@GST_API_VERSION@_la_CFLAGS) $(CFLAGS) -c -o libgstgl_@GST_API_VERSION@_la-gstglbasebuffer.lo `test -f 'gstglbasebuffer.c' || echo '$(srcdir)/'`gstglbasebuffer.c
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstgl_@GST_API_VERSION@_la_CFLAGS) $(CFLAGS) -c -o libgstgl_@GST_API_VERSION@_la-gstgldebug.lo `test -f 'gstgldebug.c' || echo '$(srcdir)/'`gstgldebug.c
+
+libgstgl_@GST_API_VERSION@_la-gstglbasememory.lo: gstglbasememory.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstgl_@GST_API_VERSION@_la_CFLAGS) $(CFLAGS) -MT libgstgl_@GST_API_VERSION@_la-gstglbasememory.lo -MD -MP -MF $(DEPDIR)/libgstgl_@GST_API_VERSION@_la-gstglbasememory.Tpo -c -o libgstgl_@GST_API_VERSION@_la-gstglbasememory.lo `test -f 'gstglbasememory.c' || echo '$(srcdir)/'`gstglbasememory.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstgl_@GST_API_VERSION@_la-gstglbasememory.Tpo $(DEPDIR)/libgstgl_@GST_API_VERSION@_la-gstglbasememory.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='gstglbasememory.c' object='libgstgl_@GST_API_VERSION@_la-gstglbasememory.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstgl_@GST_API_VERSION@_la_CFLAGS) $(CFLAGS) -c -o libgstgl_@GST_API_VERSION@_la-gstglbasememory.lo `test -f 'gstglbasememory.c' || echo '$(srcdir)/'`gstglbasememory.c
+
+libgstgl_@GST_API_VERSION@_la-gstglbuffer.lo: gstglbuffer.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstgl_@GST_API_VERSION@_la_CFLAGS) $(CFLAGS) -MT libgstgl_@GST_API_VERSION@_la-gstglbuffer.lo -MD -MP -MF $(DEPDIR)/libgstgl_@GST_API_VERSION@_la-gstglbuffer.Tpo -c -o libgstgl_@GST_API_VERSION@_la-gstglbuffer.lo `test -f 'gstglbuffer.c' || echo '$(srcdir)/'`gstglbuffer.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstgl_@GST_API_VERSION@_la-gstglbuffer.Tpo $(DEPDIR)/libgstgl_@GST_API_VERSION@_la-gstglbuffer.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='gstglbuffer.c' object='libgstgl_@GST_API_VERSION@_la-gstglbuffer.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstgl_@GST_API_VERSION@_la_CFLAGS) $(CFLAGS) -c -o libgstgl_@GST_API_VERSION@_la-gstglbuffer.lo `test -f 'gstglbuffer.c' || echo '$(srcdir)/'`gstglbuffer.c
 
 libgstgl_@GST_API_VERSION@_la-gstglmemory.lo: gstglmemory.c
 @am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstgl_@GST_API_VERSION@_la_CFLAGS) $(CFLAGS) -MT libgstgl_@GST_API_VERSION@_la-gstglmemory.lo -MD -MP -MF $(DEPDIR)/libgstgl_@GST_API_VERSION@_la-gstglmemory.Tpo -c -o libgstgl_@GST_API_VERSION@_la-gstglmemory.lo `test -f 'gstglmemory.c' || echo '$(srcdir)/'`gstglmemory.c
@@ -1096,6 +1154,13 @@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstgl_@GST_API_VERSION@_la_CFLAGS) $(CFLAGS) -c -o libgstgl_@GST_API_VERSION@_la-gstglmemory.lo `test -f 'gstglmemory.c' || echo '$(srcdir)/'`gstglmemory.c
 
+libgstgl_@GST_API_VERSION@_la-gstglmemorypbo.lo: gstglmemorypbo.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstgl_@GST_API_VERSION@_la_CFLAGS) $(CFLAGS) -MT libgstgl_@GST_API_VERSION@_la-gstglmemorypbo.lo -MD -MP -MF $(DEPDIR)/libgstgl_@GST_API_VERSION@_la-gstglmemorypbo.Tpo -c -o libgstgl_@GST_API_VERSION@_la-gstglmemorypbo.lo `test -f 'gstglmemorypbo.c' || echo '$(srcdir)/'`gstglmemorypbo.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstgl_@GST_API_VERSION@_la-gstglmemorypbo.Tpo $(DEPDIR)/libgstgl_@GST_API_VERSION@_la-gstglmemorypbo.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='gstglmemorypbo.c' object='libgstgl_@GST_API_VERSION@_la-gstglmemorypbo.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstgl_@GST_API_VERSION@_la_CFLAGS) $(CFLAGS) -c -o libgstgl_@GST_API_VERSION@_la-gstglmemorypbo.lo `test -f 'gstglmemorypbo.c' || echo '$(srcdir)/'`gstglmemorypbo.c
+
 libgstgl_@GST_API_VERSION@_la-gstglbufferpool.lo: gstglbufferpool.c
 @am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstgl_@GST_API_VERSION@_la_CFLAGS) $(CFLAGS) -MT libgstgl_@GST_API_VERSION@_la-gstglbufferpool.lo -MD -MP -MF $(DEPDIR)/libgstgl_@GST_API_VERSION@_la-gstglbufferpool.Tpo -c -o libgstgl_@GST_API_VERSION@_la-gstglbufferpool.lo `test -f 'gstglbufferpool.c' || echo '$(srcdir)/'`gstglbufferpool.c
 @am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstgl_@GST_API_VERSION@_la-gstglbufferpool.Tpo $(DEPDIR)/libgstgl_@GST_API_VERSION@_la-gstglbufferpool.Plo
@@ -1110,6 +1175,13 @@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstgl_@GST_API_VERSION@_la_CFLAGS) $(CFLAGS) -c -o libgstgl_@GST_API_VERSION@_la-gstglfilter.lo `test -f 'gstglfilter.c' || echo '$(srcdir)/'`gstglfilter.c
 
+libgstgl_@GST_API_VERSION@_la-gstglformat.lo: gstglformat.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstgl_@GST_API_VERSION@_la_CFLAGS) $(CFLAGS) -MT libgstgl_@GST_API_VERSION@_la-gstglformat.lo -MD -MP -MF $(DEPDIR)/libgstgl_@GST_API_VERSION@_la-gstglformat.Tpo -c -o libgstgl_@GST_API_VERSION@_la-gstglformat.lo `test -f 'gstglformat.c' || echo '$(srcdir)/'`gstglformat.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstgl_@GST_API_VERSION@_la-gstglformat.Tpo $(DEPDIR)/libgstgl_@GST_API_VERSION@_la-gstglformat.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='gstglformat.c' object='libgstgl_@GST_API_VERSION@_la-gstglformat.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstgl_@GST_API_VERSION@_la_CFLAGS) $(CFLAGS) -c -o libgstgl_@GST_API_VERSION@_la-gstglformat.lo `test -f 'gstglformat.c' || echo '$(srcdir)/'`gstglformat.c
+
 libgstgl_@GST_API_VERSION@_la-gstglbasefilter.lo: gstglbasefilter.c
 @am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstgl_@GST_API_VERSION@_la_CFLAGS) $(CFLAGS) -MT libgstgl_@GST_API_VERSION@_la-gstglbasefilter.lo -MD -MP -MF $(DEPDIR)/libgstgl_@GST_API_VERSION@_la-gstglbasefilter.Tpo -c -o libgstgl_@GST_API_VERSION@_la-gstglbasefilter.lo `test -f 'gstglbasefilter.c' || echo '$(srcdir)/'`gstglbasefilter.c
 @am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstgl_@GST_API_VERSION@_la-gstglbasefilter.Tpo $(DEPDIR)/libgstgl_@GST_API_VERSION@_la-gstglbasefilter.Plo
@@ -1124,12 +1196,26 @@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstgl_@GST_API_VERSION@_la_CFLAGS) $(CFLAGS) -c -o libgstgl_@GST_API_VERSION@_la-gstglshader.lo `test -f 'gstglshader.c' || echo '$(srcdir)/'`gstglshader.c
 
-libgstgl_@GST_API_VERSION@_la-gstglshadervariables.lo: gstglshadervariables.c
-@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstgl_@GST_API_VERSION@_la_CFLAGS) $(CFLAGS) -MT libgstgl_@GST_API_VERSION@_la-gstglshadervariables.lo -MD -MP -MF $(DEPDIR)/libgstgl_@GST_API_VERSION@_la-gstglshadervariables.Tpo -c -o libgstgl_@GST_API_VERSION@_la-gstglshadervariables.lo `test -f 'gstglshadervariables.c' || echo '$(srcdir)/'`gstglshadervariables.c
-@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstgl_@GST_API_VERSION@_la-gstglshadervariables.Tpo $(DEPDIR)/libgstgl_@GST_API_VERSION@_la-gstglshadervariables.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='gstglshadervariables.c' object='libgstgl_@GST_API_VERSION@_la-gstglshadervariables.lo' libtool=yes @AMDEPBACKSLASH@
+libgstgl_@GST_API_VERSION@_la-gstglshaderstrings.lo: gstglshaderstrings.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstgl_@GST_API_VERSION@_la_CFLAGS) $(CFLAGS) -MT libgstgl_@GST_API_VERSION@_la-gstglshaderstrings.lo -MD -MP -MF $(DEPDIR)/libgstgl_@GST_API_VERSION@_la-gstglshaderstrings.Tpo -c -o libgstgl_@GST_API_VERSION@_la-gstglshaderstrings.lo `test -f 'gstglshaderstrings.c' || echo '$(srcdir)/'`gstglshaderstrings.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstgl_@GST_API_VERSION@_la-gstglshaderstrings.Tpo $(DEPDIR)/libgstgl_@GST_API_VERSION@_la-gstglshaderstrings.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='gstglshaderstrings.c' object='libgstgl_@GST_API_VERSION@_la-gstglshaderstrings.lo' libtool=yes @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstgl_@GST_API_VERSION@_la_CFLAGS) $(CFLAGS) -c -o libgstgl_@GST_API_VERSION@_la-gstglshadervariables.lo `test -f 'gstglshadervariables.c' || echo '$(srcdir)/'`gstglshadervariables.c
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstgl_@GST_API_VERSION@_la_CFLAGS) $(CFLAGS) -c -o libgstgl_@GST_API_VERSION@_la-gstglshaderstrings.lo `test -f 'gstglshaderstrings.c' || echo '$(srcdir)/'`gstglshaderstrings.c
+
+libgstgl_@GST_API_VERSION@_la-gstglsl.lo: gstglsl.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstgl_@GST_API_VERSION@_la_CFLAGS) $(CFLAGS) -MT libgstgl_@GST_API_VERSION@_la-gstglsl.lo -MD -MP -MF $(DEPDIR)/libgstgl_@GST_API_VERSION@_la-gstglsl.Tpo -c -o libgstgl_@GST_API_VERSION@_la-gstglsl.lo `test -f 'gstglsl.c' || echo '$(srcdir)/'`gstglsl.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstgl_@GST_API_VERSION@_la-gstglsl.Tpo $(DEPDIR)/libgstgl_@GST_API_VERSION@_la-gstglsl.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='gstglsl.c' object='libgstgl_@GST_API_VERSION@_la-gstglsl.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstgl_@GST_API_VERSION@_la_CFLAGS) $(CFLAGS) -c -o libgstgl_@GST_API_VERSION@_la-gstglsl.lo `test -f 'gstglsl.c' || echo '$(srcdir)/'`gstglsl.c
+
+libgstgl_@GST_API_VERSION@_la-gstglslstage.lo: gstglslstage.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstgl_@GST_API_VERSION@_la_CFLAGS) $(CFLAGS) -MT libgstgl_@GST_API_VERSION@_la-gstglslstage.lo -MD -MP -MF $(DEPDIR)/libgstgl_@GST_API_VERSION@_la-gstglslstage.Tpo -c -o libgstgl_@GST_API_VERSION@_la-gstglslstage.lo `test -f 'gstglslstage.c' || echo '$(srcdir)/'`gstglslstage.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstgl_@GST_API_VERSION@_la-gstglslstage.Tpo $(DEPDIR)/libgstgl_@GST_API_VERSION@_la-gstglslstage.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='gstglslstage.c' object='libgstgl_@GST_API_VERSION@_la-gstglslstage.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstgl_@GST_API_VERSION@_la_CFLAGS) $(CFLAGS) -c -o libgstgl_@GST_API_VERSION@_la-gstglslstage.lo `test -f 'gstglslstage.c' || echo '$(srcdir)/'`gstglslstage.c
 
 libgstgl_@GST_API_VERSION@_la-gstglcolorconvert.lo: gstglcolorconvert.c
 @am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstgl_@GST_API_VERSION@_la_CFLAGS) $(CFLAGS) -MT libgstgl_@GST_API_VERSION@_la-gstglcolorconvert.lo -MD -MP -MF $(DEPDIR)/libgstgl_@GST_API_VERSION@_la-gstglcolorconvert.Tpo -c -o libgstgl_@GST_API_VERSION@_la-gstglcolorconvert.lo `test -f 'gstglcolorconvert.c' || echo '$(srcdir)/'`gstglcolorconvert.c
@@ -1138,13 +1224,6 @@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstgl_@GST_API_VERSION@_la_CFLAGS) $(CFLAGS) -c -o libgstgl_@GST_API_VERSION@_la-gstglcolorconvert.lo `test -f 'gstglcolorconvert.c' || echo '$(srcdir)/'`gstglcolorconvert.c
 
-libgstgl_@GST_API_VERSION@_la-gstgldownload.lo: gstgldownload.c
-@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstgl_@GST_API_VERSION@_la_CFLAGS) $(CFLAGS) -MT libgstgl_@GST_API_VERSION@_la-gstgldownload.lo -MD -MP -MF $(DEPDIR)/libgstgl_@GST_API_VERSION@_la-gstgldownload.Tpo -c -o libgstgl_@GST_API_VERSION@_la-gstgldownload.lo `test -f 'gstgldownload.c' || echo '$(srcdir)/'`gstgldownload.c
-@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstgl_@GST_API_VERSION@_la-gstgldownload.Tpo $(DEPDIR)/libgstgl_@GST_API_VERSION@_la-gstgldownload.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='gstgldownload.c' object='libgstgl_@GST_API_VERSION@_la-gstgldownload.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstgl_@GST_API_VERSION@_la_CFLAGS) $(CFLAGS) -c -o libgstgl_@GST_API_VERSION@_la-gstgldownload.lo `test -f 'gstgldownload.c' || echo '$(srcdir)/'`gstgldownload.c
-
 libgstgl_@GST_API_VERSION@_la-gstglupload.lo: gstglupload.c
 @am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstgl_@GST_API_VERSION@_la_CFLAGS) $(CFLAGS) -MT libgstgl_@GST_API_VERSION@_la-gstglupload.lo -MD -MP -MF $(DEPDIR)/libgstgl_@GST_API_VERSION@_la-gstglupload.Tpo -c -o libgstgl_@GST_API_VERSION@_la-gstglupload.lo `test -f 'gstglupload.c' || echo '$(srcdir)/'`gstglupload.c
 @am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstgl_@GST_API_VERSION@_la-gstglupload.Tpo $(DEPDIR)/libgstgl_@GST_API_VERSION@_la-gstglupload.Plo
@@ -1152,13 +1231,6 @@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstgl_@GST_API_VERSION@_la_CFLAGS) $(CFLAGS) -c -o libgstgl_@GST_API_VERSION@_la-gstglupload.lo `test -f 'gstglupload.c' || echo '$(srcdir)/'`gstglupload.c
 
-libgstgl_@GST_API_VERSION@_la-gstgluploadmeta.lo: gstgluploadmeta.c
-@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstgl_@GST_API_VERSION@_la_CFLAGS) $(CFLAGS) -MT libgstgl_@GST_API_VERSION@_la-gstgluploadmeta.lo -MD -MP -MF $(DEPDIR)/libgstgl_@GST_API_VERSION@_la-gstgluploadmeta.Tpo -c -o libgstgl_@GST_API_VERSION@_la-gstgluploadmeta.lo `test -f 'gstgluploadmeta.c' || echo '$(srcdir)/'`gstgluploadmeta.c
-@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstgl_@GST_API_VERSION@_la-gstgluploadmeta.Tpo $(DEPDIR)/libgstgl_@GST_API_VERSION@_la-gstgluploadmeta.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='gstgluploadmeta.c' object='libgstgl_@GST_API_VERSION@_la-gstgluploadmeta.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstgl_@GST_API_VERSION@_la_CFLAGS) $(CFLAGS) -c -o libgstgl_@GST_API_VERSION@_la-gstgluploadmeta.lo `test -f 'gstgluploadmeta.c' || echo '$(srcdir)/'`gstgluploadmeta.c
-
 libgstgl_@GST_API_VERSION@_la-gstglwindow.lo: gstglwindow.c
 @am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstgl_@GST_API_VERSION@_la_CFLAGS) $(CFLAGS) -MT libgstgl_@GST_API_VERSION@_la-gstglwindow.lo -MD -MP -MF $(DEPDIR)/libgstgl_@GST_API_VERSION@_la-gstglwindow.Tpo -c -o libgstgl_@GST_API_VERSION@_la-gstglwindow.lo `test -f 'gstglwindow.c' || echo '$(srcdir)/'`gstglwindow.c
 @am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstgl_@GST_API_VERSION@_la-gstglwindow.Tpo $(DEPDIR)/libgstgl_@GST_API_VERSION@_la-gstglwindow.Plo
@@ -1215,6 +1287,20 @@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstgl_@GST_API_VERSION@_la_CFLAGS) $(CFLAGS) -c -o libgstgl_@GST_API_VERSION@_la-gstgloverlaycompositor.lo `test -f 'gstgloverlaycompositor.c' || echo '$(srcdir)/'`gstgloverlaycompositor.c
 
+libgstgl_@GST_API_VERSION@_la-gstglquery.lo: gstglquery.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstgl_@GST_API_VERSION@_la_CFLAGS) $(CFLAGS) -MT libgstgl_@GST_API_VERSION@_la-gstglquery.lo -MD -MP -MF $(DEPDIR)/libgstgl_@GST_API_VERSION@_la-gstglquery.Tpo -c -o libgstgl_@GST_API_VERSION@_la-gstglquery.lo `test -f 'gstglquery.c' || echo '$(srcdir)/'`gstglquery.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstgl_@GST_API_VERSION@_la-gstglquery.Tpo $(DEPDIR)/libgstgl_@GST_API_VERSION@_la-gstglquery.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='gstglquery.c' object='libgstgl_@GST_API_VERSION@_la-gstglquery.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstgl_@GST_API_VERSION@_la_CFLAGS) $(CFLAGS) -c -o libgstgl_@GST_API_VERSION@_la-gstglquery.lo `test -f 'gstglquery.c' || echo '$(srcdir)/'`gstglquery.c
+
+libgstgl_@GST_API_VERSION@_la-gstglcontrolbindingproxy.lo: gstglcontrolbindingproxy.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstgl_@GST_API_VERSION@_la_CFLAGS) $(CFLAGS) -MT libgstgl_@GST_API_VERSION@_la-gstglcontrolbindingproxy.lo -MD -MP -MF $(DEPDIR)/libgstgl_@GST_API_VERSION@_la-gstglcontrolbindingproxy.Tpo -c -o libgstgl_@GST_API_VERSION@_la-gstglcontrolbindingproxy.lo `test -f 'gstglcontrolbindingproxy.c' || echo '$(srcdir)/'`gstglcontrolbindingproxy.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstgl_@GST_API_VERSION@_la-gstglcontrolbindingproxy.Tpo $(DEPDIR)/libgstgl_@GST_API_VERSION@_la-gstglcontrolbindingproxy.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='gstglcontrolbindingproxy.c' object='libgstgl_@GST_API_VERSION@_la-gstglcontrolbindingproxy.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstgl_@GST_API_VERSION@_la_CFLAGS) $(CFLAGS) -c -o libgstgl_@GST_API_VERSION@_la-gstglcontrolbindingproxy.lo `test -f 'gstglcontrolbindingproxy.c' || echo '$(srcdir)/'`gstglcontrolbindingproxy.c
+
 mostlyclean-libtool:
 	-rm -f *.lo
 
@@ -1607,7 +1693,8 @@
 @HAVE_INTROSPECTION_TRUE@		GST_PLUGIN_SYSTEM_PATH_1_0="" GST_PLUGIN_PATH_1_0="" GST_REGISTRY_UPDATE=no \
 @HAVE_INTROSPECTION_TRUE@		$(INTROSPECTION_SCANNER) -v --namespace GstGL \
 @HAVE_INTROSPECTION_TRUE@		--nsversion=@GST_API_VERSION@ \
-@HAVE_INTROSPECTION_TRUE@		--strip-prefix=Gst \
+@HAVE_INTROSPECTION_TRUE@		--identifier-prefix=Gst \
+@HAVE_INTROSPECTION_TRUE@		--symbol-prefix=gst \
 @HAVE_INTROSPECTION_TRUE@		--warn-all \
 @HAVE_INTROSPECTION_TRUE@		--c-include "gst/gl/gl.h" \
 @HAVE_INTROSPECTION_TRUE@		-I$(top_srcdir)/gst-libs \
@@ -1624,7 +1711,7 @@
 @HAVE_INTROSPECTION_TRUE@		--pkg gstreamer-base-@GST_API_VERSION@ \
 @HAVE_INTROSPECTION_TRUE@		--pkg gstreamer-video-@GST_API_VERSION@ \
 @HAVE_INTROSPECTION_TRUE@		--pkg-export gstreamer-gl-@GST_API_VERSION@ \
-@HAVE_INTROSPECTION_TRUE@		--add-init-section="gst_init(NULL,NULL);" \
+@HAVE_INTROSPECTION_TRUE@		--add-init-section="$(INTROSPECTION_INIT)" \
 @HAVE_INTROSPECTION_TRUE@		-DGST_USE_UNSTABLE_API \
 @HAVE_INTROSPECTION_TRUE@		--output $@ \
 @HAVE_INTROSPECTION_TRUE@		$(gir_headers) \
diff --git a/gst-libs/gst/gl/android/Makefile.in b/gst-libs/gst/gl/android/Makefile.in
index 2af0f10..e5e7826 100644
--- a/gst-libs/gst/gl/android/Makefile.in
+++ b/gst-libs/gst/gl/android/Makefile.in
@@ -116,16 +116,15 @@
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
 	$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
-	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gsettings.m4 \
-	$(top_srcdir)/m4/gst-fionread.m4 $(top_srcdir)/m4/gst-sdl.m4 \
-	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
-	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
-	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libgcrypt.m4 \
-	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
-	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
-	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
-	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
-	$(top_srcdir)/configure.ac
+	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gst-fionread.m4 \
+	$(top_srcdir)/m4/gst-sdl.m4 $(top_srcdir)/m4/iconv.m4 \
+	$(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \
+	$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
+	$(top_srcdir)/m4/libgcrypt.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
+	$(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 DIST_COMMON = $(srcdir)/Makefile.am $(libgstglandroidinclude_HEADERS) \
@@ -273,6 +272,8 @@
 CLUTTER_X11_LIBS = @CLUTTER_X11_LIBS@
 CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
+CUDA_CFLAGS = @CUDA_CFLAGS@
+CUDA_LIBS = @CUDA_LIBS@
 CURL_CFLAGS = @CURL_CFLAGS@
 CURL_LIBS = @CURL_LIBS@
 CXX = @CXX@
@@ -310,6 +311,8 @@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
+EGL_CFLAGS = @EGL_CFLAGS@
+EGL_LIBS = @EGL_LIBS@
 EGREP = @EGREP@
 ERROR_CFLAGS = @ERROR_CFLAGS@
 ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
@@ -318,7 +321,6 @@
 EXIF_CFLAGS = @EXIF_CFLAGS@
 EXIF_LIBS = @EXIF_LIBS@
 FAAC_LIBS = @FAAC_LIBS@
-FAAD_IS_NEAAC = @FAAD_IS_NEAAC@
 FAAD_LIBS = @FAAD_LIBS@
 FFLAGS = @FFLAGS@
 FGREP = @FGREP@
@@ -337,8 +339,9 @@
 GIO_LIBS = @GIO_LIBS@
 GIO_UNIX_CFLAGS = @GIO_UNIX_CFLAGS@
 GIO_UNIX_LIBS = @GIO_UNIX_LIBS@
+GLES2_CFLAGS = @GLES2_CFLAGS@
+GLES2_LIBS = @GLES2_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
-GLIB_COMPILE_SCHEMAS = @GLIB_COMPILE_SCHEMAS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
@@ -355,16 +358,17 @@
 GMODULE_NO_EXPORT_LIBS = @GMODULE_NO_EXPORT_LIBS@
 GMSGFMT = @GMSGFMT@
 GMSGFMT_015 = @GMSGFMT_015@
+GNUSTL_CFLAGS = @GNUSTL_CFLAGS@
+GNUSTL_LIBS = @GNUSTL_LIBS@
 GRAPHENE_CFLAGS = @GRAPHENE_CFLAGS@
 GRAPHENE_LIBS = @GRAPHENE_LIBS@
 GREP = @GREP@
-GSETTINGS_CFLAGS = @GSETTINGS_CFLAGS@
-GSETTINGS_DISABLE_SCHEMAS_COMPILE = @GSETTINGS_DISABLE_SCHEMAS_COMPILE@
-GSETTINGS_LIBS = @GSETTINGS_LIBS@
 GSM_LIBS = @GSM_LIBS@
 GSTPB_PLUGINS_DIR = @GSTPB_PLUGINS_DIR@
 GSTPB_PREFIX = @GSTPB_PREFIX@
 GST_AGE = @GST_AGE@
+GST_ALLOCATORS_CFLAGS = @GST_ALLOCATORS_CFLAGS@
+GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
 GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
 GST_API_VERSION = @GST_API_VERSION@
 GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
@@ -390,6 +394,8 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PBUTILS_CFLAGS = @GST_PBUTILS_CFLAGS@
+GST_PBUTILS_LIBS = @GST_PBUTILS_LIBS@
 GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BAD_CFLAGS = @GST_PLUGINS_BAD_CFLAGS@
@@ -415,6 +421,8 @@
 GST_PREFIX = @GST_PREFIX@
 GST_REVISION = @GST_REVISION@
 GST_TOOLS_DIR = @GST_TOOLS_DIR@
+GST_VIDEO_CFLAGS = @GST_VIDEO_CFLAGS@
+GST_VIDEO_LIBS = @GST_VIDEO_LIBS@
 GTK3_CFLAGS = @GTK3_CFLAGS@
 GTK3_GL_CFLAGS = @GTK3_GL_CFLAGS@
 GTK3_GL_LIBS = @GTK3_GL_LIBS@
@@ -516,6 +524,7 @@
 LTLIBICONV = @LTLIBICONV@
 LTLIBINTL = @LTLIBINTL@
 LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
 MANIFEST_TOOL = @MANIFEST_TOOL@
@@ -529,8 +538,6 @@
 MODPLUG_LIBS = @MODPLUG_LIBS@
 MPEG2ENC_CFLAGS = @MPEG2ENC_CFLAGS@
 MPEG2ENC_LIBS = @MPEG2ENC_LIBS@
-MPG123_CFLAGS = @MPG123_CFLAGS@
-MPG123_LIBS = @MPG123_LIBS@
 MPLEX_CFLAGS = @MPLEX_CFLAGS@
 MPLEX_LDFLAGS = @MPLEX_LDFLAGS@
 MPLEX_LIBS = @MPLEX_LIBS@
@@ -546,6 +553,8 @@
 NETTLE_LIBS = @NETTLE_LIBS@
 NM = @NM@
 NMEDIT = @NMEDIT@
+NVENCODE_CFLAGS = @NVENCODE_CFLAGS@
+NVENCODE_LIBS = @NVENCODE_LIBS@
 OBJC = @OBJC@
 OBJCDEPMODE = @OBJCDEPMODE@
 OBJCFLAGS = @OBJCFLAGS@
@@ -603,16 +612,18 @@
 PYTHON_PLATFORM = @PYTHON_PLATFORM@
 PYTHON_PREFIX = @PYTHON_PREFIX@
 PYTHON_VERSION = @PYTHON_VERSION@
+QT_ANDROID_CFLAGS = @QT_ANDROID_CFLAGS@
+QT_ANDROID_LIBS = @QT_ANDROID_LIBS@
 QT_CFLAGS = @QT_CFLAGS@
 QT_LIBS = @QT_LIBS@
+QT_MAC_CFLAGS = @QT_MAC_CFLAGS@
+QT_MAC_LIBS = @QT_MAC_LIBS@
 QT_WAYLAND_CFLAGS = @QT_WAYLAND_CFLAGS@
 QT_WAYLAND_LIBS = @QT_WAYLAND_LIBS@
 QT_X11_CFLAGS = @QT_X11_CFLAGS@
 QT_X11_LIBS = @QT_X11_LIBS@
 RANLIB = @RANLIB@
 RCC = @RCC@
-RSVG_2_36_2_CFLAGS = @RSVG_2_36_2_CFLAGS@
-RSVG_2_36_2_LIBS = @RSVG_2_36_2_LIBS@
 RSVG_CFLAGS = @RSVG_CFLAGS@
 RSVG_LIBS = @RSVG_LIBS@
 RTMP_CFLAGS = @RTMP_CFLAGS@
@@ -664,6 +675,7 @@
 VOAACENC_LIBS = @VOAACENC_LIBS@
 VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
 VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VULKAN_LIBS = @VULKAN_LIBS@
 WARNING_CFLAGS = @WARNING_CFLAGS@
 WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
 WARNING_OBJCFLAGS = @WARNING_OBJCFLAGS@
@@ -674,6 +686,7 @@
 WAYLAND_LIBS = @WAYLAND_LIBS@
 WEBP_CFLAGS = @WEBP_CFLAGS@
 WEBP_LIBS = @WEBP_LIBS@
+WGET = @WGET@
 WILDMIDI_CFLAGS = @WILDMIDI_CFLAGS@
 WILDMIDI_LIBS = @WILDMIDI_LIBS@
 WINKS_LIBS = @WINKS_LIBS@
@@ -683,6 +696,8 @@
 X11_LIBS = @X11_LIBS@
 X265_CFLAGS = @X265_CFLAGS@
 X265_LIBS = @X265_LIBS@
+XCB_CFLAGS = @XCB_CFLAGS@
+XCB_LIBS = @XCB_LIBS@
 XCOMPOSITE_CFLAGS = @XCOMPOSITE_CFLAGS@
 XCOMPOSITE_LIBS = @XCOMPOSITE_LIBS@
 XGETTEXT = @XGETTEXT@
@@ -720,7 +735,6 @@
 docdir = @docdir@
 dvidir = @dvidir@
 exec_prefix = @exec_prefix@
-gsettingsschemadir = @gsettingsschemadir@
 host = @host@
 host_alias = @host_alias@
 host_cpu = @host_cpu@
diff --git a/gst-libs/gst/gl/android/gstglwindow_android_egl.c b/gst-libs/gst/gl/android/gstglwindow_android_egl.c
index 9837756..f234acf 100644
--- a/gst-libs/gst/gl/android/gstglwindow_android_egl.c
+++ b/gst-libs/gst/gl/android/gstglwindow_android_egl.c
@@ -57,8 +57,6 @@
       GST_DEBUG_FUNCPTR (gst_gl_window_android_egl_get_window_handle);
   window_class->set_window_handle =
       GST_DEBUG_FUNCPTR (gst_gl_window_android_egl_set_window_handle);
-  window_class->draw_unlocked =
-      GST_DEBUG_FUNCPTR (gst_gl_window_android_egl_draw);
   window_class->draw = GST_DEBUG_FUNCPTR (gst_gl_window_android_egl_draw);
 }
 
@@ -108,7 +106,7 @@
 
   if (context_egl->egl_surface) {
     gint width, height;
-    gint window_width, window_height;
+    guint window_width, window_height;
 
     gst_gl_window_get_surface_dimensions (window, &window_width,
         &window_height);
diff --git a/gst-libs/gst/gl/android/gstglwindow_android_egl.h b/gst-libs/gst/gl/android/gstglwindow_android_egl.h
index eaada44..b8dc66d 100644
--- a/gst-libs/gst/gl/android/gstglwindow_android_egl.h
+++ b/gst-libs/gst/gl/android/gstglwindow_android_egl.h
@@ -30,8 +30,8 @@
 #define GST_GL_TYPE_WINDOW_ANDROID_EGL         (gst_gl_window_android_egl_get_type())
 #define GST_GL_WINDOW_ANDROID_EGL(o)           (G_TYPE_CHECK_INSTANCE_CAST((o), GST_GL_TYPE_WINDOW_ANDROID_EGL, GstGLWindowAndroidEGL))
 #define GST_GL_WINDOW_ANDROID_EGL_CLASS(k)     (G_TYPE_CHECK_CLASS((k), GST_GL_TYPE_WINDOW_ANDROID_EGL, GstGLWindowAndroidEGLClass))
-#define GST_GL_IS_WINDOW_ANDROID_EGL(o)        (G_TYPE_CHECK_INSTANCE_TYPE((o), GST_GL_TYPE_WINDOW_ANDROID_EGL))
-#define GST_GL_IS_WINDOW_ANDROID_EGL_CLASS(k)  (G_TYPE_CHECK_CLASS_TYPE((k), GST_GL_TYPE_WINDOW_ANDROID_EGL))
+#define GST_IS_GL_WINDOW_ANDROID_EGL(o)        (G_TYPE_CHECK_INSTANCE_TYPE((o), GST_GL_TYPE_WINDOW_ANDROID_EGL))
+#define GST_IS_GL_WINDOW_ANDROID_EGL_CLASS(k)  (G_TYPE_CHECK_CLASS_TYPE((k), GST_GL_TYPE_WINDOW_ANDROID_EGL))
 #define GST_GL_WINDOW_ANDROID_EGL_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS((o), GST_GL_TYPE_WINDOW_ANDROID_EGL, GstGLWindowAndroidEGL_Class))
 
 typedef struct _GstGLWindowAndroidEGL        GstGLWindowAndroidEGL;
diff --git a/gst-libs/gst/gl/cocoa/Makefile.in b/gst-libs/gst/gl/cocoa/Makefile.in
index e61ddd5..4c02234 100644
--- a/gst-libs/gst/gl/cocoa/Makefile.in
+++ b/gst-libs/gst/gl/cocoa/Makefile.in
@@ -116,16 +116,15 @@
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
 	$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
-	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gsettings.m4 \
-	$(top_srcdir)/m4/gst-fionread.m4 $(top_srcdir)/m4/gst-sdl.m4 \
-	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
-	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
-	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libgcrypt.m4 \
-	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
-	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
-	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
-	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
-	$(top_srcdir)/configure.ac
+	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gst-fionread.m4 \
+	$(top_srcdir)/m4/gst-sdl.m4 $(top_srcdir)/m4/iconv.m4 \
+	$(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \
+	$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
+	$(top_srcdir)/m4/libgcrypt.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
+	$(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 DIST_COMMON = $(srcdir)/Makefile.am $(libgstgl_cocoainclude_HEADERS) \
@@ -275,6 +274,8 @@
 CLUTTER_X11_LIBS = @CLUTTER_X11_LIBS@
 CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
+CUDA_CFLAGS = @CUDA_CFLAGS@
+CUDA_LIBS = @CUDA_LIBS@
 CURL_CFLAGS = @CURL_CFLAGS@
 CURL_LIBS = @CURL_LIBS@
 CXX = @CXX@
@@ -312,6 +313,8 @@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
+EGL_CFLAGS = @EGL_CFLAGS@
+EGL_LIBS = @EGL_LIBS@
 EGREP = @EGREP@
 ERROR_CFLAGS = @ERROR_CFLAGS@
 ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
@@ -320,7 +323,6 @@
 EXIF_CFLAGS = @EXIF_CFLAGS@
 EXIF_LIBS = @EXIF_LIBS@
 FAAC_LIBS = @FAAC_LIBS@
-FAAD_IS_NEAAC = @FAAD_IS_NEAAC@
 FAAD_LIBS = @FAAD_LIBS@
 FFLAGS = @FFLAGS@
 FGREP = @FGREP@
@@ -339,8 +341,9 @@
 GIO_LIBS = @GIO_LIBS@
 GIO_UNIX_CFLAGS = @GIO_UNIX_CFLAGS@
 GIO_UNIX_LIBS = @GIO_UNIX_LIBS@
+GLES2_CFLAGS = @GLES2_CFLAGS@
+GLES2_LIBS = @GLES2_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
-GLIB_COMPILE_SCHEMAS = @GLIB_COMPILE_SCHEMAS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
@@ -357,16 +360,17 @@
 GMODULE_NO_EXPORT_LIBS = @GMODULE_NO_EXPORT_LIBS@
 GMSGFMT = @GMSGFMT@
 GMSGFMT_015 = @GMSGFMT_015@
+GNUSTL_CFLAGS = @GNUSTL_CFLAGS@
+GNUSTL_LIBS = @GNUSTL_LIBS@
 GRAPHENE_CFLAGS = @GRAPHENE_CFLAGS@
 GRAPHENE_LIBS = @GRAPHENE_LIBS@
 GREP = @GREP@
-GSETTINGS_CFLAGS = @GSETTINGS_CFLAGS@
-GSETTINGS_DISABLE_SCHEMAS_COMPILE = @GSETTINGS_DISABLE_SCHEMAS_COMPILE@
-GSETTINGS_LIBS = @GSETTINGS_LIBS@
 GSM_LIBS = @GSM_LIBS@
 GSTPB_PLUGINS_DIR = @GSTPB_PLUGINS_DIR@
 GSTPB_PREFIX = @GSTPB_PREFIX@
 GST_AGE = @GST_AGE@
+GST_ALLOCATORS_CFLAGS = @GST_ALLOCATORS_CFLAGS@
+GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
 GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
 GST_API_VERSION = @GST_API_VERSION@
 GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
@@ -392,6 +396,8 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PBUTILS_CFLAGS = @GST_PBUTILS_CFLAGS@
+GST_PBUTILS_LIBS = @GST_PBUTILS_LIBS@
 GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BAD_CFLAGS = @GST_PLUGINS_BAD_CFLAGS@
@@ -417,6 +423,8 @@
 GST_PREFIX = @GST_PREFIX@
 GST_REVISION = @GST_REVISION@
 GST_TOOLS_DIR = @GST_TOOLS_DIR@
+GST_VIDEO_CFLAGS = @GST_VIDEO_CFLAGS@
+GST_VIDEO_LIBS = @GST_VIDEO_LIBS@
 GTK3_CFLAGS = @GTK3_CFLAGS@
 GTK3_GL_CFLAGS = @GTK3_GL_CFLAGS@
 GTK3_GL_LIBS = @GTK3_GL_LIBS@
@@ -518,6 +526,7 @@
 LTLIBICONV = @LTLIBICONV@
 LTLIBINTL = @LTLIBINTL@
 LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
 MANIFEST_TOOL = @MANIFEST_TOOL@
@@ -531,8 +540,6 @@
 MODPLUG_LIBS = @MODPLUG_LIBS@
 MPEG2ENC_CFLAGS = @MPEG2ENC_CFLAGS@
 MPEG2ENC_LIBS = @MPEG2ENC_LIBS@
-MPG123_CFLAGS = @MPG123_CFLAGS@
-MPG123_LIBS = @MPG123_LIBS@
 MPLEX_CFLAGS = @MPLEX_CFLAGS@
 MPLEX_LDFLAGS = @MPLEX_LDFLAGS@
 MPLEX_LIBS = @MPLEX_LIBS@
@@ -548,6 +555,8 @@
 NETTLE_LIBS = @NETTLE_LIBS@
 NM = @NM@
 NMEDIT = @NMEDIT@
+NVENCODE_CFLAGS = @NVENCODE_CFLAGS@
+NVENCODE_LIBS = @NVENCODE_LIBS@
 OBJC = @OBJC@
 OBJCDEPMODE = @OBJCDEPMODE@
 OBJCFLAGS = @OBJCFLAGS@
@@ -605,16 +614,18 @@
 PYTHON_PLATFORM = @PYTHON_PLATFORM@
 PYTHON_PREFIX = @PYTHON_PREFIX@
 PYTHON_VERSION = @PYTHON_VERSION@
+QT_ANDROID_CFLAGS = @QT_ANDROID_CFLAGS@
+QT_ANDROID_LIBS = @QT_ANDROID_LIBS@
 QT_CFLAGS = @QT_CFLAGS@
 QT_LIBS = @QT_LIBS@
+QT_MAC_CFLAGS = @QT_MAC_CFLAGS@
+QT_MAC_LIBS = @QT_MAC_LIBS@
 QT_WAYLAND_CFLAGS = @QT_WAYLAND_CFLAGS@
 QT_WAYLAND_LIBS = @QT_WAYLAND_LIBS@
 QT_X11_CFLAGS = @QT_X11_CFLAGS@
 QT_X11_LIBS = @QT_X11_LIBS@
 RANLIB = @RANLIB@
 RCC = @RCC@
-RSVG_2_36_2_CFLAGS = @RSVG_2_36_2_CFLAGS@
-RSVG_2_36_2_LIBS = @RSVG_2_36_2_LIBS@
 RSVG_CFLAGS = @RSVG_CFLAGS@
 RSVG_LIBS = @RSVG_LIBS@
 RTMP_CFLAGS = @RTMP_CFLAGS@
@@ -666,6 +677,7 @@
 VOAACENC_LIBS = @VOAACENC_LIBS@
 VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
 VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VULKAN_LIBS = @VULKAN_LIBS@
 WARNING_CFLAGS = @WARNING_CFLAGS@
 WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
 WARNING_OBJCFLAGS = @WARNING_OBJCFLAGS@
@@ -676,6 +688,7 @@
 WAYLAND_LIBS = @WAYLAND_LIBS@
 WEBP_CFLAGS = @WEBP_CFLAGS@
 WEBP_LIBS = @WEBP_LIBS@
+WGET = @WGET@
 WILDMIDI_CFLAGS = @WILDMIDI_CFLAGS@
 WILDMIDI_LIBS = @WILDMIDI_LIBS@
 WINKS_LIBS = @WINKS_LIBS@
@@ -685,6 +698,8 @@
 X11_LIBS = @X11_LIBS@
 X265_CFLAGS = @X265_CFLAGS@
 X265_LIBS = @X265_LIBS@
+XCB_CFLAGS = @XCB_CFLAGS@
+XCB_LIBS = @XCB_LIBS@
 XCOMPOSITE_CFLAGS = @XCOMPOSITE_CFLAGS@
 XCOMPOSITE_LIBS = @XCOMPOSITE_LIBS@
 XGETTEXT = @XGETTEXT@
@@ -722,7 +737,6 @@
 docdir = @docdir@
 dvidir = @dvidir@
 exec_prefix = @exec_prefix@
-gsettingsschemadir = @gsettingsschemadir@
 host = @host@
 host_alias = @host_alias@
 host_cpu = @host_cpu@
diff --git a/gst-libs/gst/gl/cocoa/gstglcaopengllayer.m b/gst-libs/gst/gl/cocoa/gstglcaopengllayer.m
index cc82c3c..a11700d 100644
--- a/gst-libs/gst/gl/cocoa/gstglcaopengllayer.m
+++ b/gst-libs/gst/gl/cocoa/gstglcaopengllayer.m
@@ -126,6 +126,7 @@
   }
 
   gst_gl_context_activate (self->draw_context, TRUE);
+  gst_gl_context_set_shared_with (self->draw_context, self->gst_gl_context);
   if (!gst_gl_context_fill_info (self->draw_context, &error)) {
     GST_ERROR ("failed to fill wrapped context information: %s", error->message);
     return NULL;
diff --git a/gst-libs/gst/gl/cocoa/gstglcontext_cocoa.h b/gst-libs/gst/gl/cocoa/gstglcontext_cocoa.h
index 22069ee..8e4d1ac 100644
--- a/gst-libs/gst/gl/cocoa/gstglcontext_cocoa.h
+++ b/gst-libs/gst/gl/cocoa/gstglcontext_cocoa.h
@@ -30,8 +30,8 @@
 #define GST_GL_TYPE_CONTEXT_COCOA         (gst_gl_context_cocoa_get_type())
 #define GST_GL_CONTEXT_COCOA(o)           (G_TYPE_CHECK_INSTANCE_CAST((o), GST_GL_TYPE_CONTEXT_COCOA, GstGLContextCocoa))
 #define GST_GL_CONTEXT_COCOA_CLASS(k)     (G_TYPE_CHECK_CLASS((k), GST_GL_TYPE_CONTEXT_COCOA, GstGLContextCocoaClass))
-#define GST_GL_IS_CONTEXT_COCOA(o)        (G_TYPE_CHECK_INSTANCE_TYPE((o), GST_GL_TYPE_CONTEXT_COCOA))
-#define GST_GL_IS_CONTEXT_COCOA_CLASS(k)  (G_TYPE_CHECK_CLASS_TYPE((k), GST_GL_TYPE_CONTEXT_COCOA))
+#define GST_IS_GL_CONTEXT_COCOA(o)        (G_TYPE_CHECK_INSTANCE_TYPE((o), GST_GL_TYPE_CONTEXT_COCOA))
+#define GST_IS_GL_CONTEXT_COCOA_CLASS(k)  (G_TYPE_CHECK_CLASS_TYPE((k), GST_GL_TYPE_CONTEXT_COCOA))
 #define GST_GL_CONTEXT_COCOA_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS((o), GST_GL_TYPE_CONTEXT_COCOA, GstGLContextCocoaClass))
 
 typedef struct _GstGLContextCocoa        GstGLContextCocoa;
diff --git a/gst-libs/gst/gl/cocoa/gstglcontext_cocoa.m b/gst-libs/gst/gl/cocoa/gstglcontext_cocoa.m
index bde90f1..ac1e0d6 100644
--- a/gst-libs/gst/gl/cocoa/gstglcontext_cocoa.m
+++ b/gst-libs/gst/gl/cocoa/gstglcontext_cocoa.m
@@ -90,7 +90,6 @@
 static struct pixel_attr pixel_attrs[] = {
   {kCGLPFAAllRenderers, "All Renderers"},
   {kCGLPFADoubleBuffer, "Double Buffered"},
-  {kCGLPFAStereo, "Stereo"},
   {kCGLPFAAuxBuffers, "Aux Buffers"},
   {kCGLPFAColorSize, "Color Size"},
   {kCGLPFAAlphaSize, "Alpha Size"},
@@ -115,20 +114,23 @@
   {kCGLPFAAcceleratedCompute, "Accelerated Compute"},
   {kCGLPFAOpenGLProfile, "OpenGL Profile"},
   {kCGLPFAVirtualScreenCount, "Virtual Screen Count"},
-#if MAC_OS_X_VERSION_MAX_ALLOWED < 1090
+#if MAC_OS_X_VERSION_MAX_ALLOWED < MAC_OS_X_VERSION_10_11
+  {kCGLPFAStereo, "Stereo"},
+#endif
+#if MAC_OS_X_VERSION_MAX_ALLOWED < MAC_OS_X_VERSION_10_9
   {kCGLPFACompliant, "Compliant"},
   {kCGLPFARemotePBuffer, "Remote PBuffer"},
   {kCGLPFASingleRenderer, "Single Renderer"},
   {kCGLPFAWindow, "Window"},
 #endif
-#if MAC_OS_X_VERSION_MAX_ALLOWED < 1070
+#if MAC_OS_X_VERSION_MAX_ALLOWED < MAC_OS_X_VERSION_10_7
 //  {kCGLPFAOffScreen, "Off Screen"},
 //  {kCGLPFAPBuffer, "PBuffer"},
 #endif
-#if MAC_OS_X_VERSION_MAX_ALLOWED < 1060
+#if MAC_OS_X_VERSION_MAX_ALLOWED < MAC_OS_X_VERSION_10_6
 //  {kCGLPFAFullScreen, "Full Screen"},
 #endif
-#if MAC_OS_X_VERSION_MAX_ALLOWED < 1050
+#if MAC_OS_X_VERSION_MAX_ALLOWED < MAC_OS_X_VERSION_10_5
 //  {kCGLPFAMPSafe, "MP Safe"},
 //  {kCGLPFAMultiScreen, "Multi Screen"},
 //  {kCGLPFARobust, "Robust"},
diff --git a/gst-libs/gst/gl/cocoa/gstglwindow_cocoa.h b/gst-libs/gst/gl/cocoa/gstglwindow_cocoa.h
index 21c5917..6d1404b 100644
--- a/gst-libs/gst/gl/cocoa/gstglwindow_cocoa.h
+++ b/gst-libs/gst/gl/cocoa/gstglwindow_cocoa.h
@@ -30,8 +30,8 @@
 #define GST_GL_TYPE_WINDOW_COCOA         (gst_gl_window_cocoa_get_type())
 #define GST_GL_WINDOW_COCOA(o)           (G_TYPE_CHECK_INSTANCE_CAST((o), GST_GL_TYPE_WINDOW_COCOA, GstGLWindowCocoa))
 #define GST_GL_WINDOW_COCOA_CLASS(k)     (G_TYPE_CHECK_CLASS((k), GST_GL_TYPE_WINDOW_COCOA, GstGLWindowCocoaClass))
-#define GST_GL_IS_WINDOW_COCOA(o)        (G_TYPE_CHECK_INSTANCE_TYPE((o), GST_GL_TYPE_WINDOW_COCOA))
-#define GST_GL_IS_WINDOW_COCOA_CLASS(k)  (G_TYPE_CHECK_CLASS_TYPE((k), GST_GL_TYPE_WINDOW_COCOA))
+#define GST_IS_GL_WINDOW_COCOA(o)        (G_TYPE_CHECK_INSTANCE_TYPE((o), GST_GL_TYPE_WINDOW_COCOA))
+#define GST_IS_GL_WINDOW_COCOA_CLASS(k)  (G_TYPE_CHECK_CLASS_TYPE((k), GST_GL_TYPE_WINDOW_COCOA))
 #define GST_GL_WINDOW_COCOA_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS((o), GST_GL_TYPE_WINDOW_COCOA, GstGLWindowCocoaClass))
 
 typedef struct _GstGLWindowCocoa        GstGLWindowCocoa;
diff --git a/gst-libs/gst/gl/cocoa/gstglwindow_cocoa.m b/gst-libs/gst/gl/cocoa/gstglwindow_cocoa.m
index 9c37e6c..0d027c5 100644
--- a/gst-libs/gst/gl/cocoa/gstglwindow_cocoa.m
+++ b/gst-libs/gst/gl/cocoa/gstglwindow_cocoa.m
@@ -106,7 +106,6 @@
       GST_DEBUG_FUNCPTR (gst_gl_window_cocoa_get_window_handle);
   window_class->set_window_handle =
       GST_DEBUG_FUNCPTR (gst_gl_window_cocoa_set_window_handle);
-  window_class->draw_unlocked = GST_DEBUG_FUNCPTR (gst_gl_window_cocoa_draw);
   window_class->draw = GST_DEBUG_FUNCPTR (gst_gl_window_cocoa_draw);
   window_class->set_preferred_size =
       GST_DEBUG_FUNCPTR (gst_gl_window_cocoa_set_preferred_size);
diff --git a/gst-libs/gst/gl/dispmanx/Makefile.in b/gst-libs/gst/gl/dispmanx/Makefile.in
index a3eadda..fd27c9a 100644
--- a/gst-libs/gst/gl/dispmanx/Makefile.in
+++ b/gst-libs/gst/gl/dispmanx/Makefile.in
@@ -116,16 +116,15 @@
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
 	$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
-	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gsettings.m4 \
-	$(top_srcdir)/m4/gst-fionread.m4 $(top_srcdir)/m4/gst-sdl.m4 \
-	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
-	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
-	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libgcrypt.m4 \
-	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
-	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
-	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
-	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
-	$(top_srcdir)/configure.ac
+	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gst-fionread.m4 \
+	$(top_srcdir)/m4/gst-sdl.m4 $(top_srcdir)/m4/iconv.m4 \
+	$(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \
+	$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
+	$(top_srcdir)/m4/libgcrypt.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
+	$(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \
@@ -245,6 +244,8 @@
 CLUTTER_X11_LIBS = @CLUTTER_X11_LIBS@
 CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
+CUDA_CFLAGS = @CUDA_CFLAGS@
+CUDA_LIBS = @CUDA_LIBS@
 CURL_CFLAGS = @CURL_CFLAGS@
 CURL_LIBS = @CURL_LIBS@
 CXX = @CXX@
@@ -282,6 +283,8 @@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
+EGL_CFLAGS = @EGL_CFLAGS@
+EGL_LIBS = @EGL_LIBS@
 EGREP = @EGREP@
 ERROR_CFLAGS = @ERROR_CFLAGS@
 ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
@@ -290,7 +293,6 @@
 EXIF_CFLAGS = @EXIF_CFLAGS@
 EXIF_LIBS = @EXIF_LIBS@
 FAAC_LIBS = @FAAC_LIBS@
-FAAD_IS_NEAAC = @FAAD_IS_NEAAC@
 FAAD_LIBS = @FAAD_LIBS@
 FFLAGS = @FFLAGS@
 FGREP = @FGREP@
@@ -309,8 +311,9 @@
 GIO_LIBS = @GIO_LIBS@
 GIO_UNIX_CFLAGS = @GIO_UNIX_CFLAGS@
 GIO_UNIX_LIBS = @GIO_UNIX_LIBS@
+GLES2_CFLAGS = @GLES2_CFLAGS@
+GLES2_LIBS = @GLES2_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
-GLIB_COMPILE_SCHEMAS = @GLIB_COMPILE_SCHEMAS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
@@ -327,16 +330,17 @@
 GMODULE_NO_EXPORT_LIBS = @GMODULE_NO_EXPORT_LIBS@
 GMSGFMT = @GMSGFMT@
 GMSGFMT_015 = @GMSGFMT_015@
+GNUSTL_CFLAGS = @GNUSTL_CFLAGS@
+GNUSTL_LIBS = @GNUSTL_LIBS@
 GRAPHENE_CFLAGS = @GRAPHENE_CFLAGS@
 GRAPHENE_LIBS = @GRAPHENE_LIBS@
 GREP = @GREP@
-GSETTINGS_CFLAGS = @GSETTINGS_CFLAGS@
-GSETTINGS_DISABLE_SCHEMAS_COMPILE = @GSETTINGS_DISABLE_SCHEMAS_COMPILE@
-GSETTINGS_LIBS = @GSETTINGS_LIBS@
 GSM_LIBS = @GSM_LIBS@
 GSTPB_PLUGINS_DIR = @GSTPB_PLUGINS_DIR@
 GSTPB_PREFIX = @GSTPB_PREFIX@
 GST_AGE = @GST_AGE@
+GST_ALLOCATORS_CFLAGS = @GST_ALLOCATORS_CFLAGS@
+GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
 GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
 GST_API_VERSION = @GST_API_VERSION@
 GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
@@ -362,6 +366,8 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PBUTILS_CFLAGS = @GST_PBUTILS_CFLAGS@
+GST_PBUTILS_LIBS = @GST_PBUTILS_LIBS@
 GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BAD_CFLAGS = @GST_PLUGINS_BAD_CFLAGS@
@@ -387,6 +393,8 @@
 GST_PREFIX = @GST_PREFIX@
 GST_REVISION = @GST_REVISION@
 GST_TOOLS_DIR = @GST_TOOLS_DIR@
+GST_VIDEO_CFLAGS = @GST_VIDEO_CFLAGS@
+GST_VIDEO_LIBS = @GST_VIDEO_LIBS@
 GTK3_CFLAGS = @GTK3_CFLAGS@
 GTK3_GL_CFLAGS = @GTK3_GL_CFLAGS@
 GTK3_GL_LIBS = @GTK3_GL_LIBS@
@@ -488,6 +496,7 @@
 LTLIBICONV = @LTLIBICONV@
 LTLIBINTL = @LTLIBINTL@
 LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
 MANIFEST_TOOL = @MANIFEST_TOOL@
@@ -501,8 +510,6 @@
 MODPLUG_LIBS = @MODPLUG_LIBS@
 MPEG2ENC_CFLAGS = @MPEG2ENC_CFLAGS@
 MPEG2ENC_LIBS = @MPEG2ENC_LIBS@
-MPG123_CFLAGS = @MPG123_CFLAGS@
-MPG123_LIBS = @MPG123_LIBS@
 MPLEX_CFLAGS = @MPLEX_CFLAGS@
 MPLEX_LDFLAGS = @MPLEX_LDFLAGS@
 MPLEX_LIBS = @MPLEX_LIBS@
@@ -518,6 +525,8 @@
 NETTLE_LIBS = @NETTLE_LIBS@
 NM = @NM@
 NMEDIT = @NMEDIT@
+NVENCODE_CFLAGS = @NVENCODE_CFLAGS@
+NVENCODE_LIBS = @NVENCODE_LIBS@
 OBJC = @OBJC@
 OBJCDEPMODE = @OBJCDEPMODE@
 OBJCFLAGS = @OBJCFLAGS@
@@ -575,16 +584,18 @@
 PYTHON_PLATFORM = @PYTHON_PLATFORM@
 PYTHON_PREFIX = @PYTHON_PREFIX@
 PYTHON_VERSION = @PYTHON_VERSION@
+QT_ANDROID_CFLAGS = @QT_ANDROID_CFLAGS@
+QT_ANDROID_LIBS = @QT_ANDROID_LIBS@
 QT_CFLAGS = @QT_CFLAGS@
 QT_LIBS = @QT_LIBS@
+QT_MAC_CFLAGS = @QT_MAC_CFLAGS@
+QT_MAC_LIBS = @QT_MAC_LIBS@
 QT_WAYLAND_CFLAGS = @QT_WAYLAND_CFLAGS@
 QT_WAYLAND_LIBS = @QT_WAYLAND_LIBS@
 QT_X11_CFLAGS = @QT_X11_CFLAGS@
 QT_X11_LIBS = @QT_X11_LIBS@
 RANLIB = @RANLIB@
 RCC = @RCC@
-RSVG_2_36_2_CFLAGS = @RSVG_2_36_2_CFLAGS@
-RSVG_2_36_2_LIBS = @RSVG_2_36_2_LIBS@
 RSVG_CFLAGS = @RSVG_CFLAGS@
 RSVG_LIBS = @RSVG_LIBS@
 RTMP_CFLAGS = @RTMP_CFLAGS@
@@ -636,6 +647,7 @@
 VOAACENC_LIBS = @VOAACENC_LIBS@
 VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
 VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VULKAN_LIBS = @VULKAN_LIBS@
 WARNING_CFLAGS = @WARNING_CFLAGS@
 WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
 WARNING_OBJCFLAGS = @WARNING_OBJCFLAGS@
@@ -646,6 +658,7 @@
 WAYLAND_LIBS = @WAYLAND_LIBS@
 WEBP_CFLAGS = @WEBP_CFLAGS@
 WEBP_LIBS = @WEBP_LIBS@
+WGET = @WGET@
 WILDMIDI_CFLAGS = @WILDMIDI_CFLAGS@
 WILDMIDI_LIBS = @WILDMIDI_LIBS@
 WINKS_LIBS = @WINKS_LIBS@
@@ -655,6 +668,8 @@
 X11_LIBS = @X11_LIBS@
 X265_CFLAGS = @X265_CFLAGS@
 X265_LIBS = @X265_LIBS@
+XCB_CFLAGS = @XCB_CFLAGS@
+XCB_LIBS = @XCB_LIBS@
 XCOMPOSITE_CFLAGS = @XCOMPOSITE_CFLAGS@
 XCOMPOSITE_LIBS = @XCOMPOSITE_LIBS@
 XGETTEXT = @XGETTEXT@
@@ -692,7 +707,6 @@
 docdir = @docdir@
 dvidir = @dvidir@
 exec_prefix = @exec_prefix@
-gsettingsschemadir = @gsettingsschemadir@
 host = @host@
 host_alias = @host_alias@
 host_cpu = @host_cpu@
diff --git a/gst-libs/gst/gl/dispmanx/gstglwindow_dispmanx_egl.h b/gst-libs/gst/gl/dispmanx/gstglwindow_dispmanx_egl.h
index df23eb5..3130a6c 100644
--- a/gst-libs/gst/gl/dispmanx/gstglwindow_dispmanx_egl.h
+++ b/gst-libs/gst/gl/dispmanx/gstglwindow_dispmanx_egl.h
@@ -47,8 +47,8 @@
 #define GST_GL_TYPE_WINDOW_DISPMANX_EGL         (gst_gl_window_dispmanx_egl_get_type())
 #define GST_GL_WINDOW_DISPMANX_EGL(o)           (G_TYPE_CHECK_INSTANCE_CAST((o), GST_GL_TYPE_WINDOW_DISPMANX_EGL, GstGLWindowDispmanxEGL))
 #define GST_GL_WINDOW_DISPMANX_EGL_CLASS(k)     (G_TYPE_CHECK_CLASS((k), GST_GL_TYPE_WINDOW_DISPMANX_EGL, GstGLWindowDispmanxEGLClass))
-#define GST_GL_IS_WINDOW_DISPMANX_EGL(o)        (G_TYPE_CHECK_INSTANCE_TYPE((o), GST_GL_TYPE_WINDOW_DISPMANX_EGL))
-#define GST_GL_IS_WINDOW_DISPMANX_EGL_CLASS(k)  (G_TYPE_CHECK_CLASS_TYPE((k), GST_GL_TYPE_WINDOW_DISPMANX_EGL))
+#define GST_IS_GL_WINDOW_DISPMANX_EGL(o)        (G_TYPE_CHECK_INSTANCE_TYPE((o), GST_GL_TYPE_WINDOW_DISPMANX_EGL))
+#define GST_IS_GL_WINDOW_DISPMANX_EGL_CLASS(k)  (G_TYPE_CHECK_CLASS_TYPE((k), GST_GL_TYPE_WINDOW_DISPMANX_EGL))
 #define GST_GL_WINDOW_DISPMANX_EGL_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS((o), GST_GL_TYPE_WINDOW_DISPMANX_EGL, GstGLWindowDispmanxEGL_Class))
 
 typedef struct _GstGLWindowDispmanxEGL        GstGLWindowDispmanxEGL;
diff --git a/gst-libs/gst/gl/eagl/Makefile.in b/gst-libs/gst/gl/eagl/Makefile.in
index 28645fc..869eabe 100644
--- a/gst-libs/gst/gl/eagl/Makefile.in
+++ b/gst-libs/gst/gl/eagl/Makefile.in
@@ -116,16 +116,15 @@
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
 	$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
-	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gsettings.m4 \
-	$(top_srcdir)/m4/gst-fionread.m4 $(top_srcdir)/m4/gst-sdl.m4 \
-	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
-	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
-	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libgcrypt.m4 \
-	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
-	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
-	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
-	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
-	$(top_srcdir)/configure.ac
+	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gst-fionread.m4 \
+	$(top_srcdir)/m4/gst-sdl.m4 $(top_srcdir)/m4/iconv.m4 \
+	$(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \
+	$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
+	$(top_srcdir)/m4/libgcrypt.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
+	$(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \
@@ -245,6 +244,8 @@
 CLUTTER_X11_LIBS = @CLUTTER_X11_LIBS@
 CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
+CUDA_CFLAGS = @CUDA_CFLAGS@
+CUDA_LIBS = @CUDA_LIBS@
 CURL_CFLAGS = @CURL_CFLAGS@
 CURL_LIBS = @CURL_LIBS@
 CXX = @CXX@
@@ -282,6 +283,8 @@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
+EGL_CFLAGS = @EGL_CFLAGS@
+EGL_LIBS = @EGL_LIBS@
 EGREP = @EGREP@
 ERROR_CFLAGS = @ERROR_CFLAGS@
 ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
@@ -290,7 +293,6 @@
 EXIF_CFLAGS = @EXIF_CFLAGS@
 EXIF_LIBS = @EXIF_LIBS@
 FAAC_LIBS = @FAAC_LIBS@
-FAAD_IS_NEAAC = @FAAD_IS_NEAAC@
 FAAD_LIBS = @FAAD_LIBS@
 FFLAGS = @FFLAGS@
 FGREP = @FGREP@
@@ -309,8 +311,9 @@
 GIO_LIBS = @GIO_LIBS@
 GIO_UNIX_CFLAGS = @GIO_UNIX_CFLAGS@
 GIO_UNIX_LIBS = @GIO_UNIX_LIBS@
+GLES2_CFLAGS = @GLES2_CFLAGS@
+GLES2_LIBS = @GLES2_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
-GLIB_COMPILE_SCHEMAS = @GLIB_COMPILE_SCHEMAS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
@@ -327,16 +330,17 @@
 GMODULE_NO_EXPORT_LIBS = @GMODULE_NO_EXPORT_LIBS@
 GMSGFMT = @GMSGFMT@
 GMSGFMT_015 = @GMSGFMT_015@
+GNUSTL_CFLAGS = @GNUSTL_CFLAGS@
+GNUSTL_LIBS = @GNUSTL_LIBS@
 GRAPHENE_CFLAGS = @GRAPHENE_CFLAGS@
 GRAPHENE_LIBS = @GRAPHENE_LIBS@
 GREP = @GREP@
-GSETTINGS_CFLAGS = @GSETTINGS_CFLAGS@
-GSETTINGS_DISABLE_SCHEMAS_COMPILE = @GSETTINGS_DISABLE_SCHEMAS_COMPILE@
-GSETTINGS_LIBS = @GSETTINGS_LIBS@
 GSM_LIBS = @GSM_LIBS@
 GSTPB_PLUGINS_DIR = @GSTPB_PLUGINS_DIR@
 GSTPB_PREFIX = @GSTPB_PREFIX@
 GST_AGE = @GST_AGE@
+GST_ALLOCATORS_CFLAGS = @GST_ALLOCATORS_CFLAGS@
+GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
 GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
 GST_API_VERSION = @GST_API_VERSION@
 GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
@@ -362,6 +366,8 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PBUTILS_CFLAGS = @GST_PBUTILS_CFLAGS@
+GST_PBUTILS_LIBS = @GST_PBUTILS_LIBS@
 GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BAD_CFLAGS = @GST_PLUGINS_BAD_CFLAGS@
@@ -387,6 +393,8 @@
 GST_PREFIX = @GST_PREFIX@
 GST_REVISION = @GST_REVISION@
 GST_TOOLS_DIR = @GST_TOOLS_DIR@
+GST_VIDEO_CFLAGS = @GST_VIDEO_CFLAGS@
+GST_VIDEO_LIBS = @GST_VIDEO_LIBS@
 GTK3_CFLAGS = @GTK3_CFLAGS@
 GTK3_GL_CFLAGS = @GTK3_GL_CFLAGS@
 GTK3_GL_LIBS = @GTK3_GL_LIBS@
@@ -488,6 +496,7 @@
 LTLIBICONV = @LTLIBICONV@
 LTLIBINTL = @LTLIBINTL@
 LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
 MANIFEST_TOOL = @MANIFEST_TOOL@
@@ -501,8 +510,6 @@
 MODPLUG_LIBS = @MODPLUG_LIBS@
 MPEG2ENC_CFLAGS = @MPEG2ENC_CFLAGS@
 MPEG2ENC_LIBS = @MPEG2ENC_LIBS@
-MPG123_CFLAGS = @MPG123_CFLAGS@
-MPG123_LIBS = @MPG123_LIBS@
 MPLEX_CFLAGS = @MPLEX_CFLAGS@
 MPLEX_LDFLAGS = @MPLEX_LDFLAGS@
 MPLEX_LIBS = @MPLEX_LIBS@
@@ -518,6 +525,8 @@
 NETTLE_LIBS = @NETTLE_LIBS@
 NM = @NM@
 NMEDIT = @NMEDIT@
+NVENCODE_CFLAGS = @NVENCODE_CFLAGS@
+NVENCODE_LIBS = @NVENCODE_LIBS@
 OBJC = @OBJC@
 OBJCDEPMODE = @OBJCDEPMODE@
 OBJCFLAGS = @OBJCFLAGS@
@@ -575,16 +584,18 @@
 PYTHON_PLATFORM = @PYTHON_PLATFORM@
 PYTHON_PREFIX = @PYTHON_PREFIX@
 PYTHON_VERSION = @PYTHON_VERSION@
+QT_ANDROID_CFLAGS = @QT_ANDROID_CFLAGS@
+QT_ANDROID_LIBS = @QT_ANDROID_LIBS@
 QT_CFLAGS = @QT_CFLAGS@
 QT_LIBS = @QT_LIBS@
+QT_MAC_CFLAGS = @QT_MAC_CFLAGS@
+QT_MAC_LIBS = @QT_MAC_LIBS@
 QT_WAYLAND_CFLAGS = @QT_WAYLAND_CFLAGS@
 QT_WAYLAND_LIBS = @QT_WAYLAND_LIBS@
 QT_X11_CFLAGS = @QT_X11_CFLAGS@
 QT_X11_LIBS = @QT_X11_LIBS@
 RANLIB = @RANLIB@
 RCC = @RCC@
-RSVG_2_36_2_CFLAGS = @RSVG_2_36_2_CFLAGS@
-RSVG_2_36_2_LIBS = @RSVG_2_36_2_LIBS@
 RSVG_CFLAGS = @RSVG_CFLAGS@
 RSVG_LIBS = @RSVG_LIBS@
 RTMP_CFLAGS = @RTMP_CFLAGS@
@@ -636,6 +647,7 @@
 VOAACENC_LIBS = @VOAACENC_LIBS@
 VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
 VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VULKAN_LIBS = @VULKAN_LIBS@
 WARNING_CFLAGS = @WARNING_CFLAGS@
 WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
 WARNING_OBJCFLAGS = @WARNING_OBJCFLAGS@
@@ -646,6 +658,7 @@
 WAYLAND_LIBS = @WAYLAND_LIBS@
 WEBP_CFLAGS = @WEBP_CFLAGS@
 WEBP_LIBS = @WEBP_LIBS@
+WGET = @WGET@
 WILDMIDI_CFLAGS = @WILDMIDI_CFLAGS@
 WILDMIDI_LIBS = @WILDMIDI_LIBS@
 WINKS_LIBS = @WINKS_LIBS@
@@ -655,6 +668,8 @@
 X11_LIBS = @X11_LIBS@
 X265_CFLAGS = @X265_CFLAGS@
 X265_LIBS = @X265_LIBS@
+XCB_CFLAGS = @XCB_CFLAGS@
+XCB_LIBS = @XCB_LIBS@
 XCOMPOSITE_CFLAGS = @XCOMPOSITE_CFLAGS@
 XCOMPOSITE_LIBS = @XCOMPOSITE_LIBS@
 XGETTEXT = @XGETTEXT@
@@ -692,7 +707,6 @@
 docdir = @docdir@
 dvidir = @dvidir@
 exec_prefix = @exec_prefix@
-gsettingsschemadir = @gsettingsschemadir@
 host = @host@
 host_alias = @host_alias@
 host_cpu = @host_cpu@
diff --git a/gst-libs/gst/gl/eagl/gstglcontext_eagl.h b/gst-libs/gst/gl/eagl/gstglcontext_eagl.h
index bd6cd20..2622810 100644
--- a/gst-libs/gst/gl/eagl/gstglcontext_eagl.h
+++ b/gst-libs/gst/gl/eagl/gstglcontext_eagl.h
@@ -29,8 +29,8 @@
 #define GST_GL_TYPE_CONTEXT_EAGL         (gst_gl_context_eagl_get_type())
 #define GST_GL_CONTEXT_EAGL(o)           (G_TYPE_CHECK_INSTANCE_CAST((o), GST_GL_TYPE_CONTEXT_EAGL, GstGLContextEagl))
 #define GST_GL_CONTEXT_EAGL_CLASS(k)     (G_TYPE_CHECK_CLASS((k), GST_GL_TYPE_CONTEXT_EAGL, GstGLContextEaglClass))
-#define GST_GL_IS_CONTEXT_EAGL(o)        (G_TYPE_CHECK_INSTANCE_TYPE((o), GST_GL_TYPE_CONTEXT_EAGL))
-#define GST_GL_IS_CONTEXT_EAGL_CLASS(k)  (G_TYPE_CHECK_CLASS_TYPE((k), GST_GL_TYPE_CONTEXT_EAGL))
+#define GST_IS_GL_CONTEXT_EAGL(o)        (G_TYPE_CHECK_INSTANCE_TYPE((o), GST_GL_TYPE_CONTEXT_EAGL))
+#define GST_IS_GL_CONTEXT_EAGL_CLASS(k)  (G_TYPE_CHECK_CLASS_TYPE((k), GST_GL_TYPE_CONTEXT_EAGL))
 #define GST_GL_CONTEXT_EAGL_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS((o), GST_GL_TYPE_CONTEXT_EAGL, GstGLContextEaglClass))
 
 typedef struct _GstGLContextEagl        GstGLContextEagl;
diff --git a/gst-libs/gst/gl/eagl/gstglwindow_eagl.h b/gst-libs/gst/gl/eagl/gstglwindow_eagl.h
index ce3d0b3..001c97c 100644
--- a/gst-libs/gst/gl/eagl/gstglwindow_eagl.h
+++ b/gst-libs/gst/gl/eagl/gstglwindow_eagl.h
@@ -29,8 +29,8 @@
 #define GST_GL_TYPE_WINDOW_EAGL         (gst_gl_window_eagl_get_type())
 #define GST_GL_WINDOW_EAGL(o)           (G_TYPE_CHECK_INSTANCE_CAST((o), GST_GL_TYPE_WINDOW_EAGL, GstGLWindowEagl))
 #define GST_GL_WINDOW_EAGL_CLASS(k)     (G_TYPE_CHECK_CLASS((k), GST_GL_TYPE_WINDOW_EAGL, GstGLWindowEaglClass))
-#define GST_GL_IS_WINDOW_EAGL(o)        (G_TYPE_CHECK_INSTANCE_TYPE((o), GST_GL_TYPE_WINDOW_EAGL))
-#define GST_GL_IS_WINDOW_EAGL_CLASS(k)  (G_TYPE_CHECK_CLASS_TYPE((k), GST_GL_TYPE_WINDOW_EAGL))
+#define GST_IS_GL_WINDOW_EAGL(o)        (G_TYPE_CHECK_INSTANCE_TYPE((o), GST_GL_TYPE_WINDOW_EAGL))
+#define GST_IS_GL_WINDOW_EAGL_CLASS(k)  (G_TYPE_CHECK_CLASS_TYPE((k), GST_GL_TYPE_WINDOW_EAGL))
 #define GST_GL_WINDOW_EAGL_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS((o), GST_GL_TYPE_WINDOW_EAGL, GstGLWindowEaglClass))
 
 typedef struct _GstGLWindowEagl        GstGLWindowEagl;
diff --git a/gst-libs/gst/gl/eagl/gstglwindow_eagl.m b/gst-libs/gst/gl/eagl/gstglwindow_eagl.m
index dfd889f..eb9d4f7 100644
--- a/gst-libs/gst/gl/eagl/gstglwindow_eagl.m
+++ b/gst-libs/gst/gl/eagl/gstglwindow_eagl.m
@@ -69,7 +69,6 @@
       GST_DEBUG_FUNCPTR (gst_gl_window_eagl_get_window_handle);
   window_class->set_window_handle =
       GST_DEBUG_FUNCPTR (gst_gl_window_eagl_set_window_handle);
-  window_class->draw_unlocked = GST_DEBUG_FUNCPTR (gst_gl_window_eagl_draw);
   window_class->draw = GST_DEBUG_FUNCPTR (gst_gl_window_eagl_draw);
   window_class->set_preferred_size =
       GST_DEBUG_FUNCPTR (gst_gl_window_eagl_set_preferred_size);
diff --git a/gst-libs/gst/gl/egl/Makefile.in b/gst-libs/gst/gl/egl/Makefile.in
index 788a1da..2e35a7a 100644
--- a/gst-libs/gst/gl/egl/Makefile.in
+++ b/gst-libs/gst/gl/egl/Makefile.in
@@ -116,16 +116,15 @@
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
 	$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
-	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gsettings.m4 \
-	$(top_srcdir)/m4/gst-fionread.m4 $(top_srcdir)/m4/gst-sdl.m4 \
-	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
-	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
-	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libgcrypt.m4 \
-	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
-	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
-	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
-	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
-	$(top_srcdir)/configure.ac
+	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gst-fionread.m4 \
+	$(top_srcdir)/m4/gst-sdl.m4 $(top_srcdir)/m4/iconv.m4 \
+	$(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \
+	$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
+	$(top_srcdir)/m4/libgcrypt.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
+	$(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 DIST_COMMON = $(srcdir)/Makefile.am $(libgstgl_eglinclude_HEADERS) \
@@ -274,6 +273,8 @@
 CLUTTER_X11_LIBS = @CLUTTER_X11_LIBS@
 CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
+CUDA_CFLAGS = @CUDA_CFLAGS@
+CUDA_LIBS = @CUDA_LIBS@
 CURL_CFLAGS = @CURL_CFLAGS@
 CURL_LIBS = @CURL_LIBS@
 CXX = @CXX@
@@ -311,6 +312,8 @@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
+EGL_CFLAGS = @EGL_CFLAGS@
+EGL_LIBS = @EGL_LIBS@
 EGREP = @EGREP@
 ERROR_CFLAGS = @ERROR_CFLAGS@
 ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
@@ -319,7 +322,6 @@
 EXIF_CFLAGS = @EXIF_CFLAGS@
 EXIF_LIBS = @EXIF_LIBS@
 FAAC_LIBS = @FAAC_LIBS@
-FAAD_IS_NEAAC = @FAAD_IS_NEAAC@
 FAAD_LIBS = @FAAD_LIBS@
 FFLAGS = @FFLAGS@
 FGREP = @FGREP@
@@ -338,8 +340,9 @@
 GIO_LIBS = @GIO_LIBS@
 GIO_UNIX_CFLAGS = @GIO_UNIX_CFLAGS@
 GIO_UNIX_LIBS = @GIO_UNIX_LIBS@
+GLES2_CFLAGS = @GLES2_CFLAGS@
+GLES2_LIBS = @GLES2_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
-GLIB_COMPILE_SCHEMAS = @GLIB_COMPILE_SCHEMAS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
@@ -356,16 +359,17 @@
 GMODULE_NO_EXPORT_LIBS = @GMODULE_NO_EXPORT_LIBS@
 GMSGFMT = @GMSGFMT@
 GMSGFMT_015 = @GMSGFMT_015@
+GNUSTL_CFLAGS = @GNUSTL_CFLAGS@
+GNUSTL_LIBS = @GNUSTL_LIBS@
 GRAPHENE_CFLAGS = @GRAPHENE_CFLAGS@
 GRAPHENE_LIBS = @GRAPHENE_LIBS@
 GREP = @GREP@
-GSETTINGS_CFLAGS = @GSETTINGS_CFLAGS@
-GSETTINGS_DISABLE_SCHEMAS_COMPILE = @GSETTINGS_DISABLE_SCHEMAS_COMPILE@
-GSETTINGS_LIBS = @GSETTINGS_LIBS@
 GSM_LIBS = @GSM_LIBS@
 GSTPB_PLUGINS_DIR = @GSTPB_PLUGINS_DIR@
 GSTPB_PREFIX = @GSTPB_PREFIX@
 GST_AGE = @GST_AGE@
+GST_ALLOCATORS_CFLAGS = @GST_ALLOCATORS_CFLAGS@
+GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
 GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
 GST_API_VERSION = @GST_API_VERSION@
 GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
@@ -391,6 +395,8 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PBUTILS_CFLAGS = @GST_PBUTILS_CFLAGS@
+GST_PBUTILS_LIBS = @GST_PBUTILS_LIBS@
 GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BAD_CFLAGS = @GST_PLUGINS_BAD_CFLAGS@
@@ -416,6 +422,8 @@
 GST_PREFIX = @GST_PREFIX@
 GST_REVISION = @GST_REVISION@
 GST_TOOLS_DIR = @GST_TOOLS_DIR@
+GST_VIDEO_CFLAGS = @GST_VIDEO_CFLAGS@
+GST_VIDEO_LIBS = @GST_VIDEO_LIBS@
 GTK3_CFLAGS = @GTK3_CFLAGS@
 GTK3_GL_CFLAGS = @GTK3_GL_CFLAGS@
 GTK3_GL_LIBS = @GTK3_GL_LIBS@
@@ -517,6 +525,7 @@
 LTLIBICONV = @LTLIBICONV@
 LTLIBINTL = @LTLIBINTL@
 LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
 MANIFEST_TOOL = @MANIFEST_TOOL@
@@ -530,8 +539,6 @@
 MODPLUG_LIBS = @MODPLUG_LIBS@
 MPEG2ENC_CFLAGS = @MPEG2ENC_CFLAGS@
 MPEG2ENC_LIBS = @MPEG2ENC_LIBS@
-MPG123_CFLAGS = @MPG123_CFLAGS@
-MPG123_LIBS = @MPG123_LIBS@
 MPLEX_CFLAGS = @MPLEX_CFLAGS@
 MPLEX_LDFLAGS = @MPLEX_LDFLAGS@
 MPLEX_LIBS = @MPLEX_LIBS@
@@ -547,6 +554,8 @@
 NETTLE_LIBS = @NETTLE_LIBS@
 NM = @NM@
 NMEDIT = @NMEDIT@
+NVENCODE_CFLAGS = @NVENCODE_CFLAGS@
+NVENCODE_LIBS = @NVENCODE_LIBS@
 OBJC = @OBJC@
 OBJCDEPMODE = @OBJCDEPMODE@
 OBJCFLAGS = @OBJCFLAGS@
@@ -604,16 +613,18 @@
 PYTHON_PLATFORM = @PYTHON_PLATFORM@
 PYTHON_PREFIX = @PYTHON_PREFIX@
 PYTHON_VERSION = @PYTHON_VERSION@
+QT_ANDROID_CFLAGS = @QT_ANDROID_CFLAGS@
+QT_ANDROID_LIBS = @QT_ANDROID_LIBS@
 QT_CFLAGS = @QT_CFLAGS@
 QT_LIBS = @QT_LIBS@
+QT_MAC_CFLAGS = @QT_MAC_CFLAGS@
+QT_MAC_LIBS = @QT_MAC_LIBS@
 QT_WAYLAND_CFLAGS = @QT_WAYLAND_CFLAGS@
 QT_WAYLAND_LIBS = @QT_WAYLAND_LIBS@
 QT_X11_CFLAGS = @QT_X11_CFLAGS@
 QT_X11_LIBS = @QT_X11_LIBS@
 RANLIB = @RANLIB@
 RCC = @RCC@
-RSVG_2_36_2_CFLAGS = @RSVG_2_36_2_CFLAGS@
-RSVG_2_36_2_LIBS = @RSVG_2_36_2_LIBS@
 RSVG_CFLAGS = @RSVG_CFLAGS@
 RSVG_LIBS = @RSVG_LIBS@
 RTMP_CFLAGS = @RTMP_CFLAGS@
@@ -665,6 +676,7 @@
 VOAACENC_LIBS = @VOAACENC_LIBS@
 VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
 VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VULKAN_LIBS = @VULKAN_LIBS@
 WARNING_CFLAGS = @WARNING_CFLAGS@
 WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
 WARNING_OBJCFLAGS = @WARNING_OBJCFLAGS@
@@ -675,6 +687,7 @@
 WAYLAND_LIBS = @WAYLAND_LIBS@
 WEBP_CFLAGS = @WEBP_CFLAGS@
 WEBP_LIBS = @WEBP_LIBS@
+WGET = @WGET@
 WILDMIDI_CFLAGS = @WILDMIDI_CFLAGS@
 WILDMIDI_LIBS = @WILDMIDI_LIBS@
 WINKS_LIBS = @WINKS_LIBS@
@@ -684,6 +697,8 @@
 X11_LIBS = @X11_LIBS@
 X265_CFLAGS = @X265_CFLAGS@
 X265_LIBS = @X265_LIBS@
+XCB_CFLAGS = @XCB_CFLAGS@
+XCB_LIBS = @XCB_LIBS@
 XCOMPOSITE_CFLAGS = @XCOMPOSITE_CFLAGS@
 XCOMPOSITE_LIBS = @XCOMPOSITE_LIBS@
 XGETTEXT = @XGETTEXT@
@@ -721,7 +736,6 @@
 docdir = @docdir@
 dvidir = @dvidir@
 exec_prefix = @exec_prefix@
-gsettingsschemadir = @gsettingsschemadir@
 host = @host@
 host_alias = @host_alias@
 host_cpu = @host_cpu@
diff --git a/gst-libs/gst/gl/egl/gsteglimagememory.c b/gst-libs/gst/gl/egl/gsteglimagememory.c
index eb45830..46098b5 100644
--- a/gst-libs/gst/gl/egl/gsteglimagememory.c
+++ b/gst-libs/gst/gl/egl/gsteglimagememory.c
@@ -25,6 +25,44 @@
 #endif
 
 #include "gsteglimagememory.h"
+#include <string.h>
+
+#if GST_GL_HAVE_DMABUF
+#include <gst/allocators/gstdmabuf.h>
+#include <libdrm/drm_fourcc.h>
+
+#ifndef DRM_FORMAT_R8
+#define DRM_FORMAT_R8 fourcc_code('R', '8', ' ', ' ')
+#endif
+
+#ifndef DRM_FORMAT_RG88
+#define DRM_FORMAT_RG88 fourcc_code('R', 'G', '8', '8')
+#endif
+
+#ifndef DRM_FORMAT_GR88
+#define DRM_FORMAT_GR88 fourcc_code('G', 'R', '8', '8')
+#endif
+#endif
+
+#ifndef EGL_LINUX_DMA_BUF_EXT
+#define EGL_LINUX_DMA_BUF_EXT 0x3270
+#endif
+
+#ifndef EGL_LINUX_DRM_FOURCC_EXT
+#define EGL_LINUX_DRM_FOURCC_EXT 0x3271
+#endif
+
+#ifndef EGL_DMA_BUF_PLANE0_FD_EXT
+#define EGL_DMA_BUF_PLANE0_FD_EXT 0x3272
+#endif
+
+#ifndef EGL_DMA_BUF_PLANE0_OFFSET_EXT
+#define EGL_DMA_BUF_PLANE0_OFFSET_EXT 0x3273
+#endif
+
+#ifndef EGL_DMA_BUF_PLANE0_PITCH_EXT
+#define EGL_DMA_BUF_PLANE0_PITCH_EXT 0x3274
+#endif
 
 GST_DEBUG_CATEGORY_STATIC (GST_CAT_EGL_IMAGE_MEMORY);
 #define GST_CAT_DEFAULT GST_CAT_EGL_IMAGE_MEMORY
@@ -310,9 +348,137 @@
     gst_gl_buffer_pool_replace_last_buffer (GST_GL_BUFFER_POOL (meta->
             buffer->pool), meta->buffer);
 
+
   return TRUE;
 }
 
+#if GST_GL_HAVE_DMABUF
+/*
+ * GStreamer format descriptions differ from DRM formats as the representation
+ * is relative to a register, hence in native endianness. To reduce the driver
+ * requirement, we only import with a subset of texture formats and use
+ * shaders to convert. This way we avoid having to use external texture
+ * target.
+ */
+static int
+_drm_fourcc_from_info (GstVideoInfo * info, int plane)
+{
+  GstVideoFormat format = GST_VIDEO_INFO_FORMAT (info);
+#if G_BYTE_ORDER == G_LITTLE_ENDIAN
+  const gint rgba_fourcc = DRM_FORMAT_ABGR8888;
+  const gint rgb_fourcc = DRM_FORMAT_BGR888;
+  const gint rg_fourcc = DRM_FORMAT_GR88;
+#else
+  const gint rgba_fourcc = DRM_FORMAT_RGBA8888;
+  const gint rgb_fourcc = DRM_FORMAT_RGB888;
+  const gint rg_fourcc = DRM_FORMAT_RG88;
+#endif
+
+  GST_DEBUG ("Getting DRM fourcc for %s plane %i",
+      gst_video_format_to_string (format), plane);
+
+  switch (format) {
+    case GST_VIDEO_FORMAT_RGB16:
+    case GST_VIDEO_FORMAT_BGR16:
+      return DRM_FORMAT_RGB565;
+
+    case GST_VIDEO_FORMAT_RGB:
+    case GST_VIDEO_FORMAT_BGR:
+      return rgb_fourcc;
+
+    case GST_VIDEO_FORMAT_RGBA:
+    case GST_VIDEO_FORMAT_RGBx:
+    case GST_VIDEO_FORMAT_BGRA:
+    case GST_VIDEO_FORMAT_BGRx:
+    case GST_VIDEO_FORMAT_ARGB:
+    case GST_VIDEO_FORMAT_xRGB:
+    case GST_VIDEO_FORMAT_ABGR:
+    case GST_VIDEO_FORMAT_xBGR:
+    case GST_VIDEO_FORMAT_AYUV:
+      return rgba_fourcc;
+
+    case GST_VIDEO_FORMAT_GRAY8:
+      return DRM_FORMAT_R8;
+
+    case GST_VIDEO_FORMAT_YUY2:
+    case GST_VIDEO_FORMAT_UYVY:
+    case GST_VIDEO_FORMAT_GRAY16_LE:
+    case GST_VIDEO_FORMAT_GRAY16_BE:
+      return rg_fourcc;
+
+    case GST_VIDEO_FORMAT_NV12:
+    case GST_VIDEO_FORMAT_NV21:
+      return plane == 0 ? DRM_FORMAT_R8 : rg_fourcc;
+
+    case GST_VIDEO_FORMAT_I420:
+    case GST_VIDEO_FORMAT_YV12:
+    case GST_VIDEO_FORMAT_Y41B:
+    case GST_VIDEO_FORMAT_Y42B:
+    case GST_VIDEO_FORMAT_Y444:
+      return DRM_FORMAT_R8;
+
+    default:
+      GST_ERROR ("Unsupported format for DMABuf.");
+      return -1;
+  }
+}
+
+GstMemory *
+gst_egl_image_memory_from_dmabuf (GstGLContext * context,
+    gint dmabuf, GstVideoInfo * in_info, gint plane, gsize offset)
+{
+  GstGLContextEGL *ctx_egl = GST_GL_CONTEXT_EGL (context);
+  GstEGLImageAllocator *allocator;
+  gint fourcc;
+  gint atti = 0;
+  EGLint attribs[13];
+  EGLImageKHR img = EGL_NO_IMAGE_KHR;
+
+  allocator = gst_egl_image_allocator_obtain ();
+  fourcc = _drm_fourcc_from_info (in_info, plane);
+
+  GST_DEBUG ("fourcc %.4s (%d) plane %d (%dx%d)",
+      (char *) &fourcc, fourcc, plane,
+      GST_VIDEO_INFO_COMP_WIDTH (in_info, plane),
+      GST_VIDEO_INFO_COMP_HEIGHT (in_info, plane));
+
+  attribs[atti++] = EGL_WIDTH;
+  attribs[atti++] = GST_VIDEO_INFO_COMP_WIDTH (in_info, plane);
+  attribs[atti++] = EGL_HEIGHT;
+  attribs[atti++] = GST_VIDEO_INFO_COMP_HEIGHT (in_info, plane);
+
+  attribs[atti++] = EGL_LINUX_DRM_FOURCC_EXT;
+  attribs[atti++] = fourcc;
+
+  attribs[atti++] = EGL_DMA_BUF_PLANE0_FD_EXT;
+  attribs[atti++] = dmabuf;
+
+  attribs[atti++] = EGL_DMA_BUF_PLANE0_OFFSET_EXT;
+  attribs[atti++] = offset;
+  attribs[atti++] = EGL_DMA_BUF_PLANE0_PITCH_EXT;
+  attribs[atti++] = GST_VIDEO_INFO_PLANE_STRIDE (in_info, plane);
+
+  attribs[atti] = EGL_NONE;
+
+  for (int i = 0; i < atti; i++)
+    GST_LOG ("attr %i: %08X", i, attribs[i]);
+
+  g_assert (atti == 12);
+
+  img = ctx_egl->eglCreateImage (ctx_egl->egl_display, EGL_NO_CONTEXT,
+      EGL_LINUX_DMA_BUF_EXT, NULL, attribs);
+
+  if (!img) {
+    GST_WARNING_OBJECT (allocator, "eglCreateImage failed: %s",
+        gst_gl_context_egl_get_error_string (eglGetError ()));
+    return NULL;
+  }
+
+  return gst_egl_image_allocator_wrap (allocator, ctx_egl, img, 0, 0,
+      in_info->size, NULL, NULL);
+}
+#endif /* GST_GL_HAVE_DMABUF */
+
 gboolean
 gst_egl_image_memory_setup_buffer (GstGLContext * ctx, GstVideoInfo * info,
     GstBuffer * buffer)
diff --git a/gst-libs/gst/gl/egl/gsteglimagememory.h b/gst-libs/gst/gl/egl/gsteglimagememory.h
index ce1fd44..aced247 100644
--- a/gst-libs/gst/gl/egl/gsteglimagememory.h
+++ b/gst-libs/gst/gl/egl/gsteglimagememory.h
@@ -64,6 +64,11 @@
 void gst_egl_image_memory_set_orientation (GstMemory * mem,
     GstVideoGLTextureOrientation orientation);
 
+#if GST_GL_HAVE_DMABUF
+GstMemory * gst_egl_image_memory_from_dmabuf (GstGLContext * context,
+    gint dmabuf, GstVideoInfo * in_info, gint plane, gsize offset);
+#endif
+
 G_END_DECLS
 
 #endif /* _GST_GL_MEMORY_H_ */
diff --git a/gst-libs/gst/gl/egl/gstglcontext_egl.c b/gst-libs/gst/gl/egl/gstglcontext_egl.c
index 3a4aa35..ceafdf3 100644
--- a/gst-libs/gst/gl/egl/gstglcontext_egl.c
+++ b/gst-libs/gst/gl/egl/gstglcontext_egl.c
@@ -30,6 +30,8 @@
 
 #include "gstglcontext_egl.h"
 #include <gst/gl/egl/gstegl.h>
+#include "../utils/opengl_versions.h"
+#include "../utils/gles_versions.h"
 
 #if GST_GL_HAVE_WINDOW_X11
 #include "../x11/gstglwindow_x11.h"
@@ -107,12 +109,10 @@
   return g_object_new (GST_GL_TYPE_CONTEXT_EGL, NULL);
 }
 
-static const gchar *
-gst_gl_context_egl_get_error_string (void)
+const gchar *
+gst_gl_context_egl_get_error_string (EGLint err)
 {
-  EGLint nErr = eglGetError ();
-
-  switch (nErr) {
+  switch (err) {
     case EGL_SUCCESS:
       return "EGL_SUCCESS";
     case EGL_BAD_DISPLAY:
@@ -150,7 +150,7 @@
 gst_gl_context_egl_choose_format (GstGLContext * context, GError ** error)
 {
 #if GST_GL_HAVE_WINDOW_X11
-  if (GST_GL_IS_WINDOW_X11 (context->window)) {
+  if (GST_IS_GL_WINDOW_X11 (context->window)) {
     GstGLWindow *window = gst_gl_context_get_window (context);
     GstGLWindowX11 *window_x11 = GST_GL_WINDOW_X11 (window);
     gint ret;
@@ -173,19 +173,36 @@
 }
 
 static gboolean
-gst_gl_context_egl_choose_config (GstGLContextEGL * egl,
-    GstGLContext * other_context, GError ** error)
+gst_gl_context_egl_choose_config (GstGLContextEGL * egl, GstGLAPI gl_api,
+    gint major, GError ** error)
 {
+  gboolean create_context;
   EGLint numConfigs;
   gint i = 0;
   EGLint config_attrib[20];
 
+  create_context =
+      gst_gl_check_extension ("EGL_KHR_create_context", egl->egl_exts);
+  /* silence unused warnings */
+  (void) create_context;
+
   config_attrib[i++] = EGL_SURFACE_TYPE;
   config_attrib[i++] = EGL_WINDOW_BIT;
   config_attrib[i++] = EGL_RENDERABLE_TYPE;
-  if (egl->gl_api & GST_GL_API_GLES2)
-    config_attrib[i++] = EGL_OPENGL_ES2_BIT;
-  else
+  if (gl_api & GST_GL_API_GLES2) {
+    if (major == 3) {
+#if defined(EGL_KHR_create_context)
+      if (create_context) {
+        config_attrib[i++] = EGL_OPENGL_ES3_BIT_KHR;
+      } else
+#endif
+      {
+        return FALSE;
+      }
+    } else {
+      config_attrib[i++] = EGL_OPENGL_ES2_BIT;
+    }
+  } else
     config_attrib[i++] = EGL_OPENGL_BIT;
 #if defined(USE_EGL_RPI) && GST_GL_HAVE_WINDOW_WAYLAND
   /* The configurations with a=0 seems to be buggy whereas
@@ -210,7 +227,7 @@
   } else {
     g_set_error (error, GST_GL_CONTEXT_ERROR, GST_GL_CONTEXT_ERROR_WRONG_CONFIG,
         "Failed to set window configuration: %s",
-        gst_gl_context_egl_get_error_string ());
+        gst_gl_context_egl_get_error_string (eglGetError ()));
     goto failure;
   }
 
@@ -220,6 +237,71 @@
   return FALSE;
 }
 
+static EGLContext
+_create_context_with_flags (GstGLContextEGL * egl, EGLContext share_context,
+    GstGLAPI gl_api, gint major, gint minor, gint contextFlags,
+    gint profileMask)
+{
+  gboolean create_context;
+#define N_ATTRIBS 20
+  gint attribs[N_ATTRIBS];
+  gint n = 0;
+
+  /* fail creation of apis/versions/flags that require EGL_KHR_create_context
+   * if the extension doesn't exist, namely:0
+   *
+   * - profile mask
+   * - context flags
+   * - GL3 > 3.1
+   * - GLES2 && minor > 0
+   */
+  create_context =
+      gst_gl_check_extension ("EGL_KHR_create_context", egl->egl_exts);
+  (void) create_context;
+  if (!create_context && (profileMask || contextFlags
+          || ((gl_api & GST_GL_API_OPENGL3)
+              && GST_GL_CHECK_GL_VERSION (major, minor, 3, 2))
+          || ((gl_api & GST_GL_API_GLES2) && minor > 0))) {
+    return 0;
+  }
+
+  GST_DEBUG_OBJECT (egl, "attempting to create OpenGL%s context version %d.%d "
+      "flags %x profile %x", gl_api & GST_GL_API_GLES2 ? " ES" : "", major,
+      minor, contextFlags, profileMask);
+
+#if defined(EGL_KHR_create_context)
+  if (create_context) {
+    if (major) {
+      attribs[n++] = EGL_CONTEXT_MAJOR_VERSION_KHR;
+      attribs[n++] = major;
+    }
+    if (minor) {
+      attribs[n++] = EGL_CONTEXT_MINOR_VERSION_KHR;
+      attribs[n++] = minor;
+    }
+    if (contextFlags) {
+      attribs[n++] = EGL_CONTEXT_FLAGS_KHR;
+      attribs[n++] = contextFlags;
+    }
+    if (profileMask) {
+      attribs[n++] = EGL_CONTEXT_OPENGL_PROFILE_MASK_KHR;
+      attribs[n++] = profileMask;
+    }
+  } else
+#endif
+  {
+    attribs[n++] = EGL_CONTEXT_CLIENT_VERSION;
+    attribs[n++] = major;
+  }
+  attribs[n++] = EGL_NONE;
+
+  g_assert (n < N_ATTRIBS);
+#undef N_ATTRIBS
+
+  return eglCreateContext (egl->egl_display, egl->egl_config, share_context,
+      attribs);
+}
+
 static gboolean
 gst_gl_context_egl_create_context (GstGLContext * context,
     GstGLAPI gl_api, GstGLContext * other_context, GError ** error)
@@ -227,11 +309,8 @@
   GstGLContextEGL *egl;
   GstGLWindow *window = NULL;
   EGLNativeWindowType window_handle = (EGLNativeWindowType) 0;
-  gint i = 0;
-  EGLint context_attrib[5];
   EGLint majorVersion;
   EGLint minorVersion;
-  const gchar *egl_exts;
   gboolean need_surface = TRUE;
   guintptr external_gl_context = 0;
   GstGLDisplay *display;
@@ -251,7 +330,8 @@
     external_gl_context = gst_gl_context_get_gl_context (other_context);
   }
 
-  if ((gl_api & (GST_GL_API_OPENGL | GST_GL_API_GLES2)) == GST_GL_API_NONE) {
+  if ((gl_api & (GST_GL_API_OPENGL | GST_GL_API_OPENGL3 | GST_GL_API_GLES2)) ==
+      GST_GL_API_NONE) {
     g_set_error (error, GST_GL_CONTEXT_ERROR, GST_GL_CONTEXT_ERROR_WRONG_API,
         "EGL supports opengl or gles2");
     goto failure;
@@ -288,11 +368,17 @@
   } else {
     g_set_error (error, GST_GL_CONTEXT_ERROR,
         GST_GL_CONTEXT_ERROR_RESOURCE_UNAVAILABLE,
-        "Failed to initialize egl: %s", gst_gl_context_egl_get_error_string ());
+        "Failed to initialize egl: %s",
+        gst_gl_context_egl_get_error_string (eglGetError ()));
     goto failure;
   }
 
-  if (gl_api & GST_GL_API_OPENGL) {
+  egl->egl_exts = eglQueryString (egl->egl_display, EGL_EXTENSIONS);
+
+  if (gl_api & (GST_GL_API_OPENGL | GST_GL_API_OPENGL3)) {
+    GstGLAPI chosen_gl_api = 0;
+    gint i;
+
     /* egl + opengl only available with EGL 1.4+ */
     if (majorVersion == 1 && minorVersion <= 3) {
       if ((gl_api & ~GST_GL_API_OPENGL) == GST_GL_API_NONE) {
@@ -318,67 +404,115 @@
     if (!eglBindAPI (EGL_OPENGL_API)) {
       g_set_error (error, GST_GL_CONTEXT_ERROR, GST_GL_CONTEXT_ERROR_FAILED,
           "Failed to bind OpenGL API: %s",
-          gst_gl_context_egl_get_error_string ());
+          gst_gl_context_egl_get_error_string (eglGetError ()));
       goto failure;
     }
 
-    GST_INFO ("Using OpenGL");
-    egl->gl_api = GST_GL_API_OPENGL;
+    GST_INFO ("Bound OpenGL");
+
+    /* api, version only matters for gles */
+    if (!gst_gl_context_egl_choose_config (egl, GST_GL_API_OPENGL, 0, error)) {
+      g_assert (error == NULL || *error != NULL);
+      goto failure;
+    }
+
+    for (i = 0; i < G_N_ELEMENTS (opengl_versions); i++) {
+      gint profileMask = 0;
+      gint contextFlags = 0;
+
+      if (GST_GL_CHECK_GL_VERSION (opengl_versions[i].major,
+              opengl_versions[i].minor, 3, 2)) {
+        /* skip gl3 contexts if requested */
+        if ((gl_api & GST_GL_API_OPENGL3) == 0)
+          continue;
+
+        chosen_gl_api = GST_GL_API_OPENGL3;
+#if defined(EGL_KHR_create_context)
+        profileMask |= EGL_CONTEXT_OPENGL_CORE_PROFILE_BIT_KHR;
+        contextFlags |= EGL_CONTEXT_OPENGL_DEBUG_BIT_KHR;
+#endif
+      } else if (opengl_versions[i].major == 3 && opengl_versions[i].minor == 1) {
+        /* skip 3.1, the implementation is free to give us either a core or a
+         * compatibility context (we have no say) */
+        continue;
+      } else {
+        /* skip legacy contexts if requested */
+        if ((gl_api & GST_GL_API_OPENGL) == 0)
+          continue;
+
+        chosen_gl_api = GST_GL_API_OPENGL;
+      }
+
+      egl->egl_context =
+          _create_context_with_flags (egl, (EGLContext) external_gl_context,
+          chosen_gl_api, opengl_versions[i].major,
+          opengl_versions[i].minor, contextFlags, profileMask);
+
+      if (egl->egl_context)
+        break;
+
+#if defined(EGL_KHR_create_context)
+      profileMask &= ~EGL_CONTEXT_OPENGL_DEBUG_BIT_KHR;
+
+      egl->egl_context =
+          _create_context_with_flags (egl, (EGLContext) external_gl_context,
+          chosen_gl_api, opengl_versions[i].major,
+          opengl_versions[i].minor, contextFlags, profileMask);
+
+      if (egl->egl_context)
+        break;
+#endif
+    }
+
+    egl->gl_api = chosen_gl_api;
   } else if (gl_api & GST_GL_API_GLES2) {
+    gint i;
+
   try_gles2:
     if (!eglBindAPI (EGL_OPENGL_ES_API)) {
       g_set_error (error, GST_GL_CONTEXT_ERROR, GST_GL_CONTEXT_ERROR_FAILED,
           "Failed to bind OpenGL|ES API: %s",
-          gst_gl_context_egl_get_error_string ());
+          gst_gl_context_egl_get_error_string (eglGetError ()));
       goto failure;
     }
 
-    GST_INFO ("Using OpenGL|ES 2.0");
+    GST_INFO ("Bound OpenGL|ES");
+
+    for (i = 0; i < G_N_ELEMENTS (gles2_versions); i++) {
+      gint profileMask = 0;
+      gint contextFlags = 0;
+
+      if (!gst_gl_context_egl_choose_config (egl, GST_GL_API_GLES2,
+              gles2_versions[i].major, error)) {
+        continue;
+      }
+#if defined(EGL_KHR_create_context)
+      /* try a debug context */
+      contextFlags |= EGL_CONTEXT_OPENGL_DEBUG_BIT_KHR;
+
+      egl->egl_context =
+          _create_context_with_flags (egl, (EGLContext) external_gl_context,
+          GST_GL_API_GLES2, gles2_versions[i].major,
+          gles2_versions[i].minor, contextFlags, profileMask);
+
+      if (egl->egl_context)
+        break;
+
+      /* try without a debug context */
+      contextFlags &= ~EGL_CONTEXT_OPENGL_DEBUG_BIT_KHR;
+#endif
+
+      egl->egl_context =
+          _create_context_with_flags (egl, (EGLContext) external_gl_context,
+          GST_GL_API_GLES2, gles2_versions[i].major,
+          gles2_versions[i].minor, contextFlags, profileMask);
+
+      if (egl->egl_context)
+        break;
+    }
     egl->gl_api = GST_GL_API_GLES2;
   }
 
-  if (!gst_gl_context_egl_choose_config (egl, other_context, error)) {
-    g_assert (error == NULL || *error != NULL);
-    goto failure;
-  }
-
-  egl_exts = eglQueryString (egl->egl_display, EGL_EXTENSIONS);
-
-  GST_DEBUG ("about to create gl context");
-
-  if (egl->gl_api & GST_GL_API_GLES2) {
-    context_attrib[i++] = EGL_CONTEXT_CLIENT_VERSION;
-    context_attrib[i++] = 2;
-  }
-#if !defined(GST_DISABLE_GST_DEBUG) && defined(EGL_KHR_create_context)
-  if (gst_gl_check_extension ("EGL_KHR_create_context", egl_exts)) {
-    context_attrib[i++] = EGL_CONTEXT_FLAGS_KHR;
-    context_attrib[i++] = EGL_CONTEXT_OPENGL_DEBUG_BIT_KHR;
-  }
-#endif
-  context_attrib[i++] = EGL_NONE;
-
-  egl->egl_context =
-      eglCreateContext (egl->egl_display, egl->egl_config,
-      (EGLContext) external_gl_context, context_attrib);
-
-#ifdef EGL_KHR_create_context
-  if (egl->egl_context == EGL_NO_CONTEXT && egl->gl_api & GST_GL_API_GLES2
-      && eglGetError () != EGL_SUCCESS) {
-    /* try without EGL_CONTEXT_FLAGS flags as it was added to
-     * EGL_KHR_create_context for gles contexts */
-    int i;
-    for (i = 0; i < G_N_ELEMENTS (context_attrib); i++) {
-      if (context_attrib[i] == EGL_CONTEXT_FLAGS_KHR ||
-          context_attrib[i] == EGL_CONTEXT_OPENGL_DEBUG_BIT_KHR)
-        context_attrib[i] = EGL_NONE;
-    }
-    egl->egl_context =
-        eglCreateContext (egl->egl_display, egl->egl_config,
-        (EGLContext) external_gl_context, context_attrib);
-  }
-#endif
-
   if (egl->egl_context != EGL_NO_CONTEXT) {
     GST_INFO ("gl context created: %" G_GUINTPTR_FORMAT,
         (guintptr) egl->egl_context);
@@ -386,30 +520,30 @@
     g_set_error (error, GST_GL_CONTEXT_ERROR,
         GST_GL_CONTEXT_ERROR_CREATE_CONTEXT,
         "Failed to create a OpenGL context: %s",
-        gst_gl_context_egl_get_error_string ());
+        gst_gl_context_egl_get_error_string (eglGetError ()));
     goto failure;
   }
   /* FIXME do we want a window vfunc ? */
 #if GST_GL_HAVE_WINDOW_X11
-  if (GST_GL_IS_WINDOW_X11 (context->window)) {
+  if (GST_IS_GL_WINDOW_X11 (context->window)) {
     gst_gl_window_x11_create_window ((GstGLWindowX11 *) context->window);
   }
 #endif
 
   if (other_context == NULL) {
 #if GST_GL_HAVE_WINDOW_WAYLAND
-    if (GST_GL_IS_WINDOW_WAYLAND_EGL (context->window)) {
+    if (GST_IS_GL_WINDOW_WAYLAND_EGL (context->window)) {
       gst_gl_window_wayland_egl_create_window ((GstGLWindowWaylandEGL *)
           context->window);
     }
 #endif
 #if GST_GL_HAVE_WINDOW_WIN32
-    if (GST_GL_IS_WINDOW_WIN32 (context->window)) {
+    if (GST_IS_GL_WINDOW_WIN32 (context->window)) {
       gst_gl_window_win32_create_window ((GstGLWindowWin32 *) context->window);
     }
 #endif
 #if GST_GL_HAVE_WINDOW_DISPMANX
-    if (GST_GL_IS_WINDOW_DISPMANX_EGL (context->window)) {
+    if (GST_IS_GL_WINDOW_DISPMANX_EGL (context->window)) {
       gst_gl_window_dispmanx_egl_create_window ((GstGLWindowDispmanxEGL *)
           context->window);
     }
@@ -428,7 +562,8 @@
         window_handle, NULL);
     /* Store window handle for later comparision */
     egl->window_handle = window_handle;
-  } else if (!gst_gl_check_extension ("EGL_KHR_surfaceless_context", egl_exts)) {
+  } else if (!gst_gl_check_extension ("EGL_KHR_surfaceless_context",
+          egl->egl_exts)) {
     EGLint surface_attrib[7];
     gint j = 0;
 
@@ -458,7 +593,7 @@
     } else {
       g_set_error (error, GST_GL_CONTEXT_ERROR, GST_GL_CONTEXT_ERROR_FAILED,
           "Failed to create window surface: %s",
-          gst_gl_context_egl_get_error_string ());
+          gst_gl_context_egl_get_error_string (eglGetError ()));
       goto failure;
     }
   }
@@ -469,7 +604,7 @@
         "eglCreateImage");
     egl->eglDestroyImage = gst_gl_context_get_proc_address (context,
         "eglDestroyImage");
-  } else if (gst_gl_check_extension ("EGL_KHR_image_base", egl_exts)) {
+  } else if (gst_gl_check_extension ("EGL_KHR_image_base", egl->egl_exts)) {
     egl->eglCreateImage = gst_gl_context_get_proc_address (context,
         "eglCreateImageKHR");
     egl->eglDestroyImage = gst_gl_context_get_proc_address (context,
@@ -540,7 +675,7 @@
         egl->egl_surface = EGL_NO_SURFACE;
         if (!result) {
           GST_ERROR_OBJECT (context, "Failed to destroy old window surface: %s",
-              gst_gl_context_egl_get_error_string ());
+              gst_gl_context_egl_get_error_string (eglGetError ()));
           goto done;
         }
       }
@@ -551,21 +686,22 @@
 
       if (egl->egl_surface == EGL_NO_SURFACE) {
         GST_ERROR_OBJECT (context, "Failed to create window surface: %s",
-            gst_gl_context_egl_get_error_string ());
+            gst_gl_context_egl_get_error_string (eglGetError ()));
         result = FALSE;
         goto done;
       }
     }
     result = eglMakeCurrent (egl->egl_display, egl->egl_surface,
         egl->egl_surface, egl->egl_context);
-  } else
+  } else {
     result = eglMakeCurrent (egl->egl_display, EGL_NO_SURFACE,
         EGL_NO_SURFACE, EGL_NO_CONTEXT);
+  }
 
   if (!result) {
     GST_ERROR_OBJECT (context,
         "Failed to bind context to the current rendering thread: %s",
-        gst_gl_context_egl_get_error_string ());
+        gst_gl_context_egl_get_error_string (eglGetError ()));
   }
 
 done:
@@ -610,7 +746,7 @@
 #else
   /* On Linux the .so is only in -dev packages, try with a real soname
    * Proper compilers will optimize away the strcmp */
-  if (strcmp (G_MODULE_SUFFIX, "so") == 0)
+  if (g_strcmp0 (G_MODULE_SUFFIX, "so") == 0)
     module_egl = g_module_open ("libEGL.so.1", G_MODULE_BIND_LAZY);
 
   /* This automatically handles the suffix and even .la files */
diff --git a/gst-libs/gst/gl/egl/gstglcontext_egl.h b/gst-libs/gst/gl/egl/gstglcontext_egl.h
index 88b8bd7..90abb03 100644
--- a/gst-libs/gst/gl/egl/gstglcontext_egl.h
+++ b/gst-libs/gst/gl/egl/gstglcontext_egl.h
@@ -34,8 +34,8 @@
 #define GST_GL_TYPE_CONTEXT_EGL         (gst_gl_context_egl_get_type())
 #define GST_GL_CONTEXT_EGL(o)           (G_TYPE_CHECK_INSTANCE_CAST((o), GST_GL_TYPE_CONTEXT_EGL, GstGLContextEGL))
 #define GST_GL_CONTEXT_EGL_CLASS(k)     (G_TYPE_CHECK_CLASS((k), GST_GL_TYPE_CONTEXT_EGL, GstGLContextEGLClass))
-#define GST_GL_IS_CONTEXT_EGL(o)        (G_TYPE_CHECK_INSTANCE_TYPE((o), GST_GL_TYPE_CONTEXT_EGL))
-#define GST_GL_IS_CONTEXT_EGL_CLASS(k)  (G_TYPE_CHECK_CLASS_TYPE((k), GST_GL_TYPE_CONTEXT_EGL))
+#define GST_IS_GL_CONTEXT_EGL(o)        (G_TYPE_CHECK_INSTANCE_TYPE((o), GST_GL_TYPE_CONTEXT_EGL))
+#define GST_IS_GL_CONTEXT_EGL_CLASS(k)  (G_TYPE_CHECK_CLASS_TYPE((k), GST_GL_TYPE_CONTEXT_EGL))
 #define GST_GL_CONTEXT_EGL_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS((o), GST_GL_TYPE_CONTEXT_EGL, GstGLContextEGLClass))
 
 struct _GstGLContextEGL {
@@ -48,6 +48,8 @@
 
   GstGLAPI gl_api;
 
+  const gchar *egl_exts;
+
   EGLImageKHR (*eglCreateImage) (EGLDisplay dpy, EGLContext ctx, EGLenum target,
       EGLClientBuffer buffer, const EGLint *attrib_list);
   EGLBoolean (*eglDestroyImage) (EGLDisplay dpy, EGLImageKHR image);
@@ -64,6 +66,9 @@
 guintptr            gst_gl_context_egl_get_current_context  (void);
 gpointer            gst_gl_context_egl_get_proc_address     (GstGLAPI gl_api, const gchar * name);
 
+const gchar * gst_gl_context_egl_get_error_string (EGLint err);
+
+
 /* TODO:
  * add support for EGL_NO_CONTEXT
  * add gst_gl_context_egl_new_gl_no_context that only manages the display
diff --git a/gst-libs/gst/gl/gl.h b/gst-libs/gst/gl/gl.h
index 4b1e8ef..b17a4c6 100644
--- a/gst-libs/gst/gl/gl.h
+++ b/gst-libs/gst/gl/gl.h
@@ -31,23 +31,28 @@
 #include <gst/gl/gstglapi.h>
 #include <gst/gl/gstgldisplay.h>
 #include <gst/gl/gstglcontext.h>
+#include <gst/gl/gstgldebug.h>
 #include <gst/gl/gstglfeature.h>
+#include <gst/gl/gstglformat.h>
 #include <gst/gl/gstglutils.h>
 #include <gst/gl/gstglwindow.h>
+#include <gst/gl/gstglslstage.h>
 #include <gst/gl/gstglshader.h>
+#include <gst/gl/gstglshaderstrings.h>
 #include <gst/gl/gstglcolorconvert.h>
 #include <gst/gl/gstglupload.h>
-#include <gst/gl/gstgluploadmeta.h>
-#include <gst/gl/gstgldownload.h>
-#include <gst/gl/gstglbasebuffer.h>
+#include <gst/gl/gstglbasememory.h>
+#include <gst/gl/gstglbuffer.h>
 #include <gst/gl/gstglmemory.h>
+#include <gst/gl/gstglmemorypbo.h>
 #include <gst/gl/gstglbufferpool.h>
 #include <gst/gl/gstglframebuffer.h>
 #include <gst/gl/gstglbasefilter.h>
 #include <gst/gl/gstglviewconvert.h>
 #include <gst/gl/gstglfilter.h>
-#include <gst/gl/gstglshadervariables.h>
 #include <gst/gl/gstglsyncmeta.h>
 #include <gst/gl/gstgloverlaycompositor.h>
+#include <gst/gl/gstglquery.h>
+#include <gst/gl/gstglcontrolbindingproxy.h>
 
 #endif /* __GST_GL_H__ */
diff --git a/gst-libs/gst/gl/glprototypes/Makefile.am b/gst-libs/gst/gl/glprototypes/Makefile.am
index 6ea90db..54ebc27 100644
--- a/gst-libs/gst/gl/glprototypes/Makefile.am
+++ b/gst-libs/gst/gl/glprototypes/Makefile.am
@@ -15,5 +15,6 @@
 	debug.h \
 	vao.h \
 	sync.h \
-	buffers.h
+	buffers.h \
+	query.h
 
diff --git a/gst-libs/gst/gl/glprototypes/Makefile.in b/gst-libs/gst/gl/glprototypes/Makefile.in
index 1958ba9..50d7df6 100644
--- a/gst-libs/gst/gl/glprototypes/Makefile.in
+++ b/gst-libs/gst/gl/glprototypes/Makefile.in
@@ -115,16 +115,15 @@
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
 	$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
-	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gsettings.m4 \
-	$(top_srcdir)/m4/gst-fionread.m4 $(top_srcdir)/m4/gst-sdl.m4 \
-	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
-	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
-	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libgcrypt.m4 \
-	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
-	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
-	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
-	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
-	$(top_srcdir)/configure.ac
+	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gst-fionread.m4 \
+	$(top_srcdir)/m4/gst-sdl.m4 $(top_srcdir)/m4/iconv.m4 \
+	$(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \
+	$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
+	$(top_srcdir)/m4/libgcrypt.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
+	$(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 DIST_COMMON = $(srcdir)/Makefile.am $(prototype_HEADERS) \
@@ -237,6 +236,8 @@
 CLUTTER_X11_LIBS = @CLUTTER_X11_LIBS@
 CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
+CUDA_CFLAGS = @CUDA_CFLAGS@
+CUDA_LIBS = @CUDA_LIBS@
 CURL_CFLAGS = @CURL_CFLAGS@
 CURL_LIBS = @CURL_LIBS@
 CXX = @CXX@
@@ -274,6 +275,8 @@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
+EGL_CFLAGS = @EGL_CFLAGS@
+EGL_LIBS = @EGL_LIBS@
 EGREP = @EGREP@
 ERROR_CFLAGS = @ERROR_CFLAGS@
 ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
@@ -282,7 +285,6 @@
 EXIF_CFLAGS = @EXIF_CFLAGS@
 EXIF_LIBS = @EXIF_LIBS@
 FAAC_LIBS = @FAAC_LIBS@
-FAAD_IS_NEAAC = @FAAD_IS_NEAAC@
 FAAD_LIBS = @FAAD_LIBS@
 FFLAGS = @FFLAGS@
 FGREP = @FGREP@
@@ -301,8 +303,9 @@
 GIO_LIBS = @GIO_LIBS@
 GIO_UNIX_CFLAGS = @GIO_UNIX_CFLAGS@
 GIO_UNIX_LIBS = @GIO_UNIX_LIBS@
+GLES2_CFLAGS = @GLES2_CFLAGS@
+GLES2_LIBS = @GLES2_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
-GLIB_COMPILE_SCHEMAS = @GLIB_COMPILE_SCHEMAS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
@@ -319,16 +322,17 @@
 GMODULE_NO_EXPORT_LIBS = @GMODULE_NO_EXPORT_LIBS@
 GMSGFMT = @GMSGFMT@
 GMSGFMT_015 = @GMSGFMT_015@
+GNUSTL_CFLAGS = @GNUSTL_CFLAGS@
+GNUSTL_LIBS = @GNUSTL_LIBS@
 GRAPHENE_CFLAGS = @GRAPHENE_CFLAGS@
 GRAPHENE_LIBS = @GRAPHENE_LIBS@
 GREP = @GREP@
-GSETTINGS_CFLAGS = @GSETTINGS_CFLAGS@
-GSETTINGS_DISABLE_SCHEMAS_COMPILE = @GSETTINGS_DISABLE_SCHEMAS_COMPILE@
-GSETTINGS_LIBS = @GSETTINGS_LIBS@
 GSM_LIBS = @GSM_LIBS@
 GSTPB_PLUGINS_DIR = @GSTPB_PLUGINS_DIR@
 GSTPB_PREFIX = @GSTPB_PREFIX@
 GST_AGE = @GST_AGE@
+GST_ALLOCATORS_CFLAGS = @GST_ALLOCATORS_CFLAGS@
+GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
 GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
 GST_API_VERSION = @GST_API_VERSION@
 GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
@@ -354,6 +358,8 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PBUTILS_CFLAGS = @GST_PBUTILS_CFLAGS@
+GST_PBUTILS_LIBS = @GST_PBUTILS_LIBS@
 GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BAD_CFLAGS = @GST_PLUGINS_BAD_CFLAGS@
@@ -379,6 +385,8 @@
 GST_PREFIX = @GST_PREFIX@
 GST_REVISION = @GST_REVISION@
 GST_TOOLS_DIR = @GST_TOOLS_DIR@
+GST_VIDEO_CFLAGS = @GST_VIDEO_CFLAGS@
+GST_VIDEO_LIBS = @GST_VIDEO_LIBS@
 GTK3_CFLAGS = @GTK3_CFLAGS@
 GTK3_GL_CFLAGS = @GTK3_GL_CFLAGS@
 GTK3_GL_LIBS = @GTK3_GL_LIBS@
@@ -480,6 +488,7 @@
 LTLIBICONV = @LTLIBICONV@
 LTLIBINTL = @LTLIBINTL@
 LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
 MANIFEST_TOOL = @MANIFEST_TOOL@
@@ -493,8 +502,6 @@
 MODPLUG_LIBS = @MODPLUG_LIBS@
 MPEG2ENC_CFLAGS = @MPEG2ENC_CFLAGS@
 MPEG2ENC_LIBS = @MPEG2ENC_LIBS@
-MPG123_CFLAGS = @MPG123_CFLAGS@
-MPG123_LIBS = @MPG123_LIBS@
 MPLEX_CFLAGS = @MPLEX_CFLAGS@
 MPLEX_LDFLAGS = @MPLEX_LDFLAGS@
 MPLEX_LIBS = @MPLEX_LIBS@
@@ -510,6 +517,8 @@
 NETTLE_LIBS = @NETTLE_LIBS@
 NM = @NM@
 NMEDIT = @NMEDIT@
+NVENCODE_CFLAGS = @NVENCODE_CFLAGS@
+NVENCODE_LIBS = @NVENCODE_LIBS@
 OBJC = @OBJC@
 OBJCDEPMODE = @OBJCDEPMODE@
 OBJCFLAGS = @OBJCFLAGS@
@@ -567,16 +576,18 @@
 PYTHON_PLATFORM = @PYTHON_PLATFORM@
 PYTHON_PREFIX = @PYTHON_PREFIX@
 PYTHON_VERSION = @PYTHON_VERSION@
+QT_ANDROID_CFLAGS = @QT_ANDROID_CFLAGS@
+QT_ANDROID_LIBS = @QT_ANDROID_LIBS@
 QT_CFLAGS = @QT_CFLAGS@
 QT_LIBS = @QT_LIBS@
+QT_MAC_CFLAGS = @QT_MAC_CFLAGS@
+QT_MAC_LIBS = @QT_MAC_LIBS@
 QT_WAYLAND_CFLAGS = @QT_WAYLAND_CFLAGS@
 QT_WAYLAND_LIBS = @QT_WAYLAND_LIBS@
 QT_X11_CFLAGS = @QT_X11_CFLAGS@
 QT_X11_LIBS = @QT_X11_LIBS@
 RANLIB = @RANLIB@
 RCC = @RCC@
-RSVG_2_36_2_CFLAGS = @RSVG_2_36_2_CFLAGS@
-RSVG_2_36_2_LIBS = @RSVG_2_36_2_LIBS@
 RSVG_CFLAGS = @RSVG_CFLAGS@
 RSVG_LIBS = @RSVG_LIBS@
 RTMP_CFLAGS = @RTMP_CFLAGS@
@@ -628,6 +639,7 @@
 VOAACENC_LIBS = @VOAACENC_LIBS@
 VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
 VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VULKAN_LIBS = @VULKAN_LIBS@
 WARNING_CFLAGS = @WARNING_CFLAGS@
 WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
 WARNING_OBJCFLAGS = @WARNING_OBJCFLAGS@
@@ -638,6 +650,7 @@
 WAYLAND_LIBS = @WAYLAND_LIBS@
 WEBP_CFLAGS = @WEBP_CFLAGS@
 WEBP_LIBS = @WEBP_LIBS@
+WGET = @WGET@
 WILDMIDI_CFLAGS = @WILDMIDI_CFLAGS@
 WILDMIDI_LIBS = @WILDMIDI_LIBS@
 WINKS_LIBS = @WINKS_LIBS@
@@ -647,6 +660,8 @@
 X11_LIBS = @X11_LIBS@
 X265_CFLAGS = @X265_CFLAGS@
 X265_LIBS = @X265_LIBS@
+XCB_CFLAGS = @XCB_CFLAGS@
+XCB_LIBS = @XCB_LIBS@
 XCOMPOSITE_CFLAGS = @XCOMPOSITE_CFLAGS@
 XCOMPOSITE_LIBS = @XCOMPOSITE_LIBS@
 XGETTEXT = @XGETTEXT@
@@ -684,7 +699,6 @@
 docdir = @docdir@
 dvidir = @dvidir@
 exec_prefix = @exec_prefix@
-gsettingsschemadir = @gsettingsschemadir@
 host = @host@
 host_alias = @host_alias@
 host_cpu = @host_cpu@
@@ -740,7 +754,8 @@
 	debug.h \
 	vao.h \
 	sync.h \
-	buffers.h
+	buffers.h \
+	query.h
 
 all: all-am
 
diff --git a/gst-libs/gst/gl/glprototypes/all_functions.h b/gst-libs/gst/gl/glprototypes/all_functions.h
index c6af415..9f7e4f1 100644
--- a/gst-libs/gst/gl/glprototypes/all_functions.h
+++ b/gst-libs/gst/gl/glprototypes/all_functions.h
@@ -30,3 +30,4 @@
 #include "vao.h"
 #include "sync.h"
 #include "buffers.h"
+#include "query.h"
diff --git a/gst-libs/gst/gl/glprototypes/base.h b/gst-libs/gst/gl/glprototypes/base.h
index f0528b7..8394a38 100644
--- a/gst-libs/gst/gl/glprototypes/base.h
+++ b/gst-libs/gst/gl/glprototypes/base.h
@@ -255,7 +255,7 @@
                   "ARB\0",
                   "vertex_buffer_object\0")
 GST_GL_EXT_FUNCTION (void, GenBuffers,
-                     (GLuint		 n,
+                     (GLsizei		 n,
                       GLuint		*buffers))
 GST_GL_EXT_FUNCTION (void, BindBuffer,
                      (GLenum		 target,
diff --git a/gst-libs/gst/gl/glprototypes/debug.h b/gst-libs/gst/gl/glprototypes/debug.h
index 6c53ea2..135d4e6 100644
--- a/gst-libs/gst/gl/glprototypes/debug.h
+++ b/gst-libs/gst/gl/glprototypes/debug.h
@@ -34,6 +34,7 @@
 GST_GL_EXT_FUNCTION (void, DebugMessageInsert,
                      (GLenum source,
                       GLenum type,
+                      GLuint id,
                       GLenum severity,
                       GLsizei length,
                       const gchar *message))
@@ -52,7 +53,7 @@
 GST_GL_EXT_FUNCTION (void, GetPointerv,
                      (GLenum pname,
                       gpointer * params))
-GST_GL_EXT_END ()                      
+GST_GL_EXT_END ()
 
 GST_GL_EXT_BEGIN (khr_debug,
                   GST_GL_API_OPENGL3,
@@ -88,3 +89,29 @@
                       gchar *label))
 GST_GL_EXT_END ()
 
+GST_GL_EXT_BEGIN (ext_debug_marker,
+                  GST_GL_API_NONE,
+                  255, 255,
+                  255, 255,
+                  "EXT\0",
+                  "debug_marker\0")
+GST_GL_EXT_FUNCTION (void, InsertEventMarker,
+                     (GLsizei length,
+                      const gchar * message))
+GST_GL_EXT_FUNCTION (void, PushGroupMarker,
+                     (GLsizei length,
+                      const gchar * message))
+GST_GL_EXT_FUNCTION (void, PopGroupMarker,
+                     (void))
+GST_GL_EXT_END ()
+
+GST_GL_EXT_BEGIN (gremedy_string_marker,
+                  GST_GL_API_NONE,
+                  255, 255,
+                  255, 255,
+                  "GREMEDY\0",
+                  "string_marker\0")
+GST_GL_EXT_FUNCTION (void, StringMarker,
+                     (GLsizei length,
+                      const gchar * message))
+GST_GL_EXT_END ()
diff --git a/gst-libs/gst/gl/glprototypes/gstgl_compat.h b/gst-libs/gst/gl/glprototypes/gstgl_compat.h
index a4f963d..31b1e00 100644
--- a/gst-libs/gst/gl/glprototypes/gstgl_compat.h
+++ b/gst-libs/gst/gl/glprototypes/gstgl_compat.h
@@ -42,6 +42,9 @@
 #if !GST_GL_HAVE_GLUINT64
 typedef guint64 GLuint64;
 #endif
+#if !GST_GL_HAVE_GLINT64
+typedef gint64 GLint64;
+#endif
 
 #if !defined(GST_GL_DEBUG_PROC)
 #if defined(GLDEBUGPROC)
diff --git a/gst-libs/gst/gl/glprototypes/query.h b/gst-libs/gst/gl/glprototypes/query.h
new file mode 100644
index 0000000..09f1ba2
--- /dev/null
+++ b/gst-libs/gst/gl/glprototypes/query.h
@@ -0,0 +1,63 @@
+/*
+ * GStreamer
+ * Copyright (C) 2016 Matthew Waters <matthew@centricular.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+GST_GL_EXT_BEGIN (timer_query,
+                  GST_GL_API_OPENGL3,
+                  3, 3,
+                  3, 0,
+                  "ARB:\0ANGLE\0EXT\0",
+                  "timer_query\0disjoint_timer_query\0")
+GST_GL_EXT_FUNCTION (void, GenQueries,
+                     (GLsizei n,
+                     GLuint *ids))
+GST_GL_EXT_FUNCTION (void, DeleteQueries,
+                     (GLsizei n,
+                      GLuint *ids))
+GST_GL_EXT_FUNCTION (GLboolean, IsQuery,
+                     (GLuint id))
+GST_GL_EXT_FUNCTION (void, BeginQuery,
+                     (GLenum target,
+                      GLuint id))
+GST_GL_EXT_FUNCTION (void, EndQuery,
+                     (GLenum target))
+GST_GL_EXT_FUNCTION (void, QueryCounter,
+                     (GLuint id,
+                     GLenum target))
+GST_GL_EXT_FUNCTION (void, GetQueryiv,
+                     (GLenum target,
+                      GLenum pname,
+                      GLint *params))
+GST_GL_EXT_FUNCTION (void, GetQueryObjectiv,
+                     (GLuint id,
+                      GLenum pname,
+                      GLint *params))
+GST_GL_EXT_FUNCTION (void, GetQueryObjectuiv,
+                     (GLuint id,
+                      GLenum pname,
+                      GLuint *params))
+GST_GL_EXT_FUNCTION (void, GetQueryObjecti64v,
+                     (GLuint id,
+                      GLenum pname,
+                      GLint64 *params))
+GST_GL_EXT_FUNCTION (void, GetQueryObjectui64v,
+                     (GLuint id,
+                      GLenum pname,
+                      GLuint64 *params))
+GST_GL_EXT_END ()
diff --git a/gst-libs/gst/gl/gstgl_enums.h b/gst-libs/gst/gl/gstgl_enums.h
new file mode 100644
index 0000000..25c7b39
--- /dev/null
+++ b/gst-libs/gst/gl/gstgl_enums.h
@@ -0,0 +1,41 @@
+/*
+ * GStreamer
+ * Copyright (C) 2015 Matthew Waters <matthew@centricular.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifndef _GST_GL_ENUMS_H_
+#define _GST_GL_ENUMS_H_
+
+/**
+ * GstGLTextureTarget:
+ * @GST_GL_TEXTURE_TARGET_NONE: no texture target
+ * @GST_GL_TEXTURE_TARGET_2D: 2D texture target
+ * @GST_GL_TEXTURE_TARGET_RECTANGLE: rectangle texture target
+ * @GST_GL_TEXTURE_TARGET_EXTERNAL_OES: external oes texture target
+ *
+ * Since: 1.8
+ */
+typedef enum
+{
+  GST_GL_TEXTURE_TARGET_NONE,
+  GST_GL_TEXTURE_TARGET_2D,
+  GST_GL_TEXTURE_TARGET_RECTANGLE,
+  GST_GL_TEXTURE_TARGET_EXTERNAL_OES,
+} GstGLTextureTarget;
+
+#endif /* _GST_GL_ENUMS_H_ */
diff --git a/gst-libs/gst/gl/gstgl_fwd.h b/gst-libs/gst/gl/gstgl_fwd.h
index cb29c6d..fb64ff6 100644
--- a/gst-libs/gst/gl/gstgl_fwd.h
+++ b/gst-libs/gst/gl/gstgl_fwd.h
@@ -39,29 +39,37 @@
 typedef struct _GstGLWindowPrivate GstGLWindowPrivate;
 typedef struct _GstGLWindowClass   GstGLWindowClass;
 
-typedef struct _GstGLBaseBuffer GstGLBaseBuffer;
-typedef struct _GstGLBaseBufferAllocator GstGLBaseBufferAllocator;
-typedef struct _GstGLBaseBufferAllocatorClass GstGLBaseBufferAllocatorClass;
+typedef struct _GstGLBaseMemory GstGLBaseMemory;
+typedef struct _GstGLBaseMemoryAllocator GstGLBaseMemoryAllocator;
+typedef struct _GstGLBaseMemoryAllocatorClass GstGLBaseMemoryAllocatorClass;
+
+typedef struct _GstGLBuffer GstGLBuffer;
+typedef struct _GstGLBufferAllocator GstGLBufferAllocator;
+typedef struct _GstGLBufferAllocatorClass GstGLBufferAllocatorClass;
 
 typedef struct _GstGLMemory GstGLMemory;
-typedef struct _GstGLAllocator GstGLAllocator;
-typedef struct _GstGLAllocatorClass GstGLAllocatorClass;
+typedef struct _GstGLMemoryAllocator GstGLMemoryAllocator;
+typedef struct _GstGLMemoryAllocatorClass GstGLMemoryAllocatorClass;
+
+typedef struct _GstGLMemoryPBO GstGLMemoryPBO;
+typedef struct _GstGLMemoryPBOAllocator GstGLMemoryPBOAllocator;
+typedef struct _GstGLMemoryPBOAllocatorClass GstGLMemoryPBOAllocatorClass;
+
+typedef struct _GstGLSLStage        GstGLSLStage;
+typedef struct _GstGLSLStagePrivate GstGLSLStagePrivate;
+typedef struct _GstGLSLStageClass   GstGLSLStageClass;
 
 typedef struct _GstGLShader        GstGLShader;
 typedef struct _GstGLShaderPrivate GstGLShaderPrivate;
 typedef struct _GstGLShaderClass   GstGLShaderClass;
 
-typedef struct _GstGLDownload GstGLDownload;
-typedef struct _GstGLDownloadClass GstGLDownloadClass;
-typedef struct _GstGLDownloadPrivate GstGLDownloadPrivate;
-
 typedef struct _GstGLUpload GstGLUpload;
 typedef struct _GstGLUploadClass GstGLUploadClass;
 typedef struct _GstGLUploadPrivate GstGLUploadPrivate;
 
-typedef struct _GstGLUploadMeta GstGLUploadMeta;
-typedef struct _GstGLUploadMetaClass GstGLUploadMetaClass;
-typedef struct _GstGLUploadMetaPrivate GstGLUploadMetaPrivate;
+typedef struct _GstGLBufferPool GstGLBufferPool;
+typedef struct _GstGLBufferPoolClass GstGLBufferPoolClass;
+typedef struct _GstGLBufferPoolPrivate GstGLBufferPoolPrivate;
 
 typedef struct _GstGLColorConvert GstGLColorConvert;
 typedef struct _GstGLColorConvertClass GstGLColorConvertClass;
@@ -81,6 +89,74 @@
 typedef struct _GstGLOverlayCompositor GstGLOverlayCompositor;
 typedef struct _GstGLOverlayCompositorClass GstGLOverlayCompositorClass;
 
+typedef struct _GstGLQuery GstGLQuery;
+
+#include <gst/gl/gstgl_enums.h>
+
+#ifdef G_DEFINE_AUTOPTR_CLEANUP_FUNC
+G_DEFINE_AUTOPTR_CLEANUP_FUNC(GstGLBaseFilter, gst_object_unref)
+#endif
+
+#ifdef G_DEFINE_AUTOPTR_CLEANUP_FUNC
+G_DEFINE_AUTOPTR_CLEANUP_FUNC(GstGLBaseMemoryAllocator, gst_object_unref)
+#endif
+
+#ifdef G_DEFINE_AUTOPTR_CLEANUP_FUNC
+G_DEFINE_AUTOPTR_CLEANUP_FUNC(GstGLBufferAllocator, gst_object_unref)
+#endif
+
+#ifdef G_DEFINE_AUTOPTR_CLEANUP_FUNC
+G_DEFINE_AUTOPTR_CLEANUP_FUNC(GstGLBufferPool, gst_object_unref)
+#endif
+
+#ifdef G_DEFINE_AUTOPTR_CLEANUP_FUNC
+G_DEFINE_AUTOPTR_CLEANUP_FUNC(GstGLColorConvert, gst_object_unref)
+#endif
+
+#ifdef G_DEFINE_AUTOPTR_CLEANUP_FUNC
+G_DEFINE_AUTOPTR_CLEANUP_FUNC(GstGLContext, gst_object_unref)
+#endif
+
+#ifdef G_DEFINE_AUTOPTR_CLEANUP_FUNC
+G_DEFINE_AUTOPTR_CLEANUP_FUNC(GstGLDisplay, gst_object_unref)
+#endif
+
+#ifdef G_DEFINE_AUTOPTR_CLEANUP_FUNC
+G_DEFINE_AUTOPTR_CLEANUP_FUNC(GstGLFilter, gst_object_unref)
+#endif
+
+#ifdef G_DEFINE_AUTOPTR_CLEANUP_FUNC
+G_DEFINE_AUTOPTR_CLEANUP_FUNC(GstGLMemoryAllocator, gst_object_unref)
+#endif
+
+#ifdef G_DEFINE_AUTOPTR_CLEANUP_FUNC
+G_DEFINE_AUTOPTR_CLEANUP_FUNC(GstGLMemoryPBOAllocator, gst_object_unref)
+#endif
+
+#ifdef G_DEFINE_AUTOPTR_CLEANUP_FUNC
+G_DEFINE_AUTOPTR_CLEANUP_FUNC(GstGLOverlayCompositor, gst_object_unref)
+#endif
+
+#ifdef G_DEFINE_AUTOPTR_CLEANUP_FUNC
+G_DEFINE_AUTOPTR_CLEANUP_FUNC(GstGLSLStage, gst_object_unref)
+#endif
+
+#ifdef G_DEFINE_AUTOPTR_CLEANUP_FUNC
+G_DEFINE_AUTOPTR_CLEANUP_FUNC(GstGLShader, gst_object_unref)
+#endif
+
+#ifdef G_DEFINE_AUTOPTR_CLEANUP_FUNC
+G_DEFINE_AUTOPTR_CLEANUP_FUNC(GstGLUpload, gst_object_unref)
+#endif
+
+#ifdef G_DEFINE_AUTOPTR_CLEANUP_FUNC
+G_DEFINE_AUTOPTR_CLEANUP_FUNC(GstGLViewConvert, gst_object_unref)
+#endif
+
+#ifdef G_DEFINE_AUTOPTR_CLEANUP_FUNC
+G_DEFINE_AUTOPTR_CLEANUP_FUNC(GstGLWindow, gst_object_unref)
+#endif
+
 G_END_DECLS
 
 #endif /* __GST_GL_FWD_H__ */
diff --git a/gst-libs/gst/gl/gstglapi.c b/gst-libs/gst/gl/gstglapi.c
index 3bee14b..f79a6e4 100644
--- a/gst-libs/gst/gl/gstglapi.c
+++ b/gst-libs/gst/gl/gstglapi.c
@@ -120,9 +120,9 @@
 
 /**
  * gst_gl_platform_to_string:
- * @api: a #GstGLPlatform to stringify
+ * @platform: a #GstGLPlatform to stringify
  *
- * Returns: A space seperated string of the OpenGL platforms enabled in @api
+ * Returns: A space seperated string of the OpenGL platforms enabled in @platform
  */
 gchar *
 gst_gl_platform_to_string (GstGLPlatform platform)
diff --git a/gst-libs/gst/gl/gstglapi.h b/gst-libs/gst/gl/gstglapi.h
index dd44b45..be38113 100644
--- a/gst-libs/gst/gl/gstglapi.h
+++ b/gst-libs/gst/gl/gstglapi.h
@@ -23,6 +23,13 @@
 
 #include <gst/gl/gstglconfig.h>
 
+/* This mimic GCC behaviour with system headers files even if GL headers may
+ * not be in the system header path. */
+#ifdef __GNUC__
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wredundant-decls"
+#endif
+
 /* OpenGL 2.0 for Embedded Systems */
 #if GST_GL_HAVE_GLES2
 #ifndef GL_GLEXT_PROTOTYPES
@@ -57,6 +64,10 @@
 # endif
 #endif
 
+#ifdef __GNUC__
+#pragma GCC diagnostic pop
+#endif
+
 #ifdef WINAPI
 #define GSTGLAPI WINAPI
 #else
@@ -68,6 +79,16 @@
 
 G_BEGIN_DECLS
 
+/**
+ * GstGLAPI:
+ * @GST_GL_API_NONE: no API
+ * @GST_GL_API_OPENGL: Desktop OpenGL up to and including 3.1.  The
+ *                    compatibility profile when the OpenGL version is >= 3.2
+ * @GST_GL_API_OPENGL3: Desktop OpenGL >= 3.2 core profile
+ * @GST_GL_API_GLES1: OpenGL ES 1.x
+ * @GST_GL_API_GLES2: OpenGL ES 2.x and 3.x
+ * @GST_GL_API_ANY: Any OpenGL API
+ */
 typedef enum {
   GST_GL_API_NONE = 0,
   GST_GL_API_OPENGL = (1 << 0),
@@ -78,11 +99,45 @@
   GST_GL_API_ANY = G_MAXUINT32
 } GstGLAPI;
 
+/**
+ * GST_GL_API_OPENGL_NAME:
+ *
+ * The name for %GST_GL_API_OPENGL used in various places
+ */
 #define GST_GL_API_OPENGL_NAME "opengl"
+
+/**
+ * GST_GL_API_OPENGL3_NAME:
+ *
+ * The name for %GST_GL_API_OPENGL3 used in various places
+ */
 #define GST_GL_API_OPENGL3_NAME "opengl3"
+
+/**
+ * GST_GL_API_GLES1_NAME:
+ *
+ * The name for %GST_GL_API_GLES1 used in various places
+ */
 #define GST_GL_API_GLES1_NAME "gles1"
+
+/**
+ * GST_GL_API_GLES2_NAME:
+ *
+ * The name for %GST_GL_API_GLES2 used in various places
+ */
 #define GST_GL_API_GLES2_NAME "gles2"
 
+/**
+ * GstGLPlatform:
+ * @GST_GL_PLATFORM_NONE: no platform
+ * @GST_GL_PLATFORM_EGL: the EGL platform used primarily with the X11, wayland
+ *                      and android window systems as well as on embedded Linux
+ * @GST_GL_PLATFORM_GLX: the GLX platform used primarily with the X11 window system
+ * @GST_GL_PLATFORM_WGL: the WGL platform used primarily on Windows
+ * @GST_GL_PLATFORM_CGL: the CGL platform used primarily on OS X
+ * @GST_GL_PLATFORM_EAGL: the EAGL platform used primarily on iOS
+ * @GST_GL_PLATFORM_ANY: any OpenGL platform
+ */
 typedef enum
 {
   GST_GL_PLATFORM_NONE = 0,
@@ -114,7 +169,7 @@
 gchar * gst_gl_api_to_string (GstGLAPI api);
 GstGLAPI gst_gl_api_from_string (const gchar * api_s);
 
-gchar * gst_gl_platform_to_string (GstGLPlatform api);
+gchar * gst_gl_platform_to_string (GstGLPlatform platform);
 GstGLPlatform gst_gl_platform_from_string (const gchar * platform_s);
 
 G_END_DECLS
diff --git a/gst-libs/gst/gl/gstglbasebuffer.c b/gst-libs/gst/gl/gstglbasebuffer.c
deleted file mode 100644
index 495e104..0000000
--- a/gst-libs/gst/gl/gstglbasebuffer.c
+++ /dev/null
@@ -1,666 +0,0 @@
-/*
- * GStreamer
- * Copyright (C) 2015 Matthew Waters <matthew@centricular.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include <string.h>
-
-#include "gstglbasebuffer.h"
-#include "gstglutils.h"
-
-/**
- * SECTION:gstglbuffer
- * @short_description: memory subclass for GL buffers
- * @see_also: #GstMemory, #GstAllocator
- *
- * GstGLBaseBuffer is a #GstMemory subclass providing support for the mapping of
- * GL buffers.  
- *
- * Data is uploaded or downloaded from the GPU as is necessary.
- */
-
-/* Implementation notes:
- *
- * Currently does not take into account GLES2 differences (no mapbuffer)
- */
-
-#define USING_OPENGL(context) (gst_gl_context_check_gl_version (context, GST_GL_API_OPENGL, 1, 0))
-#define USING_OPENGL3(context) (gst_gl_context_check_gl_version (context, GST_GL_API_OPENGL3, 3, 1))
-#define USING_GLES(context) (gst_gl_context_check_gl_version (context, GST_GL_API_GLES, 1, 0))
-#define USING_GLES2(context) (gst_gl_context_check_gl_version (context, GST_GL_API_GLES2, 2, 0))
-#define USING_GLES3(context) (gst_gl_context_check_gl_version (context, GST_GL_API_GLES2, 3, 0))
-
-/* compatibility definitions... */
-#ifndef GL_MAP_READ_BIT
-#define GL_MAP_READ_BIT 0x0001
-#endif
-#ifndef GL_MAP_WRITE_BIT
-#define GL_MAP_WRITE_BIT 0x0002
-#endif
-#ifndef GL_COPY_READ_BUFFER
-#define GL_COPY_READ_BUFFER 0x8F36
-#endif
-#ifndef GL_COPY_WRITE_BUFFER
-#define GL_COPY_WRITE_BUFFER 0x8F37
-#endif
-
-GST_DEBUG_CATEGORY_STATIC (GST_CAT_GL_BASE_BUFFER);
-#define GST_CAT_DEFUALT GST_CAT_GL_BASE_BUFFER
-
-static GstAllocator *_gl_base_buffer_allocator;
-
-GQuark
-gst_gl_base_buffer_error_quark (void)
-{
-  return g_quark_from_static_string ("gst-gl-base-buffer-error-quark");
-}
-
-static gboolean
-_default_create (GstGLBaseBuffer * mem, GError ** error)
-{
-  g_set_error (error, GST_GL_BASE_BUFFER_ERROR, GST_GL_BASE_BUFFER_ERROR_FAILED,
-      "subclass should define create() vfunc");
-
-  g_critical ("subclass should override "
-      "GstGLBaseBufferAllocatorClass::create() function");
-
-  return FALSE;
-}
-
-struct create_data
-{
-  GstGLBaseBuffer *mem;
-  gboolean result;
-};
-
-static void
-_mem_create_gl (GstGLContext * context, struct create_data *transfer)
-{
-  GstGLBaseBufferAllocatorClass *alloc_class;
-  GError *error = NULL;
-
-  alloc_class =
-      GST_GL_BASE_BUFFER_ALLOCATOR_GET_CLASS (transfer->mem->mem.allocator);
-
-  g_return_if_fail (alloc_class->create != NULL);
-
-  if ((transfer->result = alloc_class->create (transfer->mem, &error)))
-    return;
-
-  g_assert (error != NULL);
-
-  GST_CAT_ERROR (GST_CAT_GL_BASE_BUFFER, "Failed to create GL buffer: %s",
-      error->message);
-  g_clear_error (&error);
-}
-
-void
-gst_gl_base_buffer_init (GstGLBaseBuffer * mem, GstAllocator * allocator,
-    GstMemory * parent, GstGLContext * context, GstAllocationParams * params,
-    gsize size)
-{
-  gsize align = gst_memory_alignment, offset = 0, maxsize = size;
-  GstMemoryFlags flags = 0;
-  struct create_data data;
-
-  if (params) {
-    flags = params->flags;
-    align |= params->align;
-    offset = params->prefix;
-    maxsize += params->prefix + params->padding + align;
-  }
-
-  gst_memory_init (GST_MEMORY_CAST (mem), flags, allocator, parent, maxsize,
-      align, offset, size);
-
-  mem->context = gst_object_ref (context);
-  mem->data = NULL;
-  mem->alloc_data = NULL;
-
-  g_mutex_init (&mem->lock);
-
-  data.mem = mem;
-
-  gst_gl_context_thread_add (context,
-      (GstGLContextThreadFunc) _mem_create_gl, &data);
-  if (!data.result) {
-    GST_CAT_ERROR (GST_CAT_GL_BASE_BUFFER,
-        "Could not create GL buffer with context:%p", context);
-  }
-
-  GST_CAT_DEBUG (GST_CAT_GL_BASE_BUFFER, "new GL buffer memory:%p size:%"
-      G_GSIZE_FORMAT, mem, maxsize);
-}
-
-static gpointer
-_align_data (gpointer data, gsize align, gsize * maxsize)
-{
-  guint8 *ret = data;
-  gsize aoffset;
-
-  /* do alignment */
-  if ((aoffset = ((guintptr) ret & align))) {
-    aoffset = (align + 1) - aoffset;
-    ret += aoffset;
-    *maxsize -= aoffset;
-  }
-
-  return ret;
-}
-
-/* subclass usage only */
-GstGLBaseBuffer *
-gst_gl_base_buffer_alloc_data (GstGLBaseBuffer * gl_mem)
-{
-  GstMemory *mem = (GstMemory *) gl_mem;
-
-  if (gl_mem->data)
-    return gl_mem;
-
-  GST_CAT_LOG (GST_CAT_GL_BASE_BUFFER, "%p attempting allocation of data "
-      "pointer of size %" G_GSIZE_FORMAT, gl_mem, mem->maxsize);
-  gl_mem->alloc_data = g_try_malloc (mem->maxsize);
-
-  if (gl_mem->alloc_data == NULL) {
-    gst_memory_unref (mem);
-    return NULL;
-  }
-
-  gl_mem->data = _align_data (gl_mem->alloc_data, mem->align, &mem->maxsize);
-
-  GST_CAT_DEBUG (GST_CAT_GL_BASE_BUFFER, "%p allocated data pointer alloc %p, "
-      "data %p", gl_mem, gl_mem->alloc_data, gl_mem->data);
-
-  return gl_mem;
-}
-
-/* XXX: add as API? */
-static gpointer
-gst_gl_base_buffer_cpu_access (GstGLBaseBuffer * mem,
-    GstMapInfo * info, gsize size)
-{
-  const GstGLFuncs *gl = mem->context->gl_vtable;
-  gpointer data, ret;
-
-  gst_gl_base_buffer_alloc_data (mem);
-  ret = mem->data;
-
-  GST_CAT_LOG (GST_CAT_GL_BASE_BUFFER, "mapping id %d size %" G_GSIZE_FORMAT,
-      mem->id, size);
-
-  /* The extra data pointer indirection/memcpy is needed for coherent across
-   * concurrent map()'s in both GL and CPU */
-  if (GST_MEMORY_FLAG_IS_SET (mem, GST_GL_BASE_BUFFER_FLAG_NEED_DOWNLOAD)
-      && (info->flags & GST_MAP_GL) == 0 && (info->flags & GST_MAP_READ) != 0) {
-    gl->BindBuffer (mem->target, mem->id);
-
-    if (gl->MapBufferRange) {
-      /* FIXME: optionally remove this with a flag and return the
-       * glMapBufferRange pointer (requires
-       * GL_ARB_buffer_storage/GL4/GL_COHERENT_BIT) */
-      guint gl_map_flags = GL_MAP_READ_BIT;
-
-      data = gl->MapBufferRange (mem->target, 0, size, gl_map_flags);
-
-      if (data)
-        memcpy (mem->data, data, size);
-
-      gl->UnmapBuffer (mem->target);
-      ret = mem->data;
-    } else if (gl->GetBufferSubData) {
-      gl->GetBufferSubData (mem->target, 0, size, mem->data);
-      ret = mem->data;
-    } else {
-      ret = NULL;
-    }
-    gl->BindBuffer (mem->target, 0);
-  }
-
-  return ret;
-}
-
-/* XXX: add as API? */
-static void
-gst_gl_base_buffer_upload_cpu_write (GstGLBaseBuffer * mem, GstMapInfo * info,
-    gsize size)
-{
-  const GstGLFuncs *gl = mem->context->gl_vtable;
-  gpointer data;
-
-  if (!mem->data)
-    /* no data pointer has been written */
-    return;
-
-  /* The extra data pointer indirection/memcpy is needed for coherent across
-   * concurrent map()'s in both GL and CPU */
-  /* FIXME: uploading potentially half-written data for libav pushing READWRITE
-   * mapped buffers */
-  if (GST_MEMORY_FLAG_IS_SET (mem, GST_GL_BASE_BUFFER_FLAG_NEED_UPLOAD)
-      || (mem->map_flags & GST_MAP_WRITE) != 0) {
-    gl->BindBuffer (mem->target, mem->id);
-
-    if (gl->MapBufferRange) {
-      /* FIXME: optionally remove this with a flag and return the
-       * glMapBufferRange pointer (requires
-       * GL_ARB_buffer_storage/GL4/GL_COHERENT_BIT) */
-      guint gl_map_flags = GL_MAP_WRITE_BIT;
-
-      data = gl->MapBufferRange (mem->target, 0, size, gl_map_flags);
-
-      if (data)
-        memcpy (data, mem->data, size);
-
-      gl->UnmapBuffer (mem->target);
-    } else if (gl->BufferSubData) {
-      gl->BufferSubData (mem->target, 0, size, mem->data);
-    }
-    gl->BindBuffer (mem->target, 0);
-  }
-}
-
-static gpointer
-_default_map_buffer (GstGLBaseBuffer * mem, GstMapInfo * info, gsize size)
-{
-  if ((info->flags & GST_MAP_GL) != 0) {
-    if (info->flags & GST_MAP_READ) {
-      gst_gl_base_buffer_upload_cpu_write (mem, info, size);
-    }
-    return &mem->id;
-  } else {
-    return gst_gl_base_buffer_cpu_access (mem, info, size);
-  }
-
-  return NULL;
-}
-
-struct map_data
-{
-  GstGLBaseBuffer *mem;
-  GstMapInfo *info;
-  gsize size;
-  gpointer data;
-};
-
-static void
-_map_data_gl (GstGLContext * context, struct map_data *transfer)
-{
-  GstGLBaseBufferAllocatorClass *alloc_class;
-  GstGLBaseBuffer *mem = transfer->mem;
-  GstMapInfo *info = transfer->info;
-
-  alloc_class =
-      GST_GL_BASE_BUFFER_ALLOCATOR_GET_CLASS (transfer->mem->mem.allocator);
-
-  g_return_if_fail (alloc_class->map_buffer != NULL);
-
-  g_mutex_lock (&mem->lock);
-
-  GST_CAT_LOG (GST_CAT_GL_BASE_BUFFER, "mapping mem %p id %d flags %04x", mem,
-      mem->id, info->flags);
-
-  /* FIXME: validate map flags based on the memory domain */
-  if (mem->map_count++ == 0)
-    mem->map_flags = info->flags;
-  else {
-    /* assert that the flags are a subset of the first map flags */
-    g_assert ((((GST_MAP_GL - 1) & info->flags) & mem->map_flags) != 0);
-    GST_CAT_LOG (GST_CAT_GL_BASE_BUFFER, "multiple map no %d flags %04x "
-        "all flags %04x", mem->map_count, info->flags, mem->map_flags);
-  }
-
-  if ((info->flags & GST_MAP_GL) != (mem->map_flags & GST_MAP_GL))
-    mem->map_flags |= GST_MAP_GL;
-
-  if (info->flags & GST_MAP_GL)
-    mem->gl_map_count++;
-
-  transfer->data = alloc_class->map_buffer (transfer->mem, transfer->info,
-      transfer->size);
-
-  if (transfer->data) {
-    if (info->flags & GST_MAP_GL) {
-      if (info->flags & GST_MAP_WRITE)
-        GST_MINI_OBJECT_FLAG_SET (mem, GST_GL_BASE_BUFFER_FLAG_NEED_DOWNLOAD);
-      GST_MEMORY_FLAG_UNSET (mem, GST_GL_BASE_BUFFER_FLAG_NEED_UPLOAD);
-    } else {
-      if (info->flags & GST_MAP_WRITE)
-        GST_MINI_OBJECT_FLAG_SET (mem, GST_GL_BASE_BUFFER_FLAG_NEED_UPLOAD);
-      GST_MEMORY_FLAG_UNSET (mem, GST_GL_BASE_BUFFER_FLAG_NEED_DOWNLOAD);
-    }
-  }
-
-  g_mutex_unlock (&mem->lock);
-}
-
-static gpointer
-_mem_map_full (GstGLBaseBuffer * mem, GstMapInfo * info, gsize size)
-{
-  struct map_data transfer;
-
-  transfer.mem = mem;
-  transfer.info = info;
-  transfer.size = size;
-  transfer.data = NULL;
-
-  gst_gl_context_thread_add (mem->context,
-      (GstGLContextThreadFunc) _map_data_gl, &transfer);
-
-  return transfer.data;
-}
-
-static void
-_default_unmap_buffer (GstGLBaseBuffer * mem, GstMapInfo * info)
-{
-  /* XXX: optimistically transfer data */
-}
-
-struct unmap_data
-{
-  GstGLBaseBuffer *mem;
-  GstMapInfo *info;
-};
-
-static void
-_unmap_data_gl (GstGLContext * context, struct unmap_data *transfer)
-{
-  GstGLBaseBufferAllocatorClass *alloc_class;
-  GstGLBaseBuffer *mem = transfer->mem;
-  GstMapInfo *info = transfer->info;
-
-  alloc_class =
-      GST_GL_BASE_BUFFER_ALLOCATOR_GET_CLASS (transfer->mem->mem.allocator);
-
-  g_return_if_fail (alloc_class->unmap_buffer != NULL);
-
-  g_mutex_lock (&mem->lock);
-
-  GST_CAT_LOG (GST_CAT_GL_BASE_BUFFER, "unmapping mem %p id %d flags %04x", mem,
-      mem->id, info->flags);
-
-  alloc_class->unmap_buffer (transfer->mem, transfer->info);
-
-  if (info->flags & GST_MAP_GL && --mem->gl_map_count)
-    /* unset the gl flag */
-    mem->map_flags &= ~GST_MAP_GL;
-
-  if (--mem->map_count <= 0) {
-    mem->map_flags = 0;
-  }
-
-  if (info->flags & GST_MAP_GL) {
-    if (info->flags & GST_MAP_WRITE)
-      GST_MINI_OBJECT_FLAG_SET (mem, GST_GL_BASE_BUFFER_FLAG_NEED_DOWNLOAD);
-  } else {
-    if (info->flags & GST_MAP_WRITE)
-      GST_MINI_OBJECT_FLAG_SET (mem, GST_GL_BASE_BUFFER_FLAG_NEED_UPLOAD);
-  }
-
-  g_mutex_unlock (&mem->lock);
-}
-
-static void
-_mem_unmap_full (GstGLBaseBuffer * mem, GstMapInfo * info)
-{
-  struct unmap_data transfer;
-
-  transfer.mem = mem;
-  transfer.info = info;
-
-  gst_gl_context_thread_add (mem->context,
-      (GstGLContextThreadFunc) _unmap_data_gl, &transfer);
-}
-
-gboolean
-gst_gl_base_buffer_copy_buffer_sub_data (GstGLBaseBuffer * src,
-    GstGLBaseBuffer * dest, gssize offset, gssize size)
-{
-  const GstGLFuncs *gl = src->context->gl_vtable;
-  GstMapInfo sinfo, dinfo;
-
-  if (!gl->CopyBufferSubData)
-    /* This is GL(ES) 3.0+ only */
-    return FALSE;
-
-  if (!gst_memory_map ((GstMemory *) src, &sinfo, GST_MAP_READ | GST_MAP_GL)) {
-    GST_CAT_WARNING (GST_CAT_GL_BASE_BUFFER,
-        "failed to read map source memory %p", src);
-    return FALSE;
-  }
-
-  if (!gst_memory_map ((GstMemory *) dest, &dinfo, GST_MAP_WRITE | GST_MAP_GL)) {
-    GST_CAT_WARNING (GST_CAT_GL_BASE_BUFFER,
-        "failed to write map destination memory %p", dest);
-    gst_memory_unmap ((GstMemory *) src, &sinfo);
-    return FALSE;
-  }
-
-  gl->BindBuffer (GL_COPY_READ_BUFFER, src->id);
-  gl->BindBuffer (GL_COPY_WRITE_BUFFER, dest->id);
-  gl->CopyBufferSubData (GL_COPY_READ_BUFFER, GL_COPY_WRITE_BUFFER,
-      offset, 0, size);
-
-  gst_memory_unmap ((GstMemory *) src, &sinfo);
-  gst_memory_unmap ((GstMemory *) dest, &dinfo);
-
-  return TRUE;
-}
-
-gboolean
-gst_gl_base_buffer_memcpy (GstGLBaseBuffer * src, GstGLBaseBuffer * dest,
-    gssize offset, gssize size)
-{
-  GstMapInfo sinfo, dinfo;
-
-  if (!gst_memory_map ((GstMemory *) src, &sinfo, GST_MAP_READ)) {
-    GST_CAT_WARNING (GST_CAT_GL_BASE_BUFFER,
-        "could not read map source memory %p", src);
-    return FALSE;
-  }
-
-  if (!gst_memory_map ((GstMemory *) dest, &dinfo, GST_MAP_WRITE)) {
-    GST_CAT_WARNING (GST_CAT_GL_BASE_BUFFER,
-        "could not write map dest memory %p", dest);
-    gst_memory_unmap ((GstMemory *) src, &sinfo);
-    return FALSE;
-  }
-
-  GST_CAT_DEBUG (GST_CAT_GL_BASE_BUFFER,
-      "memcpy %" G_GSSIZE_FORMAT " memory %p -> %p", size, src, dest);
-  memcpy (dinfo.data, sinfo.data + offset, size);
-  gst_memory_unmap ((GstMemory *) dest, &dinfo);
-  gst_memory_unmap ((GstMemory *) src, &sinfo);
-
-  return TRUE;
-}
-
-static GstGLBaseBuffer *
-_default_copy (GstGLBaseBuffer * src, gssize offset, gssize size)
-{
-  return NULL;
-}
-
-struct copy_params
-{
-  GstGLBaseBuffer *src;
-  GstGLBaseBuffer *dest;
-  gssize offset;
-  gssize size;
-  gboolean result;
-};
-
-static void
-_mem_copy_gl (GstGLContext * context, struct copy_params *transfer)
-{
-  GstGLBaseBufferAllocatorClass *alloc_class;
-
-  alloc_class =
-      GST_GL_BASE_BUFFER_ALLOCATOR_GET_CLASS (transfer->src->mem.allocator);
-
-  g_return_if_fail (alloc_class->copy != NULL);
-
-  transfer->dest =
-      alloc_class->copy (transfer->src, transfer->offset, transfer->size);
-}
-
-static GstMemory *
-_mem_copy (GstGLBaseBuffer * src, gssize offset, gssize size)
-{
-  struct copy_params transfer;
-
-  transfer.dest = NULL;
-  transfer.src = src;
-  transfer.offset = offset;
-  transfer.size = size;
-  if (size == -1 || size > 0)
-    gst_gl_context_thread_add (src->context,
-        (GstGLContextThreadFunc) _mem_copy_gl, &transfer);
-
-  return (GstMemory *) transfer.dest;
-}
-
-static GstMemory *
-_mem_share (GstGLBaseBuffer * mem, gssize offset, gssize size)
-{
-  return NULL;
-}
-
-static gboolean
-_mem_is_span (GstGLBaseBuffer * mem1, GstGLBaseBuffer * mem2, gsize * offset)
-{
-  return FALSE;
-}
-
-static GstMemory *
-_mem_alloc (GstAllocator * allocator, gsize size, GstAllocationParams * params)
-{
-  g_critical ("Subclass should override GstAllocatorClass::alloc() function");
-
-  return NULL;
-}
-
-static void
-_default_destroy (GstGLBaseBuffer * mem)
-{
-}
-
-static void
-_destroy_gl_objects (GstGLContext * context, GstGLBaseBuffer * mem)
-{
-  GstGLBaseBufferAllocatorClass *alloc_class;
-
-  alloc_class = GST_GL_BASE_BUFFER_ALLOCATOR_GET_CLASS (mem->mem.allocator);
-
-  g_return_if_fail (alloc_class->destroy != NULL);
-
-  alloc_class->destroy (mem);
-}
-
-static void
-_mem_free (GstAllocator * allocator, GstMemory * memory)
-{
-  GstGLBaseBuffer *mem = (GstGLBaseBuffer *) memory;
-
-  GST_CAT_TRACE (GST_CAT_GL_BASE_BUFFER, "freeing buffer memory:%p id:%u", mem,
-      mem->id);
-
-  gst_gl_context_thread_add (mem->context,
-      (GstGLContextThreadFunc) _destroy_gl_objects, mem);
-
-  g_mutex_clear (&mem->lock);
-
-  if (mem->alloc_data) {
-    g_free (mem->alloc_data);
-    mem->alloc_data = NULL;
-  }
-  mem->data = NULL;
-
-  gst_object_unref (mem->context);
-}
-
-G_DEFINE_TYPE (GstGLBaseBufferAllocator, gst_gl_base_buffer_allocator,
-    GST_TYPE_ALLOCATOR);
-
-static void
-gst_gl_base_buffer_allocator_class_init (GstGLBaseBufferAllocatorClass * klass)
-{
-  GstAllocatorClass *allocator_class = (GstAllocatorClass *) klass;
-
-  allocator_class->alloc = _mem_alloc;
-  allocator_class->free = _mem_free;
-
-  klass->create = _default_create;
-  klass->map_buffer = _default_map_buffer;
-  klass->unmap_buffer = _default_unmap_buffer;
-  klass->copy = _default_copy;
-  klass->destroy = _default_destroy;
-}
-
-static void
-gst_gl_base_buffer_allocator_init (GstGLBaseBufferAllocator * allocator)
-{
-  GstAllocator *alloc = GST_ALLOCATOR_CAST (allocator);
-
-  alloc->mem_type = GST_GL_MEMORY_ALLOCATOR;
-  alloc->mem_map_full = (GstMemoryMapFullFunction) _mem_map_full;
-  alloc->mem_unmap_full = (GstMemoryUnmapFullFunction) _mem_unmap_full;
-  alloc->mem_copy = (GstMemoryCopyFunction) _mem_copy;
-  alloc->mem_share = (GstMemoryShareFunction) _mem_share;
-  alloc->mem_is_span = (GstMemoryIsSpanFunction) _mem_is_span;
-}
-
-/**
- * gst_gl_base_buffer_init_once:
- *
- * Initializes the GL Buffer allocator. It is safe to call this function
- * multiple times.  This must be called before any other GstGLBaseBuffer operation.
- */
-void
-gst_gl_base_buffer_init_once (void)
-{
-  static volatile gsize _init = 0;
-
-  if (g_once_init_enter (&_init)) {
-    GST_DEBUG_CATEGORY_INIT (GST_CAT_GL_BASE_BUFFER, "glbuffer", 0,
-        "OpenGL Buffer");
-
-    _gl_base_buffer_allocator =
-        g_object_new (gst_gl_base_buffer_allocator_get_type (), NULL);
-
-    gst_allocator_register (GST_GL_BASE_BUFFER_ALLOCATOR_NAME,
-        gst_object_ref (_gl_base_buffer_allocator));
-    g_once_init_leave (&_init, 1);
-  }
-}
-
-/**
- * gst_is_gl_base_buffer:
- * @mem:a #GstMemory
- * 
- * Returns: whether the memory at @mem is a #GstGLBaseBuffer
- */
-gboolean
-gst_is_gl_base_buffer (GstMemory * mem)
-{
-  return mem != NULL && mem->allocator != NULL &&
-      g_type_is_a (G_OBJECT_TYPE (mem->allocator),
-      GST_TYPE_GL_BASE_BUFFER_ALLOCATOR);
-}
diff --git a/gst-libs/gst/gl/gstglbasebuffer.h b/gst-libs/gst/gl/gstglbasebuffer.h
deleted file mode 100644
index 87c688d..0000000
--- a/gst-libs/gst/gl/gstglbasebuffer.h
+++ /dev/null
@@ -1,164 +0,0 @@
-/*
- * GStreamer
- * Copyright (C) 2015 Matthew Waters <matthew@centricular.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-#ifndef _GST_GL_BASE_BUFFER_H_
-#define _GST_GL_BASE_BUFFER_H_
-
-#include <gst/gst.h>
-#include <gst/gstallocator.h>
-#include <gst/gstmemory.h>
-
-#include <gst/gl/gstgl_fwd.h>
-
-G_BEGIN_DECLS
-
-#define GST_TYPE_GL_BASE_BUFFER_ALLOCATOR (gst_gl_base_buffer_allocator_get_type())
-GType gst_gl_base_buffer_allocator_get_type(void);
-
-#define GST_IS_GL_BASE_BUFFER_ALLOCATOR(obj)              (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GST_TYPE_GL_ALLOCATOR))
-#define GST_IS_GL_BASE_BUFFER_ALLOCATOR_CLASS(klass)      (G_TYPE_CHECK_CLASS_TYPE ((klass), GST_TYPE_GL_BASE_BUFFER_ALLOCATOR))
-#define GST_GL_BASE_BUFFER_ALLOCATOR_GET_CLASS(obj)       (G_TYPE_INSTANCE_GET_CLASS ((obj), GST_TYPE_GL_BASE_BUFFER_ALLOCATOR, GstGLBaseBufferAllocatorClass))
-#define GST_GL_BASE_BUFFER_ALLOCATOR(obj)                 (G_TYPE_CHECK_INSTANCE_CAST ((obj), GST_TYPE_GL_BASE_BUFFER_ALLOCATOR, GstGLBaseBufferAllocator))
-#define GST_GL_BASE_BUFFER_ALLOCATOR_CLASS(klass)         (G_TYPE_CHECK_CLASS_CAST ((klass), GST_TYPE_GL_BASE_BUFFER_ALLOCATOR, GstGLBaseBufferAllocatorClass))
-#define GST_GL_BASE_BUFFER_ALLOCATOR_CAST(obj)            ((GstGLBaseBufferAllocator *)(obj))
-
-GQuark gst_gl_base_buffer_error_quark (void);
-#define GST_GL_BASE_BUFFER_ERROR (gst_gl_base_buffer_error_quark ())
-
-typedef enum
-{
-  GST_GL_BASE_BUFFER_ERROR_FAILED,
-  GST_GL_BASE_BUFFER_ERROR_OLD_LIBS,
-  GST_GL_BASE_BUFFER_ERROR_RESOURCE_UNAVAILABLE,
-} GstGLBufferError;
-
-typedef enum
-{
-  GST_GL_BASE_BUFFER_FLAG_NEED_DOWNLOAD   = (GST_MEMORY_FLAG_LAST << 0),
-  GST_GL_BASE_BUFFER_FLAG_NEED_UPLOAD     = (GST_MEMORY_FLAG_LAST << 1)
-} GstGLBaseBufferFlags;
-
-/**
- * GST_MAP_GL:
- *
- * Flag indicating that we should map the GL object instead of to system memory.
- *
- * Combining #GST_MAP_GL with #GST_MAP_WRITE has the same semantics as though
- * you are writing to OpenGL. Conversely, combining #GST_MAP_GL with
- * #GST_MAP_READ has the same semantics as though you are reading from OpenGL.
- */
-#define GST_MAP_GL (GST_MAP_FLAG_LAST << 1)
-
-/**
- * GstGLBaseBuffer:
- * @mem: the parent object
- * @context: the #GstGLContext to use for GL operations
- * @id: the buffer id for this memory
- * @target: the GL target of this texture for binding purposes
- *
- * Represents information about a GL buffer
- */
-struct _GstGLBaseBuffer
-{
-  GstMemory             mem;
-
-  GstGLContext         *context;
-  guint                 id;
-  guint                 target;
-
-  /* <protected> */
-  GMutex                lock;
-
-  GstMapFlags           map_flags;       /* cumulative map flags */
-  gint                  map_count;
-  gint                  gl_map_count;
-
-  gpointer              data;
-  /* <private> */
-  gpointer              alloc_data;
-};
-
-typedef gboolean          (*GstGLBaseBufferAllocatorCreateFunction)      (GstGLBaseBuffer * buffer, GError ** error);
-typedef gpointer          (*GstGLBaseBufferAllocatorMapBufferFunction)   (GstGLBaseBuffer * buffer, GstMapInfo * info, gsize maxsize);
-typedef void              (*GstGLBaseBufferAllocatorUnmapBufferFunction) (GstGLBaseBuffer * buffer, GstMapInfo * info);
-typedef GstGLBaseBuffer * (*GstGLBaseBufferAllocatorCopyFunction)        (GstGLBaseBuffer * buffer, gssize offset, gssize size);
-typedef void              (*GstGLBaseBufferAllocatorDestroyFunction)     (GstGLBaseBuffer * buffer);
-
-/**
- * GstGLBaseBufferAllocator
- *
- * Opaque #GstGLAllocator struct
- */
-struct _GstGLBaseBufferAllocator
-{
-  GstAllocator parent;
-};
-
-/**
- * GstGLBaseBufferAllocatorClass:
- *
- * The #GstGLBaseBufferAllocatorClass only contains private data
- */
-struct _GstGLBaseBufferAllocatorClass
-{
-  GstAllocatorClass parent_class;
-
-  GstGLBaseBufferAllocatorCreateFunction      create;
-  GstGLBaseBufferAllocatorMapBufferFunction   map_buffer;
-  GstGLBaseBufferAllocatorUnmapBufferFunction unmap_buffer;
-  GstGLBaseBufferAllocatorCopyFunction        copy;
-  GstGLBaseBufferAllocatorDestroyFunction     destroy;
-};
-
-#include <gst/gl/gl.h>
-
-#define GST_CAPS_FEATURE_MEMORY_GL_BUFFER "memory:GLBuffer"
-
-/**
- * GST_GL_BASE_BUFFER_ALLOCATOR_NAME:
- *
- * The name of the GL buffer allocator
- */
-#define GST_GL_BASE_BUFFER_ALLOCATOR_NAME   "GLBuffer"
-
-void          gst_gl_base_buffer_init_once (void);
-gboolean      gst_is_gl_base_buffer        (GstMemory * mem);
-
-void          gst_gl_base_buffer_init      (GstGLBaseBuffer * mem,
-                                            GstAllocator * allocator,
-                                            GstMemory * parent,
-                                            GstGLContext * context,
-                                            GstAllocationParams * params,
-                                            gsize maxsize);
-
-GstGLBaseBuffer * gst_gl_base_buffer_alloc_data  (GstGLBaseBuffer * gl_mem);
-
-gboolean gst_gl_base_buffer_copy_buffer_sub_data (GstGLBaseBuffer * src,
-                                                  GstGLBaseBuffer * dest,
-                                                  gssize offset,
-                                                  gssize size);
-gboolean gst_gl_base_buffer_memcpy               (GstGLBaseBuffer * src,
-                                                  GstGLBaseBuffer * dest,
-                                                  gssize offset,
-                                                  gssize size);
-
-G_END_DECLS
-
-#endif /* _GST_GL_BUFFER_H_ */
diff --git a/gst-libs/gst/gl/gstglbasefilter.c b/gst-libs/gst/gl/gstglbasefilter.c
index e7b2e23..556cd43 100644
--- a/gst-libs/gst/gl/gstglbasefilter.c
+++ b/gst-libs/gst/gl/gstglbasefilter.c
@@ -26,6 +26,18 @@
 
 #include <gst/gl/gl.h>
 
+/**
+ * SECTION:gstglbasefilter
+ * @short_description: #GstBaseTransform subclass for transformin OpenGL resources
+ * @title: GstGLBaseFilter
+ * @see_also: #GstBaseTransform
+ *
+ * #GstGLBaseFilter handles the nitty gritty details of retrieving an OpenGL
+ * context.  It also provided some wrappers around #GstBaseTransform's
+ * start(), stop() and set_caps() virtual methods that ensure an OpenGL context
+ * is available and current in the calling thread.
+ */
+
 #define GST_CAT_DEFAULT gst_gl_base_filter_debug
 GST_DEBUG_CATEGORY_STATIC (GST_CAT_DEFAULT);
 
@@ -53,6 +65,7 @@
         "glbasefilter", 0, "glbasefilter element");
     );
 
+static void gst_gl_base_filter_finalize (GObject * object);
 static void gst_gl_base_filter_set_property (GObject * object, guint prop_id,
     const GValue * value, GParamSpec * pspec);
 static void gst_gl_base_filter_get_property (GObject * object, guint prop_id,
@@ -67,6 +80,8 @@
 static void gst_gl_base_filter_reset (GstGLBaseFilter * filter);
 static gboolean gst_gl_base_filter_start (GstBaseTransform * bt);
 static gboolean gst_gl_base_filter_stop (GstBaseTransform * bt);
+static gboolean gst_gl_base_filter_set_caps (GstBaseTransform * bt,
+    GstCaps * incaps, GstCaps * outcaps);
 static gboolean gst_gl_base_filter_decide_allocation (GstBaseTransform * trans,
     GstQuery * query);
 
@@ -85,10 +100,12 @@
   gobject_class = (GObjectClass *) klass;
   element_class = GST_ELEMENT_CLASS (klass);
 
+  gobject_class->finalize = gst_gl_base_filter_finalize;
   gobject_class->set_property = gst_gl_base_filter_set_property;
   gobject_class->get_property = gst_gl_base_filter_get_property;
 
   GST_BASE_TRANSFORM_CLASS (klass)->query = gst_gl_base_filter_query;
+  GST_BASE_TRANSFORM_CLASS (klass)->set_caps = gst_gl_base_filter_set_caps;
   GST_BASE_TRANSFORM_CLASS (klass)->start = gst_gl_base_filter_start;
   GST_BASE_TRANSFORM_CLASS (klass)->stop = gst_gl_base_filter_stop;
   GST_BASE_TRANSFORM_CLASS (klass)->decide_allocation =
@@ -109,10 +126,23 @@
 static void
 gst_gl_base_filter_init (GstGLBaseFilter * filter)
 {
+  gst_base_transform_set_qos_enabled (GST_BASE_TRANSFORM (filter), TRUE);
+
   filter->priv = GST_GL_BASE_FILTER_GET_PRIVATE (filter);
 }
 
 static void
+gst_gl_base_filter_finalize (GObject * object)
+{
+  GstGLBaseFilter *filter = GST_GL_BASE_FILTER (object);
+
+  gst_caps_replace (&filter->in_caps, NULL);
+  gst_caps_replace (&filter->out_caps, NULL);
+
+  G_OBJECT_CLASS (parent_class)->finalize (object);
+}
+
+static void
 gst_gl_base_filter_set_property (GObject * object, guint prop_id,
     const GValue * value, GParamSpec * pspec)
 {
@@ -150,6 +180,8 @@
   if (filter->display)
     gst_gl_display_filter_gl_api (filter->display,
         filter_class->supported_gl_api);
+
+  GST_ELEMENT_CLASS (parent_class)->set_context (element, context);
 }
 
 static gboolean
@@ -294,6 +326,9 @@
   GstGLBaseFilter *filter = GST_GL_BASE_FILTER (data);
   GstGLBaseFilterClass *filter_class = GST_GL_BASE_FILTER_GET_CLASS (filter);
 
+  gst_gl_insert_debug_marker (filter->context,
+      "starting element %s", GST_OBJECT_NAME (filter));
+
   if (filter_class->gl_start) {
     filter->priv->gl_result = filter_class->gl_start (filter);
   } else {
@@ -309,6 +344,9 @@
   GstGLBaseFilter *filter = GST_GL_BASE_FILTER (data);
   GstGLBaseFilterClass *filter_class = GST_GL_BASE_FILTER_GET_CLASS (filter);
 
+  gst_gl_insert_debug_marker (filter->context,
+      "stopping element %s", GST_OBJECT_NAME (filter));
+
   if (filter->priv->gl_started) {
     if (filter_class->gl_stop)
       filter_class->gl_stop (filter);
@@ -317,11 +355,22 @@
   filter->priv->gl_started = FALSE;
 }
 
+static void
+_gl_set_caps (GstGLContext * context, GstGLBaseFilter * filter)
+{
+  GstGLBaseFilterClass *filter_class = GST_GL_BASE_FILTER_GET_CLASS (filter);
+
+  if (filter_class->gl_set_caps)
+    filter->priv->gl_result =
+        filter_class->gl_set_caps (filter, filter->in_caps, filter->out_caps);
+}
+
 static gboolean
 gst_gl_base_filter_decide_allocation (GstBaseTransform * trans,
     GstQuery * query)
 {
   GstGLBaseFilter *filter = GST_GL_BASE_FILTER (trans);
+  GstGLBaseFilterClass *filter_class = GST_GL_BASE_FILTER_GET_CLASS (filter);
   GError *error = NULL;
   gboolean new_context = FALSE;
 
@@ -349,11 +398,17 @@
     GST_OBJECT_UNLOCK (filter->display);
   }
 
-  if (new_context) {
+  if (new_context || !filter->priv->gl_started) {
     if (filter->priv->gl_started)
       gst_gl_context_thread_add (filter->context, gst_gl_base_filter_gl_stop,
           filter);
 
+    {
+      GstGLAPI current_gl_api = gst_gl_context_get_gl_api (filter->context);
+      if ((current_gl_api & filter_class->supported_gl_api) == 0)
+        goto unsupported_gl_api;
+    }
+
     gst_gl_context_thread_add (filter->context, gst_gl_base_filter_gl_start,
         filter);
 
@@ -361,9 +416,29 @@
       goto error;
   }
 
+  gst_gl_context_thread_add (filter->context,
+      (GstGLContextThreadFunc) _gl_set_caps, filter);
+  if (!filter->priv->gl_result)
+    goto error;
+
   return GST_BASE_TRANSFORM_CLASS (parent_class)->decide_allocation (trans,
       query);
 
+
+unsupported_gl_api:
+  {
+    GstGLAPI gl_api = gst_gl_context_get_gl_api (filter->context);
+    gchar *gl_api_str = gst_gl_api_to_string (gl_api);
+    gchar *supported_gl_api_str =
+        gst_gl_api_to_string (filter_class->supported_gl_api);
+    GST_ELEMENT_ERROR (filter, RESOURCE, BUSY,
+        ("GL API's not compatible context: %s supported: %s", gl_api_str,
+            supported_gl_api_str), (NULL));
+
+    g_free (supported_gl_api_str);
+    g_free (gl_api_str);
+    return FALSE;
+  }
 context_error:
   {
     GST_ELEMENT_ERROR (trans, RESOURCE, NOT_FOUND, ("%s", error->message),
@@ -379,6 +454,18 @@
   }
 }
 
+static gboolean
+gst_gl_base_filter_set_caps (GstBaseTransform * bt, GstCaps * incaps,
+    GstCaps * outcaps)
+{
+  GstGLBaseFilter *filter = GST_GL_BASE_FILTER (bt);
+
+  gst_caps_replace (&filter->in_caps, incaps);
+  gst_caps_replace (&filter->out_caps, outcaps);
+
+  return TRUE;
+}
+
 static GstStateChangeReturn
 gst_gl_base_filter_change_state (GstElement * element,
     GstStateChange transition)
diff --git a/gst-libs/gst/gl/gstglbasefilter.h b/gst-libs/gst/gl/gstglbasefilter.h
index 5ed3980..fa16d07 100644
--- a/gst-libs/gst/gl/gstglbasefilter.h
+++ b/gst-libs/gst/gl/gstglbasefilter.h
@@ -41,12 +41,11 @@
 
 /**
  * GstGLBaseFilter:
- * @base_transform: parent #GstBaseTransform
+ * @parent: parent #GstBaseTransform
  * @display: the currently configured #GstGLDisplay
  * @context: the currently configured #GstGLContext
- *
- * #GstGLBaseFilter is a base class that provides the logic of getting the
- * GL context from the pipeline.
+ * @in_caps: the currently configured input #GstCaps
+ * @out_caps: the currently configured output #GstCaps
  */
 struct _GstGLBaseFilter
 {
@@ -55,6 +54,9 @@
   GstGLDisplay      *display;
   GstGLContext      *context;
 
+  GstCaps           *in_caps;
+  GstCaps           *out_caps;
+
   /* <private> */
   gpointer _padding[GST_PADDING];
 
@@ -63,9 +65,11 @@
 
 /**
  * GstGLBaseFilterClass:
- * @base_transform_class: parent class
+ * @parent_class: parent class
+ * @supported_gl_api: the logical-OR of #GstGLAPI's supported by this element
  * @gl_start: called in the GL thread to setup the element GL state.
  * @gl_stop: called in the GL thread to setup the element GL state.
+ * @gl_set_caps: called in the GL thread when caps are set on @filter.
  */
 struct _GstGLBaseFilterClass
 {
@@ -74,7 +78,9 @@
 
   gboolean (*gl_start)          (GstGLBaseFilter *filter);
   void     (*gl_stop)           (GstGLBaseFilter *filter);
+  gboolean (*gl_set_caps)       (GstGLBaseFilter *filter, GstCaps * incaps, GstCaps * outcaps);
 
+  /* <private> */
   gpointer _padding[GST_PADDING];
 };
 
diff --git a/gst-libs/gst/gl/gstglbasememory.c b/gst-libs/gst/gl/gstglbasememory.c
new file mode 100644
index 0000000..062c19c
--- /dev/null
+++ b/gst-libs/gst/gl/gstglbasememory.c
@@ -0,0 +1,731 @@
+/*
+ * GStreamer
+ * Copyright (C) 2015 Matthew Waters <matthew@centricular.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <string.h>
+
+#include <gst/gl/gstglbasememory.h>
+
+/**
+ * SECTION:gstglbasememory
+ * @short_description: memory subclass for GL buffers
+ * @see_also: #GstMemory, #GstAllocator
+ *
+ * GstGLBaseMemory is a #GstMemory subclass providing the basis of support
+ * for the mapping of GL buffers.
+ *
+ * Data is uploaded or downloaded from the GPU as is necessary.
+ */
+
+#define USING_OPENGL(context) (gst_gl_context_check_gl_version (context, GST_GL_API_OPENGL, 1, 0))
+#define USING_OPENGL3(context) (gst_gl_context_check_gl_version (context, GST_GL_API_OPENGL3, 3, 1))
+#define USING_GLES(context) (gst_gl_context_check_gl_version (context, GST_GL_API_GLES, 1, 0))
+#define USING_GLES2(context) (gst_gl_context_check_gl_version (context, GST_GL_API_GLES2, 2, 0))
+#define USING_GLES3(context) (gst_gl_context_check_gl_version (context, GST_GL_API_GLES2, 3, 0))
+
+GST_DEBUG_CATEGORY_STATIC (GST_CAT_GL_BASE_MEMORY);
+#define GST_CAT_DEFUALT GST_CAT_GL_BASE_MEMORY
+
+GQuark
+gst_gl_base_memory_error_quark (void)
+{
+  return g_quark_from_static_string ("gst-gl-base-buffer-error-quark");
+}
+
+static gboolean
+_default_create (GstGLBaseMemory * mem, GError ** error)
+{
+  g_set_error (error, GST_GL_BASE_MEMORY_ERROR, GST_GL_BASE_MEMORY_ERROR_FAILED,
+      "subclass should define create() vfunc");
+
+  g_critical ("subclass should override "
+      "GstGLBaseMemoryAllocatorClass::create() function");
+
+  return FALSE;
+}
+
+struct create_data
+{
+  GstGLBaseMemory *mem;
+  gboolean result;
+};
+
+static void
+_mem_create_gl (GstGLContext * context, struct create_data *transfer)
+{
+  GstGLBaseMemoryAllocatorClass *alloc_class;
+  GError *error = NULL;
+
+  GST_CAT_TRACE (GST_CAT_GL_BASE_MEMORY, "Create memory %p", transfer->mem);
+
+  alloc_class =
+      GST_GL_BASE_MEMORY_ALLOCATOR_GET_CLASS (transfer->mem->mem.allocator);
+
+  g_return_if_fail (alloc_class->create != NULL);
+
+  transfer->mem->query = gst_gl_query_new (context, GST_GL_QUERY_TIME_ELAPSED);
+
+  if ((transfer->result = alloc_class->create (transfer->mem, &error)))
+    return;
+
+  g_assert (error != NULL);
+
+  GST_CAT_ERROR (GST_CAT_GL_BASE_MEMORY, "Failed to create GL buffer: %s",
+      error->message);
+  g_clear_error (&error);
+}
+
+/**
+ * gst_gl_base_memory_init:
+ * @mem: the #GstGLBaseMemory to initialize
+ * @allocator: the #GstAllocator to initialize with
+ * @parent: (allow-none): the parent #GstMemory to initialize with
+ * @context: the #GstGLContext to initialize with
+ * @params: (allow-none): the @GstAllocationParams to initialize with
+ * @size: the number of bytes to be allocated
+ * @user_data: (allow-none): user data to call @notify with
+ * @notify: (allow-none): a #GDestroyNotify
+ *
+ * Initializes @mem with the required parameters
+ *
+ * Since: 1.8
+ */
+void
+gst_gl_base_memory_init (GstGLBaseMemory * mem, GstAllocator * allocator,
+    GstMemory * parent, GstGLContext * context, GstAllocationParams * params,
+    gsize size, gpointer user_data, GDestroyNotify notify)
+{
+  gsize align = gst_memory_alignment, offset = 0, maxsize;
+  GstMemoryFlags flags = 0;
+  struct create_data data;
+
+  /* A note on sizes.
+   * gl_mem->alloc_size: the size to allocate when we control the allocation.
+   *                     Size of the unaligned allocation.
+   * mem->maxsize: the size that is used by GstMemory for mapping, to map the
+   *               entire memory. The size of the aligned allocation
+   * mem->size: represents the size of the valid data. Can be reduced with
+   *            gst_memory_resize()
+   *
+   * It holds that:
+   * mem->size + mem->offset <= mem->maxsize
+   * and
+   * mem->maxsize + alignment offset <= gl_mem->alloc_size
+   *
+   * We need to add the alignment mask to the allocated size in order to have
+   * the freedom to align the gl_mem->data pointer correctly which may be offset
+   * by at most align bytes in the alloc_data pointer.
+   *
+   * maxsize is not suitable for this as it is used by GstMemory as the size
+   * to map with.
+   */
+  mem->alloc_size = maxsize = size;
+  if (params) {
+    flags = params->flags;
+    align |= params->align;
+    offset = params->prefix;
+    maxsize += params->prefix + params->padding;
+
+    /* deals with any alignment */
+    mem->alloc_size = maxsize + align;
+  }
+
+  gst_memory_init (GST_MEMORY_CAST (mem), flags, allocator, parent, maxsize,
+      align, offset, size);
+
+  mem->context = gst_object_ref (context);
+  mem->notify = notify;
+  mem->user_data = user_data;
+
+  g_mutex_init (&mem->lock);
+
+  data.mem = mem;
+
+  gst_gl_context_thread_add (context,
+      (GstGLContextThreadFunc) _mem_create_gl, &data);
+  if (!data.result) {
+    GST_CAT_ERROR (GST_CAT_GL_BASE_MEMORY,
+        "Could not create GL buffer with context:%p", context);
+  }
+
+  GST_CAT_DEBUG (GST_CAT_GL_BASE_MEMORY, "new GL buffer memory:%p size:%"
+      G_GSIZE_FORMAT, mem, maxsize);
+}
+
+static gpointer
+_align_data (gpointer data, gsize align)
+{
+  guint8 *ret = data;
+  gsize aoffset;
+
+  /* do alignment, data must have enough padding at the end to move at most
+   * align bytes */
+  if ((aoffset = ((guintptr) ret & align))) {
+    aoffset = (align + 1) - aoffset;
+    ret += aoffset;
+  }
+
+  return ret;
+}
+
+/* subclass usage only */
+gboolean
+gst_gl_base_memory_alloc_data (GstGLBaseMemory * gl_mem)
+{
+  GstMemory *mem = (GstMemory *) gl_mem;
+
+  if (gl_mem->data)
+    return TRUE;
+
+  GST_CAT_LOG (GST_CAT_GL_BASE_MEMORY, "%p attempting allocation of data "
+      "pointer of size %" G_GSIZE_FORMAT, gl_mem, gl_mem->alloc_size);
+  gl_mem->alloc_data = g_try_malloc (gl_mem->alloc_size);
+
+  if (gl_mem->alloc_data == NULL)
+    return FALSE;
+
+  gl_mem->data = _align_data (gl_mem->alloc_data, mem->align);
+
+  GST_CAT_DEBUG (GST_CAT_GL_BASE_MEMORY, "%p allocated data pointer alloc %p, "
+      "data %p", gl_mem, gl_mem->alloc_data, gl_mem->data);
+
+  return TRUE;
+}
+
+struct map_data
+{
+  GstGLBaseMemory *mem;
+  GstMapInfo *info;
+  gsize size;
+  gpointer data;
+};
+
+static void
+_map_data_gl (GstGLContext * context, struct map_data *transfer)
+{
+  GstGLBaseMemoryAllocatorClass *alloc_class;
+  GstGLBaseMemory *mem = transfer->mem;
+  GstMapInfo *info = transfer->info;
+
+  alloc_class =
+      GST_GL_BASE_MEMORY_ALLOCATOR_GET_CLASS (transfer->mem->mem.allocator);
+
+  g_return_if_fail (alloc_class->map != NULL);
+
+  g_mutex_lock (&mem->lock);
+
+  GST_CAT_LOG (GST_CAT_GL_BASE_MEMORY, "mapping mem %p flags %04x", mem,
+      info->flags);
+
+  /* FIXME: validate map flags based on the memory domain */
+  if (mem->map_count++ == 0)
+    mem->map_flags = info->flags;
+  else {
+    /* assert that the flags are a subset of the first map flags */
+    g_assert ((((GST_MAP_GL - 1) & info->flags) & mem->map_flags) != 0);
+    GST_CAT_LOG (GST_CAT_GL_BASE_MEMORY, "multiple map no %d flags %04x "
+        "all flags %04x", mem->map_count, info->flags, mem->map_flags);
+  }
+
+  if ((info->flags & GST_MAP_GL) != (mem->map_flags & GST_MAP_GL))
+    mem->map_flags |= GST_MAP_GL;
+
+  if (info->flags & GST_MAP_GL)
+    mem->gl_map_count++;
+
+  transfer->data = alloc_class->map (transfer->mem, transfer->info,
+      transfer->size);
+
+  if (transfer->data) {
+    if (info->flags & GST_MAP_GL) {
+      if (info->flags & GST_MAP_WRITE)
+        GST_MINI_OBJECT_FLAG_SET (mem,
+            GST_GL_BASE_MEMORY_TRANSFER_NEED_DOWNLOAD);
+      GST_MEMORY_FLAG_UNSET (mem, GST_GL_BASE_MEMORY_TRANSFER_NEED_UPLOAD);
+    } else {
+      if (info->flags & GST_MAP_WRITE)
+        GST_MINI_OBJECT_FLAG_SET (mem, GST_GL_BASE_MEMORY_TRANSFER_NEED_UPLOAD);
+      GST_MEMORY_FLAG_UNSET (mem, GST_GL_BASE_MEMORY_TRANSFER_NEED_DOWNLOAD);
+    }
+  }
+
+  g_mutex_unlock (&mem->lock);
+}
+
+static gpointer
+_mem_map_full (GstGLBaseMemory * mem, GstMapInfo * info, gsize size)
+{
+  struct map_data transfer;
+
+  transfer.mem = mem;
+  transfer.info = info;
+  transfer.size = size;
+  transfer.data = NULL;
+
+  gst_gl_context_thread_add (mem->context,
+      (GstGLContextThreadFunc) _map_data_gl, &transfer);
+
+  return transfer.data;
+}
+
+struct unmap_data
+{
+  GstGLBaseMemory *mem;
+  GstMapInfo *info;
+};
+
+static void
+_unmap_data_gl (GstGLContext * context, struct unmap_data *transfer)
+{
+  GstGLBaseMemoryAllocatorClass *alloc_class;
+  GstGLBaseMemory *mem = transfer->mem;
+  GstMapInfo *info = transfer->info;
+
+  alloc_class =
+      GST_GL_BASE_MEMORY_ALLOCATOR_GET_CLASS (transfer->mem->mem.allocator);
+
+  g_return_if_fail (alloc_class->unmap != NULL);
+
+  g_mutex_lock (&mem->lock);
+
+  GST_CAT_LOG (GST_CAT_GL_BASE_MEMORY, "unmapping mem %p flags %04x", mem,
+      info->flags);
+
+  alloc_class->unmap (transfer->mem, transfer->info);
+
+  if (info->flags & GST_MAP_GL && --mem->gl_map_count)
+    /* unset the gl flag */
+    mem->map_flags &= ~GST_MAP_GL;
+
+  if (--mem->map_count <= 0) {
+    mem->map_flags = 0;
+  }
+
+  if (info->flags & GST_MAP_GL) {
+    if (info->flags & GST_MAP_WRITE)
+      GST_MINI_OBJECT_FLAG_SET (mem, GST_GL_BASE_MEMORY_TRANSFER_NEED_DOWNLOAD);
+  } else {
+    if (info->flags & GST_MAP_WRITE)
+      GST_MINI_OBJECT_FLAG_SET (mem, GST_GL_BASE_MEMORY_TRANSFER_NEED_UPLOAD);
+  }
+
+  g_mutex_unlock (&mem->lock);
+}
+
+static void
+_mem_unmap_full (GstGLBaseMemory * mem, GstMapInfo * info)
+{
+  struct unmap_data transfer;
+
+  transfer.mem = mem;
+  transfer.info = info;
+
+  gst_gl_context_thread_add (mem->context,
+      (GstGLContextThreadFunc) _unmap_data_gl, &transfer);
+}
+
+static GstGLBaseMemory *
+_default_copy (GstGLBaseMemory * src, gssize offset, gssize size)
+{
+  return NULL;
+}
+
+struct copy_params
+{
+  GstGLBaseMemory *src;
+  GstGLBaseMemory *dest;
+  gssize offset;
+  gssize size;
+  gboolean result;
+};
+
+static void
+_mem_copy_gl (GstGLContext * context, struct copy_params *transfer)
+{
+  GstGLBaseMemoryAllocatorClass *alloc_class;
+
+  alloc_class =
+      GST_GL_BASE_MEMORY_ALLOCATOR_GET_CLASS (transfer->src->mem.allocator);
+
+  g_return_if_fail (alloc_class->copy != NULL);
+
+  transfer->dest =
+      alloc_class->copy (transfer->src, transfer->offset, transfer->size);
+}
+
+static GstMemory *
+_mem_copy (GstGLBaseMemory * src, gssize offset, gssize size)
+{
+  struct copy_params transfer;
+
+  transfer.dest = NULL;
+  transfer.src = src;
+  transfer.offset = offset;
+  transfer.size = size;
+  if (size == -1 || size > 0)
+    gst_gl_context_thread_add (src->context,
+        (GstGLContextThreadFunc) _mem_copy_gl, &transfer);
+
+  return (GstMemory *) transfer.dest;
+}
+
+static GstMemory *
+_mem_share (GstGLBaseMemory * mem, gssize offset, gssize size)
+{
+  return NULL;
+}
+
+static gboolean
+_mem_is_span (GstGLBaseMemory * mem1, GstGLBaseMemory * mem2, gsize * offset)
+{
+  return FALSE;
+}
+
+static GstMemory *
+_mem_alloc (GstAllocator * allocator, gsize size, GstAllocationParams * params)
+{
+  g_critical ("Subclass should override GstAllocatorClass::alloc() function");
+
+  return NULL;
+}
+
+static void
+_default_destroy (GstGLBaseMemory * mem)
+{
+}
+
+static void
+_destroy_gl_objects (GstGLContext * context, GstGLBaseMemory * mem)
+{
+  GstGLBaseMemoryAllocatorClass *alloc_class;
+
+  alloc_class = GST_GL_BASE_MEMORY_ALLOCATOR_GET_CLASS (mem->mem.allocator);
+
+  g_return_if_fail (alloc_class->destroy != NULL);
+
+  alloc_class->destroy (mem);
+
+  if (mem->query)
+    gst_gl_query_free (mem->query);
+}
+
+static void
+_mem_free (GstAllocator * allocator, GstMemory * memory)
+{
+  GstGLBaseMemory *mem = (GstGLBaseMemory *) memory;
+
+  GST_CAT_TRACE (GST_CAT_GL_BASE_MEMORY, "freeing buffer memory:%p", mem);
+
+  gst_gl_context_thread_add (mem->context,
+      (GstGLContextThreadFunc) _destroy_gl_objects, mem);
+
+  g_mutex_clear (&mem->lock);
+
+  if (mem->alloc_data) {
+    g_free (mem->alloc_data);
+    mem->alloc_data = NULL;
+  }
+  mem->data = NULL;
+
+  if (mem->notify)
+    mem->notify (mem->user_data);
+
+  gst_object_unref (mem->context);
+
+  g_free (memory);
+}
+
+/**
+ * gst_gl_base_memory_init_once:
+ *
+ * Initializes the GL Base Memory allocator. It is safe to call this function
+ * multiple times.  This must be called before any other GstGLBaseMemory operation.
+ *
+ * Since: 1.8
+ */
+void
+gst_gl_base_memory_init_once (void)
+{
+  static volatile gsize _init = 0;
+
+  if (g_once_init_enter (&_init)) {
+    GST_DEBUG_CATEGORY_INIT (GST_CAT_GL_BASE_MEMORY, "glbasememory", 0,
+        "OpenGL BaseMemory");
+
+    g_once_init_leave (&_init, 1);
+  }
+}
+
+G_DEFINE_ABSTRACT_TYPE (GstGLBaseMemoryAllocator, gst_gl_base_memory_allocator,
+    GST_TYPE_ALLOCATOR);
+
+static void
+gst_gl_base_memory_allocator_class_init (GstGLBaseMemoryAllocatorClass * klass)
+{
+  GstAllocatorClass *allocator_class = (GstAllocatorClass *) klass;
+
+  allocator_class->alloc = _mem_alloc;
+  allocator_class->free = _mem_free;
+
+  klass->create = _default_create;
+  klass->copy = _default_copy;
+  klass->destroy = _default_destroy;
+}
+
+static void
+gst_gl_base_memory_allocator_init (GstGLBaseMemoryAllocator * allocator)
+{
+  GstAllocator *alloc = GST_ALLOCATOR_CAST (allocator);
+
+  /* Keep the fallback copy function around, we will need it when copying with
+   * at an offset or smaller size */
+  allocator->fallback_mem_copy = alloc->mem_copy;
+
+  alloc->mem_map_full = (GstMemoryMapFullFunction) _mem_map_full;
+  alloc->mem_unmap_full = (GstMemoryUnmapFullFunction) _mem_unmap_full;
+  alloc->mem_copy = (GstMemoryCopyFunction) _mem_copy;
+  alloc->mem_share = (GstMemoryShareFunction) _mem_share;
+  alloc->mem_is_span = (GstMemoryIsSpanFunction) _mem_is_span;
+}
+
+/**
+ * gst_is_gl_base_memory:
+ * @mem:a #GstMemory
+ * 
+ * Returns: whether the memory at @mem is a #GstGLBaseMemory
+ *
+ * Since: 1.8
+ */
+gboolean
+gst_is_gl_base_memory (GstMemory * mem)
+{
+  return mem != NULL && mem->allocator != NULL &&
+      g_type_is_a (G_OBJECT_TYPE (mem->allocator),
+      GST_TYPE_GL_BASE_MEMORY_ALLOCATOR);
+}
+
+/**
+ * gst_gl_base_memory_memcpy:
+ * @src: the source #GstGLBaseMemory
+ * @dest: the destination #GstGLBaseMemory
+ * @offset: the offset to start at
+ * @size: the number of bytes to copy
+ *
+ * Returns: whether the copy suceeded.
+ *
+ * Since: 1.8
+ */
+gboolean
+gst_gl_base_memory_memcpy (GstGLBaseMemory * src, GstGLBaseMemory * dest,
+    gssize offset, gssize size)
+{
+  GstMapInfo sinfo, dinfo;
+
+  if (!gst_gl_base_memory_alloc_data (GST_GL_BASE_MEMORY_CAST (dest)))
+    return FALSE;
+
+  if (!gst_memory_map ((GstMemory *) src, &sinfo, GST_MAP_READ)) {
+    GST_CAT_WARNING (GST_CAT_GL_BASE_MEMORY,
+        "could not read map source memory %p", src);
+    return FALSE;
+  }
+
+  if (!gst_memory_map ((GstMemory *) dest, &dinfo, GST_MAP_WRITE)) {
+    GST_CAT_WARNING (GST_CAT_GL_BASE_MEMORY,
+        "could not write map dest memory %p", dest);
+    gst_memory_unmap ((GstMemory *) src, &sinfo);
+    return FALSE;
+  }
+
+  if (size == -1)
+    size = sinfo.size > offset ? sinfo.size - offset : 0;
+
+  GST_CAT_DEBUG (GST_CAT_GL_BASE_MEMORY,
+      "memcpy %" G_GSSIZE_FORMAT " memory %p -> %p", size, src, dest);
+  memcpy (dinfo.data, sinfo.data + offset, size);
+  gst_memory_unmap ((GstMemory *) dest, &dinfo);
+  gst_memory_unmap ((GstMemory *) src, &sinfo);
+
+  return TRUE;
+}
+
+/**
+ * gst_gl_allocation_params_init:
+ * @params: the #GstGLAllocationParams to initialize
+ * @struct_size: the struct size of the implementation
+ * @alloc_flags: some alloc flags
+ * @copy: a copy function
+ * @free: a free function
+ * @context: (transfer none): a #GstGLContext
+ * @alloc_size: the number of bytes to allocate.
+ * @alloc_params: (transfer none) (allow-none): a #GstAllocationParams to apply
+ * @wrapped_data: (transfer none) (allow-none): a sysmem data pointer to initialize the allocation with
+ * @gl_handle: (transfer none): a GL handle to initialize the allocation with
+ * @user_data: (transfer none) (allow-none): user data to call @notify with
+ * @notify: (allow-none): a #GDestroyNotify
+ *
+ * @notify will be called once for each allocated memory using these @params
+ * when freeing the memory.
+ *
+ * Returns: whether the paramaters could be initialized
+ *
+ * Since: 1.8
+ */
+gboolean
+gst_gl_allocation_params_init (GstGLAllocationParams * params,
+    gsize struct_size, guint alloc_flags, GstGLAllocationParamsCopyFunc copy,
+    GstGLAllocationParamsFreeFunc free, GstGLContext * context,
+    gsize alloc_size, GstAllocationParams * alloc_params,
+    gpointer wrapped_data, guint gl_handle, gpointer user_data,
+    GDestroyNotify notify)
+{
+  memset (params, 0, sizeof (*params));
+
+  g_return_val_if_fail (struct_size > 0, FALSE);
+  g_return_val_if_fail (copy != NULL, FALSE);
+  g_return_val_if_fail (free != NULL, FALSE);
+  g_return_val_if_fail (GST_IS_GL_CONTEXT (context), FALSE);
+
+  params->struct_size = struct_size;
+  params->alloc_size = alloc_size;
+  params->copy = copy;
+  params->free = free;
+  params->alloc_flags = alloc_flags;
+  params->context = gst_object_ref (context);
+  if (alloc_params)
+    params->alloc_params = gst_allocation_params_copy (alloc_params);
+  params->notify = notify;
+  params->user_data = user_data;
+  params->wrapped_data = wrapped_data;
+  params->gl_handle = gl_handle;
+
+  return TRUE;
+}
+
+/**
+ * gst_gl_allocation_params_copy:
+ * @src: the #GstGLAllocationParams to initialize
+ *
+ * Returns: a copy of the #GstGLAllocationParams specified by @src or %NULL on
+ *          failure
+ *
+ * Since: 1.8
+ */
+GstGLAllocationParams *
+gst_gl_allocation_params_copy (GstGLAllocationParams * src)
+{
+  GstGLAllocationParams *dest;
+
+  g_return_val_if_fail (src != NULL, NULL);
+
+  dest = g_malloc0 (src->struct_size);
+
+  if (src->copy)
+    src->copy (src, dest);
+
+  return dest;
+}
+
+/**
+ * gst_gl_allocation_params_free:
+ * @params: the #GstGLAllocationParams to initialize
+ *
+ * Frees the #GstGLAllocationParams and all associated data.
+ *
+ * Since: 1.8
+ */
+void
+gst_gl_allocation_params_free (GstGLAllocationParams * params)
+{
+  if (params->free)
+    params->free (params);
+
+  g_free (params);
+}
+
+/**
+ * gst_gl_allocation_params_free_data:
+ * @params: the source #GstGLAllocationParams
+ *
+ * Frees the dynamically allocated data in @params.  Direct subclasses
+ * should call this function in their own overriden free function.
+ *
+ * Since: 1.8
+ */
+void
+gst_gl_allocation_params_free_data (GstGLAllocationParams * params)
+{
+  if (params->context)
+    gst_object_unref (params->context);
+  if (params->alloc_params)
+    gst_allocation_params_free (params->alloc_params);
+}
+
+/**
+ * gst_gl_allocation_params_copy_data:
+ * @src: the source #GstGLAllocationParams
+ * @dest: the destination #GstGLAllocationParams
+ *
+ * Copies the dynamically allocated data from @src to @dest.  Direct subclasses
+ * should call this function in their own overriden copy function.
+ *
+ * Since: 1.8
+ */
+void
+gst_gl_allocation_params_copy_data (GstGLAllocationParams * src,
+    GstGLAllocationParams * dest)
+{
+  gst_gl_allocation_params_init (dest, src->struct_size, src->alloc_flags,
+      src->copy, src->free, src->context, src->alloc_size, NULL,
+      src->wrapped_data, src->gl_handle, src->user_data, src->notify);
+
+  if (src->alloc_params)
+    dest->alloc_params = gst_allocation_params_copy (src->alloc_params);
+}
+
+G_DEFINE_BOXED_TYPE (GstGLAllocationParams, gst_gl_allocation_params,
+    (GBoxedCopyFunc) gst_gl_allocation_params_copy,
+    (GBoxedFreeFunc) gst_gl_allocation_params_free);
+
+/**
+ * gst_gl_base_memory_alloc:
+ * @allocator: a #GstGLBaseMemoryAllocator
+ * @params: the #GstGLAllocationParams to allocate the memory with
+ *
+ * Returns: a new #GstGLBaseMemory from @allocator with the requested @params.
+ *
+ * Since: 1.8
+ */
+GstGLBaseMemory *
+gst_gl_base_memory_alloc (GstGLBaseMemoryAllocator * allocator,
+    GstGLAllocationParams * params)
+{
+  GstGLBaseMemoryAllocatorClass *alloc_class;
+
+  alloc_class = GST_GL_BASE_MEMORY_ALLOCATOR_GET_CLASS (allocator);
+
+  g_return_val_if_fail (alloc_class != NULL, NULL);
+  g_return_val_if_fail (alloc_class->alloc != NULL, NULL);
+
+  return alloc_class->alloc (allocator, params);
+}
diff --git a/gst-libs/gst/gl/gstglbasememory.h b/gst-libs/gst/gl/gstglbasememory.h
new file mode 100644
index 0000000..f862c85
--- /dev/null
+++ b/gst-libs/gst/gl/gstglbasememory.h
@@ -0,0 +1,361 @@
+/*
+ * GStreamer
+ * Copyright (C) 2015 Matthew Waters <matthew@centricular.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifndef _GST_GL_BASE_MEMORY_H_
+#define _GST_GL_BASE_MEMORY_H_
+
+#include <gst/gst.h>
+#include <gst/gstallocator.h>
+#include <gst/gstmemory.h>
+
+#include <gst/gl/gstgl_fwd.h>
+
+G_BEGIN_DECLS
+
+#define GST_TYPE_GL_BASE_MEMORY_ALLOCATOR (gst_gl_base_memory_allocator_get_type())
+GType gst_gl_base_memory_allocator_get_type(void);
+
+#define GST_IS_GL_BASE_MEMORY_ALLOCATOR(obj)              (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GST_TYPE_GL_ALLOCATOR))
+#define GST_IS_GL_BASE_MEMORY_ALLOCATOR_CLASS(klass)      (G_TYPE_CHECK_CLASS_TYPE ((klass), GST_TYPE_GL_BASE_MEMORY_ALLOCATOR))
+#define GST_GL_BASE_MEMORY_ALLOCATOR_GET_CLASS(obj)       (G_TYPE_INSTANCE_GET_CLASS ((obj), GST_TYPE_GL_BASE_MEMORY_ALLOCATOR, GstGLBaseMemoryAllocatorClass))
+#define GST_GL_BASE_MEMORY_ALLOCATOR(obj)                 (G_TYPE_CHECK_INSTANCE_CAST ((obj), GST_TYPE_GL_BASE_MEMORY_ALLOCATOR, GstGLBaseMemoryAllocator))
+#define GST_GL_BASE_MEMORY_ALLOCATOR_CLASS(klass)         (G_TYPE_CHECK_CLASS_CAST ((klass), GST_TYPE_GL_BASE_MEMORY_ALLOCATOR, GstGLBaseMemoryAllocatorClass))
+#define GST_GL_BASE_MEMORY_ALLOCATOR_CAST(obj)            ((GstGLBaseMemoryAllocator *)(obj))
+
+#define GST_GL_BASE_MEMORY_CAST(mem) ((GstGLBaseMemory *)mem)
+
+GQuark gst_gl_base_memory_error_quark (void);
+#define GST_GL_BASE_MEMORY_ERROR (gst_gl_base_memory_error_quark ())
+
+/**
+ * GstGLBaseMemoryError:
+ * @GST_GL_BASE_MEMORY_ERROR_FAILED: generic faliure
+ * @GST_GL_BASE_MEMORY_ERROR_OLD_LIBS: the implementation is too old and doesn't
+ *                                     implement enough features
+ * @GST_GL_BASE_MEMORY_ERROR_RESOURCE_UNAVAILABLE: a resource could not be found
+ */
+typedef enum
+{
+  GST_GL_BASE_MEMORY_ERROR_FAILED,
+  GST_GL_BASE_MEMORY_ERROR_OLD_LIBS,
+  GST_GL_BASE_MEMORY_ERROR_RESOURCE_UNAVAILABLE,
+} GstGLBaseMemoryError;
+
+/**
+ * GstGLBaseMemoryTransfer:
+ * @GST_GL_BASE_MEMORY_TRANSFER_NEED_DOWNLOAD: the texture needs downloading
+ *                                             to the data pointer
+ * @GST_GL_BASE_MEMORY_TRANSFER_NEED_UPLOAD:   the data pointer needs uploading
+ *                                             to the texture
+ */
+typedef enum
+{
+  GST_GL_BASE_MEMORY_TRANSFER_NEED_DOWNLOAD   = (GST_MEMORY_FLAG_LAST << 0),
+  GST_GL_BASE_MEMORY_TRANSFER_NEED_UPLOAD     = (GST_MEMORY_FLAG_LAST << 1)
+} GstGLBaseMemoryTransfer;
+
+/**
+ * GST_MAP_GL:
+ *
+ * Flag indicating that we should map the GL object instead of to system memory.
+ *
+ * Combining #GST_MAP_GL with #GST_MAP_WRITE has the same semantics as though
+ * you are writing to OpenGL. Conversely, combining #GST_MAP_GL with
+ * #GST_MAP_READ has the same semantics as though you are reading from OpenGL.
+ */
+#define GST_MAP_GL (GST_MAP_FLAG_LAST << 1)
+
+/**
+ * GstGLBaseMemory:
+ * @mem: the parent object
+ * @context: the #GstGLContext to use for GL operations
+ *
+ * Represents information about a GL memory object
+ */
+struct _GstGLBaseMemory
+{
+  GstMemory             mem;
+
+  GstGLContext         *context;
+
+  /* <protected> */
+  GMutex                lock;
+
+  GstMapFlags           map_flags;       /* cumulative map flags */
+  gint                  map_count;
+  gint                  gl_map_count;
+
+  gpointer              data;
+
+  GstGLQuery           *query;
+
+  /* <private> */
+  gsize                 alloc_size;     /* because maxsize is used for mapping */
+  gpointer              alloc_data;
+
+  GDestroyNotify        notify;
+  gpointer              user_data;
+};
+
+typedef struct _GstGLAllocationParams GstGLAllocationParams;
+/**
+ * GstGLAllocationParamsCopyFunc:
+ * @src: the source #GstGLAllocationParams to copy from
+ * @dest: the source #GstGLAllocationParams to copy
+ *
+ * Copies the parameters from @src into @dest.  The subclass must compose copy
+ * functions from the superclass.
+ */
+typedef void    (*GstGLAllocationParamsCopyFunc)    (GstGLAllocationParams * src, GstGLAllocationParams * dest);
+/**
+ * GstGLAllocationParamsFreeFunc:
+ * @params: a #GstGLAllocationParams
+ *
+ * Free any dynamically allocated data.  The subclass must call the superclass'
+ * free.
+ */
+typedef void    (*GstGLAllocationParamsFreeFunc)    (gpointer params);
+
+#define GST_TYPE_GL_ALLOCATION_PARAMS (gst_gl_allocation_params_get_type())
+GType gst_gl_allocation_params_get_type (void);
+
+#define GST_GL_ALLOCATION_PARAMS_ALLOC_FLAG_ALLOC (1 << 0)
+#define GST_GL_ALLOCATION_PARAMS_ALLOC_FLAG_WRAP_SYSMEM (1 << 1)
+#define GST_GL_ALLOCATION_PARAMS_ALLOC_FLAG_WRAP_GPU_HANDLE (1 << 2)
+#define GST_GL_ALLOCATION_PARAMS_ALLOC_FLAG_USER (1 << 16)
+
+/**
+ * GstGLAllocationParams:
+ * @struct_size: the size of the struct (including and subclass data)
+ * @copy: a #GstGLAllocationParamsCopyFunc
+ * @free: a #GstGLAllocationParamsFreeFunc
+ * @alloc_flags: allocation flags
+ * @alloc_size: the allocation size
+ * @alloc_params: the #GstAllocationParams
+ * @context: a #GstGLContext
+ * @notify: a #GDestroyNotify
+ * @user_data: argument to call @notify with
+ * @wrapped_data: the wrapped data pointer
+ * @gl_handle: the wrapped OpenGL handle
+ */
+/* Because GstAllocationParams is not subclassable, start our own subclass
+ * chain.  FIXME: 2.0 make GstAllocationParams subclassable */
+struct _GstGLAllocationParams
+{
+  gsize                             struct_size;
+  GstGLAllocationParamsCopyFunc     copy;
+  GstGLAllocationParamsFreeFunc     free;
+
+  guint                             alloc_flags;
+  gsize                             alloc_size;
+  GstAllocationParams              *alloc_params;
+  GstGLContext                     *context;
+  GDestroyNotify                    notify;
+  gpointer                          user_data;
+
+  /* GST_GL_ALLOCATION_PARAMS_ALLOC_FLAG_WRAP_SYSMEM only */
+  gpointer                          wrapped_data;
+  /* GST_GL_ALLOCATION_PARAMS_ALLOC_FLAG_WRAP_GPU_HANDLE only */
+  guint                             gl_handle;
+};
+
+gboolean                gst_gl_allocation_params_init       (GstGLAllocationParams * params,
+                                                             gsize struct_size,
+                                                             guint alloc_flags,
+                                                             GstGLAllocationParamsCopyFunc copy,
+                                                             GstGLAllocationParamsFreeFunc free,
+                                                             GstGLContext * context,
+                                                             gsize alloc_size,
+                                                             GstAllocationParams * alloc_params,
+                                                             gpointer wrapped_data,
+                                                             guint gl_handle,
+                                                             gpointer user_data,
+                                                             GDestroyNotify notify);
+
+/* free with gst_gl_allocation_params_free */
+GstGLAllocationParams * gst_gl_allocation_params_copy       (GstGLAllocationParams * src);
+void                    gst_gl_allocation_params_free       (GstGLAllocationParams * params);
+
+/* subclass usage */
+void                    gst_gl_allocation_params_free_data  (GstGLAllocationParams * params);
+/* subclass usage */
+void                    gst_gl_allocation_params_copy_data  (GstGLAllocationParams * src,
+                                                             GstGLAllocationParams * dest);
+
+/**
+ * GstGLBaseMemoryAllocatorAllocFunction:
+ * @allocator: a #GstGLBaseMemoryAllocator
+ * @params: the #GstGLAllocationParams to allocate the memory with
+ *
+ * Note: not called with a GL context current
+ *
+ * Returns: a newly allocated #GstGLBaseMemory from @allocator and @params
+ *
+ * Since: 1.8
+ */
+typedef GstGLBaseMemory *   (*GstGLBaseMemoryAllocatorAllocFunction)        (GstGLBaseMemoryAllocator * allocator,
+                                                                             GstGLAllocationParams * params);
+
+/**
+ * GstGLBaseMemoryAllocatorCreateFunction:
+ * @mem: a #GstGLBaseMemory
+ * @error: a #GError to use on failure
+ *
+ * As this virtual method is called with an OpenGL context current, use this
+ * function to allocate and OpenGL resources needed for your application
+ *
+ * Returns: whether the creation succeeded
+ *
+ * Since: 1.8
+ */
+typedef gboolean            (*GstGLBaseMemoryAllocatorCreateFunction)       (GstGLBaseMemory * mem,
+                                                                             GError ** error);
+
+/**
+ * GstGLBaseMemoryAllocatorMapFunction:
+ * @mem: a #GstGLBaseMemory
+ * @info: a #GstMapInfo to map with
+ * @maxsize: the size to map
+ *
+ * Also see gst_memory_map();
+ *
+ * Returns: the mapped pointer
+ *
+ * Since: 1.8
+ */
+typedef gpointer            (*GstGLBaseMemoryAllocatorMapFunction)          (GstGLBaseMemory * mem,
+                                                                             GstMapInfo * info,
+                                                                             gsize maxsize);
+/**
+ * GstGLBaseMemoryAllocatorUnmapFunction:
+ * @mem: a #GstGLBaseMemory
+ * @info: a #GstMapInfo to map with
+ *
+ * Also see gst_memory_unmap();
+ *
+ * Since: 1.8
+ */
+typedef void                (*GstGLBaseMemoryAllocatorUnmapFunction)        (GstGLBaseMemory * mem,
+                                                                             GstMapInfo * info);
+
+/**
+ * GstGLBaseMemoryAllocatorCopyFunction:
+ * @mem: a #GstGLBaseMemory
+ * @offset: the offset to copy from
+ * @size: the number of bytes to copy
+ *
+ * Also see gst_memory_copy();
+ *
+ * Returns: the newly copied #GstGLMemory or %NULL
+ *
+ * Since: 1.8
+ */
+typedef GstGLBaseMemory *   (*GstGLBaseMemoryAllocatorCopyFunction)         (GstGLBaseMemory * mem,
+                                                                             gssize offset,
+                                                                             gssize size);
+
+/**
+ * GstGLBaseMemoryAllocatorDestroyFunction:
+ * @mem: a #GstGLBaseMemory
+ *
+ * Destroy any resources allocated throughout the lifetime of @mem
+ *
+ * Since: 1.8
+ */
+typedef void                (*GstGLBaseMemoryAllocatorDestroyFunction)      (GstGLBaseMemory * mem);
+
+/**
+ * GstGLBaseMemoryAllocator
+ *
+ * Opaque #GstGLBaseMemoryAllocator struct
+ *
+ * Since: 1.8
+ */
+struct _GstGLBaseMemoryAllocator
+{
+  /*< private >*/
+  GstAllocator parent;
+  GstMemoryCopyFunction fallback_mem_copy;
+};
+
+/**
+ * GstGLBaseMemoryAllocatorClass:
+ * @parent_class: the parent class
+ * @alloc: a #GstGLBaseMemoryAllocatorAllocFunctions
+ * @create: a #GstGLBaseMemoryAllocatorCreateFunction
+ * @map: a #GstGLBaseMemoryAllocatorMapFunction
+ * @unmap: a #GstGLBaseMemoryAllocatorUnmapFunction
+ * @copy: a #GstGLBaseMemoryAllocatorCopyFunction
+ * @destroy: a #GstGLBaseMemoryAllocatorDestroyFunction
+ *
+ * Since: 1.8
+ */
+struct _GstGLBaseMemoryAllocatorClass
+{
+  GstAllocatorClass parent_class;
+
+  GstGLBaseMemoryAllocatorAllocFunction         alloc;
+
+  GstGLBaseMemoryAllocatorCreateFunction        create;
+  GstGLBaseMemoryAllocatorMapFunction           map;
+#if 0
+  GstGLBaseMemoryAllocatorFlushFunction         flush;        /* make CPU writes visible to the GPU */
+  GstGLBaseMemoryAllocatorInvalidateFunction    invalidate;   /* make GPU writes visible to the CPU */
+#endif
+  GstGLBaseMemoryAllocatorUnmapFunction         unmap;
+  GstGLBaseMemoryAllocatorCopyFunction          copy;
+  GstGLBaseMemoryAllocatorDestroyFunction       destroy;
+};
+
+#include <gst/gl/gl.h>
+
+/**
+ * GST_GL_BASE_MEMORY_ALLOCATOR_NAME:
+ *
+ * The name of the GL buffer allocator
+ *
+ * Since: 1.8
+ */
+#define GST_GL_BASE_MEMORY_ALLOCATOR_NAME   "GLBaseMemory"
+
+void          gst_gl_base_memory_init_once (void);
+gboolean      gst_is_gl_base_memory        (GstMemory * mem);
+
+void          gst_gl_base_memory_init      (GstGLBaseMemory * mem,
+                                            GstAllocator * allocator,
+                                            GstMemory * parent,
+                                            GstGLContext * context,
+                                            GstAllocationParams * params,
+                                            gsize size,
+                                            gpointer user_data,
+                                            GDestroyNotify notify);
+
+gboolean      gst_gl_base_memory_alloc_data (GstGLBaseMemory * gl_mem);
+gboolean      gst_gl_base_memory_memcpy     (GstGLBaseMemory * src,
+                                             GstGLBaseMemory * dest,
+                                             gssize offset,
+                                             gssize size);
+
+GstGLBaseMemory *   gst_gl_base_memory_alloc    (GstGLBaseMemoryAllocator * allocator,
+                                                 GstGLAllocationParams * params);
+
+G_END_DECLS
+
+#endif /* _GST_GL_BUFFER_H_ */
diff --git a/gst-libs/gst/gl/gstglbuffer.c b/gst-libs/gst/gl/gstglbuffer.c
new file mode 100644
index 0000000..2abdd6d
--- /dev/null
+++ b/gst-libs/gst/gl/gstglbuffer.c
@@ -0,0 +1,479 @@
+/*
+ * GStreamer
+ * Copyright (C) 2015 Matthew Waters <matthew@centricular.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <string.h>
+
+#include "gstglbuffer.h"
+#include "gstglutils.h"
+
+/**
+ * SECTION:gstglbuffer
+ * @short_description: memory subclass for GL buffers
+ * @see_also: #GstMemory, #GstAllocator
+ *
+ * GstGLBuffer is a #GstMemory subclass providing support for the mapping of
+ * GL buffers.  
+ *
+ * Data is uploaded or downloaded from the GPU as is necessary.
+ */
+
+/* Implementation notes:
+ *
+ * Currently does not take into account GLES2 differences (no mapbuffer)
+ */
+
+#define USING_OPENGL(context) (gst_gl_context_check_gl_version (context, GST_GL_API_OPENGL, 1, 0))
+#define USING_OPENGL3(context) (gst_gl_context_check_gl_version (context, GST_GL_API_OPENGL3, 3, 1))
+#define USING_GLES(context) (gst_gl_context_check_gl_version (context, GST_GL_API_GLES, 1, 0))
+#define USING_GLES2(context) (gst_gl_context_check_gl_version (context, GST_GL_API_GLES2, 2, 0))
+#define USING_GLES3(context) (gst_gl_context_check_gl_version (context, GST_GL_API_GLES2, 3, 0))
+
+/* compatibility definitions... */
+#ifndef GL_MAP_READ_BIT
+#define GL_MAP_READ_BIT 0x0001
+#endif
+#ifndef GL_MAP_WRITE_BIT
+#define GL_MAP_WRITE_BIT 0x0002
+#endif
+#ifndef GL_COPY_READ_BUFFER
+#define GL_COPY_READ_BUFFER 0x8F36
+#endif
+#ifndef GL_COPY_WRITE_BUFFER
+#define GL_COPY_WRITE_BUFFER 0x8F37
+#endif
+
+GST_DEBUG_CATEGORY_STATIC (GST_CAT_GL_BUFFER);
+#define GST_CAT_DEFUALT GST_CAT_GL_BUFFER
+
+static GstAllocator *_gl_buffer_allocator;
+
+static gboolean
+_gl_buffer_create (GstGLBuffer * gl_mem, GError ** error)
+{
+  const GstGLFuncs *gl = gl_mem->mem.context->gl_vtable;
+
+  gl->GenBuffers (1, &gl_mem->id);
+  gl->BindBuffer (gl_mem->target, gl_mem->id);
+  gl->BufferData (gl_mem->target, gl_mem->mem.mem.maxsize, NULL,
+      gl_mem->usage_hints);
+  gl->BindBuffer (gl_mem->target, 0);
+
+  return TRUE;
+}
+
+struct create_data
+{
+  GstGLBuffer *mem;
+  gboolean result;
+};
+
+static void
+_gl_buffer_init (GstGLBuffer * mem, GstAllocator * allocator,
+    GstMemory * parent, GstGLContext * context, guint gl_target, guint gl_usage,
+    GstAllocationParams * params, gsize size)
+{
+  mem->target = gl_target;
+  mem->usage_hints = gl_usage;
+
+  gst_gl_base_memory_init ((GstGLBaseMemory *) mem, allocator, parent, context,
+      params, size, NULL, NULL);
+
+  GST_CAT_DEBUG (GST_CAT_GL_BUFFER, "new GL buffer memory:%p size:%"
+      G_GSIZE_FORMAT, mem, mem->mem.mem.maxsize);
+}
+
+static GstGLBuffer *
+_gl_buffer_new (GstAllocator * allocator, GstMemory * parent,
+    GstGLContext * context, guint gl_target, guint gl_usage,
+    GstAllocationParams * params, gsize size)
+{
+  GstGLBuffer *ret = g_new0 (GstGLBuffer, 1);
+  _gl_buffer_init (ret, allocator, parent, context, gl_target, gl_usage,
+      params, size);
+
+  return ret;
+}
+
+static gpointer
+gst_gl_buffer_cpu_access (GstGLBuffer * mem, GstMapInfo * info, gsize size)
+{
+  const GstGLFuncs *gl = mem->mem.context->gl_vtable;
+  gpointer data, ret;
+
+  if (!gst_gl_base_memory_alloc_data (GST_GL_BASE_MEMORY_CAST (mem)))
+    return NULL;
+
+  ret = mem->mem.data;
+
+  GST_CAT_LOG (GST_CAT_GL_BUFFER, "mapping id %d size %" G_GSIZE_FORMAT,
+      mem->id, size);
+
+  /* The extra data pointer indirection/memcpy is needed for coherent across
+   * concurrent map()'s in both GL and CPU */
+  if (GST_MEMORY_FLAG_IS_SET (mem, GST_GL_BASE_MEMORY_TRANSFER_NEED_DOWNLOAD)
+      && (info->flags & GST_MAP_GL) == 0 && (info->flags & GST_MAP_READ) != 0) {
+    gl->BindBuffer (mem->target, mem->id);
+
+    if (gl->MapBufferRange) {
+      /* FIXME: optionally remove this with a flag and return the
+       * glMapBufferRange pointer (requires
+       * GL_ARB_buffer_storage/GL4/GL_COHERENT_BIT) */
+      guint gl_map_flags = GL_MAP_READ_BIT;
+
+      data = gl->MapBufferRange (mem->target, 0, size, gl_map_flags);
+
+      if (data)
+        memcpy (mem->mem.data, data, size);
+
+      gl->UnmapBuffer (mem->target);
+      ret = mem->mem.data;
+    } else if (gl->GetBufferSubData) {
+      gl->GetBufferSubData (mem->target, 0, size, mem->mem.data);
+      ret = mem->mem.data;
+    } else {
+      ret = NULL;
+    }
+    gl->BindBuffer (mem->target, 0);
+  }
+
+  return ret;
+}
+
+static void
+gst_gl_buffer_upload_cpu_write (GstGLBuffer * mem, GstMapInfo * info,
+    gsize size)
+{
+  const GstGLFuncs *gl = mem->mem.context->gl_vtable;
+  gpointer data;
+
+  if (!mem->mem.data)
+    /* no data pointer has been written */
+    return;
+
+  /* The extra data pointer indirection/memcpy is needed for coherent across
+   * concurrent map()'s in both GL and CPU */
+  /* FIXME: uploading potentially half-written data for libav pushing READWRITE
+   * mapped buffers */
+  if (GST_MEMORY_FLAG_IS_SET (mem, GST_GL_BASE_MEMORY_TRANSFER_NEED_UPLOAD)
+      || (mem->mem.map_flags & GST_MAP_WRITE) != 0) {
+    gl->BindBuffer (mem->target, mem->id);
+
+    if (gl->MapBufferRange) {
+      /* FIXME: optionally remove this with a flag and return the
+       * glMapBufferRange pointer (requires
+       * GL_ARB_buffer_storage/GL4/GL_COHERENT_BIT) */
+      guint gl_map_flags = GL_MAP_WRITE_BIT;
+
+      data = gl->MapBufferRange (mem->target, 0, size, gl_map_flags);
+
+      if (data)
+        memcpy (data, mem->mem.data, size);
+
+      gl->UnmapBuffer (mem->target);
+    } else if (gl->BufferSubData) {
+      gl->BufferSubData (mem->target, 0, size, mem->mem.data);
+    }
+    gl->BindBuffer (mem->target, 0);
+  }
+}
+
+static gpointer
+_gl_buffer_map (GstGLBuffer * mem, GstMapInfo * info, gsize size)
+{
+  const GstGLFuncs *gl = mem->mem.context->gl_vtable;
+
+  if ((info->flags & GST_MAP_GL) != 0) {
+    if (info->flags & GST_MAP_READ) {
+      gst_gl_buffer_upload_cpu_write (mem, info, size);
+    }
+    gl->BindBuffer (mem->target, mem->id);
+    return &mem->id;
+  } else {
+    return gst_gl_buffer_cpu_access (mem, info, size);
+  }
+
+  return NULL;
+}
+
+static void
+_gl_buffer_unmap (GstGLBuffer * mem, GstMapInfo * info)
+{
+  const GstGLFuncs *gl = mem->mem.context->gl_vtable;
+
+  if ((info->flags & GST_MAP_GL) != 0) {
+    gl->BindBuffer (mem->target, 0);
+  }
+  /* XXX: optimistically transfer data */
+}
+
+/**
+ * gst_gl_buffer_copy_buffer_sub_data:
+ * @src: the source #GstGLBuffer
+ * @dest: the destination #GstGLBuffer
+ * @offset: the offset to copy from @src
+ * @size: the size to copy from @src
+ *
+ * Copies @src into @dest using glCopyBufferSubData().
+ *
+ * Returns: whether the copy operation succeeded
+ *
+ * Since: 1.8
+ */
+static gboolean
+gst_gl_buffer_copy_buffer_sub_data (GstGLBuffer * src,
+    GstGLBuffer * dest, gssize offset, gssize size)
+{
+  const GstGLFuncs *gl = src->mem.context->gl_vtable;
+  GstMapInfo sinfo, dinfo;
+
+  if (!gl->CopyBufferSubData)
+    /* This is GL(ES) 3.0+ only */
+    return FALSE;
+
+  if (!gst_memory_map ((GstMemory *) src, &sinfo, GST_MAP_READ | GST_MAP_GL)) {
+    GST_CAT_WARNING (GST_CAT_GL_BUFFER,
+        "failed to read map source memory %p", src);
+    return FALSE;
+  }
+
+  if (!gst_memory_map ((GstMemory *) dest, &dinfo, GST_MAP_WRITE | GST_MAP_GL)) {
+    GST_CAT_WARNING (GST_CAT_GL_BUFFER,
+        "failed to write map destination memory %p", dest);
+    gst_memory_unmap ((GstMemory *) src, &sinfo);
+    return FALSE;
+  }
+
+  gl->BindBuffer (GL_COPY_READ_BUFFER, src->id);
+  gl->BindBuffer (GL_COPY_WRITE_BUFFER, dest->id);
+  gl->CopyBufferSubData (GL_COPY_READ_BUFFER, GL_COPY_WRITE_BUFFER,
+      offset, 0, size);
+
+  gst_memory_unmap ((GstMemory *) src, &sinfo);
+  gst_memory_unmap ((GstMemory *) dest, &dinfo);
+
+  return TRUE;
+}
+
+static GstGLBuffer *
+_gl_buffer_copy (GstGLBuffer * src, gssize offset, gssize size)
+{
+  GstAllocator *allocator = src->mem.mem.allocator;
+  GstAllocationParams params = { 0, src->mem.mem.align, 0, 0 };
+  GstGLBuffer *dest = NULL;
+
+  dest = _gl_buffer_new (allocator, NULL, src->mem.context,
+      src->target, src->usage_hints, &params, src->mem.mem.maxsize);
+
+  /* If not doing a full copy, then copy to sysmem, the 2D represention of the
+   * texture would become wrong */
+  if (GST_MEMORY_FLAG_IS_SET (src, GST_GL_BASE_MEMORY_TRANSFER_NEED_UPLOAD)) {
+    if (!gst_gl_base_memory_memcpy (GST_GL_BASE_MEMORY_CAST (src),
+            GST_GL_BASE_MEMORY_CAST (dest), offset, size)) {
+      GST_CAT_WARNING (GST_CAT_GL_BUFFER, "Could not copy GL Buffer");
+      gst_memory_unref (GST_MEMORY_CAST (dest));
+      dest = NULL;
+    }
+  } else {
+    if (!gst_gl_buffer_copy_buffer_sub_data (src, dest, offset, size)) {
+      if (!gst_gl_base_memory_memcpy (GST_GL_BASE_MEMORY_CAST (src),
+              GST_GL_BASE_MEMORY_CAST (dest), offset, size)) {
+        GST_CAT_WARNING (GST_CAT_GL_BUFFER, "Could not copy GL Buffer");
+        gst_memory_unref (GST_MEMORY_CAST (dest));
+        dest = NULL;
+      }
+    }
+  }
+
+  return dest;
+}
+
+static GstMemory *
+_gl_buffer_alloc (GstAllocator * allocator, gsize size,
+    GstAllocationParams * params)
+{
+  g_critical ("Need to use gst_gl_base_memory_alloc() to allocate from "
+      "this allocator");
+
+  return NULL;
+}
+
+static void
+_gl_buffer_destroy (GstGLBuffer * mem)
+{
+  const GstGLFuncs *gl = mem->mem.context->gl_vtable;
+
+  gl->DeleteBuffers (1, &mem->id);
+}
+
+static void
+_gst_gl_buffer_allocation_params_copy_data (GstGLBufferAllocationParams * src,
+    GstGLBufferAllocationParams * dest)
+{
+  memset (dest, 0, sizeof (*dest));
+
+  gst_gl_allocation_params_copy_data (&src->parent, &dest->parent);
+
+  dest->gl_target = src->gl_target;
+  dest->gl_usage = src->gl_usage;
+}
+
+static void
+_gst_gl_buffer_allocation_params_free_data (GstGLBufferAllocationParams *
+    params)
+{
+  gst_gl_allocation_params_free_data (&params->parent);
+}
+
+/**
+ * gst_gl_buffer_allocation_params_new:
+ * @context: a #GstGLContext
+ * @alloc_size: the size in bytes to allocate
+ * @alloc_params: (allow-none): the #GstAllocationParams for @tex_id
+ * @gl_target: the OpenGL target to allocate
+ * @gl_usage: the OpenGL usage hint to allocate with
+ *
+ * Returns: a new #GstGLBufferAllocationParams for allocating OpenGL buffer
+ *          objects
+ *
+ * Since: 1.8
+ */
+GstGLBufferAllocationParams *
+gst_gl_buffer_allocation_params_new (GstGLContext * context, gsize alloc_size,
+    GstAllocationParams * alloc_params, guint gl_target, guint gl_usage)
+{
+  GstGLBufferAllocationParams *params;
+
+  g_return_val_if_fail (GST_IS_GL_CONTEXT (context), NULL);
+  g_return_val_if_fail (alloc_size > 0, NULL);
+
+  params = g_new0 (GstGLBufferAllocationParams, 1);
+
+  if (!gst_gl_allocation_params_init (&params->parent, sizeof (*params),
+          GST_GL_ALLOCATION_PARAMS_ALLOC_FLAG_BUFFER |
+          GST_GL_ALLOCATION_PARAMS_ALLOC_FLAG_ALLOC,
+          (GstGLAllocationParamsCopyFunc)
+          _gst_gl_buffer_allocation_params_copy_data,
+          (GstGLAllocationParamsFreeFunc)
+          _gst_gl_buffer_allocation_params_free_data, context, alloc_size,
+          alloc_params, NULL, 0, NULL, NULL)) {
+    g_free (params);
+    return NULL;
+  }
+
+  params->gl_target = gl_target;
+  params->gl_usage = gl_usage;
+
+  return params;
+}
+
+static GstGLBuffer *
+_gl_buffer_alloc_mem (GstGLBufferAllocator * allocator,
+    GstGLBufferAllocationParams * params)
+{
+  guint alloc_flags = params->parent.alloc_flags;
+
+  g_return_val_if_fail (alloc_flags &
+      GST_GL_ALLOCATION_PARAMS_ALLOC_FLAG_BUFFER, NULL);
+  g_return_val_if_fail (alloc_flags & GST_GL_ALLOCATION_PARAMS_ALLOC_FLAG_ALLOC,
+      NULL);
+
+  return _gl_buffer_new (GST_ALLOCATOR (allocator), NULL,
+      params->parent.context, params->gl_target, params->gl_usage,
+      params->parent.alloc_params, params->parent.alloc_size);
+}
+
+G_DEFINE_TYPE (GstGLBufferAllocator, gst_gl_buffer_allocator,
+    GST_TYPE_GL_BASE_MEMORY_ALLOCATOR);
+
+static void
+gst_gl_buffer_allocator_class_init (GstGLBufferAllocatorClass * klass)
+{
+  GstAllocatorClass *allocator_class = (GstAllocatorClass *) klass;
+  GstGLBaseMemoryAllocatorClass *gl_base;
+
+  gl_base = (GstGLBaseMemoryAllocatorClass *) klass;
+
+  gl_base->alloc = (GstGLBaseMemoryAllocatorAllocFunction) _gl_buffer_alloc_mem;
+  gl_base->create = (GstGLBaseMemoryAllocatorCreateFunction) _gl_buffer_create;
+  gl_base->map = (GstGLBaseMemoryAllocatorMapFunction) _gl_buffer_map;
+  gl_base->unmap = (GstGLBaseMemoryAllocatorUnmapFunction) _gl_buffer_unmap;
+  gl_base->copy = (GstGLBaseMemoryAllocatorCopyFunction) _gl_buffer_copy;
+  gl_base->destroy =
+      (GstGLBaseMemoryAllocatorDestroyFunction) _gl_buffer_destroy;
+
+  allocator_class->alloc = _gl_buffer_alloc;
+}
+
+static void
+gst_gl_buffer_allocator_init (GstGLBufferAllocator * allocator)
+{
+  GstAllocator *alloc = GST_ALLOCATOR_CAST (allocator);
+
+  alloc->mem_type = GST_GL_BUFFER_ALLOCATOR_NAME;
+
+  GST_OBJECT_FLAG_SET (allocator, GST_ALLOCATOR_FLAG_CUSTOM_ALLOC);
+}
+
+/**
+ * gst_gl_buffer_init_once:
+ *
+ * Initializes the GL Buffer allocator. It is safe to call this function
+ * multiple times.  This must be called before any other #GstGLBuffer operation.
+ *
+ * Since: 1.8
+ */
+void
+gst_gl_buffer_init_once (void)
+{
+  static volatile gsize _init = 0;
+
+  if (g_once_init_enter (&_init)) {
+    gst_gl_base_memory_init_once ();
+
+    GST_DEBUG_CATEGORY_INIT (GST_CAT_GL_BUFFER, "glbuffer", 0, "OpenGL Buffer");
+
+    _gl_buffer_allocator =
+        g_object_new (gst_gl_buffer_allocator_get_type (), NULL);
+
+    gst_allocator_register (GST_GL_BUFFER_ALLOCATOR_NAME,
+        gst_object_ref (_gl_buffer_allocator));
+    g_once_init_leave (&_init, 1);
+  }
+}
+
+/**
+ * gst_is_gl_buffer:
+ * @mem:a #GstMemory
+ * 
+ * Returns: whether the memory at @mem is a #GstGLBuffer
+ *
+ * Since: 1.8
+ */
+gboolean
+gst_is_gl_buffer (GstMemory * mem)
+{
+  return mem != NULL && mem->allocator != NULL &&
+      g_type_is_a (G_OBJECT_TYPE (mem->allocator),
+      GST_TYPE_GL_BUFFER_ALLOCATOR);
+}
diff --git a/gst-libs/gst/gl/gstglbuffer.h b/gst-libs/gst/gl/gstglbuffer.h
new file mode 100644
index 0000000..ef519d8
--- /dev/null
+++ b/gst-libs/gst/gl/gstglbuffer.h
@@ -0,0 +1,125 @@
+/*
+ * GStreamer
+ * Copyright (C) 2015 Matthew Waters <matthew@centricular.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifndef _GST_GL_BUFFER_H_
+#define _GST_GL_BUFFER_H_
+
+#include <gst/gst.h>
+#include <gst/gstallocator.h>
+#include <gst/gstmemory.h>
+
+#include <gst/gl/gstglbasememory.h>
+
+G_BEGIN_DECLS
+
+#define GST_TYPE_GL_BUFFER_ALLOCATOR (gst_gl_buffer_allocator_get_type())
+GType gst_gl_buffer_allocator_get_type(void);
+
+#define GST_IS_GL_BUFFER_ALLOCATOR(obj)              (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GST_TYPE_GL_ALLOCATOR))
+#define GST_IS_GL_BUFFER_ALLOCATOR_CLASS(klass)      (G_TYPE_CHECK_CLASS_TYPE ((klass), GST_TYPE_GL_BUFFER_ALLOCATOR))
+#define GST_GL_BUFFER_ALLOCATOR_GET_CLASS(obj)       (G_TYPE_INSTANCE_GET_CLASS ((obj), GST_TYPE_GL_BUFFER_ALLOCATOR, GstGLBufferAllocatorClass))
+#define GST_GL_BUFFER_ALLOCATOR(obj)                 (G_TYPE_CHECK_INSTANCE_CAST ((obj), GST_TYPE_GL_BUFFER_ALLOCATOR, GstGLBufferAllocator))
+#define GST_GL_BUFFER_ALLOCATOR_CLASS(klass)         (G_TYPE_CHECK_CLASS_CAST ((klass), GST_TYPE_GL_BUFFER_ALLOCATOR, GstGLBufferAllocatorClass))
+#define GST_GL_BUFFER_ALLOCATOR_CAST(obj)            ((GstGLBufferAllocator *)(obj))
+
+/**
+ * GstGLBuffer:
+ * @mem: the parent object
+ * @context: the #GstGLContext to use for GL operations
+ * @id: the buffer id for this memory
+ * @target: the OpenGL target of this texture for binding purposes
+ * @usage_hints: the OpenGL usage hints this buffer was created with
+ *
+ * Represents information about a GL buffer
+ */
+struct _GstGLBuffer
+{
+  GstGLBaseMemory       mem;
+
+  guint                 id;
+  guint                 target;         /* XXX: put this in the allocator? */
+  guint                 usage_hints;     /* XXX: put this in the allocator? */
+};
+
+typedef struct _GstGLBufferAllocationParams GstGLBufferAllocationParams;
+
+#define GST_GL_ALLOCATION_PARAMS_ALLOC_FLAG_BUFFER (1 << 4)
+
+/**
+ * GstGLBufferAllocationParams:
+ * @parent: parent object
+ * @gl_target: the OpenGL target to bind the buffer to
+ * @gl_usage: the OpenGL usage hint to create the buffer with
+ */
+struct _GstGLBufferAllocationParams
+{
+  GstGLAllocationParams     parent;
+
+  guint                     gl_target;
+  guint                     gl_usage;
+};
+
+GstGLBufferAllocationParams *   gst_gl_buffer_allocation_params_new     (GstGLContext * context,
+                                                                         gsize alloc_size,
+                                                                         GstAllocationParams * alloc_params,
+                                                                         guint gl_target,
+                                                                         guint gl_usage);
+
+/**
+ * GstGLBufferAllocator
+ *
+ * Opaque #GstGLAllocator struct
+ */
+struct _GstGLBufferAllocator
+{
+  GstGLBaseMemoryAllocator parent;
+};
+
+/**
+ * GstGLBufferAllocatorClass:
+ *
+ * The #GstGLBufferAllocatorClass only contains private data
+ */
+struct _GstGLBufferAllocatorClass
+{
+  GstGLBaseMemoryAllocatorClass parent_class;
+};
+
+#define GST_CAPS_FEATURE_MEMORY_GL_BUFFER "memory:GLBuffer"
+
+/**
+ * GST_GL_BUFFER_ALLOCATOR_NAME:
+ *
+ * The name of the GL buffer allocator
+ */
+#define GST_GL_BUFFER_ALLOCATOR_NAME   "GLBuffer"
+
+void          gst_gl_buffer_init_once (void);
+gboolean      gst_is_gl_buffer        (GstMemory * mem);
+
+GstGLBuffer * gst_gl_buffer_alloc     (GstGLContext * context,
+                                       guint gl_target,
+                                       guint gl_usage,
+                                       GstAllocationParams * params,
+                                       gsize maxsize);
+
+G_END_DECLS
+
+#endif /* _GST_GL_BUFFER_H_ */
diff --git a/gst-libs/gst/gl/gstglbufferpool.c b/gst-libs/gst/gl/gstglbufferpool.c
index 69ac2d8..90536b0 100644
--- a/gst-libs/gst/gl/gstglbufferpool.c
+++ b/gst-libs/gst/gl/gstglbufferpool.c
@@ -47,13 +47,9 @@
 struct _GstGLBufferPoolPrivate
 {
   GstAllocator *allocator;
-  GstAllocationParams params;
+  GstGLVideoAllocationParams *gl_params;
   GstCaps *caps;
-  gint im_format;
-  GstVideoInfo info;
-  GstVideoAlignment valign;
   gboolean add_videometa;
-  gboolean add_uploadmeta;
   gboolean add_glsyncmeta;
   gboolean want_eglimage;
   GstBuffer *last_buffer;
@@ -76,9 +72,10 @@
 gst_gl_buffer_pool_get_options (GstBufferPool * pool)
 {
   static const gchar *options[] = { GST_BUFFER_POOL_OPTION_VIDEO_META,
-    GST_BUFFER_POOL_OPTION_VIDEO_GL_TEXTURE_UPLOAD_META,
     GST_BUFFER_POOL_OPTION_GL_SYNC_META,
     GST_BUFFER_POOL_OPTION_VIDEO_ALIGNMENT,
+    GST_BUFFER_POOL_OPTION_GL_TEXTURE_TARGET_2D,
+    GST_BUFFER_POOL_OPTION_GL_TEXTURE_TARGET_RECTANGLE,
     NULL
   };
 
@@ -96,7 +93,8 @@
   guint max_align, n;
   GstAllocator *allocator = NULL;
   GstAllocationParams alloc_params;
-  gboolean reset = TRUE;
+  GstGLTextureTarget tex_target;
+  gboolean ret = TRUE;
   gint p;
 
   if (!gst_buffer_pool_config_get_params (config, &caps, NULL, &min_buffers,
@@ -116,63 +114,61 @@
   if (!gst_buffer_pool_config_get_allocator (config, &allocator, &alloc_params))
     goto wrong_config;
 
+  gst_caps_replace (&priv->caps, caps);
+
   if (priv->allocator)
     gst_object_unref (priv->allocator);
 
-  if (!allocator) {
-    gst_gl_memory_init ();
-    priv->allocator = gst_allocator_find (GST_GL_MEMORY_ALLOCATOR);
-  } else {
+  if (allocator /* && GST_IS_GL_MEMORY_ALLOCATOR (allocator) FIXME EGLImage */ ) {
     priv->allocator = gst_object_ref (allocator);
+  } else {
+    priv->allocator =
+        GST_ALLOCATOR (gst_gl_memory_allocator_get_default (glpool->context));
+    g_assert (priv->allocator);
   }
 
-  priv->params = alloc_params;
-
-  priv->im_format = GST_VIDEO_INFO_FORMAT (&info);
-  if (priv->im_format == -1)
-    goto unknown_format;
-
-  if (priv->caps)
-    reset = !gst_caps_is_equal (priv->caps, caps);
-
-  gst_caps_replace (&priv->caps, caps);
-  priv->info = info;
-
   priv->add_videometa = gst_buffer_pool_config_has_option (config,
       GST_BUFFER_POOL_OPTION_VIDEO_META);
-  priv->add_uploadmeta = gst_buffer_pool_config_has_option (config,
-      GST_BUFFER_POOL_OPTION_VIDEO_GL_TEXTURE_UPLOAD_META);
   priv->add_glsyncmeta = gst_buffer_pool_config_has_option (config,
       GST_BUFFER_POOL_OPTION_GL_SYNC_META);
 
 #if GST_GL_HAVE_PLATFORM_EGL
-  g_assert (priv->allocator != NULL);
-  priv->want_eglimage =
-      (g_strcmp0 (priv->allocator->mem_type, GST_EGL_IMAGE_MEMORY_TYPE) == 0);
-#else
-  priv->want_eglimage = FALSE;
+  if (priv->allocator) {
+    priv->want_eglimage =
+        (g_strcmp0 (priv->allocator->mem_type, GST_EGL_IMAGE_MEMORY_TYPE) == 0);
+  } else
 #endif
+  {
+    priv->want_eglimage = FALSE;
+  }
+
+  if (priv->gl_params)
+    gst_gl_allocation_params_free ((GstGLAllocationParams *) priv->gl_params);
+  priv->gl_params = (GstGLVideoAllocationParams *)
+      gst_buffer_pool_config_get_gl_allocation_params (config);
+  if (!priv->gl_params)
+    priv->gl_params = gst_gl_video_allocation_params_new (glpool->context,
+        &alloc_params, &info, -1, NULL, 0);
 
   max_align = alloc_params.align;
 
   if (gst_buffer_pool_config_has_option (config,
           GST_BUFFER_POOL_OPTION_VIDEO_ALIGNMENT)) {
-
     priv->add_videometa = TRUE;
 
-    gst_buffer_pool_config_get_video_alignment (config, &priv->valign);
+    gst_buffer_pool_config_get_video_alignment (config,
+        priv->gl_params->valign);
 
     for (n = 0; n < GST_VIDEO_MAX_PLANES; ++n)
-      max_align |= priv->valign.stride_align[n];
+      max_align |= priv->gl_params->valign->stride_align[n];
 
     for (n = 0; n < GST_VIDEO_MAX_PLANES; ++n)
-      priv->valign.stride_align[n] = max_align;
+      priv->gl_params->valign->stride_align[n] = max_align;
 
-    gst_video_info_align (&priv->info, &priv->valign);
+    gst_video_info_align (priv->gl_params->v_info, priv->gl_params->valign);
 
-    gst_buffer_pool_config_set_video_alignment (config, &priv->valign);
-  } else {
-    gst_video_alignment_reset (&priv->valign);
+    gst_buffer_pool_config_set_video_alignment (config,
+        priv->gl_params->valign);
   }
 
   if (alloc_params.align < max_align) {
@@ -182,28 +178,65 @@
 
     alloc_params.align = max_align;
     gst_buffer_pool_config_set_allocator (config, allocator, &alloc_params);
-    priv->params = alloc_params;
+    if (priv->gl_params->parent.alloc_params)
+      gst_allocation_params_free (priv->gl_params->parent.alloc_params);
+    priv->gl_params->parent.alloc_params =
+        gst_allocation_params_copy (&alloc_params);
   }
 
-  if (reset) {
-    if (glpool->upload)
-      gst_object_unref (glpool->upload);
+  {
+    GstStructure *s = gst_caps_get_structure (caps, 0);
+    const gchar *target_str = gst_structure_get_string (s, "texture-target");
+    gboolean multiple_texture_targets = FALSE;
 
-    glpool->upload = gst_gl_upload_meta_new (glpool->context);
+    tex_target = priv->gl_params->target;
+    if (target_str)
+      tex_target = gst_gl_texture_target_from_string (target_str);
+
+    if (gst_buffer_pool_config_has_option (config,
+            GST_BUFFER_POOL_OPTION_GL_TEXTURE_TARGET_2D)) {
+      if (tex_target && tex_target != GST_GL_TEXTURE_TARGET_2D)
+        multiple_texture_targets = TRUE;
+      tex_target = GST_GL_TEXTURE_TARGET_2D;
+    }
+    if (gst_buffer_pool_config_has_option (config,
+            GST_BUFFER_POOL_OPTION_GL_TEXTURE_TARGET_RECTANGLE)) {
+      if (tex_target && tex_target != GST_GL_TEXTURE_TARGET_RECTANGLE)
+        multiple_texture_targets = TRUE;
+      tex_target = GST_GL_TEXTURE_TARGET_RECTANGLE;
+    }
+    if (gst_buffer_pool_config_has_option (config,
+            GST_BUFFER_POOL_OPTION_GL_TEXTURE_TARGET_EXTERNAL_OES)) {
+      if (tex_target && tex_target != GST_GL_TEXTURE_TARGET_EXTERNAL_OES)
+        multiple_texture_targets = TRUE;
+      tex_target = GST_GL_TEXTURE_TARGET_EXTERNAL_OES;
+    }
+
+    if (!tex_target)
+      tex_target = GST_GL_TEXTURE_TARGET_2D;
+
+    if (multiple_texture_targets) {
+      GST_WARNING_OBJECT (pool, "Multiple texture targets configured either "
+          "through caps or buffer pool options");
+      ret = FALSE;
+    }
+
+    priv->gl_params->target = tex_target;
   }
 
   /* Recalulate the size and offset as we don't add padding between planes. */
-  priv->info.size = 0;
-  for (p = 0; p < GST_VIDEO_INFO_N_PLANES (&priv->info); p++) {
-    priv->info.offset[p] = priv->info.size;
-    priv->info.size +=
-        gst_gl_get_plane_data_size (&priv->info, &priv->valign, p);
+  priv->gl_params->v_info->size = 0;
+  for (p = 0; p < GST_VIDEO_INFO_N_PLANES (priv->gl_params->v_info); p++) {
+    priv->gl_params->v_info->offset[p] = priv->gl_params->v_info->size;
+    priv->gl_params->v_info->size +=
+        gst_gl_get_plane_data_size (priv->gl_params->v_info,
+        priv->gl_params->valign, p);
   }
 
-  gst_buffer_pool_config_set_params (config, caps, priv->info.size,
-      min_buffers, max_buffers);
+  gst_buffer_pool_config_set_params (config, caps,
+      priv->gl_params->v_info->size, min_buffers, max_buffers);
 
-  return GST_BUFFER_POOL_CLASS (parent_class)->set_config (pool, config);
+  return GST_BUFFER_POOL_CLASS (parent_class)->set_config (pool, config) && ret;
 
   /* ERRORS */
 wrong_config:
@@ -222,26 +255,11 @@
         "failed getting geometry from caps %" GST_PTR_FORMAT, caps);
     return FALSE;
   }
-unknown_format:
-  {
-    GST_WARNING_OBJECT (glpool, "failed to get format from caps %"
-        GST_PTR_FORMAT, caps);
-    GST_ELEMENT_ERROR (glpool, RESOURCE, WRITE,
-        ("Failed to create output image buffer of %dx%d pixels",
-            priv->info.width, priv->info.height),
-        ("Invalid input caps %" GST_PTR_FORMAT, caps));
-    return FALSE;
-  }
 }
 
 static gboolean
 gst_gl_buffer_pool_start (GstBufferPool * pool)
 {
-  GstGLBufferPool *glpool = GST_GL_BUFFER_POOL_CAST (pool);
-  GstGLBufferPoolPrivate *priv = glpool->priv;
-
-  gst_gl_upload_meta_set_format (glpool->upload, &priv->info);
-
   return GST_BUFFER_POOL_CLASS (parent_class)->start (pool);
 }
 
@@ -250,15 +268,11 @@
 gst_gl_buffer_pool_alloc (GstBufferPool * pool, GstBuffer ** buffer,
     GstBufferPoolAcquireParams * params)
 {
+  GstGLMemoryAllocator *alloc;
   GstGLBufferPool *glpool = GST_GL_BUFFER_POOL_CAST (pool);
   GstGLBufferPoolPrivate *priv = glpool->priv;
-  GstVideoInfo *info;
-  GstVideoAlignment *valign;
   GstBuffer *buf;
 
-  info = &priv->info;
-  valign = &priv->valign;
-
   if (!(buf = gst_buffer_new ())) {
     goto no_buffer;
   }
@@ -266,7 +280,8 @@
   if (priv->want_eglimage) {
     /* alloc and append memories, also add video_meta and
      * texture_upload_meta */
-    if (!gst_egl_image_memory_setup_buffer (glpool->context, info, buf))
+    if (!gst_egl_image_memory_setup_buffer (glpool->context,
+            priv->gl_params->v_info, buf))
       goto egl_image_mem_create_failed;
 
     *buffer = buf;
@@ -275,13 +290,10 @@
   }
 #endif
 
-  if (!gst_gl_memory_setup_buffer (glpool->context, &priv->params, info,
-          valign, buf))
+  alloc = GST_GL_MEMORY_ALLOCATOR (priv->allocator);
+  if (!gst_gl_memory_setup_buffer (alloc, buf, priv->gl_params))
     goto mem_create_failed;
 
-  if (priv->add_uploadmeta)
-    gst_gl_upload_meta_add_to_buffer (glpool->upload, buf);
-
   if (priv->add_glsyncmeta)
     gst_buffer_add_gl_sync_meta (glpool->context, buf);
 
@@ -409,14 +421,10 @@
 
   priv->allocator = NULL;
   priv->caps = NULL;
-  priv->im_format = GST_VIDEO_FORMAT_UNKNOWN;
   priv->add_videometa = TRUE;
   priv->add_glsyncmeta = FALSE;
   priv->want_eglimage = FALSE;
   priv->last_buffer = FALSE;
-
-  gst_video_info_init (&priv->info);
-  gst_allocation_params_init (&priv->params);
 }
 
 static void
@@ -432,9 +440,6 @@
   if (priv->caps)
     gst_caps_unref (priv->caps);
 
-  if (pool->upload)
-    gst_object_unref (pool->upload);
-
   G_OBJECT_CLASS (gst_gl_buffer_pool_parent_class)->finalize (object);
 
   /* only release the context once all our memory have been deleted */
@@ -447,4 +452,44 @@
     gst_object_unref (priv->allocator);
     priv->allocator = NULL;
   }
+
+  if (priv->gl_params)
+    gst_gl_allocation_params_free ((GstGLAllocationParams *) priv->gl_params);
+  priv->gl_params = NULL;
+}
+
+/**
+ * gst_buffer_pool_config_get_gl_allocation_params:
+ * @config: a buffer pool config
+ *
+ * Returns: (transfer full): the currently set #GstGLAllocationParams or %NULL
+ */
+GstGLAllocationParams *
+gst_buffer_pool_config_get_gl_allocation_params (GstStructure * config)
+{
+  GstGLAllocationParams *ret;
+
+  if (!gst_structure_get (config, "gl-allocation-params",
+          GST_TYPE_GL_ALLOCATION_PARAMS, &ret, NULL))
+    ret = NULL;
+
+  return ret;
+}
+
+/**
+ * gst_buffer_pool_config_set_gl_allocation_params:
+ * @config: a buffer pool config
+ * @params: (transfer none): a #GstGLAllocationParams
+ *
+ * Sets @params on @config
+ */
+void
+gst_buffer_pool_config_set_gl_allocation_params (GstStructure * config,
+    GstGLAllocationParams * params)
+{
+  g_return_if_fail (config != NULL);
+  g_return_if_fail (params != NULL);
+
+  gst_structure_set (config, "gl-allocation-params",
+      GST_TYPE_GL_ALLOCATION_PARAMS, params, NULL);
 }
diff --git a/gst-libs/gst/gl/gstglbufferpool.h b/gst-libs/gst/gl/gstglbufferpool.h
index cea1175..ee13366 100644
--- a/gst-libs/gst/gl/gstglbufferpool.h
+++ b/gst-libs/gst/gl/gstglbufferpool.h
@@ -25,14 +25,10 @@
 #include <gst/video/gstvideometa.h>
 #include <gst/video/gstvideopool.h>
 
-#include <gst/gl/gstgl_fwd.h>
+#include <gst/gl/gl.h>
 
 G_BEGIN_DECLS
 
-typedef struct _GstGLBufferPool GstGLBufferPool;
-typedef struct _GstGLBufferPoolClass GstGLBufferPoolClass;
-typedef struct _GstGLBufferPoolPrivate GstGLBufferPoolPrivate;
-
 /* buffer pool functions */
 GType gst_gl_buffer_pool_get_type (void);
 #define GST_TYPE_GL_BUFFER_POOL      (gst_gl_buffer_pool_get_type())
@@ -50,7 +46,6 @@
   GstBufferPool bufferpool;
 
   GstGLContext *context;
-  GstGLUploadMeta *upload;
 
   GstGLBufferPoolPrivate *priv;
 };
@@ -69,6 +64,10 @@
 void gst_gl_buffer_pool_replace_last_buffer (GstGLBufferPool * pool,
     GstBuffer * buffer);
 
+GstGLAllocationParams * gst_buffer_pool_config_get_gl_allocation_params    (GstStructure * config);
+void                    gst_buffer_pool_config_set_gl_allocation_params    (GstStructure * config,
+                                                                            GstGLAllocationParams * params);
+
 G_END_DECLS
 
 #endif /* _GST_GL_BUFFER_POOL_H_ */
diff --git a/gst-libs/gst/gl/gstglcolorconvert.c b/gst-libs/gst/gl/gstglcolorconvert.c
index 5915a39..eb3b4a8 100644
--- a/gst-libs/gst/gl/gstglcolorconvert.c
+++ b/gst-libs/gst/gl/gstglcolorconvert.c
@@ -22,6 +22,7 @@
 #include "config.h"
 #endif
 
+#include <string.h>
 #include <stdio.h>
 
 #include "gl.h"
@@ -30,15 +31,12 @@
 /**
  * SECTION:gstglcolorconvert
  * @short_description: an object that converts between color spaces/formats
- * @see_also: #GstGLUpload, #GstGLDownload, #GstGLMemory
+ * @see_also: #GstGLUpload, #GstGLMemory, #GstGLBaseMemory
  *
  * #GstGLColorConvert is an object that converts between color spaces and/or
  * formats using OpenGL Shaders.
  *
  * A #GstGLColorConvert can be created with gst_gl_color_convert_new().
- *
- * For handling stride scaling in the shader, see
- * gst_gl_color_convert_set_texture_scaling().
  */
 
 #define USING_OPENGL(context) (gst_gl_context_check_gl_version (context, GST_GL_API_OPENGL, 1, 0))
@@ -109,7 +107,6 @@
 static const gfloat from_rgb_bt709_ucoeff[] = { -0.100640, -0.338688, 0.439327 };
 static const gfloat from_rgb_bt709_vcoeff[] = { 0.440654, -0.400285, -0.040370 };
 
-
 /* GRAY16 to RGB conversion
  *  data transfered as GL_LUMINANCE_ALPHA then convert back to GRAY16 
  *  high byte weight as : 255*256/65535 
@@ -119,39 +116,62 @@
 #define COMPOSE_WEIGHT \
     "const vec2 compose_weight = vec2(0.996109, 0.003891);\n"
 
-/* Channel reordering for XYZ <-> ZYX conversion */
-static const gchar frag_REORDER[] =
-      "#ifdef GL_ES\n"
-      "precision mediump float;\n"
-      "#endif\n"
-      "varying vec2 v_texcoord;\n"
-      "uniform sampler2D tex;\n"
-      "uniform vec2 tex_scale0;\n"
-      "uniform vec2 tex_scale1;\n"
-      "uniform vec2 tex_scale2;\n"
-      "void main(void)\n"
-      "{\n"
-      " vec4 t = texture2D(tex, v_texcoord * tex_scale0);\n"
-      " %s\n" /* clobber alpha channel? */
-      " gl_FragColor = vec4(t.%c, t.%c, t.%c, t.%c);\n"
-      "}";
+#define DEFAULT_UNIFORMS         \
+    "#ifdef GL_ES\n"             \
+    "precision mediump float;\n" \
+    "#endif\n"                   \
+    "uniform vec2 tex_scale0;\n" \
+    "uniform vec2 tex_scale1;\n" \
+    "uniform vec2 tex_scale2;\n" \
+    "uniform float width;\n"     \
+    "uniform float height;\n"    \
+    "uniform float poffset_x;\n" \
+    "uniform float poffset_y;\n"
 
-static const gchar frag_APPLE_YUV_TO_RGB[] =
-      "#ifdef GL_ES\n"
-      "precision mediump float;\n"
-      "#endif\n"
-      "varying vec2 v_texcoord;\n"
-      "uniform float width;\n"
-      "uniform float height;\n"
-      "uniform sampler2DRect tex;\n"
-      "uniform vec2 tex_scale0;\n"
-      "uniform vec2 tex_scale1;\n"
-      "uniform vec2 tex_scale2;\n"
-      "void main(void)\n"
-      "{\n"
-      " vec4 t = texture2DRect(tex, v_texcoord * vec2(width, height) * tex_scale0);\n"
-      " gl_FragColor = vec4(t.%c, t.%c, t.%c, t.%c);\n"
-      "}";
+#define MAX_FUNCTIONS 4
+
+#define glsl_OES_extension_string "#extension GL_OES_EGL_image_external : require \n"
+
+struct shader_templ
+{
+  const gchar *extensions;
+  const gchar *uniforms;
+  const gchar *functions[MAX_FUNCTIONS];
+  const gchar *body;
+
+  GstGLTextureTarget target;
+};
+
+#define glsl_func_yuv_to_rgb \
+    "vec3 yuv_to_rgb (vec3 val, vec3 offset, vec3 ycoeff, vec3 ucoeff, vec3 vcoeff) {\n" \
+    "  vec3 rgb;\n"                 \
+    "  val += offset;\n"            \
+    "  rgb.r = dot(val, ycoeff);\n" \
+    "  rgb.g = dot(val, ucoeff);\n" \
+    "  rgb.b = dot(val, vcoeff);\n" \
+    "  return rgb;\n"               \
+    "}\n"
+
+#define glsl_func_rgb_to_yuv \
+    "vec3 rgb_to_yuv (vec3 val, vec3 offset, vec3 rcoeff, vec3 gcoeff, vec3 bcoeff) {\n" \
+    "  vec3 yuv;\n"                         \
+    "  yuv.r = dot(val.rgb, rcoeff);\n"     \
+    "  yuv.g = dot(val.rgb, gcoeff);\n"     \
+    "  yuv.b = dot(val.rgb, bcoeff);\n"     \
+    "  yuv += offset;\n"                    \
+    "  return yuv;\n"                       \
+    "}\n"
+
+/* Channel reordering for XYZ <-> ZYX conversion */
+static const struct shader_templ templ_REORDER =
+  { NULL,
+    DEFAULT_UNIFORMS "uniform sampler2D tex;\n",
+    { NULL, },
+    "vec4 t = texture2D(tex, texcoord * tex_scale0);\n"
+    "%s\n" /* clobber alpha channel? */
+    "gl_FragColor = vec4(t.%c, t.%c, t.%c, t.%c);\n",
+    GST_GL_TEXTURE_TARGET_2D
+  };
 
 /* GRAY16 to RGB conversion
  *  data transfered as GL_LUMINANCE_ALPHA then convert back to GRAY16 
@@ -159,274 +179,191 @@
  *  ([0~1] denormalize to [0~255],shift to high byte,normalize to [0~1])
  *  low byte weight as : 255/65535 (similar)
  * */
-static const gchar frag_COMPOSE[] =
-      "#ifdef GL_ES\n"
-      "precision mediump float;\n"
-      "#endif\n"
-      "varying vec2 v_texcoord;\n"
-      "uniform sampler2D tex;\n"
-      "uniform vec2 tex_scale0;\n"
-      "uniform vec2 tex_scale1;\n"
-      "uniform vec2 tex_scale2;\n"
-      COMPOSE_WEIGHT
-      "void main(void)\n"
-      "{\n"
-      " float r, g, b, a;\n"
-      " vec4 t = texture2D(tex, v_texcoord * tex_scale0);\n"
-      " r = dot(t.%c%c, compose_weight);"
-      " g = r;\n"
-      " b = r;\n"
-      " a = 1.0;\n"
-      " gl_FragColor = vec4(%c, %c, %c, %c);\n"
-      "}";
+static const struct shader_templ templ_COMPOSE =
+  { NULL,
+    DEFAULT_UNIFORMS COMPOSE_WEIGHT "uniform sampler2D tex;\n",
+    { NULL, },
+    "vec4 rgba;\n"
+    "vec4 t = texture2D(tex, texcoord * tex_scale0);\n"
+    "rgba.rgb = vec3 (dot(t.%c%c, compose_weight));"
+    "rgba.a = 1.0;\n"
+    "gl_FragColor = vec4(rgba.%c, rgba.%c, rgba.%c, rgba.%c);\n",
+    GST_GL_TEXTURE_TARGET_2D
+  };
 
-static const char frag_AYUV_to_RGB[] =
-    "#ifdef GL_ES\n"
-    "precision mediump float;\n"
-    "#endif\n"
-    "varying vec2 v_texcoord;\n"
-    "uniform sampler2D tex;\n"
-    "uniform vec2 tex_scale0;\n"
-    "uniform vec2 tex_scale1;\n"
-    "uniform vec2 tex_scale2;\n"
-    YUV_TO_RGB_COEFFICIENTS
-    "void main(void) {\n"
-    "  float r,g,b,a;\n"
-    "  vec4 texel;\n"
-    "  texel = texture2D(tex, v_texcoord * tex_scale0);\n"
-    "  texel.gba += offset;\n"
-    "  r = dot(texel.gba, coeff1);\n"
-    "  g = dot(texel.gba, coeff2);\n"
-    "  b = dot(texel.gba, coeff3);\n"
-    "  a = texel.r;\n"
-    "  gl_FragColor=vec4(%c,%c,%c,%c);\n"
-    "}";
+static const struct shader_templ templ_AYUV_to_RGB =
+  { NULL,
+    DEFAULT_UNIFORMS YUV_TO_RGB_COEFFICIENTS "uniform sampler2D tex;\n",
+    { glsl_func_yuv_to_rgb, NULL, },
+    "vec4 texel, rgba;\n"
+    "texel = texture2D(tex, texcoord * tex_scale0);\n"
+    "rgba.rgb = yuv_to_rgb (texel.yzw, offset, coeff1, coeff2, coeff3);\n"
+    "rgba.a = texel.r;\n"
+    "gl_FragColor=vec4(rgba.%c,rgba.%c,rgba.%c,rgba.%c);\n",
+    GST_GL_TEXTURE_TARGET_2D
+  };
 
-static const gchar frag_RGB_to_AYUV[] =
-    "#ifdef GL_ES\n"
-    "precision mediump float;\n"
-    "#endif\n"
-    "varying vec2 v_texcoord;\n"
-    "uniform sampler2D tex;\n"
-    RGB_TO_YUV_COEFFICIENTS
-    "void main(void) {\n"
-    "  vec4 texel;\n"
-    "  float y, u, v, a;\n"
-    "  texel = texture2D(tex, v_texcoord).%c%c%c%c;\n"
-    "  y = dot(texel.rgb, coeff1);\n"
-    "  u = dot(texel.rgb, coeff2);\n"
-    "  v = dot(texel.rgb, coeff3);\n"
-    "  y += offset.x;\n"
-    "  u += offset.y;\n"
-    "  v += offset.z;\n"
-    "  a = %s;\n"
-    "  gl_FragColor = vec4(a,y,u,v);\n"
-    "}\n";
+static const struct shader_templ templ_RGB_to_AYUV =
+  { NULL,
+    DEFAULT_UNIFORMS RGB_TO_YUV_COEFFICIENTS "uniform sampler2D tex;\n",
+    { glsl_func_rgb_to_yuv, NULL, },
+    "vec4 texel, ayuv;\n"
+    "texel = texture2D(tex, texcoord).%c%c%c%c;\n"
+    "ayuv.yzw = rgb_to_yuv (texel.rgb, offset, coeff1, coeff2, coeff3);\n"
+    "ayuv.x = %s;\n"
+    "gl_FragColor = ayuv;\n",
+    GST_GL_TEXTURE_TARGET_2D
+  };
 
 /* YUV to RGB conversion */
-static const char frag_PLANAR_YUV_to_RGB[] =
-    "#ifdef GL_ES\n"
-    "precision mediump float;\n"
-    "#endif\n"
-    "varying vec2 v_texcoord;\n"
-    "uniform sampler2D Ytex, Utex, Vtex;\n"
-    "uniform vec2 tex_scale0;\n"
-    "uniform vec2 tex_scale1;\n"
-    "uniform vec2 tex_scale2;\n"
-    YUV_TO_RGB_COEFFICIENTS
-    "void main(void) {\n"
-    "  float r, g, b, a;\n"
-    "  vec3 yuv;\n"
-    "  yuv.x = texture2D(Ytex,v_texcoord * tex_scale0).r;\n"
-    "  yuv.y = texture2D(Utex,v_texcoord * tex_scale1).r;\n"
-    "  yuv.z = texture2D(Vtex,v_texcoord * tex_scale2).r;\n"
-    "  yuv += offset;\n"
-    "  r = dot(yuv, coeff1);\n"
-    "  g = dot(yuv, coeff2);\n"
-    "  b = dot(yuv, coeff3);\n"
-    "  a = 1.0;\n"
-    "  gl_FragColor = vec4(%c, %c, %c, %c);\n"
-    "}\n";
+static const struct shader_templ templ_PLANAR_YUV_to_RGB =
+  { NULL,
+    DEFAULT_UNIFORMS YUV_TO_RGB_COEFFICIENTS "uniform sampler2D Ytex, Utex, Vtex;\n",
+    { glsl_func_yuv_to_rgb, NULL, },
+    "vec4 texel, rgba;\n"
+    /* FIXME: should get the sampling right... */
+    "texel.x = texture2D(Ytex, texcoord * tex_scale0).r;\n"
+    "texel.y = texture2D(Utex, texcoord * tex_scale1).r;\n"
+    "texel.z = texture2D(Vtex, texcoord * tex_scale2).r;\n"
+    "rgba.rgb = yuv_to_rgb (texel.xyz, offset, coeff1, coeff2, coeff3);\n"
+    "rgba.a = 1.0;\n"
+    "gl_FragColor=vec4(rgba.%c,rgba.%c,rgba.%c,rgba.%c);\n",
+    GST_GL_TEXTURE_TARGET_2D
+  };
 
-static const gchar frag_RGB_to_PLANAR_YUV[] =
-    "#ifdef GL_ES\n"
-    "precision mediump float;\n"
-    "#endif\n"
-    "varying vec2 v_texcoord;\n"
-    "uniform sampler2D tex;\n"
-    "uniform float width;\n"
-    "uniform float height;\n"
-    "uniform vec2 chroma_sampling;\n"
-    RGB_TO_YUV_COEFFICIENTS
-    "void main(void) {\n"
-    "  float y, u, v;\n"
-    "  vec4 uv_texel;\n"
-    "  vec4 texel = texture2D(tex, v_texcoord).%c%c%c%c;\n"
+static const struct shader_templ templ_RGB_to_PLANAR_YUV =
+  { NULL,
+    DEFAULT_UNIFORMS RGB_TO_YUV_COEFFICIENTS "uniform sampler2D tex;\n"
+    "uniform vec2 chroma_sampling;\n",
+    { glsl_func_rgb_to_yuv, NULL, },
+    "vec4 texel;\n"
+    "vec3 yuv;\n"
+    "texel = texture2D(tex, texcoord).%c%c%c%c;\n"
+    /* FIXME: this is not quite correct yet */
+    "vec4 uv_texel = vec4(0.0);\n"
     /* One u and v sample can be generated by a nxm sized block given by
      * @chroma_sampling.  The result is the average of all the values in the
      * block computed with a rolling average.
      */
-    "  vec2 size = vec2(width, height);\n"
-    "  vec2 pos = v_texcoord * size;\n"
-       /* scale for chroma size */
-    "  vec2 chroma_pos = v_texcoord * chroma_sampling * size;\n"
-       /* offset chroma to the center of the first texel in the block */
-    "  chroma_pos -= clamp(chroma_sampling * 0.5 - 0.5, vec2(0.0), chroma_sampling);\n"
-    "  if (chroma_pos.x < width && chroma_pos.y < height) {\n"
-    "    for (int i = 0; i < int(chroma_sampling.x); i++) {\n"
-    "      vec2 delta = vec2 (float(i), 0.0);\n"
-    "      for (int j = 0; j < int(chroma_sampling.y); j++) {\n"
-    "        int n = (i+1)*(j+1);\n"
-    "        delta.y = float(j);\n"
-    "        vec4 sample = texture2D(tex, (chroma_pos + delta) / size).%c%c%c%c;\n"
-             /* rolling average */
-    "        uv_texel = (float(n-1) * uv_texel + sample) / float(n);\n"
-    "      }\n"
+    "vec2 unnormalization;\n"
+    "if (texcoord.x == v_texcoord.x) {\n"
+    "  unnormalization = vec2(width, height);\n"
+    "} else {\n"
+    "  unnormalization = vec2 (1.0);\n"
+    "}\n"
+     /* scale for chroma size */
+    "vec2 chroma_pos = texcoord * chroma_sampling * unnormalization;\n"
+     /* offset chroma to the center of the first texel in the block */
+    "chroma_pos -= clamp(chroma_sampling * 0.5 - 0.5, vec2(0.0), chroma_sampling);\n"
+    "if (chroma_pos.x < width && chroma_pos.y < height) {\n"
+    "  for (int i = 0; i < int(chroma_sampling.x); i++) {\n"
+    "    vec2 delta = vec2 (float(i), 0.0);\n"
+    "    for (int j = 0; j < int(chroma_sampling.y); j++) {\n"
+    "      int n = (i+1)*(j+1);\n"
+    "      delta.y = float(j);\n"
+    "      vec4 sample = texture2D(tex, (chroma_pos + delta) / unnormalization).%c%c%c%c;\n"
+           /* rolling average */
+    "      uv_texel = (float(n-1) * uv_texel + sample) / float(n);\n"
     "    }\n"
     "  }\n"
-    "  y = dot(texel.rgb, coeff1);\n"
-    "  u = dot(uv_texel.rgb, coeff2);\n"
-    "  v = dot(uv_texel.rgb, coeff3);\n"
-    "  y += offset.x;\n"
-    "  u += offset.y;\n"
-    "  v += offset.z;\n"
-    "  gl_FragData[0] = vec4(y, 0.0, 0.0, 1.0);\n"
-    "  gl_FragData[1] = vec4(u, 0.0, 0.0, 1.0);\n"
-    "  gl_FragData[2] = vec4(v, 0.0, 0.0, 1.0);\n"
-    "}\n";
+    "}\n"
+    "yuv.x = rgb_to_yuv (texel.rgb, offset, coeff1, coeff2, coeff3).x;\n"
+    "yuv.yz = rgb_to_yuv (uv_texel.rgb, offset, coeff1, coeff2, coeff3).yz;\n"
+    "gl_FragData[0] = vec4(yuv.x, 0.0, 0.0, 1.0);\n"
+    "gl_FragData[1] = vec4(yuv.y, 0.0, 0.0, 1.0);\n"
+    "gl_FragData[2] = vec4(yuv.z, 0.0, 0.0, 1.0);\n",
+    GST_GL_TEXTURE_TARGET_2D
+  };
 
 /* NV12/NV21 to RGB conversion */
-static const char frag_NV12_NV21_to_RGB[] = {
-      "#ifdef GL_ES\n"
-      "precision mediump float;\n"
-      "#endif\n"
-      "varying vec2 v_texcoord;\n"
-      "uniform sampler2D Ytex,UVtex;\n"
-      "uniform vec2 tex_scale0;\n"
-      "uniform vec2 tex_scale1;\n"
-      "uniform vec2 tex_scale2;\n"
-      YUV_TO_RGB_COEFFICIENTS
-      "void main(void) {\n"
-      "  float r, g, b, a;\n"
-      "  vec3 yuv;\n"
-      "  yuv.x=texture2D(Ytex, v_texcoord * tex_scale0).r;\n"
-      "  yuv.yz=texture2D(UVtex, v_texcoord * tex_scale1).%c%c;\n"
-      "  yuv += offset;\n"
-      "  r = dot(yuv, coeff1);\n"
-      "  g = dot(yuv, coeff2);\n"
-      "  b = dot(yuv, coeff3);\n"
-      "  a = 1.0;\n"
-      "  gl_FragColor=vec4(%c, %c, %c, %c);\n"
-      "}"
-};
+static const struct shader_templ templ_NV12_NV21_to_RGB =
+  { NULL,
+    DEFAULT_UNIFORMS YUV_TO_RGB_COEFFICIENTS "uniform sampler2D Ytex, UVtex;\n",
+    { glsl_func_yuv_to_rgb, NULL, },
+    "vec4 rgba;\n"
+    "vec3 yuv;\n"
+    /* FIXME: should get the sampling right... */
+    "yuv.x=texture2D(Ytex, texcoord * tex_scale0).r;\n"
+    "yuv.yz=texture2D(UVtex, texcoord * tex_scale1).%c%c;\n"
+    "rgba.rgb = yuv_to_rgb (yuv, offset, coeff1, coeff2, coeff3);\n"
+    "rgba.a = 1.0;\n"
+    "gl_FragColor=vec4(rgba.%c,rgba.%c,rgba.%c,rgba.%c);\n",
+    GST_GL_TEXTURE_TARGET_2D
+  };
 
 /* RGB to NV12/NV21 conversion */
 /* NV12: u, v
    NV21: v, u */
-static const char frag_RGB_to_NV12_NV21[] = {
-    "#ifdef GL_ES\n"
-    "precision mediump float;\n"
-    "#endif\n"
-    "varying vec2 v_texcoord;\n"
-    "uniform sampler2D tex;\n"
-    "uniform vec2 tex_scale0;\n"
-    "uniform vec2 tex_scale1;\n"
-    "uniform vec2 tex_scale2;\n"
-    RGB_TO_YUV_COEFFICIENTS
-    "void main(void) {\n"
-    "  float y, u, v;\n"
-    "  vec4 texel, uv_texel;\n"
-    "  texel = texture2D(tex, v_texcoord * tex_scale0).%c%c%c%c;\n"
-    "  uv_texel = texture2D(tex, v_texcoord * tex_scale0 * 2.0).%c%c%c%c;\n"
-    "  y = dot(texel.rgb, coeff1);\n"
-    "  u = dot(uv_texel.rgb, coeff2);\n"
-    "  v = dot(uv_texel.rgb, coeff3);\n"
-    "  y += offset.x;\n"
-    "  u += offset.y;\n"
-    "  v += offset.z;\n"
-    "  gl_FragData[0] = vec4(y, 0.0, 0.0, 1.0);\n"
-    "  gl_FragData[1] = vec4(%c, %c, 0.0, 1.0);\n"
-    "}"
-};
+static const struct shader_templ templ_RGB_to_NV12_NV21 =
+  { NULL,
+    DEFAULT_UNIFORMS RGB_TO_YUV_COEFFICIENTS "uniform sampler2D tex;\n",
+    { glsl_func_rgb_to_yuv, NULL, },
+    "vec4 texel, uv_texel;\n"
+    "vec3 yuv;\n"
+    "texel = texture2D(tex, texcoord).%c%c%c%c;\n"
+    "uv_texel = texture2D(tex, texcoord * tex_scale0 * 2.0).%c%c%c%c;\n"
+    "yuv.x = rgb_to_yuv (texel.rgb, offset, coeff1, coeff2, coeff3).x;\n"
+    "yuv.yz = rgb_to_yuv (uv_texel.rgb, offset, coeff1, coeff2, coeff3).yz;\n"
+    "gl_FragData[0] = vec4(yuv.x, 0.0, 0.0, 1.0);\n"
+    "gl_FragData[1] = vec4(yuv.%c, yuv.%c, 0.0, 1.0);\n",
+    GST_GL_TEXTURE_TARGET_2D
+  };
 
 /* YUY2:r,g,a
    UYVY:a,b,r */
-static const gchar frag_YUY2_UYVY_to_RGB[] =
-    "#ifdef GL_ES\n"
-    "precision mediump float;\n"
-    "#endif\n"
-    "varying vec2 v_texcoord;\n"
-    "uniform sampler2D Ytex, UVtex;\n"
-    "uniform vec2 tex_scale0;\n"
-    "uniform vec2 tex_scale1;\n"
-    "uniform vec2 tex_scale2;\n"
-    "uniform float width;\n"
-    YUV_TO_RGB_COEFFICIENTS
-    "void main(void) {\n"
-    "  vec3 yuv;\n"
-    "  vec4 uv_texel;\n"
-    "  float r, g, b, a;\n"
-    "  float dx1 = -1.0 / width;\n"
-    "  float dx2 = 0.0;\n"
-    "  yuv.x = texture2D(Ytex, v_texcoord * tex_scale0).%c;\n"
-    "  float inorder = mod (v_texcoord.x * width, 2.0);\n"
-    "  if (inorder < 1.0) {\n"
-    "    dx2 = -dx1;\n"
-    "    dx1 = 0.0;\n"
-    "  }\n"
-    "  uv_texel.rg = texture2D(Ytex, v_texcoord * tex_scale0 + dx1).r%c;\n"
-    "  uv_texel.ba = texture2D(Ytex, v_texcoord * tex_scale0 + dx2).r%c;\n"
-    "  yuv.yz = uv_texel.%c%c;\n"
-    "  yuv += offset;\n"
-    "  r = dot(yuv, coeff1);\n"
-    "  g = dot(yuv, coeff2);\n"
-    "  b = dot(yuv, coeff3);\n"
-    "  a = 1.0;\n"
-    "  gl_FragColor = vec4(%c, %c, %c, %c);\n"
-    "}\n";
+static const struct shader_templ templ_YUY2_UYVY_to_RGB =
+  { NULL,
+    DEFAULT_UNIFORMS YUV_TO_RGB_COEFFICIENTS "uniform sampler2D Ytex;\n",
+    { glsl_func_yuv_to_rgb, NULL, },
+    "vec4 rgba, uv_texel;\n"
+    "vec3 yuv;\n"
+    /* FIXME: should get the sampling right... */
+    "float dx1 = -poffset_x;\n"
+    "float dx2 = 0.0;\n"
+    "yuv.x = texture2D(Ytex, texcoord * tex_scale0).%c;\n"
+    /* v_texcoord are normalized, texcoord may not be e.g. rectangle textures */
+    "float inorder = mod (v_texcoord.x * width, 2.0);\n"
+    "if (inorder < 1.0) {\n"
+    "  dx2 = -dx1;\n"
+    "  dx1 = 0.0;\n"
+    "}\n"
+    "uv_texel.rg = texture2D(Ytex, texcoord * tex_scale0 + vec2(dx1, 0.0)).r%c;\n"
+    "uv_texel.ba = texture2D(Ytex, texcoord * tex_scale0 + vec2(dx2, 0.0)).r%c;\n"
+    "yuv.yz = uv_texel.%c%c;\n"
+    "rgba.rgb = yuv_to_rgb (yuv, offset, coeff1, coeff2, coeff3);\n"
+    "rgba.a = 1.0;\n"
+    "gl_FragColor = vec4(rgba.%c,rgba.%c,rgba.%c,rgba.%c);\n",
+    GST_GL_TEXTURE_TARGET_2D
+  };
 
-static const gchar frag_RGB_to_YUY2_UYVY[] =
-    "#ifdef GL_ES\n"
-    "precision mediump float;\n"
-    "#endif\n"
-    "varying vec2 v_texcoord;\n"
-    "uniform sampler2D tex;\n"
-    "uniform float width;\n"
-    RGB_TO_YUV_COEFFICIENTS
-    "void main(void) {\n"
-    "  vec4 texel1, texel2;\n"
-    "  vec2 texel3;\n"
-    "  float fx, dx, fy, y, u, u1, u2, v, v1, v2;\n"
-    "  float inorder = mod (v_texcoord.x * width, 2.0);\n"
-    "  fx = v_texcoord.x;\n"
-    "  dx = 1.0 / width;\n"
-    "  if (v_texcoord.x >= (1.0 - 0.5 * dx) || (v_texcoord.x > 0.5 * dx && inorder < 1.0)) {\n"
-    "    dx = -dx;\n"
-    "  }\n"
-    "  fy = v_texcoord.y;\n"
-    "  texel1 = texture2D(tex, vec2(fx, fy)).%c%c%c%c;\n"
-    "  texel2 = texture2D(tex, vec2(fx + dx, fy)).%c%c%c%c;\n"
-    "  y = dot(texel1.rgb, coeff1);\n"
-    "  u1 = dot(texel1.rgb, coeff2);\n"
-    "  u2 = dot(texel2.rgb, coeff2);\n"
-    "  v1 = dot(texel1.rgb, coeff3);\n"
-    "  v2 = dot(texel2.rgb, coeff3);\n"
-    "  y += offset.x;\n"
-    "  u1 += offset.y;\n"
-    "  u2 += offset.y;\n"
-    "  v1 += offset.z;\n"
-    "  v2 += offset.z;\n"
-    "  u = (u1 + u2) / 2.0;\n"
-    "  v = (v1 + v2) / 2.0;\n"
-    "  if (inorder < 1.0) {\n"
-    "    texel3.r =%s;\n"
-    "    texel3.g = %s;\n"
-    "  } else {\n"
-    "    texel3.r =%s;\n"
-    "    texel3.g = %s;\n"
-    "  }\n"
-    "  gl_FragColor = vec4(texel3.r, texel3.g, 0.0, 0.0);\n"
-    "}\n";
+static const struct shader_templ templ_RGB_to_YUY2_UYVY =
+  { NULL,
+    DEFAULT_UNIFORMS RGB_TO_YUV_COEFFICIENTS "uniform sampler2D tex;\n",
+    { glsl_func_rgb_to_yuv, NULL, },
+    "vec4 texel1, texel2;\n"
+    "vec3 yuv, yuv1, yuv2;\n"
+    "float fx, dx, fy;\n"
+    /* v_texcoord are normalized, texcoord may not be e.g. rectangle textures */
+    "float inorder = mod (v_texcoord.x * width, 2.0);\n"
+    "fx = texcoord.x;\n"
+    "dx = poffset_x;\n"
+    "if (inorder > 1.0) {\n"
+    "  dx = -dx;\n"
+    "}\n"
+    "fy = texcoord.y;\n"
+    "texel1 = texture2D(tex, vec2(fx, fy)).%c%c%c%c;\n"
+    "texel2 = texture2D(tex, vec2(fx + dx, fy)).%c%c%c%c;\n"
+    "yuv1 = rgb_to_yuv (texel1.rgb, offset, coeff1, coeff2, coeff3);\n"
+    "yuv2 = rgb_to_yuv (texel2.rgb, offset, coeff1, coeff2, coeff3);\n"
+    "yuv.x = yuv1.x;\n"
+    "yuv.yz = (yuv1.yz + yuv2.yz) * 0.5;\n"
+    "if (inorder < 1.0) {\n"
+    "  gl_FragColor = vec4(yuv.%c, yuv.%c, 0.0, 0.0);\n"
+    "} else {\n"
+    "  gl_FragColor = vec4(yuv.%c, yuv.%c, 0.0, 0.0);\n"
+    "}\n",
+    GST_GL_TEXTURE_TARGET_2D
+  };
 
 static const gchar text_vertex_shader[] =
     "attribute vec4 a_position;   \n"
@@ -434,8 +371,8 @@
     "varying vec2 v_texcoord;     \n"
     "void main()                  \n"
     "{                            \n"
-    "   gl_Position = a_position; \n"
-    "   v_texcoord = a_texcoord;  \n"
+    "  gl_Position = a_position; \n"
+    "  v_texcoord = a_texcoord;  \n"
     "}                            \n";
 
 static const GLfloat vertices[] = {
@@ -453,6 +390,8 @@
 {
   gint in_n_textures;
   gint out_n_textures;
+  const struct shader_templ *templ;
+  gchar *frag_body;
   gchar *frag_prog;
   const gchar *shader_tex_names[GST_VIDEO_MAX_PLANES];
   gfloat *cms_offset;
@@ -468,6 +407,9 @@
 
   struct ConvertInfo convert_info;
 
+  GstGLTextureTarget from_texture_target;
+  GstGLTextureTarget to_texture_target;
+
   GstGLMemory *in_tex[GST_VIDEO_MAX_PLANES];
   GstGLMemory *out_tex[GST_VIDEO_MAX_PLANES];
 
@@ -476,6 +418,12 @@
   GLuint vbo_indices;
   GLuint attr_position;
   GLuint attr_texture;
+
+  GstCaps *in_caps;
+  GstCaps *out_caps;
+
+  GstBufferPool *pool;
+  gboolean pool_started;
 };
 
 GST_DEBUG_CATEGORY_STATIC (gst_gl_color_convert_debug);
@@ -592,11 +540,28 @@
   convert->priv->convert_info.chroma_sampling[0] = 1.0f;
   convert->priv->convert_info.chroma_sampling[1] = 1.0f;
 
+  if (convert->priv->convert_info.frag_prog) {
+    g_free (convert->priv->convert_info.frag_prog);
+    convert->priv->convert_info.frag_prog = NULL;
+  }
+  if (convert->priv->convert_info.frag_body) {
+    g_free (convert->priv->convert_info.frag_body);
+    convert->priv->convert_info.frag_body = NULL;
+  }
   if (convert->shader) {
     gst_object_unref (convert->shader);
     convert->shader = NULL;
   }
 
+  if (convert->priv->pool) {
+    convert->priv->pool_started = FALSE;
+
+    gst_object_unref (convert->priv->pool);
+    convert->priv->pool = NULL;
+  }
+  gst_caps_replace (&convert->priv->in_caps, NULL);
+  gst_caps_replace (&convert->priv->out_caps, NULL);
+
   if (convert->context) {
     gst_gl_context_thread_add (convert->context,
         (GstGLContextThreadFunc) _reset_gl, convert);
@@ -604,7 +569,8 @@
 }
 
 static gboolean
-_gst_gl_color_convert_can_passthrough (GstVideoInfo * in, GstVideoInfo * out)
+_gst_gl_color_convert_can_passthrough_info (GstVideoInfo * in,
+    GstVideoInfo * out)
 {
   gint i;
 
@@ -638,6 +604,8 @@
 {
   GstVideoInfo in_info, out_info;
   GstCapsFeatures *in_features, *out_features;
+  GstGLTextureTarget from_target, to_target;
+  gboolean passthrough;
 
   g_return_val_if_fail (convert != NULL, FALSE);
   g_return_val_if_fail (in_caps, FALSE);
@@ -671,18 +639,68 @@
     return FALSE;
   }
 
+  {
+    GstStructure *in_s = gst_caps_get_structure (in_caps, 0);
+    GstStructure *out_s = gst_caps_get_structure (out_caps, 0);
+
+    if (gst_structure_has_field_typed (in_s, "texture-target", G_TYPE_STRING))
+      from_target =
+          gst_gl_texture_target_from_string (gst_structure_get_string (in_s,
+              "texture-target"));
+    else
+      from_target = GST_GL_TEXTURE_TARGET_2D;
+
+    if (gst_structure_has_field_typed (out_s, "texture-target", G_TYPE_STRING))
+      to_target =
+          gst_gl_texture_target_from_string (gst_structure_get_string (out_s,
+              "texture-target"));
+    else
+      to_target = GST_GL_TEXTURE_TARGET_2D;
+
+    if (to_target == GST_GL_TEXTURE_TARGET_NONE
+        || from_target == GST_GL_TEXTURE_TARGET_NONE)
+      /* invalid caps */
+      return FALSE;
+  }
+
   if (gst_video_info_is_equal (&convert->in_info, &in_info) &&
-      gst_video_info_is_equal (&convert->out_info, &out_info))
+      gst_video_info_is_equal (&convert->out_info, &out_info) &&
+      convert->priv->from_texture_target == from_target &&
+      convert->priv->to_texture_target == to_target)
     return TRUE;
 
+  /* If input and output are identical, pass through directly */
+  passthrough =
+      _gst_gl_color_convert_can_passthrough_info (&in_info, &out_info) &&
+      from_target == to_target;
+
+  if (!passthrough && to_target != GST_GL_TEXTURE_TARGET_2D
+      && to_target != GST_GL_TEXTURE_TARGET_RECTANGLE)
+    return FALSE;
+
+  {
+    guint yuv_gray_flags, in_flags, out_flags;
+
+    in_flags = GST_VIDEO_FORMAT_INFO_FLAGS (in_info.finfo);
+    out_flags = GST_VIDEO_FORMAT_INFO_FLAGS (out_info.finfo);
+    yuv_gray_flags = GST_VIDEO_FORMAT_FLAG_YUV | GST_VIDEO_FORMAT_FLAG_GRAY;
+
+    /* GRAY/YUV -> GRAY/YUV is not supported for non-passthrough */
+    if (!passthrough && (in_flags & yuv_gray_flags) != 0
+        && (out_flags & yuv_gray_flags) != 0)
+      return FALSE;
+  }
+
   gst_gl_color_convert_reset (convert);
   convert->in_info = in_info;
   convert->out_info = out_info;
+  gst_caps_replace (&convert->priv->in_caps, in_caps);
+  gst_caps_replace (&convert->priv->out_caps, out_caps);
+  convert->priv->from_texture_target = from_target;
+  convert->priv->to_texture_target = to_target;
   convert->initted = FALSE;
 
-  /* If input and output are identical, pass through directly */
-  convert->passthrough =
-      _gst_gl_color_convert_can_passthrough (&in_info, &out_info);
+  convert->passthrough = passthrough;
 #ifndef GST_DISABLE_GST_DEBUG
   if (G_UNLIKELY (convert->passthrough))
     GST_DEBUG_OBJECT (convert,
@@ -717,35 +735,184 @@
   return ret;
 }
 
+gboolean
+gst_gl_color_convert_decide_allocation (GstGLColorConvert * convert,
+    GstQuery * query)
+{
+  GstBufferPool *pool = NULL;
+  GstStructure *config;
+  GstCaps *caps;
+  guint min, max, size, n, i;
+  gboolean update_pool;
+  GstGLVideoAllocationParams *params;
+  GstVideoInfo vinfo;
+
+  gst_query_parse_allocation (query, &caps, NULL);
+  if (!caps)
+    return FALSE;
+
+  gst_video_info_from_caps (&vinfo, caps);
+
+  n = gst_query_get_n_allocation_pools (query);
+  if (n > 0) {
+    update_pool = TRUE;
+    for (i = 0; i < n; i++) {
+      gst_query_parse_nth_allocation_pool (query, i, &pool, &size, &min, &max);
+
+      if (!pool || !GST_IS_GL_BUFFER_POOL (pool)) {
+        if (pool)
+          gst_object_unref (pool);
+        pool = NULL;
+      }
+    }
+  }
+
+  if (!pool) {
+    GstVideoInfo vinfo;
+
+    gst_video_info_init (&vinfo);
+    size = vinfo.size;
+    min = max = 0;
+    update_pool = FALSE;
+  }
+
+  if (!pool)
+    pool = gst_gl_buffer_pool_new (convert->context);
+
+  config = gst_buffer_pool_get_config (pool);
+
+  gst_buffer_pool_config_set_params (config, caps, size, min, max);
+  gst_buffer_pool_config_add_option (config, GST_BUFFER_POOL_OPTION_VIDEO_META);
+  if (gst_query_find_allocation_meta (query, GST_GL_SYNC_META_API_TYPE, NULL))
+    gst_buffer_pool_config_add_option (config,
+        GST_BUFFER_POOL_OPTION_GL_SYNC_META);
+
+  params = gst_gl_video_allocation_params_new (convert->context, NULL, &vinfo,
+      0, NULL, convert->priv->to_texture_target);
+  gst_buffer_pool_config_set_gl_allocation_params (config,
+      (GstGLAllocationParams *) params);
+  gst_gl_allocation_params_free ((GstGLAllocationParams *) params);
+
+  if (!gst_buffer_pool_set_config (pool, config))
+    GST_WARNING_OBJECT (convert, "Failed to set buffer pool config");
+
+  if (update_pool)
+    gst_query_set_nth_allocation_pool (query, 0, pool, size, min, max);
+  else
+    gst_query_add_allocation_pool (query, pool, size, min, max);
+
+  if (convert->priv->pool) {
+    gst_object_unref (convert->priv->pool);
+    convert->priv->pool_started = FALSE;
+  }
+  convert->priv->pool = pool;
+
+  return TRUE;
+}
+
+static void
+_init_value_string_list (GValue * list, ...)
+{
+  GValue item = G_VALUE_INIT;
+  gchar *str;
+  va_list args;
+
+  g_value_init (list, GST_TYPE_LIST);
+
+  va_start (args, list);
+  while ((str = va_arg (args, gchar *))) {
+    g_value_init (&item, G_TYPE_STRING);
+    g_value_set_string (&item, str);
+
+    gst_value_list_append_value (list, &item);
+    g_value_unset (&item);
+  }
+  va_end (args);
+}
+
 /* copies the given caps */
 static GstCaps *
-gst_gl_color_convert_caps_remove_format_info (GstCaps * caps)
+gst_gl_color_convert_caps_transform_format_info (GstCaps * caps)
 {
   GstStructure *st;
   GstCapsFeatures *f;
   gint i, n;
   GstCaps *res;
+  GValue rgb_formats = G_VALUE_INIT;
+
+  _init_value_string_list (&rgb_formats, "RGBA", "ARGB", "BGRA", "ABGR", "RGBx",
+      "xRGB", "BGRx", "xBGR", "RGB", "BGR", NULL);
 
   res = gst_caps_new_empty ();
 
   n = gst_caps_get_size (caps);
   for (i = 0; i < n; i++) {
+    const GValue *format;
+
     st = gst_caps_get_structure (caps, i);
     f = gst_caps_get_features (caps, i);
 
-    /* If this is already expressed by the existing caps
-     * skip this structure */
-    if (i > 0 && gst_caps_is_subset_structure_full (res, st, f))
-      continue;
-
+    format = gst_structure_get_value (st, "format");
     st = gst_structure_copy (st);
-    gst_structure_remove_fields (st, "format", "colorimetry", "chroma-site",
-        NULL);
+    if (GST_VALUE_HOLDS_LIST (format)) {
+      gboolean have_rgb_formats = FALSE;
+      GValue passthrough_formats = G_VALUE_INIT;
+      gint j, len;
 
-    gst_caps_append_structure_full (res, st,
-        gst_caps_features_new (GST_CAPS_FEATURE_MEMORY_GL_MEMORY, NULL));
+      g_value_init (&passthrough_formats, GST_TYPE_LIST);
+      len = gst_value_list_get_size (format);
+      for (j = 0; j < len; j++) {
+        const GValue *val;
+
+        val = gst_value_list_get_value (format, j);
+        if (G_VALUE_HOLDS_STRING (val)) {
+          const gchar *format_str = g_value_get_string (val);
+          GstVideoFormat v_format = gst_video_format_from_string (format_str);
+          const GstVideoFormatInfo *t_info =
+              gst_video_format_get_info (v_format);
+          if (GST_VIDEO_FORMAT_INFO_FLAGS (t_info) & (GST_VIDEO_FORMAT_FLAG_YUV
+                  | GST_VIDEO_FORMAT_FLAG_GRAY)) {
+            gst_value_list_append_value (&passthrough_formats, val);
+          } else if (GST_VIDEO_FORMAT_INFO_FLAGS (t_info) &
+              GST_VIDEO_FORMAT_FLAG_RGB) {
+            have_rgb_formats = TRUE;
+            break;
+          }
+        }
+      }
+      if (have_rgb_formats) {
+        gst_structure_remove_fields (st, "format", NULL);
+      } else {
+        /* add passthrough structure, then the rgb conversion structure */
+        gst_structure_set_value (st, "format", &passthrough_formats);
+        gst_caps_append_structure_full (res, gst_structure_copy (st),
+            gst_caps_features_copy (f));
+        gst_structure_set_value (st, "format", &rgb_formats);
+      }
+      g_value_unset (&passthrough_formats);
+    } else if (G_VALUE_HOLDS_STRING (format)) {
+      const gchar *format_str = g_value_get_string (format);
+      GstVideoFormat v_format = gst_video_format_from_string (format_str);
+      const GstVideoFormatInfo *t_info = gst_video_format_get_info (v_format);
+      if (GST_VIDEO_FORMAT_INFO_FLAGS (t_info) & (GST_VIDEO_FORMAT_FLAG_YUV |
+              GST_VIDEO_FORMAT_FLAG_GRAY)) {
+        /* add passthrough structure, then the rgb conversion structure */
+        gst_structure_set_value (st, "format", format);
+        gst_caps_append_structure_full (res, gst_structure_copy (st),
+            gst_caps_features_copy (f));
+        gst_structure_set_value (st, "format", &rgb_formats);
+      } else {                  /* RGB */
+        gst_structure_remove_fields (st, "format", NULL);
+      }
+    }
+    gst_structure_remove_fields (st, "colorimetry", "chroma-site",
+        "texture-target", NULL);
+
+    gst_caps_append_structure_full (res, st, gst_caps_features_copy (f));
   }
 
+  g_value_unset (&rgb_formats);
+
   return res;
 }
 
@@ -753,26 +920,250 @@
 gst_gl_color_convert_transform_caps (GstGLContext * convert,
     GstPadDirection direction, GstCaps * caps, GstCaps * filter)
 {
-  GstCaps *templ, *result;
-
-  templ =
-      gst_caps_from_string (GST_VIDEO_CAPS_MAKE_WITH_FEATURES
-      (GST_CAPS_FEATURE_MEMORY_GL_MEMORY, GST_GL_COLOR_CONVERT_FORMATS));
-
-  caps = gst_gl_color_convert_caps_remove_format_info (caps);
-
-  result = gst_caps_intersect (caps, templ);
-  gst_caps_unref (caps);
-  gst_caps_unref (templ);
-
-  result = gst_gl_overlay_compositor_add_caps (result);
+  caps = gst_gl_color_convert_caps_transform_format_info (caps);
 
   if (filter) {
     GstCaps *tmp;
 
-    tmp = gst_caps_intersect_full (filter, result, GST_CAPS_INTERSECT_FIRST);
+    tmp = gst_caps_intersect_full (filter, caps, GST_CAPS_INTERSECT_FIRST);
+    gst_caps_unref (caps);
+    caps = tmp;
+  }
+
+  return caps;
+}
+
+/* fixation from videoconvert */
+#define SCORE_FORMAT_CHANGE             1
+#define SCORE_DEPTH_CHANGE              1
+#define SCORE_ALPHA_CHANGE              1
+#define SCORE_CHROMA_W_CHANGE           1
+#define SCORE_CHROMA_H_CHANGE           1
+#define SCORE_PALETTE_CHANGE            1
+
+#define SCORE_COLORSPACE_LOSS           2       /* RGB <-> YUV */
+#define SCORE_DEPTH_LOSS                4       /* change bit depth */
+#define SCORE_ALPHA_LOSS                8       /* lose the alpha channel */
+#define SCORE_CHROMA_W_LOSS             16      /* vertical subsample */
+#define SCORE_CHROMA_H_LOSS             32      /* horizontal subsample */
+#define SCORE_PALETTE_LOSS              64      /* convert to palette format */
+#define SCORE_COLOR_LOSS                128     /* convert to GRAY */
+
+#define COLORSPACE_MASK (GST_VIDEO_FORMAT_FLAG_YUV | \
+                         GST_VIDEO_FORMAT_FLAG_RGB | GST_VIDEO_FORMAT_FLAG_GRAY)
+#define ALPHA_MASK      (GST_VIDEO_FORMAT_FLAG_ALPHA)
+#define PALETTE_MASK    (GST_VIDEO_FORMAT_FLAG_PALETTE)
+
+static GstGLTextureTarget
+_texture_target_demask (guint target_mask)
+{
+  if (target_mask & (1 << GST_GL_TEXTURE_TARGET_2D)) {
+    return GST_GL_TEXTURE_TARGET_2D;
+  }
+  if (target_mask & (1 << GST_GL_TEXTURE_TARGET_RECTANGLE)) {
+    return GST_GL_TEXTURE_TARGET_RECTANGLE;
+  }
+  if (target_mask & (1 << GST_GL_TEXTURE_TARGET_EXTERNAL_OES)) {
+    return GST_GL_TEXTURE_TARGET_EXTERNAL_OES;
+  }
+
+  return 0;
+}
+
+/* calculate how much loss a conversion would be */
+static void
+score_format_target (const GstVideoFormatInfo * in_info, guint targets_mask,
+    GstVideoFormat v_format, guint other_targets_mask, gint * min_loss,
+    const GstVideoFormatInfo ** out_info, GstGLTextureTarget * result)
+{
+  const GstVideoFormatInfo *t_info;
+  GstVideoFormatFlags in_flags, t_flags;
+  gint loss;
+
+  t_info = gst_video_format_get_info (v_format);
+  if (!t_info)
+    return;
+
+  /* accept input format immediately without loss */
+  if (in_info == t_info && (targets_mask & other_targets_mask) != 0) {
+    *min_loss = 0;
+    *out_info = t_info;
+    *result = _texture_target_demask (targets_mask & other_targets_mask);
+    return;
+  }
+
+  /* can only passthrough external-oes textures */
+  other_targets_mask &= ~(1 << GST_GL_TEXTURE_TARGET_EXTERNAL_OES);
+  if (other_targets_mask == 0)
+    return;
+  /* try to keep the same target */
+  if (targets_mask & other_targets_mask)
+    other_targets_mask = targets_mask & other_targets_mask;
+
+  loss = SCORE_FORMAT_CHANGE;
+
+  in_flags = GST_VIDEO_FORMAT_INFO_FLAGS (in_info);
+  in_flags &= ~GST_VIDEO_FORMAT_FLAG_LE;
+  in_flags &= ~GST_VIDEO_FORMAT_FLAG_COMPLEX;
+  in_flags &= ~GST_VIDEO_FORMAT_FLAG_UNPACK;
+
+  t_flags = GST_VIDEO_FORMAT_INFO_FLAGS (t_info);
+  t_flags &= ~GST_VIDEO_FORMAT_FLAG_LE;
+  t_flags &= ~GST_VIDEO_FORMAT_FLAG_COMPLEX;
+  t_flags &= ~GST_VIDEO_FORMAT_FLAG_UNPACK;
+
+  /* GRAY/YUV -> GRAY/YUV is not supported */
+  if ((in_flags & (GST_VIDEO_FORMAT_FLAG_YUV | GST_VIDEO_FORMAT_FLAG_GRAY)) != 0
+      && (t_flags & (GST_VIDEO_FORMAT_FLAG_YUV | GST_VIDEO_FORMAT_FLAG_GRAY)) !=
+      0)
+    return;
+
+  if ((t_flags & PALETTE_MASK) != (in_flags & PALETTE_MASK)) {
+    loss += SCORE_PALETTE_CHANGE;
+    if (t_flags & PALETTE_MASK)
+      loss += SCORE_PALETTE_LOSS;
+  }
+
+  if ((t_flags & COLORSPACE_MASK) != (in_flags & COLORSPACE_MASK)) {
+    loss += SCORE_COLORSPACE_LOSS;
+    if (t_flags & GST_VIDEO_FORMAT_FLAG_GRAY)
+      loss += SCORE_COLOR_LOSS;
+  }
+
+  if ((t_flags & ALPHA_MASK) != (in_flags & ALPHA_MASK)) {
+    loss += SCORE_ALPHA_CHANGE;
+    if (in_flags & ALPHA_MASK)
+      loss += SCORE_ALPHA_LOSS;
+  }
+
+  if ((in_info->h_sub[1]) != (t_info->h_sub[1])) {
+    loss += SCORE_CHROMA_H_CHANGE;
+    if ((in_info->h_sub[1]) < (t_info->h_sub[1]))
+      loss += SCORE_CHROMA_H_LOSS;
+  }
+  if ((in_info->w_sub[1]) != (t_info->w_sub[1])) {
+    loss += SCORE_CHROMA_W_CHANGE;
+    if ((in_info->w_sub[1]) < (t_info->w_sub[1]))
+      loss += SCORE_CHROMA_W_LOSS;
+  }
+
+  if ((in_info->bits) != (t_info->bits)) {
+    loss += SCORE_DEPTH_CHANGE;
+    if ((in_info->bits) > (t_info->bits))
+      loss += SCORE_DEPTH_LOSS;
+  }
+
+  if (loss < *min_loss) {
+    GstGLTextureTarget target = _texture_target_demask (other_targets_mask);
+
+    if (target != 0) {
+      *out_info = t_info;
+      *min_loss = loss;
+      *result = target;
+    }
+  }
+}
+
+static void
+gst_gl_color_convert_fixate_format_target (GstCaps * caps, GstCaps * result)
+{
+  GstStructure *ins, *outs;
+  const gchar *in_format;
+  const GstVideoFormatInfo *in_info, *out_info = NULL;
+  const GValue *targets;
+  guint targets_mask = 0;
+  GstGLTextureTarget target;
+  gint min_loss = G_MAXINT;
+  guint i, capslen;
+
+  ins = gst_caps_get_structure (caps, 0);
+  in_format = gst_structure_get_string (ins, "format");
+  if (!in_format)
+    return;
+  targets = gst_structure_get_value (ins, "texture-target");
+  targets_mask = gst_gl_value_get_texture_target_mask (targets);
+  if (!targets_mask)
+    return;
+
+  in_info =
+      gst_video_format_get_info (gst_video_format_from_string (in_format));
+  if (!in_info)
+    return;
+
+  outs = gst_caps_get_structure (result, 0);
+
+  capslen = gst_caps_get_size (result);
+  for (i = 0; i < capslen; i++) {
+    GstStructure *tests;
+    const GValue *format;
+    const GValue *other_targets;
+    guint other_targets_mask = 0;
+
+    tests = gst_caps_get_structure (result, i);
+
+    format = gst_structure_get_value (tests, "format");
+    other_targets = gst_structure_get_value (tests, "texture-target");
+    /* should not happen */
+    if (format == NULL || other_targets == NULL)
+      continue;
+
+    other_targets_mask = gst_gl_value_get_texture_target_mask (other_targets);
+
+    if (GST_VALUE_HOLDS_LIST (format)) {
+      gint j, len;
+
+      len = gst_value_list_get_size (format);
+      for (j = 0; j < len; j++) {
+        const GValue *val;
+
+        val = gst_value_list_get_value (format, j);
+        if (G_VALUE_HOLDS_STRING (val)) {
+          const gchar *format_str = g_value_get_string (val);
+          GstVideoFormat v_format = gst_video_format_from_string (format_str);
+          score_format_target (in_info, targets_mask, v_format,
+              other_targets_mask, &min_loss, &out_info, &target);
+          if (min_loss == 0)
+            break;
+        }
+      }
+    } else if (G_VALUE_HOLDS_STRING (format)) {
+      const gchar *format_str = g_value_get_string (format);
+      GstVideoFormat v_format = gst_video_format_from_string (format_str);
+      score_format_target (in_info, targets_mask, v_format, other_targets_mask,
+          &min_loss, &out_info, &target);
+    }
+  }
+  if (out_info)
+    gst_structure_set (outs, "format", G_TYPE_STRING,
+        GST_VIDEO_FORMAT_INFO_NAME (out_info), NULL);
+  if (target)
+    gst_structure_set (outs, "texture-target", G_TYPE_STRING,
+        gst_gl_texture_target_to_string (target), NULL);
+}
+
+GstCaps *
+gst_gl_color_convert_fixate_caps (GstGLContext * convert,
+    GstPadDirection direction, GstCaps * caps, GstCaps * other)
+{
+  GstCaps *result;
+
+  result = gst_caps_intersect (other, caps);
+  if (gst_caps_is_empty (result)) {
     gst_caps_unref (result);
-    result = tmp;
+    result = other;
+  } else {
+    gst_caps_unref (other);
+  }
+
+  result = gst_caps_make_writable (result);
+  gst_gl_color_convert_fixate_format_target (caps, result);
+
+  result = gst_caps_fixate (result);
+
+  if (direction == GST_PAD_SINK) {
+    if (gst_caps_is_subset (caps, result)) {
+      gst_caps_replace (&result, caps);
+    }
   }
 
   return result;
@@ -961,7 +1352,8 @@
     }
     alpha = g_strdup_printf ("t.%c = 1.0;", input_alpha_channel);
   }
-  info->frag_prog = g_strdup_printf (frag_REORDER, alpha ? alpha : "",
+  info->templ = &templ_REORDER;
+  info->frag_body = g_strdup_printf (info->templ->body, alpha ? alpha : "",
       pixel_order[0], pixel_order[1], pixel_order[2], pixel_order[3]);
   info->shader_tex_names[0] = "tex";
 
@@ -992,7 +1384,7 @@
   if (gst_is_gl_memory (memory) && (USING_OPENGL (convert->context)
           || USING_OPENGL3 (convert->context))) {
     in_tex_rectangular =
-        ((GstGLMemory *) memory)->tex_target == GL_TEXTURE_RECTANGLE;
+        convert->priv->from_texture_target == GST_GL_TEXTURE_TARGET_RECTANGLE;
   }
 #endif
 
@@ -1004,15 +1396,19 @@
      * the Apple YCbCr422 extension. It could also be a normal UYVY texture
      * with RB or Lum/Alpha
      */
-    info->frag_prog =
-        g_strdup_printf (frag_APPLE_YUV_TO_RGB, pixel_order[0], pixel_order[1],
+    /* The mangling will change this to the correct texture2DRect, sampler2DRect
+     * for us */
+    info->templ = &templ_REORDER;
+    info->frag_body =
+        g_strdup_printf (info->templ->body, pixel_order[0], pixel_order[1],
         pixel_order[2], pixel_order[3]);
     info->in_n_textures = 1;
     info->shader_tex_names[0] = "tex";
   } else {
     switch (GST_VIDEO_INFO_FORMAT (&convert->in_info)) {
       case GST_VIDEO_FORMAT_AYUV:
-        info->frag_prog = g_strdup_printf (frag_AYUV_to_RGB, pixel_order[0],
+        info->templ = &templ_AYUV_to_RGB;
+        info->frag_body = g_strdup_printf (info->templ->body, pixel_order[0],
             pixel_order[1], pixel_order[2], pixel_order[3]);
         info->in_n_textures = 1;
         info->shader_tex_names[0] = "tex";
@@ -1021,8 +1417,9 @@
       case GST_VIDEO_FORMAT_Y444:
       case GST_VIDEO_FORMAT_Y42B:
       case GST_VIDEO_FORMAT_Y41B:
-        info->frag_prog =
-            g_strdup_printf (frag_PLANAR_YUV_to_RGB, pixel_order[0],
+        info->templ = &templ_PLANAR_YUV_to_RGB;
+        info->frag_body =
+            g_strdup_printf (info->templ->body, pixel_order[0],
             pixel_order[1], pixel_order[2], pixel_order[3]);
         info->in_n_textures = 3;
         info->shader_tex_names[0] = "Ytex";
@@ -1030,8 +1427,9 @@
         info->shader_tex_names[2] = "Vtex";
         break;
       case GST_VIDEO_FORMAT_YV12:
-        info->frag_prog =
-            g_strdup_printf (frag_PLANAR_YUV_to_RGB, pixel_order[0],
+        info->templ = &templ_PLANAR_YUV_to_RGB;
+        info->frag_body =
+            g_strdup_printf (info->templ->body, pixel_order[0],
             pixel_order[1], pixel_order[2], pixel_order[3]);
         info->in_n_textures = 3;
         info->shader_tex_names[0] = "Ytex";
@@ -1041,17 +1439,30 @@
       case GST_VIDEO_FORMAT_YUY2:
       {
         char uv_val = texture_rg ? 'g' : 'a';
-        info->frag_prog = g_strdup_printf (frag_YUY2_UYVY_to_RGB, 'r', uv_val,
+        info->templ = &templ_YUY2_UYVY_to_RGB;
+        info->frag_body = g_strdup_printf (info->templ->body, 'r', uv_val,
             uv_val, 'g', 'a', pixel_order[0], pixel_order[1], pixel_order[2],
             pixel_order[3]);
         info->in_n_textures = 1;
         info->shader_tex_names[0] = "Ytex";
         break;
       }
+      case GST_VIDEO_FORMAT_UYVY:
+      {
+        char y_val = texture_rg ? 'g' : 'a';
+        info->templ = &templ_YUY2_UYVY_to_RGB;
+        info->frag_body = g_strdup_printf (info->templ->body, y_val, 'g',
+            'g', 'r', 'b', pixel_order[0], pixel_order[1], pixel_order[2],
+            pixel_order[3]);
+        info->in_n_textures = 1;
+        info->shader_tex_names[0] = "Ytex";
+        break;
+      }
       case GST_VIDEO_FORMAT_NV12:
       {
         char val2 = texture_rg ? 'g' : 'a';
-        info->frag_prog = g_strdup_printf (frag_NV12_NV21_to_RGB, 'r', val2,
+        info->templ = &templ_NV12_NV21_to_RGB;
+        info->frag_body = g_strdup_printf (info->templ->body, 'r', val2,
             pixel_order[0], pixel_order[1], pixel_order[2], pixel_order[3]);
         info->in_n_textures = 2;
         info->shader_tex_names[0] = "Ytex";
@@ -1061,23 +1472,14 @@
       case GST_VIDEO_FORMAT_NV21:
       {
         char val2 = texture_rg ? 'g' : 'a';
-        info->frag_prog = g_strdup_printf (frag_NV12_NV21_to_RGB, val2, 'r',
+        info->templ = &templ_NV12_NV21_to_RGB;
+        info->frag_body = g_strdup_printf (info->templ->body, val2, 'r',
             pixel_order[0], pixel_order[1], pixel_order[2], pixel_order[3]);
         info->in_n_textures = 2;
         info->shader_tex_names[0] = "Ytex";
         info->shader_tex_names[1] = "UVtex";
         break;
       }
-      case GST_VIDEO_FORMAT_UYVY:
-      {
-        char y_val = texture_rg ? 'g' : 'a';
-        info->frag_prog = g_strdup_printf (frag_YUY2_UYVY_to_RGB, y_val, 'g',
-            'g', 'r', 'b', pixel_order[0], pixel_order[1], pixel_order[2],
-            pixel_order[3]);
-        info->in_n_textures = 1;
-        info->shader_tex_names[0] = "Ytex";
-        break;
-      }
       default:
         break;
     }
@@ -1118,7 +1520,8 @@
   switch (out_format) {
     case GST_VIDEO_FORMAT_AYUV:
       alpha = _is_RGBx (in_format) ? "1.0" : "texel.a";
-      info->frag_prog = g_strdup_printf (frag_RGB_to_AYUV, pixel_order[0],
+      info->templ = &templ_RGB_to_AYUV;
+      info->frag_body = g_strdup_printf (info->templ->body, pixel_order[0],
           pixel_order[1], pixel_order[2], pixel_order[3], alpha);
       info->out_n_textures = 1;
       break;
@@ -1127,7 +1530,8 @@
     case GST_VIDEO_FORMAT_Y444:
     case GST_VIDEO_FORMAT_Y42B:
     case GST_VIDEO_FORMAT_Y41B:
-      info->frag_prog = g_strdup_printf (frag_RGB_to_PLANAR_YUV,
+      info->templ = &templ_RGB_to_PLANAR_YUV;
+      info->frag_body = g_strdup_printf (info->templ->body,
           pixel_order[0], pixel_order[1], pixel_order[2], pixel_order[3],
           pixel_order[0], pixel_order[1], pixel_order[2], pixel_order[3]);
       info->out_n_textures = 3;
@@ -1144,31 +1548,35 @@
       }
       break;
     case GST_VIDEO_FORMAT_YUY2:
-      info->frag_prog = g_strdup_printf (frag_RGB_to_YUY2_UYVY,
+      info->templ = &templ_RGB_to_YUY2_UYVY;
+      info->frag_body = g_strdup_printf (info->templ->body,
           pixel_order[0], pixel_order[1], pixel_order[2], pixel_order[3],
           pixel_order[0], pixel_order[1], pixel_order[2], pixel_order[3],
-          "y", "u", "y", "v");
+          'x', 'y', 'x', 'z');
       info->out_n_textures = 1;
       break;
     case GST_VIDEO_FORMAT_UYVY:
-      info->frag_prog = g_strdup_printf (frag_RGB_to_YUY2_UYVY,
+      info->templ = &templ_RGB_to_YUY2_UYVY,
+          info->frag_body = g_strdup_printf (info->templ->body,
           pixel_order[0], pixel_order[1], pixel_order[2], pixel_order[3],
           pixel_order[0], pixel_order[1], pixel_order[2], pixel_order[3],
-          "u", "y", "v", "y");
+          'y', 'x', 'z', 'x');
       info->out_n_textures = 1;
       break;
     case GST_VIDEO_FORMAT_NV12:
-      info->frag_prog = g_strdup_printf (frag_RGB_to_NV12_NV21,
+      info->templ = &templ_RGB_to_NV12_NV21,
+          info->frag_body = g_strdup_printf (info->templ->body,
           pixel_order[0], pixel_order[1], pixel_order[2], pixel_order[3],
           pixel_order[0], pixel_order[1], pixel_order[2], pixel_order[3],
-          'u', 'v');
+          'y', 'z');
       info->out_n_textures = 2;
       break;
     case GST_VIDEO_FORMAT_NV21:
-      info->frag_prog = g_strdup_printf (frag_RGB_to_NV12_NV21,
+      info->templ = &templ_RGB_to_NV12_NV21,
+          info->frag_body = g_strdup_printf (info->templ->body,
           pixel_order[0], pixel_order[1], pixel_order[2], pixel_order[3],
           pixel_order[0], pixel_order[1], pixel_order[2], pixel_order[3],
-          'v', 'u');
+          'z', 'y');
       info->out_n_textures = 2;
       break;
     default:
@@ -1210,7 +1618,8 @@
 
   switch (GST_VIDEO_INFO_FORMAT (&convert->out_info)) {
     case GST_VIDEO_FORMAT_GRAY8:
-      info->frag_prog = g_strdup_printf (frag_REORDER, alpha ? alpha : "",
+      info->templ = &templ_REORDER;
+      info->frag_body = g_strdup_printf (info->templ->body, alpha ? alpha : "",
           pixel_order[0], pixel_order[0], pixel_order[0], pixel_order[3]);
       break;
     default:
@@ -1242,20 +1651,23 @@
 
   switch (GST_VIDEO_INFO_FORMAT (&convert->in_info)) {
     case GST_VIDEO_FORMAT_GRAY8:
-      info->frag_prog = g_strdup_printf (frag_REORDER, "", pixel_order[0],
+      info->templ = &templ_REORDER;
+      info->frag_body = g_strdup_printf (info->templ->body, "", pixel_order[0],
           pixel_order[0], pixel_order[0], pixel_order[3]);
       break;
     case GST_VIDEO_FORMAT_GRAY16_LE:
     {
       char val2 = texture_rg ? 'g' : 'a';
-      info->frag_prog = g_strdup_printf (frag_COMPOSE, val2, 'r',
+      info->templ = &templ_COMPOSE;
+      info->frag_body = g_strdup_printf (info->templ->body, val2, 'r',
           pixel_order[0], pixel_order[1], pixel_order[2], pixel_order[3]);
       break;
     }
     case GST_VIDEO_FORMAT_GRAY16_BE:
     {
       char val2 = texture_rg ? 'g' : 'a';
-      info->frag_prog = g_strdup_printf (frag_COMPOSE, 'r', val2,
+      info->templ = &templ_COMPOSE;
+      info->frag_body = g_strdup_printf (info->templ->body, 'r', val2,
           pixel_order[0], pixel_order[1], pixel_order[2], pixel_order[3]);
       break;
     }
@@ -1298,12 +1710,309 @@
   gl->DisableVertexAttribArray (convert->priv->attr_texture);
 }
 
+static gchar *
+_mangle_texture_access (const gchar * str, GstGLTextureTarget from,
+    GstGLTextureTarget to, GstGLAPI gl_api)
+{
+  const gchar *from_str = NULL, *to_str = NULL;
+  gchar *ret, *tmp;
+  gchar *regex_find;
+  GRegex *regex;
+
+  if (from == GST_GL_TEXTURE_TARGET_2D)
+    from_str = "texture2D";
+  if (from == GST_GL_TEXTURE_TARGET_RECTANGLE)
+    from_str = "texture2DRect";
+  if (from == GST_GL_TEXTURE_TARGET_EXTERNAL_OES)
+    from_str = "texture2D";
+
+  if (gl_api & GST_GL_API_OPENGL3) {
+    to_str = "texture";
+  } else {
+    if (to == GST_GL_TEXTURE_TARGET_2D)
+      to_str = "texture2D";
+    if (to == GST_GL_TEXTURE_TARGET_RECTANGLE)
+      to_str = "texture2DRect";
+    if (to == GST_GL_TEXTURE_TARGET_EXTERNAL_OES)
+      to_str = "texture2D";
+  }
+
+  /* followed by any amount of whitespace then a bracket */
+  regex_find = g_strdup_printf ("%s(?=\\s*\\()", from_str);
+  regex = g_regex_new (regex_find, 0, 0, NULL);
+  tmp = g_regex_replace_literal (regex, str, -1, 0, to_str, 0, NULL);
+  g_free (regex_find);
+  g_regex_unref (regex);
+
+  if (tmp) {
+    ret = tmp;
+  } else {
+    GST_FIXME ("Couldn't mangle texture access successfully from %s to %s",
+        from_str, to_str);
+    ret = g_strdup (str);
+  }
+
+  return ret;
+}
+
+static gchar *
+_mangle_sampler_type (const gchar * str, GstGLTextureTarget from,
+    GstGLTextureTarget to)
+{
+  const gchar *from_str = NULL, *to_str = NULL;
+  gchar *ret, *tmp;
+  gchar *regex_find;
+  GRegex *regex;
+
+  if (from == GST_GL_TEXTURE_TARGET_2D)
+    from_str = "sampler2D";
+  if (from == GST_GL_TEXTURE_TARGET_RECTANGLE)
+    from_str = "sampler2DRect";
+  if (from == GST_GL_TEXTURE_TARGET_EXTERNAL_OES)
+    from_str = "samplerExternalOES";
+
+  if (to == GST_GL_TEXTURE_TARGET_2D)
+    to_str = "sampler2D";
+  if (to == GST_GL_TEXTURE_TARGET_RECTANGLE)
+    to_str = "sampler2DRect";
+  if (to == GST_GL_TEXTURE_TARGET_EXTERNAL_OES)
+    to_str = "samplerExternalOES";
+
+  /* followed by some whitespace  */
+  regex_find = g_strdup_printf ("%s(?=\\s)", from_str);
+  regex = g_regex_new (regex_find, 0, 0, NULL);
+  tmp = g_regex_replace_literal (regex, str, -1, 0, to_str, 0, NULL);
+  g_free (regex_find);
+  g_regex_unref (regex);
+
+  if (tmp) {
+    ret = tmp;
+  } else {
+    GST_FIXME ("Couldn't mangle sampler type successfully from %s to %s",
+        from_str, to_str);
+    ret = g_strdup (str);
+  }
+
+  return ret;
+}
+
+static gchar *
+_mangle_varying_attribute (const gchar * str, guint shader_type,
+    GstGLAPI gl_api)
+{
+  if (gl_api & GST_GL_API_OPENGL3) {
+    if (shader_type == GL_VERTEX_SHADER) {
+      gchar *tmp, *tmp2;
+      GRegex *regex;
+
+      /* followed by some whitespace  */
+      regex = g_regex_new ("varying(?=\\s)", 0, 0, NULL);
+      tmp = g_regex_replace_literal (regex, str, -1, 0, "out", 0, NULL);
+      g_regex_unref (regex);
+
+      /* followed by some whitespace  */
+      regex = g_regex_new ("attribute(?=\\s)", 0, 0, NULL);
+      tmp2 = g_regex_replace_literal (regex, tmp, -1, 0, "in", 0, NULL);
+      g_regex_unref (regex);
+
+      g_free (tmp);
+      return tmp2;
+    } else if (shader_type == GL_FRAGMENT_SHADER) {
+      gchar *tmp;
+      GRegex *regex;
+
+      /* followed by some whitespace  */
+      regex = g_regex_new ("varying(?=\\s)", 0, 0, NULL);
+      tmp = g_regex_replace_literal (regex, str, -1, 0, "in", 0, NULL);
+      g_regex_unref (regex);
+
+      return tmp;
+    }
+  }
+  return g_strdup (str);
+}
+
+static gchar *
+_mangle_frag_color (const gchar * str)
+{
+  GRegex *regex;
+  gchar *ret;
+
+  regex = g_regex_new ("gl_FragColor", 0, 0, NULL);
+  ret = g_regex_replace_literal (regex, str, -1, 0, "fragColor", 0, NULL);
+  g_regex_unref (regex);
+
+  return ret;
+}
+
+static void
+_mangle_version_profile_from_gl_api (GstGLAPI gl_api, GstGLSLVersion * version,
+    GstGLSLProfile * profile)
+{
+  if (gl_api & GST_GL_API_OPENGL3) {
+    *version = GST_GLSL_VERSION_150;
+    *profile = GST_GLSL_PROFILE_NONE;
+  } else if (gl_api & GST_GL_API_GLES2) {
+    *version = GST_GLSL_VERSION_100;
+    *profile = GST_GLSL_PROFILE_ES;
+  } else if (gl_api & GST_GL_API_OPENGL) {
+    *version = GST_GLSL_VERSION_110;
+    *profile = GST_GLSL_PROFILE_COMPATIBILITY;
+  }
+}
+
+static gchar *
+_mangle_shader (const gchar * str, guint shader_type, GstGLTextureTarget from,
+    GstGLTextureTarget to, GstGLAPI gl_api, GstGLSLVersion * version,
+    GstGLSLProfile * profile)
+{
+  gchar *tmp, *tmp2;
+
+  tmp = _mangle_texture_access (str, from, to, gl_api);
+  tmp2 = _mangle_sampler_type (tmp, from, to);
+  g_free (tmp);
+  tmp = _mangle_varying_attribute (tmp2, shader_type, gl_api);
+  g_free (tmp2);
+  if (shader_type == GL_FRAGMENT_SHADER && gl_api & GST_GL_API_OPENGL3) {
+    tmp2 = _mangle_frag_color (tmp);
+    g_free (tmp);
+    tmp = tmp2;
+  }
+  _mangle_version_profile_from_gl_api (gl_api, version, profile);
+  return tmp;
+}
+
+static GstGLShader *
+_create_shader (GstGLColorConvert * convert)
+{
+  struct ConvertInfo *info = &convert->priv->convert_info;
+  GString *str = g_string_new (NULL);
+  GstGLShader *ret = NULL;
+  GstGLSLStage *stage;
+  GstGLSLVersion version;
+  GstGLSLProfile profile;
+  gchar *version_str, *tmp, *tmp1;
+  const gchar *strings[2];
+  GError *error = NULL;
+  GstGLAPI gl_api;
+  int i;
+
+  gl_api = gst_gl_context_get_gl_api (convert->context);
+
+  ret = gst_gl_shader_new (convert->context);
+
+  tmp =
+      _mangle_shader (text_vertex_shader, GL_VERTEX_SHADER, info->templ->target,
+      convert->priv->from_texture_target, gl_api, &version, &profile);
+
+  tmp1 = gst_glsl_version_profile_to_string (version, profile);
+  version_str = g_strdup_printf ("#version %s\n", tmp1);
+  g_free (tmp1);
+
+  strings[0] = version_str;
+  strings[1] = tmp;
+  if (!(stage = gst_glsl_stage_new_with_strings (convert->context,
+              GL_VERTEX_SHADER, version, profile, 2, strings))) {
+    GST_ERROR_OBJECT (convert, "Failed to create vertex stage");
+    g_free (version_str);
+    g_free (tmp);
+    gst_object_unref (ret);
+    return NULL;
+  }
+  g_free (tmp);
+
+  if (!gst_gl_shader_compile_attach_stage (ret, stage, &error)) {
+    GST_ERROR_OBJECT (convert, "Failed to compile vertex shader %s",
+        error->message);
+    g_clear_error (&error);
+    g_free (version_str);
+    gst_object_unref (stage);
+    gst_object_unref (ret);
+    return NULL;
+  }
+
+  if (info->templ->extensions)
+    g_string_append (str, info->templ->extensions);
+
+  if (convert->priv->from_texture_target == GST_GL_TEXTURE_TARGET_EXTERNAL_OES
+      && info->templ->target != GST_GL_TEXTURE_TARGET_EXTERNAL_OES)
+    g_string_append (str, glsl_OES_extension_string);
+
+  if (info->templ->uniforms)
+    g_string_append (str, info->templ->uniforms);
+
+  if (gl_api & GST_GL_API_OPENGL3) {
+    g_string_append_c (str, '\n');
+    g_string_append (str, "out vec4 fragColor;\n");
+  }
+
+  for (i = 0; i < MAX_FUNCTIONS; i++) {
+    if (info->templ->functions[i] == NULL)
+      break;
+
+    g_string_append_c (str, '\n');
+    g_string_append (str, info->templ->functions[i]);
+    g_string_append_c (str, '\n');
+  }
+
+  g_string_append (str, "\nvarying vec2 v_texcoord;\nvoid main (void) {\n");
+  if (info->frag_body) {
+    g_string_append (str, "vec2 texcoord;\n");
+    if (convert->priv->from_texture_target == GST_GL_TEXTURE_TARGET_RECTANGLE
+        && info->templ->target != GST_GL_TEXTURE_TARGET_RECTANGLE) {
+      g_string_append (str, "texcoord = v_texcoord * vec2 (width, height);\n");
+    } else {
+      g_string_append (str, "texcoord = v_texcoord;\n");
+    }
+
+    g_string_append (str, info->frag_body);
+  }
+  g_string_append (str, "\n}");
+  tmp = g_string_free (str, FALSE);
+  info->frag_prog = _mangle_shader (tmp, GL_FRAGMENT_SHADER,
+      info->templ->target, convert->priv->from_texture_target, gl_api,
+      &version, &profile);
+  g_free (tmp);
+
+  strings[1] = info->frag_prog;
+  if (!(stage = gst_glsl_stage_new_with_strings (convert->context,
+              GL_FRAGMENT_SHADER, version, profile, 2, strings))) {
+    GST_ERROR_OBJECT (convert, "Failed to create fragment stage");
+    g_free (info->frag_prog);
+    info->frag_prog = NULL;
+    g_free (version_str);
+    gst_object_unref (ret);
+    return NULL;
+  }
+  g_free (version_str);
+  if (!gst_gl_shader_compile_attach_stage (ret, stage, &error)) {
+    GST_ERROR_OBJECT (convert, "Failed to compile fragment shader %s",
+        error->message);
+    g_clear_error (&error);
+    g_free (info->frag_prog);
+    info->frag_prog = NULL;
+    gst_object_unref (stage);
+    gst_object_unref (ret);
+    return NULL;
+  }
+
+  if (!gst_gl_shader_link (ret, &error)) {
+    GST_ERROR_OBJECT (convert, "Failed to link shader %s", error->message);
+    g_clear_error (&error);
+    g_free (info->frag_prog);
+    info->frag_prog = NULL;
+    gst_object_unref (ret);
+    return NULL;
+  }
+
+  return ret;
+}
+
 /* Called in the gl thread */
 static gboolean
 _init_convert (GstGLColorConvert * convert)
 {
   GstGLFuncs *gl;
-  gboolean res;
   struct ConvertInfo *info = &convert->priv->convert_info;
   gint i;
 
@@ -1352,13 +2061,11 @@
     }
   }
 
-  if (!info->frag_prog || info->in_n_textures == 0 || info->out_n_textures == 0)
+  if (!info->frag_body || info->in_n_textures == 0 || info->out_n_textures == 0)
     goto unhandled_format;
 
-  /* multiple draw targets not supported on GLES2...yet */
-  if (info->out_n_textures > 1 && (!gl->DrawBuffers ||
-          USING_GLES2 (convert->context))) {
-    g_free (info->frag_prog);
+  /* multiple draw targets not supported on GLES2... */
+  if (info->out_n_textures > 1 && !gl->DrawBuffers) {
     GST_ERROR ("Conversion requires output to multiple draw buffers");
     goto incompatible_api;
   }
@@ -1368,16 +2075,11 @@
       (GST_VIDEO_INFO_FORMAT (&convert->out_info) == GST_VIDEO_FORMAT_YUY2 ||
           GST_VIDEO_INFO_FORMAT (&convert->out_info) ==
           GST_VIDEO_FORMAT_UYVY)) {
-    g_free (info->frag_prog);
     GST_ERROR ("Conversion requires reading with an unsupported format");
     goto incompatible_api;
   }
 
-  res =
-      gst_gl_context_gen_shader (convert->context, text_vertex_shader,
-      info->frag_prog, &convert->shader);
-  g_free (info->frag_prog);
-  if (!res)
+  if (!(convert->shader = _create_shader (convert)))
     goto error;
 
   convert->priv->attr_position =
@@ -1410,6 +2112,16 @@
   gst_gl_shader_set_uniform_1f (convert->shader, "height",
       GST_VIDEO_INFO_HEIGHT (&convert->in_info));
 
+  if (convert->priv->from_texture_target == GST_GL_TEXTURE_TARGET_RECTANGLE) {
+    gst_gl_shader_set_uniform_1f (convert->shader, "poffset_x", 1.);
+    gst_gl_shader_set_uniform_1f (convert->shader, "poffset_y", 1.);
+  } else {
+    gst_gl_shader_set_uniform_1f (convert->shader, "poffset_x",
+        1. / (gfloat) GST_VIDEO_INFO_WIDTH (&convert->in_info));
+    gst_gl_shader_set_uniform_1f (convert->shader, "poffset_y",
+        1. / (gfloat) GST_VIDEO_INFO_HEIGHT (&convert->in_info));
+  }
+
   if (info->chroma_sampling[0] > 0.0f && info->chroma_sampling[1] > 0.0f) {
     gst_gl_shader_set_uniform_2fv (convert->shader, "chroma_sampling", 1,
         info->chroma_sampling);
@@ -1612,15 +2324,27 @@
       /* Luminance formats are not color renderable */
       /* renderering to a framebuffer only renders the intersection of all
        * the attachments i.e. the smallest attachment size */
-      GstVideoInfo temp_info;
+      if (!convert->priv->out_tex[j]) {
+        GstGLVideoAllocationParams *params;
+        GstGLBaseMemoryAllocator *base_mem_allocator;
+        GstAllocator *allocator;
+        GstVideoInfo temp_info;
 
-      gst_video_info_set_format (&temp_info, GST_VIDEO_FORMAT_RGBA, out_width,
-          out_height);
+        gst_video_info_set_format (&temp_info, GST_VIDEO_FORMAT_RGBA, out_width,
+            out_height);
 
-      if (!convert->priv->out_tex[j])
+        allocator = gst_allocator_find (GST_GL_MEMORY_ALLOCATOR_NAME);
+        base_mem_allocator = GST_GL_BASE_MEMORY_ALLOCATOR (allocator);
+        params = gst_gl_video_allocation_params_new (context, NULL, &temp_info,
+            0, NULL, convert->priv->to_texture_target);
+
         convert->priv->out_tex[j] =
-            (GstGLMemory *) gst_gl_memory_alloc (context, NULL, &temp_info, 0,
-            NULL);
+            (GstGLMemory *) gst_gl_base_memory_alloc (base_mem_allocator,
+            (GstGLAllocationParams *) params);
+
+        gst_gl_allocation_params_free ((GstGLAllocationParams *) params);
+        gst_object_unref (allocator);
+      }
     } else {
       convert->priv->out_tex[j] = out_tex;
     }
@@ -1675,9 +2399,9 @@
         res = FALSE;
         continue;
       }
-      gst_gl_memory_copy_into_texture (convert->priv->out_tex[j],
-          out_tex->tex_id, out_tex->tex_type, mem_width, mem_height,
-          GST_VIDEO_INFO_PLANE_STRIDE (&out_tex->info, out_tex->plane), FALSE);
+      gst_gl_memory_copy_into (convert->priv->out_tex[j],
+          out_tex->tex_id, convert->priv->to_texture_target, out_tex->tex_type,
+          mem_width, mem_height);
       gst_memory_unmap ((GstMemory *) convert->priv->out_tex[j], &from_info);
       gst_memory_unmap ((GstMemory *) out_tex, &to_info);
     } else {
@@ -1711,6 +2435,8 @@
   gboolean res = TRUE;
   gint views, v;
   GstVideoOverlayCompositionMeta *composition_meta;
+  GstGLSyncMeta *sync_meta;
+  GstFlowReturn ret;
 
   convert->outbuf = NULL;
 
@@ -1719,9 +2445,45 @@
     return;
   }
 
-  convert->outbuf = gst_buffer_new ();
-  if (!gst_gl_memory_setup_buffer (convert->context, NULL, &convert->out_info,
-          NULL, convert->outbuf)) {
+  sync_meta = gst_buffer_get_gl_sync_meta (convert->inbuf);
+  if (sync_meta)
+    gst_gl_sync_meta_wait (sync_meta, convert->context);
+
+  if (!convert->priv->pool) {
+    gboolean ret;
+    /* No pool! */
+    GstQuery *query = gst_query_new_allocation (convert->priv->out_caps, TRUE);
+    ret = gst_gl_color_convert_decide_allocation (convert, query);
+    gst_query_unref (query);
+
+    if (!ret) {
+      GST_ERROR_OBJECT (convert, "Failed to choose allocation parameters");
+      convert->priv->result = FALSE;
+      return;
+    }
+
+    if (!convert->priv->pool) {
+      GST_ERROR_OBJECT (convert, "Failed to create a buffer pool");
+      convert->priv->result = FALSE;
+      return;
+    }
+  }
+
+  if (!convert->priv->pool_started) {
+    if (!gst_buffer_pool_set_active (convert->priv->pool, TRUE)) {
+      GST_ERROR_OBJECT (convert, "Failed to start buffer pool");
+      convert->priv->result = FALSE;
+      return;
+    }
+    convert->priv->pool_started = TRUE;
+  }
+
+  ret =
+      gst_buffer_pool_acquire_buffer (convert->priv->pool, &convert->outbuf,
+      NULL);
+  if (ret != GST_FLOW_OK) {
+    GST_ERROR_OBJECT (convert, "Failed to acquire buffer from pool: %s",
+        gst_flow_get_name (ret));
     convert->priv->result = FALSE;
     return;
   }
@@ -1732,6 +2494,10 @@
   else
     views = 1;
 
+  gst_gl_insert_debug_marker (context, "%s converting from %s to %s",
+      GST_OBJECT_NAME (convert),
+      gst_video_format_to_string (GST_VIDEO_INFO_FORMAT (in_info)),
+      gst_video_format_to_string (GST_VIDEO_INFO_FORMAT (&convert->out_info)));
   /* Handle all views on input and output one at a time */
   for (v = 0; res && v < views; v++)
     res = _do_convert_one_view (context, convert, v);
@@ -1786,11 +2552,14 @@
 
   /* attach the texture to the FBO to renderer to */
   for (i = 0; i < c_info->out_n_textures; i++) {
+    guint gl_target =
+        gst_gl_texture_target_to_gl (convert->priv->to_texture_target);
+
     /* needed? */
-    gl->BindTexture (GL_TEXTURE_2D, convert->priv->out_tex[i]->tex_id);
+    gl->BindTexture (gl_target, convert->priv->out_tex[i]->tex_id);
 
     gl->FramebufferTexture2D (GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0 + i,
-        GL_TEXTURE_2D, convert->priv->out_tex[i]->tex_id, 0);
+        gl_target, convert->priv->out_tex[i]->tex_id, 0);
   }
 
   if (gl->DrawBuffers)
@@ -1811,15 +2580,15 @@
 
   for (i = c_info->in_n_textures - 1; i >= 0; i--) {
     gchar *scale_name = g_strdup_printf ("tex_scale%u", i);
-    GstGLMemory *m = convert->priv->in_tex[i];
-    guint tex_target = m->tex_target;
+    guint gl_target =
+        gst_gl_texture_target_to_gl (convert->priv->from_texture_target);
 
     gl->ActiveTexture (GL_TEXTURE0 + i);
-    gl->BindTexture (tex_target, convert->priv->in_tex[i]->tex_id);
-    gl->TexParameteri (tex_target, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
-    gl->TexParameteri (tex_target, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
-    gl->TexParameteri (tex_target, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
-    gl->TexParameteri (tex_target, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
+    gl->BindTexture (gl_target, convert->priv->in_tex[i]->tex_id);
+    gl->TexParameteri (gl_target, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
+    gl->TexParameteri (gl_target, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
+    gl->TexParameteri (gl_target, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
+    gl->TexParameteri (gl_target, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
 
     gst_gl_shader_set_uniform_2fv (convert->shader, scale_name, 1,
         convert->priv->in_tex[i]->tex_scaling);
diff --git a/gst-libs/gst/gl/gstglcolorconvert.h b/gst-libs/gst/gl/gstglcolorconvert.h
index 8e66be4..5980cfa 100644
--- a/gst-libs/gst/gl/gstglcolorconvert.h
+++ b/gst-libs/gst/gl/gstglcolorconvert.h
@@ -84,7 +84,7 @@
  *
  * The currently supported formats that can be converted
  */
-#define GST_GL_COLOR_CONVERT_FORMATS "{ RGB, RGBx, RGBA, BGR, BGRx, BGRA, xRGB, " \
+#define GST_GL_COLOR_CONVERT_FORMATS "{ RGBA, RGB, RGBx, BGR, BGRx, BGRA, xRGB, " \
                                "xBGR, ARGB, ABGR, Y444, I420, YV12, Y42B, " \
                                "Y41B, NV12, NV21, YUY2, UYVY, AYUV, " \
                                "GRAY8, GRAY16_LE, GRAY16_BE, RGB16, BGR16 }"
@@ -95,13 +95,20 @@
  * The currently supported #GstCaps that can be converted
  */
 #define GST_GL_COLOR_CONVERT_VIDEO_CAPS \
-    GST_VIDEO_CAPS_MAKE_WITH_FEATURES (GST_CAPS_FEATURE_MEMORY_GL_MEMORY, \
-        GST_GL_COLOR_CONVERT_FORMATS)
-
-#define GST_GL_COLOR_CONVERT_VIDEO_OVERLAY_COMPOSITION_CAPS \
-    GST_VIDEO_CAPS_MAKE_WITH_FEATURES (GST_CAPS_FEATURE_MEMORY_GL_MEMORY \
-        "," GST_CAPS_FEATURE_META_GST_VIDEO_OVERLAY_COMPOSITION, \
-        GST_GL_COLOR_CONVERT_FORMATS)
+    "video/x-raw(" GST_CAPS_FEATURE_MEMORY_GL_MEMORY "), "              \
+    "format = (string) " GST_GL_COLOR_CONVERT_FORMATS ", "              \
+    "width = " GST_VIDEO_SIZE_RANGE ", "                                \
+    "height = " GST_VIDEO_SIZE_RANGE ", "                               \
+    "framerate = " GST_VIDEO_FPS_RANGE ", "                             \
+    "texture-target = (string) { 2D, rectangle, external-oes } "        \
+    " ; "                                                               \
+    "video/x-raw(" GST_CAPS_FEATURE_MEMORY_GL_MEMORY ","                \
+    GST_CAPS_FEATURE_META_GST_VIDEO_OVERLAY_COMPOSITION "), "           \
+    "format = (string) " GST_GL_COLOR_CONVERT_FORMATS ", "              \
+    "width = " GST_VIDEO_SIZE_RANGE ", "                                \
+    "height = " GST_VIDEO_SIZE_RANGE ", "                               \
+    "framerate = " GST_VIDEO_FPS_RANGE ", "                             \
+    "texture-target = (string) { 2D, rectangle, external-oes }"
 
 GstGLColorConvert * gst_gl_color_convert_new (GstGLContext * context);
 
@@ -109,9 +116,15 @@
                                                  GstPadDirection direction,
                                                  GstCaps * caps,
                                                  GstCaps * filter);
+GstCaps *   gst_gl_color_convert_fixate_caps    (GstGLContext * convert,
+                                                 GstPadDirection direction,
+                                                 GstCaps * caps,
+                                                 GstCaps * other);
 gboolean    gst_gl_color_convert_set_caps    (GstGLColorConvert * convert,
                                               GstCaps           * in_caps,
                                               GstCaps           * out_caps);
+gboolean    gst_gl_color_convert_decide_allocation (GstGLColorConvert   * convert,
+                                                    GstQuery            * query);
 
 GstBuffer * gst_gl_color_convert_perform    (GstGLColorConvert * convert, GstBuffer * inbuf);
 
diff --git a/gst-libs/gst/gl/gstglcontext.c b/gst-libs/gst/gl/gstglcontext.c
index d177df8..2c208ed 100644
--- a/gst-libs/gst/gl/gstglcontext.c
+++ b/gst-libs/gst/gl/gstglcontext.c
@@ -41,6 +41,8 @@
 #endif
 
 #include <gmodule.h>
+#include <string.h>
+#include <stdio.h>
 
 #include "gl.h"
 #include "gstglcontext.h"
@@ -65,7 +67,8 @@
 #include "eagl/gstglcontext_eagl.h"
 #endif
 
-GST_DEBUG_CATEGORY_STATIC (gst_performance);
+extern void _gst_gl_debug_enable (GstGLContext * context);
+
 static GPrivate current_context_key;
 
 static GModule *module_self;
@@ -83,7 +86,7 @@
 #else
   /* On Linux the .so is only in -dev packages, try with a real soname
    * Proper compilers will optimize away the strcmp */
-  if (strcmp (G_MODULE_SUFFIX, "so") == 0)
+  if (g_strcmp0 (G_MODULE_SUFFIX, "so") == 0)
     module_opengl = g_module_open ("libGL.so.1", G_MODULE_BIND_LAZY);
 
   /* This automatically handles the suffix and even .la files */
@@ -108,7 +111,7 @@
 #else
   /* On Linux the .so is only in -dev packages, try with a real soname
    * Proper compilers will optimize away the strcmp */
-  if (strcmp (G_MODULE_SUFFIX, "so") == 0)
+  if (g_strcmp0 (G_MODULE_SUFFIX, "so") == 0)
     module_gles2 = g_module_open ("libGLESv2.so.2", G_MODULE_BIND_LAZY);
 
   /* This automatically handles the suffix and even .la files */
@@ -133,37 +136,55 @@
 #error "Add module loading support for GLES3"
 #endif
 
-/* Context sharedness es tracked by a unique id stored in each context object
- * in order track complex creation/deletion scenarios.  As a result, sharedness
- * can only be successfully validated between two GstGLContext's where one is
- * not a wrapped context.
+/* Context sharedness is tracked by a refcounted pointer stored in each context
+ * object to track complex creation/deletion scenarios.  As a result,
+ * sharedness can only be successfully validated between two GstGLContext's
+ * where one is not a wrapped context.
  *
  * As there is no API at the winsys level to tell whether two OpenGL contexts
  * can share GL resources, this is the next best thing.
+ *
+ * XXX: we may need a way to associate two wrapped GstGLContext's as being
+ * shared however I have not come across a use case that requries this yet.
  */
-static volatile guint sharegroup_idx;
-
-static guint
-_new_sharegroup_id (void)
+struct ContextShareGroup
 {
-  guint current, ret;
+  volatile int refcount;
+};
 
-  do {
-    current = g_atomic_int_get (&sharegroup_idx);
-    ret = current + 1;
+static struct ContextShareGroup *
+_context_share_group_new (void)
+{
+  struct ContextShareGroup *ret = g_new0 (struct ContextShareGroup, 1);
 
-    /* 0 is special */
-    if (ret == 0)
-      ret++;
-  } while (!g_atomic_int_compare_and_exchange (&sharegroup_idx, current, ret));
-
-  GST_TRACE ("generated new share group id %u", ret);
+  ret->refcount = 1;
 
   return ret;
 }
 
+static struct ContextShareGroup *
+_context_share_group_ref (struct ContextShareGroup *share)
+{
+  g_atomic_int_inc (&share->refcount);
+  return share;
+}
+
+static void
+_context_share_group_unref (struct ContextShareGroup *share)
+{
+  if (g_atomic_int_dec_and_test (&share->refcount))
+    g_free (share);
+}
+
+static gboolean
+_context_share_group_is_shared (struct ContextShareGroup *share)
+{
+  return g_atomic_int_get (&share->refcount) > 1;
+}
+
 #define GST_CAT_DEFAULT gst_gl_context_debug
 GST_DEBUG_CATEGORY (GST_CAT_DEFAULT);
+GST_DEBUG_CATEGORY_STATIC (gst_gl_debug);
 
 #define gst_gl_context_parent_class parent_class
 G_DEFINE_ABSTRACT_TYPE (GstGLContext, gst_gl_context, GST_TYPE_OBJECT);
@@ -184,13 +205,12 @@
   /* conditions */
   GMutex render_lock;
   GCond create_cond;
-  GCond destroy_cond;
 
   gboolean created;
   gboolean alive;
 
   GWeakRef other_context_ref;
-  guint sharegroup_id;
+  struct ContextShareGroup *sharegroup;
   GError **error;
 
   gint gl_major;
@@ -220,8 +240,8 @@
 
 #define GST_GL_WRAPPED_CONTEXT(o)           (G_TYPE_CHECK_INSTANCE_CAST((o), GST_GL_TYPE_WRAPPED_CONTEXT, GstGLWrappedContext))
 #define GST_GL_WRAPPED_CONTEXT_CLASS(k)     (G_TYPE_CHECK_CLASS((k), GST_GL_TYPE_CONTEXT, GstGLContextClass))
-#define GST_GL_IS_WRAPPED_CONTEXT(o)        (G_TYPE_CHECK_INSTANCE_TYPE((o), GST_GL_TYPE_WRAPPED_CONTEXT))
-#define GST_GL_IS_WRAPPED_CONTEXT_CLASS(k)  (G_TYPE_CHECK_CLASS_TYPE((k), GST_GL_TYPE_WRAPPED_CONTEXT))
+#define GST_IS_GL_WRAPPED_CONTEXT(o)        (G_TYPE_CHECK_INSTANCE_TYPE((o), GST_GL_TYPE_WRAPPED_CONTEXT))
+#define GST_IS_GL_WRAPPED_CONTEXT_CLASS(k)  (G_TYPE_CHECK_CLASS_TYPE((k), GST_GL_TYPE_WRAPPED_CONTEXT))
 #define GST_GL_WRAPPED_CONTEXT_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS((o), GST_GL_TYPE_WRAPPED_CONTEXT, GstGLWrappedContextClass))
 
 GQuark
@@ -256,7 +276,6 @@
   g_mutex_init (&context->priv->render_lock);
 
   g_cond_init (&context->priv->create_cond);
-  g_cond_init (&context->priv->destroy_cond);
   context->priv->created = FALSE;
 
   g_weak_ref_init (&context->priv->other_context_ref, NULL);
@@ -283,7 +302,7 @@
   if (g_once_init_enter (&_init)) {
     GST_DEBUG_CATEGORY_INIT (gst_gl_context_debug, "glcontext", 0,
         "glcontext element");
-    GST_DEBUG_CATEGORY_GET (gst_performance, "GST_PERFORMANCE");
+    GST_DEBUG_CATEGORY_INIT (gst_gl_debug, "gldebug", 0, "OpenGL Debugging");
     g_once_init_leave (&_init, 1);
   }
 }
@@ -310,7 +329,7 @@
   GST_INFO ("creating a context for display %" GST_PTR_FORMAT
       ", user choice:%s", display, user_choice);
 #if GST_GL_HAVE_PLATFORM_CGL
-  if (!context && (!user_choice || g_strstr_len (user_choice, 5, "cgl")))
+  if (!context && (!user_choice || g_strstr_len (user_choice, 3, "cgl")))
     context = GST_GL_CONTEXT (gst_gl_context_cocoa_new (display));
 #endif
 #if GST_GL_HAVE_PLATFORM_GLX
@@ -318,16 +337,15 @@
     context = GST_GL_CONTEXT (gst_gl_context_glx_new (display));
 #endif
 #if GST_GL_HAVE_PLATFORM_EGL
-  if (!context && (!user_choice || g_strstr_len (user_choice, 7, "egl")))
+  if (!context && (!user_choice || g_strstr_len (user_choice, 3, "egl")))
     context = GST_GL_CONTEXT (gst_gl_context_egl_new (display));
 #endif
 #if GST_GL_HAVE_PLATFORM_WGL
-  if (!context && (!user_choice || g_strstr_len (user_choice, 3, "wgl"))) {
+  if (!context && (!user_choice || g_strstr_len (user_choice, 3, "wgl")))
     context = GST_GL_CONTEXT (gst_gl_context_wgl_new (display));
-  }
 #endif
 #if GST_GL_HAVE_PLATFORM_EAGL
-  if (!context && (!user_choice || g_strstr_len (user_choice, 5, "eagl")))
+  if (!context && (!user_choice || g_strstr_len (user_choice, 4, "eagl")))
     context = GST_GL_CONTEXT (gst_gl_context_eagl_new (display));
 #endif
 
@@ -388,7 +406,7 @@
   context = (GstGLContext *) context_wrap;
 
   context->display = gst_object_ref (display);
-  context->priv->sharegroup_id = _new_sharegroup_id ();
+  context->priv->sharegroup = _context_share_group_new ();
   context_wrap->handle = handle;
   context_wrap->platform = context_type;
   context_wrap->available_apis = available_apis;
@@ -624,28 +642,22 @@
     gst_gl_window_set_draw_callback (context->window, NULL, NULL, NULL);
 
     if (context->priv->alive) {
-      g_mutex_lock (&context->priv->render_lock);
       GST_INFO_OBJECT (context, "send quit gl window loop");
       gst_gl_window_quit (context->window);
-      while (context->priv->alive) {
-        g_cond_wait (&context->priv->destroy_cond, &context->priv->render_lock);
-      }
-      g_mutex_unlock (&context->priv->render_lock);
-    }
 
-    gst_gl_window_set_close_callback (context->window, NULL, NULL, NULL);
-
-    if (context->priv->gl_thread) {
-      gpointer ret = g_thread_join (context->priv->gl_thread);
+      GST_INFO_OBJECT (context, "joining gl thread");
+      g_thread_join (context->priv->gl_thread);
       GST_INFO_OBJECT (context, "gl thread joined");
-      if (ret != NULL)
-        GST_ERROR_OBJECT (context, "gl thread returned a non-null pointer");
       context->priv->gl_thread = NULL;
     }
 
+    gst_gl_window_set_close_callback (context->window, NULL, NULL, NULL);
     gst_object_unref (context->window);
   }
 
+  if (context->priv->sharegroup)
+    _context_share_group_unref (context->priv->sharegroup);
+
   gst_object_unref (context->display);
 
   if (context->gl_vtable) {
@@ -655,7 +667,6 @@
 
   g_mutex_clear (&context->priv->render_lock);
 
-  g_cond_clear (&context->priv->destroy_cond);
   g_cond_clear (&context->priv->create_cond);
 
   g_free (context->priv->gl_exts);
@@ -685,7 +696,7 @@
   GstGLContextClass *context_class;
   gboolean result;
 
-  g_return_val_if_fail (GST_GL_IS_CONTEXT (context), FALSE);
+  g_return_val_if_fail (GST_IS_GL_CONTEXT (context), FALSE);
   context_class = GST_GL_CONTEXT_GET_CLASS (context);
   g_return_val_if_fail (context_class->activate != NULL, FALSE);
 
@@ -746,7 +757,7 @@
 {
   GstGLContextClass *context_class;
 
-  g_return_val_if_fail (GST_GL_IS_CONTEXT (context), GST_GL_API_NONE);
+  g_return_val_if_fail (GST_IS_GL_CONTEXT (context), GST_GL_API_NONE);
   context_class = GST_GL_CONTEXT_GET_CLASS (context);
   g_return_val_if_fail (context_class->get_gl_api != NULL, GST_GL_API_NONE);
 
@@ -775,7 +786,7 @@
   GstGLContextClass *context_class;
   GstGLAPI gl_api;
 
-  g_return_val_if_fail (GST_GL_IS_CONTEXT (context), NULL);
+  g_return_val_if_fail (GST_IS_GL_CONTEXT (context), NULL);
   context_class = GST_GL_CONTEXT_GET_CLASS (context);
   g_return_val_if_fail (context_class->get_proc_address != NULL, NULL);
 
@@ -831,7 +842,7 @@
 gboolean
 gst_gl_context_set_window (GstGLContext * context, GstGLWindow * window)
 {
-  g_return_val_if_fail (!GST_GL_IS_WRAPPED_CONTEXT (context), FALSE);
+  g_return_val_if_fail (!GST_IS_GL_WRAPPED_CONTEXT (context), FALSE);
 
   GST_DEBUG_OBJECT (context, "window:%" GST_PTR_FORMAT, window);
 
@@ -865,9 +876,9 @@
 GstGLWindow *
 gst_gl_context_get_window (GstGLContext * context)
 {
-  g_return_val_if_fail (GST_GL_IS_CONTEXT (context), NULL);
+  g_return_val_if_fail (GST_IS_GL_CONTEXT (context), NULL);
 
-  if (GST_GL_IS_WRAPPED_CONTEXT (context)) {
+  if (GST_IS_GL_WRAPPED_CONTEXT (context)) {
     GST_WARNING_OBJECT (context, "context is not toplevel, returning NULL");
     return NULL;
   }
@@ -892,12 +903,12 @@
 gboolean
 gst_gl_context_can_share (GstGLContext * context, GstGLContext * other_context)
 {
-  g_return_val_if_fail (GST_GL_IS_CONTEXT (context), FALSE);
-  g_return_val_if_fail (GST_GL_IS_CONTEXT (other_context), FALSE);
+  g_return_val_if_fail (GST_IS_GL_CONTEXT (context), FALSE);
+  g_return_val_if_fail (GST_IS_GL_CONTEXT (other_context), FALSE);
 
   /* check if the contexts are descendants or the root nodes are the same */
-  return context->priv->sharegroup_id != 0
-      && context->priv->sharegroup_id == other_context->priv->sharegroup_id;
+  return context->priv->sharegroup != NULL
+      && context->priv->sharegroup == other_context->priv->sharegroup;
 }
 
 /**
@@ -925,8 +936,8 @@
 {
   gboolean alive = FALSE;
 
-  g_return_val_if_fail (GST_GL_IS_CONTEXT (context), FALSE);
-  g_return_val_if_fail (!GST_GL_IS_WRAPPED_CONTEXT (context), FALSE);
+  g_return_val_if_fail (GST_IS_GL_CONTEXT (context), FALSE);
+  g_return_val_if_fail (!GST_IS_GL_WRAPPED_CONTEXT (context), FALSE);
 
   GST_DEBUG_OBJECT (context, " other_context:%" GST_PTR_FORMAT, other_context);
 
@@ -938,16 +949,16 @@
     g_weak_ref_set (&context->priv->other_context_ref, other_context);
     context->priv->error = error;
     if (other_context == NULL)
-      context->priv->sharegroup_id = _new_sharegroup_id ();
+      context->priv->sharegroup = _context_share_group_new ();
     else
-      context->priv->sharegroup_id = other_context->priv->sharegroup_id;
+      context->priv->sharegroup =
+          _context_share_group_ref (other_context->priv->sharegroup);
 
     context->priv->gl_thread = g_thread_new ("gstglcontext",
         (GThreadFunc) gst_gl_context_create_thread, context);
 
-    g_cond_wait (&context->priv->create_cond, &context->priv->render_lock);
-
-    context->priv->created = TRUE;
+    while (!context->priv->created)
+      g_cond_wait (&context->priv->create_cond, &context->priv->render_lock);
 
     GST_INFO_OBJECT (context, "gl thread created");
   }
@@ -959,154 +970,6 @@
   return alive;
 }
 
-#ifndef GL_DEBUG_TYPE_ERROR
-#define GL_DEBUG_TYPE_ERROR 0x824C
-#endif
-#ifndef GL_DEBUG_TYPE_DEPRECATED_BEHAVIOUR
-#define GL_DEBUG_TYPE_DEPRECATED_BEHAVIOUR 0x824D
-#endif
-#ifndef GL_DEBUG_TYPE_UNDEFINED_BEHAVIOUR
-#define GL_DEBUG_TYPE_UNDEFINED_BEHAVIOUR 0x824E
-#endif
-#ifndef GL_DEBUG_TYPE_PORTABILITY
-#define GL_DEBUG_TYPE_PORTABILITY 0x824F
-#endif
-#ifndef GL_DEBUG_TYPE_PERFORMANCE
-#define GL_DEBUG_TYPE_PERFORMANCE 0x8250
-#endif
-#ifndef GL_DEBUG_TYPE_MARKER
-#define GL_DEBUG_TYPE_MARKER 0x8268
-#endif
-#ifndef GL_DEBUG_TYPE_OTHER
-#define GL_DEBUG_TYPE_OTHER 0x8251
-#endif
-
-#ifndef GL_DEBUG_SEVERITY_HIGH
-#define GL_DEBUG_SEVERITY_HIGH 0x9146
-#endif
-#ifndef GL_DEBUG_SEVERITY_MEDIUM
-#define GL_DEBUG_SEVERITY_MEDIUM 0x9147
-#endif
-#ifndef GL_DEBUG_SEVERITY_LOW
-#define GL_DEBUG_SEVERITY_LOW 0x9148
-#endif
-#ifndef GL_DEBUG_SEVERITY_NOTIFICATION
-#define GL_DEBUG_SEVERITY_NOTIFICATION 0x826B
-#endif
-
-#ifndef GL_DEBUG_SOURCE_API
-#define GL_DEBUG_SOURCE_API 0x8246
-#endif
-#ifndef GL_DEBUG_SOURCE_WINDOW_SYSTEM
-#define GL_DEBUG_SOURCE_WINDOW_SYSTEM 0x8247
-#endif
-#ifndef GL_DEBUG_SOURCE_SHADER_COMPILER
-#define GL_DEBUG_SOURCE_SHADER_COMPILER 0x8248
-#endif
-#ifndef GL_DEBUG_SOURCE_THIRD_PARTY
-#define GL_DEBUG_SOURCE_THIRD_PARTY 0x8249
-#endif
-#ifndef GL_DEBUG_SOURCE_APPLICATION
-#define GL_DEBUG_SOURCE_APPLICATION 0x824A
-#endif
-#ifndef GL_DEBUG_SOURCE_OTHER
-#define GL_DEBUG_SOURCE_OTHER 0x824B
-#endif
-
-#if !defined(GST_DISABLE_GST_DEBUG)
-static inline const gchar *
-_debug_severity_to_string (GLenum severity)
-{
-  switch (severity) {
-    case GL_DEBUG_SEVERITY_HIGH:
-      return "high";
-    case GL_DEBUG_SEVERITY_MEDIUM:
-      return "medium";
-    case GL_DEBUG_SEVERITY_LOW:
-      return "low";
-    case GL_DEBUG_SEVERITY_NOTIFICATION:
-      return "notification";
-    default:
-      return "invalid";
-  }
-}
-
-static inline const gchar *
-_debug_source_to_string (GLenum source)
-{
-  switch (source) {
-    case GL_DEBUG_SOURCE_API:
-      return "API";
-    case GL_DEBUG_SOURCE_WINDOW_SYSTEM:
-      return "winsys";
-    case GL_DEBUG_SOURCE_SHADER_COMPILER:
-      return "shader compiler";
-    case GL_DEBUG_SOURCE_THIRD_PARTY:
-      return "third party";
-    case GL_DEBUG_SOURCE_APPLICATION:
-      return "application";
-    case GL_DEBUG_SOURCE_OTHER:
-      return "other";
-    default:
-      return "invalid";
-  }
-}
-
-static inline const gchar *
-_debug_type_to_string (GLenum type)
-{
-  switch (type) {
-    case GL_DEBUG_TYPE_ERROR:
-      return "error";
-    case GL_DEBUG_TYPE_DEPRECATED_BEHAVIOUR:
-      return "deprecated";
-    case GL_DEBUG_TYPE_UNDEFINED_BEHAVIOUR:
-      return "undefined";
-    case GL_DEBUG_TYPE_PORTABILITY:
-      return "portability";
-    case GL_DEBUG_TYPE_PERFORMANCE:
-      return "performance";
-    case GL_DEBUG_TYPE_MARKER:
-      return "debug marker";
-    case GL_DEBUG_TYPE_OTHER:
-      return "other";
-    default:
-      return "invalid";
-  }
-}
-
-static void GSTGLAPI
-_gst_gl_debug_callback (GLenum source, GLenum type, GLuint id, GLenum severity,
-    GLsizei length, const gchar * message, gpointer user_data)
-{
-  GstGLContext *context = user_data;
-  const gchar *severity_str = _debug_severity_to_string (severity);
-  const gchar *source_str = _debug_source_to_string (source);
-  const gchar *type_str = _debug_type_to_string (type);
-
-  switch (type) {
-    case GL_DEBUG_TYPE_ERROR:
-    case GL_DEBUG_TYPE_UNDEFINED_BEHAVIOUR:
-      GST_ERROR_OBJECT (context, "%s: GL %s from %s id:%u, %s", severity_str,
-          type_str, source_str, id, message);
-      break;
-    case GL_DEBUG_TYPE_DEPRECATED_BEHAVIOUR:
-    case GL_DEBUG_TYPE_PORTABILITY:
-      GST_FIXME_OBJECT (context, "%s: GL %s from %s id:%u, %s", severity_str,
-          type_str, source_str, id, message);
-      break;
-    case GL_DEBUG_TYPE_PERFORMANCE:
-      GST_CAT_DEBUG_OBJECT (gst_performance, context, "%s: GL %s from %s id:%u,"
-          " %s", severity_str, type_str, source_str, id, message);
-      break;
-    default:
-      GST_DEBUG_OBJECT (context, "%s: GL %s from %s id:%u, %s", severity_str,
-          type_str, source_str, id, message);
-      break;
-  }
-}
-#endif
-
 static gboolean
 _create_context_info (GstGLContext * context, GstGLAPI gl_api, gint * gl_major,
     gint * gl_minor, GError ** error)
@@ -1190,6 +1053,9 @@
 static void
 _unlock_create_thread (GstGLContext * context)
 {
+  context->priv->created = TRUE;
+  GST_INFO_OBJECT (context, "gl thread running");
+  g_cond_signal (&context->priv->create_cond);
   g_mutex_unlock (&context->priv->render_lock);
 }
 
@@ -1220,7 +1086,6 @@
 {
   GstGLContextClass *context_class;
   GstGLWindowClass *window_class;
-  GstGLFuncs *gl;
   GstGLAPI compiled_api, user_api, gl_api, display_api;
   gchar *api_string;
   gchar *compiled_api_s;
@@ -1256,7 +1121,6 @@
     }
   }
 
-  gl = context->gl_vtable;
   compiled_api = _compiled_api ();
   compiled_api_s = gst_gl_api_to_string (compiled_api);
 
@@ -1344,15 +1208,9 @@
 
   context->priv->alive = TRUE;
 
-  if (gl->DebugMessageCallback) {
 #if !defined(GST_DISABLE_GST_DEBUG)
-    GST_INFO_OBJECT (context, "Enabling GL context debugging");
-    /* enable them all */
-    gl->DebugMessageControl (GL_DONT_CARE, GL_DONT_CARE, GL_DONT_CARE, 0, 0,
-        GL_TRUE);
-    gl->DebugMessageCallback (_gst_gl_debug_callback, context);
+  _gst_gl_debug_enable (context);
 #endif
-  }
 
   if (other_context) {
     GST_DEBUG_OBJECT (context, "Unreffing other_context %" GST_PTR_FORMAT,
@@ -1360,9 +1218,8 @@
     gst_object_unref (other_context);
   }
 
-  g_cond_signal (&context->priv->create_cond);
-
-//  g_mutex_unlock (&context->priv->render_lock);
+  /* unlocking of the render_lock happens when the
+   * context's loop is running from inside that loop */
   gst_gl_window_send_message_async (context->window,
       (GstGLWindowCB) _unlock_create_thread, context, NULL);
 
@@ -1371,7 +1228,6 @@
   GST_INFO_OBJECT (context, "loop exited");
 
   g_mutex_lock (&context->priv->render_lock);
-
   context->priv->alive = FALSE;
 
   gst_gl_context_activate (context, FALSE);
@@ -1387,8 +1243,7 @@
     window_class->close (context->window);
   }
 
-  g_cond_signal (&context->priv->destroy_cond);
-
+  context->priv->created = FALSE;
   g_mutex_unlock (&context->priv->render_lock);
 
   return NULL;
@@ -1398,6 +1253,9 @@
     if (other_context)
       gst_object_unref (other_context);
 
+    /* A context that fails to be created is considered created but not alive
+     * and will never be able to be alive as creation can't happen */
+    context->priv->created = TRUE;
     g_cond_signal (&context->priv->create_cond);
     g_mutex_unlock (&context->priv->render_lock);
     return NULL;
@@ -1420,7 +1278,7 @@
 {
   GstGLContextClass *context_class;
 
-  g_return_if_fail (GST_GL_IS_CONTEXT (context));
+  g_return_if_fail (GST_IS_GL_CONTEXT (context));
   context_class = GST_GL_CONTEXT_GET_CLASS (context);
   g_return_if_fail (context_class->destroy_context != NULL);
 
@@ -1446,7 +1304,7 @@
   GstGLAPI gl_api;
   gboolean ret;
 
-  g_return_val_if_fail (GST_GL_IS_CONTEXT (context), FALSE);
+  g_return_val_if_fail (GST_IS_GL_CONTEXT (context), FALSE);
   g_return_val_if_fail (context->priv->active_thread == g_thread_self (),
       FALSE);
 
@@ -1538,7 +1396,7 @@
   GstGLContextClass *context_class;
   guintptr result;
 
-  g_return_val_if_fail (GST_GL_IS_CONTEXT (context), 0);
+  g_return_val_if_fail (GST_IS_GL_CONTEXT (context), 0);
   context_class = GST_GL_CONTEXT_GET_CLASS (context);
   g_return_val_if_fail (context_class->get_gl_context != NULL, 0);
 
@@ -1562,7 +1420,7 @@
 {
   GstGLContextClass *context_class;
 
-  g_return_val_if_fail (GST_GL_IS_CONTEXT (context), 0);
+  g_return_val_if_fail (GST_IS_GL_CONTEXT (context), 0);
   context_class = GST_GL_CONTEXT_GET_CLASS (context);
   g_return_val_if_fail (context_class->get_gl_platform != NULL, 0);
 
@@ -1580,7 +1438,7 @@
 GstGLDisplay *
 gst_gl_context_get_display (GstGLContext * context)
 {
-  g_return_val_if_fail (GST_GL_IS_CONTEXT (context), NULL);
+  g_return_val_if_fail (GST_IS_GL_CONTEXT (context), NULL);
 
   return gst_object_ref (context->display);
 }
@@ -1620,11 +1478,13 @@
   GstGLWindow *window;
   RunGenericData rdata;
 
-  g_return_if_fail (GST_GL_IS_CONTEXT (context));
+  g_return_if_fail (GST_IS_GL_CONTEXT (context));
   g_return_if_fail (func != NULL);
 
-  if (GST_GL_IS_WRAPPED_CONTEXT (context)) {
+  if (GST_IS_GL_WRAPPED_CONTEXT (context))
     g_return_if_fail (context->priv->active_thread == g_thread_self ());
+
+  if (context->priv->active_thread == g_thread_self ()) {
     func (context, data);
     return;
   }
@@ -1656,7 +1516,7 @@
 void
 gst_gl_context_get_gl_version (GstGLContext * context, gint * maj, gint * min)
 {
-  g_return_if_fail (GST_GL_IS_CONTEXT (context));
+  g_return_if_fail (GST_IS_GL_CONTEXT (context));
   g_return_if_fail (maj != NULL && min != NULL);
 
   if (maj)
@@ -1682,7 +1542,7 @@
 gst_gl_context_check_gl_version (GstGLContext * context, GstGLAPI api,
     gint maj, gint min)
 {
-  g_return_val_if_fail (GST_GL_IS_CONTEXT (context), FALSE);
+  g_return_val_if_fail (GST_IS_GL_CONTEXT (context), FALSE);
 
   if (maj > context->priv->gl_major)
     return FALSE;
@@ -1716,7 +1576,7 @@
 {
   GstGLContextClass *context_class;
 
-  g_return_val_if_fail (GST_GL_IS_CONTEXT (context), FALSE);
+  g_return_val_if_fail (GST_IS_GL_CONTEXT (context), FALSE);
   g_return_val_if_fail (feature != NULL, FALSE);
 
   context_class = GST_GL_CONTEXT_GET_CLASS (context);
@@ -1745,6 +1605,50 @@
   return g_private_get (&current_context_key);
 }
 
+/**
+ * gst_gl_context_is_shared:
+ * @context: a #GstGLContext
+ *
+ * Returns: Whether the #GstGLContext has been shared with another #GstGLContext
+ *
+ * Since: 1.8
+ */
+gboolean
+gst_gl_context_is_shared (GstGLContext * context)
+{
+  g_return_val_if_fail (GST_IS_GL_CONTEXT (context), FALSE);
+  if (GST_IS_GL_WRAPPED_CONTEXT (context))
+    g_return_val_if_fail (context->priv->active_thread, FALSE);
+  else
+    g_return_val_if_fail (context->priv->alive, FALSE);
+
+  return _context_share_group_is_shared (context->priv->sharegroup);
+}
+
+/**
+ * gst_gl_context_set_shared_with:
+ * @context: a wrapped #GstGLContext
+ * @share: another #GstGLContext
+ *
+ * Will internally set @context as shared with @share
+ *
+ * Since: 1.8
+ */
+void
+gst_gl_context_set_shared_with (GstGLContext * context, GstGLContext * share)
+{
+  g_return_if_fail (GST_IS_GL_CONTEXT (context));
+  g_return_if_fail (GST_IS_GL_CONTEXT (share));
+  g_return_if_fail (!gst_gl_context_is_shared (context));
+  /* XXX: may be a little too strict */
+  g_return_if_fail (GST_IS_GL_WRAPPED_CONTEXT (context));
+
+  if (context->priv->sharegroup)
+    _context_share_group_unref (context->priv->sharegroup);
+  context->priv->sharegroup =
+      _context_share_group_ref (share->priv->sharegroup);
+}
+
 static GstGLAPI
 gst_gl_wrapped_context_get_gl_api (GstGLContext * context)
 {
diff --git a/gst-libs/gst/gl/gstglcontext.h b/gst-libs/gst/gl/gstglcontext.h
index 16b9d11..5cbc8ad 100644
--- a/gst-libs/gst/gl/gstglcontext.h
+++ b/gst-libs/gst/gl/gstglcontext.h
@@ -30,8 +30,8 @@
 #define GST_GL_TYPE_CONTEXT         (gst_gl_context_get_type())
 #define GST_GL_CONTEXT(o)           (G_TYPE_CHECK_INSTANCE_CAST((o), GST_GL_TYPE_CONTEXT, GstGLContext))
 #define GST_GL_CONTEXT_CLASS(k)     (G_TYPE_CHECK_CLASS_CAST((k), GST_GL_TYPE_CONTEXT, GstGLContextClass))
-#define GST_GL_IS_CONTEXT(o)        (G_TYPE_CHECK_INSTANCE_TYPE((o), GST_GL_TYPE_CONTEXT))
-#define GST_GL_IS_CONTEXT_CLASS(k)  (G_TYPE_CHECK_CLASS_TYPE((k), GST_GL_TYPE_CONTEXT))
+#define GST_IS_GL_CONTEXT(o)        (G_TYPE_CHECK_INSTANCE_TYPE((o), GST_GL_TYPE_CONTEXT))
+#define GST_IS_GL_CONTEXT_CLASS(k)  (G_TYPE_CHECK_CLASS_TYPE((k), GST_GL_TYPE_CONTEXT))
 #define GST_GL_CONTEXT_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS((o), GST_GL_TYPE_CONTEXT, GstGLContextClass))
 GType gst_gl_context_get_type     (void);
 
@@ -136,7 +136,7 @@
 void          gst_gl_context_destroy          (GstGLContext *context);
 
 gpointer      gst_gl_context_default_get_proc_address (GstGLAPI gl_api, const gchar *name);
-gpointer      gst_gl_context_get_proc_address_with_platform (GstGLPlatform, GstGLAPI gl_api, const gchar *name);
+gpointer      gst_gl_context_get_proc_address_with_platform (GstGLPlatform context_type, GstGLAPI gl_api, const gchar *name);
 
 gboolean      gst_gl_context_set_window (GstGLContext *context, GstGLWindow *window);
 GstGLWindow * gst_gl_context_get_window (GstGLContext *context);
@@ -145,9 +145,12 @@
 gboolean      gst_gl_context_check_gl_version (GstGLContext * context, GstGLAPI api, gint maj, gint min);
 gboolean      gst_gl_context_check_feature (GstGLContext *context, const gchar *feature);
 
-guintptr      gst_gl_context_get_current_gl_context     (GstGLPlatform platform);
+guintptr      gst_gl_context_get_current_gl_context     (GstGLPlatform context_type);
 GstGLAPI      gst_gl_context_get_current_gl_api         (GstGLPlatform platform, guint *major, guint *minor);
 
+gboolean      gst_gl_context_is_shared                  (GstGLContext * context);
+void          gst_gl_context_set_shared_with            (GstGLContext * context, GstGLContext * share);
+
 gboolean gst_gl_context_fill_info (GstGLContext * context, GError ** error);
 
 /* FIXME: remove */
diff --git a/gst-libs/gst/gl/gstglcontrolbindingproxy.c b/gst-libs/gst/gl/gstglcontrolbindingproxy.c
new file mode 100644
index 0000000..f34ddd8
--- /dev/null
+++ b/gst-libs/gst/gl/gstglcontrolbindingproxy.c
@@ -0,0 +1,155 @@
+/* 
+ * GStreamer
+ * Copyright (C) 2016 Matthew Waters <matthew@centricular.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include "gstglcontrolbindingproxy.h"
+
+G_DEFINE_TYPE (GstGLControlBindingProxy,
+    gst_gl_control_binding_proxy, GST_TYPE_CONTROL_BINDING);
+
+static void
+gst_gl_control_binding_proxy_init (GstGLControlBindingProxy * self)
+{
+}
+
+static gboolean
+gst_gl_control_binding_proxy_sync_values (GstControlBinding * binding,
+    GstObject * object, GstClockTime timestamp, GstClockTime last_sync)
+{
+  GstGLControlBindingProxy *self = (GstGLControlBindingProxy *)
+      binding;
+  GstControlBinding *ref_binding;
+  gboolean ret = TRUE;
+
+  ref_binding = gst_object_get_control_binding (self->ref_object,
+      self->property_name);
+
+  if (ref_binding) {
+    ret = gst_control_binding_sync_values (ref_binding, self->ref_object,
+        timestamp, last_sync);
+    gst_object_unref (ref_binding);
+  }
+
+  return ret;
+}
+
+static GValue *
+gst_gl_control_binding_proxy_get_value (GstControlBinding * binding,
+    GstClockTime timestamp)
+{
+  GstGLControlBindingProxy *self = (GstGLControlBindingProxy *)
+      binding;
+  GstControlBinding *ref_binding;
+  GValue *ret = NULL;
+
+  ref_binding = gst_object_get_control_binding (self->ref_object,
+      self->property_name);
+
+  if (ref_binding) {
+    ret = gst_control_binding_get_value (ref_binding, timestamp);
+    gst_object_unref (ref_binding);
+  }
+
+  return ret;
+}
+
+static gboolean
+gst_gl_control_binding_proxy_get_value_array (GstControlBinding * binding,
+    GstClockTime timestamp, GstClockTime interval, guint n_values,
+    gpointer values)
+{
+  GstGLControlBindingProxy *self = (GstGLControlBindingProxy *)
+      binding;
+  GstControlBinding *ref_binding;
+  gboolean ret = FALSE;
+
+  ref_binding = gst_object_get_control_binding (self->ref_object,
+      self->property_name);
+
+  if (ref_binding) {
+    ret = gst_control_binding_get_value_array (ref_binding, timestamp,
+        interval, n_values, values);
+    gst_object_unref (ref_binding);
+  }
+
+  return ret;
+}
+
+static gboolean
+gst_gl_control_binding_proxy_get_g_value_array (GstControlBinding *
+    binding, GstClockTime timestamp, GstClockTime interval, guint n_values,
+    GValue * values)
+{
+  GstGLControlBindingProxy *self = (GstGLControlBindingProxy *)
+      binding;
+  GstControlBinding *ref_binding;
+  gboolean ret = FALSE;
+
+  ref_binding = gst_object_get_control_binding (self->ref_object,
+      self->property_name);
+
+  if (ref_binding) {
+    ret = gst_control_binding_get_g_value_array (ref_binding, timestamp,
+        interval, n_values, values);
+    gst_object_unref (ref_binding);
+  }
+
+  return ret;
+}
+
+
+static void
+    gst_gl_control_binding_proxy_class_init
+    (GstGLControlBindingProxyClass * klass)
+{
+  GstControlBindingClass *cb_class = GST_CONTROL_BINDING_CLASS (klass);
+
+  cb_class->sync_values = gst_gl_control_binding_proxy_sync_values;
+  cb_class->get_value = gst_gl_control_binding_proxy_get_value;
+  cb_class->get_value_array = gst_gl_control_binding_proxy_get_value_array;
+  cb_class->get_g_value_array = gst_gl_control_binding_proxy_get_g_value_array;
+}
+
+GstControlBinding *
+gst_gl_control_binding_proxy_new (GstObject * object,
+    const gchar * property_name, GstObject * ref_object,
+    const gchar * ref_property_name)
+{
+  GstGLControlBindingProxy *self =
+      g_object_new (GST_TYPE_GL_CONTROL_BINDING_PROXY, "object", object,
+      "name", property_name, NULL);
+
+  self->ref_object = ref_object;
+  self->property_name = ref_property_name;
+
+  return (GstControlBinding *) self;
+}
+
+void
+gst_gl_object_add_control_binding_proxy (GstObject * object,
+    GstObject * ref_object, const gchar * prop)
+{
+  GstControlBinding *cb;
+
+  cb = gst_gl_control_binding_proxy_new (object, prop, ref_object, prop);
+  gst_object_add_control_binding (object, cb);
+}
diff --git a/gst-libs/gst/gl/gstglcontrolbindingproxy.h b/gst-libs/gst/gl/gstglcontrolbindingproxy.h
new file mode 100644
index 0000000..b3a9310
--- /dev/null
+++ b/gst-libs/gst/gl/gstglcontrolbindingproxy.h
@@ -0,0 +1,58 @@
+/*
+ * GStreamer
+ * Copyright (C) 2016 Matthew Waters <matthew@centricular.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifndef __GST_GL_PROXY_CONTROL_BINDING_H__
+#define __GST_GL_PROXY_CONTROL_BINDING_H__
+
+#include <gst/gl/gl.h>
+
+G_BEGIN_DECLS
+
+GType gst_gl_control_binding_proxy_get_type (void);
+#define GST_TYPE_GL_CONTROL_BINDING_PROXY  (gst_gl_control_binding_proxy_get_type())
+
+typedef struct _GstGLControlBindingProxy GstGLControlBindingProxy;
+typedef struct _GstGLControlBindingProxyClass GstGLControlBindingProxyClass;
+
+struct _GstGLControlBindingProxy
+{
+  GstControlBinding parent;
+
+  GstObject *ref_object;
+  const gchar *property_name;
+};
+
+struct _GstGLControlBindingProxyClass
+{
+  GstControlBindingClass parent_class;
+};
+
+GstControlBinding *     gst_gl_control_binding_proxy_new            (GstObject * object,
+                                                                     const gchar * property_name,
+                                                                     GstObject * ref_object,
+                                                                     const gchar * ref_property_name);
+
+void                    gst_gl_object_add_control_binding_proxy     (GstObject * object,
+                                                                     GstObject * ref_object,
+                                                                     const gchar * prop);
+
+G_END_DECLS
+
+#endif /* __GST_GL_PROXY_CONTROL_BINDING_H__ */
diff --git a/gst-libs/gst/gl/gstgldebug.c b/gst-libs/gst/gl/gstgldebug.c
new file mode 100644
index 0000000..5b89bf6
--- /dev/null
+++ b/gst-libs/gst/gl/gstgldebug.c
@@ -0,0 +1,518 @@
+/*
+ * GStreamer
+ * Copyright (C) 2015 Matthew Waters <matthew@centricular.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include "gl.h"
+#include "gstgldebug.h"
+#include <glib/gprintf.h>
+#include <string.h>
+
+/**
+ * SECTION:gstgldebug
+ * @short_description: helper routines for dealing with OpenGL debugging
+ * @title: OpenGL debugging
+ * @see_also: #GstGLContext
+ */
+
+#define ASYNC_DEBUG_FILLED (1 << 0)
+#define ASYNC_DEBUG_FROZEN (1 << 1)
+
+/* compatibility defines */
+#ifndef GL_DEBUG_TYPE_ERROR
+#define GL_DEBUG_TYPE_ERROR 0x824C
+#endif
+#ifndef GL_DEBUG_TYPE_DEPRECATED_BEHAVIOR
+#define GL_DEBUG_TYPE_DEPRECATED_BEHAVIOR 0x824D
+#endif
+#ifndef GL_DEBUG_TYPE_UNDEFINED_BEHAVIOR
+#define GL_DEBUG_TYPE_UNDEFINED_BEHAVIOR 0x824E
+#endif
+#ifndef GL_DEBUG_TYPE_PORTABILITY
+#define GL_DEBUG_TYPE_PORTABILITY 0x824F
+#endif
+#ifndef GL_DEBUG_TYPE_PERFORMANCE
+#define GL_DEBUG_TYPE_PERFORMANCE 0x8250
+#endif
+#ifndef GL_DEBUG_TYPE_MARKER
+#define GL_DEBUG_TYPE_MARKER 0x8268
+#endif
+#ifndef GL_DEBUG_TYPE_OTHER
+#define GL_DEBUG_TYPE_OTHER 0x8251
+#endif
+
+#ifndef GL_DEBUG_SEVERITY_HIGH
+#define GL_DEBUG_SEVERITY_HIGH 0x9146
+#endif
+#ifndef GL_DEBUG_SEVERITY_MEDIUM
+#define GL_DEBUG_SEVERITY_MEDIUM 0x9147
+#endif
+#ifndef GL_DEBUG_SEVERITY_LOW
+#define GL_DEBUG_SEVERITY_LOW 0x9148
+#endif
+#ifndef GL_DEBUG_SEVERITY_NOTIFICATION
+#define GL_DEBUG_SEVERITY_NOTIFICATION 0x826B
+#endif
+
+#ifndef GL_DEBUG_SOURCE_API
+#define GL_DEBUG_SOURCE_API 0x8246
+#endif
+#ifndef GL_DEBUG_SOURCE_WINDOW_SYSTEM
+#define GL_DEBUG_SOURCE_WINDOW_SYSTEM 0x8247
+#endif
+#ifndef GL_DEBUG_SOURCE_SHADER_COMPILER
+#define GL_DEBUG_SOURCE_SHADER_COMPILER 0x8248
+#endif
+#ifndef GL_DEBUG_SOURCE_THIRD_PARTY
+#define GL_DEBUG_SOURCE_THIRD_PARTY 0x8249
+#endif
+#ifndef GL_DEBUG_SOURCE_APPLICATION
+#define GL_DEBUG_SOURCE_APPLICATION 0x824A
+#endif
+#ifndef GL_DEBUG_SOURCE_OTHER
+#define GL_DEBUG_SOURCE_OTHER 0x824B
+#endif
+
+GST_DEBUG_CATEGORY_STATIC (gst_performance);
+#define GST_CAT_DEFAULT gst_gl_debug
+GST_DEBUG_CATEGORY_STATIC (GST_CAT_DEFAULT);
+GST_DEBUG_CATEGORY_STATIC (default_debug);
+GST_DEBUG_CATEGORY_STATIC (gst_gl_marker_debug);
+
+static void
+_init_debug (void)
+{
+  static volatile gsize _init = 0;
+
+  if (g_once_init_enter (&_init)) {
+    GST_DEBUG_CATEGORY_GET (gst_performance, "GST_PERFORMANCE");
+    GST_DEBUG_CATEGORY_GET (gst_gl_debug, "gldebug");
+    GST_DEBUG_CATEGORY_GET (default_debug, "default");
+    GST_DEBUG_CATEGORY_INIT (gst_gl_marker_debug, "gldebugmarker", 0,
+        "OpenGL Markers");
+    g_once_init_leave (&_init, 1);
+  }
+}
+
+static void
+_free_async_debug_data (GstGLAsyncDebug * ad)
+{
+  if (ad->debug_msg) {
+    g_free (ad->debug_msg);
+    ad->debug_msg = NULL;
+    if (ad->object)
+      g_object_unref (ad->object);
+    ad->object = NULL;
+    ad->state_flags &= ~ASYNC_DEBUG_FILLED;
+  }
+}
+
+/**
+ * gst_gl_async_debug_init:
+ * @ad: a #GstGLAsyncDebug
+ *
+ * Initialize @ad.  Intended for use with #GstGLAsyncDebug's that are embedded
+ * in other structs.
+ *
+ * Since: 1.8
+ */
+void
+gst_gl_async_debug_init (GstGLAsyncDebug * ad)
+{
+  _init_debug ();
+
+  memset (ad, 0, sizeof (*ad));
+}
+
+/**
+ * gst_gl_async_debug_unset:
+ * @ad: a #GstGLAsyncDebug
+ *
+ * Unset any dynamically allocated data.  Intended for use with
+ * #GstGLAsyncDebug's that are embedded in other structs.
+ */
+void
+gst_gl_async_debug_unset (GstGLAsyncDebug * ad)
+{
+  gst_gl_async_debug_output_log_msg (ad);
+
+  _free_async_debug_data (ad);
+
+  if (ad->notify)
+    ad->notify (ad->user_data);
+}
+
+/**
+ * gst_gl_async_debug_new:
+ * @ad: a #GstGLAsyncDebug
+ *
+ * Free with gst_gl_async_debug_free()
+ *
+ * Returns: a new #GstGLAsyncDebug
+ *
+ * Since: 1.8
+ */
+GstGLAsyncDebug *
+gst_gl_async_debug_new (void)
+{
+  return g_new0 (GstGLAsyncDebug, 1);
+}
+
+/**
+ * gst_gl_async_debug_free:
+ * @ad: a #GstGLAsyncDebug
+ *
+ * Frees @ad
+ *
+ * Since: 1.8
+ */
+void
+gst_gl_async_debug_free (GstGLAsyncDebug * ad)
+{
+  gst_gl_async_debug_unset (ad);
+  g_free (ad);
+}
+
+/**
+ * gst_gl_async_debug_freeze:
+ * @ad: a #GstGLAsyncDebug
+ *
+ * freeze the debug output.  While frozen, any call to
+ * gst_gl_async_debug_output_log_msg() will not output any messages but
+ * subsequent calls to gst_gl_async_debug_store_log_msg() will overwrite previous
+ * messages.
+ *
+ * Since: 1.8
+ */
+void
+gst_gl_async_debug_freeze (GstGLAsyncDebug * ad)
+{
+  ad->state_flags |= ASYNC_DEBUG_FROZEN;
+}
+
+/**
+ * gst_gl_async_debug_thaw:
+ * @ad: a #GstGLAsyncDebug
+ *
+ * unfreeze the debug output.  See gst_gl_async_debug_freeze() for what freezing means
+ *
+ * Since: 1.8
+ */
+void
+gst_gl_async_debug_thaw (GstGLAsyncDebug * ad)
+{
+  ad->state_flags &= ~ASYNC_DEBUG_FROZEN;
+}
+
+#if !defined(GST_DISABLE_GST_DEBUG)
+
+static inline const gchar *
+_debug_severity_to_string (GLenum severity)
+{
+  switch (severity) {
+    case GL_DEBUG_SEVERITY_HIGH:
+      return "high";
+    case GL_DEBUG_SEVERITY_MEDIUM:
+      return "medium";
+    case GL_DEBUG_SEVERITY_LOW:
+      return "low";
+    case GL_DEBUG_SEVERITY_NOTIFICATION:
+      return "notification";
+    default:
+      return "invalid";
+  }
+}
+
+static inline const gchar *
+_debug_source_to_string (GLenum source)
+{
+  switch (source) {
+    case GL_DEBUG_SOURCE_API:
+      return "API";
+    case GL_DEBUG_SOURCE_WINDOW_SYSTEM:
+      return "winsys";
+    case GL_DEBUG_SOURCE_SHADER_COMPILER:
+      return "shader compiler";
+    case GL_DEBUG_SOURCE_THIRD_PARTY:
+      return "third party";
+    case GL_DEBUG_SOURCE_APPLICATION:
+      return "application";
+    case GL_DEBUG_SOURCE_OTHER:
+      return "other";
+    default:
+      return "invalid";
+  }
+}
+
+static inline const gchar *
+_debug_type_to_string (GLenum type)
+{
+  switch (type) {
+    case GL_DEBUG_TYPE_ERROR:
+      return "error";
+    case GL_DEBUG_TYPE_DEPRECATED_BEHAVIOR:
+      return "deprecated";
+    case GL_DEBUG_TYPE_UNDEFINED_BEHAVIOR:
+      return "undefined";
+    case GL_DEBUG_TYPE_PORTABILITY:
+      return "portability";
+    case GL_DEBUG_TYPE_PERFORMANCE:
+      return "performance";
+    case GL_DEBUG_TYPE_MARKER:
+      return "debug marker";
+    case GL_DEBUG_TYPE_OTHER:
+      return "other";
+    default:
+      return "invalid";
+  }
+}
+
+static void GSTGLAPI
+_gst_gl_debug_callback (GLenum source, GLenum type, GLuint id, GLenum severity,
+    GLsizei length, const gchar * message, gpointer user_data)
+{
+  GstGLContext *context = user_data;
+  const gchar *severity_str = _debug_severity_to_string (severity);
+  const gchar *source_str = _debug_source_to_string (source);
+  const gchar *type_str = _debug_type_to_string (type);
+
+  _init_debug ();
+
+  switch (type) {
+    case GL_DEBUG_TYPE_ERROR:
+    case GL_DEBUG_TYPE_UNDEFINED_BEHAVIOR:
+      GST_ERROR_OBJECT (context, "%s: GL %s from %s id:%u, %s", severity_str,
+          type_str, source_str, id, message);
+      break;
+    case GL_DEBUG_TYPE_DEPRECATED_BEHAVIOR:
+    case GL_DEBUG_TYPE_PORTABILITY:
+      GST_FIXME_OBJECT (context, "%s: GL %s from %s id:%u, %s", severity_str,
+          type_str, source_str, id, message);
+      break;
+    case GL_DEBUG_TYPE_PERFORMANCE:
+      GST_CAT_DEBUG_OBJECT (gst_performance, context, "%s: GL %s from %s id:%u,"
+          " %s", severity_str, type_str, source_str, id, message);
+      break;
+    default:
+      GST_DEBUG_OBJECT (context, "%s: GL %s from %s id:%u, %s", severity_str,
+          type_str, source_str, id, message);
+      break;
+  }
+}
+
+G_GNUC_INTERNAL void _gst_gl_debug_enable (GstGLContext * context);
+
+G_GNUC_INTERNAL void
+_gst_gl_debug_enable (GstGLContext * context)
+{
+  const GstGLFuncs *gl = context->gl_vtable;
+  GstDebugLevel level;
+  GLenum debug_types[8];
+  guint i, n = 0;
+
+  _init_debug ();
+
+  if (!gl->DebugMessageCallback) {
+    GST_CAT_INFO_OBJECT (gst_gl_context_debug, context,
+        "No debugging support available");
+    return;
+  }
+
+  level = gst_debug_category_get_threshold (gst_gl_debug);
+
+  if (level < GST_LEVEL_ERROR) {
+    GST_CAT_INFO_OBJECT (gst_gl_context_debug, context,
+        "Disabling GL context debugging (gldebug category debug level < error)");
+    return;
+  }
+
+  GST_CAT_INFO_OBJECT (gst_gl_context_debug, context,
+      "Enabling GL context debugging");
+
+  gl->DebugMessageCallback (_gst_gl_debug_callback, context);
+  if (level >= GST_LEVEL_DEBUG) {
+    /* enable them all */
+    gl->DebugMessageControl (GL_DONT_CARE, GL_DONT_CARE, GL_DONT_CARE, 0, 0,
+        GL_TRUE);
+  } else {
+    if (level >= GST_LEVEL_FIXME) {
+      debug_types[n++] = GL_DEBUG_TYPE_DEPRECATED_BEHAVIOR;
+      debug_types[n++] = GL_DEBUG_TYPE_PORTABILITY;
+    }
+    if (level >= GST_LEVEL_ERROR) {
+      debug_types[n++] = GL_DEBUG_TYPE_ERROR;
+      debug_types[n++] = GL_DEBUG_TYPE_UNDEFINED_BEHAVIOR;
+    }
+    g_assert (n < G_N_ELEMENTS (debug_types));
+    for (i = 0; i < n; i++) {
+      gl->DebugMessageControl (GL_DONT_CARE, debug_types[i], GL_DONT_CARE,
+          0, 0, GL_TRUE);
+    }
+  }
+}
+
+/**
+ * gst_gl_insert_debug_marker:
+ * @context: a #GstGLContext
+ * @format: a printf-style format string
+ * @...: arguments form @format
+ *
+ * Inserts a marker into a GL debug stream.  Requires the 'gldebugmarker'
+ * debug category to be at least %GST_LEVEL_FIXME.
+ *
+ * Since: 1.8
+ */
+void
+gst_gl_insert_debug_marker (GstGLContext * context, const gchar * format, ...)
+{
+  const GstGLFuncs *gl = context->gl_vtable;
+  gchar *string;
+  gint len;
+  va_list args;
+
+  _init_debug ();
+
+  /* are we enabled */
+  if (gst_debug_category_get_threshold (gst_gl_marker_debug) < GST_LEVEL_FIXME)
+    return;
+
+  va_start (args, format);
+  len = gst_info_vasprintf (&string, format, args);
+  va_end (args);
+
+  /* gst_info_vasprintf() returns -1 on error, the various debug marker
+   * functions take len=-1 to mean null terminated */
+  if (len < 0 || string == NULL)
+    /* no debug output */
+    return;
+
+  if (gl->DebugMessageInsert)
+    gl->DebugMessageInsert (GL_DEBUG_SOURCE_THIRD_PARTY, GL_DEBUG_TYPE_MARKER,
+        0, GL_DEBUG_SEVERITY_LOW, (gsize) len, string);
+  else if (gl->InsertEventMarker)
+    gl->InsertEventMarker (len, string);
+  else if (gl->StringMarker)
+    gl->StringMarker (len, string);
+
+  g_free (string);
+}
+
+/**
+ * gst_gl_async_debug_store_log_msg_valist:
+ * @ad: the #GstGLAsyncDebug to store the message in
+ * @cat: the #GstDebugCategory to output the message in
+ * @level: the #GstLevel
+ * @file: the file where the debug message originates from
+ * @function: the function where the debug message originates from
+ * @line: the line in @file where the debug message originates from
+ * @object: (allow-none): a #GObject to associate with the debug message
+ * @format: a printf style format string
+ * @varargs: the list of arguments for @format
+ *
+ * Stores a debug message for later output by gst_gl_async_debug_output_log_msg()
+ *
+ * Since: 1.8
+ */
+void
+gst_gl_async_debug_store_log_msg_valist (GstGLAsyncDebug * ad,
+    GstDebugCategory * cat, GstDebugLevel level, const gchar * file,
+    const gchar * function, gint line, GObject * object, const gchar * format,
+    va_list varargs)
+{
+  gst_gl_async_debug_output_log_msg (ad);
+  _free_async_debug_data (ad);
+
+  if (G_UNLIKELY (level <= GST_LEVEL_MAX && level <= _gst_debug_min)) {
+    if (!cat)
+      cat = default_debug;
+
+    ad->cat = cat;
+    ad->level = level;
+    ad->file = file;
+    ad->function = function;
+    ad->line = line;
+    if (object)
+      ad->object = g_object_ref (object);
+    else
+      ad->object = NULL;
+
+    ad->debug_msg = gst_info_strdup_vprintf (format, varargs);
+    ad->state_flags |= ASYNC_DEBUG_FILLED;
+  }
+}
+
+/**
+ * gst_gl_async_debug_output_log_msg:
+ * @ad: the #GstGLAsyncDebug to store the message in
+ *
+ * Outputs a previously stored debug message.
+ */
+void
+gst_gl_async_debug_output_log_msg (GstGLAsyncDebug * ad)
+{
+  if ((ad->state_flags & ASYNC_DEBUG_FILLED) != 0
+      && (ad->state_flags & ASYNC_DEBUG_FROZEN) == 0) {
+    gchar *msg = NULL;
+
+    if (ad->callback)
+      msg = ad->callback (ad->user_data);
+
+    gst_debug_log (ad->cat, ad->level, ad->file, ad->function, ad->line,
+        ad->object, "%s %s", GST_STR_NULL (ad->debug_msg), msg ? msg : "");
+    g_free (msg);
+    _free_async_debug_data (ad);
+  }
+}
+
+/**
+ * gst_gl_async_debug_store_log_msg:
+ * @ad: the #GstGLAsyncDebug to store the message in
+ * @cat: the #GstDebugCategory to output the message in
+ * @level: the #GstLevel
+ * @file: the file where the debug message originates from
+ * @function: the function where the debug message originates from
+ * @line: the line in @file where the debug message originates from
+ * @object: (allow-none): a #GObject to associate with the debug message
+ * @format: a printf style format string
+ * @...: the list of arguments for @format
+ *
+ * Stores a debug message for later output by gst_gl_async_debug_output_log_msg()
+ *
+ * Since: 1.8
+ */
+void
+gst_gl_async_debug_store_log_msg (GstGLAsyncDebug * ad, GstDebugCategory * cat,
+    GstDebugLevel level, const gchar * file, const gchar * function, gint line,
+    GObject * object, const gchar * format, ...)
+{
+  va_list varargs;
+
+  if (G_UNLIKELY (level <= GST_LEVEL_MAX && level <= _gst_debug_min)) {
+    va_start (varargs, format);
+    gst_gl_async_debug_store_log_msg_valist (ad, cat, level, file, function,
+        line, object, format, varargs);
+    va_end (varargs);
+  }
+}
+#else
+G_GNUC_INTERNAL void _gst_gl_debug_enable (GstGLContext * context);
+#endif
diff --git a/gst-libs/gst/gl/gstgldebug.h b/gst-libs/gst/gl/gstgldebug.h
new file mode 100644
index 0000000..f568a2b
--- /dev/null
+++ b/gst-libs/gst/gl/gstgldebug.h
@@ -0,0 +1,172 @@
+/*
+ * GStreamer
+ * Copyright (C) 2015 Matthew Waters <matthew@centricular.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifndef __GST_GL_DEBUG_H__
+#define __GST_GL_DEBUG_H__
+
+#include <gst/gl/gl.h>
+
+G_BEGIN_DECLS
+
+typedef struct _GstGLAsyncDebug GstGLAsyncDebug;
+
+typedef gchar * (*GstGLAsyncDebugLogGetMessage) (gpointer user_data);
+
+/**
+ * GstGLAsyncDebug:
+ *
+ * #GstGLAsyncDebug an opaque structure and should only be accessed through the
+ * provided API.
+ */
+struct _GstGLAsyncDebug
+{
+  /* <private> */
+  guint             state_flags;
+  GstDebugCategory *cat;
+  GstDebugLevel     level;
+  const gchar      *file;
+  const gchar      *function;
+  gint              line;
+  GObject          *object;
+  gchar            *debug_msg;
+
+  /* <protected> */
+  GstGLAsyncDebugLogGetMessage callback;
+  gpointer          user_data;
+  GDestroyNotify    notify;
+};
+
+GstGLAsyncDebug *   gst_gl_async_debug_new                      (void);
+void                gst_gl_async_debug_free                     (GstGLAsyncDebug * ad);
+void                gst_gl_async_debug_init                     (GstGLAsyncDebug * ad);
+void                gst_gl_async_debug_unset                    (GstGLAsyncDebug * ad);
+void                gst_gl_async_debug_freeze                   (GstGLAsyncDebug * ad);
+void                gst_gl_async_debug_thaw                     (GstGLAsyncDebug * ad);
+
+/**
+ * GST_GL_ASYNC_CAT_LEVEL_LOG_valist:
+ * @ad: the #GstGLAsyncDebug to store the message in
+ * @cat: the #GstDebugCategory to output the message in
+ * @level: the #GstLevel
+ * @object: (allow-none): a #GObject to associate with the debug message
+ * @format: a printf style format string
+ * @varargs: the list of arguments for @format
+ *
+ * Stores a debug message in @ad for later output
+ */
+#define GST_GL_ASYNC_CAT_LEVEL_LOG_valist(ad,cat,level,object,format,varargs)   \
+    gst_gl_async_debug_store_log_msg_valist (ad, cat, level, __FILE__,          \
+        GST_FUNCTION, __LINE__, object, format, varargs)
+
+/**
+ * GST_GL_ASYNC_CAT_LEVEL_LOG:
+ * @ad: the #GstGLAsyncDebug to store the message in
+ * @cat: the #GstDebugCategory to output the message in
+ * @level: the #GstLevel
+ * @object: (allow-none): a #GObject to associate with the debug message
+ * @format: a printf style format string
+ * @...: the list of arguments for @format
+ *
+ * Stores a debug message in @ad for later output
+ */
+#if G_HAVE_ISO_VARARGS
+#define GST_GL_ASYNC_CAT_LEVEL_LOG(ad,cat,level,object,format,...)              \
+    gst_gl_async_debug_store_log_msg (ad, cat, level, __FILE__, GST_FUNCTION,   \
+        __LINE__, object, format, __VA_ARGS__)
+#else /* G_HAVE_ISO_VARARGS */
+#if G_HAVE_GNUC_VARARGS
+#define GST_GL_ASYNC_CAT_LEVEL_LOG(ad,cat,level,object,format,args...)          \
+    gst_gl_async_debug_store_log_msg (ad, cat, level, __FILE__, GST_FUNCTION,   \
+        __LINE__, object, format, ##args)
+#else /* G_HAVE_GNUC_VARARGS */
+static inline void
+GST_GL_ASYNC_CAT_LEVEL_LOG(GstGLAsyncDebug * ad, GstDebugCategory * cat,
+    GstDebugLevel level, GObject * object, const gchar * format, ...)
+{
+  va_list varargs;
+
+  va_start (varargs, format);
+  GST_GL_ASYNC_CAT_LEVEL_LOG_valist (ad, cat, level, object, format, varargs);
+  va_end (varargs);
+}
+#endif /* G_HAVE_GNUC_VARARGS */
+#endif /* G_HAVE_ISO_VARARGS */
+
+#if !defined(GST_DISABLE_GST_DEBUG)
+
+void        gst_gl_insert_debug_marker              (GstGLContext * context,
+                                                     const gchar * format, ...) G_GNUC_PRINTF (2, 3);
+void        gst_gl_async_debug_output_log_msg       (GstGLAsyncDebug * ad);
+void        gst_gl_async_debug_store_log_msg        (GstGLAsyncDebug * ad,
+                                                     GstDebugCategory * cat,
+                                                     GstDebugLevel level,
+                                                     const gchar * file,
+                                                     const gchar * function,
+                                                     gint line,
+                                                     GObject * object,
+                                                     const gchar * format, ...) G_GNUC_PRINTF (8, 9);
+void        gst_gl_async_debug_store_log_msg_valist (GstGLAsyncDebug * ad,
+                                                     GstDebugCategory * cat,
+                                                     GstDebugLevel level,
+                                                     const gchar * file,
+                                                     const gchar * function,
+                                                     gint line,
+                                                     GObject * object,
+                                                     const gchar * format,
+                                                     va_list varargs) G_GNUC_PRINTF (8, 0);
+
+#else /* GST_DISABLE_GST_DEBUG */
+
+#define gst_gl_async_debug_output_log_msg(ad) G_STMT_START{ }G_STMT_END
+#define gst_gl_async_debug_store_log_msg_valist(ad,cat,level,file,function,line,object,format,args) G_STMT_START{ }G_STMT_END
+
+#if G_HAVE_ISO_VARARGS
+
+#define gst_gl_insert_debug_marker(...) G_STMT_START{ }G_STMT_END
+#define gst_gl_async_debug_store_log_msg(...) G_STMT_START{ }G_STMT_END
+
+#else /* G_HAVE_ISO_VARARGS */
+#if G_HAVE_GNUC_VARARGS
+
+#define gst_gl_insert_debug_marker(args...) G_STMT_START{ }G_STMT_END
+#define gst_gl_async_debug_store_log_msg(args...) G_STMT_START{ }G_STMT_END
+
+#else /* G_HAVE_GNUC_VARARGS */
+
+static inline void
+gst_gl_insert_debug_marker (GstGLContext * context, const gchar * format, ...)
+{
+}
+
+static inline void
+gst_gl_async_debug_store_log_msg (GstGLAsyncDebug * ad,
+    GstDebugCategory * cat, GstDebugLevel level, const gchar * file,
+    const gchar * function, gint line, GstObject * object,
+    const gchar * format, ...)
+{
+}
+
+#endif /* G_HAVE_GNUC_VARARGS */
+#endif /* G_HAVE_ISO_VARARGS */
+#endif /* GST_DISABLE_GST_DEBUG */
+
+G_END_DECLS
+
+#endif /* __GST_GL_DEBUG_H__ */
diff --git a/gst-libs/gst/gl/gstgldisplay.c b/gst-libs/gst/gl/gstgldisplay.c
index 51c1df5..5cae2f4 100644
--- a/gst-libs/gst/gl/gstgldisplay.c
+++ b/gst-libs/gst/gl/gstgldisplay.c
@@ -139,8 +139,8 @@
 
   GST_TRACE ("init %p", display);
 
-  gst_gl_base_buffer_init_once ();
-  gst_gl_memory_init ();
+  gst_gl_buffer_init_once ();
+  gst_gl_memory_pbo_init_once ();
 
 #if GST_GL_HAVE_PLATFORM_EGL
   gst_egl_image_memory_init ();
@@ -437,8 +437,11 @@
       continue;
     }
 
+    if (thread == NULL)
+      return context;
+
     context_thread = gst_gl_context_get_thread (context);
-    if (thread != NULL && thread == context_thread) {
+    if (thread != context_thread) {
       g_thread_unref (context_thread);
       gst_object_unref (context);
       prev = l;
@@ -497,7 +500,7 @@
     goto out;
   }
 
-  if (collision == context) {
+  if (thread == collision_thread) {
     ret = TRUE;
     goto out;
   }
@@ -533,7 +536,7 @@
   GWeakRef *ref;
 
   g_return_val_if_fail (GST_IS_GL_DISPLAY (display), FALSE);
-  g_return_val_if_fail (GST_GL_IS_CONTEXT (context), FALSE);
+  g_return_val_if_fail (GST_IS_GL_CONTEXT (context), FALSE);
 
   context_display = gst_gl_context_get_display (context);
   g_assert (context_display == display);
@@ -543,6 +546,13 @@
   if (thread) {
     collision = _get_gl_context_for_thread_unlocked (display, thread);
     g_thread_unref (thread);
+
+    /* adding the same context is a no-op */
+    if (context == collision) {
+      ret = TRUE;
+      goto out;
+    }
+
     if (_check_collision (context, collision)) {
       ret = FALSE;
       goto out;
diff --git a/gst-libs/gst/gl/gstgldisplay.h b/gst-libs/gst/gl/gstgldisplay.h
index 9341884..7f49a44 100644
--- a/gst-libs/gst/gl/gstgldisplay.h
+++ b/gst-libs/gst/gl/gstgldisplay.h
@@ -40,6 +40,17 @@
 #define GST_GL_DISPLAY_CAST(obj)        ((GstGLDisplay*)(obj))
 #define GST_GL_DISPLAY_GET_CLASS(o)     (G_TYPE_INSTANCE_GET_CLASS((o), GST_TYPE_GL_DISPLAY, GstGLDisplayClass))
 
+/**
+ * GstGLDisplayType:
+ * @GST_GL_DISPLAY_TYPE_NONE: no display type
+ * @GST_GL_DISPLAY_TYPE_X11: X11 display
+ * @GST_GL_DISPLAY_TYPE_WAYLAND: Wayland display
+ * @GST_GL_DISPLAY_TYPE_COCOA: Cocoa display
+ * @GST_GL_DISPLAY_TYPE_WIN32: Win32 display
+ * @GST_GL_DISPLAY_TYPE_DISPMANX: Dispmanx display
+ * @GST_GL_DISPLAY_TYPE_EGL: EGL display
+ * @GST_GL_DISPLAY_TYPE_ANY: any display type
+ */
 typedef enum
 {
   GST_GL_DISPLAY_TYPE_NONE = 0,
@@ -84,7 +95,7 @@
 guintptr         gst_gl_display_get_handle             (GstGLDisplay * display);
 GstGLDisplayType gst_gl_display_get_handle_type        (GstGLDisplay * display);
 void             gst_gl_display_filter_gl_api          (GstGLDisplay * display,
-                                                        GstGLAPI api);
+                                                        GstGLAPI gl_api);
 GstGLAPI         gst_gl_display_get_gl_api             (GstGLDisplay * display);
 GstGLAPI         gst_gl_display_get_gl_api_unlocked    (GstGLDisplay * display);
 
diff --git a/gst-libs/gst/gl/gstgldownload.c b/gst-libs/gst/gl/gstgldownload.c
deleted file mode 100644
index 8f045c7..0000000
--- a/gst-libs/gst/gl/gstgldownload.c
+++ /dev/null
@@ -1,504 +0,0 @@
-/*
- * GStreamer
- * Copyright (C) 2012 Matthew Waters <ystree00@gmail.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include <stdio.h>
-
-#include "gl.h"
-#include "gstgldownload.h"
-
-/**
- * SECTION:gstgldownload
- * @short_description: an object that downloads GL textures
- * @see_also: #GstGLUpload, #GstGLMemory
- *
- * #GstGLDownload is an object that downloads GL textures into system memory.
- *
- * A #GstGLDownload can be created with gst_gl_download_new()
- */
-
-#define USING_OPENGL(context) (gst_gl_context_check_gl_version (context, GST_GL_API_OPENGL, 1, 0))
-#define USING_OPENGL3(context) (gst_gl_context_check_gl_version (context, GST_GL_API_OPENGL3, 3, 1))
-#define USING_GLES(context) (gst_gl_context_check_gl_version (context, GST_GL_API_GLES, 1, 0))
-#define USING_GLES2(context) (gst_gl_context_check_gl_version (context, GST_GL_API_GLES2, 2, 0))
-#define USING_GLES3(context) (gst_gl_context_check_gl_version (context, GST_GL_API_GLES2, 3, 0))
-
-static gboolean _do_download (GstGLDownload * download, GstBuffer * inbuf);
-static gboolean _init_download (GstGLDownload * download);
-static gboolean _gst_gl_download_perform_with_data_unlocked (GstGLDownload *
-    download, GLuint texture_id, GLuint texture_target,
-    gpointer data[GST_VIDEO_MAX_PLANES]);
-static void gst_gl_download_reset (GstGLDownload * download);
-
-/* *INDENT-ON* */
-/* Define the maximum number of planes we can handle - max 2 views per buffer */
-#define GST_GL_DOWNLOAD_MAX_VIEWS 2
-#define GST_GL_DOWNLOAD_MAX_PLANES (GST_VIDEO_MAX_PLANES * GST_GL_DOWNLOAD_MAX_VIEWS)
-
-struct _GstGLDownloadPrivate
-{
-  const gchar *YUY2_UYVY;
-  const gchar *I420_YV12;
-  const gchar *AYUV;
-  const gchar *ARGB;
-  const gchar *vert_shader;
-
-  GstBuffer *inbuf;
-  /* Temporary wrapped texture for perform_with_data download */
-  GstGLMemory *in_tex;
-
-  /* Output data planes */
-  gpointer out_data[GST_GL_DOWNLOAD_MAX_PLANES];
-};
-
-GST_DEBUG_CATEGORY_STATIC (gst_gl_download_debug);
-#define GST_CAT_DEFAULT gst_gl_download_debug
-
-#define DEBUG_INIT \
-  GST_DEBUG_CATEGORY_INIT (gst_gl_download_debug, "gldownload", 0, "download");
-
-G_DEFINE_TYPE_WITH_CODE (GstGLDownload, gst_gl_download, GST_TYPE_OBJECT,
-    DEBUG_INIT);
-static void gst_gl_download_finalize (GObject * object);
-
-#define GST_GL_DOWNLOAD_GET_PRIVATE(obj) (G_TYPE_INSTANCE_GET_PRIVATE ((obj), \
-    GST_TYPE_GL_DOWNLOAD, GstGLDownloadPrivate))
-
-static void
-gst_gl_download_class_init (GstGLDownloadClass * klass)
-{
-  g_type_class_add_private (klass, sizeof (GstGLDownloadPrivate));
-
-  G_OBJECT_CLASS (klass)->finalize = gst_gl_download_finalize;
-}
-
-static void
-gst_gl_download_init (GstGLDownload * download)
-{
-
-  download->priv = GST_GL_DOWNLOAD_GET_PRIVATE (download);
-
-  gst_video_info_init (&download->info);
-}
-
-/**
- * gst_gl_download_new:
- * @context: a #GstGLContext
- *
- * Returns: a new #GstGLDownload object
- */
-GstGLDownload *
-gst_gl_download_new (GstGLContext * context)
-{
-  GstGLDownload *download;
-
-  download = g_object_new (GST_TYPE_GL_DOWNLOAD, NULL);
-
-  download->context = gst_object_ref (context);
-  download->convert = gst_gl_color_convert_new (context);
-
-  return download;
-}
-
-static void
-gst_gl_download_finalize (GObject * object)
-{
-  GstGLDownload *download;
-
-  download = GST_GL_DOWNLOAD (object);
-
-  gst_gl_download_reset (download);
-
-  if (download->convert) {
-    gst_object_unref (download->convert);
-    download->convert = NULL;
-  }
-
-  if (download->context) {
-    gst_object_unref (download->context);
-    download->context = NULL;
-  }
-
-  G_OBJECT_CLASS (gst_gl_download_parent_class)->finalize (object);
-}
-
-static void
-gst_gl_download_reset (GstGLDownload * download)
-{
-  if (download->priv->in_tex) {
-    gst_memory_unref ((GstMemory *) download->priv->in_tex);
-    download->priv->in_tex = NULL;
-  }
-}
-
-/**
- * gst_gl_download_set_format:
- * @download: a #GstGLDownload
- * @out_info: a #GstVideoInfo
- *
- * Initializes @download with the information required for download.
- */
-void
-gst_gl_download_set_format (GstGLDownload * download, GstVideoInfo * out_info)
-{
-  g_return_if_fail (download != NULL);
-  g_return_if_fail (GST_VIDEO_INFO_FORMAT (out_info) !=
-      GST_VIDEO_FORMAT_UNKNOWN);
-  g_return_if_fail (GST_VIDEO_INFO_FORMAT (out_info) !=
-      GST_VIDEO_FORMAT_ENCODED);
-
-  GST_OBJECT_LOCK (download);
-
-  if (gst_video_info_is_equal (&download->info, out_info)) {
-    GST_OBJECT_UNLOCK (download);
-    return;
-  }
-
-  gst_gl_download_reset (download);
-  download->initted = FALSE;
-  download->info = *out_info;
-
-  GST_OBJECT_UNLOCK (download);
-}
-
-static GstCaps *
-_set_caps_features (const GstCaps * caps, const gchar * feature_name)
-{
-  GstCaps *tmp = gst_caps_copy (caps);
-  guint n = gst_caps_get_size (tmp);
-  guint i = 0;
-
-  for (i = 0; i < n; i++) {
-    GstCapsFeatures *features;
-
-    features = gst_caps_features_new (feature_name, NULL);
-    gst_caps_set_features (tmp, i, features);
-  }
-
-  return tmp;
-}
-
-GstCaps *
-gst_gl_download_transform_caps (GstGLContext * context,
-    GstPadDirection direction, GstCaps * caps, GstCaps * filter)
-{
-  GstCaps *gl_templ, *templ, *result, *tmp;
-
-  templ =
-      gst_caps_from_string (GST_VIDEO_CAPS_MAKE (GST_GL_COLOR_CONVERT_FORMATS));
-  gl_templ =
-      gst_caps_from_string (GST_VIDEO_CAPS_MAKE_WITH_FEATURES
-      (GST_CAPS_FEATURE_MEMORY_GL_MEMORY, GST_GL_COLOR_CONVERT_FORMATS));
-
-  if (direction == GST_PAD_SRC) {
-    tmp = gst_caps_intersect_full (caps, templ, GST_CAPS_INTERSECT_FIRST);
-    result = _set_caps_features (tmp, GST_CAPS_FEATURE_MEMORY_GL_MEMORY);
-    gst_caps_unref (tmp);
-    tmp = result;
-  } else {
-    tmp = gst_caps_ref (caps);
-  }
-
-  result =
-      gst_gl_color_convert_transform_caps (context, direction, tmp, filter);
-  gst_caps_unref (tmp);
-  tmp = result;
-
-  if (direction == GST_PAD_SINK) {
-    result = _set_caps_features (tmp, GST_CAPS_FEATURE_MEMORY_SYSTEM_MEMORY);
-    gst_caps_unref (tmp);
-    tmp = result;
-    result = gst_caps_intersect_full (tmp, templ, GST_CAPS_INTERSECT_FIRST);
-    gst_caps_unref (tmp);
-    tmp = result;
-  }
-
-  if (filter) {
-    result = gst_caps_intersect_full (filter, tmp, GST_CAPS_INTERSECT_FIRST);
-    gst_caps_unref (tmp);
-  } else {
-    result = tmp;
-  }
-  gst_caps_unref (templ);
-  gst_caps_unref (gl_templ);
-
-  return result;
-}
-
-/**
- * gst_gl_download_perform_with_data:
- * @download: a #GstGLDownload
- * @texture_id: the texture id to download
- * @texture_target: the GL texture target
- * @data: (out): where the downloaded data should go
- *
- * Downloads @texture_id into @data. @data size and format is specified by
- * the #GstVideoFormat passed to gst_gl_download_set_format()
- *
- * This method can only be used for download a single view.
- *
- * Returns: whether the download was successful
- */
-gboolean
-gst_gl_download_perform_with_data (GstGLDownload * download,
-    GLuint texture_id, GLuint texture_target,
-    gpointer data[GST_VIDEO_MAX_PLANES])
-{
-  gboolean ret;
-
-  g_return_val_if_fail (download != NULL, FALSE);
-
-  GST_OBJECT_LOCK (download);
-  ret =
-      _gst_gl_download_perform_with_data_unlocked (download,
-      texture_id, texture_target, data);
-  GST_OBJECT_UNLOCK (download);
-
-  return ret;
-}
-
-/* This method only supports one input texture */
-static gboolean
-_gst_gl_download_perform_with_data_unlocked (GstGLDownload * download,
-    GLuint texture_id, GLuint texture_target,
-    gpointer data[GST_VIDEO_MAX_PLANES])
-{
-  guint i;
-  gboolean res;
-  GstBuffer *inbuf;
-  guint out_width, out_height;
-
-  g_return_val_if_fail (download != NULL, FALSE);
-  g_return_val_if_fail (texture_id > 0, FALSE);
-  g_return_val_if_fail (GST_VIDEO_INFO_FORMAT (&download->info) !=
-      GST_VIDEO_FORMAT_UNKNOWN
-      && GST_VIDEO_INFO_FORMAT (&download->info) != GST_VIDEO_FORMAT_ENCODED,
-      FALSE);
-
-  for (i = 0; i < GST_VIDEO_INFO_N_PLANES (&download->info); i++) {
-    g_return_val_if_fail (data[i] != NULL, FALSE);
-  }
-
-  if (!download->priv->in_tex) {
-    GstVideoInfo temp_info;
-
-    gst_video_info_set_format (&temp_info, GST_VIDEO_FORMAT_RGBA,
-        GST_VIDEO_INFO_WIDTH (&download->info),
-        GST_VIDEO_INFO_HEIGHT (&download->info));
-
-    download->priv->in_tex =
-        gst_gl_memory_wrapped_texture (download->context,
-        texture_id, texture_target, &temp_info, 0, NULL, NULL, NULL);
-  }
-
-
-  out_width = GST_VIDEO_INFO_WIDTH (&download->info);
-  out_height = GST_VIDEO_INFO_HEIGHT (&download->info);
-
-  GST_TRACE ("doing download of texture:%u (%ux%u)",
-      download->priv->in_tex->tex_id, out_width, out_height);
-
-  download->priv->in_tex->tex_id = texture_id;
-
-  inbuf = gst_buffer_new ();
-  gst_buffer_append_memory (inbuf,
-      gst_memory_ref ((GstMemory *) download->priv->in_tex));
-
-  for (i = 0; i < GST_VIDEO_MAX_PLANES; i++)
-    download->priv->out_data[i] = data[i];
-  /* Clear remaining planes for safety */
-  while (i < GST_GL_DOWNLOAD_MAX_PLANES)
-    download->priv->out_data[i++] = NULL;
-
-  res = _do_download (download, inbuf);
-
-  download->priv->inbuf = NULL;
-  gst_buffer_unref (inbuf);
-
-  return res;
-}
-
-static gboolean
-_init_download (GstGLDownload * download)
-{
-  GstVideoFormat v_format;
-  GstCaps *in_caps, *out_caps;
-  GstCapsFeatures *out_gl_features;
-  gboolean res;
-
-  v_format = GST_VIDEO_INFO_FORMAT (&download->info);
-
-  if (download->initted)
-    return TRUE;
-
-  GST_TRACE ("initializing texture download for format %s",
-      gst_video_format_to_string (v_format));
-
-  if (USING_GLES2 (download->context) && !USING_GLES3 (download->context)) {
-    /* GL_RGBA is the only officially supported texture format in GLES2 */
-    if (v_format == GST_VIDEO_FORMAT_RGB || v_format == GST_VIDEO_FORMAT_BGR) {
-      gst_gl_context_set_error (download->context, "Cannot download RGB "
-          "textures in GLES2");
-      return FALSE;
-    }
-  }
-
-  out_gl_features =
-      gst_caps_features_from_string (GST_CAPS_FEATURE_MEMORY_GL_MEMORY);
-  out_caps = gst_video_info_to_caps (&download->info);
-  gst_caps_set_features (out_caps, 0, out_gl_features);
-
-  in_caps = gst_caps_copy (out_caps);
-  gst_caps_set_simple (in_caps, "format", G_TYPE_STRING, "RGBA", NULL);
-
-  res = gst_gl_color_convert_set_caps (download->convert, in_caps, out_caps);
-
-  gst_caps_unref (in_caps);
-  gst_caps_unref (out_caps);
-
-  return res;
-}
-
-static gboolean
-_do_download (GstGLDownload * download, GstBuffer * inbuf)
-{
-  GstBuffer *outbuf;
-  GstMapInfo map_info;
-  gboolean ret = TRUE;
-  gint i;
-  GstVideoInfo *info;
-  guint views, out_planes;
-  gpointer *data = download->priv->out_data;
-
-  if (!download->initted) {
-    if (!_init_download (download)) {
-      GST_DEBUG_OBJECT (download, "Failed to initialise");
-      return FALSE;
-    }
-  }
-
-  outbuf = gst_gl_color_convert_perform (download->convert, inbuf);
-  if (!outbuf) {
-    GST_DEBUG_OBJECT (download, "Failed to colour convert for output");
-    return FALSE;
-  }
-
-  info = &download->info;
-  if (GST_VIDEO_INFO_MULTIVIEW_MODE (info) ==
-      GST_VIDEO_MULTIVIEW_MODE_SEPARATED)
-    views = GST_VIDEO_INFO_VIEWS (info);
-  else
-    views = 1;
-  out_planes = GST_VIDEO_INFO_N_PLANES (info) * views;
-
-  for (i = 0; i < out_planes; i++) {
-    GstMemory *out_mem = gst_buffer_peek_memory (outbuf, i);
-    gpointer temp_data = ((GstGLBaseBuffer *) out_mem)->data;
-    ((GstGLBaseBuffer *) out_mem)->data = data[i];
-
-    if (!gst_memory_map (out_mem, &map_info, GST_MAP_READ)) {
-      GST_ERROR_OBJECT (download, "Failed to map memory");
-      ret = FALSE;
-    }
-    gst_memory_unmap (out_mem, &map_info);
-    ((GstGLBaseBuffer *) out_mem)->data = temp_data;
-    GST_MINI_OBJECT_FLAG_SET (out_mem, GST_GL_BASE_BUFFER_FLAG_NEED_DOWNLOAD);
-  }
-
-  gst_buffer_unref (outbuf);
-
-  return ret;
-}
-
-static gboolean
-_gst_gl_download_perform_unlocked (GstGLDownload * download,
-    GstBuffer * inbuf, GstBuffer * outbuf)
-{
-  guint i;
-  gboolean res = FALSE;
-  guint out_width, out_height;
-  GstVideoFrame out_frame;
-
-  g_return_val_if_fail (download != NULL, FALSE);
-  g_return_val_if_fail (GST_VIDEO_INFO_FORMAT (&download->info) !=
-      GST_VIDEO_FORMAT_UNKNOWN
-      && GST_VIDEO_INFO_FORMAT (&download->info) != GST_VIDEO_FORMAT_ENCODED,
-      FALSE);
-
-  out_width = GST_VIDEO_INFO_WIDTH (&download->info);
-  out_height = GST_VIDEO_INFO_HEIGHT (&download->info);
-
-  GST_TRACE_OBJECT (download, "doing download of buffer %" GST_PTR_FORMAT
-      " (%ux%u)", inbuf, out_width, out_height);
-
-  /* FIXME: Map multiple views */
-  if (!gst_video_frame_map (&out_frame, &download->info, outbuf, GST_MAP_WRITE))
-    return FALSE;
-
-  for (i = 0; i < GST_VIDEO_INFO_N_PLANES (&download->info); i++) {
-    if (out_frame.data[i] == NULL)
-      goto fail;
-    download->priv->out_data[i] = out_frame.data[i];
-  }
-  while (i < GST_GL_DOWNLOAD_MAX_PLANES)
-    download->priv->out_data[i++] = NULL;
-
-  res = _do_download (download, inbuf);
-
-fail:
-  gst_video_frame_unmap (&out_frame);
-  download->priv->inbuf = NULL;
-
-  return res;
-}
-
-/**
- * gst_gl_download_perform:
- * @download: a #GstGLDownload
- * @inbuf: (transfer none): a #GstBuffer input buffer
- * @outbuf: (transfer none) (out): a #GstBuffer output buffer
- *
- * Downloads the contents of @inbuf into @outbuf.
- *
- * The output buffer contents must match the #GstVideoFormat passed
- * to gst_gl_download_set_format(), and the input buffer must
- * contain #GstGLMemory memory items.
- *
- * This method supports downloading multiple views.
- *
- * Returns: whether the download was successful
- */
-gboolean
-gst_gl_download_perform (GstGLDownload * download,
-    GstBuffer * inbuf, GstBuffer * outbuf)
-{
-  gboolean ret;
-
-  g_return_val_if_fail (download != NULL, FALSE);
-
-  GST_OBJECT_LOCK (download);
-  ret = _gst_gl_download_perform_unlocked (download, inbuf, outbuf);
-  GST_OBJECT_UNLOCK (download);
-
-  return ret;
-}
diff --git a/gst-libs/gst/gl/gstgldownload.h b/gst-libs/gst/gl/gstgldownload.h
deleted file mode 100644
index d476854..0000000
--- a/gst-libs/gst/gl/gstgldownload.h
+++ /dev/null
@@ -1,89 +0,0 @@
-/*
- * GStreamer
- * Copyright (C) 2012 Matthew Waters <ystree00@gmail.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-#ifndef __GST_GL_DOWNLOAD_H__
-#define __GST_GL_DOWNLOAD_H__
-
-#include <gst/video/video.h>
-#include <gst/gstmemory.h>
-
-#include <gst/gl/gl.h>
-
-G_BEGIN_DECLS
-
-GType gst_gl_download_get_type (void);
-#define GST_TYPE_GL_DOWNLOAD (gst_gl_download_get_type())
-#define GST_GL_DOWNLOAD(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_GL_DOWNLOAD,GstGLDownload))
-#define GST_GL_DOWNLOAD_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_GL_DISPLAY,GstGLDownloadClass))
-#define GST_IS_GL_DOWNLOAD(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_GL_DOWNLOAD))
-#define GST_IS_GL_DOWNLOAD_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_GL_DOWNLOAD))
-#define GST_GL_DOWNLOAD_CAST(obj) ((GstGLDownload*)(obj))
-
-/**
- * GstGLDownload:
- *
- * Opaque #GstGLDownload object
- */
-struct _GstGLDownload
-{
-  /* <private> */
-  GstObject        parent;
-
-  GstGLContext     *context;
-  GstGLColorConvert *convert;
-
-  /* output data */
-  GstVideoInfo     info;
-
-  gboolean         initted;
-
-  GstGLDownloadPrivate *priv;
-
-  gpointer _reserved[GST_PADDING];
-};
-
-/**
- * GstGLDownloadClass:
- *
- * The #GstGLDownloadClass struct only contains private data
- */
-struct _GstGLDownloadClass
-{
-  /* <private> */
-  GstObjectClass object_class;
-};
-
-GstGLDownload * gst_gl_download_new          (GstGLContext * context);
-
-void gst_gl_download_set_format                (GstGLDownload * download, GstVideoInfo * out_info);
-GstCaps * gst_gl_download_transform_caps       (GstGLContext * convert,
-                                                GstPadDirection direction,
-                                                GstCaps * caps,
-                                                GstCaps * filter);
-
-gboolean gst_gl_download_perform_with_data          (GstGLDownload * download,
-                                                     GLuint texture_id, GLuint texture_target,
-                                                     gpointer data[GST_VIDEO_MAX_PLANES]);
-gboolean gst_gl_download_perform (GstGLDownload * download,
-                                  GstBuffer *inbuf, GstBuffer *outbuf);
-
-G_END_DECLS
-
-#endif /* __GST_GL_DOWNLOAD_H__ */
diff --git a/gst-libs/gst/gl/gstglfeature.c b/gst-libs/gst/gl/gstglfeature.c
index 4a5d876..baf29b1 100644
--- a/gst-libs/gst/gl/gstglfeature.c
+++ b/gst-libs/gst/gl/gstglfeature.c
@@ -27,6 +27,21 @@
 #include "gl.h"
 #include "gstglfeature.h"
 
+#define GST_CAT_DEFAULT gl_feature
+GST_DEBUG_CATEGORY_STATIC (GST_CAT_DEFAULT);
+
+static void
+_init_debug (void)
+{
+  static volatile gsize _init = 0;
+
+  if (g_once_init_enter (&_init)) {
+    GST_DEBUG_CATEGORY_INIT (GST_CAT_DEFAULT, "glfeature", 0,
+        "OpenGL feature detection");
+    g_once_init_leave (&_init, 1);
+  }
+}
+
 gboolean
 gst_gl_check_extension (const char *name, const gchar * ext)
 {
@@ -189,8 +204,7 @@
   for (func_num = 0; data->functions[func_num].name; func_num++) {
     void *func;
 
-    if (full_function_name)
-      g_free (full_function_name);
+    g_free (full_function_name);
 
     full_function_name = g_strconcat ("gl", data->functions[func_num].name,
         suffix, NULL);
@@ -251,6 +265,8 @@
 {
   int i;
 
+  _init_debug ();
+
   for (i = 0; i < G_N_ELEMENTS (gst_gl_feature_ext_functions_data); i++) {
     _gst_gl_feature_check (context, "GL",
         gst_gl_feature_ext_functions_data + i, gl_major, gl_minor,
diff --git a/gst-libs/gst/gl/gstglfeature.h b/gst-libs/gst/gl/gstglfeature.h
index 0bbcda6..fdc3137 100644
--- a/gst-libs/gst/gl/gstglfeature.h
+++ b/gst-libs/gst/gl/gstglfeature.h
@@ -97,7 +97,7 @@
 gboolean
 gst_gl_check_extension (const char *name, const gchar * ext);
 
-gboolean
+G_GNUC_INTERNAL gboolean
 _gst_gl_feature_check (GstGLContext *context,
                      const char *driver_prefix,
                      const GstGLFeatureData *data,
@@ -105,7 +105,7 @@
                      int gl_minor,
                      const char *extensions_string);
 
-void
+G_GNUC_INTERNAL void
 _gst_gl_feature_check_ext_functions (GstGLContext *context,
                                    int gl_major,
                                    int gl_minor,
diff --git a/gst-libs/gst/gl/gstglfilter.c b/gst-libs/gst/gl/gstglfilter.c
index 78bcbc9..1e18e41 100644
--- a/gst-libs/gst/gl/gstglfilter.c
+++ b/gst-libs/gst/gl/gstglfilter.c
@@ -35,24 +35,31 @@
 #define GST_CAT_DEFAULT gst_gl_filter_debug
 GST_DEBUG_CATEGORY_STATIC (GST_CAT_DEFAULT);
 
-
+/* *INDENT-OFF* */
 static GstStaticPadTemplate gst_gl_filter_src_pad_template =
 GST_STATIC_PAD_TEMPLATE ("src",
     GST_PAD_SRC,
     GST_PAD_ALWAYS,
-    GST_STATIC_CAPS (GST_VIDEO_CAPS_MAKE_WITH_FEATURES
-        (GST_CAPS_FEATURE_MEMORY_GL_MEMORY,
-            "RGBA"))
-    );
+    GST_STATIC_CAPS ("video/x-raw(" GST_CAPS_FEATURE_MEMORY_GL_MEMORY "), "
+      "format = (string) RGBA, "
+      "width = " GST_VIDEO_SIZE_RANGE ", "
+      "height = " GST_VIDEO_SIZE_RANGE ", "
+      "framerate = " GST_VIDEO_FPS_RANGE ","
+      "texture-target = (string) 2D"
+    ));
 
 static GstStaticPadTemplate gst_gl_filter_sink_pad_template =
 GST_STATIC_PAD_TEMPLATE ("sink",
     GST_PAD_SINK,
     GST_PAD_ALWAYS,
-    GST_STATIC_CAPS (GST_VIDEO_CAPS_MAKE_WITH_FEATURES
-        (GST_CAPS_FEATURE_MEMORY_GL_MEMORY,
-            "RGBA"))
-    );
+    GST_STATIC_CAPS ("video/x-raw(" GST_CAPS_FEATURE_MEMORY_GL_MEMORY "), "
+      "format = (string) RGBA, "
+      "width = " GST_VIDEO_SIZE_RANGE ", "
+      "height = " GST_VIDEO_SIZE_RANGE ", "
+      "framerate = " GST_VIDEO_FPS_RANGE ","
+      "texture-target = (string) 2D"
+    ));
+/* *INDENT-ON* */
 
 /* Properties */
 enum
@@ -63,7 +70,8 @@
 #define gst_gl_filter_parent_class parent_class
 G_DEFINE_TYPE_WITH_CODE (GstGLFilter, gst_gl_filter, GST_TYPE_GL_BASE_FILTER,
     GST_DEBUG_CATEGORY_INIT (gst_gl_filter_debug, "glfilter", 0,
-        "glfilter element"););
+        "glfilter element");
+    );
 
 static void gst_gl_filter_set_property (GObject * object, guint prop_id,
     const GValue * value, GParamSpec * pspec);
@@ -90,6 +98,8 @@
     GstCaps * outcaps);
 static gboolean gst_gl_filter_gl_start (GstGLBaseFilter * filter);
 static void gst_gl_filter_gl_stop (GstGLBaseFilter * filter);
+static gboolean gst_gl_filter_gl_set_caps (GstGLBaseFilter * bt,
+    GstCaps * incaps, GstCaps * outcaps);
 
 static void
 gst_gl_filter_class_init (GstGLFilterClass * klass)
@@ -117,6 +127,7 @@
 
   GST_GL_BASE_FILTER_CLASS (klass)->gl_start = gst_gl_filter_gl_start;
   GST_GL_BASE_FILTER_CLASS (klass)->gl_stop = gst_gl_filter_gl_stop;
+  GST_GL_BASE_FILTER_CLASS (klass)->gl_set_caps = gst_gl_filter_gl_set_caps;
 
   klass->transform_internal_caps = default_transform_internal_caps;
 
@@ -176,44 +187,11 @@
 {
   GstGLFilter *filter = GST_GL_FILTER (base_filter);
   GstGLFilterClass *filter_class = GST_GL_FILTER_GET_CLASS (filter);
-  GstGLContext *context = GST_GL_BASE_FILTER (filter)->context;
-  gint out_width, out_height;
-
-  out_width = GST_VIDEO_INFO_WIDTH (&filter->out_info);
-  out_height = GST_VIDEO_INFO_HEIGHT (&filter->out_info);
-
-  if (filter->fbo) {
-    gst_gl_context_del_fbo (context, filter->fbo, filter->depthbuffer);
-    filter->fbo = 0;
-    filter->depthbuffer = 0;
-  }
-  //blocking call, generate a FBO
-  if (!gst_gl_context_gen_fbo (context, out_width, out_height,
-          &filter->fbo, &filter->depthbuffer))
-    goto context_error;
 
   if (filter_class->display_init_cb)
     filter_class->display_init_cb (filter);
 
-  if (filter_class->init_fbo) {
-    if (!filter_class->init_fbo (filter))
-      goto error;
-  }
-
   return TRUE;
-
-context_error:
-  {
-    GST_ELEMENT_ERROR (filter, RESOURCE, NOT_FOUND, ("Could not generate FBO"),
-        (NULL));
-    return FALSE;
-  }
-error:
-  {
-    GST_ELEMENT_ERROR (filter, LIBRARY, INIT,
-        ("Subclass failed to initialize."), (NULL));
-    return FALSE;
-  }
 }
 
 static void
@@ -262,8 +240,8 @@
   GValue fpar = { 0, }, tpar = {
   0,};
 
-  othercaps = gst_caps_truncate (othercaps);
   othercaps = gst_caps_make_writable (othercaps);
+  othercaps = gst_caps_truncate (othercaps);
 
   GST_DEBUG_OBJECT (bt, "trying to fixate othercaps %" GST_PTR_FORMAT
       " based on caps %" GST_PTR_FORMAT, othercaps, caps);
@@ -358,7 +336,13 @@
       GST_DEBUG_OBJECT (bt, "height is fixed (%d)", h);
 
       if (!gst_value_is_fixed (to_par)) {
-        gst_value_set_fraction (&tpar, 1, 1);
+        /* (shortcut) copy-paste (??) of videoscale seems to aim for 1/1,
+         * so let's make it so ...
+         * especially if following code assumes fixed */
+        GST_DEBUG_OBJECT (bt, "fixating to_par to 1x1");
+        gst_structure_fixate_field_nearest_fraction (outs,
+            "pixel-aspect-ratio", 1, 1);
+        to_par = gst_structure_get_value (outs, "pixel-aspect-ratio");
       }
 
       /* PAR is fixed, choose the height that is nearest to the
@@ -385,7 +369,13 @@
       GST_DEBUG_OBJECT (bt, "width is fixed (%d)", w);
 
       if (!gst_value_is_fixed (to_par)) {
-        gst_value_set_fraction (&tpar, 1, 1);
+        /* (shortcut) copy-paste (??) of videoscale seems to aim for 1/1,
+         * so let's make it so ...
+         * especially if following code assumes fixed */
+        GST_DEBUG_OBJECT (bt, "fixating to_par to 1x1");
+        gst_structure_fixate_field_nearest_fraction (outs,
+            "pixel-aspect-ratio", 1, 1);
+        to_par = gst_structure_get_value (outs, "pixel-aspect-ratio");
       }
 
       /* PAR is fixed, choose the height that is nearest to the
@@ -677,6 +667,49 @@
 }
 
 static gboolean
+gst_gl_filter_gl_set_caps (GstGLBaseFilter * bt, GstCaps * incaps,
+    GstCaps * outcaps)
+{
+  GstGLFilter *filter = GST_GL_FILTER (bt);
+  GstGLFilterClass *filter_class = GST_GL_FILTER_GET_CLASS (filter);
+  GstGLContext *context = GST_GL_BASE_FILTER (filter)->context;
+  gint out_width, out_height;
+
+  out_width = GST_VIDEO_INFO_WIDTH (&filter->out_info);
+  out_height = GST_VIDEO_INFO_HEIGHT (&filter->out_info);
+
+  if (filter->fbo) {
+    gst_gl_context_del_fbo (context, filter->fbo, filter->depthbuffer);
+    filter->fbo = 0;
+    filter->depthbuffer = 0;
+  }
+  //blocking call, generate a FBO
+  if (!gst_gl_context_gen_fbo (context, out_width, out_height,
+          &filter->fbo, &filter->depthbuffer))
+    goto context_error;
+
+  if (filter_class->init_fbo) {
+    if (!filter_class->init_fbo (filter))
+      goto error;
+  }
+
+  return TRUE;
+
+context_error:
+  {
+    GST_ELEMENT_ERROR (filter, RESOURCE, NOT_FOUND, ("Could not generate FBO"),
+        (NULL));
+    return FALSE;
+  }
+error:
+  {
+    GST_ELEMENT_ERROR (filter, LIBRARY, INIT,
+        ("Subclass failed to initialize."), (NULL));
+    return FALSE;
+  }
+}
+
+static gboolean
 gst_gl_filter_set_caps (GstBaseTransform * bt, GstCaps * incaps,
     GstCaps * outcaps)
 {
@@ -703,7 +736,8 @@
       GST_VIDEO_INFO_WIDTH (&filter->out_info),
       GST_VIDEO_INFO_HEIGHT (&filter->out_info), incaps, outcaps);
 
-  return TRUE;
+  return GST_BASE_TRANSFORM_CLASS (parent_class)->set_caps (bt, incaps,
+      outcaps);
 
 /* ERRORS */
 wrong_caps:
@@ -894,6 +928,13 @@
   return ret;
 }
 
+static void
+_debug_marker (GstGLContext * context, GstGLFilter * filter)
+{
+  gst_gl_insert_debug_marker (context,
+      "processing in element %s", GST_OBJECT_NAME (filter));
+}
+
 static GstFlowReturn
 gst_gl_filter_transform (GstBaseTransform * bt, GstBuffer * inbuf,
     GstBuffer * outbuf)
@@ -914,6 +955,8 @@
   if (in_sync_meta)
     gst_gl_sync_meta_wait (in_sync_meta, context);
 
+  gst_gl_context_thread_add (context, (GstGLContextThreadFunc) _debug_marker,
+      filter);
   if (filter_class->filter)
     ret = filter_class->filter (filter, inbuf, outbuf);
   else
@@ -989,6 +1032,28 @@
 }
 
 static void
+_get_attributes (GstGLFilter * filter)
+{
+  if (!filter->default_shader)
+    return;
+
+  if (filter->valid_attributes)
+    return;
+
+  if (filter->draw_attr_position_loc == -1)
+    filter->draw_attr_position_loc =
+        gst_gl_shader_get_attribute_location (filter->default_shader,
+        "a_position");
+
+  if (filter->draw_attr_texture_loc == -1)
+    filter->draw_attr_texture_loc =
+        gst_gl_shader_get_attribute_location (filter->default_shader,
+        "a_texcoord");
+
+  filter->valid_attributes = TRUE;
+}
+
+static void
 _draw_with_shader_cb (gint width, gint height, guint texture, gpointer stuff)
 {
   GstGLFilter *filter = GST_GL_FILTER (stuff);
@@ -1002,6 +1067,7 @@
   }
 #endif
 
+  _get_attributes (filter);
   gst_gl_shader_use (filter->default_shader);
 
   gl->ActiveTexture (GL_TEXTURE1);
@@ -1014,23 +1080,6 @@
   gst_gl_filter_draw_texture (filter, texture, width, height);
 }
 
-static void
-_get_attributes (GstGLFilter * filter)
-{
-  if (!filter->default_shader)
-    return;
-
-  if (filter->draw_attr_position_loc == -1)
-    filter->draw_attr_position_loc =
-        gst_gl_shader_get_attribute_location (filter->default_shader,
-        "a_position");
-
-  if (filter->draw_attr_texture_loc == -1)
-    filter->draw_attr_texture_loc =
-        gst_gl_shader_get_attribute_location (filter->default_shader,
-        "a_texcoord");
-}
-
 /**
  * gst_gl_filter_render_to_target_with_shader:
  * @filter: a #GstGLFilter
@@ -1051,8 +1100,9 @@
 gst_gl_filter_render_to_target_with_shader (GstGLFilter * filter,
     gboolean resize, GLuint input, GLuint target, GstGLShader * shader)
 {
+  if (filter->default_shader != shader)
+    filter->valid_attributes = FALSE;
   filter->default_shader = shader;
-  _get_attributes (filter);
 
   gst_gl_filter_render_to_target (filter, resize, input, target,
       _draw_with_shader_cb, filter);
diff --git a/gst-libs/gst/gl/gstglfilter.h b/gst-libs/gst/gl/gstglfilter.h
index 94ab333..a818bab 100644
--- a/gst-libs/gst/gl/gstglfilter.h
+++ b/gst-libs/gst/gl/gstglfilter.h
@@ -71,6 +71,7 @@
   GLuint             out_tex_id;
 
   GstGLShader       *default_shader;
+  gboolean           valid_attributes;
 
   GLuint             vao;
   GLuint             vbo_indices;
diff --git a/gst-libs/gst/gl/gstglformat.c b/gst-libs/gst/gl/gstglformat.c
new file mode 100644
index 0000000..237e250
--- /dev/null
+++ b/gst-libs/gst/gl/gstglformat.c
@@ -0,0 +1,436 @@
+/*
+ * GStreamer
+ * Copyright (C) 2015 Matthew Waters <matthew@centricular.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <gst/gl/gstglformat.h>
+#include <gst/gl/gstglcontext.h>
+
+#define USING_OPENGL(context) (gst_gl_context_check_gl_version (context, GST_GL_API_OPENGL, 1, 0))
+#define USING_OPENGL3(context) (gst_gl_context_check_gl_version (context, GST_GL_API_OPENGL3, 3, 1))
+#define USING_GLES(context) (gst_gl_context_check_gl_version (context, GST_GL_API_GLES, 1, 0))
+#define USING_GLES2(context) (gst_gl_context_check_gl_version (context, GST_GL_API_GLES2, 2, 0))
+#define USING_GLES3(context) (gst_gl_context_check_gl_version (context, GST_GL_API_GLES2, 3, 0))
+
+#ifndef GL_RGBA8
+#define GL_RGBA8 0x8058
+#endif
+#ifndef GL_RED
+#define GL_RED 0x1903
+#endif
+#ifndef GL_RG
+#define GL_RG 0x8227
+#endif
+#ifndef GL_R8
+#define GL_R8 0x8229
+#endif
+#ifndef GL_RG8
+#define GL_RG8 0x822B
+#endif
+
+#ifndef GL_TEXTURE_RECTANGLE
+#define GL_TEXTURE_RECTANGLE 0x84F5
+#endif
+#ifndef GL_TEXTURE_EXTERNAL_OES
+#define GL_TEXTURE_EXTERNAL_OES 0x8D65
+#endif
+
+static inline guint
+_gl_format_n_components (guint format)
+{
+  switch (format) {
+    case GST_VIDEO_GL_TEXTURE_TYPE_RGBA:
+    case GL_RGBA:
+      return 4;
+    case GST_VIDEO_GL_TEXTURE_TYPE_RGB:
+    case GST_VIDEO_GL_TEXTURE_TYPE_RGB16:
+    case GL_RGB:
+      return 3;
+    case GST_VIDEO_GL_TEXTURE_TYPE_LUMINANCE_ALPHA:
+    case GST_VIDEO_GL_TEXTURE_TYPE_RG:
+    case GL_LUMINANCE_ALPHA:
+    case GL_RG:
+      return 2;
+    case GST_VIDEO_GL_TEXTURE_TYPE_LUMINANCE:
+    case GST_VIDEO_GL_TEXTURE_TYPE_R:
+    case GL_LUMINANCE:
+    case GL_RED:
+      return 1;
+    default:
+      return 0;
+  }
+}
+
+static inline guint
+_gl_type_n_components (guint type)
+{
+  switch (type) {
+    case GL_UNSIGNED_BYTE:
+      return 1;
+    case GL_UNSIGNED_SHORT_5_6_5:
+      return 3;
+    default:
+      g_assert_not_reached ();
+      return 0;
+  }
+}
+
+static inline guint
+_gl_type_n_bytes (guint type)
+{
+  switch (type) {
+    case GL_UNSIGNED_BYTE:
+      return 1;
+    case GL_UNSIGNED_SHORT_5_6_5:
+      return 2;
+    default:
+      g_assert_not_reached ();
+      return 0;
+  }
+}
+
+/**
+ * gst_gl_format_type_n_bytes:
+ * @format: the OpenGL format, %GL_RGBA, %GL_LUMINANCE, etc
+ * @type: the OpenGL type, %GL_UNSIGNED_BYTE, %GL_FLOAT, etc
+ *
+ * Returns: the number of bytes the specified @format, @type combination takes
+ * per pixel
+ */
+guint
+gst_gl_format_type_n_bytes (guint format, guint type)
+{
+  return _gl_format_n_components (format) / _gl_type_n_components (type) *
+      _gl_type_n_bytes (type);
+}
+
+/**
+ * gst_gl_texture_type_n_bytes:
+ * @tex_format: a #GstVideoGLTextureType
+ *
+ * Returns: the number of bytes @tex_format used per pixel
+ */
+guint
+gst_gl_texture_type_n_bytes (GstVideoGLTextureType tex_format)
+{
+  guint format, type;
+
+  format = gst_gl_format_from_gl_texture_type (tex_format);
+  type = GL_UNSIGNED_BYTE;
+  if (tex_format == GST_VIDEO_GL_TEXTURE_TYPE_RGB16)
+    type = GL_UNSIGNED_SHORT_5_6_5;
+
+  return gst_gl_format_type_n_bytes (format, type);
+}
+
+/**
+ * gst_gl_format_from_gl_texture_type:
+ * @tex_format: a #GstVideoGLTextureType
+ *
+ * Returns: the OpenGL format specified by @tex_format
+ */
+guint
+gst_gl_format_from_gl_texture_type (GstVideoGLTextureType tex_format)
+{
+  switch (tex_format) {
+    case GST_VIDEO_GL_TEXTURE_TYPE_LUMINANCE_ALPHA:
+      return GL_LUMINANCE_ALPHA;
+    case GST_VIDEO_GL_TEXTURE_TYPE_LUMINANCE:
+      return GL_LUMINANCE;
+    case GST_VIDEO_GL_TEXTURE_TYPE_RGBA:
+      return GL_RGBA;
+    case GST_VIDEO_GL_TEXTURE_TYPE_RGB:
+    case GST_VIDEO_GL_TEXTURE_TYPE_RGB16:
+      return GL_RGB;
+    case GST_VIDEO_GL_TEXTURE_TYPE_RG:
+      return GL_RG;
+    case GST_VIDEO_GL_TEXTURE_TYPE_R:
+      return GL_RED;
+    default:
+      return GST_VIDEO_GL_TEXTURE_TYPE_RGBA;
+  }
+}
+
+/**
+ * gst_gl_texture_type_from_format:
+ * @context: a #GstGLContext
+ * @v_format: a #GstVideoFormat
+ * @plane: the plane number (starting from 0)
+ *
+ * Returns: the #GstVideoGLTextureType for the specified @format and @plane
+ *          that can be allocated using @context
+ */
+GstVideoGLTextureType
+gst_gl_texture_type_from_format (GstGLContext * context,
+    GstVideoFormat v_format, guint plane)
+{
+  gboolean texture_rg =
+      gst_gl_context_check_feature (context, "GL_EXT_texture_rg")
+      || gst_gl_context_check_gl_version (context, GST_GL_API_GLES2, 3, 0)
+      || gst_gl_context_check_feature (context, "GL_ARB_texture_rg")
+      || gst_gl_context_check_gl_version (context, GST_GL_API_OPENGL3, 3, 0);
+  guint n_plane_components;
+
+  switch (v_format) {
+    case GST_VIDEO_FORMAT_RGBx:
+    case GST_VIDEO_FORMAT_BGRx:
+    case GST_VIDEO_FORMAT_xRGB:
+    case GST_VIDEO_FORMAT_xBGR:
+    case GST_VIDEO_FORMAT_RGBA:
+    case GST_VIDEO_FORMAT_BGRA:
+    case GST_VIDEO_FORMAT_ARGB:
+    case GST_VIDEO_FORMAT_ABGR:
+    case GST_VIDEO_FORMAT_AYUV:
+      n_plane_components = 4;
+      break;
+    case GST_VIDEO_FORMAT_RGB:
+    case GST_VIDEO_FORMAT_BGR:
+      n_plane_components = 3;
+      break;
+    case GST_VIDEO_FORMAT_RGB16:
+    case GST_VIDEO_FORMAT_BGR16:
+      return GST_VIDEO_GL_TEXTURE_TYPE_RGB16;
+    case GST_VIDEO_FORMAT_GRAY16_BE:
+    case GST_VIDEO_FORMAT_GRAY16_LE:
+    case GST_VIDEO_FORMAT_YUY2:
+    case GST_VIDEO_FORMAT_UYVY:
+      n_plane_components = 2;
+      break;
+    case GST_VIDEO_FORMAT_NV12:
+    case GST_VIDEO_FORMAT_NV21:
+      n_plane_components = plane == 0 ? 1 : 2;
+      break;
+    case GST_VIDEO_FORMAT_GRAY8:
+    case GST_VIDEO_FORMAT_Y444:
+    case GST_VIDEO_FORMAT_Y42B:
+    case GST_VIDEO_FORMAT_Y41B:
+    case GST_VIDEO_FORMAT_I420:
+    case GST_VIDEO_FORMAT_YV12:
+      n_plane_components = 1;
+      break;
+    default:
+      n_plane_components = 4;
+      g_assert_not_reached ();
+      break;
+  }
+
+  switch (n_plane_components) {
+    case 4:
+      return GST_VIDEO_GL_TEXTURE_TYPE_RGBA;
+      break;
+    case 3:
+      return GST_VIDEO_GL_TEXTURE_TYPE_RGB;
+      break;
+    case 2:
+      return texture_rg ? GST_VIDEO_GL_TEXTURE_TYPE_RG :
+          GST_VIDEO_GL_TEXTURE_TYPE_LUMINANCE_ALPHA;
+      break;
+    case 1:
+      return texture_rg ? GST_VIDEO_GL_TEXTURE_TYPE_R :
+          GST_VIDEO_GL_TEXTURE_TYPE_LUMINANCE;
+      break;
+    default:
+      g_assert_not_reached ();
+      break;
+  }
+
+  return GST_VIDEO_GL_TEXTURE_TYPE_RGBA;
+}
+
+/**
+ * gst_gl_sized_gl_format_from_gl_format_type:
+ * @context: a #GstGLContext
+ * @format: an OpenGL format, %GL_RGBA, %GL_LUMINANCE, etc
+ * @type: an OpenGL type, %GL_UNSIGNED_BYTE, %GL_FLOAT, etc
+ *
+ * Returns: the sized internal format specified by @format and @type that can
+ *          be used in @context
+ */
+guint
+gst_gl_sized_gl_format_from_gl_format_type (GstGLContext * context,
+    guint format, guint type)
+{
+  gboolean ext_texture_rg =
+      gst_gl_context_check_feature (context, "GL_EXT_texture_rg");
+
+  switch (format) {
+    case GL_RGBA:
+      switch (type) {
+        case GL_UNSIGNED_BYTE:
+          return USING_GLES2 (context)
+              && !USING_GLES3 (context) ? GL_RGBA : GL_RGBA8;
+          break;
+      }
+      break;
+    case GL_RGB:
+      switch (type) {
+        case GL_UNSIGNED_BYTE:
+          return GL_RGB8;
+          break;
+        case GL_UNSIGNED_SHORT_5_6_5:
+          return GL_RGB;
+          break;
+      }
+      break;
+    case GL_RG:
+      switch (type) {
+        case GL_UNSIGNED_BYTE:
+          if (!USING_GLES3 (context) && USING_GLES2 (context) && ext_texture_rg)
+            return GL_RG;
+          return GL_RG8;
+          break;
+      }
+      break;
+    case GL_RED:
+      switch (type) {
+        case GL_UNSIGNED_BYTE:
+          if (!USING_GLES3 (context) && USING_GLES2 (context) && ext_texture_rg)
+            return GL_RED;
+          return GL_R8;
+          break;
+      }
+      break;
+    case GL_LUMINANCE:
+      return GL_LUMINANCE;
+      break;
+    case GL_LUMINANCE_ALPHA:
+      return GL_LUMINANCE_ALPHA;
+      break;
+    case GL_ALPHA:
+      return GL_ALPHA;
+      break;
+    default:
+      break;
+  }
+
+  g_assert_not_reached ();
+  return 0;
+}
+
+/**
+ * gst_gl_texture_target_to_string:
+ * @target: a #GstGLTextureTarget
+ *
+ * Returns: the stringified version of @target or %NULL
+ */
+const gchar *
+gst_gl_texture_target_to_string (GstGLTextureTarget target)
+{
+  switch (target) {
+    case GST_GL_TEXTURE_TARGET_2D:
+      return GST_GL_TEXTURE_TARGET_2D_STR;
+    case GST_GL_TEXTURE_TARGET_RECTANGLE:
+      return GST_GL_TEXTURE_TARGET_RECTANGLE_STR;
+    case GST_GL_TEXTURE_TARGET_EXTERNAL_OES:
+      return GST_GL_TEXTURE_TARGET_EXTERNAL_OES_STR;
+    default:
+      return NULL;
+  }
+}
+
+/**
+ * gst_gl_texture_target_to_string:
+ * @str: a string equivalant to one of the GST_GL_TEXTURE_TARGET_*_STR values
+ *
+ * Returns: the #GstGLTextureTarget represented by @str or
+ *          %GST_GL_TEXTURE_TARGET_NONE
+ */
+GstGLTextureTarget
+gst_gl_texture_target_from_string (const gchar * str)
+{
+  if (!str)
+    return GST_GL_TEXTURE_TARGET_NONE;
+
+  if (g_strcmp0 (str, GST_GL_TEXTURE_TARGET_2D_STR) == 0)
+    return GST_GL_TEXTURE_TARGET_2D;
+  if (g_strcmp0 (str, GST_GL_TEXTURE_TARGET_RECTANGLE_STR) == 0)
+    return GST_GL_TEXTURE_TARGET_RECTANGLE;
+  if (g_strcmp0 (str, GST_GL_TEXTURE_TARGET_EXTERNAL_OES_STR) == 0)
+    return GST_GL_TEXTURE_TARGET_EXTERNAL_OES;
+
+  return GST_GL_TEXTURE_TARGET_NONE;
+}
+
+/**
+ * gst_gl_texture_target_to_gl:
+ * @target: a #GstGLTextureTarget
+ *
+ * Returns: the OpenGL value for binding the @target with glBindTexture() and
+ *          similar functions or 0
+ */
+guint
+gst_gl_texture_target_to_gl (GstGLTextureTarget target)
+{
+  switch (target) {
+    case GST_GL_TEXTURE_TARGET_2D:
+      return GL_TEXTURE_2D;
+    case GST_GL_TEXTURE_TARGET_RECTANGLE:
+      return GL_TEXTURE_RECTANGLE;
+    case GST_GL_TEXTURE_TARGET_EXTERNAL_OES:
+      return GL_TEXTURE_EXTERNAL_OES;
+    default:
+      return 0;
+  }
+}
+
+/**
+ * gst_gl_texture_target_from_gl:
+ * @target: an OpenGL texture binding target
+ *
+ * Returns: the #GstGLTextureTarget that's equiavalant to @target or
+ *          %GST_GL_TEXTURE_TARGET_NONE
+ */
+GstGLTextureTarget
+gst_gl_texture_target_from_gl (guint target)
+{
+  switch (target) {
+    case GL_TEXTURE_2D:
+      return GST_GL_TEXTURE_TARGET_2D;
+    case GL_TEXTURE_RECTANGLE:
+      return GST_GL_TEXTURE_TARGET_RECTANGLE;
+    case GL_TEXTURE_EXTERNAL_OES:
+      return GST_GL_TEXTURE_TARGET_EXTERNAL_OES;
+    default:
+      return GST_GL_TEXTURE_TARGET_NONE;
+  }
+}
+
+/**
+ * gst_gl_texture_target_to_buffer_pool_option:
+ * @target: a #GstGLTextureTarget
+ *
+ * Returns: a string representing the @GstBufferPoolOption specified by @target
+ */
+const gchar *
+gst_gl_texture_target_to_buffer_pool_option (GstGLTextureTarget target)
+{
+  switch (target) {
+    case GST_GL_TEXTURE_TARGET_2D:
+      return GST_BUFFER_POOL_OPTION_GL_TEXTURE_TARGET_2D;
+    case GST_GL_TEXTURE_TARGET_RECTANGLE:
+      return GST_BUFFER_POOL_OPTION_GL_TEXTURE_TARGET_RECTANGLE;
+    case GST_GL_TEXTURE_TARGET_EXTERNAL_OES:
+      return GST_BUFFER_POOL_OPTION_GL_TEXTURE_TARGET_EXTERNAL_OES;
+    default:
+      return NULL;
+  }
+}
diff --git a/gst-libs/gst/gl/gstglformat.h b/gst-libs/gst/gl/gstglformat.h
new file mode 100644
index 0000000..fcd618a
--- /dev/null
+++ b/gst-libs/gst/gl/gstglformat.h
@@ -0,0 +1,92 @@
+/*
+ * GStreamer
+ * Copyright (C) 2015 Matthew Waters <matthew@centricular.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifndef _GST_GL_FORMAT_H_
+#define _GST_GL_FORMAT_H_
+
+#include <gst/gst.h>
+
+#include <gst/gl/gstgl_fwd.h>
+#include <gst/video/video.h>
+
+/**
+ * GST_GL_TEXTURE_TARGET_2D_STR:
+ *
+ * String used for %GST_GL_TEXTURE_TARGET_2D in things like caps values
+ */
+#define GST_GL_TEXTURE_TARGET_2D_STR "2D"
+
+/**
+ * GST_GL_TEXTURE_TARGET_RECTANGLE_STR:
+ *
+ * String used for %GST_GL_TEXTURE_TARGET_RECTANGLE in things like caps values
+ */
+#define GST_GL_TEXTURE_TARGET_RECTANGLE_STR "rectangle"
+
+/**
+ * GST_GL_TEXTURE_TARGET_EXTERNAL_OES_STR:
+ *
+ * String used for %GST_GL_TEXTURE_TARGET_EXTERNAL_OES in things like caps values
+ */
+#define GST_GL_TEXTURE_TARGET_EXTERNAL_OES_STR "external-oes"
+
+/**
+ * GST_BUFFER_POOL_OPTION_GL_TEXTURE_TARGET_2D:
+ *
+ * String used for %GST_GL_TEXTURE_TARGET_2D as a #GstBufferPool pool option
+ */
+#define GST_BUFFER_POOL_OPTION_GL_TEXTURE_TARGET_2D "GstBufferPoolOptionGLTextureTarget2D"
+
+/**
+ * GST_BUFFER_POOL_OPTION_GL_TEXTURE_TARGET_RECTANGLE:
+ *
+ * String used for %GST_GL_TEXTURE_TARGET_RECTANGLE as a #GstBufferPool pool option
+ */
+#define GST_BUFFER_POOL_OPTION_GL_TEXTURE_TARGET_RECTANGLE "GstBufferPoolOptionGLTextureTargetRectangle"
+
+/**
+ * GST_BUFFER_POOL_OPTION_GL_TEXTURE_TARGET_EXTERNAL_OES:
+ *
+ * String used for %GST_GL_TEXTURE_TARGET_ESTERNAL_OES as a #GstBufferPool pool option
+ */
+#define GST_BUFFER_POOL_OPTION_GL_TEXTURE_TARGET_EXTERNAL_OES "GstBufferPoolOptionGLTextureTargetExternalOES"
+
+G_BEGIN_DECLS
+
+guint                   gst_gl_format_type_n_bytes                  (guint format,
+                                                                     guint type);
+guint                   gst_gl_texture_type_n_bytes                 (GstVideoGLTextureType tex_format);
+guint                   gst_gl_format_from_gl_texture_type          (GstVideoGLTextureType tex_format);
+GstVideoGLTextureType   gst_gl_texture_type_from_format             (GstGLContext * context,
+                                                                     GstVideoFormat v_format,
+                                                                     guint plane);
+guint                   gst_gl_sized_gl_format_from_gl_format_type  (GstGLContext * context,
+                                                                     guint format,
+                                                                     guint type);
+
+GstGLTextureTarget      gst_gl_texture_target_from_string           (const gchar * str);
+const gchar *           gst_gl_texture_target_to_string             (GstGLTextureTarget target);
+guint                   gst_gl_texture_target_to_gl                 (GstGLTextureTarget target);
+GstGLTextureTarget      gst_gl_texture_target_from_gl               (guint target);
+const gchar *           gst_gl_texture_target_to_buffer_pool_option (GstGLTextureTarget target);
+
+G_END_DECLS
+
+#endif /* _GST_GL_FORMAT_H_ */
diff --git a/gst-libs/gst/gl/gstglframebuffer.h b/gst-libs/gst/gl/gstglframebuffer.h
index 1fc9222..4768afb 100644
--- a/gst-libs/gst/gl/gstglframebuffer.h
+++ b/gst-libs/gst/gl/gstglframebuffer.h
@@ -64,6 +64,10 @@
 
 void gst_gl_framebuffer_delete (GstGLFramebuffer *frame, guint fbo, guint depth);
 
+#ifdef G_DEFINE_AUTOPTR_CLEANUP_FUNC
+G_DEFINE_AUTOPTR_CLEANUP_FUNC(GstGLFramebuffer, gst_object_unref)
+#endif
+
 G_END_DECLS
 
 #endif
diff --git a/gst-libs/gst/gl/gstglmemory.c b/gst-libs/gst/gl/gstglmemory.c
index 0a528ec..020bc7c 100644
--- a/gst-libs/gst/gl/gstglmemory.c
+++ b/gst-libs/gst/gl/gstglmemory.c
@@ -1,6 +1,6 @@
 /*
  * GStreamer
- * Copyright (C) 2012 Matthew Waters <ystreet00@gmail.com>
+ * Copyright (C) 2015 Matthew Waters <matthew@centricular.com>
  *
  * This library is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Library General Public
@@ -26,30 +26,23 @@
 
 #include <gst/video/video.h>
 
-#include "gstglmemory.h"
-#include "gstglutils.h"
+#include <gst/gl/gstglbasememory.h>
+#include <gst/gl/gstglmemory.h>
 
 /**
  * SECTION:gstglmemory
  * @short_description: memory subclass for GL textures
  * @see_also: #GstMemory, #GstAllocator, #GstGLBufferPool
  *
- * GstGLMemory is a #GstGLBaseBuffer subclass providing support for the mapping of
- * GL textures.  
+ * GstGLMemory is a #GstGLBaseMemory subclass providing support for the mapping of
+ * OpenGL textures.  
  *
- * #GstGLMemory is created through gst_gl_memory_alloc() or system memory can
- * be wrapped through gst_gl_memory_wrapped().
+ * #GstGLMemory is created or wrapped through gst_gl_base_memory_alloc()
+ * with #GstGLVideoAllocationParams.
  *
  * Data is uploaded or downloaded from the GPU as is necessary.
  */
 
-/* Implementation notes
- *
- * PBO transfer's are implemented using GstGLBaseBuffer.  We just need to
- * ensure that the texture data is written/read to/from before/after calling
- * the parent class which performs the pbo buffer transfer.
- */
-
 #define USING_OPENGL(context) (gst_gl_context_check_gl_version (context, GST_GL_API_OPENGL, 1, 0))
 #define USING_OPENGL3(context) (gst_gl_context_check_gl_version (context, GST_GL_API_OPENGL3, 3, 1))
 #define USING_GLES(context) (gst_gl_context_check_gl_version (context, GST_GL_API_GLES, 1, 0))
@@ -60,56 +53,25 @@
 #define GL_MEM_HEIGHT(gl_mem) _get_plane_height (&gl_mem->info, gl_mem->plane)
 #define GL_MEM_STRIDE(gl_mem) GST_VIDEO_INFO_PLANE_STRIDE (&gl_mem->info, gl_mem->plane)
 
-#define CONTEXT_SUPPORTS_PBO_UPLOAD(context) \
-    (gst_gl_context_check_gl_version (context, \
-        GST_GL_API_OPENGL | GST_GL_API_OPENGL3, 2, 1) \
-        || gst_gl_context_check_gl_version (context, GST_GL_API_GLES2, 3, 0))
-#define CONTEXT_SUPPORTS_PBO_DOWNLOAD(context) \
-    (gst_gl_context_check_gl_version (context, \
-        GST_GL_API_OPENGL | GST_GL_API_OPENGL3 | GST_GL_API_GLES2, 3, 0))
+static GstAllocator *_gl_memory_allocator;
 
 GST_DEBUG_CATEGORY_STATIC (GST_CAT_GL_MEMORY);
 #define GST_CAT_DEFAULT GST_CAT_GL_MEMORY
 
-static GstAllocator *_gl_allocator;
-
 /* compatability definitions... */
-#ifndef GL_RGBA8
-#define GL_RGBA8 0x8058
-#endif
-#ifndef GL_RED
-#define GL_RED 0x1903
-#endif
-#ifndef GL_RG
-#define GL_RG 0x8227
-#endif
-#ifndef GL_R8
-#define GL_R8 0x8229
-#endif
-#ifndef GL_RG8
-#define GL_RG8 0x822B
-#endif
-#ifndef GL_PIXEL_PACK_BUFFER
-#define GL_PIXEL_PACK_BUFFER 0x88EB
-#endif
-#ifndef GL_PIXEL_UNPACK_BUFFER
-#define GL_PIXEL_UNPACK_BUFFER 0x88EC
-#endif
-#ifndef GL_STREAM_READ
-#define GL_STREAM_READ 0x88E1
-#endif
-#ifndef GL_STREAM_DRAW
-#define GL_STREAM_DRAW 0x88E0
-#endif
-#ifndef GL_STREAM_COPY
-#define GL_STREAM_COPY 0x88E2
-#endif
 #ifndef GL_UNPACK_ROW_LENGTH
 #define GL_UNPACK_ROW_LENGTH 0x0CF2
 #endif
 
-G_DEFINE_TYPE (GstGLAllocator, gst_gl_allocator,
-    GST_TYPE_GL_BASE_BUFFER_ALLOCATOR);
+#ifndef GL_TEXTURE_RECTANGLE
+#define GL_TEXTURE_RECTANGLE 0x84F5
+#endif
+#ifndef GL_TEXTURE_EXTERNAL_OES
+#define GL_TEXTURE_EXTERNAL_OES 0x8D65
+#endif
+
+G_DEFINE_TYPE (GstGLMemoryAllocator, gst_gl_memory_allocator,
+    GST_TYPE_GL_BASE_MEMORY_ALLOCATOR);
 
 typedef struct
 {
@@ -117,9 +79,8 @@
   GstGLMemory *src;
   GstVideoGLTextureType out_format;
   guint out_width, out_height;
-  guint out_stride;
-  gboolean respecify;
-  guint tex_target;
+  GstGLTextureTarget tex_target;
+  GstVideoGLTextureType tex_type;
   /* inout */
   guint tex_id;
   /* out */
@@ -127,240 +88,6 @@
 } GstGLMemoryCopyParams;
 
 static inline guint
-_gl_format_n_components (guint format)
-{
-  switch (format) {
-    case GST_VIDEO_GL_TEXTURE_TYPE_RGBA:
-    case GL_RGBA:
-      return 4;
-    case GST_VIDEO_GL_TEXTURE_TYPE_RGB:
-    case GST_VIDEO_GL_TEXTURE_TYPE_RGB16:
-    case GL_RGB:
-      return 3;
-    case GST_VIDEO_GL_TEXTURE_TYPE_LUMINANCE_ALPHA:
-    case GST_VIDEO_GL_TEXTURE_TYPE_RG:
-    case GL_LUMINANCE_ALPHA:
-    case GL_RG:
-      return 2;
-    case GST_VIDEO_GL_TEXTURE_TYPE_LUMINANCE:
-    case GST_VIDEO_GL_TEXTURE_TYPE_R:
-    case GL_LUMINANCE:
-    case GL_RED:
-      return 1;
-    default:
-      return 0;
-  }
-}
-
-static inline guint
-_gl_type_n_components (guint type)
-{
-  switch (type) {
-    case GL_UNSIGNED_BYTE:
-      return 1;
-    case GL_UNSIGNED_SHORT_5_6_5:
-      return 3;
-    default:
-      g_assert_not_reached ();
-      return 0;
-  }
-}
-
-static inline guint
-_gl_type_n_bytes (guint type)
-{
-  switch (type) {
-    case GL_UNSIGNED_BYTE:
-      return 1;
-    case GL_UNSIGNED_SHORT_5_6_5:
-      return 2;
-    default:
-      g_assert_not_reached ();
-      return 0;
-  }
-}
-
-static inline guint
-_gl_format_type_n_bytes (guint format, guint type)
-{
-  return _gl_format_n_components (format) / _gl_type_n_components (type) *
-      _gl_type_n_bytes (type);
-}
-
-static inline guint
-_gl_texture_type_n_bytes (GstVideoGLTextureType tex_format)
-{
-  guint format, type;
-
-  format = gst_gl_format_from_gl_texture_type (tex_format);
-  type = GL_UNSIGNED_BYTE;
-  if (tex_format == GST_VIDEO_GL_TEXTURE_TYPE_RGB16)
-    type = GL_UNSIGNED_SHORT_5_6_5;
-
-  return _gl_format_type_n_bytes (format, type);
-}
-
-guint
-gst_gl_format_from_gl_texture_type (GstVideoGLTextureType tex_format)
-{
-  switch (tex_format) {
-    case GST_VIDEO_GL_TEXTURE_TYPE_LUMINANCE_ALPHA:
-      return GL_LUMINANCE_ALPHA;
-    case GST_VIDEO_GL_TEXTURE_TYPE_LUMINANCE:
-      return GL_LUMINANCE;
-    case GST_VIDEO_GL_TEXTURE_TYPE_RGBA:
-      return GL_RGBA;
-    case GST_VIDEO_GL_TEXTURE_TYPE_RGB:
-    case GST_VIDEO_GL_TEXTURE_TYPE_RGB16:
-      return GL_RGB;
-    case GST_VIDEO_GL_TEXTURE_TYPE_RG:
-      return GL_RG;
-    case GST_VIDEO_GL_TEXTURE_TYPE_R:
-      return GL_RED;
-    default:
-      return GST_VIDEO_GL_TEXTURE_TYPE_RGBA;
-  }
-}
-
-GstVideoGLTextureType
-gst_gl_texture_type_from_format (GstGLContext * context,
-    GstVideoFormat v_format, guint plane)
-{
-  gboolean texture_rg =
-      gst_gl_context_check_feature (context, "GL_EXT_texture_rg")
-      || gst_gl_context_check_gl_version (context, GST_GL_API_GLES2, 3, 0)
-      || gst_gl_context_check_feature (context, "GL_ARB_texture_rg")
-      || gst_gl_context_check_gl_version (context, GST_GL_API_OPENGL3, 3, 0);
-  guint n_plane_components;
-
-  switch (v_format) {
-    case GST_VIDEO_FORMAT_RGBx:
-    case GST_VIDEO_FORMAT_BGRx:
-    case GST_VIDEO_FORMAT_xRGB:
-    case GST_VIDEO_FORMAT_xBGR:
-    case GST_VIDEO_FORMAT_RGBA:
-    case GST_VIDEO_FORMAT_BGRA:
-    case GST_VIDEO_FORMAT_ARGB:
-    case GST_VIDEO_FORMAT_ABGR:
-    case GST_VIDEO_FORMAT_AYUV:
-      n_plane_components = 4;
-      break;
-    case GST_VIDEO_FORMAT_RGB:
-    case GST_VIDEO_FORMAT_BGR:
-      n_plane_components = 3;
-      break;
-    case GST_VIDEO_FORMAT_RGB16:
-    case GST_VIDEO_FORMAT_BGR16:
-      return GST_VIDEO_GL_TEXTURE_TYPE_RGB16;
-    case GST_VIDEO_FORMAT_GRAY16_BE:
-    case GST_VIDEO_FORMAT_GRAY16_LE:
-    case GST_VIDEO_FORMAT_YUY2:
-    case GST_VIDEO_FORMAT_UYVY:
-      n_plane_components = 2;
-      break;
-    case GST_VIDEO_FORMAT_NV12:
-    case GST_VIDEO_FORMAT_NV21:
-      n_plane_components = plane == 0 ? 1 : 2;
-      break;
-    case GST_VIDEO_FORMAT_GRAY8:
-    case GST_VIDEO_FORMAT_Y444:
-    case GST_VIDEO_FORMAT_Y42B:
-    case GST_VIDEO_FORMAT_Y41B:
-    case GST_VIDEO_FORMAT_I420:
-    case GST_VIDEO_FORMAT_YV12:
-      n_plane_components = 1;
-      break;
-    default:
-      n_plane_components = 4;
-      g_assert_not_reached ();
-      break;
-  }
-
-  switch (n_plane_components) {
-    case 4:
-      return GST_VIDEO_GL_TEXTURE_TYPE_RGBA;
-      break;
-    case 3:
-      return GST_VIDEO_GL_TEXTURE_TYPE_RGB;
-      break;
-    case 2:
-      return texture_rg ? GST_VIDEO_GL_TEXTURE_TYPE_RG :
-          GST_VIDEO_GL_TEXTURE_TYPE_LUMINANCE_ALPHA;
-      break;
-    case 1:
-      return texture_rg ? GST_VIDEO_GL_TEXTURE_TYPE_R :
-          GST_VIDEO_GL_TEXTURE_TYPE_LUMINANCE;
-      break;
-    default:
-      g_assert_not_reached ();
-      break;
-  }
-
-  return GST_VIDEO_GL_TEXTURE_TYPE_RGBA;
-}
-
-guint
-gst_gl_sized_gl_format_from_gl_format_type (GstGLContext * context,
-    guint format, guint type)
-{
-  gboolean ext_texture_rg =
-      gst_gl_context_check_feature (context, "GL_EXT_texture_rg");
-
-  switch (format) {
-    case GL_RGBA:
-      switch (type) {
-        case GL_UNSIGNED_BYTE:
-          return USING_GLES2 (context)
-              && !USING_GLES3 (context) ? GL_RGBA : GL_RGBA8;
-          break;
-      }
-      break;
-    case GL_RGB:
-      switch (type) {
-        case GL_UNSIGNED_BYTE:
-          return GL_RGB8;
-          break;
-        case GL_UNSIGNED_SHORT_5_6_5:
-          return GL_RGB;
-          break;
-      }
-      break;
-    case GL_RG:
-      switch (type) {
-        case GL_UNSIGNED_BYTE:
-          if (!USING_GLES3 (context) && USING_GLES2 (context) && ext_texture_rg)
-            return GL_RG;
-          return GL_RG8;
-          break;
-      }
-      break;
-    case GL_RED:
-      switch (type) {
-        case GL_UNSIGNED_BYTE:
-          if (!USING_GLES3 (context) && USING_GLES2 (context) && ext_texture_rg)
-            return GL_RED;
-          return GL_R8;
-          break;
-      }
-      break;
-    case GL_LUMINANCE:
-      return GL_LUMINANCE;
-      break;
-    case GL_LUMINANCE_ALPHA:
-      return GL_LUMINANCE_ALPHA;
-      break;
-    case GL_ALPHA:
-      return GL_ALPHA;
-      break;
-    default:
-      break;
-  }
-
-  g_assert_not_reached ();
-  return 0;
-}
-
-static inline guint
 _get_plane_width (GstVideoInfo * info, guint plane)
 {
   if (GST_VIDEO_INFO_IS_YUV (info))
@@ -384,96 +111,6 @@
     return GST_VIDEO_INFO_HEIGHT (info);
 }
 
-typedef struct _GenTexture
-{
-  guint width, height;
-  GLenum gl_target;
-  GLenum gl_format;
-  GLenum gl_type;
-  guint result;
-} GenTexture;
-
-/* find the difference between the start of the plane and where the video
- * data starts in the plane */
-static gsize
-_find_plane_frame_start (GstGLMemory * gl_mem)
-{
-  gsize plane_start;
-  gint i;
-
-  /* find the start of the plane data including padding */
-  plane_start = 0;
-  for (i = 0; i < gl_mem->plane; i++) {
-    plane_start +=
-        gst_gl_get_plane_data_size (&gl_mem->info, &gl_mem->valign, i);
-  }
-
-  /* offset between the plane data start and where the video frame starts */
-  return (GST_VIDEO_INFO_PLANE_OFFSET (&gl_mem->info,
-          gl_mem->plane)) - plane_start + gl_mem->mem.mem.offset;
-}
-
-static void
-_upload_memory (GstGLMemory * gl_mem, GstMapInfo * info, gsize maxsize)
-{
-  GstGLContext *context = gl_mem->mem.context;
-  const GstGLFuncs *gl;
-  GLenum gl_format, gl_type, gl_target;
-  gpointer data;
-  gsize plane_start;
-
-  if ((gl_mem->transfer_state & GST_GL_MEMORY_TRANSFER_NEED_UPLOAD) == 0)
-    return;
-
-  gl = context->gl_vtable;
-
-  gl_type = GL_UNSIGNED_BYTE;
-  if (gl_mem->tex_type == GST_VIDEO_GL_TEXTURE_TYPE_RGB16)
-    gl_type = GL_UNSIGNED_SHORT_5_6_5;
-
-  gl_format = gst_gl_format_from_gl_texture_type (gl_mem->tex_type);
-  gl_target = gl_mem->tex_target;
-
-  if (USING_OPENGL (context) || USING_GLES3 (context)
-      || USING_OPENGL3 (context)) {
-    gl->PixelStorei (GL_UNPACK_ROW_LENGTH, gl_mem->unpack_length);
-  } else if (USING_GLES2 (context)) {
-    gl->PixelStorei (GL_UNPACK_ALIGNMENT, gl_mem->unpack_length);
-  }
-
-  GST_LOG ("upload for texture id:%u, with pbo %u %ux%u",
-      gl_mem->tex_id, gl_mem->mem.id, gl_mem->tex_width,
-      GL_MEM_HEIGHT (gl_mem));
-
-  /* find the start of the plane data including padding */
-  plane_start = _find_plane_frame_start (gl_mem);
-
-  if (gl_mem->mem.id && CONTEXT_SUPPORTS_PBO_UPLOAD (context)) {
-    gl->BindBuffer (GL_PIXEL_UNPACK_BUFFER, gl_mem->mem.id);
-    data = (void *) plane_start;
-  } else {
-    data = (gpointer) ((gintptr) plane_start + (gintptr) gl_mem->mem.data);
-  }
-
-  gl->BindTexture (gl_target, gl_mem->tex_id);
-  gl->TexSubImage2D (gl_target, 0, 0, 0, gl_mem->tex_width,
-      GL_MEM_HEIGHT (gl_mem), gl_format, gl_type, data);
-
-  if (gl_mem->mem.id && CONTEXT_SUPPORTS_PBO_UPLOAD (context))
-    gl->BindBuffer (GL_PIXEL_UNPACK_BUFFER, 0);
-
-  /* Reset to default values */
-  if (USING_OPENGL (context) || USING_GLES3 (context)) {
-    gl->PixelStorei (GL_UNPACK_ROW_LENGTH, 0);
-  } else if (USING_GLES2 (context)) {
-    gl->PixelStorei (GL_UNPACK_ALIGNMENT, 4);
-  }
-
-  gl->BindTexture (gl_target, 0);
-
-  gl_mem->transfer_state &= ~GST_GL_MEMORY_TRANSFER_NEED_UPLOAD;
-}
-
 static inline void
 _calculate_unpack_length (GstGLMemory * gl_mem, GstGLContext * context)
 {
@@ -484,7 +121,7 @@
   gl_mem->unpack_length = 1;
   gl_mem->tex_width = GL_MEM_WIDTH (gl_mem);
 
-  n_gl_bytes = _gl_texture_type_n_bytes (gl_mem->tex_type);
+  n_gl_bytes = gst_gl_texture_type_n_bytes (gl_mem->tex_type);
   if (n_gl_bytes == 0) {
     GST_ERROR ("Unsupported texture type %d", gl_mem->tex_type);
     return;
@@ -502,8 +139,8 @@
           ((GL_MEM_WIDTH (gl_mem) * n_gl_bytes) + j - 1) & ~(j - 1);
 
       if (round_up_j == GL_MEM_STRIDE (gl_mem)) {
-        GST_LOG ("Found alignment of %u based on width "
-            "(with plane width:%u, plane stride:%u and pixel stride:%u. "
+        GST_CAT_LOG (GST_CAT_GL_MEMORY, "Found alignment of %u based on "
+            "width (with plane width:%u, plane stride:%u and pixel stride:%u. "
             "RU%u(%u*%u) = %u)", j, GL_MEM_WIDTH (gl_mem),
             GL_MEM_STRIDE (gl_mem), n_gl_bytes, j, GL_MEM_WIDTH (gl_mem),
             n_gl_bytes, round_up_j);
@@ -525,8 +162,8 @@
         guint round_up_j = ((GL_MEM_STRIDE (gl_mem)) + j - 1) & ~(j - 1);
 
         if (round_up_j == (GL_MEM_STRIDE (gl_mem))) {
-          GST_LOG ("Found alignment of %u based on "
-              "stride (with plane stride:%u and pixel stride:%u. "
+          GST_CAT_LOG (GST_CAT_GL_MEMORY, "Found alignment of %u based "
+              "on stride (with plane stride:%u and pixel stride:%u. "
               "RU%u(%u) = %u)", j, GL_MEM_STRIDE (gl_mem), n_gl_bytes, j,
               GL_MEM_STRIDE (gl_mem), round_up_j);
 
@@ -541,14 +178,25 @@
       }
 
       if (j < n_gl_bytes) {
-        GST_ERROR
-            ("Failed to find matching alignment. Image may "
-            "look corrupted. plane width:%u, plane stride:%u and pixel "
-            "stride:%u", GL_MEM_WIDTH (gl_mem), GL_MEM_STRIDE (gl_mem),
-            n_gl_bytes);
+        GST_CAT_ERROR (GST_CAT_GL_MEMORY, "Failed to find matching "
+            "alignment. Image may look corrupted. plane width:%u, "
+            "plane stride:%u and pixel stride:%u", GL_MEM_WIDTH (gl_mem),
+            GL_MEM_STRIDE (gl_mem), n_gl_bytes);
       }
     }
   }
+
+  if (gl_mem->tex_target == GST_GL_TEXTURE_TARGET_RECTANGLE) {
+    guint w_sub =
+        GST_VIDEO_FORMAT_INFO_W_SUB (gl_mem->info.finfo, gl_mem->plane);
+    guint h_sub =
+        GST_VIDEO_FORMAT_INFO_H_SUB (gl_mem->info.finfo, gl_mem->plane);
+
+    if (w_sub)
+      gl_mem->tex_scaling[0] /= (1 << w_sub);
+    if (h_sub)
+      gl_mem->tex_scaling[1] /= (1 << h_sub);
+  }
 }
 
 static guint
@@ -560,22 +208,24 @@
 
   gl->GenTextures (1, &tex_id);
   gl->BindTexture (target, tex_id);
-  gl->TexImage2D (target, 0, internal_format, width, height, 0, format, type,
-      NULL);
+  if (target == GL_TEXTURE_2D || target == GL_TEXTURE_RECTANGLE)
+    gl->TexImage2D (target, 0, internal_format, width, height, 0, format, type,
+        NULL);
 
   gl->TexParameteri (target, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
   gl->TexParameteri (target, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
   gl->TexParameteri (target, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
   gl->TexParameteri (target, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
 
+  gl->BindTexture (target, 0);
+
   return tex_id;
 }
 
 static gboolean
-_gl_mem_create (GstGLMemory * gl_mem, GError ** error)
+_gl_tex_create (GstGLMemory * gl_mem, GError ** error)
 {
   GstGLContext *context = gl_mem->mem.context;
-  const GstGLFuncs *gl = context->gl_vtable;
   GLenum internal_format;
   GLenum tex_format;
   GLenum tex_type;
@@ -585,42 +235,50 @@
   if (gl_mem->tex_type == GST_VIDEO_GL_TEXTURE_TYPE_RGB16)
     tex_type = GL_UNSIGNED_SHORT_5_6_5;
 
-  GST_TRACE ("Generating texture format:%u type:%u dimensions:%ux%u",
-      tex_format, tex_type, gl_mem->tex_width, GL_MEM_HEIGHT (gl_mem));
-
   internal_format =
       gst_gl_sized_gl_format_from_gl_format_type (context, tex_format,
       tex_type);
 
   if (!gl_mem->texture_wrapped) {
     gl_mem->tex_id =
-        _new_texture (context, gl_mem->tex_target, internal_format, tex_format,
-        tex_type, gl_mem->tex_width, GL_MEM_HEIGHT (gl_mem));
-  }
+        _new_texture (context, gst_gl_texture_target_to_gl (gl_mem->tex_target),
+        internal_format, tex_format, tex_type, gl_mem->tex_width,
+        GL_MEM_HEIGHT (gl_mem));
 
-  GST_LOG ("generated texture id:%d", gl_mem->tex_id);
-
-  if (USING_OPENGL (context) || USING_OPENGL3 (context)
-      || USING_GLES3 (context)) {
-    /* FIXME: lazy init this for resource constrained platforms
-     * Will need to fix pbo detection based on the existence of the mem.id then */
-    gl->GenBuffers (1, &gl_mem->mem.id);
-    gl->BindBuffer (GL_PIXEL_UNPACK_BUFFER, gl_mem->mem.id);
-    gl->BufferData (GL_PIXEL_UNPACK_BUFFER, gl_mem->mem.mem.maxsize, NULL,
-        GL_STREAM_DRAW);
-    gl->BindBuffer (GL_PIXEL_UNPACK_BUFFER, 0);
-    GST_LOG ("generated pbo %u", gl_mem->mem.id);
+    GST_TRACE ("Generating texture id:%u format:%u type:%u dimensions:%ux%u",
+        gl_mem->tex_id, tex_format, tex_type, gl_mem->tex_width,
+        GL_MEM_HEIGHT (gl_mem));
   }
 
   return TRUE;
 }
 
-static void
-_gl_mem_init (GstGLMemory * mem, GstAllocator * allocator, GstMemory * parent,
-    GstGLContext * context, GstAllocationParams * params, GstVideoInfo * info,
-    GstVideoAlignment * valign, guint plane, gpointer user_data,
-    GDestroyNotify notify)
+/**
+ * gst_gl_memory_init:
+ * @mem: the #GstGLBaseMemory to initialize
+ * @allocator: the #GstAllocator to initialize with
+ * @parent: (allow-none): the parent #GstMemory to initialize with
+ * @context: the #GstGLContext to initialize with
+ * @target: the #GstGLTextureTarget for this #GstGLMemory
+ * @params: (allow-none): the @GstAllocationParams to initialize with
+ * @info: the #GstVideoInfo for this #GstGLMemory
+ * @plane: the plane number (starting from 0) for this #GstGLMemory
+ * @valign: (allow-none): optional #GstVideoAlignment parameters
+ * @notify: (allow-none): a #GDestroyNotify
+ * @user_data: (allow-none): user data to call @notify with
+ *
+ * Initializes @mem with the required parameters.  @info is assumed to have
+ * already have been modified with gst_video_info_align().
+ *
+ * Since: 1.8
+ */
+void
+gst_gl_memory_init (GstGLMemory * mem, GstAllocator * allocator,
+    GstMemory * parent, GstGLContext * context, GstGLTextureTarget target,
+    GstAllocationParams * params, GstVideoInfo * info, guint plane,
+    GstVideoAlignment * valign, gpointer user_data, GDestroyNotify notify)
 {
+  const gchar *target_str;
   gsize size;
 
   g_return_if_fail (plane < GST_VIDEO_INFO_N_PLANES (info));
@@ -648,45 +306,42 @@
 
   size = gst_gl_get_plane_data_size (info, valign, plane);
 
-  /* we always operate on 2D textures unless we're dealing with wrapped textures */
-  mem->tex_target = GL_TEXTURE_2D;
+  mem->tex_target = target;
   mem->tex_type =
       gst_gl_texture_type_from_format (context, GST_VIDEO_INFO_FORMAT (info),
       plane);
   mem->plane = plane;
-  mem->notify = notify;
-  mem->user_data = user_data;
 
   _calculate_unpack_length (mem, context);
 
-  /* calls _gl_mem_create() */
-  gst_gl_base_buffer_init ((GstGLBaseBuffer *) mem, allocator, parent, context,
-      params, size);
+  gst_gl_base_memory_init ((GstGLBaseMemory *) mem, allocator, parent, context,
+      params, size, user_data, notify);
 
-  GST_DEBUG ("new GL texture context:%" GST_PTR_FORMAT " memory:%p format:%u "
-      "dimensions:%ux%u stride:%u size:%" G_GSIZE_FORMAT, context, mem,
+  target_str = gst_gl_texture_target_to_string (target);
+  GST_CAT_DEBUG (GST_CAT_GL_MEMORY, "new GL texture context:%"
+      GST_PTR_FORMAT " memory:%p target:%s format:%u dimensions:%ux%u "
+      "stride:%u size:%" G_GSIZE_FORMAT, context, mem, target_str,
       mem->tex_type, mem->tex_width, GL_MEM_HEIGHT (mem), GL_MEM_STRIDE (mem),
       mem->mem.mem.size);
 }
 
-static GstGLMemory *
-_gl_mem_new (GstAllocator * allocator, GstMemory * parent,
-    GstGLContext * context, GstAllocationParams * params, GstVideoInfo * info,
-    GstVideoAlignment * valign, guint plane, gpointer user_data,
-    GDestroyNotify notify)
-{
-  GstGLMemory *mem;
-  mem = g_slice_new0 (GstGLMemory);
-  mem->texture_wrapped = FALSE;
-
-  _gl_mem_init (mem, allocator, parent, context, params, info, valign, plane,
-      user_data, notify);
-
-  return mem;
-}
-
-static gboolean
-_gl_mem_read_pixels (GstGLMemory * gl_mem, gpointer read_pointer)
+/**
+ * gst_gl_memory_read_pixels:
+ * @gl_mem: a #GstGLMemory
+ * @read_pointer: the data pointer to pass to glReadPixels
+ *
+ * Reads the texture in #GstGLMemory into @read_pointer if no buffer is bound
+ * to %GL_PIXEL_PACK_BUFFER.  Otherwise @read_pointer is the byte offset into
+ * the currently bound %GL_PIXEL_PACK_BUFFER buffer to store the result of
+ * glReadPixels.  See the OpenGL specification for glReadPixels for more
+ * details.
+ *
+ * Returns: whether theread operation succeeded
+ *
+ * Since: 1.8
+ */
+gboolean
+gst_gl_memory_read_pixels (GstGLMemory * gl_mem, gpointer read_pointer)
 {
   GstGLContext *context = gl_mem->mem.context;
   const GstGLFuncs *gl = context->gl_vtable;
@@ -703,7 +358,7 @@
   gl->BindFramebuffer (GL_FRAMEBUFFER, fbo);
 
   gl->FramebufferTexture2D (GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0,
-      gl_mem->tex_target, gl_mem->tex_id, 0);
+      gst_gl_texture_target_to_gl (gl_mem->tex_target), gl_mem->tex_id, 0);
 
   if (!gst_gl_context_check_framebuffer_status (context)) {
     GST_CAT_WARNING (GST_CAT_GL_MEMORY,
@@ -712,8 +367,11 @@
     return FALSE;
   }
 
+  gst_gl_query_start_log (GST_GL_BASE_MEMORY_CAST (gl_mem)->query,
+      GST_CAT_GL_MEMORY, GST_LEVEL_LOG, NULL, "%s", "glReadPixels took");
   gl->ReadPixels (0, 0, gl_mem->tex_width, GL_MEM_HEIGHT (gl_mem), format,
       type, read_pointer);
+  gst_gl_query_end (GST_GL_BASE_MEMORY_CAST (gl_mem)->query);
 
   gl->BindFramebuffer (GL_FRAMEBUFFER, 0);
 
@@ -722,64 +380,8 @@
   return TRUE;
 }
 
-static gboolean
-_read_pixels_to_pbo (GstGLMemory * gl_mem)
-{
-  const GstGLFuncs *gl = gl_mem->mem.context->gl_vtable;
-
-  if (!gl_mem->mem.id || !CONTEXT_SUPPORTS_PBO_DOWNLOAD (gl_mem->mem.context)
-      || gl_mem->tex_type == GST_VIDEO_GL_TEXTURE_TYPE_LUMINANCE
-      || gl_mem->tex_type == GST_VIDEO_GL_TEXTURE_TYPE_LUMINANCE_ALPHA)
-    /* unsupported */
-    return FALSE;
-
-  if (gl_mem->transfer_state & GST_GL_MEMORY_TRANSFER_NEED_DOWNLOAD) {
-    /* copy texture data into into the pbo and map that */
-    gsize plane_start = _find_plane_frame_start (gl_mem);
-
-    gl->BindBuffer (GL_PIXEL_PACK_BUFFER, gl_mem->mem.id);
-
-    if (!_gl_mem_read_pixels (gl_mem, (gpointer) plane_start)) {
-      gl->BindBuffer (GL_PIXEL_PACK_BUFFER, 0);
-      return FALSE;
-    }
-
-    gl->BindBuffer (GL_PIXEL_PACK_BUFFER, 0);
-    gl_mem->transfer_state &= ~GST_GL_MEMORY_TRANSFER_NEED_DOWNLOAD;
-  }
-
-  return TRUE;
-}
-
 static gpointer
-_pbo_download_transfer (GstGLMemory * gl_mem, GstMapInfo * info, gsize size)
-{
-  GstGLBaseBufferAllocatorClass *alloc_class;
-  gpointer data = NULL;
-
-  alloc_class =
-      GST_GL_BASE_BUFFER_ALLOCATOR_CLASS (gst_gl_allocator_parent_class);
-
-  /* texture -> pbo */
-  if (info->flags & GST_MAP_READ
-      && gl_mem->transfer_state & GST_GL_MEMORY_TRANSFER_NEED_DOWNLOAD) {
-    GST_CAT_TRACE (GST_CAT_GL_MEMORY, "attempting download of texture %u "
-        "using pbo %u", gl_mem->tex_id, gl_mem->mem.id);
-
-    if (!_read_pixels_to_pbo (gl_mem))
-      return NULL;
-  }
-
-  /* get a cpu accessible mapping from the pbo */
-  gl_mem->mem.target = GL_PIXEL_PACK_BUFFER;
-  /* pbo -> data */
-  data = alloc_class->map_buffer ((GstGLBaseBuffer *) gl_mem, info, size);
-
-  return data;
-}
-
-static gpointer
-_gl_mem_download_get_tex_image (GstGLMemory * gl_mem, GstMapInfo * info,
+_gl_tex_download_get_tex_image (GstGLMemory * gl_mem, GstMapInfo * info,
     gsize size)
 {
   GstGLContext *context = gl_mem->mem.context;
@@ -797,8 +399,10 @@
     return NULL;
 
   if (info->flags & GST_MAP_READ
-      && gl_mem->transfer_state & GST_GL_MEMORY_TRANSFER_NEED_DOWNLOAD) {
+      && GST_MEMORY_FLAG_IS_SET (gl_mem,
+          GST_GL_BASE_MEMORY_TRANSFER_NEED_DOWNLOAD)) {
     guint format, type;
+    guint target;
 
     GST_CAT_TRACE (GST_CAT_GL_MEMORY, "attempting download of texture %u "
         "using glGetTexImage", gl_mem->tex_id);
@@ -808,26 +412,32 @@
     if (gl_mem->tex_type == GST_VIDEO_GL_TEXTURE_TYPE_RGB16)
       type = GL_UNSIGNED_SHORT_5_6_5;
 
-    gl->BindTexture (gl_mem->tex_target, gl_mem->tex_id);
-    gl->GetTexImage (gl_mem->tex_target, 0, format, type, gl_mem->mem.data);
-    gl->BindTexture (gl_mem->tex_target, 0);
+    target = gst_gl_texture_target_to_gl (gl_mem->tex_target);
+    gl->BindTexture (target, gl_mem->tex_id);
+    gst_gl_query_start_log (GST_GL_BASE_MEMORY_CAST (gl_mem)->query,
+        GST_CAT_GL_MEMORY, GST_LEVEL_LOG, NULL, "%s", "glGetTexImage took");
+    gl->GetTexImage (target, 0, format, type, gl_mem->mem.data);
+    gst_gl_query_end (GST_GL_BASE_MEMORY_CAST (gl_mem)->query);
+    gl->BindTexture (target, 0);
   }
 
   return gl_mem->mem.data;
 }
 
 static gpointer
-_gl_mem_download_read_pixels (GstGLMemory * gl_mem, GstMapInfo * info,
+_gl_tex_download_read_pixels (GstGLMemory * gl_mem, GstMapInfo * info,
     gsize size)
 {
   if (size != -1 && size != ((GstMemory *) gl_mem)->maxsize)
     return NULL;
 
   if (info->flags & GST_MAP_READ
-      && gl_mem->transfer_state & GST_GL_MEMORY_TRANSFER_NEED_DOWNLOAD) {
-    GST_CAT_TRACE (GST_CAT_GL_MEMORY, "attempting download of texture %u "
-        "using glReadPixels", gl_mem->tex_id);
-    if (!_gl_mem_read_pixels (gl_mem, gl_mem->mem.data))
+      && GST_MEMORY_FLAG_IS_SET (gl_mem,
+          GST_GL_BASE_MEMORY_TRANSFER_NEED_DOWNLOAD)) {
+    GST_CAT_TRACE (GST_CAT_GL_MEMORY,
+        "attempting download of texture %u " "using glReadPixels",
+        gl_mem->tex_id);
+    if (!gst_gl_memory_read_pixels (gl_mem, gl_mem->mem.data))
       return NULL;
   }
 
@@ -835,149 +445,234 @@
 }
 
 static gpointer
-_gl_mem_map_cpu_access (GstGLMemory * gl_mem, GstMapInfo * info, gsize size)
+_gl_tex_map_cpu_access (GstGLMemory * gl_mem, GstMapInfo * info, gsize size)
 {
   gpointer data = NULL;
 
-  gst_gl_base_buffer_alloc_data ((GstGLBaseBuffer *) gl_mem);
-
-  if (!data && gl_mem->mem.id
-      && CONTEXT_SUPPORTS_PBO_DOWNLOAD (gl_mem->mem.context))
-    data = _pbo_download_transfer (gl_mem, info, size);
-  if (!data)
-    data = _gl_mem_download_get_tex_image (gl_mem, info, size);
+  if (!gst_gl_base_memory_alloc_data (GST_GL_BASE_MEMORY_CAST (gl_mem)))
+    return NULL;
 
   if (!data)
-    data = _gl_mem_download_read_pixels (gl_mem, info, size);
+    data = _gl_tex_download_get_tex_image (gl_mem, info, size);
+
+  if (!data)
+    data = _gl_tex_download_read_pixels (gl_mem, info, size);
 
   return data;
 }
 
+static void
+_upload_cpu_write (GstGLMemory * gl_mem, GstMapInfo * info, gsize maxsize)
+{
+  gst_gl_memory_texsubimage (gl_mem, gl_mem->mem.data);
+}
+
+/**
+ * gst_gl_memory_texsubimage:
+ * @gl_mem: a #GstGLMemory
+ * @read_pointer: the data pointer to pass to glTexSubImage
+ *
+ * See gst_gl_memory_read_pixels() for what @read_pointer signifies.
+ *
+ * Since: 1.8
+ */
+void
+gst_gl_memory_texsubimage (GstGLMemory * gl_mem, gpointer read_pointer)
+{
+  GstGLContext *context = gl_mem->mem.context;
+  const GstGLFuncs *gl;
+  GLenum gl_format, gl_type, gl_target;
+  gpointer data;
+  gsize plane_start;
+
+  if (!GST_MEMORY_FLAG_IS_SET (gl_mem, GST_GL_BASE_MEMORY_TRANSFER_NEED_UPLOAD))
+    return;
+
+  gl = context->gl_vtable;
+
+  gl_type = GL_UNSIGNED_BYTE;
+  if (gl_mem->tex_type == GST_VIDEO_GL_TEXTURE_TYPE_RGB16)
+    gl_type = GL_UNSIGNED_SHORT_5_6_5;
+
+  gl_format = gst_gl_format_from_gl_texture_type (gl_mem->tex_type);
+  gl_target = gst_gl_texture_target_to_gl (gl_mem->tex_target);
+
+  if (USING_OPENGL (context) || USING_GLES3 (context)
+      || USING_OPENGL3 (context)) {
+    gl->PixelStorei (GL_UNPACK_ROW_LENGTH, gl_mem->unpack_length);
+  } else if (USING_GLES2 (context)) {
+    gl->PixelStorei (GL_UNPACK_ALIGNMENT, gl_mem->unpack_length);
+  }
+
+  GST_CAT_LOG (GST_CAT_GL_MEMORY, "upload for texture id:%u, %ux%u",
+      gl_mem->tex_id, gl_mem->tex_width, GL_MEM_HEIGHT (gl_mem));
+
+  /* find the start of the plane data including padding */
+  plane_start =
+      gst_gl_get_plane_start (&gl_mem->info, &gl_mem->valign,
+      gl_mem->plane) + gl_mem->mem.mem.offset;
+
+  data = (gpointer) ((gintptr) plane_start + (gintptr) read_pointer);
+
+  gl->BindTexture (gl_target, gl_mem->tex_id);
+  gst_gl_query_start_log (GST_GL_BASE_MEMORY_CAST (gl_mem)->query,
+      GST_CAT_GL_MEMORY, GST_LEVEL_LOG, NULL, "%s", "glTexSubImage took");
+  gl->TexSubImage2D (gl_target, 0, 0, 0, gl_mem->tex_width,
+      GL_MEM_HEIGHT (gl_mem), gl_format, gl_type, data);
+  gst_gl_query_end (GST_GL_BASE_MEMORY_CAST (gl_mem)->query);
+
+  /* Reset to default values */
+  if (USING_OPENGL (context) || USING_GLES3 (context)) {
+    gl->PixelStorei (GL_UNPACK_ROW_LENGTH, 0);
+  } else if (USING_GLES2 (context)) {
+    gl->PixelStorei (GL_UNPACK_ALIGNMENT, 4);
+  }
+
+  gl->BindTexture (gl_target, 0);
+}
+
 static gpointer
-_gl_mem_map_buffer (GstGLMemory * gl_mem, GstMapInfo * info, gsize maxsize)
+_default_gl_tex_map (GstGLMemory * gl_mem, GstMapInfo * info, gsize size)
 {
-  GstGLBaseBufferAllocatorClass *alloc_class;
+  if ((info->flags & GST_MAP_GL) == GST_MAP_GL) {
+    _upload_cpu_write (gl_mem, info, size);
+    return &gl_mem->tex_id;
+  } else {
+    return _gl_tex_map_cpu_access (gl_mem, info, size);
+  }
+}
+
+static gpointer
+_gl_tex_map (GstGLMemory * gl_mem, GstMapInfo * info, gsize maxsize)
+{
+  GstGLMemoryAllocatorClass *alloc_class;
   gpointer data;
 
-  alloc_class =
-      GST_GL_BASE_BUFFER_ALLOCATOR_CLASS (gst_gl_allocator_parent_class);
+  alloc_class = GST_GL_MEMORY_ALLOCATOR_GET_CLASS (gl_mem->mem.mem.allocator);
 
   if ((info->flags & GST_MAP_GL) == GST_MAP_GL) {
-    if ((info->flags & GST_MAP_READ) == GST_MAP_READ) {
-      GST_TRACE ("mapping GL texture:%u for reading", gl_mem->tex_id);
-
-      if (gl_mem->mem.id && CONTEXT_SUPPORTS_PBO_UPLOAD (gl_mem->mem.context)) {
-        gl_mem->mem.target = GL_PIXEL_UNPACK_BUFFER;
-        /* data -> pbo */
-        alloc_class->map_buffer ((GstGLBaseBuffer *) gl_mem, info, maxsize);
-      }
-      /* pbo -> texture */
-      _upload_memory (gl_mem, info, maxsize);
-    }
-
-    if ((info->flags & GST_MAP_WRITE) == GST_MAP_WRITE) {
-      GST_TRACE ("mapping GL texture:%u for writing", gl_mem->tex_id);
-      gl_mem->transfer_state |= GST_GL_MEMORY_TRANSFER_NEED_DOWNLOAD;
-    }
-    gl_mem->transfer_state &= ~GST_GL_MEMORY_TRANSFER_NEED_UPLOAD;
-
-    data = &gl_mem->tex_id;
+    if (gl_mem->tex_target == GST_GL_TEXTURE_TARGET_EXTERNAL_OES)
+      return &gl_mem->tex_id;
   } else {                      /* not GL */
-    data = _gl_mem_map_cpu_access (gl_mem, info, maxsize);
-    if (info->flags & GST_MAP_WRITE)
-      gl_mem->transfer_state |= GST_GL_MEMORY_TRANSFER_NEED_UPLOAD;
-    gl_mem->transfer_state &= ~GST_GL_MEMORY_TRANSFER_NEED_DOWNLOAD;
+    if (gl_mem->tex_target == GST_GL_TEXTURE_TARGET_EXTERNAL_OES) {
+      GST_CAT_ERROR (GST_CAT_GL_MEMORY, "Cannot map External OES textures");
+      return NULL;
+    }
   }
 
+  g_return_val_if_fail (alloc_class->map != NULL, NULL);
+  data = alloc_class->map (GST_GL_BASE_MEMORY_CAST (gl_mem), info, maxsize);
+
   return data;
 }
 
 static void
-_gl_mem_unmap_cpu_access (GstGLMemory * gl_mem, GstMapInfo * info)
+_default_gl_tex_unmap (GstGLMemory * gl_mem, GstMapInfo * info)
 {
-  GstGLBaseBufferAllocatorClass *alloc_class;
-  const GstGLFuncs *gl;
-
-  alloc_class =
-      GST_GL_BASE_BUFFER_ALLOCATOR_CLASS (gst_gl_allocator_parent_class);
-  gl = gl_mem->mem.context->gl_vtable;
-
-  if (!gl_mem->mem.id)
-    /* PBO's not supported */
-    return;
-
-  gl_mem->mem.target = GL_PIXEL_PACK_BUFFER;
-  alloc_class->unmap_buffer ((GstGLBaseBuffer *) gl_mem, info);
-  gl->BindBuffer (GL_PIXEL_PACK_BUFFER, 0);
 }
 
 static void
-_gl_mem_unmap_buffer (GstGLMemory * gl_mem, GstMapInfo * info)
+_gl_tex_unmap (GstGLMemory * gl_mem, GstMapInfo * info)
 {
-  if ((info->flags & GST_MAP_GL) == 0) {
-    _gl_mem_unmap_cpu_access (gl_mem, info);
-    if (info->flags & GST_MAP_WRITE)
-      gl_mem->transfer_state |= GST_GL_MEMORY_TRANSFER_NEED_UPLOAD;
-  } else {
-    if (info->flags & GST_MAP_WRITE)
-      gl_mem->transfer_state |= GST_GL_MEMORY_TRANSFER_NEED_DOWNLOAD;
-  }
+  GstGLMemoryAllocatorClass *alloc_class;
+
+  alloc_class = GST_GL_MEMORY_ALLOCATOR_GET_CLASS (gl_mem->mem.mem.allocator);
+  g_return_if_fail (alloc_class->unmap != NULL);
+
+  alloc_class->unmap (GST_GL_BASE_MEMORY_CAST (gl_mem), info);
 }
 
-static void
-_gl_mem_copy_thread (GstGLContext * context, gpointer data)
+/**
+ * gst_gl_memory_copy_texiamge:
+ * @gl_mem: the source #GstGLMemory
+ * @tex_id: the destination texture id
+ * @out_target: the destination #GstGLTextureTarget
+ * @out_tex_type: the destination #GstVideoGLTextureType
+ * @out_width: the destination width
+ * @out_height: the destination height
+ *
+ * Copies the texture in #GstGLMemory into the texture specified by @tex_id,
+ * @out_target, @out_tex_type, @out_width and @out_height.
+ *
+ * Returns: whether the copy succeeded.
+ *
+ * Since: 1.8
+ */
+gboolean
+gst_gl_memory_copy_teximage (GstGLMemory * src, guint tex_id,
+    GstGLTextureTarget out_target, GstVideoGLTextureType out_tex_type,
+    gint out_width, gint out_height)
 {
   const GstGLFuncs *gl;
-  GstGLMemoryCopyParams *copy_params;
-  GstGLMemory *src;
-  guint tex_id;
-  GLuint out_tex_target;
-  GLuint fboId;
-  gsize out_width, out_height, out_stride;
-  GLuint out_gl_format, out_gl_type;
-  GLuint in_gl_format, in_gl_type;
-  gsize in_size, out_size;
+  guint out_gl_format, out_tex_target;
+  GstMapInfo sinfo;
+  guint src_tex_id;
+  guint fbo;
 
-  copy_params = (GstGLMemoryCopyParams *) data;
-  src = copy_params->src;
-  tex_id = copy_params->tex_id;
-  out_tex_target = copy_params->tex_target;
-  out_width = copy_params->out_width;
-  out_height = copy_params->out_height;
-  out_stride = copy_params->out_stride;
-
-  gl = context->gl_vtable;
-  out_gl_format = gst_gl_format_from_gl_texture_type (copy_params->out_format);
-  out_gl_type = GL_UNSIGNED_BYTE;
-  if (copy_params->out_format == GST_VIDEO_GL_TEXTURE_TYPE_RGB16)
-    out_gl_type = GL_UNSIGNED_SHORT_5_6_5;
-  in_gl_format = gst_gl_format_from_gl_texture_type (src->tex_type);
-  in_gl_type = GL_UNSIGNED_BYTE;
-  if (src->tex_type == GST_VIDEO_GL_TEXTURE_TYPE_RGB16)
-    in_gl_type = GL_UNSIGNED_SHORT_5_6_5;
+  gl = src->mem.context->gl_vtable;
+  out_tex_target = gst_gl_texture_target_to_gl (out_target);
+  out_gl_format = gst_gl_format_from_gl_texture_type (out_tex_type);
 
   if (!gl->GenFramebuffers) {
-    gst_gl_context_set_error (context,
-        "Context, EXT_framebuffer_object not supported");
+    GST_CAT_ERROR (GST_CAT_GL_MEMORY, "Framebuffer objects not supported");
     goto error;
   }
 
-  in_size = GL_MEM_HEIGHT (src) * GL_MEM_STRIDE (src);
-  out_size = out_height * out_stride;
-
-  if (copy_params->respecify) {
-    if (in_size != out_size) {
-      GST_ERROR ("Cannot copy between textures with backing data of different"
-          "sizes. input %" G_GSIZE_FORMAT " output %" G_GSIZE_FORMAT, in_size,
-          out_size);
-      goto error;
-    }
+  if (!gst_memory_map (GST_MEMORY_CAST (src), &sinfo,
+          GST_MAP_READ | GST_MAP_GL)) {
+    GST_CAT_ERROR (GST_CAT_GL_MEMORY,
+        "Failed to map source memory for copying");
+    goto error;
   }
+  src_tex_id = *(guint *) sinfo.data;
 
-  if (!tex_id) {
-    guint internal_format;
-    guint out_gl_type;
+  GST_CAT_LOG (GST_CAT_GL_MEMORY, "copying memory %p, tex %u into "
+      "texture %i", src, src_tex_id, tex_id);
 
+  /* FIXME: try and avoid creating and destroying fbo's every copy... */
+  /* create a framebuffer object */
+  gl->GenFramebuffers (1, &fbo);
+  gl->BindFramebuffer (GL_FRAMEBUFFER, fbo);
+
+  gl->FramebufferTexture2D (GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0,
+      gst_gl_texture_target_to_gl (src->tex_target), src_tex_id, 0);
+
+//  if (!gst_gl_context_check_framebuffer_status (src->context))
+//    goto fbo_error;
+
+  gl->BindTexture (out_tex_target, tex_id);
+  gst_gl_query_start_log (GST_GL_BASE_MEMORY_CAST (src)->query,
+      GST_CAT_GL_MEMORY, GST_LEVEL_LOG, NULL, "%s", "CopyTexImage2D took");
+  gl->CopyTexImage2D (out_tex_target, 0, out_gl_format, 0, 0, out_width,
+      out_height, 0);
+  gst_gl_query_end (GST_GL_BASE_MEMORY_CAST (src)->query);
+
+  gl->BindTexture (out_tex_target, 0);
+  gl->BindFramebuffer (GL_FRAMEBUFFER, 0);
+
+  gl->DeleteFramebuffers (1, &fbo);
+
+  gst_memory_unmap (GST_MEMORY_CAST (src), &sinfo);
+
+  return TRUE;
+
+error:
+  return FALSE;
+}
+
+static void
+_gl_tex_copy_thread (GstGLContext * context, gpointer data)
+{
+  GstGLMemoryCopyParams *copy_params;
+
+  copy_params = (GstGLMemoryCopyParams *) data;
+
+  if (!copy_params->tex_id) {
+    guint internal_format, out_gl_format, out_gl_type, out_tex_target;
+
+    out_tex_target = gst_gl_texture_target_to_gl (copy_params->tex_target);
+    out_gl_format =
+        gst_gl_format_from_gl_texture_type (copy_params->src->tex_type);
     out_gl_type = GL_UNSIGNED_BYTE;
     if (copy_params->out_format == GST_VIDEO_GL_TEXTURE_TYPE_RGB16)
       out_gl_type = GL_UNSIGNED_SHORT_5_6_5;
@@ -986,437 +681,224 @@
         gst_gl_sized_gl_format_from_gl_format_type (context, out_gl_format,
         out_gl_type);
 
-    tex_id =
-        _new_texture (context, out_tex_target, internal_format, out_gl_format,
-        out_gl_type, copy_params->out_width, copy_params->out_height);
+    copy_params->tex_id =
+        _new_texture (context, out_tex_target,
+        internal_format, out_gl_format, out_gl_type, copy_params->out_width,
+        copy_params->out_height);
   }
 
-  if (!tex_id) {
-    GST_WARNING ("Could not create GL texture with context:%p", context);
-  }
-
-  GST_LOG ("copying memory %p, tex %u into texture %i",
-      src, src->tex_id, tex_id);
-
-  /* FIXME: try and avoid creating and destroying fbo's every copy... */
-  /* create a framebuffer object */
-  gl->GenFramebuffers (1, &fboId);
-  gl->BindFramebuffer (GL_FRAMEBUFFER, fboId);
-
-  gl->FramebufferTexture2D (GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0,
-      src->tex_target, src->tex_id, 0);
-
-//  if (!gst_gl_context_check_framebuffer_status (src->context))
-//    goto fbo_error;
-
-  gl->BindTexture (out_tex_target, tex_id);
-  if (copy_params->respecify) {
-    if (!gl->GenBuffers || !src->mem.id) {
-      gst_gl_context_set_error (context, "Cannot reinterpret texture contents "
-          "without pixel buffer objects");
-      gl->BindTexture (out_tex_target, 0);
-      goto fbo_error;
-    }
-
-    if (gst_gl_context_get_gl_api (context) & GST_GL_API_GLES2
-        && (in_gl_format != GL_RGBA || in_gl_type != GL_UNSIGNED_BYTE)) {
-      gst_gl_context_set_error (context, "Cannot copy non RGBA/UNSIGNED_BYTE "
-          "textures on GLES2");
-      gl->BindTexture (out_tex_target, 0);
-      goto fbo_error;
-    }
-
-    GST_TRACE ("copying texture data with size of %u*%u*%u",
-        _gl_format_type_n_bytes (in_gl_format, in_gl_type), src->tex_width,
-        GL_MEM_HEIGHT (src));
-
-    /* copy tex */
-    gl->BindBuffer (GL_PIXEL_PACK_BUFFER, src->mem.id);
-    gl->BufferData (GL_PIXEL_PACK_BUFFER, in_size, NULL, GL_STREAM_COPY);
-    gl->ReadPixels (0, 0, src->tex_width, GL_MEM_HEIGHT (src), in_gl_format,
-        in_gl_type, 0);
-    gl->BindBuffer (GL_PIXEL_PACK_BUFFER, 0);
-
-    gl->BindBuffer (GL_PIXEL_UNPACK_BUFFER, src->mem.id);
-    gl->TexSubImage2D (out_tex_target, 0, 0, 0, out_width, out_height,
-        out_gl_format, out_gl_type, 0);
-
-    gl->BindBuffer (GL_PIXEL_UNPACK_BUFFER, 0);
-  } else {                      /* different sizes */
-    gl->CopyTexImage2D (out_tex_target, 0, out_gl_format, 0, 0, out_width,
-        out_height, 0);
-  }
-
-  gl->BindTexture (out_tex_target, 0);
-  gl->BindFramebuffer (GL_FRAMEBUFFER, 0);
-
-  gl->DeleteFramebuffers (1, &fboId);
-
-  copy_params->tex_id = tex_id;
-  copy_params->result = TRUE;
-
-  return;
-
-/* ERRORS */
-fbo_error:
-  {
-    gl->DeleteFramebuffers (1, &fboId);
-
-    copy_params->tex_id = 0;
-    copy_params->result = FALSE;
-    return;
-  }
-
-error:
-  {
-    copy_params->result = FALSE;
-    return;
-  }
+  copy_params->result = gst_gl_memory_copy_teximage (copy_params->src,
+      copy_params->tex_id, copy_params->tex_target, copy_params->tex_type,
+      copy_params->out_width, copy_params->out_height);
 }
 
 static GstMemory *
-_gl_mem_copy (GstGLMemory * src, gssize offset, gssize size)
+_default_gl_tex_copy (GstGLMemory * src, gssize offset, gssize size)
 {
-  GstGLAllocator *allocator = (GstGLAllocator *) src->mem.mem.allocator;
-  GstMemory *ret = NULL;
+  GstAllocationParams params = { 0, GST_MEMORY_CAST (src)->align, 0, 0 };
+  GstGLBaseMemoryAllocator *base_mem_allocator;
+  GstAllocator *allocator;
+  GstGLMemory *dest = NULL;
+
+  allocator = GST_MEMORY_CAST (src)->allocator;
+  base_mem_allocator = (GstGLBaseMemoryAllocator *) allocator;
+
+  if (src->tex_target == GST_GL_TEXTURE_TARGET_EXTERNAL_OES) {
+    GST_CAT_ERROR (GST_CAT_GL_MEMORY, "Cannot copy External OES textures");
+    return NULL;
+  }
 
   /* If not doing a full copy, then copy to sysmem, the 2D represention of the
    * texture would become wrong */
-  if (offset > 0 || size < src->mem.mem.size) {
-    ret = allocator->fallback_mem_copy (&src->mem.mem, offset, size);
-  } else if (GST_MEMORY_FLAG_IS_SET (src, GST_GL_BASE_BUFFER_FLAG_NEED_UPLOAD)) {
-    GstAllocationParams params = { 0, src->mem.mem.align, 0, 0 };
-    GstGLMemory *dest;
-
-    dest = _gl_mem_new (src->mem.mem.allocator, NULL, src->mem.context, &params,
-        &src->info, &src->valign, src->plane, NULL, NULL);
-    dest = (GstGLMemory *) gst_gl_base_buffer_alloc_data ((GstGLBaseBuffer *)
-        dest);
-
-    if (dest == NULL) {
-      GST_WARNING ("Could not copy GL Memory");
-      goto done;
-    }
-
-    memcpy (dest->mem.data, (guint8 *) src->mem.data + src->mem.mem.offset,
-        src->mem.mem.size);
-    GST_MINI_OBJECT_FLAG_SET (dest, GST_GL_BASE_BUFFER_FLAG_NEED_UPLOAD);
-    dest->transfer_state |= GST_GL_MEMORY_TRANSFER_NEED_UPLOAD;
-    ret = (GstMemory *) dest;
-  } else {
-    GstAllocationParams params = { 0, src->mem.mem.align, 0, 0 };
-    GstGLMemoryCopyParams copy_params;
-    GstGLMemory *dest;
-
-    copy_params.src = src;
-    copy_params.tex_id = 0;
-    copy_params.out_format = src->tex_type;
-    copy_params.tex_target = src->tex_target;
-    copy_params.out_width = src->tex_width;
-    copy_params.out_height = GL_MEM_HEIGHT (src);
-    copy_params.out_stride = GL_MEM_STRIDE (src);
-    copy_params.respecify = FALSE;
-
-    _gl_mem_copy_thread (src->mem.context, &copy_params);
-
-    if (!copy_params.result) {
-      GST_WARNING ("Could not copy GL Memory");
-      goto done;
-    }
-
-    dest = g_slice_new0 (GstGLMemory);
-    /* don't create our own texture */
-    dest->texture_wrapped = TRUE;
-    _gl_mem_init (dest, src->mem.mem.allocator, NULL, src->mem.context, &params,
-        &src->info, &src->valign, src->plane, NULL, NULL);
-    dest->texture_wrapped = FALSE;
-
-    dest->tex_id = copy_params.tex_id;
-    dest->tex_target = copy_params.tex_target;
-    dest = (GstGLMemory *) gst_gl_base_buffer_alloc_data ((GstGLBaseBuffer *)
-        dest);
-    GST_MINI_OBJECT_FLAG_SET (dest, GST_GL_BASE_BUFFER_FLAG_NEED_DOWNLOAD);
-    dest->transfer_state |= GST_GL_MEMORY_TRANSFER_NEED_DOWNLOAD;
-    ret = (GstMemory *) dest;
+  if (offset > 0 || size < GST_MEMORY_CAST (src)->size) {
+    return base_mem_allocator->fallback_mem_copy (GST_MEMORY_CAST (src), offset,
+        size);
   }
 
-done:
-  return ret;
+  dest = g_new0 (GstGLMemory, 1);
+
+  gst_gl_memory_init (dest, allocator, NULL, src->mem.context, src->tex_target,
+      &params, &src->info, src->plane, &src->valign, NULL, NULL);
+
+  if (GST_MEMORY_FLAG_IS_SET (src, GST_GL_BASE_MEMORY_TRANSFER_NEED_UPLOAD)) {
+    if (!gst_gl_base_memory_memcpy ((GstGLBaseMemory *) src,
+            (GstGLBaseMemory *) dest, offset, size)) {
+      GST_CAT_WARNING (GST_CAT_GL_MEMORY, "Could not copy GL Memory");
+      gst_memory_unref (GST_MEMORY_CAST (dest));
+      return NULL;
+    }
+  } else {
+    GstMapInfo dinfo;
+
+    if (!gst_memory_map (GST_MEMORY_CAST (dest), &dinfo,
+            GST_MAP_WRITE | GST_MAP_GL)) {
+      GST_CAT_WARNING (GST_CAT_GL_MEMORY,
+          "Failed not map destination " "for writing");
+      gst_memory_unref (GST_MEMORY_CAST (dest));
+      return NULL;
+    }
+
+    if (!gst_gl_memory_copy_into ((GstGLMemory *) src,
+            ((GstGLMemory *) dest)->tex_id, src->tex_target,
+            src->tex_type, src->tex_width, GL_MEM_HEIGHT (src))) {
+      GST_CAT_WARNING (GST_CAT_GL_MEMORY, "Could not copy GL Memory");
+      gst_memory_unmap (GST_MEMORY_CAST (dest), &dinfo);
+      gst_memory_unref (GST_MEMORY_CAST (dest));
+      return NULL;
+    }
+
+    gst_memory_unmap (GST_MEMORY_CAST (dest), &dinfo);
+  }
+
+  return (GstMemory *) dest;
 }
 
 static GstMemory *
-_gl_mem_alloc (GstAllocator * allocator, gsize size,
+_gl_tex_copy (GstGLMemory * src, gssize offset, gssize size)
+{
+  GstGLMemoryAllocatorClass *alloc_class;
+
+  alloc_class = GST_GL_MEMORY_ALLOCATOR_GET_CLASS (src->mem.mem.allocator);
+
+  if (src->tex_target == GST_GL_TEXTURE_TARGET_EXTERNAL_OES) {
+    GST_CAT_ERROR (GST_CAT_GL_MEMORY, "Cannot copy External OES textures");
+    return NULL;
+  }
+
+  g_return_val_if_fail (alloc_class->copy, NULL);
+  return (GstMemory *) alloc_class->copy (GST_GL_BASE_MEMORY_CAST (src), offset,
+      size);
+}
+
+static GstMemory *
+_gl_tex_alloc (GstAllocator * allocator, gsize size,
     GstAllocationParams * params)
 {
-  g_warning ("use gst_gl_memory_alloc () to allocate from this "
-      "GstGLMemory allocator");
+  g_warning ("Use gst_gl_base_memory_alloc to allocate from this allocator");
 
   return NULL;
 }
 
 static void
-_gl_mem_destroy (GstGLMemory * gl_mem)
+_gl_tex_destroy (GstGLMemory * gl_mem)
 {
   const GstGLFuncs *gl = gl_mem->mem.context->gl_vtable;
 
   if (gl_mem->tex_id && !gl_mem->texture_wrapped)
     gl->DeleteTextures (1, &gl_mem->tex_id);
+}
 
-  if (gl_mem->mem.id)
-    gl->DeleteBuffers (1, &gl_mem->mem.id);
+static GstGLMemory *
+_default_gl_tex_alloc (GstGLMemoryAllocator * allocator,
+    GstGLVideoAllocationParams * params)
+{
+  guint alloc_flags = params->parent.alloc_flags;
+  GstGLMemory *mem;
+
+  g_return_val_if_fail (alloc_flags & GST_GL_ALLOCATION_PARAMS_ALLOC_FLAG_VIDEO,
+      NULL);
+
+  mem = g_new0 (GstGLMemory, 1);
+
+  if (alloc_flags & GST_GL_ALLOCATION_PARAMS_ALLOC_FLAG_WRAP_GPU_HANDLE) {
+    mem->tex_id = params->parent.gl_handle;
+    mem->texture_wrapped = TRUE;
+  }
+
+  gst_gl_memory_init (mem, GST_ALLOCATOR_CAST (allocator), NULL,
+      params->parent.context, params->target, params->parent.alloc_params,
+      params->v_info, params->plane, params->valign, params->parent.user_data,
+      params->parent.notify);
+
+  if (alloc_flags & GST_GL_ALLOCATION_PARAMS_ALLOC_FLAG_WRAP_GPU_HANDLE) {
+    GST_MINI_OBJECT_FLAG_SET (mem, GST_GL_BASE_MEMORY_TRANSFER_NEED_DOWNLOAD);
+  }
+  if (alloc_flags & GST_GL_ALLOCATION_PARAMS_ALLOC_FLAG_WRAP_SYSMEM) {
+    mem->mem.data = params->parent.wrapped_data;
+    GST_MINI_OBJECT_FLAG_SET (mem, GST_GL_BASE_MEMORY_TRANSFER_NEED_UPLOAD);
+  }
+
+  return mem;
 }
 
 static void
-_gl_mem_free (GstAllocator * allocator, GstMemory * mem)
+gst_gl_memory_allocator_class_init (GstGLMemoryAllocatorClass * klass)
 {
-  GstGLMemory *gl_mem = (GstGLMemory *) mem;
-
-  GST_ALLOCATOR_CLASS (gst_gl_allocator_parent_class)->free (allocator, mem);
-
-  if (gl_mem->notify)
-    gl_mem->notify (gl_mem->user_data);
-
-  g_slice_free (GstGLMemory, gl_mem);
-}
-
-static void
-gst_gl_allocator_class_init (GstGLAllocatorClass * klass)
-{
-  GstGLBaseBufferAllocatorClass *gl_base;
+  GstGLBaseMemoryAllocatorClass *gl_base;
   GstAllocatorClass *allocator_class;
 
-  gl_base = (GstGLBaseBufferAllocatorClass *) klass;
+  gl_base = (GstGLBaseMemoryAllocatorClass *) klass;
   allocator_class = (GstAllocatorClass *) klass;
 
-  gl_base->create = (GstGLBaseBufferAllocatorCreateFunction) _gl_mem_create;
-  gl_base->map_buffer =
-      (GstGLBaseBufferAllocatorMapBufferFunction) _gl_mem_map_buffer;
-  gl_base->unmap_buffer =
-      (GstGLBaseBufferAllocatorUnmapBufferFunction) _gl_mem_unmap_buffer;
-  gl_base->copy = (GstGLBaseBufferAllocatorCopyFunction) _gl_mem_copy;
-  gl_base->destroy = (GstGLBaseBufferAllocatorDestroyFunction) _gl_mem_destroy;
+  klass->map = (GstGLBaseMemoryAllocatorMapFunction) _default_gl_tex_map;
+  klass->unmap = (GstGLBaseMemoryAllocatorUnmapFunction) _default_gl_tex_unmap;
+  klass->copy = (GstGLBaseMemoryAllocatorCopyFunction) _default_gl_tex_copy;
 
-  allocator_class->alloc = _gl_mem_alloc;
-  allocator_class->free = _gl_mem_free;
+  gl_base->alloc =
+      (GstGLBaseMemoryAllocatorAllocFunction) _default_gl_tex_alloc;
+  gl_base->create = (GstGLBaseMemoryAllocatorCreateFunction) _gl_tex_create;
+  gl_base->map = (GstGLBaseMemoryAllocatorMapFunction) _gl_tex_map;
+  gl_base->unmap = (GstGLBaseMemoryAllocatorUnmapFunction) _gl_tex_unmap;
+  gl_base->copy = (GstGLBaseMemoryAllocatorCopyFunction) _gl_tex_copy;
+  gl_base->destroy = (GstGLBaseMemoryAllocatorDestroyFunction) _gl_tex_destroy;
+
+  allocator_class->alloc = _gl_tex_alloc;
 }
 
 static void
-gst_gl_allocator_init (GstGLAllocator * allocator)
+gst_gl_memory_allocator_init (GstGLMemoryAllocator * allocator)
 {
   GstAllocator *alloc = GST_ALLOCATOR_CAST (allocator);
 
-  /* Keep the fallback copy function around, we will need it when copying with
-   * at an offset or smaller size */
-  allocator->fallback_mem_copy = alloc->mem_copy;
-
-  alloc->mem_type = GST_GL_MEMORY_ALLOCATOR;
+  alloc->mem_type = GST_GL_MEMORY_ALLOCATOR_NAME;
 
   GST_OBJECT_FLAG_SET (allocator, GST_ALLOCATOR_FLAG_CUSTOM_ALLOC);
 }
 
 /**
- * gst_gl_memory_copy_into_texture:
+ * gst_gl_memory_copy_into:
  * @gl_mem:a #GstGLMemory
  * @tex_id:OpenGL texture id
- * @tex_type: a #GstVideoGLTextureType
+ * @target: the #GstGLTextureTarget
+ * @tex_type: the #GstVideoGLTextureType
  * @width: width of @tex_id
  * @height: height of @tex_id
- * @stride: stride of the backing texture data
- * @respecify: whether to copy the data or copy per texel
  *
  * Copies @gl_mem into the texture specfified by @tex_id.  The format of @tex_id
  * is specified by @tex_type, @width and @height.
  *
- * If @respecify is %TRUE, then the copy is performed in terms of the texture
- * data.  This is useful for splitting RGBA textures into RG or R textures or
- * vice versa. The requirement for this to succeed is that the backing texture
- * data must be the same size, i.e. say a RGBA8 texture is converted into a RG8
- * texture, then the RG texture must have twice as many pixels available for
- * output as the RGBA texture.
- *
- * Otherwise, if @respecify is %FALSE, then the copy is performed per texel
- * using glCopyTexImage.  See the OpenGL specification for details on the
- * mappings between texture formats.
- *
  * Returns: Whether the copy suceeded
+ *
+ * Since: 1.8
  */
 gboolean
-gst_gl_memory_copy_into_texture (GstGLMemory * gl_mem, guint tex_id,
-    GstVideoGLTextureType tex_type, gint width, gint height, gint stride,
-    gboolean respecify)
+gst_gl_memory_copy_into (GstGLMemory * gl_mem, guint tex_id,
+    GstGLTextureTarget target, GstVideoGLTextureType tex_type, gint width,
+    gint height)
 {
   GstGLMemoryCopyParams copy_params;
 
   copy_params.src = gl_mem;
-  copy_params.tex_target = gl_mem->tex_target;
   copy_params.tex_id = tex_id;
-  copy_params.out_format = tex_type;
+  copy_params.tex_target = target;
+  copy_params.tex_type = tex_type;
   copy_params.out_width = width;
   copy_params.out_height = height;
-  copy_params.out_stride = stride;
-  copy_params.respecify = respecify;
 
-  gst_gl_context_thread_add (gl_mem->mem.context, _gl_mem_copy_thread,
+  gst_gl_context_thread_add (gl_mem->mem.context, _gl_tex_copy_thread,
       &copy_params);
 
   return copy_params.result;
 }
 
 /**
- * gst_gl_memory_wrapped_texture:
- * @context: a #GstGLContext
- * @texture_id: the GL texture handle
- * @texture_target: the GL texture target
- * @info: the #GstVideoInfo of the memory
- * @plane: The plane this memory will represent
- * @user_data: user data
- * @notify: Destroy callback for the user data
+ * gst_gl_memory_get_texture_width:
+ * @gl_mem: a #GstGLMemory
  *
- * Wraps a texture handle into a #GstGLMemory.
+ * Returns: the texture width of @gl_mem
  *
- * Returns: a newly allocated #GstGLMemory
+ * Since: 1.8
  */
-GstGLMemory *
-gst_gl_memory_wrapped_texture (GstGLContext * context,
-    guint texture_id, guint texture_target,
-    GstVideoInfo * info, guint plane, GstVideoAlignment * valign,
-    gpointer user_data, GDestroyNotify notify)
-{
-  GstGLMemory *mem;
-
-  mem = g_slice_new0 (GstGLMemory);
-
-  mem->tex_id = texture_id;
-  mem->texture_wrapped = TRUE;
-
-  _gl_mem_init (mem, _gl_allocator, NULL, context, NULL, info, valign, plane,
-      user_data, notify);
-
-  mem->tex_target = texture_target;
-
-  mem = (GstGLMemory *) gst_gl_base_buffer_alloc_data ((GstGLBaseBuffer *) mem);
-  GST_MINI_OBJECT_FLAG_SET (mem, GST_GL_BASE_BUFFER_FLAG_NEED_DOWNLOAD);
-  mem->transfer_state |= GST_GL_MEMORY_TRANSFER_NEED_DOWNLOAD;
-
-  return mem;
-}
-
-/**
- * gst_gl_memory_alloc:
- * @context:a #GstGLContext
- * @params: a #GstAllocationParams
- * @info: the #GstVideoInfo of the memory
- * @plane: the plane this memory will represent
- * @valign: the #GstVideoAlignment applied to @info
- *
- * Allocated a new #GstGlMemory.
- *
- * Returns: a #GstMemory object with a GL texture specified by @vinfo
- *          from @context
- */
-GstMemory *
-gst_gl_memory_alloc (GstGLContext * context, GstAllocationParams * params,
-    GstVideoInfo * info, guint plane, GstVideoAlignment * valign)
-{
-  GstGLMemory *mem;
-
-  mem = _gl_mem_new (_gl_allocator, NULL, context, params, info, valign, plane,
-      NULL, NULL);
-  mem = (GstGLMemory *) gst_gl_base_buffer_alloc_data ((GstGLBaseBuffer *) mem);
-
-  return (GstMemory *) mem;
-}
-
-/**
- * gst_gl_memory_wrapped:
- * @context:a #GstGLContext
- * @info: the #GstVideoInfo of the memory and data
- * @plane: the plane this memory will represent
- * @valign: the #GstVideoAlignment applied to @info
- * @data: the data to wrap
- * @user_data: data called with for @notify
- * @notify: function called with @user_data when @data needs to be freed
- * 
- * Wrapped @data into a #GstGLMemory. This version will account for padding
- * added to the allocation and expressed through @valign.
- *
- * Returns: a #GstGLMemory object with a GL texture specified by @v_info
- *          from @context and contents specified by @data
- */
-GstGLMemory *
-gst_gl_memory_wrapped (GstGLContext * context, GstVideoInfo * info,
-    guint plane, GstVideoAlignment * valign, gpointer data, gpointer user_data,
-    GDestroyNotify notify)
-{
-  GstGLMemory *mem;
-
-  mem = _gl_mem_new (_gl_allocator, NULL, context, NULL, info, valign, plane,
-      user_data, notify);
-  if (!mem)
-    return NULL;
-
-  mem->mem.data = data;
-
-  GST_MINI_OBJECT_FLAG_SET (mem, GST_GL_BASE_BUFFER_FLAG_NEED_UPLOAD);
-  mem->transfer_state |= GST_GL_MEMORY_TRANSFER_NEED_UPLOAD;
-
-  return mem;
-}
-
-static void
-_download_transfer (GstGLContext * context, GstGLMemory * gl_mem)
-{
-  GstGLBaseBuffer *mem = (GstGLBaseBuffer *) gl_mem;
-
-  g_mutex_lock (&mem->lock);
-  if (_read_pixels_to_pbo (gl_mem))
-    GST_CAT_TRACE (GST_CAT_GL_MEMORY, "optimistic download of texture %u "
-        "using pbo %u", gl_mem->tex_id, gl_mem->mem.id);
-  g_mutex_unlock (&mem->lock);
-}
-
-void
-gst_gl_memory_download_transfer (GstGLMemory * gl_mem)
-{
-  g_return_if_fail (gst_is_gl_memory ((GstMemory *) gl_mem));
-
-  gst_gl_context_thread_add (gl_mem->mem.context,
-      (GstGLContextThreadFunc) _download_transfer, gl_mem);
-}
-
-static void
-_upload_transfer (GstGLContext * context, GstGLMemory * gl_mem)
-{
-  GstGLBaseBufferAllocatorClass *alloc_class;
-  GstGLBaseBuffer *mem = (GstGLBaseBuffer *) gl_mem;
-  GstMapInfo info;
-
-  alloc_class =
-      GST_GL_BASE_BUFFER_ALLOCATOR_CLASS (gst_gl_allocator_parent_class);
-
-  info.flags = GST_MAP_READ | GST_MAP_GL;
-  info.memory = (GstMemory *) mem;
-  /* from gst_memory_map() */
-  info.size = mem->mem.size;
-  info.maxsize = mem->mem.maxsize - mem->mem.offset;
-
-  g_mutex_lock (&mem->lock);
-  mem->target = GL_PIXEL_UNPACK_BUFFER;
-  alloc_class->map_buffer (mem, &info, mem->mem.maxsize);
-  alloc_class->unmap_buffer (mem, &info);
-  g_mutex_unlock (&mem->lock);
-}
-
-void
-gst_gl_memory_upload_transfer (GstGLMemory * gl_mem)
-{
-  g_return_if_fail (gst_is_gl_memory ((GstMemory *) gl_mem));
-
-  if (CONTEXT_SUPPORTS_PBO_UPLOAD (gl_mem->mem.context))
-    gst_gl_context_thread_add (gl_mem->mem.context,
-        (GstGLContextThreadFunc) _upload_transfer, gl_mem);
-}
-
 gint
 gst_gl_memory_get_texture_width (GstGLMemory * gl_mem)
 {
@@ -1425,6 +907,14 @@
   return gl_mem->tex_width;
 }
 
+/**
+ * gst_gl_memory_get_texture_height:
+ * @gl_mem: a #GstGLMemory
+ *
+ * Returns: the texture height of @gl_mem
+ *
+ * Since: 1.8
+ */
 gint
 gst_gl_memory_get_texture_height (GstGLMemory * gl_mem)
 {
@@ -1434,23 +924,76 @@
 }
 
 /**
- * gst_gl_memory_init:
+ * gst_gl_memory_get_texture_type:
+ * @gl_mem: a #GstGLMemory
  *
- * Initializes the GL Memory allocator. It is safe to call this function
+ * Returns: the #GstVideoGLTextureType of @gl_mem
+ *
+ * Since: 1.8
+ */
+GstVideoGLTextureType
+gst_gl_memory_get_texture_type (GstGLMemory * gl_mem)
+{
+  g_return_val_if_fail (gst_is_gl_memory ((GstMemory *) gl_mem), 0);
+
+  return gl_mem->tex_type;
+}
+
+/**
+ * gst_gl_memory_get_texture_target:
+ * @gl_mem: a #GstGLMemory
+ *
+ * Returns: the #GstGLTextureTarget of @gl_mem
+ *
+ * Since: 1.8
+ */
+GstGLTextureTarget
+gst_gl_memory_get_texture_target (GstGLMemory * gl_mem)
+{
+  g_return_val_if_fail (gst_is_gl_memory ((GstMemory *) gl_mem), 0);
+
+  return gl_mem->tex_target;
+}
+
+/**
+ * gst_gl_memory_get_texture_id:
+ * @gl_mem: a #GstGLMemory
+ *
+ * Returns: the OpenGL texture handle of @gl_mem
+ *
+ * Since: 1.8
+ */
+guint
+gst_gl_memory_get_texture_id (GstGLMemory * gl_mem)
+{
+  g_return_val_if_fail (gst_is_gl_memory ((GstMemory *) gl_mem), 0);
+
+  return gl_mem->tex_id;
+}
+
+/**
+ * gst_gl_memory_init_once:
+ *
+ * Initializes the GL Base Texture allocator. It is safe to call this function
  * multiple times.  This must be called before any other GstGLMemory operation.
+ *
+ * Since: 1.4
  */
 void
-gst_gl_memory_init (void)
+gst_gl_memory_init_once (void)
 {
   static volatile gsize _init = 0;
 
   if (g_once_init_enter (&_init)) {
-    GST_DEBUG_CATEGORY_INIT (GST_CAT_GL_MEMORY, "glmemory", 0, "OpenGL Memory");
+    gst_gl_base_memory_init_once ();
 
-    _gl_allocator = g_object_new (gst_gl_allocator_get_type (), NULL);
+    GST_DEBUG_CATEGORY_INIT (GST_CAT_GL_MEMORY, "glbasetexture", 0,
+        "OpenGL Base Texture Memory");
 
-    gst_allocator_register (GST_GL_MEMORY_ALLOCATOR,
-        gst_object_ref (_gl_allocator));
+    _gl_memory_allocator = g_object_new (GST_TYPE_GL_MEMORY_ALLOCATOR, NULL);
+
+    gst_allocator_register (GST_GL_MEMORY_ALLOCATOR_NAME, _gl_memory_allocator);
+
     g_once_init_leave (&_init, 1);
   }
 }
@@ -1460,90 +1003,343 @@
  * @mem:a #GstMemory
  * 
  * Returns: whether the memory at @mem is a #GstGLMemory
+ *
+ * Since: 1.4
  */
 gboolean
 gst_is_gl_memory (GstMemory * mem)
 {
   return mem != NULL && mem->allocator != NULL
-      && g_type_is_a (G_OBJECT_TYPE (mem->allocator), GST_TYPE_GL_ALLOCATOR);
+      && g_type_is_a (G_OBJECT_TYPE (mem->allocator),
+      GST_TYPE_GL_MEMORY_ALLOCATOR);
+}
+
+static void
+_gst_gl_video_allocation_params_set_video_alignment (GstGLVideoAllocationParams
+    * params, GstVideoAlignment * valign)
+{
+  g_return_if_fail (params != NULL);
+
+  if (!params->valign)
+    params->valign = g_new0 (GstVideoAlignment, 1);
+
+  if (valign) {
+    *params->valign = *valign;
+  } else {
+    gst_video_alignment_reset (params->valign);
+  }
+}
+
+/**
+ * gst_gl_video_allocation_params_init_full:
+ * @params: a #GstGLVideoAllocationParams to initialize
+ * @struct_size: the size of the struct in @params
+ * @alloc_flags: some allocation flags
+ * @copy: a copy function
+ * @free: a free function
+ * @context: a #GstGLContext
+ * @alloc_params: (allow-none): the #GstAllocationParams for @wrapped_data
+ * @v_info: the #GstVideoInfo for @wrapped_data
+ * @plane: the video plane @wrapped_data represents
+ * @valign: (allow-none): any #GstVideoAlignment applied to symem mappings of @wrapped_data
+ * @target: the #GstGLTextureTarget
+ * @wrapped_data: (allow-none): the optional data pointer to wrap
+ * @gl_handle: the optional OpenGL handle to wrap or 0
+ * @user_data: (allow-none): user data to call @notify with
+ * @notify: (allow-none): a #GDestroyNotify
+ *
+ * Intended for subclass usage
+ *
+ * Returns: initializes @params with the parameters specified
+ *
+ * Since: 1.8
+ */
+gboolean
+gst_gl_video_allocation_params_init_full (GstGLVideoAllocationParams * params,
+    gsize struct_size, guint alloc_flags, GstGLAllocationParamsCopyFunc copy,
+    GstGLAllocationParamsFreeFunc free, GstGLContext * context,
+    GstAllocationParams * alloc_params, GstVideoInfo * v_info,
+    guint plane, GstVideoAlignment * valign, GstGLTextureTarget target,
+    gpointer wrapped_data, guint gl_handle, gpointer user_data,
+    GDestroyNotify notify)
+{
+  guint i;
+
+  g_return_val_if_fail (params != NULL, FALSE);
+  g_return_val_if_fail (copy != NULL, FALSE);
+  g_return_val_if_fail (free != NULL, FALSE);
+  g_return_val_if_fail (GST_IS_GL_CONTEXT (context), FALSE);
+  g_return_val_if_fail (v_info != NULL, FALSE);
+
+  memset (params, 0, sizeof (*params));
+
+  if (!gst_gl_allocation_params_init ((GstGLAllocationParams *) params,
+          struct_size, alloc_flags, copy, free, context, 0, alloc_params,
+          wrapped_data, gl_handle, user_data, notify))
+    return FALSE;
+
+  params->v_info = g_new0 (GstVideoInfo, 1);
+  *params->v_info = *v_info;
+  for (i = 0; i < GST_VIDEO_MAX_PLANES; i++) {
+    params->v_info->offset[i] = v_info->offset[i];
+    params->v_info->stride[i] = v_info->stride[i];
+  }
+  _gst_gl_video_allocation_params_set_video_alignment (params, valign);
+  params->target = target;
+  params->plane = plane;
+
+  return TRUE;
+}
+
+/**
+ * gst_gl_video_allocation_params_new:
+ * @context: a #GstGLContext
+ * @alloc_params: (allow-none): the #GstAllocationParams for @wrapped_data
+ * @v_info: the #GstVideoInfo for @wrapped_data
+ * @plane: the video plane @wrapped_data represents
+ * @valign: (allow-none): any #GstVideoAlignment applied to symem mappings of @wrapped_data
+ * @target: the #GstGLTextureTarget for @wrapped_data
+ *
+ * Returns: a new #GstGLVideoAllocationParams for allocating #GstGLMemory's
+ *
+ * Since: 1.8
+ */
+GstGLVideoAllocationParams *
+gst_gl_video_allocation_params_new (GstGLContext * context,
+    GstAllocationParams * alloc_params, GstVideoInfo * v_info, guint plane,
+    GstVideoAlignment * valign, GstGLTextureTarget target)
+{
+  GstGLVideoAllocationParams *params = g_new0 (GstGLVideoAllocationParams, 1);
+
+  if (!gst_gl_video_allocation_params_init_full (params,
+          sizeof (GstGLVideoAllocationParams),
+          GST_GL_ALLOCATION_PARAMS_ALLOC_FLAG_ALLOC |
+          GST_GL_ALLOCATION_PARAMS_ALLOC_FLAG_VIDEO,
+          (GstGLAllocationParamsCopyFunc)
+          gst_gl_video_allocation_params_copy_data,
+          (GstGLAllocationParamsFreeFunc)
+          gst_gl_video_allocation_params_free_data, context, alloc_params,
+          v_info, plane, valign, target, NULL, 0, NULL, NULL)) {
+    g_free (params);
+    return NULL;
+  }
+
+  return params;
+}
+
+/**
+ * gst_gl_video_allocation_params_new_wrapped_data:
+ * @context: a #GstGLContext
+ * @alloc_params: (allow-none): the #GstAllocationParams for @wrapped_data
+ * @v_info: the #GstVideoInfo for @wrapped_data
+ * @plane: the video plane @wrapped_data represents
+ * @valign: (allow-none): any #GstVideoAlignment applied to symem mappings of @wrapped_data
+ * @target: the #GstGLTextureTarget for @wrapped_data
+ * @wrapped_data: the data pointer to wrap
+ * @user_data: (allow-none): user data to call @notify with
+ * @notify: (allow-none): a #GDestroyNotify
+ *
+ * Returns: a new #GstGLVideoAllocationParams for wrapping @wrapped_data
+ *
+ * Since: 1.8
+ */
+GstGLVideoAllocationParams *
+gst_gl_video_allocation_params_new_wrapped_data (GstGLContext * context,
+    GstAllocationParams * alloc_params, GstVideoInfo * v_info, guint plane,
+    GstVideoAlignment * valign, GstGLTextureTarget target,
+    gpointer wrapped_data, gpointer user_data, GDestroyNotify notify)
+{
+  GstGLVideoAllocationParams *params = g_new0 (GstGLVideoAllocationParams, 1);
+
+  if (!gst_gl_video_allocation_params_init_full (params,
+          sizeof (GstGLVideoAllocationParams),
+          GST_GL_ALLOCATION_PARAMS_ALLOC_FLAG_WRAP_SYSMEM |
+          GST_GL_ALLOCATION_PARAMS_ALLOC_FLAG_VIDEO,
+          (GstGLAllocationParamsCopyFunc)
+          gst_gl_video_allocation_params_copy_data,
+          (GstGLAllocationParamsFreeFunc)
+          gst_gl_video_allocation_params_free_data, context, alloc_params,
+          v_info, plane, valign, target, wrapped_data, 0, user_data, notify)) {
+    g_free (params);
+    return NULL;
+  }
+
+  return params;
+}
+
+/**
+ * gst_gl_video_allocation_params_new_wrapped_texture:
+ * @context: a #GstGLContext
+ * @alloc_params: (allow-none): the #GstAllocationParams for @tex_id
+ * @v_info: the #GstVideoInfo for @tex_id
+ * @plane: the video plane @tex_id represents
+ * @valign: (allow-none): any #GstVideoAlignment applied to symem mappings of @tex_id
+ * @target: the #GstGLTextureTarget for @tex_id
+ * @tex_id: the GL texture to wrap
+ * @user_data: (allow-none): user data to call @notify with
+ * @notify: (allow-none): a #GDestroyNotify
+ *
+ * Returns: a new #GstGLVideoAllocationParams for wrapping @tex_id
+ *
+ * Since: 1.8
+ */
+GstGLVideoAllocationParams *
+gst_gl_video_allocation_params_new_wrapped_texture (GstGLContext * context,
+    GstAllocationParams * alloc_params, GstVideoInfo * v_info, guint plane,
+    GstVideoAlignment * valign, GstGLTextureTarget target,
+    guint tex_id, gpointer user_data, GDestroyNotify notify)
+{
+  GstGLVideoAllocationParams *params = g_new0 (GstGLVideoAllocationParams, 1);
+
+  if (!gst_gl_video_allocation_params_init_full (params,
+          sizeof (GstGLVideoAllocationParams),
+          GST_GL_ALLOCATION_PARAMS_ALLOC_FLAG_WRAP_GPU_HANDLE |
+          GST_GL_ALLOCATION_PARAMS_ALLOC_FLAG_VIDEO,
+          (GstGLAllocationParamsCopyFunc)
+          gst_gl_video_allocation_params_copy_data,
+          (GstGLAllocationParamsFreeFunc)
+          gst_gl_video_allocation_params_free_data, context, alloc_params,
+          v_info, plane, valign, target, NULL, tex_id, user_data, notify)) {
+    g_free (params);
+    return NULL;
+  }
+
+  return params;
+}
+
+/**
+ * gst_gl_video_allocation_params_free_data:
+ * @params: a #GstGLVideoAllocationParams
+ *
+ * Unset and free any dynamically allocated resources.  Intended for subclass
+ * usage only to chain up at the end of a subclass free function.
+ *
+ * Since: 1.8
+ */
+void
+gst_gl_video_allocation_params_free_data (GstGLVideoAllocationParams * params)
+{
+  g_free (params->v_info);
+  g_free (params->valign);
+
+  gst_gl_allocation_params_free_data (&params->parent);
+}
+
+/**
+ * gst_gl_video_allocation_params_copy_data:
+ * @src_vid: source #GstGLVideoAllocationParams to copy from
+ * @dest_vid: destination #GstGLVideoAllocationParams to copy into
+ *
+ * Copy and set any dynamically allocated resources in @dest_vid.  Intended
+ * for subclass usage only to chain up at the end of a subclass copy function.
+ *
+ * Since: 1.8
+ */
+void
+gst_gl_video_allocation_params_copy_data (GstGLVideoAllocationParams * src_vid,
+    GstGLVideoAllocationParams * dest_vid)
+{
+  GstGLAllocationParams *src = (GstGLAllocationParams *) src_vid;
+  GstGLAllocationParams *dest = (GstGLAllocationParams *) dest_vid;
+  guint i;
+
+  gst_gl_allocation_params_copy_data (src, dest);
+
+  dest_vid->v_info = g_new0 (GstVideoInfo, 1);
+  *dest_vid->v_info = *src_vid->v_info;
+  for (i = 0; i < GST_VIDEO_MAX_PLANES; i++) {
+    dest_vid->v_info->offset[i] = src_vid->v_info->offset[i];
+    dest_vid->v_info->stride[i] = src_vid->v_info->stride[i];
+  }
+  _gst_gl_video_allocation_params_set_video_alignment (dest_vid,
+      src_vid->valign);
+  dest_vid->target = src_vid->target;
+  dest_vid->plane = src_vid->plane;
 }
 
 /**
  * gst_gl_memory_setup_buffer:
- * @context: a #GstGLContext
- * @params: a #GstAllocationParams
- * @info: a #GstVideoInfo
- * @valign: the #GstVideoAlignment applied to @info
- * @buffer: a #GstBuffer
+ * @allocator: the @GstGLMemoryAllocator to allocate from
+ * @buffer: a #GstBuffer to setup
+ * @params: the #GstGLVideoAllocationParams to allocate with
  *
- * Adds the required #GstGLMemory<!--  -->s with the correct configuration to
- * @buffer based on @info. This version handles padding through @valign.
+ * Returns: whether the buffer was correctly setup
  *
- * Returns: whether the memory's were sucessfully added.
+ * Since: 1.8
  */
 gboolean
-gst_gl_memory_setup_buffer (GstGLContext * context,
-    GstAllocationParams * params, GstVideoInfo * info,
-    GstVideoAlignment * valign, GstBuffer * buffer)
+gst_gl_memory_setup_buffer (GstGLMemoryAllocator * allocator,
+    GstBuffer * buffer, GstGLVideoAllocationParams * params)
 {
-  GstGLMemory *gl_mem[GST_VIDEO_MAX_PLANES] = { NULL, };
+  GstGLBaseMemoryAllocator *base_allocator;
   guint n_mem, i, v, views;
+  guint alloc_flags = params->parent.alloc_flags;
 
-  n_mem = GST_VIDEO_INFO_N_PLANES (info);
+  g_return_val_if_fail (params != NULL, FALSE);
+  g_return_val_if_fail ((alloc_flags &
+          GST_GL_ALLOCATION_PARAMS_ALLOC_FLAG_WRAP_SYSMEM)
+      == 0, FALSE);
+  g_return_val_if_fail ((params->parent.alloc_flags &
+          GST_GL_ALLOCATION_PARAMS_ALLOC_FLAG_WRAP_GPU_HANDLE) == 0, FALSE);
+  g_return_val_if_fail (alloc_flags & GST_GL_ALLOCATION_PARAMS_ALLOC_FLAG_VIDEO,
+      FALSE);
 
-  if (GST_VIDEO_INFO_MULTIVIEW_MODE (info) ==
+  base_allocator = GST_GL_BASE_MEMORY_ALLOCATOR (allocator);
+  n_mem = GST_VIDEO_INFO_N_PLANES (params->v_info);
+
+  if (GST_VIDEO_INFO_MULTIVIEW_MODE (params->v_info) ==
       GST_VIDEO_MULTIVIEW_MODE_SEPARATED)
-    views = info->views;
+    views = params->v_info->views;
   else
     views = 1;
 
   for (v = 0; v < views; v++) {
     for (i = 0; i < n_mem; i++) {
-      gl_mem[i] =
-          (GstGLMemory *) gst_gl_memory_alloc (context, params, info, i,
-          valign);
-      if (gl_mem[i] == NULL)
+      GstGLMemory *gl_mem;
+
+      params->plane = i;
+
+      if (!(gl_mem = (GstGLMemory *) gst_gl_base_memory_alloc (base_allocator,
+                  (GstGLAllocationParams *) params)))
         return FALSE;
 
-      gst_buffer_append_memory (buffer, (GstMemory *) gl_mem[i]);
+      gst_buffer_append_memory (buffer, (GstMemory *) gl_mem);
     }
 
     gst_buffer_add_video_meta_full (buffer, v,
-        GST_VIDEO_INFO_FORMAT (info), GST_VIDEO_INFO_WIDTH (info),
-        GST_VIDEO_INFO_HEIGHT (info), n_mem, info->offset, info->stride);
+        GST_VIDEO_INFO_FORMAT (params->v_info),
+        GST_VIDEO_INFO_WIDTH (params->v_info),
+        GST_VIDEO_INFO_HEIGHT (params->v_info), n_mem, params->v_info->offset,
+        params->v_info->stride);
   }
 
   return TRUE;
 }
 
 /**
- * gst_gl_memory_setup_wrapped:
+ * gst_gl_memory_allocator_get_default:
  * @context: a #GstGLContext
- * @info: a #GstVideoInfo
- * @valign: a #GstVideoInfo
- * @data: a list of per plane data pointers
- * @textures: (transfer out): a list of #GstGLMemory
- * @user_data: user data for the destroy function
- * @notify: A function called each time a memory is freed
  *
- * Wraps per plane data pointer in @data into the corresponding entry in
- * @textures based on @info and padding from @valign. Note that the @notify
- * will be called as many time as there is planes.
+ * Returns: the default #GstGLMemoryAllocator supported by @context
  *
- * Returns: whether the memory's were sucessfully created.
+ * Since: 1.8
  */
-gboolean
-gst_gl_memory_setup_wrapped (GstGLContext * context, GstVideoInfo * info,
-    GstVideoAlignment * valign, gpointer data[GST_VIDEO_MAX_PLANES],
-    GstGLMemory * textures[GST_VIDEO_MAX_PLANES], gpointer user_data,
-    GDestroyNotify notify)
+GstGLMemoryAllocator *
+gst_gl_memory_allocator_get_default (GstGLContext * context)
 {
-  gint i;
+  GstGLMemoryAllocator *allocator = NULL;
 
-  for (i = 0; i < GST_VIDEO_INFO_N_PLANES (info); i++) {
-    textures[i] = (GstGLMemory *) gst_gl_memory_wrapped (context, info, i,
-        valign, data[i], user_data, notify);
+  g_return_val_if_fail (GST_IS_GL_CONTEXT (context), NULL);
+
+  /* we can only use the pbo allocator with GL > 3.0 contexts */
+  if (gst_gl_context_check_gl_version (context,
+          GST_GL_API_OPENGL | GST_GL_API_OPENGL3 | GST_GL_API_GLES2, 3, 0)) {
+    allocator = (GstGLMemoryAllocator *)
+        gst_allocator_find (GST_GL_MEMORY_PBO_ALLOCATOR_NAME);
+  } else {
+    allocator = (GstGLMemoryAllocator *)
+        gst_allocator_find (GST_GL_MEMORY_ALLOCATOR_NAME);
   }
 
-  return TRUE;
+  return allocator;
 }
diff --git a/gst-libs/gst/gl/gstglmemory.h b/gst-libs/gst/gl/gstglmemory.h
index 7bc4607..b032a5c 100644
--- a/gst-libs/gst/gl/gstglmemory.h
+++ b/gst-libs/gst/gl/gstglmemory.h
@@ -1,6 +1,6 @@
 /*
  * GStreamer
- * Copyright (C) 2012 Matthew Waters <ystreet00@gmail.com>
+ * Copyright (C) 2015 Matthew Waters <matthew@centricular.com>
  *
  * This library is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Library General Public
@@ -26,29 +26,27 @@
 #include <gst/gstmemory.h>
 #include <gst/video/video.h>
 
-#include <gst/gl/gstglbasebuffer.h>
-#include <gst/gl/gl.h>
+#include <gst/gl/gstglbasememory.h>
 
 G_BEGIN_DECLS
 
-#define GST_TYPE_GL_ALLOCATOR (gst_gl_allocator_get_type())
-GType gst_gl_allocator_get_type(void);
+#define GST_TYPE_GL_MEMORY_ALLOCATOR (gst_gl_memory_allocator_get_type())
+GType gst_gl_memory_allocator_get_type(void);
 
-#define GST_IS_GL_ALLOCATOR(obj)              (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GST_TYPE_GL_ALLOCATOR))
-#define GST_IS_GL_ALLOCATOR_CLASS(klass)      (G_TYPE_CHECK_CLASS_TYPE ((klass), GST_TYPE_GL_ALLOCATOR))
-#define GST_GL_ALLOCATOR_GET_CLASS(obj)       (G_TYPE_INSTANCE_GET_CLASS ((obj), GST_TYPE_GL_ALLOCATOR, GstGLAllocatorClass))
-#define GST_GL_ALLOCATOR(obj)                 (G_TYPE_CHECK_INSTANCE_CAST ((obj), GST_TYPE_GL_ALLOCATOR, GstGLAllocator))
-#define GST_GL_ALLOCATOR_CLASS(klass)         (G_TYPE_CHECK_CLASS_CAST ((klass), GST_TYPE_GL_ALLOCATOR, GstGLAllocatorClass))
-#define GST_GL_ALLOCATOR_CAST(obj)            ((GstGLAllocator *)(obj))
+#define GST_IS_GL_MEMORY_ALLOCATOR(obj)              (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GST_TYPE_GL_MEMORY_ALLOCATOR))
+#define GST_IS_GL_MEMORY_ALLOCATOR_CLASS(klass)      (G_TYPE_CHECK_CLASS_TYPE ((klass), GST_TYPE_GL_MEMORY_ALLOCATOR))
+#define GST_GL_MEMORY_ALLOCATOR_GET_CLASS(obj)       (G_TYPE_INSTANCE_GET_CLASS ((obj), GST_TYPE_GL_MEMORY_ALLOCATOR, GstGLMemoryAllocatorClass))
+#define GST_GL_MEMORY_ALLOCATOR(obj)                 (G_TYPE_CHECK_INSTANCE_CAST ((obj), GST_TYPE_GL_MEMORY_ALLOCATOR, GstGLMemoryAllocator))
+#define GST_GL_MEMORY_ALLOCATOR_CLASS(klass)         (G_TYPE_CHECK_CLASS_CAST ((klass), GST_TYPE_GL_MEMORY_ALLOCATOR, GstGLMemoryAllocatorClass))
+#define GST_GL_MEMORY_ALLOCATOR_CAST(obj)            ((GstGLMemoryAllocator *)(obj))
 
-typedef enum _GstGLMemoryTransfer
-{
-  /* force a transfer between the texture and the PBO (if available) */
-  GST_GL_MEMORY_TRANSFER_NEED_UPLOAD = (1 << 0),
-  GST_GL_MEMORY_TRANSFER_NEED_DOWNLOAD = (1 << 1),
-} GstGLMemoryTransfer;
+#define GST_GL_MEMORY_CAST(obj) ((GstGLMemory *) obj)
 
-#define GST_GL_MEMORY_ADD_TRANSFER(mem,state) ((GstGLMemory *)mem)->transfer_state |= state
+#define GST_CAPS_FEATURE_MEMORY_GL_MEMORY "memory:GLMemory"
+#define GST_GL_MEMORY_VIDEO_FORMATS_STR \
+    "{ RGBA, BGRA, RGBx, BGRx, ARGB, ABGR, xRGB, xBGR, RGB, BGR, RGB16, BGR16, " \
+    "AYUV, I420, YV12, NV12, NV21, YUY2, UYVY, Y41B, Y42B, Y444, " \
+    "GRAY8, GRAY16_LE, GRAY16_BE }"
 
 /**
  * GstGLMemory:
@@ -66,118 +64,162 @@
  */
 struct _GstGLMemory
 {
-  GstGLBaseBuffer       mem;
+  GstGLBaseMemory           mem;
 
-  guint                 tex_id;
-  guint                 tex_target;
-  GstVideoGLTextureType tex_type;
-  GstVideoInfo          info;
-  GstVideoAlignment     valign;
-  guint                 plane;
-  gfloat                tex_scaling[2];
+  guint                     tex_id;
+  GstGLTextureTarget        tex_target;
+  GstVideoGLTextureType     tex_type;
+  GstVideoInfo              info;
+  GstVideoAlignment         valign;
+  guint                     plane;
+  gfloat                    tex_scaling[2];
 
-  /* <private> */
-  GstGLMemoryTransfer   transfer_state;
-  gboolean              texture_wrapped;
-  GDestroyNotify        notify;
-  gpointer              user_data;
-  guint                 unpack_length;
-  guint                 tex_width;
+  /* <protected> */
+  gboolean                  texture_wrapped;
+  guint                     unpack_length;
+  guint                     tex_width;
 };
 
-#define GST_CAPS_FEATURE_MEMORY_GL_MEMORY "memory:GLMemory"
-#define GST_GL_MEMORY_VIDEO_FORMATS_STR \
-    "{ RGBA, BGRA, RGBx, BGRx, ARGB, ABGR, xRGB, xBGR, RGB, BGR, RGB16, BGR16, " \
-    "AYUV, I420, YV12, NV12, NV21, YUY2, UYVY, Y41B, Y42B, Y444, " \
-    "GRAY8, GRAY16_LE, GRAY16_BE }"
+typedef struct _GstGLVideoAllocationParams GstGLVideoAllocationParams;
+
+#define GST_GL_ALLOCATION_PARAMS_ALLOC_FLAG_VIDEO (1 << 3)
+
+struct _GstGLVideoAllocationParams
+{
+  GstGLAllocationParams  parent;
+
+  GstVideoInfo          *v_info;
+  guint                  plane;
+  GstVideoAlignment     *valign;
+  GstGLTextureTarget     target;
+};
+
+gboolean        gst_gl_video_allocation_params_init_full        (GstGLVideoAllocationParams * params,
+                                                                 gsize struct_size,
+                                                                 guint alloc_flags,
+                                                                 GstGLAllocationParamsCopyFunc copy,
+                                                                 GstGLAllocationParamsFreeFunc free,
+                                                                 GstGLContext * context,
+                                                                 GstAllocationParams * alloc_params,
+                                                                 GstVideoInfo * v_info,
+                                                                 guint plane,
+                                                                 GstVideoAlignment * valign,
+                                                                 GstGLTextureTarget target,
+                                                                 gpointer wrapped_data,
+                                                                 guint gl_handle,
+                                                                 gpointer user_data,
+                                                                 GDestroyNotify notify);
+GstGLVideoAllocationParams * gst_gl_video_allocation_params_new (GstGLContext * context,
+                                                                 GstAllocationParams * alloc_params,
+                                                                 GstVideoInfo * v_info,
+                                                                 guint plane,
+                                                                 GstVideoAlignment * valign,
+                                                                 GstGLTextureTarget target);
+GstGLVideoAllocationParams * gst_gl_video_allocation_params_new_wrapped_data    (GstGLContext * context,
+                                                                                 GstAllocationParams * alloc_params,
+                                                                                 GstVideoInfo * v_info,
+                                                                                 guint plane,
+                                                                                 GstVideoAlignment * valign,
+                                                                                 GstGLTextureTarget target,
+                                                                                 gpointer wrapped_data,
+                                                                                 gpointer user_data,
+                                                                                 GDestroyNotify notify);
+
+GstGLVideoAllocationParams * gst_gl_video_allocation_params_new_wrapped_texture (GstGLContext * context,
+                                                                                 GstAllocationParams * alloc_params,
+                                                                                 GstVideoInfo * v_info,
+                                                                                 guint plane,
+                                                                                 GstVideoAlignment * valign,
+                                                                                 GstGLTextureTarget target,
+                                                                                 guint tex_id,
+                                                                                 gpointer user_data,
+                                                                                 GDestroyNotify notify);
+
+/* subclass usage */
+void            gst_gl_video_allocation_params_free_data    (GstGLVideoAllocationParams * params);
+/* subclass usage */
+void            gst_gl_video_allocation_params_copy_data    (GstGLVideoAllocationParams * src_vid,
+                                                             GstGLVideoAllocationParams * dest_vid);
 
 /**
- * GST_GL_MEMORY_ALLOCATOR:
+ * GstGLMemoryAllocator
+ *
+ * Opaque #GstGLMemoryAllocator struct
+ */
+struct _GstGLMemoryAllocator
+{
+  GstGLBaseMemoryAllocator parent;
+};
+
+/**
+ * GstGLMemoryAllocatorClass:
+ *
+ * The #GstGLMemoryAllocatorClass only contains private data
+ */
+struct _GstGLMemoryAllocatorClass
+{
+  GstGLBaseMemoryAllocatorClass             parent_class;
+
+  GstGLBaseMemoryAllocatorMapFunction       map;
+  GstGLBaseMemoryAllocatorCopyFunction      copy;
+  GstGLBaseMemoryAllocatorUnmapFunction     unmap;
+};
+
+#include <gst/gl/gstglbasememory.h>
+
+/**
+ * GST_GL_MEMORY_ALLOCATOR_NAME:
  *
  * The name of the GL memory allocator
  */
-#define GST_GL_MEMORY_ALLOCATOR   "GLMemory"
+#define GST_GL_MEMORY_ALLOCATOR_NAME   "GLMemory"
 
-void          gst_gl_memory_init (void);
-gboolean      gst_is_gl_memory (GstMemory * mem);
+void            gst_gl_memory_init_once (void);
+gboolean        gst_is_gl_memory (GstMemory * mem);
 
-GstMemory *   gst_gl_memory_alloc   (GstGLContext * context,
-                                     GstAllocationParams *params,
-                                     GstVideoInfo * info,
-                                     guint plane,
-                                     GstVideoAlignment *valign);
-GstGLMemory * gst_gl_memory_wrapped (GstGLContext * context,
-                                     GstVideoInfo * info,
-                                     guint plane,
-                                     GstVideoAlignment *valign,
-                                     gpointer data,
-                                     gpointer user_data,
-                                     GDestroyNotify notify);
-GstGLMemory * gst_gl_memory_wrapped_texture (GstGLContext * context,
-                                             guint texture_id,
-                                             guint texture_target,
-                                             GstVideoInfo * info,
-                                             guint plane,
-                                             GstVideoAlignment *valign,
-                                             gpointer user_data,
-                                             GDestroyNotify notify);
+void            gst_gl_memory_init              (GstGLMemory * mem,
+                                                 GstAllocator * allocator,
+                                                 GstMemory * parent,
+                                                 GstGLContext * context,
+                                                 GstGLTextureTarget target,
+                                                 GstAllocationParams *params,
+                                                 GstVideoInfo * info,
+                                                 guint plane,
+                                                 GstVideoAlignment *valign,
+                                                 gpointer user_data,
+                                                 GDestroyNotify notify);
 
-void          gst_gl_memory_download_transfer (GstGLMemory * gl_mem);
-void          gst_gl_memory_upload_transfer   (GstGLMemory * gl_mem);
+gboolean        gst_gl_memory_copy_into         (GstGLMemory *gl_mem,
+                                                 guint tex_id,
+                                                 GstGLTextureTarget target,
+                                                 GstVideoGLTextureType tex_type,
+                                                 gint width,
+                                                 gint height);
+gboolean        gst_gl_memory_copy_teximage     (GstGLMemory * src,
+                                                 guint tex_id,
+                                                 GstGLTextureTarget out_target,
+                                                 GstVideoGLTextureType out_tex_type,
+                                                 gint width,
+                                                 gint height);
 
-gboolean      gst_gl_memory_copy_into_texture (GstGLMemory *gl_mem,
-                                               guint tex_id,
-                                               GstVideoGLTextureType tex_type,
-                                               gint width,
-                                               gint height,
-                                               gint stride,
-                                               gboolean respecify);
+gboolean        gst_gl_memory_read_pixels       (GstGLMemory * gl_mem,
+                                                 gpointer read_pointer);
+void            gst_gl_memory_texsubimage       (GstGLMemory * gl_mem,
+                                                 gpointer read_pointer);
 
-gboolean      gst_gl_memory_setup_buffer  (GstGLContext * context,
-                                           GstAllocationParams * params,
-                                           GstVideoInfo * info,
-                                           GstVideoAlignment *valign,
-                                           GstBuffer * buffer);
-gboolean      gst_gl_memory_setup_wrapped (GstGLContext * context,
-                                           GstVideoInfo * info,
-                                           GstVideoAlignment *valign,
-                                           gpointer data[GST_VIDEO_MAX_PLANES],
-                                           GstGLMemory *textures[GST_VIDEO_MAX_PLANES],
-                                           gpointer user_data,
-                                           GDestroyNotify notify);
+/* accessors */
+gint                    gst_gl_memory_get_texture_width     (GstGLMemory * gl_mem);
+gint                    gst_gl_memory_get_texture_height    (GstGLMemory * gl_mem);
+GstVideoGLTextureType   gst_gl_memory_get_texture_type      (GstGLMemory * gl_mem);
+GstGLTextureTarget      gst_gl_memory_get_texture_target    (GstGLMemory * gl_mem);
+guint                   gst_gl_memory_get_texture_id        (GstGLMemory * gl_mem);
 
-gint          gst_gl_memory_get_texture_width  (GstGLMemory * gl_mem);
-gint          gst_gl_memory_get_texture_height (GstGLMemory * gl_mem);
+gboolean                gst_gl_memory_setup_buffer          (GstGLMemoryAllocator * allocator,
+                                                             GstBuffer * buffer,
+                                                             GstGLVideoAllocationParams * params);
 
-/* utility functions */
-GstVideoGLTextureType gst_gl_texture_type_from_format (GstGLContext *context,
-                                                       GstVideoFormat v_format,
-                                                       guint plane);
-guint                 gst_gl_format_from_gl_texture_type (GstVideoGLTextureType tex_format);
-guint                 gst_gl_sized_gl_format_from_gl_format_type (GstGLContext * context,
-                                                                  guint format,
-                                                                  guint type);
 
-/**
- * GstGLAllocator
- *
- * Opaque #GstGLAllocator struct
- */
-struct _GstGLAllocator
-{
-  GstGLBaseBufferAllocator parent;
-  GstMemoryCopyFunction fallback_mem_copy;
-};
-
-/**
- * GstGLAllocatorClass:
- *
- * The #GstGLAllocatorClass only contains private data
- */
-struct _GstGLAllocatorClass
-{
-  GstGLBaseBufferAllocatorClass parent_class;
-};
+GstGLMemoryAllocator *  gst_gl_memory_allocator_get_default (GstGLContext *context);
 
 G_END_DECLS
 
diff --git a/gst-libs/gst/gl/gstglmemorypbo.c b/gst-libs/gst/gl/gstglmemorypbo.c
new file mode 100644
index 0000000..f653e1c
--- /dev/null
+++ b/gst-libs/gst/gl/gstglmemorypbo.c
@@ -0,0 +1,885 @@
+/*
+ * GStreamer
+ * Copyright (C) 2012 Matthew Waters <ystreet00@gmail.com>
+ * Copyright (C) 2015 Matthew Waters <matthew@centricular.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <string.h>
+
+#include <gst/video/video.h>
+
+#include <gst/gl/gstglmemorypbo.h>
+
+/**
+ * SECTION:gstglmemorypbo
+ * @short_description: memory subclass for GL textures
+ * @see_also: #GstMemory, #GstAllocator, #GstGLBufferPool
+ *
+ * #GstGLMemoryPBO is created or wrapped through gst_gl_base_memory_alloc()
+ * with #GstGLVideoAllocationParams.
+ *
+ * #GstGLMemoryPBO is created through gst_gl_memory_pbo_alloc() or system memory can
+ * be wrapped through gst_gl_memory_pbo_wrapped().
+ *
+ * Data is uploaded or downloaded from the GPU as is necessary.
+ */
+
+/* Implementation notes
+ *
+ * PBO transfer's are implemented using GstGLBuffer.  We just need to
+ * ensure that the texture data is written/read to/from before/after calling
+ * map (mem->pbo, READ) which performs the pbo buffer transfer.
+ */
+
+#define USING_OPENGL(context) (gst_gl_context_check_gl_version (context, GST_GL_API_OPENGL, 1, 0))
+#define USING_OPENGL3(context) (gst_gl_context_check_gl_version (context, GST_GL_API_OPENGL3, 3, 1))
+#define USING_GLES(context) (gst_gl_context_check_gl_version (context, GST_GL_API_GLES, 1, 0))
+#define USING_GLES2(context) (gst_gl_context_check_gl_version (context, GST_GL_API_GLES2, 2, 0))
+#define USING_GLES3(context) (gst_gl_context_check_gl_version (context, GST_GL_API_GLES2, 3, 0))
+
+#define GL_MEM_HEIGHT(gl_mem) _get_plane_height (&gl_mem->mem.info, gl_mem->mem.plane)
+#define GL_MEM_STRIDE(gl_mem) GST_VIDEO_INFO_PLANE_STRIDE (&gl_mem->mem.info, gl_mem->mem.plane)
+
+#define CONTEXT_SUPPORTS_PBO_UPLOAD(context) \
+    (gst_gl_context_check_gl_version (context, \
+        GST_GL_API_OPENGL | GST_GL_API_OPENGL3, 2, 1) \
+        || gst_gl_context_check_gl_version (context, GST_GL_API_GLES2, 3, 0))
+#define CONTEXT_SUPPORTS_PBO_DOWNLOAD(context) \
+    (gst_gl_context_check_gl_version (context, \
+        GST_GL_API_OPENGL | GST_GL_API_OPENGL3 | GST_GL_API_GLES2, 3, 0))
+
+GST_DEBUG_CATEGORY_STATIC (GST_CAT_GL_MEMORY);
+#define GST_CAT_DEFAULT GST_CAT_GL_MEMORY
+
+static GstAllocator *_gl_allocator;
+
+/* compatability definitions... */
+#ifndef GL_PIXEL_PACK_BUFFER
+#define GL_PIXEL_PACK_BUFFER 0x88EB
+#endif
+#ifndef GL_PIXEL_UNPACK_BUFFER
+#define GL_PIXEL_UNPACK_BUFFER 0x88EC
+#endif
+#ifndef GL_STREAM_READ
+#define GL_STREAM_READ 0x88E1
+#endif
+#ifndef GL_STREAM_DRAW
+#define GL_STREAM_DRAW 0x88E0
+#endif
+#ifndef GL_STREAM_COPY
+#define GL_STREAM_COPY 0x88E2
+#endif
+#ifndef GL_UNPACK_ROW_LENGTH
+#define GL_UNPACK_ROW_LENGTH 0x0CF2
+#endif
+
+#ifndef GL_TEXTURE_RECTANGLE
+#define GL_TEXTURE_RECTANGLE 0x84F5
+#endif
+#ifndef GL_TEXTURE_EXTERNAL_OES
+#define GL_TEXTURE_EXTERNAL_OES 0x8D65
+#endif
+
+#define parent_class gst_gl_memory_pbo_allocator_parent_class
+G_DEFINE_TYPE (GstGLMemoryPBOAllocator, gst_gl_memory_pbo_allocator,
+    GST_TYPE_GL_MEMORY_ALLOCATOR);
+
+typedef struct
+{
+  /* in */
+  GstGLMemoryPBO *src;
+  GstVideoGLTextureType out_format;
+  guint out_width, out_height;
+  guint out_stride;
+  gboolean respecify;
+  GstGLTextureTarget tex_target;
+  /* inout */
+  guint tex_id;
+  /* out */
+  gboolean result;
+} GstGLMemoryPBOCopyParams;
+
+static inline guint
+_get_plane_height (GstVideoInfo * info, guint plane)
+{
+  if (GST_VIDEO_INFO_IS_YUV (info))
+    /* For now component width and plane width are the same and the
+     * plane-component mapping matches
+     */
+    return GST_VIDEO_INFO_COMP_HEIGHT (info, plane);
+  else                          /* RGB, GRAY */
+    return GST_VIDEO_INFO_HEIGHT (info);
+}
+
+static void
+_upload_pbo_memory (GstGLMemoryPBO * gl_mem, GstMapInfo * info,
+    GstGLBuffer * pbo, GstMapInfo * pbo_info)
+{
+  GstGLContext *context = gl_mem->mem.mem.context;
+  const GstGLFuncs *gl;
+  guint pbo_id;
+
+  if (!GST_MEMORY_FLAG_IS_SET (gl_mem, GST_GL_BASE_MEMORY_TRANSFER_NEED_UPLOAD))
+    return;
+
+  g_return_if_fail (CONTEXT_SUPPORTS_PBO_UPLOAD (context));
+
+  gl = context->gl_vtable;
+  pbo_id = *(guint *) pbo_info->data;
+
+  GST_CAT_LOG (GST_CAT_GL_MEMORY, "upload for texture id:%u, with pbo %u %ux%u",
+      gl_mem->mem.tex_id, pbo_id, gl_mem->mem.tex_width,
+      GL_MEM_HEIGHT (gl_mem));
+
+  gl->BindBuffer (GL_PIXEL_UNPACK_BUFFER, pbo_id);
+  gst_gl_memory_texsubimage (GST_GL_MEMORY_CAST (gl_mem), NULL);
+  gl->BindBuffer (GL_PIXEL_UNPACK_BUFFER, 0);
+}
+
+static guint
+_new_texture (GstGLContext * context, guint target, guint internal_format,
+    guint format, guint type, guint width, guint height)
+{
+  const GstGLFuncs *gl = context->gl_vtable;
+  guint tex_id;
+
+  gl->GenTextures (1, &tex_id);
+  gl->BindTexture (target, tex_id);
+  if (target == GL_TEXTURE_2D || target == GL_TEXTURE_RECTANGLE)
+    gl->TexImage2D (target, 0, internal_format, width, height, 0, format, type,
+        NULL);
+
+  gl->TexParameteri (target, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
+  gl->TexParameteri (target, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
+  gl->TexParameteri (target, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
+  gl->TexParameteri (target, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
+
+  gl->BindTexture (target, 0);
+
+  return tex_id;
+}
+
+static gboolean
+_gl_mem_create (GstGLMemoryPBO * gl_mem, GError ** error)
+{
+  GstGLContext *context = gl_mem->mem.mem.context;
+  GstGLBaseMemoryAllocatorClass *alloc_class;
+
+  alloc_class = GST_GL_BASE_MEMORY_ALLOCATOR_CLASS (parent_class);
+  if (!alloc_class->create ((GstGLBaseMemory *) gl_mem, error))
+    return FALSE;
+
+  if (CONTEXT_SUPPORTS_PBO_DOWNLOAD (context)
+      || CONTEXT_SUPPORTS_PBO_UPLOAD (context)) {
+    GstAllocationParams alloc_params =
+        { 0, GST_MEMORY_CAST (gl_mem)->align, 0, 0 };
+    GstGLBaseMemoryAllocator *buf_allocator;
+    GstGLBufferAllocationParams *params;
+
+    buf_allocator =
+        GST_GL_BASE_MEMORY_ALLOCATOR (gst_allocator_find
+        (GST_GL_BUFFER_ALLOCATOR_NAME));
+    params =
+        gst_gl_buffer_allocation_params_new (context,
+        GST_MEMORY_CAST (gl_mem)->size, &alloc_params, GL_PIXEL_UNPACK_BUFFER,
+        GL_STREAM_DRAW);
+
+    /* FIXME: lazy init this for resource constrained platforms
+     * Will need to fix pbo detection based on the existence of the mem.id then */
+    gl_mem->pbo = (GstGLBuffer *) gst_gl_base_memory_alloc (buf_allocator,
+        (GstGLAllocationParams *) params);
+
+    gst_gl_allocation_params_free ((GstGLAllocationParams *) params);
+    gst_object_unref (buf_allocator);
+
+    GST_CAT_LOG (GST_CAT_GL_MEMORY, "generated pbo %u", gl_mem->pbo->id);
+  }
+
+  return TRUE;
+}
+
+static void
+_gl_mem_init (GstGLMemoryPBO * mem, GstAllocator * allocator,
+    GstMemory * parent, GstGLContext * context, GstGLTextureTarget target,
+    GstAllocationParams * params, GstVideoInfo * info,
+    guint plane, GstVideoAlignment * valign, gpointer user_data,
+    GDestroyNotify notify)
+{
+  gst_gl_memory_init ((GstGLMemory *) mem, allocator, parent,
+      context, target, params, info, plane, valign, user_data, notify);
+}
+
+static GstGLMemoryPBO *
+_gl_mem_new (GstAllocator * allocator, GstMemory * parent,
+    GstGLContext * context, GstGLTextureTarget target,
+    GstAllocationParams * params, GstVideoInfo * info,
+    guint plane, GstVideoAlignment * valign, gpointer user_data,
+    GDestroyNotify notify)
+{
+  GstGLMemoryPBO *mem;
+  mem = g_new0 (GstGLMemoryPBO, 1);
+  mem->mem.texture_wrapped = FALSE;
+
+  _gl_mem_init (mem, allocator, parent, context, target, params, info, plane,
+      valign, user_data, notify);
+
+  return mem;
+}
+
+static gboolean
+_read_pixels_to_pbo (GstGLMemoryPBO * gl_mem)
+{
+  if (!gl_mem->pbo || !CONTEXT_SUPPORTS_PBO_DOWNLOAD (gl_mem->mem.mem.context)
+      || gl_mem->mem.tex_type == GST_VIDEO_GL_TEXTURE_TYPE_LUMINANCE
+      || gl_mem->mem.tex_type == GST_VIDEO_GL_TEXTURE_TYPE_LUMINANCE_ALPHA)
+    /* unsupported */
+    return FALSE;
+
+  if (GST_MEMORY_FLAG_IS_SET (gl_mem,
+          GST_GL_BASE_MEMORY_TRANSFER_NEED_DOWNLOAD)) {
+    /* copy texture data into into the pbo and map that */
+    gsize plane_start;
+    GstMapInfo pbo_info;
+
+    plane_start =
+        gst_gl_get_plane_start (&gl_mem->mem.info, &gl_mem->mem.valign,
+        gl_mem->mem.plane) + GST_MEMORY_CAST (gl_mem)->offset;
+
+    gl_mem->pbo->target = GL_PIXEL_PACK_BUFFER;
+    if (!gst_memory_map (GST_MEMORY_CAST (gl_mem->pbo), &pbo_info,
+            GST_MAP_WRITE | GST_MAP_GL)) {
+      GST_CAT_ERROR (GST_CAT_GL_MEMORY, "Failed to map pbo for writing");
+      return FALSE;
+    }
+
+    if (!gst_gl_memory_read_pixels ((GstGLMemory *) gl_mem,
+            (gpointer) plane_start)) {
+      gst_memory_unmap (GST_MEMORY_CAST (gl_mem->pbo), &pbo_info);
+      return FALSE;
+    }
+
+    gst_memory_unmap (GST_MEMORY_CAST (gl_mem->pbo), &pbo_info);
+  }
+
+  return TRUE;
+}
+
+static gpointer
+_pbo_download_transfer (GstGLMemoryPBO * gl_mem, GstMapInfo * info, gsize size)
+{
+  GstMapInfo *pbo_info;
+
+  gl_mem->pbo->target = GL_PIXEL_PACK_BUFFER;
+  /* texture -> pbo */
+  if (info->flags & GST_MAP_READ
+      && GST_MEMORY_FLAG_IS_SET (gl_mem,
+          GST_GL_BASE_MEMORY_TRANSFER_NEED_DOWNLOAD)) {
+    GstMapInfo info;
+
+    GST_CAT_TRACE (GST_CAT_GL_MEMORY,
+        "attempting download of texture %u " "using pbo %u", gl_mem->mem.tex_id,
+        gl_mem->pbo->id);
+
+    if (!gst_memory_map (GST_MEMORY_CAST (gl_mem->pbo), &info,
+            GST_MAP_WRITE | GST_MAP_GL)) {
+      GST_CAT_WARNING (GST_CAT_GL_MEMORY, "Failed to write to PBO");
+      return NULL;
+    }
+
+    if (!_read_pixels_to_pbo (gl_mem))
+      return NULL;
+
+    gst_memory_unmap (GST_MEMORY_CAST (gl_mem->pbo), &info);
+  }
+
+  pbo_info = g_new0 (GstMapInfo, 1);
+
+  /* pbo -> data */
+  /* get a cpu accessible mapping from the pbo */
+  if (!gst_memory_map (GST_MEMORY_CAST (gl_mem->pbo), pbo_info, info->flags)) {
+    GST_CAT_ERROR (GST_CAT_GL_MEMORY, "Failed to map pbo");
+    g_free (pbo_info);
+    return NULL;
+  }
+  info->user_data[0] = pbo_info;
+
+  return pbo_info->data;
+}
+
+static gpointer
+_gl_mem_map_cpu_access (GstGLMemoryPBO * gl_mem, GstMapInfo * info, gsize size)
+{
+  gpointer data = NULL;
+
+  gst_gl_base_memory_alloc_data ((GstGLBaseMemory *) gl_mem);
+
+  if (!data && gl_mem->pbo
+      && CONTEXT_SUPPORTS_PBO_DOWNLOAD (gl_mem->mem.mem.context))
+    data = _pbo_download_transfer (gl_mem, info, size);
+
+  if (!data) {
+    GstGLMemoryAllocatorClass *alloc_class;
+
+    alloc_class = GST_GL_MEMORY_ALLOCATOR_CLASS (parent_class);
+
+    data = alloc_class->map ((GstGLBaseMemory *) gl_mem, info, size);
+  }
+
+  return data;
+}
+
+static gpointer
+_gl_mem_map_gpu_access (GstGLMemoryPBO * gl_mem, GstMapInfo * info, gsize size)
+{
+  gpointer data = &gl_mem->mem.tex_id;
+
+  if ((info->flags & GST_MAP_READ) == GST_MAP_READ) {
+    if (gl_mem->pbo && CONTEXT_SUPPORTS_PBO_UPLOAD (gl_mem->mem.mem.context)) {
+      GstMapInfo pbo_info;
+
+      /* data -> pbo */
+      if (!gst_memory_map (GST_MEMORY_CAST (gl_mem->pbo), &pbo_info,
+              GST_MAP_READ | GST_MAP_GL)) {
+        GST_CAT_ERROR (GST_CAT_GL_MEMORY, "Failed to map pbo");
+        return NULL;
+      }
+
+      /* pbo -> texture */
+      _upload_pbo_memory (gl_mem, info, gl_mem->pbo, &pbo_info);
+
+      gst_memory_unmap (GST_MEMORY_CAST (gl_mem->pbo), &pbo_info);
+    } else {
+      GstGLMemoryAllocatorClass *alloc_class;
+
+      alloc_class = GST_GL_MEMORY_ALLOCATOR_CLASS (parent_class);
+
+      data = alloc_class->map ((GstGLBaseMemory *) gl_mem, info, size);
+    }
+  }
+
+  return data;
+}
+
+static gpointer
+_gl_mem_map (GstGLMemoryPBO * gl_mem, GstMapInfo * info, gsize maxsize)
+{
+  gpointer data;
+
+  if ((info->flags & GST_MAP_GL) == GST_MAP_GL) {
+    if (gl_mem->mem.tex_target == GST_GL_TEXTURE_TARGET_EXTERNAL_OES)
+      return &gl_mem->mem.tex_id;
+
+    data = _gl_mem_map_gpu_access (gl_mem, info, maxsize);
+  } else {                      /* not GL */
+    if (gl_mem->mem.tex_target == GST_GL_TEXTURE_TARGET_EXTERNAL_OES) {
+      GST_CAT_ERROR (GST_CAT_GL_MEMORY, "Cannot map External OES textures");
+      return NULL;
+    }
+
+    data = _gl_mem_map_cpu_access (gl_mem, info, maxsize);
+  }
+
+  return data;
+}
+
+static void
+_gl_mem_unmap_cpu_access (GstGLMemoryPBO * gl_mem, GstMapInfo * info)
+{
+  if (!gl_mem->pbo || !CONTEXT_SUPPORTS_PBO_DOWNLOAD (gl_mem->mem.mem.context))
+    /* PBO's not supported */
+    return;
+
+  gl_mem->pbo->target = GL_PIXEL_PACK_BUFFER;
+  gst_memory_unmap (GST_MEMORY_CAST (gl_mem->pbo),
+      (GstMapInfo *) info->user_data[0]);
+  g_free (info->user_data[0]);
+}
+
+static void
+_gl_mem_unmap (GstGLMemoryPBO * gl_mem, GstMapInfo * info)
+{
+  if ((info->flags & GST_MAP_GL) == 0) {
+    _gl_mem_unmap_cpu_access (gl_mem, info);
+  }
+}
+
+static void
+_gl_mem_copy_thread (GstGLContext * context, gpointer data)
+{
+  const GstGLFuncs *gl;
+  GstGLMemoryPBOCopyParams *copy_params;
+  GstGLMemoryPBO *src;
+  guint tex_id;
+  guint out_tex_target;
+  GLuint fboId;
+  gsize out_width, out_height, out_stride;
+  GLuint out_gl_format, out_gl_type;
+  GLuint in_gl_format, in_gl_type;
+  gsize in_size, out_size;
+
+  copy_params = (GstGLMemoryPBOCopyParams *) data;
+  src = copy_params->src;
+  tex_id = copy_params->tex_id;
+  out_tex_target = gst_gl_texture_target_to_gl (copy_params->tex_target);
+  out_width = copy_params->out_width;
+  out_height = copy_params->out_height;
+  out_stride = copy_params->out_stride;
+
+  gl = context->gl_vtable;
+  out_gl_format = gst_gl_format_from_gl_texture_type (copy_params->out_format);
+  out_gl_type = GL_UNSIGNED_BYTE;
+  if (copy_params->out_format == GST_VIDEO_GL_TEXTURE_TYPE_RGB16)
+    out_gl_type = GL_UNSIGNED_SHORT_5_6_5;
+  in_gl_format = gst_gl_format_from_gl_texture_type (src->mem.tex_type);
+  in_gl_type = GL_UNSIGNED_BYTE;
+  if (src->mem.tex_type == GST_VIDEO_GL_TEXTURE_TYPE_RGB16)
+    in_gl_type = GL_UNSIGNED_SHORT_5_6_5;
+
+  if (!gl->GenFramebuffers) {
+    gst_gl_context_set_error (context,
+        "Context, EXT_framebuffer_object not supported");
+    goto error;
+  }
+
+  in_size = GL_MEM_HEIGHT (src) * GL_MEM_STRIDE (src);
+  out_size = out_height * out_stride;
+
+  if (copy_params->respecify) {
+    if (in_size != out_size) {
+      GST_ERROR ("Cannot copy between textures with backing data of different"
+          "sizes. input %" G_GSIZE_FORMAT " output %" G_GSIZE_FORMAT, in_size,
+          out_size);
+      goto error;
+    }
+  }
+
+  if (!tex_id) {
+    guint internal_format;
+    guint out_gl_type;
+
+    out_gl_type = GL_UNSIGNED_BYTE;
+    if (copy_params->out_format == GST_VIDEO_GL_TEXTURE_TYPE_RGB16)
+      out_gl_type = GL_UNSIGNED_SHORT_5_6_5;
+
+    internal_format =
+        gst_gl_sized_gl_format_from_gl_format_type (context, out_gl_format,
+        out_gl_type);
+
+    tex_id =
+        _new_texture (context, out_tex_target,
+        internal_format, out_gl_format, out_gl_type, copy_params->out_width,
+        copy_params->out_height);
+  }
+
+  if (!tex_id) {
+    GST_WARNING ("Could not create GL texture with context:%p", context);
+  }
+
+  GST_LOG ("copying memory %p, tex %u into texture %i",
+      src, src->mem.tex_id, tex_id);
+
+  /* FIXME: try and avoid creating and destroying fbo's every copy... */
+  /* create a framebuffer object */
+  gl->GenFramebuffers (1, &fboId);
+  gl->BindFramebuffer (GL_FRAMEBUFFER, fboId);
+
+  gl->FramebufferTexture2D (GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0,
+      gst_gl_texture_target_to_gl (src->mem.tex_target), src->mem.tex_id, 0);
+
+//  if (!gst_gl_context_check_framebuffer_status (src->mem.mem.context))
+//    goto fbo_error;
+
+  gl->BindTexture (out_tex_target, tex_id);
+  if (copy_params->respecify) {
+    GstMapInfo pbo_info;
+
+    if (!gl->GenBuffers || !src->pbo) {
+      gst_gl_context_set_error (context, "Cannot reinterpret texture contents "
+          "without pixel buffer objects");
+      gl->BindTexture (out_tex_target, 0);
+      goto fbo_error;
+    }
+
+    if (gst_gl_context_get_gl_api (context) & GST_GL_API_GLES2
+        && (in_gl_format != GL_RGBA || in_gl_type != GL_UNSIGNED_BYTE)) {
+      gst_gl_context_set_error (context, "Cannot copy non RGBA/UNSIGNED_BYTE "
+          "textures on GLES2");
+      gl->BindTexture (out_tex_target, 0);
+      goto fbo_error;
+    }
+
+    GST_TRACE ("copying texture data with size of %u*%u*%u",
+        gst_gl_format_type_n_bytes (in_gl_format, in_gl_type),
+        src->mem.tex_width, GL_MEM_HEIGHT (src));
+
+    /* copy tex */
+    _read_pixels_to_pbo (src);
+
+    src->pbo->target = GL_PIXEL_UNPACK_BUFFER;
+    if (!gst_memory_map (GST_MEMORY_CAST (src->pbo), &pbo_info,
+            GST_MAP_READ | GST_MAP_GL)) {
+      GST_CAT_ERROR (GST_CAT_GL_MEMORY, "Failed to map pbo for reading");
+      goto fbo_error;
+    }
+    gl->TexSubImage2D (out_tex_target, 0, 0, 0, out_width, out_height,
+        out_gl_format, out_gl_type, 0);
+    gst_memory_unmap (GST_MEMORY_CAST (src->pbo), &pbo_info);
+  } else {                      /* different sizes */
+    gst_gl_memory_copy_teximage (GST_GL_MEMORY_CAST (src),
+        tex_id, copy_params->tex_target, copy_params->out_format, out_width,
+        out_height);
+  }
+
+  gl->BindTexture (out_tex_target, 0);
+  gl->BindFramebuffer (GL_FRAMEBUFFER, 0);
+
+  gl->DeleteFramebuffers (1, &fboId);
+
+  copy_params->tex_id = tex_id;
+  copy_params->result = TRUE;
+
+  return;
+
+/* ERRORS */
+fbo_error:
+  {
+    gl->DeleteFramebuffers (1, &fboId);
+
+    copy_params->tex_id = 0;
+    copy_params->result = FALSE;
+    return;
+  }
+
+error:
+  {
+    copy_params->result = FALSE;
+    return;
+  }
+}
+
+static GstMemory *
+_gl_mem_copy (GstGLMemoryPBO * src, gssize offset, gssize size)
+{
+  GstAllocationParams params = { 0, GST_MEMORY_CAST (src)->align, 0, 0 };
+  GstGLBaseMemoryAllocator *base_mem_allocator;
+  GstAllocator *allocator;
+  GstMemory *dest = NULL;
+
+  allocator = GST_MEMORY_CAST (src)->allocator;
+  base_mem_allocator = (GstGLBaseMemoryAllocator *) allocator;
+
+  if (src->mem.tex_target == GST_GL_TEXTURE_TARGET_EXTERNAL_OES) {
+    GST_CAT_ERROR (GST_CAT_GL_MEMORY, "Cannot copy External OES textures");
+    return NULL;
+  }
+
+  /* If not doing a full copy, then copy to sysmem, the 2D represention of the
+   * texture would become wrong */
+  if (offset > 0 || size < GST_MEMORY_CAST (src)->size) {
+    return base_mem_allocator->fallback_mem_copy (GST_MEMORY_CAST (src), offset,
+        size);
+  }
+
+  dest = (GstMemory *) _gl_mem_new (allocator, NULL, src->mem.mem.context,
+      src->mem.tex_target, &params, &src->mem.info, src->mem.plane,
+      &src->mem.valign, NULL, NULL);
+
+  if (GST_MEMORY_FLAG_IS_SET (src, GST_GL_BASE_MEMORY_TRANSFER_NEED_UPLOAD)) {
+    if (!gst_gl_base_memory_memcpy ((GstGLBaseMemory *) src,
+            (GstGLBaseMemory *) dest, offset, size)) {
+      GST_CAT_WARNING (GST_CAT_GL_MEMORY, "Could not copy GL Memory");
+      gst_memory_unref (GST_MEMORY_CAST (dest));
+      return NULL;
+    }
+  } else {
+    GstMapInfo dinfo;
+
+    if (!gst_memory_map (GST_MEMORY_CAST (dest), &dinfo,
+            GST_MAP_WRITE | GST_MAP_GL)) {
+      GST_CAT_WARNING (GST_CAT_GL_MEMORY,
+          "Failed not map destination " "for writing");
+      gst_memory_unref (GST_MEMORY_CAST (dest));
+      return NULL;
+    }
+
+    if (!gst_gl_memory_copy_into ((GstGLMemory *) src,
+            ((GstGLMemory *) dest)->tex_id, src->mem.tex_target,
+            src->mem.tex_type, src->mem.tex_width, GL_MEM_HEIGHT (src))) {
+      GST_CAT_WARNING (GST_CAT_GL_MEMORY, "Could not copy GL Memory");
+      gst_memory_unmap (GST_MEMORY_CAST (dest), &dinfo);
+      gst_memory_unref (GST_MEMORY_CAST (dest));
+      return NULL;
+    }
+
+    gst_memory_unmap (GST_MEMORY_CAST (dest), &dinfo);
+  }
+
+  return dest;
+}
+
+static GstMemory *
+_gl_mem_alloc (GstAllocator * allocator, gsize size,
+    GstAllocationParams * params)
+{
+  g_warning ("Use gst_gl_base_memory_alloc () to allocate from this "
+      "GstGLMemoryPBO allocator");
+
+  return NULL;
+}
+
+static void
+_gl_mem_destroy (GstGLMemoryPBO * gl_mem)
+{
+  if (gl_mem->pbo)
+    gst_memory_unref (GST_MEMORY_CAST (gl_mem->pbo));
+  gl_mem->pbo = NULL;
+
+  GST_GL_BASE_MEMORY_ALLOCATOR_CLASS (parent_class)->destroy ((GstGLBaseMemory
+          *) gl_mem);
+}
+
+static GstGLMemoryPBO *
+_gl_mem_pbo_alloc (GstGLBaseMemoryAllocator * allocator,
+    GstGLVideoAllocationParams * params)
+{
+  GstGLMemoryPBO *mem;
+  guint alloc_flags;
+
+  alloc_flags = params->parent.alloc_flags;
+
+  g_return_val_if_fail (alloc_flags & GST_GL_ALLOCATION_PARAMS_ALLOC_FLAG_VIDEO,
+      NULL);
+
+  mem = g_new0 (GstGLMemoryPBO, 1);
+
+  if (alloc_flags & GST_GL_ALLOCATION_PARAMS_ALLOC_FLAG_WRAP_GPU_HANDLE) {
+    mem->mem.tex_id = params->parent.gl_handle;
+    mem->mem.texture_wrapped = TRUE;
+  }
+
+  _gl_mem_init (mem, GST_ALLOCATOR_CAST (allocator), NULL,
+      params->parent.context, params->target, params->parent.alloc_params,
+      params->v_info, params->plane, params->valign, params->parent.user_data,
+      params->parent.notify);
+
+  if (alloc_flags & GST_GL_ALLOCATION_PARAMS_ALLOC_FLAG_WRAP_GPU_HANDLE) {
+    GST_MINI_OBJECT_FLAG_SET (mem, GST_GL_BASE_MEMORY_TRANSFER_NEED_DOWNLOAD);
+  }
+  if (alloc_flags & GST_GL_ALLOCATION_PARAMS_ALLOC_FLAG_WRAP_SYSMEM) {
+    GST_MINI_OBJECT_FLAG_SET (mem, GST_GL_BASE_MEMORY_TRANSFER_NEED_UPLOAD);
+    if (mem->pbo) {
+      GST_MINI_OBJECT_FLAG_SET (mem->pbo,
+          GST_GL_BASE_MEMORY_TRANSFER_NEED_UPLOAD);
+      mem->pbo->mem.data = params->parent.wrapped_data;
+    }
+    mem->mem.mem.data = params->parent.wrapped_data;
+  }
+
+  return mem;
+}
+
+static void
+gst_gl_memory_pbo_allocator_class_init (GstGLMemoryPBOAllocatorClass * klass)
+{
+  GstGLBaseMemoryAllocatorClass *gl_base;
+  GstGLMemoryAllocatorClass *gl_tex;
+  GstAllocatorClass *allocator_class;
+
+  gl_tex = (GstGLMemoryAllocatorClass *) klass;
+  gl_base = (GstGLBaseMemoryAllocatorClass *) klass;
+  allocator_class = (GstAllocatorClass *) klass;
+
+  gl_base->alloc = (GstGLBaseMemoryAllocatorAllocFunction) _gl_mem_pbo_alloc;
+  gl_base->create = (GstGLBaseMemoryAllocatorCreateFunction) _gl_mem_create;
+  gl_tex->map = (GstGLBaseMemoryAllocatorMapFunction) _gl_mem_map;
+  gl_tex->unmap = (GstGLBaseMemoryAllocatorUnmapFunction) _gl_mem_unmap;
+  gl_tex->copy = (GstGLBaseMemoryAllocatorCopyFunction) _gl_mem_copy;
+  gl_base->destroy = (GstGLBaseMemoryAllocatorDestroyFunction) _gl_mem_destroy;
+
+  allocator_class->alloc = _gl_mem_alloc;
+}
+
+static void
+gst_gl_memory_pbo_allocator_init (GstGLMemoryPBOAllocator * allocator)
+{
+  GstAllocator *alloc = GST_ALLOCATOR_CAST (allocator);
+
+  alloc->mem_type = GST_GL_MEMORY_PBO_ALLOCATOR_NAME;
+
+  GST_OBJECT_FLAG_SET (allocator, GST_ALLOCATOR_FLAG_CUSTOM_ALLOC);
+}
+
+/**
+ * gst_gl_memory_pbo_copy_into_texture:
+ * @gl_mem:a #GstGLMemoryPBO
+ * @tex_id: the destination texture id
+ * @target: the destination #GstGLTextureTarget
+ * @tex_type: the destination #GstVideoGLTextureType
+ * @width: width of @tex_id
+ * @height: height of @tex_id
+ * @stride: stride of the backing texture data
+ * @respecify: whether to copy the data or copy per texel
+ *
+ * Copies @gl_mem into the texture specfified by @tex_id.  The format of @tex_id
+ * is specified by @tex_type, @width and @height.
+ *
+ * If @respecify is %TRUE, then the copy is performed in terms of the texture
+ * data.  This is useful for splitting RGBA textures into RG or R textures or
+ * vice versa. The requirement for this to succeed is that the backing texture
+ * data must be the same size, i.e. say a RGBA8 texture is converted into a RG8
+ * texture, then the RG texture must have twice as many pixels available for
+ * output as the RGBA texture.
+ *
+ * Otherwise, if @respecify is %FALSE, then the copy is performed per texel
+ * using glCopyTexImage.  See the OpenGL specification for details on the
+ * mappings between texture formats.
+ *
+ * Returns: Whether the copy suceeded
+ *
+ * Since: 1.8
+ */
+gboolean
+gst_gl_memory_pbo_copy_into_texture (GstGLMemoryPBO * gl_mem, guint tex_id,
+    GstGLTextureTarget target, GstVideoGLTextureType tex_type, gint width,
+    gint height, gint stride, gboolean respecify)
+{
+  GstGLMemoryPBOCopyParams copy_params;
+
+  copy_params.src = gl_mem;
+  copy_params.tex_target = target;
+  copy_params.tex_id = tex_id;
+  copy_params.out_format = tex_type;
+  copy_params.out_width = width;
+  copy_params.out_height = height;
+  copy_params.out_stride = stride;
+  copy_params.respecify = respecify;
+
+  gst_gl_context_thread_add (gl_mem->mem.mem.context, _gl_mem_copy_thread,
+      &copy_params);
+
+  return copy_params.result;
+}
+
+static void
+_download_transfer (GstGLContext * context, GstGLMemoryPBO * gl_mem)
+{
+  GstGLBaseMemory *mem = (GstGLBaseMemory *) gl_mem;
+
+  g_mutex_lock (&mem->lock);
+  if (_read_pixels_to_pbo (gl_mem))
+    GST_CAT_TRACE (GST_CAT_GL_MEMORY, "optimistic download of texture %u "
+        "using pbo %u", gl_mem->mem.tex_id, gl_mem->pbo->id);
+  GST_MEMORY_FLAG_UNSET (gl_mem, GST_GL_BASE_MEMORY_TRANSFER_NEED_DOWNLOAD);
+  g_mutex_unlock (&mem->lock);
+}
+
+/**
+ * gst_gl_memory_pbo_download_transfer:
+ * @gl_mem: a #GstGLMemoryPBO
+ *
+ * Transfer the texture data from the texture into the PBO if necessary.
+ *
+ * Since: 1.8
+ */
+void
+gst_gl_memory_pbo_download_transfer (GstGLMemoryPBO * gl_mem)
+{
+  g_return_if_fail (gst_is_gl_memory ((GstMemory *) gl_mem));
+
+  gst_gl_context_thread_add (gl_mem->mem.mem.context,
+      (GstGLContextThreadFunc) _download_transfer, gl_mem);
+}
+
+static void
+_upload_transfer (GstGLContext * context, GstGLMemoryPBO * gl_mem)
+{
+  GstGLBaseMemory *mem = (GstGLBaseMemory *) gl_mem;
+  GstMapInfo info;
+
+  g_mutex_lock (&mem->lock);
+  gl_mem->pbo->target = GL_PIXEL_UNPACK_BUFFER;
+  if (!gst_memory_map (GST_MEMORY_CAST (gl_mem->pbo), &info,
+          GST_MAP_READ | GST_MAP_GL)) {
+    GST_CAT_WARNING (GST_CAT_GL_MEMORY, "Failed to map pbo for reading");
+  } else {
+    gst_memory_unmap (GST_MEMORY_CAST (gl_mem->pbo), &info);
+  }
+  g_mutex_unlock (&mem->lock);
+}
+
+/**
+ * gst_gl_memory_pbo_download_transfer:
+ * @gl_mem: a #GstGLMemoryPBO
+ *
+ * Transfer the texture data from the PBO into the texture if necessary.
+ *
+ * Since: 1.8
+ */
+void
+gst_gl_memory_pbo_upload_transfer (GstGLMemoryPBO * gl_mem)
+{
+  g_return_if_fail (gst_is_gl_memory ((GstMemory *) gl_mem));
+
+  if (gl_mem->pbo && CONTEXT_SUPPORTS_PBO_UPLOAD (gl_mem->mem.mem.context))
+    gst_gl_context_thread_add (gl_mem->mem.mem.context,
+        (GstGLContextThreadFunc) _upload_transfer, gl_mem);
+}
+
+/**
+ * gst_gl_memory_pbo_init:
+ *
+ * Initializes the GL Memory allocator. It is safe to call this function
+ * multiple times.  This must be called before any other GstGLMemoryPBO operation.
+ */
+void
+gst_gl_memory_pbo_init_once (void)
+{
+  static volatile gsize _init = 0;
+
+  if (g_once_init_enter (&_init)) {
+    gst_gl_memory_init_once ();
+
+    GST_DEBUG_CATEGORY_INIT (GST_CAT_GL_MEMORY, "glmemory", 0, "OpenGL Memory");
+
+    _gl_allocator = g_object_new (GST_TYPE_GL_MEMORY_PBO_ALLOCATOR, NULL);
+
+    gst_allocator_register (GST_GL_MEMORY_PBO_ALLOCATOR_NAME,
+        gst_object_ref (_gl_allocator));
+    g_once_init_leave (&_init, 1);
+  }
+}
+
+/**
+ * gst_is_gl_memory_pbo:
+ * @mem:a #GstMemory
+ * 
+ * Returns: whether the memory at @mem is a #GstGLMemoryPBO
+ *
+ * Since: 1.8
+ */
+gboolean
+gst_is_gl_memory_pbo (GstMemory * mem)
+{
+  return mem != NULL && mem->allocator != NULL
+      && g_type_is_a (G_OBJECT_TYPE (mem->allocator),
+      GST_TYPE_GL_MEMORY_PBO_ALLOCATOR);
+}
diff --git a/gst-libs/gst/gl/gstglmemorypbo.h b/gst-libs/gst/gl/gstglmemorypbo.h
new file mode 100644
index 0000000..aa4110e
--- /dev/null
+++ b/gst-libs/gst/gl/gstglmemorypbo.h
@@ -0,0 +1,101 @@
+/*
+ * GStreamer
+ * Copyright (C) 2012 Matthew Waters <ystreet00@gmail.com>
+ * Copyright (C) 2015 Matthew Waters <matthew@centricular.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifndef _GST_GL_MEMORY_PBO_H_
+#define _GST_GL_MEMORY_PBO_H_
+
+#include <gst/gst.h>
+#include <gst/gstallocator.h>
+#include <gst/gstmemory.h>
+#include <gst/video/video.h>
+
+#include <gst/gl/gstglmemory.h>
+
+G_BEGIN_DECLS
+
+#define GST_TYPE_GL_MEMORY_PBO_ALLOCATOR (gst_gl_memory_pbo_allocator_get_type())
+GType gst_gl_memory_pbo_allocator_get_type(void);
+
+#define GST_IS_GL_MEMORY_PBO_ALLOCATOR(obj)              (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GST_TYPE_GL_MEMORY_PBO_ALLOCATOR))
+#define GST_IS_GL_MEMORY_PBO_ALLOCATOR_CLASS(klass)      (G_TYPE_CHECK_CLASS_TYPE ((klass), GST_TYPE_GL_MEMORY_PBO_ALLOCATOR))
+#define GST_GL_MEMORY_PBO_ALLOCATOR_GET_CLASS(obj)       (G_TYPE_INSTANCE_GET_CLASS ((obj), GST_TYPE_GL_MEMORY_PBO_ALLOCATOR, GstGLMemoryPBOAllocatorClass))
+#define GST_GL_MEMORY_PBO_ALLOCATOR(obj)                 (G_TYPE_CHECK_INSTANCE_CAST ((obj), GST_TYPE_GL_MEMORY_PBO_ALLOCATOR, GstGLMemoryPBOAllocator))
+#define GST_GL_MEMORY_PBO_ALLOCATOR_CLASS(klass)         (G_TYPE_CHECK_CLASS_CAST ((klass), GST_TYPE_GL_MEMORY_PBO_ALLOCATOR, GstGLAllocatorClass))
+#define GST_GL_MEMORY_PBO_ALLOCATOR_CAST(obj)            ((GstGLMemoryPBOAllocator *)(obj))
+
+/**
+ * GstGLMemoryPBO:
+ *
+ * Private instance
+ */
+struct _GstGLMemoryPBO
+{
+  GstGLMemory      mem;
+
+  /* <private> */
+  GstGLBuffer          *pbo;
+};
+
+/**
+ * GST_GL_MEMORY_PBO_ALLOCATOR:
+ *
+ * The name of the GL Memory PBO allocator
+ */
+#define GST_GL_MEMORY_PBO_ALLOCATOR_NAME   "GLMemoryPBO"
+
+void          gst_gl_memory_pbo_init_once               (void);
+gboolean      gst_is_gl_memory_pbo                      (GstMemory * mem);
+
+void          gst_gl_memory_pbo_download_transfer       (GstGLMemoryPBO * gl_mem);
+void          gst_gl_memory_pbo_upload_transfer         (GstGLMemoryPBO * gl_mem);
+
+gboolean      gst_gl_memory_pbo_copy_into_texture       (GstGLMemoryPBO *gl_mem,
+                                                         guint tex_id,
+                                                         GstGLTextureTarget target,
+                                                         GstVideoGLTextureType tex_type,
+                                                         gint width,
+                                                         gint height,
+                                                         gint stride,
+                                                         gboolean respecify);
+
+/**
+ * GstGLAllocator
+ *
+ * Opaque #GstGLAllocator struct
+ */
+struct _GstGLMemoryPBOAllocator
+{
+  GstGLMemoryAllocator parent;
+};
+
+/**
+ * GstGLAllocatorClass:
+ *
+ * The #GstGLAllocatorClass only contains private data
+ */
+struct _GstGLMemoryPBOAllocatorClass
+{
+  GstGLMemoryAllocatorClass parent_class;
+};
+
+G_END_DECLS
+
+#endif /* _GST_GL_MEMORY_PBO_H_ */
diff --git a/gst-libs/gst/gl/gstgloverlaycompositor.c b/gst-libs/gst/gl/gstgloverlaycompositor.c
index 97a4aab..f7d0639 100644
--- a/gst-libs/gst/gl/gstgloverlaycompositor.c
+++ b/gst-libs/gst/gl/gstgloverlaycompositor.c
@@ -344,12 +344,27 @@
   vinfo.stride[0] = vmeta->stride[0];
 
   if (gst_video_frame_map (comp_frame, &vinfo, comp_buffer, GST_MAP_READ)) {
+    GstGLVideoAllocationParams *params;
+    GstGLBaseMemoryAllocator *mem_allocator;
+    GstAllocator *allocator;
+
+    allocator =
+        GST_ALLOCATOR (gst_gl_memory_allocator_get_default (overlay->context));
+    mem_allocator = GST_GL_BASE_MEMORY_ALLOCATOR (allocator);
+
     gst_gl_composition_overlay_add_transformation (overlay, buf);
 
-    comp_gl_memory =
-        gst_gl_memory_wrapped (overlay->context, &comp_frame->info, 0, NULL,
+    params = gst_gl_video_allocation_params_new_wrapped_data (overlay->context,
+        NULL, &comp_frame->info, 0, NULL, GST_GL_TEXTURE_TARGET_2D,
         comp_frame->data[0], comp_frame, _video_frame_unmap_and_free);
 
+    comp_gl_memory =
+        (GstGLMemory *) gst_gl_base_memory_alloc (mem_allocator,
+        (GstGLAllocationParams *) params);
+
+    gst_gl_allocation_params_free ((GstGLAllocationParams *) params);
+    gst_object_unref (allocator);
+
     overlay_buffer = gst_buffer_new ();
     gst_buffer_append_memory (overlay_buffer, (GstMemory *) comp_gl_memory);
 
@@ -425,12 +440,24 @@
 {
   GstGLOverlayCompositor *compositor =
       (GstGLOverlayCompositor *) compositor_pointer;
+  GError *error = NULL;
 
-  if (!gst_gl_shader_compile_with_default_v_and_check (compositor->shader,
-          fragment_shader, &compositor->position_attrib,
-          &compositor->texcoord_attrib)) {
-    GST_ERROR ("could not initialize shader.");
+  if (!(compositor->shader =
+          gst_gl_shader_new_link_with_stages (context, &error,
+              gst_glsl_stage_new_default_vertex (context),
+              gst_glsl_stage_new_with_string (context, GL_FRAGMENT_SHADER,
+                  GST_GLSL_VERSION_NONE,
+                  GST_GLSL_PROFILE_ES | GST_GLSL_PROFILE_COMPATIBILITY,
+                  fragment_shader), NULL))) {
+    GST_ERROR_OBJECT (compositor, "could not initialize shader: %s",
+        error->message);
+    return;
   }
+
+  compositor->position_attrib =
+      gst_gl_shader_get_attribute_location (compositor->shader, "a_position");
+  compositor->texcoord_attrib =
+      gst_gl_shader_get_attribute_location (compositor->shader, "a_texcoord");
 }
 
 GstGLOverlayCompositor *
@@ -441,8 +468,6 @@
 
   compositor->context = gst_object_ref (context);
 
-  compositor->shader = gst_gl_shader_new (compositor->context);
-
   gst_gl_context_thread_add (compositor->context,
       gst_gl_overlay_compositor_init_gl, compositor);
 
diff --git a/gst-libs/gst/gl/gstglquery.c b/gst-libs/gst/gl/gstglquery.c
new file mode 100644
index 0000000..45e6336
--- /dev/null
+++ b/gst-libs/gst/gl/gstglquery.c
@@ -0,0 +1,268 @@
+/*
+ * GStreamer
+ * Copyright (C) 2016 Matthew Waters <matthew@centricular.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <gst/gl/gl.h>
+
+#include <string.h>
+
+#include "gstglquery.h"
+
+#ifndef GL_TIME_ELAPSED
+#define GL_TIME_ELAPSED 0x88BF
+#endif
+
+#ifndef GL_TIMESTAMP
+#define GL_TIMESTAMP 0x8E28
+#endif
+
+#ifndef GL_QUERY_RESULT
+#define GL_QUERY_RESULT 0x8866
+#endif
+
+#define GST_CAT_DEFAULT gst_gl_query_debug
+GST_DEBUG_CATEGORY_STATIC (GST_CAT_DEFAULT);
+
+static void
+_init_debug (void)
+{
+  static volatile gsize _init = 0;
+
+  if (g_once_init_enter (&_init)) {
+    GST_DEBUG_CATEGORY_INIT (GST_CAT_DEFAULT, "glquery", 0, "glquery element");
+    g_once_init_leave (&_init, 1);
+  }
+}
+
+static const gchar *
+_query_type_to_string (guint query_type)
+{
+  switch (query_type) {
+    case GST_GL_QUERY_TIME_ELAPSED:
+    case GL_TIME_ELAPSED:
+      return "time elapsed";
+    case GL_TIMESTAMP:
+    case GST_GL_QUERY_TIMESTAMP:
+      return "timestamp";
+    default:
+      return "unknown";
+  }
+}
+
+static guint
+_gst_gl_query_type_to_gl (GstGLQueryType query_type)
+{
+  if (query_type == GST_GL_QUERY_TIME_ELAPSED)
+    return GL_TIME_ELAPSED;
+  if (query_type == GST_GL_QUERY_TIMESTAMP)
+    return GL_TIMESTAMP;
+
+  g_assert_not_reached ();
+  return 0;
+}
+
+static gboolean
+_query_type_supports_counter (guint gl_query_type)
+{
+  return gl_query_type == GL_TIMESTAMP;
+}
+
+static gboolean
+_query_type_supports_begin_end (guint gl_query_type)
+{
+  return gl_query_type == GL_TIME_ELAPSED;
+}
+
+static gboolean
+_context_supports_query_type (GstGLContext * context, guint gl_query_type)
+{
+  return gl_query_type != 0 && context->gl_vtable->GenQueries != NULL;
+}
+
+static gchar *
+_log_time (gpointer user_data)
+{
+  GstGLQuery *query = user_data;
+  gint64 result;
+
+  result = gst_gl_query_result (query);
+
+  return gst_info_strdup_printf ("%" GST_TIME_FORMAT, GST_TIME_ARGS (result));
+}
+
+void
+gst_gl_query_init (GstGLQuery * query, GstGLContext * context,
+    GstGLQueryType query_type)
+{
+  const GstGLFuncs *gl;
+
+  g_return_if_fail (query != NULL);
+  g_return_if_fail (GST_IS_GL_CONTEXT (context));
+  gl = context->gl_vtable;
+
+  memset (query, 0, sizeof (*query));
+
+  _init_debug ();
+
+  query->context = gst_object_ref (context);
+  query->query_type = _gst_gl_query_type_to_gl (query_type);
+  query->supported = _context_supports_query_type (context, query->query_type);
+
+  if (query->supported)
+    gl->GenQueries (1, &query->query_id);
+
+  gst_gl_async_debug_init (&query->debug);
+  query->debug.callback = _log_time;
+  query->debug.user_data = query;
+}
+
+void
+gst_gl_query_unset (GstGLQuery * query)
+{
+  const GstGLFuncs *gl;
+
+  g_return_if_fail (query != NULL);
+  if (query->start_called)
+    g_critical ("Unsetting a running query. This may not be what you wanted."
+        "Be sure to pair calls to gst_gl_query_start() and gst_gl_query_end()");
+
+  GST_TRACE ("%p unsetting query %u", query, query->query_id);
+
+  gl = query->context->gl_vtable;
+
+  /* unset the debug object as it may callback to print the last message */
+  gst_gl_async_debug_unset (&query->debug);
+
+  if (query->query_id)
+    gl->DeleteQueries (1, &query->query_id);
+
+  gst_object_unref (query->context);
+}
+
+GstGLQuery *
+gst_gl_query_new (GstGLContext * context, GstGLQueryType query_type)
+{
+  GstGLQuery *query = g_new0 (GstGLQuery, 1);
+
+  gst_gl_query_init (query, context, query_type);
+
+  return query;
+}
+
+void
+gst_gl_query_free (GstGLQuery * query)
+{
+  g_return_if_fail (query != NULL);
+
+  gst_gl_query_unset (query);
+  g_free (query);
+}
+
+void
+gst_gl_query_start (GstGLQuery * query)
+{
+  const GstGLFuncs *gl;
+
+  g_return_if_fail (query != NULL);
+  g_return_if_fail (_query_type_supports_begin_end (query->query_type));
+
+  if (!query->supported)
+    return;
+
+  query->start_called = TRUE;
+  gst_gl_async_debug_output_log_msg (&query->debug);
+
+  GST_TRACE ("%p start query type \'%s\' id %u", query,
+      _query_type_to_string (query->query_type), query->query_id);
+
+  gl = query->context->gl_vtable;
+  gl->BeginQuery (query->query_type, query->query_id);
+}
+
+void
+gst_gl_query_end (GstGLQuery * query)
+{
+  const GstGLFuncs *gl;
+
+  g_return_if_fail (query != NULL);
+  g_return_if_fail (_query_type_supports_begin_end (query->query_type));
+
+  if (!query->supported)
+    return;
+  g_return_if_fail (query->start_called);
+
+  GST_TRACE ("%p end query type \'%s\' id %u", query,
+      _query_type_to_string (query->query_type), query->query_id);
+
+  gl = query->context->gl_vtable;
+
+  gl->EndQuery (query->query_type);
+  query->start_called = FALSE;
+}
+
+void
+gst_gl_query_counter (GstGLQuery * query)
+{
+  const GstGLFuncs *gl;
+
+  g_return_if_fail (query != NULL);
+  g_return_if_fail (_query_type_supports_counter (query->query_type));
+
+  if (!query->supported)
+    return;
+
+  GST_TRACE ("%p query counter type \'%s\' id %u", query,
+      _query_type_to_string (query->query_type), query->query_id);
+
+  gst_gl_async_debug_output_log_msg (&query->debug);
+
+  gl = query->context->gl_vtable;
+  gl->QueryCounter (query->query_id, query->query_type);
+}
+
+guint64
+gst_gl_query_result (GstGLQuery * query)
+{
+  const GstGLFuncs *gl;
+  guint64 ret;
+
+  g_return_val_if_fail (query != NULL, 0);
+  g_return_val_if_fail (!query->start_called, 0);
+
+  if (!query->supported)
+    return 0;
+
+  gl = query->context->gl_vtable;
+  if (gl->GetQueryObjectui64v) {
+    gl->GetQueryObjectui64v (query->query_id, GL_QUERY_RESULT, &ret);
+  } else {
+    guint tmp;
+    gl->GetQueryObjectuiv (query->query_id, GL_QUERY_RESULT, &tmp);
+    ret = tmp;
+  }
+
+  GST_TRACE ("%p get result %" G_GUINT64_FORMAT " type \'%s\' id %u", query,
+      ret, _query_type_to_string (query->query_type), query->query_id);
+
+  return ret;
+}
diff --git a/gst-libs/gst/gl/gstglquery.h b/gst-libs/gst/gl/gstglquery.h
new file mode 100644
index 0000000..9cf06fa
--- /dev/null
+++ b/gst-libs/gst/gl/gstglquery.h
@@ -0,0 +1,140 @@
+/*
+ * GStreamer
+ * Copyright (C) 2016 Matthew Waters <matthew@centricular.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifndef __GST_GL_QUERY_H__
+#define __GST_GL_QUERY_H__
+
+#include <gst/gl/gstgl_fwd.h>
+
+G_BEGIN_DECLS
+
+typedef enum
+{
+  GST_GL_QUERY_NONE,
+  GST_GL_QUERY_TIME_ELAPSED,
+  GST_GL_QUERY_TIMESTAMP,
+} GstGLQueryType;
+
+struct _GstGLQuery
+{
+  /* <private> */
+  GstGLContext *    context;
+  guint             query_type;
+  guint             query_id;
+  gboolean          supported;
+
+  gboolean          start_called;
+  GstGLAsyncDebug   debug;
+};
+
+void                gst_gl_query_init               (GstGLQuery * query,
+                                                     GstGLContext * context,
+                                                     GstGLQueryType query_type);
+void                gst_gl_query_unset              (GstGLQuery * query);
+GstGLQuery *        gst_gl_query_new                (GstGLContext * context,
+                                                     GstGLQueryType query_type);
+void                gst_gl_query_free               (GstGLQuery * query);
+
+void                gst_gl_query_start              (GstGLQuery * query);
+void                gst_gl_query_end                (GstGLQuery * query);
+void                gst_gl_query_counter            (GstGLQuery * query);
+guint64             gst_gl_query_result             (GstGLQuery * query);
+
+#define gst_gl_query_start_log_valist(query,cat,level,object,format,varargs) \
+  G_STMT_START {    \
+    GST_GL_ASYNC_CAT_LEVEL_LOG_valist (&(query)->debug, cat, level, object, format, varargs); \
+    gst_gl_async_debug_freeze (&(query)->debug); \
+    gst_gl_query_start (query); \
+    gst_gl_async_debug_thaw (&(query)->debug); \
+  } G_STMT_END
+
+#define gst_gl_query_counter_log_valist(query,cat,level,object,format,varargs) \
+  G_STMT_START {    \
+    GST_GL_ASYNC_CAT_LEVEL_LOG_valist (&(query)->debug, cat, level, object, format, varargs); \
+    gst_gl_async_debug_freeze (&(query)->debug); \
+    gst_gl_query_counter (query); \
+    gst_gl_async_debug_thaw (&(query)->debug); \
+  } G_STMT_END
+
+#if G_HAVE_ISO_VARARGS
+
+#define gst_gl_query_start_log(query,cat,level,object,format,...) \
+  G_STMT_START {    \
+    GST_GL_ASYNC_CAT_LEVEL_LOG (&(query)->debug, cat, level, object, format, __VA_ARGS__); \
+    gst_gl_async_debug_freeze (&(query)->debug); \
+    gst_gl_query_start (query); \
+    gst_gl_async_debug_thaw (&(query)->debug); \
+  } G_STMT_END
+#define gst_gl_query_counter_log(query,cat,level,object,format,...) \
+  G_STMT_START {    \
+    GST_GL_ASYNC_CAT_LEVEL_LOG (&(query)->debug, cat, level, object, format, __VA_ARGS__); \
+    gst_gl_async_debug_freeze (&(query)->debug); \
+    gst_gl_query_counter (query); \
+    gst_gl_async_debug_thaw (&(query)->debug); \
+  } G_STMT_END
+
+#else /* G_HAVE_ISO_VARARGS */
+#if G_HAVE_GNUC_VARARGS
+
+#define gst_gl_query_start_log(query,cat,level,object,format,args...) \
+  G_STMT_START {    \
+    GST_GL_ASYNC_CAT_LEVEL_LOG (&(query)->debug, cat, level, object, format, ##args); \
+    gst_gl_async_debug_freeze (&(query)->debug); \
+    gst_gl_query_start (query); \
+    gst_gl_async_debug_thaw (&(query)->debug); \
+  } G_STMT_END
+#define gst_gl_query_counter_log(query,cat,level,object,format,args...) \
+  G_STMT_START {    \
+    GST_GL_ASYNC_CAT_LEVEL_LOG (&(query)->debug, cat, level, object, format, ##args); \
+    gst_gl_async_debug_freeze (&(query)->debug); \
+    gst_gl_query_counter (query); \
+    gst_gl_async_debug_thaw (&(query)->debug); \
+  } G_STMT_END
+
+#else /* G_HAVE_GNUC_VARARGS */
+
+static inline void
+gst_gl_query_start_log(GstGLQuery * query, GstDebugCategory * cat,
+    GstDebugLevel level, GObject * object, const gchar * format, ...)
+{
+  va_list varargs;
+
+  va_start (varargs, format);
+  gst_gl_query_start_log_valist (query, cat, level, object, format, varargs);
+  va_end (varargs);
+}
+
+static inline void
+gst_gl_query_counter_log(GstGLQuery * query, GstDebugCategory * cat,
+    GstDebugLevel level, GObject * object, const gchar * format, ...)
+{
+  va_list varargs;
+
+  va_start (varargs, format);
+  gst_gl_query_counter_log_valist (query, cat, level, object, format, varargs);
+  va_end (varargs);
+}
+
+#endif /* G_HAVE_GNUC_VARARGS */
+#endif /* G_HAVE_ISO_VARARGS */
+
+G_END_DECLS
+
+#endif /* __GST_GL_QUERY_H__ */
diff --git a/gst-libs/gst/gl/gstglshader.c b/gst-libs/gst/gl/gstglshader.c
index a41bf38..9d96784 100644
--- a/gst-libs/gst/gl/gstglshader.c
+++ b/gst-libs/gst/gl/gstglshader.c
@@ -25,38 +25,14 @@
 
 #include "gl.h"
 #include "gstglshader.h"
+#include "gstglsl_private.h"
 
-/* FIXME: separate into separate shader stage objects that can be added/removed
- * independently of the shader program */
+/**
+ * SECTION:gstglshader
+ * @short_description: object representing an OpenGL shader program
+ * @see_also: #GstGLSLStage
+ */
 
-static const gchar *es2_version_header = "#version 100\n";
-
-/* *INDENT-OFF* */
-static const gchar *simple_vertex_shader_str_gles2 =
-      "attribute vec4 a_position;\n"
-      "attribute vec2 a_texcoord;\n"
-      "varying vec2 v_texcoord;\n"
-      "void main()\n"
-      "{\n"
-      "   gl_Position = a_position;\n"
-      "   v_texcoord = a_texcoord;\n"
-      "}\n";
-
-static const gchar *simple_fragment_shader_str_gles2 =
-      "#ifdef GL_ES\n"
-      "precision mediump float;\n"
-      "#endif\n"
-      "varying vec2 v_texcoord;\n"
-      "uniform sampler2D tex;\n"
-      "void main()\n"
-      "{\n"
-      "  gl_FragColor = texture2D(tex, v_texcoord);\n"
-      "}";
-/* *INDENT-ON* */
-
-#ifndef GL_COMPILE_STATUS
-#define GL_COMPILE_STATUS             0x8B81
-#endif
 #ifndef GLhandleARB
 #define GLhandleARB GLuint
 #endif
@@ -94,27 +70,18 @@
 enum
 {
   PROP_0,
-  PROP_VERTEX_SRC,
-  PROP_FRAGMENT_SRC,
-  PROP_COMPILED,
-  PROP_ACTIVE                   /* unused */
+  PROP_LINKED,
 };
 
 struct _GstGLShaderPrivate
 {
-  gchar *vertex_src;
-  gchar *fragment_src;
-
-  GLhandleARB vertex_handle;
-  GLhandleARB fragment_handle;
   GLhandleARB program_handle;
+  GList *stages;
 
-  gboolean compiled;
-  gboolean active;
+  gboolean linked;
+  GHashTable *uniform_locations;
 
-  GstGLAPI gl_api;
-
-  GstGLShaderVTable vtable;
+  GstGLSLFuncs vtable;
 };
 
 GST_DEBUG_CATEGORY_STATIC (gst_gl_shader_debug);
@@ -130,21 +97,21 @@
 {
   GstGLShaderPrivate *priv = shader->priv;
 
+  GST_OBJECT_LOCK (shader);
+
   /* release shader objects */
-  gst_gl_shader_release (shader);
+  gst_gl_shader_release_unlocked (shader);
 
   /* delete program */
   if (priv->program_handle) {
     GST_TRACE ("finalizing program shader %u", priv->program_handle);
 
     priv->vtable.DeleteProgram (priv->program_handle);
-    /* err = glGetError (); */
-    /* GST_WARNING ("error: 0x%x", err);  */
-    /* glGetObjectParameteriv(priv->program_handle, GL_OBJECT_DELETE_STATUS_, &status); */
-    /* GST_INFO ("program deletion status:%s", status == GL_TRUE ? "true" : "false" ); */
   }
 
   GST_DEBUG ("shader deleted %u", priv->program_handle);
+
+  GST_OBJECT_UNLOCK (shader);
 }
 
 static void
@@ -158,15 +125,11 @@
 
   GST_TRACE_OBJECT (shader, "finalizing shader %u", priv->program_handle);
 
-  g_free (priv->vertex_src);
-  g_free (priv->fragment_src);
-
   gst_gl_context_thread_add (shader->context,
       (GstGLContextThreadFunc) _cleanup_shader, shader);
 
-  priv->fragment_handle = 0;
-  priv->vertex_handle = 0;
   priv->program_handle = 0;
+  g_hash_table_destroy (priv->uniform_locations);
 
   if (shader->context) {
     gst_object_unref (shader->context);
@@ -180,15 +143,7 @@
 gst_gl_shader_set_property (GObject * object,
     guint prop_id, const GValue * value, GParamSpec * pspec)
 {
-  GstGLShader *shader = GST_GL_SHADER (object);
-
   switch (prop_id) {
-    case PROP_VERTEX_SRC:
-      gst_gl_shader_set_vertex_source (shader, g_value_get_string (value));
-      break;
-    case PROP_FRAGMENT_SRC:
-      gst_gl_shader_set_fragment_source (shader, g_value_get_string (value));
-      break;
     default:
       G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
       break;
@@ -203,27 +158,13 @@
   GstGLShaderPrivate *priv = shader->priv;
 
   switch (prop_id) {
-    case PROP_VERTEX_SRC:
-      g_value_set_string (value, priv->vertex_src);
-      break;
-    case PROP_FRAGMENT_SRC:
-      g_value_set_string (value, priv->fragment_src);
-      break;
-    case PROP_COMPILED:
-      g_value_set_boolean (value, priv->compiled);
+    case PROP_LINKED:
+      g_value_set_boolean (value, priv->linked);
       break;
     default:
       G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
       break;
   }
-
-}
-
-int
-gst_gl_shader_get_program_handle (GstGLShader * shader)
-{
-  GstGLShaderPrivate *priv = shader->priv;
-  return (int) priv->program_handle;
 }
 
 static void
@@ -239,82 +180,14 @@
   obj_class->get_property = gst_gl_shader_get_property;
 
   /* .. and install properties */
-
   g_object_class_install_property (obj_class,
-      PROP_VERTEX_SRC,
-      g_param_spec_string ("vertex-src",
-          "Vertex Source",
-          "GLSL Vertex Shader source code", NULL,
-          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
-  g_object_class_install_property (obj_class,
-      PROP_FRAGMENT_SRC,
-      g_param_spec_string ("fragment-src",
-          "Fragment Source",
-          "GLSL Fragment Shader source code", NULL,
-          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
-  g_object_class_install_property (obj_class,
-      PROP_ACTIVE,
-      g_param_spec_string ("active",
-          "Active", "Enable/Disable the shader", NULL,
-          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
-  g_object_class_install_property (obj_class,
-      PROP_COMPILED,
-      g_param_spec_boolean ("compiled",
-          "Compiled",
-          "Shader compile and link status", FALSE,
+      PROP_LINKED,
+      g_param_spec_boolean ("linked",
+          "Linked",
+          "Shader link status", FALSE,
           G_PARAM_READABLE | G_PARAM_STATIC_STRINGS));
 }
 
-void
-gst_gl_shader_set_vertex_source (GstGLShader * shader, const gchar * src)
-{
-  GstGLShaderPrivate *priv;
-
-  g_return_if_fail (GST_GL_IS_SHADER (shader));
-  g_return_if_fail (src != NULL);
-
-  priv = shader->priv;
-
-  if (gst_gl_shader_is_compiled (shader))
-    gst_gl_shader_release (shader);
-
-  g_free (priv->vertex_src);
-
-  priv->vertex_src = g_strdup (src);
-}
-
-void
-gst_gl_shader_set_fragment_source (GstGLShader * shader, const gchar * src)
-{
-  GstGLShaderPrivate *priv;
-
-  g_return_if_fail (GST_GL_IS_SHADER (shader));
-  g_return_if_fail (src != NULL);
-
-  priv = shader->priv;
-
-  if (gst_gl_shader_is_compiled (shader))
-    gst_gl_shader_release (shader);
-
-  g_free (priv->fragment_src);
-
-  priv->fragment_src = g_strdup (src);
-}
-
-const gchar *
-gst_gl_shader_get_vertex_source (GstGLShader * shader)
-{
-  g_return_val_if_fail (GST_GL_IS_SHADER (shader), NULL);
-  return shader->priv->vertex_src;
-}
-
-const gchar *
-gst_gl_shader_get_fragment_source (GstGLShader * shader)
-{
-  g_return_val_if_fail (GST_GL_IS_SHADER (shader), NULL);
-  return shader->priv->fragment_src;
-}
-
 static void
 gst_gl_shader_init (GstGLShader * self)
 {
@@ -323,268 +196,490 @@
 
   priv = self->priv = GST_GL_SHADER_GET_PRIVATE (self);
 
-  priv->vertex_src = NULL;
-  priv->fragment_src = NULL;
+  priv->linked = FALSE;
+  priv->uniform_locations =
+      g_hash_table_new_full (g_str_hash, g_str_equal, g_free, NULL);
+}
 
-  priv->fragment_handle = 0;
-  priv->vertex_handle = 0;
+static int
+_get_uniform_location (GstGLShader * shader, const gchar * name)
+{
+  GstGLShaderPrivate *priv = shader->priv;
+  int location;
+  gpointer value;
 
-  priv->compiled = FALSE;
-  priv->active = FALSE;         /* unused at the moment */
+  g_return_val_if_fail (priv->linked, 0);
 
-  /* FIXME: add API to get/set this for each shader */
-  priv->gl_api = GST_GL_API_ANY;
+  if (!g_hash_table_lookup_extended (priv->uniform_locations, name, NULL,
+          &value)) {
+    const GstGLFuncs *gl = shader->context->gl_vtable;
+    location = gl->GetUniformLocation (priv->program_handle, name);
+    g_hash_table_insert (priv->uniform_locations, g_strdup (name),
+        GINT_TO_POINTER (location));
+  } else {
+    location = GPOINTER_TO_INT (value);
+  }
+
+  return location;
+}
+
+static GstGLShader *
+_new_with_stages_va_list (GstGLContext * context, GError ** error,
+    va_list varargs)
+{
+  GstGLShader *shader;
+  GstGLSLStage *stage;
+  gboolean to_unref_and_out = FALSE;
+
+  g_return_val_if_fail (GST_IS_GL_CONTEXT (context), NULL);
+
+  shader = g_object_new (GST_GL_TYPE_SHADER, NULL);
+  shader->context = gst_object_ref (context);
+
+  while ((stage = va_arg (varargs, GstGLSLStage *))) {
+    if (to_unref_and_out) {
+      gst_object_unref (stage);
+      continue;
+    }
+
+    if (!gst_glsl_stage_compile (stage, error)) {
+      gst_object_unref (stage);
+      to_unref_and_out = TRUE;
+      continue;
+    }
+    if (!gst_gl_shader_attach (shader, stage)) {
+      g_set_error (error, GST_GLSL_ERROR, GST_GLSL_ERROR_PROGRAM,
+          "Failed to attach stage to program");
+      to_unref_and_out = TRUE;
+      continue;
+    }
+  }
+
+  if (to_unref_and_out) {
+    gst_object_unref (shader);
+    return NULL;
+  }
+
+  return shader;
+}
+
+/**
+ * gst_gl_shader_new_link_with_stages:
+ * @context: a #GstGLContext
+ * @error: a #GError
+ * @...: a NULL terminated list of #GstGLSLStage's
+ *
+ * Each stage will attempt to be compiled and attached to @shader.  Then
+ * the shader will be linked. On error, %NULL will be returned and @error will
+ * contain the details of the error.
+ *
+ * Note: must be called in the GL thread
+ *
+ * Returns: (transfer full): a new @shader with the specified stages.
+ *
+ * Since: 1.8
+ */
+GstGLShader *
+gst_gl_shader_new_link_with_stages (GstGLContext * context, GError ** error,
+    ...)
+{
+  GstGLShader *shader;
+  va_list varargs;
+
+  va_start (varargs, error);
+  shader = _new_with_stages_va_list (context, error, varargs);
+  va_end (varargs);
+
+  if (!shader)
+    return NULL;
+
+  if (!gst_gl_shader_link (shader, error))
+    return NULL;
+
+  return shader;
+}
+
+/**
+ * gst_gl_shader_new_with_stages:
+ * @context: a #GstGLContext
+ * @error: a #GError
+ * @...: a NULL terminated list of #GstGLSLStage's
+ *
+ * Each stage will attempt to be compiled and attached to @shader.  On error,
+ * %NULL will be returned and @error will contain the details of the error.
+ *
+ * Note: must be called in the GL thread
+ *
+ * Returns: (transfer full): a new @shader with the specified stages.
+ *
+ * Since: 1.8
+ */
+GstGLShader *
+gst_gl_shader_new_with_stages (GstGLContext * context, GError ** error, ...)
+{
+  GstGLShader *shader;
+  va_list varargs;
+
+  va_start (varargs, error);
+  shader = _new_with_stages_va_list (context, error, varargs);
+  va_end (varargs);
+
+  return shader;
+}
+
+/**
+ * gst_gl_shader_new:
+ * @context: a #GstGLContext
+ *
+ * Note: must be called in the GL thread
+ *
+ * Returns: (transfer full): a new empty @shader
+ */
+GstGLShader *
+gst_gl_shader_new (GstGLContext * context)
+{
+  return gst_gl_shader_new_with_stages (context, NULL, NULL);
+}
+
+/**
+ * gst_gl_shader_new_default:
+ * @context: a #GstGLContext
+ * @error: a #GError that is filled on failure
+ *
+ * Note: must be called in the GL thread
+ *
+ * Returns: (transfer full): a default @shader or %NULL on failure
+ *
+ * Since: 1.8
+ */
+GstGLShader *
+gst_gl_shader_new_default (GstGLContext * context, GError ** error)
+{
+  return gst_gl_shader_new_link_with_stages (context, error,
+      gst_glsl_stage_new_default_vertex (context),
+      gst_glsl_stage_new_default_fragment (context), NULL);
+}
+
+/**
+ * gst_gl_shader_is_linked:
+ * @shader: a #GstGLShader
+ *
+ * Note: must be called in the GL thread
+ *
+ * Returns: whether @shader has been successfully linked
+ *
+ * Since: 1.8
+ */
+gboolean
+gst_gl_shader_is_linked (GstGLShader * shader)
+{
+  gboolean ret;
+
+  g_return_val_if_fail (GST_IS_GL_SHADER (shader), FALSE);
+
+  GST_OBJECT_LOCK (shader);
+  ret = shader->priv->linked;
+  GST_OBJECT_UNLOCK (shader);
+
+  return ret;
 }
 
 static gboolean
-_fill_vtable (GstGLShader * shader, GstGLContext * context)
+_ensure_program (GstGLShader * shader)
 {
-  GstGLFuncs *gl = context->gl_vtable;
-  GstGLShaderVTable *vtable = &shader->priv->vtable;
+  if (shader->priv->program_handle)
+    return TRUE;
 
-  if (gl->CreateProgram) {
-    vtable->CreateProgram = gl->CreateProgram;
-    vtable->DeleteProgram = gl->DeleteProgram;
-    vtable->UseProgram = gl->UseProgram;
+  shader->priv->program_handle = shader->priv->vtable.CreateProgram ();
+  return shader->priv->program_handle != 0;
+}
 
-    vtable->CreateShader = gl->CreateShader;
-    vtable->DeleteShader = gl->DeleteShader;
-    vtable->AttachShader = gl->AttachShader;
-    vtable->DetachShader = gl->DetachShader;
+/**
+ * gst_gl_shader_get_program_handle:
+ * @shader: a #GstGLShader
+ *
+ * Returns: the GL program handle for this shader
+ *
+ * Since: 1.8
+ */
+int
+gst_gl_shader_get_program_handle (GstGLShader * shader)
+{
+  int ret;
 
-    vtable->GetAttachedShaders = gl->GetAttachedShaders;
+  g_return_val_if_fail (GST_IS_GL_SHADER (shader), 0);
 
-    vtable->GetShaderInfoLog = gl->GetShaderInfoLog;
-    vtable->GetShaderiv = gl->GetShaderiv;
-    vtable->GetProgramInfoLog = gl->GetProgramInfoLog;
-    vtable->GetProgramiv = gl->GetProgramiv;
-  } else if (gl->CreateProgramObject) {
-    vtable->CreateProgram = gl->CreateProgramObject;
-    vtable->DeleteProgram = gl->DeleteObject;
-    vtable->UseProgram = gl->UseProgramObject;
+  GST_OBJECT_LOCK (shader);
+  ret = (int) shader->priv->program_handle;
+  GST_OBJECT_UNLOCK (shader);
 
-    vtable->CreateShader = gl->CreateShaderObject;
-    vtable->DeleteShader = gl->DeleteObject;
-    vtable->AttachShader = gl->AttachObject;
-    vtable->DetachShader = gl->DetachObject;
+  return ret;
+}
 
-    vtable->GetAttachedShaders = gl->GetAttachedObjects;
+/**
+ * gst_gl_shader_detach_unlocked:
+ * @shader: a #GstGLShader
+ * @stage: a #GstGLSLStage to attach
+ *
+ * Detaches @stage from @shader.  @stage must have been successfully attached
+ * to @shader with gst_gl_shader_attach() or gst_gl_shader_attach_unlocked().
+ *
+ * Note: must be called in the GL thread
+ *
+ * Since: 1.8
+ */
+void
+gst_gl_shader_detach_unlocked (GstGLShader * shader, GstGLSLStage * stage)
+{
+  guint stage_handle;
+  GList *elem;
 
-    vtable->GetShaderInfoLog = gl->GetInfoLog;
-    vtable->GetShaderiv = gl->GetObjectParameteriv;
-    vtable->GetProgramInfoLog = gl->GetInfoLog;
-    vtable->GetProgramiv = gl->GetObjectParameteriv;
-  } else {
+  g_return_if_fail (GST_IS_GL_SHADER (shader));
+  g_return_if_fail (GST_IS_GLSL_STAGE (stage));
+
+  if (!_gst_glsl_funcs_fill (&shader->priv->vtable, shader->context)) {
+    GST_WARNING_OBJECT (shader, "Failed to retreive required GLSL functions");
+    return;
+  }
+
+  if (!shader->priv->program_handle)
+    return;
+
+  elem = g_list_find (shader->priv->stages, stage);
+  if (!elem) {
+    GST_FIXME_OBJECT (shader, "Could not find stage %p in shader %p", stage,
+        shader);
+    return;
+  }
+
+  stage_handle = gst_glsl_stage_get_handle (stage);
+  if (!stage_handle) {
+    GST_FIXME_OBJECT (shader, "Stage %p doesn't have a GL handle", stage);
+    return;
+  }
+
+  if (shader->context->gl_vtable->IsProgram)
+    g_assert (shader->context->gl_vtable->IsProgram (shader->
+            priv->program_handle));
+  if (shader->context->gl_vtable->IsShader)
+    g_assert (shader->context->gl_vtable->IsShader (stage_handle));
+
+  GST_LOG_OBJECT (shader, "detaching shader %i from program %i", stage_handle,
+      (int) shader->priv->program_handle);
+  shader->priv->vtable.DetachShader (shader->priv->program_handle,
+      stage_handle);
+
+  shader->priv->stages = g_list_delete_link (shader->priv->stages, elem);
+  gst_object_unref (stage);
+}
+
+/**
+ * gst_gl_shader_detach:
+ * @shader: a #GstGLShader
+ * @stage: a #GstGLSLStage to attach
+ *
+ * Detaches @stage from @shader.  @stage must have been successfully attached
+ * to @shader with gst_gl_shader_attach() or gst_gl_shader_attach_unlocked().
+ *
+ * Note: must be called in the GL thread
+ *
+ * Since: 1.8
+ */
+void
+gst_gl_shader_detach (GstGLShader * shader, GstGLSLStage * stage)
+{
+  g_return_if_fail (GST_IS_GL_SHADER (shader));
+  g_return_if_fail (GST_IS_GLSL_STAGE (stage));
+
+  GST_OBJECT_LOCK (shader);
+  gst_gl_shader_detach_unlocked (shader, stage);
+  GST_OBJECT_UNLOCK (shader);
+}
+
+/**
+ * gst_gl_shader_attach_unlocked:
+ * @shader: a #GstGLShader
+ * @stage: a #GstGLSLStage to attach
+ *
+ * Attaches @stage to @shader.  @stage must have been successfully compiled
+ * with gst_glsl_stage_compile().
+ *
+ * Note: must be called in the GL thread
+ *
+ * Returns: whether @stage could be attached to @shader
+ *
+ * Since: 1.8
+ */
+gboolean
+gst_gl_shader_attach_unlocked (GstGLShader * shader, GstGLSLStage * stage)
+{
+  guint stage_handle;
+
+  g_return_val_if_fail (GST_IS_GL_SHADER (shader), FALSE);
+  g_return_val_if_fail (GST_IS_GLSL_STAGE (stage), FALSE);
+
+  if (!_gst_glsl_funcs_fill (&shader->priv->vtable, shader->context)) {
+    GST_WARNING_OBJECT (shader, "Failed to retreive required GLSL functions");
+    return FALSE;
+  }
+
+  if (!_ensure_program (shader))
+    return FALSE;
+
+  /* already attached? */
+  if (g_list_find (shader->priv->stages, stage))
+    return TRUE;
+
+  stage_handle = gst_glsl_stage_get_handle (stage);
+  if (!stage_handle) {
+    return FALSE;
+  }
+
+  if (shader->context->gl_vtable->IsProgram)
+    g_assert (shader->context->gl_vtable->IsProgram (shader->
+            priv->program_handle));
+  if (shader->context->gl_vtable->IsShader)
+    g_assert (shader->context->gl_vtable->IsShader (stage_handle));
+
+  shader->priv->stages =
+      g_list_prepend (shader->priv->stages, gst_object_ref_sink (stage));
+  GST_LOG_OBJECT (shader, "attaching shader %i to program %i", stage_handle,
+      (int) shader->priv->program_handle);
+  shader->priv->vtable.AttachShader (shader->priv->program_handle,
+      stage_handle);
+
+  return TRUE;
+}
+
+/**
+ * gst_gl_shader_attach:
+ * @shader: a #GstGLShader
+ * @stage: a #GstGLSLStage to attach
+ *
+ * Attaches @stage to @shader.  @stage must have been successfully compiled
+ * with gst_glsl_stage_compile().
+ *
+ * Note: must be called in the GL thread
+ *
+ * Returns: whether @stage could be attached to @shader
+ *
+ * Since: 1.8
+ */
+gboolean
+gst_gl_shader_attach (GstGLShader * shader, GstGLSLStage * stage)
+{
+  gboolean ret;
+
+  g_return_val_if_fail (GST_IS_GL_SHADER (shader), FALSE);
+  g_return_val_if_fail (GST_IS_GLSL_STAGE (stage), FALSE);
+
+  GST_OBJECT_LOCK (shader);
+  ret = gst_gl_shader_attach_unlocked (shader, stage);
+  GST_OBJECT_UNLOCK (shader);
+
+  return ret;
+}
+
+/**
+ * gst_gl_shader_compile_attach_stage:
+ * @shader: a #GstGLShader
+ * @stage: a #GstGLSLStage to attach
+ * @error: a #GError
+ *
+ * Compiles @stage and attaches it to @shader.
+ *
+ * Note: must be called in the GL thread
+ *
+ * Returns: whether @stage could be compiled and attached to @shader
+ *
+ * Since: 1.8
+ */
+gboolean
+gst_gl_shader_compile_attach_stage (GstGLShader * shader, GstGLSLStage * stage,
+    GError ** error)
+{
+  g_return_val_if_fail (GST_IS_GLSL_STAGE (stage), FALSE);
+
+  if (!gst_glsl_stage_compile (stage, error)) {
+    return FALSE;
+  }
+
+  if (!gst_gl_shader_attach (shader, stage)) {
+    g_set_error (error, GST_GLSL_ERROR, GST_GLSL_ERROR_COMPILE,
+        "Failed to attach stage to shader");
     return FALSE;
   }
 
   return TRUE;
 }
 
-GstGLShader *
-gst_gl_shader_new (GstGLContext * context)
-{
-  GstGLShader *shader;
-
-  g_return_val_if_fail (GST_GL_IS_CONTEXT (context), NULL);
-
-  shader = g_object_new (GST_GL_TYPE_SHADER, NULL);
-  shader->context = gst_object_ref (context);
-
-  GST_DEBUG_OBJECT (shader, "Created new GLShader for context %" GST_PTR_FORMAT,
-      context);
-
-  return shader;
-}
-
+/**
+ * gst_gl_shader_link:
+ * @shader: a #GstGLShader
+ * @error: a #GError
+ *
+ * Links the current list of #GstGLSLStage's in @shader.
+ *
+ * Note: must be called in the GL thread
+ *
+ * Returns: whether @shader could be linked together.
+ *
+ * Since: 1.8
+ */
 gboolean
-gst_gl_shader_is_compiled (GstGLShader * shader)
-{
-  g_return_val_if_fail (GST_GL_IS_SHADER (shader), FALSE);
-
-  return shader->priv->compiled;
-}
-
-static gboolean
-_shader_string_has_version (const gchar * str)
-{
-  gboolean sl_comment = FALSE;
-  gboolean ml_comment = FALSE;
-  gboolean has_version = FALSE;
-  gint i = 0;
-
-  /* search for #version to allow for preceeding comments as allowed by the
-   * GLSL specification */
-  while (str && str[i] != '\0' && i < 1024) {
-    if (sl_comment) {
-      if (str[i] != '\n')
-        sl_comment = FALSE;
-      i++;
-      continue;
-    }
-
-    if (ml_comment) {
-      if (g_strstr_len (&str[i], 2, "*/")) {
-        ml_comment = FALSE;
-        i += 2;
-      } else {
-        i++;
-      }
-      continue;
-    }
-
-    if (g_strstr_len (&str[i], 2, "//")) {
-      sl_comment = TRUE;
-      i += 2;
-      continue;
-    }
-
-    if (g_strstr_len (&str[i], 2, "/*")) {
-      ml_comment = TRUE;
-      i += 2;
-      continue;
-    }
-
-    if (g_strstr_len (&str[i], 1, "#")) {
-      if (g_strstr_len (&str[i], 8, "#version"))
-        has_version = TRUE;
-      break;
-    }
-
-    i++;
-  }
-
-  return has_version;
-}
-
-static void
-_maybe_prepend_version (GstGLShader * shader, const gchar * shader_str,
-    gint * n_vertex_sources, const gchar *** vertex_sources)
-{
-  gint n = 1;
-
-  /* FIXME: this all an educated guess */
-  if (gst_gl_context_check_gl_version (shader->context, GST_GL_API_OPENGL3, 3,
-          0)
-      && (shader->priv->gl_api & GST_GL_API_GLES2) != 0
-      && !_shader_string_has_version (shader_str))
-    n = 2;
-
-  *vertex_sources = g_malloc0 (n * sizeof (gchar *));
-
-  if (n > 1)
-    *vertex_sources[0] = es2_version_header;
-
-  (*vertex_sources)[n - 1] = shader_str;
-  *n_vertex_sources = n;
-}
-
-gboolean
-gst_gl_shader_compile (GstGLShader * shader, GError ** error)
+gst_gl_shader_link (GstGLShader * shader, GError ** error)
 {
   GstGLShaderPrivate *priv;
-  GstGLFuncs *gl;
-
+  const GstGLFuncs *gl;
   gchar info_buffer[2048];
-  gint len = 0;
   GLint status = GL_FALSE;
+  gint len = 0;
+  gboolean ret;
+  GList *elem;
 
-  g_return_val_if_fail (GST_GL_IS_SHADER (shader), FALSE);
+  g_return_val_if_fail (GST_IS_GL_SHADER (shader), FALSE);
+
+  GST_OBJECT_LOCK (shader);
 
   priv = shader->priv;
   gl = shader->context->gl_vtable;
 
-  if (priv->compiled)
-    return priv->compiled;
+  if (priv->linked) {
+    GST_OBJECT_UNLOCK (shader);
+    return TRUE;
+  }
 
-  if (!_fill_vtable (shader, shader->context))
+  if (!_gst_glsl_funcs_fill (&shader->priv->vtable, shader->context)) {
+    g_set_error (error, GST_GLSL_ERROR, GST_GLSL_ERROR_PROGRAM,
+        "Failed to retreive required GLSL functions");
+    GST_OBJECT_UNLOCK (shader);
     return FALSE;
+  }
 
-  shader->priv->program_handle = shader->priv->vtable.CreateProgram ();
+  if (!_ensure_program (shader)) {
+    g_set_error (error, GST_GLSL_ERROR, GST_GLSL_ERROR_PROGRAM,
+        "Failed to create GL program object");
+    GST_OBJECT_UNLOCK (shader);
+    return FALSE;
+  }
 
   GST_TRACE ("shader created %u", shader->priv->program_handle);
 
-  g_return_val_if_fail (priv->program_handle, FALSE);
+  for (elem = shader->priv->stages; elem; elem = elem->next) {
+    GstGLSLStage *stage = elem->data;
 
-  if (priv->vertex_src) {
-    gint n_vertex_sources;
-    const gchar **vertex_sources;
-
-    _maybe_prepend_version (shader, priv->vertex_src, &n_vertex_sources,
-        &vertex_sources);
-
-    /* create vertex object */
-    priv->vertex_handle = priv->vtable.CreateShader (GL_VERTEX_SHADER);
-    gl->ShaderSource (priv->vertex_handle, n_vertex_sources, vertex_sources,
-        NULL);
-    g_free (vertex_sources);
-
-    /* compile */
-    gl->CompileShader (priv->vertex_handle);
-    /* check everything is ok */
-    status = GL_FALSE;
-    gl->GetShaderiv (priv->vertex_handle, GL_COMPILE_STATUS, &status);
-
-    priv->vtable.GetShaderInfoLog (priv->vertex_handle,
-        sizeof (info_buffer) - 1, &len, info_buffer);
-    info_buffer[len] = '\0';
-
-    if (status != GL_TRUE) {
-      GST_ERROR ("Vertex Shader compilation failed:\n%s", info_buffer);
-
-      g_set_error (error, GST_GL_SHADER_ERROR,
-          GST_GL_SHADER_ERROR_COMPILE,
-          "Vertex Shader compilation failed:\n%s", info_buffer);
-
-      priv->vtable.DeleteShader (priv->vertex_handle);
-      priv->compiled = FALSE;
-      return priv->compiled;
-    } else if (len > 1) {
-      GST_FIXME ("vertex shader info log:\n%s\n", info_buffer);
+    if (!gst_glsl_stage_compile (stage, error)) {
+      GST_OBJECT_UNLOCK (shader);
+      return FALSE;
     }
-    priv->vtable.AttachShader (priv->program_handle, priv->vertex_handle);
 
-    GST_LOG ("vertex shader attached %u", priv->vertex_handle);
-  }
-
-  if (priv->fragment_src) {
-    gint n_fragment_sources;
-    const gchar **fragment_sources;
-
-    _maybe_prepend_version (shader, priv->fragment_src, &n_fragment_sources,
-        &fragment_sources);
-
-    /* create fragment object */
-    priv->fragment_handle = priv->vtable.CreateShader (GL_FRAGMENT_SHADER);
-    gl->ShaderSource (priv->fragment_handle, n_fragment_sources,
-        fragment_sources, NULL);
-    g_free (fragment_sources);
-    /* compile */
-    gl->CompileShader (priv->fragment_handle);
-    /* check everything is ok */
-    status = GL_FALSE;
-    priv->vtable.GetShaderiv (priv->fragment_handle,
-        GL_COMPILE_STATUS, &status);
-
-    priv->vtable.GetShaderInfoLog (priv->fragment_handle,
-        sizeof (info_buffer) - 1, &len, info_buffer);
-    info_buffer[len] = '\0';
-    if (status != GL_TRUE) {
-      GST_ERROR ("Fragment Shader compilation failed:\n%s", info_buffer);
-
-      g_set_error (error, GST_GL_SHADER_ERROR,
-          GST_GL_SHADER_ERROR_COMPILE,
-          "Fragment Shader compilation failed:\n%s", info_buffer);
-
-      priv->vtable.DeleteShader (priv->fragment_handle);
-      priv->compiled = FALSE;
-      return priv->compiled;
-    } else if (len > 1) {
-      GST_FIXME ("vertex shader info log:\n%s\n", info_buffer);
+    if (!gst_gl_shader_attach_unlocked (shader, stage)) {
+      g_set_error (error, GST_GLSL_ERROR, GST_GLSL_ERROR_COMPILE,
+          "Failed to attach shader %" GST_PTR_FORMAT "to program %"
+          GST_PTR_FORMAT, stage, shader);
+      GST_OBJECT_UNLOCK (shader);
+      return FALSE;
     }
-    priv->vtable.AttachShader (priv->program_handle, priv->fragment_handle);
-
-    GST_LOG ("fragment shader attached %u", priv->fragment_handle);
   }
 
   /* if nothing failed link shaders */
@@ -599,59 +694,94 @@
   if (status != GL_TRUE) {
     GST_ERROR ("Shader linking failed:\n%s", info_buffer);
 
-    g_set_error (error, GST_GL_SHADER_ERROR,
-        GST_GL_SHADER_ERROR_LINK, "Shader Linking failed:\n%s", info_buffer);
-    priv->compiled = FALSE;
-    return priv->compiled;
+    g_set_error (error, GST_GLSL_ERROR, GST_GLSL_ERROR_LINK,
+        "Shader Linking failed:\n%s", info_buffer);
+    ret = priv->linked = FALSE;
+    GST_OBJECT_UNLOCK (shader);
+    return ret;
   } else if (len > 1) {
     GST_FIXME ("shader link log:\n%s\n", info_buffer);
   }
-  /* success! */
-  priv->compiled = TRUE;
-  g_object_notify (G_OBJECT (shader), "compiled");
 
-  return priv->compiled;
+  ret = priv->linked = TRUE;
+  GST_OBJECT_UNLOCK (shader);
+
+  g_object_notify (G_OBJECT (shader), "linked");
+
+  return ret;
 }
 
+/**
+ * gst_gl_shader_release_unlocked:
+ * @shader: a #GstGLShader
+ *
+ * Releases the shader and stages.
+ *
+ * Note: must be called in the GL thread
+ *
+ * Since: 1.8
+ */
 void
-gst_gl_shader_release (GstGLShader * shader)
+gst_gl_shader_release_unlocked (GstGLShader * shader)
 {
   GstGLShaderPrivate *priv;
+  GList *elem;
 
-  g_return_if_fail (GST_GL_IS_SHADER (shader));
+  g_return_if_fail (GST_IS_GL_SHADER (shader));
 
   priv = shader->priv;
 
-  if (!priv->compiled || !priv->program_handle)
-    return;
+  for (elem = shader->priv->stages; elem;) {
+    GstGLSLStage *stage = elem->data;
+    GList *next = elem->next;
 
-  if (priv->vertex_handle) {    /* not needed but nvidia doesn't care to respect the spec */
-    GST_TRACE ("finalizing vertex shader %u", priv->vertex_handle);
-
-    priv->vtable.DeleteShader (priv->vertex_handle);
+    gst_gl_shader_detach_unlocked (shader, stage);
+    elem = next;
   }
 
-  if (priv->fragment_handle) {
-    GST_TRACE ("finalizing fragment shader %u", priv->fragment_handle);
+  g_list_free_full (shader->priv->stages, (GDestroyNotify) gst_object_unref);
+  shader->priv->stages = NULL;
 
-    priv->vtable.DeleteShader (priv->fragment_handle);
-  }
+  priv->linked = FALSE;
+  g_hash_table_remove_all (priv->uniform_locations);
 
-  if (priv->vertex_handle)
-    priv->vtable.DetachShader (priv->program_handle, priv->vertex_handle);
-  if (priv->fragment_handle)
-    priv->vtable.DetachShader (priv->program_handle, priv->fragment_handle);
-
-  priv->compiled = FALSE;
-  g_object_notify (G_OBJECT (shader), "compiled");
+  g_object_notify (G_OBJECT (shader), "linked");
 }
 
+/**
+ * gst_gl_shader_release:
+ * @shader: a #GstGLShader
+ *
+ * Releases the shader and stages.
+ *
+ * Note: must be called in the GL thread
+ *
+ * Since: 1.8
+ */
+void
+gst_gl_shader_release (GstGLShader * shader)
+{
+  g_return_if_fail (GST_IS_GL_SHADER (shader));
+
+  GST_OBJECT_LOCK (shader);
+  gst_gl_shader_release_unlocked (shader);
+  GST_OBJECT_UNLOCK (shader);
+}
+
+/**
+ * gst_gl_shader_use:
+ * @shader: a #GstGLShader
+ *
+ * Mark's @shader as being used for the next GL draw command.
+ *
+ * Note: must be called in the GL thread and @shader must have been linked.
+ */
 void
 gst_gl_shader_use (GstGLShader * shader)
 {
   GstGLShaderPrivate *priv;
 
-  g_return_if_fail (GST_GL_IS_SHADER (shader));
+  g_return_if_fail (GST_IS_GL_SHADER (shader));
 
   priv = shader->priv;
 
@@ -662,12 +792,20 @@
   return;
 }
 
+/**
+ * gst_gl_context_clear_shader:
+ * @context: a #GstGLContext
+ *
+ * Clear's the currently set shader from the GL state machine.
+ *
+ * Note: must be called in the GL thread.
+ */
 void
 gst_gl_context_clear_shader (GstGLContext * context)
 {
   GstGLFuncs *gl;
 
-  g_return_if_fail (GST_GL_IS_CONTEXT (context));
+  g_return_if_fail (GST_IS_GL_CONTEXT (context));
 
   gl = context->gl_vtable;
 
@@ -677,104 +815,6 @@
     gl->UseProgramObject (0);
 }
 
-gboolean
-gst_gl_shader_compile_and_check (GstGLShader * shader,
-    const gchar * source, GstGLShaderSourceType type)
-{
-  gboolean is_compiled = FALSE;
-
-  g_object_get (G_OBJECT (shader), "compiled", &is_compiled, NULL);
-
-  if (!is_compiled) {
-    GError *error = NULL;
-
-    switch (type) {
-      case GST_GL_SHADER_FRAGMENT_SOURCE:
-        gst_gl_shader_set_fragment_source (shader, source);
-        break;
-      case GST_GL_SHADER_VERTEX_SOURCE:
-        gst_gl_shader_set_vertex_source (shader, source);
-        break;
-      default:
-        g_assert_not_reached ();
-        break;
-    }
-
-    gst_gl_shader_compile (shader, &error);
-    if (error) {
-      gst_gl_context_set_error (shader->context, "%s", error->message);
-      g_error_free (error);
-      gst_gl_context_clear_shader (shader->context);
-
-      return FALSE;
-    }
-  }
-  return TRUE;
-}
-
-gboolean
-gst_gl_shader_compile_all_with_attribs_and_check (GstGLShader * shader,
-    const gchar * v_src, const gchar * f_src, const gint n_attribs,
-    const gchar * attrib_names[], GLint attrib_locs[])
-{
-  gint i = 0;
-  GError *error = NULL;
-
-  gst_gl_shader_set_vertex_source (shader, v_src);
-  gst_gl_shader_set_fragment_source (shader, f_src);
-
-  gst_gl_shader_compile (shader, &error);
-  if (error) {
-    gst_gl_context_set_error (shader->context, "%s", error->message);
-    g_error_free (error);
-    gst_gl_context_clear_shader (shader->context);
-
-    return FALSE;
-  }
-
-  for (i = 0; i < n_attribs; i++)
-    attrib_locs[i] =
-        gst_gl_shader_get_attribute_location (shader, attrib_names[i]);
-
-  return TRUE;
-}
-
-gboolean
-gst_gl_shader_compile_with_default_f_and_check (GstGLShader * shader,
-    const gchar * v_src, const gint n_attribs, const gchar * attrib_names[],
-    GLint attrib_locs[])
-{
-  return gst_gl_shader_compile_all_with_attribs_and_check (shader, v_src,
-      simple_fragment_shader_str_gles2, n_attribs, attrib_names, attrib_locs);
-}
-
-gboolean
-gst_gl_shader_compile_with_default_v_and_check (GstGLShader * shader,
-    const gchar * f_src, GLint * pos_loc, GLint * tex_loc)
-{
-  const gchar *attrib_names[2] = { "a_position", "a_texcoord" };
-  GLint attrib_locs[2] = { 0 };
-  gboolean ret = TRUE;
-
-  ret = gst_gl_shader_compile_all_with_attribs_and_check (shader,
-      simple_vertex_shader_str_gles2, f_src, 2, attrib_names, attrib_locs);
-
-  if (ret) {
-    *pos_loc = attrib_locs[0];
-    *tex_loc = attrib_locs[1];
-  }
-
-  return ret;
-}
-
-gboolean
-gst_gl_shader_compile_with_default_vf_and_check (GstGLShader * shader,
-    GLint * pos_loc, GLint * tex_loc)
-{
-  return gst_gl_shader_compile_with_default_v_and_check (shader,
-      simple_fragment_shader_str_gles2, pos_loc, tex_loc);
-}
-
 void
 gst_gl_shader_set_uniform_1f (GstGLShader * shader, const gchar * name,
     gfloat value)
@@ -789,7 +829,7 @@
   g_return_if_fail (priv->program_handle != 0);
   gl = shader->context->gl_vtable;
 
-  location = gl->GetUniformLocation (priv->program_handle, name);
+  location = _get_uniform_location (shader, name);
 
   gl->Uniform1f (location, value);
 }
@@ -807,7 +847,7 @@
   g_return_if_fail (priv->program_handle != 0);
   gl = shader->context->gl_vtable;
 
-  location = gl->GetUniformLocation (priv->program_handle, name);
+  location = _get_uniform_location (shader, name);
 
   gl->Uniform1fv (location, count, value);
 }
@@ -825,7 +865,7 @@
   g_return_if_fail (priv->program_handle != 0);
   gl = shader->context->gl_vtable;
 
-  location = gl->GetUniformLocation (priv->program_handle, name);
+  location = _get_uniform_location (shader, name);
 
   gl->Uniform1i (location, value);
 }
@@ -843,7 +883,7 @@
   g_return_if_fail (priv->program_handle != 0);
   gl = shader->context->gl_vtable;
 
-  location = gl->GetUniformLocation (priv->program_handle, name);
+  location = _get_uniform_location (shader, name);
 
   gl->Uniform1iv (location, count, value);
 }
@@ -861,7 +901,7 @@
   g_return_if_fail (priv->program_handle != 0);
   gl = shader->context->gl_vtable;
 
-  location = gl->GetUniformLocation (priv->program_handle, name);
+  location = _get_uniform_location (shader, name);
 
   gl->Uniform2f (location, value0, value1);
 }
@@ -879,7 +919,7 @@
   g_return_if_fail (priv->program_handle != 0);
   gl = shader->context->gl_vtable;
 
-  location = gl->GetUniformLocation (priv->program_handle, name);
+  location = _get_uniform_location (shader, name);
 
   gl->Uniform2fv (location, count, value);
 }
@@ -897,7 +937,7 @@
   g_return_if_fail (priv->program_handle != 0);
   gl = shader->context->gl_vtable;
 
-  location = gl->GetUniformLocation (priv->program_handle, name);
+  location = _get_uniform_location (shader, name);
 
   gl->Uniform2i (location, v0, v1);
 }
@@ -915,7 +955,7 @@
   g_return_if_fail (priv->program_handle != 0);
   gl = shader->context->gl_vtable;
 
-  location = gl->GetUniformLocation (priv->program_handle, name);
+  location = _get_uniform_location (shader, name);
 
   gl->Uniform2iv (location, count, value);
 }
@@ -933,7 +973,7 @@
   g_return_if_fail (priv->program_handle != 0);
   gl = shader->context->gl_vtable;
 
-  location = gl->GetUniformLocation (priv->program_handle, name);
+  location = _get_uniform_location (shader, name);
 
   gl->Uniform3f (location, v0, v1, v2);
 }
@@ -951,7 +991,7 @@
   g_return_if_fail (priv->program_handle != 0);
   gl = shader->context->gl_vtable;
 
-  location = gl->GetUniformLocation (priv->program_handle, name);
+  location = _get_uniform_location (shader, name);
 
   gl->Uniform3fv (location, count, value);
 }
@@ -969,7 +1009,7 @@
   g_return_if_fail (priv->program_handle != 0);
   gl = shader->context->gl_vtable;
 
-  location = gl->GetUniformLocation (priv->program_handle, name);
+  location = _get_uniform_location (shader, name);
 
   gl->Uniform3i (location, v0, v1, v2);
 }
@@ -987,7 +1027,7 @@
   g_return_if_fail (priv->program_handle != 0);
   gl = shader->context->gl_vtable;
 
-  location = gl->GetUniformLocation (priv->program_handle, name);
+  location = _get_uniform_location (shader, name);
 
   gl->Uniform3iv (location, count, value);
 }
@@ -1005,7 +1045,7 @@
   g_return_if_fail (priv->program_handle != 0);
   gl = shader->context->gl_vtable;
 
-  location = gl->GetUniformLocation (priv->program_handle, name);
+  location = _get_uniform_location (shader, name);
 
   gl->Uniform4f (location, v0, v1, v2, v3);
 }
@@ -1023,7 +1063,7 @@
   g_return_if_fail (priv->program_handle != 0);
   gl = shader->context->gl_vtable;
 
-  location = gl->GetUniformLocation (priv->program_handle, name);
+  location = _get_uniform_location (shader, name);
 
   gl->Uniform4fv (location, count, value);
 }
@@ -1041,7 +1081,7 @@
   g_return_if_fail (priv->program_handle != 0);
   gl = shader->context->gl_vtable;
 
-  location = gl->GetUniformLocation (priv->program_handle, name);
+  location = _get_uniform_location (shader, name);
 
   gl->Uniform4i (location, v0, v1, v2, v3);
 }
@@ -1059,7 +1099,7 @@
   g_return_if_fail (priv->program_handle != 0);
   gl = shader->context->gl_vtable;
 
-  location = gl->GetUniformLocation (priv->program_handle, name);
+  location = _get_uniform_location (shader, name);
 
   gl->Uniform4iv (location, count, value);
 }
@@ -1077,7 +1117,7 @@
   g_return_if_fail (priv->program_handle != 0);
   gl = shader->context->gl_vtable;
 
-  location = gl->GetUniformLocation (priv->program_handle, name);
+  location = _get_uniform_location (shader, name);
 
   gl->UniformMatrix2fv (location, count, transpose, value);
 }
@@ -1095,7 +1135,7 @@
   g_return_if_fail (priv->program_handle != 0);
   gl = shader->context->gl_vtable;
 
-  location = gl->GetUniformLocation (priv->program_handle, name);
+  location = _get_uniform_location (shader, name);
 
   gl->UniformMatrix3fv (location, count, transpose, value);
 }
@@ -1113,7 +1153,7 @@
   g_return_if_fail (priv->program_handle != 0);
   gl = shader->context->gl_vtable;
 
-  location = gl->GetUniformLocation (priv->program_handle, name);
+  location = _get_uniform_location (shader, name);
 
   gl->UniformMatrix4fv (location, count, transpose, value);
 }
@@ -1132,7 +1172,7 @@
   g_return_if_fail (priv->program_handle != 0);
   gl = shader->context->gl_vtable;
 
-  location = gl->GetUniformLocation (priv->program_handle, name);
+  location = _get_uniform_location (shader, name);
 
   gl->UniformMatrix2x3fv (location, count, transpose, value);
 }
@@ -1150,7 +1190,7 @@
   g_return_if_fail (priv->program_handle != 0);
   gl = shader->context->gl_vtable;
 
-  location = gl->GetUniformLocation (priv->program_handle, name);
+  location = _get_uniform_location (shader, name);
 
   gl->UniformMatrix2x4fv (location, count, transpose, value);
 }
@@ -1168,7 +1208,7 @@
   g_return_if_fail (priv->program_handle != 0);
   gl = shader->context->gl_vtable;
 
-  location = gl->GetUniformLocation (priv->program_handle, name);
+  location = _get_uniform_location (shader, name);
 
   gl->UniformMatrix3x2fv (location, count, transpose, value);
 }
@@ -1186,7 +1226,7 @@
   g_return_if_fail (priv->program_handle != 0);
   gl = shader->context->gl_vtable;
 
-  location = gl->GetUniformLocation (priv->program_handle, name);
+  location = _get_uniform_location (shader, name);
 
   gl->UniformMatrix3x4fv (location, count, transpose, value);
 }
@@ -1204,7 +1244,7 @@
   g_return_if_fail (priv->program_handle != 0);
   gl = shader->context->gl_vtable;
 
-  location = gl->GetUniformLocation (priv->program_handle, name);
+  location = _get_uniform_location (shader, name);
 
   gl->UniformMatrix4x2fv (location, count, transpose, value);
 }
@@ -1222,7 +1262,7 @@
   g_return_if_fail (priv->program_handle != 0);
   gl = shader->context->gl_vtable;
 
-  location = gl->GetUniformLocation (priv->program_handle, name);
+  location = _get_uniform_location (shader, name);
 
   gl->UniformMatrix4x3fv (location, count, transpose, value);
 }
@@ -1233,16 +1273,20 @@
 {
   GstGLShaderPrivate *priv;
   GstGLFuncs *gl;
+  gint ret;
 
   g_return_val_if_fail (shader != NULL, -1);
   priv = shader->priv;
   g_return_val_if_fail (priv->program_handle != 0, -1);
-  if (0 == priv->vertex_handle)
-    return -1;
 
   gl = shader->context->gl_vtable;
 
-  return gl->GetAttribLocation (priv->program_handle, name);
+  ret = gl->GetAttribLocation (priv->program_handle, name);
+
+  GST_TRACE_OBJECT (shader, "retreived program %i attribute \'%s\' location %i",
+      (int) priv->program_handle, name, ret);
+
+  return ret;
 }
 
 void
@@ -1257,11 +1301,8 @@
   g_return_if_fail (priv->program_handle != 0);
   gl = shader->context->gl_vtable;
 
-  gl->BindAttribLocation (priv->program_handle, index, name);
-}
+  GST_TRACE_OBJECT (shader, "binding program %i attribute \'%s\' location %i",
+      (int) priv->program_handle, name, index);
 
-GQuark
-gst_gl_shader_error_quark (void)
-{
-  return g_quark_from_static_string ("gst-gl-shader-error");
+  gl->BindAttribLocation (priv->program_handle, index, name);
 }
diff --git a/gst-libs/gst/gl/gstglshader.h b/gst-libs/gst/gl/gstglshader.h
index 97f98fc..21410e2 100644
--- a/gst-libs/gst/gl/gstglshader.h
+++ b/gst-libs/gst/gl/gstglshader.h
@@ -26,26 +26,14 @@
 
 G_BEGIN_DECLS
 
+GType gst_gl_shader_get_type (void);
 #define GST_GL_TYPE_SHADER         (gst_gl_shader_get_type())
 #define GST_GL_SHADER(o)           (G_TYPE_CHECK_INSTANCE_CAST((o), GST_GL_TYPE_SHADER, GstGLShader))
 #define GST_GL_SHADER_CLASS(k)     (G_TYPE_CHECK_CLASS((k), GST_GL_TYPE_SHADER, GstGLShaderClass))
-#define GST_GL_IS_SHADER(o)        (G_TYPE_CHECK_INSTANCE_TYPE((o), GST_GL_TYPE_SHADER))
-#define GST_GL_IS_SHADER_CLASS(k)  (G_TYPE_CHECK_CLASS_TYPE((k), GST_GL_TYPE_SHADER))
+#define GST_IS_GL_SHADER(o)        (G_TYPE_CHECK_INSTANCE_TYPE((o), GST_GL_TYPE_SHADER))
+#define GST_IS_GL_SHADER_CLASS(k)  (G_TYPE_CHECK_CLASS_TYPE((k), GST_GL_TYPE_SHADER))
 #define GST_GL_SHADER_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS((o), GST_GL_TYPE_SHADER, GstGLShaderClass))
 
-#define GST_GL_SHADER_ERROR (gst_gl_shader_error_quark ())
-
-typedef enum {
-  GST_GL_SHADER_ERROR_COMPILE,
-  GST_GL_SHADER_ERROR_LINK,
-  GST_GL_SHADER_ERROR_PROGRAM
-} GstGLShaderError;
-
-typedef enum {
-  GST_GL_SHADER_FRAGMENT_SOURCE,
-  GST_GL_SHADER_VERTEX_SOURCE
-} GstGLShaderSourceType;
-
 struct _GstGLShader {
   /*< private >*/
   GstObject parent;
@@ -53,6 +41,8 @@
   GstGLContext *context;
 
   GstGLShaderPrivate *priv;
+
+  gpointer _padding[GST_PADDING];
 };
 
 struct _GstGLShaderClass {
@@ -60,33 +50,29 @@
   GstObjectClass parent_class;
 };
 
-/* methods */
+GstGLShader * gst_gl_shader_new                     (GstGLContext *context);
+GstGLShader * gst_gl_shader_new_with_stages         (GstGLContext * context, GError ** error, ...);
+GstGLShader * gst_gl_shader_new_link_with_stages    (GstGLContext * context, GError ** error, ...);
+GstGLShader * gst_gl_shader_new_default             (GstGLContext * context, GError ** error);
 
-GQuark gst_gl_shader_error_quark (void);
-GType gst_gl_shader_get_type (void);
+gboolean gst_gl_shader_attach                       (GstGLShader * shader, GstGLSLStage * stage);
+gboolean gst_gl_shader_attach_unlocked              (GstGLShader * shader, GstGLSLStage * stage);
 
-GstGLShader * gst_gl_shader_new (GstGLContext *context);
+void     gst_gl_shader_detach                       (GstGLShader * shader, GstGLSLStage * stage);
+void     gst_gl_shader_detach_unlocked              (GstGLShader * shader, GstGLSLStage * stage);
 
-int gst_gl_shader_get_program_handle(GstGLShader * shader);
+gboolean gst_gl_shader_compile_attach_stage         (GstGLShader * shader,
+                                                     GstGLSLStage *stage,
+                                                     GError ** error);
+gboolean gst_gl_shader_link                         (GstGLShader * shader, GError ** error);
+gboolean gst_gl_shader_is_linked                    (GstGLShader *shader);
 
-void          gst_gl_shader_set_vertex_source   (GstGLShader *shader, const gchar *src);
-void          gst_gl_shader_set_fragment_source (GstGLShader *shader, const gchar *src);
-const gchar * gst_gl_shader_get_vertex_source   (GstGLShader *shader);
-const gchar * gst_gl_shader_get_fragment_source (GstGLShader *shader);
+int gst_gl_shader_get_program_handle                (GstGLShader * shader);
 
-void     gst_gl_shader_set_active        (GstGLShader *shader, gboolean active);
-gboolean gst_gl_shader_is_compiled       (GstGLShader *shader);
-gboolean gst_gl_shader_compile           (GstGLShader *shader, GError **error);
-gboolean gst_gl_shader_compile_and_check (GstGLShader *shader, const gchar *source, GstGLShaderSourceType type);
-gboolean gst_gl_shader_compile_all_with_attribs_and_check (GstGLShader *shader, const gchar *v_src, const gchar *f_src, const gint n_attribs, const gchar *attrib_names[], GLint attrib_locs[]);
-
-gboolean gst_gl_shader_compile_with_default_f_and_check   (GstGLShader *shader, const gchar *v_src, const gint n_attribs, const gchar *attrib_names[], GLint attrib_locs[]);
-gboolean gst_gl_shader_compile_with_default_v_and_check   (GstGLShader *shader, const gchar *f_src, GLint *pos_loc, GLint *tex_loc);
-gboolean gst_gl_shader_compile_with_default_vf_and_check  (GstGLShader *shader, GLint *pos_loc, GLint *tex_loc);
-
-void gst_gl_shader_release       (GstGLShader *shader);
-void gst_gl_shader_use           (GstGLShader *shader);
-void gst_gl_context_clear_shader (GstGLContext *context);
+void gst_gl_shader_release                          (GstGLShader *shader);
+void gst_gl_shader_release_unlocked                 (GstGLShader * shader);
+void gst_gl_shader_use                              (GstGLShader *shader);
+void gst_gl_context_clear_shader                    (GstGLContext *context);
 
 void gst_gl_shader_set_uniform_1i           (GstGLShader *shader, const gchar *name, gint value);
 void gst_gl_shader_set_uniform_1iv          (GstGLShader *shader, const gchar *name, guint count, gint *value);
diff --git a/gst-libs/gst/gl/gstglshaderstrings.c b/gst-libs/gst/gl/gstglshaderstrings.c
new file mode 100644
index 0000000..729be6f
--- /dev/null
+++ b/gst-libs/gst/gl/gstglshaderstrings.c
@@ -0,0 +1,71 @@
+/*
+ * GStreamer
+ * Copyright (C) 2015 Matthew Waters <matthew@centricular.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include "gstglshaderstrings.h"
+
+/* *INDENT-OFF* */
+const gchar *gst_gl_shader_string_vertex_default =
+    "attribute vec4 a_position;\n"
+    "attribute vec2 a_texcoord;\n"
+    "varying vec2 v_texcoord;\n"
+    "void main()\n"
+    "{\n"
+    "   gl_Position = a_position;\n"
+    "   v_texcoord = a_texcoord;\n"
+    "}\n";
+
+const gchar *gst_gl_shader_string_vertex_mat4_texture_transform =
+    "uniform mat4 u_transformation;\n"
+    "attribute vec4 a_position;\n"
+    "attribute vec2 a_texcoord;\n"
+    "varying vec2 v_texcoord;\n"
+    "void main()\n"
+    "{\n"
+    "   gl_Position = a_position;\n"
+    "   v_texcoord = (u_transformation * vec4(a_texcoord, 0, 1)).xy;\n"
+    "}\n";
+
+const gchar *gst_gl_shader_string_fragment_default =
+    "#ifdef GL_ES\n"
+    "precision mediump float;\n"
+    "#endif\n"
+    "varying vec2 v_texcoord;\n"
+    "uniform sampler2D tex;\n"
+    "void main()\n"
+    "{\n"
+    "  gl_FragColor = texture2D(tex, v_texcoord);\n"
+    "}";
+
+const gchar *gst_gl_shader_string_fragment_external_oes_default =
+    "#extension GL_OES_EGL_image_external : require\n"
+    "#ifdef GL_ES\n"
+    "precision mediump float;\n"
+    "#endif\n"
+    "varying vec2 v_texcoord;\n"
+    "uniform samplerExternalOES tex;\n"
+    "void main()\n"
+    "{\n"
+    "  gl_FragColor = texture2D(tex, v_texcoord);\n"
+    "}";
+/* *INDENT-ON* */
diff --git a/gst-libs/gst/gl/gstglshaderstrings.h b/gst-libs/gst/gl/gstglshaderstrings.h
new file mode 100644
index 0000000..49ea8de
--- /dev/null
+++ b/gst-libs/gst/gl/gstglshaderstrings.h
@@ -0,0 +1,36 @@
+/*
+ * GStreamer
+ * Copyright (C) 2015 Matthew Waters <matthew@centricular.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifndef __GST_GL_SHADER_STRINGS_H__
+#define __GST_GL_SHADER_STRINGS_H__
+
+#include <gst/gl/gl.h>
+
+G_BEGIN_DECLS
+
+extern const gchar *gst_gl_shader_string_vertex_default;
+extern const gchar *gst_gl_shader_string_fragment_default;
+
+extern const gchar *gst_gl_shader_string_vertex_mat4_texture_transform;
+extern const gchar *gst_gl_shader_string_fragment_external_oes_default;
+
+G_END_DECLS
+
+#endif /* __GST_GL_SHADER_STRINGS_H__ */
diff --git a/gst-libs/gst/gl/gstglshadervariables.c b/gst-libs/gst/gl/gstglshadervariables.c
deleted file mode 100644
index be04c94..0000000
--- a/gst-libs/gst/gl/gstglshadervariables.c
+++ /dev/null
@@ -1,1488 +0,0 @@
-/*
- * GStreamer
- * Copyright (C) 2009 Luc Deschenaux <luc.deschenaux@freesurf.ch>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "gstglshadervariables.h"
-
-#if !defined(strtok_r) && defined(G_OS_WIN32)
-#if defined(_MSC_VER)
-#define strtok_r strtok_s
-#else
-#define strtok_r(s,d,p) strtok(s,d)
-#endif
-#endif
-
-#define trimleft(s,chars) while(s[0] && strchr(chars,s[0])) ++s;
-#define trimright(s,chars) { \
-	char *end; \
-	end=s+strlen(s)-1; \
-	while(end>=s && strchr(chars,end[0])) (end--)[0]=0; \
-}
-
-const char *gst_gl_shadervariable_datatype[] = {
-  "bool",
-  "int",
-  "uint",
-  "float",
-  "vec2",
-  "vec3",
-  "vec4",
-  "bvec2",
-  "bvec3",
-  "bvec4",
-  "ivec2",
-  "ivec3",
-  "ivec4",
-  "uvec2",
-  "uvec3",
-  "uvec4",
-  "mat2",
-  "mat3",
-  "mat4",
-  "mat2x2",
-  "mat2x3",
-  "mat2x4",
-  "mat3x2",
-  "mat3x3",
-  "mat3x4",
-  "mat4x2",
-  "mat4x3",
-  "mat4x4",
-  0
-};
-
-typedef enum
-{
-  _bool,
-  _int,
-  _uint,
-  _float,
-  _vec2,
-  _vec3,
-  _vec4,
-  _bvec2,
-  _bvec3,
-  _bvec4,
-  _ivec2,
-  _ivec3,
-  _ivec4,
-  _uvec2,
-  _uvec3,
-  _uvec4,
-  _mat2,
-  _mat3,
-  _mat4,
-  _mat2x2,
-  _mat2x3,
-  _mat2x4,
-  _mat3x2,
-  _mat3x3,
-  _mat3x4,
-  _mat4x2,
-  _mat4x3,
-  _mat4x4,
-  _datatypecount
-} gst_gl_shadervariable_datatypeindex;
-
-typedef struct gst_gl_shadervariable_desc
-{
-  gst_gl_shadervariable_datatypeindex type;
-  char *name;
-  int arraysize;
-  int count;
-  void *value;
-
-} gst_gl_shadervariable_desc;
-
-char *parsename (char **varname, int *arraysize, char **saveptr);
-char *parsevalue (char *value, char *_saveptr,
-    struct gst_gl_shadervariable_desc *ret);
-char *vec_parsevalue (int n, char *value, char *_saveptr,
-    struct gst_gl_shadervariable_desc *ret);
-char *bvec_parsevalue (int n, char *value, char *_saveptr,
-    struct gst_gl_shadervariable_desc *ret);
-char *ivec_parsevalue (int n, char *value, char *_saveptr,
-    struct gst_gl_shadervariable_desc *ret);
-char *uvec_parsevalue (int n, char *value, char *_saveptr,
-    struct gst_gl_shadervariable_desc *ret);
-char *mat_parsevalue (int n, int m, char *value, char *_saveptr,
-    struct gst_gl_shadervariable_desc *ret);
-
-/*
-	Function:
-		gst_gl_shadervariables_parse
-
-	Description:
-		Parse uniform variables declarations and set their values in
-		the specified shader.
-
-	Arguments:
-
-		GstGLShader *shader:
-			Shader in which variables are to be set.
-
-		char *variables:
-			The text to be parsed.
-
-		int (*_setvariable)():
-			Defaults to gst_gl_shadervariable_set().
-			You can specify here a user function for managing the
-			parsed variable description.
-
-	return values:
-		 0: 	No error.
-		-1:	Error.
-
-*/
-
-int
-gst_gl_shadervariables_parse (GstGLShader * shader, char *variables,
-    int (*_setvariable) (GstGLShader * shader,
-        struct gst_gl_shadervariable_desc * v))
-{
-  char *p = 0;
-  char *p0;
-  char *e;
-  char e1 = 0;
-  char *t = 0;
-  char *varname;
-  char *vartype;
-  char *varvalue;
-  int arraysize = 0;
-  char *saveptr = variables;
-  int line = 1;
-  char *lim;
-  int i;
-  int len;
-  struct gst_gl_shadervariable_desc ret;
-
-  if (!_setvariable) {
-    _setvariable = gst_gl_shadervariable_set;
-  }
-
-  if (!variables)
-    return 0;
-
-  p0 = variables;
-  trimright (p0, " \t\r\n");
-  lim = variables + strlen (variables);
-  e = strchr (p0, ';');
-  while (p0 < lim) {
-
-    if (!e) {
-      if (p0[0])
-        goto parse_error;
-      break;
-    }
-
-    e1 = e[1];
-    e[1] = 0;
-    p = g_strdup (p0);
-    e[1] = e1;
-
-    trimright (p, " \t");
-    trimleft (p, " \t\r\n");
-
-    t = strtok_r (p, " \t", &saveptr);
-    if (!t)
-      goto parse_error;
-    trimleft (t, " \t");
-    trimright (t, " \t\r\n");
-
-    if (t[0]) {
-
-      if (!strcmp (t, "const")) {
-        t = strtok_r (0, " \t", &saveptr);
-        if (!t)
-          goto parse_error;
-        trimleft (t, " \t");
-        if (!t[0])
-          goto parse_error;
-      }
-      // parse data type
-      for (i = 0; i < _datatypecount; ++i) {
-        if (!strcmp (t, gst_gl_shadervariable_datatype[i])) {
-          ret.type = (gst_gl_shadervariable_datatypeindex) i;
-          break;
-        }
-      }
-      if (i == _datatypecount)
-        goto parse_error;
-
-      vartype = g_strdup (t);
-      GST_INFO ("vartype : '%s'\n", vartype);
-
-      trimleft (saveptr, " \t");
-      t = saveptr;
-      if (*saveptr == '=')
-        goto parse_error;
-
-      // parse variable name and array size
-      t = parsename (&varname, &arraysize, &saveptr);
-      if (t)
-        goto parse_error;
-
-      trimright (varname, " \t");
-      GST_INFO ("varname : '%s'\n", varname);
-      GST_INFO ("arraysize : %d\n", arraysize);
-
-      // check type cast after assignement operator
-      t = strtok_r (0, "(", &saveptr);
-      if (!t)
-        goto parse_error;
-      trimleft (t, " \t");
-      trimright (t, " \t");
-
-      if (arraysize) {
-        gchar *s = g_strdup_printf ("%s[%d]", vartype, arraysize);
-        if (strcmp (t, s)) {
-          g_free (s);
-          goto parse_error;
-        }
-        g_free (s);
-      } else {
-        if (strcmp (t, vartype))
-          goto parse_error;
-      }
-
-      // extract variable value
-      t = strtok_r (0, ";", &saveptr);
-      if (!t)
-        goto parse_error;
-      trimleft (t, " \t");
-      trimright (t, " \t");
-
-      if (!t[0])
-        goto parse_error;
-      if (*(saveptr - 2) != ')')
-        goto parse_error;
-      *(saveptr - 2) = 0;
-      if (!t[0])
-        goto parse_error;
-
-      varvalue = g_strdup (t);
-      GST_INFO ("value: %s\n\n", varvalue);
-
-      t = saveptr;
-      if (t[0])
-        goto parse_error;
-
-      // parse variable value
-      len = strlen (varvalue);
-      ret.name = varname;
-      ret.arraysize = arraysize;
-      t = parsevalue (varvalue, saveptr, &ret);
-      if (t) {
-        t -= len;
-        goto parse_error;
-      }
-      // set variable value
-      _setvariable (shader, &ret);
-
-      fflush (0);
-    }
-    // Tell me why we cannot free(p) whithout segfault.
-    //g_free(p);
-    p0 = e + 1;
-    ++line;
-    e = strchr (p0, ';');
-  }
-
-  return 0;
-
-parse_error:
-  if (!t) {
-    t = saveptr;
-  }
-  if (!e) {
-    t = p = p0;
-  } else {
-    e[1] = 0;
-    trimleft (p0, " \t\r\n");
-    GST_ERROR ("\n%s", p0);
-    e[1] = e1;
-  }
-  GST_ERROR ("parse error on line %d, position %ld (%s)", line, (glong) (t - p),
-      t);
-  return -1;
-}
-
-/*
-	Function:
-		parsename
-
-	Description:
-		Parse text between the data type and the assignement operator
-		(ie: variable name and array size).
-
-	Arguments:
-
-		char **varname:
-			Text to parse.
-
-		int *arraysize:
-			Pointer to array size. Set to 0 if no array.
-
-		char **saveptr:
-			Address of char *saveptr for strtok_r()
-
-	return values:
-		 0: 	No error.
-		!0:	Pointer to parse error.
-
-*/
-
-char *
-parsename (char **varname, int *arraysize, char **saveptr)
-{
-  char *t;
-  char *i;
-  gint j;
-
-  *arraysize = 0;
-  t = strtok_r (0, "=", saveptr);
-  if (!t)
-    return *saveptr;
-
-  trimleft (t, " \t");
-  trimright (t, " \t");
-
-  i = strchr (t, '[');
-  if (!i) {                     // not an array
-    if (!t[0])
-      return t;
-    for (j = 0; j < (gint) strlen (t); ++j) {
-      if (!strchr (VALID_VARNAME_CHARS, t[j]))
-        return t + j;
-    }
-    *varname = g_strdup (t);
-  } else {                      // is an array
-
-    char *i2;
-    char *c;
-
-    i2 = strchr (i + 1, ']');
-    if (!i2)
-      return i + 1;
-    *i = 0;
-
-    if (!t[0])
-      return t;
-    for (j = 0; j < (gint) strlen (t); ++j) {
-      if (!strchr (VALID_VARNAME_CHARS, t[j]))
-        return t;
-    }
-
-    *varname = g_strdup (t);
-    *i = '[';
-
-    for (c = i + 1; c < i2; ++c)
-      if (*c < '0' || *c > '9')
-        return c;
-
-    *i2 = 0;
-    *arraysize = atoi (i + 1);
-    *i2 = ']';
-
-    if (!*arraysize)
-      return i + 1;
-  }
-
-  return 0;
-}
-
-/*
-	Function:
-		gst_gl_shadervariable_set
-
-	Description:
-		Set variable value in the specified shader
-
-	Arguments:
-
-		GstGlShader *shader:
-			The shader where to set the variable.
-
-		struct gst_gl_shadervariable_desc *ret:
-			The variable description.
-
-	return values:
-		 0: 	No error.
-		!0:	Variable type unknown/incorrect.
-
-*/
-
-int
-gst_gl_shadervariable_set (GstGLShader * shader,
-    struct gst_gl_shadervariable_desc *ret)
-{
-
-  switch (ret->type) {
-    case _bool:
-      if (ret->arraysize) {
-        gst_gl_shader_set_uniform_1iv (shader, ret->name, ret->count,
-            (int *) ret->value);
-      } else {
-        gst_gl_shader_set_uniform_1i (shader, ret->name,
-            ((int *) ret->value)[0]);
-      }
-      break;
-    case _int:
-      if (ret->arraysize) {
-        gst_gl_shader_set_uniform_1iv (shader, ret->name, ret->count,
-            (int *) ret->value);
-      } else {
-        gst_gl_shader_set_uniform_1i (shader, ret->name,
-            ((int *) ret->value)[0]);
-      }
-      break;
-
-    case _uint:
-      if (ret->arraysize) {
-        gst_gl_shader_set_uniform_1iv (shader, ret->name, ret->count,
-            (int *) ret->value);
-      } else {
-        gst_gl_shader_set_uniform_1i (shader, ret->name,
-            ((unsigned int *) ret->value)[0]);
-      }
-      break;
-
-    case _float:
-      if (ret->arraysize) {
-        gst_gl_shader_set_uniform_1fv (shader, ret->name, ret->count,
-            (float *) ret->value);
-      } else {
-        gst_gl_shader_set_uniform_1f (shader, ret->name,
-            ((float *) ret->value)[0]);
-      }
-      break;
-
-    case _vec2:
-      if (ret->arraysize) {
-        gst_gl_shader_set_uniform_2fv (shader, ret->name, ret->count,
-            (float *) ret->value);
-      } else {
-        gst_gl_shader_set_uniform_2f (shader, ret->name,
-            ((float *) ret->value)[0], ((float *) ret->value)[1]);
-      }
-      break;
-
-    case _bvec2:
-    case _ivec2:
-    case _uvec2:
-      if (ret->arraysize) {
-        gst_gl_shader_set_uniform_2iv (shader, ret->name, ret->count,
-            (int *) ret->value);
-      } else {
-        gst_gl_shader_set_uniform_2i (shader, ret->name,
-            ((int *) ret->value)[0], ((int *) ret->value)[1]);
-      }
-      break;
-
-    case _vec3:
-      if (ret->arraysize) {
-        gst_gl_shader_set_uniform_3fv (shader, ret->name, ret->count,
-            (float *) ret->value);
-      } else {
-        gst_gl_shader_set_uniform_3f (shader, ret->name,
-            ((float *) ret->value)[0], ((float *) ret->value)[1],
-            ((float *) ret->value)[2]);
-      }
-      break;
-
-    case _bvec3:
-    case _ivec3:
-    case _uvec3:
-      if (ret->arraysize) {
-        gst_gl_shader_set_uniform_3iv (shader, ret->name, ret->count,
-            (int *) ret->value);
-      } else {
-        gst_gl_shader_set_uniform_3i (shader, ret->name,
-            ((int *) ret->value)[0], ((int *) ret->value)[1],
-            ((int *) ret->value)[2]);
-      }
-      break;
-
-    case _vec4:
-      if (ret->arraysize) {
-        gst_gl_shader_set_uniform_4fv (shader, ret->name, ret->count,
-            (float *) ret->value);
-      } else {
-        gst_gl_shader_set_uniform_4f (shader, ret->name,
-            ((float *) ret->value)[0], ((float *) ret->value)[1],
-            ((float *) ret->value)[2], ((float *) ret->value)[3]);
-      }
-      break;
-
-    case _bvec4:
-    case _ivec4:
-    case _uvec4:
-      if (ret->arraysize) {
-        gst_gl_shader_set_uniform_4iv (shader, ret->name, ret->count,
-            (int *) ret->value);
-      } else {
-        gst_gl_shader_set_uniform_4i (shader, ret->name,
-            ((int *) ret->value)[0], ((int *) ret->value)[1],
-            ((int *) ret->value)[2], ((int *) ret->value)[3]);
-      }
-      break;
-
-    case _mat2:
-    case _mat2x2:
-      gst_gl_shader_set_uniform_matrix_2fv (shader, ret->name, ret->count, 0,
-          (float *) ret->value);
-      break;
-
-    case _mat3:
-    case _mat3x3:
-      gst_gl_shader_set_uniform_matrix_3fv (shader, ret->name, ret->count, 0,
-          (float *) ret->value);
-      break;
-
-    case _mat4:
-    case _mat4x4:
-      gst_gl_shader_set_uniform_matrix_4fv (shader, ret->name, ret->count, 0,
-          (float *) ret->value);
-      break;
-
-#if GST_GL_HAVE_OPENGL
-    case _mat2x3:
-      gst_gl_shader_set_uniform_matrix_2x3fv (shader, ret->name, ret->count, 0,
-          (float *) ret->value);
-      break;
-
-    case _mat3x2:
-      gst_gl_shader_set_uniform_matrix_3x2fv (shader, ret->name, ret->count, 0,
-          (float *) ret->value);
-      break;
-
-    case _mat2x4:
-      gst_gl_shader_set_uniform_matrix_2x4fv (shader, ret->name, ret->count, 0,
-          (float *) ret->value);
-      break;
-
-    case _mat4x2:
-      gst_gl_shader_set_uniform_matrix_4x2fv (shader, ret->name, ret->count, 0,
-          (float *) ret->value);
-      break;
-
-    case _mat3x4:
-      gst_gl_shader_set_uniform_matrix_3x4fv (shader, ret->name, ret->count, 0,
-          (float *) ret->value);
-      break;
-
-    case _mat4x3:
-      gst_gl_shader_set_uniform_matrix_4x3fv (shader, ret->name, ret->count, 0,
-          (float *) ret->value);
-      break;
-#endif
-
-    default:
-      return -1;
-  }
-  return 0;
-}
-
-/*
-	Function:
-		parsevalue
-
-	Description:
-		Parse text coming after the assignement operator for scalar
-		variables or call the appropriate subroutine to parse vector
-		variables.
-
-	Arguments:
-
-		char *value:
-			Text to be parsed.
-
-		char *_saveptr:
-			Index of end of value.
-
-		struct gst_gl_shadervariable_desc *ret:
-			The variable description to be completed
-			At input time it contains the data type index (type),
-			variable name (name) and array size (arraysize).
-
-	return values:
-		 0: 	No error.
-		!0:	Pointer to parse error.
-
-*/
-
-char *
-parsevalue (char *value, char *_saveptr, struct gst_gl_shadervariable_desc *ret)
-{
-
-  int i, j;
-  char *t;
-  char *saveptr = value;
-
-  switch (ret->type) {
-    case _bool:
-      ret->count = (ret->arraysize) ? ret->arraysize : 1;
-      if (ret->count == 1) {    // no array
-        if (strcmp (value, "true") && strcmp (value, "false"))
-          return _saveptr;
-        ret->value = (void *) g_malloc (sizeof (int));
-        ((int *) ret->value)[0] = strcmp (value, "false");
-
-      } else {                  // array
-        ret->value = g_malloc (sizeof (int *) * ret->count);
-        t = strtok_r (value, ",", &saveptr);
-        for (i = 0; i < ret->count; ++i) {
-          if (!t)
-            return _saveptr + (saveptr - value);
-          trimleft (t, " \t");
-          trimright (t, " \t");
-          if (strcmp (t, "true") && strcmp (t, "false"))
-            return _saveptr + (saveptr - t);
-          ((int *) ret->value)[i] = strcmp (t, "false");
-          t = strtok_r (0, ",", &saveptr);
-        }
-      }
-      break;
-    case _int:
-      ret->count = (ret->arraysize) ? ret->arraysize : 1;
-      if (ret->count == 1) {
-        for (j = 0; j < (gint) strlen (value); ++j) {
-          if (!strchr ("-0123456789", value[j]))
-            return _saveptr + j;
-        }
-        ret->value = (void *) g_malloc (sizeof (int));
-        *((int *) ret->value) = atoi (value);
-
-      } else {
-        ret->value = g_malloc (sizeof (int) * ret->count);
-        t = strtok_r (value, ",", &saveptr);
-
-        for (i = 0; i < ret->count; ++i) {
-
-          if (!t)
-            return _saveptr + (saveptr - value);
-
-          trimleft (t, " \t");
-          trimright (t, " \t");
-          if (!t[0])
-            return _saveptr + (saveptr - t);
-
-          for (j = 0; j < (gint) strlen (value); ++j) {
-            if (!strchr ("-0123456789", value[j]))
-              return _saveptr + (saveptr - t) + j;
-          }
-
-          ((int *) ret->value)[i] = atoi (t);
-          t = strtok_r (0, ",", &saveptr);
-        }
-      }
-      break;
-
-    case _uint:
-      ret->count = (ret->arraysize) ? ret->arraysize : 1;
-      if (ret->count == 1) {
-        for (j = 0; j < (gint) strlen (value); ++j) {
-          if (!strchr ("0123456789", value[j]))
-            return _saveptr + j;
-        }
-        ret->value = (void *) g_malloc (sizeof (unsigned int));
-        *((unsigned int *) ret->value) = atoi (value);
-
-      } else {
-        ret->value = g_malloc (sizeof (unsigned int) * ret->count);
-        t = strtok_r (value, ",", &saveptr);
-
-        for (i = 0; i < ret->count; ++i) {
-
-          if (!t)
-            return _saveptr + (saveptr - value);
-
-          trimleft (t, " \t");
-          trimright (t, " \t");
-          if (!t[0])
-            return _saveptr + (saveptr - t);
-
-          for (j = 0; j < (gint) strlen (value); ++j) {
-            if (!strchr ("0123456789", value[j]))
-              return _saveptr + (saveptr - t) + j;
-          }
-
-          ((unsigned int *) ret->value)[i] = atoi (t);
-          t = strtok_r (0, ",", &saveptr);
-        }
-      }
-      break;
-
-    case _float:
-      ret->count = (ret->arraysize) ? ret->arraysize : 1;
-      if (ret->count == 1) {
-        for (j = 0; j < (gint) strlen (value); ++j) {
-          if (!strchr ("0123456789.-", value[j]))
-            return _saveptr + j;
-        }
-        ret->value = (void *) g_malloc (sizeof (float));
-        *((float *) ret->value) = (float) g_ascii_strtod (value, NULL);
-
-      } else {
-        ret->value = g_malloc (sizeof (float) * ret->count);
-        t = strtok_r (value, ",", &saveptr);
-
-        for (i = 0; i < ret->count; ++i) {
-
-          if (!t)
-            return _saveptr + (saveptr - value);
-
-          trimleft (t, " \t");
-          trimright (t, " \t");
-          if (!t[0])
-            return _saveptr + (saveptr - t);
-
-          for (j = 0; j < (gint) strlen (value); ++j) {
-            if (!strchr ("0123456789.-", value[j]))
-              return _saveptr + (saveptr - t) + j;
-          }
-
-          ((float *) ret->value)[i] = (float) g_ascii_strtod (t, NULL);
-          t = strtok_r (0, ",", &saveptr);
-        }
-      }
-      break;
-
-    case _vec2:
-      return vec_parsevalue (2, value, _saveptr, ret);
-      break;
-
-    case _bvec2:
-      return bvec_parsevalue (2, value, _saveptr, ret);
-      break;
-
-    case _ivec2:
-      return ivec_parsevalue (2, value, _saveptr, ret);
-      break;
-
-    case _uvec2:
-      return uvec_parsevalue (2, value, _saveptr, ret);
-      break;
-
-    case _vec3:
-      return vec_parsevalue (3, value, _saveptr, ret);
-      break;
-
-    case _bvec3:
-      return bvec_parsevalue (3, value, _saveptr, ret);
-      break;
-
-    case _ivec3:
-      return uvec_parsevalue (3, value, _saveptr, ret);
-      break;
-
-    case _uvec3:
-      return uvec_parsevalue (3, value, _saveptr, ret);
-      break;
-
-    case _vec4:
-      return vec_parsevalue (4, value, _saveptr, ret);
-      break;
-
-    case _bvec4:
-      return bvec_parsevalue (4, value, _saveptr, ret);
-      break;
-
-    case _ivec4:
-      return ivec_parsevalue (4, value, _saveptr, ret);
-      break;
-
-    case _uvec4:
-      return uvec_parsevalue (4, value, _saveptr, ret);
-      break;
-
-    case _mat2:
-    case _mat2x2:
-      return mat_parsevalue (2, 2, value, _saveptr, ret);
-      break;
-
-    case _mat2x3:
-      return mat_parsevalue (2, 3, value, _saveptr, ret);
-      break;
-
-    case _mat3x2:
-      return mat_parsevalue (3, 2, value, _saveptr, ret);
-      break;
-
-    case _mat2x4:
-      return mat_parsevalue (2, 4, value, _saveptr, ret);
-      break;
-
-    case _mat4x2:
-      return mat_parsevalue (4, 2, value, _saveptr, ret);
-      break;
-
-    case _mat3:
-    case _mat3x3:
-      return mat_parsevalue (3, 3, value, _saveptr, ret);
-      break;
-
-    case _mat3x4:
-      return mat_parsevalue (3, 4, value, _saveptr, ret);
-      break;
-
-    case _mat4x3:
-      return mat_parsevalue (4, 3, value, _saveptr, ret);
-      break;
-
-    case _mat4:
-    case _mat4x4:
-      return mat_parsevalue (4, 4, value, _saveptr, ret);
-      break;
-
-    default:
-      break;
-  }
-  return 0;
-}
-
-/*
-	Function:
-		vec_parsevalue
-
-	Description:
-		Parse text coming after the assignement operator for vec
-		type variables.
-
-	Arguments:
-
-		int n;
-			Vector dimension.
-
-		char *value:
-			Text to be parsed.
-
-		char *_saveptr:
-			Index of end of value.
-
-		struct gst_gl_shadervariable_desc *ret:
-			The variable description to be completed
-			At input time it contains the data type index (type),
-			variable name (name) and array size (arraysize).
-
-	return values:
-		 0: 	No error.
-		!0:	Pointer to parse error.
-
-*/
-
-char *
-vec_parsevalue (int n, char *value, char *_saveptr,
-    struct gst_gl_shadervariable_desc *ret)
-{
-
-  int i;
-  int j;
-  int k;
-  char *saveptr = value;
-  char *saveptr2;
-  char *t;
-  char *u;
-
-  ret->count = (ret->arraysize) ? ret->arraysize * n : n;
-  ret->value = g_malloc (sizeof (float) * ret->count);
-
-  if (!ret->arraysize) {
-    t = strtok_r (value, ",", &saveptr);
-
-    for (i = 0; i < ret->count; ++i) {
-
-      if (!t)
-        return _saveptr + (saveptr - value);
-
-      trimleft (t, " \t");
-      trimright (t, " \t");
-      if (!t[0])
-        return _saveptr + (saveptr - t);
-
-      for (j = 0; j < (gint) strlen (value); ++j) {
-        if (!strchr ("0123456789.-", value[j]))
-          return _saveptr + (saveptr - t) + j;
-      }
-
-      ((float *) ret->value)[i] = (float) g_ascii_strtod (t, NULL);
-      t = strtok_r (0, ",", &saveptr);
-    }
-
-  } else {
-
-    saveptr2 = value;
-    u = strtok_r (value, ")", &saveptr2);
-
-    for (k = 0; k < ret->arraysize; ++k) {
-
-      if (!u)
-        return _saveptr + (saveptr2 - value);
-
-      trimleft (u, " \t");
-      trimright (u, " \t");
-
-      if (k) {
-        if (u[0] != ',')
-          return _saveptr + (u - value);
-        ++u;
-        trimleft (u, " \t");
-      }
-
-      if (strncmp (u, gst_gl_shadervariable_datatype[ret->type],
-              strlen (gst_gl_shadervariable_datatype[ret->type])))
-        return _saveptr + (u - value);
-
-      u += strlen (gst_gl_shadervariable_datatype[ret->type]);
-      trimleft (u, " \t");
-      if (u[0] != '(')
-        return _saveptr + (u - value);
-      ++u;
-
-      t = strtok_r (u, ",", &saveptr);
-      if (!t)
-        return _saveptr + (u - value);
-
-      for (i = 0; i < n; ++i) {
-
-        trimleft (t, " \t");
-        trimright (t, " \t");
-        if (!t[0])
-          return _saveptr + (t - value);
-
-        for (j = 0; j < (gint) strlen (t); ++j) {
-          if (!strchr ("0123456789.-", t[j]))
-            return _saveptr + (t - value) + j;
-        }
-
-        ((float *) ret->value)[k * n + i] = (float) g_ascii_strtod (t, NULL);
-        t = strtok_r (0, ",", &saveptr);
-        if (i < (n - 1) && !t)
-          return _saveptr + (saveptr - value);
-
-      }
-      u = strtok_r (0, ")", &saveptr2);
-    }
-  }
-  return 0;
-}
-
-/*
-	Function:
-		bvec_parsevalue
-
-	Description:
-		Parse text coming after the assignement operator for bvec
-		type variables.
-
-	Arguments:
-
-		int n;
-			Vector dimension.
-
-		char *value:
-			Text to be parsed.
-
-		char *_saveptr:
-			Index of end of value.
-
-		struct gst_gl_shadervariable_desc *ret:
-			The variable description to be completed
-			At input time it contains the data type index (type),
-			variable name (name) and array size (arraysize).
-
-	return values:
-		 0: 	No error.
-		!0:	Pointer to parse error.
-
-*/
-
-char *
-bvec_parsevalue (int n, char *value, char *_saveptr,
-    struct gst_gl_shadervariable_desc *ret)
-{
-
-  int i;
-  int k;
-  char *saveptr = value;
-  char *saveptr2;
-  char *t;
-  char *u;
-
-  ret->count = (ret->arraysize) ? ret->arraysize * n : n;
-  ret->value = g_malloc (sizeof (char **) * ret->count);
-
-  if (!ret->arraysize) {
-    t = strtok_r (value, ",", &saveptr);
-
-    for (i = 0; i < ret->count; ++i) {
-
-      if (!t)
-        return _saveptr + (saveptr - value);
-
-      trimleft (t, " \t");
-      trimright (t, " \t");
-      if (!t[0])
-        return _saveptr + (saveptr - t);
-
-      if (strcmp ("true", value) || strcmp ("false", value))
-        return _saveptr + (saveptr - t);
-
-      ((int *) ret->value)[i] = strcmp (t, "false");
-      t = strtok_r (0, ",", &saveptr);
-    }
-
-  } else {
-
-    saveptr2 = value;
-    u = strtok_r (value, ")", &saveptr2);
-
-    for (k = 0; k < ret->arraysize; ++k) {
-
-      if (!u)
-        return _saveptr + (saveptr2 - value);
-
-      trimleft (u, " \t");
-      trimright (u, " \t");
-
-      if (k) {
-        if (u[0] != ',')
-          return _saveptr + (u - value);
-        ++u;
-        trimleft (u, " \t");
-      }
-
-      if (strncmp (u, gst_gl_shadervariable_datatype[ret->type],
-              strlen (gst_gl_shadervariable_datatype[ret->type])))
-        return _saveptr + (u - value);
-
-      u += strlen (gst_gl_shadervariable_datatype[ret->type]);
-      trimleft (u, " \t");
-      if (u[0] != '(')
-        return _saveptr + (u - value);
-      ++u;
-
-      t = strtok_r (u, ",", &saveptr);
-      if (!t)
-        return _saveptr + (u - value);
-
-      for (i = 0; i < n; ++i) {
-
-        trimleft (t, " \t");
-        trimright (t, " \t");
-        if (!t[0])
-          return _saveptr + (t - value);
-
-        if (strcmp ("true", t) || strcmp ("false", t))
-          return _saveptr + (saveptr - t);
-
-        ((int *) ret->value)[k * n + i] = strcmp (t, "false");
-        t = strtok_r (0, ",", &saveptr);
-        if (i < (n - 1) && !t)
-          return _saveptr + (saveptr - value);
-
-      }
-      u = strtok_r (0, ")", &saveptr2);
-    }
-  }
-  return 0;
-}
-
-/*
-	Function:
-		ivec_parsevalue
-
-	Description:
-		Parse text coming after the assignement operator for ivec
-		type variables.
-
-	Arguments:
-
-		int n;
-			Vector dimension.
-
-		char *value:
-			Text to be parsed.
-
-		char *_saveptr:
-			Index of end of value.
-
-		struct gst_gl_shadervariable_desc *ret:
-			The variable description to be completed
-			At input time it contains the data type index (type),
-			variable name (name) and array size (arraysize).
-
-	return values:
-		 0: 	No error.
-		!0:	Pointer to parse error.
-
-*/
-
-char *
-ivec_parsevalue (int n, char *value, char *_saveptr,
-    struct gst_gl_shadervariable_desc *ret)
-{
-
-  int i;
-  int j;
-  int k;
-  char *saveptr = value;
-  char *saveptr2;
-  char *t;
-  char *u;
-
-  ret->count = (ret->arraysize) ? ret->arraysize * n : n;
-  ret->value = g_malloc (sizeof (int) * ret->count);
-
-  if (!ret->arraysize) {
-    t = strtok_r (value, ",", &saveptr);
-
-    for (i = 0; i < ret->count; ++i) {
-
-      if (!t)
-        return _saveptr + (saveptr - value);
-
-      trimleft (t, " \t");
-      trimright (t, " \t");
-      if (!t[0])
-        return _saveptr + (saveptr - t);
-
-      for (j = 0; j < (gint) strlen (value); ++j) {
-        if (!strchr ("0123456789-", value[j]))
-          return _saveptr + (saveptr - t) + j;
-      }
-
-      ((int *) ret->value)[i] = atoi (t);
-      t = strtok_r (0, ",", &saveptr);
-    }
-
-  } else {
-
-    saveptr2 = value;
-    u = strtok_r (value, ")", &saveptr2);
-
-    for (k = 0; k < ret->arraysize; ++k) {
-
-      if (!u)
-        return _saveptr + (saveptr2 - value);
-
-      trimleft (u, " \t");
-      trimright (u, " \t");
-
-      if (k) {
-        if (u[0] != ',')
-          return _saveptr + (u - value);
-        ++u;
-        trimleft (u, " \t");
-      }
-
-      if (strncmp (u, gst_gl_shadervariable_datatype[ret->type],
-              strlen (gst_gl_shadervariable_datatype[ret->type])))
-        return _saveptr + (u - value);
-
-      u += strlen (gst_gl_shadervariable_datatype[ret->type]);
-      trimleft (u, " \t");
-      if (u[0] != '(')
-        return _saveptr + (u - value);
-      ++u;
-
-      t = strtok_r (u, ",", &saveptr);
-      if (!t)
-        return _saveptr + (u - value);
-
-      for (i = 0; i < n; ++i) {
-
-        trimleft (t, " \t");
-        trimright (t, " \t");
-        if (!t[0])
-          return _saveptr + (t - value);
-
-        for (j = 0; j < (gint) strlen (t); ++j) {
-          if (!strchr ("0123456789-", t[j]))
-            return _saveptr + (t - value) + j;
-        }
-
-        ((int *) ret->value)[k * n + i] = atoi (t);
-        t = strtok_r (0, ",", &saveptr);
-        if (i < (n - 1) && !t)
-          return _saveptr + (saveptr - value);
-
-      }
-      u = strtok_r (0, ")", &saveptr2);
-    }
-  }
-  return 0;
-}
-
-/*
-	Function:
-		uvec_parsevalue
-
-	Description:
-		Parse text coming after the assignement operator for uvec
-		type variables.
-
-	Arguments:
-
-		int n;
-			Vector dimension.
-
-		char *value:
-			Text to be parsed.
-
-		char *_saveptr:
-			Index of end of value.
-
-		struct gst_gl_shadervariable_desc *ret:
-			The variable description to be completed
-			At input time it contains the data type index (type),
-			variable name (name) and array size (arraysize).
-
-	return values:
-		 0: 	No error.
-		!0:	Pointer to parse error.
-
-*/
-
-char *
-uvec_parsevalue (int n, char *value, char *_saveptr,
-    struct gst_gl_shadervariable_desc *ret)
-{
-
-  int i;
-  int j;
-  int k;
-  char *saveptr = value;
-  char *saveptr2;
-  char *t;
-  char *u;
-
-  ret->count = (ret->arraysize) ? ret->arraysize * n : n;
-  ret->value = g_malloc (sizeof (unsigned int) * ret->count);
-
-  if (!ret->arraysize) {
-    t = strtok_r (value, ",", &saveptr);
-
-    for (i = 0; i < ret->count; ++i) {
-
-      if (!t)
-        return _saveptr + (saveptr - value);
-
-      trimleft (t, " \t");
-      trimright (t, " \t");
-      if (!t[0])
-        return _saveptr + (saveptr - t);
-
-      for (j = 0; j < (gint) strlen (value); ++j) {
-        if (!strchr ("0123456789", value[j]))
-          return _saveptr + (saveptr - t) + j;
-      }
-
-      ((unsigned int *) ret->value)[i] = atoi (t);
-      t = strtok_r (0, ",", &saveptr);
-    }
-
-  } else {
-
-    saveptr2 = value;
-    u = strtok_r (value, ")", &saveptr2);
-
-    for (k = 0; k < ret->arraysize; ++k) {
-
-      if (!u)
-        return _saveptr + (saveptr2 - value);
-
-      trimleft (u, " \t");
-      trimright (u, " \t");
-
-      if (k) {
-        if (u[0] != ',')
-          return _saveptr + (u - value);
-        ++u;
-        trimleft (u, " \t");
-      }
-
-      if (strncmp (u, gst_gl_shadervariable_datatype[ret->type],
-              strlen (gst_gl_shadervariable_datatype[ret->type])))
-        return _saveptr + (u - value);
-
-      u += strlen (gst_gl_shadervariable_datatype[ret->type]);
-      trimleft (u, " \t");
-      if (u[0] != '(')
-        return _saveptr + (u - value);
-      ++u;
-
-      t = strtok_r (u, ",", &saveptr);
-      if (!t)
-        return _saveptr + (u - value);
-
-      for (i = 0; i < n; ++i) {
-
-        trimleft (t, " \t");
-        trimright (t, " \t");
-        if (!t[0])
-          return _saveptr + (t - value);
-
-        for (j = 0; j < (gint) strlen (t); ++j) {
-          if (!strchr ("0123456789", t[j]))
-            return _saveptr + (t - value) + j;
-        }
-
-        ((unsigned int *) ret->value)[k * n + i] = atoi (t);
-        t = strtok_r (0, ",", &saveptr);
-        if (i < (n - 1) && !t)
-          return _saveptr + (saveptr - value);
-
-      }
-      u = strtok_r (0, ")", &saveptr2);
-    }
-  }
-  return 0;
-}
-
-/*
-	Function:
-		mat_parsevalue
-
-	Description:
-		Parse text coming after the assignement operator for matrix
-		type variables.
-
-	Arguments:
-
-		int n,m;
-			Matrix dimensions.
-
-		char *value:
-			Text to be parsed.
-
-		char *_saveptr:
-			Index of end of value.
-
-		struct gst_gl_shadervariable_desc *ret:
-			The variable description to be completed
-			At input time it contains the data type index (type),
-			variable name (name) and array size (arraysize).
-
-	return values:
-		 0: 	No error.
-		!0:	Pointer to parse error.
-
-*/
-
-char *
-mat_parsevalue (int n, int m, char *value, char *_saveptr,
-    struct gst_gl_shadervariable_desc *ret)
-{
-
-  int i;
-  int j;
-  int k;
-  char *saveptr = value;
-  char *saveptr2;
-  char *t;
-  char *u;
-
-  ret->count = (ret->arraysize) ? ret->arraysize * n * m : n * m;
-  ret->value = g_malloc (sizeof (float) * ret->count);
-
-  if (!ret->arraysize) {
-    t = strtok_r (value, ",", &saveptr);
-
-    for (i = 0; i < ret->count; ++i) {
-
-      if (!t)
-        return _saveptr + (saveptr - value);
-
-      trimleft (t, " \t");
-      trimright (t, " \t");
-      if (!t[0])
-        return _saveptr + (saveptr - t);
-
-      for (j = 0; j < (gint) strlen (value); ++j) {
-        if (!strchr ("0123456789.-", value[j]))
-          return _saveptr + (saveptr - t) + j;
-      }
-
-      ((float *) ret->value)[i] = (float) g_ascii_strtod (t, NULL);
-      t = strtok_r (0, ",", &saveptr);
-    }
-
-  } else {
-
-    saveptr2 = value;
-    u = strtok_r (value, ")", &saveptr2);
-
-    for (k = 0; k < ret->arraysize; ++k) {
-
-      if (!u)
-        return _saveptr + (saveptr2 - value);
-
-      trimleft (u, " \t");
-      trimright (u, " \t");
-
-      if (k) {
-        if (u[0] != ',')
-          return _saveptr + (u - value);
-        ++u;
-        trimleft (u, " \t");
-      }
-
-      if (strncmp (u, gst_gl_shadervariable_datatype[ret->type],
-              strlen (gst_gl_shadervariable_datatype[ret->type])))
-        return _saveptr + (u - value);
-
-      u += strlen (gst_gl_shadervariable_datatype[ret->type]);
-      trimleft (u, " \t");
-      if (u[0] != '(')
-        return _saveptr + (u - value);
-      ++u;
-
-      t = strtok_r (u, ",", &saveptr);
-      if (!t)
-        return _saveptr + (u - value);
-
-      for (i = 0; i < n * m; ++i) {
-
-        trimleft (t, " \t");
-        trimright (t, " \t");
-        if (!t[0])
-          return _saveptr + (t - value);
-
-        for (j = 0; j < (gint) strlen (t); ++j) {
-          if (!strchr ("0123456789.-", t[j]))
-            return _saveptr + (t - value) + j;
-        }
-
-        ((float *) ret->value)[k * n * m + i] =
-            (float) g_ascii_strtod (t, NULL);
-        t = strtok_r (0, ",", &saveptr);
-        if (i < (n * m - 1) && !t)
-          return _saveptr + (saveptr - value);
-
-      }
-      u = strtok_r (0, ")", &saveptr2);
-    }
-  }
-  return 0;
-}
diff --git a/gst-libs/gst/gl/gstglshadervariables.h b/gst-libs/gst/gl/gstglshadervariables.h
deleted file mode 100644
index b37e1a5..0000000
--- a/gst-libs/gst/gl/gstglshadervariables.h
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * GStreamer
- * Copyright (C) 2009 Luc Deschenaux <luc.deschenaux@freesurf.ch>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-#ifndef GST_GLSHADER_VARIABLES
-#define GST_GLSHADER_VARIABLES
-
-#include <string.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <gst/gl/gstglshader.h>
-
-#define VALID_VARNAME_CHARS "abcdefghijklmnopqurstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_"
-
-struct gst_gl_shadervariable_desc;
-
-int gst_gl_shadervariables_parse (GstGLShader * shader, char *variables,
-    int (*_setvariable) (GstGLShader * shader,
-        struct gst_gl_shadervariable_desc * v));
-int gst_gl_shadervariable_set (GstGLShader * shader,
-    struct gst_gl_shadervariable_desc *ret);
-
-#endif
diff --git a/gst-libs/gst/gl/gstglsl.c b/gst-libs/gst/gl/gstglsl.c
new file mode 100644
index 0000000..5074552
--- /dev/null
+++ b/gst-libs/gst/gl/gstglsl.c
@@ -0,0 +1,553 @@
+/*
+ * GStreamer
+ * Copyright (C) 2015 Matthew Waters <matthew@centricular.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <gst/gl/gl.h>
+
+#include "gstglsl.h"
+#include "gstglsl_private.h"
+
+/**
+ * SECTION:gstglsl
+ * @short_description: helpers for dealing with OpenGL shaders
+ * @see_also: #GstGLSLStage, #GstGLShader
+ */
+
+GQuark
+gst_glsl_error_quark (void)
+{
+  return g_quark_from_static_string ("gst-glsl-error");
+}
+
+struct glsl_version_string
+{
+  GstGLSLVersion version;
+  const gchar *name;
+};
+
+static const struct glsl_version_string glsl_versions[] = {
+  /* keep in sync with definition in the header */
+  {GST_GLSL_VERSION_100, "100"},
+  {GST_GLSL_VERSION_110, "110"},
+  {GST_GLSL_VERSION_120, "120"},
+  {GST_GLSL_VERSION_130, "130"},
+  {GST_GLSL_VERSION_140, "140"},
+  {GST_GLSL_VERSION_150, "150"},
+  {GST_GLSL_VERSION_300, "300"},
+  {GST_GLSL_VERSION_310, "310"},
+  {GST_GLSL_VERSION_320, "320"},
+  {GST_GLSL_VERSION_330, "330"},
+  {GST_GLSL_VERSION_400, "400"},
+  {GST_GLSL_VERSION_410, "410"},
+  {GST_GLSL_VERSION_420, "420"},
+  {GST_GLSL_VERSION_430, "430"},
+  {GST_GLSL_VERSION_440, "440"},
+  {GST_GLSL_VERSION_450, "450"},
+};
+
+struct glsl_profile_string
+{
+  GstGLSLProfile profile;
+  const gchar *name;
+};
+
+static const struct glsl_profile_string glsl_profiles[] = {
+  /* keep in sync with definition in the header */
+  {GST_GLSL_PROFILE_ES, "es"},
+  {GST_GLSL_PROFILE_CORE, "core"},
+  {GST_GLSL_PROFILE_COMPATIBILITY, "compatibility"},
+};
+
+const gchar *
+gst_glsl_version_to_string (GstGLSLVersion version)
+{
+  int i;
+
+  if (version == GST_GLSL_VERSION_NONE)
+    return NULL;
+
+  for (i = 0; i < G_N_ELEMENTS (glsl_versions); i++) {
+    if (version == glsl_versions[i].version)
+      return glsl_versions[i].name;
+  }
+
+  return NULL;
+}
+
+GstGLSLVersion
+gst_glsl_version_from_string (const gchar * string)
+{
+  gchar *str;
+  int i;
+
+  if (string == NULL)
+    return 0;
+
+  str = g_strdup (string);
+  str = g_strstrip (str);
+
+  for (i = 0; i < G_N_ELEMENTS (glsl_versions); i++) {
+    if (g_strcmp0 (str, glsl_versions[i].name) == 0) {
+      g_free (str);
+      return glsl_versions[i].version;
+    }
+  }
+
+  g_free (str);
+  return 0;
+}
+
+const gchar *
+gst_glsl_profile_to_string (GstGLSLProfile profile)
+{
+  int i;
+
+  if (profile == GST_GLSL_PROFILE_NONE)
+    return NULL;
+
+  /* multiple profiles are not allowed */
+  if ((profile & (profile - 1)) != 0)
+    return NULL;
+
+  for (i = 0; i < G_N_ELEMENTS (glsl_profiles); i++) {
+    if (profile == glsl_profiles[i].profile)
+      return glsl_profiles[i].name;
+  }
+
+  return NULL;
+}
+
+GstGLSLProfile
+gst_glsl_profile_from_string (const gchar * string)
+{
+  gchar *str;
+  int i;
+
+  if (string == NULL)
+    return GST_GLSL_PROFILE_NONE;
+
+  str = g_strdup (string);
+  str = g_strstrip (str);
+
+  for (i = 0; i < G_N_ELEMENTS (glsl_profiles); i++) {
+    if (g_strcmp0 (str, glsl_profiles[i].name) == 0) {
+      g_free (str);
+      return glsl_profiles[i].profile;
+    }
+  }
+
+  g_free (str);
+  return GST_GLSL_PROFILE_NONE;
+}
+
+static gboolean
+_is_valid_version_profile (GstGLSLVersion version, GstGLSLProfile profile)
+{
+  if (version == GST_GLSL_VERSION_NONE)
+    return TRUE;
+
+  /* versions that may not need an explicit profile */
+  if (version <= GST_GLSL_VERSION_150 && profile == GST_GLSL_PROFILE_NONE)
+    return TRUE;
+
+  /* ES versions require an ES profile */
+  if (version == GST_GLSL_VERSION_100 || version == GST_GLSL_VERSION_300
+      || version == GST_GLSL_VERSION_310 || version == GST_GLSL_VERSION_320)
+    return profile == GST_GLSL_PROFILE_ES;
+
+  /* required profile and no ES profile for normal GL contexts */
+  if (version >= GST_GLSL_VERSION_330)
+    return profile == GST_GLSL_PROFILE_NONE || profile == GST_GLSL_PROFILE_CORE
+        || profile == GST_GLSL_PROFILE_COMPATIBILITY;
+
+  if (version <= GST_GLSL_VERSION_150)
+    return profile == GST_GLSL_PROFILE_NONE
+        || profile == GST_GLSL_PROFILE_COMPATIBILITY;
+
+  return FALSE;
+}
+
+gchar *
+gst_glsl_version_profile_to_string (GstGLSLVersion version,
+    GstGLSLProfile profile)
+{
+  const gchar *version_s, *profile_s;
+
+  if (!_is_valid_version_profile (version, profile))
+    return NULL;
+
+  version_s = gst_glsl_version_to_string (version);
+  /* no profiles in GL/ES <= 150 */
+  if (version <= GST_GLSL_VERSION_150)
+    profile_s = NULL;
+  else
+    profile_s = gst_glsl_profile_to_string (profile);
+
+  if (!version_s)
+    return NULL;
+
+  if (profile_s)
+    return g_strdup_printf ("%s %s", version_s, profile_s);
+
+  return g_strdup (version_s);
+}
+
+static void
+_fixup_version_profile (GstGLSLVersion * version, GstGLSLProfile * profile)
+{
+  if (*version == GST_GLSL_VERSION_100 || *version == GST_GLSL_VERSION_300
+      || *version == GST_GLSL_VERSION_310 || *version == GST_GLSL_VERSION_320)
+    *profile = GST_GLSL_PROFILE_ES;
+  else if (*version <= GST_GLSL_VERSION_150)
+    *profile = GST_GLSL_PROFILE_COMPATIBILITY;
+  else if (*profile == GST_GLSL_PROFILE_NONE
+      && *version >= GST_GLSL_VERSION_330)
+    *profile = GST_GLSL_PROFILE_CORE;
+}
+
+/* @str points to the start of "#version", "#    version" or "#\tversion", etc */
+static const gchar *
+_check_valid_version_preprocessor_string (const gchar * str)
+{
+  gint i = 0;
+
+  if (!str || !str[i])
+    return NULL;
+
+  /* there can be whitespace between the '#' and 'version' */
+  do {
+    i++;
+    if (str[i] == '\0' || str[i] == '\n' || str[i] == '\r')
+      return NULL;
+  } while (g_ascii_isspace (str[i]));
+  if (g_strstr_len (&str[i], 7, "version"))
+    return &str[i + 7];
+
+  return NULL;
+}
+
+gboolean
+gst_glsl_version_profile_from_string (const gchar * string,
+    GstGLSLVersion * version_ret, GstGLSLProfile * profile_ret)
+{
+  gchar *str, *version_s, *profile_s;
+  GstGLSLVersion version = GST_GLSL_VERSION_NONE;
+  GstGLSLProfile profile = GST_GLSL_PROFILE_NONE;
+  gint i;
+
+  if (!string)
+    goto error;
+
+  str = g_strdup (string);
+  version_s = g_strstrip (str);
+
+  /* skip possible #version prefix */
+  if (str[0] == '#') {
+    if (!(version_s =
+            (gchar *) _check_valid_version_preprocessor_string (version_s))) {
+      g_free (str);
+      goto error;
+    }
+  }
+
+  version_s = g_strstrip (version_s);
+
+  i = 0;
+  while (version_s && version_s[i] != '\0' && g_ascii_isdigit (version_s[i]))
+    i++;
+  /* wrong version length */
+  if (i != 3) {
+    g_free (str);
+    goto error;
+  }
+
+  if (version_s[i] != 0) {
+    version_s[i] = '\0';
+    i++;
+    profile_s = &version_s[i];
+    profile_s = g_strstrip (profile_s);
+
+    profile = gst_glsl_profile_from_string (profile_s);
+  }
+  version = gst_glsl_version_from_string (version_s);
+  g_free (str);
+
+  /* check whether the parsed data is valid */
+  if (!version)
+    goto error;
+  if (!_is_valid_version_profile (version, profile))
+    goto error;
+  /* got a profile when none was expected */
+  if (version <= GST_GLSL_VERSION_150 && profile != GST_GLSL_PROFILE_NONE)
+    goto error;
+
+  _fixup_version_profile (&version, &profile);
+
+  if (profile_ret)
+    *profile_ret = profile;
+  if (version_ret)
+    *version_ret = version;
+
+  return TRUE;
+
+error:
+  {
+    if (profile_ret)
+      *profile_ret = GST_GLSL_PROFILE_NONE;
+    if (version_ret)
+      *version_ret = GST_GLSL_VERSION_NONE;
+    return FALSE;
+  }
+}
+
+/* returns the pointer in @str to the #version declaration */
+const gchar *
+_gst_glsl_shader_string_find_version (const gchar * str)
+{
+  gboolean sl_comment = FALSE;
+  gboolean ml_comment = FALSE;
+  gboolean newline = TRUE;
+  gint i = 0;
+
+  /* search for #version while allowing for preceeding comments/whitespace as
+   * permitted by the GLSL specification */
+  while (str && str[i] != '\0' && i < 1024) {
+    if (str[i] == '\n' || str[i] == '\r') {
+      newline = TRUE;
+      sl_comment = FALSE;
+      i++;
+      continue;
+    }
+
+    if (g_ascii_isspace (str[i]))
+      goto next;
+
+    if (sl_comment)
+      goto next;
+
+    if (ml_comment) {
+      if (g_strstr_len (&str[i], 2, "*/")) {
+        ml_comment = FALSE;
+        i++;
+      }
+      goto next;
+    }
+
+    if (g_strstr_len (&str[i], 2, "//")) {
+      sl_comment = TRUE;
+      i++;
+      goto next;
+    }
+
+    if (g_strstr_len (&str[i], 2, "/*")) {
+      ml_comment = TRUE;
+      i++;
+      goto next;
+    }
+
+    if (str[i] == '#') {
+      if (newline && _check_valid_version_preprocessor_string (&str[i]))
+        return &str[i];
+      break;
+    }
+
+  next:
+    newline = FALSE;
+    i++;
+  }
+
+  return NULL;
+}
+
+gboolean
+gst_glsl_string_get_version_profile (const gchar * s, GstGLSLVersion * version,
+    GstGLSLProfile * profile)
+{
+  const gchar *version_profile_s;
+
+  version_profile_s = _gst_glsl_shader_string_find_version (s);
+  if (!version_profile_s)
+    goto error;
+
+  if (!gst_glsl_version_profile_from_string (version_profile_s, version,
+          profile))
+    goto error;
+
+  return TRUE;
+
+error:
+  {
+    if (version)
+      *version = GST_GLSL_VERSION_NONE;
+    if (profile)
+      *profile = GST_GLSL_PROFILE_NONE;
+    return FALSE;
+  }
+}
+
+GstGLSLVersion
+gst_gl_version_to_glsl_version (GstGLAPI gl_api, gint maj, gint min)
+{
+  g_return_val_if_fail (gl_api != GST_GL_API_NONE, 0);
+
+  if (gl_api & GST_GL_API_GLES2) {
+    if (maj == 2 && min == 0)
+      return 100;
+
+    if (maj == 3 && min >= 0 && min <= 2)
+      return maj * 100 + min * 10;
+
+    return 0;
+  }
+
+  /* versions match for >= 3.3 */
+  if (gl_api & (GST_GL_API_OPENGL3 | GST_GL_API_OPENGL)) {
+    if (maj > 3 || (maj == 3 && min >= 3))
+      return maj * 100 + min * 10;
+
+    if (maj == 3 && min == 2)
+      return 150;
+    if (maj == 3 && min == 1)
+      return 140;
+    if (maj == 3 && min == 0)
+      return 130;
+    if (maj == 2 && min == 1)
+      return 120;
+    if (maj == 2 && min == 0)
+      return 110;
+
+    return 0;
+  }
+
+  return 0;
+}
+
+gboolean
+gst_gl_context_supports_glsl_profile_version (GstGLContext * context,
+    GstGLSLVersion version, GstGLSLProfile profile)
+{
+  g_return_val_if_fail (GST_IS_GL_CONTEXT (context), FALSE);
+
+  if (!_is_valid_version_profile (version, profile))
+    return FALSE;
+
+  if (profile != GST_GLSL_PROFILE_NONE) {
+    if (gst_gl_context_check_gl_version (context, GST_GL_API_GLES2, 2, 0)) {
+      if ((profile & GST_GLSL_PROFILE_ES) == 0)
+        return FALSE;
+    } else if ((gst_gl_context_get_gl_api (context) & GST_GL_API_OPENGL) != 0) {
+      if ((profile & GST_GLSL_PROFILE_COMPATIBILITY) == 0)
+        return FALSE;
+    } else if ((gst_gl_context_get_gl_api (context) & GST_GL_API_OPENGL3) != 0) {
+      /* GL_ARB_es2_compatibility is requried for GL3 contexts */
+      if ((profile & (GST_GLSL_PROFILE_CORE | GST_GLSL_PROFILE_ES)) == 0)
+        return FALSE;
+    } else {
+      g_assert_not_reached ();
+    }
+  }
+
+  if (version != GST_GLSL_VERSION_NONE) {
+    GstGLAPI gl_api;
+    gint maj, min, glsl_version;
+
+    if (gst_gl_context_check_gl_version (context, GST_GL_API_GLES2, 3, 1)) {
+      if (version > GST_GLSL_VERSION_310)
+        return FALSE;
+    } else if (gst_gl_context_check_gl_version (context, GST_GL_API_GLES2, 3,
+            0)) {
+      if (version > GST_GLSL_VERSION_300)
+        return FALSE;
+    } else if (gst_gl_context_check_gl_version (context, GST_GL_API_GLES2, 2,
+            0)) {
+      if (version > GST_GLSL_VERSION_100)
+        return FALSE;
+    }
+
+    gl_api = gst_gl_context_get_gl_api (context);
+    gst_gl_context_get_gl_version (context, &maj, &min);
+    glsl_version = gst_gl_version_to_glsl_version (gl_api, maj, min);
+    if (version > glsl_version)
+      return FALSE;
+
+    if (gst_gl_context_check_gl_version (context, GST_GL_API_OPENGL3, 1, 0))
+      /* GL_ARB_es2_compatibility is requried for GL3 contexts */
+      if (version < GST_GLSL_VERSION_150 && version != GST_GLSL_VERSION_100)
+        return FALSE;
+
+    if (gst_gl_context_check_gl_version (context, GST_GL_API_OPENGL, 1, 0)
+        && version < GST_GLSL_VERSION_110)
+      return FALSE;
+  }
+
+  return TRUE;
+}
+
+gboolean
+_gst_glsl_funcs_fill (GstGLSLFuncs * vtable, GstGLContext * context)
+{
+  GstGLFuncs *gl = context->gl_vtable;
+
+  if (vtable->initialized)
+    return TRUE;
+
+  if (gl->CreateProgram) {
+    vtable->CreateProgram = gl->CreateProgram;
+    vtable->DeleteProgram = gl->DeleteProgram;
+    vtable->UseProgram = gl->UseProgram;
+
+    vtable->CreateShader = gl->CreateShader;
+    vtable->DeleteShader = gl->DeleteShader;
+    vtable->AttachShader = gl->AttachShader;
+    vtable->DetachShader = gl->DetachShader;
+
+    vtable->GetAttachedShaders = gl->GetAttachedShaders;
+
+    vtable->GetShaderInfoLog = gl->GetShaderInfoLog;
+    vtable->GetShaderiv = gl->GetShaderiv;
+    vtable->GetProgramInfoLog = gl->GetProgramInfoLog;
+    vtable->GetProgramiv = gl->GetProgramiv;
+  } else if (gl->CreateProgramObject) {
+    vtable->CreateProgram = gl->CreateProgramObject;
+    vtable->DeleteProgram = gl->DeleteObject;
+    vtable->UseProgram = gl->UseProgramObject;
+
+    vtable->CreateShader = gl->CreateShaderObject;
+    vtable->DeleteShader = gl->DeleteObject;
+    vtable->AttachShader = gl->AttachObject;
+    vtable->DetachShader = gl->DetachObject;
+
+    vtable->GetAttachedShaders = gl->GetAttachedObjects;
+
+    vtable->GetShaderInfoLog = gl->GetInfoLog;
+    vtable->GetShaderiv = gl->GetObjectParameteriv;
+    vtable->GetProgramInfoLog = gl->GetInfoLog;
+    vtable->GetProgramiv = gl->GetObjectParameteriv;
+  } else {
+    vtable->initialized = FALSE;
+    return FALSE;
+  }
+
+  vtable->initialized = TRUE;
+  return TRUE;
+}
diff --git a/gst-libs/gst/gl/gstglsl.h b/gst-libs/gst/gl/gstglsl.h
new file mode 100644
index 0000000..9f051f6
--- /dev/null
+++ b/gst-libs/gst/gl/gstglsl.h
@@ -0,0 +1,96 @@
+/*
+ * GStreamer
+ * Copyright (C) 2015 Matthew Waters <matthew@centricular.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifndef __GST_GLSL_H__
+#define __GST_GLSL_H__
+
+#include <gst/gl/gstgl_fwd.h>
+
+G_BEGIN_DECLS
+
+GQuark gst_glsl_error_quark (void);
+#define GST_GLSL_ERROR (gst_glsl_error_quark ())
+
+typedef enum {
+  GST_GLSL_ERROR_COMPILE,
+  GST_GLSL_ERROR_LINK,
+  GST_GLSL_ERROR_PROGRAM,
+} GstGLSLError;
+
+typedef enum
+{
+  GST_GLSL_VERSION_NONE = 0,
+
+  GST_GLSL_VERSION_100 = 100, /* ES */
+  GST_GLSL_VERSION_110 = 110, /* GL */
+  GST_GLSL_VERSION_120 = 120, /* GL */
+  GST_GLSL_VERSION_130 = 130, /* GL */
+  GST_GLSL_VERSION_140 = 140, /* GL */
+  GST_GLSL_VERSION_150 = 150, /* GL */
+  GST_GLSL_VERSION_300 = 300, /* ES */
+  GST_GLSL_VERSION_310 = 310, /* ES */
+  GST_GLSL_VERSION_320 = 320, /* ES */
+  GST_GLSL_VERSION_330 = 330, /* GL */
+  GST_GLSL_VERSION_400 = 400, /* GL */
+  GST_GLSL_VERSION_410 = 410, /* GL */
+  GST_GLSL_VERSION_420 = 420, /* GL */
+  GST_GLSL_VERSION_430 = 430, /* GL */
+  GST_GLSL_VERSION_440 = 440, /* GL */
+  GST_GLSL_VERSION_450 = 450, /* GL */
+
+  GST_GLSL_VERSION_ANY = -1,
+} GstGLSLVersion;
+
+typedef enum
+{
+  /* XXX: maybe make GstGLAPI instead */
+  GST_GLSL_PROFILE_NONE = 0,
+
+  GST_GLSL_PROFILE_ES = (1 << 0),
+  GST_GLSL_PROFILE_CORE = (1 << 1),
+  GST_GLSL_PROFILE_COMPATIBILITY = (1 << 2),
+
+  GST_GLSL_PROFILE_ANY = -1,
+} GstGLSLProfile;
+
+GstGLSLVersion gst_glsl_version_from_string         (const gchar * string);
+const gchar *  gst_glsl_version_to_string           (GstGLSLVersion version);
+
+GstGLSLProfile gst_glsl_profile_from_string         (const gchar * string);
+const gchar *  gst_glsl_profile_to_string           (GstGLSLProfile profile);
+
+gchar *        gst_glsl_version_profile_to_string   (GstGLSLVersion version,
+                                                     GstGLSLProfile profile);
+gboolean       gst_glsl_version_profile_from_string (const gchar * string,
+                                                     GstGLSLVersion * version,
+                                                     GstGLSLProfile * profile);
+
+gboolean       gst_glsl_string_get_version_profile  (const gchar *s,
+                                                     GstGLSLVersion * version,
+                                                     GstGLSLProfile * profile);
+
+GstGLSLVersion gst_gl_version_to_glsl_version       (GstGLAPI gl_api, gint maj, gint min);
+gboolean       gst_gl_context_supports_glsl_profile_version (GstGLContext * context,
+                                                             GstGLSLVersion version,
+                                                             GstGLSLProfile profile);
+
+G_END_DECLS
+
+#endif /* __GST_GLSL_H__ */
diff --git a/gst-libs/gst/gl/gstglsl_private.h b/gst-libs/gst/gl/gstglsl_private.h
new file mode 100644
index 0000000..c1be677
--- /dev/null
+++ b/gst-libs/gst/gl/gstglsl_private.h
@@ -0,0 +1,63 @@
+/*
+ * GStreamer
+ * Copyright (C) 2015 Matthew Waters <matthew@centricular.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifndef __GST_GLSL_PRIVATE_H__
+#define __GST_GLSL_PRIVATE_H__
+
+#include <gst/gl/gstgl_fwd.h>
+
+G_BEGIN_DECLS
+
+#ifndef GL_COMPILE_STATUS
+#define GL_COMPILE_STATUS             0x8B81
+#endif
+#ifndef GLhandleARB
+#define GLhandleARB GLuint
+#endif
+
+typedef struct _GstGLSLFuncs
+{
+  gboolean initialized;
+
+  GLuint GSTGLAPI (*CreateProgram) (void);
+  void GSTGLAPI (*DeleteProgram) (GLuint program);
+  void GSTGLAPI (*UseProgram) (GLuint program);
+  void GSTGLAPI (*GetAttachedShaders) (GLuint program, GLsizei maxcount,
+      GLsizei * count, GLuint * shaders);
+
+  GLuint GSTGLAPI (*CreateShader) (GLenum shaderType);
+  void GSTGLAPI (*DeleteShader) (GLuint shader);
+  void GSTGLAPI (*AttachShader) (GLuint program, GLuint shader);
+  void GSTGLAPI (*DetachShader) (GLuint program, GLuint shader);
+
+  void GSTGLAPI (*GetShaderiv) (GLuint program, GLenum pname, GLint * params);
+  void GSTGLAPI (*GetProgramiv) (GLuint program, GLenum pname, GLint * params);
+  void GSTGLAPI (*GetShaderInfoLog) (GLuint shader, GLsizei maxLength,
+      GLsizei * length, char *log);
+  void GSTGLAPI (*GetProgramInfoLog) (GLuint shader, GLsizei maxLength,
+      GLsizei * length, char *log);
+} GstGLSLFuncs;
+
+G_GNUC_INTERNAL gboolean _gst_glsl_funcs_fill (GstGLSLFuncs * vtable, GstGLContext * context);
+G_GNUC_INTERNAL const gchar * _gst_glsl_shader_string_find_version (const gchar * str);
+
+G_END_DECLS
+
+#endif /* __GST_GLSL_PRIVATE_H__ */
diff --git a/gst-libs/gst/gl/gstglslstage.c b/gst-libs/gst/gl/gstglslstage.c
new file mode 100644
index 0000000..770b1d0
--- /dev/null
+++ b/gst-libs/gst/gl/gstglslstage.c
@@ -0,0 +1,529 @@
+/*
+ * GStreamer
+ * Copyright (C) 2015 Matthew Waters <matthew@centricular.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <gst/gl/gl.h>
+
+#include "gstglslstage.h"
+#include "gstglsl_private.h"
+
+/**
+ * SECTION:gstglslstage
+ * @short_description: object for dealing with OpenGL shader stages
+ * @title: GstGLSLStage
+ * @see_also: #GstGLShader
+ *
+ * #GstGLSLStage holds and represents a single OpenGL shader stage.
+ */
+
+static const gchar *es2_version_header = "#version 100\n";
+
+GST_DEBUG_CATEGORY_STATIC (gst_glsl_stage_debug);
+#define GST_CAT_DEFAULT gst_glsl_stage_debug
+
+G_DEFINE_TYPE_WITH_CODE (GstGLSLStage, gst_glsl_stage, GST_TYPE_OBJECT,
+    GST_DEBUG_CATEGORY_INIT (gst_glsl_stage_debug, "glslstage", 0,
+        "GLSL Stage");
+    );
+
+#define GST_GLSL_STAGE_GET_PRIVATE(o) \
+  (G_TYPE_INSTANCE_GET_PRIVATE((o), GST_TYPE_GLSL_STAGE, GstGLSLStagePrivate))
+
+struct _GstGLSLStagePrivate
+{
+  GstGLSLFuncs vtable;
+
+  GLenum type;
+  GLhandleARB handle;
+  GstGLSLVersion version;
+  GstGLSLProfile profile;
+  gchar **strings;
+  gint n_strings;
+
+  gboolean compiled;
+};
+
+static void
+gst_glsl_stage_finalize (GObject * object)
+{
+  GstGLSLStage *stage = GST_GLSL_STAGE (object);
+  gint i;
+
+  if (stage->context) {
+    gst_object_unref (stage->context);
+    stage->context = NULL;
+  }
+
+  for (i = 0; i < stage->priv->n_strings; i++) {
+    g_free (stage->priv->strings[i]);
+  }
+  g_free (stage->priv->strings);
+  stage->priv->strings = NULL;
+
+  G_OBJECT_CLASS (gst_glsl_stage_parent_class)->finalize (object);
+}
+
+static void
+gst_glsl_stage_set_property (GObject * object,
+    guint prop_id, const GValue * value, GParamSpec * pspec)
+{
+  switch (prop_id) {
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
+  }
+}
+
+static void
+gst_glsl_stage_get_property (GObject * object,
+    guint prop_id, GValue * value, GParamSpec * pspec)
+{
+  switch (prop_id) {
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
+  }
+
+}
+
+static void
+gst_glsl_stage_class_init (GstGLSLStageClass * klass)
+{
+  GObjectClass *obj_class = G_OBJECT_CLASS (klass);
+
+  g_type_class_add_private (klass, sizeof (GstGLSLStagePrivate));
+
+  obj_class->finalize = gst_glsl_stage_finalize;
+  obj_class->set_property = gst_glsl_stage_set_property;
+  obj_class->get_property = gst_glsl_stage_get_property;
+}
+
+static void
+gst_glsl_stage_init (GstGLSLStage * stage)
+{
+  stage->priv = GST_GLSL_STAGE_GET_PRIVATE (stage);
+}
+
+static gboolean
+_is_valid_shader_type (GLenum type)
+{
+  switch (type) {
+    case GL_VERTEX_SHADER:
+    case GL_FRAGMENT_SHADER:
+#ifdef GL_TESS_CONTROL_SHADER
+    case GL_TESS_CONTROL_SHADER:
+#endif
+#ifdef GL_TESS_EVALUATION_SHADER
+    case GL_TESS_EVALUATION_SHADER:
+#endif
+#ifdef GL_GEOMETRY_SHADER
+    case GL_GEOMETRY_SHADER:
+#endif
+#ifdef GL_COMPUTE_SHADER
+    case GL_COMPUTE_SHADER:
+#endif
+      return TRUE;
+    default:
+      return FALSE;
+  }
+}
+
+static const gchar *
+_shader_type_to_string (GLenum type)
+{
+  switch (type) {
+    case GL_VERTEX_SHADER:
+      return "vertex";
+    case GL_FRAGMENT_SHADER:
+      return "fragment";
+#ifdef GL_TESS_CONTROL_SHADER
+    case GL_TESS_CONTROL_SHADER:
+      return "tesselation control";
+#endif
+#ifdef GL_TESS_EVALUATION_SHADER
+    case GL_TESS_EVALUATION_SHADER:
+      return "tesselation evaluation";
+#endif
+#ifdef GL_GEOMETRY_SHADER
+    case GL_GEOMETRY_SHADER:
+      return "geometry";
+#endif
+#ifdef GL_COMPUTE_SHADER
+    case GL_COMPUTE_SHADER:
+      return "compute";
+#endif
+    default:
+      return "unknown";
+  }
+}
+
+static gboolean
+_ensure_shader (GstGLSLStage * stage)
+{
+  if (stage->priv->handle)
+    return TRUE;
+
+  if (!(stage->priv->handle =
+          stage->priv->vtable.CreateShader (stage->priv->type)))
+    return FALSE;
+
+  return stage->priv->handle != 0;
+}
+
+/**
+ * gst_glsl_stage_new_with_strings:
+ * @context: a #GstGLContext
+ * @type: the GL enum shader stage type
+ * @version: the #GstGLSLVersion
+ * @profile: the #GstGLSLProfile
+ * @n_strings: the number of strings in @str
+ * @str: an array of strings concatted together to produce a shader
+ *
+ * Returns: (transfer full): a new #GstGLSLStage of the specified @type
+ */
+GstGLSLStage *
+gst_glsl_stage_new_with_strings (GstGLContext * context, guint type,
+    GstGLSLVersion version, GstGLSLProfile profile, gint n_strings,
+    const gchar ** str)
+{
+  GstGLSLStage *stage;
+
+  g_return_val_if_fail (GST_IS_GL_CONTEXT (context), NULL);
+  g_return_val_if_fail (_is_valid_shader_type (type), NULL);
+
+  stage = g_object_new (GST_TYPE_GLSL_STAGE, NULL);
+  /* FIXME: GInittable */
+  if (!_gst_glsl_funcs_fill (&stage->priv->vtable, context)) {
+    gst_object_unref (stage);
+    return NULL;
+  }
+
+  stage->context = gst_object_ref (context);
+  stage->priv->type = type;
+  if (!gst_glsl_stage_set_strings (stage, version, profile, n_strings, str)) {
+    gst_object_unref (stage);
+    return NULL;
+  }
+
+  return stage;
+}
+
+/**
+ * gst_glsl_stage_new_with_string:
+ * @context: a #GstGLContext
+ * @type: the GL enum shader stage type
+ * @version: the #GstGLSLVersion
+ * @profile: the #GstGLSLProfile
+ * @str: a shader string
+ *
+ * Returns: (transfer full): a new #GstGLSLStage of the specified @type
+ */
+GstGLSLStage *
+gst_glsl_stage_new_with_string (GstGLContext * context, guint type,
+    GstGLSLVersion version, GstGLSLProfile profile, const gchar * str)
+{
+  return gst_glsl_stage_new_with_strings (context, type, version, profile, 1,
+      &str);
+}
+
+/**
+ * gst_glsl_stage_new:
+ * @context: a #GstGLContext
+ * @type: the GL enum shader stage type
+ *
+ * Returns: (transfer full): a new #GstGLSLStage of the specified @type
+ */
+GstGLSLStage *
+gst_glsl_stage_new (GstGLContext * context, guint type)
+{
+  return gst_glsl_stage_new_with_string (context, type, GST_GLSL_VERSION_NONE,
+      GST_GLSL_PROFILE_NONE, NULL);
+}
+
+/**
+ * gst_glsl_stage_new_with_default_vertex:
+ * @context: a #GstGLContext
+ *
+ * Returns: (transfer full): a new #GstGLSLStage with the default vertex shader
+ */
+GstGLSLStage *
+gst_glsl_stage_new_default_vertex (GstGLContext * context)
+{
+  return gst_glsl_stage_new_with_string (context, GL_VERTEX_SHADER,
+      GST_GLSL_VERSION_NONE,
+      GST_GLSL_PROFILE_ES | GST_GLSL_PROFILE_COMPATIBILITY,
+      gst_gl_shader_string_vertex_default);
+}
+
+/**
+ * gst_glsl_stage_new_with_default_fragment:
+ * @context: a #GstGLContext
+ *
+ * Returns: (transfer full): a new #GstGLSLStage with the default fragment shader
+ */
+GstGLSLStage *
+gst_glsl_stage_new_default_fragment (GstGLContext * context)
+{
+  return gst_glsl_stage_new_with_string (context, GL_FRAGMENT_SHADER,
+      GST_GLSL_VERSION_NONE,
+      GST_GLSL_PROFILE_ES | GST_GLSL_PROFILE_COMPATIBILITY,
+      gst_gl_shader_string_fragment_default);
+}
+
+/**
+ * gst_glsl_stage_set_strings:
+ * @stage: a #GstGLSLStage
+ * @version: a #GstGLSLVersion
+ * @profile: a #GstGLSLProfile
+ * @n_strings: number of strings in @str
+ * @str: (transfer none): a GLSL shader string
+ *
+ * Replaces the current shader string with @str.
+ */
+gboolean
+gst_glsl_stage_set_strings (GstGLSLStage * stage, GstGLSLVersion version,
+    GstGLSLProfile profile, gint n_strings, const gchar ** str)
+{
+  gint i;
+
+  g_return_val_if_fail (GST_IS_GLSL_STAGE (stage), FALSE);
+  g_return_val_if_fail (n_strings > 0, FALSE);
+  g_return_val_if_fail (str != NULL, FALSE);
+
+  if (!gst_gl_context_supports_glsl_profile_version (stage->context, version,
+          profile)) {
+    const gchar *version_str = gst_glsl_version_to_string (version);
+    const gchar *profile_str = gst_glsl_profile_to_string (profile);
+    GST_ERROR_OBJECT (stage, "GL context does not support version %s and "
+        "profile %s", version_str, profile_str);
+    return FALSE;
+  }
+
+  stage->priv->version = version;
+  stage->priv->profile = profile;
+
+  for (i = 0; i < stage->priv->n_strings; i++) {
+    g_free (stage->priv->strings[i]);
+  }
+
+  if (stage->priv->n_strings < n_strings) {
+    /* only realloc if we need more space */
+    g_free (stage->priv->strings);
+    stage->priv->strings = g_new0 (gchar *, n_strings);
+  }
+
+  for (i = 0; i < n_strings; i++)
+    stage->priv->strings[i] = g_strdup (str[i]);
+  stage->priv->n_strings = n_strings;
+
+  return TRUE;
+}
+
+/**
+ * gst_glsl_stage_get_shader_type:
+ * @stage: a #GstGLSLStage
+ *
+ * Returns: The GL shader type for this shader stage
+ */
+guint
+gst_glsl_stage_get_shader_type (GstGLSLStage * stage)
+{
+  g_return_val_if_fail (GST_IS_GLSL_STAGE (stage), 0);
+
+  return stage->priv->type;
+}
+
+/**
+ * gst_glsl_stage_get_handle:
+ * @stage: a #GstGLSLStage
+ *
+ * Returns: The GL handle for this shader stage
+ */
+guint
+gst_glsl_stage_get_handle (GstGLSLStage * stage)
+{
+  g_return_val_if_fail (GST_IS_GLSL_STAGE (stage), 0);
+  g_return_val_if_fail (stage->priv->compiled, 0);
+
+  return stage->priv->handle;
+}
+
+/**
+ * gst_glsl_stage_get_version:
+ * @stage: a #GstGLSLStage
+ *
+ * Returns: The GLSL version for the current shader stage
+ */
+GstGLSLVersion
+gst_glsl_stage_get_version (GstGLSLStage * stage)
+{
+  g_return_val_if_fail (GST_IS_GLSL_STAGE (stage), 0);
+
+  return stage->priv->version;
+}
+
+/**
+ * gst_glsl_stage_get_profile:
+ * @stage: a #GstGLSLStage
+ *
+ * Returns: The GLSL profile for the current shader stage
+ */
+GstGLSLProfile
+gst_glsl_stage_get_profile (GstGLSLStage * stage)
+{
+  g_return_val_if_fail (GST_IS_GLSL_STAGE (stage), 0);
+
+  return stage->priv->profile;
+}
+
+static void
+_maybe_prepend_version (GstGLSLStage * stage, gchar ** shader_str,
+    gint * n_vertex_sources, const gchar *** vertex_sources)
+{
+  gint n = *n_vertex_sources;
+  gboolean add_header = FALSE;
+  gint i, j;
+
+  /* FIXME: this all an educated guess */
+  if (gst_gl_context_check_gl_version (stage->context, GST_GL_API_OPENGL3, 3, 0)
+      && (stage->priv->profile & GST_GLSL_PROFILE_ES) != 0
+      && !_gst_glsl_shader_string_find_version (shader_str[0])) {
+    add_header = TRUE;
+    n++;
+  }
+
+  *vertex_sources = g_malloc0 (n * sizeof (gchar *));
+
+  i = 0;
+  if (add_header)
+    (*vertex_sources)[i++] = es2_version_header;
+
+  for (j = 0; j < stage->priv->n_strings; i++, j++)
+    (*vertex_sources)[i] = shader_str[j];
+  *n_vertex_sources = n;
+}
+
+struct compile
+{
+  GstGLSLStage *stage;
+  GError **error;
+  gboolean result;
+};
+
+static void
+_compile_shader (GstGLContext * context, struct compile *data)
+{
+  GstGLSLStagePrivate *priv = data->stage->priv;
+  GstGLSLFuncs *vtable = &data->stage->priv->vtable;
+  const GstGLFuncs *gl = context->gl_vtable;
+  const gchar **vertex_sources;
+  gchar info_buffer[2048];
+  gint n_vertex_sources;
+  GLint status;
+  gint len;
+  gint i;
+
+  if (data->stage->priv->compiled) {
+    data->result = TRUE;
+    return;
+  }
+
+  if (!_ensure_shader (data->stage)) {
+    g_set_error (data->error, GST_GLSL_ERROR, GST_GLSL_ERROR_COMPILE,
+        "Failed to create shader object");
+    data->result = FALSE;
+    return;
+  }
+
+  n_vertex_sources = data->stage->priv->n_strings;
+  _maybe_prepend_version (data->stage, priv->strings, &n_vertex_sources,
+      &vertex_sources);
+
+  GST_TRACE_OBJECT (data->stage, "compiling shader:");
+  for (i = 0; i < n_vertex_sources; i++) {
+    GST_TRACE_OBJECT (data->stage, "%s", vertex_sources[i]);
+  }
+
+  gl->ShaderSource (priv->handle, n_vertex_sources,
+      (const gchar **) vertex_sources, NULL);
+  gl->CompileShader (priv->handle);
+  g_free (vertex_sources);
+  /* FIXME: supported threaded GLSL compilers and don't destroy compilation
+   * performance by getting the compilation result directly after compilation */
+  status = GL_FALSE;
+  vtable->GetShaderiv (priv->handle, GL_COMPILE_STATUS, &status);
+
+  len = 0;
+  vtable->GetShaderInfoLog (priv->handle, sizeof (info_buffer) - 1, &len,
+      info_buffer);
+  info_buffer[len] = '\0';
+
+  if (status != GL_TRUE) {
+    GST_ERROR_OBJECT (data->stage, "%s shader compilation failed:%s",
+        _shader_type_to_string (priv->type), info_buffer);
+
+    g_set_error (data->error, GST_GLSL_ERROR, GST_GLSL_ERROR_COMPILE,
+        "%s shader compilation failed:%s",
+        _shader_type_to_string (priv->type), info_buffer);
+
+    vtable->DeleteShader (priv->handle);
+    data->result = FALSE;
+    return;
+  } else if (len > 1) {
+    GST_FIXME_OBJECT (data->stage, "%s shader info log:%s",
+        _shader_type_to_string (priv->type), info_buffer);
+  }
+
+  data->result = TRUE;
+}
+
+/**
+ * gst_glsl_stage_compile:
+ * @stage: a #GstGLSLStage
+ * @error: a #GError to use on failure
+ *
+ * Returns: whether the compilation suceeded
+ */
+gboolean
+gst_glsl_stage_compile (GstGLSLStage * stage, GError ** error)
+{
+  struct compile data;
+
+  g_return_val_if_fail (GST_IS_GLSL_STAGE (stage), FALSE);
+
+  if (!stage->priv->strings) {
+    g_set_error (error, GST_GLSL_ERROR, GST_GLSL_ERROR_COMPILE,
+        "No shader source to compile");
+    return FALSE;
+  }
+
+  data.stage = stage;
+  data.error = error;
+
+  gst_gl_context_thread_add (stage->context,
+      (GstGLContextThreadFunc) _compile_shader, &data);
+
+  stage->priv->compiled = TRUE;
+
+  return data.result;
+}
diff --git a/gst-libs/gst/gl/gstglslstage.h b/gst-libs/gst/gl/gstglslstage.h
new file mode 100644
index 0000000..31dcbec
--- /dev/null
+++ b/gst-libs/gst/gl/gstglslstage.h
@@ -0,0 +1,94 @@
+/*
+ * GStreamer
+ * Copyright (C) 2015 Matthew Waters <matthew@centricular.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifndef __GST_GLSL_STAGE_H__
+#define __GST_GLSL_STAGE_H__
+
+#include <gst/gl/gstglsl.h>
+
+G_BEGIN_DECLS
+
+#define GST_TYPE_GLSL_STAGE         (gst_glsl_stage_get_type())
+#define GST_GLSL_STAGE(o)           (G_TYPE_CHECK_INSTANCE_CAST((o), GST_TYPE_GLSL_STAGE, GstGLSLStage))
+#define GST_GLSL_STAGE_CLASS(k)     (G_TYPE_CHECK_CLASS((k), GST_TYPE_GLSL_STAGE, GstGLSLStageClass))
+#define GST_IS_GLSL_STAGE(o)        (G_TYPE_CHECK_INSTANCE_TYPE((o), GST_TYPE_GLSL_STAGE))
+#define GST_IS_GLSL_STAGE_CLASS(k)  (G_TYPE_CHECK_CLASS_TYPE((k), GST_TYPE_GLSL_STAGE))
+#define GST_GLSL_STAGE_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS((o), GST_TYPE_GLSL_STAGE, GstGLSLStageClass))
+
+/**
+ * GstGLSLStage:
+ *
+ * Opaque #GstGLSLStage struct
+ */
+struct _GstGLSLStage
+{
+  /*< private >*/
+  GstObject parent;
+
+  GstGLContext *context;
+
+  GstGLSLStagePrivate *priv;
+
+  gpointer _padding[GST_PADDING];
+};
+
+/**
+ * GstGLSLStageClass:
+ *
+ * Opaque #GstGLSLStageClass struct
+ */
+struct _GstGLSLStageClass
+{
+  /*< private >*/
+  GstObjectClass parent;
+};
+
+GType          gst_glsl_stage_get_type          (void);
+GstGLSLStage * gst_glsl_stage_new               (GstGLContext * context, guint type);
+GstGLSLStage * gst_glsl_stage_new_with_string   (GstGLContext * context,
+                                                 guint type,
+                                                 GstGLSLVersion version,
+                                                 GstGLSLProfile profile,
+                                                 const gchar * str);
+GstGLSLStage * gst_glsl_stage_new_with_strings  (GstGLContext * context,
+                                                 guint type,
+                                                 GstGLSLVersion version,
+                                                 GstGLSLProfile profile,
+                                                 gint n_strings,
+                                                 const gchar ** str);
+
+GstGLSLStage * gst_glsl_stage_new_default_fragment (GstGLContext * context);
+GstGLSLStage * gst_glsl_stage_new_default_vertex   (GstGLContext * context);
+
+guint          gst_glsl_stage_get_handle        (GstGLSLStage * stage);
+GstGLSLProfile gst_glsl_stage_get_profile       (GstGLSLStage * stage);
+GstGLSLVersion gst_glsl_stage_get_version       (GstGLSLStage * stage);
+guint          gst_glsl_stage_get_shader_type   (GstGLSLStage * stage);
+gboolean       gst_glsl_stage_set_strings       (GstGLSLStage * stage,
+                                                 GstGLSLVersion version,
+                                                 GstGLSLProfile profile,
+                                                 gint n_strings,
+                                                 const gchar ** str);
+gboolean       gst_glsl_stage_compile           (GstGLSLStage * stage,
+                                                 GError ** error);
+
+G_END_DECLS
+
+#endif /* __GST_GLSL_STAGE_H__ */
diff --git a/gst-libs/gst/gl/gstglsyncmeta.c b/gst-libs/gst/gl/gstglsyncmeta.c
index f680353..b4061d3 100644
--- a/gst-libs/gst/gl/gstglsyncmeta.c
+++ b/gst-libs/gst/gl/gstglsyncmeta.c
@@ -37,13 +37,91 @@
 #ifndef GL_TIMEOUT_EXPIRED
 #define GL_TIMEOUT_EXPIRED 0x911B
 #endif
+#ifndef GL_TIMEOUT_IGNORED
+#define GL_TIMEOUT_IGNORED G_GUINT64_CONSTANT(0xFFFFFFFFFFFFFFFF)
+#endif
+
+static void
+_default_set_sync_gl (GstGLSyncMeta * sync_meta, GstGLContext * context)
+{
+  const GstGLFuncs *gl = context->gl_vtable;
+
+  if (gl->FenceSync) {
+    if (sync_meta->data) {
+      GST_LOG ("deleting sync object %p", sync_meta->data);
+      gl->DeleteSync ((GLsync) sync_meta->data);
+    }
+    sync_meta->data =
+        (gpointer) gl->FenceSync (GL_SYNC_GPU_COMMANDS_COMPLETE, 0);
+
+    if (gst_gl_context_is_shared (context))
+      /* if we only have a single context, the wait will flush for us */
+      gl->Flush ();
+    GST_LOG ("setting sync object %p", sync_meta->data);
+  } else {
+    /* XXX: this a little over the top if the CPU is never going to
+     * access the data, however this is the legacy path, so... */
+    gl->Finish ();
+  }
+}
+
+static void
+_default_wait_gl (GstGLSyncMeta * sync_meta, GstGLContext * context)
+{
+  const GstGLFuncs *gl = context->gl_vtable;
+
+  if (sync_meta->data && gl->WaitSync) {
+    GST_LOG ("waiting on sync object %p", sync_meta->data);
+    gl->WaitSync ((GLsync) sync_meta->data, 0, GL_TIMEOUT_IGNORED);
+  }
+}
+
+static void
+_default_wait_cpu_gl (GstGLSyncMeta * sync_meta, GstGLContext * context)
+{
+  const GstGLFuncs *gl = context->gl_vtable;
+  GLenum res;
+
+  if (sync_meta->data && gl->ClientWaitSync) {
+    do {
+      GST_LOG ("waiting on sync object %p", sync_meta->data);
+      res =
+          gl->ClientWaitSync ((GLsync) sync_meta->data,
+          GL_SYNC_FLUSH_COMMANDS_BIT, 1000000000 /* 1s */ );
+    } while (res == GL_TIMEOUT_EXPIRED);
+  }
+}
+
+static void
+_default_copy (GstGLSyncMeta * src, GstBuffer * sbuffer, GstGLSyncMeta * dest,
+    GstBuffer * dbuffer)
+{
+  GST_LOG ("copy sync object %p from meta %p to %p", src->data, src, dest);
+
+  /* Setting a sync point here relies on GstBuffer copying
+   * metas after data */
+  gst_gl_sync_meta_set_sync_point (src, src->context);
+}
+
+static void
+_default_free_gl (GstGLSyncMeta * sync_meta, GstGLContext * context)
+{
+  const GstGLFuncs *gl = context->gl_vtable;
+
+  if (sync_meta->data) {
+    GST_LOG ("deleting sync object %p", sync_meta->data);
+    gl->DeleteSync ((GLsync) sync_meta->data);
+    sync_meta->data = NULL;
+  }
+}
 
 GstGLSyncMeta *
-gst_buffer_add_gl_sync_meta (GstGLContext * context, GstBuffer * buffer)
+gst_buffer_add_gl_sync_meta_full (GstGLContext * context, GstBuffer * buffer,
+    gpointer data)
 {
   GstGLSyncMeta *meta;
 
-  g_return_val_if_fail (GST_GL_IS_CONTEXT (context), NULL);
+  g_return_val_if_fail (GST_IS_GL_CONTEXT (context), NULL);
 
   meta =
       (GstGLSyncMeta *) gst_buffer_add_meta ((buffer), GST_GL_SYNC_META_INFO,
@@ -53,60 +131,83 @@
     return NULL;
 
   meta->context = gst_object_ref (context);
-  meta->glsync = NULL;
+  meta->data = data;
 
   return meta;
 }
 
+GstGLSyncMeta *
+gst_buffer_add_gl_sync_meta (GstGLContext * context, GstBuffer * buffer)
+{
+  GstGLSyncMeta *ret = gst_buffer_add_gl_sync_meta_full (context, buffer, NULL);
+  if (!ret)
+    return NULL;
+
+  ret->set_sync_gl = _default_set_sync_gl;
+  ret->wait_gl = _default_wait_gl;
+  ret->wait_cpu_gl = _default_wait_cpu_gl;
+  ret->copy = _default_copy;
+  ret->free_gl = _default_free_gl;
+
+  return ret;
+}
+
 static void
 _set_sync_point (GstGLContext * context, GstGLSyncMeta * sync_meta)
 {
-  const GstGLFuncs *gl = context->gl_vtable;
+  g_assert (sync_meta->set_sync_gl != NULL);
 
-  if (gl->FenceSync) {
-    if (sync_meta->glsync) {
-      GST_LOG ("deleting sync object %p", sync_meta->glsync);
-      gl->DeleteSync (sync_meta->glsync);
-    }
-    sync_meta->glsync = gl->FenceSync (GL_SYNC_GPU_COMMANDS_COMPLETE, 0);
-    gl->Flush ();
-    GST_LOG ("setting sync object %p", sync_meta->glsync);
-  } else {
-    gl->Finish ();
-  }
+  GST_LOG ("setting sync point %p", sync_meta);
+  sync_meta->set_sync_gl (sync_meta, context);
 }
 
 void
 gst_gl_sync_meta_set_sync_point (GstGLSyncMeta * sync_meta,
     GstGLContext * context)
 {
-  gst_gl_context_thread_add (context,
-      (GstGLContextThreadFunc) _set_sync_point, sync_meta);
+  if (sync_meta->set_sync)
+    sync_meta->set_sync (sync_meta, context);
+  else
+    gst_gl_context_thread_add (context,
+        (GstGLContextThreadFunc) _set_sync_point, sync_meta);
 }
 
 static void
 _wait (GstGLContext * context, GstGLSyncMeta * sync_meta)
 {
-  const GstGLFuncs *gl = context->gl_vtable;
-  GLenum res;
+  g_assert (sync_meta->wait_gl != NULL);
 
-  if (gl->ClientWaitSync) {
-    do {
-      GST_LOG ("waiting on sync object %p", sync_meta->glsync);
-      res =
-          gl->ClientWaitSync (sync_meta->glsync, GL_SYNC_FLUSH_COMMANDS_BIT,
-          1000000000 /* 1s */ );
-    } while (res == GL_TIMEOUT_EXPIRED);
-  }
+  GST_LOG ("waiting %p", sync_meta);
+  sync_meta->wait_gl (sync_meta, context);
 }
 
 void
 gst_gl_sync_meta_wait (GstGLSyncMeta * sync_meta, GstGLContext * context)
 {
-  if (sync_meta->glsync) {
+  if (sync_meta->wait)
+    sync_meta->wait (sync_meta, context);
+  else
     gst_gl_context_thread_add (context,
         (GstGLContextThreadFunc) _wait, sync_meta);
-  }
+}
+
+static void
+_wait_cpu (GstGLContext * context, GstGLSyncMeta * sync_meta)
+{
+  g_assert (sync_meta->wait_cpu_gl != NULL);
+
+  GST_LOG ("waiting %p", sync_meta);
+  sync_meta->wait_cpu_gl (sync_meta, context);
+}
+
+void
+gst_gl_sync_meta_wait_cpu (GstGLSyncMeta * sync_meta, GstGLContext * context)
+{
+  if (sync_meta->wait_cpu)
+    sync_meta->wait_cpu (sync_meta, context);
+  else
+    gst_gl_context_thread_add (context,
+        (GstGLContextThreadFunc) _wait_cpu, sync_meta);
 }
 
 static gboolean
@@ -120,19 +221,26 @@
   if (GST_META_TRANSFORM_IS_COPY (type)) {
     GstMetaTransformCopy *copy = data;
 
+    g_assert (smeta->copy != NULL);
+
     if (!copy->region) {
       /* only copy if the complete data is copied as well */
-      dmeta = gst_buffer_add_gl_sync_meta (smeta->context, dest);
-
+      dmeta = gst_buffer_add_gl_sync_meta_full (smeta->context, dest, NULL);
       if (!dmeta)
         return FALSE;
 
-      GST_LOG ("copy sync object %p from meta %p to %p", smeta->glsync,
-          smeta, dmeta);
+      dmeta->set_sync = smeta->set_sync;
+      dmeta->set_sync_gl = smeta->set_sync_gl;
+      dmeta->wait = smeta->wait;
+      dmeta->wait_gl = smeta->wait_gl;
+      dmeta->wait_cpu = smeta->wait_cpu;
+      dmeta->wait_cpu_gl = smeta->wait_cpu_gl;
+      dmeta->copy = smeta->copy;
+      dmeta->free = smeta->free;
+      dmeta->free_gl = smeta->free_gl;
 
-      /* Setting a sync point here relies on GstBuffer copying
-       * metas after data */
-      gst_gl_sync_meta_set_sync_point (dmeta, smeta->context);
+      GST_LOG ("copying sync meta %p into %p", smeta, dmeta);
+      smeta->copy (smeta, buffer, dmeta, dest);
     }
   } else {
     /* return FALSE, if transform type is not supported */
@@ -145,22 +253,21 @@
 static void
 _free_gl_sync_meta (GstGLContext * context, GstGLSyncMeta * sync_meta)
 {
-  const GstGLFuncs *gl = context->gl_vtable;
+  g_assert (sync_meta->free_gl != NULL);
 
-  if (sync_meta->glsync) {
-    GST_LOG ("deleting sync object %p", sync_meta->glsync);
-    gl->DeleteSync (sync_meta->glsync);
-    sync_meta->glsync = NULL;
-  }
+  GST_LOG ("free sync meta %p", sync_meta);
+  sync_meta->free_gl (sync_meta, context);
 }
 
 static void
 _gst_gl_sync_meta_free (GstGLSyncMeta * sync_meta, GstBuffer * buffer)
 {
-  if (sync_meta->glsync) {
+  if (sync_meta->free)
+    sync_meta->free (sync_meta, sync_meta->context);
+  else
     gst_gl_context_thread_add (sync_meta->context,
         (GstGLContextThreadFunc) _free_gl_sync_meta, sync_meta);
-  }
+
   gst_object_unref (sync_meta->context);
 }
 
@@ -177,7 +284,16 @@
   }
 
   sync_meta->context = NULL;
-  sync_meta->glsync = NULL;
+  sync_meta->data = NULL;
+  sync_meta->set_sync = NULL;
+  sync_meta->set_sync_gl = NULL;
+  sync_meta->wait = NULL;
+  sync_meta->wait_gl = NULL;
+  sync_meta->wait_cpu = NULL;
+  sync_meta->wait_cpu_gl = NULL;
+  sync_meta->copy = NULL;
+  sync_meta->free = NULL;
+  sync_meta->free_gl = NULL;
 
   return TRUE;
 }
diff --git a/gst-libs/gst/gl/gstglsyncmeta.h b/gst-libs/gst/gl/gstglsyncmeta.h
index 9d79435..e5eb17b 100644
--- a/gst-libs/gst/gl/gstglsyncmeta.h
+++ b/gst-libs/gst/gl/gstglsyncmeta.h
@@ -32,12 +32,21 @@
 #define GST_BUFFER_POOL_OPTION_GL_SYNC_META "GstBufferPoolOptionGLSyncMeta"
 
 struct _GstGLSyncMeta {
-  /*< private >*/
   GstMeta parent;
 
   GstGLContext *context;
 
-  GLsync        glsync;
+  gpointer      data;
+
+  void (*set_sync) (GstGLSyncMeta * sync, GstGLContext * context);
+  void (*set_sync_gl) (GstGLSyncMeta * sync, GstGLContext * context);
+  void (*wait) (GstGLSyncMeta * sync, GstGLContext * context);
+  void (*wait_gl) (GstGLSyncMeta * sync, GstGLContext * context);
+  void (*wait_cpu) (GstGLSyncMeta * sync, GstGLContext * context);
+  void (*wait_cpu_gl) (GstGLSyncMeta * sync, GstGLContext * context);
+  void (*copy) (GstGLSyncMeta * src, GstBuffer * sbuffer, GstGLSyncMeta * dest, GstBuffer * dbuffer);
+  void (*free) (GstGLSyncMeta * sync, GstGLContext * context);
+  void (*free_gl) (GstGLSyncMeta * sync, GstGLContext * context);
 };
 
 GType gst_gl_sync_meta_api_get_type (void);
@@ -46,8 +55,11 @@
 #define gst_buffer_get_gl_sync_meta(b) ((GstGLSyncMeta*)gst_buffer_get_meta((b),GST_GL_SYNC_META_API_TYPE))
 
 GstGLSyncMeta *     gst_buffer_add_gl_sync_meta         (GstGLContext * context, GstBuffer *buffer);
+GstGLSyncMeta *     gst_buffer_add_gl_sync_meta_full    (GstGLContext * context, GstBuffer * buffer,
+                                                         gpointer data);
 void                gst_gl_sync_meta_set_sync_point     (GstGLSyncMeta * sync, GstGLContext * context);
 void                gst_gl_sync_meta_wait               (GstGLSyncMeta * sync, GstGLContext * context);
+void                gst_gl_sync_meta_wait_cpu           (GstGLSyncMeta * sync, GstGLContext * context);
 
 G_END_DECLS
 
diff --git a/gst-libs/gst/gl/gstglupload.c b/gst-libs/gst/gl/gstglupload.c
index 0addca1..eb25e15 100644
--- a/gst-libs/gst/gl/gstglupload.c
+++ b/gst-libs/gst/gl/gstglupload.c
@@ -31,6 +31,10 @@
 #include "egl/gsteglimagememory.h"
 #endif
 
+#if GST_GL_HAVE_DMABUF
+#include <gst/allocators/gstdmabuf.h>
+#endif
+
 /**
  * SECTION:gstglupload
  * @short_description: an object that uploads to GL textures
@@ -56,11 +60,27 @@
 G_DEFINE_TYPE_WITH_CODE (GstGLUpload, gst_gl_upload, GST_TYPE_OBJECT,
     DEBUG_INIT);
 static void gst_gl_upload_finalize (GObject * object);
-static void gst_gl_upload_release_buffer_unlocked (GstGLUpload * upload);
 
 #define GST_GL_UPLOAD_GET_PRIVATE(obj) (G_TYPE_INSTANCE_GET_PRIVATE ((obj), \
     GST_TYPE_GL_UPLOAD, GstGLUploadPrivate))
 
+static GstGLTextureTarget
+_caps_get_texture_target (GstCaps * caps, GstGLTextureTarget default_target)
+{
+  GstGLTextureTarget ret = 0;
+  GstStructure *s = gst_caps_get_structure (caps, 0);
+
+  if (gst_structure_has_field_typed (s, "texture-target", G_TYPE_STRING)) {
+    const gchar *target_str = gst_structure_get_string (s, "texture-target");
+    ret = gst_gl_texture_target_from_string (target_str);
+  }
+
+  if (!ret)
+    ret = default_target;
+
+  return ret;
+}
+
 /* Define the maximum number of planes we can upload - handle 2 views per buffer */
 #define GST_GL_UPLOAD_MAX_PLANES (GST_VIDEO_MAX_PLANES * 2)
 
@@ -85,22 +105,59 @@
 };
 
 static GstCaps *
-_set_caps_features (const GstCaps * caps, const gchar * feature_name)
+_set_caps_features_with_passthrough (const GstCaps * caps,
+    const gchar * feature_name, GstCapsFeatures * passthrough)
 {
-  GstCaps *tmp = gst_caps_copy (caps);
-  guint n = gst_caps_get_size (tmp);
-  guint i = 0;
+  guint i, j, m, n;
+  GstCaps *tmp;
 
+  tmp = gst_caps_copy (caps);
+
+  n = gst_caps_get_size (caps);
   for (i = 0; i < n; i++) {
-    GstCapsFeatures *features;
+    GstCapsFeatures *features, *orig_features;
 
+    orig_features = gst_caps_get_features (caps, i);
     features = gst_caps_features_new (feature_name, NULL);
+
+    m = gst_caps_features_get_size (orig_features);
+    for (j = 0; j < m; j++) {
+      const gchar *feature = gst_caps_features_get_nth (orig_features, j);
+
+      /* if we already have the features */
+      if (gst_caps_features_contains (features, feature))
+        continue;
+
+      if (g_strcmp0 (feature, GST_CAPS_FEATURE_MEMORY_SYSTEM_MEMORY) == 0)
+        continue;
+
+      if (gst_caps_features_contains (passthrough, feature)) {
+        gst_caps_features_add (features, feature);
+      }
+    }
+
     gst_caps_set_features (tmp, i, features);
   }
 
   return tmp;
 }
 
+static GstCaps *
+_caps_intersect_texture_target (GstCaps * caps, GstGLTextureTarget target_mask)
+{
+  GValue targets = G_VALUE_INIT;
+  GstCaps *ret, *target;
+
+  target = gst_caps_copy (caps);
+  gst_gl_value_set_texture_target_from_mask (&targets, target_mask);
+  gst_caps_set_value (target, "texture-target", &targets);
+
+  ret = gst_caps_intersect_full (caps, target, GST_CAPS_INTERSECT_FIRST);
+
+  gst_caps_unref (target);
+  return ret;
+}
+
 typedef enum
 {
   METHOD_FLAG_CAN_SHARE_CONTEXT = 1,
@@ -122,7 +179,6 @@
       GstQuery * query);
     GstGLUploadReturn (*perform) (gpointer impl, GstBuffer * buffer,
       GstBuffer ** outbuf);
-  void (*release) (gpointer impl, GstBuffer * buffer);
   void (*free) (gpointer impl);
 } _UploadMethod;
 
@@ -145,7 +201,39 @@
 _gl_memory_upload_transform_caps (GstGLContext * context,
     GstPadDirection direction, GstCaps * caps)
 {
-  return _set_caps_features (caps, GST_CAPS_FEATURE_MEMORY_GL_MEMORY);
+  GstCapsFeatures *passthrough =
+      gst_caps_features_from_string
+      (GST_CAPS_FEATURE_META_GST_VIDEO_OVERLAY_COMPOSITION);
+  GstCaps *ret;
+
+  ret =
+      _set_caps_features_with_passthrough (caps,
+      GST_CAPS_FEATURE_MEMORY_GL_MEMORY, passthrough);
+
+  gst_caps_features_free (passthrough);
+
+  if (direction == GST_PAD_SINK) {
+    GstGLTextureTarget target_mask = 0;
+    GstCaps *tmp;
+
+    target_mask |= 1 << GST_GL_TEXTURE_TARGET_2D;
+    target_mask |= 1 << GST_GL_TEXTURE_TARGET_RECTANGLE;
+    target_mask |= 1 << GST_GL_TEXTURE_TARGET_EXTERNAL_OES;
+    tmp = _caps_intersect_texture_target (ret, target_mask);
+    gst_caps_unref (ret);
+    ret = tmp;
+  } else {
+    gint i, n;
+
+    n = gst_caps_get_size (ret);
+    for (i = 0; i < n; i++) {
+      GstStructure *s = gst_caps_get_structure (ret, i);
+
+      gst_structure_remove_fields (s, "texture-target", NULL);
+    }
+  }
+
+  return ret;
 }
 
 static gboolean
@@ -194,16 +282,26 @@
     GstQuery * query)
 {
   struct GLMemoryUpload *upload = impl;
-  GstAllocationParams params;
-  GstAllocator *allocator;
   GstBufferPool *pool = NULL;
   guint n_pools, i;
+  GstCaps *caps;
+  GstCapsFeatures *features;
 
-  gst_allocation_params_init (&params);
+  gst_query_parse_allocation (query, &caps, NULL);
+  features = gst_caps_get_features (caps, 0);
 
-  allocator = gst_allocator_find (GST_GL_MEMORY_ALLOCATOR);
-  gst_query_add_allocation_param (query, allocator, &params);
-  gst_object_unref (allocator);
+  /* Only offer our custom allocator if that type of memory was negotiated. */
+  if (gst_caps_features_contains (features, GST_CAPS_FEATURE_MEMORY_GL_MEMORY)) {
+    GstAllocator *allocator;
+    GstAllocationParams params;
+    gst_allocation_params_init (&params);
+
+    allocator =
+        GST_ALLOCATOR (gst_gl_memory_allocator_get_default (upload->upload->
+            context));
+    gst_query_add_allocation_param (query, allocator, &params);
+    gst_object_unref (allocator);
+  }
 
   n_pools = gst_query_get_n_allocation_pools (query);
   for (i = 0; i < n_pools; i++) {
@@ -217,10 +315,8 @@
   if (!pool) {
     GstStructure *config;
     GstVideoInfo info;
-    GstCaps *caps;
     gsize size;
 
-    gst_query_parse_allocation (query, &caps, NULL);
 
     if (!gst_video_info_from_caps (&info, caps))
       goto invalid_caps;
@@ -233,6 +329,17 @@
     gst_buffer_pool_config_set_params (config, caps, size, 0, 0);
     gst_buffer_pool_config_add_option (config,
         GST_BUFFER_POOL_OPTION_GL_SYNC_META);
+    if (upload->upload->priv->out_caps) {
+      GstGLTextureTarget target;
+      const gchar *target_pool_option_str;
+
+      target =
+          _caps_get_texture_target (upload->upload->priv->out_caps,
+          GST_GL_TEXTURE_TARGET_2D);
+      target_pool_option_str =
+          gst_gl_texture_target_to_buffer_pool_option (target);
+      gst_buffer_pool_config_add_option (config, target_pool_option_str);
+    }
 
     if (!gst_buffer_pool_set_config (pool, config)) {
       gst_object_unref (pool);
@@ -276,7 +383,8 @@
             gl_mem->mem.context))
       return GST_GL_UPLOAD_UNSHARED_GL_CONTEXT;
 
-    gst_gl_memory_upload_transfer (gl_mem);
+    if (gst_is_gl_memory_pbo (mem))
+      gst_gl_memory_pbo_upload_transfer ((GstGLMemoryPBO *) mem);
   }
 
   *outbuf = gst_buffer_ref (buffer);
@@ -285,11 +393,6 @@
 }
 
 static void
-_gl_memory_upload_release (gpointer impl, GstBuffer * buffer)
-{
-}
-
-static void
 _gl_memory_upload_free (gpointer impl)
 {
   g_free (impl);
@@ -309,7 +412,6 @@
   &_gl_memory_upload_accept,
   &_gl_memory_upload_propose_allocation,
   &_gl_memory_upload_perform,
-  &_gl_memory_upload_release,
   &_gl_memory_upload_free
 };
 
@@ -319,6 +421,7 @@
   GstGLUpload *upload;
   GstBuffer *buffer;
   GstBuffer **outbuf;
+  GstGLVideoAllocationParams *params;
 };
 
 static gpointer
@@ -335,15 +438,39 @@
 _egl_image_upload_transform_caps (GstGLContext * context,
     GstPadDirection direction, GstCaps * caps)
 {
+  GstCapsFeatures *passthrough =
+      gst_caps_features_from_string
+      (GST_CAPS_FEATURE_META_GST_VIDEO_OVERLAY_COMPOSITION);
   GstCaps *ret;
 
   if (direction == GST_PAD_SINK) {
-    ret = _set_caps_features (caps, GST_CAPS_FEATURE_MEMORY_GL_MEMORY);
+    GstCaps *tmp;
+
+    ret =
+        _set_caps_features_with_passthrough (caps,
+        GST_CAPS_FEATURE_MEMORY_GL_MEMORY, passthrough);
+
+    tmp = _caps_intersect_texture_target (ret, 1 << GST_GL_TEXTURE_TARGET_2D);
+    gst_caps_unref (ret);
+    ret = tmp;
   } else {
-    ret = _set_caps_features (caps, GST_CAPS_FEATURE_MEMORY_EGL_IMAGE);
+    gint i, n;
+
+    ret =
+        _set_caps_features_with_passthrough (caps,
+        GST_CAPS_FEATURE_MEMORY_EGL_IMAGE, passthrough);
     gst_caps_set_simple (ret, "format", G_TYPE_STRING, "RGBA", NULL);
+
+    n = gst_caps_get_size (ret);
+    for (i = 0; i < n; i++) {
+      GstStructure *s = gst_caps_get_structure (ret, i);
+
+      gst_structure_remove_fields (s, "texture-target", NULL);
+    }
   }
 
+  gst_caps_features_free (passthrough);
+
   return ret;
 }
 
@@ -367,6 +494,14 @@
   if (!ret)
     return FALSE;
 
+  if (image->params)
+    gst_gl_allocation_params_free ((GstGLAllocationParams *) image->params);
+  if (!(image->params =
+          gst_gl_video_allocation_params_new (image->upload->context, NULL,
+              &image->upload->priv->in_info, -1, NULL,
+              GST_GL_TEXTURE_TARGET_2D)))
+    return FALSE;
+
   if (buffer) {
     GstVideoInfo *in_info = &image->upload->priv->in_info;
     guint expected_memories = GST_VIDEO_INFO_N_PLANES (in_info);
@@ -395,13 +530,22 @@
     GstQuery * query)
 {
   struct EGLImageUpload *image = impl;
-  GstAllocationParams params;
-  GstAllocator *allocator;
+  GstCaps *caps;
+  GstCapsFeatures *features;
 
-  gst_allocation_params_init (&params);
+  gst_query_parse_allocation (query, &caps, NULL);
+  features = gst_caps_get_features (caps, 0);
 
-  if (gst_gl_context_check_feature (image->upload->context,
+  /* Only offer our custom allocator if that type of memory was negotiated. */
+  if (gst_caps_features_contains (features,
+          GST_CAPS_FEATURE_MEMORY_EGL_IMAGE) &&
+      gst_gl_context_check_feature (image->upload->context,
           "EGL_KHR_image_base")) {
+    GstAllocationParams params;
+    GstAllocator *allocator;
+
+    gst_allocation_params_init (&params);
+
     allocator = gst_allocator_find (GST_EGL_IMAGE_MEMORY_TYPE);
     gst_query_add_allocation_param (query, allocator, &params);
     gst_object_unref (allocator);
@@ -412,12 +556,17 @@
 _egl_image_upload_perform_gl_thread (GstGLContext * context,
     struct EGLImageUpload *image)
 {
+  GstGLMemoryAllocator *allocator;
   guint i, n;
 
+  allocator =
+      GST_GL_MEMORY_ALLOCATOR (gst_allocator_find
+      (GST_GL_MEMORY_PBO_ALLOCATOR_NAME));
+
   /* FIXME: buffer pool */
   *image->outbuf = gst_buffer_new ();
-  gst_gl_memory_setup_buffer (image->upload->context,
-      NULL, &image->upload->priv->out_info, NULL, *image->outbuf);
+  gst_gl_memory_setup_buffer (allocator, *image->outbuf, image->params);
+  gst_object_unref (allocator);
 
   n = gst_buffer_n_memory (image->buffer);
   for (i = 0; i < n; i++) {
@@ -435,8 +584,8 @@
   }
 
   if (GST_IS_GL_BUFFER_POOL (image->buffer->pool))
-    gst_gl_buffer_pool_replace_last_buffer (GST_GL_BUFFER_POOL (image->
-            buffer->pool), image->buffer);
+    gst_gl_buffer_pool_replace_last_buffer (GST_GL_BUFFER_POOL (image->buffer->
+            pool), image->buffer);
 }
 
 static GstGLUploadReturn
@@ -458,13 +607,13 @@
 }
 
 static void
-_egl_image_upload_release (gpointer impl, GstBuffer * buffer)
-{
-}
-
-static void
 _egl_image_upload_free (gpointer impl)
 {
+  struct EGLImageUpload *image = impl;
+
+  if (image->params)
+    gst_gl_allocation_params_free ((GstGLAllocationParams *) image->params);
+
   g_free (impl);
 }
 
@@ -481,10 +630,282 @@
   &_egl_image_upload_accept,
   &_egl_image_upload_propose_allocation,
   &_egl_image_upload_perform,
-  &_egl_image_upload_release,
   &_egl_image_upload_free
 };
-#endif
+#endif /* GST_GL_HAVE_PLATFORM_EGL */
+
+#if GST_GL_HAVE_DMABUF
+struct DmabufUpload
+{
+  GstGLUpload *upload;
+
+  GstMemory *eglimage[GST_VIDEO_MAX_PLANES];
+  GstBuffer *outbuf;
+  GstGLVideoAllocationParams *params;
+};
+
+static GstStaticCaps _dma_buf_upload_caps =
+GST_STATIC_CAPS (GST_VIDEO_CAPS_MAKE (GST_GL_MEMORY_VIDEO_FORMATS_STR));
+
+static gpointer
+_dma_buf_upload_new (GstGLUpload * upload)
+{
+  struct DmabufUpload *dmabuf = g_new0 (struct DmabufUpload, 1);
+  dmabuf->upload = upload;
+  return dmabuf;
+}
+
+static GstCaps *
+_dma_buf_upload_transform_caps (GstGLContext * context,
+    GstPadDirection direction, GstCaps * caps)
+{
+  GstCapsFeatures *passthrough =
+      gst_caps_features_from_string
+      (GST_CAPS_FEATURE_META_GST_VIDEO_OVERLAY_COMPOSITION);
+  GstCaps *ret;
+
+  if (direction == GST_PAD_SINK) {
+    GstCaps *tmp;
+
+    ret =
+        _set_caps_features_with_passthrough (caps,
+        GST_CAPS_FEATURE_MEMORY_GL_MEMORY, passthrough);
+
+    tmp = _caps_intersect_texture_target (ret, 1 << GST_GL_TEXTURE_TARGET_2D);
+    gst_caps_unref (ret);
+    ret = tmp;
+  } else {
+    gint i, n;
+
+    ret =
+        _set_caps_features_with_passthrough (caps,
+        GST_CAPS_FEATURE_MEMORY_SYSTEM_MEMORY, passthrough);
+
+    n = gst_caps_get_size (ret);
+    for (i = 0; i < n; i++) {
+      GstStructure *s = gst_caps_get_structure (ret, i);
+
+      gst_structure_remove_fields (s, "texture-target", NULL);
+    }
+  }
+
+  gst_caps_features_free (passthrough);
+
+  return ret;
+}
+
+static GQuark
+_eglimage_quark (gint plane)
+{
+  static GQuark quark[4] = { 0 };
+  static const gchar *quark_str[] = {
+    "GstGLDMABufEGLImage0",
+    "GstGLDMABufEGLImage1",
+    "GstGLDMABufEGLImage2",
+    "GstGLDMABufEGLImage3",
+  };
+
+  if (!quark[plane])
+    quark[plane] = g_quark_from_static_string (quark_str[plane]);
+
+  return quark[plane];
+}
+
+static GstMemory *
+_get_cached_eglimage (GstMemory * mem, gint plane)
+{
+  return gst_mini_object_get_qdata (GST_MINI_OBJECT (mem),
+      _eglimage_quark (plane));
+}
+
+static void
+_set_cached_eglimage (GstMemory * mem, GstMemory * eglimage, gint plane)
+{
+  return gst_mini_object_set_qdata (GST_MINI_OBJECT (mem),
+      _eglimage_quark (plane), eglimage, (GDestroyNotify) gst_memory_unref);
+}
+
+static gboolean
+_dma_buf_upload_accept (gpointer impl, GstBuffer * buffer, GstCaps * in_caps,
+    GstCaps * out_caps)
+{
+  struct DmabufUpload *dmabuf = impl;
+  GstVideoInfo *in_info = &dmabuf->upload->priv->in_info;
+  guint n_planes = GST_VIDEO_INFO_N_PLANES (in_info);
+  GstVideoMeta *meta;
+  guint n_mem;
+  guint mems_idx[GST_VIDEO_MAX_PLANES];
+  gsize mems_skip[GST_VIDEO_MAX_PLANES];
+  GstMemory *mems[GST_VIDEO_MAX_PLANES];
+  guint i;
+
+  n_mem = gst_buffer_n_memory (buffer);
+  meta = gst_buffer_get_video_meta (buffer);
+
+  /* dmabuf upload is only supported with EGL contexts. */
+  if (!GST_IS_GL_CONTEXT_EGL (dmabuf->upload->context))
+    return FALSE;
+
+  if (!gst_gl_context_check_feature (dmabuf->upload->context,
+          "EGL_KHR_image_base"))
+    return FALSE;
+
+  /* This will eliminate most non-dmabuf out there */
+  if (!gst_is_dmabuf_memory (gst_buffer_peek_memory (buffer, 0)))
+    return FALSE;
+
+  /* We cannot have multiple dmabuf per plane */
+  if (n_mem > n_planes)
+    return FALSE;
+
+  /* Update video info based on video meta */
+  if (meta) {
+    in_info->width = meta->width;
+    in_info->height = meta->height;
+
+    for (i = 0; i < meta->n_planes; i++) {
+      in_info->offset[i] = meta->offset[i];
+      in_info->stride[i] = meta->stride[i];
+    }
+  }
+
+  if (dmabuf->params)
+    gst_gl_allocation_params_free ((GstGLAllocationParams *) dmabuf->params);
+  if (!(dmabuf->params =
+          gst_gl_video_allocation_params_new (dmabuf->upload->context, NULL,
+              &dmabuf->upload->priv->in_info, -1, NULL,
+              GST_GL_TEXTURE_TARGET_2D)))
+    return FALSE;
+
+  /* Find and validate all memories */
+  for (i = 0; i < n_planes; i++) {
+    guint plane_size;
+    guint length;
+
+    plane_size = gst_gl_get_plane_data_size (in_info, NULL, i);
+
+    if (!gst_buffer_find_memory (buffer, in_info->offset[i], plane_size,
+            &mems_idx[i], &length, &mems_skip[i]))
+      return FALSE;
+
+    /* We can't have more then one dmabuf per plane */
+    if (length != 1)
+      return FALSE;
+
+    mems[i] = gst_buffer_peek_memory (buffer, mems_idx[i]);
+
+    /* And all memory found must be dmabuf */
+    if (!gst_is_dmabuf_memory (mems[i]))
+      return FALSE;
+  }
+
+  /* Now create an EGLImage for each dmabufs */
+  for (i = 0; i < n_planes; i++) {
+    /* check if one is cached */
+    dmabuf->eglimage[i] = _get_cached_eglimage (mems[i], i);
+    if (dmabuf->eglimage[i])
+      continue;
+
+    /* otherwise create one and cache it */
+    dmabuf->eglimage[i] =
+        gst_egl_image_memory_from_dmabuf (dmabuf->upload->context,
+        gst_dmabuf_memory_get_fd (mems[i]), in_info, i, mems_skip[i]);
+
+    if (!dmabuf->eglimage[i])
+      return FALSE;
+
+    _set_cached_eglimage (mems[i], dmabuf->eglimage[i], i);
+  }
+
+  return TRUE;
+}
+
+static void
+_dma_buf_upload_propose_allocation (gpointer impl, GstQuery * decide_query,
+    GstQuery * query)
+{
+  /* nothing to do for now. */
+}
+
+static void
+_dma_buf_upload_perform_gl_thread (GstGLContext * context,
+    struct DmabufUpload *dmabuf)
+{
+  GstGLMemoryAllocator *allocator;
+  guint i, n;
+
+  allocator =
+      GST_GL_MEMORY_ALLOCATOR (gst_allocator_find
+      (GST_GL_MEMORY_PBO_ALLOCATOR_NAME));
+
+  /* FIXME: buffer pool */
+  dmabuf->outbuf = gst_buffer_new ();
+  gst_gl_memory_setup_buffer (allocator, dmabuf->outbuf, dmabuf->params);
+  gst_object_unref (allocator);
+
+  n = gst_buffer_n_memory (dmabuf->outbuf);
+  for (i = 0; i < n; i++) {
+    const GstGLFuncs *gl = NULL;
+    GstGLMemory *gl_mem =
+        (GstGLMemory *) gst_buffer_peek_memory (dmabuf->outbuf, i);
+
+    if (!dmabuf->eglimage[i]) {
+      g_clear_pointer (&dmabuf->outbuf, gst_buffer_unref);
+      return;
+    }
+
+    gl = GST_GL_CONTEXT (((GstEGLImageMemory *) gl_mem)->context)->gl_vtable;
+
+    gl->ActiveTexture (GL_TEXTURE0 + i);
+    gl->BindTexture (GL_TEXTURE_2D, gl_mem->tex_id);
+    gl->EGLImageTargetTexture2D (GL_TEXTURE_2D,
+        gst_egl_image_memory_get_image (dmabuf->eglimage[i]));
+  }
+}
+
+static GstGLUploadReturn
+_dma_buf_upload_perform (gpointer impl, GstBuffer * buffer, GstBuffer ** outbuf)
+{
+  struct DmabufUpload *dmabuf = impl;
+
+  gst_gl_context_thread_add (dmabuf->upload->context,
+      (GstGLContextThreadFunc) _dma_buf_upload_perform_gl_thread, dmabuf);
+
+  if (!dmabuf->outbuf)
+    return GST_GL_UPLOAD_ERROR;
+
+  gst_buffer_add_parent_buffer_meta (dmabuf->outbuf, buffer);
+
+  *outbuf = dmabuf->outbuf;
+  dmabuf->outbuf = NULL;
+
+  return GST_GL_UPLOAD_DONE;
+}
+
+static void
+_dma_buf_upload_free (gpointer impl)
+{
+  struct DmabufUpload *dmabuf = impl;
+
+  if (dmabuf->params)
+    gst_gl_allocation_params_free ((GstGLAllocationParams *) dmabuf->params);
+
+  g_free (impl);
+}
+
+static const UploadMethod _dma_buf_upload = {
+  "Dmabuf",
+  0,
+  &_dma_buf_upload_caps,
+  &_dma_buf_upload_new,
+  &_dma_buf_upload_transform_caps,
+  &_dma_buf_upload_accept,
+  &_dma_buf_upload_propose_allocation,
+  &_dma_buf_upload_perform,
+  &_dma_buf_upload_free
+};
+
+#endif /* GST_GL_HAVE_DMABUF */
 
 struct GLUploadMeta
 {
@@ -493,6 +914,7 @@
   gboolean result;
   GstVideoGLTextureUploadMeta *meta;
   guint texture_ids[GST_GL_UPLOAD_MAX_PLANES];
+  GstGLVideoAllocationParams *params;
 };
 
 static gpointer
@@ -509,17 +931,39 @@
 _upload_meta_upload_transform_caps (GstGLContext * context,
     GstPadDirection direction, GstCaps * caps)
 {
+  GstCapsFeatures *passthrough =
+      gst_caps_features_from_string
+      (GST_CAPS_FEATURE_META_GST_VIDEO_OVERLAY_COMPOSITION);
   GstCaps *ret;
 
   if (direction == GST_PAD_SINK) {
-    ret = _set_caps_features (caps, GST_CAPS_FEATURE_MEMORY_GL_MEMORY);
-  } else {
+    GstCaps *tmp;
+
     ret =
-        _set_caps_features (caps,
-        GST_CAPS_FEATURE_META_GST_VIDEO_GL_TEXTURE_UPLOAD_META);
+        _set_caps_features_with_passthrough (caps,
+        GST_CAPS_FEATURE_MEMORY_GL_MEMORY, passthrough);
+
+    tmp = _caps_intersect_texture_target (ret, 1 << GST_GL_TEXTURE_TARGET_2D);
+    gst_caps_unref (ret);
+    ret = tmp;
+  } else {
+    gint i, n;
+
+    ret =
+        _set_caps_features_with_passthrough (caps,
+        GST_CAPS_FEATURE_META_GST_VIDEO_GL_TEXTURE_UPLOAD_META, passthrough);
     gst_caps_set_simple (ret, "format", G_TYPE_STRING, "RGBA", NULL);
+
+    n = gst_caps_get_size (ret);
+    for (i = 0; i < n; i++) {
+      GstStructure *s = gst_caps_get_structure (ret, i);
+
+      gst_structure_remove_fields (s, "texture-target", NULL);
+    }
   }
 
+  gst_caps_features_free (passthrough);
+
   return ret;
 }
 
@@ -545,6 +989,14 @@
   if (!ret)
     return ret;
 
+  if (upload->params)
+    gst_gl_allocation_params_free ((GstGLAllocationParams *) upload->params);
+  if (!(upload->params =
+          gst_gl_video_allocation_params_new (upload->upload->context, NULL,
+              &upload->upload->priv->in_info, -1, NULL,
+              GST_GL_TEXTURE_TARGET_2D)))
+    return FALSE;
+
   if (buffer) {
     if ((meta = gst_buffer_get_video_gl_texture_upload_meta (buffer)) == NULL)
       return FALSE;
@@ -574,11 +1026,11 @@
   gpointer handle;
 
   gl_apis =
-      gst_gl_api_to_string (gst_gl_context_get_gl_api (upload->upload->
-          context));
-  platform =
-      gst_gl_platform_to_string (gst_gl_context_get_gl_platform (upload->
+      gst_gl_api_to_string (gst_gl_context_get_gl_api (upload->
           upload->context));
+  platform =
+      gst_gl_platform_to_string (gst_gl_context_get_gl_platform
+      (upload->upload->context));
   handle = (gpointer) gst_gl_context_get_gl_context (upload->upload->context);
 
   gl_context =
@@ -618,6 +1070,9 @@
   int i;
   GstVideoInfo *in_info = &upload->upload->priv->in_info;
   guint max_planes = GST_VIDEO_INFO_N_PLANES (in_info);
+  GstGLMemoryAllocator *allocator;
+
+  allocator = gst_gl_memory_allocator_get_default (upload->upload->context);
 
   /* Support stereo views for separated multiview mode */
   if (GST_VIDEO_INFO_MULTIVIEW_MODE (in_info) ==
@@ -630,8 +1085,8 @@
 
   /* FIXME: buffer pool */
   *outbuf = gst_buffer_new ();
-  gst_gl_memory_setup_buffer (upload->upload->context,
-      NULL, &upload->upload->priv->in_info, NULL, *outbuf);
+  gst_gl_memory_setup_buffer (allocator, *outbuf, upload->params);
+  gst_object_unref (allocator);
 
   for (i = 0; i < GST_GL_UPLOAD_MAX_PLANES; i++) {
     guint tex_id = 0;
@@ -661,11 +1116,6 @@
 }
 
 static void
-_upload_meta_upload_release (gpointer impl, GstBuffer * buffer)
-{
-}
-
-static void
 _upload_meta_upload_free (gpointer impl)
 {
   struct GLUploadMeta *upload = impl;
@@ -678,6 +1128,10 @@
       gst_gl_context_del_texture (upload->upload->context,
           &upload->texture_ids[i]);
   }
+
+  if (upload->params)
+    gst_gl_allocation_params_free ((GstGLAllocationParams *) upload->params);
+
   g_free (upload);
 }
 
@@ -694,7 +1148,6 @@
   &_upload_meta_upload_accept,
   &_upload_meta_upload_propose_allocation,
   &_upload_meta_upload_perform,
-  &_upload_meta_upload_release,
   &_upload_meta_upload_free
 };
 
@@ -708,6 +1161,7 @@
 {
   GstGLUpload *upload;
   struct RawUploadFrame *in_frame;
+  GstGLVideoAllocationParams *params;
 };
 
 static struct RawUploadFrame *
@@ -771,14 +1225,41 @@
 _raw_data_upload_transform_caps (GstGLContext * context,
     GstPadDirection direction, GstCaps * caps)
 {
+  GstCapsFeatures *passthrough =
+      gst_caps_features_from_string
+      (GST_CAPS_FEATURE_META_GST_VIDEO_OVERLAY_COMPOSITION);
   GstCaps *ret;
 
   if (direction == GST_PAD_SINK) {
-    ret = _set_caps_features (caps, GST_CAPS_FEATURE_MEMORY_GL_MEMORY);
+    GstGLTextureTarget target_mask = 0;
+    GstCaps *tmp;
+
+    ret =
+        _set_caps_features_with_passthrough (caps,
+        GST_CAPS_FEATURE_MEMORY_GL_MEMORY, passthrough);
+
+    target_mask |= 1 << GST_GL_TEXTURE_TARGET_2D;
+    target_mask |= 1 << GST_GL_TEXTURE_TARGET_RECTANGLE;
+    tmp = _caps_intersect_texture_target (ret, target_mask);
+    gst_caps_unref (ret);
+    ret = tmp;
   } else {
-    ret = _set_caps_features (caps, GST_CAPS_FEATURE_MEMORY_SYSTEM_MEMORY);
+    gint i, n;
+
+    ret =
+        _set_caps_features_with_passthrough (caps,
+        GST_CAPS_FEATURE_MEMORY_SYSTEM_MEMORY, passthrough);
+
+    n = gst_caps_get_size (ret);
+    for (i = 0; i < n; i++) {
+      GstStructure *s = gst_caps_get_structure (ret, i);
+
+      gst_structure_remove_fields (s, "texture-target", NULL);
+    }
   }
 
+  gst_caps_features_free (passthrough);
+
   return ret;
 }
 
@@ -793,8 +1274,19 @@
   if (!gst_caps_features_contains (features, GST_CAPS_FEATURE_MEMORY_GL_MEMORY))
     return FALSE;
 
+  if (raw->in_frame)
+    _raw_upload_frame_unref (raw->in_frame);
   raw->in_frame = _raw_upload_frame_new (raw, buffer);
 
+  if (raw->params)
+    gst_gl_allocation_params_free ((GstGLAllocationParams *) raw->params);
+  if (!(raw->params =
+          gst_gl_video_allocation_params_new_wrapped_data (raw->upload->context,
+              NULL, &raw->upload->priv->in_info, -1, NULL,
+              GST_GL_TEXTURE_TARGET_2D, NULL, raw->in_frame,
+              (GDestroyNotify) _raw_upload_frame_unref)))
+    return FALSE;
+
   return (raw->in_frame != NULL);
 }
 
@@ -809,37 +1301,43 @@
 _raw_data_upload_perform (gpointer impl, GstBuffer * buffer,
     GstBuffer ** outbuf)
 {
-  GstGLMemory *in_tex[GST_GL_UPLOAD_MAX_PLANES] = { 0, };
+  GstGLBaseMemoryAllocator *allocator;
   struct RawUpload *raw = impl;
   int i;
   GstVideoInfo *in_info = &raw->upload->priv->in_info;
-  guint max_planes = GST_VIDEO_INFO_N_PLANES (in_info);
+  guint n_mem = GST_VIDEO_INFO_N_PLANES (in_info);
 
-  /* Support stereo views for separated multiview mode */
-  if (GST_VIDEO_INFO_MULTIVIEW_MODE (in_info) ==
-      GST_VIDEO_MULTIVIEW_MODE_SEPARATED)
-    max_planes *= GST_VIDEO_INFO_VIEWS (in_info);
-
-  gst_gl_memory_setup_wrapped (raw->upload->context,
-      &raw->upload->priv->in_info, NULL, raw->in_frame->frame.data, in_tex,
-      raw->in_frame, (GDestroyNotify) _raw_upload_frame_unref);
+  allocator =
+      GST_GL_BASE_MEMORY_ALLOCATOR (gst_gl_memory_allocator_get_default
+      (raw->upload->context));
 
   /* FIXME Use a buffer pool to cache the generated textures */
+  /* FIXME: multiview support with separated left/right frames? */
   *outbuf = gst_buffer_new ();
-  for (i = 0; i < max_planes; i++) {
+  for (i = 0; i < n_mem; i++) {
+    GstGLBaseMemory *tex;
+
+    raw->params->parent.wrapped_data = raw->in_frame->frame.data[i];
+    raw->params->plane = i;
+
+    tex =
+        gst_gl_base_memory_alloc (allocator,
+        (GstGLAllocationParams *) raw->params);
+    if (!tex) {
+      gst_buffer_unref (*outbuf);
+      *outbuf = NULL;
+      GST_ERROR_OBJECT (raw->upload, "Failed to allocate wrapped texture");
+      return GST_GL_UPLOAD_ERROR;
+    }
+
     _raw_upload_frame_ref (raw->in_frame);
-    gst_buffer_append_memory (*outbuf, (GstMemory *) in_tex[i]);
+    gst_buffer_append_memory (*outbuf, (GstMemory *) tex);
   }
+  gst_object_unref (allocator);
 
-  return GST_GL_UPLOAD_DONE;
-}
-
-static void
-_raw_data_upload_release (gpointer impl, GstBuffer * buffer)
-{
-  struct RawUpload *raw = impl;
   _raw_upload_frame_unref (raw->in_frame);
   raw->in_frame = NULL;
+  return GST_GL_UPLOAD_DONE;
 }
 
 static void
@@ -847,6 +1345,9 @@
 {
   struct RawUpload *raw = impl;
 
+  if (raw->params)
+    gst_gl_allocation_params_free ((GstGLAllocationParams *) raw->params);
+
   g_free (raw);
 }
 
@@ -862,7 +1363,6 @@
   &_raw_data_upload_accept,
   &_raw_data_upload_propose_allocation,
   &_raw_data_upload_perform,
-  &_raw_data_upload_release,
   &_raw_data_upload_free
 };
 
@@ -870,6 +1370,9 @@
 #if GST_GL_HAVE_PLATFORM_EGL
   &_egl_image_upload,
 #endif
+#if GST_GL_HAVE_DMABUF
+  &_dma_buf_upload,
+#endif
   &_upload_meta_upload, &_raw_data_upload
 };
 
@@ -945,8 +1448,6 @@
 
   upload = GST_GL_UPLOAD (object);
 
-  gst_gl_upload_release_buffer_unlocked (upload);
-
   if (upload->priv->method_impl)
     upload->priv->method->free (upload->priv->method_impl);
   upload->priv->method_i = 0;
@@ -994,9 +1495,6 @@
       tmp = gst_caps_merge (tmp, tmp2);
   }
 
-  tmp = gst_gl_overlay_compositor_add_caps (tmp);
-
-
   if (filter) {
     result = gst_caps_intersect_full (filter, tmp, GST_CAPS_INTERSECT_FIRST);
     gst_caps_unref (tmp);
@@ -1097,32 +1595,6 @@
   GST_OBJECT_UNLOCK (upload);
 }
 
-static void
-gst_gl_upload_release_buffer_unlocked (GstGLUpload * upload)
-{
-  if (upload->priv->outbuf && upload->priv->method_impl) {
-    upload->priv->method->release (upload->priv->method_impl,
-        upload->priv->outbuf);
-    gst_buffer_replace (&upload->priv->outbuf, NULL);
-  }
-}
-
-/**
- * gst_gl_upload_release_buffer:
- * @upload: a #GstGLUpload
- *
- * Releases any buffers currently referenced by @upload
- */
-void
-gst_gl_upload_release_buffer (GstGLUpload * upload)
-{
-  g_return_if_fail (upload != NULL);
-
-  GST_OBJECT_LOCK (upload);
-  gst_gl_upload_release_buffer_unlocked (upload);
-  GST_OBJECT_UNLOCK (upload);
-}
-
 static gboolean
 _upload_find_method (GstGLUpload * upload)
 {
@@ -1148,11 +1620,11 @@
 /**
  * gst_gl_upload_perform_with_buffer:
  * @upload: a #GstGLUpload
- * @buffer: a #GstBuffer
- * @outbuf_ptr: (allow-none): resulting buffer
+ * @buffer: input #GstBuffer
+ * @outbuf_ptr: resulting #GstBuffer
  *
- * Uploads @buffer to the texture given by @tex_id.  @tex_id is valid
- * until gst_gl_upload_release_buffer() is called.
+ * Uploads @buffer using the transformation specified by
+ * gst_gl_upload_set_caps() creating a new #GstBuffer in @outbuf_ptr.
  *
  * Returns: whether the upload was successful
  */
@@ -1161,14 +1633,14 @@
     GstBuffer ** outbuf_ptr)
 {
   GstGLUploadReturn ret = GST_GL_UPLOAD_ERROR;
+  GstBuffer *outbuf;
 
   g_return_val_if_fail (GST_IS_GL_UPLOAD (upload), FALSE);
   g_return_val_if_fail (GST_IS_BUFFER (buffer), FALSE);
+  g_return_val_if_fail (outbuf_ptr != NULL, FALSE);
 
   GST_OBJECT_LOCK (upload);
 
-  gst_gl_upload_release_buffer_unlocked (upload);
-
 #define NEXT_METHOD \
 do { \
   if (!_upload_find_method (upload)) { \
@@ -1188,7 +1660,7 @@
 
   ret =
       upload->priv->method->perform (upload->priv->method_impl, buffer,
-      &upload->priv->outbuf);
+      &outbuf);
   if (ret == GST_GL_UPLOAD_UNSHARED_GL_CONTEXT) {
     upload->priv->method->free (upload->priv->method_impl);
     upload->priv->method = &_raw_data_upload;
@@ -1197,18 +1669,15 @@
   } else if (ret == GST_GL_UPLOAD_DONE) {
     /* we are done */
   } else {
-    gst_gl_upload_release_buffer_unlocked (upload);
     upload->priv->method->free (upload->priv->method_impl);
     upload->priv->method_impl = NULL;
     NEXT_METHOD;
   }
 
-  if (outbuf_ptr) {
-    if (buffer != upload->priv->outbuf)
-      gst_buffer_copy_into (upload->priv->outbuf, buffer,
-          GST_BUFFER_COPY_FLAGS | GST_BUFFER_COPY_TIMESTAMPS, 0, -1);
-    *outbuf_ptr = gst_buffer_ref (upload->priv->outbuf);
-  }
+  if (buffer != outbuf)
+    gst_buffer_copy_into (outbuf, buffer,
+        GST_BUFFER_COPY_FLAGS | GST_BUFFER_COPY_TIMESTAMPS, 0, -1);
+  *outbuf_ptr = outbuf;
 
   GST_OBJECT_UNLOCK (upload);
 
diff --git a/gst-libs/gst/gl/gstglupload.h b/gst-libs/gst/gl/gstglupload.h
index 5bc4346..577c94b 100644
--- a/gst-libs/gst/gl/gstglupload.h
+++ b/gst-libs/gst/gl/gstglupload.h
@@ -98,8 +98,7 @@
 
 GstGLUploadReturn gst_gl_upload_perform_with_buffer (GstGLUpload * upload,
                                                     GstBuffer * buffer,
-                                                    GstBuffer ** outbuf);
-void              gst_gl_upload_release_buffer     (GstGLUpload * upload);
+                                                    GstBuffer ** outbuf_ptr);
 
 G_END_DECLS
 
diff --git a/gst-libs/gst/gl/gstgluploadmeta.c b/gst-libs/gst/gl/gstgluploadmeta.c
deleted file mode 100644
index e47e006..0000000
--- a/gst-libs/gst/gl/gstgluploadmeta.c
+++ /dev/null
@@ -1,380 +0,0 @@
-/*
- * GStreamer
- * Copyright (C) 2012-2014 Matthew Waters <ystree00@gmail.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include <stdio.h>
-
-#include "gl.h"
-#include "gstgluploadmeta.h"
-
-/**
- * SECTION:gstgluploadmeta
- * @short_description: an object that provides #GstVideoGLTextureUploadMeta
- * @see_also: #GstGLUpload, #GstGLMemory
- *
- * #GstGLUploadMeta is an object that uploads data from system memory into GL textures.
- *
- * A #GstGLUpload can be created with gst_gl_upload_new()
- */
-
-#define USING_OPENGL(context) (gst_gl_context_check_gl_version (context, GST_GL_API_OPENGL, 1, 0))
-#define USING_OPENGL3(context) (gst_gl_context_check_gl_version (context, GST_GL_API_OPENGL3, 3, 1))
-#define USING_GLES(context) (gst_gl_context_check_gl_version (context, GST_GL_API_GLES, 1, 0))
-#define USING_GLES2(context) (gst_gl_context_check_gl_version (context, GST_GL_API_GLES2, 2, 0))
-#define USING_GLES3(context) (gst_gl_context_check_gl_version (context, GST_GL_API_GLES2, 3, 0))
-
-/* *INDENT-OFF* */
-
-struct _GstGLUploadMetaPrivate
-{
-  GstBuffer *buffer;
-  gboolean initted;
-
-  GstGLMemory *in_tex[GST_VIDEO_MAX_PLANES];
-  GstGLMemory *out_tex[GST_VIDEO_MAX_PLANES];
-};
-
-GST_DEBUG_CATEGORY_STATIC (gst_gl_upload_meta_debug);
-#define GST_CAT_DEFAULT gst_gl_upload_meta_debug
-
-#define DEBUG_INIT \
-  GST_DEBUG_CATEGORY_INIT (gst_gl_upload_meta_debug, "gluploadmeta", 0, "uploadmeta");
-
-G_DEFINE_TYPE_WITH_CODE (GstGLUploadMeta, gst_gl_upload_meta, GST_TYPE_OBJECT, DEBUG_INIT);
-static void gst_gl_upload_meta_finalize (GObject * object);
-static void gst_gl_upload_meta_reset (GstGLUploadMeta * upload);
-
-#define GST_GL_UPLOAD_META_GET_PRIVATE(obj) (G_TYPE_INSTANCE_GET_PRIVATE ((obj), \
-    GST_TYPE_GL_UPLOAD_META, GstGLUploadMetaPrivate))
-
-static void
-gst_gl_upload_meta_class_init (GstGLUploadMetaClass * klass)
-{
-  g_type_class_add_private (klass, sizeof (GstGLUploadMetaPrivate));
-
-  G_OBJECT_CLASS (klass)->finalize = gst_gl_upload_meta_finalize;
-}
-
-static void
-gst_gl_upload_meta_init (GstGLUploadMeta * upload)
-{
-  upload->priv = GST_GL_UPLOAD_META_GET_PRIVATE (upload);
-
-  upload->context = NULL;
-
-  gst_video_info_set_format (&upload->info, GST_VIDEO_FORMAT_ENCODED, 0, 0);
-}
-
-/**
- * gst_gl_upload_meta_new:
- * @context: a #GstGLContext
- *
- * Returns: a new #GstGLUploadMeta object
- */
-GstGLUploadMeta *
-gst_gl_upload_meta_new (GstGLContext * context)
-{
-  GstGLUploadMeta *upload;
-
-  upload = g_object_new (GST_TYPE_GL_UPLOAD_META, NULL);
-
-  upload->context = gst_object_ref (context);
-
-  GST_DEBUG_OBJECT (upload, "Created upload for context %"GST_PTR_FORMAT, upload->context);
-  
-  return upload;
-}
-
-static void
-gst_gl_upload_meta_finalize (GObject * object)
-{
-  GstGLUploadMeta *upload;
-
-  GST_DEBUG_OBJECT (object, "Finalizing");
-  upload = GST_GL_UPLOAD_META (object);
-
-  gst_gl_upload_meta_reset (upload);
-
-  if (upload->context) {
-    gst_object_unref (upload->context);
-    upload->context = NULL;
-  }
-
-  G_OBJECT_CLASS (gst_gl_upload_meta_parent_class)->finalize (object);
-}
-
-static void
-gst_gl_upload_meta_reset (GstGLUploadMeta * upload)
-{
-  guint i;
-
-  for (i = 0; i < GST_VIDEO_MAX_PLANES; i++) {
-    if (upload->priv->out_tex[i]) {
-      gst_memory_unref ((GstMemory *) upload->priv->out_tex[i]);
-      upload->priv->out_tex[i] = NULL;
-    }
-  }
-
-  for (i = 0; i < GST_VIDEO_MAX_PLANES; i++) {
-    if (upload->priv->in_tex[i]) {
-      gst_memory_unref ((GstMemory *) upload->priv->in_tex[i]);
-      upload->priv->in_tex[i] = NULL;
-    }
-  }
-}
-
-static void
-_gst_gl_upload_meta_set_format_unlocked (GstGLUploadMeta * upload,
-    GstVideoInfo *info)
-{
-  g_return_if_fail (upload != NULL);
-  g_return_if_fail (GST_VIDEO_INFO_FORMAT (info) !=
-      GST_VIDEO_FORMAT_UNKNOWN);
-  g_return_if_fail (GST_VIDEO_INFO_FORMAT (info) !=
-      GST_VIDEO_FORMAT_ENCODED);
-
-  if (gst_video_info_is_equal (&upload->info, info))
-    return;
-
-  gst_gl_upload_meta_reset (upload);
-  upload->info = *info;
-  upload->priv->initted = FALSE;
-}
-
-/**
- * gst_gl_upload_meta_set_format:
- * @upload: a #GstGLUpload
- * @info: input #GstVideoInfo
- *
- * Initializes @upload with the information required for upload.
- */
-void
-gst_gl_upload_meta_set_format (GstGLUploadMeta * upload, GstVideoInfo * info)
-{
-  GST_OBJECT_LOCK (upload);
-  _gst_gl_upload_meta_set_format_unlocked (upload, info);
-  GST_OBJECT_UNLOCK (upload);
-}
-
-/**
- * gst_gl_upload_meta_get_format:
- * @upload: a #GstGLUpload
- *
- * Returns: (transfer none): The #GstVideoInfo set by
- * gst_gl_upload_meta_set_format()
- */
-GstVideoInfo *
-gst_gl_upload_meta_get_format (GstGLUploadMeta * upload)
-{
-  GstVideoInfo *ret;
-
-  GST_OBJECT_LOCK (upload);
-  ret = &upload->info;
-  GST_OBJECT_LOCK (upload);
-
-  return ret;
-}
-
-static gboolean
-_perform_with_gl_memory (GstGLUploadMeta * upload, GstVideoGLTextureUploadMeta *
-    meta, guint texture_id[4])
-{
-  gboolean res = TRUE;
-  gint i;
-
-  for (i = 0; i < GST_VIDEO_INFO_N_PLANES (&upload->info); i++) {
-    GstGLMemory *in_mem = upload->priv->in_tex[i];
-
-    if (GST_MEMORY_FLAG_IS_SET (in_mem, GST_GL_BASE_BUFFER_FLAG_NEED_UPLOAD)) {
-      GstMapInfo map_info;
-      guint tex_id;
-
-      tex_id = in_mem->tex_id;
-      in_mem->tex_id = texture_id[i];
-
-      if (!gst_memory_map ((GstMemory *) in_mem, &map_info, GST_MAP_READ | GST_MAP_GL)) {
-        GST_WARNING_OBJECT (upload, "Failed to map GL memory");
-        res = FALSE;
-      }
-      gst_memory_unmap ((GstMemory *) in_mem, &map_info);
-
-      in_mem->tex_id = tex_id;
-      GST_MINI_OBJECT_FLAG_SET (in_mem, GST_GL_BASE_BUFFER_FLAG_NEED_UPLOAD);
-    } else {
-      GstGLMemory *out_mem;
-      gint mem_width, mem_height;
-
-      if (!upload->priv->out_tex[i]) {
-        /* the GL upload meta creates GL_TEXTURE_2D textures */
-        upload->priv->out_tex[i] = gst_gl_memory_wrapped_texture (upload->context,
-            texture_id[i], GL_TEXTURE_2D, &upload->info, i, NULL, NULL, NULL);
-      }
-
-      out_mem = upload->priv->out_tex[i];
-
-      if (out_mem->tex_id != texture_id[i]) {
-        out_mem->tex_id = texture_id[i];
-        GST_MINI_OBJECT_FLAG_SET (out_mem, GST_GL_BASE_BUFFER_FLAG_NEED_DOWNLOAD);
-      }
-
-      mem_width = gst_gl_memory_get_texture_width (out_mem);
-      mem_height = gst_gl_memory_get_texture_height (out_mem);
-
-      if (!(res = gst_gl_memory_copy_into_texture (in_mem, out_mem->tex_id,
-            out_mem->tex_type, mem_width, mem_height,
-            GST_VIDEO_INFO_PLANE_STRIDE (&out_mem->info, out_mem->plane),
-            FALSE)))
-        break;
-    }
-  }
-
-  return res;
-}
-
-static gboolean
-_perform_with_data_unlocked (GstGLUploadMeta * upload,
-    GstVideoGLTextureUploadMeta * meta, 
-    gpointer data[GST_VIDEO_MAX_PLANES], guint texture_id[4])
-{
-  guint i;
-
-  for (i = 0; i < GST_VIDEO_INFO_N_PLANES (&upload->info); i++) {
-    if (!upload->priv->in_tex[i])
-      upload->priv->in_tex[i] = gst_gl_memory_wrapped (upload->context,
-          &upload->info, i, NULL, data[i], NULL, NULL);
-  }
-
-  return _perform_with_gl_memory (upload, meta, texture_id);
-}
-
-static gboolean
-_perform_for_gl_texture_upload_meta (GstVideoGLTextureUploadMeta *
-    meta, guint texture_id[4])
-{
-  GstGLUploadMeta *upload;
-  GstVideoFrame frame;
-  GstMemory *mem;
-  gboolean ret;
-  guint i, n;
-
-  g_return_val_if_fail (meta != NULL, FALSE);
-  g_return_val_if_fail (texture_id != NULL, FALSE);
-
-  upload = meta->user_data;
-
-  GST_OBJECT_LOCK (upload);
-
-  if (!upload->priv->initted) {
-    GstVideoInfo info;
-    GstVideoMeta *v_meta = gst_buffer_get_video_meta (upload->priv->buffer);
-    gint i;
-
-    if (!(ret = v_meta != NULL))
-      goto out;
-
-    gst_video_info_init (&info);
-    info.finfo = gst_video_format_get_info (v_meta->format);
-    info.width = v_meta->width;
-    info.height = v_meta->height;
-
-    for (i = 0; i < info.finfo->n_planes; i++) {
-      info.offset[i] = v_meta->offset[i];
-      info.stride[i] = v_meta->stride[i];
-    }
-
-    _gst_gl_upload_meta_set_format_unlocked (upload, &info);
-    upload->priv->initted = TRUE;
-  }
-
-  GST_LOG ("Uploading for meta with textures %i,%i,%i,%i", texture_id[0],
-      texture_id[1], texture_id[2], texture_id[3]);
-
-  /* GstGLMemory */
-  n = gst_buffer_n_memory (upload->priv->buffer);
-  mem = gst_buffer_peek_memory (upload->priv->buffer, 0);
-
-  if (gst_is_gl_memory (mem) && n == GST_VIDEO_INFO_N_PLANES (&upload->info)) {
-    for (i = 0; i < GST_VIDEO_INFO_N_PLANES (&upload->info); i++)
-      upload->priv->in_tex[i] = (GstGLMemory *) gst_buffer_peek_memory (upload->priv->buffer, i);
-
-    ret = _perform_with_gl_memory (upload, meta, texture_id);
-
-    for (i = 0; i < GST_VIDEO_INFO_N_PLANES (&upload->info); i++)
-      upload->priv->in_tex[i] = NULL;
-
-    if (ret)
-      goto out;
-  }
-
-  if (!(ret = gst_video_frame_map (&frame, &upload->info, upload->priv->buffer,
-          GST_MAP_READ))) {
-    GST_ERROR ("failed to map video frame");
-    goto out;
-  }
-
-  /* update the video info from the one updated by frame_map using video meta */
-  _gst_gl_upload_meta_set_format_unlocked (upload, &frame.info);
-
-  ret = _perform_with_data_unlocked (upload, meta, frame.data, texture_id);
-
-  gst_video_frame_unmap (&frame);
-
-out:
-  GST_OBJECT_UNLOCK (upload);
-  return ret;
-}
-
-/**
- * gst_gl_upload_meta_add_to_buffer:
- * @upload: a #GstGLUploadMeta
- * @buffer: a #GstBuffer
- *
- * Adds a #GstVideoGLTextureUploadMeta on @buffer using @upload
- *
- * Returns: whether it was successful
- */
-gboolean
-gst_gl_upload_meta_add_to_buffer (GstGLUploadMeta * upload, GstBuffer * buffer)
-{
-  GstVideoGLTextureType texture_types[GST_VIDEO_MAX_PLANES];
-  GstVideoMeta *v_meta;
-  gint i;
-
-  g_return_val_if_fail (upload != NULL, FALSE);
-  g_return_val_if_fail (buffer != NULL, FALSE);
-  v_meta = gst_buffer_get_video_meta (buffer);
-  g_return_val_if_fail (v_meta != NULL, FALSE);
-
-  upload->priv->buffer = buffer;
-
-  for (i = 0; i < GST_VIDEO_MAX_PLANES; i++) {
-    texture_types[i] = gst_gl_texture_type_from_format (upload->context, v_meta->format, i);
-  }
-
-  gst_buffer_add_video_gl_texture_upload_meta (buffer,
-      GST_VIDEO_GL_TEXTURE_ORIENTATION_X_NORMAL_Y_NORMAL, 1, texture_types,
-      _perform_for_gl_texture_upload_meta, gst_object_ref (upload),
-      gst_object_ref, gst_object_unref);
-
-  return TRUE;
-}
diff --git a/gst-libs/gst/gl/gstgluploadmeta.h b/gst-libs/gst/gl/gstgluploadmeta.h
deleted file mode 100644
index 199be2a..0000000
--- a/gst-libs/gst/gl/gstgluploadmeta.h
+++ /dev/null
@@ -1,79 +0,0 @@
-/*
- * GStreamer
- * Copyright (C) 2012 Matthew Waters <ystree00@gmail.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-#ifndef __GST_GL_UPLOAD_META_H__
-#define __GST_GL_UPLOAD_META_H__
-
-#include <gst/video/video.h>
-#include <gst/gstmemory.h>
-
-#include <gst/gl/gstgl_fwd.h>
-
-G_BEGIN_DECLS
-
-GType gst_gl_upload_meta_get_type (void);
-#define GST_TYPE_GL_UPLOAD_META (gst_gl_upload_meta_get_type())
-#define GST_GL_UPLOAD_META(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_GL_UPLOAD_META,GstGLUploadMeta))
-#define GST_GL_UPLOAD_META_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_GL_UPLOAD_META,GstGLUploadMetaClass))
-#define GST_IS_GL_UPLOAD_META(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_GL_UPLOAD_META))
-#define GST_IS_GL_UPLOAD_META_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_GL_UPLOAD_META))
-#define GST_GL_UPLOAD_META_CAST(obj) ((GstGLUploadMeta*)(obj))
-
-/**
- * GstGLUploadMeta
- *
- * Opaque #GstGLUploadMeta object
- */
-struct _GstGLUploadMeta
-{
-  /* <private> */
-  GstObject        parent;
-
-  GstGLContext    *context;
-
-  /* input data */
-  GstVideoInfo     info;
-
-  /* <private> */
-  GstGLUploadMetaPrivate *priv;
-
-  gpointer _reserved[GST_PADDING];
-};
-
-/**
- * GstGLUploadMetaClass:
- *
- * The #GstGLUploadMetaClass struct only contains private data
- */
-struct _GstGLUploadMetaClass
-{
-  GstObjectClass object_class;
-};
-
-GstGLUploadMeta * gst_gl_upload_meta_new            (GstGLContext * context);
-
-void           gst_gl_upload_meta_set_format    (GstGLUploadMeta * upload, GstVideoInfo * info);
-GstVideoInfo * gst_gl_upload_meta_get_format    (GstGLUploadMeta * upload);
-
-gboolean       gst_gl_upload_meta_add_to_buffer (GstGLUploadMeta * upload, GstBuffer * buffer);
-
-G_END_DECLS
-
-#endif /* __GST_GL_UPLOAD_META_H__ */
diff --git a/gst-libs/gst/gl/gstglutils.c b/gst-libs/gst/gl/gstglutils.c
index 0c0642a..0290efb 100644
--- a/gst-libs/gst/gl/gstglutils.c
+++ b/gst-libs/gst/gl/gstglutils.c
@@ -24,6 +24,7 @@
 #include <stdio.h>
 
 #include <gst/gst.h>
+#include <glib/gprintf.h>
 
 #include "gl.h"
 #include "gstglutils.h"
@@ -374,20 +375,65 @@
   gst_object_unref (frame);
 }
 
-static void
-_compile_shader (GstGLContext * context, GstGLShader ** shader)
+struct _compile_shader
 {
+  GstGLShader **shader;
+  const gchar *vertex_src;
+  const gchar *fragment_src;
+};
+
+static void
+_compile_shader (GstGLContext * context, struct _compile_shader *data)
+{
+  GstGLShader *shader;
+  GstGLSLStage *vert, *frag;
   GError *error = NULL;
 
-  gst_gl_shader_compile (*shader, &error);
-  if (error) {
-    gst_gl_context_set_error (context, "%s", error->message);
+  shader = gst_gl_shader_new (context);
+
+  if (data->vertex_src) {
+    vert = gst_glsl_stage_new_with_string (context, GL_VERTEX_SHADER,
+        GST_GLSL_VERSION_NONE,
+        GST_GLSL_PROFILE_ES | GST_GLSL_PROFILE_COMPATIBILITY, data->vertex_src);
+    if (!gst_glsl_stage_compile (vert, &error)) {
+      GST_ERROR_OBJECT (vert, "%s", error->message);
+      gst_object_unref (vert);
+      gst_object_unref (shader);
+      return;
+    }
+    if (!gst_gl_shader_attach (shader, vert)) {
+      gst_object_unref (shader);
+      return;
+    }
+  }
+
+  if (data->fragment_src) {
+    frag = gst_glsl_stage_new_with_string (context, GL_FRAGMENT_SHADER,
+        GST_GLSL_VERSION_NONE,
+        GST_GLSL_PROFILE_ES | GST_GLSL_PROFILE_COMPATIBILITY,
+        data->fragment_src);
+    if (!gst_glsl_stage_compile (frag, &error)) {
+      GST_ERROR_OBJECT (frag, "%s", error->message);
+      gst_object_unref (frag);
+      gst_object_unref (shader);
+      return;
+    }
+    if (!gst_gl_shader_attach (shader, frag)) {
+      gst_object_unref (shader);
+      return;
+    }
+  }
+
+  if (!gst_gl_shader_link (shader, &error)) {
+    GST_ERROR_OBJECT (shader, "%s", error->message);
     g_error_free (error);
     error = NULL;
     gst_gl_context_clear_shader (context);
-    gst_object_unref (*shader);
-    *shader = NULL;
+    gst_object_unref (shader);
+    return;
   }
+
+  *data->shader = shader;
 }
 
 /* Called by glfilter */
@@ -395,18 +441,17 @@
 gst_gl_context_gen_shader (GstGLContext * context, const gchar * vert_src,
     const gchar * frag_src, GstGLShader ** shader)
 {
+  struct _compile_shader data;
+
   g_return_val_if_fail (frag_src != NULL || vert_src != NULL, FALSE);
   g_return_val_if_fail (shader != NULL, FALSE);
 
-  *shader = gst_gl_shader_new (context);
-
-  if (frag_src)
-    gst_gl_shader_set_fragment_source (*shader, frag_src);
-  if (vert_src)
-    gst_gl_shader_set_vertex_source (*shader, vert_src);
+  data.shader = shader;
+  data.vertex_src = vert_src;
+  data.fragment_src = frag_src;
 
   gst_gl_context_thread_add (context, (GstGLContextThreadFunc) _compile_shader,
-      shader);
+      &data);
 
   return *shader != NULL;
 }
@@ -416,8 +461,7 @@
 {
   va_list args;
 
-  if (error_message)
-    g_free (error_message);
+  g_free (error_message);
 
   va_start (args, format);
   error_message = g_strdup_vprintf (format, args);
@@ -452,6 +496,19 @@
 
 GST_DEBUG_CATEGORY_STATIC (GST_CAT_CONTEXT);
 
+static void
+_init_context_debug (void)
+{
+#ifndef GST_DISABLE_GST_DEBUG
+  static volatile gsize _init = 0;
+
+  if (g_once_init_enter (&_init)) {
+    GST_DEBUG_CATEGORY_GET (GST_CAT_CONTEXT, "GST_CONTEXT");
+    g_once_init_leave (&_init, 1);
+  }
+#endif
+}
+
 static gboolean
 pad_query (const GValue * item, GValue * value, gpointer user_data)
 {
@@ -459,6 +516,8 @@
   GstQuery *query = user_data;
   gboolean res;
 
+  _init_context_debug ();
+
   res = gst_pad_peer_query (pad, query);
 
   if (res) {
@@ -495,13 +554,14 @@
   return g_value_get_boolean (&res);
 }
 
-static GstQuery *
-_gst_context_query (GstElement * element,
-    gpointer ptr, const gchar * display_type)
+static void
+_gst_context_query (GstElement * element, const gchar * display_type)
 {
   GstQuery *query;
   GstContext *ctxt;
 
+  _init_context_debug ();
+
   /*  2a) Query downstream with GST_QUERY_CONTEXT for the context and
    *      check if downstream already has a context of the specific type
    *  2b) Query upstream as above.
@@ -511,10 +571,12 @@
     gst_query_parse_context (query, &ctxt);
     GST_CAT_INFO_OBJECT (GST_CAT_CONTEXT, element,
         "found context (%p) in downstream query", ctxt);
+    gst_element_set_context (element, ctxt);
   } else if (gst_gl_run_query (element, query, GST_PAD_SINK)) {
     gst_query_parse_context (query, &ctxt);
     GST_CAT_INFO_OBJECT (GST_CAT_CONTEXT, element,
         "found context (%p) in upstream query", ctxt);
+    gst_element_set_context (element, ctxt);
   } else {
     /* 3) Post a GST_MESSAGE_NEED_CONTEXT message on the bus with
      *    the required context type and afterwards check if a
@@ -537,103 +599,33 @@
    * is required to update the display_ptr or call gst_gl_handle_set_context().
    */
 
-  return query;
+  gst_query_unref (query);
 }
 
 static void
 gst_gl_display_context_query (GstElement * element, GstGLDisplay ** display_ptr)
 {
-  GstContext *ctxt = NULL;
-  GstQuery *query = NULL;
-
-#ifndef GST_DISABLE_GST_DEBUG
-  if (!GST_CAT_CONTEXT)
-    GST_DEBUG_CATEGORY_GET (GST_CAT_CONTEXT, "GST_CONTEXT");
-#endif
-
-  query =
-      _gst_context_query (element, display_ptr, GST_GL_DISPLAY_CONTEXT_TYPE);
-  gst_query_parse_context (query, &ctxt);
-
-  if (ctxt && gst_context_has_context_type (ctxt, GST_GL_DISPLAY_CONTEXT_TYPE)) {
-    GstGLDisplay *tmp_disp = NULL;
-    if (gst_context_get_gl_display (ctxt, &tmp_disp) && tmp_disp)
-      *display_ptr = tmp_disp;
-  }
-
+  _gst_context_query (element, GST_GL_DISPLAY_CONTEXT_TYPE);
   if (*display_ptr)
-    goto out;
+    return;
 
 #if GST_GL_HAVE_WINDOW_X11
-  gst_query_unref (query);
-  query = _gst_context_query (element, display_ptr, "gst.x11.display.handle");
-  gst_query_parse_context (query, &ctxt);
-  if (ctxt && gst_context_has_context_type (ctxt, "gst.x11.display.handle")) {
-    const GstStructure *s;
-    Display *display;
-
-    s = gst_context_get_structure (ctxt);
-    if (gst_structure_get (s, "display", G_TYPE_POINTER, &display, NULL)
-        && display) {
-      *display_ptr =
-          (GstGLDisplay *) gst_gl_display_x11_new_with_display (display);
-    }
-  }
-
+  _gst_context_query (element, "gst.x11.display.handle");
   if (*display_ptr)
-    goto out;
+    return;
 #endif
 
 #if GST_GL_HAVE_WINDOW_WAYLAND
-  gst_query_unref (query);
-  query =
-      _gst_context_query (element, display_ptr,
-      "GstWaylandDisplayHandleContextType");
-  gst_query_parse_context (query, &ctxt);
-  if (ctxt
-      && gst_context_has_context_type (ctxt,
-          "GstWaylandDisplayHandleContextType")) {
-    const GstStructure *s;
-    struct wl_display *display;
-
-    s = gst_context_get_structure (ctxt);
-    if (gst_structure_get (s, "display", G_TYPE_POINTER, &display, NULL)
-        && display) {
-      *display_ptr =
-          (GstGLDisplay *) gst_gl_display_wayland_new_with_display (display);
-    }
-  }
-
+  _gst_context_query (element, "GstWaylandDisplayHandleContextType");
   if (*display_ptr)
-    goto out;
+    return;
 #endif
-
-out:
-  gst_query_unref (query);
 }
 
 static void
-gst_gl_context_query (GstElement * element, GstGLContext ** context_ptr)
+gst_gl_context_query (GstElement * element)
 {
-  GstContext *ctxt;
-  GstQuery *query;
-
-#ifndef GST_DISABLE_GST_DEBUG
-  if (!GST_CAT_CONTEXT)
-    GST_DEBUG_CATEGORY_GET (GST_CAT_CONTEXT, "GST_CONTEXT");
-#endif
-
-  query = _gst_context_query (element, context_ptr, "gst.gl.app_context");
-  gst_query_parse_context (query, &ctxt);
-  if (ctxt && gst_context_has_context_type (ctxt, "gst.gl.app_context")) {
-    const GstStructure *s = gst_context_get_structure (ctxt);
-    GstGLContext *tmp_ctx = NULL;
-    if (gst_structure_get (s, "context", GST_GL_TYPE_CONTEXT, &tmp_ctx, NULL)
-        && tmp_ctx)
-      *context_ptr = tmp_ctx;
-  }
-
-  gst_query_unref (query);
+  _gst_context_query (element, "gst.gl.app_context");
 }
 
 /*  4) Create a context by itself and post a GST_MESSAGE_HAVE_CONTEXT
@@ -650,9 +642,13 @@
     return;
   }
 
+  _init_context_debug ();
+
   context = gst_context_new (GST_GL_DISPLAY_CONTEXT_TYPE, TRUE);
   gst_context_set_gl_display (context, display);
 
+  gst_element_set_context (element, context);
+
   GST_CAT_INFO_OBJECT (GST_CAT_CONTEXT, element,
       "posting have context (%p) message with display (%p)", context, display);
   msg = gst_message_new_have_context (GST_OBJECT_CAST (element), context);
@@ -693,7 +689,7 @@
   if (*context_ptr)
     goto done;
 
-  gst_gl_context_query (element, context_ptr);
+  gst_gl_context_query (element);
 
 done:
   return *display_ptr != NULL;
@@ -908,6 +904,25 @@
   return plane_size;
 }
 
+/* find the difference between the start of the plane and where the video
+ * data starts in the plane */
+gsize
+gst_gl_get_plane_start (GstVideoInfo * info, GstVideoAlignment * valign,
+    guint plane)
+{
+  gsize plane_start;
+  gint i;
+
+  /* find the start of the plane data including padding */
+  plane_start = 0;
+  for (i = 0; i < plane; i++) {
+    plane_start += gst_gl_get_plane_data_size (info, valign, i);
+  }
+
+  /* offset between the plane data start and where the video frame starts */
+  return (GST_VIDEO_INFO_PLANE_OFFSET (info, plane)) - plane_start;
+}
+
 GstCaps *
 gst_gl_caps_replace_all_caps_features (const GstCaps * caps,
     const gchar * feature_name)
@@ -932,3 +947,132 @@
 
   return tmp;
 }
+
+/**
+ * gst_gl_value_get_texture_target_mask:
+ * @value: an initialized #GValue of type G_TYPE_STRING
+ *
+ * See gst_gl_value_set_texture_target_from_mask() for what entails a mask
+ *
+ * Returns: the mask of #GstGLTextureTarget's in @value
+ */
+GstGLTextureTarget
+gst_gl_value_get_texture_target_mask (const GValue * targets)
+{
+  guint new_targets = 0;
+
+  g_return_val_if_fail (targets != NULL, GST_GL_TEXTURE_TARGET_NONE);
+
+  if (G_TYPE_CHECK_VALUE_TYPE (targets, G_TYPE_STRING)) {
+    GstGLTextureTarget target;
+    const gchar *str;
+
+    str = g_value_get_string (targets);
+    target = gst_gl_texture_target_from_string (str);
+
+    if (target)
+      new_targets |= 1 << target;
+  } else if (G_TYPE_CHECK_VALUE_TYPE (targets, GST_TYPE_LIST)) {
+    gint j, m;
+
+    m = gst_value_list_get_size (targets);
+    for (j = 0; j < m; j++) {
+      const GValue *val = gst_value_list_get_value (targets, j);
+      GstGLTextureTarget target;
+      const gchar *str;
+
+      str = g_value_get_string (val);
+      target = gst_gl_texture_target_from_string (str);
+      if (target)
+        new_targets |= 1 << target;
+    }
+  }
+
+  return new_targets;
+}
+
+/**
+ * gst_gl_value_set_texture_target:
+ * @value: an initialized #GValue of type G_TYPE_STRING
+ * @target: a #GstGLTextureTarget's
+ *
+ * Returns: whether the @target could be set on @value
+ */
+gboolean
+gst_gl_value_set_texture_target (GValue * value, GstGLTextureTarget target)
+{
+  g_return_val_if_fail (value != NULL, FALSE);
+  g_return_val_if_fail (target != GST_GL_TEXTURE_TARGET_NONE, FALSE);
+
+  if (target == GST_GL_TEXTURE_TARGET_2D) {
+    g_value_set_static_string (value, GST_GL_TEXTURE_TARGET_2D_STR);
+  } else if (target == GST_GL_TEXTURE_TARGET_RECTANGLE) {
+    g_value_set_static_string (value, GST_GL_TEXTURE_TARGET_RECTANGLE_STR);
+  } else if (target == GST_GL_TEXTURE_TARGET_EXTERNAL_OES) {
+    g_value_set_static_string (value, GST_GL_TEXTURE_TARGET_EXTERNAL_OES_STR);
+  } else {
+    return FALSE;
+  }
+
+  return TRUE;
+}
+
+static guint64
+_gst_gl_log2_int64 (guint64 value)
+{
+  guint64 ret = 0;
+
+  while (value >>= 1)
+    ret++;
+
+  return ret;
+}
+
+/**
+ * gst_gl_value_set_texture_target_from_mask:
+ * @value: an uninitialized #GValue
+ * @target_mask: a bitwise mask of #GstGLTextureTarget's
+ *
+ * A mask is a bitwise OR of (1 << target) where target is a valid
+ * #GstGLTextureTarget
+ *
+ * Returns: whether the @target_mask could be set on @value
+ */
+gboolean
+gst_gl_value_set_texture_target_from_mask (GValue * value,
+    GstGLTextureTarget target_mask)
+{
+  g_return_val_if_fail (value != NULL, FALSE);
+  g_return_val_if_fail (target_mask != GST_GL_TEXTURE_TARGET_NONE, FALSE);
+
+  if ((target_mask & (target_mask - 1)) == 0) {
+    /* only one texture target set */
+    g_value_init (value, G_TYPE_STRING);
+    return gst_gl_value_set_texture_target (value,
+        _gst_gl_log2_int64 (target_mask));
+  } else {
+    GValue item = G_VALUE_INIT;
+    gboolean ret = FALSE;
+
+    g_value_init (value, GST_TYPE_LIST);
+    g_value_init (&item, G_TYPE_STRING);
+    if (target_mask & (1 << GST_GL_TEXTURE_TARGET_2D)) {
+      gst_gl_value_set_texture_target (&item, GST_GL_TEXTURE_TARGET_2D);
+      gst_value_list_append_value (value, &item);
+      ret = TRUE;
+    }
+    if (target_mask & (1 << GST_GL_TEXTURE_TARGET_RECTANGLE)) {
+      gst_gl_value_set_texture_target (&item, GST_GL_TEXTURE_TARGET_RECTANGLE);
+      gst_value_list_append_value (value, &item);
+      ret = TRUE;
+    }
+    if (target_mask & (1 << GST_GL_TEXTURE_TARGET_EXTERNAL_OES)) {
+      gst_gl_value_set_texture_target (&item,
+          GST_GL_TEXTURE_TARGET_EXTERNAL_OES);
+      gst_value_list_append_value (value, &item);
+      ret = TRUE;
+    }
+
+    return ret;
+  }
+}
diff --git a/gst-libs/gst/gl/gstglutils.h b/gst-libs/gst/gl/gstglutils.h
index ee606e0..1c5ab12 100644
--- a/gst-libs/gst/gl/gstglutils.h
+++ b/gst-libs/gst/gl/gstglutils.h
@@ -106,9 +106,16 @@
     GstQuery * query, GstPadDirection direction);
 gsize gst_gl_get_plane_data_size (GstVideoInfo * info, GstVideoAlignment * align,
     guint plane);
+gsize gst_gl_get_plane_start (GstVideoInfo * info, GstVideoAlignment * valign,
+    guint plane);
 GstCaps * gst_gl_caps_replace_all_caps_features (const GstCaps * caps,
     const gchar * feature_name);
 
+gboolean gst_gl_value_set_texture_target_from_mask (GValue * value,
+    GstGLTextureTarget target_mask);
+gboolean gst_gl_value_set_texture_target (GValue * value, GstGLTextureTarget target);
+GstGLTextureTarget gst_gl_value_get_texture_target_mask (const GValue * value);
+
 G_END_DECLS
 
 #endif /* __GST_GL_UTILS_H__ */
diff --git a/gst-libs/gst/gl/gstglviewconvert.c b/gst-libs/gst/gl/gstglviewconvert.c
index ebe4ed3..7d44860 100644
--- a/gst-libs/gst/gl/gstglviewconvert.c
+++ b/gst-libs/gst/gl/gstglviewconvert.c
@@ -21,7 +21,7 @@
  */
 
 /**
- * SECTION:viewconvert
+ * SECTION:gstglviewconvert
  *
  * Convert stereoscopic/multiview video using fragment shaders.
  */
@@ -31,6 +31,7 @@
 #endif
 
 #include "gstglviewconvert.h"
+#include <gst/video/gstvideoaffinetransformationmeta.h>
 
 #define USING_OPENGL(context) (gst_gl_context_check_gl_version (context, GST_GL_API_OPENGL, 1, 0))
 #define USING_OPENGL3(context) (gst_gl_context_check_gl_version (context, GST_GL_API_OPENGL3, 3, 1))
@@ -39,8 +40,12 @@
 #define USING_GLES3(context) (gst_gl_context_check_gl_version (context, GST_GL_API_GLES2, 3, 0))
 
 static GstStaticCaps caps_template =
-GST_STATIC_CAPS (GST_VIDEO_CAPS_MAKE_WITH_FEATURES
-    (GST_CAPS_FEATURE_MEMORY_GL_MEMORY, "RGBA"));
+GST_STATIC_CAPS ("video/x-raw(" GST_CAPS_FEATURE_MEMORY_GL_MEMORY "), "
+    "format = (string) RGBA, "
+    "width = " GST_VIDEO_SIZE_RANGE ", "
+    "height = " GST_VIDEO_SIZE_RANGE ", "
+    "framerate = " GST_VIDEO_FPS_RANGE ", "
+    "texture-target = (string) { 2D, rectangle, external-oes } ");
 
 #define GST_CAT_DEFAULT gst_gl_view_convert_debug
 GST_DEBUG_CATEGORY_STATIC (GST_CAT_DEFAULT);
@@ -140,6 +145,13 @@
       }
 };
 
+static gfloat identity_matrix[] = {
+  1.0f, 0.0f, 0.0f, 0.0f,
+  0.0f, 1.0f, 0.0f, 0.0f,
+  0.0f, 0.0f, 1.0f, 0.0f,
+  0.0f, 0.0f, 0.0f, 1.0f,
+};
+
 /* *INDENT-OFF* */
 static const gchar *fragment_source =
   "#ifdef GL_ES\n"
@@ -224,16 +236,6 @@
 static const gchar *frag_output_separated =
   "gl_FragData[0] = l;\n"
   "gl_FragData[1] = r;\n";
-
-static const gchar text_vertex_shader[] =
-  "attribute vec4 a_position;   \n"
-  "attribute vec2 a_texcoord;   \n"
-  "varying vec2 v_texcoord;     \n"
-  "void main()                  \n"
-  "{                            \n"
-  "   gl_Position = a_position; \n"
-  "   v_texcoord = a_texcoord;  \n"
-  "}                            \n";
 /* *INDENT-ON* */
 
 static const GLfloat vertices[] = {
@@ -348,14 +350,18 @@
     gst_gl_view_convert_reset (viewconvert);
 }
 
-gboolean
-gst_gl_view_convert_set_format (GstGLViewConvert * viewconvert,
-    GstVideoInfo * in_info, GstVideoInfo * out_info)
+static gboolean
+_view_convert_set_format (GstGLViewConvert * viewconvert,
+    GstVideoInfo * in_info, GstGLTextureTarget from_target,
+    GstVideoInfo * out_info, GstGLTextureTarget to_target)
 {
+  gboolean passthrough;
   g_return_val_if_fail (GST_IS_GL_VIEW_CONVERT (viewconvert), FALSE);
 
   if (gst_video_info_is_equal (in_info, &viewconvert->in_info) &&
-      gst_video_info_is_equal (out_info, &viewconvert->out_info))
+      gst_video_info_is_equal (out_info, &viewconvert->out_info) &&
+      viewconvert->from_texture_target == from_target &&
+      viewconvert->to_texture_target == to_target)
     return TRUE;
 
   if (GST_VIDEO_INFO_FORMAT (in_info) != GST_VIDEO_FORMAT_RGBA ||
@@ -365,12 +371,22 @@
     return FALSE;
   }
 
+  passthrough = gst_video_info_is_equal (in_info, out_info) &&
+      from_target == to_target;
+
+  if (!passthrough && to_target != GST_GL_TEXTURE_TARGET_2D
+      && to_target != GST_GL_TEXTURE_TARGET_RECTANGLE)
+    return FALSE;
+
   /* FIXME: Compare what changed and decide if we need a full reset or not */
   GST_OBJECT_LOCK (viewconvert);
   gst_gl_view_convert_reset (viewconvert);
 
   viewconvert->in_info = *in_info;
   viewconvert->out_info = *out_info;
+  viewconvert->from_texture_target = from_target;
+  viewconvert->to_texture_target = to_target;
+  viewconvert->caps_passthrough = passthrough;
 
   gst_buffer_replace (&viewconvert->priv->primary_in, NULL);
   gst_buffer_replace (&viewconvert->priv->auxilliary_in, NULL);
@@ -395,6 +411,8 @@
 {
   GstVideoInfo in_info, out_info;
   GstCapsFeatures *in_features, *out_features;
+  GstGLTextureTarget from_target = GST_GL_TEXTURE_TARGET_2D;
+  GstGLTextureTarget to_target = GST_GL_TEXTURE_TARGET_2D;
 
   g_return_val_if_fail (GST_IS_GL_VIEW_CONVERT (viewconvert), FALSE);
   g_return_val_if_fail (GST_IS_CAPS (in_caps), FALSE);
@@ -419,7 +437,30 @@
   if (!gst_video_info_from_caps (&out_info, out_caps))
     return FALSE;
 
-  return gst_gl_view_convert_set_format (viewconvert, &in_info, &out_info);
+  {
+    GstStructure *in_s = gst_caps_get_structure (in_caps, 0);
+    GstStructure *out_s = gst_caps_get_structure (out_caps, 0);
+
+    if (gst_structure_has_field_typed (in_s, "texture-target", G_TYPE_STRING)) {
+      from_target =
+          gst_gl_texture_target_from_string (gst_structure_get_string (in_s,
+              "texture-target"));
+    }
+
+    if (gst_structure_has_field_typed (out_s, "texture-target", G_TYPE_STRING)) {
+      to_target =
+          gst_gl_texture_target_from_string (gst_structure_get_string (out_s,
+              "texture-target"));
+    }
+
+    if (to_target == GST_GL_TEXTURE_TARGET_NONE
+        || from_target == GST_GL_TEXTURE_TARGET_NONE)
+      /* invalid caps */
+      return FALSE;
+  }
+
+  return _view_convert_set_format (viewconvert, &in_info, from_target,
+      &out_info, to_target);
 }
 
 /* Function that can halve the value
@@ -1003,12 +1044,11 @@
   return result;
 }
 
-
 GstCaps *
 gst_gl_view_convert_transform_caps (GstGLViewConvert * viewconvert,
     GstPadDirection direction, GstCaps * caps, GstCaps * filter)
 {
-  gint i;
+  gint i, n;
   GstCaps *base_caps = gst_static_caps_get (&caps_template);
   GstCaps *out_caps, *tmp_caps;
 
@@ -1083,10 +1123,104 @@
 out:
   gst_caps_unref (caps);
 
+  n = gst_caps_get_size (out_caps);
+  for (i = 0; i < n; i++) {
+    GstStructure *s = gst_caps_get_structure (out_caps, i);
+
+    gst_structure_remove_fields (s, "texture-target", NULL);
+  }
+
   GST_DEBUG_OBJECT (viewconvert, "Returning caps %" GST_PTR_FORMAT, out_caps);
   return out_caps;
 }
 
+static guint
+_get_target_bitmask_from_g_value (const GValue * targets)
+{
+  guint new_targets = 0;
+
+  if (targets == NULL) {
+    new_targets = 1 << GST_GL_TEXTURE_TARGET_2D;
+  } else if (G_TYPE_CHECK_VALUE_TYPE (targets, G_TYPE_STRING)) {
+    GstGLTextureTarget target;
+    const gchar *str;
+
+    str = g_value_get_string (targets);
+    target = gst_gl_texture_target_from_string (str);
+
+    if (target)
+      new_targets |= 1 << target;
+  } else if (G_TYPE_CHECK_VALUE_TYPE (targets, GST_TYPE_LIST)) {
+    gint j, m;
+
+    m = gst_value_list_get_size (targets);
+    for (j = 0; j < m; j++) {
+      const GValue *val = gst_value_list_get_value (targets, j);
+      GstGLTextureTarget target;
+      const gchar *str;
+
+      str = g_value_get_string (val);
+      target = gst_gl_texture_target_from_string (str);
+      if (target)
+        new_targets |= 1 << target;
+    }
+  }
+
+  return new_targets;
+}
+
+static GstCaps *
+_fixate_texture_target (GstGLViewConvert * viewconvert,
+    GstPadDirection direction, GstCaps * caps, GstCaps * other)
+{
+  GValue item = G_VALUE_INIT;
+  const GValue *targets, *other_targets;
+  guint targets_mask = 0, other_targets_mask = 0, result_mask;
+  GstStructure *s, *s_other;
+
+  other = gst_caps_make_writable (other);
+  s = gst_caps_get_structure (caps, 0);
+  s_other = gst_caps_get_structure (other, 0);
+
+  other_targets = gst_structure_get_value (s_other, "texture-target");
+  targets = gst_structure_get_value (s, "texture-target");
+
+  targets_mask = _get_target_bitmask_from_g_value (targets);
+  other_targets_mask = _get_target_bitmask_from_g_value (other_targets);
+
+  result_mask = targets_mask & other_targets_mask;
+  if (result_mask == 0) {
+    /* nothing we can do here */
+    return gst_caps_fixate (other);
+  }
+
+  if (direction == GST_PAD_SINK) {
+    result_mask &=
+        (1 << GST_GL_TEXTURE_TARGET_2D | 1 << GST_GL_TEXTURE_TARGET_RECTANGLE);
+  } else {
+    /* if the src caps has 2D support we can 'convert' to anything */
+    if (targets_mask & (1 << GST_GL_TEXTURE_TARGET_2D))
+      result_mask = -1;
+    else
+      result_mask = other_targets_mask;
+  }
+
+  g_value_init (&item, G_TYPE_STRING);
+  if (result_mask & (1 << GST_GL_TEXTURE_TARGET_2D)) {
+    g_value_set_static_string (&item, GST_GL_TEXTURE_TARGET_2D_STR);
+  } else if (result_mask & (1 << GST_GL_TEXTURE_TARGET_RECTANGLE)) {
+    g_value_set_static_string (&item, GST_GL_TEXTURE_TARGET_RECTANGLE_STR);
+  } else if (result_mask & (1 << GST_GL_TEXTURE_TARGET_EXTERNAL_OES)) {
+    g_value_set_static_string (&item, GST_GL_TEXTURE_TARGET_EXTERNAL_OES_STR);
+  }
+
+  gst_structure_set_value (s, "texture-target", &item);
+
+  g_value_unset (&item);
+
+  return gst_caps_fixate (other);
+}
+
 GstCaps *
 gst_gl_view_convert_fixate_caps (GstGLViewConvert * viewconvert,
     GstPadDirection direction, GstCaps * caps, GstCaps * othercaps)
@@ -1158,6 +1292,10 @@
     }
   }
 
+  tmp = _fixate_texture_target (viewconvert, direction, caps, othercaps);
+  gst_caps_unref (othercaps);
+  othercaps = tmp;
+
 done:
   GST_DEBUG_OBJECT (viewconvert, "dir %s fixated to %" GST_PTR_FORMAT
       " against caps %" GST_PTR_FORMAT,
@@ -1255,6 +1393,7 @@
   guint out_width, out_height;
   GLuint fake_texture = 0;      /* a FBO must hava texture to init */
   GLenum internal_format;
+  gboolean ret = TRUE;
 
   gl = viewconvert->context->gl_vtable;
   out_width = GST_VIDEO_INFO_WIDTH (&viewconvert->out_info);
@@ -1310,14 +1449,111 @@
   if (!gst_gl_context_check_framebuffer_status (viewconvert->context)) {
     gst_gl_context_set_error (viewconvert->context,
         "GL framebuffer status incomplete");
-    gl->DeleteTextures (1, &fake_texture);
-    return FALSE;
+    ret = FALSE;
   }
 
   /* unbind the FBO */
+  gl->BindTexture (GL_TEXTURE_2D, 0);
   gl->BindFramebuffer (GL_FRAMEBUFFER, 0);
   gl->DeleteTextures (1, &fake_texture);
-  return TRUE;
+  return ret;
+}
+
+static gchar *
+_mangle_texture_access (const gchar * str, GstGLTextureTarget from,
+    GstGLTextureTarget to)
+{
+  const gchar *from_str = NULL, *to_str = NULL;
+  gchar *ret, *tmp;
+  gchar *regex_find;
+  GRegex *regex;
+
+  if (from == GST_GL_TEXTURE_TARGET_2D)
+    from_str = "texture2D";
+  if (from == GST_GL_TEXTURE_TARGET_RECTANGLE)
+    from_str = "texture2DRect";
+  if (from == GST_GL_TEXTURE_TARGET_EXTERNAL_OES)
+    from_str = "texture2D";
+
+  if (to == GST_GL_TEXTURE_TARGET_2D)
+    to_str = "texture2D";
+  if (to == GST_GL_TEXTURE_TARGET_RECTANGLE)
+    to_str = "texture2DRect";
+  if (to == GST_GL_TEXTURE_TARGET_EXTERNAL_OES)
+    to_str = "texture2D";
+
+  /* followed by any amount of whitespace then a bracket */
+  regex_find = g_strdup_printf ("%s(?=\\s*\\()", from_str);
+  regex = g_regex_new (regex_find, 0, 0, NULL);
+  tmp = g_regex_replace_literal (regex, str, -1, 0, to_str, 0, NULL);
+  g_free (regex_find);
+  g_regex_unref (regex);
+
+  if (tmp) {
+    ret = tmp;
+  } else {
+    GST_FIXME ("Couldn't mangle texture access successfully from %s to %s",
+        from_str, to_str);
+    ret = g_strdup (str);
+  }
+
+  return ret;
+}
+
+static gchar *
+_mangle_sampler_type (const gchar * str, GstGLTextureTarget from,
+    GstGLTextureTarget to)
+{
+  const gchar *from_str = NULL, *to_str = NULL;
+  gchar *ret, *tmp;
+  gchar *regex_find;
+  GRegex *regex;
+
+  if (from == GST_GL_TEXTURE_TARGET_2D)
+    from_str = "sampler2D";
+  if (from == GST_GL_TEXTURE_TARGET_RECTANGLE)
+    from_str = "sampler2DRect";
+  if (from == GST_GL_TEXTURE_TARGET_EXTERNAL_OES)
+    from_str = "samplerExternalOES";
+
+  if (to == GST_GL_TEXTURE_TARGET_2D)
+    to_str = "sampler2D";
+  if (to == GST_GL_TEXTURE_TARGET_RECTANGLE)
+    to_str = "sampler2DRect";
+  if (to == GST_GL_TEXTURE_TARGET_EXTERNAL_OES)
+    to_str = "samplerExternalOES";
+
+  /* followed by some whitespace  */
+  regex_find = g_strdup_printf ("%s(?=\\s)", from_str);
+  regex = g_regex_new (regex_find, 0, 0, NULL);
+  tmp = g_regex_replace_literal (regex, str, -1, 0, to_str, 0, NULL);
+  g_free (regex_find);
+  g_regex_unref (regex);
+
+  if (tmp) {
+    ret = tmp;
+  } else {
+    GST_FIXME ("Couldn't mangle sampler type successfully from %s to %s",
+        from_str, to_str);
+    ret = g_strdup (str);
+  }
+
+  return ret;
+}
+
+static gchar *
+_mangle_extensions (const gchar * str, GstGLTextureTarget from)
+{
+  const gchar *ext_str = NULL;
+
+  if (from == GST_GL_TEXTURE_TARGET_EXTERNAL_OES)
+    ext_str = "#extension GL_OES_EGL_image_external : require\n";
+
+  if (ext_str) {
+    return g_strdup_printf ("%s%s", ext_str, str);
+  } else {
+    return g_strdup (str);
+  }
 }
 
 /* free after use */
@@ -1327,6 +1563,8 @@
 {
   const gchar *input_str, *output_str;
   gboolean mono_input = FALSE;
+  gchar *tmp, *tmp2;
+
   switch (in_mode) {
     case GST_VIDEO_MULTIVIEW_MODE_NONE:
     case GST_VIDEO_MULTIVIEW_MODE_MONO:
@@ -1377,7 +1615,17 @@
       break;
   }
 
-  return g_strdup_printf (fragment_source, input_str, output_str);
+  tmp = g_strdup_printf (fragment_source, input_str, output_str);
+  tmp2 = _mangle_sampler_type (tmp, GST_GL_TEXTURE_TARGET_2D,
+      viewconvert->from_texture_target);
+  g_free (tmp);
+  tmp = _mangle_texture_access (tmp2, GST_GL_TEXTURE_TARGET_2D,
+      viewconvert->from_texture_target);
+  g_free (tmp2);
+  tmp2 = _mangle_extensions (tmp, viewconvert->from_texture_target);
+  g_free (tmp);
+
+  return tmp2;
 }
 
 static void
@@ -1449,6 +1697,17 @@
         "Cannot perform multiview conversion without OpenGL shaders");
     goto error;
   }
+
+  if (out_mode == GST_VIDEO_MULTIVIEW_MODE_SEPARATED
+      || out_mode == GST_VIDEO_MULTIVIEW_MODE_FRAME_BY_FRAME) {
+    if (!gl->DrawBuffers) {
+      GST_ERROR_OBJECT (viewconvert,
+          "Separate texture output mode requested however the current "
+          "OpenGL API does not support drawing to multiple buffers");
+      goto error;
+    }
+  }
+
   if ((in_flags & GST_VIDEO_MULTIVIEW_FLAGS_RIGHT_VIEW_FIRST) ==
       (out_flags & GST_VIDEO_MULTIVIEW_FLAGS_RIGHT_VIEW_FIRST)) {
     l_index = 0;
@@ -1516,9 +1775,9 @@
       tex_scale[1][0], tex_scale[1][1],
       offsets[0][0], offsets[0][1], offsets[1][0], offsets[1][1]);
   fragment_source_str = _get_shader_string (viewconvert, in_mode, out_mode);
-// g_print ("%s\n", fragment_source_str);
-  res = gst_gl_context_gen_shader (viewconvert->context, text_vertex_shader,
-      fragment_source_str, &viewconvert->shader);
+  res = gst_gl_context_gen_shader (viewconvert->context,
+      gst_gl_shader_string_vertex_mat4_texture_transform, fragment_source_str,
+      &viewconvert->shader);
   g_free (fragment_source_str);
   if (!res)
     goto error;
@@ -1536,6 +1795,8 @@
       GST_VIDEO_INFO_HEIGHT (&viewconvert->out_info));
   gst_gl_shader_set_uniform_matrix_3fv (viewconvert->shader, "downmix",
       2, FALSE, &downmix_matrices[viewconvert->downmix_mode][0][0]);
+  gst_gl_shader_set_uniform_matrix_4fv (viewconvert->shader, "u_transformation",
+      1, FALSE, identity_matrix);
   if (in_mode == GST_VIDEO_MULTIVIEW_MODE_SEPARATED ||
       in_mode == GST_VIDEO_MULTIVIEW_MODE_FRAME_BY_FRAME) {
     gst_gl_shader_set_uniform_1i (viewconvert->shader, "tex_l", l_index);
@@ -1572,7 +1833,6 @@
     gl->BindBuffer (GL_ELEMENT_ARRAY_BUFFER, 0);
   }
 
-  gl->BindTexture (GL_TEXTURE_2D, 0);
   viewconvert->initted = TRUE;
   return TRUE;
 error:
@@ -1594,6 +1854,9 @@
   };
   GstVideoMultiviewMode in_mode = priv->input_mode;
   GstVideoMultiviewMode out_mode = priv->output_mode;
+  guint from_gl_target =
+      gst_gl_texture_target_to_gl (viewconvert->from_texture_target);
+  GstVideoAffineTransformationMeta *af_meta;
 
   gl = context->gl_vtable;
   out_width = GST_VIDEO_INFO_WIDTH (&viewconvert->out_info);
@@ -1605,12 +1868,22 @@
   } else {
     out_views = 1;
   }
+
+  /* FIXME: the auxillary buffer could have a different transform matrix */
+  af_meta = gst_buffer_get_video_affine_transformation_meta (priv->primary_in);
+  if (af_meta)
+    gst_gl_shader_set_uniform_matrix_4fv (viewconvert->shader,
+        "u_transformation", 1, FALSE, af_meta->matrix);
+
   /* attach the texture to the FBO to renderer to */
   for (i = 0; i < out_views; i++) {
+    guint gl_target =
+        gst_gl_texture_target_to_gl (viewconvert->to_texture_target);
+
     /* needed? */
-    gl->BindTexture (GL_TEXTURE_2D, priv->out_tex[i]->tex_id);
+    gl->BindTexture (gl_target, priv->out_tex[i]->tex_id);
     gl->FramebufferTexture2D (GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0 + i,
-        GL_TEXTURE_2D, priv->out_tex[i]->tex_id, 0);
+        gl_target, priv->out_tex[i]->tex_id, 0);
   }
 
   if (gl->DrawBuffers)
@@ -1632,11 +1905,11 @@
       return FALSE;
     }
     gl->ActiveTexture (GL_TEXTURE1);
-    gl->BindTexture (GL_TEXTURE_2D, priv->in_tex[1]->tex_id);
+    gl->BindTexture (from_gl_target, priv->in_tex[1]->tex_id);
   }
 
   gl->ActiveTexture (GL_TEXTURE0);
-  gl->BindTexture (GL_TEXTURE_2D, priv->in_tex[0]->tex_id);
+  gl->BindTexture (from_gl_target, priv->in_tex[0]->tex_id);
   gl->DrawElements (GL_TRIANGLES, 6, GL_UNSIGNED_SHORT, NULL);
   if (gl->BindVertexArray)
     gl->BindVertexArray (0);
@@ -1656,11 +1929,27 @@
 static gboolean
 _gen_buffer (GstGLViewConvert * viewconvert, GstBuffer ** target)
 {
+  GstGLVideoAllocationParams *params;
+  GstGLMemoryAllocator *mem_allocator;
+  GstAllocator *allocator;
+
   *target = gst_buffer_new ();
-  if (!gst_gl_memory_setup_buffer (viewconvert->context, NULL,
-          &viewconvert->out_info, NULL, *target)) {
+
+  allocator =
+      GST_ALLOCATOR (gst_gl_memory_allocator_get_default
+      (viewconvert->context));
+  mem_allocator = GST_GL_MEMORY_ALLOCATOR (allocator);
+  params = gst_gl_video_allocation_params_new (viewconvert->context, NULL,
+      &viewconvert->out_info, 0, NULL, viewconvert->to_texture_target);
+
+  if (!gst_gl_memory_setup_buffer (mem_allocator, *target, params)) {
+    gst_gl_allocation_params_free ((GstGLAllocationParams *) params);
+    gst_object_unref (allocator);
     return FALSE;
   }
+  gst_gl_allocation_params_free ((GstGLAllocationParams *) params);
+  gst_object_unref (allocator);
+
   gst_buffer_add_video_meta_full (*target, 0,
       GST_VIDEO_INFO_FORMAT (&viewconvert->out_info),
       GST_VIDEO_INFO_WIDTH (&viewconvert->out_info),
@@ -1779,10 +2068,28 @@
       /* Luminance formats are not color renderable */
       /* renderering to a framebuffer only renders the intersection of all
        * the attachments i.e. the smallest attachment size */
-      if (!priv->out_tex[j])
+      if (!priv->out_tex[j]) {
+        GstGLVideoAllocationParams *params;
+        GstGLBaseMemoryAllocator *base_mem_allocator;
+        GstAllocator *allocator;
+        GstVideoInfo temp_info;
+
+        gst_video_info_set_format (&temp_info, GST_VIDEO_FORMAT_RGBA, out_width,
+            out_height);
+
+        allocator =
+            GST_ALLOCATOR (gst_gl_memory_allocator_get_default (context));
+        base_mem_allocator = GST_GL_BASE_MEMORY_ALLOCATOR (allocator);
+        params = gst_gl_video_allocation_params_new (context, NULL, &temp_info,
+            0, NULL, viewconvert->to_texture_target);
+
         priv->out_tex[j] =
-            (GstGLMemory *) gst_gl_memory_alloc (context, NULL, &temp_info, 0,
-            NULL);
+            (GstGLMemory *) gst_gl_base_memory_alloc (base_mem_allocator,
+            (GstGLAllocationParams *) params);
+
+        gst_gl_allocation_params_free ((GstGLAllocationParams *) params);
+        gst_object_unref (allocator);
+      }
     } else {
       priv->out_tex[j] = out_tex;
     }
@@ -1833,9 +2140,8 @@
         res = FALSE;
         continue;
       }
-      gst_gl_memory_copy_into_texture (priv->out_tex[j],
-          out_tex->tex_id, out_tex->tex_type, width, height,
-          GST_VIDEO_INFO_PLANE_STRIDE (&out_tex->info, out_tex->plane), FALSE);
+      gst_gl_memory_copy_into (priv->out_tex[j], out_tex->tex_id,
+          viewconvert->to_texture_target, out_tex->tex_type, width, height);
       gst_memory_unmap ((GstMemory *) out_tex, &to_info);
     }
 
@@ -1899,7 +2205,7 @@
   GstVideoMultiviewFlags in_flags, out_flags;
 
   g_return_val_if_fail (GST_IS_GL_VIEW_CONVERT (viewconvert), GST_FLOW_ERROR);
-  g_return_val_if_fail (GST_GL_IS_CONTEXT (viewconvert->context),
+  g_return_val_if_fail (GST_IS_GL_CONTEXT (viewconvert->context),
       GST_FLOW_ERROR);
 
   GST_OBJECT_LOCK (viewconvert);
@@ -1950,7 +2256,8 @@
   if (priv->input_mode == priv->output_mode &&
       priv->input_flags == priv->output_flags &&
       viewconvert->in_info.width == viewconvert->out_info.width &&
-      viewconvert->in_info.height == viewconvert->out_info.height) {
+      viewconvert->in_info.height == viewconvert->out_info.height &&
+      viewconvert->from_texture_target == viewconvert->to_texture_target) {
     /* passthrough - just pass input buffers */
     outbuf = gst_buffer_ref (priv->primary_in);
     if (in_mode == GST_VIDEO_MULTIVIEW_MODE_FRAME_BY_FRAME)
@@ -1958,6 +2265,12 @@
     goto done_clear_input;
   }
 
+  /* We can't output to OES textures, they're only supported for passthrough */
+  if (viewconvert->to_texture_target == GST_GL_TEXTURE_TARGET_EXTERNAL_OES) {
+    ret = GST_FLOW_ERROR;
+    goto done_clear_input;
+  }
+
   /* Generate new output buffer(s) */
   gst_gl_context_thread_add (viewconvert->context,
       (GstGLContextThreadFunc) _do_view_convert, viewconvert);
@@ -1974,11 +2287,13 @@
   }
 
   outbuf = priv->primary_out;
-  gst_buffer_copy_into (outbuf, priv->primary_in,
-      GST_BUFFER_COPY_FLAGS | GST_BUFFER_COPY_TIMESTAMPS, 0, -1);
-  GST_BUFFER_FLAG_SET (outbuf,
-      GST_VIDEO_BUFFER_FLAG_FIRST_IN_BUNDLE |
-      GST_VIDEO_BUFFER_FLAG_MULTIPLE_VIEW);
+  if (outbuf) {
+    gst_buffer_copy_into (outbuf, priv->primary_in,
+        GST_BUFFER_COPY_FLAGS | GST_BUFFER_COPY_TIMESTAMPS, 0, -1);
+    GST_BUFFER_FLAG_SET (outbuf,
+        GST_VIDEO_BUFFER_FLAG_FIRST_IN_BUNDLE |
+        GST_VIDEO_BUFFER_FLAG_MULTIPLE_VIEW);
+  }
 
   if (priv->auxilliary_out) {
     gst_buffer_copy_into (priv->auxilliary_out,
diff --git a/gst-libs/gst/gl/gstglviewconvert.h b/gst-libs/gst/gl/gstglviewconvert.h
index 26a6df9..8cfa1b2 100644
--- a/gst-libs/gst/gl/gstglviewconvert.h
+++ b/gst-libs/gst/gl/gstglviewconvert.h
@@ -61,6 +61,10 @@
   GstVideoInfo in_info;
   GstVideoInfo out_info;
 
+  GstGLTextureTarget from_texture_target;
+  GstGLTextureTarget to_texture_target;
+  gboolean caps_passthrough;
+
   gboolean initted;
   gboolean reconfigure;
 
@@ -78,8 +82,6 @@
 GType gst_gl_view_convert_get_type (void);
 GstGLViewConvert * gst_gl_view_convert_new (void);
 
-gboolean gst_gl_view_convert_set_format (GstGLViewConvert *viewconvert, GstVideoInfo *in_info,
-    GstVideoInfo *out_info);
 gboolean  gst_gl_view_convert_set_caps (GstGLViewConvert * viewconvert, GstCaps * in_caps, GstCaps * out_caps);
 GstCaps * gst_gl_view_convert_transform_caps (GstGLViewConvert * viewconvert,
     GstPadDirection direction, GstCaps * caps, GstCaps * filter);
diff --git a/gst-libs/gst/gl/gstglwindow.c b/gst-libs/gst/gl/gstglwindow.c
index 4f27cd0..695f4c4 100644
--- a/gst-libs/gst/gl/gstglwindow.c
+++ b/gst-libs/gst/gl/gstglwindow.c
@@ -85,21 +85,23 @@
 static void gst_gl_window_default_send_message_async (GstGLWindow * window,
     GstGLWindowCB callback, gpointer data, GDestroyNotify destroy);
 static gpointer gst_gl_window_navigation_thread (GstGLWindow * window);
-void gst_gl_window_run_navigation (GstGLWindow * window);
-void gst_gl_window_open_navigation (GstGLWindow * window);
-void gst_gl_window_close_navigation (GstGLWindow * window);
-void gst_gl_window_quit_navigation (GstGLWindow * window);
 
 struct _GstGLWindowPrivate
 {
   GMainContext *main_context;
   GMainLoop *loop;
-  GThread *navigation_thread;
 
   guint surface_width;
   guint surface_height;
 
   gboolean alive;
+
+  GThread *navigation_thread;
+  GMainContext *navigation_context;
+  GMainLoop *navigation_loop;
+  GMutex nav_lock;
+  GCond nav_create_cond;
+  gboolean nav_alive;
 };
 
 static void gst_gl_window_finalize (GObject * object);
@@ -187,17 +189,17 @@
   window->priv = priv;
 
   g_mutex_init (&window->lock);
-  g_mutex_init (&window->nav_lock);
-  g_cond_init (&window->nav_create_cond);
-  g_cond_init (&window->nav_destroy_cond);
-  window->nav_created = FALSE;
-  window->nav_alive = FALSE;
   window->is_drawing = FALSE;
 
+  g_mutex_init (&window->priv->nav_lock);
+  g_cond_init (&window->priv->nav_create_cond);
+  window->priv->nav_alive = FALSE;
+
   g_weak_ref_init (&window->context_ref, NULL);
 
   priv->main_context = g_main_context_new ();
   priv->loop = g_main_loop_new (priv->main_context, FALSE);
+  priv->navigation_loop = NULL;
 }
 
 static void
@@ -209,7 +211,6 @@
   klass->close = GST_DEBUG_FUNCPTR (gst_gl_window_default_close);
   klass->run = GST_DEBUG_FUNCPTR (gst_gl_window_default_run);
   klass->quit = GST_DEBUG_FUNCPTR (gst_gl_window_default_quit);
-  klass->draw_unlocked = GST_DEBUG_FUNCPTR (gst_gl_window_default_draw);
   klass->draw = GST_DEBUG_FUNCPTR (gst_gl_window_default_draw);
   klass->send_message = GST_DEBUG_FUNCPTR (gst_gl_window_default_send_message);
   klass->send_message_async =
@@ -311,16 +312,13 @@
 
   window->display = gst_object_ref (display);
 
-  g_mutex_lock (&window->nav_lock);
+  g_mutex_lock (&window->priv->nav_lock);
+  window->priv->navigation_thread = g_thread_new ("gstglnavigation",
+      (GThreadFunc) gst_gl_window_navigation_thread, window);
 
-  if (!window->nav_created) {
-    window->priv->navigation_thread = g_thread_new ("gstglnavigation",
-        (GThreadFunc) gst_gl_window_navigation_thread, window);
-
-    g_cond_wait (&window->nav_create_cond, &window->nav_lock);
-    window->nav_created = TRUE;
-  }
-  g_mutex_unlock (&window->nav_lock);
+  while (!window->priv->nav_alive)
+    g_cond_wait (&window->priv->nav_create_cond, &window->priv->nav_lock);
+  g_mutex_unlock (&window->priv->nav_lock);
 
   return window;
 }
@@ -331,14 +329,12 @@
   GstGLWindow *window = GST_GL_WINDOW (object);
   GstGLWindowPrivate *priv = window->priv;
 
-  if (window->nav_alive) {
-    g_mutex_lock (&window->nav_lock);
-    GST_INFO ("send quit navigation loop");
-    gst_gl_window_quit_navigation (window);
-    while (window->nav_alive) {
-      g_cond_wait (&window->nav_destroy_cond, &window->nav_lock);
-    }
-    g_mutex_unlock (&window->nav_lock);
+  GST_INFO ("quit navigation loop");
+  if (window->priv->navigation_loop) {
+    g_main_loop_quit (window->priv->navigation_loop);
+    /* wait until navigation thread finished */
+    g_thread_join (window->priv->navigation_thread);
+    window->priv->navigation_thread = NULL;
   }
 
   if (priv->loop)
@@ -350,9 +346,8 @@
   g_weak_ref_clear (&window->context_ref);
 
   g_mutex_clear (&window->lock);
-  g_mutex_clear (&window->nav_lock);
-  g_cond_clear (&window->nav_create_cond);
-  g_cond_clear (&window->nav_destroy_cond);
+  g_mutex_clear (&window->priv->nav_lock);
+  g_cond_clear (&window->priv->nav_create_cond);
   gst_object_unref (window->display);
 
   G_OBJECT_CLASS (gst_gl_window_parent_class)->finalize (object);
@@ -416,7 +411,7 @@
   GstGLWindowClass *window_class;
   GstSetWindowHandleCb *data;
 
-  g_return_if_fail (GST_GL_IS_WINDOW (window));
+  g_return_if_fail (GST_IS_GL_WINDOW (window));
   g_return_if_fail (handle != 0);
   window_class = GST_GL_WINDOW_GET_CLASS (window);
   g_return_if_fail (window_class->set_window_handle != NULL);
@@ -462,29 +457,6 @@
   gst_gl_window_send_message (window, (GstGLWindowCB) draw_cb, window);
 }
 
-
-/**
- * gst_gl_window_draw_unlocked:
- * @window: a #GstGLWindow
- *
- * Redraw the window contents.  Implementations should invoke the draw callback.
- *
- * Since: 1.4
- */
-void
-gst_gl_window_draw_unlocked (GstGLWindow * window)
-{
-  GstGLWindowClass *window_class;
-
-  g_return_if_fail (GST_GL_IS_WINDOW (window));
-  window_class = GST_GL_WINDOW_GET_CLASS (window);
-  g_return_if_fail (window_class->draw_unlocked != NULL);
-
-  window_class->draw_unlocked (window);
-
-  window->queue_resize = FALSE;
-}
-
 /**
  * gst_gl_window_draw:
  * @window: a #GstGLWindow
@@ -498,7 +470,7 @@
 {
   GstGLWindowClass *window_class;
 
-  g_return_if_fail (GST_GL_IS_WINDOW (window));
+  g_return_if_fail (GST_IS_GL_WINDOW (window));
   window_class = GST_GL_WINDOW_GET_CLASS (window);
   g_return_if_fail (window_class->draw != NULL);
 
@@ -528,7 +500,7 @@
 {
   GstGLWindowClass *window_class;
 
-  g_return_if_fail (GST_GL_IS_WINDOW (window));
+  g_return_if_fail (GST_IS_GL_WINDOW (window));
   window_class = GST_GL_WINDOW_GET_CLASS (window);
 
   if (window_class->set_preferred_size)
@@ -548,7 +520,7 @@
 {
   GstGLWindowClass *window_class;
 
-  g_return_if_fail (GST_GL_IS_WINDOW (window));
+  g_return_if_fail (GST_IS_GL_WINDOW (window));
   window_class = GST_GL_WINDOW_GET_CLASS (window);
 
   if (window_class->show)
@@ -574,7 +546,7 @@
 {
   GstGLWindowClass *window_class;
 
-  g_return_if_fail (GST_GL_IS_WINDOW (window));
+  g_return_if_fail (GST_IS_GL_WINDOW (window));
   window_class = GST_GL_WINDOW_GET_CLASS (window);
   g_return_if_fail (window_class->run != NULL);
 
@@ -582,23 +554,6 @@
   window_class->run (window);
 }
 
-/**
- * gst_gl_window_run_navigation:
- * @window: a #GstGLWindow
- *
- * Start the execution of the navigation runloop.
- *
- * Since: 1.6
- */
-void
-gst_gl_window_run_navigation (GstGLWindow * window)
-{
-  g_return_if_fail (GST_GL_IS_WINDOW (window));
-  g_return_if_fail (window->navigation_context != NULL);
-  g_return_if_fail (window->navigation_loop != NULL);
-  g_main_loop_run (window->navigation_loop);
-}
-
 static void
 gst_gl_window_default_quit (GstGLWindow * window)
 {
@@ -618,7 +573,7 @@
 {
   GstGLWindowClass *window_class;
 
-  g_return_if_fail (GST_GL_IS_WINDOW (window));
+  g_return_if_fail (GST_IS_GL_WINDOW (window));
   window_class = GST_GL_WINDOW_GET_CLASS (window);
   g_return_if_fail (window_class->quit != NULL);
 
@@ -699,7 +654,7 @@
 {
   GstGLWindowClass *window_class;
 
-  g_return_if_fail (GST_GL_IS_WINDOW (window));
+  g_return_if_fail (GST_IS_GL_WINDOW (window));
   g_return_if_fail (callback != NULL);
   window_class = GST_GL_WINDOW_GET_CLASS (window);
   g_return_if_fail (window_class->send_message != NULL);
@@ -761,7 +716,7 @@
 {
   GstGLWindowClass *window_class;
 
-  g_return_if_fail (GST_GL_IS_WINDOW (window));
+  g_return_if_fail (GST_IS_GL_WINDOW (window));
   g_return_if_fail (callback != NULL);
   window_class = GST_GL_WINDOW_GET_CLASS (window);
   g_return_if_fail (window_class->send_message_async != NULL);
@@ -784,7 +739,7 @@
 gst_gl_window_set_draw_callback (GstGLWindow * window, GstGLWindowCB callback,
     gpointer data, GDestroyNotify destroy_notify)
 {
-  g_return_if_fail (GST_GL_IS_WINDOW (window));
+  g_return_if_fail (GST_IS_GL_WINDOW (window));
 
   GST_GL_WINDOW_LOCK (window);
 
@@ -813,7 +768,7 @@
 gst_gl_window_set_resize_callback (GstGLWindow * window,
     GstGLWindowResizeCB callback, gpointer data, GDestroyNotify destroy_notify)
 {
-  g_return_if_fail (GST_GL_IS_WINDOW (window));
+  g_return_if_fail (GST_IS_GL_WINDOW (window));
 
   GST_GL_WINDOW_LOCK (window);
 
@@ -842,7 +797,7 @@
 gst_gl_window_set_close_callback (GstGLWindow * window, GstGLWindowCB callback,
     gpointer data, GDestroyNotify destroy_notify)
 {
-  g_return_if_fail (GST_GL_IS_WINDOW (window));
+  g_return_if_fail (GST_IS_GL_WINDOW (window));
 
   GST_GL_WINDOW_LOCK (window);
 
@@ -885,7 +840,7 @@
 {
   GstGLWindowClass *window_class;
 
-  g_return_val_if_fail (GST_GL_IS_WINDOW (window), 0);
+  g_return_val_if_fail (GST_IS_GL_WINDOW (window), 0);
   window_class = GST_GL_WINDOW_GET_CLASS (window);
   g_return_val_if_fail (window_class->get_display != NULL, 0);
 
@@ -905,7 +860,7 @@
 {
   GstGLWindowClass *window_class;
 
-  g_return_val_if_fail (GST_GL_IS_WINDOW (window), 0);
+  g_return_val_if_fail (GST_IS_GL_WINDOW (window), 0);
   window_class = GST_GL_WINDOW_GET_CLASS (window);
   g_return_val_if_fail (window_class->get_window_handle != NULL, 0);
 
@@ -923,7 +878,7 @@
 GstGLContext *
 gst_gl_window_get_context (GstGLWindow * window)
 {
-  g_return_val_if_fail (GST_GL_IS_WINDOW (window), NULL);
+  g_return_val_if_fail (GST_IS_GL_WINDOW (window), NULL);
 
   return (GstGLContext *) g_weak_ref_get (&window->context_ref);
 }
@@ -950,50 +905,47 @@
 
 G_DEFINE_TYPE (GstGLDummyWindow, gst_gl_dummy_window, GST_GL_TYPE_WINDOW);
 
-void
-gst_gl_window_open_navigation (GstGLWindow * window)
+static gboolean
+gst_gl_window_navigation_started (gpointer data)
 {
-  g_return_if_fail (GST_GL_IS_WINDOW (window));
-  g_mutex_lock (&window->nav_lock);
-  window->navigation_context = g_main_context_new ();
-  window->navigation_loop = g_main_loop_new (window->navigation_context, FALSE);
-  g_main_context_push_thread_default (window->navigation_context);
-  window->nav_alive = TRUE;
-  g_cond_signal (&window->nav_create_cond);
-  g_mutex_unlock (&window->nav_lock);
-}
+  GstGLWindow *window = data;
 
-void
-gst_gl_window_close_navigation (GstGLWindow * window)
-{
-  g_return_if_fail (GST_GL_IS_WINDOW (window));
-  g_return_if_fail (window->navigation_context != NULL);
-  g_return_if_fail (window->navigation_loop != NULL);
+  g_mutex_lock (&window->priv->nav_lock);
+  window->priv->nav_alive = TRUE;
+  g_cond_signal (&window->priv->nav_create_cond);
+  g_mutex_unlock (&window->priv->nav_lock);
 
-  g_mutex_lock (&window->nav_lock);
-  window->nav_alive = FALSE;
-  g_main_context_pop_thread_default (window->navigation_context);
-  g_main_loop_unref (window->navigation_loop);
-  g_main_context_unref (window->navigation_context);
-  g_cond_signal (&window->nav_destroy_cond);
-  g_mutex_unlock (&window->nav_lock);
-}
-
-void
-gst_gl_window_quit_navigation (GstGLWindow * window)
-{
-  g_return_if_fail (GST_GL_IS_WINDOW (window));
-
-  g_main_loop_quit (window->navigation_loop);
+  return G_SOURCE_REMOVE;
 }
 
 static gpointer
 gst_gl_window_navigation_thread (GstGLWindow * window)
 {
-  gst_gl_window_open_navigation (window);
-  gst_gl_window_run_navigation (window);
+  GSource *source;
+
+  g_return_val_if_fail (GST_IS_GL_WINDOW (window), NULL);
+
+  window->priv->navigation_context = g_main_context_new ();
+  window->priv->navigation_loop =
+      g_main_loop_new (window->priv->navigation_context, FALSE);
+  g_main_context_push_thread_default (window->priv->navigation_context);
+
+  source = g_idle_source_new ();
+  g_source_set_callback (source, (GSourceFunc) gst_gl_window_navigation_started,
+      window, NULL);
+  g_source_attach (source, window->priv->navigation_context);
+  g_source_unref (source);
+
+  g_main_loop_run (window->priv->navigation_loop);
+
+  g_main_context_pop_thread_default (window->priv->navigation_context);
+
+  g_main_loop_unref (window->priv->navigation_loop);
+  g_main_context_unref (window->priv->navigation_context);
+  window->priv->navigation_loop = NULL;
+  window->priv->navigation_context = NULL;
+
   GST_INFO ("navigation loop exited\n");
-  gst_gl_window_close_navigation (window);
 
   return NULL;
 }
@@ -1045,20 +997,6 @@
   return g_object_new (gst_gl_dummy_window_get_type (), NULL);
 }
 
-gboolean
-gst_gl_window_key_event_cb (gpointer data)
-{
-  struct key_event *key_data = (struct key_event *) data;
-  GST_DEBUG
-      ("%s called data struct %p window %p key %s event %s ",
-      __func__, key_data, key_data->window, key_data->key_str,
-      key_data->event_type);
-  gst_gl_window_send_key_event (GST_GL_WINDOW (key_data->window),
-      key_data->event_type, key_data->key_str);
-  g_slice_free (struct key_event, key_data);
-  return G_SOURCE_REMOVE;
-}
-
 void
 gst_gl_window_send_key_event (GstGLWindow * window, const char *event_type,
     const char *key_str)
@@ -1067,21 +1005,45 @@
       event_type, key_str);
 }
 
-gboolean
-gst_gl_window_mouse_event_cb (gpointer data)
+typedef struct
 {
-  struct mouse_event *mouse_data = (struct mouse_event *) data;
-  GST_DEBUG ("%s called data struct %p mouse event %s button %d at %g, %g",
-      __func__, mouse_data, mouse_data->event_type, mouse_data->button,
-      mouse_data->posx, mouse_data->posy);
-  gst_gl_window_send_mouse_event (GST_GL_WINDOW (mouse_data->window),
-      mouse_data->event_type, mouse_data->button, mouse_data->posx,
-      mouse_data->posy);
-  g_slice_free (struct mouse_event, mouse_data);
+  GstGLWindow *window;
+  const char *event_type;
+  const char *key_str;
+} KeyEventData;
+
+static gboolean
+gst_gl_window_key_event_cb (gpointer data)
+{
+  KeyEventData *key_data = data;
+
+  GST_DEBUG
+      ("%s called data struct %p window %p key %s event %s ",
+      __func__, key_data, key_data->window, key_data->key_str,
+      key_data->event_type);
+
+  gst_gl_window_send_key_event (GST_GL_WINDOW (key_data->window),
+      key_data->event_type, key_data->key_str);
+
   return G_SOURCE_REMOVE;
 }
 
 void
+gst_gl_window_send_key_event_async (GstGLWindow * window,
+    const char *event_type, const char *key_str)
+{
+  KeyEventData *key_data = g_new0 (KeyEventData, 1);
+
+  key_data->window = window;
+  key_data->key_str = key_str;
+  key_data->event_type = event_type;
+
+  g_main_context_invoke_full (window->priv->navigation_context,
+      G_PRIORITY_DEFAULT, (GSourceFunc) gst_gl_window_key_event_cb, key_data,
+      (GDestroyNotify) g_free);
+}
+
+void
 gst_gl_window_send_mouse_event (GstGLWindow * window, const char *event_type,
     int button, double posx, double posy)
 {
@@ -1089,6 +1051,48 @@
       event_type, button, posx, posy);
 }
 
+typedef struct
+{
+  GstGLWindow *window;
+  const char *event_type;
+  int button;
+  double posx;
+  double posy;
+} MouseEventData;
+
+static gboolean
+gst_gl_window_mouse_event_cb (gpointer data)
+{
+  MouseEventData *mouse_data = data;
+
+  GST_DEBUG ("%s called data struct %p mouse event %s button %d at %g, %g",
+      __func__, mouse_data, mouse_data->event_type, mouse_data->button,
+      mouse_data->posx, mouse_data->posy);
+
+  gst_gl_window_send_mouse_event (GST_GL_WINDOW (mouse_data->window),
+      mouse_data->event_type, mouse_data->button, mouse_data->posx,
+      mouse_data->posy);
+
+  return G_SOURCE_REMOVE;
+}
+
+void
+gst_gl_window_send_mouse_event_async (GstGLWindow * window,
+    const char *event_type, int button, double posx, double posy)
+{
+  MouseEventData *mouse_data = g_new0 (MouseEventData, 1);
+
+  mouse_data->window = window;
+  mouse_data->event_type = event_type;
+  mouse_data->button = button;
+  mouse_data->posx = posx;
+  mouse_data->posy = posy;
+
+  g_main_context_invoke_full (window->priv->navigation_context,
+      G_PRIORITY_DEFAULT, (GSourceFunc) gst_gl_window_mouse_event_cb,
+      mouse_data, (GDestroyNotify) g_free);
+}
+
 /**
  * gst_gl_window_handle_events:
  * @window: a #GstGLWindow
@@ -1105,7 +1109,7 @@
 {
   GstGLWindowClass *window_class;
 
-  g_return_if_fail (GST_GL_IS_WINDOW (window));
+  g_return_if_fail (GST_IS_GL_WINDOW (window));
   window_class = GST_GL_WINDOW_GET_CLASS (window);
 
   if (window_class->handle_events)
@@ -1132,7 +1136,7 @@
   GstGLWindowClass *window_class;
   gboolean ret = FALSE;
 
-  g_return_val_if_fail (GST_GL_IS_WINDOW (window), FALSE);
+  g_return_val_if_fail (GST_IS_GL_WINDOW (window), FALSE);
   window_class = GST_GL_WINDOW_GET_CLASS (window);
 
   if (x < 0 || y < 0 || width <= 0 || height <= 0)
@@ -1149,7 +1153,7 @@
 {
   GstGLWindowClass *window_class;
 
-  g_return_if_fail (GST_GL_IS_WINDOW (window));
+  g_return_if_fail (GST_IS_GL_WINDOW (window));
   window_class = GST_GL_WINDOW_GET_CLASS (window);
 
   window->queue_resize = TRUE;
@@ -1160,7 +1164,7 @@
 void
 gst_gl_window_resize (GstGLWindow * window, guint width, guint height)
 {
-  g_return_if_fail (GST_GL_IS_WINDOW (window));
+  g_return_if_fail (GST_IS_GL_WINDOW (window));
 
   if (window->resize)
     window->resize (window->resize_data, width, height);
diff --git a/gst-libs/gst/gl/gstglwindow.h b/gst-libs/gst/gl/gstglwindow.h
index e4781c7..1cf5c3e 100644
--- a/gst-libs/gst/gl/gstglwindow.h
+++ b/gst-libs/gst/gl/gstglwindow.h
@@ -33,8 +33,8 @@
 #define GST_GL_TYPE_WINDOW         (gst_gl_window_get_type())
 #define GST_GL_WINDOW(o)           (G_TYPE_CHECK_INSTANCE_CAST((o), GST_GL_TYPE_WINDOW, GstGLWindow))
 #define GST_GL_WINDOW_CLASS(k)     (G_TYPE_CHECK_CLASS_CAST((k), GST_GL_TYPE_WINDOW, GstGLWindowClass))
-#define GST_GL_IS_WINDOW(o)        (G_TYPE_CHECK_INSTANCE_TYPE((o), GST_GL_TYPE_WINDOW))
-#define GST_GL_IS_WINDOW_CLASS(k)  (G_TYPE_CHECK_CLASS_TYPE((k), GST_GL_TYPE_WINDOW))
+#define GST_IS_GL_WINDOW(o)        (G_TYPE_CHECK_INSTANCE_TYPE((o), GST_GL_TYPE_WINDOW))
+#define GST_IS_GL_WINDOW_CLASS(k)  (G_TYPE_CHECK_CLASS_TYPE((k), GST_GL_TYPE_WINDOW))
 #define GST_GL_WINDOW_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS((o), GST_GL_TYPE_WINDOW, GstGLWindowClass))
 
 #define GST_GL_WINDOW_LOCK(w) g_mutex_lock(&GST_GL_WINDOW(w)->lock)
@@ -67,11 +67,6 @@
   GstObject parent;
 
   GMutex        lock;
-  GMutex        nav_lock;
-  GCond         nav_create_cond;
-  GCond         nav_destroy_cond;
-  gboolean      nav_created;
-  gboolean      nav_alive;
 
   GstGLDisplay *display;
   GWeakRef      context_ref;
@@ -93,9 +88,6 @@
   gboolean              queue_resize;
 
   /*< private >*/
-  GMainContext *navigation_context;
-  GMainLoop *navigation_loop;
-
   GstGLWindowPrivate *priv;
 
   gpointer _reserved[GST_PADDING];
@@ -108,7 +100,6 @@
  * @set_window_handle: Set a window to render into
  * @get_window_handle: Gets the current window that this #GstGLWindow is
  *                     rendering into
- * @draw_unlocked: redraw the window with the specified dimensions
  * @draw: redraw the window with the specified dimensions
  * @run: run the mainloop
  * @quit: send a quit to the mainloop
@@ -131,7 +122,6 @@
   guintptr (*get_display)        (GstGLWindow *window);
   void     (*set_window_handle)  (GstGLWindow *window, guintptr id);
   guintptr (*get_window_handle)  (GstGLWindow *window);
-  void     (*draw_unlocked)      (GstGLWindow *window);
   void     (*draw)               (GstGLWindow *window);
   void     (*run)                (GstGLWindow *window);
   void     (*quit)               (GstGLWindow *window);
@@ -150,22 +140,6 @@
   gpointer _reserved[GST_PADDING];
 };
 
-struct key_event
-{
-  GstGLWindow *window;
-  const char *event_type;
-  const char *key_str;
-};
-
-struct mouse_event
-{
-  GstGLWindow *window;
-  const char *event_type;
-  int button;
-  double posx;
-  double posy;
-};
-
 GQuark gst_gl_window_error_quark (void);
 GType gst_gl_window_get_type     (void);
 
@@ -203,20 +177,26 @@
 /* navigation */
 void     gst_gl_window_handle_events        (GstGLWindow * window,
                                              gboolean handle_events);
-gboolean gst_gl_window_key_event_cb         (gpointer data);
-gboolean gst_gl_window_mouse_event_cb       (gpointer data);
+
 void     gst_gl_window_send_key_event       (GstGLWindow * window,
                                              const char * event_type,
                                              const char * key_str);
+void     gst_gl_window_send_key_event_async (GstGLWindow * window,
+                                             const char * event_type,
+                                             const char * key_str);
 void     gst_gl_window_send_mouse_event     (GstGLWindow * window,
                                              const char * event_type,
                                              int button,
                                              double posx,
                                              double posy);
+void     gst_gl_window_send_mouse_event_async (GstGLWindow * window,
+                                             const char * event_type,
+                                             int button,
+                                             double posx,
+                                             double posy);
 
 /* surfaces/rendering */
 void     gst_gl_window_queue_resize         (GstGLWindow *window);
-void     gst_gl_window_draw_unlocked        (GstGLWindow *window);
 void     gst_gl_window_draw                 (GstGLWindow *window);
 void     gst_gl_window_show                 (GstGLWindow *window);
 void     gst_gl_window_set_preferred_size   (GstGLWindow * window,
diff --git a/gst-libs/gst/gl/utils/gles_versions.h b/gst-libs/gst/gl/utils/gles_versions.h
new file mode 100644
index 0000000..e80bf1e
--- /dev/null
+++ b/gst-libs/gst/gl/utils/gles_versions.h
@@ -0,0 +1,38 @@
+/*
+ * GStreamer
+ * Copyright (C) 2015 Matthew Waters <matthew@centricular.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifndef _GLES_VERSIONS_H_
+#define _GLES_VERSIONS_H_
+
+/* list of known OpenGL versions */
+/* *INDENT-OFF* */
+
+static const struct { int major, minor; } gles2_versions[] = {
+   {3, 2},
+   {3, 1},
+   {3, 0},
+
+   {2, 0},
+
+   {0, 0} /* end of list */
+};
+/* *INDENT-ON* */
+
+#endif /* _GLES_VERSIONS_H_ */
diff --git a/gst-libs/gst/gl/utils/opengl_versions.h b/gst-libs/gst/gl/utils/opengl_versions.h
index beeeab6..081caeb 100644
--- a/gst-libs/gst/gl/utils/opengl_versions.h
+++ b/gst-libs/gst/gl/utils/opengl_versions.h
@@ -48,6 +48,7 @@
 
    {0, 0} /* end of list */
 };
+
 /* *INDENT-ON* */
 
 #endif /* _OPENGL_VERSIONS_H_ */
diff --git a/gst-libs/gst/gl/wayland/Makefile.in b/gst-libs/gst/gl/wayland/Makefile.in
index 55462d4..3077fc3 100644
--- a/gst-libs/gst/gl/wayland/Makefile.in
+++ b/gst-libs/gst/gl/wayland/Makefile.in
@@ -116,16 +116,15 @@
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
 	$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
-	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gsettings.m4 \
-	$(top_srcdir)/m4/gst-fionread.m4 $(top_srcdir)/m4/gst-sdl.m4 \
-	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
-	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
-	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libgcrypt.m4 \
-	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
-	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
-	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
-	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
-	$(top_srcdir)/configure.ac
+	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gst-fionread.m4 \
+	$(top_srcdir)/m4/gst-sdl.m4 $(top_srcdir)/m4/iconv.m4 \
+	$(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \
+	$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
+	$(top_srcdir)/m4/libgcrypt.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
+	$(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \
@@ -247,6 +246,8 @@
 CLUTTER_X11_LIBS = @CLUTTER_X11_LIBS@
 CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
+CUDA_CFLAGS = @CUDA_CFLAGS@
+CUDA_LIBS = @CUDA_LIBS@
 CURL_CFLAGS = @CURL_CFLAGS@
 CURL_LIBS = @CURL_LIBS@
 CXX = @CXX@
@@ -284,6 +285,8 @@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
+EGL_CFLAGS = @EGL_CFLAGS@
+EGL_LIBS = @EGL_LIBS@
 EGREP = @EGREP@
 ERROR_CFLAGS = @ERROR_CFLAGS@
 ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
@@ -292,7 +295,6 @@
 EXIF_CFLAGS = @EXIF_CFLAGS@
 EXIF_LIBS = @EXIF_LIBS@
 FAAC_LIBS = @FAAC_LIBS@
-FAAD_IS_NEAAC = @FAAD_IS_NEAAC@
 FAAD_LIBS = @FAAD_LIBS@
 FFLAGS = @FFLAGS@
 FGREP = @FGREP@
@@ -311,8 +313,9 @@
 GIO_LIBS = @GIO_LIBS@
 GIO_UNIX_CFLAGS = @GIO_UNIX_CFLAGS@
 GIO_UNIX_LIBS = @GIO_UNIX_LIBS@
+GLES2_CFLAGS = @GLES2_CFLAGS@
+GLES2_LIBS = @GLES2_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
-GLIB_COMPILE_SCHEMAS = @GLIB_COMPILE_SCHEMAS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
@@ -329,16 +332,17 @@
 GMODULE_NO_EXPORT_LIBS = @GMODULE_NO_EXPORT_LIBS@
 GMSGFMT = @GMSGFMT@
 GMSGFMT_015 = @GMSGFMT_015@
+GNUSTL_CFLAGS = @GNUSTL_CFLAGS@
+GNUSTL_LIBS = @GNUSTL_LIBS@
 GRAPHENE_CFLAGS = @GRAPHENE_CFLAGS@
 GRAPHENE_LIBS = @GRAPHENE_LIBS@
 GREP = @GREP@
-GSETTINGS_CFLAGS = @GSETTINGS_CFLAGS@
-GSETTINGS_DISABLE_SCHEMAS_COMPILE = @GSETTINGS_DISABLE_SCHEMAS_COMPILE@
-GSETTINGS_LIBS = @GSETTINGS_LIBS@
 GSM_LIBS = @GSM_LIBS@
 GSTPB_PLUGINS_DIR = @GSTPB_PLUGINS_DIR@
 GSTPB_PREFIX = @GSTPB_PREFIX@
 GST_AGE = @GST_AGE@
+GST_ALLOCATORS_CFLAGS = @GST_ALLOCATORS_CFLAGS@
+GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
 GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
 GST_API_VERSION = @GST_API_VERSION@
 GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
@@ -364,6 +368,8 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PBUTILS_CFLAGS = @GST_PBUTILS_CFLAGS@
+GST_PBUTILS_LIBS = @GST_PBUTILS_LIBS@
 GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BAD_CFLAGS = @GST_PLUGINS_BAD_CFLAGS@
@@ -389,6 +395,8 @@
 GST_PREFIX = @GST_PREFIX@
 GST_REVISION = @GST_REVISION@
 GST_TOOLS_DIR = @GST_TOOLS_DIR@
+GST_VIDEO_CFLAGS = @GST_VIDEO_CFLAGS@
+GST_VIDEO_LIBS = @GST_VIDEO_LIBS@
 GTK3_CFLAGS = @GTK3_CFLAGS@
 GTK3_GL_CFLAGS = @GTK3_GL_CFLAGS@
 GTK3_GL_LIBS = @GTK3_GL_LIBS@
@@ -490,6 +498,7 @@
 LTLIBICONV = @LTLIBICONV@
 LTLIBINTL = @LTLIBINTL@
 LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
 MANIFEST_TOOL = @MANIFEST_TOOL@
@@ -503,8 +512,6 @@
 MODPLUG_LIBS = @MODPLUG_LIBS@
 MPEG2ENC_CFLAGS = @MPEG2ENC_CFLAGS@
 MPEG2ENC_LIBS = @MPEG2ENC_LIBS@
-MPG123_CFLAGS = @MPG123_CFLAGS@
-MPG123_LIBS = @MPG123_LIBS@
 MPLEX_CFLAGS = @MPLEX_CFLAGS@
 MPLEX_LDFLAGS = @MPLEX_LDFLAGS@
 MPLEX_LIBS = @MPLEX_LIBS@
@@ -520,6 +527,8 @@
 NETTLE_LIBS = @NETTLE_LIBS@
 NM = @NM@
 NMEDIT = @NMEDIT@
+NVENCODE_CFLAGS = @NVENCODE_CFLAGS@
+NVENCODE_LIBS = @NVENCODE_LIBS@
 OBJC = @OBJC@
 OBJCDEPMODE = @OBJCDEPMODE@
 OBJCFLAGS = @OBJCFLAGS@
@@ -577,16 +586,18 @@
 PYTHON_PLATFORM = @PYTHON_PLATFORM@
 PYTHON_PREFIX = @PYTHON_PREFIX@
 PYTHON_VERSION = @PYTHON_VERSION@
+QT_ANDROID_CFLAGS = @QT_ANDROID_CFLAGS@
+QT_ANDROID_LIBS = @QT_ANDROID_LIBS@
 QT_CFLAGS = @QT_CFLAGS@
 QT_LIBS = @QT_LIBS@
+QT_MAC_CFLAGS = @QT_MAC_CFLAGS@
+QT_MAC_LIBS = @QT_MAC_LIBS@
 QT_WAYLAND_CFLAGS = @QT_WAYLAND_CFLAGS@
 QT_WAYLAND_LIBS = @QT_WAYLAND_LIBS@
 QT_X11_CFLAGS = @QT_X11_CFLAGS@
 QT_X11_LIBS = @QT_X11_LIBS@
 RANLIB = @RANLIB@
 RCC = @RCC@
-RSVG_2_36_2_CFLAGS = @RSVG_2_36_2_CFLAGS@
-RSVG_2_36_2_LIBS = @RSVG_2_36_2_LIBS@
 RSVG_CFLAGS = @RSVG_CFLAGS@
 RSVG_LIBS = @RSVG_LIBS@
 RTMP_CFLAGS = @RTMP_CFLAGS@
@@ -638,6 +649,7 @@
 VOAACENC_LIBS = @VOAACENC_LIBS@
 VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
 VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VULKAN_LIBS = @VULKAN_LIBS@
 WARNING_CFLAGS = @WARNING_CFLAGS@
 WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
 WARNING_OBJCFLAGS = @WARNING_OBJCFLAGS@
@@ -648,6 +660,7 @@
 WAYLAND_LIBS = @WAYLAND_LIBS@
 WEBP_CFLAGS = @WEBP_CFLAGS@
 WEBP_LIBS = @WEBP_LIBS@
+WGET = @WGET@
 WILDMIDI_CFLAGS = @WILDMIDI_CFLAGS@
 WILDMIDI_LIBS = @WILDMIDI_LIBS@
 WINKS_LIBS = @WINKS_LIBS@
@@ -657,6 +670,8 @@
 X11_LIBS = @X11_LIBS@
 X265_CFLAGS = @X265_CFLAGS@
 X265_LIBS = @X265_LIBS@
+XCB_CFLAGS = @XCB_CFLAGS@
+XCB_LIBS = @XCB_LIBS@
 XCOMPOSITE_CFLAGS = @XCOMPOSITE_CFLAGS@
 XCOMPOSITE_LIBS = @XCOMPOSITE_LIBS@
 XGETTEXT = @XGETTEXT@
@@ -694,7 +709,6 @@
 docdir = @docdir@
 dvidir = @dvidir@
 exec_prefix = @exec_prefix@
-gsettingsschemadir = @gsettingsschemadir@
 host = @host@
 host_alias = @host_alias@
 host_cpu = @host_cpu@
diff --git a/gst-libs/gst/gl/wayland/gstglwindow_wayland_egl.c b/gst-libs/gst/gl/wayland/gstglwindow_wayland_egl.c
index b34ad42..6e1f0c5 100644
--- a/gst-libs/gst/gl/wayland/gstglwindow_wayland_egl.c
+++ b/gst-libs/gst/gl/wayland/gstglwindow_wayland_egl.c
@@ -334,8 +334,6 @@
       GST_DEBUG_FUNCPTR (gst_gl_window_wayland_egl_get_window_handle);
   window_class->set_window_handle =
       GST_DEBUG_FUNCPTR (gst_gl_window_wayland_egl_set_window_handle);
-  window_class->draw_unlocked =
-      GST_DEBUG_FUNCPTR (gst_gl_window_wayland_egl_draw);
   window_class->show = GST_DEBUG_FUNCPTR (gst_gl_window_wayland_egl_show);
   window_class->draw = GST_DEBUG_FUNCPTR (gst_gl_window_wayland_egl_draw);
   window_class->close = GST_DEBUG_FUNCPTR (gst_gl_window_wayland_egl_close);
diff --git a/gst-libs/gst/gl/wayland/gstglwindow_wayland_egl.h b/gst-libs/gst/gl/wayland/gstglwindow_wayland_egl.h
index f76b5b0..e0166da 100644
--- a/gst-libs/gst/gl/wayland/gstglwindow_wayland_egl.h
+++ b/gst-libs/gst/gl/wayland/gstglwindow_wayland_egl.h
@@ -32,8 +32,8 @@
 #define GST_GL_TYPE_WINDOW_WAYLAND_EGL         (gst_gl_window_wayland_egl_get_type())
 #define GST_GL_WINDOW_WAYLAND_EGL(o)           (G_TYPE_CHECK_INSTANCE_CAST((o), GST_GL_TYPE_WINDOW_WAYLAND_EGL, GstGLWindowWaylandEGL))
 #define GST_GL_WINDOW_WAYLAND_EGL_CLASS(k)     (G_TYPE_CHECK_CLASS((k), GST_GL_TYPE_WINDOW_WAYLAND_EGL, GstGLWindowWaylandEGLClass))
-#define GST_GL_IS_WINDOW_WAYLAND_EGL(o)        (G_TYPE_CHECK_INSTANCE_TYPE((o), GST_GL_TYPE_WINDOW_WAYLAND_EGL))
-#define GST_GL_IS_WINDOW_WAYLAND_EGL_CLASS(k)  (G_TYPE_CHECK_CLASS_TYPE((k), GST_GL_TYPE_WINDOW_WAYLAND_EGL))
+#define GST_IS_GL_WINDOW_WAYLAND_EGL(o)        (G_TYPE_CHECK_INSTANCE_TYPE((o), GST_GL_TYPE_WINDOW_WAYLAND_EGL))
+#define GST_IS_GL_WINDOW_WAYLAND_EGL_CLASS(k)  (G_TYPE_CHECK_CLASS_TYPE((k), GST_GL_TYPE_WINDOW_WAYLAND_EGL))
 #define GST_GL_WINDOW_WAYLAND_EGL_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS((o), GST_GL_TYPE_WINDOW_WAYLAND_EGL, GstGLWindowWaylandEGL_Class))
 
 typedef struct _GstGLWindowWaylandEGL        GstGLWindowWaylandEGL;
diff --git a/gst-libs/gst/gl/wayland/wayland_event_source.h b/gst-libs/gst/gl/wayland/wayland_event_source.h
index 940a5e0..fa20892 100644
--- a/gst-libs/gst/gl/wayland/wayland_event_source.h
+++ b/gst-libs/gst/gl/wayland/wayland_event_source.h
@@ -36,7 +36,7 @@
 GSource * wayland_event_source_new (struct wl_display *display,
                                     struct wl_event_queue *queue);
 
-gint      gst_gl_wl_display_roundtrip_queue (struct wl_display *display,
+G_GNUC_INTERNAL gint      gst_gl_wl_display_roundtrip_queue (struct wl_display *display,
                                              struct wl_event_queue *queue);
 
 #endif /* __WAYLAND_EVENT_SOURCE_H__ */
diff --git a/gst-libs/gst/gl/win32/Makefile.in b/gst-libs/gst/gl/win32/Makefile.in
index ccf98e9..70c7eac 100644
--- a/gst-libs/gst/gl/win32/Makefile.in
+++ b/gst-libs/gst/gl/win32/Makefile.in
@@ -118,16 +118,15 @@
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
 	$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
-	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gsettings.m4 \
-	$(top_srcdir)/m4/gst-fionread.m4 $(top_srcdir)/m4/gst-sdl.m4 \
-	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
-	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
-	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libgcrypt.m4 \
-	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
-	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
-	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
-	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
-	$(top_srcdir)/configure.ac
+	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gst-fionread.m4 \
+	$(top_srcdir)/m4/gst-sdl.m4 $(top_srcdir)/m4/iconv.m4 \
+	$(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \
+	$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
+	$(top_srcdir)/m4/libgcrypt.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
+	$(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 DIST_COMMON = $(srcdir)/Makefile.am $(am__noinst_HEADERS_DIST) \
@@ -252,6 +251,8 @@
 CLUTTER_X11_LIBS = @CLUTTER_X11_LIBS@
 CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
+CUDA_CFLAGS = @CUDA_CFLAGS@
+CUDA_LIBS = @CUDA_LIBS@
 CURL_CFLAGS = @CURL_CFLAGS@
 CURL_LIBS = @CURL_LIBS@
 CXX = @CXX@
@@ -289,6 +290,8 @@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
+EGL_CFLAGS = @EGL_CFLAGS@
+EGL_LIBS = @EGL_LIBS@
 EGREP = @EGREP@
 ERROR_CFLAGS = @ERROR_CFLAGS@
 ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
@@ -297,7 +300,6 @@
 EXIF_CFLAGS = @EXIF_CFLAGS@
 EXIF_LIBS = @EXIF_LIBS@
 FAAC_LIBS = @FAAC_LIBS@
-FAAD_IS_NEAAC = @FAAD_IS_NEAAC@
 FAAD_LIBS = @FAAD_LIBS@
 FFLAGS = @FFLAGS@
 FGREP = @FGREP@
@@ -316,8 +318,9 @@
 GIO_LIBS = @GIO_LIBS@
 GIO_UNIX_CFLAGS = @GIO_UNIX_CFLAGS@
 GIO_UNIX_LIBS = @GIO_UNIX_LIBS@
+GLES2_CFLAGS = @GLES2_CFLAGS@
+GLES2_LIBS = @GLES2_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
-GLIB_COMPILE_SCHEMAS = @GLIB_COMPILE_SCHEMAS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
@@ -334,16 +337,17 @@
 GMODULE_NO_EXPORT_LIBS = @GMODULE_NO_EXPORT_LIBS@
 GMSGFMT = @GMSGFMT@
 GMSGFMT_015 = @GMSGFMT_015@
+GNUSTL_CFLAGS = @GNUSTL_CFLAGS@
+GNUSTL_LIBS = @GNUSTL_LIBS@
 GRAPHENE_CFLAGS = @GRAPHENE_CFLAGS@
 GRAPHENE_LIBS = @GRAPHENE_LIBS@
 GREP = @GREP@
-GSETTINGS_CFLAGS = @GSETTINGS_CFLAGS@
-GSETTINGS_DISABLE_SCHEMAS_COMPILE = @GSETTINGS_DISABLE_SCHEMAS_COMPILE@
-GSETTINGS_LIBS = @GSETTINGS_LIBS@
 GSM_LIBS = @GSM_LIBS@
 GSTPB_PLUGINS_DIR = @GSTPB_PLUGINS_DIR@
 GSTPB_PREFIX = @GSTPB_PREFIX@
 GST_AGE = @GST_AGE@
+GST_ALLOCATORS_CFLAGS = @GST_ALLOCATORS_CFLAGS@
+GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
 GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
 GST_API_VERSION = @GST_API_VERSION@
 GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
@@ -369,6 +373,8 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PBUTILS_CFLAGS = @GST_PBUTILS_CFLAGS@
+GST_PBUTILS_LIBS = @GST_PBUTILS_LIBS@
 GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BAD_CFLAGS = @GST_PLUGINS_BAD_CFLAGS@
@@ -394,6 +400,8 @@
 GST_PREFIX = @GST_PREFIX@
 GST_REVISION = @GST_REVISION@
 GST_TOOLS_DIR = @GST_TOOLS_DIR@
+GST_VIDEO_CFLAGS = @GST_VIDEO_CFLAGS@
+GST_VIDEO_LIBS = @GST_VIDEO_LIBS@
 GTK3_CFLAGS = @GTK3_CFLAGS@
 GTK3_GL_CFLAGS = @GTK3_GL_CFLAGS@
 GTK3_GL_LIBS = @GTK3_GL_LIBS@
@@ -495,6 +503,7 @@
 LTLIBICONV = @LTLIBICONV@
 LTLIBINTL = @LTLIBINTL@
 LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
 MANIFEST_TOOL = @MANIFEST_TOOL@
@@ -508,8 +517,6 @@
 MODPLUG_LIBS = @MODPLUG_LIBS@
 MPEG2ENC_CFLAGS = @MPEG2ENC_CFLAGS@
 MPEG2ENC_LIBS = @MPEG2ENC_LIBS@
-MPG123_CFLAGS = @MPG123_CFLAGS@
-MPG123_LIBS = @MPG123_LIBS@
 MPLEX_CFLAGS = @MPLEX_CFLAGS@
 MPLEX_LDFLAGS = @MPLEX_LDFLAGS@
 MPLEX_LIBS = @MPLEX_LIBS@
@@ -525,6 +532,8 @@
 NETTLE_LIBS = @NETTLE_LIBS@
 NM = @NM@
 NMEDIT = @NMEDIT@
+NVENCODE_CFLAGS = @NVENCODE_CFLAGS@
+NVENCODE_LIBS = @NVENCODE_LIBS@
 OBJC = @OBJC@
 OBJCDEPMODE = @OBJCDEPMODE@
 OBJCFLAGS = @OBJCFLAGS@
@@ -582,16 +591,18 @@
 PYTHON_PLATFORM = @PYTHON_PLATFORM@
 PYTHON_PREFIX = @PYTHON_PREFIX@
 PYTHON_VERSION = @PYTHON_VERSION@
+QT_ANDROID_CFLAGS = @QT_ANDROID_CFLAGS@
+QT_ANDROID_LIBS = @QT_ANDROID_LIBS@
 QT_CFLAGS = @QT_CFLAGS@
 QT_LIBS = @QT_LIBS@
+QT_MAC_CFLAGS = @QT_MAC_CFLAGS@
+QT_MAC_LIBS = @QT_MAC_LIBS@
 QT_WAYLAND_CFLAGS = @QT_WAYLAND_CFLAGS@
 QT_WAYLAND_LIBS = @QT_WAYLAND_LIBS@
 QT_X11_CFLAGS = @QT_X11_CFLAGS@
 QT_X11_LIBS = @QT_X11_LIBS@
 RANLIB = @RANLIB@
 RCC = @RCC@
-RSVG_2_36_2_CFLAGS = @RSVG_2_36_2_CFLAGS@
-RSVG_2_36_2_LIBS = @RSVG_2_36_2_LIBS@
 RSVG_CFLAGS = @RSVG_CFLAGS@
 RSVG_LIBS = @RSVG_LIBS@
 RTMP_CFLAGS = @RTMP_CFLAGS@
@@ -643,6 +654,7 @@
 VOAACENC_LIBS = @VOAACENC_LIBS@
 VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
 VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VULKAN_LIBS = @VULKAN_LIBS@
 WARNING_CFLAGS = @WARNING_CFLAGS@
 WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
 WARNING_OBJCFLAGS = @WARNING_OBJCFLAGS@
@@ -653,6 +665,7 @@
 WAYLAND_LIBS = @WAYLAND_LIBS@
 WEBP_CFLAGS = @WEBP_CFLAGS@
 WEBP_LIBS = @WEBP_LIBS@
+WGET = @WGET@
 WILDMIDI_CFLAGS = @WILDMIDI_CFLAGS@
 WILDMIDI_LIBS = @WILDMIDI_LIBS@
 WINKS_LIBS = @WINKS_LIBS@
@@ -662,6 +675,8 @@
 X11_LIBS = @X11_LIBS@
 X265_CFLAGS = @X265_CFLAGS@
 X265_LIBS = @X265_LIBS@
+XCB_CFLAGS = @XCB_CFLAGS@
+XCB_LIBS = @XCB_LIBS@
 XCOMPOSITE_CFLAGS = @XCOMPOSITE_CFLAGS@
 XCOMPOSITE_LIBS = @XCOMPOSITE_LIBS@
 XGETTEXT = @XGETTEXT@
@@ -699,7 +714,6 @@
 docdir = @docdir@
 dvidir = @dvidir@
 exec_prefix = @exec_prefix@
-gsettingsschemadir = @gsettingsschemadir@
 host = @host@
 host_alias = @host_alias@
 host_cpu = @host_cpu@
diff --git a/gst-libs/gst/gl/win32/gstglcontext_wgl.h b/gst-libs/gst/gl/win32/gstglcontext_wgl.h
index 64bf141..2458de8 100644
--- a/gst-libs/gst/gl/win32/gstglcontext_wgl.h
+++ b/gst-libs/gst/gl/win32/gstglcontext_wgl.h
@@ -28,8 +28,8 @@
 #define GST_GL_TYPE_CONTEXT_WGL         (gst_gl_context_wgl_get_type())
 #define GST_GL_CONTEXT_WGL(o)           (G_TYPE_CHECK_INSTANCE_CAST((o), GST_GL_TYPE_CONTEXT_WGL, GstGLContextWGL))
 #define GST_GL_CONTEXT_WGL_CLASS(k)     (G_TYPE_CHECK_CLASS((k), GST_GL_TYPE_CONTEXT_WGL, GstGLContextWGLClass))
-#define GST_GL_IS_CONTEXT_WGL(o)        (G_TYPE_CHECK_INSTANCE_TYPE((o), GST_GL_TYPE_CONTEXT_WGL))
-#define GST_GL_IS_CONTEXT_WGL_CLASS(k)  (G_TYPE_CHECK_CLASS_TYPE((k), GST_GL_TYPE_CONTEXT_WGL))
+#define GST_IS_GL_CONTEXT_WGL(o)        (G_TYPE_CHECK_INSTANCE_TYPE((o), GST_GL_TYPE_CONTEXT_WGL))
+#define GST_IS_GL_CONTEXT_WGL_CLASS(k)  (G_TYPE_CHECK_CLASS_TYPE((k), GST_GL_TYPE_CONTEXT_WGL))
 #define GST_GL_CONTEXT_WGL_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS((o), GST_GL_TYPE_CONTEXT_WGL, GstGLContextWGLClass))
 
 typedef struct _GstGLContextWGL        GstGLContextWGL;
diff --git a/gst-libs/gst/gl/win32/gstglwindow_win32.c b/gst-libs/gst/gl/win32/gstglwindow_win32.c
index a2ed3e6..1ff18bb 100644
--- a/gst-libs/gst/gl/win32/gstglwindow_win32.c
+++ b/gst-libs/gst/gl/win32/gstglwindow_win32.c
@@ -74,7 +74,6 @@
 
   window_class->set_window_handle =
       GST_DEBUG_FUNCPTR (gst_gl_window_win32_set_window_handle);
-  window_class->draw_unlocked = GST_DEBUG_FUNCPTR (gst_gl_window_win32_draw);
   window_class->draw = GST_DEBUG_FUNCPTR (gst_gl_window_win32_draw);
   window_class->get_display =
       GST_DEBUG_FUNCPTR (gst_gl_window_win32_get_display);
diff --git a/gst-libs/gst/gl/win32/gstglwindow_win32.h b/gst-libs/gst/gl/win32/gstglwindow_win32.h
index 080a4d4..c17b492 100644
--- a/gst-libs/gst/gl/win32/gstglwindow_win32.h
+++ b/gst-libs/gst/gl/win32/gstglwindow_win32.h
@@ -32,8 +32,8 @@
 #define GST_GL_TYPE_WINDOW_WIN32         (gst_gl_window_win32_get_type())
 #define GST_GL_WINDOW_WIN32(o)           (G_TYPE_CHECK_INSTANCE_CAST((o), GST_GL_TYPE_WINDOW_WIN32, GstGLWindowWin32))
 #define GST_GL_WINDOW_WIN32_CLASS(k)     (G_TYPE_CHECK_CLASS((k), GST_GL_TYPE_WINDOW_WIN32, GstGLWindowWin32Class))
-#define GST_GL_IS_WINDOW_WIN32(o)        (G_TYPE_CHECK_INSTANCE_TYPE((o), GST_GL_TYPE_WINDOW_WIN32))
-#define GST_GL_IS_WINDOW_WIN32_CLASS(k)  (G_TYPE_CHECK_CLASS_TYPE((k), GST_GL_TYPE_WINDOW_WIN32))
+#define GST_IS_GL_WINDOW_WIN32(o)        (G_TYPE_CHECK_INSTANCE_TYPE((o), GST_GL_TYPE_WINDOW_WIN32))
+#define GST_IS_GL_WINDOW_WIN32_CLASS(k)  (G_TYPE_CHECK_CLASS_TYPE((k), GST_GL_TYPE_WINDOW_WIN32))
 #define GST_GL_WINDOW_WIN32_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS((o), GST_GL_TYPE_WINDOW_WIN32, GstGLWindowWin32Class))
 
 typedef struct _GstGLWindowWin32        GstGLWindowWin32;
diff --git a/gst-libs/gst/gl/x11/Makefile.in b/gst-libs/gst/gl/x11/Makefile.in
index a919ca5..f3c8835 100644
--- a/gst-libs/gst/gl/x11/Makefile.in
+++ b/gst-libs/gst/gl/x11/Makefile.in
@@ -118,16 +118,15 @@
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
 	$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
-	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gsettings.m4 \
-	$(top_srcdir)/m4/gst-fionread.m4 $(top_srcdir)/m4/gst-sdl.m4 \
-	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
-	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
-	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libgcrypt.m4 \
-	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
-	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
-	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
-	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
-	$(top_srcdir)/configure.ac
+	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gst-fionread.m4 \
+	$(top_srcdir)/m4/gst-sdl.m4 $(top_srcdir)/m4/iconv.m4 \
+	$(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \
+	$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
+	$(top_srcdir)/m4/libgcrypt.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
+	$(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 DIST_COMMON = $(srcdir)/Makefile.am $(libgstgl_x11include_HEADERS) \
@@ -281,6 +280,8 @@
 CLUTTER_X11_LIBS = @CLUTTER_X11_LIBS@
 CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
+CUDA_CFLAGS = @CUDA_CFLAGS@
+CUDA_LIBS = @CUDA_LIBS@
 CURL_CFLAGS = @CURL_CFLAGS@
 CURL_LIBS = @CURL_LIBS@
 CXX = @CXX@
@@ -318,6 +319,8 @@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
+EGL_CFLAGS = @EGL_CFLAGS@
+EGL_LIBS = @EGL_LIBS@
 EGREP = @EGREP@
 ERROR_CFLAGS = @ERROR_CFLAGS@
 ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
@@ -326,7 +329,6 @@
 EXIF_CFLAGS = @EXIF_CFLAGS@
 EXIF_LIBS = @EXIF_LIBS@
 FAAC_LIBS = @FAAC_LIBS@
-FAAD_IS_NEAAC = @FAAD_IS_NEAAC@
 FAAD_LIBS = @FAAD_LIBS@
 FFLAGS = @FFLAGS@
 FGREP = @FGREP@
@@ -345,8 +347,9 @@
 GIO_LIBS = @GIO_LIBS@
 GIO_UNIX_CFLAGS = @GIO_UNIX_CFLAGS@
 GIO_UNIX_LIBS = @GIO_UNIX_LIBS@
+GLES2_CFLAGS = @GLES2_CFLAGS@
+GLES2_LIBS = @GLES2_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
-GLIB_COMPILE_SCHEMAS = @GLIB_COMPILE_SCHEMAS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
@@ -363,16 +366,17 @@
 GMODULE_NO_EXPORT_LIBS = @GMODULE_NO_EXPORT_LIBS@
 GMSGFMT = @GMSGFMT@
 GMSGFMT_015 = @GMSGFMT_015@
+GNUSTL_CFLAGS = @GNUSTL_CFLAGS@
+GNUSTL_LIBS = @GNUSTL_LIBS@
 GRAPHENE_CFLAGS = @GRAPHENE_CFLAGS@
 GRAPHENE_LIBS = @GRAPHENE_LIBS@
 GREP = @GREP@
-GSETTINGS_CFLAGS = @GSETTINGS_CFLAGS@
-GSETTINGS_DISABLE_SCHEMAS_COMPILE = @GSETTINGS_DISABLE_SCHEMAS_COMPILE@
-GSETTINGS_LIBS = @GSETTINGS_LIBS@
 GSM_LIBS = @GSM_LIBS@
 GSTPB_PLUGINS_DIR = @GSTPB_PLUGINS_DIR@
 GSTPB_PREFIX = @GSTPB_PREFIX@
 GST_AGE = @GST_AGE@
+GST_ALLOCATORS_CFLAGS = @GST_ALLOCATORS_CFLAGS@
+GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
 GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
 GST_API_VERSION = @GST_API_VERSION@
 GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
@@ -398,6 +402,8 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PBUTILS_CFLAGS = @GST_PBUTILS_CFLAGS@
+GST_PBUTILS_LIBS = @GST_PBUTILS_LIBS@
 GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BAD_CFLAGS = @GST_PLUGINS_BAD_CFLAGS@
@@ -423,6 +429,8 @@
 GST_PREFIX = @GST_PREFIX@
 GST_REVISION = @GST_REVISION@
 GST_TOOLS_DIR = @GST_TOOLS_DIR@
+GST_VIDEO_CFLAGS = @GST_VIDEO_CFLAGS@
+GST_VIDEO_LIBS = @GST_VIDEO_LIBS@
 GTK3_CFLAGS = @GTK3_CFLAGS@
 GTK3_GL_CFLAGS = @GTK3_GL_CFLAGS@
 GTK3_GL_LIBS = @GTK3_GL_LIBS@
@@ -524,6 +532,7 @@
 LTLIBICONV = @LTLIBICONV@
 LTLIBINTL = @LTLIBINTL@
 LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
 MANIFEST_TOOL = @MANIFEST_TOOL@
@@ -537,8 +546,6 @@
 MODPLUG_LIBS = @MODPLUG_LIBS@
 MPEG2ENC_CFLAGS = @MPEG2ENC_CFLAGS@
 MPEG2ENC_LIBS = @MPEG2ENC_LIBS@
-MPG123_CFLAGS = @MPG123_CFLAGS@
-MPG123_LIBS = @MPG123_LIBS@
 MPLEX_CFLAGS = @MPLEX_CFLAGS@
 MPLEX_LDFLAGS = @MPLEX_LDFLAGS@
 MPLEX_LIBS = @MPLEX_LIBS@
@@ -554,6 +561,8 @@
 NETTLE_LIBS = @NETTLE_LIBS@
 NM = @NM@
 NMEDIT = @NMEDIT@
+NVENCODE_CFLAGS = @NVENCODE_CFLAGS@
+NVENCODE_LIBS = @NVENCODE_LIBS@
 OBJC = @OBJC@
 OBJCDEPMODE = @OBJCDEPMODE@
 OBJCFLAGS = @OBJCFLAGS@
@@ -611,16 +620,18 @@
 PYTHON_PLATFORM = @PYTHON_PLATFORM@
 PYTHON_PREFIX = @PYTHON_PREFIX@
 PYTHON_VERSION = @PYTHON_VERSION@
+QT_ANDROID_CFLAGS = @QT_ANDROID_CFLAGS@
+QT_ANDROID_LIBS = @QT_ANDROID_LIBS@
 QT_CFLAGS = @QT_CFLAGS@
 QT_LIBS = @QT_LIBS@
+QT_MAC_CFLAGS = @QT_MAC_CFLAGS@
+QT_MAC_LIBS = @QT_MAC_LIBS@
 QT_WAYLAND_CFLAGS = @QT_WAYLAND_CFLAGS@
 QT_WAYLAND_LIBS = @QT_WAYLAND_LIBS@
 QT_X11_CFLAGS = @QT_X11_CFLAGS@
 QT_X11_LIBS = @QT_X11_LIBS@
 RANLIB = @RANLIB@
 RCC = @RCC@
-RSVG_2_36_2_CFLAGS = @RSVG_2_36_2_CFLAGS@
-RSVG_2_36_2_LIBS = @RSVG_2_36_2_LIBS@
 RSVG_CFLAGS = @RSVG_CFLAGS@
 RSVG_LIBS = @RSVG_LIBS@
 RTMP_CFLAGS = @RTMP_CFLAGS@
@@ -672,6 +683,7 @@
 VOAACENC_LIBS = @VOAACENC_LIBS@
 VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
 VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VULKAN_LIBS = @VULKAN_LIBS@
 WARNING_CFLAGS = @WARNING_CFLAGS@
 WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
 WARNING_OBJCFLAGS = @WARNING_OBJCFLAGS@
@@ -682,6 +694,7 @@
 WAYLAND_LIBS = @WAYLAND_LIBS@
 WEBP_CFLAGS = @WEBP_CFLAGS@
 WEBP_LIBS = @WEBP_LIBS@
+WGET = @WGET@
 WILDMIDI_CFLAGS = @WILDMIDI_CFLAGS@
 WILDMIDI_LIBS = @WILDMIDI_LIBS@
 WINKS_LIBS = @WINKS_LIBS@
@@ -691,6 +704,8 @@
 X11_LIBS = @X11_LIBS@
 X265_CFLAGS = @X265_CFLAGS@
 X265_LIBS = @X265_LIBS@
+XCB_CFLAGS = @XCB_CFLAGS@
+XCB_LIBS = @XCB_LIBS@
 XCOMPOSITE_CFLAGS = @XCOMPOSITE_CFLAGS@
 XCOMPOSITE_LIBS = @XCOMPOSITE_LIBS@
 XGETTEXT = @XGETTEXT@
@@ -728,7 +743,6 @@
 docdir = @docdir@
 dvidir = @dvidir@
 exec_prefix = @exec_prefix@
-gsettingsschemadir = @gsettingsschemadir@
 host = @host@
 host_alias = @host_alias@
 host_cpu = @host_cpu@
diff --git a/gst-libs/gst/gl/x11/gstglcontext_glx.h b/gst-libs/gst/gl/x11/gstglcontext_glx.h
index e015108..f95204a 100644
--- a/gst-libs/gst/gl/x11/gstglcontext_glx.h
+++ b/gst-libs/gst/gl/x11/gstglcontext_glx.h
@@ -30,8 +30,8 @@
 #define GST_GL_TYPE_CONTEXT_GLX         (gst_gl_context_glx_get_type())
 #define GST_GL_CONTEXT_GLX(o)           (G_TYPE_CHECK_INSTANCE_CAST((o), GST_GL_TYPE_CONTEXT_GLX, GstGLContextGLX))
 #define GST_GL_CONTEXT_GLX_CLASS(k)     (G_TYPE_CHECK_CLASS((k), GST_GL_TYPE_CONTEXT_GLX, GstGLContextGLXClass))
-#define GST_GL_IS_CONTEXT_GLX(o)        (G_TYPE_CHECK_INSTANCE_TYPE((o), GST_GL_TYPE_CONTEXT_GLX))
-#define GST_GL_IS_CONTEXT_GLX_CLASS(k)  (G_TYPE_CHECK_CLASS_TYPE((k), GST_GL_TYPE_CONTEXT_GLX))
+#define GST_IS_GL_CONTEXT_GLX(o)        (G_TYPE_CHECK_INSTANCE_TYPE((o), GST_GL_TYPE_CONTEXT_GLX))
+#define GST_IS_GL_CONTEXT_GLX_CLASS(k)  (G_TYPE_CHECK_CLASS_TYPE((k), GST_GL_TYPE_CONTEXT_GLX))
 #define GST_GL_CONTEXT_GLX_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS((o), GST_GL_TYPE_CONTEXT_GLX, GstGLContextGLX_Class))
 
 typedef struct _GstGLContextGLX        GstGLContextGLX;
diff --git a/gst-libs/gst/gl/x11/gstgldisplay_x11.c b/gst-libs/gst/gl/x11/gstgldisplay_x11.c
index e6086b7..696929e 100644
--- a/gst-libs/gst/gl/x11/gstgldisplay_x11.c
+++ b/gst-libs/gst/gl/x11/gstgldisplay_x11.c
@@ -55,8 +55,7 @@
 {
   GstGLDisplayX11 *display_x11 = GST_GL_DISPLAY_X11 (object);
 
-  if (display_x11->name)
-    g_free (display_x11->name);
+  g_free (display_x11->name);
 
   if (!display_x11->foreign_display && display_x11->display) {
     XCloseDisplay (display_x11->display);
diff --git a/gst-libs/gst/gl/x11/gstglwindow_x11.c b/gst-libs/gst/gl/x11/gstglwindow_x11.c
index 29c2aea..a330825 100644
--- a/gst-libs/gst/gl/x11/gstglwindow_x11.c
+++ b/gst-libs/gst/gl/x11/gstglwindow_x11.c
@@ -74,7 +74,6 @@
 static void gst_gl_window_x11_set_preferred_size (GstGLWindow * window,
     gint width, gint height);
 void gst_gl_window_x11_show (GstGLWindow * window);
-void gst_gl_window_x11_draw_unlocked (GstGLWindow * window);
 void gst_gl_window_x11_draw (GstGLWindow * window);
 gboolean gst_gl_window_x11_create_context (GstGLWindow * window,
     GstGLAPI gl_api, guintptr external_gl_context, GError ** error);
@@ -104,8 +103,6 @@
       GST_DEBUG_FUNCPTR (gst_gl_window_x11_set_window_handle);
   window_class->get_window_handle =
       GST_DEBUG_FUNCPTR (gst_gl_window_x11_get_window_handle);
-  window_class->draw_unlocked =
-      GST_DEBUG_FUNCPTR (gst_gl_window_x11_draw_unlocked);
   window_class->draw = GST_DEBUG_FUNCPTR (gst_gl_window_x11_draw);
   window_class->open = GST_DEBUG_FUNCPTR (gst_gl_window_x11_open);
   window_class->close = GST_DEBUG_FUNCPTR (gst_gl_window_x11_close);
@@ -387,39 +384,13 @@
   gst_gl_window_send_message (window, (GstGLWindowCB) _show_window, window);
 }
 
-/* Called in the gl thread */
-void
-gst_gl_window_x11_draw_unlocked (GstGLWindow * window)
-{
-  GstGLWindowX11 *window_x11 = GST_GL_WINDOW_X11 (window);
-
-  if (gst_gl_window_is_running (GST_GL_WINDOW (window_x11))
-      && window_x11->allow_extra_expose_events) {
-    if (window->queue_resize) {
-      guint width, height;
-
-      gst_gl_window_get_surface_dimensions (window, &width, &height);
-      gst_gl_window_resize (window, width, height);
-    }
-
-    if (window->draw) {
-      GstGLContext *context = gst_gl_window_get_context (window);
-      GstGLContextClass *context_class = GST_GL_CONTEXT_GET_CLASS (context);
-
-      window->draw (window->draw_data);
-      context_class->swap_buffers (context);
-
-      gst_object_unref (context);
-    }
-  }
-}
-
 static void
 draw_cb (gpointer data)
 {
   GstGLWindowX11 *window_x11 = data;
+  GstGLWindow *window = GST_GL_WINDOW (window_x11);
 
-  if (gst_gl_window_is_running (GST_GL_WINDOW (window_x11))) {
+  if (gst_gl_window_is_running (window)) {
     XWindowAttributes attr;
 
     XGetWindowAttributes (window_x11->device, window_x11->internal_win_id,
@@ -443,7 +414,24 @@
       }
     }
 
-    gst_gl_window_x11_draw_unlocked (GST_GL_WINDOW (window_x11));
+    if (window_x11->allow_extra_expose_events) {
+      if (window->queue_resize) {
+        guint width, height;
+
+        gst_gl_window_get_surface_dimensions (window, &width, &height);
+        gst_gl_window_resize (window, width, height);
+      }
+
+      if (window->draw) {
+        GstGLContext *context = gst_gl_window_get_context (window);
+        GstGLContextClass *context_class = GST_GL_CONTEXT_GET_CLASS (context);
+
+        window->draw (window->draw_data);
+        context_class->swap_buffers (context);
+
+        gst_object_unref (context);
+      }
+    }
   }
 }
 
@@ -512,7 +500,8 @@
     if (handle_events) {
       XSelectInput (window_x11->device, window_x11->internal_win_id,
           StructureNotifyMask | ExposureMask | VisibilityChangeMask |
-          PointerMotionMask | KeyPressMask | KeyReleaseMask);
+          PointerMotionMask | KeyPressMask | KeyReleaseMask | ButtonPressMask |
+          ButtonReleaseMask);
     } else {
       XSelectInput (window_x11->device, window_x11->internal_win_id,
           StructureNotifyMask | ExposureMask | VisibilityChangeMask);
@@ -527,10 +516,6 @@
   GstGLContextClass *context_class;
   GstGLWindow *window;
   gboolean ret = TRUE;
-  const char *key_str = NULL;
-  KeySym keysym;
-  struct mouse_event *mouse_data;
-  struct key_event *key_data;
 
   window = GST_GL_WINDOW (window_x11);
 
@@ -603,47 +588,39 @@
         break;
       case KeyPress:
       case KeyRelease:
+      {
+        const char *key_str = NULL, *key_type = NULL;
+        KeySym keysym;
+
         keysym = XkbKeycodeToKeysym (window_x11->device,
             event.xkey.keycode, 0, 0);
         key_str = XKeysymToString (keysym);
-        key_data = g_slice_new (struct key_event);
-        key_data->window = window;
-        key_data->key_str = XKeysymToString (keysym);
-        key_data->event_type =
-            event.type == KeyPress ? "key-press" : "key-release";
-        GST_DEBUG ("input event key %d pressed over window at %d,%d (%s)",
-            event.xkey.keycode, event.xkey.x, event.xkey.y, key_str);
-        g_main_context_invoke (window->navigation_context,
-            (GSourceFunc) gst_gl_window_key_event_cb, key_data);
+        key_type = event.type == KeyPress ? "key-press" : "key-release";
+        GST_DEBUG ("input event key %d %s over window at %d,%d (%s)",
+            event.xkey.keycode, key_type, event.xkey.x, event.xkey.y, key_str);
+        gst_gl_window_send_key_event_async (window, key_type, key_str);
         break;
+      }
       case ButtonPress:
-      case ButtonRelease:
-        GST_DEBUG ("input event mouse button %d pressed over window at %d,%d",
-            event.xbutton.button, event.xbutton.x, event.xbutton.y);
-        mouse_data = g_slice_new (struct mouse_event);
-        mouse_data->window = window;
-        mouse_data->event_type =
-            event.type ==
-            ButtonPress ? "mouse-button-press" : "mouse-button-release";
-        mouse_data->button = event.xbutton.button;
-        mouse_data->posx = (double) event.xbutton.x;
-        mouse_data->posy = (double) event.xbutton.y;
+      case ButtonRelease:{
+        const char *mouse_type = NULL;
 
-        g_main_context_invoke (window->navigation_context,
-            (GSourceFunc) gst_gl_window_mouse_event_cb, mouse_data);
+        mouse_type = event.type ==
+            ButtonPress ? "mouse-button-press" : "mouse-button-release";
+
+        GST_DEBUG ("input event mouse button %d %s over window at %d,%d",
+            event.xbutton.button, mouse_type, event.xbutton.x, event.xbutton.y);
+
+        gst_gl_window_send_mouse_event_async (window, mouse_type,
+            event.xbutton.button, event.xbutton.x, event.xbutton.y);
         break;
+      }
       case MotionNotify:
         GST_DEBUG ("input event pointer moved over window at %d,%d",
             event.xmotion.x, event.xmotion.y);
-        mouse_data = g_slice_new (struct mouse_event);
-        mouse_data->window = window;
-        mouse_data->event_type = "mouse-move";
-        mouse_data->button = 0;
-        mouse_data->posx = (double) event.xbutton.x;
-        mouse_data->posy = (double) event.xbutton.y;
 
-        g_main_context_invoke (window->navigation_context, (GSourceFunc)
-            gst_gl_window_mouse_event_cb, mouse_data);
+        gst_gl_window_send_mouse_event_async (window, "mouse-move", 0,
+            event.xbutton.x, event.xbutton.y);
         break;
       default:
         GST_DEBUG ("unknown XEvent type: %u", event.type);
diff --git a/gst-libs/gst/gl/x11/gstglwindow_x11.h b/gst-libs/gst/gl/x11/gstglwindow_x11.h
index c16a637..b4a4b17 100644
--- a/gst-libs/gst/gl/x11/gstglwindow_x11.h
+++ b/gst-libs/gst/gl/x11/gstglwindow_x11.h
@@ -31,8 +31,8 @@
 #define GST_GL_TYPE_WINDOW_X11         (gst_gl_window_x11_get_type())
 #define GST_GL_WINDOW_X11(o)           (G_TYPE_CHECK_INSTANCE_CAST((o), GST_GL_TYPE_WINDOW_X11, GstGLWindowX11))
 #define GST_GL_WINDOW_X11_CLASS(k)     (G_TYPE_CHECK_CLASS((k), GST_GL_TYPE_WINDOW_X11, GstGLWindowX11Class))
-#define GST_GL_IS_WINDOW_X11(o)        (G_TYPE_CHECK_INSTANCE_TYPE((o), GST_GL_TYPE_WINDOW_X11))
-#define GST_GL_IS_WINDOW_X11_CLASS(k)  (G_TYPE_CHECK_CLASS_TYPE((k), GST_GL_TYPE_WINDOW_X11))
+#define GST_IS_GL_WINDOW_X11(o)        (G_TYPE_CHECK_INSTANCE_TYPE((o), GST_GL_TYPE_WINDOW_X11))
+#define GST_IS_GL_WINDOW_X11_CLASS(k)  (G_TYPE_CHECK_CLASS_TYPE((k), GST_GL_TYPE_WINDOW_X11))
 #define GST_GL_WINDOW_X11_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS((o), GST_GL_TYPE_WINDOW_X11, GstGLWindowX11Class))
 
 typedef struct _GstGLWindowX11        GstGLWindowX11;
diff --git a/gst-libs/gst/glib-compat-private.h b/gst-libs/gst/glib-compat-private.h
index c96c005..1a4aa7d 100644
--- a/gst-libs/gst/glib-compat-private.h
+++ b/gst-libs/gst/glib-compat-private.h
@@ -27,114 +27,6 @@
 
 G_BEGIN_DECLS
 
-#if !GLIB_CHECK_VERSION(2,25,0)
-
-#if defined (_MSC_VER) && !defined(_WIN64)
-typedef struct _stat32 GStatBuf;
-#else
-typedef struct stat GStatBuf;
-#endif
-
-#endif
-
-#if GLIB_CHECK_VERSION(2,26,0)
-#define GLIB_HAS_GDATETIME
-#endif
-
-/* See bug #651514 */
-#if GLIB_CHECK_VERSION(2,29,5)
-#define G_ATOMIC_POINTER_COMPARE_AND_EXCHANGE(a,b,c) \
-    g_atomic_pointer_compare_and_exchange ((a),(b),(c))
-#define G_ATOMIC_INT_COMPARE_AND_EXCHANGE(a,b,c) \
-    g_atomic_int_compare_and_exchange ((a),(b),(c))
-#else
-#define G_ATOMIC_POINTER_COMPARE_AND_EXCHANGE(a,b,c) \
-    g_atomic_pointer_compare_and_exchange ((volatile gpointer *)(a),(b),(c))
-#define G_ATOMIC_INT_COMPARE_AND_EXCHANGE(a,b,c) \
-    g_atomic_int_compare_and_exchange ((volatile int *)(a),(b),(c))
-#endif
-
-/* See bug #651514 */
-#if GLIB_CHECK_VERSION(2,29,5)
-#define G_ATOMIC_INT_ADD(a,b) g_atomic_int_add ((a),(b))
-#else
-#define G_ATOMIC_INT_ADD(a,b) g_atomic_int_exchange_and_add ((a),(b))
-#endif
-
-/* copies */
-
-#if GLIB_CHECK_VERSION (2, 31, 0)
-#define g_mutex_new gst_g_mutex_new
-static inline GMutex *
-gst_g_mutex_new (void)
-{
-  GMutex *mutex = g_slice_new (GMutex);
-  g_mutex_init (mutex);
-  return mutex;
-}
-#define g_mutex_free gst_g_mutex_free
-static inline void
-gst_g_mutex_free (GMutex *mutex)
-{
-  g_mutex_clear (mutex);
-  g_slice_free (GMutex, mutex);
-}
-#define g_cond_new gst_g_cond_new
-static inline GCond *
-gst_g_cond_new (void)
-{
-  GCond *cond = g_slice_new (GCond);
-  g_cond_init (cond);
-  return cond;
-}
-#define g_cond_free gst_g_cond_free
-static inline void
-gst_g_cond_free (GCond *cond)
-{
-  g_cond_clear (cond);
-  g_slice_free (GCond, cond);
-}
-#define g_cond_timed_wait gst_g_cond_timed_wait
-static inline gboolean
-gst_g_cond_timed_wait (GCond *cond, GMutex *mutex, GTimeVal *abs_time)
-{
-  gint64 end_time;
-
-  if (abs_time == NULL) {
-    g_cond_wait (cond, mutex);
-    return TRUE;
-  }
-
-  end_time = abs_time->tv_sec;
-  end_time *= 1000000;
-  end_time += abs_time->tv_usec;
-
-  /* would be nice if we had clock_rtoffset, but that didn't seem to
-   * make it into the kernel yet...
-   */
-  /* if CLOCK_MONOTONIC is not defined then g_get_montonic_time() and
-   * g_get_real_time() are returning the same clock and we'd add ~0
-   */
-  end_time += g_get_monotonic_time () - g_get_real_time ();
-  return g_cond_wait_until (cond, mutex, end_time);
-}
-#endif /* GLIB_CHECK_VERSION (2, 31, 0) */
-
-#if GLIB_CHECK_VERSION (2, 31, 0)
-#define g_thread_create gst_g_thread_create
-static inline GThread *
-gst_g_thread_create (GThreadFunc func, gpointer data, gboolean joinable,
-    GError **error)
-{
-  GThread *thread = g_thread_try_new ("gst-check", func, data, error);
-  if (!joinable)
-    g_thread_unref (thread);
-  return thread;
-}
-#endif /* GLIB_CHECK_VERSION (2, 31, 0) */
-
-/* adaptations */
-
 G_END_DECLS
 
 #endif
diff --git a/gst-libs/gst/insertbin/Makefile.am b/gst-libs/gst/insertbin/Makefile.am
index 09eb97c..8368f41 100644
--- a/gst-libs/gst/insertbin/Makefile.am
+++ b/gst-libs/gst/insertbin/Makefile.am
@@ -33,7 +33,8 @@
 		GST_PLUGIN_SYSTEM_PATH_1_0="" GST_PLUGIN_PATH_1_0="" GST_REGISTRY_UPDATE=no \
 		$(INTROSPECTION_SCANNER) -v --namespace GstInsertBin \
 		--nsversion=@GST_API_VERSION@ \
-		--strip-prefix=Gst \
+		--identifier-prefix=Gst \
+		--symbol-prefix=gst \
 		--warn-all \
 		--c-include "gst/insertbin/gstinsertbin.h" \
 		-I$(top_srcdir)/gst-libs \
@@ -47,7 +48,7 @@
 		--pkg gstreamer-@GST_API_VERSION@ \
 		--pkg gstreamer-base-@GST_API_VERSION@ \
 		--pkg-export gstreamer-insertbin-@GST_API_VERSION@ \
-		--add-init-section="gst_init(NULL,NULL);" \
+		--add-init-section="$(INTROSPECTION_INIT)" \
 		-DGST_USE_UNSTABLE_API \
 		--output $@ \
 		$(gir_headers) \
diff --git a/gst-libs/gst/insertbin/Makefile.in b/gst-libs/gst/insertbin/Makefile.in
index 2ca48c8..50cf73f 100644
--- a/gst-libs/gst/insertbin/Makefile.in
+++ b/gst-libs/gst/insertbin/Makefile.in
@@ -117,16 +117,15 @@
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
 	$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
-	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gsettings.m4 \
-	$(top_srcdir)/m4/gst-fionread.m4 $(top_srcdir)/m4/gst-sdl.m4 \
-	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
-	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
-	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libgcrypt.m4 \
-	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
-	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
-	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
-	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
-	$(top_srcdir)/configure.ac
+	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gst-fionread.m4 \
+	$(top_srcdir)/m4/gst-sdl.m4 $(top_srcdir)/m4/iconv.m4 \
+	$(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \
+	$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
+	$(top_srcdir)/m4/libgcrypt.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
+	$(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 DIST_COMMON = $(srcdir)/Makefile.am \
@@ -264,6 +263,8 @@
 CLUTTER_X11_LIBS = @CLUTTER_X11_LIBS@
 CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
+CUDA_CFLAGS = @CUDA_CFLAGS@
+CUDA_LIBS = @CUDA_LIBS@
 CURL_CFLAGS = @CURL_CFLAGS@
 CURL_LIBS = @CURL_LIBS@
 CXX = @CXX@
@@ -301,6 +302,8 @@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
+EGL_CFLAGS = @EGL_CFLAGS@
+EGL_LIBS = @EGL_LIBS@
 EGREP = @EGREP@
 ERROR_CFLAGS = @ERROR_CFLAGS@
 ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
@@ -309,7 +312,6 @@
 EXIF_CFLAGS = @EXIF_CFLAGS@
 EXIF_LIBS = @EXIF_LIBS@
 FAAC_LIBS = @FAAC_LIBS@
-FAAD_IS_NEAAC = @FAAD_IS_NEAAC@
 FAAD_LIBS = @FAAD_LIBS@
 FFLAGS = @FFLAGS@
 FGREP = @FGREP@
@@ -328,8 +330,9 @@
 GIO_LIBS = @GIO_LIBS@
 GIO_UNIX_CFLAGS = @GIO_UNIX_CFLAGS@
 GIO_UNIX_LIBS = @GIO_UNIX_LIBS@
+GLES2_CFLAGS = @GLES2_CFLAGS@
+GLES2_LIBS = @GLES2_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
-GLIB_COMPILE_SCHEMAS = @GLIB_COMPILE_SCHEMAS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
@@ -346,16 +349,17 @@
 GMODULE_NO_EXPORT_LIBS = @GMODULE_NO_EXPORT_LIBS@
 GMSGFMT = @GMSGFMT@
 GMSGFMT_015 = @GMSGFMT_015@
+GNUSTL_CFLAGS = @GNUSTL_CFLAGS@
+GNUSTL_LIBS = @GNUSTL_LIBS@
 GRAPHENE_CFLAGS = @GRAPHENE_CFLAGS@
 GRAPHENE_LIBS = @GRAPHENE_LIBS@
 GREP = @GREP@
-GSETTINGS_CFLAGS = @GSETTINGS_CFLAGS@
-GSETTINGS_DISABLE_SCHEMAS_COMPILE = @GSETTINGS_DISABLE_SCHEMAS_COMPILE@
-GSETTINGS_LIBS = @GSETTINGS_LIBS@
 GSM_LIBS = @GSM_LIBS@
 GSTPB_PLUGINS_DIR = @GSTPB_PLUGINS_DIR@
 GSTPB_PREFIX = @GSTPB_PREFIX@
 GST_AGE = @GST_AGE@
+GST_ALLOCATORS_CFLAGS = @GST_ALLOCATORS_CFLAGS@
+GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
 GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
 GST_API_VERSION = @GST_API_VERSION@
 GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
@@ -381,6 +385,8 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PBUTILS_CFLAGS = @GST_PBUTILS_CFLAGS@
+GST_PBUTILS_LIBS = @GST_PBUTILS_LIBS@
 GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BAD_CFLAGS = @GST_PLUGINS_BAD_CFLAGS@
@@ -406,6 +412,8 @@
 GST_PREFIX = @GST_PREFIX@
 GST_REVISION = @GST_REVISION@
 GST_TOOLS_DIR = @GST_TOOLS_DIR@
+GST_VIDEO_CFLAGS = @GST_VIDEO_CFLAGS@
+GST_VIDEO_LIBS = @GST_VIDEO_LIBS@
 GTK3_CFLAGS = @GTK3_CFLAGS@
 GTK3_GL_CFLAGS = @GTK3_GL_CFLAGS@
 GTK3_GL_LIBS = @GTK3_GL_LIBS@
@@ -507,6 +515,7 @@
 LTLIBICONV = @LTLIBICONV@
 LTLIBINTL = @LTLIBINTL@
 LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
 MANIFEST_TOOL = @MANIFEST_TOOL@
@@ -520,8 +529,6 @@
 MODPLUG_LIBS = @MODPLUG_LIBS@
 MPEG2ENC_CFLAGS = @MPEG2ENC_CFLAGS@
 MPEG2ENC_LIBS = @MPEG2ENC_LIBS@
-MPG123_CFLAGS = @MPG123_CFLAGS@
-MPG123_LIBS = @MPG123_LIBS@
 MPLEX_CFLAGS = @MPLEX_CFLAGS@
 MPLEX_LDFLAGS = @MPLEX_LDFLAGS@
 MPLEX_LIBS = @MPLEX_LIBS@
@@ -537,6 +544,8 @@
 NETTLE_LIBS = @NETTLE_LIBS@
 NM = @NM@
 NMEDIT = @NMEDIT@
+NVENCODE_CFLAGS = @NVENCODE_CFLAGS@
+NVENCODE_LIBS = @NVENCODE_LIBS@
 OBJC = @OBJC@
 OBJCDEPMODE = @OBJCDEPMODE@
 OBJCFLAGS = @OBJCFLAGS@
@@ -594,16 +603,18 @@
 PYTHON_PLATFORM = @PYTHON_PLATFORM@
 PYTHON_PREFIX = @PYTHON_PREFIX@
 PYTHON_VERSION = @PYTHON_VERSION@
+QT_ANDROID_CFLAGS = @QT_ANDROID_CFLAGS@
+QT_ANDROID_LIBS = @QT_ANDROID_LIBS@
 QT_CFLAGS = @QT_CFLAGS@
 QT_LIBS = @QT_LIBS@
+QT_MAC_CFLAGS = @QT_MAC_CFLAGS@
+QT_MAC_LIBS = @QT_MAC_LIBS@
 QT_WAYLAND_CFLAGS = @QT_WAYLAND_CFLAGS@
 QT_WAYLAND_LIBS = @QT_WAYLAND_LIBS@
 QT_X11_CFLAGS = @QT_X11_CFLAGS@
 QT_X11_LIBS = @QT_X11_LIBS@
 RANLIB = @RANLIB@
 RCC = @RCC@
-RSVG_2_36_2_CFLAGS = @RSVG_2_36_2_CFLAGS@
-RSVG_2_36_2_LIBS = @RSVG_2_36_2_LIBS@
 RSVG_CFLAGS = @RSVG_CFLAGS@
 RSVG_LIBS = @RSVG_LIBS@
 RTMP_CFLAGS = @RTMP_CFLAGS@
@@ -655,6 +666,7 @@
 VOAACENC_LIBS = @VOAACENC_LIBS@
 VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
 VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VULKAN_LIBS = @VULKAN_LIBS@
 WARNING_CFLAGS = @WARNING_CFLAGS@
 WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
 WARNING_OBJCFLAGS = @WARNING_OBJCFLAGS@
@@ -665,6 +677,7 @@
 WAYLAND_LIBS = @WAYLAND_LIBS@
 WEBP_CFLAGS = @WEBP_CFLAGS@
 WEBP_LIBS = @WEBP_LIBS@
+WGET = @WGET@
 WILDMIDI_CFLAGS = @WILDMIDI_CFLAGS@
 WILDMIDI_LIBS = @WILDMIDI_LIBS@
 WINKS_LIBS = @WINKS_LIBS@
@@ -674,6 +687,8 @@
 X11_LIBS = @X11_LIBS@
 X265_CFLAGS = @X265_CFLAGS@
 X265_LIBS = @X265_LIBS@
+XCB_CFLAGS = @XCB_CFLAGS@
+XCB_LIBS = @XCB_LIBS@
 XCOMPOSITE_CFLAGS = @XCOMPOSITE_CFLAGS@
 XCOMPOSITE_LIBS = @XCOMPOSITE_LIBS@
 XGETTEXT = @XGETTEXT@
@@ -711,7 +726,6 @@
 docdir = @docdir@
 dvidir = @dvidir@
 exec_prefix = @exec_prefix@
-gsettingsschemadir = @gsettingsschemadir@
 host = @host@
 host_alias = @host_alias@
 host_cpu = @host_cpu@
@@ -1143,7 +1157,8 @@
 @HAVE_INTROSPECTION_TRUE@		GST_PLUGIN_SYSTEM_PATH_1_0="" GST_PLUGIN_PATH_1_0="" GST_REGISTRY_UPDATE=no \
 @HAVE_INTROSPECTION_TRUE@		$(INTROSPECTION_SCANNER) -v --namespace GstInsertBin \
 @HAVE_INTROSPECTION_TRUE@		--nsversion=@GST_API_VERSION@ \
-@HAVE_INTROSPECTION_TRUE@		--strip-prefix=Gst \
+@HAVE_INTROSPECTION_TRUE@		--identifier-prefix=Gst \
+@HAVE_INTROSPECTION_TRUE@		--symbol-prefix=gst \
 @HAVE_INTROSPECTION_TRUE@		--warn-all \
 @HAVE_INTROSPECTION_TRUE@		--c-include "gst/insertbin/gstinsertbin.h" \
 @HAVE_INTROSPECTION_TRUE@		-I$(top_srcdir)/gst-libs \
@@ -1157,7 +1172,7 @@
 @HAVE_INTROSPECTION_TRUE@		--pkg gstreamer-@GST_API_VERSION@ \
 @HAVE_INTROSPECTION_TRUE@		--pkg gstreamer-base-@GST_API_VERSION@ \
 @HAVE_INTROSPECTION_TRUE@		--pkg-export gstreamer-insertbin-@GST_API_VERSION@ \
-@HAVE_INTROSPECTION_TRUE@		--add-init-section="gst_init(NULL,NULL);" \
+@HAVE_INTROSPECTION_TRUE@		--add-init-section="$(INTROSPECTION_INIT)" \
 @HAVE_INTROSPECTION_TRUE@		-DGST_USE_UNSTABLE_API \
 @HAVE_INTROSPECTION_TRUE@		--output $@ \
 @HAVE_INTROSPECTION_TRUE@		$(gir_headers) \
diff --git a/gst-libs/gst/insertbin/gstinsertbin.h b/gst-libs/gst/insertbin/gstinsertbin.h
index 051a17a..58326f4 100644
--- a/gst-libs/gst/insertbin/gstinsertbin.h
+++ b/gst-libs/gst/insertbin/gstinsertbin.h
@@ -102,5 +102,9 @@
     GstInsertBinCallback callback, gpointer user_data);
 
 
+#ifdef G_DEFINE_AUTOPTR_CLEANUP_FUNC
+G_DEFINE_AUTOPTR_CLEANUP_FUNC(GstInsertBin, gst_object_unref)
+#endif
+
 G_END_DECLS
 #endif /* __GST_INSERT_BIN_H__ */
diff --git a/gst-libs/gst/interfaces/Makefile.in b/gst-libs/gst/interfaces/Makefile.in
index 62c0397..4f273d6 100644
--- a/gst-libs/gst/interfaces/Makefile.in
+++ b/gst-libs/gst/interfaces/Makefile.in
@@ -124,16 +124,15 @@
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
 	$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
-	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gsettings.m4 \
-	$(top_srcdir)/m4/gst-fionread.m4 $(top_srcdir)/m4/gst-sdl.m4 \
-	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
-	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
-	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libgcrypt.m4 \
-	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
-	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
-	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
-	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
-	$(top_srcdir)/configure.ac
+	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gst-fionread.m4 \
+	$(top_srcdir)/m4/gst-sdl.m4 $(top_srcdir)/m4/iconv.m4 \
+	$(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \
+	$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
+	$(top_srcdir)/m4/libgcrypt.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
+	$(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 DIST_COMMON = $(srcdir)/Makefile.am \
@@ -294,6 +293,8 @@
 CLUTTER_X11_LIBS = @CLUTTER_X11_LIBS@
 CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
+CUDA_CFLAGS = @CUDA_CFLAGS@
+CUDA_LIBS = @CUDA_LIBS@
 CURL_CFLAGS = @CURL_CFLAGS@
 CURL_LIBS = @CURL_LIBS@
 CXX = @CXX@
@@ -331,6 +332,8 @@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
+EGL_CFLAGS = @EGL_CFLAGS@
+EGL_LIBS = @EGL_LIBS@
 EGREP = @EGREP@
 ERROR_CFLAGS = @ERROR_CFLAGS@
 ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
@@ -339,7 +342,6 @@
 EXIF_CFLAGS = @EXIF_CFLAGS@
 EXIF_LIBS = @EXIF_LIBS@
 FAAC_LIBS = @FAAC_LIBS@
-FAAD_IS_NEAAC = @FAAD_IS_NEAAC@
 FAAD_LIBS = @FAAD_LIBS@
 FFLAGS = @FFLAGS@
 FGREP = @FGREP@
@@ -358,8 +360,9 @@
 GIO_LIBS = @GIO_LIBS@
 GIO_UNIX_CFLAGS = @GIO_UNIX_CFLAGS@
 GIO_UNIX_LIBS = @GIO_UNIX_LIBS@
+GLES2_CFLAGS = @GLES2_CFLAGS@
+GLES2_LIBS = @GLES2_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
-GLIB_COMPILE_SCHEMAS = @GLIB_COMPILE_SCHEMAS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
@@ -376,16 +379,17 @@
 GMODULE_NO_EXPORT_LIBS = @GMODULE_NO_EXPORT_LIBS@
 GMSGFMT = @GMSGFMT@
 GMSGFMT_015 = @GMSGFMT_015@
+GNUSTL_CFLAGS = @GNUSTL_CFLAGS@
+GNUSTL_LIBS = @GNUSTL_LIBS@
 GRAPHENE_CFLAGS = @GRAPHENE_CFLAGS@
 GRAPHENE_LIBS = @GRAPHENE_LIBS@
 GREP = @GREP@
-GSETTINGS_CFLAGS = @GSETTINGS_CFLAGS@
-GSETTINGS_DISABLE_SCHEMAS_COMPILE = @GSETTINGS_DISABLE_SCHEMAS_COMPILE@
-GSETTINGS_LIBS = @GSETTINGS_LIBS@
 GSM_LIBS = @GSM_LIBS@
 GSTPB_PLUGINS_DIR = @GSTPB_PLUGINS_DIR@
 GSTPB_PREFIX = @GSTPB_PREFIX@
 GST_AGE = @GST_AGE@
+GST_ALLOCATORS_CFLAGS = @GST_ALLOCATORS_CFLAGS@
+GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
 GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
 GST_API_VERSION = @GST_API_VERSION@
 GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
@@ -411,6 +415,8 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PBUTILS_CFLAGS = @GST_PBUTILS_CFLAGS@
+GST_PBUTILS_LIBS = @GST_PBUTILS_LIBS@
 GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BAD_CFLAGS = @GST_PLUGINS_BAD_CFLAGS@
@@ -436,6 +442,8 @@
 GST_PREFIX = @GST_PREFIX@
 GST_REVISION = @GST_REVISION@
 GST_TOOLS_DIR = @GST_TOOLS_DIR@
+GST_VIDEO_CFLAGS = @GST_VIDEO_CFLAGS@
+GST_VIDEO_LIBS = @GST_VIDEO_LIBS@
 GTK3_CFLAGS = @GTK3_CFLAGS@
 GTK3_GL_CFLAGS = @GTK3_GL_CFLAGS@
 GTK3_GL_LIBS = @GTK3_GL_LIBS@
@@ -537,6 +545,7 @@
 LTLIBICONV = @LTLIBICONV@
 LTLIBINTL = @LTLIBINTL@
 LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
 MANIFEST_TOOL = @MANIFEST_TOOL@
@@ -550,8 +559,6 @@
 MODPLUG_LIBS = @MODPLUG_LIBS@
 MPEG2ENC_CFLAGS = @MPEG2ENC_CFLAGS@
 MPEG2ENC_LIBS = @MPEG2ENC_LIBS@
-MPG123_CFLAGS = @MPG123_CFLAGS@
-MPG123_LIBS = @MPG123_LIBS@
 MPLEX_CFLAGS = @MPLEX_CFLAGS@
 MPLEX_LDFLAGS = @MPLEX_LDFLAGS@
 MPLEX_LIBS = @MPLEX_LIBS@
@@ -567,6 +574,8 @@
 NETTLE_LIBS = @NETTLE_LIBS@
 NM = @NM@
 NMEDIT = @NMEDIT@
+NVENCODE_CFLAGS = @NVENCODE_CFLAGS@
+NVENCODE_LIBS = @NVENCODE_LIBS@
 OBJC = @OBJC@
 OBJCDEPMODE = @OBJCDEPMODE@
 OBJCFLAGS = @OBJCFLAGS@
@@ -624,16 +633,18 @@
 PYTHON_PLATFORM = @PYTHON_PLATFORM@
 PYTHON_PREFIX = @PYTHON_PREFIX@
 PYTHON_VERSION = @PYTHON_VERSION@
+QT_ANDROID_CFLAGS = @QT_ANDROID_CFLAGS@
+QT_ANDROID_LIBS = @QT_ANDROID_LIBS@
 QT_CFLAGS = @QT_CFLAGS@
 QT_LIBS = @QT_LIBS@
+QT_MAC_CFLAGS = @QT_MAC_CFLAGS@
+QT_MAC_LIBS = @QT_MAC_LIBS@
 QT_WAYLAND_CFLAGS = @QT_WAYLAND_CFLAGS@
 QT_WAYLAND_LIBS = @QT_WAYLAND_LIBS@
 QT_X11_CFLAGS = @QT_X11_CFLAGS@
 QT_X11_LIBS = @QT_X11_LIBS@
 RANLIB = @RANLIB@
 RCC = @RCC@
-RSVG_2_36_2_CFLAGS = @RSVG_2_36_2_CFLAGS@
-RSVG_2_36_2_LIBS = @RSVG_2_36_2_LIBS@
 RSVG_CFLAGS = @RSVG_CFLAGS@
 RSVG_LIBS = @RSVG_LIBS@
 RTMP_CFLAGS = @RTMP_CFLAGS@
@@ -685,6 +696,7 @@
 VOAACENC_LIBS = @VOAACENC_LIBS@
 VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
 VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VULKAN_LIBS = @VULKAN_LIBS@
 WARNING_CFLAGS = @WARNING_CFLAGS@
 WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
 WARNING_OBJCFLAGS = @WARNING_OBJCFLAGS@
@@ -695,6 +707,7 @@
 WAYLAND_LIBS = @WAYLAND_LIBS@
 WEBP_CFLAGS = @WEBP_CFLAGS@
 WEBP_LIBS = @WEBP_LIBS@
+WGET = @WGET@
 WILDMIDI_CFLAGS = @WILDMIDI_CFLAGS@
 WILDMIDI_LIBS = @WILDMIDI_LIBS@
 WINKS_LIBS = @WINKS_LIBS@
@@ -704,6 +717,8 @@
 X11_LIBS = @X11_LIBS@
 X265_CFLAGS = @X265_CFLAGS@
 X265_LIBS = @X265_LIBS@
+XCB_CFLAGS = @XCB_CFLAGS@
+XCB_LIBS = @XCB_LIBS@
 XCOMPOSITE_CFLAGS = @XCOMPOSITE_CFLAGS@
 XCOMPOSITE_LIBS = @XCOMPOSITE_LIBS@
 XGETTEXT = @XGETTEXT@
@@ -741,7 +756,6 @@
 docdir = @docdir@
 dvidir = @dvidir@
 exec_prefix = @exec_prefix@
-gsettingsschemadir = @gsettingsschemadir@
 host = @host@
 host_alias = @host_alias@
 host_cpu = @host_cpu@
diff --git a/gst-libs/gst/interfaces/photography.c b/gst-libs/gst/interfaces/photography.c
index 5481037..1799c52 100644
--- a/gst-libs/gst/interfaces/photography.c
+++ b/gst-libs/gst/interfaces/photography.c
@@ -299,8 +299,6 @@
  * Set the noise reduction mode for the #GstElement
  *
  * Returns: %TRUE if setting the value succeeded, %FALSE otherwise
- *
- * Since: 0.10.21
  */
 /**
  * gst_photography_get_noise_reduction:
@@ -310,8 +308,6 @@
  * Get the noise reduction mode for the #GstElement
  *
  * Returns: %TRUE if getting the value succeeded, %FALSE otherwise
- *
- * Since: 0.10.21
  */
 GST_PHOTOGRAPHY_FUNC_TEMPLATE (noise_reduction, GstPhotographyNoiseReduction);
 
diff --git a/gst-libs/gst/interfaces/photography.h b/gst-libs/gst/interfaces/photography.h
index e65c0d9..8c44966 100644
--- a/gst-libs/gst/interfaces/photography.h
+++ b/gst-libs/gst/interfaces/photography.h
@@ -159,8 +159,6 @@
  * remaining noise.
  *
  * Noise Reduction features of a photography capture or filter element.
- *
- * Since: 0.10.21
  */
 typedef enum
 {
diff --git a/gst-libs/gst/mpegts/Makefile.am b/gst-libs/gst/mpegts/Makefile.am
index 2511d49..cd8b8ad 100644
--- a/gst-libs/gst/mpegts/Makefile.am
+++ b/gst-libs/gst/mpegts/Makefile.am
@@ -82,7 +82,7 @@
 		--pkg gstreamer-@GST_API_VERSION@ \
 		--pkg gstreamer-video-@GST_API_VERSION@ \
 		--pkg-export gstreamer-mpegts-@GST_API_VERSION@ \
-		--add-init-section="gst_init(NULL,NULL);" \
+		--add-init-section="$(INTROSPECTION_INIT)" \
 		-DGST_USE_UNSTABLE_API \
 		--output $@ \
 		$(gir_headers) \
diff --git a/gst-libs/gst/mpegts/Makefile.in b/gst-libs/gst/mpegts/Makefile.in
index cbd4848..3d14247 100644
--- a/gst-libs/gst/mpegts/Makefile.in
+++ b/gst-libs/gst/mpegts/Makefile.in
@@ -126,16 +126,15 @@
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
 	$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
-	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gsettings.m4 \
-	$(top_srcdir)/m4/gst-fionread.m4 $(top_srcdir)/m4/gst-sdl.m4 \
-	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
-	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
-	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libgcrypt.m4 \
-	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
-	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
-	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
-	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
-	$(top_srcdir)/configure.ac
+	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gst-fionread.m4 \
+	$(top_srcdir)/m4/gst-sdl.m4 $(top_srcdir)/m4/iconv.m4 \
+	$(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \
+	$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
+	$(top_srcdir)/m4/libgcrypt.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
+	$(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 DIST_COMMON = $(srcdir)/Makefile.am \
@@ -302,6 +301,8 @@
 CLUTTER_X11_LIBS = @CLUTTER_X11_LIBS@
 CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
+CUDA_CFLAGS = @CUDA_CFLAGS@
+CUDA_LIBS = @CUDA_LIBS@
 CURL_CFLAGS = @CURL_CFLAGS@
 CURL_LIBS = @CURL_LIBS@
 CXX = @CXX@
@@ -339,6 +340,8 @@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
+EGL_CFLAGS = @EGL_CFLAGS@
+EGL_LIBS = @EGL_LIBS@
 EGREP = @EGREP@
 ERROR_CFLAGS = @ERROR_CFLAGS@
 ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
@@ -347,7 +350,6 @@
 EXIF_CFLAGS = @EXIF_CFLAGS@
 EXIF_LIBS = @EXIF_LIBS@
 FAAC_LIBS = @FAAC_LIBS@
-FAAD_IS_NEAAC = @FAAD_IS_NEAAC@
 FAAD_LIBS = @FAAD_LIBS@
 FFLAGS = @FFLAGS@
 FGREP = @FGREP@
@@ -366,8 +368,9 @@
 GIO_LIBS = @GIO_LIBS@
 GIO_UNIX_CFLAGS = @GIO_UNIX_CFLAGS@
 GIO_UNIX_LIBS = @GIO_UNIX_LIBS@
+GLES2_CFLAGS = @GLES2_CFLAGS@
+GLES2_LIBS = @GLES2_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
-GLIB_COMPILE_SCHEMAS = @GLIB_COMPILE_SCHEMAS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
@@ -384,16 +387,17 @@
 GMODULE_NO_EXPORT_LIBS = @GMODULE_NO_EXPORT_LIBS@
 GMSGFMT = @GMSGFMT@
 GMSGFMT_015 = @GMSGFMT_015@
+GNUSTL_CFLAGS = @GNUSTL_CFLAGS@
+GNUSTL_LIBS = @GNUSTL_LIBS@
 GRAPHENE_CFLAGS = @GRAPHENE_CFLAGS@
 GRAPHENE_LIBS = @GRAPHENE_LIBS@
 GREP = @GREP@
-GSETTINGS_CFLAGS = @GSETTINGS_CFLAGS@
-GSETTINGS_DISABLE_SCHEMAS_COMPILE = @GSETTINGS_DISABLE_SCHEMAS_COMPILE@
-GSETTINGS_LIBS = @GSETTINGS_LIBS@
 GSM_LIBS = @GSM_LIBS@
 GSTPB_PLUGINS_DIR = @GSTPB_PLUGINS_DIR@
 GSTPB_PREFIX = @GSTPB_PREFIX@
 GST_AGE = @GST_AGE@
+GST_ALLOCATORS_CFLAGS = @GST_ALLOCATORS_CFLAGS@
+GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
 GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
 GST_API_VERSION = @GST_API_VERSION@
 GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
@@ -419,6 +423,8 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PBUTILS_CFLAGS = @GST_PBUTILS_CFLAGS@
+GST_PBUTILS_LIBS = @GST_PBUTILS_LIBS@
 GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BAD_CFLAGS = @GST_PLUGINS_BAD_CFLAGS@
@@ -444,6 +450,8 @@
 GST_PREFIX = @GST_PREFIX@
 GST_REVISION = @GST_REVISION@
 GST_TOOLS_DIR = @GST_TOOLS_DIR@
+GST_VIDEO_CFLAGS = @GST_VIDEO_CFLAGS@
+GST_VIDEO_LIBS = @GST_VIDEO_LIBS@
 GTK3_CFLAGS = @GTK3_CFLAGS@
 GTK3_GL_CFLAGS = @GTK3_GL_CFLAGS@
 GTK3_GL_LIBS = @GTK3_GL_LIBS@
@@ -545,6 +553,7 @@
 LTLIBICONV = @LTLIBICONV@
 LTLIBINTL = @LTLIBINTL@
 LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
 MANIFEST_TOOL = @MANIFEST_TOOL@
@@ -558,8 +567,6 @@
 MODPLUG_LIBS = @MODPLUG_LIBS@
 MPEG2ENC_CFLAGS = @MPEG2ENC_CFLAGS@
 MPEG2ENC_LIBS = @MPEG2ENC_LIBS@
-MPG123_CFLAGS = @MPG123_CFLAGS@
-MPG123_LIBS = @MPG123_LIBS@
 MPLEX_CFLAGS = @MPLEX_CFLAGS@
 MPLEX_LDFLAGS = @MPLEX_LDFLAGS@
 MPLEX_LIBS = @MPLEX_LIBS@
@@ -575,6 +582,8 @@
 NETTLE_LIBS = @NETTLE_LIBS@
 NM = @NM@
 NMEDIT = @NMEDIT@
+NVENCODE_CFLAGS = @NVENCODE_CFLAGS@
+NVENCODE_LIBS = @NVENCODE_LIBS@
 OBJC = @OBJC@
 OBJCDEPMODE = @OBJCDEPMODE@
 OBJCFLAGS = @OBJCFLAGS@
@@ -632,16 +641,18 @@
 PYTHON_PLATFORM = @PYTHON_PLATFORM@
 PYTHON_PREFIX = @PYTHON_PREFIX@
 PYTHON_VERSION = @PYTHON_VERSION@
+QT_ANDROID_CFLAGS = @QT_ANDROID_CFLAGS@
+QT_ANDROID_LIBS = @QT_ANDROID_LIBS@
 QT_CFLAGS = @QT_CFLAGS@
 QT_LIBS = @QT_LIBS@
+QT_MAC_CFLAGS = @QT_MAC_CFLAGS@
+QT_MAC_LIBS = @QT_MAC_LIBS@
 QT_WAYLAND_CFLAGS = @QT_WAYLAND_CFLAGS@
 QT_WAYLAND_LIBS = @QT_WAYLAND_LIBS@
 QT_X11_CFLAGS = @QT_X11_CFLAGS@
 QT_X11_LIBS = @QT_X11_LIBS@
 RANLIB = @RANLIB@
 RCC = @RCC@
-RSVG_2_36_2_CFLAGS = @RSVG_2_36_2_CFLAGS@
-RSVG_2_36_2_LIBS = @RSVG_2_36_2_LIBS@
 RSVG_CFLAGS = @RSVG_CFLAGS@
 RSVG_LIBS = @RSVG_LIBS@
 RTMP_CFLAGS = @RTMP_CFLAGS@
@@ -693,6 +704,7 @@
 VOAACENC_LIBS = @VOAACENC_LIBS@
 VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
 VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VULKAN_LIBS = @VULKAN_LIBS@
 WARNING_CFLAGS = @WARNING_CFLAGS@
 WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
 WARNING_OBJCFLAGS = @WARNING_OBJCFLAGS@
@@ -703,6 +715,7 @@
 WAYLAND_LIBS = @WAYLAND_LIBS@
 WEBP_CFLAGS = @WEBP_CFLAGS@
 WEBP_LIBS = @WEBP_LIBS@
+WGET = @WGET@
 WILDMIDI_CFLAGS = @WILDMIDI_CFLAGS@
 WILDMIDI_LIBS = @WILDMIDI_LIBS@
 WINKS_LIBS = @WINKS_LIBS@
@@ -712,6 +725,8 @@
 X11_LIBS = @X11_LIBS@
 X265_CFLAGS = @X265_CFLAGS@
 X265_LIBS = @X265_LIBS@
+XCB_CFLAGS = @XCB_CFLAGS@
+XCB_LIBS = @XCB_LIBS@
 XCOMPOSITE_CFLAGS = @XCOMPOSITE_CFLAGS@
 XCOMPOSITE_LIBS = @XCOMPOSITE_LIBS@
 XGETTEXT = @XGETTEXT@
@@ -749,7 +764,6 @@
 docdir = @docdir@
 dvidir = @dvidir@
 exec_prefix = @exec_prefix@
-gsettingsschemadir = @gsettingsschemadir@
 host = @host@
 host_alias = @host_alias@
 host_cpu = @host_cpu@
@@ -1347,7 +1361,7 @@
 @HAVE_INTROSPECTION_TRUE@		--pkg gstreamer-@GST_API_VERSION@ \
 @HAVE_INTROSPECTION_TRUE@		--pkg gstreamer-video-@GST_API_VERSION@ \
 @HAVE_INTROSPECTION_TRUE@		--pkg-export gstreamer-mpegts-@GST_API_VERSION@ \
-@HAVE_INTROSPECTION_TRUE@		--add-init-section="gst_init(NULL,NULL);" \
+@HAVE_INTROSPECTION_TRUE@		--add-init-section="$(INTROSPECTION_INIT)" \
 @HAVE_INTROSPECTION_TRUE@		-DGST_USE_UNSTABLE_API \
 @HAVE_INTROSPECTION_TRUE@		--output $@ \
 @HAVE_INTROSPECTION_TRUE@		$(gir_headers) \
diff --git a/gst-libs/gst/mpegts/gstmpegtsdescriptor.c b/gst-libs/gst/mpegts/gstmpegtsdescriptor.c
index da8419c..d4817d2 100644
--- a/gst-libs/gst/mpegts/gstmpegtsdescriptor.c
+++ b/gst-libs/gst/mpegts/gstmpegtsdescriptor.c
@@ -635,7 +635,6 @@
 _packetize_descriptor_array (GPtrArray * array, guint8 ** out_data)
 {
   guint i;
-  guint8 header_size;
   GstMpegtsDescriptor *descriptor;
 
   g_return_if_fail (out_data != NULL);
@@ -647,13 +646,8 @@
   for (i = 0; i < array->len; i++) {
     descriptor = g_ptr_array_index (array, i);
 
-    if (descriptor->tag == GST_MTS_DESC_DVB_EXTENSION)
-      header_size = 3;
-    else
-      header_size = 2;
-
-    memcpy (*out_data, descriptor->data, descriptor->length + header_size);
-    *out_data += descriptor->length + header_size;
+    memcpy (*out_data, descriptor->data, descriptor->length + 2);
+    *out_data += descriptor->length + 2;
   }
 }
 
@@ -689,15 +683,15 @@
 
   descriptor->tag = tag;
   descriptor->tag_extension = tag_extension;
-  descriptor->length = length;
+  descriptor->length = length + 1;
 
   descriptor->data = g_malloc (length + 3);
 
   data = descriptor->data;
 
   *data++ = descriptor->tag;
-  *data++ = descriptor->tag_extension;
-  *data = descriptor->length;
+  *data++ = descriptor->length;
+  *data = descriptor->tag_extension;
 
   return descriptor;
 }
@@ -1105,3 +1099,28 @@
 
   return descriptor;
 }
+
+/**
+ * gst_mpegts_descriptor_from_custom_with_extension:
+ * @tag: descriptor tag
+ * @tag_extension: descriptor tag extension
+ * @data: (transfer none): descriptor data (after tag and length field)
+ * @length: length of @data
+ *
+ * Creates a #GstMpegtsDescriptor with custom @tag, @tag_extension and @data
+ *
+ * Returns: #GstMpegtsDescriptor
+ */
+GstMpegtsDescriptor *
+gst_mpegts_descriptor_from_custom_with_extension (guint8 tag,
+    guint8 tag_extension, const guint8 * data, gsize length)
+{
+  GstMpegtsDescriptor *descriptor;
+
+  descriptor = _new_descriptor_with_extension (tag, tag_extension, length);
+
+  if (data && (length > 0))
+    memcpy (descriptor->data + 3, data, length);
+
+  return descriptor;
+}
diff --git a/gst-libs/gst/mpegts/gstmpegtsdescriptor.h b/gst-libs/gst/mpegts/gstmpegtsdescriptor.h
index bbef97d..af56be0 100644
--- a/gst-libs/gst/mpegts/gstmpegtsdescriptor.h
+++ b/gst-libs/gst/mpegts/gstmpegtsdescriptor.h
@@ -341,6 +341,8 @@
 
 GstMpegtsDescriptor *
 gst_mpegts_descriptor_from_custom (guint8 tag, const guint8 *data, gsize length);
+GstMpegtsDescriptor *
+gst_mpegts_descriptor_from_custom_with_extension (guint8 tag, guint8 tag_extension, const guint8 *data, gsize length);
 
 G_END_DECLS
 
diff --git a/gst-libs/gst/player/Makefile.am b/gst-libs/gst/player/Makefile.am
new file mode 100644
index 0000000..611d1fc
--- /dev/null
+++ b/gst-libs/gst/player/Makefile.am
@@ -0,0 +1,103 @@
+lib_LTLIBRARIES = libgstplayer-@GST_API_VERSION@.la
+
+libgstplayer_@GST_API_VERSION@_la_SOURCES = \
+	gstplayer.c  \
+	gstplayer-signal-dispatcher.c  \
+	gstplayer-video-renderer.c  \
+	gstplayer-media-info.c \
+	gstplayer-g-main-context-signal-dispatcher.c  \
+	gstplayer-video-overlay-video-renderer.c \
+	gstplayer-visualization.c
+
+libgstplayer_@GST_API_VERSION@_la_CFLAGS = \
+	-I$(top_srcdir)/gst-libs \
+	-I$(top_builddir)/gst-libs \
+	$(GST_PLUGINS_BASE_CFLAGS) \
+	$(GST_BASE_CFLAGS) \
+	$(GST_CFLAGS)
+
+libgstplayer_@GST_API_VERSION@_la_LDFLAGS = \
+	$(GST_LIB_LDFLAGS) \
+	$(GST_ALL_LDFLAGS) \
+	$(GST_LT_LDFLAGS)
+
+libgstplayer_@GST_API_VERSION@_la_LIBADD = \
+	$(GST_PLUGINS_BASE_LIBS) \
+	-lgstvideo-$(GST_API_VERSION) \
+	-lgstaudio-$(GST_API_VERSION) \
+	-lgsttag-$(GST_API_VERSION) \
+	-lgstpbutils-$(GST_API_VERSION) \
+	$(GST_LIBS) \
+	$(LIBM)
+
+libgstplayerdir = $(includedir)/gstreamer-@GST_API_VERSION@/gst/player
+
+noinst_HEADERS = \
+	gstplayer-signal-dispatcher-private.h \
+	gstplayer-video-renderer-private.h \
+	gstplayer-media-info-private.h
+
+libgstplayer_HEADERS = \
+	player.h \
+	gstplayer.h \
+	gstplayer-types.h \
+	gstplayer-signal-dispatcher.h \
+	gstplayer-video-renderer.h \
+	gstplayer-media-info.h \
+	gstplayer-g-main-context-signal-dispatcher.h  \
+	gstplayer-video-overlay-video-renderer.h \
+	gstplayer-visualization.h
+
+CLEANFILES =
+
+if HAVE_INTROSPECTION
+BUILT_GIRSOURCES = GstPlayer-@GST_API_VERSION@.gir
+
+gir_headers=$(patsubst %,$(srcdir)/%, $(libgstplayer_HEADERS))
+gir_sources=$(patsubst %,$(srcdir)/%, $(libgstplayer_@GST_API_VERSION@_la_SOURCES))
+
+GstPlayer-@GST_API_VERSION@.gir: $(INTROSPECTION_SCANNER) libgstplayer-@GST_API_VERSION@.la
+	$(AM_V_GEN)PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" \
+		$(INTROSPECTION_SCANNER) -v --namespace GstPlayer \
+		--nsversion=@GST_API_VERSION@ \
+		--warn-all \
+		--strip-prefix=Gst \
+		-I$(top_srcdir)/gst-libs \
+		-I$(top_builddir)/gst-libs \
+		--c-include "gst/player/player.h" \
+		--add-include-path=$(top_builddir)/gst-libs \
+		--add-include-path=`PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" $(PKG_CONFIG) --variable=girdir gstreamer-1.0` \
+		--library-path=$(top_builddir)/gst-libs \
+		--library=libgstplayer-@GST_API_VERSION@.la \
+		--include=Gst-@GST_API_VERSION@ \
+		--libtool="${LIBTOOL}" \
+		--pkg gstreamer-@GST_API_VERSION@ \
+		--pkg gstreamer-audio-@GST_API_VERSION@ \
+		--pkg gstreamer-video-@GST_API_VERSION@ \
+		--pkg gstreamer-tag-@GST_API_VERSION@ \
+		--pkg gstreamer-pbutils-@GST_API_VERSION@ \
+		--pkg-export gstreamer-player-@GST_API_VERSION@ \
+		--add-init-section="$(INTROSPECTION_INIT)" \
+		--output $@ \
+		$(gir_headers) \
+		$(gir_sources)
+
+# INTROSPECTION_GIRDIR/INTROSPECTION_TYPELIBDIR aren't the right place to
+# install anything - we need to install inside our prefix.
+girdir = $(datadir)/gir-1.0
+gir_DATA = $(BUILT_GIRSOURCES)
+
+typelibsdir = $(libdir)/girepository-1.0/
+
+typelibs_DATA = $(BUILT_GIRSOURCES:.gir=.typelib)
+
+%.typelib: %.gir $(INTROSPECTION_COMPILER)
+	$(AM_V_GEN)PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" \
+		$(INTROSPECTION_COMPILER) \
+		--includedir=$(srcdir)/gst-libs \
+		--includedir=$(builddir)/gst-libs \
+		--includedir=`PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" $(PKG_CONFIG) --variable=girdir gstreamer-1.0` \
+		$(INTROSPECTION_COMPILER_OPTS) $< -o $(@F)
+
+CLEANFILES += $(BUILT_GIRSOURCES) $(typelibs_DATA)
+endif
diff --git a/ext/gsettings/Makefile.in b/gst-libs/gst/player/Makefile.in
similarity index 60%
rename from ext/gsettings/Makefile.in
rename to gst-libs/gst/player/Makefile.in
index 4560b18..544c785 100644
--- a/ext/gsettings/Makefile.in
+++ b/gst-libs/gst/player/Makefile.in
@@ -15,6 +15,7 @@
 @SET_MAKE@
 
 
+
 VPATH = @srcdir@
 am__is_gnu_make = { \
   if test -z '$(MAKELEVEL)'; then \
@@ -90,7 +91,8 @@
 build_triplet = @build@
 host_triplet = @host@
 target_triplet = @target@
-subdir = ext/gsettings
+@HAVE_INTROSPECTION_TRUE@am__append_1 = $(BUILT_GIRSOURCES) $(typelibs_DATA)
+subdir = gst-libs/gst/player
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
 am__aclocal_m4_deps = $(top_srcdir)/common/m4/as-ac-expand.m4 \
 	$(top_srcdir)/common/m4/as-auto-alt.m4 \
@@ -116,24 +118,22 @@
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
 	$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
-	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gsettings.m4 \
-	$(top_srcdir)/m4/gst-fionread.m4 $(top_srcdir)/m4/gst-sdl.m4 \
-	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
-	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
-	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libgcrypt.m4 \
-	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
-	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
-	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
-	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
-	$(top_srcdir)/configure.ac
+	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gst-fionread.m4 \
+	$(top_srcdir)/m4/gst-sdl.m4 $(top_srcdir)/m4/iconv.m4 \
+	$(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \
+	$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
+	$(top_srcdir)/m4/libgcrypt.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
+	$(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
-DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \
-	$(am__DIST_COMMON)
+DIST_COMMON = $(srcdir)/Makefile.am $(libgstplayer_HEADERS) \
+	$(noinst_HEADERS) $(am__DIST_COMMON)
 mkinstalldirs = $(install_sh) -d
 CONFIG_HEADER = $(top_builddir)/config.h
-CONFIG_CLEAN_FILES =  \
-	org.freedesktop.gstreamer.default-elements.gschema.xml
+CONFIG_CLEAN_FILES =
 CONFIG_CLEAN_VPATH_FILES =
 am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
 am__vpath_adj = case $$p in \
@@ -162,30 +162,31 @@
     || { echo " ( cd '$$dir' && rm -f" $$files ")"; \
          $(am__cd) "$$dir" && rm -f $$files; }; \
   }
-am__installdirs = "$(DESTDIR)$(plugindir)"
-LTLIBRARIES = $(plugin_LTLIBRARIES)
+am__installdirs = "$(DESTDIR)$(libdir)" "$(DESTDIR)$(girdir)" \
+	"$(DESTDIR)$(typelibsdir)" "$(DESTDIR)$(libgstplayerdir)"
+LTLIBRARIES = $(lib_LTLIBRARIES)
 am__DEPENDENCIES_1 =
-libgstgsettingselements_la_DEPENDENCIES = $(am__DEPENDENCIES_1) \
+libgstplayer_@GST_API_VERSION@_la_DEPENDENCIES =  \
+	$(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
 	$(am__DEPENDENCIES_1)
-am_libgstgsettingselements_la_OBJECTS =  \
-	libgstgsettingselements_la-gstgsettingsaudiosink.lo \
-	libgstgsettingselements_la-gstgsettingsaudiosrc.lo \
-	libgstgsettingselements_la-gstgsettingsvideosink.lo \
-	libgstgsettingselements_la-gstgsettingsvideosrc.lo \
-	libgstgsettingselements_la-gstswitchsink.lo \
-	libgstgsettingselements_la-gstswitchsrc.lo \
-	libgstgsettingselements_la-plugin.lo
-libgstgsettingselements_la_OBJECTS =  \
-	$(am_libgstgsettingselements_la_OBJECTS)
+am_libgstplayer_@GST_API_VERSION@_la_OBJECTS =  \
+	libgstplayer_@GST_API_VERSION@_la-gstplayer.lo \
+	libgstplayer_@GST_API_VERSION@_la-gstplayer-signal-dispatcher.lo \
+	libgstplayer_@GST_API_VERSION@_la-gstplayer-video-renderer.lo \
+	libgstplayer_@GST_API_VERSION@_la-gstplayer-media-info.lo \
+	libgstplayer_@GST_API_VERSION@_la-gstplayer-g-main-context-signal-dispatcher.lo \
+	libgstplayer_@GST_API_VERSION@_la-gstplayer-video-overlay-video-renderer.lo \
+	libgstplayer_@GST_API_VERSION@_la-gstplayer-visualization.lo
+libgstplayer_@GST_API_VERSION@_la_OBJECTS =  \
+	$(am_libgstplayer_@GST_API_VERSION@_la_OBJECTS)
 AM_V_lt = $(am__v_lt_@AM_V@)
 am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
 am__v_lt_0 = --silent
 am__v_lt_1 = 
-libgstgsettingselements_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
-	$(libgstgsettingselements_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
-	--mode=link $(CCLD) $(libgstgsettingselements_la_CFLAGS) \
-	$(CFLAGS) $(libgstgsettingselements_la_LDFLAGS) $(LDFLAGS) -o \
-	$@
+libgstplayer_@GST_API_VERSION@_la_LINK = $(LIBTOOL) $(AM_V_lt) \
+	--tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link \
+	$(CCLD) $(libgstplayer_@GST_API_VERSION@_la_CFLAGS) $(CFLAGS) \
+	$(libgstplayer_@GST_API_VERSION@_la_LDFLAGS) $(LDFLAGS) -o $@
 AM_V_P = $(am__v_P_@AM_V@)
 am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
 am__v_P_0 = false
@@ -220,14 +221,15 @@
 am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@)
 am__v_CCLD_0 = @echo "  CCLD    " $@;
 am__v_CCLD_1 = 
-SOURCES = $(libgstgsettingselements_la_SOURCES)
-DIST_SOURCES = $(libgstgsettingselements_la_SOURCES)
+SOURCES = $(libgstplayer_@GST_API_VERSION@_la_SOURCES)
+DIST_SOURCES = $(libgstplayer_@GST_API_VERSION@_la_SOURCES)
 am__can_run_installinfo = \
   case $$AM_UPDATE_INFO_DIR in \
     n|no|NO) false;; \
     *) (install-info --version) >/dev/null 2>&1;; \
   esac
-HEADERS = $(noinst_HEADERS)
+DATA = $(gir_DATA) $(typelibs_DATA)
+HEADERS = $(libgstplayer_HEADERS) $(noinst_HEADERS)
 am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
 # Read a list of newline-separated strings from the standard input,
 # and print each of them once, without duplicates.  Input order is
@@ -247,9 +249,7 @@
   done | $(am__uniquify_input)`
 ETAGS = etags
 CTAGS = ctags
-am__DIST_COMMON = $(srcdir)/Makefile.in \
-	$(srcdir)/org.freedesktop.gstreamer.default-elements.gschema.xml.in \
-	$(top_srcdir)/depcomp
+am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp
 DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
 ACLOCAL = @ACLOCAL@
 ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@
@@ -286,6 +286,8 @@
 CLUTTER_X11_LIBS = @CLUTTER_X11_LIBS@
 CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
+CUDA_CFLAGS = @CUDA_CFLAGS@
+CUDA_LIBS = @CUDA_LIBS@
 CURL_CFLAGS = @CURL_CFLAGS@
 CURL_LIBS = @CURL_LIBS@
 CXX = @CXX@
@@ -323,6 +325,8 @@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
+EGL_CFLAGS = @EGL_CFLAGS@
+EGL_LIBS = @EGL_LIBS@
 EGREP = @EGREP@
 ERROR_CFLAGS = @ERROR_CFLAGS@
 ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
@@ -331,7 +335,6 @@
 EXIF_CFLAGS = @EXIF_CFLAGS@
 EXIF_LIBS = @EXIF_LIBS@
 FAAC_LIBS = @FAAC_LIBS@
-FAAD_IS_NEAAC = @FAAD_IS_NEAAC@
 FAAD_LIBS = @FAAD_LIBS@
 FFLAGS = @FFLAGS@
 FGREP = @FGREP@
@@ -350,8 +353,9 @@
 GIO_LIBS = @GIO_LIBS@
 GIO_UNIX_CFLAGS = @GIO_UNIX_CFLAGS@
 GIO_UNIX_LIBS = @GIO_UNIX_LIBS@
+GLES2_CFLAGS = @GLES2_CFLAGS@
+GLES2_LIBS = @GLES2_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
-GLIB_COMPILE_SCHEMAS = @GLIB_COMPILE_SCHEMAS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
@@ -368,16 +372,17 @@
 GMODULE_NO_EXPORT_LIBS = @GMODULE_NO_EXPORT_LIBS@
 GMSGFMT = @GMSGFMT@
 GMSGFMT_015 = @GMSGFMT_015@
+GNUSTL_CFLAGS = @GNUSTL_CFLAGS@
+GNUSTL_LIBS = @GNUSTL_LIBS@
 GRAPHENE_CFLAGS = @GRAPHENE_CFLAGS@
 GRAPHENE_LIBS = @GRAPHENE_LIBS@
 GREP = @GREP@
-GSETTINGS_CFLAGS = @GSETTINGS_CFLAGS@
-GSETTINGS_DISABLE_SCHEMAS_COMPILE = @GSETTINGS_DISABLE_SCHEMAS_COMPILE@
-GSETTINGS_LIBS = @GSETTINGS_LIBS@
 GSM_LIBS = @GSM_LIBS@
 GSTPB_PLUGINS_DIR = @GSTPB_PLUGINS_DIR@
 GSTPB_PREFIX = @GSTPB_PREFIX@
 GST_AGE = @GST_AGE@
+GST_ALLOCATORS_CFLAGS = @GST_ALLOCATORS_CFLAGS@
+GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
 GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
 GST_API_VERSION = @GST_API_VERSION@
 GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
@@ -403,6 +408,8 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PBUTILS_CFLAGS = @GST_PBUTILS_CFLAGS@
+GST_PBUTILS_LIBS = @GST_PBUTILS_LIBS@
 GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BAD_CFLAGS = @GST_PLUGINS_BAD_CFLAGS@
@@ -428,6 +435,8 @@
 GST_PREFIX = @GST_PREFIX@
 GST_REVISION = @GST_REVISION@
 GST_TOOLS_DIR = @GST_TOOLS_DIR@
+GST_VIDEO_CFLAGS = @GST_VIDEO_CFLAGS@
+GST_VIDEO_LIBS = @GST_VIDEO_LIBS@
 GTK3_CFLAGS = @GTK3_CFLAGS@
 GTK3_GL_CFLAGS = @GTK3_GL_CFLAGS@
 GTK3_GL_LIBS = @GTK3_GL_LIBS@
@@ -529,6 +538,7 @@
 LTLIBICONV = @LTLIBICONV@
 LTLIBINTL = @LTLIBINTL@
 LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
 MANIFEST_TOOL = @MANIFEST_TOOL@
@@ -542,8 +552,6 @@
 MODPLUG_LIBS = @MODPLUG_LIBS@
 MPEG2ENC_CFLAGS = @MPEG2ENC_CFLAGS@
 MPEG2ENC_LIBS = @MPEG2ENC_LIBS@
-MPG123_CFLAGS = @MPG123_CFLAGS@
-MPG123_LIBS = @MPG123_LIBS@
 MPLEX_CFLAGS = @MPLEX_CFLAGS@
 MPLEX_LDFLAGS = @MPLEX_LDFLAGS@
 MPLEX_LIBS = @MPLEX_LIBS@
@@ -559,6 +567,8 @@
 NETTLE_LIBS = @NETTLE_LIBS@
 NM = @NM@
 NMEDIT = @NMEDIT@
+NVENCODE_CFLAGS = @NVENCODE_CFLAGS@
+NVENCODE_LIBS = @NVENCODE_LIBS@
 OBJC = @OBJC@
 OBJCDEPMODE = @OBJCDEPMODE@
 OBJCFLAGS = @OBJCFLAGS@
@@ -616,16 +626,18 @@
 PYTHON_PLATFORM = @PYTHON_PLATFORM@
 PYTHON_PREFIX = @PYTHON_PREFIX@
 PYTHON_VERSION = @PYTHON_VERSION@
+QT_ANDROID_CFLAGS = @QT_ANDROID_CFLAGS@
+QT_ANDROID_LIBS = @QT_ANDROID_LIBS@
 QT_CFLAGS = @QT_CFLAGS@
 QT_LIBS = @QT_LIBS@
+QT_MAC_CFLAGS = @QT_MAC_CFLAGS@
+QT_MAC_LIBS = @QT_MAC_LIBS@
 QT_WAYLAND_CFLAGS = @QT_WAYLAND_CFLAGS@
 QT_WAYLAND_LIBS = @QT_WAYLAND_LIBS@
 QT_X11_CFLAGS = @QT_X11_CFLAGS@
 QT_X11_LIBS = @QT_X11_LIBS@
 RANLIB = @RANLIB@
 RCC = @RCC@
-RSVG_2_36_2_CFLAGS = @RSVG_2_36_2_CFLAGS@
-RSVG_2_36_2_LIBS = @RSVG_2_36_2_LIBS@
 RSVG_CFLAGS = @RSVG_CFLAGS@
 RSVG_LIBS = @RSVG_LIBS@
 RTMP_CFLAGS = @RTMP_CFLAGS@
@@ -677,6 +689,7 @@
 VOAACENC_LIBS = @VOAACENC_LIBS@
 VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
 VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VULKAN_LIBS = @VULKAN_LIBS@
 WARNING_CFLAGS = @WARNING_CFLAGS@
 WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
 WARNING_OBJCFLAGS = @WARNING_OBJCFLAGS@
@@ -687,6 +700,7 @@
 WAYLAND_LIBS = @WAYLAND_LIBS@
 WEBP_CFLAGS = @WEBP_CFLAGS@
 WEBP_LIBS = @WEBP_LIBS@
+WGET = @WGET@
 WILDMIDI_CFLAGS = @WILDMIDI_CFLAGS@
 WILDMIDI_LIBS = @WILDMIDI_LIBS@
 WINKS_LIBS = @WINKS_LIBS@
@@ -696,6 +710,8 @@
 X11_LIBS = @X11_LIBS@
 X265_CFLAGS = @X265_CFLAGS@
 X265_LIBS = @X265_LIBS@
+XCB_CFLAGS = @XCB_CFLAGS@
+XCB_LIBS = @XCB_LIBS@
 XCOMPOSITE_CFLAGS = @XCOMPOSITE_CFLAGS@
 XCOMPOSITE_LIBS = @XCOMPOSITE_LIBS@
 XGETTEXT = @XGETTEXT@
@@ -733,7 +749,6 @@
 docdir = @docdir@
 dvidir = @dvidir@
 exec_prefix = @exec_prefix@
-gsettingsschemadir = @gsettingsschemadir@
 host = @host@
 host_alias = @host_alias@
 host_cpu = @host_cpu@
@@ -773,37 +788,65 @@
 top_builddir = @top_builddir@
 top_srcdir = @top_srcdir@
 wayland_scanner = @wayland_scanner@
-gsettings_SCHEMAS = org.freedesktop.gstreamer-@GST_API_VERSION@.default-elements.gschema.xml
-plugin_LTLIBRARIES = libgstgsettingselements.la
-libgstgsettingselements_la_SOURCES = \
-        gstgsettingsaudiosink.c \
-        gstgsettingsaudiosrc.c \
-        gstgsettingsvideosink.c \
-        gstgsettingsvideosrc.c \
-        gstswitchsink.c \
-        gstswitchsrc.c \
-	plugin.c
+lib_LTLIBRARIES = libgstplayer-@GST_API_VERSION@.la
+libgstplayer_@GST_API_VERSION@_la_SOURCES = \
+	gstplayer.c  \
+	gstplayer-signal-dispatcher.c  \
+	gstplayer-video-renderer.c  \
+	gstplayer-media-info.c \
+	gstplayer-g-main-context-signal-dispatcher.c  \
+	gstplayer-video-overlay-video-renderer.c \
+	gstplayer-visualization.c
 
-libgstgsettingselements_la_CFLAGS = $(GST_PLUGINS_BAD_CFLAGS) $(GST_CFLAGS) $(GSETTINGS_CFLAGS) $(DIR_CFLAGS) \
-	-DGstSwitchSrc=GstGSettingsSwitchSrc \
-	-DGstSwitchSrcClass=GstGSettingsSwitchSrcClass \
-	-DGstSwitchSink=GstGSettingsSwitchSink \
-	-DGstSwitchSinkClass=GstGSettingsSwitchSinkClass
+libgstplayer_@GST_API_VERSION@_la_CFLAGS = \
+	-I$(top_srcdir)/gst-libs \
+	-I$(top_builddir)/gst-libs \
+	$(GST_PLUGINS_BASE_CFLAGS) \
+	$(GST_BASE_CFLAGS) \
+	$(GST_CFLAGS)
 
-libgstgsettingselements_la_LIBADD = $(GST_LIBS) $(GSETTINGS_LIBS)
-libgstgsettingselements_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS)
-libgstgsettingselements_la_LIBTOOLFLAGS = $(GST_PLUGIN_LIBTOOLFLAGS)
+libgstplayer_@GST_API_VERSION@_la_LDFLAGS = \
+	$(GST_LIB_LDFLAGS) \
+	$(GST_ALL_LDFLAGS) \
+	$(GST_LT_LDFLAGS)
+
+libgstplayer_@GST_API_VERSION@_la_LIBADD = \
+	$(GST_PLUGINS_BASE_LIBS) \
+	-lgstvideo-$(GST_API_VERSION) \
+	-lgstaudio-$(GST_API_VERSION) \
+	-lgsttag-$(GST_API_VERSION) \
+	-lgstpbutils-$(GST_API_VERSION) \
+	$(GST_LIBS) \
+	$(LIBM)
+
+libgstplayerdir = $(includedir)/gstreamer-@GST_API_VERSION@/gst/player
 noinst_HEADERS = \
-        gstgsettingsaudiosink.h \
-        gstgsettingsaudiosrc.h \
-        gstgsettingsvideosink.h \
-        gstgsettingsvideosrc.h \
-        gstswitchsink.h \
-        gstswitchsrc.h \
-	gstgsettings.h
+	gstplayer-signal-dispatcher-private.h \
+	gstplayer-video-renderer-private.h \
+	gstplayer-media-info-private.h
 
-EXTRA_DIST = org.freedesktop.gstreamer.default-elements.gschema.xml
-CLEANFILES = $(gsettings_SCHEMAS)
+libgstplayer_HEADERS = \
+	player.h \
+	gstplayer.h \
+	gstplayer-types.h \
+	gstplayer-signal-dispatcher.h \
+	gstplayer-video-renderer.h \
+	gstplayer-media-info.h \
+	gstplayer-g-main-context-signal-dispatcher.h  \
+	gstplayer-video-overlay-video-renderer.h \
+	gstplayer-visualization.h
+
+CLEANFILES = $(am__append_1)
+@HAVE_INTROSPECTION_TRUE@BUILT_GIRSOURCES = GstPlayer-@GST_API_VERSION@.gir
+@HAVE_INTROSPECTION_TRUE@gir_headers = $(patsubst %,$(srcdir)/%, $(libgstplayer_HEADERS))
+@HAVE_INTROSPECTION_TRUE@gir_sources = $(patsubst %,$(srcdir)/%, $(libgstplayer_@GST_API_VERSION@_la_SOURCES))
+
+# INTROSPECTION_GIRDIR/INTROSPECTION_TYPELIBDIR aren't the right place to
+# install anything - we need to install inside our prefix.
+@HAVE_INTROSPECTION_TRUE@girdir = $(datadir)/gir-1.0
+@HAVE_INTROSPECTION_TRUE@gir_DATA = $(BUILT_GIRSOURCES)
+@HAVE_INTROSPECTION_TRUE@typelibsdir = $(libdir)/girepository-1.0/
+@HAVE_INTROSPECTION_TRUE@typelibs_DATA = $(BUILT_GIRSOURCES:.gir=.typelib)
 all: all-am
 
 .SUFFIXES:
@@ -817,9 +860,9 @@
 	      exit 1;; \
 	  esac; \
 	done; \
-	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu ext/gsettings/Makefile'; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu gst-libs/gst/player/Makefile'; \
 	$(am__cd) $(top_srcdir) && \
-	  $(AUTOMAKE) --gnu ext/gsettings/Makefile
+	  $(AUTOMAKE) --gnu gst-libs/gst/player/Makefile
 Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
 	@case '$?' in \
 	  *config.status*) \
@@ -837,36 +880,34 @@
 $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
 	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
 $(am__aclocal_m4_deps):
-org.freedesktop.gstreamer.default-elements.gschema.xml: $(top_builddir)/config.status $(srcdir)/org.freedesktop.gstreamer.default-elements.gschema.xml.in
-	cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
 
-install-pluginLTLIBRARIES: $(plugin_LTLIBRARIES)
+install-libLTLIBRARIES: $(lib_LTLIBRARIES)
 	@$(NORMAL_INSTALL)
-	@list='$(plugin_LTLIBRARIES)'; test -n "$(plugindir)" || list=; \
+	@list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \
 	list2=; for p in $$list; do \
 	  if test -f $$p; then \
 	    list2="$$list2 $$p"; \
 	  else :; fi; \
 	done; \
 	test -z "$$list2" || { \
-	  echo " $(MKDIR_P) '$(DESTDIR)$(plugindir)'"; \
-	  $(MKDIR_P) "$(DESTDIR)$(plugindir)" || exit 1; \
-	  echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(plugindir)'"; \
-	  $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(plugindir)"; \
+	  echo " $(MKDIR_P) '$(DESTDIR)$(libdir)'"; \
+	  $(MKDIR_P) "$(DESTDIR)$(libdir)" || exit 1; \
+	  echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(libdir)'"; \
+	  $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(libdir)"; \
 	}
 
-uninstall-pluginLTLIBRARIES:
+uninstall-libLTLIBRARIES:
 	@$(NORMAL_UNINSTALL)
-	@list='$(plugin_LTLIBRARIES)'; test -n "$(plugindir)" || list=; \
+	@list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \
 	for p in $$list; do \
 	  $(am__strip_dir) \
-	  echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(plugindir)/$$f'"; \
-	  $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(plugindir)/$$f"; \
+	  echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$f'"; \
+	  $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$f"; \
 	done
 
-clean-pluginLTLIBRARIES:
-	-test -z "$(plugin_LTLIBRARIES)" || rm -f $(plugin_LTLIBRARIES)
-	@list='$(plugin_LTLIBRARIES)'; \
+clean-libLTLIBRARIES:
+	-test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES)
+	@list='$(lib_LTLIBRARIES)'; \
 	locs=`for p in $$list; do echo $$p; done | \
 	      sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \
 	      sort -u`; \
@@ -875,8 +916,8 @@
 	  rm -f $${locs}; \
 	}
 
-libgstgsettingselements.la: $(libgstgsettingselements_la_OBJECTS) $(libgstgsettingselements_la_DEPENDENCIES) $(EXTRA_libgstgsettingselements_la_DEPENDENCIES) 
-	$(AM_V_CCLD)$(libgstgsettingselements_la_LINK) -rpath $(plugindir) $(libgstgsettingselements_la_OBJECTS) $(libgstgsettingselements_la_LIBADD) $(LIBS)
+libgstplayer-@GST_API_VERSION@.la: $(libgstplayer_@GST_API_VERSION@_la_OBJECTS) $(libgstplayer_@GST_API_VERSION@_la_DEPENDENCIES) $(EXTRA_libgstplayer_@GST_API_VERSION@_la_DEPENDENCIES) 
+	$(AM_V_CCLD)$(libgstplayer_@GST_API_VERSION@_la_LINK) -rpath $(libdir) $(libgstplayer_@GST_API_VERSION@_la_OBJECTS) $(libgstplayer_@GST_API_VERSION@_la_LIBADD) $(LIBS)
 
 mostlyclean-compile:
 	-rm -f *.$(OBJEXT)
@@ -884,13 +925,13 @@
 distclean-compile:
 	-rm -f *.tab.c
 
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstgsettingselements_la-gstgsettingsaudiosink.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstgsettingselements_la-gstgsettingsaudiosrc.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstgsettingselements_la-gstgsettingsvideosink.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstgsettingselements_la-gstgsettingsvideosrc.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstgsettingselements_la-gstswitchsink.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstgsettingselements_la-gstswitchsrc.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstgsettingselements_la-plugin.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstplayer_@GST_API_VERSION@_la-gstplayer-g-main-context-signal-dispatcher.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstplayer_@GST_API_VERSION@_la-gstplayer-media-info.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstplayer_@GST_API_VERSION@_la-gstplayer-signal-dispatcher.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstplayer_@GST_API_VERSION@_la-gstplayer-video-overlay-video-renderer.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstplayer_@GST_API_VERSION@_la-gstplayer-video-renderer.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstplayer_@GST_API_VERSION@_la-gstplayer-visualization.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstplayer_@GST_API_VERSION@_la-gstplayer.Plo@am__quote@
 
 .c.o:
 @am__fastdepCC_TRUE@	$(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\
@@ -916,60 +957,123 @@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $<
 
-libgstgsettingselements_la-gstgsettingsaudiosink.lo: gstgsettingsaudiosink.c
-@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstgsettingselements_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstgsettingselements_la_CFLAGS) $(CFLAGS) -MT libgstgsettingselements_la-gstgsettingsaudiosink.lo -MD -MP -MF $(DEPDIR)/libgstgsettingselements_la-gstgsettingsaudiosink.Tpo -c -o libgstgsettingselements_la-gstgsettingsaudiosink.lo `test -f 'gstgsettingsaudiosink.c' || echo '$(srcdir)/'`gstgsettingsaudiosink.c
-@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstgsettingselements_la-gstgsettingsaudiosink.Tpo $(DEPDIR)/libgstgsettingselements_la-gstgsettingsaudiosink.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='gstgsettingsaudiosink.c' object='libgstgsettingselements_la-gstgsettingsaudiosink.lo' libtool=yes @AMDEPBACKSLASH@
+libgstplayer_@GST_API_VERSION@_la-gstplayer.lo: gstplayer.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstplayer_@GST_API_VERSION@_la_CFLAGS) $(CFLAGS) -MT libgstplayer_@GST_API_VERSION@_la-gstplayer.lo -MD -MP -MF $(DEPDIR)/libgstplayer_@GST_API_VERSION@_la-gstplayer.Tpo -c -o libgstplayer_@GST_API_VERSION@_la-gstplayer.lo `test -f 'gstplayer.c' || echo '$(srcdir)/'`gstplayer.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstplayer_@GST_API_VERSION@_la-gstplayer.Tpo $(DEPDIR)/libgstplayer_@GST_API_VERSION@_la-gstplayer.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='gstplayer.c' object='libgstplayer_@GST_API_VERSION@_la-gstplayer.lo' libtool=yes @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstgsettingselements_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstgsettingselements_la_CFLAGS) $(CFLAGS) -c -o libgstgsettingselements_la-gstgsettingsaudiosink.lo `test -f 'gstgsettingsaudiosink.c' || echo '$(srcdir)/'`gstgsettingsaudiosink.c
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstplayer_@GST_API_VERSION@_la_CFLAGS) $(CFLAGS) -c -o libgstplayer_@GST_API_VERSION@_la-gstplayer.lo `test -f 'gstplayer.c' || echo '$(srcdir)/'`gstplayer.c
 
-libgstgsettingselements_la-gstgsettingsaudiosrc.lo: gstgsettingsaudiosrc.c
-@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstgsettingselements_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstgsettingselements_la_CFLAGS) $(CFLAGS) -MT libgstgsettingselements_la-gstgsettingsaudiosrc.lo -MD -MP -MF $(DEPDIR)/libgstgsettingselements_la-gstgsettingsaudiosrc.Tpo -c -o libgstgsettingselements_la-gstgsettingsaudiosrc.lo `test -f 'gstgsettingsaudiosrc.c' || echo '$(srcdir)/'`gstgsettingsaudiosrc.c
-@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstgsettingselements_la-gstgsettingsaudiosrc.Tpo $(DEPDIR)/libgstgsettingselements_la-gstgsettingsaudiosrc.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='gstgsettingsaudiosrc.c' object='libgstgsettingselements_la-gstgsettingsaudiosrc.lo' libtool=yes @AMDEPBACKSLASH@
+libgstplayer_@GST_API_VERSION@_la-gstplayer-signal-dispatcher.lo: gstplayer-signal-dispatcher.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstplayer_@GST_API_VERSION@_la_CFLAGS) $(CFLAGS) -MT libgstplayer_@GST_API_VERSION@_la-gstplayer-signal-dispatcher.lo -MD -MP -MF $(DEPDIR)/libgstplayer_@GST_API_VERSION@_la-gstplayer-signal-dispatcher.Tpo -c -o libgstplayer_@GST_API_VERSION@_la-gstplayer-signal-dispatcher.lo `test -f 'gstplayer-signal-dispatcher.c' || echo '$(srcdir)/'`gstplayer-signal-dispatcher.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstplayer_@GST_API_VERSION@_la-gstplayer-signal-dispatcher.Tpo $(DEPDIR)/libgstplayer_@GST_API_VERSION@_la-gstplayer-signal-dispatcher.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='gstplayer-signal-dispatcher.c' object='libgstplayer_@GST_API_VERSION@_la-gstplayer-signal-dispatcher.lo' libtool=yes @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstgsettingselements_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstgsettingselements_la_CFLAGS) $(CFLAGS) -c -o libgstgsettingselements_la-gstgsettingsaudiosrc.lo `test -f 'gstgsettingsaudiosrc.c' || echo '$(srcdir)/'`gstgsettingsaudiosrc.c
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstplayer_@GST_API_VERSION@_la_CFLAGS) $(CFLAGS) -c -o libgstplayer_@GST_API_VERSION@_la-gstplayer-signal-dispatcher.lo `test -f 'gstplayer-signal-dispatcher.c' || echo '$(srcdir)/'`gstplayer-signal-dispatcher.c
 
-libgstgsettingselements_la-gstgsettingsvideosink.lo: gstgsettingsvideosink.c
-@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstgsettingselements_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstgsettingselements_la_CFLAGS) $(CFLAGS) -MT libgstgsettingselements_la-gstgsettingsvideosink.lo -MD -MP -MF $(DEPDIR)/libgstgsettingselements_la-gstgsettingsvideosink.Tpo -c -o libgstgsettingselements_la-gstgsettingsvideosink.lo `test -f 'gstgsettingsvideosink.c' || echo '$(srcdir)/'`gstgsettingsvideosink.c
-@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstgsettingselements_la-gstgsettingsvideosink.Tpo $(DEPDIR)/libgstgsettingselements_la-gstgsettingsvideosink.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='gstgsettingsvideosink.c' object='libgstgsettingselements_la-gstgsettingsvideosink.lo' libtool=yes @AMDEPBACKSLASH@
+libgstplayer_@GST_API_VERSION@_la-gstplayer-video-renderer.lo: gstplayer-video-renderer.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstplayer_@GST_API_VERSION@_la_CFLAGS) $(CFLAGS) -MT libgstplayer_@GST_API_VERSION@_la-gstplayer-video-renderer.lo -MD -MP -MF $(DEPDIR)/libgstplayer_@GST_API_VERSION@_la-gstplayer-video-renderer.Tpo -c -o libgstplayer_@GST_API_VERSION@_la-gstplayer-video-renderer.lo `test -f 'gstplayer-video-renderer.c' || echo '$(srcdir)/'`gstplayer-video-renderer.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstplayer_@GST_API_VERSION@_la-gstplayer-video-renderer.Tpo $(DEPDIR)/libgstplayer_@GST_API_VERSION@_la-gstplayer-video-renderer.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='gstplayer-video-renderer.c' object='libgstplayer_@GST_API_VERSION@_la-gstplayer-video-renderer.lo' libtool=yes @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstgsettingselements_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstgsettingselements_la_CFLAGS) $(CFLAGS) -c -o libgstgsettingselements_la-gstgsettingsvideosink.lo `test -f 'gstgsettingsvideosink.c' || echo '$(srcdir)/'`gstgsettingsvideosink.c
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstplayer_@GST_API_VERSION@_la_CFLAGS) $(CFLAGS) -c -o libgstplayer_@GST_API_VERSION@_la-gstplayer-video-renderer.lo `test -f 'gstplayer-video-renderer.c' || echo '$(srcdir)/'`gstplayer-video-renderer.c
 
-libgstgsettingselements_la-gstgsettingsvideosrc.lo: gstgsettingsvideosrc.c
-@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstgsettingselements_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstgsettingselements_la_CFLAGS) $(CFLAGS) -MT libgstgsettingselements_la-gstgsettingsvideosrc.lo -MD -MP -MF $(DEPDIR)/libgstgsettingselements_la-gstgsettingsvideosrc.Tpo -c -o libgstgsettingselements_la-gstgsettingsvideosrc.lo `test -f 'gstgsettingsvideosrc.c' || echo '$(srcdir)/'`gstgsettingsvideosrc.c
-@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstgsettingselements_la-gstgsettingsvideosrc.Tpo $(DEPDIR)/libgstgsettingselements_la-gstgsettingsvideosrc.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='gstgsettingsvideosrc.c' object='libgstgsettingselements_la-gstgsettingsvideosrc.lo' libtool=yes @AMDEPBACKSLASH@
+libgstplayer_@GST_API_VERSION@_la-gstplayer-media-info.lo: gstplayer-media-info.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstplayer_@GST_API_VERSION@_la_CFLAGS) $(CFLAGS) -MT libgstplayer_@GST_API_VERSION@_la-gstplayer-media-info.lo -MD -MP -MF $(DEPDIR)/libgstplayer_@GST_API_VERSION@_la-gstplayer-media-info.Tpo -c -o libgstplayer_@GST_API_VERSION@_la-gstplayer-media-info.lo `test -f 'gstplayer-media-info.c' || echo '$(srcdir)/'`gstplayer-media-info.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstplayer_@GST_API_VERSION@_la-gstplayer-media-info.Tpo $(DEPDIR)/libgstplayer_@GST_API_VERSION@_la-gstplayer-media-info.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='gstplayer-media-info.c' object='libgstplayer_@GST_API_VERSION@_la-gstplayer-media-info.lo' libtool=yes @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstgsettingselements_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstgsettingselements_la_CFLAGS) $(CFLAGS) -c -o libgstgsettingselements_la-gstgsettingsvideosrc.lo `test -f 'gstgsettingsvideosrc.c' || echo '$(srcdir)/'`gstgsettingsvideosrc.c
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstplayer_@GST_API_VERSION@_la_CFLAGS) $(CFLAGS) -c -o libgstplayer_@GST_API_VERSION@_la-gstplayer-media-info.lo `test -f 'gstplayer-media-info.c' || echo '$(srcdir)/'`gstplayer-media-info.c
 
-libgstgsettingselements_la-gstswitchsink.lo: gstswitchsink.c
-@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstgsettingselements_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstgsettingselements_la_CFLAGS) $(CFLAGS) -MT libgstgsettingselements_la-gstswitchsink.lo -MD -MP -MF $(DEPDIR)/libgstgsettingselements_la-gstswitchsink.Tpo -c -o libgstgsettingselements_la-gstswitchsink.lo `test -f 'gstswitchsink.c' || echo '$(srcdir)/'`gstswitchsink.c
-@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstgsettingselements_la-gstswitchsink.Tpo $(DEPDIR)/libgstgsettingselements_la-gstswitchsink.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='gstswitchsink.c' object='libgstgsettingselements_la-gstswitchsink.lo' libtool=yes @AMDEPBACKSLASH@
+libgstplayer_@GST_API_VERSION@_la-gstplayer-g-main-context-signal-dispatcher.lo: gstplayer-g-main-context-signal-dispatcher.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstplayer_@GST_API_VERSION@_la_CFLAGS) $(CFLAGS) -MT libgstplayer_@GST_API_VERSION@_la-gstplayer-g-main-context-signal-dispatcher.lo -MD -MP -MF $(DEPDIR)/libgstplayer_@GST_API_VERSION@_la-gstplayer-g-main-context-signal-dispatcher.Tpo -c -o libgstplayer_@GST_API_VERSION@_la-gstplayer-g-main-context-signal-dispatcher.lo `test -f 'gstplayer-g-main-context-signal-dispatcher.c' || echo '$(srcdir)/'`gstplayer-g-main-context-signal-dispatcher.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstplayer_@GST_API_VERSION@_la-gstplayer-g-main-context-signal-dispatcher.Tpo $(DEPDIR)/libgstplayer_@GST_API_VERSION@_la-gstplayer-g-main-context-signal-dispatcher.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='gstplayer-g-main-context-signal-dispatcher.c' object='libgstplayer_@GST_API_VERSION@_la-gstplayer-g-main-context-signal-dispatcher.lo' libtool=yes @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstgsettingselements_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstgsettingselements_la_CFLAGS) $(CFLAGS) -c -o libgstgsettingselements_la-gstswitchsink.lo `test -f 'gstswitchsink.c' || echo '$(srcdir)/'`gstswitchsink.c
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstplayer_@GST_API_VERSION@_la_CFLAGS) $(CFLAGS) -c -o libgstplayer_@GST_API_VERSION@_la-gstplayer-g-main-context-signal-dispatcher.lo `test -f 'gstplayer-g-main-context-signal-dispatcher.c' || echo '$(srcdir)/'`gstplayer-g-main-context-signal-dispatcher.c
 
-libgstgsettingselements_la-gstswitchsrc.lo: gstswitchsrc.c
-@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstgsettingselements_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstgsettingselements_la_CFLAGS) $(CFLAGS) -MT libgstgsettingselements_la-gstswitchsrc.lo -MD -MP -MF $(DEPDIR)/libgstgsettingselements_la-gstswitchsrc.Tpo -c -o libgstgsettingselements_la-gstswitchsrc.lo `test -f 'gstswitchsrc.c' || echo '$(srcdir)/'`gstswitchsrc.c
-@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstgsettingselements_la-gstswitchsrc.Tpo $(DEPDIR)/libgstgsettingselements_la-gstswitchsrc.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='gstswitchsrc.c' object='libgstgsettingselements_la-gstswitchsrc.lo' libtool=yes @AMDEPBACKSLASH@
+libgstplayer_@GST_API_VERSION@_la-gstplayer-video-overlay-video-renderer.lo: gstplayer-video-overlay-video-renderer.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstplayer_@GST_API_VERSION@_la_CFLAGS) $(CFLAGS) -MT libgstplayer_@GST_API_VERSION@_la-gstplayer-video-overlay-video-renderer.lo -MD -MP -MF $(DEPDIR)/libgstplayer_@GST_API_VERSION@_la-gstplayer-video-overlay-video-renderer.Tpo -c -o libgstplayer_@GST_API_VERSION@_la-gstplayer-video-overlay-video-renderer.lo `test -f 'gstplayer-video-overlay-video-renderer.c' || echo '$(srcdir)/'`gstplayer-video-overlay-video-renderer.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstplayer_@GST_API_VERSION@_la-gstplayer-video-overlay-video-renderer.Tpo $(DEPDIR)/libgstplayer_@GST_API_VERSION@_la-gstplayer-video-overlay-video-renderer.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='gstplayer-video-overlay-video-renderer.c' object='libgstplayer_@GST_API_VERSION@_la-gstplayer-video-overlay-video-renderer.lo' libtool=yes @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstgsettingselements_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstgsettingselements_la_CFLAGS) $(CFLAGS) -c -o libgstgsettingselements_la-gstswitchsrc.lo `test -f 'gstswitchsrc.c' || echo '$(srcdir)/'`gstswitchsrc.c
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstplayer_@GST_API_VERSION@_la_CFLAGS) $(CFLAGS) -c -o libgstplayer_@GST_API_VERSION@_la-gstplayer-video-overlay-video-renderer.lo `test -f 'gstplayer-video-overlay-video-renderer.c' || echo '$(srcdir)/'`gstplayer-video-overlay-video-renderer.c
 
-libgstgsettingselements_la-plugin.lo: plugin.c
-@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstgsettingselements_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstgsettingselements_la_CFLAGS) $(CFLAGS) -MT libgstgsettingselements_la-plugin.lo -MD -MP -MF $(DEPDIR)/libgstgsettingselements_la-plugin.Tpo -c -o libgstgsettingselements_la-plugin.lo `test -f 'plugin.c' || echo '$(srcdir)/'`plugin.c
-@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstgsettingselements_la-plugin.Tpo $(DEPDIR)/libgstgsettingselements_la-plugin.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='plugin.c' object='libgstgsettingselements_la-plugin.lo' libtool=yes @AMDEPBACKSLASH@
+libgstplayer_@GST_API_VERSION@_la-gstplayer-visualization.lo: gstplayer-visualization.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstplayer_@GST_API_VERSION@_la_CFLAGS) $(CFLAGS) -MT libgstplayer_@GST_API_VERSION@_la-gstplayer-visualization.lo -MD -MP -MF $(DEPDIR)/libgstplayer_@GST_API_VERSION@_la-gstplayer-visualization.Tpo -c -o libgstplayer_@GST_API_VERSION@_la-gstplayer-visualization.lo `test -f 'gstplayer-visualization.c' || echo '$(srcdir)/'`gstplayer-visualization.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstplayer_@GST_API_VERSION@_la-gstplayer-visualization.Tpo $(DEPDIR)/libgstplayer_@GST_API_VERSION@_la-gstplayer-visualization.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='gstplayer-visualization.c' object='libgstplayer_@GST_API_VERSION@_la-gstplayer-visualization.lo' libtool=yes @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstgsettingselements_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstgsettingselements_la_CFLAGS) $(CFLAGS) -c -o libgstgsettingselements_la-plugin.lo `test -f 'plugin.c' || echo '$(srcdir)/'`plugin.c
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstplayer_@GST_API_VERSION@_la_CFLAGS) $(CFLAGS) -c -o libgstplayer_@GST_API_VERSION@_la-gstplayer-visualization.lo `test -f 'gstplayer-visualization.c' || echo '$(srcdir)/'`gstplayer-visualization.c
 
 mostlyclean-libtool:
 	-rm -f *.lo
 
 clean-libtool:
 	-rm -rf .libs _libs
+install-girDATA: $(gir_DATA)
+	@$(NORMAL_INSTALL)
+	@list='$(gir_DATA)'; test -n "$(girdir)" || list=; \
+	if test -n "$$list"; then \
+	  echo " $(MKDIR_P) '$(DESTDIR)$(girdir)'"; \
+	  $(MKDIR_P) "$(DESTDIR)$(girdir)" || exit 1; \
+	fi; \
+	for p in $$list; do \
+	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+	  echo "$$d$$p"; \
+	done | $(am__base_list) | \
+	while read files; do \
+	  echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(girdir)'"; \
+	  $(INSTALL_DATA) $$files "$(DESTDIR)$(girdir)" || exit $$?; \
+	done
+
+uninstall-girDATA:
+	@$(NORMAL_UNINSTALL)
+	@list='$(gir_DATA)'; test -n "$(girdir)" || list=; \
+	files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+	dir='$(DESTDIR)$(girdir)'; $(am__uninstall_files_from_dir)
+install-typelibsDATA: $(typelibs_DATA)
+	@$(NORMAL_INSTALL)
+	@list='$(typelibs_DATA)'; test -n "$(typelibsdir)" || list=; \
+	if test -n "$$list"; then \
+	  echo " $(MKDIR_P) '$(DESTDIR)$(typelibsdir)'"; \
+	  $(MKDIR_P) "$(DESTDIR)$(typelibsdir)" || exit 1; \
+	fi; \
+	for p in $$list; do \
+	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+	  echo "$$d$$p"; \
+	done | $(am__base_list) | \
+	while read files; do \
+	  echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(typelibsdir)'"; \
+	  $(INSTALL_DATA) $$files "$(DESTDIR)$(typelibsdir)" || exit $$?; \
+	done
+
+uninstall-typelibsDATA:
+	@$(NORMAL_UNINSTALL)
+	@list='$(typelibs_DATA)'; test -n "$(typelibsdir)" || list=; \
+	files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+	dir='$(DESTDIR)$(typelibsdir)'; $(am__uninstall_files_from_dir)
+install-libgstplayerHEADERS: $(libgstplayer_HEADERS)
+	@$(NORMAL_INSTALL)
+	@list='$(libgstplayer_HEADERS)'; test -n "$(libgstplayerdir)" || list=; \
+	if test -n "$$list"; then \
+	  echo " $(MKDIR_P) '$(DESTDIR)$(libgstplayerdir)'"; \
+	  $(MKDIR_P) "$(DESTDIR)$(libgstplayerdir)" || exit 1; \
+	fi; \
+	for p in $$list; do \
+	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+	  echo "$$d$$p"; \
+	done | $(am__base_list) | \
+	while read files; do \
+	  echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(libgstplayerdir)'"; \
+	  $(INSTALL_HEADER) $$files "$(DESTDIR)$(libgstplayerdir)" || exit $$?; \
+	done
+
+uninstall-libgstplayerHEADERS:
+	@$(NORMAL_UNINSTALL)
+	@list='$(libgstplayer_HEADERS)'; test -n "$(libgstplayerdir)" || list=; \
+	files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+	dir='$(DESTDIR)$(libgstplayerdir)'; $(am__uninstall_files_from_dir)
 
 ID: $(am__tagged_files)
 	$(am__define_uniq_tagged_files); mkid -fID $$unique
@@ -1055,9 +1159,9 @@
 	done
 check-am: all-am
 check: check-am
-all-am: Makefile $(LTLIBRARIES) $(HEADERS)
+all-am: Makefile $(LTLIBRARIES) $(DATA) $(HEADERS)
 installdirs:
-	for dir in "$(DESTDIR)$(plugindir)"; do \
+	for dir in "$(DESTDIR)$(libdir)" "$(DESTDIR)$(girdir)" "$(DESTDIR)$(typelibsdir)" "$(DESTDIR)$(libgstplayerdir)"; do \
 	  test -z "$$dir" || $(MKDIR_P) "$$dir"; \
 	done
 install: install-am
@@ -1093,7 +1197,7 @@
 	@echo "it deletes files that may require special tools to rebuild."
 clean: clean-am
 
-clean-am: clean-generic clean-libtool clean-pluginLTLIBRARIES \
+clean-am: clean-generic clean-libLTLIBRARIES clean-libtool \
 	mostlyclean-am
 
 distclean: distclean-am
@@ -1114,13 +1218,14 @@
 
 info-am:
 
-install-data-am: install-pluginLTLIBRARIES
+install-data-am: install-girDATA install-libgstplayerHEADERS \
+	install-typelibsDATA
 
 install-dvi: install-dvi-am
 
 install-dvi-am:
 
-install-exec-am:
+install-exec-am: install-libLTLIBRARIES
 
 install-html: install-html-am
 
@@ -1160,32 +1265,64 @@
 
 ps-am:
 
-uninstall-am: uninstall-pluginLTLIBRARIES
+uninstall-am: uninstall-girDATA uninstall-libLTLIBRARIES \
+	uninstall-libgstplayerHEADERS uninstall-typelibsDATA
 
 .MAKE: install-am install-strip
 
 .PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \
-	clean-libtool clean-pluginLTLIBRARIES cscopelist-am ctags \
+	clean-libLTLIBRARIES clean-libtool cscopelist-am ctags \
 	ctags-am distclean distclean-compile distclean-generic \
 	distclean-libtool distclean-tags distdir dvi dvi-am html \
 	html-am info info-am install install-am install-data \
 	install-data-am install-dvi install-dvi-am install-exec \
-	install-exec-am install-html install-html-am install-info \
-	install-info-am install-man install-pdf install-pdf-am \
-	install-pluginLTLIBRARIES install-ps install-ps-am \
-	install-strip installcheck installcheck-am installdirs \
+	install-exec-am install-girDATA install-html install-html-am \
+	install-info install-info-am install-libLTLIBRARIES \
+	install-libgstplayerHEADERS install-man install-pdf \
+	install-pdf-am install-ps install-ps-am install-strip \
+	install-typelibsDATA installcheck installcheck-am installdirs \
 	maintainer-clean maintainer-clean-generic mostlyclean \
 	mostlyclean-compile mostlyclean-generic mostlyclean-libtool \
 	pdf pdf-am ps ps-am tags tags-am uninstall uninstall-am \
-	uninstall-pluginLTLIBRARIES
+	uninstall-girDATA uninstall-libLTLIBRARIES \
+	uninstall-libgstplayerHEADERS uninstall-typelibsDATA
 
 .PRECIOUS: Makefile
 
 
-org.freedesktop.gstreamer-@GST_API_VERSION@.default-elements.gschema.xml: org.freedesktop.gstreamer.default-elements.gschema.xml
-	cp org.freedesktop.gstreamer.default-elements.gschema.xml org.freedesktop.gstreamer-@GST_API_VERSION@.default-elements.gschema.xml
+@HAVE_INTROSPECTION_TRUE@GstPlayer-@GST_API_VERSION@.gir: $(INTROSPECTION_SCANNER) libgstplayer-@GST_API_VERSION@.la
+@HAVE_INTROSPECTION_TRUE@	$(AM_V_GEN)PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" \
+@HAVE_INTROSPECTION_TRUE@		$(INTROSPECTION_SCANNER) -v --namespace GstPlayer \
+@HAVE_INTROSPECTION_TRUE@		--nsversion=@GST_API_VERSION@ \
+@HAVE_INTROSPECTION_TRUE@		--warn-all \
+@HAVE_INTROSPECTION_TRUE@		--strip-prefix=Gst \
+@HAVE_INTROSPECTION_TRUE@		-I$(top_srcdir)/gst-libs \
+@HAVE_INTROSPECTION_TRUE@		-I$(top_builddir)/gst-libs \
+@HAVE_INTROSPECTION_TRUE@		--c-include "gst/player/player.h" \
+@HAVE_INTROSPECTION_TRUE@		--add-include-path=$(top_builddir)/gst-libs \
+@HAVE_INTROSPECTION_TRUE@		--add-include-path=`PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" $(PKG_CONFIG) --variable=girdir gstreamer-1.0` \
+@HAVE_INTROSPECTION_TRUE@		--library-path=$(top_builddir)/gst-libs \
+@HAVE_INTROSPECTION_TRUE@		--library=libgstplayer-@GST_API_VERSION@.la \
+@HAVE_INTROSPECTION_TRUE@		--include=Gst-@GST_API_VERSION@ \
+@HAVE_INTROSPECTION_TRUE@		--libtool="${LIBTOOL}" \
+@HAVE_INTROSPECTION_TRUE@		--pkg gstreamer-@GST_API_VERSION@ \
+@HAVE_INTROSPECTION_TRUE@		--pkg gstreamer-audio-@GST_API_VERSION@ \
+@HAVE_INTROSPECTION_TRUE@		--pkg gstreamer-video-@GST_API_VERSION@ \
+@HAVE_INTROSPECTION_TRUE@		--pkg gstreamer-tag-@GST_API_VERSION@ \
+@HAVE_INTROSPECTION_TRUE@		--pkg gstreamer-pbutils-@GST_API_VERSION@ \
+@HAVE_INTROSPECTION_TRUE@		--pkg-export gstreamer-player-@GST_API_VERSION@ \
+@HAVE_INTROSPECTION_TRUE@		--add-init-section="$(INTROSPECTION_INIT)" \
+@HAVE_INTROSPECTION_TRUE@		--output $@ \
+@HAVE_INTROSPECTION_TRUE@		$(gir_headers) \
+@HAVE_INTROSPECTION_TRUE@		$(gir_sources)
 
-@USE_GSETTINGS_TRUE@@GSETTINGS_RULES@
+@HAVE_INTROSPECTION_TRUE@%.typelib: %.gir $(INTROSPECTION_COMPILER)
+@HAVE_INTROSPECTION_TRUE@	$(AM_V_GEN)PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" \
+@HAVE_INTROSPECTION_TRUE@		$(INTROSPECTION_COMPILER) \
+@HAVE_INTROSPECTION_TRUE@		--includedir=$(srcdir)/gst-libs \
+@HAVE_INTROSPECTION_TRUE@		--includedir=$(builddir)/gst-libs \
+@HAVE_INTROSPECTION_TRUE@		--includedir=`PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" $(PKG_CONFIG) --variable=girdir gstreamer-1.0` \
+@HAVE_INTROSPECTION_TRUE@		$(INTROSPECTION_COMPILER_OPTS) $< -o $(@F)
 
 # Tell versions [3.59,3.63) of GNU make to not export all variables.
 # Otherwise a system limit (for SysV at least) may be exceeded.
diff --git a/gst-libs/gst/player/gstplayer-g-main-context-signal-dispatcher.c b/gst-libs/gst/player/gstplayer-g-main-context-signal-dispatcher.c
new file mode 100644
index 0000000..c1f57d0
--- /dev/null
+++ b/gst-libs/gst/player/gstplayer-g-main-context-signal-dispatcher.c
@@ -0,0 +1,212 @@
+/* GStreamer
+ *
+ * Copyright (C) 2014-2015 Sebastian Dröge <sebastian@centricular.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+/**
+ * SECTION:gstplayer-gmaincontextsignaldispatcher
+ * @short_description: Player GLib MainContext dispatcher
+ *
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include "gstplayer-g-main-context-signal-dispatcher.h"
+
+struct _GstPlayerGMainContextSignalDispatcher
+{
+  GObject parent;
+  GMainContext *application_context;
+};
+
+struct _GstPlayerGMainContextSignalDispatcherClass
+{
+  GObjectClass parent_class;
+};
+
+static void
+    gst_player_g_main_context_signal_dispatcher_interface_init
+    (GstPlayerSignalDispatcherInterface * iface);
+
+enum
+{
+  G_MAIN_CONTEXT_SIGNAL_DISPATCHER_PROP_0,
+  G_MAIN_CONTEXT_SIGNAL_DISPATCHER_PROP_APPLICATION_CONTEXT,
+  G_MAIN_CONTEXT_SIGNAL_DISPATCHER_PROP_LAST
+};
+
+G_DEFINE_TYPE_WITH_CODE (GstPlayerGMainContextSignalDispatcher,
+    gst_player_g_main_context_signal_dispatcher, G_TYPE_OBJECT,
+    G_IMPLEMENT_INTERFACE (GST_TYPE_PLAYER_SIGNAL_DISPATCHER,
+        gst_player_g_main_context_signal_dispatcher_interface_init));
+
+static GParamSpec
+    * g_main_context_signal_dispatcher_param_specs
+    [G_MAIN_CONTEXT_SIGNAL_DISPATCHER_PROP_LAST] = { NULL, };
+
+static void
+gst_player_g_main_context_signal_dispatcher_finalize (GObject * object)
+{
+  GstPlayerGMainContextSignalDispatcher *self =
+      GST_PLAYER_G_MAIN_CONTEXT_SIGNAL_DISPATCHER (object);
+
+  if (self->application_context)
+    g_main_context_unref (self->application_context);
+
+  G_OBJECT_CLASS
+      (gst_player_g_main_context_signal_dispatcher_parent_class)->finalize
+      (object);
+}
+
+static void
+gst_player_g_main_context_signal_dispatcher_set_property (GObject * object,
+    guint prop_id, const GValue * value, GParamSpec * pspec)
+{
+  GstPlayerGMainContextSignalDispatcher *self =
+      GST_PLAYER_G_MAIN_CONTEXT_SIGNAL_DISPATCHER (object);
+
+  switch (prop_id) {
+    case G_MAIN_CONTEXT_SIGNAL_DISPATCHER_PROP_APPLICATION_CONTEXT:
+      self->application_context = g_value_dup_boxed (value);
+      if (!self->application_context)
+        self->application_context = g_main_context_ref_thread_default ();
+      break;
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
+  }
+}
+
+static void
+gst_player_g_main_context_signal_dispatcher_get_property (GObject * object,
+    guint prop_id, GValue * value, GParamSpec * pspec)
+{
+  GstPlayerGMainContextSignalDispatcher *self =
+      GST_PLAYER_G_MAIN_CONTEXT_SIGNAL_DISPATCHER (object);
+
+  switch (prop_id) {
+    case G_MAIN_CONTEXT_SIGNAL_DISPATCHER_PROP_APPLICATION_CONTEXT:
+      g_value_set_boxed (value, self->application_context);
+      break;
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
+  }
+}
+
+static void
+    gst_player_g_main_context_signal_dispatcher_class_init
+    (GstPlayerGMainContextSignalDispatcherClass * klass)
+{
+  GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
+
+  gobject_class->finalize =
+      gst_player_g_main_context_signal_dispatcher_finalize;
+  gobject_class->set_property =
+      gst_player_g_main_context_signal_dispatcher_set_property;
+  gobject_class->get_property =
+      gst_player_g_main_context_signal_dispatcher_get_property;
+
+  g_main_context_signal_dispatcher_param_specs
+      [G_MAIN_CONTEXT_SIGNAL_DISPATCHER_PROP_APPLICATION_CONTEXT] =
+      g_param_spec_boxed ("application-context", "Application Context",
+      "Application GMainContext to dispatch signals to", G_TYPE_MAIN_CONTEXT,
+      G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS);
+
+  g_object_class_install_properties (gobject_class,
+      G_MAIN_CONTEXT_SIGNAL_DISPATCHER_PROP_LAST,
+      g_main_context_signal_dispatcher_param_specs);
+}
+
+static void
+    gst_player_g_main_context_signal_dispatcher_init
+    (G_GNUC_UNUSED GstPlayerGMainContextSignalDispatcher * self)
+{
+}
+
+typedef struct
+{
+  void (*emitter) (gpointer data);
+  gpointer data;
+  GDestroyNotify destroy;
+} GMainContextSignalDispatcherData;
+
+static gboolean
+g_main_context_signal_dispatcher_dispatch_gsourcefunc (gpointer user_data)
+{
+  GMainContextSignalDispatcherData *data = user_data;
+
+  data->emitter (data->data);
+
+  return G_SOURCE_REMOVE;
+}
+
+static void
+g_main_context_signal_dispatcher_dispatch_destroy (gpointer user_data)
+{
+  GMainContextSignalDispatcherData *data = user_data;
+
+  if (data->destroy)
+    data->destroy (data->data);
+  g_free (data);
+}
+
+static void
+gst_player_g_main_context_signal_dispatcher_dispatch (GstPlayerSignalDispatcher
+    * iface, G_GNUC_UNUSED GstPlayer * player, void (*emitter) (gpointer data),
+    gpointer data, GDestroyNotify destroy)
+{
+  GstPlayerGMainContextSignalDispatcher *self =
+      GST_PLAYER_G_MAIN_CONTEXT_SIGNAL_DISPATCHER (iface);
+  GMainContextSignalDispatcherData *gsourcefunc_data =
+      g_new (GMainContextSignalDispatcherData, 1);
+
+  gsourcefunc_data->emitter = emitter;
+  gsourcefunc_data->data = data;
+  gsourcefunc_data->destroy = destroy;
+
+  g_main_context_invoke_full (self->application_context,
+      G_PRIORITY_DEFAULT, g_main_context_signal_dispatcher_dispatch_gsourcefunc,
+      gsourcefunc_data, g_main_context_signal_dispatcher_dispatch_destroy);
+}
+
+static void
+    gst_player_g_main_context_signal_dispatcher_interface_init
+    (GstPlayerSignalDispatcherInterface * iface)
+{
+  iface->dispatch = gst_player_g_main_context_signal_dispatcher_dispatch;
+}
+
+/**
+ * gst_player_g_main_context_signal_dispatcher_new:
+ * @application_context: (allow-none): GMainContext to use or %NULL
+ *
+ * Creates a new GstPlayerSignalDispatcher that uses @application_context,
+ * or the thread default one if %NULL is used. See gst_player_new_full().
+ *
+ * Returns: (transfer full): the new GstPlayerSignalDispatcher
+ */
+GstPlayerSignalDispatcher *
+gst_player_g_main_context_signal_dispatcher_new (GMainContext *
+    application_context)
+{
+  return g_object_new (GST_TYPE_PLAYER_G_MAIN_CONTEXT_SIGNAL_DISPATCHER,
+      "application-context", application_context, NULL);
+}
diff --git a/gst-libs/gst/player/gstplayer-g-main-context-signal-dispatcher.h b/gst-libs/gst/player/gstplayer-g-main-context-signal-dispatcher.h
new file mode 100644
index 0000000..431032b
--- /dev/null
+++ b/gst-libs/gst/player/gstplayer-g-main-context-signal-dispatcher.h
@@ -0,0 +1,48 @@
+/* GStreamer
+ *
+ * Copyright (C) 2014-2015 Sebastian Dröge <sebastian@centricular.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifndef __GST_PLAYER_G_MAIN_CONTEXT_SIGNAL_DISPATCHER_H__
+#define __GST_PLAYER_G_MAIN_CONTEXT_SIGNAL_DISPATCHER_H__
+
+#include <gst/player/gstplayer-types.h>
+#include <gst/player/gstplayer-signal-dispatcher.h>
+
+G_BEGIN_DECLS
+
+typedef struct _GstPlayerGMainContextSignalDispatcher
+    GstPlayerGMainContextSignalDispatcher;
+typedef struct _GstPlayerGMainContextSignalDispatcherClass
+    GstPlayerGMainContextSignalDispatcherClass;
+
+#define GST_TYPE_PLAYER_G_MAIN_CONTEXT_SIGNAL_DISPATCHER             (gst_player_g_main_context_signal_dispatcher_get_type ())
+#define GST_IS_PLAYER_G_MAIN_CONTEXT_SIGNAL_DISPATCHER(obj)          (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GST_TYPE_PLAYER_G_MAIN_CONTEXT_SIGNAL_DISPATCHER))
+#define GST_IS_PLAYER_G_MAIN_CONTEXT_SIGNAL_DISPATCHER_CLASS(klass)  (G_TYPE_CHECK_CLASS_TYPE ((klass), GST_TYPE_PLAYER_G_MAIN_CONTEXT_SIGNAL_DISPATCHER))
+#define GST_PLAYER_G_MAIN_CONTEXT_SIGNAL_DISPATCHER_GET_CLASS(obj)   (G_TYPE_INSTANCE_GET_CLASS ((obj), GST_TYPE_PLAYER_G_MAIN_CONTEXT_SIGNAL_DISPATCHER, GstPlayerGMainContextSignalDispatcherClass))
+#define GST_PLAYER_G_MAIN_CONTEXT_SIGNAL_DISPATCHER(obj)             (G_TYPE_CHECK_INSTANCE_CAST ((obj), GST_TYPE_PLAYER_G_MAIN_CONTEXT_SIGNAL_DISPATCHER, GstPlayerGMainContextSignalDispatcher))
+#define GST_PLAYER_G_MAIN_CONTEXT_SIGNAL_DISPATCHER_CLASS(klass)     (G_TYPE_CHECK_CLASS_CAST ((klass), GST_TYPE_PLAYER_G_MAIN_CONTEXT_SIGNAL_DISPATCHER, GstPlayerGMainContextSignalDispatcherClass))
+#define GST_PLAYER_G_MAIN_CONTEXT_SIGNAL_DISPATCHER_CAST(obj)        ((GstPlayerGMainContextSignalDispatcher*)(obj))
+
+GType gst_player_g_main_context_signal_dispatcher_get_type (void);
+
+GstPlayerSignalDispatcher * gst_player_g_main_context_signal_dispatcher_new (GMainContext * application_context);
+
+G_END_DECLS
+
+#endif /* __GST_PLAYER_G_MAIN_CONTEXT_SIGNAL_DISPATCHER_H__ */
diff --git a/gst-libs/gst/player/gstplayer-media-info-private.h b/gst-libs/gst/player/gstplayer-media-info-private.h
new file mode 100644
index 0000000..b8757be
--- /dev/null
+++ b/gst-libs/gst/player/gstplayer-media-info-private.h
@@ -0,0 +1,125 @@
+/* GStreamer
+ *
+ * Copyright (C) 2015 Brijesh Singh <brijesh.ksingh@gmail.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#include "gstplayer-media-info.h"
+
+#ifndef __GST_PLAYER_MEDIA_INFO_PRIVATE_H__
+#define __GST_PLAYER_MEDIA_INFO_PRIVATE_H__
+
+struct _GstPlayerStreamInfo
+{
+  GObject parent;
+
+  gchar *codec;
+
+  GstCaps *caps;
+  gint stream_index;
+  GstTagList  *tags;
+};
+
+struct _GstPlayerStreamInfoClass
+{
+  GObjectClass parent_class;
+};
+
+struct _GstPlayerSubtitleInfo
+{
+  GstPlayerStreamInfo  parent;
+
+  gchar *language;
+};
+
+struct _GstPlayerSubtitleInfoClass
+{
+  GstPlayerStreamInfoClass parent_class;
+};
+
+struct _GstPlayerAudioInfo
+{
+  GstPlayerStreamInfo  parent;
+
+  gint channels;
+  gint sample_rate;
+
+  guint bitrate;
+  guint max_bitrate;
+
+  gchar *language;
+};
+
+struct _GstPlayerAudioInfoClass
+{
+  GstPlayerStreamInfoClass parent_class;
+};
+
+struct _GstPlayerVideoInfo
+{
+  GstPlayerStreamInfo  parent;
+
+  gint width;
+  gint height;
+  gint framerate_num;
+  gint framerate_denom;
+  gint par_num;
+  gint par_denom;
+
+  guint bitrate;
+  guint max_bitrate;
+};
+
+struct _GstPlayerVideoInfoClass
+{
+  GstPlayerStreamInfoClass parent_class;
+};
+
+struct _GstPlayerMediaInfo
+{
+  GObject parent;
+
+  gchar *uri;
+  gchar *title;
+  gchar *container;
+  gboolean seekable;
+  GstTagList *tags;
+  GstSample *image_sample;
+
+  GList *stream_list;
+  GList *audio_stream_list;
+  GList *video_stream_list;
+  GList *subtitle_stream_list;
+
+  GstClockTime  duration;
+};
+
+struct _GstPlayerMediaInfoClass
+{
+  GObjectClass parent_class;
+};
+
+G_GNUC_INTERNAL GstPlayerMediaInfo*   gst_player_media_info_new
+                                      (const gchar *uri);
+G_GNUC_INTERNAL GstPlayerMediaInfo*   gst_player_media_info_copy
+                                      (GstPlayerMediaInfo *ref);
+G_GNUC_INTERNAL GstPlayerStreamInfo*  gst_player_stream_info_new
+                                      (gint stream_index, GType type);
+G_GNUC_INTERNAL GstPlayerStreamInfo*  gst_player_stream_info_copy
+                                      (GstPlayerStreamInfo *ref);
+
+#endif /* __GST_PLAYER_MEDIA_INFO_PRIVATE_H__ */
diff --git a/gst-libs/gst/player/gstplayer-media-info.c b/gst-libs/gst/player/gstplayer-media-info.c
new file mode 100644
index 0000000..a42b611
--- /dev/null
+++ b/gst-libs/gst/player/gstplayer-media-info.c
@@ -0,0 +1,775 @@
+/* GStreamer
+ *
+ * Copyright (C) 2015 Brijesh Singh <brijesh.ksingh@gmail.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+/**
+ * SECTION:gstplayer-mediainfo
+ * @short_description: Player Media Information
+ *
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include "gstplayer-media-info.h"
+#include "gstplayer-media-info-private.h"
+
+/* Per-stream information */
+G_DEFINE_ABSTRACT_TYPE (GstPlayerStreamInfo, gst_player_stream_info,
+    G_TYPE_OBJECT);
+
+static void
+gst_player_stream_info_init (GstPlayerStreamInfo * sinfo)
+{
+  sinfo->stream_index = -1;
+}
+
+static void
+gst_player_stream_info_finalize (GObject * object)
+{
+  GstPlayerStreamInfo *sinfo = GST_PLAYER_STREAM_INFO (object);
+
+  g_free (sinfo->codec);
+
+  if (sinfo->caps)
+    gst_caps_unref (sinfo->caps);
+
+  if (sinfo->tags)
+    gst_tag_list_unref (sinfo->tags);
+
+  G_OBJECT_CLASS (gst_player_stream_info_parent_class)->finalize (object);
+}
+
+static void
+gst_player_stream_info_class_init (GstPlayerStreamInfoClass * klass)
+{
+  GObjectClass *gobject_class = (GObjectClass *) klass;
+
+  gobject_class->finalize = gst_player_stream_info_finalize;
+}
+
+/**
+ * gst_player_stream_info_get_index:
+ * @info: a #GstPlayerStreamInfo
+ *
+ * Function to get stream index from #GstPlayerStreamInfo instance.
+ *
+ * Returns: the stream index of this stream.
+ */
+gint
+gst_player_stream_info_get_index (const GstPlayerStreamInfo * info)
+{
+  g_return_val_if_fail (GST_IS_PLAYER_STREAM_INFO (info), -1);
+
+  return info->stream_index;
+}
+
+/**
+ * gst_player_stream_info_get_stream_type:
+ * @info: a #GstPlayerStreamInfo
+ *
+ * Function to return human readable name for the stream type
+ * of the given @info (ex: "audio", "video", "subtitle")
+ *
+ * Returns: a human readable name
+ */
+const gchar *
+gst_player_stream_info_get_stream_type (const GstPlayerStreamInfo * info)
+{
+  g_return_val_if_fail (GST_IS_PLAYER_STREAM_INFO (info), NULL);
+
+  if (GST_IS_PLAYER_VIDEO_INFO (info))
+    return "video";
+  else if (GST_IS_PLAYER_AUDIO_INFO (info))
+    return "audio";
+  else
+    return "subtitle";
+}
+
+/**
+ * gst_player_stream_info_get_tags:
+ * @info: a #GstPlayerStreamInfo
+ *
+ * Returns: (transfer none): the tags contained in this stream.
+ */
+GstTagList *
+gst_player_stream_info_get_tags (const GstPlayerStreamInfo * info)
+{
+  g_return_val_if_fail (GST_IS_PLAYER_STREAM_INFO (info), NULL);
+
+  return info->tags;
+}
+
+/**
+ * gst_player_stream_info_get_codec:
+ * @info: a #GstPlayerStreamInfo
+ *
+ * A string describing codec used in #GstPlayerStreamInfo.
+ *
+ * Returns: codec string or NULL on unknown.
+ */
+const gchar *
+gst_player_stream_info_get_codec (const GstPlayerStreamInfo * info)
+{
+  g_return_val_if_fail (GST_IS_PLAYER_STREAM_INFO (info), NULL);
+
+  return info->codec;
+}
+
+/**
+ * gst_player_stream_info_get_caps:
+ * @info: a #GstPlayerStreamInfo
+ *
+ * Returns: (transfer none): the #GstCaps of the stream.
+ */
+GstCaps *
+gst_player_stream_info_get_caps (const GstPlayerStreamInfo * info)
+{
+  g_return_val_if_fail (GST_IS_PLAYER_STREAM_INFO (info), NULL);
+
+  return info->caps;
+}
+
+/* Video information */
+G_DEFINE_TYPE (GstPlayerVideoInfo, gst_player_video_info,
+    GST_TYPE_PLAYER_STREAM_INFO);
+
+static void
+gst_player_video_info_init (GstPlayerVideoInfo * info)
+{
+  info->width = -1;
+  info->height = -1;
+  info->framerate_num = 0;
+  info->framerate_denom = 1;
+  info->par_num = 1;
+  info->par_denom = 1;
+}
+
+static void
+gst_player_video_info_class_init (G_GNUC_UNUSED GstPlayerVideoInfoClass * klass)
+{
+  /* nothing to do here */
+}
+
+/**
+ * gst_player_video_info_get_width:
+ * @info: a #GstPlayerVideoInfo
+ *
+ * Returns: the width of video in #GstPlayerVideoInfo.
+ */
+gint
+gst_player_video_info_get_width (const GstPlayerVideoInfo * info)
+{
+  g_return_val_if_fail (GST_IS_PLAYER_VIDEO_INFO (info), -1);
+
+  return info->width;
+}
+
+/**
+ * gst_player_video_info_get_height:
+ * @info: a #GstPlayerVideoInfo
+ *
+ * Returns: the height of video in #GstPlayerVideoInfo.
+ */
+gint
+gst_player_video_info_get_height (const GstPlayerVideoInfo * info)
+{
+  g_return_val_if_fail (GST_IS_PLAYER_VIDEO_INFO (info), -1);
+
+  return info->height;
+}
+
+/**
+ * gst_player_video_info_get_framerate_num:
+ * @info: a #GstPlayerVideoInfo
+ *
+ */
+void
+gst_player_video_info_get_framerate (const GstPlayerVideoInfo * info,
+    gint * fps_n, gint * fps_d)
+{
+  g_return_if_fail (GST_IS_PLAYER_VIDEO_INFO (info));
+
+  *fps_n = info->framerate_num;
+  *fps_d = info->framerate_denom;
+}
+
+/**
+ * gst_player_video_info_get_pixel_aspect_ratio:
+ * @info: a #GstPlayerVideoInfo
+ * @par_n: (out): numerator
+ * @par_d: (out): denominator
+ *
+ * Returns the pixel aspect ratio in @par_n and @par_d
+ *
+ */
+void
+gst_player_video_info_get_pixel_aspect_ratio (const GstPlayerVideoInfo * info,
+    guint * par_n, guint * par_d)
+{
+  g_return_if_fail (GST_IS_PLAYER_VIDEO_INFO (info));
+
+  *par_n = info->par_num;
+  *par_d = info->par_denom;
+}
+
+/**
+ * gst_player_video_info_get_bitrate:
+ * @info: a #GstPlayerVideoInfo
+ *
+ * Returns: the current bitrate of video in #GstPlayerVideoInfo.
+ */
+gint
+gst_player_video_info_get_bitrate (const GstPlayerVideoInfo * info)
+{
+  g_return_val_if_fail (GST_IS_PLAYER_VIDEO_INFO (info), -1);
+
+  return info->bitrate;
+}
+
+/**
+ * gst_player_video_info_get_max_bitrate:
+ * @info: a #GstPlayerVideoInfo
+ *
+ * Returns: the maximum bitrate of video in #GstPlayerVideoInfo.
+ */
+gint
+gst_player_video_info_get_max_bitrate (const GstPlayerVideoInfo * info)
+{
+  g_return_val_if_fail (GST_IS_PLAYER_VIDEO_INFO (info), -1);
+
+  return info->max_bitrate;
+}
+
+/* Audio information */
+G_DEFINE_TYPE (GstPlayerAudioInfo, gst_player_audio_info,
+    GST_TYPE_PLAYER_STREAM_INFO);
+
+static void
+gst_player_audio_info_init (GstPlayerAudioInfo * info)
+{
+  info->channels = 0;
+  info->sample_rate = 0;
+  info->bitrate = -1;
+  info->max_bitrate = -1;
+}
+
+static void
+gst_player_audio_info_finalize (GObject * object)
+{
+  GstPlayerAudioInfo *info = GST_PLAYER_AUDIO_INFO (object);
+
+  g_free (info->language);
+
+  G_OBJECT_CLASS (gst_player_audio_info_parent_class)->finalize (object);
+}
+
+static void
+gst_player_audio_info_class_init (GstPlayerAudioInfoClass * klass)
+{
+  GObjectClass *gobject_class = (GObjectClass *) klass;
+
+  gobject_class->finalize = gst_player_audio_info_finalize;
+}
+
+/**
+ * gst_player_audio_info_get_language:
+ * @info: a #GstPlayerAudioInfo
+ *
+ * Returns: the language of the stream, or NULL if unknown.
+ */
+const gchar *
+gst_player_audio_info_get_language (const GstPlayerAudioInfo * info)
+{
+  g_return_val_if_fail (GST_IS_PLAYER_AUDIO_INFO (info), NULL);
+
+  return info->language;
+}
+
+/**
+ * gst_player_audio_info_get_channels:
+ * @info: a #GstPlayerAudioInfo
+ *
+ * Returns: the number of audio channels in #GstPlayerAudioInfo.
+ */
+gint
+gst_player_audio_info_get_channels (const GstPlayerAudioInfo * info)
+{
+  g_return_val_if_fail (GST_IS_PLAYER_AUDIO_INFO (info), 0);
+
+  return info->channels;
+}
+
+/**
+ * gst_player_audio_info_get_sample_rate:
+ * @info: a #GstPlayerAudioInfo
+ *
+ * Returns: the audio sample rate in #GstPlayerAudioInfo.
+ */
+gint
+gst_player_audio_info_get_sample_rate (const GstPlayerAudioInfo * info)
+{
+  g_return_val_if_fail (GST_IS_PLAYER_AUDIO_INFO (info), 0);
+
+  return info->sample_rate;
+}
+
+/**
+ * gst_player_audio_info_get_bitrate:
+ * @info: a #GstPlayerAudioInfo
+ *
+ * Returns: the audio bitrate in #GstPlayerAudioInfo.
+ */
+gint
+gst_player_audio_info_get_bitrate (const GstPlayerAudioInfo * info)
+{
+  g_return_val_if_fail (GST_IS_PLAYER_AUDIO_INFO (info), -1);
+
+  return info->bitrate;
+}
+
+/**
+ * gst_player_audio_info_get_max_bitrate:
+ * @info: a #GstPlayerAudioInfo
+ *
+ * Returns: the audio maximum bitrate in #GstPlayerAudioInfo.
+ */
+gint
+gst_player_audio_info_get_max_bitrate (const GstPlayerAudioInfo * info)
+{
+  g_return_val_if_fail (GST_IS_PLAYER_AUDIO_INFO (info), -1);
+
+  return info->max_bitrate;
+}
+
+/* Subtitle information */
+G_DEFINE_TYPE (GstPlayerSubtitleInfo, gst_player_subtitle_info,
+    GST_TYPE_PLAYER_STREAM_INFO);
+
+static void
+gst_player_subtitle_info_init (G_GNUC_UNUSED GstPlayerSubtitleInfo * info)
+{
+  /* nothing to do */
+}
+
+static void
+gst_player_subtitle_info_finalize (GObject * object)
+{
+  GstPlayerSubtitleInfo *info = GST_PLAYER_SUBTITLE_INFO (object);
+
+  g_free (info->language);
+
+  G_OBJECT_CLASS (gst_player_subtitle_info_parent_class)->finalize (object);
+}
+
+static void
+gst_player_subtitle_info_class_init (GstPlayerSubtitleInfoClass * klass)
+{
+  GObjectClass *gobject_class = (GObjectClass *) klass;
+
+  gobject_class->finalize = gst_player_subtitle_info_finalize;
+}
+
+/**
+ * gst_player_subtitle_info_get_language:
+ * @info: a #GstPlayerSubtitleInfo
+ *
+ * Returns: the language of the stream, or NULL if unknown.
+ */
+const gchar *
+gst_player_subtitle_info_get_language (const GstPlayerSubtitleInfo * info)
+{
+  g_return_val_if_fail (GST_IS_PLAYER_SUBTITLE_INFO (info), NULL);
+
+  return info->language;
+}
+
+/* Global media information */
+G_DEFINE_TYPE (GstPlayerMediaInfo, gst_player_media_info, G_TYPE_OBJECT);
+
+static void
+gst_player_media_info_init (GstPlayerMediaInfo * info)
+{
+  info->duration = -1;
+  info->seekable = FALSE;
+}
+
+static void
+gst_player_media_info_finalize (GObject * object)
+{
+  GstPlayerMediaInfo *info = GST_PLAYER_MEDIA_INFO (object);
+
+  g_free (info->uri);
+
+  if (info->tags)
+    gst_tag_list_unref (info->tags);
+
+  g_free (info->title);
+
+  g_free (info->container);
+
+  if (info->image_sample)
+    gst_sample_unref (info->image_sample);
+
+  if (info->audio_stream_list)
+    g_list_free (info->audio_stream_list);
+
+  if (info->video_stream_list)
+    g_list_free (info->video_stream_list);
+
+  if (info->subtitle_stream_list)
+    g_list_free (info->subtitle_stream_list);
+
+  if (info->stream_list)
+    g_list_free_full (info->stream_list, g_object_unref);
+
+  G_OBJECT_CLASS (gst_player_media_info_parent_class)->finalize (object);
+}
+
+static void
+gst_player_media_info_class_init (GstPlayerMediaInfoClass * klass)
+{
+  GObjectClass *oclass = (GObjectClass *) klass;
+
+  oclass->finalize = gst_player_media_info_finalize;
+}
+
+static GstPlayerVideoInfo *
+gst_player_video_info_new (void)
+{
+  return g_object_new (GST_TYPE_PLAYER_VIDEO_INFO, NULL);
+}
+
+static GstPlayerAudioInfo *
+gst_player_audio_info_new (void)
+{
+  return g_object_new (GST_TYPE_PLAYER_AUDIO_INFO, NULL);
+}
+
+static GstPlayerSubtitleInfo *
+gst_player_subtitle_info_new (void)
+{
+  return g_object_new (GST_TYPE_PLAYER_SUBTITLE_INFO, NULL);
+}
+
+static GstPlayerStreamInfo *
+gst_player_video_info_copy (GstPlayerVideoInfo * ref)
+{
+  GstPlayerVideoInfo *ret;
+
+  ret = gst_player_video_info_new ();
+
+  ret->width = ref->width;
+  ret->height = ref->height;
+  ret->framerate_num = ref->framerate_num;
+  ret->framerate_denom = ref->framerate_denom;
+  ret->par_num = ref->par_num;
+  ret->par_denom = ref->par_denom;
+  ret->bitrate = ref->bitrate;
+  ret->max_bitrate = ref->max_bitrate;
+
+  return (GstPlayerStreamInfo *) ret;
+}
+
+static GstPlayerStreamInfo *
+gst_player_audio_info_copy (GstPlayerAudioInfo * ref)
+{
+  GstPlayerAudioInfo *ret;
+
+  ret = gst_player_audio_info_new ();
+
+  ret->sample_rate = ref->sample_rate;
+  ret->channels = ref->channels;
+  ret->bitrate = ref->bitrate;
+  ret->max_bitrate = ref->max_bitrate;
+
+  if (ref->language)
+    ret->language = g_strdup (ref->language);
+
+  return (GstPlayerStreamInfo *) ret;
+}
+
+static GstPlayerStreamInfo *
+gst_player_subtitle_info_copy (GstPlayerSubtitleInfo * ref)
+{
+  GstPlayerSubtitleInfo *ret;
+
+  ret = gst_player_subtitle_info_new ();
+  if (ref->language)
+    ret->language = g_strdup (ref->language);
+
+  return (GstPlayerStreamInfo *) ret;
+}
+
+GstPlayerStreamInfo *
+gst_player_stream_info_copy (GstPlayerStreamInfo * ref)
+{
+  GstPlayerStreamInfo *info = NULL;
+
+  if (!ref)
+    return NULL;
+
+  if (GST_IS_PLAYER_VIDEO_INFO (ref))
+    info = gst_player_video_info_copy ((GstPlayerVideoInfo *) ref);
+  else if (GST_IS_PLAYER_AUDIO_INFO (ref))
+    info = gst_player_audio_info_copy ((GstPlayerAudioInfo *) ref);
+  else
+    info = gst_player_subtitle_info_copy ((GstPlayerSubtitleInfo *) ref);
+
+  info->stream_index = ref->stream_index;
+  if (ref->tags)
+    info->tags = gst_tag_list_ref (ref->tags);
+  if (ref->caps)
+    info->caps = gst_caps_copy (ref->caps);
+  if (ref->codec)
+    info->codec = g_strdup (ref->codec);
+
+  return info;
+}
+
+GstPlayerMediaInfo *
+gst_player_media_info_copy (GstPlayerMediaInfo * ref)
+{
+  GList *l;
+  GstPlayerMediaInfo *info;
+
+  if (!ref)
+    return NULL;
+
+  info = gst_player_media_info_new (ref->uri);
+  info->duration = ref->duration;
+  info->seekable = ref->seekable;
+  if (ref->tags)
+    info->tags = gst_tag_list_ref (ref->tags);
+  if (ref->title)
+    info->title = g_strdup (ref->title);
+  if (ref->container)
+    info->container = g_strdup (ref->container);
+  if (ref->image_sample)
+    info->image_sample = gst_sample_ref (ref->image_sample);
+
+  for (l = ref->stream_list; l != NULL; l = l->next) {
+    GstPlayerStreamInfo *s;
+
+    s = gst_player_stream_info_copy ((GstPlayerStreamInfo *) l->data);
+    info->stream_list = g_list_append (info->stream_list, s);
+
+    if (GST_IS_PLAYER_AUDIO_INFO (s))
+      info->audio_stream_list = g_list_append (info->audio_stream_list, s);
+    else if (GST_IS_PLAYER_VIDEO_INFO (s))
+      info->video_stream_list = g_list_append (info->video_stream_list, s);
+    else
+      info->subtitle_stream_list =
+          g_list_append (info->subtitle_stream_list, s);
+  }
+
+  return info;
+}
+
+GstPlayerStreamInfo *
+gst_player_stream_info_new (gint stream_index, GType type)
+{
+  GstPlayerStreamInfo *info = NULL;
+
+  if (type == GST_TYPE_PLAYER_AUDIO_INFO)
+    info = (GstPlayerStreamInfo *) gst_player_audio_info_new ();
+  else if (type == GST_TYPE_PLAYER_VIDEO_INFO)
+    info = (GstPlayerStreamInfo *) gst_player_video_info_new ();
+  else
+    info = (GstPlayerStreamInfo *) gst_player_subtitle_info_new ();
+
+  info->stream_index = stream_index;
+
+  return info;
+}
+
+GstPlayerMediaInfo *
+gst_player_media_info_new (const gchar * uri)
+{
+  GstPlayerMediaInfo *info;
+
+  g_return_val_if_fail (uri != NULL, NULL);
+
+  info = g_object_new (GST_TYPE_PLAYER_MEDIA_INFO, NULL);
+  info->uri = g_strdup (uri);
+
+  return info;
+}
+
+/**
+ * gst_player_media_info_get_uri:
+ * @info: a #GstPlayerMediaInfo
+ *
+ * Returns: the URI associated with #GstPlayerMediaInfo.
+ */
+const gchar *
+gst_player_media_info_get_uri (const GstPlayerMediaInfo * info)
+{
+  g_return_val_if_fail (GST_IS_PLAYER_MEDIA_INFO (info), NULL);
+
+  return info->uri;
+}
+
+/**
+ * gst_player_media_info_is_seekable:
+ * @info: a #GstPlayerMediaInfo
+ *
+ * Returns: %TRUE if the media is seekable.
+ */
+gboolean
+gst_player_media_info_is_seekable (const GstPlayerMediaInfo * info)
+{
+  g_return_val_if_fail (GST_IS_PLAYER_MEDIA_INFO (info), FALSE);
+
+  return info->seekable;
+}
+
+/**
+ * gst_player_media_info_get_stream_list:
+ * @info: a #GstPlayerMediaInfo
+ *
+ * Returns: (transfer none) (element-type GstPlayerStreamInfo): A #GList of
+ * matching #GstPlayerStreamInfo.
+ */
+GList *
+gst_player_media_info_get_stream_list (const GstPlayerMediaInfo * info)
+{
+  g_return_val_if_fail (GST_IS_PLAYER_MEDIA_INFO (info), NULL);
+
+  return info->stream_list;
+}
+
+/**
+ * gst_player_get_video_streams:
+ * @info: a #GstPlayerMediaInfo
+ *
+ * Returns: (transfer none) (element-type GstPlayerVideoInfo): A #GList of
+ * matching #GstPlayerVideoInfo.
+ */
+GList *
+gst_player_get_video_streams (const GstPlayerMediaInfo * info)
+{
+  g_return_val_if_fail (GST_IS_PLAYER_MEDIA_INFO (info), NULL);
+
+  return info->video_stream_list;
+}
+
+/**
+ * gst_player_get_subtitle_streams:
+ * @info: a #GstPlayerMediaInfo
+ *
+ * Returns: (transfer none) (element-type GstPlayerSubtitleInfo): A #GList of
+ * matching #GstPlayerSubtitleInfo.
+ */
+GList *
+gst_player_get_subtitle_streams (const GstPlayerMediaInfo * info)
+{
+  g_return_val_if_fail (GST_IS_PLAYER_MEDIA_INFO (info), NULL);
+
+  return info->subtitle_stream_list;
+}
+
+/**
+ * gst_player_get_audio_streams:
+ * @info: a #GstPlayerMediaInfo
+ *
+ * Returns: (transfer none) (element-type GstPlayerAudioInfo): A #GList of
+ * matching #GstPlayerAudioInfo.
+ */
+GList *
+gst_player_get_audio_streams (const GstPlayerMediaInfo * info)
+{
+  g_return_val_if_fail (GST_IS_PLAYER_MEDIA_INFO (info), NULL);
+
+  return info->audio_stream_list;
+}
+
+/**
+ * gst_player_media_info_get_duration:
+ * @info: a #GstPlayerMediaInfo
+ *
+ * Returns: duration of the media.
+ */
+GstClockTime
+gst_player_media_info_get_duration (const GstPlayerMediaInfo * info)
+{
+  g_return_val_if_fail (GST_IS_PLAYER_MEDIA_INFO (info), -1);
+
+  return info->duration;
+}
+
+/**
+ * gst_player_media_info_get_tags:
+ * @info: a #GstPlayerMediaInfo
+ *
+ * Returns: (transfer none): the tags contained in media info.
+ */
+GstTagList *
+gst_player_media_info_get_tags (const GstPlayerMediaInfo * info)
+{
+  g_return_val_if_fail (GST_IS_PLAYER_MEDIA_INFO (info), NULL);
+
+  return info->tags;
+}
+
+/**
+ * gst_player_media_info_get_title:
+ * @info: a #GstPlayerMediaInfo
+ *
+ * Returns: the media title.
+ */
+const gchar *
+gst_player_media_info_get_title (const GstPlayerMediaInfo * info)
+{
+  g_return_val_if_fail (GST_IS_PLAYER_MEDIA_INFO (info), NULL);
+
+  return info->title;
+}
+
+/**
+ * gst_player_media_info_get_container_format:
+ * @info: a #GstPlayerMediaInfo
+ *
+ * Returns: the container format.
+ */
+const gchar *
+gst_player_media_info_get_container_format (const GstPlayerMediaInfo * info)
+{
+  g_return_val_if_fail (GST_IS_PLAYER_MEDIA_INFO (info), NULL);
+
+  return info->container;
+}
+
+/**
+ * gst_player_media_info_get_image_sample:
+ * @info: a #GstPlayerMediaInfo
+ *
+ * Function to get the image (or preview-image) stored in taglist.
+ * Application can use gst_sample_*_() API's to get caps, buffer etc.
+ *
+ * Returns: (transfer none): GstSample or NULL.
+ */
+GstSample *
+gst_player_media_info_get_image_sample (const GstPlayerMediaInfo * info)
+{
+  g_return_val_if_fail (GST_IS_PLAYER_MEDIA_INFO (info), NULL);
+
+  return info->image_sample;
+}
diff --git a/gst-libs/gst/player/gstplayer-media-info.h b/gst-libs/gst/player/gstplayer-media-info.h
new file mode 100644
index 0000000..a458b75
--- /dev/null
+++ b/gst-libs/gst/player/gstplayer-media-info.h
@@ -0,0 +1,192 @@
+/* GStreamer
+ *
+ * Copyright (C) 2015 Brijesh Singh <brijesh.ksingh@gmail.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifndef __GST_PLAYER_MEDIA_INFO_H__
+#define __GST_PLAYER_MEDIA_INFO_H__
+
+#include <gst/gst.h>
+
+G_BEGIN_DECLS
+
+#define GST_TYPE_PLAYER_STREAM_INFO \
+  (gst_player_stream_info_get_type ())
+#define GST_PLAYER_STREAM_INFO(obj) \
+  (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_PLAYER_STREAM_INFO,GstPlayerStreamInfo))
+#define GST_PLAYER_STREAM_INFO_CLASS(klass) \
+  (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_PLAYER_STREAM_INFO,GstPlayerStreamInfo))
+#define GST_IS_PLAYER_STREAM_INFO(obj) \
+  (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_PLAYER_STREAM_INFO))
+#define GST_IS_PLAYER_STREAM_INFO_CLASS(klass) \
+  (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_PLAYER_STREAM_INFO))
+
+/**
+ * GstPlayerStreamInfo:
+ *
+ * Base structure for information concering a media stream. Depending on
+ * the stream type, one can find more media-specific information in
+ * #GstPlayerVideoInfo, #GstPlayerAudioInfo, #GstPlayerSubtitleInfo.
+ */
+typedef struct _GstPlayerStreamInfo GstPlayerStreamInfo;
+typedef struct _GstPlayerStreamInfoClass GstPlayerStreamInfoClass;
+GType gst_player_stream_info_get_type (void);
+
+gint          gst_player_stream_info_get_index
+                (const GstPlayerStreamInfo *info);
+const gchar*  gst_player_stream_info_get_stream_type
+                (const GstPlayerStreamInfo *info);
+GstTagList*   gst_player_stream_info_get_tags
+                (const GstPlayerStreamInfo *info);
+GstCaps*      gst_player_stream_info_get_caps
+                (const GstPlayerStreamInfo *info);
+const gchar*  gst_player_stream_info_get_codec
+                (const GstPlayerStreamInfo *info);
+
+#define GST_TYPE_PLAYER_VIDEO_INFO \
+  (gst_player_video_info_get_type ())
+#define GST_PLAYER_VIDEO_INFO(obj) \
+  (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_PLAYER_VIDEO_INFO, GstPlayerVideoInfo))
+#define GST_PLAYER_VIDEO_INFO_CLASS(klass) \
+  (G_TYPE_CHECK_CLASS_CAST((obj),GST_TYPE_PLAYER_VIDEO_INFO, GstPlayerVideoInfoClass))
+#define GST_IS_PLAYER_VIDEO_INFO(obj) \
+  (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_PLAYER_VIDEO_INFO))
+#define GST_IS_PLAYER_VIDEO_INFO_CLASS(klass) \
+  (G_TYPE_CHECK_CLASS_TYPE((obj),GST_TYPE_PLAYER_VIDEO_INFO))
+
+/**
+ * GstPlayerVideoInfo:
+ *
+ * #GstPlayerStreamInfo specific to video streams.
+ */
+typedef struct _GstPlayerVideoInfo GstPlayerVideoInfo;
+typedef struct _GstPlayerVideoInfoClass GstPlayerVideoInfoClass;
+GType gst_player_video_info_get_type (void);
+
+gint          gst_player_video_info_get_bitrate
+                (const GstPlayerVideoInfo* info);
+gint          gst_player_video_info_get_max_bitrate
+                (const GstPlayerVideoInfo* info);
+gint          gst_player_video_info_get_width
+                (const GstPlayerVideoInfo* info);
+gint          gst_player_video_info_get_height
+                (const GstPlayerVideoInfo* info);
+void          gst_player_video_info_get_framerate
+                (const GstPlayerVideoInfo* info, gint *fps_n, gint *fps_d);
+void          gst_player_video_info_get_pixel_aspect_ratio
+                (const GstPlayerVideoInfo* info, guint *par_n, guint *par_d);
+
+#define GST_TYPE_PLAYER_AUDIO_INFO \
+  (gst_player_audio_info_get_type ())
+#define GST_PLAYER_AUDIO_INFO(obj) \
+  (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_PLAYER_AUDIO_INFO, GstPlayerAudioInfo))
+#define GST_PLAYER_AUDIO_INFO_CLASS(klass) \
+  (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_PLAYER_AUDIO_INFO, GstPlayerAudioInfoClass))
+#define GST_IS_PLAYER_AUDIO_INFO(obj) \
+  (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_PLAYER_AUDIO_INFO))
+#define GST_IS_PLAYER_AUDIO_INFO_CLASS(klass) \
+  (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_PLAYER_AUDIO_INFO))
+
+/**
+ * GstPlayerAudioInfo:
+ *
+ * #GstPlayerStreamInfo specific to audio streams.
+ */
+typedef struct _GstPlayerAudioInfo GstPlayerAudioInfo;
+typedef struct _GstPlayerAudioInfoClass GstPlayerAudioInfoClass;
+GType gst_player_audio_info_get_type (void);
+
+gint          gst_player_audio_info_get_channels
+                (const GstPlayerAudioInfo* info);
+gint          gst_player_audio_info_get_sample_rate
+                (const GstPlayerAudioInfo* info);
+gint          gst_player_audio_info_get_bitrate
+                (const GstPlayerAudioInfo* info);
+gint          gst_player_audio_info_get_max_bitrate
+                (const GstPlayerAudioInfo* info);
+const gchar*  gst_player_audio_info_get_language
+                (const GstPlayerAudioInfo* info);
+
+#define GST_TYPE_PLAYER_SUBTITLE_INFO \
+  (gst_player_subtitle_info_get_type ())
+#define GST_PLAYER_SUBTITLE_INFO(obj) \
+  (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_PLAYER_SUBTITLE_INFO, GstPlayerSubtitleInfo))
+#define GST_PLAYER_SUBTITLE_INFO_CLASS(klass) \
+  (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_PLAYER_SUBTITLE_INFO,GstPlayerSubtitleInfoClass))
+#define GST_IS_PLAYER_SUBTITLE_INFO(obj) \
+  (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_PLAYER_SUBTITLE_INFO))
+#define GST_IS_PLAYER_SUBTITLE_INFO_CLASS(klass) \
+  (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_PLAYER_SUBTITLE_INFO))
+
+/**
+ * GstPlayerSubtitleInfo:
+ *
+ * #GstPlayerStreamInfo specific to subtitle streams.
+ */
+typedef struct _GstPlayerSubtitleInfo GstPlayerSubtitleInfo;
+typedef struct _GstPlayerSubtitleInfoClass GstPlayerSubtitleInfoClass;
+GType gst_player_subtitle_info_get_type (void);
+
+const gchar*  gst_player_subtitle_info_get_language
+                (const GstPlayerSubtitleInfo* info);
+
+#define GST_TYPE_PLAYER_MEDIA_INFO \
+  (gst_player_media_info_get_type())
+#define GST_PLAYER_MEDIA_INFO(obj) \
+  (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_PLAYER_MEDIA_INFO,GstPlayerMediaInfo))
+#define GST_PLAYER_MEDIA_INFO_CLASS(klass) \
+  (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_PLAYER_MEDIA_INFO,GstPlayerMediaInfoClass))
+#define GST_IS_PLAYER_MEDIA_INFO(obj) \
+  (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_PLAYER_MEDIA_INFO))
+#define GST_IS_PLAYER_MEDIA_INFO_CLASS(klass) \
+  (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_PLAYER_MEDIA_INFO))
+
+/**
+ * GstPlayerMediaInfo:
+ *
+ * Structure containing the media information of a URI.
+ */
+typedef struct _GstPlayerMediaInfo GstPlayerMediaInfo;
+typedef struct _GstPlayerMediaInfoClass GstPlayerMediaInfoClass;
+GType gst_player_media_info_get_type (void);
+
+const gchar*  gst_player_media_info_get_uri
+                (const GstPlayerMediaInfo *info);
+gboolean      gst_player_media_info_is_seekable
+                (const GstPlayerMediaInfo *info);
+GstClockTime  gst_player_media_info_get_duration
+                (const GstPlayerMediaInfo *info);
+GList*        gst_player_media_info_get_stream_list
+                (const GstPlayerMediaInfo *info);
+GList*        gst_player_get_video_streams
+                (const GstPlayerMediaInfo *info);
+GList*        gst_player_get_audio_streams
+                (const GstPlayerMediaInfo *info);
+GList*        gst_player_get_subtitle_streams
+                (const GstPlayerMediaInfo *info);
+GstTagList*   gst_player_media_info_get_tags
+                (const GstPlayerMediaInfo *info);
+const gchar*  gst_player_media_info_get_title
+                (const GstPlayerMediaInfo *info);
+const gchar*  gst_player_media_info_get_container_format
+                (const GstPlayerMediaInfo *info);
+GstSample*    gst_player_media_info_get_image_sample
+                (const GstPlayerMediaInfo *info);
+G_END_DECLS
+
+#endif /* __GST_PLAYER_MEDIA_INFO_H */
diff --git a/gst-libs/gst/player/gstplayer-signal-dispatcher-private.h b/gst-libs/gst/player/gstplayer-signal-dispatcher-private.h
new file mode 100644
index 0000000..7399161
--- /dev/null
+++ b/gst-libs/gst/player/gstplayer-signal-dispatcher-private.h
@@ -0,0 +1,34 @@
+/* GStreamer
+ *
+ * Copyright (C) 2014-2015 Sebastian Dröge <sebastian@centricular.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifndef __GST_PLAYER_SIGNAL_DISPATCHER_PRIVATE_H__
+#define __GST_PLAYER_SIGNAL_DISPATCHER_PRIVATE_H__
+
+#include <gst/player/gstplayer-signal-dispatcher.h>
+
+G_BEGIN_DECLS
+
+G_GNUC_INTERNAL void gst_player_signal_dispatcher_dispatch (GstPlayerSignalDispatcher * self,
+    GstPlayer * player, GstPlayerSignalDispatcherFunc emitter, gpointer data,
+    GDestroyNotify destroy);
+
+G_END_DECLS
+
+#endif /* __GST_PLAYER_SIGNAL_DISPATCHER_PRIVATE_H__ */
diff --git a/gst-libs/gst/player/gstplayer-signal-dispatcher.c b/gst-libs/gst/player/gstplayer-signal-dispatcher.c
new file mode 100644
index 0000000..33e7b73
--- /dev/null
+++ b/gst-libs/gst/player/gstplayer-signal-dispatcher.c
@@ -0,0 +1,57 @@
+/* GStreamer
+ *
+ * Copyright (C) 2014-2015 Sebastian Dröge <sebastian@centricular.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include "gstplayer-signal-dispatcher.h"
+#include "gstplayer-signal-dispatcher-private.h"
+
+G_DEFINE_INTERFACE (GstPlayerSignalDispatcher, gst_player_signal_dispatcher,
+    G_TYPE_OBJECT);
+
+static void
+gst_player_signal_dispatcher_default_init (G_GNUC_UNUSED
+    GstPlayerSignalDispatcherInterface * iface)
+{
+
+}
+
+void
+gst_player_signal_dispatcher_dispatch (GstPlayerSignalDispatcher * self,
+    GstPlayer * player, GstPlayerSignalDispatcherFunc emitter, gpointer data,
+    GDestroyNotify destroy)
+{
+  GstPlayerSignalDispatcherInterface *iface;
+
+  if (!self) {
+    emitter (data);
+    if (destroy)
+      destroy (data);
+    return;
+  }
+
+  g_return_if_fail (GST_IS_PLAYER_SIGNAL_DISPATCHER (self));
+  iface = GST_PLAYER_SIGNAL_DISPATCHER_GET_INTERFACE (self);
+  g_return_if_fail (iface->dispatch != NULL);
+
+  iface->dispatch (self, player, emitter, data, destroy);
+}
diff --git a/gst-libs/gst/player/gstplayer-signal-dispatcher.h b/gst-libs/gst/player/gstplayer-signal-dispatcher.h
new file mode 100644
index 0000000..76338b2
--- /dev/null
+++ b/gst-libs/gst/player/gstplayer-signal-dispatcher.h
@@ -0,0 +1,53 @@
+/* GStreamer
+ *
+ * Copyright (C) 2014-2015 Sebastian Dröge <sebastian@centricular.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifndef __GST_PLAYER_SIGNAL_DISPATCHER_H__
+#define __GST_PLAYER_SIGNAL_DISPATCHER_H__
+
+#include <gst/gst.h>
+#include <gst/player/gstplayer-types.h>
+
+G_BEGIN_DECLS
+
+typedef struct _GstPlayerSignalDispatcher GstPlayerSignalDispatcher;
+typedef struct _GstPlayerSignalDispatcherInterface GstPlayerSignalDispatcherInterface;
+
+#define GST_TYPE_PLAYER_SIGNAL_DISPATCHER                (gst_player_signal_dispatcher_get_type ())
+#define GST_PLAYER_SIGNAL_DISPATCHER(obj)                (G_TYPE_CHECK_INSTANCE_CAST ((obj), GST_TYPE_PLAYER_SIGNAL_DISPATCHER, GstPlayerSignalDispatcher))
+#define GST_IS_PLAYER_SIGNAL_DISPATCHER(obj)             (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GST_TYPE_PLAYER_SIGNAL_DISPATCHER))
+#define GST_PLAYER_SIGNAL_DISPATCHER_GET_INTERFACE(inst) (G_TYPE_INSTANCE_GET_INTERFACE ((inst), GST_TYPE_PLAYER_SIGNAL_DISPATCHER, GstPlayerSignalDispatcherInterface))
+
+typedef void (*GstPlayerSignalDispatcherFunc) (gpointer data);
+
+struct _GstPlayerSignalDispatcherInterface {
+  GTypeInterface parent_iface;
+
+  void (*dispatch) (GstPlayerSignalDispatcher * self,
+                    GstPlayer * player,
+                    GstPlayerSignalDispatcherFunc emitter,
+                    gpointer data,
+                    GDestroyNotify destroy);
+};
+
+GType        gst_player_signal_dispatcher_get_type    (void);
+
+G_END_DECLS
+
+#endif /* __GST_PLAYER_SIGNAL_DISPATCHER_H__ */
diff --git a/ext/opus/gstopuscommon.h b/gst-libs/gst/player/gstplayer-types.h
similarity index 60%
copy from ext/opus/gstopuscommon.h
copy to gst-libs/gst/player/gstplayer-types.h
index 71771ae..f6627e6 100644
--- a/ext/opus/gstopuscommon.h
+++ b/gst-libs/gst/player/gstplayer-types.h
@@ -1,5 +1,6 @@
-/* GStreamer Opus Encoder
- * Copyright (C) 2009 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+/* GStreamer
+ *
+ * Copyright (C) 2015 Sebastian Dröge <sebastian@centricular.com>
  *
  * This library is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Library General Public
@@ -17,21 +18,18 @@
  * Boston, MA 02110-1301, USA.
  */
 
-
-#ifndef __GST_OPUS_COMMON_H__
-#define __GST_OPUS_COMMON_H__
+#ifndef __GST_PLAYER_TYPES_H__
+#define __GST_PLAYER_TYPES_H__
 
 #include <gst/gst.h>
-#include <gst/audio/audio.h>
 
 G_BEGIN_DECLS
 
-extern const GstAudioChannelPosition gst_opus_channel_positions[][8];
-extern const char *gst_opus_channel_names[];
-extern void gst_opus_common_log_channel_mapping_table (GstElement *element,
-    GstDebugCategory * category, const char *msg,
-    int n_channels, const guint8 *table);
+typedef struct _GstPlayer GstPlayer;
+typedef struct _GstPlayerClass GstPlayerClass;
 
 G_END_DECLS
 
-#endif /* __GST_OPUS_COMMON_H__ */
+#endif /* __GST_PLAYER_TYPES_H__ */
+
+
diff --git a/gst-libs/gst/player/gstplayer-video-overlay-video-renderer.c b/gst-libs/gst/player/gstplayer-video-overlay-video-renderer.c
new file mode 100644
index 0000000..72a35e0
--- /dev/null
+++ b/gst-libs/gst/player/gstplayer-video-overlay-video-renderer.c
@@ -0,0 +1,309 @@
+/* GStreamer
+ *
+ * Copyright (C) 2014-2015 Sebastian Dröge <sebastian@centricular.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+/**
+ * SECTION:gstplayer-videooverlayvideorenderer
+ * @short_description: Player Video Overlay Video Renderer
+ *
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include "gstplayer-video-overlay-video-renderer.h"
+#include "gstplayer.h"
+
+#include <gst/video/video.h>
+
+struct _GstPlayerVideoOverlayVideoRenderer
+{
+  GObject parent;
+
+  GstVideoOverlay *video_overlay;
+  gpointer window_handle;
+  gint x, y, width, height;
+};
+
+struct _GstPlayerVideoOverlayVideoRendererClass
+{
+  GObjectClass parent_class;
+};
+
+static void
+    gst_player_video_overlay_video_renderer_interface_init
+    (GstPlayerVideoRendererInterface * iface);
+
+enum
+{
+  VIDEO_OVERLAY_VIDEO_RENDERER_PROP_0,
+  VIDEO_OVERLAY_VIDEO_RENDERER_PROP_WINDOW_HANDLE,
+  VIDEO_OVERLAY_VIDEO_RENDERER_PROP_LAST
+};
+
+G_DEFINE_TYPE_WITH_CODE (GstPlayerVideoOverlayVideoRenderer,
+    gst_player_video_overlay_video_renderer, G_TYPE_OBJECT,
+    G_IMPLEMENT_INTERFACE (GST_TYPE_PLAYER_VIDEO_RENDERER,
+        gst_player_video_overlay_video_renderer_interface_init));
+
+static GParamSpec
+    * video_overlay_video_renderer_param_specs
+    [VIDEO_OVERLAY_VIDEO_RENDERER_PROP_LAST] = { NULL, };
+
+static void
+gst_player_video_overlay_video_renderer_set_property (GObject * object,
+    guint prop_id, const GValue * value, GParamSpec * pspec)
+{
+  GstPlayerVideoOverlayVideoRenderer *self =
+      GST_PLAYER_VIDEO_OVERLAY_VIDEO_RENDERER (object);
+
+  switch (prop_id) {
+    case VIDEO_OVERLAY_VIDEO_RENDERER_PROP_WINDOW_HANDLE:
+      self->window_handle = g_value_get_pointer (value);
+      if (self->video_overlay)
+        gst_video_overlay_set_window_handle (self->video_overlay,
+            (guintptr) self->window_handle);
+      break;
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
+  }
+}
+
+static void
+gst_player_video_overlay_video_renderer_get_property (GObject * object,
+    guint prop_id, GValue * value, GParamSpec * pspec)
+{
+  GstPlayerVideoOverlayVideoRenderer *self =
+      GST_PLAYER_VIDEO_OVERLAY_VIDEO_RENDERER (object);
+
+  switch (prop_id) {
+    case VIDEO_OVERLAY_VIDEO_RENDERER_PROP_WINDOW_HANDLE:
+      g_value_set_pointer (value, self->window_handle);
+      break;
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
+  }
+}
+
+static void
+gst_player_video_overlay_video_renderer_finalize (GObject * object)
+{
+  GstPlayerVideoOverlayVideoRenderer *self =
+      GST_PLAYER_VIDEO_OVERLAY_VIDEO_RENDERER (object);
+
+  if (self->video_overlay)
+    gst_object_unref (self->video_overlay);
+
+  G_OBJECT_CLASS
+      (gst_player_video_overlay_video_renderer_parent_class)->finalize (object);
+}
+
+static void
+    gst_player_video_overlay_video_renderer_class_init
+    (GstPlayerVideoOverlayVideoRendererClass * klass)
+{
+  GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
+
+  gobject_class->set_property =
+      gst_player_video_overlay_video_renderer_set_property;
+  gobject_class->get_property =
+      gst_player_video_overlay_video_renderer_get_property;
+  gobject_class->finalize = gst_player_video_overlay_video_renderer_finalize;
+
+  video_overlay_video_renderer_param_specs
+      [VIDEO_OVERLAY_VIDEO_RENDERER_PROP_WINDOW_HANDLE] =
+      g_param_spec_pointer ("window-handle", "Window Handle",
+      "Window handle to embed the video into",
+      G_PARAM_READWRITE | G_PARAM_CONSTRUCT | G_PARAM_STATIC_STRINGS);
+
+  g_object_class_install_properties (gobject_class,
+      VIDEO_OVERLAY_VIDEO_RENDERER_PROP_LAST,
+      video_overlay_video_renderer_param_specs);
+}
+
+static void
+    gst_player_video_overlay_video_renderer_init
+    (GstPlayerVideoOverlayVideoRenderer * self)
+{
+  self->x = self->y = self->width = self->height = -1;
+}
+
+static GstElement *gst_player_video_overlay_video_renderer_create_video_sink
+    (GstPlayerVideoRenderer * iface, GstPlayer * player)
+{
+  GstElement *video_overlay;
+  GstPlayerVideoOverlayVideoRenderer *self =
+      GST_PLAYER_VIDEO_OVERLAY_VIDEO_RENDERER (iface);
+
+  if (self->video_overlay)
+    gst_object_unref (self->video_overlay);
+
+  video_overlay = gst_player_get_pipeline (player);
+  g_return_val_if_fail (GST_IS_VIDEO_OVERLAY (video_overlay), NULL);
+
+  self->video_overlay = GST_VIDEO_OVERLAY (video_overlay);
+
+  gst_video_overlay_set_window_handle (self->video_overlay,
+      (guintptr) self->window_handle);
+  if (self->width != -1 || self->height != -1)
+    gst_video_overlay_set_render_rectangle (self->video_overlay, self->x,
+        self->y, self->width, self->height);
+
+  return NULL;
+}
+
+static void
+    gst_player_video_overlay_video_renderer_interface_init
+    (GstPlayerVideoRendererInterface * iface)
+{
+  iface->create_video_sink =
+      gst_player_video_overlay_video_renderer_create_video_sink;
+}
+
+/**
+ * gst_player_video_overlay_video_renderer_new:
+ * @window_handle: (allow-none): Window handle to use or %NULL
+ *
+ * Returns: (transfer full):
+ */
+GstPlayerVideoRenderer *
+gst_player_video_overlay_video_renderer_new (gpointer window_handle)
+{
+  return g_object_new (GST_TYPE_PLAYER_VIDEO_OVERLAY_VIDEO_RENDERER,
+      "window-handle", window_handle, NULL);
+}
+
+/**
+ * gst_player_video_overlay_video_renderer_set_window_handle:
+ * @self: #GstPlayerVideoRenderer instance
+ * @window_handle: handle referencing to the platform specific window
+ *
+ * Sets the platform specific window handle into which the video
+ * should be rendered
+ **/
+void gst_player_video_overlay_video_renderer_set_window_handle
+    (GstPlayerVideoOverlayVideoRenderer * self, gpointer window_handle)
+{
+  g_return_if_fail (GST_IS_PLAYER_VIDEO_OVERLAY_VIDEO_RENDERER (self));
+
+  g_object_set (self, "window-handle", window_handle, NULL);
+}
+
+/**
+ * gst_player_video_overlay_video_renderer_get_window_handle:
+ * @self: #GstPlayerVideoRenderer instance
+ *
+ * Returns: (transfer none): The currently set, platform specific window
+ * handle
+ */
+gpointer
+    gst_player_video_overlay_video_renderer_get_window_handle
+    (GstPlayerVideoOverlayVideoRenderer * self) {
+  gpointer window_handle;
+
+  g_return_val_if_fail (GST_IS_PLAYER_VIDEO_OVERLAY_VIDEO_RENDERER (self),
+      NULL);
+
+  g_object_get (self, "window-handle", &window_handle, NULL);
+
+  return window_handle;
+}
+
+/**
+ * gst_player_video_overlay_video_renderer_expose:
+ * @self: a #GstPlayerVideoOverlayVideoRenderer instance.
+ *
+ * Tell an overlay that it has been exposed. This will redraw the current frame
+ * in the drawable even if the pipeline is PAUSED.
+ */
+void gst_player_video_overlay_video_renderer_expose
+    (GstPlayerVideoOverlayVideoRenderer * self)
+{
+  g_return_if_fail (GST_IS_PLAYER_VIDEO_OVERLAY_VIDEO_RENDERER (self));
+
+  if (self->video_overlay)
+    gst_video_overlay_expose (self->video_overlay);
+}
+
+/**
+ * gst_player_video_overlay_video_renderer_set_render_rectangle:
+ * @self: a #GstPlayerVideoOverlayVideoRenderer instance
+ * @x: the horizontal offset of the render area inside the window
+ * @y: the vertical offset of the render area inside the window
+ * @width: the width of the render area inside the window
+ * @height: the height of the render area inside the window
+ *
+ * Configure a subregion as a video target within the window set by
+ * gst_player_video_overlay_video_renderer_set_window_handle(). If this is not
+ * used or not supported the video will fill the area of the window set as the
+ * overlay to 100%. By specifying the rectangle, the video can be overlayed to
+ * a specific region of that window only. After setting the new rectangle one
+ * should call gst_player_video_overlay_video_renderer_expose() to force a
+ * redraw. To unset the region pass -1 for the @width and @height parameters.
+ *
+ * This method is needed for non fullscreen video overlay in UI toolkits that
+ * do not support subwindows.
+ *
+ */
+void gst_player_video_overlay_video_renderer_set_render_rectangle
+    (GstPlayerVideoOverlayVideoRenderer * self, gint x, gint y, gint width,
+    gint height)
+{
+  g_return_if_fail (GST_IS_PLAYER_VIDEO_OVERLAY_VIDEO_RENDERER (self));
+
+  self->x = x;
+  self->y = y;
+  self->width = width;
+  self->height = height;
+
+  if (self->video_overlay)
+    gst_video_overlay_set_render_rectangle (self->video_overlay,
+        x, y, width, height);
+}
+
+/**
+ * gst_player_video_overlay_video_renderer_get_render_rectangle:
+ * @self: a #GstPlayerVideoOverlayVideoRenderer instance
+ * @x: (out) (allow-none): the horizontal offset of the render area inside the window
+ * @y: (out) (allow-none): the vertical offset of the render area inside the window
+ * @width: (out) (allow-none): the width of the render area inside the window
+ * @height: (out) (allow-none): the height of the render area inside the window
+ *
+ * Return the currently configured render rectangle. See gst_player_video_overlay_video_renderer_set_render_rectangle()
+ * for details.
+ *
+ */
+void gst_player_video_overlay_video_renderer_get_render_rectangle
+    (GstPlayerVideoOverlayVideoRenderer * self, gint * x, gint * y,
+    gint * width, gint * height)
+{
+  g_return_if_fail (GST_IS_PLAYER_VIDEO_OVERLAY_VIDEO_RENDERER (self));
+
+  if (x)
+    *x = self->x;
+  if (y)
+    *y = self->y;
+  if (width)
+    *width = self->width;
+  if (height)
+    *height = self->height;
+}
diff --git a/gst-libs/gst/player/gstplayer-video-overlay-video-renderer.h b/gst-libs/gst/player/gstplayer-video-overlay-video-renderer.h
new file mode 100644
index 0000000..be09113
--- /dev/null
+++ b/gst-libs/gst/player/gstplayer-video-overlay-video-renderer.h
@@ -0,0 +1,53 @@
+/* GStreamer
+ *
+ * Copyright (C) 2014-2015 Sebastian Dröge <sebastian@centricular.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifndef __GST_PLAYER_VIDEO_OVERLAY_VIDEO_RENDERER_H__
+#define __GST_PLAYER_VIDEO_OVERLAY_VIDEO_RENDERER_H__
+
+#include <gst/player/gstplayer-types.h>
+#include <gst/player/gstplayer-video-renderer.h>
+
+G_BEGIN_DECLS
+
+typedef struct _GstPlayerVideoOverlayVideoRenderer
+    GstPlayerVideoOverlayVideoRenderer;
+typedef struct _GstPlayerVideoOverlayVideoRendererClass
+    GstPlayerVideoOverlayVideoRendererClass;
+
+#define GST_TYPE_PLAYER_VIDEO_OVERLAY_VIDEO_RENDERER             (gst_player_video_overlay_video_renderer_get_type ())
+#define GST_IS_PLAYER_VIDEO_OVERLAY_VIDEO_RENDERER(obj)          (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GST_TYPE_PLAYER_VIDEO_OVERLAY_VIDEO_RENDERER))
+#define GST_IS_PLAYER_VIDEO_OVERLAY_VIDEO_RENDERER_CLASS(klass)  (G_TYPE_CHECK_CLASS_TYPE ((klass), GST_TYPE_PLAYER_VIDEO_OVERLAY_VIDEO_RENDERER))
+#define GST_PLAYER_VIDEO_OVERLAY_VIDEO_RENDERER_GET_CLASS(obj)   (G_TYPE_INSTANCE_GET_CLASS ((obj), GST_TYPE_PLAYER_VIDEO_OVERLAY_VIDEO_RENDERER, GstPlayerVideoOverlayVideoRendererClass))
+#define GST_PLAYER_VIDEO_OVERLAY_VIDEO_RENDERER(obj)             (G_TYPE_CHECK_INSTANCE_CAST ((obj), GST_TYPE_PLAYER_VIDEO_OVERLAY_VIDEO_RENDERER, GstPlayerVideoOverlayVideoRenderer))
+#define GST_PLAYER_VIDEO_OVERLAY_VIDEO_RENDERER_CLASS(klass)     (G_TYPE_CHECK_CLASS_CAST ((klass), GST_TYPE_PLAYER_VIDEO_OVERLAY_VIDEO_RENDERER, GstPlayerVideoOverlayVideoRendererClass))
+#define GST_PLAYER_VIDEO_OVERLAY_VIDEO_RENDERER_CAST(obj)        ((GstPlayerVideoOverlayVideoRenderer*)(obj))
+
+GType gst_player_video_overlay_video_renderer_get_type (void);
+GstPlayerVideoRenderer * gst_player_video_overlay_video_renderer_new (gpointer window_handle);
+void gst_player_video_overlay_video_renderer_set_window_handle (GstPlayerVideoOverlayVideoRenderer * self, gpointer window_handle);
+gpointer gst_player_video_overlay_video_renderer_get_window_handle (GstPlayerVideoOverlayVideoRenderer * self);
+
+void gst_player_video_overlay_video_renderer_expose (GstPlayerVideoOverlayVideoRenderer * self);
+void gst_player_video_overlay_video_renderer_set_render_rectangle (GstPlayerVideoOverlayVideoRenderer * self, gint x, gint y, gint width, gint height);
+void gst_player_video_overlay_video_renderer_get_render_rectangle (GstPlayerVideoOverlayVideoRenderer * self, gint *x, gint *y, gint *width, gint *height);
+
+G_END_DECLS
+
+#endif /* __GST_PLAYER_VIDEO_OVERLAY_VIDEO_RENDERER_H__ */
diff --git a/gst-libs/gst/player/gstplayer-video-renderer-private.h b/gst-libs/gst/player/gstplayer-video-renderer-private.h
new file mode 100644
index 0000000..6ecab15
--- /dev/null
+++ b/gst-libs/gst/player/gstplayer-video-renderer-private.h
@@ -0,0 +1,33 @@
+/* GStreamer
+ *
+ * Copyright (C) 2014-2015 Sebastian Dröge <sebastian@centricular.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifndef __GST_PLAYER_VIDEO_RENDERER_PRIVATE_H__
+#define __GST_PLAYER_VIDEO_RENDERER_PRIVATE_H__
+
+#include <gst/player/gstplayer-video-renderer.h>
+
+G_BEGIN_DECLS
+
+G_GNUC_INTERNAL GstElement * gst_player_video_renderer_create_video_sink (GstPlayerVideoRenderer *
+    self, GstPlayer * player);
+
+G_END_DECLS
+
+#endif /* __GST_PLAYER_VIDEO_RENDERER_PRIVATE_H__ */
diff --git a/gst-libs/gst/player/gstplayer-video-renderer.c b/gst-libs/gst/player/gstplayer-video-renderer.c
new file mode 100644
index 0000000..6faf6a8
--- /dev/null
+++ b/gst-libs/gst/player/gstplayer-video-renderer.c
@@ -0,0 +1,49 @@
+/* GStreamer
+ *
+ * Copyright (C) 2014-2015 Sebastian Dröge <sebastian@centricular.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include "gstplayer-video-renderer.h"
+#include "gstplayer-video-renderer-private.h"
+
+G_DEFINE_INTERFACE (GstPlayerVideoRenderer, gst_player_video_renderer,
+    G_TYPE_OBJECT);
+
+static void
+gst_player_video_renderer_default_init (G_GNUC_UNUSED
+    GstPlayerVideoRendererInterface * iface)
+{
+
+}
+
+GstElement *
+gst_player_video_renderer_create_video_sink (GstPlayerVideoRenderer * self,
+    GstPlayer * player)
+{
+  GstPlayerVideoRendererInterface *iface;
+
+  g_return_val_if_fail (GST_IS_PLAYER_VIDEO_RENDERER (self), NULL);
+  iface = GST_PLAYER_VIDEO_RENDERER_GET_INTERFACE (self);
+  g_return_val_if_fail (iface->create_video_sink != NULL, NULL);
+
+  return iface->create_video_sink (self, player);
+}
diff --git a/gst-libs/gst/player/gstplayer-video-renderer.h b/gst-libs/gst/player/gstplayer-video-renderer.h
new file mode 100644
index 0000000..b9df5c9
--- /dev/null
+++ b/gst-libs/gst/player/gstplayer-video-renderer.h
@@ -0,0 +1,47 @@
+/* GStreamer
+ *
+ * Copyright (C) 2014-2015 Sebastian Dröge <sebastian@centricular.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifndef __GST_PLAYER_VIDEO_RENDERER_H__
+#define __GST_PLAYER_VIDEO_RENDERER_H__
+
+#include <gst/gst.h>
+#include <gst/player/gstplayer-types.h>
+
+G_BEGIN_DECLS
+
+typedef struct _GstPlayerVideoRenderer GstPlayerVideoRenderer;
+typedef struct _GstPlayerVideoRendererInterface GstPlayerVideoRendererInterface;
+
+#define GST_TYPE_PLAYER_VIDEO_RENDERER                (gst_player_video_renderer_get_type ())
+#define GST_PLAYER_VIDEO_RENDERER(obj)                (G_TYPE_CHECK_INSTANCE_CAST ((obj), GST_TYPE_PLAYER_VIDEO_RENDERER, GstPlayerVideoRenderer))
+#define GST_IS_PLAYER_VIDEO_RENDERER(obj)             (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GST_TYPE_PLAYER_VIDEO_RENDERER))
+#define GST_PLAYER_VIDEO_RENDERER_GET_INTERFACE(inst) (G_TYPE_INSTANCE_GET_INTERFACE ((inst), GST_TYPE_PLAYER_VIDEO_RENDERER, GstPlayerVideoRendererInterface))
+
+struct _GstPlayerVideoRendererInterface {
+  GTypeInterface parent_iface;
+
+  GstElement * (*create_video_sink) (GstPlayerVideoRenderer * self, GstPlayer * player);
+};
+
+GType        gst_player_video_renderer_get_type       (void);
+
+G_END_DECLS
+
+#endif /* __GST_PLAYER_VIDEO_RENDERER_H__ */
diff --git a/gst-libs/gst/player/gstplayer-visualization.c b/gst-libs/gst/player/gstplayer-visualization.c
new file mode 100644
index 0000000..79976a7
--- /dev/null
+++ b/gst-libs/gst/player/gstplayer-visualization.c
@@ -0,0 +1,178 @@
+/* GStreamer
+ *
+ * Copyright (C) 2014-2015 Sebastian Dröge <sebastian@centricular.com>
+ * Copyright (C) 2015 Brijesh Singh <brijesh.ksingh@gmail.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+/**
+ * SECTION:gstplayer-visualization
+ * @short_description: Player Visualization
+ *
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include "gstplayer-visualization.h"
+
+#include <string.h>
+
+static GMutex vis_lock;
+static GQueue vis_list = G_QUEUE_INIT;
+static guint32 vis_cookie;
+
+G_DEFINE_BOXED_TYPE (GstPlayerVisualization, gst_player_visualization,
+    (GBoxedCopyFunc) gst_player_visualization_copy,
+    (GBoxedFreeFunc) gst_player_visualization_free);
+
+/**
+ * gst_player_visualization_free:
+ * @vis: #GstPlayerVisualization instance
+ *
+ * Frees a #GstPlayerVisualization.
+ */
+void
+gst_player_visualization_free (GstPlayerVisualization * vis)
+{
+  g_return_if_fail (vis != NULL);
+
+  g_free (vis->name);
+  g_free (vis->description);
+  g_free (vis);
+}
+
+/**
+ * gst_player_visualization_copy:
+ * @vis: #GstPlayerVisualization instance
+ *
+ * Makes a copy of the #GstPlayerVisualization. The result must be
+ * freed using gst_player_visualization_free().
+ *
+ * Returns: (transfer full): an allocated copy of @vis.
+ */
+GstPlayerVisualization *
+gst_player_visualization_copy (const GstPlayerVisualization * vis)
+{
+  GstPlayerVisualization *ret;
+
+  g_return_val_if_fail (vis != NULL, NULL);
+
+  ret = g_new0 (GstPlayerVisualization, 1);
+  ret->name = vis->name ? g_strdup (vis->name) : NULL;
+  ret->description = vis->description ? g_strdup (vis->description) : NULL;
+
+  return ret;
+}
+
+/**
+ * gst_player_visualizations_free:
+ * @viss: a %NULL terminated array of #GstPlayerVisualization to free
+ *
+ * Frees a %NULL terminated array of #GstPlayerVisualization.
+ */
+void
+gst_player_visualizations_free (GstPlayerVisualization ** viss)
+{
+  GstPlayerVisualization **p;
+
+  g_return_if_fail (viss != NULL);
+
+  p = viss;
+  while (*p) {
+    g_free ((*p)->name);
+    g_free ((*p)->description);
+    g_free (*p);
+    p++;
+  }
+  g_free (viss);
+}
+
+static void
+gst_player_update_visualization_list (void)
+{
+  GList *features;
+  GList *l;
+  guint32 cookie;
+  GstPlayerVisualization *vis;
+
+  g_mutex_lock (&vis_lock);
+
+  /* check if we need to update the list */
+  cookie = gst_registry_get_feature_list_cookie (gst_registry_get ());
+  if (vis_cookie == cookie) {
+    g_mutex_unlock (&vis_lock);
+    return;
+  }
+
+  /* if update is needed then first free the existing list */
+  while ((vis = g_queue_pop_head (&vis_list)))
+    gst_player_visualization_free (vis);
+
+  features = gst_registry_get_feature_list (gst_registry_get (),
+      GST_TYPE_ELEMENT_FACTORY);
+
+  for (l = features; l; l = l->next) {
+    GstPluginFeature *feature = l->data;
+    const gchar *klass;
+
+    klass = gst_element_factory_get_metadata (GST_ELEMENT_FACTORY (feature),
+        GST_ELEMENT_METADATA_KLASS);
+
+    if (strstr (klass, "Visualization")) {
+      vis = g_new0 (GstPlayerVisualization, 1);
+
+      vis->name = g_strdup (gst_plugin_feature_get_name (feature));
+      vis->description =
+          g_strdup (gst_element_factory_get_metadata (GST_ELEMENT_FACTORY
+              (feature), GST_ELEMENT_METADATA_DESCRIPTION));
+      g_queue_push_tail (&vis_list, vis);
+    }
+  }
+  gst_plugin_feature_list_free (features);
+
+  vis_cookie = cookie;
+
+  g_mutex_unlock (&vis_lock);
+}
+
+/**
+ * gst_player_visualizations_get:
+ *
+ * Returns: (transfer full) (array zero-terminated=1) (element-type GstPlayerVisualization):
+ *  a %NULL terminated array containing all available
+ *  visualizations. Use gst_player_visualizations_free() after
+ *  usage.
+ */
+GstPlayerVisualization **
+gst_player_visualizations_get (void)
+{
+  gint i = 0;
+  GList *l;
+  GstPlayerVisualization **ret;
+
+  gst_player_update_visualization_list ();
+
+  g_mutex_lock (&vis_lock);
+  ret = g_new0 (GstPlayerVisualization *, g_queue_get_length (&vis_list) + 1);
+  for (l = vis_list.head; l; l = l->next)
+    ret[i++] = gst_player_visualization_copy (l->data);
+  g_mutex_unlock (&vis_lock);
+
+  return ret;
+}
diff --git a/gst-libs/gst/player/gstplayer-visualization.h b/gst-libs/gst/player/gstplayer-visualization.h
new file mode 100644
index 0000000..7382773
--- /dev/null
+++ b/gst-libs/gst/player/gstplayer-visualization.h
@@ -0,0 +1,52 @@
+/* GStreamer
+ *
+ * Copyright (C) 2014-2015 Sebastian Dröge <sebastian@centricular.com>
+ * Copyright (C) 2015 Brijesh Singh <brijesh.ksingh@gmail.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifndef __GST_PLAYER_VISUALIZATION_H__
+#define __GST_PLAYER_VISUALIZATION_H__
+
+#include <gst/gst.h>
+
+G_BEGIN_DECLS
+
+typedef struct _GstPlayerVisualization GstPlayerVisualization;
+/**
+ * GstPlayerVisualization:
+ * @name: name of the visualization.
+ * @description: description of the visualization.
+ *
+ * A #GstPlayerVisualization descriptor.
+ */
+struct _GstPlayerVisualization {
+  gchar *name;
+  gchar *description;
+};
+
+GType                     gst_player_visualization_get_type (void);
+
+GstPlayerVisualization *  gst_player_visualization_copy  (const GstPlayerVisualization *vis);
+void                      gst_player_visualization_free  (GstPlayerVisualization *vis);
+
+GstPlayerVisualization ** gst_player_visualizations_get  (void);
+void                      gst_player_visualizations_free (GstPlayerVisualization **viss);
+
+G_END_DECLS
+
+#endif /* __GST_PLAYER_VISUALIZATION_H__ */
diff --git a/gst-libs/gst/player/gstplayer.c b/gst-libs/gst/player/gstplayer.c
new file mode 100644
index 0000000..d50080e
--- /dev/null
+++ b/gst-libs/gst/player/gstplayer.c
@@ -0,0 +1,3791 @@
+/* GStreamer
+ *
+ * Copyright (C) 2014-2015 Sebastian Dröge <sebastian@centricular.com>
+ * Copyright (C) 2015 Brijesh Singh <brijesh.ksingh@gmail.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+/**
+ * SECTION:gstplayer
+ * @short_description: Player
+ *
+ */
+
+/* TODO:
+ *
+ * - Equalizer
+ * - Gapless playback
+ * - Frame stepping
+ * - Subtitle font, connection speed
+ * - Deinterlacing
+ * - Buffering control (-> progressive downloading)
+ * - Playlist/queue object
+ * - Custom video sink (e.g. embed in GL scene)
+ *
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include "gstplayer.h"
+#include "gstplayer-signal-dispatcher-private.h"
+#include "gstplayer-video-renderer-private.h"
+#include "gstplayer-media-info-private.h"
+
+#include <gst/gst.h>
+#include <gst/video/video.h>
+#include <gst/video/colorbalance.h>
+#include <gst/tag/tag.h>
+#include <gst/pbutils/descriptions.h>
+
+#include <string.h>
+
+GST_DEBUG_CATEGORY_STATIC (gst_player_debug);
+#define GST_CAT_DEFAULT gst_player_debug
+
+#define DEFAULT_URI NULL
+#define DEFAULT_POSITION GST_CLOCK_TIME_NONE
+#define DEFAULT_DURATION GST_CLOCK_TIME_NONE
+#define DEFAULT_VOLUME 1.0
+#define DEFAULT_MUTE FALSE
+#define DEFAULT_RATE 1.0
+#define DEFAULT_POSITION_UPDATE_INTERVAL_MS 100
+
+GQuark
+gst_player_error_quark (void)
+{
+  static GQuark quark;
+
+  if (!quark)
+    quark = g_quark_from_static_string ("gst-player-error-quark");
+
+  return quark;
+}
+
+enum
+{
+  PROP_0,
+  PROP_VIDEO_RENDERER,
+  PROP_SIGNAL_DISPATCHER,
+  PROP_URI,
+  PROP_SUBURI,
+  PROP_POSITION,
+  PROP_DURATION,
+  PROP_MEDIA_INFO,
+  PROP_CURRENT_AUDIO_TRACK,
+  PROP_CURRENT_VIDEO_TRACK,
+  PROP_CURRENT_SUBTITLE_TRACK,
+  PROP_VOLUME,
+  PROP_MUTE,
+  PROP_RATE,
+  PROP_PIPELINE,
+  PROP_POSITION_UPDATE_INTERVAL,
+  PROP_LAST
+};
+
+enum
+{
+  SIGNAL_POSITION_UPDATED,
+  SIGNAL_DURATION_CHANGED,
+  SIGNAL_STATE_CHANGED,
+  SIGNAL_BUFFERING,
+  SIGNAL_END_OF_STREAM,
+  SIGNAL_ERROR,
+  SIGNAL_WARNING,
+  SIGNAL_VIDEO_DIMENSIONS_CHANGED,
+  SIGNAL_MEDIA_INFO_UPDATED,
+  SIGNAL_VOLUME_CHANGED,
+  SIGNAL_MUTE_CHANGED,
+  SIGNAL_SEEK_DONE,
+  SIGNAL_LAST
+};
+
+enum
+{
+  GST_PLAY_FLAG_VIDEO = (1 << 0),
+  GST_PLAY_FLAG_AUDIO = (1 << 1),
+  GST_PLAY_FLAG_SUBTITLE = (1 << 2),
+  GST_PLAY_FLAG_VIS = (1 << 3)
+};
+
+struct _GstPlayer
+{
+  GstObject parent;
+
+  GstPlayerVideoRenderer *video_renderer;
+  GstPlayerSignalDispatcher *signal_dispatcher;
+
+  gchar *uri;
+  gchar *suburi;
+
+  GThread *thread;
+  GMutex lock;
+  GCond cond;
+  GMainContext *context;
+  GMainLoop *loop;
+
+  GstElement *playbin;
+  GstBus *bus;
+  GstState target_state, current_state;
+  gboolean is_live, is_eos;
+  GSource *tick_source, *ready_timeout_source;
+
+  gdouble rate;
+  guint position_update_interval_ms;
+
+  GstPlayerState app_state;
+  gint buffering;
+
+  GstTagList *global_tags;
+  GstPlayerMediaInfo *media_info;
+
+  GstElement *current_vis_element;
+
+  /* Protected by lock */
+  gboolean seek_pending;        /* Only set from main context */
+  GstClockTime last_seek_time;  /* Only set from main context */
+  GSource *seek_source;
+  GstClockTime seek_position;
+};
+
+struct _GstPlayerClass
+{
+  GstObjectClass parent_class;
+};
+
+#define parent_class gst_player_parent_class
+G_DEFINE_TYPE (GstPlayer, gst_player, GST_TYPE_OBJECT);
+
+static guint signals[SIGNAL_LAST] = { 0, };
+static GParamSpec *param_specs[PROP_LAST] = { NULL, };
+
+static void gst_player_dispose (GObject * object);
+static void gst_player_finalize (GObject * object);
+static void gst_player_set_property (GObject * object, guint prop_id,
+    const GValue * value, GParamSpec * pspec);
+static void gst_player_get_property (GObject * object, guint prop_id,
+    GValue * value, GParamSpec * pspec);
+static void gst_player_constructed (GObject * object);
+
+static gpointer gst_player_main (gpointer data);
+
+static void gst_player_seek_internal_locked (GstPlayer * self);
+static gboolean gst_player_stop_internal (gpointer user_data);
+static gboolean gst_player_pause_internal (gpointer user_data);
+static gboolean gst_player_play_internal (gpointer user_data);
+static gboolean gst_player_set_rate_internal (gpointer user_data);
+static gboolean gst_player_set_position_update_interval_internal (gpointer
+    user_data);
+static void change_state (GstPlayer * self, GstPlayerState state);
+
+static GstPlayerMediaInfo *gst_player_media_info_create (GstPlayer * self);
+
+static void gst_player_streams_info_create (GstPlayer * self,
+    GstPlayerMediaInfo * media_info, const gchar * prop, GType type);
+static void gst_player_stream_info_update (GstPlayer * self,
+    GstPlayerStreamInfo * s);
+static void gst_player_stream_info_update_tags_and_caps (GstPlayer * self,
+    GstPlayerStreamInfo * s);
+static GstPlayerStreamInfo *gst_player_stream_info_find (GstPlayerMediaInfo *
+    media_info, GType type, gint stream_index);
+static GstPlayerStreamInfo *gst_player_stream_info_get_current (GstPlayer *
+    self, const gchar * prop, GType type);
+
+static void gst_player_video_info_update (GstPlayer * self,
+    GstPlayerStreamInfo * stream_info);
+static void gst_player_audio_info_update (GstPlayer * self,
+    GstPlayerStreamInfo * stream_info);
+static void gst_player_subtitle_info_update (GstPlayer * self,
+    GstPlayerStreamInfo * stream_info);
+
+static void emit_media_info_updated_signal (GstPlayer * self);
+
+static void *get_title (GstTagList * tags);
+static void *get_container_format (GstTagList * tags);
+static void *get_from_tags (GstPlayer * self, GstPlayerMediaInfo * media_info,
+    void *(*func) (GstTagList *));
+static void *get_cover_sample (GstTagList * tags);
+
+static void
+gst_player_init (GstPlayer * self)
+{
+  GST_TRACE_OBJECT (self, "Initializing");
+
+  self = gst_player_get_instance_private (self);
+
+  g_mutex_init (&self->lock);
+  g_cond_init (&self->cond);
+
+  self->context = g_main_context_new ();
+  self->loop = g_main_loop_new (self->context, FALSE);
+
+  self->position_update_interval_ms = DEFAULT_POSITION_UPDATE_INTERVAL_MS;
+  self->seek_pending = FALSE;
+  self->seek_position = GST_CLOCK_TIME_NONE;
+  self->last_seek_time = GST_CLOCK_TIME_NONE;
+
+  GST_TRACE_OBJECT (self, "Initialized");
+}
+
+static void
+gst_player_class_init (GstPlayerClass * klass)
+{
+  GObjectClass *gobject_class = (GObjectClass *) klass;
+
+  gobject_class->set_property = gst_player_set_property;
+  gobject_class->get_property = gst_player_get_property;
+  gobject_class->dispose = gst_player_dispose;
+  gobject_class->finalize = gst_player_finalize;
+  gobject_class->constructed = gst_player_constructed;
+
+  param_specs[PROP_VIDEO_RENDERER] =
+      g_param_spec_object ("video-renderer",
+      "Video Renderer", "Video renderer to use for rendering videos",
+      GST_TYPE_PLAYER_VIDEO_RENDERER,
+      G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS);
+
+  param_specs[PROP_SIGNAL_DISPATCHER] =
+      g_param_spec_object ("signal-dispatcher",
+      "Signal Dispatcher", "Dispatcher for the signals to e.g. event loops",
+      GST_TYPE_PLAYER_SIGNAL_DISPATCHER,
+      G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS);
+
+  param_specs[PROP_URI] = g_param_spec_string ("uri", "URI", "Current URI",
+      DEFAULT_URI, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
+
+  param_specs[PROP_SUBURI] = g_param_spec_string ("suburi", "Subtitle URI",
+      "Current Subtitle URI", NULL, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
+
+  param_specs[PROP_POSITION] =
+      g_param_spec_uint64 ("position", "Position", "Current Position",
+      0, G_MAXUINT64, DEFAULT_POSITION,
+      G_PARAM_READABLE | G_PARAM_STATIC_STRINGS);
+
+  param_specs[PROP_MEDIA_INFO] =
+      g_param_spec_object ("media-info", "Media Info",
+      "Current media information", GST_TYPE_PLAYER_MEDIA_INFO,
+      G_PARAM_READABLE | G_PARAM_STATIC_STRINGS);
+
+  param_specs[PROP_CURRENT_AUDIO_TRACK] =
+      g_param_spec_object ("current-audio-track", "Current Audio Track",
+      "Current audio track information", GST_TYPE_PLAYER_AUDIO_INFO,
+      G_PARAM_READABLE | G_PARAM_STATIC_STRINGS);
+
+  param_specs[PROP_CURRENT_VIDEO_TRACK] =
+      g_param_spec_object ("current-video-track", "Current Video Track",
+      "Current video track information", GST_TYPE_PLAYER_VIDEO_INFO,
+      G_PARAM_READABLE | G_PARAM_STATIC_STRINGS);
+
+  param_specs[PROP_CURRENT_SUBTITLE_TRACK] =
+      g_param_spec_object ("current-subtitle-track", "Current Subtitle Track",
+      "Current audio subtitle information", GST_TYPE_PLAYER_SUBTITLE_INFO,
+      G_PARAM_READABLE | G_PARAM_STATIC_STRINGS);
+
+  param_specs[PROP_DURATION] =
+      g_param_spec_uint64 ("duration", "Duration", "Duration",
+      0, G_MAXUINT64, DEFAULT_DURATION,
+      G_PARAM_READABLE | G_PARAM_STATIC_STRINGS);
+
+  param_specs[PROP_VOLUME] =
+      g_param_spec_double ("volume", "Volume", "Volume",
+      0, 10.0, DEFAULT_VOLUME, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
+
+  param_specs[PROP_MUTE] =
+      g_param_spec_boolean ("mute", "Mute", "Mute",
+      DEFAULT_MUTE, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
+
+  param_specs[PROP_PIPELINE] =
+      g_param_spec_object ("pipeline", "Pipeline",
+      "GStreamer pipeline that is used",
+      GST_TYPE_ELEMENT, G_PARAM_READABLE | G_PARAM_STATIC_STRINGS);
+
+  param_specs[PROP_RATE] =
+      g_param_spec_double ("rate", "rate", "Playback rate",
+      -64.0, 64.0, DEFAULT_RATE, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
+
+  param_specs[PROP_POSITION_UPDATE_INTERVAL] =
+      g_param_spec_uint ("position-update-interval", "Position update interval",
+      "Interval in milliseconds between two position-updated signals."
+      "Pass 0 to stop updating the position.",
+      0, 10000, DEFAULT_POSITION_UPDATE_INTERVAL_MS,
+      G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
+
+  g_object_class_install_properties (gobject_class, PROP_LAST, param_specs);
+
+  signals[SIGNAL_POSITION_UPDATED] =
+      g_signal_new ("position-updated", G_TYPE_FROM_CLASS (klass),
+      G_SIGNAL_RUN_LAST | G_SIGNAL_NO_RECURSE | G_SIGNAL_NO_HOOKS, 0, NULL,
+      NULL, NULL, G_TYPE_NONE, 1, GST_TYPE_CLOCK_TIME);
+
+  signals[SIGNAL_DURATION_CHANGED] =
+      g_signal_new ("duration-changed", G_TYPE_FROM_CLASS (klass),
+      G_SIGNAL_RUN_LAST | G_SIGNAL_NO_RECURSE | G_SIGNAL_NO_HOOKS, 0, NULL,
+      NULL, NULL, G_TYPE_NONE, 1, GST_TYPE_CLOCK_TIME);
+
+  signals[SIGNAL_STATE_CHANGED] =
+      g_signal_new ("state-changed", G_TYPE_FROM_CLASS (klass),
+      G_SIGNAL_RUN_LAST | G_SIGNAL_NO_RECURSE | G_SIGNAL_NO_HOOKS, 0, NULL,
+      NULL, NULL, G_TYPE_NONE, 1, GST_TYPE_PLAYER_STATE);
+
+  signals[SIGNAL_BUFFERING] =
+      g_signal_new ("buffering", G_TYPE_FROM_CLASS (klass),
+      G_SIGNAL_RUN_LAST | G_SIGNAL_NO_RECURSE | G_SIGNAL_NO_HOOKS, 0, NULL,
+      NULL, NULL, G_TYPE_NONE, 1, G_TYPE_INT);
+
+  signals[SIGNAL_END_OF_STREAM] =
+      g_signal_new ("end-of-stream", G_TYPE_FROM_CLASS (klass),
+      G_SIGNAL_RUN_LAST | G_SIGNAL_NO_RECURSE | G_SIGNAL_NO_HOOKS, 0, NULL,
+      NULL, NULL, G_TYPE_NONE, 0, G_TYPE_INVALID);
+
+  signals[SIGNAL_ERROR] =
+      g_signal_new ("error", G_TYPE_FROM_CLASS (klass),
+      G_SIGNAL_RUN_LAST | G_SIGNAL_NO_RECURSE | G_SIGNAL_NO_HOOKS, 0, NULL,
+      NULL, NULL, G_TYPE_NONE, 1, G_TYPE_ERROR);
+
+  signals[SIGNAL_VIDEO_DIMENSIONS_CHANGED] =
+      g_signal_new ("video-dimensions-changed", G_TYPE_FROM_CLASS (klass),
+      G_SIGNAL_RUN_LAST | G_SIGNAL_NO_RECURSE | G_SIGNAL_NO_HOOKS, 0, NULL,
+      NULL, NULL, G_TYPE_NONE, 2, G_TYPE_INT, G_TYPE_INT);
+
+  signals[SIGNAL_MEDIA_INFO_UPDATED] =
+      g_signal_new ("media-info-updated", G_TYPE_FROM_CLASS (klass),
+      G_SIGNAL_RUN_LAST | G_SIGNAL_NO_RECURSE | G_SIGNAL_NO_HOOKS, 0, NULL,
+      NULL, NULL, G_TYPE_NONE, 1, GST_TYPE_PLAYER_MEDIA_INFO);
+
+  signals[SIGNAL_VOLUME_CHANGED] =
+      g_signal_new ("volume-changed", G_TYPE_FROM_CLASS (klass),
+      G_SIGNAL_RUN_LAST | G_SIGNAL_NO_RECURSE | G_SIGNAL_NO_HOOKS, 0, NULL,
+      NULL, NULL, G_TYPE_NONE, 0, G_TYPE_INVALID);
+
+  signals[SIGNAL_MUTE_CHANGED] =
+      g_signal_new ("mute-changed", G_TYPE_FROM_CLASS (klass),
+      G_SIGNAL_RUN_LAST | G_SIGNAL_NO_RECURSE | G_SIGNAL_NO_HOOKS, 0, NULL,
+      NULL, NULL, G_TYPE_NONE, 0, G_TYPE_INVALID);
+
+  signals[SIGNAL_WARNING] =
+      g_signal_new ("warning", G_TYPE_FROM_CLASS (klass),
+      G_SIGNAL_RUN_LAST | G_SIGNAL_NO_RECURSE | G_SIGNAL_NO_HOOKS, 0, NULL,
+      NULL, NULL, G_TYPE_NONE, 1, G_TYPE_ERROR);
+
+  signals[SIGNAL_SEEK_DONE] =
+      g_signal_new ("seek-done", G_TYPE_FROM_CLASS (klass),
+      G_SIGNAL_RUN_LAST | G_SIGNAL_NO_RECURSE | G_SIGNAL_NO_HOOKS, 0, NULL,
+      NULL, NULL, G_TYPE_NONE, 1, GST_TYPE_CLOCK_TIME);
+}
+
+static void
+gst_player_dispose (GObject * object)
+{
+  GstPlayer *self = GST_PLAYER (object);
+
+  GST_TRACE_OBJECT (self, "Stopping main thread");
+
+  if (self->loop) {
+    g_main_loop_quit (self->loop);
+
+    g_thread_join (self->thread);
+    self->thread = NULL;
+
+    g_main_loop_unref (self->loop);
+    self->loop = NULL;
+
+    g_main_context_unref (self->context);
+    self->context = NULL;
+  }
+
+  G_OBJECT_CLASS (parent_class)->dispose (object);
+}
+
+static void
+gst_player_finalize (GObject * object)
+{
+  GstPlayer *self = GST_PLAYER (object);
+
+  GST_TRACE_OBJECT (self, "Finalizing");
+
+  g_free (self->uri);
+  g_free (self->suburi);
+  if (self->global_tags)
+    gst_tag_list_unref (self->global_tags);
+  if (self->video_renderer)
+    g_object_unref (self->video_renderer);
+  if (self->signal_dispatcher)
+    g_object_unref (self->signal_dispatcher);
+  if (self->current_vis_element)
+    gst_object_unref (self->current_vis_element);
+  g_mutex_clear (&self->lock);
+  g_cond_clear (&self->cond);
+
+  G_OBJECT_CLASS (parent_class)->finalize (object);
+}
+
+static void
+gst_player_constructed (GObject * object)
+{
+  GstPlayer *self = GST_PLAYER (object);
+
+  GST_TRACE_OBJECT (self, "Constructed");
+
+  g_mutex_lock (&self->lock);
+  self->thread = g_thread_new ("GstPlayer", gst_player_main, self);
+  while (!self->loop || !g_main_loop_is_running (self->loop))
+    g_cond_wait (&self->cond, &self->lock);
+  g_mutex_unlock (&self->lock);
+
+  G_OBJECT_CLASS (parent_class)->constructed (object);
+}
+
+static gboolean
+gst_player_set_uri_internal (gpointer user_data)
+{
+  GstPlayer *self = user_data;
+
+  gst_player_stop_internal (self);
+
+  g_mutex_lock (&self->lock);
+
+  GST_DEBUG_OBJECT (self, "Changing URI to '%s'", GST_STR_NULL (self->uri));
+
+  g_object_set (self->playbin, "uri", self->uri, NULL);
+
+  /* if have suburi from previous playback then free it */
+  if (self->suburi) {
+    g_free (self->suburi);
+    self->suburi = NULL;
+    g_object_set (self->playbin, "suburi", NULL, NULL);
+  }
+
+  g_mutex_unlock (&self->lock);
+
+  return G_SOURCE_REMOVE;
+}
+
+static gboolean
+gst_player_set_suburi_internal (gpointer user_data)
+{
+  GstPlayer *self = user_data;
+  GstClockTime position;
+  GstState target_state;
+
+  /* save the state and position */
+  target_state = self->target_state;
+  position = gst_player_get_position (self);
+
+  gst_player_stop_internal (self);
+  g_mutex_lock (&self->lock);
+
+  GST_DEBUG_OBJECT (self, "Changing SUBURI to '%s'",
+      GST_STR_NULL (self->suburi));
+
+  g_object_set (self->playbin, "suburi", self->suburi, NULL);
+  g_object_set (self->playbin, "uri", self->uri, NULL);
+
+  g_mutex_unlock (&self->lock);
+
+  /* restore state and position */
+  if (position != GST_CLOCK_TIME_NONE)
+    gst_player_seek (self, position);
+  if (target_state == GST_STATE_PAUSED)
+    gst_player_pause_internal (self);
+  else if (target_state == GST_STATE_PLAYING)
+    gst_player_play_internal (self);
+
+  return G_SOURCE_REMOVE;
+}
+
+static void
+gst_player_set_property (GObject * object, guint prop_id,
+    const GValue * value, GParamSpec * pspec)
+{
+  GstPlayer *self = GST_PLAYER (object);
+
+  switch (prop_id) {
+    case PROP_VIDEO_RENDERER:
+      self->video_renderer = g_value_dup_object (value);
+      break;
+    case PROP_SIGNAL_DISPATCHER:
+      self->signal_dispatcher = g_value_dup_object (value);
+      break;
+    case PROP_URI:{
+      g_mutex_lock (&self->lock);
+      g_free (self->uri);
+
+      self->uri = g_value_dup_string (value);
+      GST_DEBUG_OBJECT (self, "Set uri=%s", self->uri);
+      g_mutex_unlock (&self->lock);
+
+      g_main_context_invoke_full (self->context, G_PRIORITY_DEFAULT,
+          gst_player_set_uri_internal, self, NULL);
+      break;
+    }
+    case PROP_SUBURI:{
+      g_mutex_lock (&self->lock);
+      g_free (self->suburi);
+
+      self->suburi = g_value_dup_string (value);
+      GST_DEBUG_OBJECT (self, "Set suburi=%s", self->suburi);
+      g_mutex_unlock (&self->lock);
+
+      g_main_context_invoke_full (self->context, G_PRIORITY_DEFAULT,
+          gst_player_set_suburi_internal, self, NULL);
+      break;
+    }
+    case PROP_VOLUME:
+      GST_DEBUG_OBJECT (self, "Set volume=%lf", g_value_get_double (value));
+      g_object_set_property (G_OBJECT (self->playbin), "volume", value);
+      break;
+    case PROP_RATE:
+      g_mutex_lock (&self->lock);
+      self->rate = g_value_get_double (value);
+      GST_DEBUG_OBJECT (self, "Set rate=%lf", g_value_get_double (value));
+      g_mutex_unlock (&self->lock);
+
+      gst_player_set_rate_internal (self);
+      break;
+    case PROP_MUTE:
+      GST_DEBUG_OBJECT (self, "Set mute=%d", g_value_get_boolean (value));
+      g_object_set_property (G_OBJECT (self->playbin), "mute", value);
+      break;
+    case PROP_POSITION_UPDATE_INTERVAL:
+      g_mutex_lock (&self->lock);
+      self->position_update_interval_ms = g_value_get_uint (value);
+      GST_DEBUG_OBJECT (self, "Set position update interval=%u ms",
+          g_value_get_uint (value));
+      g_mutex_unlock (&self->lock);
+
+      gst_player_set_position_update_interval_internal (self);
+      break;
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
+  }
+}
+
+static void
+gst_player_get_property (GObject * object, guint prop_id,
+    GValue * value, GParamSpec * pspec)
+{
+  GstPlayer *self = GST_PLAYER (object);
+
+  switch (prop_id) {
+    case PROP_URI:
+      g_mutex_lock (&self->lock);
+      g_value_set_string (value, self->uri);
+      g_mutex_unlock (&self->lock);
+      break;
+    case PROP_SUBURI:
+      g_mutex_lock (&self->lock);
+      g_value_set_string (value, self->suburi);
+      g_mutex_unlock (&self->lock);
+      GST_DEBUG_OBJECT (self, "Returning has-suburi=%d",
+          g_value_get_boolean (value));
+      break;
+    case PROP_POSITION:{
+      gint64 position = 0;
+
+      gst_element_query_position (self->playbin, GST_FORMAT_TIME, &position);
+      g_value_set_uint64 (value, position);
+      GST_TRACE_OBJECT (self, "Returning position=%" GST_TIME_FORMAT,
+          GST_TIME_ARGS (g_value_get_uint64 (value)));
+      break;
+    }
+    case PROP_DURATION:{
+      gint64 duration = 0;
+
+      gst_element_query_duration (self->playbin, GST_FORMAT_TIME, &duration);
+      g_value_set_uint64 (value, duration);
+      GST_TRACE_OBJECT (self, "Returning duration=%" GST_TIME_FORMAT,
+          GST_TIME_ARGS (g_value_get_uint64 (value)));
+      break;
+    }
+    case PROP_MEDIA_INFO:{
+      GstPlayerMediaInfo *media_info = gst_player_get_media_info (self);
+      g_value_set_object (value, media_info);
+      g_object_unref (media_info);
+      break;
+    }
+    case PROP_CURRENT_AUDIO_TRACK:{
+      GstPlayerAudioInfo *audio_info =
+          gst_player_get_current_audio_track (self);
+      g_value_set_object (value, audio_info);
+      g_object_unref (audio_info);
+      break;
+    }
+    case PROP_CURRENT_VIDEO_TRACK:{
+      GstPlayerVideoInfo *video_info =
+          gst_player_get_current_video_track (self);
+      g_value_set_object (value, video_info);
+      g_object_unref (video_info);
+      break;
+    }
+    case PROP_CURRENT_SUBTITLE_TRACK:{
+      GstPlayerSubtitleInfo *subtitle_info =
+          gst_player_get_current_subtitle_track (self);
+      g_value_set_object (value, subtitle_info);
+      g_object_unref (subtitle_info);
+      break;
+    }
+    case PROP_VOLUME:
+      g_object_get_property (G_OBJECT (self->playbin), "volume", value);
+      GST_TRACE_OBJECT (self, "Returning volume=%lf",
+          g_value_get_double (value));
+      break;
+    case PROP_RATE:
+      g_mutex_lock (&self->lock);
+      g_value_set_double (value, gst_player_get_rate (self));
+      g_mutex_unlock (&self->lock);
+      break;
+    case PROP_MUTE:
+      g_object_get_property (G_OBJECT (self->playbin), "mute", value);
+      GST_TRACE_OBJECT (self, "Returning mute=%d", g_value_get_boolean (value));
+      break;
+    case PROP_PIPELINE:
+      g_value_set_object (value, self->playbin);
+      break;
+    case PROP_POSITION_UPDATE_INTERVAL:
+      g_mutex_lock (&self->lock);
+      g_value_set_uint (value, gst_player_get_position_update_interval (self));
+      g_mutex_unlock (&self->lock);
+      break;
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
+  }
+}
+
+static gboolean
+main_loop_running_cb (gpointer user_data)
+{
+  GstPlayer *self = GST_PLAYER (user_data);
+
+  GST_TRACE_OBJECT (self, "Main loop running now");
+
+  g_mutex_lock (&self->lock);
+  g_cond_signal (&self->cond);
+  g_mutex_unlock (&self->lock);
+
+  return G_SOURCE_REMOVE;
+}
+
+typedef struct
+{
+  GstPlayer *player;
+  GstPlayerState state;
+} StateChangedSignalData;
+
+static void
+state_changed_dispatch (gpointer user_data)
+{
+  StateChangedSignalData *data = user_data;
+
+  g_signal_emit (data->player, signals[SIGNAL_STATE_CHANGED], 0, data->state);
+}
+
+static void
+state_changed_signal_data_free (StateChangedSignalData * data)
+{
+  g_object_unref (data->player);
+  g_free (data);
+}
+
+static void
+change_state (GstPlayer * self, GstPlayerState state)
+{
+  if (state == self->app_state)
+    return;
+
+  GST_DEBUG_OBJECT (self, "Changing app state from %s to %s",
+      gst_player_state_get_name (self->app_state),
+      gst_player_state_get_name (state));
+  self->app_state = state;
+
+  if (g_signal_handler_find (self, G_SIGNAL_MATCH_ID,
+          signals[SIGNAL_STATE_CHANGED], 0, NULL, NULL, NULL) != 0) {
+    StateChangedSignalData *data = g_new (StateChangedSignalData, 1);
+
+    data->player = g_object_ref (self);
+    data->state = state;
+    gst_player_signal_dispatcher_dispatch (self->signal_dispatcher, self,
+        state_changed_dispatch, data,
+        (GDestroyNotify) state_changed_signal_data_free);
+  }
+}
+
+typedef struct
+{
+  GstPlayer *player;
+  GstClockTime position;
+} PositionUpdatedSignalData;
+
+static void
+position_updated_dispatch (gpointer user_data)
+{
+  PositionUpdatedSignalData *data = user_data;
+
+  if (data->player->target_state >= GST_STATE_PAUSED) {
+    g_signal_emit (data->player, signals[SIGNAL_POSITION_UPDATED], 0,
+        data->position);
+    g_object_notify_by_pspec (G_OBJECT (data->player),
+        param_specs[PROP_POSITION]);
+  }
+}
+
+static void
+position_updated_signal_data_free (PositionUpdatedSignalData * data)
+{
+  g_object_unref (data->player);
+  g_free (data);
+}
+
+static gboolean
+tick_cb (gpointer user_data)
+{
+  GstPlayer *self = GST_PLAYER (user_data);
+  gint64 position;
+
+  if (self->target_state >= GST_STATE_PAUSED
+      && gst_element_query_position (self->playbin, GST_FORMAT_TIME,
+          &position)) {
+    GST_LOG_OBJECT (self, "Position %" GST_TIME_FORMAT,
+        GST_TIME_ARGS (position));
+
+    if (g_signal_handler_find (self, G_SIGNAL_MATCH_ID,
+            signals[SIGNAL_POSITION_UPDATED], 0, NULL, NULL, NULL) != 0) {
+      PositionUpdatedSignalData *data = g_new (PositionUpdatedSignalData, 1);
+
+      data->player = g_object_ref (self);
+      data->position = position;
+      gst_player_signal_dispatcher_dispatch (self->signal_dispatcher, self,
+          position_updated_dispatch, data,
+          (GDestroyNotify) position_updated_signal_data_free);
+    }
+  }
+
+  return G_SOURCE_CONTINUE;
+}
+
+static void
+add_tick_source (GstPlayer * self)
+{
+  if (self->tick_source)
+    return;
+
+  if (!self->position_update_interval_ms)
+    return;
+
+  self->tick_source = g_timeout_source_new (self->position_update_interval_ms);
+  g_source_set_callback (self->tick_source, (GSourceFunc) tick_cb, self, NULL);
+  g_source_attach (self->tick_source, self->context);
+}
+
+static void
+remove_tick_source (GstPlayer * self)
+{
+  if (!self->tick_source)
+    return;
+
+  g_source_destroy (self->tick_source);
+  g_source_unref (self->tick_source);
+  self->tick_source = NULL;
+}
+
+static gboolean
+ready_timeout_cb (gpointer user_data)
+{
+  GstPlayer *self = user_data;
+
+  if (self->target_state <= GST_STATE_READY) {
+    GST_DEBUG_OBJECT (self, "Setting pipeline to NULL state");
+    self->target_state = GST_STATE_NULL;
+    self->current_state = GST_STATE_NULL;
+    gst_element_set_state (self->playbin, GST_STATE_NULL);
+  }
+
+  return G_SOURCE_REMOVE;
+}
+
+static void
+add_ready_timeout_source (GstPlayer * self)
+{
+  if (self->ready_timeout_source)
+    return;
+
+  self->ready_timeout_source = g_timeout_source_new_seconds (60);
+  g_source_set_callback (self->ready_timeout_source,
+      (GSourceFunc) ready_timeout_cb, self, NULL);
+  g_source_attach (self->ready_timeout_source, self->context);
+}
+
+static void
+remove_ready_timeout_source (GstPlayer * self)
+{
+  if (!self->ready_timeout_source)
+    return;
+
+  g_source_destroy (self->ready_timeout_source);
+  g_source_unref (self->ready_timeout_source);
+  self->ready_timeout_source = NULL;
+}
+
+typedef struct
+{
+  GstPlayer *player;
+  GError *err;
+} ErrorSignalData;
+
+static void
+error_dispatch (gpointer user_data)
+{
+  ErrorSignalData *data = user_data;
+
+  g_signal_emit (data->player, signals[SIGNAL_ERROR], 0, data->err);
+}
+
+static void
+free_error_signal_data (ErrorSignalData * data)
+{
+  g_object_unref (data->player);
+  g_clear_error (&data->err);
+  g_free (data);
+}
+
+static void
+emit_error (GstPlayer * self, GError * err)
+{
+  GST_ERROR_OBJECT (self, "Error: %s (%s, %d)", err->message,
+      g_quark_to_string (err->domain), err->code);
+
+  if (g_signal_handler_find (self, G_SIGNAL_MATCH_ID,
+          signals[SIGNAL_ERROR], 0, NULL, NULL, NULL) != 0) {
+    ErrorSignalData *data = g_new (ErrorSignalData, 1);
+
+    data->player = g_object_ref (self);
+    data->err = g_error_copy (err);
+    gst_player_signal_dispatcher_dispatch (self->signal_dispatcher, self,
+        error_dispatch, data, (GDestroyNotify) free_error_signal_data);
+  }
+
+  g_error_free (err);
+
+  remove_tick_source (self);
+  remove_ready_timeout_source (self);
+
+  self->target_state = GST_STATE_NULL;
+  self->current_state = GST_STATE_NULL;
+  self->is_live = FALSE;
+  self->is_eos = FALSE;
+  gst_element_set_state (self->playbin, GST_STATE_NULL);
+  change_state (self, GST_PLAYER_STATE_STOPPED);
+  self->buffering = 100;
+
+  g_mutex_lock (&self->lock);
+  if (self->media_info) {
+    g_object_unref (self->media_info);
+    self->media_info = NULL;
+  }
+
+  if (self->global_tags) {
+    gst_tag_list_unref (self->global_tags);
+    self->global_tags = NULL;
+  }
+
+  self->seek_pending = FALSE;
+  if (self->seek_source) {
+    g_source_destroy (self->seek_source);
+    g_source_unref (self->seek_source);
+    self->seek_source = NULL;
+  }
+  self->seek_position = GST_CLOCK_TIME_NONE;
+  self->last_seek_time = GST_CLOCK_TIME_NONE;
+  g_mutex_unlock (&self->lock);
+}
+
+static void
+dump_dot_file (GstPlayer * self, const gchar * name)
+{
+  gchar *full_name;
+
+  full_name = g_strdup_printf ("gst-player.%p.%s", self, name);
+
+  GST_DEBUG_BIN_TO_DOT_FILE_WITH_TS (GST_BIN (self->playbin),
+      GST_DEBUG_GRAPH_SHOW_ALL, full_name);
+
+  g_free (full_name);
+}
+
+typedef struct
+{
+  GstPlayer *player;
+  GError *err;
+} WarningSignalData;
+
+static void
+warning_dispatch (gpointer user_data)
+{
+  WarningSignalData *data = user_data;
+
+  g_signal_emit (data->player, signals[SIGNAL_WARNING], 0, data->err);
+}
+
+static void
+free_warning_signal_data (WarningSignalData * data)
+{
+  g_object_unref (data->player);
+  g_clear_error (&data->err);
+  g_free (data);
+}
+
+static void
+emit_warning (GstPlayer * self, GError * err)
+{
+  GST_ERROR_OBJECT (self, "Warning: %s (%s, %d)", err->message,
+      g_quark_to_string (err->domain), err->code);
+
+  if (g_signal_handler_find (self, G_SIGNAL_MATCH_ID,
+          signals[SIGNAL_WARNING], 0, NULL, NULL, NULL) != 0) {
+    WarningSignalData *data = g_new (WarningSignalData, 1);
+
+    data->player = g_object_ref (self);
+    data->err = g_error_copy (err);
+    gst_player_signal_dispatcher_dispatch (self->signal_dispatcher, self,
+        warning_dispatch, data, (GDestroyNotify) free_warning_signal_data);
+  }
+
+  g_error_free (err);
+}
+
+static void
+error_cb (G_GNUC_UNUSED GstBus * bus, GstMessage * msg, gpointer user_data)
+{
+  GstPlayer *self = GST_PLAYER (user_data);
+  GError *err, *player_err;
+  gchar *name, *debug, *message, *full_message;
+
+  dump_dot_file (self, "error");
+
+  gst_message_parse_error (msg, &err, &debug);
+
+  name = gst_object_get_path_string (msg->src);
+  message = gst_error_get_message (err->domain, err->code);
+
+  if (debug)
+    full_message =
+        g_strdup_printf ("Error from element %s: %s\n%s\n%s", name, message,
+        err->message, debug);
+  else
+    full_message =
+        g_strdup_printf ("Error from element %s: %s\n%s", name, message,
+        err->message);
+
+  GST_ERROR_OBJECT (self, "ERROR: from element %s: %s\n", name, err->message);
+  if (debug != NULL)
+    GST_ERROR_OBJECT (self, "Additional debug info:\n%s\n", debug);
+
+  player_err =
+      g_error_new_literal (GST_PLAYER_ERROR, GST_PLAYER_ERROR_FAILED,
+      full_message);
+  emit_error (self, player_err);
+
+  g_clear_error (&err);
+  g_free (debug);
+  g_free (name);
+  g_free (full_message);
+  g_free (message);
+}
+
+static void
+warning_cb (G_GNUC_UNUSED GstBus * bus, GstMessage * msg, gpointer user_data)
+{
+  GstPlayer *self = GST_PLAYER (user_data);
+  GError *err, *player_err;
+  gchar *name, *debug, *message, *full_message;
+
+  dump_dot_file (self, "warning");
+
+  gst_message_parse_warning (msg, &err, &debug);
+
+  name = gst_object_get_path_string (msg->src);
+  message = gst_error_get_message (err->domain, err->code);
+
+  if (debug)
+    full_message =
+        g_strdup_printf ("Warning from element %s: %s\n%s\n%s", name, message,
+        err->message, debug);
+  else
+    full_message =
+        g_strdup_printf ("Warning from element %s: %s\n%s", name, message,
+        err->message);
+
+  GST_WARNING_OBJECT (self, "WARNING: from element %s: %s\n", name,
+      err->message);
+  if (debug != NULL)
+    GST_WARNING_OBJECT (self, "Additional debug info:\n%s\n", debug);
+
+  player_err =
+      g_error_new_literal (GST_PLAYER_ERROR, GST_PLAYER_ERROR_FAILED,
+      full_message);
+  emit_warning (self, player_err);
+
+  g_clear_error (&err);
+  g_free (debug);
+  g_free (name);
+  g_free (full_message);
+  g_free (message);
+}
+
+static void
+eos_dispatch (gpointer user_data)
+{
+  g_signal_emit (user_data, signals[SIGNAL_END_OF_STREAM], 0);
+}
+
+static void
+eos_cb (G_GNUC_UNUSED GstBus * bus, G_GNUC_UNUSED GstMessage * msg,
+    gpointer user_data)
+{
+  GstPlayer *self = GST_PLAYER (user_data);
+
+  GST_DEBUG_OBJECT (self, "End of stream");
+
+  tick_cb (self);
+  remove_tick_source (self);
+
+  if (g_signal_handler_find (self, G_SIGNAL_MATCH_ID,
+          signals[SIGNAL_END_OF_STREAM], 0, NULL, NULL, NULL) != 0) {
+    gst_player_signal_dispatcher_dispatch (self->signal_dispatcher, self,
+        eos_dispatch, g_object_ref (self), (GDestroyNotify) g_object_unref);
+  }
+  change_state (self, GST_PLAYER_STATE_STOPPED);
+  self->buffering = 100;
+  self->is_eos = TRUE;
+}
+
+typedef struct
+{
+  GstPlayer *player;
+  gint percent;
+} BufferingSignalData;
+
+static void
+buffering_dispatch (gpointer user_data)
+{
+  BufferingSignalData *data = user_data;
+
+  if (data->player->target_state >= GST_STATE_PAUSED) {
+    g_signal_emit (data->player, signals[SIGNAL_BUFFERING], 0, data->percent);
+  }
+}
+
+static void
+buffering_signal_data_free (BufferingSignalData * data)
+{
+  g_object_unref (data->player);
+  g_free (data);
+}
+
+static void
+buffering_cb (G_GNUC_UNUSED GstBus * bus, GstMessage * msg, gpointer user_data)
+{
+  GstPlayer *self = GST_PLAYER (user_data);
+  gint percent;
+
+  if (self->target_state < GST_STATE_PAUSED)
+    return;
+  if (self->is_live)
+    return;
+
+  gst_message_parse_buffering (msg, &percent);
+  GST_LOG_OBJECT (self, "Buffering %d%%", percent);
+
+  if (percent < 100 && self->target_state >= GST_STATE_PAUSED) {
+    GstStateChangeReturn state_ret;
+
+    GST_DEBUG_OBJECT (self, "Waiting for buffering to finish");
+    state_ret = gst_element_set_state (self->playbin, GST_STATE_PAUSED);
+
+    if (state_ret == GST_STATE_CHANGE_FAILURE) {
+      emit_error (self, g_error_new (GST_PLAYER_ERROR, GST_PLAYER_ERROR_FAILED,
+              "Failed to handle buffering"));
+      return;
+    }
+
+    change_state (self, GST_PLAYER_STATE_BUFFERING);
+  }
+
+  if (self->buffering != percent) {
+    if (g_signal_handler_find (self, G_SIGNAL_MATCH_ID,
+            signals[SIGNAL_BUFFERING], 0, NULL, NULL, NULL) != 0) {
+      BufferingSignalData *data = g_new (BufferingSignalData, 1);
+
+      data->player = g_object_ref (self);
+      data->percent = percent;
+      gst_player_signal_dispatcher_dispatch (self->signal_dispatcher, self,
+          buffering_dispatch, data,
+          (GDestroyNotify) buffering_signal_data_free);
+    }
+
+    self->buffering = percent;
+  }
+
+
+  g_mutex_lock (&self->lock);
+  if (percent == 100 && (self->seek_position != GST_CLOCK_TIME_NONE ||
+          self->seek_pending)) {
+    g_mutex_unlock (&self->lock);
+
+    GST_DEBUG_OBJECT (self, "Buffering finished - seek pending");
+  } else if (percent == 100 && self->target_state >= GST_STATE_PLAYING
+      && self->current_state >= GST_STATE_PAUSED) {
+    GstStateChangeReturn state_ret;
+
+    g_mutex_unlock (&self->lock);
+
+    GST_DEBUG_OBJECT (self, "Buffering finished - going to PLAYING");
+    state_ret = gst_element_set_state (self->playbin, GST_STATE_PLAYING);
+    /* Application state change is happening when the state change happened */
+    if (state_ret == GST_STATE_CHANGE_FAILURE)
+      emit_error (self, g_error_new (GST_PLAYER_ERROR, GST_PLAYER_ERROR_FAILED,
+              "Failed to handle buffering"));
+  } else if (percent == 100 && self->target_state >= GST_STATE_PAUSED) {
+    g_mutex_unlock (&self->lock);
+
+    GST_DEBUG_OBJECT (self, "Buffering finished - staying PAUSED");
+    change_state (self, GST_PLAYER_STATE_PAUSED);
+  } else {
+    g_mutex_unlock (&self->lock);
+  }
+}
+
+static void
+clock_lost_cb (G_GNUC_UNUSED GstBus * bus, G_GNUC_UNUSED GstMessage * msg,
+    gpointer user_data)
+{
+  GstPlayer *self = GST_PLAYER (user_data);
+  GstStateChangeReturn state_ret;
+
+  GST_DEBUG_OBJECT (self, "Clock lost");
+  if (self->target_state >= GST_STATE_PLAYING) {
+    state_ret = gst_element_set_state (self->playbin, GST_STATE_PAUSED);
+    if (state_ret != GST_STATE_CHANGE_FAILURE)
+      state_ret = gst_element_set_state (self->playbin, GST_STATE_PLAYING);
+
+    if (state_ret == GST_STATE_CHANGE_FAILURE)
+      emit_error (self, g_error_new (GST_PLAYER_ERROR, GST_PLAYER_ERROR_FAILED,
+              "Failed to handle clock loss"));
+  }
+}
+
+typedef struct
+{
+  GstPlayer *player;
+  gint width, height;
+} VideoDimensionsChangedSignalData;
+
+static void
+video_dimensions_changed_dispatch (gpointer user_data)
+{
+  VideoDimensionsChangedSignalData *data = user_data;
+
+  if (data->player->target_state >= GST_STATE_PAUSED) {
+    g_signal_emit (data->player, signals[SIGNAL_VIDEO_DIMENSIONS_CHANGED], 0,
+        data->width, data->height);
+  }
+}
+
+static void
+video_dimensions_changed_signal_data_free (VideoDimensionsChangedSignalData *
+    data)
+{
+  g_object_unref (data->player);
+  g_free (data);
+}
+
+static void
+check_video_dimensions_changed (GstPlayer * self)
+{
+  GstElement *video_sink;
+  GstPad *video_sink_pad;
+  GstCaps *caps;
+  GstVideoInfo info;
+  gint width = 0, height = 0;
+
+  g_object_get (self->playbin, "video-sink", &video_sink, NULL);
+  if (!video_sink)
+    goto out;
+
+  video_sink_pad = gst_element_get_static_pad (video_sink, "sink");
+  if (!video_sink_pad) {
+    gst_object_unref (video_sink);
+    goto out;
+  }
+
+  caps = gst_pad_get_current_caps (video_sink_pad);
+
+  if (caps) {
+    if (gst_video_info_from_caps (&info, caps)) {
+      info.width = info.width * info.par_n / info.par_d;
+
+      GST_DEBUG_OBJECT (self, "Video dimensions changed: %dx%d", info.width,
+          info.height);
+      width = info.width;
+      height = info.height;
+    }
+
+    gst_caps_unref (caps);
+  }
+  gst_object_unref (video_sink_pad);
+  gst_object_unref (video_sink);
+
+out:
+  if (g_signal_handler_find (self, G_SIGNAL_MATCH_ID,
+          signals[SIGNAL_VIDEO_DIMENSIONS_CHANGED], 0, NULL, NULL, NULL) != 0) {
+    VideoDimensionsChangedSignalData *data =
+        g_new (VideoDimensionsChangedSignalData, 1);
+
+    data->player = g_object_ref (self);
+    data->width = width;
+    data->height = height;
+    gst_player_signal_dispatcher_dispatch (self->signal_dispatcher, self,
+        video_dimensions_changed_dispatch, data,
+        (GDestroyNotify) video_dimensions_changed_signal_data_free);
+  }
+}
+
+static void
+notify_caps_cb (G_GNUC_UNUSED GObject * object,
+    G_GNUC_UNUSED GParamSpec * pspec, gpointer user_data)
+{
+  GstPlayer *self = GST_PLAYER (user_data);
+
+  check_video_dimensions_changed (self);
+}
+
+typedef struct
+{
+  GstPlayer *player;
+  GstClockTime duration;
+} DurationChangedSignalData;
+
+static void
+duration_changed_dispatch (gpointer user_data)
+{
+  DurationChangedSignalData *data = user_data;
+
+  if (data->player->target_state >= GST_STATE_PAUSED) {
+    g_signal_emit (data->player, signals[SIGNAL_DURATION_CHANGED], 0,
+        data->duration);
+    g_object_notify_by_pspec (G_OBJECT (data->player),
+        param_specs[PROP_DURATION]);
+  }
+}
+
+static void
+duration_changed_signal_data_free (DurationChangedSignalData * data)
+{
+  g_object_unref (data->player);
+  g_free (data);
+}
+
+static void
+emit_duration_changed (GstPlayer * self, GstClockTime duration)
+{
+  GST_DEBUG_OBJECT (self, "Duration changed %" GST_TIME_FORMAT,
+      GST_TIME_ARGS (duration));
+
+  if (g_signal_handler_find (self, G_SIGNAL_MATCH_ID,
+          signals[SIGNAL_DURATION_CHANGED], 0, NULL, NULL, NULL) != 0) {
+    DurationChangedSignalData *data = g_new (DurationChangedSignalData, 1);
+
+    data->player = g_object_ref (self);
+    data->duration = duration;
+    gst_player_signal_dispatcher_dispatch (self->signal_dispatcher, self,
+        duration_changed_dispatch, data,
+        (GDestroyNotify) duration_changed_signal_data_free);
+  }
+}
+
+typedef struct
+{
+  GstPlayer *player;
+  GstClockTime position;
+} SeekDoneSignalData;
+
+static void
+seek_done_dispatch (gpointer user_data)
+{
+  SeekDoneSignalData *data = user_data;
+
+  g_signal_emit (data->player, signals[SIGNAL_SEEK_DONE], 0, data->position);
+}
+
+static void
+seek_done_signal_data_free (SeekDoneSignalData * data)
+{
+  g_object_unref (data->player);
+  g_free (data);
+}
+
+static void
+emit_seek_done (GstPlayer * self)
+{
+  if (g_signal_handler_find (self, G_SIGNAL_MATCH_ID,
+          signals[SIGNAL_SEEK_DONE], 0, NULL, NULL, NULL) != 0) {
+    SeekDoneSignalData *data = g_new (SeekDoneSignalData, 1);
+
+    data->player = g_object_ref (self);
+    data->position = gst_player_get_position (self);
+    gst_player_signal_dispatcher_dispatch (self->signal_dispatcher, self,
+        seek_done_dispatch, data, (GDestroyNotify) seek_done_signal_data_free);
+  }
+}
+
+static void
+state_changed_cb (G_GNUC_UNUSED GstBus * bus, GstMessage * msg,
+    gpointer user_data)
+{
+  GstPlayer *self = GST_PLAYER (user_data);
+  GstState old_state, new_state, pending_state;
+
+  gst_message_parse_state_changed (msg, &old_state, &new_state, &pending_state);
+
+  if (GST_MESSAGE_SRC (msg) == GST_OBJECT (self->playbin)) {
+    gchar *transition_name;
+
+    GST_DEBUG_OBJECT (self, "Changed state old: %s new: %s pending: %s",
+        gst_element_state_get_name (old_state),
+        gst_element_state_get_name (new_state),
+        gst_element_state_get_name (pending_state));
+
+    transition_name = g_strdup_printf ("%s_%s",
+        gst_element_state_get_name (old_state),
+        gst_element_state_get_name (new_state));
+    dump_dot_file (self, transition_name);
+    g_free (transition_name);
+
+    self->current_state = new_state;
+
+    if (old_state == GST_STATE_READY && new_state == GST_STATE_PAUSED
+        && pending_state == GST_STATE_VOID_PENDING) {
+      GstElement *video_sink;
+      GstPad *video_sink_pad;
+      gint64 duration = -1;
+
+      GST_DEBUG_OBJECT (self, "Initial PAUSED - pre-rolled");
+
+      g_mutex_lock (&self->lock);
+      if (self->media_info)
+        g_object_unref (self->media_info);
+      self->media_info = gst_player_media_info_create (self);
+      g_mutex_unlock (&self->lock);
+      emit_media_info_updated_signal (self);
+
+      g_object_get (self->playbin, "video-sink", &video_sink, NULL);
+
+      if (video_sink) {
+        video_sink_pad = gst_element_get_static_pad (video_sink, "sink");
+
+        if (video_sink_pad) {
+          g_signal_connect (video_sink_pad, "notify::caps",
+              (GCallback) notify_caps_cb, self);
+          gst_object_unref (video_sink_pad);
+        }
+        gst_object_unref (video_sink);
+      }
+
+      check_video_dimensions_changed (self);
+      gst_element_query_duration (self->playbin, GST_FORMAT_TIME, &duration);
+      emit_duration_changed (self, duration);
+    }
+
+    if (new_state == GST_STATE_PAUSED
+        && pending_state == GST_STATE_VOID_PENDING) {
+      remove_tick_source (self);
+
+      g_mutex_lock (&self->lock);
+      if (self->seek_pending) {
+        self->seek_pending = FALSE;
+
+        if (!self->media_info->seekable) {
+          GST_DEBUG_OBJECT (self, "Media is not seekable");
+          if (self->seek_source) {
+            g_source_destroy (self->seek_source);
+            g_source_unref (self->seek_source);
+            self->seek_source = NULL;
+          }
+          self->seek_position = GST_CLOCK_TIME_NONE;
+          self->last_seek_time = GST_CLOCK_TIME_NONE;
+        } else if (self->seek_source) {
+          GST_DEBUG_OBJECT (self, "Seek finished but new seek is pending");
+          gst_player_seek_internal_locked (self);
+        } else {
+          GST_DEBUG_OBJECT (self, "Seek finished");
+          emit_seek_done (self);
+        }
+      }
+
+      if (self->seek_position != GST_CLOCK_TIME_NONE) {
+        GST_DEBUG_OBJECT (self, "Seeking now that we reached PAUSED state");
+        gst_player_seek_internal_locked (self);
+        g_mutex_unlock (&self->lock);
+      } else if (!self->seek_pending) {
+        g_mutex_unlock (&self->lock);
+
+        tick_cb (self);
+
+        if (self->target_state >= GST_STATE_PLAYING && self->buffering == 100) {
+          GstStateChangeReturn state_ret;
+
+          state_ret = gst_element_set_state (self->playbin, GST_STATE_PLAYING);
+          if (state_ret == GST_STATE_CHANGE_FAILURE)
+            emit_error (self, g_error_new (GST_PLAYER_ERROR,
+                    GST_PLAYER_ERROR_FAILED, "Failed to play"));
+        } else if (self->buffering == 100) {
+          change_state (self, GST_PLAYER_STATE_PAUSED);
+        }
+      } else {
+        g_mutex_unlock (&self->lock);
+      }
+    } else if (new_state == GST_STATE_PLAYING
+        && pending_state == GST_STATE_VOID_PENDING) {
+
+      /* If no seek is currently pending, add the tick source. This can happen
+       * if we seeked already but the state-change message was still queued up */
+      if (!self->seek_pending) {
+        add_tick_source (self);
+        change_state (self, GST_PLAYER_STATE_PLAYING);
+      }
+    } else if (new_state == GST_STATE_READY && old_state > GST_STATE_READY) {
+      change_state (self, GST_PLAYER_STATE_STOPPED);
+    } else {
+      /* Otherwise we neither reached PLAYING nor PAUSED, so must
+       * wait for something to happen... i.e. are BUFFERING now */
+      change_state (self, GST_PLAYER_STATE_BUFFERING);
+    }
+  }
+}
+
+static void
+duration_changed_cb (G_GNUC_UNUSED GstBus * bus, G_GNUC_UNUSED GstMessage * msg,
+    gpointer user_data)
+{
+  GstPlayer *self = GST_PLAYER (user_data);
+  gint64 duration;
+
+  if (gst_element_query_duration (self->playbin, GST_FORMAT_TIME, &duration)) {
+    emit_duration_changed (self, duration);
+  }
+}
+
+static void
+latency_cb (G_GNUC_UNUSED GstBus * bus, G_GNUC_UNUSED GstMessage * msg,
+    gpointer user_data)
+{
+  GstPlayer *self = GST_PLAYER (user_data);
+
+  GST_DEBUG_OBJECT (self, "Latency changed");
+
+  gst_bin_recalculate_latency (GST_BIN (self->playbin));
+}
+
+static void
+request_state_cb (G_GNUC_UNUSED GstBus * bus, GstMessage * msg,
+    gpointer user_data)
+{
+  GstPlayer *self = GST_PLAYER (user_data);
+  GstState state;
+  GstStateChangeReturn state_ret;
+
+  gst_message_parse_request_state (msg, &state);
+
+  GST_DEBUG_OBJECT (self, "State %s requested",
+      gst_element_state_get_name (state));
+
+  self->target_state = state;
+  state_ret = gst_element_set_state (self->playbin, state);
+  if (state_ret == GST_STATE_CHANGE_FAILURE)
+    emit_error (self, g_error_new (GST_PLAYER_ERROR, GST_PLAYER_ERROR_FAILED,
+            "Failed to change to requested state %s",
+            gst_element_state_get_name (state)));
+}
+
+static void
+media_info_update (GstPlayer * self, GstPlayerMediaInfo * info)
+{
+  g_free (info->title);
+  info->title = get_from_tags (self, info, get_title);
+
+  g_free (info->container);
+  info->container = get_from_tags (self, info, get_container_format);
+
+  if (info->image_sample)
+    gst_sample_unref (info->image_sample);
+  info->image_sample = get_from_tags (self, info, get_cover_sample);
+
+  GST_DEBUG_OBJECT (self, "title: %s, container: %s "
+      "image_sample: %p", info->title, info->container, info->image_sample);
+}
+
+static void
+tags_cb (G_GNUC_UNUSED GstBus * bus, GstMessage * msg, gpointer user_data)
+{
+  GstPlayer *self = GST_PLAYER (user_data);
+  GstTagList *tags = NULL;
+
+  gst_message_parse_tag (msg, &tags);
+
+  /*
+   * NOTE: Inorder to get global tag you must apply the following patches in
+   * your gstreamer build.
+   *
+   * http://cgit.freedesktop.org/gstreamer/gst-plugins-good/commit/?id=9119fbd774093e3ae762c8652acd80d54b2c3b45
+   * http://cgit.freedesktop.org/gstreamer/gstreamer/commit/?id=18b058100940bdcaed86fa412e3582a02871f995
+   */
+  GST_DEBUG_OBJECT (self, "recieved %s tags",
+      gst_tag_list_get_scope (tags) ==
+      GST_TAG_SCOPE_GLOBAL ? "global" : "stream");
+
+  if (gst_tag_list_get_scope (tags) == GST_TAG_SCOPE_GLOBAL) {
+    g_mutex_lock (&self->lock);
+    if (self->media_info) {
+      if (self->media_info->tags)
+        gst_tag_list_unref (self->media_info->tags);
+      self->media_info->tags = gst_tag_list_ref (tags);
+      media_info_update (self, self->media_info);
+      g_mutex_unlock (&self->lock);
+      emit_media_info_updated_signal (self);
+    } else {
+      if (self->global_tags)
+        gst_tag_list_unref (self->global_tags);
+      self->global_tags = gst_tag_list_ref (tags);
+      g_mutex_unlock (&self->lock);
+    }
+  }
+
+  gst_tag_list_unref (tags);
+}
+
+static void
+element_cb (G_GNUC_UNUSED GstBus * bus, GstMessage * msg, gpointer user_data)
+{
+  GstPlayer *self = GST_PLAYER (user_data);
+  const GstStructure *s;
+
+  s = gst_message_get_structure (msg);
+  if (gst_structure_has_name (s, "redirect")) {
+    const gchar *new_location;
+
+    new_location = gst_structure_get_string (s, "new-location");
+    if (!new_location) {
+      const GValue *locations_list, *location_val;
+      guint i, size;
+
+      locations_list = gst_structure_get_value (s, "locations");
+      size = gst_value_list_get_size (locations_list);
+      for (i = 0; i < size; ++i) {
+        const GstStructure *location_s;
+
+        location_val = gst_value_list_get_value (locations_list, i);
+        if (!GST_VALUE_HOLDS_STRUCTURE (location_val))
+          continue;
+
+        location_s = (const GstStructure *) g_value_get_boxed (location_val);
+        if (!gst_structure_has_name (location_s, "redirect"))
+          continue;
+
+        new_location = gst_structure_get_string (location_s, "new-location");
+        if (new_location)
+          break;
+      }
+    }
+
+    if (new_location) {
+      GstState target_state;
+
+      GST_DEBUG_OBJECT (self, "Redirect to '%s'", new_location);
+
+      /* Remember target state and restore after setting the URI */
+      target_state = self->target_state;
+
+      g_mutex_lock (&self->lock);
+      g_free (self->uri);
+
+      self->uri = g_strdup (new_location);
+      g_mutex_unlock (&self->lock);
+
+      gst_player_set_uri_internal (self);
+
+      if (target_state == GST_STATE_PAUSED)
+        gst_player_pause_internal (self);
+      else if (target_state == GST_STATE_PLAYING)
+        gst_player_play_internal (self);
+    }
+  }
+}
+
+static void
+player_set_flag (GstPlayer * self, gint pos)
+{
+  gint flags;
+
+  g_object_get (self->playbin, "flags", &flags, NULL);
+  flags |= pos;
+  g_object_set (self->playbin, "flags", flags, NULL);
+
+  GST_DEBUG_OBJECT (self, "setting flags=%#x", flags);
+}
+
+static void
+player_clear_flag (GstPlayer * self, gint pos)
+{
+  gint flags;
+
+  g_object_get (self->playbin, "flags", &flags, NULL);
+  flags &= ~pos;
+  g_object_set (self->playbin, "flags", flags, NULL);
+
+  GST_DEBUG_OBJECT (self, "setting flags=%#x", flags);
+}
+
+typedef struct
+{
+  GstPlayer *player;
+  GstPlayerMediaInfo *info;
+} MediaInfoUpdatedSignalData;
+
+static void
+media_info_updated_dispatch (gpointer user_data)
+{
+  MediaInfoUpdatedSignalData *data = user_data;
+
+  if (data->player->target_state >= GST_STATE_PAUSED) {
+    g_signal_emit (data->player, signals[SIGNAL_MEDIA_INFO_UPDATED], 0,
+        data->info);
+  }
+}
+
+static void
+free_media_info_updated_signal_data (MediaInfoUpdatedSignalData * data)
+{
+  g_object_unref (data->player);
+  g_object_unref (data->info);
+  g_free (data);
+}
+
+/*
+ * emit_media_info_updated_signal:
+ *
+ * create a new copy of self->media_info object and emits the newly created
+ * copy to user application. The newly created media_info will be unref'ed
+ * as part of signal finalize method.
+ */
+static void
+emit_media_info_updated_signal (GstPlayer * self)
+{
+  MediaInfoUpdatedSignalData *data = g_new (MediaInfoUpdatedSignalData, 1);
+  data->player = g_object_ref (self);
+  g_mutex_lock (&self->lock);
+  data->info = gst_player_media_info_copy (self->media_info);
+  g_mutex_unlock (&self->lock);
+
+  gst_player_signal_dispatcher_dispatch (self->signal_dispatcher, self,
+      media_info_updated_dispatch, data,
+      (GDestroyNotify) free_media_info_updated_signal_data);
+}
+
+static GstCaps *
+get_caps (GstPlayer * self, gint stream_index, GType type)
+{
+  GstPad *pad = NULL;
+  GstCaps *caps = NULL;
+
+  if (type == GST_TYPE_PLAYER_VIDEO_INFO)
+    g_signal_emit_by_name (G_OBJECT (self->playbin),
+        "get-video-pad", stream_index, &pad);
+  else if (type == GST_TYPE_PLAYER_AUDIO_INFO)
+    g_signal_emit_by_name (G_OBJECT (self->playbin),
+        "get-audio-pad", stream_index, &pad);
+  else
+    g_signal_emit_by_name (G_OBJECT (self->playbin),
+        "get-text-pad", stream_index, &pad);
+
+  if (pad) {
+    caps = gst_pad_get_current_caps (pad);
+    gst_object_unref (pad);
+  }
+
+  return caps;
+}
+
+static void
+gst_player_subtitle_info_update (GstPlayer * self,
+    GstPlayerStreamInfo * stream_info)
+{
+  GstPlayerSubtitleInfo *info = (GstPlayerSubtitleInfo *) stream_info;
+
+  if (stream_info->tags) {
+
+    /* free the old language info */
+    g_free (info->language);
+    info->language = NULL;
+
+    /* First try to get the language full name from tag, if name is not
+     * available then try language code. If we find the language code
+     * then use gstreamer api to translate code to full name.
+     */
+    gst_tag_list_get_string (stream_info->tags, GST_TAG_LANGUAGE_NAME,
+        &info->language);
+    if (!info->language) {
+      gchar *lang_code = NULL;
+
+      gst_tag_list_get_string (stream_info->tags, GST_TAG_LANGUAGE_CODE,
+          &lang_code);
+      if (lang_code) {
+        info->language = g_strdup (gst_tag_get_language_name (lang_code));
+        g_free (lang_code);
+      }
+    }
+
+    /* If we are still failed to find language name then check if external
+     * subtitle is loaded and compare the stream index between current sub
+     * stream index with our stream index and if matches then declare it as
+     * external subtitle and use the filename.
+     */
+    if (!info->language) {
+      gint text_index = -1;
+      gchar *suburi = NULL;
+
+      g_object_get (G_OBJECT (self->playbin), "current-suburi", &suburi, NULL);
+      if (suburi) {
+        g_object_get (G_OBJECT (self->playbin), "current-text", &text_index,
+            NULL);
+        if (text_index == gst_player_stream_info_get_index (stream_info))
+          info->language = g_path_get_basename (suburi);
+        g_free (suburi);
+      }
+    }
+
+  } else {
+    g_free (info->language);
+    info->language = NULL;
+  }
+
+  GST_DEBUG_OBJECT (self, "language=%s", info->language);
+}
+
+static void
+gst_player_video_info_update (GstPlayer * self,
+    GstPlayerStreamInfo * stream_info)
+{
+  GstPlayerVideoInfo *info = (GstPlayerVideoInfo *) stream_info;
+
+  if (stream_info->caps) {
+    GstStructure *s;
+
+    s = gst_caps_get_structure (stream_info->caps, 0);
+    if (s) {
+      gint width, height;
+      gint fps_n, fps_d;
+      gint par_n, par_d;
+
+      if (gst_structure_get_int (s, "width", &width))
+        info->width = width;
+      else
+        info->width = -1;
+
+      if (gst_structure_get_int (s, "height", &height))
+        info->height = height;
+      else
+        info->height = -1;
+
+      if (gst_structure_get_fraction (s, "framerate", &fps_n, &fps_d)) {
+        info->framerate_num = fps_n;
+        info->framerate_denom = fps_d;
+      } else {
+        info->framerate_num = 0;
+        info->framerate_denom = 1;
+      }
+
+
+      if (gst_structure_get_fraction (s, "pixel-aspect-ratio", &par_n, &par_d)) {
+        info->par_num = par_n;
+        info->par_denom = par_d;
+      } else {
+        info->par_num = 1;
+        info->par_denom = 1;
+      }
+    }
+  } else {
+    info->width = info->height = -1;
+    info->par_num = info->par_denom = 1;
+    info->framerate_num = 0;
+    info->framerate_denom = 1;
+  }
+
+  if (stream_info->tags) {
+    guint bitrate, max_bitrate;
+
+    if (gst_tag_list_get_uint (stream_info->tags, GST_TAG_BITRATE, &bitrate))
+      info->bitrate = bitrate;
+    else
+      info->bitrate = -1;
+
+    if (gst_tag_list_get_uint (stream_info->tags, GST_TAG_MAXIMUM_BITRATE,
+            &max_bitrate) || gst_tag_list_get_uint (stream_info->tags,
+            GST_TAG_NOMINAL_BITRATE, &max_bitrate))
+      info->max_bitrate = max_bitrate;
+    else
+      info->max_bitrate = -1;
+  } else {
+    info->bitrate = info->max_bitrate = -1;
+  }
+
+  GST_DEBUG_OBJECT (self, "width=%d height=%d fps=%.2f par=%d:%d "
+      "bitrate=%d max_bitrate=%d", info->width, info->height,
+      (gdouble) info->framerate_num / info->framerate_denom,
+      info->par_num, info->par_denom, info->bitrate, info->max_bitrate);
+}
+
+static void
+gst_player_audio_info_update (GstPlayer * self,
+    GstPlayerStreamInfo * stream_info)
+{
+  GstPlayerAudioInfo *info = (GstPlayerAudioInfo *) stream_info;
+
+  if (stream_info->caps) {
+    GstStructure *s;
+
+    s = gst_caps_get_structure (stream_info->caps, 0);
+    if (s) {
+      gint rate, channels;
+
+      if (gst_structure_get_int (s, "rate", &rate))
+        info->sample_rate = rate;
+      else
+        info->sample_rate = -1;
+
+      if (gst_structure_get_int (s, "channels", &channels))
+        info->channels = channels;
+      else
+        info->channels = 0;
+    }
+  } else {
+    info->sample_rate = -1;
+    info->channels = 0;
+  }
+
+  if (stream_info->tags) {
+    guint bitrate, max_bitrate;
+
+    if (gst_tag_list_get_uint (stream_info->tags, GST_TAG_BITRATE, &bitrate))
+      info->bitrate = bitrate;
+    else
+      info->bitrate = -1;
+
+    if (gst_tag_list_get_uint (stream_info->tags, GST_TAG_MAXIMUM_BITRATE,
+            &max_bitrate) || gst_tag_list_get_uint (stream_info->tags,
+            GST_TAG_NOMINAL_BITRATE, &max_bitrate))
+      info->max_bitrate = max_bitrate;
+    else
+      info->max_bitrate = -1;
+
+    /* if we have old language the free it */
+    g_free (info->language);
+    info->language = NULL;
+
+    /* First try to get the language full name from tag, if name is not
+     * available then try language code. If we find the language code
+     * then use gstreamer api to translate code to full name.
+     */
+    gst_tag_list_get_string (stream_info->tags, GST_TAG_LANGUAGE_NAME,
+        &info->language);
+    if (!info->language) {
+      gchar *lang_code = NULL;
+
+      gst_tag_list_get_string (stream_info->tags, GST_TAG_LANGUAGE_CODE,
+          &lang_code);
+      if (lang_code) {
+        info->language = g_strdup (gst_tag_get_language_name (lang_code));
+        g_free (lang_code);
+      }
+    }
+  } else {
+    g_free (info->language);
+    info->language = NULL;
+    info->max_bitrate = info->bitrate = -1;
+  }
+
+  GST_DEBUG_OBJECT (self, "language=%s rate=%d channels=%d bitrate=%d "
+      "max_bitrate=%d", info->language, info->sample_rate, info->channels,
+      info->bitrate, info->bitrate);
+}
+
+static GstPlayerStreamInfo *
+gst_player_stream_info_find (GstPlayerMediaInfo * media_info,
+    GType type, gint stream_index)
+{
+  GList *list, *l;
+  GstPlayerStreamInfo *info = NULL;
+
+  if (!media_info)
+    return NULL;
+
+  list = gst_player_media_info_get_stream_list (media_info);
+  for (l = list; l != NULL; l = l->next) {
+    info = (GstPlayerStreamInfo *) l->data;
+    if ((G_OBJECT_TYPE (info) == type) && (info->stream_index == stream_index)) {
+      return info;
+    }
+  }
+
+  return NULL;
+}
+
+static gboolean
+is_track_enabled (GstPlayer * self, gint pos)
+{
+  gint flags;
+
+  g_object_get (G_OBJECT (self->playbin), "flags", &flags, NULL);
+
+  if ((flags & pos))
+    return TRUE;
+
+  return FALSE;
+}
+
+static GstPlayerStreamInfo *
+gst_player_stream_info_get_current (GstPlayer * self, const gchar * prop,
+    GType type)
+{
+  gint current;
+  GstPlayerStreamInfo *info;
+
+  if (!self->media_info)
+    return NULL;
+
+  g_object_get (G_OBJECT (self->playbin), prop, &current, NULL);
+  g_mutex_lock (&self->lock);
+  info = gst_player_stream_info_find (self->media_info, type, current);
+  if (info)
+    info = gst_player_stream_info_copy (info);
+  g_mutex_unlock (&self->lock);
+
+  return info;
+}
+
+static void
+gst_player_stream_info_update (GstPlayer * self, GstPlayerStreamInfo * s)
+{
+  if (GST_IS_PLAYER_VIDEO_INFO (s))
+    gst_player_video_info_update (self, s);
+  else if (GST_IS_PLAYER_AUDIO_INFO (s))
+    gst_player_audio_info_update (self, s);
+  else
+    gst_player_subtitle_info_update (self, s);
+}
+
+static gchar *
+stream_info_get_codec (GstPlayerStreamInfo * s)
+{
+  const gchar *type;
+  GstTagList *tags;
+  gchar *codec = NULL;
+
+  if (GST_IS_PLAYER_VIDEO_INFO (s))
+    type = GST_TAG_VIDEO_CODEC;
+  else if (GST_IS_PLAYER_AUDIO_INFO (s))
+    type = GST_TAG_AUDIO_CODEC;
+  else
+    type = GST_TAG_SUBTITLE_CODEC;
+
+  tags = gst_player_stream_info_get_tags (s);
+  if (tags) {
+    gst_tag_list_get_string (tags, type, &codec);
+    if (!codec)
+      gst_tag_list_get_string (tags, GST_TAG_CODEC, &codec);
+  }
+
+  if (!codec) {
+    GstCaps *caps;
+    caps = gst_player_stream_info_get_caps (s);
+    if (caps) {
+      codec = gst_pb_utils_get_codec_description (caps);
+    }
+  }
+
+  return codec;
+}
+
+static void
+gst_player_stream_info_update_tags_and_caps (GstPlayer * self,
+    GstPlayerStreamInfo * s)
+{
+  GstTagList *tags;
+  gint stream_index;
+
+  stream_index = gst_player_stream_info_get_index (s);
+
+  if (GST_IS_PLAYER_VIDEO_INFO (s))
+    g_signal_emit_by_name (self->playbin, "get-video-tags",
+        stream_index, &tags);
+  else if (GST_IS_PLAYER_AUDIO_INFO (s))
+    g_signal_emit_by_name (self->playbin, "get-audio-tags",
+        stream_index, &tags);
+  else
+    g_signal_emit_by_name (self->playbin, "get-text-tags", stream_index, &tags);
+
+  if (s->tags)
+    gst_tag_list_unref (s->tags);
+  s->tags = tags;
+
+  if (s->caps)
+    gst_caps_unref (s->caps);
+  s->caps = get_caps (self, stream_index, G_OBJECT_TYPE (s));
+
+  g_free (s->codec);
+  s->codec = stream_info_get_codec (s);
+
+  GST_DEBUG_OBJECT (self, "%s index: %d tags: %p caps: %p",
+      gst_player_stream_info_get_stream_type (s), stream_index,
+      s->tags, s->caps);
+
+  gst_player_stream_info_update (self, s);
+}
+
+static void
+gst_player_streams_info_create (GstPlayer * self,
+    GstPlayerMediaInfo * media_info, const gchar * prop, GType type)
+{
+  gint i;
+  gint total = -1;
+  GstPlayerStreamInfo *s;
+
+  if (!media_info)
+    return;
+
+  g_object_get (G_OBJECT (self->playbin), prop, &total, NULL);
+
+  GST_DEBUG_OBJECT (self, "%s: %d", prop, total);
+
+  for (i = 0; i < total; i++) {
+    /* check if stream already exist in the list */
+    s = gst_player_stream_info_find (media_info, type, i);
+
+    if (!s) {
+      /* create a new stream info instance */
+      s = gst_player_stream_info_new (i, type);
+
+      /* add the object in stream list */
+      media_info->stream_list = g_list_append (media_info->stream_list, s);
+
+      /* based on type, add the object in its corresponding stream_ list */
+      if (GST_IS_PLAYER_AUDIO_INFO (s))
+        media_info->audio_stream_list = g_list_append
+            (media_info->audio_stream_list, s);
+      else if (GST_IS_PLAYER_VIDEO_INFO (s))
+        media_info->video_stream_list = g_list_append
+            (media_info->video_stream_list, s);
+      else
+        media_info->subtitle_stream_list = g_list_append
+            (media_info->subtitle_stream_list, s);
+
+      GST_DEBUG_OBJECT (self, "create %s stream stream_index: %d",
+          gst_player_stream_info_get_stream_type (s), i);
+    }
+
+    gst_player_stream_info_update_tags_and_caps (self, s);
+  }
+}
+
+static void
+video_changed_cb (G_GNUC_UNUSED GObject * object, gpointer user_data)
+{
+  GstPlayer *self = GST_PLAYER (user_data);
+
+  g_mutex_lock (&self->lock);
+  gst_player_streams_info_create (self, self->media_info,
+      "n-video", GST_TYPE_PLAYER_VIDEO_INFO);
+  g_mutex_unlock (&self->lock);
+}
+
+static void
+audio_changed_cb (G_GNUC_UNUSED GObject * object, gpointer user_data)
+{
+  GstPlayer *self = GST_PLAYER (user_data);
+
+  g_mutex_lock (&self->lock);
+  gst_player_streams_info_create (self, self->media_info,
+      "n-audio", GST_TYPE_PLAYER_AUDIO_INFO);
+  g_mutex_unlock (&self->lock);
+}
+
+static void
+subtitle_changed_cb (G_GNUC_UNUSED GObject * object, gpointer user_data)
+{
+  GstPlayer *self = GST_PLAYER (user_data);
+
+  g_mutex_lock (&self->lock);
+  gst_player_streams_info_create (self, self->media_info,
+      "n-text", GST_TYPE_PLAYER_SUBTITLE_INFO);
+  g_mutex_unlock (&self->lock);
+}
+
+static void *
+get_title (GstTagList * tags)
+{
+  gchar *title = NULL;
+
+  gst_tag_list_get_string (tags, GST_TAG_TITLE, &title);
+  if (!title)
+    gst_tag_list_get_string (tags, GST_TAG_TITLE_SORTNAME, &title);
+
+  return title;
+}
+
+static void *
+get_container_format (GstTagList * tags)
+{
+  gchar *container = NULL;
+
+  gst_tag_list_get_string (tags, GST_TAG_CONTAINER_FORMAT, &container);
+
+  /* TODO: If container is not available then maybe consider
+   * parsing caps or file extension to guess the container format.
+   */
+
+  return container;
+}
+
+static void *
+get_from_tags (GstPlayer * self, GstPlayerMediaInfo * media_info,
+    void *(*func) (GstTagList *))
+{
+  GList *l;
+  void *ret = NULL;
+
+  if (media_info->tags) {
+    ret = func (media_info->tags);
+    if (ret)
+      return ret;
+  }
+
+  /* if global tag does not exit then try video and audio streams */
+  GST_DEBUG_OBJECT (self, "trying video tags");
+  for (l = gst_player_get_video_streams (media_info); l != NULL; l = l->next) {
+    GstTagList *tags;
+
+    tags = gst_player_stream_info_get_tags ((GstPlayerStreamInfo *) l->data);
+    if (tags)
+      ret = func (tags);
+
+    if (ret)
+      return ret;
+  }
+
+  GST_DEBUG_OBJECT (self, "trying audio tags");
+  for (l = gst_player_get_audio_streams (media_info); l != NULL; l = l->next) {
+    GstTagList *tags;
+
+    tags = gst_player_stream_info_get_tags ((GstPlayerStreamInfo *) l->data);
+    if (tags)
+      ret = func (tags);
+
+    if (ret)
+      return ret;
+  }
+
+  GST_DEBUG_OBJECT (self, "failed to get the information from tags");
+  return NULL;
+}
+
+static void *
+get_cover_sample (GstTagList * tags)
+{
+  GstSample *cover_sample = NULL;
+
+  gst_tag_list_get_sample (tags, GST_TAG_IMAGE, &cover_sample);
+  if (!cover_sample)
+    gst_tag_list_get_sample (tags, GST_TAG_PREVIEW_IMAGE, &cover_sample);
+
+  return cover_sample;
+}
+
+static GstPlayerMediaInfo *
+gst_player_media_info_create (GstPlayer * self)
+{
+  GstPlayerMediaInfo *media_info;
+  GstQuery *query;
+
+  GST_DEBUG_OBJECT (self, "begin");
+  media_info = gst_player_media_info_new (self->uri);
+  media_info->duration = gst_player_get_duration (self);
+  media_info->tags = self->global_tags;
+  self->global_tags = NULL;
+
+  query = gst_query_new_seeking (GST_FORMAT_TIME);
+  if (gst_element_query (self->playbin, query))
+    gst_query_parse_seeking (query, NULL, &media_info->seekable, NULL, NULL);
+  gst_query_unref (query);
+
+  /* create audio/video/sub streams */
+  gst_player_streams_info_create (self, media_info, "n-video",
+      GST_TYPE_PLAYER_VIDEO_INFO);
+  gst_player_streams_info_create (self, media_info, "n-audio",
+      GST_TYPE_PLAYER_AUDIO_INFO);
+  gst_player_streams_info_create (self, media_info, "n-text",
+      GST_TYPE_PLAYER_SUBTITLE_INFO);
+
+  media_info->title = get_from_tags (self, media_info, get_title);
+  media_info->container =
+      get_from_tags (self, media_info, get_container_format);
+  media_info->image_sample = get_from_tags (self, media_info, get_cover_sample);
+
+  GST_DEBUG_OBJECT (self, "uri: %s title: %s duration: %" GST_TIME_FORMAT
+      " seekable: %s container: %s image_sample %p",
+      media_info->uri, media_info->title, GST_TIME_ARGS (media_info->duration),
+      media_info->seekable ? "yes" : "no", media_info->container,
+      media_info->image_sample);
+
+  GST_DEBUG_OBJECT (self, "end");
+  return media_info;
+}
+
+static void
+tags_changed_cb (GstPlayer * self, gint stream_index, GType type)
+{
+  GstPlayerStreamInfo *s;
+
+  if (!self->media_info)
+    return;
+
+  /* update the stream information */
+  g_mutex_lock (&self->lock);
+  s = gst_player_stream_info_find (self->media_info, type, stream_index);
+  gst_player_stream_info_update_tags_and_caps (self, s);
+  g_mutex_unlock (&self->lock);
+
+  emit_media_info_updated_signal (self);
+}
+
+static void
+video_tags_changed_cb (G_GNUC_UNUSED GstElement * playbin, gint stream_index,
+    gpointer user_data)
+{
+  tags_changed_cb (GST_PLAYER (user_data), stream_index,
+      GST_TYPE_PLAYER_VIDEO_INFO);
+}
+
+static void
+audio_tags_changed_cb (G_GNUC_UNUSED GstElement * playbin, gint stream_index,
+    gpointer user_data)
+{
+  tags_changed_cb (GST_PLAYER (user_data), stream_index,
+      GST_TYPE_PLAYER_AUDIO_INFO);
+}
+
+static void
+subtitle_tags_changed_cb (G_GNUC_UNUSED GstElement * playbin, gint stream_index,
+    gpointer user_data)
+{
+  tags_changed_cb (GST_PLAYER (user_data), stream_index,
+      GST_TYPE_PLAYER_SUBTITLE_INFO);
+}
+
+static void
+volume_changed_dispatch (gpointer user_data)
+{
+  g_signal_emit (user_data, signals[SIGNAL_VOLUME_CHANGED], 0);
+  g_object_notify_by_pspec (G_OBJECT (user_data), param_specs[PROP_VOLUME]);
+}
+
+static void
+volume_notify_cb (G_GNUC_UNUSED GObject * obj, G_GNUC_UNUSED GParamSpec * pspec,
+    GstPlayer * self)
+{
+  if (g_signal_handler_find (self, G_SIGNAL_MATCH_ID,
+          signals[SIGNAL_VOLUME_CHANGED], 0, NULL, NULL, NULL) != 0) {
+    gst_player_signal_dispatcher_dispatch (self->signal_dispatcher, self,
+        volume_changed_dispatch, g_object_ref (self),
+        (GDestroyNotify) g_object_unref);
+  }
+}
+
+static void
+mute_changed_dispatch (gpointer user_data)
+{
+  g_signal_emit (user_data, signals[SIGNAL_MUTE_CHANGED], 0);
+  g_object_notify_by_pspec (G_OBJECT (user_data), param_specs[PROP_MUTE]);
+}
+
+static void
+mute_notify_cb (G_GNUC_UNUSED GObject * obj, G_GNUC_UNUSED GParamSpec * pspec,
+    GstPlayer * self)
+{
+  if (g_signal_handler_find (self, G_SIGNAL_MATCH_ID,
+          signals[SIGNAL_MUTE_CHANGED], 0, NULL, NULL, NULL) != 0) {
+    gst_player_signal_dispatcher_dispatch (self->signal_dispatcher, self,
+        mute_changed_dispatch, g_object_ref (self),
+        (GDestroyNotify) g_object_unref);
+  }
+}
+
+static gpointer
+gst_player_main (gpointer data)
+{
+  GstPlayer *self = GST_PLAYER (data);
+  GstBus *bus;
+  GSource *source;
+  GSource *bus_source;
+  GstElement *scaletempo;
+
+  GST_TRACE_OBJECT (self, "Starting main thread");
+
+  g_main_context_push_thread_default (self->context);
+
+  source = g_idle_source_new ();
+  g_source_set_callback (source, (GSourceFunc) main_loop_running_cb, self,
+      NULL);
+  g_source_attach (source, self->context);
+  g_source_unref (source);
+
+  self->playbin = gst_element_factory_make ("playbin", "playbin");
+
+  if (self->video_renderer) {
+    GstElement *video_sink =
+        gst_player_video_renderer_create_video_sink (self->video_renderer,
+        self);
+
+    if (video_sink)
+      g_object_set (self->playbin, "video-sink", video_sink, NULL);
+  }
+
+  scaletempo = gst_element_factory_make ("scaletempo", NULL);
+  if (scaletempo) {
+    if (gst_plugin_feature_check_version (GST_PLUGIN_FEATURE
+            (gst_element_get_factory (scaletempo)), 1, 6, 1)) {
+      g_object_set (self->playbin, "audio-filter", scaletempo, NULL);
+    } else {
+      gst_object_unref (scaletempo);
+      g_warning ("GstPlayer: scaletempo >= 1.6.1 is needed for preserving "
+          "audio pitch during trick modes");
+    }
+  } else {
+    g_warning ("GstPlayer: scaletempo element not available. Audio pitch "
+        "will not be preserved during trick modes");
+  }
+
+  self->bus = bus = gst_element_get_bus (self->playbin);
+  bus_source = gst_bus_create_watch (bus);
+  g_source_set_callback (bus_source, (GSourceFunc) gst_bus_async_signal_func,
+      NULL, NULL);
+  g_source_attach (bus_source, self->context);
+
+  g_signal_connect (G_OBJECT (bus), "message::error", G_CALLBACK (error_cb),
+      self);
+  g_signal_connect (G_OBJECT (bus), "message::warning", G_CALLBACK (warning_cb),
+      self);
+  g_signal_connect (G_OBJECT (bus), "message::eos", G_CALLBACK (eos_cb), self);
+  g_signal_connect (G_OBJECT (bus), "message::state-changed",
+      G_CALLBACK (state_changed_cb), self);
+  g_signal_connect (G_OBJECT (bus), "message::buffering",
+      G_CALLBACK (buffering_cb), self);
+  g_signal_connect (G_OBJECT (bus), "message::clock-lost",
+      G_CALLBACK (clock_lost_cb), self);
+  g_signal_connect (G_OBJECT (bus), "message::duration-changed",
+      G_CALLBACK (duration_changed_cb), self);
+  g_signal_connect (G_OBJECT (bus), "message::latency",
+      G_CALLBACK (latency_cb), self);
+  g_signal_connect (G_OBJECT (bus), "message::request-state",
+      G_CALLBACK (request_state_cb), self);
+  g_signal_connect (G_OBJECT (bus), "message::element",
+      G_CALLBACK (element_cb), self);
+  g_signal_connect (G_OBJECT (bus), "message::tag", G_CALLBACK (tags_cb), self);
+
+  g_signal_connect (self->playbin, "video-changed",
+      G_CALLBACK (video_changed_cb), self);
+  g_signal_connect (self->playbin, "audio-changed",
+      G_CALLBACK (audio_changed_cb), self);
+  g_signal_connect (self->playbin, "text-changed",
+      G_CALLBACK (subtitle_changed_cb), self);
+
+  g_signal_connect (self->playbin, "video-tags-changed",
+      G_CALLBACK (video_tags_changed_cb), self);
+  g_signal_connect (self->playbin, "audio-tags-changed",
+      G_CALLBACK (audio_tags_changed_cb), self);
+  g_signal_connect (self->playbin, "text-tags-changed",
+      G_CALLBACK (subtitle_tags_changed_cb), self);
+  g_signal_connect (self->playbin, "notify::volume",
+      G_CALLBACK (volume_notify_cb), self);
+  g_signal_connect (self->playbin, "notify::mute",
+      G_CALLBACK (mute_notify_cb), self);
+
+  self->target_state = GST_STATE_NULL;
+  self->current_state = GST_STATE_NULL;
+  change_state (self, GST_PLAYER_STATE_STOPPED);
+  self->buffering = 100;
+  self->is_eos = FALSE;
+  self->is_live = FALSE;
+
+  GST_TRACE_OBJECT (self, "Starting main loop");
+  g_main_loop_run (self->loop);
+  GST_TRACE_OBJECT (self, "Stopped main loop");
+
+  g_source_destroy (bus_source);
+  g_source_unref (bus_source);
+  gst_object_unref (bus);
+
+  remove_tick_source (self);
+  remove_ready_timeout_source (self);
+
+  g_mutex_lock (&self->lock);
+  if (self->media_info) {
+    g_object_unref (self->media_info);
+    self->media_info = NULL;
+  }
+
+  if (self->seek_source)
+    g_source_unref (self->seek_source);
+  self->seek_source = NULL;
+  g_mutex_unlock (&self->lock);
+
+  g_main_context_pop_thread_default (self->context);
+
+  self->target_state = GST_STATE_NULL;
+  self->current_state = GST_STATE_NULL;
+  if (self->playbin) {
+    gst_element_set_state (self->playbin, GST_STATE_NULL);
+    gst_object_unref (self->playbin);
+    self->playbin = NULL;
+  }
+
+  GST_TRACE_OBJECT (self, "Stopped main thread");
+
+  return NULL;
+}
+
+static gpointer
+gst_player_init_once (G_GNUC_UNUSED gpointer user_data)
+{
+  gst_init (NULL, NULL);
+
+  GST_DEBUG_CATEGORY_INIT (gst_player_debug, "gst-player", 0, "GstPlayer");
+  gst_player_error_quark ();
+
+  return NULL;
+}
+
+/**
+ * gst_player_new:
+ * @video_renderer: (transfer full) (allow-none): GstPlayerVideoRenderer to use
+ * @signal_dispatcher: (transfer full) (allow-none): GstPlayerSignalDispatcher to use
+ *
+ * Creates a new #GstPlayer instance that uses @signal_dispatcher to dispatch
+ * signals to some event loop system, or emits signals directly if NULL is
+ * passed. See gst_player_g_main_context_signal_dispatcher_new().
+ *
+ * Video is going to be rendered by @video_renderer, or if %NULL is provided
+ * no special video set up will be done and some default handling will be
+ * performed.
+ *
+ * Returns: a new #GstPlayer instance
+ */
+GstPlayer *
+gst_player_new (GstPlayerVideoRenderer * video_renderer,
+    GstPlayerSignalDispatcher * signal_dispatcher)
+{
+  static GOnce once = G_ONCE_INIT;
+  GstPlayer *self;
+
+  g_once (&once, gst_player_init_once, NULL);
+
+  self =
+      g_object_new (GST_TYPE_PLAYER, "video-renderer", video_renderer,
+      "signal-dispatcher", signal_dispatcher, NULL);
+
+  if (video_renderer)
+    g_object_unref (video_renderer);
+  if (signal_dispatcher)
+    g_object_unref (signal_dispatcher);
+
+  return self;
+}
+
+static gboolean
+gst_player_play_internal (gpointer user_data)
+{
+  GstPlayer *self = GST_PLAYER (user_data);
+  GstStateChangeReturn state_ret;
+
+  GST_DEBUG_OBJECT (self, "Play");
+
+  g_mutex_lock (&self->lock);
+  if (!self->uri) {
+    g_mutex_unlock (&self->lock);
+    return G_SOURCE_REMOVE;
+  }
+  g_mutex_unlock (&self->lock);
+
+  remove_ready_timeout_source (self);
+  self->target_state = GST_STATE_PLAYING;
+
+  if (self->current_state < GST_STATE_PAUSED)
+    change_state (self, GST_PLAYER_STATE_BUFFERING);
+
+  if (self->current_state >= GST_STATE_PAUSED && !self->is_eos
+      && self->buffering >= 100) {
+    state_ret = gst_element_set_state (self->playbin, GST_STATE_PLAYING);
+  } else {
+    state_ret = gst_element_set_state (self->playbin, GST_STATE_PAUSED);
+  }
+
+  if (state_ret == GST_STATE_CHANGE_NO_PREROLL) {
+    self->is_live = TRUE;
+    GST_DEBUG_OBJECT (self, "Pipeline is live");
+  }
+
+  if (state_ret == GST_STATE_CHANGE_FAILURE) {
+    emit_error (self, g_error_new (GST_PLAYER_ERROR, GST_PLAYER_ERROR_FAILED,
+            "Failed to play"));
+    return G_SOURCE_REMOVE;
+  } else if (state_ret == GST_STATE_CHANGE_NO_PREROLL) {
+    self->is_live = TRUE;
+    GST_DEBUG_OBJECT (self, "Pipeline is live");
+  }
+
+  if (self->is_eos) {
+    gboolean ret;
+
+    GST_DEBUG_OBJECT (self, "Was EOS, seeking to beginning");
+    self->is_eos = FALSE;
+    ret =
+        gst_element_seek_simple (self->playbin, GST_FORMAT_TIME,
+        GST_SEEK_FLAG_FLUSH, 0);
+    if (!ret) {
+      GST_ERROR_OBJECT (self, "Seek to beginning failed");
+      gst_player_stop_internal (self);
+      gst_player_play_internal (self);
+    }
+  }
+
+  return G_SOURCE_REMOVE;
+}
+
+/**
+ * gst_player_play:
+ * @player: #GstPlayer instance
+ *
+ * Request to play the loaded stream.
+ */
+void
+gst_player_play (GstPlayer * self)
+{
+  g_return_if_fail (GST_IS_PLAYER (self));
+
+  g_main_context_invoke_full (self->context, G_PRIORITY_DEFAULT,
+      gst_player_play_internal, self, NULL);
+}
+
+static gboolean
+gst_player_pause_internal (gpointer user_data)
+{
+  GstPlayer *self = GST_PLAYER (user_data);
+  GstStateChangeReturn state_ret;
+
+  GST_DEBUG_OBJECT (self, "Pause");
+
+  g_mutex_lock (&self->lock);
+  if (!self->uri) {
+    g_mutex_unlock (&self->lock);
+    return G_SOURCE_REMOVE;
+  }
+  g_mutex_unlock (&self->lock);
+
+  tick_cb (self);
+  remove_tick_source (self);
+  remove_ready_timeout_source (self);
+
+  self->target_state = GST_STATE_PAUSED;
+
+  if (self->current_state < GST_STATE_PAUSED)
+    change_state (self, GST_PLAYER_STATE_BUFFERING);
+
+  state_ret = gst_element_set_state (self->playbin, GST_STATE_PAUSED);
+  if (state_ret == GST_STATE_CHANGE_FAILURE) {
+    emit_error (self, g_error_new (GST_PLAYER_ERROR, GST_PLAYER_ERROR_FAILED,
+            "Failed to pause"));
+    return G_SOURCE_REMOVE;
+  } else if (state_ret == GST_STATE_CHANGE_NO_PREROLL) {
+    self->is_live = TRUE;
+    GST_DEBUG_OBJECT (self, "Pipeline is live");
+  }
+
+  if (self->is_eos) {
+    gboolean ret;
+
+    GST_DEBUG_OBJECT (self, "Was EOS, seeking to beginning");
+    self->is_eos = FALSE;
+    ret =
+        gst_element_seek_simple (self->playbin, GST_FORMAT_TIME,
+        GST_SEEK_FLAG_FLUSH, 0);
+    if (!ret) {
+      GST_ERROR_OBJECT (self, "Seek to beginning failed");
+      gst_player_stop_internal (self);
+      gst_player_pause_internal (self);
+    }
+  }
+
+  return G_SOURCE_REMOVE;
+}
+
+/**
+ * gst_player_pause:
+ * @player: #GstPlayer instance
+ *
+ * Pauses the current stream.
+ */
+void
+gst_player_pause (GstPlayer * self)
+{
+  g_return_if_fail (GST_IS_PLAYER (self));
+
+  g_main_context_invoke_full (self->context, G_PRIORITY_DEFAULT,
+      gst_player_pause_internal, self, NULL);
+}
+
+static gboolean
+gst_player_stop_internal (gpointer user_data)
+{
+  GstPlayer *self = GST_PLAYER (user_data);
+
+  GST_DEBUG_OBJECT (self, "Stop");
+
+  tick_cb (self);
+  remove_tick_source (self);
+
+  add_ready_timeout_source (self);
+
+  self->target_state = GST_STATE_NULL;
+  self->current_state = GST_STATE_READY;
+  self->is_live = FALSE;
+  self->is_eos = FALSE;
+  gst_bus_set_flushing (self->bus, TRUE);
+  gst_element_set_state (self->playbin, GST_STATE_READY);
+  gst_bus_set_flushing (self->bus, FALSE);
+  change_state (self, GST_PLAYER_STATE_STOPPED);
+  self->buffering = 100;
+  g_mutex_lock (&self->lock);
+  if (self->media_info) {
+    g_object_unref (self->media_info);
+    self->media_info = NULL;
+  }
+  if (self->global_tags) {
+    gst_tag_list_unref (self->global_tags);
+    self->global_tags = NULL;
+  }
+  self->seek_pending = FALSE;
+  if (self->seek_source) {
+    g_source_destroy (self->seek_source);
+    g_source_unref (self->seek_source);
+    self->seek_source = NULL;
+  }
+  self->seek_position = GST_CLOCK_TIME_NONE;
+  self->last_seek_time = GST_CLOCK_TIME_NONE;
+  self->rate = 1.0;
+  g_mutex_unlock (&self->lock);
+
+  return G_SOURCE_REMOVE;
+}
+
+/**
+ * gst_player_stop:
+ * @player: #GstPlayer instance
+ *
+ * Stops playing the current stream and resets to the first position
+ * in the stream.
+ */
+void
+gst_player_stop (GstPlayer * self)
+{
+  g_return_if_fail (GST_IS_PLAYER (self));
+
+  g_main_context_invoke_full (self->context, G_PRIORITY_DEFAULT,
+      gst_player_stop_internal, self, NULL);
+}
+
+/* Must be called with lock from main context, releases lock! */
+static void
+gst_player_seek_internal_locked (GstPlayer * self)
+{
+  gboolean ret;
+  GstClockTime position;
+  gdouble rate;
+  GstStateChangeReturn state_ret;
+  GstEvent *s_event;
+  GstSeekFlags flags = 0;
+
+  if (self->seek_source) {
+    g_source_destroy (self->seek_source);
+    g_source_unref (self->seek_source);
+    self->seek_source = NULL;
+  }
+
+  /* Only seek in PAUSED */
+  if (self->current_state < GST_STATE_PAUSED) {
+    return;
+  } else if (self->current_state != GST_STATE_PAUSED) {
+    g_mutex_unlock (&self->lock);
+    state_ret = gst_element_set_state (self->playbin, GST_STATE_PAUSED);
+    if (state_ret == GST_STATE_CHANGE_FAILURE) {
+      emit_error (self, g_error_new (GST_PLAYER_ERROR, GST_PLAYER_ERROR_FAILED,
+              "Failed to seek"));
+      g_mutex_lock (&self->lock);
+      return;
+    }
+    g_mutex_lock (&self->lock);
+    return;
+  }
+
+  self->last_seek_time = gst_util_get_timestamp ();
+  position = self->seek_position;
+  self->seek_position = GST_CLOCK_TIME_NONE;
+  self->seek_pending = TRUE;
+  rate = self->rate;
+  g_mutex_unlock (&self->lock);
+
+  remove_tick_source (self);
+  self->is_eos = FALSE;
+
+  flags |= GST_SEEK_FLAG_FLUSH;
+
+#if GST_CHECK_VERSION(1,5,0)
+  if (rate != 1.0) {
+    flags |= GST_SEEK_FLAG_TRICKMODE;
+  }
+#endif
+
+  if (rate >= 0.0) {
+    s_event = gst_event_new_seek (rate, GST_FORMAT_TIME, flags,
+        GST_SEEK_TYPE_SET, position, GST_SEEK_TYPE_NONE, GST_CLOCK_TIME_NONE);
+  } else {
+    s_event = gst_event_new_seek (rate, GST_FORMAT_TIME, flags,
+        GST_SEEK_TYPE_SET, G_GINT64_CONSTANT (0), GST_SEEK_TYPE_SET, position);
+  }
+
+  GST_DEBUG_OBJECT (self, "Seek with rate %.2lf to %" GST_TIME_FORMAT,
+      rate, GST_TIME_ARGS (position));
+
+  ret = gst_element_send_event (self->playbin, s_event);
+  if (!ret)
+    emit_error (self, g_error_new (GST_PLAYER_ERROR, GST_PLAYER_ERROR_FAILED,
+            "Failed to seek to %" GST_TIME_FORMAT, GST_TIME_ARGS (position)));
+
+  g_mutex_lock (&self->lock);
+}
+
+static gboolean
+gst_player_seek_internal (gpointer user_data)
+{
+  GstPlayer *self = GST_PLAYER (user_data);
+
+  g_mutex_lock (&self->lock);
+  gst_player_seek_internal_locked (self);
+  g_mutex_unlock (&self->lock);
+
+  return G_SOURCE_REMOVE;
+}
+
+static gboolean
+gst_player_set_rate_internal (gpointer user_data)
+{
+  GstPlayer *self = user_data;
+
+  g_mutex_lock (&self->lock);
+
+  self->seek_position = gst_player_get_position (self);
+
+  /* If there is no seek being dispatch to the main context currently do that,
+   * otherwise we just updated the rate so that it will be taken by
+   * the seek handler from the main context instead of the old one.
+   */
+  if (!self->seek_source) {
+    /* If no seek is pending then create new seek source */
+    if (!self->seek_pending) {
+      self->seek_source = g_idle_source_new ();
+      g_source_set_callback (self->seek_source,
+          (GSourceFunc) gst_player_seek_internal, self, NULL);
+      g_source_attach (self->seek_source, self->context);
+    }
+  }
+
+  g_mutex_unlock (&self->lock);
+
+  return G_SOURCE_REMOVE;
+}
+
+/**
+ * gst_player_set_rate:
+ * @player: #GstPlayer instance
+ * @rate: playback rate
+ *
+ * Playback at specified rate
+ */
+void
+gst_player_set_rate (GstPlayer * self, gdouble rate)
+{
+  g_return_if_fail (GST_IS_PLAYER (self));
+  g_return_if_fail (rate != 0.0);
+
+  g_mutex_lock (&self->lock);
+  self->rate = rate;
+  g_mutex_unlock (&self->lock);
+
+  gst_player_set_rate_internal (self);
+}
+
+/**
+ * gst_player_get_rate:
+ * @player: #GstPlayer instance
+ *
+ * Returns: current playback rate
+ */
+gdouble
+gst_player_get_rate (GstPlayer * self)
+{
+  g_return_val_if_fail (GST_IS_PLAYER (self), DEFAULT_RATE);
+
+  return self->rate;
+}
+
+static gboolean
+gst_player_set_position_update_interval_internal (gpointer user_data)
+{
+  GstPlayer *self = user_data;
+
+  g_mutex_lock (&self->lock);
+
+  if (self->tick_source) {
+    remove_tick_source (self);
+    add_tick_source (self);
+  }
+
+  g_mutex_unlock (&self->lock);
+
+  return G_SOURCE_REMOVE;
+}
+
+/**
+ * gst_player_set_position_update_interval:
+ * @player: #GstPlayer instance
+ * @interval: interval in ms
+ *
+ * Set interval in milliseconds between two position-updated signals.
+ * Pass 0 to stop updating the position.
+ */
+void
+gst_player_set_position_update_interval (GstPlayer * self, guint interval)
+{
+  g_return_if_fail (GST_IS_PLAYER (self));
+  g_return_if_fail (interval <= 10000);
+
+  g_mutex_lock (&self->lock);
+  self->position_update_interval_ms = interval;
+  g_mutex_unlock (&self->lock);
+
+  gst_player_set_position_update_interval_internal (self);
+}
+
+/**
+ * gst_player_get_position_update_interval:
+ * @player: #GstPlayer instance
+ *
+ * Returns: current position update interval in milliseconds
+ */
+guint
+gst_player_get_position_update_interval (GstPlayer * self)
+{
+  g_return_val_if_fail (GST_IS_PLAYER (self),
+      DEFAULT_POSITION_UPDATE_INTERVAL_MS);
+
+  return self->position_update_interval_ms;
+}
+
+/**
+ * gst_player_seek:
+ * @player: #GstPlayer instance
+ * @position: position to seek in nanoseconds
+ *
+ * Seeks the currently-playing stream to the absolute @position time
+ * in nanoseconds.
+ */
+void
+gst_player_seek (GstPlayer * self, GstClockTime position)
+{
+  g_return_if_fail (GST_IS_PLAYER (self));
+  g_return_if_fail (GST_CLOCK_TIME_IS_VALID (position));
+
+  g_mutex_lock (&self->lock);
+  if (self->media_info && !self->media_info->seekable) {
+    GST_DEBUG_OBJECT (self, "Media is not seekable");
+    g_mutex_unlock (&self->lock);
+    return;
+  }
+
+  self->seek_position = position;
+
+  /* If there is no seek being dispatch to the main context currently do that,
+   * otherwise we just updated the seek position so that it will be taken by
+   * the seek handler from the main context instead of the old one.
+   */
+  if (!self->seek_source) {
+    GstClockTime now = gst_util_get_timestamp ();
+
+    /* If no seek is pending or it was started more than 250 mseconds ago seek
+     * immediately, otherwise wait until the 250 mseconds have passed */
+    if (!self->seek_pending || (now - self->last_seek_time > 250 * GST_MSECOND)) {
+      self->seek_source = g_idle_source_new ();
+      g_source_set_callback (self->seek_source,
+          (GSourceFunc) gst_player_seek_internal, self, NULL);
+      GST_TRACE_OBJECT (self, "Dispatching seek to position %" GST_TIME_FORMAT,
+          GST_TIME_ARGS (position));
+      g_source_attach (self->seek_source, self->context);
+    } else {
+      guint delay = 250000 - (now - self->last_seek_time) / 1000;
+
+      /* Note that last_seek_time must be set to something at this point and
+       * it must be smaller than 250 mseconds */
+      self->seek_source = g_timeout_source_new (delay);
+      g_source_set_callback (self->seek_source,
+          (GSourceFunc) gst_player_seek_internal, self, NULL);
+
+      GST_TRACE_OBJECT (self,
+          "Delaying seek to position %" GST_TIME_FORMAT " by %u us",
+          GST_TIME_ARGS (position), delay);
+      g_source_attach (self->seek_source, self->context);
+    }
+  }
+  g_mutex_unlock (&self->lock);
+}
+
+/**
+ * gst_player_get_uri:
+ * @player: #GstPlayer instance
+ *
+ * Gets the URI of the currently-playing stream.
+ *
+ * Returns: (transfer full): a string containing the URI of the
+ * currently-playing stream. g_free() after usage.
+ */
+gchar *
+gst_player_get_uri (GstPlayer * self)
+{
+  gchar *val;
+
+  g_return_val_if_fail (GST_IS_PLAYER (self), DEFAULT_URI);
+
+  g_object_get (self, "uri", &val, NULL);
+
+  return val;
+}
+
+/**
+ * gst_player_set_uri:
+ * @player: #GstPlayer instance
+ * @uri: next URI to play.
+ *
+ * Sets the next URI to play.
+ */
+void
+gst_player_set_uri (GstPlayer * self, const gchar * val)
+{
+  g_return_if_fail (GST_IS_PLAYER (self));
+
+  g_object_set (self, "uri", val, NULL);
+}
+
+/**
+ * gst_player_get_position:
+ * @player: #GstPlayer instance
+ *
+ * Returns: the absolute position time, in nanoseconds, of the
+ * currently-playing stream.
+ */
+GstClockTime
+gst_player_get_position (GstPlayer * self)
+{
+  GstClockTime val;
+
+  g_return_val_if_fail (GST_IS_PLAYER (self), DEFAULT_POSITION);
+
+  g_object_get (self, "position", &val, NULL);
+
+  return val;
+}
+
+/**
+ * gst_player_get_duration:
+ * @player: #GstPlayer instance
+ *
+ * Retrieves the duration of the media stream that self represents.
+ *
+ * Returns: the duration of the currently-playing media stream, in
+ * nanoseconds.
+ */
+GstClockTime
+gst_player_get_duration (GstPlayer * self)
+{
+  GstClockTime val;
+
+  g_return_val_if_fail (GST_IS_PLAYER (self), DEFAULT_DURATION);
+
+  g_object_get (self, "duration", &val, NULL);
+
+  return val;
+}
+
+/**
+ * gst_player_get_volume:
+ * @player: #GstPlayer instance
+ *
+ * Returns the current volume level, as a percentage between 0 and 1.
+ *
+ * Returns: the volume as percentage between 0 and 1.
+ */
+gdouble
+gst_player_get_volume (GstPlayer * self)
+{
+  gdouble val;
+
+  g_return_val_if_fail (GST_IS_PLAYER (self), DEFAULT_VOLUME);
+
+  g_object_get (self, "volume", &val, NULL);
+
+  return val;
+}
+
+/**
+ * gst_player_set_volume:
+ * @player: #GstPlayer instance
+ * @val: the new volume level, as a percentage between 0 and 1
+ *
+ * Sets the volume level of the stream as a percentage between 0 and 1.
+ */
+void
+gst_player_set_volume (GstPlayer * self, gdouble val)
+{
+  g_return_if_fail (GST_IS_PLAYER (self));
+
+  g_object_set (self, "volume", val, NULL);
+}
+
+/**
+ * gst_player_get_mute:
+ * @player: #GstPlayer instance
+ *
+ * Returns: %TRUE if the currently-playing stream is muted.
+ */
+gboolean
+gst_player_get_mute (GstPlayer * self)
+{
+  gboolean val;
+
+  g_return_val_if_fail (GST_IS_PLAYER (self), DEFAULT_MUTE);
+
+  g_object_get (self, "mute", &val, NULL);
+
+  return val;
+}
+
+/**
+ * gst_player_set_mute:
+ * @player: #GstPlayer instance
+ * @val: Mute state the should be set
+ *
+ * %TRUE if the currently-playing stream should be muted.
+ */
+void
+gst_player_set_mute (GstPlayer * self, gboolean val)
+{
+  g_return_if_fail (GST_IS_PLAYER (self));
+
+  g_object_set (self, "mute", val, NULL);
+}
+
+/**
+ * gst_player_get_pipeline:
+ * @player: #GstPlayer instance
+ *
+ * Returns: (transfer full): The internal playbin instance
+ */
+GstElement *
+gst_player_get_pipeline (GstPlayer * self)
+{
+  GstElement *val;
+
+  g_return_val_if_fail (GST_IS_PLAYER (self), NULL);
+
+  g_object_get (self, "pipeline", &val, NULL);
+
+  return val;
+}
+
+/**
+ * gst_player_get_media_info:
+ * @player: #GstPlayer instance
+ *
+ * A Function to get the current media info #GstPlayerMediaInfo instance.
+ *
+ * Returns: (transfer full): media info instance.
+ *
+ * The caller should free it with g_object_unref()
+ */
+GstPlayerMediaInfo *
+gst_player_get_media_info (GstPlayer * self)
+{
+  GstPlayerMediaInfo *info;
+
+  g_return_val_if_fail (GST_IS_PLAYER (self), NULL);
+
+  if (!self->media_info)
+    return NULL;
+
+  g_mutex_lock (&self->lock);
+  info = gst_player_media_info_copy (self->media_info);
+  g_mutex_unlock (&self->lock);
+
+  return info;
+}
+
+/**
+ * gst_player_get_current_audio_track:
+ * @player: #GstPlayer instance
+ *
+ * A Function to get current audio #GstPlayerAudioInfo instance.
+ *
+ * Returns: (transfer full): current audio track.
+ *
+ * The caller should free it with g_object_unref()
+ */
+GstPlayerAudioInfo *
+gst_player_get_current_audio_track (GstPlayer * self)
+{
+  GstPlayerAudioInfo *info;
+
+  g_return_val_if_fail (GST_IS_PLAYER (self), NULL);
+
+  if (!is_track_enabled (self, GST_PLAY_FLAG_AUDIO))
+    return NULL;
+
+  info = (GstPlayerAudioInfo *) gst_player_stream_info_get_current (self,
+      "current-audio", GST_TYPE_PLAYER_AUDIO_INFO);
+  return info;
+}
+
+/**
+ * gst_player_get_current_video_track:
+ * @player: #GstPlayer instance
+ *
+ * A Function to get current video #GstPlayerVideoInfo instance.
+ *
+ * Returns: (transfer full): current video track.
+ *
+ * The caller should free it with g_object_unref()
+ */
+GstPlayerVideoInfo *
+gst_player_get_current_video_track (GstPlayer * self)
+{
+  GstPlayerVideoInfo *info;
+
+  g_return_val_if_fail (GST_IS_PLAYER (self), NULL);
+
+  if (!is_track_enabled (self, GST_PLAY_FLAG_VIDEO))
+    return NULL;
+
+  info = (GstPlayerVideoInfo *) gst_player_stream_info_get_current (self,
+      "current-video", GST_TYPE_PLAYER_VIDEO_INFO);
+  return info;
+}
+
+/**
+ * gst_player_get_current_subtitle_track:
+ * @player: #GstPlayer instance
+ *
+ * A Function to get current subtitle #GstPlayerSubtitleInfo instance.
+ *
+ * Returns: (transfer none): current subtitle track.
+ *
+ * The caller should free it with g_object_unref()
+ */
+GstPlayerSubtitleInfo *
+gst_player_get_current_subtitle_track (GstPlayer * self)
+{
+  GstPlayerSubtitleInfo *info;
+
+  g_return_val_if_fail (GST_IS_PLAYER (self), NULL);
+
+  if (!is_track_enabled (self, GST_PLAY_FLAG_SUBTITLE))
+    return NULL;
+
+  info = (GstPlayerSubtitleInfo *) gst_player_stream_info_get_current (self,
+      "current-text", GST_TYPE_PLAYER_SUBTITLE_INFO);
+  return info;
+}
+
+/**
+ * gst_player_set_audio_track:
+ * @player: #GstPlayer instance
+ * @stream_index: stream index
+ *
+ * Returns: %TRUE or %FALSE
+ *
+ * Sets the audio track @stream_idex.
+ */
+gboolean
+gst_player_set_audio_track (GstPlayer * self, gint stream_index)
+{
+  GstPlayerStreamInfo *info;
+
+  g_return_val_if_fail (GST_IS_PLAYER (self), 0);
+
+  g_mutex_lock (&self->lock);
+  info = gst_player_stream_info_find (self->media_info,
+      GST_TYPE_PLAYER_AUDIO_INFO, stream_index);
+  g_mutex_unlock (&self->lock);
+  if (!info) {
+    GST_ERROR_OBJECT (self, "invalid audio stream index %d", stream_index);
+    return FALSE;
+  }
+
+  g_object_set (G_OBJECT (self->playbin), "current-audio", stream_index, NULL);
+  GST_DEBUG_OBJECT (self, "set stream index '%d'", stream_index);
+  return TRUE;
+}
+
+/**
+ * gst_player_set_video_track:
+ * @player: #GstPlayer instance
+ * @stream_index: stream index
+ *
+ * Returns: %TRUE or %FALSE
+ *
+ * Sets the video track @stream_index.
+ */
+gboolean
+gst_player_set_video_track (GstPlayer * self, gint stream_index)
+{
+  GstPlayerStreamInfo *info;
+
+  g_return_val_if_fail (GST_IS_PLAYER (self), 0);
+
+  /* check if stream_index exist in our internal media_info list */
+  g_mutex_lock (&self->lock);
+  info = gst_player_stream_info_find (self->media_info,
+      GST_TYPE_PLAYER_VIDEO_INFO, stream_index);
+  g_mutex_unlock (&self->lock);
+  if (!info) {
+    GST_ERROR_OBJECT (self, "invalid video stream index %d", stream_index);
+    return FALSE;
+  }
+
+  g_object_set (G_OBJECT (self->playbin), "current-video", stream_index, NULL);
+  GST_DEBUG_OBJECT (self, "set stream index '%d'", stream_index);
+  return TRUE;
+}
+
+/**
+ * gst_player_set_subtitle_track:
+ * @player: #GstPlayer instance
+ * @stream_index: stream index
+ *
+ * Returns: %TRUE or %FALSE
+ *
+ * Sets the subtitle strack @stream_index.
+ */
+gboolean
+gst_player_set_subtitle_track (GstPlayer * self, gint stream_index)
+{
+  GstPlayerStreamInfo *info;
+
+  g_return_val_if_fail (GST_IS_PLAYER (self), 0);
+
+  g_mutex_lock (&self->lock);
+  info = gst_player_stream_info_find (self->media_info,
+      GST_TYPE_PLAYER_SUBTITLE_INFO, stream_index);
+  g_mutex_unlock (&self->lock);
+  if (!info) {
+    GST_ERROR_OBJECT (self, "invalid subtitle stream index %d", stream_index);
+    return FALSE;
+  }
+
+  g_object_set (G_OBJECT (self->playbin), "current-text", stream_index, NULL);
+  GST_DEBUG_OBJECT (self, "set stream index '%d'", stream_index);
+  return TRUE;
+}
+
+/**
+ * gst_player_set_audio_track_enabled:
+ * @player: #GstPlayer instance
+ * @enabled: TRUE or FALSE
+ *
+ * Enable or disable the current audio track.
+ */
+void
+gst_player_set_audio_track_enabled (GstPlayer * self, gboolean enabled)
+{
+  g_return_if_fail (GST_IS_PLAYER (self));
+
+  if (enabled)
+    player_set_flag (self, GST_PLAY_FLAG_AUDIO);
+  else
+    player_clear_flag (self, GST_PLAY_FLAG_AUDIO);
+
+  GST_DEBUG_OBJECT (self, "track is '%s'", enabled ? "Enabled" : "Disabled");
+}
+
+/**
+ * gst_player_set_video_track_enabled:
+ * @player: #GstPlayer instance
+ * @enabled: TRUE or FALSE
+ *
+ * Enable or disable the current video track.
+ */
+void
+gst_player_set_video_track_enabled (GstPlayer * self, gboolean enabled)
+{
+  g_return_if_fail (GST_IS_PLAYER (self));
+
+  if (enabled)
+    player_set_flag (self, GST_PLAY_FLAG_VIDEO);
+  else
+    player_clear_flag (self, GST_PLAY_FLAG_VIDEO);
+
+  GST_DEBUG_OBJECT (self, "track is '%s'", enabled ? "Enabled" : "Disabled");
+}
+
+/**
+ * gst_player_set_subtitle_track_enabled:
+ * @player: #GstPlayer instance
+ * @enabled: TRUE or FALSE
+ *
+ * Enable or disable the current subtitle track.
+ */
+void
+gst_player_set_subtitle_track_enabled (GstPlayer * self, gboolean enabled)
+{
+  g_return_if_fail (GST_IS_PLAYER (self));
+
+  if (enabled)
+    player_set_flag (self, GST_PLAY_FLAG_SUBTITLE);
+  else
+    player_clear_flag (self, GST_PLAY_FLAG_SUBTITLE);
+
+  GST_DEBUG_OBJECT (self, "track is '%s'", enabled ? "Enabled" : "Disabled");
+}
+
+/**
+ * gst_player_set_subtitle_uri:
+ * @player: #GstPlayer instance
+ * @uri: subtitle URI
+ *
+ * Returns: %TRUE or %FALSE
+ *
+ * Sets the external subtitle URI.
+ */
+gboolean
+gst_player_set_subtitle_uri (GstPlayer * self, const gchar * suburi)
+{
+  g_return_val_if_fail (GST_IS_PLAYER (self), FALSE);
+
+  g_mutex_lock (&self->lock);
+  g_free (self->suburi);
+  self->suburi = g_strdup (suburi);
+  g_mutex_unlock (&self->lock);
+
+  gst_player_set_suburi_internal (self);
+
+  return TRUE;
+}
+
+/**
+ * gst_player_get_subtitle_uri:
+ * @player: #GstPlayer instance
+ *
+ * current subtitle URI
+ *
+ * Returns: (transfer full): URI of the current external subtitle.
+ *   g_free() after usage.
+ */
+gchar *
+gst_player_get_subtitle_uri (GstPlayer * self)
+{
+  gchar *val = NULL;
+
+  g_return_val_if_fail (GST_IS_PLAYER (self), NULL);
+
+  g_object_get (self, "suburi", &val, NULL);
+
+  return val;
+}
+
+/**
+ * gst_player_set_visualization:
+ * @player: #GstPlayer instance
+ * @name: visualization element obtained from
+ * #gst_player_visualizations_get()
+ *
+ * Returns: %TRUE if the visualizations was set correctly. Otherwise,
+ * %FALSE.
+ */
+gboolean
+gst_player_set_visualization (GstPlayer * self, const gchar * name)
+{
+  g_return_val_if_fail (GST_IS_PLAYER (self), FALSE);
+
+  g_mutex_lock (&self->lock);
+  if (self->current_vis_element) {
+    gst_object_unref (self->current_vis_element);
+    self->current_vis_element = NULL;
+  }
+
+  if (name) {
+    self->current_vis_element = gst_element_factory_make (name, NULL);
+    if (!self->current_vis_element)
+      goto error_no_element;
+    gst_object_ref_sink (self->current_vis_element);
+  }
+  g_object_set (self->playbin, "vis-plugin", self->current_vis_element, NULL);
+
+  g_mutex_unlock (&self->lock);
+  GST_DEBUG_OBJECT (self, "set vis-plugin to '%s'", name);
+
+  return TRUE;
+
+error_no_element:
+  g_mutex_unlock (&self->lock);
+  GST_WARNING_OBJECT (self, "could not find visualization '%s'", name);
+  return FALSE;
+}
+
+/**
+ * gst_player_get_current_visualization:
+ * @player: #GstPlayer instance
+ *
+ * Returns: (transfer full): Name of the currently enabled visualization.
+ *   g_free() after usage.
+ */
+gchar *
+gst_player_get_current_visualization (GstPlayer * self)
+{
+  gchar *name = NULL;
+  GstElement *vis_plugin = NULL;
+
+  g_return_val_if_fail (GST_IS_PLAYER (self), NULL);
+
+  if (!is_track_enabled (self, GST_PLAY_FLAG_VIS))
+    return NULL;
+
+  g_object_get (self->playbin, "vis-plugin", &vis_plugin, NULL);
+
+  if (vis_plugin) {
+    GstElementFactory *factory = gst_element_get_factory (vis_plugin);
+    if (factory)
+      name = g_strdup (gst_plugin_feature_get_name (factory));
+    gst_object_unref (vis_plugin);
+  }
+
+  GST_DEBUG_OBJECT (self, "vis-plugin '%s' %p", name, vis_plugin);
+
+  return name;
+}
+
+/**
+ * gst_player_set_visualization_enabled:
+ * @player: #GstPlayer instance
+ * @enabled: TRUE or FALSE
+ *
+ * Enable or disable the visualization.
+ */
+void
+gst_player_set_visualization_enabled (GstPlayer * self, gboolean enabled)
+{
+  g_return_if_fail (GST_IS_PLAYER (self));
+
+  if (enabled)
+    player_set_flag (self, GST_PLAY_FLAG_VIS);
+  else
+    player_clear_flag (self, GST_PLAY_FLAG_VIS);
+
+  GST_DEBUG_OBJECT (self, "visualization is '%s'",
+      enabled ? "Enabled" : "Disabled");
+}
+
+struct CBChannelMap
+{
+  const gchar *label;           /* channel label name */
+  const gchar *name;            /* get_name () */
+};
+
+static const struct CBChannelMap cb_channel_map[] = {
+  /* GST_PLAYER_COLOR_BALANCE_BRIGHTNESS */ {"BRIGHTNESS", "brightness"},
+  /* GST_PLAYER_COLOR_BALANCE_CONTRAST   */ {"CONTRAST", "contrast"},
+  /* GST_PLAYER_COLOR_BALANCE_SATURATION */ {"SATURATION", "saturation"},
+  /* GST_PLAYER_COLOR_BALANCE_HUE        */ {"HUE", "hue"},
+};
+
+static GstColorBalanceChannel *
+gst_player_color_balance_find_channel (GstPlayer * self,
+    GstPlayerColorBalanceType type)
+{
+  GstColorBalanceChannel *channel;
+  const GList *l, *channels;
+
+  if (type < GST_PLAYER_COLOR_BALANCE_BRIGHTNESS ||
+      type > GST_PLAYER_COLOR_BALANCE_HUE)
+    return NULL;
+
+  channels =
+      gst_color_balance_list_channels (GST_COLOR_BALANCE (self->playbin));
+  for (l = channels; l; l = l->next) {
+    channel = l->data;
+    if (g_strrstr (channel->label, cb_channel_map[type].label))
+      return channel;
+  }
+
+  return NULL;
+}
+
+/**
+ * gst_player_has_color_balance:
+ * @player:#GstPlayer instance
+ *
+ * Checks whether the @player has color balance support available.
+ *
+ * Returns: %TRUE if @player has color balance support. Otherwise,
+ *   %FALSE.
+ */
+gboolean
+gst_player_has_color_balance (GstPlayer * self)
+{
+  const GList *channels;
+
+  g_return_val_if_fail (GST_IS_PLAYER (self), FALSE);
+
+  if (!GST_IS_COLOR_BALANCE (self->playbin))
+    return FALSE;
+
+  channels =
+      gst_color_balance_list_channels (GST_COLOR_BALANCE (self->playbin));
+  return (channels != NULL);
+}
+
+/**
+ * gst_player_set_color_balance:
+ * @player: #GstPlayer instance
+ * @type: #GstPlayerColorBalanceType
+ * @value: The new value for the @type, ranged [0,1]
+ *
+ * Sets the current value of the indicated channel @type to the passed
+ * value.
+ */
+void
+gst_player_set_color_balance (GstPlayer * self, GstPlayerColorBalanceType type,
+    gdouble value)
+{
+  GstColorBalanceChannel *channel;
+  gdouble new_val;
+
+  g_return_if_fail (GST_IS_PLAYER (self));
+  g_return_if_fail (value >= 0.0 && value <= 1.0);
+
+  if (!GST_IS_COLOR_BALANCE (self->playbin))
+    return;
+
+  channel = gst_player_color_balance_find_channel (self, type);
+  if (!channel)
+    return;
+
+  value = CLAMP (value, 0.0, 1.0);
+
+  /* Convert to channel range */
+  new_val = channel->min_value + value * ((gdouble) channel->max_value -
+      (gdouble) channel->min_value);
+
+  gst_color_balance_set_value (GST_COLOR_BALANCE (self->playbin), channel,
+      new_val);
+}
+
+/**
+ * gst_player_get_color_balance:
+ * @player: #GstPlayer instance
+ * @type: #GstPlayerColorBalanceType
+ *
+ * Retrieve the current value of the indicated @type.
+ *
+ * Returns: The current value of @type, between [0,1]. In case of
+ *   error -1 is returned.
+ */
+gdouble
+gst_player_get_color_balance (GstPlayer * self, GstPlayerColorBalanceType type)
+{
+  GstColorBalanceChannel *channel;
+  gint value;
+
+  g_return_val_if_fail (GST_IS_PLAYER (self), -1);
+
+  if (!GST_IS_COLOR_BALANCE (self->playbin))
+    return -1;
+
+  channel = gst_player_color_balance_find_channel (self, type);
+  if (!channel)
+    return -1;
+
+  value = gst_color_balance_get_value (GST_COLOR_BALANCE (self->playbin),
+      channel);
+
+  return ((gdouble) value -
+      (gdouble) channel->min_value) / ((gdouble) channel->max_value -
+      (gdouble) channel->min_value);
+}
+
+#define C_ENUM(v) ((gint) v)
+#define C_FLAGS(v) ((guint) v)
+
+GType
+gst_player_color_balance_type_get_type (void)
+{
+  static gsize id = 0;
+  static const GEnumValue values[] = {
+    {C_ENUM (GST_PLAYER_COLOR_BALANCE_HUE), "GST_PLAYER_COLOR_BALANCE_HUE",
+        "hue"},
+    {C_ENUM (GST_PLAYER_COLOR_BALANCE_BRIGHTNESS),
+        "GST_PLAYER_COLOR_BALANCE_BRIGHTNESS", "brightness"},
+    {C_ENUM (GST_PLAYER_COLOR_BALANCE_SATURATION),
+        "GST_PLAYER_COLOR_BALANCE_SATURATION", "saturation"},
+    {C_ENUM (GST_PLAYER_COLOR_BALANCE_CONTRAST),
+        "GST_PLAYER_COLOR_BALANCE_CONTRAST", "contrast"},
+    {0, NULL, NULL}
+  };
+
+  if (g_once_init_enter (&id)) {
+    GType tmp = g_enum_register_static ("GstPlayerColorBalanceType", values);
+    g_once_init_leave (&id, tmp);
+  }
+
+  return (GType) id;
+}
+
+/**
+ * gst_player_color_balance_type_get_name:
+ * @type: a #GstPlayerColorBalanceType
+ *
+ * Gets a string representing the given color balance type.
+ *
+ * Returns: (transfer none): a string with the name of the color
+ *   balance type.
+ */
+const gchar *
+gst_player_color_balance_type_get_name (GstPlayerColorBalanceType type)
+{
+  g_return_val_if_fail (type >= GST_PLAYER_COLOR_BALANCE_BRIGHTNESS &&
+      type <= GST_PLAYER_COLOR_BALANCE_HUE, NULL);
+
+  return cb_channel_map[type].name;
+}
+
+GType
+gst_player_state_get_type (void)
+{
+  static gsize id = 0;
+  static const GEnumValue values[] = {
+    {C_ENUM (GST_PLAYER_STATE_STOPPED), "GST_PLAYER_STATE_STOPPED", "stopped"},
+    {C_ENUM (GST_PLAYER_STATE_BUFFERING), "GST_PLAYER_STATE_BUFFERING",
+        "buffering"},
+    {C_ENUM (GST_PLAYER_STATE_PAUSED), "GST_PLAYER_STATE_PAUSED", "paused"},
+    {C_ENUM (GST_PLAYER_STATE_PLAYING), "GST_PLAYER_STATE_PLAYING", "playing"},
+    {0, NULL, NULL}
+  };
+
+  if (g_once_init_enter (&id)) {
+    GType tmp = g_enum_register_static ("GstPlayerState", values);
+    g_once_init_leave (&id, tmp);
+  }
+
+  return (GType) id;
+}
+
+/**
+ * gst_player_state_get_name:
+ * @state: a #GstPlayerState
+ *
+ * Gets a string representing the given state.
+ *
+ * Returns: (transfer none): a string with the name of the state.
+ */
+const gchar *
+gst_player_state_get_name (GstPlayerState state)
+{
+  switch (state) {
+    case GST_PLAYER_STATE_STOPPED:
+      return "stopped";
+    case GST_PLAYER_STATE_BUFFERING:
+      return "buffering";
+    case GST_PLAYER_STATE_PAUSED:
+      return "paused";
+    case GST_PLAYER_STATE_PLAYING:
+      return "playing";
+  }
+
+  g_assert_not_reached ();
+  return NULL;
+}
+
+GType
+gst_player_error_get_type (void)
+{
+  static gsize id = 0;
+  static const GEnumValue values[] = {
+    {C_ENUM (GST_PLAYER_ERROR_FAILED), "GST_PLAYER_ERROR_FAILED", "failed"},
+    {0, NULL, NULL}
+  };
+
+  if (g_once_init_enter (&id)) {
+    GType tmp = g_enum_register_static ("GstPlayerError", values);
+    g_once_init_leave (&id, tmp);
+  }
+
+  return (GType) id;
+}
+
+/**
+ * gst_player_error_get_name:
+ * @error: a #GstPlayerError
+ *
+ * Gets a string representing the given error.
+ *
+ * Returns: (transfer none): a string with the given error.
+ */
+const gchar *
+gst_player_error_get_name (GstPlayerError error)
+{
+  switch (error) {
+    case GST_PLAYER_ERROR_FAILED:
+      return "failed";
+  }
+
+  g_assert_not_reached ();
+  return NULL;
+}
diff --git a/gst-libs/gst/player/gstplayer.h b/gst-libs/gst/player/gstplayer.h
new file mode 100644
index 0000000..3391b0f
--- /dev/null
+++ b/gst-libs/gst/player/gstplayer.h
@@ -0,0 +1,183 @@
+/* GStreamer
+ *
+ * Copyright (C) 2014-2015 Sebastian Dröge <sebastian@centricular.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifndef __GST_PLAYER_H__
+#define __GST_PLAYER_H__
+
+#include <gst/gst.h>
+#include <gst/player/gstplayer-types.h>
+#include <gst/player/gstplayer-signal-dispatcher.h>
+#include <gst/player/gstplayer-video-renderer.h>
+#include <gst/player/gstplayer-media-info.h>
+
+G_BEGIN_DECLS
+
+GType        gst_player_state_get_type                (void);
+#define      GST_TYPE_PLAYER_STATE                    (gst_player_state_get_type ())
+
+/**
+ * GstPlayerState:
+ * @GST_PLAYER_STATE_STOPPED: the player is stopped.
+ * @GST_PLAYER_STATE_BUFFERING: the player is buffering.
+ * @GST_PLAYER_STATE_PAUSED: the player is paused.
+ * @GST_PLAYER_STATE_PLAYING: the player is currently playing a
+ * stream.
+ */
+typedef enum
+{
+  GST_PLAYER_STATE_STOPPED,
+  GST_PLAYER_STATE_BUFFERING,
+  GST_PLAYER_STATE_PAUSED,
+  GST_PLAYER_STATE_PLAYING
+} GstPlayerState;
+
+const gchar *gst_player_state_get_name                (GstPlayerState state);
+
+GQuark       gst_player_error_quark                   (void);
+GType        gst_player_error_get_type                (void);
+#define      GST_PLAYER_ERROR                         (gst_player_error_quark ())
+#define      GST_TYPE_PLAYER_ERROR                    (gst_player_error_get_type ())
+
+/**
+ * GstPlayerError:
+ * @GST_PLAYER_ERROR_FAILED: generic error.
+ */
+typedef enum {
+  GST_PLAYER_ERROR_FAILED = 0
+} GstPlayerError;
+
+const gchar *gst_player_error_get_name                (GstPlayerError error);
+
+GType gst_player_color_balance_type_get_type          (void);
+#define GST_TYPE_PLAYER_COLOR_BALANCE_TYPE            (gst_player_color_balance_type_get_type ())
+
+/**
+ * GstPlayerColorBalanceType:
+ * @GST_PLAYER_COLOR_BALANCE_BRIGHTNESS: brightness or black level.
+ * @GST_PLAYER_COLOR_BALANCE_CONTRAST: contrast or luma gain.
+ * @GST_PLAYER_COLOR_BALANCE_SATURATION: color saturation or chroma
+ * gain.
+ * @GST_PLAYER_COLOR_BALANCE_HUE: hue or color balance.
+ */
+typedef enum
+{
+  GST_PLAYER_COLOR_BALANCE_BRIGHTNESS,
+  GST_PLAYER_COLOR_BALANCE_CONTRAST,
+  GST_PLAYER_COLOR_BALANCE_SATURATION,
+  GST_PLAYER_COLOR_BALANCE_HUE,
+} GstPlayerColorBalanceType;
+
+const gchar *gst_player_color_balance_type_get_name   (GstPlayerColorBalanceType type);
+
+#define GST_TYPE_PLAYER             (gst_player_get_type ())
+#define GST_IS_PLAYER(obj)          (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GST_TYPE_PLAYER))
+#define GST_IS_PLAYER_CLASS(klass)  (G_TYPE_CHECK_CLASS_TYPE ((klass), GST_TYPE_PLAYER))
+#define GST_PLAYER_GET_CLASS(obj)   (G_TYPE_INSTANCE_GET_CLASS ((obj), GST_TYPE_PLAYER, GstPlayerClass))
+#define GST_PLAYER(obj)             (G_TYPE_CHECK_INSTANCE_CAST ((obj), GST_TYPE_PLAYER, GstPlayer))
+#define GST_PLAYER_CLASS(klass)     (G_TYPE_CHECK_CLASS_CAST ((klass), GST_TYPE_PLAYER, GstPlayerClass))
+#define GST_PLAYER_CAST(obj)        ((GstPlayer*)(obj))
+
+
+GType        gst_player_get_type                      (void);
+
+GstPlayer *  gst_player_new                           (GstPlayerVideoRenderer * video_renderer, GstPlayerSignalDispatcher * signal_dispatcher);
+
+void         gst_player_play                          (GstPlayer    * player);
+void         gst_player_pause                         (GstPlayer    * player);
+void         gst_player_stop                          (GstPlayer    * player);
+
+void         gst_player_seek                          (GstPlayer    * player,
+                                                       GstClockTime   position);
+void         gst_player_set_rate                      (GstPlayer    * player,
+                                                       gdouble        rate);
+gdouble      gst_player_get_rate                      (GstPlayer    * player);
+
+void         gst_player_set_position_update_interval  (GstPlayer    * player,
+                                                       guint          interval);
+guint        gst_player_get_position_update_interval  (GstPlayer    * player);
+
+gchar *      gst_player_get_uri                       (GstPlayer    * player);
+void         gst_player_set_uri                       (GstPlayer    * player,
+                                                       const gchar  * uri);
+
+GstClockTime gst_player_get_position                  (GstPlayer    * player);
+GstClockTime gst_player_get_duration                  (GstPlayer    * player);
+
+gdouble      gst_player_get_volume                    (GstPlayer    * player);
+void         gst_player_set_volume                    (GstPlayer    * player,
+                                                       gdouble        val);
+
+gboolean     gst_player_get_mute                      (GstPlayer    * player);
+void         gst_player_set_mute                      (GstPlayer    * player,
+                                                       gboolean       val);
+
+GstElement * gst_player_get_pipeline                  (GstPlayer    * player);
+
+void         gst_player_set_video_track_enabled       (GstPlayer    * player,
+                                                       gboolean enabled);
+
+void         gst_player_set_audio_track_enabled       (GstPlayer    * player,
+                                                       gboolean enabled);
+
+void         gst_player_set_subtitle_track_enabled    (GstPlayer    * player,
+                                                       gboolean enabled);
+
+gboolean     gst_player_set_audio_track               (GstPlayer    *player,
+                                                       gint stream_index);
+
+gboolean     gst_player_set_video_track               (GstPlayer    *player,
+                                                       gint stream_index);
+
+gboolean     gst_player_set_subtitle_track            (GstPlayer    *player,
+                                                       gint stream_index);
+
+GstPlayerMediaInfo * gst_player_get_media_info        (GstPlayer    * player);
+
+GstPlayerAudioInfo * gst_player_get_current_audio_track
+                                                      (GstPlayer    * player);
+
+GstPlayerVideoInfo * gst_player_get_current_video_track
+                                                      (GstPlayer    * player);
+
+GstPlayerSubtitleInfo * gst_player_get_current_subtitle_track
+                                                      (GstPlayer    * player);
+
+gboolean     gst_player_set_subtitle_uri              (GstPlayer    * player,
+                                                       const gchar *uri);
+gchar *      gst_player_get_subtitle_uri              (GstPlayer    * player);
+
+gboolean     gst_player_set_visualization             (GstPlayer    * player,
+                                                       const gchar *name);
+
+void         gst_player_set_visualization_enabled     (GstPlayer    * player,
+                                                       gboolean enabled);
+
+gchar *      gst_player_get_current_visualization     (GstPlayer    * player);
+
+gboolean     gst_player_has_color_balance             (GstPlayer    * player);
+void         gst_player_set_color_balance             (GstPlayer    * player,
+                                                       GstPlayerColorBalanceType type,
+                                                       gdouble value);
+gdouble      gst_player_get_color_balance             (GstPlayer    * player,
+                                                       GstPlayerColorBalanceType type);
+
+G_END_DECLS
+
+#endif /* __GST_PLAYER_H__ */
diff --git a/gst-libs/gst/player/player.h b/gst-libs/gst/player/player.h
new file mode 100644
index 0000000..0fc91d6
--- /dev/null
+++ b/gst-libs/gst/player/player.h
@@ -0,0 +1,30 @@
+/* GStreamer
+ *
+ * Copyright (C) 2014 Sebastian Dröge <sebastian@centricular.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifndef __PLAYER_H__
+#define __PLAYER_H__
+
+#include <gst/player/gstplayer.h>
+#include <gst/player/gstplayer-media-info.h>
+#include <gst/player/gstplayer-g-main-context-signal-dispatcher.h>
+#include <gst/player/gstplayer-video-overlay-video-renderer.h>
+#include <gst/player/gstplayer-visualization.h>
+
+#endif /* __PLAYER_H__ */
diff --git a/gst-libs/gst/uridownloader/Makefile.in b/gst-libs/gst/uridownloader/Makefile.in
index 4fb5da8..c71fae9 100644
--- a/gst-libs/gst/uridownloader/Makefile.in
+++ b/gst-libs/gst/uridownloader/Makefile.in
@@ -116,16 +116,15 @@
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
 	$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
-	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gsettings.m4 \
-	$(top_srcdir)/m4/gst-fionread.m4 $(top_srcdir)/m4/gst-sdl.m4 \
-	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
-	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
-	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libgcrypt.m4 \
-	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
-	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
-	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
-	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
-	$(top_srcdir)/configure.ac
+	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gst-fionread.m4 \
+	$(top_srcdir)/m4/gst-sdl.m4 $(top_srcdir)/m4/iconv.m4 \
+	$(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \
+	$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
+	$(top_srcdir)/m4/libgcrypt.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
+	$(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 DIST_COMMON = $(srcdir)/Makefile.am \
@@ -262,6 +261,8 @@
 CLUTTER_X11_LIBS = @CLUTTER_X11_LIBS@
 CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
+CUDA_CFLAGS = @CUDA_CFLAGS@
+CUDA_LIBS = @CUDA_LIBS@
 CURL_CFLAGS = @CURL_CFLAGS@
 CURL_LIBS = @CURL_LIBS@
 CXX = @CXX@
@@ -299,6 +300,8 @@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
+EGL_CFLAGS = @EGL_CFLAGS@
+EGL_LIBS = @EGL_LIBS@
 EGREP = @EGREP@
 ERROR_CFLAGS = @ERROR_CFLAGS@
 ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
@@ -307,7 +310,6 @@
 EXIF_CFLAGS = @EXIF_CFLAGS@
 EXIF_LIBS = @EXIF_LIBS@
 FAAC_LIBS = @FAAC_LIBS@
-FAAD_IS_NEAAC = @FAAD_IS_NEAAC@
 FAAD_LIBS = @FAAD_LIBS@
 FFLAGS = @FFLAGS@
 FGREP = @FGREP@
@@ -326,8 +328,9 @@
 GIO_LIBS = @GIO_LIBS@
 GIO_UNIX_CFLAGS = @GIO_UNIX_CFLAGS@
 GIO_UNIX_LIBS = @GIO_UNIX_LIBS@
+GLES2_CFLAGS = @GLES2_CFLAGS@
+GLES2_LIBS = @GLES2_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
-GLIB_COMPILE_SCHEMAS = @GLIB_COMPILE_SCHEMAS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
@@ -344,16 +347,17 @@
 GMODULE_NO_EXPORT_LIBS = @GMODULE_NO_EXPORT_LIBS@
 GMSGFMT = @GMSGFMT@
 GMSGFMT_015 = @GMSGFMT_015@
+GNUSTL_CFLAGS = @GNUSTL_CFLAGS@
+GNUSTL_LIBS = @GNUSTL_LIBS@
 GRAPHENE_CFLAGS = @GRAPHENE_CFLAGS@
 GRAPHENE_LIBS = @GRAPHENE_LIBS@
 GREP = @GREP@
-GSETTINGS_CFLAGS = @GSETTINGS_CFLAGS@
-GSETTINGS_DISABLE_SCHEMAS_COMPILE = @GSETTINGS_DISABLE_SCHEMAS_COMPILE@
-GSETTINGS_LIBS = @GSETTINGS_LIBS@
 GSM_LIBS = @GSM_LIBS@
 GSTPB_PLUGINS_DIR = @GSTPB_PLUGINS_DIR@
 GSTPB_PREFIX = @GSTPB_PREFIX@
 GST_AGE = @GST_AGE@
+GST_ALLOCATORS_CFLAGS = @GST_ALLOCATORS_CFLAGS@
+GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
 GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
 GST_API_VERSION = @GST_API_VERSION@
 GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
@@ -379,6 +383,8 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PBUTILS_CFLAGS = @GST_PBUTILS_CFLAGS@
+GST_PBUTILS_LIBS = @GST_PBUTILS_LIBS@
 GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BAD_CFLAGS = @GST_PLUGINS_BAD_CFLAGS@
@@ -404,6 +410,8 @@
 GST_PREFIX = @GST_PREFIX@
 GST_REVISION = @GST_REVISION@
 GST_TOOLS_DIR = @GST_TOOLS_DIR@
+GST_VIDEO_CFLAGS = @GST_VIDEO_CFLAGS@
+GST_VIDEO_LIBS = @GST_VIDEO_LIBS@
 GTK3_CFLAGS = @GTK3_CFLAGS@
 GTK3_GL_CFLAGS = @GTK3_GL_CFLAGS@
 GTK3_GL_LIBS = @GTK3_GL_LIBS@
@@ -505,6 +513,7 @@
 LTLIBICONV = @LTLIBICONV@
 LTLIBINTL = @LTLIBINTL@
 LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
 MANIFEST_TOOL = @MANIFEST_TOOL@
@@ -518,8 +527,6 @@
 MODPLUG_LIBS = @MODPLUG_LIBS@
 MPEG2ENC_CFLAGS = @MPEG2ENC_CFLAGS@
 MPEG2ENC_LIBS = @MPEG2ENC_LIBS@
-MPG123_CFLAGS = @MPG123_CFLAGS@
-MPG123_LIBS = @MPG123_LIBS@
 MPLEX_CFLAGS = @MPLEX_CFLAGS@
 MPLEX_LDFLAGS = @MPLEX_LDFLAGS@
 MPLEX_LIBS = @MPLEX_LIBS@
@@ -535,6 +542,8 @@
 NETTLE_LIBS = @NETTLE_LIBS@
 NM = @NM@
 NMEDIT = @NMEDIT@
+NVENCODE_CFLAGS = @NVENCODE_CFLAGS@
+NVENCODE_LIBS = @NVENCODE_LIBS@
 OBJC = @OBJC@
 OBJCDEPMODE = @OBJCDEPMODE@
 OBJCFLAGS = @OBJCFLAGS@
@@ -592,16 +601,18 @@
 PYTHON_PLATFORM = @PYTHON_PLATFORM@
 PYTHON_PREFIX = @PYTHON_PREFIX@
 PYTHON_VERSION = @PYTHON_VERSION@
+QT_ANDROID_CFLAGS = @QT_ANDROID_CFLAGS@
+QT_ANDROID_LIBS = @QT_ANDROID_LIBS@
 QT_CFLAGS = @QT_CFLAGS@
 QT_LIBS = @QT_LIBS@
+QT_MAC_CFLAGS = @QT_MAC_CFLAGS@
+QT_MAC_LIBS = @QT_MAC_LIBS@
 QT_WAYLAND_CFLAGS = @QT_WAYLAND_CFLAGS@
 QT_WAYLAND_LIBS = @QT_WAYLAND_LIBS@
 QT_X11_CFLAGS = @QT_X11_CFLAGS@
 QT_X11_LIBS = @QT_X11_LIBS@
 RANLIB = @RANLIB@
 RCC = @RCC@
-RSVG_2_36_2_CFLAGS = @RSVG_2_36_2_CFLAGS@
-RSVG_2_36_2_LIBS = @RSVG_2_36_2_LIBS@
 RSVG_CFLAGS = @RSVG_CFLAGS@
 RSVG_LIBS = @RSVG_LIBS@
 RTMP_CFLAGS = @RTMP_CFLAGS@
@@ -653,6 +664,7 @@
 VOAACENC_LIBS = @VOAACENC_LIBS@
 VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
 VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VULKAN_LIBS = @VULKAN_LIBS@
 WARNING_CFLAGS = @WARNING_CFLAGS@
 WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
 WARNING_OBJCFLAGS = @WARNING_OBJCFLAGS@
@@ -663,6 +675,7 @@
 WAYLAND_LIBS = @WAYLAND_LIBS@
 WEBP_CFLAGS = @WEBP_CFLAGS@
 WEBP_LIBS = @WEBP_LIBS@
+WGET = @WGET@
 WILDMIDI_CFLAGS = @WILDMIDI_CFLAGS@
 WILDMIDI_LIBS = @WILDMIDI_LIBS@
 WINKS_LIBS = @WINKS_LIBS@
@@ -672,6 +685,8 @@
 X11_LIBS = @X11_LIBS@
 X265_CFLAGS = @X265_CFLAGS@
 X265_LIBS = @X265_LIBS@
+XCB_CFLAGS = @XCB_CFLAGS@
+XCB_LIBS = @XCB_LIBS@
 XCOMPOSITE_CFLAGS = @XCOMPOSITE_CFLAGS@
 XCOMPOSITE_LIBS = @XCOMPOSITE_LIBS@
 XGETTEXT = @XGETTEXT@
@@ -709,7 +724,6 @@
 docdir = @docdir@
 dvidir = @dvidir@
 exec_prefix = @exec_prefix@
-gsettingsschemadir = @gsettingsschemadir@
 host = @host@
 host_alias = @host_alias@
 host_cpu = @host_cpu@
diff --git a/gst-libs/gst/video/Makefile.am b/gst-libs/gst/video/Makefile.am
index 5108281..6cdad6f 100644
--- a/gst-libs/gst/video/Makefile.am
+++ b/gst-libs/gst/video/Makefile.am
@@ -23,4 +23,5 @@
 
 libgstbadvideo_@GST_API_VERSION@_la_LDFLAGS = $(GST_LIB_LDFLAGS) $(GST_ALL_LDFLAGS) $(GST_LT_LDFLAGS)
 
-noinst_HEADERS = gstvideoaggregatorpad.h gstvideoaggregator.h
+libgstvideo_@GST_API_VERSION@includedir = $(includedir)/gstreamer-@GST_API_VERSION@/gst/video
+libgstvideo_@GST_API_VERSION@include_HEADERS = gstvideoaggregatorpad.h gstvideoaggregator.h
diff --git a/gst-libs/gst/video/Makefile.in b/gst-libs/gst/video/Makefile.in
index 3a4a6d4..df117f4 100644
--- a/gst-libs/gst/video/Makefile.in
+++ b/gst-libs/gst/video/Makefile.in
@@ -116,19 +116,19 @@
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
 	$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
-	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gsettings.m4 \
-	$(top_srcdir)/m4/gst-fionread.m4 $(top_srcdir)/m4/gst-sdl.m4 \
-	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
-	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
-	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libgcrypt.m4 \
-	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
-	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
-	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
-	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
-	$(top_srcdir)/configure.ac
+	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gst-fionread.m4 \
+	$(top_srcdir)/m4/gst-sdl.m4 $(top_srcdir)/m4/iconv.m4 \
+	$(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \
+	$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
+	$(top_srcdir)/m4/libgcrypt.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
+	$(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
-DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \
+DIST_COMMON = $(srcdir)/Makefile.am \
+	$(libgstvideo_@GST_API_VERSION@include_HEADERS) \
 	$(am__DIST_COMMON)
 mkinstalldirs = $(install_sh) -d
 CONFIG_HEADER = $(top_builddir)/config.h
@@ -161,7 +161,8 @@
     || { echo " ( cd '$$dir' && rm -f" $$files ")"; \
          $(am__cd) "$$dir" && rm -f $$files; }; \
   }
-am__installdirs = "$(DESTDIR)$(libdir)"
+am__installdirs = "$(DESTDIR)$(libdir)" \
+	"$(DESTDIR)$(libgstvideo_@GST_API_VERSION@includedir)"
 LTLIBRARIES = $(lib_LTLIBRARIES)
 am__DEPENDENCIES_1 =
 libgstbadvideo_@GST_API_VERSION@_la_DEPENDENCIES = $(top_builddir)/gst-libs/gst/base/libgstbadbase-$(GST_API_VERSION).la \
@@ -225,26 +226,8 @@
     n|no|NO) false;; \
     *) (install-info --version) >/dev/null 2>&1;; \
   esac
-HEADERS = $(noinst_HEADERS)
+HEADERS = $(libgstvideo_@GST_API_VERSION@include_HEADERS)
 am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
-# Read a list of newline-separated strings from the standard input,
-# and print each of them once, without duplicates.  Input order is
-# *not* preserved.
-am__uniquify_input = $(AWK) '\
-  BEGIN { nonempty = 0; } \
-  { items[$$0] = 1; nonempty = 1; } \
-  END { if (nonempty) { for (i in items) print i; }; } \
-'
-# Make sure the list of sources is unique.  This is necessary because,
-# e.g., the same source file might be shared among _SOURCES variables
-# for different programs/libraries.
-am__define_uniq_tagged_files = \
-  list='$(am__tagged_files)'; \
-  unique=`for i in $$list; do \
-    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-  done | $(am__uniquify_input)`
-ETAGS = etags
-CTAGS = ctags
 am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp
 DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
 ACLOCAL = @ACLOCAL@
@@ -282,6 +265,8 @@
 CLUTTER_X11_LIBS = @CLUTTER_X11_LIBS@
 CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
+CUDA_CFLAGS = @CUDA_CFLAGS@
+CUDA_LIBS = @CUDA_LIBS@
 CURL_CFLAGS = @CURL_CFLAGS@
 CURL_LIBS = @CURL_LIBS@
 CXX = @CXX@
@@ -319,6 +304,8 @@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
+EGL_CFLAGS = @EGL_CFLAGS@
+EGL_LIBS = @EGL_LIBS@
 EGREP = @EGREP@
 ERROR_CFLAGS = @ERROR_CFLAGS@
 ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
@@ -327,7 +314,6 @@
 EXIF_CFLAGS = @EXIF_CFLAGS@
 EXIF_LIBS = @EXIF_LIBS@
 FAAC_LIBS = @FAAC_LIBS@
-FAAD_IS_NEAAC = @FAAD_IS_NEAAC@
 FAAD_LIBS = @FAAD_LIBS@
 FFLAGS = @FFLAGS@
 FGREP = @FGREP@
@@ -346,8 +332,9 @@
 GIO_LIBS = @GIO_LIBS@
 GIO_UNIX_CFLAGS = @GIO_UNIX_CFLAGS@
 GIO_UNIX_LIBS = @GIO_UNIX_LIBS@
+GLES2_CFLAGS = @GLES2_CFLAGS@
+GLES2_LIBS = @GLES2_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
-GLIB_COMPILE_SCHEMAS = @GLIB_COMPILE_SCHEMAS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
@@ -364,16 +351,17 @@
 GMODULE_NO_EXPORT_LIBS = @GMODULE_NO_EXPORT_LIBS@
 GMSGFMT = @GMSGFMT@
 GMSGFMT_015 = @GMSGFMT_015@
+GNUSTL_CFLAGS = @GNUSTL_CFLAGS@
+GNUSTL_LIBS = @GNUSTL_LIBS@
 GRAPHENE_CFLAGS = @GRAPHENE_CFLAGS@
 GRAPHENE_LIBS = @GRAPHENE_LIBS@
 GREP = @GREP@
-GSETTINGS_CFLAGS = @GSETTINGS_CFLAGS@
-GSETTINGS_DISABLE_SCHEMAS_COMPILE = @GSETTINGS_DISABLE_SCHEMAS_COMPILE@
-GSETTINGS_LIBS = @GSETTINGS_LIBS@
 GSM_LIBS = @GSM_LIBS@
 GSTPB_PLUGINS_DIR = @GSTPB_PLUGINS_DIR@
 GSTPB_PREFIX = @GSTPB_PREFIX@
 GST_AGE = @GST_AGE@
+GST_ALLOCATORS_CFLAGS = @GST_ALLOCATORS_CFLAGS@
+GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
 GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
 GST_API_VERSION = @GST_API_VERSION@
 GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
@@ -399,6 +387,8 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PBUTILS_CFLAGS = @GST_PBUTILS_CFLAGS@
+GST_PBUTILS_LIBS = @GST_PBUTILS_LIBS@
 GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BAD_CFLAGS = @GST_PLUGINS_BAD_CFLAGS@
@@ -424,6 +414,8 @@
 GST_PREFIX = @GST_PREFIX@
 GST_REVISION = @GST_REVISION@
 GST_TOOLS_DIR = @GST_TOOLS_DIR@
+GST_VIDEO_CFLAGS = @GST_VIDEO_CFLAGS@
+GST_VIDEO_LIBS = @GST_VIDEO_LIBS@
 GTK3_CFLAGS = @GTK3_CFLAGS@
 GTK3_GL_CFLAGS = @GTK3_GL_CFLAGS@
 GTK3_GL_LIBS = @GTK3_GL_LIBS@
@@ -525,6 +517,7 @@
 LTLIBICONV = @LTLIBICONV@
 LTLIBINTL = @LTLIBINTL@
 LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
 MANIFEST_TOOL = @MANIFEST_TOOL@
@@ -538,8 +531,6 @@
 MODPLUG_LIBS = @MODPLUG_LIBS@
 MPEG2ENC_CFLAGS = @MPEG2ENC_CFLAGS@
 MPEG2ENC_LIBS = @MPEG2ENC_LIBS@
-MPG123_CFLAGS = @MPG123_CFLAGS@
-MPG123_LIBS = @MPG123_LIBS@
 MPLEX_CFLAGS = @MPLEX_CFLAGS@
 MPLEX_LDFLAGS = @MPLEX_LDFLAGS@
 MPLEX_LIBS = @MPLEX_LIBS@
@@ -555,6 +546,8 @@
 NETTLE_LIBS = @NETTLE_LIBS@
 NM = @NM@
 NMEDIT = @NMEDIT@
+NVENCODE_CFLAGS = @NVENCODE_CFLAGS@
+NVENCODE_LIBS = @NVENCODE_LIBS@
 OBJC = @OBJC@
 OBJCDEPMODE = @OBJCDEPMODE@
 OBJCFLAGS = @OBJCFLAGS@
@@ -612,16 +605,18 @@
 PYTHON_PLATFORM = @PYTHON_PLATFORM@
 PYTHON_PREFIX = @PYTHON_PREFIX@
 PYTHON_VERSION = @PYTHON_VERSION@
+QT_ANDROID_CFLAGS = @QT_ANDROID_CFLAGS@
+QT_ANDROID_LIBS = @QT_ANDROID_LIBS@
 QT_CFLAGS = @QT_CFLAGS@
 QT_LIBS = @QT_LIBS@
+QT_MAC_CFLAGS = @QT_MAC_CFLAGS@
+QT_MAC_LIBS = @QT_MAC_LIBS@
 QT_WAYLAND_CFLAGS = @QT_WAYLAND_CFLAGS@
 QT_WAYLAND_LIBS = @QT_WAYLAND_LIBS@
 QT_X11_CFLAGS = @QT_X11_CFLAGS@
 QT_X11_LIBS = @QT_X11_LIBS@
 RANLIB = @RANLIB@
 RCC = @RCC@
-RSVG_2_36_2_CFLAGS = @RSVG_2_36_2_CFLAGS@
-RSVG_2_36_2_LIBS = @RSVG_2_36_2_LIBS@
 RSVG_CFLAGS = @RSVG_CFLAGS@
 RSVG_LIBS = @RSVG_LIBS@
 RTMP_CFLAGS = @RTMP_CFLAGS@
@@ -673,6 +668,7 @@
 VOAACENC_LIBS = @VOAACENC_LIBS@
 VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
 VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VULKAN_LIBS = @VULKAN_LIBS@
 WARNING_CFLAGS = @WARNING_CFLAGS@
 WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
 WARNING_OBJCFLAGS = @WARNING_OBJCFLAGS@
@@ -683,6 +679,7 @@
 WAYLAND_LIBS = @WAYLAND_LIBS@
 WEBP_CFLAGS = @WEBP_CFLAGS@
 WEBP_LIBS = @WEBP_LIBS@
+WGET = @WGET@
 WILDMIDI_CFLAGS = @WILDMIDI_CFLAGS@
 WILDMIDI_LIBS = @WILDMIDI_LIBS@
 WINKS_LIBS = @WINKS_LIBS@
@@ -692,6 +689,8 @@
 X11_LIBS = @X11_LIBS@
 X265_CFLAGS = @X265_CFLAGS@
 X265_LIBS = @X265_LIBS@
+XCB_CFLAGS = @XCB_CFLAGS@
+XCB_LIBS = @XCB_LIBS@
 XCOMPOSITE_CFLAGS = @XCOMPOSITE_CFLAGS@
 XCOMPOSITE_LIBS = @XCOMPOSITE_LIBS@
 XGETTEXT = @XGETTEXT@
@@ -729,7 +728,6 @@
 docdir = @docdir@
 dvidir = @dvidir@
 exec_prefix = @exec_prefix@
-gsettingsschemadir = @gsettingsschemadir@
 host = @host@
 host_alias = @host_alias@
 host_cpu = @host_cpu@
@@ -791,7 +789,8 @@
 	$(GST_BASE_LIBS) $(GST_LIBS) $(ORC_LIBS) $(LIBM)
 
 libgstbadvideo_@GST_API_VERSION@_la_LDFLAGS = $(GST_LIB_LDFLAGS) $(GST_ALL_LDFLAGS) $(GST_LT_LDFLAGS)
-noinst_HEADERS = gstvideoaggregatorpad.h gstvideoaggregator.h
+libgstvideo_@GST_API_VERSION@includedir = $(includedir)/gstreamer-@GST_API_VERSION@/gst/video
+libgstvideo_@GST_API_VERSION@include_HEADERS = gstvideoaggregatorpad.h gstvideoaggregator.h
 all: all-am
 
 .SUFFIXES:
@@ -908,58 +907,33 @@
 
 clean-libtool:
 	-rm -rf .libs _libs
+install-libgstvideo_@GST_API_VERSION@includeHEADERS: $(libgstvideo_@GST_API_VERSION@include_HEADERS)
+	@$(NORMAL_INSTALL)
+	@list='$(libgstvideo_@GST_API_VERSION@include_HEADERS)'; test -n "$(libgstvideo_@GST_API_VERSION@includedir)" || list=; \
+	if test -n "$$list"; then \
+	  echo " $(MKDIR_P) '$(DESTDIR)$(libgstvideo_@GST_API_VERSION@includedir)'"; \
+	  $(MKDIR_P) "$(DESTDIR)$(libgstvideo_@GST_API_VERSION@includedir)" || exit 1; \
+	fi; \
+	for p in $$list; do \
+	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+	  echo "$$d$$p"; \
+	done | $(am__base_list) | \
+	while read files; do \
+	  echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(libgstvideo_@GST_API_VERSION@includedir)'"; \
+	  $(INSTALL_HEADER) $$files "$(DESTDIR)$(libgstvideo_@GST_API_VERSION@includedir)" || exit $$?; \
+	done
 
-ID: $(am__tagged_files)
-	$(am__define_uniq_tagged_files); mkid -fID $$unique
-tags: tags-am
-TAGS: tags
+uninstall-libgstvideo_@GST_API_VERSION@includeHEADERS:
+	@$(NORMAL_UNINSTALL)
+	@list='$(libgstvideo_@GST_API_VERSION@include_HEADERS)'; test -n "$(libgstvideo_@GST_API_VERSION@includedir)" || list=; \
+	files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+	dir='$(DESTDIR)$(libgstvideo_@GST_API_VERSION@includedir)'; $(am__uninstall_files_from_dir)
+tags TAGS:
 
-tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
-	set x; \
-	here=`pwd`; \
-	$(am__define_uniq_tagged_files); \
-	shift; \
-	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
-	  test -n "$$unique" || unique=$$empty_fix; \
-	  if test $$# -gt 0; then \
-	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
-	      "$$@" $$unique; \
-	  else \
-	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
-	      $$unique; \
-	  fi; \
-	fi
-ctags: ctags-am
+ctags CTAGS:
 
-CTAGS: ctags
-ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
-	$(am__define_uniq_tagged_files); \
-	test -z "$(CTAGS_ARGS)$$unique" \
-	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
-	     $$unique
+cscope cscopelist:
 
-GTAGS:
-	here=`$(am__cd) $(top_builddir) && pwd` \
-	  && $(am__cd) $(top_srcdir) \
-	  && gtags -i $(GTAGS_ARGS) "$$here"
-cscopelist: cscopelist-am
-
-cscopelist-am: $(am__tagged_files)
-	list='$(am__tagged_files)'; \
-	case "$(srcdir)" in \
-	  [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
-	  *) sdir=$(subdir)/$(srcdir) ;; \
-	esac; \
-	for i in $$list; do \
-	  if test -f "$$i"; then \
-	    echo "$(subdir)/$$i"; \
-	  else \
-	    echo "$$sdir/$$i"; \
-	  fi; \
-	done >> $(top_builddir)/cscope.files
-
-distclean-tags:
-	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
 
 distdir: $(DISTFILES)
 	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
@@ -995,7 +969,7 @@
 check: check-am
 all-am: Makefile $(LTLIBRARIES) $(HEADERS)
 installdirs:
-	for dir in "$(DESTDIR)$(libdir)"; do \
+	for dir in "$(DESTDIR)$(libdir)" "$(DESTDIR)$(libgstvideo_@GST_API_VERSION@includedir)"; do \
 	  test -z "$$dir" || $(MKDIR_P) "$$dir"; \
 	done
 install: install-am
@@ -1037,8 +1011,7 @@
 distclean: distclean-am
 	-rm -rf ./$(DEPDIR)
 	-rm -f Makefile
-distclean-am: clean-am distclean-compile distclean-generic \
-	distclean-tags
+distclean-am: clean-am distclean-compile distclean-generic
 
 dvi: dvi-am
 
@@ -1052,7 +1025,7 @@
 
 info-am:
 
-install-data-am:
+install-data-am: install-libgstvideo_@GST_API_VERSION@includeHEADERS
 
 install-dvi: install-dvi-am
 
@@ -1098,23 +1071,27 @@
 
 ps-am:
 
-uninstall-am: uninstall-libLTLIBRARIES
+uninstall-am: uninstall-libLTLIBRARIES \
+	uninstall-libgstvideo_@GST_API_VERSION@includeHEADERS
 
 .MAKE: install-am install-strip
 
-.PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \
-	clean-libLTLIBRARIES clean-libtool cscopelist-am ctags \
-	ctags-am distclean distclean-compile distclean-generic \
-	distclean-libtool distclean-tags distdir dvi dvi-am html \
-	html-am info info-am install install-am install-data \
-	install-data-am install-dvi install-dvi-am install-exec \
-	install-exec-am install-html install-html-am install-info \
-	install-info-am install-libLTLIBRARIES install-man install-pdf \
-	install-pdf-am install-ps install-ps-am install-strip \
-	installcheck installcheck-am installdirs maintainer-clean \
-	maintainer-clean-generic mostlyclean mostlyclean-compile \
-	mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
-	tags tags-am uninstall uninstall-am uninstall-libLTLIBRARIES
+.PHONY: all all-am check check-am clean clean-generic \
+	clean-libLTLIBRARIES clean-libtool cscopelist-am ctags-am \
+	distclean distclean-compile distclean-generic \
+	distclean-libtool distdir dvi dvi-am html html-am info info-am \
+	install install-am install-data install-data-am install-dvi \
+	install-dvi-am install-exec install-exec-am install-html \
+	install-html-am install-info install-info-am \
+	install-libLTLIBRARIES \
+	install-libgstvideo_@GST_API_VERSION@includeHEADERS \
+	install-man install-pdf install-pdf-am install-ps \
+	install-ps-am install-strip installcheck installcheck-am \
+	installdirs maintainer-clean maintainer-clean-generic \
+	mostlyclean mostlyclean-compile mostlyclean-generic \
+	mostlyclean-libtool pdf pdf-am ps ps-am tags-am uninstall \
+	uninstall-am uninstall-libLTLIBRARIES \
+	uninstall-libgstvideo_@GST_API_VERSION@includeHEADERS
 
 .PRECIOUS: Makefile
 
diff --git a/gst-libs/gst/video/gstvideoaggregator.c b/gst-libs/gst/video/gstvideoaggregator.c
index ea1e810..1bf6ea0 100644
--- a/gst-libs/gst/video/gstvideoaggregator.c
+++ b/gst-libs/gst/video/gstvideoaggregator.c
@@ -532,86 +532,6 @@
   g_hash_table_unref (formats_table);
 }
 
-/* WITH GST_VIDEO_AGGREGATOR_LOCK TAKEN
- * NOTE: After calling that method you **have to** call
- *       gst_videoaggregator_update_src_caps (without releasing
- *       the GST_VIDEO_AGGREGATOR_LOCK in between)
- */
-static gboolean
-gst_videoaggregator_update_converters (GstVideoAggregator * vagg)
-{
-  GList *tmp;
-  GstVideoFormat best_format;
-  GstVideoInfo best_info;
-  gboolean at_least_one_alpha = FALSE;
-  GstCaps *downstream_caps;
-  GstAggregator *agg = GST_AGGREGATOR (vagg);
-
-  GstVideoAggregatorClass *vagg_class = GST_VIDEO_AGGREGATOR_GET_CLASS (vagg);
-  GstVideoAggregatorPadClass *vaggpad_class = g_type_class_peek
-      (GST_AGGREGATOR_GET_CLASS (vagg)->sinkpads_type);
-
-  best_format = GST_VIDEO_FORMAT_UNKNOWN;
-  gst_video_info_init (&best_info);
-
-  downstream_caps = gst_pad_get_allowed_caps (agg->srcpad);
-
-  if (!downstream_caps || gst_caps_is_empty (downstream_caps)) {
-    GST_INFO_OBJECT (vagg, "No downstream caps found %"
-        GST_PTR_FORMAT, downstream_caps);
-    if (downstream_caps)
-      gst_caps_unref (downstream_caps);
-    return FALSE;
-  }
-
-
-  if (vagg_class->find_best_format) {
-    vagg_class->find_best_format (vagg, downstream_caps, &best_info,
-        &at_least_one_alpha);
-
-    best_format = GST_VIDEO_INFO_FORMAT (&best_info);
-  }
-
-  if (best_format == GST_VIDEO_FORMAT_UNKNOWN) {
-    downstream_caps = gst_caps_fixate (downstream_caps);
-    gst_video_info_from_caps (&best_info, downstream_caps);
-    best_format = GST_VIDEO_INFO_FORMAT (&best_info);
-  }
-
-  gst_caps_unref (downstream_caps);
-
-  if (at_least_one_alpha
-      && !(best_info.finfo->flags & GST_VIDEO_FORMAT_FLAG_ALPHA)) {
-    GST_ELEMENT_ERROR (vagg, CORE, NEGOTIATION,
-        ("At least one of the input pads contains alpha, but downstream can't support alpha."),
-        ("Either convert your inputs to not contain alpha or add a videoconvert after the aggregator"));
-    return FALSE;
-  }
-
-  vagg->info = best_info;
-
-  GST_DEBUG_OBJECT (vagg,
-      "The output format will now be : %d with chroma : %s",
-      best_format, gst_video_chroma_to_string (best_info.chroma_site));
-
-  if (vaggpad_class->set_info) {
-    GST_OBJECT_LOCK (vagg);
-    /* Then browse the sinks once more, setting or unsetting conversion if needed */
-    for (tmp = GST_ELEMENT (vagg)->sinkpads; tmp; tmp = tmp->next) {
-      GstVideoAggregatorPad *pad = GST_VIDEO_AGGREGATOR_PAD (tmp->data);
-
-      if (!vaggpad_class->set_info (pad, vagg, &pad->info, &best_info)) {
-        GST_OBJECT_UNLOCK (vagg);
-
-        return FALSE;
-      }
-    }
-    GST_OBJECT_UNLOCK (vagg);
-  }
-
-  return TRUE;
-}
-
 /* WITH GST_VIDEO_AGGREGATOR_LOCK TAKEN */
 static gboolean
 gst_videoaggregator_src_setcaps (GstVideoAggregator * vagg, GstCaps * caps)
@@ -662,25 +582,22 @@
   return ret;
 }
 
-/* WITH GST_VIDEO_AGGREGATOR_LOCK TAKEN */
-static gboolean
-gst_videoaggregator_update_src_caps (GstVideoAggregator * vagg)
+static GstCaps *
+gst_videoaggregator_default_fixate_caps (GstVideoAggregator * vagg,
+    GstCaps * caps)
 {
-  GList *l;
   gint best_width = -1, best_height = -1;
-  gdouble best_fps = -1, cur_fps;
   gint best_fps_n = -1, best_fps_d = -1;
-  gboolean ret = TRUE;
-  GstElementClass *klass = GST_ELEMENT_GET_CLASS (vagg);
-  GstVideoAggregatorClass *vagg_klass = (GstVideoAggregatorClass *) klass;
-  GstAggregator *agg = GST_AGGREGATOR (vagg);
+  gdouble best_fps = -1.;
+  GstStructure *s;
+  GList *l;
 
   GST_OBJECT_LOCK (vagg);
   for (l = GST_ELEMENT (vagg)->sinkpads; l; l = l->next) {
     GstVideoAggregatorPad *mpad = l->data;
-    gint this_width, this_height;
     gint fps_n, fps_d;
     gint width, height;
+    gdouble cur_fps;
 
     fps_n = GST_VIDEO_INFO_FPS_N (&mpad->info);
     fps_d = GST_VIDEO_INFO_FPS_D (&mpad->info);
@@ -690,13 +607,10 @@
     if (width == 0 || height == 0)
       continue;
 
-    this_width = width;
-    this_height = height;
-
-    if (best_width < this_width)
-      best_width = this_width;
-    if (best_height < this_height)
-      best_height = this_height;
+    if (best_width < width)
+      best_width = width;
+    if (best_height < height)
+      best_height = height;
 
     if (fps_d == 0)
       cur_fps = 0.0;
@@ -717,88 +631,142 @@
     best_fps = 25.0;
   }
 
-  if (best_width > 0 && best_height > 0 && best_fps > 0) {
-    GstCaps *caps, *peercaps, *info_caps;
-    GstStructure *s;
-    GstVideoInfo info;
-    int i;
+  s = gst_caps_get_structure (caps, 0);
+  gst_structure_fixate_field_nearest_int (s, "width", best_width);
+  gst_structure_fixate_field_nearest_int (s, "height", best_height);
+  gst_structure_fixate_field_nearest_fraction (s, "framerate", best_fps_n,
+      best_fps_d);
+  if (gst_structure_has_field (s, "pixel-aspect-ratio"))
+    gst_structure_fixate_field_nearest_fraction (s, "pixel-aspect-ratio", 1, 1);
+  caps = gst_caps_fixate (caps);
 
-    /* Initialize the video info with our target format and
-     * the best width and height and framerate. Then copy over
-     * all other fields as we negotiated them before
-     */
-    gst_video_info_set_format (&info, GST_VIDEO_INFO_FORMAT (&vagg->info),
-        best_width, best_height);
-    info.fps_n = best_fps_n;
-    info.fps_d = best_fps_d;
-    info.chroma_site = vagg->info.chroma_site;
-    info.par_n = vagg->info.par_n;
-    info.par_d = vagg->info.par_d;
-    info.colorimetry = vagg->info.colorimetry;
-    info.flags = vagg->info.flags;
-    info.interlace_mode = vagg->info.interlace_mode;
+  return caps;
+}
 
-    info_caps = gst_video_info_to_caps (&info);
+static GstCaps *
+gst_videoaggregator_default_update_caps (GstVideoAggregator * vagg,
+    GstCaps * caps, GstCaps * filter)
+{
+  GstCaps *ret;
 
-    if (vagg_klass->update_caps) {
-      if (!(caps = vagg_klass->update_caps (vagg, info_caps))) {
-        gst_caps_unref (info_caps);
-        ret = FALSE;
-        goto done;
-      }
-      gst_caps_unref (info_caps);
-    } else {
-      caps = info_caps;
+  if (filter) {
+    ret = gst_caps_intersect (caps, filter);
+  } else {
+    ret = gst_caps_ref (caps);
+  }
+
+  return ret;
+}
+
+/* WITH GST_VIDEO_AGGREGATOR_LOCK TAKEN */
+static gboolean
+gst_videoaggregator_update_src_caps (GstVideoAggregator * vagg)
+{
+  GstVideoAggregatorClass *vagg_klass = GST_VIDEO_AGGREGATOR_GET_CLASS (vagg);
+  GstVideoAggregatorPadClass *vaggpad_klass = g_type_class_peek
+      (GST_AGGREGATOR_GET_CLASS (vagg)->sinkpads_type);
+  GstAggregator *agg = GST_AGGREGATOR (vagg);
+  gboolean ret = TRUE, at_least_one_pad_configured = FALSE;
+  GstVideoFormat best_format;
+  GstVideoInfo best_info;
+  gboolean at_least_one_alpha = FALSE;
+  GstCaps *downstream_caps;
+  GList *l;
+
+  best_format = GST_VIDEO_FORMAT_UNKNOWN;
+  gst_video_info_init (&best_info);
+
+  downstream_caps = gst_pad_get_allowed_caps (agg->srcpad);
+
+  if (!downstream_caps || gst_caps_is_empty (downstream_caps)) {
+    GST_INFO_OBJECT (vagg, "No downstream caps found %"
+        GST_PTR_FORMAT, downstream_caps);
+    if (downstream_caps)
+      gst_caps_unref (downstream_caps);
+    return FALSE;
+  }
+
+  if (vagg_klass->find_best_format) {
+    vagg_klass->find_best_format (vagg, downstream_caps, &best_info,
+        &at_least_one_alpha);
+
+    best_format = GST_VIDEO_INFO_FORMAT (&best_info);
+  }
+
+  if (best_format == GST_VIDEO_FORMAT_UNKNOWN) {
+    GstCaps *tmp = gst_caps_fixate (gst_caps_ref (downstream_caps));
+    gst_video_info_from_caps (&best_info, tmp);
+    best_format = GST_VIDEO_INFO_FORMAT (&best_info);
+    gst_caps_unref (tmp);
+  }
+
+  if (at_least_one_alpha
+      && !(best_info.finfo->flags & GST_VIDEO_FORMAT_FLAG_ALPHA)) {
+    GST_ELEMENT_ERROR (vagg, CORE, NEGOTIATION,
+        ("At least one of the input pads contains alpha, but downstream can't support alpha."),
+        ("Either convert your inputs to not contain alpha or add a videoconvert after the aggregator"));
+    return FALSE;
+  }
+
+  GST_DEBUG_OBJECT (vagg,
+      "The output format will now be : %d with chroma : %s",
+      best_format, gst_video_chroma_to_string (best_info.chroma_site));
+
+  GST_OBJECT_LOCK (vagg);
+  for (l = GST_ELEMENT (vagg)->sinkpads; l; l = l->next) {
+    GstVideoAggregatorPad *mpad = l->data;
+
+    if (GST_VIDEO_INFO_WIDTH (&mpad->info) == 0
+        || GST_VIDEO_INFO_HEIGHT (&mpad->info) == 0)
+      continue;
+
+    at_least_one_pad_configured = TRUE;
+    break;
+  }
+  GST_OBJECT_UNLOCK (vagg);
+
+  if (at_least_one_pad_configured) {
+    GstCaps *caps, *peercaps;
+
+    peercaps = gst_pad_peer_query_caps (agg->srcpad, NULL);
+
+    g_assert (vagg_klass->update_caps);
+    if (!(caps = vagg_klass->update_caps (vagg, downstream_caps, peercaps))) {
+      GST_WARNING_OBJECT (vagg, "Subclass failed to update provided caps");
+      gst_caps_unref (downstream_caps);
+      if (peercaps)
+        gst_caps_unref (peercaps);
+      ret = FALSE;
+      goto done;
     }
-
-    /* If the sub-class allows it, allow size/framerate changes */
-    if (!vagg_klass->preserve_update_caps_result) {
-      s = gst_caps_get_structure (caps, 0);
-      gst_structure_get (s, "width", G_TYPE_INT, &best_width, "height",
-          G_TYPE_INT, &best_height, NULL);
-
-      for (i = 0; i < gst_caps_get_size (caps); i++) {
-        s = gst_caps_get_structure (caps, i);
-        gst_structure_set (s, "width", GST_TYPE_INT_RANGE, 1, G_MAXINT,
-            "height", GST_TYPE_INT_RANGE, 1, G_MAXINT, "framerate",
-            GST_TYPE_FRACTION_RANGE, 0, 1, G_MAXINT, 1, NULL);
-      }
-    }
-
-    peercaps = gst_pad_peer_query_caps (agg->srcpad, caps);
-    if (peercaps) {
-      GstCaps *tmp;
-
-      tmp = gst_caps_intersect (caps, peercaps);
-      GST_DEBUG_OBJECT (vagg, "intersecting %" GST_PTR_FORMAT
-          " with peer caps %" GST_PTR_FORMAT " result %" GST_PTR_FORMAT, caps,
-          peercaps, tmp);
-
-      gst_caps_unref (caps);
+    gst_caps_unref (downstream_caps);
+    if (peercaps)
       gst_caps_unref (peercaps);
-      caps = tmp;               /* pass ownership */
-      if (gst_caps_is_empty (caps)) {
-        GST_DEBUG_OBJECT (vagg, "empty caps");
+
+    if (!gst_caps_is_fixed (caps)) {
+      g_assert (vagg_klass->fixate_caps);
+
+      caps = gst_caps_make_writable (caps);
+      if (!(caps = vagg_klass->fixate_caps (vagg, caps))) {
+        GST_WARNING_OBJECT (vagg, "Subclass failed to fixate provided caps");
         ret = FALSE;
-        gst_caps_unref (caps);
         goto done;
       }
+    }
 
-      caps = gst_caps_truncate (caps);
-      s = gst_caps_get_structure (caps, 0);
-      gst_structure_fixate_field_nearest_int (s, "width", best_width);
-      gst_structure_fixate_field_nearest_int (s, "height", best_height);
-      gst_structure_fixate_field_nearest_fraction (s, "framerate", best_fps_n,
-          best_fps_d);
-      gst_structure_fixate_field_nearest_fraction (s, "pixel-aspect-ratio", 1,
-          1);
+    gst_video_info_from_caps (&vagg->info, caps);
 
-      /* fixate the the rest of the fields */
-      caps = gst_caps_fixate (caps);
+    if (vaggpad_klass->set_info) {
+      /* Then browse the sinks once more, setting or unsetting conversion if needed */
+      for (l = GST_ELEMENT (vagg)->sinkpads; l; l = l->next) {
+        GstVideoAggregatorPad *pad = GST_VIDEO_AGGREGATOR_PAD (l->data);
 
-      gst_structure_get_int (s, "width", &info.width);
-      gst_structure_get_int (s, "height", &info.height);
-      gst_structure_get_fraction (s, "framerate", &info.fps_n, &info.fps_d);
+        if (!vaggpad_klass->set_info (pad, vagg, &pad->info, &vagg->info)) {
+          GST_OBJECT_UNLOCK (vagg);
+
+          return FALSE;
+        }
+      }
     }
 
     if (gst_videoaggregator_src_setcaps (vagg, caps)) {
@@ -924,15 +892,7 @@
 
   GST_DEBUG_OBJECT (pad, "Get caps with filter: %" GST_PTR_FORMAT, filter);
 
-  srccaps = gst_pad_get_current_caps (srcpad);
-  if (srccaps == NULL) {
-    srccaps = gst_pad_peer_query_caps (srcpad, template_caps);
-    GST_DEBUG_OBJECT (pad, "No output caps, using possible formats: %"
-        GST_PTR_FORMAT, srccaps);
-  } else {
-    GST_DEBUG_OBJECT (pad, "Using output caps: %" GST_PTR_FORMAT, srccaps);
-  }
-
+  srccaps = gst_pad_peer_query_caps (srcpad, template_caps);
   srccaps = gst_caps_make_writable (srccaps);
   has_alpha = gst_videoaggregator_caps_has_alpha (srccaps);
 
@@ -982,9 +942,9 @@
   gboolean live;
 
   GST_DEBUG_OBJECT (vagg,
-      "Updating QoS: proportion %lf, diff %s%" GST_TIME_FORMAT ", timestamp %"
-      GST_TIME_FORMAT, proportion, (diff < 0) ? "-" : "",
-      GST_TIME_ARGS (ABS (diff)), GST_TIME_ARGS (timestamp));
+      "Updating QoS: proportion %lf, diff %" GST_STIME_FORMAT ", timestamp %"
+      GST_TIME_FORMAT, proportion, GST_STIME_ARGS (diff),
+      GST_TIME_ARGS (timestamp));
 
   live =
       GST_CLOCK_TIME_IS_VALID (gst_aggregator_get_latency (GST_AGGREGATOR
@@ -1414,10 +1374,7 @@
       || gst_pad_check_reconfigure (GST_AGGREGATOR_SRC_PAD (vagg))) {
     gboolean ret;
 
-    ret = gst_videoaggregator_update_converters (vagg);
-    if (ret)
-      ret = gst_videoaggregator_update_src_caps (vagg);
-
+    ret = gst_videoaggregator_update_src_caps (vagg);
     if (!ret) {
       if (timeout && gst_pad_needs_reconfigure (GST_AGGREGATOR_SRC_PAD (vagg))) {
         guint64 frame_duration;
@@ -2099,6 +2056,8 @@
 
   klass->find_best_format = gst_videoaggreagator_find_best_format;
   klass->get_output_buffer = gst_videoaggregator_get_output_buffer;
+  klass->update_caps = gst_videoaggregator_default_update_caps;
+  klass->fixate_caps = gst_videoaggregator_default_fixate_caps;
 
   /* Register the pad class */
   g_type_class_ref (GST_TYPE_VIDEO_AGGREGATOR_PAD);
diff --git a/gst-libs/gst/video/gstvideoaggregator.h b/gst-libs/gst/video/gstvideoaggregator.h
index f95d0d2..86df0b6 100644
--- a/gst-libs/gst/video/gstvideoaggregator.h
+++ b/gst-libs/gst/video/gstvideoaggregator.h
@@ -73,6 +73,9 @@
  * @update_caps:              Optional.
  *                            Lets subclasses update the #GstCaps representing
  *                            the src pad caps before usage.  Return %NULL to indicate failure.
+ * @fixate_caps:              Fixate and return the src pad caps provided.  The function takes
+ *                            ownership of @caps and returns a fixated version of
+ *                            @caps. @caps is not guaranteed to be writable.
  * @aggregate_frames:         Lets subclasses aggregate frames that are ready. Subclasses
  *                            should iterate the GstElement.sinkpads and use the already
  *                            mapped #GstVideoFrame from GstVideoAggregatorPad.aggregated_frame
@@ -86,9 +89,6 @@
  *                            Notifies subclasses what caps format has been negotiated
  * @find_best_format:         Optional.
  *                            Lets subclasses decide of the best common format to use.
- * @preserve_update_caps_result: Sub-classes should set this to true if the return result
- *                               of the update_caps() method should not be further modified
- *                               by GstVideoAggregator by removing fields.
  **/
 struct _GstVideoAggregatorClass
 {
@@ -97,6 +97,9 @@
 
   /*< public >*/
   GstCaps *          (*update_caps)               (GstVideoAggregator *  videoaggregator,
+                                                   GstCaps            *  caps,
+                                                   GstCaps            *  filter_caps);
+  GstCaps *          (*fixate_caps)               (GstVideoAggregator *  videoaggregator,
                                                    GstCaps            *  caps);
   GstFlowReturn      (*aggregate_frames)          (GstVideoAggregator *  videoaggregator,
                                                    GstBuffer          *  outbuffer);
@@ -109,8 +112,6 @@
                                                    GstVideoInfo       *  best_info,
                                                    gboolean           *  at_least_one_alpha);
 
-  gboolean           preserve_update_caps_result;
-
   GstCaps           *sink_non_alpha_caps;
 
   /* < private > */
diff --git a/gst-libs/gst/wayland/Makefile.in b/gst-libs/gst/wayland/Makefile.in
index dd87423..fd0c39e 100644
--- a/gst-libs/gst/wayland/Makefile.in
+++ b/gst-libs/gst/wayland/Makefile.in
@@ -116,16 +116,15 @@
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
 	$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
-	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gsettings.m4 \
-	$(top_srcdir)/m4/gst-fionread.m4 $(top_srcdir)/m4/gst-sdl.m4 \
-	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
-	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
-	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libgcrypt.m4 \
-	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
-	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
-	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
-	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
-	$(top_srcdir)/configure.ac
+	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gst-fionread.m4 \
+	$(top_srcdir)/m4/gst-sdl.m4 $(top_srcdir)/m4/iconv.m4 \
+	$(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \
+	$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
+	$(top_srcdir)/m4/libgcrypt.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
+	$(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \
@@ -276,6 +275,8 @@
 CLUTTER_X11_LIBS = @CLUTTER_X11_LIBS@
 CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
+CUDA_CFLAGS = @CUDA_CFLAGS@
+CUDA_LIBS = @CUDA_LIBS@
 CURL_CFLAGS = @CURL_CFLAGS@
 CURL_LIBS = @CURL_LIBS@
 CXX = @CXX@
@@ -313,6 +314,8 @@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
+EGL_CFLAGS = @EGL_CFLAGS@
+EGL_LIBS = @EGL_LIBS@
 EGREP = @EGREP@
 ERROR_CFLAGS = @ERROR_CFLAGS@
 ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
@@ -321,7 +324,6 @@
 EXIF_CFLAGS = @EXIF_CFLAGS@
 EXIF_LIBS = @EXIF_LIBS@
 FAAC_LIBS = @FAAC_LIBS@
-FAAD_IS_NEAAC = @FAAD_IS_NEAAC@
 FAAD_LIBS = @FAAD_LIBS@
 FFLAGS = @FFLAGS@
 FGREP = @FGREP@
@@ -340,8 +342,9 @@
 GIO_LIBS = @GIO_LIBS@
 GIO_UNIX_CFLAGS = @GIO_UNIX_CFLAGS@
 GIO_UNIX_LIBS = @GIO_UNIX_LIBS@
+GLES2_CFLAGS = @GLES2_CFLAGS@
+GLES2_LIBS = @GLES2_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
-GLIB_COMPILE_SCHEMAS = @GLIB_COMPILE_SCHEMAS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
@@ -358,16 +361,17 @@
 GMODULE_NO_EXPORT_LIBS = @GMODULE_NO_EXPORT_LIBS@
 GMSGFMT = @GMSGFMT@
 GMSGFMT_015 = @GMSGFMT_015@
+GNUSTL_CFLAGS = @GNUSTL_CFLAGS@
+GNUSTL_LIBS = @GNUSTL_LIBS@
 GRAPHENE_CFLAGS = @GRAPHENE_CFLAGS@
 GRAPHENE_LIBS = @GRAPHENE_LIBS@
 GREP = @GREP@
-GSETTINGS_CFLAGS = @GSETTINGS_CFLAGS@
-GSETTINGS_DISABLE_SCHEMAS_COMPILE = @GSETTINGS_DISABLE_SCHEMAS_COMPILE@
-GSETTINGS_LIBS = @GSETTINGS_LIBS@
 GSM_LIBS = @GSM_LIBS@
 GSTPB_PLUGINS_DIR = @GSTPB_PLUGINS_DIR@
 GSTPB_PREFIX = @GSTPB_PREFIX@
 GST_AGE = @GST_AGE@
+GST_ALLOCATORS_CFLAGS = @GST_ALLOCATORS_CFLAGS@
+GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
 GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
 GST_API_VERSION = @GST_API_VERSION@
 GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
@@ -393,6 +397,8 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PBUTILS_CFLAGS = @GST_PBUTILS_CFLAGS@
+GST_PBUTILS_LIBS = @GST_PBUTILS_LIBS@
 GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BAD_CFLAGS = @GST_PLUGINS_BAD_CFLAGS@
@@ -418,6 +424,8 @@
 GST_PREFIX = @GST_PREFIX@
 GST_REVISION = @GST_REVISION@
 GST_TOOLS_DIR = @GST_TOOLS_DIR@
+GST_VIDEO_CFLAGS = @GST_VIDEO_CFLAGS@
+GST_VIDEO_LIBS = @GST_VIDEO_LIBS@
 GTK3_CFLAGS = @GTK3_CFLAGS@
 GTK3_GL_CFLAGS = @GTK3_GL_CFLAGS@
 GTK3_GL_LIBS = @GTK3_GL_LIBS@
@@ -519,6 +527,7 @@
 LTLIBICONV = @LTLIBICONV@
 LTLIBINTL = @LTLIBINTL@
 LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
 MANIFEST_TOOL = @MANIFEST_TOOL@
@@ -532,8 +541,6 @@
 MODPLUG_LIBS = @MODPLUG_LIBS@
 MPEG2ENC_CFLAGS = @MPEG2ENC_CFLAGS@
 MPEG2ENC_LIBS = @MPEG2ENC_LIBS@
-MPG123_CFLAGS = @MPG123_CFLAGS@
-MPG123_LIBS = @MPG123_LIBS@
 MPLEX_CFLAGS = @MPLEX_CFLAGS@
 MPLEX_LDFLAGS = @MPLEX_LDFLAGS@
 MPLEX_LIBS = @MPLEX_LIBS@
@@ -549,6 +556,8 @@
 NETTLE_LIBS = @NETTLE_LIBS@
 NM = @NM@
 NMEDIT = @NMEDIT@
+NVENCODE_CFLAGS = @NVENCODE_CFLAGS@
+NVENCODE_LIBS = @NVENCODE_LIBS@
 OBJC = @OBJC@
 OBJCDEPMODE = @OBJCDEPMODE@
 OBJCFLAGS = @OBJCFLAGS@
@@ -606,16 +615,18 @@
 PYTHON_PLATFORM = @PYTHON_PLATFORM@
 PYTHON_PREFIX = @PYTHON_PREFIX@
 PYTHON_VERSION = @PYTHON_VERSION@
+QT_ANDROID_CFLAGS = @QT_ANDROID_CFLAGS@
+QT_ANDROID_LIBS = @QT_ANDROID_LIBS@
 QT_CFLAGS = @QT_CFLAGS@
 QT_LIBS = @QT_LIBS@
+QT_MAC_CFLAGS = @QT_MAC_CFLAGS@
+QT_MAC_LIBS = @QT_MAC_LIBS@
 QT_WAYLAND_CFLAGS = @QT_WAYLAND_CFLAGS@
 QT_WAYLAND_LIBS = @QT_WAYLAND_LIBS@
 QT_X11_CFLAGS = @QT_X11_CFLAGS@
 QT_X11_LIBS = @QT_X11_LIBS@
 RANLIB = @RANLIB@
 RCC = @RCC@
-RSVG_2_36_2_CFLAGS = @RSVG_2_36_2_CFLAGS@
-RSVG_2_36_2_LIBS = @RSVG_2_36_2_LIBS@
 RSVG_CFLAGS = @RSVG_CFLAGS@
 RSVG_LIBS = @RSVG_LIBS@
 RTMP_CFLAGS = @RTMP_CFLAGS@
@@ -667,6 +678,7 @@
 VOAACENC_LIBS = @VOAACENC_LIBS@
 VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
 VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VULKAN_LIBS = @VULKAN_LIBS@
 WARNING_CFLAGS = @WARNING_CFLAGS@
 WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
 WARNING_OBJCFLAGS = @WARNING_OBJCFLAGS@
@@ -677,6 +689,7 @@
 WAYLAND_LIBS = @WAYLAND_LIBS@
 WEBP_CFLAGS = @WEBP_CFLAGS@
 WEBP_LIBS = @WEBP_LIBS@
+WGET = @WGET@
 WILDMIDI_CFLAGS = @WILDMIDI_CFLAGS@
 WILDMIDI_LIBS = @WILDMIDI_LIBS@
 WINKS_LIBS = @WINKS_LIBS@
@@ -686,6 +699,8 @@
 X11_LIBS = @X11_LIBS@
 X265_CFLAGS = @X265_CFLAGS@
 X265_LIBS = @X265_LIBS@
+XCB_CFLAGS = @XCB_CFLAGS@
+XCB_LIBS = @XCB_LIBS@
 XCOMPOSITE_CFLAGS = @XCOMPOSITE_CFLAGS@
 XCOMPOSITE_LIBS = @XCOMPOSITE_LIBS@
 XGETTEXT = @XGETTEXT@
@@ -723,7 +738,6 @@
 docdir = @docdir@
 dvidir = @dvidir@
 exec_prefix = @exec_prefix@
-gsettingsschemadir = @gsettingsschemadir@
 host = @host@
 host_alias = @host_alias@
 host_cpu = @host_cpu@
diff --git a/gst-plugins-bad.doap b/gst-plugins-bad.doap
index 88b6180..e36979a 100644
--- a/gst-plugins-bad.doap
+++ b/gst-plugins-bad.doap
@@ -35,11 +35,41 @@
 
  <release>
   <Version>
-   <revision>1.6.3</revision>
-   <branch>1.6</branch>
+   <revision>1.7.91</revision>
+   <branch>master</branch>
    <name></name>
-   <created>2016-01-20</created>
-   <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-bad/gst-plugins-bad-1.6.3.tar.xz" />
+   <created>2016-03-15</created>
+   <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-bad/gst-plugins-bad-1.7.91.tar.xz" />
+  </Version>
+ </release>
+
+ <release>
+  <Version>
+   <revision>1.7.90</revision>
+   <branch>master</branch>
+   <name></name>
+   <created>2016-03-01</created>
+   <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-bad/gst-plugins-bad-1.7.90.tar.xz" />
+  </Version>
+ </release>
+
+ <release>
+  <Version>
+   <revision>1.7.2</revision>
+   <branch>master</branch>
+   <name></name>
+   <created>2016-02-19</created>
+   <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-bad/gst-plugins-bad-1.7.2.tar.xz" />
+  </Version>
+ </release>
+
+ <release>
+  <Version>
+   <revision>1.7.1</revision>
+   <branch>master</branch>
+   <name></name>
+   <created>2015-12-24</created>
+   <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-bad/gst-plugins-bad-1.7.1.tar.xz" />
   </Version>
  </release>
 
diff --git a/gst-plugins-bad.spec b/gst-plugins-bad.spec
index 180f359..0c63674 100644
--- a/gst-plugins-bad.spec
+++ b/gst-plugins-bad.spec
@@ -6,7 +6,7 @@
 
 Summary: GStreamer streaming media framework "bad" plug-ins
 Name: %{gstreamer}-plugins-bad
-Version: 1.6.3
+Version: 1.7.91
 Release: 1.gst
 # The freeze and nfs plugins are LGPLv2 (only)
 License: LGPLv2+ and LGPLv2
@@ -223,7 +223,6 @@
 %{_libdir}/gstreamer-%{majorminor}/libgstfreeverb.so
 %{_libdir}/gstreamer-%{majorminor}/libgstivtc.so
 %{_libdir}/gstreamer-%{majorminor}/libgstmidi.so
-%{_libdir}/gstreamer-%{majorminor}/libgstmpg123.so
 %{_libdir}/gstreamer-%{majorminor}/libgstrfbsrc.so
 %{_libdir}/gstreamer-%{majorminor}/libgstsmoothstreaming.so
 %{_libdir}/gstreamer-%{majorminor}/libgstvideofiltersbad.so
@@ -231,7 +230,7 @@
 %{_libdir}/gstreamer-%{majorminor}/libgstsiren.so
 
 %{_libdir}/gstreamer-%{majorminor}/libgstdvbsuboverlay.so
-%{_libdir}/gstreamer-%{majorminor}/libgstfragmented.so
+%{_libdir}/gstreamer-%{majorminor}/libgsthls.so
 %{_libdir}/gstreamer-%{majorminor}/libgstvideoparsersbad.so
 %{_libdir}/gstreamer-%{majorminor}/libgsty4mdec.so
 %{_libdir}/gstreamer-%{majorminor}/libgstaudiovisualizers.so
diff --git a/gst-plugins-bad.spec.in b/gst-plugins-bad.spec.in
index 907c632..4fb17d7 100644
--- a/gst-plugins-bad.spec.in
+++ b/gst-plugins-bad.spec.in
@@ -223,7 +223,6 @@
 %{_libdir}/gstreamer-%{majorminor}/libgstfreeverb.so
 %{_libdir}/gstreamer-%{majorminor}/libgstivtc.so
 %{_libdir}/gstreamer-%{majorminor}/libgstmidi.so
-%{_libdir}/gstreamer-%{majorminor}/libgstmpg123.so
 %{_libdir}/gstreamer-%{majorminor}/libgstrfbsrc.so
 %{_libdir}/gstreamer-%{majorminor}/libgstsmoothstreaming.so
 %{_libdir}/gstreamer-%{majorminor}/libgstvideofiltersbad.so
@@ -231,7 +230,7 @@
 %{_libdir}/gstreamer-%{majorminor}/libgstsiren.so
 
 %{_libdir}/gstreamer-%{majorminor}/libgstdvbsuboverlay.so
-%{_libdir}/gstreamer-%{majorminor}/libgstfragmented.so
+%{_libdir}/gstreamer-%{majorminor}/libgsthls.so
 %{_libdir}/gstreamer-%{majorminor}/libgstvideoparsersbad.so
 %{_libdir}/gstreamer-%{majorminor}/libgsty4mdec.so
 %{_libdir}/gstreamer-%{majorminor}/libgstaudiovisualizers.so
diff --git a/gst/Makefile.in b/gst/Makefile.in
index 3e4ba88..46ae996 100644
--- a/gst/Makefile.in
+++ b/gst/Makefile.in
@@ -119,16 +119,15 @@
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
 	$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
-	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gsettings.m4 \
-	$(top_srcdir)/m4/gst-fionread.m4 $(top_srcdir)/m4/gst-sdl.m4 \
-	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
-	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
-	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libgcrypt.m4 \
-	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
-	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
-	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
-	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
-	$(top_srcdir)/configure.ac
+	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gst-fionread.m4 \
+	$(top_srcdir)/m4/gst-sdl.m4 $(top_srcdir)/m4/iconv.m4 \
+	$(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \
+	$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
+	$(top_srcdir)/m4/libgcrypt.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
+	$(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
@@ -253,6 +252,8 @@
 CLUTTER_X11_LIBS = @CLUTTER_X11_LIBS@
 CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
+CUDA_CFLAGS = @CUDA_CFLAGS@
+CUDA_LIBS = @CUDA_LIBS@
 CURL_CFLAGS = @CURL_CFLAGS@
 CURL_LIBS = @CURL_LIBS@
 CXX = @CXX@
@@ -290,6 +291,8 @@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
+EGL_CFLAGS = @EGL_CFLAGS@
+EGL_LIBS = @EGL_LIBS@
 EGREP = @EGREP@
 ERROR_CFLAGS = @ERROR_CFLAGS@
 ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
@@ -298,7 +301,6 @@
 EXIF_CFLAGS = @EXIF_CFLAGS@
 EXIF_LIBS = @EXIF_LIBS@
 FAAC_LIBS = @FAAC_LIBS@
-FAAD_IS_NEAAC = @FAAD_IS_NEAAC@
 FAAD_LIBS = @FAAD_LIBS@
 FFLAGS = @FFLAGS@
 FGREP = @FGREP@
@@ -317,8 +319,9 @@
 GIO_LIBS = @GIO_LIBS@
 GIO_UNIX_CFLAGS = @GIO_UNIX_CFLAGS@
 GIO_UNIX_LIBS = @GIO_UNIX_LIBS@
+GLES2_CFLAGS = @GLES2_CFLAGS@
+GLES2_LIBS = @GLES2_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
-GLIB_COMPILE_SCHEMAS = @GLIB_COMPILE_SCHEMAS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
@@ -335,16 +338,17 @@
 GMODULE_NO_EXPORT_LIBS = @GMODULE_NO_EXPORT_LIBS@
 GMSGFMT = @GMSGFMT@
 GMSGFMT_015 = @GMSGFMT_015@
+GNUSTL_CFLAGS = @GNUSTL_CFLAGS@
+GNUSTL_LIBS = @GNUSTL_LIBS@
 GRAPHENE_CFLAGS = @GRAPHENE_CFLAGS@
 GRAPHENE_LIBS = @GRAPHENE_LIBS@
 GREP = @GREP@
-GSETTINGS_CFLAGS = @GSETTINGS_CFLAGS@
-GSETTINGS_DISABLE_SCHEMAS_COMPILE = @GSETTINGS_DISABLE_SCHEMAS_COMPILE@
-GSETTINGS_LIBS = @GSETTINGS_LIBS@
 GSM_LIBS = @GSM_LIBS@
 GSTPB_PLUGINS_DIR = @GSTPB_PLUGINS_DIR@
 GSTPB_PREFIX = @GSTPB_PREFIX@
 GST_AGE = @GST_AGE@
+GST_ALLOCATORS_CFLAGS = @GST_ALLOCATORS_CFLAGS@
+GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
 GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
 GST_API_VERSION = @GST_API_VERSION@
 GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
@@ -370,6 +374,8 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PBUTILS_CFLAGS = @GST_PBUTILS_CFLAGS@
+GST_PBUTILS_LIBS = @GST_PBUTILS_LIBS@
 GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BAD_CFLAGS = @GST_PLUGINS_BAD_CFLAGS@
@@ -395,6 +401,8 @@
 GST_PREFIX = @GST_PREFIX@
 GST_REVISION = @GST_REVISION@
 GST_TOOLS_DIR = @GST_TOOLS_DIR@
+GST_VIDEO_CFLAGS = @GST_VIDEO_CFLAGS@
+GST_VIDEO_LIBS = @GST_VIDEO_LIBS@
 GTK3_CFLAGS = @GTK3_CFLAGS@
 GTK3_GL_CFLAGS = @GTK3_GL_CFLAGS@
 GTK3_GL_LIBS = @GTK3_GL_LIBS@
@@ -496,6 +504,7 @@
 LTLIBICONV = @LTLIBICONV@
 LTLIBINTL = @LTLIBINTL@
 LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
 MANIFEST_TOOL = @MANIFEST_TOOL@
@@ -509,8 +518,6 @@
 MODPLUG_LIBS = @MODPLUG_LIBS@
 MPEG2ENC_CFLAGS = @MPEG2ENC_CFLAGS@
 MPEG2ENC_LIBS = @MPEG2ENC_LIBS@
-MPG123_CFLAGS = @MPG123_CFLAGS@
-MPG123_LIBS = @MPG123_LIBS@
 MPLEX_CFLAGS = @MPLEX_CFLAGS@
 MPLEX_LDFLAGS = @MPLEX_LDFLAGS@
 MPLEX_LIBS = @MPLEX_LIBS@
@@ -526,6 +533,8 @@
 NETTLE_LIBS = @NETTLE_LIBS@
 NM = @NM@
 NMEDIT = @NMEDIT@
+NVENCODE_CFLAGS = @NVENCODE_CFLAGS@
+NVENCODE_LIBS = @NVENCODE_LIBS@
 OBJC = @OBJC@
 OBJCDEPMODE = @OBJCDEPMODE@
 OBJCFLAGS = @OBJCFLAGS@
@@ -583,16 +592,18 @@
 PYTHON_PLATFORM = @PYTHON_PLATFORM@
 PYTHON_PREFIX = @PYTHON_PREFIX@
 PYTHON_VERSION = @PYTHON_VERSION@
+QT_ANDROID_CFLAGS = @QT_ANDROID_CFLAGS@
+QT_ANDROID_LIBS = @QT_ANDROID_LIBS@
 QT_CFLAGS = @QT_CFLAGS@
 QT_LIBS = @QT_LIBS@
+QT_MAC_CFLAGS = @QT_MAC_CFLAGS@
+QT_MAC_LIBS = @QT_MAC_LIBS@
 QT_WAYLAND_CFLAGS = @QT_WAYLAND_CFLAGS@
 QT_WAYLAND_LIBS = @QT_WAYLAND_LIBS@
 QT_X11_CFLAGS = @QT_X11_CFLAGS@
 QT_X11_LIBS = @QT_X11_LIBS@
 RANLIB = @RANLIB@
 RCC = @RCC@
-RSVG_2_36_2_CFLAGS = @RSVG_2_36_2_CFLAGS@
-RSVG_2_36_2_LIBS = @RSVG_2_36_2_LIBS@
 RSVG_CFLAGS = @RSVG_CFLAGS@
 RSVG_LIBS = @RSVG_LIBS@
 RTMP_CFLAGS = @RTMP_CFLAGS@
@@ -644,6 +655,7 @@
 VOAACENC_LIBS = @VOAACENC_LIBS@
 VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
 VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VULKAN_LIBS = @VULKAN_LIBS@
 WARNING_CFLAGS = @WARNING_CFLAGS@
 WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
 WARNING_OBJCFLAGS = @WARNING_OBJCFLAGS@
@@ -654,6 +666,7 @@
 WAYLAND_LIBS = @WAYLAND_LIBS@
 WEBP_CFLAGS = @WEBP_CFLAGS@
 WEBP_LIBS = @WEBP_LIBS@
+WGET = @WGET@
 WILDMIDI_CFLAGS = @WILDMIDI_CFLAGS@
 WILDMIDI_LIBS = @WILDMIDI_LIBS@
 WINKS_LIBS = @WINKS_LIBS@
@@ -663,6 +676,8 @@
 X11_LIBS = @X11_LIBS@
 X265_CFLAGS = @X265_CFLAGS@
 X265_LIBS = @X265_LIBS@
+XCB_CFLAGS = @XCB_CFLAGS@
+XCB_LIBS = @XCB_LIBS@
 XCOMPOSITE_CFLAGS = @XCOMPOSITE_CFLAGS@
 XCOMPOSITE_LIBS = @XCOMPOSITE_LIBS@
 XGETTEXT = @XGETTEXT@
@@ -700,7 +715,6 @@
 docdir = @docdir@
 dvidir = @dvidir@
 exec_prefix = @exec_prefix@
-gsettingsschemadir = @gsettingsschemadir@
 host = @host@
 host_alias = @host_alias@
 host_cpu = @host_cpu@
diff --git a/gst/accurip/Makefile.in b/gst/accurip/Makefile.in
index 4ed6aa8..eb806a0 100644
--- a/gst/accurip/Makefile.in
+++ b/gst/accurip/Makefile.in
@@ -116,16 +116,15 @@
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
 	$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
-	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gsettings.m4 \
-	$(top_srcdir)/m4/gst-fionread.m4 $(top_srcdir)/m4/gst-sdl.m4 \
-	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
-	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
-	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libgcrypt.m4 \
-	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
-	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
-	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
-	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
-	$(top_srcdir)/configure.ac
+	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gst-fionread.m4 \
+	$(top_srcdir)/m4/gst-sdl.m4 $(top_srcdir)/m4/iconv.m4 \
+	$(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \
+	$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
+	$(top_srcdir)/m4/libgcrypt.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
+	$(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \
@@ -274,6 +273,8 @@
 CLUTTER_X11_LIBS = @CLUTTER_X11_LIBS@
 CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
+CUDA_CFLAGS = @CUDA_CFLAGS@
+CUDA_LIBS = @CUDA_LIBS@
 CURL_CFLAGS = @CURL_CFLAGS@
 CURL_LIBS = @CURL_LIBS@
 CXX = @CXX@
@@ -311,6 +312,8 @@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
+EGL_CFLAGS = @EGL_CFLAGS@
+EGL_LIBS = @EGL_LIBS@
 EGREP = @EGREP@
 ERROR_CFLAGS = @ERROR_CFLAGS@
 ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
@@ -319,7 +322,6 @@
 EXIF_CFLAGS = @EXIF_CFLAGS@
 EXIF_LIBS = @EXIF_LIBS@
 FAAC_LIBS = @FAAC_LIBS@
-FAAD_IS_NEAAC = @FAAD_IS_NEAAC@
 FAAD_LIBS = @FAAD_LIBS@
 FFLAGS = @FFLAGS@
 FGREP = @FGREP@
@@ -338,8 +340,9 @@
 GIO_LIBS = @GIO_LIBS@
 GIO_UNIX_CFLAGS = @GIO_UNIX_CFLAGS@
 GIO_UNIX_LIBS = @GIO_UNIX_LIBS@
+GLES2_CFLAGS = @GLES2_CFLAGS@
+GLES2_LIBS = @GLES2_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
-GLIB_COMPILE_SCHEMAS = @GLIB_COMPILE_SCHEMAS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
@@ -356,16 +359,17 @@
 GMODULE_NO_EXPORT_LIBS = @GMODULE_NO_EXPORT_LIBS@
 GMSGFMT = @GMSGFMT@
 GMSGFMT_015 = @GMSGFMT_015@
+GNUSTL_CFLAGS = @GNUSTL_CFLAGS@
+GNUSTL_LIBS = @GNUSTL_LIBS@
 GRAPHENE_CFLAGS = @GRAPHENE_CFLAGS@
 GRAPHENE_LIBS = @GRAPHENE_LIBS@
 GREP = @GREP@
-GSETTINGS_CFLAGS = @GSETTINGS_CFLAGS@
-GSETTINGS_DISABLE_SCHEMAS_COMPILE = @GSETTINGS_DISABLE_SCHEMAS_COMPILE@
-GSETTINGS_LIBS = @GSETTINGS_LIBS@
 GSM_LIBS = @GSM_LIBS@
 GSTPB_PLUGINS_DIR = @GSTPB_PLUGINS_DIR@
 GSTPB_PREFIX = @GSTPB_PREFIX@
 GST_AGE = @GST_AGE@
+GST_ALLOCATORS_CFLAGS = @GST_ALLOCATORS_CFLAGS@
+GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
 GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
 GST_API_VERSION = @GST_API_VERSION@
 GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
@@ -391,6 +395,8 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PBUTILS_CFLAGS = @GST_PBUTILS_CFLAGS@
+GST_PBUTILS_LIBS = @GST_PBUTILS_LIBS@
 GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BAD_CFLAGS = @GST_PLUGINS_BAD_CFLAGS@
@@ -416,6 +422,8 @@
 GST_PREFIX = @GST_PREFIX@
 GST_REVISION = @GST_REVISION@
 GST_TOOLS_DIR = @GST_TOOLS_DIR@
+GST_VIDEO_CFLAGS = @GST_VIDEO_CFLAGS@
+GST_VIDEO_LIBS = @GST_VIDEO_LIBS@
 GTK3_CFLAGS = @GTK3_CFLAGS@
 GTK3_GL_CFLAGS = @GTK3_GL_CFLAGS@
 GTK3_GL_LIBS = @GTK3_GL_LIBS@
@@ -517,6 +525,7 @@
 LTLIBICONV = @LTLIBICONV@
 LTLIBINTL = @LTLIBINTL@
 LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
 MANIFEST_TOOL = @MANIFEST_TOOL@
@@ -530,8 +539,6 @@
 MODPLUG_LIBS = @MODPLUG_LIBS@
 MPEG2ENC_CFLAGS = @MPEG2ENC_CFLAGS@
 MPEG2ENC_LIBS = @MPEG2ENC_LIBS@
-MPG123_CFLAGS = @MPG123_CFLAGS@
-MPG123_LIBS = @MPG123_LIBS@
 MPLEX_CFLAGS = @MPLEX_CFLAGS@
 MPLEX_LDFLAGS = @MPLEX_LDFLAGS@
 MPLEX_LIBS = @MPLEX_LIBS@
@@ -547,6 +554,8 @@
 NETTLE_LIBS = @NETTLE_LIBS@
 NM = @NM@
 NMEDIT = @NMEDIT@
+NVENCODE_CFLAGS = @NVENCODE_CFLAGS@
+NVENCODE_LIBS = @NVENCODE_LIBS@
 OBJC = @OBJC@
 OBJCDEPMODE = @OBJCDEPMODE@
 OBJCFLAGS = @OBJCFLAGS@
@@ -604,16 +613,18 @@
 PYTHON_PLATFORM = @PYTHON_PLATFORM@
 PYTHON_PREFIX = @PYTHON_PREFIX@
 PYTHON_VERSION = @PYTHON_VERSION@
+QT_ANDROID_CFLAGS = @QT_ANDROID_CFLAGS@
+QT_ANDROID_LIBS = @QT_ANDROID_LIBS@
 QT_CFLAGS = @QT_CFLAGS@
 QT_LIBS = @QT_LIBS@
+QT_MAC_CFLAGS = @QT_MAC_CFLAGS@
+QT_MAC_LIBS = @QT_MAC_LIBS@
 QT_WAYLAND_CFLAGS = @QT_WAYLAND_CFLAGS@
 QT_WAYLAND_LIBS = @QT_WAYLAND_LIBS@
 QT_X11_CFLAGS = @QT_X11_CFLAGS@
 QT_X11_LIBS = @QT_X11_LIBS@
 RANLIB = @RANLIB@
 RCC = @RCC@
-RSVG_2_36_2_CFLAGS = @RSVG_2_36_2_CFLAGS@
-RSVG_2_36_2_LIBS = @RSVG_2_36_2_LIBS@
 RSVG_CFLAGS = @RSVG_CFLAGS@
 RSVG_LIBS = @RSVG_LIBS@
 RTMP_CFLAGS = @RTMP_CFLAGS@
@@ -665,6 +676,7 @@
 VOAACENC_LIBS = @VOAACENC_LIBS@
 VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
 VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VULKAN_LIBS = @VULKAN_LIBS@
 WARNING_CFLAGS = @WARNING_CFLAGS@
 WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
 WARNING_OBJCFLAGS = @WARNING_OBJCFLAGS@
@@ -675,6 +687,7 @@
 WAYLAND_LIBS = @WAYLAND_LIBS@
 WEBP_CFLAGS = @WEBP_CFLAGS@
 WEBP_LIBS = @WEBP_LIBS@
+WGET = @WGET@
 WILDMIDI_CFLAGS = @WILDMIDI_CFLAGS@
 WILDMIDI_LIBS = @WILDMIDI_LIBS@
 WINKS_LIBS = @WINKS_LIBS@
@@ -684,6 +697,8 @@
 X11_LIBS = @X11_LIBS@
 X265_CFLAGS = @X265_CFLAGS@
 X265_LIBS = @X265_LIBS@
+XCB_CFLAGS = @XCB_CFLAGS@
+XCB_LIBS = @XCB_LIBS@
 XCOMPOSITE_CFLAGS = @XCOMPOSITE_CFLAGS@
 XCOMPOSITE_LIBS = @XCOMPOSITE_LIBS@
 XGETTEXT = @XGETTEXT@
@@ -721,7 +736,6 @@
 docdir = @docdir@
 dvidir = @dvidir@
 exec_prefix = @exec_prefix@
-gsettingsschemadir = @gsettingsschemadir@
 host = @host@
 host_alias = @host_alias@
 host_cpu = @host_cpu@
diff --git a/gst/adpcmdec/Makefile.in b/gst/adpcmdec/Makefile.in
index f109d68..9599849 100644
--- a/gst/adpcmdec/Makefile.in
+++ b/gst/adpcmdec/Makefile.in
@@ -115,16 +115,15 @@
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
 	$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
-	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gsettings.m4 \
-	$(top_srcdir)/m4/gst-fionread.m4 $(top_srcdir)/m4/gst-sdl.m4 \
-	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
-	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
-	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libgcrypt.m4 \
-	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
-	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
-	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
-	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
-	$(top_srcdir)/configure.ac
+	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gst-fionread.m4 \
+	$(top_srcdir)/m4/gst-sdl.m4 $(top_srcdir)/m4/iconv.m4 \
+	$(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \
+	$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
+	$(top_srcdir)/m4/libgcrypt.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
+	$(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
@@ -271,6 +270,8 @@
 CLUTTER_X11_LIBS = @CLUTTER_X11_LIBS@
 CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
+CUDA_CFLAGS = @CUDA_CFLAGS@
+CUDA_LIBS = @CUDA_LIBS@
 CURL_CFLAGS = @CURL_CFLAGS@
 CURL_LIBS = @CURL_LIBS@
 CXX = @CXX@
@@ -308,6 +309,8 @@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
+EGL_CFLAGS = @EGL_CFLAGS@
+EGL_LIBS = @EGL_LIBS@
 EGREP = @EGREP@
 ERROR_CFLAGS = @ERROR_CFLAGS@
 ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
@@ -316,7 +319,6 @@
 EXIF_CFLAGS = @EXIF_CFLAGS@
 EXIF_LIBS = @EXIF_LIBS@
 FAAC_LIBS = @FAAC_LIBS@
-FAAD_IS_NEAAC = @FAAD_IS_NEAAC@
 FAAD_LIBS = @FAAD_LIBS@
 FFLAGS = @FFLAGS@
 FGREP = @FGREP@
@@ -335,8 +337,9 @@
 GIO_LIBS = @GIO_LIBS@
 GIO_UNIX_CFLAGS = @GIO_UNIX_CFLAGS@
 GIO_UNIX_LIBS = @GIO_UNIX_LIBS@
+GLES2_CFLAGS = @GLES2_CFLAGS@
+GLES2_LIBS = @GLES2_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
-GLIB_COMPILE_SCHEMAS = @GLIB_COMPILE_SCHEMAS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
@@ -353,16 +356,17 @@
 GMODULE_NO_EXPORT_LIBS = @GMODULE_NO_EXPORT_LIBS@
 GMSGFMT = @GMSGFMT@
 GMSGFMT_015 = @GMSGFMT_015@
+GNUSTL_CFLAGS = @GNUSTL_CFLAGS@
+GNUSTL_LIBS = @GNUSTL_LIBS@
 GRAPHENE_CFLAGS = @GRAPHENE_CFLAGS@
 GRAPHENE_LIBS = @GRAPHENE_LIBS@
 GREP = @GREP@
-GSETTINGS_CFLAGS = @GSETTINGS_CFLAGS@
-GSETTINGS_DISABLE_SCHEMAS_COMPILE = @GSETTINGS_DISABLE_SCHEMAS_COMPILE@
-GSETTINGS_LIBS = @GSETTINGS_LIBS@
 GSM_LIBS = @GSM_LIBS@
 GSTPB_PLUGINS_DIR = @GSTPB_PLUGINS_DIR@
 GSTPB_PREFIX = @GSTPB_PREFIX@
 GST_AGE = @GST_AGE@
+GST_ALLOCATORS_CFLAGS = @GST_ALLOCATORS_CFLAGS@
+GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
 GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
 GST_API_VERSION = @GST_API_VERSION@
 GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
@@ -388,6 +392,8 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PBUTILS_CFLAGS = @GST_PBUTILS_CFLAGS@
+GST_PBUTILS_LIBS = @GST_PBUTILS_LIBS@
 GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BAD_CFLAGS = @GST_PLUGINS_BAD_CFLAGS@
@@ -413,6 +419,8 @@
 GST_PREFIX = @GST_PREFIX@
 GST_REVISION = @GST_REVISION@
 GST_TOOLS_DIR = @GST_TOOLS_DIR@
+GST_VIDEO_CFLAGS = @GST_VIDEO_CFLAGS@
+GST_VIDEO_LIBS = @GST_VIDEO_LIBS@
 GTK3_CFLAGS = @GTK3_CFLAGS@
 GTK3_GL_CFLAGS = @GTK3_GL_CFLAGS@
 GTK3_GL_LIBS = @GTK3_GL_LIBS@
@@ -514,6 +522,7 @@
 LTLIBICONV = @LTLIBICONV@
 LTLIBINTL = @LTLIBINTL@
 LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
 MANIFEST_TOOL = @MANIFEST_TOOL@
@@ -527,8 +536,6 @@
 MODPLUG_LIBS = @MODPLUG_LIBS@
 MPEG2ENC_CFLAGS = @MPEG2ENC_CFLAGS@
 MPEG2ENC_LIBS = @MPEG2ENC_LIBS@
-MPG123_CFLAGS = @MPG123_CFLAGS@
-MPG123_LIBS = @MPG123_LIBS@
 MPLEX_CFLAGS = @MPLEX_CFLAGS@
 MPLEX_LDFLAGS = @MPLEX_LDFLAGS@
 MPLEX_LIBS = @MPLEX_LIBS@
@@ -544,6 +551,8 @@
 NETTLE_LIBS = @NETTLE_LIBS@
 NM = @NM@
 NMEDIT = @NMEDIT@
+NVENCODE_CFLAGS = @NVENCODE_CFLAGS@
+NVENCODE_LIBS = @NVENCODE_LIBS@
 OBJC = @OBJC@
 OBJCDEPMODE = @OBJCDEPMODE@
 OBJCFLAGS = @OBJCFLAGS@
@@ -601,16 +610,18 @@
 PYTHON_PLATFORM = @PYTHON_PLATFORM@
 PYTHON_PREFIX = @PYTHON_PREFIX@
 PYTHON_VERSION = @PYTHON_VERSION@
+QT_ANDROID_CFLAGS = @QT_ANDROID_CFLAGS@
+QT_ANDROID_LIBS = @QT_ANDROID_LIBS@
 QT_CFLAGS = @QT_CFLAGS@
 QT_LIBS = @QT_LIBS@
+QT_MAC_CFLAGS = @QT_MAC_CFLAGS@
+QT_MAC_LIBS = @QT_MAC_LIBS@
 QT_WAYLAND_CFLAGS = @QT_WAYLAND_CFLAGS@
 QT_WAYLAND_LIBS = @QT_WAYLAND_LIBS@
 QT_X11_CFLAGS = @QT_X11_CFLAGS@
 QT_X11_LIBS = @QT_X11_LIBS@
 RANLIB = @RANLIB@
 RCC = @RCC@
-RSVG_2_36_2_CFLAGS = @RSVG_2_36_2_CFLAGS@
-RSVG_2_36_2_LIBS = @RSVG_2_36_2_LIBS@
 RSVG_CFLAGS = @RSVG_CFLAGS@
 RSVG_LIBS = @RSVG_LIBS@
 RTMP_CFLAGS = @RTMP_CFLAGS@
@@ -662,6 +673,7 @@
 VOAACENC_LIBS = @VOAACENC_LIBS@
 VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
 VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VULKAN_LIBS = @VULKAN_LIBS@
 WARNING_CFLAGS = @WARNING_CFLAGS@
 WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
 WARNING_OBJCFLAGS = @WARNING_OBJCFLAGS@
@@ -672,6 +684,7 @@
 WAYLAND_LIBS = @WAYLAND_LIBS@
 WEBP_CFLAGS = @WEBP_CFLAGS@
 WEBP_LIBS = @WEBP_LIBS@
+WGET = @WGET@
 WILDMIDI_CFLAGS = @WILDMIDI_CFLAGS@
 WILDMIDI_LIBS = @WILDMIDI_LIBS@
 WINKS_LIBS = @WINKS_LIBS@
@@ -681,6 +694,8 @@
 X11_LIBS = @X11_LIBS@
 X265_CFLAGS = @X265_CFLAGS@
 X265_LIBS = @X265_LIBS@
+XCB_CFLAGS = @XCB_CFLAGS@
+XCB_LIBS = @XCB_LIBS@
 XCOMPOSITE_CFLAGS = @XCOMPOSITE_CFLAGS@
 XCOMPOSITE_LIBS = @XCOMPOSITE_LIBS@
 XGETTEXT = @XGETTEXT@
@@ -718,7 +733,6 @@
 docdir = @docdir@
 dvidir = @dvidir@
 exec_prefix = @exec_prefix@
-gsettingsschemadir = @gsettingsschemadir@
 host = @host@
 host_alias = @host_alias@
 host_cpu = @host_cpu@
diff --git a/gst/adpcmenc/Makefile.in b/gst/adpcmenc/Makefile.in
index d303ed0..60872cb 100644
--- a/gst/adpcmenc/Makefile.in
+++ b/gst/adpcmenc/Makefile.in
@@ -115,16 +115,15 @@
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
 	$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
-	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gsettings.m4 \
-	$(top_srcdir)/m4/gst-fionread.m4 $(top_srcdir)/m4/gst-sdl.m4 \
-	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
-	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
-	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libgcrypt.m4 \
-	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
-	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
-	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
-	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
-	$(top_srcdir)/configure.ac
+	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gst-fionread.m4 \
+	$(top_srcdir)/m4/gst-sdl.m4 $(top_srcdir)/m4/iconv.m4 \
+	$(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \
+	$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
+	$(top_srcdir)/m4/libgcrypt.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
+	$(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
@@ -271,6 +270,8 @@
 CLUTTER_X11_LIBS = @CLUTTER_X11_LIBS@
 CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
+CUDA_CFLAGS = @CUDA_CFLAGS@
+CUDA_LIBS = @CUDA_LIBS@
 CURL_CFLAGS = @CURL_CFLAGS@
 CURL_LIBS = @CURL_LIBS@
 CXX = @CXX@
@@ -308,6 +309,8 @@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
+EGL_CFLAGS = @EGL_CFLAGS@
+EGL_LIBS = @EGL_LIBS@
 EGREP = @EGREP@
 ERROR_CFLAGS = @ERROR_CFLAGS@
 ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
@@ -316,7 +319,6 @@
 EXIF_CFLAGS = @EXIF_CFLAGS@
 EXIF_LIBS = @EXIF_LIBS@
 FAAC_LIBS = @FAAC_LIBS@
-FAAD_IS_NEAAC = @FAAD_IS_NEAAC@
 FAAD_LIBS = @FAAD_LIBS@
 FFLAGS = @FFLAGS@
 FGREP = @FGREP@
@@ -335,8 +337,9 @@
 GIO_LIBS = @GIO_LIBS@
 GIO_UNIX_CFLAGS = @GIO_UNIX_CFLAGS@
 GIO_UNIX_LIBS = @GIO_UNIX_LIBS@
+GLES2_CFLAGS = @GLES2_CFLAGS@
+GLES2_LIBS = @GLES2_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
-GLIB_COMPILE_SCHEMAS = @GLIB_COMPILE_SCHEMAS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
@@ -353,16 +356,17 @@
 GMODULE_NO_EXPORT_LIBS = @GMODULE_NO_EXPORT_LIBS@
 GMSGFMT = @GMSGFMT@
 GMSGFMT_015 = @GMSGFMT_015@
+GNUSTL_CFLAGS = @GNUSTL_CFLAGS@
+GNUSTL_LIBS = @GNUSTL_LIBS@
 GRAPHENE_CFLAGS = @GRAPHENE_CFLAGS@
 GRAPHENE_LIBS = @GRAPHENE_LIBS@
 GREP = @GREP@
-GSETTINGS_CFLAGS = @GSETTINGS_CFLAGS@
-GSETTINGS_DISABLE_SCHEMAS_COMPILE = @GSETTINGS_DISABLE_SCHEMAS_COMPILE@
-GSETTINGS_LIBS = @GSETTINGS_LIBS@
 GSM_LIBS = @GSM_LIBS@
 GSTPB_PLUGINS_DIR = @GSTPB_PLUGINS_DIR@
 GSTPB_PREFIX = @GSTPB_PREFIX@
 GST_AGE = @GST_AGE@
+GST_ALLOCATORS_CFLAGS = @GST_ALLOCATORS_CFLAGS@
+GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
 GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
 GST_API_VERSION = @GST_API_VERSION@
 GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
@@ -388,6 +392,8 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PBUTILS_CFLAGS = @GST_PBUTILS_CFLAGS@
+GST_PBUTILS_LIBS = @GST_PBUTILS_LIBS@
 GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BAD_CFLAGS = @GST_PLUGINS_BAD_CFLAGS@
@@ -413,6 +419,8 @@
 GST_PREFIX = @GST_PREFIX@
 GST_REVISION = @GST_REVISION@
 GST_TOOLS_DIR = @GST_TOOLS_DIR@
+GST_VIDEO_CFLAGS = @GST_VIDEO_CFLAGS@
+GST_VIDEO_LIBS = @GST_VIDEO_LIBS@
 GTK3_CFLAGS = @GTK3_CFLAGS@
 GTK3_GL_CFLAGS = @GTK3_GL_CFLAGS@
 GTK3_GL_LIBS = @GTK3_GL_LIBS@
@@ -514,6 +522,7 @@
 LTLIBICONV = @LTLIBICONV@
 LTLIBINTL = @LTLIBINTL@
 LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
 MANIFEST_TOOL = @MANIFEST_TOOL@
@@ -527,8 +536,6 @@
 MODPLUG_LIBS = @MODPLUG_LIBS@
 MPEG2ENC_CFLAGS = @MPEG2ENC_CFLAGS@
 MPEG2ENC_LIBS = @MPEG2ENC_LIBS@
-MPG123_CFLAGS = @MPG123_CFLAGS@
-MPG123_LIBS = @MPG123_LIBS@
 MPLEX_CFLAGS = @MPLEX_CFLAGS@
 MPLEX_LDFLAGS = @MPLEX_LDFLAGS@
 MPLEX_LIBS = @MPLEX_LIBS@
@@ -544,6 +551,8 @@
 NETTLE_LIBS = @NETTLE_LIBS@
 NM = @NM@
 NMEDIT = @NMEDIT@
+NVENCODE_CFLAGS = @NVENCODE_CFLAGS@
+NVENCODE_LIBS = @NVENCODE_LIBS@
 OBJC = @OBJC@
 OBJCDEPMODE = @OBJCDEPMODE@
 OBJCFLAGS = @OBJCFLAGS@
@@ -601,16 +610,18 @@
 PYTHON_PLATFORM = @PYTHON_PLATFORM@
 PYTHON_PREFIX = @PYTHON_PREFIX@
 PYTHON_VERSION = @PYTHON_VERSION@
+QT_ANDROID_CFLAGS = @QT_ANDROID_CFLAGS@
+QT_ANDROID_LIBS = @QT_ANDROID_LIBS@
 QT_CFLAGS = @QT_CFLAGS@
 QT_LIBS = @QT_LIBS@
+QT_MAC_CFLAGS = @QT_MAC_CFLAGS@
+QT_MAC_LIBS = @QT_MAC_LIBS@
 QT_WAYLAND_CFLAGS = @QT_WAYLAND_CFLAGS@
 QT_WAYLAND_LIBS = @QT_WAYLAND_LIBS@
 QT_X11_CFLAGS = @QT_X11_CFLAGS@
 QT_X11_LIBS = @QT_X11_LIBS@
 RANLIB = @RANLIB@
 RCC = @RCC@
-RSVG_2_36_2_CFLAGS = @RSVG_2_36_2_CFLAGS@
-RSVG_2_36_2_LIBS = @RSVG_2_36_2_LIBS@
 RSVG_CFLAGS = @RSVG_CFLAGS@
 RSVG_LIBS = @RSVG_LIBS@
 RTMP_CFLAGS = @RTMP_CFLAGS@
@@ -662,6 +673,7 @@
 VOAACENC_LIBS = @VOAACENC_LIBS@
 VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
 VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VULKAN_LIBS = @VULKAN_LIBS@
 WARNING_CFLAGS = @WARNING_CFLAGS@
 WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
 WARNING_OBJCFLAGS = @WARNING_OBJCFLAGS@
@@ -672,6 +684,7 @@
 WAYLAND_LIBS = @WAYLAND_LIBS@
 WEBP_CFLAGS = @WEBP_CFLAGS@
 WEBP_LIBS = @WEBP_LIBS@
+WGET = @WGET@
 WILDMIDI_CFLAGS = @WILDMIDI_CFLAGS@
 WILDMIDI_LIBS = @WILDMIDI_LIBS@
 WINKS_LIBS = @WINKS_LIBS@
@@ -681,6 +694,8 @@
 X11_LIBS = @X11_LIBS@
 X265_CFLAGS = @X265_CFLAGS@
 X265_LIBS = @X265_LIBS@
+XCB_CFLAGS = @XCB_CFLAGS@
+XCB_LIBS = @XCB_LIBS@
 XCOMPOSITE_CFLAGS = @XCOMPOSITE_CFLAGS@
 XCOMPOSITE_LIBS = @XCOMPOSITE_LIBS@
 XGETTEXT = @XGETTEXT@
@@ -718,7 +733,6 @@
 docdir = @docdir@
 dvidir = @dvidir@
 exec_prefix = @exec_prefix@
-gsettingsschemadir = @gsettingsschemadir@
 host = @host@
 host_alias = @host_alias@
 host_cpu = @host_cpu@
diff --git a/gst/aiff/Makefile.in b/gst/aiff/Makefile.in
index dd427f1..a48bf26 100644
--- a/gst/aiff/Makefile.in
+++ b/gst/aiff/Makefile.in
@@ -116,16 +116,15 @@
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
 	$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
-	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gsettings.m4 \
-	$(top_srcdir)/m4/gst-fionread.m4 $(top_srcdir)/m4/gst-sdl.m4 \
-	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
-	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
-	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libgcrypt.m4 \
-	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
-	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
-	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
-	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
-	$(top_srcdir)/configure.ac
+	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gst-fionread.m4 \
+	$(top_srcdir)/m4/gst-sdl.m4 $(top_srcdir)/m4/iconv.m4 \
+	$(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \
+	$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
+	$(top_srcdir)/m4/libgcrypt.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
+	$(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \
@@ -275,6 +274,8 @@
 CLUTTER_X11_LIBS = @CLUTTER_X11_LIBS@
 CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
+CUDA_CFLAGS = @CUDA_CFLAGS@
+CUDA_LIBS = @CUDA_LIBS@
 CURL_CFLAGS = @CURL_CFLAGS@
 CURL_LIBS = @CURL_LIBS@
 CXX = @CXX@
@@ -312,6 +313,8 @@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
+EGL_CFLAGS = @EGL_CFLAGS@
+EGL_LIBS = @EGL_LIBS@
 EGREP = @EGREP@
 ERROR_CFLAGS = @ERROR_CFLAGS@
 ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
@@ -320,7 +323,6 @@
 EXIF_CFLAGS = @EXIF_CFLAGS@
 EXIF_LIBS = @EXIF_LIBS@
 FAAC_LIBS = @FAAC_LIBS@
-FAAD_IS_NEAAC = @FAAD_IS_NEAAC@
 FAAD_LIBS = @FAAD_LIBS@
 FFLAGS = @FFLAGS@
 FGREP = @FGREP@
@@ -339,8 +341,9 @@
 GIO_LIBS = @GIO_LIBS@
 GIO_UNIX_CFLAGS = @GIO_UNIX_CFLAGS@
 GIO_UNIX_LIBS = @GIO_UNIX_LIBS@
+GLES2_CFLAGS = @GLES2_CFLAGS@
+GLES2_LIBS = @GLES2_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
-GLIB_COMPILE_SCHEMAS = @GLIB_COMPILE_SCHEMAS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
@@ -357,16 +360,17 @@
 GMODULE_NO_EXPORT_LIBS = @GMODULE_NO_EXPORT_LIBS@
 GMSGFMT = @GMSGFMT@
 GMSGFMT_015 = @GMSGFMT_015@
+GNUSTL_CFLAGS = @GNUSTL_CFLAGS@
+GNUSTL_LIBS = @GNUSTL_LIBS@
 GRAPHENE_CFLAGS = @GRAPHENE_CFLAGS@
 GRAPHENE_LIBS = @GRAPHENE_LIBS@
 GREP = @GREP@
-GSETTINGS_CFLAGS = @GSETTINGS_CFLAGS@
-GSETTINGS_DISABLE_SCHEMAS_COMPILE = @GSETTINGS_DISABLE_SCHEMAS_COMPILE@
-GSETTINGS_LIBS = @GSETTINGS_LIBS@
 GSM_LIBS = @GSM_LIBS@
 GSTPB_PLUGINS_DIR = @GSTPB_PLUGINS_DIR@
 GSTPB_PREFIX = @GSTPB_PREFIX@
 GST_AGE = @GST_AGE@
+GST_ALLOCATORS_CFLAGS = @GST_ALLOCATORS_CFLAGS@
+GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
 GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
 GST_API_VERSION = @GST_API_VERSION@
 GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
@@ -392,6 +396,8 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PBUTILS_CFLAGS = @GST_PBUTILS_CFLAGS@
+GST_PBUTILS_LIBS = @GST_PBUTILS_LIBS@
 GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BAD_CFLAGS = @GST_PLUGINS_BAD_CFLAGS@
@@ -417,6 +423,8 @@
 GST_PREFIX = @GST_PREFIX@
 GST_REVISION = @GST_REVISION@
 GST_TOOLS_DIR = @GST_TOOLS_DIR@
+GST_VIDEO_CFLAGS = @GST_VIDEO_CFLAGS@
+GST_VIDEO_LIBS = @GST_VIDEO_LIBS@
 GTK3_CFLAGS = @GTK3_CFLAGS@
 GTK3_GL_CFLAGS = @GTK3_GL_CFLAGS@
 GTK3_GL_LIBS = @GTK3_GL_LIBS@
@@ -518,6 +526,7 @@
 LTLIBICONV = @LTLIBICONV@
 LTLIBINTL = @LTLIBINTL@
 LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
 MANIFEST_TOOL = @MANIFEST_TOOL@
@@ -531,8 +540,6 @@
 MODPLUG_LIBS = @MODPLUG_LIBS@
 MPEG2ENC_CFLAGS = @MPEG2ENC_CFLAGS@
 MPEG2ENC_LIBS = @MPEG2ENC_LIBS@
-MPG123_CFLAGS = @MPG123_CFLAGS@
-MPG123_LIBS = @MPG123_LIBS@
 MPLEX_CFLAGS = @MPLEX_CFLAGS@
 MPLEX_LDFLAGS = @MPLEX_LDFLAGS@
 MPLEX_LIBS = @MPLEX_LIBS@
@@ -548,6 +555,8 @@
 NETTLE_LIBS = @NETTLE_LIBS@
 NM = @NM@
 NMEDIT = @NMEDIT@
+NVENCODE_CFLAGS = @NVENCODE_CFLAGS@
+NVENCODE_LIBS = @NVENCODE_LIBS@
 OBJC = @OBJC@
 OBJCDEPMODE = @OBJCDEPMODE@
 OBJCFLAGS = @OBJCFLAGS@
@@ -605,16 +614,18 @@
 PYTHON_PLATFORM = @PYTHON_PLATFORM@
 PYTHON_PREFIX = @PYTHON_PREFIX@
 PYTHON_VERSION = @PYTHON_VERSION@
+QT_ANDROID_CFLAGS = @QT_ANDROID_CFLAGS@
+QT_ANDROID_LIBS = @QT_ANDROID_LIBS@
 QT_CFLAGS = @QT_CFLAGS@
 QT_LIBS = @QT_LIBS@
+QT_MAC_CFLAGS = @QT_MAC_CFLAGS@
+QT_MAC_LIBS = @QT_MAC_LIBS@
 QT_WAYLAND_CFLAGS = @QT_WAYLAND_CFLAGS@
 QT_WAYLAND_LIBS = @QT_WAYLAND_LIBS@
 QT_X11_CFLAGS = @QT_X11_CFLAGS@
 QT_X11_LIBS = @QT_X11_LIBS@
 RANLIB = @RANLIB@
 RCC = @RCC@
-RSVG_2_36_2_CFLAGS = @RSVG_2_36_2_CFLAGS@
-RSVG_2_36_2_LIBS = @RSVG_2_36_2_LIBS@
 RSVG_CFLAGS = @RSVG_CFLAGS@
 RSVG_LIBS = @RSVG_LIBS@
 RTMP_CFLAGS = @RTMP_CFLAGS@
@@ -666,6 +677,7 @@
 VOAACENC_LIBS = @VOAACENC_LIBS@
 VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
 VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VULKAN_LIBS = @VULKAN_LIBS@
 WARNING_CFLAGS = @WARNING_CFLAGS@
 WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
 WARNING_OBJCFLAGS = @WARNING_OBJCFLAGS@
@@ -676,6 +688,7 @@
 WAYLAND_LIBS = @WAYLAND_LIBS@
 WEBP_CFLAGS = @WEBP_CFLAGS@
 WEBP_LIBS = @WEBP_LIBS@
+WGET = @WGET@
 WILDMIDI_CFLAGS = @WILDMIDI_CFLAGS@
 WILDMIDI_LIBS = @WILDMIDI_LIBS@
 WINKS_LIBS = @WINKS_LIBS@
@@ -685,6 +698,8 @@
 X11_LIBS = @X11_LIBS@
 X265_CFLAGS = @X265_CFLAGS@
 X265_LIBS = @X265_LIBS@
+XCB_CFLAGS = @XCB_CFLAGS@
+XCB_LIBS = @XCB_LIBS@
 XCOMPOSITE_CFLAGS = @XCOMPOSITE_CFLAGS@
 XCOMPOSITE_LIBS = @XCOMPOSITE_LIBS@
 XGETTEXT = @XGETTEXT@
@@ -722,7 +737,6 @@
 docdir = @docdir@
 dvidir = @dvidir@
 exec_prefix = @exec_prefix@
-gsettingsschemadir = @gsettingsschemadir@
 host = @host@
 host_alias = @host_alias@
 host_cpu = @host_cpu@
diff --git a/gst/aiff/aiffparse.c b/gst/aiff/aiffparse.c
index 78854ae..5600a7e 100644
--- a/gst/aiff/aiffparse.c
+++ b/gst/aiff/aiffparse.c
@@ -35,14 +35,14 @@
  * <title>Example launch line</title>
  * <para>
  * <programlisting>
- * gst-launch filesrc location=sine.aiff ! aiffparse ! audioconvert ! alsasink
+ * gst-launch-1.0 filesrc location=sine.aiff ! aiffparse ! audioconvert ! alsasink
  * </programlisting>
  * Read a aiff file and output to the soundcard using the ALSA element. The
  * aiff file is assumed to contain raw uncompressed samples.
  * </para>
  * <para>
  * <programlisting>
- * gst-launch souphhtpsrc location=http://www.example.org/sine.aiff ! queue ! aiffparse ! audioconvert ! alsasink
+ * gst-launch-1.0 souphttpsrc location=http://www.example.org/sine.aiff ! queue ! aiffparse ! audioconvert ! alsasink
  * </programlisting>
  * Stream data from a network url.
  * </para>
@@ -816,11 +816,14 @@
 
 }
 
+#define _P(pos) (G_GUINT64_CONSTANT (1) << GST_AUDIO_CHANNEL_POSITION_ ##pos)
+
 static GstCaps *
 gst_aiff_parse_create_caps (GstAiffParse * aiff)
 {
   GstCaps *caps = NULL;
   const gchar *format = NULL;
+  guint64 channel_mask;
 
   if (aiff->floating_point) {
     if (aiff->endianness == G_BIG_ENDIAN) {
@@ -858,6 +861,44 @@
         "rate", G_TYPE_INT, aiff->rate, NULL);
   }
 
+  if (aiff->channels > 2) {
+    GST_FIXME_OBJECT (aiff, "using fallback channel layout for %d channels",
+        aiff->channels);
+
+    /* based on AIFF-1.3.pdf */
+    switch (aiff->channels) {
+      case 1:
+        channel_mask = 0;
+        break;
+      case 2:
+        channel_mask = _P (FRONT_LEFT) | _P (FRONT_RIGHT);
+        break;
+      case 3:
+        channel_mask = _P (FRONT_LEFT) | _P (FRONT_RIGHT) | _P (FRONT_CENTER);
+        break;
+      case 4:
+        /* lists both this and 'quad' but doesn't say how to distinguish the two */
+        channel_mask =
+            _P (FRONT_LEFT) | _P (FRONT_RIGHT) | _P (REAR_LEFT) |
+            _P (REAR_RIGHT);
+        break;
+      case 6:
+        channel_mask =
+            _P (FRONT_LEFT) | _P (FRONT_LEFT_OF_CENTER) | _P (FRONT_CENTER) |
+            _P (FRONT_RIGHT) | _P (FRONT_RIGHT_OF_CENTER) | _P (LFE1);
+        break;
+      default:
+        channel_mask = gst_audio_channel_get_fallback_mask (aiff->channels);
+        break;
+    }
+
+
+    if (channel_mask != 0) {
+      gst_caps_set_simple (caps, "channel-mask", GST_TYPE_BITMASK, channel_mask,
+          NULL);
+    }
+  }
+
   GST_DEBUG_OBJECT (aiff, "Created caps: %" GST_PTR_FORMAT, caps);
 
   return caps;
@@ -1050,6 +1091,11 @@
         }
         break;
       }
+      case GST_MAKE_FOURCC ('C', 'H', 'A', 'N'):{
+        GST_FIXME_OBJECT (aiff, "Handle CHAN chunk with channel layouts");
+        gst_aiff_parse_ignore_chunk (aiff, tag, size);
+        break;
+      }
       default:
         gst_aiff_parse_ignore_chunk (aiff, tag, size);
     }
diff --git a/gst/asfmux/Makefile.in b/gst/asfmux/Makefile.in
index 08cee4f..84cdcb9 100644
--- a/gst/asfmux/Makefile.in
+++ b/gst/asfmux/Makefile.in
@@ -118,16 +118,15 @@
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
 	$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
-	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gsettings.m4 \
-	$(top_srcdir)/m4/gst-fionread.m4 $(top_srcdir)/m4/gst-sdl.m4 \
-	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
-	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
-	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libgcrypt.m4 \
-	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
-	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
-	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
-	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
-	$(top_srcdir)/configure.ac
+	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gst-fionread.m4 \
+	$(top_srcdir)/m4/gst-sdl.m4 $(top_srcdir)/m4/iconv.m4 \
+	$(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \
+	$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
+	$(top_srcdir)/m4/libgcrypt.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
+	$(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \
@@ -279,6 +278,8 @@
 CLUTTER_X11_LIBS = @CLUTTER_X11_LIBS@
 CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
+CUDA_CFLAGS = @CUDA_CFLAGS@
+CUDA_LIBS = @CUDA_LIBS@
 CURL_CFLAGS = @CURL_CFLAGS@
 CURL_LIBS = @CURL_LIBS@
 CXX = @CXX@
@@ -316,6 +317,8 @@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
+EGL_CFLAGS = @EGL_CFLAGS@
+EGL_LIBS = @EGL_LIBS@
 EGREP = @EGREP@
 ERROR_CFLAGS = @ERROR_CFLAGS@
 ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
@@ -324,7 +327,6 @@
 EXIF_CFLAGS = @EXIF_CFLAGS@
 EXIF_LIBS = @EXIF_LIBS@
 FAAC_LIBS = @FAAC_LIBS@
-FAAD_IS_NEAAC = @FAAD_IS_NEAAC@
 FAAD_LIBS = @FAAD_LIBS@
 FFLAGS = @FFLAGS@
 FGREP = @FGREP@
@@ -343,8 +345,9 @@
 GIO_LIBS = @GIO_LIBS@
 GIO_UNIX_CFLAGS = @GIO_UNIX_CFLAGS@
 GIO_UNIX_LIBS = @GIO_UNIX_LIBS@
+GLES2_CFLAGS = @GLES2_CFLAGS@
+GLES2_LIBS = @GLES2_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
-GLIB_COMPILE_SCHEMAS = @GLIB_COMPILE_SCHEMAS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
@@ -361,16 +364,17 @@
 GMODULE_NO_EXPORT_LIBS = @GMODULE_NO_EXPORT_LIBS@
 GMSGFMT = @GMSGFMT@
 GMSGFMT_015 = @GMSGFMT_015@
+GNUSTL_CFLAGS = @GNUSTL_CFLAGS@
+GNUSTL_LIBS = @GNUSTL_LIBS@
 GRAPHENE_CFLAGS = @GRAPHENE_CFLAGS@
 GRAPHENE_LIBS = @GRAPHENE_LIBS@
 GREP = @GREP@
-GSETTINGS_CFLAGS = @GSETTINGS_CFLAGS@
-GSETTINGS_DISABLE_SCHEMAS_COMPILE = @GSETTINGS_DISABLE_SCHEMAS_COMPILE@
-GSETTINGS_LIBS = @GSETTINGS_LIBS@
 GSM_LIBS = @GSM_LIBS@
 GSTPB_PLUGINS_DIR = @GSTPB_PLUGINS_DIR@
 GSTPB_PREFIX = @GSTPB_PREFIX@
 GST_AGE = @GST_AGE@
+GST_ALLOCATORS_CFLAGS = @GST_ALLOCATORS_CFLAGS@
+GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
 GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
 GST_API_VERSION = @GST_API_VERSION@
 GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
@@ -396,6 +400,8 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PBUTILS_CFLAGS = @GST_PBUTILS_CFLAGS@
+GST_PBUTILS_LIBS = @GST_PBUTILS_LIBS@
 GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BAD_CFLAGS = @GST_PLUGINS_BAD_CFLAGS@
@@ -421,6 +427,8 @@
 GST_PREFIX = @GST_PREFIX@
 GST_REVISION = @GST_REVISION@
 GST_TOOLS_DIR = @GST_TOOLS_DIR@
+GST_VIDEO_CFLAGS = @GST_VIDEO_CFLAGS@
+GST_VIDEO_LIBS = @GST_VIDEO_LIBS@
 GTK3_CFLAGS = @GTK3_CFLAGS@
 GTK3_GL_CFLAGS = @GTK3_GL_CFLAGS@
 GTK3_GL_LIBS = @GTK3_GL_LIBS@
@@ -522,6 +530,7 @@
 LTLIBICONV = @LTLIBICONV@
 LTLIBINTL = @LTLIBINTL@
 LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
 MANIFEST_TOOL = @MANIFEST_TOOL@
@@ -535,8 +544,6 @@
 MODPLUG_LIBS = @MODPLUG_LIBS@
 MPEG2ENC_CFLAGS = @MPEG2ENC_CFLAGS@
 MPEG2ENC_LIBS = @MPEG2ENC_LIBS@
-MPG123_CFLAGS = @MPG123_CFLAGS@
-MPG123_LIBS = @MPG123_LIBS@
 MPLEX_CFLAGS = @MPLEX_CFLAGS@
 MPLEX_LDFLAGS = @MPLEX_LDFLAGS@
 MPLEX_LIBS = @MPLEX_LIBS@
@@ -552,6 +559,8 @@
 NETTLE_LIBS = @NETTLE_LIBS@
 NM = @NM@
 NMEDIT = @NMEDIT@
+NVENCODE_CFLAGS = @NVENCODE_CFLAGS@
+NVENCODE_LIBS = @NVENCODE_LIBS@
 OBJC = @OBJC@
 OBJCDEPMODE = @OBJCDEPMODE@
 OBJCFLAGS = @OBJCFLAGS@
@@ -609,16 +618,18 @@
 PYTHON_PLATFORM = @PYTHON_PLATFORM@
 PYTHON_PREFIX = @PYTHON_PREFIX@
 PYTHON_VERSION = @PYTHON_VERSION@
+QT_ANDROID_CFLAGS = @QT_ANDROID_CFLAGS@
+QT_ANDROID_LIBS = @QT_ANDROID_LIBS@
 QT_CFLAGS = @QT_CFLAGS@
 QT_LIBS = @QT_LIBS@
+QT_MAC_CFLAGS = @QT_MAC_CFLAGS@
+QT_MAC_LIBS = @QT_MAC_LIBS@
 QT_WAYLAND_CFLAGS = @QT_WAYLAND_CFLAGS@
 QT_WAYLAND_LIBS = @QT_WAYLAND_LIBS@
 QT_X11_CFLAGS = @QT_X11_CFLAGS@
 QT_X11_LIBS = @QT_X11_LIBS@
 RANLIB = @RANLIB@
 RCC = @RCC@
-RSVG_2_36_2_CFLAGS = @RSVG_2_36_2_CFLAGS@
-RSVG_2_36_2_LIBS = @RSVG_2_36_2_LIBS@
 RSVG_CFLAGS = @RSVG_CFLAGS@
 RSVG_LIBS = @RSVG_LIBS@
 RTMP_CFLAGS = @RTMP_CFLAGS@
@@ -670,6 +681,7 @@
 VOAACENC_LIBS = @VOAACENC_LIBS@
 VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
 VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VULKAN_LIBS = @VULKAN_LIBS@
 WARNING_CFLAGS = @WARNING_CFLAGS@
 WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
 WARNING_OBJCFLAGS = @WARNING_OBJCFLAGS@
@@ -680,6 +692,7 @@
 WAYLAND_LIBS = @WAYLAND_LIBS@
 WEBP_CFLAGS = @WEBP_CFLAGS@
 WEBP_LIBS = @WEBP_LIBS@
+WGET = @WGET@
 WILDMIDI_CFLAGS = @WILDMIDI_CFLAGS@
 WILDMIDI_LIBS = @WILDMIDI_LIBS@
 WINKS_LIBS = @WINKS_LIBS@
@@ -689,6 +702,8 @@
 X11_LIBS = @X11_LIBS@
 X265_CFLAGS = @X265_CFLAGS@
 X265_LIBS = @X265_LIBS@
+XCB_CFLAGS = @XCB_CFLAGS@
+XCB_LIBS = @XCB_LIBS@
 XCOMPOSITE_CFLAGS = @XCOMPOSITE_CFLAGS@
 XCOMPOSITE_LIBS = @XCOMPOSITE_LIBS@
 XGETTEXT = @XGETTEXT@
@@ -726,7 +741,6 @@
 docdir = @docdir@
 dvidir = @dvidir@
 exec_prefix = @exec_prefix@
-gsettingsschemadir = @gsettingsschemadir@
 host = @host@
 host_alias = @host_alias@
 host_cpu = @host_cpu@
diff --git a/gst/asfmux/gstasfmux.c b/gst/asfmux/gstasfmux.c
index c77f8b6..45617be 100644
--- a/gst/asfmux/gstasfmux.c
+++ b/gst/asfmux/gstasfmux.c
@@ -35,11 +35,11 @@
  * <title>Example launch lines</title>
  * <para>(write everything in one line, without the backslash characters)</para>
  * |[
- * gst-launch videotestsrc num-buffers=250 \
- * ! "video/x-raw,format=(string)I420,framerate=(fraction)25/1" ! ffenc_wmv2 \
+ * gst-launch-1.0 videotestsrc num-buffers=250 \
+ * ! "video/x-raw,format=(string)I420,framerate=(fraction)25/1" ! avenc_wmv2 \
  * ! asfmux name=mux ! filesink location=test.asf \
  * audiotestsrc num-buffers=440 ! audioconvert \
- * ! "audio/x-raw,rate=44100" ! ffenc_wmav2 ! mux.
+ * ! "audio/x-raw,rate=44100" ! avenc_wmav2 ! mux.
  * ]| This creates an ASF file containing an WMV video stream
  * with a test picture and WMA audio stream of a test sound.
  *
@@ -54,13 +54,13 @@
  * <para>(write everything in one line, without the backslash characters)</para>
  * Server (sender)
  * |[
- * gst-launch -ve videotestsrc ! ffenc_wmv2 ! asfmux name=mux streamable=true \
+ * gst-launch-1.0 -ve videotestsrc ! avenc_wmv2 ! asfmux name=mux streamable=true \
  * ! rtpasfpay ! udpsink host=127.0.0.1 port=3333 \
- * audiotestsrc ! ffenc_wmav2 ! mux.
+ * audiotestsrc ! avenc_wmav2 ! mux.
  * ]|
  * Client (receiver)
  * |[
- * gst-launch udpsrc port=3333 ! "caps_from_rtpasfpay_at_sender" \
+ * gst-launch-1.0 udpsrc port=3333 ! "caps_from_rtpasfpay_at_sender" \
  * ! rtpasfdepay ! decodebin name=d ! queue \
  * ! videoconvert ! autovideosink \
  * d. ! queue ! audioconvert ! autoaudiosink
diff --git a/gst/audiofxbad/Makefile.in b/gst/audiofxbad/Makefile.in
index c56081f..028d8c9 100644
--- a/gst/audiofxbad/Makefile.in
+++ b/gst/audiofxbad/Makefile.in
@@ -115,16 +115,15 @@
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
 	$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
-	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gsettings.m4 \
-	$(top_srcdir)/m4/gst-fionread.m4 $(top_srcdir)/m4/gst-sdl.m4 \
-	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
-	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
-	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libgcrypt.m4 \
-	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
-	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
-	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
-	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
-	$(top_srcdir)/configure.ac
+	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gst-fionread.m4 \
+	$(top_srcdir)/m4/gst-sdl.m4 $(top_srcdir)/m4/iconv.m4 \
+	$(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \
+	$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
+	$(top_srcdir)/m4/libgcrypt.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
+	$(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
@@ -273,6 +272,8 @@
 CLUTTER_X11_LIBS = @CLUTTER_X11_LIBS@
 CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
+CUDA_CFLAGS = @CUDA_CFLAGS@
+CUDA_LIBS = @CUDA_LIBS@
 CURL_CFLAGS = @CURL_CFLAGS@
 CURL_LIBS = @CURL_LIBS@
 CXX = @CXX@
@@ -310,6 +311,8 @@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
+EGL_CFLAGS = @EGL_CFLAGS@
+EGL_LIBS = @EGL_LIBS@
 EGREP = @EGREP@
 ERROR_CFLAGS = @ERROR_CFLAGS@
 ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
@@ -318,7 +321,6 @@
 EXIF_CFLAGS = @EXIF_CFLAGS@
 EXIF_LIBS = @EXIF_LIBS@
 FAAC_LIBS = @FAAC_LIBS@
-FAAD_IS_NEAAC = @FAAD_IS_NEAAC@
 FAAD_LIBS = @FAAD_LIBS@
 FFLAGS = @FFLAGS@
 FGREP = @FGREP@
@@ -337,8 +339,9 @@
 GIO_LIBS = @GIO_LIBS@
 GIO_UNIX_CFLAGS = @GIO_UNIX_CFLAGS@
 GIO_UNIX_LIBS = @GIO_UNIX_LIBS@
+GLES2_CFLAGS = @GLES2_CFLAGS@
+GLES2_LIBS = @GLES2_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
-GLIB_COMPILE_SCHEMAS = @GLIB_COMPILE_SCHEMAS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
@@ -355,16 +358,17 @@
 GMODULE_NO_EXPORT_LIBS = @GMODULE_NO_EXPORT_LIBS@
 GMSGFMT = @GMSGFMT@
 GMSGFMT_015 = @GMSGFMT_015@
+GNUSTL_CFLAGS = @GNUSTL_CFLAGS@
+GNUSTL_LIBS = @GNUSTL_LIBS@
 GRAPHENE_CFLAGS = @GRAPHENE_CFLAGS@
 GRAPHENE_LIBS = @GRAPHENE_LIBS@
 GREP = @GREP@
-GSETTINGS_CFLAGS = @GSETTINGS_CFLAGS@
-GSETTINGS_DISABLE_SCHEMAS_COMPILE = @GSETTINGS_DISABLE_SCHEMAS_COMPILE@
-GSETTINGS_LIBS = @GSETTINGS_LIBS@
 GSM_LIBS = @GSM_LIBS@
 GSTPB_PLUGINS_DIR = @GSTPB_PLUGINS_DIR@
 GSTPB_PREFIX = @GSTPB_PREFIX@
 GST_AGE = @GST_AGE@
+GST_ALLOCATORS_CFLAGS = @GST_ALLOCATORS_CFLAGS@
+GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
 GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
 GST_API_VERSION = @GST_API_VERSION@
 GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
@@ -390,6 +394,8 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PBUTILS_CFLAGS = @GST_PBUTILS_CFLAGS@
+GST_PBUTILS_LIBS = @GST_PBUTILS_LIBS@
 GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BAD_CFLAGS = @GST_PLUGINS_BAD_CFLAGS@
@@ -415,6 +421,8 @@
 GST_PREFIX = @GST_PREFIX@
 GST_REVISION = @GST_REVISION@
 GST_TOOLS_DIR = @GST_TOOLS_DIR@
+GST_VIDEO_CFLAGS = @GST_VIDEO_CFLAGS@
+GST_VIDEO_LIBS = @GST_VIDEO_LIBS@
 GTK3_CFLAGS = @GTK3_CFLAGS@
 GTK3_GL_CFLAGS = @GTK3_GL_CFLAGS@
 GTK3_GL_LIBS = @GTK3_GL_LIBS@
@@ -516,6 +524,7 @@
 LTLIBICONV = @LTLIBICONV@
 LTLIBINTL = @LTLIBINTL@
 LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
 MANIFEST_TOOL = @MANIFEST_TOOL@
@@ -529,8 +538,6 @@
 MODPLUG_LIBS = @MODPLUG_LIBS@
 MPEG2ENC_CFLAGS = @MPEG2ENC_CFLAGS@
 MPEG2ENC_LIBS = @MPEG2ENC_LIBS@
-MPG123_CFLAGS = @MPG123_CFLAGS@
-MPG123_LIBS = @MPG123_LIBS@
 MPLEX_CFLAGS = @MPLEX_CFLAGS@
 MPLEX_LDFLAGS = @MPLEX_LDFLAGS@
 MPLEX_LIBS = @MPLEX_LIBS@
@@ -546,6 +553,8 @@
 NETTLE_LIBS = @NETTLE_LIBS@
 NM = @NM@
 NMEDIT = @NMEDIT@
+NVENCODE_CFLAGS = @NVENCODE_CFLAGS@
+NVENCODE_LIBS = @NVENCODE_LIBS@
 OBJC = @OBJC@
 OBJCDEPMODE = @OBJCDEPMODE@
 OBJCFLAGS = @OBJCFLAGS@
@@ -603,16 +612,18 @@
 PYTHON_PLATFORM = @PYTHON_PLATFORM@
 PYTHON_PREFIX = @PYTHON_PREFIX@
 PYTHON_VERSION = @PYTHON_VERSION@
+QT_ANDROID_CFLAGS = @QT_ANDROID_CFLAGS@
+QT_ANDROID_LIBS = @QT_ANDROID_LIBS@
 QT_CFLAGS = @QT_CFLAGS@
 QT_LIBS = @QT_LIBS@
+QT_MAC_CFLAGS = @QT_MAC_CFLAGS@
+QT_MAC_LIBS = @QT_MAC_LIBS@
 QT_WAYLAND_CFLAGS = @QT_WAYLAND_CFLAGS@
 QT_WAYLAND_LIBS = @QT_WAYLAND_LIBS@
 QT_X11_CFLAGS = @QT_X11_CFLAGS@
 QT_X11_LIBS = @QT_X11_LIBS@
 RANLIB = @RANLIB@
 RCC = @RCC@
-RSVG_2_36_2_CFLAGS = @RSVG_2_36_2_CFLAGS@
-RSVG_2_36_2_LIBS = @RSVG_2_36_2_LIBS@
 RSVG_CFLAGS = @RSVG_CFLAGS@
 RSVG_LIBS = @RSVG_LIBS@
 RTMP_CFLAGS = @RTMP_CFLAGS@
@@ -664,6 +675,7 @@
 VOAACENC_LIBS = @VOAACENC_LIBS@
 VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
 VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VULKAN_LIBS = @VULKAN_LIBS@
 WARNING_CFLAGS = @WARNING_CFLAGS@
 WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
 WARNING_OBJCFLAGS = @WARNING_OBJCFLAGS@
@@ -674,6 +686,7 @@
 WAYLAND_LIBS = @WAYLAND_LIBS@
 WEBP_CFLAGS = @WEBP_CFLAGS@
 WEBP_LIBS = @WEBP_LIBS@
+WGET = @WGET@
 WILDMIDI_CFLAGS = @WILDMIDI_CFLAGS@
 WILDMIDI_LIBS = @WILDMIDI_LIBS@
 WINKS_LIBS = @WINKS_LIBS@
@@ -683,6 +696,8 @@
 X11_LIBS = @X11_LIBS@
 X265_CFLAGS = @X265_CFLAGS@
 X265_LIBS = @X265_LIBS@
+XCB_CFLAGS = @XCB_CFLAGS@
+XCB_LIBS = @XCB_LIBS@
 XCOMPOSITE_CFLAGS = @XCOMPOSITE_CFLAGS@
 XCOMPOSITE_LIBS = @XCOMPOSITE_LIBS@
 XGETTEXT = @XGETTEXT@
@@ -720,7 +735,6 @@
 docdir = @docdir@
 dvidir = @dvidir@
 exec_prefix = @exec_prefix@
-gsettingsschemadir = @gsettingsschemadir@
 host = @host@
 host_alias = @host_alias@
 host_cpu = @host_cpu@
diff --git a/gst/audiofxbad/gstaudiochannelmix.c b/gst/audiofxbad/gstaudiochannelmix.c
index fa48c26..aebe84a 100644
--- a/gst/audiofxbad/gstaudiochannelmix.c
+++ b/gst/audiofxbad/gstaudiochannelmix.c
@@ -27,7 +27,7 @@
  * <refsect2>
  * <title>Example launch line</title>
  * |[
- * gst-launch -v audiotestsrc ! audiochannelmix ! autoaudiosink
+ * gst-launch-1.0 -v audiotestsrc ! audiochannelmix ! autoaudiosink
  * ]|
  * </refsect2>
  */
diff --git a/gst/audiomixer/Makefile.am b/gst/audiomixer/Makefile.am
index a126f90..9104c1b 100644
--- a/gst/audiomixer/Makefile.am
+++ b/gst/audiomixer/Makefile.am
@@ -4,7 +4,7 @@
 include $(top_srcdir)/common/orc.mak
 
 
-libgstaudiomixer_la_SOURCES = gstaudiomixer.c gstaudioaggregator.c gstaudiointerleave.c
+libgstaudiomixer_la_SOURCES = gstaudiomixer.c gstaudiointerleave.c
 nodist_libgstaudiomixer_la_SOURCES = $(ORC_NODIST_SOURCES)
 libgstaudiomixer_la_CFLAGS = \
 	-I$(top_srcdir)/gst-libs \
@@ -14,9 +14,10 @@
 libgstaudiomixer_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS)
 libgstaudiomixer_la_LIBADD =  \
 		$(top_builddir)/gst-libs/gst/base/libgstbadbase-$(GST_API_VERSION).la \
+		$(top_builddir)/gst-libs/gst/audio/libgstbadaudio-$(GST_API_VERSION).la \
 		$(GST_PLUGINS_BASE_LIBS) -lgstaudio-@GST_API_VERSION@ \
 		$(GST_BASE_LIBS) $(GST_LIBS) $(ORC_LIBS)
 libgstaudiomixer_la_LIBTOOLFLAGS = $(GST_PLUGIN_LIBTOOLFLAGS)
 
-noinst_HEADERS = gstaudiomixer.h gstaudioaggregator.h gstaudiointerleave.h
+noinst_HEADERS = gstaudiomixer.h gstaudiointerleave.h
 
diff --git a/gst/audiomixer/Makefile.in b/gst/audiomixer/Makefile.in
index a4eb719..389c4d2 100644
--- a/gst/audiomixer/Makefile.in
+++ b/gst/audiomixer/Makefile.in
@@ -138,16 +138,15 @@
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
 	$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
-	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gsettings.m4 \
-	$(top_srcdir)/m4/gst-fionread.m4 $(top_srcdir)/m4/gst-sdl.m4 \
-	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
-	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
-	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libgcrypt.m4 \
-	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
-	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
-	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
-	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
-	$(top_srcdir)/configure.ac
+	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gst-fionread.m4 \
+	$(top_srcdir)/m4/gst-sdl.m4 $(top_srcdir)/m4/iconv.m4 \
+	$(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \
+	$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
+	$(top_srcdir)/m4/libgcrypt.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
+	$(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \
@@ -187,10 +186,10 @@
 LTLIBRARIES = $(plugin_LTLIBRARIES)
 am__DEPENDENCIES_1 =
 libgstaudiomixer_la_DEPENDENCIES = $(top_builddir)/gst-libs/gst/base/libgstbadbase-$(GST_API_VERSION).la \
+	$(top_builddir)/gst-libs/gst/audio/libgstbadaudio-$(GST_API_VERSION).la \
 	$(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
 	$(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1)
 am_libgstaudiomixer_la_OBJECTS = libgstaudiomixer_la-gstaudiomixer.lo \
-	libgstaudiomixer_la-gstaudioaggregator.lo \
 	libgstaudiomixer_la-gstaudiointerleave.lo
 am__objects_1 = libgstaudiomixer_la-tmp-orc.lo
 nodist_libgstaudiomixer_la_OBJECTS = $(am__objects_1)
@@ -304,6 +303,8 @@
 CLUTTER_X11_LIBS = @CLUTTER_X11_LIBS@
 CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
+CUDA_CFLAGS = @CUDA_CFLAGS@
+CUDA_LIBS = @CUDA_LIBS@
 CURL_CFLAGS = @CURL_CFLAGS@
 CURL_LIBS = @CURL_LIBS@
 CXX = @CXX@
@@ -341,6 +342,8 @@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
+EGL_CFLAGS = @EGL_CFLAGS@
+EGL_LIBS = @EGL_LIBS@
 EGREP = @EGREP@
 ERROR_CFLAGS = @ERROR_CFLAGS@
 ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
@@ -349,7 +352,6 @@
 EXIF_CFLAGS = @EXIF_CFLAGS@
 EXIF_LIBS = @EXIF_LIBS@
 FAAC_LIBS = @FAAC_LIBS@
-FAAD_IS_NEAAC = @FAAD_IS_NEAAC@
 FAAD_LIBS = @FAAD_LIBS@
 FFLAGS = @FFLAGS@
 FGREP = @FGREP@
@@ -368,8 +370,9 @@
 GIO_LIBS = @GIO_LIBS@
 GIO_UNIX_CFLAGS = @GIO_UNIX_CFLAGS@
 GIO_UNIX_LIBS = @GIO_UNIX_LIBS@
+GLES2_CFLAGS = @GLES2_CFLAGS@
+GLES2_LIBS = @GLES2_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
-GLIB_COMPILE_SCHEMAS = @GLIB_COMPILE_SCHEMAS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
@@ -386,16 +389,17 @@
 GMODULE_NO_EXPORT_LIBS = @GMODULE_NO_EXPORT_LIBS@
 GMSGFMT = @GMSGFMT@
 GMSGFMT_015 = @GMSGFMT_015@
+GNUSTL_CFLAGS = @GNUSTL_CFLAGS@
+GNUSTL_LIBS = @GNUSTL_LIBS@
 GRAPHENE_CFLAGS = @GRAPHENE_CFLAGS@
 GRAPHENE_LIBS = @GRAPHENE_LIBS@
 GREP = @GREP@
-GSETTINGS_CFLAGS = @GSETTINGS_CFLAGS@
-GSETTINGS_DISABLE_SCHEMAS_COMPILE = @GSETTINGS_DISABLE_SCHEMAS_COMPILE@
-GSETTINGS_LIBS = @GSETTINGS_LIBS@
 GSM_LIBS = @GSM_LIBS@
 GSTPB_PLUGINS_DIR = @GSTPB_PLUGINS_DIR@
 GSTPB_PREFIX = @GSTPB_PREFIX@
 GST_AGE = @GST_AGE@
+GST_ALLOCATORS_CFLAGS = @GST_ALLOCATORS_CFLAGS@
+GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
 GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
 GST_API_VERSION = @GST_API_VERSION@
 GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
@@ -421,6 +425,8 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PBUTILS_CFLAGS = @GST_PBUTILS_CFLAGS@
+GST_PBUTILS_LIBS = @GST_PBUTILS_LIBS@
 GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BAD_CFLAGS = @GST_PLUGINS_BAD_CFLAGS@
@@ -446,6 +452,8 @@
 GST_PREFIX = @GST_PREFIX@
 GST_REVISION = @GST_REVISION@
 GST_TOOLS_DIR = @GST_TOOLS_DIR@
+GST_VIDEO_CFLAGS = @GST_VIDEO_CFLAGS@
+GST_VIDEO_LIBS = @GST_VIDEO_LIBS@
 GTK3_CFLAGS = @GTK3_CFLAGS@
 GTK3_GL_CFLAGS = @GTK3_GL_CFLAGS@
 GTK3_GL_LIBS = @GTK3_GL_LIBS@
@@ -547,6 +555,7 @@
 LTLIBICONV = @LTLIBICONV@
 LTLIBINTL = @LTLIBINTL@
 LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
 MANIFEST_TOOL = @MANIFEST_TOOL@
@@ -560,8 +569,6 @@
 MODPLUG_LIBS = @MODPLUG_LIBS@
 MPEG2ENC_CFLAGS = @MPEG2ENC_CFLAGS@
 MPEG2ENC_LIBS = @MPEG2ENC_LIBS@
-MPG123_CFLAGS = @MPG123_CFLAGS@
-MPG123_LIBS = @MPG123_LIBS@
 MPLEX_CFLAGS = @MPLEX_CFLAGS@
 MPLEX_LDFLAGS = @MPLEX_LDFLAGS@
 MPLEX_LIBS = @MPLEX_LIBS@
@@ -577,6 +584,8 @@
 NETTLE_LIBS = @NETTLE_LIBS@
 NM = @NM@
 NMEDIT = @NMEDIT@
+NVENCODE_CFLAGS = @NVENCODE_CFLAGS@
+NVENCODE_LIBS = @NVENCODE_LIBS@
 OBJC = @OBJC@
 OBJCDEPMODE = @OBJCDEPMODE@
 OBJCFLAGS = @OBJCFLAGS@
@@ -634,16 +643,18 @@
 PYTHON_PLATFORM = @PYTHON_PLATFORM@
 PYTHON_PREFIX = @PYTHON_PREFIX@
 PYTHON_VERSION = @PYTHON_VERSION@
+QT_ANDROID_CFLAGS = @QT_ANDROID_CFLAGS@
+QT_ANDROID_LIBS = @QT_ANDROID_LIBS@
 QT_CFLAGS = @QT_CFLAGS@
 QT_LIBS = @QT_LIBS@
+QT_MAC_CFLAGS = @QT_MAC_CFLAGS@
+QT_MAC_LIBS = @QT_MAC_LIBS@
 QT_WAYLAND_CFLAGS = @QT_WAYLAND_CFLAGS@
 QT_WAYLAND_LIBS = @QT_WAYLAND_LIBS@
 QT_X11_CFLAGS = @QT_X11_CFLAGS@
 QT_X11_LIBS = @QT_X11_LIBS@
 RANLIB = @RANLIB@
 RCC = @RCC@
-RSVG_2_36_2_CFLAGS = @RSVG_2_36_2_CFLAGS@
-RSVG_2_36_2_LIBS = @RSVG_2_36_2_LIBS@
 RSVG_CFLAGS = @RSVG_CFLAGS@
 RSVG_LIBS = @RSVG_LIBS@
 RTMP_CFLAGS = @RTMP_CFLAGS@
@@ -695,6 +706,7 @@
 VOAACENC_LIBS = @VOAACENC_LIBS@
 VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
 VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VULKAN_LIBS = @VULKAN_LIBS@
 WARNING_CFLAGS = @WARNING_CFLAGS@
 WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
 WARNING_OBJCFLAGS = @WARNING_OBJCFLAGS@
@@ -705,6 +717,7 @@
 WAYLAND_LIBS = @WAYLAND_LIBS@
 WEBP_CFLAGS = @WEBP_CFLAGS@
 WEBP_LIBS = @WEBP_LIBS@
+WGET = @WGET@
 WILDMIDI_CFLAGS = @WILDMIDI_CFLAGS@
 WILDMIDI_LIBS = @WILDMIDI_LIBS@
 WINKS_LIBS = @WINKS_LIBS@
@@ -714,6 +727,8 @@
 X11_LIBS = @X11_LIBS@
 X265_CFLAGS = @X265_CFLAGS@
 X265_LIBS = @X265_LIBS@
+XCB_CFLAGS = @XCB_CFLAGS@
+XCB_LIBS = @XCB_LIBS@
 XCOMPOSITE_CFLAGS = @XCOMPOSITE_CFLAGS@
 XCOMPOSITE_LIBS = @XCOMPOSITE_LIBS@
 XGETTEXT = @XGETTEXT@
@@ -751,7 +766,6 @@
 docdir = @docdir@
 dvidir = @dvidir@
 exec_prefix = @exec_prefix@
-gsettingsschemadir = @gsettingsschemadir@
 host = @host@
 host_alias = @host_alias@
 host_cpu = @host_cpu@
@@ -802,7 +816,7 @@
 cp_v_gen = $(cp_v_gen_$(V))
 cp_v_gen_ = $(cp_v_gen_$(AM_DEFAULT_VERBOSITY))
 cp_v_gen_0 = @echo "  CP     $@";
-libgstaudiomixer_la_SOURCES = gstaudiomixer.c gstaudioaggregator.c gstaudiointerleave.c
+libgstaudiomixer_la_SOURCES = gstaudiomixer.c gstaudiointerleave.c
 nodist_libgstaudiomixer_la_SOURCES = $(ORC_NODIST_SOURCES)
 libgstaudiomixer_la_CFLAGS = \
 	-I$(top_srcdir)/gst-libs \
@@ -813,11 +827,12 @@
 libgstaudiomixer_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS)
 libgstaudiomixer_la_LIBADD = \
 		$(top_builddir)/gst-libs/gst/base/libgstbadbase-$(GST_API_VERSION).la \
+		$(top_builddir)/gst-libs/gst/audio/libgstbadaudio-$(GST_API_VERSION).la \
 		$(GST_PLUGINS_BASE_LIBS) -lgstaudio-@GST_API_VERSION@ \
 		$(GST_BASE_LIBS) $(GST_LIBS) $(ORC_LIBS)
 
 libgstaudiomixer_la_LIBTOOLFLAGS = $(GST_PLUGIN_LIBTOOLFLAGS)
-noinst_HEADERS = gstaudiomixer.h gstaudioaggregator.h gstaudiointerleave.h
+noinst_HEADERS = gstaudiomixer.h gstaudiointerleave.h
 all: $(BUILT_SOURCES)
 	$(MAKE) $(AM_MAKEFLAGS) all-am
 
@@ -898,7 +913,6 @@
 distclean-compile:
 	-rm -f *.tab.c
 
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstaudiomixer_la-gstaudioaggregator.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstaudiomixer_la-gstaudiointerleave.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstaudiomixer_la-gstaudiomixer.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstaudiomixer_la-tmp-orc.Plo@am__quote@
@@ -934,13 +948,6 @@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstaudiomixer_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstaudiomixer_la_CFLAGS) $(CFLAGS) -c -o libgstaudiomixer_la-gstaudiomixer.lo `test -f 'gstaudiomixer.c' || echo '$(srcdir)/'`gstaudiomixer.c
 
-libgstaudiomixer_la-gstaudioaggregator.lo: gstaudioaggregator.c
-@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstaudiomixer_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstaudiomixer_la_CFLAGS) $(CFLAGS) -MT libgstaudiomixer_la-gstaudioaggregator.lo -MD -MP -MF $(DEPDIR)/libgstaudiomixer_la-gstaudioaggregator.Tpo -c -o libgstaudiomixer_la-gstaudioaggregator.lo `test -f 'gstaudioaggregator.c' || echo '$(srcdir)/'`gstaudioaggregator.c
-@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstaudiomixer_la-gstaudioaggregator.Tpo $(DEPDIR)/libgstaudiomixer_la-gstaudioaggregator.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='gstaudioaggregator.c' object='libgstaudiomixer_la-gstaudioaggregator.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstaudiomixer_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstaudiomixer_la_CFLAGS) $(CFLAGS) -c -o libgstaudiomixer_la-gstaudioaggregator.lo `test -f 'gstaudioaggregator.c' || echo '$(srcdir)/'`gstaudioaggregator.c
-
 libgstaudiomixer_la-gstaudiointerleave.lo: gstaudiointerleave.c
 @am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstaudiomixer_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstaudiomixer_la_CFLAGS) $(CFLAGS) -MT libgstaudiomixer_la-gstaudiointerleave.lo -MD -MP -MF $(DEPDIR)/libgstaudiomixer_la-gstaudiointerleave.Tpo -c -o libgstaudiomixer_la-gstaudiointerleave.lo `test -f 'gstaudiointerleave.c' || echo '$(srcdir)/'`gstaudiointerleave.c
 @am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstaudiomixer_la-gstaudiointerleave.Tpo $(DEPDIR)/libgstaudiomixer_la-gstaudiointerleave.Plo
diff --git a/gst/audiomixer/gstaudiointerleave.h b/gst/audiomixer/gstaudiointerleave.h
index 0473b45..6dd82d3 100644
--- a/gst/audiomixer/gstaudiointerleave.h
+++ b/gst/audiomixer/gstaudiointerleave.h
@@ -27,7 +27,7 @@
 #include <gst/gst.h>
 #include <gst/audio/audio.h>
 
-#include "gstaudioaggregator.h"
+#include <gst/audio/gstaudioaggregator.h>
 
 G_BEGIN_DECLS
 
diff --git a/gst/audiomixer/gstaudiomixer.c b/gst/audiomixer/gstaudiomixer.c
index 3966a8f..b211f7d 100644
--- a/gst/audiomixer/gstaudiomixer.c
+++ b/gst/audiomixer/gstaudiomixer.c
@@ -44,7 +44,7 @@
  * <refsect2>
  * <title>Example launch line</title>
  * |[
- * gst-launch audiotestsrc freq=100 ! audiomixer name=mix ! audioconvert ! alsasink audiotestsrc freq=500 ! mix.
+ * gst-launch-1.0 audiotestsrc freq=100 ! audiomixer name=mix ! audioconvert ! alsasink audiotestsrc freq=500 ! mix.
  * ]| This pipeline produces two sine waves mixed together.
  * </refsect2>
  *
@@ -781,6 +781,97 @@
   iface->get_children_count = gst_audiomixer_child_proxy_get_children_count;
 }
 
+/* Empty liveadder alias with non-zero latency */
+
+typedef GstAudioMixer GstLiveAdder;
+typedef GstAudioMixerClass GstLiveAdderClass;
+
+static GType gst_live_adder_get_type (void);
+#define GST_TYPE_LIVE_ADDER gst_live_adder_get_type ()
+
+G_DEFINE_TYPE (GstLiveAdder, gst_live_adder, GST_TYPE_AUDIO_MIXER);
+
+enum
+{
+  LIVEADDER_PROP_LATENCY = 1
+};
+
+static void
+gst_live_adder_init (GstLiveAdder * self)
+{
+}
+
+static void
+gst_live_adder_set_property (GObject * object, guint prop_id,
+    const GValue * value, GParamSpec * pspec)
+{
+  switch (prop_id) {
+    case LIVEADDER_PROP_LATENCY:
+    {
+      GParamSpec *parent_spec =
+          g_object_class_find_property (G_OBJECT_CLASS
+          (gst_live_adder_parent_class), "latency");
+      GObjectClass *pspec_class = g_type_class_peek (parent_spec->owner_type);
+      GValue v = { 0 };
+
+      g_value_init (&v, G_TYPE_INT64);
+
+      g_value_set_int64 (&v, g_value_get_uint (value) * GST_MSECOND);
+
+      G_OBJECT_CLASS (pspec_class)->set_property (object,
+          parent_spec->param_id, &v, parent_spec);
+      break;
+    }
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
+  }
+}
+
+static void
+gst_live_adder_get_property (GObject * object, guint prop_id, GValue * value,
+    GParamSpec * pspec)
+{
+  switch (prop_id) {
+    case LIVEADDER_PROP_LATENCY:
+    {
+      GParamSpec *parent_spec =
+          g_object_class_find_property (G_OBJECT_CLASS
+          (gst_live_adder_parent_class), "latency");
+      GObjectClass *pspec_class = g_type_class_peek (parent_spec->owner_type);
+      GValue v = { 0 };
+
+      g_value_init (&v, G_TYPE_INT64);
+
+      G_OBJECT_CLASS (pspec_class)->get_property (object,
+          parent_spec->param_id, &v, parent_spec);
+
+      g_value_set_uint (value, g_value_get_int64 (&v) / GST_MSECOND);
+      break;
+    }
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
+  }
+}
+
+
+static void
+gst_live_adder_class_init (GstLiveAdderClass * klass)
+{
+  GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
+
+  gobject_class->set_property = gst_live_adder_set_property;
+  gobject_class->get_property = gst_live_adder_get_property;
+
+  g_object_class_install_property (gobject_class, LIVEADDER_PROP_LATENCY,
+      g_param_spec_uint ("latency", "Buffer latency",
+          "Additional latency in live mode to allow upstream "
+          "to take longer to produce buffers for the current "
+          "position (in milliseconds)", 0, G_MAXUINT,
+          30, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | G_PARAM_CONSTRUCT));
+}
+
 static gboolean
 plugin_init (GstPlugin * plugin)
 {
@@ -791,6 +882,10 @@
           GST_TYPE_AUDIO_MIXER))
     return FALSE;
 
+  if (!gst_element_register (plugin, "liveadder", GST_RANK_NONE,
+          GST_TYPE_LIVE_ADDER))
+    return FALSE;
+
   if (!gst_element_register (plugin, "audiointerleave", GST_RANK_NONE,
           GST_TYPE_AUDIO_INTERLEAVE))
     return FALSE;
diff --git a/gst/audiomixer/gstaudiomixer.h b/gst/audiomixer/gstaudiomixer.h
index add6e32..0e4098d 100644
--- a/gst/audiomixer/gstaudiomixer.h
+++ b/gst/audiomixer/gstaudiomixer.h
@@ -26,7 +26,7 @@
 
 #include <gst/gst.h>
 #include <gst/audio/audio.h>
-#include "gstaudioaggregator.h"
+#include <gst/audio/gstaudioaggregator.h>
 
 G_BEGIN_DECLS
 
diff --git a/gst/audiovisualizers/Makefile.am b/gst/audiovisualizers/Makefile.am
index a669900..ec9b05f 100644
--- a/gst/audiovisualizers/Makefile.am
+++ b/gst/audiovisualizers/Makefile.am
@@ -1,7 +1,6 @@
 plugin_LTLIBRARIES = libgstaudiovisualizers.la
 
 libgstaudiovisualizers_la_SOURCES = plugin.c \
-    gstaudiovisualizer.c gstaudiovisualizer.h \
     gstspacescope.c gstspacescope.h \
     gstspectrascope.c gstspectrascope.h \
     gstsynaescope.c gstsynaescope.h \
@@ -13,9 +12,12 @@
 libgstaudiovisualizers_la_LIBADD = \
 	$(GST_PLUGINS_BASE_LIBS) -lgstaudio-$(GST_API_VERSION) \
 	-lgstvideo-$(GST_API_VERSION) -lgstfft-$(GST_API_VERSION) \
-	$(GST_BASE_LIBS)  $(GST_LIBS) $(LIBM)
+	-lgstpbutils-$(GST_API_VERSION) $(GST_BASE_LIBS)  $(GST_LIBS) $(LIBM)
 libgstaudiovisualizers_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS)
 libgstaudiovisualizers_la_LIBTOOLFLAGS = $(GST_PLUGIN_LIBTOOLFLAGS)
 
-noinst_HEADERS = gstaudiovisualizer.h gstdrawhelpers.h \
-	gstspacescope.h gstspectrascope.h gstsynaescope.h gstwavescope.h
+noinst_HEADERS = gstdrawhelpers.h \
+	gstspacescope.h \
+	gstspectrascope.h \
+	gstsynaescope.h \
+	gstwavescope.h
diff --git a/gst/audiovisualizers/Makefile.in b/gst/audiovisualizers/Makefile.in
index c930141..4bfdf9e 100644
--- a/gst/audiovisualizers/Makefile.in
+++ b/gst/audiovisualizers/Makefile.in
@@ -116,16 +116,15 @@
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
 	$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
-	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gsettings.m4 \
-	$(top_srcdir)/m4/gst-fionread.m4 $(top_srcdir)/m4/gst-sdl.m4 \
-	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
-	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
-	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libgcrypt.m4 \
-	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
-	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
-	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
-	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
-	$(top_srcdir)/configure.ac
+	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gst-fionread.m4 \
+	$(top_srcdir)/m4/gst-sdl.m4 $(top_srcdir)/m4/iconv.m4 \
+	$(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \
+	$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
+	$(top_srcdir)/m4/libgcrypt.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
+	$(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \
@@ -169,7 +168,6 @@
 	$(am__DEPENDENCIES_1)
 am_libgstaudiovisualizers_la_OBJECTS =  \
 	libgstaudiovisualizers_la-plugin.lo \
-	libgstaudiovisualizers_la-gstaudiovisualizer.lo \
 	libgstaudiovisualizers_la-gstspacescope.lo \
 	libgstaudiovisualizers_la-gstspectrascope.lo \
 	libgstaudiovisualizers_la-gstsynaescope.lo \
@@ -283,6 +281,8 @@
 CLUTTER_X11_LIBS = @CLUTTER_X11_LIBS@
 CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
+CUDA_CFLAGS = @CUDA_CFLAGS@
+CUDA_LIBS = @CUDA_LIBS@
 CURL_CFLAGS = @CURL_CFLAGS@
 CURL_LIBS = @CURL_LIBS@
 CXX = @CXX@
@@ -320,6 +320,8 @@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
+EGL_CFLAGS = @EGL_CFLAGS@
+EGL_LIBS = @EGL_LIBS@
 EGREP = @EGREP@
 ERROR_CFLAGS = @ERROR_CFLAGS@
 ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
@@ -328,7 +330,6 @@
 EXIF_CFLAGS = @EXIF_CFLAGS@
 EXIF_LIBS = @EXIF_LIBS@
 FAAC_LIBS = @FAAC_LIBS@
-FAAD_IS_NEAAC = @FAAD_IS_NEAAC@
 FAAD_LIBS = @FAAD_LIBS@
 FFLAGS = @FFLAGS@
 FGREP = @FGREP@
@@ -347,8 +348,9 @@
 GIO_LIBS = @GIO_LIBS@
 GIO_UNIX_CFLAGS = @GIO_UNIX_CFLAGS@
 GIO_UNIX_LIBS = @GIO_UNIX_LIBS@
+GLES2_CFLAGS = @GLES2_CFLAGS@
+GLES2_LIBS = @GLES2_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
-GLIB_COMPILE_SCHEMAS = @GLIB_COMPILE_SCHEMAS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
@@ -365,16 +367,17 @@
 GMODULE_NO_EXPORT_LIBS = @GMODULE_NO_EXPORT_LIBS@
 GMSGFMT = @GMSGFMT@
 GMSGFMT_015 = @GMSGFMT_015@
+GNUSTL_CFLAGS = @GNUSTL_CFLAGS@
+GNUSTL_LIBS = @GNUSTL_LIBS@
 GRAPHENE_CFLAGS = @GRAPHENE_CFLAGS@
 GRAPHENE_LIBS = @GRAPHENE_LIBS@
 GREP = @GREP@
-GSETTINGS_CFLAGS = @GSETTINGS_CFLAGS@
-GSETTINGS_DISABLE_SCHEMAS_COMPILE = @GSETTINGS_DISABLE_SCHEMAS_COMPILE@
-GSETTINGS_LIBS = @GSETTINGS_LIBS@
 GSM_LIBS = @GSM_LIBS@
 GSTPB_PLUGINS_DIR = @GSTPB_PLUGINS_DIR@
 GSTPB_PREFIX = @GSTPB_PREFIX@
 GST_AGE = @GST_AGE@
+GST_ALLOCATORS_CFLAGS = @GST_ALLOCATORS_CFLAGS@
+GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
 GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
 GST_API_VERSION = @GST_API_VERSION@
 GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
@@ -400,6 +403,8 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PBUTILS_CFLAGS = @GST_PBUTILS_CFLAGS@
+GST_PBUTILS_LIBS = @GST_PBUTILS_LIBS@
 GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BAD_CFLAGS = @GST_PLUGINS_BAD_CFLAGS@
@@ -425,6 +430,8 @@
 GST_PREFIX = @GST_PREFIX@
 GST_REVISION = @GST_REVISION@
 GST_TOOLS_DIR = @GST_TOOLS_DIR@
+GST_VIDEO_CFLAGS = @GST_VIDEO_CFLAGS@
+GST_VIDEO_LIBS = @GST_VIDEO_LIBS@
 GTK3_CFLAGS = @GTK3_CFLAGS@
 GTK3_GL_CFLAGS = @GTK3_GL_CFLAGS@
 GTK3_GL_LIBS = @GTK3_GL_LIBS@
@@ -526,6 +533,7 @@
 LTLIBICONV = @LTLIBICONV@
 LTLIBINTL = @LTLIBINTL@
 LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
 MANIFEST_TOOL = @MANIFEST_TOOL@
@@ -539,8 +547,6 @@
 MODPLUG_LIBS = @MODPLUG_LIBS@
 MPEG2ENC_CFLAGS = @MPEG2ENC_CFLAGS@
 MPEG2ENC_LIBS = @MPEG2ENC_LIBS@
-MPG123_CFLAGS = @MPG123_CFLAGS@
-MPG123_LIBS = @MPG123_LIBS@
 MPLEX_CFLAGS = @MPLEX_CFLAGS@
 MPLEX_LDFLAGS = @MPLEX_LDFLAGS@
 MPLEX_LIBS = @MPLEX_LIBS@
@@ -556,6 +562,8 @@
 NETTLE_LIBS = @NETTLE_LIBS@
 NM = @NM@
 NMEDIT = @NMEDIT@
+NVENCODE_CFLAGS = @NVENCODE_CFLAGS@
+NVENCODE_LIBS = @NVENCODE_LIBS@
 OBJC = @OBJC@
 OBJCDEPMODE = @OBJCDEPMODE@
 OBJCFLAGS = @OBJCFLAGS@
@@ -613,16 +621,18 @@
 PYTHON_PLATFORM = @PYTHON_PLATFORM@
 PYTHON_PREFIX = @PYTHON_PREFIX@
 PYTHON_VERSION = @PYTHON_VERSION@
+QT_ANDROID_CFLAGS = @QT_ANDROID_CFLAGS@
+QT_ANDROID_LIBS = @QT_ANDROID_LIBS@
 QT_CFLAGS = @QT_CFLAGS@
 QT_LIBS = @QT_LIBS@
+QT_MAC_CFLAGS = @QT_MAC_CFLAGS@
+QT_MAC_LIBS = @QT_MAC_LIBS@
 QT_WAYLAND_CFLAGS = @QT_WAYLAND_CFLAGS@
 QT_WAYLAND_LIBS = @QT_WAYLAND_LIBS@
 QT_X11_CFLAGS = @QT_X11_CFLAGS@
 QT_X11_LIBS = @QT_X11_LIBS@
 RANLIB = @RANLIB@
 RCC = @RCC@
-RSVG_2_36_2_CFLAGS = @RSVG_2_36_2_CFLAGS@
-RSVG_2_36_2_LIBS = @RSVG_2_36_2_LIBS@
 RSVG_CFLAGS = @RSVG_CFLAGS@
 RSVG_LIBS = @RSVG_LIBS@
 RTMP_CFLAGS = @RTMP_CFLAGS@
@@ -674,6 +684,7 @@
 VOAACENC_LIBS = @VOAACENC_LIBS@
 VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
 VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VULKAN_LIBS = @VULKAN_LIBS@
 WARNING_CFLAGS = @WARNING_CFLAGS@
 WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
 WARNING_OBJCFLAGS = @WARNING_OBJCFLAGS@
@@ -684,6 +695,7 @@
 WAYLAND_LIBS = @WAYLAND_LIBS@
 WEBP_CFLAGS = @WEBP_CFLAGS@
 WEBP_LIBS = @WEBP_LIBS@
+WGET = @WGET@
 WILDMIDI_CFLAGS = @WILDMIDI_CFLAGS@
 WILDMIDI_LIBS = @WILDMIDI_LIBS@
 WINKS_LIBS = @WINKS_LIBS@
@@ -693,6 +705,8 @@
 X11_LIBS = @X11_LIBS@
 X265_CFLAGS = @X265_CFLAGS@
 X265_LIBS = @X265_LIBS@
+XCB_CFLAGS = @XCB_CFLAGS@
+XCB_LIBS = @XCB_LIBS@
 XCOMPOSITE_CFLAGS = @XCOMPOSITE_CFLAGS@
 XCOMPOSITE_LIBS = @XCOMPOSITE_LIBS@
 XGETTEXT = @XGETTEXT@
@@ -730,7 +744,6 @@
 docdir = @docdir@
 dvidir = @dvidir@
 exec_prefix = @exec_prefix@
-gsettingsschemadir = @gsettingsschemadir@
 host = @host@
 host_alias = @host_alias@
 host_cpu = @host_cpu@
@@ -772,7 +785,6 @@
 wayland_scanner = @wayland_scanner@
 plugin_LTLIBRARIES = libgstaudiovisualizers.la
 libgstaudiovisualizers_la_SOURCES = plugin.c \
-    gstaudiovisualizer.c gstaudiovisualizer.h \
     gstspacescope.c gstspacescope.h \
     gstspectrascope.c gstspectrascope.h \
     gstsynaescope.c gstsynaescope.h \
@@ -785,12 +797,15 @@
 libgstaudiovisualizers_la_LIBADD = \
 	$(GST_PLUGINS_BASE_LIBS) -lgstaudio-$(GST_API_VERSION) \
 	-lgstvideo-$(GST_API_VERSION) -lgstfft-$(GST_API_VERSION) \
-	$(GST_BASE_LIBS)  $(GST_LIBS) $(LIBM)
+	-lgstpbutils-$(GST_API_VERSION) $(GST_BASE_LIBS)  $(GST_LIBS) $(LIBM)
 
 libgstaudiovisualizers_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS)
 libgstaudiovisualizers_la_LIBTOOLFLAGS = $(GST_PLUGIN_LIBTOOLFLAGS)
-noinst_HEADERS = gstaudiovisualizer.h gstdrawhelpers.h \
-	gstspacescope.h gstspectrascope.h gstsynaescope.h gstwavescope.h
+noinst_HEADERS = gstdrawhelpers.h \
+	gstspacescope.h \
+	gstspectrascope.h \
+	gstsynaescope.h \
+	gstwavescope.h
 
 all: all-am
 
@@ -870,7 +885,6 @@
 distclean-compile:
 	-rm -f *.tab.c
 
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstaudiovisualizers_la-gstaudiovisualizer.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstaudiovisualizers_la-gstspacescope.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstaudiovisualizers_la-gstspectrascope.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstaudiovisualizers_la-gstsynaescope.Plo@am__quote@
@@ -908,13 +922,6 @@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstaudiovisualizers_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstaudiovisualizers_la_CFLAGS) $(CFLAGS) -c -o libgstaudiovisualizers_la-plugin.lo `test -f 'plugin.c' || echo '$(srcdir)/'`plugin.c
 
-libgstaudiovisualizers_la-gstaudiovisualizer.lo: gstaudiovisualizer.c
-@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstaudiovisualizers_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstaudiovisualizers_la_CFLAGS) $(CFLAGS) -MT libgstaudiovisualizers_la-gstaudiovisualizer.lo -MD -MP -MF $(DEPDIR)/libgstaudiovisualizers_la-gstaudiovisualizer.Tpo -c -o libgstaudiovisualizers_la-gstaudiovisualizer.lo `test -f 'gstaudiovisualizer.c' || echo '$(srcdir)/'`gstaudiovisualizer.c
-@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstaudiovisualizers_la-gstaudiovisualizer.Tpo $(DEPDIR)/libgstaudiovisualizers_la-gstaudiovisualizer.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='gstaudiovisualizer.c' object='libgstaudiovisualizers_la-gstaudiovisualizer.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstaudiovisualizers_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstaudiovisualizers_la_CFLAGS) $(CFLAGS) -c -o libgstaudiovisualizers_la-gstaudiovisualizer.lo `test -f 'gstaudiovisualizer.c' || echo '$(srcdir)/'`gstaudiovisualizer.c
-
 libgstaudiovisualizers_la-gstspacescope.lo: gstspacescope.c
 @am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstaudiovisualizers_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstaudiovisualizers_la_CFLAGS) $(CFLAGS) -MT libgstaudiovisualizers_la-gstspacescope.lo -MD -MP -MF $(DEPDIR)/libgstaudiovisualizers_la-gstspacescope.Tpo -c -o libgstaudiovisualizers_la-gstspacescope.lo `test -f 'gstspacescope.c' || echo '$(srcdir)/'`gstspacescope.c
 @am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstaudiovisualizers_la-gstspacescope.Tpo $(DEPDIR)/libgstaudiovisualizers_la-gstspacescope.Plo
diff --git a/gst/audiovisualizers/gstaudiovisualizer.c b/gst/audiovisualizers/gstaudiovisualizer.c
deleted file mode 100644
index 9c4a177..0000000
--- a/gst/audiovisualizers/gstaudiovisualizer.c
+++ /dev/null
@@ -1,1459 +0,0 @@
-/* GStreamer
- * Copyright (C) <2011> Stefan Kost <ensonic@users.sf.net>
- * Copyright (C) <2015> Luis de Bethencourt <luis@debethencourt.com>
- *
- * gstaudiovisualizer.h: base class for audio visualisation elements
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-/**
- * SECTION:gstaudiovisualizer
- *
- * A baseclass for scopes (visualizers). It takes care of re-fitting the
- * audio-rate to video-rate and handles renegotiation (downstream video size
- * changes).
- * 
- * It also provides several background shading effects. These effects are
- * applied to a previous picture before the render() implementation can draw a
- * new frame.
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include <string.h>
-
-#include <gst/video/video.h>
-#include <gst/video/gstvideometa.h>
-#include <gst/video/gstvideopool.h>
-
-#include "gstaudiovisualizer.h"
-
-GST_DEBUG_CATEGORY_STATIC (audio_visualizer_debug);
-#define GST_CAT_DEFAULT (audio_visualizer_debug)
-
-#define DEFAULT_SHADER GST_AUDIO_VISUALIZER_SHADER_FADE
-#define DEFAULT_SHADE_AMOUNT   0x000a0a0a
-
-enum
-{
-  PROP_0,
-  PROP_SHADER,
-  PROP_SHADE_AMOUNT
-};
-
-static GstBaseTransformClass *parent_class = NULL;
-
-static void gst_audio_visualizer_class_init (GstAudioVisualizerClass * klass);
-static void gst_audio_visualizer_init (GstAudioVisualizer * scope,
-    GstAudioVisualizerClass * g_class);
-static void gst_audio_visualizer_set_property (GObject * object,
-    guint prop_id, const GValue * value, GParamSpec * pspec);
-static void gst_audio_visualizer_get_property (GObject * object,
-    guint prop_id, GValue * value, GParamSpec * pspec);
-static void gst_audio_visualizer_finalize (GObject * object);
-
-static gboolean gst_audio_visualizer_src_negotiate (GstAudioVisualizer * scope);
-static gboolean gst_audio_visualizer_src_setcaps (GstAudioVisualizer *
-    scope, GstCaps * caps);
-static gboolean gst_audio_visualizer_sink_setcaps (GstAudioVisualizer *
-    scope, GstCaps * caps);
-
-static GstFlowReturn gst_audio_visualizer_chain (GstPad * pad,
-    GstObject * parent, GstBuffer * buffer);
-
-static gboolean gst_audio_visualizer_src_event (GstPad * pad,
-    GstObject * parent, GstEvent * event);
-static gboolean gst_audio_visualizer_sink_event (GstPad * pad,
-    GstObject * parent, GstEvent * event);
-
-static gboolean gst_audio_visualizer_src_query (GstPad * pad,
-    GstObject * parent, GstQuery * query);
-
-static GstStateChangeReturn gst_audio_visualizer_change_state (GstElement *
-    element, GstStateChange transition);
-
-static gboolean gst_audio_visualizer_do_bufferpool (GstAudioVisualizer * scope,
-    GstCaps * outcaps);
-
-static gboolean
-default_decide_allocation (GstAudioVisualizer * scope, GstQuery * query);
-
-#define GST_AUDIO_VISUALIZER_GET_PRIVATE(obj)  \
-    (G_TYPE_INSTANCE_GET_PRIVATE ((obj), GST_TYPE_AUDIO_VISUALIZER, GstAudioVisualizerPrivate))
-
-struct _GstAudioVisualizerPrivate
-{
-  gboolean negotiated;
-
-  GstBufferPool *pool;
-  gboolean pool_active;
-  GstAllocator *allocator;
-  GstAllocationParams params;
-  GstQuery *query;
-
-  /* pads */
-  GstPad *srcpad, *sinkpad;
-
-  GstAudioVisualizerShader shader_type;
-  GstAudioVisualizerShaderFunc shader;
-  guint32 shade_amount;
-
-  GstAdapter *adapter;
-
-  GstBuffer *inbuf;
-  GstBuffer *tempbuf;
-  GstVideoFrame tempframe;
-
-  guint spf;                    /* samples per video frame */
-  guint64 frame_duration;
-
-  /* QoS stuff *//* with LOCK */
-  gdouble proportion;
-  GstClockTime earliest_time;
-
-  guint dropped;                /* frames dropped / not dropped */
-  guint processed;
-
-  /* configuration mutex */
-  GMutex config_lock;
-
-  GstSegment segment;
-};
-
-
-/* shading functions */
-
-#define GST_TYPE_AUDIO_VISUALIZER_SHADER (gst_audio_visualizer_shader_get_type())
-static GType
-gst_audio_visualizer_shader_get_type (void)
-{
-  static GType shader_type = 0;
-  static const GEnumValue shaders[] = {
-    {GST_AUDIO_VISUALIZER_SHADER_NONE, "None", "none"},
-    {GST_AUDIO_VISUALIZER_SHADER_FADE, "Fade", "fade"},
-    {GST_AUDIO_VISUALIZER_SHADER_FADE_AND_MOVE_UP, "Fade and move up",
-        "fade-and-move-up"},
-    {GST_AUDIO_VISUALIZER_SHADER_FADE_AND_MOVE_DOWN, "Fade and move down",
-        "fade-and-move-down"},
-    {GST_AUDIO_VISUALIZER_SHADER_FADE_AND_MOVE_LEFT, "Fade and move left",
-        "fade-and-move-left"},
-    {GST_AUDIO_VISUALIZER_SHADER_FADE_AND_MOVE_RIGHT,
-          "Fade and move right",
-        "fade-and-move-right"},
-    {GST_AUDIO_VISUALIZER_SHADER_FADE_AND_MOVE_HORIZ_OUT,
-        "Fade and move horizontally out", "fade-and-move-horiz-out"},
-    {GST_AUDIO_VISUALIZER_SHADER_FADE_AND_MOVE_HORIZ_IN,
-        "Fade and move horizontally in", "fade-and-move-horiz-in"},
-    {GST_AUDIO_VISUALIZER_SHADER_FADE_AND_MOVE_VERT_OUT,
-        "Fade and move vertically out", "fade-and-move-vert-out"},
-    {GST_AUDIO_VISUALIZER_SHADER_FADE_AND_MOVE_VERT_IN,
-        "Fade and move vertically in", "fade-and-move-vert-in"},
-    {0, NULL, NULL},
-  };
-
-  if (G_UNLIKELY (shader_type == 0)) {
-    /* TODO: rename when exporting it as a library */
-    shader_type =
-        g_enum_register_static
-        ("GstAudioVisualizerShader-BadGstAudioVisualizers", shaders);
-  }
-  return shader_type;
-}
-
-/* we're only supporting GST_VIDEO_FORMAT_xRGB right now) */
-#if G_BYTE_ORDER == G_LITTLE_ENDIAN
-
-#define SHADE(_d, _s, _i, _r, _g, _b)                     \
-G_STMT_START {                                            \
-    _d[_i * 4 + 0] = (_s[_i * 4 + 0] > _b) ? _s[_i * 4 + 0] - _b : 0; \
-    _d[_i * 4 + 1] = (_s[_i * 4 + 1] > _g) ? _s[_i * 4 + 1] - _g : 0; \
-    _d[_i * 4 + 2] = (_s[_i * 4 + 2] > _r) ? _s[_i * 4 + 2] - _r : 0; \
-    _d[_i * 4 + 3] = 0;                                       \
-} G_STMT_END
-
-#else /* G_BYTE_ORDER == G_LITTLE_ENDIAN */
-
-#define SHADE(_d, _s, _i, _r, _g, _b)                     \
-G_STMT_START {                                            \
-    _d[_i * 4 + 0] = 0;                                       \
-    _d[_i * 4 + 1] = (_s[_i * 4 + 1] > _r) ? _s[_i * 4 + 1] - _r : 0; \
-    _d[_i * 4 + 2] = (_s[_i * 4 + 2] > _g) ? _s[_i * 4 + 2] - _g : 0; \
-    _d[_i * 4 + 3] = (_s[_i * 4 + 3] > _b) ? _s[_i * 4 + 3] - _b : 0; \
-} G_STMT_END
-
-#endif
-
-static void
-shader_fade (GstAudioVisualizer * scope, const GstVideoFrame * sframe,
-    GstVideoFrame * dframe)
-{
-  guint i, j;
-  guint32 shade_amount = scope->priv->shade_amount;
-  guint r = (shade_amount >> 16) & 0xff;
-  guint g = (shade_amount >> 8) & 0xff;
-  guint b = (shade_amount >> 0) & 0xff;
-  guint8 *s, *d;
-  gint ss, ds, width, height;
-
-  s = GST_VIDEO_FRAME_PLANE_DATA (sframe, 0);
-  ss = GST_VIDEO_FRAME_PLANE_STRIDE (sframe, 0);
-  d = GST_VIDEO_FRAME_PLANE_DATA (dframe, 0);
-  ds = GST_VIDEO_FRAME_PLANE_STRIDE (dframe, 0);
-
-  width = GST_VIDEO_FRAME_WIDTH (sframe);
-  height = GST_VIDEO_FRAME_HEIGHT (sframe);
-
-  for (j = 0; j < height; j++) {
-    for (i = 0; i < width; i++) {
-      SHADE (d, s, i, r, g, b);
-    }
-    s += ss;
-    d += ds;
-  }
-}
-
-static void
-shader_fade_and_move_up (GstAudioVisualizer * scope,
-    const GstVideoFrame * sframe, GstVideoFrame * dframe)
-{
-  guint i, j;
-  guint32 shade_amount = scope->priv->shade_amount;
-  guint r = (shade_amount >> 16) & 0xff;
-  guint g = (shade_amount >> 8) & 0xff;
-  guint b = (shade_amount >> 0) & 0xff;
-  guint8 *s, *d;
-  gint ss, ds, width, height;
-
-  s = GST_VIDEO_FRAME_PLANE_DATA (sframe, 0);
-  ss = GST_VIDEO_FRAME_PLANE_STRIDE (sframe, 0);
-  d = GST_VIDEO_FRAME_PLANE_DATA (dframe, 0);
-  ds = GST_VIDEO_FRAME_PLANE_STRIDE (dframe, 0);
-
-  width = GST_VIDEO_FRAME_WIDTH (sframe);
-  height = GST_VIDEO_FRAME_HEIGHT (sframe);
-
-  for (j = 1; j < height; j++) {
-    s += ss;
-    for (i = 0; i < width; i++) {
-      SHADE (d, s, i, r, g, b);
-    }
-    d += ds;
-  }
-}
-
-static void
-shader_fade_and_move_down (GstAudioVisualizer * scope,
-    const GstVideoFrame * sframe, GstVideoFrame * dframe)
-{
-  guint i, j;
-  guint32 shade_amount = scope->priv->shade_amount;
-  guint r = (shade_amount >> 16) & 0xff;
-  guint g = (shade_amount >> 8) & 0xff;
-  guint b = (shade_amount >> 0) & 0xff;
-  guint8 *s, *d;
-  gint ss, ds, width, height;
-
-  s = GST_VIDEO_FRAME_PLANE_DATA (sframe, 0);
-  ss = GST_VIDEO_FRAME_PLANE_STRIDE (sframe, 0);
-  d = GST_VIDEO_FRAME_PLANE_DATA (dframe, 0);
-  ds = GST_VIDEO_FRAME_PLANE_STRIDE (dframe, 0);
-
-  width = GST_VIDEO_FRAME_WIDTH (sframe);
-  height = GST_VIDEO_FRAME_HEIGHT (sframe);
-
-  for (j = 1; j < height; j++) {
-    d += ds;
-    for (i = 0; i < width; i++) {
-      SHADE (d, s, i, r, g, b);
-    }
-    s += ss;
-  }
-}
-
-static void
-shader_fade_and_move_left (GstAudioVisualizer * scope,
-    const GstVideoFrame * sframe, GstVideoFrame * dframe)
-{
-  guint i, j;
-  guint32 shade_amount = scope->priv->shade_amount;
-  guint r = (shade_amount >> 16) & 0xff;
-  guint g = (shade_amount >> 8) & 0xff;
-  guint b = (shade_amount >> 0) & 0xff;
-  guint8 *s, *d;
-  gint ss, ds, width, height;
-
-  s = GST_VIDEO_FRAME_PLANE_DATA (sframe, 0);
-  ss = GST_VIDEO_FRAME_PLANE_STRIDE (sframe, 0);
-  d = GST_VIDEO_FRAME_PLANE_DATA (dframe, 0);
-  ds = GST_VIDEO_FRAME_PLANE_STRIDE (dframe, 0);
-
-  width = GST_VIDEO_FRAME_WIDTH (sframe);
-  height = GST_VIDEO_FRAME_HEIGHT (sframe);
-
-  width -= 1;
-  s += 4;
-
-  /* move to the left */
-  for (j = 0; j < height; j++) {
-    for (i = 0; i < width; i++) {
-      SHADE (d, s, i, r, g, b);
-    }
-    d += ds;
-    s += ss;
-  }
-}
-
-static void
-shader_fade_and_move_right (GstAudioVisualizer * scope,
-    const GstVideoFrame * sframe, GstVideoFrame * dframe)
-{
-  guint i, j;
-  guint32 shade_amount = scope->priv->shade_amount;
-  guint r = (shade_amount >> 16) & 0xff;
-  guint g = (shade_amount >> 8) & 0xff;
-  guint b = (shade_amount >> 0) & 0xff;
-  guint8 *s, *d;
-  gint ss, ds, width, height;
-
-  s = GST_VIDEO_FRAME_PLANE_DATA (sframe, 0);
-  ss = GST_VIDEO_FRAME_PLANE_STRIDE (sframe, 0);
-  d = GST_VIDEO_FRAME_PLANE_DATA (dframe, 0);
-  ds = GST_VIDEO_FRAME_PLANE_STRIDE (dframe, 0);
-
-  width = GST_VIDEO_FRAME_WIDTH (sframe);
-  height = GST_VIDEO_FRAME_HEIGHT (sframe);
-
-  width -= 1;
-  d += 4;
-
-  /* move to the right */
-  for (j = 0; j < height; j++) {
-    for (i = 0; i < width; i++) {
-      SHADE (d, s, i, r, g, b);
-    }
-    d += ds;
-    s += ss;
-  }
-}
-
-static void
-shader_fade_and_move_horiz_out (GstAudioVisualizer * scope,
-    const GstVideoFrame * sframe, GstVideoFrame * dframe)
-{
-  guint i, j;
-  guint32 shade_amount = scope->priv->shade_amount;
-  guint r = (shade_amount >> 16) & 0xff;
-  guint g = (shade_amount >> 8) & 0xff;
-  guint b = (shade_amount >> 0) & 0xff;
-  guint8 *s, *d;
-  gint ss, ds, width, height;
-
-  s = GST_VIDEO_FRAME_PLANE_DATA (sframe, 0);
-  ss = GST_VIDEO_FRAME_PLANE_STRIDE (sframe, 0);
-  d = GST_VIDEO_FRAME_PLANE_DATA (dframe, 0);
-  ds = GST_VIDEO_FRAME_PLANE_STRIDE (dframe, 0);
-
-  width = GST_VIDEO_FRAME_WIDTH (sframe);
-  height = GST_VIDEO_FRAME_HEIGHT (sframe);
-
-  /* move upper half up */
-  for (j = 0; j < height / 2; j++) {
-    s += ss;
-    for (i = 0; i < width; i++) {
-      SHADE (d, s, i, r, g, b);
-    }
-    d += ds;
-  }
-  /* move lower half down */
-  for (j = 0; j < height / 2; j++) {
-    d += ds;
-    for (i = 0; i < width; i++) {
-      SHADE (d, s, i, r, g, b);
-    }
-    s += ss;
-  }
-}
-
-static void
-shader_fade_and_move_horiz_in (GstAudioVisualizer * scope,
-    const GstVideoFrame * sframe, GstVideoFrame * dframe)
-{
-  guint i, j;
-  guint32 shade_amount = scope->priv->shade_amount;
-  guint r = (shade_amount >> 16) & 0xff;
-  guint g = (shade_amount >> 8) & 0xff;
-  guint b = (shade_amount >> 0) & 0xff;
-  guint8 *s, *d;
-  gint ss, ds, width, height;
-
-  s = GST_VIDEO_FRAME_PLANE_DATA (sframe, 0);
-  ss = GST_VIDEO_FRAME_PLANE_STRIDE (sframe, 0);
-  d = GST_VIDEO_FRAME_PLANE_DATA (dframe, 0);
-  ds = GST_VIDEO_FRAME_PLANE_STRIDE (dframe, 0);
-
-  width = GST_VIDEO_FRAME_WIDTH (sframe);
-  height = GST_VIDEO_FRAME_HEIGHT (sframe);
-
-  /* move upper half down */
-  for (j = 0; j < height / 2; j++) {
-    d += ds;
-    for (i = 0; i < width; i++) {
-      SHADE (d, s, i, r, g, b);
-    }
-    s += ss;
-  }
-  /* move lower half up */
-  for (j = 0; j < height / 2; j++) {
-    s += ss;
-    for (i = 0; i < width; i++) {
-      SHADE (d, s, i, r, g, b);
-    }
-    d += ds;
-  }
-}
-
-static void
-shader_fade_and_move_vert_out (GstAudioVisualizer * scope,
-    const GstVideoFrame * sframe, GstVideoFrame * dframe)
-{
-  guint i, j;
-  guint32 shade_amount = scope->priv->shade_amount;
-  guint r = (shade_amount >> 16) & 0xff;
-  guint g = (shade_amount >> 8) & 0xff;
-  guint b = (shade_amount >> 0) & 0xff;
-  guint8 *s, *s1, *d, *d1;
-  gint ss, ds, width, height;
-
-  s = GST_VIDEO_FRAME_PLANE_DATA (sframe, 0);
-  ss = GST_VIDEO_FRAME_PLANE_STRIDE (sframe, 0);
-  d = GST_VIDEO_FRAME_PLANE_DATA (dframe, 0);
-  ds = GST_VIDEO_FRAME_PLANE_STRIDE (dframe, 0);
-
-  width = GST_VIDEO_FRAME_WIDTH (sframe);
-  height = GST_VIDEO_FRAME_HEIGHT (sframe);
-
-  for (j = 0; j < height; j++) {
-    /* move left half to the left */
-    s1 = s + 1;
-    for (i = 0; i < width / 2; i++) {
-      SHADE (d, s1, i, r, g, b);
-    }
-    /* move right half to the right */
-    d1 = d + 1;
-    for (; i < width - 1; i++) {
-      SHADE (d1, s, i, r, g, b);
-    }
-    s += ss;
-    d += ds;
-  }
-}
-
-static void
-shader_fade_and_move_vert_in (GstAudioVisualizer * scope,
-    const GstVideoFrame * sframe, GstVideoFrame * dframe)
-{
-  guint i, j;
-  guint32 shade_amount = scope->priv->shade_amount;
-  guint r = (shade_amount >> 16) & 0xff;
-  guint g = (shade_amount >> 8) & 0xff;
-  guint b = (shade_amount >> 0) & 0xff;
-  guint8 *s, *s1, *d, *d1;
-  gint ss, ds, width, height;
-
-  s = GST_VIDEO_FRAME_PLANE_DATA (sframe, 0);
-  ss = GST_VIDEO_FRAME_PLANE_STRIDE (sframe, 0);
-  d = GST_VIDEO_FRAME_PLANE_DATA (dframe, 0);
-  ds = GST_VIDEO_FRAME_PLANE_STRIDE (dframe, 0);
-
-  width = GST_VIDEO_FRAME_WIDTH (sframe);
-  height = GST_VIDEO_FRAME_HEIGHT (sframe);
-
-  for (j = 0; j < height; j++) {
-    /* move left half to the right */
-    d1 = d + 1;
-    for (i = 0; i < width / 2; i++) {
-      SHADE (d1, s, i, r, g, b);
-    }
-    /* move right half to the left */
-    s1 = s + 1;
-    for (; i < width - 1; i++) {
-      SHADE (d, s1, i, r, g, b);
-    }
-    s += ss;
-    d += ds;
-  }
-}
-
-static void
-gst_audio_visualizer_change_shader (GstAudioVisualizer * scope)
-{
-  GstAudioVisualizerShaderFunc shader;
-
-  switch (scope->priv->shader_type) {
-    case GST_AUDIO_VISUALIZER_SHADER_NONE:
-      shader = NULL;
-      break;
-    case GST_AUDIO_VISUALIZER_SHADER_FADE:
-      shader = shader_fade;
-      break;
-    case GST_AUDIO_VISUALIZER_SHADER_FADE_AND_MOVE_UP:
-      shader = shader_fade_and_move_up;
-      break;
-    case GST_AUDIO_VISUALIZER_SHADER_FADE_AND_MOVE_DOWN:
-      shader = shader_fade_and_move_down;
-      break;
-    case GST_AUDIO_VISUALIZER_SHADER_FADE_AND_MOVE_LEFT:
-      shader = shader_fade_and_move_left;
-      break;
-    case GST_AUDIO_VISUALIZER_SHADER_FADE_AND_MOVE_RIGHT:
-      shader = shader_fade_and_move_right;
-      break;
-    case GST_AUDIO_VISUALIZER_SHADER_FADE_AND_MOVE_HORIZ_OUT:
-      shader = shader_fade_and_move_horiz_out;
-      break;
-    case GST_AUDIO_VISUALIZER_SHADER_FADE_AND_MOVE_HORIZ_IN:
-      shader = shader_fade_and_move_horiz_in;
-      break;
-    case GST_AUDIO_VISUALIZER_SHADER_FADE_AND_MOVE_VERT_OUT:
-      shader = shader_fade_and_move_vert_out;
-      break;
-    case GST_AUDIO_VISUALIZER_SHADER_FADE_AND_MOVE_VERT_IN:
-      shader = shader_fade_and_move_vert_in;
-      break;
-    default:
-      GST_ERROR ("invalid shader function");
-      shader = NULL;
-      break;
-  }
-
-  scope->priv->shader = shader;
-}
-
-/* base class */
-
-GType
-gst_audio_visualizer_get_type (void)
-{
-  static volatile gsize audio_visualizer_type = 0;
-
-  if (g_once_init_enter (&audio_visualizer_type)) {
-    static const GTypeInfo audio_visualizer_info = {
-      sizeof (GstAudioVisualizerClass),
-      NULL,
-      NULL,
-      (GClassInitFunc) gst_audio_visualizer_class_init,
-      NULL,
-      NULL,
-      sizeof (GstAudioVisualizer),
-      0,
-      (GInstanceInitFunc) gst_audio_visualizer_init,
-    };
-    GType _type;
-
-    /* TODO: rename when exporting it as a library */
-    _type = g_type_register_static (GST_TYPE_ELEMENT,
-        "GstAudioVisualizer-BadGstAudioVisualizers", &audio_visualizer_info,
-        G_TYPE_FLAG_ABSTRACT);
-    g_once_init_leave (&audio_visualizer_type, _type);
-  }
-  return (GType) audio_visualizer_type;
-}
-
-static void
-gst_audio_visualizer_class_init (GstAudioVisualizerClass * klass)
-{
-  GObjectClass *gobject_class = (GObjectClass *) klass;
-  GstElementClass *element_class = (GstElementClass *) klass;
-
-  g_type_class_add_private (klass, sizeof (GstAudioVisualizerPrivate));
-
-  parent_class = g_type_class_peek_parent (klass);
-
-  GST_DEBUG_CATEGORY_INIT (audio_visualizer_debug, "baseaudiovisualizer",
-      0, "scope audio visualisation base class");
-
-  gobject_class->set_property = gst_audio_visualizer_set_property;
-  gobject_class->get_property = gst_audio_visualizer_get_property;
-  gobject_class->finalize = gst_audio_visualizer_finalize;
-
-  element_class->change_state =
-      GST_DEBUG_FUNCPTR (gst_audio_visualizer_change_state);
-
-  klass->decide_allocation = GST_DEBUG_FUNCPTR (default_decide_allocation);
-
-  g_object_class_install_property (gobject_class, PROP_SHADER,
-      g_param_spec_enum ("shader", "shader type",
-          "Shader function to apply on each frame",
-          GST_TYPE_AUDIO_VISUALIZER_SHADER, DEFAULT_SHADER,
-          G_PARAM_READWRITE | GST_PARAM_CONTROLLABLE | G_PARAM_STATIC_STRINGS));
-  g_object_class_install_property (gobject_class, PROP_SHADE_AMOUNT,
-      g_param_spec_uint ("shade-amount", "shade amount",
-          "Shading color to use (big-endian ARGB)", 0, G_MAXUINT32,
-          DEFAULT_SHADE_AMOUNT,
-          G_PARAM_READWRITE | GST_PARAM_CONTROLLABLE | G_PARAM_STATIC_STRINGS));
-}
-
-static void
-gst_audio_visualizer_init (GstAudioVisualizer * scope,
-    GstAudioVisualizerClass * g_class)
-{
-  GstPadTemplate *pad_template;
-
-  scope->priv = GST_AUDIO_VISUALIZER_GET_PRIVATE (scope);
-
-  /* create the sink and src pads */
-  pad_template =
-      gst_element_class_get_pad_template (GST_ELEMENT_CLASS (g_class), "sink");
-  g_return_if_fail (pad_template != NULL);
-  scope->priv->sinkpad = gst_pad_new_from_template (pad_template, "sink");
-  gst_pad_set_chain_function (scope->priv->sinkpad,
-      GST_DEBUG_FUNCPTR (gst_audio_visualizer_chain));
-  gst_pad_set_event_function (scope->priv->sinkpad,
-      GST_DEBUG_FUNCPTR (gst_audio_visualizer_sink_event));
-  gst_element_add_pad (GST_ELEMENT (scope), scope->priv->sinkpad);
-
-  pad_template =
-      gst_element_class_get_pad_template (GST_ELEMENT_CLASS (g_class), "src");
-  g_return_if_fail (pad_template != NULL);
-  scope->priv->srcpad = gst_pad_new_from_template (pad_template, "src");
-  gst_pad_set_event_function (scope->priv->srcpad,
-      GST_DEBUG_FUNCPTR (gst_audio_visualizer_src_event));
-  gst_pad_set_query_function (scope->priv->srcpad,
-      GST_DEBUG_FUNCPTR (gst_audio_visualizer_src_query));
-  gst_element_add_pad (GST_ELEMENT (scope), scope->priv->srcpad);
-
-  scope->priv->adapter = gst_adapter_new ();
-  scope->priv->inbuf = gst_buffer_new ();
-
-  /* properties */
-  scope->priv->shader_type = DEFAULT_SHADER;
-  gst_audio_visualizer_change_shader (scope);
-  scope->priv->shade_amount = DEFAULT_SHADE_AMOUNT;
-
-  /* reset the initial video state */
-  gst_video_info_init (&scope->vinfo);
-  scope->priv->frame_duration = GST_CLOCK_TIME_NONE;
-
-  /* reset the initial state */
-  gst_audio_info_init (&scope->ainfo);
-  gst_video_info_init (&scope->vinfo);
-
-  g_mutex_init (&scope->priv->config_lock);
-}
-
-static void
-gst_audio_visualizer_set_property (GObject * object, guint prop_id,
-    const GValue * value, GParamSpec * pspec)
-{
-  GstAudioVisualizer *scope = GST_AUDIO_VISUALIZER (object);
-
-  switch (prop_id) {
-    case PROP_SHADER:
-      scope->priv->shader_type = g_value_get_enum (value);
-      gst_audio_visualizer_change_shader (scope);
-      break;
-    case PROP_SHADE_AMOUNT:
-      scope->priv->shade_amount = g_value_get_uint (value);
-      break;
-    default:
-      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
-      break;
-  }
-}
-
-static void
-gst_audio_visualizer_get_property (GObject * object, guint prop_id,
-    GValue * value, GParamSpec * pspec)
-{
-  GstAudioVisualizer *scope = GST_AUDIO_VISUALIZER (object);
-
-  switch (prop_id) {
-    case PROP_SHADER:
-      g_value_set_enum (value, scope->priv->shader_type);
-      break;
-    case PROP_SHADE_AMOUNT:
-      g_value_set_uint (value, scope->priv->shade_amount);
-      break;
-    default:
-      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
-      break;
-  }
-}
-
-static void
-gst_audio_visualizer_finalize (GObject * object)
-{
-  GstAudioVisualizer *scope = GST_AUDIO_VISUALIZER (object);
-  GstAudioVisualizerPrivate *priv = scope->priv;
-
-  if (priv->adapter) {
-    g_object_unref (priv->adapter);
-    priv->adapter = NULL;
-  }
-  if (priv->inbuf) {
-    gst_buffer_unref (priv->inbuf);
-    priv->inbuf = NULL;
-  }
-  if (priv->tempbuf) {
-    gst_video_frame_unmap (&priv->tempframe);
-    gst_buffer_unref (priv->tempbuf);
-    priv->tempbuf = NULL;
-  }
-
-  g_mutex_clear (&priv->config_lock);
-
-  G_OBJECT_CLASS (parent_class)->finalize (object);
-}
-
-static void
-gst_audio_visualizer_reset (GstAudioVisualizer * scope)
-{
-  GstAudioVisualizerPrivate *priv = scope->priv;
-
-  gst_adapter_clear (priv->adapter);
-  gst_segment_init (&priv->segment, GST_FORMAT_UNDEFINED);
-
-  GST_OBJECT_LOCK (scope);
-  priv->proportion = 1.0;
-  priv->earliest_time = -1;
-  priv->dropped = 0;
-  priv->processed = 0;
-  GST_OBJECT_UNLOCK (scope);
-}
-
-static gboolean
-gst_audio_visualizer_sink_setcaps (GstAudioVisualizer * scope, GstCaps * caps)
-{
-  GstAudioInfo info;
-
-  if (!gst_audio_info_from_caps (&info, caps))
-    goto wrong_caps;
-
-  scope->ainfo = info;
-
-  GST_DEBUG_OBJECT (scope, "audio: channels %d, rate %d",
-      GST_AUDIO_INFO_CHANNELS (&info), GST_AUDIO_INFO_RATE (&info));
-
-  if (!gst_audio_visualizer_src_negotiate (scope)) {
-    goto not_negotiated;
-  }
-
-  return TRUE;
-
-  /* Errors */
-wrong_caps:
-  {
-    GST_WARNING_OBJECT (scope, "could not parse caps");
-    return FALSE;
-  }
-not_negotiated:
-  {
-    GST_WARNING_OBJECT (scope, "failed to negotiate");
-    return FALSE;
-  }
-}
-
-static gboolean
-gst_audio_visualizer_src_setcaps (GstAudioVisualizer * scope, GstCaps * caps)
-{
-  GstVideoInfo info;
-  GstAudioVisualizerClass *klass;
-  GstAudioVisualizerPrivate *priv;
-  gboolean res;
-
-  if (!gst_video_info_from_caps (&info, caps))
-    goto wrong_caps;
-
-  klass = GST_AUDIO_VISUALIZER_CLASS (G_OBJECT_GET_CLASS (scope));
-
-  priv = scope->priv;
-
-  scope->vinfo = info;
-
-  priv->frame_duration = gst_util_uint64_scale_int (GST_SECOND,
-      GST_VIDEO_INFO_FPS_D (&info), GST_VIDEO_INFO_FPS_N (&info));
-  priv->spf = gst_util_uint64_scale_int (GST_AUDIO_INFO_RATE (&scope->ainfo),
-      GST_VIDEO_INFO_FPS_D (&info), GST_VIDEO_INFO_FPS_N (&info));
-  scope->req_spf = priv->spf;
-
-  if (priv->tempbuf) {
-    gst_video_frame_unmap (&priv->tempframe);
-    gst_buffer_unref (priv->tempbuf);
-  }
-  priv->tempbuf = gst_buffer_new_wrapped (g_malloc0 (scope->vinfo.size),
-      scope->vinfo.size);
-  gst_video_frame_map (&priv->tempframe, &scope->vinfo, priv->tempbuf,
-      GST_MAP_READWRITE);
-
-  if (klass->setup && !klass->setup (scope))
-    goto setup_failed;
-
-  GST_DEBUG_OBJECT (scope, "video: dimension %dx%d, framerate %d/%d",
-      GST_VIDEO_INFO_WIDTH (&info), GST_VIDEO_INFO_HEIGHT (&info),
-      GST_VIDEO_INFO_FPS_N (&info), GST_VIDEO_INFO_FPS_D (&info));
-  GST_DEBUG_OBJECT (scope, "blocks: spf %u, req_spf %u", priv->spf,
-      scope->req_spf);
-
-  gst_pad_set_caps (priv->srcpad, caps);
-
-  /* find a pool for the negotiated caps now */
-  res = gst_audio_visualizer_do_bufferpool (scope, caps);
-  gst_caps_unref (caps);
-
-  return res;
-
-  /* ERRORS */
-wrong_caps:
-  {
-    gst_caps_unref (caps);
-    GST_DEBUG_OBJECT (scope, "error parsing caps");
-    return FALSE;
-  }
-
-setup_failed:
-  {
-    GST_WARNING_OBJECT (scope, "failed to set up");
-    return FALSE;
-  }
-}
-
-static gboolean
-gst_audio_visualizer_src_negotiate (GstAudioVisualizer * scope)
-{
-  GstCaps *othercaps, *target;
-  GstStructure *structure;
-  GstCaps *templ;
-  gboolean ret;
-
-  templ = gst_pad_get_pad_template_caps (scope->priv->srcpad);
-
-  GST_DEBUG_OBJECT (scope, "performing negotiation");
-
-  /* see what the peer can do */
-  othercaps = gst_pad_peer_query_caps (scope->priv->srcpad, NULL);
-  if (othercaps) {
-    target = gst_caps_intersect (othercaps, templ);
-    gst_caps_unref (othercaps);
-    gst_caps_unref (templ);
-
-    if (gst_caps_is_empty (target))
-      goto no_format;
-
-    target = gst_caps_truncate (target);
-  } else {
-    target = templ;
-  }
-
-  target = gst_caps_make_writable (target);
-  structure = gst_caps_get_structure (target, 0);
-  gst_structure_fixate_field_nearest_int (structure, "width", 320);
-  gst_structure_fixate_field_nearest_int (structure, "height", 200);
-  gst_structure_fixate_field_nearest_fraction (structure, "framerate", 25, 1);
-
-  target = gst_caps_fixate (target);
-
-  GST_DEBUG_OBJECT (scope, "final caps are %" GST_PTR_FORMAT, target);
-
-  ret = gst_audio_visualizer_src_setcaps (scope, target);
-
-  return ret;
-
-no_format:
-  {
-    gst_caps_unref (target);
-    return FALSE;
-  }
-}
-
-/* takes ownership of the pool, allocator and query */
-static gboolean
-gst_audio_visualizer_set_allocation (GstAudioVisualizer * scope,
-    GstBufferPool * pool, GstAllocator * allocator,
-    GstAllocationParams * params, GstQuery * query)
-{
-  GstAllocator *oldalloc;
-  GstBufferPool *oldpool;
-  GstQuery *oldquery;
-  GstAudioVisualizerPrivate *priv = scope->priv;
-
-  GST_OBJECT_LOCK (scope);
-  oldpool = priv->pool;
-  priv->pool = pool;
-  priv->pool_active = FALSE;
-
-  oldalloc = priv->allocator;
-  priv->allocator = allocator;
-
-  oldquery = priv->query;
-  priv->query = query;
-
-  if (params)
-    priv->params = *params;
-  else
-    gst_allocation_params_init (&priv->params);
-  GST_OBJECT_UNLOCK (scope);
-
-  if (oldpool) {
-    GST_DEBUG_OBJECT (scope, "deactivating old pool %p", oldpool);
-    gst_buffer_pool_set_active (oldpool, FALSE);
-    gst_object_unref (oldpool);
-  }
-  if (oldalloc) {
-    gst_object_unref (oldalloc);
-  }
-  if (oldquery) {
-    gst_query_unref (oldquery);
-  }
-  return TRUE;
-}
-
-static gboolean
-gst_audio_visualizer_do_bufferpool (GstAudioVisualizer * scope,
-    GstCaps * outcaps)
-{
-  GstQuery *query;
-  gboolean result = TRUE;
-  GstBufferPool *pool = NULL;
-  GstAudioVisualizerClass *klass;
-  GstAllocator *allocator;
-  GstAllocationParams params;
-
-  /* not passthrough, we need to allocate */
-  /* find a pool for the negotiated caps now */
-  GST_DEBUG_OBJECT (scope, "doing allocation query");
-  query = gst_query_new_allocation (outcaps, TRUE);
-
-  if (!gst_pad_peer_query (scope->priv->srcpad, query)) {
-    /* not a problem, we use the query defaults */
-    GST_DEBUG_OBJECT (scope, "allocation query failed");
-  }
-
-  klass = GST_AUDIO_VISUALIZER_GET_CLASS (scope);
-
-  GST_DEBUG_OBJECT (scope, "calling decide_allocation");
-  g_assert (klass->decide_allocation != NULL);
-  result = klass->decide_allocation (scope, query);
-
-  GST_DEBUG_OBJECT (scope, "ALLOCATION (%d) params: %" GST_PTR_FORMAT, result,
-      query);
-
-  if (!result)
-    goto no_decide_allocation;
-
-  /* we got configuration from our peer or the decide_allocation method,
-   * parse them */
-  if (gst_query_get_n_allocation_params (query) > 0) {
-    gst_query_parse_nth_allocation_param (query, 0, &allocator, &params);
-  } else {
-    allocator = NULL;
-    gst_allocation_params_init (&params);
-  }
-
-  if (gst_query_get_n_allocation_pools (query) > 0)
-    gst_query_parse_nth_allocation_pool (query, 0, &pool, NULL, NULL, NULL);
-
-  /* now store */
-  result =
-      gst_audio_visualizer_set_allocation (scope, pool, allocator, &params,
-      query);
-
-  return result;
-
-  /* Errors */
-no_decide_allocation:
-  {
-    GST_WARNING_OBJECT (scope, "Subclass failed to decide allocation");
-    gst_query_unref (query);
-
-    return result;
-  }
-}
-
-static gboolean
-default_decide_allocation (GstAudioVisualizer * scope, GstQuery * query)
-{
-  GstCaps *outcaps;
-  GstBufferPool *pool;
-  guint size, min, max;
-  GstAllocator *allocator;
-  GstAllocationParams params;
-  GstStructure *config;
-  gboolean update_allocator;
-  gboolean update_pool;
-
-  gst_query_parse_allocation (query, &outcaps, NULL);
-
-  /* we got configuration from our peer or the decide_allocation method,
-   * parse them */
-  if (gst_query_get_n_allocation_params (query) > 0) {
-    /* try the allocator */
-    gst_query_parse_nth_allocation_param (query, 0, &allocator, &params);
-    update_allocator = TRUE;
-  } else {
-    allocator = NULL;
-    gst_allocation_params_init (&params);
-    update_allocator = FALSE;
-  }
-
-  if (gst_query_get_n_allocation_pools (query) > 0) {
-    gst_query_parse_nth_allocation_pool (query, 0, &pool, &size, &min, &max);
-    update_pool = TRUE;
-  } else {
-    pool = NULL;
-    size = GST_VIDEO_INFO_SIZE (&scope->vinfo);
-    min = max = 0;
-    update_pool = FALSE;
-  }
-
-  if (pool == NULL) {
-    /* we did not get a pool, make one ourselves then */
-    pool = gst_video_buffer_pool_new ();
-  }
-
-  config = gst_buffer_pool_get_config (pool);
-  gst_buffer_pool_config_set_params (config, outcaps, size, min, max);
-  gst_buffer_pool_config_set_allocator (config, allocator, &params);
-  gst_buffer_pool_config_add_option (config, GST_BUFFER_POOL_OPTION_VIDEO_META);
-  gst_buffer_pool_set_config (pool, config);
-
-  if (update_allocator)
-    gst_query_set_nth_allocation_param (query, 0, allocator, &params);
-  else
-    gst_query_add_allocation_param (query, allocator, &params);
-
-  if (allocator)
-    gst_object_unref (allocator);
-
-  if (update_pool)
-    gst_query_set_nth_allocation_pool (query, 0, pool, size, min, max);
-  else
-    gst_query_add_allocation_pool (query, pool, size, min, max);
-
-  if (pool)
-    gst_object_unref (pool);
-
-  return TRUE;
-}
-
-static GstFlowReturn
-default_prepare_output_buffer (GstAudioVisualizer * scope, GstBuffer ** outbuf)
-{
-  GstAudioVisualizerPrivate *priv;
-
-  priv = scope->priv;
-
-  g_assert (priv->pool != NULL);
-
-  /* we can't reuse the input buffer */
-  if (!priv->pool_active) {
-    GST_DEBUG_OBJECT (scope, "setting pool %p active", priv->pool);
-    if (!gst_buffer_pool_set_active (priv->pool, TRUE))
-      goto activate_failed;
-    priv->pool_active = TRUE;
-  }
-  GST_DEBUG_OBJECT (scope, "using pool alloc");
-
-  return gst_buffer_pool_acquire_buffer (priv->pool, outbuf, NULL);
-
-  /* ERRORS */
-activate_failed:
-  {
-    GST_ELEMENT_ERROR (scope, RESOURCE, SETTINGS,
-        ("failed to activate bufferpool"), ("failed to activate bufferpool"));
-    return GST_FLOW_ERROR;
-  }
-}
-
-static GstFlowReturn
-gst_audio_visualizer_chain (GstPad * pad, GstObject * parent,
-    GstBuffer * buffer)
-{
-  GstFlowReturn ret = GST_FLOW_OK;
-  GstAudioVisualizer *scope;
-  GstAudioVisualizerPrivate *priv;
-  GstAudioVisualizerClass *klass;
-  GstBuffer *inbuf;
-  guint64 dist, ts;
-  guint avail, sbpf;
-  gpointer adata;
-  gint bps, channels, rate;
-
-  scope = GST_AUDIO_VISUALIZER (parent);
-  priv = scope->priv;
-  klass = GST_AUDIO_VISUALIZER_CLASS (G_OBJECT_GET_CLASS (scope));
-
-  GST_LOG_OBJECT (scope, "chainfunc called");
-
-  /* resync on DISCONT */
-  if (GST_BUFFER_FLAG_IS_SET (buffer, GST_BUFFER_FLAG_DISCONT)) {
-    gst_adapter_clear (priv->adapter);
-  }
-
-  /* Make sure have an output format */
-  if (gst_pad_check_reconfigure (priv->srcpad)) {
-    if (!gst_audio_visualizer_src_negotiate (scope)) {
-      gst_pad_mark_reconfigure (priv->srcpad);
-      goto not_negotiated;
-    }
-  }
-
-  channels = GST_AUDIO_INFO_CHANNELS (&scope->ainfo);
-  rate = GST_AUDIO_INFO_RATE (&scope->ainfo);
-  bps = GST_AUDIO_INFO_BPS (&scope->ainfo);
-
-  if (bps == 0) {
-    ret = GST_FLOW_NOT_NEGOTIATED;
-    goto beach;
-  }
-
-  gst_adapter_push (priv->adapter, buffer);
-
-  g_mutex_lock (&priv->config_lock);
-
-  /* this is what we want */
-  sbpf = scope->req_spf * channels * sizeof (gint16);
-
-  inbuf = priv->inbuf;
-  /* FIXME: the timestamp in the adapter would be different */
-  gst_buffer_copy_into (inbuf, buffer, GST_BUFFER_COPY_METADATA, 0, -1);
-
-  /* this is what we have */
-  avail = gst_adapter_available (priv->adapter);
-  GST_LOG_OBJECT (scope, "avail: %u, bpf: %u", avail, sbpf);
-  while (avail >= sbpf) {
-    GstBuffer *outbuf;
-    GstVideoFrame outframe;
-
-    /* get timestamp of the current adapter content */
-    ts = gst_adapter_prev_pts (priv->adapter, &dist);
-    if (GST_CLOCK_TIME_IS_VALID (ts)) {
-      /* convert bytes to time */
-      dist /= bps;
-      ts += gst_util_uint64_scale_int (dist, GST_SECOND, rate);
-    }
-
-    /* check for QoS, don't compute buffers that are known to be late */
-    if (GST_CLOCK_TIME_IS_VALID (ts)) {
-      GstClockTime earliest_time;
-      gdouble proportion;
-      gint64 qostime;
-
-      qostime =
-          gst_segment_to_running_time (&priv->segment, GST_FORMAT_TIME,
-          ts) + priv->frame_duration;
-
-      GST_OBJECT_LOCK (scope);
-      earliest_time = priv->earliest_time;
-      proportion = priv->proportion;
-      GST_OBJECT_UNLOCK (scope);
-
-      if (GST_CLOCK_TIME_IS_VALID (earliest_time) && qostime <= earliest_time) {
-        GstClockTime stream_time, jitter;
-        GstMessage *qos_msg;
-
-        GST_DEBUG_OBJECT (scope,
-            "QoS: skip ts: %" GST_TIME_FORMAT ", earliest: %" GST_TIME_FORMAT,
-            GST_TIME_ARGS (qostime), GST_TIME_ARGS (earliest_time));
-
-        ++priv->dropped;
-        stream_time = gst_segment_to_stream_time (&priv->segment,
-            GST_FORMAT_TIME, ts);
-        jitter = GST_CLOCK_DIFF (qostime, earliest_time);
-        qos_msg = gst_message_new_qos (GST_OBJECT (scope), FALSE, qostime,
-            stream_time, ts, GST_BUFFER_DURATION (buffer));
-        gst_message_set_qos_values (qos_msg, jitter, proportion, 1000000);
-        gst_message_set_qos_stats (qos_msg, GST_FORMAT_BUFFERS,
-            priv->processed, priv->dropped);
-        gst_element_post_message (GST_ELEMENT (scope), qos_msg);
-
-        goto skip;
-      }
-    }
-
-    ++priv->processed;
-
-    g_mutex_unlock (&priv->config_lock);
-    ret = default_prepare_output_buffer (scope, &outbuf);
-    g_mutex_lock (&priv->config_lock);
-    /* recheck as the value could have changed */
-    sbpf = scope->req_spf * channels * sizeof (gint16);
-
-    /* no buffer allocated, we don't care why. */
-    if (ret != GST_FLOW_OK)
-      break;
-
-    /* sync controlled properties */
-    if (GST_CLOCK_TIME_IS_VALID (ts))
-      gst_object_sync_values (GST_OBJECT (scope), ts);
-
-    GST_BUFFER_TIMESTAMP (outbuf) = ts;
-    GST_BUFFER_DURATION (outbuf) = priv->frame_duration;
-
-    /* this can fail as the data size we need could have changed */
-    if (!(adata = (gpointer) gst_adapter_map (priv->adapter, sbpf)))
-      break;
-
-    gst_video_frame_map (&outframe, &scope->vinfo, outbuf, GST_MAP_READWRITE);
-
-    if (priv->shader) {
-      gst_video_frame_copy (&outframe, &priv->tempframe);
-    } else {
-      /* gst_video_frame_clear() or is output frame already cleared */
-      gint i;
-
-      for (i = 0; i < scope->vinfo.finfo->n_planes; i++) {
-        memset (outframe.data[i], 0, outframe.map[i].size);
-      }
-    }
-
-    gst_buffer_replace_all_memory (inbuf,
-        gst_memory_new_wrapped (GST_MEMORY_FLAG_READONLY, adata, sbpf, 0,
-            sbpf, NULL, NULL));
-
-    /* call class->render() vmethod */
-    if (klass->render) {
-      if (!klass->render (scope, inbuf, &outframe)) {
-        ret = GST_FLOW_ERROR;
-        gst_video_frame_unmap (&outframe);
-        goto beach;
-      } else {
-        /* run various post processing (shading and geometric transformation) */
-        /* FIXME: SHADER assumes 32bpp */
-        if (priv->shader && GST_VIDEO_INFO_COMP_PSTRIDE (&scope->vinfo, 0) == 4) {
-          priv->shader (scope, &outframe, &priv->tempframe);
-        }
-      }
-    }
-    gst_video_frame_unmap (&outframe);
-
-    g_mutex_unlock (&priv->config_lock);
-    ret = gst_pad_push (priv->srcpad, outbuf);
-    outbuf = NULL;
-    g_mutex_lock (&priv->config_lock);
-
-  skip:
-    /* recheck as the value could have changed */
-    sbpf = scope->req_spf * channels * sizeof (gint16);
-    GST_LOG_OBJECT (scope, "avail: %u, bpf: %u", avail, sbpf);
-    /* we want to take less or more, depending on spf : req_spf */
-    if (avail - sbpf >= sbpf) {
-      gst_adapter_flush (priv->adapter, sbpf);
-      gst_adapter_unmap (priv->adapter);
-    } else if (avail >= sbpf) {
-      /* just flush a bit and stop */
-      gst_adapter_flush (priv->adapter, (avail - sbpf));
-      gst_adapter_unmap (priv->adapter);
-      break;
-    }
-    avail = gst_adapter_available (priv->adapter);
-
-    if (ret != GST_FLOW_OK)
-      break;
-  }
-
-  g_mutex_unlock (&priv->config_lock);
-
-beach:
-  return ret;
-
-  /* ERRORS */
-not_negotiated:
-  {
-    GST_DEBUG_OBJECT (scope, "Failed to renegotiate");
-    return GST_FLOW_NOT_NEGOTIATED;
-  }
-}
-
-static gboolean
-gst_audio_visualizer_src_event (GstPad * pad, GstObject * parent,
-    GstEvent * event)
-{
-  gboolean res;
-  GstAudioVisualizer *scope;
-  GstAudioVisualizerPrivate *priv;
-
-  scope = GST_AUDIO_VISUALIZER (parent);
-  priv = scope->priv;
-
-  switch (GST_EVENT_TYPE (event)) {
-    case GST_EVENT_QOS:
-    {
-      gdouble proportion;
-      GstClockTimeDiff diff;
-      GstClockTime timestamp;
-
-      gst_event_parse_qos (event, NULL, &proportion, &diff, &timestamp);
-
-      /* save stuff for the _chain() function */
-      GST_OBJECT_LOCK (scope);
-      priv->proportion = proportion;
-      if (diff >= 0)
-        /* we're late, this is a good estimate for next displayable
-         * frame (see part-qos.txt) */
-        priv->earliest_time = timestamp + 2 * diff + priv->frame_duration;
-      else
-        priv->earliest_time = timestamp + diff;
-      GST_OBJECT_UNLOCK (scope);
-
-      res = gst_pad_push_event (priv->sinkpad, event);
-      break;
-    }
-    case GST_EVENT_RECONFIGURE:
-      /* dont't forward */
-      gst_event_unref (event);
-      res = TRUE;
-      break;
-    default:
-      res = gst_pad_event_default (pad, parent, event);
-      break;
-  }
-
-  return res;
-}
-
-static gboolean
-gst_audio_visualizer_sink_event (GstPad * pad, GstObject * parent,
-    GstEvent * event)
-{
-  gboolean res;
-  GstAudioVisualizer *scope;
-
-  scope = GST_AUDIO_VISUALIZER (parent);
-
-  switch (GST_EVENT_TYPE (event)) {
-    case GST_EVENT_CAPS:
-    {
-      GstCaps *caps;
-
-      gst_event_parse_caps (event, &caps);
-      res = gst_audio_visualizer_sink_setcaps (scope, caps);
-      gst_event_unref (event);
-      break;
-    }
-    case GST_EVENT_FLUSH_STOP:
-      gst_audio_visualizer_reset (scope);
-      res = gst_pad_push_event (scope->priv->srcpad, event);
-      break;
-    case GST_EVENT_SEGMENT:
-    {
-      /* the newsegment values are used to clip the input samples
-       * and to convert the incomming timestamps to running time so
-       * we can do QoS */
-      gst_event_copy_segment (event, &scope->priv->segment);
-
-      res = gst_pad_push_event (scope->priv->srcpad, event);
-      break;
-    }
-    default:
-      res = gst_pad_event_default (pad, parent, event);
-      break;
-  }
-
-  return res;
-}
-
-static gboolean
-gst_audio_visualizer_src_query (GstPad * pad, GstObject * parent,
-    GstQuery * query)
-{
-  gboolean res = FALSE;
-  GstAudioVisualizer *scope;
-
-  scope = GST_AUDIO_VISUALIZER (parent);
-
-  switch (GST_QUERY_TYPE (query)) {
-    case GST_QUERY_LATENCY:
-    {
-      /* We need to send the query upstream and add the returned latency to our
-       * own */
-      GstClockTime min_latency, max_latency;
-      gboolean us_live;
-      GstClockTime our_latency;
-      guint max_samples;
-      gint rate = GST_AUDIO_INFO_RATE (&scope->ainfo);
-
-      if (rate == 0)
-        break;
-
-      if ((res = gst_pad_peer_query (scope->priv->sinkpad, query))) {
-        gst_query_parse_latency (query, &us_live, &min_latency, &max_latency);
-
-        GST_DEBUG_OBJECT (scope, "Peer latency: min %"
-            GST_TIME_FORMAT " max %" GST_TIME_FORMAT,
-            GST_TIME_ARGS (min_latency), GST_TIME_ARGS (max_latency));
-
-        /* the max samples we must buffer buffer */
-        max_samples = MAX (scope->req_spf, scope->priv->spf);
-        our_latency = gst_util_uint64_scale_int (max_samples, GST_SECOND, rate);
-
-        GST_DEBUG_OBJECT (scope, "Our latency: %" GST_TIME_FORMAT,
-            GST_TIME_ARGS (our_latency));
-
-        /* we add some latency but only if we need to buffer more than what
-         * upstream gives us */
-        min_latency += our_latency;
-        if (max_latency != -1)
-          max_latency += our_latency;
-
-        GST_DEBUG_OBJECT (scope, "Calculated total latency : min %"
-            GST_TIME_FORMAT " max %" GST_TIME_FORMAT,
-            GST_TIME_ARGS (min_latency), GST_TIME_ARGS (max_latency));
-
-        gst_query_set_latency (query, TRUE, min_latency, max_latency);
-      }
-      break;
-    }
-    default:
-      res = gst_pad_query_default (pad, parent, query);
-      break;
-  }
-
-  return res;
-}
-
-static GstStateChangeReturn
-gst_audio_visualizer_change_state (GstElement * element,
-    GstStateChange transition)
-{
-  GstStateChangeReturn ret;
-  GstAudioVisualizer *scope;
-
-  scope = GST_AUDIO_VISUALIZER (element);
-
-  switch (transition) {
-    case GST_STATE_CHANGE_READY_TO_PAUSED:
-      gst_audio_visualizer_reset (scope);
-      break;
-    default:
-      break;
-  }
-
-  ret = GST_ELEMENT_CLASS (parent_class)->change_state (element, transition);
-
-  switch (transition) {
-    case GST_STATE_CHANGE_PAUSED_TO_READY:
-      gst_audio_visualizer_set_allocation (scope, NULL, NULL, NULL, NULL);
-      break;
-    case GST_STATE_CHANGE_READY_TO_NULL:
-      break;
-    default:
-      break;
-  }
-
-  return ret;
-}
diff --git a/gst/audiovisualizers/gstaudiovisualizer.h b/gst/audiovisualizers/gstaudiovisualizer.h
deleted file mode 100644
index 381de81..0000000
--- a/gst/audiovisualizers/gstaudiovisualizer.h
+++ /dev/null
@@ -1,108 +0,0 @@
-/* GStreamer
- * Copyright (C) <2011> Stefan Kost <ensonic@users.sf.net>
- * Copyright (C) <2015> Luis de Bethencourt <luis@debethencourt.com>
- *
- * gstaudiovisualizer.c: base class for audio visualisation elements
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-#ifndef __GST_AUDIO_VISUALIZER_H__
-#define __GST_AUDIO_VISUALIZER_H__
-
-#include <gst/gst.h>
-#include <gst/base/gstbasetransform.h>
-
-#include <gst/video/video.h>
-#include <gst/audio/audio.h>
-#include <gst/base/gstadapter.h>
-
-G_BEGIN_DECLS
-
-#define GST_TYPE_AUDIO_VISUALIZER            (gst_audio_visualizer_get_type())
-#define GST_AUDIO_VISUALIZER(obj)            (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_AUDIO_VISUALIZER,GstAudioVisualizer))
-#define GST_AUDIO_VISUALIZER_CLASS(klass)    (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_AUDIO_VISUALIZER,GstAudioVisualizerClass))
-#define GST_AUDIO_VISUALIZER_GET_CLASS(obj)  (G_TYPE_INSTANCE_GET_CLASS((obj),GST_TYPE_AUDIO_VISUALIZER,GstAudioVisualizerClass))
-#define GST_IS_AUDIO_VISUALIZER(obj)         (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_AUDIO_VISUALIZER))
-#define GST_IS_AUDIO_VISUALIZER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_AUDIO_VISUALIZER))
-
-typedef struct _GstAudioVisualizer GstAudioVisualizer;
-typedef struct _GstAudioVisualizerClass GstAudioVisualizerClass;
-typedef struct _GstAudioVisualizerPrivate GstAudioVisualizerPrivate;
-
-typedef void (*GstAudioVisualizerShaderFunc)(GstAudioVisualizer *scope, const GstVideoFrame *s, GstVideoFrame *d);
-
-/**
- * GstAudioVisualizerShader:
- * @GST_AUDIO_VISUALIZER_SHADER_NONE: no shading
- * @GST_AUDIO_VISUALIZER_SHADER_FADE: plain fading
- * @GST_AUDIO_VISUALIZER_SHADER_FADE_AND_MOVE_UP: fade and move up
- * @GST_AUDIO_VISUALIZER_SHADER_FADE_AND_MOVE_DOWN: fade and move down
- * @GST_AUDIO_VISUALIZER_SHADER_FADE_AND_MOVE_LEFT: fade and move left
- * @GST_AUDIO_VISUALIZER_SHADER_FADE_AND_MOVE_RIGHT: fade and move right
- * @GST_AUDIO_VISUALIZER_SHADER_FADE_AND_MOVE_HORIZ_OUT: fade and move horizontally out
- * @GST_AUDIO_VISUALIZER_SHADER_FADE_AND_MOVE_HORIZ_IN: fade and move horizontally in
- * @GST_AUDIO_VISUALIZER_SHADER_FADE_AND_MOVE_VERT_OUT: fade and move vertically out
- * @GST_AUDIO_VISUALIZER_SHADER_FADE_AND_MOVE_VERT_IN: fade and move vertically in
- *
- * Different types of supported background shading functions.
- */
-typedef enum {
-  GST_AUDIO_VISUALIZER_SHADER_NONE,
-  GST_AUDIO_VISUALIZER_SHADER_FADE,
-  GST_AUDIO_VISUALIZER_SHADER_FADE_AND_MOVE_UP,
-  GST_AUDIO_VISUALIZER_SHADER_FADE_AND_MOVE_DOWN,
-  GST_AUDIO_VISUALIZER_SHADER_FADE_AND_MOVE_LEFT,
-  GST_AUDIO_VISUALIZER_SHADER_FADE_AND_MOVE_RIGHT,
-  GST_AUDIO_VISUALIZER_SHADER_FADE_AND_MOVE_HORIZ_OUT,
-  GST_AUDIO_VISUALIZER_SHADER_FADE_AND_MOVE_HORIZ_IN,
-  GST_AUDIO_VISUALIZER_SHADER_FADE_AND_MOVE_VERT_OUT,
-  GST_AUDIO_VISUALIZER_SHADER_FADE_AND_MOVE_VERT_IN
-} GstAudioVisualizerShader;
-
-struct _GstAudioVisualizer
-{
-  GstElement parent;
-
-  guint req_spf;                /* min samples per frame wanted by the subclass */
-
-  /* video state */
-  GstVideoInfo vinfo;
-
-  /* audio state */
-  GstAudioInfo ainfo;
-
-  /* <private> */
-  GstAudioVisualizerPrivate *priv;
-};
-
-struct _GstAudioVisualizerClass
-{
-  GstElementClass parent_class;
-
-  /* virtual function, called whenever the format changes */
-  gboolean (*setup) (GstAudioVisualizer * scope);
-
-  /* virtual function for rendering a frame */
-  gboolean (*render) (GstAudioVisualizer * scope, GstBuffer * audio, GstVideoFrame * video);
-
-  gboolean (*decide_allocation)   (GstAudioVisualizer * scope, GstQuery *query);
-};
-
-GType gst_audio_visualizer_get_type (void);
-
-G_END_DECLS
-#endif /* __GST_AUDIO_VISUALIZER_H__ */
diff --git a/gst/audiovisualizers/gstspacescope.c b/gst/audiovisualizers/gstspacescope.c
index b0828a8..6cde066 100644
--- a/gst/audiovisualizers/gstspacescope.c
+++ b/gst/audiovisualizers/gstspacescope.c
@@ -28,7 +28,7 @@
  * <refsect2>
  * <title>Example launch line</title>
  * |[
- * gst-launch audiotestsrc ! audioconvert ! spacescope ! ximagesink
+ * gst-launch-1.0 audiotestsrc ! audioconvert ! spacescope ! ximagesink
  * ]|
  * </refsect2>
  */
diff --git a/gst/audiovisualizers/gstspacescope.h b/gst/audiovisualizers/gstspacescope.h
index a305ab5..10659fe 100644
--- a/gst/audiovisualizers/gstspacescope.h
+++ b/gst/audiovisualizers/gstspacescope.h
@@ -22,7 +22,7 @@
 #ifndef __GST_SPACE_SCOPE_H__
 #define __GST_SPACE_SCOPE_H__
 
-#include "gstaudiovisualizer.h"
+#include "gst/pbutils/gstaudiovisualizer.h"
 
 G_BEGIN_DECLS
 #define GST_TYPE_SPACE_SCOPE            (gst_space_scope_get_type())
diff --git a/gst/audiovisualizers/gstspectrascope.c b/gst/audiovisualizers/gstspectrascope.c
index ff43cfd..297d3ef 100644
--- a/gst/audiovisualizers/gstspectrascope.c
+++ b/gst/audiovisualizers/gstspectrascope.c
@@ -29,7 +29,7 @@
  * <refsect2>
  * <title>Example launch line</title>
  * |[
- * gst-launch audiotestsrc ! audioconvert ! spectrascope ! ximagesink
+ * gst-launch-1.0 audiotestsrc ! audioconvert ! spectrascope ! ximagesink
  * ]|
  * </refsect2>
  */
diff --git a/gst/audiovisualizers/gstspectrascope.h b/gst/audiovisualizers/gstspectrascope.h
index 0b21d08..d063734 100644
--- a/gst/audiovisualizers/gstspectrascope.h
+++ b/gst/audiovisualizers/gstspectrascope.h
@@ -22,7 +22,7 @@
 #ifndef __GST_SPECTRA_SCOPE_H__
 #define __GST_SPECTRA_SCOPE_H__
 
-#include "gstaudiovisualizer.h"
+#include "gst/pbutils/gstaudiovisualizer.h"
 #include <gst/fft/gstffts16.h>
 
 G_BEGIN_DECLS
diff --git a/gst/audiovisualizers/gstsynaescope.c b/gst/audiovisualizers/gstsynaescope.c
index 23d15f0..dfadf09 100644
--- a/gst/audiovisualizers/gstsynaescope.c
+++ b/gst/audiovisualizers/gstsynaescope.c
@@ -28,7 +28,7 @@
  * <refsect2>
  * <title>Example launch line</title>
  * |[
- * gst-launch audiotestsrc ! audioconvert ! synaescope ! ximagesink
+ * gst-launch-1.0 audiotestsrc ! audioconvert ! synaescope ! ximagesink
  * ]|
  * </refsect2>
  */
diff --git a/gst/audiovisualizers/gstsynaescope.h b/gst/audiovisualizers/gstsynaescope.h
index a3148ed..f6ec264 100644
--- a/gst/audiovisualizers/gstsynaescope.h
+++ b/gst/audiovisualizers/gstsynaescope.h
@@ -22,7 +22,7 @@
 #ifndef __GST_SYNAE_SCOPE_H__
 #define __GST_SYNAE_SCOPE_H__
 
-#include "gstaudiovisualizer.h"
+#include "gst/pbutils/gstaudiovisualizer.h"
 #include <gst/fft/gstffts16.h>
 
 G_BEGIN_DECLS
diff --git a/gst/audiovisualizers/gstwavescope.c b/gst/audiovisualizers/gstwavescope.c
index b87d05c..ad125b0 100644
--- a/gst/audiovisualizers/gstwavescope.c
+++ b/gst/audiovisualizers/gstwavescope.c
@@ -28,7 +28,7 @@
  * <refsect2>
  * <title>Example launch line</title>
  * |[
- * gst-launch audiotestsrc ! audioconvert ! wavescope ! ximagesink
+ * gst-launch-1.0 audiotestsrc ! audioconvert ! wavescope ! ximagesink
  * ]|
  * </refsect2>
  */
@@ -176,8 +176,7 @@
 {
   GstWaveScope *scope = GST_WAVE_SCOPE (bscope);
 
-  if (scope->flt)
-    g_free (scope->flt);
+  g_free (scope->flt);
 
   scope->flt = g_new0 (gdouble, 6 * GST_AUDIO_INFO_CHANNELS (&bscope->ainfo));
 
diff --git a/gst/audiovisualizers/gstwavescope.h b/gst/audiovisualizers/gstwavescope.h
index 087f179..f367f88 100644
--- a/gst/audiovisualizers/gstwavescope.h
+++ b/gst/audiovisualizers/gstwavescope.h
@@ -22,7 +22,7 @@
 #ifndef __GST_WAVE_SCOPE_H__
 #define __GST_WAVE_SCOPE_H__
 
-#include "gstaudiovisualizer.h"
+#include "gst/pbutils/gstaudiovisualizer.h"
 
 G_BEGIN_DECLS
 #define GST_TYPE_WAVE_SCOPE            (gst_wave_scope_get_type())
diff --git a/gst/autoconvert/Makefile.in b/gst/autoconvert/Makefile.in
index 4c9b61d..ea2e7fa 100644
--- a/gst/autoconvert/Makefile.in
+++ b/gst/autoconvert/Makefile.in
@@ -116,16 +116,15 @@
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
 	$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
-	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gsettings.m4 \
-	$(top_srcdir)/m4/gst-fionread.m4 $(top_srcdir)/m4/gst-sdl.m4 \
-	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
-	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
-	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libgcrypt.m4 \
-	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
-	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
-	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
-	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
-	$(top_srcdir)/configure.ac
+	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gst-fionread.m4 \
+	$(top_srcdir)/m4/gst-sdl.m4 $(top_srcdir)/m4/iconv.m4 \
+	$(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \
+	$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
+	$(top_srcdir)/m4/libgcrypt.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
+	$(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \
@@ -276,6 +275,8 @@
 CLUTTER_X11_LIBS = @CLUTTER_X11_LIBS@
 CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
+CUDA_CFLAGS = @CUDA_CFLAGS@
+CUDA_LIBS = @CUDA_LIBS@
 CURL_CFLAGS = @CURL_CFLAGS@
 CURL_LIBS = @CURL_LIBS@
 CXX = @CXX@
@@ -313,6 +314,8 @@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
+EGL_CFLAGS = @EGL_CFLAGS@
+EGL_LIBS = @EGL_LIBS@
 EGREP = @EGREP@
 ERROR_CFLAGS = @ERROR_CFLAGS@
 ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
@@ -321,7 +324,6 @@
 EXIF_CFLAGS = @EXIF_CFLAGS@
 EXIF_LIBS = @EXIF_LIBS@
 FAAC_LIBS = @FAAC_LIBS@
-FAAD_IS_NEAAC = @FAAD_IS_NEAAC@
 FAAD_LIBS = @FAAD_LIBS@
 FFLAGS = @FFLAGS@
 FGREP = @FGREP@
@@ -340,8 +342,9 @@
 GIO_LIBS = @GIO_LIBS@
 GIO_UNIX_CFLAGS = @GIO_UNIX_CFLAGS@
 GIO_UNIX_LIBS = @GIO_UNIX_LIBS@
+GLES2_CFLAGS = @GLES2_CFLAGS@
+GLES2_LIBS = @GLES2_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
-GLIB_COMPILE_SCHEMAS = @GLIB_COMPILE_SCHEMAS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
@@ -358,16 +361,17 @@
 GMODULE_NO_EXPORT_LIBS = @GMODULE_NO_EXPORT_LIBS@
 GMSGFMT = @GMSGFMT@
 GMSGFMT_015 = @GMSGFMT_015@
+GNUSTL_CFLAGS = @GNUSTL_CFLAGS@
+GNUSTL_LIBS = @GNUSTL_LIBS@
 GRAPHENE_CFLAGS = @GRAPHENE_CFLAGS@
 GRAPHENE_LIBS = @GRAPHENE_LIBS@
 GREP = @GREP@
-GSETTINGS_CFLAGS = @GSETTINGS_CFLAGS@
-GSETTINGS_DISABLE_SCHEMAS_COMPILE = @GSETTINGS_DISABLE_SCHEMAS_COMPILE@
-GSETTINGS_LIBS = @GSETTINGS_LIBS@
 GSM_LIBS = @GSM_LIBS@
 GSTPB_PLUGINS_DIR = @GSTPB_PLUGINS_DIR@
 GSTPB_PREFIX = @GSTPB_PREFIX@
 GST_AGE = @GST_AGE@
+GST_ALLOCATORS_CFLAGS = @GST_ALLOCATORS_CFLAGS@
+GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
 GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
 GST_API_VERSION = @GST_API_VERSION@
 GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
@@ -393,6 +397,8 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PBUTILS_CFLAGS = @GST_PBUTILS_CFLAGS@
+GST_PBUTILS_LIBS = @GST_PBUTILS_LIBS@
 GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BAD_CFLAGS = @GST_PLUGINS_BAD_CFLAGS@
@@ -418,6 +424,8 @@
 GST_PREFIX = @GST_PREFIX@
 GST_REVISION = @GST_REVISION@
 GST_TOOLS_DIR = @GST_TOOLS_DIR@
+GST_VIDEO_CFLAGS = @GST_VIDEO_CFLAGS@
+GST_VIDEO_LIBS = @GST_VIDEO_LIBS@
 GTK3_CFLAGS = @GTK3_CFLAGS@
 GTK3_GL_CFLAGS = @GTK3_GL_CFLAGS@
 GTK3_GL_LIBS = @GTK3_GL_LIBS@
@@ -519,6 +527,7 @@
 LTLIBICONV = @LTLIBICONV@
 LTLIBINTL = @LTLIBINTL@
 LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
 MANIFEST_TOOL = @MANIFEST_TOOL@
@@ -532,8 +541,6 @@
 MODPLUG_LIBS = @MODPLUG_LIBS@
 MPEG2ENC_CFLAGS = @MPEG2ENC_CFLAGS@
 MPEG2ENC_LIBS = @MPEG2ENC_LIBS@
-MPG123_CFLAGS = @MPG123_CFLAGS@
-MPG123_LIBS = @MPG123_LIBS@
 MPLEX_CFLAGS = @MPLEX_CFLAGS@
 MPLEX_LDFLAGS = @MPLEX_LDFLAGS@
 MPLEX_LIBS = @MPLEX_LIBS@
@@ -549,6 +556,8 @@
 NETTLE_LIBS = @NETTLE_LIBS@
 NM = @NM@
 NMEDIT = @NMEDIT@
+NVENCODE_CFLAGS = @NVENCODE_CFLAGS@
+NVENCODE_LIBS = @NVENCODE_LIBS@
 OBJC = @OBJC@
 OBJCDEPMODE = @OBJCDEPMODE@
 OBJCFLAGS = @OBJCFLAGS@
@@ -606,16 +615,18 @@
 PYTHON_PLATFORM = @PYTHON_PLATFORM@
 PYTHON_PREFIX = @PYTHON_PREFIX@
 PYTHON_VERSION = @PYTHON_VERSION@
+QT_ANDROID_CFLAGS = @QT_ANDROID_CFLAGS@
+QT_ANDROID_LIBS = @QT_ANDROID_LIBS@
 QT_CFLAGS = @QT_CFLAGS@
 QT_LIBS = @QT_LIBS@
+QT_MAC_CFLAGS = @QT_MAC_CFLAGS@
+QT_MAC_LIBS = @QT_MAC_LIBS@
 QT_WAYLAND_CFLAGS = @QT_WAYLAND_CFLAGS@
 QT_WAYLAND_LIBS = @QT_WAYLAND_LIBS@
 QT_X11_CFLAGS = @QT_X11_CFLAGS@
 QT_X11_LIBS = @QT_X11_LIBS@
 RANLIB = @RANLIB@
 RCC = @RCC@
-RSVG_2_36_2_CFLAGS = @RSVG_2_36_2_CFLAGS@
-RSVG_2_36_2_LIBS = @RSVG_2_36_2_LIBS@
 RSVG_CFLAGS = @RSVG_CFLAGS@
 RSVG_LIBS = @RSVG_LIBS@
 RTMP_CFLAGS = @RTMP_CFLAGS@
@@ -667,6 +678,7 @@
 VOAACENC_LIBS = @VOAACENC_LIBS@
 VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
 VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VULKAN_LIBS = @VULKAN_LIBS@
 WARNING_CFLAGS = @WARNING_CFLAGS@
 WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
 WARNING_OBJCFLAGS = @WARNING_OBJCFLAGS@
@@ -677,6 +689,7 @@
 WAYLAND_LIBS = @WAYLAND_LIBS@
 WEBP_CFLAGS = @WEBP_CFLAGS@
 WEBP_LIBS = @WEBP_LIBS@
+WGET = @WGET@
 WILDMIDI_CFLAGS = @WILDMIDI_CFLAGS@
 WILDMIDI_LIBS = @WILDMIDI_LIBS@
 WINKS_LIBS = @WINKS_LIBS@
@@ -686,6 +699,8 @@
 X11_LIBS = @X11_LIBS@
 X265_CFLAGS = @X265_CFLAGS@
 X265_LIBS = @X265_LIBS@
+XCB_CFLAGS = @XCB_CFLAGS@
+XCB_LIBS = @XCB_LIBS@
 XCOMPOSITE_CFLAGS = @XCOMPOSITE_CFLAGS@
 XCOMPOSITE_LIBS = @XCOMPOSITE_LIBS@
 XGETTEXT = @XGETTEXT@
@@ -723,7 +738,6 @@
 docdir = @docdir@
 dvidir = @dvidir@
 exec_prefix = @exec_prefix@
-gsettingsschemadir = @gsettingsschemadir@
 host = @host@
 host_alias = @host_alias@
 host_cpu = @host_cpu@
diff --git a/gst/autoconvert/gstautoconvert.c b/gst/autoconvert/gstautoconvert.c
index 230a15c..b5a1035 100644
--- a/gst/autoconvert/gstautoconvert.c
+++ b/gst/autoconvert/gstautoconvert.c
@@ -106,6 +106,8 @@
     GstCaps * filter, GstPadDirection dir);
 static GstFlowReturn gst_auto_convert_sink_chain (GstPad * pad,
     GstObject * parent, GstBuffer * buffer);
+static GstFlowReturn gst_auto_convert_sink_chain_list (GstPad * pad,
+    GstObject * parent, GstBufferList * list);
 static gboolean gst_auto_convert_sink_event (GstPad * pad, GstObject * parent,
     GstEvent * event);
 static gboolean gst_auto_convert_sink_query (GstPad * pad, GstObject * parent,
@@ -118,6 +120,8 @@
 
 static GstFlowReturn gst_auto_convert_internal_sink_chain (GstPad * pad,
     GstObject * parent, GstBuffer * buffer);
+static GstFlowReturn gst_auto_convert_internal_sink_chain_list (GstPad * pad,
+    GstObject * parent, GstBufferList * list);
 static gboolean gst_auto_convert_internal_sink_event (GstPad * pad,
     GstObject * parent, GstEvent * event);
 static gboolean gst_auto_convert_internal_sink_query (GstPad * pad,
@@ -188,6 +192,8 @@
 
   gst_pad_set_chain_function (autoconvert->sinkpad,
       GST_DEBUG_FUNCPTR (gst_auto_convert_sink_chain));
+  gst_pad_set_chain_list_function (autoconvert->sinkpad,
+      GST_DEBUG_FUNCPTR (gst_auto_convert_sink_chain_list));
   gst_pad_set_event_function (autoconvert->sinkpad,
       GST_DEBUG_FUNCPTR (gst_auto_convert_sink_event));
   gst_pad_set_query_function (autoconvert->sinkpad,
@@ -479,6 +485,8 @@
 
   gst_pad_set_chain_function (internal_sinkpad,
       GST_DEBUG_FUNCPTR (gst_auto_convert_internal_sink_chain));
+  gst_pad_set_chain_list_function (internal_sinkpad,
+      GST_DEBUG_FUNCPTR (gst_auto_convert_internal_sink_chain_list));
   gst_pad_set_event_function (internal_sinkpad,
       GST_DEBUG_FUNCPTR (gst_auto_convert_internal_sink_event));
   gst_pad_set_query_function (internal_sinkpad,
@@ -921,6 +929,27 @@
   return ret;
 }
 
+static GstFlowReturn
+gst_auto_convert_sink_chain_list (GstPad * pad, GstObject * parent,
+    GstBufferList * list)
+{
+  GstFlowReturn ret = GST_FLOW_NOT_NEGOTIATED;
+  GstAutoConvert *autoconvert = GST_AUTO_CONVERT (parent);
+
+  if (autoconvert->current_internal_srcpad) {
+    ret = gst_pad_push_list (autoconvert->current_internal_srcpad, list);
+    if (ret != GST_FLOW_OK)
+      GST_DEBUG_OBJECT (autoconvert,
+          "Child element %" GST_PTR_FORMAT "returned flow %s",
+          autoconvert->current_subelement, gst_flow_get_name (ret));
+  } else {
+    GST_ERROR_OBJECT (autoconvert, "Got buffer without an negotiated element,"
+        " returning not-negotiated");
+  }
+
+  return ret;
+}
+
 static gboolean
 gst_auto_convert_sink_event (GstPad * pad, GstObject * parent, GstEvent * event)
 {
@@ -1212,6 +1241,17 @@
   return gst_pad_push (autoconvert->srcpad, buffer);
 }
 
+static GstFlowReturn
+gst_auto_convert_internal_sink_chain_list (GstPad * pad, GstObject * parent,
+    GstBufferList * list)
+{
+  GstAutoConvert *autoconvert =
+      GST_AUTO_CONVERT (g_object_get_qdata (G_OBJECT (pad),
+          parent_quark));
+
+  return gst_pad_push_list (autoconvert->srcpad, list);
+}
+
 static gboolean
 gst_auto_convert_internal_sink_event (GstPad * pad, GstObject * parent,
     GstEvent * event)
@@ -1243,7 +1283,31 @@
       GST_AUTO_CONVERT (g_object_get_qdata (G_OBJECT (pad),
           parent_quark));
 
-  return gst_pad_peer_query (autoconvert->srcpad, query);
+  if (!gst_pad_peer_query (autoconvert->srcpad, query)) {
+    switch (GST_QUERY_TYPE (query)) {
+      case GST_QUERY_CAPS:
+      {
+        GstCaps *filter;
+
+        gst_query_parse_caps (query, &filter);
+        if (filter) {
+          gst_query_set_caps_result (query, filter);
+        } else {
+          filter = gst_caps_new_any ();
+          gst_query_set_caps_result (query, filter);
+          gst_caps_unref (filter);
+        }
+        return TRUE;
+      }
+      case GST_QUERY_ACCEPT_CAPS:
+        gst_query_set_accept_caps_result (query, TRUE);
+        return TRUE;
+      default:
+        return FALSE;
+    }
+  }
+
+  return TRUE;
 }
 
 static gboolean
diff --git a/gst/autoconvert/gstautovideoconvert.c b/gst/autoconvert/gstautovideoconvert.c
index 271d6f5..11fc974 100644
--- a/gst/autoconvert/gstautovideoconvert.c
+++ b/gst/autoconvert/gstautovideoconvert.c
@@ -20,11 +20,11 @@
 /*
  * test autovideoconvert:
  * if rgb2bayer is present
- * gst-launch videotestsrc num-buffers=2 ! "video/x-raw,width=100,height=100,framerate=10/1" ! autovideoconvert ! "video/x-raw-bayer,width=100,height=100,format=bggr,framerate=10/1" ! fakesink -v
+ * gst-launch-1.0 videotestsrc num-buffers=2 ! "video/x-raw,width=100,height=100,framerate=10/1" ! autovideoconvert ! "video/x-bayer,width=100,height=100,format=bggr,framerate=10/1" ! fakesink -v
  * if bayer2rgb is present
- * gst-launch videotestsrc num-buffers=2 ! "video/x-raw-bayer,width=100,height=100,format=bggr,framerate=10/1" ! autovideoconvert ! "video/x-raw,width=100,height=100,framerate=10/1" ! fakesink -v
+ * gst-launch-1.0 videotestsrc num-buffers=2 ! "video/x-bayer,width=100,height=100,format=bggr,framerate=10/1" ! autovideoconvert ! "video/x-raw,width=100,height=100,framerate=10/1" ! fakesink -v
  * test with videoconvert
- * gst-launch videotestsrc num-buffers=2 ! "video/x-raw,format=RGBx,width=100,height=100,framerate=10/1" ! autovideoconvert ! "video/x-raw,format=RGB16,width=100,height=100,framerate=10/1" ! fakesink -v
+ * gst-launch-1.0 videotestsrc num-buffers=2 ! "video/x-raw,format=RGBx,width=100,height=100,framerate=10/1" ! autovideoconvert ! "video/x-raw,format=RGB16,width=100,height=100,framerate=10/1" ! fakesink -v
  */
 #ifdef HAVE_CONFIG_H
 #include "config.h"
diff --git a/gst/bayer/Makefile.in b/gst/bayer/Makefile.in
index 06418d1..97d52c7 100644
--- a/gst/bayer/Makefile.in
+++ b/gst/bayer/Makefile.in
@@ -137,16 +137,15 @@
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
 	$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
-	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gsettings.m4 \
-	$(top_srcdir)/m4/gst-fionread.m4 $(top_srcdir)/m4/gst-sdl.m4 \
-	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
-	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
-	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libgcrypt.m4 \
-	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
-	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
-	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
-	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
-	$(top_srcdir)/configure.ac
+	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gst-fionread.m4 \
+	$(top_srcdir)/m4/gst-sdl.m4 $(top_srcdir)/m4/iconv.m4 \
+	$(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \
+	$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
+	$(top_srcdir)/m4/libgcrypt.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
+	$(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
@@ -298,6 +297,8 @@
 CLUTTER_X11_LIBS = @CLUTTER_X11_LIBS@
 CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
+CUDA_CFLAGS = @CUDA_CFLAGS@
+CUDA_LIBS = @CUDA_LIBS@
 CURL_CFLAGS = @CURL_CFLAGS@
 CURL_LIBS = @CURL_LIBS@
 CXX = @CXX@
@@ -335,6 +336,8 @@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
+EGL_CFLAGS = @EGL_CFLAGS@
+EGL_LIBS = @EGL_LIBS@
 EGREP = @EGREP@
 
 # orc-generated code creates warnings
@@ -345,7 +348,6 @@
 EXIF_CFLAGS = @EXIF_CFLAGS@
 EXIF_LIBS = @EXIF_LIBS@
 FAAC_LIBS = @FAAC_LIBS@
-FAAD_IS_NEAAC = @FAAD_IS_NEAAC@
 FAAD_LIBS = @FAAD_LIBS@
 FFLAGS = @FFLAGS@
 FGREP = @FGREP@
@@ -364,8 +366,9 @@
 GIO_LIBS = @GIO_LIBS@
 GIO_UNIX_CFLAGS = @GIO_UNIX_CFLAGS@
 GIO_UNIX_LIBS = @GIO_UNIX_LIBS@
+GLES2_CFLAGS = @GLES2_CFLAGS@
+GLES2_LIBS = @GLES2_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
-GLIB_COMPILE_SCHEMAS = @GLIB_COMPILE_SCHEMAS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
@@ -382,16 +385,17 @@
 GMODULE_NO_EXPORT_LIBS = @GMODULE_NO_EXPORT_LIBS@
 GMSGFMT = @GMSGFMT@
 GMSGFMT_015 = @GMSGFMT_015@
+GNUSTL_CFLAGS = @GNUSTL_CFLAGS@
+GNUSTL_LIBS = @GNUSTL_LIBS@
 GRAPHENE_CFLAGS = @GRAPHENE_CFLAGS@
 GRAPHENE_LIBS = @GRAPHENE_LIBS@
 GREP = @GREP@
-GSETTINGS_CFLAGS = @GSETTINGS_CFLAGS@
-GSETTINGS_DISABLE_SCHEMAS_COMPILE = @GSETTINGS_DISABLE_SCHEMAS_COMPILE@
-GSETTINGS_LIBS = @GSETTINGS_LIBS@
 GSM_LIBS = @GSM_LIBS@
 GSTPB_PLUGINS_DIR = @GSTPB_PLUGINS_DIR@
 GSTPB_PREFIX = @GSTPB_PREFIX@
 GST_AGE = @GST_AGE@
+GST_ALLOCATORS_CFLAGS = @GST_ALLOCATORS_CFLAGS@
+GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
 GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
 GST_API_VERSION = @GST_API_VERSION@
 GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
@@ -417,6 +421,8 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PBUTILS_CFLAGS = @GST_PBUTILS_CFLAGS@
+GST_PBUTILS_LIBS = @GST_PBUTILS_LIBS@
 GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BAD_CFLAGS = @GST_PLUGINS_BAD_CFLAGS@
@@ -442,6 +448,8 @@
 GST_PREFIX = @GST_PREFIX@
 GST_REVISION = @GST_REVISION@
 GST_TOOLS_DIR = @GST_TOOLS_DIR@
+GST_VIDEO_CFLAGS = @GST_VIDEO_CFLAGS@
+GST_VIDEO_LIBS = @GST_VIDEO_LIBS@
 GTK3_CFLAGS = @GTK3_CFLAGS@
 GTK3_GL_CFLAGS = @GTK3_GL_CFLAGS@
 GTK3_GL_LIBS = @GTK3_GL_LIBS@
@@ -543,6 +551,7 @@
 LTLIBICONV = @LTLIBICONV@
 LTLIBINTL = @LTLIBINTL@
 LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
 MANIFEST_TOOL = @MANIFEST_TOOL@
@@ -556,8 +565,6 @@
 MODPLUG_LIBS = @MODPLUG_LIBS@
 MPEG2ENC_CFLAGS = @MPEG2ENC_CFLAGS@
 MPEG2ENC_LIBS = @MPEG2ENC_LIBS@
-MPG123_CFLAGS = @MPG123_CFLAGS@
-MPG123_LIBS = @MPG123_LIBS@
 MPLEX_CFLAGS = @MPLEX_CFLAGS@
 MPLEX_LDFLAGS = @MPLEX_LDFLAGS@
 MPLEX_LIBS = @MPLEX_LIBS@
@@ -573,6 +580,8 @@
 NETTLE_LIBS = @NETTLE_LIBS@
 NM = @NM@
 NMEDIT = @NMEDIT@
+NVENCODE_CFLAGS = @NVENCODE_CFLAGS@
+NVENCODE_LIBS = @NVENCODE_LIBS@
 OBJC = @OBJC@
 OBJCDEPMODE = @OBJCDEPMODE@
 OBJCFLAGS = @OBJCFLAGS@
@@ -630,16 +639,18 @@
 PYTHON_PLATFORM = @PYTHON_PLATFORM@
 PYTHON_PREFIX = @PYTHON_PREFIX@
 PYTHON_VERSION = @PYTHON_VERSION@
+QT_ANDROID_CFLAGS = @QT_ANDROID_CFLAGS@
+QT_ANDROID_LIBS = @QT_ANDROID_LIBS@
 QT_CFLAGS = @QT_CFLAGS@
 QT_LIBS = @QT_LIBS@
+QT_MAC_CFLAGS = @QT_MAC_CFLAGS@
+QT_MAC_LIBS = @QT_MAC_LIBS@
 QT_WAYLAND_CFLAGS = @QT_WAYLAND_CFLAGS@
 QT_WAYLAND_LIBS = @QT_WAYLAND_LIBS@
 QT_X11_CFLAGS = @QT_X11_CFLAGS@
 QT_X11_LIBS = @QT_X11_LIBS@
 RANLIB = @RANLIB@
 RCC = @RCC@
-RSVG_2_36_2_CFLAGS = @RSVG_2_36_2_CFLAGS@
-RSVG_2_36_2_LIBS = @RSVG_2_36_2_LIBS@
 RSVG_CFLAGS = @RSVG_CFLAGS@
 RSVG_LIBS = @RSVG_LIBS@
 RTMP_CFLAGS = @RTMP_CFLAGS@
@@ -691,6 +702,7 @@
 VOAACENC_LIBS = @VOAACENC_LIBS@
 VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
 VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VULKAN_LIBS = @VULKAN_LIBS@
 WARNING_CFLAGS = @WARNING_CFLAGS@
 WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
 WARNING_OBJCFLAGS = @WARNING_OBJCFLAGS@
@@ -701,6 +713,7 @@
 WAYLAND_LIBS = @WAYLAND_LIBS@
 WEBP_CFLAGS = @WEBP_CFLAGS@
 WEBP_LIBS = @WEBP_LIBS@
+WGET = @WGET@
 WILDMIDI_CFLAGS = @WILDMIDI_CFLAGS@
 WILDMIDI_LIBS = @WILDMIDI_LIBS@
 WINKS_LIBS = @WINKS_LIBS@
@@ -710,6 +723,8 @@
 X11_LIBS = @X11_LIBS@
 X265_CFLAGS = @X265_CFLAGS@
 X265_LIBS = @X265_LIBS@
+XCB_CFLAGS = @XCB_CFLAGS@
+XCB_LIBS = @XCB_LIBS@
 XCOMPOSITE_CFLAGS = @XCOMPOSITE_CFLAGS@
 XCOMPOSITE_LIBS = @XCOMPOSITE_LIBS@
 XGETTEXT = @XGETTEXT@
@@ -747,7 +762,6 @@
 docdir = @docdir@
 dvidir = @dvidir@
 exec_prefix = @exec_prefix@
-gsettingsschemadir = @gsettingsschemadir@
 host = @host@
 host_alias = @host_alias@
 host_cpu = @host_cpu@
diff --git a/gst/camerabin2/Makefile.in b/gst/camerabin2/Makefile.in
index 89814b7..3cb034d 100644
--- a/gst/camerabin2/Makefile.in
+++ b/gst/camerabin2/Makefile.in
@@ -116,16 +116,15 @@
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
 	$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
-	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gsettings.m4 \
-	$(top_srcdir)/m4/gst-fionread.m4 $(top_srcdir)/m4/gst-sdl.m4 \
-	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
-	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
-	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libgcrypt.m4 \
-	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
-	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
-	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
-	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
-	$(top_srcdir)/configure.ac
+	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gst-fionread.m4 \
+	$(top_srcdir)/m4/gst-sdl.m4 $(top_srcdir)/m4/iconv.m4 \
+	$(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \
+	$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
+	$(top_srcdir)/m4/libgcrypt.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
+	$(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \
@@ -282,6 +281,8 @@
 CLUTTER_X11_LIBS = @CLUTTER_X11_LIBS@
 CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
+CUDA_CFLAGS = @CUDA_CFLAGS@
+CUDA_LIBS = @CUDA_LIBS@
 CURL_CFLAGS = @CURL_CFLAGS@
 CURL_LIBS = @CURL_LIBS@
 CXX = @CXX@
@@ -319,6 +320,8 @@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
+EGL_CFLAGS = @EGL_CFLAGS@
+EGL_LIBS = @EGL_LIBS@
 EGREP = @EGREP@
 ERROR_CFLAGS = @ERROR_CFLAGS@
 ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
@@ -327,7 +330,6 @@
 EXIF_CFLAGS = @EXIF_CFLAGS@
 EXIF_LIBS = @EXIF_LIBS@
 FAAC_LIBS = @FAAC_LIBS@
-FAAD_IS_NEAAC = @FAAD_IS_NEAAC@
 FAAD_LIBS = @FAAD_LIBS@
 FFLAGS = @FFLAGS@
 FGREP = @FGREP@
@@ -346,8 +348,9 @@
 GIO_LIBS = @GIO_LIBS@
 GIO_UNIX_CFLAGS = @GIO_UNIX_CFLAGS@
 GIO_UNIX_LIBS = @GIO_UNIX_LIBS@
+GLES2_CFLAGS = @GLES2_CFLAGS@
+GLES2_LIBS = @GLES2_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
-GLIB_COMPILE_SCHEMAS = @GLIB_COMPILE_SCHEMAS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
@@ -364,16 +367,17 @@
 GMODULE_NO_EXPORT_LIBS = @GMODULE_NO_EXPORT_LIBS@
 GMSGFMT = @GMSGFMT@
 GMSGFMT_015 = @GMSGFMT_015@
+GNUSTL_CFLAGS = @GNUSTL_CFLAGS@
+GNUSTL_LIBS = @GNUSTL_LIBS@
 GRAPHENE_CFLAGS = @GRAPHENE_CFLAGS@
 GRAPHENE_LIBS = @GRAPHENE_LIBS@
 GREP = @GREP@
-GSETTINGS_CFLAGS = @GSETTINGS_CFLAGS@
-GSETTINGS_DISABLE_SCHEMAS_COMPILE = @GSETTINGS_DISABLE_SCHEMAS_COMPILE@
-GSETTINGS_LIBS = @GSETTINGS_LIBS@
 GSM_LIBS = @GSM_LIBS@
 GSTPB_PLUGINS_DIR = @GSTPB_PLUGINS_DIR@
 GSTPB_PREFIX = @GSTPB_PREFIX@
 GST_AGE = @GST_AGE@
+GST_ALLOCATORS_CFLAGS = @GST_ALLOCATORS_CFLAGS@
+GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
 GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
 GST_API_VERSION = @GST_API_VERSION@
 GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
@@ -399,6 +403,8 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PBUTILS_CFLAGS = @GST_PBUTILS_CFLAGS@
+GST_PBUTILS_LIBS = @GST_PBUTILS_LIBS@
 GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BAD_CFLAGS = @GST_PLUGINS_BAD_CFLAGS@
@@ -424,6 +430,8 @@
 GST_PREFIX = @GST_PREFIX@
 GST_REVISION = @GST_REVISION@
 GST_TOOLS_DIR = @GST_TOOLS_DIR@
+GST_VIDEO_CFLAGS = @GST_VIDEO_CFLAGS@
+GST_VIDEO_LIBS = @GST_VIDEO_LIBS@
 GTK3_CFLAGS = @GTK3_CFLAGS@
 GTK3_GL_CFLAGS = @GTK3_GL_CFLAGS@
 GTK3_GL_LIBS = @GTK3_GL_LIBS@
@@ -525,6 +533,7 @@
 LTLIBICONV = @LTLIBICONV@
 LTLIBINTL = @LTLIBINTL@
 LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
 MANIFEST_TOOL = @MANIFEST_TOOL@
@@ -538,8 +547,6 @@
 MODPLUG_LIBS = @MODPLUG_LIBS@
 MPEG2ENC_CFLAGS = @MPEG2ENC_CFLAGS@
 MPEG2ENC_LIBS = @MPEG2ENC_LIBS@
-MPG123_CFLAGS = @MPG123_CFLAGS@
-MPG123_LIBS = @MPG123_LIBS@
 MPLEX_CFLAGS = @MPLEX_CFLAGS@
 MPLEX_LDFLAGS = @MPLEX_LDFLAGS@
 MPLEX_LIBS = @MPLEX_LIBS@
@@ -555,6 +562,8 @@
 NETTLE_LIBS = @NETTLE_LIBS@
 NM = @NM@
 NMEDIT = @NMEDIT@
+NVENCODE_CFLAGS = @NVENCODE_CFLAGS@
+NVENCODE_LIBS = @NVENCODE_LIBS@
 OBJC = @OBJC@
 OBJCDEPMODE = @OBJCDEPMODE@
 OBJCFLAGS = @OBJCFLAGS@
@@ -612,16 +621,18 @@
 PYTHON_PLATFORM = @PYTHON_PLATFORM@
 PYTHON_PREFIX = @PYTHON_PREFIX@
 PYTHON_VERSION = @PYTHON_VERSION@
+QT_ANDROID_CFLAGS = @QT_ANDROID_CFLAGS@
+QT_ANDROID_LIBS = @QT_ANDROID_LIBS@
 QT_CFLAGS = @QT_CFLAGS@
 QT_LIBS = @QT_LIBS@
+QT_MAC_CFLAGS = @QT_MAC_CFLAGS@
+QT_MAC_LIBS = @QT_MAC_LIBS@
 QT_WAYLAND_CFLAGS = @QT_WAYLAND_CFLAGS@
 QT_WAYLAND_LIBS = @QT_WAYLAND_LIBS@
 QT_X11_CFLAGS = @QT_X11_CFLAGS@
 QT_X11_LIBS = @QT_X11_LIBS@
 RANLIB = @RANLIB@
 RCC = @RCC@
-RSVG_2_36_2_CFLAGS = @RSVG_2_36_2_CFLAGS@
-RSVG_2_36_2_LIBS = @RSVG_2_36_2_LIBS@
 RSVG_CFLAGS = @RSVG_CFLAGS@
 RSVG_LIBS = @RSVG_LIBS@
 RTMP_CFLAGS = @RTMP_CFLAGS@
@@ -673,6 +684,7 @@
 VOAACENC_LIBS = @VOAACENC_LIBS@
 VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
 VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VULKAN_LIBS = @VULKAN_LIBS@
 WARNING_CFLAGS = @WARNING_CFLAGS@
 WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
 WARNING_OBJCFLAGS = @WARNING_OBJCFLAGS@
@@ -683,6 +695,7 @@
 WAYLAND_LIBS = @WAYLAND_LIBS@
 WEBP_CFLAGS = @WEBP_CFLAGS@
 WEBP_LIBS = @WEBP_LIBS@
+WGET = @WGET@
 WILDMIDI_CFLAGS = @WILDMIDI_CFLAGS@
 WILDMIDI_LIBS = @WILDMIDI_LIBS@
 WINKS_LIBS = @WINKS_LIBS@
@@ -692,6 +705,8 @@
 X11_LIBS = @X11_LIBS@
 X265_CFLAGS = @X265_CFLAGS@
 X265_LIBS = @X265_LIBS@
+XCB_CFLAGS = @XCB_CFLAGS@
+XCB_LIBS = @XCB_LIBS@
 XCOMPOSITE_CFLAGS = @XCOMPOSITE_CFLAGS@
 XCOMPOSITE_LIBS = @XCOMPOSITE_LIBS@
 XGETTEXT = @XGETTEXT@
@@ -729,7 +744,6 @@
 docdir = @docdir@
 dvidir = @dvidir@
 exec_prefix = @exec_prefix@
-gsettingsschemadir = @gsettingsschemadir@
 host = @host@
 host_alias = @host_alias@
 host_cpu = @host_cpu@
diff --git a/gst/camerabin2/gstcamerabin2.c b/gst/camerabin2/gstcamerabin2.c
index 7458675..d0876d5 100644
--- a/gst/camerabin2/gstcamerabin2.c
+++ b/gst/camerabin2/gstcamerabin2.c
@@ -121,11 +121,11 @@
  * <refsect2>
  * <title>Example launch line</title>
  * <para>
- * Unfortunately, camerabin can't be really used from gst-launch, as you need
+ * Unfortunately, camerabin can't be really used from gst-launch-1.0, as you need
  * to send signals to control it. The following pipeline might be able
  * to show the viewfinder using all the default elements.
  * |[
- * gst-launch -v -m camerabin
+ * gst-launch-1.0 -v -m camerabin
  * ]|
  * </para>
  * </refsect2>
diff --git a/gst/camerabin2/gstviewfinderbin.c b/gst/camerabin2/gstviewfinderbin.c
index 9732340..3ae6c31 100644
--- a/gst/camerabin2/gstviewfinderbin.c
+++ b/gst/camerabin2/gstviewfinderbin.c
@@ -24,7 +24,7 @@
  * <refsect2>
  * <title>Example launch line</title>
  * |[
- * gst-launch -v videotestsrc ! viewfinderbin
+ * gst-launch-1.0 -v videotestsrc ! viewfinderbin
  * ]|
  * Feeds the viewfinderbin with video test data.
  * </refsect2>
diff --git a/gst/cdxaparse/Makefile.in b/gst/cdxaparse/Makefile.in
index 7b77827..c43ec8a 100644
--- a/gst/cdxaparse/Makefile.in
+++ b/gst/cdxaparse/Makefile.in
@@ -116,16 +116,15 @@
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
 	$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
-	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gsettings.m4 \
-	$(top_srcdir)/m4/gst-fionread.m4 $(top_srcdir)/m4/gst-sdl.m4 \
-	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
-	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
-	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libgcrypt.m4 \
-	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
-	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
-	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
-	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
-	$(top_srcdir)/configure.ac
+	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gst-fionread.m4 \
+	$(top_srcdir)/m4/gst-sdl.m4 $(top_srcdir)/m4/iconv.m4 \
+	$(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \
+	$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
+	$(top_srcdir)/m4/libgcrypt.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
+	$(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \
@@ -275,6 +274,8 @@
 CLUTTER_X11_LIBS = @CLUTTER_X11_LIBS@
 CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
+CUDA_CFLAGS = @CUDA_CFLAGS@
+CUDA_LIBS = @CUDA_LIBS@
 CURL_CFLAGS = @CURL_CFLAGS@
 CURL_LIBS = @CURL_LIBS@
 CXX = @CXX@
@@ -312,6 +313,8 @@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
+EGL_CFLAGS = @EGL_CFLAGS@
+EGL_LIBS = @EGL_LIBS@
 EGREP = @EGREP@
 ERROR_CFLAGS = @ERROR_CFLAGS@
 ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
@@ -320,7 +323,6 @@
 EXIF_CFLAGS = @EXIF_CFLAGS@
 EXIF_LIBS = @EXIF_LIBS@
 FAAC_LIBS = @FAAC_LIBS@
-FAAD_IS_NEAAC = @FAAD_IS_NEAAC@
 FAAD_LIBS = @FAAD_LIBS@
 FFLAGS = @FFLAGS@
 FGREP = @FGREP@
@@ -339,8 +341,9 @@
 GIO_LIBS = @GIO_LIBS@
 GIO_UNIX_CFLAGS = @GIO_UNIX_CFLAGS@
 GIO_UNIX_LIBS = @GIO_UNIX_LIBS@
+GLES2_CFLAGS = @GLES2_CFLAGS@
+GLES2_LIBS = @GLES2_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
-GLIB_COMPILE_SCHEMAS = @GLIB_COMPILE_SCHEMAS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
@@ -357,16 +360,17 @@
 GMODULE_NO_EXPORT_LIBS = @GMODULE_NO_EXPORT_LIBS@
 GMSGFMT = @GMSGFMT@
 GMSGFMT_015 = @GMSGFMT_015@
+GNUSTL_CFLAGS = @GNUSTL_CFLAGS@
+GNUSTL_LIBS = @GNUSTL_LIBS@
 GRAPHENE_CFLAGS = @GRAPHENE_CFLAGS@
 GRAPHENE_LIBS = @GRAPHENE_LIBS@
 GREP = @GREP@
-GSETTINGS_CFLAGS = @GSETTINGS_CFLAGS@
-GSETTINGS_DISABLE_SCHEMAS_COMPILE = @GSETTINGS_DISABLE_SCHEMAS_COMPILE@
-GSETTINGS_LIBS = @GSETTINGS_LIBS@
 GSM_LIBS = @GSM_LIBS@
 GSTPB_PLUGINS_DIR = @GSTPB_PLUGINS_DIR@
 GSTPB_PREFIX = @GSTPB_PREFIX@
 GST_AGE = @GST_AGE@
+GST_ALLOCATORS_CFLAGS = @GST_ALLOCATORS_CFLAGS@
+GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
 GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
 GST_API_VERSION = @GST_API_VERSION@
 GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
@@ -392,6 +396,8 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PBUTILS_CFLAGS = @GST_PBUTILS_CFLAGS@
+GST_PBUTILS_LIBS = @GST_PBUTILS_LIBS@
 GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BAD_CFLAGS = @GST_PLUGINS_BAD_CFLAGS@
@@ -417,6 +423,8 @@
 GST_PREFIX = @GST_PREFIX@
 GST_REVISION = @GST_REVISION@
 GST_TOOLS_DIR = @GST_TOOLS_DIR@
+GST_VIDEO_CFLAGS = @GST_VIDEO_CFLAGS@
+GST_VIDEO_LIBS = @GST_VIDEO_LIBS@
 GTK3_CFLAGS = @GTK3_CFLAGS@
 GTK3_GL_CFLAGS = @GTK3_GL_CFLAGS@
 GTK3_GL_LIBS = @GTK3_GL_LIBS@
@@ -518,6 +526,7 @@
 LTLIBICONV = @LTLIBICONV@
 LTLIBINTL = @LTLIBINTL@
 LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
 MANIFEST_TOOL = @MANIFEST_TOOL@
@@ -531,8 +540,6 @@
 MODPLUG_LIBS = @MODPLUG_LIBS@
 MPEG2ENC_CFLAGS = @MPEG2ENC_CFLAGS@
 MPEG2ENC_LIBS = @MPEG2ENC_LIBS@
-MPG123_CFLAGS = @MPG123_CFLAGS@
-MPG123_LIBS = @MPG123_LIBS@
 MPLEX_CFLAGS = @MPLEX_CFLAGS@
 MPLEX_LDFLAGS = @MPLEX_LDFLAGS@
 MPLEX_LIBS = @MPLEX_LIBS@
@@ -548,6 +555,8 @@
 NETTLE_LIBS = @NETTLE_LIBS@
 NM = @NM@
 NMEDIT = @NMEDIT@
+NVENCODE_CFLAGS = @NVENCODE_CFLAGS@
+NVENCODE_LIBS = @NVENCODE_LIBS@
 OBJC = @OBJC@
 OBJCDEPMODE = @OBJCDEPMODE@
 OBJCFLAGS = @OBJCFLAGS@
@@ -605,16 +614,18 @@
 PYTHON_PLATFORM = @PYTHON_PLATFORM@
 PYTHON_PREFIX = @PYTHON_PREFIX@
 PYTHON_VERSION = @PYTHON_VERSION@
+QT_ANDROID_CFLAGS = @QT_ANDROID_CFLAGS@
+QT_ANDROID_LIBS = @QT_ANDROID_LIBS@
 QT_CFLAGS = @QT_CFLAGS@
 QT_LIBS = @QT_LIBS@
+QT_MAC_CFLAGS = @QT_MAC_CFLAGS@
+QT_MAC_LIBS = @QT_MAC_LIBS@
 QT_WAYLAND_CFLAGS = @QT_WAYLAND_CFLAGS@
 QT_WAYLAND_LIBS = @QT_WAYLAND_LIBS@
 QT_X11_CFLAGS = @QT_X11_CFLAGS@
 QT_X11_LIBS = @QT_X11_LIBS@
 RANLIB = @RANLIB@
 RCC = @RCC@
-RSVG_2_36_2_CFLAGS = @RSVG_2_36_2_CFLAGS@
-RSVG_2_36_2_LIBS = @RSVG_2_36_2_LIBS@
 RSVG_CFLAGS = @RSVG_CFLAGS@
 RSVG_LIBS = @RSVG_LIBS@
 RTMP_CFLAGS = @RTMP_CFLAGS@
@@ -666,6 +677,7 @@
 VOAACENC_LIBS = @VOAACENC_LIBS@
 VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
 VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VULKAN_LIBS = @VULKAN_LIBS@
 WARNING_CFLAGS = @WARNING_CFLAGS@
 WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
 WARNING_OBJCFLAGS = @WARNING_OBJCFLAGS@
@@ -676,6 +688,7 @@
 WAYLAND_LIBS = @WAYLAND_LIBS@
 WEBP_CFLAGS = @WEBP_CFLAGS@
 WEBP_LIBS = @WEBP_LIBS@
+WGET = @WGET@
 WILDMIDI_CFLAGS = @WILDMIDI_CFLAGS@
 WILDMIDI_LIBS = @WILDMIDI_LIBS@
 WINKS_LIBS = @WINKS_LIBS@
@@ -685,6 +698,8 @@
 X11_LIBS = @X11_LIBS@
 X265_CFLAGS = @X265_CFLAGS@
 X265_LIBS = @X265_LIBS@
+XCB_CFLAGS = @XCB_CFLAGS@
+XCB_LIBS = @XCB_LIBS@
 XCOMPOSITE_CFLAGS = @XCOMPOSITE_CFLAGS@
 XCOMPOSITE_LIBS = @XCOMPOSITE_LIBS@
 XGETTEXT = @XGETTEXT@
@@ -722,7 +737,6 @@
 docdir = @docdir@
 dvidir = @dvidir@
 exec_prefix = @exec_prefix@
-gsettingsschemadir = @gsettingsschemadir@
 host = @host@
 host_alias = @host_alias@
 host_cpu = @host_cpu@
diff --git a/gst/coloreffects/Makefile.in b/gst/coloreffects/Makefile.in
index 1c5432f..f049d80 100644
--- a/gst/coloreffects/Makefile.in
+++ b/gst/coloreffects/Makefile.in
@@ -116,16 +116,15 @@
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
 	$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
-	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gsettings.m4 \
-	$(top_srcdir)/m4/gst-fionread.m4 $(top_srcdir)/m4/gst-sdl.m4 \
-	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
-	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
-	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libgcrypt.m4 \
-	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
-	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
-	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
-	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
-	$(top_srcdir)/configure.ac
+	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gst-fionread.m4 \
+	$(top_srcdir)/m4/gst-sdl.m4 $(top_srcdir)/m4/iconv.m4 \
+	$(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \
+	$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
+	$(top_srcdir)/m4/libgcrypt.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
+	$(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \
@@ -276,6 +275,8 @@
 CLUTTER_X11_LIBS = @CLUTTER_X11_LIBS@
 CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
+CUDA_CFLAGS = @CUDA_CFLAGS@
+CUDA_LIBS = @CUDA_LIBS@
 CURL_CFLAGS = @CURL_CFLAGS@
 CURL_LIBS = @CURL_LIBS@
 CXX = @CXX@
@@ -313,6 +314,8 @@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
+EGL_CFLAGS = @EGL_CFLAGS@
+EGL_LIBS = @EGL_LIBS@
 EGREP = @EGREP@
 ERROR_CFLAGS = @ERROR_CFLAGS@
 ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
@@ -321,7 +324,6 @@
 EXIF_CFLAGS = @EXIF_CFLAGS@
 EXIF_LIBS = @EXIF_LIBS@
 FAAC_LIBS = @FAAC_LIBS@
-FAAD_IS_NEAAC = @FAAD_IS_NEAAC@
 FAAD_LIBS = @FAAD_LIBS@
 FFLAGS = @FFLAGS@
 FGREP = @FGREP@
@@ -340,8 +342,9 @@
 GIO_LIBS = @GIO_LIBS@
 GIO_UNIX_CFLAGS = @GIO_UNIX_CFLAGS@
 GIO_UNIX_LIBS = @GIO_UNIX_LIBS@
+GLES2_CFLAGS = @GLES2_CFLAGS@
+GLES2_LIBS = @GLES2_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
-GLIB_COMPILE_SCHEMAS = @GLIB_COMPILE_SCHEMAS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
@@ -358,16 +361,17 @@
 GMODULE_NO_EXPORT_LIBS = @GMODULE_NO_EXPORT_LIBS@
 GMSGFMT = @GMSGFMT@
 GMSGFMT_015 = @GMSGFMT_015@
+GNUSTL_CFLAGS = @GNUSTL_CFLAGS@
+GNUSTL_LIBS = @GNUSTL_LIBS@
 GRAPHENE_CFLAGS = @GRAPHENE_CFLAGS@
 GRAPHENE_LIBS = @GRAPHENE_LIBS@
 GREP = @GREP@
-GSETTINGS_CFLAGS = @GSETTINGS_CFLAGS@
-GSETTINGS_DISABLE_SCHEMAS_COMPILE = @GSETTINGS_DISABLE_SCHEMAS_COMPILE@
-GSETTINGS_LIBS = @GSETTINGS_LIBS@
 GSM_LIBS = @GSM_LIBS@
 GSTPB_PLUGINS_DIR = @GSTPB_PLUGINS_DIR@
 GSTPB_PREFIX = @GSTPB_PREFIX@
 GST_AGE = @GST_AGE@
+GST_ALLOCATORS_CFLAGS = @GST_ALLOCATORS_CFLAGS@
+GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
 GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
 GST_API_VERSION = @GST_API_VERSION@
 GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
@@ -393,6 +397,8 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PBUTILS_CFLAGS = @GST_PBUTILS_CFLAGS@
+GST_PBUTILS_LIBS = @GST_PBUTILS_LIBS@
 GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BAD_CFLAGS = @GST_PLUGINS_BAD_CFLAGS@
@@ -418,6 +424,8 @@
 GST_PREFIX = @GST_PREFIX@
 GST_REVISION = @GST_REVISION@
 GST_TOOLS_DIR = @GST_TOOLS_DIR@
+GST_VIDEO_CFLAGS = @GST_VIDEO_CFLAGS@
+GST_VIDEO_LIBS = @GST_VIDEO_LIBS@
 GTK3_CFLAGS = @GTK3_CFLAGS@
 GTK3_GL_CFLAGS = @GTK3_GL_CFLAGS@
 GTK3_GL_LIBS = @GTK3_GL_LIBS@
@@ -519,6 +527,7 @@
 LTLIBICONV = @LTLIBICONV@
 LTLIBINTL = @LTLIBINTL@
 LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
 MANIFEST_TOOL = @MANIFEST_TOOL@
@@ -532,8 +541,6 @@
 MODPLUG_LIBS = @MODPLUG_LIBS@
 MPEG2ENC_CFLAGS = @MPEG2ENC_CFLAGS@
 MPEG2ENC_LIBS = @MPEG2ENC_LIBS@
-MPG123_CFLAGS = @MPG123_CFLAGS@
-MPG123_LIBS = @MPG123_LIBS@
 MPLEX_CFLAGS = @MPLEX_CFLAGS@
 MPLEX_LDFLAGS = @MPLEX_LDFLAGS@
 MPLEX_LIBS = @MPLEX_LIBS@
@@ -549,6 +556,8 @@
 NETTLE_LIBS = @NETTLE_LIBS@
 NM = @NM@
 NMEDIT = @NMEDIT@
+NVENCODE_CFLAGS = @NVENCODE_CFLAGS@
+NVENCODE_LIBS = @NVENCODE_LIBS@
 OBJC = @OBJC@
 OBJCDEPMODE = @OBJCDEPMODE@
 OBJCFLAGS = @OBJCFLAGS@
@@ -606,16 +615,18 @@
 PYTHON_PLATFORM = @PYTHON_PLATFORM@
 PYTHON_PREFIX = @PYTHON_PREFIX@
 PYTHON_VERSION = @PYTHON_VERSION@
+QT_ANDROID_CFLAGS = @QT_ANDROID_CFLAGS@
+QT_ANDROID_LIBS = @QT_ANDROID_LIBS@
 QT_CFLAGS = @QT_CFLAGS@
 QT_LIBS = @QT_LIBS@
+QT_MAC_CFLAGS = @QT_MAC_CFLAGS@
+QT_MAC_LIBS = @QT_MAC_LIBS@
 QT_WAYLAND_CFLAGS = @QT_WAYLAND_CFLAGS@
 QT_WAYLAND_LIBS = @QT_WAYLAND_LIBS@
 QT_X11_CFLAGS = @QT_X11_CFLAGS@
 QT_X11_LIBS = @QT_X11_LIBS@
 RANLIB = @RANLIB@
 RCC = @RCC@
-RSVG_2_36_2_CFLAGS = @RSVG_2_36_2_CFLAGS@
-RSVG_2_36_2_LIBS = @RSVG_2_36_2_LIBS@
 RSVG_CFLAGS = @RSVG_CFLAGS@
 RSVG_LIBS = @RSVG_LIBS@
 RTMP_CFLAGS = @RTMP_CFLAGS@
@@ -667,6 +678,7 @@
 VOAACENC_LIBS = @VOAACENC_LIBS@
 VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
 VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VULKAN_LIBS = @VULKAN_LIBS@
 WARNING_CFLAGS = @WARNING_CFLAGS@
 WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
 WARNING_OBJCFLAGS = @WARNING_OBJCFLAGS@
@@ -677,6 +689,7 @@
 WAYLAND_LIBS = @WAYLAND_LIBS@
 WEBP_CFLAGS = @WEBP_CFLAGS@
 WEBP_LIBS = @WEBP_LIBS@
+WGET = @WGET@
 WILDMIDI_CFLAGS = @WILDMIDI_CFLAGS@
 WILDMIDI_LIBS = @WILDMIDI_LIBS@
 WINKS_LIBS = @WINKS_LIBS@
@@ -686,6 +699,8 @@
 X11_LIBS = @X11_LIBS@
 X265_CFLAGS = @X265_CFLAGS@
 X265_LIBS = @X265_LIBS@
+XCB_CFLAGS = @XCB_CFLAGS@
+XCB_LIBS = @XCB_LIBS@
 XCOMPOSITE_CFLAGS = @XCOMPOSITE_CFLAGS@
 XCOMPOSITE_LIBS = @XCOMPOSITE_LIBS@
 XGETTEXT = @XGETTEXT@
@@ -723,7 +738,6 @@
 docdir = @docdir@
 dvidir = @dvidir@
 exec_prefix = @exec_prefix@
-gsettingsschemadir = @gsettingsschemadir@
 host = @host@
 host_alias = @host_alias@
 host_cpu = @host_cpu@
diff --git a/gst/coloreffects/gstchromahold.c b/gst/coloreffects/gstchromahold.c
index fa5709d..097312a 100644
--- a/gst/coloreffects/gstchromahold.c
+++ b/gst/coloreffects/gstchromahold.c
@@ -29,7 +29,7 @@
  *
  * Sample pipeline:
  * |[
- * gst-launch videotestsrc pattern=smpte75 ! \
+ * gst-launch-1.0 videotestsrc pattern=smpte75 ! \
  *   chromahold target-r=0 target-g=0 target-b=255 ! \
  *   videoconvert ! autovideosink     \
  * ]| This pipeline only keeps the red color.
diff --git a/gst/coloreffects/gstcoloreffects.c b/gst/coloreffects/gstcoloreffects.c
index 335588d..a62a45d 100644
--- a/gst/coloreffects/gstcoloreffects.c
+++ b/gst/coloreffects/gstcoloreffects.c
@@ -25,7 +25,7 @@
  * <refsect2>
  * <title>Example launch line</title>
  * |[
- * gst-launch -v videotestsrc ! coloreffects preset=heat ! videoconvert !
+ * gst-launch-1.0 -v videotestsrc ! coloreffects preset=heat ! videoconvert !
  *     autovideosink
  * ]| This pipeline shows the effect of coloreffects on a test stream.
  * </refsect2>
diff --git a/gst/coloreffects/gstcoloreffects.h b/gst/coloreffects/gstcoloreffects.h
index 32f2230..50c9aa0 100644
--- a/gst/coloreffects/gstcoloreffects.h
+++ b/gst/coloreffects/gstcoloreffects.h
@@ -45,7 +45,7 @@
  * @GST_CLUT_PRESET_SEPIA: Sepia toning filter
  * @GST_CLUT_PRESET_XRAY: Invert colors and slightly shade to cyan
  * @GST_CLUT_PRESET_XPRO: Cross Processing filter
- * @GST_CLUT_PRESET_YELLOWBLUE: Visual magnifier high-contrast color filter. Since: 0.10.24
+ * @GST_CLUT_PRESET_YELLOWBLUE: Visual magnifier high-contrast color filter
  *
  * The lookup table to use to convert input colors
  */
diff --git a/gst/compositor/Makefile.in b/gst/compositor/Makefile.in
index 5d3868d..286fbad 100644
--- a/gst/compositor/Makefile.in
+++ b/gst/compositor/Makefile.in
@@ -138,16 +138,15 @@
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
 	$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
-	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gsettings.m4 \
-	$(top_srcdir)/m4/gst-fionread.m4 $(top_srcdir)/m4/gst-sdl.m4 \
-	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
-	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
-	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libgcrypt.m4 \
-	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
-	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
-	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
-	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
-	$(top_srcdir)/configure.ac
+	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gst-fionread.m4 \
+	$(top_srcdir)/m4/gst-sdl.m4 $(top_srcdir)/m4/iconv.m4 \
+	$(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \
+	$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
+	$(top_srcdir)/m4/libgcrypt.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
+	$(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \
@@ -305,6 +304,8 @@
 CLUTTER_X11_LIBS = @CLUTTER_X11_LIBS@
 CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
+CUDA_CFLAGS = @CUDA_CFLAGS@
+CUDA_LIBS = @CUDA_LIBS@
 CURL_CFLAGS = @CURL_CFLAGS@
 CURL_LIBS = @CURL_LIBS@
 CXX = @CXX@
@@ -342,6 +343,8 @@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
+EGL_CFLAGS = @EGL_CFLAGS@
+EGL_LIBS = @EGL_LIBS@
 EGREP = @EGREP@
 ERROR_CFLAGS = @ERROR_CFLAGS@
 ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
@@ -350,7 +353,6 @@
 EXIF_CFLAGS = @EXIF_CFLAGS@
 EXIF_LIBS = @EXIF_LIBS@
 FAAC_LIBS = @FAAC_LIBS@
-FAAD_IS_NEAAC = @FAAD_IS_NEAAC@
 FAAD_LIBS = @FAAD_LIBS@
 FFLAGS = @FFLAGS@
 FGREP = @FGREP@
@@ -369,8 +371,9 @@
 GIO_LIBS = @GIO_LIBS@
 GIO_UNIX_CFLAGS = @GIO_UNIX_CFLAGS@
 GIO_UNIX_LIBS = @GIO_UNIX_LIBS@
+GLES2_CFLAGS = @GLES2_CFLAGS@
+GLES2_LIBS = @GLES2_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
-GLIB_COMPILE_SCHEMAS = @GLIB_COMPILE_SCHEMAS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
@@ -387,16 +390,17 @@
 GMODULE_NO_EXPORT_LIBS = @GMODULE_NO_EXPORT_LIBS@
 GMSGFMT = @GMSGFMT@
 GMSGFMT_015 = @GMSGFMT_015@
+GNUSTL_CFLAGS = @GNUSTL_CFLAGS@
+GNUSTL_LIBS = @GNUSTL_LIBS@
 GRAPHENE_CFLAGS = @GRAPHENE_CFLAGS@
 GRAPHENE_LIBS = @GRAPHENE_LIBS@
 GREP = @GREP@
-GSETTINGS_CFLAGS = @GSETTINGS_CFLAGS@
-GSETTINGS_DISABLE_SCHEMAS_COMPILE = @GSETTINGS_DISABLE_SCHEMAS_COMPILE@
-GSETTINGS_LIBS = @GSETTINGS_LIBS@
 GSM_LIBS = @GSM_LIBS@
 GSTPB_PLUGINS_DIR = @GSTPB_PLUGINS_DIR@
 GSTPB_PREFIX = @GSTPB_PREFIX@
 GST_AGE = @GST_AGE@
+GST_ALLOCATORS_CFLAGS = @GST_ALLOCATORS_CFLAGS@
+GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
 GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
 GST_API_VERSION = @GST_API_VERSION@
 GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
@@ -422,6 +426,8 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PBUTILS_CFLAGS = @GST_PBUTILS_CFLAGS@
+GST_PBUTILS_LIBS = @GST_PBUTILS_LIBS@
 GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BAD_CFLAGS = @GST_PLUGINS_BAD_CFLAGS@
@@ -447,6 +453,8 @@
 GST_PREFIX = @GST_PREFIX@
 GST_REVISION = @GST_REVISION@
 GST_TOOLS_DIR = @GST_TOOLS_DIR@
+GST_VIDEO_CFLAGS = @GST_VIDEO_CFLAGS@
+GST_VIDEO_LIBS = @GST_VIDEO_LIBS@
 GTK3_CFLAGS = @GTK3_CFLAGS@
 GTK3_GL_CFLAGS = @GTK3_GL_CFLAGS@
 GTK3_GL_LIBS = @GTK3_GL_LIBS@
@@ -548,6 +556,7 @@
 LTLIBICONV = @LTLIBICONV@
 LTLIBINTL = @LTLIBINTL@
 LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
 MANIFEST_TOOL = @MANIFEST_TOOL@
@@ -561,8 +570,6 @@
 MODPLUG_LIBS = @MODPLUG_LIBS@
 MPEG2ENC_CFLAGS = @MPEG2ENC_CFLAGS@
 MPEG2ENC_LIBS = @MPEG2ENC_LIBS@
-MPG123_CFLAGS = @MPG123_CFLAGS@
-MPG123_LIBS = @MPG123_LIBS@
 MPLEX_CFLAGS = @MPLEX_CFLAGS@
 MPLEX_LDFLAGS = @MPLEX_LDFLAGS@
 MPLEX_LIBS = @MPLEX_LIBS@
@@ -578,6 +585,8 @@
 NETTLE_LIBS = @NETTLE_LIBS@
 NM = @NM@
 NMEDIT = @NMEDIT@
+NVENCODE_CFLAGS = @NVENCODE_CFLAGS@
+NVENCODE_LIBS = @NVENCODE_LIBS@
 OBJC = @OBJC@
 OBJCDEPMODE = @OBJCDEPMODE@
 OBJCFLAGS = @OBJCFLAGS@
@@ -635,16 +644,18 @@
 PYTHON_PLATFORM = @PYTHON_PLATFORM@
 PYTHON_PREFIX = @PYTHON_PREFIX@
 PYTHON_VERSION = @PYTHON_VERSION@
+QT_ANDROID_CFLAGS = @QT_ANDROID_CFLAGS@
+QT_ANDROID_LIBS = @QT_ANDROID_LIBS@
 QT_CFLAGS = @QT_CFLAGS@
 QT_LIBS = @QT_LIBS@
+QT_MAC_CFLAGS = @QT_MAC_CFLAGS@
+QT_MAC_LIBS = @QT_MAC_LIBS@
 QT_WAYLAND_CFLAGS = @QT_WAYLAND_CFLAGS@
 QT_WAYLAND_LIBS = @QT_WAYLAND_LIBS@
 QT_X11_CFLAGS = @QT_X11_CFLAGS@
 QT_X11_LIBS = @QT_X11_LIBS@
 RANLIB = @RANLIB@
 RCC = @RCC@
-RSVG_2_36_2_CFLAGS = @RSVG_2_36_2_CFLAGS@
-RSVG_2_36_2_LIBS = @RSVG_2_36_2_LIBS@
 RSVG_CFLAGS = @RSVG_CFLAGS@
 RSVG_LIBS = @RSVG_LIBS@
 RTMP_CFLAGS = @RTMP_CFLAGS@
@@ -696,6 +707,7 @@
 VOAACENC_LIBS = @VOAACENC_LIBS@
 VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
 VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VULKAN_LIBS = @VULKAN_LIBS@
 WARNING_CFLAGS = @WARNING_CFLAGS@
 WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
 WARNING_OBJCFLAGS = @WARNING_OBJCFLAGS@
@@ -706,6 +718,7 @@
 WAYLAND_LIBS = @WAYLAND_LIBS@
 WEBP_CFLAGS = @WEBP_CFLAGS@
 WEBP_LIBS = @WEBP_LIBS@
+WGET = @WGET@
 WILDMIDI_CFLAGS = @WILDMIDI_CFLAGS@
 WILDMIDI_LIBS = @WILDMIDI_LIBS@
 WINKS_LIBS = @WINKS_LIBS@
@@ -715,6 +728,8 @@
 X11_LIBS = @X11_LIBS@
 X265_CFLAGS = @X265_CFLAGS@
 X265_LIBS = @X265_LIBS@
+XCB_CFLAGS = @XCB_CFLAGS@
+XCB_LIBS = @XCB_LIBS@
 XCOMPOSITE_CFLAGS = @XCOMPOSITE_CFLAGS@
 XCOMPOSITE_LIBS = @XCOMPOSITE_LIBS@
 XGETTEXT = @XGETTEXT@
@@ -752,7 +767,6 @@
 docdir = @docdir@
 dvidir = @dvidir@
 exec_prefix = @exec_prefix@
-gsettingsschemadir = @gsettingsschemadir@
 host = @host@
 host_alias = @host_alias@
 host_cpu = @host_cpu@
diff --git a/gst/compositor/compositor.c b/gst/compositor/compositor.c
index d015d85..c5b1a9a 100644
--- a/gst/compositor/compositor.c
+++ b/gst/compositor/compositor.c
@@ -216,9 +216,9 @@
 
 static void
 _mixer_pad_get_output_size (GstCompositor * comp,
-    GstCompositorPad * comp_pad, gint * width, gint * height)
+    GstCompositorPad * comp_pad, gint out_par_n, gint out_par_d, gint * width,
+    gint * height)
 {
-  GstVideoAggregator *vagg = GST_VIDEO_AGGREGATOR (comp);
   GstVideoAggregatorPad *vagg_pad = GST_VIDEO_AGGREGATOR_PAD (comp_pad);
   gint pad_width, pad_height;
   guint dar_n, dar_d;
@@ -241,13 +241,10 @@
 
   gst_video_calculate_display_ratio (&dar_n, &dar_d, pad_width, pad_height,
       GST_VIDEO_INFO_PAR_N (&vagg_pad->info),
-      GST_VIDEO_INFO_PAR_D (&vagg_pad->info),
-      GST_VIDEO_INFO_PAR_N (&vagg->info), GST_VIDEO_INFO_PAR_D (&vagg->info)
-      );
+      GST_VIDEO_INFO_PAR_D (&vagg_pad->info), out_par_n, out_par_d);
   GST_LOG_OBJECT (comp_pad, "scaling %ux%u by %u/%u (%u/%u / %u/%u)", pad_width,
       pad_height, dar_n, dar_d, GST_VIDEO_INFO_PAR_N (&vagg_pad->info),
-      GST_VIDEO_INFO_PAR_D (&vagg_pad->info),
-      GST_VIDEO_INFO_PAR_N (&vagg->info), GST_VIDEO_INFO_PAR_D (&vagg->info));
+      GST_VIDEO_INFO_PAR_D (&vagg_pad->info), out_par_n, out_par_d);
 
   if (pad_height % dar_n == 0) {
     pad_width = gst_util_uint64_scale_int (pad_height, dar_n, dar_d);
@@ -292,7 +289,8 @@
       gst_video_colorimetry_to_string (&(wanted_info->colorimetry));
   best_chroma = gst_video_chroma_to_string (wanted_info->chroma_site);
 
-  _mixer_pad_get_output_size (comp, cpad, &width, &height);
+  _mixer_pad_get_output_size (comp, cpad, GST_VIDEO_INFO_PAR_N (&vagg->info),
+      GST_VIDEO_INFO_PAR_D (&vagg->info), &width, &height);
 
   if (GST_VIDEO_INFO_FORMAT (wanted_info) !=
       GST_VIDEO_INFO_FORMAT (current_info)
@@ -310,8 +308,8 @@
         width, height);
     tmp_info.chroma_site = wanted_info->chroma_site;
     tmp_info.colorimetry = wanted_info->colorimetry;
-    tmp_info.par_n = vagg->info.par_n;
-    tmp_info.par_d = vagg->info.par_d;
+    tmp_info.par_n = wanted_info->par_n;
+    tmp_info.par_d = wanted_info->par_d;
     tmp_info.fps_n = current_info->fps_n;
     tmp_info.fps_d = current_info->fps_d;
     tmp_info.flags = current_info->flags;
@@ -403,7 +401,8 @@
    *     width/height. See ->set_info()
    * */
 
-  _mixer_pad_get_output_size (comp, cpad, &width, &height);
+  _mixer_pad_get_output_size (comp, cpad, GST_VIDEO_INFO_PAR_N (&vagg->info),
+      GST_VIDEO_INFO_PAR_D (&vagg->info), &width, &height);
 
   /* The only thing that can change here is the width
    * and height, otherwise set_info would've been called */
@@ -498,7 +497,8 @@
     GstCompositorPad *cpad2 = GST_COMPOSITOR_PAD (pad2);
     gint pad2_width, pad2_height;
 
-    _mixer_pad_get_output_size (comp, cpad2, &pad2_width, &pad2_height);
+    _mixer_pad_get_output_size (comp, cpad2, GST_VIDEO_INFO_PAR_N (&vagg->info),
+        GST_VIDEO_INFO_PAR_D (&vagg->info), &pad2_width, &pad2_height);
 
     /* We don't need to clamp the coords of the second rectangle */
     frame2_rect.x = cpad2->xpos;
@@ -883,17 +883,26 @@
 }
 
 static GstCaps *
-_update_caps (GstVideoAggregator * vagg, GstCaps * caps)
+_fixate_caps (GstVideoAggregator * vagg, GstCaps * caps)
 {
   GList *l;
   gint best_width = -1, best_height = -1;
-  GstVideoInfo info;
+  gint best_fps_n = -1, best_fps_d = -1;
+  gint par_n, par_d;
+  gdouble best_fps = 0.;
   GstCaps *ret = NULL;
+  GstStructure *s;
 
-  gst_video_info_from_caps (&info, caps);
+  ret = gst_caps_make_writable (caps);
 
-  /* FIXME: this doesn't work for non 1/1 output par's as we don't have that
-   * information available at this time */
+  /* we need this to calculate how large to make the output frame */
+  s = gst_caps_get_structure (ret, 0);
+  if (gst_structure_has_field (s, "pixel-aspect-ratio")) {
+    gst_structure_fixate_field_nearest_fraction (s, "pixel-aspect-ratio", 1, 1);
+    gst_structure_get_fraction (s, "pixel-aspect-ratio", &par_n, &par_d);
+  } else {
+    par_n = par_d = 1;
+  }
 
   GST_OBJECT_LOCK (vagg);
   for (l = GST_ELEMENT (vagg)->sinkpads; l; l = l->next) {
@@ -901,9 +910,13 @@
     GstCompositorPad *compositor_pad = GST_COMPOSITOR_PAD (vaggpad);
     gint this_width, this_height;
     gint width, height;
+    gint fps_n, fps_d;
+    gdouble cur_fps;
 
-    _mixer_pad_get_output_size (GST_COMPOSITOR (vagg), compositor_pad, &width,
-        &height);
+    fps_n = GST_VIDEO_INFO_FPS_N (&vaggpad->info);
+    fps_d = GST_VIDEO_INFO_FPS_D (&vaggpad->info);
+    _mixer_pad_get_output_size (GST_COMPOSITOR (vagg), compositor_pad, par_n,
+        par_d, &width, &height);
 
     if (width == 0 || height == 0)
       continue;
@@ -915,17 +928,40 @@
       best_width = this_width;
     if (best_height < this_height)
       best_height = this_height;
+
+    if (fps_d == 0)
+      cur_fps = 0.0;
+    else
+      gst_util_fraction_to_double (fps_n, fps_d, &cur_fps);
+
+    if (best_fps < cur_fps) {
+      best_fps = cur_fps;
+      best_fps_n = fps_n;
+      best_fps_d = fps_d;
+    }
   }
   GST_OBJECT_UNLOCK (vagg);
 
-  if (best_width > 0 && best_height > 0) {
-    info.width = best_width;
-    info.height = best_height;
-    if (set_functions (GST_COMPOSITOR (vagg), &info))
-      ret = gst_video_info_to_caps (&info);
+  if (best_fps_n <= 0 || best_fps_d <= 0 || best_fps == 0.0) {
+    best_fps_n = 25;
+    best_fps_d = 1;
+    best_fps = 25.0;
+  }
 
-    gst_caps_set_simple (ret, "pixel-aspect-ratio", GST_TYPE_FRACTION_RANGE,
-        1, G_MAXINT, G_MAXINT, 1, NULL);
+  gst_structure_fixate_field_nearest_int (s, "width", best_width);
+  gst_structure_fixate_field_nearest_int (s, "height", best_height);
+  gst_structure_fixate_field_nearest_fraction (s, "framerate", best_fps_n,
+      best_fps_d);
+  ret = gst_caps_fixate (ret);
+
+  if (best_width > 0 && best_height > 0) {
+    GstVideoInfo v_info;
+
+    gst_video_info_from_caps (&v_info, ret);
+    if (!set_functions (GST_COMPOSITOR (vagg), &v_info)) {
+      GST_ERROR_OBJECT (vagg, "Failed to setup vfuncs");
+      return NULL;
+    }
   }
 
   return ret;
@@ -1059,7 +1095,7 @@
 
   agg_class->sinkpads_type = GST_TYPE_COMPOSITOR_PAD;
   agg_class->sink_query = _sink_query;
-  videoaggregator_class->update_caps = _update_caps;
+  videoaggregator_class->fixate_caps = _fixate_caps;
   videoaggregator_class->aggregate_frames = gst_compositor_aggregate_frames;
 
   g_object_class_install_property (gobject_class, PROP_BACKGROUND,
diff --git a/gst/dataurisrc/Makefile.in b/gst/dataurisrc/Makefile.in
index c881d29..60c0940 100644
--- a/gst/dataurisrc/Makefile.in
+++ b/gst/dataurisrc/Makefile.in
@@ -115,16 +115,15 @@
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
 	$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
-	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gsettings.m4 \
-	$(top_srcdir)/m4/gst-fionread.m4 $(top_srcdir)/m4/gst-sdl.m4 \
-	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
-	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
-	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libgcrypt.m4 \
-	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
-	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
-	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
-	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
-	$(top_srcdir)/configure.ac
+	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gst-fionread.m4 \
+	$(top_srcdir)/m4/gst-sdl.m4 $(top_srcdir)/m4/iconv.m4 \
+	$(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \
+	$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
+	$(top_srcdir)/m4/libgcrypt.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
+	$(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
@@ -271,6 +270,8 @@
 CLUTTER_X11_LIBS = @CLUTTER_X11_LIBS@
 CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
+CUDA_CFLAGS = @CUDA_CFLAGS@
+CUDA_LIBS = @CUDA_LIBS@
 CURL_CFLAGS = @CURL_CFLAGS@
 CURL_LIBS = @CURL_LIBS@
 CXX = @CXX@
@@ -308,6 +309,8 @@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
+EGL_CFLAGS = @EGL_CFLAGS@
+EGL_LIBS = @EGL_LIBS@
 EGREP = @EGREP@
 ERROR_CFLAGS = @ERROR_CFLAGS@
 ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
@@ -316,7 +319,6 @@
 EXIF_CFLAGS = @EXIF_CFLAGS@
 EXIF_LIBS = @EXIF_LIBS@
 FAAC_LIBS = @FAAC_LIBS@
-FAAD_IS_NEAAC = @FAAD_IS_NEAAC@
 FAAD_LIBS = @FAAD_LIBS@
 FFLAGS = @FFLAGS@
 FGREP = @FGREP@
@@ -335,8 +337,9 @@
 GIO_LIBS = @GIO_LIBS@
 GIO_UNIX_CFLAGS = @GIO_UNIX_CFLAGS@
 GIO_UNIX_LIBS = @GIO_UNIX_LIBS@
+GLES2_CFLAGS = @GLES2_CFLAGS@
+GLES2_LIBS = @GLES2_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
-GLIB_COMPILE_SCHEMAS = @GLIB_COMPILE_SCHEMAS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
@@ -353,16 +356,17 @@
 GMODULE_NO_EXPORT_LIBS = @GMODULE_NO_EXPORT_LIBS@
 GMSGFMT = @GMSGFMT@
 GMSGFMT_015 = @GMSGFMT_015@
+GNUSTL_CFLAGS = @GNUSTL_CFLAGS@
+GNUSTL_LIBS = @GNUSTL_LIBS@
 GRAPHENE_CFLAGS = @GRAPHENE_CFLAGS@
 GRAPHENE_LIBS = @GRAPHENE_LIBS@
 GREP = @GREP@
-GSETTINGS_CFLAGS = @GSETTINGS_CFLAGS@
-GSETTINGS_DISABLE_SCHEMAS_COMPILE = @GSETTINGS_DISABLE_SCHEMAS_COMPILE@
-GSETTINGS_LIBS = @GSETTINGS_LIBS@
 GSM_LIBS = @GSM_LIBS@
 GSTPB_PLUGINS_DIR = @GSTPB_PLUGINS_DIR@
 GSTPB_PREFIX = @GSTPB_PREFIX@
 GST_AGE = @GST_AGE@
+GST_ALLOCATORS_CFLAGS = @GST_ALLOCATORS_CFLAGS@
+GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
 GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
 GST_API_VERSION = @GST_API_VERSION@
 GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
@@ -388,6 +392,8 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PBUTILS_CFLAGS = @GST_PBUTILS_CFLAGS@
+GST_PBUTILS_LIBS = @GST_PBUTILS_LIBS@
 GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BAD_CFLAGS = @GST_PLUGINS_BAD_CFLAGS@
@@ -413,6 +419,8 @@
 GST_PREFIX = @GST_PREFIX@
 GST_REVISION = @GST_REVISION@
 GST_TOOLS_DIR = @GST_TOOLS_DIR@
+GST_VIDEO_CFLAGS = @GST_VIDEO_CFLAGS@
+GST_VIDEO_LIBS = @GST_VIDEO_LIBS@
 GTK3_CFLAGS = @GTK3_CFLAGS@
 GTK3_GL_CFLAGS = @GTK3_GL_CFLAGS@
 GTK3_GL_LIBS = @GTK3_GL_LIBS@
@@ -514,6 +522,7 @@
 LTLIBICONV = @LTLIBICONV@
 LTLIBINTL = @LTLIBINTL@
 LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
 MANIFEST_TOOL = @MANIFEST_TOOL@
@@ -527,8 +536,6 @@
 MODPLUG_LIBS = @MODPLUG_LIBS@
 MPEG2ENC_CFLAGS = @MPEG2ENC_CFLAGS@
 MPEG2ENC_LIBS = @MPEG2ENC_LIBS@
-MPG123_CFLAGS = @MPG123_CFLAGS@
-MPG123_LIBS = @MPG123_LIBS@
 MPLEX_CFLAGS = @MPLEX_CFLAGS@
 MPLEX_LDFLAGS = @MPLEX_LDFLAGS@
 MPLEX_LIBS = @MPLEX_LIBS@
@@ -544,6 +551,8 @@
 NETTLE_LIBS = @NETTLE_LIBS@
 NM = @NM@
 NMEDIT = @NMEDIT@
+NVENCODE_CFLAGS = @NVENCODE_CFLAGS@
+NVENCODE_LIBS = @NVENCODE_LIBS@
 OBJC = @OBJC@
 OBJCDEPMODE = @OBJCDEPMODE@
 OBJCFLAGS = @OBJCFLAGS@
@@ -601,16 +610,18 @@
 PYTHON_PLATFORM = @PYTHON_PLATFORM@
 PYTHON_PREFIX = @PYTHON_PREFIX@
 PYTHON_VERSION = @PYTHON_VERSION@
+QT_ANDROID_CFLAGS = @QT_ANDROID_CFLAGS@
+QT_ANDROID_LIBS = @QT_ANDROID_LIBS@
 QT_CFLAGS = @QT_CFLAGS@
 QT_LIBS = @QT_LIBS@
+QT_MAC_CFLAGS = @QT_MAC_CFLAGS@
+QT_MAC_LIBS = @QT_MAC_LIBS@
 QT_WAYLAND_CFLAGS = @QT_WAYLAND_CFLAGS@
 QT_WAYLAND_LIBS = @QT_WAYLAND_LIBS@
 QT_X11_CFLAGS = @QT_X11_CFLAGS@
 QT_X11_LIBS = @QT_X11_LIBS@
 RANLIB = @RANLIB@
 RCC = @RCC@
-RSVG_2_36_2_CFLAGS = @RSVG_2_36_2_CFLAGS@
-RSVG_2_36_2_LIBS = @RSVG_2_36_2_LIBS@
 RSVG_CFLAGS = @RSVG_CFLAGS@
 RSVG_LIBS = @RSVG_LIBS@
 RTMP_CFLAGS = @RTMP_CFLAGS@
@@ -662,6 +673,7 @@
 VOAACENC_LIBS = @VOAACENC_LIBS@
 VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
 VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VULKAN_LIBS = @VULKAN_LIBS@
 WARNING_CFLAGS = @WARNING_CFLAGS@
 WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
 WARNING_OBJCFLAGS = @WARNING_OBJCFLAGS@
@@ -672,6 +684,7 @@
 WAYLAND_LIBS = @WAYLAND_LIBS@
 WEBP_CFLAGS = @WEBP_CFLAGS@
 WEBP_LIBS = @WEBP_LIBS@
+WGET = @WGET@
 WILDMIDI_CFLAGS = @WILDMIDI_CFLAGS@
 WILDMIDI_LIBS = @WILDMIDI_LIBS@
 WINKS_LIBS = @WINKS_LIBS@
@@ -681,6 +694,8 @@
 X11_LIBS = @X11_LIBS@
 X265_CFLAGS = @X265_CFLAGS@
 X265_LIBS = @X265_LIBS@
+XCB_CFLAGS = @XCB_CFLAGS@
+XCB_LIBS = @XCB_LIBS@
 XCOMPOSITE_CFLAGS = @XCOMPOSITE_CFLAGS@
 XCOMPOSITE_LIBS = @XCOMPOSITE_LIBS@
 XGETTEXT = @XGETTEXT@
@@ -718,7 +733,6 @@
 docdir = @docdir@
 dvidir = @dvidir@
 exec_prefix = @exec_prefix@
-gsettingsschemadir = @gsettingsschemadir@
 host = @host@
 host_alias = @host_alias@
 host_cpu = @host_cpu@
diff --git a/gst/dataurisrc/gstdataurisrc.c b/gst/dataurisrc/gstdataurisrc.c
index 1fde36d..fe018b0 100644
--- a/gst/dataurisrc/gstdataurisrc.c
+++ b/gst/dataurisrc/gstdataurisrc.c
@@ -27,7 +27,7 @@
  * <refsect2>
  * <title>Example launch line</title>
  * |[
- * gst-launch-0.10 -v dataurisrc uri="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAfElEQVQ4je2MwQnAIAxFgziA4EnczIsO4MEROo/gzZWc4xdTbe1R6LGRR74heYS7iKElzfcMiRnt4hf8gk8EayB6luefue/HzlJfCA50XsNjYRxprZmenXNIKSGEsC+QUqK1hhgj521BzhnWWiilUGvdF5RS4L2HMQZCCJy8sHMm2TYdJAAAAABJRU5ErkJggg==" ! pngdec ! videoconvert ! freeze ! videoconvert ! autovideosink
+ * gst-launch-1.0 -v dataurisrc uri="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAfElEQVQ4je2MwQnAIAxFgziA4EnczIsO4MEROo/gzZWc4xdTbe1R6LGRR74heYS7iKElzfcMiRnt4hf8gk8EayB6luefue/HzlJfCA50XsNjYRxprZmenXNIKSGEsC+QUqK1hhgj521BzhnWWiilUGvdF5RS4L2HMQZCCJy8sHMm2TYdJAAAAABJRU5ErkJggg==" ! pngdec ! videoconvert ! imagefreeze ! videoconvert ! autovideosink
  * ]| This pipeline displays a small 16x16 PNG image from the data URI.
  * </refsect2>
  */
@@ -177,9 +177,8 @@
   GstCaps *caps;
 
   GST_OBJECT_LOCK (src);
-  if (gst_pad_has_current_caps (GST_BASE_SRC_PAD (basesrc)))
-    caps = gst_pad_get_current_caps (GST_BASE_SRC_PAD (basesrc));
-  else
+  caps = gst_pad_get_current_caps (GST_BASE_SRC_PAD (basesrc));
+  if (!caps)
     caps = gst_caps_new_any ();
   GST_OBJECT_UNLOCK (src);
 
diff --git a/gst/dccp/Makefile.in b/gst/dccp/Makefile.in
index ae90f1d..3b7b5f7 100644
--- a/gst/dccp/Makefile.in
+++ b/gst/dccp/Makefile.in
@@ -118,16 +118,15 @@
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
 	$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
-	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gsettings.m4 \
-	$(top_srcdir)/m4/gst-fionread.m4 $(top_srcdir)/m4/gst-sdl.m4 \
-	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
-	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
-	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libgcrypt.m4 \
-	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
-	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
-	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
-	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
-	$(top_srcdir)/configure.ac
+	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gst-fionread.m4 \
+	$(top_srcdir)/m4/gst-sdl.m4 $(top_srcdir)/m4/iconv.m4 \
+	$(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \
+	$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
+	$(top_srcdir)/m4/libgcrypt.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
+	$(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \
@@ -281,6 +280,8 @@
 CLUTTER_X11_LIBS = @CLUTTER_X11_LIBS@
 CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
+CUDA_CFLAGS = @CUDA_CFLAGS@
+CUDA_LIBS = @CUDA_LIBS@
 CURL_CFLAGS = @CURL_CFLAGS@
 CURL_LIBS = @CURL_LIBS@
 CXX = @CXX@
@@ -318,6 +319,8 @@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
+EGL_CFLAGS = @EGL_CFLAGS@
+EGL_LIBS = @EGL_LIBS@
 EGREP = @EGREP@
 ERROR_CFLAGS = @ERROR_CFLAGS@
 ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
@@ -326,7 +329,6 @@
 EXIF_CFLAGS = @EXIF_CFLAGS@
 EXIF_LIBS = @EXIF_LIBS@
 FAAC_LIBS = @FAAC_LIBS@
-FAAD_IS_NEAAC = @FAAD_IS_NEAAC@
 FAAD_LIBS = @FAAD_LIBS@
 FFLAGS = @FFLAGS@
 FGREP = @FGREP@
@@ -345,8 +347,9 @@
 GIO_LIBS = @GIO_LIBS@
 GIO_UNIX_CFLAGS = @GIO_UNIX_CFLAGS@
 GIO_UNIX_LIBS = @GIO_UNIX_LIBS@
+GLES2_CFLAGS = @GLES2_CFLAGS@
+GLES2_LIBS = @GLES2_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
-GLIB_COMPILE_SCHEMAS = @GLIB_COMPILE_SCHEMAS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
@@ -363,16 +366,17 @@
 GMODULE_NO_EXPORT_LIBS = @GMODULE_NO_EXPORT_LIBS@
 GMSGFMT = @GMSGFMT@
 GMSGFMT_015 = @GMSGFMT_015@
+GNUSTL_CFLAGS = @GNUSTL_CFLAGS@
+GNUSTL_LIBS = @GNUSTL_LIBS@
 GRAPHENE_CFLAGS = @GRAPHENE_CFLAGS@
 GRAPHENE_LIBS = @GRAPHENE_LIBS@
 GREP = @GREP@
-GSETTINGS_CFLAGS = @GSETTINGS_CFLAGS@
-GSETTINGS_DISABLE_SCHEMAS_COMPILE = @GSETTINGS_DISABLE_SCHEMAS_COMPILE@
-GSETTINGS_LIBS = @GSETTINGS_LIBS@
 GSM_LIBS = @GSM_LIBS@
 GSTPB_PLUGINS_DIR = @GSTPB_PLUGINS_DIR@
 GSTPB_PREFIX = @GSTPB_PREFIX@
 GST_AGE = @GST_AGE@
+GST_ALLOCATORS_CFLAGS = @GST_ALLOCATORS_CFLAGS@
+GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
 GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
 GST_API_VERSION = @GST_API_VERSION@
 GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
@@ -398,6 +402,8 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PBUTILS_CFLAGS = @GST_PBUTILS_CFLAGS@
+GST_PBUTILS_LIBS = @GST_PBUTILS_LIBS@
 GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BAD_CFLAGS = @GST_PLUGINS_BAD_CFLAGS@
@@ -423,6 +429,8 @@
 GST_PREFIX = @GST_PREFIX@
 GST_REVISION = @GST_REVISION@
 GST_TOOLS_DIR = @GST_TOOLS_DIR@
+GST_VIDEO_CFLAGS = @GST_VIDEO_CFLAGS@
+GST_VIDEO_LIBS = @GST_VIDEO_LIBS@
 GTK3_CFLAGS = @GTK3_CFLAGS@
 GTK3_GL_CFLAGS = @GTK3_GL_CFLAGS@
 GTK3_GL_LIBS = @GTK3_GL_LIBS@
@@ -524,6 +532,7 @@
 LTLIBICONV = @LTLIBICONV@
 LTLIBINTL = @LTLIBINTL@
 LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
 MANIFEST_TOOL = @MANIFEST_TOOL@
@@ -537,8 +546,6 @@
 MODPLUG_LIBS = @MODPLUG_LIBS@
 MPEG2ENC_CFLAGS = @MPEG2ENC_CFLAGS@
 MPEG2ENC_LIBS = @MPEG2ENC_LIBS@
-MPG123_CFLAGS = @MPG123_CFLAGS@
-MPG123_LIBS = @MPG123_LIBS@
 MPLEX_CFLAGS = @MPLEX_CFLAGS@
 MPLEX_LDFLAGS = @MPLEX_LDFLAGS@
 MPLEX_LIBS = @MPLEX_LIBS@
@@ -554,6 +561,8 @@
 NETTLE_LIBS = @NETTLE_LIBS@
 NM = @NM@
 NMEDIT = @NMEDIT@
+NVENCODE_CFLAGS = @NVENCODE_CFLAGS@
+NVENCODE_LIBS = @NVENCODE_LIBS@
 OBJC = @OBJC@
 OBJCDEPMODE = @OBJCDEPMODE@
 OBJCFLAGS = @OBJCFLAGS@
@@ -611,16 +620,18 @@
 PYTHON_PLATFORM = @PYTHON_PLATFORM@
 PYTHON_PREFIX = @PYTHON_PREFIX@
 PYTHON_VERSION = @PYTHON_VERSION@
+QT_ANDROID_CFLAGS = @QT_ANDROID_CFLAGS@
+QT_ANDROID_LIBS = @QT_ANDROID_LIBS@
 QT_CFLAGS = @QT_CFLAGS@
 QT_LIBS = @QT_LIBS@
+QT_MAC_CFLAGS = @QT_MAC_CFLAGS@
+QT_MAC_LIBS = @QT_MAC_LIBS@
 QT_WAYLAND_CFLAGS = @QT_WAYLAND_CFLAGS@
 QT_WAYLAND_LIBS = @QT_WAYLAND_LIBS@
 QT_X11_CFLAGS = @QT_X11_CFLAGS@
 QT_X11_LIBS = @QT_X11_LIBS@
 RANLIB = @RANLIB@
 RCC = @RCC@
-RSVG_2_36_2_CFLAGS = @RSVG_2_36_2_CFLAGS@
-RSVG_2_36_2_LIBS = @RSVG_2_36_2_LIBS@
 RSVG_CFLAGS = @RSVG_CFLAGS@
 RSVG_LIBS = @RSVG_LIBS@
 RTMP_CFLAGS = @RTMP_CFLAGS@
@@ -672,6 +683,7 @@
 VOAACENC_LIBS = @VOAACENC_LIBS@
 VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
 VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VULKAN_LIBS = @VULKAN_LIBS@
 WARNING_CFLAGS = @WARNING_CFLAGS@
 WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
 WARNING_OBJCFLAGS = @WARNING_OBJCFLAGS@
@@ -682,6 +694,7 @@
 WAYLAND_LIBS = @WAYLAND_LIBS@
 WEBP_CFLAGS = @WEBP_CFLAGS@
 WEBP_LIBS = @WEBP_LIBS@
+WGET = @WGET@
 WILDMIDI_CFLAGS = @WILDMIDI_CFLAGS@
 WILDMIDI_LIBS = @WILDMIDI_LIBS@
 WINKS_LIBS = @WINKS_LIBS@
@@ -691,6 +704,8 @@
 X11_LIBS = @X11_LIBS@
 X265_CFLAGS = @X265_CFLAGS@
 X265_LIBS = @X265_LIBS@
+XCB_CFLAGS = @XCB_CFLAGS@
+XCB_LIBS = @XCB_LIBS@
 XCOMPOSITE_CFLAGS = @XCOMPOSITE_CFLAGS@
 XCOMPOSITE_LIBS = @XCOMPOSITE_LIBS@
 XGETTEXT = @XGETTEXT@
@@ -728,7 +743,6 @@
 docdir = @docdir@
 dvidir = @dvidir@
 exec_prefix = @exec_prefix@
-gsettingsschemadir = @gsettingsschemadir@
 host = @host@
 host_alias = @host_alias@
 host_cpu = @host_cpu@
diff --git a/gst/debugutils/Makefile.am b/gst/debugutils/Makefile.am
index aff78a2..783a9ce 100644
--- a/gst/debugutils/Makefile.am
+++ b/gst/debugutils/Makefile.am
@@ -1,17 +1,3 @@
-glib_gen_prefix = __gst_debugutils
-glib_gen_basename = debugutils
-
-include $(top_srcdir)/common/gst-glib-gen.mak
-
-built_sources = debugutils-marshal.c
-built_headers = debugutils-marshal.h
-
-BUILT_SOURCES = $(built_sources) $(built_headers)
-
-CLEANFILES = $(BUILT_SOURCES)
-
-EXTRA_DIST = debugutils-marshal.list
-
 plugin_LTLIBRARIES = libgstdebugutilsbad.la
 
 libgstdebugutilsbad_la_SOURCES = \
@@ -24,7 +10,6 @@
 	gstwatchdog.c \
 	gsterrorignore.c
 
-nodist_libgstdebugutilsbad_la_SOURCES = $(BUILT_SOURCES)
 libgstdebugutilsbad_la_CFLAGS = $(GST_CFLAGS) $(GST_BASE_CFLAGS) $(GST_PLUGINS_BASE_CFLAGS)
 libgstdebugutilsbad_la_LIBADD = $(GST_BASE_LIBS) $(GST_PLUGINS_BASE_LIBS) \
 	-lgstvideo-$(GST_API_VERSION) \
diff --git a/gst/debugutils/Makefile.in b/gst/debugutils/Makefile.in
index 48fa5de..e49636e 100644
--- a/gst/debugutils/Makefile.in
+++ b/gst/debugutils/Makefile.in
@@ -14,14 +14,6 @@
 
 @SET_MAKE@
 
-# these are the variables your Makefile.am should set
-# the example is based on the colorbalance interface
-
-#glib_enum_headers=$(colorbalance_headers)
-#glib_enum_define=GST_COLOR_BALANCE
-#glib_gen_prefix=gst_color_balance
-#glib_gen_basename=colorbalance
-
 
 VPATH = @srcdir@
 am__is_gnu_make = { \
@@ -124,16 +116,15 @@
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
 	$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
-	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gsettings.m4 \
-	$(top_srcdir)/m4/gst-fionread.m4 $(top_srcdir)/m4/gst-sdl.m4 \
-	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
-	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
-	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libgcrypt.m4 \
-	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
-	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
-	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
-	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
-	$(top_srcdir)/configure.ac
+	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gst-fionread.m4 \
+	$(top_srcdir)/m4/gst-sdl.m4 $(top_srcdir)/m4/iconv.m4 \
+	$(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \
+	$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
+	$(top_srcdir)/m4/libgcrypt.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
+	$(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \
@@ -183,12 +174,7 @@
 	libgstdebugutilsbad_la-gstcompare.lo \
 	libgstdebugutilsbad_la-gstwatchdog.lo \
 	libgstdebugutilsbad_la-gsterrorignore.lo
-am__objects_1 = libgstdebugutilsbad_la-debugutils-marshal.lo
-am__objects_2 =
-am__objects_3 = $(am__objects_1) $(am__objects_2)
-nodist_libgstdebugutilsbad_la_OBJECTS = $(am__objects_3)
-libgstdebugutilsbad_la_OBJECTS = $(am_libgstdebugutilsbad_la_OBJECTS) \
-	$(nodist_libgstdebugutilsbad_la_OBJECTS)
+libgstdebugutilsbad_la_OBJECTS = $(am_libgstdebugutilsbad_la_OBJECTS)
 AM_V_lt = $(am__v_lt_@AM_V@)
 am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
 am__v_lt_0 = --silent
@@ -231,8 +217,7 @@
 am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@)
 am__v_CCLD_0 = @echo "  CCLD    " $@;
 am__v_CCLD_1 = 
-SOURCES = $(libgstdebugutilsbad_la_SOURCES) \
-	$(nodist_libgstdebugutilsbad_la_SOURCES)
+SOURCES = $(libgstdebugutilsbad_la_SOURCES)
 DIST_SOURCES = $(libgstdebugutilsbad_la_SOURCES)
 am__can_run_installinfo = \
   case $$AM_UPDATE_INFO_DIR in \
@@ -259,8 +244,7 @@
   done | $(am__uniquify_input)`
 ETAGS = etags
 CTAGS = ctags
-am__DIST_COMMON = $(srcdir)/Makefile.in \
-	$(top_srcdir)/common/gst-glib-gen.mak $(top_srcdir)/depcomp
+am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp
 DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
 ACLOCAL = @ACLOCAL@
 ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@
@@ -297,6 +281,8 @@
 CLUTTER_X11_LIBS = @CLUTTER_X11_LIBS@
 CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
+CUDA_CFLAGS = @CUDA_CFLAGS@
+CUDA_LIBS = @CUDA_LIBS@
 CURL_CFLAGS = @CURL_CFLAGS@
 CURL_LIBS = @CURL_LIBS@
 CXX = @CXX@
@@ -334,6 +320,8 @@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
+EGL_CFLAGS = @EGL_CFLAGS@
+EGL_LIBS = @EGL_LIBS@
 EGREP = @EGREP@
 ERROR_CFLAGS = @ERROR_CFLAGS@
 ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
@@ -342,7 +330,6 @@
 EXIF_CFLAGS = @EXIF_CFLAGS@
 EXIF_LIBS = @EXIF_LIBS@
 FAAC_LIBS = @FAAC_LIBS@
-FAAD_IS_NEAAC = @FAAD_IS_NEAAC@
 FAAD_LIBS = @FAAD_LIBS@
 FFLAGS = @FFLAGS@
 FGREP = @FGREP@
@@ -361,8 +348,9 @@
 GIO_LIBS = @GIO_LIBS@
 GIO_UNIX_CFLAGS = @GIO_UNIX_CFLAGS@
 GIO_UNIX_LIBS = @GIO_UNIX_LIBS@
+GLES2_CFLAGS = @GLES2_CFLAGS@
+GLES2_LIBS = @GLES2_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
-GLIB_COMPILE_SCHEMAS = @GLIB_COMPILE_SCHEMAS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
@@ -379,16 +367,17 @@
 GMODULE_NO_EXPORT_LIBS = @GMODULE_NO_EXPORT_LIBS@
 GMSGFMT = @GMSGFMT@
 GMSGFMT_015 = @GMSGFMT_015@
+GNUSTL_CFLAGS = @GNUSTL_CFLAGS@
+GNUSTL_LIBS = @GNUSTL_LIBS@
 GRAPHENE_CFLAGS = @GRAPHENE_CFLAGS@
 GRAPHENE_LIBS = @GRAPHENE_LIBS@
 GREP = @GREP@
-GSETTINGS_CFLAGS = @GSETTINGS_CFLAGS@
-GSETTINGS_DISABLE_SCHEMAS_COMPILE = @GSETTINGS_DISABLE_SCHEMAS_COMPILE@
-GSETTINGS_LIBS = @GSETTINGS_LIBS@
 GSM_LIBS = @GSM_LIBS@
 GSTPB_PLUGINS_DIR = @GSTPB_PLUGINS_DIR@
 GSTPB_PREFIX = @GSTPB_PREFIX@
 GST_AGE = @GST_AGE@
+GST_ALLOCATORS_CFLAGS = @GST_ALLOCATORS_CFLAGS@
+GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
 GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
 GST_API_VERSION = @GST_API_VERSION@
 GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
@@ -414,6 +403,8 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PBUTILS_CFLAGS = @GST_PBUTILS_CFLAGS@
+GST_PBUTILS_LIBS = @GST_PBUTILS_LIBS@
 GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BAD_CFLAGS = @GST_PLUGINS_BAD_CFLAGS@
@@ -439,6 +430,8 @@
 GST_PREFIX = @GST_PREFIX@
 GST_REVISION = @GST_REVISION@
 GST_TOOLS_DIR = @GST_TOOLS_DIR@
+GST_VIDEO_CFLAGS = @GST_VIDEO_CFLAGS@
+GST_VIDEO_LIBS = @GST_VIDEO_LIBS@
 GTK3_CFLAGS = @GTK3_CFLAGS@
 GTK3_GL_CFLAGS = @GTK3_GL_CFLAGS@
 GTK3_GL_LIBS = @GTK3_GL_LIBS@
@@ -540,6 +533,7 @@
 LTLIBICONV = @LTLIBICONV@
 LTLIBINTL = @LTLIBINTL@
 LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
 MANIFEST_TOOL = @MANIFEST_TOOL@
@@ -553,8 +547,6 @@
 MODPLUG_LIBS = @MODPLUG_LIBS@
 MPEG2ENC_CFLAGS = @MPEG2ENC_CFLAGS@
 MPEG2ENC_LIBS = @MPEG2ENC_LIBS@
-MPG123_CFLAGS = @MPG123_CFLAGS@
-MPG123_LIBS = @MPG123_LIBS@
 MPLEX_CFLAGS = @MPLEX_CFLAGS@
 MPLEX_LDFLAGS = @MPLEX_LDFLAGS@
 MPLEX_LIBS = @MPLEX_LIBS@
@@ -570,6 +562,8 @@
 NETTLE_LIBS = @NETTLE_LIBS@
 NM = @NM@
 NMEDIT = @NMEDIT@
+NVENCODE_CFLAGS = @NVENCODE_CFLAGS@
+NVENCODE_LIBS = @NVENCODE_LIBS@
 OBJC = @OBJC@
 OBJCDEPMODE = @OBJCDEPMODE@
 OBJCFLAGS = @OBJCFLAGS@
@@ -627,16 +621,18 @@
 PYTHON_PLATFORM = @PYTHON_PLATFORM@
 PYTHON_PREFIX = @PYTHON_PREFIX@
 PYTHON_VERSION = @PYTHON_VERSION@
+QT_ANDROID_CFLAGS = @QT_ANDROID_CFLAGS@
+QT_ANDROID_LIBS = @QT_ANDROID_LIBS@
 QT_CFLAGS = @QT_CFLAGS@
 QT_LIBS = @QT_LIBS@
+QT_MAC_CFLAGS = @QT_MAC_CFLAGS@
+QT_MAC_LIBS = @QT_MAC_LIBS@
 QT_WAYLAND_CFLAGS = @QT_WAYLAND_CFLAGS@
 QT_WAYLAND_LIBS = @QT_WAYLAND_LIBS@
 QT_X11_CFLAGS = @QT_X11_CFLAGS@
 QT_X11_LIBS = @QT_X11_LIBS@
 RANLIB = @RANLIB@
 RCC = @RCC@
-RSVG_2_36_2_CFLAGS = @RSVG_2_36_2_CFLAGS@
-RSVG_2_36_2_LIBS = @RSVG_2_36_2_LIBS@
 RSVG_CFLAGS = @RSVG_CFLAGS@
 RSVG_LIBS = @RSVG_LIBS@
 RTMP_CFLAGS = @RTMP_CFLAGS@
@@ -688,6 +684,7 @@
 VOAACENC_LIBS = @VOAACENC_LIBS@
 VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
 VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VULKAN_LIBS = @VULKAN_LIBS@
 WARNING_CFLAGS = @WARNING_CFLAGS@
 WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
 WARNING_OBJCFLAGS = @WARNING_OBJCFLAGS@
@@ -698,6 +695,7 @@
 WAYLAND_LIBS = @WAYLAND_LIBS@
 WEBP_CFLAGS = @WEBP_CFLAGS@
 WEBP_LIBS = @WEBP_LIBS@
+WGET = @WGET@
 WILDMIDI_CFLAGS = @WILDMIDI_CFLAGS@
 WILDMIDI_LIBS = @WILDMIDI_LIBS@
 WINKS_LIBS = @WINKS_LIBS@
@@ -707,6 +705,8 @@
 X11_LIBS = @X11_LIBS@
 X265_CFLAGS = @X265_CFLAGS@
 X265_LIBS = @X265_LIBS@
+XCB_CFLAGS = @XCB_CFLAGS@
+XCB_LIBS = @XCB_LIBS@
 XCOMPOSITE_CFLAGS = @XCOMPOSITE_CFLAGS@
 XCOMPOSITE_LIBS = @XCOMPOSITE_LIBS@
 XGETTEXT = @XGETTEXT@
@@ -744,7 +744,6 @@
 docdir = @docdir@
 dvidir = @dvidir@
 exec_prefix = @exec_prefix@
-gsettingsschemadir = @gsettingsschemadir@
 host = @host@
 host_alias = @host_alias@
 host_cpu = @host_cpu@
@@ -784,14 +783,6 @@
 top_builddir = @top_builddir@
 top_srcdir = @top_srcdir@
 wayland_scanner = @wayland_scanner@
-glib_gen_prefix = __gst_debugutils
-glib_gen_basename = debugutils
-enum_headers = $(foreach h,$(glib_enum_headers),\n\#include \"$(h)\")
-built_sources = debugutils-marshal.c
-built_headers = debugutils-marshal.h
-BUILT_SOURCES = $(built_sources) $(built_headers)
-CLEANFILES = $(BUILT_SOURCES)
-EXTRA_DIST = debugutils-marshal.list
 plugin_LTLIBRARIES = libgstdebugutilsbad.la
 libgstdebugutilsbad_la_SOURCES = \
 	gstdebugspy.c \
@@ -803,7 +794,6 @@
 	gstwatchdog.c \
 	gsterrorignore.c
 
-nodist_libgstdebugutilsbad_la_SOURCES = $(BUILT_SOURCES)
 libgstdebugutilsbad_la_CFLAGS = $(GST_CFLAGS) $(GST_BASE_CFLAGS) $(GST_PLUGINS_BASE_CFLAGS)
 libgstdebugutilsbad_la_LIBADD = $(GST_BASE_LIBS) $(GST_PLUGINS_BASE_LIBS) \
 	-lgstvideo-$(GST_API_VERSION) \
@@ -819,12 +809,11 @@
 	gstwatchdog.h \
 	gsterrorignore.h
 
-all: $(BUILT_SOURCES)
-	$(MAKE) $(AM_MAKEFLAGS) all-am
+all: all-am
 
 .SUFFIXES:
 .SUFFIXES: .c .lo .o .obj
-$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(top_srcdir)/common/gst-glib-gen.mak $(am__configure_deps)
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
 	@for dep in $?; do \
 	  case '$(am__configure_deps)' in \
 	    *$$dep*) \
@@ -844,7 +833,6 @@
 	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
 	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
 	esac;
-$(top_srcdir)/common/gst-glib-gen.mak $(am__empty):
 
 $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
 	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
@@ -899,7 +887,6 @@
 distclean-compile:
 	-rm -f *.tab.c
 
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstdebugutilsbad_la-debugutils-marshal.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstdebugutilsbad_la-debugutilsbad.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstdebugutilsbad_la-fpsdisplaysink.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstdebugutilsbad_la-gstchecksumsink.Plo@am__quote@
@@ -989,13 +976,6 @@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstdebugutilsbad_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstdebugutilsbad_la_CFLAGS) $(CFLAGS) -c -o libgstdebugutilsbad_la-gsterrorignore.lo `test -f 'gsterrorignore.c' || echo '$(srcdir)/'`gsterrorignore.c
 
-libgstdebugutilsbad_la-debugutils-marshal.lo: debugutils-marshal.c
-@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstdebugutilsbad_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstdebugutilsbad_la_CFLAGS) $(CFLAGS) -MT libgstdebugutilsbad_la-debugutils-marshal.lo -MD -MP -MF $(DEPDIR)/libgstdebugutilsbad_la-debugutils-marshal.Tpo -c -o libgstdebugutilsbad_la-debugutils-marshal.lo `test -f 'debugutils-marshal.c' || echo '$(srcdir)/'`debugutils-marshal.c
-@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstdebugutilsbad_la-debugutils-marshal.Tpo $(DEPDIR)/libgstdebugutilsbad_la-debugutils-marshal.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='debugutils-marshal.c' object='libgstdebugutilsbad_la-debugutils-marshal.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstdebugutilsbad_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstdebugutilsbad_la_CFLAGS) $(CFLAGS) -c -o libgstdebugutilsbad_la-debugutils-marshal.lo `test -f 'debugutils-marshal.c' || echo '$(srcdir)/'`debugutils-marshal.c
-
 mostlyclean-libtool:
 	-rm -f *.lo
 
@@ -1085,15 +1065,13 @@
 	  fi; \
 	done
 check-am: all-am
-check: $(BUILT_SOURCES)
-	$(MAKE) $(AM_MAKEFLAGS) check-am
+check: check-am
 all-am: Makefile $(LTLIBRARIES) $(HEADERS)
 installdirs:
 	for dir in "$(DESTDIR)$(plugindir)"; do \
 	  test -z "$$dir" || $(MKDIR_P) "$$dir"; \
 	done
-install: $(BUILT_SOURCES)
-	$(MAKE) $(AM_MAKEFLAGS) install-am
+install: install-am
 install-exec: install-exec-am
 install-data: install-data-am
 uninstall: uninstall-am
@@ -1115,7 +1093,6 @@
 mostlyclean-generic:
 
 clean-generic:
-	-test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
 
 distclean-generic:
 	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
@@ -1124,7 +1101,6 @@
 maintainer-clean-generic:
 	@echo "This command is intended for maintainers to use"
 	@echo "it deletes files that may require special tools to rebuild."
-	-test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES)
 clean: clean-am
 
 clean-am: clean-generic clean-libtool clean-pluginLTLIBRARIES \
@@ -1196,7 +1172,7 @@
 
 uninstall-am: uninstall-pluginLTLIBRARIES
 
-.MAKE: all check install install-am install-strip
+.MAKE: install-am install-strip
 
 .PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \
 	clean-libtool clean-pluginLTLIBRARIES cscopelist-am ctags \
@@ -1216,42 +1192,6 @@
 .PRECIOUS: Makefile
 
 
-# these are all the rules generating the relevant files
-$(glib_gen_basename)-marshal.h: $(glib_gen_basename)-marshal.list
-	$(AM_V_GEN)$(GLIB_GENMARSHAL) --header --prefix=$(glib_gen_prefix)_marshal $^ > $(glib_gen_basename)-marshal.h.tmp && \
-	mv $(glib_gen_basename)-marshal.h.tmp $(glib_gen_basename)-marshal.h
-
-$(glib_gen_basename)-marshal.c: $(glib_gen_basename)-marshal.list
-	$(AM_V_GEN)echo "#include \"$(glib_gen_basename)-marshal.h\"" >> $(glib_gen_basename)-marshal.c.tmp && \
-	$(GLIB_GENMARSHAL) --body --prefix=$(glib_gen_prefix)_marshal $^ >> $(glib_gen_basename)-marshal.c.tmp && \
-	mv $(glib_gen_basename)-marshal.c.tmp $(glib_gen_basename)-marshal.c
-
-$(glib_gen_basename)-enumtypes.h: $(glib_enum_headers)
-	$(AM_V_GEN)$(GLIB_MKENUMS) \
-	--fhead "#ifndef __$(glib_enum_define)_ENUM_TYPES_H__\n#define __$(glib_enum_define)_ENUM_TYPES_H__\n\n#include <glib-object.h>\n\nG_BEGIN_DECLS\n" \
-	--fprod "\n/* enumerations from \"@filename@\" */\n" \
-	--vhead "GType @enum_name@_get_type (void);\n#define GST_TYPE_@ENUMSHORT@ (@enum_name@_get_type())\n"         \
-	--ftail "G_END_DECLS\n\n#endif /* __$(glib_enum_define)_ENUM_TYPES_H__ */" \
-	$^ > $@
-
-$(glib_gen_basename)-enumtypes.c: $(glib_enum_headers)
-	@if test "x$(glib_enum_headers)" = "x"; then echo "ERROR: glib_enum_headers is empty, please fix Makefile"; exit 1; fi
-	$(AM_V_GEN)$(GLIB_MKENUMS) \
-	--fhead "#include \"$(glib_gen_basename)-enumtypes.h\"\n$(enum_headers)" \
-	--fprod "\n/* enumerations from \"@filename@\" */" \
-	--vhead "GType\n@enum_name@_get_type (void)\n{\n  static volatile gsize g_define_type_id__volatile = 0;\n  if (g_once_init_enter (&g_define_type_id__volatile)) {\n    static const G@Type@Value values[] = {"     \
-	--vprod "      { @VALUENAME@, \"@VALUENAME@\", \"@valuenick@\" }," \
-	--vtail "      { 0, NULL, NULL }\n    };\n    GType g_define_type_id = g_@type@_register_static (\"@EnumName@\", values);\n    g_once_init_leave (&g_define_type_id__volatile, g_define_type_id);\n  }\n  return g_define_type_id__volatile;\n}\n" \
-	$^ > $@
-
-# a hack rule to make sure .Plo files exist because they get include'd
-# from Makefile's
-.deps/%-marshal.Plo:
-	@touch $@
-
-.deps/%-enumtypes.Plo:
-	@touch $@
-
 # Tell versions [3.59,3.63) of GNU make to not export all variables.
 # Otherwise a system limit (for SysV at least) may be exceeded.
 .NOEXPORT:
diff --git a/gst/debugutils/debugutils-marshal.list b/gst/debugutils/debugutils-marshal.list
deleted file mode 100644
index 8073fd3..0000000
--- a/gst/debugutils/debugutils-marshal.list
+++ /dev/null
@@ -1,2 +0,0 @@
-VOID:DOUBLE,DOUBLE,DOUBLE
-
diff --git a/gst/debugutils/fpsdisplaysink.c b/gst/debugutils/fpsdisplaysink.c
index dcef679..92b3201 100644
--- a/gst/debugutils/fpsdisplaysink.c
+++ b/gst/debugutils/fpsdisplaysink.c
@@ -25,10 +25,10 @@
  * <refsect2>
  * <title>Example launch lines</title>
  * |[
- * gst-launch videotestsrc ! fpsdisplaysink
- * gst-launch videotestsrc ! fpsdisplaysink text-overlay=false
- * gst-launch filesrc location=video.avi ! decodebin name=d ! queue ! fpsdisplaysink d. ! queue ! fakesink sync=true
- * gst-launch playbin uri=file:///path/to/video.avi video-sink="fpsdisplaysink" audio-sink=fakesink
+ * gst-launch-1.0 videotestsrc ! fpsdisplaysink
+ * gst-launch-1.0 videotestsrc ! fpsdisplaysink text-overlay=false
+ * gst-launch-1.0 filesrc location=video.avi ! decodebin name=d ! queue ! fpsdisplaysink d. ! queue ! fakesink sync=true
+ * gst-launch-1.0 playbin uri=file:///path/to/video.avi video-sink="fpsdisplaysink" audio-sink=fakesink
  * ]|
  * </refsect2>
  */
@@ -47,7 +47,6 @@
 #include "config.h"
 #endif
 
-#include "debugutils-marshal.h"
 #include "fpsdisplaysink.h"
 
 #define DEFAULT_SIGNAL_FPS_MEASUREMENTS FALSE
@@ -198,13 +197,10 @@
    * @avgfps: The average fps
    *
    * Signals the application about the measured fps
-   *
-   * Since: 0.10.20
    */
   fpsdisplaysink_signals[SIGNAL_FPS_MEASUREMENTS] =
       g_signal_new ("fps-measurements", G_TYPE_FROM_CLASS (klass),
-      G_SIGNAL_RUN_LAST, 0, NULL, NULL,
-      __gst_debugutils_marshal_VOID__DOUBLE_DOUBLE_DOUBLE,
+      G_SIGNAL_RUN_LAST, 0, NULL, NULL, NULL,
       G_TYPE_NONE, 3, G_TYPE_DOUBLE, G_TYPE_DOUBLE, G_TYPE_DOUBLE);
 
   gstelement_klass->change_state = fps_display_sink_change_state;
diff --git a/gst/debugutils/gstchopmydata.c b/gst/debugutils/gstchopmydata.c
index e7800d5..ceff7e5 100644
--- a/gst/debugutils/gstchopmydata.c
+++ b/gst/debugutils/gstchopmydata.c
@@ -26,7 +26,7 @@
  * <refsect2>
  * <title>Example launch line</title>
  * |[
- * gst-launch -v audiotestsrc num-buffers=10 ! gstchopmydata min-size=100
+ * gst-launch-1.0 -v audiotestsrc num-buffers=10 ! chopmydata min-size=100
  * max-size=200 step-size=2 ! fakesink -v
  * ]|
  * 
diff --git a/gst/debugutils/gstdebugspy.c b/gst/debugutils/gstdebugspy.c
index b746b51..19e7cf2 100644
--- a/gst/debugutils/gstdebugspy.c
+++ b/gst/debugutils/gstdebugspy.c
@@ -29,7 +29,7 @@
  * <refsect2>
  * <title>Example launch line</title>
  * |[
- * gst-launch -m videotestsrc ! debugspy ! fakesink
+ * gst-launch-1.0 -m videotestsrc ! debugspy ! fakesink
  * ]|
  * </refsect2>
  */
diff --git a/gst/debugutils/gstwatchdog.c b/gst/debugutils/gstwatchdog.c
index 3292b43..0a4c12e 100644
--- a/gst/debugutils/gstwatchdog.c
+++ b/gst/debugutils/gstwatchdog.c
@@ -35,7 +35,7 @@
  * <refsect2>
  * <title>Example launch line</title>
  * |[
- * gst-launch -v fakesrc ! watchdog ! fakesink
+ * gst-launch-1.0 -v fakesrc ! watchdog ! fakesink
  * ]|
  * </refsect2>
  */
diff --git a/gst/dvbsuboverlay/Makefile.in b/gst/dvbsuboverlay/Makefile.in
index d532c63..f2f0f2e 100644
--- a/gst/dvbsuboverlay/Makefile.in
+++ b/gst/dvbsuboverlay/Makefile.in
@@ -116,16 +116,15 @@
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
 	$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
-	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gsettings.m4 \
-	$(top_srcdir)/m4/gst-fionread.m4 $(top_srcdir)/m4/gst-sdl.m4 \
-	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
-	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
-	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libgcrypt.m4 \
-	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
-	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
-	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
-	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
-	$(top_srcdir)/configure.ac
+	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gst-fionread.m4 \
+	$(top_srcdir)/m4/gst-sdl.m4 $(top_srcdir)/m4/iconv.m4 \
+	$(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \
+	$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
+	$(top_srcdir)/m4/libgcrypt.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
+	$(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \
@@ -275,6 +274,8 @@
 CLUTTER_X11_LIBS = @CLUTTER_X11_LIBS@
 CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
+CUDA_CFLAGS = @CUDA_CFLAGS@
+CUDA_LIBS = @CUDA_LIBS@
 CURL_CFLAGS = @CURL_CFLAGS@
 CURL_LIBS = @CURL_LIBS@
 CXX = @CXX@
@@ -312,6 +313,8 @@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
+EGL_CFLAGS = @EGL_CFLAGS@
+EGL_LIBS = @EGL_LIBS@
 EGREP = @EGREP@
 ERROR_CFLAGS = @ERROR_CFLAGS@
 ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
@@ -320,7 +323,6 @@
 EXIF_CFLAGS = @EXIF_CFLAGS@
 EXIF_LIBS = @EXIF_LIBS@
 FAAC_LIBS = @FAAC_LIBS@
-FAAD_IS_NEAAC = @FAAD_IS_NEAAC@
 FAAD_LIBS = @FAAD_LIBS@
 FFLAGS = @FFLAGS@
 FGREP = @FGREP@
@@ -339,8 +341,9 @@
 GIO_LIBS = @GIO_LIBS@
 GIO_UNIX_CFLAGS = @GIO_UNIX_CFLAGS@
 GIO_UNIX_LIBS = @GIO_UNIX_LIBS@
+GLES2_CFLAGS = @GLES2_CFLAGS@
+GLES2_LIBS = @GLES2_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
-GLIB_COMPILE_SCHEMAS = @GLIB_COMPILE_SCHEMAS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
@@ -357,16 +360,17 @@
 GMODULE_NO_EXPORT_LIBS = @GMODULE_NO_EXPORT_LIBS@
 GMSGFMT = @GMSGFMT@
 GMSGFMT_015 = @GMSGFMT_015@
+GNUSTL_CFLAGS = @GNUSTL_CFLAGS@
+GNUSTL_LIBS = @GNUSTL_LIBS@
 GRAPHENE_CFLAGS = @GRAPHENE_CFLAGS@
 GRAPHENE_LIBS = @GRAPHENE_LIBS@
 GREP = @GREP@
-GSETTINGS_CFLAGS = @GSETTINGS_CFLAGS@
-GSETTINGS_DISABLE_SCHEMAS_COMPILE = @GSETTINGS_DISABLE_SCHEMAS_COMPILE@
-GSETTINGS_LIBS = @GSETTINGS_LIBS@
 GSM_LIBS = @GSM_LIBS@
 GSTPB_PLUGINS_DIR = @GSTPB_PLUGINS_DIR@
 GSTPB_PREFIX = @GSTPB_PREFIX@
 GST_AGE = @GST_AGE@
+GST_ALLOCATORS_CFLAGS = @GST_ALLOCATORS_CFLAGS@
+GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
 GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
 GST_API_VERSION = @GST_API_VERSION@
 GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
@@ -392,6 +396,8 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PBUTILS_CFLAGS = @GST_PBUTILS_CFLAGS@
+GST_PBUTILS_LIBS = @GST_PBUTILS_LIBS@
 GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BAD_CFLAGS = @GST_PLUGINS_BAD_CFLAGS@
@@ -417,6 +423,8 @@
 GST_PREFIX = @GST_PREFIX@
 GST_REVISION = @GST_REVISION@
 GST_TOOLS_DIR = @GST_TOOLS_DIR@
+GST_VIDEO_CFLAGS = @GST_VIDEO_CFLAGS@
+GST_VIDEO_LIBS = @GST_VIDEO_LIBS@
 GTK3_CFLAGS = @GTK3_CFLAGS@
 GTK3_GL_CFLAGS = @GTK3_GL_CFLAGS@
 GTK3_GL_LIBS = @GTK3_GL_LIBS@
@@ -518,6 +526,7 @@
 LTLIBICONV = @LTLIBICONV@
 LTLIBINTL = @LTLIBINTL@
 LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
 MANIFEST_TOOL = @MANIFEST_TOOL@
@@ -531,8 +540,6 @@
 MODPLUG_LIBS = @MODPLUG_LIBS@
 MPEG2ENC_CFLAGS = @MPEG2ENC_CFLAGS@
 MPEG2ENC_LIBS = @MPEG2ENC_LIBS@
-MPG123_CFLAGS = @MPG123_CFLAGS@
-MPG123_LIBS = @MPG123_LIBS@
 MPLEX_CFLAGS = @MPLEX_CFLAGS@
 MPLEX_LDFLAGS = @MPLEX_LDFLAGS@
 MPLEX_LIBS = @MPLEX_LIBS@
@@ -548,6 +555,8 @@
 NETTLE_LIBS = @NETTLE_LIBS@
 NM = @NM@
 NMEDIT = @NMEDIT@
+NVENCODE_CFLAGS = @NVENCODE_CFLAGS@
+NVENCODE_LIBS = @NVENCODE_LIBS@
 OBJC = @OBJC@
 OBJCDEPMODE = @OBJCDEPMODE@
 OBJCFLAGS = @OBJCFLAGS@
@@ -605,16 +614,18 @@
 PYTHON_PLATFORM = @PYTHON_PLATFORM@
 PYTHON_PREFIX = @PYTHON_PREFIX@
 PYTHON_VERSION = @PYTHON_VERSION@
+QT_ANDROID_CFLAGS = @QT_ANDROID_CFLAGS@
+QT_ANDROID_LIBS = @QT_ANDROID_LIBS@
 QT_CFLAGS = @QT_CFLAGS@
 QT_LIBS = @QT_LIBS@
+QT_MAC_CFLAGS = @QT_MAC_CFLAGS@
+QT_MAC_LIBS = @QT_MAC_LIBS@
 QT_WAYLAND_CFLAGS = @QT_WAYLAND_CFLAGS@
 QT_WAYLAND_LIBS = @QT_WAYLAND_LIBS@
 QT_X11_CFLAGS = @QT_X11_CFLAGS@
 QT_X11_LIBS = @QT_X11_LIBS@
 RANLIB = @RANLIB@
 RCC = @RCC@
-RSVG_2_36_2_CFLAGS = @RSVG_2_36_2_CFLAGS@
-RSVG_2_36_2_LIBS = @RSVG_2_36_2_LIBS@
 RSVG_CFLAGS = @RSVG_CFLAGS@
 RSVG_LIBS = @RSVG_LIBS@
 RTMP_CFLAGS = @RTMP_CFLAGS@
@@ -666,6 +677,7 @@
 VOAACENC_LIBS = @VOAACENC_LIBS@
 VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
 VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VULKAN_LIBS = @VULKAN_LIBS@
 WARNING_CFLAGS = @WARNING_CFLAGS@
 WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
 WARNING_OBJCFLAGS = @WARNING_OBJCFLAGS@
@@ -676,6 +688,7 @@
 WAYLAND_LIBS = @WAYLAND_LIBS@
 WEBP_CFLAGS = @WEBP_CFLAGS@
 WEBP_LIBS = @WEBP_LIBS@
+WGET = @WGET@
 WILDMIDI_CFLAGS = @WILDMIDI_CFLAGS@
 WILDMIDI_LIBS = @WILDMIDI_LIBS@
 WINKS_LIBS = @WINKS_LIBS@
@@ -685,6 +698,8 @@
 X11_LIBS = @X11_LIBS@
 X265_CFLAGS = @X265_CFLAGS@
 X265_LIBS = @X265_LIBS@
+XCB_CFLAGS = @XCB_CFLAGS@
+XCB_LIBS = @XCB_LIBS@
 XCOMPOSITE_CFLAGS = @XCOMPOSITE_CFLAGS@
 XCOMPOSITE_LIBS = @XCOMPOSITE_LIBS@
 XGETTEXT = @XGETTEXT@
@@ -722,7 +737,6 @@
 docdir = @docdir@
 dvidir = @dvidir@
 exec_prefix = @exec_prefix@
-gsettingsschemadir = @gsettingsschemadir@
 host = @host@
 host_alias = @host_alias@
 host_cpu = @host_cpu@
diff --git a/gst/dvbsuboverlay/dvb-sub.c b/gst/dvbsuboverlay/dvb-sub.c
index 65a43ab..7596563 100644
--- a/gst/dvbsuboverlay/dvb-sub.c
+++ b/gst/dvbsuboverlay/dvb-sub.c
@@ -277,8 +277,7 @@
     dvb_sub->region_list = region->next;
 
     delete_region_display_list (dvb_sub, region);
-    if (region->pbuf)
-      g_free (region->pbuf);
+    g_free (region->pbuf);
 
     g_slice_free (DVBSubRegion, region);
   }
@@ -472,8 +471,7 @@
   buf += 2;
 
   if (region->width * region->height != region->buf_size) {     /* FIXME: Read closer from spec what happens when dimensions change */
-    if (region->pbuf)
-      g_free (region->pbuf);
+    g_free (region->pbuf);
 
     region->buf_size = region->width * region->height;
 
diff --git a/gst/dvbsuboverlay/gstdvbsuboverlay.c b/gst/dvbsuboverlay/gstdvbsuboverlay.c
index 63599db..3658201 100644
--- a/gst/dvbsuboverlay/gstdvbsuboverlay.c
+++ b/gst/dvbsuboverlay/gstdvbsuboverlay.c
@@ -26,7 +26,7 @@
  * <refsect2>
  * <title>Example launch line</title>
  * |[ FIXME
- * gst-launch -v filesrc location=/path/to/ts ! mpegtsdemux name=d ! queue ! mp3parse ! mad ! audioconvert ! autoaudiosink \
+ * gst-launch-1.0 -v filesrc location=/path/to/ts ! mpegtsdemux name=d ! queue ! mpegaudioparse ! mad ! audioconvert ! autoaudiosink \
  *     d. ! queue ! mpeg2dec ! videoconvert ! r. \
  *     d. ! queue ! "subpicture/x-dvb" ! dvbsuboverlay name=r ! videoconvert ! autovideosink
  * ]| This pipeline demuxes a MPEG-TS file with MPEG2 video, MP3 audio and embedded DVB subtitles and renders the subtitles on top of the video.
diff --git a/gst/dvdspu/Makefile.in b/gst/dvdspu/Makefile.in
index 51c777c..1134894 100644
--- a/gst/dvdspu/Makefile.in
+++ b/gst/dvdspu/Makefile.in
@@ -116,16 +116,15 @@
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
 	$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
-	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gsettings.m4 \
-	$(top_srcdir)/m4/gst-fionread.m4 $(top_srcdir)/m4/gst-sdl.m4 \
-	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
-	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
-	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libgcrypt.m4 \
-	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
-	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
-	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
-	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
-	$(top_srcdir)/configure.ac
+	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gst-fionread.m4 \
+	$(top_srcdir)/m4/gst-sdl.m4 $(top_srcdir)/m4/iconv.m4 \
+	$(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \
+	$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
+	$(top_srcdir)/m4/libgcrypt.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
+	$(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \
@@ -278,6 +277,8 @@
 CLUTTER_X11_LIBS = @CLUTTER_X11_LIBS@
 CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
+CUDA_CFLAGS = @CUDA_CFLAGS@
+CUDA_LIBS = @CUDA_LIBS@
 CURL_CFLAGS = @CURL_CFLAGS@
 CURL_LIBS = @CURL_LIBS@
 CXX = @CXX@
@@ -315,6 +316,8 @@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
+EGL_CFLAGS = @EGL_CFLAGS@
+EGL_LIBS = @EGL_LIBS@
 EGREP = @EGREP@
 ERROR_CFLAGS = @ERROR_CFLAGS@
 ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
@@ -323,7 +326,6 @@
 EXIF_CFLAGS = @EXIF_CFLAGS@
 EXIF_LIBS = @EXIF_LIBS@
 FAAC_LIBS = @FAAC_LIBS@
-FAAD_IS_NEAAC = @FAAD_IS_NEAAC@
 FAAD_LIBS = @FAAD_LIBS@
 FFLAGS = @FFLAGS@
 FGREP = @FGREP@
@@ -342,8 +344,9 @@
 GIO_LIBS = @GIO_LIBS@
 GIO_UNIX_CFLAGS = @GIO_UNIX_CFLAGS@
 GIO_UNIX_LIBS = @GIO_UNIX_LIBS@
+GLES2_CFLAGS = @GLES2_CFLAGS@
+GLES2_LIBS = @GLES2_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
-GLIB_COMPILE_SCHEMAS = @GLIB_COMPILE_SCHEMAS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
@@ -360,16 +363,17 @@
 GMODULE_NO_EXPORT_LIBS = @GMODULE_NO_EXPORT_LIBS@
 GMSGFMT = @GMSGFMT@
 GMSGFMT_015 = @GMSGFMT_015@
+GNUSTL_CFLAGS = @GNUSTL_CFLAGS@
+GNUSTL_LIBS = @GNUSTL_LIBS@
 GRAPHENE_CFLAGS = @GRAPHENE_CFLAGS@
 GRAPHENE_LIBS = @GRAPHENE_LIBS@
 GREP = @GREP@
-GSETTINGS_CFLAGS = @GSETTINGS_CFLAGS@
-GSETTINGS_DISABLE_SCHEMAS_COMPILE = @GSETTINGS_DISABLE_SCHEMAS_COMPILE@
-GSETTINGS_LIBS = @GSETTINGS_LIBS@
 GSM_LIBS = @GSM_LIBS@
 GSTPB_PLUGINS_DIR = @GSTPB_PLUGINS_DIR@
 GSTPB_PREFIX = @GSTPB_PREFIX@
 GST_AGE = @GST_AGE@
+GST_ALLOCATORS_CFLAGS = @GST_ALLOCATORS_CFLAGS@
+GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
 GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
 GST_API_VERSION = @GST_API_VERSION@
 GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
@@ -395,6 +399,8 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PBUTILS_CFLAGS = @GST_PBUTILS_CFLAGS@
+GST_PBUTILS_LIBS = @GST_PBUTILS_LIBS@
 GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BAD_CFLAGS = @GST_PLUGINS_BAD_CFLAGS@
@@ -420,6 +426,8 @@
 GST_PREFIX = @GST_PREFIX@
 GST_REVISION = @GST_REVISION@
 GST_TOOLS_DIR = @GST_TOOLS_DIR@
+GST_VIDEO_CFLAGS = @GST_VIDEO_CFLAGS@
+GST_VIDEO_LIBS = @GST_VIDEO_LIBS@
 GTK3_CFLAGS = @GTK3_CFLAGS@
 GTK3_GL_CFLAGS = @GTK3_GL_CFLAGS@
 GTK3_GL_LIBS = @GTK3_GL_LIBS@
@@ -521,6 +529,7 @@
 LTLIBICONV = @LTLIBICONV@
 LTLIBINTL = @LTLIBINTL@
 LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
 MANIFEST_TOOL = @MANIFEST_TOOL@
@@ -534,8 +543,6 @@
 MODPLUG_LIBS = @MODPLUG_LIBS@
 MPEG2ENC_CFLAGS = @MPEG2ENC_CFLAGS@
 MPEG2ENC_LIBS = @MPEG2ENC_LIBS@
-MPG123_CFLAGS = @MPG123_CFLAGS@
-MPG123_LIBS = @MPG123_LIBS@
 MPLEX_CFLAGS = @MPLEX_CFLAGS@
 MPLEX_LDFLAGS = @MPLEX_LDFLAGS@
 MPLEX_LIBS = @MPLEX_LIBS@
@@ -551,6 +558,8 @@
 NETTLE_LIBS = @NETTLE_LIBS@
 NM = @NM@
 NMEDIT = @NMEDIT@
+NVENCODE_CFLAGS = @NVENCODE_CFLAGS@
+NVENCODE_LIBS = @NVENCODE_LIBS@
 OBJC = @OBJC@
 OBJCDEPMODE = @OBJCDEPMODE@
 OBJCFLAGS = @OBJCFLAGS@
@@ -608,16 +617,18 @@
 PYTHON_PLATFORM = @PYTHON_PLATFORM@
 PYTHON_PREFIX = @PYTHON_PREFIX@
 PYTHON_VERSION = @PYTHON_VERSION@
+QT_ANDROID_CFLAGS = @QT_ANDROID_CFLAGS@
+QT_ANDROID_LIBS = @QT_ANDROID_LIBS@
 QT_CFLAGS = @QT_CFLAGS@
 QT_LIBS = @QT_LIBS@
+QT_MAC_CFLAGS = @QT_MAC_CFLAGS@
+QT_MAC_LIBS = @QT_MAC_LIBS@
 QT_WAYLAND_CFLAGS = @QT_WAYLAND_CFLAGS@
 QT_WAYLAND_LIBS = @QT_WAYLAND_LIBS@
 QT_X11_CFLAGS = @QT_X11_CFLAGS@
 QT_X11_LIBS = @QT_X11_LIBS@
 RANLIB = @RANLIB@
 RCC = @RCC@
-RSVG_2_36_2_CFLAGS = @RSVG_2_36_2_CFLAGS@
-RSVG_2_36_2_LIBS = @RSVG_2_36_2_LIBS@
 RSVG_CFLAGS = @RSVG_CFLAGS@
 RSVG_LIBS = @RSVG_LIBS@
 RTMP_CFLAGS = @RTMP_CFLAGS@
@@ -669,6 +680,7 @@
 VOAACENC_LIBS = @VOAACENC_LIBS@
 VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
 VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VULKAN_LIBS = @VULKAN_LIBS@
 WARNING_CFLAGS = @WARNING_CFLAGS@
 WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
 WARNING_OBJCFLAGS = @WARNING_OBJCFLAGS@
@@ -679,6 +691,7 @@
 WAYLAND_LIBS = @WAYLAND_LIBS@
 WEBP_CFLAGS = @WEBP_CFLAGS@
 WEBP_LIBS = @WEBP_LIBS@
+WGET = @WGET@
 WILDMIDI_CFLAGS = @WILDMIDI_CFLAGS@
 WILDMIDI_LIBS = @WILDMIDI_LIBS@
 WINKS_LIBS = @WINKS_LIBS@
@@ -688,6 +701,8 @@
 X11_LIBS = @X11_LIBS@
 X265_CFLAGS = @X265_CFLAGS@
 X265_LIBS = @X265_LIBS@
+XCB_CFLAGS = @XCB_CFLAGS@
+XCB_LIBS = @XCB_LIBS@
 XCOMPOSITE_CFLAGS = @XCOMPOSITE_CFLAGS@
 XCOMPOSITE_LIBS = @XCOMPOSITE_LIBS@
 XGETTEXT = @XGETTEXT@
@@ -725,7 +740,6 @@
 docdir = @docdir@
 dvidir = @dvidir@
 exec_prefix = @exec_prefix@
-gsettingsschemadir = @gsettingsschemadir@
 host = @host@
 host_alias = @host_alias@
 host_cpu = @host_cpu@
diff --git a/gst/dvdspu/gstdvdspu.c b/gst/dvdspu/gstdvdspu.c
index 62ee544..04a4387 100644
--- a/gst/dvdspu/gstdvdspu.c
+++ b/gst/dvdspu/gstdvdspu.c
@@ -24,7 +24,7 @@
  * <refsect2>
  * <title>Example launch line</title>
  * |[
- * FIXME: gst-launch ...
+ * FIXME: gst-launch-1.0 ...
  * ]| FIXME: description for the sample launch pipeline
  * </refsect2>
  */
@@ -90,7 +90,8 @@
 
 static GstCaps *gst_dvd_spu_video_proxy_getcaps (GstPad * pad,
     GstCaps * filter);
-static gboolean gst_dvd_spu_video_set_caps (GstPad * pad, GstCaps * caps);
+static gboolean gst_dvd_spu_video_set_caps (GstDVDSpu * dvdspu, GstPad * pad,
+    GstCaps * caps);
 static GstFlowReturn gst_dvd_spu_video_chain (GstPad * pad, GstObject * parent,
     GstBuffer * buf);
 static gboolean gst_dvd_spu_video_event (GstPad * pad, GstObject * parent,
@@ -104,7 +105,8 @@
     GstBuffer * buf);
 static gboolean gst_dvd_spu_subpic_event (GstPad * pad, GstObject * parent,
     GstEvent * event);
-static gboolean gst_dvd_spu_subpic_set_caps (GstPad * pad, GstCaps * caps);
+static gboolean gst_dvd_spu_subpic_set_caps (GstDVDSpu * dvdspu, GstPad * pad,
+    GstCaps * caps);
 
 static void gst_dvd_spu_clear (GstDVDSpu * dvdspu);
 static void gst_dvd_spu_flush_spu_info (GstDVDSpu * dvdspu,
@@ -315,9 +317,8 @@
 }
 
 static gboolean
-gst_dvd_spu_video_set_caps (GstPad * pad, GstCaps * caps)
+gst_dvd_spu_video_set_caps (GstDVDSpu * dvdspu, GstPad * pad, GstCaps * caps)
 {
-  GstDVDSpu *dvdspu = GST_DVD_SPU (gst_pad_get_parent (pad));
   gboolean res = FALSE;
   GstVideoInfo info;
   gint i;
@@ -339,7 +340,6 @@
 
   res = TRUE;
 done:
-  gst_object_unref (dvdspu);
   return res;
 }
 
@@ -405,7 +405,7 @@
       GstCaps *caps;
 
       gst_event_parse_caps (event, &caps);
-      res = gst_dvd_spu_video_set_caps (pad, caps);
+      res = gst_dvd_spu_video_set_caps (dvdspu, pad, caps);
       if (res)
         res = gst_pad_push_event (dvdspu->srcpad, event);
       else
@@ -1057,7 +1057,7 @@
       GstCaps *caps;
 
       gst_event_parse_caps (event, &caps);
-      res = gst_dvd_spu_subpic_set_caps (pad, caps);
+      res = gst_dvd_spu_subpic_set_caps (dvdspu, pad, caps);
       gst_event_unref (event);
       break;
     }
@@ -1066,9 +1066,10 @@
     case GST_EVENT_CUSTOM_DOWNSTREAM_OOB:
     {
       const GstStructure *structure = gst_event_get_structure (event);
+      const gchar *name = gst_structure_get_name (structure);
       gboolean need_push;
 
-      if (!gst_structure_has_name (structure, "application/x-gst-dvd")) {
+      if (!g_str_has_prefix (name, "application/x-gst-dvd")) {
         res = gst_pad_event_default (pad, parent, event);
         break;
       }
@@ -1184,9 +1185,8 @@
 }
 
 static gboolean
-gst_dvd_spu_subpic_set_caps (GstPad * pad, GstCaps * caps)
+gst_dvd_spu_subpic_set_caps (GstDVDSpu * dvdspu, GstPad * pad, GstCaps * caps)
 {
-  GstDVDSpu *dvdspu = GST_DVD_SPU (gst_pad_get_parent (pad));
   gboolean res = FALSE;
   GstStructure *s;
   SpuInputType input_type;
@@ -1212,7 +1212,6 @@
   DVD_SPU_UNLOCK (dvdspu);
   res = TRUE;
 done:
-  gst_object_unref (dvdspu);
   return res;
 }
 
diff --git a/gst/dvdspu/gstspu-pgs.c b/gst/dvdspu/gstspu-pgs.c
index fc59716..6108de0 100644
--- a/gst/dvdspu/gstspu-pgs.c
+++ b/gst/dvdspu/gstspu-pgs.c
@@ -81,7 +81,8 @@
 static void
 dump_rle_data (GstDVDSpu * dvdspu, guint8 * data, guint32 len)
 {
-  guint16 obj_h G_GNUC_UNUSED;
+#if DUMP_FULL_IMAGE
+  guint16 obj_h;
   guint16 obj_w;
   guint8 *end = data + len;
   guint x = 0;
@@ -141,7 +142,6 @@
       }
     }
 
-#if DUMP_FULL_IMAGE
     {
       gint i;
 #if 1
@@ -159,7 +159,6 @@
       PGS_DUMP ("Run x: %d pix: %d col: %d\n", x, run_len, pal_id);
 #endif
     }
-#endif
 
     x += run_len;
     if (!run_len || x > obj_w)
@@ -167,6 +166,7 @@
   };
 
   PGS_DUMP ("\n");
+#endif
 }
 
 static void
@@ -318,6 +318,8 @@
     guint8 n_objects)
 {
   if (ps->objects == NULL) {
+    if (n_objects == 0)
+      return;
     ps->objects =
         g_array_sized_new (FALSE, TRUE, sizeof (PgsCompositionObject),
         n_objects);
diff --git a/gst/faceoverlay/Makefile.in b/gst/faceoverlay/Makefile.in
index f651c95..5ab8c18 100644
--- a/gst/faceoverlay/Makefile.in
+++ b/gst/faceoverlay/Makefile.in
@@ -116,16 +116,15 @@
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
 	$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
-	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gsettings.m4 \
-	$(top_srcdir)/m4/gst-fionread.m4 $(top_srcdir)/m4/gst-sdl.m4 \
-	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
-	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
-	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libgcrypt.m4 \
-	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
-	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
-	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
-	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
-	$(top_srcdir)/configure.ac
+	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gst-fionread.m4 \
+	$(top_srcdir)/m4/gst-sdl.m4 $(top_srcdir)/m4/iconv.m4 \
+	$(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \
+	$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
+	$(top_srcdir)/m4/libgcrypt.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
+	$(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \
@@ -275,6 +274,8 @@
 CLUTTER_X11_LIBS = @CLUTTER_X11_LIBS@
 CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
+CUDA_CFLAGS = @CUDA_CFLAGS@
+CUDA_LIBS = @CUDA_LIBS@
 CURL_CFLAGS = @CURL_CFLAGS@
 CURL_LIBS = @CURL_LIBS@
 CXX = @CXX@
@@ -312,6 +313,8 @@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
+EGL_CFLAGS = @EGL_CFLAGS@
+EGL_LIBS = @EGL_LIBS@
 EGREP = @EGREP@
 ERROR_CFLAGS = @ERROR_CFLAGS@
 ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
@@ -320,7 +323,6 @@
 EXIF_CFLAGS = @EXIF_CFLAGS@
 EXIF_LIBS = @EXIF_LIBS@
 FAAC_LIBS = @FAAC_LIBS@
-FAAD_IS_NEAAC = @FAAD_IS_NEAAC@
 FAAD_LIBS = @FAAD_LIBS@
 FFLAGS = @FFLAGS@
 FGREP = @FGREP@
@@ -339,8 +341,9 @@
 GIO_LIBS = @GIO_LIBS@
 GIO_UNIX_CFLAGS = @GIO_UNIX_CFLAGS@
 GIO_UNIX_LIBS = @GIO_UNIX_LIBS@
+GLES2_CFLAGS = @GLES2_CFLAGS@
+GLES2_LIBS = @GLES2_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
-GLIB_COMPILE_SCHEMAS = @GLIB_COMPILE_SCHEMAS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
@@ -357,16 +360,17 @@
 GMODULE_NO_EXPORT_LIBS = @GMODULE_NO_EXPORT_LIBS@
 GMSGFMT = @GMSGFMT@
 GMSGFMT_015 = @GMSGFMT_015@
+GNUSTL_CFLAGS = @GNUSTL_CFLAGS@
+GNUSTL_LIBS = @GNUSTL_LIBS@
 GRAPHENE_CFLAGS = @GRAPHENE_CFLAGS@
 GRAPHENE_LIBS = @GRAPHENE_LIBS@
 GREP = @GREP@
-GSETTINGS_CFLAGS = @GSETTINGS_CFLAGS@
-GSETTINGS_DISABLE_SCHEMAS_COMPILE = @GSETTINGS_DISABLE_SCHEMAS_COMPILE@
-GSETTINGS_LIBS = @GSETTINGS_LIBS@
 GSM_LIBS = @GSM_LIBS@
 GSTPB_PLUGINS_DIR = @GSTPB_PLUGINS_DIR@
 GSTPB_PREFIX = @GSTPB_PREFIX@
 GST_AGE = @GST_AGE@
+GST_ALLOCATORS_CFLAGS = @GST_ALLOCATORS_CFLAGS@
+GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
 GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
 GST_API_VERSION = @GST_API_VERSION@
 GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
@@ -392,6 +396,8 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PBUTILS_CFLAGS = @GST_PBUTILS_CFLAGS@
+GST_PBUTILS_LIBS = @GST_PBUTILS_LIBS@
 GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BAD_CFLAGS = @GST_PLUGINS_BAD_CFLAGS@
@@ -417,6 +423,8 @@
 GST_PREFIX = @GST_PREFIX@
 GST_REVISION = @GST_REVISION@
 GST_TOOLS_DIR = @GST_TOOLS_DIR@
+GST_VIDEO_CFLAGS = @GST_VIDEO_CFLAGS@
+GST_VIDEO_LIBS = @GST_VIDEO_LIBS@
 GTK3_CFLAGS = @GTK3_CFLAGS@
 GTK3_GL_CFLAGS = @GTK3_GL_CFLAGS@
 GTK3_GL_LIBS = @GTK3_GL_LIBS@
@@ -518,6 +526,7 @@
 LTLIBICONV = @LTLIBICONV@
 LTLIBINTL = @LTLIBINTL@
 LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
 MANIFEST_TOOL = @MANIFEST_TOOL@
@@ -531,8 +540,6 @@
 MODPLUG_LIBS = @MODPLUG_LIBS@
 MPEG2ENC_CFLAGS = @MPEG2ENC_CFLAGS@
 MPEG2ENC_LIBS = @MPEG2ENC_LIBS@
-MPG123_CFLAGS = @MPG123_CFLAGS@
-MPG123_LIBS = @MPG123_LIBS@
 MPLEX_CFLAGS = @MPLEX_CFLAGS@
 MPLEX_LDFLAGS = @MPLEX_LDFLAGS@
 MPLEX_LIBS = @MPLEX_LIBS@
@@ -548,6 +555,8 @@
 NETTLE_LIBS = @NETTLE_LIBS@
 NM = @NM@
 NMEDIT = @NMEDIT@
+NVENCODE_CFLAGS = @NVENCODE_CFLAGS@
+NVENCODE_LIBS = @NVENCODE_LIBS@
 OBJC = @OBJC@
 OBJCDEPMODE = @OBJCDEPMODE@
 OBJCFLAGS = @OBJCFLAGS@
@@ -605,16 +614,18 @@
 PYTHON_PLATFORM = @PYTHON_PLATFORM@
 PYTHON_PREFIX = @PYTHON_PREFIX@
 PYTHON_VERSION = @PYTHON_VERSION@
+QT_ANDROID_CFLAGS = @QT_ANDROID_CFLAGS@
+QT_ANDROID_LIBS = @QT_ANDROID_LIBS@
 QT_CFLAGS = @QT_CFLAGS@
 QT_LIBS = @QT_LIBS@
+QT_MAC_CFLAGS = @QT_MAC_CFLAGS@
+QT_MAC_LIBS = @QT_MAC_LIBS@
 QT_WAYLAND_CFLAGS = @QT_WAYLAND_CFLAGS@
 QT_WAYLAND_LIBS = @QT_WAYLAND_LIBS@
 QT_X11_CFLAGS = @QT_X11_CFLAGS@
 QT_X11_LIBS = @QT_X11_LIBS@
 RANLIB = @RANLIB@
 RCC = @RCC@
-RSVG_2_36_2_CFLAGS = @RSVG_2_36_2_CFLAGS@
-RSVG_2_36_2_LIBS = @RSVG_2_36_2_LIBS@
 RSVG_CFLAGS = @RSVG_CFLAGS@
 RSVG_LIBS = @RSVG_LIBS@
 RTMP_CFLAGS = @RTMP_CFLAGS@
@@ -666,6 +677,7 @@
 VOAACENC_LIBS = @VOAACENC_LIBS@
 VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
 VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VULKAN_LIBS = @VULKAN_LIBS@
 WARNING_CFLAGS = @WARNING_CFLAGS@
 WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
 WARNING_OBJCFLAGS = @WARNING_OBJCFLAGS@
@@ -676,6 +688,7 @@
 WAYLAND_LIBS = @WAYLAND_LIBS@
 WEBP_CFLAGS = @WEBP_CFLAGS@
 WEBP_LIBS = @WEBP_LIBS@
+WGET = @WGET@
 WILDMIDI_CFLAGS = @WILDMIDI_CFLAGS@
 WILDMIDI_LIBS = @WILDMIDI_LIBS@
 WINKS_LIBS = @WINKS_LIBS@
@@ -685,6 +698,8 @@
 X11_LIBS = @X11_LIBS@
 X265_CFLAGS = @X265_CFLAGS@
 X265_LIBS = @X265_LIBS@
+XCB_CFLAGS = @XCB_CFLAGS@
+XCB_LIBS = @XCB_LIBS@
 XCOMPOSITE_CFLAGS = @XCOMPOSITE_CFLAGS@
 XCOMPOSITE_LIBS = @XCOMPOSITE_LIBS@
 XGETTEXT = @XGETTEXT@
@@ -722,7 +737,6 @@
 docdir = @docdir@
 dvidir = @dvidir@
 exec_prefix = @exec_prefix@
-gsettingsschemadir = @gsettingsschemadir@
 host = @host@
 host_alias = @host_alias@
 host_cpu = @host_cpu@
diff --git a/gst/festival/Makefile.in b/gst/festival/Makefile.in
index 9959066..530b0ae 100644
--- a/gst/festival/Makefile.in
+++ b/gst/festival/Makefile.in
@@ -116,16 +116,15 @@
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
 	$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
-	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gsettings.m4 \
-	$(top_srcdir)/m4/gst-fionread.m4 $(top_srcdir)/m4/gst-sdl.m4 \
-	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
-	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
-	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libgcrypt.m4 \
-	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
-	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
-	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
-	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
-	$(top_srcdir)/configure.ac
+	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gst-fionread.m4 \
+	$(top_srcdir)/m4/gst-sdl.m4 $(top_srcdir)/m4/iconv.m4 \
+	$(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \
+	$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
+	$(top_srcdir)/m4/libgcrypt.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
+	$(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \
@@ -274,6 +273,8 @@
 CLUTTER_X11_LIBS = @CLUTTER_X11_LIBS@
 CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
+CUDA_CFLAGS = @CUDA_CFLAGS@
+CUDA_LIBS = @CUDA_LIBS@
 CURL_CFLAGS = @CURL_CFLAGS@
 CURL_LIBS = @CURL_LIBS@
 CXX = @CXX@
@@ -311,6 +312,8 @@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
+EGL_CFLAGS = @EGL_CFLAGS@
+EGL_LIBS = @EGL_LIBS@
 EGREP = @EGREP@
 ERROR_CFLAGS = @ERROR_CFLAGS@
 ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
@@ -319,7 +322,6 @@
 EXIF_CFLAGS = @EXIF_CFLAGS@
 EXIF_LIBS = @EXIF_LIBS@
 FAAC_LIBS = @FAAC_LIBS@
-FAAD_IS_NEAAC = @FAAD_IS_NEAAC@
 FAAD_LIBS = @FAAD_LIBS@
 FFLAGS = @FFLAGS@
 FGREP = @FGREP@
@@ -338,8 +340,9 @@
 GIO_LIBS = @GIO_LIBS@
 GIO_UNIX_CFLAGS = @GIO_UNIX_CFLAGS@
 GIO_UNIX_LIBS = @GIO_UNIX_LIBS@
+GLES2_CFLAGS = @GLES2_CFLAGS@
+GLES2_LIBS = @GLES2_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
-GLIB_COMPILE_SCHEMAS = @GLIB_COMPILE_SCHEMAS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
@@ -356,16 +359,17 @@
 GMODULE_NO_EXPORT_LIBS = @GMODULE_NO_EXPORT_LIBS@
 GMSGFMT = @GMSGFMT@
 GMSGFMT_015 = @GMSGFMT_015@
+GNUSTL_CFLAGS = @GNUSTL_CFLAGS@
+GNUSTL_LIBS = @GNUSTL_LIBS@
 GRAPHENE_CFLAGS = @GRAPHENE_CFLAGS@
 GRAPHENE_LIBS = @GRAPHENE_LIBS@
 GREP = @GREP@
-GSETTINGS_CFLAGS = @GSETTINGS_CFLAGS@
-GSETTINGS_DISABLE_SCHEMAS_COMPILE = @GSETTINGS_DISABLE_SCHEMAS_COMPILE@
-GSETTINGS_LIBS = @GSETTINGS_LIBS@
 GSM_LIBS = @GSM_LIBS@
 GSTPB_PLUGINS_DIR = @GSTPB_PLUGINS_DIR@
 GSTPB_PREFIX = @GSTPB_PREFIX@
 GST_AGE = @GST_AGE@
+GST_ALLOCATORS_CFLAGS = @GST_ALLOCATORS_CFLAGS@
+GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
 GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
 GST_API_VERSION = @GST_API_VERSION@
 GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
@@ -391,6 +395,8 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PBUTILS_CFLAGS = @GST_PBUTILS_CFLAGS@
+GST_PBUTILS_LIBS = @GST_PBUTILS_LIBS@
 GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BAD_CFLAGS = @GST_PLUGINS_BAD_CFLAGS@
@@ -416,6 +422,8 @@
 GST_PREFIX = @GST_PREFIX@
 GST_REVISION = @GST_REVISION@
 GST_TOOLS_DIR = @GST_TOOLS_DIR@
+GST_VIDEO_CFLAGS = @GST_VIDEO_CFLAGS@
+GST_VIDEO_LIBS = @GST_VIDEO_LIBS@
 GTK3_CFLAGS = @GTK3_CFLAGS@
 GTK3_GL_CFLAGS = @GTK3_GL_CFLAGS@
 GTK3_GL_LIBS = @GTK3_GL_LIBS@
@@ -517,6 +525,7 @@
 LTLIBICONV = @LTLIBICONV@
 LTLIBINTL = @LTLIBINTL@
 LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
 MANIFEST_TOOL = @MANIFEST_TOOL@
@@ -530,8 +539,6 @@
 MODPLUG_LIBS = @MODPLUG_LIBS@
 MPEG2ENC_CFLAGS = @MPEG2ENC_CFLAGS@
 MPEG2ENC_LIBS = @MPEG2ENC_LIBS@
-MPG123_CFLAGS = @MPG123_CFLAGS@
-MPG123_LIBS = @MPG123_LIBS@
 MPLEX_CFLAGS = @MPLEX_CFLAGS@
 MPLEX_LDFLAGS = @MPLEX_LDFLAGS@
 MPLEX_LIBS = @MPLEX_LIBS@
@@ -547,6 +554,8 @@
 NETTLE_LIBS = @NETTLE_LIBS@
 NM = @NM@
 NMEDIT = @NMEDIT@
+NVENCODE_CFLAGS = @NVENCODE_CFLAGS@
+NVENCODE_LIBS = @NVENCODE_LIBS@
 OBJC = @OBJC@
 OBJCDEPMODE = @OBJCDEPMODE@
 OBJCFLAGS = @OBJCFLAGS@
@@ -604,16 +613,18 @@
 PYTHON_PLATFORM = @PYTHON_PLATFORM@
 PYTHON_PREFIX = @PYTHON_PREFIX@
 PYTHON_VERSION = @PYTHON_VERSION@
+QT_ANDROID_CFLAGS = @QT_ANDROID_CFLAGS@
+QT_ANDROID_LIBS = @QT_ANDROID_LIBS@
 QT_CFLAGS = @QT_CFLAGS@
 QT_LIBS = @QT_LIBS@
+QT_MAC_CFLAGS = @QT_MAC_CFLAGS@
+QT_MAC_LIBS = @QT_MAC_LIBS@
 QT_WAYLAND_CFLAGS = @QT_WAYLAND_CFLAGS@
 QT_WAYLAND_LIBS = @QT_WAYLAND_LIBS@
 QT_X11_CFLAGS = @QT_X11_CFLAGS@
 QT_X11_LIBS = @QT_X11_LIBS@
 RANLIB = @RANLIB@
 RCC = @RCC@
-RSVG_2_36_2_CFLAGS = @RSVG_2_36_2_CFLAGS@
-RSVG_2_36_2_LIBS = @RSVG_2_36_2_LIBS@
 RSVG_CFLAGS = @RSVG_CFLAGS@
 RSVG_LIBS = @RSVG_LIBS@
 RTMP_CFLAGS = @RTMP_CFLAGS@
@@ -665,6 +676,7 @@
 VOAACENC_LIBS = @VOAACENC_LIBS@
 VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
 VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VULKAN_LIBS = @VULKAN_LIBS@
 WARNING_CFLAGS = @WARNING_CFLAGS@
 WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
 WARNING_OBJCFLAGS = @WARNING_OBJCFLAGS@
@@ -675,6 +687,7 @@
 WAYLAND_LIBS = @WAYLAND_LIBS@
 WEBP_CFLAGS = @WEBP_CFLAGS@
 WEBP_LIBS = @WEBP_LIBS@
+WGET = @WGET@
 WILDMIDI_CFLAGS = @WILDMIDI_CFLAGS@
 WILDMIDI_LIBS = @WILDMIDI_LIBS@
 WINKS_LIBS = @WINKS_LIBS@
@@ -684,6 +697,8 @@
 X11_LIBS = @X11_LIBS@
 X265_CFLAGS = @X265_CFLAGS@
 X265_LIBS = @X265_LIBS@
+XCB_CFLAGS = @XCB_CFLAGS@
+XCB_LIBS = @XCB_LIBS@
 XCOMPOSITE_CFLAGS = @XCOMPOSITE_CFLAGS@
 XCOMPOSITE_LIBS = @XCOMPOSITE_LIBS@
 XGETTEXT = @XGETTEXT@
@@ -721,7 +736,6 @@
 docdir = @docdir@
 dvidir = @dvidir@
 exec_prefix = @exec_prefix@
-gsettingsschemadir = @gsettingsschemadir@
 host = @host@
 host_alias = @host_alias@
 host_cpu = @host_cpu@
diff --git a/gst/festival/gstfestival.c b/gst/festival/gstfestival.c
index cb2d1cb..00ef82d 100644
--- a/gst/festival/gstfestival.c
+++ b/gst/festival/gstfestival.c
@@ -71,7 +71,7 @@
  * <refsect2>
  * <title>Example pipeline</title>
  * |[
- * echo 'Hello G-Streamer!' | gst-launch fdsrc fd=0 ! festival ! wavparse ! audioconvert ! alsasink
+ * echo 'Hello G-Streamer!' | gst-launch-1.0 fdsrc fd=0 ! festival ! wavparse ! audioconvert ! alsasink
  * ]|
  * </refsect2>
  */
diff --git a/gst/fieldanalysis/Makefile.in b/gst/fieldanalysis/Makefile.in
index 0d2f359..63b480e 100644
--- a/gst/fieldanalysis/Makefile.in
+++ b/gst/fieldanalysis/Makefile.in
@@ -138,16 +138,15 @@
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
 	$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
-	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gsettings.m4 \
-	$(top_srcdir)/m4/gst-fionread.m4 $(top_srcdir)/m4/gst-sdl.m4 \
-	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
-	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
-	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libgcrypt.m4 \
-	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
-	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
-	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
-	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
-	$(top_srcdir)/configure.ac
+	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gst-fionread.m4 \
+	$(top_srcdir)/m4/gst-sdl.m4 $(top_srcdir)/m4/iconv.m4 \
+	$(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \
+	$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
+	$(top_srcdir)/m4/libgcrypt.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
+	$(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \
@@ -303,6 +302,8 @@
 CLUTTER_X11_LIBS = @CLUTTER_X11_LIBS@
 CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
+CUDA_CFLAGS = @CUDA_CFLAGS@
+CUDA_LIBS = @CUDA_LIBS@
 CURL_CFLAGS = @CURL_CFLAGS@
 CURL_LIBS = @CURL_LIBS@
 CXX = @CXX@
@@ -340,6 +341,8 @@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
+EGL_CFLAGS = @EGL_CFLAGS@
+EGL_LIBS = @EGL_LIBS@
 EGREP = @EGREP@
 ERROR_CFLAGS = @ERROR_CFLAGS@
 ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
@@ -348,7 +351,6 @@
 EXIF_CFLAGS = @EXIF_CFLAGS@
 EXIF_LIBS = @EXIF_LIBS@
 FAAC_LIBS = @FAAC_LIBS@
-FAAD_IS_NEAAC = @FAAD_IS_NEAAC@
 FAAD_LIBS = @FAAD_LIBS@
 FFLAGS = @FFLAGS@
 FGREP = @FGREP@
@@ -367,8 +369,9 @@
 GIO_LIBS = @GIO_LIBS@
 GIO_UNIX_CFLAGS = @GIO_UNIX_CFLAGS@
 GIO_UNIX_LIBS = @GIO_UNIX_LIBS@
+GLES2_CFLAGS = @GLES2_CFLAGS@
+GLES2_LIBS = @GLES2_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
-GLIB_COMPILE_SCHEMAS = @GLIB_COMPILE_SCHEMAS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
@@ -385,16 +388,17 @@
 GMODULE_NO_EXPORT_LIBS = @GMODULE_NO_EXPORT_LIBS@
 GMSGFMT = @GMSGFMT@
 GMSGFMT_015 = @GMSGFMT_015@
+GNUSTL_CFLAGS = @GNUSTL_CFLAGS@
+GNUSTL_LIBS = @GNUSTL_LIBS@
 GRAPHENE_CFLAGS = @GRAPHENE_CFLAGS@
 GRAPHENE_LIBS = @GRAPHENE_LIBS@
 GREP = @GREP@
-GSETTINGS_CFLAGS = @GSETTINGS_CFLAGS@
-GSETTINGS_DISABLE_SCHEMAS_COMPILE = @GSETTINGS_DISABLE_SCHEMAS_COMPILE@
-GSETTINGS_LIBS = @GSETTINGS_LIBS@
 GSM_LIBS = @GSM_LIBS@
 GSTPB_PLUGINS_DIR = @GSTPB_PLUGINS_DIR@
 GSTPB_PREFIX = @GSTPB_PREFIX@
 GST_AGE = @GST_AGE@
+GST_ALLOCATORS_CFLAGS = @GST_ALLOCATORS_CFLAGS@
+GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
 GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
 GST_API_VERSION = @GST_API_VERSION@
 GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
@@ -420,6 +424,8 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PBUTILS_CFLAGS = @GST_PBUTILS_CFLAGS@
+GST_PBUTILS_LIBS = @GST_PBUTILS_LIBS@
 GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BAD_CFLAGS = @GST_PLUGINS_BAD_CFLAGS@
@@ -445,6 +451,8 @@
 GST_PREFIX = @GST_PREFIX@
 GST_REVISION = @GST_REVISION@
 GST_TOOLS_DIR = @GST_TOOLS_DIR@
+GST_VIDEO_CFLAGS = @GST_VIDEO_CFLAGS@
+GST_VIDEO_LIBS = @GST_VIDEO_LIBS@
 GTK3_CFLAGS = @GTK3_CFLAGS@
 GTK3_GL_CFLAGS = @GTK3_GL_CFLAGS@
 GTK3_GL_LIBS = @GTK3_GL_LIBS@
@@ -546,6 +554,7 @@
 LTLIBICONV = @LTLIBICONV@
 LTLIBINTL = @LTLIBINTL@
 LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
 MANIFEST_TOOL = @MANIFEST_TOOL@
@@ -559,8 +568,6 @@
 MODPLUG_LIBS = @MODPLUG_LIBS@
 MPEG2ENC_CFLAGS = @MPEG2ENC_CFLAGS@
 MPEG2ENC_LIBS = @MPEG2ENC_LIBS@
-MPG123_CFLAGS = @MPG123_CFLAGS@
-MPG123_LIBS = @MPG123_LIBS@
 MPLEX_CFLAGS = @MPLEX_CFLAGS@
 MPLEX_LDFLAGS = @MPLEX_LDFLAGS@
 MPLEX_LIBS = @MPLEX_LIBS@
@@ -576,6 +583,8 @@
 NETTLE_LIBS = @NETTLE_LIBS@
 NM = @NM@
 NMEDIT = @NMEDIT@
+NVENCODE_CFLAGS = @NVENCODE_CFLAGS@
+NVENCODE_LIBS = @NVENCODE_LIBS@
 OBJC = @OBJC@
 OBJCDEPMODE = @OBJCDEPMODE@
 OBJCFLAGS = @OBJCFLAGS@
@@ -633,16 +642,18 @@
 PYTHON_PLATFORM = @PYTHON_PLATFORM@
 PYTHON_PREFIX = @PYTHON_PREFIX@
 PYTHON_VERSION = @PYTHON_VERSION@
+QT_ANDROID_CFLAGS = @QT_ANDROID_CFLAGS@
+QT_ANDROID_LIBS = @QT_ANDROID_LIBS@
 QT_CFLAGS = @QT_CFLAGS@
 QT_LIBS = @QT_LIBS@
+QT_MAC_CFLAGS = @QT_MAC_CFLAGS@
+QT_MAC_LIBS = @QT_MAC_LIBS@
 QT_WAYLAND_CFLAGS = @QT_WAYLAND_CFLAGS@
 QT_WAYLAND_LIBS = @QT_WAYLAND_LIBS@
 QT_X11_CFLAGS = @QT_X11_CFLAGS@
 QT_X11_LIBS = @QT_X11_LIBS@
 RANLIB = @RANLIB@
 RCC = @RCC@
-RSVG_2_36_2_CFLAGS = @RSVG_2_36_2_CFLAGS@
-RSVG_2_36_2_LIBS = @RSVG_2_36_2_LIBS@
 RSVG_CFLAGS = @RSVG_CFLAGS@
 RSVG_LIBS = @RSVG_LIBS@
 RTMP_CFLAGS = @RTMP_CFLAGS@
@@ -694,6 +705,7 @@
 VOAACENC_LIBS = @VOAACENC_LIBS@
 VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
 VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VULKAN_LIBS = @VULKAN_LIBS@
 WARNING_CFLAGS = @WARNING_CFLAGS@
 WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
 WARNING_OBJCFLAGS = @WARNING_OBJCFLAGS@
@@ -704,6 +716,7 @@
 WAYLAND_LIBS = @WAYLAND_LIBS@
 WEBP_CFLAGS = @WEBP_CFLAGS@
 WEBP_LIBS = @WEBP_LIBS@
+WGET = @WGET@
 WILDMIDI_CFLAGS = @WILDMIDI_CFLAGS@
 WILDMIDI_LIBS = @WILDMIDI_LIBS@
 WINKS_LIBS = @WINKS_LIBS@
@@ -713,6 +726,8 @@
 X11_LIBS = @X11_LIBS@
 X265_CFLAGS = @X265_CFLAGS@
 X265_LIBS = @X265_LIBS@
+XCB_CFLAGS = @XCB_CFLAGS@
+XCB_LIBS = @XCB_LIBS@
 XCOMPOSITE_CFLAGS = @XCOMPOSITE_CFLAGS@
 XCOMPOSITE_LIBS = @XCOMPOSITE_LIBS@
 XGETTEXT = @XGETTEXT@
@@ -750,7 +765,6 @@
 docdir = @docdir@
 dvidir = @dvidir@
 exec_prefix = @exec_prefix@
-gsettingsschemadir = @gsettingsschemadir@
 host = @host@
 host_alias = @host_alias@
 host_cpu = @host_cpu@
diff --git a/gst/fieldanalysis/gstfieldanalysis.c b/gst/fieldanalysis/gstfieldanalysis.c
index b7ffd87..260eaf3 100644
--- a/gst/fieldanalysis/gstfieldanalysis.c
+++ b/gst/fieldanalysis/gstfieldanalysis.c
@@ -51,7 +51,7 @@
  * <refsect2>
  * <title>Example launch line</title>
  * |[
- * gst-launch -v uridecodebin uri=/path/to/foo.bar ! fieldanalysis ! deinterlace ! videoconvert ! autovideosink
+ * gst-launch-1.0 -v uridecodebin uri=/path/to/foo.bar ! fieldanalysis ! deinterlace ! videoconvert ! autovideosink
  * ]| This pipeline will analyse a video stream with default metrics and thresholds and output progressive frames.
  * </refsect2>
  */
diff --git a/gst/freeverb/Makefile.in b/gst/freeverb/Makefile.in
index 3a0997e..71fb484 100644
--- a/gst/freeverb/Makefile.in
+++ b/gst/freeverb/Makefile.in
@@ -117,16 +117,15 @@
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
 	$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
-	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gsettings.m4 \
-	$(top_srcdir)/m4/gst-fionread.m4 $(top_srcdir)/m4/gst-sdl.m4 \
-	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
-	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
-	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libgcrypt.m4 \
-	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
-	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
-	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
-	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
-	$(top_srcdir)/configure.ac
+	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gst-fionread.m4 \
+	$(top_srcdir)/m4/gst-sdl.m4 $(top_srcdir)/m4/iconv.m4 \
+	$(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \
+	$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
+	$(top_srcdir)/m4/libgcrypt.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
+	$(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \
@@ -277,6 +276,8 @@
 CLUTTER_X11_LIBS = @CLUTTER_X11_LIBS@
 CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
+CUDA_CFLAGS = @CUDA_CFLAGS@
+CUDA_LIBS = @CUDA_LIBS@
 CURL_CFLAGS = @CURL_CFLAGS@
 CURL_LIBS = @CURL_LIBS@
 CXX = @CXX@
@@ -314,6 +315,8 @@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
+EGL_CFLAGS = @EGL_CFLAGS@
+EGL_LIBS = @EGL_LIBS@
 EGREP = @EGREP@
 ERROR_CFLAGS = @ERROR_CFLAGS@
 ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
@@ -322,7 +325,6 @@
 EXIF_CFLAGS = @EXIF_CFLAGS@
 EXIF_LIBS = @EXIF_LIBS@
 FAAC_LIBS = @FAAC_LIBS@
-FAAD_IS_NEAAC = @FAAD_IS_NEAAC@
 FAAD_LIBS = @FAAD_LIBS@
 FFLAGS = @FFLAGS@
 FGREP = @FGREP@
@@ -341,8 +343,9 @@
 GIO_LIBS = @GIO_LIBS@
 GIO_UNIX_CFLAGS = @GIO_UNIX_CFLAGS@
 GIO_UNIX_LIBS = @GIO_UNIX_LIBS@
+GLES2_CFLAGS = @GLES2_CFLAGS@
+GLES2_LIBS = @GLES2_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
-GLIB_COMPILE_SCHEMAS = @GLIB_COMPILE_SCHEMAS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
@@ -359,16 +362,17 @@
 GMODULE_NO_EXPORT_LIBS = @GMODULE_NO_EXPORT_LIBS@
 GMSGFMT = @GMSGFMT@
 GMSGFMT_015 = @GMSGFMT_015@
+GNUSTL_CFLAGS = @GNUSTL_CFLAGS@
+GNUSTL_LIBS = @GNUSTL_LIBS@
 GRAPHENE_CFLAGS = @GRAPHENE_CFLAGS@
 GRAPHENE_LIBS = @GRAPHENE_LIBS@
 GREP = @GREP@
-GSETTINGS_CFLAGS = @GSETTINGS_CFLAGS@
-GSETTINGS_DISABLE_SCHEMAS_COMPILE = @GSETTINGS_DISABLE_SCHEMAS_COMPILE@
-GSETTINGS_LIBS = @GSETTINGS_LIBS@
 GSM_LIBS = @GSM_LIBS@
 GSTPB_PLUGINS_DIR = @GSTPB_PLUGINS_DIR@
 GSTPB_PREFIX = @GSTPB_PREFIX@
 GST_AGE = @GST_AGE@
+GST_ALLOCATORS_CFLAGS = @GST_ALLOCATORS_CFLAGS@
+GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
 GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
 GST_API_VERSION = @GST_API_VERSION@
 GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
@@ -394,6 +398,8 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PBUTILS_CFLAGS = @GST_PBUTILS_CFLAGS@
+GST_PBUTILS_LIBS = @GST_PBUTILS_LIBS@
 GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BAD_CFLAGS = @GST_PLUGINS_BAD_CFLAGS@
@@ -419,6 +425,8 @@
 GST_PREFIX = @GST_PREFIX@
 GST_REVISION = @GST_REVISION@
 GST_TOOLS_DIR = @GST_TOOLS_DIR@
+GST_VIDEO_CFLAGS = @GST_VIDEO_CFLAGS@
+GST_VIDEO_LIBS = @GST_VIDEO_LIBS@
 GTK3_CFLAGS = @GTK3_CFLAGS@
 GTK3_GL_CFLAGS = @GTK3_GL_CFLAGS@
 GTK3_GL_LIBS = @GTK3_GL_LIBS@
@@ -520,6 +528,7 @@
 LTLIBICONV = @LTLIBICONV@
 LTLIBINTL = @LTLIBINTL@
 LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
 MANIFEST_TOOL = @MANIFEST_TOOL@
@@ -533,8 +542,6 @@
 MODPLUG_LIBS = @MODPLUG_LIBS@
 MPEG2ENC_CFLAGS = @MPEG2ENC_CFLAGS@
 MPEG2ENC_LIBS = @MPEG2ENC_LIBS@
-MPG123_CFLAGS = @MPG123_CFLAGS@
-MPG123_LIBS = @MPG123_LIBS@
 MPLEX_CFLAGS = @MPLEX_CFLAGS@
 MPLEX_LDFLAGS = @MPLEX_LDFLAGS@
 MPLEX_LIBS = @MPLEX_LIBS@
@@ -550,6 +557,8 @@
 NETTLE_LIBS = @NETTLE_LIBS@
 NM = @NM@
 NMEDIT = @NMEDIT@
+NVENCODE_CFLAGS = @NVENCODE_CFLAGS@
+NVENCODE_LIBS = @NVENCODE_LIBS@
 OBJC = @OBJC@
 OBJCDEPMODE = @OBJCDEPMODE@
 OBJCFLAGS = @OBJCFLAGS@
@@ -607,16 +616,18 @@
 PYTHON_PLATFORM = @PYTHON_PLATFORM@
 PYTHON_PREFIX = @PYTHON_PREFIX@
 PYTHON_VERSION = @PYTHON_VERSION@
+QT_ANDROID_CFLAGS = @QT_ANDROID_CFLAGS@
+QT_ANDROID_LIBS = @QT_ANDROID_LIBS@
 QT_CFLAGS = @QT_CFLAGS@
 QT_LIBS = @QT_LIBS@
+QT_MAC_CFLAGS = @QT_MAC_CFLAGS@
+QT_MAC_LIBS = @QT_MAC_LIBS@
 QT_WAYLAND_CFLAGS = @QT_WAYLAND_CFLAGS@
 QT_WAYLAND_LIBS = @QT_WAYLAND_LIBS@
 QT_X11_CFLAGS = @QT_X11_CFLAGS@
 QT_X11_LIBS = @QT_X11_LIBS@
 RANLIB = @RANLIB@
 RCC = @RCC@
-RSVG_2_36_2_CFLAGS = @RSVG_2_36_2_CFLAGS@
-RSVG_2_36_2_LIBS = @RSVG_2_36_2_LIBS@
 RSVG_CFLAGS = @RSVG_CFLAGS@
 RSVG_LIBS = @RSVG_LIBS@
 RTMP_CFLAGS = @RTMP_CFLAGS@
@@ -668,6 +679,7 @@
 VOAACENC_LIBS = @VOAACENC_LIBS@
 VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
 VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VULKAN_LIBS = @VULKAN_LIBS@
 WARNING_CFLAGS = @WARNING_CFLAGS@
 WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
 WARNING_OBJCFLAGS = @WARNING_OBJCFLAGS@
@@ -678,6 +690,7 @@
 WAYLAND_LIBS = @WAYLAND_LIBS@
 WEBP_CFLAGS = @WEBP_CFLAGS@
 WEBP_LIBS = @WEBP_LIBS@
+WGET = @WGET@
 WILDMIDI_CFLAGS = @WILDMIDI_CFLAGS@
 WILDMIDI_LIBS = @WILDMIDI_LIBS@
 WINKS_LIBS = @WINKS_LIBS@
@@ -687,6 +700,8 @@
 X11_LIBS = @X11_LIBS@
 X265_CFLAGS = @X265_CFLAGS@
 X265_LIBS = @X265_LIBS@
+XCB_CFLAGS = @XCB_CFLAGS@
+XCB_LIBS = @XCB_LIBS@
 XCOMPOSITE_CFLAGS = @XCOMPOSITE_CFLAGS@
 XCOMPOSITE_LIBS = @XCOMPOSITE_LIBS@
 XGETTEXT = @XGETTEXT@
@@ -724,7 +739,6 @@
 docdir = @docdir@
 dvidir = @dvidir@
 exec_prefix = @exec_prefix@
-gsettingsschemadir = @gsettingsschemadir@
 host = @host@
 host_alias = @host_alias@
 host_cpu = @host_cpu@
diff --git a/gst/freeverb/gstfreeverb.c b/gst/freeverb/gstfreeverb.c
index 4ee3779..9500334 100644
--- a/gst/freeverb/gstfreeverb.c
+++ b/gst/freeverb/gstfreeverb.c
@@ -36,8 +36,8 @@
  * <refsect2>
  * <title>Example launch line</title>
  * |[
- * gst-launch audiotestsrc wave=saw ! freeverb ! autoaudiosink
- * gst-launch filesrc location="melo1.ogg" ! decodebin ! audioconvert ! freeverb ! autoaudiosink
+ * gst-launch-1.0 audiotestsrc wave=saw ! freeverb ! autoaudiosink
+ * gst-launch-1.0 filesrc location="melo1.ogg" ! decodebin ! audioconvert ! freeverb ! autoaudiosink
  * ]|
  * </refsect2>
  */
diff --git a/gst/frei0r/Makefile.in b/gst/frei0r/Makefile.in
index b829d16..b7ef938 100644
--- a/gst/frei0r/Makefile.in
+++ b/gst/frei0r/Makefile.in
@@ -116,16 +116,15 @@
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
 	$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
-	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gsettings.m4 \
-	$(top_srcdir)/m4/gst-fionread.m4 $(top_srcdir)/m4/gst-sdl.m4 \
-	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
-	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
-	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libgcrypt.m4 \
-	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
-	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
-	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
-	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
-	$(top_srcdir)/configure.ac
+	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gst-fionread.m4 \
+	$(top_srcdir)/m4/gst-sdl.m4 $(top_srcdir)/m4/iconv.m4 \
+	$(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \
+	$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
+	$(top_srcdir)/m4/libgcrypt.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
+	$(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \
@@ -278,6 +277,8 @@
 CLUTTER_X11_LIBS = @CLUTTER_X11_LIBS@
 CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
+CUDA_CFLAGS = @CUDA_CFLAGS@
+CUDA_LIBS = @CUDA_LIBS@
 CURL_CFLAGS = @CURL_CFLAGS@
 CURL_LIBS = @CURL_LIBS@
 CXX = @CXX@
@@ -315,6 +316,8 @@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
+EGL_CFLAGS = @EGL_CFLAGS@
+EGL_LIBS = @EGL_LIBS@
 EGREP = @EGREP@
 ERROR_CFLAGS = @ERROR_CFLAGS@
 ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
@@ -323,7 +326,6 @@
 EXIF_CFLAGS = @EXIF_CFLAGS@
 EXIF_LIBS = @EXIF_LIBS@
 FAAC_LIBS = @FAAC_LIBS@
-FAAD_IS_NEAAC = @FAAD_IS_NEAAC@
 FAAD_LIBS = @FAAD_LIBS@
 FFLAGS = @FFLAGS@
 FGREP = @FGREP@
@@ -342,8 +344,9 @@
 GIO_LIBS = @GIO_LIBS@
 GIO_UNIX_CFLAGS = @GIO_UNIX_CFLAGS@
 GIO_UNIX_LIBS = @GIO_UNIX_LIBS@
+GLES2_CFLAGS = @GLES2_CFLAGS@
+GLES2_LIBS = @GLES2_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
-GLIB_COMPILE_SCHEMAS = @GLIB_COMPILE_SCHEMAS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
@@ -360,16 +363,17 @@
 GMODULE_NO_EXPORT_LIBS = @GMODULE_NO_EXPORT_LIBS@
 GMSGFMT = @GMSGFMT@
 GMSGFMT_015 = @GMSGFMT_015@
+GNUSTL_CFLAGS = @GNUSTL_CFLAGS@
+GNUSTL_LIBS = @GNUSTL_LIBS@
 GRAPHENE_CFLAGS = @GRAPHENE_CFLAGS@
 GRAPHENE_LIBS = @GRAPHENE_LIBS@
 GREP = @GREP@
-GSETTINGS_CFLAGS = @GSETTINGS_CFLAGS@
-GSETTINGS_DISABLE_SCHEMAS_COMPILE = @GSETTINGS_DISABLE_SCHEMAS_COMPILE@
-GSETTINGS_LIBS = @GSETTINGS_LIBS@
 GSM_LIBS = @GSM_LIBS@
 GSTPB_PLUGINS_DIR = @GSTPB_PLUGINS_DIR@
 GSTPB_PREFIX = @GSTPB_PREFIX@
 GST_AGE = @GST_AGE@
+GST_ALLOCATORS_CFLAGS = @GST_ALLOCATORS_CFLAGS@
+GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
 GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
 GST_API_VERSION = @GST_API_VERSION@
 GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
@@ -395,6 +399,8 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PBUTILS_CFLAGS = @GST_PBUTILS_CFLAGS@
+GST_PBUTILS_LIBS = @GST_PBUTILS_LIBS@
 GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BAD_CFLAGS = @GST_PLUGINS_BAD_CFLAGS@
@@ -420,6 +426,8 @@
 GST_PREFIX = @GST_PREFIX@
 GST_REVISION = @GST_REVISION@
 GST_TOOLS_DIR = @GST_TOOLS_DIR@
+GST_VIDEO_CFLAGS = @GST_VIDEO_CFLAGS@
+GST_VIDEO_LIBS = @GST_VIDEO_LIBS@
 GTK3_CFLAGS = @GTK3_CFLAGS@
 GTK3_GL_CFLAGS = @GTK3_GL_CFLAGS@
 GTK3_GL_LIBS = @GTK3_GL_LIBS@
@@ -521,6 +529,7 @@
 LTLIBICONV = @LTLIBICONV@
 LTLIBINTL = @LTLIBINTL@
 LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
 MANIFEST_TOOL = @MANIFEST_TOOL@
@@ -534,8 +543,6 @@
 MODPLUG_LIBS = @MODPLUG_LIBS@
 MPEG2ENC_CFLAGS = @MPEG2ENC_CFLAGS@
 MPEG2ENC_LIBS = @MPEG2ENC_LIBS@
-MPG123_CFLAGS = @MPG123_CFLAGS@
-MPG123_LIBS = @MPG123_LIBS@
 MPLEX_CFLAGS = @MPLEX_CFLAGS@
 MPLEX_LDFLAGS = @MPLEX_LDFLAGS@
 MPLEX_LIBS = @MPLEX_LIBS@
@@ -551,6 +558,8 @@
 NETTLE_LIBS = @NETTLE_LIBS@
 NM = @NM@
 NMEDIT = @NMEDIT@
+NVENCODE_CFLAGS = @NVENCODE_CFLAGS@
+NVENCODE_LIBS = @NVENCODE_LIBS@
 OBJC = @OBJC@
 OBJCDEPMODE = @OBJCDEPMODE@
 OBJCFLAGS = @OBJCFLAGS@
@@ -608,16 +617,18 @@
 PYTHON_PLATFORM = @PYTHON_PLATFORM@
 PYTHON_PREFIX = @PYTHON_PREFIX@
 PYTHON_VERSION = @PYTHON_VERSION@
+QT_ANDROID_CFLAGS = @QT_ANDROID_CFLAGS@
+QT_ANDROID_LIBS = @QT_ANDROID_LIBS@
 QT_CFLAGS = @QT_CFLAGS@
 QT_LIBS = @QT_LIBS@
+QT_MAC_CFLAGS = @QT_MAC_CFLAGS@
+QT_MAC_LIBS = @QT_MAC_LIBS@
 QT_WAYLAND_CFLAGS = @QT_WAYLAND_CFLAGS@
 QT_WAYLAND_LIBS = @QT_WAYLAND_LIBS@
 QT_X11_CFLAGS = @QT_X11_CFLAGS@
 QT_X11_LIBS = @QT_X11_LIBS@
 RANLIB = @RANLIB@
 RCC = @RCC@
-RSVG_2_36_2_CFLAGS = @RSVG_2_36_2_CFLAGS@
-RSVG_2_36_2_LIBS = @RSVG_2_36_2_LIBS@
 RSVG_CFLAGS = @RSVG_CFLAGS@
 RSVG_LIBS = @RSVG_LIBS@
 RTMP_CFLAGS = @RTMP_CFLAGS@
@@ -669,6 +680,7 @@
 VOAACENC_LIBS = @VOAACENC_LIBS@
 VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
 VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VULKAN_LIBS = @VULKAN_LIBS@
 WARNING_CFLAGS = @WARNING_CFLAGS@
 WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
 WARNING_OBJCFLAGS = @WARNING_OBJCFLAGS@
@@ -679,6 +691,7 @@
 WAYLAND_LIBS = @WAYLAND_LIBS@
 WEBP_CFLAGS = @WEBP_CFLAGS@
 WEBP_LIBS = @WEBP_LIBS@
+WGET = @WGET@
 WILDMIDI_CFLAGS = @WILDMIDI_CFLAGS@
 WILDMIDI_LIBS = @WILDMIDI_LIBS@
 WINKS_LIBS = @WINKS_LIBS@
@@ -688,6 +701,8 @@
 X11_LIBS = @X11_LIBS@
 X265_CFLAGS = @X265_CFLAGS@
 X265_LIBS = @X265_LIBS@
+XCB_CFLAGS = @XCB_CFLAGS@
+XCB_LIBS = @XCB_LIBS@
 XCOMPOSITE_CFLAGS = @XCOMPOSITE_CFLAGS@
 XCOMPOSITE_LIBS = @XCOMPOSITE_LIBS@
 XGETTEXT = @XGETTEXT@
@@ -725,7 +740,6 @@
 docdir = @docdir@
 dvidir = @dvidir@
 exec_prefix = @exec_prefix@
-gsettingsschemadir = @gsettingsschemadir@
 host = @host@
 host_alias = @host_alias@
 host_cpu = @host_cpu@
diff --git a/gst/frei0r/gstfrei0rmixer.c b/gst/frei0r/gstfrei0rmixer.c
index 8d5f59b..f2c8453 100644
--- a/gst/frei0r/gstfrei0rmixer.c
+++ b/gst/frei0r/gstfrei0rmixer.c
@@ -216,8 +216,12 @@
       }
     }
   } else if (!gst_caps_is_equal (caps, self->caps)) {
-    if (gst_pad_peer_query_accept_caps (pad, self->caps))
+    GstCaps *upstream_caps;
+
+    upstream_caps = gst_pad_peer_query_caps (pad, NULL);
+    if (gst_caps_can_intersect (self->caps, upstream_caps))
       gst_pad_push_event (pad, gst_event_new_reconfigure ());
+    gst_caps_unref (upstream_caps);
     ret = FALSE;
   }
 
diff --git a/gst/gaudieffects/Makefile.in b/gst/gaudieffects/Makefile.in
index f81db9b..a4edbea 100644
--- a/gst/gaudieffects/Makefile.in
+++ b/gst/gaudieffects/Makefile.in
@@ -138,16 +138,15 @@
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
 	$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
-	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gsettings.m4 \
-	$(top_srcdir)/m4/gst-fionread.m4 $(top_srcdir)/m4/gst-sdl.m4 \
-	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
-	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
-	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libgcrypt.m4 \
-	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
-	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
-	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
-	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
-	$(top_srcdir)/configure.ac
+	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gst-fionread.m4 \
+	$(top_srcdir)/m4/gst-sdl.m4 $(top_srcdir)/m4/iconv.m4 \
+	$(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \
+	$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
+	$(top_srcdir)/m4/libgcrypt.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
+	$(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \
@@ -309,6 +308,8 @@
 CLUTTER_X11_LIBS = @CLUTTER_X11_LIBS@
 CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
+CUDA_CFLAGS = @CUDA_CFLAGS@
+CUDA_LIBS = @CUDA_LIBS@
 CURL_CFLAGS = @CURL_CFLAGS@
 CURL_LIBS = @CURL_LIBS@
 CXX = @CXX@
@@ -346,6 +347,8 @@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
+EGL_CFLAGS = @EGL_CFLAGS@
+EGL_LIBS = @EGL_LIBS@
 EGREP = @EGREP@
 ERROR_CFLAGS = @ERROR_CFLAGS@
 ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
@@ -354,7 +357,6 @@
 EXIF_CFLAGS = @EXIF_CFLAGS@
 EXIF_LIBS = @EXIF_LIBS@
 FAAC_LIBS = @FAAC_LIBS@
-FAAD_IS_NEAAC = @FAAD_IS_NEAAC@
 FAAD_LIBS = @FAAD_LIBS@
 FFLAGS = @FFLAGS@
 FGREP = @FGREP@
@@ -373,8 +375,9 @@
 GIO_LIBS = @GIO_LIBS@
 GIO_UNIX_CFLAGS = @GIO_UNIX_CFLAGS@
 GIO_UNIX_LIBS = @GIO_UNIX_LIBS@
+GLES2_CFLAGS = @GLES2_CFLAGS@
+GLES2_LIBS = @GLES2_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
-GLIB_COMPILE_SCHEMAS = @GLIB_COMPILE_SCHEMAS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
@@ -391,16 +394,17 @@
 GMODULE_NO_EXPORT_LIBS = @GMODULE_NO_EXPORT_LIBS@
 GMSGFMT = @GMSGFMT@
 GMSGFMT_015 = @GMSGFMT_015@
+GNUSTL_CFLAGS = @GNUSTL_CFLAGS@
+GNUSTL_LIBS = @GNUSTL_LIBS@
 GRAPHENE_CFLAGS = @GRAPHENE_CFLAGS@
 GRAPHENE_LIBS = @GRAPHENE_LIBS@
 GREP = @GREP@
-GSETTINGS_CFLAGS = @GSETTINGS_CFLAGS@
-GSETTINGS_DISABLE_SCHEMAS_COMPILE = @GSETTINGS_DISABLE_SCHEMAS_COMPILE@
-GSETTINGS_LIBS = @GSETTINGS_LIBS@
 GSM_LIBS = @GSM_LIBS@
 GSTPB_PLUGINS_DIR = @GSTPB_PLUGINS_DIR@
 GSTPB_PREFIX = @GSTPB_PREFIX@
 GST_AGE = @GST_AGE@
+GST_ALLOCATORS_CFLAGS = @GST_ALLOCATORS_CFLAGS@
+GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
 GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
 GST_API_VERSION = @GST_API_VERSION@
 GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
@@ -426,6 +430,8 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PBUTILS_CFLAGS = @GST_PBUTILS_CFLAGS@
+GST_PBUTILS_LIBS = @GST_PBUTILS_LIBS@
 GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BAD_CFLAGS = @GST_PLUGINS_BAD_CFLAGS@
@@ -451,6 +457,8 @@
 GST_PREFIX = @GST_PREFIX@
 GST_REVISION = @GST_REVISION@
 GST_TOOLS_DIR = @GST_TOOLS_DIR@
+GST_VIDEO_CFLAGS = @GST_VIDEO_CFLAGS@
+GST_VIDEO_LIBS = @GST_VIDEO_LIBS@
 GTK3_CFLAGS = @GTK3_CFLAGS@
 GTK3_GL_CFLAGS = @GTK3_GL_CFLAGS@
 GTK3_GL_LIBS = @GTK3_GL_LIBS@
@@ -552,6 +560,7 @@
 LTLIBICONV = @LTLIBICONV@
 LTLIBINTL = @LTLIBINTL@
 LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
 MANIFEST_TOOL = @MANIFEST_TOOL@
@@ -565,8 +574,6 @@
 MODPLUG_LIBS = @MODPLUG_LIBS@
 MPEG2ENC_CFLAGS = @MPEG2ENC_CFLAGS@
 MPEG2ENC_LIBS = @MPEG2ENC_LIBS@
-MPG123_CFLAGS = @MPG123_CFLAGS@
-MPG123_LIBS = @MPG123_LIBS@
 MPLEX_CFLAGS = @MPLEX_CFLAGS@
 MPLEX_LDFLAGS = @MPLEX_LDFLAGS@
 MPLEX_LIBS = @MPLEX_LIBS@
@@ -582,6 +589,8 @@
 NETTLE_LIBS = @NETTLE_LIBS@
 NM = @NM@
 NMEDIT = @NMEDIT@
+NVENCODE_CFLAGS = @NVENCODE_CFLAGS@
+NVENCODE_LIBS = @NVENCODE_LIBS@
 OBJC = @OBJC@
 OBJCDEPMODE = @OBJCDEPMODE@
 OBJCFLAGS = @OBJCFLAGS@
@@ -639,16 +648,18 @@
 PYTHON_PLATFORM = @PYTHON_PLATFORM@
 PYTHON_PREFIX = @PYTHON_PREFIX@
 PYTHON_VERSION = @PYTHON_VERSION@
+QT_ANDROID_CFLAGS = @QT_ANDROID_CFLAGS@
+QT_ANDROID_LIBS = @QT_ANDROID_LIBS@
 QT_CFLAGS = @QT_CFLAGS@
 QT_LIBS = @QT_LIBS@
+QT_MAC_CFLAGS = @QT_MAC_CFLAGS@
+QT_MAC_LIBS = @QT_MAC_LIBS@
 QT_WAYLAND_CFLAGS = @QT_WAYLAND_CFLAGS@
 QT_WAYLAND_LIBS = @QT_WAYLAND_LIBS@
 QT_X11_CFLAGS = @QT_X11_CFLAGS@
 QT_X11_LIBS = @QT_X11_LIBS@
 RANLIB = @RANLIB@
 RCC = @RCC@
-RSVG_2_36_2_CFLAGS = @RSVG_2_36_2_CFLAGS@
-RSVG_2_36_2_LIBS = @RSVG_2_36_2_LIBS@
 RSVG_CFLAGS = @RSVG_CFLAGS@
 RSVG_LIBS = @RSVG_LIBS@
 RTMP_CFLAGS = @RTMP_CFLAGS@
@@ -700,6 +711,7 @@
 VOAACENC_LIBS = @VOAACENC_LIBS@
 VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
 VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VULKAN_LIBS = @VULKAN_LIBS@
 WARNING_CFLAGS = @WARNING_CFLAGS@
 WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
 WARNING_OBJCFLAGS = @WARNING_OBJCFLAGS@
@@ -710,6 +722,7 @@
 WAYLAND_LIBS = @WAYLAND_LIBS@
 WEBP_CFLAGS = @WEBP_CFLAGS@
 WEBP_LIBS = @WEBP_LIBS@
+WGET = @WGET@
 WILDMIDI_CFLAGS = @WILDMIDI_CFLAGS@
 WILDMIDI_LIBS = @WILDMIDI_LIBS@
 WINKS_LIBS = @WINKS_LIBS@
@@ -719,6 +732,8 @@
 X11_LIBS = @X11_LIBS@
 X265_CFLAGS = @X265_CFLAGS@
 X265_LIBS = @X265_LIBS@
+XCB_CFLAGS = @XCB_CFLAGS@
+XCB_LIBS = @XCB_LIBS@
 XCOMPOSITE_CFLAGS = @XCOMPOSITE_CFLAGS@
 XCOMPOSITE_LIBS = @XCOMPOSITE_LIBS@
 XGETTEXT = @XGETTEXT@
@@ -756,7 +771,6 @@
 docdir = @docdir@
 dvidir = @dvidir@
 exec_prefix = @exec_prefix@
-gsettingsschemadir = @gsettingsschemadir@
 host = @host@
 host_alias = @host_alias@
 host_cpu = @host_cpu@
diff --git a/gst/gaudieffects/gstburn.c b/gst/gaudieffects/gstburn.c
index c82c8af..a3a3c55 100644
--- a/gst/gaudieffects/gstburn.c
+++ b/gst/gaudieffects/gstburn.c
@@ -52,7 +52,7 @@
  * <refsect2>
  * <title>Example launch line</title>
  * |[
- * gst-launch -v videotestsrc ! burn ! videoconvert ! autovideosink
+ * gst-launch-1.0 -v videotestsrc ! burn ! videoconvert ! autovideosink
  * ]| This pipeline shows the effect of burn on a test stream
  * </refsect2>
  */
diff --git a/gst/gaudieffects/gstchromium.c b/gst/gaudieffects/gstchromium.c
index 8daca3a..264bb65 100644
--- a/gst/gaudieffects/gstchromium.c
+++ b/gst/gaudieffects/gstchromium.c
@@ -52,7 +52,7 @@
  * <refsect2>
  * <title>Example launch line</title>
  * |[
- * gst-launch -v videotestsrc ! chromium ! videoconvert ! autovideosink
+ * gst-launch-1.0 -v videotestsrc ! chromium ! videoconvert ! autovideosink
  * ]| This pipeline shows the effect of chromium on a test stream
  * </refsect2>
  */
diff --git a/gst/gaudieffects/gstdilate.c b/gst/gaudieffects/gstdilate.c
index 98fa053..83a3513 100644
--- a/gst/gaudieffects/gstdilate.c
+++ b/gst/gaudieffects/gstdilate.c
@@ -52,7 +52,7 @@
  * <refsect2>
  * <title>Example launch line</title>
  * |[
- * gst-launch -v videotestsrc ! dilate ! videoconvert ! autovideosink
+ * gst-launch-1.0 -v videotestsrc ! dilate ! videoconvert ! autovideosink
  * ]| This pipeline shows the effect of dilate on a test stream
  * </refsect2>
  */
diff --git a/gst/gaudieffects/gstdodge.c b/gst/gaudieffects/gstdodge.c
index 8cf8c6e..996d894 100644
--- a/gst/gaudieffects/gstdodge.c
+++ b/gst/gaudieffects/gstdodge.c
@@ -52,7 +52,7 @@
  * <refsect2>
  * <title>Example launch line</title>
  * |[
- * gst-launch -v videotestsrc ! dodge ! videoconvert ! autovideosink
+ * gst-launch-1.0 -v videotestsrc ! dodge ! videoconvert ! autovideosink
  * ]| This pipeline shows the effect of dodge on a test stream
  * </refsect2>
  */
diff --git a/gst/gaudieffects/gstexclusion.c b/gst/gaudieffects/gstexclusion.c
index 860c5b4..a723f69 100644
--- a/gst/gaudieffects/gstexclusion.c
+++ b/gst/gaudieffects/gstexclusion.c
@@ -52,7 +52,7 @@
  * <refsect2>
  * <title>Example launch line</title>
  * |[
- * gst-launch -v videotestsrc ! exclusion ! videoconvert ! autovideosink
+ * gst-launch-1.0 -v videotestsrc ! exclusion ! videoconvert ! autovideosink
  * ]| This pipeline shows the effect of exclusion on a test stream
  * </refsect2>
  */
diff --git a/gst/gaudieffects/gstgaussblur.c b/gst/gaudieffects/gstgaussblur.c
index bbf22b6..6ba9b84 100644
--- a/gst/gaudieffects/gstgaussblur.c
+++ b/gst/gaudieffects/gstgaussblur.c
@@ -53,7 +53,7 @@
  * <refsect2>
  * <title>Example launch line</title>
  * |[
- * gst-launch -v videotestsrc ! gaussianblur ! videoconvert ! autovideosink
+ * gst-launch-1.0 -v videotestsrc ! gaussianblur ! videoconvert ! autovideosink
  * ]| This pipeline shows the effect of gaussianblur on a test stream
  * </refsect2>
  */
diff --git a/gst/gaudieffects/gstsolarize.c b/gst/gaudieffects/gstsolarize.c
index a45feb2..f5d98b8 100644
--- a/gst/gaudieffects/gstsolarize.c
+++ b/gst/gaudieffects/gstsolarize.c
@@ -52,7 +52,7 @@
  * <refsect2>
  * <title>Example launch line</title>
  * |[
- * gst-launch -v videotestsrc ! solarize ! videoconvert ! autovideosink
+ * gst-launch-1.0 -v videotestsrc ! solarize ! videoconvert ! autovideosink
  * ]| This pipeline shows the effect of solarize on a test stream
  * </refsect2>
  */
diff --git a/gst/gdp/Makefile.in b/gst/gdp/Makefile.in
index a389f91..725531f 100644
--- a/gst/gdp/Makefile.in
+++ b/gst/gdp/Makefile.in
@@ -116,16 +116,15 @@
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
 	$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
-	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gsettings.m4 \
-	$(top_srcdir)/m4/gst-fionread.m4 $(top_srcdir)/m4/gst-sdl.m4 \
-	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
-	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
-	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libgcrypt.m4 \
-	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
-	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
-	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
-	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
-	$(top_srcdir)/configure.ac
+	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gst-fionread.m4 \
+	$(top_srcdir)/m4/gst-sdl.m4 $(top_srcdir)/m4/iconv.m4 \
+	$(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \
+	$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
+	$(top_srcdir)/m4/libgcrypt.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
+	$(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \
@@ -276,6 +275,8 @@
 CLUTTER_X11_LIBS = @CLUTTER_X11_LIBS@
 CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
+CUDA_CFLAGS = @CUDA_CFLAGS@
+CUDA_LIBS = @CUDA_LIBS@
 CURL_CFLAGS = @CURL_CFLAGS@
 CURL_LIBS = @CURL_LIBS@
 CXX = @CXX@
@@ -313,6 +314,8 @@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
+EGL_CFLAGS = @EGL_CFLAGS@
+EGL_LIBS = @EGL_LIBS@
 EGREP = @EGREP@
 ERROR_CFLAGS = @ERROR_CFLAGS@
 ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
@@ -321,7 +324,6 @@
 EXIF_CFLAGS = @EXIF_CFLAGS@
 EXIF_LIBS = @EXIF_LIBS@
 FAAC_LIBS = @FAAC_LIBS@
-FAAD_IS_NEAAC = @FAAD_IS_NEAAC@
 FAAD_LIBS = @FAAD_LIBS@
 FFLAGS = @FFLAGS@
 FGREP = @FGREP@
@@ -340,8 +342,9 @@
 GIO_LIBS = @GIO_LIBS@
 GIO_UNIX_CFLAGS = @GIO_UNIX_CFLAGS@
 GIO_UNIX_LIBS = @GIO_UNIX_LIBS@
+GLES2_CFLAGS = @GLES2_CFLAGS@
+GLES2_LIBS = @GLES2_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
-GLIB_COMPILE_SCHEMAS = @GLIB_COMPILE_SCHEMAS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
@@ -358,16 +361,17 @@
 GMODULE_NO_EXPORT_LIBS = @GMODULE_NO_EXPORT_LIBS@
 GMSGFMT = @GMSGFMT@
 GMSGFMT_015 = @GMSGFMT_015@
+GNUSTL_CFLAGS = @GNUSTL_CFLAGS@
+GNUSTL_LIBS = @GNUSTL_LIBS@
 GRAPHENE_CFLAGS = @GRAPHENE_CFLAGS@
 GRAPHENE_LIBS = @GRAPHENE_LIBS@
 GREP = @GREP@
-GSETTINGS_CFLAGS = @GSETTINGS_CFLAGS@
-GSETTINGS_DISABLE_SCHEMAS_COMPILE = @GSETTINGS_DISABLE_SCHEMAS_COMPILE@
-GSETTINGS_LIBS = @GSETTINGS_LIBS@
 GSM_LIBS = @GSM_LIBS@
 GSTPB_PLUGINS_DIR = @GSTPB_PLUGINS_DIR@
 GSTPB_PREFIX = @GSTPB_PREFIX@
 GST_AGE = @GST_AGE@
+GST_ALLOCATORS_CFLAGS = @GST_ALLOCATORS_CFLAGS@
+GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
 GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
 GST_API_VERSION = @GST_API_VERSION@
 GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
@@ -393,6 +397,8 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PBUTILS_CFLAGS = @GST_PBUTILS_CFLAGS@
+GST_PBUTILS_LIBS = @GST_PBUTILS_LIBS@
 GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BAD_CFLAGS = @GST_PLUGINS_BAD_CFLAGS@
@@ -418,6 +424,8 @@
 GST_PREFIX = @GST_PREFIX@
 GST_REVISION = @GST_REVISION@
 GST_TOOLS_DIR = @GST_TOOLS_DIR@
+GST_VIDEO_CFLAGS = @GST_VIDEO_CFLAGS@
+GST_VIDEO_LIBS = @GST_VIDEO_LIBS@
 GTK3_CFLAGS = @GTK3_CFLAGS@
 GTK3_GL_CFLAGS = @GTK3_GL_CFLAGS@
 GTK3_GL_LIBS = @GTK3_GL_LIBS@
@@ -519,6 +527,7 @@
 LTLIBICONV = @LTLIBICONV@
 LTLIBINTL = @LTLIBINTL@
 LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
 MANIFEST_TOOL = @MANIFEST_TOOL@
@@ -532,8 +541,6 @@
 MODPLUG_LIBS = @MODPLUG_LIBS@
 MPEG2ENC_CFLAGS = @MPEG2ENC_CFLAGS@
 MPEG2ENC_LIBS = @MPEG2ENC_LIBS@
-MPG123_CFLAGS = @MPG123_CFLAGS@
-MPG123_LIBS = @MPG123_LIBS@
 MPLEX_CFLAGS = @MPLEX_CFLAGS@
 MPLEX_LDFLAGS = @MPLEX_LDFLAGS@
 MPLEX_LIBS = @MPLEX_LIBS@
@@ -549,6 +556,8 @@
 NETTLE_LIBS = @NETTLE_LIBS@
 NM = @NM@
 NMEDIT = @NMEDIT@
+NVENCODE_CFLAGS = @NVENCODE_CFLAGS@
+NVENCODE_LIBS = @NVENCODE_LIBS@
 OBJC = @OBJC@
 OBJCDEPMODE = @OBJCDEPMODE@
 OBJCFLAGS = @OBJCFLAGS@
@@ -606,16 +615,18 @@
 PYTHON_PLATFORM = @PYTHON_PLATFORM@
 PYTHON_PREFIX = @PYTHON_PREFIX@
 PYTHON_VERSION = @PYTHON_VERSION@
+QT_ANDROID_CFLAGS = @QT_ANDROID_CFLAGS@
+QT_ANDROID_LIBS = @QT_ANDROID_LIBS@
 QT_CFLAGS = @QT_CFLAGS@
 QT_LIBS = @QT_LIBS@
+QT_MAC_CFLAGS = @QT_MAC_CFLAGS@
+QT_MAC_LIBS = @QT_MAC_LIBS@
 QT_WAYLAND_CFLAGS = @QT_WAYLAND_CFLAGS@
 QT_WAYLAND_LIBS = @QT_WAYLAND_LIBS@
 QT_X11_CFLAGS = @QT_X11_CFLAGS@
 QT_X11_LIBS = @QT_X11_LIBS@
 RANLIB = @RANLIB@
 RCC = @RCC@
-RSVG_2_36_2_CFLAGS = @RSVG_2_36_2_CFLAGS@
-RSVG_2_36_2_LIBS = @RSVG_2_36_2_LIBS@
 RSVG_CFLAGS = @RSVG_CFLAGS@
 RSVG_LIBS = @RSVG_LIBS@
 RTMP_CFLAGS = @RTMP_CFLAGS@
@@ -667,6 +678,7 @@
 VOAACENC_LIBS = @VOAACENC_LIBS@
 VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
 VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VULKAN_LIBS = @VULKAN_LIBS@
 WARNING_CFLAGS = @WARNING_CFLAGS@
 WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
 WARNING_OBJCFLAGS = @WARNING_OBJCFLAGS@
@@ -677,6 +689,7 @@
 WAYLAND_LIBS = @WAYLAND_LIBS@
 WEBP_CFLAGS = @WEBP_CFLAGS@
 WEBP_LIBS = @WEBP_LIBS@
+WGET = @WGET@
 WILDMIDI_CFLAGS = @WILDMIDI_CFLAGS@
 WILDMIDI_LIBS = @WILDMIDI_LIBS@
 WINKS_LIBS = @WINKS_LIBS@
@@ -686,6 +699,8 @@
 X11_LIBS = @X11_LIBS@
 X265_CFLAGS = @X265_CFLAGS@
 X265_LIBS = @X265_LIBS@
+XCB_CFLAGS = @XCB_CFLAGS@
+XCB_LIBS = @XCB_LIBS@
 XCOMPOSITE_CFLAGS = @XCOMPOSITE_CFLAGS@
 XCOMPOSITE_LIBS = @XCOMPOSITE_LIBS@
 XGETTEXT = @XGETTEXT@
@@ -723,7 +738,6 @@
 docdir = @docdir@
 dvidir = @dvidir@
 exec_prefix = @exec_prefix@
-gsettingsschemadir = @gsettingsschemadir@
 host = @host@
 host_alias = @host_alias@
 host_cpu = @host_cpu@
diff --git a/gst/gdp/README b/gst/gdp/README
index 6b84afc..1056703 100644
--- a/gst/gdp/README
+++ b/gst/gdp/README
@@ -2,21 +2,21 @@
 - replacing tcpserversink protocol=gdp with gdppay ! tcpserversink:
   - raw audio:
     - server:
-      gst-launch -v audiotestsrc ! gdppay version=0.2 ! tcpserversink
+      gst-launch-1.0 -v audiotestsrc ! gdppay version=0.2 ! tcpserversink
     - client:
-      gst-launch -v tcpclientsrc protocol=gdp ! alsasink sync=FALSE
+      gst-launch-1.0 -v tcpclientsrc protocol=gdp ! alsasink sync=FALSE
 
   - vorbis packets:
     - server:
-      gst-launch -v audiotestsrc ! audioconvert ! vorbisenc ! gdppay version=0.2 ! tcpserversink
+      gst-launch-1.0 -v audiotestsrc ! audioconvert ! vorbisenc ! gdppay version=0.2 ! tcpserversink
     - client:
-      gst-launch -v tcpclientsrc protocol=gdp ! vorbisdec ! audioconvert ! alsasink sync=FALSE
+      gst-launch-1.0 -v tcpclientsrc protocol=gdp ! vorbisdec ! audioconvert ! alsasink sync=FALSE
 
   - ogg packets:
     - server:
-      gst-launch -v audiotestsrc ! audioconvert ! vorbisenc ! oggmux ! gdppay version=0.2 ! tcpserversink
+      gst-launch-1.0 -v audiotestsrc ! audioconvert ! vorbisenc ! oggmux ! gdppay version=0.2 ! tcpserversink
     - client:
-      gst-launch -v tcpclientsrc protocol=gdp ! oggdemux ! vorbisdec ! audioconvert ! alsasink sync=FALSE
+      gst-launch-1.0 -v tcpclientsrc protocol=gdp ! oggdemux ! vorbisdec ! audioconvert ! alsasink sync=FALSE
 
   In all the client pipelines, tcpclientsrc protocol=gdp can be replaced with
   tcpclientsrc ! gdpdepay
diff --git a/gst/gdp/gstgdpdepay.c b/gst/gdp/gstgdpdepay.c
index faa3642..b779a85 100644
--- a/gst/gdp/gstgdpdepay.c
+++ b/gst/gdp/gstgdpdepay.c
@@ -26,7 +26,7 @@
  *
  * <refsect2>
  * |[
- * gst-launch -v -m filesrc location=test.gdp ! gdpdepay ! xvimagesink
+ * gst-launch-1.0 -v -m filesrc location=test.gdp ! gdpdepay ! xvimagesink
  * ]| This pipeline plays back a serialized video stream as created in the
  * example for gdppay.
  * </refsect2>
@@ -45,6 +45,7 @@
 enum
 {
   PROP_0,
+  PROP_TS_OFFSET
 };
 
 static GstStaticPadTemplate gdp_depay_sink_template =
@@ -81,6 +82,10 @@
     element, GstStateChange transition);
 
 static void gst_gdp_depay_finalize (GObject * object);
+static void gst_gdp_depay_set_property (GObject * object, guint prop_id,
+    const GValue * value, GParamSpec * pspec);
+static void gst_gdp_depay_get_property (GObject * object, guint prop_id,
+    GValue * value, GParamSpec * pspec);
 
 static void
 gst_gdp_depay_class_init (GstGDPDepayClass * klass)
@@ -91,6 +96,15 @@
   gobject_class = (GObjectClass *) klass;
   gstelement_class = (GstElementClass *) klass;
 
+  gobject_class->set_property = gst_gdp_depay_set_property;
+  gobject_class->get_property = gst_gdp_depay_get_property;
+
+  g_object_class_install_property (gobject_class, PROP_TS_OFFSET,
+      g_param_spec_int64 ("ts-offset", "Timestamp Offset",
+          "Timestamp Offset",
+          G_MININT64, G_MAXINT64, 0,
+          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+
   gst_element_class_set_static_metadata (gstelement_class,
       "GDP Depayloader", "GDP/Depayloader",
       "Depayloads GStreamer Data Protocol buffers",
@@ -143,6 +157,42 @@
   GST_CALL_PARENT (G_OBJECT_CLASS, finalize, (gobject));
 }
 
+static void
+gst_gdp_depay_set_property (GObject * object, guint prop_id,
+    const GValue * value, GParamSpec * pspec)
+{
+  GstGDPDepay *this;
+
+  this = GST_GDP_DEPAY (object);
+
+  switch (prop_id) {
+    case PROP_TS_OFFSET:
+      this->ts_offset = g_value_get_int64 (value);
+      break;
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
+  }
+}
+
+static void
+gst_gdp_depay_get_property (GObject * object, guint prop_id,
+    GValue * value, GParamSpec * pspec)
+{
+  GstGDPDepay *this;
+
+  this = GST_GDP_DEPAY (object);
+
+  switch (prop_id) {
+    case PROP_TS_OFFSET:
+      g_value_set_int64 (value, this->ts_offset);
+      break;
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
+  }
+}
+
 static gboolean
 gst_gdp_depay_sink_event (GstPad * pad, GstObject * parent, GstEvent * event)
 {
@@ -317,6 +367,16 @@
           gst_adapter_flush (this->adapter, this->payload_length);
         }
 
+        if (GST_BUFFER_TIMESTAMP (buf) > -this->ts_offset)
+          GST_BUFFER_TIMESTAMP (buf) += this->ts_offset;
+        else
+          GST_BUFFER_TIMESTAMP (buf) = 0;
+
+        if (GST_BUFFER_DTS (buf) > -this->ts_offset)
+          GST_BUFFER_DTS (buf) += this->ts_offset;
+        else
+          GST_BUFFER_DTS (buf) = 0;
+
         /* set caps and push */
         GST_LOG_OBJECT (this, "deserialized buffer %p, pushing, timestamp %"
             GST_TIME_FORMAT ", duration %" GST_TIME_FORMAT
diff --git a/gst/gdp/gstgdpdepay.h b/gst/gdp/gstgdpdepay.h
index ca22c08..43bbf9d 100644
--- a/gst/gdp/gstgdpdepay.h
+++ b/gst/gdp/gstgdpdepay.h
@@ -66,6 +66,8 @@
   guint8 *header;
   guint32 payload_length;
   GstDPPayloadType payload_type;
+
+  gint64 ts_offset;
 };
 
 struct _GstGDPDepayClass
diff --git a/gst/gdp/gstgdppay.c b/gst/gdp/gstgdppay.c
index 33ac591..b428462 100644
--- a/gst/gdp/gstgdppay.c
+++ b/gst/gdp/gstgdppay.c
@@ -27,7 +27,7 @@
  *
  * <refsect2>
  * |[
- * gst-launch -v -m videotestsrc num-buffers=50 ! gdppay ! filesink location=test.gdp
+ * gst-launch-1.0 -v -m videotestsrc num-buffers=50 ! gdppay ! filesink location=test.gdp
  * ]| This pipeline creates a serialized video stream that can be played back
  * with the example shown in gdpdepay.
  * </refsect2>
@@ -577,6 +577,8 @@
     flowret = gst_gdp_queue_buffer (this, outbuffer);
     if (flowret != GST_FLOW_OK)
       goto push_error;
+  } else {
+    gst_buffer_unref (outbuffer);
   }
 
 done:
diff --git a/gst/geometrictransform/Makefile.in b/gst/geometrictransform/Makefile.in
index 4be8867..961e037 100644
--- a/gst/geometrictransform/Makefile.in
+++ b/gst/geometrictransform/Makefile.in
@@ -116,16 +116,15 @@
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
 	$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
-	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gsettings.m4 \
-	$(top_srcdir)/m4/gst-fionread.m4 $(top_srcdir)/m4/gst-sdl.m4 \
-	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
-	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
-	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libgcrypt.m4 \
-	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
-	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
-	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
-	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
-	$(top_srcdir)/configure.ac
+	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gst-fionread.m4 \
+	$(top_srcdir)/m4/gst-sdl.m4 $(top_srcdir)/m4/iconv.m4 \
+	$(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \
+	$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
+	$(top_srcdir)/m4/libgcrypt.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
+	$(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \
@@ -297,6 +296,8 @@
 CLUTTER_X11_LIBS = @CLUTTER_X11_LIBS@
 CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
+CUDA_CFLAGS = @CUDA_CFLAGS@
+CUDA_LIBS = @CUDA_LIBS@
 CURL_CFLAGS = @CURL_CFLAGS@
 CURL_LIBS = @CURL_LIBS@
 CXX = @CXX@
@@ -334,6 +335,8 @@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
+EGL_CFLAGS = @EGL_CFLAGS@
+EGL_LIBS = @EGL_LIBS@
 EGREP = @EGREP@
 ERROR_CFLAGS = @ERROR_CFLAGS@
 ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
@@ -342,7 +345,6 @@
 EXIF_CFLAGS = @EXIF_CFLAGS@
 EXIF_LIBS = @EXIF_LIBS@
 FAAC_LIBS = @FAAC_LIBS@
-FAAD_IS_NEAAC = @FAAD_IS_NEAAC@
 FAAD_LIBS = @FAAD_LIBS@
 FFLAGS = @FFLAGS@
 FGREP = @FGREP@
@@ -361,8 +363,9 @@
 GIO_LIBS = @GIO_LIBS@
 GIO_UNIX_CFLAGS = @GIO_UNIX_CFLAGS@
 GIO_UNIX_LIBS = @GIO_UNIX_LIBS@
+GLES2_CFLAGS = @GLES2_CFLAGS@
+GLES2_LIBS = @GLES2_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
-GLIB_COMPILE_SCHEMAS = @GLIB_COMPILE_SCHEMAS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
@@ -379,16 +382,17 @@
 GMODULE_NO_EXPORT_LIBS = @GMODULE_NO_EXPORT_LIBS@
 GMSGFMT = @GMSGFMT@
 GMSGFMT_015 = @GMSGFMT_015@
+GNUSTL_CFLAGS = @GNUSTL_CFLAGS@
+GNUSTL_LIBS = @GNUSTL_LIBS@
 GRAPHENE_CFLAGS = @GRAPHENE_CFLAGS@
 GRAPHENE_LIBS = @GRAPHENE_LIBS@
 GREP = @GREP@
-GSETTINGS_CFLAGS = @GSETTINGS_CFLAGS@
-GSETTINGS_DISABLE_SCHEMAS_COMPILE = @GSETTINGS_DISABLE_SCHEMAS_COMPILE@
-GSETTINGS_LIBS = @GSETTINGS_LIBS@
 GSM_LIBS = @GSM_LIBS@
 GSTPB_PLUGINS_DIR = @GSTPB_PLUGINS_DIR@
 GSTPB_PREFIX = @GSTPB_PREFIX@
 GST_AGE = @GST_AGE@
+GST_ALLOCATORS_CFLAGS = @GST_ALLOCATORS_CFLAGS@
+GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
 GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
 GST_API_VERSION = @GST_API_VERSION@
 GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
@@ -414,6 +418,8 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PBUTILS_CFLAGS = @GST_PBUTILS_CFLAGS@
+GST_PBUTILS_LIBS = @GST_PBUTILS_LIBS@
 GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BAD_CFLAGS = @GST_PLUGINS_BAD_CFLAGS@
@@ -439,6 +445,8 @@
 GST_PREFIX = @GST_PREFIX@
 GST_REVISION = @GST_REVISION@
 GST_TOOLS_DIR = @GST_TOOLS_DIR@
+GST_VIDEO_CFLAGS = @GST_VIDEO_CFLAGS@
+GST_VIDEO_LIBS = @GST_VIDEO_LIBS@
 GTK3_CFLAGS = @GTK3_CFLAGS@
 GTK3_GL_CFLAGS = @GTK3_GL_CFLAGS@
 GTK3_GL_LIBS = @GTK3_GL_LIBS@
@@ -540,6 +548,7 @@
 LTLIBICONV = @LTLIBICONV@
 LTLIBINTL = @LTLIBINTL@
 LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
 MANIFEST_TOOL = @MANIFEST_TOOL@
@@ -553,8 +562,6 @@
 MODPLUG_LIBS = @MODPLUG_LIBS@
 MPEG2ENC_CFLAGS = @MPEG2ENC_CFLAGS@
 MPEG2ENC_LIBS = @MPEG2ENC_LIBS@
-MPG123_CFLAGS = @MPG123_CFLAGS@
-MPG123_LIBS = @MPG123_LIBS@
 MPLEX_CFLAGS = @MPLEX_CFLAGS@
 MPLEX_LDFLAGS = @MPLEX_LDFLAGS@
 MPLEX_LIBS = @MPLEX_LIBS@
@@ -570,6 +577,8 @@
 NETTLE_LIBS = @NETTLE_LIBS@
 NM = @NM@
 NMEDIT = @NMEDIT@
+NVENCODE_CFLAGS = @NVENCODE_CFLAGS@
+NVENCODE_LIBS = @NVENCODE_LIBS@
 OBJC = @OBJC@
 OBJCDEPMODE = @OBJCDEPMODE@
 OBJCFLAGS = @OBJCFLAGS@
@@ -627,16 +636,18 @@
 PYTHON_PLATFORM = @PYTHON_PLATFORM@
 PYTHON_PREFIX = @PYTHON_PREFIX@
 PYTHON_VERSION = @PYTHON_VERSION@
+QT_ANDROID_CFLAGS = @QT_ANDROID_CFLAGS@
+QT_ANDROID_LIBS = @QT_ANDROID_LIBS@
 QT_CFLAGS = @QT_CFLAGS@
 QT_LIBS = @QT_LIBS@
+QT_MAC_CFLAGS = @QT_MAC_CFLAGS@
+QT_MAC_LIBS = @QT_MAC_LIBS@
 QT_WAYLAND_CFLAGS = @QT_WAYLAND_CFLAGS@
 QT_WAYLAND_LIBS = @QT_WAYLAND_LIBS@
 QT_X11_CFLAGS = @QT_X11_CFLAGS@
 QT_X11_LIBS = @QT_X11_LIBS@
 RANLIB = @RANLIB@
 RCC = @RCC@
-RSVG_2_36_2_CFLAGS = @RSVG_2_36_2_CFLAGS@
-RSVG_2_36_2_LIBS = @RSVG_2_36_2_LIBS@
 RSVG_CFLAGS = @RSVG_CFLAGS@
 RSVG_LIBS = @RSVG_LIBS@
 RTMP_CFLAGS = @RTMP_CFLAGS@
@@ -688,6 +699,7 @@
 VOAACENC_LIBS = @VOAACENC_LIBS@
 VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
 VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VULKAN_LIBS = @VULKAN_LIBS@
 WARNING_CFLAGS = @WARNING_CFLAGS@
 WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
 WARNING_OBJCFLAGS = @WARNING_OBJCFLAGS@
@@ -698,6 +710,7 @@
 WAYLAND_LIBS = @WAYLAND_LIBS@
 WEBP_CFLAGS = @WEBP_CFLAGS@
 WEBP_LIBS = @WEBP_LIBS@
+WGET = @WGET@
 WILDMIDI_CFLAGS = @WILDMIDI_CFLAGS@
 WILDMIDI_LIBS = @WILDMIDI_LIBS@
 WINKS_LIBS = @WINKS_LIBS@
@@ -707,6 +720,8 @@
 X11_LIBS = @X11_LIBS@
 X265_CFLAGS = @X265_CFLAGS@
 X265_LIBS = @X265_LIBS@
+XCB_CFLAGS = @XCB_CFLAGS@
+XCB_LIBS = @XCB_LIBS@
 XCOMPOSITE_CFLAGS = @XCOMPOSITE_CFLAGS@
 XCOMPOSITE_LIBS = @XCOMPOSITE_LIBS@
 XGETTEXT = @XGETTEXT@
@@ -744,7 +759,6 @@
 docdir = @docdir@
 dvidir = @dvidir@
 exec_prefix = @exec_prefix@
-gsettingsschemadir = @gsettingsschemadir@
 host = @host@
 host_alias = @host_alias@
 host_cpu = @host_cpu@
diff --git a/gst/geometrictransform/geometricmath.c b/gst/geometrictransform/geometricmath.c
index 1ca5a78..6c7949e 100644
--- a/gst/geometrictransform/geometricmath.c
+++ b/gst/geometrictransform/geometricmath.c
@@ -54,7 +54,7 @@
 #define B  0x100
 #define BM 0xff
 
-struct _Noise
+struct _GstGMNoise
 {
   gdouble p[2 * B + 2];
   gdouble g2[2 * B + 2][2];
@@ -69,10 +69,10 @@
   v[1] = v[1] / s;
 }
 
-Noise *
-noise_new (void)
+GstGMNoise *
+gst_gm_noise_new (void)
 {
-  Noise *noise = g_new0 (Noise, 1);
+  GstGMNoise *noise = g_new0 (GstGMNoise, 1);
   gint i, j, k;
 
   for (i = 0; i < B; i++) {
@@ -102,7 +102,7 @@
 }
 
 void
-noise_free (Noise * noise)
+gst_gm_noise_free (GstGMNoise * noise)
 {
   g_free (noise);
 }
@@ -120,7 +120,7 @@
 }
 
 gdouble
-noise_2 (Noise * noise, gdouble x, gdouble y)
+gst_gm_noise_2 (GstGMNoise * noise, gdouble x, gdouble y)
 {
   gint bx0, bx1, by0, by1, b00, b10, b01, b11;
   gdouble rx0, rx1, ry0, ry1, sx, sy, a, b, t, u, v;
@@ -169,7 +169,7 @@
  * This differs from the % operator with respect to negative numbers
  */
 gdouble
-mod_float (gdouble a, gdouble b)
+gst_gm_mod_float (gdouble a, gdouble b)
 {
   gint n = (gint) (a / b);
 
@@ -183,9 +183,9 @@
  * Returns a repeating triangle shape in the range 0..1 with wavelength 1.0
  */
 gdouble
-geometric_math_triangle (gdouble x)
+gst_gm_triangle (gdouble x)
 {
-  gdouble r = mod_float (x, 1.0);
+  gdouble r = gst_gm_mod_float (x, 1.0);
 
   return 2.0 * (r < 0.5 ? r : 1 - r);
 }
@@ -194,7 +194,7 @@
  * Hermite interpolation
  */
 gdouble
-smoothstep (gdouble edge0, gdouble edge1, gdouble x)
+gst_gm_smoothstep (gdouble edge0, gdouble edge1, gdouble x)
 {
   gdouble t = CLAMP ((x - edge0) / (edge1 - edge0), 0.0, 1.0);
   return t * t * (3.0 - 2.0 * t);
diff --git a/gst/geometrictransform/geometricmath.h b/gst/geometrictransform/geometricmath.h
index 0c6ccdc..40451d8 100644
--- a/gst/geometrictransform/geometricmath.h
+++ b/gst/geometrictransform/geometricmath.h
@@ -54,16 +54,16 @@
 
 G_BEGIN_DECLS
 
-typedef struct _Noise Noise;
+typedef struct _GstGMNoise GstGMNoise;
 
-Noise * noise_new (void);
-void noise_free (Noise * noise);
-gdouble noise_2 (Noise * noise, gdouble x, gdouble y);
+GstGMNoise * gst_gm_noise_new (void);
+void gst_gm_noise_free (GstGMNoise * noise);
+gdouble gst_gm_noise_2 (GstGMNoise * noise, gdouble x, gdouble y);
 
-gdouble mod_float (gdouble a, gdouble b);
-gdouble geometric_math_triangle (gdouble x);
+gdouble gst_gm_mod_float (gdouble a, gdouble b);
+gdouble gst_gm_triangle (gdouble x);
 
-gdouble smoothstep (gdouble edge0, gdouble edge1, gdouble x);
+gdouble gst_gm_smoothstep (gdouble edge0, gdouble edge1, gdouble x);
 
 G_END_DECLS
 
diff --git a/gst/geometrictransform/gstbulge.c b/gst/geometrictransform/gstbulge.c
index 5864c83..98a7849 100644
--- a/gst/geometrictransform/gstbulge.c
+++ b/gst/geometrictransform/gstbulge.c
@@ -41,6 +41,21 @@
  * Boston, MA 02110-1301, USA.
  */
 
+/**
+ * SECTION:element-bulge
+ * @see_also: geometrictransform
+ *
+ * Bugle is a geometric image transform element. It adds a protuberance in the
+ * center point.
+ *
+ * <refsect2>
+ * <title>Example launch line</title>
+ * |[
+ * gst-launch-1.0 -v videotestsrc ! bulge ! videoconvert ! autovideosink
+ * ]|
+ * </refsect2>
+ */
+
 #ifdef HAVE_CONFIG_H
 #  include <config.h>
 #endif
@@ -140,8 +155,8 @@
    * zoom is achieved dividing */
 
   scale =
-      1.0 / (bulge->zoom + ((1.0 - bulge->zoom) * smoothstep (0, cgt->radius,
-              r)));
+      1.0 / (bulge->zoom + ((1.0 - bulge->zoom) * gst_gm_smoothstep (0,
+              cgt->radius, r)));
 
   norm_x *= scale;
   norm_y *= scale;
diff --git a/gst/geometrictransform/gstcircle.c b/gst/geometrictransform/gstcircle.c
index cbbd415..da4f48b 100644
--- a/gst/geometrictransform/gstcircle.c
+++ b/gst/geometrictransform/gstcircle.c
@@ -47,6 +47,20 @@
  * his code.
  */
 
+/**
+ * SECTION:element-circle
+ * @see_also: geometrictransform
+ *
+ * Circle is a geometric image transform element. It warps the picture into an
+ * arc shaped form.
+ *
+ * <refsect2>
+ * <title>Example launch line</title>
+ * |[
+ * gst-launch-1.0 -v videotestsrc ! circle ! videoconvert ! autovideosink
+ * ]|
+ * </refsect2>
+ */
 
 #ifdef HAVE_CONFIG_H
 #  include <config.h>
@@ -158,7 +172,7 @@
   distance = sqrt (dx * dx + dy * dy);
   theta = atan2 (-dy, -dx) + circle->angle;
 
-  theta = mod_float (theta, 2 * G_PI);
+  theta = gst_gm_mod_float (theta, 2 * G_PI);
 
   *in_x = gt->width * theta / (circle->spread_angle + 0.0001);
   *in_y =
diff --git a/gst/geometrictransform/gstdiffuse.c b/gst/geometrictransform/gstdiffuse.c
index 97225c1..03009c7 100644
--- a/gst/geometrictransform/gstdiffuse.c
+++ b/gst/geometrictransform/gstdiffuse.c
@@ -47,6 +47,20 @@
  * his code.
  */
 
+/**
+ * SECTION:element-diffuse
+ * @see_also: geometrictransform
+ *
+ * Diffuse is a geometric image transform element. It diffuses the image by
+ * moving its pixels in random directions.
+ *
+ * <refsect2>
+ * <title>Example launch line</title>
+ * |[
+ * gst-launch-1.0 -v videotestsrc ! diffuse ! videoconvert ! autovideosink
+ * ]|
+ * </refsect2>
+ */
 
 #ifdef HAVE_CONFIG_H
 #  include <config.h>
diff --git a/gst/geometrictransform/gstfisheye.c b/gst/geometrictransform/gstfisheye.c
index 0d9f2b9..d08069c 100644
--- a/gst/geometrictransform/gstfisheye.c
+++ b/gst/geometrictransform/gstfisheye.c
@@ -41,6 +41,21 @@
  * Boston, MA 02110-1301, USA.
  */
 
+/**
+ * SECTION:element-fisheye
+ * @see_also: geometrictransform
+ *
+ * Fisheye is a geometric image transform element. It simulates a fisheye lens
+ * by zooming on the center of the image and compressing the edges.
+ *
+ * <refsect2>
+ * <title>Example launch line</title>
+ * |[
+ * gst-launch-1.0 -v videotestsrc ! fisheye ! videoconvert ! autovideosink
+ * ]|
+ * </refsect2>
+ */
+
 #ifdef HAVE_CONFIG_H
 #  include <config.h>
 #endif
diff --git a/gst/geometrictransform/gstgeometrictransform.c b/gst/geometrictransform/gstgeometrictransform.c
index 7cfaafd..94910ed 100644
--- a/gst/geometrictransform/gstgeometrictransform.c
+++ b/gst/geometrictransform/gstgeometrictransform.c
@@ -181,8 +181,8 @@
       break;
 
     case GST_GT_OFF_EDGES_PIXELS_WRAP:
-      in_x = mod_float (in_x, gt->width);
-      in_y = mod_float (in_y, gt->height);
+      in_x = gst_gm_mod_float (in_x, gt->width);
+      in_y = gst_gm_mod_float (in_y, gt->height);
       if (in_x < 0)
         in_x += gt->width;
       if (in_y < 0)
diff --git a/gst/geometrictransform/gstkaleidoscope.c b/gst/geometrictransform/gstkaleidoscope.c
index 9caf7f4..bb1bdfc 100644
--- a/gst/geometrictransform/gstkaleidoscope.c
+++ b/gst/geometrictransform/gstkaleidoscope.c
@@ -47,6 +47,20 @@
  * his code.
  */
 
+/**
+ * SECTION:element-kaleidoscope
+ * @see_also: geometrictransform
+ *
+ * The kaleidscope element applies 'kaleidoscope' geometric transform to the
+ * image.
+ *
+ * <refsect2>
+ * <title>Example launch line</title>
+ * |[
+ * gst-launch-1.0 -v videotestsrc ! kaleidoscope ! videoconvert ! autovideosink
+ * ]|
+ * </refsect2>
+ */
 
 #ifdef HAVE_CONFIG_H
 #  include <config.h>
@@ -158,12 +172,12 @@
   distance = sqrt (dx * dx + dy * dy);
   theta = atan2 (dy, dx) - kaleidoscope->angle - kaleidoscope->angle2;
 
-  theta = geometric_math_triangle (theta / G_PI * kaleidoscope->sides * 0.5);
+  theta = gst_gm_triangle (theta / G_PI * kaleidoscope->sides * 0.5);
 
   if (cgt->precalc_radius != 0) {
     gdouble radiusc = cgt->precalc_radius / cos (theta);
 
-    distance = radiusc * geometric_math_triangle (distance / radiusc);
+    distance = radiusc * gst_gm_triangle (distance / radiusc);
   }
   theta += kaleidoscope->angle;
 
diff --git a/gst/geometrictransform/gstmarble.c b/gst/geometrictransform/gstmarble.c
index 08bbd3c..6898453 100644
--- a/gst/geometrictransform/gstmarble.c
+++ b/gst/geometrictransform/gstmarble.c
@@ -47,6 +47,20 @@
  * his code.
  */
 
+/**
+ * SECTION:element-marble
+ * @see_also: geometrictransform
+ *
+ * Marble is a geometric image transform element. It applies a marbling effect
+ * to the image.
+ *
+ * <refsect2>
+ * <title>Example launch line</title>
+ * |[
+ * gst-launch-1.0 -v videotestsrc ! marble ! videoconvert ! autovideosink
+ * ]|
+ * </refsect2>
+ */
 
 #ifdef HAVE_CONFIG_H
 #  include <config.h>
@@ -158,7 +172,7 @@
 {
   GstMarble *marble = GST_MARBLE_CAST (obj);
 
-  noise_free (marble->noise);
+  gst_gm_noise_free (marble->noise);
   g_free (marble->sin_table);
   g_free (marble->cos_table);
 
@@ -172,7 +186,7 @@
   gint i;
 
   if (!marble->noise) {
-    marble->noise = noise_new ();
+    marble->noise = gst_gm_noise_new ();
   }
 
   g_free (marble->sin_table);
@@ -197,7 +211,7 @@
   GstMarble *marble = GST_MARBLE_CAST (gt);
   gint displacement;
 
-  displacement = 127 * (1 + noise_2 (marble->noise, x / marble->xscale,
+  displacement = 127 * (1 + gst_gm_noise_2 (marble->noise, x / marble->xscale,
           y / marble->xscale));
   displacement = CLAMP (displacement, 0, 255);
 
diff --git a/gst/geometrictransform/gstmarble.h b/gst/geometrictransform/gstmarble.h
index b74768f..2665775 100644
--- a/gst/geometrictransform/gstmarble.h
+++ b/gst/geometrictransform/gstmarble.h
@@ -76,7 +76,7 @@
   gdouble turbulence;
   gdouble amount;
 
-  Noise *noise;
+  GstGMNoise *noise;
   gdouble *sin_table;
   gdouble *cos_table;
 };
diff --git a/gst/geometrictransform/gstmirror.c b/gst/geometrictransform/gstmirror.c
index db8afbf..df18234 100644
--- a/gst/geometrictransform/gstmirror.c
+++ b/gst/geometrictransform/gstmirror.c
@@ -41,6 +41,21 @@
  * Boston, MA 02110-1301, USA.
  */
 
+/**
+ * SECTION:element-mirror
+ * @see_also: geometrictransform
+ *
+ * Mirror is a geometric transform element. It splits the image into two halves
+ * and reflects one over each other.
+ *
+ * <refsect2>
+ * <title>Example launch line</title>
+ * |[
+ * gst-launch-1.0 -v videotestsrc ! mirror ! videoconvert ! autovideosink
+ * ]|
+ * </refsect2>
+ */
+
 #ifdef HAVE_CONFIG_H
 #  include <config.h>
 #endif
@@ -97,23 +112,23 @@
 
   switch (prop_id) {
     case PROP_MODE:
-      {
-        gint mode;
+    {
+      gint mode;
 
-        GST_OBJECT_LOCK (filter);
-        mode = g_value_get_enum (value);
+      GST_OBJECT_LOCK (filter);
+      mode = g_value_get_enum (value);
 
-        if (mode != filter->mode) {
-          GstGeometricTransform *gt;
+      if (mode != filter->mode) {
+        GstGeometricTransform *gt;
 
-          gt = GST_GEOMETRIC_TRANSFORM_CAST (object);
-          filter->mode = mode;
-          gst_geometric_transform_set_need_remap (gt);
-        }
-
-        GST_OBJECT_UNLOCK (filter);
-        break;
+        gt = GST_GEOMETRIC_TRANSFORM_CAST (object);
+        filter->mode = mode;
+        gst_geometric_transform_set_need_remap (gt);
       }
+
+      GST_OBJECT_UNLOCK (filter);
+      break;
+    }
     default:
       G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
       break;
diff --git a/gst/geometrictransform/gstperspective.c b/gst/geometrictransform/gstperspective.c
index e9ed230..bafa1fc 100644
--- a/gst/geometrictransform/gstperspective.c
+++ b/gst/geometrictransform/gstperspective.c
@@ -47,6 +47,20 @@
  * http://docs.oracle.com/cd/E17802_01/products/products/java-media/jai/forDevelopers/jai-apidocs/javax/media/jai/PerspectiveTransform.html
  */
 
+/**
+ * SECTION:element-perspective
+ * @see_also: geometrictransform
+ *
+ * The perspective element applies a 2D perspective transform.
+ *
+ * <refsect2>
+ * <title>Example launch line</title>
+ * |[
+ * gst-launch-1.0 -v videotestsrc ! perspective ! videoconvert ! autovideosink
+ * ]|
+ * </refsect2>
+ */
+
 /* FIXME: suppress warnings for deprecated API such as GValueArray
  * with newer GLib versions (>= 2.31.0)
  *
diff --git a/gst/geometrictransform/gstpinch.c b/gst/geometrictransform/gstpinch.c
index 296b84a..d68dcd1 100644
--- a/gst/geometrictransform/gstpinch.c
+++ b/gst/geometrictransform/gstpinch.c
@@ -47,6 +47,19 @@
  * his code.
  */
 
+/**
+ * SECTION:element-pinch
+ * @see_also: geometrictransform
+ *
+ * Pinch applies a 'pinch' geometric transform to the image.
+ *
+ * <refsect2>
+ * <title>Example launch line</title>
+ * |[
+ * gst-launch-1.0 -v videotestsrc ! pinch ! videoconvert ! autovideosink
+ * ]|
+ * </refsect2>
+ */
 
 #ifdef HAVE_CONFIG_H
 #  include <config.h>
diff --git a/gst/geometrictransform/gstrotate.c b/gst/geometrictransform/gstrotate.c
index 693c898..1e03339 100644
--- a/gst/geometrictransform/gstrotate.c
+++ b/gst/geometrictransform/gstrotate.c
@@ -47,6 +47,19 @@
  * his code.
  */
 
+/**
+ * SECTION:element-rotate
+ * @see_also: geometrictransform
+ *
+ * The rotate element transforms the image by rotating it by a specified angle.
+ *
+ * <refsect2>
+ * <title>Example launch line</title>
+ * |[
+ * gst-launch-1.0 -v videotestsrc ! rotate angle=0.78 ! videoconvert ! autovideosink
+ * ]|
+ * </refsect2>
+ */
 
 #ifdef HAVE_CONFIG_H
 #  include <config.h>
diff --git a/gst/geometrictransform/gstsphere.c b/gst/geometrictransform/gstsphere.c
index a425470..5f39a47 100644
--- a/gst/geometrictransform/gstsphere.c
+++ b/gst/geometrictransform/gstsphere.c
@@ -47,6 +47,19 @@
  * his code.
  */
 
+/**
+ * SECTION:element-sphere
+ * @see_also: geometrictransform
+ *
+ * The sphere element applies a 'sphere' geometric transform to the image.
+ *
+ * <refsect2>
+ * <title>Example launch line</title>
+ * |[
+ * gst-launch-1.0 -v videotestsrc ! sphere ! videoconvert ! autovideosink
+ * ]|
+ * </refsect2>
+ */
 
 #ifdef HAVE_CONFIG_H
 #  include <config.h>
diff --git a/gst/geometrictransform/gstsquare.c b/gst/geometrictransform/gstsquare.c
index 8e4c99c..4b044f1 100644
--- a/gst/geometrictransform/gstsquare.c
+++ b/gst/geometrictransform/gstsquare.c
@@ -41,6 +41,20 @@
  * Boston, MA 02110-1301, USA.
  */
 
+/**
+ * SECTION:element-square
+ * @see_also: geometrictransform
+ *
+ * The square element distorts the center part of the image into a square.
+ *
+ * <refsect2>
+ * <title>Example launch line</title>
+ * |[
+ * gst-launch-1.0 -v videotestsrc ! square zoom=100 ! videoconvert ! autovideosink
+ * ]|
+ * </refsect2>
+ */
+
 #ifdef HAVE_CONFIG_H
 #  include <config.h>
 #endif
@@ -157,12 +171,12 @@
   /* zoom at the center, smoothstep around half quadrant and get back to normal */
   norm_x *=
       (1.0 / square->zoom) * (1.0 + (square->zoom -
-          1.0) * smoothstep (square->width - 0.125, square->width + 0.125,
-          ABS (norm_x)));
+          1.0) * gst_gm_smoothstep (square->width - 0.125,
+          square->width + 0.125, ABS (norm_x)));
   norm_y *=
       (1.0 / square->zoom) * (1.0 + (square->zoom -
-          1.0) * smoothstep (square->height - 0.125, square->height + 0.125,
-          ABS (norm_y)));
+          1.0) * gst_gm_smoothstep (square->height - 0.125,
+          square->height + 0.125, ABS (norm_y)));
 
   /* unnormalize */
   *in_x = 0.5 * (norm_x + 1.0) * width;
diff --git a/gst/geometrictransform/gststretch.c b/gst/geometrictransform/gststretch.c
index f9b3344..61eed37 100644
--- a/gst/geometrictransform/gststretch.c
+++ b/gst/geometrictransform/gststretch.c
@@ -41,6 +41,20 @@
  * Boston, MA 02110-1301, USA.
  */
 
+/**
+ * SECTION:element-stretch
+ * @see_also: geometrictransform
+ *
+ * The stretch element stretches the image in a circle around the center point.
+ *
+ * <refsect2>
+ * <title>Example launch line</title>
+ * |[
+ * gst-launch-1.0 -v videotestsrc ! stretch ! videoconvert ! autovideosink
+ * ]|
+ * </refsect2>
+ */
+
 #ifdef HAVE_CONFIG_H
 #  include <config.h>
 #endif
@@ -145,8 +159,8 @@
   a = 1.0 + (MAX_SHRINK_AMOUNT - 1.0) * stretch->intensity;
   b = a - 1.0;
 
-  norm_x *= a - b * smoothstep (0.0, cgt->radius, r);
-  norm_y *= a - b * smoothstep (0.0, cgt->radius, r);
+  norm_x *= a - b * gst_gm_smoothstep (0.0, cgt->radius, r);
+  norm_y *= a - b * gst_gm_smoothstep (0.0, cgt->radius, r);
 
   /* unnormalize */
   *in_x = (0.5 * norm_x + cgt->x_center) * width;
diff --git a/gst/geometrictransform/gsttunnel.c b/gst/geometrictransform/gsttunnel.c
index a71f0ef..94b6070 100644
--- a/gst/geometrictransform/gsttunnel.c
+++ b/gst/geometrictransform/gsttunnel.c
@@ -41,6 +41,21 @@
  * Boston, MA 02110-1301, USA.
  */
 
+/**
+ * SECTION:element-tunnel
+ * @see_also: geometrictransform
+ *
+ * Tunnel is a geometric image transform element. It applies a light tunnel
+ * effect.
+ *
+ * <refsect2>
+ * <title>Example launch line</title>
+ * |[
+ * gst-launch-1.0 -v videotestsrc ! tunnel ! videoconvert ! autovideosink
+ * ]|
+ * </refsect2>
+ */
+
 #ifdef HAVE_CONFIG_H
 #  include <config.h>
 #endif
diff --git a/gst/geometrictransform/gsttwirl.c b/gst/geometrictransform/gsttwirl.c
index 33222c8..962d3ba 100644
--- a/gst/geometrictransform/gsttwirl.c
+++ b/gst/geometrictransform/gsttwirl.c
@@ -47,6 +47,19 @@
  * his code.
  */
 
+/**
+ * SECTION:element-twirl
+ * @see_also: geometrictransform
+ *
+ * The twirl element twists the image from the center out.
+ *
+ * <refsect2>
+ * <title>Example launch line</title>
+ * |[
+ * gst-launch-1.0 -v videotestsrc ! twirl ! videoconvert ! autovideosink
+ * ]|
+ * </refsect2>
+ */
 
 #ifdef HAVE_CONFIG_H
 #  include <config.h>
diff --git a/gst/geometrictransform/gstwaterripple.c b/gst/geometrictransform/gstwaterripple.c
index 4daff2a..96af6e8 100644
--- a/gst/geometrictransform/gstwaterripple.c
+++ b/gst/geometrictransform/gstwaterripple.c
@@ -47,6 +47,19 @@
  * his code.
  */
 
+/**
+ * SECTION:element-waterripple
+ * @see_also: geometrictransform
+ *
+ * The waterripple element creates a water ripple effect on the image.
+ *
+ * <refsect2>
+ * <title>Example launch line</title>
+ * |[
+ * gst-launch-1.0 -v videotestsrc ! waterripple ! videoconvert ! autovideosink
+ * ]|
+ * </refsect2>
+ */
 
 #ifdef HAVE_CONFIG_H
 #  include <config.h>
diff --git a/gst/hdvparse/Makefile.in b/gst/hdvparse/Makefile.in
index 2072b90..c3f3910 100644
--- a/gst/hdvparse/Makefile.in
+++ b/gst/hdvparse/Makefile.in
@@ -116,16 +116,15 @@
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
 	$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
-	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gsettings.m4 \
-	$(top_srcdir)/m4/gst-fionread.m4 $(top_srcdir)/m4/gst-sdl.m4 \
-	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
-	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
-	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libgcrypt.m4 \
-	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
-	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
-	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
-	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
-	$(top_srcdir)/configure.ac
+	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gst-fionread.m4 \
+	$(top_srcdir)/m4/gst-sdl.m4 $(top_srcdir)/m4/iconv.m4 \
+	$(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \
+	$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
+	$(top_srcdir)/m4/libgcrypt.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
+	$(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \
@@ -274,6 +273,8 @@
 CLUTTER_X11_LIBS = @CLUTTER_X11_LIBS@
 CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
+CUDA_CFLAGS = @CUDA_CFLAGS@
+CUDA_LIBS = @CUDA_LIBS@
 CURL_CFLAGS = @CURL_CFLAGS@
 CURL_LIBS = @CURL_LIBS@
 CXX = @CXX@
@@ -311,6 +312,8 @@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
+EGL_CFLAGS = @EGL_CFLAGS@
+EGL_LIBS = @EGL_LIBS@
 EGREP = @EGREP@
 ERROR_CFLAGS = @ERROR_CFLAGS@
 ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
@@ -319,7 +322,6 @@
 EXIF_CFLAGS = @EXIF_CFLAGS@
 EXIF_LIBS = @EXIF_LIBS@
 FAAC_LIBS = @FAAC_LIBS@
-FAAD_IS_NEAAC = @FAAD_IS_NEAAC@
 FAAD_LIBS = @FAAD_LIBS@
 FFLAGS = @FFLAGS@
 FGREP = @FGREP@
@@ -338,8 +340,9 @@
 GIO_LIBS = @GIO_LIBS@
 GIO_UNIX_CFLAGS = @GIO_UNIX_CFLAGS@
 GIO_UNIX_LIBS = @GIO_UNIX_LIBS@
+GLES2_CFLAGS = @GLES2_CFLAGS@
+GLES2_LIBS = @GLES2_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
-GLIB_COMPILE_SCHEMAS = @GLIB_COMPILE_SCHEMAS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
@@ -356,16 +359,17 @@
 GMODULE_NO_EXPORT_LIBS = @GMODULE_NO_EXPORT_LIBS@
 GMSGFMT = @GMSGFMT@
 GMSGFMT_015 = @GMSGFMT_015@
+GNUSTL_CFLAGS = @GNUSTL_CFLAGS@
+GNUSTL_LIBS = @GNUSTL_LIBS@
 GRAPHENE_CFLAGS = @GRAPHENE_CFLAGS@
 GRAPHENE_LIBS = @GRAPHENE_LIBS@
 GREP = @GREP@
-GSETTINGS_CFLAGS = @GSETTINGS_CFLAGS@
-GSETTINGS_DISABLE_SCHEMAS_COMPILE = @GSETTINGS_DISABLE_SCHEMAS_COMPILE@
-GSETTINGS_LIBS = @GSETTINGS_LIBS@
 GSM_LIBS = @GSM_LIBS@
 GSTPB_PLUGINS_DIR = @GSTPB_PLUGINS_DIR@
 GSTPB_PREFIX = @GSTPB_PREFIX@
 GST_AGE = @GST_AGE@
+GST_ALLOCATORS_CFLAGS = @GST_ALLOCATORS_CFLAGS@
+GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
 GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
 GST_API_VERSION = @GST_API_VERSION@
 GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
@@ -391,6 +395,8 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PBUTILS_CFLAGS = @GST_PBUTILS_CFLAGS@
+GST_PBUTILS_LIBS = @GST_PBUTILS_LIBS@
 GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BAD_CFLAGS = @GST_PLUGINS_BAD_CFLAGS@
@@ -416,6 +422,8 @@
 GST_PREFIX = @GST_PREFIX@
 GST_REVISION = @GST_REVISION@
 GST_TOOLS_DIR = @GST_TOOLS_DIR@
+GST_VIDEO_CFLAGS = @GST_VIDEO_CFLAGS@
+GST_VIDEO_LIBS = @GST_VIDEO_LIBS@
 GTK3_CFLAGS = @GTK3_CFLAGS@
 GTK3_GL_CFLAGS = @GTK3_GL_CFLAGS@
 GTK3_GL_LIBS = @GTK3_GL_LIBS@
@@ -517,6 +525,7 @@
 LTLIBICONV = @LTLIBICONV@
 LTLIBINTL = @LTLIBINTL@
 LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
 MANIFEST_TOOL = @MANIFEST_TOOL@
@@ -530,8 +539,6 @@
 MODPLUG_LIBS = @MODPLUG_LIBS@
 MPEG2ENC_CFLAGS = @MPEG2ENC_CFLAGS@
 MPEG2ENC_LIBS = @MPEG2ENC_LIBS@
-MPG123_CFLAGS = @MPG123_CFLAGS@
-MPG123_LIBS = @MPG123_LIBS@
 MPLEX_CFLAGS = @MPLEX_CFLAGS@
 MPLEX_LDFLAGS = @MPLEX_LDFLAGS@
 MPLEX_LIBS = @MPLEX_LIBS@
@@ -547,6 +554,8 @@
 NETTLE_LIBS = @NETTLE_LIBS@
 NM = @NM@
 NMEDIT = @NMEDIT@
+NVENCODE_CFLAGS = @NVENCODE_CFLAGS@
+NVENCODE_LIBS = @NVENCODE_LIBS@
 OBJC = @OBJC@
 OBJCDEPMODE = @OBJCDEPMODE@
 OBJCFLAGS = @OBJCFLAGS@
@@ -604,16 +613,18 @@
 PYTHON_PLATFORM = @PYTHON_PLATFORM@
 PYTHON_PREFIX = @PYTHON_PREFIX@
 PYTHON_VERSION = @PYTHON_VERSION@
+QT_ANDROID_CFLAGS = @QT_ANDROID_CFLAGS@
+QT_ANDROID_LIBS = @QT_ANDROID_LIBS@
 QT_CFLAGS = @QT_CFLAGS@
 QT_LIBS = @QT_LIBS@
+QT_MAC_CFLAGS = @QT_MAC_CFLAGS@
+QT_MAC_LIBS = @QT_MAC_LIBS@
 QT_WAYLAND_CFLAGS = @QT_WAYLAND_CFLAGS@
 QT_WAYLAND_LIBS = @QT_WAYLAND_LIBS@
 QT_X11_CFLAGS = @QT_X11_CFLAGS@
 QT_X11_LIBS = @QT_X11_LIBS@
 RANLIB = @RANLIB@
 RCC = @RCC@
-RSVG_2_36_2_CFLAGS = @RSVG_2_36_2_CFLAGS@
-RSVG_2_36_2_LIBS = @RSVG_2_36_2_LIBS@
 RSVG_CFLAGS = @RSVG_CFLAGS@
 RSVG_LIBS = @RSVG_LIBS@
 RTMP_CFLAGS = @RTMP_CFLAGS@
@@ -665,6 +676,7 @@
 VOAACENC_LIBS = @VOAACENC_LIBS@
 VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
 VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VULKAN_LIBS = @VULKAN_LIBS@
 WARNING_CFLAGS = @WARNING_CFLAGS@
 WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
 WARNING_OBJCFLAGS = @WARNING_OBJCFLAGS@
@@ -675,6 +687,7 @@
 WAYLAND_LIBS = @WAYLAND_LIBS@
 WEBP_CFLAGS = @WEBP_CFLAGS@
 WEBP_LIBS = @WEBP_LIBS@
+WGET = @WGET@
 WILDMIDI_CFLAGS = @WILDMIDI_CFLAGS@
 WILDMIDI_LIBS = @WILDMIDI_LIBS@
 WINKS_LIBS = @WINKS_LIBS@
@@ -684,6 +697,8 @@
 X11_LIBS = @X11_LIBS@
 X265_CFLAGS = @X265_CFLAGS@
 X265_LIBS = @X265_LIBS@
+XCB_CFLAGS = @XCB_CFLAGS@
+XCB_LIBS = @XCB_LIBS@
 XCOMPOSITE_CFLAGS = @XCOMPOSITE_CFLAGS@
 XCOMPOSITE_LIBS = @XCOMPOSITE_LIBS@
 XGETTEXT = @XGETTEXT@
@@ -721,7 +736,6 @@
 docdir = @docdir@
 dvidir = @dvidir@
 exec_prefix = @exec_prefix@
-gsettingsschemadir = @gsettingsschemadir@
 host = @host@
 host_alias = @host_alias@
 host_cpu = @host_cpu@
diff --git a/gst/id3tag/Makefile.in b/gst/id3tag/Makefile.in
index bdb12d2..d1884a8 100644
--- a/gst/id3tag/Makefile.in
+++ b/gst/id3tag/Makefile.in
@@ -116,16 +116,15 @@
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
 	$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
-	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gsettings.m4 \
-	$(top_srcdir)/m4/gst-fionread.m4 $(top_srcdir)/m4/gst-sdl.m4 \
-	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
-	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
-	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libgcrypt.m4 \
-	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
-	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
-	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
-	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
-	$(top_srcdir)/configure.ac
+	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gst-fionread.m4 \
+	$(top_srcdir)/m4/gst-sdl.m4 $(top_srcdir)/m4/iconv.m4 \
+	$(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \
+	$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
+	$(top_srcdir)/m4/libgcrypt.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
+	$(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \
@@ -275,6 +274,8 @@
 CLUTTER_X11_LIBS = @CLUTTER_X11_LIBS@
 CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
+CUDA_CFLAGS = @CUDA_CFLAGS@
+CUDA_LIBS = @CUDA_LIBS@
 CURL_CFLAGS = @CURL_CFLAGS@
 CURL_LIBS = @CURL_LIBS@
 CXX = @CXX@
@@ -312,6 +313,8 @@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
+EGL_CFLAGS = @EGL_CFLAGS@
+EGL_LIBS = @EGL_LIBS@
 EGREP = @EGREP@
 ERROR_CFLAGS = @ERROR_CFLAGS@
 ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
@@ -320,7 +323,6 @@
 EXIF_CFLAGS = @EXIF_CFLAGS@
 EXIF_LIBS = @EXIF_LIBS@
 FAAC_LIBS = @FAAC_LIBS@
-FAAD_IS_NEAAC = @FAAD_IS_NEAAC@
 FAAD_LIBS = @FAAD_LIBS@
 FFLAGS = @FFLAGS@
 FGREP = @FGREP@
@@ -339,8 +341,9 @@
 GIO_LIBS = @GIO_LIBS@
 GIO_UNIX_CFLAGS = @GIO_UNIX_CFLAGS@
 GIO_UNIX_LIBS = @GIO_UNIX_LIBS@
+GLES2_CFLAGS = @GLES2_CFLAGS@
+GLES2_LIBS = @GLES2_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
-GLIB_COMPILE_SCHEMAS = @GLIB_COMPILE_SCHEMAS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
@@ -357,16 +360,17 @@
 GMODULE_NO_EXPORT_LIBS = @GMODULE_NO_EXPORT_LIBS@
 GMSGFMT = @GMSGFMT@
 GMSGFMT_015 = @GMSGFMT_015@
+GNUSTL_CFLAGS = @GNUSTL_CFLAGS@
+GNUSTL_LIBS = @GNUSTL_LIBS@
 GRAPHENE_CFLAGS = @GRAPHENE_CFLAGS@
 GRAPHENE_LIBS = @GRAPHENE_LIBS@
 GREP = @GREP@
-GSETTINGS_CFLAGS = @GSETTINGS_CFLAGS@
-GSETTINGS_DISABLE_SCHEMAS_COMPILE = @GSETTINGS_DISABLE_SCHEMAS_COMPILE@
-GSETTINGS_LIBS = @GSETTINGS_LIBS@
 GSM_LIBS = @GSM_LIBS@
 GSTPB_PLUGINS_DIR = @GSTPB_PLUGINS_DIR@
 GSTPB_PREFIX = @GSTPB_PREFIX@
 GST_AGE = @GST_AGE@
+GST_ALLOCATORS_CFLAGS = @GST_ALLOCATORS_CFLAGS@
+GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
 GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
 GST_API_VERSION = @GST_API_VERSION@
 GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
@@ -392,6 +396,8 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PBUTILS_CFLAGS = @GST_PBUTILS_CFLAGS@
+GST_PBUTILS_LIBS = @GST_PBUTILS_LIBS@
 GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BAD_CFLAGS = @GST_PLUGINS_BAD_CFLAGS@
@@ -417,6 +423,8 @@
 GST_PREFIX = @GST_PREFIX@
 GST_REVISION = @GST_REVISION@
 GST_TOOLS_DIR = @GST_TOOLS_DIR@
+GST_VIDEO_CFLAGS = @GST_VIDEO_CFLAGS@
+GST_VIDEO_LIBS = @GST_VIDEO_LIBS@
 GTK3_CFLAGS = @GTK3_CFLAGS@
 GTK3_GL_CFLAGS = @GTK3_GL_CFLAGS@
 GTK3_GL_LIBS = @GTK3_GL_LIBS@
@@ -518,6 +526,7 @@
 LTLIBICONV = @LTLIBICONV@
 LTLIBINTL = @LTLIBINTL@
 LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
 MANIFEST_TOOL = @MANIFEST_TOOL@
@@ -531,8 +540,6 @@
 MODPLUG_LIBS = @MODPLUG_LIBS@
 MPEG2ENC_CFLAGS = @MPEG2ENC_CFLAGS@
 MPEG2ENC_LIBS = @MPEG2ENC_LIBS@
-MPG123_CFLAGS = @MPG123_CFLAGS@
-MPG123_LIBS = @MPG123_LIBS@
 MPLEX_CFLAGS = @MPLEX_CFLAGS@
 MPLEX_LDFLAGS = @MPLEX_LDFLAGS@
 MPLEX_LIBS = @MPLEX_LIBS@
@@ -548,6 +555,8 @@
 NETTLE_LIBS = @NETTLE_LIBS@
 NM = @NM@
 NMEDIT = @NMEDIT@
+NVENCODE_CFLAGS = @NVENCODE_CFLAGS@
+NVENCODE_LIBS = @NVENCODE_LIBS@
 OBJC = @OBJC@
 OBJCDEPMODE = @OBJCDEPMODE@
 OBJCFLAGS = @OBJCFLAGS@
@@ -605,16 +614,18 @@
 PYTHON_PLATFORM = @PYTHON_PLATFORM@
 PYTHON_PREFIX = @PYTHON_PREFIX@
 PYTHON_VERSION = @PYTHON_VERSION@
+QT_ANDROID_CFLAGS = @QT_ANDROID_CFLAGS@
+QT_ANDROID_LIBS = @QT_ANDROID_LIBS@
 QT_CFLAGS = @QT_CFLAGS@
 QT_LIBS = @QT_LIBS@
+QT_MAC_CFLAGS = @QT_MAC_CFLAGS@
+QT_MAC_LIBS = @QT_MAC_LIBS@
 QT_WAYLAND_CFLAGS = @QT_WAYLAND_CFLAGS@
 QT_WAYLAND_LIBS = @QT_WAYLAND_LIBS@
 QT_X11_CFLAGS = @QT_X11_CFLAGS@
 QT_X11_LIBS = @QT_X11_LIBS@
 RANLIB = @RANLIB@
 RCC = @RCC@
-RSVG_2_36_2_CFLAGS = @RSVG_2_36_2_CFLAGS@
-RSVG_2_36_2_LIBS = @RSVG_2_36_2_LIBS@
 RSVG_CFLAGS = @RSVG_CFLAGS@
 RSVG_LIBS = @RSVG_LIBS@
 RTMP_CFLAGS = @RTMP_CFLAGS@
@@ -666,6 +677,7 @@
 VOAACENC_LIBS = @VOAACENC_LIBS@
 VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
 VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VULKAN_LIBS = @VULKAN_LIBS@
 WARNING_CFLAGS = @WARNING_CFLAGS@
 WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
 WARNING_OBJCFLAGS = @WARNING_OBJCFLAGS@
@@ -676,6 +688,7 @@
 WAYLAND_LIBS = @WAYLAND_LIBS@
 WEBP_CFLAGS = @WEBP_CFLAGS@
 WEBP_LIBS = @WEBP_LIBS@
+WGET = @WGET@
 WILDMIDI_CFLAGS = @WILDMIDI_CFLAGS@
 WILDMIDI_LIBS = @WILDMIDI_LIBS@
 WINKS_LIBS = @WINKS_LIBS@
@@ -685,6 +698,8 @@
 X11_LIBS = @X11_LIBS@
 X265_CFLAGS = @X265_CFLAGS@
 X265_LIBS = @X265_LIBS@
+XCB_CFLAGS = @XCB_CFLAGS@
+XCB_LIBS = @XCB_LIBS@
 XCOMPOSITE_CFLAGS = @XCOMPOSITE_CFLAGS@
 XCOMPOSITE_LIBS = @XCOMPOSITE_LIBS@
 XGETTEXT = @XGETTEXT@
@@ -722,7 +737,6 @@
 docdir = @docdir@
 dvidir = @dvidir@
 exec_prefix = @exec_prefix@
-gsettingsschemadir = @gsettingsschemadir@
 host = @host@
 host_alias = @host_alias@
 host_cpu = @host_cpu@
diff --git a/gst/id3tag/gstid3mux.c b/gst/id3tag/gstid3mux.c
index 89a8127..6417538 100644
--- a/gst/id3tag/gstid3mux.c
+++ b/gst/id3tag/gstid3mux.c
@@ -37,12 +37,12 @@
  * <refsect2>
  * <title>Example pipelines</title>
  * |[
- * gst-launch -v filesrc location=foo.ogg ! decodebin ! audioconvert ! lame ! id3mux ! filesink location=foo.mp3
+ * gst-launch-1.0 -v filesrc location=foo.ogg ! decodebin ! audioconvert ! id3mux ! filesink location=foo.mp3
  * ]| A pipeline that transcodes a file from Ogg/Vorbis to mp3 format with
  * ID3 tags that contain the same metadata as the the Ogg/Vorbis file.
  * Make sure the Ogg/Vorbis file actually has comments to preserve.
  * |[
- * gst-launch -m filesrc location=foo.mp3 ! id3demux ! fakesink silent=TRUE 2&gt; /dev/null | grep taglist
+ * gst-launch-1.0 -m filesrc location=foo.mp3 ! id3demux ! fakesink silent=TRUE
  * ]| Verify that tags have been written.
  * </refsect2>
  */
diff --git a/gst/id3tag/id3tag.c b/gst/id3tag/id3tag.c
index c12a77c..3a602d1 100644
--- a/gst/id3tag/id3tag.c
+++ b/gst/id3tag/id3tag.c
@@ -462,7 +462,58 @@
   g_free (strings);
 }
 
-/* FIXME: id3v2-private frames need to be extracted as samples */
+static void
+add_private_data_tag (GstId3v2Tag * id3v2tag, const GstTagList * list,
+    const gchar * tag, guint num_tags, const gchar * frame_id)
+{
+  gint n;
+
+  for (n = 0; n < num_tags; ++n) {
+    GstId3v2Frame frame;
+    GstSample *sample = NULL;
+    const GstStructure *structure = NULL;
+    GstBuffer *binary = NULL;
+    GstBuffer *priv_frame = NULL;
+    const gchar *owner_str = NULL;
+    guint owner_len = 0;
+    GstMapInfo mapinfo;
+
+    if (!gst_tag_list_get_sample_index (list, tag, n, &sample))
+      continue;
+
+    structure = gst_sample_get_info (sample);
+    if (structure != NULL
+        && !strcmp (gst_structure_get_name (structure), "ID3PrivateFrame")) {
+      owner_str = gst_structure_get_string (structure, "owner");
+
+      if (owner_str != NULL) {
+        owner_len = strlen (owner_str) + 1;
+        priv_frame = gst_buffer_new_and_alloc (owner_len);
+        gst_buffer_fill (priv_frame, 0, owner_str, owner_len);
+
+        binary = gst_buffer_ref (gst_sample_get_buffer (sample));
+        priv_frame = gst_buffer_append (priv_frame, binary);
+
+        id3v2_frame_init (&frame, frame_id, 0);
+
+        if (gst_buffer_map (priv_frame, &mapinfo, GST_MAP_READ)) {
+          id3v2_frame_write_bytes (&frame, mapinfo.data, mapinfo.size);
+          g_array_append_val (id3v2tag->frames, frame);
+          gst_buffer_unmap (priv_frame, &mapinfo);
+        } else {
+          GST_WARNING ("Couldn't map priv frame tag buffer");
+          id3v2_frame_unset (&frame);
+        }
+
+        gst_buffer_unref (priv_frame);
+        gst_sample_unref (sample);
+      }
+    } else {
+      GST_WARNING ("Couldn't find ID3PrivateFrame structure");
+    }
+  }
+}
+
 static void
 add_id3v2frame_tag (GstId3v2Tag * id3v2tag, const GstTagList * list,
     const gchar * tag, guint num_tags, const gchar * unused)
@@ -1095,6 +1146,7 @@
   GST_TAG_MUSICAL_KEY, add_text_tag, "TKEY"}, {
 
     /* Private frames */
+  GST_TAG_PRIVATE_DATA, add_private_data_tag, "PRIV"}, {
   GST_ID3_DEMUX_TAG_ID3V2_FRAME, add_id3v2frame_tag, NULL}, {
 
     /* Track and album numbers */
diff --git a/gst/inter/Makefile.in b/gst/inter/Makefile.in
index 9b89b37..47d7ccd 100644
--- a/gst/inter/Makefile.in
+++ b/gst/inter/Makefile.in
@@ -118,16 +118,15 @@
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
 	$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
-	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gsettings.m4 \
-	$(top_srcdir)/m4/gst-fionread.m4 $(top_srcdir)/m4/gst-sdl.m4 \
-	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
-	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
-	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libgcrypt.m4 \
-	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
-	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
-	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
-	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
-	$(top_srcdir)/configure.ac
+	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gst-fionread.m4 \
+	$(top_srcdir)/m4/gst-sdl.m4 $(top_srcdir)/m4/iconv.m4 \
+	$(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \
+	$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
+	$(top_srcdir)/m4/libgcrypt.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
+	$(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \
@@ -291,6 +290,8 @@
 CLUTTER_X11_LIBS = @CLUTTER_X11_LIBS@
 CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
+CUDA_CFLAGS = @CUDA_CFLAGS@
+CUDA_LIBS = @CUDA_LIBS@
 CURL_CFLAGS = @CURL_CFLAGS@
 CURL_LIBS = @CURL_LIBS@
 CXX = @CXX@
@@ -328,6 +329,8 @@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
+EGL_CFLAGS = @EGL_CFLAGS@
+EGL_LIBS = @EGL_LIBS@
 EGREP = @EGREP@
 ERROR_CFLAGS = @ERROR_CFLAGS@
 ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
@@ -336,7 +339,6 @@
 EXIF_CFLAGS = @EXIF_CFLAGS@
 EXIF_LIBS = @EXIF_LIBS@
 FAAC_LIBS = @FAAC_LIBS@
-FAAD_IS_NEAAC = @FAAD_IS_NEAAC@
 FAAD_LIBS = @FAAD_LIBS@
 FFLAGS = @FFLAGS@
 FGREP = @FGREP@
@@ -355,8 +357,9 @@
 GIO_LIBS = @GIO_LIBS@
 GIO_UNIX_CFLAGS = @GIO_UNIX_CFLAGS@
 GIO_UNIX_LIBS = @GIO_UNIX_LIBS@
+GLES2_CFLAGS = @GLES2_CFLAGS@
+GLES2_LIBS = @GLES2_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
-GLIB_COMPILE_SCHEMAS = @GLIB_COMPILE_SCHEMAS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
@@ -373,16 +376,17 @@
 GMODULE_NO_EXPORT_LIBS = @GMODULE_NO_EXPORT_LIBS@
 GMSGFMT = @GMSGFMT@
 GMSGFMT_015 = @GMSGFMT_015@
+GNUSTL_CFLAGS = @GNUSTL_CFLAGS@
+GNUSTL_LIBS = @GNUSTL_LIBS@
 GRAPHENE_CFLAGS = @GRAPHENE_CFLAGS@
 GRAPHENE_LIBS = @GRAPHENE_LIBS@
 GREP = @GREP@
-GSETTINGS_CFLAGS = @GSETTINGS_CFLAGS@
-GSETTINGS_DISABLE_SCHEMAS_COMPILE = @GSETTINGS_DISABLE_SCHEMAS_COMPILE@
-GSETTINGS_LIBS = @GSETTINGS_LIBS@
 GSM_LIBS = @GSM_LIBS@
 GSTPB_PLUGINS_DIR = @GSTPB_PLUGINS_DIR@
 GSTPB_PREFIX = @GSTPB_PREFIX@
 GST_AGE = @GST_AGE@
+GST_ALLOCATORS_CFLAGS = @GST_ALLOCATORS_CFLAGS@
+GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
 GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
 GST_API_VERSION = @GST_API_VERSION@
 GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
@@ -408,6 +412,8 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PBUTILS_CFLAGS = @GST_PBUTILS_CFLAGS@
+GST_PBUTILS_LIBS = @GST_PBUTILS_LIBS@
 GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BAD_CFLAGS = @GST_PLUGINS_BAD_CFLAGS@
@@ -433,6 +439,8 @@
 GST_PREFIX = @GST_PREFIX@
 GST_REVISION = @GST_REVISION@
 GST_TOOLS_DIR = @GST_TOOLS_DIR@
+GST_VIDEO_CFLAGS = @GST_VIDEO_CFLAGS@
+GST_VIDEO_LIBS = @GST_VIDEO_LIBS@
 GTK3_CFLAGS = @GTK3_CFLAGS@
 GTK3_GL_CFLAGS = @GTK3_GL_CFLAGS@
 GTK3_GL_LIBS = @GTK3_GL_LIBS@
@@ -534,6 +542,7 @@
 LTLIBICONV = @LTLIBICONV@
 LTLIBINTL = @LTLIBINTL@
 LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
 MANIFEST_TOOL = @MANIFEST_TOOL@
@@ -547,8 +556,6 @@
 MODPLUG_LIBS = @MODPLUG_LIBS@
 MPEG2ENC_CFLAGS = @MPEG2ENC_CFLAGS@
 MPEG2ENC_LIBS = @MPEG2ENC_LIBS@
-MPG123_CFLAGS = @MPG123_CFLAGS@
-MPG123_LIBS = @MPG123_LIBS@
 MPLEX_CFLAGS = @MPLEX_CFLAGS@
 MPLEX_LDFLAGS = @MPLEX_LDFLAGS@
 MPLEX_LIBS = @MPLEX_LIBS@
@@ -564,6 +571,8 @@
 NETTLE_LIBS = @NETTLE_LIBS@
 NM = @NM@
 NMEDIT = @NMEDIT@
+NVENCODE_CFLAGS = @NVENCODE_CFLAGS@
+NVENCODE_LIBS = @NVENCODE_LIBS@
 OBJC = @OBJC@
 OBJCDEPMODE = @OBJCDEPMODE@
 OBJCFLAGS = @OBJCFLAGS@
@@ -621,16 +630,18 @@
 PYTHON_PLATFORM = @PYTHON_PLATFORM@
 PYTHON_PREFIX = @PYTHON_PREFIX@
 PYTHON_VERSION = @PYTHON_VERSION@
+QT_ANDROID_CFLAGS = @QT_ANDROID_CFLAGS@
+QT_ANDROID_LIBS = @QT_ANDROID_LIBS@
 QT_CFLAGS = @QT_CFLAGS@
 QT_LIBS = @QT_LIBS@
+QT_MAC_CFLAGS = @QT_MAC_CFLAGS@
+QT_MAC_LIBS = @QT_MAC_LIBS@
 QT_WAYLAND_CFLAGS = @QT_WAYLAND_CFLAGS@
 QT_WAYLAND_LIBS = @QT_WAYLAND_LIBS@
 QT_X11_CFLAGS = @QT_X11_CFLAGS@
 QT_X11_LIBS = @QT_X11_LIBS@
 RANLIB = @RANLIB@
 RCC = @RCC@
-RSVG_2_36_2_CFLAGS = @RSVG_2_36_2_CFLAGS@
-RSVG_2_36_2_LIBS = @RSVG_2_36_2_LIBS@
 RSVG_CFLAGS = @RSVG_CFLAGS@
 RSVG_LIBS = @RSVG_LIBS@
 RTMP_CFLAGS = @RTMP_CFLAGS@
@@ -682,6 +693,7 @@
 VOAACENC_LIBS = @VOAACENC_LIBS@
 VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
 VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VULKAN_LIBS = @VULKAN_LIBS@
 WARNING_CFLAGS = @WARNING_CFLAGS@
 WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
 WARNING_OBJCFLAGS = @WARNING_OBJCFLAGS@
@@ -692,6 +704,7 @@
 WAYLAND_LIBS = @WAYLAND_LIBS@
 WEBP_CFLAGS = @WEBP_CFLAGS@
 WEBP_LIBS = @WEBP_LIBS@
+WGET = @WGET@
 WILDMIDI_CFLAGS = @WILDMIDI_CFLAGS@
 WILDMIDI_LIBS = @WILDMIDI_LIBS@
 WINKS_LIBS = @WINKS_LIBS@
@@ -701,6 +714,8 @@
 X11_LIBS = @X11_LIBS@
 X265_CFLAGS = @X265_CFLAGS@
 X265_LIBS = @X265_LIBS@
+XCB_CFLAGS = @XCB_CFLAGS@
+XCB_LIBS = @XCB_LIBS@
 XCOMPOSITE_CFLAGS = @XCOMPOSITE_CFLAGS@
 XCOMPOSITE_LIBS = @XCOMPOSITE_LIBS@
 XGETTEXT = @XGETTEXT@
@@ -738,7 +753,6 @@
 docdir = @docdir@
 dvidir = @dvidir@
 exec_prefix = @exec_prefix@
-gsettingsschemadir = @gsettingsschemadir@
 host = @host@
 host_alias = @host_alias@
 host_cpu = @host_cpu@
diff --git a/gst/inter/gstinteraudiosink.c b/gst/inter/gstinteraudiosink.c
index 58e7832..261ed25 100644
--- a/gst/inter/gstinteraudiosink.c
+++ b/gst/inter/gstinteraudiosink.c
@@ -26,10 +26,10 @@
  * <refsect2>
  * <title>Example launch line</title>
  * |[
- * gst-launch -v audiotestsrc ! queue ! interaudiosink
+ * gst-launch-1.0 -v audiotestsrc ! queue ! interaudiosink
  * ]|
  *
- * The interaudiosink element cannot be used effectively with gst-launch,
+ * The interaudiosink element cannot be used effectively with gst-launch-1.0,
  * as it requires a second pipeline in the application to receive the
  * audio.
  * See the gstintertest.c example in the gst-plugins-bad source code for
diff --git a/gst/inter/gstinteraudiosrc.c b/gst/inter/gstinteraudiosrc.c
index 2eeff65..1d4b68b 100644
--- a/gst/inter/gstinteraudiosrc.c
+++ b/gst/inter/gstinteraudiosrc.c
@@ -25,10 +25,10 @@
  * <refsect2>
  * <title>Example launch line</title>
  * |[
- * gst-launch -v interaudiosrc ! queue ! audiosink
+ * gst-launch-1.0 -v interaudiosrc ! queue ! autoaudiosink
  * ]|
  * 
- * The interaudiosrc element cannot be used effectively with gst-launch,
+ * The interaudiosrc element cannot be used effectively with gst-launch-1.0,
  * as it requires a second pipeline in the application to send audio.
  * See the gstintertest.c example in the gst-plugins-bad source code for
  * more details.
diff --git a/gst/inter/gstintersubsink.c b/gst/inter/gstintersubsink.c
index b907c0a..77bc484 100644
--- a/gst/inter/gstintersubsink.c
+++ b/gst/inter/gstintersubsink.c
@@ -25,10 +25,10 @@
  * <refsect2>
  * <title>Example launch line</title>
  * |[
- * gst-launch -v ... ! intersubsink
+ * gst-launch-1.0 -v ... ! intersubsink
  * ]|
  * 
- * The intersubsink element cannot be used effectively with gst-launch,
+ * The intersubsink element cannot be used effectively with gst-launch-1.0,
  * as it requires a second pipeline in the application to send audio.
  * See the gstintertest.c example in the gst-plugins-bad source code for
  * more details.
diff --git a/gst/inter/gstintersubsrc.c b/gst/inter/gstintersubsrc.c
index 24efc9f..482a20f 100644
--- a/gst/inter/gstintersubsrc.c
+++ b/gst/inter/gstintersubsrc.c
@@ -26,10 +26,10 @@
  * <refsect2>
  * <title>Example launch line</title>
  * |[
- * gst-launch -v intersubsrc ! kateenc ! oggmux ! filesink location=out.ogv
+ * gst-launch-1.0 -v intersubsrc ! kateenc ! oggmux ! filesink location=out.ogv
  * ]|
  * 
- * The intersubsrc element cannot be used effectively with gst-launch,
+ * The intersubsrc element cannot be used effectively with gst-launch-1.0,
  * as it requires a second pipeline in the application to send subtitles.
  * See the gstintertest.c example in the gst-plugins-bad source code for
  * more details.
diff --git a/gst/inter/gstintertest.c b/gst/inter/gstintertest.c
index cff4f0d..3b1abdb 100644
--- a/gst/inter/gstintertest.c
+++ b/gst/inter/gstintertest.c
@@ -85,6 +85,8 @@
   g_option_context_add_group (context, gst_init_get_option_group ());
   if (!g_option_context_parse (context, &argc, &argv, &error)) {
     g_print ("option parsing failed: %s\n", error->message);
+    g_option_context_free (context);
+    g_clear_error (&error);
     exit (1);
   }
   g_option_context_free (context);
@@ -199,6 +201,7 @@
   if (error) {
     g_print ("pipeline parsing error: %s\n", error->message);
     gst_object_unref (pipeline);
+    g_clear_error (&error);
     return;
   }
 
@@ -236,6 +239,7 @@
   if (error) {
     g_print ("pipeline parsing error: %s\n", error->message);
     gst_object_unref (pipeline);
+    g_clear_error (&error);
     return;
   }
 
@@ -352,7 +356,7 @@
 
       gst_message_parse_error (message, &error, &debug);
       gst_inter_test_handle_error (intertest, error, debug);
-      g_error_free (error);
+      g_clear_error (&error);
       g_free (debug);
     }
       break;
@@ -363,7 +367,7 @@
 
       gst_message_parse_warning (message, &error, &debug);
       gst_inter_test_handle_warning (intertest, error, debug);
-      g_error_free (error);
+      g_clear_error (&error);
       g_free (debug);
     }
       break;
@@ -374,7 +378,7 @@
 
       gst_message_parse_info (message, &error, &debug);
       gst_inter_test_handle_info (intertest, error, debug);
-      g_error_free (error);
+      g_clear_error (&error);
       g_free (debug);
     }
       break;
diff --git a/gst/inter/gstintervideosink.c b/gst/inter/gstintervideosink.c
index aebce28..ca357d6 100644
--- a/gst/inter/gstintervideosink.c
+++ b/gst/inter/gstintervideosink.c
@@ -26,10 +26,10 @@
  * <refsect2>
  * <title>Example launch line</title>
  * |[
- * gst-launch -v videotestsrc ! intervideosink
+ * gst-launch-1.0 -v videotestsrc ! intervideosink
  * ]|
  * 
- * The intervideosink element cannot be used effectively with gst-launch,
+ * The intervideosink element cannot be used effectively with gst-launch-1.0,
  * as it requires a second pipeline in the application to send video to.
  * See the gstintertest.c example in the gst-plugins-bad source code for
  * more details.
diff --git a/gst/inter/gstintervideosrc.c b/gst/inter/gstintervideosrc.c
index 6553ed1..8cab648 100644
--- a/gst/inter/gstintervideosrc.c
+++ b/gst/inter/gstintervideosrc.c
@@ -26,10 +26,10 @@
  * <refsect2>
  * <title>Example launch line</title>
  * |[
- * gst-launch -v intervideosrc ! queue ! xvimagesink
+ * gst-launch-1.0 -v intervideosrc ! queue ! xvimagesink
  * ]|
  * 
- * The intersubsrc element cannot be used effectively with gst-launch,
+ * The intersubsrc element cannot be used effectively with gst-launch-1.0,
  * as it requires a second pipeline in the application to send subtitles.
  * </refsect2>
  */
diff --git a/gst/interlace/Makefile.in b/gst/interlace/Makefile.in
index 356b5a6..7b8e977 100644
--- a/gst/interlace/Makefile.in
+++ b/gst/interlace/Makefile.in
@@ -115,16 +115,15 @@
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
 	$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
-	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gsettings.m4 \
-	$(top_srcdir)/m4/gst-fionread.m4 $(top_srcdir)/m4/gst-sdl.m4 \
-	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
-	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
-	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libgcrypt.m4 \
-	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
-	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
-	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
-	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
-	$(top_srcdir)/configure.ac
+	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gst-fionread.m4 \
+	$(top_srcdir)/m4/gst-sdl.m4 $(top_srcdir)/m4/iconv.m4 \
+	$(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \
+	$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
+	$(top_srcdir)/m4/libgcrypt.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
+	$(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
@@ -271,6 +270,8 @@
 CLUTTER_X11_LIBS = @CLUTTER_X11_LIBS@
 CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
+CUDA_CFLAGS = @CUDA_CFLAGS@
+CUDA_LIBS = @CUDA_LIBS@
 CURL_CFLAGS = @CURL_CFLAGS@
 CURL_LIBS = @CURL_LIBS@
 CXX = @CXX@
@@ -308,6 +309,8 @@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
+EGL_CFLAGS = @EGL_CFLAGS@
+EGL_LIBS = @EGL_LIBS@
 EGREP = @EGREP@
 ERROR_CFLAGS = @ERROR_CFLAGS@
 ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
@@ -316,7 +319,6 @@
 EXIF_CFLAGS = @EXIF_CFLAGS@
 EXIF_LIBS = @EXIF_LIBS@
 FAAC_LIBS = @FAAC_LIBS@
-FAAD_IS_NEAAC = @FAAD_IS_NEAAC@
 FAAD_LIBS = @FAAD_LIBS@
 FFLAGS = @FFLAGS@
 FGREP = @FGREP@
@@ -335,8 +337,9 @@
 GIO_LIBS = @GIO_LIBS@
 GIO_UNIX_CFLAGS = @GIO_UNIX_CFLAGS@
 GIO_UNIX_LIBS = @GIO_UNIX_LIBS@
+GLES2_CFLAGS = @GLES2_CFLAGS@
+GLES2_LIBS = @GLES2_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
-GLIB_COMPILE_SCHEMAS = @GLIB_COMPILE_SCHEMAS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
@@ -353,16 +356,17 @@
 GMODULE_NO_EXPORT_LIBS = @GMODULE_NO_EXPORT_LIBS@
 GMSGFMT = @GMSGFMT@
 GMSGFMT_015 = @GMSGFMT_015@
+GNUSTL_CFLAGS = @GNUSTL_CFLAGS@
+GNUSTL_LIBS = @GNUSTL_LIBS@
 GRAPHENE_CFLAGS = @GRAPHENE_CFLAGS@
 GRAPHENE_LIBS = @GRAPHENE_LIBS@
 GREP = @GREP@
-GSETTINGS_CFLAGS = @GSETTINGS_CFLAGS@
-GSETTINGS_DISABLE_SCHEMAS_COMPILE = @GSETTINGS_DISABLE_SCHEMAS_COMPILE@
-GSETTINGS_LIBS = @GSETTINGS_LIBS@
 GSM_LIBS = @GSM_LIBS@
 GSTPB_PLUGINS_DIR = @GSTPB_PLUGINS_DIR@
 GSTPB_PREFIX = @GSTPB_PREFIX@
 GST_AGE = @GST_AGE@
+GST_ALLOCATORS_CFLAGS = @GST_ALLOCATORS_CFLAGS@
+GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
 GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
 GST_API_VERSION = @GST_API_VERSION@
 GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
@@ -388,6 +392,8 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PBUTILS_CFLAGS = @GST_PBUTILS_CFLAGS@
+GST_PBUTILS_LIBS = @GST_PBUTILS_LIBS@
 GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BAD_CFLAGS = @GST_PLUGINS_BAD_CFLAGS@
@@ -413,6 +419,8 @@
 GST_PREFIX = @GST_PREFIX@
 GST_REVISION = @GST_REVISION@
 GST_TOOLS_DIR = @GST_TOOLS_DIR@
+GST_VIDEO_CFLAGS = @GST_VIDEO_CFLAGS@
+GST_VIDEO_LIBS = @GST_VIDEO_LIBS@
 GTK3_CFLAGS = @GTK3_CFLAGS@
 GTK3_GL_CFLAGS = @GTK3_GL_CFLAGS@
 GTK3_GL_LIBS = @GTK3_GL_LIBS@
@@ -514,6 +522,7 @@
 LTLIBICONV = @LTLIBICONV@
 LTLIBINTL = @LTLIBINTL@
 LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
 MANIFEST_TOOL = @MANIFEST_TOOL@
@@ -527,8 +536,6 @@
 MODPLUG_LIBS = @MODPLUG_LIBS@
 MPEG2ENC_CFLAGS = @MPEG2ENC_CFLAGS@
 MPEG2ENC_LIBS = @MPEG2ENC_LIBS@
-MPG123_CFLAGS = @MPG123_CFLAGS@
-MPG123_LIBS = @MPG123_LIBS@
 MPLEX_CFLAGS = @MPLEX_CFLAGS@
 MPLEX_LDFLAGS = @MPLEX_LDFLAGS@
 MPLEX_LIBS = @MPLEX_LIBS@
@@ -544,6 +551,8 @@
 NETTLE_LIBS = @NETTLE_LIBS@
 NM = @NM@
 NMEDIT = @NMEDIT@
+NVENCODE_CFLAGS = @NVENCODE_CFLAGS@
+NVENCODE_LIBS = @NVENCODE_LIBS@
 OBJC = @OBJC@
 OBJCDEPMODE = @OBJCDEPMODE@
 OBJCFLAGS = @OBJCFLAGS@
@@ -601,16 +610,18 @@
 PYTHON_PLATFORM = @PYTHON_PLATFORM@
 PYTHON_PREFIX = @PYTHON_PREFIX@
 PYTHON_VERSION = @PYTHON_VERSION@
+QT_ANDROID_CFLAGS = @QT_ANDROID_CFLAGS@
+QT_ANDROID_LIBS = @QT_ANDROID_LIBS@
 QT_CFLAGS = @QT_CFLAGS@
 QT_LIBS = @QT_LIBS@
+QT_MAC_CFLAGS = @QT_MAC_CFLAGS@
+QT_MAC_LIBS = @QT_MAC_LIBS@
 QT_WAYLAND_CFLAGS = @QT_WAYLAND_CFLAGS@
 QT_WAYLAND_LIBS = @QT_WAYLAND_LIBS@
 QT_X11_CFLAGS = @QT_X11_CFLAGS@
 QT_X11_LIBS = @QT_X11_LIBS@
 RANLIB = @RANLIB@
 RCC = @RCC@
-RSVG_2_36_2_CFLAGS = @RSVG_2_36_2_CFLAGS@
-RSVG_2_36_2_LIBS = @RSVG_2_36_2_LIBS@
 RSVG_CFLAGS = @RSVG_CFLAGS@
 RSVG_LIBS = @RSVG_LIBS@
 RTMP_CFLAGS = @RTMP_CFLAGS@
@@ -662,6 +673,7 @@
 VOAACENC_LIBS = @VOAACENC_LIBS@
 VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
 VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VULKAN_LIBS = @VULKAN_LIBS@
 WARNING_CFLAGS = @WARNING_CFLAGS@
 WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
 WARNING_OBJCFLAGS = @WARNING_OBJCFLAGS@
@@ -672,6 +684,7 @@
 WAYLAND_LIBS = @WAYLAND_LIBS@
 WEBP_CFLAGS = @WEBP_CFLAGS@
 WEBP_LIBS = @WEBP_LIBS@
+WGET = @WGET@
 WILDMIDI_CFLAGS = @WILDMIDI_CFLAGS@
 WILDMIDI_LIBS = @WILDMIDI_LIBS@
 WINKS_LIBS = @WINKS_LIBS@
@@ -681,6 +694,8 @@
 X11_LIBS = @X11_LIBS@
 X265_CFLAGS = @X265_CFLAGS@
 X265_LIBS = @X265_LIBS@
+XCB_CFLAGS = @XCB_CFLAGS@
+XCB_LIBS = @XCB_LIBS@
 XCOMPOSITE_CFLAGS = @XCOMPOSITE_CFLAGS@
 XCOMPOSITE_LIBS = @XCOMPOSITE_LIBS@
 XGETTEXT = @XGETTEXT@
@@ -718,7 +733,6 @@
 docdir = @docdir@
 dvidir = @dvidir@
 exec_prefix = @exec_prefix@
-gsettingsschemadir = @gsettingsschemadir@
 host = @host@
 host_alias = @host_alias@
 host_cpu = @host_cpu@
diff --git a/gst/interlace/gstinterlace.c b/gst/interlace/gstinterlace.c
index 6cd369b..269a847 100644
--- a/gst/interlace/gstinterlace.c
+++ b/gst/interlace/gstinterlace.c
@@ -28,23 +28,23 @@
  * <refsect2>
  * <title>Example launch line</title>
  * |[
- * gst-launch -v videotestsrc pattern=ball ! interlace ! xvimagesink
+ * gst-launch-1.0 -v videotestsrc pattern=ball ! interlace ! xvimagesink
  * ]|
  * This pipeline illustrates the combing effects caused by displaying
  * two interlaced fields as one progressive frame.
  * |[
- * gst-launch -v filesrc location=/path/to/file ! decodebin ! videorate !
+ * gst-launch-1.0 -v filesrc location=/path/to/file ! decodebin ! videorate !
  *   videoscale ! video/x-raw,format=\(string\)I420,width=720,height=480,
  *   framerate=60000/1001,pixel-aspect-ratio=11/10 ! 
- *   interlace top-field-first=false ! ...
+ *   interlace top-field-first=false ! autovideosink
  * ]|
  * This pipeline converts a progressive video stream into an interlaced
  * stream suitable for standard definition NTSC.
  * |[
- * gst-launch -v videotestsrc pattern=ball ! video/x-raw,
+ * gst-launch-1.0 -v videotestsrc pattern=ball ! video/x-raw,
  *   format=\(string\)I420,width=720,height=480,framerate=24000/1001,
- *   pixel-aspect-ratio=11/10 ! interlace pattern=2:3 !
- *   ...
+ *   pixel-aspect-ratio=11/10 ! interlace !
+ *   autovideosink
  * ]|
  * This pipeline converts a 24 frames per second progressive film stream into a
  * 30000/1001 2:3:2:3... pattern telecined stream suitable for displaying film
diff --git a/gst/ivfparse/Makefile.in b/gst/ivfparse/Makefile.in
index 4f4080f..aaf29ab 100644
--- a/gst/ivfparse/Makefile.in
+++ b/gst/ivfparse/Makefile.in
@@ -116,16 +116,15 @@
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
 	$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
-	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gsettings.m4 \
-	$(top_srcdir)/m4/gst-fionread.m4 $(top_srcdir)/m4/gst-sdl.m4 \
-	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
-	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
-	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libgcrypt.m4 \
-	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
-	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
-	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
-	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
-	$(top_srcdir)/configure.ac
+	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gst-fionread.m4 \
+	$(top_srcdir)/m4/gst-sdl.m4 $(top_srcdir)/m4/iconv.m4 \
+	$(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \
+	$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
+	$(top_srcdir)/m4/libgcrypt.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
+	$(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \
@@ -274,6 +273,8 @@
 CLUTTER_X11_LIBS = @CLUTTER_X11_LIBS@
 CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
+CUDA_CFLAGS = @CUDA_CFLAGS@
+CUDA_LIBS = @CUDA_LIBS@
 CURL_CFLAGS = @CURL_CFLAGS@
 CURL_LIBS = @CURL_LIBS@
 CXX = @CXX@
@@ -311,6 +312,8 @@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
+EGL_CFLAGS = @EGL_CFLAGS@
+EGL_LIBS = @EGL_LIBS@
 EGREP = @EGREP@
 ERROR_CFLAGS = @ERROR_CFLAGS@
 ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
@@ -319,7 +322,6 @@
 EXIF_CFLAGS = @EXIF_CFLAGS@
 EXIF_LIBS = @EXIF_LIBS@
 FAAC_LIBS = @FAAC_LIBS@
-FAAD_IS_NEAAC = @FAAD_IS_NEAAC@
 FAAD_LIBS = @FAAD_LIBS@
 FFLAGS = @FFLAGS@
 FGREP = @FGREP@
@@ -338,8 +340,9 @@
 GIO_LIBS = @GIO_LIBS@
 GIO_UNIX_CFLAGS = @GIO_UNIX_CFLAGS@
 GIO_UNIX_LIBS = @GIO_UNIX_LIBS@
+GLES2_CFLAGS = @GLES2_CFLAGS@
+GLES2_LIBS = @GLES2_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
-GLIB_COMPILE_SCHEMAS = @GLIB_COMPILE_SCHEMAS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
@@ -356,16 +359,17 @@
 GMODULE_NO_EXPORT_LIBS = @GMODULE_NO_EXPORT_LIBS@
 GMSGFMT = @GMSGFMT@
 GMSGFMT_015 = @GMSGFMT_015@
+GNUSTL_CFLAGS = @GNUSTL_CFLAGS@
+GNUSTL_LIBS = @GNUSTL_LIBS@
 GRAPHENE_CFLAGS = @GRAPHENE_CFLAGS@
 GRAPHENE_LIBS = @GRAPHENE_LIBS@
 GREP = @GREP@
-GSETTINGS_CFLAGS = @GSETTINGS_CFLAGS@
-GSETTINGS_DISABLE_SCHEMAS_COMPILE = @GSETTINGS_DISABLE_SCHEMAS_COMPILE@
-GSETTINGS_LIBS = @GSETTINGS_LIBS@
 GSM_LIBS = @GSM_LIBS@
 GSTPB_PLUGINS_DIR = @GSTPB_PLUGINS_DIR@
 GSTPB_PREFIX = @GSTPB_PREFIX@
 GST_AGE = @GST_AGE@
+GST_ALLOCATORS_CFLAGS = @GST_ALLOCATORS_CFLAGS@
+GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
 GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
 GST_API_VERSION = @GST_API_VERSION@
 GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
@@ -391,6 +395,8 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PBUTILS_CFLAGS = @GST_PBUTILS_CFLAGS@
+GST_PBUTILS_LIBS = @GST_PBUTILS_LIBS@
 GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BAD_CFLAGS = @GST_PLUGINS_BAD_CFLAGS@
@@ -416,6 +422,8 @@
 GST_PREFIX = @GST_PREFIX@
 GST_REVISION = @GST_REVISION@
 GST_TOOLS_DIR = @GST_TOOLS_DIR@
+GST_VIDEO_CFLAGS = @GST_VIDEO_CFLAGS@
+GST_VIDEO_LIBS = @GST_VIDEO_LIBS@
 GTK3_CFLAGS = @GTK3_CFLAGS@
 GTK3_GL_CFLAGS = @GTK3_GL_CFLAGS@
 GTK3_GL_LIBS = @GTK3_GL_LIBS@
@@ -517,6 +525,7 @@
 LTLIBICONV = @LTLIBICONV@
 LTLIBINTL = @LTLIBINTL@
 LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
 MANIFEST_TOOL = @MANIFEST_TOOL@
@@ -530,8 +539,6 @@
 MODPLUG_LIBS = @MODPLUG_LIBS@
 MPEG2ENC_CFLAGS = @MPEG2ENC_CFLAGS@
 MPEG2ENC_LIBS = @MPEG2ENC_LIBS@
-MPG123_CFLAGS = @MPG123_CFLAGS@
-MPG123_LIBS = @MPG123_LIBS@
 MPLEX_CFLAGS = @MPLEX_CFLAGS@
 MPLEX_LDFLAGS = @MPLEX_LDFLAGS@
 MPLEX_LIBS = @MPLEX_LIBS@
@@ -547,6 +554,8 @@
 NETTLE_LIBS = @NETTLE_LIBS@
 NM = @NM@
 NMEDIT = @NMEDIT@
+NVENCODE_CFLAGS = @NVENCODE_CFLAGS@
+NVENCODE_LIBS = @NVENCODE_LIBS@
 OBJC = @OBJC@
 OBJCDEPMODE = @OBJCDEPMODE@
 OBJCFLAGS = @OBJCFLAGS@
@@ -604,16 +613,18 @@
 PYTHON_PLATFORM = @PYTHON_PLATFORM@
 PYTHON_PREFIX = @PYTHON_PREFIX@
 PYTHON_VERSION = @PYTHON_VERSION@
+QT_ANDROID_CFLAGS = @QT_ANDROID_CFLAGS@
+QT_ANDROID_LIBS = @QT_ANDROID_LIBS@
 QT_CFLAGS = @QT_CFLAGS@
 QT_LIBS = @QT_LIBS@
+QT_MAC_CFLAGS = @QT_MAC_CFLAGS@
+QT_MAC_LIBS = @QT_MAC_LIBS@
 QT_WAYLAND_CFLAGS = @QT_WAYLAND_CFLAGS@
 QT_WAYLAND_LIBS = @QT_WAYLAND_LIBS@
 QT_X11_CFLAGS = @QT_X11_CFLAGS@
 QT_X11_LIBS = @QT_X11_LIBS@
 RANLIB = @RANLIB@
 RCC = @RCC@
-RSVG_2_36_2_CFLAGS = @RSVG_2_36_2_CFLAGS@
-RSVG_2_36_2_LIBS = @RSVG_2_36_2_LIBS@
 RSVG_CFLAGS = @RSVG_CFLAGS@
 RSVG_LIBS = @RSVG_LIBS@
 RTMP_CFLAGS = @RTMP_CFLAGS@
@@ -665,6 +676,7 @@
 VOAACENC_LIBS = @VOAACENC_LIBS@
 VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
 VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VULKAN_LIBS = @VULKAN_LIBS@
 WARNING_CFLAGS = @WARNING_CFLAGS@
 WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
 WARNING_OBJCFLAGS = @WARNING_OBJCFLAGS@
@@ -675,6 +687,7 @@
 WAYLAND_LIBS = @WAYLAND_LIBS@
 WEBP_CFLAGS = @WEBP_CFLAGS@
 WEBP_LIBS = @WEBP_LIBS@
+WGET = @WGET@
 WILDMIDI_CFLAGS = @WILDMIDI_CFLAGS@
 WILDMIDI_LIBS = @WILDMIDI_LIBS@
 WINKS_LIBS = @WINKS_LIBS@
@@ -684,6 +697,8 @@
 X11_LIBS = @X11_LIBS@
 X265_CFLAGS = @X265_CFLAGS@
 X265_LIBS = @X265_LIBS@
+XCB_CFLAGS = @XCB_CFLAGS@
+XCB_LIBS = @XCB_LIBS@
 XCOMPOSITE_CFLAGS = @XCOMPOSITE_CFLAGS@
 XCOMPOSITE_LIBS = @XCOMPOSITE_LIBS@
 XGETTEXT = @XGETTEXT@
@@ -721,7 +736,6 @@
 docdir = @docdir@
 dvidir = @dvidir@
 exec_prefix = @exec_prefix@
-gsettingsschemadir = @gsettingsschemadir@
 host = @host@
 host_alias = @host_alias@
 host_cpu = @host_cpu@
diff --git a/gst/ivfparse/gstivfparse.c b/gst/ivfparse/gstivfparse.c
index 4e3ea8b..bea1e19 100644
--- a/gst/ivfparse/gstivfparse.c
+++ b/gst/ivfparse/gstivfparse.c
@@ -331,15 +331,20 @@
 
     /* Detect resolution changes on key frames */
     if (gst_buffer_map (frame->out_buffer, &map, GST_MAP_READ)) {
-      guint32 frame_tag, width, height;
+      guint32 width, height;
 
-      frame_tag = GST_READ_UINT24_LE (map.data);
-      if (!(frame_tag & 0x01) && map.size >= 10) {      /* key frame */
-        GST_DEBUG_OBJECT (ivf, "key frame detected");
+      if (ivf->fourcc == GST_MAKE_FOURCC ('V', 'P', '8', '0')) {
+        guint32 frame_tag;
+        frame_tag = GST_READ_UINT24_LE (map.data);
+        if (!(frame_tag & 0x01) && map.size >= 10) {    /* key frame */
+          GST_DEBUG_OBJECT (ivf, "key frame detected");
 
-        width = GST_READ_UINT16_LE (map.data + 6) & 0x3fff;
-        height = GST_READ_UINT16_LE (map.data + 8) & 0x3fff;
-        gst_ivf_parse_set_size (ivf, width, height);
+          width = GST_READ_UINT16_LE (map.data + 6) & 0x3fff;
+          height = GST_READ_UINT16_LE (map.data + 8) & 0x3fff;
+          gst_ivf_parse_set_size (ivf, width, height);
+        }
+      } else {
+        /* Fixme: Add vp9 frame header parsing? */
       }
       gst_buffer_unmap (frame->out_buffer, &map);
     }
diff --git a/gst/ivtc/Makefile.in b/gst/ivtc/Makefile.in
index 1bbbc37..fe9235f 100644
--- a/gst/ivtc/Makefile.in
+++ b/gst/ivtc/Makefile.in
@@ -115,16 +115,15 @@
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
 	$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
-	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gsettings.m4 \
-	$(top_srcdir)/m4/gst-fionread.m4 $(top_srcdir)/m4/gst-sdl.m4 \
-	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
-	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
-	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libgcrypt.m4 \
-	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
-	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
-	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
-	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
-	$(top_srcdir)/configure.ac
+	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gst-fionread.m4 \
+	$(top_srcdir)/m4/gst-sdl.m4 $(top_srcdir)/m4/iconv.m4 \
+	$(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \
+	$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
+	$(top_srcdir)/m4/libgcrypt.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
+	$(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
@@ -272,6 +271,8 @@
 CLUTTER_X11_LIBS = @CLUTTER_X11_LIBS@
 CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
+CUDA_CFLAGS = @CUDA_CFLAGS@
+CUDA_LIBS = @CUDA_LIBS@
 CURL_CFLAGS = @CURL_CFLAGS@
 CURL_LIBS = @CURL_LIBS@
 CXX = @CXX@
@@ -309,6 +310,8 @@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
+EGL_CFLAGS = @EGL_CFLAGS@
+EGL_LIBS = @EGL_LIBS@
 EGREP = @EGREP@
 ERROR_CFLAGS = @ERROR_CFLAGS@
 ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
@@ -317,7 +320,6 @@
 EXIF_CFLAGS = @EXIF_CFLAGS@
 EXIF_LIBS = @EXIF_LIBS@
 FAAC_LIBS = @FAAC_LIBS@
-FAAD_IS_NEAAC = @FAAD_IS_NEAAC@
 FAAD_LIBS = @FAAD_LIBS@
 FFLAGS = @FFLAGS@
 FGREP = @FGREP@
@@ -336,8 +338,9 @@
 GIO_LIBS = @GIO_LIBS@
 GIO_UNIX_CFLAGS = @GIO_UNIX_CFLAGS@
 GIO_UNIX_LIBS = @GIO_UNIX_LIBS@
+GLES2_CFLAGS = @GLES2_CFLAGS@
+GLES2_LIBS = @GLES2_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
-GLIB_COMPILE_SCHEMAS = @GLIB_COMPILE_SCHEMAS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
@@ -354,16 +357,17 @@
 GMODULE_NO_EXPORT_LIBS = @GMODULE_NO_EXPORT_LIBS@
 GMSGFMT = @GMSGFMT@
 GMSGFMT_015 = @GMSGFMT_015@
+GNUSTL_CFLAGS = @GNUSTL_CFLAGS@
+GNUSTL_LIBS = @GNUSTL_LIBS@
 GRAPHENE_CFLAGS = @GRAPHENE_CFLAGS@
 GRAPHENE_LIBS = @GRAPHENE_LIBS@
 GREP = @GREP@
-GSETTINGS_CFLAGS = @GSETTINGS_CFLAGS@
-GSETTINGS_DISABLE_SCHEMAS_COMPILE = @GSETTINGS_DISABLE_SCHEMAS_COMPILE@
-GSETTINGS_LIBS = @GSETTINGS_LIBS@
 GSM_LIBS = @GSM_LIBS@
 GSTPB_PLUGINS_DIR = @GSTPB_PLUGINS_DIR@
 GSTPB_PREFIX = @GSTPB_PREFIX@
 GST_AGE = @GST_AGE@
+GST_ALLOCATORS_CFLAGS = @GST_ALLOCATORS_CFLAGS@
+GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
 GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
 GST_API_VERSION = @GST_API_VERSION@
 GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
@@ -389,6 +393,8 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PBUTILS_CFLAGS = @GST_PBUTILS_CFLAGS@
+GST_PBUTILS_LIBS = @GST_PBUTILS_LIBS@
 GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BAD_CFLAGS = @GST_PLUGINS_BAD_CFLAGS@
@@ -414,6 +420,8 @@
 GST_PREFIX = @GST_PREFIX@
 GST_REVISION = @GST_REVISION@
 GST_TOOLS_DIR = @GST_TOOLS_DIR@
+GST_VIDEO_CFLAGS = @GST_VIDEO_CFLAGS@
+GST_VIDEO_LIBS = @GST_VIDEO_LIBS@
 GTK3_CFLAGS = @GTK3_CFLAGS@
 GTK3_GL_CFLAGS = @GTK3_GL_CFLAGS@
 GTK3_GL_LIBS = @GTK3_GL_LIBS@
@@ -515,6 +523,7 @@
 LTLIBICONV = @LTLIBICONV@
 LTLIBINTL = @LTLIBINTL@
 LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
 MANIFEST_TOOL = @MANIFEST_TOOL@
@@ -528,8 +537,6 @@
 MODPLUG_LIBS = @MODPLUG_LIBS@
 MPEG2ENC_CFLAGS = @MPEG2ENC_CFLAGS@
 MPEG2ENC_LIBS = @MPEG2ENC_LIBS@
-MPG123_CFLAGS = @MPG123_CFLAGS@
-MPG123_LIBS = @MPG123_LIBS@
 MPLEX_CFLAGS = @MPLEX_CFLAGS@
 MPLEX_LDFLAGS = @MPLEX_LDFLAGS@
 MPLEX_LIBS = @MPLEX_LIBS@
@@ -545,6 +552,8 @@
 NETTLE_LIBS = @NETTLE_LIBS@
 NM = @NM@
 NMEDIT = @NMEDIT@
+NVENCODE_CFLAGS = @NVENCODE_CFLAGS@
+NVENCODE_LIBS = @NVENCODE_LIBS@
 OBJC = @OBJC@
 OBJCDEPMODE = @OBJCDEPMODE@
 OBJCFLAGS = @OBJCFLAGS@
@@ -602,16 +611,18 @@
 PYTHON_PLATFORM = @PYTHON_PLATFORM@
 PYTHON_PREFIX = @PYTHON_PREFIX@
 PYTHON_VERSION = @PYTHON_VERSION@
+QT_ANDROID_CFLAGS = @QT_ANDROID_CFLAGS@
+QT_ANDROID_LIBS = @QT_ANDROID_LIBS@
 QT_CFLAGS = @QT_CFLAGS@
 QT_LIBS = @QT_LIBS@
+QT_MAC_CFLAGS = @QT_MAC_CFLAGS@
+QT_MAC_LIBS = @QT_MAC_LIBS@
 QT_WAYLAND_CFLAGS = @QT_WAYLAND_CFLAGS@
 QT_WAYLAND_LIBS = @QT_WAYLAND_LIBS@
 QT_X11_CFLAGS = @QT_X11_CFLAGS@
 QT_X11_LIBS = @QT_X11_LIBS@
 RANLIB = @RANLIB@
 RCC = @RCC@
-RSVG_2_36_2_CFLAGS = @RSVG_2_36_2_CFLAGS@
-RSVG_2_36_2_LIBS = @RSVG_2_36_2_LIBS@
 RSVG_CFLAGS = @RSVG_CFLAGS@
 RSVG_LIBS = @RSVG_LIBS@
 RTMP_CFLAGS = @RTMP_CFLAGS@
@@ -663,6 +674,7 @@
 VOAACENC_LIBS = @VOAACENC_LIBS@
 VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
 VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VULKAN_LIBS = @VULKAN_LIBS@
 WARNING_CFLAGS = @WARNING_CFLAGS@
 WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
 WARNING_OBJCFLAGS = @WARNING_OBJCFLAGS@
@@ -673,6 +685,7 @@
 WAYLAND_LIBS = @WAYLAND_LIBS@
 WEBP_CFLAGS = @WEBP_CFLAGS@
 WEBP_LIBS = @WEBP_LIBS@
+WGET = @WGET@
 WILDMIDI_CFLAGS = @WILDMIDI_CFLAGS@
 WILDMIDI_LIBS = @WILDMIDI_LIBS@
 WINKS_LIBS = @WINKS_LIBS@
@@ -682,6 +695,8 @@
 X11_LIBS = @X11_LIBS@
 X265_CFLAGS = @X265_CFLAGS@
 X265_LIBS = @X265_LIBS@
+XCB_CFLAGS = @XCB_CFLAGS@
+XCB_LIBS = @XCB_LIBS@
 XCOMPOSITE_CFLAGS = @XCOMPOSITE_CFLAGS@
 XCOMPOSITE_LIBS = @XCOMPOSITE_LIBS@
 XGETTEXT = @XGETTEXT@
@@ -719,7 +734,6 @@
 docdir = @docdir@
 dvidir = @dvidir@
 exec_prefix = @exec_prefix@
-gsettingsschemadir = @gsettingsschemadir@
 host = @host@
 host_alias = @host_alias@
 host_cpu = @host_cpu@
diff --git a/gst/ivtc/gstcombdetect.c b/gst/ivtc/gstcombdetect.c
index f69e656..2356b96 100644
--- a/gst/ivtc/gstcombdetect.c
+++ b/gst/ivtc/gstcombdetect.c
@@ -26,7 +26,7 @@
  * <refsect2>
  * <title>Example launch line</title>
  * |[
- * gst-launch -v filesrc location=file.mov ! decodebin ! combdetect !
+ * gst-launch-1.0 -v filesrc location=file.mov ! decodebin ! combdetect !
  *     xvimagesink
  * ]|
  * </refsect2>
@@ -153,8 +153,8 @@
       GstStructure *structure = gst_caps_get_structure (othercaps, i);
       gst_structure_set_value (structure, "interlace-mode", &value);
     }
-    g_value_reset (&value);
-    g_value_reset (&v);
+    g_value_unset (&value);
+    g_value_unset (&v);
   } else {
     for (i = 0; i < gst_caps_get_size (othercaps); i++) {
       GstStructure *structure = gst_caps_get_structure (othercaps, i);
diff --git a/gst/ivtc/gstivtc.c b/gst/ivtc/gstivtc.c
index 02f382b..6dd0c8d 100644
--- a/gst/ivtc/gstivtc.c
+++ b/gst/ivtc/gstivtc.c
@@ -27,8 +27,8 @@
  * <refsect2>
  * <title>Example launch line</title>
  * |[
- * gst-launch -v videotestsrc pattern=ball ! video/x-raw,framerate=24/1 !
- *     interlace field-pattern=3:2 !
+ * gst-launch-1.0 -v videotestsrc pattern=ball ! video/x-raw,framerate=24/1 !
+ *     interlace !
  *     ivtc ! video/x-raw,framerate=24/1 ! fakesink
  * ]|
  *
@@ -169,8 +169,8 @@
       gst_structure_set_value (structure, "interlace-mode", &value);
       gst_structure_remove_field (structure, "framerate");
     }
-    g_value_reset (&value);
-    g_value_reset (&v);
+    g_value_unset (&value);
+    g_value_unset (&v);
   } else {
     for (i = 0; i < gst_caps_get_size (othercaps); i++) {
       GstStructure *structure = gst_caps_get_structure (othercaps, i);
diff --git a/gst/jp2kdecimator/Makefile.in b/gst/jp2kdecimator/Makefile.in
index 05d6073..500fb53 100644
--- a/gst/jp2kdecimator/Makefile.in
+++ b/gst/jp2kdecimator/Makefile.in
@@ -116,16 +116,15 @@
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
 	$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
-	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gsettings.m4 \
-	$(top_srcdir)/m4/gst-fionread.m4 $(top_srcdir)/m4/gst-sdl.m4 \
-	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
-	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
-	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libgcrypt.m4 \
-	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
-	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
-	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
-	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
-	$(top_srcdir)/configure.ac
+	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gst-fionread.m4 \
+	$(top_srcdir)/m4/gst-sdl.m4 $(top_srcdir)/m4/iconv.m4 \
+	$(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \
+	$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
+	$(top_srcdir)/m4/libgcrypt.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
+	$(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \
@@ -276,6 +275,8 @@
 CLUTTER_X11_LIBS = @CLUTTER_X11_LIBS@
 CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
+CUDA_CFLAGS = @CUDA_CFLAGS@
+CUDA_LIBS = @CUDA_LIBS@
 CURL_CFLAGS = @CURL_CFLAGS@
 CURL_LIBS = @CURL_LIBS@
 CXX = @CXX@
@@ -313,6 +314,8 @@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
+EGL_CFLAGS = @EGL_CFLAGS@
+EGL_LIBS = @EGL_LIBS@
 EGREP = @EGREP@
 ERROR_CFLAGS = @ERROR_CFLAGS@
 ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
@@ -321,7 +324,6 @@
 EXIF_CFLAGS = @EXIF_CFLAGS@
 EXIF_LIBS = @EXIF_LIBS@
 FAAC_LIBS = @FAAC_LIBS@
-FAAD_IS_NEAAC = @FAAD_IS_NEAAC@
 FAAD_LIBS = @FAAD_LIBS@
 FFLAGS = @FFLAGS@
 FGREP = @FGREP@
@@ -340,8 +342,9 @@
 GIO_LIBS = @GIO_LIBS@
 GIO_UNIX_CFLAGS = @GIO_UNIX_CFLAGS@
 GIO_UNIX_LIBS = @GIO_UNIX_LIBS@
+GLES2_CFLAGS = @GLES2_CFLAGS@
+GLES2_LIBS = @GLES2_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
-GLIB_COMPILE_SCHEMAS = @GLIB_COMPILE_SCHEMAS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
@@ -358,16 +361,17 @@
 GMODULE_NO_EXPORT_LIBS = @GMODULE_NO_EXPORT_LIBS@
 GMSGFMT = @GMSGFMT@
 GMSGFMT_015 = @GMSGFMT_015@
+GNUSTL_CFLAGS = @GNUSTL_CFLAGS@
+GNUSTL_LIBS = @GNUSTL_LIBS@
 GRAPHENE_CFLAGS = @GRAPHENE_CFLAGS@
 GRAPHENE_LIBS = @GRAPHENE_LIBS@
 GREP = @GREP@
-GSETTINGS_CFLAGS = @GSETTINGS_CFLAGS@
-GSETTINGS_DISABLE_SCHEMAS_COMPILE = @GSETTINGS_DISABLE_SCHEMAS_COMPILE@
-GSETTINGS_LIBS = @GSETTINGS_LIBS@
 GSM_LIBS = @GSM_LIBS@
 GSTPB_PLUGINS_DIR = @GSTPB_PLUGINS_DIR@
 GSTPB_PREFIX = @GSTPB_PREFIX@
 GST_AGE = @GST_AGE@
+GST_ALLOCATORS_CFLAGS = @GST_ALLOCATORS_CFLAGS@
+GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
 GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
 GST_API_VERSION = @GST_API_VERSION@
 GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
@@ -393,6 +397,8 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PBUTILS_CFLAGS = @GST_PBUTILS_CFLAGS@
+GST_PBUTILS_LIBS = @GST_PBUTILS_LIBS@
 GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BAD_CFLAGS = @GST_PLUGINS_BAD_CFLAGS@
@@ -418,6 +424,8 @@
 GST_PREFIX = @GST_PREFIX@
 GST_REVISION = @GST_REVISION@
 GST_TOOLS_DIR = @GST_TOOLS_DIR@
+GST_VIDEO_CFLAGS = @GST_VIDEO_CFLAGS@
+GST_VIDEO_LIBS = @GST_VIDEO_LIBS@
 GTK3_CFLAGS = @GTK3_CFLAGS@
 GTK3_GL_CFLAGS = @GTK3_GL_CFLAGS@
 GTK3_GL_LIBS = @GTK3_GL_LIBS@
@@ -519,6 +527,7 @@
 LTLIBICONV = @LTLIBICONV@
 LTLIBINTL = @LTLIBINTL@
 LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
 MANIFEST_TOOL = @MANIFEST_TOOL@
@@ -532,8 +541,6 @@
 MODPLUG_LIBS = @MODPLUG_LIBS@
 MPEG2ENC_CFLAGS = @MPEG2ENC_CFLAGS@
 MPEG2ENC_LIBS = @MPEG2ENC_LIBS@
-MPG123_CFLAGS = @MPG123_CFLAGS@
-MPG123_LIBS = @MPG123_LIBS@
 MPLEX_CFLAGS = @MPLEX_CFLAGS@
 MPLEX_LDFLAGS = @MPLEX_LDFLAGS@
 MPLEX_LIBS = @MPLEX_LIBS@
@@ -549,6 +556,8 @@
 NETTLE_LIBS = @NETTLE_LIBS@
 NM = @NM@
 NMEDIT = @NMEDIT@
+NVENCODE_CFLAGS = @NVENCODE_CFLAGS@
+NVENCODE_LIBS = @NVENCODE_LIBS@
 OBJC = @OBJC@
 OBJCDEPMODE = @OBJCDEPMODE@
 OBJCFLAGS = @OBJCFLAGS@
@@ -606,16 +615,18 @@
 PYTHON_PLATFORM = @PYTHON_PLATFORM@
 PYTHON_PREFIX = @PYTHON_PREFIX@
 PYTHON_VERSION = @PYTHON_VERSION@
+QT_ANDROID_CFLAGS = @QT_ANDROID_CFLAGS@
+QT_ANDROID_LIBS = @QT_ANDROID_LIBS@
 QT_CFLAGS = @QT_CFLAGS@
 QT_LIBS = @QT_LIBS@
+QT_MAC_CFLAGS = @QT_MAC_CFLAGS@
+QT_MAC_LIBS = @QT_MAC_LIBS@
 QT_WAYLAND_CFLAGS = @QT_WAYLAND_CFLAGS@
 QT_WAYLAND_LIBS = @QT_WAYLAND_LIBS@
 QT_X11_CFLAGS = @QT_X11_CFLAGS@
 QT_X11_LIBS = @QT_X11_LIBS@
 RANLIB = @RANLIB@
 RCC = @RCC@
-RSVG_2_36_2_CFLAGS = @RSVG_2_36_2_CFLAGS@
-RSVG_2_36_2_LIBS = @RSVG_2_36_2_LIBS@
 RSVG_CFLAGS = @RSVG_CFLAGS@
 RSVG_LIBS = @RSVG_LIBS@
 RTMP_CFLAGS = @RTMP_CFLAGS@
@@ -667,6 +678,7 @@
 VOAACENC_LIBS = @VOAACENC_LIBS@
 VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
 VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VULKAN_LIBS = @VULKAN_LIBS@
 WARNING_CFLAGS = @WARNING_CFLAGS@
 WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
 WARNING_OBJCFLAGS = @WARNING_OBJCFLAGS@
@@ -677,6 +689,7 @@
 WAYLAND_LIBS = @WAYLAND_LIBS@
 WEBP_CFLAGS = @WEBP_CFLAGS@
 WEBP_LIBS = @WEBP_LIBS@
+WGET = @WGET@
 WILDMIDI_CFLAGS = @WILDMIDI_CFLAGS@
 WILDMIDI_LIBS = @WILDMIDI_LIBS@
 WINKS_LIBS = @WINKS_LIBS@
@@ -686,6 +699,8 @@
 X11_LIBS = @X11_LIBS@
 X265_CFLAGS = @X265_CFLAGS@
 X265_LIBS = @X265_LIBS@
+XCB_CFLAGS = @XCB_CFLAGS@
+XCB_LIBS = @XCB_LIBS@
 XCOMPOSITE_CFLAGS = @XCOMPOSITE_CFLAGS@
 XCOMPOSITE_LIBS = @XCOMPOSITE_LIBS@
 XGETTEXT = @XGETTEXT@
@@ -723,7 +738,6 @@
 docdir = @docdir@
 dvidir = @dvidir@
 exec_prefix = @exec_prefix@
-gsettingsschemadir = @gsettingsschemadir@
 host = @host@
 host_alias = @host_alias@
 host_cpu = @host_cpu@
diff --git a/gst/jp2kdecimator/gstjp2kdecimator.c b/gst/jp2kdecimator/gstjp2kdecimator.c
index 78c1fd4..cb95cc0 100644
--- a/gst/jp2kdecimator/gstjp2kdecimator.c
+++ b/gst/jp2kdecimator/gstjp2kdecimator.c
@@ -25,7 +25,7 @@
  * <refsect2>
  * <title>Example launch line</title>
  * |[
- * gst-launch -v videotestsrc num-buffers=1 ! jp2kenc ! \
+ * gst-launch-1.0 -v videotestsrc num-buffers=1 ! jp2kenc ! \
  *   gstjp2kdecimator max-decomposition-levels=2 ! jp2kdec ! \
  *   videoconvert ! autovideosink
  * ]|
diff --git a/gst/jpegformat/Makefile.in b/gst/jpegformat/Makefile.in
index ac620fb..1cf88c8 100644
--- a/gst/jpegformat/Makefile.in
+++ b/gst/jpegformat/Makefile.in
@@ -116,16 +116,15 @@
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
 	$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
-	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gsettings.m4 \
-	$(top_srcdir)/m4/gst-fionread.m4 $(top_srcdir)/m4/gst-sdl.m4 \
-	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
-	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
-	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libgcrypt.m4 \
-	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
-	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
-	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
-	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
-	$(top_srcdir)/configure.ac
+	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gst-fionread.m4 \
+	$(top_srcdir)/m4/gst-sdl.m4 $(top_srcdir)/m4/iconv.m4 \
+	$(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \
+	$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
+	$(top_srcdir)/m4/libgcrypt.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
+	$(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \
@@ -276,6 +275,8 @@
 CLUTTER_X11_LIBS = @CLUTTER_X11_LIBS@
 CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
+CUDA_CFLAGS = @CUDA_CFLAGS@
+CUDA_LIBS = @CUDA_LIBS@
 CURL_CFLAGS = @CURL_CFLAGS@
 CURL_LIBS = @CURL_LIBS@
 CXX = @CXX@
@@ -313,6 +314,8 @@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
+EGL_CFLAGS = @EGL_CFLAGS@
+EGL_LIBS = @EGL_LIBS@
 EGREP = @EGREP@
 ERROR_CFLAGS = @ERROR_CFLAGS@
 ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
@@ -321,7 +324,6 @@
 EXIF_CFLAGS = @EXIF_CFLAGS@
 EXIF_LIBS = @EXIF_LIBS@
 FAAC_LIBS = @FAAC_LIBS@
-FAAD_IS_NEAAC = @FAAD_IS_NEAAC@
 FAAD_LIBS = @FAAD_LIBS@
 FFLAGS = @FFLAGS@
 FGREP = @FGREP@
@@ -340,8 +342,9 @@
 GIO_LIBS = @GIO_LIBS@
 GIO_UNIX_CFLAGS = @GIO_UNIX_CFLAGS@
 GIO_UNIX_LIBS = @GIO_UNIX_LIBS@
+GLES2_CFLAGS = @GLES2_CFLAGS@
+GLES2_LIBS = @GLES2_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
-GLIB_COMPILE_SCHEMAS = @GLIB_COMPILE_SCHEMAS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
@@ -358,16 +361,17 @@
 GMODULE_NO_EXPORT_LIBS = @GMODULE_NO_EXPORT_LIBS@
 GMSGFMT = @GMSGFMT@
 GMSGFMT_015 = @GMSGFMT_015@
+GNUSTL_CFLAGS = @GNUSTL_CFLAGS@
+GNUSTL_LIBS = @GNUSTL_LIBS@
 GRAPHENE_CFLAGS = @GRAPHENE_CFLAGS@
 GRAPHENE_LIBS = @GRAPHENE_LIBS@
 GREP = @GREP@
-GSETTINGS_CFLAGS = @GSETTINGS_CFLAGS@
-GSETTINGS_DISABLE_SCHEMAS_COMPILE = @GSETTINGS_DISABLE_SCHEMAS_COMPILE@
-GSETTINGS_LIBS = @GSETTINGS_LIBS@
 GSM_LIBS = @GSM_LIBS@
 GSTPB_PLUGINS_DIR = @GSTPB_PLUGINS_DIR@
 GSTPB_PREFIX = @GSTPB_PREFIX@
 GST_AGE = @GST_AGE@
+GST_ALLOCATORS_CFLAGS = @GST_ALLOCATORS_CFLAGS@
+GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
 GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
 GST_API_VERSION = @GST_API_VERSION@
 GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
@@ -393,6 +397,8 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PBUTILS_CFLAGS = @GST_PBUTILS_CFLAGS@
+GST_PBUTILS_LIBS = @GST_PBUTILS_LIBS@
 GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BAD_CFLAGS = @GST_PLUGINS_BAD_CFLAGS@
@@ -418,6 +424,8 @@
 GST_PREFIX = @GST_PREFIX@
 GST_REVISION = @GST_REVISION@
 GST_TOOLS_DIR = @GST_TOOLS_DIR@
+GST_VIDEO_CFLAGS = @GST_VIDEO_CFLAGS@
+GST_VIDEO_LIBS = @GST_VIDEO_LIBS@
 GTK3_CFLAGS = @GTK3_CFLAGS@
 GTK3_GL_CFLAGS = @GTK3_GL_CFLAGS@
 GTK3_GL_LIBS = @GTK3_GL_LIBS@
@@ -519,6 +527,7 @@
 LTLIBICONV = @LTLIBICONV@
 LTLIBINTL = @LTLIBINTL@
 LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
 MANIFEST_TOOL = @MANIFEST_TOOL@
@@ -532,8 +541,6 @@
 MODPLUG_LIBS = @MODPLUG_LIBS@
 MPEG2ENC_CFLAGS = @MPEG2ENC_CFLAGS@
 MPEG2ENC_LIBS = @MPEG2ENC_LIBS@
-MPG123_CFLAGS = @MPG123_CFLAGS@
-MPG123_LIBS = @MPG123_LIBS@
 MPLEX_CFLAGS = @MPLEX_CFLAGS@
 MPLEX_LDFLAGS = @MPLEX_LDFLAGS@
 MPLEX_LIBS = @MPLEX_LIBS@
@@ -549,6 +556,8 @@
 NETTLE_LIBS = @NETTLE_LIBS@
 NM = @NM@
 NMEDIT = @NMEDIT@
+NVENCODE_CFLAGS = @NVENCODE_CFLAGS@
+NVENCODE_LIBS = @NVENCODE_LIBS@
 OBJC = @OBJC@
 OBJCDEPMODE = @OBJCDEPMODE@
 OBJCFLAGS = @OBJCFLAGS@
@@ -606,16 +615,18 @@
 PYTHON_PLATFORM = @PYTHON_PLATFORM@
 PYTHON_PREFIX = @PYTHON_PREFIX@
 PYTHON_VERSION = @PYTHON_VERSION@
+QT_ANDROID_CFLAGS = @QT_ANDROID_CFLAGS@
+QT_ANDROID_LIBS = @QT_ANDROID_LIBS@
 QT_CFLAGS = @QT_CFLAGS@
 QT_LIBS = @QT_LIBS@
+QT_MAC_CFLAGS = @QT_MAC_CFLAGS@
+QT_MAC_LIBS = @QT_MAC_LIBS@
 QT_WAYLAND_CFLAGS = @QT_WAYLAND_CFLAGS@
 QT_WAYLAND_LIBS = @QT_WAYLAND_LIBS@
 QT_X11_CFLAGS = @QT_X11_CFLAGS@
 QT_X11_LIBS = @QT_X11_LIBS@
 RANLIB = @RANLIB@
 RCC = @RCC@
-RSVG_2_36_2_CFLAGS = @RSVG_2_36_2_CFLAGS@
-RSVG_2_36_2_LIBS = @RSVG_2_36_2_LIBS@
 RSVG_CFLAGS = @RSVG_CFLAGS@
 RSVG_LIBS = @RSVG_LIBS@
 RTMP_CFLAGS = @RTMP_CFLAGS@
@@ -667,6 +678,7 @@
 VOAACENC_LIBS = @VOAACENC_LIBS@
 VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
 VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VULKAN_LIBS = @VULKAN_LIBS@
 WARNING_CFLAGS = @WARNING_CFLAGS@
 WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
 WARNING_OBJCFLAGS = @WARNING_OBJCFLAGS@
@@ -677,6 +689,7 @@
 WAYLAND_LIBS = @WAYLAND_LIBS@
 WEBP_CFLAGS = @WEBP_CFLAGS@
 WEBP_LIBS = @WEBP_LIBS@
+WGET = @WGET@
 WILDMIDI_CFLAGS = @WILDMIDI_CFLAGS@
 WILDMIDI_LIBS = @WILDMIDI_LIBS@
 WINKS_LIBS = @WINKS_LIBS@
@@ -686,6 +699,8 @@
 X11_LIBS = @X11_LIBS@
 X265_CFLAGS = @X265_CFLAGS@
 X265_LIBS = @X265_LIBS@
+XCB_CFLAGS = @XCB_CFLAGS@
+XCB_LIBS = @XCB_LIBS@
 XCOMPOSITE_CFLAGS = @XCOMPOSITE_CFLAGS@
 XCOMPOSITE_LIBS = @XCOMPOSITE_LIBS@
 XGETTEXT = @XGETTEXT@
@@ -723,7 +738,6 @@
 docdir = @docdir@
 dvidir = @dvidir@
 exec_prefix = @exec_prefix@
-gsettingsschemadir = @gsettingsschemadir@
 host = @host@
 host_alias = @host_alias@
 host_cpu = @host_cpu@
diff --git a/gst/jpegformat/gstjifmux.c b/gst/jpegformat/gstjifmux.c
index 719067a..3a6b6fd 100644
--- a/gst/jpegformat/gstjifmux.c
+++ b/gst/jpegformat/gstjifmux.c
@@ -31,7 +31,7 @@
  * <refsect2>
  * <title>Example launch line</title>
  * |[
- * gst-launch -v videotestsrc num-buffers=1 ! jpegenc ! jifmux ! filesink location=...
+ * gst-launch-1.0 -v videotestsrc num-buffers=1 ! jpegenc ! jifmux ! filesink location=...
  * ]|
  * The above pipeline renders a frame, encodes to jpeg, adds metadata and writes
  * it to disk.
@@ -46,8 +46,8 @@
 file trailer: EOI
 
 tests:
-gst-launch videotestsrc num-buffers=1 ! jpegenc ! jifmux ! filesink location=test1.jpeg
-gst-launch videotestsrc num-buffers=1 ! jpegenc ! taginject tags="comment=\"test image\"" ! jifmux ! filesink location=test2.jpeg
+gst-launch-1.0 videotestsrc num-buffers=1 ! jpegenc ! jifmux ! filesink location=test1.jpeg
+gst-launch-1.0 videotestsrc num-buffers=1 ! jpegenc ! taginject tags="comment=test image" ! jifmux ! filesink location=test2.jpeg
 */
 
 #ifdef HAVE_CONFIG_H
diff --git a/gst/jpegformat/gstjpegparse.c b/gst/jpegformat/gstjpegparse.c
index d55b84f..77e53a6 100644
--- a/gst/jpegformat/gstjpegparse.c
+++ b/gst/jpegformat/gstjpegparse.c
@@ -33,7 +33,7 @@
  * <refsect2>
  * <title>Example launch line</title>
  * |[
- * gst-launch -v souphttpsrc location=... ! jpegparse ! matroskamux ! filesink location=...
+ * gst-launch-1.0 -v souphttpsrc location=... ! jpegparse ! matroskamux ! filesink location=...
  * ]|
  * The above pipeline fetches a motion JPEG stream from an IP camera over
  * HTTP and stores it in a matroska file.
diff --git a/gst/librfb/Makefile.in b/gst/librfb/Makefile.in
index 38a1ab9..f2bcf10 100644
--- a/gst/librfb/Makefile.in
+++ b/gst/librfb/Makefile.in
@@ -118,16 +118,15 @@
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
 	$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
-	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gsettings.m4 \
-	$(top_srcdir)/m4/gst-fionread.m4 $(top_srcdir)/m4/gst-sdl.m4 \
-	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
-	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
-	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libgcrypt.m4 \
-	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
-	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
-	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
-	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
-	$(top_srcdir)/configure.ac
+	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gst-fionread.m4 \
+	$(top_srcdir)/m4/gst-sdl.m4 $(top_srcdir)/m4/iconv.m4 \
+	$(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \
+	$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
+	$(top_srcdir)/m4/libgcrypt.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
+	$(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \
@@ -284,6 +283,8 @@
 CLUTTER_X11_LIBS = @CLUTTER_X11_LIBS@
 CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
+CUDA_CFLAGS = @CUDA_CFLAGS@
+CUDA_LIBS = @CUDA_LIBS@
 CURL_CFLAGS = @CURL_CFLAGS@
 CURL_LIBS = @CURL_LIBS@
 CXX = @CXX@
@@ -321,6 +322,8 @@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
+EGL_CFLAGS = @EGL_CFLAGS@
+EGL_LIBS = @EGL_LIBS@
 EGREP = @EGREP@
 ERROR_CFLAGS = @ERROR_CFLAGS@
 ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
@@ -329,7 +332,6 @@
 EXIF_CFLAGS = @EXIF_CFLAGS@
 EXIF_LIBS = @EXIF_LIBS@
 FAAC_LIBS = @FAAC_LIBS@
-FAAD_IS_NEAAC = @FAAD_IS_NEAAC@
 FAAD_LIBS = @FAAD_LIBS@
 FFLAGS = @FFLAGS@
 FGREP = @FGREP@
@@ -348,8 +350,9 @@
 GIO_LIBS = @GIO_LIBS@
 GIO_UNIX_CFLAGS = @GIO_UNIX_CFLAGS@
 GIO_UNIX_LIBS = @GIO_UNIX_LIBS@
+GLES2_CFLAGS = @GLES2_CFLAGS@
+GLES2_LIBS = @GLES2_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
-GLIB_COMPILE_SCHEMAS = @GLIB_COMPILE_SCHEMAS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
@@ -366,16 +369,17 @@
 GMODULE_NO_EXPORT_LIBS = @GMODULE_NO_EXPORT_LIBS@
 GMSGFMT = @GMSGFMT@
 GMSGFMT_015 = @GMSGFMT_015@
+GNUSTL_CFLAGS = @GNUSTL_CFLAGS@
+GNUSTL_LIBS = @GNUSTL_LIBS@
 GRAPHENE_CFLAGS = @GRAPHENE_CFLAGS@
 GRAPHENE_LIBS = @GRAPHENE_LIBS@
 GREP = @GREP@
-GSETTINGS_CFLAGS = @GSETTINGS_CFLAGS@
-GSETTINGS_DISABLE_SCHEMAS_COMPILE = @GSETTINGS_DISABLE_SCHEMAS_COMPILE@
-GSETTINGS_LIBS = @GSETTINGS_LIBS@
 GSM_LIBS = @GSM_LIBS@
 GSTPB_PLUGINS_DIR = @GSTPB_PLUGINS_DIR@
 GSTPB_PREFIX = @GSTPB_PREFIX@
 GST_AGE = @GST_AGE@
+GST_ALLOCATORS_CFLAGS = @GST_ALLOCATORS_CFLAGS@
+GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
 GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
 GST_API_VERSION = @GST_API_VERSION@
 GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
@@ -401,6 +405,8 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PBUTILS_CFLAGS = @GST_PBUTILS_CFLAGS@
+GST_PBUTILS_LIBS = @GST_PBUTILS_LIBS@
 GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BAD_CFLAGS = @GST_PLUGINS_BAD_CFLAGS@
@@ -426,6 +432,8 @@
 GST_PREFIX = @GST_PREFIX@
 GST_REVISION = @GST_REVISION@
 GST_TOOLS_DIR = @GST_TOOLS_DIR@
+GST_VIDEO_CFLAGS = @GST_VIDEO_CFLAGS@
+GST_VIDEO_LIBS = @GST_VIDEO_LIBS@
 GTK3_CFLAGS = @GTK3_CFLAGS@
 GTK3_GL_CFLAGS = @GTK3_GL_CFLAGS@
 GTK3_GL_LIBS = @GTK3_GL_LIBS@
@@ -527,6 +535,7 @@
 LTLIBICONV = @LTLIBICONV@
 LTLIBINTL = @LTLIBINTL@
 LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
 MANIFEST_TOOL = @MANIFEST_TOOL@
@@ -540,8 +549,6 @@
 MODPLUG_LIBS = @MODPLUG_LIBS@
 MPEG2ENC_CFLAGS = @MPEG2ENC_CFLAGS@
 MPEG2ENC_LIBS = @MPEG2ENC_LIBS@
-MPG123_CFLAGS = @MPG123_CFLAGS@
-MPG123_LIBS = @MPG123_LIBS@
 MPLEX_CFLAGS = @MPLEX_CFLAGS@
 MPLEX_LDFLAGS = @MPLEX_LDFLAGS@
 MPLEX_LIBS = @MPLEX_LIBS@
@@ -557,6 +564,8 @@
 NETTLE_LIBS = @NETTLE_LIBS@
 NM = @NM@
 NMEDIT = @NMEDIT@
+NVENCODE_CFLAGS = @NVENCODE_CFLAGS@
+NVENCODE_LIBS = @NVENCODE_LIBS@
 OBJC = @OBJC@
 OBJCDEPMODE = @OBJCDEPMODE@
 OBJCFLAGS = @OBJCFLAGS@
@@ -614,16 +623,18 @@
 PYTHON_PLATFORM = @PYTHON_PLATFORM@
 PYTHON_PREFIX = @PYTHON_PREFIX@
 PYTHON_VERSION = @PYTHON_VERSION@
+QT_ANDROID_CFLAGS = @QT_ANDROID_CFLAGS@
+QT_ANDROID_LIBS = @QT_ANDROID_LIBS@
 QT_CFLAGS = @QT_CFLAGS@
 QT_LIBS = @QT_LIBS@
+QT_MAC_CFLAGS = @QT_MAC_CFLAGS@
+QT_MAC_LIBS = @QT_MAC_LIBS@
 QT_WAYLAND_CFLAGS = @QT_WAYLAND_CFLAGS@
 QT_WAYLAND_LIBS = @QT_WAYLAND_LIBS@
 QT_X11_CFLAGS = @QT_X11_CFLAGS@
 QT_X11_LIBS = @QT_X11_LIBS@
 RANLIB = @RANLIB@
 RCC = @RCC@
-RSVG_2_36_2_CFLAGS = @RSVG_2_36_2_CFLAGS@
-RSVG_2_36_2_LIBS = @RSVG_2_36_2_LIBS@
 RSVG_CFLAGS = @RSVG_CFLAGS@
 RSVG_LIBS = @RSVG_LIBS@
 RTMP_CFLAGS = @RTMP_CFLAGS@
@@ -675,6 +686,7 @@
 VOAACENC_LIBS = @VOAACENC_LIBS@
 VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
 VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VULKAN_LIBS = @VULKAN_LIBS@
 WARNING_CFLAGS = @WARNING_CFLAGS@
 WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
 WARNING_OBJCFLAGS = @WARNING_OBJCFLAGS@
@@ -685,6 +697,7 @@
 WAYLAND_LIBS = @WAYLAND_LIBS@
 WEBP_CFLAGS = @WEBP_CFLAGS@
 WEBP_LIBS = @WEBP_LIBS@
+WGET = @WGET@
 WILDMIDI_CFLAGS = @WILDMIDI_CFLAGS@
 WILDMIDI_LIBS = @WILDMIDI_LIBS@
 WINKS_LIBS = @WINKS_LIBS@
@@ -694,6 +707,8 @@
 X11_LIBS = @X11_LIBS@
 X265_CFLAGS = @X265_CFLAGS@
 X265_LIBS = @X265_LIBS@
+XCB_CFLAGS = @XCB_CFLAGS@
+XCB_LIBS = @XCB_LIBS@
 XCOMPOSITE_CFLAGS = @XCOMPOSITE_CFLAGS@
 XCOMPOSITE_LIBS = @XCOMPOSITE_LIBS@
 XGETTEXT = @XGETTEXT@
@@ -731,7 +746,6 @@
 docdir = @docdir@
 dvidir = @dvidir@
 exec_prefix = @exec_prefix@
-gsettingsschemadir = @gsettingsschemadir@
 host = @host@
 host_alias = @host_alias@
 host_cpu = @host_cpu@
diff --git a/gst/librfb/rfbdecoder.c b/gst/librfb/rfbdecoder.c
index 88f3b03..bd225ad 100644
--- a/gst/librfb/rfbdecoder.c
+++ b/gst/librfb/rfbdecoder.c
@@ -89,8 +89,7 @@
 
   g_clear_error (&decoder->error);
 
-  if (decoder->data)
-    g_free (decoder->data);
+  g_free (decoder->data);
 
   g_free (decoder);
 }
@@ -234,8 +233,7 @@
   g_return_val_if_fail (len > 0, NULL);
 
   if (G_UNLIKELY (len > decoder->data_len)) {
-    if (decoder->data)
-      g_free (decoder->data);
+    g_free (decoder->data);
     decoder->data = g_malloc (len);
     decoder->data_len = len;
   }
diff --git a/gst/liveadder/Makefile.am b/gst/liveadder/Makefile.am
deleted file mode 100644
index e6f5d44..0000000
--- a/gst/liveadder/Makefile.am
+++ /dev/null
@@ -1,11 +0,0 @@
-plugin_LTLIBRARIES = libgstliveadder.la
-
-libgstliveadder_la_SOURCES = liveadder.c
-libgstliveadder_la_CFLAGS = $(GST_PLUGINS_BAD_CFLAGS) $(GST_PLUGINS_BASE_CFLAGS) $(GST_CFLAGS)
-libgstliveadder_la_LIBADD = \
-	$(GST_PLUGINS_BASE_LIBS) -lgstaudio-@GST_API_VERSION@ \
-	$(GST_BASE_LIBS) $(GST_LIBS)
-libgstliveadder_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS)
-libgstliveadder_la_LIBTOOLFLAGS = $(GST_PLUGIN_LIBTOOLFLAGS)
-
-noinst_HEADERS = liveadder.h
diff --git a/gst/liveadder/liveadder.c b/gst/liveadder/liveadder.c
deleted file mode 100644
index a660419..0000000
--- a/gst/liveadder/liveadder.c
+++ /dev/null
@@ -1,1538 +0,0 @@
-/*
- * GStreamer
- *
- *  Copyright 2012 Collabora Ltd
- *  Copyright 2008 Nokia Corporation
- *   @author: Olivier Crete <olivier.crete@collabora.co.uk>
- *
- * With parts copied from the adder plugin which is
- * Copyright (C) 1999,2000 Erik Walthinsen <omega@cse.ogi.edu>
- *                    2001 Thomas <thomas@apestaart.org>
- *               2005,2006 Wim Taymans <wim@fluendo.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301 USA
- *
- */
-/**
- * SECTION:element-liveadder
- * @see_also: adder
- *
- * The live adder allows to mix several streams into one by adding the data.
- * Mixed data is clamped to the min/max values of the data format.
- *
- * Unlike the adder, the liveadder mixes the streams according the their
- * timestamps and waits for some milli-seconds before trying doing the mixing.
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "liveadder.h"
-
-#include <gst/audio/audio.h>
-
-#include <string.h>
-
-#define DEFAULT_LATENCY_MS 60
-
-GST_DEBUG_CATEGORY_STATIC (live_adder_debug);
-#define GST_CAT_DEFAULT (live_adder_debug)
-
-static GstStaticPadTemplate gst_live_adder_sink_template =
-GST_STATIC_PAD_TEMPLATE ("sink_%u",
-    GST_PAD_SINK,
-    GST_PAD_REQUEST,
-    GST_STATIC_CAPS (GST_AUDIO_CAPS_MAKE ("{ S8, U8, "
-            GST_AUDIO_NE (S16) "," GST_AUDIO_NE (U16) ","
-            GST_AUDIO_NE (S32) "," GST_AUDIO_NE (U32) ","
-            GST_AUDIO_NE (F32) "," GST_AUDIO_NE (F64) "}"))
-    );
-
-static GstStaticPadTemplate gst_live_adder_src_template =
-GST_STATIC_PAD_TEMPLATE ("src",
-    GST_PAD_SRC,
-    GST_PAD_ALWAYS,
-    GST_STATIC_CAPS (GST_AUDIO_CAPS_MAKE ("{ S8, U8, "
-            GST_AUDIO_NE (S16) "," GST_AUDIO_NE (U16) ","
-            GST_AUDIO_NE (S32) "," GST_AUDIO_NE (U32) ","
-            GST_AUDIO_NE (F32) "," GST_AUDIO_NE (F64) "}"))
-    );
-
-/* Valve signals and args */
-enum
-{
-  /* FILL ME */
-  LAST_SIGNAL
-};
-
-enum
-{
-  PROP_0,
-  PROP_LATENCY,
-};
-
-typedef struct _GstLiveAdderPadPrivate
-{
-  GstSegment segment;
-  gboolean eos;
-
-  GstClockTime expected_timestamp;
-
-} GstLiveAdderPadPrivate;
-
-G_DEFINE_TYPE (GstLiveAdder, gst_live_adder, GST_TYPE_ELEMENT);
-
-static void gst_live_adder_finalize (GObject * object);
-static void
-gst_live_adder_set_property (GObject * object,
-    guint prop_id, const GValue * value, GParamSpec * pspec);
-static void
-gst_live_adder_get_property (GObject * object,
-    guint prop_id, GValue * value, GParamSpec * pspec);
-
-static GstPad *gst_live_adder_request_new_pad (GstElement * element,
-    GstPadTemplate * templ, const gchar * name, const GstCaps * caps);
-static void gst_live_adder_release_pad (GstElement * element, GstPad * pad);
-static GstStateChangeReturn
-gst_live_adder_change_state (GstElement * element, GstStateChange transition);
-
-static gboolean gst_live_adder_setcaps (GstLiveAdder * adder, GstPad * pad,
-    GstCaps * caps);
-static GstCaps *gst_live_adder_sink_getcaps (GstLiveAdder * adder, GstPad * pad,
-    GstCaps * filter);
-static gboolean gst_live_adder_src_activate_mode (GstPad * pad,
-    GstObject * parent, GstPadMode mode, gboolean active);
-static gboolean gst_live_adder_src_event (GstPad * pad, GstObject * parent,
-    GstEvent * event);
-
-static void gst_live_adder_loop (gpointer data);
-static gboolean gst_live_adder_src_query (GstPad * pad, GstObject * parent,
-    GstQuery * query);
-static gboolean gst_live_adder_sink_query (GstPad * pad, GstObject * parent,
-    GstQuery * query);
-static gboolean gst_live_adder_sink_event (GstPad * pad, GstObject * parent,
-    GstEvent * event);
-
-
-static void reset_pad_private (GstPad * pad);
-
-/* clipping versions */
-#define MAKE_FUNC(name,type,ttype,min,max)                      \
-static void name (type *out, type *in, gint bytes) {            \
-  gint i;                                                       \
-  for (i = 0; i < bytes / sizeof (type); i++)                   \
-    out[i] = CLAMP ((ttype)out[i] + (ttype)in[i], min, max);    \
-}
-
-/* non-clipping versions (for float) */
-#define MAKE_FUNC_NC(name,type,ttype)                           \
-static void name (type *out, type *in, gint bytes) {            \
-  gint i;                                                       \
-  for (i = 0; i < bytes / sizeof (type); i++)                   \
-    out[i] = (ttype)out[i] + (ttype)in[i];                      \
-}
-
-/* *INDENT-OFF* */
-MAKE_FUNC (add_int32, gint32, gint64, G_MININT32, G_MAXINT32)
-MAKE_FUNC (add_int16, gint16, gint32, G_MININT16, G_MAXINT16)
-MAKE_FUNC (add_int8, gint8, gint16, G_MININT8, G_MAXINT8)
-MAKE_FUNC (add_uint32, guint32, guint64, 0, G_MAXUINT32)
-MAKE_FUNC (add_uint16, guint16, guint32, 0, G_MAXUINT16)
-MAKE_FUNC (add_uint8, guint8, guint16, 0, G_MAXUINT8)
-MAKE_FUNC_NC (add_float64, gdouble, gdouble)
-MAKE_FUNC_NC (add_float32, gfloat, gfloat)
-/* *INDENT-ON* */
-
-
-static void
-gst_live_adder_class_init (GstLiveAdderClass * klass)
-{
-  GObjectClass *gobject_class = (GObjectClass *) klass;
-  GstElementClass *gstelement_class = (GstElementClass *) klass;
-
-  GST_DEBUG_CATEGORY_INIT (live_adder_debug, "liveadder", 0, "Live Adder");
-
-  gst_element_class_add_pad_template (gstelement_class,
-      gst_static_pad_template_get (&gst_live_adder_src_template));
-  gst_element_class_add_pad_template (gstelement_class,
-      gst_static_pad_template_get (&gst_live_adder_sink_template));
-  gst_element_class_set_static_metadata (gstelement_class, "Live Adder element",
-      "Generic/Audio",
-      "Mixes live/discontinuous audio streams",
-      "Olivier Crete <olivier.crete@collabora.co.uk>");
-
-  gobject_class->finalize = gst_live_adder_finalize;
-  gobject_class->set_property = gst_live_adder_set_property;
-  gobject_class->get_property = gst_live_adder_get_property;
-
-  gstelement_class->request_new_pad = gst_live_adder_request_new_pad;
-  gstelement_class->release_pad = gst_live_adder_release_pad;
-  gstelement_class->change_state = gst_live_adder_change_state;
-
-  g_object_class_install_property (gobject_class, PROP_LATENCY,
-      g_param_spec_uint ("latency", "Buffering latency",
-          "Amount of data to buffer (in milliseconds)",
-          0, G_MAXUINT, DEFAULT_LATENCY_MS,
-          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
-}
-
-static void
-gst_live_adder_init (GstLiveAdder * adder)
-{
-  adder->srcpad =
-      gst_pad_new_from_static_template (&gst_live_adder_src_template, "src");
-  gst_pad_set_query_function (adder->srcpad,
-      GST_DEBUG_FUNCPTR (gst_live_adder_src_query));
-  gst_pad_set_event_function (adder->srcpad,
-      GST_DEBUG_FUNCPTR (gst_live_adder_src_event));
-  gst_pad_set_activatemode_function (adder->srcpad,
-      GST_DEBUG_FUNCPTR (gst_live_adder_src_activate_mode));
-  gst_element_add_pad (GST_ELEMENT (adder), adder->srcpad);
-
-  adder->padcount = 0;
-  adder->func = NULL;
-  g_cond_init (&adder->not_empty_cond);
-
-  adder->next_timestamp = GST_CLOCK_TIME_NONE;
-
-  adder->latency_ms = DEFAULT_LATENCY_MS;
-
-  adder->buffers = g_queue_new ();
-}
-
-
-static void
-gst_live_adder_finalize (GObject * object)
-{
-  GstLiveAdder *adder = GST_LIVE_ADDER (object);
-
-  g_cond_clear (&adder->not_empty_cond);
-
-  g_queue_foreach (adder->buffers, (GFunc) gst_mini_object_unref, NULL);
-  while (g_queue_pop_head (adder->buffers)) {
-  }
-  g_queue_free (adder->buffers);
-
-  g_list_free (adder->sinkpads);
-
-  G_OBJECT_CLASS (gst_live_adder_parent_class)->finalize (object);
-}
-
-
-static void
-gst_live_adder_set_property (GObject * object,
-    guint prop_id, const GValue * value, GParamSpec * pspec)
-{
-  GstLiveAdder *adder = GST_LIVE_ADDER (object);
-
-  switch (prop_id) {
-    case PROP_LATENCY:
-    {
-      guint64 new_latency, old_latency;
-
-      new_latency = g_value_get_uint (value);
-
-      GST_OBJECT_LOCK (adder);
-      old_latency = adder->latency_ms;
-      adder->latency_ms = new_latency;
-      GST_OBJECT_UNLOCK (adder);
-
-      /* post message if latency changed, this will inform the parent pipeline
-       * that a latency reconfiguration is possible/needed. */
-      if (new_latency != old_latency) {
-        GST_DEBUG_OBJECT (adder, "latency changed to: %" GST_TIME_FORMAT,
-            GST_TIME_ARGS (new_latency));
-
-        gst_element_post_message (GST_ELEMENT_CAST (adder),
-            gst_message_new_latency (GST_OBJECT_CAST (adder)));
-      }
-      break;
-    }
-    default:
-      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
-      break;
-  }
-}
-
-
-static void
-gst_live_adder_get_property (GObject * object,
-    guint prop_id, GValue * value, GParamSpec * pspec)
-{
-  GstLiveAdder *adder = GST_LIVE_ADDER (object);
-
-  switch (prop_id) {
-    case PROP_LATENCY:
-      GST_OBJECT_LOCK (adder);
-      g_value_set_uint (value, adder->latency_ms);
-      GST_OBJECT_UNLOCK (adder);
-      break;
-    default:
-      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
-      break;
-  }
-}
-
-
-/* we can only accept caps that we and downstream can handle. */
-static GstCaps *
-gst_live_adder_sink_getcaps (GstLiveAdder * adder, GstPad * pad,
-    GstCaps * filter)
-{
-  GstCaps *result, *peercaps, *sinkcaps;
-
-  /* get the downstream possible caps */
-  peercaps = gst_pad_peer_query_caps (adder->srcpad, filter);
-  /* get the allowed caps on this sinkpad, we use the fixed caps function so
-   * that it does not call recursively in this function. */
-  sinkcaps = gst_pad_get_current_caps (pad);
-  if (!sinkcaps)
-    sinkcaps = gst_pad_get_pad_template_caps (pad);
-  if (peercaps) {
-    /* if the peer has caps, intersect */
-    GST_DEBUG_OBJECT (adder, "intersecting peer and template caps");
-    result = gst_caps_intersect (peercaps, sinkcaps);
-    gst_caps_unref (sinkcaps);
-    gst_caps_unref (peercaps);
-  } else {
-    /* the peer has no caps (or there is no peer), just use the allowed caps
-     * of this sinkpad. */
-    GST_DEBUG_OBJECT (adder, "no peer caps, using sinkcaps");
-    result = sinkcaps;
-  }
-
-  return result;
-}
-
-struct SetCapsIterCtx
-{
-  GstPad *pad;
-  GstCaps *caps;
-  gboolean all_valid;
-};
-
-static void
-check_other_caps (const GValue * item, gpointer user_data)
-{
-  GstPad *otherpad = GST_PAD (g_value_get_object (item));
-  struct SetCapsIterCtx *ctx = user_data;
-
-  if (otherpad == ctx->pad)
-    return;
-
-  if (!gst_pad_peer_query_accept_caps (otherpad, ctx->caps))
-    ctx->all_valid = FALSE;
-}
-
-static void
-set_other_caps (const GValue * item, gpointer user_data)
-{
-  GstPad *otherpad = GST_PAD (g_value_get_object (item));
-  struct SetCapsIterCtx *ctx = user_data;
-
-  if (otherpad == ctx->pad)
-    return;
-
-  if (!gst_pad_set_caps (otherpad, ctx->caps))
-    ctx->all_valid = FALSE;
-}
-
-/* the first caps we receive on any of the sinkpads will define the caps for all
- * the other sinkpads because we can only mix streams with the same caps.
- * */
-static gboolean
-gst_live_adder_setcaps (GstLiveAdder * adder, GstPad * pad, GstCaps * caps)
-{
-  GstIterator *iter;
-  struct SetCapsIterCtx ctx;
-
-  GST_LOG_OBJECT (adder, "setting caps on pad %p,%s to %" GST_PTR_FORMAT, pad,
-      GST_PAD_NAME (pad), caps);
-
-  /* FIXME, see if the other pads can accept the format. Also lock the
-   * format on the other pads to this new format. */
-  iter = gst_element_iterate_sink_pads (GST_ELEMENT (adder));
-  ctx.pad = pad;
-  ctx.caps = caps;
-  ctx.all_valid = TRUE;
-  while (gst_iterator_foreach (iter, check_other_caps, &ctx) ==
-      GST_ITERATOR_RESYNC) {
-    ctx.all_valid = TRUE;
-    gst_iterator_resync (iter);
-  }
-  if (!ctx.all_valid) {
-    GST_WARNING_OBJECT (adder, "Caps are not acceptable by other sinkpads");
-    gst_iterator_free (iter);
-    return FALSE;
-  }
-
-  while (gst_iterator_foreach (iter, set_other_caps, &ctx) ==
-      GST_ITERATOR_RESYNC) {
-    ctx.all_valid = TRUE;
-    gst_iterator_resync (iter);
-  }
-  gst_iterator_free (iter);
-
-  if (!ctx.all_valid) {
-    GST_WARNING_OBJECT (adder, "Could not set caps on the other sink pads");
-    return FALSE;
-  }
-
-  if (!gst_pad_set_caps (adder->srcpad, caps)) {
-    GST_WARNING_OBJECT (adder, "Could not set caps downstream");
-    return FALSE;
-  }
-
-  GST_OBJECT_LOCK (adder);
-  /* parse caps now */
-  if (!gst_audio_info_from_caps (&adder->info, caps))
-    goto not_supported;
-
-  if (GST_AUDIO_INFO_IS_INTEGER (&adder->info)) {
-    switch (GST_AUDIO_INFO_WIDTH (&adder->info)) {
-      case 8:
-        adder->func = GST_AUDIO_INFO_IS_SIGNED (&adder->info) ?
-            (GstLiveAdderFunction) add_int8 : (GstLiveAdderFunction) add_uint8;
-        break;
-      case 16:
-        adder->func = GST_AUDIO_INFO_IS_SIGNED (&adder->info) ?
-            (GstLiveAdderFunction) add_int16 : (GstLiveAdderFunction)
-            add_uint16;
-        break;
-      case 32:
-        adder->func = GST_AUDIO_INFO_IS_SIGNED (&adder->info) ?
-            (GstLiveAdderFunction) add_int32 : (GstLiveAdderFunction)
-            add_uint32;
-        break;
-      default:
-        goto not_supported;
-    }
-  } else if (GST_AUDIO_INFO_IS_FLOAT (&adder->info)) {
-    switch (GST_AUDIO_INFO_WIDTH (&adder->info)) {
-      case 32:
-        adder->func = (GstLiveAdderFunction) add_float32;
-        break;
-      case 64:
-        adder->func = (GstLiveAdderFunction) add_float64;
-        break;
-      default:
-        goto not_supported;
-    }
-  } else {
-    goto not_supported;
-  }
-
-  GST_OBJECT_UNLOCK (adder);
-  return TRUE;
-
-  /* ERRORS */
-not_supported:
-  {
-    GST_OBJECT_UNLOCK (adder);
-    GST_DEBUG_OBJECT (adder, "unsupported format set as caps");
-    return FALSE;
-  }
-}
-
-static void
-gst_live_adder_flush_start (GstLiveAdder * adder)
-{
-  GST_DEBUG_OBJECT (adder, "Disabling pop on queue");
-
-  GST_OBJECT_LOCK (adder);
-  /* mark ourselves as flushing */
-  adder->srcresult = GST_FLOW_FLUSHING;
-
-  /* Empty the queue */
-  g_queue_foreach (adder->buffers, (GFunc) gst_mini_object_unref, NULL);
-  while (g_queue_pop_head (adder->buffers));
-
-  /* unlock clock, we just unschedule, the entry will be released by the
-   * locking streaming thread. */
-  if (adder->clock_id)
-    gst_clock_id_unschedule (adder->clock_id);
-
-  g_cond_broadcast (&adder->not_empty_cond);
-  GST_OBJECT_UNLOCK (adder);
-}
-
-static gboolean
-gst_live_adder_src_activate_mode (GstPad * pad, GstObject * parent,
-    GstPadMode mode, gboolean active)
-{
-  GstLiveAdder *adder = GST_LIVE_ADDER (parent);
-  gboolean result = TRUE;
-
-  if (mode == GST_PAD_MODE_PULL)
-    return FALSE;
-
-  if (active) {
-    /* Mark as non flushing */
-    GST_OBJECT_LOCK (adder);
-    adder->srcresult = GST_FLOW_OK;
-    GST_OBJECT_UNLOCK (adder);
-
-    /* start pushing out buffers */
-    GST_DEBUG_OBJECT (adder, "Starting task on srcpad");
-    gst_pad_start_task (adder->srcpad,
-        (GstTaskFunction) gst_live_adder_loop, adder, NULL);
-  } else {
-    /* make sure all data processing stops ASAP */
-    gst_live_adder_flush_start (adder);
-
-    /* NOTE this will hardlock if the state change is called from the src pad
-     * task thread because we will _join() the thread. */
-    GST_DEBUG_OBJECT (adder, "Stopping task on srcpad");
-    result = gst_pad_stop_task (pad);
-  }
-
-  return result;
-}
-
-static gboolean
-gst_live_adder_sink_event (GstPad * pad, GstObject * parent, GstEvent * event)
-{
-  GstLiveAdder *adder = GST_LIVE_ADDER (parent);
-  GstLiveAdderPadPrivate *padprivate = NULL;
-  gboolean ret = TRUE;
-
-  padprivate = gst_pad_get_element_private (pad);
-
-  if (!padprivate)
-    return FALSE;
-
-  GST_LOG_OBJECT (adder, "received %s", GST_EVENT_TYPE_NAME (event));
-
-  switch (GST_EVENT_TYPE (event)) {
-    case GST_EVENT_CAPS:
-    {
-      GstCaps *caps;
-
-      gst_event_parse_caps (event, &caps);
-      ret = gst_live_adder_setcaps (adder, pad, caps);
-      gst_event_unref (event);
-      break;
-    }
-    case GST_EVENT_SEGMENT:
-    {
-      const GstSegment *segment;
-      GstSegment livesegment;
-
-      gst_event_parse_segment (event, &segment);
-
-      /* we need time for now */
-      if (segment->format != GST_FORMAT_TIME)
-        goto newseg_wrong_format;
-
-      /* now configure the values, we need these to time the release of the
-       * buffers on the srcpad. */
-      GST_OBJECT_LOCK (adder);
-      gst_segment_copy_into (segment, &padprivate->segment);
-      GST_OBJECT_UNLOCK (adder);
-      gst_event_unref (event);
-
-      gst_segment_init (&livesegment, GST_FORMAT_TIME);
-      gst_pad_push_event (adder->srcpad, gst_event_new_segment (&livesegment));
-      break;
-    }
-    case GST_EVENT_FLUSH_START:
-      gst_live_adder_flush_start (adder);
-      ret = gst_pad_push_event (adder->srcpad, event);
-      break;
-    case GST_EVENT_FLUSH_STOP:
-      GST_OBJECT_LOCK (adder);
-      adder->next_timestamp = GST_CLOCK_TIME_NONE;
-      reset_pad_private (pad);
-      GST_OBJECT_UNLOCK (adder);
-      ret = gst_pad_push_event (adder->srcpad, event);
-      ret &=
-          gst_live_adder_src_activate_mode (adder->srcpad, GST_OBJECT (adder),
-          GST_PAD_MODE_PUSH, TRUE);
-      break;
-    case GST_EVENT_EOS:
-    {
-      GST_OBJECT_LOCK (adder);
-
-      ret = adder->srcresult == GST_FLOW_OK;
-      if (ret && !padprivate->eos) {
-        GST_DEBUG_OBJECT (adder, "queuing EOS");
-        padprivate->eos = TRUE;
-        g_cond_broadcast (&adder->not_empty_cond);
-      } else if (padprivate->eos) {
-        GST_DEBUG_OBJECT (adder, "dropping EOS, we are already EOS");
-      } else {
-        GST_DEBUG_OBJECT (adder, "dropping EOS, reason %s",
-            gst_flow_get_name (adder->srcresult));
-      }
-
-      GST_OBJECT_UNLOCK (adder);
-
-      gst_event_unref (event);
-      break;
-    }
-    default:
-      ret = gst_pad_push_event (adder->srcpad, event);
-      break;
-  }
-
-done:
-
-  return ret;
-
-  /* ERRORS */
-newseg_wrong_format:
-  {
-    GST_DEBUG_OBJECT (adder, "received non TIME segment");
-    ret = FALSE;
-    goto done;
-  }
-}
-
-static gboolean
-gst_live_adder_query_pos_dur (GstLiveAdder * adder, GstFormat format,
-    gboolean position, gint64 * outvalue)
-{
-  GValue item = { 0 };
-  gint64 max = G_MININT64;
-  gboolean res = TRUE;
-  GstIterator *it;
-  gboolean done = FALSE;
-
-  it = gst_element_iterate_sink_pads (GST_ELEMENT_CAST (adder));
-  while (!done) {
-    switch (gst_iterator_next (it, &item)) {
-      case GST_ITERATOR_DONE:
-        done = TRUE;
-        break;
-      case GST_ITERATOR_OK:
-      {
-        GstPad *pad = GST_PAD_CAST (g_value_get_object (&item));
-        gint64 value;
-        gboolean curres;
-
-        /* ask sink peer for duration */
-        if (position)
-          curres = gst_pad_peer_query_position (pad, format, &value);
-        else
-          curres = gst_pad_peer_query_duration (pad, format, &value);
-
-        /* take max from all valid return values */
-        /* Only if the format is the one we requested, otherwise ignore it ?
-         */
-
-        if (curres) {
-          res &= curres;
-
-          /* valid unknown length, stop searching */
-          if (value == -1) {
-            max = value;
-            done = TRUE;
-          } else if (value > max) {
-            max = value;
-          }
-        }
-        g_value_reset (&item);
-        break;
-      }
-      case GST_ITERATOR_RESYNC:
-        max = -1;
-        res = TRUE;
-        break;
-      default:
-        res = FALSE;
-        done = TRUE;
-        break;
-    }
-  }
-
-  g_value_unset (&item);
-  gst_iterator_free (it);
-
-  if (res)
-    *outvalue = max;
-
-  return res;
-}
-
-/* FIXME:
- *
- * When we add a new stream (or remove a stream) the duration might
- * also become invalid again and we need to post a new DURATION
- * message to notify this fact to the parent.
- * For now we take the max of all the upstream elements so the simple
- * cases work at least somewhat.
- */
-static gboolean
-gst_live_adder_query_duration (GstLiveAdder * adder, GstQuery * query)
-{
-  GstFormat format;
-  gint64 max;
-  gboolean res;
-
-  /* parse format */
-  gst_query_parse_duration (query, &format, NULL);
-
-  res = gst_live_adder_query_pos_dur (adder, format, FALSE, &max);
-
-  if (res) {
-    /* and store the max */
-    gst_query_set_duration (query, format, max);
-  }
-
-  return res;
-}
-
-static gboolean
-gst_live_adder_query_position (GstLiveAdder * adder, GstQuery * query)
-{
-  GstFormat format;
-  gint64 max;
-  gboolean res;
-
-  /* parse format */
-  gst_query_parse_position (query, &format, NULL);
-
-  res = gst_live_adder_query_pos_dur (adder, format, TRUE, &max);
-
-  if (res) {
-    /* and store the max */
-    gst_query_set_position (query, format, max);
-  }
-
-  return res;
-}
-
-
-
-static gboolean
-gst_live_adder_src_query (GstPad * pad, GstObject * parent, GstQuery * query)
-{
-  GstLiveAdder *adder = GST_LIVE_ADDER (parent);
-  gboolean res = FALSE;
-
-  switch (GST_QUERY_TYPE (query)) {
-    case GST_QUERY_LATENCY:
-    {
-      /* We need to send the query upstream and add the returned latency to our
-       * own */
-      res = gst_pad_query_default (pad, parent, query);
-
-      if (res) {
-        GstClockTime my_latency = adder->latency_ms * GST_MSECOND;
-        GstClockTime min_latency, max_latency;
-        gboolean live;
-
-        gst_query_parse_latency (query, &live, &min_latency, &max_latency);
-
-        GST_OBJECT_LOCK (adder);
-        adder->peer_latency = min_latency;
-        min_latency += my_latency;
-        GST_OBJECT_UNLOCK (adder);
-
-        /* Make sure we don't risk an overflow */
-        if (max_latency < G_MAXUINT64 - my_latency)
-          max_latency += my_latency;
-        else
-          max_latency = G_MAXUINT64;
-        gst_query_set_latency (query, TRUE, min_latency, max_latency);
-        GST_DEBUG_OBJECT (adder, "Calculated total latency : min %"
-            GST_TIME_FORMAT " max %" GST_TIME_FORMAT,
-            GST_TIME_ARGS (min_latency), GST_TIME_ARGS (max_latency));
-      }
-      break;
-    }
-    case GST_QUERY_DURATION:
-      res = gst_live_adder_query_duration (adder, query);
-      break;
-    case GST_QUERY_POSITION:
-      res = gst_live_adder_query_position (adder, query);
-      break;
-    default:
-      res = gst_pad_query_default (pad, parent, query);
-      break;
-  }
-
-  return res;
-}
-
-static gboolean
-gst_live_adder_sink_query (GstPad * pad, GstObject * parent, GstQuery * query)
-{
-  GstLiveAdder *adder = GST_LIVE_ADDER (parent);
-  gboolean res;
-
-  switch (GST_QUERY_TYPE (query)) {
-    case GST_QUERY_CAPS:
-    {
-      GstCaps *filter;
-      GstCaps *result;
-
-      gst_query_parse_caps (query, &filter);
-      result = gst_live_adder_sink_getcaps (adder, pad, filter);
-      gst_query_set_caps_result (query, result);
-      gst_caps_unref (result);
-      res = TRUE;
-      break;
-    }
-    default:
-      res = gst_pad_query_default (pad, parent, query);
-      break;
-  }
-
-  return res;
-}
-
-static gboolean
-forward_event_func (const GValue * item, GValue * ret, gpointer user_data)
-{
-  GstPad *pad = GST_PAD (g_value_get_object (item));
-  GstEvent *event = user_data;
-
-  gst_event_ref (event);
-  GST_LOG_OBJECT (pad, "About to send event %s", GST_EVENT_TYPE_NAME (event));
-  if (!gst_pad_push_event (pad, event)) {
-    g_value_set_boolean (ret, FALSE);
-    GST_WARNING_OBJECT (pad, "Sending event  %p (%s) failed.",
-        event, GST_EVENT_TYPE_NAME (event));
-  } else {
-    GST_LOG_OBJECT (pad, "Sent event  %p (%s).",
-        event, GST_EVENT_TYPE_NAME (event));
-  }
-  return TRUE;
-}
-
-/* forwards the event to all sinkpads, takes ownership of the
- * event
- *
- * Returns: TRUE if the event could be forwarded on all
- * sinkpads.
- */
-static gboolean
-forward_event (GstLiveAdder * adder, GstEvent * event)
-{
-  GstIterator *it;
-  GValue vret = { 0 };
-
-  GST_LOG_OBJECT (adder, "Forwarding event %p (%s)", event,
-      GST_EVENT_TYPE_NAME (event));
-
-  g_value_init (&vret, G_TYPE_BOOLEAN);
-  g_value_set_boolean (&vret, TRUE);
-  it = gst_element_iterate_sink_pads (GST_ELEMENT_CAST (adder));
-  gst_iterator_fold (it, forward_event_func, &vret, event);
-  gst_iterator_free (it);
-
-  return g_value_get_boolean (&vret);
-}
-
-
-static gboolean
-gst_live_adder_src_event (GstPad * pad, GstObject * parent, GstEvent * event)
-{
-  GstLiveAdder *adder = GST_LIVE_ADDER (parent);
-  gboolean result;
-
-  switch (GST_EVENT_TYPE (event)) {
-    case GST_EVENT_QOS:
-      /* TODO : QoS might be tricky */
-      result = FALSE;
-      break;
-    case GST_EVENT_NAVIGATION:
-      /* TODO : navigation is rather pointless. */
-      result = FALSE;
-      break;
-    default:
-      /* just forward the rest for now */
-      result = forward_event (adder, event);
-      break;
-  }
-
-  gst_event_unref (event);
-
-  return result;
-}
-
-static guint
-gst_live_adder_length_from_duration (GstLiveAdder * adder,
-    GstClockTime duration)
-{
-  guint64 ret = GST_AUDIO_INFO_BPF (&adder->info) *
-      gst_util_uint64_scale_int_round (duration,
-      GST_AUDIO_INFO_RATE (&adder->info), GST_SECOND);
-
-  return (guint) ret;
-}
-
-static GstClockTime
-gst_live_adder_length_to_duration (GstLiveAdder * adder, guint size)
-{
-  return GST_FRAMES_TO_CLOCK_TIME ((size /
-          GST_AUDIO_INFO_BPF (&adder->info)),
-      GST_AUDIO_INFO_RATE (&adder->info));
-}
-
-static GstFlowReturn
-gst_live_adder_chain (GstPad * pad, GstObject * parent, GstBuffer * buffer)
-{
-  GstLiveAdder *adder = GST_LIVE_ADDER (parent);
-  GstLiveAdderPadPrivate *padprivate = NULL;
-  GstFlowReturn ret = GST_FLOW_OK;
-  GList *item = NULL;
-  GstClockTime skip = 0;
-  gint64 drift = 0;             /* Positive if new buffer after old buffer */
-  gsize buffer_size = 0;
-  gsize subbuffer_size = 0;
-  gsize offset = 0;
-
-  GST_OBJECT_LOCK (adder);
-
-  ret = adder->srcresult;
-
-  GST_DEBUG ("Incoming buffer time:%" GST_TIME_FORMAT " duration:%"
-      GST_TIME_FORMAT, GST_TIME_ARGS (GST_BUFFER_TIMESTAMP (buffer)),
-      GST_TIME_ARGS (GST_BUFFER_DURATION (buffer)));
-
-  if (ret != GST_FLOW_OK) {
-    GST_DEBUG_OBJECT (adder, "Passing non-ok result from src: %s",
-        gst_flow_get_name (ret));
-    gst_buffer_unref (buffer);
-    goto out;
-  }
-
-  padprivate = gst_pad_get_element_private (pad);
-
-  if (!padprivate) {
-    ret = GST_FLOW_NOT_LINKED;
-    gst_buffer_unref (buffer);
-    goto out;
-  }
-
-  if (padprivate->eos) {
-    GST_DEBUG_OBJECT (adder, "Received buffer after EOS");
-    ret = GST_FLOW_EOS;
-    gst_buffer_unref (buffer);
-    goto out;
-  }
-
-  if (!GST_BUFFER_TIMESTAMP_IS_VALID (buffer))
-    goto invalid_timestamp;
-
-  if (padprivate->segment.format == GST_FORMAT_UNDEFINED) {
-    GST_WARNING_OBJECT (adder, "No new-segment received,"
-        " initializing segment with time 0..-1");
-    gst_segment_init (&padprivate->segment, GST_FORMAT_TIME);
-  }
-
-  buffer = gst_buffer_make_writable (buffer);
-
-  drift = GST_BUFFER_TIMESTAMP (buffer) - padprivate->expected_timestamp;
-
-  /* Just see if we receive invalid timestamp/durations */
-  if (GST_CLOCK_TIME_IS_VALID (padprivate->expected_timestamp) &&
-      !GST_BUFFER_FLAG_IS_SET (buffer, GST_BUFFER_FLAG_DISCONT) &&
-      (drift != 0)) {
-    GST_LOG_OBJECT (adder,
-        "Timestamp discontinuity without the DISCONT flag set"
-        " (expected %" GST_TIME_FORMAT ", got %" GST_TIME_FORMAT
-        " drift:%" G_GINT64_FORMAT "ms)",
-        GST_TIME_ARGS (padprivate->expected_timestamp),
-        GST_TIME_ARGS (GST_BUFFER_TIMESTAMP (buffer)), drift / GST_MSECOND);
-
-    /* We accept drifts of 10ms */
-    if (ABS (drift) < (10 * GST_MSECOND)) {
-      GST_DEBUG ("Correcting minor drift");
-      GST_BUFFER_TIMESTAMP (buffer) = padprivate->expected_timestamp;
-    }
-  }
-
-
-  /* If there is no duration, lets set one */
-  if (!GST_BUFFER_DURATION_IS_VALID (buffer)) {
-    GST_BUFFER_DURATION (buffer) = (gst_buffer_get_size (buffer) * GST_SECOND) /
-        (GST_AUDIO_INFO_BPF (&adder->info) *
-        GST_AUDIO_INFO_RATE (&adder->info));
-    padprivate->expected_timestamp = GST_CLOCK_TIME_NONE;
-  } else {
-    padprivate->expected_timestamp = GST_BUFFER_TIMESTAMP (buffer) +
-        GST_BUFFER_DURATION (buffer);
-  }
-
-
-  /*
-   * Lets clip the buffer to the segment (so we don't have to worry about
-   * cliping afterwards).
-   * This should also guarantee us that we'll have valid timestamps and
-   * durations afterwards
-   */
-
-  buffer = gst_audio_buffer_clip (buffer, &padprivate->segment,
-      GST_AUDIO_INFO_RATE (&adder->info), GST_AUDIO_INFO_BPF (&adder->info));
-
-  /* buffer can be NULL if it's completely outside of the segment */
-  if (!buffer) {
-    GST_DEBUG ("Buffer completely outside of configured segment, dropping it");
-    goto out;
-  }
-
-  /*
-   * Make sure all incoming buffers share the same timestamping
-   */
-  GST_BUFFER_TIMESTAMP (buffer) =
-      gst_segment_to_running_time (&padprivate->segment,
-      padprivate->segment.format, GST_BUFFER_TIMESTAMP (buffer));
-
-
-  if (GST_CLOCK_TIME_IS_VALID (adder->next_timestamp) &&
-      GST_BUFFER_TIMESTAMP (buffer) < adder->next_timestamp) {
-    if (GST_BUFFER_TIMESTAMP (buffer) + GST_BUFFER_DURATION (buffer) <
-        adder->next_timestamp) {
-      GST_DEBUG_OBJECT (adder, "Buffer is late, dropping (ts: %" GST_TIME_FORMAT
-          " duration: %" GST_TIME_FORMAT ")",
-          GST_TIME_ARGS (GST_BUFFER_TIMESTAMP (buffer)),
-          GST_TIME_ARGS (GST_BUFFER_DURATION (buffer)));
-      gst_buffer_unref (buffer);
-      goto out;
-    } else {
-      skip = adder->next_timestamp - GST_BUFFER_TIMESTAMP (buffer);
-      GST_DEBUG_OBJECT (adder, "Buffer is partially late, skipping %"
-          GST_TIME_FORMAT, GST_TIME_ARGS (skip));
-    }
-  }
-
-  /* If our new buffer's head is higher than the queue's head, lets wake up,
-   * we may not have to wait for as long
-   */
-  if (adder->clock_id &&
-      g_queue_peek_head (adder->buffers) != NULL &&
-      GST_BUFFER_TIMESTAMP (buffer) + skip <
-      GST_BUFFER_TIMESTAMP (g_queue_peek_head (adder->buffers)))
-    gst_clock_id_unschedule (adder->clock_id);
-
-  for (item = g_queue_peek_head_link (adder->buffers);
-      item; item = g_list_next (item)) {
-    GstBuffer *oldbuffer = item->data;
-    GstClockTime old_skip = 0;
-    GstClockTime mix_duration = 0;
-    GstClockTime mix_start = 0;
-    GstClockTime mix_end = 0;
-    GstMapInfo oldmap, map;
-
-    /* We haven't reached our place yet */
-    if (GST_BUFFER_TIMESTAMP (buffer) + skip >=
-        GST_BUFFER_TIMESTAMP (oldbuffer) + GST_BUFFER_DURATION (oldbuffer))
-      continue;
-
-    /* We're past our place, lets insert ouselves here */
-    if (GST_BUFFER_TIMESTAMP (buffer) + GST_BUFFER_DURATION (buffer) <=
-        GST_BUFFER_TIMESTAMP (oldbuffer))
-      break;
-
-    /* if we reach this spot, we have overlap, so we must mix */
-
-    /* First make a subbuffer with the non-overlapping part */
-    if (GST_BUFFER_TIMESTAMP (buffer) + skip < GST_BUFFER_TIMESTAMP (oldbuffer)) {
-      GstBuffer *subbuffer = NULL;
-      GstClockTime subbuffer_duration = GST_BUFFER_TIMESTAMP (oldbuffer) -
-          (GST_BUFFER_TIMESTAMP (buffer) + skip);
-
-      buffer_size = gst_buffer_get_size (buffer);
-      offset = gst_live_adder_length_from_duration (adder, skip);
-      subbuffer_size = gst_live_adder_length_from_duration (adder,
-          subbuffer_duration);
-
-      if (offset + subbuffer_size > buffer_size) {
-        subbuffer_size = buffer_size - offset;
-        subbuffer_duration = gst_live_adder_length_to_duration (adder,
-            subbuffer_size);
-      }
-
-      subbuffer = gst_buffer_copy_region (buffer, GST_BUFFER_COPY_ALL,
-          offset, subbuffer_size);
-
-      GST_BUFFER_TIMESTAMP (subbuffer) = GST_BUFFER_TIMESTAMP (buffer) + skip;
-      GST_BUFFER_DURATION (subbuffer) = subbuffer_duration;
-
-      skip += subbuffer_duration;
-
-      g_queue_insert_before (adder->buffers, item, subbuffer);
-    }
-
-    /* Now we are on the overlapping part */
-    oldbuffer = gst_buffer_make_writable (oldbuffer);
-    item->data = oldbuffer;
-
-    old_skip = GST_BUFFER_TIMESTAMP (buffer) + skip -
-        GST_BUFFER_TIMESTAMP (oldbuffer);
-
-    mix_start = GST_BUFFER_TIMESTAMP (oldbuffer) + old_skip;
-
-    if (GST_BUFFER_TIMESTAMP (buffer) + GST_BUFFER_DURATION (buffer) <
-        GST_BUFFER_TIMESTAMP (oldbuffer) + GST_BUFFER_DURATION (oldbuffer))
-      mix_end = GST_BUFFER_TIMESTAMP (buffer) + GST_BUFFER_DURATION (buffer);
-    else
-      mix_end = GST_BUFFER_TIMESTAMP (oldbuffer) +
-          GST_BUFFER_DURATION (oldbuffer);
-
-    mix_duration = mix_end - mix_start;
-
-    if (!GST_BUFFER_FLAG_IS_SET (buffer, GST_BUFFER_FLAG_GAP)) {
-      GST_BUFFER_FLAG_UNSET (oldbuffer, GST_BUFFER_FLAG_GAP);
-      gst_buffer_map (oldbuffer, &oldmap, GST_MAP_WRITE);
-      gst_buffer_map (buffer, &map, GST_MAP_READ);
-      adder->func (oldmap.data +
-          gst_live_adder_length_from_duration (adder, old_skip),
-          map.data +
-          gst_live_adder_length_from_duration (adder, skip),
-          gst_live_adder_length_from_duration (adder, mix_duration));
-      gst_buffer_unmap (oldbuffer, &oldmap);
-      gst_buffer_unmap (buffer, &map);
-    }
-    skip += mix_duration;
-  }
-
-  g_cond_broadcast (&adder->not_empty_cond);
-
-  if (skip == GST_BUFFER_DURATION (buffer)) {
-    gst_buffer_unref (buffer);
-  } else {
-    if (skip) {
-      GstClockTime subbuffer_duration = GST_BUFFER_DURATION (buffer) - skip;
-      GstClockTime subbuffer_ts = GST_BUFFER_TIMESTAMP (buffer) + skip;
-      GstBuffer *new_buffer;
-
-      buffer_size = gst_buffer_get_size (buffer);
-      offset = gst_live_adder_length_from_duration (adder, skip);
-      subbuffer_size = gst_live_adder_length_from_duration (adder,
-          subbuffer_duration);
-
-      if (offset + subbuffer_size > buffer_size) {
-        subbuffer_size = buffer_size - offset;
-        subbuffer_duration = gst_live_adder_length_to_duration (adder,
-            subbuffer_size);
-      }
-
-      new_buffer = gst_buffer_copy_region (buffer,
-          GST_BUFFER_COPY_ALL, offset, subbuffer_size);
-
-      gst_buffer_unref (buffer);
-      buffer = new_buffer;
-      GST_BUFFER_PTS (buffer) = subbuffer_ts;
-      GST_BUFFER_DURATION (buffer) = subbuffer_duration;
-    }
-
-    if (item)
-      g_queue_insert_before (adder->buffers, item, buffer);
-    else
-      g_queue_push_tail (adder->buffers, buffer);
-  }
-
-out:
-
-  GST_OBJECT_UNLOCK (adder);
-
-  return ret;
-
-invalid_timestamp:
-
-  GST_OBJECT_UNLOCK (adder);
-  gst_buffer_unref (buffer);
-  GST_ELEMENT_ERROR (adder, STREAM, FAILED,
-      ("Buffer without a valid timestamp received"),
-      ("Invalid timestamp received on buffer"));
-
-  return GST_FLOW_ERROR;
-}
-
-/*
- * This only works because the GstObject lock is taken
- *
- * It checks if all sink pads are EOS
- */
-static gboolean
-check_eos_locked (GstLiveAdder * adder)
-{
-  GList *item;
-
-  /* We can't be EOS if we have no sinkpads */
-  if (adder->sinkpads == NULL)
-    return FALSE;
-
-  for (item = adder->sinkpads; item; item = g_list_next (item)) {
-    GstPad *pad = item->data;
-    GstLiveAdderPadPrivate *padprivate = gst_pad_get_element_private (pad);
-
-    if (padprivate && padprivate->eos != TRUE)
-      return FALSE;
-  }
-
-  return TRUE;
-}
-
-static void
-gst_live_adder_loop (gpointer data)
-{
-  GstLiveAdder *adder = GST_LIVE_ADDER (data);
-  GstClockTime buffer_timestamp = 0;
-  GstClockTime sync_time = 0;
-  GstClock *clock = NULL;
-  GstClockID id = NULL;
-  GstClockReturn ret;
-  GstBuffer *buffer = NULL;
-  GstFlowReturn result;
-
-  GST_OBJECT_LOCK (adder);
-
-again:
-
-  for (;;) {
-    if (adder->srcresult != GST_FLOW_OK)
-      goto flushing;
-    if (!g_queue_is_empty (adder->buffers))
-      break;
-    if (check_eos_locked (adder))
-      goto eos;
-    g_cond_wait (&adder->not_empty_cond, GST_OBJECT_GET_LOCK (adder));
-  }
-
-  buffer_timestamp = GST_BUFFER_TIMESTAMP (g_queue_peek_head (adder->buffers));
-
-  clock = GST_ELEMENT_CLOCK (adder);
-
-  /* If we have no clock, then we can't do anything.. error */
-  if (!clock) {
-    if (adder->playing)
-      goto no_clock;
-    else
-      goto push_buffer;
-  }
-
-  GST_DEBUG_OBJECT (adder, "sync to timestamp %" GST_TIME_FORMAT,
-      GST_TIME_ARGS (buffer_timestamp));
-
-  sync_time = buffer_timestamp + GST_ELEMENT_CAST (adder)->base_time;
-  /* add latency, this includes our own latency and the peer latency. */
-  sync_time += adder->latency_ms * GST_MSECOND;
-  sync_time += adder->peer_latency;
-
-  /* create an entry for the clock */
-  id = adder->clock_id = gst_clock_new_single_shot_id (clock, sync_time);
-  GST_OBJECT_UNLOCK (adder);
-
-  ret = gst_clock_id_wait (id, NULL);
-
-  GST_OBJECT_LOCK (adder);
-
-  /* and free the entry */
-  gst_clock_id_unref (id);
-  adder->clock_id = NULL;
-
-  /* at this point, the clock could have been unlocked by a timeout, a new
-   * head element was added to the queue or because we are shutting down. Check
-   * for shutdown first. */
-
-  if (adder->srcresult != GST_FLOW_OK)
-    goto flushing;
-
-  if (ret == GST_CLOCK_UNSCHEDULED) {
-    GST_DEBUG_OBJECT (adder,
-        "Wait got unscheduled, will retry to push with new buffer");
-    goto again;
-  }
-
-  if (ret != GST_CLOCK_OK && ret != GST_CLOCK_EARLY)
-    goto clock_error;
-
-push_buffer:
-
-  buffer = g_queue_pop_head (adder->buffers);
-
-  if (!buffer)
-    goto again;
-
-  /*
-   * We make sure the timestamps are exactly contiguous
-   * If its only small skew (due to rounding errors), we correct it
-   * silently. Otherwise we put the discont flag
-   */
-  if (GST_CLOCK_TIME_IS_VALID (adder->next_timestamp) &&
-      GST_BUFFER_TIMESTAMP (buffer) != adder->next_timestamp) {
-    GstClockTimeDiff diff = GST_CLOCK_DIFF (GST_BUFFER_TIMESTAMP (buffer),
-        adder->next_timestamp);
-    if (diff < 0)
-      diff = -diff;
-
-    if (diff < GST_SECOND / GST_AUDIO_INFO_RATE (&adder->info)) {
-      GST_BUFFER_TIMESTAMP (buffer) = adder->next_timestamp;
-      GST_DEBUG_OBJECT (adder, "Correcting slight skew");
-      GST_BUFFER_FLAG_UNSET (buffer, GST_BUFFER_FLAG_DISCONT);
-    } else {
-      GST_BUFFER_FLAG_SET (buffer, GST_BUFFER_FLAG_DISCONT);
-      GST_DEBUG_OBJECT (adder, "Expected buffer at %" GST_TIME_FORMAT
-          ", but is at %" GST_TIME_FORMAT ", setting discont",
-          GST_TIME_ARGS (adder->next_timestamp),
-          GST_TIME_ARGS (GST_BUFFER_TIMESTAMP (buffer)));
-    }
-  } else {
-    GST_BUFFER_FLAG_UNSET (buffer, GST_BUFFER_FLAG_DISCONT);
-  }
-
-  GST_BUFFER_OFFSET (buffer) = GST_BUFFER_OFFSET_NONE;
-  GST_BUFFER_OFFSET_END (buffer) = GST_BUFFER_OFFSET_NONE;
-
-  if (GST_BUFFER_DURATION_IS_VALID (buffer))
-    adder->next_timestamp = GST_BUFFER_TIMESTAMP (buffer) +
-        GST_BUFFER_DURATION (buffer);
-  else
-    adder->next_timestamp = GST_CLOCK_TIME_NONE;
-  GST_OBJECT_UNLOCK (adder);
-
-  GST_LOG_OBJECT (adder, "About to push buffer time:%" GST_TIME_FORMAT
-      " duration:%" GST_TIME_FORMAT,
-      GST_TIME_ARGS (GST_BUFFER_TIMESTAMP (buffer)),
-      GST_TIME_ARGS (GST_BUFFER_DURATION (buffer)));
-
-  result = gst_pad_push (adder->srcpad, buffer);
-  if (result != GST_FLOW_OK)
-    goto pause;
-
-  return;
-
-flushing:
-  {
-    GST_DEBUG_OBJECT (adder, "we are flushing");
-    gst_pad_pause_task (adder->srcpad);
-    GST_OBJECT_UNLOCK (adder);
-    return;
-  }
-
-clock_error:
-  {
-    gst_pad_pause_task (adder->srcpad);
-    GST_OBJECT_UNLOCK (adder);
-    GST_ELEMENT_ERROR (adder, STREAM, MUX, ("Error with the clock"),
-        ("Error with the clock: %d", ret));
-    GST_ERROR_OBJECT (adder, "Error with the clock: %d", ret);
-    return;
-  }
-
-no_clock:
-  {
-    gst_pad_pause_task (adder->srcpad);
-    GST_OBJECT_UNLOCK (adder);
-    GST_ELEMENT_ERROR (adder, STREAM, MUX, ("No available clock"),
-        ("No available clock"));
-    GST_ERROR_OBJECT (adder, "No available clock");
-    return;
-  }
-
-pause:
-  {
-    GST_DEBUG_OBJECT (adder, "pausing task, reason %s",
-        gst_flow_get_name (result));
-
-    GST_OBJECT_LOCK (adder);
-
-    /* store result */
-    adder->srcresult = result;
-    /* we don't post errors or anything because upstream will do that for us
-     * when we pass the return value upstream. */
-    gst_pad_pause_task (adder->srcpad);
-    GST_OBJECT_UNLOCK (adder);
-    return;
-  }
-
-eos:
-  {
-    /* store result, we are flushing now */
-    GST_DEBUG_OBJECT (adder, "We are EOS, pushing EOS downstream");
-    adder->srcresult = GST_FLOW_EOS;
-    gst_pad_pause_task (adder->srcpad);
-    GST_OBJECT_UNLOCK (adder);
-    gst_pad_push_event (adder->srcpad, gst_event_new_eos ());
-    return;
-  }
-}
-
-static GstPad *
-gst_live_adder_request_new_pad (GstElement * element, GstPadTemplate * templ,
-    const gchar * ignored_name, const GstCaps * caps)
-{
-  gchar *name;
-  GstLiveAdder *adder;
-  GstPad *newpad;
-  gint padcount;
-  GstLiveAdderPadPrivate *padprivate = NULL;
-
-  if (templ->direction != GST_PAD_SINK)
-    goto not_sink;
-
-  adder = GST_LIVE_ADDER (element);
-
-  /* increment pad counter */
-  padcount = g_atomic_int_add (&adder->padcount, 1);
-
-  name = g_strdup_printf ("sink_%u", padcount);
-  newpad = gst_pad_new_from_template (templ, name);
-  GST_DEBUG_OBJECT (adder, "request new pad %s", name);
-  g_free (name);
-
-  gst_pad_set_event_function (newpad,
-      GST_DEBUG_FUNCPTR (gst_live_adder_sink_event));
-  gst_pad_set_query_function (newpad,
-      GST_DEBUG_FUNCPTR (gst_live_adder_sink_query));
-
-  padprivate = g_new0 (GstLiveAdderPadPrivate, 1);
-
-  gst_segment_init (&padprivate->segment, GST_FORMAT_UNDEFINED);
-  padprivate->eos = FALSE;
-  padprivate->expected_timestamp = GST_CLOCK_TIME_NONE;
-
-  gst_pad_set_element_private (newpad, padprivate);
-
-  gst_pad_set_chain_function (newpad, gst_live_adder_chain);
-
-
-  if (!gst_pad_set_active (newpad, TRUE))
-    goto could_not_activate;
-
-  /* takes ownership of the pad */
-  if (!gst_element_add_pad (GST_ELEMENT (adder), newpad))
-    goto could_not_add;
-
-  GST_OBJECT_LOCK (adder);
-  adder->sinkpads = g_list_prepend (adder->sinkpads, newpad);
-  GST_OBJECT_UNLOCK (adder);
-
-  return newpad;
-
-  /* errors */
-not_sink:
-  {
-    g_warning ("gstadder: request new pad that is not a SINK pad\n");
-    return NULL;
-  }
-could_not_add:
-  {
-    GST_DEBUG_OBJECT (adder, "could not add pad");
-    g_free (padprivate);
-    gst_object_unref (newpad);
-    return NULL;
-  }
-could_not_activate:
-  {
-    GST_DEBUG_OBJECT (adder, "could not activate new pad");
-    g_free (padprivate);
-    gst_object_unref (newpad);
-    return NULL;
-  }
-}
-
-static void
-gst_live_adder_release_pad (GstElement * element, GstPad * pad)
-{
-  GstLiveAdder *adder;
-  GstLiveAdderPadPrivate *padprivate;
-
-  adder = GST_LIVE_ADDER (element);
-
-  GST_DEBUG_OBJECT (adder, "release pad %s:%s", GST_DEBUG_PAD_NAME (pad));
-
-  GST_OBJECT_LOCK (element);
-  padprivate = gst_pad_get_element_private (pad);
-  gst_pad_set_element_private (pad, NULL);
-  adder->sinkpads = g_list_remove_all (adder->sinkpads, pad);
-  GST_OBJECT_UNLOCK (element);
-
-  g_free (padprivate);
-
-  gst_element_remove_pad (element, pad);
-}
-
-static void
-reset_pad_private (GstPad * pad)
-{
-  GstLiveAdderPadPrivate *padprivate;
-
-  padprivate = gst_pad_get_element_private (pad);
-
-  if (!padprivate)
-    return;
-
-  gst_segment_init (&padprivate->segment, GST_FORMAT_UNDEFINED);
-
-  padprivate->expected_timestamp = GST_CLOCK_TIME_NONE;
-  padprivate->eos = FALSE;
-}
-
-static GstStateChangeReturn
-gst_live_adder_change_state (GstElement * element, GstStateChange transition)
-{
-  GstLiveAdder *adder;
-  GstStateChangeReturn ret;
-
-  adder = GST_LIVE_ADDER (element);
-
-  switch (transition) {
-    case GST_STATE_CHANGE_READY_TO_PAUSED:
-      GST_OBJECT_LOCK (adder);
-      adder->segment_pending = TRUE;
-      adder->peer_latency = 0;
-      adder->next_timestamp = GST_CLOCK_TIME_NONE;
-      g_list_foreach (adder->sinkpads, (GFunc) reset_pad_private, NULL);
-      GST_OBJECT_UNLOCK (adder);
-      break;
-    case GST_STATE_CHANGE_PLAYING_TO_PAUSED:
-      GST_OBJECT_LOCK (adder);
-      adder->playing = FALSE;
-      GST_OBJECT_UNLOCK (adder);
-      break;
-    default:
-      break;
-  }
-
-  ret = GST_ELEMENT_CLASS (gst_live_adder_parent_class)->change_state (element,
-      transition);
-
-  switch (transition) {
-    case GST_STATE_CHANGE_PAUSED_TO_PLAYING:
-      GST_OBJECT_LOCK (adder);
-      adder->playing = TRUE;
-      GST_OBJECT_UNLOCK (adder);
-      break;
-    default:
-      break;
-  }
-
-  return ret;
-}
-
-
-static gboolean
-plugin_init (GstPlugin * plugin)
-{
-  if (!gst_element_register (plugin, "liveadder", GST_RANK_NONE,
-          GST_TYPE_LIVE_ADDER)) {
-    return FALSE;
-  }
-
-  return TRUE;
-}
-
-GST_PLUGIN_DEFINE (GST_VERSION_MAJOR,
-    GST_VERSION_MINOR,
-    liveadder,
-    "Adds multiple live discontinuous streams",
-    plugin_init, VERSION, GST_LICENSE, GST_PACKAGE_NAME, GST_PACKAGE_ORIGIN)
diff --git a/gst/liveadder/liveadder.h b/gst/liveadder/liveadder.h
deleted file mode 100644
index 3755edf..0000000
--- a/gst/liveadder/liveadder.h
+++ /dev/null
@@ -1,91 +0,0 @@
-/*
- * GStreamer
- *
- *  Copyright 2008 Collabora Ltd
- *  Copyright 2008 Nokia Corporation
- *   @author: Olivier Crete <olivier.crete@collabora.co.uk>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- *
- */
-
-
-
-#ifndef __GST_LIVE_ADDER_H__
-#define __GST_LIVE_ADDER_H__
-
-#include <gst/gst.h>
-#include <gst/audio/audio.h>
-
-G_BEGIN_DECLS
-#define GST_TYPE_LIVE_ADDER            (gst_live_adder_get_type())
-#define GST_LIVE_ADDER(obj)            (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_LIVE_ADDER,GstLiveAdder))
-#define GST_IS_LIVE_ADDER(obj)         (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_LIVE_ADDER))
-#define GST_LIVE_ADDER_CLASS(klass)    (G_TYPE_CHECK_CLASS_CAST((klass) ,GST_TYPE_LIVE_ADDER,GstLiveAdderClass))
-#define GST_IS_LIVE_ADDER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass) ,GST_TYPE_LIVE_ADDER))
-#define GST_LIVE_ADDER_GET_CLASS(obj)  (G_TYPE_INSTANCE_GET_CLASS((obj) ,GST_TYPE_LIVE_ADDER,GstLiveAdderClass))
-typedef struct _GstLiveAdder GstLiveAdder;
-typedef struct _GstLiveAdderClass GstLiveAdderClass;
-
-typedef void (*GstLiveAdderFunction) (gpointer out, gpointer in, guint size);
-
-/**
- * GstLiveAdder:
- *
- * The adder object structure.
- */
-struct _GstLiveAdder
-{
-  /*< private >*/
-  GstElement element;
-
-  GstPad *srcpad;
-  /* pad counter, used for creating unique request pads */
-  gint padcount;
-  GList *sinkpads;
-
-  GstFlowReturn srcresult;
-  GstClockID clock_id;
-
-  /* the queue is ordered head to tail */
-  GQueue *buffers;
-  GCond not_empty_cond;
-
-  GstClockTime next_timestamp;
-
-  /* the next are valid for both int and float */
-  GstAudioInfo info;
-
-  /* function to add samples */
-  GstLiveAdderFunction func;
-
-  GstClockTime latency_ms;
-  GstClockTime peer_latency;
-
-  gboolean segment_pending;
-
-  gboolean playing;
-};
-
-struct _GstLiveAdderClass
-{
-  GstElementClass parent_class;
-};
-
-GType gst_live_adder_get_type (void);
-
-G_END_DECLS
-#endif /* __GST_LIVE_ADDER_H__ */
diff --git a/gst/midi/Makefile.in b/gst/midi/Makefile.in
index b3ea144..1b3cc46 100644
--- a/gst/midi/Makefile.in
+++ b/gst/midi/Makefile.in
@@ -116,16 +116,15 @@
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
 	$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
-	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gsettings.m4 \
-	$(top_srcdir)/m4/gst-fionread.m4 $(top_srcdir)/m4/gst-sdl.m4 \
-	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
-	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
-	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libgcrypt.m4 \
-	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
-	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
-	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
-	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
-	$(top_srcdir)/configure.ac
+	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gst-fionread.m4 \
+	$(top_srcdir)/m4/gst-sdl.m4 $(top_srcdir)/m4/iconv.m4 \
+	$(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \
+	$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
+	$(top_srcdir)/m4/libgcrypt.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
+	$(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \
@@ -275,6 +274,8 @@
 CLUTTER_X11_LIBS = @CLUTTER_X11_LIBS@
 CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
+CUDA_CFLAGS = @CUDA_CFLAGS@
+CUDA_LIBS = @CUDA_LIBS@
 CURL_CFLAGS = @CURL_CFLAGS@
 CURL_LIBS = @CURL_LIBS@
 CXX = @CXX@
@@ -312,6 +313,8 @@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
+EGL_CFLAGS = @EGL_CFLAGS@
+EGL_LIBS = @EGL_LIBS@
 EGREP = @EGREP@
 ERROR_CFLAGS = @ERROR_CFLAGS@
 ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
@@ -320,7 +323,6 @@
 EXIF_CFLAGS = @EXIF_CFLAGS@
 EXIF_LIBS = @EXIF_LIBS@
 FAAC_LIBS = @FAAC_LIBS@
-FAAD_IS_NEAAC = @FAAD_IS_NEAAC@
 FAAD_LIBS = @FAAD_LIBS@
 FFLAGS = @FFLAGS@
 FGREP = @FGREP@
@@ -339,8 +341,9 @@
 GIO_LIBS = @GIO_LIBS@
 GIO_UNIX_CFLAGS = @GIO_UNIX_CFLAGS@
 GIO_UNIX_LIBS = @GIO_UNIX_LIBS@
+GLES2_CFLAGS = @GLES2_CFLAGS@
+GLES2_LIBS = @GLES2_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
-GLIB_COMPILE_SCHEMAS = @GLIB_COMPILE_SCHEMAS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
@@ -357,16 +360,17 @@
 GMODULE_NO_EXPORT_LIBS = @GMODULE_NO_EXPORT_LIBS@
 GMSGFMT = @GMSGFMT@
 GMSGFMT_015 = @GMSGFMT_015@
+GNUSTL_CFLAGS = @GNUSTL_CFLAGS@
+GNUSTL_LIBS = @GNUSTL_LIBS@
 GRAPHENE_CFLAGS = @GRAPHENE_CFLAGS@
 GRAPHENE_LIBS = @GRAPHENE_LIBS@
 GREP = @GREP@
-GSETTINGS_CFLAGS = @GSETTINGS_CFLAGS@
-GSETTINGS_DISABLE_SCHEMAS_COMPILE = @GSETTINGS_DISABLE_SCHEMAS_COMPILE@
-GSETTINGS_LIBS = @GSETTINGS_LIBS@
 GSM_LIBS = @GSM_LIBS@
 GSTPB_PLUGINS_DIR = @GSTPB_PLUGINS_DIR@
 GSTPB_PREFIX = @GSTPB_PREFIX@
 GST_AGE = @GST_AGE@
+GST_ALLOCATORS_CFLAGS = @GST_ALLOCATORS_CFLAGS@
+GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
 GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
 GST_API_VERSION = @GST_API_VERSION@
 GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
@@ -392,6 +396,8 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PBUTILS_CFLAGS = @GST_PBUTILS_CFLAGS@
+GST_PBUTILS_LIBS = @GST_PBUTILS_LIBS@
 GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BAD_CFLAGS = @GST_PLUGINS_BAD_CFLAGS@
@@ -417,6 +423,8 @@
 GST_PREFIX = @GST_PREFIX@
 GST_REVISION = @GST_REVISION@
 GST_TOOLS_DIR = @GST_TOOLS_DIR@
+GST_VIDEO_CFLAGS = @GST_VIDEO_CFLAGS@
+GST_VIDEO_LIBS = @GST_VIDEO_LIBS@
 GTK3_CFLAGS = @GTK3_CFLAGS@
 GTK3_GL_CFLAGS = @GTK3_GL_CFLAGS@
 GTK3_GL_LIBS = @GTK3_GL_LIBS@
@@ -518,6 +526,7 @@
 LTLIBICONV = @LTLIBICONV@
 LTLIBINTL = @LTLIBINTL@
 LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
 MANIFEST_TOOL = @MANIFEST_TOOL@
@@ -531,8 +540,6 @@
 MODPLUG_LIBS = @MODPLUG_LIBS@
 MPEG2ENC_CFLAGS = @MPEG2ENC_CFLAGS@
 MPEG2ENC_LIBS = @MPEG2ENC_LIBS@
-MPG123_CFLAGS = @MPG123_CFLAGS@
-MPG123_LIBS = @MPG123_LIBS@
 MPLEX_CFLAGS = @MPLEX_CFLAGS@
 MPLEX_LDFLAGS = @MPLEX_LDFLAGS@
 MPLEX_LIBS = @MPLEX_LIBS@
@@ -548,6 +555,8 @@
 NETTLE_LIBS = @NETTLE_LIBS@
 NM = @NM@
 NMEDIT = @NMEDIT@
+NVENCODE_CFLAGS = @NVENCODE_CFLAGS@
+NVENCODE_LIBS = @NVENCODE_LIBS@
 OBJC = @OBJC@
 OBJCDEPMODE = @OBJCDEPMODE@
 OBJCFLAGS = @OBJCFLAGS@
@@ -605,16 +614,18 @@
 PYTHON_PLATFORM = @PYTHON_PLATFORM@
 PYTHON_PREFIX = @PYTHON_PREFIX@
 PYTHON_VERSION = @PYTHON_VERSION@
+QT_ANDROID_CFLAGS = @QT_ANDROID_CFLAGS@
+QT_ANDROID_LIBS = @QT_ANDROID_LIBS@
 QT_CFLAGS = @QT_CFLAGS@
 QT_LIBS = @QT_LIBS@
+QT_MAC_CFLAGS = @QT_MAC_CFLAGS@
+QT_MAC_LIBS = @QT_MAC_LIBS@
 QT_WAYLAND_CFLAGS = @QT_WAYLAND_CFLAGS@
 QT_WAYLAND_LIBS = @QT_WAYLAND_LIBS@
 QT_X11_CFLAGS = @QT_X11_CFLAGS@
 QT_X11_LIBS = @QT_X11_LIBS@
 RANLIB = @RANLIB@
 RCC = @RCC@
-RSVG_2_36_2_CFLAGS = @RSVG_2_36_2_CFLAGS@
-RSVG_2_36_2_LIBS = @RSVG_2_36_2_LIBS@
 RSVG_CFLAGS = @RSVG_CFLAGS@
 RSVG_LIBS = @RSVG_LIBS@
 RTMP_CFLAGS = @RTMP_CFLAGS@
@@ -666,6 +677,7 @@
 VOAACENC_LIBS = @VOAACENC_LIBS@
 VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
 VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VULKAN_LIBS = @VULKAN_LIBS@
 WARNING_CFLAGS = @WARNING_CFLAGS@
 WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
 WARNING_OBJCFLAGS = @WARNING_OBJCFLAGS@
@@ -676,6 +688,7 @@
 WAYLAND_LIBS = @WAYLAND_LIBS@
 WEBP_CFLAGS = @WEBP_CFLAGS@
 WEBP_LIBS = @WEBP_LIBS@
+WGET = @WGET@
 WILDMIDI_CFLAGS = @WILDMIDI_CFLAGS@
 WILDMIDI_LIBS = @WILDMIDI_LIBS@
 WINKS_LIBS = @WINKS_LIBS@
@@ -685,6 +698,8 @@
 X11_LIBS = @X11_LIBS@
 X265_CFLAGS = @X265_CFLAGS@
 X265_LIBS = @X265_LIBS@
+XCB_CFLAGS = @XCB_CFLAGS@
+XCB_LIBS = @XCB_LIBS@
 XCOMPOSITE_CFLAGS = @XCOMPOSITE_CFLAGS@
 XCOMPOSITE_LIBS = @XCOMPOSITE_LIBS@
 XGETTEXT = @XGETTEXT@
@@ -722,7 +737,6 @@
 docdir = @docdir@
 dvidir = @dvidir@
 exec_prefix = @exec_prefix@
-gsettingsschemadir = @gsettingsschemadir@
 host = @host@
 host_alias = @host_alias@
 host_cpu = @host_cpu@
diff --git a/gst/mpegdemux/Makefile.in b/gst/mpegdemux/Makefile.in
index 4d5370a..44f0d4c 100644
--- a/gst/mpegdemux/Makefile.in
+++ b/gst/mpegdemux/Makefile.in
@@ -116,16 +116,15 @@
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
 	$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
-	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gsettings.m4 \
-	$(top_srcdir)/m4/gst-fionread.m4 $(top_srcdir)/m4/gst-sdl.m4 \
-	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
-	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
-	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libgcrypt.m4 \
-	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
-	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
-	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
-	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
-	$(top_srcdir)/configure.ac
+	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gst-fionread.m4 \
+	$(top_srcdir)/m4/gst-sdl.m4 $(top_srcdir)/m4/iconv.m4 \
+	$(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \
+	$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
+	$(top_srcdir)/m4/libgcrypt.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
+	$(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \
@@ -276,6 +275,8 @@
 CLUTTER_X11_LIBS = @CLUTTER_X11_LIBS@
 CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
+CUDA_CFLAGS = @CUDA_CFLAGS@
+CUDA_LIBS = @CUDA_LIBS@
 CURL_CFLAGS = @CURL_CFLAGS@
 CURL_LIBS = @CURL_LIBS@
 CXX = @CXX@
@@ -313,6 +314,8 @@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
+EGL_CFLAGS = @EGL_CFLAGS@
+EGL_LIBS = @EGL_LIBS@
 EGREP = @EGREP@
 ERROR_CFLAGS = @ERROR_CFLAGS@
 ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
@@ -321,7 +324,6 @@
 EXIF_CFLAGS = @EXIF_CFLAGS@
 EXIF_LIBS = @EXIF_LIBS@
 FAAC_LIBS = @FAAC_LIBS@
-FAAD_IS_NEAAC = @FAAD_IS_NEAAC@
 FAAD_LIBS = @FAAD_LIBS@
 FFLAGS = @FFLAGS@
 FGREP = @FGREP@
@@ -340,8 +342,9 @@
 GIO_LIBS = @GIO_LIBS@
 GIO_UNIX_CFLAGS = @GIO_UNIX_CFLAGS@
 GIO_UNIX_LIBS = @GIO_UNIX_LIBS@
+GLES2_CFLAGS = @GLES2_CFLAGS@
+GLES2_LIBS = @GLES2_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
-GLIB_COMPILE_SCHEMAS = @GLIB_COMPILE_SCHEMAS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
@@ -358,16 +361,17 @@
 GMODULE_NO_EXPORT_LIBS = @GMODULE_NO_EXPORT_LIBS@
 GMSGFMT = @GMSGFMT@
 GMSGFMT_015 = @GMSGFMT_015@
+GNUSTL_CFLAGS = @GNUSTL_CFLAGS@
+GNUSTL_LIBS = @GNUSTL_LIBS@
 GRAPHENE_CFLAGS = @GRAPHENE_CFLAGS@
 GRAPHENE_LIBS = @GRAPHENE_LIBS@
 GREP = @GREP@
-GSETTINGS_CFLAGS = @GSETTINGS_CFLAGS@
-GSETTINGS_DISABLE_SCHEMAS_COMPILE = @GSETTINGS_DISABLE_SCHEMAS_COMPILE@
-GSETTINGS_LIBS = @GSETTINGS_LIBS@
 GSM_LIBS = @GSM_LIBS@
 GSTPB_PLUGINS_DIR = @GSTPB_PLUGINS_DIR@
 GSTPB_PREFIX = @GSTPB_PREFIX@
 GST_AGE = @GST_AGE@
+GST_ALLOCATORS_CFLAGS = @GST_ALLOCATORS_CFLAGS@
+GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
 GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
 GST_API_VERSION = @GST_API_VERSION@
 GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
@@ -393,6 +397,8 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PBUTILS_CFLAGS = @GST_PBUTILS_CFLAGS@
+GST_PBUTILS_LIBS = @GST_PBUTILS_LIBS@
 GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BAD_CFLAGS = @GST_PLUGINS_BAD_CFLAGS@
@@ -418,6 +424,8 @@
 GST_PREFIX = @GST_PREFIX@
 GST_REVISION = @GST_REVISION@
 GST_TOOLS_DIR = @GST_TOOLS_DIR@
+GST_VIDEO_CFLAGS = @GST_VIDEO_CFLAGS@
+GST_VIDEO_LIBS = @GST_VIDEO_LIBS@
 GTK3_CFLAGS = @GTK3_CFLAGS@
 GTK3_GL_CFLAGS = @GTK3_GL_CFLAGS@
 GTK3_GL_LIBS = @GTK3_GL_LIBS@
@@ -519,6 +527,7 @@
 LTLIBICONV = @LTLIBICONV@
 LTLIBINTL = @LTLIBINTL@
 LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
 MANIFEST_TOOL = @MANIFEST_TOOL@
@@ -532,8 +541,6 @@
 MODPLUG_LIBS = @MODPLUG_LIBS@
 MPEG2ENC_CFLAGS = @MPEG2ENC_CFLAGS@
 MPEG2ENC_LIBS = @MPEG2ENC_LIBS@
-MPG123_CFLAGS = @MPG123_CFLAGS@
-MPG123_LIBS = @MPG123_LIBS@
 MPLEX_CFLAGS = @MPLEX_CFLAGS@
 MPLEX_LDFLAGS = @MPLEX_LDFLAGS@
 MPLEX_LIBS = @MPLEX_LIBS@
@@ -549,6 +556,8 @@
 NETTLE_LIBS = @NETTLE_LIBS@
 NM = @NM@
 NMEDIT = @NMEDIT@
+NVENCODE_CFLAGS = @NVENCODE_CFLAGS@
+NVENCODE_LIBS = @NVENCODE_LIBS@
 OBJC = @OBJC@
 OBJCDEPMODE = @OBJCDEPMODE@
 OBJCFLAGS = @OBJCFLAGS@
@@ -606,16 +615,18 @@
 PYTHON_PLATFORM = @PYTHON_PLATFORM@
 PYTHON_PREFIX = @PYTHON_PREFIX@
 PYTHON_VERSION = @PYTHON_VERSION@
+QT_ANDROID_CFLAGS = @QT_ANDROID_CFLAGS@
+QT_ANDROID_LIBS = @QT_ANDROID_LIBS@
 QT_CFLAGS = @QT_CFLAGS@
 QT_LIBS = @QT_LIBS@
+QT_MAC_CFLAGS = @QT_MAC_CFLAGS@
+QT_MAC_LIBS = @QT_MAC_LIBS@
 QT_WAYLAND_CFLAGS = @QT_WAYLAND_CFLAGS@
 QT_WAYLAND_LIBS = @QT_WAYLAND_LIBS@
 QT_X11_CFLAGS = @QT_X11_CFLAGS@
 QT_X11_LIBS = @QT_X11_LIBS@
 RANLIB = @RANLIB@
 RCC = @RCC@
-RSVG_2_36_2_CFLAGS = @RSVG_2_36_2_CFLAGS@
-RSVG_2_36_2_LIBS = @RSVG_2_36_2_LIBS@
 RSVG_CFLAGS = @RSVG_CFLAGS@
 RSVG_LIBS = @RSVG_LIBS@
 RTMP_CFLAGS = @RTMP_CFLAGS@
@@ -667,6 +678,7 @@
 VOAACENC_LIBS = @VOAACENC_LIBS@
 VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
 VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VULKAN_LIBS = @VULKAN_LIBS@
 WARNING_CFLAGS = @WARNING_CFLAGS@
 WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
 WARNING_OBJCFLAGS = @WARNING_OBJCFLAGS@
@@ -677,6 +689,7 @@
 WAYLAND_LIBS = @WAYLAND_LIBS@
 WEBP_CFLAGS = @WEBP_CFLAGS@
 WEBP_LIBS = @WEBP_LIBS@
+WGET = @WGET@
 WILDMIDI_CFLAGS = @WILDMIDI_CFLAGS@
 WILDMIDI_LIBS = @WILDMIDI_LIBS@
 WINKS_LIBS = @WINKS_LIBS@
@@ -686,6 +699,8 @@
 X11_LIBS = @X11_LIBS@
 X265_CFLAGS = @X265_CFLAGS@
 X265_LIBS = @X265_LIBS@
+XCB_CFLAGS = @XCB_CFLAGS@
+XCB_LIBS = @XCB_LIBS@
 XCOMPOSITE_CFLAGS = @XCOMPOSITE_CFLAGS@
 XCOMPOSITE_LIBS = @XCOMPOSITE_LIBS@
 XGETTEXT = @XGETTEXT@
@@ -723,7 +738,6 @@
 docdir = @docdir@
 dvidir = @dvidir@
 exec_prefix = @exec_prefix@
-gsettingsschemadir = @gsettingsschemadir@
 host = @host@
 host_alias = @host_alias@
 host_cpu = @host_cpu@
diff --git a/gst/mpegpsmux/Makefile.in b/gst/mpegpsmux/Makefile.in
index 364d26e..d8a2b2d 100644
--- a/gst/mpegpsmux/Makefile.in
+++ b/gst/mpegpsmux/Makefile.in
@@ -116,16 +116,15 @@
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
 	$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
-	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gsettings.m4 \
-	$(top_srcdir)/m4/gst-fionread.m4 $(top_srcdir)/m4/gst-sdl.m4 \
-	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
-	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
-	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libgcrypt.m4 \
-	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
-	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
-	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
-	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
-	$(top_srcdir)/configure.ac
+	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gst-fionread.m4 \
+	$(top_srcdir)/m4/gst-sdl.m4 $(top_srcdir)/m4/iconv.m4 \
+	$(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \
+	$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
+	$(top_srcdir)/m4/libgcrypt.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
+	$(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \
@@ -277,6 +276,8 @@
 CLUTTER_X11_LIBS = @CLUTTER_X11_LIBS@
 CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
+CUDA_CFLAGS = @CUDA_CFLAGS@
+CUDA_LIBS = @CUDA_LIBS@
 CURL_CFLAGS = @CURL_CFLAGS@
 CURL_LIBS = @CURL_LIBS@
 CXX = @CXX@
@@ -314,6 +315,8 @@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
+EGL_CFLAGS = @EGL_CFLAGS@
+EGL_LIBS = @EGL_LIBS@
 EGREP = @EGREP@
 ERROR_CFLAGS = @ERROR_CFLAGS@
 ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
@@ -322,7 +325,6 @@
 EXIF_CFLAGS = @EXIF_CFLAGS@
 EXIF_LIBS = @EXIF_LIBS@
 FAAC_LIBS = @FAAC_LIBS@
-FAAD_IS_NEAAC = @FAAD_IS_NEAAC@
 FAAD_LIBS = @FAAD_LIBS@
 FFLAGS = @FFLAGS@
 FGREP = @FGREP@
@@ -341,8 +343,9 @@
 GIO_LIBS = @GIO_LIBS@
 GIO_UNIX_CFLAGS = @GIO_UNIX_CFLAGS@
 GIO_UNIX_LIBS = @GIO_UNIX_LIBS@
+GLES2_CFLAGS = @GLES2_CFLAGS@
+GLES2_LIBS = @GLES2_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
-GLIB_COMPILE_SCHEMAS = @GLIB_COMPILE_SCHEMAS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
@@ -359,16 +362,17 @@
 GMODULE_NO_EXPORT_LIBS = @GMODULE_NO_EXPORT_LIBS@
 GMSGFMT = @GMSGFMT@
 GMSGFMT_015 = @GMSGFMT_015@
+GNUSTL_CFLAGS = @GNUSTL_CFLAGS@
+GNUSTL_LIBS = @GNUSTL_LIBS@
 GRAPHENE_CFLAGS = @GRAPHENE_CFLAGS@
 GRAPHENE_LIBS = @GRAPHENE_LIBS@
 GREP = @GREP@
-GSETTINGS_CFLAGS = @GSETTINGS_CFLAGS@
-GSETTINGS_DISABLE_SCHEMAS_COMPILE = @GSETTINGS_DISABLE_SCHEMAS_COMPILE@
-GSETTINGS_LIBS = @GSETTINGS_LIBS@
 GSM_LIBS = @GSM_LIBS@
 GSTPB_PLUGINS_DIR = @GSTPB_PLUGINS_DIR@
 GSTPB_PREFIX = @GSTPB_PREFIX@
 GST_AGE = @GST_AGE@
+GST_ALLOCATORS_CFLAGS = @GST_ALLOCATORS_CFLAGS@
+GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
 GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
 GST_API_VERSION = @GST_API_VERSION@
 GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
@@ -394,6 +398,8 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PBUTILS_CFLAGS = @GST_PBUTILS_CFLAGS@
+GST_PBUTILS_LIBS = @GST_PBUTILS_LIBS@
 GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BAD_CFLAGS = @GST_PLUGINS_BAD_CFLAGS@
@@ -419,6 +425,8 @@
 GST_PREFIX = @GST_PREFIX@
 GST_REVISION = @GST_REVISION@
 GST_TOOLS_DIR = @GST_TOOLS_DIR@
+GST_VIDEO_CFLAGS = @GST_VIDEO_CFLAGS@
+GST_VIDEO_LIBS = @GST_VIDEO_LIBS@
 GTK3_CFLAGS = @GTK3_CFLAGS@
 GTK3_GL_CFLAGS = @GTK3_GL_CFLAGS@
 GTK3_GL_LIBS = @GTK3_GL_LIBS@
@@ -520,6 +528,7 @@
 LTLIBICONV = @LTLIBICONV@
 LTLIBINTL = @LTLIBINTL@
 LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
 MANIFEST_TOOL = @MANIFEST_TOOL@
@@ -533,8 +542,6 @@
 MODPLUG_LIBS = @MODPLUG_LIBS@
 MPEG2ENC_CFLAGS = @MPEG2ENC_CFLAGS@
 MPEG2ENC_LIBS = @MPEG2ENC_LIBS@
-MPG123_CFLAGS = @MPG123_CFLAGS@
-MPG123_LIBS = @MPG123_LIBS@
 MPLEX_CFLAGS = @MPLEX_CFLAGS@
 MPLEX_LDFLAGS = @MPLEX_LDFLAGS@
 MPLEX_LIBS = @MPLEX_LIBS@
@@ -550,6 +557,8 @@
 NETTLE_LIBS = @NETTLE_LIBS@
 NM = @NM@
 NMEDIT = @NMEDIT@
+NVENCODE_CFLAGS = @NVENCODE_CFLAGS@
+NVENCODE_LIBS = @NVENCODE_LIBS@
 OBJC = @OBJC@
 OBJCDEPMODE = @OBJCDEPMODE@
 OBJCFLAGS = @OBJCFLAGS@
@@ -607,16 +616,18 @@
 PYTHON_PLATFORM = @PYTHON_PLATFORM@
 PYTHON_PREFIX = @PYTHON_PREFIX@
 PYTHON_VERSION = @PYTHON_VERSION@
+QT_ANDROID_CFLAGS = @QT_ANDROID_CFLAGS@
+QT_ANDROID_LIBS = @QT_ANDROID_LIBS@
 QT_CFLAGS = @QT_CFLAGS@
 QT_LIBS = @QT_LIBS@
+QT_MAC_CFLAGS = @QT_MAC_CFLAGS@
+QT_MAC_LIBS = @QT_MAC_LIBS@
 QT_WAYLAND_CFLAGS = @QT_WAYLAND_CFLAGS@
 QT_WAYLAND_LIBS = @QT_WAYLAND_LIBS@
 QT_X11_CFLAGS = @QT_X11_CFLAGS@
 QT_X11_LIBS = @QT_X11_LIBS@
 RANLIB = @RANLIB@
 RCC = @RCC@
-RSVG_2_36_2_CFLAGS = @RSVG_2_36_2_CFLAGS@
-RSVG_2_36_2_LIBS = @RSVG_2_36_2_LIBS@
 RSVG_CFLAGS = @RSVG_CFLAGS@
 RSVG_LIBS = @RSVG_LIBS@
 RTMP_CFLAGS = @RTMP_CFLAGS@
@@ -668,6 +679,7 @@
 VOAACENC_LIBS = @VOAACENC_LIBS@
 VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
 VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VULKAN_LIBS = @VULKAN_LIBS@
 WARNING_CFLAGS = @WARNING_CFLAGS@
 WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
 WARNING_OBJCFLAGS = @WARNING_OBJCFLAGS@
@@ -678,6 +690,7 @@
 WAYLAND_LIBS = @WAYLAND_LIBS@
 WEBP_CFLAGS = @WEBP_CFLAGS@
 WEBP_LIBS = @WEBP_LIBS@
+WGET = @WGET@
 WILDMIDI_CFLAGS = @WILDMIDI_CFLAGS@
 WILDMIDI_LIBS = @WILDMIDI_LIBS@
 WINKS_LIBS = @WINKS_LIBS@
@@ -687,6 +700,8 @@
 X11_LIBS = @X11_LIBS@
 X265_CFLAGS = @X265_CFLAGS@
 X265_LIBS = @X265_LIBS@
+XCB_CFLAGS = @XCB_CFLAGS@
+XCB_LIBS = @XCB_LIBS@
 XCOMPOSITE_CFLAGS = @XCOMPOSITE_CFLAGS@
 XCOMPOSITE_LIBS = @XCOMPOSITE_LIBS@
 XGETTEXT = @XGETTEXT@
@@ -724,7 +739,6 @@
 docdir = @docdir@
 dvidir = @dvidir@
 exec_prefix = @exec_prefix@
-gsettingsschemadir = @gsettingsschemadir@
 host = @host@
 host_alias = @host_alias@
 host_cpu = @host_cpu@
diff --git a/gst/mpegtsdemux/Makefile.am b/gst/mpegtsdemux/Makefile.am
index b4e053c..f0475c6 100644
--- a/gst/mpegtsdemux/Makefile.am
+++ b/gst/mpegtsdemux/Makefile.am
@@ -15,8 +15,8 @@
 	$(top_builddir)/gst-libs/gst/mpegts/libgstmpegts-$(GST_API_VERSION).la \
 	$(top_builddir)/gst-libs/gst/codecparsers/libgstcodecparsers-$(GST_API_VERSION).la \
 	$(GST_PLUGINS_BASE_LIBS) -lgsttag-$(GST_API_VERSION) \
-	-lgstpbutils-@GST_API_VERSION@ \
-	$(GST_BASE_LIBS) $(GST_LIBS)
+	-lgstpbutils-@GST_API_VERSION@ -lgstaudio-$(GST_API_VERSION) \
+	$(GST_BASE_LIBS) $(GST_LIBS) $(LIBM)
 libgstmpegtsdemux_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS)
 libgstmpegtsdemux_la_LIBTOOLFLAGS = $(GST_PLUGIN_LIBTOOLFLAGS)
 
diff --git a/gst/mpegtsdemux/Makefile.in b/gst/mpegtsdemux/Makefile.in
index 8a7f235..c235476 100644
--- a/gst/mpegtsdemux/Makefile.in
+++ b/gst/mpegtsdemux/Makefile.in
@@ -116,16 +116,15 @@
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
 	$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
-	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gsettings.m4 \
-	$(top_srcdir)/m4/gst-fionread.m4 $(top_srcdir)/m4/gst-sdl.m4 \
-	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
-	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
-	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libgcrypt.m4 \
-	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
-	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
-	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
-	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
-	$(top_srcdir)/configure.ac
+	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gst-fionread.m4 \
+	$(top_srcdir)/m4/gst-sdl.m4 $(top_srcdir)/m4/iconv.m4 \
+	$(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \
+	$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
+	$(top_srcdir)/m4/libgcrypt.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
+	$(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \
@@ -167,7 +166,7 @@
 libgstmpegtsdemux_la_DEPENDENCIES = $(top_builddir)/gst-libs/gst/mpegts/libgstmpegts-$(GST_API_VERSION).la \
 	$(top_builddir)/gst-libs/gst/codecparsers/libgstcodecparsers-$(GST_API_VERSION).la \
 	$(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
-	$(am__DEPENDENCIES_1)
+	$(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1)
 am_libgstmpegtsdemux_la_OBJECTS =  \
 	libgstmpegtsdemux_la-mpegtspacketizer.lo \
 	libgstmpegtsdemux_la-mpegtsbase.lo \
@@ -282,6 +281,8 @@
 CLUTTER_X11_LIBS = @CLUTTER_X11_LIBS@
 CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
+CUDA_CFLAGS = @CUDA_CFLAGS@
+CUDA_LIBS = @CUDA_LIBS@
 CURL_CFLAGS = @CURL_CFLAGS@
 CURL_LIBS = @CURL_LIBS@
 CXX = @CXX@
@@ -319,6 +320,8 @@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
+EGL_CFLAGS = @EGL_CFLAGS@
+EGL_LIBS = @EGL_LIBS@
 EGREP = @EGREP@
 ERROR_CFLAGS = @ERROR_CFLAGS@
 ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
@@ -327,7 +330,6 @@
 EXIF_CFLAGS = @EXIF_CFLAGS@
 EXIF_LIBS = @EXIF_LIBS@
 FAAC_LIBS = @FAAC_LIBS@
-FAAD_IS_NEAAC = @FAAD_IS_NEAAC@
 FAAD_LIBS = @FAAD_LIBS@
 FFLAGS = @FFLAGS@
 FGREP = @FGREP@
@@ -346,8 +348,9 @@
 GIO_LIBS = @GIO_LIBS@
 GIO_UNIX_CFLAGS = @GIO_UNIX_CFLAGS@
 GIO_UNIX_LIBS = @GIO_UNIX_LIBS@
+GLES2_CFLAGS = @GLES2_CFLAGS@
+GLES2_LIBS = @GLES2_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
-GLIB_COMPILE_SCHEMAS = @GLIB_COMPILE_SCHEMAS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
@@ -364,16 +367,17 @@
 GMODULE_NO_EXPORT_LIBS = @GMODULE_NO_EXPORT_LIBS@
 GMSGFMT = @GMSGFMT@
 GMSGFMT_015 = @GMSGFMT_015@
+GNUSTL_CFLAGS = @GNUSTL_CFLAGS@
+GNUSTL_LIBS = @GNUSTL_LIBS@
 GRAPHENE_CFLAGS = @GRAPHENE_CFLAGS@
 GRAPHENE_LIBS = @GRAPHENE_LIBS@
 GREP = @GREP@
-GSETTINGS_CFLAGS = @GSETTINGS_CFLAGS@
-GSETTINGS_DISABLE_SCHEMAS_COMPILE = @GSETTINGS_DISABLE_SCHEMAS_COMPILE@
-GSETTINGS_LIBS = @GSETTINGS_LIBS@
 GSM_LIBS = @GSM_LIBS@
 GSTPB_PLUGINS_DIR = @GSTPB_PLUGINS_DIR@
 GSTPB_PREFIX = @GSTPB_PREFIX@
 GST_AGE = @GST_AGE@
+GST_ALLOCATORS_CFLAGS = @GST_ALLOCATORS_CFLAGS@
+GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
 GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
 GST_API_VERSION = @GST_API_VERSION@
 GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
@@ -399,6 +403,8 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PBUTILS_CFLAGS = @GST_PBUTILS_CFLAGS@
+GST_PBUTILS_LIBS = @GST_PBUTILS_LIBS@
 GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BAD_CFLAGS = @GST_PLUGINS_BAD_CFLAGS@
@@ -424,6 +430,8 @@
 GST_PREFIX = @GST_PREFIX@
 GST_REVISION = @GST_REVISION@
 GST_TOOLS_DIR = @GST_TOOLS_DIR@
+GST_VIDEO_CFLAGS = @GST_VIDEO_CFLAGS@
+GST_VIDEO_LIBS = @GST_VIDEO_LIBS@
 GTK3_CFLAGS = @GTK3_CFLAGS@
 GTK3_GL_CFLAGS = @GTK3_GL_CFLAGS@
 GTK3_GL_LIBS = @GTK3_GL_LIBS@
@@ -525,6 +533,7 @@
 LTLIBICONV = @LTLIBICONV@
 LTLIBINTL = @LTLIBINTL@
 LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
 MANIFEST_TOOL = @MANIFEST_TOOL@
@@ -538,8 +547,6 @@
 MODPLUG_LIBS = @MODPLUG_LIBS@
 MPEG2ENC_CFLAGS = @MPEG2ENC_CFLAGS@
 MPEG2ENC_LIBS = @MPEG2ENC_LIBS@
-MPG123_CFLAGS = @MPG123_CFLAGS@
-MPG123_LIBS = @MPG123_LIBS@
 MPLEX_CFLAGS = @MPLEX_CFLAGS@
 MPLEX_LDFLAGS = @MPLEX_LDFLAGS@
 MPLEX_LIBS = @MPLEX_LIBS@
@@ -555,6 +562,8 @@
 NETTLE_LIBS = @NETTLE_LIBS@
 NM = @NM@
 NMEDIT = @NMEDIT@
+NVENCODE_CFLAGS = @NVENCODE_CFLAGS@
+NVENCODE_LIBS = @NVENCODE_LIBS@
 OBJC = @OBJC@
 OBJCDEPMODE = @OBJCDEPMODE@
 OBJCFLAGS = @OBJCFLAGS@
@@ -612,16 +621,18 @@
 PYTHON_PLATFORM = @PYTHON_PLATFORM@
 PYTHON_PREFIX = @PYTHON_PREFIX@
 PYTHON_VERSION = @PYTHON_VERSION@
+QT_ANDROID_CFLAGS = @QT_ANDROID_CFLAGS@
+QT_ANDROID_LIBS = @QT_ANDROID_LIBS@
 QT_CFLAGS = @QT_CFLAGS@
 QT_LIBS = @QT_LIBS@
+QT_MAC_CFLAGS = @QT_MAC_CFLAGS@
+QT_MAC_LIBS = @QT_MAC_LIBS@
 QT_WAYLAND_CFLAGS = @QT_WAYLAND_CFLAGS@
 QT_WAYLAND_LIBS = @QT_WAYLAND_LIBS@
 QT_X11_CFLAGS = @QT_X11_CFLAGS@
 QT_X11_LIBS = @QT_X11_LIBS@
 RANLIB = @RANLIB@
 RCC = @RCC@
-RSVG_2_36_2_CFLAGS = @RSVG_2_36_2_CFLAGS@
-RSVG_2_36_2_LIBS = @RSVG_2_36_2_LIBS@
 RSVG_CFLAGS = @RSVG_CFLAGS@
 RSVG_LIBS = @RSVG_LIBS@
 RTMP_CFLAGS = @RTMP_CFLAGS@
@@ -673,6 +684,7 @@
 VOAACENC_LIBS = @VOAACENC_LIBS@
 VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
 VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VULKAN_LIBS = @VULKAN_LIBS@
 WARNING_CFLAGS = @WARNING_CFLAGS@
 WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
 WARNING_OBJCFLAGS = @WARNING_OBJCFLAGS@
@@ -683,6 +695,7 @@
 WAYLAND_LIBS = @WAYLAND_LIBS@
 WEBP_CFLAGS = @WEBP_CFLAGS@
 WEBP_LIBS = @WEBP_LIBS@
+WGET = @WGET@
 WILDMIDI_CFLAGS = @WILDMIDI_CFLAGS@
 WILDMIDI_LIBS = @WILDMIDI_LIBS@
 WINKS_LIBS = @WINKS_LIBS@
@@ -692,6 +705,8 @@
 X11_LIBS = @X11_LIBS@
 X265_CFLAGS = @X265_CFLAGS@
 X265_LIBS = @X265_LIBS@
+XCB_CFLAGS = @XCB_CFLAGS@
+XCB_LIBS = @XCB_LIBS@
 XCOMPOSITE_CFLAGS = @XCOMPOSITE_CFLAGS@
 XCOMPOSITE_LIBS = @XCOMPOSITE_LIBS@
 XGETTEXT = @XGETTEXT@
@@ -729,7 +744,6 @@
 docdir = @docdir@
 dvidir = @dvidir@
 exec_prefix = @exec_prefix@
-gsettingsschemadir = @gsettingsschemadir@
 host = @host@
 host_alias = @host_alias@
 host_cpu = @host_cpu@
@@ -786,8 +800,8 @@
 	$(top_builddir)/gst-libs/gst/mpegts/libgstmpegts-$(GST_API_VERSION).la \
 	$(top_builddir)/gst-libs/gst/codecparsers/libgstcodecparsers-$(GST_API_VERSION).la \
 	$(GST_PLUGINS_BASE_LIBS) -lgsttag-$(GST_API_VERSION) \
-	-lgstpbutils-@GST_API_VERSION@ \
-	$(GST_BASE_LIBS) $(GST_LIBS)
+	-lgstpbutils-@GST_API_VERSION@ -lgstaudio-$(GST_API_VERSION) \
+	$(GST_BASE_LIBS) $(GST_LIBS) $(LIBM)
 
 libgstmpegtsdemux_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS)
 libgstmpegtsdemux_la_LIBTOOLFLAGS = $(GST_PLUGIN_LIBTOOLFLAGS)
diff --git a/gst/mpegtsdemux/gstmpegdesc.h b/gst/mpegtsdemux/gstmpegdesc.h
index d1256a6..bd9235f 100644
--- a/gst/mpegtsdemux/gstmpegdesc.h
+++ b/gst/mpegtsdemux/gstmpegdesc.h
@@ -232,5 +232,6 @@
 #define DRF_ID_ETV1       0x45545631
 #define DRF_ID_HEVC       0x48455643
 #define DRF_ID_KLVA       0x4b4c5641   /* defined in RP217 */
+#define DRF_ID_OPUS       0x4f707573
 
 #endif /* __GST_MPEG_DESC_H__ */
diff --git a/gst/mpegtsdemux/mpegtsbase.c b/gst/mpegtsdemux/mpegtsbase.c
index d46a47e..eb16aac 100644
--- a/gst/mpegtsdemux/mpegtsbase.c
+++ b/gst/mpegtsdemux/mpegtsbase.c
@@ -74,6 +74,8 @@
     GValue * value, GParamSpec * pspec);
 
 static void mpegts_base_free_program (MpegTSBaseProgram * program);
+static void mpegts_base_deactivate_program (MpegTSBase * base,
+    MpegTSBaseProgram * program);
 static gboolean mpegts_base_sink_activate (GstPad * pad, GstObject * parent);
 static gboolean mpegts_base_sink_activate_mode (GstPad * pad,
     GstObject * parent, GstPadMode mode, gboolean active);
@@ -105,12 +107,21 @@
 G_DEFINE_TYPE_WITH_CODE (MpegTSBase, mpegts_base, GST_TYPE_ELEMENT,
     _extra_init ());
 
+/* Default implementation is that mpegtsbase can remove any program */
+static gboolean
+mpegts_base_can_remove_program (MpegTSBase * base, MpegTSBaseProgram * program)
+{
+  return TRUE;
+}
+
 static void
 mpegts_base_class_init (MpegTSBaseClass * klass)
 {
   GObjectClass *gobject_class;
   GstElementClass *element_class;
 
+  klass->can_remove_program = mpegts_base_can_remove_program;
+
   element_class = GST_ELEMENT_CLASS (klass);
   element_class->change_state = mpegts_base_change_state;
 
@@ -411,6 +422,16 @@
 }
 
 void
+mpegts_base_deactivate_and_free_program (MpegTSBase * base,
+    MpegTSBaseProgram * program)
+{
+  GST_DEBUG_OBJECT (base, "program_number : %d", program->program_number);
+
+  mpegts_base_deactivate_program (base, program);
+  mpegts_base_free_program (program);
+}
+
+static void
 mpegts_base_remove_program (MpegTSBase * base, gint program_number)
 {
   GST_DEBUG_OBJECT (base, "program_number : %d", program_number);
@@ -472,7 +493,7 @@
   return bstream;
 }
 
-void
+static void
 mpegts_base_program_remove_stream (MpegTSBase * base,
     MpegTSBaseProgram * program, guint16 pid)
 {
@@ -771,6 +792,7 @@
   }
 
   if (old_pat) {
+    MpegTSBaseClass *klass = GST_MPEGTS_BASE_GET_CLASS (base);
     /* deactivate the old table */
     GST_LOG ("Deactivating old Program Association Table");
 
@@ -791,8 +813,15 @@
       GST_INFO_OBJECT (base, "PAT removing program 0x%04x 0x%04x",
           patp->program_number, patp->network_or_program_map_PID);
 
-      mpegts_base_deactivate_program (base, program);
-      mpegts_base_remove_program (base, patp->program_number);
+      if (klass->can_remove_program (base, program)) {
+        mpegts_base_deactivate_program (base, program);
+        mpegts_base_remove_program (base, patp->program_number);
+      } else {
+        /* sub-class now owns the program and must call
+         * mpegts_base_deactivate_and_free_program later */
+        g_hash_table_steal (base->programs,
+            GINT_TO_POINTER ((gint) patp->program_number));
+      }
       /* FIXME: when this happens it may still be pmt pid of another
        * program, so setting to False may make it go through expensive
        * path in is_psi unnecessarily */
@@ -854,6 +883,7 @@
 
   /* If the current program is active, this means we have a new program */
   if (old_program->active) {
+    MpegTSBaseClass *klass = GST_MPEGTS_BASE_GET_CLASS (base);
     old_program = mpegts_base_steal_program (base, program_number);
     program = mpegts_base_new_program (base, program_number, section->pid);
     program->patcount = old_program->patcount;
@@ -861,8 +891,17 @@
         GINT_TO_POINTER (program_number), program);
 
     /* Desactivate the old program */
-    mpegts_base_deactivate_program (base, old_program);
-    mpegts_base_free_program (old_program);
+    /* FIXME : THIS IS BREAKING THE STREAM SWITCHING LOGIC !
+     *  */
+    if (klass->can_remove_program (base, old_program)) {
+      mpegts_base_deactivate_program (base, old_program);
+      mpegts_base_free_program (old_program);
+    } else {
+      /* sub-class now owns the program and must call
+       * mpegts_base_deactivate_and_free_program later */
+      g_hash_table_steal (base->programs,
+          GINT_TO_POINTER ((gint) old_program->program_number));
+    }
     initial_program = FALSE;
   } else
     program = old_program;
@@ -1404,11 +1443,23 @@
         }
         base->mode = BASE_MODE_PUSHING;
       }
+    } else {
+      GST_WARNING ("subclass has no seek implementation");
     }
 
     return ret == GST_FLOW_OK;
   }
 
+  if (!klass->seek) {
+    GST_WARNING ("subclass has no seek implementation");
+    return FALSE;
+  }
+
+  if (rate <= 0.0) {
+    GST_WARNING ("Negative rate not supported");
+    return FALSE;
+  }
+
   GST_DEBUG ("seek event, rate: %f start: %" GST_TIME_FORMAT
       " stop: %" GST_TIME_FORMAT, rate, GST_TIME_ARGS (start),
       GST_TIME_ARGS (stop));
@@ -1450,16 +1501,11 @@
 
 
   /* If the subclass can seek, do that */
-  if (klass->seek) {
-    ret = klass->seek (base, event);
-    if (G_UNLIKELY (ret != GST_FLOW_OK))
-      GST_WARNING ("seeking failed %s", gst_flow_get_name (ret));
-    else
-      base->last_seek_seqnum = GST_EVENT_SEQNUM (event);
-  } else {
-    /* FIXME : Check this before so we don't do seeks we can't handle ? */
-    GST_WARNING ("subclass has no seek implementation");
-  }
+  ret = klass->seek (base, event);
+  if (G_UNLIKELY (ret != GST_FLOW_OK))
+    GST_WARNING ("seeking failed %s", gst_flow_get_name (ret));
+  else
+    base->last_seek_seqnum = GST_EVENT_SEQNUM (event);
 
   if (flush_event) {
     /* if we sent a FLUSH_START, we now send a FLUSH_STOP */
diff --git a/gst/mpegtsdemux/mpegtsbase.h b/gst/mpegtsdemux/mpegtsbase.h
index c427bd7..fc0c651 100644
--- a/gst/mpegtsdemux/mpegtsbase.h
+++ b/gst/mpegtsdemux/mpegtsbase.h
@@ -174,6 +174,10 @@
   void (*program_started) (MpegTSBase *base, MpegTSBaseProgram *program);
   /* program_stopped gets called when pat no longer has program's pmt */
   void (*program_stopped) (MpegTSBase *base, MpegTSBaseProgram *program);
+  /* Whether mpegtbase can deactivate/free a program or whether the subclass will do it
+   * If the subclass responds TRUE, it should call mpegts_base_deactivate_and_free_program()
+   * when it wants to remove it */
+  gboolean (*can_remove_program) (MpegTSBase *base, MpegTSBaseProgram *program);
 
   /* stream_added is called whenever a new stream has been identified */
   void (*stream_added) (MpegTSBase *base, MpegTSBaseStream *stream, MpegTSBaseProgram *program);
@@ -222,9 +226,8 @@
 
 G_GNUC_INTERNAL gboolean gst_mpegtsbase_plugin_init (GstPlugin * plugin);
 
-G_GNUC_INTERNAL void mpegts_base_program_remove_stream (MpegTSBase * base, MpegTSBaseProgram * program, guint16 pid);
+G_GNUC_INTERNAL void mpegts_base_deactivate_and_free_program (MpegTSBase *base, MpegTSBaseProgram *program);
 
-G_GNUC_INTERNAL void mpegts_base_remove_program(MpegTSBase *base, gint program_number);
 G_END_DECLS
 
 #endif /* GST_MPEG_TS_BASE_H */
diff --git a/gst/mpegtsdemux/mpegtspacketizer.c b/gst/mpegtsdemux/mpegtspacketizer.c
index 1cdb9e9..db3b741 100644
--- a/gst/mpegtsdemux/mpegtspacketizer.c
+++ b/gst/mpegtsdemux/mpegtspacketizer.c
@@ -212,8 +212,7 @@
   stream->section_length = 0;
   stream->section_offset = 0;
   stream->table_id = TABLE_ID_UNSET;
-  if (stream->section_data)
-    g_free (stream->section_data);
+  g_free (stream->section_data);
   stream->section_data = NULL;
 }
 
@@ -228,8 +227,6 @@
 mpegts_packetizer_stream_free (MpegTSPacketizerStream * stream)
 {
   mpegts_packetizer_clear_section (stream);
-  if (stream->section_data)
-    g_free (stream->section_data);
   g_slist_foreach (stream->subtables,
       (GFunc) mpegts_packetizer_stream_subtable_free, NULL);
   g_slist_free (stream->subtables);
@@ -984,6 +981,7 @@
       GST_LOG
           ("PID 0x%04x PUSI and pointer == 0, skipping straight to section_start parsing",
           packet->pid);
+      mpegts_packetizer_clear_section (stream);
       goto section_start;
     }
   }
@@ -2285,8 +2283,12 @@
         GST_DEBUG ("Using group !");
         refpcr = group->first_pcr;
         refpcroffset = group->pcr_offset;
-        if (pts < refpcr)
-          refpcr -= PCR_MAX_VALUE;
+        if (pts < PCRTIME_TO_GSTTIME (refpcr)) {
+          if (PCRTIME_TO_GSTTIME (refpcr) - pts > GST_SECOND)
+            pts += PCR_GST_MAX_VALUE;
+          else
+            refpcr = G_MAXINT64;
+        }
       }
     }
     if (refpcr != G_MAXINT64)
diff --git a/gst/mpegtsdemux/mpegtsparse.c b/gst/mpegtsdemux/mpegtsparse.c
index 743da4f..6ab2e7d 100644
--- a/gst/mpegtsdemux/mpegtsparse.c
+++ b/gst/mpegtsdemux/mpegtsparse.c
@@ -125,6 +125,16 @@
 drain_pending_buffers (MpegTSParse2 * parse, gboolean drain_all);
 
 static void
+mpegts_parse_dispose (GObject * object)
+{
+  MpegTSParse2 *parse = (MpegTSParse2 *) object;
+
+  gst_flow_combiner_free (parse->flowcombiner);
+
+  GST_CALL_PARENT (G_OBJECT_CLASS, dispose, (object));
+}
+
+static void
 mpegts_parse_class_init (MpegTSParse2Class * klass)
 {
   GObjectClass *gobject_class = (GObjectClass *) (klass);
@@ -133,6 +143,7 @@
 
   gobject_class->set_property = mpegts_parse_set_property;
   gobject_class->get_property = mpegts_parse_get_property;
+  gobject_class->dispose = mpegts_parse_dispose;
 
   g_object_class_install_property (gobject_class, PROP_SET_TIMESTAMPS,
       g_param_spec_boolean ("set-timestamps",
@@ -187,7 +198,10 @@
 
   parse->user_pcr_pid = parse->pcr_pid = -1;
 
+  parse->flowcombiner = gst_flow_combiner_new ();
+
   parse->srcpad = gst_pad_new_from_static_template (&src_template, "src");
+  gst_flow_combiner_add_pad (parse->flowcombiner, parse->srcpad);
   parse->first = TRUE;
   gst_pad_set_query_function (parse->srcpad,
       GST_DEBUG_FUNCPTR (mpegts_parse_src_pad_query));
@@ -396,6 +410,7 @@
   tspad->pushed = FALSE;
   tspad->flow_return = GST_FLOW_NOT_LINKED;
   gst_pad_set_element_private (pad, tspad);
+  gst_flow_combiner_add_pad (parse->flowcombiner, pad);
 
   return tspad;
 }
@@ -504,8 +519,11 @@
 static void
 mpegts_parse_release_pad (GstElement * element, GstPad * pad)
 {
+  MpegTSParse2 *parse = (MpegTSParse2 *) element;
+
   gst_pad_set_active (pad, FALSE);
   /* we do the cleanup in GstElement::pad-removed */
+  gst_flow_combiner_remove_pad (parse->flowcombiner, pad);
   gst_element_remove_pad (element, pad);
 }
 
@@ -525,9 +543,10 @@
         if (section->subtable_extension != tspad->program_number)
           to_push = FALSE;
       }
-    } else {
+    } else if (section->table_id != 0x00) {
       /* there's a program filter on the pad but the PMT for the program has not
-       * been parsed yet, ignore the pad until we get a PMT */
+       * been parsed yet, ignore the pad until we get a PMT.
+       * But we always allow PAT to go through */
       to_push = FALSE;
     }
   }
@@ -542,8 +561,10 @@
     gst_buffer_fill (buf, 0, packet->data_start,
         packet->data_end - packet->data_start);
     ret = gst_pad_push (tspad->pad, buf);
+    ret = gst_flow_combiner_update_flow (parse->flowcombiner, ret);
   }
 
+  GST_LOG_OBJECT (parse, "Returning %s", gst_flow_get_name (ret));
   return ret;
 }
 
@@ -552,29 +573,30 @@
     MpegTSPacketizerPacket * packet)
 {
   GstFlowReturn ret = GST_FLOW_OK;
-  MpegTSBaseStream **pad_pids = NULL;
+  MpegTSBaseProgram *bp = NULL;
 
   if (tspad->program_number != -1) {
-    if (tspad->program) {
-      MpegTSBaseProgram *bp = (MpegTSBaseProgram *) tspad->program;
-      pad_pids = bp->streams;
-    } else {
-      /* there's a program filter on the pad but the PMT for the program has not
-       * been parsed yet, ignore the pad until we get a PMT */
-      goto out;
+    if (tspad->program)
+      bp = (MpegTSBaseProgram *) tspad->program;
+    else
+      bp = mpegts_base_get_program ((MpegTSBase *) parse,
+          tspad->program_number);
+  }
+
+  if (bp) {
+    if (packet->pid == bp->pmt_pid || bp->streams == NULL
+        || bp->streams[packet->pid]) {
+      GstBuffer *buf =
+          gst_buffer_new_and_alloc (packet->data_end - packet->data_start);
+      gst_buffer_fill (buf, 0, packet->data_start,
+          packet->data_end - packet->data_start);
+      /* push if there's no filter or if the pid is in the filter */
+      ret = gst_pad_push (tspad->pad, buf);
+      ret = gst_flow_combiner_update_flow (parse->flowcombiner, ret);
     }
   }
+  GST_DEBUG_OBJECT (parse, "Returning %s", gst_flow_get_name (ret));
 
-  if (pad_pids == NULL || pad_pids[packet->pid]) {
-    GstBuffer *buf =
-        gst_buffer_new_and_alloc (packet->data_end - packet->data_start);
-    gst_buffer_fill (buf, 0, packet->data_start,
-        packet->data_end - packet->data_start);
-    /* push if there's no filter or if the pid is in the filter */
-    ret = gst_pad_push (tspad->pad, buf);
-  }
-
-out:
   return ret;
 }
 
@@ -818,15 +840,15 @@
 
     GST_BUFFER_PTS (buffer) = out_ts + parse->ts_offset;
     GST_BUFFER_DTS (buffer) = out_ts + parse->ts_offset;
-    if (ret == GST_FLOW_OK)
+    if (ret == GST_FLOW_OK) {
       ret = gst_pad_push (parse->srcpad, buffer);
-    else
+      ret = gst_flow_combiner_update_flow (parse->flowcombiner, ret);
+    } else
       gst_buffer_unref (buffer);
 
     /* Free this list node and move to the next */
     p = g_list_previous (l);
-    parse->pending_buffers = g_list_remove_link (parse->pending_buffers, l);
-    g_list_free_1 (l);
+    parse->pending_buffers = g_list_delete_link (parse->pending_buffers, l);
     l = p;
   }
 
@@ -872,8 +894,10 @@
     }
   }
 
-  if (buffer != NULL)
+  if (buffer != NULL) {
     ret = gst_pad_push (parse->srcpad, buffer);
+    ret = gst_flow_combiner_update_flow (parse->flowcombiner, ret);
+  }
 
   return ret;
 }
diff --git a/gst/mpegtsdemux/mpegtsparse.h b/gst/mpegtsdemux/mpegtsparse.h
index d3bc6a2..f89bd4c 100644
--- a/gst/mpegtsdemux/mpegtsparse.h
+++ b/gst/mpegtsdemux/mpegtsparse.h
@@ -26,6 +26,7 @@
 #define GST_MPEG_TS_PARSE_H
 
 #include <gst/gst.h>
+#include <gst/base/gstflowcombiner.h>
 #include "mpegtsbase.h"
 #include "mpegtspacketizer.h"
 
@@ -61,8 +62,11 @@
   /* Always present source pad */
   GstPad *srcpad;
 
+  /* Request source (single program) pads */
   GList *srcpads;
 
+  GstFlowCombiner *flowcombiner;
+  
   /* state */
   gboolean first;
   gboolean set_timestamps;
diff --git a/gst/mpegtsdemux/tsdemux.c b/gst/mpegtsdemux/tsdemux.c
index 5231c05..8a41f90 100644
--- a/gst/mpegtsdemux/tsdemux.c
+++ b/gst/mpegtsdemux/tsdemux.c
@@ -37,6 +37,8 @@
 #include <glib.h>
 #include <gst/tag/tag.h>
 #include <gst/pbutils/pbutils.h>
+#include <gst/base/base.h>
+#include <gst/audio/audio.h>
 
 #include "mpegtsbase.h"
 #include "tsdemux.h"
@@ -46,7 +48,10 @@
 #include "pesparse.h"
 #include <gst/codecparsers/gsth264parser.h>
 #include <gst/codecparsers/gstmpegvideoparser.h>
-#include <gst/base/gstbytewriter.h>
+
+#include <math.h>
+
+#define _gst_log2(x) (log(x)/log(2))
 
 /*
  * tsdemux
@@ -204,6 +209,8 @@
       "systemstream = (boolean) FALSE; " \
     "video/x-h264,stream-format=(string)byte-stream," \
       "alignment=(string)nal;" \
+    "video/x-h265,stream-format=(string)byte-stream," \
+      "alignment=(string)nal;" \
     "video/x-dirac;" \
     "video/x-cavs;" \
     "video/x-wmv," \
@@ -230,12 +237,13 @@
       "mute = (boolean) { FALSE, TRUE }; " \
     "audio/x-ac3; audio/x-eac3;" \
     "audio/x-dts;" \
+    "audio/x-opus;" \
     "audio/x-private-ts-lpcm" \
   )
 
 /* Can also use the subpicture pads for text subtitles? */
 #define SUBPICTURE_CAPS \
-    GST_STATIC_CAPS ("subpicture/x-pgs; subpicture/x-dvd")
+    GST_STATIC_CAPS ("subpicture/x-pgs; subpicture/x-dvd; subpicture/x-dvb")
 
 static GstStaticPadTemplate video_template =
 GST_STATIC_PAD_TEMPLATE ("video_%04x", GST_PAD_SRC,
@@ -276,6 +284,9 @@
 gst_ts_demux_program_started (MpegTSBase * base, MpegTSBaseProgram * program);
 static void
 gst_ts_demux_program_stopped (MpegTSBase * base, MpegTSBaseProgram * program);
+static gboolean
+gst_ts_demux_can_remove_program (MpegTSBase * base,
+    MpegTSBaseProgram * program);
 static void gst_ts_demux_reset (MpegTSBase * base);
 static GstFlowReturn
 gst_ts_demux_push (MpegTSBase * base, MpegTSPacketizerPacket * packet,
@@ -373,6 +384,7 @@
   ts_class->push_event = GST_DEBUG_FUNCPTR (push_event);
   ts_class->program_started = GST_DEBUG_FUNCPTR (gst_ts_demux_program_started);
   ts_class->program_stopped = GST_DEBUG_FUNCPTR (gst_ts_demux_program_stopped);
+  ts_class->can_remove_program = gst_ts_demux_can_remove_program;
   ts_class->stream_added = gst_ts_demux_stream_added;
   ts_class->stream_removed = gst_ts_demux_stream_removed;
   ts_class->seek = GST_DEBUG_FUNCPTR (gst_ts_demux_do_seek);
@@ -397,6 +409,11 @@
     demux->global_tags = NULL;
   }
 
+  if (demux->previous_program) {
+    mpegts_base_deactivate_and_free_program (base, demux->previous_program);
+    demux->previous_program = NULL;
+  }
+
   demux->have_group_id = FALSE;
   demux->group_id = G_MAXUINT;
 
@@ -851,8 +868,8 @@
 
   gst_segment_do_seek (&demux->segment, rate, format, flags, start_type,
       start, stop_type, stop, NULL);
-  if (!(flags & GST_SEEK_FLAG_ACCURATE))
-    demux->reset_segment = TRUE;
+  /* Reset segment if we're not doing an accurate seek */
+  demux->reset_segment = (!(flags & GST_SEEK_FLAG_ACCURATE));
 
   if (demux->segment_event) {
     gst_event_unref (demux->segment_event);
@@ -1171,7 +1188,7 @@
           GST_MTS_DESC_DVB_SUBTITLING);
       if (desc) {
         GST_LOG ("subtitling");
-        is_private = TRUE;
+        is_subpicture = TRUE;
         caps = gst_caps_new_empty_simple ("subpicture/x-dvb");
         sparse = TRUE;
         break;
@@ -1189,6 +1206,179 @@
           is_audio = TRUE;
           caps = gst_caps_new_empty_simple ("audio/x-smpte-302m");
           break;
+        case DRF_ID_OPUS:
+          desc = mpegts_get_descriptor_from_stream (bstream,
+              GST_MTS_DESC_DVB_EXTENSION);
+          if (desc != NULL && desc->tag_extension == 0x80 && desc->length >= 1) {       /* User defined (provisional Opus) */
+            guint8 channel_config_code;
+            GstByteReader br;
+
+            /* skip tag, length and tag_extension */
+            gst_byte_reader_init (&br, desc->data + 3, desc->length - 1);
+            channel_config_code = gst_byte_reader_get_uint8_unchecked (&br);
+
+            if ((channel_config_code & 0x8f) <= 8) {
+              static const guint8 coupled_stream_counts[9] = {
+                1, 0, 1, 1, 2, 2, 2, 3, 3
+              };
+              static const guint8 channel_map_a[8][8] = {
+                {0},
+                {0, 1},
+                {0, 2, 1},
+                {0, 1, 2, 3},
+                {0, 4, 1, 2, 3},
+                {0, 4, 1, 2, 3, 5},
+                {0, 4, 1, 2, 3, 5, 6},
+                {0, 6, 1, 2, 3, 4, 5, 7},
+              };
+              static const guint8 channel_map_b[8][8] = {
+                {0},
+                {0, 1},
+                {0, 1, 2},
+                {0, 1, 2, 3},
+                {0, 1, 2, 3, 4},
+                {0, 1, 2, 3, 4, 5},
+                {0, 1, 2, 3, 4, 5, 6},
+                {0, 1, 2, 3, 4, 5, 6, 7},
+              };
+
+              gint channels = -1, stream_count, coupled_count, mapping_family;
+              guint8 *channel_mapping = NULL;
+
+              channels = channel_config_code ? (channel_config_code & 0x0f) : 2;
+              if (channel_config_code == 0 || channel_config_code == 0x80) {
+                /* Dual Mono */
+                mapping_family = 255;
+                if (channel_config_code == 0) {
+                  stream_count = 1;
+                  coupled_count = 1;
+                } else {
+                  stream_count = 2;
+                  coupled_count = 0;
+                }
+                channel_mapping = g_new0 (guint8, channels);
+                memcpy (channel_mapping, &channel_map_a[1], channels);
+              } else if (channel_config_code <= 8) {
+                mapping_family = (channels > 2) ? 1 : 0;
+                stream_count =
+                    channel_config_code -
+                    coupled_stream_counts[channel_config_code];
+                coupled_count = coupled_stream_counts[channel_config_code];
+                if (mapping_family != 0) {
+                  channel_mapping = g_new0 (guint8, channels);
+                  memcpy (channel_mapping, &channel_map_a[channels - 1],
+                      channels);
+                }
+              } else if (channel_config_code >= 0x82
+                  && channel_config_code <= 0x88) {
+                mapping_family = 1;
+                stream_count = channels;
+                coupled_count = 0;
+                channel_mapping = g_new0 (guint8, channels);
+                memcpy (channel_mapping, &channel_map_b[channels - 1],
+                    channels);
+              } else if (channel_config_code == 0x81) {
+                if (gst_byte_reader_get_remaining (&br) < 2) {
+                  GST_WARNING_OBJECT (demux,
+                      "Invalid Opus descriptor with extended channel configuration");
+                  channels = -1;
+                  break;
+                }
+
+                channels = gst_byte_reader_get_uint8_unchecked (&br);
+                mapping_family = gst_byte_reader_get_uint8_unchecked (&br);
+
+                /* Overwrite values from above */
+                if (channels == 0) {
+                  GST_WARNING_OBJECT (demux,
+                      "Invalid Opus descriptor with extended channel configuration");
+                  channels = -1;
+                  break;
+                }
+
+                if (mapping_family == 0 && channels <= 2) {
+                  stream_count = channels - coupled_stream_counts[channels];
+                  coupled_count = coupled_stream_counts[channels];
+                } else {
+                  GstBitReader breader;
+                  guint8 stream_count_minus_one, coupled_stream_count;
+                  gint stream_count_minus_one_len, coupled_stream_count_len;
+                  gint channel_mapping_len, i;
+
+                  gst_bit_reader_init (&breader,
+                      gst_byte_reader_get_data_unchecked
+                      (&br, gst_byte_reader_get_remaining
+                          (&br)), gst_byte_reader_get_remaining (&br));
+
+                  stream_count_minus_one_len = ceil (_gst_log2 (channels));
+                  if (!gst_bit_reader_get_bits_uint8 (&breader,
+                          &stream_count_minus_one,
+                          stream_count_minus_one_len)) {
+                    GST_WARNING_OBJECT (demux,
+                        "Invalid Opus descriptor with extended channel configuration");
+                    channels = -1;
+                    break;
+                  }
+
+                  stream_count = stream_count_minus_one + 1;
+                  coupled_stream_count_len =
+                      ceil (_gst_log2 (stream_count_minus_one + 2));
+
+                  if (!gst_bit_reader_get_bits_uint8 (&breader,
+                          &coupled_stream_count, coupled_stream_count_len)) {
+                    GST_WARNING_OBJECT (demux,
+                        "Invalid Opus descriptor with extended channel configuration");
+                    channels = -1;
+                    break;
+                  }
+
+                  coupled_count = coupled_stream_count;
+
+                  channel_mapping_len =
+                      ceil (_gst_log2 (stream_count_minus_one + 1 +
+                          coupled_stream_count + 1));
+                  channel_mapping = g_new0 (guint8, channels);
+                  for (i = 0; i < channels; i++) {
+                    if (!gst_bit_reader_get_bits_uint8 (&breader,
+                            &channel_mapping[i], channel_mapping_len)) {
+                      GST_WARNING_OBJECT (demux,
+                          "Invalid Opus descriptor with extended channel configuration");
+                      break;
+                    }
+                  }
+
+                  /* error above */
+                  if (i != channels) {
+                    channels = -1;
+                    g_free (channel_mapping);
+                    channel_mapping = NULL;
+                    break;
+                  }
+                }
+              } else {
+                g_assert_not_reached ();
+              }
+
+              if (channels != -1) {
+                is_audio = TRUE;
+                template = gst_static_pad_template_get (&audio_template);
+                name = g_strdup_printf ("audio_%04x", bstream->pid);
+
+                caps =
+                    gst_codec_utils_opus_create_caps (48000, channels,
+                    mapping_family, stream_count, coupled_count,
+                    channel_mapping);
+
+                g_free (channel_mapping);
+              }
+            } else {
+              GST_WARNING_OBJECT (demux,
+                  "unexpected channel config code 0x%02x", channel_config_code);
+            }
+          } else {
+            GST_WARNING_OBJECT (demux, "Opus, but no extension descriptor");
+          }
+          break;
         case DRF_ID_HEVC:
           is_video = TRUE;
           caps = gst_caps_new_simple ("video/x-h265",
@@ -1400,8 +1590,7 @@
     gst_pad_set_event_function (pad, gst_ts_demux_srcpad_event);
   }
 
-  if (name)
-    g_free (name);
+  g_free (name);
   if (template)
     gst_object_unref (template);
   if (caps)
@@ -1436,7 +1625,8 @@
     stream->active = FALSE;
 
     stream->need_newsegment = TRUE;
-    demux->reset_segment = TRUE;
+    /* Reset segment if we're not doing an accurate seek */
+    demux->reset_segment = (!(demux->segment.flags & GST_SEEK_FLAG_ACCURATE));
     stream->needs_keyframe = FALSE;
     stream->discont = TRUE;
     stream->pts = GST_CLOCK_TIME_NONE;
@@ -1513,16 +1703,8 @@
     gst_element_add_pad ((GstElement *) tsdemux, stream->pad);
     stream->active = TRUE;
     GST_DEBUG_OBJECT (stream->pad, "done adding pad");
-    /* force sending of pending sticky events which have been stored on the
-     * pad already and which otherwise would only be sent on the first buffer
-     * or serialized event (which means very late in case of subtitle streams),
-     * and playsink waits for stream-start or another serialized event */
-    if (stream->sparse) {
-      GST_DEBUG_OBJECT (stream->pad, "sparse stream, pushing GAP event");
-      gst_pad_push_event (stream->pad, gst_event_new_gap (0, 0));
-    }
   } else if (((MpegTSBaseStream *) stream)->stream_type != 0xff) {
-    GST_WARNING_OBJECT (tsdemux,
+    GST_DEBUG_OBJECT (tsdemux,
         "stream %p (pid 0x%04x, type:0x%02x) has no pad", stream,
         ((MpegTSBaseStream *) stream)->pid,
         ((MpegTSBaseStream *) stream)->stream_type);
@@ -1535,8 +1717,7 @@
 {
   GST_DEBUG ("flushing stream %p", stream);
 
-  if (stream->data)
-    g_free (stream->data);
+  g_free (stream->data);
   stream->data = NULL;
   stream->state = PENDING_PACKET_EMPTY;
   stream->expected_size = 0;
@@ -1583,6 +1764,24 @@
     gst_ts_demux_stream_flush (walk->data, demux, hard);
 }
 
+static gboolean
+gst_ts_demux_can_remove_program (MpegTSBase * base, MpegTSBaseProgram * program)
+{
+  GstTSDemux *demux = GST_TS_DEMUX (base);
+
+  /* If it's our current active program, we return FALSE, we'll deactivate it
+   * ourselves when the next program gets activated */
+  if (demux->program == program) {
+    GST_DEBUG
+        ("Attempting to remove current program, delaying until new program gets activated");
+    demux->previous_program = program;
+    demux->program_number = -1;
+    return FALSE;
+  }
+  return TRUE;
+}
+
+
 static void
 gst_ts_demux_program_started (MpegTSBase * base, MpegTSBaseProgram * program)
 {
@@ -1607,11 +1806,45 @@
       demux->segment_event = NULL;
     }
 
+    /* DRAIN ALL STREAMS FIRST ! */
+    if (demux->previous_program) {
+      GList *tmp;
+      GST_DEBUG_OBJECT (demux, "Draining previous program");
+      for (tmp = demux->previous_program->stream_list; tmp; tmp = tmp->next) {
+        TSDemuxStream *stream = (TSDemuxStream *) tmp->data;
+        if (stream->pad)
+          gst_ts_demux_push_pending_data (demux, stream);
+      }
+    }
+
     /* Add all streams, then fire no-more-pads */
     for (tmp = program->stream_list; tmp; tmp = tmp->next) {
       TSDemuxStream *stream = (TSDemuxStream *) tmp->data;
       activate_pad_for_stream (demux, stream);
     }
+
+    /* If there was a previous program, now is the time to deactivate it
+     * and remove old pads (including pushing EOS) */
+    if (demux->previous_program) {
+      GST_DEBUG ("Deactivating previous program");
+      mpegts_base_deactivate_and_free_program (base, demux->previous_program);
+      demux->previous_program = NULL;
+    }
+    /* If any of the stream is sparse, push a GAP event before anything else
+     * This is done here, and not in activate_pad_for_stream() because pushing
+     * a GAP event *is* considering data, and we want to ensure the (potential)
+     * old pads are all removed before we push any data on the new ones */
+    for (tmp = program->stream_list; tmp; tmp = tmp->next) {
+      TSDemuxStream *stream = (TSDemuxStream *) tmp->data;
+      if (stream->sparse) {
+        /* force sending of pending sticky events which have been stored on the
+         * pad already and which otherwise would only be sent on the first buffer
+         * or serialized event (which means very late in case of subtitle streams),
+         * and playsink waits for stream-start or another serialized event */
+        GST_DEBUG_OBJECT (stream->pad, "sparse stream, pushing GAP event");
+        gst_pad_push_event (stream->pad, gst_event_new_gap (0, 0));
+      }
+    }
     gst_element_no_more_pads ((GstElement *) demux);
   }
 }
@@ -2132,14 +2365,106 @@
   }
 }
 
+static GstBufferList *
+parse_opus_access_unit (TSDemuxStream * stream)
+{
+  GstByteReader reader;
+  GstBufferList *buffer_list = NULL;
+
+  buffer_list = gst_buffer_list_new ();
+  gst_byte_reader_init (&reader, stream->data, stream->current_size);
+
+  do {
+    GstBuffer *buffer;
+    guint16 id;
+    guint au_size = 0;
+    guint8 b;
+    gboolean start_trim_flag, end_trim_flag, control_extension_flag;
+    guint16 start_trim = 0, end_trim = 0;
+    guint8 *packet_data;
+    guint packet_size;
+
+    if (!gst_byte_reader_get_uint16_be (&reader, &id))
+      goto error;
+
+    /* No control header */
+    if ((id >> 5) != 0x3ff)
+      goto error;
+
+    do {
+      if (!gst_byte_reader_get_uint8 (&reader, &b))
+        goto error;
+      au_size += b;
+    } while (b == 0xff);
+
+    start_trim_flag = (id >> 4) & 0x1;
+    end_trim_flag = (id >> 3) & 0x1;
+    control_extension_flag = (id >> 2) & 0x1;
+
+    if (start_trim_flag) {
+      if (!gst_byte_reader_get_uint16_be (&reader, &start_trim))
+        goto error;
+    }
+
+    if (end_trim_flag) {
+      if (!gst_byte_reader_get_uint16_be (&reader, &end_trim))
+        goto error;
+    }
+
+    if (control_extension_flag) {
+      if (!gst_byte_reader_get_uint8 (&reader, &b))
+        goto error;
+
+      if (!gst_byte_reader_skip (&reader, b))
+        goto error;
+    }
+
+    packet_size = au_size;
+
+    /* FIXME: this should be
+     *   packet_size = au_size - gst_byte_reader_get_pos (&reader);
+     * but ffmpeg and the only available sample stream from obe.tv
+     * are not including the control header size in au_size
+     */
+    if (gst_byte_reader_get_remaining (&reader) < packet_size)
+      goto error;
+    if (!gst_byte_reader_dup_data (&reader, packet_size, &packet_data))
+      goto error;
+
+    buffer = gst_buffer_new_wrapped (packet_data, packet_size);
+
+    if (start_trim != 0 || end_trim != 0) {
+      gst_buffer_add_audio_clipping_meta (buffer, GST_FORMAT_DEFAULT,
+          start_trim, end_trim);
+    }
+
+    gst_buffer_list_add (buffer_list, buffer);
+  } while (gst_byte_reader_get_remaining (&reader) > 0);
+
+  g_free (stream->data);
+  stream->data = NULL;
+  stream->current_size = 0;
+
+  return buffer_list;
+
+error:
+  {
+    GST_ERROR ("Failed to parse Opus access unit");
+    g_free (stream->data);
+    stream->data = NULL;
+    stream->current_size = 0;
+    gst_buffer_list_unref (buffer_list);
+    return NULL;
+  }
+}
+
 static GstFlowReturn
 gst_ts_demux_push_pending_data (GstTSDemux * demux, TSDemuxStream * stream)
 {
   GstFlowReturn res = GST_FLOW_OK;
-#ifndef GST_DISABLE_GST_DEBUG
   MpegTSBaseStream *bs = (MpegTSBaseStream *) stream;
-#endif
   GstBuffer *buffer = NULL;
+  GstBufferList *buffer_list = NULL;
 
   GST_DEBUG_OBJECT (stream->pad,
       "stream:%p, pid:0x%04x stream_type:%d state:%d", stream, bs->pid,
@@ -2174,7 +2499,24 @@
       GST_DEBUG_OBJECT (stream->pad,
           "Got Keyframe, ready to go at %" GST_TIME_FORMAT,
           GST_TIME_ARGS (stream->pts));
-      buffer = gst_buffer_new_wrapped (stream->data, stream->current_size);
+
+      if (bs->stream_type == GST_MPEGTS_STREAM_TYPE_PRIVATE_PES_PACKETS &&
+          bs->registration_id == DRF_ID_OPUS) {
+        buffer_list = parse_opus_access_unit (stream);
+        if (!buffer_list) {
+          res = GST_FLOW_ERROR;
+          goto beach;
+        }
+
+        if (gst_buffer_list_length (buffer_list) == 1) {
+          buffer = gst_buffer_ref (gst_buffer_list_get (buffer_list, 0));
+          gst_buffer_list_unref (buffer_list);
+          buffer_list = NULL;
+        }
+      } else {
+        buffer = gst_buffer_new_wrapped (stream->data, stream->current_size);
+      }
+
       stream->seeked_pts = stream->pts;
       stream->seeked_dts = stream->dts;
       stream->needs_keyframe = FALSE;
@@ -2192,15 +2534,45 @@
       goto beach;
     }
   } else {
-    buffer = gst_buffer_new_wrapped (stream->data, stream->current_size);
+    if (bs->stream_type == GST_MPEGTS_STREAM_TYPE_PRIVATE_PES_PACKETS &&
+        bs->registration_id == DRF_ID_OPUS) {
+      buffer_list = parse_opus_access_unit (stream);
+      if (!buffer_list) {
+        res = GST_FLOW_ERROR;
+        goto beach;
+      }
+
+      if (gst_buffer_list_length (buffer_list) == 1) {
+        buffer = gst_buffer_ref (gst_buffer_list_get (buffer_list, 0));
+        gst_buffer_list_unref (buffer_list);
+        buffer_list = NULL;
+      }
+    } else {
+      buffer = gst_buffer_new_wrapped (stream->data, stream->current_size);
+    }
 
     if (G_UNLIKELY (stream->pending_ts && !check_pending_buffers (demux))) {
-      PendingBuffer *pend;
-      pend = g_slice_new0 (PendingBuffer);
-      pend->buffer = buffer;
-      pend->pts = stream->raw_pts;
-      pend->dts = stream->raw_dts;
-      stream->pending = g_list_append (stream->pending, pend);
+      if (buffer) {
+        PendingBuffer *pend;
+        pend = g_slice_new0 (PendingBuffer);
+        pend->buffer = buffer;
+        pend->pts = stream->raw_pts;
+        pend->dts = stream->raw_dts;
+        stream->pending = g_list_append (stream->pending, pend);
+      } else {
+        guint i, n;
+
+        n = gst_buffer_list_length (buffer_list);
+        for (i = 0; i < n; i++) {
+          PendingBuffer *pend;
+          pend = g_slice_new0 (PendingBuffer);
+          pend->buffer = gst_buffer_ref (gst_buffer_list_get (buffer_list, i));
+          pend->pts = i == 0 ? stream->raw_pts : -1;
+          pend->dts = i == 0 ? stream->raw_dts : -1;
+          stream->pending = g_list_append (stream->pending, pend);
+        }
+        gst_buffer_list_unref (buffer_list);
+      }
       GST_DEBUG ("Not enough information to push buffers yet, storing buffer");
       goto beach;
     }
@@ -2242,34 +2614,52 @@
         "(seeked PTS: %" GST_TIME_FORMAT " DTS: %" GST_TIME_FORMAT ")",
         GST_TIME_ARGS (stream->pts), GST_TIME_ARGS (stream->dts),
         GST_TIME_ARGS (stream->seeked_pts), GST_TIME_ARGS (stream->seeked_dts));
-    gst_buffer_unref (buffer);
+    if (buffer)
+      gst_buffer_unref (buffer);
+    if (buffer_list)
+      gst_buffer_list_unref (buffer_list);
     goto beach;
   }
 
   GST_DEBUG_OBJECT (stream->pad, "stream->pts %" GST_TIME_FORMAT,
       GST_TIME_ARGS (stream->pts));
+
+  /* Decorate buffer or first buffer of the buffer list */
+  if (buffer_list)
+    buffer = gst_buffer_list_get (buffer_list, 0);
+
   if (GST_CLOCK_TIME_IS_VALID (stream->pts))
     GST_BUFFER_PTS (buffer) = stream->pts;
   if (GST_CLOCK_TIME_IS_VALID (stream->dts))
     GST_BUFFER_DTS (buffer) = stream->dts;
 
-  GST_DEBUG_OBJECT (stream->pad,
-      "Pushing buffer with PTS: %" GST_TIME_FORMAT " , DTS: %" GST_TIME_FORMAT,
-      GST_TIME_ARGS (GST_BUFFER_PTS (buffer)),
-      GST_TIME_ARGS (GST_BUFFER_DTS (buffer)));
-
   if (stream->discont)
     GST_BUFFER_FLAG_SET (buffer, GST_BUFFER_FLAG_DISCONT);
   stream->discont = FALSE;
 
-  if (GST_CLOCK_TIME_IS_VALID (GST_BUFFER_DTS (buffer)))
-    demux->segment.position = GST_BUFFER_DTS (buffer);
-  else if (GST_CLOCK_TIME_IS_VALID (GST_BUFFER_PTS (buffer)))
-    demux->segment.position = GST_BUFFER_PTS (buffer);
+  if (buffer_list)
+    buffer = NULL;
 
-  res = gst_pad_push (stream->pad, buffer);
-  /* Record that a buffer was pushed */
-  stream->nb_out_buffers += 1;
+  GST_DEBUG_OBJECT (stream->pad,
+      "Pushing buffer%s with PTS: %" GST_TIME_FORMAT " , DTS: %"
+      GST_TIME_FORMAT, (buffer_list ? "list" : ""), GST_TIME_ARGS (stream->pts),
+      GST_TIME_ARGS (stream->dts));
+
+  if (GST_CLOCK_TIME_IS_VALID (stream->dts))
+    demux->segment.position = stream->dts;
+  else if (GST_CLOCK_TIME_IS_VALID (stream->pts))
+    demux->segment.position = stream->pts;
+
+  if (buffer) {
+    res = gst_pad_push (stream->pad, buffer);
+    /* Record that a buffer was pushed */
+    stream->nb_out_buffers += 1;
+  } else {
+    guint n = gst_buffer_list_length (buffer_list);
+    res = gst_pad_push_list (stream->pad, buffer_list);
+    /* Record that a buffer was pushed */
+    stream->nb_out_buffers += n;
+  }
   GST_DEBUG_OBJECT (stream->pad, "Returned %s", gst_flow_get_name (res));
   res = gst_flow_combiner_update_flow (demux->flowcombiner, res);
   GST_DEBUG_OBJECT (stream->pad, "combined %s", gst_flow_get_name (res));
diff --git a/gst/mpegtsdemux/tsdemux.h b/gst/mpegtsdemux/tsdemux.h
index b689412..b416733 100644
--- a/gst/mpegtsdemux/tsdemux.h
+++ b/gst/mpegtsdemux/tsdemux.h
@@ -65,6 +65,8 @@
 
   /*< private >*/
   MpegTSBaseProgram *program;	/* Current program */
+  MpegTSBaseProgram *previous_program; /* Previous program, to deactivate once
+					* the new program becomes active */
 
   /* segments to be sent */
   GstSegment segment;
diff --git a/gst/mpegtsmux/Makefile.am b/gst/mpegtsmux/Makefile.am
index 8e3cdba..0fa78d7 100644
--- a/gst/mpegtsmux/Makefile.am
+++ b/gst/mpegtsmux/Makefile.am
@@ -5,17 +5,21 @@
 libgstmpegtsmux_la_SOURCES = \
 	mpegtsmux.c \
 	mpegtsmux_aac.c \
-	mpegtsmux_ttxt.c
+	mpegtsmux_ttxt.c \
+	mpegtsmux_opus.c
 
 libgstmpegtsmux_la_CFLAGS = $(GST_PLUGINS_BAD_CFLAGS) $(GST_PLUGINS_BASE_CFLAGS) \
 			    $(GST_BASE_CFLAGS) $(GST_CFLAGS)
 libgstmpegtsmux_la_LIBADD = $(top_builddir)/gst/mpegtsmux/tsmux/libtsmux.la \
-	-lgsttag-@GST_API_VERSION@ \
-	$(GST_PLUGINS_BASE_LIBS) -lgstvideo-@GST_API_VERSION@ $(GST_BASE_LIBS) $(GST_LIBS)
+	$(GST_PLUGINS_BASE_LIBS) -lgstvideo-@GST_API_VERSION@ \
+	-lgstaudio-@GST_API_VERSION@ -lgsttag-@GST_API_VERSION@ \
+	-lgstpbutils-@GST_API_VERSION@ \
+	$(GST_BASE_LIBS) $(GST_LIBS)
 libgstmpegtsmux_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS)
 libgstmpegtsmux_la_LIBTOOLFLAGS = $(GST_PLUGIN_LIBTOOLFLAGS)
 
 noinst_HEADERS = \
 	mpegtsmux.h \
 	mpegtsmux_aac.h \
-	mpegtsmux_ttxt.h
+	mpegtsmux_ttxt.h \
+	mpegtsmux_opus.h
diff --git a/gst/mpegtsmux/Makefile.in b/gst/mpegtsmux/Makefile.in
index 47f5ddc..84fe942 100644
--- a/gst/mpegtsmux/Makefile.in
+++ b/gst/mpegtsmux/Makefile.in
@@ -116,16 +116,15 @@
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
 	$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
-	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gsettings.m4 \
-	$(top_srcdir)/m4/gst-fionread.m4 $(top_srcdir)/m4/gst-sdl.m4 \
-	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
-	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
-	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libgcrypt.m4 \
-	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
-	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
-	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
-	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
-	$(top_srcdir)/configure.ac
+	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gst-fionread.m4 \
+	$(top_srcdir)/m4/gst-sdl.m4 $(top_srcdir)/m4/iconv.m4 \
+	$(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \
+	$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
+	$(top_srcdir)/m4/libgcrypt.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
+	$(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \
@@ -170,7 +169,8 @@
 	$(am__DEPENDENCIES_1)
 am_libgstmpegtsmux_la_OBJECTS = libgstmpegtsmux_la-mpegtsmux.lo \
 	libgstmpegtsmux_la-mpegtsmux_aac.lo \
-	libgstmpegtsmux_la-mpegtsmux_ttxt.lo
+	libgstmpegtsmux_la-mpegtsmux_ttxt.lo \
+	libgstmpegtsmux_la-mpegtsmux_opus.lo
 libgstmpegtsmux_la_OBJECTS = $(am_libgstmpegtsmux_la_OBJECTS)
 AM_V_lt = $(am__v_lt_@AM_V@)
 am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
@@ -320,6 +320,8 @@
 CLUTTER_X11_LIBS = @CLUTTER_X11_LIBS@
 CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
+CUDA_CFLAGS = @CUDA_CFLAGS@
+CUDA_LIBS = @CUDA_LIBS@
 CURL_CFLAGS = @CURL_CFLAGS@
 CURL_LIBS = @CURL_LIBS@
 CXX = @CXX@
@@ -357,6 +359,8 @@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
+EGL_CFLAGS = @EGL_CFLAGS@
+EGL_LIBS = @EGL_LIBS@
 EGREP = @EGREP@
 ERROR_CFLAGS = @ERROR_CFLAGS@
 ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
@@ -365,7 +369,6 @@
 EXIF_CFLAGS = @EXIF_CFLAGS@
 EXIF_LIBS = @EXIF_LIBS@
 FAAC_LIBS = @FAAC_LIBS@
-FAAD_IS_NEAAC = @FAAD_IS_NEAAC@
 FAAD_LIBS = @FAAD_LIBS@
 FFLAGS = @FFLAGS@
 FGREP = @FGREP@
@@ -384,8 +387,9 @@
 GIO_LIBS = @GIO_LIBS@
 GIO_UNIX_CFLAGS = @GIO_UNIX_CFLAGS@
 GIO_UNIX_LIBS = @GIO_UNIX_LIBS@
+GLES2_CFLAGS = @GLES2_CFLAGS@
+GLES2_LIBS = @GLES2_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
-GLIB_COMPILE_SCHEMAS = @GLIB_COMPILE_SCHEMAS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
@@ -402,16 +406,17 @@
 GMODULE_NO_EXPORT_LIBS = @GMODULE_NO_EXPORT_LIBS@
 GMSGFMT = @GMSGFMT@
 GMSGFMT_015 = @GMSGFMT_015@
+GNUSTL_CFLAGS = @GNUSTL_CFLAGS@
+GNUSTL_LIBS = @GNUSTL_LIBS@
 GRAPHENE_CFLAGS = @GRAPHENE_CFLAGS@
 GRAPHENE_LIBS = @GRAPHENE_LIBS@
 GREP = @GREP@
-GSETTINGS_CFLAGS = @GSETTINGS_CFLAGS@
-GSETTINGS_DISABLE_SCHEMAS_COMPILE = @GSETTINGS_DISABLE_SCHEMAS_COMPILE@
-GSETTINGS_LIBS = @GSETTINGS_LIBS@
 GSM_LIBS = @GSM_LIBS@
 GSTPB_PLUGINS_DIR = @GSTPB_PLUGINS_DIR@
 GSTPB_PREFIX = @GSTPB_PREFIX@
 GST_AGE = @GST_AGE@
+GST_ALLOCATORS_CFLAGS = @GST_ALLOCATORS_CFLAGS@
+GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
 GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
 GST_API_VERSION = @GST_API_VERSION@
 GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
@@ -437,6 +442,8 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PBUTILS_CFLAGS = @GST_PBUTILS_CFLAGS@
+GST_PBUTILS_LIBS = @GST_PBUTILS_LIBS@
 GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BAD_CFLAGS = @GST_PLUGINS_BAD_CFLAGS@
@@ -462,6 +469,8 @@
 GST_PREFIX = @GST_PREFIX@
 GST_REVISION = @GST_REVISION@
 GST_TOOLS_DIR = @GST_TOOLS_DIR@
+GST_VIDEO_CFLAGS = @GST_VIDEO_CFLAGS@
+GST_VIDEO_LIBS = @GST_VIDEO_LIBS@
 GTK3_CFLAGS = @GTK3_CFLAGS@
 GTK3_GL_CFLAGS = @GTK3_GL_CFLAGS@
 GTK3_GL_LIBS = @GTK3_GL_LIBS@
@@ -563,6 +572,7 @@
 LTLIBICONV = @LTLIBICONV@
 LTLIBINTL = @LTLIBINTL@
 LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
 MANIFEST_TOOL = @MANIFEST_TOOL@
@@ -576,8 +586,6 @@
 MODPLUG_LIBS = @MODPLUG_LIBS@
 MPEG2ENC_CFLAGS = @MPEG2ENC_CFLAGS@
 MPEG2ENC_LIBS = @MPEG2ENC_LIBS@
-MPG123_CFLAGS = @MPG123_CFLAGS@
-MPG123_LIBS = @MPG123_LIBS@
 MPLEX_CFLAGS = @MPLEX_CFLAGS@
 MPLEX_LDFLAGS = @MPLEX_LDFLAGS@
 MPLEX_LIBS = @MPLEX_LIBS@
@@ -593,6 +601,8 @@
 NETTLE_LIBS = @NETTLE_LIBS@
 NM = @NM@
 NMEDIT = @NMEDIT@
+NVENCODE_CFLAGS = @NVENCODE_CFLAGS@
+NVENCODE_LIBS = @NVENCODE_LIBS@
 OBJC = @OBJC@
 OBJCDEPMODE = @OBJCDEPMODE@
 OBJCFLAGS = @OBJCFLAGS@
@@ -650,16 +660,18 @@
 PYTHON_PLATFORM = @PYTHON_PLATFORM@
 PYTHON_PREFIX = @PYTHON_PREFIX@
 PYTHON_VERSION = @PYTHON_VERSION@
+QT_ANDROID_CFLAGS = @QT_ANDROID_CFLAGS@
+QT_ANDROID_LIBS = @QT_ANDROID_LIBS@
 QT_CFLAGS = @QT_CFLAGS@
 QT_LIBS = @QT_LIBS@
+QT_MAC_CFLAGS = @QT_MAC_CFLAGS@
+QT_MAC_LIBS = @QT_MAC_LIBS@
 QT_WAYLAND_CFLAGS = @QT_WAYLAND_CFLAGS@
 QT_WAYLAND_LIBS = @QT_WAYLAND_LIBS@
 QT_X11_CFLAGS = @QT_X11_CFLAGS@
 QT_X11_LIBS = @QT_X11_LIBS@
 RANLIB = @RANLIB@
 RCC = @RCC@
-RSVG_2_36_2_CFLAGS = @RSVG_2_36_2_CFLAGS@
-RSVG_2_36_2_LIBS = @RSVG_2_36_2_LIBS@
 RSVG_CFLAGS = @RSVG_CFLAGS@
 RSVG_LIBS = @RSVG_LIBS@
 RTMP_CFLAGS = @RTMP_CFLAGS@
@@ -711,6 +723,7 @@
 VOAACENC_LIBS = @VOAACENC_LIBS@
 VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
 VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VULKAN_LIBS = @VULKAN_LIBS@
 WARNING_CFLAGS = @WARNING_CFLAGS@
 WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
 WARNING_OBJCFLAGS = @WARNING_OBJCFLAGS@
@@ -721,6 +734,7 @@
 WAYLAND_LIBS = @WAYLAND_LIBS@
 WEBP_CFLAGS = @WEBP_CFLAGS@
 WEBP_LIBS = @WEBP_LIBS@
+WGET = @WGET@
 WILDMIDI_CFLAGS = @WILDMIDI_CFLAGS@
 WILDMIDI_LIBS = @WILDMIDI_LIBS@
 WINKS_LIBS = @WINKS_LIBS@
@@ -730,6 +744,8 @@
 X11_LIBS = @X11_LIBS@
 X265_CFLAGS = @X265_CFLAGS@
 X265_LIBS = @X265_LIBS@
+XCB_CFLAGS = @XCB_CFLAGS@
+XCB_LIBS = @XCB_LIBS@
 XCOMPOSITE_CFLAGS = @XCOMPOSITE_CFLAGS@
 XCOMPOSITE_LIBS = @XCOMPOSITE_LIBS@
 XGETTEXT = @XGETTEXT@
@@ -767,7 +783,6 @@
 docdir = @docdir@
 dvidir = @dvidir@
 exec_prefix = @exec_prefix@
-gsettingsschemadir = @gsettingsschemadir@
 host = @host@
 host_alias = @host_alias@
 host_cpu = @host_cpu@
@@ -812,21 +827,25 @@
 libgstmpegtsmux_la_SOURCES = \
 	mpegtsmux.c \
 	mpegtsmux_aac.c \
-	mpegtsmux_ttxt.c
+	mpegtsmux_ttxt.c \
+	mpegtsmux_opus.c
 
 libgstmpegtsmux_la_CFLAGS = $(GST_PLUGINS_BAD_CFLAGS) $(GST_PLUGINS_BASE_CFLAGS) \
 			    $(GST_BASE_CFLAGS) $(GST_CFLAGS)
 
 libgstmpegtsmux_la_LIBADD = $(top_builddir)/gst/mpegtsmux/tsmux/libtsmux.la \
-	-lgsttag-@GST_API_VERSION@ \
-	$(GST_PLUGINS_BASE_LIBS) -lgstvideo-@GST_API_VERSION@ $(GST_BASE_LIBS) $(GST_LIBS)
+	$(GST_PLUGINS_BASE_LIBS) -lgstvideo-@GST_API_VERSION@ \
+	-lgstaudio-@GST_API_VERSION@ -lgsttag-@GST_API_VERSION@ \
+	-lgstpbutils-@GST_API_VERSION@ \
+	$(GST_BASE_LIBS) $(GST_LIBS)
 
 libgstmpegtsmux_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS)
 libgstmpegtsmux_la_LIBTOOLFLAGS = $(GST_PLUGIN_LIBTOOLFLAGS)
 noinst_HEADERS = \
 	mpegtsmux.h \
 	mpegtsmux_aac.h \
-	mpegtsmux_ttxt.h
+	mpegtsmux_ttxt.h \
+	mpegtsmux_opus.h
 
 all: all-recursive
 
@@ -908,6 +927,7 @@
 
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstmpegtsmux_la-mpegtsmux.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstmpegtsmux_la-mpegtsmux_aac.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstmpegtsmux_la-mpegtsmux_opus.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstmpegtsmux_la-mpegtsmux_ttxt.Plo@am__quote@
 
 .c.o:
@@ -955,6 +975,13 @@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstmpegtsmux_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstmpegtsmux_la_CFLAGS) $(CFLAGS) -c -o libgstmpegtsmux_la-mpegtsmux_ttxt.lo `test -f 'mpegtsmux_ttxt.c' || echo '$(srcdir)/'`mpegtsmux_ttxt.c
 
+libgstmpegtsmux_la-mpegtsmux_opus.lo: mpegtsmux_opus.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstmpegtsmux_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstmpegtsmux_la_CFLAGS) $(CFLAGS) -MT libgstmpegtsmux_la-mpegtsmux_opus.lo -MD -MP -MF $(DEPDIR)/libgstmpegtsmux_la-mpegtsmux_opus.Tpo -c -o libgstmpegtsmux_la-mpegtsmux_opus.lo `test -f 'mpegtsmux_opus.c' || echo '$(srcdir)/'`mpegtsmux_opus.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstmpegtsmux_la-mpegtsmux_opus.Tpo $(DEPDIR)/libgstmpegtsmux_la-mpegtsmux_opus.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='mpegtsmux_opus.c' object='libgstmpegtsmux_la-mpegtsmux_opus.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstmpegtsmux_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstmpegtsmux_la_CFLAGS) $(CFLAGS) -c -o libgstmpegtsmux_la-mpegtsmux_opus.lo `test -f 'mpegtsmux_opus.c' || echo '$(srcdir)/'`mpegtsmux_opus.c
+
 mostlyclean-libtool:
 	-rm -f *.lo
 
diff --git a/gst/mpegtsmux/mpegtsmux.c b/gst/mpegtsmux/mpegtsmux.c
index ce00333..cd07338 100644
--- a/gst/mpegtsmux/mpegtsmux.c
+++ b/gst/mpegtsmux/mpegtsmux.c
@@ -91,11 +91,13 @@
 #include <gst/tag/tag.h>
 #include <gst/video/video.h>
 #include <gst/mpegts/mpegts.h>
+#include <gst/pbutils/pbutils.h>
 
 #include "mpegtsmux.h"
 
 #include "mpegtsmux_aac.h"
 #include "mpegtsmux_ttxt.h"
+#include "mpegtsmux_opus.h"
 
 GST_DEBUG_CATEGORY (mpegtsmux_debug);
 #define GST_CAT_DEFAULT mpegtsmux_debug
@@ -125,6 +127,8 @@
         "video/x-dirac;"
         "video/x-h264,stream-format=(string)byte-stream,"
         "alignment=(string){au, nal}; "
+        "video/x-h265,stream-format=(string)byte-stream,"
+        "alignment=(string){au, nal}; "
         "audio/mpeg, "
         "parsed = (boolean) TRUE, "
         "mpegversion = (int) { 1, 2 };"
@@ -142,6 +146,9 @@
         "mute = (boolean) { FALSE, TRUE }; "
         "audio/x-ac3, framed = (boolean) TRUE;"
         "audio/x-dts, framed = (boolean) TRUE;"
+        "audio/x-opus, "
+        "channels = (int) [1, 8], "
+        "channel-mapping-family = (int) {0, 1};"
         "subpicture/x-dvb; application/x-teletext; meta/x-klv, parsed=true"));
 
 static GstStaticPadTemplate mpegtsmux_src_factory =
@@ -580,6 +587,7 @@
   const gchar *mt;
   const GValue *value = NULL;
   GstBuffer *codec_data = NULL;
+  guint8 opus_channel_config_code = 0;
 
   pad = ts_data->collect.pad;
   caps = gst_pad_get_current_caps (pad);
@@ -606,6 +614,8 @@
     st = TSMUX_ST_PS_AUDIO_LPCM;
   } else if (strcmp (mt, "video/x-h264") == 0) {
     st = TSMUX_ST_VIDEO_H264;
+  } else if (strcmp (mt, "video/x-h265") == 0) {
+    st = TSMUX_ST_VIDEO_HEVC;
   } else if (strcmp (mt, "audio/mpeg") == 0) {
     gint mpegversion;
 
@@ -667,6 +677,66 @@
     st = TSMUX_ST_PS_TELETEXT;
     /* needs a particularly sized layout */
     ts_data->prepare_func = mpegtsmux_prepare_teletext;
+  } else if (strcmp (mt, "audio/x-opus") == 0) {
+    guint8 channels, mapping_family, stream_count, coupled_count;
+    guint8 channel_mapping[256];
+
+    if (!gst_codec_utils_opus_parse_caps (caps, NULL, &channels,
+            &mapping_family, &stream_count, &coupled_count, channel_mapping)) {
+      GST_ERROR_OBJECT (pad, "Incomplete Opus caps");
+      goto not_negotiated;
+    }
+
+    if (channels <= 2 && mapping_family == 0) {
+      opus_channel_config_code = channels;
+    } else if (channels == 2 && mapping_family == 255 && stream_count == 1
+        && coupled_count == 1) {
+      /* Dual mono */
+      opus_channel_config_code = 0;
+    } else if (channels >= 2 && channels <= 8 && mapping_family == 1) {
+      static const guint8 coupled_stream_counts[9] = {
+        1, 0, 1, 1, 2, 2, 2, 3, 3
+      };
+      static const guint8 channel_map_a[8][8] = {
+        {0},
+        {0, 1},
+        {0, 2, 1},
+        {0, 1, 2, 3},
+        {0, 4, 1, 2, 3},
+        {0, 4, 1, 2, 3, 5},
+        {0, 4, 1, 2, 3, 5, 6},
+        {0, 6, 1, 2, 3, 4, 5, 7},
+      };
+      static const guint8 channel_map_b[8][8] = {
+        {0},
+        {0, 1},
+        {0, 1, 2},
+        {0, 1, 2, 3},
+        {0, 1, 2, 3, 4},
+        {0, 1, 2, 3, 4, 5},
+        {0, 1, 2, 3, 4, 5, 6},
+        {0, 1, 2, 3, 4, 5, 6, 7},
+      };
+
+      /* Vorbis mapping */
+      if (stream_count == channels - coupled_stream_counts[channels] &&
+          coupled_count == coupled_stream_counts[channels] &&
+          memcmp (channel_mapping, channel_map_a[channels - 1],
+              channels) == 0) {
+        opus_channel_config_code = channels;
+      } else if (stream_count == channels - coupled_stream_counts[channels] &&
+          coupled_count == coupled_stream_counts[channels] &&
+          memcmp (channel_mapping, channel_map_b[channels - 1],
+              channels) == 0) {
+        opus_channel_config_code = channels | 0x80;
+      } else {
+        GST_FIXME_OBJECT (pad, "Opus channel mapping not handled");
+        goto not_negotiated;
+      }
+    }
+
+    st = TSMUX_ST_PS_OPUS;
+    ts_data->prepare_func = mpegtsmux_prepare_opus;
   } else if (strcmp (mt, "meta/x-klv") == 0) {
     st = TSMUX_ST_PS_KLV;
   }
@@ -683,6 +753,8 @@
     gst_structure_get_int (s, "channels", &ts_data->stream->audio_channels);
     gst_structure_get_int (s, "bitrate", &ts_data->stream->audio_bitrate);
 
+    ts_data->stream->opus_channel_config_code = opus_channel_config_code;
+
     tsmux_stream_set_buffer_release_func (ts_data->stream, release_buffer_cb);
     tsmux_program_add_stream (ts_data->prog, ts_data->stream);
 
@@ -1097,15 +1169,6 @@
     pad_data->dts = GST_CLOCK_STIME_NONE;
   }
 
-  buf = *outbuf;
-  if (pad_data->prepare_func) {
-    MpegTsMux *mux = (MpegTsMux *) user_data;
-
-    *outbuf = pad_data->prepare_func (buf, pad_data, mux);
-    g_assert (*outbuf);
-    gst_buffer_unref (buf);
-  }
-
 beach:
   return GST_FLOW_OK;
 }
@@ -1126,8 +1189,11 @@
 
   if (G_UNLIKELY (mux->first)) {
     ret = mpegtsmux_create_streams (mux);
-    if (G_UNLIKELY (ret != GST_FLOW_OK))
+    if (G_UNLIKELY (ret != GST_FLOW_OK)) {
+      if (buf)
+        gst_buffer_unref (buf);
       return ret;
+    }
 
     mpegtsmux_prepare_srcpad (mux);
 
@@ -1142,6 +1208,9 @@
     mpegtsmux_push_packets (mux, TRUE);
     gst_pad_push_event (mux->srcpad, gst_event_new_eos ());
 
+    if (buf)
+      gst_buffer_unref (buf);
+
     return GST_FLOW_OK;
   }
 
@@ -1151,6 +1220,15 @@
 
   g_assert (buf != NULL);
 
+  if (best->prepare_func) {
+    GstBuffer *tmp;
+
+    tmp = best->prepare_func (buf, best, mux);
+    g_assert (tmp);
+    gst_buffer_unref (buf);
+    buf = tmp;
+  }
+
   if (mux->force_key_unit_event != NULL && best->stream->is_video_stream) {
     GstEvent *event;
 
@@ -1207,9 +1285,8 @@
 
   if (GST_CLOCK_STIME_IS_VALID (best->dts)) {
     dts = GSTTIME_TO_MPEGTIME (best->dts);
-    GST_DEBUG_OBJECT (mux, "Buffer has DTS %s%" GST_TIME_FORMAT " dts %"
-        G_GINT64_FORMAT, best->dts >= 0 ? " " : "-",
-        GST_TIME_ARGS (ABS (best->dts)), dts);
+    GST_DEBUG_OBJECT (mux, "Buffer has DTS %" GST_STIME_FORMAT " dts %"
+        G_GINT64_FORMAT, GST_STIME_ARGS (best->dts), dts);
   }
 
   /* should not have a DTS without PTS */
@@ -1235,6 +1312,8 @@
 
   if (best->stream->is_meta && gst_buffer_get_size (buf) > (G_MAXUINT16 - 3)) {
     GST_WARNING_OBJECT (mux, "KLV meta unit too big, splitting not supported");
+
+    gst_buffer_unref (buf);
     return GST_FLOW_OK;
   }
 
@@ -1274,6 +1353,8 @@
   }
 no_program:
   {
+    if (buf)
+      gst_buffer_unref (buf);
     GST_ELEMENT_ERROR (mux, STREAM, MUX,
         ("Stream on pad %" GST_PTR_FORMAT
             " is not associated with any program", COLLECT_DATA_PAD (best)),
diff --git a/gst/mpegtsmux/mpegtsmux_opus.c b/gst/mpegtsmux/mpegtsmux_opus.c
new file mode 100644
index 0000000..26176b2
--- /dev/null
+++ b/gst/mpegtsmux/mpegtsmux_opus.c
@@ -0,0 +1,149 @@
+/* 
+ * Copyright 2006, 2007, 2008 Fluendo S.A. 
+ *  Authors: Jan Schmidt <jan@fluendo.com>
+ *           Kapil Agrawal <kapil@fluendo.com>
+ *           Julien Moutte <julien@fluendo.com>
+ *
+ * This library is licensed under 4 different licenses and you
+ * can choose to use it under the terms of any one of them. The
+ * four licenses are the MPL 1.1, the LGPL, the GPL and the MIT
+ * license.
+ *
+ * MPL:
+ * 
+ * The contents of this file are subject to the Mozilla Public License
+ * Version 1.1 (the "License"); you may not use this file except in
+ * compliance with the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/.
+ *
+ * Software distributed under the License is distributed on an "AS IS"
+ * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
+ * License for the specific language governing rights and limitations
+ * under the License.
+ *
+ * LGPL:
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ *
+ * GPL:
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * MIT:
+ *
+ * Unless otherwise indicated, Source Code is licensed under MIT license.
+ * See further explanation attached in License Statement (distributed in the file
+ * LICENSE).
+ * 
+ * Permission is hereby granted, free of charge, to any person obtaining a copy of
+ * this software and associated documentation files (the "Software"), to deal in
+ * the Software without restriction, including without limitation the rights to
+ * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
+ * of the Software, and to permit persons to whom the Software is furnished to do
+ * so, subject to the following conditions:
+ * 
+ * The above copyright notice and this permission notice shall be included in all
+ * copies or substantial portions of the Software.
+ * 
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ *
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include "mpegtsmux_opus.h"
+#include <string.h>
+#include <gst/audio/audio.h>
+
+#define GST_CAT_DEFAULT mpegtsmux_debug
+
+GstBuffer *
+mpegtsmux_prepare_opus (GstBuffer * buf, MpegTsPadData * pad_data,
+    MpegTsMux * mux)
+{
+  gssize insize = gst_buffer_get_size (buf);
+  gsize outsize;
+  GstBuffer *outbuf;
+  GstMapInfo map;
+  guint n;
+  GstAudioClippingMeta *cmeta = gst_buffer_get_audio_clipping_meta (buf);
+
+  g_assert (!cmeta || cmeta->format == GST_FORMAT_DEFAULT);
+
+  outsize = 2 + insize / 255 + 1;
+  if (cmeta && cmeta->start)
+    outsize += 2;
+  if (cmeta && cmeta->end)
+    outsize += 2;
+
+  outbuf = gst_buffer_new_and_alloc (outsize);
+  gst_buffer_copy_into (outbuf, buf,
+      GST_BUFFER_COPY_METADATA | GST_BUFFER_COPY_TIMESTAMPS, 0, 0);
+  gst_buffer_map (outbuf, &map, GST_MAP_WRITE);
+  map.data[0] = 0x7f;
+  map.data[1] = 0xe0;
+
+  if (cmeta && cmeta->start)
+    map.data[1] |= 0x10;
+  if (cmeta && cmeta->end)
+    map.data[1] |= 0x08;
+
+  n = 2;
+  do {
+    g_assert (n < outsize);
+    /* FIXME: this should be using insize for writing here but ffmpeg and the
+     * only available sample stream from obe.tv are not including the control
+     * header size in au_size
+     */
+    map.data[n] = MIN (insize, 255);
+    insize -= 255;
+    n++;
+  } while (insize >= 0);
+
+  if (cmeta && cmeta->start) {
+    GST_WRITE_UINT16_BE (&map.data[n], cmeta->start);
+    n += 2;
+  }
+
+  if (cmeta && cmeta->end)
+    GST_WRITE_UINT16_BE (&map.data[n], cmeta->end);
+
+  gst_buffer_unmap (outbuf, &map);
+
+  outbuf = gst_buffer_append (outbuf, gst_buffer_ref (buf));
+
+  return outbuf;
+}
diff --git a/gst/mpegtsmux/mpegtsmux_opus.h b/gst/mpegtsmux/mpegtsmux_opus.h
new file mode 100644
index 0000000..fdf25d8
--- /dev/null
+++ b/gst/mpegtsmux/mpegtsmux_opus.h
@@ -0,0 +1,91 @@
+/* 
+ * Copyright 2006, 2007, 2008 Fluendo S.A. 
+ *  Authors: Jan Schmidt <jan@fluendo.com>
+ *           Kapil Agrawal <kapil@fluendo.com>
+ *           Julien Moutte <julien@fluendo.com>
+ *
+ * This library is licensed under 4 different licenses and you
+ * can choose to use it under the terms of any one of them. The
+ * four licenses are the MPL 1.1, the LGPL, the GPL and the MIT
+ * license.
+ *
+ * MPL:
+ * 
+ * The contents of this file are subject to the Mozilla Public License
+ * Version 1.1 (the "License"); you may not use this file except in
+ * compliance with the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/.
+ *
+ * Software distributed under the License is distributed on an "AS IS"
+ * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
+ * License for the specific language governing rights and limitations
+ * under the License.
+ *
+ * LGPL:
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ *
+ * GPL:
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * MIT:
+ *
+ * Unless otherwise indicated, Source Code is licensed under MIT license.
+ * See further explanation attached in License Statement (distributed in the file
+ * LICENSE).
+ * 
+ * Permission is hereby granted, free of charge, to any person obtaining a copy of
+ * this software and associated documentation files (the "Software"), to deal in
+ * the Software without restriction, including without limitation the rights to
+ * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
+ * of the Software, and to permit persons to whom the Software is furnished to do
+ * so, subject to the following conditions:
+ * 
+ * The above copyright notice and this permission notice shall be included in all
+ * copies or substantial portions of the Software.
+ * 
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ *
+ */
+ 
+#ifndef __MPEGTSMUX_OPUS_H__
+#define __MPEGTSMUX_OPUS_H__
+ 
+#include "mpegtsmux.h"
+
+GstBuffer * mpegtsmux_prepare_opus (GstBuffer * buf, MpegTsPadData * data,
+    MpegTsMux * mux);
+ 
+#endif /* __MPEGTSMUX_OPUS_H__ */
diff --git a/gst/mpegtsmux/tsmux/Makefile.in b/gst/mpegtsmux/tsmux/Makefile.in
index ca34a8d..bb580d3 100644
--- a/gst/mpegtsmux/tsmux/Makefile.in
+++ b/gst/mpegtsmux/tsmux/Makefile.in
@@ -116,16 +116,15 @@
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
 	$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
-	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gsettings.m4 \
-	$(top_srcdir)/m4/gst-fionread.m4 $(top_srcdir)/m4/gst-sdl.m4 \
-	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
-	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
-	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libgcrypt.m4 \
-	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
-	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
-	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
-	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
-	$(top_srcdir)/configure.ac
+	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gst-fionread.m4 \
+	$(top_srcdir)/m4/gst-sdl.m4 $(top_srcdir)/m4/iconv.m4 \
+	$(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \
+	$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
+	$(top_srcdir)/m4/libgcrypt.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
+	$(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \
@@ -246,6 +245,8 @@
 CLUTTER_X11_LIBS = @CLUTTER_X11_LIBS@
 CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
+CUDA_CFLAGS = @CUDA_CFLAGS@
+CUDA_LIBS = @CUDA_LIBS@
 CURL_CFLAGS = @CURL_CFLAGS@
 CURL_LIBS = @CURL_LIBS@
 CXX = @CXX@
@@ -283,6 +284,8 @@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
+EGL_CFLAGS = @EGL_CFLAGS@
+EGL_LIBS = @EGL_LIBS@
 EGREP = @EGREP@
 ERROR_CFLAGS = @ERROR_CFLAGS@
 ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
@@ -291,7 +294,6 @@
 EXIF_CFLAGS = @EXIF_CFLAGS@
 EXIF_LIBS = @EXIF_LIBS@
 FAAC_LIBS = @FAAC_LIBS@
-FAAD_IS_NEAAC = @FAAD_IS_NEAAC@
 FAAD_LIBS = @FAAD_LIBS@
 FFLAGS = @FFLAGS@
 FGREP = @FGREP@
@@ -310,8 +312,9 @@
 GIO_LIBS = @GIO_LIBS@
 GIO_UNIX_CFLAGS = @GIO_UNIX_CFLAGS@
 GIO_UNIX_LIBS = @GIO_UNIX_LIBS@
+GLES2_CFLAGS = @GLES2_CFLAGS@
+GLES2_LIBS = @GLES2_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
-GLIB_COMPILE_SCHEMAS = @GLIB_COMPILE_SCHEMAS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
@@ -328,16 +331,17 @@
 GMODULE_NO_EXPORT_LIBS = @GMODULE_NO_EXPORT_LIBS@
 GMSGFMT = @GMSGFMT@
 GMSGFMT_015 = @GMSGFMT_015@
+GNUSTL_CFLAGS = @GNUSTL_CFLAGS@
+GNUSTL_LIBS = @GNUSTL_LIBS@
 GRAPHENE_CFLAGS = @GRAPHENE_CFLAGS@
 GRAPHENE_LIBS = @GRAPHENE_LIBS@
 GREP = @GREP@
-GSETTINGS_CFLAGS = @GSETTINGS_CFLAGS@
-GSETTINGS_DISABLE_SCHEMAS_COMPILE = @GSETTINGS_DISABLE_SCHEMAS_COMPILE@
-GSETTINGS_LIBS = @GSETTINGS_LIBS@
 GSM_LIBS = @GSM_LIBS@
 GSTPB_PLUGINS_DIR = @GSTPB_PLUGINS_DIR@
 GSTPB_PREFIX = @GSTPB_PREFIX@
 GST_AGE = @GST_AGE@
+GST_ALLOCATORS_CFLAGS = @GST_ALLOCATORS_CFLAGS@
+GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
 GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
 GST_API_VERSION = @GST_API_VERSION@
 GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
@@ -363,6 +367,8 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PBUTILS_CFLAGS = @GST_PBUTILS_CFLAGS@
+GST_PBUTILS_LIBS = @GST_PBUTILS_LIBS@
 GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BAD_CFLAGS = @GST_PLUGINS_BAD_CFLAGS@
@@ -388,6 +394,8 @@
 GST_PREFIX = @GST_PREFIX@
 GST_REVISION = @GST_REVISION@
 GST_TOOLS_DIR = @GST_TOOLS_DIR@
+GST_VIDEO_CFLAGS = @GST_VIDEO_CFLAGS@
+GST_VIDEO_LIBS = @GST_VIDEO_LIBS@
 GTK3_CFLAGS = @GTK3_CFLAGS@
 GTK3_GL_CFLAGS = @GTK3_GL_CFLAGS@
 GTK3_GL_LIBS = @GTK3_GL_LIBS@
@@ -489,6 +497,7 @@
 LTLIBICONV = @LTLIBICONV@
 LTLIBINTL = @LTLIBINTL@
 LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
 MANIFEST_TOOL = @MANIFEST_TOOL@
@@ -502,8 +511,6 @@
 MODPLUG_LIBS = @MODPLUG_LIBS@
 MPEG2ENC_CFLAGS = @MPEG2ENC_CFLAGS@
 MPEG2ENC_LIBS = @MPEG2ENC_LIBS@
-MPG123_CFLAGS = @MPG123_CFLAGS@
-MPG123_LIBS = @MPG123_LIBS@
 MPLEX_CFLAGS = @MPLEX_CFLAGS@
 MPLEX_LDFLAGS = @MPLEX_LDFLAGS@
 MPLEX_LIBS = @MPLEX_LIBS@
@@ -519,6 +526,8 @@
 NETTLE_LIBS = @NETTLE_LIBS@
 NM = @NM@
 NMEDIT = @NMEDIT@
+NVENCODE_CFLAGS = @NVENCODE_CFLAGS@
+NVENCODE_LIBS = @NVENCODE_LIBS@
 OBJC = @OBJC@
 OBJCDEPMODE = @OBJCDEPMODE@
 OBJCFLAGS = @OBJCFLAGS@
@@ -576,16 +585,18 @@
 PYTHON_PLATFORM = @PYTHON_PLATFORM@
 PYTHON_PREFIX = @PYTHON_PREFIX@
 PYTHON_VERSION = @PYTHON_VERSION@
+QT_ANDROID_CFLAGS = @QT_ANDROID_CFLAGS@
+QT_ANDROID_LIBS = @QT_ANDROID_LIBS@
 QT_CFLAGS = @QT_CFLAGS@
 QT_LIBS = @QT_LIBS@
+QT_MAC_CFLAGS = @QT_MAC_CFLAGS@
+QT_MAC_LIBS = @QT_MAC_LIBS@
 QT_WAYLAND_CFLAGS = @QT_WAYLAND_CFLAGS@
 QT_WAYLAND_LIBS = @QT_WAYLAND_LIBS@
 QT_X11_CFLAGS = @QT_X11_CFLAGS@
 QT_X11_LIBS = @QT_X11_LIBS@
 RANLIB = @RANLIB@
 RCC = @RCC@
-RSVG_2_36_2_CFLAGS = @RSVG_2_36_2_CFLAGS@
-RSVG_2_36_2_LIBS = @RSVG_2_36_2_LIBS@
 RSVG_CFLAGS = @RSVG_CFLAGS@
 RSVG_LIBS = @RSVG_LIBS@
 RTMP_CFLAGS = @RTMP_CFLAGS@
@@ -637,6 +648,7 @@
 VOAACENC_LIBS = @VOAACENC_LIBS@
 VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
 VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VULKAN_LIBS = @VULKAN_LIBS@
 WARNING_CFLAGS = @WARNING_CFLAGS@
 WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
 WARNING_OBJCFLAGS = @WARNING_OBJCFLAGS@
@@ -647,6 +659,7 @@
 WAYLAND_LIBS = @WAYLAND_LIBS@
 WEBP_CFLAGS = @WEBP_CFLAGS@
 WEBP_LIBS = @WEBP_LIBS@
+WGET = @WGET@
 WILDMIDI_CFLAGS = @WILDMIDI_CFLAGS@
 WILDMIDI_LIBS = @WILDMIDI_LIBS@
 WINKS_LIBS = @WINKS_LIBS@
@@ -656,6 +669,8 @@
 X11_LIBS = @X11_LIBS@
 X265_CFLAGS = @X265_CFLAGS@
 X265_LIBS = @X265_LIBS@
+XCB_CFLAGS = @XCB_CFLAGS@
+XCB_LIBS = @XCB_LIBS@
 XCOMPOSITE_CFLAGS = @XCOMPOSITE_CFLAGS@
 XCOMPOSITE_LIBS = @XCOMPOSITE_LIBS@
 XGETTEXT = @XGETTEXT@
@@ -693,7 +708,6 @@
 docdir = @docdir@
 dvidir = @dvidir@
 exec_prefix = @exec_prefix@
-gsettingsschemadir = @gsettingsschemadir@
 host = @host@
 host_alias = @host_alias@
 host_cpu = @host_cpu@
diff --git a/gst/mpegtsmux/tsmux/tsmux.c b/gst/mpegtsmux/tsmux/tsmux.c
index d68f501..638de15 100644
--- a/gst/mpegtsmux/tsmux/tsmux.c
+++ b/gst/mpegtsmux/tsmux/tsmux.c
@@ -934,8 +934,7 @@
   return TRUE;
 
 fail:
-  if (packet)
-    g_free (packet);
+  g_free (packet);
   if (section_buffer)
     gst_buffer_unref (section_buffer);
   return FALSE;
diff --git a/gst/mpegtsmux/tsmux/tsmuxstream.c b/gst/mpegtsmux/tsmux/tsmuxstream.c
index 1094c3e..6b7c17e 100644
--- a/gst/mpegtsmux/tsmux/tsmuxstream.c
+++ b/gst/mpegtsmux/tsmux/tsmuxstream.c
@@ -138,6 +138,7 @@
     case TSMUX_ST_VIDEO_MPEG2:
     case TSMUX_ST_VIDEO_MPEG4:
     case TSMUX_ST_VIDEO_H264:
+    case TSMUX_ST_VIDEO_HEVC:
       /* FIXME: Assign sequential IDs? */
       stream->id = 0xE0;
       stream->pi.flags |= TSMUX_PACKET_FLAG_PES_FULL_HEADER;
@@ -200,6 +201,13 @@
           TSMUX_PACKET_FLAG_PES_FULL_HEADER |
           TSMUX_PACKET_FLAG_PES_DATA_ALIGNMENT;
       break;
+    case TSMUX_ST_PS_OPUS:
+      /* FIXME: assign sequential extended IDs? */
+      stream->id = 0xBD;
+      stream->stream_type = TSMUX_ST_PRIVATE_DATA;
+      stream->is_opus = TRUE;
+      stream->pi.flags |= TSMUX_PACKET_FLAG_PES_FULL_HEADER;
+      break;
     default:
       g_critical ("Stream type 0x%0x not yet implemented", stream_type);
       break;
@@ -308,8 +316,10 @@
     /* FIXME: As a hack, for unbounded streams, start a new PES packet for each
      * incoming packet we receive. This assumes that incoming data is 
      * packetised sensibly - ie, every video frame */
-    if (stream->cur_pes_payload_size == 0)
+    if (stream->cur_pes_payload_size == 0) {
       stream->state = TSMUX_STREAM_STATE_HEADER;
+      stream->pes_bytes_written = 0;
+    }
   }
 }
 
@@ -401,11 +411,6 @@
     stream->cur_pes_payload_size = stream->pes_payload_size;
     tsmux_stream_find_pts_dts_within (stream, stream->cur_pes_payload_size,
         &stream->pts, &stream->dts);
-  } else if (stream->is_video_stream) {
-    /* Unbounded for video streams */
-    stream->cur_pes_payload_size = 0;
-    tsmux_stream_find_pts_dts_within (stream, stream->bytes_avail, &stream->pts,
-        &stream->dts);
   } else {
     /* Output a PES packet of all currently available bytes otherwise */
     stream->cur_pes_payload_size = stream->bytes_avail;
@@ -433,6 +438,16 @@
     }
   }
 
+  if (stream->is_video_stream) {
+    guint8 hdr_len;
+
+    hdr_len = tsmux_stream_pes_header_length (stream);
+
+    /* Unbounded for video streams if pes packet length is over 16 bit */
+    if ((stream->cur_pes_payload_size + hdr_len - 6) > G_MAXUINT16)
+      stream->cur_pes_payload_size = 0;
+  }
+
   return TRUE;
 }
 
@@ -910,9 +925,20 @@
         g_ptr_array_add (pmt_stream->descriptors, descriptor);
         break;
       }
+      if (stream->is_opus) {
+        descriptor = gst_mpegts_descriptor_from_registration ("Opus", NULL, 0);
+        g_ptr_array_add (pmt_stream->descriptors, descriptor);
+
+        descriptor =
+            gst_mpegts_descriptor_from_custom_with_extension
+            (GST_MTS_DESC_DVB_EXTENSION, 0x80,
+            &stream->opus_channel_config_code, 1);
+
+        g_ptr_array_add (pmt_stream->descriptors, descriptor);
+      }
       if (stream->is_meta) {
         descriptor = gst_mpegts_descriptor_from_registration ("KLVA", NULL, 0);
-        GST_ERROR ("adding KLVA registration descriptor!");
+        GST_DEBUG ("adding KLVA registration descriptor");
         g_ptr_array_add (pmt_stream->descriptors, descriptor);
       }
     default:
diff --git a/gst/mpegtsmux/tsmux/tsmuxstream.h b/gst/mpegtsmux/tsmux/tsmuxstream.h
index c355ae2..73b2a88 100644
--- a/gst/mpegtsmux/tsmux/tsmuxstream.h
+++ b/gst/mpegtsmux/tsmux/tsmuxstream.h
@@ -133,6 +133,7 @@
   TSMUX_ST_AUDIO_AAC                  = 0x0f,
   TSMUX_ST_VIDEO_MPEG4                = 0x10,
   TSMUX_ST_VIDEO_H264                 = 0x1b,
+  TSMUX_ST_VIDEO_HEVC                 = 0x24,
 
   /* private stream types */
   TSMUX_ST_PS_AUDIO_AC3               = 0x81,
@@ -141,6 +142,7 @@
   TSMUX_ST_PS_DVB_SUBPICTURE          = 0x8c,
   TSMUX_ST_PS_TELETEXT                = 0x8d,
   TSMUX_ST_PS_KLV                     = 0x8e,    /* only used internally */
+  TSMUX_ST_PS_OPUS                    = 0x8f,    /* only used internally */
   TSMUX_ST_PS_DVD_SUBPICTURE          = 0xff,
 
   /* Non-standard definitions */
@@ -209,6 +211,10 @@
   gchar language[4];
 
   gboolean is_meta;
+
+  /* Opus */
+  gboolean is_opus;
+  guint8 opus_channel_config_code;
 };
 
 /* stream management */
diff --git a/gst/mve/Makefile.in b/gst/mve/Makefile.in
index aa254cb..43ba43c 100644
--- a/gst/mve/Makefile.in
+++ b/gst/mve/Makefile.in
@@ -116,16 +116,15 @@
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
 	$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
-	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gsettings.m4 \
-	$(top_srcdir)/m4/gst-fionread.m4 $(top_srcdir)/m4/gst-sdl.m4 \
-	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
-	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
-	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libgcrypt.m4 \
-	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
-	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
-	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
-	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
-	$(top_srcdir)/configure.ac
+	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gst-fionread.m4 \
+	$(top_srcdir)/m4/gst-sdl.m4 $(top_srcdir)/m4/iconv.m4 \
+	$(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \
+	$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
+	$(top_srcdir)/m4/libgcrypt.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
+	$(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \
@@ -278,6 +277,8 @@
 CLUTTER_X11_LIBS = @CLUTTER_X11_LIBS@
 CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
+CUDA_CFLAGS = @CUDA_CFLAGS@
+CUDA_LIBS = @CUDA_LIBS@
 CURL_CFLAGS = @CURL_CFLAGS@
 CURL_LIBS = @CURL_LIBS@
 CXX = @CXX@
@@ -315,6 +316,8 @@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
+EGL_CFLAGS = @EGL_CFLAGS@
+EGL_LIBS = @EGL_LIBS@
 EGREP = @EGREP@
 ERROR_CFLAGS = @ERROR_CFLAGS@
 ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
@@ -323,7 +326,6 @@
 EXIF_CFLAGS = @EXIF_CFLAGS@
 EXIF_LIBS = @EXIF_LIBS@
 FAAC_LIBS = @FAAC_LIBS@
-FAAD_IS_NEAAC = @FAAD_IS_NEAAC@
 FAAD_LIBS = @FAAD_LIBS@
 FFLAGS = @FFLAGS@
 FGREP = @FGREP@
@@ -342,8 +344,9 @@
 GIO_LIBS = @GIO_LIBS@
 GIO_UNIX_CFLAGS = @GIO_UNIX_CFLAGS@
 GIO_UNIX_LIBS = @GIO_UNIX_LIBS@
+GLES2_CFLAGS = @GLES2_CFLAGS@
+GLES2_LIBS = @GLES2_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
-GLIB_COMPILE_SCHEMAS = @GLIB_COMPILE_SCHEMAS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
@@ -360,16 +363,17 @@
 GMODULE_NO_EXPORT_LIBS = @GMODULE_NO_EXPORT_LIBS@
 GMSGFMT = @GMSGFMT@
 GMSGFMT_015 = @GMSGFMT_015@
+GNUSTL_CFLAGS = @GNUSTL_CFLAGS@
+GNUSTL_LIBS = @GNUSTL_LIBS@
 GRAPHENE_CFLAGS = @GRAPHENE_CFLAGS@
 GRAPHENE_LIBS = @GRAPHENE_LIBS@
 GREP = @GREP@
-GSETTINGS_CFLAGS = @GSETTINGS_CFLAGS@
-GSETTINGS_DISABLE_SCHEMAS_COMPILE = @GSETTINGS_DISABLE_SCHEMAS_COMPILE@
-GSETTINGS_LIBS = @GSETTINGS_LIBS@
 GSM_LIBS = @GSM_LIBS@
 GSTPB_PLUGINS_DIR = @GSTPB_PLUGINS_DIR@
 GSTPB_PREFIX = @GSTPB_PREFIX@
 GST_AGE = @GST_AGE@
+GST_ALLOCATORS_CFLAGS = @GST_ALLOCATORS_CFLAGS@
+GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
 GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
 GST_API_VERSION = @GST_API_VERSION@
 GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
@@ -395,6 +399,8 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PBUTILS_CFLAGS = @GST_PBUTILS_CFLAGS@
+GST_PBUTILS_LIBS = @GST_PBUTILS_LIBS@
 GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BAD_CFLAGS = @GST_PLUGINS_BAD_CFLAGS@
@@ -420,6 +426,8 @@
 GST_PREFIX = @GST_PREFIX@
 GST_REVISION = @GST_REVISION@
 GST_TOOLS_DIR = @GST_TOOLS_DIR@
+GST_VIDEO_CFLAGS = @GST_VIDEO_CFLAGS@
+GST_VIDEO_LIBS = @GST_VIDEO_LIBS@
 GTK3_CFLAGS = @GTK3_CFLAGS@
 GTK3_GL_CFLAGS = @GTK3_GL_CFLAGS@
 GTK3_GL_LIBS = @GTK3_GL_LIBS@
@@ -521,6 +529,7 @@
 LTLIBICONV = @LTLIBICONV@
 LTLIBINTL = @LTLIBINTL@
 LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
 MANIFEST_TOOL = @MANIFEST_TOOL@
@@ -534,8 +543,6 @@
 MODPLUG_LIBS = @MODPLUG_LIBS@
 MPEG2ENC_CFLAGS = @MPEG2ENC_CFLAGS@
 MPEG2ENC_LIBS = @MPEG2ENC_LIBS@
-MPG123_CFLAGS = @MPG123_CFLAGS@
-MPG123_LIBS = @MPG123_LIBS@
 MPLEX_CFLAGS = @MPLEX_CFLAGS@
 MPLEX_LDFLAGS = @MPLEX_LDFLAGS@
 MPLEX_LIBS = @MPLEX_LIBS@
@@ -551,6 +558,8 @@
 NETTLE_LIBS = @NETTLE_LIBS@
 NM = @NM@
 NMEDIT = @NMEDIT@
+NVENCODE_CFLAGS = @NVENCODE_CFLAGS@
+NVENCODE_LIBS = @NVENCODE_LIBS@
 OBJC = @OBJC@
 OBJCDEPMODE = @OBJCDEPMODE@
 OBJCFLAGS = @OBJCFLAGS@
@@ -608,16 +617,18 @@
 PYTHON_PLATFORM = @PYTHON_PLATFORM@
 PYTHON_PREFIX = @PYTHON_PREFIX@
 PYTHON_VERSION = @PYTHON_VERSION@
+QT_ANDROID_CFLAGS = @QT_ANDROID_CFLAGS@
+QT_ANDROID_LIBS = @QT_ANDROID_LIBS@
 QT_CFLAGS = @QT_CFLAGS@
 QT_LIBS = @QT_LIBS@
+QT_MAC_CFLAGS = @QT_MAC_CFLAGS@
+QT_MAC_LIBS = @QT_MAC_LIBS@
 QT_WAYLAND_CFLAGS = @QT_WAYLAND_CFLAGS@
 QT_WAYLAND_LIBS = @QT_WAYLAND_LIBS@
 QT_X11_CFLAGS = @QT_X11_CFLAGS@
 QT_X11_LIBS = @QT_X11_LIBS@
 RANLIB = @RANLIB@
 RCC = @RCC@
-RSVG_2_36_2_CFLAGS = @RSVG_2_36_2_CFLAGS@
-RSVG_2_36_2_LIBS = @RSVG_2_36_2_LIBS@
 RSVG_CFLAGS = @RSVG_CFLAGS@
 RSVG_LIBS = @RSVG_LIBS@
 RTMP_CFLAGS = @RTMP_CFLAGS@
@@ -669,6 +680,7 @@
 VOAACENC_LIBS = @VOAACENC_LIBS@
 VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
 VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VULKAN_LIBS = @VULKAN_LIBS@
 WARNING_CFLAGS = @WARNING_CFLAGS@
 WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
 WARNING_OBJCFLAGS = @WARNING_OBJCFLAGS@
@@ -679,6 +691,7 @@
 WAYLAND_LIBS = @WAYLAND_LIBS@
 WEBP_CFLAGS = @WEBP_CFLAGS@
 WEBP_LIBS = @WEBP_LIBS@
+WGET = @WGET@
 WILDMIDI_CFLAGS = @WILDMIDI_CFLAGS@
 WILDMIDI_LIBS = @WILDMIDI_LIBS@
 WINKS_LIBS = @WINKS_LIBS@
@@ -688,6 +701,8 @@
 X11_LIBS = @X11_LIBS@
 X265_CFLAGS = @X265_CFLAGS@
 X265_LIBS = @X265_LIBS@
+XCB_CFLAGS = @XCB_CFLAGS@
+XCB_LIBS = @XCB_LIBS@
 XCOMPOSITE_CFLAGS = @XCOMPOSITE_CFLAGS@
 XCOMPOSITE_LIBS = @XCOMPOSITE_LIBS@
 XGETTEXT = @XGETTEXT@
@@ -725,7 +740,6 @@
 docdir = @docdir@
 dvidir = @dvidir@
 exec_prefix = @exec_prefix@
-gsettingsschemadir = @gsettingsschemadir@
 host = @host@
 host_alias = @host_alias@
 host_cpu = @host_cpu@
diff --git a/gst/mve/gstmvemux.c b/gst/mve/gstmvemux.c
index 043211c..a7a32cb 100644
--- a/gst/mve/gstmvemux.c
+++ b/gst/mve/gstmvemux.c
@@ -18,7 +18,7 @@
  */
 
 /*
-gst-launch-0.10 filesrc location=movie.mve ! mvedemux name=d !
+gst-launch-1.0 filesrc location=movie.mve ! mvedemux name=d !
     video/x-raw-rgb ! mvemux quick=true name=m !
     filesink location=test.mve d. ! audio/x-raw-int ! m.
 */
diff --git a/gst/mxf/Makefile.am b/gst/mxf/Makefile.am
index 6ec4a78..2d87907 100644
--- a/gst/mxf/Makefile.am
+++ b/gst/mxf/Makefile.am
@@ -19,10 +19,19 @@
 	mxfvc3.c \
 	mxfdms1.c
 
-libgstmxf_la_CFLAGS = $(GST_CFLAGS) $(GST_BASE_CFLAGS) $(GST_PLUGINS_BASE_CFLAGS)
-libgstmxf_la_LIBADD = $(GST_LIBS) $(GST_BASE_LIBS) $(GST_PLUGINS_BASE_LIBS) \
+libgstmxf_la_CFLAGS = \
+	-I$(top_srcdir)/gst-libs \
+	-I$(top_builddir)/gst-libs \
+	$(GST_PLUGINS_BASE_CFLAGS) \
+	$(GST_BASE_CFLAGS) \
+	$(GST_CFLAGS)
+libgstmxf_la_LIBADD = \
+	$(top_builddir)/gst-libs/gst/base/libgstbadbase-$(GST_API_VERSION).la \
+	$(GST_PLUGINS_BASE_LIBS) \
 	-lgstvideo-@GST_API_VERSION@ \
-	-lgstaudio-@GST_API_VERSION@
+	-lgstaudio-@GST_API_VERSION@ \
+	$(GST_BASE_LIBS) \
+	$(GST_LIBS)
 libgstmxf_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS)
 libgstmxf_la_LIBTOOLFLAGS = $(GST_PLUGIN_LIBTOOLFLAGS)
 
diff --git a/gst/mxf/Makefile.in b/gst/mxf/Makefile.in
index fd85115..f161fc7 100644
--- a/gst/mxf/Makefile.in
+++ b/gst/mxf/Makefile.in
@@ -116,16 +116,15 @@
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
 	$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
-	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gsettings.m4 \
-	$(top_srcdir)/m4/gst-fionread.m4 $(top_srcdir)/m4/gst-sdl.m4 \
-	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
-	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
-	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libgcrypt.m4 \
-	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
-	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
-	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
-	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
-	$(top_srcdir)/configure.ac
+	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gst-fionread.m4 \
+	$(top_srcdir)/m4/gst-sdl.m4 $(top_srcdir)/m4/iconv.m4 \
+	$(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \
+	$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
+	$(top_srcdir)/m4/libgcrypt.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
+	$(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \
@@ -164,8 +163,9 @@
 am__installdirs = "$(DESTDIR)$(plugindir)"
 LTLIBRARIES = $(plugin_LTLIBRARIES)
 am__DEPENDENCIES_1 =
-libgstmxf_la_DEPENDENCIES = $(am__DEPENDENCIES_1) \
-	$(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1)
+libgstmxf_la_DEPENDENCIES = $(top_builddir)/gst-libs/gst/base/libgstbadbase-$(GST_API_VERSION).la \
+	$(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
+	$(am__DEPENDENCIES_1)
 am_libgstmxf_la_OBJECTS = libgstmxf_la-mxf.lo libgstmxf_la-mxful.lo \
 	libgstmxf_la-mxftypes.lo libgstmxf_la-mxfmetadata.lo \
 	libgstmxf_la-mxfessence.lo libgstmxf_la-mxfquark.lo \
@@ -282,6 +282,8 @@
 CLUTTER_X11_LIBS = @CLUTTER_X11_LIBS@
 CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
+CUDA_CFLAGS = @CUDA_CFLAGS@
+CUDA_LIBS = @CUDA_LIBS@
 CURL_CFLAGS = @CURL_CFLAGS@
 CURL_LIBS = @CURL_LIBS@
 CXX = @CXX@
@@ -319,6 +321,8 @@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
+EGL_CFLAGS = @EGL_CFLAGS@
+EGL_LIBS = @EGL_LIBS@
 EGREP = @EGREP@
 ERROR_CFLAGS = @ERROR_CFLAGS@
 ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
@@ -327,7 +331,6 @@
 EXIF_CFLAGS = @EXIF_CFLAGS@
 EXIF_LIBS = @EXIF_LIBS@
 FAAC_LIBS = @FAAC_LIBS@
-FAAD_IS_NEAAC = @FAAD_IS_NEAAC@
 FAAD_LIBS = @FAAD_LIBS@
 FFLAGS = @FFLAGS@
 FGREP = @FGREP@
@@ -346,8 +349,9 @@
 GIO_LIBS = @GIO_LIBS@
 GIO_UNIX_CFLAGS = @GIO_UNIX_CFLAGS@
 GIO_UNIX_LIBS = @GIO_UNIX_LIBS@
+GLES2_CFLAGS = @GLES2_CFLAGS@
+GLES2_LIBS = @GLES2_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
-GLIB_COMPILE_SCHEMAS = @GLIB_COMPILE_SCHEMAS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
@@ -364,16 +368,17 @@
 GMODULE_NO_EXPORT_LIBS = @GMODULE_NO_EXPORT_LIBS@
 GMSGFMT = @GMSGFMT@
 GMSGFMT_015 = @GMSGFMT_015@
+GNUSTL_CFLAGS = @GNUSTL_CFLAGS@
+GNUSTL_LIBS = @GNUSTL_LIBS@
 GRAPHENE_CFLAGS = @GRAPHENE_CFLAGS@
 GRAPHENE_LIBS = @GRAPHENE_LIBS@
 GREP = @GREP@
-GSETTINGS_CFLAGS = @GSETTINGS_CFLAGS@
-GSETTINGS_DISABLE_SCHEMAS_COMPILE = @GSETTINGS_DISABLE_SCHEMAS_COMPILE@
-GSETTINGS_LIBS = @GSETTINGS_LIBS@
 GSM_LIBS = @GSM_LIBS@
 GSTPB_PLUGINS_DIR = @GSTPB_PLUGINS_DIR@
 GSTPB_PREFIX = @GSTPB_PREFIX@
 GST_AGE = @GST_AGE@
+GST_ALLOCATORS_CFLAGS = @GST_ALLOCATORS_CFLAGS@
+GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
 GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
 GST_API_VERSION = @GST_API_VERSION@
 GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
@@ -399,6 +404,8 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PBUTILS_CFLAGS = @GST_PBUTILS_CFLAGS@
+GST_PBUTILS_LIBS = @GST_PBUTILS_LIBS@
 GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BAD_CFLAGS = @GST_PLUGINS_BAD_CFLAGS@
@@ -424,6 +431,8 @@
 GST_PREFIX = @GST_PREFIX@
 GST_REVISION = @GST_REVISION@
 GST_TOOLS_DIR = @GST_TOOLS_DIR@
+GST_VIDEO_CFLAGS = @GST_VIDEO_CFLAGS@
+GST_VIDEO_LIBS = @GST_VIDEO_LIBS@
 GTK3_CFLAGS = @GTK3_CFLAGS@
 GTK3_GL_CFLAGS = @GTK3_GL_CFLAGS@
 GTK3_GL_LIBS = @GTK3_GL_LIBS@
@@ -525,6 +534,7 @@
 LTLIBICONV = @LTLIBICONV@
 LTLIBINTL = @LTLIBINTL@
 LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
 MANIFEST_TOOL = @MANIFEST_TOOL@
@@ -538,8 +548,6 @@
 MODPLUG_LIBS = @MODPLUG_LIBS@
 MPEG2ENC_CFLAGS = @MPEG2ENC_CFLAGS@
 MPEG2ENC_LIBS = @MPEG2ENC_LIBS@
-MPG123_CFLAGS = @MPG123_CFLAGS@
-MPG123_LIBS = @MPG123_LIBS@
 MPLEX_CFLAGS = @MPLEX_CFLAGS@
 MPLEX_LDFLAGS = @MPLEX_LDFLAGS@
 MPLEX_LIBS = @MPLEX_LIBS@
@@ -555,6 +563,8 @@
 NETTLE_LIBS = @NETTLE_LIBS@
 NM = @NM@
 NMEDIT = @NMEDIT@
+NVENCODE_CFLAGS = @NVENCODE_CFLAGS@
+NVENCODE_LIBS = @NVENCODE_LIBS@
 OBJC = @OBJC@
 OBJCDEPMODE = @OBJCDEPMODE@
 OBJCFLAGS = @OBJCFLAGS@
@@ -612,16 +622,18 @@
 PYTHON_PLATFORM = @PYTHON_PLATFORM@
 PYTHON_PREFIX = @PYTHON_PREFIX@
 PYTHON_VERSION = @PYTHON_VERSION@
+QT_ANDROID_CFLAGS = @QT_ANDROID_CFLAGS@
+QT_ANDROID_LIBS = @QT_ANDROID_LIBS@
 QT_CFLAGS = @QT_CFLAGS@
 QT_LIBS = @QT_LIBS@
+QT_MAC_CFLAGS = @QT_MAC_CFLAGS@
+QT_MAC_LIBS = @QT_MAC_LIBS@
 QT_WAYLAND_CFLAGS = @QT_WAYLAND_CFLAGS@
 QT_WAYLAND_LIBS = @QT_WAYLAND_LIBS@
 QT_X11_CFLAGS = @QT_X11_CFLAGS@
 QT_X11_LIBS = @QT_X11_LIBS@
 RANLIB = @RANLIB@
 RCC = @RCC@
-RSVG_2_36_2_CFLAGS = @RSVG_2_36_2_CFLAGS@
-RSVG_2_36_2_LIBS = @RSVG_2_36_2_LIBS@
 RSVG_CFLAGS = @RSVG_CFLAGS@
 RSVG_LIBS = @RSVG_LIBS@
 RTMP_CFLAGS = @RTMP_CFLAGS@
@@ -673,6 +685,7 @@
 VOAACENC_LIBS = @VOAACENC_LIBS@
 VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
 VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VULKAN_LIBS = @VULKAN_LIBS@
 WARNING_CFLAGS = @WARNING_CFLAGS@
 WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
 WARNING_OBJCFLAGS = @WARNING_OBJCFLAGS@
@@ -683,6 +696,7 @@
 WAYLAND_LIBS = @WAYLAND_LIBS@
 WEBP_CFLAGS = @WEBP_CFLAGS@
 WEBP_LIBS = @WEBP_LIBS@
+WGET = @WGET@
 WILDMIDI_CFLAGS = @WILDMIDI_CFLAGS@
 WILDMIDI_LIBS = @WILDMIDI_LIBS@
 WINKS_LIBS = @WINKS_LIBS@
@@ -692,6 +706,8 @@
 X11_LIBS = @X11_LIBS@
 X265_CFLAGS = @X265_CFLAGS@
 X265_LIBS = @X265_LIBS@
+XCB_CFLAGS = @XCB_CFLAGS@
+XCB_LIBS = @XCB_LIBS@
 XCOMPOSITE_CFLAGS = @XCOMPOSITE_CFLAGS@
 XCOMPOSITE_LIBS = @XCOMPOSITE_LIBS@
 XGETTEXT = @XGETTEXT@
@@ -729,7 +745,6 @@
 docdir = @docdir@
 dvidir = @dvidir@
 exec_prefix = @exec_prefix@
-gsettingsschemadir = @gsettingsschemadir@
 host = @host@
 host_alias = @host_alias@
 host_cpu = @host_cpu@
@@ -789,10 +804,20 @@
 	mxfvc3.c \
 	mxfdms1.c
 
-libgstmxf_la_CFLAGS = $(GST_CFLAGS) $(GST_BASE_CFLAGS) $(GST_PLUGINS_BASE_CFLAGS)
-libgstmxf_la_LIBADD = $(GST_LIBS) $(GST_BASE_LIBS) $(GST_PLUGINS_BASE_LIBS) \
+libgstmxf_la_CFLAGS = \
+	-I$(top_srcdir)/gst-libs \
+	-I$(top_builddir)/gst-libs \
+	$(GST_PLUGINS_BASE_CFLAGS) \
+	$(GST_BASE_CFLAGS) \
+	$(GST_CFLAGS)
+
+libgstmxf_la_LIBADD = \
+	$(top_builddir)/gst-libs/gst/base/libgstbadbase-$(GST_API_VERSION).la \
+	$(GST_PLUGINS_BASE_LIBS) \
 	-lgstvideo-@GST_API_VERSION@ \
-	-lgstaudio-@GST_API_VERSION@
+	-lgstaudio-@GST_API_VERSION@ \
+	$(GST_BASE_LIBS) \
+	$(GST_LIBS)
 
 libgstmxf_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS)
 libgstmxf_la_LIBTOOLFLAGS = $(GST_PLUGIN_LIBTOOLFLAGS)
diff --git a/gst/mxf/mxf.c b/gst/mxf/mxf.c
index 6634d18..324462b 100644
--- a/gst/mxf/mxf.c
+++ b/gst/mxf/mxf.c
@@ -71,8 +71,9 @@
 
   /* mxfmux is disabled for now - it compiles but is completely untested */
   if (!gst_element_register (plugin, "mxfdemux", GST_RANK_PRIMARY,
-          GST_TYPE_MXF_DEMUX))
-    /* || !gst_element_register (plugin, "mxfmux", GST_RANK_PRIMARY, GST_TYPE_MXF_MUX)) */
+          GST_TYPE_MXF_DEMUX)
+      || !gst_element_register (plugin, "mxfmux", GST_RANK_PRIMARY,
+          GST_TYPE_MXF_MUX))
     return FALSE;
 
   return TRUE;
diff --git a/gst/mxf/mxfaes-bwf.c b/gst/mxf/mxfaes-bwf.c
index 7649973..633f3af 100644
--- a/gst/mxf/mxfaes-bwf.c
+++ b/gst/mxf/mxfaes-bwf.c
@@ -1266,7 +1266,8 @@
           descriptor->channel_count) / 8;
 
     audio_format =
-        gst_audio_format_build_integer (block_align != 1, G_LITTLE_ENDIAN,
+        gst_audio_format_build_integer (block_align !=
+        descriptor->channel_count, G_LITTLE_ENDIAN,
         (block_align / descriptor->channel_count) * 8,
         (block_align / descriptor->channel_count) * 8);
     ret =
@@ -1297,7 +1298,8 @@
           descriptor->channel_count) / 8;
 
     audio_format =
-        gst_audio_format_build_integer (block_align != 1, G_BIG_ENDIAN,
+        gst_audio_format_build_integer (block_align !=
+        descriptor->channel_count, G_BIG_ENDIAN,
         (block_align / descriptor->channel_count) * 8,
         (block_align / descriptor->channel_count) * 8);
     ret =
@@ -1374,8 +1376,8 @@
         descriptor->channel_count) / 8;
 
   audio_format =
-      gst_audio_format_build_integer (block_align != 1, G_LITTLE_ENDIAN,
-      (block_align / descriptor->channel_count) * 8,
+      gst_audio_format_build_integer (block_align != descriptor->channel_count,
+      G_LITTLE_ENDIAN, (block_align / descriptor->channel_count) * 8,
       (block_align / descriptor->channel_count) * 8);
   ret =
       mxf_metadata_generic_sound_essence_descriptor_create_caps (descriptor,
diff --git a/gst/mxf/mxfdemux.c b/gst/mxf/mxfdemux.c
index e45e49c..f11d604 100644
--- a/gst/mxf/mxfdemux.c
+++ b/gst/mxf/mxfdemux.c
@@ -25,7 +25,7 @@
  * <refsect2>
  * <title>Example launch line</title>
  * |[
- * gst-launch -v filesrc location=/path/to/mxf ! mxfdemux ! audioconvert ! autoaudiosink
+ * gst-launch-1.0 -v filesrc location=/path/to/mxf ! mxfdemux ! audioconvert ! autoaudiosink
  * ]| This pipeline demuxes an MXF file and outputs one of the contained raw audio streams.
  * </refsect2>
  */
@@ -78,6 +78,8 @@
 gst_mxf_demux_handle_index_table_segment (GstMXFDemux * demux,
     const MXFUL * key, GstBuffer * buffer, guint64 offset);
 
+static void collect_index_table_segments (GstMXFDemux * demux);
+
 GType gst_mxf_demux_pad_get_type (void);
 G_DEFINE_TYPE (GstMXFDemuxPad, gst_mxf_demux_pad, GST_TYPE_PAD);
 
@@ -277,6 +279,18 @@
     demux->pending_index_table_segments = NULL;
   }
 
+  if (demux->index_tables) {
+    GList *l;
+
+    for (l = demux->index_tables; l; l = l->next) {
+      GstMXFDemuxIndexTable *t = l->data;
+      g_array_free (t->offsets, TRUE);
+      g_free (t);
+    }
+    g_list_free (demux->index_tables);
+    demux->index_tables = NULL;
+  }
+
   demux->index_table_segments_collected = FALSE;
 
   gst_mxf_demux_reset_mxf_state (demux);
@@ -716,6 +730,7 @@
 
         memset (&tmp, 0, sizeof (tmp));
         tmp.body_sid = edata->body_sid;
+        tmp.index_sid = edata->index_sid;
         tmp.track_number = track->parent.track_number;
         tmp.track_id = track->parent.track_id;
         memcpy (&tmp.source_package_uid, &package->parent.package_uid, 32);
@@ -1713,6 +1728,36 @@
   if (outbuf)
     keyframe = !GST_BUFFER_FLAG_IS_SET (outbuf, GST_BUFFER_FLAG_DELTA_UNIT);
 
+  /* Prefer keyframe information from index tables over everything else */
+  if (demux->index_tables && outbuf) {
+    GList *l;
+    GstMXFDemuxIndexTable *index_table = NULL;
+
+    for (l = demux->index_tables; l; l = l->next) {
+      GstMXFDemuxIndexTable *tmp = l->data;
+
+      if (tmp->body_sid == etrack->body_sid
+          && tmp->index_sid == etrack->index_sid) {
+        index_table = tmp;
+        break;
+      }
+    }
+
+    if (index_table && index_table->offsets->len > etrack->position) {
+      GstMXFDemuxIndex *index =
+          &g_array_index (index_table->offsets, GstMXFDemuxIndex,
+          etrack->position);
+      if (index->offset != 0) {
+        keyframe = index->keyframe;
+
+        if (keyframe)
+          GST_BUFFER_FLAG_UNSET (outbuf, GST_BUFFER_FLAG_DELTA_UNIT);
+        else
+          GST_BUFFER_FLAG_SET (outbuf, GST_BUFFER_FLAG_DELTA_UNIT);
+      }
+    }
+  }
+
   if (!etrack->offsets)
     etrack->offsets = g_array_new (FALSE, TRUE, sizeof (GstMXFDemuxIndex));
 
@@ -1821,10 +1866,12 @@
 
     GST_DEBUG_OBJECT (demux,
         "Pushing buffer of size %" G_GSIZE_FORMAT " for track %u: timestamp %"
-        GST_TIME_FORMAT " duration %" GST_TIME_FORMAT,
-        gst_buffer_get_size (outbuf), pad->material_track->parent.track_id,
+        GST_TIME_FORMAT " duration %" GST_TIME_FORMAT " position %"
+        G_GUINT64_FORMAT, gst_buffer_get_size (outbuf),
+        pad->material_track->parent.track_id,
         GST_TIME_ARGS (GST_BUFFER_TIMESTAMP (outbuf)),
-        GST_TIME_ARGS (GST_BUFFER_DURATION (outbuf)));
+        GST_TIME_ARGS (GST_BUFFER_DURATION (outbuf)),
+        pad->current_essence_track_position);
 
     if (pad->discont) {
       GST_BUFFER_FLAG_SET (outbuf, GST_BUFFER_FLAG_DISCONT);
@@ -1896,33 +1943,74 @@
 }
 
 static void
-read_partition_header (GstMXFDemux * demux, guint64 offset)
+read_partition_header (GstMXFDemux * demux)
 {
   GstBuffer *buf;
   MXFUL key;
   guint read;
 
-  if (gst_mxf_demux_pull_klv_packet (demux, offset, &key, &buf, &read)
+  if (gst_mxf_demux_pull_klv_packet (demux, demux->offset, &key, &buf, &read)
       != GST_FLOW_OK)
     return;
-  offset += read;
 
   if (!mxf_is_partition_pack (&key)) {
     gst_buffer_unref (buf);
     return;
   }
 
-  do {
+  if (gst_mxf_demux_handle_partition_pack (demux, &key, buf) != GST_FLOW_OK) {
     gst_buffer_unref (buf);
-    if (gst_mxf_demux_pull_klv_packet (demux, offset, &key, &buf, &read)
+    return;
+  }
+  demux->offset += read;
+  gst_buffer_unref (buf);
+
+  if (gst_mxf_demux_pull_klv_packet (demux, demux->offset, &key, &buf, &read)
+      != GST_FLOW_OK)
+    return;
+
+  while (mxf_is_fill (&key)) {
+    demux->offset += read;
+    gst_buffer_unref (buf);
+    if (gst_mxf_demux_pull_klv_packet (demux, demux->offset, &key, &buf, &read)
         != GST_FLOW_OK)
       return;
-    offset += read;
   }
-  while (mxf_is_fill (&key));
 
-  if (mxf_is_index_table_segment (&key)) {
-    gst_mxf_demux_handle_index_table_segment (demux, &key, buf, offset);
+  if (!mxf_is_index_table_segment (&key)
+      && demux->current_partition->partition.header_byte_count) {
+    gst_buffer_unref (buf);
+    demux->offset += demux->current_partition->partition.header_byte_count;
+    if (gst_mxf_demux_pull_klv_packet (demux, demux->offset, &key, &buf, &read)
+        != GST_FLOW_OK)
+      return;
+  }
+
+  while (mxf_is_index_table_segment (&key)) {
+    gst_mxf_demux_handle_index_table_segment (demux, &key, buf, demux->offset);
+    demux->offset += read;
+
+    gst_buffer_unref (buf);
+    if (gst_mxf_demux_pull_klv_packet (demux, demux->offset, &key, &buf, &read)
+        != GST_FLOW_OK)
+      return;
+  }
+
+  while (mxf_is_fill (&key)) {
+    demux->offset += read;
+    gst_buffer_unref (buf);
+    if (gst_mxf_demux_pull_klv_packet (demux, demux->offset, &key, &buf, &read)
+        != GST_FLOW_OK)
+      return;
+  }
+
+  if (mxf_is_generic_container_system_item (&key) ||
+      mxf_is_generic_container_essence_element (&key) ||
+      mxf_is_avid_essence_container_essence_element (&key)) {
+    if (demux->current_partition->essence_container_offset == 0)
+      demux->current_partition->essence_container_offset =
+          demux->offset - demux->current_partition->partition.this_partition -
+          demux->run_in;
   }
 
   gst_buffer_unref (buf);
@@ -2001,19 +2089,6 @@
   return GST_FLOW_OK;
 }
 
-static gint
-compare_index_table_segments (gconstpointer comparee, gconstpointer compared)
-{
-  MXFIndexTableSegment *comparee_segment, *compared_segment;
-
-  comparee_segment = (MXFIndexTableSegment *) comparee;
-  compared_segment = (MXFIndexTableSegment *) compared;
-
-  /* FIXME : is that the correct comparison ? */
-  return comparee_segment->index_start_position -
-      compared_segment->index_start_position;
-}
-
 static GstFlowReturn
 gst_mxf_demux_handle_index_table_segment (GstMXFDemux * demux,
     const MXFUL * key, GstBuffer * buffer, guint64 offset)
@@ -2021,21 +2096,15 @@
   MXFIndexTableSegment *segment;
   GstMapInfo map;
   gboolean ret;
-  GList *l;
 
   GST_DEBUG_OBJECT (demux,
       "Handling index table segment of size %" G_GSIZE_FORMAT " at offset %"
       G_GUINT64_FORMAT, gst_buffer_get_size (buffer), offset);
 
-  if (!demux->current_partition->primer.mappings) {
-    GST_WARNING_OBJECT (demux, "Invalid primer pack");
-  }
-
   segment = g_new0 (MXFIndexTableSegment, 1);
 
   gst_buffer_map (buffer, &map, GST_MAP_READ);
-  ret = mxf_index_table_segment_parse (key, segment,
-      &demux->current_partition->primer, map.data, map.size);
+  ret = mxf_index_table_segment_parse (key, segment, map.data, map.size);
   gst_buffer_unmap (buffer, &map);
 
   if (!ret) {
@@ -2043,18 +2112,8 @@
     return GST_FLOW_ERROR;
   }
 
-  segment->stream_offset = offset;
-  l = g_list_find_custom (demux->pending_index_table_segments, segment,
-      (GCompareFunc) compare_index_table_segments);
-
-  /* Prevent duplicates */
-  if (l == NULL) {
-    demux->pending_index_table_segments =
-        g_list_prepend (demux->pending_index_table_segments, segment);
-  } else {
-    mxf_index_table_segment_reset (segment);
-    g_free (segment);
-  }
+  demux->pending_index_table_segments =
+      g_list_prepend (demux->pending_index_table_segments, segment);
 
   return GST_FLOW_OK;
 }
@@ -2166,6 +2225,7 @@
   guint64 old_offset = demux->offset;
   MXFUL key;
   GstMapInfo map;
+  GstFlowReturn flow_ret;
 
   if (!gst_pad_peer_query_duration (demux->sinkpad, fmt, &filesize) ||
       fmt != GST_FORMAT_BYTES || filesize == -1) {
@@ -2219,9 +2279,14 @@
     return;
   }
 
-  gst_mxf_demux_handle_random_index_pack (demux, &key, buffer);
+  flow_ret = gst_mxf_demux_handle_random_index_pack (demux, &key, buffer);
   gst_buffer_unref (buffer);
   demux->offset = old_offset;
+
+  if (flow_ret == GST_FLOW_OK && !demux->index_table_segments_collected) {
+    collect_index_table_segments (demux);
+    demux->index_table_segments_collected = TRUE;
+  }
 }
 
 static void
@@ -2461,6 +2526,12 @@
         buffer, peek);
   } else if (mxf_is_random_index_pack (key)) {
     ret = gst_mxf_demux_handle_random_index_pack (demux, key, buffer);
+
+    if (ret == GST_FLOW_OK && demux->random_access
+        && !demux->index_table_segments_collected) {
+      collect_index_table_segments (demux);
+      demux->index_table_segments_collected = TRUE;
+    }
   } else if (mxf_is_index_table_segment (key)) {
     ret =
         gst_mxf_demux_handle_index_table_segment (demux, key, buffer,
@@ -2524,28 +2595,66 @@
 }
 
 static guint64
-get_offset_from_index_table_segments (GstMXFDemux * demux, gint64 position,
-    gint64 * index_start_position)
+find_offset (GArray * offsets, gint64 * position, gboolean keyframe)
 {
-  GList *l;
-  gint64 start, end;
-  gboolean return_offset = FALSE;
+  GstMXFDemuxIndex *idx;
+  guint64 current_offset = -1;
+  gint64 current_position = *position;
 
-  for (l = demux->pending_index_table_segments; l != NULL; l = l->next) {
-    MXFIndexTableSegment *segment = (MXFIndexTableSegment *) l->data;
-    start = segment->index_start_position;
-    end = start + segment->index_duration;
+  if (!offsets || offsets->len <= *position)
+    return -1;
 
-    if (return_offset)
-      return segment->stream_offset;
-
-    if (start <= position && position < end) {
-      *index_start_position = segment->index_start_position;
-      return_offset = TRUE;
+  idx = &g_array_index (offsets, GstMXFDemuxIndex, *position);
+  if (idx->offset != 0 && (!keyframe || idx->keyframe)) {
+    current_offset = idx->offset;
+  } else if (idx->offset != 0) {
+    current_position--;
+    while (current_position >= 0) {
+      idx = &g_array_index (offsets, GstMXFDemuxIndex, current_position);
+      if (idx->offset == 0) {
+        break;
+      } else if (!idx->keyframe) {
+        current_position--;
+        continue;
+      } else {
+        current_offset = idx->offset;
+        break;
+      }
     }
   }
 
-  return 0;
+  if (current_offset == -1)
+    return -1;
+
+  *position = current_position;
+  return current_offset;
+}
+
+static guint64
+find_closest_offset (GArray * offsets, gint64 * position, gboolean keyframe)
+{
+  GstMXFDemuxIndex *idx;
+  gint64 current_position = *position;
+
+  if (!offsets || offsets->len == 0)
+    return -1;
+
+  current_position = MIN (current_position, offsets->len - 1);
+
+  idx = &g_array_index (offsets, GstMXFDemuxIndex, current_position);
+  while (idx->offset == 0 || (keyframe && !idx->keyframe)) {
+    current_position--;
+    if (current_position < 0)
+      break;
+    idx = &g_array_index (offsets, GstMXFDemuxIndex, current_position);
+  }
+
+  if (idx->offset != 0 && (!keyframe || idx->keyframe)) {
+    *position = current_position;
+    return idx->offset;
+  }
+
+  return -1;
 }
 
 static guint64
@@ -2556,11 +2665,28 @@
   guint64 old_offset = demux->offset;
   GstMXFDemuxPartition *old_partition = demux->current_partition;
   gint i;
+  guint64 offset;
+  gint64 requested_position = *position;
+  GstMXFDemuxIndexTable *index_table = NULL;
 
   GST_DEBUG_OBJECT (demux, "Trying to find essence element %" G_GINT64_FORMAT
       " of track %u with body_sid %u (keyframe %d)", *position,
       etrack->track_number, etrack->body_sid, keyframe);
 
+  if (demux->index_tables) {
+    GList *l;
+
+    for (l = demux->index_tables; l; l = l->next) {
+      GstMXFDemuxIndexTable *tmp = l->data;
+
+      if (tmp->body_sid == etrack->body_sid
+          && tmp->index_sid == etrack->index_sid) {
+        index_table = tmp;
+        break;
+      }
+    }
+  }
+
 from_index:
 
   if (etrack->duration > 0 && *position >= etrack->duration) {
@@ -2569,84 +2695,66 @@
   }
 
   /* First try to find an offset in our index */
-  if (etrack->offsets && etrack->offsets->len > *position) {
-    GstMXFDemuxIndex *idx =
-        &g_array_index (etrack->offsets, GstMXFDemuxIndex, *position);
-    guint64 current_offset = -1;
-    gint64 current_position = *position;
-
-    if (idx->offset != 0 && (!keyframe || idx->keyframe)) {
-      current_offset = idx->offset;
-    } else if (idx->offset != 0) {
-      current_position--;
-      while (current_position >= 0) {
-        idx =
-            &g_array_index (etrack->offsets, GstMXFDemuxIndex,
-            current_position);
-        if (idx->offset == 0) {
-          break;
-        } else if (!idx->keyframe) {
-          current_position--;
-          continue;
-        } else {
-          current_offset = idx->offset;
-          break;
-        }
-      }
-    }
-
-    if (current_offset != -1) {
-      GST_DEBUG_OBJECT (demux, "Found in index at offset %" G_GUINT64_FORMAT,
-          current_offset);
-      *position = current_position;
-      return current_offset;
-    }
+  offset = find_offset (etrack->offsets, position, keyframe);
+  if (offset != -1) {
+    GST_DEBUG_OBJECT (demux,
+        "Found edit unit %" G_GINT64_FORMAT " for %" G_GINT64_FORMAT
+        " in generated index at offset %" G_GUINT64_FORMAT, *position,
+        requested_position, offset);
+    return offset;
   }
 
   GST_DEBUG_OBJECT (demux, "Not found in index");
   if (!demux->random_access) {
-    guint64 new_offset = -1;
-    gint64 new_position = -1;
-
-    if (etrack->offsets && etrack->offsets->len) {
-      for (i = etrack->offsets->len - 1; i >= 0; i--) {
-        GstMXFDemuxIndex *idx =
-            &g_array_index (etrack->offsets, GstMXFDemuxIndex, i);
-
-        if (idx->offset != 0 && i <= *position && (!keyframe || idx->keyframe)) {
-          new_offset = idx->offset;
-          new_position = i;
-          break;
-        }
-      }
+    offset = find_closest_offset (etrack->offsets, position, keyframe);
+    if (offset != -1) {
+      GST_DEBUG_OBJECT (demux,
+          "Starting with edit unit %" G_GINT64_FORMAT " for %" G_GINT64_FORMAT
+          " in generated index at offset %" G_GUINT64_FORMAT, *position,
+          requested_position, offset);
+      return offset;
     }
 
-    if (new_offset != -1) {
-      *position = new_position;
-      return new_offset;
+    if (index_table) {
+      offset = find_closest_offset (index_table->offsets, position, keyframe);
+      if (offset != -1) {
+        GST_DEBUG_OBJECT (demux,
+            "Starting with edit unit %" G_GINT64_FORMAT " for %" G_GINT64_FORMAT
+            " in index at offset %" G_GUINT64_FORMAT, *position,
+            requested_position, offset);
+        return offset;
+      }
     }
   } else if (demux->random_access) {
-    gint64 index_start_position = -1;
-    guint64 offset;
+    gint64 index_start_position = *position;
 
     demux->offset = demux->run_in;
-    if (etrack->offsets && etrack->offsets->len) {
-      for (i = etrack->offsets->len - 1; i >= 0; i--) {
-        GstMXFDemuxIndex *idx =
-            &g_array_index (etrack->offsets, GstMXFDemuxIndex, i);
-
-        if (idx->offset != 0 && i <= *position) {
-          demux->offset = idx->offset + demux->run_in;
-          break;
-        }
-      }
-    }
 
     offset =
-        get_offset_from_index_table_segments (demux, *position,
-        &index_start_position);
+        find_closest_offset (etrack->offsets, &index_start_position, FALSE);
+    if (offset != -1) {
+      demux->offset = offset + demux->run_in;
+      GST_DEBUG_OBJECT (demux,
+          "Starting with edit unit %" G_GINT64_FORMAT " for %" G_GINT64_FORMAT
+          " in generated index at offset %" G_GUINT64_FORMAT,
+          index_start_position, requested_position, offset);
+    } else {
+      index_start_position = -1;
+    }
 
-    demux->offset = offset;
+    if (index_table) {
+      gint64 tmp_position = *position;
+
+      offset = find_closest_offset (index_table->offsets, &tmp_position, TRUE);
+      if (offset != -1 && tmp_position > index_start_position) {
+        demux->offset = offset + demux->run_in;
+        index_start_position = tmp_position;
+        GST_DEBUG_OBJECT (demux,
+            "Starting with edit unit %" G_GINT64_FORMAT " for %" G_GINT64_FORMAT
+            " in index at offset %" G_GUINT64_FORMAT, index_start_position,
+            requested_position, offset);
+      }
+    }
 
     gst_mxf_demux_set_partition_for_offset (demux, demux->offset);
 
@@ -2654,7 +2762,7 @@
       GstMXFDemuxEssenceTrack *t =
           &g_array_index (demux->essence_tracks, GstMXFDemuxEssenceTrack, i);
 
-      if (index_start_position != -1)
+      if (index_start_position != -1 && t == etrack)
         t->position = index_start_position;
       else
         t->position = (demux->offset == demux->run_in) ? 0 : -1;
@@ -3400,14 +3508,15 @@
 static void
 collect_index_table_segments (GstMXFDemux * demux)
 {
-  guint i;
   GList *l;
+  guint i;
+  guint64 old_offset = demux->offset;
+  GstMXFDemuxPartition *old_partition = demux->current_partition;
 
   if (!demux->random_index_pack)
     return;
 
   for (i = 0; i < demux->random_index_pack->len; i++) {
-    GstMXFDemuxPartition *p = NULL;
     MXFRandomIndexPackEntry *e =
         &g_array_index (demux->random_index_pack, MXFRandomIndexPackEntry, i);
 
@@ -3416,19 +3525,92 @@
       return;
     }
 
-    for (l = demux->partitions; l; l = l->next) {
-      GstMXFDemuxPartition *tmp = l->data;
+    demux->offset = e->offset;
+    read_partition_header (demux);
+  }
 
-      if (tmp->partition.this_partition + demux->run_in == e->offset) {
-        p = tmp;
+  demux->offset = old_offset;
+  demux->current_partition = old_partition;
+
+  for (l = demux->pending_index_table_segments; l; l = l->next) {
+    MXFIndexTableSegment *segment = l->data;
+    GstMXFDemuxIndexTable *t = NULL;
+    GList *k;
+    guint64 start, end;
+
+    for (k = demux->index_tables; k; k = k->next) {
+      GstMXFDemuxIndexTable *tmp = k->data;
+
+      if (tmp->body_sid == segment->body_sid
+          && tmp->index_sid == segment->index_sid) {
+        t = tmp;
         break;
       }
     }
 
-    if (p) {
-      read_partition_header (demux, p->partition.this_partition);
+    if (!t) {
+      t = g_new0 (GstMXFDemuxIndexTable, 1);
+      t->body_sid = segment->body_sid;
+      t->index_sid = segment->index_sid;
+      t->offsets = g_array_new (FALSE, TRUE, sizeof (GstMXFDemuxIndex));
+      demux->index_tables = g_list_prepend (demux->index_tables, t);
+    }
+
+    start = segment->index_start_position;
+    end = start + segment->index_duration;
+
+    if (t->offsets->len < end)
+      g_array_set_size (t->offsets, end);
+
+    for (i = 0; i < segment->n_index_entries; i++) {
+      GstMXFDemuxIndex *index =
+          &g_array_index (t->offsets, GstMXFDemuxIndex, start + i);
+      guint64 offset = segment->index_entries[i].stream_offset;
+      GList *m;
+      GstMXFDemuxPartition *offset_partition = NULL, *next_partition = NULL;
+
+      for (m = demux->partitions; m; m = m->next) {
+        GstMXFDemuxPartition *partition = m->data;
+
+        if (!next_partition && offset_partition)
+          next_partition = partition;
+
+        if (partition->partition.body_sid != t->body_sid)
+          continue;
+        if (partition->partition.body_offset > offset)
+          break;
+
+        offset_partition = partition;
+        next_partition = NULL;
+      }
+
+      if (offset_partition && offset >= offset_partition->partition.body_offset
+          && (offset - offset_partition->partition.body_offset)) {
+        offset =
+            offset_partition->partition.this_partition +
+            offset_partition->essence_container_offset + (offset -
+            offset_partition->partition.body_offset);
+
+        if (next_partition
+            && offset >= next_partition->partition.this_partition) {
+          GST_ERROR_OBJECT (demux,
+              "Invalid index table segment going into next unrelated partition");
+        } else {
+          index->offset = offset;
+          index->keyframe = ! !(segment->index_entries[i].flags & 0x80)
+              || (segment->index_entries[i].key_frame_offset == 0);
+        }
+      }
     }
   }
+
+  for (l = demux->pending_index_table_segments; l; l = l->next) {
+    MXFIndexTableSegment *s = l->data;
+    mxf_index_table_segment_reset (s);
+    g_free (s);
+  }
+  g_list_free (demux->pending_index_table_segments);
+  demux->pending_index_table_segments = NULL;
 }
 
 static gboolean
@@ -3945,6 +4127,9 @@
         } else {
           GST_WARNING_OBJECT (demux,
               "Seek to remaining part of the file failed");
+          p->eos = TRUE;
+          gst_pad_push_event (GST_PAD_CAST (p), gst_event_new_eos ());
+          continue;
         }
       }
 
diff --git a/gst/mxf/mxfdemux.h b/gst/mxf/mxfdemux.h
index 3324093..b4d7242 100644
--- a/gst/mxf/mxfdemux.h
+++ b/gst/mxf/mxfdemux.h
@@ -65,6 +65,7 @@
 typedef struct
 {
   guint32 body_sid;
+  guint32 index_sid;
   guint32 track_number;
 
   guint32 track_id;
@@ -87,6 +88,13 @@
   GstCaps *caps;
 } GstMXFDemuxEssenceTrack;
 
+typedef struct
+{
+  guint32 body_sid;
+  guint32 index_sid;
+  GArray *offsets;
+} GstMXFDemuxIndexTable;
+
 struct _GstMXFDemuxPad
 {
   GstPad parent;
@@ -153,8 +161,9 @@
   GstMXFDemuxPartition *current_partition;
 
   GArray *essence_tracks;
-  GList *pending_index_table_segments;
 
+  GList *pending_index_table_segments;
+  GList *index_tables; /* one per BodySID / IndexSID */
   gboolean index_table_segments_collected;
 
   GArray *random_index_pack;
diff --git a/gst/mxf/mxfjpeg2000.c b/gst/mxf/mxfjpeg2000.c
index 1679279..17daf7d 100644
--- a/gst/mxf/mxfjpeg2000.c
+++ b/gst/mxf/mxfjpeg2000.c
@@ -221,7 +221,7 @@
 
   /* TODO: What about other field values? */
   caps =
-      gst_caps_new_simple ("image/x-jpc", "fields", G_TYPE_INT, 1, "colorspace",
+      gst_caps_new_simple ("image/x-jpc", "colorspace",
       G_TYPE_STRING, colorspace, NULL);
   if (p) {
     mxf_metadata_generic_picture_essence_descriptor_set_caps (p, caps);
@@ -360,7 +360,7 @@
   mxf_jpeg2000_essence_element_writer.pad_template =
       gst_pad_template_new ("jpeg2000_video_sink_%u", GST_PAD_SINK,
       GST_PAD_REQUEST,
-      gst_caps_from_string ("image/x-jpc, fields = 1, width = "
+      gst_caps_from_string ("image/x-jpc, width = "
           GST_VIDEO_SIZE_RANGE ", height = " GST_VIDEO_SIZE_RANGE
           ", framerate = " GST_VIDEO_FPS_RANGE
           ", colorspace = (string) { \"sRGB\", \"sYUV\" }"));
diff --git a/gst/mxf/mxfmetadata.c b/gst/mxf/mxfmetadata.c
index e306a55..69aadb5 100644
--- a/gst/mxf/mxfmetadata.c
+++ b/gst/mxf/mxfmetadata.c
@@ -932,20 +932,18 @@
   }
   ret = g_list_prepend (ret, t);
 
-  if (self->dm_schemes) {
-    t = g_slice_new0 (MXFLocalTag);
-    memcpy (&t->ul, MXF_UL (DM_SCHEMES), 16);
-    t->size = 8 + 16 * self->n_dm_schemes;
-    t->data = g_slice_alloc0 (t->size);
-    t->g_slice = TRUE;
-    mxf_primer_pack_add_mapping (primer, 0x3b0b, &t->ul);
-    GST_WRITE_UINT32_BE (t->data, self->n_dm_schemes);
-    GST_WRITE_UINT32_BE (t->data + 4, 16);
-    for (i = 0; i < self->n_dm_schemes; i++) {
-      memcpy (t->data + 8 + 16 * i, &self->dm_schemes[i], 16);
-    }
-    ret = g_list_prepend (ret, t);
+  t = g_slice_new0 (MXFLocalTag);
+  memcpy (&t->ul, MXF_UL (DM_SCHEMES), 16);
+  t->size = 8 + 16 * self->n_dm_schemes;
+  t->data = g_slice_alloc0 (t->size);
+  t->g_slice = TRUE;
+  mxf_primer_pack_add_mapping (primer, 0x3b0b, &t->ul);
+  GST_WRITE_UINT32_BE (t->data, self->n_dm_schemes);
+  GST_WRITE_UINT32_BE (t->data + 4, 16);
+  for (i = 0; i < self->n_dm_schemes; i++) {
+    memcpy (t->data + 8 + 16 * i, &self->dm_schemes[i], 16);
   }
+  ret = g_list_prepend (ret, t);
 
   return ret;
 }
@@ -1236,6 +1234,17 @@
     ret = g_list_prepend (ret, t);
   }
 
+  if (!mxf_uuid_is_zero (&self->this_generation_uid)) {
+    t = g_slice_new0 (MXFLocalTag);
+    memcpy (&t->ul, MXF_UL (THIS_GENERATION_UID), 16);
+    t->size = 16;
+    t->data = g_slice_alloc (t->size);
+    t->g_slice = TRUE;
+    memcpy (t->data, &self->this_generation_uid, 16);
+    mxf_primer_pack_add_mapping (primer, 0x3c09, &t->ul);
+    ret = g_list_prepend (ret, t);
+  }
+
   return ret;
 }
 
@@ -1718,7 +1727,7 @@
     t->data = g_slice_alloc (4);
     t->g_slice = TRUE;
     GST_WRITE_UINT32_BE (t->data, self->index_sid);
-    mxf_primer_pack_add_mapping (primer, 0x3f07, &t->ul);
+    mxf_primer_pack_add_mapping (primer, 0x3f06, &t->ul);
     ret = g_list_prepend (ret, t);
   }
 
@@ -4424,15 +4433,25 @@
       if (GST_READ_UINT32_BE (tag_data) == 0)
         return TRUE;
 
-      if (GST_READ_UINT32_BE (tag_data) != 2 &&
-          GST_READ_UINT32_BE (tag_data + 4) != 4)
+      if (GST_READ_UINT32_BE (tag_data + 4) != 4)
         goto error;
 
-      if (tag_size != 16)
+      if (GST_READ_UINT32_BE (tag_data) != 1 &&
+          GST_READ_UINT32_BE (tag_data) != 2)
+        goto error;
+
+      if ((GST_READ_UINT32_BE (tag_data) == 1 && tag_size != 12) ||
+          (GST_READ_UINT32_BE (tag_data) == 2 && tag_size != 16))
         goto error;
 
       self->video_line_map[0] = GST_READ_UINT32_BE (tag_data + 8);
-      self->video_line_map[1] = GST_READ_UINT32_BE (tag_data + 12);
+
+      /* Workaround for files created by ffmpeg */
+      if (GST_READ_UINT32_BE (tag_data) == 1)
+        self->video_line_map[0] = 0;
+      else
+        self->video_line_map[1] = GST_READ_UINT32_BE (tag_data + 12);
+
       GST_DEBUG ("  video line map = {%i, %i}", self->video_line_map[0],
           self->video_line_map[1]);
       break;
@@ -4514,14 +4533,12 @@
   gst_structure_id_set (ret, MXF_QUARK (SIGNAL_STANDARD), G_TYPE_UCHAR,
       self->signal_standard, NULL);
 
-  if (self->frame_layout != 255)
-    gst_structure_id_set (ret, MXF_QUARK (FRAME_LAYOUT), G_TYPE_UCHAR,
-        self->frame_layout, NULL);
+  gst_structure_id_set (ret, MXF_QUARK (FRAME_LAYOUT), G_TYPE_UCHAR,
+      self->frame_layout, NULL);
 
-  if (self->stored_width != 0 && self->stored_height != 0)
-    gst_structure_id_set (ret, MXF_QUARK (STORED_WIDTH), G_TYPE_UINT,
-        self->stored_width, MXF_QUARK (STORED_HEIGHT), G_TYPE_UINT,
-        self->stored_height, NULL);
+  gst_structure_id_set (ret, MXF_QUARK (STORED_WIDTH), G_TYPE_UINT,
+      self->stored_width, MXF_QUARK (STORED_HEIGHT), G_TYPE_UINT,
+      self->stored_height, NULL);
 
   if (self->stored_f2_offset != 0)
     gst_structure_id_set (ret, MXF_QUARK (STORED_F2_OFFSET), G_TYPE_INT,
@@ -4565,10 +4582,9 @@
     gst_structure_id_set (ret, MXF_QUARK (ACTIVE_FORMAT_DESCRIPTOR),
         G_TYPE_UCHAR, self->active_format_descriptor, NULL);
 
-  if (self->video_line_map[0] != 0 && self->video_line_map[1] != 0)
-    gst_structure_id_set (ret, MXF_QUARK (VIDEO_LINE_MAP_0), G_TYPE_UINT,
-        self->video_line_map[0], MXF_QUARK (VIDEO_LINE_MAP_1), G_TYPE_UINT,
-        self->video_line_map[1], NULL);
+  gst_structure_id_set (ret, MXF_QUARK (VIDEO_LINE_MAP_0), G_TYPE_UINT,
+      self->video_line_map[0], MXF_QUARK (VIDEO_LINE_MAP_1), G_TYPE_UINT,
+      self->video_line_map[1], NULL);
 
   if (self->alpha_transparency != 0)
     gst_structure_id_set (ret, MXF_QUARK (ALPHA_TRANSPARENCY), G_TYPE_UCHAR,
@@ -4628,38 +4644,32 @@
     ret = g_list_prepend (ret, t);
   }
 
-  if (self->frame_layout != 255) {
-    t = g_slice_new0 (MXFLocalTag);
-    memcpy (&t->ul, MXF_UL (FRAME_LAYOUT), 16);
-    t->size = 1;
-    t->data = g_slice_alloc (t->size);
-    t->g_slice = TRUE;
-    GST_WRITE_UINT8 (t->data, self->frame_layout);
-    mxf_primer_pack_add_mapping (primer, 0x320c, &t->ul);
-    ret = g_list_prepend (ret, t);
-  }
+  t = g_slice_new0 (MXFLocalTag);
+  memcpy (&t->ul, MXF_UL (FRAME_LAYOUT), 16);
+  t->size = 1;
+  t->data = g_slice_alloc (t->size);
+  t->g_slice = TRUE;
+  GST_WRITE_UINT8 (t->data, self->frame_layout);
+  mxf_primer_pack_add_mapping (primer, 0x320c, &t->ul);
+  ret = g_list_prepend (ret, t);
 
-  if (self->stored_width != 0) {
-    t = g_slice_new0 (MXFLocalTag);
-    memcpy (&t->ul, MXF_UL (STORED_WIDTH), 16);
-    t->size = 4;
-    t->data = g_slice_alloc (t->size);
-    t->g_slice = TRUE;
-    GST_WRITE_UINT32_BE (t->data, self->stored_width);
-    mxf_primer_pack_add_mapping (primer, 0x3203, &t->ul);
-    ret = g_list_prepend (ret, t);
-  }
+  t = g_slice_new0 (MXFLocalTag);
+  memcpy (&t->ul, MXF_UL (STORED_WIDTH), 16);
+  t->size = 4;
+  t->data = g_slice_alloc (t->size);
+  t->g_slice = TRUE;
+  GST_WRITE_UINT32_BE (t->data, self->stored_width);
+  mxf_primer_pack_add_mapping (primer, 0x3203, &t->ul);
+  ret = g_list_prepend (ret, t);
 
-  if (self->stored_height != 0) {
-    t = g_slice_new0 (MXFLocalTag);
-    memcpy (&t->ul, MXF_UL (STORED_HEIGHT), 16);
-    t->size = 4;
-    t->data = g_slice_alloc (t->size);
-    t->g_slice = TRUE;
-    GST_WRITE_UINT32_BE (t->data, self->stored_height);
-    mxf_primer_pack_add_mapping (primer, 0x3202, &t->ul);
-    ret = g_list_prepend (ret, t);
-  }
+  t = g_slice_new0 (MXFLocalTag);
+  memcpy (&t->ul, MXF_UL (STORED_HEIGHT), 16);
+  t->size = 4;
+  t->data = g_slice_alloc (t->size);
+  t->g_slice = TRUE;
+  GST_WRITE_UINT32_BE (t->data, self->stored_height);
+  mxf_primer_pack_add_mapping (primer, 0x3202, &t->ul);
+  ret = g_list_prepend (ret, t);
 
   if (self->stored_f2_offset != 0) {
     t = g_slice_new0 (MXFLocalTag);
@@ -4771,17 +4781,15 @@
     ret = g_list_prepend (ret, t);
   }
 
-  if (self->aspect_ratio.n != 0 && self->aspect_ratio.d != 0) {
-    t = g_slice_new0 (MXFLocalTag);
-    memcpy (&t->ul, MXF_UL (ASPECT_RATIO), 16);
-    t->size = 8;
-    t->data = g_slice_alloc (t->size);
-    t->g_slice = TRUE;
-    GST_WRITE_UINT32_BE (t->data, self->aspect_ratio.n);
-    GST_WRITE_UINT32_BE (t->data + 4, self->aspect_ratio.d);
-    mxf_primer_pack_add_mapping (primer, 0x320e, &t->ul);
-    ret = g_list_prepend (ret, t);
-  }
+  t = g_slice_new0 (MXFLocalTag);
+  memcpy (&t->ul, MXF_UL (ASPECT_RATIO), 16);
+  t->size = 8;
+  t->data = g_slice_alloc (t->size);
+  t->g_slice = TRUE;
+  GST_WRITE_UINT32_BE (t->data, self->aspect_ratio.n);
+  GST_WRITE_UINT32_BE (t->data + 4, self->aspect_ratio.d);
+  mxf_primer_pack_add_mapping (primer, 0x320e, &t->ul);
+  ret = g_list_prepend (ret, t);
 
   if (self->active_format_descriptor != 0) {
     t = g_slice_new0 (MXFLocalTag);
@@ -4794,17 +4802,17 @@
     ret = g_list_prepend (ret, t);
   }
 
-  if (self->video_line_map[0] != 0 || self->video_line_map[1] != 0) {
-    t = g_slice_new0 (MXFLocalTag);
-    memcpy (&t->ul, MXF_UL (VIDEO_LINE_MAP), 16);
-    t->size = 16;
-    t->data = g_slice_alloc (t->size);
-    t->g_slice = TRUE;
-    GST_WRITE_UINT64_BE (t->data, self->video_line_map[0]);
-    GST_WRITE_UINT64_BE (t->data + 8, self->video_line_map[1]);
-    mxf_primer_pack_add_mapping (primer, 0x320d, &t->ul);
-    ret = g_list_prepend (ret, t);
-  }
+  t = g_slice_new0 (MXFLocalTag);
+  memcpy (&t->ul, MXF_UL (VIDEO_LINE_MAP), 16);
+  t->size = 16;
+  t->data = g_slice_alloc (t->size);
+  t->g_slice = TRUE;
+  GST_WRITE_UINT32_BE (t->data, 2);
+  GST_WRITE_UINT32_BE (t->data + 4, 4);
+  GST_WRITE_UINT32_BE (t->data + 8, self->video_line_map[0]);
+  GST_WRITE_UINT32_BE (t->data + 12, self->video_line_map[1]);
+  mxf_primer_pack_add_mapping (primer, 0x320d, &t->ul);
+  ret = g_list_prepend (ret, t);
 
   if (self->alpha_transparency != 0) {
     t = g_slice_new0 (MXFLocalTag);
@@ -4952,16 +4960,18 @@
   gst_caps_set_simple (caps, "width", G_TYPE_INT, width, "height", G_TYPE_INT,
       height, NULL);
 
-  if (self->aspect_ratio.n == 0 || self->aspect_ratio.d == 0) {
+  if (self->aspect_ratio.n == 0 && self->aspect_ratio.d == 0) {
+    gst_caps_set_simple (caps, "pixel-aspect-ratio", GST_TYPE_FRACTION,
+        1, 1, NULL);
+  } else if (self->aspect_ratio.n == 0 || self->aspect_ratio.d == 0) {
     GST_ERROR ("Invalid aspect ratio");
-    return;
+  } else {
+    par_n = height * self->aspect_ratio.n;
+    par_d = width * self->aspect_ratio.d;
+
+    gst_caps_set_simple (caps, "pixel-aspect-ratio", GST_TYPE_FRACTION,
+        par_n, par_d, NULL);
   }
-
-  par_n = height * self->aspect_ratio.n;
-  par_d = width * self->aspect_ratio.d;
-
-  gst_caps_set_simple (caps, "pixel-aspect-ratio", GST_TYPE_FRACTION,
-      par_n, par_d, NULL);
 }
 
 static gint
@@ -4985,7 +4995,7 @@
   gint fps_n, fps_d;
   MXFMetadataFileDescriptor *f = (MXFMetadataFileDescriptor *) self;
   GstStructure *s;
-  gboolean interlaced;
+  gboolean interlaced = FALSE;
 
   g_return_val_if_fail (MXF_IS_METADATA_GENERIC_PICTURE_ESSENCE_DESCRIPTOR
       (self), FALSE);
@@ -5136,13 +5146,11 @@
     gst_structure_id_set (ret, MXF_QUARK (ELECTRO_SPATIAL_FORMULATION),
         G_TYPE_UCHAR, self->electro_spatial_formulation, NULL);
 
-  if (self->channel_count != 0)
-    gst_structure_id_set (ret, MXF_QUARK (CHANNEL_COUNT), G_TYPE_UINT,
-        self->channel_count, NULL);
+  gst_structure_id_set (ret, MXF_QUARK (CHANNEL_COUNT), G_TYPE_UINT,
+      self->channel_count, NULL);
 
-  if (self->quantization_bits != 0)
-    gst_structure_id_set (ret, MXF_QUARK (QUANTIZATION_BITS), G_TYPE_UINT,
-        self->quantization_bits, NULL);
+  gst_structure_id_set (ret, MXF_QUARK (QUANTIZATION_BITS), G_TYPE_UINT,
+      self->quantization_bits, NULL);
 
   if (self->dial_norm != 0)
     gst_structure_id_set (ret, MXF_QUARK (DIAL_NORM), G_TYPE_CHAR,
@@ -5171,17 +5179,15 @@
       (m, primer);
   MXFLocalTag *t;
 
-  if (self->audio_sampling_rate.d && self->audio_sampling_rate.n) {
-    t = g_slice_new0 (MXFLocalTag);
-    memcpy (&t->ul, MXF_UL (AUDIO_SAMPLING_RATE), 16);
-    t->size = 8;
-    t->data = g_slice_alloc (t->size);
-    t->g_slice = TRUE;
-    GST_WRITE_UINT32_BE (t->data, self->audio_sampling_rate.n);
-    GST_WRITE_UINT32_BE (t->data + 4, self->audio_sampling_rate.d);
-    mxf_primer_pack_add_mapping (primer, 0x3d03, &t->ul);
-    ret = g_list_prepend (ret, t);
-  }
+  t = g_slice_new0 (MXFLocalTag);
+  memcpy (&t->ul, MXF_UL (AUDIO_SAMPLING_RATE), 16);
+  t->size = 8;
+  t->data = g_slice_alloc (t->size);
+  t->g_slice = TRUE;
+  GST_WRITE_UINT32_BE (t->data, self->audio_sampling_rate.n);
+  GST_WRITE_UINT32_BE (t->data + 4, self->audio_sampling_rate.d);
+  mxf_primer_pack_add_mapping (primer, 0x3d03, &t->ul);
+  ret = g_list_prepend (ret, t);
 
   t = g_slice_new0 (MXFLocalTag);
   memcpy (&t->ul, MXF_UL (LOCKED), 16);
@@ -5214,27 +5220,23 @@
     ret = g_list_prepend (ret, t);
   }
 
-  if (self->channel_count) {
-    t = g_slice_new0 (MXFLocalTag);
-    memcpy (&t->ul, MXF_UL (CHANNEL_COUNT), 16);
-    t->size = 4;
-    t->data = g_slice_alloc (t->size);
-    t->g_slice = TRUE;
-    GST_WRITE_UINT32_BE (t->data, self->channel_count);
-    mxf_primer_pack_add_mapping (primer, 0x3d07, &t->ul);
-    ret = g_list_prepend (ret, t);
-  }
+  t = g_slice_new0 (MXFLocalTag);
+  memcpy (&t->ul, MXF_UL (CHANNEL_COUNT), 16);
+  t->size = 4;
+  t->data = g_slice_alloc (t->size);
+  t->g_slice = TRUE;
+  GST_WRITE_UINT32_BE (t->data, self->channel_count);
+  mxf_primer_pack_add_mapping (primer, 0x3d07, &t->ul);
+  ret = g_list_prepend (ret, t);
 
-  if (self->quantization_bits) {
-    t = g_slice_new0 (MXFLocalTag);
-    memcpy (&t->ul, MXF_UL (QUANTIZATION_BITS), 16);
-    t->size = 4;
-    t->data = g_slice_alloc (t->size);
-    t->g_slice = TRUE;
-    GST_WRITE_UINT32_BE (t->data, self->quantization_bits);
-    mxf_primer_pack_add_mapping (primer, 0x3d01, &t->ul);
-    ret = g_list_prepend (ret, t);
-  }
+  t = g_slice_new0 (MXFLocalTag);
+  memcpy (&t->ul, MXF_UL (QUANTIZATION_BITS), 16);
+  t->size = 4;
+  t->data = g_slice_alloc (t->size);
+  t->g_slice = TRUE;
+  GST_WRITE_UINT32_BE (t->data, self->quantization_bits);
+  mxf_primer_pack_add_mapping (primer, 0x3d01, &t->ul);
+  ret = g_list_prepend (ret, t);
 
   if (self->dial_norm != 0) {
     t = g_slice_new0 (MXFLocalTag);
@@ -5265,7 +5267,7 @@
     mxf_metadata_generic_sound_essence_descriptor_init
     (MXFMetadataGenericSoundEssenceDescriptor * self)
 {
-  self->audio_sampling_rate.n = 48000;
+  self->audio_sampling_rate.n = 0;
   self->audio_sampling_rate.d = 1;
   self->electro_spatial_formulation = 255;
 }
@@ -5476,13 +5478,11 @@
   MXFMetadataCDCIPictureEssenceDescriptor *self =
       MXF_METADATA_CDCI_PICTURE_ESSENCE_DESCRIPTOR (m);
 
-  if (self->component_depth != 0)
-    gst_structure_id_set (ret, MXF_QUARK (COMPONENT_DEPTH), G_TYPE_UINT,
-        self->component_depth, NULL);
+  gst_structure_id_set (ret, MXF_QUARK (COMPONENT_DEPTH), G_TYPE_UINT,
+      self->component_depth, NULL);
 
-  if (self->horizontal_subsampling != 0)
-    gst_structure_id_set (ret, MXF_QUARK (HORIZONTAL_SUBSAMPLING), G_TYPE_UINT,
-        self->horizontal_subsampling, NULL);
+  gst_structure_id_set (ret, MXF_QUARK (HORIZONTAL_SUBSAMPLING), G_TYPE_UINT,
+      self->horizontal_subsampling, NULL);
 
   if (self->vertical_subsampling != 0)
     gst_structure_id_set (ret, MXF_QUARK (VERTICAL_SUBSAMPLING), G_TYPE_UINT,
@@ -5530,27 +5530,23 @@
       (m, primer);
   MXFLocalTag *t;
 
-  if (self->component_depth) {
-    t = g_slice_new0 (MXFLocalTag);
-    memcpy (&t->ul, MXF_UL (COMPONENT_DEPTH), 16);
-    t->size = 4;
-    t->data = g_slice_alloc (t->size);
-    t->g_slice = TRUE;
-    GST_WRITE_UINT32_BE (t->data, self->component_depth);
-    mxf_primer_pack_add_mapping (primer, 0x3301, &t->ul);
-    ret = g_list_prepend (ret, t);
-  }
+  t = g_slice_new0 (MXFLocalTag);
+  memcpy (&t->ul, MXF_UL (COMPONENT_DEPTH), 16);
+  t->size = 4;
+  t->data = g_slice_alloc (t->size);
+  t->g_slice = TRUE;
+  GST_WRITE_UINT32_BE (t->data, self->component_depth);
+  mxf_primer_pack_add_mapping (primer, 0x3301, &t->ul);
+  ret = g_list_prepend (ret, t);
 
-  if (self->horizontal_subsampling) {
-    t = g_slice_new0 (MXFLocalTag);
-    memcpy (&t->ul, MXF_UL (HORIZONTAL_SUBSAMPLING), 16);
-    t->size = 4;
-    t->data = g_slice_alloc (t->size);
-    t->g_slice = TRUE;
-    GST_WRITE_UINT32_BE (t->data, self->horizontal_subsampling);
-    mxf_primer_pack_add_mapping (primer, 0x3302, &t->ul);
-    ret = g_list_prepend (ret, t);
-  }
+  t = g_slice_new0 (MXFLocalTag);
+  memcpy (&t->ul, MXF_UL (HORIZONTAL_SUBSAMPLING), 16);
+  t->size = 4;
+  t->data = g_slice_alloc (t->size);
+  t->g_slice = TRUE;
+  GST_WRITE_UINT32_BE (t->data, self->horizontal_subsampling);
+  mxf_primer_pack_add_mapping (primer, 0x3302, &t->ul);
+  ret = g_list_prepend (ret, t);
 
   if (self->vertical_subsampling) {
     t = g_slice_new0 (MXFLocalTag);
@@ -5728,7 +5724,7 @@
     case 0x3401:{
       guint i, len;
 
-      if (tag_size % 2 != 0)
+      if (tag_size % 2 != 0 || tag_size > 16)
         goto error;
 
       i = 0;
@@ -5741,7 +5737,7 @@
       if (len == 0)
         return TRUE;
 
-      self->pixel_layout = g_malloc0 (2 * len);
+      self->pixel_layout = g_malloc0 (16);
 
       for (i = 0; i < len; i++) {
         self->pixel_layout[2 * i] = tag_data[2 * i];
@@ -5887,17 +5883,15 @@
     ret = g_list_prepend (ret, t);
   }
 
-  if (self->pixel_layout) {
-    t = g_slice_new0 (MXFLocalTag);
-    memcpy (&t->ul, MXF_UL (PIXEL_LAYOUT), 16);
-    t->size = 2 * self->n_pixel_layout + 2;
-    t->data = g_slice_alloc0 (t->size);
-    t->g_slice = TRUE;
+  t = g_slice_new0 (MXFLocalTag);
+  memcpy (&t->ul, MXF_UL (PIXEL_LAYOUT), 16);
+  t->size = 16;
+  t->data = g_slice_alloc0 (t->size);
+  t->g_slice = TRUE;
+  if (self->pixel_layout)
     memcpy (t->data, self->pixel_layout, self->n_pixel_layout * 2);
-    mxf_primer_pack_add_mapping (primer, 0x3401, &t->ul);
-    ret = g_list_prepend (ret, t);
-
-  }
+  mxf_primer_pack_add_mapping (primer, 0x3401, &t->ul);
+  ret = g_list_prepend (ret, t);
 
   return ret;
 }
diff --git a/gst/mxf/mxfmpeg.c b/gst/mxf/mxfmpeg.c
index c26fa99..30ba9cf 100644
--- a/gst/mxf/mxfmpeg.c
+++ b/gst/mxf/mxfmpeg.c
@@ -600,7 +600,7 @@
     0x03, 0x02, 0x04, 0x00}
 };
 
-static const MXFUL sound_essence_compression_mpeg1_layer12 = { {
+static const MXFUL sound_essence_compression_mpeg1_layer23 = { {
         0x06, 0x0E, 0x2B, 0x34, 0x04, 0x01, 0x01, 0x01, 0x04, 0x02, 0x02, 0x02,
     0x03, 0x02, 0x05, 0x00}
 };
@@ -701,8 +701,9 @@
     } else if ((p->picture_essence_coding.u[13] >> 4) == 0x03) {
       /* RP 2008 */
 
-      /* TODO: What about codec_data for AVC1 streams? */
-      caps = gst_caps_new_empty_simple ("video/x-h264");
+      caps =
+          gst_caps_new_simple ("video/x-h264", "stream-format", G_TYPE_STRING,
+          "byte-stream", NULL);
       codec_name = "h.264 Video";
       t = MXF_MPEG_ESSENCE_TYPE_VIDEO_AVC;
       memcpy (mdata, &t, sizeof (MXFMPEGEssenceType));
@@ -731,7 +732,7 @@
           "layer", G_TYPE_INT, 1, NULL);
       codec_name = "MPEG-1 Layer 1 Audio";
     } else if (mxf_ul_is_equal (&s->sound_essence_compression,
-            &sound_essence_compression_mpeg1_layer12)) {
+            &sound_essence_compression_mpeg1_layer23)) {
       caps =
           gst_caps_new_simple ("audio/mpeg", "mpegversion", G_TYPE_INT, 1,
           NULL);
@@ -890,17 +891,16 @@
   } else if (f->essence_container.u[13] == 0x0f) {
     GST_DEBUG ("Found h264 NAL unit stream");
     /* RP 2008 */
-    /* TODO: What about codec_data? */
     caps =
         gst_caps_new_simple ("video/x-h264", "stream-format", G_TYPE_STRING,
-        "avc", NULL);
+        "byte-stream", NULL);
 
     if (!*tags)
       *tags = gst_tag_list_new_empty ();
     gst_tag_list_add (*tags, GST_TAG_MERGE_APPEND, GST_TAG_VIDEO_CODEC,
         "h.264 Video", NULL);
   } else if (f->essence_container.u[13] == 0x10) {
-    GST_DEBUG ("Found h264 byte stream stream");
+    GST_DEBUG ("Found h264 byte-stream stream");
     /* RP 2008 */
     caps =
         gst_caps_new_simple ("video/x-h264", "stream-format", G_TYPE_STRING,
@@ -941,7 +941,7 @@
 
 static const guint8 mpeg_essence_container_ul[] = {
   0x06, 0x0e, 0x2b, 0x34, 0x04, 0x01, 0x01, 0x02,
-  0x0d, 0x01, 0x03, 0x01, 0x02, 0x04, 0x01, 0x01
+  0x0d, 0x01, 0x03, 0x01, 0x02, 0x00, 0x00, 0x01
 };
 
 static MXFMetadataFileDescriptor *
@@ -979,9 +979,9 @@
       if (mpegaudioversion == 1 && layer == 1)
         memcpy (&ret->sound_essence_compression,
             &sound_essence_compression_mpeg1_layer1, 16);
-      else if (mpegaudioversion == 1 && layer == 2)
+      else if (mpegaudioversion == 1 && (layer == 2 || layer == 3))
         memcpy (&ret->sound_essence_compression,
-            &sound_essence_compression_mpeg1_layer12, 16);
+            &sound_essence_compression_mpeg1_layer23, 16);
       else if (mpegaudioversion == 2 && layer == 1)
         memcpy (&ret->sound_essence_compression,
             &sound_essence_compression_mpeg2_layer1, 16);
@@ -1016,6 +1016,9 @@
 
   memcpy (&ret->parent.essence_container, &mpeg_essence_container_ul, 16);
 
+  ret->parent.essence_container.u[13] = 0x04;
+  ret->parent.essence_container.u[14] = 0x40;
+
   if (!mxf_metadata_generic_sound_essence_descriptor_from_caps (ret, caps)) {
     g_object_unref (ret);
     return NULL;
@@ -1257,6 +1260,7 @@
 
   memcpy (&ret->parent.parent.parent.essence_container,
       &mpeg_essence_container_ul, 16);
+
   memcpy (&ret->parent.parent.picture_essence_coding,
       &mpeg_video_picture_essence_compression_ul, 16);
   if (strcmp (gst_structure_get_name (s), "video/mpeg") == 0) {
@@ -1273,13 +1277,19 @@
 
       *mapping_data = g_new0 (MXFMPEGEssenceType, 1);
       memcpy (*mapping_data, &type, sizeof (MXFMPEGEssenceType));
+      ret->parent.parent.picture_essence_coding.u[7] = 0x03;
       ret->parent.parent.picture_essence_coding.u[13] = 0x10;
+      ret->parent.parent.parent.essence_container.u[13] = 0x04;
+      ret->parent.parent.parent.essence_container.u[14] = 0x60;
     } else if (mpegversion == 2) {
       MXFMPEGEssenceType type = MXF_MPEG_ESSENCE_TYPE_VIDEO_MPEG2;
 
       *mapping_data = g_new0 (MXFMPEGEssenceType, 1);
       memcpy (*mapping_data, &type, sizeof (MXFMPEGEssenceType));
+      ret->parent.parent.picture_essence_coding.u[7] = 0x01;
       ret->parent.parent.picture_essence_coding.u[13] = 0x01;
+      ret->parent.parent.parent.essence_container.u[13] = 0x04;
+      ret->parent.parent.parent.essence_container.u[14] = 0x60;
     } else {
       const GValue *v;
       const GstBuffer *codec_data;
@@ -1288,7 +1298,10 @@
       *mapping_data = g_new0 (MXFMPEGEssenceType, 1);
       memcpy (*mapping_data, &type, sizeof (MXFMPEGEssenceType));
 
+      ret->parent.parent.picture_essence_coding.u[7] = 0x03;
       ret->parent.parent.picture_essence_coding.u[13] = 0x20;
+      ret->parent.parent.parent.essence_container.u[13] = 0x04;
+      ret->parent.parent.parent.essence_container.u[14] = 0x60;
       if ((v = gst_structure_get_value (s, "codec_data"))) {
         MXFLocalTag *t = g_slice_new0 (MXFLocalTag);
         GstMapInfo map;
@@ -1307,7 +1320,11 @@
 
     *mapping_data = g_new0 (MXFMPEGEssenceType, 1);
     memcpy (*mapping_data, &type, sizeof (MXFMPEGEssenceType));
+    ret->parent.parent.picture_essence_coding.u[7] = 0x0a;
     ret->parent.parent.picture_essence_coding.u[13] = 0x30;
+    ret->parent.parent.parent.essence_container.u[7] = 0x0a;
+    ret->parent.parent.parent.essence_container.u[13] = 0x10;
+    ret->parent.parent.parent.essence_container.u[14] = 0x60;
   } else {
     g_assert_not_reached ();
   }
@@ -1364,6 +1381,7 @@
 "height = " GST_VIDEO_SIZE_RANGE ", " \
 "framerate = " GST_VIDEO_FPS_RANGE "; " \
 "video/x-h264, " \
+"stream-format = (string) byte-stream, " \
 "width = " GST_VIDEO_SIZE_RANGE ", " \
 "height = " GST_VIDEO_SIZE_RANGE ", " \
 "framerate = " GST_VIDEO_FPS_RANGE
diff --git a/gst/mxf/mxfmux.c b/gst/mxf/mxfmux.c
index 273d3b6..d363e7a 100644
--- a/gst/mxf/mxfmux.c
+++ b/gst/mxf/mxfmux.c
@@ -25,7 +25,7 @@
  * <refsect2>
  * <title>Example launch line</title>
  * |[
- * gst-launch -v filesrc location=/path/to/audio ! decodebin ! queue ! mxfmux name=m ! filesink location=file.mxf   filesrc location=/path/to/video ! decodebin ! queue ! m.
+ * gst-launch-1.0 -v filesrc location=/path/to/audio ! decodebin ! queue ! mxfmux name=m ! filesink location=file.mxf   filesrc location=/path/to/video ! decodebin ! queue ! m.
  * ]| This pipeline muxes an audio and video file into a single MXF file.
  * </refsect2>
  */
@@ -46,6 +46,66 @@
 GST_DEBUG_CATEGORY_STATIC (mxfmux_debug);
 #define GST_CAT_DEFAULT mxfmux_debug
 
+#define GST_TYPE_MXF_MUX_PAD            (gst_mxf_mux_pad_get_type())
+#define GST_MXF_MUX_PAD(obj)            (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_MXF_MUX_PAD, GstMXFMuxPad))
+#define GST_MXF_MUX_PAD_CLASS(klass)    (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_MXF_MUX_PAD, GstMXFMuxPadClass))
+#define GST_MXF_MUX_PAD_GET_CLASS(obj)  (G_TYPE_INSTANCE_GET_CLASS ((obj),GST_TYPE_MXF_MUX_PAD, GstMXFMuxPadClass))
+#define GST_IS_MXF_MUX_PAD(obj)         (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_MXF_MUX_PAD))
+#define GST_IS_MXF_MUX_PAD_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_MXF_MUX_PAD))
+
+typedef struct
+{
+  GstAggregatorPad parent;
+
+  guint64 pos;
+  GstClockTime last_timestamp;
+
+  MXFMetadataFileDescriptor *descriptor;
+
+  GstAdapter *adapter;
+  gboolean have_complete_edit_unit;
+
+  gpointer mapping_data;
+  const MXFEssenceElementWriter *writer;
+  MXFEssenceElementWriteFunc write_func;
+
+  MXFMetadataSourcePackage *source_package;
+  MXFMetadataTimelineTrack *source_track;
+} GstMXFMuxPad;
+
+typedef struct
+{
+  GstAggregatorPadClass parent_class;
+} GstMXFMuxPadClass;
+
+GType gst_mxf_mux_pad_get_type (void);
+
+G_DEFINE_TYPE (GstMXFMuxPad, gst_mxf_mux_pad, GST_TYPE_AGGREGATOR_PAD);
+
+static void
+gst_mxf_mux_pad_finalize (GObject * object)
+{
+  GstMXFMuxPad *pad = GST_MXF_MUX_PAD (object);
+
+  g_object_unref (pad->adapter);
+  g_free (pad->mapping_data);
+
+  G_OBJECT_CLASS (gst_mxf_mux_pad_parent_class)->finalize (object);
+}
+
+static void
+gst_mxf_mux_pad_class_init (GstMXFMuxPadClass * klass)
+{
+  GObjectClass *object_class = (GObjectClass *) klass;
+
+  object_class->finalize = gst_mxf_mux_pad_finalize;
+}
+
+static void
+gst_mxf_mux_pad_init (GstMXFMuxPad * pad)
+{
+}
+
 static GstStaticPadTemplate src_templ = GST_STATIC_PAD_TEMPLATE ("src",
     GST_PAD_SRC,
     GST_PAD_ALWAYS,
@@ -58,27 +118,20 @@
 };
 
 #define gst_mxf_mux_parent_class parent_class
-G_DEFINE_TYPE (GstMXFMux, gst_mxf_mux, GST_TYPE_ELEMENT);
+G_DEFINE_TYPE (GstMXFMux, gst_mxf_mux, GST_TYPE_AGGREGATOR);
 
 static void gst_mxf_mux_finalize (GObject * object);
-static void gst_mxf_mux_set_property (GObject * object,
-    guint prop_id, const GValue * value, GParamSpec * pspec);
-static void gst_mxf_mux_get_property (GObject * object,
-    guint prop_id, GValue * value, GParamSpec * pspec);
 
-static GstFlowReturn gst_mxf_mux_collected (GstCollectPads * pads,
-    gpointer user_data);
+static GstFlowReturn gst_mxf_mux_aggregate (GstAggregator * aggregator,
+    gboolean timeout);
+static gboolean gst_mxf_mux_stop (GstAggregator * aggregator);
 
-static gboolean gst_mxf_mux_handle_src_event (GstPad * pad, GstObject * parent,
+static gboolean gst_mxf_mux_src_event (GstAggregator * aggregator,
     GstEvent * event);
-static gboolean gst_mxf_mux_handle_sink_event (GstCollectPads * pads,
-    GstCollectData * data, GstEvent * event, gpointer user_data);
-static GstPad *gst_mxf_mux_request_new_pad (GstElement * element,
+static gboolean gst_mxf_mux_sink_event (GstAggregator * aggregator,
+    GstAggregatorPad * aggpad, GstEvent * event);
+static GstAggregatorPad *gst_mxf_mux_create_new_pad (GstAggregator * aggregator,
     GstPadTemplate * templ, const gchar * name, const GstCaps * caps);
-static void gst_mxf_mux_release_pad (GstElement * element, GstPad * pad);
-
-static GstStateChangeReturn
-gst_mxf_mux_change_state (GstElement * element, GstStateChange transition);
 
 static void gst_mxf_mux_reset (GstMXFMux * mux);
 
@@ -88,7 +141,7 @@
   guint size = gst_buffer_get_size (buf);
   GstFlowReturn ret;
 
-  ret = gst_pad_push (mux->srcpad, buf);
+  ret = gst_aggregator_finish_buffer (GST_AGGREGATOR (mux), buf);
   mux->offset += size;
 
   return ret;
@@ -99,21 +152,24 @@
 {
   GObjectClass *gobject_class;
   GstElementClass *gstelement_class;
+  GstAggregatorClass *gstaggregator_class;
   const GstPadTemplate **p;
 
   GST_DEBUG_CATEGORY_INIT (mxfmux_debug, "mxfmux", 0, "MXF muxer");
 
   gobject_class = (GObjectClass *) klass;
   gstelement_class = (GstElementClass *) klass;
+  gstaggregator_class = (GstAggregatorClass *) klass;
 
   gobject_class->finalize = gst_mxf_mux_finalize;
-  gobject_class->set_property = gst_mxf_mux_set_property;
-  gobject_class->get_property = gst_mxf_mux_get_property;
 
-  gstelement_class->change_state = GST_DEBUG_FUNCPTR (gst_mxf_mux_change_state);
-  gstelement_class->request_new_pad =
-      GST_DEBUG_FUNCPTR (gst_mxf_mux_request_new_pad);
-  gstelement_class->release_pad = GST_DEBUG_FUNCPTR (gst_mxf_mux_release_pad);
+  gstaggregator_class->create_new_pad =
+      GST_DEBUG_FUNCPTR (gst_mxf_mux_create_new_pad);
+  gstaggregator_class->src_event = GST_DEBUG_FUNCPTR (gst_mxf_mux_src_event);
+  gstaggregator_class->sink_event = GST_DEBUG_FUNCPTR (gst_mxf_mux_sink_event);
+  gstaggregator_class->stop = GST_DEBUG_FUNCPTR (gst_mxf_mux_stop);
+  gstaggregator_class->aggregate = GST_DEBUG_FUNCPTR (gst_mxf_mux_aggregate);
+  gstaggregator_class->sinkpads_type = GST_TYPE_MXF_MUX_PAD;
 
   gst_element_class_add_pad_template (gstelement_class,
       gst_static_pad_template_get (&src_templ));
@@ -134,21 +190,7 @@
 static void
 gst_mxf_mux_init (GstMXFMux * mux)
 {
-  GstCaps *caps;
-
-  mux->srcpad = gst_pad_new_from_static_template (&src_templ, "src");
-  gst_pad_set_event_function (mux->srcpad, gst_mxf_mux_handle_src_event);
-  caps = gst_caps_new_empty_simple ("application/mxf");
-  gst_pad_set_caps (mux->srcpad, caps);
-  gst_caps_unref (caps);
-  gst_element_add_pad (GST_ELEMENT (mux), mux->srcpad);
-
-  mux->collect = gst_collect_pads_new ();
-  gst_collect_pads_set_event_function (mux->collect,
-      GST_DEBUG_FUNCPTR (gst_mxf_mux_handle_sink_event), mux);
-  gst_collect_pads_set_function (mux->collect,
-      GST_DEBUG_FUNCPTR (gst_mxf_mux_collected), mux);
-
+  mux->index_table = g_array_new (FALSE, FALSE, sizeof (MXFIndexTableSegment));
   gst_mxf_mux_reset (mux);
 }
 
@@ -166,50 +208,30 @@
     mux->metadata_list = NULL;
   }
 
-  gst_object_unref (mux->collect);
+  if (mux->index_table) {
+    g_array_free (mux->index_table, TRUE);
+    mux->index_table = NULL;
+  }
 
   G_OBJECT_CLASS (parent_class)->finalize (object);
 }
 
 static void
-gst_mxf_mux_set_property (GObject * object,
-    guint prop_id, const GValue * value, GParamSpec * pspec)
-{
-  //GstMXFMux *mux = GST_MXF_MUX (object);
-
-  switch (prop_id) {
-    default:
-      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
-      break;
-  }
-}
-
-static void
-gst_mxf_mux_get_property (GObject * object,
-    guint prop_id, GValue * value, GParamSpec * pspec)
-{
-  //GstMXFMux *mux = GST_MXF_MUX (object);
-
-  switch (prop_id) {
-    default:
-      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
-      break;
-  }
-}
-
-static void
 gst_mxf_mux_reset (GstMXFMux * mux)
 {
-  GSList *sl;
+  GList *l;
 
-  while ((sl = mux->collect->data) != NULL) {
-    GstMXFMuxPad *cpad = (GstMXFMuxPad *) sl->data;
+  GST_OBJECT_LOCK (mux);
+  while ((l = GST_ELEMENT_CAST (mux)->sinkpads) != NULL) {
+    GstPad *pad = (GstPad *) l->data;
 
-    g_object_unref (cpad->adapter);
-    g_free (cpad->mapping_data);
-
-    gst_collect_pads_remove_pad (mux->collect, cpad->collect.pad);
+    gst_object_ref (pad);
+    GST_OBJECT_UNLOCK (mux);
+    gst_element_release_request_pad (GST_ELEMENT_CAST (mux), pad);
+    gst_object_unref (pad);
+    GST_OBJECT_LOCK (mux);
   }
+  GST_OBJECT_UNLOCK (mux);
 
   mux->state = GST_MXF_MUX_STATE_HEADER;
   mux->n_pads = 0;
@@ -228,35 +250,32 @@
   mux->last_gc_timestamp = 0;
   mux->last_gc_position = 0;
   mux->offset = 0;
+
+  g_array_set_size (mux->index_table, 0);
 }
 
 static gboolean
-gst_mxf_mux_handle_src_event (GstPad * pad, GstObject * parent,
-    GstEvent * event)
+gst_mxf_mux_src_event (GstAggregator * aggregator, GstEvent * event)
 {
-  GstEventType type;
-
-  type = event ? GST_EVENT_TYPE (event) : GST_EVENT_UNKNOWN;
-
-  switch (type) {
+  switch (GST_EVENT_TYPE (event)) {
     case GST_EVENT_SEEK:
       /* disable seeking for now */
+      gst_event_unref (event);
       return FALSE;
     default:
+      return GST_AGGREGATOR_CLASS (parent_class)->src_event (aggregator, event);
       break;
   }
 
-  return gst_pad_event_default (pad, parent, event);
+  g_assert_not_reached ();
 }
 
 static gboolean
-gst_mxf_mux_event_caps (GstPad * pad, GstCaps * caps)
+gst_mxf_mux_set_caps (GstMXFMux * mux, GstMXFMuxPad * pad, GstCaps * caps)
 {
-  GstMXFMux *mux = GST_MXF_MUX (gst_pad_get_parent (pad));
-  GstMXFMuxPad *cpad = (GstMXFMuxPad *) gst_pad_get_element_private (pad);
   gboolean ret = TRUE;
   MXFUUID d_instance_uid = { {0,} };
-  MXFMetadataFileDescriptor *old_descriptor = cpad->descriptor;
+  MXFMetadataFileDescriptor *old_descriptor = pad->descriptor;
   GList *l;
 
   GST_DEBUG_OBJECT (pad, "Setting caps %" GST_PTR_FORMAT, caps);
@@ -264,27 +283,26 @@
   if (old_descriptor) {
     memcpy (&d_instance_uid, &MXF_METADATA_BASE (old_descriptor)->instance_uid,
         16);
-    cpad->descriptor = NULL;
-    g_free (cpad->mapping_data);
-    cpad->mapping_data = NULL;
+    pad->descriptor = NULL;
+    g_free (pad->mapping_data);
+    pad->mapping_data = NULL;
   }
 
-  cpad->descriptor =
-      cpad->writer->get_descriptor (GST_PAD_PAD_TEMPLATE (pad), caps,
-      &cpad->write_func, &cpad->mapping_data);
+  pad->descriptor =
+      pad->writer->get_descriptor (GST_PAD_PAD_TEMPLATE (pad), caps,
+      &pad->write_func, &pad->mapping_data);
 
-  if (!cpad->descriptor) {
+  if (!pad->descriptor) {
     GST_ERROR_OBJECT (mux,
         "Couldn't get descriptor for pad '%s' with caps %" GST_PTR_FORMAT,
         GST_PAD_NAME (pad), caps);
-    gst_object_unref (mux);
     return FALSE;
   }
 
   if (mxf_uuid_is_zero (&d_instance_uid))
     mxf_uuid_init (&d_instance_uid, mux->metadata);
 
-  memcpy (&MXF_METADATA_BASE (cpad->descriptor)->instance_uid, &d_instance_uid,
+  memcpy (&MXF_METADATA_BASE (pad->descriptor)->instance_uid, &d_instance_uid,
       16);
 
   if (old_descriptor) {
@@ -292,16 +310,16 @@
       MXFMetadataBase *tmp = l->data;
 
       if (mxf_uuid_is_equal (&d_instance_uid, &tmp->instance_uid)) {
-        l->data = cpad->descriptor;
+        l->data = pad->descriptor;
         break;
       }
     }
   } else {
-    mux->metadata_list = g_list_prepend (mux->metadata_list, cpad->descriptor);
+    mux->metadata_list = g_list_prepend (mux->metadata_list, pad->descriptor);
   }
 
   g_hash_table_replace (mux->metadata,
-      &MXF_METADATA_BASE (cpad->descriptor)->instance_uid, cpad->descriptor);
+      &MXF_METADATA_BASE (pad->descriptor)->instance_uid, pad->descriptor);
 
   if (old_descriptor) {
     if (mux->preface && mux->preface->content_storage &&
@@ -330,55 +348,52 @@
             if (tmp->sub_descriptors[j] ==
                 MXF_METADATA_GENERIC_DESCRIPTOR (old_descriptor)) {
               tmp->sub_descriptors[j] =
-                  MXF_METADATA_GENERIC_DESCRIPTOR (cpad->descriptor);
+                  MXF_METADATA_GENERIC_DESCRIPTOR (pad->descriptor);
               memcpy (&tmp->sub_descriptors_uids[j], &d_instance_uid, 16);
             }
           }
         } else if (package->descriptor ==
             MXF_METADATA_GENERIC_DESCRIPTOR (old_descriptor)) {
           package->descriptor =
-              MXF_METADATA_GENERIC_DESCRIPTOR (cpad->descriptor);
+              MXF_METADATA_GENERIC_DESCRIPTOR (pad->descriptor);
           memcpy (&package->descriptor_uid, &d_instance_uid, 16);
         }
       }
     }
   }
 
-  gst_object_unref (mux);
-
   return ret;
 }
 
 static gboolean
-gst_mxf_mux_handle_sink_event (GstCollectPads * pads, GstCollectData * data,
-    GstEvent * event, gpointer user_data)
+gst_mxf_mux_sink_event (GstAggregator * aggregator,
+    GstAggregatorPad * aggpad, GstEvent * event)
 {
-  GstCaps *caps;
+  GstMXFMux *mux = GST_MXF_MUX (aggregator);
   gboolean ret = TRUE;
 
   switch (GST_EVENT_TYPE (event)) {
     case GST_EVENT_TAG:
       /* TODO: do something with the tags */
       break;
-    case GST_EVENT_SEGMENT:
-      /* We don't support SEGMENT events */
-      ret = FALSE;
-      gst_event_unref (event);
-      break;
-    case GST_EVENT_CAPS:
+    case GST_EVENT_CAPS:{
+      GstCaps *caps;
+
       gst_event_parse_caps (event, &caps);
 
-      gst_mxf_mux_event_caps (data->pad, caps);
+      ret = gst_mxf_mux_set_caps (mux, GST_MXF_MUX_PAD (aggpad), caps);
 
-      gst_caps_unref (caps);
       break;
+    }
     default:
       break;
   }
 
-  /* now GstCollectPads can take care of the rest, e.g. EOS */
+  /* now GstAggregator can take care of the rest, e.g. EOS */
   if (ret)
-    ret = gst_collect_pads_event_default (pads, data, event, FALSE);
+    ret =
+        GST_AGGREGATOR_CLASS (parent_class)->sink_event (aggregator, aggpad,
+        event);
 
   return ret;
 }
@@ -395,13 +410,12 @@
   return g_string_free (string, FALSE);
 }
 
-static GstPad *
-gst_mxf_mux_request_new_pad (GstElement * element,
+static GstAggregatorPad *
+gst_mxf_mux_create_new_pad (GstAggregator * aggregator,
     GstPadTemplate * templ, const gchar * pad_name, const GstCaps * caps)
 {
-  GstMXFMux *mux = GST_MXF_MUX (element);
-  GstMXFMuxPad *cpad;
-  GstPad *pad = NULL;
+  GstMXFMux *mux = GST_MXF_MUX (aggregator);
+  GstMXFMuxPad *pad;
   guint pad_number;
   gchar *name = NULL;
   const MXFEssenceElementWriter *writer;
@@ -420,58 +434,52 @@
   name = gst_mxf_mux_create_pad_name (templ, pad_number);
 
   GST_DEBUG_OBJECT (mux, "Creating pad '%s'", name);
-  pad = gst_pad_new_from_template (templ, name);
+  pad =
+      g_object_new (GST_TYPE_MXF_MUX_PAD, "name", name, "direction",
+      GST_PAD_SINK, "template", templ, NULL);
   g_free (name);
-  cpad = (GstMXFMuxPad *)
-      gst_collect_pads_add_pad (mux->collect, pad, sizeof (GstMXFMuxPad), NULL,
-      TRUE);
-  cpad->last_timestamp = 0;
-  cpad->adapter = gst_adapter_new ();
-  cpad->writer = writer;
+  pad->last_timestamp = 0;
+  pad->adapter = gst_adapter_new ();
+  pad->writer = writer;
 
-  gst_pad_use_fixed_caps (pad);
-  gst_pad_set_active (pad, TRUE);
-  gst_element_add_pad (element, pad);
+  gst_pad_use_fixed_caps (GST_PAD_CAST (pad));
 
-  return pad;
-}
-
-static void
-gst_mxf_mux_release_pad (GstElement * element, GstPad * pad)
-{
-  /*GstMXFMux *mux = GST_MXF_MUX (GST_PAD_PARENT (pad));
-     GstMXFMuxPad *cpad = (GstMXFMuxPad *) gst_pad_get_element_private (pad);
-
-     g_object_unref (cpad->adapter);
-     g_free (cpad->mapping_data);
-
-     gst_collect_pads_remove_pad (mux->collect, pad);
-     gst_element_remove_pad (element, pad); */
+  return GST_AGGREGATOR_PAD (pad);
 }
 
 static GstFlowReturn
 gst_mxf_mux_create_metadata (GstMXFMux * mux)
 {
   GstFlowReturn ret = GST_FLOW_OK;
-  GSList *l;
+  GList *l;
   GArray *tmp;
 
   GST_DEBUG_OBJECT (mux, "Creating MXF metadata");
 
-  for (l = mux->collect->data; l; l = l->next) {
-    GstMXFMuxPad *cpad = l->data;
+  GST_OBJECT_LOCK (mux);
+
+  for (l = GST_ELEMENT_CAST (mux)->sinkpads; l; l = l->next) {
+    GstMXFMuxPad *pad = l->data;
     GstCaps *caps;
+    GstBuffer *buffer;
 
-    if (!cpad || !cpad->descriptor)
+    if (!pad || !pad->descriptor) {
+      GST_OBJECT_UNLOCK (mux);
       return GST_FLOW_ERROR;
+    }
 
-    caps = gst_pad_get_current_caps (cpad->collect.pad);
-    if (!caps)
+    caps = gst_pad_get_current_caps (GST_PAD_CAST (pad));
+    if (!caps) {
+      GST_OBJECT_UNLOCK (mux);
       return GST_FLOW_ERROR;
+    }
 
-    if (cpad->writer->update_descriptor)
-      cpad->writer->update_descriptor (cpad->descriptor,
-          caps, cpad->mapping_data, cpad->collect.buffer);
+    buffer = gst_aggregator_pad_get_buffer (GST_AGGREGATOR_PAD (pad));
+    if (pad->writer->update_descriptor)
+      pad->writer->update_descriptor (pad->descriptor,
+          caps, pad->mapping_data, buffer);
+    if (buffer)
+      gst_buffer_unref (buffer);
     gst_caps_unref (caps);
   }
 
@@ -492,17 +500,19 @@
       TRUE, FALSE);
 
   tmp = g_array_new (FALSE, FALSE, sizeof (MXFUL));
-  for (l = mux->collect->data; l; l = l->next) {
-    GstMXFMuxPad *cpad = l->data;
+  for (l = GST_ELEMENT_CAST (mux)->sinkpads; l; l = l->next) {
+    GstMXFMuxPad *pad = l->data;
     guint i;
     gboolean found = FALSE;
 
-    if (!cpad || !cpad->descriptor ||
-        mxf_ul_is_zero (&cpad->descriptor->essence_container))
+    if (!pad || !pad->descriptor ||
+        mxf_ul_is_zero (&pad->descriptor->essence_container)) {
+      GST_OBJECT_UNLOCK (mux);
       return GST_FLOW_ERROR;
+    }
 
     for (i = 0; i < tmp->len; i++) {
-      if (mxf_ul_is_equal (&cpad->descriptor->essence_container,
+      if (mxf_ul_is_equal (&pad->descriptor->essence_container,
               &g_array_index (tmp, MXFUL, i))) {
         found = TRUE;
         break;
@@ -512,7 +522,7 @@
     if (found)
       continue;
 
-    g_array_append_val (tmp, cpad->descriptor->essence_container);
+    g_array_append_val (tmp, pad->descriptor->essence_container);
   }
   mux->preface->n_essence_containers = tmp->len;
   mux->preface->essence_containers = (MXFUL *) g_array_free (tmp, FALSE);
@@ -623,18 +633,18 @@
       memcpy (&p->parent.package_modified_date,
           &mux->preface->last_modified_date, sizeof (MXFTimestamp));
 
-      p->parent.n_tracks = g_slist_length (mux->collect->data);
+      p->parent.n_tracks = GST_ELEMENT_CAST (mux)->numsinkpads + 1;
       p->parent.tracks = g_new0 (MXFMetadataTrack *, p->parent.n_tracks);
 
-      if (p->parent.n_tracks > 1) {
+      if (p->parent.n_tracks > 2) {
         MXFMetadataMultipleDescriptor *d;
 
         p->descriptor = (MXFMetadataGenericDescriptor *)
             g_object_new (MXF_TYPE_METADATA_MULTIPLE_DESCRIPTOR, NULL);
         d = (MXFMetadataMultipleDescriptor *) p->descriptor;
-        d->n_sub_descriptors = p->parent.n_tracks;
+        d->n_sub_descriptors = p->parent.n_tracks - 1;
         d->sub_descriptors =
-            g_new0 (MXFMetadataGenericDescriptor *, p->parent.n_tracks);
+            g_new0 (MXFMetadataGenericDescriptor *, p->parent.n_tracks - 1);
 
         mxf_uuid_init (&MXF_METADATA_BASE (d)->instance_uid, mux->metadata);
         g_hash_table_insert (mux->metadata,
@@ -644,15 +654,18 @@
 
       /* Tracks */
       {
-        guint n = 0;
+        guint n;
+
+        n = 1;
 
         /* Essence tracks */
-        for (l = mux->collect->data; l; l = l->next) {
-          GstMXFMuxPad *cpad = l->data;
+        for (l = GST_ELEMENT_CAST (mux)->sinkpads; l; l = l->next) {
+          GstMXFMuxPad *pad = l->data;
           MXFMetadataTimelineTrack *track;
           MXFMetadataSequence *sequence;
           MXFMetadataSourceClip *clip;
           GstCaps *caps;
+          GstBuffer *buffer;
 
           p->parent.tracks[n] = (MXFMetadataTrack *)
               g_object_new (MXF_TYPE_METADATA_TIMELINE_TRACK, NULL);
@@ -663,15 +676,21 @@
               &MXF_METADATA_BASE (track)->instance_uid, track);
           mux->metadata_list = g_list_prepend (mux->metadata_list, track);
 
-          caps = gst_pad_get_current_caps (cpad->collect.pad);
+          caps = gst_pad_get_current_caps (GST_PAD_CAST (pad));
+          buffer = gst_aggregator_pad_get_buffer (GST_AGGREGATOR_PAD (pad));
           track->parent.track_id = n + 1;
           track->parent.track_number =
-              cpad->writer->get_track_number_template (cpad->descriptor,
-              caps, cpad->mapping_data);
+              pad->writer->get_track_number_template (pad->descriptor,
+              caps, pad->mapping_data);
 
-          cpad->writer->get_edit_rate (cpad->descriptor,
-              caps, cpad->mapping_data,
-              cpad->collect.buffer, p, track, &track->edit_rate);
+          /* FIXME: All tracks in a source package must have the same edit
+           * rate! This means that if we have different edit rates, we need to
+           * make them different source packages and essence containers with
+           * a different BodySID */
+          pad->writer->get_edit_rate (pad->descriptor,
+              caps, pad->mapping_data, buffer, p, track, &track->edit_rate);
+          if (buffer)
+            gst_buffer_unref (buffer);
           gst_caps_unref (caps);
 
           sequence = track->parent.sequence = (MXFMetadataSequence *)
@@ -682,7 +701,7 @@
               &MXF_METADATA_BASE (sequence)->instance_uid, sequence);
           mux->metadata_list = g_list_prepend (mux->metadata_list, sequence);
 
-          memcpy (&sequence->data_definition, &cpad->writer->data_definition,
+          memcpy (&sequence->data_definition, &pad->writer->data_definition,
               16);
 
           sequence->n_structural_components = 1;
@@ -703,15 +722,15 @@
               16);
           clip->start_position = 0;
 
-          cpad->source_package = p;
-          cpad->source_track = track;
-          cpad->descriptor->linked_track_id = n + 1;
-          if (p->parent.n_tracks == 1) {
-            p->descriptor = (MXFMetadataGenericDescriptor *) cpad->descriptor;
+          pad->source_package = p;
+          pad->source_track = track;
+          pad->descriptor->linked_track_id = n + 1;
+          if (p->parent.n_tracks == 2) {
+            p->descriptor = (MXFMetadataGenericDescriptor *) pad->descriptor;
           } else {
             MXF_METADATA_MULTIPLE_DESCRIPTOR (p->
-                descriptor)->sub_descriptors[n] =
-                (MXFMetadataGenericDescriptor *) cpad->descriptor;
+                descriptor)->sub_descriptors[n - 1] =
+                (MXFMetadataGenericDescriptor *) pad->descriptor;
           }
 
           n++;
@@ -743,7 +762,7 @@
       memcpy (&p->package_modified_date, &mux->preface->last_modified_date,
           sizeof (MXFTimestamp));
 
-      p->n_tracks = g_slist_length (mux->collect->data) + 1;
+      p->n_tracks = GST_ELEMENT_CAST (mux)->numsinkpads + 1;
       p->tracks = g_new0 (MXFMetadataTrack *, p->n_tracks);
 
       /* Tracks */
@@ -752,9 +771,10 @@
 
         n = 1;
         /* Essence tracks */
-        for (l = mux->collect->data; l; l = l->next) {
-          GstMXFMuxPad *cpad = l->data;
+        for (l = GST_ELEMENT_CAST (mux)->sinkpads; l; l = l->next) {
+          GstMXFMuxPad *pad = l->data;
           GstCaps *caps;
+          GstBuffer *buffer;
           MXFMetadataSourcePackage *source_package;
           MXFMetadataTimelineTrack *track, *source_track;
           MXFMetadataSequence *sequence;
@@ -762,8 +782,7 @@
 
           source_package = MXF_METADATA_SOURCE_PACKAGE (cstorage->packages[1]);
           source_track =
-              MXF_METADATA_TIMELINE_TRACK (source_package->parent.tracks[n -
-                  1]);
+              MXF_METADATA_TIMELINE_TRACK (source_package->parent.tracks[n]);
 
           p->tracks[n] = (MXFMetadataTrack *)
               g_object_new (MXF_TYPE_METADATA_TIMELINE_TRACK, NULL);
@@ -777,11 +796,13 @@
           track->parent.track_id = n + 1;
           track->parent.track_number = 0;
 
-          caps = gst_pad_get_current_caps (cpad->collect.pad);
-          cpad->writer->get_edit_rate (cpad->descriptor,
-              caps, cpad->mapping_data,
-              cpad->collect.buffer, source_package, source_track,
-              &track->edit_rate);
+          caps = gst_pad_get_current_caps (GST_PAD_CAST (pad));
+          buffer = gst_aggregator_pad_get_buffer (GST_AGGREGATOR_PAD (pad));
+          pad->writer->get_edit_rate (pad->descriptor,
+              caps, pad->mapping_data,
+              buffer, source_package, source_track, &track->edit_rate);
+          if (buffer)
+            gst_buffer_unref (buffer);
           gst_caps_unref (caps);
 
           if (track->edit_rate.n != source_track->edit_rate.n ||
@@ -792,6 +813,7 @@
 
           if (track->edit_rate.d <= 0 || track->edit_rate.n <= 0) {
             GST_ERROR_OBJECT (mux, "Invalid edit rate");
+            GST_OBJECT_UNLOCK (mux);
             return GST_FLOW_ERROR;
           }
 
@@ -810,7 +832,7 @@
               &MXF_METADATA_BASE (sequence)->instance_uid, sequence);
           mux->metadata_list = g_list_prepend (mux->metadata_list, sequence);
 
-          memcpy (&sequence->data_definition, &cpad->writer->data_definition,
+          memcpy (&sequence->data_definition, &pad->writer->data_definition,
               16);
           sequence->n_structural_components = 1;
           sequence->structural_components =
@@ -832,7 +854,7 @@
 
           memcpy (&clip->source_package_id, &cstorage->packages[1]->package_uid,
               32);
-          clip->source_track_id = n;
+          clip->source_track_id = n + 1;
 
           n++;
         }
@@ -902,7 +924,71 @@
       }
     }
 
-    for (i = 0; i < cstorage->packages[1]->n_tracks; i++) {
+    /* Timecode track */
+    {
+      MXFMetadataSourcePackage *p;
+      MXFMetadataTimelineTrack *track;
+      MXFMetadataSequence *sequence;
+      MXFMetadataTimecodeComponent *component;
+      guint n = 0;
+
+      p = (MXFMetadataSourcePackage *) cstorage->packages[1];
+
+      p->parent.tracks[n] = (MXFMetadataTrack *)
+          g_object_new (MXF_TYPE_METADATA_TIMELINE_TRACK, NULL);
+      track = (MXFMetadataTimelineTrack *) p->parent.tracks[n];
+      mxf_uuid_init (&MXF_METADATA_BASE (track)->instance_uid, mux->metadata);
+      g_hash_table_insert (mux->metadata,
+          &MXF_METADATA_BASE (track)->instance_uid, track);
+      mux->metadata_list = g_list_prepend (mux->metadata_list, track);
+
+      track->parent.track_id = n + 1;
+      track->parent.track_number = 0;
+      track->parent.track_name = g_strdup ("Timecode track");
+      /* FIXME: Is this correct? */
+      memcpy (&track->edit_rate, &mux->min_edit_rate, sizeof (MXFFraction));
+
+      sequence = track->parent.sequence = (MXFMetadataSequence *)
+          g_object_new (MXF_TYPE_METADATA_SEQUENCE, NULL);
+      mxf_uuid_init (&MXF_METADATA_BASE (sequence)->instance_uid,
+          mux->metadata);
+      g_hash_table_insert (mux->metadata,
+          &MXF_METADATA_BASE (sequence)->instance_uid, sequence);
+      mux->metadata_list = g_list_prepend (mux->metadata_list, sequence);
+
+      memcpy (&sequence->data_definition,
+          mxf_metadata_track_identifier_get
+          (MXF_METADATA_TRACK_TIMECODE_12M_INACTIVE), 16);
+
+      sequence->n_structural_components = 1;
+      sequence->structural_components =
+          g_new0 (MXFMetadataStructuralComponent *, 1);
+
+      component = (MXFMetadataTimecodeComponent *)
+          g_object_new (MXF_TYPE_METADATA_TIMECODE_COMPONENT, NULL);
+      sequence->structural_components[0] =
+          (MXFMetadataStructuralComponent *) component;
+      mxf_uuid_init (&MXF_METADATA_BASE (component)->instance_uid,
+          mux->metadata);
+      g_hash_table_insert (mux->metadata,
+          &MXF_METADATA_BASE (component)->instance_uid, component);
+      mux->metadata_list = g_list_prepend (mux->metadata_list, component);
+
+      memcpy (&component->parent.data_definition,
+          &sequence->data_definition, 16);
+
+      component->start_timecode = 0;
+      if (track->edit_rate.d == 0)
+        component->rounded_timecode_base = 1;
+      else
+        component->rounded_timecode_base =
+            (((gdouble) track->edit_rate.n) /
+            ((gdouble) track->edit_rate.d) + 0.5);
+      /* TODO: drop frame */
+    }
+
+
+    for (i = 1; i < cstorage->packages[1]->n_tracks; i++) {
       MXFMetadataTrack *track = cstorage->packages[1]->tracks[i];
       guint j;
       guint32 templ;
@@ -914,7 +1000,7 @@
       templ = track->track_number;
       n_type = 0;
 
-      for (j = 0; j < cstorage->packages[1]->n_tracks; j++) {
+      for (j = 1; j < cstorage->packages[1]->n_tracks; j++) {
         MXFMetadataTrack *tmp = cstorage->packages[1]->tracks[j];
 
         if (tmp->track_number == templ) {
@@ -923,7 +1009,7 @@
       }
 
       n = 0;
-      for (j = 0; j < cstorage->packages[1]->n_tracks; j++) {
+      for (j = 1; j < cstorage->packages[1]->n_tracks; j++) {
         MXFMetadataTrack *tmp = cstorage->packages[1]->tracks[j];
 
         if (tmp->track_number == templ) {
@@ -949,7 +1035,7 @@
 
     cstorage->essence_container_data[0]->linked_package =
         MXF_METADATA_SOURCE_PACKAGE (cstorage->packages[1]);
-    cstorage->essence_container_data[0]->index_sid = 0;
+    cstorage->essence_container_data[0]->index_sid = 2;
     cstorage->essence_container_data[0]->body_sid = 1;
   }
 
@@ -988,6 +1074,8 @@
     }
   }
 
+  GST_OBJECT_UNLOCK (mux);
+
   mux->metadata_list = g_list_reverse (mux->metadata_list);
 
   return ret;
@@ -996,7 +1084,7 @@
 static GstFlowReturn
 gst_mxf_mux_init_partition_pack (GstMXFMux * mux)
 {
-  GSList *l;
+  GList *l;
   guint i = 0;
 
   mxf_partition_pack_reset (&mux->partition);
@@ -1004,7 +1092,7 @@
   mux->partition.closed = mux->partition.complete = FALSE;
   mux->partition.major_version = 0x0001;
   mux->partition.minor_version = 0x0002;
-  mux->partition.kag_size = 0;
+  mux->partition.kag_size = 1;
   mux->partition.this_partition = 0;
   mux->partition.prev_partition = 0;
   mux->partition.footer_partition = 0;
@@ -1017,17 +1105,18 @@
   memcpy (&mux->partition.operational_pattern,
       &mux->preface->operational_pattern, 16);
 
-  mux->partition.n_essence_containers = g_slist_length (mux->collect->data);
+  GST_OBJECT_LOCK (mux);
+  mux->partition.n_essence_containers = GST_ELEMENT_CAST (mux)->numsinkpads;
   mux->partition.essence_containers =
       g_new0 (MXFUL, mux->partition.n_essence_containers);
 
-  for (l = mux->collect->data; l; l = l->next) {
-    GstMXFMuxPad *cpad = l->data;
+  for (l = GST_ELEMENT_CAST (mux)->sinkpads; l; l = l->next) {
+    GstMXFMuxPad *pad = l->data;
     guint j;
     gboolean found = FALSE;
 
     for (j = 0; j <= i; j++) {
-      if (mxf_ul_is_equal (&cpad->descriptor->essence_container,
+      if (mxf_ul_is_equal (&pad->descriptor->essence_container,
               &mux->partition.essence_containers[j])) {
         found = TRUE;
         break;
@@ -1038,10 +1127,11 @@
       continue;
 
     memcpy (&mux->partition.essence_containers[i],
-        &cpad->descriptor->essence_container, 16);
+        &pad->descriptor->essence_container, 16);
     i++;
   }
   mux->partition.n_essence_containers = i;
+  GST_OBJECT_UNLOCK (mux);
 
   return GST_FLOW_OK;
 }
@@ -1096,93 +1186,138 @@
 }
 
 static const guint8 _gc_essence_element_ul[] = {
-  0x06, 0x0e, 0x2b, 0x34, 0x01, 0x02, 0x01, 0x00,
+  0x06, 0x0e, 0x2b, 0x34, 0x01, 0x02, 0x01, 0x01,
   0x0d, 0x01, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00
 };
 
 static GstFlowReturn
-gst_mxf_mux_handle_buffer (GstMXFMux * mux, GstMXFMuxPad * cpad)
+gst_mxf_mux_handle_buffer (GstMXFMux * mux, GstMXFMuxPad * pad)
 {
-  GstBuffer *buf = NULL;
+  GstBuffer *buf = gst_aggregator_pad_get_buffer (GST_AGGREGATOR_PAD (pad));
   GstBuffer *outbuf = NULL;
-  GstBuffer *packet;
   GstMapInfo map;
-  GstMapInfo readmap;
+  gsize buf_size;
   GstFlowReturn ret = GST_FLOW_OK;
   guint8 slen, ber[9];
-  gboolean flush = ((cpad->collect.state & GST_COLLECT_PADS_STATE_EOS)
-      && !cpad->have_complete_edit_unit && cpad->collect.buffer == NULL);
+  gboolean flush = gst_aggregator_pad_is_eos (GST_AGGREGATOR_PAD (pad))
+      && !pad->have_complete_edit_unit && buf == NULL;
+  gboolean is_keyframe = buf ?
+      !GST_BUFFER_FLAG_IS_SET (buf, GST_BUFFER_FLAG_DELTA_UNIT) : TRUE;
 
-  if (cpad->have_complete_edit_unit) {
-    GST_DEBUG_OBJECT (cpad->collect.pad,
+  if (pad->have_complete_edit_unit) {
+    GST_DEBUG_OBJECT (pad,
         "Handling remaining buffer for track %u at position %" G_GINT64_FORMAT,
-        cpad->source_track->parent.track_id, cpad->pos);
+        pad->source_track->parent.track_id, pad->pos);
+    if (buf)
+      gst_buffer_unref (buf);
     buf = NULL;
   } else if (!flush) {
-    buf = gst_collect_pads_pop (mux->collect, &cpad->collect);
+    if (buf)
+      gst_buffer_unref (buf);
+    buf = gst_aggregator_pad_steal_buffer (GST_AGGREGATOR_PAD (pad));
   }
 
   if (buf) {
-    GST_DEBUG_OBJECT (cpad->collect.pad,
+    GST_DEBUG_OBJECT (pad,
         "Handling buffer of size %" G_GSIZE_FORMAT " for track %u at position %"
         G_GINT64_FORMAT, gst_buffer_get_size (buf),
-        cpad->source_track->parent.track_id, cpad->pos);
+        pad->source_track->parent.track_id, pad->pos);
   } else {
     flush = TRUE;
-    GST_DEBUG_OBJECT (cpad->collect.pad,
+    GST_DEBUG_OBJECT (pad,
         "Flushing for track %u at position %" G_GINT64_FORMAT,
-        cpad->source_track->parent.track_id, cpad->pos);
+        pad->source_track->parent.track_id, pad->pos);
   }
 
-  ret = cpad->write_func (buf,
-      cpad->mapping_data, cpad->adapter, &outbuf, flush);
+  ret = pad->write_func (buf, pad->mapping_data, pad->adapter, &outbuf, flush);
   if (ret != GST_FLOW_OK && ret != GST_FLOW_CUSTOM_SUCCESS) {
-    GST_ERROR_OBJECT (cpad->collect.pad,
+    GST_ERROR_OBJECT (pad,
         "Failed handling buffer for track %u, reason %s",
-        cpad->source_track->parent.track_id, gst_flow_get_name (ret));
+        pad->source_track->parent.track_id, gst_flow_get_name (ret));
     return ret;
   }
 
   if (ret == GST_FLOW_CUSTOM_SUCCESS) {
-    cpad->have_complete_edit_unit = TRUE;
+    pad->have_complete_edit_unit = TRUE;
     ret = GST_FLOW_OK;
   } else {
-    cpad->have_complete_edit_unit = FALSE;
+    pad->have_complete_edit_unit = FALSE;
   }
 
   buf = outbuf;
   if (buf == NULL)
     return ret;
 
-  gst_buffer_map (buf, &readmap, GST_MAP_READ);
-  slen = mxf_ber_encode_size (readmap.size, ber);
-  packet = gst_buffer_new_and_alloc (16 + slen + readmap.size);
-  gst_buffer_map (packet, &map, GST_MAP_WRITE);
+  /* We currently only index the first essence stream */
+  if (pad == (GstMXFMuxPad *) GST_ELEMENT_CAST (mux)->sinkpads->data) {
+    MXFIndexTableSegment *segment;
+    const gint max_segment_size = G_MAXUINT16 / 11;
+
+    if (mux->index_table->len == 0 ||
+        g_array_index (mux->index_table, MXFIndexTableSegment,
+            mux->index_table->len - 1).index_duration >= max_segment_size) {
+      MXFIndexTableSegment s;
+
+      memset (&segment, 0, sizeof (segment));
+
+      mxf_uuid_init (&s.instance_id, mux->metadata);
+      memcpy (&s.index_edit_rate, &pad->source_track->edit_rate,
+          sizeof (s.index_edit_rate));
+      s.index_start_position = pad->pos;
+      s.index_duration = 0;
+      s.edit_unit_byte_count = 0;
+      s.index_sid =
+          mux->preface->content_storage->essence_container_data[0]->index_sid;
+      s.body_sid =
+          mux->preface->content_storage->essence_container_data[0]->body_sid;
+      s.slice_count = 0;
+      s.pos_table_count = 0;
+      s.n_delta_entries = 0;
+      s.delta_entries = NULL;
+      s.n_index_entries = 0;
+      s.index_entries = g_new0 (MXFIndexEntry, max_segment_size);
+      g_array_append_val (mux->index_table, s);
+    }
+    segment =
+        &g_array_index (mux->index_table, MXFIndexTableSegment,
+        mux->index_table->len - 1);
+
+    segment->index_entries[segment->n_index_entries].temporal_offset = 0;
+    segment->index_entries[segment->n_index_entries].key_frame_offset = 0;
+    segment->index_entries[segment->n_index_entries].flags = is_keyframe ? 0x80 : 0x20; /* FIXME: Need to distinguish all the cases */
+    segment->index_entries[segment->n_index_entries].stream_offset =
+        mux->partition.body_offset;
+
+    segment->n_index_entries++;
+    segment->index_duration++;
+  }
+
+  buf_size = gst_buffer_get_size (buf);
+  slen = mxf_ber_encode_size (buf_size, ber);
+  outbuf = gst_buffer_new_and_alloc (16 + slen);
+  gst_buffer_map (outbuf, &map, GST_MAP_WRITE);
   memcpy (map.data, _gc_essence_element_ul, 16);
-  map.data[7] = cpad->descriptor->essence_container.u[7];
-  GST_WRITE_UINT32_BE (map.data + 12, cpad->source_track->parent.track_number);
+  GST_WRITE_UINT32_BE (map.data + 12, pad->source_track->parent.track_number);
   memcpy (map.data + 16, ber, slen);
-  memcpy (map.data + 16 + slen, readmap.data, readmap.size);
-  gst_buffer_unmap (buf, &readmap);
+  gst_buffer_unmap (outbuf, &map);
+  outbuf = gst_buffer_append (outbuf, buf);
 
-  gst_buffer_unref (buf);
+  GST_DEBUG_OBJECT (pad,
+      "Pushing buffer of size %" G_GSIZE_FORMAT " for track %u",
+      gst_buffer_get_size (outbuf), pad->source_track->parent.track_id);
 
-  GST_DEBUG_OBJECT (cpad->collect.pad,
-      "Pushing buffer of size %" G_GSIZE_FORMAT " for track %u", map.size,
-      cpad->source_track->parent.track_id);
-  gst_buffer_unmap (packet, &map);
-
-  if ((ret = gst_mxf_mux_push (mux, packet)) != GST_FLOW_OK) {
-    GST_ERROR_OBJECT (cpad->collect.pad,
+  mux->partition.body_offset += gst_buffer_get_size (outbuf);
+  if ((ret = gst_mxf_mux_push (mux, outbuf)) != GST_FLOW_OK) {
+    GST_ERROR_OBJECT (pad,
         "Failed pushing buffer for track %u, reason %s",
-        cpad->source_track->parent.track_id, gst_flow_get_name (ret));
+        pad->source_track->parent.track_id, gst_flow_get_name (ret));
     return ret;
   }
 
-  cpad->pos++;
-  cpad->last_timestamp =
-      gst_util_uint64_scale (GST_SECOND * cpad->pos,
-      cpad->source_track->edit_rate.d, cpad->source_track->edit_rate.n);
+  pad->pos++;
+  pad->last_timestamp =
+      gst_util_uint64_scale (GST_SECOND * pad->pos,
+      pad->source_track->edit_rate.d, pad->source_track->edit_rate.n);
 
   return ret;
 }
@@ -1193,6 +1328,8 @@
   GstBuffer *buf;
 
   mux->partition.type = MXF_PARTITION_PACK_BODY;
+  mux->partition.closed = TRUE;
+  mux->partition.complete = TRUE;
   mux->partition.this_partition = mux->offset;
   mux->partition.prev_partition = 0;
   mux->partition.footer_partition = 0;
@@ -1210,7 +1347,7 @@
 static GstFlowReturn
 gst_mxf_mux_handle_eos (GstMXFMux * mux)
 {
-  GSList *l;
+  GList *l;
   gboolean have_data = FALSE;
   GstBuffer *packet;
 
@@ -1219,33 +1356,40 @@
 
     have_data = FALSE;
 
-    for (l = mux->collect->data; l; l = l->next) {
-      GstMXFMuxPad *cpad = l->data;
+    GST_OBJECT_LOCK (mux);
+    for (l = GST_ELEMENT_CAST (mux)->sinkpads; l; l = l->next) {
+      GstMXFMuxPad *pad = l->data;
+      GstBuffer *buffer =
+          gst_aggregator_pad_get_buffer (GST_AGGREGATOR_PAD (pad));
+
       GstClockTime next_gc_timestamp =
           gst_util_uint64_scale ((mux->last_gc_position + 1) * GST_SECOND,
           mux->min_edit_rate.d, mux->min_edit_rate.n);
 
-      best = NULL;
-
-      if (cpad->have_complete_edit_unit ||
-          gst_adapter_available (cpad->adapter) > 0 || cpad->collect.buffer) {
+      if (pad->have_complete_edit_unit ||
+          gst_adapter_available (pad->adapter) > 0 || buffer) {
         have_data = TRUE;
-        if (cpad->last_timestamp < next_gc_timestamp) {
-          best = cpad;
+        if (pad->last_timestamp < next_gc_timestamp) {
+          best = gst_object_ref (pad);
+          if (buffer)
+            gst_buffer_unref (buffer);
           break;
         }
       }
+      if (buffer)
+        gst_buffer_unref (buffer);
 
       if (have_data && !l->next) {
         mux->last_gc_position++;
         mux->last_gc_timestamp = next_gc_timestamp;
-        best = NULL;
         break;
       }
     }
+    GST_OBJECT_UNLOCK (mux);
 
     if (best) {
       gst_mxf_mux_handle_buffer (mux, best);
+      gst_object_unref (best);
       have_data = TRUE;
     }
   } while (have_data);
@@ -1256,14 +1400,15 @@
       mux->min_edit_rate.d, mux->min_edit_rate.n);
 
   /* Update essence track durations */
-  for (l = mux->collect->data; l; l = l->next) {
-    GstMXFMuxPad *cpad = l->data;
+  GST_OBJECT_LOCK (mux);
+  for (l = GST_ELEMENT_CAST (mux)->sinkpads; l; l = l->next) {
+    GstMXFMuxPad *pad = l->data;
     guint i;
 
     /* Update durations */
-    cpad->source_track->parent.sequence->duration = cpad->pos;
-    MXF_METADATA_SOURCE_CLIP (cpad->source_track->parent.
-        sequence->structural_components[0])->parent.duration = cpad->pos;
+    pad->source_track->parent.sequence->duration = pad->pos;
+    MXF_METADATA_SOURCE_CLIP (pad->source_track->parent.
+        sequence->structural_components[0])->parent.duration = pad->pos;
     for (i = 0; i < mux->preface->content_storage->packages[0]->n_tracks; i++) {
       MXFMetadataTimelineTrack *track;
 
@@ -1279,12 +1424,13 @@
           content_storage->packages[0]->tracks[i]);
       if (MXF_METADATA_SOURCE_CLIP (track->parent.
               sequence->structural_components[0])->source_track_id ==
-          cpad->source_track->parent.track_id) {
-        track->parent.sequence->structural_components[0]->duration = cpad->pos;
-        track->parent.sequence->duration = cpad->pos;
+          pad->source_track->parent.track_id) {
+        track->parent.sequence->structural_components[0]->duration = pad->pos;
+        track->parent.sequence->duration = pad->pos;
       }
     }
   }
+  GST_OBJECT_UNLOCK (mux);
 
   /* Update timecode track duration */
   {
@@ -1300,6 +1446,18 @@
   }
 
   {
+    MXFMetadataTimelineTrack *track =
+        MXF_METADATA_TIMELINE_TRACK (mux->preface->
+        content_storage->packages[1]->tracks[0]);
+    MXFMetadataSequence *sequence = track->parent.sequence;
+    MXFMetadataTimecodeComponent *component =
+        MXF_METADATA_TIMECODE_COMPONENT (sequence->structural_components[0]);
+
+    sequence->duration = mux->last_gc_position;
+    component->parent.duration = mux->last_gc_position;
+  }
+
+  {
     guint64 body_partition = mux->partition.this_partition;
     guint32 body_sid = mux->partition.body_sid;
     guint64 footer_partition = mux->offset;
@@ -1307,6 +1465,19 @@
     GstFlowReturn ret;
     GstSegment segment;
     MXFRandomIndexPackEntry entry;
+    GList *index_entries = NULL, *l;
+    guint index_byte_count = 0;
+    guint i;
+    GstBuffer *buf;
+
+    for (i = 0; i < mux->index_table->len; i++) {
+      MXFIndexTableSegment *segment =
+          &g_array_index (mux->index_table, MXFIndexTableSegment, i);
+      GstBuffer *segment_buffer = mxf_index_table_segment_to_buffer (segment);
+
+      index_byte_count += gst_buffer_get_size (segment_buffer);
+      index_entries = g_list_prepend (index_entries, segment_buffer);
+    }
 
     mux->partition.type = MXF_PARTITION_PACK_FOOTER;
     mux->partition.closed = TRUE;
@@ -1315,13 +1486,22 @@
     mux->partition.prev_partition = body_partition;
     mux->partition.footer_partition = mux->offset;
     mux->partition.header_byte_count = 0;
-    mux->partition.index_byte_count = 0;
-    mux->partition.index_sid = 0;
+    mux->partition.index_byte_count = index_byte_count;
+    mux->partition.index_sid =
+        mux->preface->content_storage->essence_container_data[0]->index_sid;
     mux->partition.body_offset = 0;
     mux->partition.body_sid = 0;
 
     gst_mxf_mux_write_header_metadata (mux);
 
+    index_entries = g_list_reverse (index_entries);
+    for (l = index_entries; l; l = l->next) {
+      if ((ret = gst_mxf_mux_push (mux, l->data)) != GST_FLOW_OK) {
+        GST_ERROR_OBJECT (mux, "Failed pushing index table segment");
+      }
+    }
+    g_list_free (index_entries);
+
     rip = g_array_sized_new (FALSE, FALSE, sizeof (MXFRandomIndexPackEntry), 3);
     entry.offset = 0;
     entry.body_sid = 0;
@@ -1341,13 +1521,14 @@
 
     /* Rewrite header partition with updated values */
     gst_segment_init (&segment, GST_FORMAT_BYTES);
-    if (gst_pad_push_event (mux->srcpad, gst_event_new_segment (&segment))) {
+    if (gst_pad_push_event (GST_AGGREGATOR_SRC_PAD (mux),
+            gst_event_new_segment (&segment))) {
       mux->offset = 0;
       mux->partition.type = MXF_PARTITION_PACK_HEADER;
       mux->partition.closed = TRUE;
       mux->partition.complete = TRUE;
       mux->partition.this_partition = 0;
-      mux->partition.prev_partition = footer_partition;
+      mux->partition.prev_partition = 0;
       mux->partition.footer_partition = footer_partition;
       mux->partition.header_byte_count = 0;
       mux->partition.index_byte_count = 0;
@@ -1360,6 +1541,28 @@
         GST_ERROR_OBJECT (mux, "Rewriting header partition failed");
         return ret;
       }
+
+      g_assert (mux->offset == body_partition);
+
+      mux->partition.type = MXF_PARTITION_PACK_BODY;
+      mux->partition.closed = TRUE;
+      mux->partition.complete = TRUE;
+      mux->partition.this_partition = mux->offset;
+      mux->partition.prev_partition = 0;
+      mux->partition.footer_partition = footer_partition;
+      mux->partition.header_byte_count = 0;
+      mux->partition.index_byte_count = 0;
+      mux->partition.index_sid = 0;
+      mux->partition.body_offset = 0;
+      mux->partition.body_sid =
+          mux->preface->content_storage->essence_container_data[0]->body_sid;
+
+      buf = mxf_partition_pack_to_buffer (&mux->partition);
+      ret = gst_mxf_mux_push (mux, buf);
+      if (ret != GST_FLOW_OK) {
+        GST_ERROR_OBJECT (mux, "Rewriting body partition failed");
+        return ret;
+      }
     } else {
       GST_WARNING_OBJECT (mux, "Can't rewrite header partition");
     }
@@ -1384,16 +1587,33 @@
       pa->source_track->parent.track_number;
 }
 
-static GstFlowReturn
-gst_mxf_mux_collected (GstCollectPads * pads, gpointer user_data)
+
+static gboolean
+gst_mxf_mux_stop (GstAggregator * aggregator)
 {
-  GstMXFMux *mux = GST_MXF_MUX (user_data);
+  GstMXFMux *mux = GST_MXF_MUX (aggregator);
+
+  gst_mxf_mux_reset (mux);
+
+  return TRUE;
+}
+
+static GstFlowReturn
+gst_mxf_mux_aggregate (GstAggregator * aggregator, gboolean timeout)
+{
+  GstMXFMux *mux = GST_MXF_MUX (aggregator);
   GstMXFMuxPad *best = NULL;
   GstFlowReturn ret;
-  GstSegment segment;
-  GSList *sl;
+  GList *l;
   gboolean eos = TRUE;
 
+  if (timeout) {
+    GST_ELEMENT_ERROR (mux, STREAM, MUX, (NULL),
+        ("Live mixing and got a timeout. This is not supported yet"));
+    ret = GST_FLOW_ERROR;
+    goto error;
+  }
+
   if (mux->state == GST_MXF_MUX_STATE_ERROR) {
     GST_ERROR_OBJECT (mux, "Had an error before -- returning");
     return GST_FLOW_ERROR;
@@ -1403,31 +1623,33 @@
   }
 
   if (mux->state == GST_MXF_MUX_STATE_HEADER) {
-    if (mux->collect->data == NULL) {
+    GstCaps *caps;
+
+    if (GST_ELEMENT_CAST (mux)->sinkpads == NULL) {
       GST_ELEMENT_ERROR (mux, STREAM, MUX, (NULL),
           ("No input streams configured"));
       ret = GST_FLOW_ERROR;
       goto error;
     }
 
-    gst_segment_init (&segment, GST_FORMAT_BYTES);
-    if (gst_pad_push_event (mux->srcpad, gst_event_new_segment (&segment))) {
-      if ((ret = gst_mxf_mux_create_metadata (mux)) != GST_FLOW_OK)
-        goto error;
+    caps = gst_caps_new_empty_simple ("application/mxf");
+    gst_aggregator_set_src_caps (GST_AGGREGATOR (mux), caps);
+    gst_caps_unref (caps);
 
-      if ((ret = gst_mxf_mux_init_partition_pack (mux)) != GST_FLOW_OK)
-        goto error;
+    if ((ret = gst_mxf_mux_create_metadata (mux)) != GST_FLOW_OK)
+      goto error;
 
-      ret = gst_mxf_mux_write_header_metadata (mux);
-    } else {
-      ret = GST_FLOW_ERROR;
-    }
+    if ((ret = gst_mxf_mux_init_partition_pack (mux)) != GST_FLOW_OK)
+      goto error;
 
-    if (ret != GST_FLOW_OK)
+    if ((ret = gst_mxf_mux_write_header_metadata (mux)) != GST_FLOW_OK)
       goto error;
 
     /* Sort pads, we will always write in that order */
-    mux->collect->data = g_slist_sort (mux->collect->data, _sort_mux_pads);
+    GST_OBJECT_LOCK (mux);
+    GST_ELEMENT_CAST (mux)->sinkpads =
+        g_list_sort (GST_ELEMENT_CAST (mux)->sinkpads, _sort_mux_pads);
+    GST_OBJECT_UNLOCK (mux);
 
     /* Write body partition */
     ret = gst_mxf_mux_write_body_partition (mux);
@@ -1439,43 +1661,59 @@
   g_return_val_if_fail (g_hash_table_size (mux->metadata) > 0, GST_FLOW_ERROR);
 
   do {
-    for (sl = mux->collect->data; sl; sl = sl->next) {
+    GST_OBJECT_LOCK (mux);
+    for (l = GST_ELEMENT_CAST (mux)->sinkpads; l; l = l->next) {
       gboolean pad_eos;
-      GstMXFMuxPad *cpad = sl->data;
+      GstMXFMuxPad *pad = l->data;
+      GstBuffer *buffer;
       GstClockTime next_gc_timestamp =
           gst_util_uint64_scale ((mux->last_gc_position + 1) * GST_SECOND,
           mux->min_edit_rate.d, mux->min_edit_rate.n);
 
-      pad_eos = cpad->collect.state & GST_COLLECT_PADS_STATE_EOS;
+      pad_eos = gst_aggregator_pad_is_eos (GST_AGGREGATOR_PAD (pad));
       if (!pad_eos)
         eos = FALSE;
 
-      if ((!pad_eos || cpad->have_complete_edit_unit ||
-              gst_adapter_available (cpad->adapter) > 0 || cpad->collect.buffer)
-          && cpad->last_timestamp < next_gc_timestamp) {
-        best = cpad;
+      buffer = gst_aggregator_pad_get_buffer (GST_AGGREGATOR_PAD (pad));
+
+      if ((!pad_eos || pad->have_complete_edit_unit ||
+              gst_adapter_available (pad->adapter) > 0 || buffer)
+          && pad->last_timestamp < next_gc_timestamp) {
+        if (buffer)
+          gst_buffer_unref (buffer);
+        best = gst_object_ref (pad);
         break;
-      } else if (!eos && !sl->next) {
+      } else if (!eos && !l->next) {
         mux->last_gc_position++;
         mux->last_gc_timestamp = next_gc_timestamp;
         eos = FALSE;
+        if (buffer)
+          gst_buffer_unref (buffer);
         best = NULL;
         break;
       }
+      if (buffer)
+        gst_buffer_unref (buffer);
     }
+    GST_OBJECT_UNLOCK (mux);
   } while (!eos && best == NULL);
 
   if (!eos && best) {
     ret = gst_mxf_mux_handle_buffer (mux, best);
+    gst_object_unref (best);
     if (ret != GST_FLOW_OK)
       goto error;
   } else if (eos) {
     GST_DEBUG_OBJECT (mux, "Handling EOS");
 
+    if (best)
+      gst_object_unref (best);
+
     gst_mxf_mux_handle_eos (mux);
-    gst_pad_push_event (mux->srcpad, gst_event_new_eos ());
     mux->state = GST_MXF_MUX_STATE_EOS;
     return GST_FLOW_EOS;
+  } else {
+    g_assert_not_reached ();
   }
 
   return GST_FLOW_OK;
@@ -1483,45 +1721,6 @@
 error:
   {
     mux->state = GST_MXF_MUX_STATE_ERROR;
-    gst_pad_push_event (mux->srcpad, gst_event_new_eos ());
     return ret;
   }
 }
-
-static GstStateChangeReturn
-gst_mxf_mux_change_state (GstElement * element, GstStateChange transition)
-{
-  GstStateChangeReturn ret;
-  GstMXFMux *mux = GST_MXF_MUX (element);
-
-  switch (transition) {
-    case GST_STATE_CHANGE_NULL_TO_READY:
-      break;
-    case GST_STATE_CHANGE_READY_TO_PAUSED:
-      gst_collect_pads_start (mux->collect);
-      break;
-    case GST_STATE_CHANGE_PAUSED_TO_PLAYING:
-      break;
-    case GST_STATE_CHANGE_PAUSED_TO_READY:
-      gst_collect_pads_stop (mux->collect);
-      break;
-    default:
-      break;
-  }
-
-  ret = GST_ELEMENT_CLASS (parent_class)->change_state (element, transition);
-
-  switch (transition) {
-    case GST_STATE_CHANGE_PLAYING_TO_PAUSED:
-      break;
-    case GST_STATE_CHANGE_PAUSED_TO_READY:
-      gst_mxf_mux_reset (mux);
-      break;
-    case GST_STATE_CHANGE_READY_TO_NULL:
-      break;
-    default:
-      break;
-  }
-
-  return ret;
-}
diff --git a/gst/mxf/mxfmux.h b/gst/mxf/mxfmux.h
index 7b83427..e887362 100644
--- a/gst/mxf/mxfmux.h
+++ b/gst/mxf/mxfmux.h
@@ -22,7 +22,7 @@
 
 #include <gst/gst.h>
 #include <gst/base/gstadapter.h>
-#include <gst/base/gstcollectpads.h>
+#include <gst/base/gstaggregator.h>
 
 #include "mxfessence.h"
 
@@ -39,26 +39,6 @@
 #define GST_IS_MXF_MUX_CLASS(klass) \
   (G_TYPE_CHECK_CLASS_TYPE ((klass), GST_TYPE_MXF_MUX))
 
-typedef struct
-{
-  GstCollectData collect;
-
-  guint64 pos;
-  GstClockTime last_timestamp;
-
-  MXFMetadataFileDescriptor *descriptor;
-
-  GstAdapter *adapter;
-  gboolean have_complete_edit_unit;
-
-  gpointer mapping_data;
-  const MXFEssenceElementWriter *writer;
-  MXFEssenceElementWriteFunc write_func;
-
-  MXFMetadataSourcePackage *source_package;
-  MXFMetadataTimelineTrack *source_track;
-} GstMXFMuxPad;
-
 typedef enum
 {
   GST_MXF_MUX_STATE_HEADER,
@@ -68,14 +48,9 @@
 } GstMXFMuxState;
 
 typedef struct _GstMXFMux {
-  GstElement element;
-
-  GstPad *srcpad;
-  GstCollectPads *collect;
+  GstAggregator parent;
 
   /* <private> */
-  GstPadEventFunction collect_event;
-
   GstMXFMuxState state;
   guint n_pads;
 
@@ -83,7 +58,7 @@
 
   MXFPartitionPack partition;
   MXFPrimerPack primer;
-  
+
   GHashTable *metadata;
   GList *metadata_list;
   MXFMetadataPreface *preface;
@@ -93,10 +68,12 @@
   GstClockTime last_gc_timestamp;
 
   gchar *application;
+
+  GArray *index_table;
 } GstMXFMux;
 
 typedef struct _GstMXFMuxClass {
-  GstElementClass parent;
+  GstAggregatorClass parent;
 } GstMXFMuxClass;
 
 GType gst_mxf_mux_get_type (void);
diff --git a/gst/mxf/mxftypes.c b/gst/mxf/mxftypes.c
index d857efe..14e2362 100644
--- a/gst/mxf/mxftypes.c
+++ b/gst/mxf/mxftypes.c
@@ -22,6 +22,7 @@
 #endif
 
 #include <gst/gst.h>
+#include <gst/base/gstbytewriter.h>
 #include <string.h>
 
 #include "mxftypes.h"
@@ -215,7 +216,8 @@
   do {
     for (i = 0; i < 4; i++)
       GST_WRITE_UINT32_BE (&uuid->u[i * 4], g_random_int ());
-
+    uuid->u[6] = 0x40 | (uuid->u[6] & 0x0f);
+    uuid->u[8] = (uuid->u[8] & 0xbf) | 0x80;
   } while (hashtable && (mxf_uuid_is_zero (uuid) ||
           g_hash_table_lookup_extended (hashtable, uuid, NULL, NULL)));
 }
@@ -746,13 +748,13 @@
   else if (pattern == MXF_OP_1c || pattern == MXF_OP_2c || pattern == MXF_OP_3c)
     ul->u[13] = 0x02;
 
-  ul->u[14] = 0x80;
+  ul->u[14] = 0x08;
   if (!internal_essence)
-    ul->u[14] |= 0x40;
+    ul->u[14] |= 0x04;
   if (!streamable)
-    ul->u[14] |= 0x20;
+    ul->u[14] |= 0x02;
   if (!single_track)
-    ul->u[14] |= 0x10;
+    ul->u[14] |= 0x01;
 
   ul->u[15] = 0;
 }
@@ -1061,8 +1063,7 @@
 /* SMPTE 377M 10.2.3 */
 gboolean
 mxf_index_table_segment_parse (const MXFUL * ul,
-    MXFIndexTableSegment * segment, const MXFPrimerPack * primer,
-    const guint8 * data, guint size)
+    MXFIndexTableSegment * segment, const guint8 * data, guint size)
 {
 #ifndef GST_DISABLE_GST_DEBUG
   gchar str[48];
@@ -1072,7 +1073,6 @@
 
   g_return_val_if_fail (ul != NULL, FALSE);
   g_return_val_if_fail (data != NULL, FALSE);
-  g_return_val_if_fail (primer != NULL, FALSE);
 
   memset (segment, 0, sizeof (MXFIndexTableSegment));
 
@@ -1082,8 +1082,11 @@
   GST_DEBUG ("Parsing index table segment:");
 
   while (mxf_local_tag_parse (data, size, &tag, &tag_size, &tag_data)) {
+    data += 4 + tag_size;
+    size -= 4 + tag_size;
+
     if (tag_size == 0 || tag == 0x0000)
-      goto next;
+      continue;
 
     switch (tag) {
       case 0x3c0a:
@@ -1154,7 +1157,7 @@
         segment->n_delta_entries = len;
         GST_DEBUG ("  number of delta entries = %u", segment->n_delta_entries);
         if (len == 0)
-          goto next;
+          continue;
         tag_data += 4;
         tag_size -= 4;
 
@@ -1202,7 +1205,7 @@
         segment->n_index_entries = len;
         GST_DEBUG ("  number of index entries = %u", segment->n_index_entries);
         if (len == 0)
-          goto next;
+          continue;
         tag_data += 4;
         tag_size -= 4;
 
@@ -1265,18 +1268,11 @@
         break;
       }
       default:
-        if (!primer->mappings) {
-          GST_WARNING ("No valid primer pack for this partition");
-        } else if (!mxf_local_tag_add_to_hash_table (primer, tag, tag_data,
-                tag_size, &segment->other_tags)) {
-          goto error;
-        }
+        GST_WARNING
+            ("Unknown local tag 0x%04x of size %d in index table segment", tag,
+            tag_size);
         break;
     }
-
-  next:
-    data += 4 + tag_size;
-    size -= 4 + tag_size;
   }
   return TRUE;
 
@@ -1301,12 +1297,128 @@
   g_free (segment->index_entries);
   g_free (segment->delta_entries);
 
-  if (segment->other_tags)
-    g_hash_table_destroy (segment->other_tags);
-
   memset (segment, 0, sizeof (MXFIndexTableSegment));
 }
 
+GstBuffer *
+mxf_index_table_segment_to_buffer (const MXFIndexTableSegment * segment)
+{
+  guint len, slen, i;
+  guint8 ber[9];
+  GstBuffer *ret;
+  GstMapInfo map;
+  GstByteWriter bw;
+
+  g_return_val_if_fail (segment != NULL, NULL);
+  g_return_val_if_fail (segment->n_delta_entries * 6 < G_MAXUINT16, NULL);
+  g_return_val_if_fail (segment->n_index_entries * (11 +
+          4 * segment->slice_count + 8 * segment->pos_table_count) <
+      G_MAXUINT16, NULL);
+
+  len =
+      16 + 4 + 8 + 4 + 8 + 4 + 8 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 1 + 4 + 1 + 4 +
+      4 + 8 + segment->n_delta_entries * 6 + 4 + 8 +
+      segment->n_index_entries * (11 + 4 * segment->slice_count +
+      8 * segment->pos_table_count);
+  slen = mxf_ber_encode_size (len, ber);
+
+  ret = gst_buffer_new_and_alloc (16 + slen + len);
+  gst_buffer_map (ret, &map, GST_MAP_WRITE);
+
+  gst_byte_writer_init_with_data (&bw, map.data, map.size, FALSE);
+
+  gst_byte_writer_put_data_unchecked (&bw,
+      (const guint8 *) MXF_UL (INDEX_TABLE_SEGMENT), 16);
+  gst_byte_writer_put_data_unchecked (&bw, ber, slen);
+
+  gst_byte_writer_put_uint16_be_unchecked (&bw, 0x3c0a);
+  gst_byte_writer_put_uint16_be_unchecked (&bw, 16);
+  gst_byte_writer_put_data_unchecked (&bw,
+      (const guint8 *) &segment->instance_id, 16);
+
+  gst_byte_writer_put_uint16_be_unchecked (&bw, 0x3f0b);
+  gst_byte_writer_put_uint16_be_unchecked (&bw, 8);
+  gst_byte_writer_put_uint32_be_unchecked (&bw, segment->index_edit_rate.n);
+  gst_byte_writer_put_uint32_be_unchecked (&bw, segment->index_edit_rate.d);
+
+  gst_byte_writer_put_uint16_be_unchecked (&bw, 0x3f0c);
+  gst_byte_writer_put_uint16_be_unchecked (&bw, 8);
+  gst_byte_writer_put_uint64_be_unchecked (&bw, segment->index_start_position);
+
+  gst_byte_writer_put_uint16_be_unchecked (&bw, 0x3f0d);
+  gst_byte_writer_put_uint16_be_unchecked (&bw, 8);
+  gst_byte_writer_put_uint64_be_unchecked (&bw, segment->index_duration);
+
+  gst_byte_writer_put_uint16_be_unchecked (&bw, 0x3f05);
+  gst_byte_writer_put_uint16_be_unchecked (&bw, 4);
+  gst_byte_writer_put_uint32_be_unchecked (&bw, segment->edit_unit_byte_count);
+
+  gst_byte_writer_put_uint16_be_unchecked (&bw, 0x3f06);
+  gst_byte_writer_put_uint16_be_unchecked (&bw, 4);
+  gst_byte_writer_put_uint32_be_unchecked (&bw, segment->index_sid);
+
+  gst_byte_writer_put_uint16_be_unchecked (&bw, 0x3f07);
+  gst_byte_writer_put_uint16_be_unchecked (&bw, 4);
+  gst_byte_writer_put_uint32_be_unchecked (&bw, segment->body_sid);
+
+  gst_byte_writer_put_uint16_be_unchecked (&bw, 0x3f08);
+  gst_byte_writer_put_uint16_be_unchecked (&bw, 1);
+  gst_byte_writer_put_uint8 (&bw, segment->slice_count);
+
+  gst_byte_writer_put_uint16_be_unchecked (&bw, 0x3f0e);
+  gst_byte_writer_put_uint16_be_unchecked (&bw, 1);
+  gst_byte_writer_put_uint8 (&bw, segment->pos_table_count);
+
+  gst_byte_writer_put_uint16_be_unchecked (&bw, 0x3f09);
+  gst_byte_writer_put_uint16_be_unchecked (&bw,
+      8 + segment->n_delta_entries * 6);
+  gst_byte_writer_put_uint32_be_unchecked (&bw, segment->n_delta_entries);
+  gst_byte_writer_put_uint32_be_unchecked (&bw, 6);
+  for (i = 0; i < segment->n_delta_entries; i++) {
+    gst_byte_writer_put_uint8_unchecked (&bw,
+        segment->delta_entries[i].pos_table_index);
+    gst_byte_writer_put_uint8_unchecked (&bw, segment->delta_entries[i].slice);
+    gst_byte_writer_put_uint32_be_unchecked (&bw,
+        segment->delta_entries[i].element_delta);
+  }
+
+  gst_byte_writer_put_uint16_be_unchecked (&bw, 0x3f0a);
+  gst_byte_writer_put_uint16_be_unchecked (&bw,
+      8 + segment->n_index_entries * (11 + 4 * segment->slice_count +
+          8 * segment->pos_table_count));
+  gst_byte_writer_put_uint32_be_unchecked (&bw, segment->n_index_entries);
+  gst_byte_writer_put_uint32_be_unchecked (&bw,
+      (11 + 4 * segment->slice_count + 8 * segment->pos_table_count));
+  for (i = 0; i < segment->n_index_entries; i++) {
+    guint j;
+
+    gst_byte_writer_put_uint8_unchecked (&bw,
+        segment->index_entries[i].temporal_offset);
+    gst_byte_writer_put_uint8_unchecked (&bw,
+        segment->index_entries[i].key_frame_offset);
+    gst_byte_writer_put_uint8_unchecked (&bw, segment->index_entries[i].flags);
+    gst_byte_writer_put_uint64_be_unchecked (&bw,
+        segment->index_entries[i].stream_offset);
+
+    for (j = 0; j < segment->slice_count; j++)
+      gst_byte_writer_put_uint32_be_unchecked (&bw,
+          segment->index_entries[i].slice_offset[j]);
+
+    for (j = 0; j < segment->pos_table_count; j++) {
+      gst_byte_writer_put_uint32_be_unchecked (&bw,
+          segment->index_entries[i].pos_table[j].n);
+      gst_byte_writer_put_uint32_be_unchecked (&bw,
+          segment->index_entries[i].pos_table[j].d);
+    }
+  }
+
+  g_assert (gst_byte_writer_get_pos (&bw) == map.size);
+
+  gst_buffer_unmap (ret, &map);
+
+  return ret;
+}
+
 /* SMPTE 377M 8.2 Table 1 and 2 */
 
 static void
diff --git a/gst/mxf/mxftypes.h b/gst/mxf/mxftypes.h
index 0c338e7..c96590e 100644
--- a/gst/mxf/mxftypes.h
+++ b/gst/mxf/mxftypes.h
@@ -148,7 +148,7 @@
 
   guint8 flags;
   guint64 stream_offset;
-  
+
   guint32 *slice_offset;
   MXFFraction *pos_table;
 } MXFIndexEntry;
@@ -169,9 +169,6 @@
 
   guint32 n_index_entries;
   MXFIndexEntry *index_entries;
-
-  GHashTable *other_tags;
-  guint64 stream_offset;
 } MXFIndexTableSegment;
 
 #define GST_TAG_MXF_UMID "mxf-umid"
@@ -254,8 +251,9 @@
 gboolean mxf_random_index_pack_parse (const MXFUL *ul, const guint8 *data, guint size, GArray **array);
 GstBuffer * mxf_random_index_pack_to_buffer (const GArray *array);
 
-gboolean mxf_index_table_segment_parse (const MXFUL *ul, MXFIndexTableSegment *segment, const MXFPrimerPack *primer, const guint8 *data, guint size);
+gboolean mxf_index_table_segment_parse (const MXFUL *ul, MXFIndexTableSegment *segment, const guint8 *data, guint size);
 void mxf_index_table_segment_reset (MXFIndexTableSegment *segment);
+GstBuffer * mxf_index_table_segment_to_buffer (const MXFIndexTableSegment *segment);
 
 gboolean mxf_local_tag_parse (const guint8 * data, guint size, guint16 * tag,
     guint16 * tag_size, const guint8 ** tag_data);
diff --git a/gst/mxf/mxful.c b/gst/mxf/mxful.c
index b5389f6..3d186f9 100644
--- a/gst/mxf/mxful.c
+++ b/gst/mxf/mxful.c
@@ -121,6 +121,9 @@
   {{0x06, 0x0E, 0x2B, 0x34, 0x01, 0x01, 0x01, 0x02,
           0x06, 0x01, 0x01, 0x04, 0x06, 0x04, 0x00, 0x00}},
   /* CONTENT_STORAGE */
+  {{0x06, 0x0E, 0x2B, 0x34, 0x01, 0x01, 0x01, 0x02,
+          0x06, 0x01, 0x01, 0x04, 0x02, 0x01, 0x00, 0x00}},
+  /* OPERATIONAL_PATTERN */
   {{0x06, 0x0E, 0x2B, 0x34, 0x01, 0x01, 0x01, 0x05,
           0x01, 0x02, 0x02, 0x03, 0x00, 0x00, 0x00, 0x00}},
   /* ESSENCE_CONTAINERS */
@@ -130,6 +133,9 @@
   {{0x06, 0x0E, 0x2B, 0x34, 0x01, 0x01, 0x01, 0x05,
           0x01, 0x02, 0x02, 0x10, 0x02, 0x02, 0x00, 0x00}},
   /* Identification */
+  /* THIS_GENERATION_UID */
+  {{0x06, 0x0E, 0x2B, 0x34, 0x01, 0x01, 0x01, 0x02,
+          0x05, 0x20, 0x07, 0x01, 0x01, 0x00, 0x00, 0x00}},
   /* COMPANY_NAME */
   {{0x06, 0x0E, 0x2B, 0x34, 0x01, 0x01, 0x01, 0x02,
           0x05, 0x20, 0x07, 0x01, 0x02, 0x01, 0x00, 0x00}},
diff --git a/gst/mxf/mxful.h b/gst/mxf/mxful.h
index 7b76f43..76e3ba6 100644
--- a/gst/mxf/mxful.h
+++ b/gst/mxf/mxful.h
@@ -63,6 +63,7 @@
   MXF_UL_OPERATIONAL_PATTERN,
   MXF_UL_ESSENCE_CONTAINERS,
   MXF_UL_DM_SCHEMES,
+  MXF_UL_THIS_GENERATION_UID,
   MXF_UL_COMPANY_NAME,
   MXF_UL_PRODUCT_NAME,
   MXF_UL_PRODUCT_VERSION,
diff --git a/gst/mxf/mxfvc3.c b/gst/mxf/mxfvc3.c
index bd2ca29..2f2e5b0 100644
--- a/gst/mxf/mxfvc3.c
+++ b/gst/mxf/mxfvc3.c
@@ -120,7 +120,7 @@
                 parent.descriptor[i])))
       continue;
 
-    switch (track->parent.descriptor[i]->essence_container.u[15]) {
+    switch (track->parent.descriptor[i]->essence_container.u[14]) {
       case 0x01:
         return MXF_ESSENCE_WRAPPING_FRAME_WRAPPING;
         break;
diff --git a/gst/netsim/Makefile.am b/gst/netsim/Makefile.am
new file mode 100644
index 0000000..c145289
--- /dev/null
+++ b/gst/netsim/Makefile.am
@@ -0,0 +1,9 @@
+plugin_LTLIBRARIES = libgstnetsim.la
+
+libgstnetsim_la_SOURCES = gstnetsim.c
+libgstnetsim_la_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_BASE_CFLAGS) $(GST_CFLAGS)
+libgstnetsim_la_LIBADD = $(GST_PLUGINS_BASE_LIBS) $(GST_BASE_LIBS) $(GST_LIBS)
+libgstnetsim_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS)
+libgstnetsim_la_LIBTOOLFLAGS = $(GST_PLUGIN_LIBTOOLFLAGS)
+
+noinst_HEADERS = gstnetsim.h
diff --git a/gst/liveadder/Makefile.in b/gst/netsim/Makefile.in
similarity index 90%
rename from gst/liveadder/Makefile.in
rename to gst/netsim/Makefile.in
index ba9e5a2..8b6e32f 100644
--- a/gst/liveadder/Makefile.in
+++ b/gst/netsim/Makefile.in
@@ -90,7 +90,7 @@
 build_triplet = @build@
 host_triplet = @host@
 target_triplet = @target@
-subdir = gst/liveadder
+subdir = gst/netsim
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
 am__aclocal_m4_deps = $(top_srcdir)/common/m4/as-ac-expand.m4 \
 	$(top_srcdir)/common/m4/as-auto-alt.m4 \
@@ -116,16 +116,15 @@
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
 	$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
-	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gsettings.m4 \
-	$(top_srcdir)/m4/gst-fionread.m4 $(top_srcdir)/m4/gst-sdl.m4 \
-	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
-	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
-	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libgcrypt.m4 \
-	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
-	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
-	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
-	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
-	$(top_srcdir)/configure.ac
+	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gst-fionread.m4 \
+	$(top_srcdir)/m4/gst-sdl.m4 $(top_srcdir)/m4/iconv.m4 \
+	$(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \
+	$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
+	$(top_srcdir)/m4/libgcrypt.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
+	$(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \
@@ -164,18 +163,18 @@
 am__installdirs = "$(DESTDIR)$(plugindir)"
 LTLIBRARIES = $(plugin_LTLIBRARIES)
 am__DEPENDENCIES_1 =
-libgstliveadder_la_DEPENDENCIES = $(am__DEPENDENCIES_1) \
+libgstnetsim_la_DEPENDENCIES = $(am__DEPENDENCIES_1) \
 	$(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1)
-am_libgstliveadder_la_OBJECTS = libgstliveadder_la-liveadder.lo
-libgstliveadder_la_OBJECTS = $(am_libgstliveadder_la_OBJECTS)
+am_libgstnetsim_la_OBJECTS = libgstnetsim_la-gstnetsim.lo
+libgstnetsim_la_OBJECTS = $(am_libgstnetsim_la_OBJECTS)
 AM_V_lt = $(am__v_lt_@AM_V@)
 am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
 am__v_lt_0 = --silent
 am__v_lt_1 = 
-libgstliveadder_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
-	$(libgstliveadder_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link \
-	$(CCLD) $(libgstliveadder_la_CFLAGS) $(CFLAGS) \
-	$(libgstliveadder_la_LDFLAGS) $(LDFLAGS) -o $@
+libgstnetsim_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
+	$(libgstnetsim_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link \
+	$(CCLD) $(libgstnetsim_la_CFLAGS) $(CFLAGS) \
+	$(libgstnetsim_la_LDFLAGS) $(LDFLAGS) -o $@
 AM_V_P = $(am__v_P_@AM_V@)
 am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
 am__v_P_0 = false
@@ -210,8 +209,8 @@
 am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@)
 am__v_CCLD_0 = @echo "  CCLD    " $@;
 am__v_CCLD_1 = 
-SOURCES = $(libgstliveadder_la_SOURCES)
-DIST_SOURCES = $(libgstliveadder_la_SOURCES)
+SOURCES = $(libgstnetsim_la_SOURCES)
+DIST_SOURCES = $(libgstnetsim_la_SOURCES)
 am__can_run_installinfo = \
   case $$AM_UPDATE_INFO_DIR in \
     n|no|NO) false;; \
@@ -274,6 +273,8 @@
 CLUTTER_X11_LIBS = @CLUTTER_X11_LIBS@
 CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
+CUDA_CFLAGS = @CUDA_CFLAGS@
+CUDA_LIBS = @CUDA_LIBS@
 CURL_CFLAGS = @CURL_CFLAGS@
 CURL_LIBS = @CURL_LIBS@
 CXX = @CXX@
@@ -311,6 +312,8 @@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
+EGL_CFLAGS = @EGL_CFLAGS@
+EGL_LIBS = @EGL_LIBS@
 EGREP = @EGREP@
 ERROR_CFLAGS = @ERROR_CFLAGS@
 ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
@@ -319,7 +322,6 @@
 EXIF_CFLAGS = @EXIF_CFLAGS@
 EXIF_LIBS = @EXIF_LIBS@
 FAAC_LIBS = @FAAC_LIBS@
-FAAD_IS_NEAAC = @FAAD_IS_NEAAC@
 FAAD_LIBS = @FAAD_LIBS@
 FFLAGS = @FFLAGS@
 FGREP = @FGREP@
@@ -338,8 +340,9 @@
 GIO_LIBS = @GIO_LIBS@
 GIO_UNIX_CFLAGS = @GIO_UNIX_CFLAGS@
 GIO_UNIX_LIBS = @GIO_UNIX_LIBS@
+GLES2_CFLAGS = @GLES2_CFLAGS@
+GLES2_LIBS = @GLES2_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
-GLIB_COMPILE_SCHEMAS = @GLIB_COMPILE_SCHEMAS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
@@ -356,16 +359,17 @@
 GMODULE_NO_EXPORT_LIBS = @GMODULE_NO_EXPORT_LIBS@
 GMSGFMT = @GMSGFMT@
 GMSGFMT_015 = @GMSGFMT_015@
+GNUSTL_CFLAGS = @GNUSTL_CFLAGS@
+GNUSTL_LIBS = @GNUSTL_LIBS@
 GRAPHENE_CFLAGS = @GRAPHENE_CFLAGS@
 GRAPHENE_LIBS = @GRAPHENE_LIBS@
 GREP = @GREP@
-GSETTINGS_CFLAGS = @GSETTINGS_CFLAGS@
-GSETTINGS_DISABLE_SCHEMAS_COMPILE = @GSETTINGS_DISABLE_SCHEMAS_COMPILE@
-GSETTINGS_LIBS = @GSETTINGS_LIBS@
 GSM_LIBS = @GSM_LIBS@
 GSTPB_PLUGINS_DIR = @GSTPB_PLUGINS_DIR@
 GSTPB_PREFIX = @GSTPB_PREFIX@
 GST_AGE = @GST_AGE@
+GST_ALLOCATORS_CFLAGS = @GST_ALLOCATORS_CFLAGS@
+GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
 GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
 GST_API_VERSION = @GST_API_VERSION@
 GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
@@ -391,6 +395,8 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PBUTILS_CFLAGS = @GST_PBUTILS_CFLAGS@
+GST_PBUTILS_LIBS = @GST_PBUTILS_LIBS@
 GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BAD_CFLAGS = @GST_PLUGINS_BAD_CFLAGS@
@@ -416,6 +422,8 @@
 GST_PREFIX = @GST_PREFIX@
 GST_REVISION = @GST_REVISION@
 GST_TOOLS_DIR = @GST_TOOLS_DIR@
+GST_VIDEO_CFLAGS = @GST_VIDEO_CFLAGS@
+GST_VIDEO_LIBS = @GST_VIDEO_LIBS@
 GTK3_CFLAGS = @GTK3_CFLAGS@
 GTK3_GL_CFLAGS = @GTK3_GL_CFLAGS@
 GTK3_GL_LIBS = @GTK3_GL_LIBS@
@@ -517,6 +525,7 @@
 LTLIBICONV = @LTLIBICONV@
 LTLIBINTL = @LTLIBINTL@
 LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
 MANIFEST_TOOL = @MANIFEST_TOOL@
@@ -530,8 +539,6 @@
 MODPLUG_LIBS = @MODPLUG_LIBS@
 MPEG2ENC_CFLAGS = @MPEG2ENC_CFLAGS@
 MPEG2ENC_LIBS = @MPEG2ENC_LIBS@
-MPG123_CFLAGS = @MPG123_CFLAGS@
-MPG123_LIBS = @MPG123_LIBS@
 MPLEX_CFLAGS = @MPLEX_CFLAGS@
 MPLEX_LDFLAGS = @MPLEX_LDFLAGS@
 MPLEX_LIBS = @MPLEX_LIBS@
@@ -547,6 +554,8 @@
 NETTLE_LIBS = @NETTLE_LIBS@
 NM = @NM@
 NMEDIT = @NMEDIT@
+NVENCODE_CFLAGS = @NVENCODE_CFLAGS@
+NVENCODE_LIBS = @NVENCODE_LIBS@
 OBJC = @OBJC@
 OBJCDEPMODE = @OBJCDEPMODE@
 OBJCFLAGS = @OBJCFLAGS@
@@ -604,16 +613,18 @@
 PYTHON_PLATFORM = @PYTHON_PLATFORM@
 PYTHON_PREFIX = @PYTHON_PREFIX@
 PYTHON_VERSION = @PYTHON_VERSION@
+QT_ANDROID_CFLAGS = @QT_ANDROID_CFLAGS@
+QT_ANDROID_LIBS = @QT_ANDROID_LIBS@
 QT_CFLAGS = @QT_CFLAGS@
 QT_LIBS = @QT_LIBS@
+QT_MAC_CFLAGS = @QT_MAC_CFLAGS@
+QT_MAC_LIBS = @QT_MAC_LIBS@
 QT_WAYLAND_CFLAGS = @QT_WAYLAND_CFLAGS@
 QT_WAYLAND_LIBS = @QT_WAYLAND_LIBS@
 QT_X11_CFLAGS = @QT_X11_CFLAGS@
 QT_X11_LIBS = @QT_X11_LIBS@
 RANLIB = @RANLIB@
 RCC = @RCC@
-RSVG_2_36_2_CFLAGS = @RSVG_2_36_2_CFLAGS@
-RSVG_2_36_2_LIBS = @RSVG_2_36_2_LIBS@
 RSVG_CFLAGS = @RSVG_CFLAGS@
 RSVG_LIBS = @RSVG_LIBS@
 RTMP_CFLAGS = @RTMP_CFLAGS@
@@ -665,6 +676,7 @@
 VOAACENC_LIBS = @VOAACENC_LIBS@
 VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
 VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VULKAN_LIBS = @VULKAN_LIBS@
 WARNING_CFLAGS = @WARNING_CFLAGS@
 WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
 WARNING_OBJCFLAGS = @WARNING_OBJCFLAGS@
@@ -675,6 +687,7 @@
 WAYLAND_LIBS = @WAYLAND_LIBS@
 WEBP_CFLAGS = @WEBP_CFLAGS@
 WEBP_LIBS = @WEBP_LIBS@
+WGET = @WGET@
 WILDMIDI_CFLAGS = @WILDMIDI_CFLAGS@
 WILDMIDI_LIBS = @WILDMIDI_LIBS@
 WINKS_LIBS = @WINKS_LIBS@
@@ -684,6 +697,8 @@
 X11_LIBS = @X11_LIBS@
 X265_CFLAGS = @X265_CFLAGS@
 X265_LIBS = @X265_LIBS@
+XCB_CFLAGS = @XCB_CFLAGS@
+XCB_LIBS = @XCB_LIBS@
 XCOMPOSITE_CFLAGS = @XCOMPOSITE_CFLAGS@
 XCOMPOSITE_LIBS = @XCOMPOSITE_LIBS@
 XGETTEXT = @XGETTEXT@
@@ -721,7 +736,6 @@
 docdir = @docdir@
 dvidir = @dvidir@
 exec_prefix = @exec_prefix@
-gsettingsschemadir = @gsettingsschemadir@
 host = @host@
 host_alias = @host_alias@
 host_cpu = @host_cpu@
@@ -761,16 +775,13 @@
 top_builddir = @top_builddir@
 top_srcdir = @top_srcdir@
 wayland_scanner = @wayland_scanner@
-plugin_LTLIBRARIES = libgstliveadder.la
-libgstliveadder_la_SOURCES = liveadder.c
-libgstliveadder_la_CFLAGS = $(GST_PLUGINS_BAD_CFLAGS) $(GST_PLUGINS_BASE_CFLAGS) $(GST_CFLAGS)
-libgstliveadder_la_LIBADD = \
-	$(GST_PLUGINS_BASE_LIBS) -lgstaudio-@GST_API_VERSION@ \
-	$(GST_BASE_LIBS) $(GST_LIBS)
-
-libgstliveadder_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS)
-libgstliveadder_la_LIBTOOLFLAGS = $(GST_PLUGIN_LIBTOOLFLAGS)
-noinst_HEADERS = liveadder.h
+plugin_LTLIBRARIES = libgstnetsim.la
+libgstnetsim_la_SOURCES = gstnetsim.c
+libgstnetsim_la_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_BASE_CFLAGS) $(GST_CFLAGS)
+libgstnetsim_la_LIBADD = $(GST_PLUGINS_BASE_LIBS) $(GST_BASE_LIBS) $(GST_LIBS)
+libgstnetsim_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS)
+libgstnetsim_la_LIBTOOLFLAGS = $(GST_PLUGIN_LIBTOOLFLAGS)
+noinst_HEADERS = gstnetsim.h
 all: all-am
 
 .SUFFIXES:
@@ -784,9 +795,9 @@
 	      exit 1;; \
 	  esac; \
 	done; \
-	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu gst/liveadder/Makefile'; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu gst/netsim/Makefile'; \
 	$(am__cd) $(top_srcdir) && \
-	  $(AUTOMAKE) --gnu gst/liveadder/Makefile
+	  $(AUTOMAKE) --gnu gst/netsim/Makefile
 Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
 	@case '$?' in \
 	  *config.status*) \
@@ -840,8 +851,8 @@
 	  rm -f $${locs}; \
 	}
 
-libgstliveadder.la: $(libgstliveadder_la_OBJECTS) $(libgstliveadder_la_DEPENDENCIES) $(EXTRA_libgstliveadder_la_DEPENDENCIES) 
-	$(AM_V_CCLD)$(libgstliveadder_la_LINK) -rpath $(plugindir) $(libgstliveadder_la_OBJECTS) $(libgstliveadder_la_LIBADD) $(LIBS)
+libgstnetsim.la: $(libgstnetsim_la_OBJECTS) $(libgstnetsim_la_DEPENDENCIES) $(EXTRA_libgstnetsim_la_DEPENDENCIES) 
+	$(AM_V_CCLD)$(libgstnetsim_la_LINK) -rpath $(plugindir) $(libgstnetsim_la_OBJECTS) $(libgstnetsim_la_LIBADD) $(LIBS)
 
 mostlyclean-compile:
 	-rm -f *.$(OBJEXT)
@@ -849,7 +860,7 @@
 distclean-compile:
 	-rm -f *.tab.c
 
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstliveadder_la-liveadder.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstnetsim_la-gstnetsim.Plo@am__quote@
 
 .c.o:
 @am__fastdepCC_TRUE@	$(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\
@@ -875,12 +886,12 @@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $<
 
-libgstliveadder_la-liveadder.lo: liveadder.c
-@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstliveadder_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstliveadder_la_CFLAGS) $(CFLAGS) -MT libgstliveadder_la-liveadder.lo -MD -MP -MF $(DEPDIR)/libgstliveadder_la-liveadder.Tpo -c -o libgstliveadder_la-liveadder.lo `test -f 'liveadder.c' || echo '$(srcdir)/'`liveadder.c
-@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstliveadder_la-liveadder.Tpo $(DEPDIR)/libgstliveadder_la-liveadder.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='liveadder.c' object='libgstliveadder_la-liveadder.lo' libtool=yes @AMDEPBACKSLASH@
+libgstnetsim_la-gstnetsim.lo: gstnetsim.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstnetsim_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstnetsim_la_CFLAGS) $(CFLAGS) -MT libgstnetsim_la-gstnetsim.lo -MD -MP -MF $(DEPDIR)/libgstnetsim_la-gstnetsim.Tpo -c -o libgstnetsim_la-gstnetsim.lo `test -f 'gstnetsim.c' || echo '$(srcdir)/'`gstnetsim.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstnetsim_la-gstnetsim.Tpo $(DEPDIR)/libgstnetsim_la-gstnetsim.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='gstnetsim.c' object='libgstnetsim_la-gstnetsim.lo' libtool=yes @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstliveadder_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstliveadder_la_CFLAGS) $(CFLAGS) -c -o libgstliveadder_la-liveadder.lo `test -f 'liveadder.c' || echo '$(srcdir)/'`liveadder.c
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstnetsim_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstnetsim_la_CFLAGS) $(CFLAGS) -c -o libgstnetsim_la-gstnetsim.lo `test -f 'gstnetsim.c' || echo '$(srcdir)/'`gstnetsim.c
 
 mostlyclean-libtool:
 	-rm -f *.lo
diff --git a/gst/netsim/gstnetsim.c b/gst/netsim/gstnetsim.c
new file mode 100644
index 0000000..2e15ac3
--- /dev/null
+++ b/gst/netsim/gstnetsim.c
@@ -0,0 +1,472 @@
+/*
+ * GStreamer
+ *
+ *  Copyright 2006 Collabora Ltd,
+ *  Copyright 2006 Nokia Corporation
+ *   @author: Philippe Kalaf <philippe.kalaf@collabora.co.uk>.
+ *  Copyright 2012-2015 Pexip
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ *
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <string.h>
+#include "gstnetsim.h"
+
+GST_DEBUG_CATEGORY (netsim_debug);
+#define GST_CAT_DEFAULT (netsim_debug)
+
+
+enum
+{
+  ARG_0,
+  ARG_MIN_DELAY,
+  ARG_MAX_DELAY,
+  ARG_DELAY_PROBABILITY,
+  ARG_DROP_PROBABILITY,
+  ARG_DUPLICATE_PROBABILITY,
+  ARG_DROP_PACKETS
+};
+
+struct _GstNetSimPrivate
+{
+  GstPad *sinkpad, *srcpad;
+
+  GMutex loop_mutex;
+  GCond start_cond;
+  GMainLoop *main_loop;
+  gboolean running;
+
+  GRand *rand_seed;
+  gint min_delay;
+  gint max_delay;
+  gfloat delay_probability;
+  gfloat drop_probability;
+  gfloat duplicate_probability;
+  guint drop_packets;
+};
+
+/* these numbers are nothing but wild guesses and dont reflect any reality */
+#define DEFAULT_MIN_DELAY 200
+#define DEFAULT_MAX_DELAY 400
+#define DEFAULT_DELAY_PROBABILITY 0.0
+#define DEFAULT_DROP_PROBABILITY 0.0
+#define DEFAULT_DUPLICATE_PROBABILITY 0.0
+#define DEFAULT_DROP_PACKETS 0
+
+#define GST_NET_SIM_GET_PRIVATE(o) \
+  (G_TYPE_INSTANCE_GET_PRIVATE ((o), GST_TYPE_NET_SIM, \
+                                GstNetSimPrivate))
+
+static GstStaticPadTemplate gst_net_sim_sink_template =
+GST_STATIC_PAD_TEMPLATE ("sink",
+    GST_PAD_SINK,
+    GST_PAD_ALWAYS,
+    GST_STATIC_CAPS_ANY);
+
+static GstStaticPadTemplate gst_net_sim_src_template =
+GST_STATIC_PAD_TEMPLATE ("src",
+    GST_PAD_SRC,
+    GST_PAD_ALWAYS,
+    GST_STATIC_CAPS_ANY);
+
+G_DEFINE_TYPE (GstNetSim, gst_net_sim, GST_TYPE_ELEMENT);
+
+static void
+gst_net_sim_loop (GstNetSim * netsim)
+{
+  GMainLoop *loop;
+
+  GST_TRACE_OBJECT (netsim, "TASK: begin");
+
+  g_mutex_lock (&netsim->priv->loop_mutex);
+  loop = g_main_loop_ref (netsim->priv->main_loop);
+  netsim->priv->running = TRUE;
+  GST_TRACE_OBJECT (netsim, "TASK: signal start");
+  g_cond_signal (&netsim->priv->start_cond);
+  g_mutex_unlock (&netsim->priv->loop_mutex);
+
+  GST_TRACE_OBJECT (netsim, "TASK: run");
+  g_main_loop_run (loop);
+  g_main_loop_unref (loop);
+
+  g_mutex_lock (&netsim->priv->loop_mutex);
+  GST_TRACE_OBJECT (netsim, "TASK: pause");
+  gst_pad_pause_task (netsim->priv->srcpad);
+  netsim->priv->running = FALSE;
+  GST_TRACE_OBJECT (netsim, "TASK: signal end");
+  g_cond_signal (&netsim->priv->start_cond);
+  g_mutex_unlock (&netsim->priv->loop_mutex);
+  GST_TRACE_OBJECT (netsim, "TASK: end");
+}
+
+static gboolean
+_main_loop_quit_and_remove_source (gpointer user_data)
+{
+  GMainLoop *main_loop = user_data;
+  GST_DEBUG ("MAINLOOP: Quit %p", main_loop);
+  g_main_loop_quit (main_loop);
+  g_assert (!g_main_loop_is_running (main_loop));
+  return FALSE;                 /* Remove source */
+}
+
+static gboolean
+gst_net_sim_src_activatemode (GstPad * pad, GstObject * parent,
+    GstPadMode mode, gboolean active)
+{
+  GstNetSim *netsim = GST_NET_SIM (parent);
+  gboolean result = FALSE;
+
+  (void) pad;
+  (void) mode;
+
+  g_mutex_lock (&netsim->priv->loop_mutex);
+  if (active) {
+    if (netsim->priv->main_loop == NULL) {
+      GMainContext *main_context = g_main_context_new ();
+      netsim->priv->main_loop = g_main_loop_new (main_context, FALSE);
+      g_main_context_unref (main_context);
+
+      GST_TRACE_OBJECT (netsim, "ACT: Starting task on srcpad");
+      result = gst_pad_start_task (netsim->priv->srcpad,
+          (GstTaskFunction) gst_net_sim_loop, netsim, NULL);
+
+      GST_TRACE_OBJECT (netsim, "ACT: Wait for task to start");
+      g_assert (!netsim->priv->running);
+      while (!netsim->priv->running)
+        g_cond_wait (&netsim->priv->start_cond, &netsim->priv->loop_mutex);
+      GST_TRACE_OBJECT (netsim, "ACT: Task on srcpad started");
+    }
+  } else {
+    if (netsim->priv->main_loop != NULL) {
+      GSource *source;
+      guint id;
+
+      /* Adds an Idle Source which quits the main loop from within.
+       * This removes the possibility for run/quit race conditions. */
+      GST_TRACE_OBJECT (netsim, "DEACT: Stopping main loop on deactivate");
+      source = g_idle_source_new ();
+      g_source_set_callback (source, _main_loop_quit_and_remove_source,
+          g_main_loop_ref (netsim->priv->main_loop),
+          (GDestroyNotify) g_main_loop_unref);
+      id = g_source_attach (source,
+          g_main_loop_get_context (netsim->priv->main_loop));
+      g_source_unref (source);
+      g_assert_cmpuint (id, >, 0);
+      g_main_loop_unref (netsim->priv->main_loop);
+      netsim->priv->main_loop = NULL;
+
+      GST_TRACE_OBJECT (netsim, "DEACT: Wait for mainloop and task to pause");
+      g_assert (netsim->priv->running);
+      while (netsim->priv->running)
+        g_cond_wait (&netsim->priv->start_cond, &netsim->priv->loop_mutex);
+
+      GST_TRACE_OBJECT (netsim, "DEACT: Stopping task on srcpad");
+      result = gst_pad_stop_task (netsim->priv->srcpad);
+      GST_TRACE_OBJECT (netsim, "DEACT: Mainloop and GstTask stopped");
+    }
+  }
+  g_mutex_unlock (&netsim->priv->loop_mutex);
+
+  return result;
+}
+
+typedef struct
+{
+  GstPad *pad;
+  GstBuffer *buf;
+} PushBufferCtx;
+
+G_INLINE_FUNC PushBufferCtx *
+push_buffer_ctx_new (GstPad * pad, GstBuffer * buf)
+{
+  PushBufferCtx *ctx = g_slice_new (PushBufferCtx);
+  ctx->pad = gst_object_ref (pad);
+  ctx->buf = gst_buffer_ref (buf);
+  return ctx;
+}
+
+G_INLINE_FUNC void
+push_buffer_ctx_free (PushBufferCtx * ctx)
+{
+  if (G_LIKELY (ctx != NULL)) {
+    gst_buffer_unref (ctx->buf);
+    gst_object_unref (ctx->pad);
+    g_slice_free (PushBufferCtx, ctx);
+  }
+}
+
+static gboolean
+push_buffer_ctx_push (PushBufferCtx * ctx)
+{
+  GST_DEBUG_OBJECT (ctx->pad, "Pushing buffer now");
+  gst_pad_push (ctx->pad, gst_buffer_ref (ctx->buf));
+  return FALSE;
+}
+
+static GstFlowReturn
+gst_net_sim_delay_buffer (GstNetSim * netsim, GstBuffer * buf)
+{
+  GstFlowReturn ret = GST_FLOW_OK;
+
+  g_mutex_lock (&netsim->priv->loop_mutex);
+  if (netsim->priv->main_loop != NULL && netsim->priv->delay_probability > 0 &&
+      g_rand_double (netsim->priv->rand_seed) < netsim->priv->delay_probability)
+  {
+    PushBufferCtx *ctx = push_buffer_ctx_new (netsim->priv->srcpad, buf);
+    gint delay = g_rand_int_range (netsim->priv->rand_seed,
+        netsim->priv->min_delay, netsim->priv->max_delay);
+    GSource *source = g_timeout_source_new (delay);
+
+    GST_DEBUG_OBJECT (netsim, "Delaying packet by %d", delay);
+    g_source_set_callback (source, (GSourceFunc) push_buffer_ctx_push,
+        ctx, (GDestroyNotify) push_buffer_ctx_free);
+    g_source_attach (source, g_main_loop_get_context (netsim->priv->main_loop));
+    g_source_unref (source);
+  } else {
+    ret = gst_pad_push (netsim->priv->srcpad, gst_buffer_ref (buf));
+  }
+  g_mutex_unlock (&netsim->priv->loop_mutex);
+
+  return ret;
+}
+
+static GstFlowReturn
+gst_net_sim_chain (GstPad * pad, GstObject * parent, GstBuffer * buf)
+{
+  GstNetSim *netsim = GST_NET_SIM (parent);
+  GstFlowReturn ret = GST_FLOW_OK;
+
+  (void) pad;
+
+  if (netsim->priv->drop_packets > 0) {
+    netsim->priv->drop_packets--;
+    GST_DEBUG_OBJECT (netsim, "Dropping packet (%d left)",
+        netsim->priv->drop_packets);
+  } else if (netsim->priv->drop_probability > 0
+      && g_rand_double (netsim->priv->rand_seed) <
+      (gdouble) netsim->priv->drop_probability) {
+    GST_DEBUG_OBJECT (netsim, "Dropping packet");
+  } else if (netsim->priv->duplicate_probability > 0 &&
+      g_rand_double (netsim->priv->rand_seed) <
+      (gdouble) netsim->priv->duplicate_probability) {
+    GST_DEBUG_OBJECT (netsim, "Duplicating packet");
+    gst_net_sim_delay_buffer (netsim, buf);
+    ret = gst_net_sim_delay_buffer (netsim, buf);
+  } else {
+    ret = gst_net_sim_delay_buffer (netsim, buf);
+  }
+
+  gst_buffer_unref (buf);
+
+  return ret;
+}
+
+
+static void
+gst_net_sim_set_property (GObject * object,
+    guint prop_id, const GValue * value, GParamSpec * pspec)
+{
+  GstNetSim *netsim = GST_NET_SIM (object);
+
+  switch (prop_id) {
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
+    case ARG_MIN_DELAY:
+      netsim->priv->min_delay = g_value_get_int (value);
+      break;
+    case ARG_MAX_DELAY:
+      netsim->priv->max_delay = g_value_get_int (value);
+      break;
+    case ARG_DELAY_PROBABILITY:
+      netsim->priv->delay_probability = g_value_get_float (value);
+      break;
+    case ARG_DROP_PROBABILITY:
+      netsim->priv->drop_probability = g_value_get_float (value);
+      break;
+    case ARG_DUPLICATE_PROBABILITY:
+      netsim->priv->duplicate_probability = g_value_get_float (value);
+      break;
+    case ARG_DROP_PACKETS:
+      netsim->priv->drop_packets = g_value_get_uint (value);
+      break;
+  }
+}
+
+static void
+gst_net_sim_get_property (GObject * object,
+    guint prop_id, GValue * value, GParamSpec * pspec)
+{
+  GstNetSim *netsim = GST_NET_SIM (object);
+
+  switch (prop_id) {
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
+    case ARG_MIN_DELAY:
+      g_value_set_int (value, netsim->priv->min_delay);
+      break;
+    case ARG_MAX_DELAY:
+      g_value_set_int (value, netsim->priv->max_delay);
+      break;
+    case ARG_DELAY_PROBABILITY:
+      g_value_set_float (value, netsim->priv->delay_probability);
+      break;
+    case ARG_DROP_PROBABILITY:
+      g_value_set_float (value, netsim->priv->drop_probability);
+      break;
+    case ARG_DUPLICATE_PROBABILITY:
+      g_value_set_float (value, netsim->priv->duplicate_probability);
+      break;
+    case ARG_DROP_PACKETS:
+      g_value_set_uint (value, netsim->priv->drop_packets);
+      break;
+  }
+}
+
+
+static void
+gst_net_sim_init (GstNetSim * netsim)
+{
+  netsim->priv = GST_NET_SIM_GET_PRIVATE (netsim);
+
+  netsim->priv->srcpad =
+      gst_pad_new_from_static_template (&gst_net_sim_src_template, "src");
+  netsim->priv->sinkpad =
+      gst_pad_new_from_static_template (&gst_net_sim_sink_template, "sink");
+
+  gst_element_add_pad (GST_ELEMENT (netsim), netsim->priv->srcpad);
+  gst_element_add_pad (GST_ELEMENT (netsim), netsim->priv->sinkpad);
+
+  g_mutex_init (&netsim->priv->loop_mutex);
+  g_cond_init (&netsim->priv->start_cond);
+  netsim->priv->rand_seed = g_rand_new ();
+  netsim->priv->main_loop = NULL;
+
+  GST_OBJECT_FLAG_SET (netsim->priv->sinkpad,
+      GST_PAD_FLAG_PROXY_CAPS | GST_PAD_FLAG_PROXY_ALLOCATION);
+
+  gst_pad_set_chain_function (netsim->priv->sinkpad,
+      GST_DEBUG_FUNCPTR (gst_net_sim_chain));
+  gst_pad_set_activatemode_function (netsim->priv->srcpad,
+      GST_DEBUG_FUNCPTR (gst_net_sim_src_activatemode));
+}
+
+static void
+gst_net_sim_finalize (GObject * object)
+{
+  GstNetSim *netsim = GST_NET_SIM (object);
+
+  g_rand_free (netsim->priv->rand_seed);
+  g_mutex_clear (&netsim->priv->loop_mutex);
+  g_cond_clear (&netsim->priv->start_cond);
+
+  G_OBJECT_CLASS (gst_net_sim_parent_class)->finalize (object);
+}
+
+static void
+gst_net_sim_dispose (GObject * object)
+{
+  GstNetSim *netsim = GST_NET_SIM (object);
+
+  g_assert (netsim->priv->main_loop == NULL);
+
+  G_OBJECT_CLASS (gst_net_sim_parent_class)->dispose (object);
+}
+
+static void
+gst_net_sim_class_init (GstNetSimClass * klass)
+{
+  GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
+  GstElementClass *gstelement_class = GST_ELEMENT_CLASS (klass);
+
+  g_type_class_add_private (klass, sizeof (GstNetSimPrivate));
+
+  gst_element_class_add_pad_template (gstelement_class,
+      gst_static_pad_template_get (&gst_net_sim_src_template));
+  gst_element_class_add_pad_template (gstelement_class,
+      gst_static_pad_template_get (&gst_net_sim_sink_template));
+
+  gst_element_class_set_metadata (gstelement_class,
+      "Network Simulator",
+      "Filter/Network",
+      "An element that simulates network jitter, "
+      "packet loss and packet duplication",
+      "Philippe Kalaf <philippe.kalaf@collabora.co.uk>");
+
+  gobject_class->dispose = GST_DEBUG_FUNCPTR (gst_net_sim_dispose);
+  gobject_class->finalize = GST_DEBUG_FUNCPTR (gst_net_sim_finalize);
+
+  gobject_class->set_property = gst_net_sim_set_property;
+  gobject_class->get_property = gst_net_sim_get_property;
+
+  g_object_class_install_property (gobject_class, ARG_MIN_DELAY,
+      g_param_spec_int ("min-delay", "Minimum delay (ms)",
+          "The minimum delay in ms to apply to buffers",
+          G_MININT, G_MAXINT, DEFAULT_MIN_DELAY,
+          G_PARAM_READWRITE | G_PARAM_CONSTRUCT | G_PARAM_STATIC_STRINGS));
+
+  g_object_class_install_property (gobject_class, ARG_MAX_DELAY,
+      g_param_spec_int ("max-delay", "Maximum delay (ms)",
+          "The maximum delay in ms to apply to buffers",
+          G_MININT, G_MAXINT, DEFAULT_MAX_DELAY,
+          G_PARAM_READWRITE | G_PARAM_CONSTRUCT | G_PARAM_STATIC_STRINGS));
+
+  g_object_class_install_property (gobject_class, ARG_DELAY_PROBABILITY,
+      g_param_spec_float ("delay-probability", "Delay Probability",
+          "The Probability a buffer is delayed",
+          0.0, 1.0, DEFAULT_DELAY_PROBABILITY,
+          G_PARAM_READWRITE | G_PARAM_CONSTRUCT | G_PARAM_STATIC_STRINGS));
+
+  g_object_class_install_property (gobject_class, ARG_DROP_PROBABILITY,
+      g_param_spec_float ("drop-probability", "Drop Probability",
+          "The Probability a buffer is dropped",
+          0.0, 1.0, DEFAULT_DROP_PROBABILITY,
+          G_PARAM_READWRITE | G_PARAM_CONSTRUCT | G_PARAM_STATIC_STRINGS));
+
+  g_object_class_install_property (gobject_class, ARG_DUPLICATE_PROBABILITY,
+      g_param_spec_float ("duplicate-probability", "Duplicate Probability",
+          "The Probability a buffer is duplicated",
+          0.0, 1.0, DEFAULT_DUPLICATE_PROBABILITY,
+          G_PARAM_READWRITE | G_PARAM_CONSTRUCT | G_PARAM_STATIC_STRINGS));
+
+  g_object_class_install_property (gobject_class, ARG_DROP_PACKETS,
+      g_param_spec_uint ("drop-packets", "Drop Packets",
+          "Drop the next n packets",
+          0, G_MAXUINT, DEFAULT_DROP_PACKETS,
+          G_PARAM_READWRITE | G_PARAM_CONSTRUCT | G_PARAM_STATIC_STRINGS));
+
+  GST_DEBUG_CATEGORY_INIT (netsim_debug, "netsim", 0, "Network simulator");
+}
+
+static gboolean
+gst_net_sim_plugin_init (GstPlugin * plugin)
+{
+  return gst_element_register (plugin, "netsim",
+      GST_RANK_MARGINAL, GST_TYPE_NET_SIM);
+}
+
+GST_PLUGIN_DEFINE (GST_VERSION_MAJOR,
+    GST_VERSION_MINOR,
+    netsim,
+    "Network Simulator",
+    gst_net_sim_plugin_init, PACKAGE_VERSION, "LGPL", GST_PACKAGE_NAME,
+    GST_PACKAGE_ORIGIN)
diff --git a/gst/netsim/gstnetsim.h b/gst/netsim/gstnetsim.h
new file mode 100644
index 0000000..1db437e
--- /dev/null
+++ b/gst/netsim/gstnetsim.h
@@ -0,0 +1,72 @@
+/*
+ * Farsight Voice+Video library
+ *
+ *  Copyright 2006 Collabora Ltd,
+ *  Copyright 2006 Nokia Corporation
+ *   @author: Philippe Kalaf <philippe.kalaf@collabora.co.uk>.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ *
+ */
+
+#ifndef __GST_NET_SIM_H__
+#define __GST_NET_SIM_H__
+
+#include <gst/gst.h>
+
+G_BEGIN_DECLS
+
+/* #define's don't like whitespacey bits */
+#define GST_TYPE_NET_SIM \
+  (gst_net_sim_get_type())
+#define GST_NET_SIM(obj) \
+  (G_TYPE_CHECK_INSTANCE_CAST((obj), \
+  GST_TYPE_NET_SIM,GstNetSim))
+#define GST_NET_SIM_CLASS(klass) \
+  (G_TYPE_CHECK_CLASS_CAST((klass), \
+  GST_TYPE_NET_SIM,GstNetSimClass))
+#define GST_IS_NET_SIM(obj) \
+  (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_NET_SIM))
+#define GST_IS_NET_SIM_CLASS(obj) \
+  (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_NET_SIM))
+
+typedef struct _GstNetSim GstNetSim;
+typedef struct _GstNetSimClass GstNetSimClass;
+typedef struct _GstNetSimPrivate GstNetSimPrivate;
+
+struct _GstNetSim
+{
+  GstElement parent;
+
+  GstNetSimPrivate *priv;
+
+  /*< private > */
+  gpointer _gst_reserved[GST_PADDING];
+};
+
+struct _GstNetSimClass
+{
+  GstElementClass parent_class;
+
+  /*< private > */
+  gpointer _gst_reserved[GST_PADDING];
+};
+
+GType gst_net_sim_get_type (void);
+
+G_END_DECLS
+
+#endif /* __GST_NET_SIM_H__ */
diff --git a/gst/nuvdemux/Makefile.in b/gst/nuvdemux/Makefile.in
index d625c6c..fc59722 100644
--- a/gst/nuvdemux/Makefile.in
+++ b/gst/nuvdemux/Makefile.in
@@ -116,16 +116,15 @@
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
 	$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
-	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gsettings.m4 \
-	$(top_srcdir)/m4/gst-fionread.m4 $(top_srcdir)/m4/gst-sdl.m4 \
-	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
-	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
-	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libgcrypt.m4 \
-	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
-	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
-	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
-	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
-	$(top_srcdir)/configure.ac
+	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gst-fionread.m4 \
+	$(top_srcdir)/m4/gst-sdl.m4 $(top_srcdir)/m4/iconv.m4 \
+	$(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \
+	$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
+	$(top_srcdir)/m4/libgcrypt.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
+	$(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \
@@ -273,6 +272,8 @@
 CLUTTER_X11_LIBS = @CLUTTER_X11_LIBS@
 CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
+CUDA_CFLAGS = @CUDA_CFLAGS@
+CUDA_LIBS = @CUDA_LIBS@
 CURL_CFLAGS = @CURL_CFLAGS@
 CURL_LIBS = @CURL_LIBS@
 CXX = @CXX@
@@ -310,6 +311,8 @@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
+EGL_CFLAGS = @EGL_CFLAGS@
+EGL_LIBS = @EGL_LIBS@
 EGREP = @EGREP@
 ERROR_CFLAGS = @ERROR_CFLAGS@
 ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
@@ -318,7 +321,6 @@
 EXIF_CFLAGS = @EXIF_CFLAGS@
 EXIF_LIBS = @EXIF_LIBS@
 FAAC_LIBS = @FAAC_LIBS@
-FAAD_IS_NEAAC = @FAAD_IS_NEAAC@
 FAAD_LIBS = @FAAD_LIBS@
 FFLAGS = @FFLAGS@
 FGREP = @FGREP@
@@ -337,8 +339,9 @@
 GIO_LIBS = @GIO_LIBS@
 GIO_UNIX_CFLAGS = @GIO_UNIX_CFLAGS@
 GIO_UNIX_LIBS = @GIO_UNIX_LIBS@
+GLES2_CFLAGS = @GLES2_CFLAGS@
+GLES2_LIBS = @GLES2_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
-GLIB_COMPILE_SCHEMAS = @GLIB_COMPILE_SCHEMAS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
@@ -355,16 +358,17 @@
 GMODULE_NO_EXPORT_LIBS = @GMODULE_NO_EXPORT_LIBS@
 GMSGFMT = @GMSGFMT@
 GMSGFMT_015 = @GMSGFMT_015@
+GNUSTL_CFLAGS = @GNUSTL_CFLAGS@
+GNUSTL_LIBS = @GNUSTL_LIBS@
 GRAPHENE_CFLAGS = @GRAPHENE_CFLAGS@
 GRAPHENE_LIBS = @GRAPHENE_LIBS@
 GREP = @GREP@
-GSETTINGS_CFLAGS = @GSETTINGS_CFLAGS@
-GSETTINGS_DISABLE_SCHEMAS_COMPILE = @GSETTINGS_DISABLE_SCHEMAS_COMPILE@
-GSETTINGS_LIBS = @GSETTINGS_LIBS@
 GSM_LIBS = @GSM_LIBS@
 GSTPB_PLUGINS_DIR = @GSTPB_PLUGINS_DIR@
 GSTPB_PREFIX = @GSTPB_PREFIX@
 GST_AGE = @GST_AGE@
+GST_ALLOCATORS_CFLAGS = @GST_ALLOCATORS_CFLAGS@
+GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
 GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
 GST_API_VERSION = @GST_API_VERSION@
 GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
@@ -390,6 +394,8 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PBUTILS_CFLAGS = @GST_PBUTILS_CFLAGS@
+GST_PBUTILS_LIBS = @GST_PBUTILS_LIBS@
 GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BAD_CFLAGS = @GST_PLUGINS_BAD_CFLAGS@
@@ -415,6 +421,8 @@
 GST_PREFIX = @GST_PREFIX@
 GST_REVISION = @GST_REVISION@
 GST_TOOLS_DIR = @GST_TOOLS_DIR@
+GST_VIDEO_CFLAGS = @GST_VIDEO_CFLAGS@
+GST_VIDEO_LIBS = @GST_VIDEO_LIBS@
 GTK3_CFLAGS = @GTK3_CFLAGS@
 GTK3_GL_CFLAGS = @GTK3_GL_CFLAGS@
 GTK3_GL_LIBS = @GTK3_GL_LIBS@
@@ -516,6 +524,7 @@
 LTLIBICONV = @LTLIBICONV@
 LTLIBINTL = @LTLIBINTL@
 LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
 MANIFEST_TOOL = @MANIFEST_TOOL@
@@ -529,8 +538,6 @@
 MODPLUG_LIBS = @MODPLUG_LIBS@
 MPEG2ENC_CFLAGS = @MPEG2ENC_CFLAGS@
 MPEG2ENC_LIBS = @MPEG2ENC_LIBS@
-MPG123_CFLAGS = @MPG123_CFLAGS@
-MPG123_LIBS = @MPG123_LIBS@
 MPLEX_CFLAGS = @MPLEX_CFLAGS@
 MPLEX_LDFLAGS = @MPLEX_LDFLAGS@
 MPLEX_LIBS = @MPLEX_LIBS@
@@ -546,6 +553,8 @@
 NETTLE_LIBS = @NETTLE_LIBS@
 NM = @NM@
 NMEDIT = @NMEDIT@
+NVENCODE_CFLAGS = @NVENCODE_CFLAGS@
+NVENCODE_LIBS = @NVENCODE_LIBS@
 OBJC = @OBJC@
 OBJCDEPMODE = @OBJCDEPMODE@
 OBJCFLAGS = @OBJCFLAGS@
@@ -603,16 +612,18 @@
 PYTHON_PLATFORM = @PYTHON_PLATFORM@
 PYTHON_PREFIX = @PYTHON_PREFIX@
 PYTHON_VERSION = @PYTHON_VERSION@
+QT_ANDROID_CFLAGS = @QT_ANDROID_CFLAGS@
+QT_ANDROID_LIBS = @QT_ANDROID_LIBS@
 QT_CFLAGS = @QT_CFLAGS@
 QT_LIBS = @QT_LIBS@
+QT_MAC_CFLAGS = @QT_MAC_CFLAGS@
+QT_MAC_LIBS = @QT_MAC_LIBS@
 QT_WAYLAND_CFLAGS = @QT_WAYLAND_CFLAGS@
 QT_WAYLAND_LIBS = @QT_WAYLAND_LIBS@
 QT_X11_CFLAGS = @QT_X11_CFLAGS@
 QT_X11_LIBS = @QT_X11_LIBS@
 RANLIB = @RANLIB@
 RCC = @RCC@
-RSVG_2_36_2_CFLAGS = @RSVG_2_36_2_CFLAGS@
-RSVG_2_36_2_LIBS = @RSVG_2_36_2_LIBS@
 RSVG_CFLAGS = @RSVG_CFLAGS@
 RSVG_LIBS = @RSVG_LIBS@
 RTMP_CFLAGS = @RTMP_CFLAGS@
@@ -664,6 +675,7 @@
 VOAACENC_LIBS = @VOAACENC_LIBS@
 VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
 VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VULKAN_LIBS = @VULKAN_LIBS@
 WARNING_CFLAGS = @WARNING_CFLAGS@
 WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
 WARNING_OBJCFLAGS = @WARNING_OBJCFLAGS@
@@ -674,6 +686,7 @@
 WAYLAND_LIBS = @WAYLAND_LIBS@
 WEBP_CFLAGS = @WEBP_CFLAGS@
 WEBP_LIBS = @WEBP_LIBS@
+WGET = @WGET@
 WILDMIDI_CFLAGS = @WILDMIDI_CFLAGS@
 WILDMIDI_LIBS = @WILDMIDI_LIBS@
 WINKS_LIBS = @WINKS_LIBS@
@@ -683,6 +696,8 @@
 X11_LIBS = @X11_LIBS@
 X265_CFLAGS = @X265_CFLAGS@
 X265_LIBS = @X265_LIBS@
+XCB_CFLAGS = @XCB_CFLAGS@
+XCB_LIBS = @XCB_LIBS@
 XCOMPOSITE_CFLAGS = @XCOMPOSITE_CFLAGS@
 XCOMPOSITE_LIBS = @XCOMPOSITE_LIBS@
 XGETTEXT = @XGETTEXT@
@@ -720,7 +735,6 @@
 docdir = @docdir@
 dvidir = @dvidir@
 exec_prefix = @exec_prefix@
-gsettingsschemadir = @gsettingsschemadir@
 host = @host@
 host_alias = @host_alias@
 host_cpu = @host_cpu@
diff --git a/gst/nuvdemux/gstnuvdemux.c b/gst/nuvdemux/gstnuvdemux.c
index ce4e98d..765025f 100644
--- a/gst/nuvdemux/gstnuvdemux.c
+++ b/gst/nuvdemux/gstnuvdemux.c
@@ -31,7 +31,7 @@
  * <refsect2>
  * <title>Example launch line</title>
  * |[
- * gst-launch filesrc test.nuv ! nuvdemux name=demux  demux.audio_00 ! decodebin ! audioconvert ! audioresample ! autoaudiosink   demux.video_00 ! queue ! decodebin ! videoconvert ! videoscale ! autovideosink
+ * gst-launch-1.0 filesrc test.nuv ! nuvdemux name=demux  demux.audio_00 ! decodebin ! audioconvert ! audioresample ! autoaudiosink   demux.video_00 ! queue ! decodebin ! videoconvert ! videoscale ! autovideosink
  * ]| Play (parse and decode) an .nuv file and try to output it to
  * an automatically detected soundcard and videosink. If the NUV file contains
  * compressed audio or video data, this will only work if you have the
diff --git a/gst/onvif/Makefile.in b/gst/onvif/Makefile.in
index 6d5b486..067abc7 100644
--- a/gst/onvif/Makefile.in
+++ b/gst/onvif/Makefile.in
@@ -115,16 +115,15 @@
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
 	$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
-	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gsettings.m4 \
-	$(top_srcdir)/m4/gst-fionread.m4 $(top_srcdir)/m4/gst-sdl.m4 \
-	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
-	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
-	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libgcrypt.m4 \
-	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
-	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
-	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
-	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
-	$(top_srcdir)/configure.ac
+	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gst-fionread.m4 \
+	$(top_srcdir)/m4/gst-sdl.m4 $(top_srcdir)/m4/iconv.m4 \
+	$(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \
+	$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
+	$(top_srcdir)/m4/libgcrypt.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
+	$(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
@@ -273,6 +272,8 @@
 CLUTTER_X11_LIBS = @CLUTTER_X11_LIBS@
 CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
+CUDA_CFLAGS = @CUDA_CFLAGS@
+CUDA_LIBS = @CUDA_LIBS@
 CURL_CFLAGS = @CURL_CFLAGS@
 CURL_LIBS = @CURL_LIBS@
 CXX = @CXX@
@@ -310,6 +311,8 @@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
+EGL_CFLAGS = @EGL_CFLAGS@
+EGL_LIBS = @EGL_LIBS@
 EGREP = @EGREP@
 ERROR_CFLAGS = @ERROR_CFLAGS@
 ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
@@ -318,7 +321,6 @@
 EXIF_CFLAGS = @EXIF_CFLAGS@
 EXIF_LIBS = @EXIF_LIBS@
 FAAC_LIBS = @FAAC_LIBS@
-FAAD_IS_NEAAC = @FAAD_IS_NEAAC@
 FAAD_LIBS = @FAAD_LIBS@
 FFLAGS = @FFLAGS@
 FGREP = @FGREP@
@@ -337,8 +339,9 @@
 GIO_LIBS = @GIO_LIBS@
 GIO_UNIX_CFLAGS = @GIO_UNIX_CFLAGS@
 GIO_UNIX_LIBS = @GIO_UNIX_LIBS@
+GLES2_CFLAGS = @GLES2_CFLAGS@
+GLES2_LIBS = @GLES2_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
-GLIB_COMPILE_SCHEMAS = @GLIB_COMPILE_SCHEMAS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
@@ -355,16 +358,17 @@
 GMODULE_NO_EXPORT_LIBS = @GMODULE_NO_EXPORT_LIBS@
 GMSGFMT = @GMSGFMT@
 GMSGFMT_015 = @GMSGFMT_015@
+GNUSTL_CFLAGS = @GNUSTL_CFLAGS@
+GNUSTL_LIBS = @GNUSTL_LIBS@
 GRAPHENE_CFLAGS = @GRAPHENE_CFLAGS@
 GRAPHENE_LIBS = @GRAPHENE_LIBS@
 GREP = @GREP@
-GSETTINGS_CFLAGS = @GSETTINGS_CFLAGS@
-GSETTINGS_DISABLE_SCHEMAS_COMPILE = @GSETTINGS_DISABLE_SCHEMAS_COMPILE@
-GSETTINGS_LIBS = @GSETTINGS_LIBS@
 GSM_LIBS = @GSM_LIBS@
 GSTPB_PLUGINS_DIR = @GSTPB_PLUGINS_DIR@
 GSTPB_PREFIX = @GSTPB_PREFIX@
 GST_AGE = @GST_AGE@
+GST_ALLOCATORS_CFLAGS = @GST_ALLOCATORS_CFLAGS@
+GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
 GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
 GST_API_VERSION = @GST_API_VERSION@
 GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
@@ -390,6 +394,8 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PBUTILS_CFLAGS = @GST_PBUTILS_CFLAGS@
+GST_PBUTILS_LIBS = @GST_PBUTILS_LIBS@
 GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BAD_CFLAGS = @GST_PLUGINS_BAD_CFLAGS@
@@ -415,6 +421,8 @@
 GST_PREFIX = @GST_PREFIX@
 GST_REVISION = @GST_REVISION@
 GST_TOOLS_DIR = @GST_TOOLS_DIR@
+GST_VIDEO_CFLAGS = @GST_VIDEO_CFLAGS@
+GST_VIDEO_LIBS = @GST_VIDEO_LIBS@
 GTK3_CFLAGS = @GTK3_CFLAGS@
 GTK3_GL_CFLAGS = @GTK3_GL_CFLAGS@
 GTK3_GL_LIBS = @GTK3_GL_LIBS@
@@ -516,6 +524,7 @@
 LTLIBICONV = @LTLIBICONV@
 LTLIBINTL = @LTLIBINTL@
 LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
 MANIFEST_TOOL = @MANIFEST_TOOL@
@@ -529,8 +538,6 @@
 MODPLUG_LIBS = @MODPLUG_LIBS@
 MPEG2ENC_CFLAGS = @MPEG2ENC_CFLAGS@
 MPEG2ENC_LIBS = @MPEG2ENC_LIBS@
-MPG123_CFLAGS = @MPG123_CFLAGS@
-MPG123_LIBS = @MPG123_LIBS@
 MPLEX_CFLAGS = @MPLEX_CFLAGS@
 MPLEX_LDFLAGS = @MPLEX_LDFLAGS@
 MPLEX_LIBS = @MPLEX_LIBS@
@@ -546,6 +553,8 @@
 NETTLE_LIBS = @NETTLE_LIBS@
 NM = @NM@
 NMEDIT = @NMEDIT@
+NVENCODE_CFLAGS = @NVENCODE_CFLAGS@
+NVENCODE_LIBS = @NVENCODE_LIBS@
 OBJC = @OBJC@
 OBJCDEPMODE = @OBJCDEPMODE@
 OBJCFLAGS = @OBJCFLAGS@
@@ -603,16 +612,18 @@
 PYTHON_PLATFORM = @PYTHON_PLATFORM@
 PYTHON_PREFIX = @PYTHON_PREFIX@
 PYTHON_VERSION = @PYTHON_VERSION@
+QT_ANDROID_CFLAGS = @QT_ANDROID_CFLAGS@
+QT_ANDROID_LIBS = @QT_ANDROID_LIBS@
 QT_CFLAGS = @QT_CFLAGS@
 QT_LIBS = @QT_LIBS@
+QT_MAC_CFLAGS = @QT_MAC_CFLAGS@
+QT_MAC_LIBS = @QT_MAC_LIBS@
 QT_WAYLAND_CFLAGS = @QT_WAYLAND_CFLAGS@
 QT_WAYLAND_LIBS = @QT_WAYLAND_LIBS@
 QT_X11_CFLAGS = @QT_X11_CFLAGS@
 QT_X11_LIBS = @QT_X11_LIBS@
 RANLIB = @RANLIB@
 RCC = @RCC@
-RSVG_2_36_2_CFLAGS = @RSVG_2_36_2_CFLAGS@
-RSVG_2_36_2_LIBS = @RSVG_2_36_2_LIBS@
 RSVG_CFLAGS = @RSVG_CFLAGS@
 RSVG_LIBS = @RSVG_LIBS@
 RTMP_CFLAGS = @RTMP_CFLAGS@
@@ -664,6 +675,7 @@
 VOAACENC_LIBS = @VOAACENC_LIBS@
 VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
 VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VULKAN_LIBS = @VULKAN_LIBS@
 WARNING_CFLAGS = @WARNING_CFLAGS@
 WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
 WARNING_OBJCFLAGS = @WARNING_OBJCFLAGS@
@@ -674,6 +686,7 @@
 WAYLAND_LIBS = @WAYLAND_LIBS@
 WEBP_CFLAGS = @WEBP_CFLAGS@
 WEBP_LIBS = @WEBP_LIBS@
+WGET = @WGET@
 WILDMIDI_CFLAGS = @WILDMIDI_CFLAGS@
 WILDMIDI_LIBS = @WILDMIDI_LIBS@
 WINKS_LIBS = @WINKS_LIBS@
@@ -683,6 +696,8 @@
 X11_LIBS = @X11_LIBS@
 X265_CFLAGS = @X265_CFLAGS@
 X265_LIBS = @X265_LIBS@
+XCB_CFLAGS = @XCB_CFLAGS@
+XCB_LIBS = @XCB_LIBS@
 XCOMPOSITE_CFLAGS = @XCOMPOSITE_CFLAGS@
 XCOMPOSITE_LIBS = @XCOMPOSITE_LIBS@
 XGETTEXT = @XGETTEXT@
@@ -720,7 +735,6 @@
 docdir = @docdir@
 dvidir = @dvidir@
 exec_prefix = @exec_prefix@
-gsettingsschemadir = @gsettingsschemadir@
 host = @host@
 host_alias = @host_alias@
 host_cpu = @host_cpu@
diff --git a/gst/onvif/gstrtponviftimestamp.c b/gst/onvif/gstrtponviftimestamp.c
index 818c8af..4abece1 100644
--- a/gst/onvif/gstrtponviftimestamp.c
+++ b/gst/onvif/gstrtponviftimestamp.c
@@ -30,6 +30,8 @@
 
 #include "gstrtponviftimestamp.h"
 
+#define GST_NTP_OFFSET_EVENT_NAME "GstNtpOffset"
+
 #define DEFAULT_NTP_OFFSET GST_CLOCK_TIME_NONE
 #define DEFAULT_CSEQ 0
 #define DEFAULT_SET_E_BIT FALSE
@@ -42,6 +44,11 @@
 static GstFlowReturn gst_rtp_onvif_timestamp_chain_list (GstPad * pad,
     GstObject * parent, GstBufferList * list);
 
+static GstFlowReturn handle_and_push_buffer (GstRtpOnvifTimestamp * self,
+    GstBuffer * buf);
+static GstFlowReturn handle_and_push_buffer_list (GstRtpOnvifTimestamp * self,
+    GstBufferList * list);
+
 static GstStaticPadTemplate sink_template_factory =
 GST_STATIC_PAD_TEMPLATE ("sink",
     GST_PAD_SINK,
@@ -112,6 +119,64 @@
   }
 }
 
+/* send cached buffer or list, and events, if present */
+static GstFlowReturn
+send_cached_buffer_and_events (GstRtpOnvifTimestamp * self)
+{
+  GstFlowReturn ret = GST_FLOW_OK;
+
+  g_assert (!(self->buffer && self->list));
+
+  if (self->buffer) {
+    GST_DEBUG_OBJECT (self, "pushing %" GST_PTR_FORMAT, self->buffer);
+    ret = handle_and_push_buffer (self, self->buffer);
+    self->buffer = NULL;
+  }
+  if (self->list) {
+    GST_DEBUG_OBJECT (self, "pushing %" GST_PTR_FORMAT, self->list);
+    ret = handle_and_push_buffer_list (self, self->list);
+    self->list = NULL;
+  }
+
+  if (ret != GST_FLOW_OK)
+    goto out;
+
+  while (!g_queue_is_empty (self->event_queue)) {
+    GstEvent *event;
+
+    event = GST_EVENT_CAST (g_queue_pop_head (self->event_queue));
+    GST_LOG_OBJECT (self->sinkpad, "sending %" GST_PTR_FORMAT, event);
+    (void) gst_pad_send_event (self->sinkpad, event);
+  }
+
+out:
+  return ret;
+}
+
+static void
+purge_cached_buffer_and_events (GstRtpOnvifTimestamp * self)
+{
+  g_assert (!(self->buffer && self->list));
+
+  if (self->buffer) {
+    GST_DEBUG_OBJECT (self, "purging %" GST_PTR_FORMAT, self->buffer);
+    gst_buffer_unref (self->buffer);
+    self->buffer = NULL;
+  }
+  if (self->list) {
+    GST_DEBUG_OBJECT (self, "purging %" GST_PTR_FORMAT, self->list);
+    gst_buffer_list_unref (self->list);
+    self->list = NULL;
+  }
+
+  while (!g_queue_is_empty (self->event_queue)) {
+    GstEvent *event;
+
+    event = GST_EVENT_CAST (g_queue_pop_head (self->event_queue));
+    gst_event_unref (event);
+  }
+}
+
 static GstStateChangeReturn
 gst_rtp_onvif_timestamp_change_state (GstElement * element,
     GstStateChange transition)
@@ -121,6 +186,7 @@
 
   switch (transition) {
     case GST_STATE_CHANGE_PAUSED_TO_READY:
+      purge_cached_buffer_and_events (self);
       gst_segment_init (&self->segment, GST_FORMAT_UNDEFINED);
       break;
     default:
@@ -135,19 +201,11 @@
 
   switch (transition) {
     case GST_STATE_CHANGE_READY_TO_PAUSED:
-      if (GST_CLOCK_TIME_IS_VALID (self->prop_ntp_offset))
-        self->ntp_offset = self->prop_ntp_offset;
-      else
-        self->ntp_offset = GST_CLOCK_TIME_NONE;
-      break;
-    case GST_STATE_CHANGE_PAUSED_TO_PLAYING:
-      if (!GST_CLOCK_TIME_IS_VALID (self->prop_ntp_offset) &&
-          GST_ELEMENT_CLOCK (element) == NULL) {
-        GST_ELEMENT_ERROR (element, CORE, CLOCK, ("Missing NTP offset"),
-            ("Set the \"ntp-offset\" property to,"
-                " can't guess it without a clock on the pipeline."));
-        return GST_STATE_CHANGE_FAILURE;
-      }
+      self->ntp_offset = self->prop_ntp_offset;
+      GST_DEBUG_OBJECT (self, "ntp-offset: %" GST_TIME_FORMAT,
+          GST_TIME_ARGS (self->ntp_offset));
+      self->set_d_bit = FALSE;
+      self->set_e_bit = FALSE;
       break;
     default:
       break;
@@ -161,10 +219,7 @@
 {
   GstRtpOnvifTimestamp *self = GST_RTP_ONVIF_TIMESTAMP (object);
 
-  if (self->buffer)
-    gst_buffer_unref (self->buffer);
-  if (self->list)
-    gst_buffer_list_unref (self->list);
+  g_queue_free (self->event_queue);
 
   G_OBJECT_CLASS (gst_rtp_onvif_timestamp_parent_class)->finalize (object);
 }
@@ -219,42 +274,128 @@
       0, "ONVIF NTP timestamps RTP extension");
 }
 
-static GstFlowReturn handle_and_push_buffer (GstRtpOnvifTimestamp * self,
-    GstBuffer * buf, gboolean end_contiguous);
-static GstFlowReturn handle_and_push_buffer_list (GstRtpOnvifTimestamp * self,
-    GstBufferList * list, gboolean end_contiguous);
+static gboolean
+parse_event_ntp_offset (GstRtpOnvifTimestamp * self, GstEvent * event,
+    GstClockTime * offset, gboolean * discont)
+{
+  const GstStructure *structure = gst_event_get_structure (event);
+  GstClockTime event_offset;
+  gboolean event_discont;
+
+  if (!gst_structure_get_clock_time (structure, "ntp-offset", &event_offset)) {
+    GST_ERROR_OBJECT (self, "no ntp-offset in %" GST_PTR_FORMAT, event);
+    return FALSE;
+  }
+  if (!gst_structure_get_boolean (structure, "discont", &event_discont)) {
+    GST_ERROR_OBJECT (self, "no discontinue in %" GST_PTR_FORMAT, event);
+    return FALSE;
+  }
+
+  if (offset)
+    *offset = event_offset;
+
+  if (discont)
+    *discont = event_discont;
+
+  return TRUE;
+}
 
 static gboolean
 gst_rtp_onvif_timestamp_sink_event (GstPad * pad, GstObject * parent,
     GstEvent * event)
 {
   GstRtpOnvifTimestamp *self = GST_RTP_ONVIF_TIMESTAMP (parent);
+  gboolean drop = FALSE;
+  gboolean ret = TRUE;
 
   GST_DEBUG_OBJECT (pad, "handling event %s", GST_EVENT_TYPE_NAME (event));
 
+  /* handle serialized events, which, should not be enqueued */
   switch (GST_EVENT_TYPE (event)) {
-    case GST_EVENT_SEGMENT:
-      gst_event_copy_segment (event, &self->segment);
-      break;
-    case GST_EVENT_FLUSH_STOP:
-      gst_segment_init (&self->segment, GST_FORMAT_UNDEFINED);
+    case GST_EVENT_CUSTOM_DOWNSTREAM:
+      /* if the "set-e-bit" property is set, an offset event might mark the
+       * stream as discontinued. We need to check if the currently cached buffer
+       * needs the e-bit before it's pushed */
+      if (self->prop_set_e_bit &&
+          gst_event_has_name (event, GST_NTP_OFFSET_EVENT_NAME)) {
+        gboolean discont;
+        if (parse_event_ntp_offset (self, event, NULL, &discont)) {
+          GST_DEBUG_OBJECT (self, "stream %s discontinued",
+              (discont ? "is" : "is not"));
+          self->set_e_bit = discont;
+        } else {
+          drop = TRUE;
+          ret = FALSE;
+          goto out;
+        }
+      }
       break;
     case GST_EVENT_EOS:
+    {
+      GstFlowReturn res;
       /* Push pending buffers, if any */
-      if (self->buffer) {
-        handle_and_push_buffer (self, self->buffer, TRUE);
-        self->buffer = NULL;
+      self->set_e_bit = TRUE;
+      res = send_cached_buffer_and_events (self);
+      if (res != GST_FLOW_OK) {
+        drop = TRUE;
+        ret = FALSE;
+        goto out;
       }
-      if (self->list) {
-        handle_and_push_buffer_list (self, self->list, TRUE);
-        self->list = NULL;
-      }
+      break;
+    }
+    case GST_EVENT_FLUSH_STOP:
+      purge_cached_buffer_and_events (self);
+      self->set_d_bit = FALSE;
+      self->set_e_bit = FALSE;
+      gst_segment_init (&self->segment, GST_FORMAT_UNDEFINED);
       break;
     default:
       break;
   }
 
-  return gst_pad_event_default (pad, parent, event);
+  /* enqueue serialized events if there is a cached buffer */
+  if (GST_EVENT_IS_SERIALIZED (event) && (self->buffer || self->list)) {
+    GST_DEBUG ("enqueueing serialized event");
+    g_queue_push_tail (self->event_queue, event);
+    event = NULL;
+    goto out;
+  }
+
+  /* handle rest of the events */
+  switch (GST_EVENT_TYPE (event)) {
+    case GST_EVENT_CUSTOM_DOWNSTREAM:
+      /* update the ntp-offset after any cached buffer/buffer list has been
+       * pushed. the d-bit of the next buffer/buffer list should be set if
+       * the stream is discontinued */
+      if (gst_event_has_name (event, GST_NTP_OFFSET_EVENT_NAME)) {
+        GstClockTime offset;
+        gboolean discont;
+        if (parse_event_ntp_offset (self, event, &offset, &discont)) {
+          GST_DEBUG_OBJECT (self, "new ntp-offset: %" GST_TIME_FORMAT
+              ", stream %s discontinued", GST_TIME_ARGS (offset),
+              (discont ? "is" : "is not"));
+          self->ntp_offset = offset;
+          self->set_d_bit = discont;
+        } else {
+          ret = FALSE;
+        }
+        drop = TRUE;
+      }
+      break;
+    case GST_EVENT_SEGMENT:
+      gst_event_copy_segment (event, &self->segment);
+      break;
+    default:
+      break;
+  }
+
+out:
+  if (drop)
+    gst_event_unref (event);
+  else if (event)
+    ret = gst_pad_event_default (pad, parent, event);
+
+  return ret;
 }
 
 static void
@@ -278,18 +419,18 @@
   self->prop_ntp_offset = DEFAULT_NTP_OFFSET;
   self->prop_set_e_bit = DEFAULT_SET_E_BIT;
 
+  gst_segment_init (&self->segment, GST_FORMAT_UNDEFINED);
+
+  self->event_queue = g_queue_new ();
   self->buffer = NULL;
   self->list = NULL;
-
-  gst_segment_init (&self->segment, GST_FORMAT_UNDEFINED);
 }
 
 #define EXTENSION_ID 0xABAC
 #define EXTENSION_SIZE 3
 
 static gboolean
-handle_buffer (GstRtpOnvifTimestamp * self, GstBuffer * buf,
-    gboolean end_contiguous)
+handle_buffer (GstRtpOnvifTimestamp * self, GstBuffer * buf)
 {
   GstRTPBuffer rtp = GST_RTP_BUFFER_INIT;
   guint8 *data;
@@ -315,12 +456,17 @@
 
       self->ntp_offset = real_time - running_time;
 
+      GST_DEBUG_OBJECT (self, "new ntp-offset: %" GST_TIME_FORMAT,
+          GST_TIME_ARGS (self->ntp_offset));
+
       gst_object_unref (clock);
     } else {
+      GST_ELEMENT_ERROR (self, STREAM, FAILED, ("No ntp-offset present"),
+          ("Can not guess ntp-offset with no clock."));
       /* Received a buffer in PAUSED, so we can't guess the match
        * between the running time and the NTP clock yet.
        */
-      return TRUE;
+      return FALSE;
     }
   }
 
@@ -353,10 +499,10 @@
 
   /* NTP timestamp */
   if (GST_BUFFER_DTS_IS_VALID (buf)) {
-    time = gst_segment_to_running_time (&self->segment, GST_FORMAT_TIME,
+    time = gst_segment_to_stream_time (&self->segment, GST_FORMAT_TIME,
         GST_BUFFER_DTS (buf));
   } else if (GST_BUFFER_PTS_IS_VALID (buf)) {
-    time = gst_segment_to_running_time (&self->segment, GST_FORMAT_TIME,
+    time = gst_segment_to_stream_time (&self->segment, GST_FORMAT_TIME,
         GST_BUFFER_PTS (buf));
   } else {
     GST_ERROR_OBJECT (self,
@@ -365,7 +511,7 @@
   }
 
   if (time == GST_CLOCK_TIME_NONE) {
-    GST_ERROR_OBJECT (self, "Failed to get running time");
+    GST_ERROR_OBJECT (self, "Failed to get stream time");
     goto done;
   }
 
@@ -391,15 +537,17 @@
   }
 
   /* Set E if the next buffer has DISCONT */
-  if (end_contiguous) {
+  if (self->set_e_bit) {
     GST_DEBUG_OBJECT (self, "set E flag");
     field |= (1 << 6);
+    self->set_e_bit = FALSE;
   }
 
   /* Set D if the buffer has the DISCONT flag */
-  if (GST_BUFFER_IS_DISCONT (buf)) {
+  if (self->set_d_bit) {
     GST_DEBUG_OBJECT (self, "set D flag");
     field |= (1 << 5);
+    self->set_d_bit = FALSE;
   }
 
   GST_WRITE_UINT8 (data + 8, field);
@@ -414,12 +562,11 @@
   return TRUE;
 }
 
-/* @buf: (transfer all) */
+/* @buf: (transfer full) */
 static GstFlowReturn
-handle_and_push_buffer (GstRtpOnvifTimestamp * self, GstBuffer * buf,
-    gboolean end_contiguous)
+handle_and_push_buffer (GstRtpOnvifTimestamp * self, GstBuffer * buf)
 {
-  if (!handle_buffer (self, buf, end_contiguous)) {
+  if (!handle_buffer (self, buf)) {
     gst_buffer_unref (buf);
     return GST_FLOW_ERROR;
   }
@@ -436,32 +583,26 @@
 
   if (!self->prop_set_e_bit) {
     /* Modify and push this buffer right away */
-    return handle_and_push_buffer (self, buf, FALSE);
+    return handle_and_push_buffer (self, buf);
   }
 
-  /* We have to wait for the *next* buffer before pushing this one */
+  /* send any previously cached item(s), this leaves an empty queue */
+  result = send_cached_buffer_and_events (self);
 
-  if (self->buffer) {
-    /* push the *previous* buffer received */
-    result = handle_and_push_buffer (self, self->buffer,
-        GST_BUFFER_IS_DISCONT (buf));
-  }
-
-  /* Transfer ownership */
+  /* enqueue the new item, as the only item in the queue */
   self->buffer = buf;
   return result;
 }
 
-/* @buf: (transfer all) */
+/* @buf: (transfer full) */
 static GstFlowReturn
-handle_and_push_buffer_list (GstRtpOnvifTimestamp * self,
-    GstBufferList * list, gboolean end_contiguous)
+handle_and_push_buffer_list (GstRtpOnvifTimestamp * self, GstBufferList * list)
 {
   GstBuffer *buf;
 
   /* Set the extension on the *first* buffer */
   buf = gst_buffer_list_get (list, 0);
-  if (!handle_buffer (self, buf, end_contiguous)) {
+  if (!handle_buffer (self, buf)) {
     gst_buffer_list_unref (list);
     return GST_FLOW_ERROR;
   }
@@ -478,23 +619,15 @@
 {
   GstRtpOnvifTimestamp *self = GST_RTP_ONVIF_TIMESTAMP (parent);
   GstFlowReturn result = GST_FLOW_OK;
-  GstBuffer *buf;
 
   if (!self->prop_set_e_bit) {
-    return handle_and_push_buffer_list (self, list, FALSE);
+    return handle_and_push_buffer_list (self, list);
   }
 
-  /* We have to wait for the *next* list before pushing this one */
+  /* send any previously cached item(s), this leaves an empty queue */
+  result = send_cached_buffer_and_events (self);
 
-  if (self->list) {
-    /* push the *previous* list received */
-    buf = gst_buffer_list_get (list, 0);
-
-    result = handle_and_push_buffer_list (self, self->list,
-        GST_BUFFER_IS_DISCONT (buf));
-  }
-
-  /* Transfer ownership */
+  /* enqueue the new item, as the only item in the queue */
   self->list = list;
   return result;
 }
diff --git a/gst/onvif/gstrtponviftimestamp.h b/gst/onvif/gstrtponviftimestamp.h
index 40ad8d3..1fb3199 100644
--- a/gst/onvif/gstrtponviftimestamp.h
+++ b/gst/onvif/gstrtponviftimestamp.h
@@ -52,11 +52,17 @@
   guint prop_cseq;
   gboolean prop_set_e_bit;
 
+  /* currently used ntp-offset
+   *(can be changed runtime with a GstNtpOffset event)
+   */
   GstClockTime ntp_offset;
+  /* a GstNtpOffset event might mark the stream as discontinued */
+  gboolean set_d_bit;
+  gboolean set_e_bit;
 
   GstSegment segment;
-  gboolean received_segment;
   /* Buffer waiting to be handled, only used if prop_set_e_bit is TRUE */
+  GQueue *event_queue;
   GstBuffer *buffer;
   GstBufferList *list;
 };
diff --git a/gst/patchdetect/Makefile.in b/gst/patchdetect/Makefile.in
index afe30c3..fa7a5cc 100644
--- a/gst/patchdetect/Makefile.in
+++ b/gst/patchdetect/Makefile.in
@@ -116,16 +116,15 @@
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
 	$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
-	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gsettings.m4 \
-	$(top_srcdir)/m4/gst-fionread.m4 $(top_srcdir)/m4/gst-sdl.m4 \
-	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
-	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
-	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libgcrypt.m4 \
-	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
-	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
-	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
-	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
-	$(top_srcdir)/configure.ac
+	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gst-fionread.m4 \
+	$(top_srcdir)/m4/gst-sdl.m4 $(top_srcdir)/m4/iconv.m4 \
+	$(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \
+	$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
+	$(top_srcdir)/m4/libgcrypt.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
+	$(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \
@@ -276,6 +275,8 @@
 CLUTTER_X11_LIBS = @CLUTTER_X11_LIBS@
 CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
+CUDA_CFLAGS = @CUDA_CFLAGS@
+CUDA_LIBS = @CUDA_LIBS@
 CURL_CFLAGS = @CURL_CFLAGS@
 CURL_LIBS = @CURL_LIBS@
 CXX = @CXX@
@@ -313,6 +314,8 @@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
+EGL_CFLAGS = @EGL_CFLAGS@
+EGL_LIBS = @EGL_LIBS@
 EGREP = @EGREP@
 ERROR_CFLAGS = @ERROR_CFLAGS@
 ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
@@ -321,7 +324,6 @@
 EXIF_CFLAGS = @EXIF_CFLAGS@
 EXIF_LIBS = @EXIF_LIBS@
 FAAC_LIBS = @FAAC_LIBS@
-FAAD_IS_NEAAC = @FAAD_IS_NEAAC@
 FAAD_LIBS = @FAAD_LIBS@
 FFLAGS = @FFLAGS@
 FGREP = @FGREP@
@@ -340,8 +342,9 @@
 GIO_LIBS = @GIO_LIBS@
 GIO_UNIX_CFLAGS = @GIO_UNIX_CFLAGS@
 GIO_UNIX_LIBS = @GIO_UNIX_LIBS@
+GLES2_CFLAGS = @GLES2_CFLAGS@
+GLES2_LIBS = @GLES2_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
-GLIB_COMPILE_SCHEMAS = @GLIB_COMPILE_SCHEMAS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
@@ -358,16 +361,17 @@
 GMODULE_NO_EXPORT_LIBS = @GMODULE_NO_EXPORT_LIBS@
 GMSGFMT = @GMSGFMT@
 GMSGFMT_015 = @GMSGFMT_015@
+GNUSTL_CFLAGS = @GNUSTL_CFLAGS@
+GNUSTL_LIBS = @GNUSTL_LIBS@
 GRAPHENE_CFLAGS = @GRAPHENE_CFLAGS@
 GRAPHENE_LIBS = @GRAPHENE_LIBS@
 GREP = @GREP@
-GSETTINGS_CFLAGS = @GSETTINGS_CFLAGS@
-GSETTINGS_DISABLE_SCHEMAS_COMPILE = @GSETTINGS_DISABLE_SCHEMAS_COMPILE@
-GSETTINGS_LIBS = @GSETTINGS_LIBS@
 GSM_LIBS = @GSM_LIBS@
 GSTPB_PLUGINS_DIR = @GSTPB_PLUGINS_DIR@
 GSTPB_PREFIX = @GSTPB_PREFIX@
 GST_AGE = @GST_AGE@
+GST_ALLOCATORS_CFLAGS = @GST_ALLOCATORS_CFLAGS@
+GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
 GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
 GST_API_VERSION = @GST_API_VERSION@
 GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
@@ -393,6 +397,8 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PBUTILS_CFLAGS = @GST_PBUTILS_CFLAGS@
+GST_PBUTILS_LIBS = @GST_PBUTILS_LIBS@
 GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BAD_CFLAGS = @GST_PLUGINS_BAD_CFLAGS@
@@ -418,6 +424,8 @@
 GST_PREFIX = @GST_PREFIX@
 GST_REVISION = @GST_REVISION@
 GST_TOOLS_DIR = @GST_TOOLS_DIR@
+GST_VIDEO_CFLAGS = @GST_VIDEO_CFLAGS@
+GST_VIDEO_LIBS = @GST_VIDEO_LIBS@
 GTK3_CFLAGS = @GTK3_CFLAGS@
 GTK3_GL_CFLAGS = @GTK3_GL_CFLAGS@
 GTK3_GL_LIBS = @GTK3_GL_LIBS@
@@ -519,6 +527,7 @@
 LTLIBICONV = @LTLIBICONV@
 LTLIBINTL = @LTLIBINTL@
 LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
 MANIFEST_TOOL = @MANIFEST_TOOL@
@@ -532,8 +541,6 @@
 MODPLUG_LIBS = @MODPLUG_LIBS@
 MPEG2ENC_CFLAGS = @MPEG2ENC_CFLAGS@
 MPEG2ENC_LIBS = @MPEG2ENC_LIBS@
-MPG123_CFLAGS = @MPG123_CFLAGS@
-MPG123_LIBS = @MPG123_LIBS@
 MPLEX_CFLAGS = @MPLEX_CFLAGS@
 MPLEX_LDFLAGS = @MPLEX_LDFLAGS@
 MPLEX_LIBS = @MPLEX_LIBS@
@@ -549,6 +556,8 @@
 NETTLE_LIBS = @NETTLE_LIBS@
 NM = @NM@
 NMEDIT = @NMEDIT@
+NVENCODE_CFLAGS = @NVENCODE_CFLAGS@
+NVENCODE_LIBS = @NVENCODE_LIBS@
 OBJC = @OBJC@
 OBJCDEPMODE = @OBJCDEPMODE@
 OBJCFLAGS = @OBJCFLAGS@
@@ -606,16 +615,18 @@
 PYTHON_PLATFORM = @PYTHON_PLATFORM@
 PYTHON_PREFIX = @PYTHON_PREFIX@
 PYTHON_VERSION = @PYTHON_VERSION@
+QT_ANDROID_CFLAGS = @QT_ANDROID_CFLAGS@
+QT_ANDROID_LIBS = @QT_ANDROID_LIBS@
 QT_CFLAGS = @QT_CFLAGS@
 QT_LIBS = @QT_LIBS@
+QT_MAC_CFLAGS = @QT_MAC_CFLAGS@
+QT_MAC_LIBS = @QT_MAC_LIBS@
 QT_WAYLAND_CFLAGS = @QT_WAYLAND_CFLAGS@
 QT_WAYLAND_LIBS = @QT_WAYLAND_LIBS@
 QT_X11_CFLAGS = @QT_X11_CFLAGS@
 QT_X11_LIBS = @QT_X11_LIBS@
 RANLIB = @RANLIB@
 RCC = @RCC@
-RSVG_2_36_2_CFLAGS = @RSVG_2_36_2_CFLAGS@
-RSVG_2_36_2_LIBS = @RSVG_2_36_2_LIBS@
 RSVG_CFLAGS = @RSVG_CFLAGS@
 RSVG_LIBS = @RSVG_LIBS@
 RTMP_CFLAGS = @RTMP_CFLAGS@
@@ -667,6 +678,7 @@
 VOAACENC_LIBS = @VOAACENC_LIBS@
 VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
 VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VULKAN_LIBS = @VULKAN_LIBS@
 WARNING_CFLAGS = @WARNING_CFLAGS@
 WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
 WARNING_OBJCFLAGS = @WARNING_OBJCFLAGS@
@@ -677,6 +689,7 @@
 WAYLAND_LIBS = @WAYLAND_LIBS@
 WEBP_CFLAGS = @WEBP_CFLAGS@
 WEBP_LIBS = @WEBP_LIBS@
+WGET = @WGET@
 WILDMIDI_CFLAGS = @WILDMIDI_CFLAGS@
 WILDMIDI_LIBS = @WILDMIDI_LIBS@
 WINKS_LIBS = @WINKS_LIBS@
@@ -686,6 +699,8 @@
 X11_LIBS = @X11_LIBS@
 X265_CFLAGS = @X265_CFLAGS@
 X265_LIBS = @X265_LIBS@
+XCB_CFLAGS = @XCB_CFLAGS@
+XCB_LIBS = @XCB_LIBS@
 XCOMPOSITE_CFLAGS = @XCOMPOSITE_CFLAGS@
 XCOMPOSITE_LIBS = @XCOMPOSITE_LIBS@
 XGETTEXT = @XGETTEXT@
@@ -723,7 +738,6 @@
 docdir = @docdir@
 dvidir = @dvidir@
 exec_prefix = @exec_prefix@
-gsettingsschemadir = @gsettingsschemadir@
 host = @host@
 host_alias = @host_alias@
 host_cpu = @host_cpu@
diff --git a/gst/pcapparse/Makefile.in b/gst/pcapparse/Makefile.in
index 4df81bd..71b498a 100644
--- a/gst/pcapparse/Makefile.in
+++ b/gst/pcapparse/Makefile.in
@@ -116,16 +116,15 @@
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
 	$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
-	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gsettings.m4 \
-	$(top_srcdir)/m4/gst-fionread.m4 $(top_srcdir)/m4/gst-sdl.m4 \
-	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
-	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
-	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libgcrypt.m4 \
-	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
-	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
-	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
-	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
-	$(top_srcdir)/configure.ac
+	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gst-fionread.m4 \
+	$(top_srcdir)/m4/gst-sdl.m4 $(top_srcdir)/m4/iconv.m4 \
+	$(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \
+	$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
+	$(top_srcdir)/m4/libgcrypt.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
+	$(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \
@@ -276,6 +275,8 @@
 CLUTTER_X11_LIBS = @CLUTTER_X11_LIBS@
 CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
+CUDA_CFLAGS = @CUDA_CFLAGS@
+CUDA_LIBS = @CUDA_LIBS@
 CURL_CFLAGS = @CURL_CFLAGS@
 CURL_LIBS = @CURL_LIBS@
 CXX = @CXX@
@@ -313,6 +314,8 @@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
+EGL_CFLAGS = @EGL_CFLAGS@
+EGL_LIBS = @EGL_LIBS@
 EGREP = @EGREP@
 ERROR_CFLAGS = @ERROR_CFLAGS@
 ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
@@ -321,7 +324,6 @@
 EXIF_CFLAGS = @EXIF_CFLAGS@
 EXIF_LIBS = @EXIF_LIBS@
 FAAC_LIBS = @FAAC_LIBS@
-FAAD_IS_NEAAC = @FAAD_IS_NEAAC@
 FAAD_LIBS = @FAAD_LIBS@
 FFLAGS = @FFLAGS@
 FGREP = @FGREP@
@@ -340,8 +342,9 @@
 GIO_LIBS = @GIO_LIBS@
 GIO_UNIX_CFLAGS = @GIO_UNIX_CFLAGS@
 GIO_UNIX_LIBS = @GIO_UNIX_LIBS@
+GLES2_CFLAGS = @GLES2_CFLAGS@
+GLES2_LIBS = @GLES2_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
-GLIB_COMPILE_SCHEMAS = @GLIB_COMPILE_SCHEMAS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
@@ -358,16 +361,17 @@
 GMODULE_NO_EXPORT_LIBS = @GMODULE_NO_EXPORT_LIBS@
 GMSGFMT = @GMSGFMT@
 GMSGFMT_015 = @GMSGFMT_015@
+GNUSTL_CFLAGS = @GNUSTL_CFLAGS@
+GNUSTL_LIBS = @GNUSTL_LIBS@
 GRAPHENE_CFLAGS = @GRAPHENE_CFLAGS@
 GRAPHENE_LIBS = @GRAPHENE_LIBS@
 GREP = @GREP@
-GSETTINGS_CFLAGS = @GSETTINGS_CFLAGS@
-GSETTINGS_DISABLE_SCHEMAS_COMPILE = @GSETTINGS_DISABLE_SCHEMAS_COMPILE@
-GSETTINGS_LIBS = @GSETTINGS_LIBS@
 GSM_LIBS = @GSM_LIBS@
 GSTPB_PLUGINS_DIR = @GSTPB_PLUGINS_DIR@
 GSTPB_PREFIX = @GSTPB_PREFIX@
 GST_AGE = @GST_AGE@
+GST_ALLOCATORS_CFLAGS = @GST_ALLOCATORS_CFLAGS@
+GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
 GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
 GST_API_VERSION = @GST_API_VERSION@
 GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
@@ -393,6 +397,8 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PBUTILS_CFLAGS = @GST_PBUTILS_CFLAGS@
+GST_PBUTILS_LIBS = @GST_PBUTILS_LIBS@
 GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BAD_CFLAGS = @GST_PLUGINS_BAD_CFLAGS@
@@ -418,6 +424,8 @@
 GST_PREFIX = @GST_PREFIX@
 GST_REVISION = @GST_REVISION@
 GST_TOOLS_DIR = @GST_TOOLS_DIR@
+GST_VIDEO_CFLAGS = @GST_VIDEO_CFLAGS@
+GST_VIDEO_LIBS = @GST_VIDEO_LIBS@
 GTK3_CFLAGS = @GTK3_CFLAGS@
 GTK3_GL_CFLAGS = @GTK3_GL_CFLAGS@
 GTK3_GL_LIBS = @GTK3_GL_LIBS@
@@ -519,6 +527,7 @@
 LTLIBICONV = @LTLIBICONV@
 LTLIBINTL = @LTLIBINTL@
 LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
 MANIFEST_TOOL = @MANIFEST_TOOL@
@@ -532,8 +541,6 @@
 MODPLUG_LIBS = @MODPLUG_LIBS@
 MPEG2ENC_CFLAGS = @MPEG2ENC_CFLAGS@
 MPEG2ENC_LIBS = @MPEG2ENC_LIBS@
-MPG123_CFLAGS = @MPG123_CFLAGS@
-MPG123_LIBS = @MPG123_LIBS@
 MPLEX_CFLAGS = @MPLEX_CFLAGS@
 MPLEX_LDFLAGS = @MPLEX_LDFLAGS@
 MPLEX_LIBS = @MPLEX_LIBS@
@@ -549,6 +556,8 @@
 NETTLE_LIBS = @NETTLE_LIBS@
 NM = @NM@
 NMEDIT = @NMEDIT@
+NVENCODE_CFLAGS = @NVENCODE_CFLAGS@
+NVENCODE_LIBS = @NVENCODE_LIBS@
 OBJC = @OBJC@
 OBJCDEPMODE = @OBJCDEPMODE@
 OBJCFLAGS = @OBJCFLAGS@
@@ -606,16 +615,18 @@
 PYTHON_PLATFORM = @PYTHON_PLATFORM@
 PYTHON_PREFIX = @PYTHON_PREFIX@
 PYTHON_VERSION = @PYTHON_VERSION@
+QT_ANDROID_CFLAGS = @QT_ANDROID_CFLAGS@
+QT_ANDROID_LIBS = @QT_ANDROID_LIBS@
 QT_CFLAGS = @QT_CFLAGS@
 QT_LIBS = @QT_LIBS@
+QT_MAC_CFLAGS = @QT_MAC_CFLAGS@
+QT_MAC_LIBS = @QT_MAC_LIBS@
 QT_WAYLAND_CFLAGS = @QT_WAYLAND_CFLAGS@
 QT_WAYLAND_LIBS = @QT_WAYLAND_LIBS@
 QT_X11_CFLAGS = @QT_X11_CFLAGS@
 QT_X11_LIBS = @QT_X11_LIBS@
 RANLIB = @RANLIB@
 RCC = @RCC@
-RSVG_2_36_2_CFLAGS = @RSVG_2_36_2_CFLAGS@
-RSVG_2_36_2_LIBS = @RSVG_2_36_2_LIBS@
 RSVG_CFLAGS = @RSVG_CFLAGS@
 RSVG_LIBS = @RSVG_LIBS@
 RTMP_CFLAGS = @RTMP_CFLAGS@
@@ -667,6 +678,7 @@
 VOAACENC_LIBS = @VOAACENC_LIBS@
 VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
 VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VULKAN_LIBS = @VULKAN_LIBS@
 WARNING_CFLAGS = @WARNING_CFLAGS@
 WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
 WARNING_OBJCFLAGS = @WARNING_OBJCFLAGS@
@@ -677,6 +689,7 @@
 WAYLAND_LIBS = @WAYLAND_LIBS@
 WEBP_CFLAGS = @WEBP_CFLAGS@
 WEBP_LIBS = @WEBP_LIBS@
+WGET = @WGET@
 WILDMIDI_CFLAGS = @WILDMIDI_CFLAGS@
 WILDMIDI_LIBS = @WILDMIDI_LIBS@
 WINKS_LIBS = @WINKS_LIBS@
@@ -686,6 +699,8 @@
 X11_LIBS = @X11_LIBS@
 X265_CFLAGS = @X265_CFLAGS@
 X265_LIBS = @X265_LIBS@
+XCB_CFLAGS = @XCB_CFLAGS@
+XCB_LIBS = @XCB_LIBS@
 XCOMPOSITE_CFLAGS = @XCOMPOSITE_CFLAGS@
 XCOMPOSITE_LIBS = @XCOMPOSITE_LIBS@
 XGETTEXT = @XGETTEXT@
@@ -723,7 +738,6 @@
 docdir = @docdir@
 dvidir = @dvidir@
 exec_prefix = @exec_prefix@
-gsettingsschemadir = @gsettingsschemadir@
 host = @host@
 host_alias = @host_alias@
 host_cpu = @host_cpu@
diff --git a/gst/pcapparse/gstirtspparse.c b/gst/pcapparse/gstirtspparse.c
index 8f5f6f6..88a0096 100644
--- a/gst/pcapparse/gstirtspparse.c
+++ b/gst/pcapparse/gstirtspparse.c
@@ -30,7 +30,7 @@
  * <refsect2>
  * <title>Example launch line</title>
  * |[
- * gst-launch-0.10 filesrc location=h264crasher.pcap ! pcapparse ! irtspparse
+ * gst-launch-1.0 filesrc location=h264crasher.pcap ! pcapparse ! irtspparse
  * ! rtph264depay ! ffdec_h264 ! fakesink
  * ]| Read from a pcap dump file using filesrc, extract the raw TCP packets,
  * depayload and decode them.
diff --git a/gst/pcapparse/gstpcapparse.c b/gst/pcapparse/gstpcapparse.c
index 9e20d86..21e0cab 100644
--- a/gst/pcapparse/gstpcapparse.c
+++ b/gst/pcapparse/gstpcapparse.c
@@ -28,7 +28,7 @@
  * <refsect2>
  * <title>Example pipelines</title>
  * |[
- * gst-launch-0.10 filesrc location=h264crasher.pcap ! pcapparse ! rtph264depay
+ * gst-launch-1.0 filesrc location=h264crasher.pcap ! pcapparse ! rtph264depay
  * ! ffdec_h264 ! fakesink
  * ]| Read from a pcap dump file using filesrc, extract the raw UDP packets,
  * depayload and decode them.
diff --git a/gst/pnm/Makefile.in b/gst/pnm/Makefile.in
index 4bb9f2a..3c935b0 100644
--- a/gst/pnm/Makefile.in
+++ b/gst/pnm/Makefile.in
@@ -116,16 +116,15 @@
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
 	$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
-	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gsettings.m4 \
-	$(top_srcdir)/m4/gst-fionread.m4 $(top_srcdir)/m4/gst-sdl.m4 \
-	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
-	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
-	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libgcrypt.m4 \
-	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
-	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
-	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
-	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
-	$(top_srcdir)/configure.ac
+	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gst-fionread.m4 \
+	$(top_srcdir)/m4/gst-sdl.m4 $(top_srcdir)/m4/iconv.m4 \
+	$(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \
+	$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
+	$(top_srcdir)/m4/libgcrypt.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
+	$(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \
@@ -276,6 +275,8 @@
 CLUTTER_X11_LIBS = @CLUTTER_X11_LIBS@
 CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
+CUDA_CFLAGS = @CUDA_CFLAGS@
+CUDA_LIBS = @CUDA_LIBS@
 CURL_CFLAGS = @CURL_CFLAGS@
 CURL_LIBS = @CURL_LIBS@
 CXX = @CXX@
@@ -313,6 +314,8 @@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
+EGL_CFLAGS = @EGL_CFLAGS@
+EGL_LIBS = @EGL_LIBS@
 EGREP = @EGREP@
 ERROR_CFLAGS = @ERROR_CFLAGS@
 ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
@@ -321,7 +324,6 @@
 EXIF_CFLAGS = @EXIF_CFLAGS@
 EXIF_LIBS = @EXIF_LIBS@
 FAAC_LIBS = @FAAC_LIBS@
-FAAD_IS_NEAAC = @FAAD_IS_NEAAC@
 FAAD_LIBS = @FAAD_LIBS@
 FFLAGS = @FFLAGS@
 FGREP = @FGREP@
@@ -340,8 +342,9 @@
 GIO_LIBS = @GIO_LIBS@
 GIO_UNIX_CFLAGS = @GIO_UNIX_CFLAGS@
 GIO_UNIX_LIBS = @GIO_UNIX_LIBS@
+GLES2_CFLAGS = @GLES2_CFLAGS@
+GLES2_LIBS = @GLES2_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
-GLIB_COMPILE_SCHEMAS = @GLIB_COMPILE_SCHEMAS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
@@ -358,16 +361,17 @@
 GMODULE_NO_EXPORT_LIBS = @GMODULE_NO_EXPORT_LIBS@
 GMSGFMT = @GMSGFMT@
 GMSGFMT_015 = @GMSGFMT_015@
+GNUSTL_CFLAGS = @GNUSTL_CFLAGS@
+GNUSTL_LIBS = @GNUSTL_LIBS@
 GRAPHENE_CFLAGS = @GRAPHENE_CFLAGS@
 GRAPHENE_LIBS = @GRAPHENE_LIBS@
 GREP = @GREP@
-GSETTINGS_CFLAGS = @GSETTINGS_CFLAGS@
-GSETTINGS_DISABLE_SCHEMAS_COMPILE = @GSETTINGS_DISABLE_SCHEMAS_COMPILE@
-GSETTINGS_LIBS = @GSETTINGS_LIBS@
 GSM_LIBS = @GSM_LIBS@
 GSTPB_PLUGINS_DIR = @GSTPB_PLUGINS_DIR@
 GSTPB_PREFIX = @GSTPB_PREFIX@
 GST_AGE = @GST_AGE@
+GST_ALLOCATORS_CFLAGS = @GST_ALLOCATORS_CFLAGS@
+GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
 GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
 GST_API_VERSION = @GST_API_VERSION@
 GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
@@ -393,6 +397,8 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PBUTILS_CFLAGS = @GST_PBUTILS_CFLAGS@
+GST_PBUTILS_LIBS = @GST_PBUTILS_LIBS@
 GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BAD_CFLAGS = @GST_PLUGINS_BAD_CFLAGS@
@@ -418,6 +424,8 @@
 GST_PREFIX = @GST_PREFIX@
 GST_REVISION = @GST_REVISION@
 GST_TOOLS_DIR = @GST_TOOLS_DIR@
+GST_VIDEO_CFLAGS = @GST_VIDEO_CFLAGS@
+GST_VIDEO_LIBS = @GST_VIDEO_LIBS@
 GTK3_CFLAGS = @GTK3_CFLAGS@
 GTK3_GL_CFLAGS = @GTK3_GL_CFLAGS@
 GTK3_GL_LIBS = @GTK3_GL_LIBS@
@@ -519,6 +527,7 @@
 LTLIBICONV = @LTLIBICONV@
 LTLIBINTL = @LTLIBINTL@
 LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
 MANIFEST_TOOL = @MANIFEST_TOOL@
@@ -532,8 +541,6 @@
 MODPLUG_LIBS = @MODPLUG_LIBS@
 MPEG2ENC_CFLAGS = @MPEG2ENC_CFLAGS@
 MPEG2ENC_LIBS = @MPEG2ENC_LIBS@
-MPG123_CFLAGS = @MPG123_CFLAGS@
-MPG123_LIBS = @MPG123_LIBS@
 MPLEX_CFLAGS = @MPLEX_CFLAGS@
 MPLEX_LDFLAGS = @MPLEX_LDFLAGS@
 MPLEX_LIBS = @MPLEX_LIBS@
@@ -549,6 +556,8 @@
 NETTLE_LIBS = @NETTLE_LIBS@
 NM = @NM@
 NMEDIT = @NMEDIT@
+NVENCODE_CFLAGS = @NVENCODE_CFLAGS@
+NVENCODE_LIBS = @NVENCODE_LIBS@
 OBJC = @OBJC@
 OBJCDEPMODE = @OBJCDEPMODE@
 OBJCFLAGS = @OBJCFLAGS@
@@ -606,16 +615,18 @@
 PYTHON_PLATFORM = @PYTHON_PLATFORM@
 PYTHON_PREFIX = @PYTHON_PREFIX@
 PYTHON_VERSION = @PYTHON_VERSION@
+QT_ANDROID_CFLAGS = @QT_ANDROID_CFLAGS@
+QT_ANDROID_LIBS = @QT_ANDROID_LIBS@
 QT_CFLAGS = @QT_CFLAGS@
 QT_LIBS = @QT_LIBS@
+QT_MAC_CFLAGS = @QT_MAC_CFLAGS@
+QT_MAC_LIBS = @QT_MAC_LIBS@
 QT_WAYLAND_CFLAGS = @QT_WAYLAND_CFLAGS@
 QT_WAYLAND_LIBS = @QT_WAYLAND_LIBS@
 QT_X11_CFLAGS = @QT_X11_CFLAGS@
 QT_X11_LIBS = @QT_X11_LIBS@
 RANLIB = @RANLIB@
 RCC = @RCC@
-RSVG_2_36_2_CFLAGS = @RSVG_2_36_2_CFLAGS@
-RSVG_2_36_2_LIBS = @RSVG_2_36_2_LIBS@
 RSVG_CFLAGS = @RSVG_CFLAGS@
 RSVG_LIBS = @RSVG_LIBS@
 RTMP_CFLAGS = @RTMP_CFLAGS@
@@ -667,6 +678,7 @@
 VOAACENC_LIBS = @VOAACENC_LIBS@
 VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
 VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VULKAN_LIBS = @VULKAN_LIBS@
 WARNING_CFLAGS = @WARNING_CFLAGS@
 WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
 WARNING_OBJCFLAGS = @WARNING_OBJCFLAGS@
@@ -677,6 +689,7 @@
 WAYLAND_LIBS = @WAYLAND_LIBS@
 WEBP_CFLAGS = @WEBP_CFLAGS@
 WEBP_LIBS = @WEBP_LIBS@
+WGET = @WGET@
 WILDMIDI_CFLAGS = @WILDMIDI_CFLAGS@
 WILDMIDI_LIBS = @WILDMIDI_LIBS@
 WINKS_LIBS = @WINKS_LIBS@
@@ -686,6 +699,8 @@
 X11_LIBS = @X11_LIBS@
 X265_CFLAGS = @X265_CFLAGS@
 X265_LIBS = @X265_LIBS@
+XCB_CFLAGS = @XCB_CFLAGS@
+XCB_LIBS = @XCB_LIBS@
 XCOMPOSITE_CFLAGS = @XCOMPOSITE_CFLAGS@
 XCOMPOSITE_LIBS = @XCOMPOSITE_LIBS@
 XGETTEXT = @XGETTEXT@
@@ -723,7 +738,6 @@
 docdir = @docdir@
 dvidir = @dvidir@
 exec_prefix = @exec_prefix@
-gsettingsschemadir = @gsettingsschemadir@
 host = @host@
 host_alias = @host_alias@
 host_cpu = @host_cpu@
diff --git a/gst/pnm/gstpnmdec.c b/gst/pnm/gstpnmdec.c
index 8bcb094..93c4140 100644
--- a/gst/pnm/gstpnmdec.c
+++ b/gst/pnm/gstpnmdec.c
@@ -25,7 +25,7 @@
  * <refsect2>
  * <title>Example launch line</title>
  * |[
- * gst-launch filesrc location=test.pnm ! pnmdec ! videoconvert ! autovideosink
+ * gst-launch-1.0 filesrc location=test.pnm ! pnmdec ! videoconvert ! autovideosink
  * ]| The above pipeline reads a pnm file and renders it to the screen.
  * </refsect2>
  */
@@ -138,6 +138,10 @@
     pnmdec->input_state = NULL;
   }
 
+  if (pnmdec->buf) {
+    gst_buffer_unref (pnmdec->buf);
+    pnmdec->buf = NULL;
+  }
   return TRUE;
 }
 
@@ -186,6 +190,7 @@
       case G_TOKEN_INT:
         if (i == target) {
           GST_DEBUG_OBJECT (s, "PNM file contains too much data.");
+          g_scanner_destroy (scanner);
           goto drop_error;
         }
         outdata[i++] = scanner->value.v_int;
diff --git a/gst/pnm/gstpnmenc.c b/gst/pnm/gstpnmenc.c
index 8a0461c..32fd6f6 100644
--- a/gst/pnm/gstpnmenc.c
+++ b/gst/pnm/gstpnmenc.c
@@ -27,7 +27,7 @@
  * <refsect>
  * <title>Example launch line</title>
  * |[
- * gst-launch videotestsrc num_buffers=1 ! videoconvert ! "video/x-raw,format=GRAY8" ! pnmenc ascii=true ! filesink location=test.pnm
+ * gst-launch-1.0 videotestsrc num_buffers=1 ! videoconvert ! "video/x-raw,format=GRAY8" ! pnmenc ascii=true ! filesink location=test.pnm
  * ]| The above pipeline writes a test pnm file (ASCII encoding).
  * </refsect2>
  */
@@ -174,7 +174,7 @@
   GstPnmenc *pnmenc;
   guint size, pixels;
   GstMapInfo omap, imap;
-  gchar *header;
+  gchar *header = NULL;
   GstVideoInfo *info;
   GstFlowReturn ret = GST_FLOW_OK;
   guint i_rowstride, o_rowstride;
@@ -202,10 +202,10 @@
 
   if (pnmenc->info.encoding == GST_PNM_ENCODING_ASCII) {
     /* Per component 4 bytes are used in case of ASCII encoding */
-    size = size * 4;
+    size = size * 4 + size / 20;
     size += strlen (header);
     frame->output_buffer =
-        gst_video_encoder_allocate_output_buffer (encoder, (size + size / 20));
+        gst_video_encoder_allocate_output_buffer (encoder, (size));
   } else {
     size += strlen (header);
     frame->output_buffer =
@@ -284,6 +284,7 @@
     goto done;
 
 done:
+  g_free (header);
   return ret;
 }
 
diff --git a/gst/rawparse/Makefile.in b/gst/rawparse/Makefile.in
index d153576..b314a10 100644
--- a/gst/rawparse/Makefile.in
+++ b/gst/rawparse/Makefile.in
@@ -116,16 +116,15 @@
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
 	$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
-	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gsettings.m4 \
-	$(top_srcdir)/m4/gst-fionread.m4 $(top_srcdir)/m4/gst-sdl.m4 \
-	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
-	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
-	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libgcrypt.m4 \
-	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
-	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
-	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
-	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
-	$(top_srcdir)/configure.ac
+	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gst-fionread.m4 \
+	$(top_srcdir)/m4/gst-sdl.m4 $(top_srcdir)/m4/iconv.m4 \
+	$(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \
+	$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
+	$(top_srcdir)/m4/libgcrypt.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
+	$(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \
@@ -276,6 +275,8 @@
 CLUTTER_X11_LIBS = @CLUTTER_X11_LIBS@
 CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
+CUDA_CFLAGS = @CUDA_CFLAGS@
+CUDA_LIBS = @CUDA_LIBS@
 CURL_CFLAGS = @CURL_CFLAGS@
 CURL_LIBS = @CURL_LIBS@
 CXX = @CXX@
@@ -313,6 +314,8 @@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
+EGL_CFLAGS = @EGL_CFLAGS@
+EGL_LIBS = @EGL_LIBS@
 EGREP = @EGREP@
 ERROR_CFLAGS = @ERROR_CFLAGS@
 ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
@@ -321,7 +324,6 @@
 EXIF_CFLAGS = @EXIF_CFLAGS@
 EXIF_LIBS = @EXIF_LIBS@
 FAAC_LIBS = @FAAC_LIBS@
-FAAD_IS_NEAAC = @FAAD_IS_NEAAC@
 FAAD_LIBS = @FAAD_LIBS@
 FFLAGS = @FFLAGS@
 FGREP = @FGREP@
@@ -340,8 +342,9 @@
 GIO_LIBS = @GIO_LIBS@
 GIO_UNIX_CFLAGS = @GIO_UNIX_CFLAGS@
 GIO_UNIX_LIBS = @GIO_UNIX_LIBS@
+GLES2_CFLAGS = @GLES2_CFLAGS@
+GLES2_LIBS = @GLES2_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
-GLIB_COMPILE_SCHEMAS = @GLIB_COMPILE_SCHEMAS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
@@ -358,16 +361,17 @@
 GMODULE_NO_EXPORT_LIBS = @GMODULE_NO_EXPORT_LIBS@
 GMSGFMT = @GMSGFMT@
 GMSGFMT_015 = @GMSGFMT_015@
+GNUSTL_CFLAGS = @GNUSTL_CFLAGS@
+GNUSTL_LIBS = @GNUSTL_LIBS@
 GRAPHENE_CFLAGS = @GRAPHENE_CFLAGS@
 GRAPHENE_LIBS = @GRAPHENE_LIBS@
 GREP = @GREP@
-GSETTINGS_CFLAGS = @GSETTINGS_CFLAGS@
-GSETTINGS_DISABLE_SCHEMAS_COMPILE = @GSETTINGS_DISABLE_SCHEMAS_COMPILE@
-GSETTINGS_LIBS = @GSETTINGS_LIBS@
 GSM_LIBS = @GSM_LIBS@
 GSTPB_PLUGINS_DIR = @GSTPB_PLUGINS_DIR@
 GSTPB_PREFIX = @GSTPB_PREFIX@
 GST_AGE = @GST_AGE@
+GST_ALLOCATORS_CFLAGS = @GST_ALLOCATORS_CFLAGS@
+GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
 GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
 GST_API_VERSION = @GST_API_VERSION@
 GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
@@ -393,6 +397,8 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PBUTILS_CFLAGS = @GST_PBUTILS_CFLAGS@
+GST_PBUTILS_LIBS = @GST_PBUTILS_LIBS@
 GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BAD_CFLAGS = @GST_PLUGINS_BAD_CFLAGS@
@@ -418,6 +424,8 @@
 GST_PREFIX = @GST_PREFIX@
 GST_REVISION = @GST_REVISION@
 GST_TOOLS_DIR = @GST_TOOLS_DIR@
+GST_VIDEO_CFLAGS = @GST_VIDEO_CFLAGS@
+GST_VIDEO_LIBS = @GST_VIDEO_LIBS@
 GTK3_CFLAGS = @GTK3_CFLAGS@
 GTK3_GL_CFLAGS = @GTK3_GL_CFLAGS@
 GTK3_GL_LIBS = @GTK3_GL_LIBS@
@@ -519,6 +527,7 @@
 LTLIBICONV = @LTLIBICONV@
 LTLIBINTL = @LTLIBINTL@
 LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
 MANIFEST_TOOL = @MANIFEST_TOOL@
@@ -532,8 +541,6 @@
 MODPLUG_LIBS = @MODPLUG_LIBS@
 MPEG2ENC_CFLAGS = @MPEG2ENC_CFLAGS@
 MPEG2ENC_LIBS = @MPEG2ENC_LIBS@
-MPG123_CFLAGS = @MPG123_CFLAGS@
-MPG123_LIBS = @MPG123_LIBS@
 MPLEX_CFLAGS = @MPLEX_CFLAGS@
 MPLEX_LDFLAGS = @MPLEX_LDFLAGS@
 MPLEX_LIBS = @MPLEX_LIBS@
@@ -549,6 +556,8 @@
 NETTLE_LIBS = @NETTLE_LIBS@
 NM = @NM@
 NMEDIT = @NMEDIT@
+NVENCODE_CFLAGS = @NVENCODE_CFLAGS@
+NVENCODE_LIBS = @NVENCODE_LIBS@
 OBJC = @OBJC@
 OBJCDEPMODE = @OBJCDEPMODE@
 OBJCFLAGS = @OBJCFLAGS@
@@ -606,16 +615,18 @@
 PYTHON_PLATFORM = @PYTHON_PLATFORM@
 PYTHON_PREFIX = @PYTHON_PREFIX@
 PYTHON_VERSION = @PYTHON_VERSION@
+QT_ANDROID_CFLAGS = @QT_ANDROID_CFLAGS@
+QT_ANDROID_LIBS = @QT_ANDROID_LIBS@
 QT_CFLAGS = @QT_CFLAGS@
 QT_LIBS = @QT_LIBS@
+QT_MAC_CFLAGS = @QT_MAC_CFLAGS@
+QT_MAC_LIBS = @QT_MAC_LIBS@
 QT_WAYLAND_CFLAGS = @QT_WAYLAND_CFLAGS@
 QT_WAYLAND_LIBS = @QT_WAYLAND_LIBS@
 QT_X11_CFLAGS = @QT_X11_CFLAGS@
 QT_X11_LIBS = @QT_X11_LIBS@
 RANLIB = @RANLIB@
 RCC = @RCC@
-RSVG_2_36_2_CFLAGS = @RSVG_2_36_2_CFLAGS@
-RSVG_2_36_2_LIBS = @RSVG_2_36_2_LIBS@
 RSVG_CFLAGS = @RSVG_CFLAGS@
 RSVG_LIBS = @RSVG_LIBS@
 RTMP_CFLAGS = @RTMP_CFLAGS@
@@ -667,6 +678,7 @@
 VOAACENC_LIBS = @VOAACENC_LIBS@
 VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
 VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VULKAN_LIBS = @VULKAN_LIBS@
 WARNING_CFLAGS = @WARNING_CFLAGS@
 WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
 WARNING_OBJCFLAGS = @WARNING_OBJCFLAGS@
@@ -677,6 +689,7 @@
 WAYLAND_LIBS = @WAYLAND_LIBS@
 WEBP_CFLAGS = @WEBP_CFLAGS@
 WEBP_LIBS = @WEBP_LIBS@
+WGET = @WGET@
 WILDMIDI_CFLAGS = @WILDMIDI_CFLAGS@
 WILDMIDI_LIBS = @WILDMIDI_LIBS@
 WINKS_LIBS = @WINKS_LIBS@
@@ -686,6 +699,8 @@
 X11_LIBS = @X11_LIBS@
 X265_CFLAGS = @X265_CFLAGS@
 X265_LIBS = @X265_LIBS@
+XCB_CFLAGS = @XCB_CFLAGS@
+XCB_LIBS = @XCB_LIBS@
 XCOMPOSITE_CFLAGS = @XCOMPOSITE_CFLAGS@
 XCOMPOSITE_LIBS = @XCOMPOSITE_LIBS@
 XGETTEXT = @XGETTEXT@
@@ -723,7 +738,6 @@
 docdir = @docdir@
 dvidir = @dvidir@
 exec_prefix = @exec_prefix@
-gsettingsschemadir = @gsettingsschemadir@
 host = @host@
 host_alias = @host_alias@
 host_cpu = @host_cpu@
diff --git a/gst/rawparse/README b/gst/rawparse/README
index 417e926..9e21be2 100644
--- a/gst/rawparse/README
+++ b/gst/rawparse/README
@@ -9,7 +9,7 @@
 Creating example data
 =====================
 
-gst-launch videotestsrc num_buffers=300 ! \
+gst-launch-1.0 videotestsrc num_buffers=300 ! \
   video/x-raw,format=\(string\)I420,width=320,height=240 ! \
   filesink location=raw
 
@@ -17,7 +17,7 @@
 Reading example data
 ====================
 
-gst-launch filesrc location=raw ! \
+gst-launch-1.0 filesrc location=raw ! \
   videoparse format=I420 width=320 height=240 framerate=30/1 ! \
   xvimagesink
 
diff --git a/gst/rawparse/gstrawparse.c b/gst/rawparse/gstrawparse.c
index 0308890..a6468d9 100644
--- a/gst/rawparse/gstrawparse.c
+++ b/gst/rawparse/gstrawparse.c
@@ -222,6 +222,22 @@
   }
 
   rp->negotiated = gst_pad_set_caps (rp->srcpad, caps);
+
+  /* if subclass inplement decide_allocation, send an allocation
+   * query, pass result to subclass and let it handle allocation if needed. */
+  if (rp_class->decide_allocation) {
+    GstQuery *query;
+
+    query = gst_query_new_allocation (caps, TRUE);
+    if (!gst_pad_peer_query (rp->srcpad, query)) {
+      /* not a problem, just debug a little */
+      GST_DEBUG_OBJECT (rp, "peer ALLOCATION query failed");
+    }
+
+    rp_class->decide_allocation (rp, query);
+    gst_query_unref (query);
+  }
+
   gst_caps_unref (caps);
 
   return rp->negotiated;
@@ -233,10 +249,12 @@
   GstFlowReturn ret;
   gint nframes;
   GstRawParseClass *rpclass;
+  gsize size;
 
   rpclass = GST_RAW_PARSE_GET_CLASS (rp);
 
-  nframes = gst_buffer_get_size (buffer) / rp->framesize;
+  size = gst_buffer_get_size (buffer);
+  nframes = size / rp->framesize;
 
   if (rp->segment.rate < 0) {
     rp->n_frames -= nframes;
@@ -257,8 +275,8 @@
     GST_BUFFER_DURATION (buffer) = GST_CLOCK_TIME_NONE;
   }
 
-  if (rpclass->set_buffer_flags) {
-    rpclass->set_buffer_flags (rp, buffer);
+  if (rpclass->pre_push_buffer) {
+    rpclass->pre_push_buffer (rp, buffer);
   }
 
   if (rp->discont) {
@@ -267,7 +285,7 @@
   }
 
   if (rp->segment.rate >= 0) {
-    rp->offset += gst_buffer_get_size (buffer);
+    rp->offset += size;
     rp->n_frames += nframes;
   }
 
diff --git a/gst/rawparse/gstrawparse.h b/gst/rawparse/gstrawparse.h
index f62bb98..2327dc6 100644
--- a/gst/rawparse/gstrawparse.h
+++ b/gst/rawparse/gstrawparse.h
@@ -77,7 +77,8 @@
   GstElementClass parent_class;
 
   GstCaps * (*get_caps) (GstRawParse *rp);
-  void (*set_buffer_flags) (GstRawParse *rp, GstBuffer *buffer);
+  void (*pre_push_buffer) (GstRawParse *rp, GstBuffer *buffer);
+  void (*decide_allocation) (GstRawParse *rp, GstQuery *query);
 
   gboolean multiple_frames_per_buffer;
 };
diff --git a/gst/rawparse/gstvideoparse.c b/gst/rawparse/gstvideoparse.c
index b8bc7d1..7b5e037 100644
--- a/gst/rawparse/gstvideoparse.c
+++ b/gst/rawparse/gstvideoparse.c
@@ -37,10 +37,14 @@
     GValue * value, GParamSpec * pspec);
 
 static GstCaps *gst_video_parse_get_caps (GstRawParse * rp);
-static void gst_video_parse_set_buffer_flags (GstRawParse * rp,
+static void gst_video_parse_pre_push_buffer (GstRawParse * rp,
     GstBuffer * buffer);
+static void gst_video_parse_decide_allocation (GstRawParse * rp,
+    GstQuery * query);
 
-static void gst_video_parse_update_frame_size (GstVideoParse * vp);
+static void gst_video_parse_update_info (GstVideoParse * vp);
+static gboolean gst_video_parse_deserialize_int_array (const gchar * str,
+    gint * dest, guint n_values);
 
 GST_DEBUG_CATEGORY_STATIC (gst_video_parse_debug);
 #define GST_CAT_DEFAULT gst_video_parse_debug
@@ -54,7 +58,10 @@
   PROP_PAR,
   PROP_FRAMERATE,
   PROP_INTERLACED,
-  PROP_TOP_FIELD_FIRST
+  PROP_TOP_FIELD_FIRST,
+  PROP_STRIDES,
+  PROP_OFFSETS,
+  PROP_FRAMESIZE
 };
 
 #define gst_video_parse_parent_class parent_class
@@ -72,7 +79,8 @@
   gobject_class->get_property = gst_video_parse_get_property;
 
   rp_class->get_caps = gst_video_parse_get_caps;
-  rp_class->set_buffer_flags = gst_video_parse_set_buffer_flags;
+  rp_class->pre_push_buffer = gst_video_parse_pre_push_buffer;
+  rp_class->decide_allocation = gst_video_parse_decide_allocation;
 
   g_object_class_install_property (gobject_class, PROP_FORMAT,
       g_param_spec_enum ("format", "Format", "Format of images in raw stream",
@@ -100,6 +108,18 @@
       g_param_spec_boolean ("top-field-first", "Top field first",
           "True if top field is earlier than bottom field", TRUE,
           G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+  g_object_class_install_property (gobject_class, PROP_STRIDES,
+      g_param_spec_string ("strides", "Strides",
+          "Stride of each planes in bytes using string format: 's0,s1,s2,s3'",
+          NULL, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+  g_object_class_install_property (gobject_class, PROP_OFFSETS,
+      g_param_spec_string ("offsets", "Offsets",
+          "Offset of each planes in bytes using string format: 'o0,o1,o2,o3'",
+          NULL, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+  g_object_class_install_property (gobject_class, PROP_FRAMESIZE,
+      g_param_spec_uint ("framesize", "Framesize",
+          "Size of an image in raw stream (0: default)", 0, G_MAXUINT, 0,
+          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
 
   gst_element_class_set_static_metadata (gstelement_class, "Video Parse",
       "Filter/Video",
@@ -126,8 +146,8 @@
   vp->par_n = 1;
   vp->par_d = 1;
 
-  gst_video_parse_update_frame_size (vp);
   gst_raw_parse_set_fps (GST_RAW_PARSE (vp), 25, 1);
+  gst_video_parse_update_info (vp);
 }
 
 static void
@@ -163,12 +183,35 @@
     case PROP_TOP_FIELD_FIRST:
       vp->top_field_first = g_value_get_boolean (value);
       break;
+    case PROP_STRIDES:
+      if (gst_video_parse_deserialize_int_array (g_value_get_string (value),
+              vp->stride, GST_VIDEO_MAX_PLANES)) {
+        vp->stride_set = TRUE;
+      } else {
+        GST_WARNING_OBJECT (vp, "failed to deserialize given strides");
+        vp->stride_set = FALSE;
+      }
+
+      break;
+    case PROP_OFFSETS:
+      if (gst_video_parse_deserialize_int_array (g_value_get_string (value),
+              vp->offset, GST_VIDEO_MAX_PLANES)) {
+        vp->offset_set = TRUE;
+      } else {
+        GST_WARNING_OBJECT (vp, "failed to deserialized given offsets");
+        vp->offset_set = FALSE;
+      }
+
+      break;
+    case PROP_FRAMESIZE:
+      vp->framesize = g_value_get_uint (value);
+      break;
     default:
       G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
       break;
   }
 
-  gst_video_parse_update_frame_size (vp);
+  gst_video_parse_update_info (vp);
 }
 
 static void
@@ -203,22 +246,259 @@
     case PROP_TOP_FIELD_FIRST:
       g_value_set_boolean (value, vp->top_field_first);
       break;
+    case PROP_STRIDES:
+    {
+      gchar *tmp;
+
+      tmp = g_strdup_printf ("%d,%d,%d,%d", vp->info.stride[0],
+          vp->info.stride[1], vp->info.stride[2], vp->info.stride[3]);
+      g_value_set_string (value, tmp);
+      g_free (tmp);
+      break;
+    }
+    case PROP_OFFSETS:
+    {
+      gchar *tmp;
+
+      tmp = g_strdup_printf ("%" G_GSIZE_FORMAT ",%" G_GSIZE_FORMAT
+          ",%" G_GSIZE_FORMAT ",%" G_GSIZE_FORMAT, vp->info.offset[0],
+          vp->info.offset[1], vp->info.offset[2], vp->info.offset[3]);
+      g_value_set_string (value, tmp);
+      g_free (tmp);
+      break;
+    }
+    case PROP_FRAMESIZE:
+      g_value_set_uint (value, vp->info.size);
+      break;
     default:
       G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
       break;
   }
 }
 
-void
-gst_video_parse_update_frame_size (GstVideoParse * vp)
+static gboolean
+gst_video_parse_deserialize_int_array (const gchar * str, gint * dest,
+    guint n_values)
 {
+  gchar **strv;
+  guint length;
+  guint i;
+
+  strv = g_strsplit (str, ",", n_values);
+  if (strv == NULL)
+    return FALSE;
+
+  length = g_strv_length (strv);
+
+  for (i = 0; i < length; i++) {
+    gint64 val;
+
+    val = g_ascii_strtoll (strv[i], NULL, 10);
+    if (val < G_MININT || val > G_MAXINT) {
+      g_strfreev (strv);
+      return FALSE;
+    }
+
+    dest[i] = val;
+  }
+
+  /* fill remaining values with 0 */
+  for (i = length; i < n_values; i++)
+    dest[i] = 0;
+
+  g_strfreev (strv);
+
+  return TRUE;
+}
+
+static inline gsize
+gst_video_parse_get_plane_size (GstVideoInfo * info, guint plane)
+{
+  gsize size = 0;
+
+  if (GST_VIDEO_FORMAT_INFO_IS_TILED (info->finfo)) {
+    gint tile_width, tile_height, x_tiles, y_tiles;
+
+    tile_width = 1 << GST_VIDEO_FORMAT_INFO_TILE_WS (info->finfo);
+    tile_height = 1 << GST_VIDEO_FORMAT_INFO_TILE_HS (info->finfo);
+    x_tiles = GST_VIDEO_TILE_X_TILES (info->stride[plane]);
+    y_tiles = GST_VIDEO_TILE_Y_TILES (info->stride[plane]);
+
+    /* plane size is the size of one tile multiplied by the number of tiles */
+    size = tile_width * tile_height * x_tiles * y_tiles;
+  } else {
+    size = info->stride[plane] *
+        GST_VIDEO_FORMAT_INFO_SCALE_HEIGHT (info->finfo, plane, info->height);
+  }
+
+  return size;
+}
+
+
+static gboolean
+gst_video_parse_update_stride (GstVideoParse * vp)
+{
+  GstVideoInfo *info = &vp->info;
+  guint i;
+
+  /* 1. check that provided strides are greater than the default ones */
+  for (i = 0; i < GST_VIDEO_INFO_N_PLANES (info); i++) {
+    if (GST_VIDEO_FORMAT_INFO_IS_TILED (info->finfo)) {
+      /* for tiled format, make sure there is more tiles than default */
+      gint default_x_tiles, default_y_tiles, x_tiles, y_tiles;
+
+      x_tiles = GST_VIDEO_TILE_X_TILES (vp->stride[i]);
+      y_tiles = GST_VIDEO_TILE_Y_TILES (vp->stride[i]);
+      default_x_tiles = GST_VIDEO_TILE_X_TILES (info->stride[i]);
+      default_y_tiles = GST_VIDEO_TILE_Y_TILES (info->stride[i]);
+
+      if (x_tiles < default_x_tiles) {
+        GST_WARNING_OBJECT (vp,
+            "x_tiles for plane %u is too small: got %d, min %d", i, x_tiles,
+            default_x_tiles);
+        return FALSE;
+      }
+
+      if (y_tiles < default_y_tiles) {
+        GST_WARNING_OBJECT (vp,
+            "y_tiles for plane %u is too small: got %d, min %d", i, y_tiles,
+            default_y_tiles);
+        return FALSE;
+      }
+    } else {
+      if (vp->stride[i] < info->stride[i]) {
+        GST_WARNING_OBJECT (vp,
+            "stride for plane %u is too small: got %d, min %d", i,
+            vp->stride[i], info->stride[i]);
+        return FALSE;
+      }
+    }
+  }
+
+  /* 2. update stride and plane offsets */
+  for (i = 0; i < GST_VIDEO_INFO_N_PLANES (info); i++) {
+    if (vp->stride[i] != info->stride[i]) {
+      info->stride[i] = vp->stride[i];
+
+      if (i > 0) {
+        /* update offset to reflect stride change for plane > 0 */
+        info->offset[i] = info->offset[i - 1] +
+            gst_video_parse_get_plane_size (info, i - 1);
+      }
+
+      vp->need_videometa = TRUE;
+    }
+  }
+
+  return TRUE;
+}
+
+static gboolean
+gst_video_parse_update_offset (GstVideoParse * vp)
+{
+  GstVideoInfo *info = &vp->info;
+  guint i;
+
+  /* 1. check that provided offsets are greaters than the default ones and are
+   * consistent with plane size */
+  for (i = 0; i < GST_VIDEO_INFO_N_PLANES (info); i++) {
+    gsize min_offset = info->offset[i];
+
+    if (i > 0)
+      min_offset = MAX (min_offset,
+          vp->offset[i - 1] + gst_video_parse_get_plane_size (info, i - 1));
+
+    if (vp->offset[i] < min_offset) {
+      GST_WARNING_OBJECT (vp,
+          "offset for plane %u is too small: got %d, min %" G_GSIZE_FORMAT, i,
+          vp->offset[i], min_offset);
+      return FALSE;
+    }
+  }
+
+  /* 2. update offsets */
+  for (i = 0; i < GST_VIDEO_INFO_N_PLANES (info); i++) {
+    if (vp->offset[i] != info->offset[i]) {
+      info->offset[i] = vp->offset[i];
+      vp->need_videometa = TRUE;
+    }
+  }
+
+  return TRUE;
+}
+
+static void
+gst_video_parse_update_info (GstVideoParse * vp)
+{
+  GstVideoInfo *info = &vp->info;
+  gint fps_n, fps_d;
   gint framesize;
-  GstVideoInfo info;
+  guint i;
+  gboolean update_size = FALSE;
 
-  gst_video_info_init (&info);
-  gst_video_info_set_format (&info, vp->format, vp->width, vp->height);
-  framesize = GST_VIDEO_INFO_SIZE (&info);
+  gst_raw_parse_get_fps (GST_RAW_PARSE (vp), &fps_n, &fps_d);
 
+  gst_video_info_init (info);
+  gst_video_info_set_format (info, vp->format, vp->width, vp->height);
+  info->fps_n = fps_n;
+  info->fps_d = fps_d;
+  info->par_n = vp->par_n;
+  info->par_d = vp->par_d;
+  info->interlace_mode = vp->interlaced ?
+      GST_VIDEO_INTERLACE_MODE_INTERLEAVED :
+      GST_VIDEO_INTERLACE_MODE_PROGRESSIVE;
+
+  vp->need_videometa = FALSE;
+
+  if (vp->stride_set) {
+    if (gst_video_parse_update_stride (vp))
+      update_size = TRUE;
+    else
+      GST_WARNING_OBJECT (vp, "invalid strides set, use default ones");
+  }
+
+  if (vp->offset_set) {
+    if (gst_video_parse_update_offset (vp))
+      update_size = TRUE;
+    else
+      GST_WARNING_OBJECT (vp, "invalid offsets set, use default ones");
+  }
+
+  if (update_size) {
+    framesize = 0;
+
+    for (i = 0; i < GST_VIDEO_INFO_N_PLANES (info); i++) {
+      gint planesize = info->offset[i];
+      planesize += gst_video_parse_get_plane_size (info, i);
+
+      if (planesize > framesize)
+        framesize = planesize;
+    }
+
+    info->size = framesize;
+  }
+
+  if (vp->framesize) {
+    /* user requires a specific framesize, just make sure it's bigger than
+     * the current one */
+
+    if (vp->framesize > vp->info.size)
+      vp->info.size = vp->framesize;
+    else
+      GST_WARNING_OBJECT (vp, "invalid framesize set: got %u, min: %"
+          G_GSIZE_FORMAT, vp->framesize, vp->info.size);
+  }
+
+  GST_DEBUG_OBJECT (vp, "video info: %ux%u, format %s, size %" G_GSIZE_FORMAT
+      ", stride {%d,%d,%d,%d}, offset {%" G_GSIZE_FORMAT ",%" G_GSIZE_FORMAT
+      ",%" G_GSIZE_FORMAT ",%" G_GSIZE_FORMAT "}",
+      GST_VIDEO_INFO_WIDTH (info), GST_VIDEO_INFO_HEIGHT (info),
+      GST_VIDEO_INFO_NAME (info), GST_VIDEO_INFO_SIZE (info),
+      info->stride[0], info->stride[1], info->stride[2], info->stride[3],
+      info->offset[0], info->offset[1], info->offset[2], info->offset[3]);
+
+  /* update base class framesize */
+  framesize = GST_VIDEO_INFO_SIZE (info);
   gst_raw_parse_set_framesize (GST_RAW_PARSE (vp), framesize);
 }
 
@@ -226,32 +506,70 @@
 gst_video_parse_get_caps (GstRawParse * rp)
 {
   GstVideoParse *vp = GST_VIDEO_PARSE (rp);
-  GstVideoInfo info;
-  GstCaps *caps;
-  gint fps_n, fps_d;
 
-  gst_raw_parse_get_fps (rp, &fps_n, &fps_d);
+  return gst_video_info_to_caps (&vp->info);
+}
 
-  gst_video_info_init (&info);
-  gst_video_info_set_format (&info, vp->format, vp->width, vp->height);
-  info.fps_n = fps_n;
-  info.fps_d = fps_d;
-  info.par_n = vp->par_n;
-  info.par_d = vp->par_d;
-  info.interlace_mode = vp->interlaced ?
-      GST_VIDEO_INTERLACE_MODE_INTERLEAVED :
-      GST_VIDEO_INTERLACE_MODE_PROGRESSIVE;
+static gboolean
+gst_video_parse_copy_frame (GstVideoParse * vp, GstBuffer * dest,
+    GstVideoInfo * dest_info, GstBuffer * src, GstVideoInfo * src_info)
+{
+  GstVideoFrame src_frame;
+  GstVideoFrame dest_frame;
+  gboolean ret;
 
-  caps = gst_video_info_to_caps (&info);
+  if (!gst_video_frame_map (&src_frame, src_info, src, GST_MAP_READ)) {
+    GST_ERROR_OBJECT (vp, "failed to map src frame");
+    return FALSE;
+  }
 
-  return caps;
+  if (!gst_video_frame_map (&dest_frame, dest_info, dest, GST_MAP_WRITE)) {
+    GST_ERROR_OBJECT (vp, "failed to map dest frame");
+    gst_video_frame_unmap (&src_frame);
+    return FALSE;
+  }
+
+  ret = gst_video_frame_copy (&dest_frame, &src_frame);
+
+  gst_video_frame_unmap (&src_frame);
+  gst_video_frame_unmap (&dest_frame);
+
+  return ret;
 }
 
 static void
-gst_video_parse_set_buffer_flags (GstRawParse * rp, GstBuffer * buffer)
+gst_video_parse_pre_push_buffer (GstRawParse * rp, GstBuffer * buffer)
 {
   GstVideoParse *vp = GST_VIDEO_PARSE (rp);
 
+  if (vp->do_copy) {
+    GstVideoInfo info;
+    GstBuffer *outbuf;
+
+    gst_video_info_init (&info);
+    gst_video_info_set_format (&info, vp->format, vp->width, vp->height);
+
+    GST_DEBUG_OBJECT (vp, "copying frame to remove padding");
+
+    outbuf = gst_buffer_new_allocate (NULL, GST_VIDEO_INFO_SIZE (&info), NULL);
+
+    if (!gst_video_parse_copy_frame (vp, outbuf, &info, buffer, &vp->info))
+      GST_WARNING_OBJECT (vp, "failed to copy frame");
+
+    gst_buffer_replace_all_memory (buffer, gst_buffer_get_all_memory (outbuf));
+    gst_buffer_unref (outbuf);
+  } else {
+    GstVideoInfo *info = &vp->info;
+    GstVideoFrameFlags flags = GST_VIDEO_FRAME_FLAG_NONE;
+
+    if (vp->interlaced && vp->top_field_first)
+      flags = GST_VIDEO_FRAME_FLAG_TFF;
+
+    gst_buffer_add_video_meta_full (buffer, flags, GST_VIDEO_INFO_FORMAT (info),
+        GST_VIDEO_INFO_WIDTH (info), GST_VIDEO_INFO_HEIGHT (info),
+        GST_VIDEO_INFO_N_PLANES (info), info->offset, info->stride);
+  }
+
   if (vp->interlaced) {
     if (vp->top_field_first) {
       GST_BUFFER_FLAG_SET (buffer, GST_VIDEO_BUFFER_FLAG_TFF);
@@ -260,3 +578,20 @@
     }
   }
 }
+
+static void
+gst_video_parse_decide_allocation (GstRawParse * rp, GstQuery * query)
+{
+  GstVideoParse *vp = GST_VIDEO_PARSE (rp);
+  gboolean has_videometa;
+
+  has_videometa = gst_query_find_allocation_meta (query,
+      GST_VIDEO_META_API_TYPE, NULL);
+
+  /* no need to copy if downstream supports videometa or if we don't need
+   * them */
+  if (has_videometa || !vp->need_videometa)
+    return;
+
+  vp->do_copy = TRUE;
+}
diff --git a/gst/rawparse/gstvideoparse.h b/gst/rawparse/gstvideoparse.h
index b4173df..dd540c5 100644
--- a/gst/rawparse/gstvideoparse.h
+++ b/gst/rawparse/gstvideoparse.h
@@ -48,6 +48,12 @@
 {
   GstRawParse parent;
 
+  GstVideoInfo info;
+  gboolean do_copy;
+  gboolean need_videometa;
+  gboolean stride_set;
+  gboolean offset_set;
+
   /* properties */
   GstVideoFormat format;
   gint width;
@@ -55,6 +61,9 @@
   gint par_n, par_d;
   gboolean interlaced;
   gboolean top_field_first;
+  gint stride[GST_VIDEO_MAX_PLANES];
+  gint offset[GST_VIDEO_MAX_PLANES];
+  guint framesize;
 };
 
 struct _GstVideoParseClass
diff --git a/gst/removesilence/Makefile.in b/gst/removesilence/Makefile.in
index 0f83524..6340dd5 100644
--- a/gst/removesilence/Makefile.in
+++ b/gst/removesilence/Makefile.in
@@ -116,16 +116,15 @@
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
 	$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
-	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gsettings.m4 \
-	$(top_srcdir)/m4/gst-fionread.m4 $(top_srcdir)/m4/gst-sdl.m4 \
-	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
-	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
-	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libgcrypt.m4 \
-	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
-	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
-	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
-	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
-	$(top_srcdir)/configure.ac
+	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gst-fionread.m4 \
+	$(top_srcdir)/m4/gst-sdl.m4 $(top_srcdir)/m4/iconv.m4 \
+	$(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \
+	$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
+	$(top_srcdir)/m4/libgcrypt.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
+	$(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \
@@ -276,6 +275,8 @@
 CLUTTER_X11_LIBS = @CLUTTER_X11_LIBS@
 CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
+CUDA_CFLAGS = @CUDA_CFLAGS@
+CUDA_LIBS = @CUDA_LIBS@
 CURL_CFLAGS = @CURL_CFLAGS@
 CURL_LIBS = @CURL_LIBS@
 CXX = @CXX@
@@ -313,6 +314,8 @@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
+EGL_CFLAGS = @EGL_CFLAGS@
+EGL_LIBS = @EGL_LIBS@
 EGREP = @EGREP@
 ERROR_CFLAGS = @ERROR_CFLAGS@
 ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
@@ -321,7 +324,6 @@
 EXIF_CFLAGS = @EXIF_CFLAGS@
 EXIF_LIBS = @EXIF_LIBS@
 FAAC_LIBS = @FAAC_LIBS@
-FAAD_IS_NEAAC = @FAAD_IS_NEAAC@
 FAAD_LIBS = @FAAD_LIBS@
 FFLAGS = @FFLAGS@
 FGREP = @FGREP@
@@ -340,8 +342,9 @@
 GIO_LIBS = @GIO_LIBS@
 GIO_UNIX_CFLAGS = @GIO_UNIX_CFLAGS@
 GIO_UNIX_LIBS = @GIO_UNIX_LIBS@
+GLES2_CFLAGS = @GLES2_CFLAGS@
+GLES2_LIBS = @GLES2_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
-GLIB_COMPILE_SCHEMAS = @GLIB_COMPILE_SCHEMAS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
@@ -358,16 +361,17 @@
 GMODULE_NO_EXPORT_LIBS = @GMODULE_NO_EXPORT_LIBS@
 GMSGFMT = @GMSGFMT@
 GMSGFMT_015 = @GMSGFMT_015@
+GNUSTL_CFLAGS = @GNUSTL_CFLAGS@
+GNUSTL_LIBS = @GNUSTL_LIBS@
 GRAPHENE_CFLAGS = @GRAPHENE_CFLAGS@
 GRAPHENE_LIBS = @GRAPHENE_LIBS@
 GREP = @GREP@
-GSETTINGS_CFLAGS = @GSETTINGS_CFLAGS@
-GSETTINGS_DISABLE_SCHEMAS_COMPILE = @GSETTINGS_DISABLE_SCHEMAS_COMPILE@
-GSETTINGS_LIBS = @GSETTINGS_LIBS@
 GSM_LIBS = @GSM_LIBS@
 GSTPB_PLUGINS_DIR = @GSTPB_PLUGINS_DIR@
 GSTPB_PREFIX = @GSTPB_PREFIX@
 GST_AGE = @GST_AGE@
+GST_ALLOCATORS_CFLAGS = @GST_ALLOCATORS_CFLAGS@
+GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
 GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
 GST_API_VERSION = @GST_API_VERSION@
 GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
@@ -393,6 +397,8 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PBUTILS_CFLAGS = @GST_PBUTILS_CFLAGS@
+GST_PBUTILS_LIBS = @GST_PBUTILS_LIBS@
 GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BAD_CFLAGS = @GST_PLUGINS_BAD_CFLAGS@
@@ -418,6 +424,8 @@
 GST_PREFIX = @GST_PREFIX@
 GST_REVISION = @GST_REVISION@
 GST_TOOLS_DIR = @GST_TOOLS_DIR@
+GST_VIDEO_CFLAGS = @GST_VIDEO_CFLAGS@
+GST_VIDEO_LIBS = @GST_VIDEO_LIBS@
 GTK3_CFLAGS = @GTK3_CFLAGS@
 GTK3_GL_CFLAGS = @GTK3_GL_CFLAGS@
 GTK3_GL_LIBS = @GTK3_GL_LIBS@
@@ -519,6 +527,7 @@
 LTLIBICONV = @LTLIBICONV@
 LTLIBINTL = @LTLIBINTL@
 LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
 MANIFEST_TOOL = @MANIFEST_TOOL@
@@ -532,8 +541,6 @@
 MODPLUG_LIBS = @MODPLUG_LIBS@
 MPEG2ENC_CFLAGS = @MPEG2ENC_CFLAGS@
 MPEG2ENC_LIBS = @MPEG2ENC_LIBS@
-MPG123_CFLAGS = @MPG123_CFLAGS@
-MPG123_LIBS = @MPG123_LIBS@
 MPLEX_CFLAGS = @MPLEX_CFLAGS@
 MPLEX_LDFLAGS = @MPLEX_LDFLAGS@
 MPLEX_LIBS = @MPLEX_LIBS@
@@ -549,6 +556,8 @@
 NETTLE_LIBS = @NETTLE_LIBS@
 NM = @NM@
 NMEDIT = @NMEDIT@
+NVENCODE_CFLAGS = @NVENCODE_CFLAGS@
+NVENCODE_LIBS = @NVENCODE_LIBS@
 OBJC = @OBJC@
 OBJCDEPMODE = @OBJCDEPMODE@
 OBJCFLAGS = @OBJCFLAGS@
@@ -606,16 +615,18 @@
 PYTHON_PLATFORM = @PYTHON_PLATFORM@
 PYTHON_PREFIX = @PYTHON_PREFIX@
 PYTHON_VERSION = @PYTHON_VERSION@
+QT_ANDROID_CFLAGS = @QT_ANDROID_CFLAGS@
+QT_ANDROID_LIBS = @QT_ANDROID_LIBS@
 QT_CFLAGS = @QT_CFLAGS@
 QT_LIBS = @QT_LIBS@
+QT_MAC_CFLAGS = @QT_MAC_CFLAGS@
+QT_MAC_LIBS = @QT_MAC_LIBS@
 QT_WAYLAND_CFLAGS = @QT_WAYLAND_CFLAGS@
 QT_WAYLAND_LIBS = @QT_WAYLAND_LIBS@
 QT_X11_CFLAGS = @QT_X11_CFLAGS@
 QT_X11_LIBS = @QT_X11_LIBS@
 RANLIB = @RANLIB@
 RCC = @RCC@
-RSVG_2_36_2_CFLAGS = @RSVG_2_36_2_CFLAGS@
-RSVG_2_36_2_LIBS = @RSVG_2_36_2_LIBS@
 RSVG_CFLAGS = @RSVG_CFLAGS@
 RSVG_LIBS = @RSVG_LIBS@
 RTMP_CFLAGS = @RTMP_CFLAGS@
@@ -667,6 +678,7 @@
 VOAACENC_LIBS = @VOAACENC_LIBS@
 VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
 VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VULKAN_LIBS = @VULKAN_LIBS@
 WARNING_CFLAGS = @WARNING_CFLAGS@
 WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
 WARNING_OBJCFLAGS = @WARNING_OBJCFLAGS@
@@ -677,6 +689,7 @@
 WAYLAND_LIBS = @WAYLAND_LIBS@
 WEBP_CFLAGS = @WEBP_CFLAGS@
 WEBP_LIBS = @WEBP_LIBS@
+WGET = @WGET@
 WILDMIDI_CFLAGS = @WILDMIDI_CFLAGS@
 WILDMIDI_LIBS = @WILDMIDI_LIBS@
 WINKS_LIBS = @WINKS_LIBS@
@@ -686,6 +699,8 @@
 X11_LIBS = @X11_LIBS@
 X265_CFLAGS = @X265_CFLAGS@
 X265_LIBS = @X265_LIBS@
+XCB_CFLAGS = @XCB_CFLAGS@
+XCB_LIBS = @XCB_LIBS@
 XCOMPOSITE_CFLAGS = @XCOMPOSITE_CFLAGS@
 XCOMPOSITE_LIBS = @XCOMPOSITE_LIBS@
 XGETTEXT = @XGETTEXT@
@@ -723,7 +738,6 @@
 docdir = @docdir@
 dvidir = @dvidir@
 exec_prefix = @exec_prefix@
-gsettingsschemadir = @gsettingsschemadir@
 host = @host@
 host_alias = @host_alias@
 host_cpu = @host_cpu@
diff --git a/gst/removesilence/gstremovesilence.c b/gst/removesilence/gstremovesilence.c
index d63c60a..7707817 100644
--- a/gst/removesilence/gstremovesilence.c
+++ b/gst/removesilence/gstremovesilence.c
@@ -26,7 +26,7 @@
  * <refsect2>
  * <title>Example launch line</title>
  * |[
- * gst-launch -v -m filesrc location="audiofile" ! decodebin ! removesilence remove=true ! wavenc ! filesink location=without_audio.wav
+ * gst-launch-1.0 -v -m filesrc location="audiofile" ! decodebin ! removesilence remove=true ! wavenc ! filesink location=without_audio.wav
  * ]|
  * </refsect2>
  */
diff --git a/gst/rtp/Makefile.am b/gst/rtp/Makefile.am
deleted file mode 100644
index 8566ed0..0000000
--- a/gst/rtp/Makefile.am
+++ /dev/null
@@ -1,25 +0,0 @@
-plugin_LTLIBRARIES = libgstrtpbad.la
-
-libgstrtpbad_la_SOURCES = \
-	gstrtp.c \
-	gstrtph265depay.c \
-	gstrtph265pay.c
-
-libgstrtpbad_la_CFLAGS = $(GST_PLUGINS_BAD_CFLAGS) $(GST_PLUGINS_BASE_CFLAGS) $(GST_BASE_CFLAGS) \
-	$(GST_CFLAGS)
-
-libgstrtpbad_la_LIBADD = $(GST_PLUGINS_BASE_LIBS) \
-	$(top_builddir)/gst-libs/gst/codecparsers/libgstcodecparsers-$(GST_API_VERSION).la \
-	-lgstaudio-@GST_API_VERSION@ \
-	-lgstvideo-@GST_API_VERSION@ \
-	-lgsttag-@GST_API_VERSION@ \
-	-lgstrtp-@GST_API_VERSION@ \
-	-lgstpbutils-@GST_API_VERSION@ \
-	$(GST_BASE_LIBS) $(GST_LIBS) \
-	$(LIBM)
-libgstrtpbad_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS)
-libgstrtpbad_la_LIBTOOLFLAGS = $(GST_PLUGIN_LIBTOOLFLAGS)
-
-noinst_HEADERS =			\
-	gstrtph265depay.h \
-	gstrtph265pay.h
diff --git a/gst/rtp/gstrtph265depay.c b/gst/rtp/gstrtph265depay.c
deleted file mode 100644
index bfc2e13..0000000
--- a/gst/rtp/gstrtph265depay.c
+++ /dev/null
@@ -1,1580 +0,0 @@
-/* GStreamer
- * Copyright (C) <2006> Wim Taymans <wim.taymans@gmail.com>
- * Copyright (C) <2014> Jurgen Slowack <jurgenslowack@gmail.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-#ifdef HAVE_CONFIG_H
-#  include "config.h"
-#endif
-
-#include <stdio.h>
-#include <string.h>
-
-#include <gst/base/gstbitreader.h>
-#include <gst/rtp/gstrtpbuffer.h>
-#include <gst/video/video.h>
-#include "gstrtph265depay.h"
-
-GST_DEBUG_CATEGORY_STATIC (rtph265depay_debug);
-#define GST_CAT_DEFAULT (rtph265depay_debug)
-
-/* This is what we'll default to when downstream hasn't
- * expressed a restriction or preference via caps */
-#define DEFAULT_BYTE_STREAM   TRUE
-#define DEFAULT_ACCESS_UNIT   FALSE
-
-/* 3 zero bytes syncword */
-static const guint8 sync_bytes[] = { 0, 0, 0, 1 };
-
-static GstStaticPadTemplate gst_rtp_h265_depay_src_template =
-    GST_STATIC_PAD_TEMPLATE ("src",
-    GST_PAD_SRC,
-    GST_PAD_ALWAYS,
-    GST_STATIC_CAPS (
-        /* FIXME - hvc1 and hev1 formats are not supported yet */
-        /*"video/x-h265, "
-           "stream-format = (string) hvc1, alignment = (string) au; "
-           "video/x-h265, "
-           "stream-format = (string) hev1, alignment = (string) au; " */
-        "video/x-h265, "
-        "stream-format = (string) byte-stream, alignment = (string) { nal, au }")
-    );
-
-static GstStaticPadTemplate gst_rtp_h265_depay_sink_template =
-GST_STATIC_PAD_TEMPLATE ("sink",
-    GST_PAD_SINK,
-    GST_PAD_ALWAYS,
-    GST_STATIC_CAPS ("application/x-rtp, "
-        "media = (string) \"video\", "
-        "clock-rate = (int) 90000, " "encoding-name = (string) \"H265\"")
-        /** optional parameters **/
-    /* "profile-space = (int) [ 0, 3 ], " */
-    /* "profile-id = (int) [ 0, 31 ], " */
-    /* "tier-flag = (int) [ 0, 1 ], " */
-    /* "level-id = (int) [ 0, 255 ], " */
-    /* "interop-constraints = (string) ANY, " */
-    /* "profile-compatibility-indicator = (string) ANY, " */
-    /* "sprop-sub-layer-id = (int) [ 0, 6 ], " */
-    /* "recv-sub-layer-id = (int) [ 0, 6 ], " */
-    /* "max-recv-level-id = (int) [ 0, 255 ], " */
-    /* "tx-mode = (string) {MST , SST}, " */
-    /* "sprop-vps = (string) ANY, " */
-    /* "sprop-sps = (string) ANY, " */
-    /* "sprop-pps = (string) ANY, " */
-    /* "sprop-sei = (string) ANY, " */
-    /* "max-lsr = (int) ANY, " *//* MUST be in the range of MaxLumaSR to 16 * MaxLumaSR, inclusive */
-    /* "max-lps = (int) ANY, " *//* MUST be in the range of MaxLumaPS to 16 * MaxLumaPS, inclusive */
-    /* "max-cpb = (int) ANY, " *//* MUST be in the range of MaxCPB to 16 * MaxCPB, inclusive */
-    /* "max-dpb = (int) [1, 16], " */
-    /* "max-br = (int) ANY, " *//* MUST be in the range of MaxBR to 16 * MaxBR, inclusive, for the highest level */
-    /* "max-tr = (int) ANY, " *//* MUST be in the range of MaxTileRows to 16 * MaxTileRows, inclusive, for the highest level */
-    /* "max-tc = (int) ANY, " *//* MUST be in the range of MaxTileCols to 16 * MaxTileCols, inclusive, for the highest level */
-    /* "max-fps = (int) ANY, " */
-    /* "sprop-max-don-diff = (int) [0, 32767], " */
-    /* "sprop-depack-buf-nalus = (int) [0, 32767], " */
-    /* "sprop-depack-buf-nalus = (int) [0, 4294967295], " */
-    /* "depack-buf-cap = (int) [1, 4294967295], " */
-    /* "sprop-segmentation-id = (int) [0, 3], " */
-    /* "sprop-spatial-segmentation-idc = (string) ANY, " */
-    /* "dec-parallel-cap = (string) ANY, " */
-    );
-
-#define gst_rtp_h265_depay_parent_class parent_class
-G_DEFINE_TYPE (GstRtpH265Depay, gst_rtp_h265_depay,
-    GST_TYPE_RTP_BASE_DEPAYLOAD);
-
-static void gst_rtp_h265_depay_finalize (GObject * object);
-
-static GstStateChangeReturn gst_rtp_h265_depay_change_state (GstElement *
-    element, GstStateChange transition);
-
-static GstBuffer *gst_rtp_h265_depay_process (GstRTPBaseDepayload * depayload,
-    GstRTPBuffer * rtp);
-static gboolean gst_rtp_h265_depay_setcaps (GstRTPBaseDepayload * filter,
-    GstCaps * caps);
-static gboolean gst_rtp_h265_depay_handle_event (GstRTPBaseDepayload * depay,
-    GstEvent * event);
-
-static void
-gst_rtp_h265_depay_class_init (GstRtpH265DepayClass * klass)
-{
-  GObjectClass *gobject_class;
-  GstElementClass *gstelement_class;
-  GstRTPBaseDepayloadClass *gstrtpbasedepayload_class;
-
-  gobject_class = (GObjectClass *) klass;
-  gstelement_class = (GstElementClass *) klass;
-  gstrtpbasedepayload_class = (GstRTPBaseDepayloadClass *) klass;
-
-  gobject_class->finalize = gst_rtp_h265_depay_finalize;
-
-  gst_element_class_add_pad_template (gstelement_class,
-      gst_static_pad_template_get (&gst_rtp_h265_depay_src_template));
-  gst_element_class_add_pad_template (gstelement_class,
-      gst_static_pad_template_get (&gst_rtp_h265_depay_sink_template));
-
-  gst_element_class_set_static_metadata (gstelement_class,
-      "RTP H265 depayloader", "Codec/Depayloader/Network/RTP",
-      "Extracts H265 video from RTP packets (draft-ietf-payload-rtp-h265-03.txt)",
-      "Jurgen Slowack <jurgenslowack@gmail.com>");
-  gstelement_class->change_state = gst_rtp_h265_depay_change_state;
-
-  gstrtpbasedepayload_class->process_rtp_packet = gst_rtp_h265_depay_process;
-  gstrtpbasedepayload_class->set_caps = gst_rtp_h265_depay_setcaps;
-  gstrtpbasedepayload_class->handle_event = gst_rtp_h265_depay_handle_event;
-}
-
-static void
-gst_rtp_h265_depay_init (GstRtpH265Depay * rtph265depay)
-{
-  rtph265depay->adapter = gst_adapter_new ();
-  rtph265depay->picture_adapter = gst_adapter_new ();
-  rtph265depay->byte_stream = DEFAULT_BYTE_STREAM;
-  rtph265depay->stream_format = (gchar *) g_malloc (10);
-  rtph265depay->merge = DEFAULT_ACCESS_UNIT;
-  rtph265depay->vps = g_ptr_array_new_with_free_func (
-      (GDestroyNotify) gst_buffer_unref);
-  rtph265depay->sps = g_ptr_array_new_with_free_func (
-      (GDestroyNotify) gst_buffer_unref);
-  rtph265depay->pps = g_ptr_array_new_with_free_func (
-      (GDestroyNotify) gst_buffer_unref);
-}
-
-static void
-gst_rtp_h265_depay_reset (GstRtpH265Depay * rtph265depay)
-{
-  gst_adapter_clear (rtph265depay->adapter);
-  rtph265depay->wait_start = TRUE;
-  gst_adapter_clear (rtph265depay->picture_adapter);
-  rtph265depay->picture_start = FALSE;
-  rtph265depay->last_keyframe = FALSE;
-  rtph265depay->last_ts = 0;
-  rtph265depay->current_fu_type = 0;
-  rtph265depay->new_codec_data = FALSE;
-  g_ptr_array_set_size (rtph265depay->vps, 0);
-  g_ptr_array_set_size (rtph265depay->sps, 0);
-  g_ptr_array_set_size (rtph265depay->pps, 0);
-}
-
-static void
-gst_rtp_h265_depay_finalize (GObject * object)
-{
-  GstRtpH265Depay *rtph265depay;
-
-  rtph265depay = GST_RTP_H265_DEPAY (object);
-
-  if (rtph265depay->codec_data)
-    gst_buffer_unref (rtph265depay->codec_data);
-
-  g_free (rtph265depay->stream_format);
-
-  g_object_unref (rtph265depay->adapter);
-  g_object_unref (rtph265depay->picture_adapter);
-
-  g_ptr_array_free (rtph265depay->vps, TRUE);
-  g_ptr_array_free (rtph265depay->sps, TRUE);
-  g_ptr_array_free (rtph265depay->pps, TRUE);
-
-  G_OBJECT_CLASS (parent_class)->finalize (object);
-}
-
-static void
-gst_rtp_h265_depay_negotiate (GstRtpH265Depay * rtph265depay)
-{
-  GstCaps *caps;
-  gint byte_stream = -1;
-  gint merge = -1;
-
-  caps =
-      gst_pad_get_allowed_caps (GST_RTP_BASE_DEPAYLOAD_SRCPAD (rtph265depay));
-
-  GST_DEBUG_OBJECT (rtph265depay, "allowed caps: %" GST_PTR_FORMAT, caps);
-
-  if (caps) {
-    if (gst_caps_get_size (caps) > 0) {
-      GstStructure *s = gst_caps_get_structure (caps, 0);
-      const gchar *str = NULL;
-
-      if ((str = gst_structure_get_string (s, "stream-format"))) {
-
-        strcpy (rtph265depay->stream_format, str);
-
-        if (strcmp (str, "hev1") == 0) {
-          byte_stream = FALSE;
-        } else if (strcmp (str, "hvc1") == 0) {
-          byte_stream = FALSE;
-        } else if (strcmp (str, "byte-stream") == 0) {
-          byte_stream = TRUE;
-        } else {
-          GST_DEBUG_OBJECT (rtph265depay, "unknown stream-format: %s", str);
-        }
-      }
-
-      if ((str = gst_structure_get_string (s, "alignment"))) {
-        if (strcmp (str, "au") == 0) {
-          merge = TRUE;
-        } else if (strcmp (str, "nal") == 0) {
-          merge = FALSE;
-        } else {
-          GST_DEBUG_OBJECT (rtph265depay, "unknown alignment: %s", str);
-        }
-      }
-    }
-    gst_caps_unref (caps);
-  }
-
-  if (byte_stream != -1) {
-    GST_DEBUG_OBJECT (rtph265depay, "downstream requires byte-stream %d",
-        byte_stream);
-    rtph265depay->byte_stream = byte_stream;
-  } else {
-    GST_DEBUG_OBJECT (rtph265depay, "defaulting to byte-stream %d",
-        DEFAULT_BYTE_STREAM);
-    strcpy (rtph265depay->stream_format, "byte-stream");
-    rtph265depay->byte_stream = DEFAULT_BYTE_STREAM;
-  }
-  if (merge != -1) {
-    GST_DEBUG_OBJECT (rtph265depay, "downstream requires merge %d", merge);
-    rtph265depay->merge = merge;
-  } else {
-    GST_DEBUG_OBJECT (rtph265depay, "defaulting to merge %d",
-        DEFAULT_ACCESS_UNIT);
-    rtph265depay->merge = DEFAULT_ACCESS_UNIT;
-  }
-}
-
-/* Stolen from bad/gst/mpegtsdemux/payloader_parsers.c */
-/* variable length Exp-Golomb parsing according to H.265 spec section 9.2*/
-static gboolean
-read_golomb (GstBitReader * br, guint32 * value)
-{
-  guint8 b, leading_zeros = -1;
-  *value = 1;
-
-  for (b = 0; !b; leading_zeros++) {
-    if (!gst_bit_reader_get_bits_uint8 (br, &b, 1))
-      return FALSE;
-    *value *= 2;
-  }
-
-  *value = (*value >> 1) - 1;
-  if (leading_zeros > 0) {
-    guint32 tmp = 0;
-    if (!gst_bit_reader_get_bits_uint32 (br, &tmp, leading_zeros))
-      return FALSE;
-    *value += tmp;
-  }
-
-  return TRUE;
-}
-
-static gboolean
-parse_sps (GstMapInfo * map, guint32 * sps_id)
-{                               /* To parse seq_parameter_set_id */
-  GstBitReader br = GST_BIT_READER_INIT (map->data + 15,
-      map->size - 15);
-
-  if (map->size < 16)
-    return FALSE;
-
-  if (!read_golomb (&br, sps_id))
-    return FALSE;
-
-  return TRUE;
-}
-
-static gboolean
-parse_pps (GstMapInfo * map, guint32 * sps_id, guint32 * pps_id)
-{                               /* To parse picture_parameter_set_id */
-  GstBitReader br = GST_BIT_READER_INIT (map->data + 2,
-      map->size - 2);
-
-  if (map->size < 3)
-    return FALSE;
-
-  if (!read_golomb (&br, pps_id))
-    return FALSE;
-  if (!read_golomb (&br, sps_id))
-    return FALSE;
-
-  return TRUE;
-}
-
-
-static gboolean
-gst_rtp_h265_set_src_caps (GstRtpH265Depay * rtph265depay)
-{
-  gboolean res;
-  GstCaps *srccaps;
-
-  if (!rtph265depay->byte_stream &&
-      (!rtph265depay->new_codec_data ||
-          rtph265depay->vps->len == 0 || rtph265depay->sps->len == 0
-          || rtph265depay->pps->len == 0))
-    return TRUE;
-
-  srccaps = gst_caps_new_simple ("video/x-h265",
-      "stream-format", G_TYPE_STRING,
-      rtph265depay->stream_format,
-      "alignment", G_TYPE_STRING, rtph265depay->merge ? "au" : "nal", NULL);
-
-  if (!rtph265depay->byte_stream) {
-
-    GstBuffer *codec_data;
-    gint i = 0;
-    gint len;
-    guint num_vps = rtph265depay->vps->len;
-    guint num_sps = rtph265depay->sps->len;
-    guint num_pps = rtph265depay->pps->len;
-    GstMapInfo map, nalmap;
-    guint8 *data;
-    gint nl;
-    guint8 num_arrays = 0;
-    guint new_size;
-    GstBitReader br;
-    guint32 tmp;
-    guint8 tmp8 = 0;
-    guint32 max_sub_layers_minus1, temporal_id_nesting_flag, chroma_format_idc,
-        bit_depth_luma_minus8, bit_depth_chroma_minus8,
-        min_spatial_segmentation_idc;
-
-    /* Fixme: Current implementation is not embedding SEI in codec_data */
-
-    if (num_sps == 0)
-      return FALSE;
-
-    /* start with 23 bytes header */
-    len = 23;
-
-    num_arrays = (num_vps > 0) + (num_sps > 0) + (num_pps > 0);
-    len += num_arrays;
-
-    /* add size of vps, sps & pps */
-    for (i = 0; i < num_vps; i++)
-      len += 2 + gst_buffer_get_size (g_ptr_array_index (rtph265depay->vps, i));
-    for (i = 0; i < num_sps; i++)
-      len += 2 + gst_buffer_get_size (g_ptr_array_index (rtph265depay->sps, i));
-    for (i = 0; i < num_pps; i++)
-      len += 2 + gst_buffer_get_size (g_ptr_array_index (rtph265depay->pps, i));
-
-    GST_DEBUG_OBJECT (rtph265depay,
-        "constructing codec_data: num_vps =%d num_sps=%d, num_pps=%d", num_vps,
-        num_sps, num_pps);
-
-    codec_data = gst_buffer_new_and_alloc (len);
-    g_debug ("alloc_len: %u", len);
-    gst_buffer_map (codec_data, &map, GST_MAP_READWRITE);
-    data = map.data;
-
-    memset (data, 0, map.size);
-
-    /* Parsing sps to get the info required further on */
-
-    gst_buffer_map (g_ptr_array_index (rtph265depay->sps, 0), &nalmap,
-        GST_MAP_READ);
-
-    max_sub_layers_minus1 = ((nalmap.data[2]) >> 1) & 0x07;
-    temporal_id_nesting_flag = nalmap.data[2] & 0x01;
-
-    gst_bit_reader_init (&br, nalmap.data + 15, nalmap.size - 15);
-
-    read_golomb (&br, &tmp);    /* sps_seq_parameter_set_id */
-    read_golomb (&br, &chroma_format_idc);      /* chroma_format_idc */
-
-    if (chroma_format_idc == 3)
-
-      gst_bit_reader_get_bits_uint8 (&br, &tmp8, 1);    /* separate_colour_plane_flag */
-
-    read_golomb (&br, &tmp);    /* pic_width_in_luma_samples */
-    read_golomb (&br, &tmp);    /* pic_height_in_luma_samples */
-
-    gst_bit_reader_get_bits_uint8 (&br, &tmp8, 1);      /* conformance_window_flag */
-    if (tmp8) {
-      read_golomb (&br, &tmp);  /* conf_win_left_offset */
-      read_golomb (&br, &tmp);  /* conf_win_right_offset */
-      read_golomb (&br, &tmp);  /* conf_win_top_offset */
-      read_golomb (&br, &tmp);  /* conf_win_bottom_offset */
-    }
-
-    read_golomb (&br, &bit_depth_luma_minus8);  /* bit_depth_luma_minus8 */
-    read_golomb (&br, &bit_depth_chroma_minus8);        /* bit_depth_chroma_minus8 */
-
-    GST_DEBUG_OBJECT (rtph265depay,
-        "Ignoring min_spatial_segmentation for now (assuming zero)");
-
-    min_spatial_segmentation_idc = 0;   /* NOTE - we ignore this for now, but in a perfect world, we should continue parsing to obtain the real value */
-
-    nl = nalmap.size;
-
-    gst_buffer_unmap (g_ptr_array_index (rtph265depay->sps, 0), &nalmap);
-
-    /* HEVCDecoderConfigurationVersion = 1 */
-    data[0] = 1;
-
-    /* Copy from profile_tier_level (Rec. ITU-T H.265 (04/2013) section 7.3.3
-     *
-     * profile_space | tier_flat | profile_idc |
-     * profile_compatibility_flags | constraint_indicator_flags |
-     * level_idc | progressive_source_flag | interlaced_source_flag
-     * non_packed_constraint_flag | frame_only_constraint_flag
-     * reserved_zero_44bits | level_idc */
-    gst_buffer_map (g_ptr_array_index (rtph265depay->sps, 0), &nalmap,
-        GST_MAP_READ);
-    for (i = 0; i < 12; i++)
-      data[i + 1] = nalmap.data[i];
-    gst_buffer_unmap (g_ptr_array_index (rtph265depay->sps, 0), &nalmap);
-
-    /* min_spatial_segmentation_idc */
-    GST_WRITE_UINT16_BE (data + 13, min_spatial_segmentation_idc);
-    data[13] |= 0xf0;
-    data[15] = 0xfc;            /* keeping parrallelismType as zero (unknown) */
-    data[16] = 0xfc | chroma_format_idc;
-    data[17] = 0xf8 | bit_depth_luma_minus8;
-    data[18] = 0xf8 | bit_depth_chroma_minus8;
-    data[19] = 0x00;            /* keep avgFrameRate as unspecified */
-    data[20] = 0x00;            /* keep avgFrameRate as unspecified */
-    /* constFrameRate(2 bits): 0, stream may or may not be of constant framerate
-     * numTemporalLayers (3 bits): number of temporal layers, value from SPS
-     * TemporalIdNested (1 bit): sps_temporal_id_nesting_flag from SPS
-     * lengthSizeMinusOne (2 bits): plus 1 indicates the length of the NALUnitLength */
-    data[21] =
-        0x00 | ((max_sub_layers_minus1 +
-            1) << 3) | (temporal_id_nesting_flag << 2) | (nl - 1);
-    GST_WRITE_UINT8 (data + 22, num_arrays);    /* numOfArrays */
-
-    data += 23;
-
-    /* copy all VPS */
-    if (num_vps > 0) {
-      /* array_completeness | reserved_zero bit | nal_unit_type */
-      data[0] = 0x00 | 0x20;
-      data++;
-
-      GST_WRITE_UINT16_BE (data, num_vps);
-      data += 2;
-
-      for (i = 0; i < num_vps; i++) {
-        gsize nal_size =
-            gst_buffer_get_size (g_ptr_array_index (rtph265depay->vps, i));
-        GST_WRITE_UINT16_BE (data, nal_size);
-        gst_buffer_extract (g_ptr_array_index (rtph265depay->vps, i), 0,
-            data + 2, nal_size);
-        data += 2 + nal_size;
-        GST_DEBUG_OBJECT (rtph265depay, "Copied VPS %d of length %u", i,
-            (guint) nal_size);
-      }
-    }
-
-    /* copy all SPS */
-    if (num_sps > 0) {
-      /* array_completeness | reserved_zero bit | nal_unit_type */
-      data[0] = 0x00 | 0x21;
-      data++;
-
-      GST_WRITE_UINT16_BE (data, num_sps);
-      data += 2;
-
-      for (i = 0; i < num_sps; i++) {
-        gsize nal_size =
-            gst_buffer_get_size (g_ptr_array_index (rtph265depay->sps, i));
-        GST_WRITE_UINT16_BE (data, nal_size);
-        gst_buffer_extract (g_ptr_array_index (rtph265depay->sps, i), 0,
-            data + 2, nal_size);
-        data += 2 + nal_size;
-        GST_DEBUG_OBJECT (rtph265depay, "Copied SPS %d of length %u", i,
-            (guint) nal_size);
-      }
-    }
-
-    /* copy all PPS */
-    if (num_pps > 0) {
-      /* array_completeness | reserved_zero bit | nal_unit_type */
-      data[0] = 0x00 | 0x22;
-      data++;
-
-      GST_WRITE_UINT16_BE (data, num_pps);
-      data += 2;
-
-      for (i = 0; i < num_pps; i++) {
-        gsize nal_size =
-            gst_buffer_get_size (g_ptr_array_index (rtph265depay->pps, i));
-        GST_WRITE_UINT16_BE (data, nal_size);
-        gst_buffer_extract (g_ptr_array_index (rtph265depay->pps, i), 0,
-            data + 2, nal_size);
-        data += 2 + nal_size;
-        GST_DEBUG_OBJECT (rtph265depay, "Copied PPS %d of length %u", i,
-            (guint) nal_size);
-      }
-    }
-
-    new_size = data - map.data;
-    gst_buffer_unmap (codec_data, &map);
-    gst_buffer_set_size (codec_data, new_size);
-
-    gst_caps_set_simple (srccaps,
-        "codec_data", GST_TYPE_BUFFER, codec_data, NULL);
-    gst_buffer_unref (codec_data);
-  }
-
-  if (gst_pad_has_current_caps (GST_RTP_BASE_DEPAYLOAD_SRCPAD (rtph265depay))) {
-    GstCaps *old_caps =
-        gst_pad_get_current_caps (GST_RTP_BASE_DEPAYLOAD_SRCPAD (rtph265depay));
-
-    /* Only update the caps if they are not equal. For
-     * AVC we don't update caps if only the codec_data
-     * changes. This is the same behaviour as in h264parse
-     * and gstrtph264depay
-     */
-    if (rtph265depay->byte_stream) {
-      if (!gst_caps_is_equal (srccaps, old_caps))
-        res =
-            gst_pad_set_caps (GST_RTP_BASE_DEPAYLOAD_SRCPAD (rtph265depay),
-            srccaps);
-      else
-        res = TRUE;
-    } else {
-      GstCaps *tmp_caps = gst_caps_copy (srccaps);
-      GstStructure *old_s, *tmp_s;
-
-      old_s = gst_caps_get_structure (old_caps, 0);
-      tmp_s = gst_caps_get_structure (tmp_caps, 0);
-      if (gst_structure_has_field (old_s, "codec_data"))
-        gst_structure_set_value (tmp_s, "codec_data",
-            gst_structure_get_value (old_s, "codec_data"));
-
-      if (!gst_caps_is_equal (old_caps, tmp_caps))
-        res =
-            gst_pad_set_caps (GST_RTP_BASE_DEPAYLOAD_SRCPAD (rtph265depay),
-            srccaps);
-      else
-        res = TRUE;
-
-      gst_caps_unref (tmp_caps);
-    }
-  } else {
-    res =
-        gst_pad_set_caps (GST_RTP_BASE_DEPAYLOAD_SRCPAD (rtph265depay),
-        srccaps);
-  }
-
-  gst_caps_unref (srccaps);
-
-  /* Insert SPS and PPS into the stream on next opportunity */
-  if (rtph265depay->sps->len > 0 || rtph265depay->pps->len > 0) {
-    gint i;
-    GstBuffer *codec_data;
-    GstMapInfo map;
-    guint8 *data;
-    guint len = 0;
-
-    for (i = 0; i < rtph265depay->sps->len; i++) {
-      len += 4 + gst_buffer_get_size (g_ptr_array_index (rtph265depay->sps, i));
-    }
-
-    for (i = 0; i < rtph265depay->pps->len; i++) {
-      len += 4 + gst_buffer_get_size (g_ptr_array_index (rtph265depay->pps, i));
-    }
-
-    codec_data = gst_buffer_new_and_alloc (len);
-    gst_buffer_map (codec_data, &map, GST_MAP_WRITE);
-    data = map.data;
-
-    for (i = 0; i < rtph265depay->sps->len; i++) {
-      GstBuffer *sps_buf = g_ptr_array_index (rtph265depay->sps, i);
-      guint sps_size = gst_buffer_get_size (sps_buf);
-
-      if (rtph265depay->byte_stream)
-        memcpy (data, sync_bytes, sizeof (sync_bytes));
-      else
-        GST_WRITE_UINT32_BE (data, sps_size);
-      gst_buffer_extract (sps_buf, 0, data + 4, -1);
-      data += 4 + sps_size;
-    }
-
-    for (i = 0; i < rtph265depay->pps->len; i++) {
-      GstBuffer *pps_buf = g_ptr_array_index (rtph265depay->pps, i);
-      guint pps_size = gst_buffer_get_size (pps_buf);
-
-      if (rtph265depay->byte_stream)
-        memcpy (data, sync_bytes, sizeof (sync_bytes));
-      else
-        GST_WRITE_UINT32_BE (data, pps_size);
-      gst_buffer_extract (pps_buf, 0, data + 4, -1);
-      data += 4 + pps_size;
-    }
-
-    gst_buffer_unmap (codec_data, &map);
-    if (rtph265depay->codec_data)
-      gst_buffer_unref (rtph265depay->codec_data);
-    rtph265depay->codec_data = codec_data;
-  }
-
-  if (res)
-    rtph265depay->new_codec_data = FALSE;
-
-  return res;
-}
-
-gboolean
-gst_rtp_h265_add_vps_sps_pps (GstElement * rtph265, GPtrArray * vps_array,
-    GPtrArray * sps_array, GPtrArray * pps_array, GstBuffer * nal)
-{
-  GstMapInfo map;
-  guchar type;
-  guint i;
-
-  gst_buffer_map (nal, &map, GST_MAP_READ);
-
-  type = (map.data[0] >> 1) & 0x3f;
-
-  if (type == GST_H265_VPS_NUT) {
-    guint32 vps_id = (map.data[2] >> 4) & 0x0f;
-
-    for (i = 0; i < vps_array->len; i++) {
-      GstBuffer *vps = g_ptr_array_index (vps_array, i);
-      GstMapInfo vpsmap;
-      guint32 tmp_vps_id;
-
-      gst_buffer_map (vps, &vpsmap, GST_MAP_READ);
-      tmp_vps_id = (vpsmap.data[2] >> 4) & 0x0f;
-
-      if (vps_id == tmp_vps_id) {
-        if (map.size == vpsmap.size &&
-            memcmp (map.data, vpsmap.data, vpsmap.size) == 0) {
-          GST_LOG_OBJECT (rtph265, "Unchanged VPS %u, not updating", vps_id);
-          gst_buffer_unmap (vps, &vpsmap);
-          goto drop;
-        } else {
-          gst_buffer_unmap (vps, &vpsmap);
-          g_ptr_array_remove_index_fast (vps_array, i);
-          g_ptr_array_add (vps_array, nal);
-          GST_LOG_OBJECT (rtph265, "Modified VPS %u, replacing", vps_id);
-          goto done;
-        }
-      }
-      gst_buffer_unmap (vps, &vpsmap);
-    }
-    GST_LOG_OBJECT (rtph265, "Adding new VPS %u", vps_id);
-    g_ptr_array_add (vps_array, nal);
-  } else if (type == GST_H265_SPS_NUT) {
-    guint32 sps_id;
-
-    if (!parse_sps (&map, &sps_id)) {
-      GST_WARNING_OBJECT (rtph265, "Invalid SPS,"
-          " can't parse seq_parameter_set_id");
-      goto drop;
-    }
-
-    for (i = 0; i < sps_array->len; i++) {
-      GstBuffer *sps = g_ptr_array_index (sps_array, i);
-      GstMapInfo spsmap;
-      guint32 tmp_sps_id;
-
-      gst_buffer_map (sps, &spsmap, GST_MAP_READ);
-      parse_sps (&spsmap, &tmp_sps_id);
-
-      if (sps_id == tmp_sps_id) {
-        if (map.size == spsmap.size &&
-            memcmp (map.data, spsmap.data, spsmap.size) == 0) {
-          GST_LOG_OBJECT (rtph265, "Unchanged SPS %u, not updating", sps_id);
-          gst_buffer_unmap (sps, &spsmap);
-          goto drop;
-        } else {
-          gst_buffer_unmap (sps, &spsmap);
-          g_ptr_array_remove_index_fast (sps_array, i);
-          g_ptr_array_add (sps_array, nal);
-          GST_LOG_OBJECT (rtph265, "Modified SPS %u, replacing", sps_id);
-          goto done;
-        }
-      }
-      gst_buffer_unmap (sps, &spsmap);
-    }
-    GST_LOG_OBJECT (rtph265, "Adding new SPS %u", sps_id);
-    g_ptr_array_add (sps_array, nal);
-  } else if (type == GST_H265_PPS_NUT) {
-    guint32 sps_id;
-    guint32 pps_id;
-
-    if (!parse_pps (&map, &sps_id, &pps_id)) {
-      GST_WARNING_OBJECT (rtph265, "Invalid PPS,"
-          " can't parse seq_parameter_set_id or pic_parameter_set_id");
-      goto drop;
-    }
-
-    for (i = 0; i < pps_array->len; i++) {
-      GstBuffer *pps = g_ptr_array_index (pps_array, i);
-      GstMapInfo ppsmap;
-      guint32 tmp_sps_id;
-      guint32 tmp_pps_id;
-
-
-      gst_buffer_map (pps, &ppsmap, GST_MAP_READ);
-      parse_pps (&ppsmap, &tmp_sps_id, &tmp_pps_id);
-
-      if (pps_id == tmp_pps_id) {
-        if (map.size == ppsmap.size &&
-            memcmp (map.data, ppsmap.data, ppsmap.size) == 0) {
-          GST_LOG_OBJECT (rtph265, "Unchanged PPS %u:%u, not updating", sps_id,
-              pps_id);
-          gst_buffer_unmap (pps, &ppsmap);
-          goto drop;
-        } else {
-          gst_buffer_unmap (pps, &ppsmap);
-          g_ptr_array_remove_index_fast (pps_array, i);
-          g_ptr_array_add (pps_array, nal);
-          GST_LOG_OBJECT (rtph265, "Modified PPS %u:%u, replacing",
-              sps_id, pps_id);
-          goto done;
-        }
-      }
-      gst_buffer_unmap (pps, &ppsmap);
-    }
-    GST_LOG_OBJECT (rtph265, "Adding new PPS %u:%i", sps_id, pps_id);
-    g_ptr_array_add (pps_array, nal);
-  } else {
-    goto drop;
-  }
-
-done:
-  gst_buffer_unmap (nal, &map);
-
-  return TRUE;
-
-drop:
-  gst_buffer_unmap (nal, &map);
-  gst_buffer_unref (nal);
-
-  return FALSE;
-}
-
-
-static void
-gst_rtp_h265_depay_add_vps_sps_pps (GstRtpH265Depay * rtph265depay,
-    GstBuffer * nal)
-{
-  if (gst_rtp_h265_add_vps_sps_pps (GST_ELEMENT (rtph265depay),
-          rtph265depay->vps, rtph265depay->sps, rtph265depay->pps, nal))
-    rtph265depay->new_codec_data = TRUE;
-}
-
-static gboolean
-gst_rtp_h265_depay_setcaps (GstRTPBaseDepayload * depayload, GstCaps * caps)
-{
-  gint clock_rate;
-  GstStructure *structure = gst_caps_get_structure (caps, 0);
-  GstRtpH265Depay *rtph265depay;
-  const gchar *ps;
-  GstBuffer *codec_data;
-  GstMapInfo map;
-  guint8 *ptr;
-
-  rtph265depay = GST_RTP_H265_DEPAY (depayload);
-
-  if (!gst_structure_get_int (structure, "clock-rate", &clock_rate))
-    clock_rate = 90000;
-  depayload->clock_rate = clock_rate;
-
-  /* Base64 encoded, comma separated config NALs */
-  ps = gst_structure_get_string (structure, "sprop-parameter-sets");
-
-  /* negotiate with downstream w.r.t. output format and alignment */
-  gst_rtp_h265_depay_negotiate (rtph265depay);
-
-  if (rtph265depay->byte_stream && ps != NULL) {
-    /* for bytestream we only need the parameter sets but we don't error out
-     * when they are not there, we assume they are in the stream. */
-    gchar **params;
-    guint len, total;
-    gint i;
-
-    params = g_strsplit (ps, ",", 0);
-
-    /* count total number of bytes in base64. Also include the sync bytes in
-     * front of the params. */
-    len = 0;
-    for (i = 0; params[i]; i++) {
-      len += strlen (params[i]);
-      len += sizeof (sync_bytes);
-    }
-    /* we seriously overshoot the length, but it's fine. */
-    codec_data = gst_buffer_new_and_alloc (len);
-
-    gst_buffer_map (codec_data, &map, GST_MAP_WRITE);
-    ptr = map.data;
-    total = 0;
-    for (i = 0; params[i]; i++) {
-      guint save = 0;
-      gint state = 0;
-
-      GST_DEBUG_OBJECT (depayload, "decoding param %d (%s)", i, params[i]);
-      memcpy (ptr, sync_bytes, sizeof (sync_bytes));
-      ptr += sizeof (sync_bytes);
-      len =
-          g_base64_decode_step (params[i], strlen (params[i]), ptr, &state,
-          &save);
-      GST_DEBUG_OBJECT (depayload, "decoded %d bytes", len);
-      total += len + sizeof (sync_bytes);
-      ptr += len;
-    }
-    gst_buffer_unmap (codec_data, &map);
-    gst_buffer_resize (codec_data, 0, total);
-    g_strfreev (params);
-
-    /* keep the codec_data, we need to send it as the first buffer. We cannot
-     * push it in the adapter because the adapter might be flushed on discont.
-     */
-    if (rtph265depay->codec_data)
-      gst_buffer_unref (rtph265depay->codec_data);
-    rtph265depay->codec_data = codec_data;
-  } else if (!rtph265depay->byte_stream) {
-    gchar **params;
-    gint i;
-
-    if (ps == NULL)
-      goto incomplete_caps;
-
-    params = g_strsplit (ps, ",", 0);
-
-    GST_DEBUG_OBJECT (depayload, "we have %d params", g_strv_length (params));
-
-    /* start with 23 bytes header */
-    for (i = 0; params[i]; i++) {
-      GstBuffer *nal;
-      GstMapInfo nalmap;
-      gsize nal_len;
-      guint save = 0;
-      gint state = 0;
-
-      nal_len = strlen (params[i]);
-      nal = gst_buffer_new_and_alloc (nal_len);
-      gst_buffer_map (nal, &nalmap, GST_MAP_READWRITE);
-
-      nal_len =
-          g_base64_decode_step (params[i], nal_len, nalmap.data, &state, &save);
-
-      GST_DEBUG_OBJECT (depayload, "adding param %d as %s", i,
-          (((nalmap.data[0] >> 1) & 0x3f) ==
-              32) ? "VPS" : (((nalmap.data[0] >> 1) & 0x3f) ==
-              33) ? "SPS" : "PPS");
-
-      gst_buffer_unmap (nal, &nalmap);
-      gst_buffer_set_size (nal, nal_len);
-
-      gst_rtp_h265_depay_add_vps_sps_pps (rtph265depay, nal);
-    }
-    g_strfreev (params);
-
-    if (rtph265depay->sps->len == 0 || rtph265depay->pps->len == 0)
-      goto incomplete_caps;
-  }
-
-  return gst_rtp_h265_set_src_caps (rtph265depay);
-
-  /* ERRORS */
-incomplete_caps:
-  {
-    GST_DEBUG_OBJECT (depayload, "we have incomplete caps,"
-        " doing setcaps later");
-    return TRUE;
-  }
-}
-
-static GstBuffer *
-gst_rtp_h265_complete_au (GstRtpH265Depay * rtph265depay,
-    GstClockTime * out_timestamp, gboolean * out_keyframe)
-{
-  guint outsize;
-  GstBuffer *outbuf;
-
-  /* we had a picture in the adapter and we completed it */
-  GST_DEBUG_OBJECT (rtph265depay, "taking completed AU");
-  outsize = gst_adapter_available (rtph265depay->picture_adapter);
-  outbuf = gst_adapter_take_buffer (rtph265depay->picture_adapter, outsize);
-
-  *out_timestamp = rtph265depay->last_ts;
-  *out_keyframe = rtph265depay->last_keyframe;
-
-  rtph265depay->last_keyframe = FALSE;
-  rtph265depay->picture_start = FALSE;
-
-  return outbuf;
-}
-
-/* VPS/SPS/PPS/RADL/TSA/RASL/IDR/CRA is considered key, all others DELTA;
- * so downstream waiting for keyframe can pick up at VPS/SPS/PPS/IDR */
-
-#define NAL_TYPE_IS_PARAMETER_SET(nt) (		((nt) == GST_H265_VPS_NUT)\
-										||  ((nt) == GST_H265_SPS_NUT)\
-										||  ((nt) == GST_H265_PPS_NUT)				)
-
-#define NAL_TYPE_IS_CODED_SLICE_SEGMENT(nt) (		((nt) == GST_H265_NAL_SLICE_TRAIL_N)\
-												|| 	((nt) == GST_H265_NAL_SLICE_TRAIL_R)\
-												||  ((nt) == GST_H265_NAL_SLICE_TSA_N)\
-												||  ((nt) == GST_H265_NAL_SLICE_TSA_R)\
-												||  ((nt) == GST_H265_NAL_SLICE_STSA_N)\
-												||  ((nt) == GST_H265_NAL_SLICE_STSA_R)\
-												||  ((nt) == GST_H265_NAL_SLICE_RASL_N)\
-												||  ((nt) == GST_H265_NAL_SLICE_RASL_R)\
-												||  ((nt) == GST_H265_NAL_SLICE_BLA_W_LP)\
-												||  ((nt) == GST_H265_NAL_SLICE_BLA_W_RADL)\
-												||  ((nt) == GST_H265_NAL_SLICE_BLA_N_LP)\
-												||  ((nt) == GST_H265_NAL_SLICE_IDR_W_RADL)\
-												||  ((nt) == GST_H265_NAL_SLICE_IDR_N_LP)\
-												||  ((nt) == GST_H265_NAL_SLICE_CRA_NUT)		)
-
-#define NAL_TYPE_IS_KEY(nt) (NAL_TYPE_IS_PARAMETER_SET(nt) || NAL_TYPE_IS_CODED_SLICE_SEGMENT(nt))
-
-static gboolean
-foreach_metadata_copy (GstBuffer * inbuf, GstMeta ** meta, gpointer user_data)
-{
-  CopyMetaData *data = user_data;
-  GstElement *element = data->element;
-  GstBuffer *outbuf = data->outbuf;
-  const GstMetaInfo *info = (*meta)->info;
-  const gchar *const *tags = gst_meta_api_type_get_tags (info->api);
-
-  if (!tags || (g_strv_length ((gchar **) tags) == 1
-          && gst_meta_api_type_has_tag (info->api,
-              g_quark_from_string (GST_META_TAG_VIDEO_STR)))) {
-    GstMetaTransformCopy copy_data = { FALSE, 0, -1 };
-    GST_DEBUG_OBJECT (element, "copy metadata %s", g_type_name (info->api));
-    /* simply copy then */
-    info->transform_func (outbuf, *meta, inbuf,
-        _gst_meta_transform_copy, &copy_data);
-  } else {
-    GST_DEBUG_OBJECT (element, "not copying metadata %s",
-        g_type_name (info->api));
-  }
-
-  return TRUE;
-}
-
-/* TODO: Should probably make copy_tag an array at some point */
-void
-gst_rtp_copy_meta (GstElement * element, GstBuffer * outbuf, GstBuffer * inbuf,
-    GQuark copy_tag)
-{
-  CopyMetaData data = { element, outbuf, copy_tag };
-
-  gst_buffer_foreach_meta (inbuf, foreach_metadata_copy, &data);
-}
-
-static gboolean
-foreach_metadata_drop (GstBuffer * inbuf, GstMeta ** meta, gpointer user_data)
-{
-  GstRtpH265Depay *depay = user_data;
-  const GstMetaInfo *info = (*meta)->info;
-  const gchar *const *tags = gst_meta_api_type_get_tags (info->api);
-
-  if (!tags || (g_strv_length ((gchar **) tags) == 1
-          && gst_meta_api_type_has_tag (info->api,
-              g_quark_from_string (GST_META_TAG_VIDEO_STR)))) {
-    GST_DEBUG_OBJECT (depay, "keeping metadata %s", g_type_name (info->api));
-  } else {
-    GST_DEBUG_OBJECT (depay, "dropping metadata %s", g_type_name (info->api));
-    *meta = NULL;
-  }
-
-  return TRUE;
-}
-
-static GstBuffer *
-gst_rtp_h265_depay_handle_nal (GstRtpH265Depay * rtph265depay, GstBuffer * nal,
-    GstClockTime in_timestamp, gboolean marker)
-{
-  GstRTPBaseDepayload *depayload = GST_RTP_BASE_DEPAYLOAD (rtph265depay);
-  gint nal_type;
-  GstMapInfo map;
-  GstBuffer *outbuf = NULL;
-  GstClockTime out_timestamp;
-  gboolean keyframe, out_keyframe;
-
-  gst_buffer_map (nal, &map, GST_MAP_READ);
-  if (G_UNLIKELY (map.size < 5))
-    goto short_nal;
-
-  nal_type = (map.data[4] >> 1) & 0x3f;
-  GST_DEBUG_OBJECT (rtph265depay, "handle NAL type %d (RTP marker bit %d)",
-      nal_type, marker);
-
-  keyframe = NAL_TYPE_IS_KEY (nal_type);
-
-  out_keyframe = keyframe;
-  out_timestamp = in_timestamp;
-
-  if (!rtph265depay->byte_stream) {
-    if (NAL_TYPE_IS_PARAMETER_SET (nal_type)) {
-      gst_rtp_h265_depay_add_vps_sps_pps (rtph265depay,
-          gst_buffer_copy_region (nal, GST_BUFFER_COPY_ALL,
-              4, gst_buffer_get_size (nal) - 4));
-      gst_buffer_unmap (nal, &map);
-      gst_buffer_unref (nal);
-      return NULL;
-    } else if (rtph265depay->sps->len == 0 || rtph265depay->pps->len == 0) {
-      /* Down push down any buffer in non-bytestream mode if the SPS/PPS haven't
-       * go through yet
-       */
-      gst_pad_push_event (GST_RTP_BASE_DEPAYLOAD_SINKPAD (depayload),
-          gst_event_new_custom (GST_EVENT_CUSTOM_UPSTREAM,
-              gst_structure_new ("GstForceKeyUnit",
-                  "all-headers", G_TYPE_BOOLEAN, TRUE, NULL)));
-      gst_buffer_unmap (nal, &map);
-      gst_buffer_unref (nal);
-      return NULL;
-    }
-
-    if (rtph265depay->new_codec_data &&
-        rtph265depay->sps->len > 0 && rtph265depay->pps->len > 0)
-      gst_rtp_h265_set_src_caps (rtph265depay);
-  }
-
-  if (rtph265depay->merge) {
-    gboolean start = FALSE, complete = FALSE;
-
-    /* marker bit isn't mandatory so in the following code we try to detect
-     * an AU boundary (see H.265 spec section 7.4.2.4.4) */
-    if (!marker) {
-
-      if (NAL_TYPE_IS_CODED_SLICE_SEGMENT (nal_type)) {
-        /* A NAL unit (X) ends an access unit if the next-occurring VCL NAL unit (Y) has the high-order bit of the first byte after its NAL unit header equal to 1 */
-        start = TRUE;
-        if (((map.data[6] >> 7) & 0x01) == 1) {
-          complete = TRUE;
-        }
-        complete = TRUE;
-      } else if ((nal_type >= 32 && nal_type <= 35)
-          || nal_type == 39 || (nal_type >= 41 && nal_type <= 44)
-          || (nal_type >= 48 && nal_type <= 55)) {
-        /* VPS, SPS, PPS, SEI, ... terminate an access unit */
-        complete = TRUE;
-      }
-      GST_DEBUG_OBJECT (depayload, "start %d, complete %d", start, complete);
-
-      if (complete && rtph265depay->picture_start)
-        outbuf = gst_rtp_h265_complete_au (rtph265depay, &out_timestamp,
-            &out_keyframe);
-    }
-    /* add to adapter */
-    gst_buffer_unmap (nal, &map);
-
-    GST_DEBUG_OBJECT (depayload, "adding NAL to picture adapter");
-    gst_adapter_push (rtph265depay->picture_adapter, nal);
-    rtph265depay->last_ts = in_timestamp;
-    rtph265depay->last_keyframe |= keyframe;
-    rtph265depay->picture_start |= start;
-
-    if (marker)
-      outbuf = gst_rtp_h265_complete_au (rtph265depay, &out_timestamp,
-          &out_keyframe);
-  } else {
-    /* no merge, output is input nal */
-    GST_DEBUG_OBJECT (depayload, "using NAL as output");
-    outbuf = nal;
-    gst_buffer_unmap (nal, &map);
-  }
-
-  if (outbuf) {
-    /* prepend codec_data */
-    if (rtph265depay->codec_data) {
-      GST_DEBUG_OBJECT (depayload, "prepending codec_data");
-      gst_rtp_copy_meta (GST_ELEMENT_CAST (rtph265depay),
-          rtph265depay->codec_data, outbuf,
-          g_quark_from_static_string (GST_META_TAG_VIDEO_STR));
-      outbuf = gst_buffer_append (rtph265depay->codec_data, outbuf);
-      rtph265depay->codec_data = NULL;
-      out_keyframe = TRUE;
-    }
-    outbuf = gst_buffer_make_writable (outbuf);
-
-    gst_buffer_foreach_meta (outbuf, foreach_metadata_drop, depayload);
-
-    GST_BUFFER_PTS (outbuf) = out_timestamp;
-
-    if (out_keyframe)
-      GST_BUFFER_FLAG_UNSET (outbuf, GST_BUFFER_FLAG_DELTA_UNIT);
-    else
-      GST_BUFFER_FLAG_SET (outbuf, GST_BUFFER_FLAG_DELTA_UNIT);
-  }
-
-  return outbuf;
-
-  /* ERRORS */
-short_nal:
-  {
-    GST_WARNING_OBJECT (depayload, "dropping short NAL");
-    gst_buffer_unmap (nal, &map);
-    gst_buffer_unref (nal);
-    return NULL;
-  }
-}
-
-static GstBuffer *
-gst_rtp_h265_push_fragmentation_unit (GstRtpH265Depay * rtph265depay,
-    gboolean send)
-{
-  guint outsize;
-  GstMapInfo map;
-  GstBuffer *outbuf;
-
-  outsize = gst_adapter_available (rtph265depay->adapter);
-  outbuf = gst_adapter_take_buffer (rtph265depay->adapter, outsize);
-
-  gst_buffer_map (outbuf, &map, GST_MAP_WRITE);
-  GST_DEBUG_OBJECT (rtph265depay, "output %d bytes", outsize);
-
-  if (rtph265depay->byte_stream) {
-    memcpy (map.data, sync_bytes, sizeof (sync_bytes));
-  } else {
-    goto not_implemented;
-  }
-  gst_buffer_unmap (outbuf, &map);
-
-  rtph265depay->current_fu_type = 0;
-
-  outbuf = gst_rtp_h265_depay_handle_nal (rtph265depay, outbuf,
-      rtph265depay->fu_timestamp, rtph265depay->fu_marker);
-
-  if (send && outbuf) {
-    gst_rtp_base_depayload_push (GST_RTP_BASE_DEPAYLOAD (rtph265depay), outbuf);
-    outbuf = NULL;
-  }
-  return outbuf;
-
-not_implemented:
-  {
-    GST_ERROR_OBJECT (rtph265depay,
-        ("Only bytestream format is currently supported."));
-    gst_buffer_unmap (outbuf, &map);
-    return NULL;
-  }
-}
-
-static GstBuffer *
-gst_rtp_h265_depay_process (GstRTPBaseDepayload * depayload, GstRTPBuffer * rtp)
-{
-  GstRtpH265Depay *rtph265depay;
-  GstBuffer *buf;
-  GstBuffer *outbuf = NULL;
-  guint8 nal_unit_type;
-
-  rtph265depay = GST_RTP_H265_DEPAY (depayload);
-
-  /* flush remaining data on discont */
-  if (GST_BUFFER_IS_DISCONT (rtp->buffer)) {
-    gst_adapter_clear (rtph265depay->adapter);
-    rtph265depay->wait_start = TRUE;
-    rtph265depay->current_fu_type = 0;
-  }
-
-  {
-    gint payload_len;
-    guint8 *payload;
-    guint header_len;
-    GstMapInfo map;
-    guint outsize, nalu_size;
-    GstClockTime timestamp;
-    gboolean marker;
-    guint8 nuh_layer_id, nuh_temporal_id_plus1;
-    guint8 S, E;
-    guint16 nal_header;
-#if 0
-    gboolean donl_present = FALSE;
-#endif
-
-    timestamp = GST_BUFFER_PTS (rtp->buffer);
-
-    payload_len = gst_rtp_buffer_get_payload_len (rtp);
-    payload = gst_rtp_buffer_get_payload (rtp);
-    buf = gst_rtp_buffer_get_payload_buffer (rtp);
-    marker = gst_rtp_buffer_get_marker (rtp);
-
-    GST_DEBUG_OBJECT (rtph265depay, "receiving %d bytes", payload_len);
-
-    if (payload_len == 0)
-      goto empty_packet;
-
-    /* +---------------+---------------+
-     * |0|1|2|3|4|5|6|7|0|1|2|3|4|5|6|7|
-     * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-     * |F|   Type    |  LayerId  | TID |
-     * +-------------+-----------------+
-     *
-     * F must be 0.
-     *
-     */
-    nal_unit_type = (payload[0] >> 1) & 0x3f;
-    nuh_layer_id = ((payload[0] & 0x01) << 5) | (payload[1] >> 3);      /* should be zero for now but this could change in future HEVC extensions */
-    nuh_temporal_id_plus1 = payload[1] & 0x03;
-
-    /* At least two byte header with type */
-    header_len = 2;
-
-    GST_DEBUG_OBJECT (rtph265depay,
-        "NAL header nal_unit_type %d, nuh_temporal_id_plus1 %d", nal_unit_type,
-        nuh_temporal_id_plus1);
-
-    GST_FIXME_OBJECT (rtph265depay, "Assuming DONL field is not present");
-
-    /* FIXME - assuming DONL field is not present for now */
-    /*donl_present = (tx-mode == "MST") || (sprop-max-don-diff > 0); */
-
-    /* If FU unit was being processed, but the current nal is of a different
-     * type.  Assume that the remote payloader is buggy (didn't set the end bit
-     * when the FU ended) and send out what we gathered thusfar */
-    if (G_UNLIKELY (rtph265depay->current_fu_type != 0 &&
-            nal_unit_type != rtph265depay->current_fu_type))
-      gst_rtp_h265_push_fragmentation_unit (rtph265depay, TRUE);
-
-    switch (nal_unit_type) {
-      case 48:
-      {
-        GST_DEBUG_OBJECT (rtph265depay, "Processing aggregation packet");
-
-        /* Aggregation packet (section 4.7) */
-
-        /*  An example of an AP packet containing two aggregation units
-           without the DONL and DOND fields
-
-           0                   1                   2                   3
-           0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
-           +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-           |                          RTP Header                           |
-           +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-           |   PayloadHdr (Type=48)        |         NALU 1 Size           |
-           +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-           |          NALU 1 HDR           |                               |
-           +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+         NALU 1 Data           |
-           |                   . . .                                       |
-           |                                                               |
-           +               +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-           |  . . .        | NALU 2 Size                   | NALU 2 HDR    |
-           +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-           | NALU 2 HDR    |                                               |
-           +-+-+-+-+-+-+-+-+              NALU 2 Data                      |
-           |                   . . .                                       |
-           |                               +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-           |                               :...OPTIONAL RTP padding        |
-           +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-         */
-
-        /* strip headers */
-        payload += header_len;
-        payload_len -= header_len;
-
-        rtph265depay->wait_start = FALSE;
-
-#if 0
-        if (donl_present)
-          goto not_implemented_donl_present;
-#endif
-
-        while (payload_len > 2) {
-
-          nalu_size = (payload[0] << 8) | payload[1];
-
-          /* dont include nalu_size */
-          if (nalu_size > (payload_len - 2))
-            nalu_size = payload_len - 2;
-
-          outsize = nalu_size + sizeof (sync_bytes);
-          outbuf = gst_buffer_new_and_alloc (outsize);
-
-          gst_buffer_map (outbuf, &map, GST_MAP_WRITE);
-          if (rtph265depay->byte_stream) {
-            memcpy (map.data, sync_bytes, sizeof (sync_bytes));
-          } else {
-            goto not_implemented;
-          }
-
-          /* strip NALU size */
-          payload += 2;
-          payload_len -= 2;
-
-          memcpy (map.data + sizeof (sync_bytes), payload, nalu_size);
-          gst_buffer_unmap (outbuf, &map);
-
-          gst_rtp_copy_meta (GST_ELEMENT_CAST (rtph265depay), outbuf, buf,
-              g_quark_from_static_string (GST_META_TAG_VIDEO_STR));
-
-          outbuf =
-              gst_rtp_h265_depay_handle_nal (rtph265depay, outbuf, timestamp,
-              marker);
-          if (outbuf)
-            gst_adapter_push (rtph265depay->adapter, outbuf);
-
-          payload += nalu_size;
-          payload_len -= nalu_size;
-        }
-
-        outsize = gst_adapter_available (rtph265depay->adapter);
-        if (outsize > 0) {
-          outbuf = gst_adapter_take_buffer (rtph265depay->adapter, outsize);
-          outbuf =
-              gst_rtp_h265_depay_handle_nal (rtph265depay, outbuf, timestamp,
-              marker);
-        }
-        break;
-      }
-      case 49:
-      {
-        GST_DEBUG_OBJECT (rtph265depay, "Processing Fragmentation Unit");
-
-        /* Fragmentation units (FUs)  Section 4.8 */
-
-        /*    The structure of a Fragmentation Unit (FU)
-         *
-         *    0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
-         +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-         |    PayloadHdr (Type=49)       |   FU header   | DONL (cond)   |
-         +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-|
-         | DONL (cond)   |                                               |
-         |-+-+-+-+-+-+-+-+                                               |
-         |                         FU payload                            |
-         |                                                               |
-         |                               +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-         |                               :...OPTIONAL RTP padding        |
-         +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-         *
-         *
-         */
-
-        /* strip headers */
-        payload += header_len;
-        payload_len -= header_len;
-
-        /* processing FU header */
-        S = (payload[0] & 0x80) == 0x80;
-        E = (payload[0] & 0x40) == 0x40;
-
-        GST_DEBUG_OBJECT (rtph265depay,
-            "FU header with S %d, E %d, nal_unit_type %d", S, E,
-            payload[0] & 0x3f);
-
-        if (rtph265depay->wait_start && !S)
-          goto waiting_start;
-
-#if 0
-        if (donl_present)
-          goto not_implemented_donl_present;
-#endif
-
-        if (S) {
-
-          GST_DEBUG_OBJECT (rtph265depay, "Start of Fragmentation Unit");
-
-          /* If a new FU unit started, while still processing an older one.
-           * Assume that the remote payloader is buggy (doesn't set the end
-           * bit) and send out what we've gathered thusfar */
-          if (G_UNLIKELY (rtph265depay->current_fu_type != 0))
-            gst_rtp_h265_push_fragmentation_unit (rtph265depay, TRUE);
-
-          rtph265depay->current_fu_type = nal_unit_type;
-          rtph265depay->fu_timestamp = timestamp;
-
-          rtph265depay->wait_start = FALSE;
-
-          /* reconstruct NAL header */
-          nal_header =
-              ((payload[0] & 0x3f) << 9) | (nuh_layer_id << 3) |
-              nuh_temporal_id_plus1;
-
-          /* go back one byte so we can copy the payload + two bytes more in the front which
-           * will be overwritten by the nal_header
-           */
-          payload -= 1;
-          payload_len += 1;
-
-          nalu_size = payload_len;
-          outsize = nalu_size + sizeof (sync_bytes);
-          outbuf = gst_buffer_new_and_alloc (outsize);
-
-          gst_buffer_map (outbuf, &map, GST_MAP_WRITE);
-          memcpy (map.data + sizeof (sync_bytes), payload, nalu_size);
-          map.data[sizeof (sync_bytes)] = nal_header >> 8;
-          map.data[sizeof (sync_bytes) + 1] = nal_header & 0xff;
-          gst_buffer_unmap (outbuf, &map);
-
-          gst_rtp_copy_meta (GST_ELEMENT_CAST (rtph265depay), outbuf, buf,
-              g_quark_from_static_string (GST_META_TAG_VIDEO_STR));
-
-          GST_DEBUG_OBJECT (rtph265depay, "queueing %d bytes", outsize);
-
-          /* and assemble in the adapter */
-          gst_adapter_push (rtph265depay->adapter, outbuf);
-        } else {
-
-          GST_DEBUG_OBJECT (rtph265depay,
-              "Following part of Fragmentation Unit");
-
-          /* strip off FU header byte */
-          payload += 1;
-          payload_len -= 1;
-
-          outsize = payload_len;
-          outbuf = gst_buffer_new_and_alloc (outsize);
-          gst_buffer_fill (outbuf, 0, payload, outsize);
-
-          gst_rtp_copy_meta (GST_ELEMENT_CAST (rtph265depay), outbuf, buf,
-              g_quark_from_static_string (GST_META_TAG_VIDEO_STR));
-
-          GST_DEBUG_OBJECT (rtph265depay, "queueing %d bytes", outsize);
-
-          /* and assemble in the adapter */
-          gst_adapter_push (rtph265depay->adapter, outbuf);
-        }
-
-        outbuf = NULL;
-        rtph265depay->fu_marker = marker;
-
-        /* if NAL unit ends, flush the adapter */
-        if (E) {
-          outbuf = gst_rtp_h265_push_fragmentation_unit (rtph265depay, FALSE);
-          GST_DEBUG_OBJECT (rtph265depay, "End of Fragmentation Unit");
-        }
-        break;
-      }
-      case 50:
-        goto not_implemented;   /* PACI packets  Section 4.9 */
-      default:
-      {
-        rtph265depay->wait_start = FALSE;
-
-        /* All other cases: Single NAL unit packet   Section 4.6 */
-        /* the entire payload is the output buffer */
-
-#if 0
-        if (donl_present)
-          goto not_implemented_donl_present;
-#endif
-
-        nalu_size = payload_len;
-        outsize = nalu_size + sizeof (sync_bytes);
-        outbuf = gst_buffer_new_and_alloc (outsize);
-
-        gst_buffer_map (outbuf, &map, GST_MAP_WRITE);
-        if (rtph265depay->byte_stream) {
-          memcpy (map.data, sync_bytes, sizeof (sync_bytes));
-        } else {
-          goto not_implemented;
-        }
-        memcpy (map.data + sizeof (sync_bytes), payload, nalu_size);
-        gst_buffer_unmap (outbuf, &map);
-
-        gst_rtp_copy_meta (GST_ELEMENT_CAST (rtph265depay), outbuf, buf,
-            g_quark_from_static_string (GST_META_TAG_VIDEO_STR));
-
-        outbuf = gst_rtp_h265_depay_handle_nal (rtph265depay, outbuf, timestamp,
-            marker);
-        break;
-      }
-    }
-  }
-
-  gst_buffer_unref (buf);
-
-  return outbuf;
-
-  /* ERRORS */
-empty_packet:
-  {
-    GST_DEBUG_OBJECT (rtph265depay, "empty packet");
-    gst_buffer_unref (buf);
-    return NULL;
-  }
-waiting_start:
-  {
-    GST_DEBUG_OBJECT (rtph265depay, "waiting for start");
-    gst_buffer_unref (buf);
-    return NULL;
-  }
-#if 0
-not_implemented_donl_present:
-  {
-    GST_ELEMENT_ERROR (rtph265depay, STREAM, FORMAT,
-        (NULL), ("DONL field present not supported yet"));
-    gst_buffer_unref (buf);
-    return NULL;
-  }
-#endif
-not_implemented:
-  {
-    GST_ELEMENT_ERROR (rtph265depay, STREAM, FORMAT,
-        (NULL), ("NAL unit type %d not supported yet", nal_unit_type));
-    gst_buffer_unref (buf);
-    return NULL;
-  }
-}
-
-static gboolean
-gst_rtp_h265_depay_handle_event (GstRTPBaseDepayload * depay, GstEvent * event)
-{
-  GstRtpH265Depay *rtph265depay;
-
-  rtph265depay = GST_RTP_H265_DEPAY (depay);
-
-  switch (GST_EVENT_TYPE (event)) {
-    case GST_EVENT_FLUSH_STOP:
-      gst_rtp_h265_depay_reset (rtph265depay);
-      break;
-    default:
-      break;
-  }
-
-  return
-      GST_RTP_BASE_DEPAYLOAD_CLASS (parent_class)->handle_event (depay, event);
-}
-
-static GstStateChangeReturn
-gst_rtp_h265_depay_change_state (GstElement * element,
-    GstStateChange transition)
-{
-  GstRtpH265Depay *rtph265depay;
-  GstStateChangeReturn ret;
-
-  rtph265depay = GST_RTP_H265_DEPAY (element);
-
-  switch (transition) {
-    case GST_STATE_CHANGE_NULL_TO_READY:
-      break;
-    case GST_STATE_CHANGE_READY_TO_PAUSED:
-      gst_rtp_h265_depay_reset (rtph265depay);
-      break;
-    default:
-      break;
-  }
-
-  ret = GST_ELEMENT_CLASS (parent_class)->change_state (element, transition);
-
-  switch (transition) {
-    case GST_STATE_CHANGE_READY_TO_NULL:
-      break;
-    default:
-      break;
-  }
-  return ret;
-}
-
-gboolean
-gst_rtp_h265_depay_plugin_init (GstPlugin * plugin)
-{
-  GST_DEBUG_CATEGORY_INIT (rtph265depay_debug, "rtph265depay", 0,
-      "H265 Video RTP Depayloader");
-
-  return gst_element_register (plugin, "rtph265depay",
-      GST_RANK_SECONDARY, GST_TYPE_RTP_H265_DEPAY);
-}
diff --git a/gst/rtp/gstrtph265depay.h b/gst/rtp/gstrtph265depay.h
deleted file mode 100644
index 9f50ac6..0000000
--- a/gst/rtp/gstrtph265depay.h
+++ /dev/null
@@ -1,107 +0,0 @@
-/* GStreamer
- * Copyright (C) <2006> Wim Taymans <wim.taymans@gmail.com>
- * Copyright (C) <2014> Jurgen Slowack <jurgenslowack@gmail.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-#ifndef __GST_RTP_H265_DEPAY_H__
-#define __GST_RTP_H265_DEPAY_H__
-
-#include <gst/gst.h>
-#include <gst/base/gstadapter.h>
-#include <gst/rtp/gstrtpbasedepayload.h>
-#include <gst/codecparsers/gsth265parser.h>
-
-G_BEGIN_DECLS
-#define GST_TYPE_RTP_H265_DEPAY \
-  (gst_rtp_h265_depay_get_type())
-#define GST_RTP_H265_DEPAY(obj) \
-  (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_RTP_H265_DEPAY,GstRtpH265Depay))
-#define GST_RTP_H265_DEPAY_CLASS(klass) \
-  (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_RTP_H265_DEPAY,GstRtpH265DepayClass))
-#define GST_IS_RTP_H265_DEPAY(obj) \
-  (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_RTP_H265_DEPAY))
-#define GST_IS_RTP_H265_DEPAY_CLASS(klass) \
-  (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_RTP_H265_DEPAY))
-typedef struct _GstRtpH265Depay GstRtpH265Depay;
-typedef struct _GstRtpH265DepayClass GstRtpH265DepayClass;
-
-#define GST_H265_VPS_NUT 32
-#define GST_H265_SPS_NUT 33
-#define GST_H265_PPS_NUT 34
-
-typedef enum
-{
-  GST_H265_STREAM_FORMAT_UNKNOWN,
-  GST_H265_STREAM_FORMAT_BYTESTREAM,
-  GST_H265_STREAM_FORMAT_HVC1,
-  GST_H265_STREAM_FORMAT_HEV1
-} GstH265StreamFormat;
-
-struct _GstRtpH265Depay
-{
-  GstRTPBaseDepayload depayload;
-
-  gchar *stream_format;
-  gboolean byte_stream;
-
-  GstBuffer *codec_data;
-  GstAdapter *adapter;
-  gboolean wait_start;
-
-  /* nal merging */
-  gboolean merge;
-  GstAdapter *picture_adapter;
-  gboolean picture_start;
-  GstClockTime last_ts;
-  gboolean last_keyframe;
-
-  /* Work around broken payloaders wrt. Fragmentation Units */
-  guint8 current_fu_type;
-  GstClockTime fu_timestamp;
-  gboolean fu_marker;
-
-  /* misc */
-  GPtrArray *vps;
-  GPtrArray *sps;
-  GPtrArray *pps;
-  gboolean new_codec_data;
-};
-
-struct _GstRtpH265DepayClass
-{
-  GstRTPBaseDepayloadClass parent_class;
-};
-
-typedef struct
-{
-  GstElement *element;
-  GstBuffer *outbuf;
-  GQuark copy_tag;
-} CopyMetaData;
-
-void gst_rtp_copy_meta (GstElement * element, GstBuffer *outbuf, GstBuffer *inbuf, GQuark copy_tag);
-
-GType gst_rtp_h265_depay_get_type (void);
-
-gboolean gst_rtp_h265_depay_plugin_init (GstPlugin * plugin);
-
-gboolean gst_rtp_h265_add_vps_sps_pps (GstElement * rtph265, GPtrArray * vps,
-    GPtrArray * sps, GPtrArray * pps, GstBuffer * nal);
-
-G_END_DECLS
-#endif /* __GST_RTP_H265_DEPAY_H__ */
diff --git a/gst/rtp/gstrtph265pay.c b/gst/rtp/gstrtph265pay.c
deleted file mode 100644
index b17b091..0000000
--- a/gst/rtp/gstrtph265pay.c
+++ /dev/null
@@ -1,1503 +0,0 @@
-/* GStreamer
- * Copyright (C) <2006> Wim Taymans <wim.taymans@gmail.com>
- * Copyright (C) <2014> Jurgen Slowack <jurgenslowack@gmail.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-#ifdef HAVE_CONFIG_H
-#  include "config.h"
-#endif
-
-#include <string.h>
-#include <stdlib.h>
-
-#include <gst/rtp/gstrtpbuffer.h>
-#include <gst/pbutils/pbutils.h>
-#include <gst/video/video.h>
-
-/* Included to not duplicate gst_rtp_h265_add_vps_sps_pps () */
-#include "gstrtph265depay.h"
-
-#include "gstrtph265pay.h"
-
-
-GST_DEBUG_CATEGORY_STATIC (rtph265pay_debug);
-#define GST_CAT_DEFAULT (rtph265pay_debug)
-
-/* references:
- *
- * Internet Draft RTP Payload Format for High Efficiency Video Coding
- *
- *                   draft-ietf-payload-rtp-h265-03.txt
- *
- * This draft will be replaced with an RFC, so some details may change.
- *
- */
-
-static GstStaticPadTemplate gst_rtp_h265_pay_sink_template =
-    GST_STATIC_PAD_TEMPLATE ("sink",
-    GST_PAD_SINK,
-    GST_PAD_ALWAYS,
-    GST_STATIC_CAPS (
-        /* Only bytestream format supported for now */
-        /* "video/x-h265, "
-           "stream-format = (string) hvc1, alignment = (string) au; "
-           "video/x-h265, "
-           "stream-format = (string) hev1, alignment = (string) au; " */
-        "video/x-h265, "
-        "stream-format = (string) byte-stream, alignment = (string) { nal, au }")
-    );
-
-static GstStaticPadTemplate gst_rtp_h265_pay_src_template =
-GST_STATIC_PAD_TEMPLATE ("src",
-    GST_PAD_SRC,
-    GST_PAD_ALWAYS,
-    GST_STATIC_CAPS ("application/x-rtp, "
-        "media = (string) \"video\", "
-        "payload = (int) " GST_RTP_PAYLOAD_DYNAMIC_STRING ", "
-        "clock-rate = (int) 90000, " "encoding-name = (string) \"H265\"")
-                /** optional parameters **/
-    /* "profile-space = (int) [ 0, 3 ], " */
-    /* "profile-id = (int) [ 0, 31 ], " */
-    /* "tier-flag = (int) [ 0, 1 ], " */
-    /* "level-id = (int) [ 0, 255 ], " */
-    /* "interop-constraints = (string) ANY, " */
-    /* "profile-compatibility-indicator = (string) ANY, " */
-    /* "sprop-sub-layer-id = (int) [ 0, 6 ], " */
-    /* "recv-sub-layer-id = (int) [ 0, 6 ], " */
-    /* "max-recv-level-id = (int) [ 0, 255 ], " */
-    /* "tx-mode = (string) {MST , SST}, " */
-    /* "sprop-vps = (string) ANY, " */
-    /* "sprop-sps = (string) ANY, " */
-    /* "sprop-pps = (string) ANY, " */
-    /* "sprop-sei = (string) ANY, " */
-    /* "max-lsr = (int) ANY, " *//* MUST be in the range of MaxLumaSR to 16 * MaxLumaSR, inclusive */
-    /* "max-lps = (int) ANY, " *//* MUST be in the range of MaxLumaPS to 16 * MaxLumaPS, inclusive */
-    /* "max-cpb = (int) ANY, " *//* MUST be in the range of MaxCPB to 16 * MaxCPB, inclusive */
-    /* "max-dpb = (int) [1, 16], " */
-    /* "max-br = (int) ANY, " *//* MUST be in the range of MaxBR to 16 * MaxBR, inclusive, for the highest level */
-    /* "max-tr = (int) ANY, " *//* MUST be in the range of MaxTileRows to 16 * MaxTileRows, inclusive, for the highest level */
-    /* "max-tc = (int) ANY, " *//* MUST be in the range of MaxTileCols to 16 * MaxTileCols, inclusive, for the highest level */
-    /* "max-fps = (int) ANY, " */
-    /* "sprop-max-don-diff = (int) [0, 32767], " */
-    /* "sprop-depack-buf-nalus = (int) [0, 32767], " */
-    /* "sprop-depack-buf-nalus = (int) [0, 4294967295], " */
-    /* "depack-buf-cap = (int) [1, 4294967295], " */
-    /* "sprop-segmentation-id = (int) [0, 3], " */
-    /* "sprop-spatial-segmentation-idc = (string) ANY, " */
-    /* "dec-parallel-cap = (string) ANY, " */
-    );
-
-#define DEFAULT_SPROP_PARAMETER_SETS    NULL
-#define DEFAULT_CONFIG_INTERVAL		      0
-
-enum
-{
-  PROP_0,
-  PROP_SPROP_PARAMETER_SETS,
-  PROP_CONFIG_INTERVAL
-};
-
-#define IS_ACCESS_UNIT(x) (((x) > 0x00) && ((x) < 0x06))
-
-static void gst_rtp_h265_pay_finalize (GObject * object);
-
-static void gst_rtp_h265_pay_set_property (GObject * object, guint prop_id,
-    const GValue * value, GParamSpec * pspec);
-static void gst_rtp_h265_pay_get_property (GObject * object, guint prop_id,
-    GValue * value, GParamSpec * pspec);
-
-static GstCaps *gst_rtp_h265_pay_getcaps (GstRTPBasePayload * payload,
-    GstPad * pad, GstCaps * filter);
-static gboolean gst_rtp_h265_pay_setcaps (GstRTPBasePayload * basepayload,
-    GstCaps * caps);
-static GstFlowReturn gst_rtp_h265_pay_handle_buffer (GstRTPBasePayload * pad,
-    GstBuffer * buffer);
-static gboolean gst_rtp_h265_pay_sink_event (GstRTPBasePayload * payload,
-    GstEvent * event);
-static GstStateChangeReturn gst_rtp_h265_pay_change_state (GstElement *
-    element, GstStateChange transition);
-
-#define gst_rtp_h265_pay_parent_class parent_class
-G_DEFINE_TYPE (GstRtpH265Pay, gst_rtp_h265_pay, GST_TYPE_RTP_BASE_PAYLOAD);
-
-static void
-gst_rtp_h265_pay_class_init (GstRtpH265PayClass * klass)
-{
-  GObjectClass *gobject_class;
-  GstElementClass *gstelement_class;
-  GstRTPBasePayloadClass *gstrtpbasepayload_class;
-
-  gobject_class = (GObjectClass *) klass;
-  gstelement_class = (GstElementClass *) klass;
-  gstrtpbasepayload_class = (GstRTPBasePayloadClass *) klass;
-
-  gobject_class->set_property = gst_rtp_h265_pay_set_property;
-  gobject_class->get_property = gst_rtp_h265_pay_get_property;
-
-  g_object_class_install_property (G_OBJECT_CLASS (klass),
-      PROP_SPROP_PARAMETER_SETS, g_param_spec_string ("sprop-parameter-sets",
-          "sprop-parameter-sets",
-          "The base64 sprop-parameter-sets to set in out caps (set to NULL to "
-          "extract from stream)",
-          DEFAULT_SPROP_PARAMETER_SETS,
-          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
-
-  g_object_class_install_property (G_OBJECT_CLASS (klass),
-      PROP_CONFIG_INTERVAL,
-      g_param_spec_uint ("config-interval",
-          "VPS SPS PPS Send Interval",
-          "Send VPS, SPS and PPS Insertion Interval in seconds (sprop parameter sets "
-          "will be multiplexed in the data stream when detected.) (0 = disabled)",
-          0, 3600, DEFAULT_CONFIG_INTERVAL,
-          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)
-      );
-
-  gobject_class->finalize = gst_rtp_h265_pay_finalize;
-
-  gst_element_class_add_pad_template (gstelement_class,
-      gst_static_pad_template_get (&gst_rtp_h265_pay_src_template));
-  gst_element_class_add_pad_template (gstelement_class,
-      gst_static_pad_template_get (&gst_rtp_h265_pay_sink_template));
-
-  gst_element_class_set_static_metadata (gstelement_class, "RTP H265 payloader",
-      "Codec/Payloader/Network/RTP",
-      "Payload-encode H265 video into RTP packets (based on draft-ietf-payload-rtp-h265-03.txt)",
-      "Jurgen Slowack <jurgenslowack@gmail.com>");
-
-  gstelement_class->change_state =
-      GST_DEBUG_FUNCPTR (gst_rtp_h265_pay_change_state);
-
-  gstrtpbasepayload_class->get_caps = gst_rtp_h265_pay_getcaps;
-  gstrtpbasepayload_class->set_caps = gst_rtp_h265_pay_setcaps;
-  gstrtpbasepayload_class->handle_buffer = gst_rtp_h265_pay_handle_buffer;
-  gstrtpbasepayload_class->sink_event = gst_rtp_h265_pay_sink_event;
-
-  GST_DEBUG_CATEGORY_INIT (rtph265pay_debug, "rtph265pay", 0,
-      "H265 RTP Payloader");
-}
-
-static void
-gst_rtp_h265_pay_init (GstRtpH265Pay * rtph265pay)
-{
-  rtph265pay->queue = g_array_new (FALSE, FALSE, sizeof (guint));
-  rtph265pay->profile = 0;
-  rtph265pay->sps = g_ptr_array_new_with_free_func (
-      (GDestroyNotify) gst_buffer_unref);
-  rtph265pay->pps = g_ptr_array_new_with_free_func (
-      (GDestroyNotify) gst_buffer_unref);
-  rtph265pay->vps = g_ptr_array_new_with_free_func (
-      (GDestroyNotify) gst_buffer_unref);
-  rtph265pay->last_vps_sps_pps = -1;
-  rtph265pay->vps_sps_pps_interval = DEFAULT_CONFIG_INTERVAL;
-
-  rtph265pay->adapter = gst_adapter_new ();
-}
-
-static void
-gst_rtp_h265_pay_clear_vps_sps_pps (GstRtpH265Pay * rtph265pay)
-{
-  g_ptr_array_set_size (rtph265pay->vps, 0);
-  g_ptr_array_set_size (rtph265pay->sps, 0);
-  g_ptr_array_set_size (rtph265pay->pps, 0);
-}
-
-static void
-gst_rtp_h265_pay_finalize (GObject * object)
-{
-  GstRtpH265Pay *rtph265pay;
-
-  rtph265pay = GST_RTP_H265_PAY (object);
-
-  g_array_free (rtph265pay->queue, TRUE);
-
-  g_ptr_array_free (rtph265pay->sps, TRUE);
-  g_ptr_array_free (rtph265pay->pps, TRUE);
-  g_ptr_array_free (rtph265pay->vps, TRUE);
-
-  g_free (rtph265pay->sprop_parameter_sets);
-
-  g_object_unref (rtph265pay->adapter);
-
-  G_OBJECT_CLASS (parent_class)->finalize (object);
-}
-
-static const gchar all_levels[][4] = {
-  "1",
-  "2",
-  "2.1",
-  "3",
-  "3.1",
-  "4",
-  "4.1",
-  "5",
-  "5.1",
-  "5.2",
-  "6",
-  "6.1",
-  "6.2"
-};
-
-static GstCaps *
-gst_rtp_h265_pay_getcaps (GstRTPBasePayload * payload, GstPad * pad,
-    GstCaps * filter)
-{
-  GstCaps *template_caps;
-  GstCaps *allowed_caps;
-  GstCaps *caps;
-  GstCaps *icaps;
-  gboolean append_unrestricted;
-  guint i;
-
-  allowed_caps =
-      gst_pad_peer_query_caps (GST_RTP_BASE_PAYLOAD_SRCPAD (payload), NULL);
-
-  if (allowed_caps == NULL)
-    return NULL;
-
-  template_caps =
-      gst_static_pad_template_get_caps (&gst_rtp_h265_pay_sink_template);
-
-  if (gst_caps_is_any (allowed_caps)) {
-    caps = gst_caps_ref (template_caps);
-    goto done;
-  }
-
-  if (gst_caps_is_empty (allowed_caps)) {
-    caps = gst_caps_ref (allowed_caps);
-    goto done;
-  }
-
-  caps = gst_caps_new_empty ();
-
-  append_unrestricted = FALSE;
-  for (i = 0; i < gst_caps_get_size (allowed_caps); i++) {
-    GstStructure *s = gst_caps_get_structure (allowed_caps, i);
-    GstStructure *new_s = gst_structure_new_empty ("video/x-h265");
-    const gchar *profile_level_id;
-
-    profile_level_id = gst_structure_get_string (s, "profile-level-id");
-
-    if (profile_level_id && strlen (profile_level_id) == 6) {   /* Code taken from gstrtph264pay.c, needs to be revised for H.265 */
-      const gchar *profile;
-      const gchar *level;
-      long int spsint;
-      guint8 sps[3];
-
-      spsint = strtol (profile_level_id, NULL, 16);
-      sps[0] = spsint >> 16;
-      sps[1] = spsint >> 8;
-      sps[2] = spsint;
-
-      profile = gst_codec_utils_h265_get_profile (sps, 3);
-      level = gst_codec_utils_h265_get_level (sps, 3);
-
-      if (profile && level) {
-        GST_LOG_OBJECT (payload, "In caps, have profile %s and level %s",
-            profile, level);
-
-        if (!strcmp (profile, "main"))
-          gst_structure_set (new_s, "profile", G_TYPE_STRING, profile, NULL);
-        else {
-          GValue val = { 0, };
-          GValue profiles = { 0, };
-
-          g_value_init (&profiles, GST_TYPE_LIST);
-          g_value_init (&val, G_TYPE_STRING);
-
-          g_value_set_static_string (&val, profile);
-          gst_value_list_append_value (&profiles, &val);
-
-          g_value_set_static_string (&val, "main");
-          gst_value_list_append_value (&profiles, &val);
-
-          gst_structure_take_value (new_s, "profile", &profiles);
-        }
-
-        if (!strcmp (level, "1"))
-          gst_structure_set (new_s, "level", G_TYPE_STRING, level, NULL);
-        else {
-          GValue levels = { 0, };
-          GValue val = { 0, };
-          int j;
-
-          g_value_init (&levels, GST_TYPE_LIST);
-          g_value_init (&val, G_TYPE_STRING);
-
-          for (j = 0; j < G_N_ELEMENTS (all_levels); j++) {
-            g_value_set_static_string (&val, all_levels[j]);
-            gst_value_list_prepend_value (&levels, &val);
-            if (!strcmp (level, all_levels[j]))
-              break;
-          }
-          gst_structure_take_value (new_s, "level", &levels);
-        }
-      } else {
-        /* Invalid profile-level-id means main */
-
-        gst_structure_set (new_s, "profile", G_TYPE_STRING, "main", NULL);
-      }
-    } else {
-      /* No profile-level-id means main or unrestricted */
-
-      gst_structure_set (new_s, "profile", G_TYPE_STRING, "main", NULL);
-      append_unrestricted = TRUE;
-    }
-
-    caps = gst_caps_merge_structure (caps, new_s);
-  }
-
-  if (append_unrestricted) {
-    caps =
-        gst_caps_merge_structure (caps, gst_structure_new ("video/x-h265", NULL,
-            NULL));
-  }
-
-  icaps = gst_caps_intersect (caps, template_caps);
-  gst_caps_unref (caps);
-  caps = icaps;
-
-done:
-
-  gst_caps_unref (template_caps);
-  gst_caps_unref (allowed_caps);
-
-  GST_LOG_OBJECT (payload, "returning caps %" GST_PTR_FORMAT, caps);
-  return caps;
-}
-
-/* take the currently configured VPS, SPS and PPS lists and set them on the caps as
- * sprop-parameter-sets */
-static gboolean
-gst_rtp_h265_pay_set_vps_sps_pps (GstRTPBasePayload * basepayload)
-{
-  GstRtpH265Pay *payloader = GST_RTP_H265_PAY (basepayload);
-  gchar *profile;
-  gchar *set;
-  GString *sprops;
-  guint count;
-  gboolean res;
-  GstMapInfo map;
-  guint i;
-
-  sprops = g_string_new ("");
-  count = 0;
-
-  GST_DEBUG_OBJECT (payloader,
-      "Entering function gst_rtp_h265_pay_set_vps_sps_pps");
-
-  /* build the sprop-parameter-sets */
-  for (i = 0; i < payloader->vps->len; i++) {
-    GstBuffer *vps_buf =
-        GST_BUFFER_CAST (g_ptr_array_index (payloader->vps, i));
-
-    gst_buffer_map (vps_buf, &map, GST_MAP_READ);
-    set = g_base64_encode (map.data, map.size);
-    gst_buffer_unmap (vps_buf, &map);
-
-    g_string_append_printf (sprops, "%s%s", count ? "," : "", set);
-    g_free (set);
-    count++;
-  }
-  for (i = 0; i < payloader->sps->len; i++) {
-    GstBuffer *sps_buf =
-        GST_BUFFER_CAST (g_ptr_array_index (payloader->sps, i));
-
-    gst_buffer_map (sps_buf, &map, GST_MAP_READ);
-    set = g_base64_encode (map.data, map.size);
-    gst_buffer_unmap (sps_buf, &map);
-
-    g_string_append_printf (sprops, "%s%s", count ? "," : "", set);
-    g_free (set);
-    count++;
-  }
-  for (i = 0; i < payloader->pps->len; i++) {
-    GstBuffer *pps_buf =
-        GST_BUFFER_CAST (g_ptr_array_index (payloader->pps, i));
-
-    gst_buffer_map (pps_buf, &map, GST_MAP_READ);
-    set = g_base64_encode (map.data, map.size);
-    gst_buffer_unmap (pps_buf, &map);
-
-    g_string_append_printf (sprops, "%s%s", count ? "," : "", set);
-    g_free (set);
-    count++;
-  }
-
-  if (G_LIKELY (count)) {
-    /* profile is 24 bit. Force it to respect the limit */
-    profile = g_strdup_printf ("%06x", payloader->profile & 0xffffff);
-    /* combine into output caps */
-    res = gst_rtp_base_payload_set_outcaps (basepayload,
-        "sprop-parameter-sets", G_TYPE_STRING, sprops->str, NULL);
-    g_free (profile);
-  } else {
-    res = gst_rtp_base_payload_set_outcaps (basepayload, NULL);
-  }
-  g_string_free (sprops, TRUE);
-
-  return res;
-}
-
-
-static gboolean
-gst_rtp_h265_pay_setcaps (GstRTPBasePayload * basepayload, GstCaps * caps)
-{
-  GstRtpH265Pay *rtph265pay;
-  GstStructure *str;
-  const GValue *value;
-  GstMapInfo map;
-  guint8 *data;
-  gsize size;
-  GstBuffer *buffer;
-  const gchar *alignment, *stream_format;
-  guint8 num_arrays;
-
-  rtph265pay = GST_RTP_H265_PAY (basepayload);
-
-  str = gst_caps_get_structure (caps, 0);
-
-  /* we can only set the output caps when we found the sprops and profile
-   * NALs */
-  gst_rtp_base_payload_set_options (basepayload, "video", TRUE, "H265", 90000);
-
-  rtph265pay->alignment = GST_H265_ALIGNMENT_UNKNOWN;
-  alignment = gst_structure_get_string (str, "alignment");
-  if (alignment) {
-    if (g_str_equal (alignment, "au"))
-      rtph265pay->alignment = GST_H265_ALIGNMENT_AU;
-    if (g_str_equal (alignment, "nal"))
-      rtph265pay->alignment = GST_H265_ALIGNMENT_NAL;
-  }
-
-  rtph265pay->stream_format = GST_H265_STREAM_FORMAT_UNKNOWN;
-  stream_format = gst_structure_get_string (str, "stream-format");
-  if (stream_format) {
-    if (g_str_equal (stream_format, "hvc1"))
-      rtph265pay->stream_format = GST_H265_STREAM_FORMAT_HVC1;
-    if (g_str_equal (stream_format, "hev1"))
-      rtph265pay->stream_format = GST_H265_STREAM_FORMAT_HEV1;
-    if (g_str_equal (stream_format, "byte-stream"))
-      rtph265pay->stream_format = GST_H265_STREAM_FORMAT_BYTESTREAM;
-  }
-
-  /* packetized HEVC video has a codec_data */
-  if ((value = gst_structure_get_value (str, "codec_data"))) {
-    guint num_vps, num_sps, num_pps;
-    gint i, j, nal_size;
-
-    GST_DEBUG_OBJECT (rtph265pay, "have packetized h265");
-
-    buffer = gst_value_get_buffer (value);
-
-    gst_buffer_map (buffer, &map, GST_MAP_READ);
-    data = map.data;
-    size = map.size;
-
-    /* parse the hevcC data */
-    if (size < 23)
-      goto hevcc_too_small;
-    /* HEVCDecoderConfigurationVersion (must be 1) */
-    if (data[0] != 1)
-      goto wrong_version;
-
-    /* profile_space | tier_flag | profile_idc */
-    rtph265pay->profile = data[1];
-    GST_DEBUG_OBJECT (rtph265pay, "profile %06x", rtph265pay->profile);
-
-    /* profile_compatibility_flags */
-    for (i = 2; i < 6; i++) {
-      for (j = 7; j >= 0; j--) {
-        GST_DEBUG_OBJECT (rtph265pay, "profile_compatibility_flag %06x",
-            (data[i] >> j) & 1);
-      }
-    }
-
-    GST_DEBUG_OBJECT (rtph265pay, "progressive_source_flag %06x",
-        (data[6] >> 7) & 1);
-    GST_DEBUG_OBJECT (rtph265pay, "interlaced_source_flag %06x",
-        (data[6] >> 6) & 1);
-    GST_DEBUG_OBJECT (rtph265pay, "non_packed_constraint_flag %06x",
-        (data[6] >> 5) & 1);
-    GST_DEBUG_OBJECT (rtph265pay, "frame_only_constraint_flag %06x",
-        (data[6] >> 4) & 1);
-
-    GST_DEBUG_OBJECT (rtph265pay, "level_idc %06x", data[12]);
-
-    GST_DEBUG_OBJECT (rtph265pay, "min_spatial_segmentation_idc %06x",
-        ((data[13] ^ 0xf0) << 8) + data[14]);
-    GST_DEBUG_OBJECT (rtph265pay, "parrallelismType %06x (ignored by paloader)",
-        data[15]);
-
-    GST_DEBUG_OBJECT (rtph265pay, "sps_chroma_format_idc %06x",
-        data[16] ^ 0xfc);
-    GST_DEBUG_OBJECT (rtph265pay, "bit_depth_luma_minus8 %06x",
-        data[17] ^ 0xf8);
-    GST_DEBUG_OBJECT (rtph265pay, "bit_depth_chroma_minus8 %06x",
-        data[18] ^ 0xf8);
-    GST_DEBUG_OBJECT (rtph265pay, "avgFrameRate %06x", data[19]);
-    GST_DEBUG_OBJECT (rtph265pay, "avgFrameRate %06x", data[20]);
-
-    /* constFrameRate(2 bits): 0, stream may or may not be of constant framerate
-     * numTemporalLayers (3 bits): number of temporal layers, value from SPS
-     * TemporalIdNested (1 bit): sps_temporal_id_nesting_flag from SPS
-     * lengthSizeMinusOne (2 bits): plus 1 indicates the length of the NALUnitLength */
-    GST_DEBUG_OBJECT (rtph265pay, "constFrameRate %06x",
-        (data[21] >> 6) & 0x03);
-    GST_DEBUG_OBJECT (rtph265pay, "numTemporalLayers %06x",
-        (data[21] >> 3) & 0x07);
-    GST_DEBUG_OBJECT (rtph265pay, "temporal_id_nesting_flag %06x",
-        (data[21] >> 2) & 0x01);
-
-    rtph265pay->nal_length_size = (data[21] & 0x3) + 1;
-    GST_DEBUG_OBJECT (rtph265pay, "nal length %u", rtph265pay->nal_length_size);
-
-    num_arrays = GST_READ_UINT8 (data + 22);
-
-    data += 23;
-    size -= 23;
-
-    if (num_arrays > 0) {
-      if (data[0] == (0x00 | 0x20)) {   /* VPS */
-
-        data++;
-        num_vps = data[0] << 8 | data[1];
-        data += 2;
-        size -= 2;
-
-        for (i = 0; i < num_vps; i++) {
-
-          GstBuffer *vps_buf;
-
-          if (size < 2)
-            goto hevcc_error;
-
-          nal_size = (data[0] << 8) | data[1];
-          data += 2;
-          size -= 2;
-
-          GST_LOG_OBJECT (rtph265pay, "VPS %d size %d", i, nal_size);
-
-          if (size < nal_size)
-            goto hevcc_error;
-
-          /* make a buffer out of it and add to VPS list */
-          vps_buf = gst_buffer_new_and_alloc (nal_size);
-          gst_buffer_fill (vps_buf, 0, data, nal_size);
-          gst_rtp_h265_add_vps_sps_pps (GST_ELEMENT (rtph265pay),
-              rtph265pay->vps, rtph265pay->sps, rtph265pay->pps, vps_buf);
-          data += nal_size;
-          size -= nal_size;
-        }
-      }
-
-      --num_arrays;
-    }
-
-    if (num_arrays > 0) {
-      if (data[0] == (0x00 | 0x21)) {   /* SPS */
-
-        data++;
-        num_sps = data[0] << 8 | data[1];
-        data += 2;
-        size -= 2;
-
-        for (i = 0; i < num_sps; i++) {
-
-          GstBuffer *sps_buf;
-
-          if (size < 2)
-            goto hevcc_error;
-
-          nal_size = (data[0] << 8) | data[1];
-          data += 2;
-          size -= 2;
-
-          GST_LOG_OBJECT (rtph265pay, "SPS %d size %d", i, nal_size);
-
-          if (size < nal_size)
-            goto hevcc_error;
-
-          /* make a buffer out of it and add to SPS list */
-          sps_buf = gst_buffer_new_and_alloc (nal_size);
-          gst_buffer_fill (sps_buf, 0, data, nal_size);
-          gst_rtp_h265_add_vps_sps_pps (GST_ELEMENT (rtph265pay),
-              rtph265pay->vps, rtph265pay->sps, rtph265pay->pps, sps_buf);
-          data += nal_size;
-          size -= nal_size;
-        }
-      }
-
-      --num_arrays;
-    }
-
-    if (num_arrays > 0) {
-      if (data[0] == (0x00 | 0x22)) {   /* PPS */
-
-        data++;
-        num_pps = data[0] << 8 | data[1];
-        data += 2;
-        size -= 2;
-
-        for (i = 0; i < num_pps; i++) {
-
-          GstBuffer *pps_buf;
-
-          if (size < 2)
-            goto hevcc_error;
-
-          nal_size = (data[0] << 8) | data[1];
-          data += 2;
-          size -= 2;
-
-          GST_LOG_OBJECT (rtph265pay, "PPS %d size %d", i, nal_size);
-
-          if (size < nal_size)
-            goto hevcc_error;
-
-          /* make a buffer out of it and add to PPS list */
-          pps_buf = gst_buffer_new_and_alloc (nal_size);
-          gst_buffer_fill (pps_buf, 0, data, nal_size);
-          gst_rtp_h265_add_vps_sps_pps (GST_ELEMENT (rtph265pay),
-              rtph265pay->vps, rtph265pay->sps, rtph265pay->pps, pps_buf);
-          data += nal_size;
-          size -= nal_size;
-        }
-      }
-
-      --num_arrays;
-    }
-
-    /* and update the caps with the collected data */
-    if (!gst_rtp_h265_pay_set_vps_sps_pps (basepayload))
-      goto set_vps_sps_pps_failed;
-
-    GST_DEBUG_OBJECT (rtph265pay, "Caps have been set");
-
-    gst_buffer_unmap (buffer, &map);
-  } else {
-    GST_DEBUG_OBJECT (rtph265pay, "have bytestream h265");
-  }
-
-  return TRUE;
-
-hevcc_too_small:
-  {
-    GST_ERROR_OBJECT (rtph265pay, "hevcC size %" G_GSIZE_FORMAT " < 7", size);
-    goto error;
-  }
-wrong_version:
-  {
-    GST_ERROR_OBJECT (rtph265pay, "wrong hevcC version");
-    goto error;
-  }
-hevcc_error:
-  {
-    GST_ERROR_OBJECT (rtph265pay, "hevcC too small ");
-    goto error;
-  }
-set_vps_sps_pps_failed:
-  {
-    GST_ERROR_OBJECT (rtph265pay, "failed to set vps/sps/pps");
-    goto error;
-  }
-error:
-  {
-    gst_buffer_unmap (buffer, &map);
-    return FALSE;
-  }
-}
-
-static void
-gst_rtp_h265_pay_parse_sprop_parameter_sets (GstRtpH265Pay * rtph265pay)
-{
-  const gchar *ps;
-  gchar **params;
-  guint len;
-  gint i;
-  GstBuffer *buf;
-
-  ps = rtph265pay->sprop_parameter_sets;
-  if (ps == NULL)
-    return;
-
-  gst_rtp_h265_pay_clear_vps_sps_pps (rtph265pay);
-
-  params = g_strsplit (ps, ",", 0);
-  len = g_strv_length (params);
-
-  GST_DEBUG_OBJECT (rtph265pay, "we have %d params", len);
-
-  for (i = 0; params[i]; i++) {
-    gsize nal_len;
-    GstMapInfo map;
-    guint8 *nalp;
-    guint save = 0;
-    gint state = 0;
-
-    nal_len = strlen (params[i]);
-    buf = gst_buffer_new_and_alloc (nal_len);
-
-    gst_buffer_map (buf, &map, GST_MAP_WRITE);
-    nalp = map.data;
-    nal_len = g_base64_decode_step (params[i], nal_len, nalp, &state, &save);
-    gst_buffer_unmap (buf, &map);
-    gst_buffer_resize (buf, 0, nal_len);
-
-    if (!nal_len) {
-      gst_buffer_unref (buf);
-      continue;
-    }
-
-    gst_rtp_h265_add_vps_sps_pps (GST_ELEMENT (rtph265pay), rtph265pay->vps,
-        rtph265pay->sps, rtph265pay->pps, buf);
-  }
-  g_strfreev (params);
-}
-
-static guint
-next_start_code (const guint8 * data, guint size)
-{
-  /* Boyer-Moore string matching algorithm, in a degenerative
-   * sense because our search 'alphabet' is binary - 0 & 1 only.
-   * This allow us to simplify the general BM algorithm to a very
-   * simple form. */
-  /* assume 1 is in the 3th byte */
-  guint offset = 2;
-
-  while (offset < size) {
-    if (1 == data[offset]) {
-      unsigned int shift = offset;
-
-      if (0 == data[--shift]) {
-        if (0 == data[--shift]) {
-          return shift;
-        }
-      }
-      /* The jump is always 3 because of the 1 previously matched.
-       * All the 0's must be after this '1' matched at offset */
-      offset += 3;
-    } else if (0 == data[offset]) {
-      /* maybe next byte is 1? */
-      offset++;
-    } else {
-      /* can jump 3 bytes forward */
-      offset += 3;
-    }
-    /* at each iteration, we rescan in a backward manner until
-     * we match 0.0.1 in reverse order. Since our search string
-     * has only 2 'alpabets' (i.e. 0 & 1), we know that any
-     * mismatch will force us to shift a fixed number of steps */
-  }
-  GST_DEBUG ("Cannot find next NAL start code. returning %u", size);
-
-  return size;
-}
-
-static gboolean
-gst_rtp_h265_pay_decode_nal (GstRtpH265Pay * payloader,
-    const guint8 * data, guint size, GstClockTime dts, GstClockTime pts)
-{
-  guint8 header, type;
-  gboolean updated;
-
-  /* default is no update */
-  updated = FALSE;
-
-  GST_DEBUG ("NAL payload len=%u", size);
-
-  header = data[0];
-  type = header & 0x3f;
-
-  /* We record the timestamp of the last SPS/PPS so
-   * that we can insert them at regular intervals and when needed. */
-  if (GST_H265_NAL_VPS == type || GST_H265_NAL_SPS == type
-      || GST_H265_NAL_PPS == type) {
-    GstBuffer *nal;
-
-    /* encode the entire NAL in base64 */
-    GST_DEBUG ("Found %s %x %x %x Len=%u",
-        type == GST_H265_NAL_VPS ? "VPS" : type ==
-        GST_H265_NAL_SPS ? "SPS" : "PPS", (header >> 7), (header >> 5) & 3,
-        type, size);
-
-    nal = gst_buffer_new_allocate (NULL, size, NULL);
-    gst_buffer_fill (nal, 0, data, size);
-
-    updated = gst_rtp_h265_add_vps_sps_pps (GST_ELEMENT (payloader),
-        payloader->vps, payloader->sps, payloader->pps, nal);
-
-    /* remember when we last saw VPS */
-    if (updated && pts != -1)
-      payloader->last_vps_sps_pps = pts;
-  } else {
-    GST_DEBUG ("NAL: %x %x %x Len = %u", (header >> 7),
-        (header >> 5) & 3, type, size);
-  }
-
-  return updated;
-}
-
-static GstFlowReturn
-gst_rtp_h265_pay_payload_nal (GstRTPBasePayload * basepayload,
-    GstBuffer * paybuf, GstClockTime dts, GstClockTime pts, gboolean end_of_au);
-
-static GstFlowReturn
-gst_rtp_h265_pay_send_vps_sps_pps (GstRTPBasePayload * basepayload,
-    GstRtpH265Pay * rtph265pay, GstClockTime dts, GstClockTime pts)
-{
-  GstFlowReturn ret = GST_FLOW_OK;
-  gboolean sent_all_vps_sps_pps = TRUE;
-  guint i;
-
-  for (i = 0; i < rtph265pay->vps->len; i++) {
-    GstBuffer *vps_buf =
-        GST_BUFFER_CAST (g_ptr_array_index (rtph265pay->vps, i));
-
-    GST_DEBUG_OBJECT (rtph265pay, "inserting VPS in the stream");
-    /* resend VPS */
-    ret = gst_rtp_h265_pay_payload_nal (basepayload, gst_buffer_ref (vps_buf),
-        dts, pts, FALSE);
-    /* Not critical here; but throw a warning */
-    if (ret != GST_FLOW_OK) {
-      sent_all_vps_sps_pps = FALSE;
-      GST_WARNING_OBJECT (basepayload, "Problem pushing VPS");
-    }
-  }
-  for (i = 0; i < rtph265pay->sps->len; i++) {
-    GstBuffer *sps_buf =
-        GST_BUFFER_CAST (g_ptr_array_index (rtph265pay->sps, i));
-
-    GST_DEBUG_OBJECT (rtph265pay, "inserting SPS in the stream");
-    /* resend SPS */
-    ret = gst_rtp_h265_pay_payload_nal (basepayload, gst_buffer_ref (sps_buf),
-        dts, pts, FALSE);
-    /* Not critical here; but throw a warning */
-    if (ret != GST_FLOW_OK) {
-      sent_all_vps_sps_pps = FALSE;
-      GST_WARNING_OBJECT (basepayload, "Problem pushing SPS");
-    }
-  }
-  for (i = 0; i < rtph265pay->pps->len; i++) {
-    GstBuffer *pps_buf =
-        GST_BUFFER_CAST (g_ptr_array_index (rtph265pay->pps, i));
-
-    GST_DEBUG_OBJECT (rtph265pay, "inserting PPS in the stream");
-    /* resend PPS */
-    ret = gst_rtp_h265_pay_payload_nal (basepayload, gst_buffer_ref (pps_buf),
-        dts, pts, FALSE);
-    /* Not critical here; but throw a warning */
-    if (ret != GST_FLOW_OK) {
-      sent_all_vps_sps_pps = FALSE;
-      GST_WARNING ("Problem pushing PPS");
-    }
-  }
-
-  if (pts != -1 && sent_all_vps_sps_pps)
-    rtph265pay->last_vps_sps_pps = pts;
-
-  return ret;
-}
-
-static GstFlowReturn
-gst_rtp_h265_pay_payload_nal (GstRTPBasePayload * basepayload,
-    GstBuffer * paybuf, GstClockTime dts, GstClockTime pts, gboolean end_of_au)
-{
-  GstRtpH265Pay *rtph265pay;
-  GstFlowReturn ret;
-  guint8 nalHeader[2];
-  guint8 nalType;
-  guint packet_len, payload_len, mtu;
-  GstBuffer *outbuf;
-  guint8 *payload;
-  GstBufferList *list = NULL;
-  gboolean send_vps_sps_pps;
-  GstRTPBuffer rtp = { NULL };
-  guint size = gst_buffer_get_size (paybuf);
-
-  rtph265pay = GST_RTP_H265_PAY (basepayload);
-  mtu = GST_RTP_BASE_PAYLOAD_MTU (rtph265pay);
-
-  gst_buffer_extract (paybuf, 0, nalHeader, 2);
-  nalType = (nalHeader[0] >> 1) & 0x3f;
-
-  GST_DEBUG_OBJECT (rtph265pay, "Processing Buffer with NAL TYPE=%d", nalType);
-
-  /* should set src caps before pushing stuff,
-   * and if we did not see enough VPS/SPS/PPS, that may not be the case */
-  if (G_UNLIKELY (!gst_pad_has_current_caps (GST_RTP_BASE_PAYLOAD_SRCPAD
-              (basepayload))))
-    gst_rtp_h265_pay_set_vps_sps_pps (basepayload);
-
-  send_vps_sps_pps = FALSE;
-
-  /* check if we need to emit an VPS/SPS/PPS now */
-  if (((nalType == GST_H265_NAL_SLICE_TRAIL_N)
-          || (nalType == GST_H265_NAL_SLICE_TRAIL_R)
-          || (nalType == GST_H265_NAL_SLICE_TSA_N)
-          || (nalType == GST_H265_NAL_SLICE_TSA_R)
-          || (nalType == GST_H265_NAL_SLICE_STSA_N)
-          || (nalType == GST_H265_NAL_SLICE_STSA_R)
-          || (nalType == GST_H265_NAL_SLICE_RASL_N)
-          || (nalType == GST_H265_NAL_SLICE_RASL_R)
-          || (nalType == GST_H265_NAL_SLICE_BLA_W_LP)
-          || (nalType == GST_H265_NAL_SLICE_BLA_W_RADL)
-          || (nalType == GST_H265_NAL_SLICE_BLA_N_LP)
-          || (nalType == GST_H265_NAL_SLICE_IDR_W_RADL)
-          || (nalType == GST_H265_NAL_SLICE_IDR_N_LP)
-          || (nalType == GST_H265_NAL_SLICE_CRA_NUT))
-      && rtph265pay->vps_sps_pps_interval > 0) {
-
-    if (rtph265pay->last_vps_sps_pps != -1) {
-      guint64 diff;
-
-      GST_LOG_OBJECT (rtph265pay,
-          "now %" GST_TIME_FORMAT ", last VPS/SPS/PPS %" GST_TIME_FORMAT,
-          GST_TIME_ARGS (pts), GST_TIME_ARGS (rtph265pay->last_vps_sps_pps));
-
-      /* calculate diff between last SPS/PPS in milliseconds */
-      if (pts > rtph265pay->last_vps_sps_pps)
-        diff = pts - rtph265pay->last_vps_sps_pps;
-      else
-        diff = 0;
-
-      GST_DEBUG_OBJECT (rtph265pay,
-          "interval since last VPS/SPS/PPS %" GST_TIME_FORMAT,
-          GST_TIME_ARGS (diff));
-
-      /* bigger than interval, queue SPS/PPS */
-      if (GST_TIME_AS_SECONDS (diff) >= rtph265pay->vps_sps_pps_interval) {
-        GST_DEBUG_OBJECT (rtph265pay, "time to send VPS/SPS/PPS");
-        send_vps_sps_pps = TRUE;
-      }
-    } else {
-      /* no known previous SPS/PPS time, send now */
-      GST_DEBUG_OBJECT (rtph265pay, "no previous VPS/SPS/PPS time, send now");
-      send_vps_sps_pps = TRUE;
-    }
-  }
-
-  if (send_vps_sps_pps || rtph265pay->send_vps_sps_pps) {
-    /* we need to send SPS/PPS now first. FIXME, don't use the pts for
-     * checking when we need to send SPS/PPS but convert to running_time first. */
-    rtph265pay->send_vps_sps_pps = FALSE;
-    ret = gst_rtp_h265_pay_send_vps_sps_pps (basepayload, rtph265pay, dts, pts);
-    if (ret != GST_FLOW_OK) {
-      gst_buffer_unref (paybuf);
-      return ret;
-    }
-  }
-
-  packet_len = gst_rtp_buffer_calc_packet_len (size, 0, 0);
-
-  GST_FIXME_OBJECT (rtph265pay, "Set RTP marker bit appropriately");
-
-  if (packet_len < mtu) {
-    GST_DEBUG_OBJECT (rtph265pay,
-        "NAL Unit fit in one packet datasize=%d mtu=%d", size, mtu);
-    /* will fit in one packet */
-
-    /* use buffer lists
-     * create buffer without payload containing only the RTP header
-     * (memory block at index 0) */
-    outbuf = gst_rtp_buffer_new_allocate (0, 0, 0);
-
-    gst_rtp_buffer_map (outbuf, GST_MAP_WRITE, &rtp);
-
-    /* FIXME : only set the marker bit on packets containing access units */
-    /* if (IS_ACCESS_UNIT (nalType) && end_of_au) {
-       gst_rtp_buffer_set_marker (&rtp, 1);
-       } */
-
-    /* timestamp the outbuffer */
-    GST_BUFFER_PTS (outbuf) = pts;
-    GST_BUFFER_DTS (outbuf) = dts;
-
-    /* insert payload memory block */
-    gst_rtp_copy_meta (GST_ELEMENT_CAST (rtph265pay), outbuf, paybuf,
-        g_quark_from_static_string (GST_META_TAG_VIDEO_STR));
-    outbuf = gst_buffer_append (outbuf, paybuf);
-
-    list = gst_buffer_list_new ();
-
-    /* add the buffer to the buffer list */
-    gst_buffer_list_add (list, outbuf);
-
-    gst_rtp_buffer_unmap (&rtp);
-
-    /* push the list to the next element in the pipe */
-    ret = gst_rtp_base_payload_push_list (basepayload, list);
-  } else {
-    /* fragmentation Units */
-    guint limitedSize;
-    int ii = 0, start = 1, end = 0, pos = 0;
-
-    GST_DEBUG_OBJECT (basepayload,
-        "NAL Unit DOES NOT fit in one packet datasize=%d mtu=%d", size, mtu);
-
-    pos += 2;
-    size -= 2;
-
-    GST_DEBUG_OBJECT (basepayload, "Using FU fragmentation for data size=%d",
-        size);
-
-    /* We keep 3 bytes for PayloadHdr and FU Header */
-    payload_len = gst_rtp_buffer_calc_payload_len (mtu - 3, 0, 0);
-
-    list = gst_buffer_list_new ();
-
-    while (end == 0) {
-      limitedSize = size < payload_len ? size : payload_len;
-      GST_DEBUG_OBJECT (basepayload,
-          "Inside  FU fragmentation limitedSize=%d iteration=%d", limitedSize,
-          ii);
-
-      /* use buffer lists
-       * create buffer without payload containing only the RTP header
-       * (memory block at index 0), and with space for PayloadHdr and FU header */
-      outbuf = gst_rtp_buffer_new_allocate (3, 0, 0);
-
-      gst_rtp_buffer_map (outbuf, GST_MAP_WRITE, &rtp);
-
-      GST_BUFFER_DTS (outbuf) = dts;
-      GST_BUFFER_PTS (outbuf) = pts;
-      payload = gst_rtp_buffer_get_payload (&rtp);
-
-      if (limitedSize == size) {
-        GST_DEBUG_OBJECT (basepayload, "end size=%d iteration=%d", size, ii);
-        end = 1;
-      }
-
-      /* PayloadHdr (type = 49) */
-      payload[0] = (nalHeader[0] & 0x81) | (49 << 1);
-      payload[1] = nalHeader[1];
-
-      /* FIXME - set RTP marker bit appropriately */
-      /* if (IS_ACCESS_UNIT (nalType)) {
-         gst_rtp_buffer_set_marker (&rtp, end && end_of_au);
-         } */
-
-      /* FU Header */
-      payload[2] = (start << 7) | (end << 6) | (nalType & 0x3f);
-
-      gst_rtp_buffer_unmap (&rtp);
-
-      /* insert payload memory block */
-      gst_rtp_copy_meta (GST_ELEMENT_CAST (rtph265pay), outbuf, paybuf,
-          g_quark_from_static_string (GST_META_TAG_VIDEO_STR));
-      gst_buffer_copy_into (outbuf, paybuf, GST_BUFFER_COPY_MEMORY, pos,
-          limitedSize);
-      /* add the buffer to the buffer list */
-      gst_buffer_list_add (list, outbuf);
-
-      size -= limitedSize;
-      pos += limitedSize;
-      ii++;
-      start = 0;
-    }
-
-    ret = gst_rtp_base_payload_push_list (basepayload, list);
-    gst_buffer_unref (paybuf);
-  }
-  return ret;
-}
-
-static GstFlowReturn
-gst_rtp_h265_pay_handle_buffer (GstRTPBasePayload * basepayload,
-    GstBuffer * buffer)
-{
-  GstRtpH265Pay *rtph265pay;
-  GstFlowReturn ret;
-  gsize size;
-  guint nal_len, i;
-  GstMapInfo map;
-  const guint8 *data;
-  GstClockTime dts, pts;
-  GArray *nal_queue;
-  gboolean hevc;
-  GstBuffer *paybuf = NULL;
-  gsize skip;
-
-  rtph265pay = GST_RTP_H265_PAY (basepayload);
-
-  /* the input buffer contains one or more NAL units */
-
-  hevc = (rtph265pay->stream_format == GST_H265_STREAM_FORMAT_HEV1)
-      || (rtph265pay->stream_format == GST_H265_STREAM_FORMAT_HVC1);
-
-  if (hevc) {
-    /* In hevc mode, there is no adapter, so nothing to flush */
-    if (buffer == NULL)
-      return GST_FLOW_OK;
-    gst_buffer_map (buffer, &map, GST_MAP_READ);
-    data = map.data;
-    size = map.size;
-    pts = GST_BUFFER_PTS (buffer);
-    dts = GST_BUFFER_DTS (buffer);
-    GST_DEBUG_OBJECT (basepayload, "got %" G_GSIZE_FORMAT " bytes", size);
-  } else {
-    dts = gst_adapter_prev_dts (rtph265pay->adapter, NULL);
-    pts = gst_adapter_prev_pts (rtph265pay->adapter, NULL);
-    if (buffer) {
-      if (!GST_CLOCK_TIME_IS_VALID (dts))
-        dts = GST_BUFFER_DTS (buffer);
-      if (!GST_CLOCK_TIME_IS_VALID (pts))
-        pts = GST_BUFFER_PTS (buffer);
-
-      gst_adapter_push (rtph265pay->adapter, buffer);
-    }
-    size = gst_adapter_available (rtph265pay->adapter);
-    /* Nothing to do here if the adapter is empty, e.g. on EOS */
-    if (size == 0)
-      return GST_FLOW_OK;
-    data = gst_adapter_map (rtph265pay->adapter, size);
-    GST_DEBUG_OBJECT (basepayload,
-        "got %" G_GSIZE_FORMAT " bytes (%" G_GSIZE_FORMAT ")", size,
-        buffer ? gst_buffer_get_size (buffer) : 0);
-  }
-
-  ret = GST_FLOW_OK;
-
-  /* now loop over all NAL units and put them in a packet
-   * FIXME, we should really try to pack multiple NAL units into one RTP packet
-   * if we can, especially for the config packets that wont't cause decoder
-   * latency. */
-  if (hevc) {
-    guint nal_length_size;
-    gsize offset = 0;
-
-    nal_length_size = rtph265pay->nal_length_size;
-
-    while (size > nal_length_size) {
-      gint i;
-      gboolean end_of_au = FALSE;
-
-      nal_len = 0;
-      for (i = 0; i < nal_length_size; i++) {
-        nal_len = ((nal_len << 8) + data[i]);
-      }
-
-      /* skip the length bytes, make sure we don't run past the buffer size */
-      data += nal_length_size;
-      offset += nal_length_size;
-      size -= nal_length_size;
-
-      if (size >= nal_len) {
-        GST_DEBUG_OBJECT (basepayload, "got NAL of size %u", nal_len);
-      } else {
-        nal_len = size;
-        GST_DEBUG_OBJECT (basepayload, "got incomplete NAL of size %u",
-            nal_len);
-      }
-
-      /* If we're at the end of the buffer, then we're at the end of the
-       * access unit
-       */
-      if (rtph265pay->alignment == GST_H265_ALIGNMENT_AU
-          && size - nal_len <= nal_length_size) {
-        end_of_au = TRUE;
-      }
-
-      paybuf = gst_buffer_copy_region (buffer, GST_BUFFER_COPY_ALL, offset,
-          nal_len);
-
-      ret =
-          gst_rtp_h265_pay_payload_nal (basepayload, paybuf, dts, pts,
-          end_of_au);
-      if (ret != GST_FLOW_OK)
-        break;
-
-      data += nal_len;
-      offset += nal_len;
-      size -= nal_len;
-    }
-  } else {
-    guint next;
-    gboolean update = FALSE;
-
-    /* get offset of first start code */
-    next = next_start_code (data, size);
-
-    /* skip to start code, if no start code is found, next will be size and we
-     * will not collect data. */
-    data += next;
-    size -= next;
-    nal_queue = rtph265pay->queue;
-    skip = next;
-
-    /* array must be empty when we get here */
-    g_assert (nal_queue->len == 0);
-
-    GST_DEBUG_OBJECT (basepayload,
-        "found first start at %u, bytes left %" G_GSIZE_FORMAT, next, size);
-
-    /* first pass to locate NALs and parse SPS/PPS */
-    while (size > 4) {
-      /* skip start code */
-      data += 3;
-      size -= 3;
-
-      /* use next_start_code() to scan buffer.
-       * next_start_code() returns the offset in data,
-       * starting from zero to the first byte of 0.0.0.1
-       * If no start code is found, it returns the value of the
-       * 'size' parameter.
-       * data is unchanged by the call to next_start_code()
-       */
-      next = next_start_code (data, size);
-
-      if (next == size && buffer != NULL) {
-        /* Didn't find the start of next NAL and it's not EOS,
-         * handle it next time */
-        break;
-      }
-
-      /* nal length is distance to next start code */
-      nal_len = next;
-
-      GST_DEBUG_OBJECT (basepayload, "found next start at %u of size %u", next,
-          nal_len);
-
-      if (rtph265pay->sprop_parameter_sets != NULL) {
-        /* explicitly set profile and sprop, use those */
-        if (rtph265pay->update_caps) {
-          if (!gst_rtp_base_payload_set_outcaps (basepayload,
-                  "sprop-parameter-sets", G_TYPE_STRING,
-                  rtph265pay->sprop_parameter_sets, NULL))
-            goto caps_rejected;
-
-          /* parse SPS and PPS from provided parameter set (for insertion) */
-          gst_rtp_h265_pay_parse_sprop_parameter_sets (rtph265pay);
-
-          rtph265pay->update_caps = FALSE;
-
-          GST_DEBUG ("outcaps update: sprop-parameter-sets=%s",
-              rtph265pay->sprop_parameter_sets);
-        }
-      } else {
-        /* We know our stream is a valid H265 NAL packet,
-         * go parse it for SPS/PPS to enrich the caps */
-        /* order: make sure to check nal */
-        update =
-            gst_rtp_h265_pay_decode_nal (rtph265pay, data, nal_len, dts, pts)
-            || update;
-      }
-      /* move to next NAL packet */
-      data += nal_len;
-      size -= nal_len;
-
-      g_array_append_val (nal_queue, nal_len);
-    }
-
-    /* if has new VPS, SPS & PPS, update the output caps */
-    if (G_UNLIKELY (update))
-      if (!gst_rtp_h265_pay_set_vps_sps_pps (basepayload))
-        goto caps_rejected;
-
-    /* second pass to payload and push */
-
-    if (nal_queue->len != 0)
-      gst_adapter_flush (rtph265pay->adapter, skip);
-
-    for (i = 0; i < nal_queue->len; i++) {
-      guint size;
-      gboolean end_of_au = FALSE;
-
-      nal_len = g_array_index (nal_queue, guint, i);
-      /* skip start code */
-      gst_adapter_flush (rtph265pay->adapter, 3);
-
-      /* Trim the end unless we're the last NAL in the stream.
-       * In case we're not at the end of the buffer we know the next block
-       * starts with 0x000001 so all the 0x00 bytes at the end of this one are
-       * trailing 0x0 that can be discarded */
-      size = nal_len;
-      data = gst_adapter_map (rtph265pay->adapter, size);
-      if (i + 1 != nal_queue->len || buffer != NULL)
-        for (; size > 1 && data[size - 1] == 0x0; size--)
-          /* skip */ ;
-
-
-      /* If it's the last nal unit we have in non-bytestream mode, we can
-       * assume it's the end of an access-unit
-       *
-       * FIXME: We need to wait until the next packet or EOS to
-       * actually payload the NAL so we can know if the current NAL is
-       * the last one of an access unit or not if we are in bytestream mode
-       */
-      if ((rtph265pay->alignment == GST_H265_ALIGNMENT_AU || buffer == NULL) &&
-          i == nal_queue->len - 1)
-        end_of_au = TRUE;
-      paybuf = gst_adapter_take_buffer (rtph265pay->adapter, size);
-      g_assert (paybuf);
-
-      /* put the data in one or more RTP packets */
-      ret =
-          gst_rtp_h265_pay_payload_nal (basepayload, paybuf, dts, pts,
-          end_of_au);
-      if (ret != GST_FLOW_OK) {
-        break;
-      }
-
-      /* move to next NAL packet */
-      /* Skips the trailing zeros */
-      gst_adapter_flush (rtph265pay->adapter, nal_len - size);
-    }
-    g_array_set_size (nal_queue, 0);
-  }
-
-done:
-  if (hevc) {
-    gst_buffer_unmap (buffer, &map);
-    gst_buffer_unref (buffer);
-  } else {
-    gst_adapter_unmap (rtph265pay->adapter);
-  }
-
-  return ret;
-
-caps_rejected:
-  {
-    GST_WARNING_OBJECT (basepayload, "Could not set outcaps");
-    g_array_set_size (nal_queue, 0);
-    ret = GST_FLOW_NOT_NEGOTIATED;
-    goto done;
-  }
-}
-
-static gboolean
-gst_rtp_h265_pay_sink_event (GstRTPBasePayload * payload, GstEvent * event)
-{
-  gboolean res;
-  const GstStructure *s;
-  GstRtpH265Pay *rtph265pay = GST_RTP_H265_PAY (payload);
-
-  switch (GST_EVENT_TYPE (event)) {
-    case GST_EVENT_FLUSH_STOP:
-      gst_adapter_clear (rtph265pay->adapter);
-      break;
-    case GST_EVENT_CUSTOM_DOWNSTREAM:
-      s = gst_event_get_structure (event);
-      if (gst_structure_has_name (s, "GstForceKeyUnit")) {
-        gboolean resend_codec_data;
-
-        if (gst_structure_get_boolean (s, "all-headers",
-                &resend_codec_data) && resend_codec_data)
-          rtph265pay->send_vps_sps_pps = TRUE;
-      }
-      break;
-    case GST_EVENT_EOS:
-    {
-      /* call handle_buffer with NULL to flush last NAL from adapter
-       * in byte-stream mode
-       */
-      gst_rtp_h265_pay_handle_buffer (payload, NULL);
-      break;
-    }
-    case GST_EVENT_STREAM_START:
-      GST_DEBUG_OBJECT (rtph265pay,
-          "New stream detected => Clear VPS, SPS and PPS");
-      gst_rtp_h265_pay_clear_vps_sps_pps (rtph265pay);
-      break;
-    default:
-      break;
-  }
-
-  res = GST_RTP_BASE_PAYLOAD_CLASS (parent_class)->sink_event (payload, event);
-
-  return res;
-}
-
-static GstStateChangeReturn
-gst_rtp_h265_pay_change_state (GstElement * element, GstStateChange transition)
-{
-  GstStateChangeReturn ret;
-  GstRtpH265Pay *rtph265pay = GST_RTP_H265_PAY (element);
-
-  switch (transition) {
-    case GST_STATE_CHANGE_READY_TO_PAUSED:
-      rtph265pay->send_vps_sps_pps = FALSE;
-      gst_adapter_clear (rtph265pay->adapter);
-      break;
-    default:
-      break;
-  }
-
-  ret = GST_ELEMENT_CLASS (parent_class)->change_state (element, transition);
-
-  switch (transition) {
-    case GST_STATE_CHANGE_PAUSED_TO_READY:
-      rtph265pay->last_vps_sps_pps = -1;
-      gst_rtp_h265_pay_clear_vps_sps_pps (rtph265pay);
-      break;
-    default:
-      break;
-  }
-
-  return ret;
-}
-
-static void
-gst_rtp_h265_pay_set_property (GObject * object, guint prop_id,
-    const GValue * value, GParamSpec * pspec)
-{
-  GstRtpH265Pay *rtph265pay;
-
-  rtph265pay = GST_RTP_H265_PAY (object);
-
-  switch (prop_id) {
-    case PROP_SPROP_PARAMETER_SETS:
-      g_free (rtph265pay->sprop_parameter_sets);
-      rtph265pay->sprop_parameter_sets = g_value_dup_string (value);
-      rtph265pay->update_caps = TRUE;
-      break;
-    case PROP_CONFIG_INTERVAL:
-      rtph265pay->vps_sps_pps_interval = g_value_get_uint (value);
-      break;
-    default:
-      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
-      break;
-  }
-}
-
-static void
-gst_rtp_h265_pay_get_property (GObject * object, guint prop_id,
-    GValue * value, GParamSpec * pspec)
-{
-  GstRtpH265Pay *rtph265pay;
-
-  rtph265pay = GST_RTP_H265_PAY (object);
-
-  switch (prop_id) {
-    case PROP_SPROP_PARAMETER_SETS:
-      g_value_set_string (value, rtph265pay->sprop_parameter_sets);
-      break;
-    case PROP_CONFIG_INTERVAL:
-      g_value_set_uint (value, rtph265pay->vps_sps_pps_interval);
-      break;
-    default:
-      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
-      break;
-  }
-}
-
-gboolean
-gst_rtp_h265_pay_plugin_init (GstPlugin * plugin)
-{
-  return gst_element_register (plugin, "rtph265pay",
-      GST_RANK_SECONDARY, GST_TYPE_RTP_H265_PAY);
-}
diff --git a/gst/rtp/gstrtph265pay.h b/gst/rtp/gstrtph265pay.h
deleted file mode 100644
index 8382c5e..0000000
--- a/gst/rtp/gstrtph265pay.h
+++ /dev/null
@@ -1,82 +0,0 @@
-/* GStreamer
- * Copyright (C) <2006> Wim Taymans <wim.taymans@gmail.com>
- * Copyright (C) <2014> Jurgen Slowack <jurgenslowack@gmail.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-#ifndef __GST_RTP_H265_PAY_H__
-#define __GST_RTP_H265_PAY_H__
-
-#include <gst/gst.h>
-#include <gst/base/gstadapter.h>
-#include <gst/rtp/gstrtpbasepayload.h>
-#include <gst/codecparsers/gsth265parser.h>
-
-G_BEGIN_DECLS
-#define GST_TYPE_RTP_H265_PAY \
-  (gst_rtp_h265_pay_get_type())
-#define GST_RTP_H265_PAY(obj) \
-  (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_RTP_H265_PAY,GstRtpH265Pay))
-#define GST_RTP_H265_PAY_CLASS(klass) \
-  (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_RTP_H265_PAY,GstRtpH265PayClass))
-#define GST_IS_RTP_H265_PAY(obj) \
-  (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_RTP_H265_PAY))
-#define GST_IS_RTP_H265_PAY_CLASS(klass) \
-  (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_RTP_H265_PAY))
-typedef struct _GstRtpH265Pay GstRtpH265Pay;
-typedef struct _GstRtpH265PayClass GstRtpH265PayClass;
-
-typedef enum
-{
-  GST_H265_ALIGNMENT_UNKNOWN,
-  GST_H265_ALIGNMENT_NAL,
-  GST_H265_ALIGNMENT_AU
-} GstH265Alignment;
-
-struct _GstRtpH265Pay
-{
-  GstRTPBasePayload payload;
-
-  guint profile;
-  GPtrArray *sps, *pps, *vps;
-
-  GstH265StreamFormat stream_format;
-  GstH265Alignment alignment;
-  guint nal_length_size;
-  GArray *queue;
-
-  gchar *sprop_parameter_sets;
-  gboolean update_caps;
-
-  GstAdapter *adapter;
-
-  guint vps_sps_pps_interval;
-  gboolean send_vps_sps_pps;
-  GstClockTime last_vps_sps_pps;
-};
-
-struct _GstRtpH265PayClass
-{
-  GstRTPBasePayloadClass parent_class;
-};
-
-GType gst_rtp_h265_pay_get_type (void);
-
-gboolean gst_rtp_h265_pay_plugin_init (GstPlugin * plugin);
-
-G_END_DECLS
-#endif /* __GST_RTP_H265_PAY_H__ */
diff --git a/gst/sdi/Makefile.in b/gst/sdi/Makefile.in
index 1cad9fa..6d74196 100644
--- a/gst/sdi/Makefile.in
+++ b/gst/sdi/Makefile.in
@@ -116,16 +116,15 @@
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
 	$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
-	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gsettings.m4 \
-	$(top_srcdir)/m4/gst-fionread.m4 $(top_srcdir)/m4/gst-sdl.m4 \
-	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
-	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
-	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libgcrypt.m4 \
-	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
-	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
-	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
-	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
-	$(top_srcdir)/configure.ac
+	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gst-fionread.m4 \
+	$(top_srcdir)/m4/gst-sdl.m4 $(top_srcdir)/m4/iconv.m4 \
+	$(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \
+	$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
+	$(top_srcdir)/m4/libgcrypt.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
+	$(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \
@@ -275,6 +274,8 @@
 CLUTTER_X11_LIBS = @CLUTTER_X11_LIBS@
 CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
+CUDA_CFLAGS = @CUDA_CFLAGS@
+CUDA_LIBS = @CUDA_LIBS@
 CURL_CFLAGS = @CURL_CFLAGS@
 CURL_LIBS = @CURL_LIBS@
 CXX = @CXX@
@@ -312,6 +313,8 @@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
+EGL_CFLAGS = @EGL_CFLAGS@
+EGL_LIBS = @EGL_LIBS@
 EGREP = @EGREP@
 ERROR_CFLAGS = @ERROR_CFLAGS@
 ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
@@ -320,7 +323,6 @@
 EXIF_CFLAGS = @EXIF_CFLAGS@
 EXIF_LIBS = @EXIF_LIBS@
 FAAC_LIBS = @FAAC_LIBS@
-FAAD_IS_NEAAC = @FAAD_IS_NEAAC@
 FAAD_LIBS = @FAAD_LIBS@
 FFLAGS = @FFLAGS@
 FGREP = @FGREP@
@@ -339,8 +341,9 @@
 GIO_LIBS = @GIO_LIBS@
 GIO_UNIX_CFLAGS = @GIO_UNIX_CFLAGS@
 GIO_UNIX_LIBS = @GIO_UNIX_LIBS@
+GLES2_CFLAGS = @GLES2_CFLAGS@
+GLES2_LIBS = @GLES2_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
-GLIB_COMPILE_SCHEMAS = @GLIB_COMPILE_SCHEMAS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
@@ -357,16 +360,17 @@
 GMODULE_NO_EXPORT_LIBS = @GMODULE_NO_EXPORT_LIBS@
 GMSGFMT = @GMSGFMT@
 GMSGFMT_015 = @GMSGFMT_015@
+GNUSTL_CFLAGS = @GNUSTL_CFLAGS@
+GNUSTL_LIBS = @GNUSTL_LIBS@
 GRAPHENE_CFLAGS = @GRAPHENE_CFLAGS@
 GRAPHENE_LIBS = @GRAPHENE_LIBS@
 GREP = @GREP@
-GSETTINGS_CFLAGS = @GSETTINGS_CFLAGS@
-GSETTINGS_DISABLE_SCHEMAS_COMPILE = @GSETTINGS_DISABLE_SCHEMAS_COMPILE@
-GSETTINGS_LIBS = @GSETTINGS_LIBS@
 GSM_LIBS = @GSM_LIBS@
 GSTPB_PLUGINS_DIR = @GSTPB_PLUGINS_DIR@
 GSTPB_PREFIX = @GSTPB_PREFIX@
 GST_AGE = @GST_AGE@
+GST_ALLOCATORS_CFLAGS = @GST_ALLOCATORS_CFLAGS@
+GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
 GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
 GST_API_VERSION = @GST_API_VERSION@
 GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
@@ -392,6 +396,8 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PBUTILS_CFLAGS = @GST_PBUTILS_CFLAGS@
+GST_PBUTILS_LIBS = @GST_PBUTILS_LIBS@
 GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BAD_CFLAGS = @GST_PLUGINS_BAD_CFLAGS@
@@ -417,6 +423,8 @@
 GST_PREFIX = @GST_PREFIX@
 GST_REVISION = @GST_REVISION@
 GST_TOOLS_DIR = @GST_TOOLS_DIR@
+GST_VIDEO_CFLAGS = @GST_VIDEO_CFLAGS@
+GST_VIDEO_LIBS = @GST_VIDEO_LIBS@
 GTK3_CFLAGS = @GTK3_CFLAGS@
 GTK3_GL_CFLAGS = @GTK3_GL_CFLAGS@
 GTK3_GL_LIBS = @GTK3_GL_LIBS@
@@ -518,6 +526,7 @@
 LTLIBICONV = @LTLIBICONV@
 LTLIBINTL = @LTLIBINTL@
 LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
 MANIFEST_TOOL = @MANIFEST_TOOL@
@@ -531,8 +540,6 @@
 MODPLUG_LIBS = @MODPLUG_LIBS@
 MPEG2ENC_CFLAGS = @MPEG2ENC_CFLAGS@
 MPEG2ENC_LIBS = @MPEG2ENC_LIBS@
-MPG123_CFLAGS = @MPG123_CFLAGS@
-MPG123_LIBS = @MPG123_LIBS@
 MPLEX_CFLAGS = @MPLEX_CFLAGS@
 MPLEX_LDFLAGS = @MPLEX_LDFLAGS@
 MPLEX_LIBS = @MPLEX_LIBS@
@@ -548,6 +555,8 @@
 NETTLE_LIBS = @NETTLE_LIBS@
 NM = @NM@
 NMEDIT = @NMEDIT@
+NVENCODE_CFLAGS = @NVENCODE_CFLAGS@
+NVENCODE_LIBS = @NVENCODE_LIBS@
 OBJC = @OBJC@
 OBJCDEPMODE = @OBJCDEPMODE@
 OBJCFLAGS = @OBJCFLAGS@
@@ -605,16 +614,18 @@
 PYTHON_PLATFORM = @PYTHON_PLATFORM@
 PYTHON_PREFIX = @PYTHON_PREFIX@
 PYTHON_VERSION = @PYTHON_VERSION@
+QT_ANDROID_CFLAGS = @QT_ANDROID_CFLAGS@
+QT_ANDROID_LIBS = @QT_ANDROID_LIBS@
 QT_CFLAGS = @QT_CFLAGS@
 QT_LIBS = @QT_LIBS@
+QT_MAC_CFLAGS = @QT_MAC_CFLAGS@
+QT_MAC_LIBS = @QT_MAC_LIBS@
 QT_WAYLAND_CFLAGS = @QT_WAYLAND_CFLAGS@
 QT_WAYLAND_LIBS = @QT_WAYLAND_LIBS@
 QT_X11_CFLAGS = @QT_X11_CFLAGS@
 QT_X11_LIBS = @QT_X11_LIBS@
 RANLIB = @RANLIB@
 RCC = @RCC@
-RSVG_2_36_2_CFLAGS = @RSVG_2_36_2_CFLAGS@
-RSVG_2_36_2_LIBS = @RSVG_2_36_2_LIBS@
 RSVG_CFLAGS = @RSVG_CFLAGS@
 RSVG_LIBS = @RSVG_LIBS@
 RTMP_CFLAGS = @RTMP_CFLAGS@
@@ -666,6 +677,7 @@
 VOAACENC_LIBS = @VOAACENC_LIBS@
 VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
 VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VULKAN_LIBS = @VULKAN_LIBS@
 WARNING_CFLAGS = @WARNING_CFLAGS@
 WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
 WARNING_OBJCFLAGS = @WARNING_OBJCFLAGS@
@@ -676,6 +688,7 @@
 WAYLAND_LIBS = @WAYLAND_LIBS@
 WEBP_CFLAGS = @WEBP_CFLAGS@
 WEBP_LIBS = @WEBP_LIBS@
+WGET = @WGET@
 WILDMIDI_CFLAGS = @WILDMIDI_CFLAGS@
 WILDMIDI_LIBS = @WILDMIDI_LIBS@
 WINKS_LIBS = @WINKS_LIBS@
@@ -685,6 +698,8 @@
 X11_LIBS = @X11_LIBS@
 X265_CFLAGS = @X265_CFLAGS@
 X265_LIBS = @X265_LIBS@
+XCB_CFLAGS = @XCB_CFLAGS@
+XCB_LIBS = @XCB_LIBS@
 XCOMPOSITE_CFLAGS = @XCOMPOSITE_CFLAGS@
 XCOMPOSITE_LIBS = @XCOMPOSITE_LIBS@
 XGETTEXT = @XGETTEXT@
@@ -722,7 +737,6 @@
 docdir = @docdir@
 dvidir = @dvidir@
 exec_prefix = @exec_prefix@
-gsettingsschemadir = @gsettingsschemadir@
 host = @host@
 host_alias = @host_alias@
 host_cpu = @host_cpu@
diff --git a/gst/sdp/Makefile.in b/gst/sdp/Makefile.in
index 0e9b048..35b6ad2 100644
--- a/gst/sdp/Makefile.in
+++ b/gst/sdp/Makefile.in
@@ -116,16 +116,15 @@
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
 	$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
-	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gsettings.m4 \
-	$(top_srcdir)/m4/gst-fionread.m4 $(top_srcdir)/m4/gst-sdl.m4 \
-	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
-	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
-	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libgcrypt.m4 \
-	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
-	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
-	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
-	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
-	$(top_srcdir)/configure.ac
+	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gst-fionread.m4 \
+	$(top_srcdir)/m4/gst-sdl.m4 $(top_srcdir)/m4/iconv.m4 \
+	$(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \
+	$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
+	$(top_srcdir)/m4/libgcrypt.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
+	$(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \
@@ -276,6 +275,8 @@
 CLUTTER_X11_LIBS = @CLUTTER_X11_LIBS@
 CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
+CUDA_CFLAGS = @CUDA_CFLAGS@
+CUDA_LIBS = @CUDA_LIBS@
 CURL_CFLAGS = @CURL_CFLAGS@
 CURL_LIBS = @CURL_LIBS@
 CXX = @CXX@
@@ -313,6 +314,8 @@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
+EGL_CFLAGS = @EGL_CFLAGS@
+EGL_LIBS = @EGL_LIBS@
 EGREP = @EGREP@
 ERROR_CFLAGS = @ERROR_CFLAGS@
 ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
@@ -321,7 +324,6 @@
 EXIF_CFLAGS = @EXIF_CFLAGS@
 EXIF_LIBS = @EXIF_LIBS@
 FAAC_LIBS = @FAAC_LIBS@
-FAAD_IS_NEAAC = @FAAD_IS_NEAAC@
 FAAD_LIBS = @FAAD_LIBS@
 FFLAGS = @FFLAGS@
 FGREP = @FGREP@
@@ -340,8 +342,9 @@
 GIO_LIBS = @GIO_LIBS@
 GIO_UNIX_CFLAGS = @GIO_UNIX_CFLAGS@
 GIO_UNIX_LIBS = @GIO_UNIX_LIBS@
+GLES2_CFLAGS = @GLES2_CFLAGS@
+GLES2_LIBS = @GLES2_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
-GLIB_COMPILE_SCHEMAS = @GLIB_COMPILE_SCHEMAS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
@@ -358,16 +361,17 @@
 GMODULE_NO_EXPORT_LIBS = @GMODULE_NO_EXPORT_LIBS@
 GMSGFMT = @GMSGFMT@
 GMSGFMT_015 = @GMSGFMT_015@
+GNUSTL_CFLAGS = @GNUSTL_CFLAGS@
+GNUSTL_LIBS = @GNUSTL_LIBS@
 GRAPHENE_CFLAGS = @GRAPHENE_CFLAGS@
 GRAPHENE_LIBS = @GRAPHENE_LIBS@
 GREP = @GREP@
-GSETTINGS_CFLAGS = @GSETTINGS_CFLAGS@
-GSETTINGS_DISABLE_SCHEMAS_COMPILE = @GSETTINGS_DISABLE_SCHEMAS_COMPILE@
-GSETTINGS_LIBS = @GSETTINGS_LIBS@
 GSM_LIBS = @GSM_LIBS@
 GSTPB_PLUGINS_DIR = @GSTPB_PLUGINS_DIR@
 GSTPB_PREFIX = @GSTPB_PREFIX@
 GST_AGE = @GST_AGE@
+GST_ALLOCATORS_CFLAGS = @GST_ALLOCATORS_CFLAGS@
+GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
 GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
 GST_API_VERSION = @GST_API_VERSION@
 GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
@@ -393,6 +397,8 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PBUTILS_CFLAGS = @GST_PBUTILS_CFLAGS@
+GST_PBUTILS_LIBS = @GST_PBUTILS_LIBS@
 GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BAD_CFLAGS = @GST_PLUGINS_BAD_CFLAGS@
@@ -418,6 +424,8 @@
 GST_PREFIX = @GST_PREFIX@
 GST_REVISION = @GST_REVISION@
 GST_TOOLS_DIR = @GST_TOOLS_DIR@
+GST_VIDEO_CFLAGS = @GST_VIDEO_CFLAGS@
+GST_VIDEO_LIBS = @GST_VIDEO_LIBS@
 GTK3_CFLAGS = @GTK3_CFLAGS@
 GTK3_GL_CFLAGS = @GTK3_GL_CFLAGS@
 GTK3_GL_LIBS = @GTK3_GL_LIBS@
@@ -519,6 +527,7 @@
 LTLIBICONV = @LTLIBICONV@
 LTLIBINTL = @LTLIBINTL@
 LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
 MANIFEST_TOOL = @MANIFEST_TOOL@
@@ -532,8 +541,6 @@
 MODPLUG_LIBS = @MODPLUG_LIBS@
 MPEG2ENC_CFLAGS = @MPEG2ENC_CFLAGS@
 MPEG2ENC_LIBS = @MPEG2ENC_LIBS@
-MPG123_CFLAGS = @MPG123_CFLAGS@
-MPG123_LIBS = @MPG123_LIBS@
 MPLEX_CFLAGS = @MPLEX_CFLAGS@
 MPLEX_LDFLAGS = @MPLEX_LDFLAGS@
 MPLEX_LIBS = @MPLEX_LIBS@
@@ -549,6 +556,8 @@
 NETTLE_LIBS = @NETTLE_LIBS@
 NM = @NM@
 NMEDIT = @NMEDIT@
+NVENCODE_CFLAGS = @NVENCODE_CFLAGS@
+NVENCODE_LIBS = @NVENCODE_LIBS@
 OBJC = @OBJC@
 OBJCDEPMODE = @OBJCDEPMODE@
 OBJCFLAGS = @OBJCFLAGS@
@@ -606,16 +615,18 @@
 PYTHON_PLATFORM = @PYTHON_PLATFORM@
 PYTHON_PREFIX = @PYTHON_PREFIX@
 PYTHON_VERSION = @PYTHON_VERSION@
+QT_ANDROID_CFLAGS = @QT_ANDROID_CFLAGS@
+QT_ANDROID_LIBS = @QT_ANDROID_LIBS@
 QT_CFLAGS = @QT_CFLAGS@
 QT_LIBS = @QT_LIBS@
+QT_MAC_CFLAGS = @QT_MAC_CFLAGS@
+QT_MAC_LIBS = @QT_MAC_LIBS@
 QT_WAYLAND_CFLAGS = @QT_WAYLAND_CFLAGS@
 QT_WAYLAND_LIBS = @QT_WAYLAND_LIBS@
 QT_X11_CFLAGS = @QT_X11_CFLAGS@
 QT_X11_LIBS = @QT_X11_LIBS@
 RANLIB = @RANLIB@
 RCC = @RCC@
-RSVG_2_36_2_CFLAGS = @RSVG_2_36_2_CFLAGS@
-RSVG_2_36_2_LIBS = @RSVG_2_36_2_LIBS@
 RSVG_CFLAGS = @RSVG_CFLAGS@
 RSVG_LIBS = @RSVG_LIBS@
 RTMP_CFLAGS = @RTMP_CFLAGS@
@@ -667,6 +678,7 @@
 VOAACENC_LIBS = @VOAACENC_LIBS@
 VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
 VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VULKAN_LIBS = @VULKAN_LIBS@
 WARNING_CFLAGS = @WARNING_CFLAGS@
 WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
 WARNING_OBJCFLAGS = @WARNING_OBJCFLAGS@
@@ -677,6 +689,7 @@
 WAYLAND_LIBS = @WAYLAND_LIBS@
 WEBP_CFLAGS = @WEBP_CFLAGS@
 WEBP_LIBS = @WEBP_LIBS@
+WGET = @WGET@
 WILDMIDI_CFLAGS = @WILDMIDI_CFLAGS@
 WILDMIDI_LIBS = @WILDMIDI_LIBS@
 WINKS_LIBS = @WINKS_LIBS@
@@ -686,6 +699,8 @@
 X11_LIBS = @X11_LIBS@
 X265_CFLAGS = @X265_CFLAGS@
 X265_LIBS = @X265_LIBS@
+XCB_CFLAGS = @XCB_CFLAGS@
+XCB_LIBS = @XCB_LIBS@
 XCOMPOSITE_CFLAGS = @XCOMPOSITE_CFLAGS@
 XCOMPOSITE_LIBS = @XCOMPOSITE_LIBS@
 XGETTEXT = @XGETTEXT@
@@ -723,7 +738,6 @@
 docdir = @docdir@
 dvidir = @dvidir@
 exec_prefix = @exec_prefix@
-gsettingsschemadir = @gsettingsschemadir@
 host = @host@
 host_alias = @host_alias@
 host_cpu = @host_cpu@
diff --git a/gst/sdp/gstsdpdemux.c b/gst/sdp/gstsdpdemux.c
index 67e4afd..ae3bbe4 100644
--- a/gst/sdp/gstsdpdemux.c
+++ b/gst/sdp/gstsdpdemux.c
@@ -35,7 +35,7 @@
  * <refsect2>
  * <title>Example launch line</title>
  * |[
- * gst-launch gnomevfssrc location=http://some.server/session.sdp ! sdpdemux ! fakesink
+ * gst-launch-1.0 souphttpsrc location=http://some.server/session.sdp ! sdpdemux ! fakesink
  * ]| Establish a connection to an HTTP server that contains an SDP session description
  * that gets parsed by sdpdemux and send the raw RTP packets to a fakesink.
  * </refsect2>
@@ -94,9 +94,6 @@
 static void gst_sdp_demux_get_property (GObject * object, guint prop_id,
     GValue * value, GParamSpec * pspec);
 
-static GstCaps *gst_sdp_demux_media_to_caps (gint pt,
-    const GstSDPMedia * media);
-
 static GstStateChangeReturn gst_sdp_demux_change_state (GstElement * element,
     GstStateChange transition);
 static void gst_sdp_demux_handle_message (GstBin * bin, GstMessage * message);
@@ -396,9 +393,14 @@
   /* we must have a payload. No payload means we cannot create caps */
   /* FIXME, handle multiple formats. */
   if ((payload = gst_sdp_media_get_format (media, 0))) {
+    GstStructure *s;
+
     stream->pt = atoi (payload);
     /* convert caps */
-    stream->caps = gst_sdp_demux_media_to_caps (stream->pt, media);
+    stream->caps = gst_sdp_media_get_caps_from_media (media, stream->pt);
+
+    s = gst_caps_get_structure (stream->caps, 0);
+    gst_structure_set_name (s, "application/x-rtp");
 
     if (stream->pt >= 96) {
       /* If we have a dynamic payload type, see if we have a stream with the
@@ -482,256 +484,12 @@
   demux->numstreams = 0;
 }
 
-#define PARSE_INT(p, del, res)          \
-G_STMT_START {                          \
-  gchar *t = p;                         \
-  p = strstr (p, del);                  \
-  if (p == NULL)                        \
-    res = -1;                           \
-  else {                                \
-    *p = '\0';                          \
-    p++;                                \
-    res = atoi (t);                     \
-  }                                     \
-} G_STMT_END
-
-#define PARSE_STRING(p, del, res)       \
-G_STMT_START {                          \
-  gchar *t = p;                         \
-  p = strstr (p, del);                  \
-  if (p == NULL) {                      \
-    res = NULL;                         \
-    p = t;                              \
-  }                                     \
-  else {                                \
-    *p = '\0';                          \
-    p++;                                \
-    res = t;                            \
-  }                                     \
-} G_STMT_END
-
-#define SKIP_SPACES(p)                  \
-  while (*p && g_ascii_isspace (*p))    \
-    p++;
-
-/* rtpmap contains:
- *
- *  <payload> <encoding_name>/<clock_rate>[/<encoding_params>]
- */
-static gboolean
-gst_sdp_demux_parse_rtpmap (const gchar * rtpmap, gint * payload, gchar ** name,
-    gint * rate, gchar ** params)
-{
-  gchar *p, *t;
-
-  p = (gchar *) rtpmap;
-
-  PARSE_INT (p, " ", *payload);
-  if (*payload == -1)
-    return FALSE;
-
-  SKIP_SPACES (p);
-  if (*p == '\0')
-    return FALSE;
-
-  PARSE_STRING (p, "/", *name);
-  if (*name == NULL) {
-    GST_DEBUG ("no rate, name %s", p);
-    /* no rate, assume -1 then */
-    *name = p;
-    *rate = -1;
-    return TRUE;
-  }
-
-  t = p;
-  p = strstr (p, "/");
-  if (p == NULL) {
-    *rate = atoi (t);
-    return TRUE;
-  }
-  *p = '\0';
-  p++;
-  *rate = atoi (t);
-
-  t = p;
-  if (*p == '\0')
-    return TRUE;
-  *params = t;
-
-  return TRUE;
-}
-
-/*
- *  Mapping of caps to and from SDP fields:
- *
- *   m=<media> <UDP port> RTP/AVP <payload> 
- *   a=rtpmap:<payload> <encoding_name>/<clock_rate>[/<encoding_params>]
- *   a=fmtp:<payload> <param>[=<value>];...
- */
-static GstCaps *
-gst_sdp_demux_media_to_caps (gint pt, const GstSDPMedia * media)
-{
-  GstCaps *caps;
-  const gchar *rtpmap;
-  const gchar *fmtp;
-  gchar *name = NULL;
-  gint rate = -1;
-  gchar *params = NULL;
-  gchar *tmp;
-  GstStructure *s;
-  gint payload = 0;
-  gboolean ret;
-
-  /* get and parse rtpmap */
-  if ((rtpmap = gst_sdp_media_get_attribute_val (media, "rtpmap"))) {
-    ret = gst_sdp_demux_parse_rtpmap (rtpmap, &payload, &name, &rate, &params);
-    if (ret) {
-      if (payload != pt) {
-        /* we ignore the rtpmap if the payload type is different. */
-        g_warning ("rtpmap of wrong payload type, ignoring");
-        name = NULL;
-        rate = -1;
-        params = NULL;
-      }
-    } else {
-      /* if we failed to parse the rtpmap for a dynamic payload type, we have an
-       * error */
-      if (pt >= 96)
-        goto no_rtpmap;
-      /* else we can ignore */
-      g_warning ("error parsing rtpmap, ignoring");
-    }
-  } else {
-    /* dynamic payloads need rtpmap or we fail */
-    if (pt >= 96)
-      goto no_rtpmap;
-  }
-  /* check if we have a rate, if not, we need to look up the rate from the
-   * default rates based on the payload types. */
-  if (rate == -1) {
-    const GstRTPPayloadInfo *info;
-
-    if (GST_RTP_PAYLOAD_IS_DYNAMIC (pt)) {
-      /* dynamic types, use media and encoding_name */
-      tmp = g_ascii_strdown (media->media, -1);
-      info = gst_rtp_payload_info_for_name (tmp, name);
-      g_free (tmp);
-    } else {
-      /* static types, use payload type */
-      info = gst_rtp_payload_info_for_pt (pt);
-    }
-
-    if (info) {
-      if ((rate = info->clock_rate) == 0)
-        rate = -1;
-    }
-    /* we fail if we cannot find one */
-    if (rate == -1)
-      goto no_rate;
-  }
-
-  tmp = g_ascii_strdown (media->media, -1);
-  caps = gst_caps_new_simple ("application/x-rtp",
-      "media", G_TYPE_STRING, tmp, "payload", G_TYPE_INT, pt, NULL);
-  g_free (tmp);
-  s = gst_caps_get_structure (caps, 0);
-
-  gst_structure_set (s, "clock-rate", G_TYPE_INT, rate, NULL);
-
-  /* encoding name must be upper case */
-  if (name != NULL) {
-    tmp = g_ascii_strup (name, -1);
-    gst_structure_set (s, "encoding-name", G_TYPE_STRING, tmp, NULL);
-    g_free (tmp);
-  }
-
-  /* params must be lower case */
-  if (params != NULL) {
-    tmp = g_ascii_strdown (params, -1);
-    gst_structure_set (s, "encoding-params", G_TYPE_STRING, tmp, NULL);
-    g_free (tmp);
-  }
-
-  /* parse optional fmtp: field */
-  if ((fmtp = gst_sdp_media_get_attribute_val (media, "fmtp"))) {
-    gchar *p;
-    gint payload = 0;
-
-    p = (gchar *) fmtp;
-
-    /* p is now of the format <payload> <param>[=<value>];... */
-    PARSE_INT (p, " ", payload);
-    if (payload != -1 && payload == pt) {
-      gchar **pairs;
-      gint i;
-
-      /* <param>[=<value>] are separated with ';' */
-      pairs = g_strsplit (p, ";", 0);
-      for (i = 0; pairs[i]; i++) {
-        gchar *valpos;
-        const gchar *key, *val;
-        gint j;
-        const gchar *reserved_keys[] =
-            { "media", "payload", "clock-rate", "encoding-name",
-          "encoding-params"
-        };
-
-        /* the key may not have a '=', the value can have other '='s */
-        valpos = strstr (pairs[i], "=");
-        if (valpos) {
-          /* we have a '=' and thus a value, remove the '=' with \0 */
-          *valpos = '\0';
-          /* value is everything between '=' and ';'. FIXME, strip? */
-          val = g_strstrip (valpos + 1);
-        } else {
-          /* simple <param>;.. is translated into <param>=1;... */
-          val = "1";
-        }
-        /* strip the key of spaces, convert key to lowercase but not the value. */
-        key = g_strstrip (pairs[i]);
-
-        /* skip keys from the fmtp, which we already use ourselves for the
-         * caps. Some software is adding random things like clock-rate into
-         * the fmtp, and we would otherwise here set a string-typed clock-rate
-         * in the caps... and thus fail to create valid RTP caps
-         */
-        for (j = 0; j < G_N_ELEMENTS (reserved_keys); j++) {
-          if (g_ascii_strcasecmp (reserved_keys[j], key) == 0) {
-            key = "";
-            break;
-          }
-        }
-
-        if (strlen (key) > 1) {
-          tmp = g_ascii_strdown (key, -1);
-          gst_structure_set (s, tmp, G_TYPE_STRING, val, NULL);
-          g_free (tmp);
-        }
-      }
-      g_strfreev (pairs);
-    }
-  }
-  return caps;
-
-  /* ERRORS */
-no_rtpmap:
-  {
-    g_warning ("rtpmap type not given for dynamic payload %d", pt);
-    return NULL;
-  }
-no_rate:
-  {
-    g_warning ("rate unknown for payload type %d", pt);
-    return NULL;
-  }
-}
-
 /* this callback is called when the session manager generated a new src pad with
  * payloaded RTP packets. We simply ghost the pad here. */
 static void
 new_session_pad (GstElement * session, GstPad * pad, GstSDPDemux * demux)
 {
-  gchar *name;
+  gchar *name, *pad_name;
   GstPadTemplate *template;
   gint id, ssrc, pt;
   GList *lstream;
@@ -756,11 +514,13 @@
   /* no need for a timeout anymore now */
   g_object_set (G_OBJECT (stream->udpsrc[0]), "timeout", (guint64) 0, NULL);
 
+  pad_name = g_strdup_printf ("stream_%u", stream->id);
   /* create a new pad we will use to stream to */
   template = gst_static_pad_template_get (&rtptemplate);
-  stream->srcpad = gst_ghost_pad_new_from_template (name, pad, template);
+  stream->srcpad = gst_ghost_pad_new_from_template (pad_name, pad, template);
   gst_object_unref (template);
   g_free (name);
+  g_free (pad_name);
 
   stream->added = TRUE;
   gst_pad_set_active (stream->srcpad, TRUE);
diff --git a/gst/segmentclip/Makefile.in b/gst/segmentclip/Makefile.in
index 371ad02..7724a3e 100644
--- a/gst/segmentclip/Makefile.in
+++ b/gst/segmentclip/Makefile.in
@@ -116,16 +116,15 @@
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
 	$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
-	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gsettings.m4 \
-	$(top_srcdir)/m4/gst-fionread.m4 $(top_srcdir)/m4/gst-sdl.m4 \
-	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
-	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
-	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libgcrypt.m4 \
-	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
-	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
-	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
-	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
-	$(top_srcdir)/configure.ac
+	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gst-fionread.m4 \
+	$(top_srcdir)/m4/gst-sdl.m4 $(top_srcdir)/m4/iconv.m4 \
+	$(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \
+	$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
+	$(top_srcdir)/m4/libgcrypt.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
+	$(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \
@@ -278,6 +277,8 @@
 CLUTTER_X11_LIBS = @CLUTTER_X11_LIBS@
 CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
+CUDA_CFLAGS = @CUDA_CFLAGS@
+CUDA_LIBS = @CUDA_LIBS@
 CURL_CFLAGS = @CURL_CFLAGS@
 CURL_LIBS = @CURL_LIBS@
 CXX = @CXX@
@@ -315,6 +316,8 @@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
+EGL_CFLAGS = @EGL_CFLAGS@
+EGL_LIBS = @EGL_LIBS@
 EGREP = @EGREP@
 ERROR_CFLAGS = @ERROR_CFLAGS@
 ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
@@ -323,7 +326,6 @@
 EXIF_CFLAGS = @EXIF_CFLAGS@
 EXIF_LIBS = @EXIF_LIBS@
 FAAC_LIBS = @FAAC_LIBS@
-FAAD_IS_NEAAC = @FAAD_IS_NEAAC@
 FAAD_LIBS = @FAAD_LIBS@
 FFLAGS = @FFLAGS@
 FGREP = @FGREP@
@@ -342,8 +344,9 @@
 GIO_LIBS = @GIO_LIBS@
 GIO_UNIX_CFLAGS = @GIO_UNIX_CFLAGS@
 GIO_UNIX_LIBS = @GIO_UNIX_LIBS@
+GLES2_CFLAGS = @GLES2_CFLAGS@
+GLES2_LIBS = @GLES2_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
-GLIB_COMPILE_SCHEMAS = @GLIB_COMPILE_SCHEMAS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
@@ -360,16 +363,17 @@
 GMODULE_NO_EXPORT_LIBS = @GMODULE_NO_EXPORT_LIBS@
 GMSGFMT = @GMSGFMT@
 GMSGFMT_015 = @GMSGFMT_015@
+GNUSTL_CFLAGS = @GNUSTL_CFLAGS@
+GNUSTL_LIBS = @GNUSTL_LIBS@
 GRAPHENE_CFLAGS = @GRAPHENE_CFLAGS@
 GRAPHENE_LIBS = @GRAPHENE_LIBS@
 GREP = @GREP@
-GSETTINGS_CFLAGS = @GSETTINGS_CFLAGS@
-GSETTINGS_DISABLE_SCHEMAS_COMPILE = @GSETTINGS_DISABLE_SCHEMAS_COMPILE@
-GSETTINGS_LIBS = @GSETTINGS_LIBS@
 GSM_LIBS = @GSM_LIBS@
 GSTPB_PLUGINS_DIR = @GSTPB_PLUGINS_DIR@
 GSTPB_PREFIX = @GSTPB_PREFIX@
 GST_AGE = @GST_AGE@
+GST_ALLOCATORS_CFLAGS = @GST_ALLOCATORS_CFLAGS@
+GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
 GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
 GST_API_VERSION = @GST_API_VERSION@
 GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
@@ -395,6 +399,8 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PBUTILS_CFLAGS = @GST_PBUTILS_CFLAGS@
+GST_PBUTILS_LIBS = @GST_PBUTILS_LIBS@
 GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BAD_CFLAGS = @GST_PLUGINS_BAD_CFLAGS@
@@ -420,6 +426,8 @@
 GST_PREFIX = @GST_PREFIX@
 GST_REVISION = @GST_REVISION@
 GST_TOOLS_DIR = @GST_TOOLS_DIR@
+GST_VIDEO_CFLAGS = @GST_VIDEO_CFLAGS@
+GST_VIDEO_LIBS = @GST_VIDEO_LIBS@
 GTK3_CFLAGS = @GTK3_CFLAGS@
 GTK3_GL_CFLAGS = @GTK3_GL_CFLAGS@
 GTK3_GL_LIBS = @GTK3_GL_LIBS@
@@ -521,6 +529,7 @@
 LTLIBICONV = @LTLIBICONV@
 LTLIBINTL = @LTLIBINTL@
 LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
 MANIFEST_TOOL = @MANIFEST_TOOL@
@@ -534,8 +543,6 @@
 MODPLUG_LIBS = @MODPLUG_LIBS@
 MPEG2ENC_CFLAGS = @MPEG2ENC_CFLAGS@
 MPEG2ENC_LIBS = @MPEG2ENC_LIBS@
-MPG123_CFLAGS = @MPG123_CFLAGS@
-MPG123_LIBS = @MPG123_LIBS@
 MPLEX_CFLAGS = @MPLEX_CFLAGS@
 MPLEX_LDFLAGS = @MPLEX_LDFLAGS@
 MPLEX_LIBS = @MPLEX_LIBS@
@@ -551,6 +558,8 @@
 NETTLE_LIBS = @NETTLE_LIBS@
 NM = @NM@
 NMEDIT = @NMEDIT@
+NVENCODE_CFLAGS = @NVENCODE_CFLAGS@
+NVENCODE_LIBS = @NVENCODE_LIBS@
 OBJC = @OBJC@
 OBJCDEPMODE = @OBJCDEPMODE@
 OBJCFLAGS = @OBJCFLAGS@
@@ -608,16 +617,18 @@
 PYTHON_PLATFORM = @PYTHON_PLATFORM@
 PYTHON_PREFIX = @PYTHON_PREFIX@
 PYTHON_VERSION = @PYTHON_VERSION@
+QT_ANDROID_CFLAGS = @QT_ANDROID_CFLAGS@
+QT_ANDROID_LIBS = @QT_ANDROID_LIBS@
 QT_CFLAGS = @QT_CFLAGS@
 QT_LIBS = @QT_LIBS@
+QT_MAC_CFLAGS = @QT_MAC_CFLAGS@
+QT_MAC_LIBS = @QT_MAC_LIBS@
 QT_WAYLAND_CFLAGS = @QT_WAYLAND_CFLAGS@
 QT_WAYLAND_LIBS = @QT_WAYLAND_LIBS@
 QT_X11_CFLAGS = @QT_X11_CFLAGS@
 QT_X11_LIBS = @QT_X11_LIBS@
 RANLIB = @RANLIB@
 RCC = @RCC@
-RSVG_2_36_2_CFLAGS = @RSVG_2_36_2_CFLAGS@
-RSVG_2_36_2_LIBS = @RSVG_2_36_2_LIBS@
 RSVG_CFLAGS = @RSVG_CFLAGS@
 RSVG_LIBS = @RSVG_LIBS@
 RTMP_CFLAGS = @RTMP_CFLAGS@
@@ -669,6 +680,7 @@
 VOAACENC_LIBS = @VOAACENC_LIBS@
 VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
 VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VULKAN_LIBS = @VULKAN_LIBS@
 WARNING_CFLAGS = @WARNING_CFLAGS@
 WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
 WARNING_OBJCFLAGS = @WARNING_OBJCFLAGS@
@@ -679,6 +691,7 @@
 WAYLAND_LIBS = @WAYLAND_LIBS@
 WEBP_CFLAGS = @WEBP_CFLAGS@
 WEBP_LIBS = @WEBP_LIBS@
+WGET = @WGET@
 WILDMIDI_CFLAGS = @WILDMIDI_CFLAGS@
 WILDMIDI_LIBS = @WILDMIDI_LIBS@
 WINKS_LIBS = @WINKS_LIBS@
@@ -688,6 +701,8 @@
 X11_LIBS = @X11_LIBS@
 X265_CFLAGS = @X265_CFLAGS@
 X265_LIBS = @X265_LIBS@
+XCB_CFLAGS = @XCB_CFLAGS@
+XCB_LIBS = @XCB_LIBS@
 XCOMPOSITE_CFLAGS = @XCOMPOSITE_CFLAGS@
 XCOMPOSITE_LIBS = @XCOMPOSITE_LIBS@
 XGETTEXT = @XGETTEXT@
@@ -725,7 +740,6 @@
 docdir = @docdir@
 dvidir = @dvidir@
 exec_prefix = @exec_prefix@
-gsettingsschemadir = @gsettingsschemadir@
 host = @host@
 host_alias = @host_alias@
 host_cpu = @host_cpu@
diff --git a/gst/segmentclip/gstvideosegmentclip.c b/gst/segmentclip/gstvideosegmentclip.c
index 7430a65..0b168e4 100644
--- a/gst/segmentclip/gstvideosegmentclip.c
+++ b/gst/segmentclip/gstvideosegmentclip.c
@@ -167,8 +167,8 @@
 
   s = gst_caps_get_structure (caps, 0);
 
-  ret = gst_structure_get_fraction (s, "framerate", &fps_n, &fps_d);
-  ret = (fps_d != 0);
+  ret = gst_structure_get_fraction (s, "framerate", &fps_n, &fps_d)
+      && (fps_d != 0);
 
   if (ret) {
     GST_DEBUG_OBJECT (self, "Configured framerate %d/%d", fps_n, fps_d);
diff --git a/gst/siren/Makefile.in b/gst/siren/Makefile.in
index 6c99b97..9895ff0 100644
--- a/gst/siren/Makefile.in
+++ b/gst/siren/Makefile.in
@@ -115,16 +115,15 @@
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
 	$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
-	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gsettings.m4 \
-	$(top_srcdir)/m4/gst-fionread.m4 $(top_srcdir)/m4/gst-sdl.m4 \
-	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
-	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
-	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libgcrypt.m4 \
-	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
-	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
-	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
-	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
-	$(top_srcdir)/configure.ac
+	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gst-fionread.m4 \
+	$(top_srcdir)/m4/gst-sdl.m4 $(top_srcdir)/m4/iconv.m4 \
+	$(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \
+	$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
+	$(top_srcdir)/m4/libgcrypt.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
+	$(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
@@ -276,6 +275,8 @@
 CLUTTER_X11_LIBS = @CLUTTER_X11_LIBS@
 CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
+CUDA_CFLAGS = @CUDA_CFLAGS@
+CUDA_LIBS = @CUDA_LIBS@
 CURL_CFLAGS = @CURL_CFLAGS@
 CURL_LIBS = @CURL_LIBS@
 CXX = @CXX@
@@ -313,6 +314,8 @@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
+EGL_CFLAGS = @EGL_CFLAGS@
+EGL_LIBS = @EGL_LIBS@
 EGREP = @EGREP@
 ERROR_CFLAGS = @ERROR_CFLAGS@
 ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
@@ -321,7 +324,6 @@
 EXIF_CFLAGS = @EXIF_CFLAGS@
 EXIF_LIBS = @EXIF_LIBS@
 FAAC_LIBS = @FAAC_LIBS@
-FAAD_IS_NEAAC = @FAAD_IS_NEAAC@
 FAAD_LIBS = @FAAD_LIBS@
 FFLAGS = @FFLAGS@
 FGREP = @FGREP@
@@ -340,8 +342,9 @@
 GIO_LIBS = @GIO_LIBS@
 GIO_UNIX_CFLAGS = @GIO_UNIX_CFLAGS@
 GIO_UNIX_LIBS = @GIO_UNIX_LIBS@
+GLES2_CFLAGS = @GLES2_CFLAGS@
+GLES2_LIBS = @GLES2_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
-GLIB_COMPILE_SCHEMAS = @GLIB_COMPILE_SCHEMAS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
@@ -358,16 +361,17 @@
 GMODULE_NO_EXPORT_LIBS = @GMODULE_NO_EXPORT_LIBS@
 GMSGFMT = @GMSGFMT@
 GMSGFMT_015 = @GMSGFMT_015@
+GNUSTL_CFLAGS = @GNUSTL_CFLAGS@
+GNUSTL_LIBS = @GNUSTL_LIBS@
 GRAPHENE_CFLAGS = @GRAPHENE_CFLAGS@
 GRAPHENE_LIBS = @GRAPHENE_LIBS@
 GREP = @GREP@
-GSETTINGS_CFLAGS = @GSETTINGS_CFLAGS@
-GSETTINGS_DISABLE_SCHEMAS_COMPILE = @GSETTINGS_DISABLE_SCHEMAS_COMPILE@
-GSETTINGS_LIBS = @GSETTINGS_LIBS@
 GSM_LIBS = @GSM_LIBS@
 GSTPB_PLUGINS_DIR = @GSTPB_PLUGINS_DIR@
 GSTPB_PREFIX = @GSTPB_PREFIX@
 GST_AGE = @GST_AGE@
+GST_ALLOCATORS_CFLAGS = @GST_ALLOCATORS_CFLAGS@
+GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
 GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
 GST_API_VERSION = @GST_API_VERSION@
 GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
@@ -393,6 +397,8 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PBUTILS_CFLAGS = @GST_PBUTILS_CFLAGS@
+GST_PBUTILS_LIBS = @GST_PBUTILS_LIBS@
 GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BAD_CFLAGS = @GST_PLUGINS_BAD_CFLAGS@
@@ -418,6 +424,8 @@
 GST_PREFIX = @GST_PREFIX@
 GST_REVISION = @GST_REVISION@
 GST_TOOLS_DIR = @GST_TOOLS_DIR@
+GST_VIDEO_CFLAGS = @GST_VIDEO_CFLAGS@
+GST_VIDEO_LIBS = @GST_VIDEO_LIBS@
 GTK3_CFLAGS = @GTK3_CFLAGS@
 GTK3_GL_CFLAGS = @GTK3_GL_CFLAGS@
 GTK3_GL_LIBS = @GTK3_GL_LIBS@
@@ -519,6 +527,7 @@
 LTLIBICONV = @LTLIBICONV@
 LTLIBINTL = @LTLIBINTL@
 LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
 MANIFEST_TOOL = @MANIFEST_TOOL@
@@ -532,8 +541,6 @@
 MODPLUG_LIBS = @MODPLUG_LIBS@
 MPEG2ENC_CFLAGS = @MPEG2ENC_CFLAGS@
 MPEG2ENC_LIBS = @MPEG2ENC_LIBS@
-MPG123_CFLAGS = @MPG123_CFLAGS@
-MPG123_LIBS = @MPG123_LIBS@
 MPLEX_CFLAGS = @MPLEX_CFLAGS@
 MPLEX_LDFLAGS = @MPLEX_LDFLAGS@
 MPLEX_LIBS = @MPLEX_LIBS@
@@ -549,6 +556,8 @@
 NETTLE_LIBS = @NETTLE_LIBS@
 NM = @NM@
 NMEDIT = @NMEDIT@
+NVENCODE_CFLAGS = @NVENCODE_CFLAGS@
+NVENCODE_LIBS = @NVENCODE_LIBS@
 OBJC = @OBJC@
 OBJCDEPMODE = @OBJCDEPMODE@
 OBJCFLAGS = @OBJCFLAGS@
@@ -606,16 +615,18 @@
 PYTHON_PLATFORM = @PYTHON_PLATFORM@
 PYTHON_PREFIX = @PYTHON_PREFIX@
 PYTHON_VERSION = @PYTHON_VERSION@
+QT_ANDROID_CFLAGS = @QT_ANDROID_CFLAGS@
+QT_ANDROID_LIBS = @QT_ANDROID_LIBS@
 QT_CFLAGS = @QT_CFLAGS@
 QT_LIBS = @QT_LIBS@
+QT_MAC_CFLAGS = @QT_MAC_CFLAGS@
+QT_MAC_LIBS = @QT_MAC_LIBS@
 QT_WAYLAND_CFLAGS = @QT_WAYLAND_CFLAGS@
 QT_WAYLAND_LIBS = @QT_WAYLAND_LIBS@
 QT_X11_CFLAGS = @QT_X11_CFLAGS@
 QT_X11_LIBS = @QT_X11_LIBS@
 RANLIB = @RANLIB@
 RCC = @RCC@
-RSVG_2_36_2_CFLAGS = @RSVG_2_36_2_CFLAGS@
-RSVG_2_36_2_LIBS = @RSVG_2_36_2_LIBS@
 RSVG_CFLAGS = @RSVG_CFLAGS@
 RSVG_LIBS = @RSVG_LIBS@
 RTMP_CFLAGS = @RTMP_CFLAGS@
@@ -667,6 +678,7 @@
 VOAACENC_LIBS = @VOAACENC_LIBS@
 VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
 VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VULKAN_LIBS = @VULKAN_LIBS@
 WARNING_CFLAGS = @WARNING_CFLAGS@
 WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
 WARNING_OBJCFLAGS = @WARNING_OBJCFLAGS@
@@ -677,6 +689,7 @@
 WAYLAND_LIBS = @WAYLAND_LIBS@
 WEBP_CFLAGS = @WEBP_CFLAGS@
 WEBP_LIBS = @WEBP_LIBS@
+WGET = @WGET@
 WILDMIDI_CFLAGS = @WILDMIDI_CFLAGS@
 WILDMIDI_LIBS = @WILDMIDI_LIBS@
 WINKS_LIBS = @WINKS_LIBS@
@@ -686,6 +699,8 @@
 X11_LIBS = @X11_LIBS@
 X265_CFLAGS = @X265_CFLAGS@
 X265_LIBS = @X265_LIBS@
+XCB_CFLAGS = @XCB_CFLAGS@
+XCB_LIBS = @XCB_LIBS@
 XCOMPOSITE_CFLAGS = @XCOMPOSITE_CFLAGS@
 XCOMPOSITE_LIBS = @XCOMPOSITE_LIBS@
 XGETTEXT = @XGETTEXT@
@@ -723,7 +738,6 @@
 docdir = @docdir@
 dvidir = @dvidir@
 exec_prefix = @exec_prefix@
-gsettingsschemadir = @gsettingsschemadir@
 host = @host@
 host_alias = @host_alias@
 host_cpu = @host_cpu@
diff --git a/gst/smooth/Makefile.in b/gst/smooth/Makefile.in
index fe82fc1..ae5b44b 100644
--- a/gst/smooth/Makefile.in
+++ b/gst/smooth/Makefile.in
@@ -116,16 +116,15 @@
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
 	$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
-	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gsettings.m4 \
-	$(top_srcdir)/m4/gst-fionread.m4 $(top_srcdir)/m4/gst-sdl.m4 \
-	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
-	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
-	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libgcrypt.m4 \
-	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
-	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
-	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
-	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
-	$(top_srcdir)/configure.ac
+	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gst-fionread.m4 \
+	$(top_srcdir)/m4/gst-sdl.m4 $(top_srcdir)/m4/iconv.m4 \
+	$(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \
+	$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
+	$(top_srcdir)/m4/libgcrypt.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
+	$(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \
@@ -274,6 +273,8 @@
 CLUTTER_X11_LIBS = @CLUTTER_X11_LIBS@
 CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
+CUDA_CFLAGS = @CUDA_CFLAGS@
+CUDA_LIBS = @CUDA_LIBS@
 CURL_CFLAGS = @CURL_CFLAGS@
 CURL_LIBS = @CURL_LIBS@
 CXX = @CXX@
@@ -311,6 +312,8 @@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
+EGL_CFLAGS = @EGL_CFLAGS@
+EGL_LIBS = @EGL_LIBS@
 EGREP = @EGREP@
 ERROR_CFLAGS = @ERROR_CFLAGS@
 ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
@@ -319,7 +322,6 @@
 EXIF_CFLAGS = @EXIF_CFLAGS@
 EXIF_LIBS = @EXIF_LIBS@
 FAAC_LIBS = @FAAC_LIBS@
-FAAD_IS_NEAAC = @FAAD_IS_NEAAC@
 FAAD_LIBS = @FAAD_LIBS@
 FFLAGS = @FFLAGS@
 FGREP = @FGREP@
@@ -338,8 +340,9 @@
 GIO_LIBS = @GIO_LIBS@
 GIO_UNIX_CFLAGS = @GIO_UNIX_CFLAGS@
 GIO_UNIX_LIBS = @GIO_UNIX_LIBS@
+GLES2_CFLAGS = @GLES2_CFLAGS@
+GLES2_LIBS = @GLES2_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
-GLIB_COMPILE_SCHEMAS = @GLIB_COMPILE_SCHEMAS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
@@ -356,16 +359,17 @@
 GMODULE_NO_EXPORT_LIBS = @GMODULE_NO_EXPORT_LIBS@
 GMSGFMT = @GMSGFMT@
 GMSGFMT_015 = @GMSGFMT_015@
+GNUSTL_CFLAGS = @GNUSTL_CFLAGS@
+GNUSTL_LIBS = @GNUSTL_LIBS@
 GRAPHENE_CFLAGS = @GRAPHENE_CFLAGS@
 GRAPHENE_LIBS = @GRAPHENE_LIBS@
 GREP = @GREP@
-GSETTINGS_CFLAGS = @GSETTINGS_CFLAGS@
-GSETTINGS_DISABLE_SCHEMAS_COMPILE = @GSETTINGS_DISABLE_SCHEMAS_COMPILE@
-GSETTINGS_LIBS = @GSETTINGS_LIBS@
 GSM_LIBS = @GSM_LIBS@
 GSTPB_PLUGINS_DIR = @GSTPB_PLUGINS_DIR@
 GSTPB_PREFIX = @GSTPB_PREFIX@
 GST_AGE = @GST_AGE@
+GST_ALLOCATORS_CFLAGS = @GST_ALLOCATORS_CFLAGS@
+GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
 GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
 GST_API_VERSION = @GST_API_VERSION@
 GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
@@ -391,6 +395,8 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PBUTILS_CFLAGS = @GST_PBUTILS_CFLAGS@
+GST_PBUTILS_LIBS = @GST_PBUTILS_LIBS@
 GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BAD_CFLAGS = @GST_PLUGINS_BAD_CFLAGS@
@@ -416,6 +422,8 @@
 GST_PREFIX = @GST_PREFIX@
 GST_REVISION = @GST_REVISION@
 GST_TOOLS_DIR = @GST_TOOLS_DIR@
+GST_VIDEO_CFLAGS = @GST_VIDEO_CFLAGS@
+GST_VIDEO_LIBS = @GST_VIDEO_LIBS@
 GTK3_CFLAGS = @GTK3_CFLAGS@
 GTK3_GL_CFLAGS = @GTK3_GL_CFLAGS@
 GTK3_GL_LIBS = @GTK3_GL_LIBS@
@@ -517,6 +525,7 @@
 LTLIBICONV = @LTLIBICONV@
 LTLIBINTL = @LTLIBINTL@
 LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
 MANIFEST_TOOL = @MANIFEST_TOOL@
@@ -530,8 +539,6 @@
 MODPLUG_LIBS = @MODPLUG_LIBS@
 MPEG2ENC_CFLAGS = @MPEG2ENC_CFLAGS@
 MPEG2ENC_LIBS = @MPEG2ENC_LIBS@
-MPG123_CFLAGS = @MPG123_CFLAGS@
-MPG123_LIBS = @MPG123_LIBS@
 MPLEX_CFLAGS = @MPLEX_CFLAGS@
 MPLEX_LDFLAGS = @MPLEX_LDFLAGS@
 MPLEX_LIBS = @MPLEX_LIBS@
@@ -547,6 +554,8 @@
 NETTLE_LIBS = @NETTLE_LIBS@
 NM = @NM@
 NMEDIT = @NMEDIT@
+NVENCODE_CFLAGS = @NVENCODE_CFLAGS@
+NVENCODE_LIBS = @NVENCODE_LIBS@
 OBJC = @OBJC@
 OBJCDEPMODE = @OBJCDEPMODE@
 OBJCFLAGS = @OBJCFLAGS@
@@ -604,16 +613,18 @@
 PYTHON_PLATFORM = @PYTHON_PLATFORM@
 PYTHON_PREFIX = @PYTHON_PREFIX@
 PYTHON_VERSION = @PYTHON_VERSION@
+QT_ANDROID_CFLAGS = @QT_ANDROID_CFLAGS@
+QT_ANDROID_LIBS = @QT_ANDROID_LIBS@
 QT_CFLAGS = @QT_CFLAGS@
 QT_LIBS = @QT_LIBS@
+QT_MAC_CFLAGS = @QT_MAC_CFLAGS@
+QT_MAC_LIBS = @QT_MAC_LIBS@
 QT_WAYLAND_CFLAGS = @QT_WAYLAND_CFLAGS@
 QT_WAYLAND_LIBS = @QT_WAYLAND_LIBS@
 QT_X11_CFLAGS = @QT_X11_CFLAGS@
 QT_X11_LIBS = @QT_X11_LIBS@
 RANLIB = @RANLIB@
 RCC = @RCC@
-RSVG_2_36_2_CFLAGS = @RSVG_2_36_2_CFLAGS@
-RSVG_2_36_2_LIBS = @RSVG_2_36_2_LIBS@
 RSVG_CFLAGS = @RSVG_CFLAGS@
 RSVG_LIBS = @RSVG_LIBS@
 RTMP_CFLAGS = @RTMP_CFLAGS@
@@ -665,6 +676,7 @@
 VOAACENC_LIBS = @VOAACENC_LIBS@
 VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
 VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VULKAN_LIBS = @VULKAN_LIBS@
 WARNING_CFLAGS = @WARNING_CFLAGS@
 WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
 WARNING_OBJCFLAGS = @WARNING_OBJCFLAGS@
@@ -675,6 +687,7 @@
 WAYLAND_LIBS = @WAYLAND_LIBS@
 WEBP_CFLAGS = @WEBP_CFLAGS@
 WEBP_LIBS = @WEBP_LIBS@
+WGET = @WGET@
 WILDMIDI_CFLAGS = @WILDMIDI_CFLAGS@
 WILDMIDI_LIBS = @WILDMIDI_LIBS@
 WINKS_LIBS = @WINKS_LIBS@
@@ -684,6 +697,8 @@
 X11_LIBS = @X11_LIBS@
 X265_CFLAGS = @X265_CFLAGS@
 X265_LIBS = @X265_LIBS@
+XCB_CFLAGS = @XCB_CFLAGS@
+XCB_LIBS = @XCB_LIBS@
 XCOMPOSITE_CFLAGS = @XCOMPOSITE_CFLAGS@
 XCOMPOSITE_LIBS = @XCOMPOSITE_LIBS@
 XGETTEXT = @XGETTEXT@
@@ -721,7 +736,6 @@
 docdir = @docdir@
 dvidir = @dvidir@
 exec_prefix = @exec_prefix@
-gsettingsschemadir = @gsettingsschemadir@
 host = @host@
 host_alias = @host_alias@
 host_cpu = @host_cpu@
diff --git a/gst/speed/Makefile.in b/gst/speed/Makefile.in
index 64eec62..d34ee56 100644
--- a/gst/speed/Makefile.in
+++ b/gst/speed/Makefile.in
@@ -116,16 +116,15 @@
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
 	$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
-	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gsettings.m4 \
-	$(top_srcdir)/m4/gst-fionread.m4 $(top_srcdir)/m4/gst-sdl.m4 \
-	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
-	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
-	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libgcrypt.m4 \
-	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
-	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
-	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
-	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
-	$(top_srcdir)/configure.ac
+	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gst-fionread.m4 \
+	$(top_srcdir)/m4/gst-sdl.m4 $(top_srcdir)/m4/iconv.m4 \
+	$(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \
+	$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
+	$(top_srcdir)/m4/libgcrypt.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
+	$(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \
@@ -274,6 +273,8 @@
 CLUTTER_X11_LIBS = @CLUTTER_X11_LIBS@
 CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
+CUDA_CFLAGS = @CUDA_CFLAGS@
+CUDA_LIBS = @CUDA_LIBS@
 CURL_CFLAGS = @CURL_CFLAGS@
 CURL_LIBS = @CURL_LIBS@
 CXX = @CXX@
@@ -311,6 +312,8 @@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
+EGL_CFLAGS = @EGL_CFLAGS@
+EGL_LIBS = @EGL_LIBS@
 EGREP = @EGREP@
 ERROR_CFLAGS = @ERROR_CFLAGS@
 ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
@@ -319,7 +322,6 @@
 EXIF_CFLAGS = @EXIF_CFLAGS@
 EXIF_LIBS = @EXIF_LIBS@
 FAAC_LIBS = @FAAC_LIBS@
-FAAD_IS_NEAAC = @FAAD_IS_NEAAC@
 FAAD_LIBS = @FAAD_LIBS@
 FFLAGS = @FFLAGS@
 FGREP = @FGREP@
@@ -338,8 +340,9 @@
 GIO_LIBS = @GIO_LIBS@
 GIO_UNIX_CFLAGS = @GIO_UNIX_CFLAGS@
 GIO_UNIX_LIBS = @GIO_UNIX_LIBS@
+GLES2_CFLAGS = @GLES2_CFLAGS@
+GLES2_LIBS = @GLES2_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
-GLIB_COMPILE_SCHEMAS = @GLIB_COMPILE_SCHEMAS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
@@ -356,16 +359,17 @@
 GMODULE_NO_EXPORT_LIBS = @GMODULE_NO_EXPORT_LIBS@
 GMSGFMT = @GMSGFMT@
 GMSGFMT_015 = @GMSGFMT_015@
+GNUSTL_CFLAGS = @GNUSTL_CFLAGS@
+GNUSTL_LIBS = @GNUSTL_LIBS@
 GRAPHENE_CFLAGS = @GRAPHENE_CFLAGS@
 GRAPHENE_LIBS = @GRAPHENE_LIBS@
 GREP = @GREP@
-GSETTINGS_CFLAGS = @GSETTINGS_CFLAGS@
-GSETTINGS_DISABLE_SCHEMAS_COMPILE = @GSETTINGS_DISABLE_SCHEMAS_COMPILE@
-GSETTINGS_LIBS = @GSETTINGS_LIBS@
 GSM_LIBS = @GSM_LIBS@
 GSTPB_PLUGINS_DIR = @GSTPB_PLUGINS_DIR@
 GSTPB_PREFIX = @GSTPB_PREFIX@
 GST_AGE = @GST_AGE@
+GST_ALLOCATORS_CFLAGS = @GST_ALLOCATORS_CFLAGS@
+GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
 GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
 GST_API_VERSION = @GST_API_VERSION@
 GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
@@ -391,6 +395,8 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PBUTILS_CFLAGS = @GST_PBUTILS_CFLAGS@
+GST_PBUTILS_LIBS = @GST_PBUTILS_LIBS@
 GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BAD_CFLAGS = @GST_PLUGINS_BAD_CFLAGS@
@@ -416,6 +422,8 @@
 GST_PREFIX = @GST_PREFIX@
 GST_REVISION = @GST_REVISION@
 GST_TOOLS_DIR = @GST_TOOLS_DIR@
+GST_VIDEO_CFLAGS = @GST_VIDEO_CFLAGS@
+GST_VIDEO_LIBS = @GST_VIDEO_LIBS@
 GTK3_CFLAGS = @GTK3_CFLAGS@
 GTK3_GL_CFLAGS = @GTK3_GL_CFLAGS@
 GTK3_GL_LIBS = @GTK3_GL_LIBS@
@@ -517,6 +525,7 @@
 LTLIBICONV = @LTLIBICONV@
 LTLIBINTL = @LTLIBINTL@
 LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
 MANIFEST_TOOL = @MANIFEST_TOOL@
@@ -530,8 +539,6 @@
 MODPLUG_LIBS = @MODPLUG_LIBS@
 MPEG2ENC_CFLAGS = @MPEG2ENC_CFLAGS@
 MPEG2ENC_LIBS = @MPEG2ENC_LIBS@
-MPG123_CFLAGS = @MPG123_CFLAGS@
-MPG123_LIBS = @MPG123_LIBS@
 MPLEX_CFLAGS = @MPLEX_CFLAGS@
 MPLEX_LDFLAGS = @MPLEX_LDFLAGS@
 MPLEX_LIBS = @MPLEX_LIBS@
@@ -547,6 +554,8 @@
 NETTLE_LIBS = @NETTLE_LIBS@
 NM = @NM@
 NMEDIT = @NMEDIT@
+NVENCODE_CFLAGS = @NVENCODE_CFLAGS@
+NVENCODE_LIBS = @NVENCODE_LIBS@
 OBJC = @OBJC@
 OBJCDEPMODE = @OBJCDEPMODE@
 OBJCFLAGS = @OBJCFLAGS@
@@ -604,16 +613,18 @@
 PYTHON_PLATFORM = @PYTHON_PLATFORM@
 PYTHON_PREFIX = @PYTHON_PREFIX@
 PYTHON_VERSION = @PYTHON_VERSION@
+QT_ANDROID_CFLAGS = @QT_ANDROID_CFLAGS@
+QT_ANDROID_LIBS = @QT_ANDROID_LIBS@
 QT_CFLAGS = @QT_CFLAGS@
 QT_LIBS = @QT_LIBS@
+QT_MAC_CFLAGS = @QT_MAC_CFLAGS@
+QT_MAC_LIBS = @QT_MAC_LIBS@
 QT_WAYLAND_CFLAGS = @QT_WAYLAND_CFLAGS@
 QT_WAYLAND_LIBS = @QT_WAYLAND_LIBS@
 QT_X11_CFLAGS = @QT_X11_CFLAGS@
 QT_X11_LIBS = @QT_X11_LIBS@
 RANLIB = @RANLIB@
 RCC = @RCC@
-RSVG_2_36_2_CFLAGS = @RSVG_2_36_2_CFLAGS@
-RSVG_2_36_2_LIBS = @RSVG_2_36_2_LIBS@
 RSVG_CFLAGS = @RSVG_CFLAGS@
 RSVG_LIBS = @RSVG_LIBS@
 RTMP_CFLAGS = @RTMP_CFLAGS@
@@ -665,6 +676,7 @@
 VOAACENC_LIBS = @VOAACENC_LIBS@
 VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
 VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VULKAN_LIBS = @VULKAN_LIBS@
 WARNING_CFLAGS = @WARNING_CFLAGS@
 WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
 WARNING_OBJCFLAGS = @WARNING_OBJCFLAGS@
@@ -675,6 +687,7 @@
 WAYLAND_LIBS = @WAYLAND_LIBS@
 WEBP_CFLAGS = @WEBP_CFLAGS@
 WEBP_LIBS = @WEBP_LIBS@
+WGET = @WGET@
 WILDMIDI_CFLAGS = @WILDMIDI_CFLAGS@
 WILDMIDI_LIBS = @WILDMIDI_LIBS@
 WINKS_LIBS = @WINKS_LIBS@
@@ -684,6 +697,8 @@
 X11_LIBS = @X11_LIBS@
 X265_CFLAGS = @X265_CFLAGS@
 X265_LIBS = @X265_LIBS@
+XCB_CFLAGS = @XCB_CFLAGS@
+XCB_LIBS = @XCB_LIBS@
 XCOMPOSITE_CFLAGS = @XCOMPOSITE_CFLAGS@
 XCOMPOSITE_LIBS = @XCOMPOSITE_LIBS@
 XGETTEXT = @XGETTEXT@
@@ -721,7 +736,6 @@
 docdir = @docdir@
 dvidir = @dvidir@
 exec_prefix = @exec_prefix@
-gsettingsschemadir = @gsettingsschemadir@
 host = @host@
 host_alias = @host_alias@
 host_cpu = @host_cpu@
diff --git a/gst/speed/gstspeed.c b/gst/speed/gstspeed.c
index 9fcdad3..c0f9198 100644
--- a/gst/speed/gstspeed.c
+++ b/gst/speed/gstspeed.c
@@ -31,7 +31,7 @@
  * <refsect2>
  * <title>Example launch line</title>
  * |[
- * gst-launch filesrc location=test.ogg ! decodebin ! audioconvert ! speed speed=1.5 ! audioconvert ! audioresample ! autoaudiosink
+ * gst-launch-1.0 filesrc location=test.ogg ! decodebin ! audioconvert ! speed speed=1.5 ! audioconvert ! audioresample ! autoaudiosink
  * ]| Plays an .ogg file at 1.5x speed.
  * </refsect2>
  */
diff --git a/gst/stereo/Makefile.in b/gst/stereo/Makefile.in
index ace080c..5b43886 100644
--- a/gst/stereo/Makefile.in
+++ b/gst/stereo/Makefile.in
@@ -116,16 +116,15 @@
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
 	$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
-	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gsettings.m4 \
-	$(top_srcdir)/m4/gst-fionread.m4 $(top_srcdir)/m4/gst-sdl.m4 \
-	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
-	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
-	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libgcrypt.m4 \
-	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
-	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
-	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
-	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
-	$(top_srcdir)/configure.ac
+	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gst-fionread.m4 \
+	$(top_srcdir)/m4/gst-sdl.m4 $(top_srcdir)/m4/iconv.m4 \
+	$(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \
+	$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
+	$(top_srcdir)/m4/libgcrypt.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
+	$(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \
@@ -274,6 +273,8 @@
 CLUTTER_X11_LIBS = @CLUTTER_X11_LIBS@
 CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
+CUDA_CFLAGS = @CUDA_CFLAGS@
+CUDA_LIBS = @CUDA_LIBS@
 CURL_CFLAGS = @CURL_CFLAGS@
 CURL_LIBS = @CURL_LIBS@
 CXX = @CXX@
@@ -311,6 +312,8 @@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
+EGL_CFLAGS = @EGL_CFLAGS@
+EGL_LIBS = @EGL_LIBS@
 EGREP = @EGREP@
 ERROR_CFLAGS = @ERROR_CFLAGS@
 ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
@@ -319,7 +322,6 @@
 EXIF_CFLAGS = @EXIF_CFLAGS@
 EXIF_LIBS = @EXIF_LIBS@
 FAAC_LIBS = @FAAC_LIBS@
-FAAD_IS_NEAAC = @FAAD_IS_NEAAC@
 FAAD_LIBS = @FAAD_LIBS@
 FFLAGS = @FFLAGS@
 FGREP = @FGREP@
@@ -338,8 +340,9 @@
 GIO_LIBS = @GIO_LIBS@
 GIO_UNIX_CFLAGS = @GIO_UNIX_CFLAGS@
 GIO_UNIX_LIBS = @GIO_UNIX_LIBS@
+GLES2_CFLAGS = @GLES2_CFLAGS@
+GLES2_LIBS = @GLES2_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
-GLIB_COMPILE_SCHEMAS = @GLIB_COMPILE_SCHEMAS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
@@ -356,16 +359,17 @@
 GMODULE_NO_EXPORT_LIBS = @GMODULE_NO_EXPORT_LIBS@
 GMSGFMT = @GMSGFMT@
 GMSGFMT_015 = @GMSGFMT_015@
+GNUSTL_CFLAGS = @GNUSTL_CFLAGS@
+GNUSTL_LIBS = @GNUSTL_LIBS@
 GRAPHENE_CFLAGS = @GRAPHENE_CFLAGS@
 GRAPHENE_LIBS = @GRAPHENE_LIBS@
 GREP = @GREP@
-GSETTINGS_CFLAGS = @GSETTINGS_CFLAGS@
-GSETTINGS_DISABLE_SCHEMAS_COMPILE = @GSETTINGS_DISABLE_SCHEMAS_COMPILE@
-GSETTINGS_LIBS = @GSETTINGS_LIBS@
 GSM_LIBS = @GSM_LIBS@
 GSTPB_PLUGINS_DIR = @GSTPB_PLUGINS_DIR@
 GSTPB_PREFIX = @GSTPB_PREFIX@
 GST_AGE = @GST_AGE@
+GST_ALLOCATORS_CFLAGS = @GST_ALLOCATORS_CFLAGS@
+GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
 GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
 GST_API_VERSION = @GST_API_VERSION@
 GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
@@ -391,6 +395,8 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PBUTILS_CFLAGS = @GST_PBUTILS_CFLAGS@
+GST_PBUTILS_LIBS = @GST_PBUTILS_LIBS@
 GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BAD_CFLAGS = @GST_PLUGINS_BAD_CFLAGS@
@@ -416,6 +422,8 @@
 GST_PREFIX = @GST_PREFIX@
 GST_REVISION = @GST_REVISION@
 GST_TOOLS_DIR = @GST_TOOLS_DIR@
+GST_VIDEO_CFLAGS = @GST_VIDEO_CFLAGS@
+GST_VIDEO_LIBS = @GST_VIDEO_LIBS@
 GTK3_CFLAGS = @GTK3_CFLAGS@
 GTK3_GL_CFLAGS = @GTK3_GL_CFLAGS@
 GTK3_GL_LIBS = @GTK3_GL_LIBS@
@@ -517,6 +525,7 @@
 LTLIBICONV = @LTLIBICONV@
 LTLIBINTL = @LTLIBINTL@
 LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
 MANIFEST_TOOL = @MANIFEST_TOOL@
@@ -530,8 +539,6 @@
 MODPLUG_LIBS = @MODPLUG_LIBS@
 MPEG2ENC_CFLAGS = @MPEG2ENC_CFLAGS@
 MPEG2ENC_LIBS = @MPEG2ENC_LIBS@
-MPG123_CFLAGS = @MPG123_CFLAGS@
-MPG123_LIBS = @MPG123_LIBS@
 MPLEX_CFLAGS = @MPLEX_CFLAGS@
 MPLEX_LDFLAGS = @MPLEX_LDFLAGS@
 MPLEX_LIBS = @MPLEX_LIBS@
@@ -547,6 +554,8 @@
 NETTLE_LIBS = @NETTLE_LIBS@
 NM = @NM@
 NMEDIT = @NMEDIT@
+NVENCODE_CFLAGS = @NVENCODE_CFLAGS@
+NVENCODE_LIBS = @NVENCODE_LIBS@
 OBJC = @OBJC@
 OBJCDEPMODE = @OBJCDEPMODE@
 OBJCFLAGS = @OBJCFLAGS@
@@ -604,16 +613,18 @@
 PYTHON_PLATFORM = @PYTHON_PLATFORM@
 PYTHON_PREFIX = @PYTHON_PREFIX@
 PYTHON_VERSION = @PYTHON_VERSION@
+QT_ANDROID_CFLAGS = @QT_ANDROID_CFLAGS@
+QT_ANDROID_LIBS = @QT_ANDROID_LIBS@
 QT_CFLAGS = @QT_CFLAGS@
 QT_LIBS = @QT_LIBS@
+QT_MAC_CFLAGS = @QT_MAC_CFLAGS@
+QT_MAC_LIBS = @QT_MAC_LIBS@
 QT_WAYLAND_CFLAGS = @QT_WAYLAND_CFLAGS@
 QT_WAYLAND_LIBS = @QT_WAYLAND_LIBS@
 QT_X11_CFLAGS = @QT_X11_CFLAGS@
 QT_X11_LIBS = @QT_X11_LIBS@
 RANLIB = @RANLIB@
 RCC = @RCC@
-RSVG_2_36_2_CFLAGS = @RSVG_2_36_2_CFLAGS@
-RSVG_2_36_2_LIBS = @RSVG_2_36_2_LIBS@
 RSVG_CFLAGS = @RSVG_CFLAGS@
 RSVG_LIBS = @RSVG_LIBS@
 RTMP_CFLAGS = @RTMP_CFLAGS@
@@ -665,6 +676,7 @@
 VOAACENC_LIBS = @VOAACENC_LIBS@
 VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
 VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VULKAN_LIBS = @VULKAN_LIBS@
 WARNING_CFLAGS = @WARNING_CFLAGS@
 WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
 WARNING_OBJCFLAGS = @WARNING_OBJCFLAGS@
@@ -675,6 +687,7 @@
 WAYLAND_LIBS = @WAYLAND_LIBS@
 WEBP_CFLAGS = @WEBP_CFLAGS@
 WEBP_LIBS = @WEBP_LIBS@
+WGET = @WGET@
 WILDMIDI_CFLAGS = @WILDMIDI_CFLAGS@
 WILDMIDI_LIBS = @WILDMIDI_LIBS@
 WINKS_LIBS = @WINKS_LIBS@
@@ -684,6 +697,8 @@
 X11_LIBS = @X11_LIBS@
 X265_CFLAGS = @X265_CFLAGS@
 X265_LIBS = @X265_LIBS@
+XCB_CFLAGS = @XCB_CFLAGS@
+XCB_LIBS = @XCB_LIBS@
 XCOMPOSITE_CFLAGS = @XCOMPOSITE_CFLAGS@
 XCOMPOSITE_LIBS = @XCOMPOSITE_LIBS@
 XGETTEXT = @XGETTEXT@
@@ -721,7 +736,6 @@
 docdir = @docdir@
 dvidir = @dvidir@
 exec_prefix = @exec_prefix@
-gsettingsschemadir = @gsettingsschemadir@
 host = @host@
 host_alias = @host_alias@
 host_cpu = @host_cpu@
diff --git a/gst/stereo/gststereo.c b/gst/stereo/gststereo.c
index ebadf9a..f7e013b 100644
--- a/gst/stereo/gststereo.c
+++ b/gst/stereo/gststereo.c
@@ -29,7 +29,7 @@
  * <refsect2>
  * <title>Example pipelines</title>
  * |[
- * gst-launch -v filesrc location=sine.ogg ! oggdemux ! vorbisdec ! audioconvert ! stereo ! audioconvert ! audioresample ! alsasink
+ * gst-launch-1.0 -v filesrc location=sine.ogg ! oggdemux ! vorbisdec ! audioconvert ! stereo ! audioconvert ! audioresample ! alsasink
  * ]| Play an Ogg/Vorbis file.
  * </refsect2>
  */
diff --git a/gst/subenc/Makefile.in b/gst/subenc/Makefile.in
index c0d52ef..551805d 100644
--- a/gst/subenc/Makefile.in
+++ b/gst/subenc/Makefile.in
@@ -116,16 +116,15 @@
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
 	$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
-	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gsettings.m4 \
-	$(top_srcdir)/m4/gst-fionread.m4 $(top_srcdir)/m4/gst-sdl.m4 \
-	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
-	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
-	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libgcrypt.m4 \
-	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
-	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
-	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
-	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
-	$(top_srcdir)/configure.ac
+	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gst-fionread.m4 \
+	$(top_srcdir)/m4/gst-sdl.m4 $(top_srcdir)/m4/iconv.m4 \
+	$(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \
+	$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
+	$(top_srcdir)/m4/libgcrypt.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
+	$(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \
@@ -274,6 +273,8 @@
 CLUTTER_X11_LIBS = @CLUTTER_X11_LIBS@
 CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
+CUDA_CFLAGS = @CUDA_CFLAGS@
+CUDA_LIBS = @CUDA_LIBS@
 CURL_CFLAGS = @CURL_CFLAGS@
 CURL_LIBS = @CURL_LIBS@
 CXX = @CXX@
@@ -311,6 +312,8 @@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
+EGL_CFLAGS = @EGL_CFLAGS@
+EGL_LIBS = @EGL_LIBS@
 EGREP = @EGREP@
 ERROR_CFLAGS = @ERROR_CFLAGS@
 ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
@@ -319,7 +322,6 @@
 EXIF_CFLAGS = @EXIF_CFLAGS@
 EXIF_LIBS = @EXIF_LIBS@
 FAAC_LIBS = @FAAC_LIBS@
-FAAD_IS_NEAAC = @FAAD_IS_NEAAC@
 FAAD_LIBS = @FAAD_LIBS@
 FFLAGS = @FFLAGS@
 FGREP = @FGREP@
@@ -338,8 +340,9 @@
 GIO_LIBS = @GIO_LIBS@
 GIO_UNIX_CFLAGS = @GIO_UNIX_CFLAGS@
 GIO_UNIX_LIBS = @GIO_UNIX_LIBS@
+GLES2_CFLAGS = @GLES2_CFLAGS@
+GLES2_LIBS = @GLES2_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
-GLIB_COMPILE_SCHEMAS = @GLIB_COMPILE_SCHEMAS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
@@ -356,16 +359,17 @@
 GMODULE_NO_EXPORT_LIBS = @GMODULE_NO_EXPORT_LIBS@
 GMSGFMT = @GMSGFMT@
 GMSGFMT_015 = @GMSGFMT_015@
+GNUSTL_CFLAGS = @GNUSTL_CFLAGS@
+GNUSTL_LIBS = @GNUSTL_LIBS@
 GRAPHENE_CFLAGS = @GRAPHENE_CFLAGS@
 GRAPHENE_LIBS = @GRAPHENE_LIBS@
 GREP = @GREP@
-GSETTINGS_CFLAGS = @GSETTINGS_CFLAGS@
-GSETTINGS_DISABLE_SCHEMAS_COMPILE = @GSETTINGS_DISABLE_SCHEMAS_COMPILE@
-GSETTINGS_LIBS = @GSETTINGS_LIBS@
 GSM_LIBS = @GSM_LIBS@
 GSTPB_PLUGINS_DIR = @GSTPB_PLUGINS_DIR@
 GSTPB_PREFIX = @GSTPB_PREFIX@
 GST_AGE = @GST_AGE@
+GST_ALLOCATORS_CFLAGS = @GST_ALLOCATORS_CFLAGS@
+GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
 GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
 GST_API_VERSION = @GST_API_VERSION@
 GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
@@ -391,6 +395,8 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PBUTILS_CFLAGS = @GST_PBUTILS_CFLAGS@
+GST_PBUTILS_LIBS = @GST_PBUTILS_LIBS@
 GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BAD_CFLAGS = @GST_PLUGINS_BAD_CFLAGS@
@@ -416,6 +422,8 @@
 GST_PREFIX = @GST_PREFIX@
 GST_REVISION = @GST_REVISION@
 GST_TOOLS_DIR = @GST_TOOLS_DIR@
+GST_VIDEO_CFLAGS = @GST_VIDEO_CFLAGS@
+GST_VIDEO_LIBS = @GST_VIDEO_LIBS@
 GTK3_CFLAGS = @GTK3_CFLAGS@
 GTK3_GL_CFLAGS = @GTK3_GL_CFLAGS@
 GTK3_GL_LIBS = @GTK3_GL_LIBS@
@@ -517,6 +525,7 @@
 LTLIBICONV = @LTLIBICONV@
 LTLIBINTL = @LTLIBINTL@
 LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
 MANIFEST_TOOL = @MANIFEST_TOOL@
@@ -530,8 +539,6 @@
 MODPLUG_LIBS = @MODPLUG_LIBS@
 MPEG2ENC_CFLAGS = @MPEG2ENC_CFLAGS@
 MPEG2ENC_LIBS = @MPEG2ENC_LIBS@
-MPG123_CFLAGS = @MPG123_CFLAGS@
-MPG123_LIBS = @MPG123_LIBS@
 MPLEX_CFLAGS = @MPLEX_CFLAGS@
 MPLEX_LDFLAGS = @MPLEX_LDFLAGS@
 MPLEX_LIBS = @MPLEX_LIBS@
@@ -547,6 +554,8 @@
 NETTLE_LIBS = @NETTLE_LIBS@
 NM = @NM@
 NMEDIT = @NMEDIT@
+NVENCODE_CFLAGS = @NVENCODE_CFLAGS@
+NVENCODE_LIBS = @NVENCODE_LIBS@
 OBJC = @OBJC@
 OBJCDEPMODE = @OBJCDEPMODE@
 OBJCFLAGS = @OBJCFLAGS@
@@ -604,16 +613,18 @@
 PYTHON_PLATFORM = @PYTHON_PLATFORM@
 PYTHON_PREFIX = @PYTHON_PREFIX@
 PYTHON_VERSION = @PYTHON_VERSION@
+QT_ANDROID_CFLAGS = @QT_ANDROID_CFLAGS@
+QT_ANDROID_LIBS = @QT_ANDROID_LIBS@
 QT_CFLAGS = @QT_CFLAGS@
 QT_LIBS = @QT_LIBS@
+QT_MAC_CFLAGS = @QT_MAC_CFLAGS@
+QT_MAC_LIBS = @QT_MAC_LIBS@
 QT_WAYLAND_CFLAGS = @QT_WAYLAND_CFLAGS@
 QT_WAYLAND_LIBS = @QT_WAYLAND_LIBS@
 QT_X11_CFLAGS = @QT_X11_CFLAGS@
 QT_X11_LIBS = @QT_X11_LIBS@
 RANLIB = @RANLIB@
 RCC = @RCC@
-RSVG_2_36_2_CFLAGS = @RSVG_2_36_2_CFLAGS@
-RSVG_2_36_2_LIBS = @RSVG_2_36_2_LIBS@
 RSVG_CFLAGS = @RSVG_CFLAGS@
 RSVG_LIBS = @RSVG_LIBS@
 RTMP_CFLAGS = @RTMP_CFLAGS@
@@ -665,6 +676,7 @@
 VOAACENC_LIBS = @VOAACENC_LIBS@
 VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
 VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VULKAN_LIBS = @VULKAN_LIBS@
 WARNING_CFLAGS = @WARNING_CFLAGS@
 WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
 WARNING_OBJCFLAGS = @WARNING_OBJCFLAGS@
@@ -675,6 +687,7 @@
 WAYLAND_LIBS = @WAYLAND_LIBS@
 WEBP_CFLAGS = @WEBP_CFLAGS@
 WEBP_LIBS = @WEBP_LIBS@
+WGET = @WGET@
 WILDMIDI_CFLAGS = @WILDMIDI_CFLAGS@
 WILDMIDI_LIBS = @WILDMIDI_LIBS@
 WINKS_LIBS = @WINKS_LIBS@
@@ -684,6 +697,8 @@
 X11_LIBS = @X11_LIBS@
 X265_CFLAGS = @X265_CFLAGS@
 X265_LIBS = @X265_LIBS@
+XCB_CFLAGS = @XCB_CFLAGS@
+XCB_LIBS = @XCB_LIBS@
 XCOMPOSITE_CFLAGS = @XCOMPOSITE_CFLAGS@
 XCOMPOSITE_LIBS = @XCOMPOSITE_LIBS@
 XGETTEXT = @XGETTEXT@
@@ -721,7 +736,6 @@
 docdir = @docdir@
 dvidir = @dvidir@
 exec_prefix = @exec_prefix@
-gsettingsschemadir = @gsettingsschemadir@
 host = @host@
 host_alias = @host_alias@
 host_cpu = @host_cpu@
diff --git a/gst/tta/Makefile.in b/gst/tta/Makefile.in
index 007225d..682905d 100644
--- a/gst/tta/Makefile.in
+++ b/gst/tta/Makefile.in
@@ -116,16 +116,15 @@
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
 	$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
-	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gsettings.m4 \
-	$(top_srcdir)/m4/gst-fionread.m4 $(top_srcdir)/m4/gst-sdl.m4 \
-	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
-	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
-	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libgcrypt.m4 \
-	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
-	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
-	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
-	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
-	$(top_srcdir)/configure.ac
+	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gst-fionread.m4 \
+	$(top_srcdir)/m4/gst-sdl.m4 $(top_srcdir)/m4/iconv.m4 \
+	$(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \
+	$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
+	$(top_srcdir)/m4/libgcrypt.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
+	$(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \
@@ -275,6 +274,8 @@
 CLUTTER_X11_LIBS = @CLUTTER_X11_LIBS@
 CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
+CUDA_CFLAGS = @CUDA_CFLAGS@
+CUDA_LIBS = @CUDA_LIBS@
 CURL_CFLAGS = @CURL_CFLAGS@
 CURL_LIBS = @CURL_LIBS@
 CXX = @CXX@
@@ -312,6 +313,8 @@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
+EGL_CFLAGS = @EGL_CFLAGS@
+EGL_LIBS = @EGL_LIBS@
 EGREP = @EGREP@
 ERROR_CFLAGS = @ERROR_CFLAGS@
 ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
@@ -320,7 +323,6 @@
 EXIF_CFLAGS = @EXIF_CFLAGS@
 EXIF_LIBS = @EXIF_LIBS@
 FAAC_LIBS = @FAAC_LIBS@
-FAAD_IS_NEAAC = @FAAD_IS_NEAAC@
 FAAD_LIBS = @FAAD_LIBS@
 FFLAGS = @FFLAGS@
 FGREP = @FGREP@
@@ -339,8 +341,9 @@
 GIO_LIBS = @GIO_LIBS@
 GIO_UNIX_CFLAGS = @GIO_UNIX_CFLAGS@
 GIO_UNIX_LIBS = @GIO_UNIX_LIBS@
+GLES2_CFLAGS = @GLES2_CFLAGS@
+GLES2_LIBS = @GLES2_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
-GLIB_COMPILE_SCHEMAS = @GLIB_COMPILE_SCHEMAS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
@@ -357,16 +360,17 @@
 GMODULE_NO_EXPORT_LIBS = @GMODULE_NO_EXPORT_LIBS@
 GMSGFMT = @GMSGFMT@
 GMSGFMT_015 = @GMSGFMT_015@
+GNUSTL_CFLAGS = @GNUSTL_CFLAGS@
+GNUSTL_LIBS = @GNUSTL_LIBS@
 GRAPHENE_CFLAGS = @GRAPHENE_CFLAGS@
 GRAPHENE_LIBS = @GRAPHENE_LIBS@
 GREP = @GREP@
-GSETTINGS_CFLAGS = @GSETTINGS_CFLAGS@
-GSETTINGS_DISABLE_SCHEMAS_COMPILE = @GSETTINGS_DISABLE_SCHEMAS_COMPILE@
-GSETTINGS_LIBS = @GSETTINGS_LIBS@
 GSM_LIBS = @GSM_LIBS@
 GSTPB_PLUGINS_DIR = @GSTPB_PLUGINS_DIR@
 GSTPB_PREFIX = @GSTPB_PREFIX@
 GST_AGE = @GST_AGE@
+GST_ALLOCATORS_CFLAGS = @GST_ALLOCATORS_CFLAGS@
+GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
 GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
 GST_API_VERSION = @GST_API_VERSION@
 GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
@@ -392,6 +396,8 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PBUTILS_CFLAGS = @GST_PBUTILS_CFLAGS@
+GST_PBUTILS_LIBS = @GST_PBUTILS_LIBS@
 GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BAD_CFLAGS = @GST_PLUGINS_BAD_CFLAGS@
@@ -417,6 +423,8 @@
 GST_PREFIX = @GST_PREFIX@
 GST_REVISION = @GST_REVISION@
 GST_TOOLS_DIR = @GST_TOOLS_DIR@
+GST_VIDEO_CFLAGS = @GST_VIDEO_CFLAGS@
+GST_VIDEO_LIBS = @GST_VIDEO_LIBS@
 GTK3_CFLAGS = @GTK3_CFLAGS@
 GTK3_GL_CFLAGS = @GTK3_GL_CFLAGS@
 GTK3_GL_LIBS = @GTK3_GL_LIBS@
@@ -518,6 +526,7 @@
 LTLIBICONV = @LTLIBICONV@
 LTLIBINTL = @LTLIBINTL@
 LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
 MANIFEST_TOOL = @MANIFEST_TOOL@
@@ -531,8 +540,6 @@
 MODPLUG_LIBS = @MODPLUG_LIBS@
 MPEG2ENC_CFLAGS = @MPEG2ENC_CFLAGS@
 MPEG2ENC_LIBS = @MPEG2ENC_LIBS@
-MPG123_CFLAGS = @MPG123_CFLAGS@
-MPG123_LIBS = @MPG123_LIBS@
 MPLEX_CFLAGS = @MPLEX_CFLAGS@
 MPLEX_LDFLAGS = @MPLEX_LDFLAGS@
 MPLEX_LIBS = @MPLEX_LIBS@
@@ -548,6 +555,8 @@
 NETTLE_LIBS = @NETTLE_LIBS@
 NM = @NM@
 NMEDIT = @NMEDIT@
+NVENCODE_CFLAGS = @NVENCODE_CFLAGS@
+NVENCODE_LIBS = @NVENCODE_LIBS@
 OBJC = @OBJC@
 OBJCDEPMODE = @OBJCDEPMODE@
 OBJCFLAGS = @OBJCFLAGS@
@@ -605,16 +614,18 @@
 PYTHON_PLATFORM = @PYTHON_PLATFORM@
 PYTHON_PREFIX = @PYTHON_PREFIX@
 PYTHON_VERSION = @PYTHON_VERSION@
+QT_ANDROID_CFLAGS = @QT_ANDROID_CFLAGS@
+QT_ANDROID_LIBS = @QT_ANDROID_LIBS@
 QT_CFLAGS = @QT_CFLAGS@
 QT_LIBS = @QT_LIBS@
+QT_MAC_CFLAGS = @QT_MAC_CFLAGS@
+QT_MAC_LIBS = @QT_MAC_LIBS@
 QT_WAYLAND_CFLAGS = @QT_WAYLAND_CFLAGS@
 QT_WAYLAND_LIBS = @QT_WAYLAND_LIBS@
 QT_X11_CFLAGS = @QT_X11_CFLAGS@
 QT_X11_LIBS = @QT_X11_LIBS@
 RANLIB = @RANLIB@
 RCC = @RCC@
-RSVG_2_36_2_CFLAGS = @RSVG_2_36_2_CFLAGS@
-RSVG_2_36_2_LIBS = @RSVG_2_36_2_LIBS@
 RSVG_CFLAGS = @RSVG_CFLAGS@
 RSVG_LIBS = @RSVG_LIBS@
 RTMP_CFLAGS = @RTMP_CFLAGS@
@@ -666,6 +677,7 @@
 VOAACENC_LIBS = @VOAACENC_LIBS@
 VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
 VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VULKAN_LIBS = @VULKAN_LIBS@
 WARNING_CFLAGS = @WARNING_CFLAGS@
 WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
 WARNING_OBJCFLAGS = @WARNING_OBJCFLAGS@
@@ -676,6 +688,7 @@
 WAYLAND_LIBS = @WAYLAND_LIBS@
 WEBP_CFLAGS = @WEBP_CFLAGS@
 WEBP_LIBS = @WEBP_LIBS@
+WGET = @WGET@
 WILDMIDI_CFLAGS = @WILDMIDI_CFLAGS@
 WILDMIDI_LIBS = @WILDMIDI_LIBS@
 WINKS_LIBS = @WINKS_LIBS@
@@ -685,6 +698,8 @@
 X11_LIBS = @X11_LIBS@
 X265_CFLAGS = @X265_CFLAGS@
 X265_LIBS = @X265_LIBS@
+XCB_CFLAGS = @XCB_CFLAGS@
+XCB_LIBS = @XCB_LIBS@
 XCOMPOSITE_CFLAGS = @XCOMPOSITE_CFLAGS@
 XCOMPOSITE_LIBS = @XCOMPOSITE_LIBS@
 XGETTEXT = @XGETTEXT@
@@ -722,7 +737,6 @@
 docdir = @docdir@
 dvidir = @dvidir@
 exec_prefix = @exec_prefix@
-gsettingsschemadir = @gsettingsschemadir@
 host = @host@
 host_alias = @host_alias@
 host_cpu = @host_cpu@
diff --git a/gst/videofilters/Makefile.in b/gst/videofilters/Makefile.in
index 79c0530..714ad12 100644
--- a/gst/videofilters/Makefile.in
+++ b/gst/videofilters/Makefile.in
@@ -116,16 +116,15 @@
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
 	$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
-	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gsettings.m4 \
-	$(top_srcdir)/m4/gst-fionread.m4 $(top_srcdir)/m4/gst-sdl.m4 \
-	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
-	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
-	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libgcrypt.m4 \
-	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
-	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
-	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
-	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
-	$(top_srcdir)/configure.ac
+	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gst-fionread.m4 \
+	$(top_srcdir)/m4/gst-sdl.m4 $(top_srcdir)/m4/iconv.m4 \
+	$(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \
+	$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
+	$(top_srcdir)/m4/libgcrypt.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
+	$(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \
@@ -280,6 +279,8 @@
 CLUTTER_X11_LIBS = @CLUTTER_X11_LIBS@
 CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
+CUDA_CFLAGS = @CUDA_CFLAGS@
+CUDA_LIBS = @CUDA_LIBS@
 CURL_CFLAGS = @CURL_CFLAGS@
 CURL_LIBS = @CURL_LIBS@
 CXX = @CXX@
@@ -317,6 +318,8 @@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
+EGL_CFLAGS = @EGL_CFLAGS@
+EGL_LIBS = @EGL_LIBS@
 EGREP = @EGREP@
 ERROR_CFLAGS = @ERROR_CFLAGS@
 ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
@@ -325,7 +328,6 @@
 EXIF_CFLAGS = @EXIF_CFLAGS@
 EXIF_LIBS = @EXIF_LIBS@
 FAAC_LIBS = @FAAC_LIBS@
-FAAD_IS_NEAAC = @FAAD_IS_NEAAC@
 FAAD_LIBS = @FAAD_LIBS@
 FFLAGS = @FFLAGS@
 FGREP = @FGREP@
@@ -344,8 +346,9 @@
 GIO_LIBS = @GIO_LIBS@
 GIO_UNIX_CFLAGS = @GIO_UNIX_CFLAGS@
 GIO_UNIX_LIBS = @GIO_UNIX_LIBS@
+GLES2_CFLAGS = @GLES2_CFLAGS@
+GLES2_LIBS = @GLES2_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
-GLIB_COMPILE_SCHEMAS = @GLIB_COMPILE_SCHEMAS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
@@ -362,16 +365,17 @@
 GMODULE_NO_EXPORT_LIBS = @GMODULE_NO_EXPORT_LIBS@
 GMSGFMT = @GMSGFMT@
 GMSGFMT_015 = @GMSGFMT_015@
+GNUSTL_CFLAGS = @GNUSTL_CFLAGS@
+GNUSTL_LIBS = @GNUSTL_LIBS@
 GRAPHENE_CFLAGS = @GRAPHENE_CFLAGS@
 GRAPHENE_LIBS = @GRAPHENE_LIBS@
 GREP = @GREP@
-GSETTINGS_CFLAGS = @GSETTINGS_CFLAGS@
-GSETTINGS_DISABLE_SCHEMAS_COMPILE = @GSETTINGS_DISABLE_SCHEMAS_COMPILE@
-GSETTINGS_LIBS = @GSETTINGS_LIBS@
 GSM_LIBS = @GSM_LIBS@
 GSTPB_PLUGINS_DIR = @GSTPB_PLUGINS_DIR@
 GSTPB_PREFIX = @GSTPB_PREFIX@
 GST_AGE = @GST_AGE@
+GST_ALLOCATORS_CFLAGS = @GST_ALLOCATORS_CFLAGS@
+GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
 GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
 GST_API_VERSION = @GST_API_VERSION@
 GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
@@ -397,6 +401,8 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PBUTILS_CFLAGS = @GST_PBUTILS_CFLAGS@
+GST_PBUTILS_LIBS = @GST_PBUTILS_LIBS@
 GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BAD_CFLAGS = @GST_PLUGINS_BAD_CFLAGS@
@@ -422,6 +428,8 @@
 GST_PREFIX = @GST_PREFIX@
 GST_REVISION = @GST_REVISION@
 GST_TOOLS_DIR = @GST_TOOLS_DIR@
+GST_VIDEO_CFLAGS = @GST_VIDEO_CFLAGS@
+GST_VIDEO_LIBS = @GST_VIDEO_LIBS@
 GTK3_CFLAGS = @GTK3_CFLAGS@
 GTK3_GL_CFLAGS = @GTK3_GL_CFLAGS@
 GTK3_GL_LIBS = @GTK3_GL_LIBS@
@@ -523,6 +531,7 @@
 LTLIBICONV = @LTLIBICONV@
 LTLIBINTL = @LTLIBINTL@
 LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
 MANIFEST_TOOL = @MANIFEST_TOOL@
@@ -536,8 +545,6 @@
 MODPLUG_LIBS = @MODPLUG_LIBS@
 MPEG2ENC_CFLAGS = @MPEG2ENC_CFLAGS@
 MPEG2ENC_LIBS = @MPEG2ENC_LIBS@
-MPG123_CFLAGS = @MPG123_CFLAGS@
-MPG123_LIBS = @MPG123_LIBS@
 MPLEX_CFLAGS = @MPLEX_CFLAGS@
 MPLEX_LDFLAGS = @MPLEX_LDFLAGS@
 MPLEX_LIBS = @MPLEX_LIBS@
@@ -553,6 +560,8 @@
 NETTLE_LIBS = @NETTLE_LIBS@
 NM = @NM@
 NMEDIT = @NMEDIT@
+NVENCODE_CFLAGS = @NVENCODE_CFLAGS@
+NVENCODE_LIBS = @NVENCODE_LIBS@
 OBJC = @OBJC@
 OBJCDEPMODE = @OBJCDEPMODE@
 OBJCFLAGS = @OBJCFLAGS@
@@ -610,16 +619,18 @@
 PYTHON_PLATFORM = @PYTHON_PLATFORM@
 PYTHON_PREFIX = @PYTHON_PREFIX@
 PYTHON_VERSION = @PYTHON_VERSION@
+QT_ANDROID_CFLAGS = @QT_ANDROID_CFLAGS@
+QT_ANDROID_LIBS = @QT_ANDROID_LIBS@
 QT_CFLAGS = @QT_CFLAGS@
 QT_LIBS = @QT_LIBS@
+QT_MAC_CFLAGS = @QT_MAC_CFLAGS@
+QT_MAC_LIBS = @QT_MAC_LIBS@
 QT_WAYLAND_CFLAGS = @QT_WAYLAND_CFLAGS@
 QT_WAYLAND_LIBS = @QT_WAYLAND_LIBS@
 QT_X11_CFLAGS = @QT_X11_CFLAGS@
 QT_X11_LIBS = @QT_X11_LIBS@
 RANLIB = @RANLIB@
 RCC = @RCC@
-RSVG_2_36_2_CFLAGS = @RSVG_2_36_2_CFLAGS@
-RSVG_2_36_2_LIBS = @RSVG_2_36_2_LIBS@
 RSVG_CFLAGS = @RSVG_CFLAGS@
 RSVG_LIBS = @RSVG_LIBS@
 RTMP_CFLAGS = @RTMP_CFLAGS@
@@ -671,6 +682,7 @@
 VOAACENC_LIBS = @VOAACENC_LIBS@
 VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
 VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VULKAN_LIBS = @VULKAN_LIBS@
 WARNING_CFLAGS = @WARNING_CFLAGS@
 WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
 WARNING_OBJCFLAGS = @WARNING_OBJCFLAGS@
@@ -681,6 +693,7 @@
 WAYLAND_LIBS = @WAYLAND_LIBS@
 WEBP_CFLAGS = @WEBP_CFLAGS@
 WEBP_LIBS = @WEBP_LIBS@
+WGET = @WGET@
 WILDMIDI_CFLAGS = @WILDMIDI_CFLAGS@
 WILDMIDI_LIBS = @WILDMIDI_LIBS@
 WINKS_LIBS = @WINKS_LIBS@
@@ -690,6 +703,8 @@
 X11_LIBS = @X11_LIBS@
 X265_CFLAGS = @X265_CFLAGS@
 X265_LIBS = @X265_LIBS@
+XCB_CFLAGS = @XCB_CFLAGS@
+XCB_LIBS = @XCB_LIBS@
 XCOMPOSITE_CFLAGS = @XCOMPOSITE_CFLAGS@
 XCOMPOSITE_LIBS = @XCOMPOSITE_LIBS@
 XGETTEXT = @XGETTEXT@
@@ -727,7 +742,6 @@
 docdir = @docdir@
 dvidir = @dvidir@
 exec_prefix = @exec_prefix@
-gsettingsschemadir = @gsettingsschemadir@
 host = @host@
 host_alias = @host_alias@
 host_cpu = @host_cpu@
diff --git a/gst/videofilters/gstscenechange.c b/gst/videofilters/gstscenechange.c
index 7abfc8b..5adf3ce 100644
--- a/gst/videofilters/gstscenechange.c
+++ b/gst/videofilters/gstscenechange.c
@@ -35,7 +35,7 @@
  * <refsect2>
  * <title>Example launch line</title>
  * |[
- * gst-launch -v filesrc location=some_file.ogv ! decodebin ! 
+ * gst-launch-1.0 -v filesrc location=some_file.ogv ! decodebin !
  *   scenechange ! theoraenc ! fakesink
  * ]|
  * </refsect2>
diff --git a/gst/videofilters/gstvideodiff.c b/gst/videofilters/gstvideodiff.c
index c6cdc86..6f5b35e 100644
--- a/gst/videofilters/gstvideodiff.c
+++ b/gst/videofilters/gstvideodiff.c
@@ -24,7 +24,7 @@
  * <refsect2>
  * <title>Example launch line</title>
  * |[
- * gst-launch -v fakesrc ! videodiff ! FIXME ! fakesink
+ * gst-launch-1.0 -v fakesrc ! videodiff ! FIXME ! fakesink
  * ]|
  * FIXME Describe what the pipeline does.
  * </refsect2>
diff --git a/gst/videofilters/gstzebrastripe.c b/gst/videofilters/gstzebrastripe.c
index 0b08100..81f58b8 100644
--- a/gst/videofilters/gstzebrastripe.c
+++ b/gst/videofilters/gstzebrastripe.c
@@ -30,7 +30,7 @@
  * <refsect2>
  * <title>Example launch line</title>
  * |[
- * gst-launch -v videotestsrc ! zebrastripe ! xvimagesink
+ * gst-launch-1.0 -v videotestsrc ! zebrastripe ! xvimagesink
  * ]|
  * Marks overexposed areas of the video with zebra stripes.
  *
diff --git a/gst/videoframe_audiolevel/Makefile.am b/gst/videoframe_audiolevel/Makefile.am
new file mode 100644
index 0000000..2619729
--- /dev/null
+++ b/gst/videoframe_audiolevel/Makefile.am
@@ -0,0 +1,9 @@
+plugin_LTLIBRARIES = libgstvideoframe_audiolevel.la
+
+libgstvideoframe_audiolevel_la_SOURCES = gstvideoframe-audiolevel.c
+libgstvideoframe_audiolevel_la_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_BASE_CFLAGS) $(GST_CFLAGS)
+libgstvideoframe_audiolevel_la_LIBADD = $(GST_PLUGINS_BASE_LIBS) -lgstaudio-$(GST_API_VERSION) $(GST_BASE_LIBS) $(LIBM)
+libgstvideoframe_audiolevel_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS)
+libgstvideoframe_audiolevel_la_LIBTOOLFLAGS = $(GST_PLUGIN_LIBTOOLFLAGS)
+
+noinst_HEADERS = gstvideoframe-audiolevel.h
diff --git a/gst/liveadder/Makefile.in b/gst/videoframe_audiolevel/Makefile.in
similarity index 88%
copy from gst/liveadder/Makefile.in
copy to gst/videoframe_audiolevel/Makefile.in
index ba9e5a2..404fc7a 100644
--- a/gst/liveadder/Makefile.in
+++ b/gst/videoframe_audiolevel/Makefile.in
@@ -90,7 +90,7 @@
 build_triplet = @build@
 host_triplet = @host@
 target_triplet = @target@
-subdir = gst/liveadder
+subdir = gst/videoframe_audiolevel
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
 am__aclocal_m4_deps = $(top_srcdir)/common/m4/as-ac-expand.m4 \
 	$(top_srcdir)/common/m4/as-auto-alt.m4 \
@@ -116,16 +116,15 @@
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
 	$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
-	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gsettings.m4 \
-	$(top_srcdir)/m4/gst-fionread.m4 $(top_srcdir)/m4/gst-sdl.m4 \
-	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
-	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
-	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libgcrypt.m4 \
-	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
-	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
-	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
-	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
-	$(top_srcdir)/configure.ac
+	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gst-fionread.m4 \
+	$(top_srcdir)/m4/gst-sdl.m4 $(top_srcdir)/m4/iconv.m4 \
+	$(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \
+	$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
+	$(top_srcdir)/m4/libgcrypt.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
+	$(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \
@@ -164,18 +163,21 @@
 am__installdirs = "$(DESTDIR)$(plugindir)"
 LTLIBRARIES = $(plugin_LTLIBRARIES)
 am__DEPENDENCIES_1 =
-libgstliveadder_la_DEPENDENCIES = $(am__DEPENDENCIES_1) \
+libgstvideoframe_audiolevel_la_DEPENDENCIES = $(am__DEPENDENCIES_1) \
 	$(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1)
-am_libgstliveadder_la_OBJECTS = libgstliveadder_la-liveadder.lo
-libgstliveadder_la_OBJECTS = $(am_libgstliveadder_la_OBJECTS)
+am_libgstvideoframe_audiolevel_la_OBJECTS =  \
+	libgstvideoframe_audiolevel_la-gstvideoframe-audiolevel.lo
+libgstvideoframe_audiolevel_la_OBJECTS =  \
+	$(am_libgstvideoframe_audiolevel_la_OBJECTS)
 AM_V_lt = $(am__v_lt_@AM_V@)
 am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
 am__v_lt_0 = --silent
 am__v_lt_1 = 
-libgstliveadder_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
-	$(libgstliveadder_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link \
-	$(CCLD) $(libgstliveadder_la_CFLAGS) $(CFLAGS) \
-	$(libgstliveadder_la_LDFLAGS) $(LDFLAGS) -o $@
+libgstvideoframe_audiolevel_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
+	$(libgstvideoframe_audiolevel_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+	--mode=link $(CCLD) $(libgstvideoframe_audiolevel_la_CFLAGS) \
+	$(CFLAGS) $(libgstvideoframe_audiolevel_la_LDFLAGS) $(LDFLAGS) \
+	-o $@
 AM_V_P = $(am__v_P_@AM_V@)
 am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
 am__v_P_0 = false
@@ -210,8 +212,8 @@
 am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@)
 am__v_CCLD_0 = @echo "  CCLD    " $@;
 am__v_CCLD_1 = 
-SOURCES = $(libgstliveadder_la_SOURCES)
-DIST_SOURCES = $(libgstliveadder_la_SOURCES)
+SOURCES = $(libgstvideoframe_audiolevel_la_SOURCES)
+DIST_SOURCES = $(libgstvideoframe_audiolevel_la_SOURCES)
 am__can_run_installinfo = \
   case $$AM_UPDATE_INFO_DIR in \
     n|no|NO) false;; \
@@ -274,6 +276,8 @@
 CLUTTER_X11_LIBS = @CLUTTER_X11_LIBS@
 CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
+CUDA_CFLAGS = @CUDA_CFLAGS@
+CUDA_LIBS = @CUDA_LIBS@
 CURL_CFLAGS = @CURL_CFLAGS@
 CURL_LIBS = @CURL_LIBS@
 CXX = @CXX@
@@ -311,6 +315,8 @@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
+EGL_CFLAGS = @EGL_CFLAGS@
+EGL_LIBS = @EGL_LIBS@
 EGREP = @EGREP@
 ERROR_CFLAGS = @ERROR_CFLAGS@
 ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
@@ -319,7 +325,6 @@
 EXIF_CFLAGS = @EXIF_CFLAGS@
 EXIF_LIBS = @EXIF_LIBS@
 FAAC_LIBS = @FAAC_LIBS@
-FAAD_IS_NEAAC = @FAAD_IS_NEAAC@
 FAAD_LIBS = @FAAD_LIBS@
 FFLAGS = @FFLAGS@
 FGREP = @FGREP@
@@ -338,8 +343,9 @@
 GIO_LIBS = @GIO_LIBS@
 GIO_UNIX_CFLAGS = @GIO_UNIX_CFLAGS@
 GIO_UNIX_LIBS = @GIO_UNIX_LIBS@
+GLES2_CFLAGS = @GLES2_CFLAGS@
+GLES2_LIBS = @GLES2_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
-GLIB_COMPILE_SCHEMAS = @GLIB_COMPILE_SCHEMAS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
@@ -356,16 +362,17 @@
 GMODULE_NO_EXPORT_LIBS = @GMODULE_NO_EXPORT_LIBS@
 GMSGFMT = @GMSGFMT@
 GMSGFMT_015 = @GMSGFMT_015@
+GNUSTL_CFLAGS = @GNUSTL_CFLAGS@
+GNUSTL_LIBS = @GNUSTL_LIBS@
 GRAPHENE_CFLAGS = @GRAPHENE_CFLAGS@
 GRAPHENE_LIBS = @GRAPHENE_LIBS@
 GREP = @GREP@
-GSETTINGS_CFLAGS = @GSETTINGS_CFLAGS@
-GSETTINGS_DISABLE_SCHEMAS_COMPILE = @GSETTINGS_DISABLE_SCHEMAS_COMPILE@
-GSETTINGS_LIBS = @GSETTINGS_LIBS@
 GSM_LIBS = @GSM_LIBS@
 GSTPB_PLUGINS_DIR = @GSTPB_PLUGINS_DIR@
 GSTPB_PREFIX = @GSTPB_PREFIX@
 GST_AGE = @GST_AGE@
+GST_ALLOCATORS_CFLAGS = @GST_ALLOCATORS_CFLAGS@
+GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
 GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
 GST_API_VERSION = @GST_API_VERSION@
 GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
@@ -391,6 +398,8 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PBUTILS_CFLAGS = @GST_PBUTILS_CFLAGS@
+GST_PBUTILS_LIBS = @GST_PBUTILS_LIBS@
 GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BAD_CFLAGS = @GST_PLUGINS_BAD_CFLAGS@
@@ -416,6 +425,8 @@
 GST_PREFIX = @GST_PREFIX@
 GST_REVISION = @GST_REVISION@
 GST_TOOLS_DIR = @GST_TOOLS_DIR@
+GST_VIDEO_CFLAGS = @GST_VIDEO_CFLAGS@
+GST_VIDEO_LIBS = @GST_VIDEO_LIBS@
 GTK3_CFLAGS = @GTK3_CFLAGS@
 GTK3_GL_CFLAGS = @GTK3_GL_CFLAGS@
 GTK3_GL_LIBS = @GTK3_GL_LIBS@
@@ -517,6 +528,7 @@
 LTLIBICONV = @LTLIBICONV@
 LTLIBINTL = @LTLIBINTL@
 LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
 MANIFEST_TOOL = @MANIFEST_TOOL@
@@ -530,8 +542,6 @@
 MODPLUG_LIBS = @MODPLUG_LIBS@
 MPEG2ENC_CFLAGS = @MPEG2ENC_CFLAGS@
 MPEG2ENC_LIBS = @MPEG2ENC_LIBS@
-MPG123_CFLAGS = @MPG123_CFLAGS@
-MPG123_LIBS = @MPG123_LIBS@
 MPLEX_CFLAGS = @MPLEX_CFLAGS@
 MPLEX_LDFLAGS = @MPLEX_LDFLAGS@
 MPLEX_LIBS = @MPLEX_LIBS@
@@ -547,6 +557,8 @@
 NETTLE_LIBS = @NETTLE_LIBS@
 NM = @NM@
 NMEDIT = @NMEDIT@
+NVENCODE_CFLAGS = @NVENCODE_CFLAGS@
+NVENCODE_LIBS = @NVENCODE_LIBS@
 OBJC = @OBJC@
 OBJCDEPMODE = @OBJCDEPMODE@
 OBJCFLAGS = @OBJCFLAGS@
@@ -604,16 +616,18 @@
 PYTHON_PLATFORM = @PYTHON_PLATFORM@
 PYTHON_PREFIX = @PYTHON_PREFIX@
 PYTHON_VERSION = @PYTHON_VERSION@
+QT_ANDROID_CFLAGS = @QT_ANDROID_CFLAGS@
+QT_ANDROID_LIBS = @QT_ANDROID_LIBS@
 QT_CFLAGS = @QT_CFLAGS@
 QT_LIBS = @QT_LIBS@
+QT_MAC_CFLAGS = @QT_MAC_CFLAGS@
+QT_MAC_LIBS = @QT_MAC_LIBS@
 QT_WAYLAND_CFLAGS = @QT_WAYLAND_CFLAGS@
 QT_WAYLAND_LIBS = @QT_WAYLAND_LIBS@
 QT_X11_CFLAGS = @QT_X11_CFLAGS@
 QT_X11_LIBS = @QT_X11_LIBS@
 RANLIB = @RANLIB@
 RCC = @RCC@
-RSVG_2_36_2_CFLAGS = @RSVG_2_36_2_CFLAGS@
-RSVG_2_36_2_LIBS = @RSVG_2_36_2_LIBS@
 RSVG_CFLAGS = @RSVG_CFLAGS@
 RSVG_LIBS = @RSVG_LIBS@
 RTMP_CFLAGS = @RTMP_CFLAGS@
@@ -665,6 +679,7 @@
 VOAACENC_LIBS = @VOAACENC_LIBS@
 VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
 VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VULKAN_LIBS = @VULKAN_LIBS@
 WARNING_CFLAGS = @WARNING_CFLAGS@
 WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
 WARNING_OBJCFLAGS = @WARNING_OBJCFLAGS@
@@ -675,6 +690,7 @@
 WAYLAND_LIBS = @WAYLAND_LIBS@
 WEBP_CFLAGS = @WEBP_CFLAGS@
 WEBP_LIBS = @WEBP_LIBS@
+WGET = @WGET@
 WILDMIDI_CFLAGS = @WILDMIDI_CFLAGS@
 WILDMIDI_LIBS = @WILDMIDI_LIBS@
 WINKS_LIBS = @WINKS_LIBS@
@@ -684,6 +700,8 @@
 X11_LIBS = @X11_LIBS@
 X265_CFLAGS = @X265_CFLAGS@
 X265_LIBS = @X265_LIBS@
+XCB_CFLAGS = @XCB_CFLAGS@
+XCB_LIBS = @XCB_LIBS@
 XCOMPOSITE_CFLAGS = @XCOMPOSITE_CFLAGS@
 XCOMPOSITE_LIBS = @XCOMPOSITE_LIBS@
 XGETTEXT = @XGETTEXT@
@@ -721,7 +739,6 @@
 docdir = @docdir@
 dvidir = @dvidir@
 exec_prefix = @exec_prefix@
-gsettingsschemadir = @gsettingsschemadir@
 host = @host@
 host_alias = @host_alias@
 host_cpu = @host_cpu@
@@ -761,16 +778,13 @@
 top_builddir = @top_builddir@
 top_srcdir = @top_srcdir@
 wayland_scanner = @wayland_scanner@
-plugin_LTLIBRARIES = libgstliveadder.la
-libgstliveadder_la_SOURCES = liveadder.c
-libgstliveadder_la_CFLAGS = $(GST_PLUGINS_BAD_CFLAGS) $(GST_PLUGINS_BASE_CFLAGS) $(GST_CFLAGS)
-libgstliveadder_la_LIBADD = \
-	$(GST_PLUGINS_BASE_LIBS) -lgstaudio-@GST_API_VERSION@ \
-	$(GST_BASE_LIBS) $(GST_LIBS)
-
-libgstliveadder_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS)
-libgstliveadder_la_LIBTOOLFLAGS = $(GST_PLUGIN_LIBTOOLFLAGS)
-noinst_HEADERS = liveadder.h
+plugin_LTLIBRARIES = libgstvideoframe_audiolevel.la
+libgstvideoframe_audiolevel_la_SOURCES = gstvideoframe-audiolevel.c
+libgstvideoframe_audiolevel_la_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_BASE_CFLAGS) $(GST_CFLAGS)
+libgstvideoframe_audiolevel_la_LIBADD = $(GST_PLUGINS_BASE_LIBS) -lgstaudio-$(GST_API_VERSION) $(GST_BASE_LIBS) $(LIBM)
+libgstvideoframe_audiolevel_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS)
+libgstvideoframe_audiolevel_la_LIBTOOLFLAGS = $(GST_PLUGIN_LIBTOOLFLAGS)
+noinst_HEADERS = gstvideoframe-audiolevel.h
 all: all-am
 
 .SUFFIXES:
@@ -784,9 +798,9 @@
 	      exit 1;; \
 	  esac; \
 	done; \
-	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu gst/liveadder/Makefile'; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu gst/videoframe_audiolevel/Makefile'; \
 	$(am__cd) $(top_srcdir) && \
-	  $(AUTOMAKE) --gnu gst/liveadder/Makefile
+	  $(AUTOMAKE) --gnu gst/videoframe_audiolevel/Makefile
 Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
 	@case '$?' in \
 	  *config.status*) \
@@ -840,8 +854,8 @@
 	  rm -f $${locs}; \
 	}
 
-libgstliveadder.la: $(libgstliveadder_la_OBJECTS) $(libgstliveadder_la_DEPENDENCIES) $(EXTRA_libgstliveadder_la_DEPENDENCIES) 
-	$(AM_V_CCLD)$(libgstliveadder_la_LINK) -rpath $(plugindir) $(libgstliveadder_la_OBJECTS) $(libgstliveadder_la_LIBADD) $(LIBS)
+libgstvideoframe_audiolevel.la: $(libgstvideoframe_audiolevel_la_OBJECTS) $(libgstvideoframe_audiolevel_la_DEPENDENCIES) $(EXTRA_libgstvideoframe_audiolevel_la_DEPENDENCIES) 
+	$(AM_V_CCLD)$(libgstvideoframe_audiolevel_la_LINK) -rpath $(plugindir) $(libgstvideoframe_audiolevel_la_OBJECTS) $(libgstvideoframe_audiolevel_la_LIBADD) $(LIBS)
 
 mostlyclean-compile:
 	-rm -f *.$(OBJEXT)
@@ -849,7 +863,7 @@
 distclean-compile:
 	-rm -f *.tab.c
 
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstliveadder_la-liveadder.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstvideoframe_audiolevel_la-gstvideoframe-audiolevel.Plo@am__quote@
 
 .c.o:
 @am__fastdepCC_TRUE@	$(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\
@@ -875,12 +889,12 @@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $<
 
-libgstliveadder_la-liveadder.lo: liveadder.c
-@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstliveadder_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstliveadder_la_CFLAGS) $(CFLAGS) -MT libgstliveadder_la-liveadder.lo -MD -MP -MF $(DEPDIR)/libgstliveadder_la-liveadder.Tpo -c -o libgstliveadder_la-liveadder.lo `test -f 'liveadder.c' || echo '$(srcdir)/'`liveadder.c
-@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstliveadder_la-liveadder.Tpo $(DEPDIR)/libgstliveadder_la-liveadder.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='liveadder.c' object='libgstliveadder_la-liveadder.lo' libtool=yes @AMDEPBACKSLASH@
+libgstvideoframe_audiolevel_la-gstvideoframe-audiolevel.lo: gstvideoframe-audiolevel.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstvideoframe_audiolevel_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstvideoframe_audiolevel_la_CFLAGS) $(CFLAGS) -MT libgstvideoframe_audiolevel_la-gstvideoframe-audiolevel.lo -MD -MP -MF $(DEPDIR)/libgstvideoframe_audiolevel_la-gstvideoframe-audiolevel.Tpo -c -o libgstvideoframe_audiolevel_la-gstvideoframe-audiolevel.lo `test -f 'gstvideoframe-audiolevel.c' || echo '$(srcdir)/'`gstvideoframe-audiolevel.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstvideoframe_audiolevel_la-gstvideoframe-audiolevel.Tpo $(DEPDIR)/libgstvideoframe_audiolevel_la-gstvideoframe-audiolevel.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='gstvideoframe-audiolevel.c' object='libgstvideoframe_audiolevel_la-gstvideoframe-audiolevel.lo' libtool=yes @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstliveadder_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstliveadder_la_CFLAGS) $(CFLAGS) -c -o libgstliveadder_la-liveadder.lo `test -f 'liveadder.c' || echo '$(srcdir)/'`liveadder.c
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstvideoframe_audiolevel_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstvideoframe_audiolevel_la_CFLAGS) $(CFLAGS) -c -o libgstvideoframe_audiolevel_la-gstvideoframe-audiolevel.lo `test -f 'gstvideoframe-audiolevel.c' || echo '$(srcdir)/'`gstvideoframe-audiolevel.c
 
 mostlyclean-libtool:
 	-rm -f *.lo
diff --git a/gst/videoframe_audiolevel/gstvideoframe-audiolevel.c b/gst/videoframe_audiolevel/gstvideoframe-audiolevel.c
new file mode 100644
index 0000000..ade9966
--- /dev/null
+++ b/gst/videoframe_audiolevel/gstvideoframe-audiolevel.c
@@ -0,0 +1,789 @@
+/*
+ * GStreamer
+ * Copyright (C) 2015 Vivia Nikolaidou <vivia@toolsonair.com>
+ *
+ * Based on gstlevel.c:
+ * Copyright (C) 2000,2001,2002,2003,2005
+ *           Thomas Vander Stichele <thomas at apestaart dot org>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+/**
+ * SECTION:element-videoframe-audiolevel
+ *
+ * This element acts like a synchronized audio/video "level". It gathers
+ * all audio buffers sent between two video frames, and then sends a message
+ * that contains the RMS value of all samples for these buffers.
+ *
+ * <refsect2>
+ * <title>Example launch line</title>
+ * |[
+ * gst-launch-1.0 -m filesrc location="file.mkv" ! decodebin name=d ! "audio/x-raw" ! videoframe-audiolevel name=l ! autoaudiosink d. ! "video/x-raw" ! l. l. ! queue ! autovideosink ]|
+ * </refsect2>
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+/* FIXME 2.0: suppress warnings for deprecated API such as GValueArray
+ * with newer GLib versions (>= 2.31.0) */
+#define GLIB_DISABLE_DEPRECATION_WARNINGS
+
+#include "gstvideoframe-audiolevel.h"
+#include <math.h>
+
+#define GST_CAT_DEFAULT gst_videoframe_audiolevel_debug
+#if G_BYTE_ORDER == G_LITTLE_ENDIAN
+# define FORMATS "{ S8, S16LE, S32LE, F32LE, F64LE }"
+#else
+# define FORMATS "{ S8, S16BE, S32BE, F32BE, F64BE }"
+#endif
+GST_DEBUG_CATEGORY_STATIC (GST_CAT_DEFAULT);
+
+static GstStaticPadTemplate audio_sink_template =
+GST_STATIC_PAD_TEMPLATE ("asink",
+    GST_PAD_SINK,
+    GST_PAD_ALWAYS,
+    GST_STATIC_CAPS (GST_AUDIO_CAPS_MAKE (FORMATS))
+    );
+
+static GstStaticPadTemplate audio_src_template =
+GST_STATIC_PAD_TEMPLATE ("asrc",
+    GST_PAD_SRC,
+    GST_PAD_ALWAYS,
+    GST_STATIC_CAPS (GST_AUDIO_CAPS_MAKE (FORMATS))
+    );
+
+static GstStaticPadTemplate video_sink_template =
+GST_STATIC_PAD_TEMPLATE ("vsink",
+    GST_PAD_SINK,
+    GST_PAD_ALWAYS,
+    GST_STATIC_CAPS ("video/x-raw")
+    );
+
+static GstStaticPadTemplate video_src_template =
+GST_STATIC_PAD_TEMPLATE ("vsrc",
+    GST_PAD_SRC,
+    GST_PAD_ALWAYS,
+    GST_STATIC_CAPS ("video/x-raw")
+    );
+
+#define parent_class gst_videoframe_audiolevel_parent_class
+G_DEFINE_TYPE (GstVideoFrameAudioLevel, gst_videoframe_audiolevel,
+    GST_TYPE_ELEMENT);
+
+static GstFlowReturn gst_videoframe_audiolevel_asink_chain (GstPad * pad,
+    GstObject * parent, GstBuffer * inbuf);
+static GstFlowReturn gst_videoframe_audiolevel_vsink_chain (GstPad * pad,
+    GstObject * parent, GstBuffer * inbuf);
+static gboolean gst_videoframe_audiolevel_asink_event (GstPad * pad,
+    GstObject * parent, GstEvent * event);
+static gboolean gst_videoframe_audiolevel_vsink_event (GstPad * pad,
+    GstObject * parent, GstEvent * event);
+static GstIterator *gst_videoframe_audiolevel_iterate_internal_links (GstPad *
+    pad, GstObject * parent);
+
+static void gst_videoframe_audiolevel_finalize (GObject * gobject);
+
+static GstStateChangeReturn gst_videoframe_audiolevel_change_state (GstElement *
+    element, GstStateChange transition);
+
+static void
+gst_videoframe_audiolevel_class_init (GstVideoFrameAudioLevelClass * klass)
+{
+  GstElementClass *gstelement_class;
+  GObjectClass *gobject_class = (GObjectClass *) klass;
+
+  GST_DEBUG_CATEGORY_INIT (gst_videoframe_audiolevel_debug,
+      "videoframe-audiolevel", 0, "Synchronized audio/video level");
+
+  gstelement_class = (GstElementClass *) klass;
+
+  gst_element_class_set_static_metadata (gstelement_class,
+      "Video-frame audio level", "Filter/Analyzer/Audio",
+      "Synchronized audio/video RMS Level messenger for audio/raw",
+      "Vivia Nikolaidou <vivia@toolsonair.com>");
+
+  gobject_class->finalize = gst_videoframe_audiolevel_finalize;
+  gstelement_class->change_state = gst_videoframe_audiolevel_change_state;
+
+  gst_element_class_add_pad_template (gstelement_class,
+      gst_static_pad_template_get (&audio_src_template));
+  gst_element_class_add_pad_template (gstelement_class,
+      gst_static_pad_template_get (&audio_sink_template));
+
+  gst_element_class_add_pad_template (gstelement_class,
+      gst_static_pad_template_get (&video_src_template));
+  gst_element_class_add_pad_template (gstelement_class,
+      gst_static_pad_template_get (&video_sink_template));
+}
+
+static void
+gst_videoframe_audiolevel_init (GstVideoFrameAudioLevel * self)
+{
+  self->asinkpad =
+      gst_pad_new_from_static_template (&audio_sink_template, "asink");
+  gst_pad_set_chain_function (self->asinkpad,
+      GST_DEBUG_FUNCPTR (gst_videoframe_audiolevel_asink_chain));
+  gst_pad_set_event_function (self->asinkpad,
+      GST_DEBUG_FUNCPTR (gst_videoframe_audiolevel_asink_event));
+  gst_pad_set_iterate_internal_links_function (self->asinkpad,
+      GST_DEBUG_FUNCPTR (gst_videoframe_audiolevel_iterate_internal_links));
+  gst_element_add_pad (GST_ELEMENT (self), self->asinkpad);
+
+  self->vsinkpad =
+      gst_pad_new_from_static_template (&video_sink_template, "vsink");
+  gst_pad_set_chain_function (self->vsinkpad,
+      GST_DEBUG_FUNCPTR (gst_videoframe_audiolevel_vsink_chain));
+  gst_pad_set_event_function (self->vsinkpad,
+      GST_DEBUG_FUNCPTR (gst_videoframe_audiolevel_vsink_event));
+  gst_pad_set_iterate_internal_links_function (self->vsinkpad,
+      GST_DEBUG_FUNCPTR (gst_videoframe_audiolevel_iterate_internal_links));
+  gst_element_add_pad (GST_ELEMENT (self), self->vsinkpad);
+
+  self->asrcpad =
+      gst_pad_new_from_static_template (&audio_src_template, "asrc");
+  gst_pad_set_iterate_internal_links_function (self->asrcpad,
+      GST_DEBUG_FUNCPTR (gst_videoframe_audiolevel_iterate_internal_links));
+  gst_element_add_pad (GST_ELEMENT (self), self->asrcpad);
+
+  self->vsrcpad =
+      gst_pad_new_from_static_template (&video_src_template, "vsrc");
+  gst_pad_set_iterate_internal_links_function (self->vsrcpad,
+      GST_DEBUG_FUNCPTR (gst_videoframe_audiolevel_iterate_internal_links));
+  gst_element_add_pad (GST_ELEMENT (self), self->vsrcpad);
+
+  GST_PAD_SET_PROXY_CAPS (self->asinkpad);
+  GST_PAD_SET_PROXY_ALLOCATION (self->asinkpad);
+
+  GST_PAD_SET_PROXY_CAPS (self->asrcpad);
+  GST_PAD_SET_PROXY_SCHEDULING (self->asrcpad);
+
+  GST_PAD_SET_PROXY_CAPS (self->vsinkpad);
+  GST_PAD_SET_PROXY_ALLOCATION (self->vsinkpad);
+
+  GST_PAD_SET_PROXY_CAPS (self->vsrcpad);
+  GST_PAD_SET_PROXY_SCHEDULING (self->vsrcpad);
+
+  self->adapter = gst_adapter_new ();
+
+  g_queue_init (&self->vtimeq);
+  self->first_time = GST_CLOCK_TIME_NONE;
+  self->total_frames = 0;
+  /* alignment_threshold and discont_wait should become properties if needed */
+  self->alignment_threshold = 40 * GST_MSECOND;
+  self->discont_time = GST_CLOCK_TIME_NONE;
+  self->next_offset = -1;
+  self->discont_wait = 1 * GST_SECOND;
+
+  self->video_eos_flag = FALSE;
+  self->audio_flush_flag = FALSE;
+  self->shutdown_flag = FALSE;
+
+  g_mutex_init (&self->mutex);
+  g_cond_init (&self->cond);
+}
+
+static GstStateChangeReturn
+gst_videoframe_audiolevel_change_state (GstElement * element,
+    GstStateChange transition)
+{
+  GstStateChangeReturn ret;
+  GstVideoFrameAudioLevel *self = GST_VIDEOFRAME_AUDIOLEVEL (element);
+
+  switch (transition) {
+    case GST_STATE_CHANGE_PAUSED_TO_READY:
+      g_mutex_lock (&self->mutex);
+      self->shutdown_flag = TRUE;
+      g_cond_signal (&self->cond);
+      g_mutex_unlock (&self->mutex);
+      break;
+    case GST_STATE_CHANGE_READY_TO_PAUSED:
+      g_mutex_lock (&self->mutex);
+      self->shutdown_flag = FALSE;
+      self->video_eos_flag = FALSE;
+      self->audio_flush_flag = FALSE;
+      g_mutex_unlock (&self->mutex);
+    default:
+      break;
+  }
+
+  ret = GST_ELEMENT_CLASS (parent_class)->change_state (element, transition);
+
+  switch (transition) {
+    case GST_STATE_CHANGE_PAUSED_TO_READY:
+      g_mutex_lock (&self->mutex);
+      self->first_time = GST_CLOCK_TIME_NONE;
+      self->total_frames = 0;
+      gst_segment_init (&self->asegment, GST_FORMAT_UNDEFINED);
+      gst_segment_init (&self->vsegment, GST_FORMAT_UNDEFINED);
+      self->vsegment.position = GST_CLOCK_TIME_NONE;
+      gst_adapter_clear (self->adapter);
+      g_queue_foreach (&self->vtimeq, (GFunc) g_free, NULL);
+      g_queue_clear (&self->vtimeq);
+      if (self->CS) {
+        g_free (self->CS);
+        self->CS = NULL;
+      }
+      g_mutex_unlock (&self->mutex);
+      break;
+    default:
+      break;
+  }
+
+  return ret;
+}
+
+static void
+gst_videoframe_audiolevel_finalize (GObject * object)
+{
+  GstVideoFrameAudioLevel *self = GST_VIDEOFRAME_AUDIOLEVEL (object);
+
+  if (self->adapter) {
+    g_object_unref (self->adapter);
+    self->adapter = NULL;
+  }
+  g_queue_foreach (&self->vtimeq, (GFunc) g_free, NULL);
+  g_queue_clear (&self->vtimeq);
+  self->first_time = GST_CLOCK_TIME_NONE;
+  self->total_frames = 0;
+  if (self->CS) {
+    g_free (self->CS);
+    self->CS = NULL;
+  }
+
+  g_mutex_clear (&self->mutex);
+  g_cond_clear (&self->cond);
+
+  G_OBJECT_CLASS (parent_class)->finalize (object);
+}
+
+#define DEFINE_INT_LEVEL_CALCULATOR(TYPE, RESOLUTION)                         \
+static void inline                                                            \
+gst_videoframe_audiolevel_calculate_##TYPE (gpointer data, guint num, guint channels,        \
+                            gdouble *NCS)                                     \
+{                                                                             \
+  TYPE * in = (TYPE *)data;                                                   \
+  register guint j;                                                           \
+  gdouble squaresum = 0.0;           /* square sum of the input samples */    \
+  register gdouble square = 0.0;     /* Square */                             \
+  gdouble normalizer;                /* divisor to get a [-1.0, 1.0] range */ \
+                                                                              \
+  /* *NCS = 0.0; Normalized Cumulative Square */                              \
+                                                                              \
+  for (j = 0; j < num; j += channels) {                                       \
+    square = ((gdouble) in[j]) * in[j];                                       \
+    squaresum += square;                                                      \
+  }                                                                           \
+                                                                              \
+  normalizer = (gdouble) (G_GINT64_CONSTANT(1) << (RESOLUTION * 2));          \
+  *NCS = squaresum / normalizer;                                              \
+}
+
+DEFINE_INT_LEVEL_CALCULATOR (gint32, 31);
+DEFINE_INT_LEVEL_CALCULATOR (gint16, 15);
+DEFINE_INT_LEVEL_CALCULATOR (gint8, 7);
+
+#define DEFINE_FLOAT_LEVEL_CALCULATOR(TYPE)                                   \
+static void inline                                                            \
+gst_videoframe_audiolevel_calculate_##TYPE (gpointer data, guint num, guint channels,        \
+                            gdouble *NCS)                                     \
+{                                                                             \
+  TYPE * in = (TYPE *)data;                                                   \
+  register guint j;                                                           \
+  gdouble squaresum = 0.0;           /* square sum of the input samples */    \
+  register gdouble square = 0.0;     /* Square */                             \
+                                                                              \
+  /* *NCS = 0.0; Normalized Cumulative Square */                              \
+                                                                              \
+  for (j = 0; j < num; j += channels) {                                       \
+    square = ((gdouble) in[j]) * in[j];                                       \
+    squaresum += square;                                                      \
+  }                                                                           \
+                                                                              \
+  *NCS = squaresum;                                                           \
+}
+
+DEFINE_FLOAT_LEVEL_CALCULATOR (gfloat);
+DEFINE_FLOAT_LEVEL_CALCULATOR (gdouble);
+
+static gboolean
+gst_videoframe_audiolevel_vsink_event (GstPad * pad, GstObject * parent,
+    GstEvent * event)
+{
+  GstVideoFrameAudioLevel *self = GST_VIDEOFRAME_AUDIOLEVEL (parent);
+  GST_LOG_OBJECT (pad, "Got %s event", GST_EVENT_TYPE_NAME (event));
+
+  switch (GST_EVENT_TYPE (event)) {
+    case GST_EVENT_SEGMENT:
+      g_mutex_lock (&self->mutex);
+      g_queue_foreach (&self->vtimeq, (GFunc) g_free, NULL);
+      g_queue_clear (&self->vtimeq);
+      g_mutex_unlock (&self->mutex);
+      gst_event_copy_segment (event, &self->vsegment);
+      if (self->vsegment.format != GST_FORMAT_TIME)
+        return FALSE;
+      self->vsegment.position = GST_CLOCK_TIME_NONE;
+      break;
+    case GST_EVENT_GAP:
+      return TRUE;
+    case GST_EVENT_EOS:
+      g_mutex_lock (&self->mutex);
+      self->video_eos_flag = TRUE;
+      g_cond_signal (&self->cond);
+      g_mutex_unlock (&self->mutex);
+      break;
+    case GST_EVENT_FLUSH_STOP:
+      g_mutex_lock (&self->mutex);
+      g_queue_foreach (&self->vtimeq, (GFunc) g_free, NULL);
+      g_queue_clear (&self->vtimeq);
+      gst_segment_init (&self->vsegment, GST_FORMAT_UNDEFINED);
+      g_cond_signal (&self->cond);
+      g_mutex_unlock (&self->mutex);
+      self->vsegment.position = GST_CLOCK_TIME_NONE;
+      break;
+    default:
+      break;
+  }
+  return gst_pad_event_default (pad, parent, event);
+}
+
+static gboolean
+gst_videoframe_audiolevel_asink_event (GstPad * pad, GstObject * parent,
+    GstEvent * event)
+{
+  GstVideoFrameAudioLevel *self = GST_VIDEOFRAME_AUDIOLEVEL (parent);
+  GST_LOG_OBJECT (pad, "Got %s event", GST_EVENT_TYPE_NAME (event));
+
+  switch (GST_EVENT_TYPE (event)) {
+    case GST_EVENT_SEGMENT:
+      self->first_time = GST_CLOCK_TIME_NONE;
+      self->total_frames = 0;
+      gst_adapter_clear (self->adapter);
+      gst_event_copy_segment (event, &self->asegment);
+      if (self->asegment.format != GST_FORMAT_TIME)
+        return FALSE;
+      break;
+    case GST_EVENT_FLUSH_START:
+      g_mutex_lock (&self->mutex);
+      self->audio_flush_flag = TRUE;
+      g_cond_signal (&self->cond);
+      g_mutex_unlock (&self->mutex);
+      break;
+    case GST_EVENT_FLUSH_STOP:
+      self->audio_flush_flag = FALSE;
+      self->total_frames = 0;
+      self->first_time = GST_CLOCK_TIME_NONE;
+      gst_adapter_clear (self->adapter);
+      gst_segment_init (&self->asegment, GST_FORMAT_UNDEFINED);
+      break;
+    case GST_EVENT_CAPS:{
+      GstCaps *caps;
+      gint channels;
+      gst_event_parse_caps (event, &caps);
+      GST_DEBUG_OBJECT (self, "Got caps %" GST_PTR_FORMAT, caps);
+      if (!gst_audio_info_from_caps (&self->ainfo, caps))
+        return FALSE;
+      switch (GST_AUDIO_INFO_FORMAT (&self->ainfo)) {
+        case GST_AUDIO_FORMAT_S8:
+          self->process = gst_videoframe_audiolevel_calculate_gint8;
+          break;
+        case GST_AUDIO_FORMAT_S16:
+          self->process = gst_videoframe_audiolevel_calculate_gint16;
+          break;
+        case GST_AUDIO_FORMAT_S32:
+          self->process = gst_videoframe_audiolevel_calculate_gint32;
+          break;
+        case GST_AUDIO_FORMAT_F32:
+          self->process = gst_videoframe_audiolevel_calculate_gfloat;
+          break;
+        case GST_AUDIO_FORMAT_F64:
+          self->process = gst_videoframe_audiolevel_calculate_gdouble;
+          break;
+        default:
+          self->process = NULL;
+          break;
+      }
+      gst_adapter_clear (self->adapter);
+      channels = GST_AUDIO_INFO_CHANNELS (&self->ainfo);
+      self->first_time = GST_CLOCK_TIME_NONE;
+      self->total_frames = 0;
+      if (self->CS)
+        g_free (self->CS);
+      self->CS = g_new0 (gdouble, channels);
+      break;
+    }
+    default:
+      break;
+  }
+
+  return gst_pad_event_default (pad, parent, event);
+}
+
+static GstMessage *
+update_rms_from_buffer (GstVideoFrameAudioLevel * self, GstBuffer * inbuf)
+{
+  GstMapInfo map;
+  guint8 *in_data;
+  gsize in_size;
+  gdouble CS;
+  guint i;
+  guint num_frames, frames;
+  guint num_int_samples = 0;    /* number of interleaved samples
+                                 * ie. total count for all channels combined */
+  gint channels, rate, bps;
+  GValue v = G_VALUE_INIT;
+  GValue va = G_VALUE_INIT;
+  GValueArray *a;
+  GstStructure *s;
+  GstMessage *msg;
+  GstClockTime duration, running_time;
+
+  channels = GST_AUDIO_INFO_CHANNELS (&self->ainfo);
+  bps = GST_AUDIO_INFO_BPS (&self->ainfo);
+  rate = GST_AUDIO_INFO_RATE (&self->ainfo);
+
+  gst_buffer_map (inbuf, &map, GST_MAP_READ);
+  in_data = map.data;
+  in_size = map.size;
+
+  num_int_samples = in_size / bps;
+
+  GST_LOG_OBJECT (self, "analyzing %u sample frames at ts %" GST_TIME_FORMAT,
+      num_int_samples, GST_TIME_ARGS (GST_BUFFER_TIMESTAMP (inbuf)));
+
+  g_return_val_if_fail (num_int_samples % channels == 0, NULL);
+
+  num_frames = num_int_samples / channels;
+  frames = num_frames;
+  duration = GST_FRAMES_TO_CLOCK_TIME (frames, rate);
+  if (num_frames > 0) {
+    for (i = 0; i < channels; ++i) {
+      self->process (in_data + (bps * i), num_int_samples, channels, &CS);
+      GST_LOG_OBJECT (self,
+          "[%d]: cumulative squares %lf, over %d samples/%d channels",
+          i, CS, num_int_samples, channels);
+      self->CS[i] += CS;
+    }
+    in_data += num_frames * bps;
+
+    self->total_frames += num_frames;
+  }
+  running_time =
+      self->first_time + gst_util_uint64_scale (self->total_frames, GST_SECOND,
+      rate);
+
+  a = g_value_array_new (channels);
+  s = gst_structure_new ("videoframe-audiolevel", "running-time", G_TYPE_UINT64,
+      running_time, "duration", G_TYPE_UINT64, duration, NULL);
+
+  g_value_init (&v, G_TYPE_DOUBLE);
+  g_value_init (&va, G_TYPE_VALUE_ARRAY);
+  for (i = 0; i < channels; i++) {
+    gdouble rms;
+    if (frames == 0 || self->CS[i] == 0) {
+      rms = 0;                  /* empty buffer */
+    } else {
+      rms = sqrt (self->CS[i] / frames);
+    }
+    self->CS[i] = 0.0;
+    g_value_set_double (&v, rms);
+    g_value_array_append (a, &v);
+  }
+  g_value_take_boxed (&va, a);
+  gst_structure_take_value (s, "rms", &va);
+  msg = gst_message_new_element (GST_OBJECT (self), s);
+
+  gst_buffer_unmap (inbuf, &map);
+
+  return msg;
+}
+
+static GstFlowReturn
+gst_videoframe_audiolevel_vsink_chain (GstPad * pad, GstObject * parent,
+    GstBuffer * inbuf)
+{
+  GstClockTime timestamp;
+  GstVideoFrameAudioLevel *self = GST_VIDEOFRAME_AUDIOLEVEL (parent);
+  GstClockTime duration;
+  GstClockTime *ptrtime = g_new (GstClockTime, 1);
+
+  timestamp = GST_BUFFER_TIMESTAMP (inbuf);
+  *ptrtime =
+      gst_segment_to_running_time (&self->vsegment, GST_FORMAT_TIME, timestamp);
+  g_mutex_lock (&self->mutex);
+  self->vsegment.position = timestamp;
+  duration = GST_BUFFER_DURATION (inbuf);
+  if (duration != GST_CLOCK_TIME_NONE)
+    self->vsegment.position += duration;
+  g_queue_push_tail (&self->vtimeq, ptrtime);
+  g_cond_signal (&self->cond);
+  GST_DEBUG_OBJECT (pad, "Pushed a frame");
+  g_mutex_unlock (&self->mutex);
+  return gst_pad_push (self->vsrcpad, inbuf);
+}
+
+static GstFlowReturn
+gst_videoframe_audiolevel_asink_chain (GstPad * pad, GstObject * parent,
+    GstBuffer * inbuf)
+{
+  GstClockTime timestamp, cur_time;
+  GstVideoFrameAudioLevel *self = GST_VIDEOFRAME_AUDIOLEVEL (parent);
+  GstBuffer *buf;
+  gsize inbuf_size;
+  guint64 start_offset, end_offset;
+  GstClockTime running_time;
+  gint rate, bpf;
+  gboolean discont = FALSE;
+
+  timestamp = GST_BUFFER_TIMESTAMP (inbuf);
+  running_time =
+      gst_segment_to_running_time (&self->asegment, GST_FORMAT_TIME, timestamp);
+
+  rate = GST_AUDIO_INFO_RATE (&self->ainfo);
+  bpf = GST_AUDIO_INFO_BPF (&self->ainfo);
+  start_offset = gst_util_uint64_scale (timestamp, rate, GST_SECOND);
+  inbuf_size = gst_buffer_get_size (inbuf);
+  end_offset = start_offset + inbuf_size / bpf;
+
+  g_mutex_lock (&self->mutex);
+
+  if (GST_BUFFER_IS_DISCONT (inbuf)
+      || GST_BUFFER_FLAG_IS_SET (inbuf, GST_BUFFER_FLAG_RESYNC)
+      || self->first_time == GST_CLOCK_TIME_NONE) {
+    discont = TRUE;
+  } else {
+    guint64 diff, max_sample_diff;
+
+    /* Check discont, based on audiobasesink */
+    if (start_offset <= self->next_offset)
+      diff = self->next_offset - start_offset;
+    else
+      diff = start_offset - self->next_offset;
+
+    max_sample_diff =
+        gst_util_uint64_scale_int (self->alignment_threshold, rate, GST_SECOND);
+
+    /* Discont! */
+    if (G_UNLIKELY (diff >= max_sample_diff)) {
+      if (self->discont_wait > 0) {
+        if (self->discont_time == GST_CLOCK_TIME_NONE) {
+          self->discont_time = timestamp;
+        } else if (timestamp - self->discont_time >= self->discont_wait) {
+          discont = TRUE;
+          self->discont_time = GST_CLOCK_TIME_NONE;
+        }
+      } else {
+        discont = TRUE;
+      }
+    } else if (G_UNLIKELY (self->discont_time != GST_CLOCK_TIME_NONE)) {
+      /* we have had a discont, but are now back on track! */
+      self->discont_time = GST_CLOCK_TIME_NONE;
+    }
+  }
+
+  if (discont) {
+    /* Have discont, need resync */
+    if (self->next_offset != -1)
+      GST_INFO_OBJECT (pad, "Have discont. Expected %"
+          G_GUINT64_FORMAT ", got %" G_GUINT64_FORMAT,
+          self->next_offset, start_offset);
+    self->total_frames = 0;
+    self->first_time = running_time;
+    self->next_offset = end_offset;
+  } else {
+    self->next_offset += inbuf_size / bpf;
+  }
+
+  gst_adapter_push (self->adapter, gst_buffer_ref (inbuf));
+
+  GST_DEBUG_OBJECT (self, "Queue length %i",
+      g_queue_get_length (&self->vtimeq));
+
+  while (TRUE) {
+    GstClockTime *vt0, *vt1;
+    GstClockTime vtemp;
+    GstMessage *msg;
+    gsize bytes, available_bytes;
+
+    vtemp = GST_CLOCK_TIME_NONE;
+
+    while (!(g_queue_get_length (&self->vtimeq) >= 2 || self->video_eos_flag
+            || self->audio_flush_flag || self->shutdown_flag))
+      g_cond_wait (&self->cond, &self->mutex);
+
+    if (self->audio_flush_flag || self->shutdown_flag) {
+      g_mutex_unlock (&self->mutex);
+      gst_buffer_unref (inbuf);
+      return GST_FLOW_FLUSHING;
+    } else if (self->video_eos_flag) {
+      GST_DEBUG_OBJECT (self, "Video EOS flag alert");
+      /* nothing to do here if queue is empty */
+      if (g_queue_get_length (&self->vtimeq) == 0)
+        break;
+
+      if (g_queue_get_length (&self->vtimeq) < 2) {
+        vtemp = self->vsegment.position;
+      } else if (self->vsegment.position == GST_CLOCK_TIME_NONE) {
+        /* g_queue_get_length is surely >= 2 at this point
+         * so the adapter isn't empty */
+        buf =
+            gst_adapter_take_buffer (self->adapter,
+            gst_adapter_available (self->adapter));
+        if (buf != NULL) {
+          GstMessage *msg;
+          msg = update_rms_from_buffer (self, buf);
+          g_mutex_unlock (&self->mutex);
+          gst_element_post_message (GST_ELEMENT (self), msg);
+          gst_buffer_unref (buf);
+          g_mutex_lock (&self->mutex);  /* we unlock again later */
+        }
+        break;
+      }
+    } else if (g_queue_get_length (&self->vtimeq) < 2) {
+      continue;
+    }
+
+    vt0 = g_queue_pop_head (&self->vtimeq);
+    if (vtemp == GST_CLOCK_TIME_NONE)
+      vt1 = g_queue_peek_head (&self->vtimeq);
+    else
+      vt1 = &vtemp;
+
+    cur_time =
+        self->first_time + gst_util_uint64_scale (self->total_frames,
+        GST_SECOND, rate);
+    GST_DEBUG_OBJECT (self,
+        "Processing: current time is %" GST_TIME_FORMAT,
+        GST_TIME_ARGS (cur_time));
+    GST_DEBUG_OBJECT (self, "Total frames is %i with a rate of %d",
+        self->total_frames, rate);
+    GST_DEBUG_OBJECT (self, "Start time is %" GST_TIME_FORMAT,
+        GST_TIME_ARGS (self->first_time));
+    GST_DEBUG_OBJECT (self, "Time on top is %" GST_TIME_FORMAT,
+        GST_TIME_ARGS (*vt0));
+
+    if (cur_time < *vt0) {
+      guint num_frames =
+          gst_util_uint64_scale (*vt0 - cur_time, rate, GST_SECOND);
+      bytes = num_frames * GST_AUDIO_INFO_BPF (&self->ainfo);
+      available_bytes = gst_adapter_available (self->adapter);
+      if (available_bytes == 0) {
+        g_queue_push_head (&self->vtimeq, vt0);
+        break;
+      }
+      if (bytes == 0) {
+        cur_time = *vt0;
+      } else {
+        GST_DEBUG_OBJECT (self,
+            "Flushed %" G_GSIZE_FORMAT " out of %" G_GSIZE_FORMAT " bytes",
+            bytes, available_bytes);
+        gst_adapter_flush (self->adapter, MIN (bytes, available_bytes));
+        self->total_frames += num_frames;
+        if (available_bytes <= bytes) {
+          g_queue_push_head (&self->vtimeq, vt0);
+          break;
+        }
+        cur_time =
+            self->first_time + gst_util_uint64_scale (self->total_frames,
+            GST_SECOND, rate);
+      }
+    }
+    if (*vt1 > cur_time) {
+      bytes =
+          GST_AUDIO_INFO_BPF (&self->ainfo) * gst_util_uint64_scale (*vt1 -
+          cur_time, rate, GST_SECOND);
+    } else {
+      bytes = 0;                /* We just need to discard vt0 */
+    }
+    available_bytes = gst_adapter_available (self->adapter);
+    GST_DEBUG_OBJECT (self,
+        "Adapter contains %" G_GSIZE_FORMAT " out of %" G_GSIZE_FORMAT " bytes",
+        available_bytes, bytes);
+
+    if (available_bytes < bytes) {
+      g_queue_push_head (&self->vtimeq, vt0);
+      goto done;
+    }
+
+    if (bytes > 0) {
+      buf = gst_adapter_take_buffer (self->adapter, bytes);
+      g_assert (buf != NULL);
+    } else {
+      /* Just an empty buffer */
+      buf = gst_buffer_new ();
+    }
+    msg = update_rms_from_buffer (self, buf);
+    g_mutex_unlock (&self->mutex);
+    gst_element_post_message (GST_ELEMENT (self), msg);
+    g_mutex_lock (&self->mutex);
+
+    gst_buffer_unref (buf);
+    g_free (vt0);
+    if (available_bytes == bytes)
+      break;
+  }
+done:
+  g_mutex_unlock (&self->mutex);
+  return gst_pad_push (self->asrcpad, inbuf);
+}
+
+static GstIterator *
+gst_videoframe_audiolevel_iterate_internal_links (GstPad * pad,
+    GstObject * parent)
+{
+  GstIterator *it = NULL;
+  GstPad *opad;
+  GValue val = { 0, };
+  GstVideoFrameAudioLevel *self = GST_VIDEOFRAME_AUDIOLEVEL (parent);
+
+  if (self->asinkpad == pad)
+    opad = gst_object_ref (self->asrcpad);
+  else if (self->asrcpad == pad)
+    opad = gst_object_ref (self->asinkpad);
+  else if (self->vsinkpad == pad)
+    opad = gst_object_ref (self->vsrcpad);
+  else if (self->vsrcpad == pad)
+    opad = gst_object_ref (self->vsinkpad);
+  else
+    goto out;
+
+  g_value_init (&val, GST_TYPE_PAD);
+  g_value_set_object (&val, opad);
+  it = gst_iterator_new_single (GST_TYPE_PAD, &val);
+  g_value_unset (&val);
+
+  gst_object_unref (opad);
+
+out:
+  return it;
+}
+
+static gboolean
+gst_videoframe_audiolevel_plugin_init (GstPlugin * plugin)
+{
+  return gst_element_register (plugin, "videoframe-audiolevel",
+      GST_RANK_NONE, GST_TYPE_VIDEOFRAME_AUDIOLEVEL);
+}
+
+GST_PLUGIN_DEFINE (GST_VERSION_MAJOR,
+    GST_VERSION_MINOR,
+    videoframe_audiolevel,
+    "Video frame-synchronized audio level",
+    gst_videoframe_audiolevel_plugin_init, VERSION, GST_LICENSE,
+    GST_PACKAGE_NAME, GST_PACKAGE_ORIGIN);
diff --git a/gst/videoframe_audiolevel/gstvideoframe-audiolevel.h b/gst/videoframe_audiolevel/gstvideoframe-audiolevel.h
new file mode 100644
index 0000000..83332e5
--- /dev/null
+++ b/gst/videoframe_audiolevel/gstvideoframe-audiolevel.h
@@ -0,0 +1,73 @@
+/* 
+ * GStreamer
+ * Copyright (C) 2015 Vivia Nikolaidou <vivia@toolsonair.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifndef __GST_VIDEOFRAME_AUDIOLEVEL_H__
+#define __GST_VIDEOFRAME_AUDIOLEVEL_H__
+
+#include <gst/gst.h>
+#include <gst/audio/audio.h>
+
+G_BEGIN_DECLS
+#define GST_TYPE_VIDEOFRAME_AUDIOLEVEL                    (gst_videoframe_audiolevel_get_type())
+#define GST_VIDEOFRAME_AUDIOLEVEL(obj)                    (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_VIDEOFRAME_AUDIOLEVEL,GstVideoFrameAudioLevel))
+#define GST_IS_VIDEOFRAME_AUDIOLEVEL(obj)                 (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_VIDEOFRAME_AUDIOLEVEL))
+#define GST_VIDEOFRAME_AUDIOLEVEL_CLASS(klass)            (G_TYPE_CHECK_CLASS_CAST((klass) ,GST_TYPE_VIDEOFRAME_AUDIOLEVEL,GstVideoFrameAudioLevelClass))
+#define GST_IS_VIDEOFRAME_AUDIOLEVEL_CLASS(klass)         (G_TYPE_CHECK_CLASS_TYPE((klass) ,GST_TYPE_VIDEOFRAME_AUDIOLEVEL))
+#define GST_VIDEOFRAME_AUDIOLEVEL_GET_CLASS(obj)          (G_TYPE_INSTANCE_GET_CLASS((obj) ,GST_TYPE_VIDEOFRAME_AUDIOLEVEL,GstVideoFrameAudioLevelClass))
+typedef struct _GstVideoFrameAudioLevel GstVideoFrameAudioLevel;
+typedef struct _GstVideoFrameAudioLevelClass GstVideoFrameAudioLevelClass;
+
+struct _GstVideoFrameAudioLevel
+{
+  GstElement parent;
+
+  GstPad *asrcpad, *asinkpad, *vsrcpad, *vsinkpad;
+
+  GstAudioInfo ainfo;
+
+  gdouble *CS;                  /* normalized Cumulative Square */
+
+  GstSegment asegment, vsegment;
+
+  void (*process) (gpointer, guint, guint, gdouble *);
+
+  GQueue vtimeq;
+  GstAdapter *adapter;
+  GstClockTime first_time;
+  guint total_frames;
+  guint64 next_offset, alignment_threshold, discont_time, discont_wait;
+
+  gboolean video_eos_flag;
+  gboolean audio_flush_flag;
+  gboolean shutdown_flag;
+
+  GCond cond;
+  GMutex mutex;
+};
+
+struct _GstVideoFrameAudioLevelClass
+{
+  GstElementClass parent_class;
+};
+
+GType gst_videoframe_audiolevel_get_type (void);
+
+G_END_DECLS
+#endif /* __GST_VIDEOFRAME_AUDIOLEVEL_H__ */
diff --git a/gst/videomeasure/Makefile.in b/gst/videomeasure/Makefile.in
index 70af382..8ac2928 100644
--- a/gst/videomeasure/Makefile.in
+++ b/gst/videomeasure/Makefile.in
@@ -116,16 +116,15 @@
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
 	$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
-	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gsettings.m4 \
-	$(top_srcdir)/m4/gst-fionread.m4 $(top_srcdir)/m4/gst-sdl.m4 \
-	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
-	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
-	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libgcrypt.m4 \
-	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
-	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
-	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
-	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
-	$(top_srcdir)/configure.ac
+	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gst-fionread.m4 \
+	$(top_srcdir)/m4/gst-sdl.m4 $(top_srcdir)/m4/iconv.m4 \
+	$(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \
+	$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
+	$(top_srcdir)/m4/libgcrypt.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
+	$(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \
@@ -278,6 +277,8 @@
 CLUTTER_X11_LIBS = @CLUTTER_X11_LIBS@
 CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
+CUDA_CFLAGS = @CUDA_CFLAGS@
+CUDA_LIBS = @CUDA_LIBS@
 CURL_CFLAGS = @CURL_CFLAGS@
 CURL_LIBS = @CURL_LIBS@
 CXX = @CXX@
@@ -315,6 +316,8 @@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
+EGL_CFLAGS = @EGL_CFLAGS@
+EGL_LIBS = @EGL_LIBS@
 EGREP = @EGREP@
 ERROR_CFLAGS = @ERROR_CFLAGS@
 ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
@@ -323,7 +326,6 @@
 EXIF_CFLAGS = @EXIF_CFLAGS@
 EXIF_LIBS = @EXIF_LIBS@
 FAAC_LIBS = @FAAC_LIBS@
-FAAD_IS_NEAAC = @FAAD_IS_NEAAC@
 FAAD_LIBS = @FAAD_LIBS@
 FFLAGS = @FFLAGS@
 FGREP = @FGREP@
@@ -342,8 +344,9 @@
 GIO_LIBS = @GIO_LIBS@
 GIO_UNIX_CFLAGS = @GIO_UNIX_CFLAGS@
 GIO_UNIX_LIBS = @GIO_UNIX_LIBS@
+GLES2_CFLAGS = @GLES2_CFLAGS@
+GLES2_LIBS = @GLES2_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
-GLIB_COMPILE_SCHEMAS = @GLIB_COMPILE_SCHEMAS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
@@ -360,16 +363,17 @@
 GMODULE_NO_EXPORT_LIBS = @GMODULE_NO_EXPORT_LIBS@
 GMSGFMT = @GMSGFMT@
 GMSGFMT_015 = @GMSGFMT_015@
+GNUSTL_CFLAGS = @GNUSTL_CFLAGS@
+GNUSTL_LIBS = @GNUSTL_LIBS@
 GRAPHENE_CFLAGS = @GRAPHENE_CFLAGS@
 GRAPHENE_LIBS = @GRAPHENE_LIBS@
 GREP = @GREP@
-GSETTINGS_CFLAGS = @GSETTINGS_CFLAGS@
-GSETTINGS_DISABLE_SCHEMAS_COMPILE = @GSETTINGS_DISABLE_SCHEMAS_COMPILE@
-GSETTINGS_LIBS = @GSETTINGS_LIBS@
 GSM_LIBS = @GSM_LIBS@
 GSTPB_PLUGINS_DIR = @GSTPB_PLUGINS_DIR@
 GSTPB_PREFIX = @GSTPB_PREFIX@
 GST_AGE = @GST_AGE@
+GST_ALLOCATORS_CFLAGS = @GST_ALLOCATORS_CFLAGS@
+GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
 GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
 GST_API_VERSION = @GST_API_VERSION@
 GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
@@ -395,6 +399,8 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PBUTILS_CFLAGS = @GST_PBUTILS_CFLAGS@
+GST_PBUTILS_LIBS = @GST_PBUTILS_LIBS@
 GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BAD_CFLAGS = @GST_PLUGINS_BAD_CFLAGS@
@@ -420,6 +426,8 @@
 GST_PREFIX = @GST_PREFIX@
 GST_REVISION = @GST_REVISION@
 GST_TOOLS_DIR = @GST_TOOLS_DIR@
+GST_VIDEO_CFLAGS = @GST_VIDEO_CFLAGS@
+GST_VIDEO_LIBS = @GST_VIDEO_LIBS@
 GTK3_CFLAGS = @GTK3_CFLAGS@
 GTK3_GL_CFLAGS = @GTK3_GL_CFLAGS@
 GTK3_GL_LIBS = @GTK3_GL_LIBS@
@@ -521,6 +529,7 @@
 LTLIBICONV = @LTLIBICONV@
 LTLIBINTL = @LTLIBINTL@
 LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
 MANIFEST_TOOL = @MANIFEST_TOOL@
@@ -534,8 +543,6 @@
 MODPLUG_LIBS = @MODPLUG_LIBS@
 MPEG2ENC_CFLAGS = @MPEG2ENC_CFLAGS@
 MPEG2ENC_LIBS = @MPEG2ENC_LIBS@
-MPG123_CFLAGS = @MPG123_CFLAGS@
-MPG123_LIBS = @MPG123_LIBS@
 MPLEX_CFLAGS = @MPLEX_CFLAGS@
 MPLEX_LDFLAGS = @MPLEX_LDFLAGS@
 MPLEX_LIBS = @MPLEX_LIBS@
@@ -551,6 +558,8 @@
 NETTLE_LIBS = @NETTLE_LIBS@
 NM = @NM@
 NMEDIT = @NMEDIT@
+NVENCODE_CFLAGS = @NVENCODE_CFLAGS@
+NVENCODE_LIBS = @NVENCODE_LIBS@
 OBJC = @OBJC@
 OBJCDEPMODE = @OBJCDEPMODE@
 OBJCFLAGS = @OBJCFLAGS@
@@ -608,16 +617,18 @@
 PYTHON_PLATFORM = @PYTHON_PLATFORM@
 PYTHON_PREFIX = @PYTHON_PREFIX@
 PYTHON_VERSION = @PYTHON_VERSION@
+QT_ANDROID_CFLAGS = @QT_ANDROID_CFLAGS@
+QT_ANDROID_LIBS = @QT_ANDROID_LIBS@
 QT_CFLAGS = @QT_CFLAGS@
 QT_LIBS = @QT_LIBS@
+QT_MAC_CFLAGS = @QT_MAC_CFLAGS@
+QT_MAC_LIBS = @QT_MAC_LIBS@
 QT_WAYLAND_CFLAGS = @QT_WAYLAND_CFLAGS@
 QT_WAYLAND_LIBS = @QT_WAYLAND_LIBS@
 QT_X11_CFLAGS = @QT_X11_CFLAGS@
 QT_X11_LIBS = @QT_X11_LIBS@
 RANLIB = @RANLIB@
 RCC = @RCC@
-RSVG_2_36_2_CFLAGS = @RSVG_2_36_2_CFLAGS@
-RSVG_2_36_2_LIBS = @RSVG_2_36_2_LIBS@
 RSVG_CFLAGS = @RSVG_CFLAGS@
 RSVG_LIBS = @RSVG_LIBS@
 RTMP_CFLAGS = @RTMP_CFLAGS@
@@ -669,6 +680,7 @@
 VOAACENC_LIBS = @VOAACENC_LIBS@
 VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
 VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VULKAN_LIBS = @VULKAN_LIBS@
 WARNING_CFLAGS = @WARNING_CFLAGS@
 WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
 WARNING_OBJCFLAGS = @WARNING_OBJCFLAGS@
@@ -679,6 +691,7 @@
 WAYLAND_LIBS = @WAYLAND_LIBS@
 WEBP_CFLAGS = @WEBP_CFLAGS@
 WEBP_LIBS = @WEBP_LIBS@
+WGET = @WGET@
 WILDMIDI_CFLAGS = @WILDMIDI_CFLAGS@
 WILDMIDI_LIBS = @WILDMIDI_LIBS@
 WINKS_LIBS = @WINKS_LIBS@
@@ -688,6 +701,8 @@
 X11_LIBS = @X11_LIBS@
 X265_CFLAGS = @X265_CFLAGS@
 X265_LIBS = @X265_LIBS@
+XCB_CFLAGS = @XCB_CFLAGS@
+XCB_LIBS = @XCB_LIBS@
 XCOMPOSITE_CFLAGS = @XCOMPOSITE_CFLAGS@
 XCOMPOSITE_LIBS = @XCOMPOSITE_LIBS@
 XGETTEXT = @XGETTEXT@
@@ -725,7 +740,6 @@
 docdir = @docdir@
 dvidir = @dvidir@
 exec_prefix = @exec_prefix@
-gsettingsschemadir = @gsettingsschemadir@
 host = @host@
 host_alias = @host_alias@
 host_cpu = @host_cpu@
diff --git a/gst/videomeasure/gstvideomeasure_ssim.c b/gst/videomeasure/gstvideomeasure_ssim.c
index e85d68f..13ba035 100644
--- a/gst/videomeasure/gstvideomeasure_ssim.c
+++ b/gst/videomeasure/gstvideomeasure_ssim.c
@@ -1176,11 +1176,7 @@
     goto could_not_add_sink;
   else
     /* increment pad counter */
-#if GLIB_CHECK_VERSION(2,29,5)
     padcount = g_atomic_int_add (&ssim->padcount, 1);
-#else
-    padcount = g_atomic_int_exchange_and_add (&ssim->padcount, 1);
-#endif
 
   if (num != -1) {
     GstSSimOutputContext *c;
diff --git a/gst/videoparsers/Makefile.in b/gst/videoparsers/Makefile.in
index e9251d1..1a0c57b 100644
--- a/gst/videoparsers/Makefile.in
+++ b/gst/videoparsers/Makefile.in
@@ -116,16 +116,15 @@
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
 	$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
-	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gsettings.m4 \
-	$(top_srcdir)/m4/gst-fionread.m4 $(top_srcdir)/m4/gst-sdl.m4 \
-	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
-	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
-	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libgcrypt.m4 \
-	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
-	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
-	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
-	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
-	$(top_srcdir)/configure.ac
+	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gst-fionread.m4 \
+	$(top_srcdir)/m4/gst-sdl.m4 $(top_srcdir)/m4/iconv.m4 \
+	$(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \
+	$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
+	$(top_srcdir)/m4/libgcrypt.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
+	$(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \
@@ -287,6 +286,8 @@
 CLUTTER_X11_LIBS = @CLUTTER_X11_LIBS@
 CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
+CUDA_CFLAGS = @CUDA_CFLAGS@
+CUDA_LIBS = @CUDA_LIBS@
 CURL_CFLAGS = @CURL_CFLAGS@
 CURL_LIBS = @CURL_LIBS@
 CXX = @CXX@
@@ -324,6 +325,8 @@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
+EGL_CFLAGS = @EGL_CFLAGS@
+EGL_LIBS = @EGL_LIBS@
 EGREP = @EGREP@
 ERROR_CFLAGS = @ERROR_CFLAGS@
 ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
@@ -332,7 +335,6 @@
 EXIF_CFLAGS = @EXIF_CFLAGS@
 EXIF_LIBS = @EXIF_LIBS@
 FAAC_LIBS = @FAAC_LIBS@
-FAAD_IS_NEAAC = @FAAD_IS_NEAAC@
 FAAD_LIBS = @FAAD_LIBS@
 FFLAGS = @FFLAGS@
 FGREP = @FGREP@
@@ -351,8 +353,9 @@
 GIO_LIBS = @GIO_LIBS@
 GIO_UNIX_CFLAGS = @GIO_UNIX_CFLAGS@
 GIO_UNIX_LIBS = @GIO_UNIX_LIBS@
+GLES2_CFLAGS = @GLES2_CFLAGS@
+GLES2_LIBS = @GLES2_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
-GLIB_COMPILE_SCHEMAS = @GLIB_COMPILE_SCHEMAS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
@@ -369,16 +372,17 @@
 GMODULE_NO_EXPORT_LIBS = @GMODULE_NO_EXPORT_LIBS@
 GMSGFMT = @GMSGFMT@
 GMSGFMT_015 = @GMSGFMT_015@
+GNUSTL_CFLAGS = @GNUSTL_CFLAGS@
+GNUSTL_LIBS = @GNUSTL_LIBS@
 GRAPHENE_CFLAGS = @GRAPHENE_CFLAGS@
 GRAPHENE_LIBS = @GRAPHENE_LIBS@
 GREP = @GREP@
-GSETTINGS_CFLAGS = @GSETTINGS_CFLAGS@
-GSETTINGS_DISABLE_SCHEMAS_COMPILE = @GSETTINGS_DISABLE_SCHEMAS_COMPILE@
-GSETTINGS_LIBS = @GSETTINGS_LIBS@
 GSM_LIBS = @GSM_LIBS@
 GSTPB_PLUGINS_DIR = @GSTPB_PLUGINS_DIR@
 GSTPB_PREFIX = @GSTPB_PREFIX@
 GST_AGE = @GST_AGE@
+GST_ALLOCATORS_CFLAGS = @GST_ALLOCATORS_CFLAGS@
+GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
 GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
 GST_API_VERSION = @GST_API_VERSION@
 GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
@@ -404,6 +408,8 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PBUTILS_CFLAGS = @GST_PBUTILS_CFLAGS@
+GST_PBUTILS_LIBS = @GST_PBUTILS_LIBS@
 GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BAD_CFLAGS = @GST_PLUGINS_BAD_CFLAGS@
@@ -429,6 +435,8 @@
 GST_PREFIX = @GST_PREFIX@
 GST_REVISION = @GST_REVISION@
 GST_TOOLS_DIR = @GST_TOOLS_DIR@
+GST_VIDEO_CFLAGS = @GST_VIDEO_CFLAGS@
+GST_VIDEO_LIBS = @GST_VIDEO_LIBS@
 GTK3_CFLAGS = @GTK3_CFLAGS@
 GTK3_GL_CFLAGS = @GTK3_GL_CFLAGS@
 GTK3_GL_LIBS = @GTK3_GL_LIBS@
@@ -530,6 +538,7 @@
 LTLIBICONV = @LTLIBICONV@
 LTLIBINTL = @LTLIBINTL@
 LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
 MANIFEST_TOOL = @MANIFEST_TOOL@
@@ -543,8 +552,6 @@
 MODPLUG_LIBS = @MODPLUG_LIBS@
 MPEG2ENC_CFLAGS = @MPEG2ENC_CFLAGS@
 MPEG2ENC_LIBS = @MPEG2ENC_LIBS@
-MPG123_CFLAGS = @MPG123_CFLAGS@
-MPG123_LIBS = @MPG123_LIBS@
 MPLEX_CFLAGS = @MPLEX_CFLAGS@
 MPLEX_LDFLAGS = @MPLEX_LDFLAGS@
 MPLEX_LIBS = @MPLEX_LIBS@
@@ -560,6 +567,8 @@
 NETTLE_LIBS = @NETTLE_LIBS@
 NM = @NM@
 NMEDIT = @NMEDIT@
+NVENCODE_CFLAGS = @NVENCODE_CFLAGS@
+NVENCODE_LIBS = @NVENCODE_LIBS@
 OBJC = @OBJC@
 OBJCDEPMODE = @OBJCDEPMODE@
 OBJCFLAGS = @OBJCFLAGS@
@@ -617,16 +626,18 @@
 PYTHON_PLATFORM = @PYTHON_PLATFORM@
 PYTHON_PREFIX = @PYTHON_PREFIX@
 PYTHON_VERSION = @PYTHON_VERSION@
+QT_ANDROID_CFLAGS = @QT_ANDROID_CFLAGS@
+QT_ANDROID_LIBS = @QT_ANDROID_LIBS@
 QT_CFLAGS = @QT_CFLAGS@
 QT_LIBS = @QT_LIBS@
+QT_MAC_CFLAGS = @QT_MAC_CFLAGS@
+QT_MAC_LIBS = @QT_MAC_LIBS@
 QT_WAYLAND_CFLAGS = @QT_WAYLAND_CFLAGS@
 QT_WAYLAND_LIBS = @QT_WAYLAND_LIBS@
 QT_X11_CFLAGS = @QT_X11_CFLAGS@
 QT_X11_LIBS = @QT_X11_LIBS@
 RANLIB = @RANLIB@
 RCC = @RCC@
-RSVG_2_36_2_CFLAGS = @RSVG_2_36_2_CFLAGS@
-RSVG_2_36_2_LIBS = @RSVG_2_36_2_LIBS@
 RSVG_CFLAGS = @RSVG_CFLAGS@
 RSVG_LIBS = @RSVG_LIBS@
 RTMP_CFLAGS = @RTMP_CFLAGS@
@@ -678,6 +689,7 @@
 VOAACENC_LIBS = @VOAACENC_LIBS@
 VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
 VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VULKAN_LIBS = @VULKAN_LIBS@
 WARNING_CFLAGS = @WARNING_CFLAGS@
 WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
 WARNING_OBJCFLAGS = @WARNING_OBJCFLAGS@
@@ -688,6 +700,7 @@
 WAYLAND_LIBS = @WAYLAND_LIBS@
 WEBP_CFLAGS = @WEBP_CFLAGS@
 WEBP_LIBS = @WEBP_LIBS@
+WGET = @WGET@
 WILDMIDI_CFLAGS = @WILDMIDI_CFLAGS@
 WILDMIDI_LIBS = @WILDMIDI_LIBS@
 WINKS_LIBS = @WINKS_LIBS@
@@ -697,6 +710,8 @@
 X11_LIBS = @X11_LIBS@
 X265_CFLAGS = @X265_CFLAGS@
 X265_LIBS = @X265_LIBS@
+XCB_CFLAGS = @XCB_CFLAGS@
+XCB_LIBS = @XCB_LIBS@
 XCOMPOSITE_CFLAGS = @XCOMPOSITE_CFLAGS@
 XCOMPOSITE_LIBS = @XCOMPOSITE_LIBS@
 XGETTEXT = @XGETTEXT@
@@ -734,7 +749,6 @@
 docdir = @docdir@
 dvidir = @dvidir@
 exec_prefix = @exec_prefix@
-gsettingsschemadir = @gsettingsschemadir@
 host = @host@
 host_alias = @host_alias@
 host_cpu = @host_cpu@
diff --git a/gst/videoparsers/gstdiracparse.c b/gst/videoparsers/gstdiracparse.c
index ea3cd9d..93f00c6 100644
--- a/gst/videoparsers/gstdiracparse.c
+++ b/gst/videoparsers/gstdiracparse.c
@@ -24,7 +24,7 @@
  * <refsect2>
  * <title>Example launch line</title>
  * |[
- * gst-launch -v fakesrc ! gstdiracparse ! FIXME ! fakesink
+ * gst-launch-1.0 -v fakesrc ! gstdiracparse ! FIXME ! fakesink
  * ]|
  * FIXME Describe what the pipeline does.
  * </refsect2>
@@ -396,10 +396,19 @@
     GstTagList *taglist;
     GstCaps *caps;
 
-    taglist = gst_tag_list_new_empty ();
-
     /* codec tag */
     caps = gst_pad_get_current_caps (GST_BASE_PARSE_SRC_PAD (parse));
+    if (G_UNLIKELY (caps == NULL)) {
+      if (GST_PAD_IS_FLUSHING (GST_BASE_PARSE_SRC_PAD (parse))) {
+        GST_INFO_OBJECT (parse, "Src pad is flushing");
+        return GST_FLOW_FLUSHING;
+      } else {
+        GST_INFO_OBJECT (parse, "Src pad is not negotiated!");
+        return GST_FLOW_NOT_NEGOTIATED;
+      }
+    }
+
+    taglist = gst_tag_list_new_empty ();
     gst_pb_utils_add_codec_description_to_tag_list (taglist,
         GST_TAG_VIDEO_CODEC, caps);
     gst_caps_unref (caps);
diff --git a/gst/videoparsers/gsth263parse.c b/gst/videoparsers/gsth263parse.c
index eb6290b..370cbb1 100644
--- a/gst/videoparsers/gsth263parse.c
+++ b/gst/videoparsers/gsth263parse.c
@@ -439,10 +439,19 @@
     GstTagList *taglist;
     GstCaps *caps;
 
-    taglist = gst_tag_list_new_empty ();
-
     /* codec tag */
     caps = gst_pad_get_current_caps (GST_BASE_PARSE_SRC_PAD (parse));
+    if (G_UNLIKELY (caps == NULL)) {
+      if (GST_PAD_IS_FLUSHING (GST_BASE_PARSE_SRC_PAD (parse))) {
+        GST_INFO_OBJECT (parse, "Src pad is flushing");
+        return GST_FLOW_FLUSHING;
+      } else {
+        GST_INFO_OBJECT (parse, "Src pad is not negotiated!");
+        return GST_FLOW_NOT_NEGOTIATED;
+      }
+    }
+
+    taglist = gst_tag_list_new_empty ();
     gst_pb_utils_add_codec_description_to_tag_list (taglist,
         GST_TAG_VIDEO_CODEC, caps);
     gst_caps_unref (caps);
diff --git a/gst/videoparsers/gsth264parse.c b/gst/videoparsers/gsth264parse.c
index 915c2d7..8907eb4 100644
--- a/gst/videoparsers/gsth264parse.c
+++ b/gst/videoparsers/gsth264parse.c
@@ -1499,11 +1499,20 @@
 static void
 ensure_caps_profile (GstH264Parse * h264parse, GstCaps * caps, GstH264SPS * sps)
 {
-  GstCaps *filter_caps, *peer_caps, *compat_caps;
+  GstCaps *peer_caps, *compat_caps;
 
-  filter_caps = gst_caps_new_empty_simple ("video/x-h264");
-  peer_caps =
-      gst_pad_peer_query_caps (GST_BASE_PARSE_SRC_PAD (h264parse), filter_caps);
+  peer_caps = gst_pad_get_current_caps (GST_BASE_PARSE_SRC_PAD (h264parse));
+  if (!peer_caps || !gst_caps_can_intersect (caps, peer_caps)) {
+    GstCaps *filter_caps = gst_caps_new_empty_simple ("video/x-h264");
+
+    if (peer_caps)
+      gst_caps_unref (peer_caps);
+    peer_caps =
+        gst_pad_peer_query_caps (GST_BASE_PARSE_SRC_PAD (h264parse),
+        filter_caps);
+
+    gst_caps_unref (filter_caps);
+  }
 
   if (peer_caps && !gst_caps_can_intersect (caps, peer_caps)) {
     GstStructure *structure;
@@ -1534,7 +1543,6 @@
   }
   if (peer_caps)
     gst_caps_unref (peer_caps);
-  gst_caps_unref (filter_caps);
 }
 
 static const gchar *
@@ -1792,8 +1800,6 @@
       /* Pass through or set output stereo/multiview config */
       if (s && gst_structure_has_field (s, "multiview-mode")) {
         caps_mview_mode = gst_structure_get_string (s, "multiview-mode");
-        mview_mode =
-            gst_video_multiview_mode_from_caps_string (caps_mview_mode);
         gst_structure_get_flagset (s, "multiview-flags", &mview_flags, NULL);
       } else if (mview_mode != GST_VIDEO_MULTIVIEW_MODE_NONE) {
         if (gst_video_multiview_guess_half_aspect (mview_mode,
@@ -1855,14 +1861,20 @@
 
     src_caps = gst_pad_get_current_caps (GST_BASE_PARSE_SRC_PAD (h264parse));
 
-    if (src_caps
-        && gst_structure_has_field (gst_caps_get_structure (src_caps, 0),
-            "codec_data")) {
+    if (src_caps) {
       /* use codec data from old caps for comparison; we don't want to resend caps
          if everything is same except codec data; */
-      gst_caps_set_value (caps, "codec_data",
-          gst_structure_get_value (gst_caps_get_structure (src_caps, 0),
-              "codec_data"));
+      if (gst_structure_has_field (gst_caps_get_structure (src_caps, 0),
+              "codec_data")) {
+        gst_caps_set_value (caps, "codec_data",
+            gst_structure_get_value (gst_caps_get_structure (src_caps, 0),
+                "codec_data"));
+      } else if (!buf) {
+        GstStructure *s;
+        /* remove any left-over codec-data hanging around */
+        s = gst_caps_get_structure (caps, 0);
+        gst_structure_remove_field (s, "codec_data");
+      }
     }
 
     if (!(src_caps && gst_caps_is_strictly_equal (src_caps, caps))) {
@@ -2197,8 +2209,6 @@
     GstTagList *taglist;
     GstCaps *caps;
 
-    taglist = gst_tag_list_new_empty ();
-
     /* codec tag */
     caps = gst_pad_get_current_caps (GST_BASE_PARSE_SRC_PAD (parse));
     if (caps == NULL) {
@@ -2210,6 +2220,8 @@
         return GST_FLOW_NOT_NEGOTIATED;
       }
     }
+
+    taglist = gst_tag_list_new_empty ();
     gst_pb_utils_add_codec_description_to_tag_list (taglist,
         GST_TAG_VIDEO_CODEC, caps);
     gst_caps_unref (caps);
@@ -2356,6 +2368,12 @@
     }
   }
 
+  /* Fixme: setting passthrough mode casuing multiple issues:
+   * For nal aligned multiresoluton streams, passthrough mode make h264parse
+   * unable to advertise the new resoultions. Also causing issues while
+   * parsing MVC streams when it has two layers.
+   * Disabing passthourgh mode for now */
+#if 0
   /* If SPS/PPS and a keyframe have been parsed, and we're not converting,
    * we might switch to passthrough mode now on the basis that we've seen
    * the SEI packets and know optional caps params (such as multiview).
@@ -2367,6 +2385,7 @@
       gst_base_parse_set_passthrough (parse, TRUE);
     }
   }
+#endif
 
   gst_h264_parse_reset_frame (h264parse);
 
@@ -2702,6 +2721,7 @@
     case GST_EVENT_FLUSH_STOP:
       h264parse->dts = GST_CLOCK_TIME_NONE;
       h264parse->ts_trn_nb = GST_CLOCK_TIME_NONE;
+      h264parse->push_codec = TRUE;
 
       res = GST_BASE_PARSE_CLASS (parent_class)->sink_event (parse, event);
       break;
diff --git a/gst/videoparsers/gsth265parse.c b/gst/videoparsers/gsth265parse.c
index d649681..5a1984d 100644
--- a/gst/videoparsers/gsth265parse.c
+++ b/gst/videoparsers/gsth265parse.c
@@ -762,12 +762,21 @@
 
     /* dispatch per NALU if needed */
     if (h265parse->split_packetized) {
+      GstBaseParseFrame tmp_frame;
+
+      gst_base_parse_frame_init (&tmp_frame);
+      tmp_frame.flags |= frame->flags;
+      tmp_frame.offset = frame->offset;
+      tmp_frame.overhead = frame->overhead;
+      tmp_frame.buffer = gst_buffer_copy_region (buffer, GST_BUFFER_COPY_ALL,
+          nalu.offset, nalu.size);
+
       /* note we don't need to come up with a sub-buffer, since
        * subsequent code only considers input buffer's metadata.
        * Real data is either taken from input by baseclass or
        * a replacement output buffer is provided anyway. */
-      gst_h265_parse_parse_frame (parse, frame);
-      ret = gst_base_parse_finish_frame (parse, frame, nl + nalu.size);
+      gst_h265_parse_parse_frame (parse, &tmp_frame);
+      ret = gst_base_parse_finish_frame (parse, &tmp_frame, nl + nalu.size);
       left -= nl + nalu.size;
     }
 
@@ -1073,6 +1082,10 @@
   if (!found)
     return NULL;
 
+  sps = h265parse->nalparser->last_sps;
+  if (!sps)
+    return NULL;
+
   buf =
       gst_buffer_new_allocate (NULL,
       23 + num_arrays + (3 * num_arrays) + vps_size + sps_size + pps_size,
@@ -1082,9 +1095,6 @@
   memset (data, 0, map.size);
   nl = h265parse->nal_length_size;
 
-  sps = h265parse->nalparser->last_sps;
-  if (!sps)
-    return NULL;
   pft = &sps->profile_tier_level;
   if (sps->vui_parameters_present_flag)
     min_spatial_segmentation_idc = sps->vui_params.min_spatial_segmentation_idc;
@@ -1340,11 +1350,20 @@
 static void
 ensure_caps_profile (GstH265Parse * h265parse, GstCaps * caps, GstH265SPS * sps)
 {
-  GstCaps *filter_caps, *peer_caps, *compat_caps;
+  GstCaps *peer_caps, *compat_caps;
 
-  filter_caps = gst_caps_new_empty_simple ("video/x-h265");
-  peer_caps =
-      gst_pad_peer_query_caps (GST_BASE_PARSE_SRC_PAD (h265parse), filter_caps);
+  peer_caps = gst_pad_get_current_caps (GST_BASE_PARSE_SRC_PAD (h265parse));
+  if (!peer_caps || !gst_caps_can_intersect (caps, peer_caps)) {
+    GstCaps *filter_caps = gst_caps_new_empty_simple ("video/x-h265");
+
+    if (peer_caps)
+      gst_caps_unref (peer_caps);
+    peer_caps =
+        gst_pad_peer_query_caps (GST_BASE_PARSE_SRC_PAD (h265parse),
+        filter_caps);
+
+    gst_caps_unref (filter_caps);
+  }
 
   if (peer_caps && !gst_caps_can_intersect (caps, peer_caps)) {
     GstStructure *structure;
@@ -1375,7 +1394,6 @@
   }
   if (peer_caps)
     gst_caps_unref (peer_caps);
-  gst_caps_unref (filter_caps);
 }
 
 static void
@@ -1557,15 +1575,22 @@
 
     src_caps = gst_pad_get_current_caps (GST_BASE_PARSE_SRC_PAD (h265parse));
 
-    if (src_caps
-        && gst_structure_has_field (gst_caps_get_structure (src_caps, 0),
-            "codec_data")) {
+    if (src_caps) {
       /* use codec data from old caps for comparison; we don't want to resend caps
          if everything is same except codec data; */
-      gst_caps_set_value (caps, "codec_data",
-          gst_structure_get_value (gst_caps_get_structure (src_caps, 0),
-              "codec_data"));
+      if (gst_structure_has_field (gst_caps_get_structure (src_caps, 0),
+              "codec_data")) {
+        gst_caps_set_value (caps, "codec_data",
+            gst_structure_get_value (gst_caps_get_structure (src_caps, 0),
+                "codec_data"));
+      } else if (!buf) {
+        GstStructure *s;
+        /* remove any left-over codec-data hanging around */
+        s = gst_caps_get_structure (caps, 0);
+        gst_structure_remove_field (s, "codec_data");
+      }
     }
+
     if (!(src_caps && gst_caps_is_strictly_equal (src_caps, caps))) {
       /* update codec data to new value */
       if (buf) {
@@ -1765,10 +1790,19 @@
     GstTagList *taglist;
     GstCaps *caps;
 
-    taglist = gst_tag_list_new_empty ();
-
     /* codec tag */
     caps = gst_pad_get_current_caps (GST_BASE_PARSE_SRC_PAD (parse));
+    if (G_UNLIKELY (caps == NULL)) {
+      if (GST_PAD_IS_FLUSHING (GST_BASE_PARSE_SRC_PAD (parse))) {
+        GST_INFO_OBJECT (parse, "Src pad is flushing");
+        return GST_FLOW_FLUSHING;
+      } else {
+        GST_INFO_OBJECT (parse, "Src pad is not negotiated!");
+        return GST_FLOW_NOT_NEGOTIATED;
+      }
+    }
+
+    taglist = gst_tag_list_new_empty ();
     gst_pb_utils_add_codec_description_to_tag_list (taglist,
         GST_TAG_VIDEO_CODEC, caps);
     gst_caps_unref (caps);
@@ -2023,7 +2057,7 @@
         off = nalu.offset + nalu.size;
       }
     }
-
+    gst_buffer_unmap (codec_data, &map);
   } else {
     GST_DEBUG_OBJECT (h265parse, "have bytestream h265");
     /* nothing to pre-process */
@@ -2188,7 +2222,7 @@
       break;
     }
     case GST_EVENT_FLUSH_STOP:
-
+      h265parse->push_codec = TRUE;
       res = GST_BASE_PARSE_CLASS (parent_class)->sink_event (parse, event);
       break;
     case GST_EVENT_SEGMENT:
diff --git a/gst/videoparsers/gstmpeg4videoparse.c b/gst/videoparsers/gstmpeg4videoparse.c
index 53db2d5..a1fd3b2 100644
--- a/gst/videoparsers/gstmpeg4videoparse.c
+++ b/gst/videoparsers/gstmpeg4videoparse.c
@@ -722,10 +722,19 @@
     GstTagList *taglist;
     GstCaps *caps;
 
-    taglist = gst_tag_list_new_empty ();
-
     /* codec tag */
     caps = gst_pad_get_current_caps (GST_BASE_PARSE_SRC_PAD (parse));
+    if (G_UNLIKELY (caps == NULL)) {
+      if (GST_PAD_IS_FLUSHING (GST_BASE_PARSE_SRC_PAD (parse))) {
+        GST_INFO_OBJECT (parse, "Src pad is flushing");
+        return GST_FLOW_FLUSHING;
+      } else {
+        GST_INFO_OBJECT (parse, "Src pad is not negotiated!");
+        return GST_FLOW_NOT_NEGOTIATED;
+      }
+    }
+
+    taglist = gst_tag_list_new_empty ();
     gst_pb_utils_add_codec_description_to_tag_list (taglist,
         GST_TAG_VIDEO_CODEC, caps);
     gst_caps_unref (caps);
diff --git a/gst/videoparsers/gstmpegvideoparse.c b/gst/videoparsers/gstmpegvideoparse.c
index 54ee13b..bf71a3e 100644
--- a/gst/videoparsers/gstmpegvideoparse.c
+++ b/gst/videoparsers/gstmpegvideoparse.c
@@ -815,6 +815,7 @@
   }
 
   if (mpvparse->config_flags & FLAG_SEQUENCE_EXT) {
+    guint8 escape = mpvparse->sequenceext.profile_level_escape_bit;
     const guint profile_c = mpvparse->sequenceext.profile;
     const guint level_c = mpvparse->sequenceext.level;
     const gchar *profile = NULL, *level = NULL;
@@ -824,20 +825,14 @@
      * 4:2:2 and Multi-view have profile = 0, with the escape bit set to 1
      */
     const gchar *const profiles[] =
-        { "high", "spatial", "snr", "main", "simple" };
+        { "4:2:2", "high", "spatial", "snr", "main", "simple" };
     /*
      * Level indication - 4 => High, 6 => High-1440, 8 => Main, 10 => Low,
      *                    except in the case of profile = 0
      */
     const gchar *const levels[] = { "high", "high-1440", "main", "low" };
 
-    if (profile_c > 0 && profile_c < 6)
-      profile = profiles[profile_c - 1];
-
-    if ((level_c > 3) && (level_c < 11) && (level_c % 2 == 0))
-      level = levels[(level_c >> 1) - 2];
-
-    if (profile_c == 8) {
+    if (escape) {
       /* Non-hierarchical profile */
       switch (level_c) {
         case 2:
@@ -863,9 +858,14 @@
         default:
           break;
       }
-    }
 
-    /* FIXME does it make sense to expose profile/level in the caps ? */
+    } else {
+      if (profile_c < 6)
+        profile = profiles[profile_c];
+
+      if ((level_c > 3) && (level_c < 11) && (level_c % 2 == 0))
+        level = levels[(level_c >> 1) - 2];
+    }
 
     GST_DEBUG_OBJECT (mpvparse, "profile:'%s' level:'%s'", profile, level);
 
@@ -948,8 +948,18 @@
     GstCaps *caps;
 
     /* codec tag */
-    taglist = gst_tag_list_new_empty ();
     caps = gst_pad_get_current_caps (GST_BASE_PARSE_SRC_PAD (parse));
+    if (G_UNLIKELY (caps == NULL)) {
+      if (GST_PAD_IS_FLUSHING (GST_BASE_PARSE_SRC_PAD (parse))) {
+        GST_INFO_OBJECT (parse, "Src pad is flushing");
+        return GST_FLOW_FLUSHING;
+      } else {
+        GST_INFO_OBJECT (parse, "Src pad is not negotiated!");
+        return GST_FLOW_NOT_NEGOTIATED;
+      }
+    }
+
+    taglist = gst_tag_list_new_empty ();
     gst_pb_utils_add_codec_description_to_tag_list (taglist,
         GST_TAG_VIDEO_CODEC, caps);
     gst_caps_unref (caps);
diff --git a/gst/videoparsers/gstpngparse.c b/gst/videoparsers/gstpngparse.c
index e08fe71..e9d0768 100644
--- a/gst/videoparsers/gstpngparse.c
+++ b/gst/videoparsers/gstpngparse.c
@@ -259,10 +259,19 @@
     GstTagList *taglist;
     GstCaps *caps;
 
-    taglist = gst_tag_list_new_empty ();
-
     /* codec tag */
     caps = gst_pad_get_current_caps (GST_BASE_PARSE_SRC_PAD (parse));
+    if (G_UNLIKELY (caps == NULL)) {
+      if (GST_PAD_IS_FLUSHING (GST_BASE_PARSE_SRC_PAD (parse))) {
+        GST_INFO_OBJECT (parse, "Src pad is flushing");
+        return GST_FLOW_FLUSHING;
+      } else {
+        GST_INFO_OBJECT (parse, "Src pad is not negotiated!");
+        return GST_FLOW_NOT_NEGOTIATED;
+      }
+    }
+
+    taglist = gst_tag_list_new_empty ();
     gst_pb_utils_add_codec_description_to_tag_list (taglist,
         GST_TAG_VIDEO_CODEC, caps);
     gst_caps_unref (caps);
diff --git a/gst/videoparsers/gstvc1parse.c b/gst/videoparsers/gstvc1parse.c
index 63de4e9..e72f4f6 100644
--- a/gst/videoparsers/gstvc1parse.c
+++ b/gst/videoparsers/gstvc1parse.c
@@ -1700,10 +1700,19 @@
     GstTagList *taglist;
     GstCaps *caps;
 
-    taglist = gst_tag_list_new_empty ();
-
     /* codec tag */
     caps = gst_pad_get_current_caps (GST_BASE_PARSE_SRC_PAD (parse));
+    if (G_UNLIKELY (caps == NULL)) {
+      if (GST_PAD_IS_FLUSHING (GST_BASE_PARSE_SRC_PAD (parse))) {
+        GST_INFO_OBJECT (parse, "Src pad is flushing");
+        return GST_FLOW_FLUSHING;
+      } else {
+        GST_INFO_OBJECT (parse, "Src pad is not negotiated!");
+        return GST_FLOW_NOT_NEGOTIATED;
+      }
+    }
+
+    taglist = gst_tag_list_new_empty ();
     gst_pb_utils_add_codec_description_to_tag_list (taglist,
         GST_TAG_VIDEO_CODEC, caps);
     gst_caps_unref (caps);
@@ -1962,6 +1971,7 @@
           g_assert_not_reached ();
           break;
       }
+      break;
 
     case VC1_STREAM_FORMAT_FRAME_LAYER:
       switch (vc1parse->input_stream_format) {
diff --git a/gst/videosignal/Makefile.in b/gst/videosignal/Makefile.in
index 21d19de..93ae9ff 100644
--- a/gst/videosignal/Makefile.in
+++ b/gst/videosignal/Makefile.in
@@ -115,16 +115,15 @@
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
 	$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
-	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gsettings.m4 \
-	$(top_srcdir)/m4/gst-fionread.m4 $(top_srcdir)/m4/gst-sdl.m4 \
-	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
-	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
-	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libgcrypt.m4 \
-	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
-	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
-	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
-	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
-	$(top_srcdir)/configure.ac
+	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gst-fionread.m4 \
+	$(top_srcdir)/m4/gst-sdl.m4 $(top_srcdir)/m4/iconv.m4 \
+	$(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \
+	$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
+	$(top_srcdir)/m4/libgcrypt.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
+	$(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
@@ -275,6 +274,8 @@
 CLUTTER_X11_LIBS = @CLUTTER_X11_LIBS@
 CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
+CUDA_CFLAGS = @CUDA_CFLAGS@
+CUDA_LIBS = @CUDA_LIBS@
 CURL_CFLAGS = @CURL_CFLAGS@
 CURL_LIBS = @CURL_LIBS@
 CXX = @CXX@
@@ -312,6 +313,8 @@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
+EGL_CFLAGS = @EGL_CFLAGS@
+EGL_LIBS = @EGL_LIBS@
 EGREP = @EGREP@
 ERROR_CFLAGS = @ERROR_CFLAGS@
 ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
@@ -320,7 +323,6 @@
 EXIF_CFLAGS = @EXIF_CFLAGS@
 EXIF_LIBS = @EXIF_LIBS@
 FAAC_LIBS = @FAAC_LIBS@
-FAAD_IS_NEAAC = @FAAD_IS_NEAAC@
 FAAD_LIBS = @FAAD_LIBS@
 FFLAGS = @FFLAGS@
 FGREP = @FGREP@
@@ -339,8 +341,9 @@
 GIO_LIBS = @GIO_LIBS@
 GIO_UNIX_CFLAGS = @GIO_UNIX_CFLAGS@
 GIO_UNIX_LIBS = @GIO_UNIX_LIBS@
+GLES2_CFLAGS = @GLES2_CFLAGS@
+GLES2_LIBS = @GLES2_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
-GLIB_COMPILE_SCHEMAS = @GLIB_COMPILE_SCHEMAS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
@@ -357,16 +360,17 @@
 GMODULE_NO_EXPORT_LIBS = @GMODULE_NO_EXPORT_LIBS@
 GMSGFMT = @GMSGFMT@
 GMSGFMT_015 = @GMSGFMT_015@
+GNUSTL_CFLAGS = @GNUSTL_CFLAGS@
+GNUSTL_LIBS = @GNUSTL_LIBS@
 GRAPHENE_CFLAGS = @GRAPHENE_CFLAGS@
 GRAPHENE_LIBS = @GRAPHENE_LIBS@
 GREP = @GREP@
-GSETTINGS_CFLAGS = @GSETTINGS_CFLAGS@
-GSETTINGS_DISABLE_SCHEMAS_COMPILE = @GSETTINGS_DISABLE_SCHEMAS_COMPILE@
-GSETTINGS_LIBS = @GSETTINGS_LIBS@
 GSM_LIBS = @GSM_LIBS@
 GSTPB_PLUGINS_DIR = @GSTPB_PLUGINS_DIR@
 GSTPB_PREFIX = @GSTPB_PREFIX@
 GST_AGE = @GST_AGE@
+GST_ALLOCATORS_CFLAGS = @GST_ALLOCATORS_CFLAGS@
+GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
 GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
 GST_API_VERSION = @GST_API_VERSION@
 GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
@@ -392,6 +396,8 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PBUTILS_CFLAGS = @GST_PBUTILS_CFLAGS@
+GST_PBUTILS_LIBS = @GST_PBUTILS_LIBS@
 GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BAD_CFLAGS = @GST_PLUGINS_BAD_CFLAGS@
@@ -417,6 +423,8 @@
 GST_PREFIX = @GST_PREFIX@
 GST_REVISION = @GST_REVISION@
 GST_TOOLS_DIR = @GST_TOOLS_DIR@
+GST_VIDEO_CFLAGS = @GST_VIDEO_CFLAGS@
+GST_VIDEO_LIBS = @GST_VIDEO_LIBS@
 GTK3_CFLAGS = @GTK3_CFLAGS@
 GTK3_GL_CFLAGS = @GTK3_GL_CFLAGS@
 GTK3_GL_LIBS = @GTK3_GL_LIBS@
@@ -518,6 +526,7 @@
 LTLIBICONV = @LTLIBICONV@
 LTLIBINTL = @LTLIBINTL@
 LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
 MANIFEST_TOOL = @MANIFEST_TOOL@
@@ -531,8 +540,6 @@
 MODPLUG_LIBS = @MODPLUG_LIBS@
 MPEG2ENC_CFLAGS = @MPEG2ENC_CFLAGS@
 MPEG2ENC_LIBS = @MPEG2ENC_LIBS@
-MPG123_CFLAGS = @MPG123_CFLAGS@
-MPG123_LIBS = @MPG123_LIBS@
 MPLEX_CFLAGS = @MPLEX_CFLAGS@
 MPLEX_LDFLAGS = @MPLEX_LDFLAGS@
 MPLEX_LIBS = @MPLEX_LIBS@
@@ -548,6 +555,8 @@
 NETTLE_LIBS = @NETTLE_LIBS@
 NM = @NM@
 NMEDIT = @NMEDIT@
+NVENCODE_CFLAGS = @NVENCODE_CFLAGS@
+NVENCODE_LIBS = @NVENCODE_LIBS@
 OBJC = @OBJC@
 OBJCDEPMODE = @OBJCDEPMODE@
 OBJCFLAGS = @OBJCFLAGS@
@@ -605,16 +614,18 @@
 PYTHON_PLATFORM = @PYTHON_PLATFORM@
 PYTHON_PREFIX = @PYTHON_PREFIX@
 PYTHON_VERSION = @PYTHON_VERSION@
+QT_ANDROID_CFLAGS = @QT_ANDROID_CFLAGS@
+QT_ANDROID_LIBS = @QT_ANDROID_LIBS@
 QT_CFLAGS = @QT_CFLAGS@
 QT_LIBS = @QT_LIBS@
+QT_MAC_CFLAGS = @QT_MAC_CFLAGS@
+QT_MAC_LIBS = @QT_MAC_LIBS@
 QT_WAYLAND_CFLAGS = @QT_WAYLAND_CFLAGS@
 QT_WAYLAND_LIBS = @QT_WAYLAND_LIBS@
 QT_X11_CFLAGS = @QT_X11_CFLAGS@
 QT_X11_LIBS = @QT_X11_LIBS@
 RANLIB = @RANLIB@
 RCC = @RCC@
-RSVG_2_36_2_CFLAGS = @RSVG_2_36_2_CFLAGS@
-RSVG_2_36_2_LIBS = @RSVG_2_36_2_LIBS@
 RSVG_CFLAGS = @RSVG_CFLAGS@
 RSVG_LIBS = @RSVG_LIBS@
 RTMP_CFLAGS = @RTMP_CFLAGS@
@@ -666,6 +677,7 @@
 VOAACENC_LIBS = @VOAACENC_LIBS@
 VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
 VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VULKAN_LIBS = @VULKAN_LIBS@
 WARNING_CFLAGS = @WARNING_CFLAGS@
 WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
 WARNING_OBJCFLAGS = @WARNING_OBJCFLAGS@
@@ -676,6 +688,7 @@
 WAYLAND_LIBS = @WAYLAND_LIBS@
 WEBP_CFLAGS = @WEBP_CFLAGS@
 WEBP_LIBS = @WEBP_LIBS@
+WGET = @WGET@
 WILDMIDI_CFLAGS = @WILDMIDI_CFLAGS@
 WILDMIDI_LIBS = @WILDMIDI_LIBS@
 WINKS_LIBS = @WINKS_LIBS@
@@ -685,6 +698,8 @@
 X11_LIBS = @X11_LIBS@
 X265_CFLAGS = @X265_CFLAGS@
 X265_LIBS = @X265_LIBS@
+XCB_CFLAGS = @XCB_CFLAGS@
+XCB_LIBS = @XCB_LIBS@
 XCOMPOSITE_CFLAGS = @XCOMPOSITE_CFLAGS@
 XCOMPOSITE_LIBS = @XCOMPOSITE_LIBS@
 XGETTEXT = @XGETTEXT@
@@ -722,7 +737,6 @@
 docdir = @docdir@
 dvidir = @dvidir@
 exec_prefix = @exec_prefix@
-gsettingsschemadir = @gsettingsschemadir@
 host = @host@
 host_alias = @host_alias@
 host_cpu = @host_cpu@
diff --git a/gst/videosignal/gstsimplevideomark.c b/gst/videosignal/gstsimplevideomark.c
index 9d57b52..2a527c3 100644
--- a/gst/videosignal/gstsimplevideomark.c
+++ b/gst/videosignal/gstsimplevideomark.c
@@ -36,7 +36,7 @@
  * <refsect2>
  * <title>Example launch line</title>
  * |[
- * gst-launch videotestsrc ! simplevideomark ! ximagesink
+ * gst-launch-1.0 videotestsrc ! simplevideomark ! videoconvert ! ximagesink
  * ]| Add the default black/white squares at the bottom left of the video frames.
  * </refsect2>
  */
diff --git a/gst/videosignal/gstsimplevideomarkdetect.c b/gst/videosignal/gstsimplevideomarkdetect.c
index d5f093f..1e95c81 100644
--- a/gst/videosignal/gstsimplevideomarkdetect.c
+++ b/gst/videosignal/gstsimplevideomarkdetect.c
@@ -87,7 +87,7 @@
  * <refsect2>
  * <title>Example launch line</title>
  * |[
- * gst-launch videotestsrc ! simplevideomarkdetect ! videoconvert ! ximagesink
+ * gst-launch-1.0 videotestsrc ! simplevideomarkdetect ! videoconvert ! ximagesink
  * ]|
  * </refsect2>
  */
diff --git a/gst/videosignal/gstvideoanalyse.c b/gst/videosignal/gstvideoanalyse.c
index 3ca4d03..b7ed7e1 100644
--- a/gst/videosignal/gstvideoanalyse.c
+++ b/gst/videosignal/gstvideoanalyse.c
@@ -72,7 +72,7 @@
  * <refsect2>
  * <title>Example launch line</title>
  * |[
- * gst-launch -m videotestsrc ! videoanalyse ! videoconvert ! ximagesink
+ * gst-launch-1.0 -m videotestsrc ! videoanalyse ! videoconvert ! ximagesink
  * ]| This pipeline emits messages to the console for each frame that has been analysed. 
  * </refsect2>
  */
diff --git a/gst/vmnc/Makefile.in b/gst/vmnc/Makefile.in
index 77c60cc..3ad941a 100644
--- a/gst/vmnc/Makefile.in
+++ b/gst/vmnc/Makefile.in
@@ -116,16 +116,15 @@
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
 	$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
-	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gsettings.m4 \
-	$(top_srcdir)/m4/gst-fionread.m4 $(top_srcdir)/m4/gst-sdl.m4 \
-	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
-	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
-	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libgcrypt.m4 \
-	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
-	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
-	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
-	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
-	$(top_srcdir)/configure.ac
+	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gst-fionread.m4 \
+	$(top_srcdir)/m4/gst-sdl.m4 $(top_srcdir)/m4/iconv.m4 \
+	$(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \
+	$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
+	$(top_srcdir)/m4/libgcrypt.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
+	$(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \
@@ -274,6 +273,8 @@
 CLUTTER_X11_LIBS = @CLUTTER_X11_LIBS@
 CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
+CUDA_CFLAGS = @CUDA_CFLAGS@
+CUDA_LIBS = @CUDA_LIBS@
 CURL_CFLAGS = @CURL_CFLAGS@
 CURL_LIBS = @CURL_LIBS@
 CXX = @CXX@
@@ -311,6 +312,8 @@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
+EGL_CFLAGS = @EGL_CFLAGS@
+EGL_LIBS = @EGL_LIBS@
 EGREP = @EGREP@
 ERROR_CFLAGS = @ERROR_CFLAGS@
 ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
@@ -319,7 +322,6 @@
 EXIF_CFLAGS = @EXIF_CFLAGS@
 EXIF_LIBS = @EXIF_LIBS@
 FAAC_LIBS = @FAAC_LIBS@
-FAAD_IS_NEAAC = @FAAD_IS_NEAAC@
 FAAD_LIBS = @FAAD_LIBS@
 FFLAGS = @FFLAGS@
 FGREP = @FGREP@
@@ -338,8 +340,9 @@
 GIO_LIBS = @GIO_LIBS@
 GIO_UNIX_CFLAGS = @GIO_UNIX_CFLAGS@
 GIO_UNIX_LIBS = @GIO_UNIX_LIBS@
+GLES2_CFLAGS = @GLES2_CFLAGS@
+GLES2_LIBS = @GLES2_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
-GLIB_COMPILE_SCHEMAS = @GLIB_COMPILE_SCHEMAS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
@@ -356,16 +359,17 @@
 GMODULE_NO_EXPORT_LIBS = @GMODULE_NO_EXPORT_LIBS@
 GMSGFMT = @GMSGFMT@
 GMSGFMT_015 = @GMSGFMT_015@
+GNUSTL_CFLAGS = @GNUSTL_CFLAGS@
+GNUSTL_LIBS = @GNUSTL_LIBS@
 GRAPHENE_CFLAGS = @GRAPHENE_CFLAGS@
 GRAPHENE_LIBS = @GRAPHENE_LIBS@
 GREP = @GREP@
-GSETTINGS_CFLAGS = @GSETTINGS_CFLAGS@
-GSETTINGS_DISABLE_SCHEMAS_COMPILE = @GSETTINGS_DISABLE_SCHEMAS_COMPILE@
-GSETTINGS_LIBS = @GSETTINGS_LIBS@
 GSM_LIBS = @GSM_LIBS@
 GSTPB_PLUGINS_DIR = @GSTPB_PLUGINS_DIR@
 GSTPB_PREFIX = @GSTPB_PREFIX@
 GST_AGE = @GST_AGE@
+GST_ALLOCATORS_CFLAGS = @GST_ALLOCATORS_CFLAGS@
+GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
 GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
 GST_API_VERSION = @GST_API_VERSION@
 GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
@@ -391,6 +395,8 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PBUTILS_CFLAGS = @GST_PBUTILS_CFLAGS@
+GST_PBUTILS_LIBS = @GST_PBUTILS_LIBS@
 GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BAD_CFLAGS = @GST_PLUGINS_BAD_CFLAGS@
@@ -416,6 +422,8 @@
 GST_PREFIX = @GST_PREFIX@
 GST_REVISION = @GST_REVISION@
 GST_TOOLS_DIR = @GST_TOOLS_DIR@
+GST_VIDEO_CFLAGS = @GST_VIDEO_CFLAGS@
+GST_VIDEO_LIBS = @GST_VIDEO_LIBS@
 GTK3_CFLAGS = @GTK3_CFLAGS@
 GTK3_GL_CFLAGS = @GTK3_GL_CFLAGS@
 GTK3_GL_LIBS = @GTK3_GL_LIBS@
@@ -517,6 +525,7 @@
 LTLIBICONV = @LTLIBICONV@
 LTLIBINTL = @LTLIBINTL@
 LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
 MANIFEST_TOOL = @MANIFEST_TOOL@
@@ -530,8 +539,6 @@
 MODPLUG_LIBS = @MODPLUG_LIBS@
 MPEG2ENC_CFLAGS = @MPEG2ENC_CFLAGS@
 MPEG2ENC_LIBS = @MPEG2ENC_LIBS@
-MPG123_CFLAGS = @MPG123_CFLAGS@
-MPG123_LIBS = @MPG123_LIBS@
 MPLEX_CFLAGS = @MPLEX_CFLAGS@
 MPLEX_LDFLAGS = @MPLEX_LDFLAGS@
 MPLEX_LIBS = @MPLEX_LIBS@
@@ -547,6 +554,8 @@
 NETTLE_LIBS = @NETTLE_LIBS@
 NM = @NM@
 NMEDIT = @NMEDIT@
+NVENCODE_CFLAGS = @NVENCODE_CFLAGS@
+NVENCODE_LIBS = @NVENCODE_LIBS@
 OBJC = @OBJC@
 OBJCDEPMODE = @OBJCDEPMODE@
 OBJCFLAGS = @OBJCFLAGS@
@@ -604,16 +613,18 @@
 PYTHON_PLATFORM = @PYTHON_PLATFORM@
 PYTHON_PREFIX = @PYTHON_PREFIX@
 PYTHON_VERSION = @PYTHON_VERSION@
+QT_ANDROID_CFLAGS = @QT_ANDROID_CFLAGS@
+QT_ANDROID_LIBS = @QT_ANDROID_LIBS@
 QT_CFLAGS = @QT_CFLAGS@
 QT_LIBS = @QT_LIBS@
+QT_MAC_CFLAGS = @QT_MAC_CFLAGS@
+QT_MAC_LIBS = @QT_MAC_LIBS@
 QT_WAYLAND_CFLAGS = @QT_WAYLAND_CFLAGS@
 QT_WAYLAND_LIBS = @QT_WAYLAND_LIBS@
 QT_X11_CFLAGS = @QT_X11_CFLAGS@
 QT_X11_LIBS = @QT_X11_LIBS@
 RANLIB = @RANLIB@
 RCC = @RCC@
-RSVG_2_36_2_CFLAGS = @RSVG_2_36_2_CFLAGS@
-RSVG_2_36_2_LIBS = @RSVG_2_36_2_LIBS@
 RSVG_CFLAGS = @RSVG_CFLAGS@
 RSVG_LIBS = @RSVG_LIBS@
 RTMP_CFLAGS = @RTMP_CFLAGS@
@@ -665,6 +676,7 @@
 VOAACENC_LIBS = @VOAACENC_LIBS@
 VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
 VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VULKAN_LIBS = @VULKAN_LIBS@
 WARNING_CFLAGS = @WARNING_CFLAGS@
 WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
 WARNING_OBJCFLAGS = @WARNING_OBJCFLAGS@
@@ -675,6 +687,7 @@
 WAYLAND_LIBS = @WAYLAND_LIBS@
 WEBP_CFLAGS = @WEBP_CFLAGS@
 WEBP_LIBS = @WEBP_LIBS@
+WGET = @WGET@
 WILDMIDI_CFLAGS = @WILDMIDI_CFLAGS@
 WILDMIDI_LIBS = @WILDMIDI_LIBS@
 WINKS_LIBS = @WINKS_LIBS@
@@ -684,6 +697,8 @@
 X11_LIBS = @X11_LIBS@
 X265_CFLAGS = @X265_CFLAGS@
 X265_LIBS = @X265_LIBS@
+XCB_CFLAGS = @XCB_CFLAGS@
+XCB_LIBS = @XCB_LIBS@
 XCOMPOSITE_CFLAGS = @XCOMPOSITE_CFLAGS@
 XCOMPOSITE_LIBS = @XCOMPOSITE_LIBS@
 XGETTEXT = @XGETTEXT@
@@ -721,7 +736,6 @@
 docdir = @docdir@
 dvidir = @dvidir@
 exec_prefix = @exec_prefix@
-gsettingsschemadir = @gsettingsschemadir@
 host = @host@
 host_alias = @host_alias@
 host_cpu = @host_cpu@
diff --git a/gst/y4m/Makefile.in b/gst/y4m/Makefile.in
index 0d66844..a23b956 100644
--- a/gst/y4m/Makefile.in
+++ b/gst/y4m/Makefile.in
@@ -116,16 +116,15 @@
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
 	$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
-	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gsettings.m4 \
-	$(top_srcdir)/m4/gst-fionread.m4 $(top_srcdir)/m4/gst-sdl.m4 \
-	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
-	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
-	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libgcrypt.m4 \
-	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
-	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
-	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
-	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
-	$(top_srcdir)/configure.ac
+	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gst-fionread.m4 \
+	$(top_srcdir)/m4/gst-sdl.m4 $(top_srcdir)/m4/iconv.m4 \
+	$(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \
+	$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
+	$(top_srcdir)/m4/libgcrypt.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
+	$(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \
@@ -274,6 +273,8 @@
 CLUTTER_X11_LIBS = @CLUTTER_X11_LIBS@
 CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
+CUDA_CFLAGS = @CUDA_CFLAGS@
+CUDA_LIBS = @CUDA_LIBS@
 CURL_CFLAGS = @CURL_CFLAGS@
 CURL_LIBS = @CURL_LIBS@
 CXX = @CXX@
@@ -311,6 +312,8 @@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
+EGL_CFLAGS = @EGL_CFLAGS@
+EGL_LIBS = @EGL_LIBS@
 EGREP = @EGREP@
 ERROR_CFLAGS = @ERROR_CFLAGS@
 ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
@@ -319,7 +322,6 @@
 EXIF_CFLAGS = @EXIF_CFLAGS@
 EXIF_LIBS = @EXIF_LIBS@
 FAAC_LIBS = @FAAC_LIBS@
-FAAD_IS_NEAAC = @FAAD_IS_NEAAC@
 FAAD_LIBS = @FAAD_LIBS@
 FFLAGS = @FFLAGS@
 FGREP = @FGREP@
@@ -338,8 +340,9 @@
 GIO_LIBS = @GIO_LIBS@
 GIO_UNIX_CFLAGS = @GIO_UNIX_CFLAGS@
 GIO_UNIX_LIBS = @GIO_UNIX_LIBS@
+GLES2_CFLAGS = @GLES2_CFLAGS@
+GLES2_LIBS = @GLES2_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
-GLIB_COMPILE_SCHEMAS = @GLIB_COMPILE_SCHEMAS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
@@ -356,16 +359,17 @@
 GMODULE_NO_EXPORT_LIBS = @GMODULE_NO_EXPORT_LIBS@
 GMSGFMT = @GMSGFMT@
 GMSGFMT_015 = @GMSGFMT_015@
+GNUSTL_CFLAGS = @GNUSTL_CFLAGS@
+GNUSTL_LIBS = @GNUSTL_LIBS@
 GRAPHENE_CFLAGS = @GRAPHENE_CFLAGS@
 GRAPHENE_LIBS = @GRAPHENE_LIBS@
 GREP = @GREP@
-GSETTINGS_CFLAGS = @GSETTINGS_CFLAGS@
-GSETTINGS_DISABLE_SCHEMAS_COMPILE = @GSETTINGS_DISABLE_SCHEMAS_COMPILE@
-GSETTINGS_LIBS = @GSETTINGS_LIBS@
 GSM_LIBS = @GSM_LIBS@
 GSTPB_PLUGINS_DIR = @GSTPB_PLUGINS_DIR@
 GSTPB_PREFIX = @GSTPB_PREFIX@
 GST_AGE = @GST_AGE@
+GST_ALLOCATORS_CFLAGS = @GST_ALLOCATORS_CFLAGS@
+GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
 GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
 GST_API_VERSION = @GST_API_VERSION@
 GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
@@ -391,6 +395,8 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PBUTILS_CFLAGS = @GST_PBUTILS_CFLAGS@
+GST_PBUTILS_LIBS = @GST_PBUTILS_LIBS@
 GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BAD_CFLAGS = @GST_PLUGINS_BAD_CFLAGS@
@@ -416,6 +422,8 @@
 GST_PREFIX = @GST_PREFIX@
 GST_REVISION = @GST_REVISION@
 GST_TOOLS_DIR = @GST_TOOLS_DIR@
+GST_VIDEO_CFLAGS = @GST_VIDEO_CFLAGS@
+GST_VIDEO_LIBS = @GST_VIDEO_LIBS@
 GTK3_CFLAGS = @GTK3_CFLAGS@
 GTK3_GL_CFLAGS = @GTK3_GL_CFLAGS@
 GTK3_GL_LIBS = @GTK3_GL_LIBS@
@@ -517,6 +525,7 @@
 LTLIBICONV = @LTLIBICONV@
 LTLIBINTL = @LTLIBINTL@
 LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
 MANIFEST_TOOL = @MANIFEST_TOOL@
@@ -530,8 +539,6 @@
 MODPLUG_LIBS = @MODPLUG_LIBS@
 MPEG2ENC_CFLAGS = @MPEG2ENC_CFLAGS@
 MPEG2ENC_LIBS = @MPEG2ENC_LIBS@
-MPG123_CFLAGS = @MPG123_CFLAGS@
-MPG123_LIBS = @MPG123_LIBS@
 MPLEX_CFLAGS = @MPLEX_CFLAGS@
 MPLEX_LDFLAGS = @MPLEX_LDFLAGS@
 MPLEX_LIBS = @MPLEX_LIBS@
@@ -547,6 +554,8 @@
 NETTLE_LIBS = @NETTLE_LIBS@
 NM = @NM@
 NMEDIT = @NMEDIT@
+NVENCODE_CFLAGS = @NVENCODE_CFLAGS@
+NVENCODE_LIBS = @NVENCODE_LIBS@
 OBJC = @OBJC@
 OBJCDEPMODE = @OBJCDEPMODE@
 OBJCFLAGS = @OBJCFLAGS@
@@ -604,16 +613,18 @@
 PYTHON_PLATFORM = @PYTHON_PLATFORM@
 PYTHON_PREFIX = @PYTHON_PREFIX@
 PYTHON_VERSION = @PYTHON_VERSION@
+QT_ANDROID_CFLAGS = @QT_ANDROID_CFLAGS@
+QT_ANDROID_LIBS = @QT_ANDROID_LIBS@
 QT_CFLAGS = @QT_CFLAGS@
 QT_LIBS = @QT_LIBS@
+QT_MAC_CFLAGS = @QT_MAC_CFLAGS@
+QT_MAC_LIBS = @QT_MAC_LIBS@
 QT_WAYLAND_CFLAGS = @QT_WAYLAND_CFLAGS@
 QT_WAYLAND_LIBS = @QT_WAYLAND_LIBS@
 QT_X11_CFLAGS = @QT_X11_CFLAGS@
 QT_X11_LIBS = @QT_X11_LIBS@
 RANLIB = @RANLIB@
 RCC = @RCC@
-RSVG_2_36_2_CFLAGS = @RSVG_2_36_2_CFLAGS@
-RSVG_2_36_2_LIBS = @RSVG_2_36_2_LIBS@
 RSVG_CFLAGS = @RSVG_CFLAGS@
 RSVG_LIBS = @RSVG_LIBS@
 RTMP_CFLAGS = @RTMP_CFLAGS@
@@ -665,6 +676,7 @@
 VOAACENC_LIBS = @VOAACENC_LIBS@
 VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
 VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VULKAN_LIBS = @VULKAN_LIBS@
 WARNING_CFLAGS = @WARNING_CFLAGS@
 WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
 WARNING_OBJCFLAGS = @WARNING_OBJCFLAGS@
@@ -675,6 +687,7 @@
 WAYLAND_LIBS = @WAYLAND_LIBS@
 WEBP_CFLAGS = @WEBP_CFLAGS@
 WEBP_LIBS = @WEBP_LIBS@
+WGET = @WGET@
 WILDMIDI_CFLAGS = @WILDMIDI_CFLAGS@
 WILDMIDI_LIBS = @WILDMIDI_LIBS@
 WINKS_LIBS = @WINKS_LIBS@
@@ -684,6 +697,8 @@
 X11_LIBS = @X11_LIBS@
 X265_CFLAGS = @X265_CFLAGS@
 X265_LIBS = @X265_LIBS@
+XCB_CFLAGS = @XCB_CFLAGS@
+XCB_LIBS = @XCB_LIBS@
 XCOMPOSITE_CFLAGS = @XCOMPOSITE_CFLAGS@
 XCOMPOSITE_LIBS = @XCOMPOSITE_LIBS@
 XGETTEXT = @XGETTEXT@
@@ -721,7 +736,6 @@
 docdir = @docdir@
 dvidir = @dvidir@
 exec_prefix = @exec_prefix@
-gsettingsschemadir = @gsettingsschemadir@
 host = @host@
 host_alias = @host_alias@
 host_cpu = @host_cpu@
diff --git a/gst/y4m/gsty4mdec.c b/gst/y4m/gsty4mdec.c
index 6bf27a8..c6b2065 100644
--- a/gst/y4m/gsty4mdec.c
+++ b/gst/y4m/gsty4mdec.c
@@ -24,7 +24,7 @@
  * <refsect2>
  * <title>Example launch line</title>
  * |[
- * gst-launch -v filesrc location=file.y4m ! y4mdec ! xvimagesink
+ * gst-launch-1.0 -v filesrc location=file.y4m ! y4mdec ! xvimagesink
  * ]|
  * </refsect2>
  */
diff --git a/gst/yadif/Makefile.in b/gst/yadif/Makefile.in
index 586fd74..24883f6 100644
--- a/gst/yadif/Makefile.in
+++ b/gst/yadif/Makefile.in
@@ -115,16 +115,15 @@
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
 	$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
-	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gsettings.m4 \
-	$(top_srcdir)/m4/gst-fionread.m4 $(top_srcdir)/m4/gst-sdl.m4 \
-	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
-	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
-	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libgcrypt.m4 \
-	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
-	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
-	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
-	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
-	$(top_srcdir)/configure.ac
+	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gst-fionread.m4 \
+	$(top_srcdir)/m4/gst-sdl.m4 $(top_srcdir)/m4/iconv.m4 \
+	$(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \
+	$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
+	$(top_srcdir)/m4/libgcrypt.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
+	$(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
@@ -272,6 +271,8 @@
 CLUTTER_X11_LIBS = @CLUTTER_X11_LIBS@
 CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
+CUDA_CFLAGS = @CUDA_CFLAGS@
+CUDA_LIBS = @CUDA_LIBS@
 CURL_CFLAGS = @CURL_CFLAGS@
 CURL_LIBS = @CURL_LIBS@
 CXX = @CXX@
@@ -309,6 +310,8 @@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
+EGL_CFLAGS = @EGL_CFLAGS@
+EGL_LIBS = @EGL_LIBS@
 EGREP = @EGREP@
 ERROR_CFLAGS = @ERROR_CFLAGS@
 ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
@@ -317,7 +320,6 @@
 EXIF_CFLAGS = @EXIF_CFLAGS@
 EXIF_LIBS = @EXIF_LIBS@
 FAAC_LIBS = @FAAC_LIBS@
-FAAD_IS_NEAAC = @FAAD_IS_NEAAC@
 FAAD_LIBS = @FAAD_LIBS@
 FFLAGS = @FFLAGS@
 FGREP = @FGREP@
@@ -336,8 +338,9 @@
 GIO_LIBS = @GIO_LIBS@
 GIO_UNIX_CFLAGS = @GIO_UNIX_CFLAGS@
 GIO_UNIX_LIBS = @GIO_UNIX_LIBS@
+GLES2_CFLAGS = @GLES2_CFLAGS@
+GLES2_LIBS = @GLES2_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
-GLIB_COMPILE_SCHEMAS = @GLIB_COMPILE_SCHEMAS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
@@ -354,16 +357,17 @@
 GMODULE_NO_EXPORT_LIBS = @GMODULE_NO_EXPORT_LIBS@
 GMSGFMT = @GMSGFMT@
 GMSGFMT_015 = @GMSGFMT_015@
+GNUSTL_CFLAGS = @GNUSTL_CFLAGS@
+GNUSTL_LIBS = @GNUSTL_LIBS@
 GRAPHENE_CFLAGS = @GRAPHENE_CFLAGS@
 GRAPHENE_LIBS = @GRAPHENE_LIBS@
 GREP = @GREP@
-GSETTINGS_CFLAGS = @GSETTINGS_CFLAGS@
-GSETTINGS_DISABLE_SCHEMAS_COMPILE = @GSETTINGS_DISABLE_SCHEMAS_COMPILE@
-GSETTINGS_LIBS = @GSETTINGS_LIBS@
 GSM_LIBS = @GSM_LIBS@
 GSTPB_PLUGINS_DIR = @GSTPB_PLUGINS_DIR@
 GSTPB_PREFIX = @GSTPB_PREFIX@
 GST_AGE = @GST_AGE@
+GST_ALLOCATORS_CFLAGS = @GST_ALLOCATORS_CFLAGS@
+GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
 GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
 GST_API_VERSION = @GST_API_VERSION@
 GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
@@ -389,6 +393,8 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PBUTILS_CFLAGS = @GST_PBUTILS_CFLAGS@
+GST_PBUTILS_LIBS = @GST_PBUTILS_LIBS@
 GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BAD_CFLAGS = @GST_PLUGINS_BAD_CFLAGS@
@@ -414,6 +420,8 @@
 GST_PREFIX = @GST_PREFIX@
 GST_REVISION = @GST_REVISION@
 GST_TOOLS_DIR = @GST_TOOLS_DIR@
+GST_VIDEO_CFLAGS = @GST_VIDEO_CFLAGS@
+GST_VIDEO_LIBS = @GST_VIDEO_LIBS@
 GTK3_CFLAGS = @GTK3_CFLAGS@
 GTK3_GL_CFLAGS = @GTK3_GL_CFLAGS@
 GTK3_GL_LIBS = @GTK3_GL_LIBS@
@@ -515,6 +523,7 @@
 LTLIBICONV = @LTLIBICONV@
 LTLIBINTL = @LTLIBINTL@
 LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
 MANIFEST_TOOL = @MANIFEST_TOOL@
@@ -528,8 +537,6 @@
 MODPLUG_LIBS = @MODPLUG_LIBS@
 MPEG2ENC_CFLAGS = @MPEG2ENC_CFLAGS@
 MPEG2ENC_LIBS = @MPEG2ENC_LIBS@
-MPG123_CFLAGS = @MPG123_CFLAGS@
-MPG123_LIBS = @MPG123_LIBS@
 MPLEX_CFLAGS = @MPLEX_CFLAGS@
 MPLEX_LDFLAGS = @MPLEX_LDFLAGS@
 MPLEX_LIBS = @MPLEX_LIBS@
@@ -545,6 +552,8 @@
 NETTLE_LIBS = @NETTLE_LIBS@
 NM = @NM@
 NMEDIT = @NMEDIT@
+NVENCODE_CFLAGS = @NVENCODE_CFLAGS@
+NVENCODE_LIBS = @NVENCODE_LIBS@
 OBJC = @OBJC@
 OBJCDEPMODE = @OBJCDEPMODE@
 OBJCFLAGS = @OBJCFLAGS@
@@ -602,16 +611,18 @@
 PYTHON_PLATFORM = @PYTHON_PLATFORM@
 PYTHON_PREFIX = @PYTHON_PREFIX@
 PYTHON_VERSION = @PYTHON_VERSION@
+QT_ANDROID_CFLAGS = @QT_ANDROID_CFLAGS@
+QT_ANDROID_LIBS = @QT_ANDROID_LIBS@
 QT_CFLAGS = @QT_CFLAGS@
 QT_LIBS = @QT_LIBS@
+QT_MAC_CFLAGS = @QT_MAC_CFLAGS@
+QT_MAC_LIBS = @QT_MAC_LIBS@
 QT_WAYLAND_CFLAGS = @QT_WAYLAND_CFLAGS@
 QT_WAYLAND_LIBS = @QT_WAYLAND_LIBS@
 QT_X11_CFLAGS = @QT_X11_CFLAGS@
 QT_X11_LIBS = @QT_X11_LIBS@
 RANLIB = @RANLIB@
 RCC = @RCC@
-RSVG_2_36_2_CFLAGS = @RSVG_2_36_2_CFLAGS@
-RSVG_2_36_2_LIBS = @RSVG_2_36_2_LIBS@
 RSVG_CFLAGS = @RSVG_CFLAGS@
 RSVG_LIBS = @RSVG_LIBS@
 RTMP_CFLAGS = @RTMP_CFLAGS@
@@ -663,6 +674,7 @@
 VOAACENC_LIBS = @VOAACENC_LIBS@
 VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
 VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VULKAN_LIBS = @VULKAN_LIBS@
 WARNING_CFLAGS = @WARNING_CFLAGS@
 WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
 WARNING_OBJCFLAGS = @WARNING_OBJCFLAGS@
@@ -673,6 +685,7 @@
 WAYLAND_LIBS = @WAYLAND_LIBS@
 WEBP_CFLAGS = @WEBP_CFLAGS@
 WEBP_LIBS = @WEBP_LIBS@
+WGET = @WGET@
 WILDMIDI_CFLAGS = @WILDMIDI_CFLAGS@
 WILDMIDI_LIBS = @WILDMIDI_LIBS@
 WINKS_LIBS = @WINKS_LIBS@
@@ -682,6 +695,8 @@
 X11_LIBS = @X11_LIBS@
 X265_CFLAGS = @X265_CFLAGS@
 X265_LIBS = @X265_LIBS@
+XCB_CFLAGS = @XCB_CFLAGS@
+XCB_LIBS = @XCB_LIBS@
 XCOMPOSITE_CFLAGS = @XCOMPOSITE_CFLAGS@
 XCOMPOSITE_LIBS = @XCOMPOSITE_LIBS@
 XGETTEXT = @XGETTEXT@
@@ -719,7 +734,6 @@
 docdir = @docdir@
 dvidir = @dvidir@
 exec_prefix = @exec_prefix@
-gsettingsschemadir = @gsettingsschemadir@
 host = @host@
 host_alias = @host_alias@
 host_cpu = @host_cpu@
diff --git a/gst/yadif/gstyadif.c b/gst/yadif/gstyadif.c
index e4fed61..1dcf2ca 100644
--- a/gst/yadif/gstyadif.c
+++ b/gst/yadif/gstyadif.c
@@ -29,7 +29,7 @@
  * <refsect2>
  * <title>Example launch line</title>
  * |[
- * gst-launch -v videotestsrc pattern=ball ! interlace ! yadif ! xvimagesink
+ * gst-launch-1.0 -v videotestsrc pattern=ball ! interlace ! yadif ! xvimagesink
  * ]|
  * This pipeline creates an interlaced test pattern, and then deinterlaces
  * it using the yadif filter.
@@ -243,8 +243,8 @@
     gst_value_list_append_value (&value, &v);
 
     gst_caps_set_value (othercaps, "interlace-mode", &value);
-    g_value_reset (&value);
-    g_value_reset (&v);
+    g_value_unset (&value);
+    g_value_unset (&v);
   } else {
     gst_caps_set_simple (othercaps, "interlace-mode", G_TYPE_STRING,
         "progressive", NULL);
diff --git a/gst/yadif/vf_yadif.c b/gst/yadif/vf_yadif.c
index 82e9e9e..a0bec4a 100644
--- a/gst/yadif/vf_yadif.c
+++ b/gst/yadif/vf_yadif.c
@@ -56,12 +56,15 @@
         int temporal_diff2 =(FFABS(next[mrefs] - c) + FFABS(next[prefs] - e) )>>1; \
         int diff = FFMAX3(temporal_diff0 >> 1, temporal_diff1, temporal_diff2); \
         int spatial_pred = (c+e) >> 1; \
-        int spatial_score = FFABS(cur[mrefs - 1] - cur[prefs - 1]) + FFABS(c-e) \
-                          + FFABS(cur[mrefs + 1] - cur[prefs + 1]) - 1; \
+        int spatial_score = -1; \
  \
-        CHECK(-1) CHECK(-2) }} }} \
-        CHECK( 1) CHECK( 2) }} }} \
+        if (mrefs > 0 && prefs > 0) { \
+            spatial_score = FFABS(cur[mrefs - 1] - cur[prefs - 1]) + FFABS(c-e) \
+                            + FFABS(cur[mrefs + 1] - cur[prefs + 1]) - 1; \
  \
+            CHECK(-1) CHECK(-2) }} }} \
+            CHECK( 1) CHECK( 2) }} }} \
+        } \
         if (mode < 2) { \
             int b = (prev2[2 * mrefs] + next2[2 * mrefs])>>1; \
             int f = (prev2[2 * prefs] + next2[2 * prefs])>>1; \
diff --git a/ltmain.sh b/ltmain.sh
index bffda54..147d758 100644
--- a/ltmain.sh
+++ b/ltmain.sh
@@ -1,9 +1,12 @@
+#! /bin/sh
+## DO NOT EDIT - This file generated from ./build-aux/ltmain.in
+##               by inline-source v2014-01-03.01
 
-# libtool (GNU libtool) 2.4.2
+# libtool (GNU libtool) 2.4.6
+# Provide generalized library-building support services.
 # Written by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996
 
-# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, 2006,
-# 2007, 2008, 2009, 2010, 2011 Free Software Foundation, Inc.
+# Copyright (C) 1996-2015 Free Software Foundation, Inc.
 # This is free software; see the source for copying conditions.  There is NO
 # warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
 
@@ -23,166 +26,670 @@
 # General Public License for more details.
 #
 # You should have received a copy of the GNU General Public License
-# along with GNU Libtool; see the file COPYING.  If not, a copy
-# can be downloaded from http://www.gnu.org/licenses/gpl.html,
-# or obtained by writing to the Free Software Foundation, Inc.,
-# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
-# Usage: $progname [OPTION]... [MODE-ARG]...
-#
-# Provide generalized library-building support services.
-#
-#       --config             show all configuration variables
-#       --debug              enable verbose shell tracing
-#   -n, --dry-run            display commands without modifying any files
-#       --features           display basic configuration information and exit
-#       --mode=MODE          use operation mode MODE
-#       --preserve-dup-deps  don't remove duplicate dependency libraries
-#       --quiet, --silent    don't print informational messages
-#       --no-quiet, --no-silent
-#                            print informational messages (default)
-#       --no-warn            don't display warning messages
-#       --tag=TAG            use configuration variables from tag TAG
-#   -v, --verbose            print more informational messages than default
-#       --no-verbose         don't print the extra informational messages
-#       --version            print version information
-#   -h, --help, --help-all   print short, long, or detailed help message
-#
-# MODE must be one of the following:
-#
-#         clean              remove files from the build directory
-#         compile            compile a source file into a libtool object
-#         execute            automatically set library path, then run a program
-#         finish             complete the installation of libtool libraries
-#         install            install libraries or executables
-#         link               create a library or an executable
-#         uninstall          remove libraries from an installed directory
-#
-# MODE-ARGS vary depending on the MODE.  When passed as first option,
-# `--mode=MODE' may be abbreviated as `MODE' or a unique abbreviation of that.
-# Try `$progname --help --mode=MODE' for a more detailed description of MODE.
-#
-# When reporting a bug, please describe a test case to reproduce it and
-# include the following information:
-#
-#         host-triplet:	$host
-#         shell:		$SHELL
-#         compiler:		$LTCC
-#         compiler flags:		$LTCFLAGS
-#         linker:		$LD (gnu? $with_gnu_ld)
-#         $progname:	(GNU libtool) 2.4.2 Debian-2.4.2-1.11
-#         automake:	$automake_version
-#         autoconf:	$autoconf_version
-#
-# Report bugs to <bug-libtool@gnu.org>.
-# GNU libtool home page: <http://www.gnu.org/software/libtool/>.
-# General help using GNU software: <http://www.gnu.org/gethelp/>.
 
 PROGRAM=libtool
 PACKAGE=libtool
-VERSION="2.4.2 Debian-2.4.2-1.11"
-TIMESTAMP=""
-package_revision=1.3337
+VERSION="2.4.6 Debian-2.4.6-0.1"
+package_revision=2.4.6
 
-# Be Bourne compatible
-if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
+
+## ------ ##
+## Usage. ##
+## ------ ##
+
+# Run './libtool --help' for help with using this script from the
+# command line.
+
+
+## ------------------------------- ##
+## User overridable command paths. ##
+## ------------------------------- ##
+
+# After configure completes, it has a better idea of some of the
+# shell tools we need than the defaults used by the functions shared
+# with bootstrap, so set those here where they can still be over-
+# ridden by the user, but otherwise take precedence.
+
+: ${AUTOCONF="autoconf"}
+: ${AUTOMAKE="automake"}
+
+
+## -------------------------- ##
+## Source external libraries. ##
+## -------------------------- ##
+
+# Much of our low-level functionality needs to be sourced from external
+# libraries, which are installed to $pkgauxdir.
+
+# Set a version string for this script.
+scriptversion=2015-01-20.17; # UTC
+
+# General shell script boiler plate, and helper functions.
+# Written by Gary V. Vaughan, 2004
+
+# Copyright (C) 2004-2015 Free Software Foundation, Inc.
+# This is free software; see the source for copying conditions.  There is NO
+# warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+
+# As a special exception to the GNU General Public License, if you distribute
+# this file as part of a program or library that is built using GNU Libtool,
+# you may include this file under the same distribution terms that you use
+# for the rest of that program.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNES FOR A PARTICULAR PURPOSE. See the GNU
+# General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+# Please report bugs or propose patches to gary@gnu.org.
+
+
+## ------ ##
+## Usage. ##
+## ------ ##
+
+# Evaluate this file near the top of your script to gain access to
+# the functions and variables defined here:
+#
+#   . `echo "$0" | ${SED-sed} 's|[^/]*$||'`/build-aux/funclib.sh
+#
+# If you need to override any of the default environment variable
+# settings, do that before evaluating this file.
+
+
+## -------------------- ##
+## Shell normalisation. ##
+## -------------------- ##
+
+# Some shells need a little help to be as Bourne compatible as possible.
+# Before doing anything else, make sure all that help has been provided!
+
+DUALCASE=1; export DUALCASE # for MKS sh
+if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then :
   emulate sh
   NULLCMD=:
-  # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which
+  # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which
   # is contrary to our usage.  Disable this feature.
   alias -g '${1+"$@"}'='"$@"'
   setopt NO_GLOB_SUBST
 else
-  case `(set -o) 2>/dev/null` in *posix*) set -o posix;; esac
+  case `(set -o) 2>/dev/null` in *posix*) set -o posix ;; esac
 fi
-BIN_SH=xpg4; export BIN_SH # for Tru64
-DUALCASE=1; export DUALCASE # for MKS sh
 
-# A function that is used when there is no print builtin or printf.
-func_fallback_echo ()
-{
-  eval 'cat <<_LTECHO_EOF
-$1
-_LTECHO_EOF'
-}
-
-# NLS nuisances: We save the old values to restore during execute mode.
-lt_user_locale=
-lt_safe_locale=
-for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES
+# NLS nuisances: We save the old values in case they are required later.
+_G_user_locale=
+_G_safe_locale=
+for _G_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES
 do
-  eval "if test \"\${$lt_var+set}\" = set; then
-          save_$lt_var=\$$lt_var
-          $lt_var=C
-	  export $lt_var
-	  lt_user_locale=\"$lt_var=\\\$save_\$lt_var; \$lt_user_locale\"
-	  lt_safe_locale=\"$lt_var=C; \$lt_safe_locale\"
+  eval "if test set = \"\${$_G_var+set}\"; then
+          save_$_G_var=\$$_G_var
+          $_G_var=C
+	  export $_G_var
+	  _G_user_locale=\"$_G_var=\\\$save_\$_G_var; \$_G_user_locale\"
+	  _G_safe_locale=\"$_G_var=C; \$_G_safe_locale\"
 	fi"
 done
-LC_ALL=C
-LANGUAGE=C
-export LANGUAGE LC_ALL
 
-$lt_unset CDPATH
+# CDPATH.
+(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
 
+# Make sure IFS has a sensible default
+sp=' '
+nl='
+'
+IFS="$sp	$nl"
+
+# There are apparently some retarded systems that use ';' as a PATH separator!
+if test "${PATH_SEPARATOR+set}" != set; then
+  PATH_SEPARATOR=:
+  (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && {
+    (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 ||
+      PATH_SEPARATOR=';'
+  }
+fi
+
+
+
+## ------------------------- ##
+## Locate command utilities. ##
+## ------------------------- ##
+
+
+# func_executable_p FILE
+# ----------------------
+# Check that FILE is an executable regular file.
+func_executable_p ()
+{
+    test -f "$1" && test -x "$1"
+}
+
+
+# func_path_progs PROGS_LIST CHECK_FUNC [PATH]
+# --------------------------------------------
+# Search for either a program that responds to --version with output
+# containing "GNU", or else returned by CHECK_FUNC otherwise, by
+# trying all the directories in PATH with each of the elements of
+# PROGS_LIST.
+#
+# CHECK_FUNC should accept the path to a candidate program, and
+# set $func_check_prog_result if it truncates its output less than
+# $_G_path_prog_max characters.
+func_path_progs ()
+{
+    _G_progs_list=$1
+    _G_check_func=$2
+    _G_PATH=${3-"$PATH"}
+
+    _G_path_prog_max=0
+    _G_path_prog_found=false
+    _G_save_IFS=$IFS; IFS=${PATH_SEPARATOR-:}
+    for _G_dir in $_G_PATH; do
+      IFS=$_G_save_IFS
+      test -z "$_G_dir" && _G_dir=.
+      for _G_prog_name in $_G_progs_list; do
+        for _exeext in '' .EXE; do
+          _G_path_prog=$_G_dir/$_G_prog_name$_exeext
+          func_executable_p "$_G_path_prog" || continue
+          case `"$_G_path_prog" --version 2>&1` in
+            *GNU*) func_path_progs_result=$_G_path_prog _G_path_prog_found=: ;;
+            *)     $_G_check_func $_G_path_prog
+		   func_path_progs_result=$func_check_prog_result
+		   ;;
+          esac
+          $_G_path_prog_found && break 3
+        done
+      done
+    done
+    IFS=$_G_save_IFS
+    test -z "$func_path_progs_result" && {
+      echo "no acceptable sed could be found in \$PATH" >&2
+      exit 1
+    }
+}
+
+
+# We want to be able to use the functions in this file before configure
+# has figured out where the best binaries are kept, which means we have
+# to search for them ourselves - except when the results are already set
+# where we skip the searches.
+
+# Unless the user overrides by setting SED, search the path for either GNU
+# sed, or the sed that truncates its output the least.
+test -z "$SED" && {
+  _G_sed_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/
+  for _G_i in 1 2 3 4 5 6 7; do
+    _G_sed_script=$_G_sed_script$nl$_G_sed_script
+  done
+  echo "$_G_sed_script" 2>/dev/null | sed 99q >conftest.sed
+  _G_sed_script=
+
+  func_check_prog_sed ()
+  {
+    _G_path_prog=$1
+
+    _G_count=0
+    printf 0123456789 >conftest.in
+    while :
+    do
+      cat conftest.in conftest.in >conftest.tmp
+      mv conftest.tmp conftest.in
+      cp conftest.in conftest.nl
+      echo '' >> conftest.nl
+      "$_G_path_prog" -f conftest.sed <conftest.nl >conftest.out 2>/dev/null || break
+      diff conftest.out conftest.nl >/dev/null 2>&1 || break
+      _G_count=`expr $_G_count + 1`
+      if test "$_G_count" -gt "$_G_path_prog_max"; then
+        # Best one so far, save it but keep looking for a better one
+        func_check_prog_result=$_G_path_prog
+        _G_path_prog_max=$_G_count
+      fi
+      # 10*(2^10) chars as input seems more than enough
+      test 10 -lt "$_G_count" && break
+    done
+    rm -f conftest.in conftest.tmp conftest.nl conftest.out
+  }
+
+  func_path_progs "sed gsed" func_check_prog_sed $PATH:/usr/xpg4/bin
+  rm -f conftest.sed
+  SED=$func_path_progs_result
+}
+
+
+# Unless the user overrides by setting GREP, search the path for either GNU
+# grep, or the grep that truncates its output the least.
+test -z "$GREP" && {
+  func_check_prog_grep ()
+  {
+    _G_path_prog=$1
+
+    _G_count=0
+    _G_path_prog_max=0
+    printf 0123456789 >conftest.in
+    while :
+    do
+      cat conftest.in conftest.in >conftest.tmp
+      mv conftest.tmp conftest.in
+      cp conftest.in conftest.nl
+      echo 'GREP' >> conftest.nl
+      "$_G_path_prog" -e 'GREP$' -e '-(cannot match)-' <conftest.nl >conftest.out 2>/dev/null || break
+      diff conftest.out conftest.nl >/dev/null 2>&1 || break
+      _G_count=`expr $_G_count + 1`
+      if test "$_G_count" -gt "$_G_path_prog_max"; then
+        # Best one so far, save it but keep looking for a better one
+        func_check_prog_result=$_G_path_prog
+        _G_path_prog_max=$_G_count
+      fi
+      # 10*(2^10) chars as input seems more than enough
+      test 10 -lt "$_G_count" && break
+    done
+    rm -f conftest.in conftest.tmp conftest.nl conftest.out
+  }
+
+  func_path_progs "grep ggrep" func_check_prog_grep $PATH:/usr/xpg4/bin
+  GREP=$func_path_progs_result
+}
+
+
+## ------------------------------- ##
+## User overridable command paths. ##
+## ------------------------------- ##
+
+# All uppercase variable names are used for environment variables.  These
+# variables can be overridden by the user before calling a script that
+# uses them if a suitable command of that name is not already available
+# in the command search PATH.
+
+: ${CP="cp -f"}
+: ${ECHO="printf %s\n"}
+: ${EGREP="$GREP -E"}
+: ${FGREP="$GREP -F"}
+: ${LN_S="ln -s"}
+: ${MAKE="make"}
+: ${MKDIR="mkdir"}
+: ${MV="mv -f"}
+: ${RM="rm -f"}
+: ${SHELL="${CONFIG_SHELL-/bin/sh}"}
+
+
+## -------------------- ##
+## Useful sed snippets. ##
+## -------------------- ##
+
+sed_dirname='s|/[^/]*$||'
+sed_basename='s|^.*/||'
+
+# Sed substitution that helps us do robust quoting.  It backslashifies
+# metacharacters that are still active within double-quoted strings.
+sed_quote_subst='s|\([`"$\\]\)|\\\1|g'
+
+# Same as above, but do not quote variable references.
+sed_double_quote_subst='s/\(["`\\]\)/\\\1/g'
+
+# Sed substitution that turns a string into a regex matching for the
+# string literally.
+sed_make_literal_regex='s|[].[^$\\*\/]|\\&|g'
+
+# Sed substitution that converts a w32 file name or path
+# that contains forward slashes, into one that contains
+# (escaped) backslashes.  A very naive implementation.
+sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g'
+
+# Re-'\' parameter expansions in output of sed_double_quote_subst that
+# were '\'-ed in input to the same.  If an odd number of '\' preceded a
+# '$' in input to sed_double_quote_subst, that '$' was protected from
+# expansion.  Since each input '\' is now two '\'s, look for any number
+# of runs of four '\'s followed by two '\'s and then a '$'.  '\' that '$'.
+_G_bs='\\'
+_G_bs2='\\\\'
+_G_bs4='\\\\\\\\'
+_G_dollar='\$'
+sed_double_backslash="\
+  s/$_G_bs4/&\\
+/g
+  s/^$_G_bs2$_G_dollar/$_G_bs&/
+  s/\\([^$_G_bs]\\)$_G_bs2$_G_dollar/\\1$_G_bs2$_G_bs$_G_dollar/g
+  s/\n//g"
+
+
+## ----------------- ##
+## Global variables. ##
+## ----------------- ##
+
+# Except for the global variables explicitly listed below, the following
+# functions in the '^func_' namespace, and the '^require_' namespace
+# variables initialised in the 'Resource management' section, sourcing
+# this file will not pollute your global namespace with anything
+# else. There's no portable way to scope variables in Bourne shell
+# though, so actually running these functions will sometimes place
+# results into a variable named after the function, and often use
+# temporary variables in the '^_G_' namespace. If you are careful to
+# avoid using those namespaces casually in your sourcing script, things
+# should continue to work as you expect. And, of course, you can freely
+# overwrite any of the functions or variables defined here before
+# calling anything to customize them.
+
+EXIT_SUCCESS=0
+EXIT_FAILURE=1
+EXIT_MISMATCH=63  # $? = 63 is used to indicate version mismatch to missing.
+EXIT_SKIP=77	  # $? = 77 is used to indicate a skipped test to automake.
+
+# Allow overriding, eg assuming that you follow the convention of
+# putting '$debug_cmd' at the start of all your functions, you can get
+# bash to show function call trace with:
+#
+#    debug_cmd='eval echo "${FUNCNAME[0]} $*" >&2' bash your-script-name
+debug_cmd=${debug_cmd-":"}
+exit_cmd=:
+
+# By convention, finish your script with:
+#
+#    exit $exit_status
+#
+# so that you can set exit_status to non-zero if you want to indicate
+# something went wrong during execution without actually bailing out at
+# the point of failure.
+exit_status=$EXIT_SUCCESS
 
 # Work around backward compatibility issue on IRIX 6.5. On IRIX 6.4+, sh
 # is ksh but when the shell is invoked as "sh" and the current value of
 # the _XPG environment variable is not equal to 1 (one), the special
 # positional parameter $0, within a function call, is the name of the
 # function.
-progpath="$0"
+progpath=$0
+
+# The name of this program.
+progname=`$ECHO "$progpath" |$SED "$sed_basename"`
+
+# Make sure we have an absolute progpath for reexecution:
+case $progpath in
+  [\\/]*|[A-Za-z]:\\*) ;;
+  *[\\/]*)
+     progdir=`$ECHO "$progpath" |$SED "$sed_dirname"`
+     progdir=`cd "$progdir" && pwd`
+     progpath=$progdir/$progname
+     ;;
+  *)
+     _G_IFS=$IFS
+     IFS=${PATH_SEPARATOR-:}
+     for progdir in $PATH; do
+       IFS=$_G_IFS
+       test -x "$progdir/$progname" && break
+     done
+     IFS=$_G_IFS
+     test -n "$progdir" || progdir=`pwd`
+     progpath=$progdir/$progname
+     ;;
+esac
 
 
+## ----------------- ##
+## Standard options. ##
+## ----------------- ##
 
-: ${CP="cp -f"}
-test "${ECHO+set}" = set || ECHO=${as_echo-'printf %s\n'}
-: ${MAKE="make"}
-: ${MKDIR="mkdir"}
-: ${MV="mv -f"}
-: ${RM="rm -f"}
-: ${SHELL="${CONFIG_SHELL-/bin/sh}"}
-: ${Xsed="$SED -e 1s/^X//"}
+# The following options affect the operation of the functions defined
+# below, and should be set appropriately depending on run-time para-
+# meters passed on the command line.
 
-# Global variables:
-EXIT_SUCCESS=0
-EXIT_FAILURE=1
-EXIT_MISMATCH=63  # $? = 63 is used to indicate version mismatch to missing.
-EXIT_SKIP=77	  # $? = 77 is used to indicate a skipped test to automake.
+opt_dry_run=false
+opt_quiet=false
+opt_verbose=false
 
-exit_status=$EXIT_SUCCESS
+# Categories 'all' and 'none' are always available.  Append any others
+# you will pass as the first argument to func_warning from your own
+# code.
+warning_categories=
 
-# Make sure IFS has a sensible default
-lt_nl='
-'
-IFS=" 	$lt_nl"
+# By default, display warnings according to 'opt_warning_types'.  Set
+# 'warning_func'  to ':' to elide all warnings, or func_fatal_error to
+# treat the next displayed warning as a fatal error.
+warning_func=func_warn_and_continue
 
-dirname="s,/[^/]*$,,"
-basename="s,^.*/,,"
+# Set to 'all' to display all warnings, 'none' to suppress all
+# warnings, or a space delimited list of some subset of
+# 'warning_categories' to display only the listed warnings.
+opt_warning_types=all
 
-# func_dirname file append nondir_replacement
+
+## -------------------- ##
+## Resource management. ##
+## -------------------- ##
+
+# This section contains definitions for functions that each ensure a
+# particular resource (a file, or a non-empty configuration variable for
+# example) is available, and if appropriate to extract default values
+# from pertinent package files. Call them using their associated
+# 'require_*' variable to ensure that they are executed, at most, once.
+#
+# It's entirely deliberate that calling these functions can set
+# variables that don't obey the namespace limitations obeyed by the rest
+# of this file, in order that that they be as useful as possible to
+# callers.
+
+
+# require_term_colors
+# -------------------
+# Allow display of bold text on terminals that support it.
+require_term_colors=func_require_term_colors
+func_require_term_colors ()
+{
+    $debug_cmd
+
+    test -t 1 && {
+      # COLORTERM and USE_ANSI_COLORS environment variables take
+      # precedence, because most terminfo databases neglect to describe
+      # whether color sequences are supported.
+      test -n "${COLORTERM+set}" && : ${USE_ANSI_COLORS="1"}
+
+      if test 1 = "$USE_ANSI_COLORS"; then
+        # Standard ANSI escape sequences
+        tc_reset=''
+        tc_bold='';   tc_standout=''
+        tc_red='';   tc_green=''
+        tc_blue='';  tc_cyan=''
+      else
+        # Otherwise trust the terminfo database after all.
+        test -n "`tput sgr0 2>/dev/null`" && {
+          tc_reset=`tput sgr0`
+          test -n "`tput bold 2>/dev/null`" && tc_bold=`tput bold`
+          tc_standout=$tc_bold
+          test -n "`tput smso 2>/dev/null`" && tc_standout=`tput smso`
+          test -n "`tput setaf 1 2>/dev/null`" && tc_red=`tput setaf 1`
+          test -n "`tput setaf 2 2>/dev/null`" && tc_green=`tput setaf 2`
+          test -n "`tput setaf 4 2>/dev/null`" && tc_blue=`tput setaf 4`
+          test -n "`tput setaf 5 2>/dev/null`" && tc_cyan=`tput setaf 5`
+        }
+      fi
+    }
+
+    require_term_colors=:
+}
+
+
+## ----------------- ##
+## Function library. ##
+## ----------------- ##
+
+# This section contains a variety of useful functions to call in your
+# scripts. Take note of the portable wrappers for features provided by
+# some modern shells, which will fall back to slower equivalents on
+# less featureful shells.
+
+
+# func_append VAR VALUE
+# ---------------------
+# Append VALUE onto the existing contents of VAR.
+
+  # We should try to minimise forks, especially on Windows where they are
+  # unreasonably slow, so skip the feature probes when bash or zsh are
+  # being used:
+  if test set = "${BASH_VERSION+set}${ZSH_VERSION+set}"; then
+    : ${_G_HAVE_ARITH_OP="yes"}
+    : ${_G_HAVE_XSI_OPS="yes"}
+    # The += operator was introduced in bash 3.1
+    case $BASH_VERSION in
+      [12].* | 3.0 | 3.0*) ;;
+      *)
+        : ${_G_HAVE_PLUSEQ_OP="yes"}
+        ;;
+    esac
+  fi
+
+  # _G_HAVE_PLUSEQ_OP
+  # Can be empty, in which case the shell is probed, "yes" if += is
+  # useable or anything else if it does not work.
+  test -z "$_G_HAVE_PLUSEQ_OP" \
+    && (eval 'x=a; x+=" b"; test "a b" = "$x"') 2>/dev/null \
+    && _G_HAVE_PLUSEQ_OP=yes
+
+if test yes = "$_G_HAVE_PLUSEQ_OP"
+then
+  # This is an XSI compatible shell, allowing a faster implementation...
+  eval 'func_append ()
+  {
+    $debug_cmd
+
+    eval "$1+=\$2"
+  }'
+else
+  # ...otherwise fall back to using expr, which is often a shell builtin.
+  func_append ()
+  {
+    $debug_cmd
+
+    eval "$1=\$$1\$2"
+  }
+fi
+
+
+# func_append_quoted VAR VALUE
+# ----------------------------
+# Quote VALUE and append to the end of shell variable VAR, separated
+# by a space.
+if test yes = "$_G_HAVE_PLUSEQ_OP"; then
+  eval 'func_append_quoted ()
+  {
+    $debug_cmd
+
+    func_quote_for_eval "$2"
+    eval "$1+=\\ \$func_quote_for_eval_result"
+  }'
+else
+  func_append_quoted ()
+  {
+    $debug_cmd
+
+    func_quote_for_eval "$2"
+    eval "$1=\$$1\\ \$func_quote_for_eval_result"
+  }
+fi
+
+
+# func_append_uniq VAR VALUE
+# --------------------------
+# Append unique VALUE onto the existing contents of VAR, assuming
+# entries are delimited by the first character of VALUE.  For example:
+#
+#   func_append_uniq options " --another-option option-argument"
+#
+# will only append to $options if " --another-option option-argument "
+# is not already present somewhere in $options already (note spaces at
+# each end implied by leading space in second argument).
+func_append_uniq ()
+{
+    $debug_cmd
+
+    eval _G_current_value='`$ECHO $'$1'`'
+    _G_delim=`expr "$2" : '\(.\)'`
+
+    case $_G_delim$_G_current_value$_G_delim in
+      *"$2$_G_delim"*) ;;
+      *) func_append "$@" ;;
+    esac
+}
+
+
+# func_arith TERM...
+# ------------------
+# Set func_arith_result to the result of evaluating TERMs.
+  test -z "$_G_HAVE_ARITH_OP" \
+    && (eval 'test 2 = $(( 1 + 1 ))') 2>/dev/null \
+    && _G_HAVE_ARITH_OP=yes
+
+if test yes = "$_G_HAVE_ARITH_OP"; then
+  eval 'func_arith ()
+  {
+    $debug_cmd
+
+    func_arith_result=$(( $* ))
+  }'
+else
+  func_arith ()
+  {
+    $debug_cmd
+
+    func_arith_result=`expr "$@"`
+  }
+fi
+
+
+# func_basename FILE
+# ------------------
+# Set func_basename_result to FILE with everything up to and including
+# the last / stripped.
+if test yes = "$_G_HAVE_XSI_OPS"; then
+  # If this shell supports suffix pattern removal, then use it to avoid
+  # forking. Hide the definitions single quotes in case the shell chokes
+  # on unsupported syntax...
+  _b='func_basename_result=${1##*/}'
+  _d='case $1 in
+        */*) func_dirname_result=${1%/*}$2 ;;
+        *  ) func_dirname_result=$3        ;;
+      esac'
+
+else
+  # ...otherwise fall back to using sed.
+  _b='func_basename_result=`$ECHO "$1" |$SED "$sed_basename"`'
+  _d='func_dirname_result=`$ECHO "$1"  |$SED "$sed_dirname"`
+      if test "X$func_dirname_result" = "X$1"; then
+        func_dirname_result=$3
+      else
+        func_append func_dirname_result "$2"
+      fi'
+fi
+
+eval 'func_basename ()
+{
+    $debug_cmd
+
+    '"$_b"'
+}'
+
+
+# func_dirname FILE APPEND NONDIR_REPLACEMENT
+# -------------------------------------------
 # Compute the dirname of FILE.  If nonempty, add APPEND to the result,
 # otherwise set result to NONDIR_REPLACEMENT.
-func_dirname ()
+eval 'func_dirname ()
 {
-    func_dirname_result=`$ECHO "${1}" | $SED "$dirname"`
-    if test "X$func_dirname_result" = "X${1}"; then
-      func_dirname_result="${3}"
-    else
-      func_dirname_result="$func_dirname_result${2}"
-    fi
-} # func_dirname may be replaced by extended shell implementation
+    $debug_cmd
+
+    '"$_d"'
+}'
 
 
-# func_basename file
-func_basename ()
-{
-    func_basename_result=`$ECHO "${1}" | $SED "$basename"`
-} # func_basename may be replaced by extended shell implementation
-
-
-# func_dirname_and_basename file append nondir_replacement
-# perform func_basename and func_dirname in a single function
+# func_dirname_and_basename FILE APPEND NONDIR_REPLACEMENT
+# --------------------------------------------------------
+# Perform func_basename and func_dirname in a single function
 # call:
 #   dirname:  Compute the dirname of FILE.  If nonempty,
 #             add APPEND to the result, otherwise set result
@@ -190,263 +697,327 @@
 #             value returned in "$func_dirname_result"
 #   basename: Compute filename of FILE.
 #             value retuned in "$func_basename_result"
-# Implementation must be kept synchronized with func_dirname
-# and func_basename. For efficiency, we do not delegate to
-# those functions but instead duplicate the functionality here.
-func_dirname_and_basename ()
+# For efficiency, we do not delegate to the functions above but instead
+# duplicate the functionality here.
+eval 'func_dirname_and_basename ()
 {
-    # Extract subdirectory from the argument.
-    func_dirname_result=`$ECHO "${1}" | $SED -e "$dirname"`
-    if test "X$func_dirname_result" = "X${1}"; then
-      func_dirname_result="${3}"
-    else
-      func_dirname_result="$func_dirname_result${2}"
+    $debug_cmd
+
+    '"$_b"'
+    '"$_d"'
+}'
+
+
+# func_echo ARG...
+# ----------------
+# Echo program name prefixed message.
+func_echo ()
+{
+    $debug_cmd
+
+    _G_message=$*
+
+    func_echo_IFS=$IFS
+    IFS=$nl
+    for _G_line in $_G_message; do
+      IFS=$func_echo_IFS
+      $ECHO "$progname: $_G_line"
+    done
+    IFS=$func_echo_IFS
+}
+
+
+# func_echo_all ARG...
+# --------------------
+# Invoke $ECHO with all args, space-separated.
+func_echo_all ()
+{
+    $ECHO "$*"
+}
+
+
+# func_echo_infix_1 INFIX ARG...
+# ------------------------------
+# Echo program name, followed by INFIX on the first line, with any
+# additional lines not showing INFIX.
+func_echo_infix_1 ()
+{
+    $debug_cmd
+
+    $require_term_colors
+
+    _G_infix=$1; shift
+    _G_indent=$_G_infix
+    _G_prefix="$progname: $_G_infix: "
+    _G_message=$*
+
+    # Strip color escape sequences before counting printable length
+    for _G_tc in "$tc_reset" "$tc_bold" "$tc_standout" "$tc_red" "$tc_green" "$tc_blue" "$tc_cyan"
+    do
+      test -n "$_G_tc" && {
+        _G_esc_tc=`$ECHO "$_G_tc" | $SED "$sed_make_literal_regex"`
+        _G_indent=`$ECHO "$_G_indent" | $SED "s|$_G_esc_tc||g"`
+      }
+    done
+    _G_indent="$progname: "`echo "$_G_indent" | $SED 's|.| |g'`"  " ## exclude from sc_prohibit_nested_quotes
+
+    func_echo_infix_1_IFS=$IFS
+    IFS=$nl
+    for _G_line in $_G_message; do
+      IFS=$func_echo_infix_1_IFS
+      $ECHO "$_G_prefix$tc_bold$_G_line$tc_reset" >&2
+      _G_prefix=$_G_indent
+    done
+    IFS=$func_echo_infix_1_IFS
+}
+
+
+# func_error ARG...
+# -----------------
+# Echo program name prefixed message to standard error.
+func_error ()
+{
+    $debug_cmd
+
+    $require_term_colors
+
+    func_echo_infix_1 "  $tc_standout${tc_red}error$tc_reset" "$*" >&2
+}
+
+
+# func_fatal_error ARG...
+# -----------------------
+# Echo program name prefixed message to standard error, and exit.
+func_fatal_error ()
+{
+    $debug_cmd
+
+    func_error "$*"
+    exit $EXIT_FAILURE
+}
+
+
+# func_grep EXPRESSION FILENAME
+# -----------------------------
+# Check whether EXPRESSION matches any line of FILENAME, without output.
+func_grep ()
+{
+    $debug_cmd
+
+    $GREP "$1" "$2" >/dev/null 2>&1
+}
+
+
+# func_len STRING
+# ---------------
+# Set func_len_result to the length of STRING. STRING may not
+# start with a hyphen.
+  test -z "$_G_HAVE_XSI_OPS" \
+    && (eval 'x=a/b/c;
+      test 5aa/bb/cc = "${#x}${x%%/*}${x%/*}${x#*/}${x##*/}"') 2>/dev/null \
+    && _G_HAVE_XSI_OPS=yes
+
+if test yes = "$_G_HAVE_XSI_OPS"; then
+  eval 'func_len ()
+  {
+    $debug_cmd
+
+    func_len_result=${#1}
+  }'
+else
+  func_len ()
+  {
+    $debug_cmd
+
+    func_len_result=`expr "$1" : ".*" 2>/dev/null || echo $max_cmd_len`
+  }
+fi
+
+
+# func_mkdir_p DIRECTORY-PATH
+# ---------------------------
+# Make sure the entire path to DIRECTORY-PATH is available.
+func_mkdir_p ()
+{
+    $debug_cmd
+
+    _G_directory_path=$1
+    _G_dir_list=
+
+    if test -n "$_G_directory_path" && test : != "$opt_dry_run"; then
+
+      # Protect directory names starting with '-'
+      case $_G_directory_path in
+        -*) _G_directory_path=./$_G_directory_path ;;
+      esac
+
+      # While some portion of DIR does not yet exist...
+      while test ! -d "$_G_directory_path"; do
+        # ...make a list in topmost first order.  Use a colon delimited
+	# list incase some portion of path contains whitespace.
+        _G_dir_list=$_G_directory_path:$_G_dir_list
+
+        # If the last portion added has no slash in it, the list is done
+        case $_G_directory_path in */*) ;; *) break ;; esac
+
+        # ...otherwise throw away the child directory and loop
+        _G_directory_path=`$ECHO "$_G_directory_path" | $SED -e "$sed_dirname"`
+      done
+      _G_dir_list=`$ECHO "$_G_dir_list" | $SED 's|:*$||'`
+
+      func_mkdir_p_IFS=$IFS; IFS=:
+      for _G_dir in $_G_dir_list; do
+	IFS=$func_mkdir_p_IFS
+        # mkdir can fail with a 'File exist' error if two processes
+        # try to create one of the directories concurrently.  Don't
+        # stop in that case!
+        $MKDIR "$_G_dir" 2>/dev/null || :
+      done
+      IFS=$func_mkdir_p_IFS
+
+      # Bail out if we (or some other process) failed to create a directory.
+      test -d "$_G_directory_path" || \
+        func_fatal_error "Failed to create '$1'"
     fi
-    func_basename_result=`$ECHO "${1}" | $SED -e "$basename"`
-} # func_dirname_and_basename may be replaced by extended shell implementation
+}
 
 
-# func_stripname prefix suffix name
-# strip PREFIX and SUFFIX off of NAME.
-# PREFIX and SUFFIX must not contain globbing or regex special
-# characters, hashes, percent signs, but SUFFIX may contain a leading
-# dot (in which case that matches only a dot).
-# func_strip_suffix prefix name
-func_stripname ()
+# func_mktempdir [BASENAME]
+# -------------------------
+# Make a temporary directory that won't clash with other running
+# libtool processes, and avoids race conditions if possible.  If
+# given, BASENAME is the basename for that directory.
+func_mktempdir ()
 {
-    case ${2} in
-      .*) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%\\\\${2}\$%%"`;;
-      *)  func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%${2}\$%%"`;;
-    esac
-} # func_stripname may be replaced by extended shell implementation
+    $debug_cmd
 
+    _G_template=${TMPDIR-/tmp}/${1-$progname}
 
-# These SED scripts presuppose an absolute path with a trailing slash.
-pathcar='s,^/\([^/]*\).*$,\1,'
-pathcdr='s,^/[^/]*,,'
-removedotparts=':dotsl
-		s@/\./@/@g
-		t dotsl
-		s,/\.$,/,'
-collapseslashes='s@/\{1,\}@/@g'
-finalslash='s,/*$,/,'
+    if test : = "$opt_dry_run"; then
+      # Return a directory name, but don't create it in dry-run mode
+      _G_tmpdir=$_G_template-$$
+    else
+
+      # If mktemp works, use that first and foremost
+      _G_tmpdir=`mktemp -d "$_G_template-XXXXXXXX" 2>/dev/null`
+
+      if test ! -d "$_G_tmpdir"; then
+        # Failing that, at least try and use $RANDOM to avoid a race
+        _G_tmpdir=$_G_template-${RANDOM-0}$$
+
+        func_mktempdir_umask=`umask`
+        umask 0077
+        $MKDIR "$_G_tmpdir"
+        umask $func_mktempdir_umask
+      fi
+
+      # If we're not in dry-run mode, bomb out on failure
+      test -d "$_G_tmpdir" || \
+        func_fatal_error "cannot create temporary directory '$_G_tmpdir'"
+    fi
+
+    $ECHO "$_G_tmpdir"
+}
+
 
 # func_normal_abspath PATH
+# ------------------------
 # Remove doubled-up and trailing slashes, "." path components,
 # and cancel out any ".." path components in PATH after making
 # it an absolute path.
-#             value returned in "$func_normal_abspath_result"
 func_normal_abspath ()
 {
-  # Start from root dir and reassemble the path.
-  func_normal_abspath_result=
-  func_normal_abspath_tpath=$1
-  func_normal_abspath_altnamespace=
-  case $func_normal_abspath_tpath in
-    "")
-      # Empty path, that just means $cwd.
-      func_stripname '' '/' "`pwd`"
-      func_normal_abspath_result=$func_stripname_result
-      return
-    ;;
-    # The next three entries are used to spot a run of precisely
-    # two leading slashes without using negated character classes;
-    # we take advantage of case's first-match behaviour.
-    ///*)
-      # Unusual form of absolute path, do nothing.
-    ;;
-    //*)
-      # Not necessarily an ordinary path; POSIX reserves leading '//'
-      # and for example Cygwin uses it to access remote file shares
-      # over CIFS/SMB, so we conserve a leading double slash if found.
-      func_normal_abspath_altnamespace=/
-    ;;
-    /*)
-      # Absolute path, do nothing.
-    ;;
-    *)
-      # Relative path, prepend $cwd.
-      func_normal_abspath_tpath=`pwd`/$func_normal_abspath_tpath
-    ;;
-  esac
-  # Cancel out all the simple stuff to save iterations.  We also want
-  # the path to end with a slash for ease of parsing, so make sure
-  # there is one (and only one) here.
-  func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \
-        -e "$removedotparts" -e "$collapseslashes" -e "$finalslash"`
-  while :; do
-    # Processed it all yet?
-    if test "$func_normal_abspath_tpath" = / ; then
-      # If we ascended to the root using ".." the result may be empty now.
-      if test -z "$func_normal_abspath_result" ; then
-        func_normal_abspath_result=/
-      fi
-      break
-    fi
-    func_normal_abspath_tcomponent=`$ECHO "$func_normal_abspath_tpath" | $SED \
-        -e "$pathcar"`
-    func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \
-        -e "$pathcdr"`
-    # Figure out what to do with it
-    case $func_normal_abspath_tcomponent in
+    $debug_cmd
+
+    # These SED scripts presuppose an absolute path with a trailing slash.
+    _G_pathcar='s|^/\([^/]*\).*$|\1|'
+    _G_pathcdr='s|^/[^/]*||'
+    _G_removedotparts=':dotsl
+		s|/\./|/|g
+		t dotsl
+		s|/\.$|/|'
+    _G_collapseslashes='s|/\{1,\}|/|g'
+    _G_finalslash='s|/*$|/|'
+
+    # Start from root dir and reassemble the path.
+    func_normal_abspath_result=
+    func_normal_abspath_tpath=$1
+    func_normal_abspath_altnamespace=
+    case $func_normal_abspath_tpath in
       "")
-        # Trailing empty path component, ignore it.
-      ;;
-      ..)
-        # Parent dir; strip last assembled component from result.
-        func_dirname "$func_normal_abspath_result"
-        func_normal_abspath_result=$func_dirname_result
-      ;;
-      *)
-        # Actual path component, append it.
-        func_normal_abspath_result=$func_normal_abspath_result/$func_normal_abspath_tcomponent
-      ;;
-    esac
-  done
-  # Restore leading double-slash if one was found on entry.
-  func_normal_abspath_result=$func_normal_abspath_altnamespace$func_normal_abspath_result
-}
-
-# func_relative_path SRCDIR DSTDIR
-# generates a relative path from SRCDIR to DSTDIR, with a trailing
-# slash if non-empty, suitable for immediately appending a filename
-# without needing to append a separator.
-#             value returned in "$func_relative_path_result"
-func_relative_path ()
-{
-  func_relative_path_result=
-  func_normal_abspath "$1"
-  func_relative_path_tlibdir=$func_normal_abspath_result
-  func_normal_abspath "$2"
-  func_relative_path_tbindir=$func_normal_abspath_result
-
-  # Ascend the tree starting from libdir
-  while :; do
-    # check if we have found a prefix of bindir
-    case $func_relative_path_tbindir in
-      $func_relative_path_tlibdir)
-        # found an exact match
-        func_relative_path_tcancelled=
-        break
+        # Empty path, that just means $cwd.
+        func_stripname '' '/' "`pwd`"
+        func_normal_abspath_result=$func_stripname_result
+        return
         ;;
-      $func_relative_path_tlibdir*)
-        # found a matching prefix
-        func_stripname "$func_relative_path_tlibdir" '' "$func_relative_path_tbindir"
-        func_relative_path_tcancelled=$func_stripname_result
-        if test -z "$func_relative_path_result"; then
-          func_relative_path_result=.
-        fi
-        break
+      # The next three entries are used to spot a run of precisely
+      # two leading slashes without using negated character classes;
+      # we take advantage of case's first-match behaviour.
+      ///*)
+        # Unusual form of absolute path, do nothing.
+        ;;
+      //*)
+        # Not necessarily an ordinary path; POSIX reserves leading '//'
+        # and for example Cygwin uses it to access remote file shares
+        # over CIFS/SMB, so we conserve a leading double slash if found.
+        func_normal_abspath_altnamespace=/
+        ;;
+      /*)
+        # Absolute path, do nothing.
         ;;
       *)
-        func_dirname $func_relative_path_tlibdir
-        func_relative_path_tlibdir=${func_dirname_result}
-        if test "x$func_relative_path_tlibdir" = x ; then
-          # Have to descend all the way to the root!
-          func_relative_path_result=../$func_relative_path_result
-          func_relative_path_tcancelled=$func_relative_path_tbindir
-          break
-        fi
-        func_relative_path_result=../$func_relative_path_result
+        # Relative path, prepend $cwd.
+        func_normal_abspath_tpath=`pwd`/$func_normal_abspath_tpath
         ;;
     esac
-  done
 
-  # Now calculate path; take care to avoid doubling-up slashes.
-  func_stripname '' '/' "$func_relative_path_result"
-  func_relative_path_result=$func_stripname_result
-  func_stripname '/' '/' "$func_relative_path_tcancelled"
-  if test "x$func_stripname_result" != x ; then
-    func_relative_path_result=${func_relative_path_result}/${func_stripname_result}
-  fi
-
-  # Normalisation. If bindir is libdir, return empty string,
-  # else relative path ending with a slash; either way, target
-  # file name can be directly appended.
-  if test ! -z "$func_relative_path_result"; then
-    func_stripname './' '' "$func_relative_path_result/"
-    func_relative_path_result=$func_stripname_result
-  fi
+    # Cancel out all the simple stuff to save iterations.  We also want
+    # the path to end with a slash for ease of parsing, so make sure
+    # there is one (and only one) here.
+    func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \
+          -e "$_G_removedotparts" -e "$_G_collapseslashes" -e "$_G_finalslash"`
+    while :; do
+      # Processed it all yet?
+      if test / = "$func_normal_abspath_tpath"; then
+        # If we ascended to the root using ".." the result may be empty now.
+        if test -z "$func_normal_abspath_result"; then
+          func_normal_abspath_result=/
+        fi
+        break
+      fi
+      func_normal_abspath_tcomponent=`$ECHO "$func_normal_abspath_tpath" | $SED \
+          -e "$_G_pathcar"`
+      func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \
+          -e "$_G_pathcdr"`
+      # Figure out what to do with it
+      case $func_normal_abspath_tcomponent in
+        "")
+          # Trailing empty path component, ignore it.
+          ;;
+        ..)
+          # Parent dir; strip last assembled component from result.
+          func_dirname "$func_normal_abspath_result"
+          func_normal_abspath_result=$func_dirname_result
+          ;;
+        *)
+          # Actual path component, append it.
+          func_append func_normal_abspath_result "/$func_normal_abspath_tcomponent"
+          ;;
+      esac
+    done
+    # Restore leading double-slash if one was found on entry.
+    func_normal_abspath_result=$func_normal_abspath_altnamespace$func_normal_abspath_result
 }
 
-# The name of this program:
-func_dirname_and_basename "$progpath"
-progname=$func_basename_result
 
-# Make sure we have an absolute path for reexecution:
-case $progpath in
-  [\\/]*|[A-Za-z]:\\*) ;;
-  *[\\/]*)
-     progdir=$func_dirname_result
-     progdir=`cd "$progdir" && pwd`
-     progpath="$progdir/$progname"
-     ;;
-  *)
-     save_IFS="$IFS"
-     IFS=${PATH_SEPARATOR-:}
-     for progdir in $PATH; do
-       IFS="$save_IFS"
-       test -x "$progdir/$progname" && break
-     done
-     IFS="$save_IFS"
-     test -n "$progdir" || progdir=`pwd`
-     progpath="$progdir/$progname"
-     ;;
-esac
-
-# Sed substitution that helps us do robust quoting.  It backslashifies
-# metacharacters that are still active within double-quoted strings.
-Xsed="${SED}"' -e 1s/^X//'
-sed_quote_subst='s/\([`"$\\]\)/\\\1/g'
-
-# Same as above, but do not quote variable references.
-double_quote_subst='s/\(["`\\]\)/\\\1/g'
-
-# Sed substitution that turns a string into a regex matching for the
-# string literally.
-sed_make_literal_regex='s,[].[^$\\*\/],\\&,g'
-
-# Sed substitution that converts a w32 file name or path
-# which contains forward slashes, into one that contains
-# (escaped) backslashes.  A very naive implementation.
-lt_sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g'
-
-# Re-`\' parameter expansions in output of double_quote_subst that were
-# `\'-ed in input to the same.  If an odd number of `\' preceded a '$'
-# in input to double_quote_subst, that '$' was protected from expansion.
-# Since each input `\' is now two `\'s, look for any number of runs of
-# four `\'s followed by two `\'s and then a '$'.  `\' that '$'.
-bs='\\'
-bs2='\\\\'
-bs4='\\\\\\\\'
-dollar='\$'
-sed_double_backslash="\
-  s/$bs4/&\\
-/g
-  s/^$bs2$dollar/$bs&/
-  s/\\([^$bs]\\)$bs2$dollar/\\1$bs2$bs$dollar/g
-  s/\n//g"
-
-# Standard options:
-opt_dry_run=false
-opt_help=false
-opt_quiet=false
-opt_verbose=false
-opt_warning=:
-
-# func_echo arg...
-# Echo program name prefixed message, along with the current mode
-# name if it has been set yet.
-func_echo ()
+# func_notquiet ARG...
+# --------------------
+# Echo program name prefixed message only when not in quiet mode.
+func_notquiet ()
 {
-    $ECHO "$progname: ${opt_mode+$opt_mode: }$*"
-}
+    $debug_cmd
 
-# func_verbose arg...
-# Echo program name prefixed message in verbose mode only.
-func_verbose ()
-{
-    $opt_verbose && func_echo ${1+"$@"}
+    $opt_quiet || func_echo ${1+"$@"}
 
     # A bug in bash halts the script if the last line of a function
     # fails when set -e is in force, so we need another command to
@@ -454,450 +1025,1113 @@
     :
 }
 
-# func_echo_all arg...
-# Invoke $ECHO with all args, space-separated.
-func_echo_all ()
-{
-    $ECHO "$*"
-}
 
-# func_error arg...
-# Echo program name prefixed message to standard error.
-func_error ()
+# func_relative_path SRCDIR DSTDIR
+# --------------------------------
+# Set func_relative_path_result to the relative path from SRCDIR to DSTDIR.
+func_relative_path ()
 {
-    $ECHO "$progname: ${opt_mode+$opt_mode: }"${1+"$@"} 1>&2
-}
+    $debug_cmd
 
-# func_warning arg...
-# Echo program name prefixed warning message to standard error.
-func_warning ()
-{
-    $opt_warning && $ECHO "$progname: ${opt_mode+$opt_mode: }warning: "${1+"$@"} 1>&2
+    func_relative_path_result=
+    func_normal_abspath "$1"
+    func_relative_path_tlibdir=$func_normal_abspath_result
+    func_normal_abspath "$2"
+    func_relative_path_tbindir=$func_normal_abspath_result
 
-    # bash bug again:
+    # Ascend the tree starting from libdir
+    while :; do
+      # check if we have found a prefix of bindir
+      case $func_relative_path_tbindir in
+        $func_relative_path_tlibdir)
+          # found an exact match
+          func_relative_path_tcancelled=
+          break
+          ;;
+        $func_relative_path_tlibdir*)
+          # found a matching prefix
+          func_stripname "$func_relative_path_tlibdir" '' "$func_relative_path_tbindir"
+          func_relative_path_tcancelled=$func_stripname_result
+          if test -z "$func_relative_path_result"; then
+            func_relative_path_result=.
+          fi
+          break
+          ;;
+        *)
+          func_dirname $func_relative_path_tlibdir
+          func_relative_path_tlibdir=$func_dirname_result
+          if test -z "$func_relative_path_tlibdir"; then
+            # Have to descend all the way to the root!
+            func_relative_path_result=../$func_relative_path_result
+            func_relative_path_tcancelled=$func_relative_path_tbindir
+            break
+          fi
+          func_relative_path_result=../$func_relative_path_result
+          ;;
+      esac
+    done
+
+    # Now calculate path; take care to avoid doubling-up slashes.
+    func_stripname '' '/' "$func_relative_path_result"
+    func_relative_path_result=$func_stripname_result
+    func_stripname '/' '/' "$func_relative_path_tcancelled"
+    if test -n "$func_stripname_result"; then
+      func_append func_relative_path_result "/$func_stripname_result"
+    fi
+
+    # Normalisation. If bindir is libdir, return '.' else relative path.
+    if test -n "$func_relative_path_result"; then
+      func_stripname './' '' "$func_relative_path_result"
+      func_relative_path_result=$func_stripname_result
+    fi
+
+    test -n "$func_relative_path_result" || func_relative_path_result=.
+
     :
 }
 
-# func_fatal_error arg...
-# Echo program name prefixed message to standard error, and exit.
-func_fatal_error ()
-{
-    func_error ${1+"$@"}
-    exit $EXIT_FAILURE
-}
 
-# func_fatal_help arg...
-# Echo program name prefixed message to standard error, followed by
-# a help hint, and exit.
-func_fatal_help ()
-{
-    func_error ${1+"$@"}
-    func_fatal_error "$help"
-}
-help="Try \`$progname --help' for more information."  ## default
-
-
-# func_grep expression filename
-# Check whether EXPRESSION matches any line of FILENAME, without output.
-func_grep ()
-{
-    $GREP "$1" "$2" >/dev/null 2>&1
-}
-
-
-# func_mkdir_p directory-path
-# Make sure the entire path to DIRECTORY-PATH is available.
-func_mkdir_p ()
-{
-    my_directory_path="$1"
-    my_dir_list=
-
-    if test -n "$my_directory_path" && test "$opt_dry_run" != ":"; then
-
-      # Protect directory names starting with `-'
-      case $my_directory_path in
-        -*) my_directory_path="./$my_directory_path" ;;
-      esac
-
-      # While some portion of DIR does not yet exist...
-      while test ! -d "$my_directory_path"; do
-        # ...make a list in topmost first order.  Use a colon delimited
-	# list incase some portion of path contains whitespace.
-        my_dir_list="$my_directory_path:$my_dir_list"
-
-        # If the last portion added has no slash in it, the list is done
-        case $my_directory_path in */*) ;; *) break ;; esac
-
-        # ...otherwise throw away the child directory and loop
-        my_directory_path=`$ECHO "$my_directory_path" | $SED -e "$dirname"`
-      done
-      my_dir_list=`$ECHO "$my_dir_list" | $SED 's,:*$,,'`
-
-      save_mkdir_p_IFS="$IFS"; IFS=':'
-      for my_dir in $my_dir_list; do
-	IFS="$save_mkdir_p_IFS"
-        # mkdir can fail with a `File exist' error if two processes
-        # try to create one of the directories concurrently.  Don't
-        # stop in that case!
-        $MKDIR "$my_dir" 2>/dev/null || :
-      done
-      IFS="$save_mkdir_p_IFS"
-
-      # Bail out if we (or some other process) failed to create a directory.
-      test -d "$my_directory_path" || \
-        func_fatal_error "Failed to create \`$1'"
-    fi
-}
-
-
-# func_mktempdir [string]
-# Make a temporary directory that won't clash with other running
-# libtool processes, and avoids race conditions if possible.  If
-# given, STRING is the basename for that directory.
-func_mktempdir ()
-{
-    my_template="${TMPDIR-/tmp}/${1-$progname}"
-
-    if test "$opt_dry_run" = ":"; then
-      # Return a directory name, but don't create it in dry-run mode
-      my_tmpdir="${my_template}-$$"
-    else
-
-      # If mktemp works, use that first and foremost
-      my_tmpdir=`mktemp -d "${my_template}-XXXXXXXX" 2>/dev/null`
-
-      if test ! -d "$my_tmpdir"; then
-        # Failing that, at least try and use $RANDOM to avoid a race
-        my_tmpdir="${my_template}-${RANDOM-0}$$"
-
-        save_mktempdir_umask=`umask`
-        umask 0077
-        $MKDIR "$my_tmpdir"
-        umask $save_mktempdir_umask
-      fi
-
-      # If we're not in dry-run mode, bomb out on failure
-      test -d "$my_tmpdir" || \
-        func_fatal_error "cannot create temporary directory \`$my_tmpdir'"
-    fi
-
-    $ECHO "$my_tmpdir"
-}
-
-
-# func_quote_for_eval arg
-# Aesthetically quote ARG to be evaled later.
-# This function returns two values: FUNC_QUOTE_FOR_EVAL_RESULT
-# is double-quoted, suitable for a subsequent eval, whereas
-# FUNC_QUOTE_FOR_EVAL_UNQUOTED_RESULT has merely all characters
-# which are still active within double quotes backslashified.
+# func_quote_for_eval ARG...
+# --------------------------
+# Aesthetically quote ARGs to be evaled later.
+# This function returns two values:
+#   i) func_quote_for_eval_result
+#      double-quoted, suitable for a subsequent eval
+#  ii) func_quote_for_eval_unquoted_result
+#      has all characters that are still active within double
+#      quotes backslashified.
 func_quote_for_eval ()
 {
-    case $1 in
-      *[\\\`\"\$]*)
-	func_quote_for_eval_unquoted_result=`$ECHO "$1" | $SED "$sed_quote_subst"` ;;
-      *)
-        func_quote_for_eval_unquoted_result="$1" ;;
-    esac
+    $debug_cmd
 
-    case $func_quote_for_eval_unquoted_result in
-      # Double-quote args containing shell metacharacters to delay
-      # word splitting, command substitution and and variable
-      # expansion for a subsequent eval.
-      # Many Bourne shells cannot handle close brackets correctly
-      # in scan sets, so we specify it separately.
-      *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \	]*|*]*|"")
-        func_quote_for_eval_result="\"$func_quote_for_eval_unquoted_result\""
-        ;;
-      *)
-        func_quote_for_eval_result="$func_quote_for_eval_unquoted_result"
-    esac
+    func_quote_for_eval_unquoted_result=
+    func_quote_for_eval_result=
+    while test 0 -lt $#; do
+      case $1 in
+        *[\\\`\"\$]*)
+	  _G_unquoted_arg=`printf '%s\n' "$1" |$SED "$sed_quote_subst"` ;;
+        *)
+          _G_unquoted_arg=$1 ;;
+      esac
+      if test -n "$func_quote_for_eval_unquoted_result"; then
+	func_append func_quote_for_eval_unquoted_result " $_G_unquoted_arg"
+      else
+        func_append func_quote_for_eval_unquoted_result "$_G_unquoted_arg"
+      fi
+
+      case $_G_unquoted_arg in
+        # Double-quote args containing shell metacharacters to delay
+        # word splitting, command substitution and variable expansion
+        # for a subsequent eval.
+        # Many Bourne shells cannot handle close brackets correctly
+        # in scan sets, so we specify it separately.
+        *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \	]*|*]*|"")
+          _G_quoted_arg=\"$_G_unquoted_arg\"
+          ;;
+        *)
+          _G_quoted_arg=$_G_unquoted_arg
+	  ;;
+      esac
+
+      if test -n "$func_quote_for_eval_result"; then
+	func_append func_quote_for_eval_result " $_G_quoted_arg"
+      else
+        func_append func_quote_for_eval_result "$_G_quoted_arg"
+      fi
+      shift
+    done
 }
 
 
-# func_quote_for_expand arg
+# func_quote_for_expand ARG
+# -------------------------
 # Aesthetically quote ARG to be evaled later; same as above,
 # but do not quote variable references.
 func_quote_for_expand ()
 {
+    $debug_cmd
+
     case $1 in
       *[\\\`\"]*)
-	my_arg=`$ECHO "$1" | $SED \
-	    -e "$double_quote_subst" -e "$sed_double_backslash"` ;;
+	_G_arg=`$ECHO "$1" | $SED \
+	    -e "$sed_double_quote_subst" -e "$sed_double_backslash"` ;;
       *)
-        my_arg="$1" ;;
+        _G_arg=$1 ;;
     esac
 
-    case $my_arg in
+    case $_G_arg in
       # Double-quote args containing shell metacharacters to delay
       # word splitting and command substitution for a subsequent eval.
       # Many Bourne shells cannot handle close brackets correctly
       # in scan sets, so we specify it separately.
       *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \	]*|*]*|"")
-        my_arg="\"$my_arg\""
+        _G_arg=\"$_G_arg\"
         ;;
     esac
 
-    func_quote_for_expand_result="$my_arg"
+    func_quote_for_expand_result=$_G_arg
 }
 
 
-# func_show_eval cmd [fail_exp]
-# Unless opt_silent is true, then output CMD.  Then, if opt_dryrun is
+# func_stripname PREFIX SUFFIX NAME
+# ---------------------------------
+# strip PREFIX and SUFFIX from NAME, and store in func_stripname_result.
+# PREFIX and SUFFIX must not contain globbing or regex special
+# characters, hashes, percent signs, but SUFFIX may contain a leading
+# dot (in which case that matches only a dot).
+if test yes = "$_G_HAVE_XSI_OPS"; then
+  eval 'func_stripname ()
+  {
+    $debug_cmd
+
+    # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are
+    # positional parameters, so assign one to ordinary variable first.
+    func_stripname_result=$3
+    func_stripname_result=${func_stripname_result#"$1"}
+    func_stripname_result=${func_stripname_result%"$2"}
+  }'
+else
+  func_stripname ()
+  {
+    $debug_cmd
+
+    case $2 in
+      .*) func_stripname_result=`$ECHO "$3" | $SED -e "s%^$1%%" -e "s%\\\\$2\$%%"`;;
+      *)  func_stripname_result=`$ECHO "$3" | $SED -e "s%^$1%%" -e "s%$2\$%%"`;;
+    esac
+  }
+fi
+
+
+# func_show_eval CMD [FAIL_EXP]
+# -----------------------------
+# Unless opt_quiet is true, then output CMD.  Then, if opt_dryrun is
 # not true, evaluate CMD.  If the evaluation of CMD fails, and FAIL_EXP
 # is given, then evaluate it.
 func_show_eval ()
 {
-    my_cmd="$1"
-    my_fail_exp="${2-:}"
+    $debug_cmd
 
-    ${opt_silent-false} || {
-      func_quote_for_expand "$my_cmd"
-      eval "func_echo $func_quote_for_expand_result"
-    }
+    _G_cmd=$1
+    _G_fail_exp=${2-':'}
 
-    if ${opt_dry_run-false}; then :; else
-      eval "$my_cmd"
-      my_status=$?
-      if test "$my_status" -eq 0; then :; else
-	eval "(exit $my_status); $my_fail_exp"
+    func_quote_for_expand "$_G_cmd"
+    eval "func_notquiet $func_quote_for_expand_result"
+
+    $opt_dry_run || {
+      eval "$_G_cmd"
+      _G_status=$?
+      if test 0 -ne "$_G_status"; then
+	eval "(exit $_G_status); $_G_fail_exp"
       fi
-    fi
+    }
 }
 
 
-# func_show_eval_locale cmd [fail_exp]
-# Unless opt_silent is true, then output CMD.  Then, if opt_dryrun is
+# func_show_eval_locale CMD [FAIL_EXP]
+# ------------------------------------
+# Unless opt_quiet is true, then output CMD.  Then, if opt_dryrun is
 # not true, evaluate CMD.  If the evaluation of CMD fails, and FAIL_EXP
 # is given, then evaluate it.  Use the saved locale for evaluation.
 func_show_eval_locale ()
 {
-    my_cmd="$1"
-    my_fail_exp="${2-:}"
+    $debug_cmd
 
-    ${opt_silent-false} || {
-      func_quote_for_expand "$my_cmd"
+    _G_cmd=$1
+    _G_fail_exp=${2-':'}
+
+    $opt_quiet || {
+      func_quote_for_expand "$_G_cmd"
       eval "func_echo $func_quote_for_expand_result"
     }
 
-    if ${opt_dry_run-false}; then :; else
-      eval "$lt_user_locale
-	    $my_cmd"
-      my_status=$?
-      eval "$lt_safe_locale"
-      if test "$my_status" -eq 0; then :; else
-	eval "(exit $my_status); $my_fail_exp"
+    $opt_dry_run || {
+      eval "$_G_user_locale
+	    $_G_cmd"
+      _G_status=$?
+      eval "$_G_safe_locale"
+      if test 0 -ne "$_G_status"; then
+	eval "(exit $_G_status); $_G_fail_exp"
       fi
-    fi
+    }
 }
 
+
 # func_tr_sh
+# ----------
 # Turn $1 into a string suitable for a shell variable name.
 # Result is stored in $func_tr_sh_result.  All characters
 # not in the set a-zA-Z0-9_ are replaced with '_'. Further,
 # if $1 begins with a digit, a '_' is prepended as well.
 func_tr_sh ()
 {
-  case $1 in
-  [0-9]* | *[!a-zA-Z0-9_]*)
-    func_tr_sh_result=`$ECHO "$1" | $SED 's/^\([0-9]\)/_\1/; s/[^a-zA-Z0-9_]/_/g'`
-    ;;
-  * )
-    func_tr_sh_result=$1
-    ;;
-  esac
+    $debug_cmd
+
+    case $1 in
+    [0-9]* | *[!a-zA-Z0-9_]*)
+      func_tr_sh_result=`$ECHO "$1" | $SED -e 's/^\([0-9]\)/_\1/' -e 's/[^a-zA-Z0-9_]/_/g'`
+      ;;
+    * )
+      func_tr_sh_result=$1
+      ;;
+    esac
 }
 
 
-# func_version
-# Echo version message to standard output and exit.
-func_version ()
+# func_verbose ARG...
+# -------------------
+# Echo program name prefixed message in verbose mode only.
+func_verbose ()
 {
-    $opt_debug
+    $debug_cmd
 
-    $SED -n '/(C)/!b go
-	:more
-	/\./!{
-	  N
-	  s/\n# / /
-	  b more
-	}
-	:go
-	/^# '$PROGRAM' (GNU /,/# warranty; / {
-        s/^# //
-	s/^# *$//
-        s/\((C)\)[ 0-9,-]*\( [1-9][0-9]*\)/\1\2/
-        p
-     }' < "$progpath"
-     exit $?
+    $opt_verbose && func_echo "$*"
+
+    :
 }
 
-# func_usage
-# Echo short help message to standard output and exit.
-func_usage ()
+
+# func_warn_and_continue ARG...
+# -----------------------------
+# Echo program name prefixed warning message to standard error.
+func_warn_and_continue ()
 {
-    $opt_debug
+    $debug_cmd
 
-    $SED -n '/^# Usage:/,/^#  *.*--help/ {
-        s/^# //
-	s/^# *$//
-	s/\$progname/'$progname'/
-	p
-    }' < "$progpath"
-    echo
-    $ECHO "run \`$progname --help | more' for full usage"
-    exit $?
+    $require_term_colors
+
+    func_echo_infix_1 "${tc_red}warning$tc_reset" "$*" >&2
 }
 
-# func_help [NOEXIT]
-# Echo long help message to standard output and exit,
-# unless 'noexit' is passed as argument.
+
+# func_warning CATEGORY ARG...
+# ----------------------------
+# Echo program name prefixed warning message to standard error. Warning
+# messages can be filtered according to CATEGORY, where this function
+# elides messages where CATEGORY is not listed in the global variable
+# 'opt_warning_types'.
+func_warning ()
+{
+    $debug_cmd
+
+    # CATEGORY must be in the warning_categories list!
+    case " $warning_categories " in
+      *" $1 "*) ;;
+      *) func_internal_error "invalid warning category '$1'" ;;
+    esac
+
+    _G_category=$1
+    shift
+
+    case " $opt_warning_types " in
+      *" $_G_category "*) $warning_func ${1+"$@"} ;;
+    esac
+}
+
+
+# func_sort_ver VER1 VER2
+# -----------------------
+# 'sort -V' is not generally available.
+# Note this deviates from the version comparison in automake
+# in that it treats 1.5 < 1.5.0, and treats 1.4.4a < 1.4-p3a
+# but this should suffice as we won't be specifying old
+# version formats or redundant trailing .0 in bootstrap.conf.
+# If we did want full compatibility then we should probably
+# use m4_version_compare from autoconf.
+func_sort_ver ()
+{
+    $debug_cmd
+
+    printf '%s\n%s\n' "$1" "$2" \
+      | sort -t. -k 1,1n -k 2,2n -k 3,3n -k 4,4n -k 5,5n -k 6,6n -k 7,7n -k 8,8n -k 9,9n
+}
+
+# func_lt_ver PREV CURR
+# ---------------------
+# Return true if PREV and CURR are in the correct order according to
+# func_sort_ver, otherwise false.  Use it like this:
+#
+#  func_lt_ver "$prev_ver" "$proposed_ver" || func_fatal_error "..."
+func_lt_ver ()
+{
+    $debug_cmd
+
+    test "x$1" = x`func_sort_ver "$1" "$2" | $SED 1q`
+}
+
+
+# Local variables:
+# mode: shell-script
+# sh-indentation: 2
+# eval: (add-hook 'before-save-hook 'time-stamp)
+# time-stamp-pattern: "10/scriptversion=%:y-%02m-%02d.%02H; # UTC"
+# time-stamp-time-zone: "UTC"
+# End:
+#! /bin/sh
+
+# Set a version string for this script.
+scriptversion=2014-01-07.03; # UTC
+
+# A portable, pluggable option parser for Bourne shell.
+# Written by Gary V. Vaughan, 2010
+
+# Copyright (C) 2010-2015 Free Software Foundation, Inc.
+# This is free software; see the source for copying conditions.  There is NO
+# warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+# Please report bugs or propose patches to gary@gnu.org.
+
+
+## ------ ##
+## Usage. ##
+## ------ ##
+
+# This file is a library for parsing options in your shell scripts along
+# with assorted other useful supporting features that you can make use
+# of too.
+#
+# For the simplest scripts you might need only:
+#
+#   #!/bin/sh
+#   . relative/path/to/funclib.sh
+#   . relative/path/to/options-parser
+#   scriptversion=1.0
+#   func_options ${1+"$@"}
+#   eval set dummy "$func_options_result"; shift
+#   ...rest of your script...
+#
+# In order for the '--version' option to work, you will need to have a
+# suitably formatted comment like the one at the top of this file
+# starting with '# Written by ' and ending with '# warranty; '.
+#
+# For '-h' and '--help' to work, you will also need a one line
+# description of your script's purpose in a comment directly above the
+# '# Written by ' line, like the one at the top of this file.
+#
+# The default options also support '--debug', which will turn on shell
+# execution tracing (see the comment above debug_cmd below for another
+# use), and '--verbose' and the func_verbose function to allow your script
+# to display verbose messages only when your user has specified
+# '--verbose'.
+#
+# After sourcing this file, you can plug processing for additional
+# options by amending the variables from the 'Configuration' section
+# below, and following the instructions in the 'Option parsing'
+# section further down.
+
+## -------------- ##
+## Configuration. ##
+## -------------- ##
+
+# You should override these variables in your script after sourcing this
+# file so that they reflect the customisations you have added to the
+# option parser.
+
+# The usage line for option parsing errors and the start of '-h' and
+# '--help' output messages. You can embed shell variables for delayed
+# expansion at the time the message is displayed, but you will need to
+# quote other shell meta-characters carefully to prevent them being
+# expanded when the contents are evaled.
+usage='$progpath [OPTION]...'
+
+# Short help message in response to '-h' and '--help'.  Add to this or
+# override it after sourcing this library to reflect the full set of
+# options your script accepts.
+usage_message="\
+       --debug        enable verbose shell tracing
+   -W, --warnings=CATEGORY
+                      report the warnings falling in CATEGORY [all]
+   -v, --verbose      verbosely report processing
+       --version      print version information and exit
+   -h, --help         print short or long help message and exit
+"
+
+# Additional text appended to 'usage_message' in response to '--help'.
+long_help_message="
+Warning categories include:
+       'all'          show all warnings
+       'none'         turn off all the warnings
+       'error'        warnings are treated as fatal errors"
+
+# Help message printed before fatal option parsing errors.
+fatal_help="Try '\$progname --help' for more information."
+
+
+
+## ------------------------- ##
+## Hook function management. ##
+## ------------------------- ##
+
+# This section contains functions for adding, removing, and running hooks
+# to the main code.  A hook is just a named list of of function, that can
+# be run in order later on.
+
+# func_hookable FUNC_NAME
+# -----------------------
+# Declare that FUNC_NAME will run hooks added with
+# 'func_add_hook FUNC_NAME ...'.
+func_hookable ()
+{
+    $debug_cmd
+
+    func_append hookable_fns " $1"
+}
+
+
+# func_add_hook FUNC_NAME HOOK_FUNC
+# ---------------------------------
+# Request that FUNC_NAME call HOOK_FUNC before it returns.  FUNC_NAME must
+# first have been declared "hookable" by a call to 'func_hookable'.
+func_add_hook ()
+{
+    $debug_cmd
+
+    case " $hookable_fns " in
+      *" $1 "*) ;;
+      *) func_fatal_error "'$1' does not accept hook functions." ;;
+    esac
+
+    eval func_append ${1}_hooks '" $2"'
+}
+
+
+# func_remove_hook FUNC_NAME HOOK_FUNC
+# ------------------------------------
+# Remove HOOK_FUNC from the list of functions called by FUNC_NAME.
+func_remove_hook ()
+{
+    $debug_cmd
+
+    eval ${1}_hooks='`$ECHO "\$'$1'_hooks" |$SED "s| '$2'||"`'
+}
+
+
+# func_run_hooks FUNC_NAME [ARG]...
+# ---------------------------------
+# Run all hook functions registered to FUNC_NAME.
+# It is assumed that the list of hook functions contains nothing more
+# than a whitespace-delimited list of legal shell function names, and
+# no effort is wasted trying to catch shell meta-characters or preserve
+# whitespace.
+func_run_hooks ()
+{
+    $debug_cmd
+
+    case " $hookable_fns " in
+      *" $1 "*) ;;
+      *) func_fatal_error "'$1' does not support hook funcions.n" ;;
+    esac
+
+    eval _G_hook_fns=\$$1_hooks; shift
+
+    for _G_hook in $_G_hook_fns; do
+      eval $_G_hook '"$@"'
+
+      # store returned options list back into positional
+      # parameters for next 'cmd' execution.
+      eval _G_hook_result=\$${_G_hook}_result
+      eval set dummy "$_G_hook_result"; shift
+    done
+
+    func_quote_for_eval ${1+"$@"}
+    func_run_hooks_result=$func_quote_for_eval_result
+}
+
+
+
+## --------------- ##
+## Option parsing. ##
+## --------------- ##
+
+# In order to add your own option parsing hooks, you must accept the
+# full positional parameter list in your hook function, remove any
+# options that you action, and then pass back the remaining unprocessed
+# options in '<hooked_function_name>_result', escaped suitably for
+# 'eval'.  Like this:
+#
+#    my_options_prep ()
+#    {
+#        $debug_cmd
+#
+#        # Extend the existing usage message.
+#        usage_message=$usage_message'
+#      -s, --silent       don'\''t print informational messages
+#    '
+#
+#        func_quote_for_eval ${1+"$@"}
+#        my_options_prep_result=$func_quote_for_eval_result
+#    }
+#    func_add_hook func_options_prep my_options_prep
+#
+#
+#    my_silent_option ()
+#    {
+#        $debug_cmd
+#
+#        # Note that for efficiency, we parse as many options as we can
+#        # recognise in a loop before passing the remainder back to the
+#        # caller on the first unrecognised argument we encounter.
+#        while test $# -gt 0; do
+#          opt=$1; shift
+#          case $opt in
+#            --silent|-s) opt_silent=: ;;
+#            # Separate non-argument short options:
+#            -s*)         func_split_short_opt "$_G_opt"
+#                         set dummy "$func_split_short_opt_name" \
+#                             "-$func_split_short_opt_arg" ${1+"$@"}
+#                         shift
+#                         ;;
+#            *)            set dummy "$_G_opt" "$*"; shift; break ;;
+#          esac
+#        done
+#
+#        func_quote_for_eval ${1+"$@"}
+#        my_silent_option_result=$func_quote_for_eval_result
+#    }
+#    func_add_hook func_parse_options my_silent_option
+#
+#
+#    my_option_validation ()
+#    {
+#        $debug_cmd
+#
+#        $opt_silent && $opt_verbose && func_fatal_help "\
+#    '--silent' and '--verbose' options are mutually exclusive."
+#
+#        func_quote_for_eval ${1+"$@"}
+#        my_option_validation_result=$func_quote_for_eval_result
+#    }
+#    func_add_hook func_validate_options my_option_validation
+#
+# You'll alse need to manually amend $usage_message to reflect the extra
+# options you parse.  It's preferable to append if you can, so that
+# multiple option parsing hooks can be added safely.
+
+
+# func_options [ARG]...
+# ---------------------
+# All the functions called inside func_options are hookable. See the
+# individual implementations for details.
+func_hookable func_options
+func_options ()
+{
+    $debug_cmd
+
+    func_options_prep ${1+"$@"}
+    eval func_parse_options \
+        ${func_options_prep_result+"$func_options_prep_result"}
+    eval func_validate_options \
+        ${func_parse_options_result+"$func_parse_options_result"}
+
+    eval func_run_hooks func_options \
+        ${func_validate_options_result+"$func_validate_options_result"}
+
+    # save modified positional parameters for caller
+    func_options_result=$func_run_hooks_result
+}
+
+
+# func_options_prep [ARG]...
+# --------------------------
+# All initialisations required before starting the option parse loop.
+# Note that when calling hook functions, we pass through the list of
+# positional parameters.  If a hook function modifies that list, and
+# needs to propogate that back to rest of this script, then the complete
+# modified list must be put in 'func_run_hooks_result' before
+# returning.
+func_hookable func_options_prep
+func_options_prep ()
+{
+    $debug_cmd
+
+    # Option defaults:
+    opt_verbose=false
+    opt_warning_types=
+
+    func_run_hooks func_options_prep ${1+"$@"}
+
+    # save modified positional parameters for caller
+    func_options_prep_result=$func_run_hooks_result
+}
+
+
+# func_parse_options [ARG]...
+# ---------------------------
+# The main option parsing loop.
+func_hookable func_parse_options
+func_parse_options ()
+{
+    $debug_cmd
+
+    func_parse_options_result=
+
+    # this just eases exit handling
+    while test $# -gt 0; do
+      # Defer to hook functions for initial option parsing, so they
+      # get priority in the event of reusing an option name.
+      func_run_hooks func_parse_options ${1+"$@"}
+
+      # Adjust func_parse_options positional parameters to match
+      eval set dummy "$func_run_hooks_result"; shift
+
+      # Break out of the loop if we already parsed every option.
+      test $# -gt 0 || break
+
+      _G_opt=$1
+      shift
+      case $_G_opt in
+        --debug|-x)   debug_cmd='set -x'
+                      func_echo "enabling shell trace mode"
+                      $debug_cmd
+                      ;;
+
+        --no-warnings|--no-warning|--no-warn)
+                      set dummy --warnings none ${1+"$@"}
+                      shift
+		      ;;
+
+        --warnings|--warning|-W)
+                      test $# = 0 && func_missing_arg $_G_opt && break
+                      case " $warning_categories $1" in
+                        *" $1 "*)
+                          # trailing space prevents matching last $1 above
+                          func_append_uniq opt_warning_types " $1"
+                          ;;
+                        *all)
+                          opt_warning_types=$warning_categories
+                          ;;
+                        *none)
+                          opt_warning_types=none
+                          warning_func=:
+                          ;;
+                        *error)
+                          opt_warning_types=$warning_categories
+                          warning_func=func_fatal_error
+                          ;;
+                        *)
+                          func_fatal_error \
+                             "unsupported warning category: '$1'"
+                          ;;
+                      esac
+                      shift
+                      ;;
+
+        --verbose|-v) opt_verbose=: ;;
+        --version)    func_version ;;
+        -\?|-h)       func_usage ;;
+        --help)       func_help ;;
+
+	# Separate optargs to long options (plugins may need this):
+	--*=*)        func_split_equals "$_G_opt"
+	              set dummy "$func_split_equals_lhs" \
+                          "$func_split_equals_rhs" ${1+"$@"}
+                      shift
+                      ;;
+
+       # Separate optargs to short options:
+        -W*)
+                      func_split_short_opt "$_G_opt"
+                      set dummy "$func_split_short_opt_name" \
+                          "$func_split_short_opt_arg" ${1+"$@"}
+                      shift
+                      ;;
+
+        # Separate non-argument short options:
+        -\?*|-h*|-v*|-x*)
+                      func_split_short_opt "$_G_opt"
+                      set dummy "$func_split_short_opt_name" \
+                          "-$func_split_short_opt_arg" ${1+"$@"}
+                      shift
+                      ;;
+
+        --)           break ;;
+        -*)           func_fatal_help "unrecognised option: '$_G_opt'" ;;
+        *)            set dummy "$_G_opt" ${1+"$@"}; shift; break ;;
+      esac
+    done
+
+    # save modified positional parameters for caller
+    func_quote_for_eval ${1+"$@"}
+    func_parse_options_result=$func_quote_for_eval_result
+}
+
+
+# func_validate_options [ARG]...
+# ------------------------------
+# Perform any sanity checks on option settings and/or unconsumed
+# arguments.
+func_hookable func_validate_options
+func_validate_options ()
+{
+    $debug_cmd
+
+    # Display all warnings if -W was not given.
+    test -n "$opt_warning_types" || opt_warning_types=" $warning_categories"
+
+    func_run_hooks func_validate_options ${1+"$@"}
+
+    # Bail if the options were screwed!
+    $exit_cmd $EXIT_FAILURE
+
+    # save modified positional parameters for caller
+    func_validate_options_result=$func_run_hooks_result
+}
+
+
+
+## ----------------- ##
+## Helper functions. ##
+## ----------------- ##
+
+# This section contains the helper functions used by the rest of the
+# hookable option parser framework in ascii-betical order.
+
+
+# func_fatal_help ARG...
+# ----------------------
+# Echo program name prefixed message to standard error, followed by
+# a help hint, and exit.
+func_fatal_help ()
+{
+    $debug_cmd
+
+    eval \$ECHO \""Usage: $usage"\"
+    eval \$ECHO \""$fatal_help"\"
+    func_error ${1+"$@"}
+    exit $EXIT_FAILURE
+}
+
+
+# func_help
+# ---------
+# Echo long help message to standard output and exit.
 func_help ()
 {
-    $opt_debug
+    $debug_cmd
 
-    $SED -n '/^# Usage:/,/# Report bugs to/ {
-	:print
-        s/^# //
-	s/^# *$//
-	s*\$progname*'$progname'*
-	s*\$host*'"$host"'*
-	s*\$SHELL*'"$SHELL"'*
-	s*\$LTCC*'"$LTCC"'*
-	s*\$LTCFLAGS*'"$LTCFLAGS"'*
-	s*\$LD*'"$LD"'*
-	s/\$with_gnu_ld/'"$with_gnu_ld"'/
-	s/\$automake_version/'"`(${AUTOMAKE-automake} --version) 2>/dev/null |$SED 1q`"'/
-	s/\$autoconf_version/'"`(${AUTOCONF-autoconf} --version) 2>/dev/null |$SED 1q`"'/
-	p
-	d
-     }
-     /^# .* home page:/b print
-     /^# General help using/b print
-     ' < "$progpath"
-    ret=$?
-    if test -z "$1"; then
-      exit $ret
-    fi
+    func_usage_message
+    $ECHO "$long_help_message"
+    exit 0
 }
 
-# func_missing_arg argname
+
+# func_missing_arg ARGNAME
+# ------------------------
 # Echo program name prefixed message to standard error and set global
 # exit_cmd.
 func_missing_arg ()
 {
-    $opt_debug
+    $debug_cmd
 
-    func_error "missing argument for $1."
+    func_error "Missing argument for '$1'."
     exit_cmd=exit
 }
 
 
-# func_split_short_opt shortopt
+# func_split_equals STRING
+# ------------------------
+# Set func_split_equals_lhs and func_split_equals_rhs shell variables after
+# splitting STRING at the '=' sign.
+test -z "$_G_HAVE_XSI_OPS" \
+    && (eval 'x=a/b/c;
+      test 5aa/bb/cc = "${#x}${x%%/*}${x%/*}${x#*/}${x##*/}"') 2>/dev/null \
+    && _G_HAVE_XSI_OPS=yes
+
+if test yes = "$_G_HAVE_XSI_OPS"
+then
+  # This is an XSI compatible shell, allowing a faster implementation...
+  eval 'func_split_equals ()
+  {
+      $debug_cmd
+
+      func_split_equals_lhs=${1%%=*}
+      func_split_equals_rhs=${1#*=}
+      test "x$func_split_equals_lhs" = "x$1" \
+        && func_split_equals_rhs=
+  }'
+else
+  # ...otherwise fall back to using expr, which is often a shell builtin.
+  func_split_equals ()
+  {
+      $debug_cmd
+
+      func_split_equals_lhs=`expr "x$1" : 'x\([^=]*\)'`
+      func_split_equals_rhs=
+      test "x$func_split_equals_lhs" = "x$1" \
+        || func_split_equals_rhs=`expr "x$1" : 'x[^=]*=\(.*\)$'`
+  }
+fi #func_split_equals
+
+
+# func_split_short_opt SHORTOPT
+# -----------------------------
 # Set func_split_short_opt_name and func_split_short_opt_arg shell
 # variables after splitting SHORTOPT after the 2nd character.
-func_split_short_opt ()
+if test yes = "$_G_HAVE_XSI_OPS"
+then
+  # This is an XSI compatible shell, allowing a faster implementation...
+  eval 'func_split_short_opt ()
+  {
+      $debug_cmd
+
+      func_split_short_opt_arg=${1#??}
+      func_split_short_opt_name=${1%"$func_split_short_opt_arg"}
+  }'
+else
+  # ...otherwise fall back to using expr, which is often a shell builtin.
+  func_split_short_opt ()
+  {
+      $debug_cmd
+
+      func_split_short_opt_name=`expr "x$1" : 'x-\(.\)'`
+      func_split_short_opt_arg=`expr "x$1" : 'x-.\(.*\)$'`
+  }
+fi #func_split_short_opt
+
+
+# func_usage
+# ----------
+# Echo short help message to standard output and exit.
+func_usage ()
 {
-    my_sed_short_opt='1s/^\(..\).*$/\1/;q'
-    my_sed_short_rest='1s/^..\(.*\)$/\1/;q'
+    $debug_cmd
 
-    func_split_short_opt_name=`$ECHO "$1" | $SED "$my_sed_short_opt"`
-    func_split_short_opt_arg=`$ECHO "$1" | $SED "$my_sed_short_rest"`
-} # func_split_short_opt may be replaced by extended shell implementation
+    func_usage_message
+    $ECHO "Run '$progname --help |${PAGER-more}' for full usage"
+    exit 0
+}
 
 
-# func_split_long_opt longopt
-# Set func_split_long_opt_name and func_split_long_opt_arg shell
-# variables after splitting LONGOPT at the `=' sign.
-func_split_long_opt ()
+# func_usage_message
+# ------------------
+# Echo short help message to standard output.
+func_usage_message ()
 {
-    my_sed_long_opt='1s/^\(--[^=]*\)=.*/\1/;q'
-    my_sed_long_arg='1s/^--[^=]*=//'
+    $debug_cmd
 
-    func_split_long_opt_name=`$ECHO "$1" | $SED "$my_sed_long_opt"`
-    func_split_long_opt_arg=`$ECHO "$1" | $SED "$my_sed_long_arg"`
-} # func_split_long_opt may be replaced by extended shell implementation
-
-exit_cmd=:
+    eval \$ECHO \""Usage: $usage"\"
+    echo
+    $SED -n 's|^# ||
+        /^Written by/{
+          x;p;x
+        }
+	h
+	/^Written by/q' < "$progpath"
+    echo
+    eval \$ECHO \""$usage_message"\"
+}
 
 
-
-
-
-magic="%%%MAGIC variable%%%"
-magic_exe="%%%MAGIC EXE variable%%%"
-
-# Global variables.
-nonopt=
-preserve_args=
-lo2o="s/\\.lo\$/.${objext}/"
-o2lo="s/\\.${objext}\$/.lo/"
-extracted_archives=
-extracted_serial=0
-
-# If this variable is set in any of the actions, the command in it
-# will be execed at the end.  This prevents here-documents from being
-# left over by shells.
-exec_cmd=
-
-# func_append var value
-# Append VALUE to the end of shell variable VAR.
-func_append ()
+# func_version
+# ------------
+# Echo version message to standard output and exit.
+func_version ()
 {
-    eval "${1}=\$${1}\${2}"
-} # func_append may be replaced by extended shell implementation
+    $debug_cmd
 
-# func_append_quoted var value
-# Quote VALUE and append to the end of shell variable VAR, separated
-# by a space.
-func_append_quoted ()
+    printf '%s\n' "$progname $scriptversion"
+    $SED -n '
+        /(C)/!b go
+        :more
+        /\./!{
+          N
+          s|\n# | |
+          b more
+        }
+        :go
+        /^# Written by /,/# warranty; / {
+          s|^# ||
+          s|^# *$||
+          s|\((C)\)[ 0-9,-]*[ ,-]\([1-9][0-9]* \)|\1 \2|
+          p
+        }
+        /^# Written by / {
+          s|^# ||
+          p
+        }
+        /^warranty; /q' < "$progpath"
+
+    exit $?
+}
+
+
+# Local variables:
+# mode: shell-script
+# sh-indentation: 2
+# eval: (add-hook 'before-save-hook 'time-stamp)
+# time-stamp-pattern: "10/scriptversion=%:y-%02m-%02d.%02H; # UTC"
+# time-stamp-time-zone: "UTC"
+# End:
+
+# Set a version string.
+scriptversion='(GNU libtool) 2.4.6'
+
+
+# func_echo ARG...
+# ----------------
+# Libtool also displays the current mode in messages, so override
+# funclib.sh func_echo with this custom definition.
+func_echo ()
 {
-    func_quote_for_eval "${2}"
-    eval "${1}=\$${1}\\ \$func_quote_for_eval_result"
-} # func_append_quoted may be replaced by extended shell implementation
+    $debug_cmd
+
+    _G_message=$*
+
+    func_echo_IFS=$IFS
+    IFS=$nl
+    for _G_line in $_G_message; do
+      IFS=$func_echo_IFS
+      $ECHO "$progname${opt_mode+: $opt_mode}: $_G_line"
+    done
+    IFS=$func_echo_IFS
+}
 
 
-# func_arith arithmetic-term...
-func_arith ()
+# func_warning ARG...
+# -------------------
+# Libtool warnings are not categorized, so override funclib.sh
+# func_warning with this simpler definition.
+func_warning ()
 {
-    func_arith_result=`expr "${@}"`
-} # func_arith may be replaced by extended shell implementation
+    $debug_cmd
+
+    $warning_func ${1+"$@"}
+}
 
 
-# func_len string
-# STRING may not start with a hyphen.
-func_len ()
+## ---------------- ##
+## Options parsing. ##
+## ---------------- ##
+
+# Hook in the functions to make sure our own options are parsed during
+# the option parsing loop.
+
+usage='$progpath [OPTION]... [MODE-ARG]...'
+
+# Short help message in response to '-h'.
+usage_message="Options:
+       --config             show all configuration variables
+       --debug              enable verbose shell tracing
+   -n, --dry-run            display commands without modifying any files
+       --features           display basic configuration information and exit
+       --mode=MODE          use operation mode MODE
+       --no-warnings        equivalent to '-Wnone'
+       --preserve-dup-deps  don't remove duplicate dependency libraries
+       --quiet, --silent    don't print informational messages
+       --tag=TAG            use configuration variables from tag TAG
+   -v, --verbose            print more informational messages than default
+       --version            print version information
+   -W, --warnings=CATEGORY  report the warnings falling in CATEGORY [all]
+   -h, --help, --help-all   print short, long, or detailed help message
+"
+
+# Additional text appended to 'usage_message' in response to '--help'.
+func_help ()
 {
-    func_len_result=`expr "${1}" : ".*" 2>/dev/null || echo $max_cmd_len`
-} # func_len may be replaced by extended shell implementation
+    $debug_cmd
+
+    func_usage_message
+    $ECHO "$long_help_message
+
+MODE must be one of the following:
+
+       clean           remove files from the build directory
+       compile         compile a source file into a libtool object
+       execute         automatically set library path, then run a program
+       finish          complete the installation of libtool libraries
+       install         install libraries or executables
+       link            create a library or an executable
+       uninstall       remove libraries from an installed directory
+
+MODE-ARGS vary depending on the MODE.  When passed as first option,
+'--mode=MODE' may be abbreviated as 'MODE' or a unique abbreviation of that.
+Try '$progname --help --mode=MODE' for a more detailed description of MODE.
+
+When reporting a bug, please describe a test case to reproduce it and
+include the following information:
+
+       host-triplet:   $host
+       shell:          $SHELL
+       compiler:       $LTCC
+       compiler flags: $LTCFLAGS
+       linker:         $LD (gnu? $with_gnu_ld)
+       version:        $progname (GNU libtool) 2.4.6
+       automake:       `($AUTOMAKE --version) 2>/dev/null |$SED 1q`
+       autoconf:       `($AUTOCONF --version) 2>/dev/null |$SED 1q`
+
+Report bugs to <bug-libtool@gnu.org>.
+GNU libtool home page: <http://www.gnu.org/s/libtool/>.
+General help using GNU software: <http://www.gnu.org/gethelp/>."
+    exit 0
+}
 
 
-# func_lo2o object
-func_lo2o ()
-{
-    func_lo2o_result=`$ECHO "${1}" | $SED "$lo2o"`
-} # func_lo2o may be replaced by extended shell implementation
+# func_lo2o OBJECT-NAME
+# ---------------------
+# Transform OBJECT-NAME from a '.lo' suffix to the platform specific
+# object suffix.
+
+lo2o=s/\\.lo\$/.$objext/
+o2lo=s/\\.$objext\$/.lo/
+
+if test yes = "$_G_HAVE_XSI_OPS"; then
+  eval 'func_lo2o ()
+  {
+    case $1 in
+      *.lo) func_lo2o_result=${1%.lo}.$objext ;;
+      *   ) func_lo2o_result=$1               ;;
+    esac
+  }'
+
+  # func_xform LIBOBJ-OR-SOURCE
+  # ---------------------------
+  # Transform LIBOBJ-OR-SOURCE from a '.o' or '.c' (or otherwise)
+  # suffix to a '.lo' libtool-object suffix.
+  eval 'func_xform ()
+  {
+    func_xform_result=${1%.*}.lo
+  }'
+else
+  # ...otherwise fall back to using sed.
+  func_lo2o ()
+  {
+    func_lo2o_result=`$ECHO "$1" | $SED "$lo2o"`
+  }
+
+  func_xform ()
+  {
+    func_xform_result=`$ECHO "$1" | $SED 's|\.[^.]*$|.lo|'`
+  }
+fi
 
 
-# func_xform libobj-or-source
-func_xform ()
-{
-    func_xform_result=`$ECHO "${1}" | $SED 's/\.[^.]*$/.lo/'`
-} # func_xform may be replaced by extended shell implementation
-
-
-# func_fatal_configuration arg...
+# func_fatal_configuration ARG...
+# -------------------------------
 # Echo program name prefixed message to standard error, followed by
 # a configuration failure hint, and exit.
 func_fatal_configuration ()
 {
-    func_error ${1+"$@"}
-    func_error "See the $PACKAGE documentation for more information."
-    func_fatal_error "Fatal configuration error."
+    func__fatal_error ${1+"$@"} \
+      "See the $PACKAGE documentation for more information." \
+      "Fatal configuration error."
 }
 
 
 # func_config
+# -----------
 # Display the configuration for all the tags in this script.
 func_config ()
 {
@@ -915,17 +2149,19 @@
     exit $?
 }
 
+
 # func_features
+# -------------
 # Display the features supported by this script.
 func_features ()
 {
     echo "host: $host"
-    if test "$build_libtool_libs" = yes; then
+    if test yes = "$build_libtool_libs"; then
       echo "enable shared libraries"
     else
       echo "disable shared libraries"
     fi
-    if test "$build_old_libs" = yes; then
+    if test yes = "$build_old_libs"; then
       echo "enable static libraries"
     else
       echo "disable static libraries"
@@ -934,314 +2170,350 @@
     exit $?
 }
 
-# func_enable_tag tagname
+
+# func_enable_tag TAGNAME
+# -----------------------
 # Verify that TAGNAME is valid, and either flag an error and exit, or
 # enable the TAGNAME tag.  We also add TAGNAME to the global $taglist
 # variable here.
 func_enable_tag ()
 {
-  # Global variable:
-  tagname="$1"
+    # Global variable:
+    tagname=$1
 
-  re_begincf="^# ### BEGIN LIBTOOL TAG CONFIG: $tagname\$"
-  re_endcf="^# ### END LIBTOOL TAG CONFIG: $tagname\$"
-  sed_extractcf="/$re_begincf/,/$re_endcf/p"
+    re_begincf="^# ### BEGIN LIBTOOL TAG CONFIG: $tagname\$"
+    re_endcf="^# ### END LIBTOOL TAG CONFIG: $tagname\$"
+    sed_extractcf=/$re_begincf/,/$re_endcf/p
 
-  # Validate tagname.
-  case $tagname in
-    *[!-_A-Za-z0-9,/]*)
-      func_fatal_error "invalid tag name: $tagname"
-      ;;
-  esac
+    # Validate tagname.
+    case $tagname in
+      *[!-_A-Za-z0-9,/]*)
+        func_fatal_error "invalid tag name: $tagname"
+        ;;
+    esac
 
-  # Don't test for the "default" C tag, as we know it's
-  # there but not specially marked.
-  case $tagname in
-    CC) ;;
+    # Don't test for the "default" C tag, as we know it's
+    # there but not specially marked.
+    case $tagname in
+        CC) ;;
     *)
-      if $GREP "$re_begincf" "$progpath" >/dev/null 2>&1; then
-	taglist="$taglist $tagname"
+        if $GREP "$re_begincf" "$progpath" >/dev/null 2>&1; then
+	  taglist="$taglist $tagname"
 
-	# Evaluate the configuration.  Be careful to quote the path
-	# and the sed script, to avoid splitting on whitespace, but
-	# also don't use non-portable quotes within backquotes within
-	# quotes we have to do it in 2 steps:
-	extractedcf=`$SED -n -e "$sed_extractcf" < "$progpath"`
-	eval "$extractedcf"
-      else
-	func_error "ignoring unknown tag $tagname"
-      fi
-      ;;
-  esac
+	  # Evaluate the configuration.  Be careful to quote the path
+	  # and the sed script, to avoid splitting on whitespace, but
+	  # also don't use non-portable quotes within backquotes within
+	  # quotes we have to do it in 2 steps:
+	  extractedcf=`$SED -n -e "$sed_extractcf" < "$progpath"`
+	  eval "$extractedcf"
+        else
+	  func_error "ignoring unknown tag $tagname"
+        fi
+        ;;
+    esac
 }
 
+
 # func_check_version_match
+# ------------------------
 # Ensure that we are using m4 macros, and libtool script from the same
 # release of libtool.
 func_check_version_match ()
 {
-  if test "$package_revision" != "$macro_revision"; then
-    if test "$VERSION" != "$macro_version"; then
-      if test -z "$macro_version"; then
-        cat >&2 <<_LT_EOF
+    if test "$package_revision" != "$macro_revision"; then
+      if test "$VERSION" != "$macro_version"; then
+        if test -z "$macro_version"; then
+          cat >&2 <<_LT_EOF
 $progname: Version mismatch error.  This is $PACKAGE $VERSION, but the
 $progname: definition of this LT_INIT comes from an older release.
 $progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION
 $progname: and run autoconf again.
 _LT_EOF
-      else
-        cat >&2 <<_LT_EOF
+        else
+          cat >&2 <<_LT_EOF
 $progname: Version mismatch error.  This is $PACKAGE $VERSION, but the
 $progname: definition of this LT_INIT comes from $PACKAGE $macro_version.
 $progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION
 $progname: and run autoconf again.
 _LT_EOF
-      fi
-    else
-      cat >&2 <<_LT_EOF
+        fi
+      else
+        cat >&2 <<_LT_EOF
 $progname: Version mismatch error.  This is $PACKAGE $VERSION, revision $package_revision,
 $progname: but the definition of this LT_INIT comes from revision $macro_revision.
 $progname: You should recreate aclocal.m4 with macros from revision $package_revision
 $progname: of $PACKAGE $VERSION and run autoconf again.
 _LT_EOF
-    fi
+      fi
 
-    exit $EXIT_MISMATCH
-  fi
+      exit $EXIT_MISMATCH
+    fi
 }
 
 
-# Shorthand for --mode=foo, only valid as the first argument
-case $1 in
-clean|clea|cle|cl)
-  shift; set dummy --mode clean ${1+"$@"}; shift
-  ;;
-compile|compil|compi|comp|com|co|c)
-  shift; set dummy --mode compile ${1+"$@"}; shift
-  ;;
-execute|execut|execu|exec|exe|ex|e)
-  shift; set dummy --mode execute ${1+"$@"}; shift
-  ;;
-finish|finis|fini|fin|fi|f)
-  shift; set dummy --mode finish ${1+"$@"}; shift
-  ;;
-install|instal|insta|inst|ins|in|i)
-  shift; set dummy --mode install ${1+"$@"}; shift
-  ;;
-link|lin|li|l)
-  shift; set dummy --mode link ${1+"$@"}; shift
-  ;;
-uninstall|uninstal|uninsta|uninst|unins|unin|uni|un|u)
-  shift; set dummy --mode uninstall ${1+"$@"}; shift
-  ;;
-esac
-
-
-
-# Option defaults:
-opt_debug=:
-opt_dry_run=false
-opt_config=false
-opt_preserve_dup_deps=false
-opt_features=false
-opt_finish=false
-opt_help=false
-opt_help_all=false
-opt_silent=:
-opt_warning=:
-opt_verbose=:
-opt_silent=false
-opt_verbose=false
-
-
-# Parse options once, thoroughly.  This comes as soon as possible in the
-# script to make things like `--version' happen as quickly as we can.
+# libtool_options_prep [ARG]...
+# -----------------------------
+# Preparation for options parsed by libtool.
+libtool_options_prep ()
 {
-  # this just eases exit handling
-  while test $# -gt 0; do
-    opt="$1"
-    shift
-    case $opt in
-      --debug|-x)	opt_debug='set -x'
-			func_echo "enabling shell trace mode"
-			$opt_debug
-			;;
-      --dry-run|--dryrun|-n)
-			opt_dry_run=:
-			;;
-      --config)
-			opt_config=:
-func_config
-			;;
-      --dlopen|-dlopen)
-			optarg="$1"
-			opt_dlopen="${opt_dlopen+$opt_dlopen
-}$optarg"
-			shift
-			;;
-      --preserve-dup-deps)
-			opt_preserve_dup_deps=:
-			;;
-      --features)
-			opt_features=:
-func_features
-			;;
-      --finish)
-			opt_finish=:
-set dummy --mode finish ${1+"$@"}; shift
-			;;
-      --help)
-			opt_help=:
-			;;
-      --help-all)
-			opt_help_all=:
-opt_help=': help-all'
-			;;
-      --mode)
-			test $# = 0 && func_missing_arg $opt && break
-			optarg="$1"
-			opt_mode="$optarg"
-case $optarg in
-  # Valid mode arguments:
-  clean|compile|execute|finish|install|link|relink|uninstall) ;;
+    $debug_mode
 
-  # Catch anything else as an error
-  *) func_error "invalid argument for $opt"
-     exit_cmd=exit
-     break
-     ;;
-esac
-			shift
-			;;
-      --no-silent|--no-quiet)
-			opt_silent=false
-func_append preserve_args " $opt"
-			;;
-      --no-warning|--no-warn)
-			opt_warning=false
-func_append preserve_args " $opt"
-			;;
-      --no-verbose)
-			opt_verbose=false
-func_append preserve_args " $opt"
-			;;
-      --silent|--quiet)
-			opt_silent=:
-func_append preserve_args " $opt"
-        opt_verbose=false
-			;;
-      --verbose|-v)
-			opt_verbose=:
-func_append preserve_args " $opt"
-opt_silent=false
-			;;
-      --tag)
-			test $# = 0 && func_missing_arg $opt && break
-			optarg="$1"
-			opt_tag="$optarg"
-func_append preserve_args " $opt $optarg"
-func_enable_tag "$optarg"
-			shift
-			;;
+    # Option defaults:
+    opt_config=false
+    opt_dlopen=
+    opt_dry_run=false
+    opt_help=false
+    opt_mode=
+    opt_preserve_dup_deps=false
+    opt_quiet=false
 
-      -\?|-h)		func_usage				;;
-      --help)		func_help				;;
-      --version)	func_version				;;
+    nonopt=
+    preserve_args=
 
-      # Separate optargs to long options:
-      --*=*)
-			func_split_long_opt "$opt"
-			set dummy "$func_split_long_opt_name" "$func_split_long_opt_arg" ${1+"$@"}
-			shift
-			;;
-
-      # Separate non-argument short options:
-      -\?*|-h*|-n*|-v*)
-			func_split_short_opt "$opt"
-			set dummy "$func_split_short_opt_name" "-$func_split_short_opt_arg" ${1+"$@"}
-			shift
-			;;
-
-      --)		break					;;
-      -*)		func_fatal_help "unrecognized option \`$opt'" ;;
-      *)		set dummy "$opt" ${1+"$@"};	shift; break  ;;
+    # Shorthand for --mode=foo, only valid as the first argument
+    case $1 in
+    clean|clea|cle|cl)
+      shift; set dummy --mode clean ${1+"$@"}; shift
+      ;;
+    compile|compil|compi|comp|com|co|c)
+      shift; set dummy --mode compile ${1+"$@"}; shift
+      ;;
+    execute|execut|execu|exec|exe|ex|e)
+      shift; set dummy --mode execute ${1+"$@"}; shift
+      ;;
+    finish|finis|fini|fin|fi|f)
+      shift; set dummy --mode finish ${1+"$@"}; shift
+      ;;
+    install|instal|insta|inst|ins|in|i)
+      shift; set dummy --mode install ${1+"$@"}; shift
+      ;;
+    link|lin|li|l)
+      shift; set dummy --mode link ${1+"$@"}; shift
+      ;;
+    uninstall|uninstal|uninsta|uninst|unins|unin|uni|un|u)
+      shift; set dummy --mode uninstall ${1+"$@"}; shift
+      ;;
     esac
-  done
 
-  # Validate options:
-
-  # save first non-option argument
-  if test "$#" -gt 0; then
-    nonopt="$opt"
-    shift
-  fi
-
-  # preserve --debug
-  test "$opt_debug" = : || func_append preserve_args " --debug"
-
-  case $host in
-    *cygwin* | *mingw* | *pw32* | *cegcc*)
-      # don't eliminate duplications in $postdeps and $predeps
-      opt_duplicate_compiler_generated_deps=:
-      ;;
-    *)
-      opt_duplicate_compiler_generated_deps=$opt_preserve_dup_deps
-      ;;
-  esac
-
-  $opt_help || {
-    # Sanity checks first:
-    func_check_version_match
-
-    if test "$build_libtool_libs" != yes && test "$build_old_libs" != yes; then
-      func_fatal_configuration "not configured to build any kind of library"
-    fi
-
-    # Darwin sucks
-    eval std_shrext=\"$shrext_cmds\"
-
-    # Only execute mode is allowed to have -dlopen flags.
-    if test -n "$opt_dlopen" && test "$opt_mode" != execute; then
-      func_error "unrecognized option \`-dlopen'"
-      $ECHO "$help" 1>&2
-      exit $EXIT_FAILURE
-    fi
-
-    # Change the help message to a mode-specific one.
-    generic_help="$help"
-    help="Try \`$progname --help --mode=$opt_mode' for more information."
-  }
-
-
-  # Bail if the options were screwed
-  $exit_cmd $EXIT_FAILURE
+    # Pass back the list of options.
+    func_quote_for_eval ${1+"$@"}
+    libtool_options_prep_result=$func_quote_for_eval_result
 }
+func_add_hook func_options_prep libtool_options_prep
 
 
+# libtool_parse_options [ARG]...
+# ---------------------------------
+# Provide handling for libtool specific options.
+libtool_parse_options ()
+{
+    $debug_cmd
+
+    # Perform our own loop to consume as many options as possible in
+    # each iteration.
+    while test $# -gt 0; do
+      _G_opt=$1
+      shift
+      case $_G_opt in
+        --dry-run|--dryrun|-n)
+                        opt_dry_run=:
+                        ;;
+
+        --config)       func_config ;;
+
+        --dlopen|-dlopen)
+                        opt_dlopen="${opt_dlopen+$opt_dlopen
+}$1"
+                        shift
+                        ;;
+
+        --preserve-dup-deps)
+                        opt_preserve_dup_deps=: ;;
+
+        --features)     func_features ;;
+
+        --finish)       set dummy --mode finish ${1+"$@"}; shift ;;
+
+        --help)         opt_help=: ;;
+
+        --help-all)     opt_help=': help-all' ;;
+
+        --mode)         test $# = 0 && func_missing_arg $_G_opt && break
+                        opt_mode=$1
+                        case $1 in
+                          # Valid mode arguments:
+                          clean|compile|execute|finish|install|link|relink|uninstall) ;;
+
+                          # Catch anything else as an error
+                          *) func_error "invalid argument for $_G_opt"
+                             exit_cmd=exit
+                             break
+                             ;;
+                        esac
+                        shift
+                        ;;
+
+        --no-silent|--no-quiet)
+                        opt_quiet=false
+                        func_append preserve_args " $_G_opt"
+                        ;;
+
+        --no-warnings|--no-warning|--no-warn)
+                        opt_warning=false
+                        func_append preserve_args " $_G_opt"
+                        ;;
+
+        --no-verbose)
+                        opt_verbose=false
+                        func_append preserve_args " $_G_opt"
+                        ;;
+
+        --silent|--quiet)
+                        opt_quiet=:
+                        opt_verbose=false
+                        func_append preserve_args " $_G_opt"
+                        ;;
+
+        --tag)          test $# = 0 && func_missing_arg $_G_opt && break
+                        opt_tag=$1
+                        func_append preserve_args " $_G_opt $1"
+                        func_enable_tag "$1"
+                        shift
+                        ;;
+
+        --verbose|-v)   opt_quiet=false
+                        opt_verbose=:
+                        func_append preserve_args " $_G_opt"
+                        ;;
+
+	# An option not handled by this hook function:
+        *)		set dummy "$_G_opt" ${1+"$@"};	shift; break  ;;
+      esac
+    done
+
+
+    # save modified positional parameters for caller
+    func_quote_for_eval ${1+"$@"}
+    libtool_parse_options_result=$func_quote_for_eval_result
+}
+func_add_hook func_parse_options libtool_parse_options
+
+
+
+# libtool_validate_options [ARG]...
+# ---------------------------------
+# Perform any sanity checks on option settings and/or unconsumed
+# arguments.
+libtool_validate_options ()
+{
+    # save first non-option argument
+    if test 0 -lt $#; then
+      nonopt=$1
+      shift
+    fi
+
+    # preserve --debug
+    test : = "$debug_cmd" || func_append preserve_args " --debug"
+
+    case $host in
+      # Solaris2 added to fix http://debbugs.gnu.org/cgi/bugreport.cgi?bug=16452
+      # see also: http://gcc.gnu.org/bugzilla/show_bug.cgi?id=59788
+      *cygwin* | *mingw* | *pw32* | *cegcc* | *solaris2* | *os2*)
+        # don't eliminate duplications in $postdeps and $predeps
+        opt_duplicate_compiler_generated_deps=:
+        ;;
+      *)
+        opt_duplicate_compiler_generated_deps=$opt_preserve_dup_deps
+        ;;
+    esac
+
+    $opt_help || {
+      # Sanity checks first:
+      func_check_version_match
+
+      test yes != "$build_libtool_libs" \
+        && test yes != "$build_old_libs" \
+        && func_fatal_configuration "not configured to build any kind of library"
+
+      # Darwin sucks
+      eval std_shrext=\"$shrext_cmds\"
+
+      # Only execute mode is allowed to have -dlopen flags.
+      if test -n "$opt_dlopen" && test execute != "$opt_mode"; then
+        func_error "unrecognized option '-dlopen'"
+        $ECHO "$help" 1>&2
+        exit $EXIT_FAILURE
+      fi
+
+      # Change the help message to a mode-specific one.
+      generic_help=$help
+      help="Try '$progname --help --mode=$opt_mode' for more information."
+    }
+
+    # Pass back the unparsed argument list
+    func_quote_for_eval ${1+"$@"}
+    libtool_validate_options_result=$func_quote_for_eval_result
+}
+func_add_hook func_validate_options libtool_validate_options
+
+
+# Process options as early as possible so that --help and --version
+# can return quickly.
+func_options ${1+"$@"}
+eval set dummy "$func_options_result"; shift
+
 
 
 ## ----------- ##
 ##    Main.    ##
 ## ----------- ##
 
+magic='%%%MAGIC variable%%%'
+magic_exe='%%%MAGIC EXE variable%%%'
+
+# Global variables.
+extracted_archives=
+extracted_serial=0
+
+# If this variable is set in any of the actions, the command in it
+# will be execed at the end.  This prevents here-documents from being
+# left over by shells.
+exec_cmd=
+
+
+# A function that is used when there is no print builtin or printf.
+func_fallback_echo ()
+{
+  eval 'cat <<_LTECHO_EOF
+$1
+_LTECHO_EOF'
+}
+
+# func_generated_by_libtool
+# True iff stdin has been generated by Libtool. This function is only
+# a basic sanity check; it will hardly flush out determined imposters.
+func_generated_by_libtool_p ()
+{
+  $GREP "^# Generated by .*$PACKAGE" > /dev/null 2>&1
+}
+
 # func_lalib_p file
-# True iff FILE is a libtool `.la' library or `.lo' object file.
+# True iff FILE is a libtool '.la' library or '.lo' object file.
 # This function is only a basic sanity check; it will hardly flush out
 # determined imposters.
 func_lalib_p ()
 {
     test -f "$1" &&
-      $SED -e 4q "$1" 2>/dev/null \
-        | $GREP "^# Generated by .*$PACKAGE" > /dev/null 2>&1
+      $SED -e 4q "$1" 2>/dev/null | func_generated_by_libtool_p
 }
 
 # func_lalib_unsafe_p file
-# True iff FILE is a libtool `.la' library or `.lo' object file.
+# True iff FILE is a libtool '.la' library or '.lo' object file.
 # This function implements the same check as func_lalib_p without
 # resorting to external programs.  To this end, it redirects stdin and
 # closes it afterwards, without saving the original file descriptor.
 # As a safety measure, use it only where a negative result would be
-# fatal anyway.  Works if `file' does not exist.
+# fatal anyway.  Works if 'file' does not exist.
 func_lalib_unsafe_p ()
 {
     lalib_p=no
@@ -1249,13 +2521,13 @@
 	for lalib_p_l in 1 2 3 4
 	do
 	    read lalib_p_line
-	    case "$lalib_p_line" in
+	    case $lalib_p_line in
 		\#\ Generated\ by\ *$PACKAGE* ) lalib_p=yes; break;;
 	    esac
 	done
 	exec 0<&5 5<&-
     fi
-    test "$lalib_p" = yes
+    test yes = "$lalib_p"
 }
 
 # func_ltwrapper_script_p file
@@ -1264,7 +2536,8 @@
 # determined imposters.
 func_ltwrapper_script_p ()
 {
-    func_lalib_p "$1"
+    test -f "$1" &&
+      $lt_truncate_bin < "$1" 2>/dev/null | func_generated_by_libtool_p
 }
 
 # func_ltwrapper_executable_p file
@@ -1289,7 +2562,7 @@
 {
     func_dirname_and_basename "$1" "" "."
     func_stripname '' '.exe' "$func_basename_result"
-    func_ltwrapper_scriptname_result="$func_dirname_result/$objdir/${func_stripname_result}_ltshwrapper"
+    func_ltwrapper_scriptname_result=$func_dirname_result/$objdir/${func_stripname_result}_ltshwrapper
 }
 
 # func_ltwrapper_p file
@@ -1308,11 +2581,13 @@
 # FAIL_CMD may read-access the current command in variable CMD!
 func_execute_cmds ()
 {
-    $opt_debug
+    $debug_cmd
+
     save_ifs=$IFS; IFS='~'
     for cmd in $1; do
-      IFS=$save_ifs
+      IFS=$sp$nl
       eval cmd=\"$cmd\"
+      IFS=$save_ifs
       func_show_eval "$cmd" "${2-:}"
     done
     IFS=$save_ifs
@@ -1324,10 +2599,11 @@
 # Note that it is not necessary on cygwin/mingw to append a dot to
 # FILE even if both FILE and FILE.exe exist: automatic-append-.exe
 # behavior happens only for exec(3), not for open(2)!  Also, sourcing
-# `FILE.' does not work on cygwin managed mounts.
+# 'FILE.' does not work on cygwin managed mounts.
 func_source ()
 {
-    $opt_debug
+    $debug_cmd
+
     case $1 in
     */* | *\\*)	. "$1" ;;
     *)		. "./$1" ;;
@@ -1354,10 +2630,10 @@
 # store the result into func_replace_sysroot_result.
 func_replace_sysroot ()
 {
-  case "$lt_sysroot:$1" in
+  case $lt_sysroot:$1 in
   ?*:"$lt_sysroot"*)
     func_stripname "$lt_sysroot" '' "$1"
-    func_replace_sysroot_result="=$func_stripname_result"
+    func_replace_sysroot_result='='$func_stripname_result
     ;;
   *)
     # Including no sysroot.
@@ -1374,7 +2650,8 @@
 # arg is usually of the form 'gcc ...'
 func_infer_tag ()
 {
-    $opt_debug
+    $debug_cmd
+
     if test -n "$available_tags" && test -z "$tagname"; then
       CC_quoted=
       for arg in $CC; do
@@ -1393,7 +2670,7 @@
 	for z in $available_tags; do
 	  if $GREP "^# ### BEGIN LIBTOOL TAG CONFIG: $z$" < "$progpath" > /dev/null; then
 	    # Evaluate the configuration.
-	    eval "`${SED} -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^# ### END LIBTOOL TAG CONFIG: '$z'$/p' < $progpath`"
+	    eval "`$SED -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^# ### END LIBTOOL TAG CONFIG: '$z'$/p' < $progpath`"
 	    CC_quoted=
 	    for arg in $CC; do
 	      # Double-quote args containing other shell metacharacters.
@@ -1418,7 +2695,7 @@
 	# line option must be used.
 	if test -z "$tagname"; then
 	  func_echo "unable to infer tagged configuration"
-	  func_fatal_error "specify a tag with \`--tag'"
+	  func_fatal_error "specify a tag with '--tag'"
 #	else
 #	  func_verbose "using $tagname tagged configuration"
 	fi
@@ -1434,15 +2711,15 @@
 # but don't create it if we're doing a dry run.
 func_write_libtool_object ()
 {
-    write_libobj=${1}
-    if test "$build_libtool_libs" = yes; then
-      write_lobj=\'${2}\'
+    write_libobj=$1
+    if test yes = "$build_libtool_libs"; then
+      write_lobj=\'$2\'
     else
       write_lobj=none
     fi
 
-    if test "$build_old_libs" = yes; then
-      write_oldobj=\'${3}\'
+    if test yes = "$build_old_libs"; then
+      write_oldobj=\'$3\'
     else
       write_oldobj=none
     fi
@@ -1450,7 +2727,7 @@
     $opt_dry_run || {
       cat >${write_libobj}T <<EOF
 # $write_libobj - a libtool object file
-# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION
+# Generated by $PROGRAM (GNU $PACKAGE) $VERSION
 #
 # Please DO NOT delete this file!
 # It is necessary for linking the library.
@@ -1462,7 +2739,7 @@
 non_pic_object=$write_oldobj
 
 EOF
-      $MV "${write_libobj}T" "${write_libobj}"
+      $MV "${write_libobj}T" "$write_libobj"
     }
 }
 
@@ -1482,8 +2759,9 @@
 # be empty on error (or when ARG is empty)
 func_convert_core_file_wine_to_w32 ()
 {
-  $opt_debug
-  func_convert_core_file_wine_to_w32_result="$1"
+  $debug_cmd
+
+  func_convert_core_file_wine_to_w32_result=$1
   if test -n "$1"; then
     # Unfortunately, winepath does not exit with a non-zero error code, so we
     # are forced to check the contents of stdout. On the other hand, if the
@@ -1491,9 +2769,9 @@
     # *an error message* to stdout. So we must check for both error code of
     # zero AND non-empty stdout, which explains the odd construction:
     func_convert_core_file_wine_to_w32_tmp=`winepath -w "$1" 2>/dev/null`
-    if test "$?" -eq 0 && test -n "${func_convert_core_file_wine_to_w32_tmp}"; then
+    if test "$?" -eq 0 && test -n "$func_convert_core_file_wine_to_w32_tmp"; then
       func_convert_core_file_wine_to_w32_result=`$ECHO "$func_convert_core_file_wine_to_w32_tmp" |
-        $SED -e "$lt_sed_naive_backslashify"`
+        $SED -e "$sed_naive_backslashify"`
     else
       func_convert_core_file_wine_to_w32_result=
     fi
@@ -1514,18 +2792,19 @@
 # are convertible, then the result may be empty.
 func_convert_core_path_wine_to_w32 ()
 {
-  $opt_debug
+  $debug_cmd
+
   # unfortunately, winepath doesn't convert paths, only file names
-  func_convert_core_path_wine_to_w32_result=""
+  func_convert_core_path_wine_to_w32_result=
   if test -n "$1"; then
     oldIFS=$IFS
     IFS=:
     for func_convert_core_path_wine_to_w32_f in $1; do
       IFS=$oldIFS
       func_convert_core_file_wine_to_w32 "$func_convert_core_path_wine_to_w32_f"
-      if test -n "$func_convert_core_file_wine_to_w32_result" ; then
+      if test -n "$func_convert_core_file_wine_to_w32_result"; then
         if test -z "$func_convert_core_path_wine_to_w32_result"; then
-          func_convert_core_path_wine_to_w32_result="$func_convert_core_file_wine_to_w32_result"
+          func_convert_core_path_wine_to_w32_result=$func_convert_core_file_wine_to_w32_result
         else
           func_append func_convert_core_path_wine_to_w32_result ";$func_convert_core_file_wine_to_w32_result"
         fi
@@ -1554,7 +2833,8 @@
 # environment variable; do not put it in $PATH.
 func_cygpath ()
 {
-  $opt_debug
+  $debug_cmd
+
   if test -n "$LT_CYGPATH" && test -f "$LT_CYGPATH"; then
     func_cygpath_result=`$LT_CYGPATH "$@" 2>/dev/null`
     if test "$?" -ne 0; then
@@ -1563,7 +2843,7 @@
     fi
   else
     func_cygpath_result=
-    func_error "LT_CYGPATH is empty or specifies non-existent file: \`$LT_CYGPATH'"
+    func_error "LT_CYGPATH is empty or specifies non-existent file: '$LT_CYGPATH'"
   fi
 }
 #end: func_cygpath
@@ -1574,10 +2854,11 @@
 # result in func_convert_core_msys_to_w32_result.
 func_convert_core_msys_to_w32 ()
 {
-  $opt_debug
+  $debug_cmd
+
   # awkward: cmd appends spaces to result
   func_convert_core_msys_to_w32_result=`( cmd //c echo "$1" ) 2>/dev/null |
-    $SED -e 's/[ ]*$//' -e "$lt_sed_naive_backslashify"`
+    $SED -e 's/[ ]*$//' -e "$sed_naive_backslashify"`
 }
 #end: func_convert_core_msys_to_w32
 
@@ -1588,13 +2869,14 @@
 # func_to_host_file_result to ARG1).
 func_convert_file_check ()
 {
-  $opt_debug
-  if test -z "$2" && test -n "$1" ; then
+  $debug_cmd
+
+  if test -z "$2" && test -n "$1"; then
     func_error "Could not determine host file name corresponding to"
-    func_error "  \`$1'"
+    func_error "  '$1'"
     func_error "Continuing, but uninstalled executables may not work."
     # Fallback:
-    func_to_host_file_result="$1"
+    func_to_host_file_result=$1
   fi
 }
 # end func_convert_file_check
@@ -1606,10 +2888,11 @@
 # func_to_host_file_result to a simplistic fallback value (see below).
 func_convert_path_check ()
 {
-  $opt_debug
+  $debug_cmd
+
   if test -z "$4" && test -n "$3"; then
     func_error "Could not determine the host path corresponding to"
-    func_error "  \`$3'"
+    func_error "  '$3'"
     func_error "Continuing, but uninstalled executables may not work."
     # Fallback.  This is a deliberately simplistic "conversion" and
     # should not be "improved".  See libtool.info.
@@ -1618,7 +2901,7 @@
       func_to_host_path_result=`echo "$3" |
         $SED -e "$lt_replace_pathsep_chars"`
     else
-      func_to_host_path_result="$3"
+      func_to_host_path_result=$3
     fi
   fi
 }
@@ -1630,9 +2913,10 @@
 # and appending REPL if ORIG matches BACKPAT.
 func_convert_path_front_back_pathsep ()
 {
-  $opt_debug
+  $debug_cmd
+
   case $4 in
-  $1 ) func_to_host_path_result="$3$func_to_host_path_result"
+  $1 ) func_to_host_path_result=$3$func_to_host_path_result
     ;;
   esac
   case $4 in
@@ -1646,7 +2930,7 @@
 ##################################################
 # $build to $host FILE NAME CONVERSION FUNCTIONS #
 ##################################################
-# invoked via `$to_host_file_cmd ARG'
+# invoked via '$to_host_file_cmd ARG'
 #
 # In each case, ARG is the path to be converted from $build to $host format.
 # Result will be available in $func_to_host_file_result.
@@ -1657,7 +2941,8 @@
 # in func_to_host_file_result.
 func_to_host_file ()
 {
-  $opt_debug
+  $debug_cmd
+
   $to_host_file_cmd "$1"
 }
 # end func_to_host_file
@@ -1669,7 +2954,8 @@
 # in (the comma separated) LAZY, no conversion takes place.
 func_to_tool_file ()
 {
-  $opt_debug
+  $debug_cmd
+
   case ,$2, in
     *,"$to_tool_file_cmd",*)
       func_to_tool_file_result=$1
@@ -1687,7 +2973,7 @@
 # Copy ARG to func_to_host_file_result.
 func_convert_file_noop ()
 {
-  func_to_host_file_result="$1"
+  func_to_host_file_result=$1
 }
 # end func_convert_file_noop
 
@@ -1698,11 +2984,12 @@
 # func_to_host_file_result.
 func_convert_file_msys_to_w32 ()
 {
-  $opt_debug
-  func_to_host_file_result="$1"
+  $debug_cmd
+
+  func_to_host_file_result=$1
   if test -n "$1"; then
     func_convert_core_msys_to_w32 "$1"
-    func_to_host_file_result="$func_convert_core_msys_to_w32_result"
+    func_to_host_file_result=$func_convert_core_msys_to_w32_result
   fi
   func_convert_file_check "$1" "$func_to_host_file_result"
 }
@@ -1714,8 +3001,9 @@
 # func_to_host_file_result.
 func_convert_file_cygwin_to_w32 ()
 {
-  $opt_debug
-  func_to_host_file_result="$1"
+  $debug_cmd
+
+  func_to_host_file_result=$1
   if test -n "$1"; then
     # because $build is cygwin, we call "the" cygpath in $PATH; no need to use
     # LT_CYGPATH in this case.
@@ -1731,11 +3019,12 @@
 # and a working winepath. Returns result in func_to_host_file_result.
 func_convert_file_nix_to_w32 ()
 {
-  $opt_debug
-  func_to_host_file_result="$1"
+  $debug_cmd
+
+  func_to_host_file_result=$1
   if test -n "$1"; then
     func_convert_core_file_wine_to_w32 "$1"
-    func_to_host_file_result="$func_convert_core_file_wine_to_w32_result"
+    func_to_host_file_result=$func_convert_core_file_wine_to_w32_result
   fi
   func_convert_file_check "$1" "$func_to_host_file_result"
 }
@@ -1747,12 +3036,13 @@
 # Returns result in func_to_host_file_result.
 func_convert_file_msys_to_cygwin ()
 {
-  $opt_debug
-  func_to_host_file_result="$1"
+  $debug_cmd
+
+  func_to_host_file_result=$1
   if test -n "$1"; then
     func_convert_core_msys_to_w32 "$1"
     func_cygpath -u "$func_convert_core_msys_to_w32_result"
-    func_to_host_file_result="$func_cygpath_result"
+    func_to_host_file_result=$func_cygpath_result
   fi
   func_convert_file_check "$1" "$func_to_host_file_result"
 }
@@ -1765,13 +3055,14 @@
 # in func_to_host_file_result.
 func_convert_file_nix_to_cygwin ()
 {
-  $opt_debug
-  func_to_host_file_result="$1"
+  $debug_cmd
+
+  func_to_host_file_result=$1
   if test -n "$1"; then
     # convert from *nix to w32, then use cygpath to convert from w32 to cygwin.
     func_convert_core_file_wine_to_w32 "$1"
     func_cygpath -u "$func_convert_core_file_wine_to_w32_result"
-    func_to_host_file_result="$func_cygpath_result"
+    func_to_host_file_result=$func_cygpath_result
   fi
   func_convert_file_check "$1" "$func_to_host_file_result"
 }
@@ -1781,7 +3072,7 @@
 #############################################
 # $build to $host PATH CONVERSION FUNCTIONS #
 #############################################
-# invoked via `$to_host_path_cmd ARG'
+# invoked via '$to_host_path_cmd ARG'
 #
 # In each case, ARG is the path to be converted from $build to $host format.
 # The result will be available in $func_to_host_path_result.
@@ -1805,10 +3096,11 @@
 to_host_path_cmd=
 func_init_to_host_path_cmd ()
 {
-  $opt_debug
+  $debug_cmd
+
   if test -z "$to_host_path_cmd"; then
     func_stripname 'func_convert_file_' '' "$to_host_file_cmd"
-    to_host_path_cmd="func_convert_path_${func_stripname_result}"
+    to_host_path_cmd=func_convert_path_$func_stripname_result
   fi
 }
 
@@ -1818,7 +3110,8 @@
 # in func_to_host_path_result.
 func_to_host_path ()
 {
-  $opt_debug
+  $debug_cmd
+
   func_init_to_host_path_cmd
   $to_host_path_cmd "$1"
 }
@@ -1829,7 +3122,7 @@
 # Copy ARG to func_to_host_path_result.
 func_convert_path_noop ()
 {
-  func_to_host_path_result="$1"
+  func_to_host_path_result=$1
 }
 # end func_convert_path_noop
 
@@ -1840,8 +3133,9 @@
 # func_to_host_path_result.
 func_convert_path_msys_to_w32 ()
 {
-  $opt_debug
-  func_to_host_path_result="$1"
+  $debug_cmd
+
+  func_to_host_path_result=$1
   if test -n "$1"; then
     # Remove leading and trailing path separator characters from ARG.  MSYS
     # behavior is inconsistent here; cygpath turns them into '.;' and ';.';
@@ -1849,7 +3143,7 @@
     func_stripname : : "$1"
     func_to_host_path_tmp1=$func_stripname_result
     func_convert_core_msys_to_w32 "$func_to_host_path_tmp1"
-    func_to_host_path_result="$func_convert_core_msys_to_w32_result"
+    func_to_host_path_result=$func_convert_core_msys_to_w32_result
     func_convert_path_check : ";" \
       "$func_to_host_path_tmp1" "$func_to_host_path_result"
     func_convert_path_front_back_pathsep ":*" "*:" ";" "$1"
@@ -1863,8 +3157,9 @@
 # func_to_host_file_result.
 func_convert_path_cygwin_to_w32 ()
 {
-  $opt_debug
-  func_to_host_path_result="$1"
+  $debug_cmd
+
+  func_to_host_path_result=$1
   if test -n "$1"; then
     # See func_convert_path_msys_to_w32:
     func_stripname : : "$1"
@@ -1883,14 +3178,15 @@
 # a working winepath.  Returns result in func_to_host_file_result.
 func_convert_path_nix_to_w32 ()
 {
-  $opt_debug
-  func_to_host_path_result="$1"
+  $debug_cmd
+
+  func_to_host_path_result=$1
   if test -n "$1"; then
     # See func_convert_path_msys_to_w32:
     func_stripname : : "$1"
     func_to_host_path_tmp1=$func_stripname_result
     func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1"
-    func_to_host_path_result="$func_convert_core_path_wine_to_w32_result"
+    func_to_host_path_result=$func_convert_core_path_wine_to_w32_result
     func_convert_path_check : ";" \
       "$func_to_host_path_tmp1" "$func_to_host_path_result"
     func_convert_path_front_back_pathsep ":*" "*:" ";" "$1"
@@ -1904,15 +3200,16 @@
 # Returns result in func_to_host_file_result.
 func_convert_path_msys_to_cygwin ()
 {
-  $opt_debug
-  func_to_host_path_result="$1"
+  $debug_cmd
+
+  func_to_host_path_result=$1
   if test -n "$1"; then
     # See func_convert_path_msys_to_w32:
     func_stripname : : "$1"
     func_to_host_path_tmp1=$func_stripname_result
     func_convert_core_msys_to_w32 "$func_to_host_path_tmp1"
     func_cygpath -u -p "$func_convert_core_msys_to_w32_result"
-    func_to_host_path_result="$func_cygpath_result"
+    func_to_host_path_result=$func_cygpath_result
     func_convert_path_check : : \
       "$func_to_host_path_tmp1" "$func_to_host_path_result"
     func_convert_path_front_back_pathsep ":*" "*:" : "$1"
@@ -1927,8 +3224,9 @@
 # func_to_host_file_result.
 func_convert_path_nix_to_cygwin ()
 {
-  $opt_debug
-  func_to_host_path_result="$1"
+  $debug_cmd
+
+  func_to_host_path_result=$1
   if test -n "$1"; then
     # Remove leading and trailing path separator characters from
     # ARG. msys behavior is inconsistent here, cygpath turns them
@@ -1937,7 +3235,7 @@
     func_to_host_path_tmp1=$func_stripname_result
     func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1"
     func_cygpath -u -p "$func_convert_core_path_wine_to_w32_result"
-    func_to_host_path_result="$func_cygpath_result"
+    func_to_host_path_result=$func_cygpath_result
     func_convert_path_check : : \
       "$func_to_host_path_tmp1" "$func_to_host_path_result"
     func_convert_path_front_back_pathsep ":*" "*:" : "$1"
@@ -1946,13 +3244,31 @@
 # end func_convert_path_nix_to_cygwin
 
 
+# func_dll_def_p FILE
+# True iff FILE is a Windows DLL '.def' file.
+# Keep in sync with _LT_DLL_DEF_P in libtool.m4
+func_dll_def_p ()
+{
+  $debug_cmd
+
+  func_dll_def_p_tmp=`$SED -n \
+    -e 's/^[	 ]*//' \
+    -e '/^\(;.*\)*$/d' \
+    -e 's/^\(EXPORTS\|LIBRARY\)\([	 ].*\)*$/DEF/p' \
+    -e q \
+    "$1"`
+  test DEF = "$func_dll_def_p_tmp"
+}
+
+
 # func_mode_compile arg...
 func_mode_compile ()
 {
-    $opt_debug
+    $debug_cmd
+
     # Get the compilation command and the source file.
     base_compile=
-    srcfile="$nonopt"  #  always keep a non-empty value in "srcfile"
+    srcfile=$nonopt  #  always keep a non-empty value in "srcfile"
     suppress_opt=yes
     suppress_output=
     arg_mode=normal
@@ -1965,12 +3281,12 @@
       case $arg_mode in
       arg  )
 	# do not "continue".  Instead, add this to base_compile
-	lastarg="$arg"
+	lastarg=$arg
 	arg_mode=normal
 	;;
 
       target )
-	libobj="$arg"
+	libobj=$arg
 	arg_mode=normal
 	continue
 	;;
@@ -1980,7 +3296,7 @@
 	case $arg in
 	-o)
 	  test -n "$libobj" && \
-	    func_fatal_error "you cannot specify \`-o' more than once"
+	    func_fatal_error "you cannot specify '-o' more than once"
 	  arg_mode=target
 	  continue
 	  ;;
@@ -2009,12 +3325,12 @@
 	  func_stripname '-Wc,' '' "$arg"
 	  args=$func_stripname_result
 	  lastarg=
-	  save_ifs="$IFS"; IFS=','
+	  save_ifs=$IFS; IFS=,
 	  for arg in $args; do
-	    IFS="$save_ifs"
+	    IFS=$save_ifs
 	    func_append_quoted lastarg "$arg"
 	  done
-	  IFS="$save_ifs"
+	  IFS=$save_ifs
 	  func_stripname ' ' '' "$lastarg"
 	  lastarg=$func_stripname_result
 
@@ -2027,8 +3343,8 @@
 	  # Accept the current argument as the source file.
 	  # The previous "srcfile" becomes the current argument.
 	  #
-	  lastarg="$srcfile"
-	  srcfile="$arg"
+	  lastarg=$srcfile
+	  srcfile=$arg
 	  ;;
 	esac  #  case $arg
 	;;
@@ -2043,13 +3359,13 @@
       func_fatal_error "you must specify an argument for -Xcompile"
       ;;
     target)
-      func_fatal_error "you must specify a target with \`-o'"
+      func_fatal_error "you must specify a target with '-o'"
       ;;
     *)
       # Get the name of the library object.
       test -z "$libobj" && {
 	func_basename "$srcfile"
-	libobj="$func_basename_result"
+	libobj=$func_basename_result
       }
       ;;
     esac
@@ -2069,7 +3385,7 @@
     case $libobj in
     *.lo) func_lo2o "$libobj"; obj=$func_lo2o_result ;;
     *)
-      func_fatal_error "cannot determine name of library object from \`$libobj'"
+      func_fatal_error "cannot determine name of library object from '$libobj'"
       ;;
     esac
 
@@ -2078,8 +3394,8 @@
     for arg in $later; do
       case $arg in
       -shared)
-	test "$build_libtool_libs" != yes && \
-	  func_fatal_configuration "can not build a shared library"
+	test yes = "$build_libtool_libs" \
+	  || func_fatal_configuration "cannot build a shared library"
 	build_old_libs=no
 	continue
 	;;
@@ -2105,17 +3421,17 @@
     func_quote_for_eval "$libobj"
     test "X$libobj" != "X$func_quote_for_eval_result" \
       && $ECHO "X$libobj" | $GREP '[]~#^*{};<>?"'"'"'	 &()|`$[]' \
-      && func_warning "libobj name \`$libobj' may not contain shell special characters."
+      && func_warning "libobj name '$libobj' may not contain shell special characters."
     func_dirname_and_basename "$obj" "/" ""
-    objname="$func_basename_result"
-    xdir="$func_dirname_result"
-    lobj=${xdir}$objdir/$objname
+    objname=$func_basename_result
+    xdir=$func_dirname_result
+    lobj=$xdir$objdir/$objname
 
     test -z "$base_compile" && \
       func_fatal_help "you must specify a compilation command"
 
     # Delete any leftover library objects.
-    if test "$build_old_libs" = yes; then
+    if test yes = "$build_old_libs"; then
       removelist="$obj $lobj $libobj ${libobj}T"
     else
       removelist="$lobj $libobj ${libobj}T"
@@ -2127,16 +3443,16 @@
       pic_mode=default
       ;;
     esac
-    if test "$pic_mode" = no && test "$deplibs_check_method" != pass_all; then
+    if test no = "$pic_mode" && test pass_all != "$deplibs_check_method"; then
       # non-PIC code in shared libraries is not supported
       pic_mode=default
     fi
 
     # Calculate the filename of the output object if compiler does
     # not support -o with -c
-    if test "$compiler_c_o" = no; then
-      output_obj=`$ECHO "$srcfile" | $SED 's%^.*/%%; s%\.[^.]*$%%'`.${objext}
-      lockfile="$output_obj.lock"
+    if test no = "$compiler_c_o"; then
+      output_obj=`$ECHO "$srcfile" | $SED 's%^.*/%%; s%\.[^.]*$%%'`.$objext
+      lockfile=$output_obj.lock
     else
       output_obj=
       need_locks=no
@@ -2145,12 +3461,12 @@
 
     # Lock this critical section if it is needed
     # We use this script file to make the link, it avoids creating a new file
-    if test "$need_locks" = yes; then
+    if test yes = "$need_locks"; then
       until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do
 	func_echo "Waiting for $lockfile to be removed"
 	sleep 2
       done
-    elif test "$need_locks" = warn; then
+    elif test warn = "$need_locks"; then
       if test -f "$lockfile"; then
 	$ECHO "\
 *** ERROR, $lockfile exists and contains:
@@ -2158,7 +3474,7 @@
 
 This indicates that another process is trying to use the same
 temporary object file, and libtool could not work around it because
-your compiler does not support \`-c' and \`-o' together.  If you
+your compiler does not support '-c' and '-o' together.  If you
 repeat this compilation, it may succeed, by chance, but you had better
 avoid parallel builds (make -j) in this platform, or get a better
 compiler."
@@ -2180,11 +3496,11 @@
     qsrcfile=$func_quote_for_eval_result
 
     # Only build a PIC object if we are building libtool libraries.
-    if test "$build_libtool_libs" = yes; then
+    if test yes = "$build_libtool_libs"; then
       # Without this assignment, base_compile gets emptied.
       fbsd_hideous_sh_bug=$base_compile
 
-      if test "$pic_mode" != no; then
+      if test no != "$pic_mode"; then
 	command="$base_compile $qsrcfile $pic_flag"
       else
 	# Don't build PIC code
@@ -2201,7 +3517,7 @@
       func_show_eval_locale "$command"	\
           'test -n "$output_obj" && $RM $removelist; exit $EXIT_FAILURE'
 
-      if test "$need_locks" = warn &&
+      if test warn = "$need_locks" &&
 	 test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then
 	$ECHO "\
 *** ERROR, $lockfile contains:
@@ -2212,7 +3528,7 @@
 
 This indicates that another process is trying to use the same
 temporary object file, and libtool could not work around it because
-your compiler does not support \`-c' and \`-o' together.  If you
+your compiler does not support '-c' and '-o' together.  If you
 repeat this compilation, it may succeed, by chance, but you had better
 avoid parallel builds (make -j) in this platform, or get a better
 compiler."
@@ -2228,20 +3544,20 @@
       fi
 
       # Allow error messages only from the first compilation.
-      if test "$suppress_opt" = yes; then
+      if test yes = "$suppress_opt"; then
 	suppress_output=' >/dev/null 2>&1'
       fi
     fi
 
     # Only build a position-dependent object if we build old libraries.
-    if test "$build_old_libs" = yes; then
-      if test "$pic_mode" != yes; then
+    if test yes = "$build_old_libs"; then
+      if test yes != "$pic_mode"; then
 	# Don't build PIC code
 	command="$base_compile $qsrcfile$pie_flag"
       else
 	command="$base_compile $qsrcfile $pic_flag"
       fi
-      if test "$compiler_c_o" = yes; then
+      if test yes = "$compiler_c_o"; then
 	func_append command " -o $obj"
       fi
 
@@ -2250,7 +3566,7 @@
       func_show_eval_locale "$command" \
         '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE'
 
-      if test "$need_locks" = warn &&
+      if test warn = "$need_locks" &&
 	 test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then
 	$ECHO "\
 *** ERROR, $lockfile contains:
@@ -2261,7 +3577,7 @@
 
 This indicates that another process is trying to use the same
 temporary object file, and libtool could not work around it because
-your compiler does not support \`-c' and \`-o' together.  If you
+your compiler does not support '-c' and '-o' together.  If you
 repeat this compilation, it may succeed, by chance, but you had better
 avoid parallel builds (make -j) in this platform, or get a better
 compiler."
@@ -2281,7 +3597,7 @@
       func_write_libtool_object "$libobj" "$objdir/$objname" "$objname"
 
       # Unlock the critical section if it was locked
-      if test "$need_locks" != no; then
+      if test no != "$need_locks"; then
 	removelist=$lockfile
         $RM "$lockfile"
       fi
@@ -2291,7 +3607,7 @@
 }
 
 $opt_help || {
-  test "$opt_mode" = compile && func_mode_compile ${1+"$@"}
+  test compile = "$opt_mode" && func_mode_compile ${1+"$@"}
 }
 
 func_mode_help ()
@@ -2311,7 +3627,7 @@
 Remove files from the build directory.
 
 RM is the name of the program to use to delete files associated with each FILE
-(typically \`/bin/rm').  RM-OPTIONS are options (such as \`-f') to be passed
+(typically '/bin/rm').  RM-OPTIONS are options (such as '-f') to be passed
 to RM.
 
 If FILE is a libtool library, object or program, all the files associated
@@ -2330,16 +3646,16 @@
   -no-suppress      do not suppress compiler output for multiple passes
   -prefer-pic       try to build PIC objects only
   -prefer-non-pic   try to build non-PIC objects only
-  -shared           do not build a \`.o' file suitable for static linking
-  -static           only build a \`.o' file suitable for static linking
+  -shared           do not build a '.o' file suitable for static linking
+  -static           only build a '.o' file suitable for static linking
   -Wc,FLAG          pass FLAG directly to the compiler
 
-COMPILE-COMMAND is a command to be used in creating a \`standard' object file
+COMPILE-COMMAND is a command to be used in creating a 'standard' object file
 from the given SOURCEFILE.
 
 The output file name is determined by removing the directory component from
-SOURCEFILE, then substituting the C source code suffix \`.c' with the
-library object suffix, \`.lo'."
+SOURCEFILE, then substituting the C source code suffix '.c' with the
+library object suffix, '.lo'."
         ;;
 
       execute)
@@ -2352,7 +3668,7 @@
 
   -dlopen FILE      add the directory containing FILE to the library path
 
-This mode sets the library path environment variable according to \`-dlopen'
+This mode sets the library path environment variable according to '-dlopen'
 flags.
 
 If any of the ARGS are libtool executable wrappers, then they are translated
@@ -2371,7 +3687,7 @@
 Each LIBDIR is a directory that contains libtool libraries.
 
 The commands that this mode executes may require superuser privileges.  Use
-the \`--dry-run' option if you just want to see what would be executed."
+the '--dry-run' option if you just want to see what would be executed."
         ;;
 
       install)
@@ -2381,7 +3697,7 @@
 Install executables or libraries.
 
 INSTALL-COMMAND is the installation command.  The first component should be
-either the \`install' or \`cp' program.
+either the 'install' or 'cp' program.
 
 The following components of INSTALL-COMMAND are treated specially:
 
@@ -2407,7 +3723,7 @@
   -avoid-version    do not add a version suffix if possible
   -bindir BINDIR    specify path to binaries directory (for systems where
                     libraries must be found in the PATH setting at runtime)
-  -dlopen FILE      \`-dlpreopen' FILE if it cannot be dlopened at runtime
+  -dlopen FILE      '-dlpreopen' FILE if it cannot be dlopened at runtime
   -dlpreopen FILE   link in FILE and add its symbols to lt_preloaded_symbols
   -export-dynamic   allow symbols from OUTPUT-FILE to be resolved with dlsym(3)
   -export-symbols SYMFILE
@@ -2421,7 +3737,8 @@
   -no-install       link a not-installable executable
   -no-undefined     declare that a library does not refer to external symbols
   -o OUTPUT-FILE    create OUTPUT-FILE from the specified objects
-  -objectlist FILE  Use a list of object files found in FILE to specify objects
+  -objectlist FILE  use a list of object files found in FILE to specify objects
+  -os2dllname NAME  force a short DLL name on OS/2 (no effect on other OSes)
   -precious-files-regex REGEX
                     don't remove output files matching REGEX
   -release RELEASE  specify package release information
@@ -2441,20 +3758,20 @@
   -Xlinker FLAG     pass linker-specific FLAG directly to the linker
   -XCClinker FLAG   pass link-specific FLAG to the compiler driver (CC)
 
-All other options (arguments beginning with \`-') are ignored.
+All other options (arguments beginning with '-') are ignored.
 
-Every other argument is treated as a filename.  Files ending in \`.la' are
+Every other argument is treated as a filename.  Files ending in '.la' are
 treated as uninstalled libtool libraries, other files are standard or library
 object files.
 
-If the OUTPUT-FILE ends in \`.la', then a libtool library is created,
-only library objects (\`.lo' files) may be specified, and \`-rpath' is
+If the OUTPUT-FILE ends in '.la', then a libtool library is created,
+only library objects ('.lo' files) may be specified, and '-rpath' is
 required, except when creating a convenience library.
 
-If OUTPUT-FILE ends in \`.a' or \`.lib', then a standard library is created
-using \`ar' and \`ranlib', or on Windows using \`lib'.
+If OUTPUT-FILE ends in '.a' or '.lib', then a standard library is created
+using 'ar' and 'ranlib', or on Windows using 'lib'.
 
-If OUTPUT-FILE ends in \`.lo' or \`.${objext}', then a reloadable object file
+If OUTPUT-FILE ends in '.lo' or '.$objext', then a reloadable object file
 is created, otherwise an executable program is created."
         ;;
 
@@ -2465,7 +3782,7 @@
 Remove libraries from an installation directory.
 
 RM is the name of the program to use to delete files associated with each FILE
-(typically \`/bin/rm').  RM-OPTIONS are options (such as \`-f') to be passed
+(typically '/bin/rm').  RM-OPTIONS are options (such as '-f') to be passed
 to RM.
 
 If FILE is a libtool library, all the files associated with it are deleted.
@@ -2473,17 +3790,17 @@
         ;;
 
       *)
-        func_fatal_help "invalid operation mode \`$opt_mode'"
+        func_fatal_help "invalid operation mode '$opt_mode'"
         ;;
     esac
 
     echo
-    $ECHO "Try \`$progname --help' for more information about other modes."
+    $ECHO "Try '$progname --help' for more information about other modes."
 }
 
 # Now that we've collected a possible --mode arg, show help if necessary
 if $opt_help; then
-  if test "$opt_help" = :; then
+  if test : = "$opt_help"; then
     func_mode_help
   else
     {
@@ -2491,7 +3808,7 @@
       for opt_mode in compile link execute install finish uninstall clean; do
 	func_mode_help
       done
-    } | sed -n '1p; 2,$s/^Usage:/  or: /p'
+    } | $SED -n '1p; 2,$s/^Usage:/  or: /p'
     {
       func_help noexit
       for opt_mode in compile link execute install finish uninstall clean; do
@@ -2499,7 +3816,7 @@
 	func_mode_help
       done
     } |
-    sed '1d
+    $SED '1d
       /^When reporting/,/^Report/{
 	H
 	d
@@ -2516,16 +3833,17 @@
 # func_mode_execute arg...
 func_mode_execute ()
 {
-    $opt_debug
+    $debug_cmd
+
     # The first argument is the command name.
-    cmd="$nonopt"
+    cmd=$nonopt
     test -z "$cmd" && \
       func_fatal_help "you must specify a COMMAND"
 
     # Handle -dlopen flags immediately.
     for file in $opt_dlopen; do
       test -f "$file" \
-	|| func_fatal_help "\`$file' is not a file"
+	|| func_fatal_help "'$file' is not a file"
 
       dir=
       case $file in
@@ -2535,7 +3853,7 @@
 
 	# Check to see that this really is a libtool archive.
 	func_lalib_unsafe_p "$file" \
-	  || func_fatal_help "\`$lib' is not a valid libtool archive"
+	  || func_fatal_help "'$lib' is not a valid libtool archive"
 
 	# Read the libtool library.
 	dlname=
@@ -2546,18 +3864,18 @@
 	if test -z "$dlname"; then
 	  # Warn if it was a shared library.
 	  test -n "$library_names" && \
-	    func_warning "\`$file' was not linked with \`-export-dynamic'"
+	    func_warning "'$file' was not linked with '-export-dynamic'"
 	  continue
 	fi
 
 	func_dirname "$file" "" "."
-	dir="$func_dirname_result"
+	dir=$func_dirname_result
 
 	if test -f "$dir/$objdir/$dlname"; then
 	  func_append dir "/$objdir"
 	else
 	  if test ! -f "$dir/$dlname"; then
-	    func_fatal_error "cannot find \`$dlname' in \`$dir' or \`$dir/$objdir'"
+	    func_fatal_error "cannot find '$dlname' in '$dir' or '$dir/$objdir'"
 	  fi
 	fi
 	;;
@@ -2565,18 +3883,18 @@
       *.lo)
 	# Just add the directory containing the .lo file.
 	func_dirname "$file" "" "."
-	dir="$func_dirname_result"
+	dir=$func_dirname_result
 	;;
 
       *)
-	func_warning "\`-dlopen' is ignored for non-libtool libraries and objects"
+	func_warning "'-dlopen' is ignored for non-libtool libraries and objects"
 	continue
 	;;
       esac
 
       # Get the absolute pathname.
       absdir=`cd "$dir" && pwd`
-      test -n "$absdir" && dir="$absdir"
+      test -n "$absdir" && dir=$absdir
 
       # Now add the directory to shlibpath_var.
       if eval "test -z \"\$$shlibpath_var\""; then
@@ -2588,7 +3906,7 @@
 
     # This variable tells wrapper scripts just to set shlibpath_var
     # rather than running their programs.
-    libtool_execute_magic="$magic"
+    libtool_execute_magic=$magic
 
     # Check if any of the arguments is a wrapper script.
     args=
@@ -2601,12 +3919,12 @@
 	if func_ltwrapper_script_p "$file"; then
 	  func_source "$file"
 	  # Transform arg to wrapped name.
-	  file="$progdir/$program"
+	  file=$progdir/$program
 	elif func_ltwrapper_executable_p "$file"; then
 	  func_ltwrapper_scriptname "$file"
 	  func_source "$func_ltwrapper_scriptname_result"
 	  # Transform arg to wrapped name.
-	  file="$progdir/$program"
+	  file=$progdir/$program
 	fi
 	;;
       esac
@@ -2614,7 +3932,15 @@
       func_append_quoted args "$file"
     done
 
-    if test "X$opt_dry_run" = Xfalse; then
+    if $opt_dry_run; then
+      # Display what would be done.
+      if test -n "$shlibpath_var"; then
+	eval "\$ECHO \"\$shlibpath_var=\$$shlibpath_var\""
+	echo "export $shlibpath_var"
+      fi
+      $ECHO "$cmd$args"
+      exit $EXIT_SUCCESS
+    else
       if test -n "$shlibpath_var"; then
 	# Export the shlibpath_var.
 	eval "export $shlibpath_var"
@@ -2631,25 +3957,18 @@
       done
 
       # Now prepare to actually exec the command.
-      exec_cmd="\$cmd$args"
-    else
-      # Display what would be done.
-      if test -n "$shlibpath_var"; then
-	eval "\$ECHO \"\$shlibpath_var=\$$shlibpath_var\""
-	echo "export $shlibpath_var"
-      fi
-      $ECHO "$cmd$args"
-      exit $EXIT_SUCCESS
+      exec_cmd=\$cmd$args
     fi
 }
 
-test "$opt_mode" = execute && func_mode_execute ${1+"$@"}
+test execute = "$opt_mode" && func_mode_execute ${1+"$@"}
 
 
 # func_mode_finish arg...
 func_mode_finish ()
 {
-    $opt_debug
+    $debug_cmd
+
     libs=
     libdirs=
     admincmds=
@@ -2663,11 +3982,11 @@
 	if func_lalib_unsafe_p "$opt"; then
 	  func_append libs " $opt"
 	else
-	  func_warning "\`$opt' is not a valid libtool archive"
+	  func_warning "'$opt' is not a valid libtool archive"
 	fi
 
       else
-	func_fatal_error "invalid argument \`$opt'"
+	func_fatal_error "invalid argument '$opt'"
       fi
     done
 
@@ -2682,12 +4001,12 @@
       # Remove sysroot references
       if $opt_dry_run; then
         for lib in $libs; do
-          echo "removing references to $lt_sysroot and \`=' prefixes from $lib"
+          echo "removing references to $lt_sysroot and '=' prefixes from $lib"
         done
       else
         tmpdir=`func_mktempdir`
         for lib in $libs; do
-	  sed -e "${sysroot_cmd} s/\([ ']-[LR]\)=/\1/g; s/\([ ']\)=/\1/g" $lib \
+	  $SED -e "$sysroot_cmd s/\([ ']-[LR]\)=/\1/g; s/\([ ']\)=/\1/g" $lib \
 	    > $tmpdir/tmp-la
 	  mv -f $tmpdir/tmp-la $lib
 	done
@@ -2712,7 +4031,7 @@
     fi
 
     # Exit here if they wanted silent mode.
-    $opt_silent && exit $EXIT_SUCCESS
+    $opt_quiet && exit $EXIT_SUCCESS
 
     if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then
       echo "----------------------------------------------------------------------"
@@ -2723,27 +4042,27 @@
       echo
       echo "If you ever happen to want to link against installed libraries"
       echo "in a given directory, LIBDIR, you must either use libtool, and"
-      echo "specify the full pathname of the library, or use the \`-LLIBDIR'"
+      echo "specify the full pathname of the library, or use the '-LLIBDIR'"
       echo "flag during linking and do at least one of the following:"
       if test -n "$shlibpath_var"; then
-	echo "   - add LIBDIR to the \`$shlibpath_var' environment variable"
+	echo "   - add LIBDIR to the '$shlibpath_var' environment variable"
 	echo "     during execution"
       fi
       if test -n "$runpath_var"; then
-	echo "   - add LIBDIR to the \`$runpath_var' environment variable"
+	echo "   - add LIBDIR to the '$runpath_var' environment variable"
 	echo "     during linking"
       fi
       if test -n "$hardcode_libdir_flag_spec"; then
 	libdir=LIBDIR
 	eval flag=\"$hardcode_libdir_flag_spec\"
 
-	$ECHO "   - use the \`$flag' linker flag"
+	$ECHO "   - use the '$flag' linker flag"
       fi
       if test -n "$admincmds"; then
 	$ECHO "   - have your system administrator run these commands:$admincmds"
       fi
       if test -f /etc/ld.so.conf; then
-	echo "   - have your system administrator add LIBDIR to \`/etc/ld.so.conf'"
+	echo "   - have your system administrator add LIBDIR to '/etc/ld.so.conf'"
       fi
       echo
 
@@ -2762,18 +4081,20 @@
     exit $EXIT_SUCCESS
 }
 
-test "$opt_mode" = finish && func_mode_finish ${1+"$@"}
+test finish = "$opt_mode" && func_mode_finish ${1+"$@"}
 
 
 # func_mode_install arg...
 func_mode_install ()
 {
-    $opt_debug
+    $debug_cmd
+
     # There may be an optional sh(1) argument at the beginning of
     # install_prog (especially on Windows NT).
-    if test "$nonopt" = "$SHELL" || test "$nonopt" = /bin/sh ||
+    if test "$SHELL" = "$nonopt" || test /bin/sh = "$nonopt" ||
        # Allow the use of GNU shtool's install command.
-       case $nonopt in *shtool*) :;; *) false;; esac; then
+       case $nonopt in *shtool*) :;; *) false;; esac
+    then
       # Aesthetically quote it.
       func_quote_for_eval "$nonopt"
       install_prog="$func_quote_for_eval_result "
@@ -2800,7 +4121,7 @@
     opts=
     prev=
     install_type=
-    isdir=no
+    isdir=false
     stripme=
     no_mode=:
     for arg
@@ -2813,7 +4134,7 @@
       fi
 
       case $arg in
-      -d) isdir=yes ;;
+      -d) isdir=: ;;
       -f)
 	if $install_cp; then :; else
 	  prev=$arg
@@ -2831,7 +4152,7 @@
       *)
 	# If the previous option needed an argument, then skip it.
 	if test -n "$prev"; then
-	  if test "x$prev" = x-m && test -n "$install_override_mode"; then
+	  if test X-m = "X$prev" && test -n "$install_override_mode"; then
 	    arg2=$install_override_mode
 	    no_mode=false
 	  fi
@@ -2856,7 +4177,7 @@
       func_fatal_help "you must specify an install program"
 
     test -n "$prev" && \
-      func_fatal_help "the \`$prev' option requires an argument"
+      func_fatal_help "the '$prev' option requires an argument"
 
     if test -n "$install_override_mode" && $no_mode; then
       if $install_cp; then :; else
@@ -2878,19 +4199,19 @@
     dest=$func_stripname_result
 
     # Check to see that the destination is a directory.
-    test -d "$dest" && isdir=yes
-    if test "$isdir" = yes; then
-      destdir="$dest"
+    test -d "$dest" && isdir=:
+    if $isdir; then
+      destdir=$dest
       destname=
     else
       func_dirname_and_basename "$dest" "" "."
-      destdir="$func_dirname_result"
-      destname="$func_basename_result"
+      destdir=$func_dirname_result
+      destname=$func_basename_result
 
       # Not a directory, so check to see that there is only one file specified.
       set dummy $files; shift
       test "$#" -gt 1 && \
-	func_fatal_help "\`$dest' is not a directory"
+	func_fatal_help "'$dest' is not a directory"
     fi
     case $destdir in
     [\\/]* | [A-Za-z]:[\\/]*) ;;
@@ -2899,7 +4220,7 @@
 	case $file in
 	*.lo) ;;
 	*)
-	  func_fatal_help "\`$destdir' must be an absolute directory name"
+	  func_fatal_help "'$destdir' must be an absolute directory name"
 	  ;;
 	esac
       done
@@ -2908,7 +4229,7 @@
 
     # This variable tells wrapper scripts just to set variables rather
     # than running their programs.
-    libtool_install_magic="$magic"
+    libtool_install_magic=$magic
 
     staticlibs=
     future_libdirs=
@@ -2928,7 +4249,7 @@
 
 	# Check to see that this really is a libtool archive.
 	func_lalib_unsafe_p "$file" \
-	  || func_fatal_help "\`$file' is not a valid libtool archive"
+	  || func_fatal_help "'$file' is not a valid libtool archive"
 
 	library_names=
 	old_library=
@@ -2950,7 +4271,7 @@
 	fi
 
 	func_dirname "$file" "/" ""
-	dir="$func_dirname_result"
+	dir=$func_dirname_result
 	func_append dir "$objdir"
 
 	if test -n "$relink_command"; then
@@ -2964,7 +4285,7 @@
 	  # are installed into $libdir/../bin (currently, that works fine)
 	  # but it's something to keep an eye on.
 	  test "$inst_prefix_dir" = "$destdir" && \
-	    func_fatal_error "error: cannot install \`$file' to a directory not ending in $libdir"
+	    func_fatal_error "error: cannot install '$file' to a directory not ending in $libdir"
 
 	  if test -n "$inst_prefix_dir"; then
 	    # Stick the inst_prefix_dir data into the link command.
@@ -2973,29 +4294,36 @@
 	    relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%%"`
 	  fi
 
-	  func_warning "relinking \`$file'"
+	  func_warning "relinking '$file'"
 	  func_show_eval "$relink_command" \
-	    'func_fatal_error "error: relink \`$file'\'' with the above command before installing it"'
+	    'func_fatal_error "error: relink '\''$file'\'' with the above command before installing it"'
 	fi
 
 	# See the names of the shared library.
 	set dummy $library_names; shift
 	if test -n "$1"; then
-	  realname="$1"
+	  realname=$1
 	  shift
 
-	  srcname="$realname"
-	  test -n "$relink_command" && srcname="$realname"T
+	  srcname=$realname
+	  test -n "$relink_command" && srcname=${realname}T
 
 	  # Install the shared library and build the symlinks.
 	  func_show_eval "$install_shared_prog $dir/$srcname $destdir/$realname" \
 	      'exit $?'
-	  tstripme="$stripme"
+	  tstripme=$stripme
 	  case $host_os in
 	  cygwin* | mingw* | pw32* | cegcc*)
 	    case $realname in
 	    *.dll.a)
-	      tstripme=""
+	      tstripme=
+	      ;;
+	    esac
+	    ;;
+	  os2*)
+	    case $realname in
+	    *_dll.a)
+	      tstripme=
 	      ;;
 	    esac
 	    ;;
@@ -3006,7 +4334,7 @@
 
 	  if test "$#" -gt 0; then
 	    # Delete the old symlinks, and create new ones.
-	    # Try `ln -sf' first, because the `ln' binary might depend on
+	    # Try 'ln -sf' first, because the 'ln' binary might depend on
 	    # the symlink we replace!  Solaris /bin/ln does not understand -f,
 	    # so we also need to try rm && ln -s.
 	    for linkname
@@ -3017,14 +4345,14 @@
 	  fi
 
 	  # Do each command in the postinstall commands.
-	  lib="$destdir/$realname"
+	  lib=$destdir/$realname
 	  func_execute_cmds "$postinstall_cmds" 'exit $?'
 	fi
 
 	# Install the pseudo-library for information purposes.
 	func_basename "$file"
-	name="$func_basename_result"
-	instname="$dir/$name"i
+	name=$func_basename_result
+	instname=$dir/${name}i
 	func_show_eval "$install_prog $instname $destdir/$name" 'exit $?'
 
 	# Maybe install the static library, too.
@@ -3036,11 +4364,11 @@
 
 	# Figure out destination file name, if it wasn't already specified.
 	if test -n "$destname"; then
-	  destfile="$destdir/$destname"
+	  destfile=$destdir/$destname
 	else
 	  func_basename "$file"
-	  destfile="$func_basename_result"
-	  destfile="$destdir/$destfile"
+	  destfile=$func_basename_result
+	  destfile=$destdir/$destfile
 	fi
 
 	# Deduce the name of the destination old-style object file.
@@ -3050,11 +4378,11 @@
 	  staticdest=$func_lo2o_result
 	  ;;
 	*.$objext)
-	  staticdest="$destfile"
+	  staticdest=$destfile
 	  destfile=
 	  ;;
 	*)
-	  func_fatal_help "cannot copy a libtool object to \`$destfile'"
+	  func_fatal_help "cannot copy a libtool object to '$destfile'"
 	  ;;
 	esac
 
@@ -3063,7 +4391,7 @@
 	  func_show_eval "$install_prog $file $destfile" 'exit $?'
 
 	# Install the old object if enabled.
-	if test "$build_old_libs" = yes; then
+	if test yes = "$build_old_libs"; then
 	  # Deduce the name of the old-style object file.
 	  func_lo2o "$file"
 	  staticobj=$func_lo2o_result
@@ -3075,23 +4403,23 @@
       *)
 	# Figure out destination file name, if it wasn't already specified.
 	if test -n "$destname"; then
-	  destfile="$destdir/$destname"
+	  destfile=$destdir/$destname
 	else
 	  func_basename "$file"
-	  destfile="$func_basename_result"
-	  destfile="$destdir/$destfile"
+	  destfile=$func_basename_result
+	  destfile=$destdir/$destfile
 	fi
 
 	# If the file is missing, and there is a .exe on the end, strip it
 	# because it is most likely a libtool script we actually want to
 	# install
-	stripped_ext=""
+	stripped_ext=
 	case $file in
 	  *.exe)
 	    if test ! -f "$file"; then
 	      func_stripname '' '.exe' "$file"
 	      file=$func_stripname_result
-	      stripped_ext=".exe"
+	      stripped_ext=.exe
 	    fi
 	    ;;
 	esac
@@ -3119,19 +4447,19 @@
 
 	  # Check the variables that should have been set.
 	  test -z "$generated_by_libtool_version" && \
-	    func_fatal_error "invalid libtool wrapper script \`$wrapper'"
+	    func_fatal_error "invalid libtool wrapper script '$wrapper'"
 
-	  finalize=yes
+	  finalize=:
 	  for lib in $notinst_deplibs; do
 	    # Check to see that each library is installed.
 	    libdir=
 	    if test -f "$lib"; then
 	      func_source "$lib"
 	    fi
-	    libfile="$libdir/"`$ECHO "$lib" | $SED 's%^.*/%%g'` ### testsuite: skip nested quoting test
+	    libfile=$libdir/`$ECHO "$lib" | $SED 's%^.*/%%g'`
 	    if test -n "$libdir" && test ! -f "$libfile"; then
-	      func_warning "\`$lib' has not been installed in \`$libdir'"
-	      finalize=no
+	      func_warning "'$lib' has not been installed in '$libdir'"
+	      finalize=false
 	    fi
 	  done
 
@@ -3139,29 +4467,29 @@
 	  func_source "$wrapper"
 
 	  outputname=
-	  if test "$fast_install" = no && test -n "$relink_command"; then
+	  if test no = "$fast_install" && test -n "$relink_command"; then
 	    $opt_dry_run || {
-	      if test "$finalize" = yes; then
+	      if $finalize; then
 	        tmpdir=`func_mktempdir`
 		func_basename "$file$stripped_ext"
-		file="$func_basename_result"
-	        outputname="$tmpdir/$file"
+		file=$func_basename_result
+	        outputname=$tmpdir/$file
 	        # Replace the output file specification.
 	        relink_command=`$ECHO "$relink_command" | $SED 's%@OUTPUT@%'"$outputname"'%g'`
 
-	        $opt_silent || {
+	        $opt_quiet || {
 	          func_quote_for_expand "$relink_command"
 		  eval "func_echo $func_quote_for_expand_result"
 	        }
 	        if eval "$relink_command"; then :
 	          else
-		  func_error "error: relink \`$file' with the above command before installing it"
+		  func_error "error: relink '$file' with the above command before installing it"
 		  $opt_dry_run || ${RM}r "$tmpdir"
 		  continue
 	        fi
-	        file="$outputname"
+	        file=$outputname
 	      else
-	        func_warning "cannot relink \`$file'"
+	        func_warning "cannot relink '$file'"
 	      fi
 	    }
 	  else
@@ -3198,10 +4526,10 @@
 
     for file in $staticlibs; do
       func_basename "$file"
-      name="$func_basename_result"
+      name=$func_basename_result
 
       # Set up the ranlib parameters.
-      oldlib="$destdir/$name"
+      oldlib=$destdir/$name
       func_to_tool_file "$oldlib" func_convert_file_msys_to_w32
       tool_oldlib=$func_to_tool_file_result
 
@@ -3216,18 +4544,18 @@
     done
 
     test -n "$future_libdirs" && \
-      func_warning "remember to run \`$progname --finish$future_libdirs'"
+      func_warning "remember to run '$progname --finish$future_libdirs'"
 
     if test -n "$current_libdirs"; then
       # Maybe just do a dry run.
       $opt_dry_run && current_libdirs=" -n$current_libdirs"
-      exec_cmd='$SHELL $progpath $preserve_args --finish$current_libdirs'
+      exec_cmd='$SHELL "$progpath" $preserve_args --finish$current_libdirs'
     else
       exit $EXIT_SUCCESS
     fi
 }
 
-test "$opt_mode" = install && func_mode_install ${1+"$@"}
+test install = "$opt_mode" && func_mode_install ${1+"$@"}
 
 
 # func_generate_dlsyms outputname originator pic_p
@@ -3235,16 +4563,17 @@
 # a dlpreopen symbol table.
 func_generate_dlsyms ()
 {
-    $opt_debug
-    my_outputname="$1"
-    my_originator="$2"
-    my_pic_p="${3-no}"
-    my_prefix=`$ECHO "$my_originator" | sed 's%[^a-zA-Z0-9]%_%g'`
+    $debug_cmd
+
+    my_outputname=$1
+    my_originator=$2
+    my_pic_p=${3-false}
+    my_prefix=`$ECHO "$my_originator" | $SED 's%[^a-zA-Z0-9]%_%g'`
     my_dlsyms=
 
-    if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then
+    if test -n "$dlfiles$dlprefiles" || test no != "$dlself"; then
       if test -n "$NM" && test -n "$global_symbol_pipe"; then
-	my_dlsyms="${my_outputname}S.c"
+	my_dlsyms=${my_outputname}S.c
       else
 	func_error "not configured to extract global symbols from dlpreopened files"
       fi
@@ -3255,7 +4584,7 @@
       "") ;;
       *.c)
 	# Discover the nlist of each of the dlfiles.
-	nlist="$output_objdir/${my_outputname}.nm"
+	nlist=$output_objdir/$my_outputname.nm
 
 	func_show_eval "$RM $nlist ${nlist}S ${nlist}T"
 
@@ -3263,34 +4592,36 @@
 	func_verbose "creating $output_objdir/$my_dlsyms"
 
 	$opt_dry_run || $ECHO > "$output_objdir/$my_dlsyms" "\
-/* $my_dlsyms - symbol resolution table for \`$my_outputname' dlsym emulation. */
-/* Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION */
+/* $my_dlsyms - symbol resolution table for '$my_outputname' dlsym emulation. */
+/* Generated by $PROGRAM (GNU $PACKAGE) $VERSION */
 
 #ifdef __cplusplus
 extern \"C\" {
 #endif
 
-#if defined(__GNUC__) && (((__GNUC__ == 4) && (__GNUC_MINOR__ >= 4)) || (__GNUC__ > 4))
+#if defined __GNUC__ && (((__GNUC__ == 4) && (__GNUC_MINOR__ >= 4)) || (__GNUC__ > 4))
 #pragma GCC diagnostic ignored \"-Wstrict-prototypes\"
 #endif
 
 /* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests.  */
-#if defined(_WIN32) || defined(__CYGWIN__) || defined(_WIN32_WCE)
-/* DATA imports from DLLs on WIN32 con't be const, because runtime
+#if defined _WIN32 || defined __CYGWIN__ || defined _WIN32_WCE
+/* DATA imports from DLLs on WIN32 can't be const, because runtime
    relocations are performed -- see ld's documentation on pseudo-relocs.  */
 # define LT_DLSYM_CONST
-#elif defined(__osf__)
+#elif defined __osf__
 /* This system does not cope well with relocations in const data.  */
 # define LT_DLSYM_CONST
 #else
 # define LT_DLSYM_CONST const
 #endif
 
+#define STREQ(s1, s2) (strcmp ((s1), (s2)) == 0)
+
 /* External symbol declarations for the compiler. */\
 "
 
-	if test "$dlself" = yes; then
-	  func_verbose "generating symbol list for \`$output'"
+	if test yes = "$dlself"; then
+	  func_verbose "generating symbol list for '$output'"
 
 	  $opt_dry_run || echo ': @PROGRAM@ ' > "$nlist"
 
@@ -3298,7 +4629,7 @@
 	  progfiles=`$ECHO "$objs$old_deplibs" | $SP2NL | $SED "$lo2o" | $NL2SP`
 	  for progfile in $progfiles; do
 	    func_to_tool_file "$progfile" func_convert_file_msys_to_w32
-	    func_verbose "extracting global C symbols from \`$func_to_tool_file_result'"
+	    func_verbose "extracting global C symbols from '$func_to_tool_file_result'"
 	    $opt_dry_run || eval "$NM $func_to_tool_file_result | $global_symbol_pipe >> '$nlist'"
 	  done
 
@@ -3318,10 +4649,10 @@
 
 	  # Prepare the list of exported symbols
 	  if test -z "$export_symbols"; then
-	    export_symbols="$output_objdir/$outputname.exp"
+	    export_symbols=$output_objdir/$outputname.exp
 	    $opt_dry_run || {
 	      $RM $export_symbols
-	      eval "${SED} -n -e '/^: @PROGRAM@ $/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"'
+	      eval "$SED -n -e '/^: @PROGRAM@ $/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"'
 	      case $host in
 	      *cygwin* | *mingw* | *cegcc* )
                 eval "echo EXPORTS "'> "$output_objdir/$outputname.def"'
@@ -3331,7 +4662,7 @@
 	    }
 	  else
 	    $opt_dry_run || {
-	      eval "${SED} -e 's/\([].[*^$]\)/\\\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$outputname.exp"'
+	      eval "$SED -e 's/\([].[*^$]\)/\\\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$outputname.exp"'
 	      eval '$GREP -f "$output_objdir/$outputname.exp" < "$nlist" > "$nlist"T'
 	      eval '$MV "$nlist"T "$nlist"'
 	      case $host in
@@ -3345,22 +4676,22 @@
 	fi
 
 	for dlprefile in $dlprefiles; do
-	  func_verbose "extracting global C symbols from \`$dlprefile'"
+	  func_verbose "extracting global C symbols from '$dlprefile'"
 	  func_basename "$dlprefile"
-	  name="$func_basename_result"
+	  name=$func_basename_result
           case $host in
 	    *cygwin* | *mingw* | *cegcc* )
 	      # if an import library, we need to obtain dlname
 	      if func_win32_import_lib_p "$dlprefile"; then
 	        func_tr_sh "$dlprefile"
 	        eval "curr_lafile=\$libfile_$func_tr_sh_result"
-	        dlprefile_dlbasename=""
+	        dlprefile_dlbasename=
 	        if test -n "$curr_lafile" && func_lalib_p "$curr_lafile"; then
 	          # Use subshell, to avoid clobbering current variable values
 	          dlprefile_dlname=`source "$curr_lafile" && echo "$dlname"`
-	          if test -n "$dlprefile_dlname" ; then
+	          if test -n "$dlprefile_dlname"; then
 	            func_basename "$dlprefile_dlname"
-	            dlprefile_dlbasename="$func_basename_result"
+	            dlprefile_dlbasename=$func_basename_result
 	          else
 	            # no lafile. user explicitly requested -dlpreopen <import library>.
 	            $sharedlib_from_linklib_cmd "$dlprefile"
@@ -3368,7 +4699,7 @@
 	          fi
 	        fi
 	        $opt_dry_run || {
-	          if test -n "$dlprefile_dlbasename" ; then
+	          if test -n "$dlprefile_dlbasename"; then
 	            eval '$ECHO ": $dlprefile_dlbasename" >> "$nlist"'
 	          else
 	            func_warning "Could not compute DLL name from $name"
@@ -3424,6 +4755,11 @@
 	    echo '/* NONE */' >> "$output_objdir/$my_dlsyms"
 	  fi
 
+	  func_show_eval '$RM "${nlist}I"'
+	  if test -n "$global_symbol_to_import"; then
+	    eval "$global_symbol_to_import"' < "$nlist"S > "$nlist"I'
+	  fi
+
 	  echo >> "$output_objdir/$my_dlsyms" "\
 
 /* The mapping between symbol names and symbols.  */
@@ -3432,11 +4768,30 @@
   void *address;
 } lt_dlsymlist;
 extern LT_DLSYM_CONST lt_dlsymlist
-lt_${my_prefix}_LTX_preloaded_symbols[];
+lt_${my_prefix}_LTX_preloaded_symbols[];\
+"
+
+	  if test -s "$nlist"I; then
+	    echo >> "$output_objdir/$my_dlsyms" "\
+static void lt_syminit(void)
+{
+  LT_DLSYM_CONST lt_dlsymlist *symbol = lt_${my_prefix}_LTX_preloaded_symbols;
+  for (; symbol->name; ++symbol)
+    {"
+	    $SED 's/.*/      if (STREQ (symbol->name, \"&\")) symbol->address = (void *) \&&;/' < "$nlist"I >> "$output_objdir/$my_dlsyms"
+	    echo >> "$output_objdir/$my_dlsyms" "\
+    }
+}"
+	  fi
+	  echo >> "$output_objdir/$my_dlsyms" "\
 LT_DLSYM_CONST lt_dlsymlist
 lt_${my_prefix}_LTX_preloaded_symbols[] =
-{\
-  { \"$my_originator\", (void *) 0 },"
+{ {\"$my_originator\", (void *) 0},"
+
+	  if test -s "$nlist"I; then
+	    echo >> "$output_objdir/$my_dlsyms" "\
+  {\"@INIT@\", (void *) &lt_syminit},"
+	  fi
 
 	  case $need_lib_prefix in
 	  no)
@@ -3478,9 +4833,7 @@
 	  *-*-hpux*)
 	    pic_flag_for_symtable=" $pic_flag"  ;;
 	  *)
-	    if test "X$my_pic_p" != Xno; then
-	      pic_flag_for_symtable=" $pic_flag"
-	    fi
+	    $my_pic_p && pic_flag_for_symtable=" $pic_flag"
 	    ;;
 	  esac
 	  ;;
@@ -3497,10 +4850,10 @@
 	func_show_eval '(cd $output_objdir && $LTCC$symtab_cflags -c$no_builtin_flag$pic_flag_for_symtable "$my_dlsyms")' 'exit $?'
 
 	# Clean up the generated files.
-	func_show_eval '$RM "$output_objdir/$my_dlsyms" "$nlist" "${nlist}S" "${nlist}T"'
+	func_show_eval '$RM "$output_objdir/$my_dlsyms" "$nlist" "${nlist}S" "${nlist}T" "${nlist}I"'
 
 	# Transform the symbol file into the correct name.
-	symfileobj="$output_objdir/${my_outputname}S.$objext"
+	symfileobj=$output_objdir/${my_outputname}S.$objext
 	case $host in
 	*cygwin* | *mingw* | *cegcc* )
 	  if test -f "$output_objdir/$my_outputname.def"; then
@@ -3518,7 +4871,7 @@
 	esac
 	;;
       *)
-	func_fatal_error "unknown suffix for \`$my_dlsyms'"
+	func_fatal_error "unknown suffix for '$my_dlsyms'"
 	;;
       esac
     else
@@ -3532,6 +4885,32 @@
     fi
 }
 
+# func_cygming_gnu_implib_p ARG
+# This predicate returns with zero status (TRUE) if
+# ARG is a GNU/binutils-style import library. Returns
+# with nonzero status (FALSE) otherwise.
+func_cygming_gnu_implib_p ()
+{
+  $debug_cmd
+
+  func_to_tool_file "$1" func_convert_file_msys_to_w32
+  func_cygming_gnu_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $EGREP ' (_head_[A-Za-z0-9_]+_[ad]l*|[A-Za-z0-9_]+_[ad]l*_iname)$'`
+  test -n "$func_cygming_gnu_implib_tmp"
+}
+
+# func_cygming_ms_implib_p ARG
+# This predicate returns with zero status (TRUE) if
+# ARG is an MS-style import library. Returns
+# with nonzero status (FALSE) otherwise.
+func_cygming_ms_implib_p ()
+{
+  $debug_cmd
+
+  func_to_tool_file "$1" func_convert_file_msys_to_w32
+  func_cygming_ms_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $GREP '_NULL_IMPORT_DESCRIPTOR'`
+  test -n "$func_cygming_ms_implib_tmp"
+}
+
 # func_win32_libid arg
 # return the library type of file 'arg'
 #
@@ -3541,8 +4920,9 @@
 # Despite the name, also deal with 64 bit binaries.
 func_win32_libid ()
 {
-  $opt_debug
-  win32_libid_type="unknown"
+  $debug_cmd
+
+  win32_libid_type=unknown
   win32_fileres=`file -L $1 2>/dev/null`
   case $win32_fileres in
   *ar\ archive\ import\ library*) # definitely import
@@ -3552,16 +4932,29 @@
     # Keep the egrep pattern in sync with the one in _LT_CHECK_MAGIC_METHOD.
     if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null |
        $EGREP 'file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' >/dev/null; then
-      func_to_tool_file "$1" func_convert_file_msys_to_w32
-      win32_nmres=`eval $NM -f posix -A \"$func_to_tool_file_result\" |
-	$SED -n -e '
+      case $nm_interface in
+      "MS dumpbin")
+	if func_cygming_ms_implib_p "$1" ||
+	   func_cygming_gnu_implib_p "$1"
+	then
+	  win32_nmres=import
+	else
+	  win32_nmres=
+	fi
+	;;
+      *)
+	func_to_tool_file "$1" func_convert_file_msys_to_w32
+	win32_nmres=`eval $NM -f posix -A \"$func_to_tool_file_result\" |
+	  $SED -n -e '
 	    1,100{
 		/ I /{
-		    s,.*,import,
+		    s|.*|import|
 		    p
 		    q
 		}
 	    }'`
+	;;
+      esac
       case $win32_nmres in
       import*)  win32_libid_type="x86 archive import";;
       *)        win32_libid_type="x86 archive static";;
@@ -3593,7 +4986,8 @@
 #    $sharedlib_from_linklib_result
 func_cygming_dll_for_implib ()
 {
-  $opt_debug
+  $debug_cmd
+
   sharedlib_from_linklib_result=`$DLLTOOL --identify-strict --identify "$1"`
 }
 
@@ -3610,7 +5004,8 @@
 # specified import library.
 func_cygming_dll_for_implib_fallback_core ()
 {
-  $opt_debug
+  $debug_cmd
+
   match_literal=`$ECHO "$1" | $SED "$sed_make_literal_regex"`
   $OBJDUMP -s --section "$1" "$2" 2>/dev/null |
     $SED '/^Contents of section '"$match_literal"':/{
@@ -3646,8 +5041,8 @@
       /./p' |
     # we now have a list, one entry per line, of the stringified
     # contents of the appropriate section of all members of the
-    # archive which possess that section. Heuristic: eliminate
-    # all those which have a first or second character that is
+    # archive that possess that section. Heuristic: eliminate
+    # all those that have a first or second character that is
     # a '.' (that is, objdump's representation of an unprintable
     # character.) This should work for all archives with less than
     # 0x302f exports -- but will fail for DLLs whose name actually
@@ -3658,30 +5053,6 @@
     $SED -e '/^\./d;/^.\./d;q'
 }
 
-# func_cygming_gnu_implib_p ARG
-# This predicate returns with zero status (TRUE) if
-# ARG is a GNU/binutils-style import library. Returns
-# with nonzero status (FALSE) otherwise.
-func_cygming_gnu_implib_p ()
-{
-  $opt_debug
-  func_to_tool_file "$1" func_convert_file_msys_to_w32
-  func_cygming_gnu_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $EGREP ' (_head_[A-Za-z0-9_]+_[ad]l*|[A-Za-z0-9_]+_[ad]l*_iname)$'`
-  test -n "$func_cygming_gnu_implib_tmp"
-}
-
-# func_cygming_ms_implib_p ARG
-# This predicate returns with zero status (TRUE) if
-# ARG is an MS-style import library. Returns
-# with nonzero status (FALSE) otherwise.
-func_cygming_ms_implib_p ()
-{
-  $opt_debug
-  func_to_tool_file "$1" func_convert_file_msys_to_w32
-  func_cygming_ms_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $GREP '_NULL_IMPORT_DESCRIPTOR'`
-  test -n "$func_cygming_ms_implib_tmp"
-}
-
 # func_cygming_dll_for_implib_fallback ARG
 # Platform-specific function to extract the
 # name of the DLL associated with the specified
@@ -3695,16 +5066,17 @@
 #    $sharedlib_from_linklib_result
 func_cygming_dll_for_implib_fallback ()
 {
-  $opt_debug
-  if func_cygming_gnu_implib_p "$1" ; then
+  $debug_cmd
+
+  if func_cygming_gnu_implib_p "$1"; then
     # binutils import library
     sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$7' "$1"`
-  elif func_cygming_ms_implib_p "$1" ; then
+  elif func_cygming_ms_implib_p "$1"; then
     # ms-generated import library
     sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$6' "$1"`
   else
     # unknown
-    sharedlib_from_linklib_result=""
+    sharedlib_from_linklib_result=
   fi
 }
 
@@ -3712,10 +5084,11 @@
 # func_extract_an_archive dir oldlib
 func_extract_an_archive ()
 {
-    $opt_debug
-    f_ex_an_ar_dir="$1"; shift
-    f_ex_an_ar_oldlib="$1"
-    if test "$lock_old_archive_extraction" = yes; then
+    $debug_cmd
+
+    f_ex_an_ar_dir=$1; shift
+    f_ex_an_ar_oldlib=$1
+    if test yes = "$lock_old_archive_extraction"; then
       lockfile=$f_ex_an_ar_oldlib.lock
       until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do
 	func_echo "Waiting for $lockfile to be removed"
@@ -3724,7 +5097,7 @@
     fi
     func_show_eval "(cd \$f_ex_an_ar_dir && $AR x \"\$f_ex_an_ar_oldlib\")" \
 		   'stat=$?; rm -f "$lockfile"; exit $stat'
-    if test "$lock_old_archive_extraction" = yes; then
+    if test yes = "$lock_old_archive_extraction"; then
       $opt_dry_run || rm -f "$lockfile"
     fi
     if ($AR t "$f_ex_an_ar_oldlib" | sort | sort -uc >/dev/null 2>&1); then
@@ -3738,22 +5111,23 @@
 # func_extract_archives gentop oldlib ...
 func_extract_archives ()
 {
-    $opt_debug
-    my_gentop="$1"; shift
+    $debug_cmd
+
+    my_gentop=$1; shift
     my_oldlibs=${1+"$@"}
-    my_oldobjs=""
-    my_xlib=""
-    my_xabs=""
-    my_xdir=""
+    my_oldobjs=
+    my_xlib=
+    my_xabs=
+    my_xdir=
 
     for my_xlib in $my_oldlibs; do
       # Extract the objects.
       case $my_xlib in
-	[\\/]* | [A-Za-z]:[\\/]*) my_xabs="$my_xlib" ;;
+	[\\/]* | [A-Za-z]:[\\/]*) my_xabs=$my_xlib ;;
 	*) my_xabs=`pwd`"/$my_xlib" ;;
       esac
       func_basename "$my_xlib"
-      my_xlib="$func_basename_result"
+      my_xlib=$func_basename_result
       my_xlib_u=$my_xlib
       while :; do
         case " $extracted_archives " in
@@ -3765,7 +5139,7 @@
 	esac
       done
       extracted_archives="$extracted_archives $my_xlib_u"
-      my_xdir="$my_gentop/$my_xlib_u"
+      my_xdir=$my_gentop/$my_xlib_u
 
       func_mkdir_p "$my_xdir"
 
@@ -3778,22 +5152,23 @@
 	  cd $my_xdir || exit $?
 	  darwin_archive=$my_xabs
 	  darwin_curdir=`pwd`
-	  darwin_base_archive=`basename "$darwin_archive"`
+	  func_basename "$darwin_archive"
+	  darwin_base_archive=$func_basename_result
 	  darwin_arches=`$LIPO -info "$darwin_archive" 2>/dev/null | $GREP Architectures 2>/dev/null || true`
 	  if test -n "$darwin_arches"; then
 	    darwin_arches=`$ECHO "$darwin_arches" | $SED -e 's/.*are://'`
 	    darwin_arch=
 	    func_verbose "$darwin_base_archive has multiple architectures $darwin_arches"
-	    for darwin_arch in  $darwin_arches ; do
-	      func_mkdir_p "unfat-$$/${darwin_base_archive}-${darwin_arch}"
-	      $LIPO -thin $darwin_arch -output "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" "${darwin_archive}"
-	      cd "unfat-$$/${darwin_base_archive}-${darwin_arch}"
-	      func_extract_an_archive "`pwd`" "${darwin_base_archive}"
+	    for darwin_arch in  $darwin_arches; do
+	      func_mkdir_p "unfat-$$/$darwin_base_archive-$darwin_arch"
+	      $LIPO -thin $darwin_arch -output "unfat-$$/$darwin_base_archive-$darwin_arch/$darwin_base_archive" "$darwin_archive"
+	      cd "unfat-$$/$darwin_base_archive-$darwin_arch"
+	      func_extract_an_archive "`pwd`" "$darwin_base_archive"
 	      cd "$darwin_curdir"
-	      $RM "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}"
+	      $RM "unfat-$$/$darwin_base_archive-$darwin_arch/$darwin_base_archive"
 	    done # $darwin_arches
             ## Okay now we've a bunch of thin objects, gotta fatten them up :)
-	    darwin_filelist=`find unfat-$$ -type f -name \*.o -print -o -name \*.lo -print | $SED -e "$basename" | sort -u`
+	    darwin_filelist=`find unfat-$$ -type f -name \*.o -print -o -name \*.lo -print | $SED -e "$sed_basename" | sort -u`
 	    darwin_file=
 	    darwin_files=
 	    for darwin_file in $darwin_filelist; do
@@ -3815,7 +5190,7 @@
       my_oldobjs="$my_oldobjs "`find $my_xdir -name \*.$objext -print -o -name \*.lo -print | sort | $NL2SP`
     done
 
-    func_extract_archives_result="$my_oldobjs"
+    func_extract_archives_result=$my_oldobjs
 }
 
 
@@ -3830,7 +5205,7 @@
 #
 # ARG is the value that the WRAPPER_SCRIPT_BELONGS_IN_OBJDIR
 # variable will take.  If 'yes', then the emitted script
-# will assume that the directory in which it is stored is
+# will assume that the directory where it is stored is
 # the $objdir directory.  This is a cygwin/mingw-specific
 # behavior.
 func_emit_wrapper ()
@@ -3841,7 +5216,7 @@
 #! $SHELL
 
 # $output - temporary wrapper script for $objdir/$outputname
-# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION
+# Generated by $PROGRAM (GNU $PACKAGE) $VERSION
 #
 # The $output program cannot be directly executed until all the libtool
 # libraries that it depends on are installed.
@@ -3898,9 +5273,9 @@
 
 # Very basic option parsing. These options are (a) specific to
 # the libtool wrapper, (b) are identical between the wrapper
-# /script/ and the wrapper /executable/ which is used only on
+# /script/ and the wrapper /executable/ that is used only on
 # windows platforms, and (c) all begin with the string "--lt-"
-# (application programs are unlikely to have options which match
+# (application programs are unlikely to have options that match
 # this pattern).
 #
 # There are only two supported options: --lt-debug and
@@ -3933,7 +5308,7 @@
 
   # Print the debug banner immediately:
   if test -n \"\$lt_option_debug\"; then
-    echo \"${outputname}:${output}:\${LINENO}: libtool wrapper (GNU $PACKAGE$TIMESTAMP) $VERSION\" 1>&2
+    echo \"$outputname:$output:\$LINENO: libtool wrapper (GNU $PACKAGE) $VERSION\" 1>&2
   fi
 }
 
@@ -3944,7 +5319,7 @@
   lt_dump_args_N=1;
   for lt_arg
   do
-    \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[\$lt_dump_args_N]: \$lt_arg\"
+    \$ECHO \"$outputname:$output:\$LINENO: newargv[\$lt_dump_args_N]: \$lt_arg\"
     lt_dump_args_N=\`expr \$lt_dump_args_N + 1\`
   done
 }
@@ -3958,7 +5333,7 @@
   *-*-mingw | *-*-os2* | *-cegcc*)
     $ECHO "\
       if test -n \"\$lt_option_debug\"; then
-        \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[0]: \$progdir\\\\\$program\" 1>&2
+        \$ECHO \"$outputname:$output:\$LINENO: newargv[0]: \$progdir\\\\\$program\" 1>&2
         func_lt_dump_args \${1+\"\$@\"} 1>&2
       fi
       exec \"\$progdir\\\\\$program\" \${1+\"\$@\"}
@@ -3968,7 +5343,7 @@
   *)
     $ECHO "\
       if test -n \"\$lt_option_debug\"; then
-        \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[0]: \$progdir/\$program\" 1>&2
+        \$ECHO \"$outputname:$output:\$LINENO: newargv[0]: \$progdir/\$program\" 1>&2
         func_lt_dump_args \${1+\"\$@\"} 1>&2
       fi
       exec \"\$progdir/\$program\" \${1+\"\$@\"}
@@ -4043,13 +5418,13 @@
   test -n \"\$absdir\" && thisdir=\"\$absdir\"
 "
 
-	if test "$fast_install" = yes; then
+	if test yes = "$fast_install"; then
 	  $ECHO "\
   program=lt-'$outputname'$exeext
   progdir=\"\$thisdir/$objdir\"
 
   if test ! -f \"\$progdir/\$program\" ||
-     { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | ${SED} 1q\`; \\
+     { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | $SED 1q\`; \\
        test \"X\$file\" != \"X\$progdir/\$program\"; }; then
 
     file=\"\$\$-\$program\"
@@ -4066,7 +5441,7 @@
     if test -n \"\$relink_command\"; then
       if relink_command_output=\`eval \$relink_command 2>&1\`; then :
       else
-	$ECHO \"\$relink_command_output\" >&2
+	\$ECHO \"\$relink_command_output\" >&2
 	$RM \"\$progdir/\$file\"
 	exit 1
       fi
@@ -4101,7 +5476,7 @@
 	fi
 
 	# Export our shlibpath_var if we have one.
-	if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then
+	if test yes = "$shlibpath_overrides_runpath" && test -n "$shlibpath_var" && test -n "$temp_rpath"; then
 	  $ECHO "\
     # Add our own library path to $shlibpath_var
     $shlibpath_var=\"$temp_rpath\$$shlibpath_var\"
@@ -4121,7 +5496,7 @@
     fi
   else
     # The program doesn't exist.
-    \$ECHO \"\$0: error: \\\`\$progdir/\$program' does not exist\" 1>&2
+    \$ECHO \"\$0: error: '\$progdir/\$program' does not exist\" 1>&2
     \$ECHO \"This script is just a wrapper for \$program.\" 1>&2
     \$ECHO \"See the $PACKAGE documentation for more information.\" 1>&2
     exit 1
@@ -4140,7 +5515,7 @@
 	cat <<EOF
 
 /* $cwrappersource - temporary wrapper executable for $objdir/$outputname
-   Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION
+   Generated by $PROGRAM (GNU $PACKAGE) $VERSION
 
    The $output program cannot be directly executed until all the libtool
    libraries that it depends on are installed.
@@ -4175,47 +5550,45 @@
 #include <fcntl.h>
 #include <sys/stat.h>
 
+#define STREQ(s1, s2) (strcmp ((s1), (s2)) == 0)
+
 /* declarations of non-ANSI functions */
-#if defined(__MINGW32__)
+#if defined __MINGW32__
 # ifdef __STRICT_ANSI__
 int _putenv (const char *);
 # endif
-#elif defined(__CYGWIN__)
+#elif defined __CYGWIN__
 # ifdef __STRICT_ANSI__
 char *realpath (const char *, char *);
 int putenv (char *);
 int setenv (const char *, const char *, int);
 # endif
-/* #elif defined (other platforms) ... */
+/* #elif defined other_platform || defined ... */
 #endif
 
 /* portability defines, excluding path handling macros */
-#if defined(_MSC_VER)
+#if defined _MSC_VER
 # define setmode _setmode
 # define stat    _stat
 # define chmod   _chmod
 # define getcwd  _getcwd
 # define putenv  _putenv
 # define S_IXUSR _S_IEXEC
-# ifndef _INTPTR_T_DEFINED
-#  define _INTPTR_T_DEFINED
-#  define intptr_t int
-# endif
-#elif defined(__MINGW32__)
+#elif defined __MINGW32__
 # define setmode _setmode
 # define stat    _stat
 # define chmod   _chmod
 # define getcwd  _getcwd
 # define putenv  _putenv
-#elif defined(__CYGWIN__)
+#elif defined __CYGWIN__
 # define HAVE_SETENV
 # define FOPEN_WB "wb"
-/* #elif defined (other platforms) ... */
+/* #elif defined other platforms ... */
 #endif
 
-#if defined(PATH_MAX)
+#if defined PATH_MAX
 # define LT_PATHMAX PATH_MAX
-#elif defined(MAXPATHLEN)
+#elif defined MAXPATHLEN
 # define LT_PATHMAX MAXPATHLEN
 #else
 # define LT_PATHMAX 1024
@@ -4234,8 +5607,8 @@
 # define PATH_SEPARATOR ':'
 #endif
 
-#if defined (_WIN32) || defined (__MSDOS__) || defined (__DJGPP__) || \
-  defined (__OS2__)
+#if defined _WIN32 || defined __MSDOS__ || defined __DJGPP__ || \
+  defined __OS2__
 # define HAVE_DOS_BASED_FILE_SYSTEM
 # define FOPEN_WB "wb"
 # ifndef DIR_SEPARATOR_2
@@ -4268,10 +5641,10 @@
 
 #define XMALLOC(type, num)      ((type *) xmalloc ((num) * sizeof(type)))
 #define XFREE(stale) do { \
-  if (stale) { free ((void *) stale); stale = 0; } \
+  if (stale) { free (stale); stale = 0; } \
 } while (0)
 
-#if defined(LT_DEBUGWRAPPER)
+#if defined LT_DEBUGWRAPPER
 static int lt_debug = 1;
 #else
 static int lt_debug = 0;
@@ -4300,11 +5673,16 @@
 EOF
 
 	    cat <<EOF
-volatile const char * MAGIC_EXE = "$magic_exe";
+#if __GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 5)
+# define externally_visible volatile
+#else
+# define externally_visible __attribute__((externally_visible)) volatile
+#endif
+externally_visible const char * MAGIC_EXE = "$magic_exe";
 const char * LIB_PATH_VARNAME = "$shlibpath_var";
 EOF
 
-	    if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then
+	    if test yes = "$shlibpath_overrides_runpath" && test -n "$shlibpath_var" && test -n "$temp_rpath"; then
               func_to_host_path "$temp_rpath"
 	      cat <<EOF
 const char * LIB_PATH_VALUE   = "$func_to_host_path_result";
@@ -4328,7 +5706,7 @@
 EOF
 	    fi
 
-	    if test "$fast_install" = yes; then
+	    if test yes = "$fast_install"; then
 	      cat <<EOF
 const char * TARGET_PROGRAM_NAME = "lt-$outputname"; /* hopefully, no .exe */
 EOF
@@ -4357,12 +5735,12 @@
   char *actual_cwrapper_name;
   char *target_name;
   char *lt_argv_zero;
-  intptr_t rval = 127;
+  int rval = 127;
 
   int i;
 
   program_name = (char *) xstrdup (base_name (argv[0]));
-  newargz = XMALLOC (char *, argc + 1);
+  newargz = XMALLOC (char *, (size_t) argc + 1);
 
   /* very simple arg parsing; don't want to rely on getopt
    * also, copy all non cwrapper options to newargz, except
@@ -4371,10 +5749,10 @@
   newargc=0;
   for (i = 1; i < argc; i++)
     {
-      if (strcmp (argv[i], dumpscript_opt) == 0)
+      if (STREQ (argv[i], dumpscript_opt))
 	{
 EOF
-	    case "$host" in
+	    case $host in
 	      *mingw* | *cygwin* )
 		# make stdout use "unix" line endings
 		echo "          setmode(1,_O_BINARY);"
@@ -4385,12 +5763,12 @@
 	  lt_dump_script (stdout);
 	  return 0;
 	}
-      if (strcmp (argv[i], debug_opt) == 0)
+      if (STREQ (argv[i], debug_opt))
 	{
           lt_debug = 1;
           continue;
 	}
-      if (strcmp (argv[i], ltwrapper_option_prefix) == 0)
+      if (STREQ (argv[i], ltwrapper_option_prefix))
         {
           /* however, if there is an option in the LTWRAPPER_OPTION_PREFIX
              namespace, but it is not one of the ones we know about and
@@ -4413,7 +5791,7 @@
 EOF
 	    cat <<EOF
   /* The GNU banner must be the first non-error debug message */
-  lt_debugprintf (__FILE__, __LINE__, "libtool wrapper (GNU $PACKAGE$TIMESTAMP) $VERSION\n");
+  lt_debugprintf (__FILE__, __LINE__, "libtool wrapper (GNU $PACKAGE) $VERSION\n");
 EOF
 	    cat <<"EOF"
   lt_debugprintf (__FILE__, __LINE__, "(main) argv[0]: %s\n", argv[0]);
@@ -4524,7 +5902,7 @@
 		cat <<"EOF"
   /* execv doesn't actually work on mingw as expected on unix */
   newargz = prepare_spawn (newargz);
-  rval = _spawnv (_P_WAIT, lt_argv_zero, (const char * const *) newargz);
+  rval = (int) _spawnv (_P_WAIT, lt_argv_zero, (const char * const *) newargz);
   if (rval == -1)
     {
       /* failed to start process */
@@ -4569,7 +5947,7 @@
 {
   const char *base;
 
-#if defined (HAVE_DOS_BASED_FILE_SYSTEM)
+#if defined HAVE_DOS_BASED_FILE_SYSTEM
   /* Skip over the disk name in MSDOS pathnames. */
   if (isalpha ((unsigned char) name[0]) && name[1] == ':')
     name += 2;
@@ -4628,7 +6006,7 @@
   const char *p_next;
   /* static buffer for getcwd */
   char tmp[LT_PATHMAX + 1];
-  int tmp_len;
+  size_t tmp_len;
   char *concat_name;
 
   lt_debugprintf (__FILE__, __LINE__, "(find_executable): %s\n",
@@ -4638,7 +6016,7 @@
     return NULL;
 
   /* Absolute path? */
-#if defined (HAVE_DOS_BASED_FILE_SYSTEM)
+#if defined HAVE_DOS_BASED_FILE_SYSTEM
   if (isalpha ((unsigned char) wrapper[0]) && wrapper[1] == ':')
     {
       concat_name = xstrdup (wrapper);
@@ -4656,7 +6034,7 @@
 	    return concat_name;
 	  XFREE (concat_name);
 	}
-#if defined (HAVE_DOS_BASED_FILE_SYSTEM)
+#if defined HAVE_DOS_BASED_FILE_SYSTEM
     }
 #endif
 
@@ -4679,7 +6057,7 @@
 	      for (q = p; *q; q++)
 		if (IS_PATH_SEPARATOR (*q))
 		  break;
-	      p_len = q - p;
+	      p_len = (size_t) (q - p);
 	      p_next = (*q == '\0' ? q : q + 1);
 	      if (p_len == 0)
 		{
@@ -4798,7 +6176,7 @@
   if (patlen <= len)
     {
       str += len - patlen;
-      if (strcmp (str, pat) == 0)
+      if (STREQ (str, pat))
 	*str = '\0';
     }
   return str;
@@ -4863,7 +6241,7 @@
     char *str = xstrdup (value);
     setenv (name, str, 1);
 #else
-    int len = strlen (name) + 1 + strlen (value) + 1;
+    size_t len = strlen (name) + 1 + strlen (value) + 1;
     char *str = XMALLOC (char, len);
     sprintf (str, "%s=%s", name, value);
     if (putenv (str) != EXIT_SUCCESS)
@@ -4880,8 +6258,8 @@
   char *new_value;
   if (orig_value && *orig_value)
     {
-      int orig_value_len = strlen (orig_value);
-      int add_len = strlen (add);
+      size_t orig_value_len = strlen (orig_value);
+      size_t add_len = strlen (add);
       new_value = XMALLOC (char, add_len + orig_value_len + 1);
       if (to_end)
         {
@@ -4912,10 +6290,10 @@
     {
       char *new_value = lt_extend_str (getenv (name), value, 0);
       /* some systems can't cope with a ':'-terminated path #' */
-      int len = strlen (new_value);
-      while (((len = strlen (new_value)) > 0) && IS_PATH_SEPARATOR (new_value[len-1]))
+      size_t len = strlen (new_value);
+      while ((len > 0) && IS_PATH_SEPARATOR (new_value[len-1]))
         {
-          new_value[len-1] = '\0';
+          new_value[--len] = '\0';
         }
       lt_setenv (name, new_value);
       XFREE (new_value);
@@ -5082,27 +6460,47 @@
 # True if ARG is an import lib, as indicated by $file_magic_cmd
 func_win32_import_lib_p ()
 {
-    $opt_debug
+    $debug_cmd
+
     case `eval $file_magic_cmd \"\$1\" 2>/dev/null | $SED -e 10q` in
     *import*) : ;;
     *) false ;;
     esac
 }
 
+# func_suncc_cstd_abi
+# !!ONLY CALL THIS FOR SUN CC AFTER $compile_command IS FULLY EXPANDED!!
+# Several compiler flags select an ABI that is incompatible with the
+# Cstd library. Avoid specifying it if any are in CXXFLAGS.
+func_suncc_cstd_abi ()
+{
+    $debug_cmd
+
+    case " $compile_command " in
+    *" -compat=g "*|*\ -std=c++[0-9][0-9]\ *|*" -library=stdcxx4 "*|*" -library=stlport4 "*)
+      suncc_use_cstd_abi=no
+      ;;
+    *)
+      suncc_use_cstd_abi=yes
+      ;;
+    esac
+}
+
 # func_mode_link arg...
 func_mode_link ()
 {
-    $opt_debug
+    $debug_cmd
+
     case $host in
     *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*)
       # It is impossible to link a dll without this setting, and
       # we shouldn't force the makefile maintainer to figure out
-      # which system we are compiling for in order to pass an extra
+      # what system we are compiling for in order to pass an extra
       # flag for every libtool invocation.
       # allow_undefined=no
 
       # FIXME: Unfortunately, there are problems with the above when trying
-      # to make a dll which has undefined symbols, in which case not
+      # to make a dll that has undefined symbols, in which case not
       # even a static library is built.  For now, we need to specify
       # -no-undefined on the libtool link line when we can be certain
       # that all symbols are satisfied, otherwise we get a static library.
@@ -5146,10 +6544,11 @@
     module=no
     no_install=no
     objs=
+    os2dllname=
     non_pic_objects=
     precious_files_regex=
     prefer_static_libs=no
-    preload=no
+    preload=false
     prev=
     prevarg=
     release=
@@ -5161,7 +6560,7 @@
     vinfo=
     vinfo_number=no
     weak_libs=
-    single_module="${wl}-single_module"
+    single_module=$wl-single_module
     func_infer_tag $base_compile
 
     # We need to know -static, to get the right output filenames.
@@ -5169,15 +6568,15 @@
     do
       case $arg in
       -shared)
-	test "$build_libtool_libs" != yes && \
-	  func_fatal_configuration "can not build a shared library"
+	test yes != "$build_libtool_libs" \
+	  && func_fatal_configuration "cannot build a shared library"
 	build_old_libs=no
 	break
 	;;
       -all-static | -static | -static-libtool-libs)
 	case $arg in
 	-all-static)
-	  if test "$build_libtool_libs" = yes && test -z "$link_static_flag"; then
+	  if test yes = "$build_libtool_libs" && test -z "$link_static_flag"; then
 	    func_warning "complete static linking is impossible in this configuration"
 	  fi
 	  if test -n "$link_static_flag"; then
@@ -5210,7 +6609,7 @@
 
     # Go through the arguments, transforming them on the way.
     while test "$#" -gt 0; do
-      arg="$1"
+      arg=$1
       shift
       func_quote_for_eval "$arg"
       qarg=$func_quote_for_eval_unquoted_result
@@ -5227,21 +6626,21 @@
 
 	case $prev in
 	bindir)
-	  bindir="$arg"
+	  bindir=$arg
 	  prev=
 	  continue
 	  ;;
 	dlfiles|dlprefiles)
-	  if test "$preload" = no; then
+	  $preload || {
 	    # Add the symbol object into the linking commands.
 	    func_append compile_command " @SYMFILE@"
 	    func_append finalize_command " @SYMFILE@"
-	    preload=yes
-	  fi
+	    preload=:
+	  }
 	  case $arg in
 	  *.la | *.lo) ;;  # We handle these cases below.
 	  force)
-	    if test "$dlself" = no; then
+	    if test no = "$dlself"; then
 	      dlself=needless
 	      export_dynamic=yes
 	    fi
@@ -5249,9 +6648,9 @@
 	    continue
 	    ;;
 	  self)
-	    if test "$prev" = dlprefiles; then
+	    if test dlprefiles = "$prev"; then
 	      dlself=yes
-	    elif test "$prev" = dlfiles && test "$dlopen_self" != yes; then
+	    elif test dlfiles = "$prev" && test yes != "$dlopen_self"; then
 	      dlself=yes
 	    else
 	      dlself=needless
@@ -5261,7 +6660,7 @@
 	    continue
 	    ;;
 	  *)
-	    if test "$prev" = dlfiles; then
+	    if test dlfiles = "$prev"; then
 	      func_append dlfiles " $arg"
 	    else
 	      func_append dlprefiles " $arg"
@@ -5272,14 +6671,14 @@
 	  esac
 	  ;;
 	expsyms)
-	  export_symbols="$arg"
+	  export_symbols=$arg
 	  test -f "$arg" \
-	    || func_fatal_error "symbol file \`$arg' does not exist"
+	    || func_fatal_error "symbol file '$arg' does not exist"
 	  prev=
 	  continue
 	  ;;
 	expsyms_regex)
-	  export_symbols_regex="$arg"
+	  export_symbols_regex=$arg
 	  prev=
 	  continue
 	  ;;
@@ -5297,7 +6696,13 @@
 	  continue
 	  ;;
 	inst_prefix)
-	  inst_prefix_dir="$arg"
+	  inst_prefix_dir=$arg
+	  prev=
+	  continue
+	  ;;
+	mllvm)
+	  # Clang does not use LLVM to link, so we can simply discard any
+	  # '-mllvm $arg' options when doing the link step.
 	  prev=
 	  continue
 	  ;;
@@ -5321,21 +6726,21 @@
 
 		if test -z "$pic_object" ||
 		   test -z "$non_pic_object" ||
-		   test "$pic_object" = none &&
-		   test "$non_pic_object" = none; then
-		  func_fatal_error "cannot find name of object for \`$arg'"
+		   test none = "$pic_object" &&
+		   test none = "$non_pic_object"; then
+		  func_fatal_error "cannot find name of object for '$arg'"
 		fi
 
 		# Extract subdirectory from the argument.
 		func_dirname "$arg" "/" ""
-		xdir="$func_dirname_result"
+		xdir=$func_dirname_result
 
-		if test "$pic_object" != none; then
+		if test none != "$pic_object"; then
 		  # Prepend the subdirectory the object is found in.
-		  pic_object="$xdir$pic_object"
+		  pic_object=$xdir$pic_object
 
-		  if test "$prev" = dlfiles; then
-		    if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then
+		  if test dlfiles = "$prev"; then
+		    if test yes = "$build_libtool_libs" && test yes = "$dlopen_support"; then
 		      func_append dlfiles " $pic_object"
 		      prev=
 		      continue
@@ -5346,7 +6751,7 @@
 		  fi
 
 		  # CHECK ME:  I think I busted this.  -Ossama
-		  if test "$prev" = dlprefiles; then
+		  if test dlprefiles = "$prev"; then
 		    # Preload the old-style object.
 		    func_append dlprefiles " $pic_object"
 		    prev=
@@ -5354,23 +6759,23 @@
 
 		  # A PIC object.
 		  func_append libobjs " $pic_object"
-		  arg="$pic_object"
+		  arg=$pic_object
 		fi
 
 		# Non-PIC object.
-		if test "$non_pic_object" != none; then
+		if test none != "$non_pic_object"; then
 		  # Prepend the subdirectory the object is found in.
-		  non_pic_object="$xdir$non_pic_object"
+		  non_pic_object=$xdir$non_pic_object
 
 		  # A standard non-PIC object
 		  func_append non_pic_objects " $non_pic_object"
-		  if test -z "$pic_object" || test "$pic_object" = none ; then
-		    arg="$non_pic_object"
+		  if test -z "$pic_object" || test none = "$pic_object"; then
+		    arg=$non_pic_object
 		  fi
 		else
 		  # If the PIC object exists, use it instead.
 		  # $xdir was prepended to $pic_object above.
-		  non_pic_object="$pic_object"
+		  non_pic_object=$pic_object
 		  func_append non_pic_objects " $non_pic_object"
 		fi
 	      else
@@ -5378,7 +6783,7 @@
 		if $opt_dry_run; then
 		  # Extract subdirectory from the argument.
 		  func_dirname "$arg" "/" ""
-		  xdir="$func_dirname_result"
+		  xdir=$func_dirname_result
 
 		  func_lo2o "$arg"
 		  pic_object=$xdir$objdir/$func_lo2o_result
@@ -5386,24 +6791,29 @@
 		  func_append libobjs " $pic_object"
 		  func_append non_pic_objects " $non_pic_object"
 	        else
-		  func_fatal_error "\`$arg' is not a valid libtool object"
+		  func_fatal_error "'$arg' is not a valid libtool object"
 		fi
 	      fi
 	    done
 	  else
-	    func_fatal_error "link input file \`$arg' does not exist"
+	    func_fatal_error "link input file '$arg' does not exist"
 	  fi
 	  arg=$save_arg
 	  prev=
 	  continue
 	  ;;
+	os2dllname)
+	  os2dllname=$arg
+	  prev=
+	  continue
+	  ;;
 	precious_regex)
-	  precious_files_regex="$arg"
+	  precious_files_regex=$arg
 	  prev=
 	  continue
 	  ;;
 	release)
-	  release="-$arg"
+	  release=-$arg
 	  prev=
 	  continue
 	  ;;
@@ -5415,7 +6825,7 @@
 	    func_fatal_error "only absolute run-paths are allowed"
 	    ;;
 	  esac
-	  if test "$prev" = rpath; then
+	  if test rpath = "$prev"; then
 	    case "$rpath " in
 	    *" $arg "*) ;;
 	    *) func_append rpath " $arg" ;;
@@ -5430,7 +6840,7 @@
 	  continue
 	  ;;
 	shrext)
-	  shrext_cmds="$arg"
+	  shrext_cmds=$arg
 	  prev=
 	  continue
 	  ;;
@@ -5470,7 +6880,7 @@
 	esac
       fi # test -n "$prev"
 
-      prevarg="$arg"
+      prevarg=$arg
 
       case $arg in
       -all-static)
@@ -5484,7 +6894,7 @@
 
       -allow-undefined)
 	# FIXME: remove this flag sometime in the future.
-	func_fatal_error "\`-allow-undefined' must not be used because it is the default"
+	func_fatal_error "'-allow-undefined' must not be used because it is the default"
 	;;
 
       -avoid-version)
@@ -5516,7 +6926,7 @@
 	if test -n "$export_symbols" || test -n "$export_symbols_regex"; then
 	  func_fatal_error "more than one -exported-symbols argument is not allowed"
 	fi
-	if test "X$arg" = "X-export-symbols"; then
+	if test X-export-symbols = "X$arg"; then
 	  prev=expsyms
 	else
 	  prev=expsyms_regex
@@ -5550,9 +6960,9 @@
 	func_stripname "-L" '' "$arg"
 	if test -z "$func_stripname_result"; then
 	  if test "$#" -gt 0; then
-	    func_fatal_error "require no space between \`-L' and \`$1'"
+	    func_fatal_error "require no space between '-L' and '$1'"
 	  else
-	    func_fatal_error "need path for \`-L' option"
+	    func_fatal_error "need path for '-L' option"
 	  fi
 	fi
 	func_resolve_sysroot "$func_stripname_result"
@@ -5563,8 +6973,8 @@
 	*)
 	  absdir=`cd "$dir" && pwd`
 	  test -z "$absdir" && \
-	    func_fatal_error "cannot determine absolute directory name of \`$dir'"
-	  dir="$absdir"
+	    func_fatal_error "cannot determine absolute directory name of '$dir'"
+	  dir=$absdir
 	  ;;
 	esac
 	case "$deplibs " in
@@ -5599,7 +7009,7 @@
 	;;
 
       -l*)
-	if test "X$arg" = "X-lc" || test "X$arg" = "X-lm"; then
+	if test X-lc = "X$arg" || test X-lm = "X$arg"; then
 	  case $host in
 	  *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-beos* | *-cegcc* | *-*-haiku*)
 	    # These systems don't actually have a C or math library (as such)
@@ -5607,11 +7017,11 @@
 	    ;;
 	  *-*-os2*)
 	    # These systems don't actually have a C library (as such)
-	    test "X$arg" = "X-lc" && continue
+	    test X-lc = "X$arg" && continue
 	    ;;
-	  *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*)
+	  *-*-openbsd* | *-*-freebsd* | *-*-dragonfly* | *-*-bitrig*)
 	    # Do not include libc due to us having libc/libc_r.
-	    test "X$arg" = "X-lc" && continue
+	    test X-lc = "X$arg" && continue
 	    ;;
 	  *-*-rhapsody* | *-*-darwin1.[012])
 	    # Rhapsody C and math libraries are in the System framework
@@ -5620,16 +7030,16 @@
 	    ;;
 	  *-*-sco3.2v5* | *-*-sco5v6*)
 	    # Causes problems with __ctype
-	    test "X$arg" = "X-lc" && continue
+	    test X-lc = "X$arg" && continue
 	    ;;
 	  *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*)
 	    # Compiler inserts libc in the correct place for threads to work
-	    test "X$arg" = "X-lc" && continue
+	    test X-lc = "X$arg" && continue
 	    ;;
 	  esac
-	elif test "X$arg" = "X-lc_r"; then
+	elif test X-lc_r = "X$arg"; then
 	 case $host in
-	 *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*)
+	 *-*-openbsd* | *-*-freebsd* | *-*-dragonfly* | *-*-bitrig*)
 	   # Do not include libc_r directly, use -pthread flag.
 	   continue
 	   ;;
@@ -5639,6 +7049,11 @@
 	continue
 	;;
 
+      -mllvm)
+	prev=mllvm
+	continue
+	;;
+
       -module)
 	module=yes
 	continue
@@ -5668,7 +7083,7 @@
 	;;
 
       -multi_module)
-	single_module="${wl}-multi_module"
+	single_module=$wl-multi_module
 	continue
 	;;
 
@@ -5682,8 +7097,8 @@
 	*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-darwin* | *-cegcc*)
 	  # The PATH hackery in wrapper scripts is required on Windows
 	  # and Darwin in order for the loader to find any dlls it needs.
-	  func_warning "\`-no-install' is ignored for $host"
-	  func_warning "assuming \`-no-fast-install' instead"
+	  func_warning "'-no-install' is ignored for $host"
+	  func_warning "assuming '-no-fast-install' instead"
 	  fast_install=no
 	  ;;
 	*) no_install=yes ;;
@@ -5701,6 +7116,11 @@
 	continue
 	;;
 
+      -os2dllname)
+	prev=os2dllname
+	continue
+	;;
+
       -o) prev=output ;;
 
       -precious-files-regex)
@@ -5788,14 +7208,14 @@
 	func_stripname '-Wc,' '' "$arg"
 	args=$func_stripname_result
 	arg=
-	save_ifs="$IFS"; IFS=','
+	save_ifs=$IFS; IFS=,
 	for flag in $args; do
-	  IFS="$save_ifs"
+	  IFS=$save_ifs
           func_quote_for_eval "$flag"
 	  func_append arg " $func_quote_for_eval_result"
 	  func_append compiler_flags " $func_quote_for_eval_result"
 	done
-	IFS="$save_ifs"
+	IFS=$save_ifs
 	func_stripname ' ' '' "$arg"
 	arg=$func_stripname_result
 	;;
@@ -5804,15 +7224,15 @@
 	func_stripname '-Wl,' '' "$arg"
 	args=$func_stripname_result
 	arg=
-	save_ifs="$IFS"; IFS=','
+	save_ifs=$IFS; IFS=,
 	for flag in $args; do
-	  IFS="$save_ifs"
+	  IFS=$save_ifs
           func_quote_for_eval "$flag"
 	  func_append arg " $wl$func_quote_for_eval_result"
 	  func_append compiler_flags " $wl$func_quote_for_eval_result"
 	  func_append linker_flags " $func_quote_for_eval_result"
 	done
-	IFS="$save_ifs"
+	IFS=$save_ifs
 	func_stripname ' ' '' "$arg"
 	arg=$func_stripname_result
 	;;
@@ -5835,7 +7255,7 @@
       # -msg_* for osf cc
       -msg_*)
 	func_quote_for_eval "$arg"
-	arg="$func_quote_for_eval_result"
+	arg=$func_quote_for_eval_result
 	;;
 
       # Flags to be passed through unchanged, with rationale:
@@ -5847,25 +7267,49 @@
       # -m*, -t[45]*, -txscale* architecture-specific flags for GCC
       # -F/path              path to uninstalled frameworks, gcc on darwin
       # -p, -pg, --coverage, -fprofile-*  profiling flags for GCC
+      # -fstack-protector*   stack protector flags for GCC
       # @file                GCC response files
       # -tp=*                Portland pgcc target processor selection
       # --sysroot=*          for sysroot support
-      # -O*, -flto*, -fwhopr*, -fuse-linker-plugin GCC link-time optimization
+      # -O*, -g*, -flto*, -fwhopr*, -fuse-linker-plugin GCC link-time optimization
+      # -specs=*             GCC specs files
+      # -stdlib=*            select c++ std lib with clang
+      # -fsanitize=*         Clang/GCC memory and address sanitizer
       -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \
       -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*|-tp=*|--sysroot=*| \
-      -O*|-flto*|-fwhopr*|-fuse-linker-plugin)
+      -O*|-g*|-flto*|-fwhopr*|-fuse-linker-plugin|-fstack-protector*|-stdlib=*| \
+      -specs=*|-fsanitize=*)
         func_quote_for_eval "$arg"
-	arg="$func_quote_for_eval_result"
+	arg=$func_quote_for_eval_result
         func_append compile_command " $arg"
         func_append finalize_command " $arg"
         func_append compiler_flags " $arg"
         continue
         ;;
 
+      -Z*)
+        if test os2 = "`expr $host : '.*\(os2\)'`"; then
+          # OS/2 uses -Zxxx to specify OS/2-specific options
+	  compiler_flags="$compiler_flags $arg"
+	  func_append compile_command " $arg"
+	  func_append finalize_command " $arg"
+	  case $arg in
+	  -Zlinker | -Zstack)
+	    prev=xcompiler
+	    ;;
+	  esac
+	  continue
+        else
+	  # Otherwise treat like 'Some other compiler flag' below
+	  func_quote_for_eval "$arg"
+	  arg=$func_quote_for_eval_result
+        fi
+	;;
+
       # Some other compiler flag.
       -* | +*)
         func_quote_for_eval "$arg"
-	arg="$func_quote_for_eval_result"
+	arg=$func_quote_for_eval_result
 	;;
 
       *.$objext)
@@ -5886,21 +7330,21 @@
 
 	  if test -z "$pic_object" ||
 	     test -z "$non_pic_object" ||
-	     test "$pic_object" = none &&
-	     test "$non_pic_object" = none; then
-	    func_fatal_error "cannot find name of object for \`$arg'"
+	     test none = "$pic_object" &&
+	     test none = "$non_pic_object"; then
+	    func_fatal_error "cannot find name of object for '$arg'"
 	  fi
 
 	  # Extract subdirectory from the argument.
 	  func_dirname "$arg" "/" ""
-	  xdir="$func_dirname_result"
+	  xdir=$func_dirname_result
 
-	  if test "$pic_object" != none; then
+	  test none = "$pic_object" || {
 	    # Prepend the subdirectory the object is found in.
-	    pic_object="$xdir$pic_object"
+	    pic_object=$xdir$pic_object
 
-	    if test "$prev" = dlfiles; then
-	      if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then
+	    if test dlfiles = "$prev"; then
+	      if test yes = "$build_libtool_libs" && test yes = "$dlopen_support"; then
 		func_append dlfiles " $pic_object"
 		prev=
 		continue
@@ -5911,7 +7355,7 @@
 	    fi
 
 	    # CHECK ME:  I think I busted this.  -Ossama
-	    if test "$prev" = dlprefiles; then
+	    if test dlprefiles = "$prev"; then
 	      # Preload the old-style object.
 	      func_append dlprefiles " $pic_object"
 	      prev=
@@ -5919,23 +7363,23 @@
 
 	    # A PIC object.
 	    func_append libobjs " $pic_object"
-	    arg="$pic_object"
-	  fi
+	    arg=$pic_object
+	  }
 
 	  # Non-PIC object.
-	  if test "$non_pic_object" != none; then
+	  if test none != "$non_pic_object"; then
 	    # Prepend the subdirectory the object is found in.
-	    non_pic_object="$xdir$non_pic_object"
+	    non_pic_object=$xdir$non_pic_object
 
 	    # A standard non-PIC object
 	    func_append non_pic_objects " $non_pic_object"
-	    if test -z "$pic_object" || test "$pic_object" = none ; then
-	      arg="$non_pic_object"
+	    if test -z "$pic_object" || test none = "$pic_object"; then
+	      arg=$non_pic_object
 	    fi
 	  else
 	    # If the PIC object exists, use it instead.
 	    # $xdir was prepended to $pic_object above.
-	    non_pic_object="$pic_object"
+	    non_pic_object=$pic_object
 	    func_append non_pic_objects " $non_pic_object"
 	  fi
 	else
@@ -5943,7 +7387,7 @@
 	  if $opt_dry_run; then
 	    # Extract subdirectory from the argument.
 	    func_dirname "$arg" "/" ""
-	    xdir="$func_dirname_result"
+	    xdir=$func_dirname_result
 
 	    func_lo2o "$arg"
 	    pic_object=$xdir$objdir/$func_lo2o_result
@@ -5951,7 +7395,7 @@
 	    func_append libobjs " $pic_object"
 	    func_append non_pic_objects " $non_pic_object"
 	  else
-	    func_fatal_error "\`$arg' is not a valid libtool object"
+	    func_fatal_error "'$arg' is not a valid libtool object"
 	  fi
 	fi
 	;;
@@ -5967,11 +7411,11 @@
 	# A libtool-controlled library.
 
 	func_resolve_sysroot "$arg"
-	if test "$prev" = dlfiles; then
+	if test dlfiles = "$prev"; then
 	  # This library was specified with -dlopen.
 	  func_append dlfiles " $func_resolve_sysroot_result"
 	  prev=
-	elif test "$prev" = dlprefiles; then
+	elif test dlprefiles = "$prev"; then
 	  # The library was specified with -dlpreopen.
 	  func_append dlprefiles " $func_resolve_sysroot_result"
 	  prev=
@@ -5986,7 +7430,7 @@
 	# Unknown arguments in both finalize_command and compile_command need
 	# to be aesthetically quoted because they are evaled later.
 	func_quote_for_eval "$arg"
-	arg="$func_quote_for_eval_result"
+	arg=$func_quote_for_eval_result
 	;;
       esac # arg
 
@@ -5998,9 +7442,9 @@
     done # argument parsing loop
 
     test -n "$prev" && \
-      func_fatal_help "the \`$prevarg' option requires an argument"
+      func_fatal_help "the '$prevarg' option requires an argument"
 
-    if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then
+    if test yes = "$export_dynamic" && test -n "$export_dynamic_flag_spec"; then
       eval arg=\"$export_dynamic_flag_spec\"
       func_append compile_command " $arg"
       func_append finalize_command " $arg"
@@ -6009,20 +7453,23 @@
     oldlibs=
     # calculate the name of the file, without its directory
     func_basename "$output"
-    outputname="$func_basename_result"
-    libobjs_save="$libobjs"
+    outputname=$func_basename_result
+    libobjs_save=$libobjs
 
     if test -n "$shlibpath_var"; then
       # get the directories listed in $shlibpath_var
-      eval shlib_search_path=\`\$ECHO \"\${$shlibpath_var}\" \| \$SED \'s/:/ /g\'\`
+      eval shlib_search_path=\`\$ECHO \"\$$shlibpath_var\" \| \$SED \'s/:/ /g\'\`
     else
       shlib_search_path=
     fi
     eval sys_lib_search_path=\"$sys_lib_search_path_spec\"
     eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\"
 
+    # Definition is injected by LT_CONFIG during libtool generation.
+    func_munge_path_list sys_lib_dlsearch_path "$LT_SYS_LIBRARY_PATH"
+
     func_dirname "$output" "/" ""
-    output_objdir="$func_dirname_result$objdir"
+    output_objdir=$func_dirname_result$objdir
     func_to_tool_file "$output_objdir/"
     tool_output_objdir=$func_to_tool_file_result
     # Create the object directory.
@@ -6045,7 +7492,7 @@
     # Find all interdependent deplibs by searching for libraries
     # that are linked more than once (e.g. -la -lb -la)
     for deplib in $deplibs; do
-      if $opt_preserve_dup_deps ; then
+      if $opt_preserve_dup_deps; then
 	case "$libs " in
 	*" $deplib "*) func_append specialdeplibs " $deplib" ;;
 	esac
@@ -6053,7 +7500,7 @@
       func_append libs " $deplib"
     done
 
-    if test "$linkmode" = lib; then
+    if test lib = "$linkmode"; then
       libs="$predeps $libs $compiler_lib_search_path $postdeps"
 
       # Compute libraries that are listed more than once in $predeps
@@ -6085,7 +7532,7 @@
 	  case $file in
 	  *.la) ;;
 	  *)
-	    func_fatal_help "libraries can \`-dlopen' only libtool libraries: $file"
+	    func_fatal_help "libraries can '-dlopen' only libtool libraries: $file"
 	    ;;
 	  esac
 	done
@@ -6093,7 +7540,7 @@
     prog)
 	compile_deplibs=
 	finalize_deplibs=
-	alldeplibs=no
+	alldeplibs=false
 	newdlfiles=
 	newdlprefiles=
 	passes="conv scan dlopen dlpreopen link"
@@ -6105,32 +7552,32 @@
     for pass in $passes; do
       # The preopen pass in lib mode reverses $deplibs; put it back here
       # so that -L comes before libs that need it for instance...
-      if test "$linkmode,$pass" = "lib,link"; then
+      if test lib,link = "$linkmode,$pass"; then
 	## FIXME: Find the place where the list is rebuilt in the wrong
 	##        order, and fix it there properly
         tmp_deplibs=
 	for deplib in $deplibs; do
 	  tmp_deplibs="$deplib $tmp_deplibs"
 	done
-	deplibs="$tmp_deplibs"
+	deplibs=$tmp_deplibs
       fi
 
-      if test "$linkmode,$pass" = "lib,link" ||
-	 test "$linkmode,$pass" = "prog,scan"; then
-	libs="$deplibs"
+      if test lib,link = "$linkmode,$pass" ||
+	 test prog,scan = "$linkmode,$pass"; then
+	libs=$deplibs
 	deplibs=
       fi
-      if test "$linkmode" = prog; then
+      if test prog = "$linkmode"; then
 	case $pass in
-	dlopen) libs="$dlfiles" ;;
-	dlpreopen) libs="$dlprefiles" ;;
+	dlopen) libs=$dlfiles ;;
+	dlpreopen) libs=$dlprefiles ;;
 	link)
 	  libs="$deplibs %DEPLIBS%"
 	  test "X$link_all_deplibs" != Xno && libs="$libs $dependency_libs"
 	  ;;
 	esac
       fi
-      if test "$linkmode,$pass" = "lib,dlpreopen"; then
+      if test lib,dlpreopen = "$linkmode,$pass"; then
 	# Collect and forward deplibs of preopened libtool libs
 	for lib in $dlprefiles; do
 	  # Ignore non-libtool-libs
@@ -6151,26 +7598,26 @@
 	    esac
 	  done
 	done
-	libs="$dlprefiles"
+	libs=$dlprefiles
       fi
-      if test "$pass" = dlopen; then
+      if test dlopen = "$pass"; then
 	# Collect dlpreopened libraries
-	save_deplibs="$deplibs"
+	save_deplibs=$deplibs
 	deplibs=
       fi
 
       for deplib in $libs; do
 	lib=
-	found=no
+	found=false
 	case $deplib in
 	-mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \
         |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*)
-	  if test "$linkmode,$pass" = "prog,link"; then
+	  if test prog,link = "$linkmode,$pass"; then
 	    compile_deplibs="$deplib $compile_deplibs"
 	    finalize_deplibs="$deplib $finalize_deplibs"
 	  else
 	    func_append compiler_flags " $deplib"
-	    if test "$linkmode" = lib ; then
+	    if test lib = "$linkmode"; then
 		case "$new_inherited_linker_flags " in
 		    *" $deplib "*) ;;
 		    * ) func_append new_inherited_linker_flags " $deplib" ;;
@@ -6180,13 +7627,13 @@
 	  continue
 	  ;;
 	-l*)
-	  if test "$linkmode" != lib && test "$linkmode" != prog; then
-	    func_warning "\`-l' is ignored for archives/objects"
+	  if test lib != "$linkmode" && test prog != "$linkmode"; then
+	    func_warning "'-l' is ignored for archives/objects"
 	    continue
 	  fi
 	  func_stripname '-l' '' "$deplib"
 	  name=$func_stripname_result
-	  if test "$linkmode" = lib; then
+	  if test lib = "$linkmode"; then
 	    searchdirs="$newlib_search_path $lib_search_path $compiler_lib_search_dirs $sys_lib_search_path $shlib_search_path"
 	  else
 	    searchdirs="$newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path"
@@ -6194,31 +7641,22 @@
 	  for searchdir in $searchdirs; do
 	    for search_ext in .la $std_shrext .so .a; do
 	      # Search the libtool library
-	      lib="$searchdir/lib${name}${search_ext}"
+	      lib=$searchdir/lib$name$search_ext
 	      if test -f "$lib"; then
-		if test "$search_ext" = ".la"; then
-		  found=yes
+		if test .la = "$search_ext"; then
+		  found=:
 		else
-		  found=no
+		  found=false
 		fi
 		break 2
 	      fi
 	    done
 	  done
-	  if test "$found" != yes; then
-	    # deplib doesn't seem to be a libtool library
-	    if test "$linkmode,$pass" = "prog,link"; then
-	      compile_deplibs="$deplib $compile_deplibs"
-	      finalize_deplibs="$deplib $finalize_deplibs"
-	    else
-	      deplibs="$deplib $deplibs"
-	      test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs"
-	    fi
-	    continue
-	  else # deplib is a libtool library
+	  if $found; then
+	    # deplib is a libtool library
 	    # If $allow_libtool_libs_with_static_runtimes && $deplib is a stdlib,
 	    # We need to do some special things here, and not later.
-	    if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
+	    if test yes = "$allow_libtool_libs_with_static_runtimes"; then
 	      case " $predeps $postdeps " in
 	      *" $deplib "*)
 		if func_lalib_p "$lib"; then
@@ -6226,19 +7664,19 @@
 		  old_library=
 		  func_source "$lib"
 		  for l in $old_library $library_names; do
-		    ll="$l"
+		    ll=$l
 		  done
-		  if test "X$ll" = "X$old_library" ; then # only static version available
-		    found=no
+		  if test "X$ll" = "X$old_library"; then # only static version available
+		    found=false
 		    func_dirname "$lib" "" "."
-		    ladir="$func_dirname_result"
+		    ladir=$func_dirname_result
 		    lib=$ladir/$old_library
-		    if test "$linkmode,$pass" = "prog,link"; then
+		    if test prog,link = "$linkmode,$pass"; then
 		      compile_deplibs="$deplib $compile_deplibs"
 		      finalize_deplibs="$deplib $finalize_deplibs"
 		    else
 		      deplibs="$deplib $deplibs"
-		      test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs"
+		      test lib = "$linkmode" && newdependency_libs="$deplib $newdependency_libs"
 		    fi
 		    continue
 		  fi
@@ -6247,15 +7685,25 @@
 	      *) ;;
 	      esac
 	    fi
+	  else
+	    # deplib doesn't seem to be a libtool library
+	    if test prog,link = "$linkmode,$pass"; then
+	      compile_deplibs="$deplib $compile_deplibs"
+	      finalize_deplibs="$deplib $finalize_deplibs"
+	    else
+	      deplibs="$deplib $deplibs"
+	      test lib = "$linkmode" && newdependency_libs="$deplib $newdependency_libs"
+	    fi
+	    continue
 	  fi
 	  ;; # -l
 	*.ltframework)
-	  if test "$linkmode,$pass" = "prog,link"; then
+	  if test prog,link = "$linkmode,$pass"; then
 	    compile_deplibs="$deplib $compile_deplibs"
 	    finalize_deplibs="$deplib $finalize_deplibs"
 	  else
 	    deplibs="$deplib $deplibs"
-	    if test "$linkmode" = lib ; then
+	    if test lib = "$linkmode"; then
 		case "$new_inherited_linker_flags " in
 		    *" $deplib "*) ;;
 		    * ) func_append new_inherited_linker_flags " $deplib" ;;
@@ -6268,18 +7716,18 @@
 	  case $linkmode in
 	  lib)
 	    deplibs="$deplib $deplibs"
-	    test "$pass" = conv && continue
+	    test conv = "$pass" && continue
 	    newdependency_libs="$deplib $newdependency_libs"
 	    func_stripname '-L' '' "$deplib"
 	    func_resolve_sysroot "$func_stripname_result"
 	    func_append newlib_search_path " $func_resolve_sysroot_result"
 	    ;;
 	  prog)
-	    if test "$pass" = conv; then
+	    if test conv = "$pass"; then
 	      deplibs="$deplib $deplibs"
 	      continue
 	    fi
-	    if test "$pass" = scan; then
+	    if test scan = "$pass"; then
 	      deplibs="$deplib $deplibs"
 	    else
 	      compile_deplibs="$deplib $compile_deplibs"
@@ -6290,13 +7738,13 @@
 	    func_append newlib_search_path " $func_resolve_sysroot_result"
 	    ;;
 	  *)
-	    func_warning "\`-L' is ignored for archives/objects"
+	    func_warning "'-L' is ignored for archives/objects"
 	    ;;
 	  esac # linkmode
 	  continue
 	  ;; # -L
 	-R*)
-	  if test "$pass" = link; then
+	  if test link = "$pass"; then
 	    func_stripname '-R' '' "$deplib"
 	    func_resolve_sysroot "$func_stripname_result"
 	    dir=$func_resolve_sysroot_result
@@ -6314,7 +7762,7 @@
 	  lib=$func_resolve_sysroot_result
 	  ;;
 	*.$libext)
-	  if test "$pass" = conv; then
+	  if test conv = "$pass"; then
 	    deplibs="$deplib $deplibs"
 	    continue
 	  fi
@@ -6325,21 +7773,26 @@
 	    case " $dlpreconveniencelibs " in
 	    *" $deplib "*) ;;
 	    *)
-	      valid_a_lib=no
+	      valid_a_lib=false
 	      case $deplibs_check_method in
 		match_pattern*)
 		  set dummy $deplibs_check_method; shift
 		  match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"`
 		  if eval "\$ECHO \"$deplib\"" 2>/dev/null | $SED 10q \
 		    | $EGREP "$match_pattern_regex" > /dev/null; then
-		    valid_a_lib=yes
+		    valid_a_lib=:
 		  fi
 		;;
 		pass_all)
-		  valid_a_lib=yes
+		  valid_a_lib=:
 		;;
 	      esac
-	      if test "$valid_a_lib" != yes; then
+	      if $valid_a_lib; then
+		echo
+		$ECHO "*** Warning: Linking the shared library $output against the"
+		$ECHO "*** static library $deplib is not portable!"
+		deplibs="$deplib $deplibs"
+	      else
 		echo
 		$ECHO "*** Warning: Trying to link with static lib archive $deplib."
 		echo "*** I have the capability to make that library automatically link in when"
@@ -6347,18 +7800,13 @@
 		echo "*** shared version of the library, which you do not appear to have"
 		echo "*** because the file extensions .$libext of this argument makes me believe"
 		echo "*** that it is just a static archive that I should not use here."
-	      else
-		echo
-		$ECHO "*** Warning: Linking the shared library $output against the"
-		$ECHO "*** static library $deplib is not portable!"
-		deplibs="$deplib $deplibs"
 	      fi
 	      ;;
 	    esac
 	    continue
 	    ;;
 	  prog)
-	    if test "$pass" != link; then
+	    if test link != "$pass"; then
 	      deplibs="$deplib $deplibs"
 	    else
 	      compile_deplibs="$deplib $compile_deplibs"
@@ -6369,10 +7817,10 @@
 	  esac # linkmode
 	  ;; # *.$libext
 	*.lo | *.$objext)
-	  if test "$pass" = conv; then
+	  if test conv = "$pass"; then
 	    deplibs="$deplib $deplibs"
-	  elif test "$linkmode" = prog; then
-	    if test "$pass" = dlpreopen || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then
+	  elif test prog = "$linkmode"; then
+	    if test dlpreopen = "$pass" || test yes != "$dlopen_support" || test no = "$build_libtool_libs"; then
 	      # If there is no dlopen support or we're linking statically,
 	      # we need to preload.
 	      func_append newdlprefiles " $deplib"
@@ -6385,22 +7833,20 @@
 	  continue
 	  ;;
 	%DEPLIBS%)
-	  alldeplibs=yes
+	  alldeplibs=:
 	  continue
 	  ;;
 	esac # case $deplib
 
-	if test "$found" = yes || test -f "$lib"; then :
-	else
-	  func_fatal_error "cannot find the library \`$lib' or unhandled argument \`$deplib'"
-	fi
+	$found || test -f "$lib" \
+	  || func_fatal_error "cannot find the library '$lib' or unhandled argument '$deplib'"
 
 	# Check to see that this really is a libtool archive.
 	func_lalib_unsafe_p "$lib" \
-	  || func_fatal_error "\`$lib' is not a valid libtool archive"
+	  || func_fatal_error "'$lib' is not a valid libtool archive"
 
 	func_dirname "$lib" "" "."
-	ladir="$func_dirname_result"
+	ladir=$func_dirname_result
 
 	dlname=
 	dlopen=
@@ -6430,19 +7876,19 @@
 	  done
 	fi
 	dependency_libs=`$ECHO " $dependency_libs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
-	if test "$linkmode,$pass" = "lib,link" ||
-	   test "$linkmode,$pass" = "prog,scan" ||
-	   { test "$linkmode" != prog && test "$linkmode" != lib; }; then
+	if test lib,link = "$linkmode,$pass" ||
+	   test prog,scan = "$linkmode,$pass" ||
+	   { test prog != "$linkmode" && test lib != "$linkmode"; }; then
 	  test -n "$dlopen" && func_append dlfiles " $dlopen"
 	  test -n "$dlpreopen" && func_append dlprefiles " $dlpreopen"
 	fi
 
-	if test "$pass" = conv; then
+	if test conv = "$pass"; then
 	  # Only check for convenience libraries
 	  deplibs="$lib $deplibs"
 	  if test -z "$libdir"; then
 	    if test -z "$old_library"; then
-	      func_fatal_error "cannot find name of link library for \`$lib'"
+	      func_fatal_error "cannot find name of link library for '$lib'"
 	    fi
 	    # It is a libtool convenience library, so add in its objects.
 	    func_append convenience " $ladir/$objdir/$old_library"
@@ -6450,15 +7896,15 @@
 	    tmp_libs=
 	    for deplib in $dependency_libs; do
 	      deplibs="$deplib $deplibs"
-	      if $opt_preserve_dup_deps ; then
+	      if $opt_preserve_dup_deps; then
 		case "$tmp_libs " in
 		*" $deplib "*) func_append specialdeplibs " $deplib" ;;
 		esac
 	      fi
 	      func_append tmp_libs " $deplib"
 	    done
-	  elif test "$linkmode" != prog && test "$linkmode" != lib; then
-	    func_fatal_error "\`$lib' is not a convenience library"
+	  elif test prog != "$linkmode" && test lib != "$linkmode"; then
+	    func_fatal_error "'$lib' is not a convenience library"
 	  fi
 	  continue
 	fi # $pass = conv
@@ -6467,26 +7913,26 @@
 	# Get the name of the library we link against.
 	linklib=
 	if test -n "$old_library" &&
-	   { test "$prefer_static_libs" = yes ||
-	     test "$prefer_static_libs,$installed" = "built,no"; }; then
+	   { test yes = "$prefer_static_libs" ||
+	     test built,no = "$prefer_static_libs,$installed"; }; then
 	  linklib=$old_library
 	else
 	  for l in $old_library $library_names; do
-	    linklib="$l"
+	    linklib=$l
 	  done
 	fi
 	if test -z "$linklib"; then
-	  func_fatal_error "cannot find name of link library for \`$lib'"
+	  func_fatal_error "cannot find name of link library for '$lib'"
 	fi
 
 	# This library was specified with -dlopen.
-	if test "$pass" = dlopen; then
-	  if test -z "$libdir"; then
-	    func_fatal_error "cannot -dlopen a convenience library: \`$lib'"
-	  fi
+	if test dlopen = "$pass"; then
+	  test -z "$libdir" \
+	    && func_fatal_error "cannot -dlopen a convenience library: '$lib'"
 	  if test -z "$dlname" ||
-	     test "$dlopen_support" != yes ||
-	     test "$build_libtool_libs" = no; then
+	     test yes != "$dlopen_support" ||
+	     test no = "$build_libtool_libs"
+	  then
 	    # If there is no dlname, no dlopen support or we're linking
 	    # statically, we need to preload.  We also need to preload any
 	    # dependent libraries so libltdl's deplib preloader doesn't
@@ -6500,40 +7946,40 @@
 
 	# We need an absolute path.
 	case $ladir in
-	[\\/]* | [A-Za-z]:[\\/]*) abs_ladir="$ladir" ;;
+	[\\/]* | [A-Za-z]:[\\/]*) abs_ladir=$ladir ;;
 	*)
 	  abs_ladir=`cd "$ladir" && pwd`
 	  if test -z "$abs_ladir"; then
-	    func_warning "cannot determine absolute directory name of \`$ladir'"
+	    func_warning "cannot determine absolute directory name of '$ladir'"
 	    func_warning "passing it literally to the linker, although it might fail"
-	    abs_ladir="$ladir"
+	    abs_ladir=$ladir
 	  fi
 	  ;;
 	esac
 	func_basename "$lib"
-	laname="$func_basename_result"
+	laname=$func_basename_result
 
 	# Find the relevant object directory and library name.
-	if test "X$installed" = Xyes; then
+	if test yes = "$installed"; then
 	  if test ! -f "$lt_sysroot$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then
-	    func_warning "library \`$lib' was moved."
-	    dir="$ladir"
-	    absdir="$abs_ladir"
-	    libdir="$abs_ladir"
+	    func_warning "library '$lib' was moved."
+	    dir=$ladir
+	    absdir=$abs_ladir
+	    libdir=$abs_ladir
 	  else
-	    dir="$lt_sysroot$libdir"
-	    absdir="$lt_sysroot$libdir"
+	    dir=$lt_sysroot$libdir
+	    absdir=$lt_sysroot$libdir
 	  fi
-	  test "X$hardcode_automatic" = Xyes && avoidtemprpath=yes
+	  test yes = "$hardcode_automatic" && avoidtemprpath=yes
 	else
 	  if test ! -f "$ladir/$objdir/$linklib" && test -f "$abs_ladir/$linklib"; then
-	    dir="$ladir"
-	    absdir="$abs_ladir"
+	    dir=$ladir
+	    absdir=$abs_ladir
 	    # Remove this search path later
 	    func_append notinst_path " $abs_ladir"
 	  else
-	    dir="$ladir/$objdir"
-	    absdir="$abs_ladir/$objdir"
+	    dir=$ladir/$objdir
+	    absdir=$abs_ladir/$objdir
 	    # Remove this search path later
 	    func_append notinst_path " $abs_ladir"
 	  fi
@@ -6542,11 +7988,11 @@
 	name=$func_stripname_result
 
 	# This library was specified with -dlpreopen.
-	if test "$pass" = dlpreopen; then
-	  if test -z "$libdir" && test "$linkmode" = prog; then
-	    func_fatal_error "only libraries may -dlpreopen a convenience library: \`$lib'"
+	if test dlpreopen = "$pass"; then
+	  if test -z "$libdir" && test prog = "$linkmode"; then
+	    func_fatal_error "only libraries may -dlpreopen a convenience library: '$lib'"
 	  fi
-	  case "$host" in
+	  case $host in
 	    # special handling for platforms with PE-DLLs.
 	    *cygwin* | *mingw* | *cegcc* )
 	      # Linker will automatically link against shared library if both
@@ -6590,9 +8036,9 @@
 
 	if test -z "$libdir"; then
 	  # Link the convenience library
-	  if test "$linkmode" = lib; then
+	  if test lib = "$linkmode"; then
 	    deplibs="$dir/$old_library $deplibs"
-	  elif test "$linkmode,$pass" = "prog,link"; then
+	  elif test prog,link = "$linkmode,$pass"; then
 	    compile_deplibs="$dir/$old_library $compile_deplibs"
 	    finalize_deplibs="$dir/$old_library $finalize_deplibs"
 	  else
@@ -6602,14 +8048,14 @@
 	fi
 
 
-	if test "$linkmode" = prog && test "$pass" != link; then
+	if test prog = "$linkmode" && test link != "$pass"; then
 	  func_append newlib_search_path " $ladir"
 	  deplibs="$lib $deplibs"
 
-	  linkalldeplibs=no
-	  if test "$link_all_deplibs" != no || test -z "$library_names" ||
-	     test "$build_libtool_libs" = no; then
-	    linkalldeplibs=yes
+	  linkalldeplibs=false
+	  if test no != "$link_all_deplibs" || test -z "$library_names" ||
+	     test no = "$build_libtool_libs"; then
+	    linkalldeplibs=:
 	  fi
 
 	  tmp_libs=
@@ -6621,14 +8067,14 @@
 		 ;;
 	    esac
 	    # Need to link against all dependency_libs?
-	    if test "$linkalldeplibs" = yes; then
+	    if $linkalldeplibs; then
 	      deplibs="$deplib $deplibs"
 	    else
 	      # Need to hardcode shared library paths
 	      # or/and link against static libraries
 	      newdependency_libs="$deplib $newdependency_libs"
 	    fi
-	    if $opt_preserve_dup_deps ; then
+	    if $opt_preserve_dup_deps; then
 	      case "$tmp_libs " in
 	      *" $deplib "*) func_append specialdeplibs " $deplib" ;;
 	      esac
@@ -6638,15 +8084,15 @@
 	  continue
 	fi # $linkmode = prog...
 
-	if test "$linkmode,$pass" = "prog,link"; then
+	if test prog,link = "$linkmode,$pass"; then
 	  if test -n "$library_names" &&
-	     { { test "$prefer_static_libs" = no ||
-	         test "$prefer_static_libs,$installed" = "built,yes"; } ||
+	     { { test no = "$prefer_static_libs" ||
+	         test built,yes = "$prefer_static_libs,$installed"; } ||
 	       test -z "$old_library"; }; then
 	    # We need to hardcode the library path
-	    if test -n "$shlibpath_var" && test -z "$avoidtemprpath" ; then
+	    if test -n "$shlibpath_var" && test -z "$avoidtemprpath"; then
 	      # Make sure the rpath contains only unique directories.
-	      case "$temp_rpath:" in
+	      case $temp_rpath: in
 	      *"$absdir:"*) ;;
 	      *) func_append temp_rpath "$absdir:" ;;
 	      esac
@@ -6675,9 +8121,9 @@
 	    esac
 	  fi # $linkmode,$pass = prog,link...
 
-	  if test "$alldeplibs" = yes &&
-	     { test "$deplibs_check_method" = pass_all ||
-	       { test "$build_libtool_libs" = yes &&
+	  if $alldeplibs &&
+	     { test pass_all = "$deplibs_check_method" ||
+	       { test yes = "$build_libtool_libs" &&
 		 test -n "$library_names"; }; }; then
 	    # We only need to search for static libraries
 	    continue
@@ -6686,19 +8132,19 @@
 
 	link_static=no # Whether the deplib will be linked statically
 	use_static_libs=$prefer_static_libs
-	if test "$use_static_libs" = built && test "$installed" = yes; then
+	if test built = "$use_static_libs" && test yes = "$installed"; then
 	  use_static_libs=no
 	fi
 	if test -n "$library_names" &&
-	   { test "$use_static_libs" = no || test -z "$old_library"; }; then
+	   { test no = "$use_static_libs" || test -z "$old_library"; }; then
 	  case $host in
-	  *cygwin* | *mingw* | *cegcc*)
+	  *cygwin* | *mingw* | *cegcc* | *os2*)
 	      # No point in relinking DLLs because paths are not encoded
 	      func_append notinst_deplibs " $lib"
 	      need_relink=no
 	    ;;
 	  *)
-	    if test "$installed" = no; then
+	    if test no = "$installed"; then
 	      func_append notinst_deplibs " $lib"
 	      need_relink=yes
 	    fi
@@ -6708,24 +8154,24 @@
 
 	  # Warn about portability, can't link against -module's on some
 	  # systems (darwin).  Don't bleat about dlopened modules though!
-	  dlopenmodule=""
+	  dlopenmodule=
 	  for dlpremoduletest in $dlprefiles; do
 	    if test "X$dlpremoduletest" = "X$lib"; then
-	      dlopenmodule="$dlpremoduletest"
+	      dlopenmodule=$dlpremoduletest
 	      break
 	    fi
 	  done
-	  if test -z "$dlopenmodule" && test "$shouldnotlink" = yes && test "$pass" = link; then
+	  if test -z "$dlopenmodule" && test yes = "$shouldnotlink" && test link = "$pass"; then
 	    echo
-	    if test "$linkmode" = prog; then
+	    if test prog = "$linkmode"; then
 	      $ECHO "*** Warning: Linking the executable $output against the loadable module"
 	    else
 	      $ECHO "*** Warning: Linking the shared library $output against the loadable module"
 	    fi
 	    $ECHO "*** $linklib is not portable!"
 	  fi
-	  if test "$linkmode" = lib &&
-	     test "$hardcode_into_libs" = yes; then
+	  if test lib = "$linkmode" &&
+	     test yes = "$hardcode_into_libs"; then
 	    # Hardcode the library path.
 	    # Skip directories that are in the system default run-time
 	    # search path.
@@ -6753,43 +8199,43 @@
 	    # figure out the soname
 	    set dummy $library_names
 	    shift
-	    realname="$1"
+	    realname=$1
 	    shift
 	    libname=`eval "\\$ECHO \"$libname_spec\""`
 	    # use dlname if we got it. it's perfectly good, no?
 	    if test -n "$dlname"; then
-	      soname="$dlname"
+	      soname=$dlname
 	    elif test -n "$soname_spec"; then
 	      # bleh windows
 	      case $host in
-	      *cygwin* | mingw* | *cegcc*)
+	      *cygwin* | mingw* | *cegcc* | *os2*)
 	        func_arith $current - $age
 		major=$func_arith_result
-		versuffix="-$major"
+		versuffix=-$major
 		;;
 	      esac
 	      eval soname=\"$soname_spec\"
 	    else
-	      soname="$realname"
+	      soname=$realname
 	    fi
 
 	    # Make a new name for the extract_expsyms_cmds to use
-	    soroot="$soname"
+	    soroot=$soname
 	    func_basename "$soroot"
-	    soname="$func_basename_result"
+	    soname=$func_basename_result
 	    func_stripname 'lib' '.dll' "$soname"
 	    newlib=libimp-$func_stripname_result.a
 
 	    # If the library has no export list, then create one now
 	    if test -f "$output_objdir/$soname-def"; then :
 	    else
-	      func_verbose "extracting exported symbol list from \`$soname'"
+	      func_verbose "extracting exported symbol list from '$soname'"
 	      func_execute_cmds "$extract_expsyms_cmds" 'exit $?'
 	    fi
 
 	    # Create $newlib
 	    if test -f "$output_objdir/$newlib"; then :; else
-	      func_verbose "generating import library for \`$soname'"
+	      func_verbose "generating import library for '$soname'"
 	      func_execute_cmds "$old_archive_from_expsyms_cmds" 'exit $?'
 	    fi
 	    # make sure the library variables are pointing to the new library
@@ -6797,58 +8243,58 @@
 	    linklib=$newlib
 	  fi # test -n "$old_archive_from_expsyms_cmds"
 
-	  if test "$linkmode" = prog || test "$opt_mode" != relink; then
+	  if test prog = "$linkmode" || test relink != "$opt_mode"; then
 	    add_shlibpath=
 	    add_dir=
 	    add=
 	    lib_linked=yes
 	    case $hardcode_action in
 	    immediate | unsupported)
-	      if test "$hardcode_direct" = no; then
-		add="$dir/$linklib"
+	      if test no = "$hardcode_direct"; then
+		add=$dir/$linklib
 		case $host in
-		  *-*-sco3.2v5.0.[024]*) add_dir="-L$dir" ;;
-		  *-*-sysv4*uw2*) add_dir="-L$dir" ;;
+		  *-*-sco3.2v5.0.[024]*) add_dir=-L$dir ;;
+		  *-*-sysv4*uw2*) add_dir=-L$dir ;;
 		  *-*-sysv5OpenUNIX* | *-*-sysv5UnixWare7.[01].[10]* | \
-		    *-*-unixware7*) add_dir="-L$dir" ;;
+		    *-*-unixware7*) add_dir=-L$dir ;;
 		  *-*-darwin* )
-		    # if the lib is a (non-dlopened) module then we can not
+		    # if the lib is a (non-dlopened) module then we cannot
 		    # link against it, someone is ignoring the earlier warnings
 		    if /usr/bin/file -L $add 2> /dev/null |
-			 $GREP ": [^:]* bundle" >/dev/null ; then
+			 $GREP ": [^:]* bundle" >/dev/null; then
 		      if test "X$dlopenmodule" != "X$lib"; then
 			$ECHO "*** Warning: lib $linklib is a module, not a shared library"
-			if test -z "$old_library" ; then
+			if test -z "$old_library"; then
 			  echo
 			  echo "*** And there doesn't seem to be a static archive available"
 			  echo "*** The link will probably fail, sorry"
 			else
-			  add="$dir/$old_library"
+			  add=$dir/$old_library
 			fi
 		      elif test -n "$old_library"; then
-			add="$dir/$old_library"
+			add=$dir/$old_library
 		      fi
 		    fi
 		esac
-	      elif test "$hardcode_minus_L" = no; then
+	      elif test no = "$hardcode_minus_L"; then
 		case $host in
-		*-*-sunos*) add_shlibpath="$dir" ;;
+		*-*-sunos*) add_shlibpath=$dir ;;
 		esac
-		add_dir="-L$dir"
-		add="-l$name"
-	      elif test "$hardcode_shlibpath_var" = no; then
-		add_shlibpath="$dir"
-		add="-l$name"
+		add_dir=-L$dir
+		add=-l$name
+	      elif test no = "$hardcode_shlibpath_var"; then
+		add_shlibpath=$dir
+		add=-l$name
 	      else
 		lib_linked=no
 	      fi
 	      ;;
 	    relink)
-	      if test "$hardcode_direct" = yes &&
-	         test "$hardcode_direct_absolute" = no; then
-		add="$dir/$linklib"
-	      elif test "$hardcode_minus_L" = yes; then
-		add_dir="-L$absdir"
+	      if test yes = "$hardcode_direct" &&
+	         test no = "$hardcode_direct_absolute"; then
+		add=$dir/$linklib
+	      elif test yes = "$hardcode_minus_L"; then
+		add_dir=-L$absdir
 		# Try looking first in the location we're being installed to.
 		if test -n "$inst_prefix_dir"; then
 		  case $libdir in
@@ -6857,10 +8303,10 @@
 		      ;;
 		  esac
 		fi
-		add="-l$name"
-	      elif test "$hardcode_shlibpath_var" = yes; then
-		add_shlibpath="$dir"
-		add="-l$name"
+		add=-l$name
+	      elif test yes = "$hardcode_shlibpath_var"; then
+		add_shlibpath=$dir
+		add=-l$name
 	      else
 		lib_linked=no
 	      fi
@@ -6868,7 +8314,7 @@
 	    *) lib_linked=no ;;
 	    esac
 
-	    if test "$lib_linked" != yes; then
+	    if test yes != "$lib_linked"; then
 	      func_fatal_configuration "unsupported hardcode properties"
 	    fi
 
@@ -6878,15 +8324,15 @@
 	      *) func_append compile_shlibpath "$add_shlibpath:" ;;
 	      esac
 	    fi
-	    if test "$linkmode" = prog; then
+	    if test prog = "$linkmode"; then
 	      test -n "$add_dir" && compile_deplibs="$add_dir $compile_deplibs"
 	      test -n "$add" && compile_deplibs="$add $compile_deplibs"
 	    else
 	      test -n "$add_dir" && deplibs="$add_dir $deplibs"
 	      test -n "$add" && deplibs="$add $deplibs"
-	      if test "$hardcode_direct" != yes &&
-		 test "$hardcode_minus_L" != yes &&
-		 test "$hardcode_shlibpath_var" = yes; then
+	      if test yes != "$hardcode_direct" &&
+		 test yes != "$hardcode_minus_L" &&
+		 test yes = "$hardcode_shlibpath_var"; then
 		case :$finalize_shlibpath: in
 		*":$libdir:"*) ;;
 		*) func_append finalize_shlibpath "$libdir:" ;;
@@ -6895,33 +8341,33 @@
 	    fi
 	  fi
 
-	  if test "$linkmode" = prog || test "$opt_mode" = relink; then
+	  if test prog = "$linkmode" || test relink = "$opt_mode"; then
 	    add_shlibpath=
 	    add_dir=
 	    add=
 	    # Finalize command for both is simple: just hardcode it.
-	    if test "$hardcode_direct" = yes &&
-	       test "$hardcode_direct_absolute" = no; then
-	      add="$libdir/$linklib"
-	    elif test "$hardcode_minus_L" = yes; then
-	      add_dir="-L$libdir"
-	      add="-l$name"
-	    elif test "$hardcode_shlibpath_var" = yes; then
+	    if test yes = "$hardcode_direct" &&
+	       test no = "$hardcode_direct_absolute"; then
+	      add=$libdir/$linklib
+	    elif test yes = "$hardcode_minus_L"; then
+	      add_dir=-L$libdir
+	      add=-l$name
+	    elif test yes = "$hardcode_shlibpath_var"; then
 	      case :$finalize_shlibpath: in
 	      *":$libdir:"*) ;;
 	      *) func_append finalize_shlibpath "$libdir:" ;;
 	      esac
-	      add="-l$name"
-	    elif test "$hardcode_automatic" = yes; then
+	      add=-l$name
+	    elif test yes = "$hardcode_automatic"; then
 	      if test -n "$inst_prefix_dir" &&
-		 test -f "$inst_prefix_dir$libdir/$linklib" ; then
-		add="$inst_prefix_dir$libdir/$linklib"
+		 test -f "$inst_prefix_dir$libdir/$linklib"; then
+		add=$inst_prefix_dir$libdir/$linklib
 	      else
-		add="$libdir/$linklib"
+		add=$libdir/$linklib
 	      fi
 	    else
 	      # We cannot seem to hardcode it, guess we'll fake it.
-	      add_dir="-L$libdir"
+	      add_dir=-L$libdir
 	      # Try looking first in the location we're being installed to.
 	      if test -n "$inst_prefix_dir"; then
 		case $libdir in
@@ -6930,10 +8376,10 @@
 		    ;;
 		esac
 	      fi
-	      add="-l$name"
+	      add=-l$name
 	    fi
 
-	    if test "$linkmode" = prog; then
+	    if test prog = "$linkmode"; then
 	      test -n "$add_dir" && finalize_deplibs="$add_dir $finalize_deplibs"
 	      test -n "$add" && finalize_deplibs="$add $finalize_deplibs"
 	    else
@@ -6941,43 +8387,43 @@
 	      test -n "$add" && deplibs="$add $deplibs"
 	    fi
 	  fi
-	elif test "$linkmode" = prog; then
+	elif test prog = "$linkmode"; then
 	  # Here we assume that one of hardcode_direct or hardcode_minus_L
 	  # is not unsupported.  This is valid on all known static and
 	  # shared platforms.
-	  if test "$hardcode_direct" != unsupported; then
-	    test -n "$old_library" && linklib="$old_library"
+	  if test unsupported != "$hardcode_direct"; then
+	    test -n "$old_library" && linklib=$old_library
 	    compile_deplibs="$dir/$linklib $compile_deplibs"
 	    finalize_deplibs="$dir/$linklib $finalize_deplibs"
 	  else
 	    compile_deplibs="-l$name -L$dir $compile_deplibs"
 	    finalize_deplibs="-l$name -L$dir $finalize_deplibs"
 	  fi
-	elif test "$build_libtool_libs" = yes; then
+	elif test yes = "$build_libtool_libs"; then
 	  # Not a shared library
-	  if test "$deplibs_check_method" != pass_all; then
+	  if test pass_all != "$deplibs_check_method"; then
 	    # We're trying link a shared library against a static one
 	    # but the system doesn't support it.
 
 	    # Just print a warning and add the library to dependency_libs so
 	    # that the program can be linked against the static library.
 	    echo
-	    $ECHO "*** Warning: This system can not link to static lib archive $lib."
+	    $ECHO "*** Warning: This system cannot link to static lib archive $lib."
 	    echo "*** I have the capability to make that library automatically link in when"
 	    echo "*** you link to this library.  But I can only do this if you have a"
 	    echo "*** shared version of the library, which you do not appear to have."
-	    if test "$module" = yes; then
+	    if test yes = "$module"; then
 	      echo "*** But as you try to build a module library, libtool will still create "
 	      echo "*** a static module, that should work as long as the dlopening application"
 	      echo "*** is linked with the -dlopen flag to resolve symbols at runtime."
 	      if test -z "$global_symbol_pipe"; then
 		echo
 		echo "*** However, this would only work if libtool was able to extract symbol"
-		echo "*** lists from a program, using \`nm' or equivalent, but libtool could"
+		echo "*** lists from a program, using 'nm' or equivalent, but libtool could"
 		echo "*** not find such a program.  So, this module is probably useless."
-		echo "*** \`nm' from GNU binutils and a full rebuild may help."
+		echo "*** 'nm' from GNU binutils and a full rebuild may help."
 	      fi
-	      if test "$build_old_libs" = no; then
+	      if test no = "$build_old_libs"; then
 		build_libtool_libs=module
 		build_old_libs=yes
 	      else
@@ -6990,11 +8436,11 @@
 	  fi
 	fi # link shared/static library?
 
-	if test "$linkmode" = lib; then
+	if test lib = "$linkmode"; then
 	  if test -n "$dependency_libs" &&
-	     { test "$hardcode_into_libs" != yes ||
-	       test "$build_old_libs" = yes ||
-	       test "$link_static" = yes; }; then
+	     { test yes != "$hardcode_into_libs" ||
+	       test yes = "$build_old_libs" ||
+	       test yes = "$link_static"; }; then
 	    # Extract -R from dependency_libs
 	    temp_deplibs=
 	    for libdir in $dependency_libs; do
@@ -7008,12 +8454,12 @@
 	      *) func_append temp_deplibs " $libdir";;
 	      esac
 	    done
-	    dependency_libs="$temp_deplibs"
+	    dependency_libs=$temp_deplibs
 	  fi
 
 	  func_append newlib_search_path " $absdir"
 	  # Link against this library
-	  test "$link_static" = no && newdependency_libs="$abs_ladir/$laname $newdependency_libs"
+	  test no = "$link_static" && newdependency_libs="$abs_ladir/$laname $newdependency_libs"
 	  # ... and its dependency_libs
 	  tmp_libs=
 	  for deplib in $dependency_libs; do
@@ -7023,7 +8469,7 @@
                    func_resolve_sysroot "$func_stripname_result";;
               *) func_resolve_sysroot "$deplib" ;;
             esac
-	    if $opt_preserve_dup_deps ; then
+	    if $opt_preserve_dup_deps; then
 	      case "$tmp_libs " in
 	      *" $func_resolve_sysroot_result "*)
                 func_append specialdeplibs " $func_resolve_sysroot_result" ;;
@@ -7032,12 +8478,12 @@
 	    func_append tmp_libs " $func_resolve_sysroot_result"
 	  done
 
-	  if test "$link_all_deplibs" != no; then
+	  if test no != "$link_all_deplibs"; then
 	    # Add the search paths of all dependency libraries
 	    for deplib in $dependency_libs; do
 	      path=
 	      case $deplib in
-	      -L*) path="$deplib" ;;
+	      -L*) path=$deplib ;;
 	      *.la)
 	        func_resolve_sysroot "$deplib"
 	        deplib=$func_resolve_sysroot_result
@@ -7045,12 +8491,12 @@
 		dir=$func_dirname_result
 		# We need an absolute path.
 		case $dir in
-		[\\/]* | [A-Za-z]:[\\/]*) absdir="$dir" ;;
+		[\\/]* | [A-Za-z]:[\\/]*) absdir=$dir ;;
 		*)
 		  absdir=`cd "$dir" && pwd`
 		  if test -z "$absdir"; then
-		    func_warning "cannot determine absolute directory name of \`$dir'"
-		    absdir="$dir"
+		    func_warning "cannot determine absolute directory name of '$dir'"
+		    absdir=$dir
 		  fi
 		  ;;
 		esac
@@ -7058,35 +8504,35 @@
 		case $host in
 		*-*-darwin*)
 		  depdepl=
-		  eval deplibrary_names=`${SED} -n -e 's/^library_names=\(.*\)$/\1/p' $deplib`
-		  if test -n "$deplibrary_names" ; then
-		    for tmp in $deplibrary_names ; do
+		  eval deplibrary_names=`$SED -n -e 's/^library_names=\(.*\)$/\1/p' $deplib`
+		  if test -n "$deplibrary_names"; then
+		    for tmp in $deplibrary_names; do
 		      depdepl=$tmp
 		    done
-		    if test -f "$absdir/$objdir/$depdepl" ; then
-		      depdepl="$absdir/$objdir/$depdepl"
-		      darwin_install_name=`${OTOOL} -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'`
+		    if test -f "$absdir/$objdir/$depdepl"; then
+		      depdepl=$absdir/$objdir/$depdepl
+		      darwin_install_name=`$OTOOL -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'`
                       if test -z "$darwin_install_name"; then
-                          darwin_install_name=`${OTOOL64} -L $depdepl  | awk '{if (NR == 2) {print $1;exit}}'`
+                          darwin_install_name=`$OTOOL64 -L $depdepl  | awk '{if (NR == 2) {print $1;exit}}'`
                       fi
-		      func_append compiler_flags " ${wl}-dylib_file ${wl}${darwin_install_name}:${depdepl}"
-		      func_append linker_flags " -dylib_file ${darwin_install_name}:${depdepl}"
+		      func_append compiler_flags " $wl-dylib_file $wl$darwin_install_name:$depdepl"
+		      func_append linker_flags " -dylib_file $darwin_install_name:$depdepl"
 		      path=
 		    fi
 		  fi
 		  ;;
 		*)
-		  path="-L$absdir/$objdir"
+		  path=-L$absdir/$objdir
 		  ;;
 		esac
 		else
-		  eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib`
+		  eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $deplib`
 		  test -z "$libdir" && \
-		    func_fatal_error "\`$deplib' is not a valid libtool archive"
+		    func_fatal_error "'$deplib' is not a valid libtool archive"
 		  test "$absdir" != "$libdir" && \
-		    func_warning "\`$deplib' seems to be moved"
+		    func_warning "'$deplib' seems to be moved"
 
-		  path="-L$absdir"
+		  path=-L$absdir
 		fi
 		;;
 	      esac
@@ -7098,23 +8544,23 @@
 	  fi # link_all_deplibs != no
 	fi # linkmode = lib
       done # for deplib in $libs
-      if test "$pass" = link; then
-	if test "$linkmode" = "prog"; then
+      if test link = "$pass"; then
+	if test prog = "$linkmode"; then
 	  compile_deplibs="$new_inherited_linker_flags $compile_deplibs"
 	  finalize_deplibs="$new_inherited_linker_flags $finalize_deplibs"
 	else
 	  compiler_flags="$compiler_flags "`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
 	fi
       fi
-      dependency_libs="$newdependency_libs"
-      if test "$pass" = dlpreopen; then
+      dependency_libs=$newdependency_libs
+      if test dlpreopen = "$pass"; then
 	# Link the dlpreopened libraries before other libraries
 	for deplib in $save_deplibs; do
 	  deplibs="$deplib $deplibs"
 	done
       fi
-      if test "$pass" != dlopen; then
-	if test "$pass" != conv; then
+      if test dlopen != "$pass"; then
+	test conv = "$pass" || {
 	  # Make sure lib_search_path contains only unique directories.
 	  lib_search_path=
 	  for dir in $newlib_search_path; do
@@ -7124,12 +8570,12 @@
 	    esac
 	  done
 	  newlib_search_path=
-	fi
+	}
 
-	if test "$linkmode,$pass" != "prog,link"; then
-	  vars="deplibs"
-	else
+	if test prog,link = "$linkmode,$pass"; then
 	  vars="compile_deplibs finalize_deplibs"
+	else
+	  vars=deplibs
 	fi
 	for var in $vars dependency_libs; do
 	  # Add libraries to $var in reverse order
@@ -7187,62 +8633,93 @@
 	  eval $var=\"$tmp_libs\"
 	done # for var
       fi
+
+      # Add Sun CC postdeps if required:
+      test CXX = "$tagname" && {
+        case $host_os in
+        linux*)
+          case `$CC -V 2>&1 | sed 5q` in
+          *Sun\ C*) # Sun C++ 5.9
+            func_suncc_cstd_abi
+
+            if test no != "$suncc_use_cstd_abi"; then
+              func_append postdeps ' -library=Cstd -library=Crun'
+            fi
+            ;;
+          esac
+          ;;
+
+        solaris*)
+          func_cc_basename "$CC"
+          case $func_cc_basename_result in
+          CC* | sunCC*)
+            func_suncc_cstd_abi
+
+            if test no != "$suncc_use_cstd_abi"; then
+              func_append postdeps ' -library=Cstd -library=Crun'
+            fi
+            ;;
+          esac
+          ;;
+        esac
+      }
+
       # Last step: remove runtime libs from dependency_libs
       # (they stay in deplibs)
       tmp_libs=
-      for i in $dependency_libs ; do
+      for i in $dependency_libs; do
 	case " $predeps $postdeps $compiler_lib_search_path " in
 	*" $i "*)
-	  i=""
+	  i=
 	  ;;
 	esac
-	if test -n "$i" ; then
+	if test -n "$i"; then
 	  func_append tmp_libs " $i"
 	fi
       done
       dependency_libs=$tmp_libs
     done # for pass
-    if test "$linkmode" = prog; then
-      dlfiles="$newdlfiles"
+    if test prog = "$linkmode"; then
+      dlfiles=$newdlfiles
     fi
-    if test "$linkmode" = prog || test "$linkmode" = lib; then
-      dlprefiles="$newdlprefiles"
+    if test prog = "$linkmode" || test lib = "$linkmode"; then
+      dlprefiles=$newdlprefiles
     fi
 
     case $linkmode in
     oldlib)
-      if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then
-	func_warning "\`-dlopen' is ignored for archives"
+      if test -n "$dlfiles$dlprefiles" || test no != "$dlself"; then
+	func_warning "'-dlopen' is ignored for archives"
       fi
 
       case " $deplibs" in
       *\ -l* | *\ -L*)
-	func_warning "\`-l' and \`-L' are ignored for archives" ;;
+	func_warning "'-l' and '-L' are ignored for archives" ;;
       esac
 
       test -n "$rpath" && \
-	func_warning "\`-rpath' is ignored for archives"
+	func_warning "'-rpath' is ignored for archives"
 
       test -n "$xrpath" && \
-	func_warning "\`-R' is ignored for archives"
+	func_warning "'-R' is ignored for archives"
 
       test -n "$vinfo" && \
-	func_warning "\`-version-info/-version-number' is ignored for archives"
+	func_warning "'-version-info/-version-number' is ignored for archives"
 
       test -n "$release" && \
-	func_warning "\`-release' is ignored for archives"
+	func_warning "'-release' is ignored for archives"
 
       test -n "$export_symbols$export_symbols_regex" && \
-	func_warning "\`-export-symbols' is ignored for archives"
+	func_warning "'-export-symbols' is ignored for archives"
 
       # Now set the variables for building old libraries.
       build_libtool_libs=no
-      oldlibs="$output"
+      oldlibs=$output
       func_append objs "$old_deplibs"
       ;;
 
     lib)
-      # Make sure we only generate libraries of the form `libNAME.la'.
+      # Make sure we only generate libraries of the form 'libNAME.la'.
       case $outputname in
       lib*)
 	func_stripname 'lib' '.la' "$outputname"
@@ -7251,10 +8728,10 @@
 	eval libname=\"$libname_spec\"
 	;;
       *)
-	test "$module" = no && \
-	  func_fatal_help "libtool library \`$output' must begin with \`lib'"
+	test no = "$module" \
+	  && func_fatal_help "libtool library '$output' must begin with 'lib'"
 
-	if test "$need_lib_prefix" != no; then
+	if test no != "$need_lib_prefix"; then
 	  # Add the "lib" prefix for modules if required
 	  func_stripname '' '.la' "$outputname"
 	  name=$func_stripname_result
@@ -7268,8 +8745,8 @@
       esac
 
       if test -n "$objs"; then
-	if test "$deplibs_check_method" != pass_all; then
-	  func_fatal_error "cannot build libtool library \`$output' from non-libtool objects on this host:$objs"
+	if test pass_all != "$deplibs_check_method"; then
+	  func_fatal_error "cannot build libtool library '$output' from non-libtool objects on this host:$objs"
 	else
 	  echo
 	  $ECHO "*** Warning: Linking the shared library $output against the non-libtool"
@@ -7278,21 +8755,21 @@
 	fi
       fi
 
-      test "$dlself" != no && \
-	func_warning "\`-dlopen self' is ignored for libtool libraries"
+      test no = "$dlself" \
+	|| func_warning "'-dlopen self' is ignored for libtool libraries"
 
       set dummy $rpath
       shift
-      test "$#" -gt 1 && \
-	func_warning "ignoring multiple \`-rpath's for a libtool library"
+      test 1 -lt "$#" \
+	&& func_warning "ignoring multiple '-rpath's for a libtool library"
 
-      install_libdir="$1"
+      install_libdir=$1
 
       oldlibs=
       if test -z "$rpath"; then
-	if test "$build_libtool_libs" = yes; then
+	if test yes = "$build_libtool_libs"; then
 	  # Building a libtool convenience library.
-	  # Some compilers have problems with a `.al' extension so
+	  # Some compilers have problems with a '.al' extension so
 	  # convenience libraries should have the same extension an
 	  # archive normally would.
 	  oldlibs="$output_objdir/$libname.$libext $oldlibs"
@@ -7301,20 +8778,20 @@
 	fi
 
 	test -n "$vinfo" && \
-	  func_warning "\`-version-info/-version-number' is ignored for convenience libraries"
+	  func_warning "'-version-info/-version-number' is ignored for convenience libraries"
 
 	test -n "$release" && \
-	  func_warning "\`-release' is ignored for convenience libraries"
+	  func_warning "'-release' is ignored for convenience libraries"
       else
 
 	# Parse the version information argument.
-	save_ifs="$IFS"; IFS=':'
+	save_ifs=$IFS; IFS=:
 	set dummy $vinfo 0 0 0
 	shift
-	IFS="$save_ifs"
+	IFS=$save_ifs
 
 	test -n "$7" && \
-	  func_fatal_help "too many parameters to \`-version-info'"
+	  func_fatal_help "too many parameters to '-version-info'"
 
 	# convert absolute version numbers to libtool ages
 	# this retains compatibility with .la files and attempts
@@ -7322,45 +8799,45 @@
 
 	case $vinfo_number in
 	yes)
-	  number_major="$1"
-	  number_minor="$2"
-	  number_revision="$3"
+	  number_major=$1
+	  number_minor=$2
+	  number_revision=$3
 	  #
 	  # There are really only two kinds -- those that
 	  # use the current revision as the major version
 	  # and those that subtract age and use age as
 	  # a minor version.  But, then there is irix
-	  # which has an extra 1 added just for fun
+	  # that has an extra 1 added just for fun
 	  #
 	  case $version_type in
 	  # correct linux to gnu/linux during the next big refactor
-	  darwin|linux|osf|windows|none)
+	  darwin|freebsd-elf|linux|osf|windows|none)
 	    func_arith $number_major + $number_minor
 	    current=$func_arith_result
-	    age="$number_minor"
-	    revision="$number_revision"
+	    age=$number_minor
+	    revision=$number_revision
 	    ;;
-	  freebsd-aout|freebsd-elf|qnx|sunos)
-	    current="$number_major"
-	    revision="$number_minor"
-	    age="0"
+	  freebsd-aout|qnx|sunos)
+	    current=$number_major
+	    revision=$number_minor
+	    age=0
 	    ;;
 	  irix|nonstopux)
 	    func_arith $number_major + $number_minor
 	    current=$func_arith_result
-	    age="$number_minor"
-	    revision="$number_minor"
+	    age=$number_minor
+	    revision=$number_minor
 	    lt_irix_increment=no
 	    ;;
 	  *)
-	    func_fatal_configuration "$modename: unknown library version type \`$version_type'"
+	    func_fatal_configuration "$modename: unknown library version type '$version_type'"
 	    ;;
 	  esac
 	  ;;
 	no)
-	  current="$1"
-	  revision="$2"
-	  age="$3"
+	  current=$1
+	  revision=$2
+	  age=$3
 	  ;;
 	esac
 
@@ -7368,30 +8845,30 @@
 	case $current in
 	0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;;
 	*)
-	  func_error "CURRENT \`$current' must be a nonnegative integer"
-	  func_fatal_error "\`$vinfo' is not valid version information"
+	  func_error "CURRENT '$current' must be a nonnegative integer"
+	  func_fatal_error "'$vinfo' is not valid version information"
 	  ;;
 	esac
 
 	case $revision in
 	0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;;
 	*)
-	  func_error "REVISION \`$revision' must be a nonnegative integer"
-	  func_fatal_error "\`$vinfo' is not valid version information"
+	  func_error "REVISION '$revision' must be a nonnegative integer"
+	  func_fatal_error "'$vinfo' is not valid version information"
 	  ;;
 	esac
 
 	case $age in
 	0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;;
 	*)
-	  func_error "AGE \`$age' must be a nonnegative integer"
-	  func_fatal_error "\`$vinfo' is not valid version information"
+	  func_error "AGE '$age' must be a nonnegative integer"
+	  func_fatal_error "'$vinfo' is not valid version information"
 	  ;;
 	esac
 
 	if test "$age" -gt "$current"; then
-	  func_error "AGE \`$age' is greater than the current interface number \`$current'"
-	  func_fatal_error "\`$vinfo' is not valid version information"
+	  func_error "AGE '$age' is greater than the current interface number '$current'"
+	  func_fatal_error "'$vinfo' is not valid version information"
 	fi
 
 	# Calculate the version variables.
@@ -7406,26 +8883,36 @@
 	  # verstring for coding it into the library header
 	  func_arith $current - $age
 	  major=.$func_arith_result
-	  versuffix="$major.$age.$revision"
+	  versuffix=$major.$age.$revision
 	  # Darwin ld doesn't like 0 for these options...
 	  func_arith $current + 1
 	  minor_current=$func_arith_result
-	  xlcverstring="${wl}-compatibility_version ${wl}$minor_current ${wl}-current_version ${wl}$minor_current.$revision"
+	  xlcverstring="$wl-compatibility_version $wl$minor_current $wl-current_version $wl$minor_current.$revision"
 	  verstring="-compatibility_version $minor_current -current_version $minor_current.$revision"
+          # On Darwin other compilers
+          case $CC in
+              nagfor*)
+                  verstring="$wl-compatibility_version $wl$minor_current $wl-current_version $wl$minor_current.$revision"
+                  ;;
+              *)
+                  verstring="-compatibility_version $minor_current -current_version $minor_current.$revision"
+                  ;;
+          esac
 	  ;;
 
 	freebsd-aout)
-	  major=".$current"
-	  versuffix=".$current.$revision";
+	  major=.$current
+	  versuffix=.$current.$revision
 	  ;;
 
 	freebsd-elf)
-	  major=".$current"
-	  versuffix=".$current"
+	  func_arith $current - $age
+	  major=.$func_arith_result
+	  versuffix=$major.$age.$revision
 	  ;;
 
 	irix | nonstopux)
-	  if test "X$lt_irix_increment" = "Xno"; then
+	  if test no = "$lt_irix_increment"; then
 	    func_arith $current - $age
 	  else
 	    func_arith $current - $age + 1
@@ -7436,69 +8923,74 @@
 	    nonstopux) verstring_prefix=nonstopux ;;
 	    *)         verstring_prefix=sgi ;;
 	  esac
-	  verstring="$verstring_prefix$major.$revision"
+	  verstring=$verstring_prefix$major.$revision
 
 	  # Add in all the interfaces that we are compatible with.
 	  loop=$revision
-	  while test "$loop" -ne 0; do
+	  while test 0 -ne "$loop"; do
 	    func_arith $revision - $loop
 	    iface=$func_arith_result
 	    func_arith $loop - 1
 	    loop=$func_arith_result
-	    verstring="$verstring_prefix$major.$iface:$verstring"
+	    verstring=$verstring_prefix$major.$iface:$verstring
 	  done
 
-	  # Before this point, $major must not contain `.'.
+	  # Before this point, $major must not contain '.'.
 	  major=.$major
-	  versuffix="$major.$revision"
+	  versuffix=$major.$revision
 	  ;;
 
 	linux) # correct to gnu/linux during the next big refactor
 	  func_arith $current - $age
 	  major=.$func_arith_result
-	  versuffix="$major.$age.$revision"
+	  versuffix=$major.$age.$revision
 	  ;;
 
 	osf)
 	  func_arith $current - $age
 	  major=.$func_arith_result
-	  versuffix=".$current.$age.$revision"
-	  verstring="$current.$age.$revision"
+	  versuffix=.$current.$age.$revision
+	  verstring=$current.$age.$revision
 
 	  # Add in all the interfaces that we are compatible with.
 	  loop=$age
-	  while test "$loop" -ne 0; do
+	  while test 0 -ne "$loop"; do
 	    func_arith $current - $loop
 	    iface=$func_arith_result
 	    func_arith $loop - 1
 	    loop=$func_arith_result
-	    verstring="$verstring:${iface}.0"
+	    verstring=$verstring:$iface.0
 	  done
 
 	  # Make executables depend on our current version.
-	  func_append verstring ":${current}.0"
+	  func_append verstring ":$current.0"
 	  ;;
 
 	qnx)
-	  major=".$current"
-	  versuffix=".$current"
+	  major=.$current
+	  versuffix=.$current
+	  ;;
+
+	sco)
+	  major=.$current
+	  versuffix=.$current
 	  ;;
 
 	sunos)
-	  major=".$current"
-	  versuffix=".$current.$revision"
+	  major=.$current
+	  versuffix=.$current.$revision
 	  ;;
 
 	windows)
 	  # Use '-' rather than '.', since we only want one
-	  # extension on DOS 8.3 filesystems.
+	  # extension on DOS 8.3 file systems.
 	  func_arith $current - $age
 	  major=$func_arith_result
-	  versuffix="-$major"
+	  versuffix=-$major
 	  ;;
 
 	*)
-	  func_fatal_configuration "unknown library version type \`$version_type'"
+	  func_fatal_configuration "unknown library version type '$version_type'"
 	  ;;
 	esac
 
@@ -7512,42 +9004,45 @@
 	    verstring=
 	    ;;
 	  *)
-	    verstring="0.0"
+	    verstring=0.0
 	    ;;
 	  esac
-	  if test "$need_version" = no; then
+	  if test no = "$need_version"; then
 	    versuffix=
 	  else
-	    versuffix=".0.0"
+	    versuffix=.0.0
 	  fi
 	fi
 
 	# Remove version info from name if versioning should be avoided
-	if test "$avoid_version" = yes && test "$need_version" = no; then
+	if test yes,no = "$avoid_version,$need_version"; then
 	  major=
 	  versuffix=
-	  verstring=""
+	  verstring=
 	fi
 
 	# Check to see if the archive will have undefined symbols.
-	if test "$allow_undefined" = yes; then
-	  if test "$allow_undefined_flag" = unsupported; then
-	    func_warning "undefined symbols not allowed in $host shared libraries"
-	    build_libtool_libs=no
-	    build_old_libs=yes
+	if test yes = "$allow_undefined"; then
+	  if test unsupported = "$allow_undefined_flag"; then
+	    if test yes = "$build_old_libs"; then
+	      func_warning "undefined symbols not allowed in $host shared libraries; building static only"
+	      build_libtool_libs=no
+	    else
+	      func_fatal_error "can't build $host shared library unless -no-undefined is specified"
+	    fi
 	  fi
 	else
 	  # Don't allow undefined symbols.
-	  allow_undefined_flag="$no_undefined_flag"
+	  allow_undefined_flag=$no_undefined_flag
 	fi
 
       fi
 
-      func_generate_dlsyms "$libname" "$libname" "yes"
+      func_generate_dlsyms "$libname" "$libname" :
       func_append libobjs " $symfileobj"
-      test "X$libobjs" = "X " && libobjs=
+      test " " = "$libobjs" && libobjs=
 
-      if test "$opt_mode" != relink; then
+      if test relink != "$opt_mode"; then
 	# Remove our outputs, but don't remove object files since they
 	# may have been created when compiling PIC objects.
 	removelist=
@@ -7556,8 +9051,8 @@
 	  case $p in
 	    *.$objext | *.gcno)
 	       ;;
-	    $output_objdir/$outputname | $output_objdir/$libname.* | $output_objdir/${libname}${release}.*)
-	       if test "X$precious_files_regex" != "X"; then
+	    $output_objdir/$outputname | $output_objdir/$libname.* | $output_objdir/$libname$release.*)
+	       if test -n "$precious_files_regex"; then
 		 if $ECHO "$p" | $EGREP -e "$precious_files_regex" >/dev/null 2>&1
 		 then
 		   continue
@@ -7573,11 +9068,11 @@
       fi
 
       # Now set the variables for building old libraries.
-      if test "$build_old_libs" = yes && test "$build_libtool_libs" != convenience ; then
+      if test yes = "$build_old_libs" && test convenience != "$build_libtool_libs"; then
 	func_append oldlibs " $output_objdir/$libname.$libext"
 
 	# Transform .lo files to .o files.
-	oldobjs="$objs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.${libext}$/d; $lo2o" | $NL2SP`
+	oldobjs="$objs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.$libext$/d; $lo2o" | $NL2SP`
       fi
 
       # Eliminate all temporary directories.
@@ -7598,13 +9093,13 @@
 	  *) func_append finalize_rpath " $libdir" ;;
 	  esac
 	done
-	if test "$hardcode_into_libs" != yes || test "$build_old_libs" = yes; then
+	if test yes != "$hardcode_into_libs" || test yes = "$build_old_libs"; then
 	  dependency_libs="$temp_xrpath $dependency_libs"
 	fi
       fi
 
       # Make sure dlfiles contains only unique files that won't be dlpreopened
-      old_dlfiles="$dlfiles"
+      old_dlfiles=$dlfiles
       dlfiles=
       for lib in $old_dlfiles; do
 	case " $dlprefiles $dlfiles " in
@@ -7614,7 +9109,7 @@
       done
 
       # Make sure dlprefiles contains only unique files
-      old_dlprefiles="$dlprefiles"
+      old_dlprefiles=$dlprefiles
       dlprefiles=
       for lib in $old_dlprefiles; do
 	case "$dlprefiles " in
@@ -7623,7 +9118,7 @@
 	esac
       done
 
-      if test "$build_libtool_libs" = yes; then
+      if test yes = "$build_libtool_libs"; then
 	if test -n "$rpath"; then
 	  case $host in
 	  *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos* | *-cegcc* | *-*-haiku*)
@@ -7647,7 +9142,7 @@
 	    ;;
 	  *)
 	    # Add libc to deplibs on all other systems if necessary.
-	    if test "$build_libtool_need_lc" = "yes"; then
+	    if test yes = "$build_libtool_need_lc"; then
 	      func_append deplibs " -lc"
 	    fi
 	    ;;
@@ -7663,9 +9158,9 @@
 	# I'm not sure if I'm treating the release correctly.  I think
 	# release should show up in the -l (ie -lgmp5) so we don't want to
 	# add it in twice.  Is that correct?
-	release=""
-	versuffix=""
-	major=""
+	release=
+	versuffix=
+	major=
 	newdeplibs=
 	droppeddeps=no
 	case $deplibs_check_method in
@@ -7694,20 +9189,20 @@
 	      -l*)
 		func_stripname -l '' "$i"
 		name=$func_stripname_result
-		if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
+		if test yes = "$allow_libtool_libs_with_static_runtimes"; then
 		  case " $predeps $postdeps " in
 		  *" $i "*)
 		    func_append newdeplibs " $i"
-		    i=""
+		    i=
 		    ;;
 		  esac
 		fi
-		if test -n "$i" ; then
+		if test -n "$i"; then
 		  libname=`eval "\\$ECHO \"$libname_spec\""`
 		  deplib_matches=`eval "\\$ECHO \"$library_names_spec\""`
 		  set dummy $deplib_matches; shift
 		  deplib_match=$1
-		  if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0 ; then
+		  if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0; then
 		    func_append newdeplibs " $i"
 		  else
 		    droppeddeps=yes
@@ -7737,20 +9232,20 @@
 		$opt_dry_run || $RM conftest
 		if $LTCC $LTCFLAGS -o conftest conftest.c $i; then
 		  ldd_output=`ldd conftest`
-		  if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
+		  if test yes = "$allow_libtool_libs_with_static_runtimes"; then
 		    case " $predeps $postdeps " in
 		    *" $i "*)
 		      func_append newdeplibs " $i"
-		      i=""
+		      i=
 		      ;;
 		    esac
 		  fi
-		  if test -n "$i" ; then
+		  if test -n "$i"; then
 		    libname=`eval "\\$ECHO \"$libname_spec\""`
 		    deplib_matches=`eval "\\$ECHO \"$library_names_spec\""`
 		    set dummy $deplib_matches; shift
 		    deplib_match=$1
-		    if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0 ; then
+		    if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0; then
 		      func_append newdeplibs " $i"
 		    else
 		      droppeddeps=yes
@@ -7787,24 +9282,24 @@
 	    -l*)
 	      func_stripname -l '' "$a_deplib"
 	      name=$func_stripname_result
-	      if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
+	      if test yes = "$allow_libtool_libs_with_static_runtimes"; then
 		case " $predeps $postdeps " in
 		*" $a_deplib "*)
 		  func_append newdeplibs " $a_deplib"
-		  a_deplib=""
+		  a_deplib=
 		  ;;
 		esac
 	      fi
-	      if test -n "$a_deplib" ; then
+	      if test -n "$a_deplib"; then
 		libname=`eval "\\$ECHO \"$libname_spec\""`
 		if test -n "$file_magic_glob"; then
 		  libnameglob=`func_echo_all "$libname" | $SED -e $file_magic_glob`
 		else
 		  libnameglob=$libname
 		fi
-		test "$want_nocaseglob" = yes && nocaseglob=`shopt -p nocaseglob`
+		test yes = "$want_nocaseglob" && nocaseglob=`shopt -p nocaseglob`
 		for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do
-		  if test "$want_nocaseglob" = yes; then
+		  if test yes = "$want_nocaseglob"; then
 		    shopt -s nocaseglob
 		    potential_libs=`ls $i/$libnameglob[.-]* 2>/dev/null`
 		    $nocaseglob
@@ -7822,25 +9317,25 @@
 		      # We might still enter an endless loop, since a link
 		      # loop can be closed while we follow links,
 		      # but so what?
-		      potlib="$potent_lib"
+		      potlib=$potent_lib
 		      while test -h "$potlib" 2>/dev/null; do
-			potliblink=`ls -ld $potlib | ${SED} 's/.* -> //'`
+			potliblink=`ls -ld $potlib | $SED 's/.* -> //'`
 			case $potliblink in
-			[\\/]* | [A-Za-z]:[\\/]*) potlib="$potliblink";;
-			*) potlib=`$ECHO "$potlib" | $SED 's,[^/]*$,,'`"$potliblink";;
+			[\\/]* | [A-Za-z]:[\\/]*) potlib=$potliblink;;
+			*) potlib=`$ECHO "$potlib" | $SED 's|[^/]*$||'`"$potliblink";;
 			esac
 		      done
 		      if eval $file_magic_cmd \"\$potlib\" 2>/dev/null |
 			 $SED -e 10q |
 			 $EGREP "$file_magic_regex" > /dev/null; then
 			func_append newdeplibs " $a_deplib"
-			a_deplib=""
+			a_deplib=
 			break 2
 		      fi
 		  done
 		done
 	      fi
-	      if test -n "$a_deplib" ; then
+	      if test -n "$a_deplib"; then
 		droppeddeps=yes
 		echo
 		$ECHO "*** Warning: linker path does not have real file for library $a_deplib."
@@ -7848,7 +9343,7 @@
 		echo "*** you link to this library.  But I can only do this if you have a"
 		echo "*** shared version of the library, which you do not appear to have"
 		echo "*** because I did check the linker path looking for a file starting"
-		if test -z "$potlib" ; then
+		if test -z "$potlib"; then
 		  $ECHO "*** with $libname but no candidates were found. (...for file magic test)"
 		else
 		  $ECHO "*** with $libname and none of the candidates passed a file format test"
@@ -7871,30 +9366,30 @@
 	    -l*)
 	      func_stripname -l '' "$a_deplib"
 	      name=$func_stripname_result
-	      if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
+	      if test yes = "$allow_libtool_libs_with_static_runtimes"; then
 		case " $predeps $postdeps " in
 		*" $a_deplib "*)
 		  func_append newdeplibs " $a_deplib"
-		  a_deplib=""
+		  a_deplib=
 		  ;;
 		esac
 	      fi
-	      if test -n "$a_deplib" ; then
+	      if test -n "$a_deplib"; then
 		libname=`eval "\\$ECHO \"$libname_spec\""`
 		for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do
 		  potential_libs=`ls $i/$libname[.-]* 2>/dev/null`
 		  for potent_lib in $potential_libs; do
-		    potlib="$potent_lib" # see symlink-check above in file_magic test
+		    potlib=$potent_lib # see symlink-check above in file_magic test
 		    if eval "\$ECHO \"$potent_lib\"" 2>/dev/null | $SED 10q | \
 		       $EGREP "$match_pattern_regex" > /dev/null; then
 		      func_append newdeplibs " $a_deplib"
-		      a_deplib=""
+		      a_deplib=
 		      break 2
 		    fi
 		  done
 		done
 	      fi
-	      if test -n "$a_deplib" ; then
+	      if test -n "$a_deplib"; then
 		droppeddeps=yes
 		echo
 		$ECHO "*** Warning: linker path does not have real file for library $a_deplib."
@@ -7902,7 +9397,7 @@
 		echo "*** you link to this library.  But I can only do this if you have a"
 		echo "*** shared version of the library, which you do not appear to have"
 		echo "*** because I did check the linker path looking for a file starting"
-		if test -z "$potlib" ; then
+		if test -z "$potlib"; then
 		  $ECHO "*** with $libname but no candidates were found. (...for regex pattern test)"
 		else
 		  $ECHO "*** with $libname and none of the candidates passed a file format test"
@@ -7918,18 +9413,18 @@
 	  done # Gone through all deplibs.
 	  ;;
 	none | unknown | *)
-	  newdeplibs=""
+	  newdeplibs=
 	  tmp_deplibs=`$ECHO " $deplibs" | $SED 's/ -lc$//; s/ -[LR][^ ]*//g'`
-	  if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
-	    for i in $predeps $postdeps ; do
+	  if test yes = "$allow_libtool_libs_with_static_runtimes"; then
+	    for i in $predeps $postdeps; do
 	      # can't use Xsed below, because $i might contain '/'
-	      tmp_deplibs=`$ECHO " $tmp_deplibs" | $SED "s,$i,,"`
+	      tmp_deplibs=`$ECHO " $tmp_deplibs" | $SED "s|$i||"`
 	    done
 	  fi
 	  case $tmp_deplibs in
 	  *[!\	\ ]*)
 	    echo
-	    if test "X$deplibs_check_method" = "Xnone"; then
+	    if test none = "$deplibs_check_method"; then
 	      echo "*** Warning: inter-library dependencies are not supported in this platform."
 	    else
 	      echo "*** Warning: inter-library dependencies are not known to be supported."
@@ -7953,8 +9448,8 @@
 	  ;;
 	esac
 
-	if test "$droppeddeps" = yes; then
-	  if test "$module" = yes; then
+	if test yes = "$droppeddeps"; then
+	  if test yes = "$module"; then
 	    echo
 	    echo "*** Warning: libtool could not satisfy all declared inter-library"
 	    $ECHO "*** dependencies of module $libname.  Therefore, libtool will create"
@@ -7963,12 +9458,12 @@
 	    if test -z "$global_symbol_pipe"; then
 	      echo
 	      echo "*** However, this would only work if libtool was able to extract symbol"
-	      echo "*** lists from a program, using \`nm' or equivalent, but libtool could"
+	      echo "*** lists from a program, using 'nm' or equivalent, but libtool could"
 	      echo "*** not find such a program.  So, this module is probably useless."
-	      echo "*** \`nm' from GNU binutils and a full rebuild may help."
+	      echo "*** 'nm' from GNU binutils and a full rebuild may help."
 	    fi
-	    if test "$build_old_libs" = no; then
-	      oldlibs="$output_objdir/$libname.$libext"
+	    if test no = "$build_old_libs"; then
+	      oldlibs=$output_objdir/$libname.$libext
 	      build_libtool_libs=module
 	      build_old_libs=yes
 	    else
@@ -7979,14 +9474,14 @@
 	    echo "*** automatically added whenever a program is linked with this library"
 	    echo "*** or is declared to -dlopen it."
 
-	    if test "$allow_undefined" = no; then
+	    if test no = "$allow_undefined"; then
 	      echo
 	      echo "*** Since this library must not contain undefined symbols,"
 	      echo "*** because either the platform does not support them or"
 	      echo "*** it was explicitly requested with -no-undefined,"
 	      echo "*** libtool will only create a static version of it."
-	      if test "$build_old_libs" = no; then
-		oldlibs="$output_objdir/$libname.$libext"
+	      if test no = "$build_old_libs"; then
+		oldlibs=$output_objdir/$libname.$libext
 		build_libtool_libs=module
 		build_old_libs=yes
 	      else
@@ -8032,7 +9527,7 @@
 	*) func_append new_libs " $deplib" ;;
 	esac
       done
-      deplibs="$new_libs"
+      deplibs=$new_libs
 
       # All the library-specific variables (install_libdir is set above).
       library_names=
@@ -8040,25 +9535,25 @@
       dlname=
 
       # Test again, we may have decided not to build it any more
-      if test "$build_libtool_libs" = yes; then
-	# Remove ${wl} instances when linking with ld.
+      if test yes = "$build_libtool_libs"; then
+	# Remove $wl instances when linking with ld.
 	# FIXME: should test the right _cmds variable.
 	case $archive_cmds in
 	  *\$LD\ *) wl= ;;
         esac
-	if test "$hardcode_into_libs" = yes; then
+	if test yes = "$hardcode_into_libs"; then
 	  # Hardcode the library paths
 	  hardcode_libdirs=
 	  dep_rpath=
-	  rpath="$finalize_rpath"
-	  test "$opt_mode" != relink && rpath="$compile_rpath$rpath"
+	  rpath=$finalize_rpath
+	  test relink = "$opt_mode" || rpath=$compile_rpath$rpath
 	  for libdir in $rpath; do
 	    if test -n "$hardcode_libdir_flag_spec"; then
 	      if test -n "$hardcode_libdir_separator"; then
 		func_replace_sysroot "$libdir"
 		libdir=$func_replace_sysroot_result
 		if test -z "$hardcode_libdirs"; then
-		  hardcode_libdirs="$libdir"
+		  hardcode_libdirs=$libdir
 		else
 		  # Just accumulate the unique libdirs.
 		  case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in
@@ -8083,7 +9578,7 @@
 	  # Substitute the hardcoded libdirs into the rpath.
 	  if test -n "$hardcode_libdir_separator" &&
 	     test -n "$hardcode_libdirs"; then
-	    libdir="$hardcode_libdirs"
+	    libdir=$hardcode_libdirs
 	    eval "dep_rpath=\"$hardcode_libdir_flag_spec\""
 	  fi
 	  if test -n "$runpath_var" && test -n "$perm_rpath"; then
@@ -8097,8 +9592,8 @@
 	  test -n "$dep_rpath" && deplibs="$dep_rpath $deplibs"
 	fi
 
-	shlibpath="$finalize_shlibpath"
-	test "$opt_mode" != relink && shlibpath="$compile_shlibpath$shlibpath"
+	shlibpath=$finalize_shlibpath
+	test relink = "$opt_mode" || shlibpath=$compile_shlibpath$shlibpath
 	if test -n "$shlibpath"; then
 	  eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var"
 	fi
@@ -8108,19 +9603,19 @@
 	eval library_names=\"$library_names_spec\"
 	set dummy $library_names
 	shift
-	realname="$1"
+	realname=$1
 	shift
 
 	if test -n "$soname_spec"; then
 	  eval soname=\"$soname_spec\"
 	else
-	  soname="$realname"
+	  soname=$realname
 	fi
 	if test -z "$dlname"; then
 	  dlname=$soname
 	fi
 
-	lib="$output_objdir/$realname"
+	lib=$output_objdir/$realname
 	linknames=
 	for link
 	do
@@ -8134,7 +9629,7 @@
 	delfiles=
 	if test -n "$export_symbols" && test -n "$include_expsyms"; then
 	  $opt_dry_run || cp "$export_symbols" "$output_objdir/$libname.uexp"
-	  export_symbols="$output_objdir/$libname.uexp"
+	  export_symbols=$output_objdir/$libname.uexp
 	  func_append delfiles " $export_symbols"
 	fi
 
@@ -8143,31 +9638,31 @@
 	cygwin* | mingw* | cegcc*)
 	  if test -n "$export_symbols" && test -z "$export_symbols_regex"; then
 	    # exporting using user supplied symfile
-	    if test "x`$SED 1q $export_symbols`" != xEXPORTS; then
+	    func_dll_def_p "$export_symbols" || {
 	      # and it's NOT already a .def file. Must figure out
 	      # which of the given symbols are data symbols and tag
 	      # them as such. So, trigger use of export_symbols_cmds.
 	      # export_symbols gets reassigned inside the "prepare
 	      # the list of exported symbols" if statement, so the
 	      # include_expsyms logic still works.
-	      orig_export_symbols="$export_symbols"
+	      orig_export_symbols=$export_symbols
 	      export_symbols=
 	      always_export_symbols=yes
-	    fi
+	    }
 	  fi
 	  ;;
 	esac
 
 	# Prepare the list of exported symbols
 	if test -z "$export_symbols"; then
-	  if test "$always_export_symbols" = yes || test -n "$export_symbols_regex"; then
-	    func_verbose "generating symbol list for \`$libname.la'"
-	    export_symbols="$output_objdir/$libname.exp"
+	  if test yes = "$always_export_symbols" || test -n "$export_symbols_regex"; then
+	    func_verbose "generating symbol list for '$libname.la'"
+	    export_symbols=$output_objdir/$libname.exp
 	    $opt_dry_run || $RM $export_symbols
 	    cmds=$export_symbols_cmds
-	    save_ifs="$IFS"; IFS='~'
+	    save_ifs=$IFS; IFS='~'
 	    for cmd1 in $cmds; do
-	      IFS="$save_ifs"
+	      IFS=$save_ifs
 	      # Take the normal branch if the nm_file_list_spec branch
 	      # doesn't work or if tool conversion is not needed.
 	      case $nm_file_list_spec~$to_tool_file_cmd in
@@ -8181,7 +9676,7 @@
 		  try_normal_branch=no
 		  ;;
 	      esac
-	      if test "$try_normal_branch" = yes \
+	      if test yes = "$try_normal_branch" \
 		 && { test "$len" -lt "$max_cmd_len" \
 		      || test "$max_cmd_len" -le -1; }
 	      then
@@ -8192,7 +9687,7 @@
 		output_la=$func_basename_result
 		save_libobjs=$libobjs
 		save_output=$output
-		output=${output_objdir}/${output_la}.nm
+		output=$output_objdir/$output_la.nm
 		func_to_tool_file "$output"
 		libobjs=$nm_file_list_spec$func_to_tool_file_result
 		func_append delfiles " $output"
@@ -8215,8 +9710,8 @@
 		break
 	      fi
 	    done
-	    IFS="$save_ifs"
-	    if test -n "$export_symbols_regex" && test "X$skipped_export" != "X:"; then
+	    IFS=$save_ifs
+	    if test -n "$export_symbols_regex" && test : != "$skipped_export"; then
 	      func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"'
 	      func_show_eval '$MV "${export_symbols}T" "$export_symbols"'
 	    fi
@@ -8224,16 +9719,16 @@
 	fi
 
 	if test -n "$export_symbols" && test -n "$include_expsyms"; then
-	  tmp_export_symbols="$export_symbols"
-	  test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols"
+	  tmp_export_symbols=$export_symbols
+	  test -n "$orig_export_symbols" && tmp_export_symbols=$orig_export_symbols
 	  $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"'
 	fi
 
-	if test "X$skipped_export" != "X:" && test -n "$orig_export_symbols"; then
+	if test : != "$skipped_export" && test -n "$orig_export_symbols"; then
 	  # The given exports_symbols file has to be filtered, so filter it.
-	  func_verbose "filter symbol list for \`$libname.la' to tag DATA exports"
+	  func_verbose "filter symbol list for '$libname.la' to tag DATA exports"
 	  # FIXME: $output_objdir/$libname.filter potentially contains lots of
-	  # 's' commands which not all seds can handle. GNU sed should be fine
+	  # 's' commands, which not all seds can handle. GNU sed should be fine
 	  # though. Also, the filter scales superlinearly with the number of
 	  # global variables. join(1) would be nice here, but unfortunately
 	  # isn't a blessed tool.
@@ -8252,11 +9747,11 @@
 	    ;;
 	  esac
 	done
-	deplibs="$tmp_deplibs"
+	deplibs=$tmp_deplibs
 
 	if test -n "$convenience"; then
 	  if test -n "$whole_archive_flag_spec" &&
-	    test "$compiler_needs_object" = yes &&
+	    test yes = "$compiler_needs_object" &&
 	    test -z "$libobjs"; then
 	    # extract the archives, so we have objects to list.
 	    # TODO: could optimize this to just extract one archive.
@@ -8267,7 +9762,7 @@
 	    eval libobjs=\"\$libobjs $whole_archive_flag_spec\"
 	    test "X$libobjs" = "X " && libobjs=
 	  else
-	    gentop="$output_objdir/${outputname}x"
+	    gentop=$output_objdir/${outputname}x
 	    func_append generated " $gentop"
 
 	    func_extract_archives $gentop $convenience
@@ -8276,18 +9771,18 @@
 	  fi
 	fi
 
-	if test "$thread_safe" = yes && test -n "$thread_safe_flag_spec"; then
+	if test yes = "$thread_safe" && test -n "$thread_safe_flag_spec"; then
 	  eval flag=\"$thread_safe_flag_spec\"
 	  func_append linker_flags " $flag"
 	fi
 
 	# Make a backup of the uninstalled library when relinking
-	if test "$opt_mode" = relink; then
+	if test relink = "$opt_mode"; then
 	  $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}U && $MV $realname ${realname}U)' || exit $?
 	fi
 
 	# Do each of the archive commands.
-	if test "$module" = yes && test -n "$module_cmds" ; then
+	if test yes = "$module" && test -n "$module_cmds"; then
 	  if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then
 	    eval test_cmds=\"$module_expsym_cmds\"
 	    cmds=$module_expsym_cmds
@@ -8305,7 +9800,7 @@
 	  fi
 	fi
 
-	if test "X$skipped_export" != "X:" &&
+	if test : != "$skipped_export" &&
 	   func_len " $test_cmds" &&
 	   len=$func_len_result &&
 	   test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then
@@ -8338,8 +9833,8 @@
 	  last_robj=
 	  k=1
 
-	  if test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "$with_gnu_ld" = yes; then
-	    output=${output_objdir}/${output_la}.lnkscript
+	  if test -n "$save_libobjs" && test : != "$skipped_export" && test yes = "$with_gnu_ld"; then
+	    output=$output_objdir/$output_la.lnkscript
 	    func_verbose "creating GNU ld script: $output"
 	    echo 'INPUT (' > $output
 	    for obj in $save_libobjs
@@ -8351,14 +9846,14 @@
 	    func_append delfiles " $output"
 	    func_to_tool_file "$output"
 	    output=$func_to_tool_file_result
-	  elif test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "X$file_list_spec" != X; then
-	    output=${output_objdir}/${output_la}.lnk
+	  elif test -n "$save_libobjs" && test : != "$skipped_export" && test -n "$file_list_spec"; then
+	    output=$output_objdir/$output_la.lnk
 	    func_verbose "creating linker input file list: $output"
 	    : > $output
 	    set x $save_libobjs
 	    shift
 	    firstobj=
-	    if test "$compiler_needs_object" = yes; then
+	    if test yes = "$compiler_needs_object"; then
 	      firstobj="$1 "
 	      shift
 	    fi
@@ -8373,7 +9868,7 @@
 	  else
 	    if test -n "$save_libobjs"; then
 	      func_verbose "creating reloadable object files..."
-	      output=$output_objdir/$output_la-${k}.$objext
+	      output=$output_objdir/$output_la-$k.$objext
 	      eval test_cmds=\"$reload_cmds\"
 	      func_len " $test_cmds"
 	      len0=$func_len_result
@@ -8385,13 +9880,13 @@
 		func_len " $obj"
 		func_arith $len + $func_len_result
 		len=$func_arith_result
-		if test "X$objlist" = X ||
+		if test -z "$objlist" ||
 		   test "$len" -lt "$max_cmd_len"; then
 		  func_append objlist " $obj"
 		else
 		  # The command $test_cmds is almost too long, add a
 		  # command to the queue.
-		  if test "$k" -eq 1 ; then
+		  if test 1 -eq "$k"; then
 		    # The first file doesn't have a previous command to add.
 		    reload_objs=$objlist
 		    eval concat_cmds=\"$reload_cmds\"
@@ -8401,10 +9896,10 @@
 		    reload_objs="$objlist $last_robj"
 		    eval concat_cmds=\"\$concat_cmds~$reload_cmds~\$RM $last_robj\"
 		  fi
-		  last_robj=$output_objdir/$output_la-${k}.$objext
+		  last_robj=$output_objdir/$output_la-$k.$objext
 		  func_arith $k + 1
 		  k=$func_arith_result
-		  output=$output_objdir/$output_la-${k}.$objext
+		  output=$output_objdir/$output_la-$k.$objext
 		  objlist=" $obj"
 		  func_len " $last_robj"
 		  func_arith $len0 + $func_len_result
@@ -8416,9 +9911,9 @@
 	      # files will link in the last one created.
 	      test -z "$concat_cmds" || concat_cmds=$concat_cmds~
 	      reload_objs="$objlist $last_robj"
-	      eval concat_cmds=\"\${concat_cmds}$reload_cmds\"
+	      eval concat_cmds=\"\$concat_cmds$reload_cmds\"
 	      if test -n "$last_robj"; then
-	        eval concat_cmds=\"\${concat_cmds}~\$RM $last_robj\"
+	        eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\"
 	      fi
 	      func_append delfiles " $output"
 
@@ -8426,9 +9921,9 @@
 	      output=
 	    fi
 
-	    if ${skipped_export-false}; then
-	      func_verbose "generating symbol list for \`$libname.la'"
-	      export_symbols="$output_objdir/$libname.exp"
+	    ${skipped_export-false} && {
+	      func_verbose "generating symbol list for '$libname.la'"
+	      export_symbols=$output_objdir/$libname.exp
 	      $opt_dry_run || $RM $export_symbols
 	      libobjs=$output
 	      # Append the command to create the export file.
@@ -8437,16 +9932,16 @@
 	      if test -n "$last_robj"; then
 		eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\"
 	      fi
-	    fi
+	    }
 
 	    test -n "$save_libobjs" &&
 	      func_verbose "creating a temporary reloadable object file: $output"
 
 	    # Loop through the commands generated above and execute them.
-	    save_ifs="$IFS"; IFS='~'
+	    save_ifs=$IFS; IFS='~'
 	    for cmd in $concat_cmds; do
-	      IFS="$save_ifs"
-	      $opt_silent || {
+	      IFS=$save_ifs
+	      $opt_quiet || {
 		  func_quote_for_expand "$cmd"
 		  eval "func_echo $func_quote_for_expand_result"
 	      }
@@ -8454,7 +9949,7 @@
 		lt_exit=$?
 
 		# Restore the uninstalled library and exit
-		if test "$opt_mode" = relink; then
+		if test relink = "$opt_mode"; then
 		  ( cd "$output_objdir" && \
 		    $RM "${realname}T" && \
 		    $MV "${realname}U" "$realname" )
@@ -8463,7 +9958,7 @@
 		exit $lt_exit
 	      }
 	    done
-	    IFS="$save_ifs"
+	    IFS=$save_ifs
 
 	    if test -n "$export_symbols_regex" && ${skipped_export-false}; then
 	      func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"'
@@ -8471,18 +9966,18 @@
 	    fi
 	  fi
 
-          if ${skipped_export-false}; then
+          ${skipped_export-false} && {
 	    if test -n "$export_symbols" && test -n "$include_expsyms"; then
-	      tmp_export_symbols="$export_symbols"
-	      test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols"
+	      tmp_export_symbols=$export_symbols
+	      test -n "$orig_export_symbols" && tmp_export_symbols=$orig_export_symbols
 	      $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"'
 	    fi
 
 	    if test -n "$orig_export_symbols"; then
 	      # The given exports_symbols file has to be filtered, so filter it.
-	      func_verbose "filter symbol list for \`$libname.la' to tag DATA exports"
+	      func_verbose "filter symbol list for '$libname.la' to tag DATA exports"
 	      # FIXME: $output_objdir/$libname.filter potentially contains lots of
-	      # 's' commands which not all seds can handle. GNU sed should be fine
+	      # 's' commands, which not all seds can handle. GNU sed should be fine
 	      # though. Also, the filter scales superlinearly with the number of
 	      # global variables. join(1) would be nice here, but unfortunately
 	      # isn't a blessed tool.
@@ -8491,7 +9986,7 @@
 	      export_symbols=$output_objdir/$libname.def
 	      $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols
 	    fi
-	  fi
+	  }
 
 	  libobjs=$output
 	  # Restore the value of output.
@@ -8505,7 +10000,7 @@
 	  # value of $libobjs for piecewise linking.
 
 	  # Do each of the archive commands.
-	  if test "$module" = yes && test -n "$module_cmds" ; then
+	  if test yes = "$module" && test -n "$module_cmds"; then
 	    if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then
 	      cmds=$module_expsym_cmds
 	    else
@@ -8527,7 +10022,7 @@
 
 	# Add any objects from preloaded convenience libraries
 	if test -n "$dlprefiles"; then
-	  gentop="$output_objdir/${outputname}x"
+	  gentop=$output_objdir/${outputname}x
 	  func_append generated " $gentop"
 
 	  func_extract_archives $gentop $dlprefiles
@@ -8535,11 +10030,12 @@
 	  test "X$libobjs" = "X " && libobjs=
 	fi
 
-	save_ifs="$IFS"; IFS='~'
+	save_ifs=$IFS; IFS='~'
 	for cmd in $cmds; do
-	  IFS="$save_ifs"
+	  IFS=$sp$nl
 	  eval cmd=\"$cmd\"
-	  $opt_silent || {
+	  IFS=$save_ifs
+	  $opt_quiet || {
 	    func_quote_for_expand "$cmd"
 	    eval "func_echo $func_quote_for_expand_result"
 	  }
@@ -8547,7 +10043,7 @@
 	    lt_exit=$?
 
 	    # Restore the uninstalled library and exit
-	    if test "$opt_mode" = relink; then
+	    if test relink = "$opt_mode"; then
 	      ( cd "$output_objdir" && \
 	        $RM "${realname}T" && \
 		$MV "${realname}U" "$realname" )
@@ -8556,10 +10052,10 @@
 	    exit $lt_exit
 	  }
 	done
-	IFS="$save_ifs"
+	IFS=$save_ifs
 
 	# Restore the uninstalled library and exit
-	if test "$opt_mode" = relink; then
+	if test relink = "$opt_mode"; then
 	  $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}T && $MV $realname ${realname}T && $MV ${realname}U $realname)' || exit $?
 
 	  if test -n "$convenience"; then
@@ -8579,39 +10075,39 @@
 	done
 
 	# If -module or -export-dynamic was specified, set the dlname.
-	if test "$module" = yes || test "$export_dynamic" = yes; then
+	if test yes = "$module" || test yes = "$export_dynamic"; then
 	  # On all known operating systems, these are identical.
-	  dlname="$soname"
+	  dlname=$soname
 	fi
       fi
       ;;
 
     obj)
-      if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then
-	func_warning "\`-dlopen' is ignored for objects"
+      if test -n "$dlfiles$dlprefiles" || test no != "$dlself"; then
+	func_warning "'-dlopen' is ignored for objects"
       fi
 
       case " $deplibs" in
       *\ -l* | *\ -L*)
-	func_warning "\`-l' and \`-L' are ignored for objects" ;;
+	func_warning "'-l' and '-L' are ignored for objects" ;;
       esac
 
       test -n "$rpath" && \
-	func_warning "\`-rpath' is ignored for objects"
+	func_warning "'-rpath' is ignored for objects"
 
       test -n "$xrpath" && \
-	func_warning "\`-R' is ignored for objects"
+	func_warning "'-R' is ignored for objects"
 
       test -n "$vinfo" && \
-	func_warning "\`-version-info' is ignored for objects"
+	func_warning "'-version-info' is ignored for objects"
 
       test -n "$release" && \
-	func_warning "\`-release' is ignored for objects"
+	func_warning "'-release' is ignored for objects"
 
       case $output in
       *.lo)
 	test -n "$objs$old_deplibs" && \
-	  func_fatal_error "cannot build library object \`$output' from non-libtool objects"
+	  func_fatal_error "cannot build library object '$output' from non-libtool objects"
 
 	libobj=$output
 	func_lo2o "$libobj"
@@ -8619,7 +10115,7 @@
 	;;
       *)
 	libobj=
-	obj="$output"
+	obj=$output
 	;;
       esac
 
@@ -8632,17 +10128,19 @@
       # the extraction.
       reload_conv_objs=
       gentop=
-      # reload_cmds runs $LD directly, so let us get rid of
-      # -Wl from whole_archive_flag_spec and hope we can get by with
-      # turning comma into space..
-      wl=
-
+      # if reload_cmds runs $LD directly, get rid of -Wl from
+      # whole_archive_flag_spec and hope we can get by with turning comma
+      # into space.
+      case $reload_cmds in
+        *\$LD[\ \$]*) wl= ;;
+      esac
       if test -n "$convenience"; then
 	if test -n "$whole_archive_flag_spec"; then
 	  eval tmp_whole_archive_flags=\"$whole_archive_flag_spec\"
-	  reload_conv_objs=$reload_objs\ `$ECHO "$tmp_whole_archive_flags" | $SED 's|,| |g'`
+	  test -n "$wl" || tmp_whole_archive_flags=`$ECHO "$tmp_whole_archive_flags" | $SED 's|,| |g'`
+	  reload_conv_objs=$reload_objs\ $tmp_whole_archive_flags
 	else
-	  gentop="$output_objdir/${obj}x"
+	  gentop=$output_objdir/${obj}x
 	  func_append generated " $gentop"
 
 	  func_extract_archives $gentop $convenience
@@ -8651,12 +10149,12 @@
       fi
 
       # If we're not building shared, we need to use non_pic_objs
-      test "$build_libtool_libs" != yes && libobjs="$non_pic_objects"
+      test yes = "$build_libtool_libs" || libobjs=$non_pic_objects
 
       # Create the old-style object.
-      reload_objs="$objs$old_deplibs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.${libext}$/d; /\.lib$/d; $lo2o" | $NL2SP`" $reload_conv_objs" ### testsuite: skip nested quoting test
+      reload_objs=$objs$old_deplibs' '`$ECHO "$libobjs" | $SP2NL | $SED "/\.$libext$/d; /\.lib$/d; $lo2o" | $NL2SP`' '$reload_conv_objs
 
-      output="$obj"
+      output=$obj
       func_execute_cmds "$reload_cmds" 'exit $?'
 
       # Exit if we aren't doing a library object file.
@@ -8668,7 +10166,7 @@
 	exit $EXIT_SUCCESS
       fi
 
-      if test "$build_libtool_libs" != yes; then
+      test yes = "$build_libtool_libs" || {
 	if test -n "$gentop"; then
 	  func_show_eval '${RM}r "$gentop"'
 	fi
@@ -8678,12 +10176,12 @@
 	# $show "echo timestamp > $libobj"
 	# $opt_dry_run || eval "echo timestamp > $libobj" || exit $?
 	exit $EXIT_SUCCESS
-      fi
+      }
 
-      if test -n "$pic_flag" || test "$pic_mode" != default; then
+      if test -n "$pic_flag" || test default != "$pic_mode"; then
 	# Only do commands if we really have different PIC objects.
 	reload_objs="$libobjs $reload_conv_objs"
-	output="$libobj"
+	output=$libobj
 	func_execute_cmds "$reload_cmds" 'exit $?'
       fi
 
@@ -8700,16 +10198,14 @@
 	          output=$func_stripname_result.exe;;
       esac
       test -n "$vinfo" && \
-	func_warning "\`-version-info' is ignored for programs"
+	func_warning "'-version-info' is ignored for programs"
 
       test -n "$release" && \
-	func_warning "\`-release' is ignored for programs"
+	func_warning "'-release' is ignored for programs"
 
-      test "$preload" = yes \
-        && test "$dlopen_support" = unknown \
-	&& test "$dlopen_self" = unknown \
-	&& test "$dlopen_self_static" = unknown && \
-	  func_warning "\`LT_INIT([dlopen])' not used. Assuming no dlopen support."
+      $preload \
+	&& test unknown,unknown,unknown = "$dlopen_support,$dlopen_self,$dlopen_self_static" \
+	&& func_warning "'LT_INIT([dlopen])' not used. Assuming no dlopen support."
 
       case $host in
       *-*-rhapsody* | *-*-darwin1.[012])
@@ -8723,11 +10219,11 @@
       *-*-darwin*)
 	# Don't allow lazy linking, it breaks C++ global constructors
 	# But is supposedly fixed on 10.4 or later (yay!).
-	if test "$tagname" = CXX ; then
+	if test CXX = "$tagname"; then
 	  case ${MACOSX_DEPLOYMENT_TARGET-10.0} in
 	    10.[0123])
-	      func_append compile_command " ${wl}-bind_at_load"
-	      func_append finalize_command " ${wl}-bind_at_load"
+	      func_append compile_command " $wl-bind_at_load"
+	      func_append finalize_command " $wl-bind_at_load"
 	    ;;
 	  esac
 	fi
@@ -8763,7 +10259,7 @@
 	*) func_append new_libs " $deplib" ;;
 	esac
       done
-      compile_deplibs="$new_libs"
+      compile_deplibs=$new_libs
 
 
       func_append compile_command " $compile_deplibs"
@@ -8787,7 +10283,7 @@
 	if test -n "$hardcode_libdir_flag_spec"; then
 	  if test -n "$hardcode_libdir_separator"; then
 	    if test -z "$hardcode_libdirs"; then
-	      hardcode_libdirs="$libdir"
+	      hardcode_libdirs=$libdir
 	    else
 	      # Just accumulate the unique libdirs.
 	      case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in
@@ -8810,7 +10306,7 @@
 	fi
 	case $host in
 	*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*)
-	  testbindir=`${ECHO} "$libdir" | ${SED} -e 's*/lib$*/bin*'`
+	  testbindir=`$ECHO "$libdir" | $SED -e 's*/lib$*/bin*'`
 	  case :$dllsearchpath: in
 	  *":$libdir:"*) ;;
 	  ::) dllsearchpath=$libdir;;
@@ -8827,10 +10323,10 @@
       # Substitute the hardcoded libdirs into the rpath.
       if test -n "$hardcode_libdir_separator" &&
 	 test -n "$hardcode_libdirs"; then
-	libdir="$hardcode_libdirs"
+	libdir=$hardcode_libdirs
 	eval rpath=\" $hardcode_libdir_flag_spec\"
       fi
-      compile_rpath="$rpath"
+      compile_rpath=$rpath
 
       rpath=
       hardcode_libdirs=
@@ -8838,7 +10334,7 @@
 	if test -n "$hardcode_libdir_flag_spec"; then
 	  if test -n "$hardcode_libdir_separator"; then
 	    if test -z "$hardcode_libdirs"; then
-	      hardcode_libdirs="$libdir"
+	      hardcode_libdirs=$libdir
 	    else
 	      # Just accumulate the unique libdirs.
 	      case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in
@@ -8863,45 +10359,43 @@
       # Substitute the hardcoded libdirs into the rpath.
       if test -n "$hardcode_libdir_separator" &&
 	 test -n "$hardcode_libdirs"; then
-	libdir="$hardcode_libdirs"
+	libdir=$hardcode_libdirs
 	eval rpath=\" $hardcode_libdir_flag_spec\"
       fi
-      finalize_rpath="$rpath"
+      finalize_rpath=$rpath
 
-      if test -n "$libobjs" && test "$build_old_libs" = yes; then
+      if test -n "$libobjs" && test yes = "$build_old_libs"; then
 	# Transform all the library objects into standard objects.
 	compile_command=`$ECHO "$compile_command" | $SP2NL | $SED "$lo2o" | $NL2SP`
 	finalize_command=`$ECHO "$finalize_command" | $SP2NL | $SED "$lo2o" | $NL2SP`
       fi
 
-      func_generate_dlsyms "$outputname" "@PROGRAM@" "no"
+      func_generate_dlsyms "$outputname" "@PROGRAM@" false
 
       # template prelinking step
       if test -n "$prelink_cmds"; then
 	func_execute_cmds "$prelink_cmds" 'exit $?'
       fi
 
-      wrappers_required=yes
+      wrappers_required=:
       case $host in
       *cegcc* | *mingw32ce*)
         # Disable wrappers for cegcc and mingw32ce hosts, we are cross compiling anyway.
-        wrappers_required=no
+        wrappers_required=false
         ;;
       *cygwin* | *mingw* )
-        if test "$build_libtool_libs" != yes; then
-          wrappers_required=no
-        fi
+        test yes = "$build_libtool_libs" || wrappers_required=false
         ;;
       *)
-        if test "$need_relink" = no || test "$build_libtool_libs" != yes; then
-          wrappers_required=no
+        if test no = "$need_relink" || test yes != "$build_libtool_libs"; then
+          wrappers_required=false
         fi
         ;;
       esac
-      if test "$wrappers_required" = no; then
+      $wrappers_required || {
 	# Replace the output file specification.
 	compile_command=`$ECHO "$compile_command" | $SED 's%@OUTPUT@%'"$output"'%g'`
-	link_command="$compile_command$compile_rpath"
+	link_command=$compile_command$compile_rpath
 
 	# We have no uninstalled library dependencies, so finalize right now.
 	exit_status=0
@@ -8914,12 +10408,12 @@
 	fi
 
 	# Delete the generated files.
-	if test -f "$output_objdir/${outputname}S.${objext}"; then
-	  func_show_eval '$RM "$output_objdir/${outputname}S.${objext}"'
+	if test -f "$output_objdir/${outputname}S.$objext"; then
+	  func_show_eval '$RM "$output_objdir/${outputname}S.$objext"'
 	fi
 
 	exit $exit_status
-      fi
+      }
 
       if test -n "$compile_shlibpath$finalize_shlibpath"; then
 	compile_command="$shlibpath_var=\"$compile_shlibpath$finalize_shlibpath\$$shlibpath_var\" $compile_command"
@@ -8949,9 +10443,9 @@
 	fi
       fi
 
-      if test "$no_install" = yes; then
+      if test yes = "$no_install"; then
 	# We don't need to create a wrapper script.
-	link_command="$compile_var$compile_command$compile_rpath"
+	link_command=$compile_var$compile_command$compile_rpath
 	# Replace the output file specification.
 	link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output"'%g'`
 	# Delete the old output file.
@@ -8968,27 +10462,28 @@
 	exit $EXIT_SUCCESS
       fi
 
-      if test "$hardcode_action" = relink; then
-	# Fast installation is not supported
-	link_command="$compile_var$compile_command$compile_rpath"
-	relink_command="$finalize_var$finalize_command$finalize_rpath"
+      case $hardcode_action,$fast_install in
+        relink,*)
+	  # Fast installation is not supported
+	  link_command=$compile_var$compile_command$compile_rpath
+	  relink_command=$finalize_var$finalize_command$finalize_rpath
 
-	func_warning "this platform does not like uninstalled shared libraries"
-	func_warning "\`$output' will be relinked during installation"
-      else
-	if test "$fast_install" != no; then
-	  link_command="$finalize_var$compile_command$finalize_rpath"
-	  if test "$fast_install" = yes; then
-	    relink_command=`$ECHO "$compile_var$compile_command$compile_rpath" | $SED 's%@OUTPUT@%\$progdir/\$file%g'`
-	  else
-	    # fast_install is set to needless
-	    relink_command=
-	  fi
-	else
-	  link_command="$compile_var$compile_command$compile_rpath"
-	  relink_command="$finalize_var$finalize_command$finalize_rpath"
-	fi
-      fi
+	  func_warning "this platform does not like uninstalled shared libraries"
+	  func_warning "'$output' will be relinked during installation"
+	  ;;
+        *,yes)
+	  link_command=$finalize_var$compile_command$finalize_rpath
+	  relink_command=`$ECHO "$compile_var$compile_command$compile_rpath" | $SED 's%@OUTPUT@%\$progdir/\$file%g'`
+          ;;
+	*,no)
+	  link_command=$compile_var$compile_command$compile_rpath
+	  relink_command=$finalize_var$finalize_command$finalize_rpath
+          ;;
+	*,needless)
+	  link_command=$finalize_var$compile_command$finalize_rpath
+	  relink_command=
+          ;;
+      esac
 
       # Replace the output file specification.
       link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'`
@@ -9045,8 +10540,8 @@
 	    func_dirname_and_basename "$output" "" "."
 	    output_name=$func_basename_result
 	    output_path=$func_dirname_result
-	    cwrappersource="$output_path/$objdir/lt-$output_name.c"
-	    cwrapper="$output_path/$output_name.exe"
+	    cwrappersource=$output_path/$objdir/lt-$output_name.c
+	    cwrapper=$output_path/$output_name.exe
 	    $RM $cwrappersource $cwrapper
 	    trap "$RM $cwrappersource $cwrapper; exit $EXIT_FAILURE" 1 2 15
 
@@ -9067,7 +10562,7 @@
 	    trap "$RM $func_ltwrapper_scriptname_result; exit $EXIT_FAILURE" 1 2 15
 	    $opt_dry_run || {
 	      # note: this script will not be executed, so do not chmod.
-	      if test "x$build" = "x$host" ; then
+	      if test "x$build" = "x$host"; then
 		$cwrapper --lt-dump-script > $func_ltwrapper_scriptname_result
 	      else
 		func_emit_wrapper no > $func_ltwrapper_scriptname_result
@@ -9090,25 +10585,27 @@
     # See if we need to build an old-fashioned archive.
     for oldlib in $oldlibs; do
 
-      if test "$build_libtool_libs" = convenience; then
-	oldobjs="$libobjs_save $symfileobj"
-	addlibs="$convenience"
-	build_libtool_libs=no
-      else
-	if test "$build_libtool_libs" = module; then
-	  oldobjs="$libobjs_save"
+      case $build_libtool_libs in
+        convenience)
+	  oldobjs="$libobjs_save $symfileobj"
+	  addlibs=$convenience
 	  build_libtool_libs=no
-	else
+	  ;;
+	module)
+	  oldobjs=$libobjs_save
+	  addlibs=$old_convenience
+	  build_libtool_libs=no
+          ;;
+	*)
 	  oldobjs="$old_deplibs $non_pic_objects"
-	  if test "$preload" = yes && test -f "$symfileobj"; then
-	    func_append oldobjs " $symfileobj"
-	  fi
-	fi
-	addlibs="$old_convenience"
-      fi
+	  $preload && test -f "$symfileobj" \
+	    && func_append oldobjs " $symfileobj"
+	  addlibs=$old_convenience
+	  ;;
+      esac
 
       if test -n "$addlibs"; then
-	gentop="$output_objdir/${outputname}x"
+	gentop=$output_objdir/${outputname}x
 	func_append generated " $gentop"
 
 	func_extract_archives $gentop $addlibs
@@ -9116,13 +10613,13 @@
       fi
 
       # Do each command in the archive commands.
-      if test -n "$old_archive_from_new_cmds" && test "$build_libtool_libs" = yes; then
+      if test -n "$old_archive_from_new_cmds" && test yes = "$build_libtool_libs"; then
 	cmds=$old_archive_from_new_cmds
       else
 
 	# Add any objects from preloaded convenience libraries
 	if test -n "$dlprefiles"; then
-	  gentop="$output_objdir/${outputname}x"
+	  gentop=$output_objdir/${outputname}x
 	  func_append generated " $gentop"
 
 	  func_extract_archives $gentop $dlprefiles
@@ -9143,7 +10640,7 @@
 	  :
 	else
 	  echo "copying selected object files to avoid basename conflicts..."
-	  gentop="$output_objdir/${outputname}x"
+	  gentop=$output_objdir/${outputname}x
 	  func_append generated " $gentop"
 	  func_mkdir_p "$gentop"
 	  save_oldobjs=$oldobjs
@@ -9152,7 +10649,7 @@
 	  for obj in $save_oldobjs
 	  do
 	    func_basename "$obj"
-	    objbase="$func_basename_result"
+	    objbase=$func_basename_result
 	    case " $oldobjs " in
 	    " ") oldobjs=$obj ;;
 	    *[\ /]"$objbase "*)
@@ -9221,18 +10718,18 @@
 	    else
 	      # the above command should be used before it gets too long
 	      oldobjs=$objlist
-	      if test "$obj" = "$last_oldobj" ; then
+	      if test "$obj" = "$last_oldobj"; then
 		RANLIB=$save_RANLIB
 	      fi
 	      test -z "$concat_cmds" || concat_cmds=$concat_cmds~
-	      eval concat_cmds=\"\${concat_cmds}$old_archive_cmds\"
+	      eval concat_cmds=\"\$concat_cmds$old_archive_cmds\"
 	      objlist=
 	      len=$len0
 	    fi
 	  done
 	  RANLIB=$save_RANLIB
 	  oldobjs=$objlist
-	  if test "X$oldobjs" = "X" ; then
+	  if test -z "$oldobjs"; then
 	    eval cmds=\"\$concat_cmds\"
 	  else
 	    eval cmds=\"\$concat_cmds~\$old_archive_cmds\"
@@ -9249,7 +10746,7 @@
     case $output in
     *.la)
       old_library=
-      test "$build_old_libs" = yes && old_library="$libname.$libext"
+      test yes = "$build_old_libs" && old_library=$libname.$libext
       func_verbose "creating $output"
 
       # Preserve any variables that may affect compiler behavior
@@ -9264,31 +10761,31 @@
 	fi
       done
       # Quote the link command for shipping.
-      relink_command="(cd `pwd`; $SHELL $progpath $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)"
+      relink_command="(cd `pwd`; $SHELL \"$progpath\" $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)"
       relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"`
-      if test "$hardcode_automatic" = yes ; then
+      if test yes = "$hardcode_automatic"; then
 	relink_command=
       fi
 
       # Only create the output if not a dry run.
       $opt_dry_run || {
 	for installed in no yes; do
-	  if test "$installed" = yes; then
+	  if test yes = "$installed"; then
 	    if test -z "$install_libdir"; then
 	      break
 	    fi
-	    output="$output_objdir/$outputname"i
+	    output=$output_objdir/${outputname}i
 	    # Replace all uninstalled libtool libraries with the installed ones
 	    newdependency_libs=
 	    for deplib in $dependency_libs; do
 	      case $deplib in
 	      *.la)
 		func_basename "$deplib"
-		name="$func_basename_result"
+		name=$func_basename_result
 		func_resolve_sysroot "$deplib"
-		eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $func_resolve_sysroot_result`
+		eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $func_resolve_sysroot_result`
 		test -z "$libdir" && \
-		  func_fatal_error "\`$deplib' is not a valid libtool archive"
+		  func_fatal_error "'$deplib' is not a valid libtool archive"
 		func_append newdependency_libs " ${lt_sysroot:+=}$libdir/$name"
 		;;
 	      -L*)
@@ -9304,23 +10801,23 @@
 	      *) func_append newdependency_libs " $deplib" ;;
 	      esac
 	    done
-	    dependency_libs="$newdependency_libs"
+	    dependency_libs=$newdependency_libs
 	    newdlfiles=
 
 	    for lib in $dlfiles; do
 	      case $lib in
 	      *.la)
 	        func_basename "$lib"
-		name="$func_basename_result"
-		eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib`
+		name=$func_basename_result
+		eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $lib`
 		test -z "$libdir" && \
-		  func_fatal_error "\`$lib' is not a valid libtool archive"
+		  func_fatal_error "'$lib' is not a valid libtool archive"
 		func_append newdlfiles " ${lt_sysroot:+=}$libdir/$name"
 		;;
 	      *) func_append newdlfiles " $lib" ;;
 	      esac
 	    done
-	    dlfiles="$newdlfiles"
+	    dlfiles=$newdlfiles
 	    newdlprefiles=
 	    for lib in $dlprefiles; do
 	      case $lib in
@@ -9330,34 +10827,34 @@
 		# didn't already link the preopened objects directly into
 		# the library:
 		func_basename "$lib"
-		name="$func_basename_result"
-		eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib`
+		name=$func_basename_result
+		eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $lib`
 		test -z "$libdir" && \
-		  func_fatal_error "\`$lib' is not a valid libtool archive"
+		  func_fatal_error "'$lib' is not a valid libtool archive"
 		func_append newdlprefiles " ${lt_sysroot:+=}$libdir/$name"
 		;;
 	      esac
 	    done
-	    dlprefiles="$newdlprefiles"
+	    dlprefiles=$newdlprefiles
 	  else
 	    newdlfiles=
 	    for lib in $dlfiles; do
 	      case $lib in
-		[\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;;
+		[\\/]* | [A-Za-z]:[\\/]*) abs=$lib ;;
 		*) abs=`pwd`"/$lib" ;;
 	      esac
 	      func_append newdlfiles " $abs"
 	    done
-	    dlfiles="$newdlfiles"
+	    dlfiles=$newdlfiles
 	    newdlprefiles=
 	    for lib in $dlprefiles; do
 	      case $lib in
-		[\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;;
+		[\\/]* | [A-Za-z]:[\\/]*) abs=$lib ;;
 		*) abs=`pwd`"/$lib" ;;
 	      esac
 	      func_append newdlprefiles " $abs"
 	    done
-	    dlprefiles="$newdlprefiles"
+	    dlprefiles=$newdlprefiles
 	  fi
 	  $RM $output
 	  # place dlname in correct position for cygwin
@@ -9373,10 +10870,9 @@
 	  case $host,$output,$installed,$module,$dlname in
 	    *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll | *cegcc*,*lai,yes,no,*.dll)
 	      # If a -bindir argument was supplied, place the dll there.
-	      if test "x$bindir" != x ;
-	      then
+	      if test -n "$bindir"; then
 		func_relative_path "$install_libdir" "$bindir"
-		tdlname=$func_relative_path_result$dlname
+		tdlname=$func_relative_path_result/$dlname
 	      else
 		# Otherwise fall back on heuristic.
 		tdlname=../bin/$dlname
@@ -9385,7 +10881,7 @@
 	  esac
 	  $ECHO > $output "\
 # $outputname - a libtool library file
-# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION
+# Generated by $PROGRAM (GNU $PACKAGE) $VERSION
 #
 # Please DO NOT delete this file!
 # It is necessary for linking the library.
@@ -9399,7 +10895,7 @@
 # The name of the static archive.
 old_library='$old_library'
 
-# Linker flags that can not go in dependency_libs.
+# Linker flags that cannot go in dependency_libs.
 inherited_linker_flags='$new_inherited_linker_flags'
 
 # Libraries that this one depends upon.
@@ -9425,7 +10921,7 @@
 
 # Directory that this library needs to be installed in:
 libdir='$install_libdir'"
-	  if test "$installed" = no && test "$need_relink" = yes; then
+	  if test no,yes = "$installed,$need_relink"; then
 	    $ECHO >> $output "\
 relink_command=\"$relink_command\""
 	  fi
@@ -9440,27 +10936,29 @@
     exit $EXIT_SUCCESS
 }
 
-{ test "$opt_mode" = link || test "$opt_mode" = relink; } &&
-    func_mode_link ${1+"$@"}
+if test link = "$opt_mode" || test relink = "$opt_mode"; then
+  func_mode_link ${1+"$@"}
+fi
 
 
 # func_mode_uninstall arg...
 func_mode_uninstall ()
 {
-    $opt_debug
-    RM="$nonopt"
+    $debug_cmd
+
+    RM=$nonopt
     files=
-    rmforce=
+    rmforce=false
     exit_status=0
 
     # This variable tells wrapper scripts just to set variables rather
     # than running their programs.
-    libtool_install_magic="$magic"
+    libtool_install_magic=$magic
 
     for arg
     do
       case $arg in
-      -f) func_append RM " $arg"; rmforce=yes ;;
+      -f) func_append RM " $arg"; rmforce=: ;;
       -*) func_append RM " $arg" ;;
       *) func_append files " $arg" ;;
       esac
@@ -9473,18 +10971,18 @@
 
     for file in $files; do
       func_dirname "$file" "" "."
-      dir="$func_dirname_result"
-      if test "X$dir" = X.; then
-	odir="$objdir"
+      dir=$func_dirname_result
+      if test . = "$dir"; then
+	odir=$objdir
       else
-	odir="$dir/$objdir"
+	odir=$dir/$objdir
       fi
       func_basename "$file"
-      name="$func_basename_result"
-      test "$opt_mode" = uninstall && odir="$dir"
+      name=$func_basename_result
+      test uninstall = "$opt_mode" && odir=$dir
 
       # Remember odir for removal later, being careful to avoid duplicates
-      if test "$opt_mode" = clean; then
+      if test clean = "$opt_mode"; then
 	case " $rmdirs " in
 	  *" $odir "*) ;;
 	  *) func_append rmdirs " $odir" ;;
@@ -9499,11 +10997,11 @@
       elif test -d "$file"; then
 	exit_status=1
 	continue
-      elif test "$rmforce" = yes; then
+      elif $rmforce; then
 	continue
       fi
 
-      rmfiles="$file"
+      rmfiles=$file
 
       case $name in
       *.la)
@@ -9517,7 +11015,7 @@
 	  done
 	  test -n "$old_library" && func_append rmfiles " $odir/$old_library"
 
-	  case "$opt_mode" in
+	  case $opt_mode in
 	  clean)
 	    case " $library_names " in
 	    *" $dlname "*) ;;
@@ -9528,12 +11026,12 @@
 	  uninstall)
 	    if test -n "$library_names"; then
 	      # Do each command in the postuninstall commands.
-	      func_execute_cmds "$postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1'
+	      func_execute_cmds "$postuninstall_cmds" '$rmforce || exit_status=1'
 	    fi
 
 	    if test -n "$old_library"; then
 	      # Do each command in the old_postuninstall commands.
-	      func_execute_cmds "$old_postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1'
+	      func_execute_cmds "$old_postuninstall_cmds" '$rmforce || exit_status=1'
 	    fi
 	    # FIXME: should reinstall the best remaining shared library.
 	    ;;
@@ -9549,21 +11047,19 @@
 	  func_source $dir/$name
 
 	  # Add PIC object to the list of files to remove.
-	  if test -n "$pic_object" &&
-	     test "$pic_object" != none; then
+	  if test -n "$pic_object" && test none != "$pic_object"; then
 	    func_append rmfiles " $dir/$pic_object"
 	  fi
 
 	  # Add non-PIC object to the list of files to remove.
-	  if test -n "$non_pic_object" &&
-	     test "$non_pic_object" != none; then
+	  if test -n "$non_pic_object" && test none != "$non_pic_object"; then
 	    func_append rmfiles " $dir/$non_pic_object"
 	  fi
 	fi
 	;;
 
       *)
-	if test "$opt_mode" = clean ; then
+	if test clean = "$opt_mode"; then
 	  noexename=$name
 	  case $file in
 	  *.exe)
@@ -9590,12 +11086,12 @@
 
 	    # note $name still contains .exe if it was in $file originally
 	    # as does the version of $file that was added into $rmfiles
-	    func_append rmfiles " $odir/$name $odir/${name}S.${objext}"
-	    if test "$fast_install" = yes && test -n "$relink_command"; then
+	    func_append rmfiles " $odir/$name $odir/${name}S.$objext"
+	    if test yes = "$fast_install" && test -n "$relink_command"; then
 	      func_append rmfiles " $odir/lt-$name"
 	    fi
-	    if test "X$noexename" != "X$name" ; then
-	      func_append rmfiles " $odir/lt-${noexename}.c"
+	    if test "X$noexename" != "X$name"; then
+	      func_append rmfiles " $odir/lt-$noexename.c"
 	    fi
 	  fi
 	fi
@@ -9604,7 +11100,7 @@
       func_show_eval "$RM $rmfiles" 'exit_status=1'
     done
 
-    # Try to remove the ${objdir}s in the directories where we deleted files
+    # Try to remove the $objdir's in the directories where we deleted files
     for dir in $rmdirs; do
       if test -d "$dir"; then
 	func_show_eval "rmdir $dir >/dev/null 2>&1"
@@ -9614,16 +11110,17 @@
     exit $exit_status
 }
 
-{ test "$opt_mode" = uninstall || test "$opt_mode" = clean; } &&
-    func_mode_uninstall ${1+"$@"}
+if test uninstall = "$opt_mode" || test clean = "$opt_mode"; then
+  func_mode_uninstall ${1+"$@"}
+fi
 
 test -z "$opt_mode" && {
-  help="$generic_help"
+  help=$generic_help
   func_fatal_help "you must specify a MODE"
 }
 
 test -z "$exec_cmd" && \
-  func_fatal_help "invalid operation mode \`$opt_mode'"
+  func_fatal_help "invalid operation mode '$opt_mode'"
 
 if test -n "$exec_cmd"; then
   eval exec "$exec_cmd"
@@ -9634,7 +11131,7 @@
 
 
 # The TAGs below are defined such that we never get into a situation
-# in which we disable both kinds of libraries.  Given conflicting
+# where we disable both kinds of libraries.  Given conflicting
 # choices, we go for a static library, that is the most portable,
 # since we can't tell whether shared libraries were disabled because
 # the user asked for that or because the platform doesn't support
@@ -9657,5 +11154,3 @@
 # mode:shell-script
 # sh-indentation:2
 # End:
-# vi:sw=2
-
diff --git a/m4/Makefile.am b/m4/Makefile.am
index d4e7893..95a6641 100644
--- a/m4/Makefile.am
+++ b/m4/Makefile.am
@@ -18,7 +18,6 @@
 	inttypes_h.m4 \
 	inttypes-pri.m4 \
 	lcmessage.m4 \
-	libfame.m4 \
 	lib-ld.m4 \
 	lib-link.m4 \
 	libmikmod.m4 \
diff --git a/m4/Makefile.in b/m4/Makefile.in
index 6941d86..43dfc53 100644
--- a/m4/Makefile.in
+++ b/m4/Makefile.in
@@ -114,16 +114,15 @@
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
 	$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
-	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gsettings.m4 \
-	$(top_srcdir)/m4/gst-fionread.m4 $(top_srcdir)/m4/gst-sdl.m4 \
-	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
-	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
-	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libgcrypt.m4 \
-	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
-	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
-	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
-	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
-	$(top_srcdir)/configure.ac
+	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gst-fionread.m4 \
+	$(top_srcdir)/m4/gst-sdl.m4 $(top_srcdir)/m4/iconv.m4 \
+	$(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \
+	$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
+	$(top_srcdir)/m4/libgcrypt.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
+	$(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
@@ -188,6 +187,8 @@
 CLUTTER_X11_LIBS = @CLUTTER_X11_LIBS@
 CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
+CUDA_CFLAGS = @CUDA_CFLAGS@
+CUDA_LIBS = @CUDA_LIBS@
 CURL_CFLAGS = @CURL_CFLAGS@
 CURL_LIBS = @CURL_LIBS@
 CXX = @CXX@
@@ -225,6 +226,8 @@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
+EGL_CFLAGS = @EGL_CFLAGS@
+EGL_LIBS = @EGL_LIBS@
 EGREP = @EGREP@
 ERROR_CFLAGS = @ERROR_CFLAGS@
 ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
@@ -233,7 +236,6 @@
 EXIF_CFLAGS = @EXIF_CFLAGS@
 EXIF_LIBS = @EXIF_LIBS@
 FAAC_LIBS = @FAAC_LIBS@
-FAAD_IS_NEAAC = @FAAD_IS_NEAAC@
 FAAD_LIBS = @FAAD_LIBS@
 FFLAGS = @FFLAGS@
 FGREP = @FGREP@
@@ -252,8 +254,9 @@
 GIO_LIBS = @GIO_LIBS@
 GIO_UNIX_CFLAGS = @GIO_UNIX_CFLAGS@
 GIO_UNIX_LIBS = @GIO_UNIX_LIBS@
+GLES2_CFLAGS = @GLES2_CFLAGS@
+GLES2_LIBS = @GLES2_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
-GLIB_COMPILE_SCHEMAS = @GLIB_COMPILE_SCHEMAS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
@@ -270,16 +273,17 @@
 GMODULE_NO_EXPORT_LIBS = @GMODULE_NO_EXPORT_LIBS@
 GMSGFMT = @GMSGFMT@
 GMSGFMT_015 = @GMSGFMT_015@
+GNUSTL_CFLAGS = @GNUSTL_CFLAGS@
+GNUSTL_LIBS = @GNUSTL_LIBS@
 GRAPHENE_CFLAGS = @GRAPHENE_CFLAGS@
 GRAPHENE_LIBS = @GRAPHENE_LIBS@
 GREP = @GREP@
-GSETTINGS_CFLAGS = @GSETTINGS_CFLAGS@
-GSETTINGS_DISABLE_SCHEMAS_COMPILE = @GSETTINGS_DISABLE_SCHEMAS_COMPILE@
-GSETTINGS_LIBS = @GSETTINGS_LIBS@
 GSM_LIBS = @GSM_LIBS@
 GSTPB_PLUGINS_DIR = @GSTPB_PLUGINS_DIR@
 GSTPB_PREFIX = @GSTPB_PREFIX@
 GST_AGE = @GST_AGE@
+GST_ALLOCATORS_CFLAGS = @GST_ALLOCATORS_CFLAGS@
+GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
 GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
 GST_API_VERSION = @GST_API_VERSION@
 GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
@@ -305,6 +309,8 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PBUTILS_CFLAGS = @GST_PBUTILS_CFLAGS@
+GST_PBUTILS_LIBS = @GST_PBUTILS_LIBS@
 GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BAD_CFLAGS = @GST_PLUGINS_BAD_CFLAGS@
@@ -330,6 +336,8 @@
 GST_PREFIX = @GST_PREFIX@
 GST_REVISION = @GST_REVISION@
 GST_TOOLS_DIR = @GST_TOOLS_DIR@
+GST_VIDEO_CFLAGS = @GST_VIDEO_CFLAGS@
+GST_VIDEO_LIBS = @GST_VIDEO_LIBS@
 GTK3_CFLAGS = @GTK3_CFLAGS@
 GTK3_GL_CFLAGS = @GTK3_GL_CFLAGS@
 GTK3_GL_LIBS = @GTK3_GL_LIBS@
@@ -431,6 +439,7 @@
 LTLIBICONV = @LTLIBICONV@
 LTLIBINTL = @LTLIBINTL@
 LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
 MANIFEST_TOOL = @MANIFEST_TOOL@
@@ -444,8 +453,6 @@
 MODPLUG_LIBS = @MODPLUG_LIBS@
 MPEG2ENC_CFLAGS = @MPEG2ENC_CFLAGS@
 MPEG2ENC_LIBS = @MPEG2ENC_LIBS@
-MPG123_CFLAGS = @MPG123_CFLAGS@
-MPG123_LIBS = @MPG123_LIBS@
 MPLEX_CFLAGS = @MPLEX_CFLAGS@
 MPLEX_LDFLAGS = @MPLEX_LDFLAGS@
 MPLEX_LIBS = @MPLEX_LIBS@
@@ -461,6 +468,8 @@
 NETTLE_LIBS = @NETTLE_LIBS@
 NM = @NM@
 NMEDIT = @NMEDIT@
+NVENCODE_CFLAGS = @NVENCODE_CFLAGS@
+NVENCODE_LIBS = @NVENCODE_LIBS@
 OBJC = @OBJC@
 OBJCDEPMODE = @OBJCDEPMODE@
 OBJCFLAGS = @OBJCFLAGS@
@@ -518,16 +527,18 @@
 PYTHON_PLATFORM = @PYTHON_PLATFORM@
 PYTHON_PREFIX = @PYTHON_PREFIX@
 PYTHON_VERSION = @PYTHON_VERSION@
+QT_ANDROID_CFLAGS = @QT_ANDROID_CFLAGS@
+QT_ANDROID_LIBS = @QT_ANDROID_LIBS@
 QT_CFLAGS = @QT_CFLAGS@
 QT_LIBS = @QT_LIBS@
+QT_MAC_CFLAGS = @QT_MAC_CFLAGS@
+QT_MAC_LIBS = @QT_MAC_LIBS@
 QT_WAYLAND_CFLAGS = @QT_WAYLAND_CFLAGS@
 QT_WAYLAND_LIBS = @QT_WAYLAND_LIBS@
 QT_X11_CFLAGS = @QT_X11_CFLAGS@
 QT_X11_LIBS = @QT_X11_LIBS@
 RANLIB = @RANLIB@
 RCC = @RCC@
-RSVG_2_36_2_CFLAGS = @RSVG_2_36_2_CFLAGS@
-RSVG_2_36_2_LIBS = @RSVG_2_36_2_LIBS@
 RSVG_CFLAGS = @RSVG_CFLAGS@
 RSVG_LIBS = @RSVG_LIBS@
 RTMP_CFLAGS = @RTMP_CFLAGS@
@@ -579,6 +590,7 @@
 VOAACENC_LIBS = @VOAACENC_LIBS@
 VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
 VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VULKAN_LIBS = @VULKAN_LIBS@
 WARNING_CFLAGS = @WARNING_CFLAGS@
 WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
 WARNING_OBJCFLAGS = @WARNING_OBJCFLAGS@
@@ -589,6 +601,7 @@
 WAYLAND_LIBS = @WAYLAND_LIBS@
 WEBP_CFLAGS = @WEBP_CFLAGS@
 WEBP_LIBS = @WEBP_LIBS@
+WGET = @WGET@
 WILDMIDI_CFLAGS = @WILDMIDI_CFLAGS@
 WILDMIDI_LIBS = @WILDMIDI_LIBS@
 WINKS_LIBS = @WINKS_LIBS@
@@ -598,6 +611,8 @@
 X11_LIBS = @X11_LIBS@
 X265_CFLAGS = @X265_CFLAGS@
 X265_LIBS = @X265_LIBS@
+XCB_CFLAGS = @XCB_CFLAGS@
+XCB_LIBS = @XCB_LIBS@
 XCOMPOSITE_CFLAGS = @XCOMPOSITE_CFLAGS@
 XCOMPOSITE_LIBS = @XCOMPOSITE_LIBS@
 XGETTEXT = @XGETTEXT@
@@ -635,7 +650,6 @@
 docdir = @docdir@
 dvidir = @dvidir@
 exec_prefix = @exec_prefix@
-gsettingsschemadir = @gsettingsschemadir@
 host = @host@
 host_alias = @host_alias@
 host_cpu = @host_cpu@
@@ -695,7 +709,6 @@
 	inttypes_h.m4 \
 	inttypes-pri.m4 \
 	lcmessage.m4 \
-	libfame.m4 \
 	lib-ld.m4 \
 	lib-link.m4 \
 	libmikmod.m4 \
diff --git a/m4/gsettings.m4 b/m4/gsettings.m4
deleted file mode 100644
index 429d04b..0000000
--- a/m4/gsettings.m4
+++ /dev/null
@@ -1,83 +0,0 @@
-dnl GLIB_GSETTINGS
-dnl Defines GSETTINGS_SCHEMAS_INSTALL which controls whether
-dnl the schema should be compiled
-dnl
-
-AC_DEFUN([GLIB_GSETTINGS],
-[
-  m4_pattern_allow([AM_V_GEN])
-  AC_ARG_ENABLE(schemas-compile,
-                AC_HELP_STRING([--disable-schemas-compile],
-                               [Disable regeneration of gschemas.compiled on install]),
-                [case ${enableval} in
-                  yes) GSETTINGS_DISABLE_SCHEMAS_COMPILE=""  ;;
-                  no)  GSETTINGS_DISABLE_SCHEMAS_COMPILE="1" ;;
-                  *) AC_MSG_ERROR([bad value ${enableval} for --enable-schemas-compile]) ;;
-                 esac])
-  AC_SUBST([GSETTINGS_DISABLE_SCHEMAS_COMPILE])
-  PKG_PROG_PKG_CONFIG([0.16])
-  AC_SUBST(gsettingsschemadir, [${datadir}/glib-2.0/schemas])
-  if test x$cross_compiling != xyes; then
-    GLIB_COMPILE_SCHEMAS=`$PKG_CONFIG --variable glib_compile_schemas gio-2.0`
-  else
-    AC_PATH_PROG(GLIB_COMPILE_SCHEMAS, glib-compile-schemas)
-  fi
-  AC_SUBST(GLIB_COMPILE_SCHEMAS)
-  if test "x$GLIB_COMPILE_SCHEMAS" = "x"; then
-    ifelse([$2],,[AC_MSG_ERROR([glib-compile-schemas not found.])],[$2])
-  else
-    ifelse([$1],,[:],[$1])
-  fi
-
-  GSETTINGS_RULES='
-.PHONY : uninstall-gsettings-schemas install-gsettings-schemas clean-gsettings-schemas
-
-mostlyclean-am: clean-gsettings-schemas
-
-gsettings__enum_file = $(addsuffix .enums.xml,$(gsettings_ENUM_NAMESPACE))
-
-%.gschema.valid: %.gschema.xml $(gsettings__enum_file)
-	$(AM_V_GEN) if test -f "$<"; then d=; else d="$(srcdir)/"; fi; $(GLIB_COMPILE_SCHEMAS) --strict --dry-run $(addprefix --schema-file=,$(gsettings__enum_file)) --schema-file=$${d}$< && touch [$]@
-
-all-am: $(gsettings_SCHEMAS:.xml=.valid)
-uninstall-am: uninstall-gsettings-schemas
-install-data-am: install-gsettings-schemas
-
-.SECONDARY: $(gsettings_SCHEMAS)
-
-install-gsettings-schemas: $(gsettings_SCHEMAS) $(gsettings__enum_file)
-	@$(NORMAL_INSTALL)
-	if test -n "$^"; then \
-		test -z "$(gsettingsschemadir)" || $(MKDIR_P) "$(DESTDIR)$(gsettingsschemadir)"; \
-		$(INSTALL_DATA) $^ "$(DESTDIR)$(gsettingsschemadir)"; \
-		test -n "$(GSETTINGS_DISABLE_SCHEMAS_COMPILE)$(DESTDIR)" || $(GLIB_COMPILE_SCHEMAS) $(gsettingsschemadir); \
-	fi
-
-uninstall-gsettings-schemas:
-	@$(NORMAL_UNINSTALL)
-	@list='\''$(gsettings_SCHEMAS) $(gsettings__enum_file)'\''; test -n "$(gsettingsschemadir)" || list=; \
-	files=`for p in $$list; do echo $$p; done | sed -e '\''s|^.*/||'\''`; \
-	test -n "$$files" || exit 0; \
-	echo " ( cd '\''$(DESTDIR)$(gsettingsschemadir)'\'' && rm -f" $$files ")"; \
-	cd "$(DESTDIR)$(gsettingsschemadir)" && rm -f $$files
-	test -n "$(GSETTINGS_DISABLE_SCHEMAS_COMPILE)$(DESTDIR)" || $(GLIB_COMPILE_SCHEMAS) $(gsettingsschemadir)
-
-clean-gsettings-schemas:
-	rm -f $(gsettings_SCHEMAS:.xml=.valid) $(gsettings__enum_file)
-
-ifdef gsettings_ENUM_NAMESPACE
-$(gsettings__enum_file): $(gsettings_ENUM_FILES)
-	$(AM_V_GEN) glib-mkenums --comments '\''<!-- @comment@ -->'\'' --fhead "<schemalist>" --vhead "  <@type@ id='\''$(gsettings_ENUM_NAMESPACE).@EnumName@'\''>" --vprod "    <value nick='\''@valuenick@'\'' value='\''@valuenum@'\''/>" --vtail "  </@type@>" --ftail "</schemalist>" [$]^ > [$]@.tmp && mv [$]@.tmp [$]@
-endif
-'
-  _GSETTINGS_SUBST(GSETTINGS_RULES)
-])
-
-dnl _GSETTINGS_SUBST(VARIABLE)
-dnl Abstract macro to do either _AM_SUBST_NOTMAKE or AC_SUBST
-AC_DEFUN([_GSETTINGS_SUBST],
-[
-AC_SUBST([$1])
-m4_ifdef([_AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE([$1])])
-]
-)
diff --git a/m4/libfame.m4 b/m4/libfame.m4
deleted file mode 100644
index b570584..0000000
--- a/m4/libfame.m4
+++ /dev/null
@@ -1,182 +0,0 @@
-dnl AM_PATH_LIBFAME([MINIMUM-VERSION, [ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND [, MODULES]]]])
-dnl Test for libfame, and define LIBFAME_CFLAGS and LIBFAME_LIBS
-dnl Vivien Chappelier 12/11/00
-dnl stolen from ORBit autoconf
-dnl
-AC_DEFUN([AM_PATH_LIBFAME],
-[dnl 
-dnl Get the cflags and libraries from the libfame-config script
-dnl
-AC_ARG_WITH(libfame-prefix,[  --with-libfame-prefix=PFX   Prefix where libfame is installed (optional)],
-            libfame_config_prefix="$withval", libfame_config_prefix="")
-AC_ARG_WITH(libfame-exec-prefix,[  --with-libfame-exec-prefix=PFX Exec prefix where libfame is installed (optional)],
-            libfame_config_exec_prefix="$withval", libfame_config_exec_prefix="")
-AC_ARG_ENABLE(libfametest, [  --disable-libfametest       Do not try to compile and run a test libfame program],
-		    , enable_libfametest=yes)
-
-  if test x$libfame_config_exec_prefix != x ; then
-     libfame_config_args="$libfame_config_args --exec-prefix=$libfame_config_exec_prefix"
-     if test x${LIBFAME_CONFIG+set} != xset ; then
-        LIBFAME_CONFIG=$libfame_config_exec_prefix/bin/libfame-config
-     fi
-  fi
-  if test x$libfame_config_prefix != x ; then
-     libfame_config_args="$libfame_config_args --prefix=$libfame_config_prefix"
-     if test x${LIBFAME_CONFIG+set} != xset ; then
-        LIBFAME_CONFIG=$libfame_config_prefix/bin/libfame-config
-     fi
-  fi
-
-  AC_PATH_PROG(LIBFAME_CONFIG, libfame-config, no)
-  min_libfame_version=ifelse([$1], , 0.9.0, $1)
-  AC_MSG_CHECKING(for libfame - version >= $min_libfame_version)
-  no_libfame=""
-  if test "$LIBFAME_CONFIG" = "no" ; then
-    no_libfame=yes
-  else
-    LIBFAME_CFLAGS=`$LIBFAME_CONFIG $libfame_config_args --cflags`
-    LIBFAME_LIBS=`$LIBFAME_CONFIG $libfame_config_args --libs`
-    libfame_config_major_version=`$LIBFAME_CONFIG $libfame_config_args --version | \
-	   sed -e 's,[[^0-9.]],,g' -e 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\1/'`
-    libfame_config_minor_version=`$LIBFAME_CONFIG $libfame_config_args --version | \
-	   sed -e 's,[[^0-9.]],,g' -e 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\2/'`
-    libfame_config_micro_version=`$LIBFAME_CONFIG $libfame_config_args --version | \
-	   sed -e 's,[[^0-9.]],,g' -e 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\3/'`
-    if test "x$enable_libfametest" = "xyes" ; then
-      ac_save_CFLAGS="$CFLAGS"
-      ac_save_LIBS="$LIBS"
-      CFLAGS="$CFLAGS $LIBFAME_CFLAGS"
-      LIBS="$LIBFAME_LIBS $LIBS"
-dnl
-dnl Now check if the installed LIBFAME is sufficiently new. (Also sanity
-dnl checks the results of libfame-config to some extent
-dnl
-      rm -f conf.libfametest
-      AC_TRY_RUN([
-#include <fame.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-int 
-main ()
-{
-  int major, minor, micro;
-  char *tmp_version;
-
-  system ("touch conf.libfametest");
-
-  /* HP/UX 9 (%@#!) writes to sscanf strings */
-  tmp_version = strdup("$min_libfame_version");
-  if (sscanf(tmp_version, "%d.%d.%d", &major, &minor, &micro) != 3) {
-     printf("%s, bad version string\n", "$min_libfame_version");
-     exit(1);
-   }
-
-  if ((libfame_major_version != $libfame_config_major_version) ||
-      (libfame_minor_version != $libfame_config_minor_version) ||
-      (libfame_micro_version != $libfame_config_micro_version))
-    {
-      printf("\n*** 'libfame-config --version' returned %d.%d.%d, but Libfame (%d.%d.%d)\n", 
-             $libfame_config_major_version, $libfame_config_minor_version, $libfame_config_micro_version,
-             libfame_major_version, libfame_minor_version, libfame_micro_version);
-      printf ("*** was found! If libfame-config was correct, then it is best\n");
-      printf ("*** to remove the old version of libfame. You may also be able to fix the error\n");
-      printf("*** by modifying your LD_LIBRARY_PATH enviroment variable, or by editing\n");
-      printf("*** /etc/ld.so.conf. Make sure you have run ldconfig if that is\n");
-      printf("*** required on your system.\n");
-      printf("*** If libfame-config was wrong, set the environment variable LIBFAME_CONFIG\n");
-      printf("*** to point to the correct copy of libfame-config, and remove the file config.cache\n");
-      printf("*** before re-running configure\n");
-    } 
-#if defined (LIBFAME_MAJOR_VERSION) && defined (LIBFAME_MINOR_VERSION) && defined (LIBFAME_MICRO_VERSION)
-  else if ((libfame_major_version != LIBFAME_MAJOR_VERSION) ||
-	   (libfame_minor_version != LIBFAME_MINOR_VERSION) ||
-           (libfame_micro_version != LIBFAME_MICRO_VERSION))
-    {
-      printf("*** libfame header files (version %d.%d.%d) do not match\n",
-	     LIBFAME_MAJOR_VERSION, LIBFAME_MINOR_VERSION, LIBFAME_MICRO_VERSION);
-      printf("*** library (version %d.%d.%d)\n",
-	     libfame_major_version, libfame_minor_version, libfame_micro_version);
-    }
-#endif /* defined (LIBFAME_MAJOR_VERSION) ... */
-  else
-    {
-      if ((libfame_major_version > major) ||
-        ((libfame_major_version == major) && (libfame_minor_version > minor)) ||
-        ((libfame_major_version == major) && (libfame_minor_version == minor) && (libfame_micro_version >= micro)))
-      {
-        return 0;
-       }
-     else
-      {
-        printf("\n*** An old version of libfame (%d.%d.%d) was found.\n",
-               libfame_major_version, libfame_minor_version, libfame_micro_version);
-        printf("*** You need a version of libfame newer than %d.%d.%d. The latest version of\n",
-	       major, minor, micro);
-        printf("*** libfame is always available from http://www-eleves.enst-bretagne.fr/~chappeli/fame\n");
-        printf("***\n");
-        printf("*** If you have already installed a sufficiently new version, this error\n");
-        printf("*** probably means that the wrong copy of the libfame-config shell script is\n");
-        printf("*** being found. The easiest way to fix this is to remove the old version\n");
-        printf("*** of libfame, but you can also set the LIBFAME_CONFIG environment to point to the\n");
-        printf("*** correct copy of libfame-config. (In this case, you will have to\n");
-        printf("*** modify your LD_LIBRARY_PATH enviroment variable, or edit /etc/ld.so.conf\n");
-        printf("*** so that the correct libraries are found at run-time))\n");
-      }
-    }
-  return 1;
-}
-],, no_libfame=yes,[echo $ac_n "cross compiling; assumed OK... $ac_c"])
-       CFLAGS="$ac_save_CFLAGS"
-       LIBS="$ac_save_LIBS"
-     fi
-  fi
-  if test "x$no_libfame" = x ; then
-     AC_MSG_RESULT(yes)
-     ifelse([$2], , :, [$2])     
-  else
-     AC_MSG_RESULT(no)
-     if test "$LIBFAME_CONFIG" = "no" ; then
-       echo "*** The libfame-config script installed by libfame could not be found"
-       echo "*** If libfame was installed in PREFIX, make sure PREFIX/bin is in"
-       echo "*** your path, or set the LIBFAME_CONFIG environment variable to the"
-       echo "*** full path to libfame-config."
-     else
-       if test -f conf.libfametest ; then
-        :
-       else
-          echo "*** Could not run libfame test program, checking why..."
-          CFLAGS="$CFLAGS $LIBFAME_CFLAGS"
-          LIBS="$LIBS $LIBFAME_LIBS"
-          AC_TRY_LINK([
-#include <fame.h>
-#include <stdio.h>
-],      [ return ((libfame_major_version) || (libfame_minor_version) || (libfame_micro_version)); ],
-        [ echo "*** The test program compiled, but did not run. This usually means"
-          echo "*** that the run-time linker is not finding libfame or finding the wrong"
-          echo "*** version of LIBFAME. If it is not finding libfame, you'll need to set your"
-          echo "*** LD_LIBRARY_PATH environment variable, or edit /etc/ld.so.conf to point"
-          echo "*** to the installed location  Also, make sure you have run ldconfig if that"
-          echo "*** is required on your system"
-	  echo "***"
-          echo "*** If you have an old version installed, it is best to remove it, although"
-          echo "*** you may also be able to get things to work by modifying LD_LIBRARY_PATH"
-          echo "***" ],
-        [ echo "*** The test program failed to compile or link. See the file config.log for the"
-          echo "*** exact error that occured. This usually means libfame was incorrectly installed"
-          echo "*** or that you have moved libfame since it was installed. In the latter case, you"
-          echo "*** may want to edit the libfame-config script: $LIBFAME_CONFIG" ])
-          CFLAGS="$ac_save_CFLAGS"
-          LIBS="$ac_save_LIBS"
-       fi
-     fi
-     LIBFAME_CFLAGS=""
-     LIBFAME_LIBS=""
-     ifelse([$3], , :, [$3])
-  fi
-
-  AC_SUBST(LIBFAME_CFLAGS)
-  AC_SUBST(LIBFAME_LIBS)
-  rm -f conf.libfametest
-])
diff --git a/m4/libtool.m4 b/m4/libtool.m4
index d7c043f..10ab284 100644
--- a/m4/libtool.m4
+++ b/m4/libtool.m4
@@ -1,8 +1,6 @@
 # libtool.m4 - Configure libtool for the host system. -*-Autoconf-*-
 #
-#   Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005,
-#                 2006, 2007, 2008, 2009, 2010, 2011 Free Software
-#                 Foundation, Inc.
+#   Copyright (C) 1996-2001, 2003-2015 Free Software Foundation, Inc.
 #   Written by Gordon Matzigkeit, 1996
 #
 # This file is free software; the Free Software Foundation gives
@@ -10,36 +8,30 @@
 # modifications, as long as this notice is preserved.
 
 m4_define([_LT_COPYING], [dnl
-#   Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005,
-#                 2006, 2007, 2008, 2009, 2010, 2011 Free Software
-#                 Foundation, Inc.
-#   Written by Gordon Matzigkeit, 1996
+# Copyright (C) 2014 Free Software Foundation, Inc.
+# This is free software; see the source for copying conditions.  There is NO
+# warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+
+# GNU Libtool is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of of the License, or
+# (at your option) any later version.
 #
-#   This file is part of GNU Libtool.
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program or library that is built
+# using GNU Libtool, you may include this file under the  same
+# distribution terms that you use for the rest of that program.
 #
-# GNU Libtool is free software; you can redistribute it and/or
-# modify it under the terms of the GNU General Public License as
-# published by the Free Software Foundation; either version 2 of
-# the License, or (at your option) any later version.
-#
-# As a special exception to the GNU General Public License,
-# if you distribute this file as part of a program or library that
-# is built using GNU Libtool, you may include this file under the
-# same distribution terms that you use for the rest of that program.
-#
-# GNU Libtool is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# GNU Libtool is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 # GNU General Public License for more details.
 #
 # You should have received a copy of the GNU General Public License
-# along with GNU Libtool; see the file COPYING.  If not, a copy
-# can be downloaded from http://www.gnu.org/licenses/gpl.html, or
-# obtained by writing to the Free Software Foundation, Inc.,
-# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
 ])
 
-# serial 57 LT_INIT
+# serial 58 LT_INIT
 
 
 # LT_PREREQ(VERSION)
@@ -67,7 +59,7 @@
 # LT_INIT([OPTIONS])
 # ------------------
 AC_DEFUN([LT_INIT],
-[AC_PREREQ([2.58])dnl We use AC_INCLUDES_DEFAULT
+[AC_PREREQ([2.62])dnl We use AC_PATH_PROGS_FEATURE_CHECK
 AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT])dnl
 AC_BEFORE([$0], [LT_LANG])dnl
 AC_BEFORE([$0], [LT_OUTPUT])dnl
@@ -91,7 +83,7 @@
 _LT_SET_OPTIONS([$0], [$1])
 
 # This can be used to rebuild libtool when needed
-LIBTOOL_DEPS="$ltmain"
+LIBTOOL_DEPS=$ltmain
 
 # Always use our own libtool.
 LIBTOOL='$(SHELL) $(top_builddir)/libtool'
@@ -111,26 +103,43 @@
 dnl AC_DEFUN([AM_PROG_LIBTOOL], [])
 
 
+# _LT_PREPARE_CC_BASENAME
+# -----------------------
+m4_defun([_LT_PREPARE_CC_BASENAME], [
+# Calculate cc_basename.  Skip known compiler wrappers and cross-prefix.
+func_cc_basename ()
+{
+    for cc_temp in @S|@*""; do
+      case $cc_temp in
+        compile | *[[\\/]]compile | ccache | *[[\\/]]ccache ) ;;
+        distcc | *[[\\/]]distcc | purify | *[[\\/]]purify ) ;;
+        \-*) ;;
+        *) break;;
+      esac
+    done
+    func_cc_basename_result=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"`
+}
+])# _LT_PREPARE_CC_BASENAME
+
+
 # _LT_CC_BASENAME(CC)
 # -------------------
-# Calculate cc_basename.  Skip known compiler wrappers and cross-prefix.
+# It would be clearer to call AC_REQUIREs from _LT_PREPARE_CC_BASENAME,
+# but that macro is also expanded into generated libtool script, which
+# arranges for $SED and $ECHO to be set by different means.
 m4_defun([_LT_CC_BASENAME],
-[for cc_temp in $1""; do
-  case $cc_temp in
-    compile | *[[\\/]]compile | ccache | *[[\\/]]ccache ) ;;
-    distcc | *[[\\/]]distcc | purify | *[[\\/]]purify ) ;;
-    \-*) ;;
-    *) break;;
-  esac
-done
-cc_basename=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"`
+[m4_require([_LT_PREPARE_CC_BASENAME])dnl
+AC_REQUIRE([_LT_DECL_SED])dnl
+AC_REQUIRE([_LT_PROG_ECHO_BACKSLASH])dnl
+func_cc_basename $1
+cc_basename=$func_cc_basename_result
 ])
 
 
 # _LT_FILEUTILS_DEFAULTS
 # ----------------------
 # It is okay to use these file commands and assume they have been set
-# sensibly after `m4_require([_LT_FILEUTILS_DEFAULTS])'.
+# sensibly after 'm4_require([_LT_FILEUTILS_DEFAULTS])'.
 m4_defun([_LT_FILEUTILS_DEFAULTS],
 [: ${CP="cp -f"}
 : ${MV="mv -f"}
@@ -177,15 +186,16 @@
 m4_require([_LT_CMD_OLD_ARCHIVE])dnl
 m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl
 m4_require([_LT_WITH_SYSROOT])dnl
+m4_require([_LT_CMD_TRUNCATE])dnl
 
 _LT_CONFIG_LIBTOOL_INIT([
-# See if we are running on zsh, and set the options which allow our
+# See if we are running on zsh, and set the options that allow our
 # commands through without removal of \ escapes INIT.
-if test -n "\${ZSH_VERSION+set}" ; then
+if test -n "\${ZSH_VERSION+set}"; then
    setopt NO_GLOB_SUBST
 fi
 ])
-if test -n "${ZSH_VERSION+set}" ; then
+if test -n "${ZSH_VERSION+set}"; then
    setopt NO_GLOB_SUBST
 fi
 
@@ -198,7 +208,7 @@
   # AIX sometimes has problems with the GCC collect2 program.  For some
   # reason, if we set the COLLECT_NAMES environment variable, the problems
   # vanish in a puff of smoke.
-  if test "X${COLLECT_NAMES+set}" != Xset; then
+  if test set != "${COLLECT_NAMES+set}"; then
     COLLECT_NAMES=
     export COLLECT_NAMES
   fi
@@ -209,14 +219,14 @@
 ofile=libtool
 can_build_shared=yes
 
-# All known linkers require a `.a' archive for static linking (except MSVC,
+# All known linkers require a '.a' archive for static linking (except MSVC,
 # which needs '.lib').
 libext=a
 
-with_gnu_ld="$lt_cv_prog_gnu_ld"
+with_gnu_ld=$lt_cv_prog_gnu_ld
 
-old_CC="$CC"
-old_CFLAGS="$CFLAGS"
+old_CC=$CC
+old_CFLAGS=$CFLAGS
 
 # Set sane defaults for various variables
 test -z "$CC" && CC=cc
@@ -269,14 +279,14 @@
 
 # _LT_PROG_LTMAIN
 # ---------------
-# Note that this code is called both from `configure', and `config.status'
+# Note that this code is called both from 'configure', and 'config.status'
 # now that we use AC_CONFIG_COMMANDS to generate libtool.  Notably,
-# `config.status' has no value for ac_aux_dir unless we are using Automake,
+# 'config.status' has no value for ac_aux_dir unless we are using Automake,
 # so we pass a copy along to make sure it has a sensible value anyway.
 m4_defun([_LT_PROG_LTMAIN],
 [m4_ifdef([AC_REQUIRE_AUX_FILE], [AC_REQUIRE_AUX_FILE([ltmain.sh])])dnl
 _LT_CONFIG_LIBTOOL_INIT([ac_aux_dir='$ac_aux_dir'])
-ltmain="$ac_aux_dir/ltmain.sh"
+ltmain=$ac_aux_dir/ltmain.sh
 ])# _LT_PROG_LTMAIN
 
 
@@ -286,7 +296,7 @@
 
 # So that we can recreate a full libtool script including additional
 # tags, we accumulate the chunks of code to send to AC_CONFIG_COMMANDS
-# in macros and then make a single call at the end using the `libtool'
+# in macros and then make a single call at the end using the 'libtool'
 # label.
 
 
@@ -421,8 +431,8 @@
 
 # _LT_CONFIG_STATUS_DECLARE([VARNAME])
 # ------------------------------------
-# Quote a variable value, and forward it to `config.status' so that its
-# declaration there will have the same value as in `configure'.  VARNAME
+# Quote a variable value, and forward it to 'config.status' so that its
+# declaration there will have the same value as in 'configure'.  VARNAME
 # must have a single quote delimited value for this to work.
 m4_define([_LT_CONFIG_STATUS_DECLARE],
 [$1='`$ECHO "$][$1" | $SED "$delay_single_quote_subst"`'])
@@ -446,7 +456,7 @@
 # Output comment and list of tags supported by the script
 m4_defun([_LT_LIBTOOL_TAGS],
 [_LT_FORMAT_COMMENT([The names of the tagged configurations supported by this script])dnl
-available_tags="_LT_TAGS"dnl
+available_tags='_LT_TAGS'dnl
 ])
 
 
@@ -474,7 +484,7 @@
 # _LT_LIBTOOL_CONFIG_VARS
 # -----------------------
 # Produce commented declarations of non-tagged libtool config variables
-# suitable for insertion in the LIBTOOL CONFIG section of the `libtool'
+# suitable for insertion in the LIBTOOL CONFIG section of the 'libtool'
 # script.  Tagged libtool config variables (even for the LIBTOOL CONFIG
 # section) are produced by _LT_LIBTOOL_TAG_VARS.
 m4_defun([_LT_LIBTOOL_CONFIG_VARS],
@@ -500,8 +510,8 @@
 # Send accumulated output to $CONFIG_STATUS.  Thanks to the lists of
 # variables for single and double quote escaping we saved from calls
 # to _LT_DECL, we can put quote escaped variables declarations
-# into `config.status', and then the shell code to quote escape them in
-# for loops in `config.status'.  Finally, any additional code accumulated
+# into 'config.status', and then the shell code to quote escape them in
+# for loops in 'config.status'.  Finally, any additional code accumulated
 # from calls to _LT_CONFIG_LIBTOOL_INIT is expanded.
 m4_defun([_LT_CONFIG_COMMANDS],
 [AC_PROVIDE_IFELSE([LT_OUTPUT],
@@ -547,7 +557,7 @@
 ]], lt_decl_quote_varnames); do
     case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in
     *[[\\\\\\\`\\"\\\$]]*)
-      eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED \\"\\\$sed_quote_subst\\"\\\`\\\\\\""
+      eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED \\"\\\$sed_quote_subst\\"\\\`\\\\\\"" ## exclude from sc_prohibit_nested_quotes
       ;;
     *)
       eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\""
@@ -560,7 +570,7 @@
 ]], lt_decl_dquote_varnames); do
     case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in
     *[[\\\\\\\`\\"\\\$]]*)
-      eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\""
+      eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\"" ## exclude from sc_prohibit_nested_quotes
       ;;
     *)
       eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\""
@@ -576,7 +586,7 @@
 # Generate a child script FILE with all initialization necessary to
 # reuse the environment learned by the parent script, and make the
 # file executable.  If COMMENT is supplied, it is inserted after the
-# `#!' sequence but before initialization text begins.  After this
+# '#!' sequence but before initialization text begins.  After this
 # macro, additional text can be appended to FILE to form the body of
 # the child script.  The macro ends with non-zero status if the
 # file could not be fully written (such as if the disk is full).
@@ -598,7 +608,7 @@
 _AS_PREPARE
 exec AS_MESSAGE_FD>&1
 _ASEOF
-test $lt_write_fail = 0 && chmod +x $1[]dnl
+test 0 = "$lt_write_fail" && chmod +x $1[]dnl
 m4_popdef([AS_MESSAGE_LOG_FD])])])# _LT_GENERATED_FILE_INIT
 
 # LT_OUTPUT
@@ -621,7 +631,7 @@
 } >&AS_MESSAGE_LOG_FD
 
 lt_cl_help="\
-\`$as_me' creates a local libtool stub from the current configuration,
+'$as_me' creates a local libtool stub from the current configuration,
 for use in further configure time tests before the real libtool is
 generated.
 
@@ -643,7 +653,7 @@
 This config.lt script is free software; the Free Software Foundation
 gives unlimited permision to copy, distribute and modify it."
 
-while test $[#] != 0
+while test 0 != $[#]
 do
   case $[1] in
     --version | --v* | -V )
@@ -656,10 +666,10 @@
       lt_cl_silent=: ;;
 
     -*) AC_MSG_ERROR([unrecognized option: $[1]
-Try \`$[0] --help' for more information.]) ;;
+Try '$[0] --help' for more information.]) ;;
 
     *) AC_MSG_ERROR([unrecognized argument: $[1]
-Try \`$[0] --help' for more information.]) ;;
+Try '$[0] --help' for more information.]) ;;
   esac
   shift
 done
@@ -685,7 +695,7 @@
 # open by configure.  Here we exec the FD to /dev/null, effectively closing
 # config.log, so it can be properly (re)opened and appended to by config.lt.
 lt_cl_success=:
-test "$silent" = yes &&
+test yes = "$silent" &&
   lt_config_lt_args="$lt_config_lt_args --quiet"
 exec AS_MESSAGE_LOG_FD>/dev/null
 $SHELL "$CONFIG_LT" $lt_config_lt_args || lt_cl_success=false
@@ -705,27 +715,31 @@
 _LT_CONFIG_SAVE_COMMANDS([
   m4_define([_LT_TAG], m4_if([$1], [], [C], [$1]))dnl
   m4_if(_LT_TAG, [C], [
-    # See if we are running on zsh, and set the options which allow our
+    # See if we are running on zsh, and set the options that allow our
     # commands through without removal of \ escapes.
-    if test -n "${ZSH_VERSION+set}" ; then
+    if test -n "${ZSH_VERSION+set}"; then
       setopt NO_GLOB_SUBST
     fi
 
-    cfgfile="${ofile}T"
+    cfgfile=${ofile}T
     trap "$RM \"$cfgfile\"; exit 1" 1 2 15
     $RM "$cfgfile"
 
     cat <<_LT_EOF >> "$cfgfile"
 #! $SHELL
-
-# `$ECHO "$ofile" | sed 's%^.*/%%'` - Provide generalized library-building support services.
-# Generated automatically by $as_me ($PACKAGE$TIMESTAMP) $VERSION
+# Generated automatically by $as_me ($PACKAGE) $VERSION
 # Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`:
 # NOTE: Changes made to this file will be lost: look at ltmain.sh.
-#
+
+# Provide generalized library-building support services.
+# Written by Gordon Matzigkeit, 1996
+
 _LT_COPYING
 _LT_LIBTOOL_TAGS
 
+# Configured defaults for sys_lib_dlsearch_path munging.
+: \${LT_SYS_LIBRARY_PATH="$configure_time_lt_sys_library_path"}
+
 # ### BEGIN LIBTOOL CONFIG
 _LT_LIBTOOL_CONFIG_VARS
 _LT_LIBTOOL_TAG_VARS
@@ -733,13 +747,24 @@
 
 _LT_EOF
 
+    cat <<'_LT_EOF' >> "$cfgfile"
+
+# ### BEGIN FUNCTIONS SHARED WITH CONFIGURE
+
+_LT_PREPARE_MUNGE_PATH_LIST
+_LT_PREPARE_CC_BASENAME
+
+# ### END FUNCTIONS SHARED WITH CONFIGURE
+
+_LT_EOF
+
   case $host_os in
   aix3*)
     cat <<\_LT_EOF >> "$cfgfile"
 # AIX sometimes has problems with the GCC collect2 program.  For some
 # reason, if we set the COLLECT_NAMES environment variable, the problems
 # vanish in a puff of smoke.
-if test "X${COLLECT_NAMES+set}" != Xset; then
+if test set != "${COLLECT_NAMES+set}"; then
   COLLECT_NAMES=
   export COLLECT_NAMES
 fi
@@ -756,8 +781,6 @@
   sed '$q' "$ltmain" >> "$cfgfile" \
      || (rm -f "$cfgfile"; exit 1)
 
-  _LT_PROG_REPLACE_SHELLFNS
-
    mv -f "$cfgfile" "$ofile" ||
     (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile")
   chmod +x "$ofile"
@@ -775,7 +798,6 @@
 [m4_if([$1], [], [
     PACKAGE='$PACKAGE'
     VERSION='$VERSION'
-    TIMESTAMP='$TIMESTAMP'
     RM='$RM'
     ofile='$ofile'], [])
 ])dnl /_LT_CONFIG_SAVE_COMMANDS
@@ -974,7 +996,7 @@
 
     AC_CACHE_CHECK([for -single_module linker flag],[lt_cv_apple_cc_single_mod],
       [lt_cv_apple_cc_single_mod=no
-      if test -z "${LT_MULTI_MODULE}"; then
+      if test -z "$LT_MULTI_MODULE"; then
 	# By default we will add the -single_module flag. You can override
 	# by either setting the environment variable LT_MULTI_MODULE
 	# non-empty at configure time, or by adding -multi_module to the
@@ -992,7 +1014,7 @@
 	  cat conftest.err >&AS_MESSAGE_LOG_FD
 	# Otherwise, if the output was created with a 0 exit code from
 	# the compiler, it worked.
-	elif test -f libconftest.dylib && test $_lt_result -eq 0; then
+	elif test -f libconftest.dylib && test 0 = "$_lt_result"; then
 	  lt_cv_apple_cc_single_mod=yes
 	else
 	  cat conftest.err >&AS_MESSAGE_LOG_FD
@@ -1010,7 +1032,7 @@
       AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])],
 	[lt_cv_ld_exported_symbols_list=yes],
 	[lt_cv_ld_exported_symbols_list=no])
-	LDFLAGS="$save_LDFLAGS"
+	LDFLAGS=$save_LDFLAGS
     ])
 
     AC_CACHE_CHECK([for -force_load linker flag],[lt_cv_ld_force_load],
@@ -1032,7 +1054,7 @@
       _lt_result=$?
       if test -s conftest.err && $GREP force_load conftest.err; then
 	cat conftest.err >&AS_MESSAGE_LOG_FD
-      elif test -f conftest && test $_lt_result -eq 0 && $GREP forced_load conftest >/dev/null 2>&1 ; then
+      elif test -f conftest && test 0 = "$_lt_result" && $GREP forced_load conftest >/dev/null 2>&1; then
 	lt_cv_ld_force_load=yes
       else
 	cat conftest.err >&AS_MESSAGE_LOG_FD
@@ -1042,32 +1064,32 @@
     ])
     case $host_os in
     rhapsody* | darwin1.[[012]])
-      _lt_dar_allow_undefined='${wl}-undefined ${wl}suppress' ;;
+      _lt_dar_allow_undefined='$wl-undefined ${wl}suppress' ;;
     darwin1.*)
-      _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;;
+      _lt_dar_allow_undefined='$wl-flat_namespace $wl-undefined ${wl}suppress' ;;
     darwin*) # darwin 5.x on
       # if running on 10.5 or later, the deployment target defaults
       # to the OS version, if on x86, and 10.4, the deployment
       # target defaults to 10.4. Don't you love it?
       case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in
 	10.0,*86*-darwin8*|10.0,*-darwin[[91]]*)
-	  _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;;
-	10.[[012]]*)
-	  _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;;
+	  _lt_dar_allow_undefined='$wl-undefined ${wl}dynamic_lookup' ;;
+	10.[[012]][[,.]]*)
+	  _lt_dar_allow_undefined='$wl-flat_namespace $wl-undefined ${wl}suppress' ;;
 	10.*)
-	  _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;;
+	  _lt_dar_allow_undefined='$wl-undefined ${wl}dynamic_lookup' ;;
       esac
     ;;
   esac
-    if test "$lt_cv_apple_cc_single_mod" = "yes"; then
+    if test yes = "$lt_cv_apple_cc_single_mod"; then
       _lt_dar_single_mod='$single_module'
     fi
-    if test "$lt_cv_ld_exported_symbols_list" = "yes"; then
-      _lt_dar_export_syms=' ${wl}-exported_symbols_list,$output_objdir/${libname}-symbols.expsym'
+    if test yes = "$lt_cv_ld_exported_symbols_list"; then
+      _lt_dar_export_syms=' $wl-exported_symbols_list,$output_objdir/$libname-symbols.expsym'
     else
-      _lt_dar_export_syms='~$NMEDIT -s $output_objdir/${libname}-symbols.expsym ${lib}'
+      _lt_dar_export_syms='~$NMEDIT -s $output_objdir/$libname-symbols.expsym $lib'
     fi
-    if test "$DSYMUTIL" != ":" && test "$lt_cv_ld_force_load" = "no"; then
+    if test : != "$DSYMUTIL" && test no = "$lt_cv_ld_force_load"; then
       _lt_dsymutil='~$DSYMUTIL $lib || :'
     else
       _lt_dsymutil=
@@ -1087,29 +1109,29 @@
   _LT_TAGVAR(hardcode_direct, $1)=no
   _LT_TAGVAR(hardcode_automatic, $1)=yes
   _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported
-  if test "$lt_cv_ld_force_load" = "yes"; then
-    _LT_TAGVAR(whole_archive_flag_spec, $1)='`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience ${wl}-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`'
+  if test yes = "$lt_cv_ld_force_load"; then
+    _LT_TAGVAR(whole_archive_flag_spec, $1)='`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience $wl-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`'
     m4_case([$1], [F77], [_LT_TAGVAR(compiler_needs_object, $1)=yes],
                   [FC],  [_LT_TAGVAR(compiler_needs_object, $1)=yes])
   else
     _LT_TAGVAR(whole_archive_flag_spec, $1)=''
   fi
   _LT_TAGVAR(link_all_deplibs, $1)=yes
-  _LT_TAGVAR(allow_undefined_flag, $1)="$_lt_dar_allow_undefined"
+  _LT_TAGVAR(allow_undefined_flag, $1)=$_lt_dar_allow_undefined
   case $cc_basename in
-     ifort*) _lt_dar_can_shared=yes ;;
+     ifort*|nagfor*) _lt_dar_can_shared=yes ;;
      *) _lt_dar_can_shared=$GCC ;;
   esac
-  if test "$_lt_dar_can_shared" = "yes"; then
+  if test yes = "$_lt_dar_can_shared"; then
     output_verbose_link_cmd=func_echo_all
-    _LT_TAGVAR(archive_cmds, $1)="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}"
-    _LT_TAGVAR(module_cmds, $1)="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}"
-    _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}"
-    _LT_TAGVAR(module_expsym_cmds, $1)="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}"
+    _LT_TAGVAR(archive_cmds, $1)="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod$_lt_dsymutil"
+    _LT_TAGVAR(module_cmds, $1)="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags$_lt_dsymutil"
+    _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod$_lt_dar_export_syms$_lt_dsymutil"
+    _LT_TAGVAR(module_expsym_cmds, $1)="sed -e 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags$_lt_dar_export_syms$_lt_dsymutil"
     m4_if([$1], [CXX],
-[   if test "$lt_cv_apple_cc_single_mod" != "yes"; then
-      _LT_TAGVAR(archive_cmds, $1)="\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dsymutil}"
-      _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dar_export_syms}${_lt_dsymutil}"
+[   if test yes != "$lt_cv_apple_cc_single_mod"; then
+      _LT_TAGVAR(archive_cmds, $1)="\$CC -r -keep_private_externs -nostdlib -o \$lib-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$lib-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring$_lt_dsymutil"
+      _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC -r -keep_private_externs -nostdlib -o \$lib-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$lib-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring$_lt_dar_export_syms$_lt_dsymutil"
     fi
 ],[])
   else
@@ -1129,7 +1151,7 @@
 # Allow to override them for all tags through lt_cv_aix_libpath.
 m4_defun([_LT_SYS_MODULE_PATH_AIX],
 [m4_require([_LT_DECL_SED])dnl
-if test "${lt_cv_aix_libpath+set}" = set; then
+if test set = "${lt_cv_aix_libpath+set}"; then
   aix_libpath=$lt_cv_aix_libpath
 else
   AC_CACHE_VAL([_LT_TAGVAR([lt_cv_aix_libpath_], [$1])],
@@ -1147,7 +1169,7 @@
     _LT_TAGVAR([lt_cv_aix_libpath_], [$1])=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
   fi],[])
   if test -z "$_LT_TAGVAR([lt_cv_aix_libpath_], [$1])"; then
-    _LT_TAGVAR([lt_cv_aix_libpath_], [$1])="/usr/lib:/lib"
+    _LT_TAGVAR([lt_cv_aix_libpath_], [$1])=/usr/lib:/lib
   fi
   ])
   aix_libpath=$_LT_TAGVAR([lt_cv_aix_libpath_], [$1])
@@ -1167,8 +1189,8 @@
 # -----------------------
 # Find how we can fake an echo command that does not interpret backslash.
 # In particular, with Autoconf 2.60 or later we add some code to the start
-# of the generated configure script which will find a shell with a builtin
-# printf (which we can use as an echo command).
+# of the generated configure script that will find a shell with a builtin
+# printf (that we can use as an echo command).
 m4_defun([_LT_PROG_ECHO_BACKSLASH],
 [ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
 ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO
@@ -1196,10 +1218,10 @@
 # Invoke $ECHO with all args, space-separated.
 func_echo_all ()
 {
-    $ECHO "$*" 
+    $ECHO "$*"
 }
 
-case "$ECHO" in
+case $ECHO in
   printf*) AC_MSG_RESULT([printf]) ;;
   print*) AC_MSG_RESULT([print -r]) ;;
   *) AC_MSG_RESULT([cat]) ;;
@@ -1225,16 +1247,17 @@
 AC_DEFUN([_LT_WITH_SYSROOT],
 [AC_MSG_CHECKING([for sysroot])
 AC_ARG_WITH([sysroot],
-[  --with-sysroot[=DIR] Search for dependent libraries within DIR
-                        (or the compiler's sysroot if not specified).],
+[AS_HELP_STRING([--with-sysroot@<:@=DIR@:>@],
+  [Search for dependent libraries within DIR (or the compiler's sysroot
+   if not specified).])],
 [], [with_sysroot=no])
 
 dnl lt_sysroot will always be passed unquoted.  We quote it here
 dnl in case the user passed a directory name.
 lt_sysroot=
-case ${with_sysroot} in #(
+case $with_sysroot in #(
  yes)
-   if test "$GCC" = yes; then
+   if test yes = "$GCC"; then
      lt_sysroot=`$CC --print-sysroot 2>/dev/null`
    fi
    ;; #(
@@ -1244,14 +1267,14 @@
  no|'')
    ;; #(
  *)
-   AC_MSG_RESULT([${with_sysroot}])
+   AC_MSG_RESULT([$with_sysroot])
    AC_MSG_ERROR([The sysroot must be an absolute path.])
    ;;
 esac
 
  AC_MSG_RESULT([${lt_sysroot:-no}])
 _LT_DECL([], [lt_sysroot], [0], [The root where to search for ]dnl
-[dependent libraries, and in which our libraries should be installed.])])
+[dependent libraries, and where our libraries should be installed.])])
 
 # _LT_ENABLE_LOCK
 # ---------------
@@ -1259,31 +1282,33 @@
 [AC_ARG_ENABLE([libtool-lock],
   [AS_HELP_STRING([--disable-libtool-lock],
     [avoid locking (might break parallel builds)])])
-test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes
+test no = "$enable_libtool_lock" || enable_libtool_lock=yes
 
 # Some flags need to be propagated to the compiler or linker for good
 # libtool support.
 case $host in
 ia64-*-hpux*)
-  # Find out which ABI we are using.
+  # Find out what ABI is being produced by ac_compile, and set mode
+  # options accordingly.
   echo 'int i;' > conftest.$ac_ext
   if AC_TRY_EVAL(ac_compile); then
     case `/usr/bin/file conftest.$ac_objext` in
       *ELF-32*)
-	HPUX_IA64_MODE="32"
+	HPUX_IA64_MODE=32
 	;;
       *ELF-64*)
-	HPUX_IA64_MODE="64"
+	HPUX_IA64_MODE=64
 	;;
     esac
   fi
   rm -rf conftest*
   ;;
 *-*-irix6*)
-  # Find out which ABI we are using.
+  # Find out what ABI is being produced by ac_compile, and set linker
+  # options accordingly.
   echo '[#]line '$LINENO' "configure"' > conftest.$ac_ext
   if AC_TRY_EVAL(ac_compile); then
-    if test "$lt_cv_prog_gnu_ld" = yes; then
+    if test yes = "$lt_cv_prog_gnu_ld"; then
       case `/usr/bin/file conftest.$ac_objext` in
 	*32-bit*)
 	  LD="${LD-ld} -melf32bsmip"
@@ -1312,9 +1337,46 @@
   rm -rf conftest*
   ;;
 
+mips64*-*linux*)
+  # Find out what ABI is being produced by ac_compile, and set linker
+  # options accordingly.
+  echo '[#]line '$LINENO' "configure"' > conftest.$ac_ext
+  if AC_TRY_EVAL(ac_compile); then
+    emul=elf
+    case `/usr/bin/file conftest.$ac_objext` in
+      *32-bit*)
+	emul="${emul}32"
+	;;
+      *64-bit*)
+	emul="${emul}64"
+	;;
+    esac
+    case `/usr/bin/file conftest.$ac_objext` in
+      *MSB*)
+	emul="${emul}btsmip"
+	;;
+      *LSB*)
+	emul="${emul}ltsmip"
+	;;
+    esac
+    case `/usr/bin/file conftest.$ac_objext` in
+      *N32*)
+	emul="${emul}n32"
+	;;
+    esac
+    LD="${LD-ld} -m $emul"
+  fi
+  rm -rf conftest*
+  ;;
+
 x86_64-*kfreebsd*-gnu|x86_64-*linux*|powerpc*-*linux*| \
 s390*-*linux*|s390*-*tpf*|sparc*-*linux*)
-  # Find out which ABI we are using.
+  # Find out what ABI is being produced by ac_compile, and set linker
+  # options accordingly.  Note that the listed cases only cover the
+  # situations where additional linker options are needed (such as when
+  # doing 32-bit compilation for a host where ld defaults to 64-bit, or
+  # vice versa); the common cases where no linker options are needed do
+  # not appear in the list.
   echo 'int i;' > conftest.$ac_ext
   if AC_TRY_EVAL(ac_compile); then
     case `/usr/bin/file conftest.o` in
@@ -1333,10 +1395,10 @@
 		;;
 	    esac
 	    ;;
-	  powerpc64le-*)
+	  powerpc64le-*linux*)
 	    LD="${LD-ld} -m elf32lppclinux"
 	    ;;
-	  powerpc64-*)
+	  powerpc64-*linux*)
 	    LD="${LD-ld} -m elf32ppclinux"
 	    ;;
 	  s390x-*linux*)
@@ -1355,10 +1417,10 @@
 	  x86_64-*linux*)
 	    LD="${LD-ld} -m elf_x86_64"
 	    ;;
-	  powerpcle-*)
+	  powerpcle-*linux*)
 	    LD="${LD-ld} -m elf64lppc"
 	    ;;
-	  powerpc-*)
+	  powerpc-*linux*)
 	    LD="${LD-ld} -m elf64ppc"
 	    ;;
 	  s390*-*linux*|s390*-*tpf*)
@@ -1376,19 +1438,20 @@
 
 *-*-sco3.2v5*)
   # On SCO OpenServer 5, we need -belf to get full-featured binaries.
-  SAVE_CFLAGS="$CFLAGS"
+  SAVE_CFLAGS=$CFLAGS
   CFLAGS="$CFLAGS -belf"
   AC_CACHE_CHECK([whether the C compiler needs -belf], lt_cv_cc_needs_belf,
     [AC_LANG_PUSH(C)
      AC_LINK_IFELSE([AC_LANG_PROGRAM([[]],[[]])],[lt_cv_cc_needs_belf=yes],[lt_cv_cc_needs_belf=no])
      AC_LANG_POP])
-  if test x"$lt_cv_cc_needs_belf" != x"yes"; then
+  if test yes != "$lt_cv_cc_needs_belf"; then
     # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf
-    CFLAGS="$SAVE_CFLAGS"
+    CFLAGS=$SAVE_CFLAGS
   fi
   ;;
 *-*solaris*)
-  # Find out which ABI we are using.
+  # Find out what ABI is being produced by ac_compile, and set linker
+  # options accordingly.
   echo 'int i;' > conftest.$ac_ext
   if AC_TRY_EVAL(ac_compile); then
     case `/usr/bin/file conftest.o` in
@@ -1396,7 +1459,7 @@
       case $lt_cv_prog_gnu_ld in
       yes*)
         case $host in
-        i?86-*-solaris*)
+        i?86-*-solaris*|x86_64-*-solaris*)
           LD="${LD-ld} -m elf_x86_64"
           ;;
         sparc*-*-solaris*)
@@ -1405,7 +1468,7 @@
         esac
         # GNU ld 2.21 introduced _sol2 emulations.  Use them if available.
         if ${LD-ld} -V | grep _sol2 >/dev/null 2>&1; then
-          LD="${LD-ld}_sol2"
+          LD=${LD-ld}_sol2
         fi
         ;;
       *)
@@ -1421,7 +1484,7 @@
   ;;
 esac
 
-need_locks="$enable_libtool_lock"
+need_locks=$enable_libtool_lock
 ])# _LT_ENABLE_LOCK
 
 
@@ -1440,11 +1503,11 @@
      [echo conftest.$ac_objext > conftest.lst
       lt_ar_try='$AR $AR_FLAGS libconftest.a @conftest.lst >&AS_MESSAGE_LOG_FD'
       AC_TRY_EVAL([lt_ar_try])
-      if test "$ac_status" -eq 0; then
+      if test 0 -eq "$ac_status"; then
 	# Ensure the archiver fails upon bogus file names.
 	rm -f conftest.$ac_objext libconftest.a
 	AC_TRY_EVAL([lt_ar_try])
-	if test "$ac_status" -ne 0; then
+	if test 0 -ne "$ac_status"; then
           lt_cv_ar_at_file=@
         fi
       fi
@@ -1452,7 +1515,7 @@
      ])
   ])
 
-if test "x$lt_cv_ar_at_file" = xno; then
+if test no = "$lt_cv_ar_at_file"; then
   archiver_list_spec=
 else
   archiver_list_spec=$lt_cv_ar_at_file
@@ -1483,7 +1546,7 @@
 
 if test -n "$RANLIB"; then
   case $host_os in
-  openbsd*)
+  bitrig* | openbsd*)
     old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$tool_oldlib"
     ;;
   *)
@@ -1519,7 +1582,7 @@
   [$2=no
    m4_if([$4], , [ac_outfile=conftest.$ac_objext], [ac_outfile=$4])
    echo "$lt_simple_compile_test_code" > conftest.$ac_ext
-   lt_compiler_flag="$3"
+   lt_compiler_flag="$3"  ## exclude from sc_useless_quotes_in_assignment
    # Insert the option either (1) after the last *FLAGS variable, or
    # (2) before a word containing "conftest.", or (3) at the end.
    # Note that $ac_compile itself does not contain backslashes and begins
@@ -1546,7 +1609,7 @@
    $RM conftest*
 ])
 
-if test x"[$]$2" = xyes; then
+if test yes = "[$]$2"; then
     m4_if([$5], , :, [$5])
 else
     m4_if([$6], , :, [$6])
@@ -1568,7 +1631,7 @@
 m4_require([_LT_DECL_SED])dnl
 AC_CACHE_CHECK([$1], [$2],
   [$2=no
-   save_LDFLAGS="$LDFLAGS"
+   save_LDFLAGS=$LDFLAGS
    LDFLAGS="$LDFLAGS $3"
    echo "$lt_simple_link_test_code" > conftest.$ac_ext
    if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then
@@ -1587,10 +1650,10 @@
      fi
    fi
    $RM -r conftest*
-   LDFLAGS="$save_LDFLAGS"
+   LDFLAGS=$save_LDFLAGS
 ])
 
-if test x"[$]$2" = xyes; then
+if test yes = "[$]$2"; then
     m4_if([$4], , :, [$4])
 else
     m4_if([$5], , :, [$5])
@@ -1611,7 +1674,7 @@
 AC_MSG_CHECKING([the maximum length of command line arguments])
 AC_CACHE_VAL([lt_cv_sys_max_cmd_len], [dnl
   i=0
-  teststring="ABCD"
+  teststring=ABCD
 
   case $build_os in
   msdosdjgpp*)
@@ -1651,7 +1714,7 @@
     lt_cv_sys_max_cmd_len=8192;
     ;;
 
-  netbsd* | freebsd* | openbsd* | darwin* | dragonfly*)
+  bitrig* | darwin* | dragonfly* | freebsd* | netbsd* | openbsd*)
     # This has been around since 386BSD, at least.  Likely further.
     if test -x /sbin/sysctl; then
       lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax`
@@ -1702,22 +1765,22 @@
   *)
     lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null`
     if test -n "$lt_cv_sys_max_cmd_len" && \
-	test undefined != "$lt_cv_sys_max_cmd_len"; then
+       test undefined != "$lt_cv_sys_max_cmd_len"; then
       lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4`
       lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3`
     else
       # Make teststring a little bigger before we do anything with it.
       # a 1K string should be a reasonable start.
-      for i in 1 2 3 4 5 6 7 8 ; do
+      for i in 1 2 3 4 5 6 7 8; do
         teststring=$teststring$teststring
       done
       SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}}
       # If test is not a shell built-in, we'll probably end up computing a
       # maximum length that is only half of the actual maximum length, but
       # we can't tell.
-      while { test "X"`env echo "$teststring$teststring" 2>/dev/null` \
+      while { test X`env echo "$teststring$teststring" 2>/dev/null` \
 	         = "X$teststring$teststring"; } >/dev/null 2>&1 &&
-	      test $i != 17 # 1/2 MB should be enough
+	      test 17 != "$i" # 1/2 MB should be enough
       do
         i=`expr $i + 1`
         teststring=$teststring$teststring
@@ -1733,7 +1796,7 @@
     ;;
   esac
 ])
-if test -n $lt_cv_sys_max_cmd_len ; then
+if test -n "$lt_cv_sys_max_cmd_len"; then
   AC_MSG_RESULT($lt_cv_sys_max_cmd_len)
 else
   AC_MSG_RESULT(none)
@@ -1761,7 +1824,7 @@
 # ----------------------------------------------------------------
 m4_defun([_LT_TRY_DLOPEN_SELF],
 [m4_require([_LT_HEADER_DLFCN])dnl
-if test "$cross_compiling" = yes; then :
+if test yes = "$cross_compiling"; then :
   [$4]
 else
   lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
@@ -1808,9 +1871,9 @@
 #  endif
 #endif
 
-/* When -fvisbility=hidden is used, assume the code has been annotated
+/* When -fvisibility=hidden is used, assume the code has been annotated
    correspondingly for the symbols needed.  */
-#if defined(__GNUC__) && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3))
+#if defined __GNUC__ && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3))
 int fnord () __attribute__((visibility("default")));
 #endif
 
@@ -1836,7 +1899,7 @@
   return status;
 }]
 _LT_EOF
-  if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext} 2>/dev/null; then
+  if AC_TRY_EVAL(ac_link) && test -s "conftest$ac_exeext" 2>/dev/null; then
     (./conftest; exit; ) >&AS_MESSAGE_LOG_FD 2>/dev/null
     lt_status=$?
     case x$lt_status in
@@ -1857,7 +1920,7 @@
 # ------------------
 AC_DEFUN([LT_SYS_DLOPEN_SELF],
 [m4_require([_LT_HEADER_DLFCN])dnl
-if test "x$enable_dlopen" != xyes; then
+if test yes != "$enable_dlopen"; then
   enable_dlopen=unknown
   enable_dlopen_self=unknown
   enable_dlopen_self_static=unknown
@@ -1867,44 +1930,52 @@
 
   case $host_os in
   beos*)
-    lt_cv_dlopen="load_add_on"
+    lt_cv_dlopen=load_add_on
     lt_cv_dlopen_libs=
     lt_cv_dlopen_self=yes
     ;;
 
   mingw* | pw32* | cegcc*)
-    lt_cv_dlopen="LoadLibrary"
+    lt_cv_dlopen=LoadLibrary
     lt_cv_dlopen_libs=
     ;;
 
   cygwin*)
-    lt_cv_dlopen="dlopen"
+    lt_cv_dlopen=dlopen
     lt_cv_dlopen_libs=
     ;;
 
   darwin*)
-  # if libdl is installed we need to link against it
+    # if libdl is installed we need to link against it
     AC_CHECK_LIB([dl], [dlopen],
-		[lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"],[
-    lt_cv_dlopen="dyld"
+		[lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-ldl],[
+    lt_cv_dlopen=dyld
     lt_cv_dlopen_libs=
     lt_cv_dlopen_self=yes
     ])
     ;;
 
+  tpf*)
+    # Don't try to run any link tests for TPF.  We know it's impossible
+    # because TPF is a cross-compiler, and we know how we open DSOs.
+    lt_cv_dlopen=dlopen
+    lt_cv_dlopen_libs=
+    lt_cv_dlopen_self=no
+    ;;
+
   *)
     AC_CHECK_FUNC([shl_load],
-	  [lt_cv_dlopen="shl_load"],
+	  [lt_cv_dlopen=shl_load],
       [AC_CHECK_LIB([dld], [shl_load],
-	    [lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-ldld"],
+	    [lt_cv_dlopen=shl_load lt_cv_dlopen_libs=-ldld],
 	[AC_CHECK_FUNC([dlopen],
-	      [lt_cv_dlopen="dlopen"],
+	      [lt_cv_dlopen=dlopen],
 	  [AC_CHECK_LIB([dl], [dlopen],
-		[lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"],
+		[lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-ldl],
 	    [AC_CHECK_LIB([svld], [dlopen],
-		  [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld"],
+		  [lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-lsvld],
 	      [AC_CHECK_LIB([dld], [dld_link],
-		    [lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-ldld"])
+		    [lt_cv_dlopen=dld_link lt_cv_dlopen_libs=-ldld])
 	      ])
 	    ])
 	  ])
@@ -1913,21 +1984,21 @@
     ;;
   esac
 
-  if test "x$lt_cv_dlopen" != xno; then
-    enable_dlopen=yes
-  else
+  if test no = "$lt_cv_dlopen"; then
     enable_dlopen=no
+  else
+    enable_dlopen=yes
   fi
 
   case $lt_cv_dlopen in
   dlopen)
-    save_CPPFLAGS="$CPPFLAGS"
-    test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H"
+    save_CPPFLAGS=$CPPFLAGS
+    test yes = "$ac_cv_header_dlfcn_h" && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H"
 
-    save_LDFLAGS="$LDFLAGS"
+    save_LDFLAGS=$LDFLAGS
     wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\"
 
-    save_LIBS="$LIBS"
+    save_LIBS=$LIBS
     LIBS="$lt_cv_dlopen_libs $LIBS"
 
     AC_CACHE_CHECK([whether a program can dlopen itself],
@@ -1937,7 +2008,7 @@
 	    lt_cv_dlopen_self=no, lt_cv_dlopen_self=cross)
     ])
 
-    if test "x$lt_cv_dlopen_self" = xyes; then
+    if test yes = "$lt_cv_dlopen_self"; then
       wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\"
       AC_CACHE_CHECK([whether a statically linked program can dlopen itself],
 	  lt_cv_dlopen_self_static, [dnl
@@ -1947,9 +2018,9 @@
       ])
     fi
 
-    CPPFLAGS="$save_CPPFLAGS"
-    LDFLAGS="$save_LDFLAGS"
-    LIBS="$save_LIBS"
+    CPPFLAGS=$save_CPPFLAGS
+    LDFLAGS=$save_LDFLAGS
+    LIBS=$save_LIBS
     ;;
   esac
 
@@ -2041,8 +2112,8 @@
 m4_require([_LT_FILEUTILS_DEFAULTS])dnl
 _LT_COMPILER_C_O([$1])
 
-hard_links="nottested"
-if test "$_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)" = no && test "$need_locks" != no; then
+hard_links=nottested
+if test no = "$_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)" && test no != "$need_locks"; then
   # do not overwrite the value of need_locks provided by the user
   AC_MSG_CHECKING([if we can lock with hard links])
   hard_links=yes
@@ -2052,8 +2123,8 @@
   ln conftest.a conftest.b 2>&5 || hard_links=no
   ln conftest.a conftest.b 2>/dev/null && hard_links=no
   AC_MSG_RESULT([$hard_links])
-  if test "$hard_links" = no; then
-    AC_MSG_WARN([`$CC' does not support `-c -o', so `make -j' may be unsafe])
+  if test no = "$hard_links"; then
+    AC_MSG_WARN(['$CC' does not support '-c -o', so 'make -j' may be unsafe])
     need_locks=warn
   fi
 else
@@ -2080,8 +2151,8 @@
 _LT_DECL([], [objdir], [0],
          [The name of the directory that contains temporary libtool files])dnl
 m4_pattern_allow([LT_OBJDIR])dnl
-AC_DEFINE_UNQUOTED(LT_OBJDIR, "$lt_cv_objdir/",
-  [Define to the sub-directory in which libtool stores uninstalled libraries.])
+AC_DEFINE_UNQUOTED([LT_OBJDIR], "$lt_cv_objdir/",
+  [Define to the sub-directory where libtool stores uninstalled libraries.])
 ])# _LT_CHECK_OBJDIR
 
 
@@ -2093,15 +2164,15 @@
 _LT_TAGVAR(hardcode_action, $1)=
 if test -n "$_LT_TAGVAR(hardcode_libdir_flag_spec, $1)" ||
    test -n "$_LT_TAGVAR(runpath_var, $1)" ||
-   test "X$_LT_TAGVAR(hardcode_automatic, $1)" = "Xyes" ; then
+   test yes = "$_LT_TAGVAR(hardcode_automatic, $1)"; then
 
   # We can hardcode non-existent directories.
-  if test "$_LT_TAGVAR(hardcode_direct, $1)" != no &&
+  if test no != "$_LT_TAGVAR(hardcode_direct, $1)" &&
      # If the only mechanism to avoid hardcoding is shlibpath_var, we
      # have to relink, otherwise we might link with an installed library
      # when we should be linking with a yet-to-be-installed one
-     ## test "$_LT_TAGVAR(hardcode_shlibpath_var, $1)" != no &&
-     test "$_LT_TAGVAR(hardcode_minus_L, $1)" != no; then
+     ## test no != "$_LT_TAGVAR(hardcode_shlibpath_var, $1)" &&
+     test no != "$_LT_TAGVAR(hardcode_minus_L, $1)"; then
     # Linking always hardcodes the temporary library directory.
     _LT_TAGVAR(hardcode_action, $1)=relink
   else
@@ -2115,12 +2186,12 @@
 fi
 AC_MSG_RESULT([$_LT_TAGVAR(hardcode_action, $1)])
 
-if test "$_LT_TAGVAR(hardcode_action, $1)" = relink ||
-   test "$_LT_TAGVAR(inherit_rpath, $1)" = yes; then
+if test relink = "$_LT_TAGVAR(hardcode_action, $1)" ||
+   test yes = "$_LT_TAGVAR(inherit_rpath, $1)"; then
   # Fast installation is not supported
   enable_fast_install=no
-elif test "$shlibpath_overrides_runpath" = yes ||
-     test "$enable_shared" = no; then
+elif test yes = "$shlibpath_overrides_runpath" ||
+     test no = "$enable_shared"; then
   # Fast installation is not necessary
   enable_fast_install=needless
 fi
@@ -2144,7 +2215,7 @@
 # FIXME - insert some real tests, host_os isn't really good enough
   case $host_os in
   darwin*)
-    if test -n "$STRIP" ; then
+    if test -n "$STRIP"; then
       striplib="$STRIP -x"
       old_striplib="$STRIP -S"
       AC_MSG_RESULT([yes])
@@ -2162,6 +2233,47 @@
 ])# _LT_CMD_STRIPLIB
 
 
+# _LT_PREPARE_MUNGE_PATH_LIST
+# ---------------------------
+# Make sure func_munge_path_list() is defined correctly.
+m4_defun([_LT_PREPARE_MUNGE_PATH_LIST],
+[[# func_munge_path_list VARIABLE PATH
+# -----------------------------------
+# VARIABLE is name of variable containing _space_ separated list of
+# directories to be munged by the contents of PATH, which is string
+# having a format:
+# "DIR[:DIR]:"
+#       string "DIR[ DIR]" will be prepended to VARIABLE
+# ":DIR[:DIR]"
+#       string "DIR[ DIR]" will be appended to VARIABLE
+# "DIRP[:DIRP]::[DIRA:]DIRA"
+#       string "DIRP[ DIRP]" will be prepended to VARIABLE and string
+#       "DIRA[ DIRA]" will be appended to VARIABLE
+# "DIR[:DIR]"
+#       VARIABLE will be replaced by "DIR[ DIR]"
+func_munge_path_list ()
+{
+    case x@S|@2 in
+    x)
+        ;;
+    *:)
+        eval @S|@1=\"`$ECHO @S|@2 | $SED 's/:/ /g'` \@S|@@S|@1\"
+        ;;
+    x:*)
+        eval @S|@1=\"\@S|@@S|@1 `$ECHO @S|@2 | $SED 's/:/ /g'`\"
+        ;;
+    *::*)
+        eval @S|@1=\"\@S|@@S|@1\ `$ECHO @S|@2 | $SED -e 's/.*:://' -e 's/:/ /g'`\"
+        eval @S|@1=\"`$ECHO @S|@2 | $SED -e 's/::.*//' -e 's/:/ /g'`\ \@S|@@S|@1\"
+        ;;
+    *)
+        eval @S|@1=\"`$ECHO @S|@2 | $SED 's/:/ /g'`\"
+        ;;
+    esac
+}
+]])# _LT_PREPARE_PATH_LIST
+
+
 # _LT_SYS_DYNAMIC_LINKER([TAG])
 # -----------------------------
 # PORTME Fill in your ld.so characteristics
@@ -2172,17 +2284,18 @@
 m4_require([_LT_DECL_OBJDUMP])dnl
 m4_require([_LT_DECL_SED])dnl
 m4_require([_LT_CHECK_SHELL_FEATURES])dnl
+m4_require([_LT_PREPARE_MUNGE_PATH_LIST])dnl
 AC_MSG_CHECKING([dynamic linker characteristics])
 m4_if([$1],
 	[], [
-if test "$GCC" = yes; then
+if test yes = "$GCC"; then
   case $host_os in
-    darwin*) lt_awk_arg="/^libraries:/,/LR/" ;;
-    *) lt_awk_arg="/^libraries:/" ;;
+    darwin*) lt_awk_arg='/^libraries:/,/LR/' ;;
+    *) lt_awk_arg='/^libraries:/' ;;
   esac
   case $host_os in
-    mingw* | cegcc*) lt_sed_strip_eq="s,=\([[A-Za-z]]:\),\1,g" ;;
-    *) lt_sed_strip_eq="s,=/,/,g" ;;
+    mingw* | cegcc*) lt_sed_strip_eq='s|=\([[A-Za-z]]:\)|\1|g' ;;
+    *) lt_sed_strip_eq='s|=/|/|g' ;;
   esac
   lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e $lt_sed_strip_eq`
   case $lt_search_path_spec in
@@ -2198,28 +2311,35 @@
     ;;
   esac
   # Ok, now we have the path, separated by spaces, we can step through it
-  # and add multilib dir if necessary.
+  # and add multilib dir if necessary...
   lt_tmp_lt_search_path_spec=
-  lt_multi_os_dir=`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null`
+  lt_multi_os_dir=/`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null`
+  # ...but if some path component already ends with the multilib dir we assume
+  # that all is fine and trust -print-search-dirs as is (GCC 4.2? or newer).
+  case "$lt_multi_os_dir; $lt_search_path_spec " in
+  "/; "* | "/.; "* | "/./; "* | *"$lt_multi_os_dir "* | *"$lt_multi_os_dir/ "*)
+    lt_multi_os_dir=
+    ;;
+  esac
   for lt_sys_path in $lt_search_path_spec; do
-    if test -d "$lt_sys_path/$lt_multi_os_dir"; then
-      lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path/$lt_multi_os_dir"
-    else
+    if test -d "$lt_sys_path$lt_multi_os_dir"; then
+      lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path$lt_multi_os_dir"
+    elif test -n "$lt_multi_os_dir"; then
       test -d "$lt_sys_path" && \
 	lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path"
     fi
   done
   lt_search_path_spec=`$ECHO "$lt_tmp_lt_search_path_spec" | awk '
-BEGIN {RS=" "; FS="/|\n";} {
-  lt_foo="";
-  lt_count=0;
+BEGIN {RS = " "; FS = "/|\n";} {
+  lt_foo = "";
+  lt_count = 0;
   for (lt_i = NF; lt_i > 0; lt_i--) {
     if ($lt_i != "" && $lt_i != ".") {
       if ($lt_i == "..") {
         lt_count++;
       } else {
         if (lt_count == 0) {
-          lt_foo="/" $lt_i lt_foo;
+          lt_foo = "/" $lt_i lt_foo;
         } else {
           lt_count--;
         }
@@ -2233,7 +2353,7 @@
   # for these hosts.
   case $host_os in
     mingw* | cegcc*) lt_search_path_spec=`$ECHO "$lt_search_path_spec" |\
-      $SED 's,/\([[A-Za-z]]:\),\1,g'` ;;
+      $SED 's|/\([[A-Za-z]]:\)|\1|g'` ;;
   esac
   sys_lib_search_path_spec=`$ECHO "$lt_search_path_spec" | $lt_NL2SP`
 else
@@ -2242,7 +2362,7 @@
 library_names_spec=
 libname_spec='lib$name'
 soname_spec=
-shrext_cmds=".so"
+shrext_cmds=.so
 postinstall_cmds=
 postuninstall_cmds=
 finish_cmds=
@@ -2259,14 +2379,17 @@
 # flags to be left without arguments
 need_version=unknown
 
+AC_ARG_VAR([LT_SYS_LIBRARY_PATH],
+[User-defined run-time library search path.])
+
 case $host_os in
 aix3*)
   version_type=linux # correct to gnu/linux during the next big refactor
-  library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a'
+  library_names_spec='$libname$release$shared_ext$versuffix $libname.a'
   shlibpath_var=LIBPATH
 
   # AIX 3 has no versioning support, so we append a major version to the name.
-  soname_spec='${libname}${release}${shared_ext}$major'
+  soname_spec='$libname$release$shared_ext$major'
   ;;
 
 aix[[4-9]]*)
@@ -2274,41 +2397,91 @@
   need_lib_prefix=no
   need_version=no
   hardcode_into_libs=yes
-  if test "$host_cpu" = ia64; then
+  if test ia64 = "$host_cpu"; then
     # AIX 5 supports IA64
-    library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}'
+    library_names_spec='$libname$release$shared_ext$major $libname$release$shared_ext$versuffix $libname$shared_ext'
     shlibpath_var=LD_LIBRARY_PATH
   else
     # With GCC up to 2.95.x, collect2 would create an import file
     # for dependence libraries.  The import file would start with
-    # the line `#! .'.  This would cause the generated library to
-    # depend on `.', always an invalid library.  This was fixed in
+    # the line '#! .'.  This would cause the generated library to
+    # depend on '.', always an invalid library.  This was fixed in
     # development snapshots of GCC prior to 3.0.
     case $host_os in
       aix4 | aix4.[[01]] | aix4.[[01]].*)
       if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)'
 	   echo ' yes '
-	   echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then
+	   echo '#endif'; } | $CC -E - | $GREP yes > /dev/null; then
 	:
       else
 	can_build_shared=no
       fi
       ;;
     esac
-    # AIX (on Power*) has no versioning support, so currently we can not hardcode correct
+    # Using Import Files as archive members, it is possible to support
+    # filename-based versioning of shared library archives on AIX. While
+    # this would work for both with and without runtime linking, it will
+    # prevent static linking of such archives. So we do filename-based
+    # shared library versioning with .so extension only, which is used
+    # when both runtime linking and shared linking is enabled.
+    # Unfortunately, runtime linking may impact performance, so we do
+    # not want this to be the default eventually. Also, we use the
+    # versioned .so libs for executables only if there is the -brtl
+    # linker flag in LDFLAGS as well, or --with-aix-soname=svr4 only.
+    # To allow for filename-based versioning support, we need to create
+    # libNAME.so.V as an archive file, containing:
+    # *) an Import File, referring to the versioned filename of the
+    #    archive as well as the shared archive member, telling the
+    #    bitwidth (32 or 64) of that shared object, and providing the
+    #    list of exported symbols of that shared object, eventually
+    #    decorated with the 'weak' keyword
+    # *) the shared object with the F_LOADONLY flag set, to really avoid
+    #    it being seen by the linker.
+    # At run time we better use the real file rather than another symlink,
+    # but for link time we create the symlink libNAME.so -> libNAME.so.V
+
+    case $with_aix_soname,$aix_use_runtimelinking in
+    # AIX (on Power*) has no versioning support, so currently we cannot hardcode correct
     # soname into executable. Probably we can add versioning support to
     # collect2, so additional links can be useful in future.
-    if test "$aix_use_runtimelinking" = yes; then
+    aix,yes) # traditional libtool
+      dynamic_linker='AIX unversionable lib.so'
       # If using run time linking (on AIX 4.2 or later) use lib<name>.so
       # instead of lib<name>.a to let people know that these are not
       # typical AIX shared libraries.
-      library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-    else
+      library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+      ;;
+    aix,no) # traditional AIX only
+      dynamic_linker='AIX lib.a[(]lib.so.V[)]'
       # We preserve .a as extension for shared libraries through AIX4.2
       # and later when we are not doing run time linking.
-      library_names_spec='${libname}${release}.a $libname.a'
-      soname_spec='${libname}${release}${shared_ext}$major'
-    fi
+      library_names_spec='$libname$release.a $libname.a'
+      soname_spec='$libname$release$shared_ext$major'
+      ;;
+    svr4,*) # full svr4 only
+      dynamic_linker="AIX lib.so.V[(]$shared_archive_member_spec.o[)]"
+      library_names_spec='$libname$release$shared_ext$major $libname$shared_ext'
+      # We do not specify a path in Import Files, so LIBPATH fires.
+      shlibpath_overrides_runpath=yes
+      ;;
+    *,yes) # both, prefer svr4
+      dynamic_linker="AIX lib.so.V[(]$shared_archive_member_spec.o[)], lib.a[(]lib.so.V[)]"
+      library_names_spec='$libname$release$shared_ext$major $libname$shared_ext'
+      # unpreferred sharedlib libNAME.a needs extra handling
+      postinstall_cmds='test -n "$linkname" || linkname="$realname"~func_stripname "" ".so" "$linkname"~$install_shared_prog "$dir/$func_stripname_result.$libext" "$destdir/$func_stripname_result.$libext"~test -z "$tstripme" || test -z "$striplib" || $striplib "$destdir/$func_stripname_result.$libext"'
+      postuninstall_cmds='for n in $library_names $old_library; do :; done~func_stripname "" ".so" "$n"~test "$func_stripname_result" = "$n" || func_append rmfiles " $odir/$func_stripname_result.$libext"'
+      # We do not specify a path in Import Files, so LIBPATH fires.
+      shlibpath_overrides_runpath=yes
+      ;;
+    *,no) # both, prefer aix
+      dynamic_linker="AIX lib.a[(]lib.so.V[)], lib.so.V[(]$shared_archive_member_spec.o[)]"
+      library_names_spec='$libname$release.a $libname.a'
+      soname_spec='$libname$release$shared_ext$major'
+      # unpreferred sharedlib libNAME.so.V and symlink libNAME.so need extra handling
+      postinstall_cmds='test -z "$dlname" || $install_shared_prog $dir/$dlname $destdir/$dlname~test -z "$tstripme" || test -z "$striplib" || $striplib $destdir/$dlname~test -n "$linkname" || linkname=$realname~func_stripname "" ".a" "$linkname"~(cd "$destdir" && $LN_S -f $dlname $func_stripname_result.so)'
+      postuninstall_cmds='test -z "$dlname" || func_append rmfiles " $odir/$dlname"~for n in $old_library $library_names; do :; done~func_stripname "" ".a" "$n"~func_append rmfiles " $odir/$func_stripname_result.so"'
+      ;;
+    esac
     shlibpath_var=LIBPATH
   fi
   ;;
@@ -2318,18 +2491,18 @@
   powerpc)
     # Since July 2007 AmigaOS4 officially supports .so libraries.
     # When compiling the executable, add -use-dynld -Lsobjs: to the compileline.
-    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+    library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
     ;;
   m68k)
     library_names_spec='$libname.ixlibrary $libname.a'
     # Create ${libname}_ixlibrary.a entries in /sys/libs.
-    finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([[^/]]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done'
+    finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([[^/]]*\)\.ixlibrary$%\1%'\''`; $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done'
     ;;
   esac
   ;;
 
 beos*)
-  library_names_spec='${libname}${shared_ext}'
+  library_names_spec='$libname$shared_ext'
   dynamic_linker="$host_os ld.so"
   shlibpath_var=LIBRARY_PATH
   ;;
@@ -2337,8 +2510,8 @@
 bsdi[[45]]*)
   version_type=linux # correct to gnu/linux during the next big refactor
   need_version=no
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-  soname_spec='${libname}${release}${shared_ext}$major'
+  library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+  soname_spec='$libname$release$shared_ext$major'
   finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir'
   shlibpath_var=LD_LIBRARY_PATH
   sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib"
@@ -2350,7 +2523,7 @@
 
 cygwin* | mingw* | pw32* | cegcc*)
   version_type=windows
-  shrext_cmds=".dll"
+  shrext_cmds=.dll
   need_version=no
   need_lib_prefix=no
 
@@ -2359,8 +2532,8 @@
     # gcc
     library_names_spec='$libname.dll.a'
     # DLL is installed to $(libdir)/../bin by postinstall_cmds
-    postinstall_cmds='base_file=`basename \${file}`~
-      dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~
+    postinstall_cmds='base_file=`basename \$file`~
+      dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; echo \$dlname'\''`~
       dldir=$destdir/`dirname \$dlpath`~
       test -d \$dldir || mkdir -p \$dldir~
       $install_prog $dir/$dlname \$dldir/$dlname~
@@ -2376,17 +2549,17 @@
     case $host_os in
     cygwin*)
       # Cygwin DLLs use 'cyg' prefix rather than 'lib'
-      soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}'
+      soname_spec='`echo $libname | sed -e 's/^lib/cyg/'``echo $release | $SED -e 's/[[.]]/-/g'`$versuffix$shared_ext'
 m4_if([$1], [],[
       sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/lib/w32api"])
       ;;
     mingw* | cegcc*)
       # MinGW DLLs use traditional 'lib' prefix
-      soname_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}'
+      soname_spec='$libname`echo $release | $SED -e 's/[[.]]/-/g'`$versuffix$shared_ext'
       ;;
     pw32*)
       # pw32 DLLs use 'pw' prefix rather than 'lib'
-      library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}'
+      library_names_spec='`echo $libname | sed -e 's/^lib/pw/'``echo $release | $SED -e 's/[[.]]/-/g'`$versuffix$shared_ext'
       ;;
     esac
     dynamic_linker='Win32 ld.exe'
@@ -2395,8 +2568,8 @@
   *,cl*)
     # Native MSVC
     libname_spec='$name'
-    soname_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}'
-    library_names_spec='${libname}.dll.lib'
+    soname_spec='$libname`echo $release | $SED -e 's/[[.]]/-/g'`$versuffix$shared_ext'
+    library_names_spec='$libname.dll.lib'
 
     case $build_os in
     mingw*)
@@ -2423,7 +2596,7 @@
       sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"`
       ;;
     *)
-      sys_lib_search_path_spec="$LIB"
+      sys_lib_search_path_spec=$LIB
       if $ECHO "$sys_lib_search_path_spec" | [$GREP ';[c-zC-Z]:/' >/dev/null]; then
         # It is most probably a Windows format PATH.
         sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'`
@@ -2436,8 +2609,8 @@
     esac
 
     # DLL is installed to $(libdir)/../bin by postinstall_cmds
-    postinstall_cmds='base_file=`basename \${file}`~
-      dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~
+    postinstall_cmds='base_file=`basename \$file`~
+      dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; echo \$dlname'\''`~
       dldir=$destdir/`dirname \$dlpath`~
       test -d \$dldir || mkdir -p \$dldir~
       $install_prog $dir/$dlname \$dldir/$dlname'
@@ -2450,7 +2623,7 @@
 
   *)
     # Assume MSVC wrapper
-    library_names_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext} $libname.lib'
+    library_names_spec='$libname`echo $release | $SED -e 's/[[.]]/-/g'`$versuffix$shared_ext $libname.lib'
     dynamic_linker='Win32 ld.exe'
     ;;
   esac
@@ -2463,8 +2636,8 @@
   version_type=darwin
   need_lib_prefix=no
   need_version=no
-  library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext'
-  soname_spec='${libname}${release}${major}$shared_ext'
+  library_names_spec='$libname$release$major$shared_ext $libname$shared_ext'
+  soname_spec='$libname$release$major$shared_ext'
   shlibpath_overrides_runpath=yes
   shlibpath_var=DYLD_LIBRARY_PATH
   shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`'
@@ -2477,8 +2650,8 @@
   version_type=linux # correct to gnu/linux during the next big refactor
   need_lib_prefix=no
   need_version=no
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext'
-  soname_spec='${libname}${release}${shared_ext}$major'
+  library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+  soname_spec='$libname$release$shared_ext$major'
   shlibpath_var=LD_LIBRARY_PATH
   ;;
 
@@ -2496,12 +2669,13 @@
   version_type=freebsd-$objformat
   case $version_type in
     freebsd-elf*)
-      library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}'
+      library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+      soname_spec='$libname$release$shared_ext$major'
       need_version=no
       need_lib_prefix=no
       ;;
     freebsd-*)
-      library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix'
+      library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix'
       need_version=yes
       ;;
   esac
@@ -2531,10 +2705,10 @@
   need_lib_prefix=no
   need_version=no
   dynamic_linker="$host_os runtime_loader"
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}'
-  soname_spec='${libname}${release}${shared_ext}$major'
+  library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+  soname_spec='$libname$release$shared_ext$major'
   shlibpath_var=LIBRARY_PATH
-  shlibpath_overrides_runpath=yes
+  shlibpath_overrides_runpath=no
   sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib'
   hardcode_into_libs=yes
   ;;
@@ -2552,14 +2726,15 @@
     dynamic_linker="$host_os dld.so"
     shlibpath_var=LD_LIBRARY_PATH
     shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
-    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-    soname_spec='${libname}${release}${shared_ext}$major'
-    if test "X$HPUX_IA64_MODE" = X32; then
+    library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+    soname_spec='$libname$release$shared_ext$major'
+    if test 32 = "$HPUX_IA64_MODE"; then
       sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib"
+      sys_lib_dlsearch_path_spec=/usr/lib/hpux32
     else
       sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64"
+      sys_lib_dlsearch_path_spec=/usr/lib/hpux64
     fi
-    sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
     ;;
   hppa*64*)
     shrext_cmds='.sl'
@@ -2567,8 +2742,8 @@
     dynamic_linker="$host_os dld.sl"
     shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH
     shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
-    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-    soname_spec='${libname}${release}${shared_ext}$major'
+    library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+    soname_spec='$libname$release$shared_ext$major'
     sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64"
     sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
     ;;
@@ -2577,8 +2752,8 @@
     dynamic_linker="$host_os dld.sl"
     shlibpath_var=SHLIB_PATH
     shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH
-    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-    soname_spec='${libname}${release}${shared_ext}$major'
+    library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+    soname_spec='$libname$release$shared_ext$major'
     ;;
   esac
   # HP-UX runs *really* slowly unless shared libraries are mode 555, ...
@@ -2591,8 +2766,8 @@
   version_type=linux # correct to gnu/linux during the next big refactor
   need_lib_prefix=no
   need_version=no
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
-  soname_spec='${libname}${release}${shared_ext}$major'
+  library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+  soname_spec='$libname$release$shared_ext$major'
   dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)'
   shlibpath_var=LD_LIBRARY_PATH
   shlibpath_overrides_runpath=no
@@ -2603,7 +2778,7 @@
   case $host_os in
     nonstopux*) version_type=nonstopux ;;
     *)
-	if test "$lt_cv_prog_gnu_ld" = yes; then
+	if test yes = "$lt_cv_prog_gnu_ld"; then
 		version_type=linux # correct to gnu/linux during the next big refactor
 	else
 		version_type=irix
@@ -2611,8 +2786,8 @@
   esac
   need_lib_prefix=no
   need_version=no
-  soname_spec='${libname}${release}${shared_ext}$major'
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}'
+  soname_spec='$libname$release$shared_ext$major'
+  library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$release$shared_ext $libname$shared_ext'
   case $host_os in
   irix5* | nonstopux*)
     libsuff= shlibsuff=
@@ -2631,8 +2806,8 @@
   esac
   shlibpath_var=LD_LIBRARY${shlibsuff}_PATH
   shlibpath_overrides_runpath=no
-  sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}"
-  sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}"
+  sys_lib_search_path_spec="/usr/lib$libsuff /lib$libsuff /usr/local/lib$libsuff"
+  sys_lib_dlsearch_path_spec="/usr/lib$libsuff /lib$libsuff"
   hardcode_into_libs=yes
   ;;
 
@@ -2641,13 +2816,33 @@
   dynamic_linker=no
   ;;
 
+linux*android*)
+  version_type=none # Android doesn't support versioned libraries.
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='$libname$release$shared_ext'
+  soname_spec='$libname$release$shared_ext'
+  finish_cmds=
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+
+  # This implies no fast_install, which is unacceptable.
+  # Some rework will be needed to allow for fast_install
+  # before this can be enabled.
+  hardcode_into_libs=yes
+
+  dynamic_linker='Android linker'
+  # Don't embed -rpath directories since the linker doesn't support them.
+  _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+  ;;
+
 # This must be glibc/ELF.
 linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*)
   version_type=linux # correct to gnu/linux during the next big refactor
   need_lib_prefix=no
   need_version=no
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-  soname_spec='${libname}${release}${shared_ext}$major'
+  library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+  soname_spec='$libname$release$shared_ext$major'
   finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir'
   shlibpath_var=LD_LIBRARY_PATH
   shlibpath_overrides_runpath=no
@@ -2672,7 +2867,12 @@
   # before this can be enabled.
   hardcode_into_libs=yes
 
-  # Append ld.so.conf contents to the search path
+  # Ideally, we could use ldconfig to report *all* directores which are
+  # searched for libraries, however this is still not possible.  Aside from not
+  # being certain /sbin/ldconfig is available, command
+  # 'ldconfig -N -X -v | grep ^/' on 64bit Fedora does not report /usr/lib64,
+  # even though it is searched at run-time.  Try to do the best guess by
+  # appending ld.so.conf contents (and includes) to the search path.
   if test -f /etc/ld.so.conf; then
     lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \[$]2)); skip = 1; } { if (!skip) print \[$]0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[	 ]*hwcap[	 ]/d;s/[:,	]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '`
     sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra"
@@ -2704,12 +2904,12 @@
   need_lib_prefix=no
   need_version=no
   if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
-    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+    library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix'
     finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
     dynamic_linker='NetBSD (a.out) ld.so'
   else
-    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
-    soname_spec='${libname}${release}${shared_ext}$major'
+    library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+    soname_spec='$libname$release$shared_ext$major'
     dynamic_linker='NetBSD ld.elf_so'
   fi
   shlibpath_var=LD_LIBRARY_PATH
@@ -2719,7 +2919,7 @@
 
 newsos6)
   version_type=linux # correct to gnu/linux during the next big refactor
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
   shlibpath_var=LD_LIBRARY_PATH
   shlibpath_overrides_runpath=yes
   ;;
@@ -2728,58 +2928,68 @@
   version_type=qnx
   need_lib_prefix=no
   need_version=no
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-  soname_spec='${libname}${release}${shared_ext}$major'
+  library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+  soname_spec='$libname$release$shared_ext$major'
   shlibpath_var=LD_LIBRARY_PATH
   shlibpath_overrides_runpath=no
   hardcode_into_libs=yes
   dynamic_linker='ldqnx.so'
   ;;
 
-openbsd*)
+openbsd* | bitrig*)
   version_type=sunos
-  sys_lib_dlsearch_path_spec="/usr/lib"
+  sys_lib_dlsearch_path_spec=/usr/lib
   need_lib_prefix=no
-  # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs.
-  case $host_os in
-    openbsd3.3 | openbsd3.3.*)	need_version=yes ;;
-    *)				need_version=no  ;;
-  esac
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+  if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then
+    need_version=no
+  else
+    need_version=yes
+  fi
+  library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix'
   finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
   shlibpath_var=LD_LIBRARY_PATH
-  if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
-    case $host_os in
-      openbsd2.[[89]] | openbsd2.[[89]].*)
-	shlibpath_overrides_runpath=no
-	;;
-      *)
-	shlibpath_overrides_runpath=yes
-	;;
-      esac
-  else
-    shlibpath_overrides_runpath=yes
-  fi
+  shlibpath_overrides_runpath=yes
   ;;
 
 os2*)
   libname_spec='$name'
-  shrext_cmds=".dll"
+  version_type=windows
+  shrext_cmds=.dll
+  need_version=no
   need_lib_prefix=no
-  library_names_spec='$libname${shared_ext} $libname.a'
+  # OS/2 can only load a DLL with a base name of 8 characters or less.
+  soname_spec='`test -n "$os2dllname" && libname="$os2dllname";
+    v=$($ECHO $release$versuffix | tr -d .-);
+    n=$($ECHO $libname | cut -b -$((8 - ${#v})) | tr . _);
+    $ECHO $n$v`$shared_ext'
+  library_names_spec='${libname}_dll.$libext'
   dynamic_linker='OS/2 ld.exe'
-  shlibpath_var=LIBPATH
+  shlibpath_var=BEGINLIBPATH
+  sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib"
+  sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
+  postinstall_cmds='base_file=`basename \$file`~
+    dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; $ECHO \$dlname'\''`~
+    dldir=$destdir/`dirname \$dlpath`~
+    test -d \$dldir || mkdir -p \$dldir~
+    $install_prog $dir/$dlname \$dldir/$dlname~
+    chmod a+x \$dldir/$dlname~
+    if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then
+      eval '\''$striplib \$dldir/$dlname'\'' || exit \$?;
+    fi'
+  postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; $ECHO \$dlname'\''`~
+    dlpath=$dir/\$dldll~
+    $RM \$dlpath'
   ;;
 
 osf3* | osf4* | osf5*)
   version_type=osf
   need_lib_prefix=no
   need_version=no
-  soname_spec='${libname}${release}${shared_ext}$major'
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='$libname$release$shared_ext$major'
+  library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
   shlibpath_var=LD_LIBRARY_PATH
   sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib"
-  sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec"
+  sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
   ;;
 
 rdos*)
@@ -2790,8 +3000,8 @@
   version_type=linux # correct to gnu/linux during the next big refactor
   need_lib_prefix=no
   need_version=no
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-  soname_spec='${libname}${release}${shared_ext}$major'
+  library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+  soname_spec='$libname$release$shared_ext$major'
   shlibpath_var=LD_LIBRARY_PATH
   shlibpath_overrides_runpath=yes
   hardcode_into_libs=yes
@@ -2801,11 +3011,11 @@
 
 sunos4*)
   version_type=sunos
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+  library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix'
   finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir'
   shlibpath_var=LD_LIBRARY_PATH
   shlibpath_overrides_runpath=yes
-  if test "$with_gnu_ld" = yes; then
+  if test yes = "$with_gnu_ld"; then
     need_lib_prefix=no
   fi
   need_version=yes
@@ -2813,8 +3023,8 @@
 
 sysv4 | sysv4.3*)
   version_type=linux # correct to gnu/linux during the next big refactor
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-  soname_spec='${libname}${release}${shared_ext}$major'
+  library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+  soname_spec='$libname$release$shared_ext$major'
   shlibpath_var=LD_LIBRARY_PATH
   case $host_vendor in
     sni)
@@ -2835,24 +3045,24 @@
   ;;
 
 sysv4*MP*)
-  if test -d /usr/nec ;then
+  if test -d /usr/nec; then
     version_type=linux # correct to gnu/linux during the next big refactor
-    library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}'
-    soname_spec='$libname${shared_ext}.$major'
+    library_names_spec='$libname$shared_ext.$versuffix $libname$shared_ext.$major $libname$shared_ext'
+    soname_spec='$libname$shared_ext.$major'
     shlibpath_var=LD_LIBRARY_PATH
   fi
   ;;
 
 sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
-  version_type=freebsd-elf
+  version_type=sco
   need_lib_prefix=no
   need_version=no
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}'
-  soname_spec='${libname}${release}${shared_ext}$major'
+  library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext $libname$shared_ext'
+  soname_spec='$libname$release$shared_ext$major'
   shlibpath_var=LD_LIBRARY_PATH
   shlibpath_overrides_runpath=yes
   hardcode_into_libs=yes
-  if test "$with_gnu_ld" = yes; then
+  if test yes = "$with_gnu_ld"; then
     sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib'
   else
     sys_lib_search_path_spec='/usr/ccs/lib /usr/lib'
@@ -2870,7 +3080,7 @@
   version_type=linux # correct to gnu/linux during the next big refactor
   need_lib_prefix=no
   need_version=no
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
   shlibpath_var=LD_LIBRARY_PATH
   shlibpath_overrides_runpath=no
   hardcode_into_libs=yes
@@ -2878,8 +3088,8 @@
 
 uts4*)
   version_type=linux # correct to gnu/linux during the next big refactor
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-  soname_spec='${libname}${release}${shared_ext}$major'
+  library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+  soname_spec='$libname$release$shared_ext$major'
   shlibpath_var=LD_LIBRARY_PATH
   ;;
 
@@ -2888,20 +3098,30 @@
   ;;
 esac
 AC_MSG_RESULT([$dynamic_linker])
-test "$dynamic_linker" = no && can_build_shared=no
+test no = "$dynamic_linker" && can_build_shared=no
 
 variables_saved_for_relink="PATH $shlibpath_var $runpath_var"
-if test "$GCC" = yes; then
+if test yes = "$GCC"; then
   variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH"
 fi
 
-if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then
-  sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec"
+if test set = "${lt_cv_sys_lib_search_path_spec+set}"; then
+  sys_lib_search_path_spec=$lt_cv_sys_lib_search_path_spec
 fi
-if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then
-  sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec"
+
+if test set = "${lt_cv_sys_lib_dlsearch_path_spec+set}"; then
+  sys_lib_dlsearch_path_spec=$lt_cv_sys_lib_dlsearch_path_spec
 fi
 
+# remember unaugmented sys_lib_dlsearch_path content for libtool script decls...
+configure_time_dlsearch_path=$sys_lib_dlsearch_path_spec
+
+# ... but it needs LT_SYS_LIBRARY_PATH munging for other configure-time code
+func_munge_path_list sys_lib_dlsearch_path_spec "$LT_SYS_LIBRARY_PATH"
+
+# to be used as default LT_SYS_LIBRARY_PATH value in generated libtool
+configure_time_lt_sys_library_path=$LT_SYS_LIBRARY_PATH
+
 _LT_DECL([], [variables_saved_for_relink], [1],
     [Variables whose values should be saved in libtool wrapper scripts and
     restored at link time])
@@ -2934,39 +3154,41 @@
     [Whether we should hardcode library paths into libraries])
 _LT_DECL([], [sys_lib_search_path_spec], [2],
     [Compile-time system search path for libraries])
-_LT_DECL([], [sys_lib_dlsearch_path_spec], [2],
-    [Run-time system search path for libraries])
+_LT_DECL([sys_lib_dlsearch_path_spec], [configure_time_dlsearch_path], [2],
+    [Detected run-time system search path for libraries])
+_LT_DECL([], [configure_time_lt_sys_library_path], [2],
+    [Explicit LT_SYS_LIBRARY_PATH set during ./configure time])
 ])# _LT_SYS_DYNAMIC_LINKER
 
 
 # _LT_PATH_TOOL_PREFIX(TOOL)
 # --------------------------
-# find a file program which can recognize shared library
+# find a file program that can recognize shared library
 AC_DEFUN([_LT_PATH_TOOL_PREFIX],
 [m4_require([_LT_DECL_EGREP])dnl
 AC_MSG_CHECKING([for $1])
 AC_CACHE_VAL(lt_cv_path_MAGIC_CMD,
 [case $MAGIC_CMD in
 [[\\/*] |  ?:[\\/]*])
-  lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path.
+  lt_cv_path_MAGIC_CMD=$MAGIC_CMD # Let the user override the test with a path.
   ;;
 *)
-  lt_save_MAGIC_CMD="$MAGIC_CMD"
-  lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+  lt_save_MAGIC_CMD=$MAGIC_CMD
+  lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR
 dnl $ac_dummy forces splitting on constant user-supplied paths.
 dnl POSIX.2 word splitting is done only on the output of word expansions,
 dnl not every word.  This closes a longstanding sh security hole.
   ac_dummy="m4_if([$2], , $PATH, [$2])"
   for ac_dir in $ac_dummy; do
-    IFS="$lt_save_ifs"
+    IFS=$lt_save_ifs
     test -z "$ac_dir" && ac_dir=.
-    if test -f $ac_dir/$1; then
-      lt_cv_path_MAGIC_CMD="$ac_dir/$1"
+    if test -f "$ac_dir/$1"; then
+      lt_cv_path_MAGIC_CMD=$ac_dir/"$1"
       if test -n "$file_magic_test_file"; then
 	case $deplibs_check_method in
 	"file_magic "*)
 	  file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"`
-	  MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
+	  MAGIC_CMD=$lt_cv_path_MAGIC_CMD
 	  if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null |
 	    $EGREP "$file_magic_regex" > /dev/null; then
 	    :
@@ -2989,11 +3211,11 @@
       break
     fi
   done
-  IFS="$lt_save_ifs"
-  MAGIC_CMD="$lt_save_MAGIC_CMD"
+  IFS=$lt_save_ifs
+  MAGIC_CMD=$lt_save_MAGIC_CMD
   ;;
 esac])
-MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
+MAGIC_CMD=$lt_cv_path_MAGIC_CMD
 if test -n "$MAGIC_CMD"; then
   AC_MSG_RESULT($MAGIC_CMD)
 else
@@ -3011,7 +3233,7 @@
 
 # _LT_PATH_MAGIC
 # --------------
-# find a file program which can recognize a shared library
+# find a file program that can recognize a shared library
 m4_defun([_LT_PATH_MAGIC],
 [_LT_PATH_TOOL_PREFIX(${ac_tool_prefix}file, /usr/bin$PATH_SEPARATOR$PATH)
 if test -z "$lt_cv_path_MAGIC_CMD"; then
@@ -3038,16 +3260,16 @@
 AC_ARG_WITH([gnu-ld],
     [AS_HELP_STRING([--with-gnu-ld],
 	[assume the C compiler uses GNU ld @<:@default=no@:>@])],
-    [test "$withval" = no || with_gnu_ld=yes],
+    [test no = "$withval" || with_gnu_ld=yes],
     [with_gnu_ld=no])dnl
 
 ac_prog=ld
-if test "$GCC" = yes; then
+if test yes = "$GCC"; then
   # Check if gcc -print-prog-name=ld gives a path.
   AC_MSG_CHECKING([for ld used by $CC])
   case $host in
   *-*-mingw*)
-    # gcc leaves a trailing carriage return which upsets mingw
+    # gcc leaves a trailing carriage return, which upsets mingw
     ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;;
   *)
     ac_prog=`($CC -print-prog-name=ld) 2>&5` ;;
@@ -3061,7 +3283,7 @@
       while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do
 	ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"`
       done
-      test -z "$LD" && LD="$ac_prog"
+      test -z "$LD" && LD=$ac_prog
       ;;
   "")
     # If it fails, then pretend we aren't using GCC.
@@ -3072,37 +3294,37 @@
     with_gnu_ld=unknown
     ;;
   esac
-elif test "$with_gnu_ld" = yes; then
+elif test yes = "$with_gnu_ld"; then
   AC_MSG_CHECKING([for GNU ld])
 else
   AC_MSG_CHECKING([for non-GNU ld])
 fi
 AC_CACHE_VAL(lt_cv_path_LD,
 [if test -z "$LD"; then
-  lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+  lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR
   for ac_dir in $PATH; do
-    IFS="$lt_save_ifs"
+    IFS=$lt_save_ifs
     test -z "$ac_dir" && ac_dir=.
     if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then
-      lt_cv_path_LD="$ac_dir/$ac_prog"
+      lt_cv_path_LD=$ac_dir/$ac_prog
       # Check to see if the program is GNU ld.  I'd rather use --version,
       # but apparently some variants of GNU ld only accept -v.
       # Break only if it was the GNU/non-GNU ld that we prefer.
       case `"$lt_cv_path_LD" -v 2>&1 </dev/null` in
       *GNU* | *'with BFD'*)
-	test "$with_gnu_ld" != no && break
+	test no != "$with_gnu_ld" && break
 	;;
       *)
-	test "$with_gnu_ld" != yes && break
+	test yes != "$with_gnu_ld" && break
 	;;
       esac
     fi
   done
-  IFS="$lt_save_ifs"
+  IFS=$lt_save_ifs
 else
-  lt_cv_path_LD="$LD" # Let the user override the test with a path.
+  lt_cv_path_LD=$LD # Let the user override the test with a path.
 fi])
-LD="$lt_cv_path_LD"
+LD=$lt_cv_path_LD
 if test -n "$LD"; then
   AC_MSG_RESULT($LD)
 else
@@ -3156,13 +3378,13 @@
 reload_cmds='$LD$reload_flag -o $output$reload_objs'
 case $host_os in
   cygwin* | mingw* | pw32* | cegcc*)
-    if test "$GCC" != yes; then
+    if test yes != "$GCC"; then
       reload_cmds=false
     fi
     ;;
   darwin*)
-    if test "$GCC" = yes; then
-      reload_cmds='$LTCC $LTCFLAGS -nostdlib ${wl}-r -o $output$reload_objs'
+    if test yes = "$GCC"; then
+      reload_cmds='$LTCC $LTCFLAGS -nostdlib $wl-r -o $output$reload_objs'
     else
       reload_cmds='$LD$reload_flag -o $output$reload_objs'
     fi
@@ -3173,6 +3395,43 @@
 ])# _LT_CMD_RELOAD
 
 
+# _LT_PATH_DD
+# -----------
+# find a working dd
+m4_defun([_LT_PATH_DD],
+[AC_CACHE_CHECK([for a working dd], [ac_cv_path_lt_DD],
+[printf 0123456789abcdef0123456789abcdef >conftest.i
+cat conftest.i conftest.i >conftest2.i
+: ${lt_DD:=$DD}
+AC_PATH_PROGS_FEATURE_CHECK([lt_DD], [dd],
+[if "$ac_path_lt_DD" bs=32 count=1 <conftest2.i >conftest.out 2>/dev/null; then
+  cmp -s conftest.i conftest.out \
+  && ac_cv_path_lt_DD="$ac_path_lt_DD" ac_path_lt_DD_found=:
+fi])
+rm -f conftest.i conftest2.i conftest.out])
+])# _LT_PATH_DD
+
+
+# _LT_CMD_TRUNCATE
+# ----------------
+# find command to truncate a binary pipe
+m4_defun([_LT_CMD_TRUNCATE],
+[m4_require([_LT_PATH_DD])
+AC_CACHE_CHECK([how to truncate binary pipes], [lt_cv_truncate_bin],
+[printf 0123456789abcdef0123456789abcdef >conftest.i
+cat conftest.i conftest.i >conftest2.i
+lt_cv_truncate_bin=
+if "$ac_cv_path_lt_DD" bs=32 count=1 <conftest2.i >conftest.out 2>/dev/null; then
+  cmp -s conftest.i conftest.out \
+  && lt_cv_truncate_bin="$ac_cv_path_lt_DD bs=4096 count=1"
+fi
+rm -f conftest.i conftest2.i conftest.out
+test -z "$lt_cv_truncate_bin" && lt_cv_truncate_bin="$SED -e 4q"])
+_LT_DECL([lt_truncate_bin], [lt_cv_truncate_bin], [1],
+  [Command to truncate a binary pipe])
+])# _LT_CMD_TRUNCATE
+
+
 # _LT_CHECK_MAGIC_METHOD
 # ----------------------
 # how to check for library dependencies
@@ -3188,13 +3447,13 @@
 # Need to set the preceding variable on all platforms that support
 # interlibrary dependencies.
 # 'none' -- dependencies not supported.
-# `unknown' -- same as none, but documents that we really don't know.
+# 'unknown' -- same as none, but documents that we really don't know.
 # 'pass_all' -- all dependencies passed with no checks.
 # 'test_compile' -- check by making test program.
 # 'file_magic [[regex]]' -- check by looking for files in library path
-# which responds to the $file_magic_cmd with a given extended regex.
-# If you have `file' or equivalent on your system and you're not sure
-# whether `pass_all' will *always* work, you probably want this one.
+# that responds to the $file_magic_cmd with a given extended regex.
+# If you have 'file' or equivalent on your system and you're not sure
+# whether 'pass_all' will *always* work, you probably want this one.
 
 case $host_os in
 aix[[4-9]]*)
@@ -3221,8 +3480,7 @@
   # Base MSYS/MinGW do not provide the 'file' command needed by
   # func_win32_libid shell function, so use a weaker test based on 'objdump',
   # unless we find 'file', for example because we are cross-compiling.
-  # func_win32_libid assumes BSD nm, so disallow it if using MS dumpbin.
-  if ( test "$lt_cv_nm_interface" = "BSD nm" && file / ) >/dev/null 2>&1; then
+  if ( file / ) >/dev/null 2>&1; then
     lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL'
     lt_cv_file_magic_cmd='func_win32_libid'
   else
@@ -3318,8 +3576,8 @@
   lt_cv_deplibs_check_method=pass_all
   ;;
 
-openbsd*)
-  if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+openbsd* | bitrig*)
+  if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then
     lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|\.so|_pic\.a)$'
   else
     lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$'
@@ -3372,6 +3630,9 @@
 tpf*)
   lt_cv_deplibs_check_method=pass_all
   ;;
+os2*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
 esac
 ])
 
@@ -3412,33 +3673,38 @@
 AC_CACHE_CHECK([for BSD- or MS-compatible name lister (nm)], lt_cv_path_NM,
 [if test -n "$NM"; then
   # Let the user override the test.
-  lt_cv_path_NM="$NM"
+  lt_cv_path_NM=$NM
 else
-  lt_nm_to_check="${ac_tool_prefix}nm"
+  lt_nm_to_check=${ac_tool_prefix}nm
   if test -n "$ac_tool_prefix" && test "$build" = "$host"; then
     lt_nm_to_check="$lt_nm_to_check nm"
   fi
   for lt_tmp_nm in $lt_nm_to_check; do
-    lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+    lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR
     for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do
-      IFS="$lt_save_ifs"
+      IFS=$lt_save_ifs
       test -z "$ac_dir" && ac_dir=.
-      tmp_nm="$ac_dir/$lt_tmp_nm"
-      if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then
+      tmp_nm=$ac_dir/$lt_tmp_nm
+      if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext"; then
 	# Check to see if the nm accepts a BSD-compat flag.
-	# Adding the `sed 1q' prevents false positives on HP-UX, which says:
+	# Adding the 'sed 1q' prevents false positives on HP-UX, which says:
 	#   nm: unknown option "B" ignored
 	# Tru64's nm complains that /dev/null is an invalid object file
-	case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in
-	*/dev/null* | *'Invalid file or object type'*)
+	# MSYS converts /dev/null to NUL, MinGW nm treats NUL as empty
+	case $build_os in
+	mingw*) lt_bad_file=conftest.nm/nofile ;;
+	*) lt_bad_file=/dev/null ;;
+	esac
+	case `"$tmp_nm" -B $lt_bad_file 2>&1 | sed '1q'` in
+	*$lt_bad_file* | *'Invalid file or object type'*)
 	  lt_cv_path_NM="$tmp_nm -B"
-	  break
+	  break 2
 	  ;;
 	*)
 	  case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in
 	  */dev/null*)
 	    lt_cv_path_NM="$tmp_nm -p"
-	    break
+	    break 2
 	    ;;
 	  *)
 	    lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but
@@ -3449,21 +3715,21 @@
 	esac
       fi
     done
-    IFS="$lt_save_ifs"
+    IFS=$lt_save_ifs
   done
   : ${lt_cv_path_NM=no}
 fi])
-if test "$lt_cv_path_NM" != "no"; then
-  NM="$lt_cv_path_NM"
+if test no != "$lt_cv_path_NM"; then
+  NM=$lt_cv_path_NM
 else
   # Didn't find any BSD compatible name lister, look for dumpbin.
   if test -n "$DUMPBIN"; then :
     # Let the user override the test.
   else
     AC_CHECK_TOOLS(DUMPBIN, [dumpbin "link -dump"], :)
-    case `$DUMPBIN -symbols /dev/null 2>&1 | sed '1q'` in
+    case `$DUMPBIN -symbols -headers /dev/null 2>&1 | sed '1q'` in
     *COFF*)
-      DUMPBIN="$DUMPBIN -symbols"
+      DUMPBIN="$DUMPBIN -symbols -headers"
       ;;
     *)
       DUMPBIN=:
@@ -3471,8 +3737,8 @@
     esac
   fi
   AC_SUBST([DUMPBIN])
-  if test "$DUMPBIN" != ":"; then
-    NM="$DUMPBIN"
+  if test : != "$DUMPBIN"; then
+    NM=$DUMPBIN
   fi
 fi
 test -z "$NM" && NM=nm
@@ -3518,8 +3784,8 @@
 
 case $host_os in
 cygwin* | mingw* | pw32* | cegcc*)
-  # two different shell functions defined in ltmain.sh
-  # decide which to use based on capabilities of $DLLTOOL
+  # two different shell functions defined in ltmain.sh;
+  # decide which one to use based on capabilities of $DLLTOOL
   case `$DLLTOOL --help 2>&1` in
   *--identify-strict*)
     lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib
@@ -3531,7 +3797,7 @@
   ;;
 *)
   # fallback: assume linklib IS sharedlib
-  lt_cv_sharedlib_from_linklib_cmd="$ECHO"
+  lt_cv_sharedlib_from_linklib_cmd=$ECHO
   ;;
 esac
 ])
@@ -3558,13 +3824,28 @@
     lt_cv_path_mainfest_tool=yes
   fi
   rm -f conftest*])
-if test "x$lt_cv_path_mainfest_tool" != xyes; then
+if test yes != "$lt_cv_path_mainfest_tool"; then
   MANIFEST_TOOL=:
 fi
 _LT_DECL([], [MANIFEST_TOOL], [1], [Manifest tool])dnl
 ])# _LT_PATH_MANIFEST_TOOL
 
 
+# _LT_DLL_DEF_P([FILE])
+# ---------------------
+# True iff FILE is a Windows DLL '.def' file.
+# Keep in sync with func_dll_def_p in the libtool script
+AC_DEFUN([_LT_DLL_DEF_P],
+[dnl
+  test DEF = "`$SED -n dnl
+    -e '\''s/^[[	 ]]*//'\'' dnl Strip leading whitespace
+    -e '\''/^\(;.*\)*$/d'\'' dnl      Delete empty lines and comments
+    -e '\''s/^\(EXPORTS\|LIBRARY\)\([[	 ]].*\)*$/DEF/p'\'' dnl
+    -e q dnl                          Only consider the first "real" line
+    $1`" dnl
+])# _LT_DLL_DEF_P
+
+
 # LT_LIB_M
 # --------
 # check for math library
@@ -3576,11 +3857,11 @@
   # These system don't have libm, or don't need it
   ;;
 *-ncr-sysv4.3*)
-  AC_CHECK_LIB(mw, _mwvalidcheckl, LIBM="-lmw")
+  AC_CHECK_LIB(mw, _mwvalidcheckl, LIBM=-lmw)
   AC_CHECK_LIB(m, cos, LIBM="$LIBM -lm")
   ;;
 *)
-  AC_CHECK_LIB(m, cos, LIBM="-lm")
+  AC_CHECK_LIB(m, cos, LIBM=-lm)
   ;;
 esac
 AC_SUBST([LIBM])
@@ -3599,7 +3880,7 @@
 
 _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=
 
-if test "$GCC" = yes; then
+if test yes = "$GCC"; then
   case $cc_basename in
   nvcc*)
     _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -Xcompiler -fno-builtin' ;;
@@ -3651,7 +3932,7 @@
   symcode='[[ABCDGISTW]]'
   ;;
 hpux*)
-  if test "$host_cpu" = ia64; then
+  if test ia64 = "$host_cpu"; then
     symcode='[[ABCDEGRST]]'
   fi
   ;;
@@ -3684,14 +3965,44 @@
   symcode='[[ABCDGIRSTW]]' ;;
 esac
 
+if test "$lt_cv_nm_interface" = "MS dumpbin"; then
+  # Gets list of data symbols to import.
+  lt_cv_sys_global_symbol_to_import="sed -n -e 's/^I .* \(.*\)$/\1/p'"
+  # Adjust the below global symbol transforms to fixup imported variables.
+  lt_cdecl_hook=" -e 's/^I .* \(.*\)$/extern __declspec(dllimport) char \1;/p'"
+  lt_c_name_hook=" -e 's/^I .* \(.*\)$/  {\"\1\", (void *) 0},/p'"
+  lt_c_name_lib_hook="\
+  -e 's/^I .* \(lib.*\)$/  {\"\1\", (void *) 0},/p'\
+  -e 's/^I .* \(.*\)$/  {\"lib\1\", (void *) 0},/p'"
+else
+  # Disable hooks by default.
+  lt_cv_sys_global_symbol_to_import=
+  lt_cdecl_hook=
+  lt_c_name_hook=
+  lt_c_name_lib_hook=
+fi
+
 # Transform an extracted symbol line into a proper C declaration.
 # Some systems (esp. on ia64) link data and code symbols differently,
 # so use this general approach.
-lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'"
+lt_cv_sys_global_symbol_to_cdecl="sed -n"\
+$lt_cdecl_hook\
+" -e 's/^T .* \(.*\)$/extern int \1();/p'"\
+" -e 's/^$symcode$symcode* .* \(.*\)$/extern char \1;/p'"
 
 # Transform an extracted symbol line into symbol name and symbol address
-lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([[^ ]]*\)[[ ]]*$/  {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/  {\"\2\", (void *) \&\2},/p'"
-lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([[^ ]]*\)[[ ]]*$/  {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \(lib[[^ ]]*\)$/  {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/  {\"lib\2\", (void *) \&\2},/p'"
+lt_cv_sys_global_symbol_to_c_name_address="sed -n"\
+$lt_c_name_hook\
+" -e 's/^: \(.*\) .*$/  {\"\1\", (void *) 0},/p'"\
+" -e 's/^$symcode$symcode* .* \(.*\)$/  {\"\1\", (void *) \&\1},/p'"
+
+# Transform an extracted symbol line into symbol name with lib prefix and
+# symbol address.
+lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n"\
+$lt_c_name_lib_hook\
+" -e 's/^: \(.*\) .*$/  {\"\1\", (void *) 0},/p'"\
+" -e 's/^$symcode$symcode* .* \(lib.*\)$/  {\"\1\", (void *) \&\1},/p'"\
+" -e 's/^$symcode$symcode* .* \(.*\)$/  {\"lib\1\", (void *) \&\1},/p'"
 
 # Handle CRLF in mingw tool chain
 opt_cr=
@@ -3709,21 +4020,24 @@
 
   # Write the raw and C identifiers.
   if test "$lt_cv_nm_interface" = "MS dumpbin"; then
-    # Fake it for dumpbin and say T for any non-static function
-    # and D for any global variable.
+    # Fake it for dumpbin and say T for any non-static function,
+    # D for any global variable and I for any imported variable.
     # Also find C++ and __fastcall symbols from MSVC++,
     # which start with @ or ?.
     lt_cv_sys_global_symbol_pipe="$AWK ['"\
 "     {last_section=section; section=\$ 3};"\
 "     /^COFF SYMBOL TABLE/{for(i in hide) delete hide[i]};"\
 "     /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\
+"     /^ *Symbol name *: /{split(\$ 0,sn,\":\"); si=substr(sn[2],2)};"\
+"     /^ *Type *: code/{print \"T\",si,substr(si,length(prfx))};"\
+"     /^ *Type *: data/{print \"I\",si,substr(si,length(prfx))};"\
 "     \$ 0!~/External *\|/{next};"\
 "     / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\
 "     {if(hide[section]) next};"\
-"     {f=0}; \$ 0~/\(\).*\|/{f=1}; {printf f ? \"T \" : \"D \"};"\
-"     {split(\$ 0, a, /\||\r/); split(a[2], s)};"\
-"     s[1]~/^[@?]/{print s[1], s[1]; next};"\
-"     s[1]~prfx {split(s[1],t,\"@\"); print t[1], substr(t[1],length(prfx))}"\
+"     {f=\"D\"}; \$ 0~/\(\).*\|/{f=\"T\"};"\
+"     {split(\$ 0,a,/\||\r/); split(a[2],s)};"\
+"     s[1]~/^[@?]/{print f,s[1],s[1]; next};"\
+"     s[1]~prfx {split(s[1],t,\"@\"); print f,t[1],substr(t[1],length(prfx))}"\
 "     ' prfx=^$ac_symprfx]"
   else
     lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[[	 ]]\($symcode$symcode*\)[[	 ]][[	 ]]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'"
@@ -3763,11 +4077,11 @@
 	if $GREP ' nm_test_func$' "$nlist" >/dev/null; then
 	  cat <<_LT_EOF > conftest.$ac_ext
 /* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests.  */
-#if defined(_WIN32) || defined(__CYGWIN__) || defined(_WIN32_WCE)
-/* DATA imports from DLLs on WIN32 con't be const, because runtime
+#if defined _WIN32 || defined __CYGWIN__ || defined _WIN32_WCE
+/* DATA imports from DLLs on WIN32 can't be const, because runtime
    relocations are performed -- see ld's documentation on pseudo-relocs.  */
 # define LT@&t@_DLSYM_CONST
-#elif defined(__osf__)
+#elif defined __osf__
 /* This system does not cope well with relocations in const data.  */
 # define LT@&t@_DLSYM_CONST
 #else
@@ -3793,7 +4107,7 @@
 {
   { "@PROGRAM@", (void *) 0 },
 _LT_EOF
-	  $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/  {\"\2\", (void *) \&\2},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext
+	  $SED "s/^$symcode$symcode* .* \(.*\)$/  {\"\1\", (void *) \&\1},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext
 	  cat <<\_LT_EOF >> conftest.$ac_ext
   {0, (void *) 0}
 };
@@ -3813,9 +4127,9 @@
 	  mv conftest.$ac_objext conftstm.$ac_objext
 	  lt_globsym_save_LIBS=$LIBS
 	  lt_globsym_save_CFLAGS=$CFLAGS
-	  LIBS="conftstm.$ac_objext"
+	  LIBS=conftstm.$ac_objext
 	  CFLAGS="$CFLAGS$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)"
-	  if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext}; then
+	  if AC_TRY_EVAL(ac_link) && test -s conftest$ac_exeext; then
 	    pipe_works=yes
 	  fi
 	  LIBS=$lt_globsym_save_LIBS
@@ -3836,7 +4150,7 @@
   rm -rf conftest* conftst*
 
   # Do not use the global_symbol_pipe unless it works.
-  if test "$pipe_works" = yes; then
+  if test yes = "$pipe_works"; then
     break
   else
     lt_cv_sys_global_symbol_pipe=
@@ -3863,12 +4177,16 @@
     [Take the output of nm and produce a listing of raw symbols and C names])
 _LT_DECL([global_symbol_to_cdecl], [lt_cv_sys_global_symbol_to_cdecl], [1],
     [Transform the output of nm in a proper C declaration])
+_LT_DECL([global_symbol_to_import], [lt_cv_sys_global_symbol_to_import], [1],
+    [Transform the output of nm into a list of symbols to manually relocate])
 _LT_DECL([global_symbol_to_c_name_address],
     [lt_cv_sys_global_symbol_to_c_name_address], [1],
     [Transform the output of nm in a C name address pair])
 _LT_DECL([global_symbol_to_c_name_address_lib_prefix],
     [lt_cv_sys_global_symbol_to_c_name_address_lib_prefix], [1],
     [Transform the output of nm in a C name address pair when lib prefix is needed])
+_LT_DECL([nm_interface], [lt_cv_nm_interface], [1],
+    [The name lister interface])
 _LT_DECL([], [nm_file_list_spec], [1],
     [Specify filename containing input files for $NM])
 ]) # _LT_CMD_GLOBAL_SYMBOLS
@@ -3884,17 +4202,18 @@
 
 m4_if([$1], [CXX], [
   # C++ specific cases for pic, static, wl, etc.
-  if test "$GXX" = yes; then
+  if test yes = "$GXX"; then
     _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
     _LT_TAGVAR(lt_prog_compiler_static, $1)='-static'
 
     case $host_os in
     aix*)
       # All AIX code is PIC.
-      if test "$host_cpu" = ia64; then
+      if test ia64 = "$host_cpu"; then
 	# AIX 5 now supports IA64 processor
 	_LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
       fi
+      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
       ;;
 
     amigaos*)
@@ -3905,8 +4224,8 @@
         ;;
       m68k)
             # FIXME: we need at least 68020 code to build shared libraries, but
-            # adding the `-m68020' flag to GCC prevents building anything better,
-            # like `-m68040'.
+            # adding the '-m68020' flag to GCC prevents building anything better,
+            # like '-m68040'.
             _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4'
         ;;
       esac
@@ -3922,6 +4241,11 @@
       # (--disable-auto-import) libraries
       m4_if([$1], [GCJ], [],
 	[_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT'])
+      case $host_os in
+      os2*)
+	_LT_TAGVAR(lt_prog_compiler_static, $1)='$wl-static'
+	;;
+      esac
       ;;
     darwin* | rhapsody*)
       # PIC is the default on this platform
@@ -3971,7 +4295,7 @@
     case $host_os in
       aix[[4-9]]*)
 	# All AIX code is PIC.
-	if test "$host_cpu" = ia64; then
+	if test ia64 = "$host_cpu"; then
 	  # AIX 5 now supports IA64 processor
 	  _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
 	else
@@ -4012,14 +4336,14 @@
 	case $cc_basename in
 	  CC*)
 	    _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
-	    _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive'
-	    if test "$host_cpu" != ia64; then
+	    _LT_TAGVAR(lt_prog_compiler_static, $1)='$wl-a ${wl}archive'
+	    if test ia64 != "$host_cpu"; then
 	      _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z'
 	    fi
 	    ;;
 	  aCC*)
 	    _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
-	    _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive'
+	    _LT_TAGVAR(lt_prog_compiler_static, $1)='$wl-a ${wl}archive'
 	    case $host_cpu in
 	    hppa*64*|ia64*)
 	      # +Z the default
@@ -4056,7 +4380,7 @@
 	    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
 	    ;;
 	  ecpc* )
-	    # old Intel C++ for x86_64 which still supported -KPIC.
+	    # old Intel C++ for x86_64, which still supported -KPIC.
 	    _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
 	    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
 	    _LT_TAGVAR(lt_prog_compiler_static, $1)='-static'
@@ -4201,17 +4525,18 @@
   fi
 ],
 [
-  if test "$GCC" = yes; then
+  if test yes = "$GCC"; then
     _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
     _LT_TAGVAR(lt_prog_compiler_static, $1)='-static'
 
     case $host_os in
       aix*)
       # All AIX code is PIC.
-      if test "$host_cpu" = ia64; then
+      if test ia64 = "$host_cpu"; then
 	# AIX 5 now supports IA64 processor
 	_LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
       fi
+      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
       ;;
 
     amigaos*)
@@ -4222,8 +4547,8 @@
         ;;
       m68k)
             # FIXME: we need at least 68020 code to build shared libraries, but
-            # adding the `-m68020' flag to GCC prevents building anything better,
-            # like `-m68040'.
+            # adding the '-m68020' flag to GCC prevents building anything better,
+            # like '-m68040'.
             _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4'
         ;;
       esac
@@ -4240,6 +4565,11 @@
       # (--disable-auto-import) libraries
       m4_if([$1], [GCJ], [],
 	[_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT'])
+      case $host_os in
+      os2*)
+	_LT_TAGVAR(lt_prog_compiler_static, $1)='$wl-static'
+	;;
+      esac
       ;;
 
     darwin* | rhapsody*)
@@ -4310,7 +4640,7 @@
     case $host_os in
     aix*)
       _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
-      if test "$host_cpu" = ia64; then
+      if test ia64 = "$host_cpu"; then
 	# AIX 5 now supports IA64 processor
 	_LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
       else
@@ -4318,11 +4648,30 @@
       fi
       ;;
 
+    darwin* | rhapsody*)
+      # PIC is the default on this platform
+      # Common symbols not allowed in MH_DYLIB files
+      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common'
+      case $cc_basename in
+      nagfor*)
+        # NAG Fortran compiler
+        _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,-Wl,,'
+        _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC'
+        _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+        ;;
+      esac
+      ;;
+
     mingw* | cygwin* | pw32* | os2* | cegcc*)
       # This hack is so that the source file can tell whether it is being
       # built for inclusion in a dll (and should export symbols for example).
       m4_if([$1], [GCJ], [],
 	[_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT'])
+      case $host_os in
+      os2*)
+	_LT_TAGVAR(lt_prog_compiler_static, $1)='$wl-static'
+	;;
+      esac
       ;;
 
     hpux9* | hpux10* | hpux11*)
@@ -4338,7 +4687,7 @@
 	;;
       esac
       # Is there a better lt_prog_compiler_static that works with the bundled CC?
-      _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive'
+      _LT_TAGVAR(lt_prog_compiler_static, $1)='$wl-a ${wl}archive'
       ;;
 
     irix5* | irix6* | nonstopux*)
@@ -4349,7 +4698,7 @@
 
     linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*)
       case $cc_basename in
-      # old Intel for x86_64 which still supported -KPIC.
+      # old Intel for x86_64, which still supported -KPIC.
       ecc*)
 	_LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
 	_LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
@@ -4374,6 +4723,12 @@
 	_LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC'
 	_LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
 	;;
+      tcc*)
+	# Fabrice Bellard et al's Tiny C Compiler
+	_LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+	_LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+	_LT_TAGVAR(lt_prog_compiler_static, $1)='-static'
+	;;
       pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*)
         # Portland Group compilers (*not* the Pentium gcc compiler,
 	# which looks to be a dead project)
@@ -4471,7 +4826,7 @@
       ;;
 
     sysv4*MP*)
-      if test -d /usr/nec ;then
+      if test -d /usr/nec; then
 	_LT_TAGVAR(lt_prog_compiler_pic, $1)='-Kconform_pic'
 	_LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
       fi
@@ -4500,7 +4855,7 @@
   fi
 ])
 case $host_os in
-  # For platforms which do not support PIC, -DPIC is meaningless:
+  # For platforms that do not support PIC, -DPIC is meaningless:
   *djgpp*)
     _LT_TAGVAR(lt_prog_compiler_pic, $1)=
     ;;
@@ -4566,17 +4921,21 @@
   case $host_os in
   aix[[4-9]]*)
     # If we're using GNU nm, then we don't want the "-C" option.
-    # -C means demangle to AIX nm, but means don't demangle with GNU nm
-    # Also, AIX nm treats weak defined symbols like other global defined
-    # symbols, whereas GNU nm marks them as "W".
+    # -C means demangle to GNU nm, but means don't demangle to AIX nm.
+    # Without the "-l" option, or with the "-B" option, AIX nm treats
+    # weak defined symbols like other global defined symbols, whereas
+    # GNU nm marks them as "W".
+    # While the 'weak' keyword is ignored in the Export File, we need
+    # it in the Import File for the 'aix-soname' feature, so we have
+    # to replace the "-B" option with "-P" for AIX nm.
     if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then
-      _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
+      _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && ([substr](\$ 3,1,1) != ".")) { if (\$ 2 == "W") { print \$ 3 " weak" } else { print \$ 3 } } }'\'' | sort -u > $export_symbols'
     else
-      _LT_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
+      _LT_TAGVAR(export_symbols_cmds, $1)='`func_echo_all $NM | $SED -e '\''s/B\([[^B]]*\)$/P\1/'\''` -PCpgl $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) && ([substr](\$ 1,1,1) != ".")) { if ((\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) { print \$ 1 " weak" } else { print \$ 1 } } }'\'' | sort -u > $export_symbols'
     fi
     ;;
   pw32*)
-    _LT_TAGVAR(export_symbols_cmds, $1)="$ltdll_cmds"
+    _LT_TAGVAR(export_symbols_cmds, $1)=$ltdll_cmds
     ;;
   cygwin* | mingw* | cegcc*)
     case $cc_basename in
@@ -4625,9 +4984,9 @@
   # included in the symbol list
   _LT_TAGVAR(include_expsyms, $1)=
   # exclude_expsyms can be an extended regexp of symbols to exclude
-  # it will be wrapped by ` (' and `)$', so one must not match beginning or
-  # end of line.  Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc',
-  # as well as any symbol that contains `d'.
+  # it will be wrapped by ' (' and ')$', so one must not match beginning or
+  # end of line.  Example: 'a|bc|.*d.*' will exclude the symbols 'a' and 'bc',
+  # as well as any symbol that contains 'd'.
   _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*']
   # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out
   # platforms (ab)use it in PIC code, but their linkers get confused if
@@ -4643,7 +5002,7 @@
     # FIXME: the MSVC++ port hasn't been tested in a loooong time
     # When not using gcc, we currently assume that we are using
     # Microsoft Visual C++.
-    if test "$GCC" != yes; then
+    if test yes != "$GCC"; then
       with_gnu_ld=no
     fi
     ;;
@@ -4651,7 +5010,7 @@
     # we just hope/assume this is gcc and not c89 (= MSVC++)
     with_gnu_ld=yes
     ;;
-  openbsd*)
+  openbsd* | bitrig*)
     with_gnu_ld=no
     ;;
   linux* | k*bsd*-gnu | gnu*)
@@ -4664,7 +5023,7 @@
   # On some targets, GNU ld is compatible enough with the native linker
   # that we're better off using the native interface for both.
   lt_use_gnu_ld_interface=no
-  if test "$with_gnu_ld" = yes; then
+  if test yes = "$with_gnu_ld"; then
     case $host_os in
       aix*)
 	# The AIX port of GNU ld has always aspired to compatibility
@@ -4686,24 +5045,24 @@
     esac
   fi
 
-  if test "$lt_use_gnu_ld_interface" = yes; then
+  if test yes = "$lt_use_gnu_ld_interface"; then
     # If archive_cmds runs LD, not CC, wlarc should be empty
-    wlarc='${wl}'
+    wlarc='$wl'
 
     # Set some defaults for GNU ld with shared library support. These
     # are reset later if shared libraries are not supported. Putting them
     # here allows them to be overridden if necessary.
     runpath_var=LD_RUN_PATH
-    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
-    _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
+    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir'
+    _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-dynamic'
     # ancient GNU ld didn't support --whole-archive et. al.
     if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then
-      _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
+      _LT_TAGVAR(whole_archive_flag_spec, $1)=$wlarc'--whole-archive$convenience '$wlarc'--no-whole-archive'
     else
       _LT_TAGVAR(whole_archive_flag_spec, $1)=
     fi
     supports_anon_versioning=no
-    case `$LD -v 2>&1` in
+    case `$LD -v | $SED -e 's/([^)]\+)\s\+//' 2>&1` in
       *GNU\ gold*) supports_anon_versioning=yes ;;
       *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.10.*) ;; # catch versions < 2.11
       *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ...
@@ -4716,7 +5075,7 @@
     case $host_os in
     aix[[3-9]]*)
       # On AIX/PPC, the GNU linker is very broken
-      if test "$host_cpu" != ia64; then
+      if test ia64 != "$host_cpu"; then
 	_LT_TAGVAR(ld_shlibs, $1)=no
 	cat <<_LT_EOF 1>&2
 
@@ -4735,7 +5094,7 @@
       case $host_cpu in
       powerpc)
             # see comment about AmigaOS4 .so support
-            _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+            _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib'
             _LT_TAGVAR(archive_expsym_cmds, $1)=''
         ;;
       m68k)
@@ -4751,7 +5110,7 @@
 	_LT_TAGVAR(allow_undefined_flag, $1)=unsupported
 	# Joseph Beckenbach <jrb3@best.com> says some releases of gcc
 	# support --undefined.  This deserves some investigation.  FIXME
-	_LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+	_LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib'
       else
 	_LT_TAGVAR(ld_shlibs, $1)=no
       fi
@@ -4761,7 +5120,7 @@
       # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless,
       # as there is no search path for DLLs.
       _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
-      _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-all-symbols'
+      _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-all-symbols'
       _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
       _LT_TAGVAR(always_export_symbols, $1)=no
       _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
@@ -4769,61 +5128,89 @@
       _LT_TAGVAR(exclude_expsyms, $1)=['[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname']
 
       if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then
-        _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
-	# If the export-symbols file already is a .def file (1st line
-	# is EXPORTS), use it as is; otherwise, prepend...
-	_LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
-	  cp $export_symbols $output_objdir/$soname.def;
-	else
-	  echo EXPORTS > $output_objdir/$soname.def;
-	  cat $export_symbols >> $output_objdir/$soname.def;
-	fi~
-	$CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+        _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+	# If the export-symbols file already is a .def file, use it as
+	# is; otherwise, prepend EXPORTS...
+	_LT_TAGVAR(archive_expsym_cmds, $1)='if _LT_DLL_DEF_P([$export_symbols]); then
+          cp $export_symbols $output_objdir/$soname.def;
+        else
+          echo EXPORTS > $output_objdir/$soname.def;
+          cat $export_symbols >> $output_objdir/$soname.def;
+        fi~
+        $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
       else
 	_LT_TAGVAR(ld_shlibs, $1)=no
       fi
       ;;
 
     haiku*)
-      _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+      _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib'
       _LT_TAGVAR(link_all_deplibs, $1)=yes
       ;;
 
+    os2*)
+      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+      _LT_TAGVAR(hardcode_minus_L, $1)=yes
+      _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
+      shrext_cmds=.dll
+      _LT_TAGVAR(archive_cmds, $1)='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~
+	$ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~
+	$ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~
+	$ECHO EXPORTS >> $output_objdir/$libname.def~
+	emxexp $libobjs | $SED /"_DLL_InitTerm"/d >> $output_objdir/$libname.def~
+	$CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~
+	emximp -o $lib $output_objdir/$libname.def'
+      _LT_TAGVAR(archive_expsym_cmds, $1)='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~
+	$ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~
+	$ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~
+	$ECHO EXPORTS >> $output_objdir/$libname.def~
+	prefix_cmds="$SED"~
+	if test EXPORTS = "`$SED 1q $export_symbols`"; then
+	  prefix_cmds="$prefix_cmds -e 1d";
+	fi~
+	prefix_cmds="$prefix_cmds -e \"s/^\(.*\)$/_\1/g\""~
+	cat $export_symbols | $prefix_cmds >> $output_objdir/$libname.def~
+	$CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~
+	emximp -o $lib $output_objdir/$libname.def'
+      _LT_TAGVAR(old_archive_From_new_cmds, $1)='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def'
+      _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
+      ;;
+
     interix[[3-9]]*)
       _LT_TAGVAR(hardcode_direct, $1)=no
       _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
-      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
-      _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir'
+      _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E'
       # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc.
       # Instead, shared libraries are loaded at an image base (0x10000000 by
       # default) and relocated if they conflict, which is a slow very memory
       # consuming and fragmenting process.  To avoid this, we pick a random,
       # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link
       # time.  Moving up from 0x10000000 also allows more sbrk(2) space.
-      _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
-      _LT_TAGVAR(archive_expsym_cmds, $1)='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
+      _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
+      _LT_TAGVAR(archive_expsym_cmds, $1)='sed "s|^|_|" $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--retain-symbols-file,$output_objdir/$soname.expsym $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
       ;;
 
     gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu)
       tmp_diet=no
-      if test "$host_os" = linux-dietlibc; then
+      if test linux-dietlibc = "$host_os"; then
 	case $cc_basename in
 	  diet\ *) tmp_diet=yes;;	# linux-dietlibc with static linking (!diet-dyn)
 	esac
       fi
       if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \
-	 && test "$tmp_diet" = no
+	 && test no = "$tmp_diet"
       then
 	tmp_addflag=' $pic_flag'
 	tmp_sharedflag='-shared'
 	case $cc_basename,$host_cpu in
         pgcc*)				# Portland Group C compiler
-	  _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive'
+	  _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive'
 	  tmp_addflag=' $pic_flag'
 	  ;;
 	pgf77* | pgf90* | pgf95* | pgfortran*)
 					# Portland Group f77 and f90 compilers
-	  _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive'
+	  _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive'
 	  tmp_addflag=' $pic_flag -Mnomain' ;;
 	ecc*,ia64* | icc*,ia64*)	# Intel C compiler on ia64
 	  tmp_addflag=' -i_dynamic' ;;
@@ -4834,42 +5221,47 @@
 	lf95*)				# Lahey Fortran 8.1
 	  _LT_TAGVAR(whole_archive_flag_spec, $1)=
 	  tmp_sharedflag='--shared' ;;
+        nagfor*)                        # NAGFOR 5.3
+          tmp_sharedflag='-Wl,-shared' ;;
 	xl[[cC]]* | bgxl[[cC]]* | mpixl[[cC]]*) # IBM XL C 8.0 on PPC (deal with xlf below)
 	  tmp_sharedflag='-qmkshrobj'
 	  tmp_addflag= ;;
 	nvcc*)	# Cuda Compiler Driver 2.2
-	  _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive'
+	  _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive'
 	  _LT_TAGVAR(compiler_needs_object, $1)=yes
 	  ;;
 	esac
 	case `$CC -V 2>&1 | sed 5q` in
 	*Sun\ C*)			# Sun C 5.9
-	  _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive'
+	  _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive'
 	  _LT_TAGVAR(compiler_needs_object, $1)=yes
 	  tmp_sharedflag='-G' ;;
 	*Sun\ F*)			# Sun Fortran 8.3
 	  tmp_sharedflag='-G' ;;
 	esac
-	_LT_TAGVAR(archive_cmds, $1)='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+	_LT_TAGVAR(archive_cmds, $1)='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib'
 
-        if test "x$supports_anon_versioning" = xyes; then
+        if test yes = "$supports_anon_versioning"; then
           _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~
-	    cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
-	    echo "local: *; };" >> $output_objdir/$libname.ver~
-	    $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib'
+            cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
+            echo "local: *; };" >> $output_objdir/$libname.ver~
+            $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-version-script $wl$output_objdir/$libname.ver -o $lib'
         fi
 
 	case $cc_basename in
+	tcc*)
+	  _LT_TAGVAR(export_dynamic_flag_spec, $1)='-rdynamic'
+	  ;;
 	xlf* | bgf* | bgxlf* | mpixlf*)
 	  # IBM XL Fortran 10.1 on PPC cannot create shared libs itself
 	  _LT_TAGVAR(whole_archive_flag_spec, $1)='--whole-archive$convenience --no-whole-archive'
-	  _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+	  _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir'
 	  _LT_TAGVAR(archive_cmds, $1)='$LD -shared $libobjs $deplibs $linker_flags -soname $soname -o $lib'
-	  if test "x$supports_anon_versioning" = xyes; then
+	  if test yes = "$supports_anon_versioning"; then
 	    _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~
-	      cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
-	      echo "local: *; };" >> $output_objdir/$libname.ver~
-	      $LD -shared $libobjs $deplibs $linker_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib'
+              cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
+              echo "local: *; };" >> $output_objdir/$libname.ver~
+              $LD -shared $libobjs $deplibs $linker_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib'
 	  fi
 	  ;;
 	esac
@@ -4883,8 +5275,8 @@
 	_LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib'
 	wlarc=
       else
-	_LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-	_LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+	_LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib'
+	_LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib'
       fi
       ;;
 
@@ -4902,8 +5294,8 @@
 
 _LT_EOF
       elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
-	_LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-	_LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+	_LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib'
+	_LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib'
       else
 	_LT_TAGVAR(ld_shlibs, $1)=no
       fi
@@ -4915,7 +5307,7 @@
 	_LT_TAGVAR(ld_shlibs, $1)=no
 	cat <<_LT_EOF 1>&2
 
-*** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not
+*** Warning: Releases of the GNU linker prior to 2.16.91.0.3 cannot
 *** reliably create shared libraries on SCO systems.  Therefore, libtool
 *** is disabling shared libraries support.  We urge you to upgrade GNU
 *** binutils to release 2.16.91.0.3 or newer.  Another option is to modify
@@ -4930,9 +5322,9 @@
 	  # DT_RUNPATH tag from executables and libraries.  But doing so
 	  # requires that you compile everything twice, which is a pain.
 	  if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
-	    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
-	    _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-	    _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+	    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir'
+	    _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib'
+	    _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib'
 	  else
 	    _LT_TAGVAR(ld_shlibs, $1)=no
 	  fi
@@ -4949,15 +5341,15 @@
 
     *)
       if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
-	_LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-	_LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+	_LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib'
+	_LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib'
       else
 	_LT_TAGVAR(ld_shlibs, $1)=no
       fi
       ;;
     esac
 
-    if test "$_LT_TAGVAR(ld_shlibs, $1)" = no; then
+    if test no = "$_LT_TAGVAR(ld_shlibs, $1)"; then
       runpath_var=
       _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=
       _LT_TAGVAR(export_dynamic_flag_spec, $1)=
@@ -4973,7 +5365,7 @@
       # Note: this linker hardcodes the directories in LIBPATH if there
       # are no directories specified by -L.
       _LT_TAGVAR(hardcode_minus_L, $1)=yes
-      if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then
+      if test yes = "$GCC" && test -z "$lt_prog_compiler_static"; then
 	# Neither direct hardcoding nor static linking is supported with a
 	# broken collect2.
 	_LT_TAGVAR(hardcode_direct, $1)=unsupported
@@ -4981,34 +5373,57 @@
       ;;
 
     aix[[4-9]]*)
-      if test "$host_cpu" = ia64; then
+      if test ia64 = "$host_cpu"; then
 	# On IA64, the linker does run time linking by default, so we don't
 	# have to do anything special.
 	aix_use_runtimelinking=no
 	exp_sym_flag='-Bexport'
-	no_entry_flag=""
+	no_entry_flag=
       else
 	# If we're using GNU nm, then we don't want the "-C" option.
-	# -C means demangle to AIX nm, but means don't demangle with GNU nm
-	# Also, AIX nm treats weak defined symbols like other global
-	# defined symbols, whereas GNU nm marks them as "W".
+	# -C means demangle to GNU nm, but means don't demangle to AIX nm.
+	# Without the "-l" option, or with the "-B" option, AIX nm treats
+	# weak defined symbols like other global defined symbols, whereas
+	# GNU nm marks them as "W".
+	# While the 'weak' keyword is ignored in the Export File, we need
+	# it in the Import File for the 'aix-soname' feature, so we have
+	# to replace the "-B" option with "-P" for AIX nm.
 	if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then
-	  _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
+	  _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && ([substr](\$ 3,1,1) != ".")) { if (\$ 2 == "W") { print \$ 3 " weak" } else { print \$ 3 } } }'\'' | sort -u > $export_symbols'
 	else
-	  _LT_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
+	  _LT_TAGVAR(export_symbols_cmds, $1)='`func_echo_all $NM | $SED -e '\''s/B\([[^B]]*\)$/P\1/'\''` -PCpgl $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) && ([substr](\$ 1,1,1) != ".")) { if ((\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) { print \$ 1 " weak" } else { print \$ 1 } } }'\'' | sort -u > $export_symbols'
 	fi
 	aix_use_runtimelinking=no
 
 	# Test if we are trying to use run time linking or normal
 	# AIX style linking. If -brtl is somewhere in LDFLAGS, we
-	# need to do runtime linking.
+	# have runtime linking enabled, and use it for executables.
+	# For shared libraries, we enable/disable runtime linking
+	# depending on the kind of the shared library created -
+	# when "with_aix_soname,aix_use_runtimelinking" is:
+	# "aix,no"   lib.a(lib.so.V) shared, rtl:no,  for executables
+	# "aix,yes"  lib.so          shared, rtl:yes, for executables
+	#            lib.a           static archive
+	# "both,no"  lib.so.V(shr.o) shared, rtl:yes
+	#            lib.a(lib.so.V) shared, rtl:no,  for executables
+	# "both,yes" lib.so.V(shr.o) shared, rtl:yes, for executables
+	#            lib.a(lib.so.V) shared, rtl:no
+	# "svr4,*"   lib.so.V(shr.o) shared, rtl:yes, for executables
+	#            lib.a           static archive
 	case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*)
 	  for ld_flag in $LDFLAGS; do
-	  if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then
+	  if (test x-brtl = "x$ld_flag" || test x-Wl,-brtl = "x$ld_flag"); then
 	    aix_use_runtimelinking=yes
 	    break
 	  fi
 	  done
+	  if test svr4,no = "$with_aix_soname,$aix_use_runtimelinking"; then
+	    # With aix-soname=svr4, we create the lib.so.V shared archives only,
+	    # so we don't have lib.a shared libs to link our executables.
+	    # We have to force runtime linking in this case.
+	    aix_use_runtimelinking=yes
+	    LDFLAGS="$LDFLAGS -Wl,-brtl"
+	  fi
 	  ;;
 	esac
 
@@ -5027,13 +5442,21 @@
       _LT_TAGVAR(hardcode_direct_absolute, $1)=yes
       _LT_TAGVAR(hardcode_libdir_separator, $1)=':'
       _LT_TAGVAR(link_all_deplibs, $1)=yes
-      _LT_TAGVAR(file_list_spec, $1)='${wl}-f,'
+      _LT_TAGVAR(file_list_spec, $1)='$wl-f,'
+      case $with_aix_soname,$aix_use_runtimelinking in
+      aix,*) ;; # traditional, no import file
+      svr4,* | *,yes) # use import file
+	# The Import File defines what to hardcode.
+	_LT_TAGVAR(hardcode_direct, $1)=no
+	_LT_TAGVAR(hardcode_direct_absolute, $1)=no
+	;;
+      esac
 
-      if test "$GCC" = yes; then
+      if test yes = "$GCC"; then
 	case $host_os in aix4.[[012]]|aix4.[[012]].*)
 	# We only want to do this on AIX 4.2 and lower, the check
 	# below for broken collect2 doesn't work under 4.3+
-	  collect2name=`${CC} -print-prog-name=collect2`
+	  collect2name=`$CC -print-prog-name=collect2`
 	  if test -f "$collect2name" &&
 	   strings "$collect2name" | $GREP resolve_lib_name >/dev/null
 	  then
@@ -5052,62 +5475,80 @@
 	  ;;
 	esac
 	shared_flag='-shared'
-	if test "$aix_use_runtimelinking" = yes; then
-	  shared_flag="$shared_flag "'${wl}-G'
+	if test yes = "$aix_use_runtimelinking"; then
+	  shared_flag="$shared_flag "'$wl-G'
 	fi
-	_LT_TAGVAR(link_all_deplibs, $1)=no
+	# Need to ensure runtime linking is disabled for the traditional
+	# shared library, or the linker may eventually find shared libraries
+	# /with/ Import File - we do not want to mix them.
+	shared_flag_aix='-shared'
+	shared_flag_svr4='-shared $wl-G'
       else
 	# not using gcc
-	if test "$host_cpu" = ia64; then
+	if test ia64 = "$host_cpu"; then
 	# VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release
 	# chokes on -Wl,-G. The following line is correct:
 	  shared_flag='-G'
 	else
-	  if test "$aix_use_runtimelinking" = yes; then
-	    shared_flag='${wl}-G'
+	  if test yes = "$aix_use_runtimelinking"; then
+	    shared_flag='$wl-G'
 	  else
-	    shared_flag='${wl}-bM:SRE'
+	    shared_flag='$wl-bM:SRE'
 	  fi
+	  shared_flag_aix='$wl-bM:SRE'
+	  shared_flag_svr4='$wl-G'
 	fi
       fi
 
-      _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-bexpall'
+      _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-bexpall'
       # It seems that -bexpall does not export symbols beginning with
       # underscore (_), so it is better to generate a list of symbols to export.
       _LT_TAGVAR(always_export_symbols, $1)=yes
-      if test "$aix_use_runtimelinking" = yes; then
+      if test aix,yes = "$with_aix_soname,$aix_use_runtimelinking"; then
 	# Warning - without using the other runtime loading flags (-brtl),
 	# -berok will link without error, but may produce a broken library.
 	_LT_TAGVAR(allow_undefined_flag, $1)='-berok'
         # Determine the default libpath from the value encoded in an
         # empty executable.
         _LT_SYS_MODULE_PATH_AIX([$1])
-        _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath"
-        _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag"
+        _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-blibpath:$libdir:'"$aix_libpath"
+        _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs $wl'$no_entry_flag' $compiler_flags `if test -n "$allow_undefined_flag"; then func_echo_all "$wl$allow_undefined_flag"; else :; fi` $wl'$exp_sym_flag:\$export_symbols' '$shared_flag
       else
-	if test "$host_cpu" = ia64; then
-	  _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib'
+	if test ia64 = "$host_cpu"; then
+	  _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-R $libdir:/usr/lib:/lib'
 	  _LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs"
-	  _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols"
+	  _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\$wl$no_entry_flag"' $compiler_flags $wl$allow_undefined_flag '"\$wl$exp_sym_flag:\$export_symbols"
 	else
 	 # Determine the default libpath from the value encoded in an
 	 # empty executable.
 	 _LT_SYS_MODULE_PATH_AIX([$1])
-	 _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath"
+	 _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-blibpath:$libdir:'"$aix_libpath"
 	  # Warning - without using the other run time loading flags,
 	  # -berok will link without error, but may produce a broken library.
-	  _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok'
-	  _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok'
-	  if test "$with_gnu_ld" = yes; then
+	  _LT_TAGVAR(no_undefined_flag, $1)=' $wl-bernotok'
+	  _LT_TAGVAR(allow_undefined_flag, $1)=' $wl-berok'
+	  if test yes = "$with_gnu_ld"; then
 	    # We only use this code for GNU lds that support --whole-archive.
-	    _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive'
+	    _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive$convenience $wl--no-whole-archive'
 	  else
 	    # Exported symbols can be pulled into shared objects from archives
 	    _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience'
 	  fi
 	  _LT_TAGVAR(archive_cmds_need_lc, $1)=yes
-	  # This is similar to how AIX traditionally builds its shared libraries.
-	  _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname'
+	  _LT_TAGVAR(archive_expsym_cmds, $1)='$RM -r $output_objdir/$realname.d~$MKDIR $output_objdir/$realname.d'
+	  # -brtl affects multiple linker settings, -berok does not and is overridden later
+	  compiler_flags_filtered='`func_echo_all "$compiler_flags " | $SED -e "s%-brtl\\([[, ]]\\)%-berok\\1%g"`'
+	  if test svr4 != "$with_aix_soname"; then
+	    # This is similar to how AIX traditionally builds its shared libraries.
+	    _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$CC '$shared_flag_aix' -o $output_objdir/$realname.d/$soname $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$realname.d/$soname'
+	  fi
+	  if test aix != "$with_aix_soname"; then
+	    _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$CC '$shared_flag_svr4' -o $output_objdir/$realname.d/$shared_archive_member_spec.o $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$STRIP -e $output_objdir/$realname.d/$shared_archive_member_spec.o~( func_echo_all "#! $soname($shared_archive_member_spec.o)"; if test shr_64 = "$shared_archive_member_spec"; then func_echo_all "# 64"; else func_echo_all "# 32"; fi; cat $export_symbols ) > $output_objdir/$realname.d/$shared_archive_member_spec.imp~$AR $AR_FLAGS $output_objdir/$soname $output_objdir/$realname.d/$shared_archive_member_spec.o $output_objdir/$realname.d/$shared_archive_member_spec.imp'
+	  else
+	    # used by -dlpreopen to get the symbols
+	    _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$MV  $output_objdir/$realname.d/$soname $output_objdir'
+	  fi
+	  _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$RM -r $output_objdir/$realname.d'
 	fi
       fi
       ;;
@@ -5116,7 +5557,7 @@
       case $host_cpu in
       powerpc)
             # see comment about AmigaOS4 .so support
-            _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+            _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib'
             _LT_TAGVAR(archive_expsym_cmds, $1)=''
         ;;
       m68k)
@@ -5146,16 +5587,17 @@
 	# Tell ltmain to make .lib files, not .a files.
 	libext=lib
 	# Tell ltmain to make .dll files, not .so files.
-	shrext_cmds=".dll"
+	shrext_cmds=.dll
 	# FIXME: Setting linknames here is a bad hack.
-	_LT_TAGVAR(archive_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-dll~linknames='
-	_LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
-	    sed -n -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' -e '1\\\!p' < $export_symbols > $output_objdir/$soname.exp;
-	  else
-	    sed -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' < $export_symbols > $output_objdir/$soname.exp;
-	  fi~
-	  $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~
-	  linknames='
+	_LT_TAGVAR(archive_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~linknames='
+	_LT_TAGVAR(archive_expsym_cmds, $1)='if _LT_DLL_DEF_P([$export_symbols]); then
+            cp "$export_symbols" "$output_objdir/$soname.def";
+            echo "$tool_output_objdir$soname.def" > "$output_objdir/$soname.exp";
+          else
+            $SED -e '\''s/^/-link -EXPORT:/'\'' < $export_symbols > $output_objdir/$soname.exp;
+          fi~
+          $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~
+          linknames='
 	# The linker will not automatically build a static lib if we build a DLL.
 	# _LT_TAGVAR(old_archive_from_new_cmds, $1)='true'
 	_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
@@ -5164,18 +5606,18 @@
 	# Don't use ranlib
 	_LT_TAGVAR(old_postinstall_cmds, $1)='chmod 644 $oldlib'
 	_LT_TAGVAR(postlink_cmds, $1)='lt_outputfile="@OUTPUT@"~
-	  lt_tool_outputfile="@TOOL_OUTPUT@"~
-	  case $lt_outputfile in
-	    *.exe|*.EXE) ;;
-	    *)
-	      lt_outputfile="$lt_outputfile.exe"
-	      lt_tool_outputfile="$lt_tool_outputfile.exe"
-	      ;;
-	  esac~
-	  if test "$MANIFEST_TOOL" != ":" && test -f "$lt_outputfile.manifest"; then
-	    $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1;
-	    $RM "$lt_outputfile.manifest";
-	  fi'
+          lt_tool_outputfile="@TOOL_OUTPUT@"~
+          case $lt_outputfile in
+            *.exe|*.EXE) ;;
+            *)
+              lt_outputfile=$lt_outputfile.exe
+              lt_tool_outputfile=$lt_tool_outputfile.exe
+              ;;
+          esac~
+          if test : != "$MANIFEST_TOOL" && test -f "$lt_outputfile.manifest"; then
+            $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1;
+            $RM "$lt_outputfile.manifest";
+          fi'
 	;;
       *)
 	# Assume MSVC wrapper
@@ -5184,7 +5626,7 @@
 	# Tell ltmain to make .lib files, not .a files.
 	libext=lib
 	# Tell ltmain to make .dll files, not .so files.
-	shrext_cmds=".dll"
+	shrext_cmds=.dll
 	# FIXME: Setting linknames here is a bad hack.
 	_LT_TAGVAR(archive_cmds, $1)='$CC -o $lib $libobjs $compiler_flags `func_echo_all "$deplibs" | $SED '\''s/ -lc$//'\''` -link -dll~linknames='
 	# The linker will automatically build a .lib file if we build a DLL.
@@ -5234,33 +5676,33 @@
       ;;
 
     hpux9*)
-      if test "$GCC" = yes; then
-	_LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared $pic_flag ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+      if test yes = "$GCC"; then
+	_LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared $pic_flag $wl+b $wl$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test "x$output_objdir/$soname" = "x$lib" || mv $output_objdir/$soname $lib'
       else
-	_LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+	_LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test "x$output_objdir/$soname" = "x$lib" || mv $output_objdir/$soname $lib'
       fi
-      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
+      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl+b $wl$libdir'
       _LT_TAGVAR(hardcode_libdir_separator, $1)=:
       _LT_TAGVAR(hardcode_direct, $1)=yes
 
       # hardcode_minus_L: Not really in the search PATH,
       # but as the default location of the library.
       _LT_TAGVAR(hardcode_minus_L, $1)=yes
-      _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+      _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E'
       ;;
 
     hpux10*)
-      if test "$GCC" = yes && test "$with_gnu_ld" = no; then
-	_LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+      if test yes,no = "$GCC,$with_gnu_ld"; then
+	_LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
       else
 	_LT_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'
       fi
-      if test "$with_gnu_ld" = no; then
-	_LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
+      if test no = "$with_gnu_ld"; then
+	_LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl+b $wl$libdir'
 	_LT_TAGVAR(hardcode_libdir_separator, $1)=:
 	_LT_TAGVAR(hardcode_direct, $1)=yes
 	_LT_TAGVAR(hardcode_direct_absolute, $1)=yes
-	_LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+	_LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E'
 	# hardcode_minus_L: Not really in the search PATH,
 	# but as the default location of the library.
 	_LT_TAGVAR(hardcode_minus_L, $1)=yes
@@ -5268,25 +5710,25 @@
       ;;
 
     hpux11*)
-      if test "$GCC" = yes && test "$with_gnu_ld" = no; then
+      if test yes,no = "$GCC,$with_gnu_ld"; then
 	case $host_cpu in
 	hppa*64*)
-	  _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+	  _LT_TAGVAR(archive_cmds, $1)='$CC -shared $wl+h $wl$soname -o $lib $libobjs $deplibs $compiler_flags'
 	  ;;
 	ia64*)
-	  _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
+	  _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $wl+h $wl$soname $wl+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
 	  ;;
 	*)
-	  _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+	  _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
 	  ;;
 	esac
       else
 	case $host_cpu in
 	hppa*64*)
-	  _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+	  _LT_TAGVAR(archive_cmds, $1)='$CC -b $wl+h $wl$soname -o $lib $libobjs $deplibs $compiler_flags'
 	  ;;
 	ia64*)
-	  _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
+	  _LT_TAGVAR(archive_cmds, $1)='$CC -b $wl+h $wl$soname $wl+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
 	  ;;
 	*)
 	m4_if($1, [], [
@@ -5294,14 +5736,14 @@
 	  # (HP92453-01 A.11.01.20 doesn't, HP92453-01 B.11.X.35175-35176.GP does)
 	  _LT_LINKER_OPTION([if $CC understands -b],
 	    _LT_TAGVAR(lt_cv_prog_compiler__b, $1), [-b],
-	    [_LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'],
+	    [_LT_TAGVAR(archive_cmds, $1)='$CC -b $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags'],
 	    [_LT_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'])],
-	  [_LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'])
+	  [_LT_TAGVAR(archive_cmds, $1)='$CC -b $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags'])
 	  ;;
 	esac
       fi
-      if test "$with_gnu_ld" = no; then
-	_LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
+      if test no = "$with_gnu_ld"; then
+	_LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl+b $wl$libdir'
 	_LT_TAGVAR(hardcode_libdir_separator, $1)=:
 
 	case $host_cpu in
@@ -5312,7 +5754,7 @@
 	*)
 	  _LT_TAGVAR(hardcode_direct, $1)=yes
 	  _LT_TAGVAR(hardcode_direct_absolute, $1)=yes
-	  _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+	  _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E'
 
 	  # hardcode_minus_L: Not really in the search PATH,
 	  # but as the default location of the library.
@@ -5323,16 +5765,16 @@
       ;;
 
     irix5* | irix6* | nonstopux*)
-      if test "$GCC" = yes; then
-	_LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+      if test yes = "$GCC"; then
+	_LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib'
 	# Try to use the -exported_symbol ld option, if it does not
 	# work, assume that -exports_file does not work either and
 	# implicitly export all symbols.
 	# This should be the same for all languages, so no per-tag cache variable.
 	AC_CACHE_CHECK([whether the $host_os linker accepts -exported_symbol],
 	  [lt_cv_irix_exported_symbol],
-	  [save_LDFLAGS="$LDFLAGS"
-	   LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null"
+	  [save_LDFLAGS=$LDFLAGS
+	   LDFLAGS="$LDFLAGS -shared $wl-exported_symbol ${wl}foo $wl-update_registry $wl/dev/null"
 	   AC_LINK_IFELSE(
 	     [AC_LANG_SOURCE(
 	        [AC_LANG_CASE([C], [[int foo (void) { return 0; }]],
@@ -5345,21 +5787,32 @@
       end]])])],
 	      [lt_cv_irix_exported_symbol=yes],
 	      [lt_cv_irix_exported_symbol=no])
-           LDFLAGS="$save_LDFLAGS"])
-	if test "$lt_cv_irix_exported_symbol" = yes; then
-          _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib'
+           LDFLAGS=$save_LDFLAGS])
+	if test yes = "$lt_cv_irix_exported_symbol"; then
+          _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations $wl-exports_file $wl$export_symbols -o $lib'
 	fi
+	_LT_TAGVAR(link_all_deplibs, $1)=no
       else
-	_LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib'
-	_LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib'
+	_LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib'
+	_LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -exports_file $export_symbols -o $lib'
       fi
       _LT_TAGVAR(archive_cmds_need_lc, $1)='no'
-      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir'
       _LT_TAGVAR(hardcode_libdir_separator, $1)=:
       _LT_TAGVAR(inherit_rpath, $1)=yes
       _LT_TAGVAR(link_all_deplibs, $1)=yes
       ;;
 
+    linux*)
+      case $cc_basename in
+      tcc*)
+	# Fabrice Bellard et al's Tiny C Compiler
+	_LT_TAGVAR(ld_shlibs, $1)=yes
+	_LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
+	;;
+      esac
+      ;;
+
     netbsd* | netbsdelf*-gnu)
       if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
 	_LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'  # a.out
@@ -5374,7 +5827,7 @@
     newsos6)
       _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
       _LT_TAGVAR(hardcode_direct, $1)=yes
-      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir'
       _LT_TAGVAR(hardcode_libdir_separator, $1)=:
       _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
       ;;
@@ -5382,27 +5835,19 @@
     *nto* | *qnx*)
       ;;
 
-    openbsd*)
+    openbsd* | bitrig*)
       if test -f /usr/libexec/ld.so; then
 	_LT_TAGVAR(hardcode_direct, $1)=yes
 	_LT_TAGVAR(hardcode_shlibpath_var, $1)=no
 	_LT_TAGVAR(hardcode_direct_absolute, $1)=yes
-	if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+	if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then
 	  _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
-	  _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols'
-	  _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
-	  _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+	  _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags $wl-retain-symbols-file,$export_symbols'
+	  _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir'
+	  _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E'
 	else
-	  case $host_os in
-	   openbsd[[01]].* | openbsd2.[[0-7]] | openbsd2.[[0-7]].*)
-	     _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
-	     _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
-	     ;;
-	   *)
-	     _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
-	     _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
-	     ;;
-	  esac
+	  _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
+	  _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir'
 	fi
       else
 	_LT_TAGVAR(ld_shlibs, $1)=no
@@ -5413,33 +5858,53 @@
       _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
       _LT_TAGVAR(hardcode_minus_L, $1)=yes
       _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
-      _LT_TAGVAR(archive_cmds, $1)='$ECHO "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~echo DATA >> $output_objdir/$libname.def~echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def'
-      _LT_TAGVAR(old_archive_from_new_cmds, $1)='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def'
+      shrext_cmds=.dll
+      _LT_TAGVAR(archive_cmds, $1)='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~
+	$ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~
+	$ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~
+	$ECHO EXPORTS >> $output_objdir/$libname.def~
+	emxexp $libobjs | $SED /"_DLL_InitTerm"/d >> $output_objdir/$libname.def~
+	$CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~
+	emximp -o $lib $output_objdir/$libname.def'
+      _LT_TAGVAR(archive_expsym_cmds, $1)='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~
+	$ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~
+	$ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~
+	$ECHO EXPORTS >> $output_objdir/$libname.def~
+	prefix_cmds="$SED"~
+	if test EXPORTS = "`$SED 1q $export_symbols`"; then
+	  prefix_cmds="$prefix_cmds -e 1d";
+	fi~
+	prefix_cmds="$prefix_cmds -e \"s/^\(.*\)$/_\1/g\""~
+	cat $export_symbols | $prefix_cmds >> $output_objdir/$libname.def~
+	$CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~
+	emximp -o $lib $output_objdir/$libname.def'
+      _LT_TAGVAR(old_archive_From_new_cmds, $1)='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def'
+      _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
       ;;
 
     osf3*)
-      if test "$GCC" = yes; then
-	_LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*'
-	_LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+      if test yes = "$GCC"; then
+	_LT_TAGVAR(allow_undefined_flag, $1)=' $wl-expect_unresolved $wl\*'
+	_LT_TAGVAR(archive_cmds, $1)='$CC -shared$allow_undefined_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib'
       else
 	_LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*'
-	_LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib'
+	_LT_TAGVAR(archive_cmds, $1)='$CC -shared$allow_undefined_flag $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib'
       fi
       _LT_TAGVAR(archive_cmds_need_lc, $1)='no'
-      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir'
       _LT_TAGVAR(hardcode_libdir_separator, $1)=:
       ;;
 
     osf4* | osf5*)	# as osf3* with the addition of -msym flag
-      if test "$GCC" = yes; then
-	_LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*'
-	_LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $pic_flag $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
-	_LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+      if test yes = "$GCC"; then
+	_LT_TAGVAR(allow_undefined_flag, $1)=' $wl-expect_unresolved $wl\*'
+	_LT_TAGVAR(archive_cmds, $1)='$CC -shared$allow_undefined_flag $pic_flag $libobjs $deplibs $compiler_flags $wl-msym $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib'
+	_LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir'
       else
 	_LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*'
-	_LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib'
+	_LT_TAGVAR(archive_cmds, $1)='$CC -shared$allow_undefined_flag $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib'
 	_LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~
-	$CC -shared${allow_undefined_flag} ${wl}-input ${wl}$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib~$RM $lib.exp'
+          $CC -shared$allow_undefined_flag $wl-input $wl$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib~$RM $lib.exp'
 
 	# Both c and cxx compiler support -rpath directly
 	_LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir'
@@ -5450,24 +5915,24 @@
 
     solaris*)
       _LT_TAGVAR(no_undefined_flag, $1)=' -z defs'
-      if test "$GCC" = yes; then
-	wlarc='${wl}'
-	_LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+      if test yes = "$GCC"; then
+	wlarc='$wl'
+	_LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $wl-z ${wl}text $wl-h $wl$soname -o $lib $libobjs $deplibs $compiler_flags'
 	_LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
-	  $CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp'
+          $CC -shared $pic_flag $wl-z ${wl}text $wl-M $wl$lib.exp $wl-h $wl$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp'
       else
 	case `$CC -V 2>&1` in
 	*"Compilers 5.0"*)
 	  wlarc=''
-	  _LT_TAGVAR(archive_cmds, $1)='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags'
+	  _LT_TAGVAR(archive_cmds, $1)='$LD -G$allow_undefined_flag -h $soname -o $lib $libobjs $deplibs $linker_flags'
 	  _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
-	  $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp'
+            $LD -G$allow_undefined_flag -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp'
 	  ;;
 	*)
-	  wlarc='${wl}'
-	  _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $compiler_flags'
+	  wlarc='$wl'
+	  _LT_TAGVAR(archive_cmds, $1)='$CC -G$allow_undefined_flag -h $soname -o $lib $libobjs $deplibs $compiler_flags'
 	  _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
-	  $CC -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp'
+            $CC -G$allow_undefined_flag -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp'
 	  ;;
 	esac
       fi
@@ -5477,11 +5942,11 @@
       solaris2.[[0-5]] | solaris2.[[0-5]].*) ;;
       *)
 	# The compiler driver will combine and reorder linker options,
-	# but understands `-z linker_flag'.  GCC discards it without `$wl',
+	# but understands '-z linker_flag'.  GCC discards it without '$wl',
 	# but is careful enough not to reorder.
 	# Supported since Solaris 2.6 (maybe 2.5.1?)
-	if test "$GCC" = yes; then
-	  _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract'
+	if test yes = "$GCC"; then
+	  _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl-z ${wl}allextract$convenience $wl-z ${wl}defaultextract'
 	else
 	  _LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract'
 	fi
@@ -5491,10 +5956,10 @@
       ;;
 
     sunos4*)
-      if test "x$host_vendor" = xsequent; then
+      if test sequent = "$host_vendor"; then
 	# Use $CC to link under sequent, because it throws in some extra .o
 	# files that make .init and .fini sections work.
-	_LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags'
+	_LT_TAGVAR(archive_cmds, $1)='$CC -G $wl-h $soname -o $lib $libobjs $deplibs $compiler_flags'
       else
 	_LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags'
       fi
@@ -5543,43 +6008,43 @@
       ;;
 
     sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*)
-      _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text'
+      _LT_TAGVAR(no_undefined_flag, $1)='$wl-z,text'
       _LT_TAGVAR(archive_cmds_need_lc, $1)=no
       _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
       runpath_var='LD_RUN_PATH'
 
-      if test "$GCC" = yes; then
-	_LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
-	_LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+      if test yes = "$GCC"; then
+	_LT_TAGVAR(archive_cmds, $1)='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+	_LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
       else
-	_LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
-	_LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+	_LT_TAGVAR(archive_cmds, $1)='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+	_LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
       fi
       ;;
 
     sysv5* | sco3.2v5* | sco5v6*)
-      # Note: We can NOT use -z defs as we might desire, because we do not
+      # Note: We CANNOT use -z defs as we might desire, because we do not
       # link with -lc, and that would cause any symbols used from libc to
       # always be unresolved, which means just about no library would
       # ever link correctly.  If we're not using GNU ld we use -z text
       # though, which does catch some bad symbols but isn't as heavy-handed
       # as -z defs.
-      _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text'
-      _LT_TAGVAR(allow_undefined_flag, $1)='${wl}-z,nodefs'
+      _LT_TAGVAR(no_undefined_flag, $1)='$wl-z,text'
+      _LT_TAGVAR(allow_undefined_flag, $1)='$wl-z,nodefs'
       _LT_TAGVAR(archive_cmds_need_lc, $1)=no
       _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
-      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R,$libdir'
+      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-R,$libdir'
       _LT_TAGVAR(hardcode_libdir_separator, $1)=':'
       _LT_TAGVAR(link_all_deplibs, $1)=yes
-      _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport'
+      _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-Bexport'
       runpath_var='LD_RUN_PATH'
 
-      if test "$GCC" = yes; then
-	_LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
-	_LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+      if test yes = "$GCC"; then
+	_LT_TAGVAR(archive_cmds, $1)='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+	_LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
       else
-	_LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
-	_LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+	_LT_TAGVAR(archive_cmds, $1)='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+	_LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
       fi
       ;;
 
@@ -5594,17 +6059,17 @@
       ;;
     esac
 
-    if test x$host_vendor = xsni; then
+    if test sni = "$host_vendor"; then
       case $host in
       sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
-	_LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Blargedynsym'
+	_LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-Blargedynsym'
 	;;
       esac
     fi
   fi
 ])
 AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)])
-test "$_LT_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no
+test no = "$_LT_TAGVAR(ld_shlibs, $1)" && can_build_shared=no
 
 _LT_TAGVAR(with_gnu_ld, $1)=$with_gnu_ld
 
@@ -5621,7 +6086,7 @@
   # Assume -lc should be added
   _LT_TAGVAR(archive_cmds_need_lc, $1)=yes
 
-  if test "$enable_shared" = yes && test "$GCC" = yes; then
+  if test yes,yes = "$GCC,$enable_shared"; then
     case $_LT_TAGVAR(archive_cmds, $1) in
     *'~'*)
       # FIXME: we may have to deal with multi-command sequences.
@@ -5701,12 +6166,12 @@
 _LT_TAGDECL([], [hardcode_libdir_separator], [1],
     [Whether we need a single "-rpath" flag with a separated argument])
 _LT_TAGDECL([], [hardcode_direct], [0],
-    [Set to "yes" if using DIR/libNAME${shared_ext} during linking hardcodes
+    [Set to "yes" if using DIR/libNAME$shared_ext during linking hardcodes
     DIR into the resulting binary])
 _LT_TAGDECL([], [hardcode_direct_absolute], [0],
-    [Set to "yes" if using DIR/libNAME${shared_ext} during linking hardcodes
+    [Set to "yes" if using DIR/libNAME$shared_ext during linking hardcodes
     DIR into the resulting binary and the resulting library dependency is
-    "absolute", i.e impossible to change by setting ${shlibpath_var} if the
+    "absolute", i.e impossible to change by setting $shlibpath_var if the
     library is relocated])
 _LT_TAGDECL([], [hardcode_minus_L], [0],
     [Set to "yes" if using the -LDIR flag during linking hardcodes DIR
@@ -5747,10 +6212,10 @@
 # ------------------------
 # Ensure that the configuration variables for a C compiler are suitably
 # defined.  These variables are subsequently used by _LT_CONFIG to write
-# the compiler configuration to `libtool'.
+# the compiler configuration to 'libtool'.
 m4_defun([_LT_LANG_C_CONFIG],
 [m4_require([_LT_DECL_EGREP])dnl
-lt_save_CC="$CC"
+lt_save_CC=$CC
 AC_LANG_PUSH(C)
 
 # Source file extension for C test sources.
@@ -5790,18 +6255,18 @@
   LT_SYS_DLOPEN_SELF
   _LT_CMD_STRIPLIB
 
-  # Report which library types will actually be built
+  # Report what library types will actually be built
   AC_MSG_CHECKING([if libtool supports shared libraries])
   AC_MSG_RESULT([$can_build_shared])
 
   AC_MSG_CHECKING([whether to build shared libraries])
-  test "$can_build_shared" = "no" && enable_shared=no
+  test no = "$can_build_shared" && enable_shared=no
 
   # On AIX, shared libraries and static libraries use the same namespace, and
   # are all built from PIC.
   case $host_os in
   aix3*)
-    test "$enable_shared" = yes && enable_static=no
+    test yes = "$enable_shared" && enable_static=no
     if test -n "$RANLIB"; then
       archive_cmds="$archive_cmds~\$RANLIB \$lib"
       postinstall_cmds='$RANLIB $lib'
@@ -5809,8 +6274,12 @@
     ;;
 
   aix[[4-9]]*)
-    if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then
-      test "$enable_shared" = yes && enable_static=no
+    if test ia64 != "$host_cpu"; then
+      case $enable_shared,$with_aix_soname,$aix_use_runtimelinking in
+      yes,aix,yes) ;;			# shared object as lib.so file only
+      yes,svr4,*) ;;			# shared object as lib.so archive member only
+      yes,*) enable_static=no ;;	# shared object in lib.a archive as well
+      esac
     fi
     ;;
   esac
@@ -5818,13 +6287,13 @@
 
   AC_MSG_CHECKING([whether to build static libraries])
   # Make sure either enable_shared or enable_static is yes.
-  test "$enable_shared" = yes || enable_static=yes
+  test yes = "$enable_shared" || enable_static=yes
   AC_MSG_RESULT([$enable_static])
 
   _LT_CONFIG($1)
 fi
 AC_LANG_POP
-CC="$lt_save_CC"
+CC=$lt_save_CC
 ])# _LT_LANG_C_CONFIG
 
 
@@ -5832,14 +6301,14 @@
 # --------------------------
 # Ensure that the configuration variables for a C++ compiler are suitably
 # defined.  These variables are subsequently used by _LT_CONFIG to write
-# the compiler configuration to `libtool'.
+# the compiler configuration to 'libtool'.
 m4_defun([_LT_LANG_CXX_CONFIG],
 [m4_require([_LT_FILEUTILS_DEFAULTS])dnl
 m4_require([_LT_DECL_EGREP])dnl
 m4_require([_LT_PATH_MANIFEST_TOOL])dnl
-if test -n "$CXX" && ( test "X$CXX" != "Xno" &&
-    ( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) ||
-    (test "X$CXX" != "Xg++"))) ; then
+if test -n "$CXX" && ( test no != "$CXX" &&
+    ( (test g++ = "$CXX" && `g++ -v >/dev/null 2>&1` ) ||
+    (test g++ != "$CXX"))); then
   AC_PROG_CXXCPP
 else
   _lt_caught_CXX_error=yes
@@ -5881,7 +6350,7 @@
 # the CXX compiler isn't working.  Some variables (like enable_shared)
 # are currently assumed to apply to all compilers on this platform,
 # and will be corrupted by setting them based on a non-working compiler.
-if test "$_lt_caught_CXX_error" != yes; then
+if test yes != "$_lt_caught_CXX_error"; then
   # Code to be used in simple compile tests
   lt_simple_compile_test_code="int some_variable = 0;"
 
@@ -5923,35 +6392,35 @@
   if test -n "$compiler"; then
     # We don't want -fno-exception when compiling C++ code, so set the
     # no_builtin_flag separately
-    if test "$GXX" = yes; then
+    if test yes = "$GXX"; then
       _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin'
     else
       _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=
     fi
 
-    if test "$GXX" = yes; then
+    if test yes = "$GXX"; then
       # Set up default GNU C++ configuration
 
       LT_PATH_LD
 
       # Check if GNU C++ uses GNU ld as the underlying linker, since the
       # archiving commands below assume that GNU ld is being used.
-      if test "$with_gnu_ld" = yes; then
-        _LT_TAGVAR(archive_cmds, $1)='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'
-        _LT_TAGVAR(archive_expsym_cmds, $1)='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+      if test yes = "$with_gnu_ld"; then
+        _LT_TAGVAR(archive_cmds, $1)='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib'
+        _LT_TAGVAR(archive_expsym_cmds, $1)='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib'
 
-        _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
-        _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
+        _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir'
+        _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-dynamic'
 
         # If archive_cmds runs LD, not CC, wlarc should be empty
         # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to
         #     investigate it a little bit more. (MM)
-        wlarc='${wl}'
+        wlarc='$wl'
 
         # ancient GNU ld didn't support --whole-archive et. al.
         if eval "`$CC -print-prog-name=ld` --help 2>&1" |
 	  $GREP 'no-whole-archive' > /dev/null; then
-          _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
+          _LT_TAGVAR(whole_archive_flag_spec, $1)=$wlarc'--whole-archive$convenience '$wlarc'--no-whole-archive'
         else
           _LT_TAGVAR(whole_archive_flag_spec, $1)=
         fi
@@ -5987,18 +6456,30 @@
         _LT_TAGVAR(ld_shlibs, $1)=no
         ;;
       aix[[4-9]]*)
-        if test "$host_cpu" = ia64; then
+        if test ia64 = "$host_cpu"; then
           # On IA64, the linker does run time linking by default, so we don't
           # have to do anything special.
           aix_use_runtimelinking=no
           exp_sym_flag='-Bexport'
-          no_entry_flag=""
+          no_entry_flag=
         else
           aix_use_runtimelinking=no
 
           # Test if we are trying to use run time linking or normal
           # AIX style linking. If -brtl is somewhere in LDFLAGS, we
-          # need to do runtime linking.
+          # have runtime linking enabled, and use it for executables.
+          # For shared libraries, we enable/disable runtime linking
+          # depending on the kind of the shared library created -
+          # when "with_aix_soname,aix_use_runtimelinking" is:
+          # "aix,no"   lib.a(lib.so.V) shared, rtl:no,  for executables
+          # "aix,yes"  lib.so          shared, rtl:yes, for executables
+          #            lib.a           static archive
+          # "both,no"  lib.so.V(shr.o) shared, rtl:yes
+          #            lib.a(lib.so.V) shared, rtl:no,  for executables
+          # "both,yes" lib.so.V(shr.o) shared, rtl:yes, for executables
+          #            lib.a(lib.so.V) shared, rtl:no
+          # "svr4,*"   lib.so.V(shr.o) shared, rtl:yes, for executables
+          #            lib.a           static archive
           case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*)
 	    for ld_flag in $LDFLAGS; do
 	      case $ld_flag in
@@ -6008,6 +6489,13 @@
 	        ;;
 	      esac
 	    done
+	    if test svr4,no = "$with_aix_soname,$aix_use_runtimelinking"; then
+	      # With aix-soname=svr4, we create the lib.so.V shared archives only,
+	      # so we don't have lib.a shared libs to link our executables.
+	      # We have to force runtime linking in this case.
+	      aix_use_runtimelinking=yes
+	      LDFLAGS="$LDFLAGS -Wl,-brtl"
+	    fi
 	    ;;
           esac
 
@@ -6026,13 +6514,21 @@
         _LT_TAGVAR(hardcode_direct_absolute, $1)=yes
         _LT_TAGVAR(hardcode_libdir_separator, $1)=':'
         _LT_TAGVAR(link_all_deplibs, $1)=yes
-        _LT_TAGVAR(file_list_spec, $1)='${wl}-f,'
+        _LT_TAGVAR(file_list_spec, $1)='$wl-f,'
+        case $with_aix_soname,$aix_use_runtimelinking in
+        aix,*) ;;	# no import file
+        svr4,* | *,yes) # use import file
+          # The Import File defines what to hardcode.
+          _LT_TAGVAR(hardcode_direct, $1)=no
+          _LT_TAGVAR(hardcode_direct_absolute, $1)=no
+          ;;
+        esac
 
-        if test "$GXX" = yes; then
+        if test yes = "$GXX"; then
           case $host_os in aix4.[[012]]|aix4.[[012]].*)
           # We only want to do this on AIX 4.2 and lower, the check
           # below for broken collect2 doesn't work under 4.3+
-	  collect2name=`${CC} -print-prog-name=collect2`
+	  collect2name=`$CC -print-prog-name=collect2`
 	  if test -f "$collect2name" &&
 	     strings "$collect2name" | $GREP resolve_lib_name >/dev/null
 	  then
@@ -6050,64 +6546,84 @@
 	  fi
           esac
           shared_flag='-shared'
-	  if test "$aix_use_runtimelinking" = yes; then
-	    shared_flag="$shared_flag "'${wl}-G'
+	  if test yes = "$aix_use_runtimelinking"; then
+	    shared_flag=$shared_flag' $wl-G'
 	  fi
+	  # Need to ensure runtime linking is disabled for the traditional
+	  # shared library, or the linker may eventually find shared libraries
+	  # /with/ Import File - we do not want to mix them.
+	  shared_flag_aix='-shared'
+	  shared_flag_svr4='-shared $wl-G'
         else
           # not using gcc
-          if test "$host_cpu" = ia64; then
+          if test ia64 = "$host_cpu"; then
 	  # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release
 	  # chokes on -Wl,-G. The following line is correct:
 	  shared_flag='-G'
           else
-	    if test "$aix_use_runtimelinking" = yes; then
-	      shared_flag='${wl}-G'
+	    if test yes = "$aix_use_runtimelinking"; then
+	      shared_flag='$wl-G'
 	    else
-	      shared_flag='${wl}-bM:SRE'
+	      shared_flag='$wl-bM:SRE'
 	    fi
+	    shared_flag_aix='$wl-bM:SRE'
+	    shared_flag_svr4='$wl-G'
           fi
         fi
 
-        _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-bexpall'
+        _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-bexpall'
         # It seems that -bexpall does not export symbols beginning with
         # underscore (_), so it is better to generate a list of symbols to
 	# export.
         _LT_TAGVAR(always_export_symbols, $1)=yes
-        if test "$aix_use_runtimelinking" = yes; then
+	if test aix,yes = "$with_aix_soname,$aix_use_runtimelinking"; then
           # Warning - without using the other runtime loading flags (-brtl),
           # -berok will link without error, but may produce a broken library.
-          _LT_TAGVAR(allow_undefined_flag, $1)='-berok'
+          # The "-G" linker flag allows undefined symbols.
+          _LT_TAGVAR(no_undefined_flag, $1)='-bernotok'
           # Determine the default libpath from the value encoded in an empty
           # executable.
           _LT_SYS_MODULE_PATH_AIX([$1])
-          _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath"
+          _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-blibpath:$libdir:'"$aix_libpath"
 
-          _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag"
+          _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs $wl'$no_entry_flag' $compiler_flags `if test -n "$allow_undefined_flag"; then func_echo_all "$wl$allow_undefined_flag"; else :; fi` $wl'$exp_sym_flag:\$export_symbols' '$shared_flag
         else
-          if test "$host_cpu" = ia64; then
-	    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib'
+          if test ia64 = "$host_cpu"; then
+	    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-R $libdir:/usr/lib:/lib'
 	    _LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs"
-	    _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols"
+	    _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\$wl$no_entry_flag"' $compiler_flags $wl$allow_undefined_flag '"\$wl$exp_sym_flag:\$export_symbols"
           else
 	    # Determine the default libpath from the value encoded in an
 	    # empty executable.
 	    _LT_SYS_MODULE_PATH_AIX([$1])
-	    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath"
+	    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-blibpath:$libdir:'"$aix_libpath"
 	    # Warning - without using the other run time loading flags,
 	    # -berok will link without error, but may produce a broken library.
-	    _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok'
-	    _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok'
-	    if test "$with_gnu_ld" = yes; then
+	    _LT_TAGVAR(no_undefined_flag, $1)=' $wl-bernotok'
+	    _LT_TAGVAR(allow_undefined_flag, $1)=' $wl-berok'
+	    if test yes = "$with_gnu_ld"; then
 	      # We only use this code for GNU lds that support --whole-archive.
-	      _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive'
+	      _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive$convenience $wl--no-whole-archive'
 	    else
 	      # Exported symbols can be pulled into shared objects from archives
 	      _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience'
 	    fi
 	    _LT_TAGVAR(archive_cmds_need_lc, $1)=yes
-	    # This is similar to how AIX traditionally builds its shared
-	    # libraries.
-	    _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname'
+	    _LT_TAGVAR(archive_expsym_cmds, $1)='$RM -r $output_objdir/$realname.d~$MKDIR $output_objdir/$realname.d'
+	    # -brtl affects multiple linker settings, -berok does not and is overridden later
+	    compiler_flags_filtered='`func_echo_all "$compiler_flags " | $SED -e "s%-brtl\\([[, ]]\\)%-berok\\1%g"`'
+	    if test svr4 != "$with_aix_soname"; then
+	      # This is similar to how AIX traditionally builds its shared
+	      # libraries. Need -bnortl late, we may have -brtl in LDFLAGS.
+	      _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$CC '$shared_flag_aix' -o $output_objdir/$realname.d/$soname $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$realname.d/$soname'
+	    fi
+	    if test aix != "$with_aix_soname"; then
+	      _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$CC '$shared_flag_svr4' -o $output_objdir/$realname.d/$shared_archive_member_spec.o $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$STRIP -e $output_objdir/$realname.d/$shared_archive_member_spec.o~( func_echo_all "#! $soname($shared_archive_member_spec.o)"; if test shr_64 = "$shared_archive_member_spec"; then func_echo_all "# 64"; else func_echo_all "# 32"; fi; cat $export_symbols ) > $output_objdir/$realname.d/$shared_archive_member_spec.imp~$AR $AR_FLAGS $output_objdir/$soname $output_objdir/$realname.d/$shared_archive_member_spec.o $output_objdir/$realname.d/$shared_archive_member_spec.imp'
+	    else
+	      # used by -dlpreopen to get the symbols
+	      _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$MV  $output_objdir/$realname.d/$soname $output_objdir'
+	    fi
+	    _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$RM -r $output_objdir/$realname.d'
           fi
         fi
         ;;
@@ -6117,7 +6633,7 @@
 	  _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
 	  # Joseph Beckenbach <jrb3@best.com> says some releases of gcc
 	  # support --undefined.  This deserves some investigation.  FIXME
-	  _LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+	  _LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib'
 	else
 	  _LT_TAGVAR(ld_shlibs, $1)=no
 	fi
@@ -6145,57 +6661,58 @@
 	  # Tell ltmain to make .lib files, not .a files.
 	  libext=lib
 	  # Tell ltmain to make .dll files, not .so files.
-	  shrext_cmds=".dll"
+	  shrext_cmds=.dll
 	  # FIXME: Setting linknames here is a bad hack.
-	  _LT_TAGVAR(archive_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-dll~linknames='
-	  _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
-	      $SED -n -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' -e '1\\\!p' < $export_symbols > $output_objdir/$soname.exp;
-	    else
-	      $SED -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' < $export_symbols > $output_objdir/$soname.exp;
-	    fi~
-	    $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~
-	    linknames='
+	  _LT_TAGVAR(archive_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~linknames='
+	  _LT_TAGVAR(archive_expsym_cmds, $1)='if _LT_DLL_DEF_P([$export_symbols]); then
+              cp "$export_symbols" "$output_objdir/$soname.def";
+              echo "$tool_output_objdir$soname.def" > "$output_objdir/$soname.exp";
+            else
+              $SED -e '\''s/^/-link -EXPORT:/'\'' < $export_symbols > $output_objdir/$soname.exp;
+            fi~
+            $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~
+            linknames='
 	  # The linker will not automatically build a static lib if we build a DLL.
 	  # _LT_TAGVAR(old_archive_from_new_cmds, $1)='true'
 	  _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
 	  # Don't use ranlib
 	  _LT_TAGVAR(old_postinstall_cmds, $1)='chmod 644 $oldlib'
 	  _LT_TAGVAR(postlink_cmds, $1)='lt_outputfile="@OUTPUT@"~
-	    lt_tool_outputfile="@TOOL_OUTPUT@"~
-	    case $lt_outputfile in
-	      *.exe|*.EXE) ;;
-	      *)
-		lt_outputfile="$lt_outputfile.exe"
-		lt_tool_outputfile="$lt_tool_outputfile.exe"
-		;;
-	    esac~
-	    func_to_tool_file "$lt_outputfile"~
-	    if test "$MANIFEST_TOOL" != ":" && test -f "$lt_outputfile.manifest"; then
-	      $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1;
-	      $RM "$lt_outputfile.manifest";
-	    fi'
+            lt_tool_outputfile="@TOOL_OUTPUT@"~
+            case $lt_outputfile in
+              *.exe|*.EXE) ;;
+              *)
+                lt_outputfile=$lt_outputfile.exe
+                lt_tool_outputfile=$lt_tool_outputfile.exe
+                ;;
+            esac~
+            func_to_tool_file "$lt_outputfile"~
+            if test : != "$MANIFEST_TOOL" && test -f "$lt_outputfile.manifest"; then
+              $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1;
+              $RM "$lt_outputfile.manifest";
+            fi'
 	  ;;
 	*)
 	  # g++
 	  # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless,
 	  # as there is no search path for DLLs.
 	  _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
-	  _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-all-symbols'
+	  _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-all-symbols'
 	  _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
 	  _LT_TAGVAR(always_export_symbols, $1)=no
 	  _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
 
 	  if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then
-	    _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
-	    # If the export-symbols file already is a .def file (1st line
-	    # is EXPORTS), use it as is; otherwise, prepend...
-	    _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
-	      cp $export_symbols $output_objdir/$soname.def;
-	    else
-	      echo EXPORTS > $output_objdir/$soname.def;
-	      cat $export_symbols >> $output_objdir/$soname.def;
-	    fi~
-	    $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+	    _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+	    # If the export-symbols file already is a .def file, use it as
+	    # is; otherwise, prepend EXPORTS...
+	    _LT_TAGVAR(archive_expsym_cmds, $1)='if _LT_DLL_DEF_P([$export_symbols]); then
+              cp $export_symbols $output_objdir/$soname.def;
+            else
+              echo EXPORTS > $output_objdir/$soname.def;
+              cat $export_symbols >> $output_objdir/$soname.def;
+            fi~
+            $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
 	  else
 	    _LT_TAGVAR(ld_shlibs, $1)=no
 	  fi
@@ -6206,6 +6723,34 @@
         _LT_DARWIN_LINKER_FEATURES($1)
 	;;
 
+      os2*)
+	_LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+	_LT_TAGVAR(hardcode_minus_L, $1)=yes
+	_LT_TAGVAR(allow_undefined_flag, $1)=unsupported
+	shrext_cmds=.dll
+	_LT_TAGVAR(archive_cmds, $1)='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~
+	  $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~
+	  $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~
+	  $ECHO EXPORTS >> $output_objdir/$libname.def~
+	  emxexp $libobjs | $SED /"_DLL_InitTerm"/d >> $output_objdir/$libname.def~
+	  $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~
+	  emximp -o $lib $output_objdir/$libname.def'
+	_LT_TAGVAR(archive_expsym_cmds, $1)='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~
+	  $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~
+	  $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~
+	  $ECHO EXPORTS >> $output_objdir/$libname.def~
+	  prefix_cmds="$SED"~
+	  if test EXPORTS = "`$SED 1q $export_symbols`"; then
+	    prefix_cmds="$prefix_cmds -e 1d";
+	  fi~
+	  prefix_cmds="$prefix_cmds -e \"s/^\(.*\)$/_\1/g\""~
+	  cat $export_symbols | $prefix_cmds >> $output_objdir/$libname.def~
+	  $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~
+	  emximp -o $lib $output_objdir/$libname.def'
+	_LT_TAGVAR(old_archive_From_new_cmds, $1)='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def'
+	_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
+	;;
+
       dgux*)
         case $cc_basename in
           ec++*)
@@ -6241,14 +6786,14 @@
         ;;
 
       haiku*)
-        _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+        _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib'
         _LT_TAGVAR(link_all_deplibs, $1)=yes
         ;;
 
       hpux9*)
-        _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
+        _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl+b $wl$libdir'
         _LT_TAGVAR(hardcode_libdir_separator, $1)=:
-        _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+        _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E'
         _LT_TAGVAR(hardcode_direct, $1)=yes
         _LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH,
 				             # but as the default
@@ -6260,7 +6805,7 @@
             _LT_TAGVAR(ld_shlibs, $1)=no
             ;;
           aCC*)
-            _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -b ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+            _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -b $wl+b $wl$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test "x$output_objdir/$soname" = "x$lib" || mv $output_objdir/$soname $lib'
             # Commands to make compiler produce verbose output that lists
             # what "hidden" libraries, object files and flags are used when
             # linking a shared library.
@@ -6269,11 +6814,11 @@
             # explicitly linking system object files so we need to strip them
             # from the output so that they don't get included in the library
             # dependencies.
-            output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $EGREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"'
+            output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $EGREP "\-L"`; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"'
             ;;
           *)
-            if test "$GXX" = yes; then
-              _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared -nostdlib $pic_flag ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+            if test yes = "$GXX"; then
+              _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared -nostdlib $pic_flag $wl+b $wl$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test "x$output_objdir/$soname" = "x$lib" || mv $output_objdir/$soname $lib'
             else
               # FIXME: insert proper C++ library support
               _LT_TAGVAR(ld_shlibs, $1)=no
@@ -6283,15 +6828,15 @@
         ;;
 
       hpux10*|hpux11*)
-        if test $with_gnu_ld = no; then
-	  _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
+        if test no = "$with_gnu_ld"; then
+	  _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl+b $wl$libdir'
 	  _LT_TAGVAR(hardcode_libdir_separator, $1)=:
 
           case $host_cpu in
             hppa*64*|ia64*)
               ;;
             *)
-	      _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+	      _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E'
               ;;
           esac
         fi
@@ -6317,13 +6862,13 @@
           aCC*)
 	    case $host_cpu in
 	      hppa*64*)
-	        _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+	        _LT_TAGVAR(archive_cmds, $1)='$CC -b $wl+h $wl$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
 	        ;;
 	      ia64*)
-	        _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+	        _LT_TAGVAR(archive_cmds, $1)='$CC -b $wl+h $wl$soname $wl+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
 	        ;;
 	      *)
-	        _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+	        _LT_TAGVAR(archive_cmds, $1)='$CC -b $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
 	        ;;
 	    esac
 	    # Commands to make compiler produce verbose output that lists
@@ -6334,20 +6879,20 @@
 	    # explicitly linking system object files so we need to strip them
 	    # from the output so that they don't get included in the library
 	    # dependencies.
-	    output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $GREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"'
+	    output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $GREP "\-L"`; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"'
 	    ;;
           *)
-	    if test "$GXX" = yes; then
-	      if test $with_gnu_ld = no; then
+	    if test yes = "$GXX"; then
+	      if test no = "$with_gnu_ld"; then
 	        case $host_cpu in
 	          hppa*64*)
-	            _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+	            _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC $wl+h $wl$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
 	            ;;
 	          ia64*)
-	            _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $pic_flag ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+	            _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $pic_flag $wl+h $wl$soname $wl+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
 	            ;;
 	          *)
-	            _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+	            _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $pic_flag $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
 	            ;;
 	        esac
 	      fi
@@ -6362,22 +6907,22 @@
       interix[[3-9]]*)
 	_LT_TAGVAR(hardcode_direct, $1)=no
 	_LT_TAGVAR(hardcode_shlibpath_var, $1)=no
-	_LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
-	_LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+	_LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir'
+	_LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E'
 	# Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc.
 	# Instead, shared libraries are loaded at an image base (0x10000000 by
 	# default) and relocated if they conflict, which is a slow very memory
 	# consuming and fragmenting process.  To avoid this, we pick a random,
 	# 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link
 	# time.  Moving up from 0x10000000 also allows more sbrk(2) space.
-	_LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
-	_LT_TAGVAR(archive_expsym_cmds, $1)='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
+	_LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
+	_LT_TAGVAR(archive_expsym_cmds, $1)='sed "s|^|_|" $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--retain-symbols-file,$output_objdir/$soname.expsym $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
 	;;
       irix5* | irix6*)
         case $cc_basename in
           CC*)
 	    # SGI C++
-	    _LT_TAGVAR(archive_cmds, $1)='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib'
+	    _LT_TAGVAR(archive_cmds, $1)='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib'
 
 	    # Archives containing C++ object files must be created using
 	    # "CC -ar", where "CC" is the IRIX C++ compiler.  This is
@@ -6386,17 +6931,17 @@
 	    _LT_TAGVAR(old_archive_cmds, $1)='$CC -ar -WR,-u -o $oldlib $oldobjs'
 	    ;;
           *)
-	    if test "$GXX" = yes; then
-	      if test "$with_gnu_ld" = no; then
-	        _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+	    if test yes = "$GXX"; then
+	      if test no = "$with_gnu_ld"; then
+	        _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib'
 	      else
-	        _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` -o $lib'
+	        _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` -o $lib'
 	      fi
 	    fi
 	    _LT_TAGVAR(link_all_deplibs, $1)=yes
 	    ;;
         esac
-        _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+        _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir'
         _LT_TAGVAR(hardcode_libdir_separator, $1)=:
         _LT_TAGVAR(inherit_rpath, $1)=yes
         ;;
@@ -6409,8 +6954,8 @@
 	    # KCC will only create a shared library if the output file
 	    # ends with ".so" (or ".sl" for HP-UX), so rename the library
 	    # to its proper name (with version) after linking.
-	    _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib'
-	    _LT_TAGVAR(archive_expsym_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib ${wl}-retain-symbols-file,$export_symbols; mv \$templib $lib'
+	    _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\$tempext\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib'
+	    _LT_TAGVAR(archive_expsym_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\$tempext\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib $wl-retain-symbols-file,$export_symbols; mv \$templib $lib'
 	    # Commands to make compiler produce verbose output that lists
 	    # what "hidden" libraries, object files and flags are used when
 	    # linking a shared library.
@@ -6419,10 +6964,10 @@
 	    # explicitly linking system object files so we need to strip them
 	    # from the output so that they don't get included in the library
 	    # dependencies.
-	    output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | $GREP "ld"`; rm -f libconftest$shared_ext; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"'
+	    output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | $GREP "ld"`; rm -f libconftest$shared_ext; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"'
 
-	    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
-	    _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
+	    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir'
+	    _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-dynamic'
 
 	    # Archives containing C++ object files must be created using
 	    # "CC -Bstatic", where "CC" is the KAI C++ compiler.
@@ -6436,59 +6981,59 @@
 	    # earlier do not add the objects themselves.
 	    case `$CC -V 2>&1` in
 	      *"Version 7."*)
-	        _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'
-		_LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+	        _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib'
+		_LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib'
 		;;
 	      *)  # Version 8.0 or newer
 	        tmp_idyn=
 	        case $host_cpu in
 		  ia64*) tmp_idyn=' -i_dynamic';;
 		esac
-	        _LT_TAGVAR(archive_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-		_LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+	        _LT_TAGVAR(archive_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib'
+		_LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib'
 		;;
 	    esac
 	    _LT_TAGVAR(archive_cmds_need_lc, $1)=no
-	    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
-	    _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
-	    _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive'
+	    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir'
+	    _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-dynamic'
+	    _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive$convenience $wl--no-whole-archive'
 	    ;;
           pgCC* | pgcpp*)
             # Portland Group C++ compiler
 	    case `$CC -V` in
 	    *pgCC\ [[1-5]].* | *pgcpp\ [[1-5]].*)
 	      _LT_TAGVAR(prelink_cmds, $1)='tpldir=Template.dir~
-		rm -rf $tpldir~
-		$CC --prelink_objects --instantiation_dir $tpldir $objs $libobjs $compile_deplibs~
-		compile_command="$compile_command `find $tpldir -name \*.o | sort | $NL2SP`"'
+               rm -rf $tpldir~
+               $CC --prelink_objects --instantiation_dir $tpldir $objs $libobjs $compile_deplibs~
+               compile_command="$compile_command `find $tpldir -name \*.o | sort | $NL2SP`"'
 	      _LT_TAGVAR(old_archive_cmds, $1)='tpldir=Template.dir~
-		rm -rf $tpldir~
-		$CC --prelink_objects --instantiation_dir $tpldir $oldobjs$old_deplibs~
-		$AR $AR_FLAGS $oldlib$oldobjs$old_deplibs `find $tpldir -name \*.o | sort | $NL2SP`~
-		$RANLIB $oldlib'
+                rm -rf $tpldir~
+                $CC --prelink_objects --instantiation_dir $tpldir $oldobjs$old_deplibs~
+                $AR $AR_FLAGS $oldlib$oldobjs$old_deplibs `find $tpldir -name \*.o | sort | $NL2SP`~
+                $RANLIB $oldlib'
 	      _LT_TAGVAR(archive_cmds, $1)='tpldir=Template.dir~
-		rm -rf $tpldir~
-		$CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~
-		$CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib'
+                rm -rf $tpldir~
+                $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~
+                $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib'
 	      _LT_TAGVAR(archive_expsym_cmds, $1)='tpldir=Template.dir~
-		rm -rf $tpldir~
-		$CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~
-		$CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib'
+                rm -rf $tpldir~
+                $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~
+                $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib'
 	      ;;
 	    *) # Version 6 and above use weak symbols
-	      _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib'
-	      _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib'
+	      _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib'
+	      _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib'
 	      ;;
 	    esac
 
-	    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}--rpath ${wl}$libdir'
-	    _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
-	    _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive'
+	    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl--rpath $wl$libdir'
+	    _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-dynamic'
+	    _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive'
             ;;
 	  cxx*)
 	    # Compaq C++
-	    _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'
-	    _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname  -o $lib ${wl}-retain-symbols-file $wl$export_symbols'
+	    _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib'
+	    _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname  -o $lib $wl-retain-symbols-file $wl$export_symbols'
 
 	    runpath_var=LD_RUN_PATH
 	    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir'
@@ -6502,18 +7047,18 @@
 	    # explicitly linking system object files so we need to strip them
 	    # from the output so that they don't get included in the library
 	    # dependencies.
-	    output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "X$list" | $Xsed'
+	    output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "X$list" | $Xsed'
 	    ;;
 	  xl* | mpixl* | bgxl*)
 	    # IBM XL 8.0 on PPC, with GNU ld
-	    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
-	    _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
-	    _LT_TAGVAR(archive_cmds, $1)='$CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-	    if test "x$supports_anon_versioning" = xyes; then
+	    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir'
+	    _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-dynamic'
+	    _LT_TAGVAR(archive_cmds, $1)='$CC -qmkshrobj $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib'
+	    if test yes = "$supports_anon_versioning"; then
 	      _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~
-		cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
-		echo "local: *; };" >> $output_objdir/$libname.ver~
-		$CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib'
+                cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
+                echo "local: *; };" >> $output_objdir/$libname.ver~
+                $CC -qmkshrobj $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-version-script $wl$output_objdir/$libname.ver -o $lib'
 	    fi
 	    ;;
 	  *)
@@ -6521,10 +7066,10 @@
 	    *Sun\ C*)
 	      # Sun C++ 5.9
 	      _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs'
-	      _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
-	      _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file ${wl}$export_symbols'
+	      _LT_TAGVAR(archive_cmds, $1)='$CC -G$allow_undefined_flag -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+	      _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G$allow_undefined_flag -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-retain-symbols-file $wl$export_symbols'
 	      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
-	      _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive'
+	      _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive'
 	      _LT_TAGVAR(compiler_needs_object, $1)=yes
 
 	      # Not sure whether something based on
@@ -6582,22 +7127,17 @@
         _LT_TAGVAR(ld_shlibs, $1)=yes
 	;;
 
-      openbsd2*)
-        # C++ shared libraries are fairly broken
-	_LT_TAGVAR(ld_shlibs, $1)=no
-	;;
-
-      openbsd*)
+      openbsd* | bitrig*)
 	if test -f /usr/libexec/ld.so; then
 	  _LT_TAGVAR(hardcode_direct, $1)=yes
 	  _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
 	  _LT_TAGVAR(hardcode_direct_absolute, $1)=yes
 	  _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib'
-	  _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
-	  if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
-	    _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file,$export_symbols -o $lib'
-	    _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
-	    _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
+	  _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir'
+	  if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`"; then
+	    _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-retain-symbols-file,$export_symbols -o $lib'
+	    _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E'
+	    _LT_TAGVAR(whole_archive_flag_spec, $1)=$wlarc'--whole-archive$convenience '$wlarc'--no-whole-archive'
 	  fi
 	  output_verbose_link_cmd=func_echo_all
 	else
@@ -6613,9 +7153,9 @@
 	    # KCC will only create a shared library if the output file
 	    # ends with ".so" (or ".sl" for HP-UX), so rename the library
 	    # to its proper name (with version) after linking.
-	    _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo "$lib" | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib'
+	    _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo "$lib" | $SED -e "s/\$tempext\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib'
 
-	    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
+	    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir'
 	    _LT_TAGVAR(hardcode_libdir_separator, $1)=:
 
 	    # Archives containing C++ object files must be created using
@@ -6633,17 +7173,17 @@
           cxx*)
 	    case $host in
 	      osf3*)
-	        _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*'
-	        _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $soname `test -n "$verstring" && func_echo_all "${wl}-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib'
-	        _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+	        _LT_TAGVAR(allow_undefined_flag, $1)=' $wl-expect_unresolved $wl\*'
+	        _LT_TAGVAR(archive_cmds, $1)='$CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $soname `test -n "$verstring" && func_echo_all "$wl-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib'
+	        _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir'
 		;;
 	      *)
 	        _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*'
-	        _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib'
+	        _LT_TAGVAR(archive_cmds, $1)='$CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib'
 	        _LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~
-	          echo "-hidden">> $lib.exp~
-	          $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname ${wl}-input ${wl}$lib.exp  `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib~
-	          $RM $lib.exp'
+                  echo "-hidden">> $lib.exp~
+                  $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname $wl-input $wl$lib.exp  `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib~
+                  $RM $lib.exp'
 	        _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir'
 		;;
 	    esac
@@ -6658,21 +7198,21 @@
 	    # explicitly linking system object files so we need to strip them
 	    # from the output so that they don't get included in the library
 	    # dependencies.
-	    output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld" | $GREP -v "ld:"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"'
+	    output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld" | $GREP -v "ld:"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"'
 	    ;;
 	  *)
-	    if test "$GXX" = yes && test "$with_gnu_ld" = no; then
-	      _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*'
+	    if test yes,no = "$GXX,$with_gnu_ld"; then
+	      _LT_TAGVAR(allow_undefined_flag, $1)=' $wl-expect_unresolved $wl\*'
 	      case $host in
 	        osf3*)
-	          _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+	          _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib'
 		  ;;
 	        *)
-	          _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+	          _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-msym $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib'
 		  ;;
 	      esac
 
-	      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+	      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir'
 	      _LT_TAGVAR(hardcode_libdir_separator, $1)=:
 
 	      # Commands to make compiler produce verbose output that lists
@@ -6718,9 +7258,9 @@
 	    # Sun C++ 4.2, 5.x and Centerline C++
             _LT_TAGVAR(archive_cmds_need_lc,$1)=yes
 	    _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs'
-	    _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag}  -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+	    _LT_TAGVAR(archive_cmds, $1)='$CC -G$allow_undefined_flag -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
 	    _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
-	      $CC -G${allow_undefined_flag} ${wl}-M ${wl}$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp'
+              $CC -G$allow_undefined_flag $wl-M $wl$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp'
 
 	    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
 	    _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
@@ -6728,7 +7268,7 @@
 	      solaris2.[[0-5]] | solaris2.[[0-5]].*) ;;
 	      *)
 		# The compiler driver will combine and reorder linker options,
-		# but understands `-z linker_flag'.
+		# but understands '-z linker_flag'.
 	        # Supported since Solaris 2.6 (maybe 2.5.1?)
 		_LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract'
 	        ;;
@@ -6745,30 +7285,30 @@
 	    ;;
           gcx*)
 	    # Green Hills C++ Compiler
-	    _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'
+	    _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-h $wl$soname -o $lib'
 
 	    # The C++ compiler must be used to create the archive.
 	    _LT_TAGVAR(old_archive_cmds, $1)='$CC $LDFLAGS -archive -o $oldlib $oldobjs'
 	    ;;
           *)
 	    # GNU C++ compiler with Solaris linker
-	    if test "$GXX" = yes && test "$with_gnu_ld" = no; then
-	      _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-z ${wl}defs'
+	    if test yes,no = "$GXX,$with_gnu_ld"; then
+	      _LT_TAGVAR(no_undefined_flag, $1)=' $wl-z ${wl}defs'
 	      if $CC --version | $GREP -v '^2\.7' > /dev/null; then
-	        _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'
+	        _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-h $wl$soname -o $lib'
 	        _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
-		  $CC -shared $pic_flag -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp'
+                  $CC -shared $pic_flag -nostdlib $wl-M $wl$lib.exp $wl-h $wl$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp'
 
 	        # Commands to make compiler produce verbose output that lists
 	        # what "hidden" libraries, object files and flags are used when
 	        # linking a shared library.
 	        output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"'
 	      else
-	        # g++ 2.7 appears to require `-G' NOT `-shared' on this
+	        # g++ 2.7 appears to require '-G' NOT '-shared' on this
 	        # platform.
-	        _LT_TAGVAR(archive_cmds, $1)='$CC -G -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'
+	        _LT_TAGVAR(archive_cmds, $1)='$CC -G -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-h $wl$soname -o $lib'
 	        _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
-		  $CC -G -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp'
+                  $CC -G -nostdlib $wl-M $wl$lib.exp $wl-h $wl$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp'
 
 	        # Commands to make compiler produce verbose output that lists
 	        # what "hidden" libraries, object files and flags are used when
@@ -6776,11 +7316,11 @@
 	        output_verbose_link_cmd='$CC -G $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"'
 	      fi
 
-	      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $wl$libdir'
+	      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-R $wl$libdir'
 	      case $host_os in
 		solaris2.[[0-5]] | solaris2.[[0-5]].*) ;;
 		*)
-		  _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract'
+		  _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl-z ${wl}allextract$convenience $wl-z ${wl}defaultextract'
 		  ;;
 	      esac
 	    fi
@@ -6789,52 +7329,52 @@
         ;;
 
     sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*)
-      _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text'
+      _LT_TAGVAR(no_undefined_flag, $1)='$wl-z,text'
       _LT_TAGVAR(archive_cmds_need_lc, $1)=no
       _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
       runpath_var='LD_RUN_PATH'
 
       case $cc_basename in
         CC*)
-	  _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
-	  _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+	  _LT_TAGVAR(archive_cmds, $1)='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+	  _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
 	  ;;
 	*)
-	  _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
-	  _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+	  _LT_TAGVAR(archive_cmds, $1)='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+	  _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
 	  ;;
       esac
       ;;
 
       sysv5* | sco3.2v5* | sco5v6*)
-	# Note: We can NOT use -z defs as we might desire, because we do not
+	# Note: We CANNOT use -z defs as we might desire, because we do not
 	# link with -lc, and that would cause any symbols used from libc to
 	# always be unresolved, which means just about no library would
 	# ever link correctly.  If we're not using GNU ld we use -z text
 	# though, which does catch some bad symbols but isn't as heavy-handed
 	# as -z defs.
-	_LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text'
-	_LT_TAGVAR(allow_undefined_flag, $1)='${wl}-z,nodefs'
+	_LT_TAGVAR(no_undefined_flag, $1)='$wl-z,text'
+	_LT_TAGVAR(allow_undefined_flag, $1)='$wl-z,nodefs'
 	_LT_TAGVAR(archive_cmds_need_lc, $1)=no
 	_LT_TAGVAR(hardcode_shlibpath_var, $1)=no
-	_LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R,$libdir'
+	_LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-R,$libdir'
 	_LT_TAGVAR(hardcode_libdir_separator, $1)=':'
 	_LT_TAGVAR(link_all_deplibs, $1)=yes
-	_LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport'
+	_LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-Bexport'
 	runpath_var='LD_RUN_PATH'
 
 	case $cc_basename in
           CC*)
-	    _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
-	    _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+	    _LT_TAGVAR(archive_cmds, $1)='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+	    _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
 	    _LT_TAGVAR(old_archive_cmds, $1)='$CC -Tprelink_objects $oldobjs~
-	      '"$_LT_TAGVAR(old_archive_cmds, $1)"
+              '"$_LT_TAGVAR(old_archive_cmds, $1)"
 	    _LT_TAGVAR(reload_cmds, $1)='$CC -Tprelink_objects $reload_objs~
-	      '"$_LT_TAGVAR(reload_cmds, $1)"
+              '"$_LT_TAGVAR(reload_cmds, $1)"
 	    ;;
 	  *)
-	    _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
-	    _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+	    _LT_TAGVAR(archive_cmds, $1)='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+	    _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
 	    ;;
 	esac
       ;;
@@ -6865,10 +7405,10 @@
     esac
 
     AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)])
-    test "$_LT_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no
+    test no = "$_LT_TAGVAR(ld_shlibs, $1)" && can_build_shared=no
 
-    _LT_TAGVAR(GCC, $1)="$GXX"
-    _LT_TAGVAR(LD, $1)="$LD"
+    _LT_TAGVAR(GCC, $1)=$GXX
+    _LT_TAGVAR(LD, $1)=$LD
 
     ## CAVEAT EMPTOR:
     ## There is no encapsulation within the following macros, do not change
@@ -6895,7 +7435,7 @@
   lt_cv_path_LD=$lt_save_path_LD
   lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld
   lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld
-fi # test "$_lt_caught_CXX_error" != yes
+fi # test yes != "$_lt_caught_CXX_error"
 
 AC_LANG_POP
 ])# _LT_LANG_CXX_CONFIG
@@ -6917,13 +7457,14 @@
 AC_REQUIRE([_LT_PROG_ECHO_BACKSLASH])
 func_stripname_cnf ()
 {
-  case ${2} in
-  .*) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%\\\\${2}\$%%"`;;
-  *)  func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%${2}\$%%"`;;
+  case @S|@2 in
+  .*) func_stripname_result=`$ECHO "@S|@3" | $SED "s%^@S|@1%%; s%\\\\@S|@2\$%%"`;;
+  *)  func_stripname_result=`$ECHO "@S|@3" | $SED "s%^@S|@1%%; s%@S|@2\$%%"`;;
   esac
 } # func_stripname_cnf
 ])# _LT_FUNC_STRIPNAME_CNF
 
+
 # _LT_SYS_HIDDEN_LIBDEPS([TAGNAME])
 # ---------------------------------
 # Figure out "hidden" library dependencies from verbose
@@ -7007,13 +7548,13 @@
   pre_test_object_deps_done=no
 
   for p in `eval "$output_verbose_link_cmd"`; do
-    case ${prev}${p} in
+    case $prev$p in
 
     -L* | -R* | -l*)
        # Some compilers place space between "-{L,R}" and the path.
        # Remove the space.
-       if test $p = "-L" ||
-          test $p = "-R"; then
+       if test x-L = "$p" ||
+          test x-R = "$p"; then
 	 prev=$p
 	 continue
        fi
@@ -7029,16 +7570,16 @@
        case $p in
        =*) func_stripname_cnf '=' '' "$p"; p=$lt_sysroot$func_stripname_result ;;
        esac
-       if test "$pre_test_object_deps_done" = no; then
-	 case ${prev} in
+       if test no = "$pre_test_object_deps_done"; then
+	 case $prev in
 	 -L | -R)
 	   # Internal compiler library paths should come after those
 	   # provided the user.  The postdeps already come after the
 	   # user supplied libs so there is no need to process them.
 	   if test -z "$_LT_TAGVAR(compiler_lib_search_path, $1)"; then
-	     _LT_TAGVAR(compiler_lib_search_path, $1)="${prev}${p}"
+	     _LT_TAGVAR(compiler_lib_search_path, $1)=$prev$p
 	   else
-	     _LT_TAGVAR(compiler_lib_search_path, $1)="${_LT_TAGVAR(compiler_lib_search_path, $1)} ${prev}${p}"
+	     _LT_TAGVAR(compiler_lib_search_path, $1)="${_LT_TAGVAR(compiler_lib_search_path, $1)} $prev$p"
 	   fi
 	   ;;
 	 # The "-l" case would never come before the object being
@@ -7046,9 +7587,9 @@
 	 esac
        else
 	 if test -z "$_LT_TAGVAR(postdeps, $1)"; then
-	   _LT_TAGVAR(postdeps, $1)="${prev}${p}"
+	   _LT_TAGVAR(postdeps, $1)=$prev$p
 	 else
-	   _LT_TAGVAR(postdeps, $1)="${_LT_TAGVAR(postdeps, $1)} ${prev}${p}"
+	   _LT_TAGVAR(postdeps, $1)="${_LT_TAGVAR(postdeps, $1)} $prev$p"
 	 fi
        fi
        prev=
@@ -7063,15 +7604,15 @@
 	 continue
        fi
 
-       if test "$pre_test_object_deps_done" = no; then
+       if test no = "$pre_test_object_deps_done"; then
 	 if test -z "$_LT_TAGVAR(predep_objects, $1)"; then
-	   _LT_TAGVAR(predep_objects, $1)="$p"
+	   _LT_TAGVAR(predep_objects, $1)=$p
 	 else
 	   _LT_TAGVAR(predep_objects, $1)="$_LT_TAGVAR(predep_objects, $1) $p"
 	 fi
        else
 	 if test -z "$_LT_TAGVAR(postdep_objects, $1)"; then
-	   _LT_TAGVAR(postdep_objects, $1)="$p"
+	   _LT_TAGVAR(postdep_objects, $1)=$p
 	 else
 	   _LT_TAGVAR(postdep_objects, $1)="$_LT_TAGVAR(postdep_objects, $1) $p"
 	 fi
@@ -7102,51 +7643,6 @@
   _LT_TAGVAR(postdep_objects,$1)=
   _LT_TAGVAR(postdeps,$1)=
   ;;
-
-linux*)
-  case `$CC -V 2>&1 | sed 5q` in
-  *Sun\ C*)
-    # Sun C++ 5.9
-
-    # The more standards-conforming stlport4 library is
-    # incompatible with the Cstd library. Avoid specifying
-    # it if it's in CXXFLAGS. Ignore libCrun as
-    # -library=stlport4 depends on it.
-    case " $CXX $CXXFLAGS " in
-    *" -library=stlport4 "*)
-      solaris_use_stlport4=yes
-      ;;
-    esac
-
-    if test "$solaris_use_stlport4" != yes; then
-      _LT_TAGVAR(postdeps,$1)='-library=Cstd -library=Crun'
-    fi
-    ;;
-  esac
-  ;;
-
-solaris*)
-  case $cc_basename in
-  CC* | sunCC*)
-    # The more standards-conforming stlport4 library is
-    # incompatible with the Cstd library. Avoid specifying
-    # it if it's in CXXFLAGS. Ignore libCrun as
-    # -library=stlport4 depends on it.
-    case " $CXX $CXXFLAGS " in
-    *" -library=stlport4 "*)
-      solaris_use_stlport4=yes
-      ;;
-    esac
-
-    # Adding this requires a known-good setup of shared libraries for
-    # Sun compiler versions before 5.6, else PIC objects from an old
-    # archive will be linked into the output, leading to subtle bugs.
-    if test "$solaris_use_stlport4" != yes; then
-      _LT_TAGVAR(postdeps,$1)='-library=Cstd -library=Crun'
-    fi
-    ;;
-  esac
-  ;;
 esac
 ])
 
@@ -7155,7 +7651,7 @@
 esac
  _LT_TAGVAR(compiler_lib_search_dirs, $1)=
 if test -n "${_LT_TAGVAR(compiler_lib_search_path, $1)}"; then
- _LT_TAGVAR(compiler_lib_search_dirs, $1)=`echo " ${_LT_TAGVAR(compiler_lib_search_path, $1)}" | ${SED} -e 's! -L! !g' -e 's!^ !!'`
+ _LT_TAGVAR(compiler_lib_search_dirs, $1)=`echo " ${_LT_TAGVAR(compiler_lib_search_path, $1)}" | $SED -e 's! -L! !g' -e 's!^ !!'`
 fi
 _LT_TAGDECL([], [compiler_lib_search_dirs], [1],
     [The directories searched by this compiler when creating a shared library])
@@ -7175,10 +7671,10 @@
 # --------------------------
 # Ensure that the configuration variables for a Fortran 77 compiler are
 # suitably defined.  These variables are subsequently used by _LT_CONFIG
-# to write the compiler configuration to `libtool'.
+# to write the compiler configuration to 'libtool'.
 m4_defun([_LT_LANG_F77_CONFIG],
 [AC_LANG_PUSH(Fortran 77)
-if test -z "$F77" || test "X$F77" = "Xno"; then
+if test -z "$F77" || test no = "$F77"; then
   _lt_disable_F77=yes
 fi
 
@@ -7215,7 +7711,7 @@
 # the F77 compiler isn't working.  Some variables (like enable_shared)
 # are currently assumed to apply to all compilers on this platform,
 # and will be corrupted by setting them based on a non-working compiler.
-if test "$_lt_disable_F77" != yes; then
+if test yes != "$_lt_disable_F77"; then
   # Code to be used in simple compile tests
   lt_simple_compile_test_code="\
       subroutine t
@@ -7237,7 +7733,7 @@
   _LT_LINKER_BOILERPLATE
 
   # Allow CC to be a program name with arguments.
-  lt_save_CC="$CC"
+  lt_save_CC=$CC
   lt_save_GCC=$GCC
   lt_save_CFLAGS=$CFLAGS
   CC=${F77-"f77"}
@@ -7251,21 +7747,25 @@
     AC_MSG_RESULT([$can_build_shared])
 
     AC_MSG_CHECKING([whether to build shared libraries])
-    test "$can_build_shared" = "no" && enable_shared=no
+    test no = "$can_build_shared" && enable_shared=no
 
     # On AIX, shared libraries and static libraries use the same namespace, and
     # are all built from PIC.
     case $host_os in
       aix3*)
-        test "$enable_shared" = yes && enable_static=no
+        test yes = "$enable_shared" && enable_static=no
         if test -n "$RANLIB"; then
           archive_cmds="$archive_cmds~\$RANLIB \$lib"
           postinstall_cmds='$RANLIB $lib'
         fi
         ;;
       aix[[4-9]]*)
-	if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then
-	  test "$enable_shared" = yes && enable_static=no
+	if test ia64 != "$host_cpu"; then
+	  case $enable_shared,$with_aix_soname,$aix_use_runtimelinking in
+	  yes,aix,yes) ;;		# shared object as lib.so file only
+	  yes,svr4,*) ;;		# shared object as lib.so archive member only
+	  yes,*) enable_static=no ;;	# shared object in lib.a archive as well
+	  esac
 	fi
         ;;
     esac
@@ -7273,11 +7773,11 @@
 
     AC_MSG_CHECKING([whether to build static libraries])
     # Make sure either enable_shared or enable_static is yes.
-    test "$enable_shared" = yes || enable_static=yes
+    test yes = "$enable_shared" || enable_static=yes
     AC_MSG_RESULT([$enable_static])
 
-    _LT_TAGVAR(GCC, $1)="$G77"
-    _LT_TAGVAR(LD, $1)="$LD"
+    _LT_TAGVAR(GCC, $1)=$G77
+    _LT_TAGVAR(LD, $1)=$LD
 
     ## CAVEAT EMPTOR:
     ## There is no encapsulation within the following macros, do not change
@@ -7294,9 +7794,9 @@
   fi # test -n "$compiler"
 
   GCC=$lt_save_GCC
-  CC="$lt_save_CC"
-  CFLAGS="$lt_save_CFLAGS"
-fi # test "$_lt_disable_F77" != yes
+  CC=$lt_save_CC
+  CFLAGS=$lt_save_CFLAGS
+fi # test yes != "$_lt_disable_F77"
 
 AC_LANG_POP
 ])# _LT_LANG_F77_CONFIG
@@ -7306,11 +7806,11 @@
 # -------------------------
 # Ensure that the configuration variables for a Fortran compiler are
 # suitably defined.  These variables are subsequently used by _LT_CONFIG
-# to write the compiler configuration to `libtool'.
+# to write the compiler configuration to 'libtool'.
 m4_defun([_LT_LANG_FC_CONFIG],
 [AC_LANG_PUSH(Fortran)
 
-if test -z "$FC" || test "X$FC" = "Xno"; then
+if test -z "$FC" || test no = "$FC"; then
   _lt_disable_FC=yes
 fi
 
@@ -7347,7 +7847,7 @@
 # the FC compiler isn't working.  Some variables (like enable_shared)
 # are currently assumed to apply to all compilers on this platform,
 # and will be corrupted by setting them based on a non-working compiler.
-if test "$_lt_disable_FC" != yes; then
+if test yes != "$_lt_disable_FC"; then
   # Code to be used in simple compile tests
   lt_simple_compile_test_code="\
       subroutine t
@@ -7369,7 +7869,7 @@
   _LT_LINKER_BOILERPLATE
 
   # Allow CC to be a program name with arguments.
-  lt_save_CC="$CC"
+  lt_save_CC=$CC
   lt_save_GCC=$GCC
   lt_save_CFLAGS=$CFLAGS
   CC=${FC-"f95"}
@@ -7385,21 +7885,25 @@
     AC_MSG_RESULT([$can_build_shared])
 
     AC_MSG_CHECKING([whether to build shared libraries])
-    test "$can_build_shared" = "no" && enable_shared=no
+    test no = "$can_build_shared" && enable_shared=no
 
     # On AIX, shared libraries and static libraries use the same namespace, and
     # are all built from PIC.
     case $host_os in
       aix3*)
-        test "$enable_shared" = yes && enable_static=no
+        test yes = "$enable_shared" && enable_static=no
         if test -n "$RANLIB"; then
           archive_cmds="$archive_cmds~\$RANLIB \$lib"
           postinstall_cmds='$RANLIB $lib'
         fi
         ;;
       aix[[4-9]]*)
-	if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then
-	  test "$enable_shared" = yes && enable_static=no
+	if test ia64 != "$host_cpu"; then
+	  case $enable_shared,$with_aix_soname,$aix_use_runtimelinking in
+	  yes,aix,yes) ;;		# shared object as lib.so file only
+	  yes,svr4,*) ;;		# shared object as lib.so archive member only
+	  yes,*) enable_static=no ;;	# shared object in lib.a archive as well
+	  esac
 	fi
         ;;
     esac
@@ -7407,11 +7911,11 @@
 
     AC_MSG_CHECKING([whether to build static libraries])
     # Make sure either enable_shared or enable_static is yes.
-    test "$enable_shared" = yes || enable_static=yes
+    test yes = "$enable_shared" || enable_static=yes
     AC_MSG_RESULT([$enable_static])
 
-    _LT_TAGVAR(GCC, $1)="$ac_cv_fc_compiler_gnu"
-    _LT_TAGVAR(LD, $1)="$LD"
+    _LT_TAGVAR(GCC, $1)=$ac_cv_fc_compiler_gnu
+    _LT_TAGVAR(LD, $1)=$LD
 
     ## CAVEAT EMPTOR:
     ## There is no encapsulation within the following macros, do not change
@@ -7431,7 +7935,7 @@
   GCC=$lt_save_GCC
   CC=$lt_save_CC
   CFLAGS=$lt_save_CFLAGS
-fi # test "$_lt_disable_FC" != yes
+fi # test yes != "$_lt_disable_FC"
 
 AC_LANG_POP
 ])# _LT_LANG_FC_CONFIG
@@ -7441,7 +7945,7 @@
 # --------------------------
 # Ensure that the configuration variables for the GNU Java Compiler compiler
 # are suitably defined.  These variables are subsequently used by _LT_CONFIG
-# to write the compiler configuration to `libtool'.
+# to write the compiler configuration to 'libtool'.
 m4_defun([_LT_LANG_GCJ_CONFIG],
 [AC_REQUIRE([LT_PROG_GCJ])dnl
 AC_LANG_SAVE
@@ -7475,7 +7979,7 @@
 CFLAGS=$GCJFLAGS
 compiler=$CC
 _LT_TAGVAR(compiler, $1)=$CC
-_LT_TAGVAR(LD, $1)="$LD"
+_LT_TAGVAR(LD, $1)=$LD
 _LT_CC_BASENAME([$compiler])
 
 # GCJ did not exist at the time GCC didn't implicitly link libc in.
@@ -7512,7 +8016,7 @@
 # --------------------------
 # Ensure that the configuration variables for the GNU Go compiler
 # are suitably defined.  These variables are subsequently used by _LT_CONFIG
-# to write the compiler configuration to `libtool'.
+# to write the compiler configuration to 'libtool'.
 m4_defun([_LT_LANG_GO_CONFIG],
 [AC_REQUIRE([LT_PROG_GO])dnl
 AC_LANG_SAVE
@@ -7546,7 +8050,7 @@
 CFLAGS=$GOFLAGS
 compiler=$CC
 _LT_TAGVAR(compiler, $1)=$CC
-_LT_TAGVAR(LD, $1)="$LD"
+_LT_TAGVAR(LD, $1)=$LD
 _LT_CC_BASENAME([$compiler])
 
 # Go did not exist at the time GCC didn't implicitly link libc in.
@@ -7583,7 +8087,7 @@
 # -------------------------
 # Ensure that the configuration variables for the Windows resource compiler
 # are suitably defined.  These variables are subsequently used by _LT_CONFIG
-# to write the compiler configuration to `libtool'.
+# to write the compiler configuration to 'libtool'.
 m4_defun([_LT_LANG_RC_CONFIG],
 [AC_REQUIRE([LT_PROG_RC])dnl
 AC_LANG_SAVE
@@ -7599,7 +8103,7 @@
 lt_simple_compile_test_code='sample MENU { MENUITEM "&Soup", 100, CHECKED }'
 
 # Code to be used in simple link tests
-lt_simple_link_test_code="$lt_simple_compile_test_code"
+lt_simple_link_test_code=$lt_simple_compile_test_code
 
 # ltmain only uses $CC for tagged configurations so make sure $CC is set.
 _LT_TAG_COMPILER
@@ -7609,7 +8113,7 @@
 _LT_LINKER_BOILERPLATE
 
 # Allow CC to be a program name with arguments.
-lt_save_CC="$CC"
+lt_save_CC=$CC
 lt_save_CFLAGS=$CFLAGS
 lt_save_GCC=$GCC
 GCC=
@@ -7638,7 +8142,7 @@
 [m4_ifdef([AC_PROG_GCJ], [AC_PROG_GCJ],
   [m4_ifdef([A][M_PROG_GCJ], [A][M_PROG_GCJ],
     [AC_CHECK_TOOL(GCJ, gcj,)
-      test "x${GCJFLAGS+set}" = xset || GCJFLAGS="-g -O2"
+      test set = "${GCJFLAGS+set}" || GCJFLAGS="-g -O2"
       AC_SUBST(GCJFLAGS)])])[]dnl
 ])
 
@@ -7749,7 +8253,7 @@
 # Add /usr/xpg4/bin/sed as it is typically found on Solaris
 # along with /bin/sed that truncates output.
 for lt_ac_sed in $lt_ac_sed_list /usr/xpg4/bin/sed; do
-  test ! -f $lt_ac_sed && continue
+  test ! -f "$lt_ac_sed" && continue
   cat /dev/null > conftest.in
   lt_ac_count=0
   echo $ECHO_N "0123456789$ECHO_C" >conftest.in
@@ -7766,9 +8270,9 @@
     $lt_ac_sed -e 's/a$//' < conftest.nl >conftest.out || break
     cmp -s conftest.out conftest.nl || break
     # 10000 chars as input seems more than enough
-    test $lt_ac_count -gt 10 && break
+    test 10 -lt "$lt_ac_count" && break
     lt_ac_count=`expr $lt_ac_count + 1`
-    if test $lt_ac_count -gt $lt_ac_max; then
+    if test "$lt_ac_count" -gt "$lt_ac_max"; then
       lt_ac_max=$lt_ac_count
       lt_cv_path_SED=$lt_ac_sed
     fi
@@ -7792,27 +8296,7 @@
 # Find out whether the shell is Bourne or XSI compatible,
 # or has some other useful features.
 m4_defun([_LT_CHECK_SHELL_FEATURES],
-[AC_MSG_CHECKING([whether the shell understands some XSI constructs])
-# Try some XSI features
-xsi_shell=no
-( _lt_dummy="a/b/c"
-  test "${_lt_dummy##*/},${_lt_dummy%/*},${_lt_dummy#??}"${_lt_dummy%"$_lt_dummy"}, \
-      = c,a/b,b/c, \
-    && eval 'test $(( 1 + 1 )) -eq 2 \
-    && test "${#_lt_dummy}" -eq 5' ) >/dev/null 2>&1 \
-  && xsi_shell=yes
-AC_MSG_RESULT([$xsi_shell])
-_LT_CONFIG_LIBTOOL_INIT([xsi_shell='$xsi_shell'])
-
-AC_MSG_CHECKING([whether the shell understands "+="])
-lt_shell_append=no
-( foo=bar; set foo baz; eval "$[1]+=\$[2]" && test "$foo" = barbaz ) \
-    >/dev/null 2>&1 \
-  && lt_shell_append=yes
-AC_MSG_RESULT([$lt_shell_append])
-_LT_CONFIG_LIBTOOL_INIT([lt_shell_append='$lt_shell_append'])
-
-if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then
+[if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then
   lt_unset=unset
 else
   lt_unset=false
@@ -7836,102 +8320,9 @@
 ])# _LT_CHECK_SHELL_FEATURES
 
 
-# _LT_PROG_FUNCTION_REPLACE (FUNCNAME, REPLACEMENT-BODY)
-# ------------------------------------------------------
-# In `$cfgfile', look for function FUNCNAME delimited by `^FUNCNAME ()$' and
-# '^} FUNCNAME ', and replace its body with REPLACEMENT-BODY.
-m4_defun([_LT_PROG_FUNCTION_REPLACE],
-[dnl {
-sed -e '/^$1 ()$/,/^} # $1 /c\
-$1 ()\
-{\
-m4_bpatsubsts([$2], [$], [\\], [^\([	 ]\)], [\\\1])
-} # Extended-shell $1 implementation' "$cfgfile" > $cfgfile.tmp \
-  && mv -f "$cfgfile.tmp" "$cfgfile" \
-    || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
-test 0 -eq $? || _lt_function_replace_fail=:
-])
-
-
-# _LT_PROG_REPLACE_SHELLFNS
-# -------------------------
-# Replace existing portable implementations of several shell functions with
-# equivalent extended shell implementations where those features are available..
-m4_defun([_LT_PROG_REPLACE_SHELLFNS],
-[if test x"$xsi_shell" = xyes; then
-  _LT_PROG_FUNCTION_REPLACE([func_dirname], [dnl
-    case ${1} in
-      */*) func_dirname_result="${1%/*}${2}" ;;
-      *  ) func_dirname_result="${3}" ;;
-    esac])
-
-  _LT_PROG_FUNCTION_REPLACE([func_basename], [dnl
-    func_basename_result="${1##*/}"])
-
-  _LT_PROG_FUNCTION_REPLACE([func_dirname_and_basename], [dnl
-    case ${1} in
-      */*) func_dirname_result="${1%/*}${2}" ;;
-      *  ) func_dirname_result="${3}" ;;
-    esac
-    func_basename_result="${1##*/}"])
-
-  _LT_PROG_FUNCTION_REPLACE([func_stripname], [dnl
-    # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are
-    # positional parameters, so assign one to ordinary parameter first.
-    func_stripname_result=${3}
-    func_stripname_result=${func_stripname_result#"${1}"}
-    func_stripname_result=${func_stripname_result%"${2}"}])
-
-  _LT_PROG_FUNCTION_REPLACE([func_split_long_opt], [dnl
-    func_split_long_opt_name=${1%%=*}
-    func_split_long_opt_arg=${1#*=}])
-
-  _LT_PROG_FUNCTION_REPLACE([func_split_short_opt], [dnl
-    func_split_short_opt_arg=${1#??}
-    func_split_short_opt_name=${1%"$func_split_short_opt_arg"}])
-
-  _LT_PROG_FUNCTION_REPLACE([func_lo2o], [dnl
-    case ${1} in
-      *.lo) func_lo2o_result=${1%.lo}.${objext} ;;
-      *)    func_lo2o_result=${1} ;;
-    esac])
-
-  _LT_PROG_FUNCTION_REPLACE([func_xform], [    func_xform_result=${1%.*}.lo])
-
-  _LT_PROG_FUNCTION_REPLACE([func_arith], [    func_arith_result=$(( $[*] ))])
-
-  _LT_PROG_FUNCTION_REPLACE([func_len], [    func_len_result=${#1}])
-fi
-
-if test x"$lt_shell_append" = xyes; then
-  _LT_PROG_FUNCTION_REPLACE([func_append], [    eval "${1}+=\\${2}"])
-
-  _LT_PROG_FUNCTION_REPLACE([func_append_quoted], [dnl
-    func_quote_for_eval "${2}"
-dnl m4 expansion turns \\\\ into \\, and then the shell eval turns that into \
-    eval "${1}+=\\\\ \\$func_quote_for_eval_result"])
-
-  # Save a `func_append' function call where possible by direct use of '+='
-  sed -e 's%func_append \([[a-zA-Z_]]\{1,\}\) "%\1+="%g' $cfgfile > $cfgfile.tmp \
-    && mv -f "$cfgfile.tmp" "$cfgfile" \
-      || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
-  test 0 -eq $? || _lt_function_replace_fail=:
-else
-  # Save a `func_append' function call even when '+=' is not available
-  sed -e 's%func_append \([[a-zA-Z_]]\{1,\}\) "%\1="$\1%g' $cfgfile > $cfgfile.tmp \
-    && mv -f "$cfgfile.tmp" "$cfgfile" \
-      || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
-  test 0 -eq $? || _lt_function_replace_fail=:
-fi
-
-if test x"$_lt_function_replace_fail" = x":"; then
-  AC_MSG_WARN([Unable to substitute extended shell functions in $ofile])
-fi
-])
-
 # _LT_PATH_CONVERSION_FUNCTIONS
 # -----------------------------
-# Determine which file name conversion functions should be used by
+# Determine what file name conversion functions should be used by
 # func_to_host_file (and, implicitly, by func_to_host_path).  These are needed
 # for certain cross-compile configurations and native mingw.
 m4_defun([_LT_PATH_CONVERSION_FUNCTIONS],
diff --git a/m4/ltoptions.m4 b/m4/ltoptions.m4
index 5d9acd8..94b0829 100644
--- a/m4/ltoptions.m4
+++ b/m4/ltoptions.m4
@@ -1,14 +1,14 @@
 # Helper functions for option handling.                    -*- Autoconf -*-
 #
-#   Copyright (C) 2004, 2005, 2007, 2008, 2009 Free Software Foundation,
-#   Inc.
+#   Copyright (C) 2004-2005, 2007-2009, 2011-2015 Free Software
+#   Foundation, Inc.
 #   Written by Gary V. Vaughan, 2004
 #
 # This file is free software; the Free Software Foundation gives
 # unlimited permission to copy and/or distribute it, with or without
 # modifications, as long as this notice is preserved.
 
-# serial 7 ltoptions.m4
+# serial 8 ltoptions.m4
 
 # This is to help aclocal find these macros, as it can't see m4_define.
 AC_DEFUN([LTOPTIONS_VERSION], [m4_if([1])])
@@ -29,7 +29,7 @@
 [m4_define(_LT_MANGLE_OPTION([$1], [$2]))dnl
 m4_ifdef(_LT_MANGLE_DEFUN([$1], [$2]),
         _LT_MANGLE_DEFUN([$1], [$2]),
-    [m4_warning([Unknown $1 option `$2'])])[]dnl
+    [m4_warning([Unknown $1 option '$2'])])[]dnl
 ])
 
 
@@ -75,13 +75,15 @@
   dnl
   dnl If no reference was made to various pairs of opposing options, then
   dnl we run the default mode handler for the pair.  For example, if neither
-  dnl `shared' nor `disable-shared' was passed, we enable building of shared
+  dnl 'shared' nor 'disable-shared' was passed, we enable building of shared
   dnl archives by default:
   _LT_UNLESS_OPTIONS([LT_INIT], [shared disable-shared], [_LT_ENABLE_SHARED])
   _LT_UNLESS_OPTIONS([LT_INIT], [static disable-static], [_LT_ENABLE_STATIC])
   _LT_UNLESS_OPTIONS([LT_INIT], [pic-only no-pic], [_LT_WITH_PIC])
   _LT_UNLESS_OPTIONS([LT_INIT], [fast-install disable-fast-install],
-  		   [_LT_ENABLE_FAST_INSTALL])
+		   [_LT_ENABLE_FAST_INSTALL])
+  _LT_UNLESS_OPTIONS([LT_INIT], [aix-soname=aix aix-soname=both aix-soname=svr4],
+		   [_LT_WITH_AIX_SONAME([aix])])
   ])
 ])# _LT_SET_OPTIONS
 
@@ -112,7 +114,7 @@
 [_LT_SET_OPTION([LT_INIT], [dlopen])
 AC_DIAGNOSE([obsolete],
 [$0: Remove this warning and the call to _LT_SET_OPTION when you
-put the `dlopen' option into LT_INIT's first parameter.])
+put the 'dlopen' option into LT_INIT's first parameter.])
 ])
 
 dnl aclocal-1.4 backwards compatibility:
@@ -148,7 +150,7 @@
 _LT_SET_OPTION([LT_INIT], [win32-dll])
 AC_DIAGNOSE([obsolete],
 [$0: Remove this warning and the call to _LT_SET_OPTION when you
-put the `win32-dll' option into LT_INIT's first parameter.])
+put the 'win32-dll' option into LT_INIT's first parameter.])
 ])
 
 dnl aclocal-1.4 backwards compatibility:
@@ -157,9 +159,9 @@
 
 # _LT_ENABLE_SHARED([DEFAULT])
 # ----------------------------
-# implement the --enable-shared flag, and supports the `shared' and
-# `disable-shared' LT_INIT options.
-# DEFAULT is either `yes' or `no'.  If omitted, it defaults to `yes'.
+# implement the --enable-shared flag, and supports the 'shared' and
+# 'disable-shared' LT_INIT options.
+# DEFAULT is either 'yes' or 'no'.  If omitted, it defaults to 'yes'.
 m4_define([_LT_ENABLE_SHARED],
 [m4_define([_LT_ENABLE_SHARED_DEFAULT], [m4_if($1, no, no, yes)])dnl
 AC_ARG_ENABLE([shared],
@@ -172,14 +174,14 @@
     *)
       enable_shared=no
       # Look at the argument we got.  We use all the common list separators.
-      lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
+      lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR,
       for pkg in $enableval; do
-	IFS="$lt_save_ifs"
+	IFS=$lt_save_ifs
 	if test "X$pkg" = "X$p"; then
 	  enable_shared=yes
 	fi
       done
-      IFS="$lt_save_ifs"
+      IFS=$lt_save_ifs
       ;;
     esac],
     [enable_shared=]_LT_ENABLE_SHARED_DEFAULT)
@@ -211,9 +213,9 @@
 
 # _LT_ENABLE_STATIC([DEFAULT])
 # ----------------------------
-# implement the --enable-static flag, and support the `static' and
-# `disable-static' LT_INIT options.
-# DEFAULT is either `yes' or `no'.  If omitted, it defaults to `yes'.
+# implement the --enable-static flag, and support the 'static' and
+# 'disable-static' LT_INIT options.
+# DEFAULT is either 'yes' or 'no'.  If omitted, it defaults to 'yes'.
 m4_define([_LT_ENABLE_STATIC],
 [m4_define([_LT_ENABLE_STATIC_DEFAULT], [m4_if($1, no, no, yes)])dnl
 AC_ARG_ENABLE([static],
@@ -226,14 +228,14 @@
     *)
      enable_static=no
       # Look at the argument we got.  We use all the common list separators.
-      lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
+      lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR,
       for pkg in $enableval; do
-	IFS="$lt_save_ifs"
+	IFS=$lt_save_ifs
 	if test "X$pkg" = "X$p"; then
 	  enable_static=yes
 	fi
       done
-      IFS="$lt_save_ifs"
+      IFS=$lt_save_ifs
       ;;
     esac],
     [enable_static=]_LT_ENABLE_STATIC_DEFAULT)
@@ -265,9 +267,9 @@
 
 # _LT_ENABLE_FAST_INSTALL([DEFAULT])
 # ----------------------------------
-# implement the --enable-fast-install flag, and support the `fast-install'
-# and `disable-fast-install' LT_INIT options.
-# DEFAULT is either `yes' or `no'.  If omitted, it defaults to `yes'.
+# implement the --enable-fast-install flag, and support the 'fast-install'
+# and 'disable-fast-install' LT_INIT options.
+# DEFAULT is either 'yes' or 'no'.  If omitted, it defaults to 'yes'.
 m4_define([_LT_ENABLE_FAST_INSTALL],
 [m4_define([_LT_ENABLE_FAST_INSTALL_DEFAULT], [m4_if($1, no, no, yes)])dnl
 AC_ARG_ENABLE([fast-install],
@@ -280,14 +282,14 @@
     *)
       enable_fast_install=no
       # Look at the argument we got.  We use all the common list separators.
-      lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
+      lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR,
       for pkg in $enableval; do
-	IFS="$lt_save_ifs"
+	IFS=$lt_save_ifs
 	if test "X$pkg" = "X$p"; then
 	  enable_fast_install=yes
 	fi
       done
-      IFS="$lt_save_ifs"
+      IFS=$lt_save_ifs
       ;;
     esac],
     [enable_fast_install=]_LT_ENABLE_FAST_INSTALL_DEFAULT)
@@ -304,14 +306,14 @@
 [_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[fast-install])
 AC_DIAGNOSE([obsolete],
 [$0: Remove this warning and the call to _LT_SET_OPTION when you put
-the `fast-install' option into LT_INIT's first parameter.])
+the 'fast-install' option into LT_INIT's first parameter.])
 ])
 
 AU_DEFUN([AC_DISABLE_FAST_INSTALL],
 [_LT_SET_OPTION([LT_INIT], [disable-fast-install])
 AC_DIAGNOSE([obsolete],
 [$0: Remove this warning and the call to _LT_SET_OPTION when you put
-the `disable-fast-install' option into LT_INIT's first parameter.])
+the 'disable-fast-install' option into LT_INIT's first parameter.])
 ])
 
 dnl aclocal-1.4 backwards compatibility:
@@ -319,11 +321,64 @@
 dnl AC_DEFUN([AM_DISABLE_FAST_INSTALL], [])
 
 
+# _LT_WITH_AIX_SONAME([DEFAULT])
+# ----------------------------------
+# implement the --with-aix-soname flag, and support the `aix-soname=aix'
+# and `aix-soname=both' and `aix-soname=svr4' LT_INIT options. DEFAULT
+# is either `aix', `both' or `svr4'.  If omitted, it defaults to `aix'.
+m4_define([_LT_WITH_AIX_SONAME],
+[m4_define([_LT_WITH_AIX_SONAME_DEFAULT], [m4_if($1, svr4, svr4, m4_if($1, both, both, aix))])dnl
+shared_archive_member_spec=
+case $host,$enable_shared in
+power*-*-aix[[5-9]]*,yes)
+  AC_MSG_CHECKING([which variant of shared library versioning to provide])
+  AC_ARG_WITH([aix-soname],
+    [AS_HELP_STRING([--with-aix-soname=aix|svr4|both],
+      [shared library versioning (aka "SONAME") variant to provide on AIX, @<:@default=]_LT_WITH_AIX_SONAME_DEFAULT[@:>@.])],
+    [case $withval in
+    aix|svr4|both)
+      ;;
+    *)
+      AC_MSG_ERROR([Unknown argument to --with-aix-soname])
+      ;;
+    esac
+    lt_cv_with_aix_soname=$with_aix_soname],
+    [AC_CACHE_VAL([lt_cv_with_aix_soname],
+      [lt_cv_with_aix_soname=]_LT_WITH_AIX_SONAME_DEFAULT)
+    with_aix_soname=$lt_cv_with_aix_soname])
+  AC_MSG_RESULT([$with_aix_soname])
+  if test aix != "$with_aix_soname"; then
+    # For the AIX way of multilib, we name the shared archive member
+    # based on the bitwidth used, traditionally 'shr.o' or 'shr_64.o',
+    # and 'shr.imp' or 'shr_64.imp', respectively, for the Import File.
+    # Even when GNU compilers ignore OBJECT_MODE but need '-maix64' flag,
+    # the AIX toolchain works better with OBJECT_MODE set (default 32).
+    if test 64 = "${OBJECT_MODE-32}"; then
+      shared_archive_member_spec=shr_64
+    else
+      shared_archive_member_spec=shr
+    fi
+  fi
+  ;;
+*)
+  with_aix_soname=aix
+  ;;
+esac
+
+_LT_DECL([], [shared_archive_member_spec], [0],
+    [Shared archive member basename, for filename based shared library versioning on AIX])dnl
+])# _LT_WITH_AIX_SONAME
+
+LT_OPTION_DEFINE([LT_INIT], [aix-soname=aix], [_LT_WITH_AIX_SONAME([aix])])
+LT_OPTION_DEFINE([LT_INIT], [aix-soname=both], [_LT_WITH_AIX_SONAME([both])])
+LT_OPTION_DEFINE([LT_INIT], [aix-soname=svr4], [_LT_WITH_AIX_SONAME([svr4])])
+
+
 # _LT_WITH_PIC([MODE])
 # --------------------
-# implement the --with-pic flag, and support the `pic-only' and `no-pic'
+# implement the --with-pic flag, and support the 'pic-only' and 'no-pic'
 # LT_INIT options.
-# MODE is either `yes' or `no'.  If omitted, it defaults to `both'.
+# MODE is either 'yes' or 'no'.  If omitted, it defaults to 'both'.
 m4_define([_LT_WITH_PIC],
 [AC_ARG_WITH([pic],
     [AS_HELP_STRING([--with-pic@<:@=PKGS@:>@],
@@ -334,19 +389,17 @@
     *)
       pic_mode=default
       # Look at the argument we got.  We use all the common list separators.
-      lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
+      lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR,
       for lt_pkg in $withval; do
-	IFS="$lt_save_ifs"
+	IFS=$lt_save_ifs
 	if test "X$lt_pkg" = "X$lt_p"; then
 	  pic_mode=yes
 	fi
       done
-      IFS="$lt_save_ifs"
+      IFS=$lt_save_ifs
       ;;
     esac],
-    [pic_mode=default])
-
-test -z "$pic_mode" && pic_mode=m4_default([$1], [default])
+    [pic_mode=m4_default([$1], [default])])
 
 _LT_DECL([], [pic_mode], [0], [What type of objects to build])dnl
 ])# _LT_WITH_PIC
@@ -359,7 +412,7 @@
 [_LT_SET_OPTION([LT_INIT], [pic-only])
 AC_DIAGNOSE([obsolete],
 [$0: Remove this warning and the call to _LT_SET_OPTION when you
-put the `pic-only' option into LT_INIT's first parameter.])
+put the 'pic-only' option into LT_INIT's first parameter.])
 ])
 
 dnl aclocal-1.4 backwards compatibility:
diff --git a/m4/ltsugar.m4 b/m4/ltsugar.m4
index 9000a05..48bc934 100644
--- a/m4/ltsugar.m4
+++ b/m4/ltsugar.m4
@@ -1,6 +1,7 @@
 # ltsugar.m4 -- libtool m4 base layer.                         -*-Autoconf-*-
 #
-# Copyright (C) 2004, 2005, 2007, 2008 Free Software Foundation, Inc.
+# Copyright (C) 2004-2005, 2007-2008, 2011-2015 Free Software
+# Foundation, Inc.
 # Written by Gary V. Vaughan, 2004
 #
 # This file is free software; the Free Software Foundation gives
@@ -33,7 +34,7 @@
 # ------------
 # Manipulate m4 lists.
 # These macros are necessary as long as will still need to support
-# Autoconf-2.59 which quotes differently.
+# Autoconf-2.59, which quotes differently.
 m4_define([lt_car], [[$1]])
 m4_define([lt_cdr],
 [m4_if([$#], 0, [m4_fatal([$0: cannot be called without arguments])],
@@ -44,7 +45,7 @@
 
 # lt_append(MACRO-NAME, STRING, [SEPARATOR])
 # ------------------------------------------
-# Redefine MACRO-NAME to hold its former content plus `SEPARATOR'`STRING'.
+# Redefine MACRO-NAME to hold its former content plus 'SEPARATOR''STRING'.
 # Note that neither SEPARATOR nor STRING are expanded; they are appended
 # to MACRO-NAME as is (leaving the expansion for when MACRO-NAME is invoked).
 # No SEPARATOR is output if MACRO-NAME was previously undefined (different
diff --git a/m4/ltversion.m4 b/m4/ltversion.m4
index 07a8602..fa04b52 100644
--- a/m4/ltversion.m4
+++ b/m4/ltversion.m4
@@ -1,6 +1,6 @@
 # ltversion.m4 -- version numbers			-*- Autoconf -*-
 #
-#   Copyright (C) 2004 Free Software Foundation, Inc.
+#   Copyright (C) 2004, 2011-2015 Free Software Foundation, Inc.
 #   Written by Scott James Remnant, 2004
 #
 # This file is free software; the Free Software Foundation gives
@@ -9,15 +9,15 @@
 
 # @configure_input@
 
-# serial 3337 ltversion.m4
+# serial 4179 ltversion.m4
 # This file is part of GNU Libtool
 
-m4_define([LT_PACKAGE_VERSION], [2.4.2])
-m4_define([LT_PACKAGE_REVISION], [1.3337])
+m4_define([LT_PACKAGE_VERSION], [2.4.6])
+m4_define([LT_PACKAGE_REVISION], [2.4.6])
 
 AC_DEFUN([LTVERSION_VERSION],
-[macro_version='2.4.2'
-macro_revision='1.3337'
+[macro_version='2.4.6'
+macro_revision='2.4.6'
 _LT_DECL(, macro_version, 0, [Which release of libtool.m4 was used?])
 _LT_DECL(, macro_revision, 0)
 ])
diff --git a/m4/lt~obsolete.m4 b/m4/lt~obsolete.m4
index c573da9..c6b26f8 100644
--- a/m4/lt~obsolete.m4
+++ b/m4/lt~obsolete.m4
@@ -1,6 +1,7 @@
 # lt~obsolete.m4 -- aclocal satisfying obsolete definitions.    -*-Autoconf-*-
 #
-#   Copyright (C) 2004, 2005, 2007, 2009 Free Software Foundation, Inc.
+#   Copyright (C) 2004-2005, 2007, 2009, 2011-2015 Free Software
+#   Foundation, Inc.
 #   Written by Scott James Remnant, 2004.
 #
 # This file is free software; the Free Software Foundation gives
@@ -11,7 +12,7 @@
 
 # These exist entirely to fool aclocal when bootstrapping libtool.
 #
-# In the past libtool.m4 has provided macros via AC_DEFUN (or AU_DEFUN)
+# In the past libtool.m4 has provided macros via AC_DEFUN (or AU_DEFUN),
 # which have later been changed to m4_define as they aren't part of the
 # exported API, or moved to Autoconf or Automake where they belong.
 #
@@ -25,7 +26,7 @@
 # included after everything else.  This provides aclocal with the
 # AC_DEFUNs it wants, but when m4 processes it, it doesn't do anything
 # because those macros already exist, or will be overwritten later.
-# We use AC_DEFUN over AU_DEFUN for compatibility with aclocal-1.6. 
+# We use AC_DEFUN over AU_DEFUN for compatibility with aclocal-1.6.
 #
 # Anytime we withdraw an AC_DEFUN or AU_DEFUN, remember to add it here.
 # Yes, that means every name once taken will need to remain here until
diff --git a/pkgconfig/Makefile.am b/pkgconfig/Makefile.am
index 3e53a6e..88c7e52 100644
--- a/pkgconfig/Makefile.am
+++ b/pkgconfig/Makefile.am
@@ -4,13 +4,21 @@
 	gstreamer-plugins-bad-@GST_API_VERSION@.pc \
 	gstreamer-codecparsers-@GST_API_VERSION@.pc \
 	gstreamer-insertbin-@GST_API_VERSION@.pc \
-	gstreamer-mpegts-@GST_API_VERSION@.pc
+	gstreamer-mpegts-@GST_API_VERSION@.pc \
+	gstreamer-player-@GST_API_VERSION@.pc \
+	gstreamer-bad-base-@GST_API_VERSION@.pc \
+	gstreamer-bad-audio-@GST_API_VERSION@.pc \
+	gstreamer-bad-video-@GST_API_VERSION@.pc
 
 pcverfiles_uninstalled = \
 	gstreamer-plugins-bad-@GST_API_VERSION@-uninstalled.pc \
 	gstreamer-codecparsers-@GST_API_VERSION@-uninstalled.pc \
 	gstreamer-insertbin-@GST_API_VERSION@-uninstalled.pc \
-	gstreamer-mpegts-@GST_API_VERSION@-uninstalled.pc
+	gstreamer-mpegts-@GST_API_VERSION@-uninstalled.pc \
+	gstreamer-player-@GST_API_VERSION@-uninstalled.pc \
+	gstreamer-bad-base-@GST_API_VERSION@-uninstalled.pc \
+	gstreamer-bad-audio-@GST_API_VERSION@-uninstalled.pc \
+	gstreamer-bad-video-@GST_API_VERSION@-uninstalled.pc
 
 if HAVE_GST_GL
 pcverfiles += gstreamer-gl-@GST_API_VERSION@.pc
@@ -38,7 +46,11 @@
            gstreamer-codecparsers.pc.in gstreamer-codecparsers-uninstalled.pc.in \
            gstreamer-gl.pc.in gstreamer-gl-uninstalled.pc.in \
            gstreamer-insertbin.pc.in gstreamer-insertbin-uninstalled.pc.in \
-           gstreamer-mpegts.pc.in gstreamer-mpegts-uninstalled.pc.in
+           gstreamer-mpegts.pc.in gstreamer-mpegts-uninstalled.pc.in \
+           gstreamer-player.pc.in gstreamer-player-uninstalled.pc.in \
+           gstreamer-bad-audio.pc.in gstreamer-bad-audio-uninstalled.pc.in \
+           gstreamer-bad-video.pc.in gstreamer-bad-video-uninstalled.pc.in \
+           gstreamer-bad-base.pc.in gstreamer-bad-base-uninstalled.pc.in
 
 DISTCLEANFILES = $(pcinfiles:.in=)
 EXTRA_DIST = $(pcinfiles)
diff --git a/pkgconfig/Makefile.in b/pkgconfig/Makefile.in
index 6cc928e..571e119 100644
--- a/pkgconfig/Makefile.in
+++ b/pkgconfig/Makefile.in
@@ -117,16 +117,15 @@
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
 	$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
-	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gsettings.m4 \
-	$(top_srcdir)/m4/gst-fionread.m4 $(top_srcdir)/m4/gst-sdl.m4 \
-	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
-	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
-	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libgcrypt.m4 \
-	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
-	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
-	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
-	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
-	$(top_srcdir)/configure.ac
+	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gst-fionread.m4 \
+	$(top_srcdir)/m4/gst-sdl.m4 $(top_srcdir)/m4/iconv.m4 \
+	$(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \
+	$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
+	$(top_srcdir)/m4/libgcrypt.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
+	$(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
@@ -137,10 +136,12 @@
 	gstreamer-codecparsers-uninstalled.pc gstreamer-insertbin.pc \
 	gstreamer-insertbin-uninstalled.pc gstreamer-gl.pc \
 	gstreamer-gl-uninstalled.pc gstreamer-mpegts.pc \
-	gstreamer-mpegts-uninstalled.pc gstreamer-wayland.pc \
+	gstreamer-mpegts-uninstalled.pc gstreamer-player.pc \
+	gstreamer-player-uninstalled.pc gstreamer-wayland.pc \
 	gstreamer-wayland-uninstalled.pc gstreamer-bad-base.pc \
 	gstreamer-bad-base-uninstalled.pc gstreamer-bad-video.pc \
-	gstreamer-bad-video-uninstalled.pc
+	gstreamer-bad-video-uninstalled.pc gstreamer-bad-audio.pc \
+	gstreamer-bad-audio-uninstalled.pc
 CONFIG_CLEAN_VPATH_FILES =
 AM_V_P = $(am__v_P_@AM_V@)
 am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
@@ -192,6 +193,8 @@
 DATA = $(pkgconfig_DATA)
 am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
 am__DIST_COMMON = $(srcdir)/Makefile.in \
+	$(srcdir)/gstreamer-bad-audio-uninstalled.pc.in \
+	$(srcdir)/gstreamer-bad-audio.pc.in \
 	$(srcdir)/gstreamer-bad-base-uninstalled.pc.in \
 	$(srcdir)/gstreamer-bad-base.pc.in \
 	$(srcdir)/gstreamer-bad-video-uninstalled.pc.in \
@@ -204,6 +207,8 @@
 	$(srcdir)/gstreamer-insertbin.pc.in \
 	$(srcdir)/gstreamer-mpegts-uninstalled.pc.in \
 	$(srcdir)/gstreamer-mpegts.pc.in \
+	$(srcdir)/gstreamer-player-uninstalled.pc.in \
+	$(srcdir)/gstreamer-player.pc.in \
 	$(srcdir)/gstreamer-plugins-bad-uninstalled.pc.in \
 	$(srcdir)/gstreamer-plugins-bad.pc.in \
 	$(srcdir)/gstreamer-wayland-uninstalled.pc.in \
@@ -244,6 +249,8 @@
 CLUTTER_X11_LIBS = @CLUTTER_X11_LIBS@
 CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
+CUDA_CFLAGS = @CUDA_CFLAGS@
+CUDA_LIBS = @CUDA_LIBS@
 CURL_CFLAGS = @CURL_CFLAGS@
 CURL_LIBS = @CURL_LIBS@
 CXX = @CXX@
@@ -281,6 +288,8 @@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
+EGL_CFLAGS = @EGL_CFLAGS@
+EGL_LIBS = @EGL_LIBS@
 EGREP = @EGREP@
 ERROR_CFLAGS = @ERROR_CFLAGS@
 ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
@@ -289,7 +298,6 @@
 EXIF_CFLAGS = @EXIF_CFLAGS@
 EXIF_LIBS = @EXIF_LIBS@
 FAAC_LIBS = @FAAC_LIBS@
-FAAD_IS_NEAAC = @FAAD_IS_NEAAC@
 FAAD_LIBS = @FAAD_LIBS@
 FFLAGS = @FFLAGS@
 FGREP = @FGREP@
@@ -308,8 +316,9 @@
 GIO_LIBS = @GIO_LIBS@
 GIO_UNIX_CFLAGS = @GIO_UNIX_CFLAGS@
 GIO_UNIX_LIBS = @GIO_UNIX_LIBS@
+GLES2_CFLAGS = @GLES2_CFLAGS@
+GLES2_LIBS = @GLES2_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
-GLIB_COMPILE_SCHEMAS = @GLIB_COMPILE_SCHEMAS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
@@ -326,16 +335,17 @@
 GMODULE_NO_EXPORT_LIBS = @GMODULE_NO_EXPORT_LIBS@
 GMSGFMT = @GMSGFMT@
 GMSGFMT_015 = @GMSGFMT_015@
+GNUSTL_CFLAGS = @GNUSTL_CFLAGS@
+GNUSTL_LIBS = @GNUSTL_LIBS@
 GRAPHENE_CFLAGS = @GRAPHENE_CFLAGS@
 GRAPHENE_LIBS = @GRAPHENE_LIBS@
 GREP = @GREP@
-GSETTINGS_CFLAGS = @GSETTINGS_CFLAGS@
-GSETTINGS_DISABLE_SCHEMAS_COMPILE = @GSETTINGS_DISABLE_SCHEMAS_COMPILE@
-GSETTINGS_LIBS = @GSETTINGS_LIBS@
 GSM_LIBS = @GSM_LIBS@
 GSTPB_PLUGINS_DIR = @GSTPB_PLUGINS_DIR@
 GSTPB_PREFIX = @GSTPB_PREFIX@
 GST_AGE = @GST_AGE@
+GST_ALLOCATORS_CFLAGS = @GST_ALLOCATORS_CFLAGS@
+GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
 GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
 GST_API_VERSION = @GST_API_VERSION@
 GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
@@ -361,6 +371,8 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PBUTILS_CFLAGS = @GST_PBUTILS_CFLAGS@
+GST_PBUTILS_LIBS = @GST_PBUTILS_LIBS@
 GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BAD_CFLAGS = @GST_PLUGINS_BAD_CFLAGS@
@@ -386,6 +398,8 @@
 GST_PREFIX = @GST_PREFIX@
 GST_REVISION = @GST_REVISION@
 GST_TOOLS_DIR = @GST_TOOLS_DIR@
+GST_VIDEO_CFLAGS = @GST_VIDEO_CFLAGS@
+GST_VIDEO_LIBS = @GST_VIDEO_LIBS@
 GTK3_CFLAGS = @GTK3_CFLAGS@
 GTK3_GL_CFLAGS = @GTK3_GL_CFLAGS@
 GTK3_GL_LIBS = @GTK3_GL_LIBS@
@@ -487,6 +501,7 @@
 LTLIBICONV = @LTLIBICONV@
 LTLIBINTL = @LTLIBINTL@
 LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
 MANIFEST_TOOL = @MANIFEST_TOOL@
@@ -500,8 +515,6 @@
 MODPLUG_LIBS = @MODPLUG_LIBS@
 MPEG2ENC_CFLAGS = @MPEG2ENC_CFLAGS@
 MPEG2ENC_LIBS = @MPEG2ENC_LIBS@
-MPG123_CFLAGS = @MPG123_CFLAGS@
-MPG123_LIBS = @MPG123_LIBS@
 MPLEX_CFLAGS = @MPLEX_CFLAGS@
 MPLEX_LDFLAGS = @MPLEX_LDFLAGS@
 MPLEX_LIBS = @MPLEX_LIBS@
@@ -517,6 +530,8 @@
 NETTLE_LIBS = @NETTLE_LIBS@
 NM = @NM@
 NMEDIT = @NMEDIT@
+NVENCODE_CFLAGS = @NVENCODE_CFLAGS@
+NVENCODE_LIBS = @NVENCODE_LIBS@
 OBJC = @OBJC@
 OBJCDEPMODE = @OBJCDEPMODE@
 OBJCFLAGS = @OBJCFLAGS@
@@ -574,16 +589,18 @@
 PYTHON_PLATFORM = @PYTHON_PLATFORM@
 PYTHON_PREFIX = @PYTHON_PREFIX@
 PYTHON_VERSION = @PYTHON_VERSION@
+QT_ANDROID_CFLAGS = @QT_ANDROID_CFLAGS@
+QT_ANDROID_LIBS = @QT_ANDROID_LIBS@
 QT_CFLAGS = @QT_CFLAGS@
 QT_LIBS = @QT_LIBS@
+QT_MAC_CFLAGS = @QT_MAC_CFLAGS@
+QT_MAC_LIBS = @QT_MAC_LIBS@
 QT_WAYLAND_CFLAGS = @QT_WAYLAND_CFLAGS@
 QT_WAYLAND_LIBS = @QT_WAYLAND_LIBS@
 QT_X11_CFLAGS = @QT_X11_CFLAGS@
 QT_X11_LIBS = @QT_X11_LIBS@
 RANLIB = @RANLIB@
 RCC = @RCC@
-RSVG_2_36_2_CFLAGS = @RSVG_2_36_2_CFLAGS@
-RSVG_2_36_2_LIBS = @RSVG_2_36_2_LIBS@
 RSVG_CFLAGS = @RSVG_CFLAGS@
 RSVG_LIBS = @RSVG_LIBS@
 RTMP_CFLAGS = @RTMP_CFLAGS@
@@ -635,6 +652,7 @@
 VOAACENC_LIBS = @VOAACENC_LIBS@
 VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
 VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VULKAN_LIBS = @VULKAN_LIBS@
 WARNING_CFLAGS = @WARNING_CFLAGS@
 WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
 WARNING_OBJCFLAGS = @WARNING_OBJCFLAGS@
@@ -645,6 +663,7 @@
 WAYLAND_LIBS = @WAYLAND_LIBS@
 WEBP_CFLAGS = @WEBP_CFLAGS@
 WEBP_LIBS = @WEBP_LIBS@
+WGET = @WGET@
 WILDMIDI_CFLAGS = @WILDMIDI_CFLAGS@
 WILDMIDI_LIBS = @WILDMIDI_LIBS@
 WINKS_LIBS = @WINKS_LIBS@
@@ -654,6 +673,8 @@
 X11_LIBS = @X11_LIBS@
 X265_CFLAGS = @X265_CFLAGS@
 X265_LIBS = @X265_LIBS@
+XCB_CFLAGS = @XCB_CFLAGS@
+XCB_LIBS = @XCB_LIBS@
 XCOMPOSITE_CFLAGS = @XCOMPOSITE_CFLAGS@
 XCOMPOSITE_LIBS = @XCOMPOSITE_LIBS@
 XGETTEXT = @XGETTEXT@
@@ -691,7 +712,6 @@
 docdir = @docdir@
 dvidir = @dvidir@
 exec_prefix = @exec_prefix@
-gsettingsschemadir = @gsettingsschemadir@
 host = @host@
 host_alias = @host_alias@
 host_cpu = @host_cpu@
@@ -736,12 +756,20 @@
 pcverfiles = gstreamer-plugins-bad-@GST_API_VERSION@.pc \
 	gstreamer-codecparsers-@GST_API_VERSION@.pc \
 	gstreamer-insertbin-@GST_API_VERSION@.pc \
-	gstreamer-mpegts-@GST_API_VERSION@.pc $(am__append_1)
+	gstreamer-mpegts-@GST_API_VERSION@.pc \
+	gstreamer-player-@GST_API_VERSION@.pc \
+	gstreamer-bad-base-@GST_API_VERSION@.pc \
+	gstreamer-bad-audio-@GST_API_VERSION@.pc \
+	gstreamer-bad-video-@GST_API_VERSION@.pc $(am__append_1)
 pcverfiles_uninstalled =  \
 	gstreamer-plugins-bad-@GST_API_VERSION@-uninstalled.pc \
 	gstreamer-codecparsers-@GST_API_VERSION@-uninstalled.pc \
 	gstreamer-insertbin-@GST_API_VERSION@-uninstalled.pc \
 	gstreamer-mpegts-@GST_API_VERSION@-uninstalled.pc \
+	gstreamer-player-@GST_API_VERSION@-uninstalled.pc \
+	gstreamer-bad-base-@GST_API_VERSION@-uninstalled.pc \
+	gstreamer-bad-audio-@GST_API_VERSION@-uninstalled.pc \
+	gstreamer-bad-video-@GST_API_VERSION@-uninstalled.pc \
 	$(am__append_2)
 cp_verbose = $(cp_verbose_$(V))
 cp_verbose_ = $(cp_verbose_$(AM_DEFAULT_VERBOSITY))
@@ -754,7 +782,11 @@
            gstreamer-codecparsers.pc.in gstreamer-codecparsers-uninstalled.pc.in \
            gstreamer-gl.pc.in gstreamer-gl-uninstalled.pc.in \
            gstreamer-insertbin.pc.in gstreamer-insertbin-uninstalled.pc.in \
-           gstreamer-mpegts.pc.in gstreamer-mpegts-uninstalled.pc.in
+           gstreamer-mpegts.pc.in gstreamer-mpegts-uninstalled.pc.in \
+           gstreamer-player.pc.in gstreamer-player-uninstalled.pc.in \
+           gstreamer-bad-audio.pc.in gstreamer-bad-audio-uninstalled.pc.in \
+           gstreamer-bad-video.pc.in gstreamer-bad-video-uninstalled.pc.in \
+           gstreamer-bad-base.pc.in gstreamer-bad-base-uninstalled.pc.in
 
 DISTCLEANFILES = $(pcinfiles:.in=)
 EXTRA_DIST = $(pcinfiles)
@@ -810,6 +842,10 @@
 	cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
 gstreamer-mpegts-uninstalled.pc: $(top_builddir)/config.status $(srcdir)/gstreamer-mpegts-uninstalled.pc.in
 	cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
+gstreamer-player.pc: $(top_builddir)/config.status $(srcdir)/gstreamer-player.pc.in
+	cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
+gstreamer-player-uninstalled.pc: $(top_builddir)/config.status $(srcdir)/gstreamer-player-uninstalled.pc.in
+	cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
 gstreamer-wayland.pc: $(top_builddir)/config.status $(srcdir)/gstreamer-wayland.pc.in
 	cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
 gstreamer-wayland-uninstalled.pc: $(top_builddir)/config.status $(srcdir)/gstreamer-wayland-uninstalled.pc.in
@@ -822,6 +858,10 @@
 	cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
 gstreamer-bad-video-uninstalled.pc: $(top_builddir)/config.status $(srcdir)/gstreamer-bad-video-uninstalled.pc.in
 	cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
+gstreamer-bad-audio.pc: $(top_builddir)/config.status $(srcdir)/gstreamer-bad-audio.pc.in
+	cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
+gstreamer-bad-audio-uninstalled.pc: $(top_builddir)/config.status $(srcdir)/gstreamer-bad-audio-uninstalled.pc.in
+	cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
 
 mostlyclean-libtool:
 	-rm -f *.lo
diff --git a/pkgconfig/gstreamer-bad-audio-uninstalled.pc.in b/pkgconfig/gstreamer-bad-audio-uninstalled.pc.in
new file mode 100644
index 0000000..6b95364
--- /dev/null
+++ b/pkgconfig/gstreamer-bad-audio-uninstalled.pc.in
@@ -0,0 +1,12 @@
+prefix=
+exec_prefix=
+libdir=@abs_top_builddir@/gst-libs/gst/audio/.libs
+includedir=@abs_top_srcdir@/gst-libs
+
+Name: GStreamer bad audio library, uninstalled
+Description: Bad audio library for GStreamer, Not Installed
+Version: @VERSION@
+Requires: gstreamer-@GST_API_VERSION@ gstreamer-bad-base-@GST_API_VERSION@
+
+Libs: -L${libdir} -lgstbadaudio-@GST_API_VERSION@
+Cflags: -I@abs_top_srcdir@/gst-libs -I@abs_top_builddir@/gst-libs
diff --git a/pkgconfig/gstreamer-bad-audio.pc.in b/pkgconfig/gstreamer-bad-audio.pc.in
new file mode 100644
index 0000000..be90d67
--- /dev/null
+++ b/pkgconfig/gstreamer-bad-audio.pc.in
@@ -0,0 +1,13 @@
+prefix=@prefix@
+exec_prefix=@exec_prefix@
+libdir=@libdir@
+includedir=@includedir@/gstreamer-@GST_API_VERSION@
+pluginsdir=@libdir@/gstreamer-@GST_API_VERSION@
+
+Name: GStreamer bad audio library, uninstalled
+Description: Bad audio library for GStreamer elements, Not Installed
+Version: @VERSION@
+Requires: gstreamer-@GST_API_VERSION@ gstreamer-bad-base-@GST_API_VERSION@
+
+Libs: -L${libdir} ${libdir}/libgstbadaudio-@GST_API_VERSION@.la
+Cflags: -I${includedir}
diff --git a/pkgconfig/gstreamer-bad-base-uninstalled.pc.in b/pkgconfig/gstreamer-bad-base-uninstalled.pc.in
index 560eb13..e11a01b 100644
--- a/pkgconfig/gstreamer-bad-base-uninstalled.pc.in
+++ b/pkgconfig/gstreamer-bad-base-uninstalled.pc.in
@@ -1,15 +1,14 @@
 prefix=
 exec_prefix=
-libdir=${pcfiledir}/../gst-libs/gst/base
-includedir=${pcfiledir}/../gst-libs
-pluginsdir=${pcfiledir}/..
+libdir=@abs_top_builddir@/gst-libs/gst/base/.libs
+includedir=@abs_top_builddir@/gst-libs
+girdir=@abs_top_builddir@/gst-libs/gst/base
+typelibdir=@abs_top_builddir@/gst-libs/gst/base
 
 Name: GStreamer bad base classes, uninstalled
 Description: Bad base classes for GStreamer elements, Not Installed
 Version: @VERSION@
 Requires: gstreamer-@GST_API_VERSION@
 
-Libs: -L${libdir} ${libdir}/libgstbadbase-@GST_API_VERSION@.la @BADBASE_LIBS@
-Cflags: -I${includedir} -I@srcdir@/.. @BADBASE_CFLAGS@
-
-libraries=badbase
+Libs: -L${libdir} -lgstbadbase-@GST_API_VERSION@
+Cflags: -I@abs_top_srcdir@/gst-libs -I@abs_top_builddir@/gst-libs
diff --git a/pkgconfig/gstreamer-bad-base.pc.in b/pkgconfig/gstreamer-bad-base.pc.in
index a03013b..10afe0e 100644
--- a/pkgconfig/gstreamer-bad-base.pc.in
+++ b/pkgconfig/gstreamer-bad-base.pc.in
@@ -2,14 +2,15 @@
 exec_prefix=@exec_prefix@
 libdir=@libdir@
 includedir=@includedir@/gstreamer-@GST_API_VERSION@
-pluginsdir=@libdir@/gstreamer-@GST_API_VERSION@
+datarootdir=${prefix}/share
+datadir=${datarootdir}
+girdir=${datadir}/gir-1.0
+typelibdir=${libdir}/girepository-1.0
 
-Name: GStreamer bad base classes, uninstalled
-Description: Bad base classes for GStreamer elements, Not Installed
+Name: GStreamer bad base classes
+Description: Bad base classes for GStreamer elements
 Version: @VERSION@
 Requires: gstreamer-@GST_API_VERSION@
 
-Libs: -L${libdir} ${libdir}/libgstbadbase-@GST_API_VERSION@.la @BADBASE_LIBS@
-Cflags: -I${includedir} -I@srcdir@/.. @BADBASE_CFLAGS@
-
-libraries=badbase
+Libs: -L${libdir} ${libdir}/libgstbadbase-@GST_API_VERSION@.la
+Cflags: -I${includedir}
diff --git a/pkgconfig/gstreamer-bad-video-uninstalled.pc.in b/pkgconfig/gstreamer-bad-video-uninstalled.pc.in
index 6a2a206..f9ae7bf 100644
--- a/pkgconfig/gstreamer-bad-video-uninstalled.pc.in
+++ b/pkgconfig/gstreamer-bad-video-uninstalled.pc.in
@@ -1,15 +1,14 @@
 prefix=
 exec_prefix=
-libdir=${pcfiledir}/../gst-libs/gst/video
-includedir=${pcfiledir}/../gst-libs
-pluginsdir=${pcfiledir}/..
+libdir=@abs_top_builddir@/gst-libs/gst/video/.libs
+includedir=@abs_top_builddir@/gst-libs
+girdir=@abs_top_builddir@/gst-libs/gst/video
+typelibdir=@abs_top_builddir@/gst-libs/gst/video
 
 Name: GStreamer bad video library, uninstalled
-Description: Bad video library for GStreamer, Not Installed
+Description: Bad video library for GStreamer elements, Not Installed
 Version: @VERSION@
-Requires: gstreamer-@GST_API_VERSION@
+Requires: gstreamer-@GST_API_VERSION@ gstreamer-bad-base-@GST_API_VERSION@
 
-Libs: -L${libdir} ${libdir}/libgstbadvideo-@GST_API_VERSION@.la @BADBASE_LIBS@
-Cflags: -I${includedir} -I@srcdir@/.. @BADBASE_CFLAGS@
-
-libraries=badvideo
+Libs: -L${libdir} -lgstbadvideo-@GST_API_VERSION@
+Cflags: -I@abs_top_srcdir@/gst-libs -I@abs_top_builddir@/gst-libs
diff --git a/pkgconfig/gstreamer-bad-video.pc.in b/pkgconfig/gstreamer-bad-video.pc.in
index 4fdf889..40127be 100644
--- a/pkgconfig/gstreamer-bad-video.pc.in
+++ b/pkgconfig/gstreamer-bad-video.pc.in
@@ -2,14 +2,15 @@
 exec_prefix=@exec_prefix@
 libdir=@libdir@
 includedir=@includedir@/gstreamer-@GST_API_VERSION@
-pluginsdir=@libdir@/gstreamer-@GST_API_VERSION@
+datarootdir=${prefix}/share
+datadir=${datarootdir}
+girdir=${datadir}/gir-1.0
+typelibdir=${libdir}/girepository-1.0
 
-Name: GStreamer bad video library, uninstalled
-Description: Bad video library for GStreamer elements, Not Installed
+Name: GStreamer bad video library
+Description: Bad video library for GStreamer elements
 Version: @VERSION@
-Requires: gstreamer-@GST_API_VERSION@
+Requires: gstreamer-@GST_API_VERSION@ gstreamer-bad-base-@GST_API_VERSION@
 
-Libs: -L${libdir} ${libdir}/libgstbadvideo-@GST_API_VERSION@.la @BADBASE_LIBS@
-Cflags: -I${includedir} -I@srcdir@/.. @BADBASE_CFLAGS@
-
-libraries=badvideo
+Libs: -L${libdir} ${libdir}/libgstbadvideo-@GST_API_VERSION@.la
+Cflags: -I${includedir}
diff --git a/pkgconfig/gstreamer-codecparsers-uninstalled.pc.in b/pkgconfig/gstreamer-codecparsers-uninstalled.pc.in
index d1bb9b0..71ed771 100644
--- a/pkgconfig/gstreamer-codecparsers-uninstalled.pc.in
+++ b/pkgconfig/gstreamer-codecparsers-uninstalled.pc.in
@@ -1,12 +1,12 @@
 prefix=
 exec_prefix=
-libdir=${pcfiledir}/../gst-libs/gst/codecparsers
+libdir=${pcfiledir}/../gst-libs/gst/codecparsers/.libs
 includedir=${pcfiledir}/../gst-libs
 
 Name: GStreamer codec parsers, Uninstalled
 Description: Bitstream parsers for GStreamer elements, uninstalled
 Requires: gstreamer-@GST_API_VERSION@ gstreamer-base-@GST_API_VERSION@
 Version: @VERSION@
-Libs: -L${libdir} ${libdir}/libgstcodecparsers-@GST_API_VERSION@.la
+Libs: -L${libdir} -lgstcodecparsers-@GST_API_VERSION@
 Cflags: -I${includedir}
 
diff --git a/pkgconfig/gstreamer-gl-uninstalled.pc.in b/pkgconfig/gstreamer-gl-uninstalled.pc.in
index 76eefb9..dac4cda 100644
--- a/pkgconfig/gstreamer-gl-uninstalled.pc.in
+++ b/pkgconfig/gstreamer-gl-uninstalled.pc.in
@@ -1,15 +1,15 @@
 prefix=
 exec_prefix=
-libdir=${pcfiledir}/../gst-libs/gst/gl
-includedir=${pcfiledir}/../gst-libs
-pluginsdir=${pcfiledir}/..
+libdir=@abs_top_builddir@/gst-libs/gst/gl/.libs
+includedir=@abs_top_builddir@/gst-libs
+girdir=@abs_top_builddir@/gst-libs/gst/base
+typelibdir=@abs_top_builddir@/gst-libs/gst/base
 
 Name: GStreamer OpenGL Plugins Libraries, Uninstalled
 Description: Streaming media framework, OpenGL plugins libraries, uninstalled
 Version: @VERSION@
-Requires: gstreamer-@GST_API_VERSION@
+Requires: gstreamer-base-@GST_API_VERSION@ gstreamer-@GST_API_VERSION@
 
-Libs: -L${libdir} ${libdir}/libgstgl-@GST_API_VERSION@.la @GL_LIBS@
-Cflags: -I${includedir} -I@srcdir@/.. @GL_CFLAGS@
+Libs: -L${libdir} -lgstgl-@GST_API_VERSION@ @GL_LIBS@
+Cflags: -I@abs_top_srcdir@/gst-libs -I@abs_top_builddir@/gst-libs
 
-libraries=gl
diff --git a/pkgconfig/gstreamer-gl.pc.in b/pkgconfig/gstreamer-gl.pc.in
index 1b98762..5589e2a 100644
--- a/pkgconfig/gstreamer-gl.pc.in
+++ b/pkgconfig/gstreamer-gl.pc.in
@@ -6,8 +6,8 @@
 
 Name: GStreamer OpenGL Plugins Libraries
 Description: Streaming media framework, OpenGL plugins libraries
-Requires: gstreamer-@GST_API_VERSION@ gstreamer-base-@GST_API_VERSION@
 Version: @VERSION@
-Libs: -L${libdir} -lgstgl-@GST_API_VERSION@ @GL_LIBS@
-Cflags: -I${includedir} -I${libdir}/gstreamer-@GST_API_VERSION@/include @GL_CFLAGS@
+Requires: gstreamer-base-@GST_API_VERSION@ gstreamer-@GST_API_VERSION@
 
+Libs: -L${libdir} -lgstgl-@GST_API_VERSION@ @GL_LIBS@
+Cflags: -I${includedir} @GL_CFLAGS@
diff --git a/pkgconfig/gstreamer-insertbin-uninstalled.pc.in b/pkgconfig/gstreamer-insertbin-uninstalled.pc.in
index 0a01e79..1a535aa 100644
--- a/pkgconfig/gstreamer-insertbin-uninstalled.pc.in
+++ b/pkgconfig/gstreamer-insertbin-uninstalled.pc.in
@@ -1,12 +1,12 @@
 prefix=
 exec_prefix=
-libdir=${pcfiledir}/../gst-libs/gst/insertbin
+libdir=${pcfiledir}/../gst-libs/gst/insertbin/.libs
 includedir=${pcfiledir}/../gst-libs
 
 Name: GStreamer Insert Bin, Uninstalled
 Description: Bin to automatically and insertally link elements, uninstalled
 Requires: gstreamer-@GST_API_VERSION@
 Version: @VERSION@
-Libs: -L${libdir} ${libdir}/libgstinsertbin-@GST_API_VERSION@.la
+Libs: -L${libdir} -lgstinsertbin-@GST_API_VERSION@
 Cflags: -I${includedir}
 
diff --git a/pkgconfig/gstreamer-mpegts-uninstalled.pc.in b/pkgconfig/gstreamer-mpegts-uninstalled.pc.in
index e9aa261..179996c 100644
--- a/pkgconfig/gstreamer-mpegts-uninstalled.pc.in
+++ b/pkgconfig/gstreamer-mpegts-uninstalled.pc.in
@@ -1,12 +1,12 @@
 prefix=
 exec_prefix=
-libdir=${pcfiledir}/../gst-libs/gst/mpegts
+libdir=${pcfiledir}/../gst-libs/gst/mpegts/.libs
 includedir=${pcfiledir}/../gst-libs
 
 Name: GStreamer MPEG-TS, Uninstalled
 Description: GStreamer MPEG-TS support, uninstalled
 Requires: gstreamer-@GST_API_VERSION@ gstreamer-base-@GST_API_VERSION@
 Version: @VERSION@
-Libs: -L${libdir} ${libdir}/libgstmpegts-@GST_API_VERSION@.la
+Libs: -L${libdir} -lgstmpegts-@GST_API_VERSION@
 Cflags: -I${includedir}
 
diff --git a/pkgconfig/gstreamer-player-uninstalled.pc.in b/pkgconfig/gstreamer-player-uninstalled.pc.in
new file mode 100644
index 0000000..5a495f4
--- /dev/null
+++ b/pkgconfig/gstreamer-player-uninstalled.pc.in
@@ -0,0 +1,12 @@
+prefix=
+exec_prefix=
+libdir=${pcfiledir}/../gst-libs/gst/player/.libs
+includedir=${pcfiledir}/../gst-libs
+
+Name: GStreamer Player, Uninstalled
+Description: GStreamer Player convenience library, uninstalled
+Requires: gstreamer-@GST_API_VERSION@
+Version: @VERSION@
+Libs: -L${libdir} -lgstplayer-@GST_API_VERSION@
+Cflags: -I${includedir}
+
diff --git a/pkgconfig/gstreamer-player.pc.in b/pkgconfig/gstreamer-player.pc.in
new file mode 100644
index 0000000..f296e7f
--- /dev/null
+++ b/pkgconfig/gstreamer-player.pc.in
@@ -0,0 +1,12 @@
+prefix=@prefix@
+exec_prefix=@exec_prefix@
+libdir=@libdir@
+includedir=@includedir@/gstreamer-@GST_API_VERSION@
+
+Name: GStreamer Player
+Description: GStreamer Player convenience library
+Requires: gstreamer-@GST_API_VERSION@
+Version: @VERSION@
+Libs: -L${libdir} -lgstplayer-@GST_API_VERSION@
+Cflags: -I${includedir}
+
diff --git a/pkgconfig/gstreamer-plugins-bad-uninstalled.pc.in b/pkgconfig/gstreamer-plugins-bad-uninstalled.pc.in
index 6fcf773..df9a9c5 100644
--- a/pkgconfig/gstreamer-plugins-bad-uninstalled.pc.in
+++ b/pkgconfig/gstreamer-plugins-bad-uninstalled.pc.in
@@ -10,5 +10,5 @@
 Description: Streaming media framework, bad plugins libraries, uninstalled
 Version: @VERSION@
 Requires: gstreamer-@GST_API_VERSION@
-Libs: -L@abs_top_builddir@/gst-libs/gst/basecamerabinsrc -L@abs_top_builddir@/gst-libs/gst/codecparsers -L@abs_top_builddir@/gst-libs/gst/egl -L@abs_top_builddir@/gst-libs/gst/insertbin -L@abs_top_builddir@/gst-libs/gst/interfaces -L@abs_top_builddir@/gst-libs/gst/mpegts -L@abs_top_builddir@/gst-libs/gst/signalprocessor -L@abs_top_builddir@/gst-libs/gst/video
+Libs: -L@abs_top_builddir@/gst-libs/gst/audio/.libs -L@abs_top_builddir@/gst-libs/gst/basecamerabinsrc/.libs -L@abs_top_builddir@/gst-libs/gst/codecparsers/.libs -L@abs_top_builddir@/gst-libs/gst/gl/.libs -L@abs_top_builddir@/gst-libs/gst/insertbin/.libs -L@abs_top_builddir@/gst-libs/gst/interfaces/.libs -L@abs_top_builddir@/gst-libs/gst/mpegts/.libs -L@abs_top_builddir@/gst-libs/gst/player/.libs -L@abs_top_builddir@/gst-libs/gst/signalprocessor/.libs -L@abs_top_builddir@/gst-libs/gst/video/.libs -L@abs_top_builddir@/gst-libs/gst/wayland/.libs
 Cflags: -I@abs_top_srcdir@/gst-libs -I@abs_top_builddir@/gst-libs
diff --git a/pkgconfig/gstreamer-wayland-uninstalled.pc.in b/pkgconfig/gstreamer-wayland-uninstalled.pc.in
index fe01de6..80d6e1b 100644
--- a/pkgconfig/gstreamer-wayland-uninstalled.pc.in
+++ b/pkgconfig/gstreamer-wayland-uninstalled.pc.in
@@ -1,12 +1,12 @@
 prefix=
 exec_prefix=
-libdir=${pcfiledir}/../gst-libs/gst/wayland
+libdir=${pcfiledir}/../gst-libs/gst/wayland/.libs
 includedir=${pcfiledir}/../gst-libs
 
 Name: GStreamer Wayland, Uninstalled
 Description: GStreamer Wayland support, uninstalled
 Requires: gstreamer-@GST_API_VERSION@ gstreamer-video-@GST_API_VERSION@
 Version: @VERSION@
-Libs: -L${libdir} ${libdir}/libgstwayland-@GST_API_VERSION@.la
+Libs: -L${libdir} -lgstwayland-@GST_API_VERSION@
 Cflags: -I${includedir}
 
diff --git a/po/POTFILES.in b/po/POTFILES.in
index ad42318..03d603f 100644
--- a/po/POTFILES.in
+++ b/po/POTFILES.in
@@ -1,7 +1,6 @@
 ext/dash/gstdashdemux.c
 ext/gl/gstgltestsrc.c
-ext/gsettings/org.freedesktop.gstreamer.default-elements.gschema.xml.in
-ext/opencv/gsttemplatematch.c
+ext/opencv/gsttemplatematch.cpp
 ext/resindvd/resindvdsrc.c
 ext/smoothstreaming/gstmssdemux.c
 ext/sndfile/gstsfdec.c
diff --git a/po/af.gmo b/po/af.gmo
index 7447a63..6cc0f0f 100644
--- a/po/af.gmo
+++ b/po/af.gmo
Binary files differ
diff --git a/po/af.po b/po/af.po
index b194edf..5cb5473 100644
--- a/po/af.po
+++ b/po/af.po
@@ -7,7 +7,7 @@
 msgstr ""
 "Project-Id-Version: gst-plugins 0.7.6\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2016-01-20 14:17+0200\n"
+"POT-Creation-Date: 2016-03-15 11:41+0200\n"
 "PO-Revision-Date: 2004-03-18 14:16+0200\n"
 "Last-Translator: Petri Jooste <rkwjpj@puk.ac.za>\n"
 "Language-Team: Afrikaans <i18n@af.org.za>\n"
@@ -19,95 +19,6 @@
 msgid "format wasn't negotiated before get function"
 msgstr ""
 
-msgid "default GStreamer sound events audiosink"
-msgstr ""
-
-msgid ""
-"GStreamer can play audio using any number of output elements. Some possible "
-"choices are osssink, pulsesink and alsasink. The audiosink can be a partial "
-"pipeline instead of just one element."
-msgstr ""
-
-msgid "description for default GStreamer sound events audiosink"
-msgstr ""
-
-msgid "Describes the selected audiosink element."
-msgstr ""
-
-msgid "default GStreamer audiosink for Audio/Video Conferencing"
-msgstr ""
-
-msgid ""
-"description for default GStreamer audiosink for Audio/Video Conferencing"
-msgstr ""
-
-msgid "default GStreamer audiosink for Music and Movies"
-msgstr ""
-
-msgid "description for default GStreamer audiosink for Music and Movies"
-msgstr ""
-
-msgid "default GStreamer videosink"
-msgstr ""
-
-msgid ""
-"GStreamer can play video using any number of output elements. Some possible "
-"choices are xvimagesink, ximagesink, sdlvideosink and aasink. The videosink "
-"can be a partial pipeline instead of just one element."
-msgstr ""
-
-msgid "description for default GStreamer videosink"
-msgstr ""
-
-msgid "Describes the selected videosink element."
-msgstr ""
-
-msgid "default GStreamer audiosrc"
-msgstr ""
-
-msgid ""
-"GStreamer can record audio using any number of input elements. Some possible "
-"choices are osssrc, pulsesrc and alsasrc. The audio source can be a partial "
-"pipeline instead of just one element."
-msgstr ""
-
-msgid "description for default GStreamer audiosrc"
-msgstr ""
-
-msgid "Describes the selected audiosrc element."
-msgstr ""
-
-msgid "default GStreamer videosrc"
-msgstr ""
-
-msgid ""
-"GStreamer can record video from any number of input elements. Some possible "
-"choices are v4lsrc, v4l2src and videotestsrc. The video source can be a "
-"partial pipeline instead of just one element."
-msgstr ""
-
-msgid "description for default GStreamer videosrc"
-msgstr ""
-
-msgid "Describes the selected videosrc element."
-msgstr ""
-
-msgid "default GStreamer visualization"
-msgstr ""
-
-msgid ""
-"GStreamer can put visualization plugins in a pipeline to transform audio "
-"streams in video frames. Some possible choices are goom, goom2k1 and "
-"synaesthesia. The visualization plugin can be a partial pipeline instead of "
-"just one element."
-msgstr ""
-
-msgid "description for default GStreamer visualization"
-msgstr ""
-
-msgid "Describes the selected visualization element."
-msgstr ""
-
 msgid "OpenCV failed to load template image"
 msgstr ""
 
diff --git a/po/az.gmo b/po/az.gmo
index 087a0f4..99177b3 100644
--- a/po/az.gmo
+++ b/po/az.gmo
Binary files differ
diff --git a/po/az.po b/po/az.po
index e711ac6..df140ec 100644
--- a/po/az.po
+++ b/po/az.po
@@ -7,7 +7,7 @@
 msgstr ""
 "Project-Id-Version: gst-plugins-0.8.0\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2016-01-20 14:17+0200\n"
+"POT-Creation-Date: 2016-03-15 11:41+0200\n"
 "PO-Revision-Date: 2004-03-19 18:29+0200\n"
 "Last-Translator: Metin Amiroff <metin@karegen.com>\n"
 "Language-Team: Azerbaijani <translation-team-az@lists.sourceforge.net>\n"
@@ -20,95 +20,6 @@
 msgid "format wasn't negotiated before get function"
 msgstr ""
 
-msgid "default GStreamer sound events audiosink"
-msgstr ""
-
-msgid ""
-"GStreamer can play audio using any number of output elements. Some possible "
-"choices are osssink, pulsesink and alsasink. The audiosink can be a partial "
-"pipeline instead of just one element."
-msgstr ""
-
-msgid "description for default GStreamer sound events audiosink"
-msgstr ""
-
-msgid "Describes the selected audiosink element."
-msgstr ""
-
-msgid "default GStreamer audiosink for Audio/Video Conferencing"
-msgstr ""
-
-msgid ""
-"description for default GStreamer audiosink for Audio/Video Conferencing"
-msgstr ""
-
-msgid "default GStreamer audiosink for Music and Movies"
-msgstr ""
-
-msgid "description for default GStreamer audiosink for Music and Movies"
-msgstr ""
-
-msgid "default GStreamer videosink"
-msgstr ""
-
-msgid ""
-"GStreamer can play video using any number of output elements. Some possible "
-"choices are xvimagesink, ximagesink, sdlvideosink and aasink. The videosink "
-"can be a partial pipeline instead of just one element."
-msgstr ""
-
-msgid "description for default GStreamer videosink"
-msgstr ""
-
-msgid "Describes the selected videosink element."
-msgstr ""
-
-msgid "default GStreamer audiosrc"
-msgstr ""
-
-msgid ""
-"GStreamer can record audio using any number of input elements. Some possible "
-"choices are osssrc, pulsesrc and alsasrc. The audio source can be a partial "
-"pipeline instead of just one element."
-msgstr ""
-
-msgid "description for default GStreamer audiosrc"
-msgstr ""
-
-msgid "Describes the selected audiosrc element."
-msgstr ""
-
-msgid "default GStreamer videosrc"
-msgstr ""
-
-msgid ""
-"GStreamer can record video from any number of input elements. Some possible "
-"choices are v4lsrc, v4l2src and videotestsrc. The video source can be a "
-"partial pipeline instead of just one element."
-msgstr ""
-
-msgid "description for default GStreamer videosrc"
-msgstr ""
-
-msgid "Describes the selected videosrc element."
-msgstr ""
-
-msgid "default GStreamer visualization"
-msgstr ""
-
-msgid ""
-"GStreamer can put visualization plugins in a pipeline to transform audio "
-"streams in video frames. Some possible choices are goom, goom2k1 and "
-"synaesthesia. The visualization plugin can be a partial pipeline instead of "
-"just one element."
-msgstr ""
-
-msgid "description for default GStreamer visualization"
-msgstr ""
-
-msgid "Describes the selected visualization element."
-msgstr ""
-
 msgid "OpenCV failed to load template image"
 msgstr ""
 
diff --git a/po/bg.gmo b/po/bg.gmo
index 0c8db39..6981193 100644
--- a/po/bg.gmo
+++ b/po/bg.gmo
Binary files differ
diff --git a/po/bg.po b/po/bg.po
index 20ac998..7be2f61 100644
--- a/po/bg.po
+++ b/po/bg.po
@@ -1,117 +1,28 @@
 # Bulgarian translation of gst-plugins-bad.
-# Copyright (C) 2007, 2008, 2009, 2010, 2011 Free Software Fondation, Inc.
+# Copyright (C) 2007, 2008, 2009, 2010, 2011, 2016 Free Software Fondation, Inc.
 # This file is distributed under the same license as the gst-plugins-bad package.
-# Alexander Shopov <ash@kambanaria.org>, 2007, 2008, 2009, 2010, 2011.
+# Alexander Shopov <ash@kambanaria.org>, 2007, 2008, 2009, 2010, 2011, 2016.
 #
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: gst-plugins-bad 0.10.21.2\n"
+"Project-Id-Version: gst-plugins-bad 1.7.2\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2016-01-20 14:17+0200\n"
-"PO-Revision-Date: 2011-04-26 22:30+0300\n"
+"POT-Creation-Date: 2016-03-15 11:41+0200\n"
+"PO-Revision-Date: 2016-02-21 21:03+0200\n"
 "Last-Translator: Alexander Shopov <ash@kambanaria.org>\n"
-"Language-Team: Bulgarian <dict@fsa-bg.org>\n"
-"Language: \n"
+"Language-Team: Bulgarian <dict@ludost.net>\n"
+"Language: bg\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=n != 1;\n"
 
 msgid "format wasn't negotiated before get function"
-msgstr ""
-
-msgid "default GStreamer sound events audiosink"
-msgstr ""
-
-msgid ""
-"GStreamer can play audio using any number of output elements. Some possible "
-"choices are osssink, pulsesink and alsasink. The audiosink can be a partial "
-"pipeline instead of just one element."
-msgstr ""
-
-msgid "description for default GStreamer sound events audiosink"
-msgstr ""
-
-msgid "Describes the selected audiosink element."
-msgstr ""
-
-msgid "default GStreamer audiosink for Audio/Video Conferencing"
-msgstr ""
-
-msgid ""
-"description for default GStreamer audiosink for Audio/Video Conferencing"
-msgstr ""
-
-msgid "default GStreamer audiosink for Music and Movies"
-msgstr ""
-
-msgid "description for default GStreamer audiosink for Music and Movies"
-msgstr ""
-
-msgid "default GStreamer videosink"
-msgstr ""
-
-msgid ""
-"GStreamer can play video using any number of output elements. Some possible "
-"choices are xvimagesink, ximagesink, sdlvideosink and aasink. The videosink "
-"can be a partial pipeline instead of just one element."
-msgstr ""
-
-msgid "description for default GStreamer videosink"
-msgstr ""
-
-msgid "Describes the selected videosink element."
-msgstr ""
-
-msgid "default GStreamer audiosrc"
-msgstr ""
-
-msgid ""
-"GStreamer can record audio using any number of input elements. Some possible "
-"choices are osssrc, pulsesrc and alsasrc. The audio source can be a partial "
-"pipeline instead of just one element."
-msgstr ""
-
-msgid "description for default GStreamer audiosrc"
-msgstr ""
-
-msgid "Describes the selected audiosrc element."
-msgstr ""
-
-msgid "default GStreamer videosrc"
-msgstr ""
-
-msgid ""
-"GStreamer can record video from any number of input elements. Some possible "
-"choices are v4lsrc, v4l2src and videotestsrc. The video source can be a "
-"partial pipeline instead of just one element."
-msgstr ""
-
-msgid "description for default GStreamer videosrc"
-msgstr ""
-
-msgid "Describes the selected videosrc element."
-msgstr ""
-
-msgid "default GStreamer visualization"
-msgstr ""
-
-msgid ""
-"GStreamer can put visualization plugins in a pipeline to transform audio "
-"streams in video frames. Some possible choices are goom, goom2k1 and "
-"synaesthesia. The visualization plugin can be a partial pipeline instead of "
-"just one element."
-msgstr ""
-
-msgid "description for default GStreamer visualization"
-msgstr ""
-
-msgid "Describes the selected visualization element."
-msgstr ""
+msgstr "форматът не е бил уточнен преди извикване на функцията за получаване"
 
 msgid "OpenCV failed to load template image"
-msgstr ""
+msgstr "OpenCV не успя да зареди изображението-шаблон"
 
 msgid "Could not read title information for DVD."
 msgstr "Информацията за заглавните части на DVD-то не може да бъде прочетена."
@@ -134,53 +45,52 @@
 msgstr "DVD-то не може да бъде прочетено."
 
 msgid "This file contains no playable streams."
-msgstr ""
+msgstr "Файлът не съдържа потоци за изпълнение."
 
-#, fuzzy
 msgid "Could not open sndfile stream for reading."
-msgstr "Файлът „%s“ не може да се отвори за четене."
+msgstr "Потокът sndfile не може да се отвори за четене."
 
 msgid "Could not establish connection to sndio"
-msgstr ""
+msgstr "Не може да се установи връзка към sndio"
 
 msgid "Failed to query sndio capabilities"
-msgstr ""
+msgstr "Неуспешно запитване за възможностите на sndio"
 
-#, fuzzy
 msgid "Could not configure sndio"
-msgstr "Файлът „%s“ не може да се отвори за четене."
+msgstr "Не може да се настрои sndio"
 
-#, fuzzy
 msgid "Could not start sndio"
-msgstr "DVD-то не може да бъде прочетено."
+msgstr "Не може да се стартира sndio"
 
 msgid "Internal data flow error."
 msgstr "Вътрешна грешка в потока на данни."
 
 msgid "Generated file has a larger preroll time than its streams duration"
 msgstr ""
+"Генерираният файл е с по-дълго време за буфериране отколкото е самата му "
+"продължителност"
 
 #, c-format
 msgid "Missing element '%s' - check your GStreamer installation."
-msgstr ""
+msgstr "Елементът „%s“ липсва, проверете инсталацията на GStreamer."
 
 msgid "File location is set to NULL, please set it to a valid filename"
-msgstr ""
+msgstr "Местоположението на файла е NULL. Задайте име на файл"
 
 msgid "Digitalzoom element couldn't be created"
-msgstr ""
+msgstr "Елементът за цифрово увеличение не може да бъде създаден"
 
 msgid "Subpicture format was not configured before data flow"
-msgstr ""
+msgstr "Форматът на подкартината не е бил уточнен преди началото на потока"
 
 msgid "Failed to get fragment URL."
-msgstr ""
+msgstr "Неуспешно получаване на адреса на фрагмента."
 
 msgid "Internal data stream error."
 msgstr "Вътрешна грешка в потока на данни."
 
 msgid "Couldn't download fragments"
-msgstr ""
+msgstr "Фрагментите не могат да бъдат свалени"
 
 msgid "No file name specified for writing."
 msgstr "Не е указано име на файл за запис."
@@ -188,6 +98,8 @@
 #, c-format
 msgid "Given file name \"%s\" can't be converted to local file name encoding."
 msgstr ""
+"Зададеното име на файл „%s“ не може да бъде прехвърлено в локалното кодиране "
+"на имена на файлове."
 
 #, c-format
 msgid "Could not open file \"%s\" for writing."
@@ -205,9 +117,9 @@
 msgid "Could not get settings from frontend device \"%s\"."
 msgstr "Настройките на устройството „%s“ не могат да бъдат получени."
 
-#, fuzzy, c-format
+#, c-format
 msgid "Cannot enumerate delivery systems from frontend device \"%s\"."
-msgstr "Настройките на устройството „%s“ не могат да бъдат получени."
+msgstr "Системите за доставка от устройството „%s“ не могат да бъдат изброени."
 
 #, c-format
 msgid "Could not open file \"%s\" for reading."
@@ -215,17 +127,20 @@
 
 msgid "Couldn't find DVB channel configuration file"
 msgstr ""
+"Файлът с настройките на цифровото видеоръзпръскване (DVB) не може да бъде "
+"открит"
 
 #, c-format
 msgid "Couldn't load DVB channel configuration file: %s"
 msgstr ""
+"Файлът с настройките на цифровото видеоръзпръскване (DVB) „%s“ не може да "
+"бъде прочетен"
 
 msgid "DVB channel configuration file doesn't contain any channels"
 msgstr ""
+"Файлът с настройките на цифровото видеоръзпръскване (DVB) не съдържа никакви "
+"канали"
 
 #, c-format
 msgid "Couldn't find details for DVB channel %s"
-msgstr ""
-
-#~ msgid "Could not write to file \"%s\"."
-#~ msgstr "Не може да се записва във файла „%s“."
+msgstr "Липсват данни за канала за цифрово видеоръзпръскване (DVB) „%s“"
diff --git a/po/ca.gmo b/po/ca.gmo
index e094580..98bd395 100644
--- a/po/ca.gmo
+++ b/po/ca.gmo
Binary files differ
diff --git a/po/ca.po b/po/ca.po
index 08de271..47bfb1b 100644
--- a/po/ca.po
+++ b/po/ca.po
@@ -9,7 +9,7 @@
 msgstr ""
 "Project-Id-Version: gst-plugins-bad 0.10.21.2\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2016-01-20 14:17+0200\n"
+"POT-Creation-Date: 2016-03-15 11:41+0200\n"
 "PO-Revision-Date: 2012-01-01 14:19+0100\n"
 "Last-Translator: Gil Forcada <gforcada@gnome.org>\n"
 "Language-Team: Catalan <ca@dodds.net>\n"
@@ -22,95 +22,6 @@
 msgid "format wasn't negotiated before get function"
 msgstr ""
 
-msgid "default GStreamer sound events audiosink"
-msgstr ""
-
-msgid ""
-"GStreamer can play audio using any number of output elements. Some possible "
-"choices are osssink, pulsesink and alsasink. The audiosink can be a partial "
-"pipeline instead of just one element."
-msgstr ""
-
-msgid "description for default GStreamer sound events audiosink"
-msgstr ""
-
-msgid "Describes the selected audiosink element."
-msgstr ""
-
-msgid "default GStreamer audiosink for Audio/Video Conferencing"
-msgstr ""
-
-msgid ""
-"description for default GStreamer audiosink for Audio/Video Conferencing"
-msgstr ""
-
-msgid "default GStreamer audiosink for Music and Movies"
-msgstr ""
-
-msgid "description for default GStreamer audiosink for Music and Movies"
-msgstr ""
-
-msgid "default GStreamer videosink"
-msgstr ""
-
-msgid ""
-"GStreamer can play video using any number of output elements. Some possible "
-"choices are xvimagesink, ximagesink, sdlvideosink and aasink. The videosink "
-"can be a partial pipeline instead of just one element."
-msgstr ""
-
-msgid "description for default GStreamer videosink"
-msgstr ""
-
-msgid "Describes the selected videosink element."
-msgstr ""
-
-msgid "default GStreamer audiosrc"
-msgstr ""
-
-msgid ""
-"GStreamer can record audio using any number of input elements. Some possible "
-"choices are osssrc, pulsesrc and alsasrc. The audio source can be a partial "
-"pipeline instead of just one element."
-msgstr ""
-
-msgid "description for default GStreamer audiosrc"
-msgstr ""
-
-msgid "Describes the selected audiosrc element."
-msgstr ""
-
-msgid "default GStreamer videosrc"
-msgstr ""
-
-msgid ""
-"GStreamer can record video from any number of input elements. Some possible "
-"choices are v4lsrc, v4l2src and videotestsrc. The video source can be a "
-"partial pipeline instead of just one element."
-msgstr ""
-
-msgid "description for default GStreamer videosrc"
-msgstr ""
-
-msgid "Describes the selected videosrc element."
-msgstr ""
-
-msgid "default GStreamer visualization"
-msgstr ""
-
-msgid ""
-"GStreamer can put visualization plugins in a pipeline to transform audio "
-"streams in video frames. Some possible choices are goom, goom2k1 and "
-"synaesthesia. The visualization plugin can be a partial pipeline instead of "
-"just one element."
-msgstr ""
-
-msgid "description for default GStreamer visualization"
-msgstr ""
-
-msgid "Describes the selected visualization element."
-msgstr ""
-
 msgid "OpenCV failed to load template image"
 msgstr ""
 
diff --git a/po/cs.gmo b/po/cs.gmo
index 0aa721f..dd33743 100644
--- a/po/cs.gmo
+++ b/po/cs.gmo
Binary files differ
diff --git a/po/cs.po b/po/cs.po
index fe8c722..b02fd14 100644
--- a/po/cs.po
+++ b/po/cs.po
@@ -11,7 +11,7 @@
 msgstr ""
 "Project-Id-Version: gst-plugins-bad 1.6.0\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2016-01-20 14:17+0200\n"
+"POT-Creation-Date: 2016-03-15 11:41+0200\n"
 "PO-Revision-Date: 2015-10-15 20:54+0200\n"
 "Last-Translator: Marek Černocký <marek@manet.cz>\n"
 "Language-Team: Czech <translation-team-cs@lists.sourceforge.net>\n"
@@ -25,113 +25,6 @@
 msgid "format wasn't negotiated before get function"
 msgstr "formát nebyl vyjednán před získáním funkce"
 
-msgid "default GStreamer sound events audiosink"
-msgstr "výchozí zvukový cíl GStreamer pro zvukové události"
-
-msgid ""
-"GStreamer can play audio using any number of output elements. Some possible "
-"choices are osssink, pulsesink and alsasink. The audiosink can be a partial "
-"pipeline instead of just one element."
-msgstr ""
-"GStreamer umí přehrávat zvuk pomocí mnoha výstupních prvků. Možné volby jsou "
-"osssink, pulsesink a alsasink. Zvukovým cílem může být namísto jednoho "
-"elementu i částečná roura."
-
-msgid "description for default GStreamer sound events audiosink"
-msgstr "popis výchozího zvukového cíle pro zvukové události GStreamer"
-
-msgid "Describes the selected audiosink element."
-msgstr "Popisuje vybraný element sloužící jako cíl pro zvuk."
-
-msgid "default GStreamer audiosink for Audio/Video Conferencing"
-msgstr "výchozí zvukový cíl GStreamer pro hlasové konference a videokonference"
-
-msgid ""
-"description for default GStreamer audiosink for Audio/Video Conferencing"
-msgstr ""
-"popis výchozího zvukového cíle GStreamer pro hlasové konference a "
-"videokonference"
-
-msgid "default GStreamer audiosink for Music and Movies"
-msgstr "výchozí zvukový cíl GStreamer pro hudbu a filmy"
-
-msgid "description for default GStreamer audiosink for Music and Movies"
-msgstr "popis výchozího zvukového cíle GStreamer pro hudbu a filmy"
-
-msgid "default GStreamer videosink"
-msgstr "výchozí cíl videa GStreamer"
-
-msgid ""
-"GStreamer can play video using any number of output elements. Some possible "
-"choices are xvimagesink, ximagesink, sdlvideosink and aasink. The videosink "
-"can be a partial pipeline instead of just one element."
-msgstr ""
-"GStreamer umí přehrávat video pomocí mnoha výstupních prvků. Možné volby "
-"jsou xvimagesink, ximagesink, sdlvideosink a aasink. Cílem videa může být "
-"namísto právě jednoho elementu i částečná roura."
-
-msgid "description for default GStreamer videosink"
-msgstr "popis výchozího cíle videa GStreamer"
-
-msgid "Describes the selected videosink element."
-msgstr "Popisuje vybraný element sloužící jako cíl pro video."
-
-msgid "default GStreamer audiosrc"
-msgstr "výchozí zdroj zvuku GStreamer"
-
-msgid ""
-"GStreamer can record audio using any number of input elements. Some possible "
-"choices are osssrc, pulsesrc and alsasrc. The audio source can be a partial "
-"pipeline instead of just one element."
-msgstr ""
-"GStreamer umí nahrávat zvuk pomocí mnoha vstupních prvků. Možné volby jsou "
-"osssrc, pulsesrc a alsasrc. Zvukovým zdrojem může být namísto právě jednoho "
-"elementu i částečná roura."
-
-msgid "description for default GStreamer audiosrc"
-msgstr "popis pro výchozí zdroj zvuku GStreamer"
-
-msgid "Describes the selected audiosrc element."
-msgstr "Popisuje vybraný element sloužící jako zdroj zvuku."
-
-msgid "default GStreamer videosrc"
-msgstr "výchozí zdroj videa GStreamer"
-
-msgid ""
-"GStreamer can record video from any number of input elements. Some possible "
-"choices are v4lsrc, v4l2src and videotestsrc. The video source can be a "
-"partial pipeline instead of just one element."
-msgstr ""
-"GStreamer umí nahrávat video pomocí mnoha vstupních prvků. Možné volby jsou "
-"v4lsrc, v4l2src a videotestsrc. Zdrojem videa může být namísto právě jednoho "
-"elementu i částečná roura."
-
-msgid "description for default GStreamer videosrc"
-msgstr "popis pro výchozí zdroj videa GStreamer"
-
-msgid "Describes the selected videosrc element."
-msgstr "Popisuje vybraný element sloužící jako zdroj videa."
-
-msgid "default GStreamer visualization"
-msgstr "výchozí vizualizace GStreamer"
-
-msgid ""
-"GStreamer can put visualization plugins in a pipeline to transform audio "
-"streams in video frames. Some possible choices are goom, goom2k1 and "
-"synaesthesia. The visualization plugin can be a partial pipeline instead of "
-"just one element."
-msgstr ""
-"GStreamer umí do roury vložit vizualizační zásuvný modul, aby prováděl změny "
-"zvukových proudů ve snímcích videa. Možné volby jsou goom, goom2k1 a "
-"synaesthesia. Vizualizačním zásuvným modulem může být namísto právě jednoho "
-"elementu i částečná roura."
-
-msgid "description for default GStreamer visualization"
-msgstr "popis pro výchozí vizualizaci GStreamer"
-
-msgid "Describes the selected visualization element."
-msgstr "Popisuje vybraný vizualizační element."
-
 msgid "OpenCV failed to load template image"
 msgstr "OpenCV selhalo při načítání obrazu šablony"
 
@@ -251,3 +144,111 @@
 #, c-format
 msgid "Couldn't find details for DVB channel %s"
 msgstr "Nelze najít podrobnosti ke kanálu DVB %s"
+
+#~ msgid "default GStreamer sound events audiosink"
+#~ msgstr "výchozí zvukový cíl GStreamer pro zvukové události"
+
+#~ msgid ""
+#~ "GStreamer can play audio using any number of output elements. Some "
+#~ "possible choices are osssink, pulsesink and alsasink. The audiosink can "
+#~ "be a partial pipeline instead of just one element."
+#~ msgstr ""
+#~ "GStreamer umí přehrávat zvuk pomocí mnoha výstupních prvků. Možné volby "
+#~ "jsou osssink, pulsesink a alsasink. Zvukovým cílem může být namísto "
+#~ "jednoho elementu i částečná roura."
+
+#~ msgid "description for default GStreamer sound events audiosink"
+#~ msgstr "popis výchozího zvukového cíle pro zvukové události GStreamer"
+
+#~ msgid "Describes the selected audiosink element."
+#~ msgstr "Popisuje vybraný element sloužící jako cíl pro zvuk."
+
+#~ msgid "default GStreamer audiosink for Audio/Video Conferencing"
+#~ msgstr ""
+#~ "výchozí zvukový cíl GStreamer pro hlasové konference a videokonference"
+
+#~ msgid ""
+#~ "description for default GStreamer audiosink for Audio/Video Conferencing"
+#~ msgstr ""
+#~ "popis výchozího zvukového cíle GStreamer pro hlasové konference a "
+#~ "videokonference"
+
+#~ msgid "default GStreamer audiosink for Music and Movies"
+#~ msgstr "výchozí zvukový cíl GStreamer pro hudbu a filmy"
+
+#~ msgid "description for default GStreamer audiosink for Music and Movies"
+#~ msgstr "popis výchozího zvukového cíle GStreamer pro hudbu a filmy"
+
+#~ msgid "default GStreamer videosink"
+#~ msgstr "výchozí cíl videa GStreamer"
+
+#~ msgid ""
+#~ "GStreamer can play video using any number of output elements. Some "
+#~ "possible choices are xvimagesink, ximagesink, sdlvideosink and aasink. "
+#~ "The videosink can be a partial pipeline instead of just one element."
+#~ msgstr ""
+#~ "GStreamer umí přehrávat video pomocí mnoha výstupních prvků. Možné volby "
+#~ "jsou xvimagesink, ximagesink, sdlvideosink a aasink. Cílem videa může být "
+#~ "namísto právě jednoho elementu i částečná roura."
+
+#~ msgid "description for default GStreamer videosink"
+#~ msgstr "popis výchozího cíle videa GStreamer"
+
+#~ msgid "Describes the selected videosink element."
+#~ msgstr "Popisuje vybraný element sloužící jako cíl pro video."
+
+#~ msgid "default GStreamer audiosrc"
+#~ msgstr "výchozí zdroj zvuku GStreamer"
+
+#~ msgid ""
+#~ "GStreamer can record audio using any number of input elements. Some "
+#~ "possible choices are osssrc, pulsesrc and alsasrc. The audio source can "
+#~ "be a partial pipeline instead of just one element."
+#~ msgstr ""
+#~ "GStreamer umí nahrávat zvuk pomocí mnoha vstupních prvků. Možné volby "
+#~ "jsou osssrc, pulsesrc a alsasrc. Zvukovým zdrojem může být namísto právě "
+#~ "jednoho elementu i částečná roura."
+
+#~ msgid "description for default GStreamer audiosrc"
+#~ msgstr "popis pro výchozí zdroj zvuku GStreamer"
+
+#~ msgid "Describes the selected audiosrc element."
+#~ msgstr "Popisuje vybraný element sloužící jako zdroj zvuku."
+
+#~ msgid "default GStreamer videosrc"
+#~ msgstr "výchozí zdroj videa GStreamer"
+
+#~ msgid ""
+#~ "GStreamer can record video from any number of input elements. Some "
+#~ "possible choices are v4lsrc, v4l2src and videotestsrc. The video source "
+#~ "can be a partial pipeline instead of just one element."
+#~ msgstr ""
+#~ "GStreamer umí nahrávat video pomocí mnoha vstupních prvků. Možné volby "
+#~ "jsou v4lsrc, v4l2src a videotestsrc. Zdrojem videa může být namísto právě "
+#~ "jednoho elementu i částečná roura."
+
+#~ msgid "description for default GStreamer videosrc"
+#~ msgstr "popis pro výchozí zdroj videa GStreamer"
+
+#~ msgid "Describes the selected videosrc element."
+#~ msgstr "Popisuje vybraný element sloužící jako zdroj videa."
+
+#~ msgid "default GStreamer visualization"
+#~ msgstr "výchozí vizualizace GStreamer"
+
+#~ msgid ""
+#~ "GStreamer can put visualization plugins in a pipeline to transform audio "
+#~ "streams in video frames. Some possible choices are goom, goom2k1 and "
+#~ "synaesthesia. The visualization plugin can be a partial pipeline instead "
+#~ "of just one element."
+#~ msgstr ""
+#~ "GStreamer umí do roury vložit vizualizační zásuvný modul, aby prováděl "
+#~ "změny zvukových proudů ve snímcích videa. Možné volby jsou goom, goom2k1 "
+#~ "a synaesthesia. Vizualizačním zásuvným modulem může být namísto právě "
+#~ "jednoho elementu i částečná roura."
+
+#~ msgid "description for default GStreamer visualization"
+#~ msgstr "popis pro výchozí vizualizaci GStreamer"
+
+#~ msgid "Describes the selected visualization element."
+#~ msgstr "Popisuje vybraný vizualizační element."
diff --git a/po/da.gmo b/po/da.gmo
index 2f205ae..654d6f3 100644
--- a/po/da.gmo
+++ b/po/da.gmo
Binary files differ
diff --git a/po/da.po b/po/da.po
index 5683939..0561b99 100644
--- a/po/da.po
+++ b/po/da.po
@@ -8,7 +8,7 @@
 msgstr ""
 "Project-Id-Version: gst-plugins-bad-1.6.0\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2016-01-20 14:17+0200\n"
+"POT-Creation-Date: 2016-03-15 11:41+0200\n"
 "PO-Revision-Date: 2015-12-05 11:28+0200\n"
 "Last-Translator: Joe Hansen <joedalton2@yahoo.dk>\n"
 "Language-Team: Danish <dansk@dansk-gruppen.dk>\n"
@@ -20,111 +20,6 @@
 msgid "format wasn't negotiated before get function"
 msgstr "format blev ikke forhandlet før hent funktion"
 
-msgid "default GStreamer sound events audiosink"
-msgstr "standardlydkanal for GStreamers lydhændelser"
-
-msgid ""
-"GStreamer can play audio using any number of output elements. Some possible "
-"choices are osssink, pulsesink and alsasink. The audiosink can be a partial "
-"pipeline instead of just one element."
-msgstr ""
-"GStreamer kan afspille lyd via et antal udgangselementer. Nogle mulige valg "
-"er osssink, pulsesink og alsasink. Lydudgangen kan være en delvis datakanal "
-"i stedet for bare et element."
-
-msgid "description for default GStreamer sound events audiosink"
-msgstr "beskrivelse af standardlydkanal for GStreamers lydhændelser"
-
-msgid "Describes the selected audiosink element."
-msgstr "Beskriver det valge lydkanalelement."
-
-msgid "default GStreamer audiosink for Audio/Video Conferencing"
-msgstr "standardlydkanal til GStreamers lyd/video-konference"
-
-msgid ""
-"description for default GStreamer audiosink for Audio/Video Conferencing"
-msgstr "beskrivelse for standardlydkanal til GStreamers lyd/video-konference"
-
-msgid "default GStreamer audiosink for Music and Movies"
-msgstr "standardlydkanal til GStreamers musik og film"
-
-msgid "description for default GStreamer audiosink for Music and Movies"
-msgstr "beskrivelse for standardlydkanal til GStreamers musik og film"
-
-msgid "default GStreamer videosink"
-msgstr "standardlydkanal for GStreamer"
-
-msgid ""
-"GStreamer can play video using any number of output elements. Some possible "
-"choices are xvimagesink, ximagesink, sdlvideosink and aasink. The videosink "
-"can be a partial pipeline instead of just one element."
-msgstr ""
-"GStreamer kan afspille video via et antal udgangselementer. Nogle mulige "
-"valg er xvimagesink, ximagesink, sdlvideosink og aasink. Videoudgangen kan "
-"være en delvis datakanal i stedet for bare et element."
-
-msgid "description for default GStreamer videosink"
-msgstr "beskrivelse for standardvideokanal for GStreamer"
-
-msgid "Describes the selected videosink element."
-msgstr "Beskriver den valgte videokanalselement."
-
-msgid "default GStreamer audiosrc"
-msgstr "standardlydoptagelse for GStreamer"
-
-msgid ""
-"GStreamer can record audio using any number of input elements. Some possible "
-"choices are osssrc, pulsesrc and alsasrc. The audio source can be a partial "
-"pipeline instead of just one element."
-msgstr ""
-"GStreamer kan optage lyd via et antal indgangselementer. Nogle mulige valg "
-"er osssrc, pulsesrc og alsasrc. Lydkilden kan være en delvis datakanal i "
-"stedet for bare et element."
-
-msgid "description for default GStreamer audiosrc"
-msgstr "beskrivelse for standardlydoptagelsen til GStreamer"
-
-msgid "Describes the selected audiosrc element."
-msgstr "Beskriver det valgte lydoptagelseselement."
-
-msgid "default GStreamer videosrc"
-msgstr "standardvideooptager for GStreamer"
-
-msgid ""
-"GStreamer can record video from any number of input elements. Some possible "
-"choices are v4lsrc, v4l2src and videotestsrc. The video source can be a "
-"partial pipeline instead of just one element."
-msgstr ""
-"GStreamer kan optage video via et antal indgangselementer. Nogle mulige valg "
-"er v4lsrc, v4l2src og videotestsrc. Videokilden kan være en delvis datakanal "
-"i stedet for bare et element."
-
-msgid "description for default GStreamer videosrc"
-msgstr "beskrivelse for standardvideooptageren til GStreamer"
-
-msgid "Describes the selected videosrc element."
-msgstr "Beskriver det valgte videooptagerelement."
-
-msgid "default GStreamer visualization"
-msgstr "Standardvisualisering for GStreamer"
-
-msgid ""
-"GStreamer can put visualization plugins in a pipeline to transform audio "
-"streams in video frames. Some possible choices are goom, goom2k1 and "
-"synaesthesia. The visualization plugin can be a partial pipeline instead of "
-"just one element."
-msgstr ""
-"GStreamer kan placere visualiseringsudvidelsesmoduler i en datakanal for at "
-"transformere lydstrømme i videobilleder. Nogle mulige valg er goom, goom2k1 "
-"og synaesthesia. Visualiseringsudvidelsesmodulerne kan være en delvis "
-"datakanal i stedet for bare et element."
-
-msgid "description for default GStreamer visualization"
-msgstr "beskrivelse for standardvisualisering til GStreamer"
-
-msgid "Describes the selected visualization element."
-msgstr "Beskriver det valgte visualiseringselement."
-
 msgid "OpenCV failed to load template image"
 msgstr "OpenCV mislykkedes i at indlæse skabelonaftryk"
 
@@ -242,6 +137,112 @@
 msgid "Couldn't find details for DVB channel %s"
 msgstr "Kunne ikke finde detaljer for DVB-kanalen %s"
 
+#~ msgid "default GStreamer sound events audiosink"
+#~ msgstr "standardlydkanal for GStreamers lydhændelser"
+
+#~ msgid ""
+#~ "GStreamer can play audio using any number of output elements. Some "
+#~ "possible choices are osssink, pulsesink and alsasink. The audiosink can "
+#~ "be a partial pipeline instead of just one element."
+#~ msgstr ""
+#~ "GStreamer kan afspille lyd via et antal udgangselementer. Nogle mulige "
+#~ "valg er osssink, pulsesink og alsasink. Lydudgangen kan være en delvis "
+#~ "datakanal i stedet for bare et element."
+
+#~ msgid "description for default GStreamer sound events audiosink"
+#~ msgstr "beskrivelse af standardlydkanal for GStreamers lydhændelser"
+
+#~ msgid "Describes the selected audiosink element."
+#~ msgstr "Beskriver det valge lydkanalelement."
+
+#~ msgid "default GStreamer audiosink for Audio/Video Conferencing"
+#~ msgstr "standardlydkanal til GStreamers lyd/video-konference"
+
+#~ msgid ""
+#~ "description for default GStreamer audiosink for Audio/Video Conferencing"
+#~ msgstr ""
+#~ "beskrivelse for standardlydkanal til GStreamers lyd/video-konference"
+
+#~ msgid "default GStreamer audiosink for Music and Movies"
+#~ msgstr "standardlydkanal til GStreamers musik og film"
+
+#~ msgid "description for default GStreamer audiosink for Music and Movies"
+#~ msgstr "beskrivelse for standardlydkanal til GStreamers musik og film"
+
+#~ msgid "default GStreamer videosink"
+#~ msgstr "standardlydkanal for GStreamer"
+
+#~ msgid ""
+#~ "GStreamer can play video using any number of output elements. Some "
+#~ "possible choices are xvimagesink, ximagesink, sdlvideosink and aasink. "
+#~ "The videosink can be a partial pipeline instead of just one element."
+#~ msgstr ""
+#~ "GStreamer kan afspille video via et antal udgangselementer. Nogle mulige "
+#~ "valg er xvimagesink, ximagesink, sdlvideosink og aasink. Videoudgangen "
+#~ "kan være en delvis datakanal i stedet for bare et element."
+
+#~ msgid "description for default GStreamer videosink"
+#~ msgstr "beskrivelse for standardvideokanal for GStreamer"
+
+#~ msgid "Describes the selected videosink element."
+#~ msgstr "Beskriver den valgte videokanalselement."
+
+#~ msgid "default GStreamer audiosrc"
+#~ msgstr "standardlydoptagelse for GStreamer"
+
+#~ msgid ""
+#~ "GStreamer can record audio using any number of input elements. Some "
+#~ "possible choices are osssrc, pulsesrc and alsasrc. The audio source can "
+#~ "be a partial pipeline instead of just one element."
+#~ msgstr ""
+#~ "GStreamer kan optage lyd via et antal indgangselementer. Nogle mulige "
+#~ "valg er osssrc, pulsesrc og alsasrc. Lydkilden kan være en delvis "
+#~ "datakanal i stedet for bare et element."
+
+#~ msgid "description for default GStreamer audiosrc"
+#~ msgstr "beskrivelse for standardlydoptagelsen til GStreamer"
+
+#~ msgid "Describes the selected audiosrc element."
+#~ msgstr "Beskriver det valgte lydoptagelseselement."
+
+#~ msgid "default GStreamer videosrc"
+#~ msgstr "standardvideooptager for GStreamer"
+
+#~ msgid ""
+#~ "GStreamer can record video from any number of input elements. Some "
+#~ "possible choices are v4lsrc, v4l2src and videotestsrc. The video source "
+#~ "can be a partial pipeline instead of just one element."
+#~ msgstr ""
+#~ "GStreamer kan optage video via et antal indgangselementer. Nogle mulige "
+#~ "valg er v4lsrc, v4l2src og videotestsrc. Videokilden kan være en delvis "
+#~ "datakanal i stedet for bare et element."
+
+#~ msgid "description for default GStreamer videosrc"
+#~ msgstr "beskrivelse for standardvideooptageren til GStreamer"
+
+#~ msgid "Describes the selected videosrc element."
+#~ msgstr "Beskriver det valgte videooptagerelement."
+
+#~ msgid "default GStreamer visualization"
+#~ msgstr "Standardvisualisering for GStreamer"
+
+#~ msgid ""
+#~ "GStreamer can put visualization plugins in a pipeline to transform audio "
+#~ "streams in video frames. Some possible choices are goom, goom2k1 and "
+#~ "synaesthesia. The visualization plugin can be a partial pipeline instead "
+#~ "of just one element."
+#~ msgstr ""
+#~ "GStreamer kan placere visualiseringsudvidelsesmoduler i en datakanal for "
+#~ "at transformere lydstrømme i videobilleder. Nogle mulige valg er goom, "
+#~ "goom2k1 og synaesthesia. Visualiseringsudvidelsesmodulerne kan være en "
+#~ "delvis datakanal i stedet for bare et element."
+
+#~ msgid "description for default GStreamer visualization"
+#~ msgstr "beskrivelse for standardvisualisering til GStreamer"
+
+#~ msgid "Describes the selected visualization element."
+#~ msgstr "Beskriver det valgte visualiseringselement."
+
 #~ msgid "Couldn't get the Manifest's URI"
 #~ msgstr "Kunne ikke indhente Manifestens adresse"
 
diff --git a/po/de.gmo b/po/de.gmo
index cdeedee..af33d88 100644
--- a/po/de.gmo
+++ b/po/de.gmo
Binary files differ
diff --git a/po/de.po b/po/de.po
index a10c72b..4c85a17 100644
--- a/po/de.po
+++ b/po/de.po
@@ -8,7 +8,7 @@
 msgstr ""
 "Project-Id-Version: gst-plugins-bad 1.6.0\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2016-01-20 14:17+0200\n"
+"POT-Creation-Date: 2016-03-15 11:41+0200\n"
 "PO-Revision-Date: 2015-10-21 00:15+0200\n"
 "Last-Translator: Christian Kirbach <christian.kirbach@gmail.com>\n"
 "Language-Team: German <translation-team-de@lists.sourceforge.net>\n"
@@ -22,118 +22,6 @@
 msgid "format wasn't negotiated before get function"
 msgstr "das Format wurde vor der get-Funktion nicht ausgehandelt"
 
-msgid "default GStreamer sound events audiosink"
-msgstr "Voreingestellte GStreamer Tonereignis-Audioziel"
-
-msgid ""
-"GStreamer can play audio using any number of output elements. Some possible "
-"choices are osssink, pulsesink and alsasink. The audiosink can be a partial "
-"pipeline instead of just one element."
-msgstr ""
-"GStreamer kann Ton mit einer beliebigen Anzahl an Ausgabeelementen "
-"wiedergeben. Einige Wahlmöglichkeiten sind »osssink«, »pulsesink« und "
-"»alsasink«. Das Audioziel kann eine teilweise Weiterleitung anstelle nur "
-"eines einzigen Elements sein."
-
-msgid "description for default GStreamer sound events audiosink"
-msgstr "Beschreibung des voreingestellten GStreamer Tonereignis-Audioziel"
-
-msgid "Describes the selected audiosink element."
-msgstr "Beschreibt das gewählte Audioziel-Element."
-
-msgid "default GStreamer audiosink for Audio/Video Conferencing"
-msgstr "Voreingestelltes GStreamer-Audioziel für Ton- und Videokonferenzen"
-
-msgid ""
-"description for default GStreamer audiosink for Audio/Video Conferencing"
-msgstr ""
-"Beschreibung des voreingestellten GStreamer-Audioziel für Ton- und "
-"Videokonferenzen"
-
-msgid "default GStreamer audiosink for Music and Movies"
-msgstr "Voreingestelltes GStreamer-Audioziel für Musik und Filme"
-
-msgid "description for default GStreamer audiosink for Music and Movies"
-msgstr ""
-"Beschreibung des voreingestellten GStreamer-Audioziel für Musik und Filme"
-
-msgid "default GStreamer videosink"
-msgstr "Voreingestelltes GStreamer-Videoziel"
-
-msgid ""
-"GStreamer can play video using any number of output elements. Some possible "
-"choices are xvimagesink, ximagesink, sdlvideosink and aasink. The videosink "
-"can be a partial pipeline instead of just one element."
-msgstr ""
-"GStreamer kann Video mit einer beliebigen Anzahl an Ausgabeelementen "
-"wiedergeben. Einige Wahlmöglichkeiten sind »xvimagesink«, »ximagesink«, "
-"»sdlvideosink« und »aasink«. Das Videoziel kann eine anteilige Weiterleitung "
-"anstelle eines einzigen Elements sein."
-
-msgid "description for default GStreamer videosink"
-msgstr "Beschreibung des voreingestellten GStreamer-Videoziel"
-
-msgid "Describes the selected videosink element."
-msgstr "Beschreibt das gewählte Videoziel-Element."
-
-msgid "default GStreamer audiosrc"
-msgstr "Voreingestelltes GStreamer-audiosrc"
-
-msgid ""
-"GStreamer can record audio using any number of input elements. Some possible "
-"choices are osssrc, pulsesrc and alsasrc. The audio source can be a partial "
-"pipeline instead of just one element."
-msgstr ""
-"GStreamer kann Ton mit einer beliebigen Anzahl an Eingabeelementen "
-"aufzeichnen. Einige Wahlmöglichkeiten sind »osssrc«, »pulsesrc« und "
-"»alsasrc«. Die Audioquelle kann eine anteilige Weiterleitung anstelle eines "
-"einzigen Elements sein."
-
-msgid "description for default GStreamer audiosrc"
-msgstr "Beschreibung des voreingestellten GStreamer-audiosrc"
-
-msgid "Describes the selected audiosrc element."
-msgstr "Beschreibt das gewählte audiosrc-Element."
-
-msgid "default GStreamer videosrc"
-msgstr "Voreingestelltes GStreamer-videosrc"
-
-msgid ""
-"GStreamer can record video from any number of input elements. Some possible "
-"choices are v4lsrc, v4l2src and videotestsrc. The video source can be a "
-"partial pipeline instead of just one element."
-msgstr ""
-"GStreamer kann Video mit einer beliebigen Anzahl an Eingabeelementen "
-"aufzeichnen. Einige Wahlmöglichkeiten sind »v4lsrc«, »v4l2src« und "
-"»videotestsrc«. Die Videoquelle kann eine anteilige Weiterleitung anstelle "
-"eines einzigen Elements sein."
-
-msgid "description for default GStreamer videosrc"
-msgstr "Beschreibung des voreingestellten GStreamer-videosrc"
-
-msgid "Describes the selected videosrc element."
-msgstr "Beschreibt das gewählte videosrc-Element."
-
-msgid "default GStreamer visualization"
-msgstr "Voreingestellte GStreamer-Visualisierung"
-
-msgid ""
-"GStreamer can put visualization plugins in a pipeline to transform audio "
-"streams in video frames. Some possible choices are goom, goom2k1 and "
-"synaesthesia. The visualization plugin can be a partial pipeline instead of "
-"just one element."
-msgstr ""
-"GStreamer kann Visualisierungs-Plugins in eine Weiterleitung integrieren, um "
-"Audioströme in Videobilder umzuwandeln. Einige Wahlmöglichkeiten sind "
-"»goom«, »goom2k1« und »synaesthesia«. Das Visualisierungs-Plugin kann eine "
-"anteilige Weiterleitung anstelle eines einzigen Elements sein."
-
-msgid "description for default GStreamer visualization"
-msgstr "Beschreibung der voreingestellten GStreamer-Visualisierung"
-
-msgid "Describes the selected visualization element."
-msgstr "Beschreibt das gewählte Visualisierungselement."
-
 # OpenCV ist eine freie Programmbibliothek mit Algorithmen für die Bildverarbeitung und maschinelles Sehen.
 msgid "OpenCV failed to load template image"
 msgstr "OpenCV konnte nicht die Bildvorlage laden"
@@ -259,6 +147,118 @@
 msgid "Couldn't find details for DVB channel %s"
 msgstr "Details zu DVB-Kanal %s konnten nicht gefunden werden"
 
+#~ msgid "default GStreamer sound events audiosink"
+#~ msgstr "Voreingestellte GStreamer Tonereignis-Audioziel"
+
+#~ msgid ""
+#~ "GStreamer can play audio using any number of output elements. Some "
+#~ "possible choices are osssink, pulsesink and alsasink. The audiosink can "
+#~ "be a partial pipeline instead of just one element."
+#~ msgstr ""
+#~ "GStreamer kann Ton mit einer beliebigen Anzahl an Ausgabeelementen "
+#~ "wiedergeben. Einige Wahlmöglichkeiten sind »osssink«, »pulsesink« und "
+#~ "»alsasink«. Das Audioziel kann eine teilweise Weiterleitung anstelle nur "
+#~ "eines einzigen Elements sein."
+
+#~ msgid "description for default GStreamer sound events audiosink"
+#~ msgstr "Beschreibung des voreingestellten GStreamer Tonereignis-Audioziel"
+
+#~ msgid "Describes the selected audiosink element."
+#~ msgstr "Beschreibt das gewählte Audioziel-Element."
+
+#~ msgid "default GStreamer audiosink for Audio/Video Conferencing"
+#~ msgstr "Voreingestelltes GStreamer-Audioziel für Ton- und Videokonferenzen"
+
+#~ msgid ""
+#~ "description for default GStreamer audiosink for Audio/Video Conferencing"
+#~ msgstr ""
+#~ "Beschreibung des voreingestellten GStreamer-Audioziel für Ton- und "
+#~ "Videokonferenzen"
+
+#~ msgid "default GStreamer audiosink for Music and Movies"
+#~ msgstr "Voreingestelltes GStreamer-Audioziel für Musik und Filme"
+
+#~ msgid "description for default GStreamer audiosink for Music and Movies"
+#~ msgstr ""
+#~ "Beschreibung des voreingestellten GStreamer-Audioziel für Musik und Filme"
+
+#~ msgid "default GStreamer videosink"
+#~ msgstr "Voreingestelltes GStreamer-Videoziel"
+
+#~ msgid ""
+#~ "GStreamer can play video using any number of output elements. Some "
+#~ "possible choices are xvimagesink, ximagesink, sdlvideosink and aasink. "
+#~ "The videosink can be a partial pipeline instead of just one element."
+#~ msgstr ""
+#~ "GStreamer kann Video mit einer beliebigen Anzahl an Ausgabeelementen "
+#~ "wiedergeben. Einige Wahlmöglichkeiten sind »xvimagesink«, »ximagesink«, "
+#~ "»sdlvideosink« und »aasink«. Das Videoziel kann eine anteilige "
+#~ "Weiterleitung anstelle eines einzigen Elements sein."
+
+#~ msgid "description for default GStreamer videosink"
+#~ msgstr "Beschreibung des voreingestellten GStreamer-Videoziel"
+
+#~ msgid "Describes the selected videosink element."
+#~ msgstr "Beschreibt das gewählte Videoziel-Element."
+
+#~ msgid "default GStreamer audiosrc"
+#~ msgstr "Voreingestelltes GStreamer-audiosrc"
+
+#~ msgid ""
+#~ "GStreamer can record audio using any number of input elements. Some "
+#~ "possible choices are osssrc, pulsesrc and alsasrc. The audio source can "
+#~ "be a partial pipeline instead of just one element."
+#~ msgstr ""
+#~ "GStreamer kann Ton mit einer beliebigen Anzahl an Eingabeelementen "
+#~ "aufzeichnen. Einige Wahlmöglichkeiten sind »osssrc«, »pulsesrc« und "
+#~ "»alsasrc«. Die Audioquelle kann eine anteilige Weiterleitung anstelle "
+#~ "eines einzigen Elements sein."
+
+#~ msgid "description for default GStreamer audiosrc"
+#~ msgstr "Beschreibung des voreingestellten GStreamer-audiosrc"
+
+#~ msgid "Describes the selected audiosrc element."
+#~ msgstr "Beschreibt das gewählte audiosrc-Element."
+
+#~ msgid "default GStreamer videosrc"
+#~ msgstr "Voreingestelltes GStreamer-videosrc"
+
+#~ msgid ""
+#~ "GStreamer can record video from any number of input elements. Some "
+#~ "possible choices are v4lsrc, v4l2src and videotestsrc. The video source "
+#~ "can be a partial pipeline instead of just one element."
+#~ msgstr ""
+#~ "GStreamer kann Video mit einer beliebigen Anzahl an Eingabeelementen "
+#~ "aufzeichnen. Einige Wahlmöglichkeiten sind »v4lsrc«, »v4l2src« und "
+#~ "»videotestsrc«. Die Videoquelle kann eine anteilige Weiterleitung "
+#~ "anstelle eines einzigen Elements sein."
+
+#~ msgid "description for default GStreamer videosrc"
+#~ msgstr "Beschreibung des voreingestellten GStreamer-videosrc"
+
+#~ msgid "Describes the selected videosrc element."
+#~ msgstr "Beschreibt das gewählte videosrc-Element."
+
+#~ msgid "default GStreamer visualization"
+#~ msgstr "Voreingestellte GStreamer-Visualisierung"
+
+#~ msgid ""
+#~ "GStreamer can put visualization plugins in a pipeline to transform audio "
+#~ "streams in video frames. Some possible choices are goom, goom2k1 and "
+#~ "synaesthesia. The visualization plugin can be a partial pipeline instead "
+#~ "of just one element."
+#~ msgstr ""
+#~ "GStreamer kann Visualisierungs-Plugins in eine Weiterleitung integrieren, "
+#~ "um Audioströme in Videobilder umzuwandeln. Einige Wahlmöglichkeiten sind "
+#~ "»goom«, »goom2k1« und »synaesthesia«. Das Visualisierungs-Plugin kann "
+#~ "eine anteilige Weiterleitung anstelle eines einzigen Elements sein."
+
+#~ msgid "description for default GStreamer visualization"
+#~ msgstr "Beschreibung der voreingestellten GStreamer-Visualisierung"
+
+#~ msgid "Describes the selected visualization element."
+#~ msgstr "Beschreibt das gewählte Visualisierungselement."
+
 #~ msgid "Couldn't get the Manifest's URI"
 #~ msgstr "Adresse der Frachtliste konnte nicht ermittelt werden"
 
diff --git a/po/el.gmo b/po/el.gmo
index 922bf3d..d97ead7 100644
--- a/po/el.gmo
+++ b/po/el.gmo
Binary files differ
diff --git a/po/el.po b/po/el.po
index c203217..e2da65f 100644
--- a/po/el.po
+++ b/po/el.po
@@ -9,7 +9,7 @@
 msgstr ""
 "Project-Id-Version: gst-plugins-bad 0.10.21.2\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2016-01-20 14:17+0200\n"
+"POT-Creation-Date: 2016-03-15 11:41+0200\n"
 "PO-Revision-Date: 2012-05-05 19:17+0100\n"
 "Last-Translator: Savvas Radevic <vicedar@gmail.com>\n"
 "Language-Team: Greek <team@lists.gnome.gr>\n"
@@ -22,95 +22,6 @@
 msgid "format wasn't negotiated before get function"
 msgstr ""
 
-msgid "default GStreamer sound events audiosink"
-msgstr ""
-
-msgid ""
-"GStreamer can play audio using any number of output elements. Some possible "
-"choices are osssink, pulsesink and alsasink. The audiosink can be a partial "
-"pipeline instead of just one element."
-msgstr ""
-
-msgid "description for default GStreamer sound events audiosink"
-msgstr ""
-
-msgid "Describes the selected audiosink element."
-msgstr ""
-
-msgid "default GStreamer audiosink for Audio/Video Conferencing"
-msgstr ""
-
-msgid ""
-"description for default GStreamer audiosink for Audio/Video Conferencing"
-msgstr ""
-
-msgid "default GStreamer audiosink for Music and Movies"
-msgstr ""
-
-msgid "description for default GStreamer audiosink for Music and Movies"
-msgstr ""
-
-msgid "default GStreamer videosink"
-msgstr ""
-
-msgid ""
-"GStreamer can play video using any number of output elements. Some possible "
-"choices are xvimagesink, ximagesink, sdlvideosink and aasink. The videosink "
-"can be a partial pipeline instead of just one element."
-msgstr ""
-
-msgid "description for default GStreamer videosink"
-msgstr ""
-
-msgid "Describes the selected videosink element."
-msgstr ""
-
-msgid "default GStreamer audiosrc"
-msgstr ""
-
-msgid ""
-"GStreamer can record audio using any number of input elements. Some possible "
-"choices are osssrc, pulsesrc and alsasrc. The audio source can be a partial "
-"pipeline instead of just one element."
-msgstr ""
-
-msgid "description for default GStreamer audiosrc"
-msgstr ""
-
-msgid "Describes the selected audiosrc element."
-msgstr ""
-
-msgid "default GStreamer videosrc"
-msgstr ""
-
-msgid ""
-"GStreamer can record video from any number of input elements. Some possible "
-"choices are v4lsrc, v4l2src and videotestsrc. The video source can be a "
-"partial pipeline instead of just one element."
-msgstr ""
-
-msgid "description for default GStreamer videosrc"
-msgstr ""
-
-msgid "Describes the selected videosrc element."
-msgstr ""
-
-msgid "default GStreamer visualization"
-msgstr ""
-
-msgid ""
-"GStreamer can put visualization plugins in a pipeline to transform audio "
-"streams in video frames. Some possible choices are goom, goom2k1 and "
-"synaesthesia. The visualization plugin can be a partial pipeline instead of "
-"just one element."
-msgstr ""
-
-msgid "description for default GStreamer visualization"
-msgstr ""
-
-msgid "Describes the selected visualization element."
-msgstr ""
-
 msgid "OpenCV failed to load template image"
 msgstr ""
 
diff --git a/po/en_GB.gmo b/po/en_GB.gmo
index 1cf2e90..d3bbe5e 100644
--- a/po/en_GB.gmo
+++ b/po/en_GB.gmo
Binary files differ
diff --git a/po/en_GB.po b/po/en_GB.po
index 32c2b5a..a5333e1 100644
--- a/po/en_GB.po
+++ b/po/en_GB.po
@@ -6,7 +6,7 @@
 msgstr ""
 "Project-Id-Version: gst-plugins 0.8.1\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2016-01-20 14:17+0200\n"
+"POT-Creation-Date: 2016-03-15 11:41+0200\n"
 "PO-Revision-Date: 2004-04-26 10:41-0400\n"
 "Last-Translator: Gareth Owen <gowen72@yahoo.com>\n"
 "Language-Team: English (British) <en_gb@li.org>\n"
@@ -18,95 +18,6 @@
 msgid "format wasn't negotiated before get function"
 msgstr ""
 
-msgid "default GStreamer sound events audiosink"
-msgstr ""
-
-msgid ""
-"GStreamer can play audio using any number of output elements. Some possible "
-"choices are osssink, pulsesink and alsasink. The audiosink can be a partial "
-"pipeline instead of just one element."
-msgstr ""
-
-msgid "description for default GStreamer sound events audiosink"
-msgstr ""
-
-msgid "Describes the selected audiosink element."
-msgstr ""
-
-msgid "default GStreamer audiosink for Audio/Video Conferencing"
-msgstr ""
-
-msgid ""
-"description for default GStreamer audiosink for Audio/Video Conferencing"
-msgstr ""
-
-msgid "default GStreamer audiosink for Music and Movies"
-msgstr ""
-
-msgid "description for default GStreamer audiosink for Music and Movies"
-msgstr ""
-
-msgid "default GStreamer videosink"
-msgstr ""
-
-msgid ""
-"GStreamer can play video using any number of output elements. Some possible "
-"choices are xvimagesink, ximagesink, sdlvideosink and aasink. The videosink "
-"can be a partial pipeline instead of just one element."
-msgstr ""
-
-msgid "description for default GStreamer videosink"
-msgstr ""
-
-msgid "Describes the selected videosink element."
-msgstr ""
-
-msgid "default GStreamer audiosrc"
-msgstr ""
-
-msgid ""
-"GStreamer can record audio using any number of input elements. Some possible "
-"choices are osssrc, pulsesrc and alsasrc. The audio source can be a partial "
-"pipeline instead of just one element."
-msgstr ""
-
-msgid "description for default GStreamer audiosrc"
-msgstr ""
-
-msgid "Describes the selected audiosrc element."
-msgstr ""
-
-msgid "default GStreamer videosrc"
-msgstr ""
-
-msgid ""
-"GStreamer can record video from any number of input elements. Some possible "
-"choices are v4lsrc, v4l2src and videotestsrc. The video source can be a "
-"partial pipeline instead of just one element."
-msgstr ""
-
-msgid "description for default GStreamer videosrc"
-msgstr ""
-
-msgid "Describes the selected videosrc element."
-msgstr ""
-
-msgid "default GStreamer visualization"
-msgstr ""
-
-msgid ""
-"GStreamer can put visualization plugins in a pipeline to transform audio "
-"streams in video frames. Some possible choices are goom, goom2k1 and "
-"synaesthesia. The visualization plugin can be a partial pipeline instead of "
-"just one element."
-msgstr ""
-
-msgid "description for default GStreamer visualization"
-msgstr ""
-
-msgid "Describes the selected visualization element."
-msgstr ""
-
 msgid "OpenCV failed to load template image"
 msgstr ""
 
diff --git a/po/eo.gmo b/po/eo.gmo
index dae2921..d40cf4b 100644
--- a/po/eo.gmo
+++ b/po/eo.gmo
Binary files differ
diff --git a/po/eo.po b/po/eo.po
index 305a084..ff3c649 100644
--- a/po/eo.po
+++ b/po/eo.po
@@ -7,7 +7,7 @@
 msgstr ""
 "Project-Id-Version: gst-plugins-bad 0.10.21.2\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2016-01-20 14:17+0200\n"
+"POT-Creation-Date: 2016-03-15 11:41+0200\n"
 "PO-Revision-Date: 2011-06-04 22:18+0200\n"
 "Last-Translator: Kristjan SCHMIDT <kristjan.schmidt@googlemail.com>\n"
 "Language-Team: Esperanto <translation-team-eo@lists.sourceforge.net>\n"
@@ -20,95 +20,6 @@
 msgid "format wasn't negotiated before get function"
 msgstr ""
 
-msgid "default GStreamer sound events audiosink"
-msgstr ""
-
-msgid ""
-"GStreamer can play audio using any number of output elements. Some possible "
-"choices are osssink, pulsesink and alsasink. The audiosink can be a partial "
-"pipeline instead of just one element."
-msgstr ""
-
-msgid "description for default GStreamer sound events audiosink"
-msgstr ""
-
-msgid "Describes the selected audiosink element."
-msgstr ""
-
-msgid "default GStreamer audiosink for Audio/Video Conferencing"
-msgstr ""
-
-msgid ""
-"description for default GStreamer audiosink for Audio/Video Conferencing"
-msgstr ""
-
-msgid "default GStreamer audiosink for Music and Movies"
-msgstr ""
-
-msgid "description for default GStreamer audiosink for Music and Movies"
-msgstr ""
-
-msgid "default GStreamer videosink"
-msgstr ""
-
-msgid ""
-"GStreamer can play video using any number of output elements. Some possible "
-"choices are xvimagesink, ximagesink, sdlvideosink and aasink. The videosink "
-"can be a partial pipeline instead of just one element."
-msgstr ""
-
-msgid "description for default GStreamer videosink"
-msgstr ""
-
-msgid "Describes the selected videosink element."
-msgstr ""
-
-msgid "default GStreamer audiosrc"
-msgstr ""
-
-msgid ""
-"GStreamer can record audio using any number of input elements. Some possible "
-"choices are osssrc, pulsesrc and alsasrc. The audio source can be a partial "
-"pipeline instead of just one element."
-msgstr ""
-
-msgid "description for default GStreamer audiosrc"
-msgstr ""
-
-msgid "Describes the selected audiosrc element."
-msgstr ""
-
-msgid "default GStreamer videosrc"
-msgstr ""
-
-msgid ""
-"GStreamer can record video from any number of input elements. Some possible "
-"choices are v4lsrc, v4l2src and videotestsrc. The video source can be a "
-"partial pipeline instead of just one element."
-msgstr ""
-
-msgid "description for default GStreamer videosrc"
-msgstr ""
-
-msgid "Describes the selected videosrc element."
-msgstr ""
-
-msgid "default GStreamer visualization"
-msgstr ""
-
-msgid ""
-"GStreamer can put visualization plugins in a pipeline to transform audio "
-"streams in video frames. Some possible choices are goom, goom2k1 and "
-"synaesthesia. The visualization plugin can be a partial pipeline instead of "
-"just one element."
-msgstr ""
-
-msgid "description for default GStreamer visualization"
-msgstr ""
-
-msgid "Describes the selected visualization element."
-msgstr ""
-
 msgid "OpenCV failed to load template image"
 msgstr ""
 
diff --git a/po/es.gmo b/po/es.gmo
index 3cd97b7..75324ae 100644
--- a/po/es.gmo
+++ b/po/es.gmo
Binary files differ
diff --git a/po/es.po b/po/es.po
index 477aae1..c733ae4 100644
--- a/po/es.po
+++ b/po/es.po
@@ -7,7 +7,7 @@
 msgstr ""
 "Project-Id-Version: gst-plugins-bad 0.10.21.2\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2016-01-20 14:17+0200\n"
+"POT-Creation-Date: 2016-03-15 11:41+0200\n"
 "PO-Revision-Date: 2011-10-02 15:47+0200\n"
 "Last-Translator: Jorge González González <aloriel@gmail.com>\n"
 "Language-Team: Spanish <es@li.org>\n"
@@ -20,95 +20,6 @@
 msgid "format wasn't negotiated before get function"
 msgstr ""
 
-msgid "default GStreamer sound events audiosink"
-msgstr ""
-
-msgid ""
-"GStreamer can play audio using any number of output elements. Some possible "
-"choices are osssink, pulsesink and alsasink. The audiosink can be a partial "
-"pipeline instead of just one element."
-msgstr ""
-
-msgid "description for default GStreamer sound events audiosink"
-msgstr ""
-
-msgid "Describes the selected audiosink element."
-msgstr ""
-
-msgid "default GStreamer audiosink for Audio/Video Conferencing"
-msgstr ""
-
-msgid ""
-"description for default GStreamer audiosink for Audio/Video Conferencing"
-msgstr ""
-
-msgid "default GStreamer audiosink for Music and Movies"
-msgstr ""
-
-msgid "description for default GStreamer audiosink for Music and Movies"
-msgstr ""
-
-msgid "default GStreamer videosink"
-msgstr ""
-
-msgid ""
-"GStreamer can play video using any number of output elements. Some possible "
-"choices are xvimagesink, ximagesink, sdlvideosink and aasink. The videosink "
-"can be a partial pipeline instead of just one element."
-msgstr ""
-
-msgid "description for default GStreamer videosink"
-msgstr ""
-
-msgid "Describes the selected videosink element."
-msgstr ""
-
-msgid "default GStreamer audiosrc"
-msgstr ""
-
-msgid ""
-"GStreamer can record audio using any number of input elements. Some possible "
-"choices are osssrc, pulsesrc and alsasrc. The audio source can be a partial "
-"pipeline instead of just one element."
-msgstr ""
-
-msgid "description for default GStreamer audiosrc"
-msgstr ""
-
-msgid "Describes the selected audiosrc element."
-msgstr ""
-
-msgid "default GStreamer videosrc"
-msgstr ""
-
-msgid ""
-"GStreamer can record video from any number of input elements. Some possible "
-"choices are v4lsrc, v4l2src and videotestsrc. The video source can be a "
-"partial pipeline instead of just one element."
-msgstr ""
-
-msgid "description for default GStreamer videosrc"
-msgstr ""
-
-msgid "Describes the selected videosrc element."
-msgstr ""
-
-msgid "default GStreamer visualization"
-msgstr ""
-
-msgid ""
-"GStreamer can put visualization plugins in a pipeline to transform audio "
-"streams in video frames. Some possible choices are goom, goom2k1 and "
-"synaesthesia. The visualization plugin can be a partial pipeline instead of "
-"just one element."
-msgstr ""
-
-msgid "description for default GStreamer visualization"
-msgstr ""
-
-msgid "Describes the selected visualization element."
-msgstr ""
-
 msgid "OpenCV failed to load template image"
 msgstr ""
 
diff --git a/po/eu.gmo b/po/eu.gmo
index d28a7a1..1774ddb 100644
--- a/po/eu.gmo
+++ b/po/eu.gmo
Binary files differ
diff --git a/po/eu.po b/po/eu.po
index ad278e6..725ad2d 100644
--- a/po/eu.po
+++ b/po/eu.po
@@ -8,7 +8,7 @@
 msgstr ""
 "Project-Id-Version: gst-plugins-bad-0.10.17.2\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2016-01-20 14:17+0200\n"
+"POT-Creation-Date: 2016-03-15 11:41+0200\n"
 "PO-Revision-Date: 2010-03-25 12:30+0100\n"
 "Last-Translator: Mikel Olasagasti Uranga <hey_neken@mundurat.net>\n"
 "Language-Team: Basque <translation-team-eu@lists.sourceforge.net>\n"
@@ -22,95 +22,6 @@
 msgid "format wasn't negotiated before get function"
 msgstr ""
 
-msgid "default GStreamer sound events audiosink"
-msgstr ""
-
-msgid ""
-"GStreamer can play audio using any number of output elements. Some possible "
-"choices are osssink, pulsesink and alsasink. The audiosink can be a partial "
-"pipeline instead of just one element."
-msgstr ""
-
-msgid "description for default GStreamer sound events audiosink"
-msgstr ""
-
-msgid "Describes the selected audiosink element."
-msgstr ""
-
-msgid "default GStreamer audiosink for Audio/Video Conferencing"
-msgstr ""
-
-msgid ""
-"description for default GStreamer audiosink for Audio/Video Conferencing"
-msgstr ""
-
-msgid "default GStreamer audiosink for Music and Movies"
-msgstr ""
-
-msgid "description for default GStreamer audiosink for Music and Movies"
-msgstr ""
-
-msgid "default GStreamer videosink"
-msgstr ""
-
-msgid ""
-"GStreamer can play video using any number of output elements. Some possible "
-"choices are xvimagesink, ximagesink, sdlvideosink and aasink. The videosink "
-"can be a partial pipeline instead of just one element."
-msgstr ""
-
-msgid "description for default GStreamer videosink"
-msgstr ""
-
-msgid "Describes the selected videosink element."
-msgstr ""
-
-msgid "default GStreamer audiosrc"
-msgstr ""
-
-msgid ""
-"GStreamer can record audio using any number of input elements. Some possible "
-"choices are osssrc, pulsesrc and alsasrc. The audio source can be a partial "
-"pipeline instead of just one element."
-msgstr ""
-
-msgid "description for default GStreamer audiosrc"
-msgstr ""
-
-msgid "Describes the selected audiosrc element."
-msgstr ""
-
-msgid "default GStreamer videosrc"
-msgstr ""
-
-msgid ""
-"GStreamer can record video from any number of input elements. Some possible "
-"choices are v4lsrc, v4l2src and videotestsrc. The video source can be a "
-"partial pipeline instead of just one element."
-msgstr ""
-
-msgid "description for default GStreamer videosrc"
-msgstr ""
-
-msgid "Describes the selected videosrc element."
-msgstr ""
-
-msgid "default GStreamer visualization"
-msgstr ""
-
-msgid ""
-"GStreamer can put visualization plugins in a pipeline to transform audio "
-"streams in video frames. Some possible choices are goom, goom2k1 and "
-"synaesthesia. The visualization plugin can be a partial pipeline instead of "
-"just one element."
-msgstr ""
-
-msgid "description for default GStreamer visualization"
-msgstr ""
-
-msgid "Describes the selected visualization element."
-msgstr ""
-
 msgid "OpenCV failed to load template image"
 msgstr ""
 
diff --git a/po/fi.gmo b/po/fi.gmo
index 62d9ee2..97848a0 100644
--- a/po/fi.gmo
+++ b/po/fi.gmo
Binary files differ
diff --git a/po/fi.po b/po/fi.po
index 3b20a30..608306f 100644
--- a/po/fi.po
+++ b/po/fi.po
@@ -11,7 +11,7 @@
 msgstr ""
 "Project-Id-Version: gst-plugins-bad 0.10.13.2\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2016-01-20 14:17+0200\n"
+"POT-Creation-Date: 2016-03-15 11:41+0200\n"
 "PO-Revision-Date: 2009-08-12 22:13+0300\n"
 "Last-Translator: Tommi Vainikainen <Tommi.Vainikainen@iki.fi>\n"
 "Language-Team: Finnish <translation-team-fi@lists.sourceforge.net>\n"
@@ -25,95 +25,6 @@
 msgid "format wasn't negotiated before get function"
 msgstr ""
 
-msgid "default GStreamer sound events audiosink"
-msgstr ""
-
-msgid ""
-"GStreamer can play audio using any number of output elements. Some possible "
-"choices are osssink, pulsesink and alsasink. The audiosink can be a partial "
-"pipeline instead of just one element."
-msgstr ""
-
-msgid "description for default GStreamer sound events audiosink"
-msgstr ""
-
-msgid "Describes the selected audiosink element."
-msgstr ""
-
-msgid "default GStreamer audiosink for Audio/Video Conferencing"
-msgstr ""
-
-msgid ""
-"description for default GStreamer audiosink for Audio/Video Conferencing"
-msgstr ""
-
-msgid "default GStreamer audiosink for Music and Movies"
-msgstr ""
-
-msgid "description for default GStreamer audiosink for Music and Movies"
-msgstr ""
-
-msgid "default GStreamer videosink"
-msgstr ""
-
-msgid ""
-"GStreamer can play video using any number of output elements. Some possible "
-"choices are xvimagesink, ximagesink, sdlvideosink and aasink. The videosink "
-"can be a partial pipeline instead of just one element."
-msgstr ""
-
-msgid "description for default GStreamer videosink"
-msgstr ""
-
-msgid "Describes the selected videosink element."
-msgstr ""
-
-msgid "default GStreamer audiosrc"
-msgstr ""
-
-msgid ""
-"GStreamer can record audio using any number of input elements. Some possible "
-"choices are osssrc, pulsesrc and alsasrc. The audio source can be a partial "
-"pipeline instead of just one element."
-msgstr ""
-
-msgid "description for default GStreamer audiosrc"
-msgstr ""
-
-msgid "Describes the selected audiosrc element."
-msgstr ""
-
-msgid "default GStreamer videosrc"
-msgstr ""
-
-msgid ""
-"GStreamer can record video from any number of input elements. Some possible "
-"choices are v4lsrc, v4l2src and videotestsrc. The video source can be a "
-"partial pipeline instead of just one element."
-msgstr ""
-
-msgid "description for default GStreamer videosrc"
-msgstr ""
-
-msgid "Describes the selected videosrc element."
-msgstr ""
-
-msgid "default GStreamer visualization"
-msgstr ""
-
-msgid ""
-"GStreamer can put visualization plugins in a pipeline to transform audio "
-"streams in video frames. Some possible choices are goom, goom2k1 and "
-"synaesthesia. The visualization plugin can be a partial pipeline instead of "
-"just one element."
-msgstr ""
-
-msgid "description for default GStreamer visualization"
-msgstr ""
-
-msgid "Describes the selected visualization element."
-msgstr ""
-
 msgid "OpenCV failed to load template image"
 msgstr ""
 
diff --git a/po/fr.gmo b/po/fr.gmo
index 11517ee..696fb42 100644
--- a/po/fr.gmo
+++ b/po/fr.gmo
Binary files differ
diff --git a/po/fr.po b/po/fr.po
index c794b2e..d46b8e9 100644
--- a/po/fr.po
+++ b/po/fr.po
@@ -7,10 +7,10 @@
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: gst-plugins-bad 1.4.1\n"
+"Project-Id-Version: gst-plugins-bad 1.7.2\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2016-01-20 14:17+0200\n"
-"PO-Revision-Date: 2015-04-26 19:24+0200\n"
+"POT-Creation-Date: 2016-03-15 11:41+0200\n"
+"PO-Revision-Date: 2016-02-20 16:27+0100\n"
 "Last-Translator: Stéphane Aulery <lkppo@free.fr>\n"
 "Language-Team: French <traduc@traduc.org>\n"
 "Language: fr\n"
@@ -21,104 +21,15 @@
 msgid "format wasn't negotiated before get function"
 msgstr "Format non négocié avant l'appel de la fonction get"
 
-msgid "default GStreamer sound events audiosink"
-msgstr "sons par défaut audiosink des événements GStreamer"
-
-msgid ""
-"GStreamer can play audio using any number of output elements. Some possible "
-"choices are osssink, pulsesink and alsasink. The audiosink can be a partial "
-"pipeline instead of just one element."
-msgstr ""
-
-msgid "description for default GStreamer sound events audiosink"
-msgstr "description des sons par défaut audiosink des événements GStreamer"
-
-msgid "Describes the selected audiosink element."
-msgstr ""
-
-msgid "default GStreamer audiosink for Audio/Video Conferencing"
-msgstr ""
-
-msgid ""
-"description for default GStreamer audiosink for Audio/Video Conferencing"
-msgstr ""
-
-msgid "default GStreamer audiosink for Music and Movies"
-msgstr ""
-
-msgid "description for default GStreamer audiosink for Music and Movies"
-msgstr ""
-
-msgid "default GStreamer videosink"
-msgstr "videosink GStreamer par défaut"
-
-msgid ""
-"GStreamer can play video using any number of output elements. Some possible "
-"choices are xvimagesink, ximagesink, sdlvideosink and aasink. The videosink "
-"can be a partial pipeline instead of just one element."
-msgstr ""
-
-msgid "description for default GStreamer videosink"
-msgstr ""
-
-msgid "Describes the selected videosink element."
-msgstr ""
-
-msgid "default GStreamer audiosrc"
-msgstr "audiosrc GStreamer par défaut"
-
-msgid ""
-"GStreamer can record audio using any number of input elements. Some possible "
-"choices are osssrc, pulsesrc and alsasrc. The audio source can be a partial "
-"pipeline instead of just one element."
-msgstr ""
-
-msgid "description for default GStreamer audiosrc"
-msgstr ""
-
-msgid "Describes the selected audiosrc element."
-msgstr ""
-
-msgid "default GStreamer videosrc"
-msgstr "videosrc GStreamer par défaut"
-
-msgid ""
-"GStreamer can record video from any number of input elements. Some possible "
-"choices are v4lsrc, v4l2src and videotestsrc. The video source can be a "
-"partial pipeline instead of just one element."
-msgstr ""
-
-msgid "description for default GStreamer videosrc"
-msgstr ""
-
-msgid "Describes the selected videosrc element."
-msgstr ""
-
-msgid "default GStreamer visualization"
-msgstr "aperçu GStreamer par défaut"
-
-msgid ""
-"GStreamer can put visualization plugins in a pipeline to transform audio "
-"streams in video frames. Some possible choices are goom, goom2k1 and "
-"synaesthesia. The visualization plugin can be a partial pipeline instead of "
-"just one element."
-msgstr ""
-
-msgid "description for default GStreamer visualization"
-msgstr "description de l’aperçu GStreamer par défaut"
-
-msgid "Describes the selected visualization element."
-msgstr ""
-
 msgid "OpenCV failed to load template image"
-msgstr ""
+msgstr "OpenCV n’a pas pu charger l’image modèle"
 
 msgid "Could not read title information for DVD."
 msgstr "Impossible de lire les informations de titre du DVD."
 
 #, c-format
 msgid "Failed to open DVD device '%s'."
-msgstr "Impossible d'ouvrir le périphérique du DVD « %s »."
+msgstr "Impossible d’ouvrir le périphérique du DVD « %s »."
 
 msgid "Failed to set PGC based seeking."
 msgstr "Impossible de définir la recherche basée sur PGC."
@@ -127,23 +38,23 @@
 "Could not read DVD. This may be because the DVD is encrypted and a DVD "
 "decryption library is not installed."
 msgstr ""
-"Impossible de lire le DVD. Il se peut que le DVD soit chiffré et qu'aucune "
-"bibliothèque de déchiffrement DVD ne soit disponible."
+"Impossible de lire le DVD. Il se peut qu’il soit chiffré et qu’aucune "
+"bibliothèque de déchiffrement DVD ne soit installée."
 
 msgid "Could not read DVD."
 msgstr "Impossible de lire le DVD."
 
 msgid "This file contains no playable streams."
-msgstr ""
+msgstr "Ce fichier ne contient aucun flux exploitable."
 
 msgid "Could not open sndfile stream for reading."
-msgstr "Impossible d'ouvrir le fichier snd en lecture."
+msgstr "Impossible d’ouvrir le fichier snd en lecture."
 
 msgid "Could not establish connection to sndio"
 msgstr "Impossible de se connecter à sndio"
 
 msgid "Failed to query sndio capabilities"
-msgstr "Impossible d’interroger les capacités sndio"
+msgstr "Impossible d’interroger les capacités de sndio"
 
 msgid "Could not configure sndio"
 msgstr "Impossible de configurer sndio"
@@ -152,26 +63,29 @@
 msgstr "Impossible de démarrer sndio"
 
 msgid "Internal data flow error."
-msgstr "Erreur interne de flux de données."
+msgstr "Erreur du flux de données interne."
 
 msgid "Generated file has a larger preroll time than its streams duration"
 msgstr ""
+"Le fichier généré a un temps de lancement plus long que la durée du flux"
 
 #, c-format
 msgid "Missing element '%s' - check your GStreamer installation."
-msgstr ""
+msgstr "Élément « %s » manquant — Vérifiez votre installation de GStreamer."
 
 msgid "File location is set to NULL, please set it to a valid filename"
 msgstr ""
+"L’emplacement du fichier est inconnu (NULL), veuillez choisir un nom de "
+"fichier valide"
 
 msgid "Digitalzoom element couldn't be created"
-msgstr ""
+msgstr "L’élément Digitalzoom n’a pu être créé"
 
 msgid "Subpicture format was not configured before data flow"
-msgstr ""
+msgstr "Le format de sous-image n’était pas configuré avant le flux de données"
 
 msgid "Failed to get fragment URL."
-msgstr ""
+msgstr "Échec de la récupération de l’URL de fragment."
 
 msgid "Internal data stream error."
 msgstr "Erreur interne de flux de données."
@@ -180,49 +94,164 @@
 msgstr "Impossible de télécharger les fragments"
 
 msgid "No file name specified for writing."
-msgstr "Aucun nom de fichier indiqué pour l'écriture."
+msgstr "Aucun nom de fichier indiqué en écriture."
 
 #, c-format
 msgid "Given file name \"%s\" can't be converted to local file name encoding."
 msgstr ""
+"Le nom de fichier indiqué « %s » ne peut pas être converti dans l’encodage "
+"local au système de fichier."
 
 #, c-format
 msgid "Could not open file \"%s\" for writing."
-msgstr "Impossible d'ouvrir le fichier « %s » pour l'écriture."
+msgstr "Impossible d’ouvrir le fichier « %s » en écriture."
 
 #, c-format
 msgid "Device \"%s\" does not exist."
-msgstr "Le périphérique « %s » n'existe pas."
+msgstr "Le périphérique « %s » n’existe pas."
 
 #, c-format
 msgid "Could not open frontend device \"%s\"."
-msgstr "Impossible d'ouvrir le périphérique frontal « %s »."
+msgstr "Impossible d’ouvrir le périphérique frontal « %s »."
 
 #, c-format
 msgid "Could not get settings from frontend device \"%s\"."
-msgstr "Impossible d'obtenir les paramètres du périphérique frontal « %s »."
+msgstr "Impossible d’obtenir les paramètres du périphérique frontal « %s »."
 
-#, fuzzy, c-format
+#, c-format
 msgid "Cannot enumerate delivery systems from frontend device \"%s\"."
-msgstr "Impossible d'obtenir les paramètres du périphérique frontal « %s »."
+msgstr ""
+"Impossible d'énumérer les systèmes d’émission du périphérique frontal « %s »."
 
 #, c-format
 msgid "Could not open file \"%s\" for reading."
-msgstr "Impossible d'ouvrir le fichier « %s » en lecture."
+msgstr "Impossible d’ouvrir le fichier « %s » en lecture."
 
 msgid "Couldn't find DVB channel configuration file"
-msgstr ""
+msgstr "Impossible de trouver le fichier de configuration de canal DVB"
 
 #, c-format
 msgid "Couldn't load DVB channel configuration file: %s"
-msgstr ""
+msgstr "Impossible de charger le fichier de configuration de canal DVB : %s"
 
 msgid "DVB channel configuration file doesn't contain any channels"
-msgstr ""
+msgstr "Le fichier de configuration de canal DVB ne contient aucun canal"
 
 #, c-format
 msgid "Couldn't find details for DVB channel %s"
-msgstr ""
+msgstr "Impossible de trouver des informations sur le canal DVB %s"
 
-#~ msgid "Could not write to file \"%s\"."
-#~ msgstr "Impossible d'écrire dans le fichier « %s »."
+#~ msgid "default GStreamer sound events audiosink"
+#~ msgstr "récepteur audio GStreamer par défaut pour les événements sonores"
+
+#~ msgid ""
+#~ "GStreamer can play audio using any number of output elements. Some "
+#~ "possible choices are osssink, pulsesink and alsasink. The audiosink can "
+#~ "be a partial pipeline instead of just one element."
+#~ msgstr ""
+#~ "GStreamer peut lire des sons depuis un nombre quelconque d’éléments en "
+#~ "entrée. Les choix possibles sont osssink, pulsesink et alsasink. Le "
+#~ "source audio peut être un pipeline partiel au lieu d’un élément unique."
+
+#~ msgid "description for default GStreamer sound events audiosink"
+#~ msgstr ""
+#~ "description du récepteur audio GStreamer par défaut pour les événements "
+#~ "sonores"
+
+#~ msgid "Describes the selected audiosink element."
+#~ msgstr "Décrit le récepteur audio sélectionné."
+
+#~ msgid "default GStreamer audiosink for Audio/Video Conferencing"
+#~ msgstr ""
+#~ "récepteur audio GStreamer par défaut pour les confèrences audiovisuelles"
+
+#~ msgid ""
+#~ "description for default GStreamer audiosink for Audio/Video Conferencing"
+#~ msgstr ""
+#~ "description du récepteur audio GStreamer par défaut pour les confèrences "
+#~ "audiovisuelles"
+
+#~ msgid "default GStreamer audiosink for Music and Movies"
+#~ msgstr "récepteur audio GStreamer par défaut pour la musique et les films"
+
+#~ msgid "description for default GStreamer audiosink for Music and Movies"
+#~ msgstr ""
+#~ "description du récepteur audio GStreamer par défaut pour la musique et "
+#~ "les films"
+
+#~ msgid "default GStreamer videosink"
+#~ msgstr "récepteur vidéo GStreamer par défaut"
+
+#~ msgid ""
+#~ "GStreamer can play video using any number of output elements. Some "
+#~ "possible choices are xvimagesink, ximagesink, sdlvideosink and aasink. "
+#~ "The videosink can be a partial pipeline instead of just one element."
+#~ msgstr ""
+#~ "GStreamer peut lire une vidéo depuis un nombre quelconque d’éléments en "
+#~ "entrée. Les choix possibles sont xvimagesink, ximagesink, sdlvideosink et "
+#~ "aasink. Le source vidéo peut être un pipeline partiel au lieu d’un "
+#~ "élément unique."
+
+#~ msgid "description for default GStreamer videosink"
+#~ msgstr "description du récepteur vidéo GStreamer par défaut"
+
+#~ msgid "Describes the selected videosink element."
+#~ msgstr "Décrit le récepteur vidéo sélectionné."
+
+#~ msgid "default GStreamer audiosrc"
+#~ msgstr "source audio GStreamer par défaut"
+
+#~ msgid ""
+#~ "GStreamer can record audio using any number of input elements. Some "
+#~ "possible choices are osssrc, pulsesrc and alsasrc. The audio source can "
+#~ "be a partial pipeline instead of just one element."
+#~ msgstr ""
+#~ "GStreamer peut enregistrer des sons depuis un nombre quelconque "
+#~ "d’éléments en entrée. Les choix possibles sont osssrc, pulsesrc et "
+#~ "alsasrc. Le source audio peut être un pipeline partiel au lieu d’un "
+#~ "élément unique."
+
+#~ msgid "description for default GStreamer audiosrc"
+#~ msgstr "description de la source audio GStreamer par défaut"
+
+#~ msgid "Describes the selected audiosrc element."
+#~ msgstr "Décrit la source audio sélectionnée."
+
+#~ msgid "default GStreamer videosrc"
+#~ msgstr "source vidéo GStreamer par défaut"
+
+#~ msgid ""
+#~ "GStreamer can record video from any number of input elements. Some "
+#~ "possible choices are v4lsrc, v4l2src and videotestsrc. The video source "
+#~ "can be a partial pipeline instead of just one element."
+#~ msgstr ""
+#~ "GStreamer peut enregistrer une vidéo depuis un nombre quelconque "
+#~ "d’éléments en entrée. Les choix possibles sont v4lsrc, v4l2src et "
+#~ "videotestsrc. Le source vidéo peut être un pipeline partiel au lieu d’un "
+#~ "élément unique."
+
+#~ msgid "description for default GStreamer videosrc"
+#~ msgstr "description de la source vidéo GStreamer par défaut"
+
+#~ msgid "Describes the selected videosrc element."
+#~ msgstr "Décrit la source vidéo sélectionnée."
+
+#~ msgid "default GStreamer visualization"
+#~ msgstr "aperçu GStreamer par défaut"
+
+#~ msgid ""
+#~ "GStreamer can put visualization plugins in a pipeline to transform audio "
+#~ "streams in video frames. Some possible choices are goom, goom2k1 and "
+#~ "synaesthesia. The visualization plugin can be a partial pipeline instead "
+#~ "of just one element."
+#~ msgstr ""
+#~ "GStreamer peut mettre les extensions d’aperçu dans un pipeline pour "
+#~ "transformer les flux audios en frames vidéo. Les choix possibles sont "
+#~ "goom, goom2k1 et synaesthesia. L’extension d’aperçu peut être un pipeline "
+#~ "partiel au lieu d’un élément unique."
+
+#~ msgid "description for default GStreamer visualization"
+#~ msgstr "description de l’aperçu GStreamer par défaut"
+
+#~ msgid "Describes the selected visualization element."
+#~ msgstr "Décrit l’élément d’aperçu sélectionné."
diff --git a/po/gl.gmo b/po/gl.gmo
index 1da54e4..f534a0b 100644
--- a/po/gl.gmo
+++ b/po/gl.gmo
Binary files differ
diff --git a/po/gl.po b/po/gl.po
index 10a4068..a0de78d 100644
--- a/po/gl.po
+++ b/po/gl.po
@@ -8,7 +8,7 @@
 msgstr ""
 "Project-Id-Version: gst-plugins-bad 0.10.21.2\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2016-01-20 14:17+0200\n"
+"POT-Creation-Date: 2016-03-15 11:41+0200\n"
 "PO-Revision-Date: 2011-09-05 12:50+0200\n"
 "Last-Translator: Fran Dieguez <frandieguez@ubuntu.com>\n"
 "Language-Team: Galician <proxecto@trasno.net>\n"
@@ -22,95 +22,6 @@
 msgid "format wasn't negotiated before get function"
 msgstr ""
 
-msgid "default GStreamer sound events audiosink"
-msgstr ""
-
-msgid ""
-"GStreamer can play audio using any number of output elements. Some possible "
-"choices are osssink, pulsesink and alsasink. The audiosink can be a partial "
-"pipeline instead of just one element."
-msgstr ""
-
-msgid "description for default GStreamer sound events audiosink"
-msgstr ""
-
-msgid "Describes the selected audiosink element."
-msgstr ""
-
-msgid "default GStreamer audiosink for Audio/Video Conferencing"
-msgstr ""
-
-msgid ""
-"description for default GStreamer audiosink for Audio/Video Conferencing"
-msgstr ""
-
-msgid "default GStreamer audiosink for Music and Movies"
-msgstr ""
-
-msgid "description for default GStreamer audiosink for Music and Movies"
-msgstr ""
-
-msgid "default GStreamer videosink"
-msgstr ""
-
-msgid ""
-"GStreamer can play video using any number of output elements. Some possible "
-"choices are xvimagesink, ximagesink, sdlvideosink and aasink. The videosink "
-"can be a partial pipeline instead of just one element."
-msgstr ""
-
-msgid "description for default GStreamer videosink"
-msgstr ""
-
-msgid "Describes the selected videosink element."
-msgstr ""
-
-msgid "default GStreamer audiosrc"
-msgstr ""
-
-msgid ""
-"GStreamer can record audio using any number of input elements. Some possible "
-"choices are osssrc, pulsesrc and alsasrc. The audio source can be a partial "
-"pipeline instead of just one element."
-msgstr ""
-
-msgid "description for default GStreamer audiosrc"
-msgstr ""
-
-msgid "Describes the selected audiosrc element."
-msgstr ""
-
-msgid "default GStreamer videosrc"
-msgstr ""
-
-msgid ""
-"GStreamer can record video from any number of input elements. Some possible "
-"choices are v4lsrc, v4l2src and videotestsrc. The video source can be a "
-"partial pipeline instead of just one element."
-msgstr ""
-
-msgid "description for default GStreamer videosrc"
-msgstr ""
-
-msgid "Describes the selected videosrc element."
-msgstr ""
-
-msgid "default GStreamer visualization"
-msgstr ""
-
-msgid ""
-"GStreamer can put visualization plugins in a pipeline to transform audio "
-"streams in video frames. Some possible choices are goom, goom2k1 and "
-"synaesthesia. The visualization plugin can be a partial pipeline instead of "
-"just one element."
-msgstr ""
-
-msgid "description for default GStreamer visualization"
-msgstr ""
-
-msgid "Describes the selected visualization element."
-msgstr ""
-
 msgid "OpenCV failed to load template image"
 msgstr ""
 
diff --git a/po/gst-plugins-bad-1.0.pot b/po/gst-plugins-bad-1.0.pot
index 0600280..e9aa7ea 100644
--- a/po/gst-plugins-bad-1.0.pot
+++ b/po/gst-plugins-bad-1.0.pot
@@ -5,9 +5,9 @@
 #, fuzzy
 msgid ""
 msgstr ""
-"Project-Id-Version: gst-plugins-bad 1.6.3\n"
+"Project-Id-Version: gst-plugins-bad 1.7.91\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2016-01-20 14:17+0200\n"
+"POT-Creation-Date: 2016-03-15 11:41+0200\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
@@ -16,128 +16,11 @@
 "Content-Type: text/plain; charset=CHARSET\n"
 "Content-Transfer-Encoding: 8bit\n"
 
-#: ext/gl/gstgltestsrc.c:673
+#: ext/gl/gstgltestsrc.c:680
 msgid "format wasn't negotiated before get function"
 msgstr ""
 
-#: ext/gsettings/org.freedesktop.gstreamer.default-elements.gschema.xml.in:5
-msgid "default GStreamer sound events audiosink"
-msgstr ""
-
-#: ext/gsettings/org.freedesktop.gstreamer.default-elements.gschema.xml.in:6
-#: ext/gsettings/org.freedesktop.gstreamer.default-elements.gschema.xml.in:19
-#: ext/gsettings/org.freedesktop.gstreamer.default-elements.gschema.xml.in:32
-msgid ""
-"GStreamer can play audio using any number of output elements. Some possible "
-"choices are osssink, pulsesink and alsasink. The audiosink can be a partial "
-"pipeline instead of just one element."
-msgstr ""
-
-#: ext/gsettings/org.freedesktop.gstreamer.default-elements.gschema.xml.in:13
-msgid "description for default GStreamer sound events audiosink"
-msgstr ""
-
-#: ext/gsettings/org.freedesktop.gstreamer.default-elements.gschema.xml.in:14
-#: ext/gsettings/org.freedesktop.gstreamer.default-elements.gschema.xml.in:27
-#: ext/gsettings/org.freedesktop.gstreamer.default-elements.gschema.xml.in:40
-msgid "Describes the selected audiosink element."
-msgstr ""
-
-#: ext/gsettings/org.freedesktop.gstreamer.default-elements.gschema.xml.in:18
-msgid "default GStreamer audiosink for Audio/Video Conferencing"
-msgstr ""
-
-#: ext/gsettings/org.freedesktop.gstreamer.default-elements.gschema.xml.in:26
-msgid ""
-"description for default GStreamer audiosink for Audio/Video Conferencing"
-msgstr ""
-
-#: ext/gsettings/org.freedesktop.gstreamer.default-elements.gschema.xml.in:31
-msgid "default GStreamer audiosink for Music and Movies"
-msgstr ""
-
-#: ext/gsettings/org.freedesktop.gstreamer.default-elements.gschema.xml.in:39
-msgid "description for default GStreamer audiosink for Music and Movies"
-msgstr ""
-
-#: ext/gsettings/org.freedesktop.gstreamer.default-elements.gschema.xml.in:44
-msgid "default GStreamer videosink"
-msgstr ""
-
-#: ext/gsettings/org.freedesktop.gstreamer.default-elements.gschema.xml.in:45
-msgid ""
-"GStreamer can play video using any number of output elements. Some possible "
-"choices are xvimagesink, ximagesink, sdlvideosink and aasink. The videosink "
-"can be a partial pipeline instead of just one element."
-msgstr ""
-
-#: ext/gsettings/org.freedesktop.gstreamer.default-elements.gschema.xml.in:52
-msgid "description for default GStreamer videosink"
-msgstr ""
-
-#: ext/gsettings/org.freedesktop.gstreamer.default-elements.gschema.xml.in:53
-msgid "Describes the selected videosink element."
-msgstr ""
-
-#: ext/gsettings/org.freedesktop.gstreamer.default-elements.gschema.xml.in:57
-msgid "default GStreamer audiosrc"
-msgstr ""
-
-#: ext/gsettings/org.freedesktop.gstreamer.default-elements.gschema.xml.in:58
-msgid ""
-"GStreamer can record audio using any number of input elements. Some possible "
-"choices are osssrc, pulsesrc and alsasrc. The audio source can be a partial "
-"pipeline instead of just one element."
-msgstr ""
-
-#: ext/gsettings/org.freedesktop.gstreamer.default-elements.gschema.xml.in:65
-msgid "description for default GStreamer audiosrc"
-msgstr ""
-
-#: ext/gsettings/org.freedesktop.gstreamer.default-elements.gschema.xml.in:66
-msgid "Describes the selected audiosrc element."
-msgstr ""
-
-#: ext/gsettings/org.freedesktop.gstreamer.default-elements.gschema.xml.in:70
-msgid "default GStreamer videosrc"
-msgstr ""
-
-#: ext/gsettings/org.freedesktop.gstreamer.default-elements.gschema.xml.in:71
-msgid ""
-"GStreamer can record video from any number of input elements. Some possible "
-"choices are v4lsrc, v4l2src and videotestsrc. The video source can be a "
-"partial pipeline instead of just one element."
-msgstr ""
-
-#: ext/gsettings/org.freedesktop.gstreamer.default-elements.gschema.xml.in:77
-msgid "description for default GStreamer videosrc"
-msgstr ""
-
-#: ext/gsettings/org.freedesktop.gstreamer.default-elements.gschema.xml.in:78
-msgid "Describes the selected videosrc element."
-msgstr ""
-
-#: ext/gsettings/org.freedesktop.gstreamer.default-elements.gschema.xml.in:82
-msgid "default GStreamer visualization"
-msgstr ""
-
-#: ext/gsettings/org.freedesktop.gstreamer.default-elements.gschema.xml.in:83
-msgid ""
-"GStreamer can put visualization plugins in a pipeline to transform audio "
-"streams in video frames. Some possible choices are goom, goom2k1 and "
-"synaesthesia. The visualization plugin can be a partial pipeline instead of "
-"just one element."
-msgstr ""
-
-#: ext/gsettings/org.freedesktop.gstreamer.default-elements.gschema.xml.in:90
-msgid "description for default GStreamer visualization"
-msgstr ""
-
-#: ext/gsettings/org.freedesktop.gstreamer.default-elements.gschema.xml.in:91
-msgid "Describes the selected visualization element."
-msgstr ""
-
-#: ext/opencv/gsttemplatematch.c:442
+#: ext/opencv/gsttemplatematch.cpp:188
 msgid "OpenCV failed to load template image"
 msgstr ""
 
@@ -154,18 +37,18 @@
 msgid "Failed to set PGC based seeking."
 msgstr ""
 
-#: ext/resindvd/resindvdsrc.c:1166
+#: ext/resindvd/resindvdsrc.c:1165
 msgid ""
 "Could not read DVD. This may be because the DVD is encrypted and a DVD "
 "decryption library is not installed."
 msgstr ""
 
-#: ext/resindvd/resindvdsrc.c:1171 ext/resindvd/resindvdsrc.c:1180
+#: ext/resindvd/resindvdsrc.c:1170 ext/resindvd/resindvdsrc.c:1179
 msgid "Could not read DVD."
 msgstr ""
 
-#: ext/smoothstreaming/gstmssdemux.c:381
-#: gst-libs/gst/adaptivedemux/gstadaptivedemux.c:525
+#: ext/smoothstreaming/gstmssdemux.c:405
+#: gst-libs/gst/adaptivedemux/gstadaptivedemux.c:633
 msgid "This file contains no playable streams."
 msgstr ""
 
@@ -189,7 +72,7 @@
 msgid "Could not start sndio"
 msgstr ""
 
-#: gst/aiff/aiffparse.c:1458
+#: gst/aiff/aiffparse.c:1504
 msgid "Internal data flow error."
 msgstr ""
 
@@ -215,18 +98,18 @@
 msgid "Subpicture format was not configured before data flow"
 msgstr ""
 
-#: gst-libs/gst/adaptivedemux/gstadaptivedemux.c:2081
+#: gst-libs/gst/adaptivedemux/gstadaptivedemux.c:2656
 msgid "Failed to get fragment URL."
 msgstr ""
 
-#: gst-libs/gst/adaptivedemux/gstadaptivedemux.c:2282
-#: gst-libs/gst/adaptivedemux/gstadaptivedemux.c:2446
-#: gst/mpegtsdemux/mpegtsbase.c:1342 gst/mpegtsdemux/mpegtsbase.c:1346
+#: gst-libs/gst/adaptivedemux/gstadaptivedemux.c:2891
+#: gst-libs/gst/adaptivedemux/gstadaptivedemux.c:3085
+#: gst/mpegtsdemux/mpegtsbase.c:1381 gst/mpegtsdemux/mpegtsbase.c:1385
 #: gst/nuvdemux/gstnuvdemux.c:736
 msgid "Internal data stream error."
 msgstr ""
 
-#: gst-libs/gst/adaptivedemux/gstadaptivedemux.c:2383
+#: gst-libs/gst/adaptivedemux/gstadaptivedemux.c:3003
 msgid "Couldn't download fragments"
 msgstr ""
 
@@ -244,45 +127,45 @@
 msgid "Could not open file \"%s\" for writing."
 msgstr ""
 
-#: sys/dvb/gstdvbsrc.c:1565 sys/dvb/gstdvbsrc.c:1754
+#: sys/dvb/gstdvbsrc.c:1564 sys/dvb/gstdvbsrc.c:1753
 #, c-format
 msgid "Device \"%s\" does not exist."
 msgstr ""
 
-#: sys/dvb/gstdvbsrc.c:1569
+#: sys/dvb/gstdvbsrc.c:1568
 #, c-format
 msgid "Could not open frontend device \"%s\"."
 msgstr ""
 
-#: sys/dvb/gstdvbsrc.c:1583
+#: sys/dvb/gstdvbsrc.c:1582
 #, c-format
 msgid "Could not get settings from frontend device \"%s\"."
 msgstr ""
 
-#: sys/dvb/gstdvbsrc.c:1600
+#: sys/dvb/gstdvbsrc.c:1599
 #, c-format
 msgid "Cannot enumerate delivery systems from frontend device \"%s\"."
 msgstr ""
 
-#: sys/dvb/gstdvbsrc.c:1758
+#: sys/dvb/gstdvbsrc.c:1757
 #, c-format
 msgid "Could not open file \"%s\" for reading."
 msgstr ""
 
-#: sys/dvb/parsechannels.c:168
+#: sys/dvb/parsechannels.c:165
 msgid "Couldn't find DVB channel configuration file"
 msgstr ""
 
-#: sys/dvb/parsechannels.c:171
+#: sys/dvb/parsechannels.c:168
 #, c-format
 msgid "Couldn't load DVB channel configuration file: %s"
 msgstr ""
 
-#: sys/dvb/parsechannels.c:180
+#: sys/dvb/parsechannels.c:175
 msgid "DVB channel configuration file doesn't contain any channels"
 msgstr ""
 
-#: sys/dvb/parsechannels.c:456
+#: sys/dvb/parsechannels.c:449
 #, c-format
 msgid "Couldn't find details for DVB channel %s"
 msgstr ""
diff --git a/po/hr.gmo b/po/hr.gmo
index d109887..ca2eac1 100644
--- a/po/hr.gmo
+++ b/po/hr.gmo
Binary files differ
diff --git a/po/hr.po b/po/hr.po
index 5591d8e..535ec10 100644
--- a/po/hr.po
+++ b/po/hr.po
@@ -6,7 +6,7 @@
 msgstr ""
 "Project-Id-Version: gst-plugins-bad 0.10.21.2\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2016-01-20 14:17+0200\n"
+"POT-Creation-Date: 2016-03-15 11:41+0200\n"
 "PO-Revision-Date: 2012-04-16 02:06+0200\n"
 "Last-Translator: Tomislav Krznar <tomislav.krznar@gmail.com>\n"
 "Language-Team: Croatian <lokalizacija@linux.hr>\n"
@@ -20,95 +20,6 @@
 msgid "format wasn't negotiated before get function"
 msgstr ""
 
-msgid "default GStreamer sound events audiosink"
-msgstr ""
-
-msgid ""
-"GStreamer can play audio using any number of output elements. Some possible "
-"choices are osssink, pulsesink and alsasink. The audiosink can be a partial "
-"pipeline instead of just one element."
-msgstr ""
-
-msgid "description for default GStreamer sound events audiosink"
-msgstr ""
-
-msgid "Describes the selected audiosink element."
-msgstr ""
-
-msgid "default GStreamer audiosink for Audio/Video Conferencing"
-msgstr ""
-
-msgid ""
-"description for default GStreamer audiosink for Audio/Video Conferencing"
-msgstr ""
-
-msgid "default GStreamer audiosink for Music and Movies"
-msgstr ""
-
-msgid "description for default GStreamer audiosink for Music and Movies"
-msgstr ""
-
-msgid "default GStreamer videosink"
-msgstr ""
-
-msgid ""
-"GStreamer can play video using any number of output elements. Some possible "
-"choices are xvimagesink, ximagesink, sdlvideosink and aasink. The videosink "
-"can be a partial pipeline instead of just one element."
-msgstr ""
-
-msgid "description for default GStreamer videosink"
-msgstr ""
-
-msgid "Describes the selected videosink element."
-msgstr ""
-
-msgid "default GStreamer audiosrc"
-msgstr ""
-
-msgid ""
-"GStreamer can record audio using any number of input elements. Some possible "
-"choices are osssrc, pulsesrc and alsasrc. The audio source can be a partial "
-"pipeline instead of just one element."
-msgstr ""
-
-msgid "description for default GStreamer audiosrc"
-msgstr ""
-
-msgid "Describes the selected audiosrc element."
-msgstr ""
-
-msgid "default GStreamer videosrc"
-msgstr ""
-
-msgid ""
-"GStreamer can record video from any number of input elements. Some possible "
-"choices are v4lsrc, v4l2src and videotestsrc. The video source can be a "
-"partial pipeline instead of just one element."
-msgstr ""
-
-msgid "description for default GStreamer videosrc"
-msgstr ""
-
-msgid "Describes the selected videosrc element."
-msgstr ""
-
-msgid "default GStreamer visualization"
-msgstr ""
-
-msgid ""
-"GStreamer can put visualization plugins in a pipeline to transform audio "
-"streams in video frames. Some possible choices are goom, goom2k1 and "
-"synaesthesia. The visualization plugin can be a partial pipeline instead of "
-"just one element."
-msgstr ""
-
-msgid "description for default GStreamer visualization"
-msgstr ""
-
-msgid "Describes the selected visualization element."
-msgstr ""
-
 msgid "OpenCV failed to load template image"
 msgstr ""
 
diff --git a/po/hu.gmo b/po/hu.gmo
index 1fdf9ac..cd9411f 100644
--- a/po/hu.gmo
+++ b/po/hu.gmo
Binary files differ
diff --git a/po/hu.po b/po/hu.po
index af71e94..9eaac4d 100644
--- a/po/hu.po
+++ b/po/hu.po
@@ -8,7 +8,7 @@
 msgstr ""
 "Project-Id-Version: gst-plugins-bad 1.6.0\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2016-01-20 14:17+0200\n"
+"POT-Creation-Date: 2016-03-15 11:41+0200\n"
 "PO-Revision-Date: 2015-11-20 23:46+0100\n"
 "Last-Translator: Balázs Úr <urbalazs@gmail.com>\n"
 "Language-Team: Hungarian <translation-team-hu@lists.sourceforge.net>\n"
@@ -22,117 +22,6 @@
 msgid "format wasn't negotiated before get function"
 msgstr "a formátum nem lett egyeztetve a függvény lekérése előtt"
 
-msgid "default GStreamer sound events audiosink"
-msgstr "alapértelmezett GStreamer hangesemények audiosink"
-
-msgid ""
-"GStreamer can play audio using any number of output elements. Some possible "
-"choices are osssink, pulsesink and alsasink. The audiosink can be a partial "
-"pipeline instead of just one element."
-msgstr ""
-"A GStreamer képes hangot lejátszani bármilyen számú kimeneti elem "
-"használatával. Néhány lehetséges választás a következő lehet: osssink, "
-"pulsesink és alsasink. Az audiosink lehet egy részleges adatcsatorna is "
-"egyetlen elem helyett."
-
-msgid "description for default GStreamer sound events audiosink"
-msgstr "az alapértelmezett GStreamer hangesemények audiosink leírása"
-
-msgid "Describes the selected audiosink element."
-msgstr "Leírja a kiválasztott audiosink elemet."
-
-msgid "default GStreamer audiosink for Audio/Video Conferencing"
-msgstr "alapértelmezett GStreamer audiosink a hang/videó konferenciához"
-
-msgid ""
-"description for default GStreamer audiosink for Audio/Video Conferencing"
-msgstr ""
-"az alapértelmezett GStreamer audiosink leírása a hang/videó konferenciához"
-
-msgid "default GStreamer audiosink for Music and Movies"
-msgstr "alapértelmezett GStreamer audiosink zenékhez és filmekhez"
-
-msgid "description for default GStreamer audiosink for Music and Movies"
-msgstr "az alapértelmezett GStreamer audiosink leírása zenékhez és filmekhez"
-
-msgid "default GStreamer videosink"
-msgstr "alapértelmezett GStreamer videosink"
-
-msgid ""
-"GStreamer can play video using any number of output elements. Some possible "
-"choices are xvimagesink, ximagesink, sdlvideosink and aasink. The videosink "
-"can be a partial pipeline instead of just one element."
-msgstr ""
-"A GStreamer képes videót lejátszani bármilyen számú kimeneti elem "
-"használatával. Néhány lehetséges választás a következő lehet: xvimagesink, "
-"ximagesink, sdlvideosink és aasink. Az videosink lehet egy részleges "
-"adatcsatorna is egyetlen elem helyett."
-
-msgid "description for default GStreamer videosink"
-msgstr "az alapértelmezett GStreamer videosink leírása"
-
-msgid "Describes the selected videosink element."
-msgstr "Leírja a kiválasztott videosink elemet."
-
-msgid "default GStreamer audiosrc"
-msgstr "alapértelmezett GStreamer audiosrc"
-
-msgid ""
-"GStreamer can record audio using any number of input elements. Some possible "
-"choices are osssrc, pulsesrc and alsasrc. The audio source can be a partial "
-"pipeline instead of just one element."
-msgstr ""
-"A GStreamer képes hangot felvenni bármilyen számú bemeneti elem "
-"használatával. Néhány lehetséges választás a következő lehet: osssrc, "
-"pulsesrc és alsasrc. A hangforrás lehet egy részleges adatcsatorna is "
-"egyetlen elem helyett."
-
-msgid "description for default GStreamer audiosrc"
-msgstr "az alapértelmezett GStreamer audiosrc leírása"
-
-msgid "Describes the selected audiosrc element."
-msgstr "Leírja a kiválasztott audiosrc elemet."
-
-msgid "default GStreamer videosrc"
-msgstr "alapértelmezett GStreamer videosrc"
-
-msgid ""
-"GStreamer can record video from any number of input elements. Some possible "
-"choices are v4lsrc, v4l2src and videotestsrc. The video source can be a "
-"partial pipeline instead of just one element."
-msgstr ""
-"A GStreamer képes videót felvenni bármilyen számú bemeneti elem "
-"használatával. Néhány lehetséges választás a következő lehet: v4lsrc, "
-"v4l2src és videotestsrc. A videoforrás lehet egy részleges adatcsatorna is "
-"egyetlen elem helyett."
-
-msgid "description for default GStreamer videosrc"
-msgstr "az alapértelmezett GStreamer videosrc leírása"
-
-msgid "Describes the selected videosrc element."
-msgstr "Leírja a kiválasztott videosrc elemet."
-
-msgid "default GStreamer visualization"
-msgstr "alapértelmezett GStreamer képi megjelenítés"
-
-msgid ""
-"GStreamer can put visualization plugins in a pipeline to transform audio "
-"streams in video frames. Some possible choices are goom, goom2k1 and "
-"synaesthesia. The visualization plugin can be a partial pipeline instead of "
-"just one element."
-msgstr ""
-"A GStreamer képes képi megjelenítő bővítményeket elhelyezni egy "
-"adatcsatornába a videoképkockákban lévő hangfolyamok átalakításához. Néhány "
-"lehetséges választás a következő lehet: goom, goom2k1 és synaesthesia. A "
-"képi megjelenítő bővítmény lehet egy részleges adatcsatorna is egyetlen elem "
-"helyett."
-
-msgid "description for default GStreamer visualization"
-msgstr "az alapértelmezett GStreamer képi megjelenítés leírása"
-
-msgid "Describes the selected visualization element."
-msgstr "Leírja a kiválasztott képi megjelenítés elemet."
-
 msgid "OpenCV failed to load template image"
 msgstr "Az OpenCV-nek nem sikerült betöltenie a sablonképet"
 
@@ -253,6 +142,118 @@
 msgid "Couldn't find details for DVB channel %s"
 msgstr "Nem találhatók a(z) %s DVB-csatorna részletei"
 
+#~ msgid "default GStreamer sound events audiosink"
+#~ msgstr "alapértelmezett GStreamer hangesemények audiosink"
+
+#~ msgid ""
+#~ "GStreamer can play audio using any number of output elements. Some "
+#~ "possible choices are osssink, pulsesink and alsasink. The audiosink can "
+#~ "be a partial pipeline instead of just one element."
+#~ msgstr ""
+#~ "A GStreamer képes hangot lejátszani bármilyen számú kimeneti elem "
+#~ "használatával. Néhány lehetséges választás a következő lehet: osssink, "
+#~ "pulsesink és alsasink. Az audiosink lehet egy részleges adatcsatorna is "
+#~ "egyetlen elem helyett."
+
+#~ msgid "description for default GStreamer sound events audiosink"
+#~ msgstr "az alapértelmezett GStreamer hangesemények audiosink leírása"
+
+#~ msgid "Describes the selected audiosink element."
+#~ msgstr "Leírja a kiválasztott audiosink elemet."
+
+#~ msgid "default GStreamer audiosink for Audio/Video Conferencing"
+#~ msgstr "alapértelmezett GStreamer audiosink a hang/videó konferenciához"
+
+#~ msgid ""
+#~ "description for default GStreamer audiosink for Audio/Video Conferencing"
+#~ msgstr ""
+#~ "az alapértelmezett GStreamer audiosink leírása a hang/videó konferenciához"
+
+#~ msgid "default GStreamer audiosink for Music and Movies"
+#~ msgstr "alapértelmezett GStreamer audiosink zenékhez és filmekhez"
+
+#~ msgid "description for default GStreamer audiosink for Music and Movies"
+#~ msgstr ""
+#~ "az alapértelmezett GStreamer audiosink leírása zenékhez és filmekhez"
+
+#~ msgid "default GStreamer videosink"
+#~ msgstr "alapértelmezett GStreamer videosink"
+
+#~ msgid ""
+#~ "GStreamer can play video using any number of output elements. Some "
+#~ "possible choices are xvimagesink, ximagesink, sdlvideosink and aasink. "
+#~ "The videosink can be a partial pipeline instead of just one element."
+#~ msgstr ""
+#~ "A GStreamer képes videót lejátszani bármilyen számú kimeneti elem "
+#~ "használatával. Néhány lehetséges választás a következő lehet: "
+#~ "xvimagesink, ximagesink, sdlvideosink és aasink. Az videosink lehet egy "
+#~ "részleges adatcsatorna is egyetlen elem helyett."
+
+#~ msgid "description for default GStreamer videosink"
+#~ msgstr "az alapértelmezett GStreamer videosink leírása"
+
+#~ msgid "Describes the selected videosink element."
+#~ msgstr "Leírja a kiválasztott videosink elemet."
+
+#~ msgid "default GStreamer audiosrc"
+#~ msgstr "alapértelmezett GStreamer audiosrc"
+
+#~ msgid ""
+#~ "GStreamer can record audio using any number of input elements. Some "
+#~ "possible choices are osssrc, pulsesrc and alsasrc. The audio source can "
+#~ "be a partial pipeline instead of just one element."
+#~ msgstr ""
+#~ "A GStreamer képes hangot felvenni bármilyen számú bemeneti elem "
+#~ "használatával. Néhány lehetséges választás a következő lehet: osssrc, "
+#~ "pulsesrc és alsasrc. A hangforrás lehet egy részleges adatcsatorna is "
+#~ "egyetlen elem helyett."
+
+#~ msgid "description for default GStreamer audiosrc"
+#~ msgstr "az alapértelmezett GStreamer audiosrc leírása"
+
+#~ msgid "Describes the selected audiosrc element."
+#~ msgstr "Leírja a kiválasztott audiosrc elemet."
+
+#~ msgid "default GStreamer videosrc"
+#~ msgstr "alapértelmezett GStreamer videosrc"
+
+#~ msgid ""
+#~ "GStreamer can record video from any number of input elements. Some "
+#~ "possible choices are v4lsrc, v4l2src and videotestsrc. The video source "
+#~ "can be a partial pipeline instead of just one element."
+#~ msgstr ""
+#~ "A GStreamer képes videót felvenni bármilyen számú bemeneti elem "
+#~ "használatával. Néhány lehetséges választás a következő lehet: v4lsrc, "
+#~ "v4l2src és videotestsrc. A videoforrás lehet egy részleges adatcsatorna "
+#~ "is egyetlen elem helyett."
+
+#~ msgid "description for default GStreamer videosrc"
+#~ msgstr "az alapértelmezett GStreamer videosrc leírása"
+
+#~ msgid "Describes the selected videosrc element."
+#~ msgstr "Leírja a kiválasztott videosrc elemet."
+
+#~ msgid "default GStreamer visualization"
+#~ msgstr "alapértelmezett GStreamer képi megjelenítés"
+
+#~ msgid ""
+#~ "GStreamer can put visualization plugins in a pipeline to transform audio "
+#~ "streams in video frames. Some possible choices are goom, goom2k1 and "
+#~ "synaesthesia. The visualization plugin can be a partial pipeline instead "
+#~ "of just one element."
+#~ msgstr ""
+#~ "A GStreamer képes képi megjelenítő bővítményeket elhelyezni egy "
+#~ "adatcsatornába a videoképkockákban lévő hangfolyamok átalakításához. "
+#~ "Néhány lehetséges választás a következő lehet: goom, goom2k1 és "
+#~ "synaesthesia. A képi megjelenítő bővítmény lehet egy részleges "
+#~ "adatcsatorna is egyetlen elem helyett."
+
+#~ msgid "description for default GStreamer visualization"
+#~ msgstr "az alapértelmezett GStreamer képi megjelenítés leírása"
+
+#~ msgid "Describes the selected visualization element."
+#~ msgstr "Leírja a kiválasztott képi megjelenítés elemet."
+
 #~ msgid "Couldn't get the Manifest's URI"
 #~ msgstr "Nem kérhető le a Manifest URL-e"
 
diff --git a/po/id.gmo b/po/id.gmo
index 10326af..a364677 100644
--- a/po/id.gmo
+++ b/po/id.gmo
Binary files differ
diff --git a/po/id.po b/po/id.po
index 860090a..c028aa7 100644
--- a/po/id.po
+++ b/po/id.po
@@ -7,7 +7,7 @@
 msgstr ""
 "Project-Id-Version: gst-plugins-bad 1.3.2\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2016-01-20 14:17+0200\n"
+"POT-Creation-Date: 2016-03-15 11:41+0200\n"
 "PO-Revision-Date: 2014-05-31 22:16+0700\n"
 "Last-Translator: Andhika Padmawan <andhika.padmawan@gmail.com>\n"
 "Language-Team: Indonesian <translation-team-id@lists.sourceforge.net>\n"
@@ -20,95 +20,6 @@
 msgid "format wasn't negotiated before get function"
 msgstr ""
 
-msgid "default GStreamer sound events audiosink"
-msgstr ""
-
-msgid ""
-"GStreamer can play audio using any number of output elements. Some possible "
-"choices are osssink, pulsesink and alsasink. The audiosink can be a partial "
-"pipeline instead of just one element."
-msgstr ""
-
-msgid "description for default GStreamer sound events audiosink"
-msgstr ""
-
-msgid "Describes the selected audiosink element."
-msgstr ""
-
-msgid "default GStreamer audiosink for Audio/Video Conferencing"
-msgstr ""
-
-msgid ""
-"description for default GStreamer audiosink for Audio/Video Conferencing"
-msgstr ""
-
-msgid "default GStreamer audiosink for Music and Movies"
-msgstr ""
-
-msgid "description for default GStreamer audiosink for Music and Movies"
-msgstr ""
-
-msgid "default GStreamer videosink"
-msgstr ""
-
-msgid ""
-"GStreamer can play video using any number of output elements. Some possible "
-"choices are xvimagesink, ximagesink, sdlvideosink and aasink. The videosink "
-"can be a partial pipeline instead of just one element."
-msgstr ""
-
-msgid "description for default GStreamer videosink"
-msgstr ""
-
-msgid "Describes the selected videosink element."
-msgstr ""
-
-msgid "default GStreamer audiosrc"
-msgstr ""
-
-msgid ""
-"GStreamer can record audio using any number of input elements. Some possible "
-"choices are osssrc, pulsesrc and alsasrc. The audio source can be a partial "
-"pipeline instead of just one element."
-msgstr ""
-
-msgid "description for default GStreamer audiosrc"
-msgstr ""
-
-msgid "Describes the selected audiosrc element."
-msgstr ""
-
-msgid "default GStreamer videosrc"
-msgstr ""
-
-msgid ""
-"GStreamer can record video from any number of input elements. Some possible "
-"choices are v4lsrc, v4l2src and videotestsrc. The video source can be a "
-"partial pipeline instead of just one element."
-msgstr ""
-
-msgid "description for default GStreamer videosrc"
-msgstr ""
-
-msgid "Describes the selected videosrc element."
-msgstr ""
-
-msgid "default GStreamer visualization"
-msgstr ""
-
-msgid ""
-"GStreamer can put visualization plugins in a pipeline to transform audio "
-"streams in video frames. Some possible choices are goom, goom2k1 and "
-"synaesthesia. The visualization plugin can be a partial pipeline instead of "
-"just one element."
-msgstr ""
-
-msgid "description for default GStreamer visualization"
-msgstr ""
-
-msgid "Describes the selected visualization element."
-msgstr ""
-
 msgid "OpenCV failed to load template image"
 msgstr ""
 
diff --git a/po/it.gmo b/po/it.gmo
index c5c3665..532ae50 100644
--- a/po/it.gmo
+++ b/po/it.gmo
Binary files differ
diff --git a/po/it.po b/po/it.po
index 52c0724..9ac6df3 100644
--- a/po/it.po
+++ b/po/it.po
@@ -7,7 +7,7 @@
 msgstr ""
 "Project-Id-Version: gst-plugins-bad 0.10.13.2\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2016-01-20 14:17+0200\n"
+"POT-Creation-Date: 2016-03-15 11:41+0200\n"
 "PO-Revision-Date: 2009-08-14 00:12+0200\n"
 "Last-Translator: Luca Ferretti <elle.uca@infinito.it>\n"
 "Language-Team: Italian <tp@lists.linux.it>\n"
@@ -19,95 +19,6 @@
 msgid "format wasn't negotiated before get function"
 msgstr ""
 
-msgid "default GStreamer sound events audiosink"
-msgstr ""
-
-msgid ""
-"GStreamer can play audio using any number of output elements. Some possible "
-"choices are osssink, pulsesink and alsasink. The audiosink can be a partial "
-"pipeline instead of just one element."
-msgstr ""
-
-msgid "description for default GStreamer sound events audiosink"
-msgstr ""
-
-msgid "Describes the selected audiosink element."
-msgstr ""
-
-msgid "default GStreamer audiosink for Audio/Video Conferencing"
-msgstr ""
-
-msgid ""
-"description for default GStreamer audiosink for Audio/Video Conferencing"
-msgstr ""
-
-msgid "default GStreamer audiosink for Music and Movies"
-msgstr ""
-
-msgid "description for default GStreamer audiosink for Music and Movies"
-msgstr ""
-
-msgid "default GStreamer videosink"
-msgstr ""
-
-msgid ""
-"GStreamer can play video using any number of output elements. Some possible "
-"choices are xvimagesink, ximagesink, sdlvideosink and aasink. The videosink "
-"can be a partial pipeline instead of just one element."
-msgstr ""
-
-msgid "description for default GStreamer videosink"
-msgstr ""
-
-msgid "Describes the selected videosink element."
-msgstr ""
-
-msgid "default GStreamer audiosrc"
-msgstr ""
-
-msgid ""
-"GStreamer can record audio using any number of input elements. Some possible "
-"choices are osssrc, pulsesrc and alsasrc. The audio source can be a partial "
-"pipeline instead of just one element."
-msgstr ""
-
-msgid "description for default GStreamer audiosrc"
-msgstr ""
-
-msgid "Describes the selected audiosrc element."
-msgstr ""
-
-msgid "default GStreamer videosrc"
-msgstr ""
-
-msgid ""
-"GStreamer can record video from any number of input elements. Some possible "
-"choices are v4lsrc, v4l2src and videotestsrc. The video source can be a "
-"partial pipeline instead of just one element."
-msgstr ""
-
-msgid "description for default GStreamer videosrc"
-msgstr ""
-
-msgid "Describes the selected videosrc element."
-msgstr ""
-
-msgid "default GStreamer visualization"
-msgstr ""
-
-msgid ""
-"GStreamer can put visualization plugins in a pipeline to transform audio "
-"streams in video frames. Some possible choices are goom, goom2k1 and "
-"synaesthesia. The visualization plugin can be a partial pipeline instead of "
-"just one element."
-msgstr ""
-
-msgid "description for default GStreamer visualization"
-msgstr ""
-
-msgid "Describes the selected visualization element."
-msgstr ""
-
 msgid "OpenCV failed to load template image"
 msgstr ""
 
diff --git a/po/ja.gmo b/po/ja.gmo
index fb6be6a..93d3b33 100644
--- a/po/ja.gmo
+++ b/po/ja.gmo
Binary files differ
diff --git a/po/ja.po b/po/ja.po
index a273480..70a88db 100644
--- a/po/ja.po
+++ b/po/ja.po
@@ -6,7 +6,7 @@
 msgstr ""
 "Project-Id-Version: gst-plugins-bad 0.10.21.2\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2016-01-20 14:17+0200\n"
+"POT-Creation-Date: 2016-03-15 11:41+0200\n"
 "PO-Revision-Date: 2011-04-26 19:38+0900\n"
 "Last-Translator: Makoto Kato <makoto.kt@gmail.com>\n"
 "Language-Team: Japanese <translation-team-ja@lists.sourceforge.net>\n"
@@ -20,95 +20,6 @@
 msgid "format wasn't negotiated before get function"
 msgstr ""
 
-msgid "default GStreamer sound events audiosink"
-msgstr ""
-
-msgid ""
-"GStreamer can play audio using any number of output elements. Some possible "
-"choices are osssink, pulsesink and alsasink. The audiosink can be a partial "
-"pipeline instead of just one element."
-msgstr ""
-
-msgid "description for default GStreamer sound events audiosink"
-msgstr ""
-
-msgid "Describes the selected audiosink element."
-msgstr ""
-
-msgid "default GStreamer audiosink for Audio/Video Conferencing"
-msgstr ""
-
-msgid ""
-"description for default GStreamer audiosink for Audio/Video Conferencing"
-msgstr ""
-
-msgid "default GStreamer audiosink for Music and Movies"
-msgstr ""
-
-msgid "description for default GStreamer audiosink for Music and Movies"
-msgstr ""
-
-msgid "default GStreamer videosink"
-msgstr ""
-
-msgid ""
-"GStreamer can play video using any number of output elements. Some possible "
-"choices are xvimagesink, ximagesink, sdlvideosink and aasink. The videosink "
-"can be a partial pipeline instead of just one element."
-msgstr ""
-
-msgid "description for default GStreamer videosink"
-msgstr ""
-
-msgid "Describes the selected videosink element."
-msgstr ""
-
-msgid "default GStreamer audiosrc"
-msgstr ""
-
-msgid ""
-"GStreamer can record audio using any number of input elements. Some possible "
-"choices are osssrc, pulsesrc and alsasrc. The audio source can be a partial "
-"pipeline instead of just one element."
-msgstr ""
-
-msgid "description for default GStreamer audiosrc"
-msgstr ""
-
-msgid "Describes the selected audiosrc element."
-msgstr ""
-
-msgid "default GStreamer videosrc"
-msgstr ""
-
-msgid ""
-"GStreamer can record video from any number of input elements. Some possible "
-"choices are v4lsrc, v4l2src and videotestsrc. The video source can be a "
-"partial pipeline instead of just one element."
-msgstr ""
-
-msgid "description for default GStreamer videosrc"
-msgstr ""
-
-msgid "Describes the selected videosrc element."
-msgstr ""
-
-msgid "default GStreamer visualization"
-msgstr ""
-
-msgid ""
-"GStreamer can put visualization plugins in a pipeline to transform audio "
-"streams in video frames. Some possible choices are goom, goom2k1 and "
-"synaesthesia. The visualization plugin can be a partial pipeline instead of "
-"just one element."
-msgstr ""
-
-msgid "description for default GStreamer visualization"
-msgstr ""
-
-msgid "Describes the selected visualization element."
-msgstr ""
-
 msgid "OpenCV failed to load template image"
 msgstr ""
 
diff --git a/po/ky.gmo b/po/ky.gmo
index f3541d8..f0eda99 100644
--- a/po/ky.gmo
+++ b/po/ky.gmo
Binary files differ
diff --git a/po/ky.po b/po/ky.po
index 6f49f30..9ae257c 100644
--- a/po/ky.po
+++ b/po/ky.po
@@ -6,7 +6,7 @@
 msgstr ""
 "Project-Id-Version: gst-plugins-bad 0.10.5\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2016-01-20 14:17+0200\n"
+"POT-Creation-Date: 2016-03-15 11:41+0200\n"
 "PO-Revision-Date: 2007-11-13 17:16+0600\n"
 "Last-Translator: Ilyas Bakirov <just_ilyas@yahoo.com>\n"
 "Language-Team: Kirghiz <i18n-team-ky-kyrgyz@lists.sourceforge.net>\n"
@@ -20,95 +20,6 @@
 msgid "format wasn't negotiated before get function"
 msgstr ""
 
-msgid "default GStreamer sound events audiosink"
-msgstr ""
-
-msgid ""
-"GStreamer can play audio using any number of output elements. Some possible "
-"choices are osssink, pulsesink and alsasink. The audiosink can be a partial "
-"pipeline instead of just one element."
-msgstr ""
-
-msgid "description for default GStreamer sound events audiosink"
-msgstr ""
-
-msgid "Describes the selected audiosink element."
-msgstr ""
-
-msgid "default GStreamer audiosink for Audio/Video Conferencing"
-msgstr ""
-
-msgid ""
-"description for default GStreamer audiosink for Audio/Video Conferencing"
-msgstr ""
-
-msgid "default GStreamer audiosink for Music and Movies"
-msgstr ""
-
-msgid "description for default GStreamer audiosink for Music and Movies"
-msgstr ""
-
-msgid "default GStreamer videosink"
-msgstr ""
-
-msgid ""
-"GStreamer can play video using any number of output elements. Some possible "
-"choices are xvimagesink, ximagesink, sdlvideosink and aasink. The videosink "
-"can be a partial pipeline instead of just one element."
-msgstr ""
-
-msgid "description for default GStreamer videosink"
-msgstr ""
-
-msgid "Describes the selected videosink element."
-msgstr ""
-
-msgid "default GStreamer audiosrc"
-msgstr ""
-
-msgid ""
-"GStreamer can record audio using any number of input elements. Some possible "
-"choices are osssrc, pulsesrc and alsasrc. The audio source can be a partial "
-"pipeline instead of just one element."
-msgstr ""
-
-msgid "description for default GStreamer audiosrc"
-msgstr ""
-
-msgid "Describes the selected audiosrc element."
-msgstr ""
-
-msgid "default GStreamer videosrc"
-msgstr ""
-
-msgid ""
-"GStreamer can record video from any number of input elements. Some possible "
-"choices are v4lsrc, v4l2src and videotestsrc. The video source can be a "
-"partial pipeline instead of just one element."
-msgstr ""
-
-msgid "description for default GStreamer videosrc"
-msgstr ""
-
-msgid "Describes the selected videosrc element."
-msgstr ""
-
-msgid "default GStreamer visualization"
-msgstr ""
-
-msgid ""
-"GStreamer can put visualization plugins in a pipeline to transform audio "
-"streams in video frames. Some possible choices are goom, goom2k1 and "
-"synaesthesia. The visualization plugin can be a partial pipeline instead of "
-"just one element."
-msgstr ""
-
-msgid "description for default GStreamer visualization"
-msgstr ""
-
-msgid "Describes the selected visualization element."
-msgstr ""
-
 msgid "OpenCV failed to load template image"
 msgstr ""
 
diff --git a/po/lt.gmo b/po/lt.gmo
index c4e16f1..4afdbb9 100644
--- a/po/lt.gmo
+++ b/po/lt.gmo
Binary files differ
diff --git a/po/lt.po b/po/lt.po
index 98e7354..5ef9523 100644
--- a/po/lt.po
+++ b/po/lt.po
@@ -6,7 +6,7 @@
 msgstr ""
 "Project-Id-Version: gst-plugins-bad-0.10.6.3\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2016-01-20 14:17+0200\n"
+"POT-Creation-Date: 2016-03-15 11:41+0200\n"
 "PO-Revision-Date: 2008-05-14 02:13+0300\n"
 "Last-Translator: Gintautas Miliauskas <gintas@akl.lt>\n"
 "Language-Team: Lithuanian <komp_lt@konferencijos.lt>\n"
@@ -21,95 +21,6 @@
 msgid "format wasn't negotiated before get function"
 msgstr ""
 
-msgid "default GStreamer sound events audiosink"
-msgstr ""
-
-msgid ""
-"GStreamer can play audio using any number of output elements. Some possible "
-"choices are osssink, pulsesink and alsasink. The audiosink can be a partial "
-"pipeline instead of just one element."
-msgstr ""
-
-msgid "description for default GStreamer sound events audiosink"
-msgstr ""
-
-msgid "Describes the selected audiosink element."
-msgstr ""
-
-msgid "default GStreamer audiosink for Audio/Video Conferencing"
-msgstr ""
-
-msgid ""
-"description for default GStreamer audiosink for Audio/Video Conferencing"
-msgstr ""
-
-msgid "default GStreamer audiosink for Music and Movies"
-msgstr ""
-
-msgid "description for default GStreamer audiosink for Music and Movies"
-msgstr ""
-
-msgid "default GStreamer videosink"
-msgstr ""
-
-msgid ""
-"GStreamer can play video using any number of output elements. Some possible "
-"choices are xvimagesink, ximagesink, sdlvideosink and aasink. The videosink "
-"can be a partial pipeline instead of just one element."
-msgstr ""
-
-msgid "description for default GStreamer videosink"
-msgstr ""
-
-msgid "Describes the selected videosink element."
-msgstr ""
-
-msgid "default GStreamer audiosrc"
-msgstr ""
-
-msgid ""
-"GStreamer can record audio using any number of input elements. Some possible "
-"choices are osssrc, pulsesrc and alsasrc. The audio source can be a partial "
-"pipeline instead of just one element."
-msgstr ""
-
-msgid "description for default GStreamer audiosrc"
-msgstr ""
-
-msgid "Describes the selected audiosrc element."
-msgstr ""
-
-msgid "default GStreamer videosrc"
-msgstr ""
-
-msgid ""
-"GStreamer can record video from any number of input elements. Some possible "
-"choices are v4lsrc, v4l2src and videotestsrc. The video source can be a "
-"partial pipeline instead of just one element."
-msgstr ""
-
-msgid "description for default GStreamer videosrc"
-msgstr ""
-
-msgid "Describes the selected videosrc element."
-msgstr ""
-
-msgid "default GStreamer visualization"
-msgstr ""
-
-msgid ""
-"GStreamer can put visualization plugins in a pipeline to transform audio "
-"streams in video frames. Some possible choices are goom, goom2k1 and "
-"synaesthesia. The visualization plugin can be a partial pipeline instead of "
-"just one element."
-msgstr ""
-
-msgid "description for default GStreamer visualization"
-msgstr ""
-
-msgid "Describes the selected visualization element."
-msgstr ""
-
 msgid "OpenCV failed to load template image"
 msgstr ""
 
diff --git a/po/lv.gmo b/po/lv.gmo
index e042760..ffc3222 100644
--- a/po/lv.gmo
+++ b/po/lv.gmo
Binary files differ
diff --git a/po/lv.po b/po/lv.po
index e03dc67..9cf942a 100644
--- a/po/lv.po
+++ b/po/lv.po
@@ -8,7 +8,7 @@
 msgstr ""
 "Project-Id-Version: gst-plugins-bad 1.2.1\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2016-01-20 14:17+0200\n"
+"POT-Creation-Date: 2016-03-15 11:41+0200\n"
 "PO-Revision-Date: 2014-04-20 15:52+0300\n"
 "Last-Translator: Rihards Prieditis <rprieditis@gmail.com>\n"
 "Language-Team: Latvian <translation-team-lv@lists.sourceforge.net>\n"
@@ -25,95 +25,6 @@
 msgid "format wasn't negotiated before get function"
 msgstr ""
 
-msgid "default GStreamer sound events audiosink"
-msgstr ""
-
-msgid ""
-"GStreamer can play audio using any number of output elements. Some possible "
-"choices are osssink, pulsesink and alsasink. The audiosink can be a partial "
-"pipeline instead of just one element."
-msgstr ""
-
-msgid "description for default GStreamer sound events audiosink"
-msgstr ""
-
-msgid "Describes the selected audiosink element."
-msgstr ""
-
-msgid "default GStreamer audiosink for Audio/Video Conferencing"
-msgstr ""
-
-msgid ""
-"description for default GStreamer audiosink for Audio/Video Conferencing"
-msgstr ""
-
-msgid "default GStreamer audiosink for Music and Movies"
-msgstr ""
-
-msgid "description for default GStreamer audiosink for Music and Movies"
-msgstr ""
-
-msgid "default GStreamer videosink"
-msgstr ""
-
-msgid ""
-"GStreamer can play video using any number of output elements. Some possible "
-"choices are xvimagesink, ximagesink, sdlvideosink and aasink. The videosink "
-"can be a partial pipeline instead of just one element."
-msgstr ""
-
-msgid "description for default GStreamer videosink"
-msgstr ""
-
-msgid "Describes the selected videosink element."
-msgstr ""
-
-msgid "default GStreamer audiosrc"
-msgstr ""
-
-msgid ""
-"GStreamer can record audio using any number of input elements. Some possible "
-"choices are osssrc, pulsesrc and alsasrc. The audio source can be a partial "
-"pipeline instead of just one element."
-msgstr ""
-
-msgid "description for default GStreamer audiosrc"
-msgstr ""
-
-msgid "Describes the selected audiosrc element."
-msgstr ""
-
-msgid "default GStreamer videosrc"
-msgstr ""
-
-msgid ""
-"GStreamer can record video from any number of input elements. Some possible "
-"choices are v4lsrc, v4l2src and videotestsrc. The video source can be a "
-"partial pipeline instead of just one element."
-msgstr ""
-
-msgid "description for default GStreamer videosrc"
-msgstr ""
-
-msgid "Describes the selected videosrc element."
-msgstr ""
-
-msgid "default GStreamer visualization"
-msgstr ""
-
-msgid ""
-"GStreamer can put visualization plugins in a pipeline to transform audio "
-"streams in video frames. Some possible choices are goom, goom2k1 and "
-"synaesthesia. The visualization plugin can be a partial pipeline instead of "
-"just one element."
-msgstr ""
-
-msgid "description for default GStreamer visualization"
-msgstr ""
-
-msgid "Describes the selected visualization element."
-msgstr ""
-
 msgid "OpenCV failed to load template image"
 msgstr ""
 
diff --git a/po/mt.gmo b/po/mt.gmo
index 2b88687..9799c7d 100644
--- a/po/mt.gmo
+++ b/po/mt.gmo
Binary files differ
diff --git a/po/mt.po b/po/mt.po
index 5342e11..650cb44 100644
--- a/po/mt.po
+++ b/po/mt.po
@@ -5,7 +5,7 @@
 msgstr ""
 "Project-Id-Version: gst-plugins-bad-0.10.8.3\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2016-01-20 14:17+0200\n"
+"POT-Creation-Date: 2016-03-15 11:41+0200\n"
 "PO-Revision-Date: 2008-10-26 20:27+0100\n"
 "Last-Translator: Michel Bugeja <michelbugeja@rabatmalta.com>\n"
 "Language-Team: Maltese <translation-team-mt@lists.sourceforge.net>\n"
@@ -21,95 +21,6 @@
 msgid "format wasn't negotiated before get function"
 msgstr ""
 
-msgid "default GStreamer sound events audiosink"
-msgstr ""
-
-msgid ""
-"GStreamer can play audio using any number of output elements. Some possible "
-"choices are osssink, pulsesink and alsasink. The audiosink can be a partial "
-"pipeline instead of just one element."
-msgstr ""
-
-msgid "description for default GStreamer sound events audiosink"
-msgstr ""
-
-msgid "Describes the selected audiosink element."
-msgstr ""
-
-msgid "default GStreamer audiosink for Audio/Video Conferencing"
-msgstr ""
-
-msgid ""
-"description for default GStreamer audiosink for Audio/Video Conferencing"
-msgstr ""
-
-msgid "default GStreamer audiosink for Music and Movies"
-msgstr ""
-
-msgid "description for default GStreamer audiosink for Music and Movies"
-msgstr ""
-
-msgid "default GStreamer videosink"
-msgstr ""
-
-msgid ""
-"GStreamer can play video using any number of output elements. Some possible "
-"choices are xvimagesink, ximagesink, sdlvideosink and aasink. The videosink "
-"can be a partial pipeline instead of just one element."
-msgstr ""
-
-msgid "description for default GStreamer videosink"
-msgstr ""
-
-msgid "Describes the selected videosink element."
-msgstr ""
-
-msgid "default GStreamer audiosrc"
-msgstr ""
-
-msgid ""
-"GStreamer can record audio using any number of input elements. Some possible "
-"choices are osssrc, pulsesrc and alsasrc. The audio source can be a partial "
-"pipeline instead of just one element."
-msgstr ""
-
-msgid "description for default GStreamer audiosrc"
-msgstr ""
-
-msgid "Describes the selected audiosrc element."
-msgstr ""
-
-msgid "default GStreamer videosrc"
-msgstr ""
-
-msgid ""
-"GStreamer can record video from any number of input elements. Some possible "
-"choices are v4lsrc, v4l2src and videotestsrc. The video source can be a "
-"partial pipeline instead of just one element."
-msgstr ""
-
-msgid "description for default GStreamer videosrc"
-msgstr ""
-
-msgid "Describes the selected videosrc element."
-msgstr ""
-
-msgid "default GStreamer visualization"
-msgstr ""
-
-msgid ""
-"GStreamer can put visualization plugins in a pipeline to transform audio "
-"streams in video frames. Some possible choices are goom, goom2k1 and "
-"synaesthesia. The visualization plugin can be a partial pipeline instead of "
-"just one element."
-msgstr ""
-
-msgid "description for default GStreamer visualization"
-msgstr ""
-
-msgid "Describes the selected visualization element."
-msgstr ""
-
 msgid "OpenCV failed to load template image"
 msgstr ""
 
diff --git a/po/nb.gmo b/po/nb.gmo
index 748f81d..65085d7 100644
--- a/po/nb.gmo
+++ b/po/nb.gmo
Binary files differ
diff --git a/po/nb.po b/po/nb.po
index be43daa..86798da 100644
--- a/po/nb.po
+++ b/po/nb.po
@@ -6,126 +6,21 @@
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: gst-plugins-bad 1.5.1\n"
+"Project-Id-Version: gst-plugins-bad 1.6.0\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2016-01-20 14:17+0200\n"
-"PO-Revision-Date: 2015-07-11 01:15+0100\n"
+"POT-Creation-Date: 2016-03-15 11:41+0200\n"
+"PO-Revision-Date: 2015-12-22 21:08+0100\n"
 "Last-Translator: Johnny A. Solbu <johnny@solbu.net>\n"
 "Language-Team: Norwegian Bokmaal <i18n-nb@lister.ping.uio.no>\n"
 "Language: nb_NO\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"X-Generator: Poedit 1.5.7\n"
+"X-Generator: Poedit 1.6.9\n"
 
 msgid "format wasn't negotiated before get function"
 msgstr "formatet ble ikke forhandlet før get-funksjon"
 
-msgid "default GStreamer sound events audiosink"
-msgstr "standard GStreamer lydhendelser-audiosink"
-
-msgid ""
-"GStreamer can play audio using any number of output elements. Some possible "
-"choices are osssink, pulsesink and alsasink. The audiosink can be a partial "
-"pipeline instead of just one element."
-msgstr ""
-"GStreamer kan spille av lyd ved hjelp av en rekke utgangselementer. Noen "
-"mulige valg er osssink, pulsesink og alsasink. Audiosinken kan være en "
-"delvis kommandokø i stedet for bare ett element."
-
-msgid "description for default GStreamer sound events audiosink"
-msgstr "beskrivelse for standard GStreamer lydhendelser-audiosink"
-
-msgid "Describes the selected audiosink element."
-msgstr "beskriver standard audiosinkelement."
-
-msgid "default GStreamer audiosink for Audio/Video Conferencing"
-msgstr "Standard GStreamer-audiosink for Lyd/Video-konferanser"
-
-msgid ""
-"description for default GStreamer audiosink for Audio/Video Conferencing"
-msgstr "beskrivelse for standard GStreamer-audiosink for musikk og filmer"
-
-msgid "default GStreamer audiosink for Music and Movies"
-msgstr "standard GStreamer-audiosink for musikk og filmer"
-
-msgid "description for default GStreamer audiosink for Music and Movies"
-msgstr "beskrivelse for standard GStreamer-audiosink for musikk og filmer"
-
-msgid "default GStreamer videosink"
-msgstr "standard GStreamer-videosink"
-
-msgid ""
-"GStreamer can play video using any number of output elements. Some possible "
-"choices are xvimagesink, ximagesink, sdlvideosink and aasink. The videosink "
-"can be a partial pipeline instead of just one element."
-msgstr ""
-"GStreamer kan spille video ved hjelp av en rekke utgangselementer. Noen "
-"mulige valg er xvimagesink, ximagesink, sdlvideosink og aasink. Videosinken "
-"kan være en delvis kommandokø i stedet for bare ett element."
-
-msgid "description for default GStreamer videosink"
-msgstr "beskrivelse for standard GStreamer-videosink"
-
-msgid "Describes the selected videosink element."
-msgstr "Beskriver det valgte videosink-element."
-
-msgid "default GStreamer audiosrc"
-msgstr "standard GStreamer-audiosrc"
-
-msgid ""
-"GStreamer can record audio using any number of input elements. Some possible "
-"choices are osssrc, pulsesrc and alsasrc. The audio source can be a partial "
-"pipeline instead of just one element."
-msgstr ""
-"GStreamer kan ta opp lyd ved hjelp av en rekke dataobjekter. Noen mulige "
-"valg er osssrc, pulsesrc og alsasrc. Lydkilden kan være en delvis kommandokø "
-"i stedet for bare ett element."
-
-msgid "description for default GStreamer audiosrc"
-msgstr "beskrivelse for standard GStreamer-audiosrc"
-
-msgid "Describes the selected audiosrc element."
-msgstr "Beskriver det valgte audiosrc-elementet"
-
-msgid "default GStreamer videosrc"
-msgstr "standard GStreamer-videosrc"
-
-msgid ""
-"GStreamer can record video from any number of input elements. Some possible "
-"choices are v4lsrc, v4l2src and videotestsrc. The video source can be a "
-"partial pipeline instead of just one element."
-msgstr ""
-"GStreamer kan ta opp video fra en rekke dataobjekter. Noen mulige valg er "
-"v4lsrc, v4l2src og videotestsrc. Videokilden kan være en delvis kommandokø i "
-"stedet for bare ett element."
-
-msgid "description for default GStreamer videosrc"
-msgstr "beskrivelse for standard GStreamer-videosrc"
-
-msgid "Describes the selected videosrc element."
-msgstr "Beskriver det valgte videosrc-elementet"
-
-msgid "default GStreamer visualization"
-msgstr "standard GStreamer-visualisering"
-
-msgid ""
-"GStreamer can put visualization plugins in a pipeline to transform audio "
-"streams in video frames. Some possible choices are goom, goom2k1 and "
-"synaesthesia. The visualization plugin can be a partial pipeline instead of "
-"just one element."
-msgstr ""
-"GStreamer kan sette visualiseringsplugins i en rørledning til å forvandle "
-"lydstrømmer i videobilder. Noen mulige valg er goom, goom2k1 og "
-"synaesthesia. Visualiseringsplugin kan være en delvis kommandokø i stedet "
-"for bare ett element."
-
-msgid "description for default GStreamer visualization"
-msgstr "beskrivelse for standard GStreamer-visualisering"
-
-msgid "Describes the selected visualization element."
-msgstr "Beskriver valgt visualiseringselement."
-
 msgid "OpenCV failed to load template image"
 msgstr "OpenCV kunne ikke laste mal-bilde"
 
@@ -181,9 +76,8 @@
 msgstr ""
 "Filplassering er satt til NULL, vennligst sett den til et gyldig filnavn"
 
-#, fuzzy
 msgid "Digitalzoom element couldn't be created"
-msgstr "Digitalzoom element kunne ikke opprettes"
+msgstr "Digitalzoom-element kunne ikke opprettes"
 
 msgid "Subpicture format was not configured before data flow"
 msgstr "Underbildeformat er ikke konfigurert før dataflyt"
@@ -242,6 +136,111 @@
 msgid "Couldn't find details for DVB channel %s"
 msgstr "Kunne ikke finne detaljer for DVB-kanal %s"
 
+#~ msgid "default GStreamer sound events audiosink"
+#~ msgstr "standard GStreamer lydhendelser-audiosink"
+
+#~ msgid ""
+#~ "GStreamer can play audio using any number of output elements. Some "
+#~ "possible choices are osssink, pulsesink and alsasink. The audiosink can "
+#~ "be a partial pipeline instead of just one element."
+#~ msgstr ""
+#~ "GStreamer kan spille av lyd ved hjelp av en rekke utgangselementer. Noen "
+#~ "mulige valg er osssink, pulsesink og alsasink. Audiosinken kan være en "
+#~ "delvis kommandokø i stedet for bare ett element."
+
+#~ msgid "description for default GStreamer sound events audiosink"
+#~ msgstr "beskrivelse for standard GStreamer lydhendelser-audiosink"
+
+#~ msgid "Describes the selected audiosink element."
+#~ msgstr "beskriver standard audiosinkelement."
+
+#~ msgid "default GStreamer audiosink for Audio/Video Conferencing"
+#~ msgstr "Standard GStreamer-audiosink for Lyd/Video-konferanser"
+
+#~ msgid ""
+#~ "description for default GStreamer audiosink for Audio/Video Conferencing"
+#~ msgstr "beskrivelse for standard GStreamer-audiosink for musikk og filmer"
+
+#~ msgid "default GStreamer audiosink for Music and Movies"
+#~ msgstr "standard GStreamer-audiosink for musikk og filmer"
+
+#~ msgid "description for default GStreamer audiosink for Music and Movies"
+#~ msgstr "beskrivelse for standard GStreamer-audiosink for musikk og filmer"
+
+#~ msgid "default GStreamer videosink"
+#~ msgstr "standard GStreamer-videosink"
+
+#~ msgid ""
+#~ "GStreamer can play video using any number of output elements. Some "
+#~ "possible choices are xvimagesink, ximagesink, sdlvideosink and aasink. "
+#~ "The videosink can be a partial pipeline instead of just one element."
+#~ msgstr ""
+#~ "GStreamer kan spille video ved hjelp av en rekke utgangselementer. Noen "
+#~ "mulige valg er xvimagesink, ximagesink, sdlvideosink og aasink. "
+#~ "Videosinken kan være en delvis kommandokø i stedet for bare ett element."
+
+#~ msgid "description for default GStreamer videosink"
+#~ msgstr "beskrivelse for standard GStreamer-videosink"
+
+#~ msgid "Describes the selected videosink element."
+#~ msgstr "Beskriver det valgte videosink-element."
+
+#~ msgid "default GStreamer audiosrc"
+#~ msgstr "standard GStreamer-audiosrc"
+
+#~ msgid ""
+#~ "GStreamer can record audio using any number of input elements. Some "
+#~ "possible choices are osssrc, pulsesrc and alsasrc. The audio source can "
+#~ "be a partial pipeline instead of just one element."
+#~ msgstr ""
+#~ "GStreamer kan ta opp lyd ved hjelp av en rekke dataobjekter. Noen mulige "
+#~ "valg er osssrc, pulsesrc og alsasrc. Lydkilden kan være en delvis "
+#~ "kommandokø i stedet for bare ett element."
+
+#~ msgid "description for default GStreamer audiosrc"
+#~ msgstr "beskrivelse for standard GStreamer-audiosrc"
+
+#~ msgid "Describes the selected audiosrc element."
+#~ msgstr "Beskriver det valgte audiosrc-elementet"
+
+#~ msgid "default GStreamer videosrc"
+#~ msgstr "standard GStreamer-videosrc"
+
+#~ msgid ""
+#~ "GStreamer can record video from any number of input elements. Some "
+#~ "possible choices are v4lsrc, v4l2src and videotestsrc. The video source "
+#~ "can be a partial pipeline instead of just one element."
+#~ msgstr ""
+#~ "GStreamer kan ta opp video fra en rekke dataobjekter. Noen mulige valg er "
+#~ "v4lsrc, v4l2src og videotestsrc. Videokilden kan være en delvis "
+#~ "kommandokø i stedet for bare ett element."
+
+#~ msgid "description for default GStreamer videosrc"
+#~ msgstr "beskrivelse for standard GStreamer-videosrc"
+
+#~ msgid "Describes the selected videosrc element."
+#~ msgstr "Beskriver det valgte videosrc-elementet"
+
+#~ msgid "default GStreamer visualization"
+#~ msgstr "standard GStreamer-visualisering"
+
+#~ msgid ""
+#~ "GStreamer can put visualization plugins in a pipeline to transform audio "
+#~ "streams in video frames. Some possible choices are goom, goom2k1 and "
+#~ "synaesthesia. The visualization plugin can be a partial pipeline instead "
+#~ "of just one element."
+#~ msgstr ""
+#~ "GStreamer kan sette visualiseringsplugins i en rørledning til å forvandle "
+#~ "lydstrømmer i videobilder. Noen mulige valg er goom, goom2k1 og "
+#~ "synaesthesia. Visualiseringsplugin kan være en delvis kommandokø i stedet "
+#~ "for bare ett element."
+
+#~ msgid "description for default GStreamer visualization"
+#~ msgstr "beskrivelse for standard GStreamer-visualisering"
+
+#~ msgid "Describes the selected visualization element."
+#~ msgstr "Beskriver valgt visualiseringselement."
+
 #~ msgid "Couldn't get the Manifest's URI"
 #~ msgstr "Kunne ikke hente Manifest-nettadressen."
 
diff --git a/po/nl.gmo b/po/nl.gmo
index 3455648..d27702c 100644
--- a/po/nl.gmo
+++ b/po/nl.gmo
Binary files differ
diff --git a/po/nl.po b/po/nl.po
index 0dc93dc..f7cbe4f 100644
--- a/po/nl.po
+++ b/po/nl.po
@@ -2,13 +2,13 @@
 # Copyright (C) 2004, 2007, 2008, 2009 Free Software Foundation, Inc.
 #
 # This file is distributed under the same license as the gst-plugins-bad package.
-# Freek de Kruijf <f.de.kruijf@gmail.com>, 2007, 2008, 2009, 2011, 2013, 2014, 2015.
+# Freek de Kruijf <f.de.kruijf@gmail.com>, 2007, 2008, 2009, 2011, 2013, 2014, 2015, 2016.
 msgid ""
 msgstr ""
-"Project-Id-Version: gst-plugins-bad 1.6.0\n"
+"Project-Id-Version: gst-plugins-bad 1.7.2\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2016-01-20 14:17+0200\n"
-"PO-Revision-Date: 2015-10-17 12:35+0200\n"
+"POT-Creation-Date: 2016-03-15 11:41+0200\n"
+"PO-Revision-Date: 2016-02-20 12:35+0100\n"
 "Last-Translator: Freek de Kruijf <f.de.kruijf@gmail.com>\n"
 "Language-Team: Dutch <vertaling@vrijschrift.org>\n"
 "Language: nl\n"
@@ -21,113 +21,6 @@
 msgid "format wasn't negotiated before get function"
 msgstr "formaat is niet onderhandeld vóór get-functie"
 
-msgid "default GStreamer sound events audiosink"
-msgstr "standaard GStreamer audiosink voor geluidsgebeurtenissen"
-
-msgid ""
-"GStreamer can play audio using any number of output elements. Some possible "
-"choices are osssink, pulsesink and alsasink. The audiosink can be a partial "
-"pipeline instead of just one element."
-msgstr ""
-"GStreamer kan geluid afspelen met elk aantal uitvoerelementen. Enige "
-"mogelijke keuzes zijn osssink, pulsesink en alsasink. De audiosink kan een "
-"gedeeltelijke pipeline zijn in plaats van gewoon één element."
-
-msgid "description for default GStreamer sound events audiosink"
-msgstr ""
-"beschrijving van standaard GStreamer audiosink voor geluidsgebeurtenissen"
-
-msgid "Describes the selected audiosink element."
-msgstr "Beschrijft het geselecteerde audiosink-element."
-
-msgid "default GStreamer audiosink for Audio/Video Conferencing"
-msgstr "standaard GStreamer audiosink voor audio/videoconferenties"
-
-msgid ""
-"description for default GStreamer audiosink for Audio/Video Conferencing"
-msgstr ""
-"beschrijving van standaard GStreamer audiosink voor audio/videoconferenties"
-
-msgid "default GStreamer audiosink for Music and Movies"
-msgstr "standaard GStreamer audiosink voor muziek en film"
-
-msgid "description for default GStreamer audiosink for Music and Movies"
-msgstr "beschrijving van standaard GStreamer audiosink voor muziek en film"
-
-msgid "default GStreamer videosink"
-msgstr "standaard GStreamer videosink"
-
-msgid ""
-"GStreamer can play video using any number of output elements. Some possible "
-"choices are xvimagesink, ximagesink, sdlvideosink and aasink. The videosink "
-"can be a partial pipeline instead of just one element."
-msgstr ""
-"GStreamer kan video afspelen met elk aantal uitvoerelementen Enige mogelijke "
-"keuzes zijn xvimagesink, ximagesink, sdlvideosink en aasink. De videosink "
-"kan een gedeeltelijke pipeline zijn in plaats van gewoon één element."
-
-msgid "description for default GStreamer videosink"
-msgstr "beschrijving van standaard GStreamer videosink"
-
-msgid "Describes the selected videosink element."
-msgstr "Beschrijft het geselecteerde videosink-element."
-
-msgid "default GStreamer audiosrc"
-msgstr "standaard GStreamer audiobron"
-
-msgid ""
-"GStreamer can record audio using any number of input elements. Some possible "
-"choices are osssrc, pulsesrc and alsasrc. The audio source can be a partial "
-"pipeline instead of just one element."
-msgstr ""
-"GStreamer kan geluid opnemen met elk aantal invoerelementen. Enige mogelijke "
-"keuzes zijn osssrc, pulsesrc en alsasrc. De audiobron kan een gedeeltelijke "
-"pipeline zijn in plaats van gewoon één element."
-
-msgid "description for default GStreamer audiosrc"
-msgstr "beschrijving van standaard GStreamer audiobron"
-
-msgid "Describes the selected audiosrc element."
-msgstr "Beschrijft het geselecteerde audiobron-element."
-
-msgid "default GStreamer videosrc"
-msgstr "standaard GStreamer videobron"
-
-msgid ""
-"GStreamer can record video from any number of input elements. Some possible "
-"choices are v4lsrc, v4l2src and videotestsrc. The video source can be a "
-"partial pipeline instead of just one element."
-msgstr ""
-"GStreamer kan video opnemen met elk aantal invoerelementen. Enige mogelijke "
-"keuzes zijn v4lsrc, v4l2src en videotestsrc. De videobron kan een "
-"gedeeltelijke pipeline zijn in plaats van gewoon één element."
-
-msgid "description for default GStreamer videosrc"
-msgstr "beschrijving van standaard GStreamer videobron"
-
-msgid "Describes the selected videosrc element."
-msgstr "Beschrijft het geselecteerde videobron-element."
-
-msgid "default GStreamer visualization"
-msgstr "standaard GStreamer visualisatie"
-
-msgid ""
-"GStreamer can put visualization plugins in a pipeline to transform audio "
-"streams in video frames. Some possible choices are goom, goom2k1 and "
-"synaesthesia. The visualization plugin can be a partial pipeline instead of "
-"just one element."
-msgstr ""
-"GStreamer kan visualisatieplug-ins in een pipeline stoppen om audiostreams "
-"te transformeren in videoframes. Enige mogelijke keuzes zijn goom, goom2k1 "
-"en synaesthesia. De visualisatieplug-in kan een gedeeltelijke pipeline zijn "
-"in plaats van gewoon één element."
-
-msgid "description for default GStreamer visualization"
-msgstr "beschrijving van standaard GStreamer visualisatie"
-
-msgid "Describes the selected visualization element."
-msgstr "Beschrijft het geselecteerde visualisatie-element."
-
 msgid "OpenCV failed to load template image"
 msgstr "OpenCV kon sjabloonafbeelding niet laden"
 
@@ -248,6 +141,115 @@
 msgid "Couldn't find details for DVB channel %s"
 msgstr "Kon de details voor het DVB-kanaal %s niet vinden"
 
+#~ msgid "default GStreamer sound events audiosink"
+#~ msgstr "standaard GStreamer audiosink voor geluidsgebeurtenissen"
+
+#~ msgid ""
+#~ "GStreamer can play audio using any number of output elements. Some "
+#~ "possible choices are osssink, pulsesink and alsasink. The audiosink can "
+#~ "be a partial pipeline instead of just one element."
+#~ msgstr ""
+#~ "GStreamer kan geluid afspelen met elk aantal uitvoerelementen. Enige "
+#~ "mogelijke keuzes zijn osssink, pulsesink en alsasink. De audiosink kan "
+#~ "een gedeeltelijke pipeline zijn in plaats van gewoon één element."
+
+#~ msgid "description for default GStreamer sound events audiosink"
+#~ msgstr ""
+#~ "beschrijving van standaard GStreamer audiosink voor geluidsgebeurtenissen"
+
+#~ msgid "Describes the selected audiosink element."
+#~ msgstr "Beschrijft het geselecteerde audiosink-element."
+
+#~ msgid "default GStreamer audiosink for Audio/Video Conferencing"
+#~ msgstr "standaard GStreamer audiosink voor audio/videoconferenties"
+
+#~ msgid ""
+#~ "description for default GStreamer audiosink for Audio/Video Conferencing"
+#~ msgstr ""
+#~ "beschrijving van standaard GStreamer audiosink voor audio/"
+#~ "videoconferenties"
+
+#~ msgid "default GStreamer audiosink for Music and Movies"
+#~ msgstr "standaard GStreamer audiosink voor muziek en film"
+
+#~ msgid "description for default GStreamer audiosink for Music and Movies"
+#~ msgstr "beschrijving van standaard GStreamer audiosink voor muziek en film"
+
+#~ msgid "default GStreamer videosink"
+#~ msgstr "standaard GStreamer videosink"
+
+#~ msgid ""
+#~ "GStreamer can play video using any number of output elements. Some "
+#~ "possible choices are xvimagesink, ximagesink, sdlvideosink and aasink. "
+#~ "The videosink can be a partial pipeline instead of just one element."
+#~ msgstr ""
+#~ "GStreamer kan video afspelen met elk aantal uitvoerelementen Enige "
+#~ "mogelijke keuzes zijn xvimagesink, ximagesink, sdlvideosink en aasink. De "
+#~ "videosink kan een gedeeltelijke pipeline zijn in plaats van gewoon één "
+#~ "element."
+
+#~ msgid "description for default GStreamer videosink"
+#~ msgstr "beschrijving van standaard GStreamer videosink"
+
+#~ msgid "Describes the selected videosink element."
+#~ msgstr "Beschrijft het geselecteerde videosink-element."
+
+#~ msgid "default GStreamer audiosrc"
+#~ msgstr "standaard GStreamer audiobron"
+
+#~ msgid ""
+#~ "GStreamer can record audio using any number of input elements. Some "
+#~ "possible choices are osssrc, pulsesrc and alsasrc. The audio source can "
+#~ "be a partial pipeline instead of just one element."
+#~ msgstr ""
+#~ "GStreamer kan geluid opnemen met elk aantal invoerelementen. Enige "
+#~ "mogelijke keuzes zijn osssrc, pulsesrc en alsasrc. De audiobron kan een "
+#~ "gedeeltelijke pipeline zijn in plaats van gewoon één element."
+
+#~ msgid "description for default GStreamer audiosrc"
+#~ msgstr "beschrijving van standaard GStreamer audiobron"
+
+#~ msgid "Describes the selected audiosrc element."
+#~ msgstr "Beschrijft het geselecteerde audiobron-element."
+
+#~ msgid "default GStreamer videosrc"
+#~ msgstr "standaard GStreamer videobron"
+
+#~ msgid ""
+#~ "GStreamer can record video from any number of input elements. Some "
+#~ "possible choices are v4lsrc, v4l2src and videotestsrc. The video source "
+#~ "can be a partial pipeline instead of just one element."
+#~ msgstr ""
+#~ "GStreamer kan video opnemen met elk aantal invoerelementen. Enige "
+#~ "mogelijke keuzes zijn v4lsrc, v4l2src en videotestsrc. De videobron kan "
+#~ "een gedeeltelijke pipeline zijn in plaats van gewoon één element."
+
+#~ msgid "description for default GStreamer videosrc"
+#~ msgstr "beschrijving van standaard GStreamer videobron"
+
+#~ msgid "Describes the selected videosrc element."
+#~ msgstr "Beschrijft het geselecteerde videobron-element."
+
+#~ msgid "default GStreamer visualization"
+#~ msgstr "standaard GStreamer visualisatie"
+
+#~ msgid ""
+#~ "GStreamer can put visualization plugins in a pipeline to transform audio "
+#~ "streams in video frames. Some possible choices are goom, goom2k1 and "
+#~ "synaesthesia. The visualization plugin can be a partial pipeline instead "
+#~ "of just one element."
+#~ msgstr ""
+#~ "GStreamer kan visualisatieplug-ins in een pipeline stoppen om "
+#~ "audiostreams te transformeren in videoframes. Enige mogelijke keuzes zijn "
+#~ "goom, goom2k1 en synaesthesia. De visualisatieplug-in kan een "
+#~ "gedeeltelijke pipeline zijn in plaats van gewoon één element."
+
+#~ msgid "description for default GStreamer visualization"
+#~ msgstr "beschrijving van standaard GStreamer visualisatie"
+
+#~ msgid "Describes the selected visualization element."
+#~ msgstr "Beschrijft het geselecteerde visualisatie-element."
+
 #~ msgid "Couldn't get the Manifest's URI"
 #~ msgstr "De URI van het manifest verkrijgen lukt niet"
 
diff --git a/po/or.gmo b/po/or.gmo
index 3cdb675..6d5b58f 100644
--- a/po/or.gmo
+++ b/po/or.gmo
Binary files differ
diff --git a/po/or.po b/po/or.po
index 418dc99..f1e5d7f 100644
--- a/po/or.po
+++ b/po/or.po
@@ -8,7 +8,7 @@
 msgstr ""
 "Project-Id-Version: gst-plugins-0.8.3\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2016-01-20 14:17+0200\n"
+"POT-Creation-Date: 2016-03-15 11:41+0200\n"
 "PO-Revision-Date: 2004-09-27 13:32+0530\n"
 "Last-Translator: Gora Mohanty <gora_mohanty@yahoo.co.in>\n"
 "Language-Team: Oriya <gora_mohanty@yahoo.co.in>\n"
@@ -20,95 +20,6 @@
 msgid "format wasn't negotiated before get function"
 msgstr ""
 
-msgid "default GStreamer sound events audiosink"
-msgstr ""
-
-msgid ""
-"GStreamer can play audio using any number of output elements. Some possible "
-"choices are osssink, pulsesink and alsasink. The audiosink can be a partial "
-"pipeline instead of just one element."
-msgstr ""
-
-msgid "description for default GStreamer sound events audiosink"
-msgstr ""
-
-msgid "Describes the selected audiosink element."
-msgstr ""
-
-msgid "default GStreamer audiosink for Audio/Video Conferencing"
-msgstr ""
-
-msgid ""
-"description for default GStreamer audiosink for Audio/Video Conferencing"
-msgstr ""
-
-msgid "default GStreamer audiosink for Music and Movies"
-msgstr ""
-
-msgid "description for default GStreamer audiosink for Music and Movies"
-msgstr ""
-
-msgid "default GStreamer videosink"
-msgstr ""
-
-msgid ""
-"GStreamer can play video using any number of output elements. Some possible "
-"choices are xvimagesink, ximagesink, sdlvideosink and aasink. The videosink "
-"can be a partial pipeline instead of just one element."
-msgstr ""
-
-msgid "description for default GStreamer videosink"
-msgstr ""
-
-msgid "Describes the selected videosink element."
-msgstr ""
-
-msgid "default GStreamer audiosrc"
-msgstr ""
-
-msgid ""
-"GStreamer can record audio using any number of input elements. Some possible "
-"choices are osssrc, pulsesrc and alsasrc. The audio source can be a partial "
-"pipeline instead of just one element."
-msgstr ""
-
-msgid "description for default GStreamer audiosrc"
-msgstr ""
-
-msgid "Describes the selected audiosrc element."
-msgstr ""
-
-msgid "default GStreamer videosrc"
-msgstr ""
-
-msgid ""
-"GStreamer can record video from any number of input elements. Some possible "
-"choices are v4lsrc, v4l2src and videotestsrc. The video source can be a "
-"partial pipeline instead of just one element."
-msgstr ""
-
-msgid "description for default GStreamer videosrc"
-msgstr ""
-
-msgid "Describes the selected videosrc element."
-msgstr ""
-
-msgid "default GStreamer visualization"
-msgstr ""
-
-msgid ""
-"GStreamer can put visualization plugins in a pipeline to transform audio "
-"streams in video frames. Some possible choices are goom, goom2k1 and "
-"synaesthesia. The visualization plugin can be a partial pipeline instead of "
-"just one element."
-msgstr ""
-
-msgid "description for default GStreamer visualization"
-msgstr ""
-
-msgid "Describes the selected visualization element."
-msgstr ""
-
 msgid "OpenCV failed to load template image"
 msgstr ""
 
diff --git a/po/pl.gmo b/po/pl.gmo
index e8a4906..b911bb4 100644
--- a/po/pl.gmo
+++ b/po/pl.gmo
Binary files differ
diff --git a/po/pl.po b/po/pl.po
index 4b5dad8..8279deb 100644
--- a/po/pl.po
+++ b/po/pl.po
@@ -6,7 +6,7 @@
 msgstr ""
 "Project-Id-Version: gst-plugins-bad 1.6.0\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2016-01-20 14:17+0200\n"
+"POT-Creation-Date: 2016-03-15 11:41+0200\n"
 "PO-Revision-Date: 2015-10-15 20:50+0200\n"
 "Last-Translator: Jakub Bogusz <qboosh@pld-linux.org>\n"
 "Language-Team: Polish <translation-team-pl@lists.sourceforge.net>\n"
@@ -18,117 +18,6 @@
 msgid "format wasn't negotiated before get function"
 msgstr "format nie został wynegocjowany przed funkcją pobrania"
 
-msgid "default GStreamer sound events audiosink"
-msgstr "domyślny element GStreamera pochłaniający zdarzenia dźwiękowe"
-
-msgid ""
-"GStreamer can play audio using any number of output elements. Some possible "
-"choices are osssink, pulsesink and alsasink. The audiosink can be a partial "
-"pipeline instead of just one element."
-msgstr ""
-"GStreamer może odtwarzać dźwięk przy użyciu dowolnej liczby elementów "
-"wyjściowych. Niektóre z możliwości to osssink, pulsesink oraz alsasink. "
-"Wyjście dźwięku może być częściowym potokiem zamiast pojedynczego elementu."
-
-msgid "description for default GStreamer sound events audiosink"
-msgstr ""
-"opis domyślnego elementu GStreamera pochłaniającego zdarzenia dźwiękowe"
-
-msgid "Describes the selected audiosink element."
-msgstr "Opisuje wybrany element wyjściowy dźwięku."
-
-msgid "default GStreamer audiosink for Audio/Video Conferencing"
-msgstr ""
-"domyślny element GStreamera pochłaniający dźwięk dla konferencji audio/video"
-
-msgid ""
-"description for default GStreamer audiosink for Audio/Video Conferencing"
-msgstr ""
-"opis domyślnego elementu wyjściowego dźwięku GStreamera dla konferencji "
-"audio/video"
-
-msgid "default GStreamer audiosink for Music and Movies"
-msgstr "domyślny element wyjściowy dźwięku GStreamera dla muzyki i filmów"
-
-msgid "description for default GStreamer audiosink for Music and Movies"
-msgstr ""
-"opis domyślnego elementu wyjściowego dźwięku GStreamera dla muzyki i filmów"
-
-msgid "default GStreamer videosink"
-msgstr "domyślny element GStreamera pochłaniający obraz"
-
-msgid ""
-"GStreamer can play video using any number of output elements. Some possible "
-"choices are xvimagesink, ximagesink, sdlvideosink and aasink. The videosink "
-"can be a partial pipeline instead of just one element."
-msgstr ""
-"GStreamer może odtwarzać obraz przy użyciu dowolnej liczby elementów "
-"wyjściowych. Niektóre z możliwości to xvimagesink, ximagesink, sdlvideosink "
-"oraz aasink. Wyjście obrazu może być częściowym potokiem zamiast "
-"pojedynczego elementu."
-
-msgid "description for default GStreamer videosink"
-msgstr "opis domyślnego elementu GStreamera pochłaniającego obraz"
-
-msgid "Describes the selected videosink element."
-msgstr "Opisuje wybrany element wyjściowy obrazu."
-
-msgid "default GStreamer audiosrc"
-msgstr "domyślne źródło dźwięku GStreamera"
-
-msgid ""
-"GStreamer can record audio using any number of input elements. Some possible "
-"choices are osssrc, pulsesrc and alsasrc. The audio source can be a partial "
-"pipeline instead of just one element."
-msgstr ""
-"GStreamer może nagrywać dźwięk z dowolnej liczby elementów wejściowych. "
-"Niektóre możliwości to osssrc, pulsesrc oraz alsasrc. Źródło dźwięku może "
-"być częściowym potokiem zamiast pojedynczego elementu."
-
-msgid "description for default GStreamer audiosrc"
-msgstr "opis domyślnego źródła dźwięku GStreamera"
-
-msgid "Describes the selected audiosrc element."
-msgstr "Opisuje wybrany element źródłowy dźwięku."
-
-msgid "default GStreamer videosrc"
-msgstr "domyślne źródło obrazu GStreamera"
-
-msgid ""
-"GStreamer can record video from any number of input elements. Some possible "
-"choices are v4lsrc, v4l2src and videotestsrc. The video source can be a "
-"partial pipeline instead of just one element."
-msgstr ""
-"GStreamer może nagrywać obraz z dowolnej liczby elementów wejściowych. "
-"Niektóre możliwości to v4lsrc, v4l2src oraz videotestsrc. Źródło obrazu może "
-"być częściowym potokiem zamiast pojedynczego elementu."
-
-msgid "description for default GStreamer videosrc"
-msgstr "opis domyślnego źródła obrazu GStreamera"
-
-msgid "Describes the selected videosrc element."
-msgstr "Opisuje wybrany element źródłowy obrazu."
-
-msgid "default GStreamer visualization"
-msgstr "domyślna wizualizacja GStreamera"
-
-msgid ""
-"GStreamer can put visualization plugins in a pipeline to transform audio "
-"streams in video frames. Some possible choices are goom, goom2k1 and "
-"synaesthesia. The visualization plugin can be a partial pipeline instead of "
-"just one element."
-msgstr ""
-"GStreamer może umieszczać wtyczki wizualizujące w potoku w celu "
-"przekształcania strumieni dźwiękowych na klatki obrazu. Niektóre możliwości "
-"to goom, goom2k1 oraz synaesthesia. Wtyczka wizualizująca może być "
-"częściowym potokiem zamiast pojedynczego elementu."
-
-msgid "description for default GStreamer visualization"
-msgstr "opis domyślego elementu wizualizującego GStreamera"
-
-msgid "Describes the selected visualization element."
-msgstr "Opisuje wybrany element wizualizujący."
-
 msgid "OpenCV failed to load template image"
 msgstr "Odczyt obrazu wzorca przez OpenCV nie powiódł się"
 
@@ -247,3 +136,117 @@
 #, c-format
 msgid "Couldn't find details for DVB channel %s"
 msgstr "Nie udało się odnaleźć szczegółów dla kanału DVB %s"
+
+#~ msgid "default GStreamer sound events audiosink"
+#~ msgstr "domyślny element GStreamera pochłaniający zdarzenia dźwiękowe"
+
+#~ msgid ""
+#~ "GStreamer can play audio using any number of output elements. Some "
+#~ "possible choices are osssink, pulsesink and alsasink. The audiosink can "
+#~ "be a partial pipeline instead of just one element."
+#~ msgstr ""
+#~ "GStreamer może odtwarzać dźwięk przy użyciu dowolnej liczby elementów "
+#~ "wyjściowych. Niektóre z możliwości to osssink, pulsesink oraz alsasink. "
+#~ "Wyjście dźwięku może być częściowym potokiem zamiast pojedynczego "
+#~ "elementu."
+
+#~ msgid "description for default GStreamer sound events audiosink"
+#~ msgstr ""
+#~ "opis domyślnego elementu GStreamera pochłaniającego zdarzenia dźwiękowe"
+
+#~ msgid "Describes the selected audiosink element."
+#~ msgstr "Opisuje wybrany element wyjściowy dźwięku."
+
+#~ msgid "default GStreamer audiosink for Audio/Video Conferencing"
+#~ msgstr ""
+#~ "domyślny element GStreamera pochłaniający dźwięk dla konferencji audio/"
+#~ "video"
+
+#~ msgid ""
+#~ "description for default GStreamer audiosink for Audio/Video Conferencing"
+#~ msgstr ""
+#~ "opis domyślnego elementu wyjściowego dźwięku GStreamera dla konferencji "
+#~ "audio/video"
+
+#~ msgid "default GStreamer audiosink for Music and Movies"
+#~ msgstr "domyślny element wyjściowy dźwięku GStreamera dla muzyki i filmów"
+
+#~ msgid "description for default GStreamer audiosink for Music and Movies"
+#~ msgstr ""
+#~ "opis domyślnego elementu wyjściowego dźwięku GStreamera dla muzyki i "
+#~ "filmów"
+
+#~ msgid "default GStreamer videosink"
+#~ msgstr "domyślny element GStreamera pochłaniający obraz"
+
+#~ msgid ""
+#~ "GStreamer can play video using any number of output elements. Some "
+#~ "possible choices are xvimagesink, ximagesink, sdlvideosink and aasink. "
+#~ "The videosink can be a partial pipeline instead of just one element."
+#~ msgstr ""
+#~ "GStreamer może odtwarzać obraz przy użyciu dowolnej liczby elementów "
+#~ "wyjściowych. Niektóre z możliwości to xvimagesink, ximagesink, "
+#~ "sdlvideosink oraz aasink. Wyjście obrazu może być częściowym potokiem "
+#~ "zamiast pojedynczego elementu."
+
+#~ msgid "description for default GStreamer videosink"
+#~ msgstr "opis domyślnego elementu GStreamera pochłaniającego obraz"
+
+#~ msgid "Describes the selected videosink element."
+#~ msgstr "Opisuje wybrany element wyjściowy obrazu."
+
+#~ msgid "default GStreamer audiosrc"
+#~ msgstr "domyślne źródło dźwięku GStreamera"
+
+#~ msgid ""
+#~ "GStreamer can record audio using any number of input elements. Some "
+#~ "possible choices are osssrc, pulsesrc and alsasrc. The audio source can "
+#~ "be a partial pipeline instead of just one element."
+#~ msgstr ""
+#~ "GStreamer może nagrywać dźwięk z dowolnej liczby elementów wejściowych. "
+#~ "Niektóre możliwości to osssrc, pulsesrc oraz alsasrc. Źródło dźwięku może "
+#~ "być częściowym potokiem zamiast pojedynczego elementu."
+
+#~ msgid "description for default GStreamer audiosrc"
+#~ msgstr "opis domyślnego źródła dźwięku GStreamera"
+
+#~ msgid "Describes the selected audiosrc element."
+#~ msgstr "Opisuje wybrany element źródłowy dźwięku."
+
+#~ msgid "default GStreamer videosrc"
+#~ msgstr "domyślne źródło obrazu GStreamera"
+
+#~ msgid ""
+#~ "GStreamer can record video from any number of input elements. Some "
+#~ "possible choices are v4lsrc, v4l2src and videotestsrc. The video source "
+#~ "can be a partial pipeline instead of just one element."
+#~ msgstr ""
+#~ "GStreamer może nagrywać obraz z dowolnej liczby elementów wejściowych. "
+#~ "Niektóre możliwości to v4lsrc, v4l2src oraz videotestsrc. Źródło obrazu "
+#~ "może być częściowym potokiem zamiast pojedynczego elementu."
+
+#~ msgid "description for default GStreamer videosrc"
+#~ msgstr "opis domyślnego źródła obrazu GStreamera"
+
+#~ msgid "Describes the selected videosrc element."
+#~ msgstr "Opisuje wybrany element źródłowy obrazu."
+
+#~ msgid "default GStreamer visualization"
+#~ msgstr "domyślna wizualizacja GStreamera"
+
+#~ msgid ""
+#~ "GStreamer can put visualization plugins in a pipeline to transform audio "
+#~ "streams in video frames. Some possible choices are goom, goom2k1 and "
+#~ "synaesthesia. The visualization plugin can be a partial pipeline instead "
+#~ "of just one element."
+#~ msgstr ""
+#~ "GStreamer może umieszczać wtyczki wizualizujące w potoku w celu "
+#~ "przekształcania strumieni dźwiękowych na klatki obrazu. Niektóre "
+#~ "możliwości to goom, goom2k1 oraz synaesthesia. Wtyczka wizualizująca może "
+#~ "być częściowym potokiem zamiast pojedynczego elementu."
+
+#~ msgid "description for default GStreamer visualization"
+#~ msgstr "opis domyślego elementu wizualizującego GStreamera"
+
+#~ msgid "Describes the selected visualization element."
+#~ msgstr "Opisuje wybrany element wizualizujący."
diff --git a/po/pt_BR.gmo b/po/pt_BR.gmo
index f0a306d..f3bbdc6 100644
--- a/po/pt_BR.gmo
+++ b/po/pt_BR.gmo
Binary files differ
diff --git a/po/pt_BR.po b/po/pt_BR.po
index e022e33..bc30dce 100644
--- a/po/pt_BR.po
+++ b/po/pt_BR.po
@@ -6,10 +6,10 @@
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: gst-plugins-bad-1.4.1\n"
+"Project-Id-Version: gst-plugins-bad-1.7.1\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2016-01-20 14:17+0200\n"
-"PO-Revision-Date: 2015-02-01 18:24-0200\n"
+"POT-Creation-Date: 2016-03-15 11:41+0200\n"
+"PO-Revision-Date: 2015-12-28 17:03-0200\n"
 "Last-Translator: Fabrício Godoy <skarllot@gmail.com>\n"
 "Language-Team: Brazilian Portuguese <ldpbr-translation@lists.sourceforge."
 "net>\n"
@@ -22,122 +22,8 @@
 msgid "format wasn't negotiated before get function"
 msgstr "O formato não foi negociado antes da chamada da função"
 
-msgid "default GStreamer sound events audiosink"
-msgstr "audiosink do GStreamer pré-definido para eventos de som"
-
-#, fuzzy
-msgid ""
-"GStreamer can play audio using any number of output elements. Some possible "
-"choices are osssink, pulsesink and alsasink. The audiosink can be a partial "
-"pipeline instead of just one element."
-msgstr ""
-"O GStreamer pode reproduzir áudio utilizando qualquer quantidade de "
-"elementos de saída. Algumas das opções possíveis são osssink, pulsesink e "
-"alsasink. O audiosink pode ser uma fila de processamento parcial em vez de "
-"apenas um elemento."
-
-msgid "description for default GStreamer sound events audiosink"
-msgstr ""
-"descrição para o audiosink do GStreamer pré-definido para eventos de som"
-
-msgid "Describes the selected audiosink element."
-msgstr "Descreve o elemento audiosink selecionado."
-
-msgid "default GStreamer audiosink for Audio/Video Conferencing"
-msgstr "audiosink do GStreamer pré-definido para Conferência de Áudio e Vídeo"
-
-msgid ""
-"description for default GStreamer audiosink for Audio/Video Conferencing"
-msgstr ""
-"descrição do audiosink do GStreamer pré-definido para Conferência de Áudio e "
-"Vídeo"
-
-msgid "default GStreamer audiosink for Music and Movies"
-msgstr "audiosink do GStreamer pré-definido para Músicas e Filmes"
-
-msgid "description for default GStreamer audiosink for Music and Movies"
-msgstr ""
-"descrição para o audiosink do GStreamer pré-definido para Músicas e Filmes"
-
-msgid "default GStreamer videosink"
-msgstr "videosink do GStreamer pré-definido"
-
-msgid ""
-"GStreamer can play video using any number of output elements. Some possible "
-"choices are xvimagesink, ximagesink, sdlvideosink and aasink. The videosink "
-"can be a partial pipeline instead of just one element."
-msgstr ""
-"O GStreamer pode reproduzir vídeo utilizando qualquer quantidade de "
-"elementos de saída. Algumas das opções possíveis são xvimagesink, "
-"ximagesink, sdlvideosink e aasink. O videosink pode ser uma fila de "
-"processamento parcial em vez de apenas um elemento."
-
-msgid "description for default GStreamer videosink"
-msgstr "descrição para o videosink do GStreamer pré-definido"
-
-msgid "Describes the selected videosink element."
-msgstr "Descreve o elemento videosink selecionado."
-
-msgid "default GStreamer audiosrc"
-msgstr "audiosrc do GStreamer pré-definido"
-
-msgid ""
-"GStreamer can record audio using any number of input elements. Some possible "
-"choices are osssrc, pulsesrc and alsasrc. The audio source can be a partial "
-"pipeline instead of just one element."
-msgstr ""
-"O GStreamer pode gravar áudio utilizando qualquer quantidade de elementos de "
-"entrada. Algumas das opções possíveis são osssrc, pulsesrc e alsasrc. A "
-"fonte de áudio pode ser uma fila de processamento parcial em vez de apenas "
-"um elemento."
-
-msgid "description for default GStreamer audiosrc"
-msgstr "descrição para o audiosrc do GStreamer pré-definido"
-
-msgid "Describes the selected audiosrc element."
-msgstr "Descreve o elemento audiosrc selecionado."
-
-msgid "default GStreamer videosrc"
-msgstr "videosrc do GStreamer pré-definido"
-
-msgid ""
-"GStreamer can record video from any number of input elements. Some possible "
-"choices are v4lsrc, v4l2src and videotestsrc. The video source can be a "
-"partial pipeline instead of just one element."
-msgstr ""
-"O GStreamer pode gravar vídeo de qualquer quantidade de elementos de "
-"entrada. Algumas das opções possíveis são v4lsrc, v4l2src e videotestsrc. A "
-"fonte de vídeo pode ser uma fila de processamento parcial em vez de apenas "
-"um elemento."
-
-msgid "description for default GStreamer videosrc"
-msgstr "descrição para o videosrc do GStreamer pré-definido"
-
-msgid "Describes the selected videosrc element."
-msgstr "Descreve o elemento videosrc selecionado."
-
-msgid "default GStreamer visualization"
-msgstr "visualização do GStreamer pré-definida"
-
-msgid ""
-"GStreamer can put visualization plugins in a pipeline to transform audio "
-"streams in video frames. Some possible choices are goom, goom2k1 and "
-"synaesthesia. The visualization plugin can be a partial pipeline instead of "
-"just one element."
-msgstr ""
-"O GStreamer pode colocar plugins de visualização numa fila de processamento "
-"para transformar fluxos de áudio em quadros de vídeo. Algumas das opções "
-"possíveis são goom, goom2k1 e synaesthesia. O plugin de visualização pode "
-"ser uma fila de processamento parcial em vez de apenas um elemento."
-
-msgid "description for default GStreamer visualization"
-msgstr "descrição da visualização do GStreamer pré-definida"
-
-msgid "Describes the selected visualization element."
-msgstr "Descreve o elemento de visualização selecionado."
-
 msgid "OpenCV failed to load template image"
-msgstr ""
+msgstr "O OpenCV falhou ao carregar a imagem modelo"
 
 msgid "Could not read title information for DVD."
 msgstr "Não foi possível ler as informações de título do DVD."
@@ -194,7 +80,7 @@
 "A localização do arquivo está NULA, favor definir um nome de arquivo válido"
 
 msgid "Digitalzoom element couldn't be created"
-msgstr ""
+msgstr "O elemento Digitalzoom não pôde ser criado"
 
 msgid "Subpicture format was not configured before data flow"
 msgstr "O formato de subimagem não foi configurado antes do fluxo de dados"
@@ -258,6 +144,121 @@
 msgid "Couldn't find details for DVB channel %s"
 msgstr "Não foi possível encontrar detalhes para o canal DVB %s"
 
+#~ msgid "default GStreamer sound events audiosink"
+#~ msgstr "audiosink do GStreamer pré-definido para eventos de som"
+
+#~ msgid ""
+#~ "GStreamer can play audio using any number of output elements. Some "
+#~ "possible choices are osssink, pulsesink and alsasink. The audiosink can "
+#~ "be a partial pipeline instead of just one element."
+#~ msgstr ""
+#~ "O GStreamer pode reproduzir áudio utilizando qualquer quantidade de "
+#~ "elementos de saída. Algumas das opções possíveis são osssink, pulsesink e "
+#~ "alsasink. O audiosink pode ser uma fila de processamento parcial em vez "
+#~ "de apenas um elemento."
+
+#~ msgid "description for default GStreamer sound events audiosink"
+#~ msgstr ""
+#~ "descrição para o audiosink do GStreamer pré-definido para eventos de som"
+
+#~ msgid "Describes the selected audiosink element."
+#~ msgstr "Descreve o elemento audiosink selecionado."
+
+#~ msgid "default GStreamer audiosink for Audio/Video Conferencing"
+#~ msgstr ""
+#~ "audiosink do GStreamer pré-definido para Conferência de Áudio e Vídeo"
+
+#~ msgid ""
+#~ "description for default GStreamer audiosink for Audio/Video Conferencing"
+#~ msgstr ""
+#~ "descrição do audiosink do GStreamer pré-definido para Conferência de "
+#~ "Áudio e Vídeo"
+
+#~ msgid "default GStreamer audiosink for Music and Movies"
+#~ msgstr "audiosink do GStreamer pré-definido para Músicas e Filmes"
+
+#~ msgid "description for default GStreamer audiosink for Music and Movies"
+#~ msgstr ""
+#~ "descrição para o audiosink do GStreamer pré-definido para Músicas e Filmes"
+
+#~ msgid "default GStreamer videosink"
+#~ msgstr "videosink do GStreamer pré-definido"
+
+#~ msgid ""
+#~ "GStreamer can play video using any number of output elements. Some "
+#~ "possible choices are xvimagesink, ximagesink, sdlvideosink and aasink. "
+#~ "The videosink can be a partial pipeline instead of just one element."
+#~ msgstr ""
+#~ "O GStreamer pode reproduzir vídeo utilizando qualquer quantidade de "
+#~ "elementos de saída. Algumas das opções possíveis são xvimagesink, "
+#~ "ximagesink, sdlvideosink e aasink. O videosink pode ser uma fila de "
+#~ "processamento parcial em vez de apenas um elemento."
+
+#~ msgid "description for default GStreamer videosink"
+#~ msgstr "descrição para o videosink do GStreamer pré-definido"
+
+#~ msgid "Describes the selected videosink element."
+#~ msgstr "Descreve o elemento videosink selecionado."
+
+#~ msgid "default GStreamer audiosrc"
+#~ msgstr "audiosrc do GStreamer pré-definido"
+
+#~ msgid ""
+#~ "GStreamer can record audio using any number of input elements. Some "
+#~ "possible choices are osssrc, pulsesrc and alsasrc. The audio source can "
+#~ "be a partial pipeline instead of just one element."
+#~ msgstr ""
+#~ "O GStreamer pode gravar áudio utilizando qualquer quantidade de elementos "
+#~ "de entrada. Algumas das opções possíveis são osssrc, pulsesrc e alsasrc. "
+#~ "A fonte de áudio pode ser uma fila de processamento parcial em vez de "
+#~ "apenas um elemento."
+
+#~ msgid "description for default GStreamer audiosrc"
+#~ msgstr "descrição para o audiosrc do GStreamer pré-definido"
+
+#~ msgid "Describes the selected audiosrc element."
+#~ msgstr "Descreve o elemento audiosrc selecionado."
+
+#~ msgid "default GStreamer videosrc"
+#~ msgstr "videosrc do GStreamer pré-definido"
+
+#~ msgid ""
+#~ "GStreamer can record video from any number of input elements. Some "
+#~ "possible choices are v4lsrc, v4l2src and videotestsrc. The video source "
+#~ "can be a partial pipeline instead of just one element."
+#~ msgstr ""
+#~ "O GStreamer pode gravar vídeo de qualquer quantidade de elementos de "
+#~ "entrada. Algumas das opções possíveis são v4lsrc, v4l2src e videotestsrc. "
+#~ "A fonte de vídeo pode ser uma fila de processamento parcial em vez de "
+#~ "apenas um elemento."
+
+#~ msgid "description for default GStreamer videosrc"
+#~ msgstr "descrição para o videosrc do GStreamer pré-definido"
+
+#~ msgid "Describes the selected videosrc element."
+#~ msgstr "Descreve o elemento videosrc selecionado."
+
+#~ msgid "default GStreamer visualization"
+#~ msgstr "visualização do GStreamer pré-definida"
+
+#~ msgid ""
+#~ "GStreamer can put visualization plugins in a pipeline to transform audio "
+#~ "streams in video frames. Some possible choices are goom, goom2k1 and "
+#~ "synaesthesia. The visualization plugin can be a partial pipeline instead "
+#~ "of just one element."
+#~ msgstr ""
+#~ "O GStreamer pode colocar plugins de visualização numa fila de "
+#~ "processamento para transformar fluxos de áudio em quadros de vídeo. "
+#~ "Algumas das opções possíveis são goom, goom2k1 e synaesthesia. O plugin "
+#~ "de visualização pode ser uma fila de processamento parcial em vez de "
+#~ "apenas um elemento."
+
+#~ msgid "description for default GStreamer visualization"
+#~ msgstr "descrição da visualização do GStreamer pré-definida"
+
+#~ msgid "Describes the selected visualization element."
+#~ msgstr "Descreve o elemento de visualização selecionado."
+
 #~ msgid "Couldn't get the Manifest's URI"
 #~ msgstr "Não foi possível obter a URI do manifesto"
 
diff --git a/po/ro.gmo b/po/ro.gmo
index 909104c..b4282ad 100644
--- a/po/ro.gmo
+++ b/po/ro.gmo
Binary files differ
diff --git a/po/ro.po b/po/ro.po
index 79d448f..57c0580 100644
--- a/po/ro.po
+++ b/po/ro.po
@@ -5,7 +5,7 @@
 msgstr ""
 "Project-Id-Version: gst-plugins-bad 0.10.18.2\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2016-01-20 14:17+0200\n"
+"POT-Creation-Date: 2016-03-15 11:41+0200\n"
 "PO-Revision-Date: 2010-08-16 03:11+0300\n"
 "Last-Translator: Lucian Adrian Grijincu <lucian.grijincu@gmail.com>\n"
 "Language-Team: Romanian <translation-team-ro@lists.sourceforge.net>\n"
@@ -20,95 +20,6 @@
 msgid "format wasn't negotiated before get function"
 msgstr ""
 
-msgid "default GStreamer sound events audiosink"
-msgstr ""
-
-msgid ""
-"GStreamer can play audio using any number of output elements. Some possible "
-"choices are osssink, pulsesink and alsasink. The audiosink can be a partial "
-"pipeline instead of just one element."
-msgstr ""
-
-msgid "description for default GStreamer sound events audiosink"
-msgstr ""
-
-msgid "Describes the selected audiosink element."
-msgstr ""
-
-msgid "default GStreamer audiosink for Audio/Video Conferencing"
-msgstr ""
-
-msgid ""
-"description for default GStreamer audiosink for Audio/Video Conferencing"
-msgstr ""
-
-msgid "default GStreamer audiosink for Music and Movies"
-msgstr ""
-
-msgid "description for default GStreamer audiosink for Music and Movies"
-msgstr ""
-
-msgid "default GStreamer videosink"
-msgstr ""
-
-msgid ""
-"GStreamer can play video using any number of output elements. Some possible "
-"choices are xvimagesink, ximagesink, sdlvideosink and aasink. The videosink "
-"can be a partial pipeline instead of just one element."
-msgstr ""
-
-msgid "description for default GStreamer videosink"
-msgstr ""
-
-msgid "Describes the selected videosink element."
-msgstr ""
-
-msgid "default GStreamer audiosrc"
-msgstr ""
-
-msgid ""
-"GStreamer can record audio using any number of input elements. Some possible "
-"choices are osssrc, pulsesrc and alsasrc. The audio source can be a partial "
-"pipeline instead of just one element."
-msgstr ""
-
-msgid "description for default GStreamer audiosrc"
-msgstr ""
-
-msgid "Describes the selected audiosrc element."
-msgstr ""
-
-msgid "default GStreamer videosrc"
-msgstr ""
-
-msgid ""
-"GStreamer can record video from any number of input elements. Some possible "
-"choices are v4lsrc, v4l2src and videotestsrc. The video source can be a "
-"partial pipeline instead of just one element."
-msgstr ""
-
-msgid "description for default GStreamer videosrc"
-msgstr ""
-
-msgid "Describes the selected videosrc element."
-msgstr ""
-
-msgid "default GStreamer visualization"
-msgstr ""
-
-msgid ""
-"GStreamer can put visualization plugins in a pipeline to transform audio "
-"streams in video frames. Some possible choices are goom, goom2k1 and "
-"synaesthesia. The visualization plugin can be a partial pipeline instead of "
-"just one element."
-msgstr ""
-
-msgid "description for default GStreamer visualization"
-msgstr ""
-
-msgid "Describes the selected visualization element."
-msgstr ""
-
 msgid "OpenCV failed to load template image"
 msgstr ""
 
diff --git a/po/ru.gmo b/po/ru.gmo
index 826cab8..698b1bf 100644
--- a/po/ru.gmo
+++ b/po/ru.gmo
Binary files differ
diff --git a/po/ru.po b/po/ru.po
index 6a160d4..d6f9834 100644
--- a/po/ru.po
+++ b/po/ru.po
@@ -8,7 +8,7 @@
 msgstr ""
 "Project-Id-Version: gst-plugins-bad 1.6.0\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2016-01-20 14:17+0200\n"
+"POT-Creation-Date: 2016-03-15 11:41+0200\n"
 "PO-Revision-Date: 2015-10-18 13:40+0300\n"
 "Last-Translator: Yuri Kozlov <yuray@komyakino.ru>\n"
 "Language-Team: Russian <gnu@d07.ru>\n"
@@ -23,110 +23,6 @@
 msgid "format wasn't negotiated before get function"
 msgstr "перед функцией получения не был согласован формат"
 
-msgid "default GStreamer sound events audiosink"
-msgstr "GStreamer audiosink по умолчанию для звуковых событий"
-
-msgid ""
-"GStreamer can play audio using any number of output elements. Some possible "
-"choices are osssink, pulsesink and alsasink. The audiosink can be a partial "
-"pipeline instead of just one element."
-msgstr ""
-"GStreamer может воспроизводить аудио через любое количество выходных "
-"элементов. Некоторые варианты: osssink, pulsesink и alsasink. Audiosink "
-"может быть конвейером, а не одиночным элементом."
-
-msgid "description for default GStreamer sound events audiosink"
-msgstr "описание GStreamer audiosink по умолчанию для звуковых событий"
-
-msgid "Describes the selected audiosink element."
-msgstr "Описывает выбранный элемент audiosink."
-
-msgid "default GStreamer audiosink for Audio/Video Conferencing"
-msgstr "GStreamer audiosink по умолчанию для аудио-видео конференций"
-
-msgid ""
-"description for default GStreamer audiosink for Audio/Video Conferencing"
-msgstr "описание GStreamer audiosink по умолчанию для аудио-видео конференций"
-
-msgid "default GStreamer audiosink for Music and Movies"
-msgstr "GStreamer audiosink по умолчанию для музыки и фильмов"
-
-msgid "description for default GStreamer audiosink for Music and Movies"
-msgstr "описание GStreamer audiosink по умолчанию для музыки и фильмов"
-
-msgid "default GStreamer videosink"
-msgstr "GStreamer videosink по умолчанию"
-
-msgid ""
-"GStreamer can play video using any number of output elements. Some possible "
-"choices are xvimagesink, ximagesink, sdlvideosink and aasink. The videosink "
-"can be a partial pipeline instead of just one element."
-msgstr ""
-"GStreamer может воспроизводить видео через любой выходной элемент. Некоторые "
-"варианты: xvimagesink, ximagesink, sdlvideosink и aasink. Videosink может "
-"быть конвейером, а не одиночным элементом."
-
-msgid "description for default GStreamer videosink"
-msgstr "описание GStreamer videosink по умолчанию"
-
-msgid "Describes the selected videosink element."
-msgstr "Описывает выбранный элемент videosink."
-
-msgid "default GStreamer audiosrc"
-msgstr "GStreamer audiosrc по умолчанию"
-
-msgid ""
-"GStreamer can record audio using any number of input elements. Some possible "
-"choices are osssrc, pulsesrc and alsasrc. The audio source can be a partial "
-"pipeline instead of just one element."
-msgstr ""
-"GStreamer может записывать аудио с любого входного элемента. Некоторые "
-"варианты: osssrc, pulsesrc и alsasrc. Источником аудио может быть конвейер, "
-"а не одиночный элемент."
-
-msgid "description for default GStreamer audiosrc"
-msgstr "описание GStreamer audiosrc по умолчанию"
-
-msgid "Describes the selected audiosrc element."
-msgstr "Описывает выбранный элемент audiosrc."
-
-msgid "default GStreamer videosrc"
-msgstr "GStreamer videosrc по умолчанию"
-
-msgid ""
-"GStreamer can record video from any number of input elements. Some possible "
-"choices are v4lsrc, v4l2src and videotestsrc. The video source can be a "
-"partial pipeline instead of just one element."
-msgstr ""
-"GStreamer может записывать видео с любого входного элемента. Некоторые "
-"варианты: v4lsrc, v4l2src и videotestsrc. Источником видео может быть "
-"конвейер, а не одиночный элемент."
-
-msgid "description for default GStreamer videosrc"
-msgstr "описание GStreamer videosrc по умолчанию"
-
-msgid "Describes the selected videosrc element."
-msgstr "Описывает выбранный элемент videosrc."
-
-msgid "default GStreamer visualization"
-msgstr "GStreamer visualization по умолчанию"
-
-msgid ""
-"GStreamer can put visualization plugins in a pipeline to transform audio "
-"streams in video frames. Some possible choices are goom, goom2k1 and "
-"synaesthesia. The visualization plugin can be a partial pipeline instead of "
-"just one element."
-msgstr ""
-"GStreamer может помещать модули визуализации для преобразования аудио "
-"потоков видео фрагментов. Некоторые варианты: goom, goom2k1 и synaesthesia. "
-"Модуль визуализации может быть конвейером, а не одиночным элементом."
-
-msgid "description for default GStreamer visualization"
-msgstr "описание GStreamer visualization по умолчанию"
-
-msgid "Describes the selected visualization element."
-msgstr "Описывает выбранный элемент visualization."
-
 msgid "OpenCV failed to load template image"
 msgstr "Ошибка OpenCV при загрузке шаблона изображения"
 
@@ -245,6 +141,112 @@
 msgid "Couldn't find details for DVB channel %s"
 msgstr "Не удалось найти настройки DVB-канала %s"
 
+#~ msgid "default GStreamer sound events audiosink"
+#~ msgstr "GStreamer audiosink по умолчанию для звуковых событий"
+
+#~ msgid ""
+#~ "GStreamer can play audio using any number of output elements. Some "
+#~ "possible choices are osssink, pulsesink and alsasink. The audiosink can "
+#~ "be a partial pipeline instead of just one element."
+#~ msgstr ""
+#~ "GStreamer может воспроизводить аудио через любое количество выходных "
+#~ "элементов. Некоторые варианты: osssink, pulsesink и alsasink. Audiosink "
+#~ "может быть конвейером, а не одиночным элементом."
+
+#~ msgid "description for default GStreamer sound events audiosink"
+#~ msgstr "описание GStreamer audiosink по умолчанию для звуковых событий"
+
+#~ msgid "Describes the selected audiosink element."
+#~ msgstr "Описывает выбранный элемент audiosink."
+
+#~ msgid "default GStreamer audiosink for Audio/Video Conferencing"
+#~ msgstr "GStreamer audiosink по умолчанию для аудио-видео конференций"
+
+#~ msgid ""
+#~ "description for default GStreamer audiosink for Audio/Video Conferencing"
+#~ msgstr ""
+#~ "описание GStreamer audiosink по умолчанию для аудио-видео конференций"
+
+#~ msgid "default GStreamer audiosink for Music and Movies"
+#~ msgstr "GStreamer audiosink по умолчанию для музыки и фильмов"
+
+#~ msgid "description for default GStreamer audiosink for Music and Movies"
+#~ msgstr "описание GStreamer audiosink по умолчанию для музыки и фильмов"
+
+#~ msgid "default GStreamer videosink"
+#~ msgstr "GStreamer videosink по умолчанию"
+
+#~ msgid ""
+#~ "GStreamer can play video using any number of output elements. Some "
+#~ "possible choices are xvimagesink, ximagesink, sdlvideosink and aasink. "
+#~ "The videosink can be a partial pipeline instead of just one element."
+#~ msgstr ""
+#~ "GStreamer может воспроизводить видео через любой выходной элемент. "
+#~ "Некоторые варианты: xvimagesink, ximagesink, sdlvideosink и aasink. "
+#~ "Videosink может быть конвейером, а не одиночным элементом."
+
+#~ msgid "description for default GStreamer videosink"
+#~ msgstr "описание GStreamer videosink по умолчанию"
+
+#~ msgid "Describes the selected videosink element."
+#~ msgstr "Описывает выбранный элемент videosink."
+
+#~ msgid "default GStreamer audiosrc"
+#~ msgstr "GStreamer audiosrc по умолчанию"
+
+#~ msgid ""
+#~ "GStreamer can record audio using any number of input elements. Some "
+#~ "possible choices are osssrc, pulsesrc and alsasrc. The audio source can "
+#~ "be a partial pipeline instead of just one element."
+#~ msgstr ""
+#~ "GStreamer может записывать аудио с любого входного элемента. Некоторые "
+#~ "варианты: osssrc, pulsesrc и alsasrc. Источником аудио может быть "
+#~ "конвейер, а не одиночный элемент."
+
+#~ msgid "description for default GStreamer audiosrc"
+#~ msgstr "описание GStreamer audiosrc по умолчанию"
+
+#~ msgid "Describes the selected audiosrc element."
+#~ msgstr "Описывает выбранный элемент audiosrc."
+
+#~ msgid "default GStreamer videosrc"
+#~ msgstr "GStreamer videosrc по умолчанию"
+
+#~ msgid ""
+#~ "GStreamer can record video from any number of input elements. Some "
+#~ "possible choices are v4lsrc, v4l2src and videotestsrc. The video source "
+#~ "can be a partial pipeline instead of just one element."
+#~ msgstr ""
+#~ "GStreamer может записывать видео с любого входного элемента. Некоторые "
+#~ "варианты: v4lsrc, v4l2src и videotestsrc. Источником видео может быть "
+#~ "конвейер, а не одиночный элемент."
+
+#~ msgid "description for default GStreamer videosrc"
+#~ msgstr "описание GStreamer videosrc по умолчанию"
+
+#~ msgid "Describes the selected videosrc element."
+#~ msgstr "Описывает выбранный элемент videosrc."
+
+#~ msgid "default GStreamer visualization"
+#~ msgstr "GStreamer visualization по умолчанию"
+
+#~ msgid ""
+#~ "GStreamer can put visualization plugins in a pipeline to transform audio "
+#~ "streams in video frames. Some possible choices are goom, goom2k1 and "
+#~ "synaesthesia. The visualization plugin can be a partial pipeline instead "
+#~ "of just one element."
+#~ msgstr ""
+#~ "GStreamer может помещать модули визуализации для преобразования аудио "
+#~ "потоков видео фрагментов. Некоторые варианты: goom, goom2k1 и "
+#~ "synaesthesia. Модуль визуализации может быть конвейером, а не одиночным "
+#~ "элементом."
+
+#~ msgid "description for default GStreamer visualization"
+#~ msgstr "описание GStreamer visualization по умолчанию"
+
+#~ msgid "Describes the selected visualization element."
+#~ msgstr "Описывает выбранный элемент visualization."
+
 #~ msgid "Couldn't get the Manifest's URI"
 #~ msgstr "Не удалось получить URI манифеста"
 
diff --git a/po/sk.gmo b/po/sk.gmo
index ae60cd8..457f5e0 100644
--- a/po/sk.gmo
+++ b/po/sk.gmo
Binary files differ
diff --git a/po/sk.po b/po/sk.po
index c6d8c34..32e5101 100644
--- a/po/sk.po
+++ b/po/sk.po
@@ -8,7 +8,7 @@
 msgstr ""
 "Project-Id-Version: gst-plugins-bad 1.2.1\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2016-01-20 14:17+0200\n"
+"POT-Creation-Date: 2016-03-15 11:41+0200\n"
 "PO-Revision-Date: 2014-01-30 10:44+0100\n"
 "Last-Translator: Peter Tuharsky <tuharsky@misbb.sk>\n"
 "Language-Team: Slovak <sk-i18n@lists.linux.sk>\n"
@@ -24,95 +24,6 @@
 msgid "format wasn't negotiated before get function"
 msgstr ""
 
-msgid "default GStreamer sound events audiosink"
-msgstr ""
-
-msgid ""
-"GStreamer can play audio using any number of output elements. Some possible "
-"choices are osssink, pulsesink and alsasink. The audiosink can be a partial "
-"pipeline instead of just one element."
-msgstr ""
-
-msgid "description for default GStreamer sound events audiosink"
-msgstr ""
-
-msgid "Describes the selected audiosink element."
-msgstr ""
-
-msgid "default GStreamer audiosink for Audio/Video Conferencing"
-msgstr ""
-
-msgid ""
-"description for default GStreamer audiosink for Audio/Video Conferencing"
-msgstr ""
-
-msgid "default GStreamer audiosink for Music and Movies"
-msgstr ""
-
-msgid "description for default GStreamer audiosink for Music and Movies"
-msgstr ""
-
-msgid "default GStreamer videosink"
-msgstr ""
-
-msgid ""
-"GStreamer can play video using any number of output elements. Some possible "
-"choices are xvimagesink, ximagesink, sdlvideosink and aasink. The videosink "
-"can be a partial pipeline instead of just one element."
-msgstr ""
-
-msgid "description for default GStreamer videosink"
-msgstr ""
-
-msgid "Describes the selected videosink element."
-msgstr ""
-
-msgid "default GStreamer audiosrc"
-msgstr ""
-
-msgid ""
-"GStreamer can record audio using any number of input elements. Some possible "
-"choices are osssrc, pulsesrc and alsasrc. The audio source can be a partial "
-"pipeline instead of just one element."
-msgstr ""
-
-msgid "description for default GStreamer audiosrc"
-msgstr ""
-
-msgid "Describes the selected audiosrc element."
-msgstr ""
-
-msgid "default GStreamer videosrc"
-msgstr ""
-
-msgid ""
-"GStreamer can record video from any number of input elements. Some possible "
-"choices are v4lsrc, v4l2src and videotestsrc. The video source can be a "
-"partial pipeline instead of just one element."
-msgstr ""
-
-msgid "description for default GStreamer videosrc"
-msgstr ""
-
-msgid "Describes the selected videosrc element."
-msgstr ""
-
-msgid "default GStreamer visualization"
-msgstr ""
-
-msgid ""
-"GStreamer can put visualization plugins in a pipeline to transform audio "
-"streams in video frames. Some possible choices are goom, goom2k1 and "
-"synaesthesia. The visualization plugin can be a partial pipeline instead of "
-"just one element."
-msgstr ""
-
-msgid "description for default GStreamer visualization"
-msgstr ""
-
-msgid "Describes the selected visualization element."
-msgstr ""
-
 msgid "OpenCV failed to load template image"
 msgstr ""
 
diff --git a/po/sl.gmo b/po/sl.gmo
index bccbe18..ec0adfb 100644
--- a/po/sl.gmo
+++ b/po/sl.gmo
Binary files differ
diff --git a/po/sl.po b/po/sl.po
index 70d027b..8302370 100644
--- a/po/sl.po
+++ b/po/sl.po
@@ -8,7 +8,7 @@
 msgstr ""
 "Project-Id-Version: gst-plugins-bad 0.10.21.2\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2016-01-20 14:17+0200\n"
+"POT-Creation-Date: 2016-03-15 11:41+0200\n"
 "PO-Revision-Date: 2011-04-26 15:21+0100\n"
 "Last-Translator: Klemen Košir <klemen.kosir@gmx.com>\n"
 "Language-Team: Slovenian <translation-team-sl@lists.sourceforge.net>\n"
@@ -25,95 +25,6 @@
 msgid "format wasn't negotiated before get function"
 msgstr ""
 
-msgid "default GStreamer sound events audiosink"
-msgstr ""
-
-msgid ""
-"GStreamer can play audio using any number of output elements. Some possible "
-"choices are osssink, pulsesink and alsasink. The audiosink can be a partial "
-"pipeline instead of just one element."
-msgstr ""
-
-msgid "description for default GStreamer sound events audiosink"
-msgstr ""
-
-msgid "Describes the selected audiosink element."
-msgstr ""
-
-msgid "default GStreamer audiosink for Audio/Video Conferencing"
-msgstr ""
-
-msgid ""
-"description for default GStreamer audiosink for Audio/Video Conferencing"
-msgstr ""
-
-msgid "default GStreamer audiosink for Music and Movies"
-msgstr ""
-
-msgid "description for default GStreamer audiosink for Music and Movies"
-msgstr ""
-
-msgid "default GStreamer videosink"
-msgstr ""
-
-msgid ""
-"GStreamer can play video using any number of output elements. Some possible "
-"choices are xvimagesink, ximagesink, sdlvideosink and aasink. The videosink "
-"can be a partial pipeline instead of just one element."
-msgstr ""
-
-msgid "description for default GStreamer videosink"
-msgstr ""
-
-msgid "Describes the selected videosink element."
-msgstr ""
-
-msgid "default GStreamer audiosrc"
-msgstr ""
-
-msgid ""
-"GStreamer can record audio using any number of input elements. Some possible "
-"choices are osssrc, pulsesrc and alsasrc. The audio source can be a partial "
-"pipeline instead of just one element."
-msgstr ""
-
-msgid "description for default GStreamer audiosrc"
-msgstr ""
-
-msgid "Describes the selected audiosrc element."
-msgstr ""
-
-msgid "default GStreamer videosrc"
-msgstr ""
-
-msgid ""
-"GStreamer can record video from any number of input elements. Some possible "
-"choices are v4lsrc, v4l2src and videotestsrc. The video source can be a "
-"partial pipeline instead of just one element."
-msgstr ""
-
-msgid "description for default GStreamer videosrc"
-msgstr ""
-
-msgid "Describes the selected videosrc element."
-msgstr ""
-
-msgid "default GStreamer visualization"
-msgstr ""
-
-msgid ""
-"GStreamer can put visualization plugins in a pipeline to transform audio "
-"streams in video frames. Some possible choices are goom, goom2k1 and "
-"synaesthesia. The visualization plugin can be a partial pipeline instead of "
-"just one element."
-msgstr ""
-
-msgid "description for default GStreamer visualization"
-msgstr ""
-
-msgid "Describes the selected visualization element."
-msgstr ""
-
 msgid "OpenCV failed to load template image"
 msgstr ""
 
diff --git a/po/sq.gmo b/po/sq.gmo
index 5178226..9bfec38 100644
--- a/po/sq.gmo
+++ b/po/sq.gmo
Binary files differ
diff --git a/po/sq.po b/po/sq.po
index e45e192..067894c 100644
--- a/po/sq.po
+++ b/po/sq.po
@@ -6,7 +6,7 @@
 msgstr ""
 "Project-Id-Version: gst-plugins-bad 0.10.7.2\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2016-01-20 14:17+0200\n"
+"POT-Creation-Date: 2016-03-15 11:41+0200\n"
 "PO-Revision-Date: 2008-08-15 16:07+0200\n"
 "Last-Translator: Laurent Dhima <laurenti@alblinux.net>\n"
 "Language-Team: Albanian <translation-team-sq@lists.sourceforge.net>\n"
@@ -18,95 +18,6 @@
 msgid "format wasn't negotiated before get function"
 msgstr ""
 
-msgid "default GStreamer sound events audiosink"
-msgstr ""
-
-msgid ""
-"GStreamer can play audio using any number of output elements. Some possible "
-"choices are osssink, pulsesink and alsasink. The audiosink can be a partial "
-"pipeline instead of just one element."
-msgstr ""
-
-msgid "description for default GStreamer sound events audiosink"
-msgstr ""
-
-msgid "Describes the selected audiosink element."
-msgstr ""
-
-msgid "default GStreamer audiosink for Audio/Video Conferencing"
-msgstr ""
-
-msgid ""
-"description for default GStreamer audiosink for Audio/Video Conferencing"
-msgstr ""
-
-msgid "default GStreamer audiosink for Music and Movies"
-msgstr ""
-
-msgid "description for default GStreamer audiosink for Music and Movies"
-msgstr ""
-
-msgid "default GStreamer videosink"
-msgstr ""
-
-msgid ""
-"GStreamer can play video using any number of output elements. Some possible "
-"choices are xvimagesink, ximagesink, sdlvideosink and aasink. The videosink "
-"can be a partial pipeline instead of just one element."
-msgstr ""
-
-msgid "description for default GStreamer videosink"
-msgstr ""
-
-msgid "Describes the selected videosink element."
-msgstr ""
-
-msgid "default GStreamer audiosrc"
-msgstr ""
-
-msgid ""
-"GStreamer can record audio using any number of input elements. Some possible "
-"choices are osssrc, pulsesrc and alsasrc. The audio source can be a partial "
-"pipeline instead of just one element."
-msgstr ""
-
-msgid "description for default GStreamer audiosrc"
-msgstr ""
-
-msgid "Describes the selected audiosrc element."
-msgstr ""
-
-msgid "default GStreamer videosrc"
-msgstr ""
-
-msgid ""
-"GStreamer can record video from any number of input elements. Some possible "
-"choices are v4lsrc, v4l2src and videotestsrc. The video source can be a "
-"partial pipeline instead of just one element."
-msgstr ""
-
-msgid "description for default GStreamer videosrc"
-msgstr ""
-
-msgid "Describes the selected videosrc element."
-msgstr ""
-
-msgid "default GStreamer visualization"
-msgstr ""
-
-msgid ""
-"GStreamer can put visualization plugins in a pipeline to transform audio "
-"streams in video frames. Some possible choices are goom, goom2k1 and "
-"synaesthesia. The visualization plugin can be a partial pipeline instead of "
-"just one element."
-msgstr ""
-
-msgid "description for default GStreamer visualization"
-msgstr ""
-
-msgid "Describes the selected visualization element."
-msgstr ""
-
 msgid "OpenCV failed to load template image"
 msgstr ""
 
diff --git a/po/sr.gmo b/po/sr.gmo
index 3e5e231..f406545 100644
--- a/po/sr.gmo
+++ b/po/sr.gmo
Binary files differ
diff --git a/po/sr.po b/po/sr.po
index d050188..038285e 100644
--- a/po/sr.po
+++ b/po/sr.po
@@ -2,13 +2,13 @@
 # Copyright (C) 2014 Free Software Foundation, Inc.
 # This file is distributed under the same license as the gst-plugins-bad package.
 # Danilo Segan <dsegan@gmx.net>, 2004.
-# Мирослав Николић <miroslavnikolic@rocketmail.com>, 2011—2014.
+# Мирослав Николић <miroslavnikolic@rocketmail.com>, 2011—2015.
 msgid ""
 msgstr ""
-"Project-Id-Version: gst-plugins-bad-1.4.1\n"
+"Project-Id-Version: gst-plugins-bad-1.6.0\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2016-01-20 14:17+0200\n"
-"PO-Revision-Date: 2014-09-13 10:39+0200\n"
+"POT-Creation-Date: 2016-03-15 11:41+0200\n"
+"PO-Revision-Date: 2015-12-24 11:34+0200\n"
 "Last-Translator: Мирослав Николић <miroslavnikolic@rocketmail.com>\n"
 "Language-Team: Serbian <(nothing)>\n"
 "Language: sr\n"
@@ -21,115 +21,8 @@
 msgid "format wasn't negotiated before get function"
 msgstr "запис није договорен пре функције добављања (get)"
 
-msgid "default GStreamer sound events audiosink"
-msgstr "основни аудио усклађивач звучних догађаја Гстримера"
-
-#, fuzzy
-msgid ""
-"GStreamer can play audio using any number of output elements. Some possible "
-"choices are osssink, pulsesink and alsasink. The audiosink can be a partial "
-"pipeline instead of just one element."
-msgstr ""
-"Гстример може да пушта аудио користећи било који број излазних елемената. "
-"Неки могући избори су „osssink“, „pulsesink“ и „alsasink“. Аудио усклађивач "
-"може бити делимична спојка уместо само једног елемента."
-
-msgid "description for default GStreamer sound events audiosink"
-msgstr "опис основног аудио усклађивача звучних догађаја Гстримера"
-
-msgid "Describes the selected audiosink element."
-msgstr "Описује изабрани елемент аудио усклађивача."
-
-msgid "default GStreamer audiosink for Audio/Video Conferencing"
-msgstr "основни аудио усклађивач Гстримера за аудио/видео састанчење"
-
-msgid ""
-"description for default GStreamer audiosink for Audio/Video Conferencing"
-msgstr "опис основног аудио усклађивач Гстримера за аудио/видео састанчење"
-
-msgid "default GStreamer audiosink for Music and Movies"
-msgstr "основни аудио усклађивач Гстримера за музику и филмове"
-
-msgid "description for default GStreamer audiosink for Music and Movies"
-msgstr "опис основног аудио усклађивача Гстримера за музику и филмове"
-
-msgid "default GStreamer videosink"
-msgstr "основни видео усклађивач Гстримера"
-
-msgid ""
-"GStreamer can play video using any number of output elements. Some possible "
-"choices are xvimagesink, ximagesink, sdlvideosink and aasink. The videosink "
-"can be a partial pipeline instead of just one element."
-msgstr ""
-"Гстример може да пушта видео користећи било који број излазних елемената. "
-"Неки могући избори су „xvimagesink“, „ximagesink“, „sdlvideosink“ и "
-"„aasink“. Видео усклађивач може бити делимична спојка уместо само једног "
-"елемента."
-
-msgid "description for default GStreamer videosink"
-msgstr "опис основног видео усклађивача Гстримера"
-
-msgid "Describes the selected videosink element."
-msgstr "Описује изабрани елемент видео усклађивача."
-
-msgid "default GStreamer audiosrc"
-msgstr "основни аудио извор Гстримера"
-
-msgid ""
-"GStreamer can record audio using any number of input elements. Some possible "
-"choices are osssrc, pulsesrc and alsasrc. The audio source can be a partial "
-"pipeline instead of just one element."
-msgstr ""
-"Гстример може да снима аудио користећи било који број излазних елемената. "
-"Неки могући избори су „osssrc“, „pulsesrc“ и „alsasrc“. Извор звука може "
-"бити делимична спојка уместо само једног елемента."
-
-msgid "description for default GStreamer audiosrc"
-msgstr "опис основног аудио извора Гстримера"
-
-msgid "Describes the selected audiosrc element."
-msgstr "Описује изабрани елемент аудио извора."
-
-msgid "default GStreamer videosrc"
-msgstr "основни видео извор Гстримера"
-
-msgid ""
-"GStreamer can record video from any number of input elements. Some possible "
-"choices are v4lsrc, v4l2src and videotestsrc. The video source can be a "
-"partial pipeline instead of just one element."
-msgstr ""
-"Гстример може да снима видео користећи било који број излазних елемената. "
-"Неки могући избори су „v4lsrc“, „v4l2src“ и “videotestsrc“. Извор видеа може "
-"бити делимична спојка уместо само једног елемента."
-
-msgid "description for default GStreamer videosrc"
-msgstr "опис основног видео извора Гстримера"
-
-msgid "Describes the selected videosrc element."
-msgstr "Описује изабрани елемент видео извора."
-
-msgid "default GStreamer visualization"
-msgstr "основно приказивање Гстримера"
-
-msgid ""
-"GStreamer can put visualization plugins in a pipeline to transform audio "
-"streams in video frames. Some possible choices are goom, goom2k1 and "
-"synaesthesia. The visualization plugin can be a partial pipeline instead of "
-"just one element."
-msgstr ""
-"Гстример може да стави прикључке приказивања у спојку да претвори аудио "
-"токове у видео кадрове. Неки могући избори су „goom“, „goom2k1“ и "
-"„synaesthesia“. Прикључак приказивања може бити делимична спојка уместо само "
-"једног елемента."
-
-msgid "description for default GStreamer visualization"
-msgstr "опис основног приказивања Гстримера"
-
-msgid "Describes the selected visualization element."
-msgstr "Описује изабрани елемент приказивања."
-
 msgid "OpenCV failed to load template image"
-msgstr ""
+msgstr "ОтворениЦВ није успео да учита слику шаблона"
 
 msgid "Could not read title information for DVD."
 msgstr "Не могу да прочитам информације о наслову ДВД-а."
@@ -184,7 +77,7 @@
 "Место датотеке је подешено на НИШТА, подесите га на исправан назив датотеке"
 
 msgid "Digitalzoom element couldn't be created"
-msgstr ""
+msgstr "Елемент дигиталног зума не може бити направљен"
 
 msgid "Subpicture format was not configured before data flow"
 msgstr "Запис подслике није подешен пре протока података"
@@ -245,6 +138,112 @@
 msgid "Couldn't find details for DVB channel %s"
 msgstr "Не могу да пронађем податке за ДВБ канал „%s“"
 
+#~ msgid "default GStreamer sound events audiosink"
+#~ msgstr "основни аудио усклађивач звучних догађаја Гстримера"
+
+#~ msgid ""
+#~ "GStreamer can play audio using any number of output elements. Some "
+#~ "possible choices are osssink, pulsesink and alsasink. The audiosink can "
+#~ "be a partial pipeline instead of just one element."
+#~ msgstr ""
+#~ "Гстример може да пушта аудио користећи било који број излазних елемената. "
+#~ "Неки могући избори су „osssink“, „pulsesink“ и „alsasink“. Аудио "
+#~ "усклађивач може бити делимична спојка уместо само једног елемента."
+
+#~ msgid "description for default GStreamer sound events audiosink"
+#~ msgstr "опис основног аудио усклађивача звучних догађаја Гстримера"
+
+#~ msgid "Describes the selected audiosink element."
+#~ msgstr "Описује изабрани елемент аудио усклађивача."
+
+#~ msgid "default GStreamer audiosink for Audio/Video Conferencing"
+#~ msgstr "основни аудио усклађивач Гстримера за аудио/видео састанчење"
+
+#~ msgid ""
+#~ "description for default GStreamer audiosink for Audio/Video Conferencing"
+#~ msgstr "опис основног аудио усклађивач Гстримера за аудио/видео састанчење"
+
+#~ msgid "default GStreamer audiosink for Music and Movies"
+#~ msgstr "основни аудио усклађивач Гстримера за музику и филмове"
+
+#~ msgid "description for default GStreamer audiosink for Music and Movies"
+#~ msgstr "опис основног аудио усклађивача Гстримера за музику и филмове"
+
+#~ msgid "default GStreamer videosink"
+#~ msgstr "основни видео усклађивач Гстримера"
+
+#~ msgid ""
+#~ "GStreamer can play video using any number of output elements. Some "
+#~ "possible choices are xvimagesink, ximagesink, sdlvideosink and aasink. "
+#~ "The videosink can be a partial pipeline instead of just one element."
+#~ msgstr ""
+#~ "Гстример може да пушта видео користећи било који број излазних елемената. "
+#~ "Неки могући избори су „xvimagesink“, „ximagesink“, „sdlvideosink“ и "
+#~ "„aasink“. Видео усклађивач може бити делимична спојка уместо само једног "
+#~ "елемента."
+
+#~ msgid "description for default GStreamer videosink"
+#~ msgstr "опис основног видео усклађивача Гстримера"
+
+#~ msgid "Describes the selected videosink element."
+#~ msgstr "Описује изабрани елемент видео усклађивача."
+
+#~ msgid "default GStreamer audiosrc"
+#~ msgstr "основни аудио извор Гстримера"
+
+#~ msgid ""
+#~ "GStreamer can record audio using any number of input elements. Some "
+#~ "possible choices are osssrc, pulsesrc and alsasrc. The audio source can "
+#~ "be a partial pipeline instead of just one element."
+#~ msgstr ""
+#~ "Гстример може да снима аудио користећи било који број излазних елемената. "
+#~ "Неки могући избори су „osssrc“, „pulsesrc“ и „alsasrc“. Извор звука може "
+#~ "бити делимична спојка уместо само једног елемента."
+
+#~ msgid "description for default GStreamer audiosrc"
+#~ msgstr "опис основног аудио извора Гстримера"
+
+#~ msgid "Describes the selected audiosrc element."
+#~ msgstr "Описује изабрани елемент аудио извора."
+
+#~ msgid "default GStreamer videosrc"
+#~ msgstr "основни видео извор Гстримера"
+
+#~ msgid ""
+#~ "GStreamer can record video from any number of input elements. Some "
+#~ "possible choices are v4lsrc, v4l2src and videotestsrc. The video source "
+#~ "can be a partial pipeline instead of just one element."
+#~ msgstr ""
+#~ "Гстример може да снима видео користећи било који број излазних елемената. "
+#~ "Неки могући избори су „v4lsrc“, „v4l2src“ и “videotestsrc“. Извор видеа "
+#~ "може бити делимична спојка уместо само једног елемента."
+
+#~ msgid "description for default GStreamer videosrc"
+#~ msgstr "опис основног видео извора Гстримера"
+
+#~ msgid "Describes the selected videosrc element."
+#~ msgstr "Описује изабрани елемент видео извора."
+
+#~ msgid "default GStreamer visualization"
+#~ msgstr "основно приказивање Гстримера"
+
+#~ msgid ""
+#~ "GStreamer can put visualization plugins in a pipeline to transform audio "
+#~ "streams in video frames. Some possible choices are goom, goom2k1 and "
+#~ "synaesthesia. The visualization plugin can be a partial pipeline instead "
+#~ "of just one element."
+#~ msgstr ""
+#~ "Гстример може да стави прикључке приказивања у спојку да претвори аудио "
+#~ "токове у видео кадрове. Неки могући избори су „goom“, „goom2k1“ и "
+#~ "„synaesthesia“. Прикључак приказивања може бити делимична спојка уместо "
+#~ "само једног елемента."
+
+#~ msgid "description for default GStreamer visualization"
+#~ msgstr "опис основног приказивања Гстримера"
+
+#~ msgid "Describes the selected visualization element."
+#~ msgstr "Описује изабрани елемент приказивања."
+
 #~ msgid "Couldn't get the Manifest's URI"
 #~ msgstr "Не могу да добавим путању Манифеста"
 
diff --git a/po/sv.gmo b/po/sv.gmo
index 9778b0f..4caf214 100644
--- a/po/sv.gmo
+++ b/po/sv.gmo
Binary files differ
diff --git a/po/sv.po b/po/sv.po
index ce168e1..27ad7be 100644
--- a/po/sv.po
+++ b/po/sv.po
@@ -8,7 +8,7 @@
 msgstr ""
 "Project-Id-Version: gst-plugins-bad 1.6.0\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2016-01-20 14:17+0200\n"
+"POT-Creation-Date: 2016-03-15 11:41+0200\n"
 "PO-Revision-Date: 2015-11-01 00:48+0100\n"
 "Last-Translator: Sebastian Rasmussen <sebras@gmail.com>\n"
 "Language-Team: Swedish <tp-sv@listor.tp-sv.se>\n"
@@ -21,112 +21,6 @@
 msgid "format wasn't negotiated before get function"
 msgstr "formatet förhandlades inte fram innan hämtfunktionen"
 
-msgid "default GStreamer sound events audiosink"
-msgstr "standard GStreamer-ljudutgång för ljudhändelser"
-
-msgid ""
-"GStreamer can play audio using any number of output elements. Some possible "
-"choices are osssink, pulsesink and alsasink. The audiosink can be a partial "
-"pipeline instead of just one element."
-msgstr ""
-"GStreamer kan spela upp ljud via ett antal utgångselement. Några möjliga val "
-"är osssink, pulsesink och alsasink. Ljudutgången kan vara en delrörledning "
-"istället för bara ett element."
-
-msgid "description for default GStreamer sound events audiosink"
-msgstr "beskrivning för standard GStreamer-ljudutgång för ljudhändelser"
-
-msgid "Describes the selected audiosink element."
-msgstr "Beskriver det valda ljudutgångselementet."
-
-msgid "default GStreamer audiosink for Audio/Video Conferencing"
-msgstr "standard GStreamer-ljudutgång för ljud/video-konferenser"
-
-msgid ""
-"description for default GStreamer audiosink for Audio/Video Conferencing"
-msgstr ""
-"beskrivning för standard GStreamer-ljudutgång för ljud/video-konferenser"
-
-msgid "default GStreamer audiosink for Music and Movies"
-msgstr "standard GStreamer-ljudutgång för musik och filmer"
-
-msgid "description for default GStreamer audiosink for Music and Movies"
-msgstr "beskrivning för standard GStreamer-ljudutgång för musik och filmer"
-
-msgid "default GStreamer videosink"
-msgstr "standard GStreamer-videoutgång"
-
-msgid ""
-"GStreamer can play video using any number of output elements. Some possible "
-"choices are xvimagesink, ximagesink, sdlvideosink and aasink. The videosink "
-"can be a partial pipeline instead of just one element."
-msgstr ""
-"GStreamer kan spela upp video via ett antal utgångselement. Några möjliga "
-"val är xvimagesink, ximagesink, sdlvideosink och aasink. Videoutgången kan "
-"vara en delrörledning istället för bara ett element."
-
-msgid "description for default GStreamer videosink"
-msgstr "beskrivning för standard GStreamer-videoutgång"
-
-msgid "Describes the selected videosink element."
-msgstr "Beskriver det valda videoutgångselementet."
-
-msgid "default GStreamer audiosrc"
-msgstr "standard GStreamer-ljudkälla"
-
-msgid ""
-"GStreamer can record audio using any number of input elements. Some possible "
-"choices are osssrc, pulsesrc and alsasrc. The audio source can be a partial "
-"pipeline instead of just one element."
-msgstr ""
-"GStreamer kan spela in ljud från ett antal ingångselement. Några möjliga val "
-"är osssrc, pulsesrc och alsasrc. Ljudkällan kan vara en delrörledning "
-"istället för bara ett element."
-
-msgid "description for default GStreamer audiosrc"
-msgstr "beskrivning för standard GStreamer-ljudkälla"
-
-msgid "Describes the selected audiosrc element."
-msgstr "Beskriver det valda ljudkällselementet."
-
-msgid "default GStreamer videosrc"
-msgstr "standard GStreamer-videokälla"
-
-msgid ""
-"GStreamer can record video from any number of input elements. Some possible "
-"choices are v4lsrc, v4l2src and videotestsrc. The video source can be a "
-"partial pipeline instead of just one element."
-msgstr ""
-"GStreamer kan spela in video från ett antal ingångselement. Några möjliga "
-"val är v4lsrc, v4l2src och videotestsrc. Videokällan kan vara en "
-"delrörledning istället för bara ett element."
-
-msgid "description for default GStreamer videosrc"
-msgstr "beskrivning för standard GStreamer-videokälla"
-
-msgid "Describes the selected videosrc element."
-msgstr "Beskriver det valda videokällselementet."
-
-msgid "default GStreamer visualization"
-msgstr "standard GStreamer-visualisering"
-
-msgid ""
-"GStreamer can put visualization plugins in a pipeline to transform audio "
-"streams in video frames. Some possible choices are goom, goom2k1 and "
-"synaesthesia. The visualization plugin can be a partial pipeline instead of "
-"just one element."
-msgstr ""
-"GStreamer kan lägga in insticksmoduler för visualisering i en pipeline för "
-"att transformera ljudströmmar till videobilder. Några möjliga val är goom, "
-"goom2k1 och synaesthesia. Visualiseringsinsticksmodulen kan vara en "
-"delrörledning istället för bara ett element."
-
-msgid "description for default GStreamer visualization"
-msgstr "beskrivning för standard GStreamer-visualisering"
-
-msgid "Describes the selected visualization element."
-msgstr "Beskriver det valda visualiseringselementet."
-
 msgid "OpenCV failed to load template image"
 msgstr "OpenCV misslyckades med att läsa in mallbild"
 
@@ -242,6 +136,112 @@
 msgid "Couldn't find details for DVB channel %s"
 msgstr "Kunde ej hitta detaljer för DVB-kanal %s"
 
+#~ msgid "default GStreamer sound events audiosink"
+#~ msgstr "standard GStreamer-ljudutgång för ljudhändelser"
+
+#~ msgid ""
+#~ "GStreamer can play audio using any number of output elements. Some "
+#~ "possible choices are osssink, pulsesink and alsasink. The audiosink can "
+#~ "be a partial pipeline instead of just one element."
+#~ msgstr ""
+#~ "GStreamer kan spela upp ljud via ett antal utgångselement. Några möjliga "
+#~ "val är osssink, pulsesink och alsasink. Ljudutgången kan vara en "
+#~ "delrörledning istället för bara ett element."
+
+#~ msgid "description for default GStreamer sound events audiosink"
+#~ msgstr "beskrivning för standard GStreamer-ljudutgång för ljudhändelser"
+
+#~ msgid "Describes the selected audiosink element."
+#~ msgstr "Beskriver det valda ljudutgångselementet."
+
+#~ msgid "default GStreamer audiosink for Audio/Video Conferencing"
+#~ msgstr "standard GStreamer-ljudutgång för ljud/video-konferenser"
+
+#~ msgid ""
+#~ "description for default GStreamer audiosink for Audio/Video Conferencing"
+#~ msgstr ""
+#~ "beskrivning för standard GStreamer-ljudutgång för ljud/video-konferenser"
+
+#~ msgid "default GStreamer audiosink for Music and Movies"
+#~ msgstr "standard GStreamer-ljudutgång för musik och filmer"
+
+#~ msgid "description for default GStreamer audiosink for Music and Movies"
+#~ msgstr "beskrivning för standard GStreamer-ljudutgång för musik och filmer"
+
+#~ msgid "default GStreamer videosink"
+#~ msgstr "standard GStreamer-videoutgång"
+
+#~ msgid ""
+#~ "GStreamer can play video using any number of output elements. Some "
+#~ "possible choices are xvimagesink, ximagesink, sdlvideosink and aasink. "
+#~ "The videosink can be a partial pipeline instead of just one element."
+#~ msgstr ""
+#~ "GStreamer kan spela upp video via ett antal utgångselement. Några möjliga "
+#~ "val är xvimagesink, ximagesink, sdlvideosink och aasink. Videoutgången "
+#~ "kan vara en delrörledning istället för bara ett element."
+
+#~ msgid "description for default GStreamer videosink"
+#~ msgstr "beskrivning för standard GStreamer-videoutgång"
+
+#~ msgid "Describes the selected videosink element."
+#~ msgstr "Beskriver det valda videoutgångselementet."
+
+#~ msgid "default GStreamer audiosrc"
+#~ msgstr "standard GStreamer-ljudkälla"
+
+#~ msgid ""
+#~ "GStreamer can record audio using any number of input elements. Some "
+#~ "possible choices are osssrc, pulsesrc and alsasrc. The audio source can "
+#~ "be a partial pipeline instead of just one element."
+#~ msgstr ""
+#~ "GStreamer kan spela in ljud från ett antal ingångselement. Några möjliga "
+#~ "val är osssrc, pulsesrc och alsasrc. Ljudkällan kan vara en delrörledning "
+#~ "istället för bara ett element."
+
+#~ msgid "description for default GStreamer audiosrc"
+#~ msgstr "beskrivning för standard GStreamer-ljudkälla"
+
+#~ msgid "Describes the selected audiosrc element."
+#~ msgstr "Beskriver det valda ljudkällselementet."
+
+#~ msgid "default GStreamer videosrc"
+#~ msgstr "standard GStreamer-videokälla"
+
+#~ msgid ""
+#~ "GStreamer can record video from any number of input elements. Some "
+#~ "possible choices are v4lsrc, v4l2src and videotestsrc. The video source "
+#~ "can be a partial pipeline instead of just one element."
+#~ msgstr ""
+#~ "GStreamer kan spela in video från ett antal ingångselement. Några möjliga "
+#~ "val är v4lsrc, v4l2src och videotestsrc. Videokällan kan vara en "
+#~ "delrörledning istället för bara ett element."
+
+#~ msgid "description for default GStreamer videosrc"
+#~ msgstr "beskrivning för standard GStreamer-videokälla"
+
+#~ msgid "Describes the selected videosrc element."
+#~ msgstr "Beskriver det valda videokällselementet."
+
+#~ msgid "default GStreamer visualization"
+#~ msgstr "standard GStreamer-visualisering"
+
+#~ msgid ""
+#~ "GStreamer can put visualization plugins in a pipeline to transform audio "
+#~ "streams in video frames. Some possible choices are goom, goom2k1 and "
+#~ "synaesthesia. The visualization plugin can be a partial pipeline instead "
+#~ "of just one element."
+#~ msgstr ""
+#~ "GStreamer kan lägga in insticksmoduler för visualisering i en pipeline "
+#~ "för att transformera ljudströmmar till videobilder. Några möjliga val är "
+#~ "goom, goom2k1 och synaesthesia. Visualiseringsinsticksmodulen kan vara en "
+#~ "delrörledning istället för bara ett element."
+
+#~ msgid "description for default GStreamer visualization"
+#~ msgstr "beskrivning för standard GStreamer-visualisering"
+
+#~ msgid "Describes the selected visualization element."
+#~ msgstr "Beskriver det valda visualiseringselementet."
+
 #~ msgid "Couldn't get the Manifest's URI"
 #~ msgstr "Kunde ej hämta manifestets URI"
 
diff --git a/po/tr.gmo b/po/tr.gmo
index ea62745..3ea9aa7 100644
--- a/po/tr.gmo
+++ b/po/tr.gmo
Binary files differ
diff --git a/po/tr.po b/po/tr.po
index 4928f63..27c15dd 100644
--- a/po/tr.po
+++ b/po/tr.po
@@ -7,7 +7,7 @@
 msgstr ""
 "Project-Id-Version: gst-plugins-bad-1.4.1\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2016-01-20 14:17+0200\n"
+"POT-Creation-Date: 2016-03-15 11:41+0200\n"
 "PO-Revision-Date: 2015-01-10 21:07+0100\n"
 "Last-Translator: Volkan Gezer <volkangezer@gmail.com>\n"
 "Language-Team: Turkish <gnu-tr-u12a@lists.sourceforge.net>\n"
@@ -21,95 +21,6 @@
 msgid "format wasn't negotiated before get function"
 msgstr "get fonksiyonundan önce biçim görüşülemedi"
 
-msgid "default GStreamer sound events audiosink"
-msgstr ""
-
-msgid ""
-"GStreamer can play audio using any number of output elements. Some possible "
-"choices are osssink, pulsesink and alsasink. The audiosink can be a partial "
-"pipeline instead of just one element."
-msgstr ""
-
-msgid "description for default GStreamer sound events audiosink"
-msgstr ""
-
-msgid "Describes the selected audiosink element."
-msgstr ""
-
-msgid "default GStreamer audiosink for Audio/Video Conferencing"
-msgstr ""
-
-msgid ""
-"description for default GStreamer audiosink for Audio/Video Conferencing"
-msgstr ""
-
-msgid "default GStreamer audiosink for Music and Movies"
-msgstr ""
-
-msgid "description for default GStreamer audiosink for Music and Movies"
-msgstr ""
-
-msgid "default GStreamer videosink"
-msgstr ""
-
-msgid ""
-"GStreamer can play video using any number of output elements. Some possible "
-"choices are xvimagesink, ximagesink, sdlvideosink and aasink. The videosink "
-"can be a partial pipeline instead of just one element."
-msgstr ""
-
-msgid "description for default GStreamer videosink"
-msgstr ""
-
-msgid "Describes the selected videosink element."
-msgstr ""
-
-msgid "default GStreamer audiosrc"
-msgstr ""
-
-msgid ""
-"GStreamer can record audio using any number of input elements. Some possible "
-"choices are osssrc, pulsesrc and alsasrc. The audio source can be a partial "
-"pipeline instead of just one element."
-msgstr ""
-
-msgid "description for default GStreamer audiosrc"
-msgstr ""
-
-msgid "Describes the selected audiosrc element."
-msgstr ""
-
-msgid "default GStreamer videosrc"
-msgstr ""
-
-msgid ""
-"GStreamer can record video from any number of input elements. Some possible "
-"choices are v4lsrc, v4l2src and videotestsrc. The video source can be a "
-"partial pipeline instead of just one element."
-msgstr ""
-
-msgid "description for default GStreamer videosrc"
-msgstr ""
-
-msgid "Describes the selected videosrc element."
-msgstr ""
-
-msgid "default GStreamer visualization"
-msgstr ""
-
-msgid ""
-"GStreamer can put visualization plugins in a pipeline to transform audio "
-"streams in video frames. Some possible choices are goom, goom2k1 and "
-"synaesthesia. The visualization plugin can be a partial pipeline instead of "
-"just one element."
-msgstr ""
-
-msgid "description for default GStreamer visualization"
-msgstr ""
-
-msgid "Describes the selected visualization element."
-msgstr ""
-
 msgid "OpenCV failed to load template image"
 msgstr ""
 
diff --git a/po/uk.gmo b/po/uk.gmo
index 23f4190..e6258d9 100644
--- a/po/uk.gmo
+++ b/po/uk.gmo
Binary files differ
diff --git a/po/uk.po b/po/uk.po
index 5176c9b..04bc935 100644
--- a/po/uk.po
+++ b/po/uk.po
@@ -8,7 +8,7 @@
 msgstr ""
 "Project-Id-Version: gst-plugins-bad 1.6.0\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2016-01-20 14:17+0200\n"
+"POT-Creation-Date: 2016-03-15 11:41+0200\n"
 "PO-Revision-Date: 2015-10-15 20:44+0300\n"
 "Last-Translator: Yuri Chornoivan <yurchor@ukr.net>\n"
 "Language-Team: Ukrainian <translation-team-uk@lists.sourceforge.net>\n"
@@ -23,116 +23,6 @@
 msgid "format wasn't negotiated before get function"
 msgstr "формат не було узгоджено до виклику функції get"
 
-msgid "default GStreamer sound events audiosink"
-msgstr "типовий приймач звукових подій GStreamer"
-
-msgid ""
-"GStreamer can play audio using any number of output elements. Some possible "
-"choices are osssink, pulsesink and alsasink. The audiosink can be a partial "
-"pipeline instead of just one element."
-msgstr ""
-"У GStreamer передбачено можливість відтворення звукових даних за допомогою "
-"довільної кількості елементів виведення. Серед можливих варіантів osssink, "
-"pulsesink та alsasink. Звуковий приймач може бути окремим каналом, а не "
-"одним елементом."
-
-msgid "description for default GStreamer sound events audiosink"
-msgstr "опис типового приймача звукових подій GStreamer"
-
-msgid "Describes the selected audiosink element."
-msgstr "Описує вибраний елемент audiosink."
-
-msgid "default GStreamer audiosink for Audio/Video Conferencing"
-msgstr "типовий звуковий приймач GStreamer для звукових та відеоконференцій"
-
-msgid ""
-"description for default GStreamer audiosink for Audio/Video Conferencing"
-msgstr ""
-"опис типового звукового приймача GStreamer для звукових та відеоконференцій"
-
-msgid "default GStreamer audiosink for Music and Movies"
-msgstr "типовий звуковий приймач GStreamer для музики і фільмів"
-
-msgid "description for default GStreamer audiosink for Music and Movies"
-msgstr "опис типового звукового приймача GStreamer для музики і фільмів"
-
-msgid "default GStreamer videosink"
-msgstr "типовий відеоприймач GStreamer"
-
-msgid ""
-"GStreamer can play video using any number of output elements. Some possible "
-"choices are xvimagesink, ximagesink, sdlvideosink and aasink. The videosink "
-"can be a partial pipeline instead of just one element."
-msgstr ""
-"У GStreamer передбачено відтворення відео за допомогою довільної кількості "
-"елементів виведення. Серед можливих варіантів xvimagesink, ximagesink, "
-"sdlvideosink та aasink. Приймач відеоданих може бути окремим каналом з "
-"декількох обробників, а не просто одним елементом."
-
-msgid "description for default GStreamer videosink"
-msgstr "опис типового відеоприймача GStreamer"
-
-msgid "Describes the selected videosink element."
-msgstr "Описує вибраний елемент videosink."
-
-msgid "default GStreamer audiosrc"
-msgstr "типове джерело звуку GStreamer"
-
-msgid ""
-"GStreamer can record audio using any number of input elements. Some possible "
-"choices are osssrc, pulsesrc and alsasrc. The audio source can be a partial "
-"pipeline instead of just one element."
-msgstr ""
-"У GStreamer передбачено можливість запису звукових даних за допомогою "
-"довільної кількості елементів вхідних даних. Серед можливих варіантів "
-"osssrc, pulsesrc та alsasrc. Джерелом звукових даних може бути окремий канал "
-"з декількох елементів, а не просто один елемент."
-
-msgid "description for default GStreamer audiosrc"
-msgstr "опис типового джерела звуку GStreamer"
-
-msgid "Describes the selected audiosrc element."
-msgstr "Описує вибраний елемент audiosrc."
-
-msgid "default GStreamer videosrc"
-msgstr "типове джерело відео GStreamer"
-
-msgid ""
-"GStreamer can record video from any number of input elements. Some possible "
-"choices are v4lsrc, v4l2src and videotestsrc. The video source can be a "
-"partial pipeline instead of just one element."
-msgstr ""
-"У GStreamer передбачено можливість запису відеоданих за допомогою довільної "
-"кількості елементів вхідних даних. Серед можливих варіантів v4lsrc, v4l2src "
-"та videotestsrc. Джерелом відеоданих може бути окремий канал з декількох "
-"елементів, а не просто один елемент."
-
-msgid "description for default GStreamer videosrc"
-msgstr "опис типового джерела відео GStreamer"
-
-msgid "Describes the selected videosrc element."
-msgstr "Описує вибраний елемент videosrc."
-
-msgid "default GStreamer visualization"
-msgstr "типова візуалізація GStreamer"
-
-msgid ""
-"GStreamer can put visualization plugins in a pipeline to transform audio "
-"streams in video frames. Some possible choices are goom, goom2k1 and "
-"synaesthesia. The visualization plugin can be a partial pipeline instead of "
-"just one element."
-msgstr ""
-"У GStreamer передбачено додавання до каналу обробки додатків візуалізації "
-"для обробки потоків звукових даних у кадрах відео. Серед можливих варіантів "
-"goom, goom2k1 та synaesthesia. Додаток візуалізації може бути окремим "
-"каналом, а не просто одним елементом."
-
-msgid "description for default GStreamer visualization"
-msgstr "опис типової візуалізації GStreamer"
-
-msgid "Describes the selected visualization element."
-msgstr "Описує вибраний елемент візуалізації."
-
 msgid "OpenCV failed to load template image"
 msgstr "OpenCV не вдалося завантажити зображення шаблону"
 
@@ -256,6 +146,117 @@
 msgid "Couldn't find details for DVB channel %s"
 msgstr "Не вдалося знайти параметрів каналу DVB %s"
 
+#~ msgid "default GStreamer sound events audiosink"
+#~ msgstr "типовий приймач звукових подій GStreamer"
+
+#~ msgid ""
+#~ "GStreamer can play audio using any number of output elements. Some "
+#~ "possible choices are osssink, pulsesink and alsasink. The audiosink can "
+#~ "be a partial pipeline instead of just one element."
+#~ msgstr ""
+#~ "У GStreamer передбачено можливість відтворення звукових даних за "
+#~ "допомогою довільної кількості елементів виведення. Серед можливих "
+#~ "варіантів osssink, pulsesink та alsasink. Звуковий приймач може бути "
+#~ "окремим каналом, а не одним елементом."
+
+#~ msgid "description for default GStreamer sound events audiosink"
+#~ msgstr "опис типового приймача звукових подій GStreamer"
+
+#~ msgid "Describes the selected audiosink element."
+#~ msgstr "Описує вибраний елемент audiosink."
+
+#~ msgid "default GStreamer audiosink for Audio/Video Conferencing"
+#~ msgstr "типовий звуковий приймач GStreamer для звукових та відеоконференцій"
+
+#~ msgid ""
+#~ "description for default GStreamer audiosink for Audio/Video Conferencing"
+#~ msgstr ""
+#~ "опис типового звукового приймача GStreamer для звукових та "
+#~ "відеоконференцій"
+
+#~ msgid "default GStreamer audiosink for Music and Movies"
+#~ msgstr "типовий звуковий приймач GStreamer для музики і фільмів"
+
+#~ msgid "description for default GStreamer audiosink for Music and Movies"
+#~ msgstr "опис типового звукового приймача GStreamer для музики і фільмів"
+
+#~ msgid "default GStreamer videosink"
+#~ msgstr "типовий відеоприймач GStreamer"
+
+#~ msgid ""
+#~ "GStreamer can play video using any number of output elements. Some "
+#~ "possible choices are xvimagesink, ximagesink, sdlvideosink and aasink. "
+#~ "The videosink can be a partial pipeline instead of just one element."
+#~ msgstr ""
+#~ "У GStreamer передбачено відтворення відео за допомогою довільної "
+#~ "кількості елементів виведення. Серед можливих варіантів xvimagesink, "
+#~ "ximagesink, sdlvideosink та aasink. Приймач відеоданих може бути окремим "
+#~ "каналом з декількох обробників, а не просто одним елементом."
+
+#~ msgid "description for default GStreamer videosink"
+#~ msgstr "опис типового відеоприймача GStreamer"
+
+#~ msgid "Describes the selected videosink element."
+#~ msgstr "Описує вибраний елемент videosink."
+
+#~ msgid "default GStreamer audiosrc"
+#~ msgstr "типове джерело звуку GStreamer"
+
+#~ msgid ""
+#~ "GStreamer can record audio using any number of input elements. Some "
+#~ "possible choices are osssrc, pulsesrc and alsasrc. The audio source can "
+#~ "be a partial pipeline instead of just one element."
+#~ msgstr ""
+#~ "У GStreamer передбачено можливість запису звукових даних за допомогою "
+#~ "довільної кількості елементів вхідних даних. Серед можливих варіантів "
+#~ "osssrc, pulsesrc та alsasrc. Джерелом звукових даних може бути окремий "
+#~ "канал з декількох елементів, а не просто один елемент."
+
+#~ msgid "description for default GStreamer audiosrc"
+#~ msgstr "опис типового джерела звуку GStreamer"
+
+#~ msgid "Describes the selected audiosrc element."
+#~ msgstr "Описує вибраний елемент audiosrc."
+
+#~ msgid "default GStreamer videosrc"
+#~ msgstr "типове джерело відео GStreamer"
+
+#~ msgid ""
+#~ "GStreamer can record video from any number of input elements. Some "
+#~ "possible choices are v4lsrc, v4l2src and videotestsrc. The video source "
+#~ "can be a partial pipeline instead of just one element."
+#~ msgstr ""
+#~ "У GStreamer передбачено можливість запису відеоданих за допомогою "
+#~ "довільної кількості елементів вхідних даних. Серед можливих варіантів "
+#~ "v4lsrc, v4l2src та videotestsrc. Джерелом відеоданих може бути окремий "
+#~ "канал з декількох елементів, а не просто один елемент."
+
+#~ msgid "description for default GStreamer videosrc"
+#~ msgstr "опис типового джерела відео GStreamer"
+
+#~ msgid "Describes the selected videosrc element."
+#~ msgstr "Описує вибраний елемент videosrc."
+
+#~ msgid "default GStreamer visualization"
+#~ msgstr "типова візуалізація GStreamer"
+
+#~ msgid ""
+#~ "GStreamer can put visualization plugins in a pipeline to transform audio "
+#~ "streams in video frames. Some possible choices are goom, goom2k1 and "
+#~ "synaesthesia. The visualization plugin can be a partial pipeline instead "
+#~ "of just one element."
+#~ msgstr ""
+#~ "У GStreamer передбачено додавання до каналу обробки додатків візуалізації "
+#~ "для обробки потоків звукових даних у кадрах відео. Серед можливих "
+#~ "варіантів goom, goom2k1 та synaesthesia. Додаток візуалізації може бути "
+#~ "окремим каналом, а не просто одним елементом."
+
+#~ msgid "description for default GStreamer visualization"
+#~ msgstr "опис типової візуалізації GStreamer"
+
+#~ msgid "Describes the selected visualization element."
+#~ msgstr "Описує вибраний елемент візуалізації."
+
 #~ msgid "Couldn't get the Manifest's URI"
 #~ msgstr "Не вдалося отримати адреси Manifest"
 
diff --git a/po/vi.gmo b/po/vi.gmo
index 2f13043..02ba479 100644
--- a/po/vi.gmo
+++ b/po/vi.gmo
Binary files differ
diff --git a/po/vi.po b/po/vi.po
index c1d8f9c..d958114 100644
--- a/po/vi.po
+++ b/po/vi.po
@@ -8,7 +8,7 @@
 msgstr ""
 "Project-Id-Version: gst-plugins-bad 1.6.0\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2016-01-20 14:17+0200\n"
+"POT-Creation-Date: 2016-03-15 11:41+0200\n"
 "PO-Revision-Date: 2015-10-16 08:27+0700\n"
 "Last-Translator: Trần Ngọc Quân <vnwildman@gmail.com>\n"
 "Language-Team: Vietnamese <translation-team-vi@lists.sourceforge.net>\n"
@@ -23,111 +23,6 @@
 msgid "format wasn't negotiated before get function"
 msgstr "định dạng không được dàn xếp trước hàm"
 
-msgid "default GStreamer sound events audiosink"
-msgstr "các sự kiện âm thanh GStreamer mặc định cho “audiosink”"
-
-msgid ""
-"GStreamer can play audio using any number of output elements. Some possible "
-"choices are osssink, pulsesink and alsasink. The audiosink can be a partial "
-"pipeline instead of just one element."
-msgstr ""
-"GStreamer có thể phát nhạc với bất kỳ số lượng phần tử đầu ra nào. Một số có "
-"thể chọn lựa là osssink, pulsesink và alsasink. “audiosink” có thể là đường "
-"ống đặc biệt thay vì chỉ một phần tử."
-
-msgid "description for default GStreamer sound events audiosink"
-msgstr "mô tả cho các sự kiện âm thanh GStreamer mặc định dành cho “audiosink”"
-
-msgid "Describes the selected audiosink element."
-msgstr "Mô tả về phần tử “audiosink” đã chọn."
-
-msgid "default GStreamer audiosink for Audio/Video Conferencing"
-msgstr "“GStreamer audiosink” mặc định dành cho Hội nghị Nhạc/Phim"
-
-msgid ""
-"description for default GStreamer audiosink for Audio/Video Conferencing"
-msgstr "mô tả cho GStreamer audiosink mặc định dành cho Hội nghị Nhạc/Phim"
-
-msgid "default GStreamer audiosink for Music and Movies"
-msgstr "GStreamer audiosink mặc định dành cho Âm nhạc và Phim"
-
-msgid "description for default GStreamer audiosink for Music and Movies"
-msgstr "mô tả cho GStreamer audiosink mặc định dành cho Âm nhạc và Phim"
-
-msgid "default GStreamer videosink"
-msgstr "GStreamer videosink mặc định"
-
-msgid ""
-"GStreamer can play video using any number of output elements. Some possible "
-"choices are xvimagesink, ximagesink, sdlvideosink and aasink. The videosink "
-"can be a partial pipeline instead of just one element."
-msgstr ""
-"GStreamer có thể chạy phim với bất kỳ số lượng phần tử đầu ra nào. Một số có "
-"thể chọn lựa là xvimagesink, ximagesink, sdlvideosink và aasink. “videosink” "
-"có thể là đường ống đặc biệt thay vì chỉ một phần tử."
-
-msgid "description for default GStreamer videosink"
-msgstr "mô tả phần tử nguồn hình ảnh GStreamer mặc định"
-
-msgid "Describes the selected videosink element."
-msgstr "Mô tả phần tử videosink đã chọn."
-
-msgid "default GStreamer audiosrc"
-msgstr "nguồn âm thanh GStreamer mặc định"
-
-msgid ""
-"GStreamer can record audio using any number of input elements. Some possible "
-"choices are osssrc, pulsesrc and alsasrc. The audio source can be a partial "
-"pipeline instead of just one element."
-msgstr ""
-"GStreamer có thể ghi âm thanh dùng bao nhiêu phần tử đầu vào cũng được. Một "
-"số lựa chọn là osssrc, plusesrc và alsasrc. Nguồn âm thanh có thể là các "
-"đường ống cục bộ nào đó thay vì chỉ một phần tử nguồn."
-
-msgid "description for default GStreamer audiosrc"
-msgstr "mô tả phần tử nguồn âm thanh GStreamer mặc định"
-
-msgid "Describes the selected audiosrc element."
-msgstr "Mô tả phần tử nguồn âm thanh đã chọn."
-
-msgid "default GStreamer videosrc"
-msgstr "nguồn hình ảnh GStreamer mặc định"
-
-msgid ""
-"GStreamer can record video from any number of input elements. Some possible "
-"choices are v4lsrc, v4l2src and videotestsrc. The video source can be a "
-"partial pipeline instead of just one element."
-msgstr ""
-"GStreamer có thể chạy phim với bất kỳ số lượng phần tử đầu vào nào. Một số "
-"có thể chọn lựa là v4lsrc, v4l2src và videotestsrc. Nguồn hình có thể là "
-"đường ống đặc biệt thay vì chỉ một phần tử."
-
-msgid "description for default GStreamer videosrc"
-msgstr "mô tả cho nguồn hình GStreamer mặc định"
-
-msgid "Describes the selected videosrc element."
-msgstr "Mô tả phần tử nguồn hình ảnh đã chọn."
-
-msgid "default GStreamer visualization"
-msgstr "hiện hình GStreamer mặc định"
-
-msgid ""
-"GStreamer can put visualization plugins in a pipeline to transform audio "
-"streams in video frames. Some possible choices are goom, goom2k1 and "
-"synaesthesia. The visualization plugin can be a partial pipeline instead of "
-"just one element."
-msgstr ""
-"GStreamer có thể đặt phần bổ xung hiện hình trong một đường ống để mà chuyển "
-"dạng luồng dữ liệu âm thanh trong khung hình phim. Một số có thể chọn lựa là "
-"goom, goom2k1 và synaesthesia. Phần bổ xung hiện hình có thể là đường ống "
-"đặc biệt thay vì chỉ một phần tử."
-
-msgid "description for default GStreamer visualization"
-msgstr "mô tả về hiện hình GStreamer mặc định"
-
-msgid "Describes the selected visualization element."
-msgstr "Mô tả về phần tử hiện hình đã chọn."
-
 msgid "OpenCV failed to load template image"
 msgstr "OpenCV gặp lỗi khi tải ảnh tạm thời"
 
@@ -247,6 +142,112 @@
 msgid "Couldn't find details for DVB channel %s"
 msgstr "Không thể tìm thấy chi tiết cho kênh DVB %s"
 
+#~ msgid "default GStreamer sound events audiosink"
+#~ msgstr "các sự kiện âm thanh GStreamer mặc định cho “audiosink”"
+
+#~ msgid ""
+#~ "GStreamer can play audio using any number of output elements. Some "
+#~ "possible choices are osssink, pulsesink and alsasink. The audiosink can "
+#~ "be a partial pipeline instead of just one element."
+#~ msgstr ""
+#~ "GStreamer có thể phát nhạc với bất kỳ số lượng phần tử đầu ra nào. Một số "
+#~ "có thể chọn lựa là osssink, pulsesink và alsasink. “audiosink” có thể là "
+#~ "đường ống đặc biệt thay vì chỉ một phần tử."
+
+#~ msgid "description for default GStreamer sound events audiosink"
+#~ msgstr ""
+#~ "mô tả cho các sự kiện âm thanh GStreamer mặc định dành cho “audiosink”"
+
+#~ msgid "Describes the selected audiosink element."
+#~ msgstr "Mô tả về phần tử “audiosink” đã chọn."
+
+#~ msgid "default GStreamer audiosink for Audio/Video Conferencing"
+#~ msgstr "“GStreamer audiosink” mặc định dành cho Hội nghị Nhạc/Phim"
+
+#~ msgid ""
+#~ "description for default GStreamer audiosink for Audio/Video Conferencing"
+#~ msgstr "mô tả cho GStreamer audiosink mặc định dành cho Hội nghị Nhạc/Phim"
+
+#~ msgid "default GStreamer audiosink for Music and Movies"
+#~ msgstr "GStreamer audiosink mặc định dành cho Âm nhạc và Phim"
+
+#~ msgid "description for default GStreamer audiosink for Music and Movies"
+#~ msgstr "mô tả cho GStreamer audiosink mặc định dành cho Âm nhạc và Phim"
+
+#~ msgid "default GStreamer videosink"
+#~ msgstr "GStreamer videosink mặc định"
+
+#~ msgid ""
+#~ "GStreamer can play video using any number of output elements. Some "
+#~ "possible choices are xvimagesink, ximagesink, sdlvideosink and aasink. "
+#~ "The videosink can be a partial pipeline instead of just one element."
+#~ msgstr ""
+#~ "GStreamer có thể chạy phim với bất kỳ số lượng phần tử đầu ra nào. Một số "
+#~ "có thể chọn lựa là xvimagesink, ximagesink, sdlvideosink và aasink. "
+#~ "“videosink” có thể là đường ống đặc biệt thay vì chỉ một phần tử."
+
+#~ msgid "description for default GStreamer videosink"
+#~ msgstr "mô tả phần tử nguồn hình ảnh GStreamer mặc định"
+
+#~ msgid "Describes the selected videosink element."
+#~ msgstr "Mô tả phần tử videosink đã chọn."
+
+#~ msgid "default GStreamer audiosrc"
+#~ msgstr "nguồn âm thanh GStreamer mặc định"
+
+#~ msgid ""
+#~ "GStreamer can record audio using any number of input elements. Some "
+#~ "possible choices are osssrc, pulsesrc and alsasrc. The audio source can "
+#~ "be a partial pipeline instead of just one element."
+#~ msgstr ""
+#~ "GStreamer có thể ghi âm thanh dùng bao nhiêu phần tử đầu vào cũng được. "
+#~ "Một số lựa chọn là osssrc, plusesrc và alsasrc. Nguồn âm thanh có thể là "
+#~ "các đường ống cục bộ nào đó thay vì chỉ một phần tử nguồn."
+
+#~ msgid "description for default GStreamer audiosrc"
+#~ msgstr "mô tả phần tử nguồn âm thanh GStreamer mặc định"
+
+#~ msgid "Describes the selected audiosrc element."
+#~ msgstr "Mô tả phần tử nguồn âm thanh đã chọn."
+
+#~ msgid "default GStreamer videosrc"
+#~ msgstr "nguồn hình ảnh GStreamer mặc định"
+
+#~ msgid ""
+#~ "GStreamer can record video from any number of input elements. Some "
+#~ "possible choices are v4lsrc, v4l2src and videotestsrc. The video source "
+#~ "can be a partial pipeline instead of just one element."
+#~ msgstr ""
+#~ "GStreamer có thể chạy phim với bất kỳ số lượng phần tử đầu vào nào. Một "
+#~ "số có thể chọn lựa là v4lsrc, v4l2src và videotestsrc. Nguồn hình có thể "
+#~ "là đường ống đặc biệt thay vì chỉ một phần tử."
+
+#~ msgid "description for default GStreamer videosrc"
+#~ msgstr "mô tả cho nguồn hình GStreamer mặc định"
+
+#~ msgid "Describes the selected videosrc element."
+#~ msgstr "Mô tả phần tử nguồn hình ảnh đã chọn."
+
+#~ msgid "default GStreamer visualization"
+#~ msgstr "hiện hình GStreamer mặc định"
+
+#~ msgid ""
+#~ "GStreamer can put visualization plugins in a pipeline to transform audio "
+#~ "streams in video frames. Some possible choices are goom, goom2k1 and "
+#~ "synaesthesia. The visualization plugin can be a partial pipeline instead "
+#~ "of just one element."
+#~ msgstr ""
+#~ "GStreamer có thể đặt phần bổ xung hiện hình trong một đường ống để mà "
+#~ "chuyển dạng luồng dữ liệu âm thanh trong khung hình phim. Một số có thể "
+#~ "chọn lựa là goom, goom2k1 và synaesthesia. Phần bổ xung hiện hình có thể "
+#~ "là đường ống đặc biệt thay vì chỉ một phần tử."
+
+#~ msgid "description for default GStreamer visualization"
+#~ msgstr "mô tả về hiện hình GStreamer mặc định"
+
+#~ msgid "Describes the selected visualization element."
+#~ msgstr "Mô tả về phần tử hiện hình đã chọn."
+
 #~ msgid "Couldn't get the Manifest's URI"
 #~ msgstr "Không thể lấy URI của Manifest"
 
diff --git a/po/zh_CN.gmo b/po/zh_CN.gmo
index ed0d10f..d02dd44 100644
--- a/po/zh_CN.gmo
+++ b/po/zh_CN.gmo
Binary files differ
diff --git a/po/zh_CN.po b/po/zh_CN.po
index ddb00fc..919c582 100644
--- a/po/zh_CN.po
+++ b/po/zh_CN.po
@@ -9,7 +9,7 @@
 msgstr ""
 "Project-Id-Version: gst-plugins-bad 1.6.0\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2016-01-20 14:17+0200\n"
+"POT-Creation-Date: 2016-03-15 11:41+0200\n"
 "PO-Revision-Date: 2015-10-16 19:27+0800\n"
 "Last-Translator: Tianze Wang <zwpwjwtz@126.com>\n"
 "Language-Team: Chinese (simplified) <i18n-zh@googlegroups.com>\n"
@@ -22,107 +22,6 @@
 msgid "format wasn't negotiated before get function"
 msgstr "在调用get函数之前未确定合适的格式"
 
-msgid "default GStreamer sound events audiosink"
-msgstr "默认GStreamer声音事件的音频汇"
-
-msgid ""
-"GStreamer can play audio using any number of output elements. Some possible "
-"choices are osssink, pulsesink and alsasink. The audiosink can be a partial "
-"pipeline instead of just one element."
-msgstr ""
-"GStreamer可以使用任意数量的输出组件播放音频。可能的选择有osssink、pulsesink和"
-"alsasink。音频汇可以是管道的一部分,而不仅仅为一个组件。"
-
-msgid "description for default GStreamer sound events audiosink"
-msgstr "有关默认GStreamer声音事件的音频汇的说明"
-
-msgid "Describes the selected audiosink element."
-msgstr "描述选定的音频汇组件"
-
-msgid "default GStreamer audiosink for Audio/Video Conferencing"
-msgstr "用于音/视频会议的默认Gstreamer音频汇"
-
-msgid ""
-"description for default GStreamer audiosink for Audio/Video Conferencing"
-msgstr "有关用于音/视频会议的默认Gstreamer音频汇的描述"
-
-msgid "default GStreamer audiosink for Music and Movies"
-msgstr "用于音乐和电影的默认Gstreamer音频汇"
-
-msgid "description for default GStreamer audiosink for Music and Movies"
-msgstr "有关音乐和电影的默认Gstreamer音频汇的描述"
-
-msgid "default GStreamer videosink"
-msgstr "默认GStreamer的视频汇"
-
-msgid ""
-"GStreamer can play video using any number of output elements. Some possible "
-"choices are xvimagesink, ximagesink, sdlvideosink and aasink. The videosink "
-"can be a partial pipeline instead of just one element."
-msgstr ""
-"GStreamer可以使用任意数量的输出组件播放视频。可能的选择有xvimagesink、"
-"ximagesink、sdlvideosink和aasink。视频汇可以是管道的一部分,而不仅仅为一个组"
-"件。"
-
-msgid "description for default GStreamer videosink"
-msgstr "有关默认GStreamer视频汇的描述"
-
-msgid "Describes the selected videosink element."
-msgstr "描述选定的视频汇组件"
-
-msgid "default GStreamer audiosrc"
-msgstr "默认GStreamer音频源"
-
-msgid ""
-"GStreamer can record audio using any number of input elements. Some possible "
-"choices are osssrc, pulsesrc and alsasrc. The audio source can be a partial "
-"pipeline instead of just one element."
-msgstr ""
-"GStreamer可以使用任意数量的输入组件来记录音频。可能的选择有osssrc、pulsesrc和"
-"alsasrc。音频源可以是管道的一部分,而不仅仅为一个组件。"
-
-msgid "description for default GStreamer audiosrc"
-msgstr "有关默认GStreamer音频源的描述"
-
-msgid "Describes the selected audiosrc element."
-msgstr "描述选定的音频源组件"
-
-msgid "default GStreamer videosrc"
-msgstr "默认GStreamer视频源"
-
-msgid ""
-"GStreamer can record video from any number of input elements. Some possible "
-"choices are v4lsrc, v4l2src and videotestsrc. The video source can be a "
-"partial pipeline instead of just one element."
-msgstr ""
-"GStreamer可以使用任意数量的输出组件播放视频。可能的选择有v4lsrc、v4l2src和"
-"videotestsrc。视频源可以是管道的一部分,而不仅仅为一个组件。"
-
-msgid "description for default GStreamer videosrc"
-msgstr "有关默认GStreamer视频源的描述"
-
-msgid "Describes the selected videosrc element."
-msgstr "描述选定的视频源组件"
-
-msgid "default GStreamer visualization"
-msgstr "默认Gstreamer可视化组件"
-
-msgid ""
-"GStreamer can put visualization plugins in a pipeline to transform audio "
-"streams in video frames. Some possible choices are goom, goom2k1 and "
-"synaesthesia. The visualization plugin can be a partial pipeline instead of "
-"just one element."
-msgstr ""
-"GStreamer可以将可视化插件加载于管道中,并在视频帧中传递音频流。可能的选择有"
-"goom、goom2k1和synaesthesia。可视化插件可以是管道的一部分,而不仅仅为一个组"
-"件。"
-
-msgid "description for default GStreamer visualization"
-msgstr "有关默认Gstreamer可视化组件的描述"
-
-msgid "Describes the selected visualization element."
-msgstr "描述选定的可视化组件"
-
 msgid "OpenCV failed to load template image"
 msgstr "OpenCV加载模版图片失败"
 
@@ -235,6 +134,107 @@
 msgid "Couldn't find details for DVB channel %s"
 msgstr "无法获取DVB通道 %s 的详细信息"
 
+#~ msgid "default GStreamer sound events audiosink"
+#~ msgstr "默认GStreamer声音事件的音频汇"
+
+#~ msgid ""
+#~ "GStreamer can play audio using any number of output elements. Some "
+#~ "possible choices are osssink, pulsesink and alsasink. The audiosink can "
+#~ "be a partial pipeline instead of just one element."
+#~ msgstr ""
+#~ "GStreamer可以使用任意数量的输出组件播放音频。可能的选择有osssink、"
+#~ "pulsesink和alsasink。音频汇可以是管道的一部分,而不仅仅为一个组件。"
+
+#~ msgid "description for default GStreamer sound events audiosink"
+#~ msgstr "有关默认GStreamer声音事件的音频汇的说明"
+
+#~ msgid "Describes the selected audiosink element."
+#~ msgstr "描述选定的音频汇组件"
+
+#~ msgid "default GStreamer audiosink for Audio/Video Conferencing"
+#~ msgstr "用于音/视频会议的默认Gstreamer音频汇"
+
+#~ msgid ""
+#~ "description for default GStreamer audiosink for Audio/Video Conferencing"
+#~ msgstr "有关用于音/视频会议的默认Gstreamer音频汇的描述"
+
+#~ msgid "default GStreamer audiosink for Music and Movies"
+#~ msgstr "用于音乐和电影的默认Gstreamer音频汇"
+
+#~ msgid "description for default GStreamer audiosink for Music and Movies"
+#~ msgstr "有关音乐和电影的默认Gstreamer音频汇的描述"
+
+#~ msgid "default GStreamer videosink"
+#~ msgstr "默认GStreamer的视频汇"
+
+#~ msgid ""
+#~ "GStreamer can play video using any number of output elements. Some "
+#~ "possible choices are xvimagesink, ximagesink, sdlvideosink and aasink. "
+#~ "The videosink can be a partial pipeline instead of just one element."
+#~ msgstr ""
+#~ "GStreamer可以使用任意数量的输出组件播放视频。可能的选择有xvimagesink、"
+#~ "ximagesink、sdlvideosink和aasink。视频汇可以是管道的一部分,而不仅仅为一个"
+#~ "组件。"
+
+#~ msgid "description for default GStreamer videosink"
+#~ msgstr "有关默认GStreamer视频汇的描述"
+
+#~ msgid "Describes the selected videosink element."
+#~ msgstr "描述选定的视频汇组件"
+
+#~ msgid "default GStreamer audiosrc"
+#~ msgstr "默认GStreamer音频源"
+
+#~ msgid ""
+#~ "GStreamer can record audio using any number of input elements. Some "
+#~ "possible choices are osssrc, pulsesrc and alsasrc. The audio source can "
+#~ "be a partial pipeline instead of just one element."
+#~ msgstr ""
+#~ "GStreamer可以使用任意数量的输入组件来记录音频。可能的选择有osssrc、"
+#~ "pulsesrc和alsasrc。音频源可以是管道的一部分,而不仅仅为一个组件。"
+
+#~ msgid "description for default GStreamer audiosrc"
+#~ msgstr "有关默认GStreamer音频源的描述"
+
+#~ msgid "Describes the selected audiosrc element."
+#~ msgstr "描述选定的音频源组件"
+
+#~ msgid "default GStreamer videosrc"
+#~ msgstr "默认GStreamer视频源"
+
+#~ msgid ""
+#~ "GStreamer can record video from any number of input elements. Some "
+#~ "possible choices are v4lsrc, v4l2src and videotestsrc. The video source "
+#~ "can be a partial pipeline instead of just one element."
+#~ msgstr ""
+#~ "GStreamer可以使用任意数量的输出组件播放视频。可能的选择有v4lsrc、v4l2src和"
+#~ "videotestsrc。视频源可以是管道的一部分,而不仅仅为一个组件。"
+
+#~ msgid "description for default GStreamer videosrc"
+#~ msgstr "有关默认GStreamer视频源的描述"
+
+#~ msgid "Describes the selected videosrc element."
+#~ msgstr "描述选定的视频源组件"
+
+#~ msgid "default GStreamer visualization"
+#~ msgstr "默认Gstreamer可视化组件"
+
+#~ msgid ""
+#~ "GStreamer can put visualization plugins in a pipeline to transform audio "
+#~ "streams in video frames. Some possible choices are goom, goom2k1 and "
+#~ "synaesthesia. The visualization plugin can be a partial pipeline instead "
+#~ "of just one element."
+#~ msgstr ""
+#~ "GStreamer可以将可视化插件加载于管道中,并在视频帧中传递音频流。可能的选择"
+#~ "有goom、goom2k1和synaesthesia。可视化插件可以是管道的一部分,而不仅仅为一"
+#~ "个组件。"
+
+#~ msgid "description for default GStreamer visualization"
+#~ msgstr "有关默认Gstreamer可视化组件的描述"
+
+#~ msgid "Describes the selected visualization element."
+#~ msgstr "描述选定的可视化组件"
+
 #~ msgid "Internal clock error."
 #~ msgstr "内部时钟错误。"
 
diff --git a/sys/Makefile.am b/sys/Makefile.am
index 1051ce5..32f79fb 100644
--- a/sys/Makefile.am
+++ b/sys/Makefile.am
@@ -28,12 +28,6 @@
 BLUEZ_DIR=
 endif
 
-# if USE_CDROM
-#  CDROM_DIR=cdrom
-# else
-# CDROM_DIR=
-# endif
-
 if USE_WASAPI
 WASAPI_DIR=wasapi
 else
@@ -142,9 +136,22 @@
 UVCH264_DIR=
 endif
 
-SUBDIRS = $(ACM_DIR) $(ANDROID_MEDIA_DIR) $(APPLE_MEDIA_DIR) $(AVC_DIR) $(BLUEZ_DIR) $(D3DVIDEOSINK_DIR) $(DECKLINK_DIR) $(DIRECTSOUND_DIR) $(WINKS_DIR) $(DVB_DIR) $(FBDEV_DIR) $(LINSYS_DIR) $(OPENSLES_DIR) $(PVR_DIR) $(SHM_DIR) $(UVCH264_DIR) $(VCD_DIR) $(VDPAU_DIR) $(WININET_DIR) $(WINSCREENCAP_DIR) $(WASAPI_DIR)
+if USE_NVENC
+NVENC_DIR=nvenc
+else
+NVENC_DIR=
+endif
+
+if USE_TINYALSA
+TINYALSA_DIR=tinyalsa
+else
+TINYALSA_DIR=
+endif
+
+SUBDIRS = $(ACM_DIR) $(ANDROID_MEDIA_DIR) $(APPLE_MEDIA_DIR) $(AVC_DIR) $(BLUEZ_DIR) $(D3DVIDEOSINK_DIR) $(DECKLINK_DIR) $(DIRECTSOUND_DIR) $(WINKS_DIR) $(DVB_DIR) $(FBDEV_DIR) $(LINSYS_DIR) $(OPENSLES_DIR) $(PVR_DIR) $(SHM_DIR) $(UVCH264_DIR) $(VCD_DIR) $(VDPAU_DIR) $(WININET_DIR) $(WINSCREENCAP_DIR) $(WASAPI_DIR) $(NVENC_DIR) $(TINYALSA_DIR)
 
 DIST_SUBDIRS = acmenc acmmp3dec androidmedia applemedia applemedia-nonpublic avc bluez d3dvideosink decklink directsound dvb linsys fbdev dshowdecwrapper dshowsrcwrapper dshowvideosink \
-		opensles pvr2d shm uvch264 vcd vdpau wasapi wininet winks winscreencap
+		opensles pvr2d shm uvch264 vcd vdpau wasapi wininet winks winscreencap \
+		nvenc tinyalsa
 
 include $(top_srcdir)/common/parallel-subdirs.mak
diff --git a/sys/Makefile.in b/sys/Makefile.in
index 4644fa7..ad69ce7 100644
--- a/sys/Makefile.in
+++ b/sys/Makefile.in
@@ -119,16 +119,15 @@
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
 	$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
-	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gsettings.m4 \
-	$(top_srcdir)/m4/gst-fionread.m4 $(top_srcdir)/m4/gst-sdl.m4 \
-	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
-	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
-	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libgcrypt.m4 \
-	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
-	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
-	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
-	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
-	$(top_srcdir)/configure.ac
+	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gst-fionread.m4 \
+	$(top_srcdir)/m4/gst-sdl.m4 $(top_srcdir)/m4/iconv.m4 \
+	$(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \
+	$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
+	$(top_srcdir)/m4/libgcrypt.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
+	$(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
@@ -253,6 +252,8 @@
 CLUTTER_X11_LIBS = @CLUTTER_X11_LIBS@
 CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
+CUDA_CFLAGS = @CUDA_CFLAGS@
+CUDA_LIBS = @CUDA_LIBS@
 CURL_CFLAGS = @CURL_CFLAGS@
 CURL_LIBS = @CURL_LIBS@
 CXX = @CXX@
@@ -290,6 +291,8 @@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
+EGL_CFLAGS = @EGL_CFLAGS@
+EGL_LIBS = @EGL_LIBS@
 EGREP = @EGREP@
 ERROR_CFLAGS = @ERROR_CFLAGS@
 ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
@@ -298,7 +301,6 @@
 EXIF_CFLAGS = @EXIF_CFLAGS@
 EXIF_LIBS = @EXIF_LIBS@
 FAAC_LIBS = @FAAC_LIBS@
-FAAD_IS_NEAAC = @FAAD_IS_NEAAC@
 FAAD_LIBS = @FAAD_LIBS@
 FFLAGS = @FFLAGS@
 FGREP = @FGREP@
@@ -317,8 +319,9 @@
 GIO_LIBS = @GIO_LIBS@
 GIO_UNIX_CFLAGS = @GIO_UNIX_CFLAGS@
 GIO_UNIX_LIBS = @GIO_UNIX_LIBS@
+GLES2_CFLAGS = @GLES2_CFLAGS@
+GLES2_LIBS = @GLES2_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
-GLIB_COMPILE_SCHEMAS = @GLIB_COMPILE_SCHEMAS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
@@ -335,16 +338,17 @@
 GMODULE_NO_EXPORT_LIBS = @GMODULE_NO_EXPORT_LIBS@
 GMSGFMT = @GMSGFMT@
 GMSGFMT_015 = @GMSGFMT_015@
+GNUSTL_CFLAGS = @GNUSTL_CFLAGS@
+GNUSTL_LIBS = @GNUSTL_LIBS@
 GRAPHENE_CFLAGS = @GRAPHENE_CFLAGS@
 GRAPHENE_LIBS = @GRAPHENE_LIBS@
 GREP = @GREP@
-GSETTINGS_CFLAGS = @GSETTINGS_CFLAGS@
-GSETTINGS_DISABLE_SCHEMAS_COMPILE = @GSETTINGS_DISABLE_SCHEMAS_COMPILE@
-GSETTINGS_LIBS = @GSETTINGS_LIBS@
 GSM_LIBS = @GSM_LIBS@
 GSTPB_PLUGINS_DIR = @GSTPB_PLUGINS_DIR@
 GSTPB_PREFIX = @GSTPB_PREFIX@
 GST_AGE = @GST_AGE@
+GST_ALLOCATORS_CFLAGS = @GST_ALLOCATORS_CFLAGS@
+GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
 GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
 GST_API_VERSION = @GST_API_VERSION@
 GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
@@ -370,6 +374,8 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PBUTILS_CFLAGS = @GST_PBUTILS_CFLAGS@
+GST_PBUTILS_LIBS = @GST_PBUTILS_LIBS@
 GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BAD_CFLAGS = @GST_PLUGINS_BAD_CFLAGS@
@@ -395,6 +401,8 @@
 GST_PREFIX = @GST_PREFIX@
 GST_REVISION = @GST_REVISION@
 GST_TOOLS_DIR = @GST_TOOLS_DIR@
+GST_VIDEO_CFLAGS = @GST_VIDEO_CFLAGS@
+GST_VIDEO_LIBS = @GST_VIDEO_LIBS@
 GTK3_CFLAGS = @GTK3_CFLAGS@
 GTK3_GL_CFLAGS = @GTK3_GL_CFLAGS@
 GTK3_GL_LIBS = @GTK3_GL_LIBS@
@@ -496,6 +504,7 @@
 LTLIBICONV = @LTLIBICONV@
 LTLIBINTL = @LTLIBINTL@
 LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
 MANIFEST_TOOL = @MANIFEST_TOOL@
@@ -509,8 +518,6 @@
 MODPLUG_LIBS = @MODPLUG_LIBS@
 MPEG2ENC_CFLAGS = @MPEG2ENC_CFLAGS@
 MPEG2ENC_LIBS = @MPEG2ENC_LIBS@
-MPG123_CFLAGS = @MPG123_CFLAGS@
-MPG123_LIBS = @MPG123_LIBS@
 MPLEX_CFLAGS = @MPLEX_CFLAGS@
 MPLEX_LDFLAGS = @MPLEX_LDFLAGS@
 MPLEX_LIBS = @MPLEX_LIBS@
@@ -526,6 +533,8 @@
 NETTLE_LIBS = @NETTLE_LIBS@
 NM = @NM@
 NMEDIT = @NMEDIT@
+NVENCODE_CFLAGS = @NVENCODE_CFLAGS@
+NVENCODE_LIBS = @NVENCODE_LIBS@
 OBJC = @OBJC@
 OBJCDEPMODE = @OBJCDEPMODE@
 OBJCFLAGS = @OBJCFLAGS@
@@ -583,16 +592,18 @@
 PYTHON_PLATFORM = @PYTHON_PLATFORM@
 PYTHON_PREFIX = @PYTHON_PREFIX@
 PYTHON_VERSION = @PYTHON_VERSION@
+QT_ANDROID_CFLAGS = @QT_ANDROID_CFLAGS@
+QT_ANDROID_LIBS = @QT_ANDROID_LIBS@
 QT_CFLAGS = @QT_CFLAGS@
 QT_LIBS = @QT_LIBS@
+QT_MAC_CFLAGS = @QT_MAC_CFLAGS@
+QT_MAC_LIBS = @QT_MAC_LIBS@
 QT_WAYLAND_CFLAGS = @QT_WAYLAND_CFLAGS@
 QT_WAYLAND_LIBS = @QT_WAYLAND_LIBS@
 QT_X11_CFLAGS = @QT_X11_CFLAGS@
 QT_X11_LIBS = @QT_X11_LIBS@
 RANLIB = @RANLIB@
 RCC = @RCC@
-RSVG_2_36_2_CFLAGS = @RSVG_2_36_2_CFLAGS@
-RSVG_2_36_2_LIBS = @RSVG_2_36_2_LIBS@
 RSVG_CFLAGS = @RSVG_CFLAGS@
 RSVG_LIBS = @RSVG_LIBS@
 RTMP_CFLAGS = @RTMP_CFLAGS@
@@ -644,6 +655,7 @@
 VOAACENC_LIBS = @VOAACENC_LIBS@
 VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
 VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VULKAN_LIBS = @VULKAN_LIBS@
 WARNING_CFLAGS = @WARNING_CFLAGS@
 WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
 WARNING_OBJCFLAGS = @WARNING_OBJCFLAGS@
@@ -654,6 +666,7 @@
 WAYLAND_LIBS = @WAYLAND_LIBS@
 WEBP_CFLAGS = @WEBP_CFLAGS@
 WEBP_LIBS = @WEBP_LIBS@
+WGET = @WGET@
 WILDMIDI_CFLAGS = @WILDMIDI_CFLAGS@
 WILDMIDI_LIBS = @WILDMIDI_LIBS@
 WINKS_LIBS = @WINKS_LIBS@
@@ -663,6 +676,8 @@
 X11_LIBS = @X11_LIBS@
 X265_CFLAGS = @X265_CFLAGS@
 X265_LIBS = @X265_LIBS@
+XCB_CFLAGS = @XCB_CFLAGS@
+XCB_LIBS = @XCB_LIBS@
 XCOMPOSITE_CFLAGS = @XCOMPOSITE_CFLAGS@
 XCOMPOSITE_LIBS = @XCOMPOSITE_LIBS@
 XGETTEXT = @XGETTEXT@
@@ -700,7 +715,6 @@
 docdir = @docdir@
 dvidir = @dvidir@
 exec_prefix = @exec_prefix@
-gsettingsschemadir = @gsettingsschemadir@
 host = @host@
 host_alias = @host_alias@
 host_cpu = @host_cpu@
@@ -751,12 +765,6 @@
 @USE_BLUEZ_FALSE@BLUEZ_DIR = 
 @USE_BLUEZ_TRUE@BLUEZ_DIR = bluez
 @USE_WASAPI_FALSE@WASAPI_DIR = 
-
-# if USE_CDROM
-#  CDROM_DIR=cdrom
-# else
-# CDROM_DIR=
-# endif
 @USE_WASAPI_TRUE@WASAPI_DIR = wasapi
 @USE_DIRECT3D_FALSE@D3DVIDEOSINK_DIR = 
 @USE_DIRECT3D_TRUE@D3DVIDEOSINK_DIR = d3dvideosink
@@ -800,9 +808,14 @@
 @USE_WINSCREENCAP_TRUE@WINSCREENCAP_DIR = winscreencap
 @USE_UVCH264_FALSE@UVCH264_DIR = 
 @USE_UVCH264_TRUE@UVCH264_DIR = uvch264
-SUBDIRS = $(ACM_DIR) $(ANDROID_MEDIA_DIR) $(APPLE_MEDIA_DIR) $(AVC_DIR) $(BLUEZ_DIR) $(D3DVIDEOSINK_DIR) $(DECKLINK_DIR) $(DIRECTSOUND_DIR) $(WINKS_DIR) $(DVB_DIR) $(FBDEV_DIR) $(LINSYS_DIR) $(OPENSLES_DIR) $(PVR_DIR) $(SHM_DIR) $(UVCH264_DIR) $(VCD_DIR) $(VDPAU_DIR) $(WININET_DIR) $(WINSCREENCAP_DIR) $(WASAPI_DIR)
+@USE_NVENC_FALSE@NVENC_DIR = 
+@USE_NVENC_TRUE@NVENC_DIR = nvenc
+@USE_TINYALSA_FALSE@TINYALSA_DIR = 
+@USE_TINYALSA_TRUE@TINYALSA_DIR = tinyalsa
+SUBDIRS = $(ACM_DIR) $(ANDROID_MEDIA_DIR) $(APPLE_MEDIA_DIR) $(AVC_DIR) $(BLUEZ_DIR) $(D3DVIDEOSINK_DIR) $(DECKLINK_DIR) $(DIRECTSOUND_DIR) $(WINKS_DIR) $(DVB_DIR) $(FBDEV_DIR) $(LINSYS_DIR) $(OPENSLES_DIR) $(PVR_DIR) $(SHM_DIR) $(UVCH264_DIR) $(VCD_DIR) $(VDPAU_DIR) $(WININET_DIR) $(WINSCREENCAP_DIR) $(WASAPI_DIR) $(NVENC_DIR) $(TINYALSA_DIR)
 DIST_SUBDIRS = acmenc acmmp3dec androidmedia applemedia applemedia-nonpublic avc bluez d3dvideosink decklink directsound dvb linsys fbdev dshowdecwrapper dshowsrcwrapper dshowvideosink \
-		opensles pvr2d shm uvch264 vcd vdpau wasapi wininet winks winscreencap
+		opensles pvr2d shm uvch264 vcd vdpau wasapi wininet winks winscreencap \
+		nvenc tinyalsa
 
 all: all-recursive
 
diff --git a/sys/acmenc/Makefile.in b/sys/acmenc/Makefile.in
index 1fcf3e8..069cdbe 100644
--- a/sys/acmenc/Makefile.in
+++ b/sys/acmenc/Makefile.in
@@ -115,16 +115,15 @@
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
 	$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
-	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gsettings.m4 \
-	$(top_srcdir)/m4/gst-fionread.m4 $(top_srcdir)/m4/gst-sdl.m4 \
-	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
-	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
-	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libgcrypt.m4 \
-	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
-	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
-	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
-	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
-	$(top_srcdir)/configure.ac
+	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gst-fionread.m4 \
+	$(top_srcdir)/m4/gst-sdl.m4 $(top_srcdir)/m4/iconv.m4 \
+	$(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \
+	$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
+	$(top_srcdir)/m4/libgcrypt.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
+	$(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
@@ -271,6 +270,8 @@
 CLUTTER_X11_LIBS = @CLUTTER_X11_LIBS@
 CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
+CUDA_CFLAGS = @CUDA_CFLAGS@
+CUDA_LIBS = @CUDA_LIBS@
 CURL_CFLAGS = @CURL_CFLAGS@
 CURL_LIBS = @CURL_LIBS@
 CXX = @CXX@
@@ -308,6 +309,8 @@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
+EGL_CFLAGS = @EGL_CFLAGS@
+EGL_LIBS = @EGL_LIBS@
 EGREP = @EGREP@
 ERROR_CFLAGS = @ERROR_CFLAGS@
 ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
@@ -316,7 +319,6 @@
 EXIF_CFLAGS = @EXIF_CFLAGS@
 EXIF_LIBS = @EXIF_LIBS@
 FAAC_LIBS = @FAAC_LIBS@
-FAAD_IS_NEAAC = @FAAD_IS_NEAAC@
 FAAD_LIBS = @FAAD_LIBS@
 FFLAGS = @FFLAGS@
 FGREP = @FGREP@
@@ -335,8 +337,9 @@
 GIO_LIBS = @GIO_LIBS@
 GIO_UNIX_CFLAGS = @GIO_UNIX_CFLAGS@
 GIO_UNIX_LIBS = @GIO_UNIX_LIBS@
+GLES2_CFLAGS = @GLES2_CFLAGS@
+GLES2_LIBS = @GLES2_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
-GLIB_COMPILE_SCHEMAS = @GLIB_COMPILE_SCHEMAS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
@@ -353,16 +356,17 @@
 GMODULE_NO_EXPORT_LIBS = @GMODULE_NO_EXPORT_LIBS@
 GMSGFMT = @GMSGFMT@
 GMSGFMT_015 = @GMSGFMT_015@
+GNUSTL_CFLAGS = @GNUSTL_CFLAGS@
+GNUSTL_LIBS = @GNUSTL_LIBS@
 GRAPHENE_CFLAGS = @GRAPHENE_CFLAGS@
 GRAPHENE_LIBS = @GRAPHENE_LIBS@
 GREP = @GREP@
-GSETTINGS_CFLAGS = @GSETTINGS_CFLAGS@
-GSETTINGS_DISABLE_SCHEMAS_COMPILE = @GSETTINGS_DISABLE_SCHEMAS_COMPILE@
-GSETTINGS_LIBS = @GSETTINGS_LIBS@
 GSM_LIBS = @GSM_LIBS@
 GSTPB_PLUGINS_DIR = @GSTPB_PLUGINS_DIR@
 GSTPB_PREFIX = @GSTPB_PREFIX@
 GST_AGE = @GST_AGE@
+GST_ALLOCATORS_CFLAGS = @GST_ALLOCATORS_CFLAGS@
+GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
 GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
 GST_API_VERSION = @GST_API_VERSION@
 GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
@@ -388,6 +392,8 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PBUTILS_CFLAGS = @GST_PBUTILS_CFLAGS@
+GST_PBUTILS_LIBS = @GST_PBUTILS_LIBS@
 GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BAD_CFLAGS = @GST_PLUGINS_BAD_CFLAGS@
@@ -413,6 +419,8 @@
 GST_PREFIX = @GST_PREFIX@
 GST_REVISION = @GST_REVISION@
 GST_TOOLS_DIR = @GST_TOOLS_DIR@
+GST_VIDEO_CFLAGS = @GST_VIDEO_CFLAGS@
+GST_VIDEO_LIBS = @GST_VIDEO_LIBS@
 GTK3_CFLAGS = @GTK3_CFLAGS@
 GTK3_GL_CFLAGS = @GTK3_GL_CFLAGS@
 GTK3_GL_LIBS = @GTK3_GL_LIBS@
@@ -514,6 +522,7 @@
 LTLIBICONV = @LTLIBICONV@
 LTLIBINTL = @LTLIBINTL@
 LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
 MANIFEST_TOOL = @MANIFEST_TOOL@
@@ -527,8 +536,6 @@
 MODPLUG_LIBS = @MODPLUG_LIBS@
 MPEG2ENC_CFLAGS = @MPEG2ENC_CFLAGS@
 MPEG2ENC_LIBS = @MPEG2ENC_LIBS@
-MPG123_CFLAGS = @MPG123_CFLAGS@
-MPG123_LIBS = @MPG123_LIBS@
 MPLEX_CFLAGS = @MPLEX_CFLAGS@
 MPLEX_LDFLAGS = @MPLEX_LDFLAGS@
 MPLEX_LIBS = @MPLEX_LIBS@
@@ -544,6 +551,8 @@
 NETTLE_LIBS = @NETTLE_LIBS@
 NM = @NM@
 NMEDIT = @NMEDIT@
+NVENCODE_CFLAGS = @NVENCODE_CFLAGS@
+NVENCODE_LIBS = @NVENCODE_LIBS@
 OBJC = @OBJC@
 OBJCDEPMODE = @OBJCDEPMODE@
 OBJCFLAGS = @OBJCFLAGS@
@@ -601,16 +610,18 @@
 PYTHON_PLATFORM = @PYTHON_PLATFORM@
 PYTHON_PREFIX = @PYTHON_PREFIX@
 PYTHON_VERSION = @PYTHON_VERSION@
+QT_ANDROID_CFLAGS = @QT_ANDROID_CFLAGS@
+QT_ANDROID_LIBS = @QT_ANDROID_LIBS@
 QT_CFLAGS = @QT_CFLAGS@
 QT_LIBS = @QT_LIBS@
+QT_MAC_CFLAGS = @QT_MAC_CFLAGS@
+QT_MAC_LIBS = @QT_MAC_LIBS@
 QT_WAYLAND_CFLAGS = @QT_WAYLAND_CFLAGS@
 QT_WAYLAND_LIBS = @QT_WAYLAND_LIBS@
 QT_X11_CFLAGS = @QT_X11_CFLAGS@
 QT_X11_LIBS = @QT_X11_LIBS@
 RANLIB = @RANLIB@
 RCC = @RCC@
-RSVG_2_36_2_CFLAGS = @RSVG_2_36_2_CFLAGS@
-RSVG_2_36_2_LIBS = @RSVG_2_36_2_LIBS@
 RSVG_CFLAGS = @RSVG_CFLAGS@
 RSVG_LIBS = @RSVG_LIBS@
 RTMP_CFLAGS = @RTMP_CFLAGS@
@@ -662,6 +673,7 @@
 VOAACENC_LIBS = @VOAACENC_LIBS@
 VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
 VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VULKAN_LIBS = @VULKAN_LIBS@
 WARNING_CFLAGS = @WARNING_CFLAGS@
 WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
 WARNING_OBJCFLAGS = @WARNING_OBJCFLAGS@
@@ -672,6 +684,7 @@
 WAYLAND_LIBS = @WAYLAND_LIBS@
 WEBP_CFLAGS = @WEBP_CFLAGS@
 WEBP_LIBS = @WEBP_LIBS@
+WGET = @WGET@
 WILDMIDI_CFLAGS = @WILDMIDI_CFLAGS@
 WILDMIDI_LIBS = @WILDMIDI_LIBS@
 WINKS_LIBS = @WINKS_LIBS@
@@ -681,6 +694,8 @@
 X11_LIBS = @X11_LIBS@
 X265_CFLAGS = @X265_CFLAGS@
 X265_LIBS = @X265_LIBS@
+XCB_CFLAGS = @XCB_CFLAGS@
+XCB_LIBS = @XCB_LIBS@
 XCOMPOSITE_CFLAGS = @XCOMPOSITE_CFLAGS@
 XCOMPOSITE_LIBS = @XCOMPOSITE_LIBS@
 XGETTEXT = @XGETTEXT@
@@ -718,7 +733,6 @@
 docdir = @docdir@
 dvidir = @dvidir@
 exec_prefix = @exec_prefix@
-gsettingsschemadir = @gsettingsschemadir@
 host = @host@
 host_alias = @host_alias@
 host_cpu = @host_cpu@
diff --git a/sys/acmenc/acmenc.c b/sys/acmenc/acmenc.c
index 99a0804..7a1c1ff 100644
--- a/sys/acmenc/acmenc.c
+++ b/sys/acmenc/acmenc.c
@@ -50,7 +50,7 @@
 
 static GstStaticPadTemplate acmenc_sink_template =
 GST_STATIC_PAD_TEMPLATE ("sink",
-    GST_PAD_SINK, GST_PAD_ALWAYS, GST_STATIC_CAPS ("audio/x-raw-int, "
+    GST_PAD_SINK, GST_PAD_ALWAYS, GST_STATIC_CAPS ("audio/x-raw, "
         "depth = (int)16, "
         "width = (int)16, "
         "endianness = (int)" G_STRINGIFY (G_BYTE_ORDER) ", "
@@ -106,7 +106,7 @@
 acmenc_caps_from_format (WAVEFORMATEX * fmt)
 {
   return gst_riff_create_audio_caps (fmt->wFormatTag, NULL,
-      (gst_riff_strf_auds *) fmt, NULL, NULL, NULL);
+      (gst_riff_strf_auds *) fmt, NULL, NULL, NULL, NULL);
 }
 
 static gboolean
@@ -261,10 +261,8 @@
     gst_caps_unref (enc->output_caps);
     enc->output_caps = NULL;
   }
-  if (enc->header.pbSrc)
-    g_free (enc->header.pbSrc);
-  if (enc->header.pbDst)
-    g_free (enc->header.pbDst);
+  g_free (enc->header.pbSrc);
+  g_free (enc->header.pbDst);
   memset (&enc->header, 0, sizeof (enc->header));
   if (enc->stream) {
     acmStreamClose (enc->stream, 0);
@@ -300,8 +298,18 @@
   GstFlowReturn ret = GST_FLOW_OK;
   if (enc->header.cbDstLengthUsed > 0) {
     GstBuffer *outbuf = gst_buffer_new_and_alloc (enc->header.cbDstLengthUsed);
-    memcpy (GST_BUFFER_DATA (outbuf), enc->header.pbDst,
-        enc->header.cbDstLengthUsed);
+    if (!outbuf) {
+      GST_WARNING_OBJECT (enc, "cannot allocate a new GstBuffer");
+      goto done_push_output;
+    }
+
+    if (gst_buffer_fill (outbuf, 0, enc->header.pbDst,
+            enc->header.cbDstLengthUsed) != enc->header.cbDstLengthUsed) {
+      gst_buffer_unref (outbuf);
+      GST_WARNING_OBJECT (enc, "unable to fill output buffer");
+      goto done_push_output;
+    }
+
     if (enc->outfmt->nAvgBytesPerSec > 0) {
 
       /* We have a bitrate, so we can create a timestamp, hopefully */
@@ -314,18 +322,24 @@
         enc->header.cbDstLengthUsed);
     ret = gst_pad_push (enc->srcpad, outbuf);
   }
+
+done_push_output:
   return ret;
 }
 
 static GstFlowReturn
-acmenc_chain (GstPad * pad, GstBuffer * buf)
+acmenc_chain (GstPad * pad, GstObject * parent, GstBuffer * buf)
 {
   MMRESULT res;
   ACMEnc *enc = (ACMEnc *) GST_PAD_PARENT (pad);
-  guchar *data = GST_BUFFER_DATA (buf);
-  gint len = GST_BUFFER_SIZE (buf);
+  GstMapInfo map;
+  guchar *data;
+  gint len;
   int chunklen;
   GstFlowReturn ret = GST_FLOW_OK;
+  gst_buffer_map (buf, &map, GST_MAP_READ);
+  len = map.size;
+  data = map.data;
   while (len) {
     chunklen = MIN (len, ACM_BUFFER_SIZE - enc->offset);
     memcpy (enc->header.pbSrc + enc->offset, data, chunklen);
@@ -358,6 +372,7 @@
     /* Write out any data produced */
     acmenc_push_output (enc);
   }
+  gst_buffer_unmap (buf, &map);
   return ret;
 }
 
@@ -383,11 +398,16 @@
 }
 
 static gboolean
-acmenc_sink_event (GstPad * pad, GstEvent * event)
+acmenc_sink_event (GstPad * pad, GstObject * parent, GstEvent * event)
 {
   ACMEnc *enc = (ACMEnc *) GST_PAD_PARENT (pad);
   gboolean res;
   switch (GST_EVENT_TYPE (event)) {
+    case GST_EVENT_CAPS:{
+      GstCaps *caps;
+      gst_event_parse_caps (event, &caps);
+      return acmenc_sink_setcaps (pad, caps);
+    }
     case GST_EVENT_EOS:
       acmenc_finish_stream (enc);
       res = gst_pad_push_event (enc->srcpad, event);
@@ -411,8 +431,6 @@
 {
   enc->sinkpad =
       gst_pad_new_from_static_template (&acmenc_sink_template, "sink");
-  gst_pad_set_setcaps_function (enc->sinkpad,
-      GST_DEBUG_FUNCPTR (acmenc_sink_setcaps));
   gst_pad_set_chain_function (enc->sinkpad, GST_DEBUG_FUNCPTR (acmenc_chain));
   gst_pad_set_event_function (enc->sinkpad,
       GST_DEBUG_FUNCPTR (acmenc_sink_event));
@@ -453,6 +471,12 @@
 acmenc_class_init (ACMEncClass * klass)
 {
   GObjectClass *gobjectclass = (GObjectClass *) klass;
+  GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
+  ACMEncParams *params;
+  ACMDRIVERDETAILS driverdetails;
+  gchar *shortname, *longname, *detail, *description;
+  MMRESULT res;
+
   parent_class = (GstElementClass *) g_type_class_peek_parent (klass);
   gobjectclass->dispose = acmenc_dispose;
   gobjectclass->set_property = acmenc_set_property;
@@ -460,15 +484,6 @@
   g_object_class_install_property (gobjectclass, ARG_BITRATE,
       g_param_spec_int ("bitrate", "Bitrate", "Bitrate to encode at (in bps)",
           0, 1000000, DEFAULT_BITRATE, G_PARAM_READWRITE));
-} static void
-
-acmenc_base_init (ACMEncClass * klass)
-{
-  GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
-  ACMEncParams *params;
-  ACMDRIVERDETAILS driverdetails;
-  gchar *shortname, *longname, *detail, *description;
-  MMRESULT res;
 
   gst_element_class_add_pad_template (element_class,
       gst_static_pad_template_get (&acmenc_sink_template));
@@ -547,7 +562,7 @@
   GType type;
   GTypeInfo typeinfo = {
     sizeof (ACMEncClass),
-    (GBaseInitFunc) acmenc_base_init, NULL,
+    NULL, NULL,
     (GClassInitFunc) acmenc_class_init, NULL, NULL, sizeof (ACMEnc),
     0, (GInstanceInitFunc) acmenc_init,
   };
diff --git a/sys/acmmp3dec/Makefile.in b/sys/acmmp3dec/Makefile.in
index ec4be54..aea6639 100644
--- a/sys/acmmp3dec/Makefile.in
+++ b/sys/acmmp3dec/Makefile.in
@@ -115,16 +115,15 @@
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
 	$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
-	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gsettings.m4 \
-	$(top_srcdir)/m4/gst-fionread.m4 $(top_srcdir)/m4/gst-sdl.m4 \
-	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
-	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
-	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libgcrypt.m4 \
-	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
-	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
-	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
-	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
-	$(top_srcdir)/configure.ac
+	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gst-fionread.m4 \
+	$(top_srcdir)/m4/gst-sdl.m4 $(top_srcdir)/m4/iconv.m4 \
+	$(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \
+	$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
+	$(top_srcdir)/m4/libgcrypt.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
+	$(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
@@ -271,6 +270,8 @@
 CLUTTER_X11_LIBS = @CLUTTER_X11_LIBS@
 CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
+CUDA_CFLAGS = @CUDA_CFLAGS@
+CUDA_LIBS = @CUDA_LIBS@
 CURL_CFLAGS = @CURL_CFLAGS@
 CURL_LIBS = @CURL_LIBS@
 CXX = @CXX@
@@ -308,6 +309,8 @@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
+EGL_CFLAGS = @EGL_CFLAGS@
+EGL_LIBS = @EGL_LIBS@
 EGREP = @EGREP@
 ERROR_CFLAGS = @ERROR_CFLAGS@
 ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
@@ -316,7 +319,6 @@
 EXIF_CFLAGS = @EXIF_CFLAGS@
 EXIF_LIBS = @EXIF_LIBS@
 FAAC_LIBS = @FAAC_LIBS@
-FAAD_IS_NEAAC = @FAAD_IS_NEAAC@
 FAAD_LIBS = @FAAD_LIBS@
 FFLAGS = @FFLAGS@
 FGREP = @FGREP@
@@ -335,8 +337,9 @@
 GIO_LIBS = @GIO_LIBS@
 GIO_UNIX_CFLAGS = @GIO_UNIX_CFLAGS@
 GIO_UNIX_LIBS = @GIO_UNIX_LIBS@
+GLES2_CFLAGS = @GLES2_CFLAGS@
+GLES2_LIBS = @GLES2_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
-GLIB_COMPILE_SCHEMAS = @GLIB_COMPILE_SCHEMAS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
@@ -353,16 +356,17 @@
 GMODULE_NO_EXPORT_LIBS = @GMODULE_NO_EXPORT_LIBS@
 GMSGFMT = @GMSGFMT@
 GMSGFMT_015 = @GMSGFMT_015@
+GNUSTL_CFLAGS = @GNUSTL_CFLAGS@
+GNUSTL_LIBS = @GNUSTL_LIBS@
 GRAPHENE_CFLAGS = @GRAPHENE_CFLAGS@
 GRAPHENE_LIBS = @GRAPHENE_LIBS@
 GREP = @GREP@
-GSETTINGS_CFLAGS = @GSETTINGS_CFLAGS@
-GSETTINGS_DISABLE_SCHEMAS_COMPILE = @GSETTINGS_DISABLE_SCHEMAS_COMPILE@
-GSETTINGS_LIBS = @GSETTINGS_LIBS@
 GSM_LIBS = @GSM_LIBS@
 GSTPB_PLUGINS_DIR = @GSTPB_PLUGINS_DIR@
 GSTPB_PREFIX = @GSTPB_PREFIX@
 GST_AGE = @GST_AGE@
+GST_ALLOCATORS_CFLAGS = @GST_ALLOCATORS_CFLAGS@
+GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
 GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
 GST_API_VERSION = @GST_API_VERSION@
 GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
@@ -388,6 +392,8 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PBUTILS_CFLAGS = @GST_PBUTILS_CFLAGS@
+GST_PBUTILS_LIBS = @GST_PBUTILS_LIBS@
 GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BAD_CFLAGS = @GST_PLUGINS_BAD_CFLAGS@
@@ -413,6 +419,8 @@
 GST_PREFIX = @GST_PREFIX@
 GST_REVISION = @GST_REVISION@
 GST_TOOLS_DIR = @GST_TOOLS_DIR@
+GST_VIDEO_CFLAGS = @GST_VIDEO_CFLAGS@
+GST_VIDEO_LIBS = @GST_VIDEO_LIBS@
 GTK3_CFLAGS = @GTK3_CFLAGS@
 GTK3_GL_CFLAGS = @GTK3_GL_CFLAGS@
 GTK3_GL_LIBS = @GTK3_GL_LIBS@
@@ -514,6 +522,7 @@
 LTLIBICONV = @LTLIBICONV@
 LTLIBINTL = @LTLIBINTL@
 LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
 MANIFEST_TOOL = @MANIFEST_TOOL@
@@ -527,8 +536,6 @@
 MODPLUG_LIBS = @MODPLUG_LIBS@
 MPEG2ENC_CFLAGS = @MPEG2ENC_CFLAGS@
 MPEG2ENC_LIBS = @MPEG2ENC_LIBS@
-MPG123_CFLAGS = @MPG123_CFLAGS@
-MPG123_LIBS = @MPG123_LIBS@
 MPLEX_CFLAGS = @MPLEX_CFLAGS@
 MPLEX_LDFLAGS = @MPLEX_LDFLAGS@
 MPLEX_LIBS = @MPLEX_LIBS@
@@ -544,6 +551,8 @@
 NETTLE_LIBS = @NETTLE_LIBS@
 NM = @NM@
 NMEDIT = @NMEDIT@
+NVENCODE_CFLAGS = @NVENCODE_CFLAGS@
+NVENCODE_LIBS = @NVENCODE_LIBS@
 OBJC = @OBJC@
 OBJCDEPMODE = @OBJCDEPMODE@
 OBJCFLAGS = @OBJCFLAGS@
@@ -601,16 +610,18 @@
 PYTHON_PLATFORM = @PYTHON_PLATFORM@
 PYTHON_PREFIX = @PYTHON_PREFIX@
 PYTHON_VERSION = @PYTHON_VERSION@
+QT_ANDROID_CFLAGS = @QT_ANDROID_CFLAGS@
+QT_ANDROID_LIBS = @QT_ANDROID_LIBS@
 QT_CFLAGS = @QT_CFLAGS@
 QT_LIBS = @QT_LIBS@
+QT_MAC_CFLAGS = @QT_MAC_CFLAGS@
+QT_MAC_LIBS = @QT_MAC_LIBS@
 QT_WAYLAND_CFLAGS = @QT_WAYLAND_CFLAGS@
 QT_WAYLAND_LIBS = @QT_WAYLAND_LIBS@
 QT_X11_CFLAGS = @QT_X11_CFLAGS@
 QT_X11_LIBS = @QT_X11_LIBS@
 RANLIB = @RANLIB@
 RCC = @RCC@
-RSVG_2_36_2_CFLAGS = @RSVG_2_36_2_CFLAGS@
-RSVG_2_36_2_LIBS = @RSVG_2_36_2_LIBS@
 RSVG_CFLAGS = @RSVG_CFLAGS@
 RSVG_LIBS = @RSVG_LIBS@
 RTMP_CFLAGS = @RTMP_CFLAGS@
@@ -662,6 +673,7 @@
 VOAACENC_LIBS = @VOAACENC_LIBS@
 VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
 VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VULKAN_LIBS = @VULKAN_LIBS@
 WARNING_CFLAGS = @WARNING_CFLAGS@
 WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
 WARNING_OBJCFLAGS = @WARNING_OBJCFLAGS@
@@ -672,6 +684,7 @@
 WAYLAND_LIBS = @WAYLAND_LIBS@
 WEBP_CFLAGS = @WEBP_CFLAGS@
 WEBP_LIBS = @WEBP_LIBS@
+WGET = @WGET@
 WILDMIDI_CFLAGS = @WILDMIDI_CFLAGS@
 WILDMIDI_LIBS = @WILDMIDI_LIBS@
 WINKS_LIBS = @WINKS_LIBS@
@@ -681,6 +694,8 @@
 X11_LIBS = @X11_LIBS@
 X265_CFLAGS = @X265_CFLAGS@
 X265_LIBS = @X265_LIBS@
+XCB_CFLAGS = @XCB_CFLAGS@
+XCB_LIBS = @XCB_LIBS@
 XCOMPOSITE_CFLAGS = @XCOMPOSITE_CFLAGS@
 XCOMPOSITE_LIBS = @XCOMPOSITE_LIBS@
 XGETTEXT = @XGETTEXT@
@@ -718,7 +733,6 @@
 docdir = @docdir@
 dvidir = @dvidir@
 exec_prefix = @exec_prefix@
-gsettingsschemadir = @gsettingsschemadir@
 host = @host@
 host_alias = @host_alias@
 host_cpu = @host_cpu@
diff --git a/sys/acmmp3dec/acmmp3dec.c b/sys/acmmp3dec/acmmp3dec.c
index e6d34ba..7537691 100644
--- a/sys/acmmp3dec/acmmp3dec.c
+++ b/sys/acmmp3dec/acmmp3dec.c
@@ -36,6 +36,12 @@
       (acmmp3dec_get_type())
 #define GST_ACM_MP3_DEC(obj) \
       (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_ACM_MP3_DEC,ACMMP3Dec))
+#define GST_ACM_MP3_DEC_CLASS(klass) \
+  (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_ACM_MP3_DEC,ACMMP3DecClass))
+#define GST_IS_ACM_MP3_DEC(obj) \
+  (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_ACM_MP3_DEC))
+#define GST_IS_ACM_MP3_DEC_CLASS(klass) \
+  (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_ACM_MP3_DEC))
 
 #define GST_CAT_DEFAULT acmmp3dec_debug
 GST_DEBUG_CATEGORY_STATIC (acmmp3dec_debug);
@@ -44,7 +50,7 @@
 GST_STATIC_PAD_TEMPLATE ("src",
     GST_PAD_SRC,
     GST_PAD_ALWAYS,
-    GST_STATIC_CAPS ("audio/x-raw-int, "
+    GST_STATIC_CAPS ("audio/x-raw, "
         "depth = (int)16, "
         "width = (int)16, "
         "endianness = (int)" G_STRINGIFY (G_BYTE_ORDER) ", "
@@ -96,13 +102,14 @@
 
 GType acmmp3dec_get_type (void);
 
-GST_BOILERPLATE (ACMMP3Dec, acmmp3dec, GstElement, GST_TYPE_ELEMENT);
+#define acmmp3dec_parent_class parent_class
+G_DEFINE_TYPE (ACMMP3Dec, acmmp3dec, GST_TYPE_ELEMENT);
 
 static GstCaps *
 acmmp3dec_caps_from_format (WAVEFORMATEX * fmt)
 {
   return gst_riff_create_audio_caps (fmt->wFormatTag,
-      NULL, (gst_riff_strf_auds *) fmt, NULL, NULL, NULL);
+      NULL, (gst_riff_strf_auds *) fmt, NULL, NULL, NULL, NULL);
 }
 
 static gboolean
@@ -201,10 +208,8 @@
 
   if (dec->header.fdwStatus & ACMSTREAMHEADER_STATUSF_PREPARED)
     acmStreamUnprepareHeader (dec->stream, &dec->header, 0);
-  if (dec->header.pbSrc)
-    g_free (dec->header.pbSrc);
-  if (dec->header.pbDst)
-    g_free (dec->header.pbDst);
+  g_free (dec->header.pbSrc);
+  g_free (dec->header.pbDst);
   memset (&dec->header, 0, sizeof (dec->header));
 
   if (dec->stream) {
@@ -241,21 +246,28 @@
 
   if (dec->header.cbDstLengthUsed > 0) {
     GstBuffer *outbuf = gst_buffer_new_and_alloc (dec->header.cbDstLengthUsed);
-    memcpy (GST_BUFFER_DATA (outbuf), dec->header.pbDst,
-        dec->header.cbDstLengthUsed);
+    if (!outbuf) {
+      GST_WARNING_OBJECT (dec, "cannot allocate a new GstBuffer");
+      goto done_push_output;
+    }
+
+    if (gst_buffer_fill (outbuf, 0, dec->header.pbDst,
+            dec->header.cbDstLengthUsed) != dec->header.cbDstLengthUsed) {
+      gst_buffer_unref (outbuf);
+      GST_WARNING_OBJECT (dec, "unable to fill output buffer");
+      goto done_push_output;
+    }
 
     if (dec->timestamp != GST_CLOCK_TIME_NONE)
       GST_BUFFER_TIMESTAMP (outbuf) = dec->timestamp;
     GST_BUFFER_DURATION (outbuf) =
-        gst_util_uint64_scale_int (GST_BUFFER_SIZE (outbuf), GST_SECOND,
+        gst_util_uint64_scale_int (dec->header.cbDstLengthUsed, GST_SECOND,
         dec->rate * dec->channels * 2);
 
     GST_DEBUG_OBJECT (dec, "decoded buffer has ts %d, duration %d",
         (int) (GST_BUFFER_TIMESTAMP (outbuf)),
         (int) (GST_BUFFER_DURATION (outbuf)));
 
-    gst_buffer_set_caps (outbuf, dec->output_caps);
-
     if (dec->timestamp != GST_CLOCK_TIME_NONE)
       dec->timestamp += GST_BUFFER_DURATION (outbuf);
 
@@ -265,20 +277,21 @@
   } else
     GST_DEBUG_OBJECT (dec, "Not pushing decoded buffer, no output");
 
-
+done_push_output:
   return ret;
 }
 
 static GstFlowReturn
-acmmp3dec_chain (GstPad * pad, GstBuffer * buf)
+acmmp3dec_chain (GstPad * pad, GstObject * parent, GstBuffer * buf)
 {
   MMRESULT res;
   ACMMP3Dec *dec = (ACMMP3Dec *) GST_PAD_PARENT (pad);
-  guchar *data = GST_BUFFER_DATA (buf);
-  gint len = GST_BUFFER_SIZE (buf);
+  GstMapInfo map;
   GstFlowReturn ret = GST_FLOW_OK;
 
-  if (len > ACM_BUFFER_SIZE) {
+  gst_buffer_map (buf, &map, GST_MAP_READ);
+
+  if (map.size > ACM_BUFFER_SIZE) {
     GST_WARNING_OBJECT (dec, "Impossibly large mp3 frame!");
     ret = GST_FLOW_ERROR;
     goto done;
@@ -290,8 +303,8 @@
     dec->timestamp = GST_BUFFER_TIMESTAMP (buf);
   }
 
-  memcpy (dec->header.pbSrc, data, len);
-  dec->header.cbSrcLength = len;
+  memcpy (dec->header.pbSrc, map.data, map.size);
+  dec->header.cbSrcLength = map.size;
 
   /* Now we have a buffer ready to go */
   res = acmStreamConvert (dec->stream, &dec->header,
@@ -316,6 +329,7 @@
   }
 
 done:
+  gst_buffer_unmap (buf, &map);
   gst_buffer_unref (buf);
 
   return ret;
@@ -342,11 +356,16 @@
 }
 
 static gboolean
-acmmp3dec_sink_event (GstPad * pad, GstEvent * event)
+acmmp3dec_sink_event (GstPad * pad, GstObject * parent, GstEvent * event)
 {
   ACMMP3Dec *dec = (ACMMP3Dec *) GST_PAD_PARENT (pad);
 
   switch (GST_EVENT_TYPE (event)) {
+    case GST_EVENT_CAPS:{
+      GstCaps *caps;
+      gst_event_parse_caps (event, &caps);
+      return acmmp3dec_sink_setcaps (pad, caps);
+    }
     case GST_EVENT_EOS:
       acmmp3dec_finish_stream (dec);
       break;
@@ -375,12 +394,10 @@
 }
 
 static void
-acmmp3dec_init (ACMMP3Dec * dec, ACMMP3DecClass * decclass)
+acmmp3dec_init (ACMMP3Dec * dec)
 {
   dec->sinkpad =
       gst_pad_new_from_static_template (&acmmp3dec_sink_template, "sink");
-  gst_pad_set_setcaps_function (dec->sinkpad,
-      GST_DEBUG_FUNCPTR (acmmp3dec_sink_setcaps));
   gst_pad_set_chain_function (dec->sinkpad,
       GST_DEBUG_FUNCPTR (acmmp3dec_chain));
   gst_pad_set_event_function (dec->sinkpad,
@@ -397,13 +414,8 @@
 acmmp3dec_class_init (ACMMP3DecClass * klass)
 {
   GObjectClass *gobjectclass = (GObjectClass *) klass;
-  gobjectclass->dispose = acmmp3dec_dispose;
-}
-
-static void
-acmmp3dec_base_init (gpointer klass)
-{
   GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
+  gobjectclass->dispose = acmmp3dec_dispose;
 
   gst_element_class_add_pad_template (element_class,
       gst_static_pad_template_get (&acmmp3dec_sink_template));
diff --git a/sys/androidmedia/Makefile.am b/sys/androidmedia/Makefile.am
index 5fcfb8f..7ad9b6e 100644
--- a/sys/androidmedia/Makefile.am
+++ b/sys/androidmedia/Makefile.am
@@ -1,26 +1,44 @@
 plugin_LTLIBRARIES = libgstandroidmedia.la
 
 libgstandroidmedia_la_SOURCES = \
-	gstamc.c \
+	gstahcsrc.c \
 	gstamcaudiodec.c \
+	gstamc.c \
+	gstamcsurface.c \
+	gstamcsurfacetexture.c \
 	gstamcvideodec.c \
 	gstamcvideoenc.c \
+	gst-android-graphics-imageformat.c \
+	gst-android-graphics-surfacetexture.c \
+	gst-android-hardware-camera.c \
 	gstjniutils.c
 
 noinst_HEADERS = \
-	gstamc.h \
-	gstamc-constants.h \
+	gstahcsrc.h \
 	gstamcaudiodec.h \
+	gstamc-constants.h \
+	gstamc.h \
+	gstamcsurface.h \
+	gstamcsurfacetexture.h \
 	gstamcvideodec.h \
 	gstamcvideoenc.h \
+	gst-android-graphics-imageformat.h \
+	gst-android-graphics-surfacetexture.h \
+	gst-android-hardware-camera.h \
 	gstjniutils.h
 
 libgstandroidmedia_la_CFLAGS = \
+	-I$(top_srcdir)/gst-libs \
+	-I$(top_builddir)/gst-libs \
 	$(GST_PLUGINS_BASE_CFLAGS) \
 	$(GST_BASE_CFLAGS) \
 	$(GST_CFLAGS) \
-	$(ORC_CFLAGS)
+	$(ORC_CFLAGS) \
+	-DGST_USE_UNSTABLE_API
+
 libgstandroidmedia_la_LIBADD = \
+	$(top_builddir)/gst-libs/gst/interfaces/libgstphotography-$(GST_API_VERSION).la \
+	$(top_builddir)/gst-libs/gst/gl/libgstgl-$(GST_API_VERSION).la \
 	$(GST_PLUGINS_BASE_LIBS) \
 	-lgstaudio-@GST_API_VERSION@ \
 	-lgstpbutils-@GST_API_VERSION@ \
@@ -30,3 +48,8 @@
 	$(ORC_LIBS)
 libgstandroidmedia_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS)
 libgstandroidmedia_la_LIBTOOLFLAGS = $(GST_PLUGIN_LIBTOOLFLAGS)
+
+androidmedia_java_classesdir = $(datadir)/gst-android/ndk-build/androidmedia/
+androidmedia_java_classes_DATA = \
+	org/freedesktop/gstreamer/androidmedia/GstAhcCallback.java \
+	org/freedesktop/gstreamer/androidmedia/GstAmcOnFrameAvailableListener.java
diff --git a/sys/androidmedia/Makefile.in b/sys/androidmedia/Makefile.in
index cad7484..946a2b6 100644
--- a/sys/androidmedia/Makefile.in
+++ b/sys/androidmedia/Makefile.in
@@ -15,6 +15,7 @@
 @SET_MAKE@
 
 
+
 VPATH = @srcdir@
 am__is_gnu_make = { \
   if test -z '$(MAKELEVEL)'; then \
@@ -116,16 +117,15 @@
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
 	$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
-	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gsettings.m4 \
-	$(top_srcdir)/m4/gst-fionread.m4 $(top_srcdir)/m4/gst-sdl.m4 \
-	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
-	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
-	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libgcrypt.m4 \
-	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
-	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
-	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
-	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
-	$(top_srcdir)/configure.ac
+	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gst-fionread.m4 \
+	$(top_srcdir)/m4/gst-sdl.m4 $(top_srcdir)/m4/iconv.m4 \
+	$(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \
+	$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
+	$(top_srcdir)/m4/libgcrypt.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
+	$(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \
@@ -161,16 +161,24 @@
     || { echo " ( cd '$$dir' && rm -f" $$files ")"; \
          $(am__cd) "$$dir" && rm -f $$files; }; \
   }
-am__installdirs = "$(DESTDIR)$(plugindir)"
+am__installdirs = "$(DESTDIR)$(plugindir)" \
+	"$(DESTDIR)$(androidmedia_java_classesdir)"
 LTLIBRARIES = $(plugin_LTLIBRARIES)
 am__DEPENDENCIES_1 =
-libgstandroidmedia_la_DEPENDENCIES = $(am__DEPENDENCIES_1) \
+libgstandroidmedia_la_DEPENDENCIES = $(top_builddir)/gst-libs/gst/interfaces/libgstphotography-$(GST_API_VERSION).la \
+	$(top_builddir)/gst-libs/gst/gl/libgstgl-$(GST_API_VERSION).la \
 	$(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
-	$(am__DEPENDENCIES_1)
-am_libgstandroidmedia_la_OBJECTS = libgstandroidmedia_la-gstamc.lo \
+	$(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1)
+am_libgstandroidmedia_la_OBJECTS = libgstandroidmedia_la-gstahcsrc.lo \
 	libgstandroidmedia_la-gstamcaudiodec.lo \
+	libgstandroidmedia_la-gstamc.lo \
+	libgstandroidmedia_la-gstamcsurface.lo \
+	libgstandroidmedia_la-gstamcsurfacetexture.lo \
 	libgstandroidmedia_la-gstamcvideodec.lo \
 	libgstandroidmedia_la-gstamcvideoenc.lo \
+	libgstandroidmedia_la-gst-android-graphics-imageformat.lo \
+	libgstandroidmedia_la-gst-android-graphics-surfacetexture.lo \
+	libgstandroidmedia_la-gst-android-hardware-camera.lo \
 	libgstandroidmedia_la-gstjniutils.lo
 libgstandroidmedia_la_OBJECTS = $(am_libgstandroidmedia_la_OBJECTS)
 AM_V_lt = $(am__v_lt_@AM_V@)
@@ -222,6 +230,7 @@
     n|no|NO) false;; \
     *) (install-info --version) >/dev/null 2>&1;; \
   esac
+DATA = $(androidmedia_java_classes_DATA)
 HEADERS = $(noinst_HEADERS)
 am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
 # Read a list of newline-separated strings from the standard input,
@@ -279,6 +288,8 @@
 CLUTTER_X11_LIBS = @CLUTTER_X11_LIBS@
 CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
+CUDA_CFLAGS = @CUDA_CFLAGS@
+CUDA_LIBS = @CUDA_LIBS@
 CURL_CFLAGS = @CURL_CFLAGS@
 CURL_LIBS = @CURL_LIBS@
 CXX = @CXX@
@@ -316,6 +327,8 @@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
+EGL_CFLAGS = @EGL_CFLAGS@
+EGL_LIBS = @EGL_LIBS@
 EGREP = @EGREP@
 ERROR_CFLAGS = @ERROR_CFLAGS@
 ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
@@ -324,7 +337,6 @@
 EXIF_CFLAGS = @EXIF_CFLAGS@
 EXIF_LIBS = @EXIF_LIBS@
 FAAC_LIBS = @FAAC_LIBS@
-FAAD_IS_NEAAC = @FAAD_IS_NEAAC@
 FAAD_LIBS = @FAAD_LIBS@
 FFLAGS = @FFLAGS@
 FGREP = @FGREP@
@@ -343,8 +355,9 @@
 GIO_LIBS = @GIO_LIBS@
 GIO_UNIX_CFLAGS = @GIO_UNIX_CFLAGS@
 GIO_UNIX_LIBS = @GIO_UNIX_LIBS@
+GLES2_CFLAGS = @GLES2_CFLAGS@
+GLES2_LIBS = @GLES2_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
-GLIB_COMPILE_SCHEMAS = @GLIB_COMPILE_SCHEMAS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
@@ -361,16 +374,17 @@
 GMODULE_NO_EXPORT_LIBS = @GMODULE_NO_EXPORT_LIBS@
 GMSGFMT = @GMSGFMT@
 GMSGFMT_015 = @GMSGFMT_015@
+GNUSTL_CFLAGS = @GNUSTL_CFLAGS@
+GNUSTL_LIBS = @GNUSTL_LIBS@
 GRAPHENE_CFLAGS = @GRAPHENE_CFLAGS@
 GRAPHENE_LIBS = @GRAPHENE_LIBS@
 GREP = @GREP@
-GSETTINGS_CFLAGS = @GSETTINGS_CFLAGS@
-GSETTINGS_DISABLE_SCHEMAS_COMPILE = @GSETTINGS_DISABLE_SCHEMAS_COMPILE@
-GSETTINGS_LIBS = @GSETTINGS_LIBS@
 GSM_LIBS = @GSM_LIBS@
 GSTPB_PLUGINS_DIR = @GSTPB_PLUGINS_DIR@
 GSTPB_PREFIX = @GSTPB_PREFIX@
 GST_AGE = @GST_AGE@
+GST_ALLOCATORS_CFLAGS = @GST_ALLOCATORS_CFLAGS@
+GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
 GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
 GST_API_VERSION = @GST_API_VERSION@
 GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
@@ -396,6 +410,8 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PBUTILS_CFLAGS = @GST_PBUTILS_CFLAGS@
+GST_PBUTILS_LIBS = @GST_PBUTILS_LIBS@
 GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BAD_CFLAGS = @GST_PLUGINS_BAD_CFLAGS@
@@ -421,6 +437,8 @@
 GST_PREFIX = @GST_PREFIX@
 GST_REVISION = @GST_REVISION@
 GST_TOOLS_DIR = @GST_TOOLS_DIR@
+GST_VIDEO_CFLAGS = @GST_VIDEO_CFLAGS@
+GST_VIDEO_LIBS = @GST_VIDEO_LIBS@
 GTK3_CFLAGS = @GTK3_CFLAGS@
 GTK3_GL_CFLAGS = @GTK3_GL_CFLAGS@
 GTK3_GL_LIBS = @GTK3_GL_LIBS@
@@ -522,6 +540,7 @@
 LTLIBICONV = @LTLIBICONV@
 LTLIBINTL = @LTLIBINTL@
 LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
 MANIFEST_TOOL = @MANIFEST_TOOL@
@@ -535,8 +554,6 @@
 MODPLUG_LIBS = @MODPLUG_LIBS@
 MPEG2ENC_CFLAGS = @MPEG2ENC_CFLAGS@
 MPEG2ENC_LIBS = @MPEG2ENC_LIBS@
-MPG123_CFLAGS = @MPG123_CFLAGS@
-MPG123_LIBS = @MPG123_LIBS@
 MPLEX_CFLAGS = @MPLEX_CFLAGS@
 MPLEX_LDFLAGS = @MPLEX_LDFLAGS@
 MPLEX_LIBS = @MPLEX_LIBS@
@@ -552,6 +569,8 @@
 NETTLE_LIBS = @NETTLE_LIBS@
 NM = @NM@
 NMEDIT = @NMEDIT@
+NVENCODE_CFLAGS = @NVENCODE_CFLAGS@
+NVENCODE_LIBS = @NVENCODE_LIBS@
 OBJC = @OBJC@
 OBJCDEPMODE = @OBJCDEPMODE@
 OBJCFLAGS = @OBJCFLAGS@
@@ -609,16 +628,18 @@
 PYTHON_PLATFORM = @PYTHON_PLATFORM@
 PYTHON_PREFIX = @PYTHON_PREFIX@
 PYTHON_VERSION = @PYTHON_VERSION@
+QT_ANDROID_CFLAGS = @QT_ANDROID_CFLAGS@
+QT_ANDROID_LIBS = @QT_ANDROID_LIBS@
 QT_CFLAGS = @QT_CFLAGS@
 QT_LIBS = @QT_LIBS@
+QT_MAC_CFLAGS = @QT_MAC_CFLAGS@
+QT_MAC_LIBS = @QT_MAC_LIBS@
 QT_WAYLAND_CFLAGS = @QT_WAYLAND_CFLAGS@
 QT_WAYLAND_LIBS = @QT_WAYLAND_LIBS@
 QT_X11_CFLAGS = @QT_X11_CFLAGS@
 QT_X11_LIBS = @QT_X11_LIBS@
 RANLIB = @RANLIB@
 RCC = @RCC@
-RSVG_2_36_2_CFLAGS = @RSVG_2_36_2_CFLAGS@
-RSVG_2_36_2_LIBS = @RSVG_2_36_2_LIBS@
 RSVG_CFLAGS = @RSVG_CFLAGS@
 RSVG_LIBS = @RSVG_LIBS@
 RTMP_CFLAGS = @RTMP_CFLAGS@
@@ -670,6 +691,7 @@
 VOAACENC_LIBS = @VOAACENC_LIBS@
 VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
 VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VULKAN_LIBS = @VULKAN_LIBS@
 WARNING_CFLAGS = @WARNING_CFLAGS@
 WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
 WARNING_OBJCFLAGS = @WARNING_OBJCFLAGS@
@@ -680,6 +702,7 @@
 WAYLAND_LIBS = @WAYLAND_LIBS@
 WEBP_CFLAGS = @WEBP_CFLAGS@
 WEBP_LIBS = @WEBP_LIBS@
+WGET = @WGET@
 WILDMIDI_CFLAGS = @WILDMIDI_CFLAGS@
 WILDMIDI_LIBS = @WILDMIDI_LIBS@
 WINKS_LIBS = @WINKS_LIBS@
@@ -689,6 +712,8 @@
 X11_LIBS = @X11_LIBS@
 X265_CFLAGS = @X265_CFLAGS@
 X265_LIBS = @X265_LIBS@
+XCB_CFLAGS = @XCB_CFLAGS@
+XCB_LIBS = @XCB_LIBS@
 XCOMPOSITE_CFLAGS = @XCOMPOSITE_CFLAGS@
 XCOMPOSITE_LIBS = @XCOMPOSITE_LIBS@
 XGETTEXT = @XGETTEXT@
@@ -726,7 +751,6 @@
 docdir = @docdir@
 dvidir = @dvidir@
 exec_prefix = @exec_prefix@
-gsettingsschemadir = @gsettingsschemadir@
 host = @host@
 host_alias = @host_alias@
 host_cpu = @host_cpu@
@@ -768,27 +792,44 @@
 wayland_scanner = @wayland_scanner@
 plugin_LTLIBRARIES = libgstandroidmedia.la
 libgstandroidmedia_la_SOURCES = \
-	gstamc.c \
+	gstahcsrc.c \
 	gstamcaudiodec.c \
+	gstamc.c \
+	gstamcsurface.c \
+	gstamcsurfacetexture.c \
 	gstamcvideodec.c \
 	gstamcvideoenc.c \
+	gst-android-graphics-imageformat.c \
+	gst-android-graphics-surfacetexture.c \
+	gst-android-hardware-camera.c \
 	gstjniutils.c
 
 noinst_HEADERS = \
-	gstamc.h \
-	gstamc-constants.h \
+	gstahcsrc.h \
 	gstamcaudiodec.h \
+	gstamc-constants.h \
+	gstamc.h \
+	gstamcsurface.h \
+	gstamcsurfacetexture.h \
 	gstamcvideodec.h \
 	gstamcvideoenc.h \
+	gst-android-graphics-imageformat.h \
+	gst-android-graphics-surfacetexture.h \
+	gst-android-hardware-camera.h \
 	gstjniutils.h
 
 libgstandroidmedia_la_CFLAGS = \
+	-I$(top_srcdir)/gst-libs \
+	-I$(top_builddir)/gst-libs \
 	$(GST_PLUGINS_BASE_CFLAGS) \
 	$(GST_BASE_CFLAGS) \
 	$(GST_CFLAGS) \
-	$(ORC_CFLAGS)
+	$(ORC_CFLAGS) \
+	-DGST_USE_UNSTABLE_API
 
 libgstandroidmedia_la_LIBADD = \
+	$(top_builddir)/gst-libs/gst/interfaces/libgstphotography-$(GST_API_VERSION).la \
+	$(top_builddir)/gst-libs/gst/gl/libgstgl-$(GST_API_VERSION).la \
 	$(GST_PLUGINS_BASE_LIBS) \
 	-lgstaudio-@GST_API_VERSION@ \
 	-lgstpbutils-@GST_API_VERSION@ \
@@ -799,6 +840,11 @@
 
 libgstandroidmedia_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS)
 libgstandroidmedia_la_LIBTOOLFLAGS = $(GST_PLUGIN_LIBTOOLFLAGS)
+androidmedia_java_classesdir = $(datadir)/gst-android/ndk-build/androidmedia/
+androidmedia_java_classes_DATA = \
+	org/freedesktop/gstreamer/androidmedia/GstAhcCallback.java \
+	org/freedesktop/gstreamer/androidmedia/GstAmcOnFrameAvailableListener.java
+
 all: all-am
 
 .SUFFIXES:
@@ -877,8 +923,14 @@
 distclean-compile:
 	-rm -f *.tab.c
 
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstandroidmedia_la-gst-android-graphics-imageformat.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstandroidmedia_la-gst-android-graphics-surfacetexture.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstandroidmedia_la-gst-android-hardware-camera.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstandroidmedia_la-gstahcsrc.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstandroidmedia_la-gstamc.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstandroidmedia_la-gstamcaudiodec.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstandroidmedia_la-gstamcsurface.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstandroidmedia_la-gstamcsurfacetexture.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstandroidmedia_la-gstamcvideodec.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstandroidmedia_la-gstamcvideoenc.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstandroidmedia_la-gstjniutils.Plo@am__quote@
@@ -907,12 +959,12 @@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $<
 
-libgstandroidmedia_la-gstamc.lo: gstamc.c
-@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstandroidmedia_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstandroidmedia_la_CFLAGS) $(CFLAGS) -MT libgstandroidmedia_la-gstamc.lo -MD -MP -MF $(DEPDIR)/libgstandroidmedia_la-gstamc.Tpo -c -o libgstandroidmedia_la-gstamc.lo `test -f 'gstamc.c' || echo '$(srcdir)/'`gstamc.c
-@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstandroidmedia_la-gstamc.Tpo $(DEPDIR)/libgstandroidmedia_la-gstamc.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='gstamc.c' object='libgstandroidmedia_la-gstamc.lo' libtool=yes @AMDEPBACKSLASH@
+libgstandroidmedia_la-gstahcsrc.lo: gstahcsrc.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstandroidmedia_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstandroidmedia_la_CFLAGS) $(CFLAGS) -MT libgstandroidmedia_la-gstahcsrc.lo -MD -MP -MF $(DEPDIR)/libgstandroidmedia_la-gstahcsrc.Tpo -c -o libgstandroidmedia_la-gstahcsrc.lo `test -f 'gstahcsrc.c' || echo '$(srcdir)/'`gstahcsrc.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstandroidmedia_la-gstahcsrc.Tpo $(DEPDIR)/libgstandroidmedia_la-gstahcsrc.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='gstahcsrc.c' object='libgstandroidmedia_la-gstahcsrc.lo' libtool=yes @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstandroidmedia_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstandroidmedia_la_CFLAGS) $(CFLAGS) -c -o libgstandroidmedia_la-gstamc.lo `test -f 'gstamc.c' || echo '$(srcdir)/'`gstamc.c
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstandroidmedia_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstandroidmedia_la_CFLAGS) $(CFLAGS) -c -o libgstandroidmedia_la-gstahcsrc.lo `test -f 'gstahcsrc.c' || echo '$(srcdir)/'`gstahcsrc.c
 
 libgstandroidmedia_la-gstamcaudiodec.lo: gstamcaudiodec.c
 @am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstandroidmedia_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstandroidmedia_la_CFLAGS) $(CFLAGS) -MT libgstandroidmedia_la-gstamcaudiodec.lo -MD -MP -MF $(DEPDIR)/libgstandroidmedia_la-gstamcaudiodec.Tpo -c -o libgstandroidmedia_la-gstamcaudiodec.lo `test -f 'gstamcaudiodec.c' || echo '$(srcdir)/'`gstamcaudiodec.c
@@ -921,6 +973,27 @@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstandroidmedia_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstandroidmedia_la_CFLAGS) $(CFLAGS) -c -o libgstandroidmedia_la-gstamcaudiodec.lo `test -f 'gstamcaudiodec.c' || echo '$(srcdir)/'`gstamcaudiodec.c
 
+libgstandroidmedia_la-gstamc.lo: gstamc.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstandroidmedia_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstandroidmedia_la_CFLAGS) $(CFLAGS) -MT libgstandroidmedia_la-gstamc.lo -MD -MP -MF $(DEPDIR)/libgstandroidmedia_la-gstamc.Tpo -c -o libgstandroidmedia_la-gstamc.lo `test -f 'gstamc.c' || echo '$(srcdir)/'`gstamc.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstandroidmedia_la-gstamc.Tpo $(DEPDIR)/libgstandroidmedia_la-gstamc.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='gstamc.c' object='libgstandroidmedia_la-gstamc.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstandroidmedia_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstandroidmedia_la_CFLAGS) $(CFLAGS) -c -o libgstandroidmedia_la-gstamc.lo `test -f 'gstamc.c' || echo '$(srcdir)/'`gstamc.c
+
+libgstandroidmedia_la-gstamcsurface.lo: gstamcsurface.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstandroidmedia_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstandroidmedia_la_CFLAGS) $(CFLAGS) -MT libgstandroidmedia_la-gstamcsurface.lo -MD -MP -MF $(DEPDIR)/libgstandroidmedia_la-gstamcsurface.Tpo -c -o libgstandroidmedia_la-gstamcsurface.lo `test -f 'gstamcsurface.c' || echo '$(srcdir)/'`gstamcsurface.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstandroidmedia_la-gstamcsurface.Tpo $(DEPDIR)/libgstandroidmedia_la-gstamcsurface.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='gstamcsurface.c' object='libgstandroidmedia_la-gstamcsurface.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstandroidmedia_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstandroidmedia_la_CFLAGS) $(CFLAGS) -c -o libgstandroidmedia_la-gstamcsurface.lo `test -f 'gstamcsurface.c' || echo '$(srcdir)/'`gstamcsurface.c
+
+libgstandroidmedia_la-gstamcsurfacetexture.lo: gstamcsurfacetexture.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstandroidmedia_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstandroidmedia_la_CFLAGS) $(CFLAGS) -MT libgstandroidmedia_la-gstamcsurfacetexture.lo -MD -MP -MF $(DEPDIR)/libgstandroidmedia_la-gstamcsurfacetexture.Tpo -c -o libgstandroidmedia_la-gstamcsurfacetexture.lo `test -f 'gstamcsurfacetexture.c' || echo '$(srcdir)/'`gstamcsurfacetexture.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstandroidmedia_la-gstamcsurfacetexture.Tpo $(DEPDIR)/libgstandroidmedia_la-gstamcsurfacetexture.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='gstamcsurfacetexture.c' object='libgstandroidmedia_la-gstamcsurfacetexture.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstandroidmedia_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstandroidmedia_la_CFLAGS) $(CFLAGS) -c -o libgstandroidmedia_la-gstamcsurfacetexture.lo `test -f 'gstamcsurfacetexture.c' || echo '$(srcdir)/'`gstamcsurfacetexture.c
+
 libgstandroidmedia_la-gstamcvideodec.lo: gstamcvideodec.c
 @am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstandroidmedia_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstandroidmedia_la_CFLAGS) $(CFLAGS) -MT libgstandroidmedia_la-gstamcvideodec.lo -MD -MP -MF $(DEPDIR)/libgstandroidmedia_la-gstamcvideodec.Tpo -c -o libgstandroidmedia_la-gstamcvideodec.lo `test -f 'gstamcvideodec.c' || echo '$(srcdir)/'`gstamcvideodec.c
 @am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstandroidmedia_la-gstamcvideodec.Tpo $(DEPDIR)/libgstandroidmedia_la-gstamcvideodec.Plo
@@ -935,6 +1008,27 @@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstandroidmedia_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstandroidmedia_la_CFLAGS) $(CFLAGS) -c -o libgstandroidmedia_la-gstamcvideoenc.lo `test -f 'gstamcvideoenc.c' || echo '$(srcdir)/'`gstamcvideoenc.c
 
+libgstandroidmedia_la-gst-android-graphics-imageformat.lo: gst-android-graphics-imageformat.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstandroidmedia_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstandroidmedia_la_CFLAGS) $(CFLAGS) -MT libgstandroidmedia_la-gst-android-graphics-imageformat.lo -MD -MP -MF $(DEPDIR)/libgstandroidmedia_la-gst-android-graphics-imageformat.Tpo -c -o libgstandroidmedia_la-gst-android-graphics-imageformat.lo `test -f 'gst-android-graphics-imageformat.c' || echo '$(srcdir)/'`gst-android-graphics-imageformat.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstandroidmedia_la-gst-android-graphics-imageformat.Tpo $(DEPDIR)/libgstandroidmedia_la-gst-android-graphics-imageformat.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='gst-android-graphics-imageformat.c' object='libgstandroidmedia_la-gst-android-graphics-imageformat.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstandroidmedia_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstandroidmedia_la_CFLAGS) $(CFLAGS) -c -o libgstandroidmedia_la-gst-android-graphics-imageformat.lo `test -f 'gst-android-graphics-imageformat.c' || echo '$(srcdir)/'`gst-android-graphics-imageformat.c
+
+libgstandroidmedia_la-gst-android-graphics-surfacetexture.lo: gst-android-graphics-surfacetexture.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstandroidmedia_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstandroidmedia_la_CFLAGS) $(CFLAGS) -MT libgstandroidmedia_la-gst-android-graphics-surfacetexture.lo -MD -MP -MF $(DEPDIR)/libgstandroidmedia_la-gst-android-graphics-surfacetexture.Tpo -c -o libgstandroidmedia_la-gst-android-graphics-surfacetexture.lo `test -f 'gst-android-graphics-surfacetexture.c' || echo '$(srcdir)/'`gst-android-graphics-surfacetexture.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstandroidmedia_la-gst-android-graphics-surfacetexture.Tpo $(DEPDIR)/libgstandroidmedia_la-gst-android-graphics-surfacetexture.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='gst-android-graphics-surfacetexture.c' object='libgstandroidmedia_la-gst-android-graphics-surfacetexture.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstandroidmedia_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstandroidmedia_la_CFLAGS) $(CFLAGS) -c -o libgstandroidmedia_la-gst-android-graphics-surfacetexture.lo `test -f 'gst-android-graphics-surfacetexture.c' || echo '$(srcdir)/'`gst-android-graphics-surfacetexture.c
+
+libgstandroidmedia_la-gst-android-hardware-camera.lo: gst-android-hardware-camera.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstandroidmedia_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstandroidmedia_la_CFLAGS) $(CFLAGS) -MT libgstandroidmedia_la-gst-android-hardware-camera.lo -MD -MP -MF $(DEPDIR)/libgstandroidmedia_la-gst-android-hardware-camera.Tpo -c -o libgstandroidmedia_la-gst-android-hardware-camera.lo `test -f 'gst-android-hardware-camera.c' || echo '$(srcdir)/'`gst-android-hardware-camera.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstandroidmedia_la-gst-android-hardware-camera.Tpo $(DEPDIR)/libgstandroidmedia_la-gst-android-hardware-camera.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='gst-android-hardware-camera.c' object='libgstandroidmedia_la-gst-android-hardware-camera.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstandroidmedia_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstandroidmedia_la_CFLAGS) $(CFLAGS) -c -o libgstandroidmedia_la-gst-android-hardware-camera.lo `test -f 'gst-android-hardware-camera.c' || echo '$(srcdir)/'`gst-android-hardware-camera.c
+
 libgstandroidmedia_la-gstjniutils.lo: gstjniutils.c
 @am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstandroidmedia_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstandroidmedia_la_CFLAGS) $(CFLAGS) -MT libgstandroidmedia_la-gstjniutils.lo -MD -MP -MF $(DEPDIR)/libgstandroidmedia_la-gstjniutils.Tpo -c -o libgstandroidmedia_la-gstjniutils.lo `test -f 'gstjniutils.c' || echo '$(srcdir)/'`gstjniutils.c
 @am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstandroidmedia_la-gstjniutils.Tpo $(DEPDIR)/libgstandroidmedia_la-gstjniutils.Plo
@@ -947,6 +1041,27 @@
 
 clean-libtool:
 	-rm -rf .libs _libs
+install-androidmedia_java_classesDATA: $(androidmedia_java_classes_DATA)
+	@$(NORMAL_INSTALL)
+	@list='$(androidmedia_java_classes_DATA)'; test -n "$(androidmedia_java_classesdir)" || list=; \
+	if test -n "$$list"; then \
+	  echo " $(MKDIR_P) '$(DESTDIR)$(androidmedia_java_classesdir)'"; \
+	  $(MKDIR_P) "$(DESTDIR)$(androidmedia_java_classesdir)" || exit 1; \
+	fi; \
+	for p in $$list; do \
+	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+	  echo "$$d$$p"; \
+	done | $(am__base_list) | \
+	while read files; do \
+	  echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(androidmedia_java_classesdir)'"; \
+	  $(INSTALL_DATA) $$files "$(DESTDIR)$(androidmedia_java_classesdir)" || exit $$?; \
+	done
+
+uninstall-androidmedia_java_classesDATA:
+	@$(NORMAL_UNINSTALL)
+	@list='$(androidmedia_java_classes_DATA)'; test -n "$(androidmedia_java_classesdir)" || list=; \
+	files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+	dir='$(DESTDIR)$(androidmedia_java_classesdir)'; $(am__uninstall_files_from_dir)
 
 ID: $(am__tagged_files)
 	$(am__define_uniq_tagged_files); mkid -fID $$unique
@@ -1032,9 +1147,9 @@
 	done
 check-am: all-am
 check: check-am
-all-am: Makefile $(LTLIBRARIES) $(HEADERS)
+all-am: Makefile $(LTLIBRARIES) $(DATA) $(HEADERS)
 installdirs:
-	for dir in "$(DESTDIR)$(plugindir)"; do \
+	for dir in "$(DESTDIR)$(plugindir)" "$(DESTDIR)$(androidmedia_java_classesdir)"; do \
 	  test -z "$$dir" || $(MKDIR_P) "$$dir"; \
 	done
 install: install-am
@@ -1090,7 +1205,8 @@
 
 info-am:
 
-install-data-am: install-pluginLTLIBRARIES
+install-data-am: install-androidmedia_java_classesDATA \
+	install-pluginLTLIBRARIES
 
 install-dvi: install-dvi-am
 
@@ -1136,7 +1252,8 @@
 
 ps-am:
 
-uninstall-am: uninstall-pluginLTLIBRARIES
+uninstall-am: uninstall-androidmedia_java_classesDATA \
+	uninstall-pluginLTLIBRARIES
 
 .MAKE: install-am install-strip
 
@@ -1144,7 +1261,8 @@
 	clean-libtool clean-pluginLTLIBRARIES cscopelist-am ctags \
 	ctags-am distclean distclean-compile distclean-generic \
 	distclean-libtool distclean-tags distdir dvi dvi-am html \
-	html-am info info-am install install-am install-data \
+	html-am info info-am install install-am \
+	install-androidmedia_java_classesDATA install-data \
 	install-data-am install-dvi install-dvi-am install-exec \
 	install-exec-am install-html install-html-am install-info \
 	install-info-am install-man install-pdf install-pdf-am \
@@ -1153,6 +1271,7 @@
 	maintainer-clean maintainer-clean-generic mostlyclean \
 	mostlyclean-compile mostlyclean-generic mostlyclean-libtool \
 	pdf pdf-am ps ps-am tags tags-am uninstall uninstall-am \
+	uninstall-androidmedia_java_classesDATA \
 	uninstall-pluginLTLIBRARIES
 
 .PRECIOUS: Makefile
diff --git a/sys/androidmedia/gst-android-graphics-imageformat.c b/sys/androidmedia/gst-android-graphics-imageformat.c
new file mode 100644
index 0000000..5b76fcd
--- /dev/null
+++ b/sys/androidmedia/gst-android-graphics-imageformat.c
@@ -0,0 +1,193 @@
+/*
+ * Copyright (C) 2012, Collabora Ltd.
+ * Copyright (C) 2012, Cisco Systems, Inc.
+ *   Author: Youness Alaoui <youness.alaoui@collabora.co.uk>
+ *
+ * Copyright (C) 2015, Collabora Ltd.
+ *   Author: Justin Kim <justin.kim@collabora.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation
+ * version 2.1 of the License.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301 USA
+ *
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include "gstjniutils.h"
+
+#include "gst-android-graphics-imageformat.h"
+
+
+static struct
+{
+  jclass klass;
+  jmethodID get_bits_per_pixel;
+  jint JPEG;
+  jint NV16;
+  jint NV21;
+  jint RGB_565;
+  jint UNKNOWN;
+  jint YUY2;
+  jint YV12;
+} android_graphics_imageformat = {
+0};
+
+gint ImageFormat_JPEG;
+gint ImageFormat_NV16;
+gint ImageFormat_NV21;
+gint ImageFormat_RGB_565;
+gint ImageFormat_UNKNOWN;
+gint ImageFormat_YUY2;
+gint ImageFormat_YV12;
+
+static gboolean
+_init_classes (void)
+{
+  JNIEnv *env;
+
+  jfieldID fieldID;
+  jclass klass;
+
+  GError *err = NULL;
+
+  env = gst_amc_jni_get_env ();
+
+  /* android.graphics.ImageFormat */
+  klass = android_graphics_imageformat.klass =
+      gst_amc_jni_get_class (env, &err, "android/graphics/ImageFormat");
+
+  if (err)
+    goto failed;
+
+  android_graphics_imageformat.get_bits_per_pixel =
+      gst_amc_jni_get_static_method_id (env, &err, klass,
+      "getBitsPerPixel", "(I)I");
+
+  if (err)
+    goto failed;
+
+  fieldID = gst_amc_jni_get_static_field_id (env, &err, klass, "JPEG", "I");
+  if (err)
+    goto failed;
+  if (!gst_amc_jni_get_static_int_field (env, &err, klass, fieldID,
+          &android_graphics_imageformat.JPEG))
+    goto failed;
+  ImageFormat_JPEG = android_graphics_imageformat.JPEG;
+
+  fieldID = gst_amc_jni_get_static_field_id (env, &err, klass, "NV16", "I");
+  if (err)
+    goto failed;
+  if (!gst_amc_jni_get_static_int_field (env, &err, klass, fieldID,
+          &android_graphics_imageformat.NV16))
+    goto failed;
+  ImageFormat_NV16 = android_graphics_imageformat.NV16;
+
+  fieldID = gst_amc_jni_get_static_field_id (env, &err, klass, "NV21", "I");
+  if (err)
+    goto failed;
+  if (!gst_amc_jni_get_static_int_field (env, &err, klass, fieldID,
+          &android_graphics_imageformat.NV21))
+    goto failed;
+  ImageFormat_NV21 = android_graphics_imageformat.NV21;
+
+  fieldID = gst_amc_jni_get_static_field_id (env, &err, klass, "RGB_565", "I");
+  if (err)
+    goto failed;
+  if (!gst_amc_jni_get_static_int_field (env, &err, klass, fieldID,
+          &android_graphics_imageformat.RGB_565))
+    goto failed;
+  ImageFormat_RGB_565 = android_graphics_imageformat.RGB_565;
+
+  fieldID = gst_amc_jni_get_static_field_id (env, &err, klass, "UNKNOWN", "I");
+  if (err)
+    goto failed;
+  if (!gst_amc_jni_get_static_int_field (env, &err, klass, fieldID,
+          &android_graphics_imageformat.UNKNOWN))
+    goto failed;
+  ImageFormat_UNKNOWN = android_graphics_imageformat.UNKNOWN;
+
+  fieldID = gst_amc_jni_get_static_field_id (env, &err, klass, "YUY2", "I");
+  if (err)
+    goto failed;
+  if (!gst_amc_jni_get_static_int_field (env, &err, klass, fieldID,
+          &android_graphics_imageformat.YUY2))
+    goto failed;
+  ImageFormat_YUY2 = android_graphics_imageformat.YUY2;
+
+  fieldID = gst_amc_jni_get_static_field_id (env, &err, klass, "YV12", "I");
+  if (err)
+    goto failed;
+  if (!gst_amc_jni_get_static_int_field (env, &err, klass, fieldID,
+          &android_graphics_imageformat.YV12))
+    goto failed;
+  ImageFormat_YV12 = android_graphics_imageformat.YV12;
+
+  return TRUE;
+
+failed:
+  if (err) {
+    GST_ERROR ("Failed to get android.graphics.ImageFormat class: %s",
+        err->message);
+    g_clear_error (&err);
+  }
+
+  return FALSE;
+}
+
+gboolean
+gst_android_graphics_imageformat_init (void)
+{
+  if (!_init_classes ()) {
+    gst_android_graphics_imageformat_deinit ();
+    return FALSE;
+  }
+
+  return TRUE;
+}
+
+void
+gst_android_graphics_imageformat_deinit (void)
+{
+  JNIEnv *env = gst_amc_jni_get_env ();
+
+  if (android_graphics_imageformat.klass)
+    (*env)->DeleteGlobalRef (env, android_graphics_imageformat.klass);
+  android_graphics_imageformat.klass = NULL;
+}
+
+/* android.graphics.ImageFormat */
+gint
+gst_ag_imageformat_get_bits_per_pixel (gint format)
+{
+  JNIEnv *env;
+  GError *err = NULL;
+
+  jclass klass = android_graphics_imageformat.klass;
+
+  jint bpp = 0;
+
+  env = gst_amc_jni_get_env ();
+
+  if (!gst_amc_jni_call_static_int_method (env, &err,
+          klass, android_graphics_imageformat.get_bits_per_pixel, &bpp,
+          format)) {
+    GST_ERROR ("Failed to get android.graphics.ImageFormat class: %s",
+        err->message);
+    g_clear_error (&err);
+  }
+
+  return bpp;
+}
diff --git a/sys/androidmedia/gst-android-graphics-imageformat.h b/sys/androidmedia/gst-android-graphics-imageformat.h
new file mode 100644
index 0000000..aff218b
--- /dev/null
+++ b/sys/androidmedia/gst-android-graphics-imageformat.h
@@ -0,0 +1,49 @@
+/*
+ * Copyright (C) 2012, Collabora Ltd.
+ * Copyright (C) 2012, Cisco Systems, Inc.
+ *   Author: Youness Alaoui <youness.alaoui@collabora.co.uk>
+ *
+ * Copyright (C) 2015, Collabora Ltd.
+ *   Author: Justin Kim <justin.kim@collabora.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation
+ * version 2.1 of the License.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301 USA
+ *
+ */
+
+#ifndef __GST_ANDROID_GRAPHICS_IMAGEFORMAT_H__
+#define __GST_ANDROID_GRAPHICS_IMAGEFORMAT_H__
+
+#include <gst/gst.h>
+
+G_BEGIN_DECLS
+
+/* android.graphics.ImageFormat */
+extern gint ImageFormat_JPEG;
+extern gint ImageFormat_NV16;
+extern gint ImageFormat_NV21;
+extern gint ImageFormat_RGB_565;
+extern gint ImageFormat_UNKNOWN;
+extern gint ImageFormat_YUY2;
+extern gint ImageFormat_YV12;
+
+gboolean gst_android_graphics_imageformat_init (void);
+void gst_android_graphics_imageformat_deinit (void);
+
+gint gst_ag_imageformat_get_bits_per_pixel (gint format);
+
+G_END_DECLS
+
+#endif /* __GST_ANDROID_GRAPHICS_IMAGEFORMAT_H__ */
+
diff --git a/sys/androidmedia/gst-android-graphics-surfacetexture.c b/sys/androidmedia/gst-android-graphics-surfacetexture.c
new file mode 100644
index 0000000..84993a8
--- /dev/null
+++ b/sys/androidmedia/gst-android-graphics-surfacetexture.c
@@ -0,0 +1,144 @@
+/*
+ * Copyright (C) 2012, Collabora Ltd.
+ * Copyright (C) 2012, Cisco Systems, Inc.
+ *   Author: Youness Alaoui <youness.alaoui@collabora.co.uk>
+ *
+ * Copyright (C) 2015, Collabora Ltd.
+ *   Author: Justin Kim <justin.kim@collabora.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation
+ * version 2.1 of the License.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301 USA
+ *
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include "gstjniutils.h"
+
+#include "gst-android-graphics-surfacetexture.h"
+
+static struct
+{
+  jclass klass;
+  jmethodID constructor;
+  jmethodID release;
+} android_graphics_surfacetexture = {
+0};
+
+static gboolean
+_init_classes (void)
+{
+  JNIEnv *env;
+  GError *err = NULL;
+
+  env = gst_amc_jni_get_env ();
+
+  /* android.graphics.SurfaceTexture */
+  android_graphics_surfacetexture.klass =
+      gst_amc_jni_get_class (env, &err, "android/graphics/SurfaceTexture");
+
+  if (!android_graphics_surfacetexture.klass) {
+    GST_ERROR ("Failed to get android.graphics.SurfaceTexture class: %s",
+        err->message);
+    g_clear_error (&err);
+    return FALSE;
+  }
+
+  android_graphics_surfacetexture.constructor =
+      gst_amc_jni_get_method_id (env, &err,
+      android_graphics_surfacetexture.klass, "<init>", "(I)V");
+  android_graphics_surfacetexture.release =
+      gst_amc_jni_get_method_id (env, &err,
+      android_graphics_surfacetexture.klass, "release", "()V");
+
+  return TRUE;
+}
+
+gboolean
+gst_android_graphics_surfacetexture_init (void)
+{
+  if (!_init_classes ()) {
+    gst_android_graphics_surfacetexture_deinit ();
+    return FALSE;
+  }
+
+  return TRUE;
+}
+
+void
+gst_android_graphics_surfacetexture_deinit (void)
+{
+  JNIEnv *env = gst_amc_jni_get_env ();
+
+  if (android_graphics_surfacetexture.klass)
+    (*env)->DeleteGlobalRef (env, android_graphics_surfacetexture.klass);
+  android_graphics_surfacetexture.klass = NULL;
+}
+
+/* android.graphics.SurfaceTexture */
+GstAGSurfaceTexture *
+gst_ag_surfacetexture_new (gint texture_id)
+{
+  JNIEnv *env = gst_amc_jni_get_env ();
+  jobject object = NULL;
+  GstAGSurfaceTexture *tex = NULL;
+
+  object = (*env)->NewObject (env,
+      android_graphics_surfacetexture.klass,
+      android_graphics_surfacetexture.constructor, texture_id);
+  if ((*env)->ExceptionCheck (env) || !object) {
+    GST_ERROR ("Failed to call Java method");
+    (*env)->ExceptionClear (env);
+    return NULL;
+  }
+
+  tex = g_slice_new0 (GstAGSurfaceTexture);
+  tex->object = (*env)->NewGlobalRef (env, object);
+  if (!tex->object) {
+    GST_ERROR ("Failed to create global reference");
+    (*env)->ExceptionClear (env);
+    g_slice_free (GstAGSurfaceTexture, tex);
+    tex = NULL;
+  }
+  (*env)->DeleteLocalRef (env, object);
+
+  return tex;
+}
+
+void
+gst_ag_surfacetexture_release (GstAGSurfaceTexture * self)
+{
+  JNIEnv *env;
+  GError *err = NULL;
+
+  env = gst_amc_jni_get_env ();
+
+  if (!gst_amc_jni_call_void_method (env, &err, self->object,
+          android_graphics_surfacetexture.release)) {
+    GST_ERROR ("Failed to call release: %s", err->message);
+    g_clear_error (&err);
+  }
+
+}
+
+void
+gst_ag_surfacetexture_free (GstAGSurfaceTexture * self)
+{
+  JNIEnv *env = gst_amc_jni_get_env ();
+
+  (*env)->DeleteGlobalRef (env, self->object);
+  g_slice_free (GstAGSurfaceTexture, self);
+}
diff --git a/sys/androidmedia/gst-android-graphics-surfacetexture.h b/sys/androidmedia/gst-android-graphics-surfacetexture.h
new file mode 100644
index 0000000..3bb80ca
--- /dev/null
+++ b/sys/androidmedia/gst-android-graphics-surfacetexture.h
@@ -0,0 +1,54 @@
+/*
+ * Copyright (C) 2012, Collabora Ltd.
+ * Copyright (C) 2012, Cisco Systems, Inc.
+ *   Author: Youness Alaoui <youness.alaoui@collabora.co.uk>
+ *
+ * Copyright (C) 2015, Collabora Ltd.
+ *   Author: Justin Kim <justin.kim@collabora.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation
+ * version 2.1 of the License.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301 USA
+ *
+ */
+
+#ifndef __GST_ANDROID_GRAPHICS_SURFACETEXTURE_H__
+#define __GST_ANDROID_GRAPHICS_SURFACETEXTURE_H__
+
+#include <gst/gst.h>
+#include <jni.h>
+
+
+G_BEGIN_DECLS
+
+typedef struct _GstAGSurfaceTexture GstAGSurfaceTexture;
+
+/* android.graphics.SurfaceTexture */
+struct _GstAGSurfaceTexture {
+  /* < private > */
+  jobject object; /* global reference */
+};
+
+
+gboolean gst_android_graphics_surfacetexture_init (void);
+void gst_android_graphics_surfacetexture_deinit (void);
+
+/* android.graphics.SurfaceTexture */
+GstAGSurfaceTexture *gst_ag_surfacetexture_new (gint texture_id);
+void gst_ag_surfacetexture_release (GstAGSurfaceTexture *self);
+void gst_ag_surfacetexture_free (GstAGSurfaceTexture *self);
+
+G_END_DECLS
+
+#endif /* __GST_ANDROID_GRAPHICS_SURFACETEXTURE_H__ */
+
diff --git a/sys/androidmedia/gst-android-hardware-camera.c b/sys/androidmedia/gst-android-hardware-camera.c
new file mode 100644
index 0000000..fd66033
--- /dev/null
+++ b/sys/androidmedia/gst-android-hardware-camera.c
@@ -0,0 +1,3884 @@
+/*
+ * Copyright (C) 2012, Collabora Ltd.
+ * Copyright (C) 2012, Cisco Systems, Inc.
+ *   Author: Youness Alaoui <youness.alaoui@collabora.co.uk>
+ *
+ * Copyright (C) 2015, Collabora Ltd.
+ *   Author: Justin Kim <justin.kim@collabora.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation
+ * version 2.1 of the License.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301 USA
+ *
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include "gstjniutils.h"
+
+#include "gst-android-hardware-camera.h"
+
+GST_DEBUG_CATEGORY_STATIC (ahc_debug);
+#define GST_CAT_DEFAULT ahc_debug
+
+#define GST_DVM_STATIC_CALL(error_statement, type, k, method, ...)      \
+  (*env)->CallStatic##type##Method (env, k.klass, k.method, ## __VA_ARGS__); \
+  if ((*env)->ExceptionCheck (env)) {                                   \
+    GST_ERROR ("Failed to call Java method");                           \
+    (*env)->ExceptionDescribe (env);                                    \
+    (*env)->ExceptionClear (env);                                       \
+    error_statement;                                                    \
+  }
+
+#define GST_DVM_CALL(error_statement, obj, type, k, method, ...)        \
+  (*env)->Call##type##Method (env, obj, k.method, ## __VA_ARGS__);      \
+  if ((*env)->ExceptionCheck (env)) {                                   \
+    GST_ERROR ("Failed to call Java method");                           \
+    (*env)->ExceptionDescribe (env);                                    \
+    (*env)->ExceptionClear (env);                                       \
+    error_statement;                                                    \
+  }
+
+
+
+static struct
+{
+  jclass klass;
+  jmethodID addCallbackBuffer;
+  jmethodID autoFocus;
+  jmethodID cancelAutoFocus;
+  jmethodID getCameraInfo;
+  jmethodID getNumberOfCameras;
+  jmethodID getParameters;
+  jmethodID lock;
+  jmethodID open;
+  jmethodID reconnect;
+  jmethodID release;
+  jmethodID setErrorCallback;
+  jmethodID setParameters;
+  jmethodID setPreviewCallbackWithBuffer;
+  jmethodID setPreviewTexture;
+  jmethodID startPreview;
+  jmethodID startSmoothZoom;
+  jmethodID stopPreview;
+  jmethodID stopSmoothZoom;
+  jmethodID unlock;
+} android_hardware_camera = {
+0};
+
+static struct
+{
+  jclass klass;
+  jmethodID constructor;
+  jfieldID facing;
+  jfieldID orientation;
+  jint CAMERA_FACING_BACK;
+  jint CAMERA_FACING_FRONT;
+} android_hardware_camera_camerainfo = {
+0};
+
+gint CameraInfo_CAMERA_FACING_BACK;
+gint CameraInfo_CAMERA_FACING_FRONT;
+
+static struct
+{
+  jclass klass;
+  jfieldID width;
+  jfieldID height;
+} android_hardware_camera_size = {
+0};
+
+static struct
+{
+  jclass klass;
+  jmethodID flatten;
+  jmethodID getAntibanding;
+  jmethodID getColorEffect;
+  jmethodID getExposureCompensation;
+  jmethodID getExposureCompensationStep;
+  jmethodID getFlashMode;
+  jmethodID getFocalLength;
+  jmethodID getFocusMode;
+  jmethodID getHorizontalViewAngle;
+  jmethodID getMaxExposureCompensation;
+  jmethodID getMaxZoom;
+  jmethodID getMinExposureCompensation;
+  jmethodID getPreviewFormat;
+  jmethodID getPreviewFpsRange;
+  jmethodID getPreviewSize;
+  jmethodID getSceneMode;
+  jmethodID getSupportedAntibanding;
+  jmethodID getSupportedColorEffects;
+  jmethodID getSupportedFlashModes;
+  jmethodID getSupportedFocusModes;
+  jmethodID getSupportedPreviewFormats;
+  jmethodID getSupportedPreviewFpsRange;
+  jmethodID getSupportedPreviewSizes;
+  jmethodID getSupportedSceneModes;
+  jmethodID getSupportedWhiteBalance;
+  jmethodID getVerticalViewAngle;
+  jmethodID getVideoStabilization;
+  jmethodID getWhiteBalance;
+  jmethodID getZoom;
+  jmethodID getZoomRatios;
+  jmethodID isSmoothZoomSupported;
+  jmethodID isVideoStabilizationSupported;
+  jmethodID isZoomSupported;
+  jmethodID setAntibanding;
+  jmethodID setColorEffect;
+  jmethodID setExposureCompensation;
+  jmethodID setFlashMode;
+  jmethodID setFocusMode;
+  jmethodID setPreviewFormat;
+  jmethodID setPreviewFpsRange;
+  jmethodID setPreviewSize;
+  jmethodID setSceneMode;
+  jmethodID setVideoStabilization;
+  jmethodID setWhiteBalance;
+  jmethodID setZoom;
+  jmethodID unflatten;
+  jstring WHITE_BALANCE_AUTO;
+  jstring WHITE_BALANCE_INCANDESCENT;
+  jstring WHITE_BALANCE_FLUORESCENT;
+  jstring WHITE_BALANCE_WARM_FLUORESCENT;
+  jstring WHITE_BALANCE_DAYLIGHT;
+  jstring WHITE_BALANCE_CLOUDY_DAYLIGHT;
+  jstring WHITE_BALANCE_TWILIGHT;
+  jstring WHITE_BALANCE_SHADE;
+  jstring EFFECT_NONE;
+  jstring EFFECT_MONO;
+  jstring EFFECT_NEGATIVE;
+  jstring EFFECT_SOLARIZE;
+  jstring EFFECT_SEPIA;
+  jstring EFFECT_POSTERIZE;
+  jstring EFFECT_WHITEBOARD;
+  jstring EFFECT_BLACKBOARD;
+  jstring EFFECT_AQUA;
+  jstring ANTIBANDING_AUTO;
+  jstring ANTIBANDING_50HZ;
+  jstring ANTIBANDING_60HZ;
+  jstring ANTIBANDING_OFF;
+  jstring FLASH_MODE_OFF;
+  jstring FLASH_MODE_AUTO;
+  jstring FLASH_MODE_ON;
+  jstring FLASH_MODE_RED_EYE;
+  jstring FLASH_MODE_TORCH;
+  jstring SCENE_MODE_AUTO;
+  jstring SCENE_MODE_ACTION;
+  jstring SCENE_MODE_PORTRAIT;
+  jstring SCENE_MODE_LANDSCAPE;
+  jstring SCENE_MODE_NIGHT;
+  jstring SCENE_MODE_NIGHT_PORTRAIT;
+  jstring SCENE_MODE_THEATRE;
+  jstring SCENE_MODE_BEACH;
+  jstring SCENE_MODE_SNOW;
+  jstring SCENE_MODE_SUNSET;
+  jstring SCENE_MODE_STEADYPHOTO;
+  jstring SCENE_MODE_FIREWORKS;
+  jstring SCENE_MODE_SPORTS;
+  jstring SCENE_MODE_PARTY;
+  jstring SCENE_MODE_CANDLELIGHT;
+  jstring SCENE_MODE_BARCODE;
+  jstring FOCUS_MODE_AUTO;
+  jstring FOCUS_MODE_INFINITY;
+  jstring FOCUS_MODE_MACRO;
+  jstring FOCUS_MODE_FIXED;
+  jstring FOCUS_MODE_EDOF;
+  jstring FOCUS_MODE_CONTINUOUS_VIDEO;
+  jstring FOCUS_MODE_CONTINUOUS_PICTURE;
+} android_hardware_camera_parameters = {
+0};
+
+const gchar *Parameters_WHITE_BALANCE_AUTO;
+const gchar *Parameters_WHITE_BALANCE_INCANDESCENT;
+const gchar *Parameters_WHITE_BALANCE_FLUORESCENT;
+const gchar *Parameters_WHITE_BALANCE_WARM_FLUORESCENT;
+const gchar *Parameters_WHITE_BALANCE_DAYLIGHT;
+const gchar *Parameters_WHITE_BALANCE_CLOUDY_DAYLIGHT;
+const gchar *Parameters_WHITE_BALANCE_TWILIGHT;
+const gchar *Parameters_WHITE_BALANCE_SHADE;
+const gchar *Parameters_EFFECT_NONE;
+const gchar *Parameters_EFFECT_MONO;
+const gchar *Parameters_EFFECT_NEGATIVE;
+const gchar *Parameters_EFFECT_SOLARIZE;
+const gchar *Parameters_EFFECT_SEPIA;
+const gchar *Parameters_EFFECT_POSTERIZE;
+const gchar *Parameters_EFFECT_WHITEBOARD;
+const gchar *Parameters_EFFECT_BLACKBOARD;
+const gchar *Parameters_EFFECT_AQUA;
+const gchar *Parameters_ANTIBANDING_AUTO;
+const gchar *Parameters_ANTIBANDING_50HZ;
+const gchar *Parameters_ANTIBANDING_60HZ;
+const gchar *Parameters_ANTIBANDING_OFF;
+const gchar *Parameters_FLASH_MODE_OFF;
+const gchar *Parameters_FLASH_MODE_AUTO;
+const gchar *Parameters_FLASH_MODE_ON;
+const gchar *Parameters_FLASH_MODE_RED_EYE;
+const gchar *Parameters_FLASH_MODE_TORCH;
+const gchar *Parameters_SCENE_MODE_AUTO;
+const gchar *Parameters_SCENE_MODE_ACTION;
+const gchar *Parameters_SCENE_MODE_PORTRAIT;
+const gchar *Parameters_SCENE_MODE_LANDSCAPE;
+const gchar *Parameters_SCENE_MODE_NIGHT;
+const gchar *Parameters_SCENE_MODE_NIGHT_PORTRAIT;
+const gchar *Parameters_SCENE_MODE_THEATRE;
+const gchar *Parameters_SCENE_MODE_BEACH;
+const gchar *Parameters_SCENE_MODE_SNOW;
+const gchar *Parameters_SCENE_MODE_SUNSET;
+const gchar *Parameters_SCENE_MODE_STEADYPHOTO;
+const gchar *Parameters_SCENE_MODE_FIREWORKS;
+const gchar *Parameters_SCENE_MODE_SPORTS;
+const gchar *Parameters_SCENE_MODE_PARTY;
+const gchar *Parameters_SCENE_MODE_CANDLELIGHT;
+const gchar *Parameters_SCENE_MODE_BARCODE;
+const gchar *Parameters_FOCUS_MODE_AUTO;
+const gchar *Parameters_FOCUS_MODE_INFINITY;
+const gchar *Parameters_FOCUS_MODE_MACRO;
+const gchar *Parameters_FOCUS_MODE_FIXED;
+const gchar *Parameters_FOCUS_MODE_EDOF;
+const gchar *Parameters_FOCUS_MODE_CONTINUOUS_VIDEO;
+const gchar *Parameters_FOCUS_MODE_CONTINUOUS_PICTURE;
+
+static struct
+{
+  jclass klass;
+  jmethodID iterator;
+} java_util_list = {
+0};
+
+static struct
+{
+  jclass klass;
+  jmethodID hasNext;
+  jmethodID next;
+} java_util_iterator = {
+0};
+
+static struct
+{
+  jclass klass;
+  jmethodID intValue;
+} java_lang_integer = {
+0};
+
+static struct
+{
+  jclass klass;
+  jmethodID equals;
+} java_lang_string = {
+0};
+
+static struct
+{
+  jclass klass;
+  jmethodID constructor;
+} org_freedesktop_gstreamer_androidmedia_gstahccallback = {
+0};
+
+static void
+gst_ah_camera_on_preview_frame (JNIEnv * env, jclass klass, jbyteArray data,
+    jobject camera, jlong callback, jlong user_data)
+{
+  GstAHCPreviewCallback cb = (GstAHCPreviewCallback) (gsize) callback;
+
+  if (cb)
+    cb (data, (gpointer) (gsize) user_data);
+}
+
+static void
+gst_ah_camera_on_error (JNIEnv * env, jclass klass, jint error,
+    jobject camera, jlong callback, jlong user_data)
+{
+  GstAHCErrorCallback cb = (GstAHCErrorCallback) (gsize) callback;
+
+  if (cb)
+    cb (error, (gpointer) (gsize) user_data);
+}
+
+static void
+gst_ah_camera_on_auto_focus (JNIEnv * env, jclass klass, jboolean success,
+    jobject camera, jlong callback, jlong user_data)
+{
+  GstAHCAutoFocusCallback cb = (GstAHCAutoFocusCallback) (gsize) callback;
+
+  if (cb)
+    cb (success, (gpointer) (gsize) user_data);
+}
+
+static JNINativeMethod native_methods[] = {
+  {(gchar *) "gst_ah_camera_on_preview_frame",
+        (gchar *) "([BLandroid/hardware/Camera;JJ)V",
+      (void *) gst_ah_camera_on_preview_frame},
+  {(gchar *) "gst_ah_camera_on_error",
+        (gchar *) "(ILandroid/hardware/Camera;JJ)V",
+      (void *) gst_ah_camera_on_error},
+//  {(gchar *) "gst_ah_camera_on_auto_focus",
+//        (gchar *) "(ZLandroid/hardware/Camera;JJ)V",
+//      (void *) gst_ah_camera_on_auto_focus}
+};
+
+static gboolean
+_init_classes (void)
+{
+  JNIEnv *env;
+  GError *err = NULL;
+
+  jclass klass;
+  jfieldID fieldID;
+
+  env = gst_amc_jni_get_env ();
+
+  /* android.hardware.Camera */
+  klass = android_hardware_camera.klass =
+      gst_amc_jni_get_class (env, &err, "android/hardware/Camera");
+  if (!klass)
+    goto failed;
+
+  android_hardware_camera.addCallbackBuffer =
+      gst_amc_jni_get_method_id (env, &err, klass,
+      "addCallbackBuffer", "([B)V");
+
+  android_hardware_camera.autoFocus =
+      gst_amc_jni_get_method_id (env, &err, klass,
+      "autoFocus", "(Landroid/hardware/Camera$AutoFocusCallback;)V");
+
+  android_hardware_camera.cancelAutoFocus =
+      gst_amc_jni_get_method_id (env, &err, klass, "cancelAutoFocus", "()V");
+
+  android_hardware_camera.getCameraInfo =
+      gst_amc_jni_get_static_method_id (env, &err, klass,
+      "getCameraInfo", "(ILandroid/hardware/Camera$CameraInfo;)V");
+
+  android_hardware_camera.getNumberOfCameras =
+      gst_amc_jni_get_static_method_id (env, &err, klass,
+      "getNumberOfCameras", "()I");
+
+  android_hardware_camera.getParameters =
+      gst_amc_jni_get_method_id (env, &err, klass,
+      "getParameters", "()Landroid/hardware/Camera$Parameters;");
+
+  android_hardware_camera.lock =
+      gst_amc_jni_get_method_id (env, &err, klass, "lock", "()V");
+
+  android_hardware_camera.open =
+      gst_amc_jni_get_static_method_id (env, &err, klass,
+      "open", "(I)Landroid/hardware/Camera;");
+
+  android_hardware_camera.reconnect =
+      gst_amc_jni_get_method_id (env, &err, klass, "reconnect", "()V");
+
+  android_hardware_camera.release =
+      gst_amc_jni_get_method_id (env, &err, klass, "release", "()V");
+
+  android_hardware_camera.setErrorCallback =
+      gst_amc_jni_get_method_id (env, &err, klass, "setErrorCallback",
+      "(Landroid/hardware/Camera$ErrorCallback;)V");
+
+  android_hardware_camera.setParameters =
+      gst_amc_jni_get_method_id (env, &err, klass, "setParameters",
+      "(Landroid/hardware/Camera$Parameters;)V");
+
+  android_hardware_camera.setPreviewCallbackWithBuffer =
+      gst_amc_jni_get_method_id (env, &err, klass,
+      "setPreviewCallbackWithBuffer",
+      "(Landroid/hardware/Camera$PreviewCallback;)V");
+
+  android_hardware_camera.setPreviewTexture =
+      gst_amc_jni_get_method_id (env, &err, klass,
+      "setPreviewTexture", "(Landroid/graphics/SurfaceTexture;)V");
+
+  android_hardware_camera.startPreview =
+      gst_amc_jni_get_method_id (env, &err, klass, "startPreview", "()V");
+
+  android_hardware_camera.startSmoothZoom =
+      gst_amc_jni_get_method_id (env, &err, klass, "startSmoothZoom", "(I)V");
+
+  android_hardware_camera.stopPreview =
+      gst_amc_jni_get_method_id (env, &err, klass, "stopPreview", "()V");
+
+  android_hardware_camera.stopPreview =
+      gst_amc_jni_get_method_id (env, &err, klass, "stopPreview", "()V");
+
+  android_hardware_camera.unlock =
+      gst_amc_jni_get_method_id (env, &err, klass, "unlock", "()V");
+
+  /* android.hardware.Camera.CameraInfo */
+  klass = android_hardware_camera_camerainfo.klass =
+      gst_amc_jni_get_class (env, &err, "android/hardware/Camera$CameraInfo");
+  if (!klass)
+    goto failed;
+
+  android_hardware_camera_camerainfo.constructor =
+      gst_amc_jni_get_method_id (env, &err, klass, "<init>", "()V");
+
+  android_hardware_camera_camerainfo.facing =
+      gst_amc_jni_get_field_id (env, &err, klass, "facing", "I");
+
+  android_hardware_camera_camerainfo.orientation =
+      gst_amc_jni_get_field_id (env, &err, klass, "orientation", "I");
+
+
+  fieldID =
+      gst_amc_jni_get_static_field_id (env, &err, klass, "CAMERA_FACING_BACK",
+      "I");
+  if (!gst_amc_jni_get_static_int_field (env, &err, klass, fieldID,
+          &android_hardware_camera_camerainfo.CAMERA_FACING_BACK))
+    goto failed;
+  CameraInfo_CAMERA_FACING_BACK =
+      android_hardware_camera_camerainfo.CAMERA_FACING_BACK;
+
+  fieldID =
+      gst_amc_jni_get_static_field_id (env, &err, klass, "CAMERA_FACING_FRONT",
+      "I");
+  if (!gst_amc_jni_get_static_int_field (env, &err, klass, fieldID,
+          &android_hardware_camera_camerainfo.CAMERA_FACING_FRONT))
+    goto failed;
+  CameraInfo_CAMERA_FACING_FRONT =
+      android_hardware_camera_camerainfo.CAMERA_FACING_FRONT;
+
+  /* android.hardware.Camera.Size */
+  klass = android_hardware_camera_size.klass =
+      gst_amc_jni_get_class (env, &err, "android/hardware/Camera$Size");
+  if (!klass)
+    goto failed;
+
+  android_hardware_camera_size.width =
+      gst_amc_jni_get_field_id (env, &err, klass, "width", "I");
+  android_hardware_camera_size.height =
+      gst_amc_jni_get_field_id (env, &err, klass, "height", "I");
+
+  /* android.hardware.Camera.Parameters */
+  klass = android_hardware_camera_parameters.klass =
+      gst_amc_jni_get_class (env, &err, "android/hardware/Camera$Parameters");
+  if (!klass)
+    goto failed;
+
+  android_hardware_camera_parameters.flatten =
+      gst_amc_jni_get_method_id (env, &err, klass, "flatten",
+      "()Ljava/lang/String;");
+
+  android_hardware_camera_parameters.getAntibanding =
+      gst_amc_jni_get_method_id (env, &err, klass, "getAntibanding",
+      "()Ljava/lang/String;");
+
+  android_hardware_camera_parameters.getColorEffect =
+      gst_amc_jni_get_method_id (env, &err, klass, "getColorEffect",
+      "()Ljava/lang/String;");
+
+  android_hardware_camera_parameters.getExposureCompensation =
+      gst_amc_jni_get_method_id (env, &err, klass, "getExposureCompensation",
+      "()I");
+
+  android_hardware_camera_parameters.getExposureCompensationStep =
+      gst_amc_jni_get_method_id (env, &err, klass,
+      "getExposureCompensationStep", "()F");
+
+  android_hardware_camera_parameters.getFlashMode =
+      gst_amc_jni_get_method_id (env, &err, klass, "getFlashMode",
+      "()Ljava/lang/String;");
+
+  android_hardware_camera_parameters.getFocalLength =
+      gst_amc_jni_get_method_id (env, &err, klass, "getFocalLength", "()F");
+
+  android_hardware_camera_parameters.getFocusMode =
+      gst_amc_jni_get_method_id (env, &err, klass, "getFocusMode",
+      "()Ljava/lang/String;");
+
+  android_hardware_camera_parameters.getHorizontalViewAngle =
+      gst_amc_jni_get_method_id (env, &err, klass, "getHorizontalViewAngle",
+      "()F");
+
+  android_hardware_camera_parameters.getMaxExposureCompensation =
+      gst_amc_jni_get_method_id (env, &err, klass, "getMaxExposureCompensation",
+      "()I");
+
+  android_hardware_camera_parameters.getMaxZoom =
+      gst_amc_jni_get_method_id (env, &err, klass, "getMaxZoom", "()I");
+
+  android_hardware_camera_parameters.getMinExposureCompensation =
+      gst_amc_jni_get_method_id (env, &err, klass, "getMinExposureCompensation",
+      "()I");
+
+  android_hardware_camera_parameters.getPreviewFormat =
+      gst_amc_jni_get_method_id (env, &err, klass, "getPreviewFormat", "()I");
+
+  android_hardware_camera_parameters.getPreviewFpsRange =
+      gst_amc_jni_get_method_id (env, &err, klass, "getPreviewFpsRange",
+      "([I)V");
+
+  android_hardware_camera_parameters.getPreviewSize =
+      gst_amc_jni_get_method_id (env, &err, klass, "getPreviewSize",
+      "()Landroid/hardware/Camera$Size;");
+
+  android_hardware_camera_parameters.getSceneMode =
+      gst_amc_jni_get_method_id (env, &err, klass, "getSceneMode",
+      "()Ljava/lang/String;");
+
+  android_hardware_camera_parameters.getSupportedAntibanding =
+      gst_amc_jni_get_method_id (env, &err, klass, "getSupportedAntibanding",
+      "()Ljava/util/List;");
+
+  android_hardware_camera_parameters.getSupportedColorEffects =
+      gst_amc_jni_get_method_id (env, &err, klass, "getSupportedColorEffects",
+      "()Ljava/util/List;");
+
+  android_hardware_camera_parameters.getSupportedFlashModes =
+      gst_amc_jni_get_method_id (env, &err, klass, "getSupportedFlashModes",
+      "()Ljava/util/List;");
+
+  android_hardware_camera_parameters.getSupportedFocusModes =
+      gst_amc_jni_get_method_id (env, &err, klass, "getSupportedFocusModes",
+      "()Ljava/util/List;");
+
+  android_hardware_camera_parameters.getSupportedPreviewFormats =
+      gst_amc_jni_get_method_id (env, &err, klass, "getSupportedPreviewFormats",
+      "()Ljava/util/List;");
+
+  android_hardware_camera_parameters.getSupportedPreviewFpsRange =
+      gst_amc_jni_get_method_id (env, &err, klass,
+      "getSupportedPreviewFpsRange", "()Ljava/util/List;");
+
+  android_hardware_camera_parameters.getSupportedPreviewSizes =
+      gst_amc_jni_get_method_id (env, &err, klass, "getSupportedPreviewSizes",
+      "()Ljava/util/List;");
+
+  android_hardware_camera_parameters.getSupportedSceneModes =
+      gst_amc_jni_get_method_id (env, &err, klass, "getSupportedSceneModes",
+      "()Ljava/util/List;");
+
+  android_hardware_camera_parameters.getSupportedWhiteBalance =
+      gst_amc_jni_get_method_id (env, &err, klass, "getSupportedWhiteBalance",
+      "()Ljava/util/List;");
+
+  android_hardware_camera_parameters.getVerticalViewAngle =
+      gst_amc_jni_get_method_id (env, &err, klass, "getVerticalViewAngle",
+      "()F");
+
+  android_hardware_camera_parameters.getVideoStabilization =
+      gst_amc_jni_get_method_id (env, &err, klass, "getVideoStabilization",
+      "()Z");
+
+  android_hardware_camera_parameters.getWhiteBalance =
+      gst_amc_jni_get_method_id (env, &err, klass, "getWhiteBalance",
+      "()Ljava/lang/String;");
+
+  android_hardware_camera_parameters.getZoom =
+      gst_amc_jni_get_method_id (env, &err, klass, "getZoom", "()I");
+
+  android_hardware_camera_parameters.getZoomRatios =
+      gst_amc_jni_get_method_id (env, &err, klass, "getZoomRatios",
+      "()Ljava/util/List;");
+
+  android_hardware_camera_parameters.isSmoothZoomSupported =
+      gst_amc_jni_get_method_id (env, &err, klass, "isSmoothZoomSupported",
+      "()Z");
+
+  android_hardware_camera_parameters.isVideoStabilizationSupported =
+      gst_amc_jni_get_method_id (env, &err, klass,
+      "isVideoStabilizationSupported", "()Z");
+
+  android_hardware_camera_parameters.isZoomSupported =
+      gst_amc_jni_get_method_id (env, &err, klass, "isZoomSupported", "()Z");
+
+  android_hardware_camera_parameters.setAntibanding =
+      gst_amc_jni_get_method_id (env, &err, klass, "setAntibanding",
+      "(Ljava/lang/String;)V");
+
+  android_hardware_camera_parameters.setColorEffect =
+      gst_amc_jni_get_method_id (env, &err, klass, "setColorEffect",
+      "(Ljava/lang/String;)V");
+
+  android_hardware_camera_parameters.setExposureCompensation =
+      gst_amc_jni_get_method_id (env, &err, klass, "setExposureCompensation",
+      "(I)V");
+
+  android_hardware_camera_parameters.setFlashMode =
+      gst_amc_jni_get_method_id (env, &err, klass, "setFlashMode",
+      "(Ljava/lang/String;)V");
+
+  android_hardware_camera_parameters.setFocusMode =
+      gst_amc_jni_get_method_id (env, &err, klass, "setFocusMode",
+      "(Ljava/lang/String;)V");
+
+  android_hardware_camera_parameters.setPreviewFormat =
+      gst_amc_jni_get_method_id (env, &err, klass, "setPreviewFormat", "(I)V");
+
+  android_hardware_camera_parameters.setPreviewFpsRange =
+      gst_amc_jni_get_method_id (env, &err, klass, "setPreviewFpsRange",
+      "(II)V");
+
+  android_hardware_camera_parameters.setPreviewSize =
+      gst_amc_jni_get_method_id (env, &err, klass, "setPreviewSize", "(II)V");
+
+  android_hardware_camera_parameters.setSceneMode =
+      gst_amc_jni_get_method_id (env, &err, klass, "setSceneMode",
+      "(Ljava/lang/String;)V");
+
+  android_hardware_camera_parameters.setWhiteBalance =
+      gst_amc_jni_get_method_id (env, &err, klass, "setWhiteBalance",
+      "(Ljava/lang/String;)V");
+
+  android_hardware_camera_parameters.setVideoStabilization =
+      gst_amc_jni_get_method_id (env, &err, klass, "setVideoStabilization",
+      "(Z)V");
+
+  android_hardware_camera_parameters.setZoom =
+      gst_amc_jni_get_method_id (env, &err, klass, "setZoom", "(I)V");
+
+  android_hardware_camera_parameters.unflatten =
+      gst_amc_jni_get_method_id (env, &err, klass, "unflatten",
+      "(Ljava/lang/String;)V");
+
+  fieldID =
+      gst_amc_jni_get_static_field_id (env, &err, klass, "WHITE_BALANCE_AUTO",
+      "Ljava/lang/String;");
+  if (!fieldID)
+    goto failed;
+  if (!gst_amc_jni_get_static_object_field (env, &err, klass, fieldID,
+          &android_hardware_camera_parameters.WHITE_BALANCE_AUTO))
+    goto failed;
+
+  Parameters_WHITE_BALANCE_AUTO =
+      (*env)->GetStringUTFChars (env,
+      android_hardware_camera_parameters.WHITE_BALANCE_AUTO, NULL);
+  {
+    jobject local = android_hardware_camera_parameters.WHITE_BALANCE_AUTO;
+
+    android_hardware_camera_parameters.WHITE_BALANCE_AUTO =
+        (*env)->NewGlobalRef (env, local);
+    (*env)->DeleteLocalRef (env, local);
+  }
+
+  fieldID =
+      gst_amc_jni_get_static_field_id (env, &err, klass,
+      "WHITE_BALANCE_INCANDESCENT", "Ljava/lang/String;");
+  if (!fieldID)
+    goto failed;
+  if (!gst_amc_jni_get_static_object_field (env, &err, klass, fieldID,
+          &android_hardware_camera_parameters.WHITE_BALANCE_INCANDESCENT))
+    goto failed;
+
+  Parameters_WHITE_BALANCE_INCANDESCENT =
+      (*env)->GetStringUTFChars (env,
+      android_hardware_camera_parameters.WHITE_BALANCE_INCANDESCENT, NULL);
+  {
+    jobject local =
+        android_hardware_camera_parameters.WHITE_BALANCE_INCANDESCENT;
+
+    android_hardware_camera_parameters.WHITE_BALANCE_INCANDESCENT =
+        (*env)->NewGlobalRef (env, local);
+    (*env)->DeleteLocalRef (env, local);
+  }
+
+  fieldID =
+      gst_amc_jni_get_static_field_id (env, &err, klass,
+      "WHITE_BALANCE_FLUORESCENT", "Ljava/lang/String;");
+  if (!fieldID)
+    goto failed;
+  if (!gst_amc_jni_get_static_object_field (env, &err, klass, fieldID,
+          &android_hardware_camera_parameters.WHITE_BALANCE_FLUORESCENT))
+    goto failed;
+
+  Parameters_WHITE_BALANCE_FLUORESCENT =
+      (*env)->GetStringUTFChars (env,
+      android_hardware_camera_parameters.WHITE_BALANCE_FLUORESCENT, NULL);
+  {
+    jobject local =
+        android_hardware_camera_parameters.WHITE_BALANCE_FLUORESCENT;
+
+    android_hardware_camera_parameters.WHITE_BALANCE_FLUORESCENT =
+        (*env)->NewGlobalRef (env, local);
+    (*env)->DeleteLocalRef (env, local);
+  }
+
+  fieldID =
+      gst_amc_jni_get_static_field_id (env, &err, klass,
+      "WHITE_BALANCE_WARM_FLUORESCENT", "Ljava/lang/String;");
+  if (!fieldID)
+    goto failed;
+  if (!gst_amc_jni_get_static_object_field (env, &err, klass, fieldID,
+          &android_hardware_camera_parameters.WHITE_BALANCE_WARM_FLUORESCENT))
+    goto failed;
+
+  Parameters_WHITE_BALANCE_WARM_FLUORESCENT =
+      (*env)->GetStringUTFChars (env,
+      android_hardware_camera_parameters.WHITE_BALANCE_WARM_FLUORESCENT, NULL);
+  {
+    jobject local =
+        android_hardware_camera_parameters.WHITE_BALANCE_WARM_FLUORESCENT;
+
+    android_hardware_camera_parameters.WHITE_BALANCE_WARM_FLUORESCENT =
+        (*env)->NewGlobalRef (env, local);
+    (*env)->DeleteLocalRef (env, local);
+  }
+
+  fieldID =
+      gst_amc_jni_get_static_field_id (env, &err, klass,
+      "WHITE_BALANCE_DAYLIGHT", "Ljava/lang/String;");
+  if (!fieldID)
+    goto failed;
+  if (!gst_amc_jni_get_static_object_field (env, &err, klass, fieldID,
+          &android_hardware_camera_parameters.WHITE_BALANCE_DAYLIGHT))
+    goto failed;
+
+  Parameters_WHITE_BALANCE_DAYLIGHT =
+      (*env)->GetStringUTFChars (env,
+      android_hardware_camera_parameters.WHITE_BALANCE_DAYLIGHT, NULL);
+  {
+    jobject local = android_hardware_camera_parameters.WHITE_BALANCE_DAYLIGHT;
+
+    android_hardware_camera_parameters.WHITE_BALANCE_DAYLIGHT =
+        (*env)->NewGlobalRef (env, local);
+    (*env)->DeleteLocalRef (env, local);
+  }
+
+  fieldID =
+      gst_amc_jni_get_static_field_id (env, &err, klass,
+      "WHITE_BALANCE_CLOUDY_DAYLIGHT", "Ljava/lang/String;");
+  if (!fieldID)
+    goto failed;
+  if (!gst_amc_jni_get_static_object_field (env, &err, klass, fieldID,
+          &android_hardware_camera_parameters.WHITE_BALANCE_CLOUDY_DAYLIGHT))
+    goto failed;
+  Parameters_WHITE_BALANCE_CLOUDY_DAYLIGHT =
+      (*env)->GetStringUTFChars (env,
+      android_hardware_camera_parameters.WHITE_BALANCE_CLOUDY_DAYLIGHT, NULL);
+  {
+    jobject local =
+        android_hardware_camera_parameters.WHITE_BALANCE_CLOUDY_DAYLIGHT;
+
+    android_hardware_camera_parameters.WHITE_BALANCE_CLOUDY_DAYLIGHT =
+        (*env)->NewGlobalRef (env, local);
+    (*env)->DeleteLocalRef (env, local);
+  }
+
+  fieldID =
+      gst_amc_jni_get_static_field_id (env, &err, klass,
+      "WHITE_BALANCE_TWILIGHT", "Ljava/lang/String;");
+  if (!fieldID)
+    goto failed;
+  if (!gst_amc_jni_get_static_object_field (env, &err, klass, fieldID,
+          &android_hardware_camera_parameters.WHITE_BALANCE_TWILIGHT))
+    goto failed;
+  Parameters_WHITE_BALANCE_TWILIGHT =
+      (*env)->GetStringUTFChars (env,
+      android_hardware_camera_parameters.WHITE_BALANCE_TWILIGHT, NULL);
+  {
+    jobject local = android_hardware_camera_parameters.WHITE_BALANCE_TWILIGHT;
+
+    android_hardware_camera_parameters.WHITE_BALANCE_TWILIGHT =
+        (*env)->NewGlobalRef (env, local);
+    (*env)->DeleteLocalRef (env, local);
+  }
+
+  fieldID =
+      gst_amc_jni_get_static_field_id (env, &err, klass, "WHITE_BALANCE_SHADE",
+      "Ljava/lang/String;");
+  if (!fieldID)
+    goto failed;
+  if (!gst_amc_jni_get_static_object_field (env, &err, klass, fieldID,
+          &android_hardware_camera_parameters.WHITE_BALANCE_SHADE))
+    goto failed;
+
+  Parameters_WHITE_BALANCE_SHADE =
+      (*env)->GetStringUTFChars (env,
+      android_hardware_camera_parameters.WHITE_BALANCE_SHADE, NULL);
+  {
+    jobject local = android_hardware_camera_parameters.WHITE_BALANCE_SHADE;
+
+    android_hardware_camera_parameters.WHITE_BALANCE_SHADE =
+        (*env)->NewGlobalRef (env, local);
+    (*env)->DeleteLocalRef (env, local);
+  }
+
+  fieldID =
+      gst_amc_jni_get_static_field_id (env, &err, klass, "EFFECT_NONE",
+      "Ljava/lang/String;");
+  if (!fieldID)
+    goto failed;
+  if (!gst_amc_jni_get_static_object_field (env, &err, klass, fieldID,
+          &android_hardware_camera_parameters.EFFECT_NONE))
+    goto failed;
+
+  Parameters_EFFECT_NONE =
+      (*env)->GetStringUTFChars (env,
+      android_hardware_camera_parameters.EFFECT_NONE, NULL);
+  {
+    jobject local = android_hardware_camera_parameters.EFFECT_NONE;
+
+    android_hardware_camera_parameters.EFFECT_NONE =
+        (*env)->NewGlobalRef (env, local);
+    (*env)->DeleteLocalRef (env, local);
+  }
+
+  fieldID =
+      gst_amc_jni_get_static_field_id (env, &err, klass, "EFFECT_MONO",
+      "Ljava/lang/String;");
+  if (!fieldID)
+    goto failed;
+  if (!gst_amc_jni_get_static_object_field (env, &err, klass, fieldID,
+          &android_hardware_camera_parameters.EFFECT_MONO))
+    goto failed;
+
+  Parameters_EFFECT_MONO =
+      (*env)->GetStringUTFChars (env,
+      android_hardware_camera_parameters.EFFECT_MONO, NULL);
+  {
+    jobject local = android_hardware_camera_parameters.EFFECT_MONO;
+
+    android_hardware_camera_parameters.EFFECT_MONO =
+        (*env)->NewGlobalRef (env, local);
+    (*env)->DeleteLocalRef (env, local);
+  }
+
+  fieldID =
+      gst_amc_jni_get_static_field_id (env, &err, klass, "EFFECT_NEGATIVE",
+      "Ljava/lang/String;");
+  if (!fieldID)
+    goto failed;
+  if (!gst_amc_jni_get_static_object_field (env, &err, klass, fieldID,
+          &android_hardware_camera_parameters.EFFECT_NEGATIVE))
+    goto failed;
+
+  Parameters_EFFECT_NEGATIVE =
+      (*env)->GetStringUTFChars (env,
+      android_hardware_camera_parameters.EFFECT_NEGATIVE, NULL);
+  {
+    jobject local = android_hardware_camera_parameters.EFFECT_NEGATIVE;
+
+    android_hardware_camera_parameters.EFFECT_NEGATIVE =
+        (*env)->NewGlobalRef (env, local);
+    (*env)->DeleteLocalRef (env, local);
+  }
+
+  fieldID =
+      gst_amc_jni_get_static_field_id (env, &err, klass, "EFFECT_SOLARIZE",
+      "Ljava/lang/String;");
+  if (!fieldID)
+    goto failed;
+  if (!gst_amc_jni_get_static_object_field (env, &err, klass, fieldID,
+          &android_hardware_camera_parameters.EFFECT_SOLARIZE))
+    goto failed;
+
+  Parameters_EFFECT_SOLARIZE =
+      (*env)->GetStringUTFChars (env,
+      android_hardware_camera_parameters.EFFECT_SOLARIZE, NULL);
+  {
+    jobject local = android_hardware_camera_parameters.EFFECT_SOLARIZE;
+
+    android_hardware_camera_parameters.EFFECT_SOLARIZE =
+        (*env)->NewGlobalRef (env, local);
+    (*env)->DeleteLocalRef (env, local);
+  }
+
+  fieldID =
+      gst_amc_jni_get_static_field_id (env, &err, klass, "EFFECT_SEPIA",
+      "Ljava/lang/String;");
+  if (!fieldID)
+    goto failed;
+  if (!gst_amc_jni_get_static_object_field (env, &err, klass, fieldID,
+          &android_hardware_camera_parameters.EFFECT_SEPIA))
+    goto failed;
+
+  Parameters_EFFECT_SEPIA =
+      (*env)->GetStringUTFChars (env,
+      android_hardware_camera_parameters.EFFECT_SEPIA, NULL);
+  {
+    jobject local = android_hardware_camera_parameters.EFFECT_SEPIA;
+
+    android_hardware_camera_parameters.EFFECT_SEPIA =
+        (*env)->NewGlobalRef (env, local);
+    (*env)->DeleteLocalRef (env, local);
+  }
+
+  fieldID =
+      gst_amc_jni_get_static_field_id (env, &err, klass, "EFFECT_POSTERIZE",
+      "Ljava/lang/String;");
+  if (!fieldID)
+    goto failed;
+  if (!gst_amc_jni_get_static_object_field (env, &err, klass, fieldID,
+          &android_hardware_camera_parameters.EFFECT_POSTERIZE))
+    goto failed;
+
+  Parameters_EFFECT_POSTERIZE =
+      (*env)->GetStringUTFChars (env,
+      android_hardware_camera_parameters.EFFECT_POSTERIZE, NULL);
+  {
+    jobject local = android_hardware_camera_parameters.EFFECT_POSTERIZE;
+
+    android_hardware_camera_parameters.EFFECT_POSTERIZE =
+        (*env)->NewGlobalRef (env, local);
+    (*env)->DeleteLocalRef (env, local);
+  }
+
+  fieldID =
+      gst_amc_jni_get_static_field_id (env, &err, klass, "EFFECT_WHITEBOARD",
+      "Ljava/lang/String;");
+  if (!fieldID)
+    goto failed;
+  if (!gst_amc_jni_get_static_object_field (env, &err, klass, fieldID,
+          &android_hardware_camera_parameters.EFFECT_WHITEBOARD))
+    goto failed;
+
+  Parameters_EFFECT_WHITEBOARD =
+      (*env)->GetStringUTFChars (env,
+      android_hardware_camera_parameters.EFFECT_WHITEBOARD, NULL);
+  {
+    jobject local = android_hardware_camera_parameters.EFFECT_WHITEBOARD;
+
+    android_hardware_camera_parameters.EFFECT_WHITEBOARD =
+        (*env)->NewGlobalRef (env, local);
+    (*env)->DeleteLocalRef (env, local);
+  }
+
+  fieldID =
+      gst_amc_jni_get_static_field_id (env, &err, klass, "EFFECT_BLACKBOARD",
+      "Ljava/lang/String;");
+  if (!fieldID)
+    goto failed;
+  if (!gst_amc_jni_get_static_object_field (env, &err, klass, fieldID,
+          &android_hardware_camera_parameters.EFFECT_BLACKBOARD))
+    goto failed;
+
+  Parameters_EFFECT_BLACKBOARD =
+      (*env)->GetStringUTFChars (env,
+      android_hardware_camera_parameters.EFFECT_BLACKBOARD, NULL);
+  {
+    jobject local = android_hardware_camera_parameters.EFFECT_BLACKBOARD;
+
+    android_hardware_camera_parameters.EFFECT_BLACKBOARD =
+        (*env)->NewGlobalRef (env, local);
+    (*env)->DeleteLocalRef (env, local);
+  }
+
+  fieldID =
+      gst_amc_jni_get_static_field_id (env, &err, klass, "EFFECT_AQUA",
+      "Ljava/lang/String;");
+  if (!fieldID)
+    goto failed;
+  if (!gst_amc_jni_get_static_object_field (env, &err, klass, fieldID,
+          &android_hardware_camera_parameters.EFFECT_AQUA))
+    goto failed;
+
+  Parameters_EFFECT_AQUA =
+      (*env)->GetStringUTFChars (env,
+      android_hardware_camera_parameters.EFFECT_AQUA, NULL);
+  {
+    jobject local = android_hardware_camera_parameters.EFFECT_AQUA;
+
+    android_hardware_camera_parameters.EFFECT_AQUA =
+        (*env)->NewGlobalRef (env, local);
+    (*env)->DeleteLocalRef (env, local);
+  }
+
+  fieldID =
+      gst_amc_jni_get_static_field_id (env, &err, klass, "ANTIBANDING_AUTO",
+      "Ljava/lang/String;");
+  if (!fieldID)
+    goto failed;
+  if (!gst_amc_jni_get_static_object_field (env, &err, klass, fieldID,
+          &android_hardware_camera_parameters.ANTIBANDING_AUTO))
+    goto failed;
+
+  Parameters_ANTIBANDING_AUTO =
+      (*env)->GetStringUTFChars (env,
+      android_hardware_camera_parameters.ANTIBANDING_AUTO, NULL);
+  {
+    jobject local = android_hardware_camera_parameters.ANTIBANDING_AUTO;
+
+    android_hardware_camera_parameters.ANTIBANDING_AUTO =
+        (*env)->NewGlobalRef (env, local);
+    (*env)->DeleteLocalRef (env, local);
+  }
+
+  fieldID =
+      gst_amc_jni_get_static_field_id (env, &err, klass, "ANTIBANDING_50HZ",
+      "Ljava/lang/String;");
+  if (!fieldID)
+    goto failed;
+  if (!gst_amc_jni_get_static_object_field (env, &err, klass, fieldID,
+          &android_hardware_camera_parameters.ANTIBANDING_50HZ))
+    goto failed;
+
+  Parameters_ANTIBANDING_50HZ =
+      (*env)->GetStringUTFChars (env,
+      android_hardware_camera_parameters.ANTIBANDING_50HZ, NULL);
+  {
+    jobject local = android_hardware_camera_parameters.ANTIBANDING_50HZ;
+
+    android_hardware_camera_parameters.ANTIBANDING_50HZ =
+        (*env)->NewGlobalRef (env, local);
+    (*env)->DeleteLocalRef (env, local);
+  }
+
+  fieldID =
+      gst_amc_jni_get_static_field_id (env, &err, klass, "ANTIBANDING_60HZ",
+      "Ljava/lang/String;");
+  if (!fieldID)
+    goto failed;
+  if (!gst_amc_jni_get_static_object_field (env, &err, klass, fieldID,
+          &android_hardware_camera_parameters.ANTIBANDING_60HZ))
+    goto failed;
+
+  Parameters_ANTIBANDING_60HZ =
+      (*env)->GetStringUTFChars (env,
+      android_hardware_camera_parameters.ANTIBANDING_60HZ, NULL);
+  {
+    jobject local = android_hardware_camera_parameters.ANTIBANDING_60HZ;
+
+    android_hardware_camera_parameters.ANTIBANDING_60HZ =
+        (*env)->NewGlobalRef (env, local);
+    (*env)->DeleteLocalRef (env, local);
+  }
+
+  fieldID =
+      gst_amc_jni_get_static_field_id (env, &err, klass, "ANTIBANDING_OFF",
+      "Ljava/lang/String;");
+  if (!fieldID)
+    goto failed;
+  if (!gst_amc_jni_get_static_object_field (env, &err, klass, fieldID,
+          &android_hardware_camera_parameters.ANTIBANDING_OFF))
+    goto failed;
+
+  Parameters_ANTIBANDING_OFF =
+      (*env)->GetStringUTFChars (env,
+      android_hardware_camera_parameters.ANTIBANDING_OFF, NULL);
+  {
+    jobject local = android_hardware_camera_parameters.ANTIBANDING_OFF;
+
+    android_hardware_camera_parameters.ANTIBANDING_OFF =
+        (*env)->NewGlobalRef (env, local);
+    (*env)->DeleteLocalRef (env, local);
+  }
+
+  fieldID =
+      gst_amc_jni_get_static_field_id (env, &err, klass, "FLASH_MODE_OFF",
+      "Ljava/lang/String;");
+  if (!fieldID)
+    goto failed;
+  if (!gst_amc_jni_get_static_object_field (env, &err, klass, fieldID,
+          &android_hardware_camera_parameters.FLASH_MODE_OFF))
+    goto failed;
+
+  Parameters_FLASH_MODE_OFF =
+      (*env)->GetStringUTFChars (env,
+      android_hardware_camera_parameters.FLASH_MODE_OFF, NULL);
+  {
+    jobject local = android_hardware_camera_parameters.FLASH_MODE_OFF;
+
+    android_hardware_camera_parameters.FLASH_MODE_OFF =
+        (*env)->NewGlobalRef (env, local);
+    (*env)->DeleteLocalRef (env, local);
+  }
+
+  fieldID =
+      gst_amc_jni_get_static_field_id (env, &err, klass, "FLASH_MODE_AUTO",
+      "Ljava/lang/String;");
+  if (!fieldID)
+    goto failed;
+  if (!gst_amc_jni_get_static_object_field (env, &err, klass, fieldID,
+          &android_hardware_camera_parameters.FLASH_MODE_AUTO))
+    goto failed;
+
+  Parameters_FLASH_MODE_AUTO =
+      (*env)->GetStringUTFChars (env,
+      android_hardware_camera_parameters.FLASH_MODE_AUTO, NULL);
+  {
+    jobject local = android_hardware_camera_parameters.FLASH_MODE_AUTO;
+
+    android_hardware_camera_parameters.FLASH_MODE_AUTO =
+        (*env)->NewGlobalRef (env, local);
+    (*env)->DeleteLocalRef (env, local);
+  }
+
+  fieldID =
+      gst_amc_jni_get_static_field_id (env, &err, klass, "FLASH_MODE_ON",
+      "Ljava/lang/String;");
+  if (!fieldID)
+    goto failed;
+  if (!gst_amc_jni_get_static_object_field (env, &err, klass, fieldID,
+          &android_hardware_camera_parameters.FLASH_MODE_ON))
+    goto failed;
+
+  Parameters_FLASH_MODE_ON =
+      (*env)->GetStringUTFChars (env,
+      android_hardware_camera_parameters.FLASH_MODE_ON, NULL);
+  {
+    jobject local = android_hardware_camera_parameters.FLASH_MODE_ON;
+
+    android_hardware_camera_parameters.FLASH_MODE_ON =
+        (*env)->NewGlobalRef (env, local);
+    (*env)->DeleteLocalRef (env, local);
+  }
+
+  fieldID =
+      gst_amc_jni_get_static_field_id (env, &err, klass, "FLASH_MODE_RED_EYE",
+      "Ljava/lang/String;");
+  if (!fieldID)
+    goto failed;
+  if (!gst_amc_jni_get_static_object_field (env, &err, klass, fieldID,
+          &android_hardware_camera_parameters.FLASH_MODE_RED_EYE))
+    goto failed;
+
+  Parameters_FLASH_MODE_RED_EYE =
+      (*env)->GetStringUTFChars (env,
+      android_hardware_camera_parameters.FLASH_MODE_RED_EYE, NULL);
+  {
+    jobject local = android_hardware_camera_parameters.FLASH_MODE_RED_EYE;
+
+    android_hardware_camera_parameters.FLASH_MODE_RED_EYE =
+        (*env)->NewGlobalRef (env, local);
+    (*env)->DeleteLocalRef (env, local);
+  }
+
+  fieldID =
+      gst_amc_jni_get_static_field_id (env, &err, klass, "FLASH_MODE_TORCH",
+      "Ljava/lang/String;");
+  if (!fieldID)
+    goto failed;
+  if (!gst_amc_jni_get_static_object_field (env, &err, klass, fieldID,
+          &android_hardware_camera_parameters.FLASH_MODE_TORCH))
+    goto failed;
+
+  Parameters_FLASH_MODE_TORCH =
+      (*env)->GetStringUTFChars (env,
+      android_hardware_camera_parameters.FLASH_MODE_TORCH, NULL);
+  {
+    jobject local = android_hardware_camera_parameters.FLASH_MODE_TORCH;
+
+    android_hardware_camera_parameters.FLASH_MODE_TORCH =
+        (*env)->NewGlobalRef (env, local);
+    (*env)->DeleteLocalRef (env, local);
+  }
+
+  fieldID =
+      gst_amc_jni_get_static_field_id (env, &err, klass, "SCENE_MODE_AUTO",
+      "Ljava/lang/String;");
+  if (!fieldID)
+    goto failed;
+  if (!gst_amc_jni_get_static_object_field (env, &err, klass, fieldID,
+          &android_hardware_camera_parameters.SCENE_MODE_AUTO))
+    goto failed;
+
+  Parameters_SCENE_MODE_AUTO =
+      (*env)->GetStringUTFChars (env,
+      android_hardware_camera_parameters.SCENE_MODE_AUTO, NULL);
+  {
+    jobject local = android_hardware_camera_parameters.SCENE_MODE_AUTO;
+
+    android_hardware_camera_parameters.SCENE_MODE_AUTO =
+        (*env)->NewGlobalRef (env, local);
+    (*env)->DeleteLocalRef (env, local);
+  }
+
+  fieldID =
+      gst_amc_jni_get_static_field_id (env, &err, klass, "SCENE_MODE_ACTION",
+      "Ljava/lang/String;");
+  if (!fieldID)
+    goto failed;
+  if (!gst_amc_jni_get_static_object_field (env, &err, klass, fieldID,
+          &android_hardware_camera_parameters.SCENE_MODE_ACTION))
+    goto failed;
+
+  Parameters_SCENE_MODE_ACTION =
+      (*env)->GetStringUTFChars (env,
+      android_hardware_camera_parameters.SCENE_MODE_ACTION, NULL);
+  {
+    jobject local = android_hardware_camera_parameters.SCENE_MODE_ACTION;
+
+    android_hardware_camera_parameters.SCENE_MODE_ACTION =
+        (*env)->NewGlobalRef (env, local);
+    (*env)->DeleteLocalRef (env, local);
+  }
+
+  fieldID =
+      gst_amc_jni_get_static_field_id (env, &err, klass, "SCENE_MODE_PORTRAIT",
+      "Ljava/lang/String;");
+  if (!fieldID)
+    goto failed;
+  if (!gst_amc_jni_get_static_object_field (env, &err, klass, fieldID,
+          &android_hardware_camera_parameters.SCENE_MODE_PORTRAIT))
+    goto failed;
+
+  Parameters_SCENE_MODE_PORTRAIT =
+      (*env)->GetStringUTFChars (env,
+      android_hardware_camera_parameters.SCENE_MODE_PORTRAIT, NULL);
+  {
+    jobject local = android_hardware_camera_parameters.SCENE_MODE_PORTRAIT;
+
+    android_hardware_camera_parameters.SCENE_MODE_PORTRAIT =
+        (*env)->NewGlobalRef (env, local);
+    (*env)->DeleteLocalRef (env, local);
+  }
+
+  fieldID =
+      gst_amc_jni_get_static_field_id (env, &err, klass, "SCENE_MODE_LANDSCAPE",
+      "Ljava/lang/String;");
+  if (!fieldID)
+    goto failed;
+  if (!gst_amc_jni_get_static_object_field (env, &err, klass, fieldID,
+          &android_hardware_camera_parameters.SCENE_MODE_LANDSCAPE))
+    goto failed;
+  Parameters_SCENE_MODE_LANDSCAPE =
+      (*env)->GetStringUTFChars (env,
+      android_hardware_camera_parameters.SCENE_MODE_LANDSCAPE, NULL);
+  {
+    jobject local = android_hardware_camera_parameters.SCENE_MODE_LANDSCAPE;
+
+    android_hardware_camera_parameters.SCENE_MODE_LANDSCAPE =
+        (*env)->NewGlobalRef (env, local);
+    (*env)->DeleteLocalRef (env, local);
+  }
+
+  fieldID =
+      gst_amc_jni_get_static_field_id (env, &err, klass, "SCENE_MODE_NIGHT",
+      "Ljava/lang/String;");
+  if (!fieldID)
+    goto failed;
+  if (!gst_amc_jni_get_static_object_field (env, &err, klass, fieldID,
+          &android_hardware_camera_parameters.SCENE_MODE_NIGHT))
+    goto failed;
+
+  Parameters_SCENE_MODE_NIGHT =
+      (*env)->GetStringUTFChars (env,
+      android_hardware_camera_parameters.SCENE_MODE_NIGHT, NULL);
+  {
+    jobject local = android_hardware_camera_parameters.SCENE_MODE_NIGHT;
+
+    android_hardware_camera_parameters.SCENE_MODE_NIGHT =
+        (*env)->NewGlobalRef (env, local);
+    (*env)->DeleteLocalRef (env, local);
+  }
+
+  fieldID =
+      gst_amc_jni_get_static_field_id (env, &err, klass,
+      "SCENE_MODE_NIGHT_PORTRAIT", "Ljava/lang/String;");
+  if (!fieldID)
+    goto failed;
+  if (!gst_amc_jni_get_static_object_field (env, &err, klass, fieldID,
+          &android_hardware_camera_parameters.SCENE_MODE_NIGHT_PORTRAIT))
+    goto failed;
+  Parameters_SCENE_MODE_NIGHT_PORTRAIT =
+      (*env)->GetStringUTFChars (env,
+      android_hardware_camera_parameters.SCENE_MODE_NIGHT_PORTRAIT, NULL);
+  {
+    jobject local =
+        android_hardware_camera_parameters.SCENE_MODE_NIGHT_PORTRAIT;
+
+    android_hardware_camera_parameters.SCENE_MODE_NIGHT_PORTRAIT =
+        (*env)->NewGlobalRef (env, local);
+    (*env)->DeleteLocalRef (env, local);
+  }
+  fieldID =
+      gst_amc_jni_get_static_field_id (env, &err, klass, "SCENE_MODE_THEATRE",
+      "Ljava/lang/String;");
+  if (!fieldID)
+    goto failed;
+  if (!gst_amc_jni_get_static_object_field (env, &err, klass, fieldID,
+          &android_hardware_camera_parameters.SCENE_MODE_THEATRE))
+    goto failed;
+
+  Parameters_SCENE_MODE_THEATRE =
+      (*env)->GetStringUTFChars (env,
+      android_hardware_camera_parameters.SCENE_MODE_THEATRE, NULL);
+  {
+    jobject local = android_hardware_camera_parameters.SCENE_MODE_THEATRE;
+
+    android_hardware_camera_parameters.SCENE_MODE_THEATRE =
+        (*env)->NewGlobalRef (env, local);
+    (*env)->DeleteLocalRef (env, local);
+  }
+
+  fieldID =
+      gst_amc_jni_get_static_field_id (env, &err, klass, "SCENE_MODE_BEACH",
+      "Ljava/lang/String;");
+  if (!fieldID)
+    goto failed;
+  if (!gst_amc_jni_get_static_object_field (env, &err, klass, fieldID,
+          &android_hardware_camera_parameters.SCENE_MODE_BEACH))
+    goto failed;
+
+  Parameters_SCENE_MODE_BEACH =
+      (*env)->GetStringUTFChars (env,
+      android_hardware_camera_parameters.SCENE_MODE_BEACH, NULL);
+  {
+    jobject local = android_hardware_camera_parameters.SCENE_MODE_BEACH;
+
+    android_hardware_camera_parameters.SCENE_MODE_BEACH =
+        (*env)->NewGlobalRef (env, local);
+    (*env)->DeleteLocalRef (env, local);
+  }
+
+  fieldID =
+      gst_amc_jni_get_static_field_id (env, &err, klass, "SCENE_MODE_SNOW",
+      "Ljava/lang/String;");
+  if (!fieldID)
+    goto failed;
+  if (!gst_amc_jni_get_static_object_field (env, &err, klass, fieldID,
+          &android_hardware_camera_parameters.SCENE_MODE_SNOW))
+    goto failed;
+
+  Parameters_SCENE_MODE_SNOW =
+      (*env)->GetStringUTFChars (env,
+      android_hardware_camera_parameters.SCENE_MODE_SNOW, NULL);
+  {
+    jobject local = android_hardware_camera_parameters.SCENE_MODE_SNOW;
+
+    android_hardware_camera_parameters.SCENE_MODE_SNOW =
+        (*env)->NewGlobalRef (env, local);
+    (*env)->DeleteLocalRef (env, local);
+  }
+
+  fieldID =
+      gst_amc_jni_get_static_field_id (env, &err, klass, "SCENE_MODE_SUNSET",
+      "Ljava/lang/String;");
+  if (!fieldID)
+    goto failed;
+  if (!gst_amc_jni_get_static_object_field (env, &err, klass, fieldID,
+          &android_hardware_camera_parameters.SCENE_MODE_SUNSET))
+    goto failed;
+
+
+  Parameters_SCENE_MODE_SUNSET =
+      (*env)->GetStringUTFChars (env,
+      android_hardware_camera_parameters.SCENE_MODE_SUNSET, NULL);
+  {
+    jobject local = android_hardware_camera_parameters.SCENE_MODE_SUNSET;
+
+    android_hardware_camera_parameters.SCENE_MODE_SUNSET =
+        (*env)->NewGlobalRef (env, local);
+    (*env)->DeleteLocalRef (env, local);
+  }
+
+  fieldID =
+      gst_amc_jni_get_static_field_id (env, &err, klass,
+      "SCENE_MODE_STEADYPHOTO", "Ljava/lang/String;");
+  if (!fieldID)
+    goto failed;
+  if (!gst_amc_jni_get_static_object_field (env, &err, klass, fieldID,
+          &android_hardware_camera_parameters.SCENE_MODE_STEADYPHOTO))
+    goto failed;
+
+
+  Parameters_SCENE_MODE_STEADYPHOTO =
+      (*env)->GetStringUTFChars (env,
+      android_hardware_camera_parameters.SCENE_MODE_STEADYPHOTO, NULL);
+  {
+    jobject local = android_hardware_camera_parameters.SCENE_MODE_STEADYPHOTO;
+
+    android_hardware_camera_parameters.SCENE_MODE_STEADYPHOTO =
+        (*env)->NewGlobalRef (env, local);
+    (*env)->DeleteLocalRef (env, local);
+  }
+
+  fieldID =
+      gst_amc_jni_get_static_field_id (env, &err, klass, "SCENE_MODE_FIREWORKS",
+      "Ljava/lang/String;");
+  if (!fieldID)
+    goto failed;
+  if (!gst_amc_jni_get_static_object_field (env, &err, klass, fieldID,
+          &android_hardware_camera_parameters.SCENE_MODE_FIREWORKS))
+    goto failed;
+
+  Parameters_SCENE_MODE_FIREWORKS =
+      (*env)->GetStringUTFChars (env,
+      android_hardware_camera_parameters.SCENE_MODE_FIREWORKS, NULL);
+  {
+    jobject local = android_hardware_camera_parameters.SCENE_MODE_FIREWORKS;
+
+    android_hardware_camera_parameters.SCENE_MODE_FIREWORKS =
+        (*env)->NewGlobalRef (env, local);
+    (*env)->DeleteLocalRef (env, local);
+  }
+
+  fieldID =
+      gst_amc_jni_get_static_field_id (env, &err, klass, "SCENE_MODE_SPORTS",
+      "Ljava/lang/String;");
+  if (!fieldID)
+    goto failed;
+  if (!gst_amc_jni_get_static_object_field (env, &err, klass, fieldID,
+          &android_hardware_camera_parameters.SCENE_MODE_SPORTS))
+    goto failed;
+
+
+  Parameters_SCENE_MODE_SPORTS =
+      (*env)->GetStringUTFChars (env,
+      android_hardware_camera_parameters.SCENE_MODE_SPORTS, NULL);
+  {
+    jobject local = android_hardware_camera_parameters.SCENE_MODE_SPORTS;
+
+    android_hardware_camera_parameters.SCENE_MODE_SPORTS =
+        (*env)->NewGlobalRef (env, local);
+    (*env)->DeleteLocalRef (env, local);
+  }
+
+  fieldID =
+      gst_amc_jni_get_static_field_id (env, &err, klass, "SCENE_MODE_PARTY",
+      "Ljava/lang/String;");
+  if (!fieldID)
+    goto failed;
+  if (!gst_amc_jni_get_static_object_field (env, &err, klass, fieldID,
+          &android_hardware_camera_parameters.SCENE_MODE_PARTY))
+    goto failed;
+
+  Parameters_SCENE_MODE_PARTY =
+      (*env)->GetStringUTFChars (env,
+      android_hardware_camera_parameters.SCENE_MODE_PARTY, NULL);
+  {
+    jobject local = android_hardware_camera_parameters.SCENE_MODE_PARTY;
+
+    android_hardware_camera_parameters.SCENE_MODE_PARTY =
+        (*env)->NewGlobalRef (env, local);
+    (*env)->DeleteLocalRef (env, local);
+  }
+
+  fieldID =
+      gst_amc_jni_get_static_field_id (env, &err, klass,
+      "SCENE_MODE_CANDLELIGHT", "Ljava/lang/String;");
+  if (!fieldID)
+    goto failed;
+  if (!gst_amc_jni_get_static_object_field (env, &err, klass, fieldID,
+          &android_hardware_camera_parameters.SCENE_MODE_CANDLELIGHT))
+    goto failed;
+
+  Parameters_SCENE_MODE_CANDLELIGHT =
+      (*env)->GetStringUTFChars (env,
+      android_hardware_camera_parameters.SCENE_MODE_CANDLELIGHT, NULL);
+  {
+    jobject local = android_hardware_camera_parameters.SCENE_MODE_CANDLELIGHT;
+
+    android_hardware_camera_parameters.SCENE_MODE_CANDLELIGHT =
+        (*env)->NewGlobalRef (env, local);
+    (*env)->DeleteLocalRef (env, local);
+  }
+
+
+  fieldID =
+      gst_amc_jni_get_static_field_id (env, &err, klass, "SCENE_MODE_BARCODE",
+      "Ljava/lang/String;");
+  if (!fieldID)
+    goto failed;
+  if (!gst_amc_jni_get_static_object_field (env, &err, klass, fieldID,
+          &android_hardware_camera_parameters.SCENE_MODE_BARCODE))
+    goto failed;
+
+  Parameters_SCENE_MODE_BARCODE =
+      (*env)->GetStringUTFChars (env,
+      android_hardware_camera_parameters.SCENE_MODE_BARCODE, NULL);
+  {
+    jobject local = android_hardware_camera_parameters.SCENE_MODE_BARCODE;
+
+    android_hardware_camera_parameters.SCENE_MODE_BARCODE =
+        (*env)->NewGlobalRef (env, local);
+    (*env)->DeleteLocalRef (env, local);
+  }
+
+  fieldID =
+      gst_amc_jni_get_static_field_id (env, &err, klass, "FOCUS_MODE_AUTO",
+      "Ljava/lang/String;");
+  if (!fieldID)
+    goto failed;
+  if (!gst_amc_jni_get_static_object_field (env, &err, klass, fieldID,
+          &android_hardware_camera_parameters.FOCUS_MODE_AUTO))
+    goto failed;
+
+  Parameters_FOCUS_MODE_AUTO =
+      (*env)->GetStringUTFChars (env,
+      android_hardware_camera_parameters.FOCUS_MODE_AUTO, NULL);
+  {
+    jobject local = android_hardware_camera_parameters.FOCUS_MODE_AUTO;
+
+    android_hardware_camera_parameters.FOCUS_MODE_AUTO =
+        (*env)->NewGlobalRef (env, local);
+    (*env)->DeleteLocalRef (env, local);
+  }
+
+  fieldID =
+      gst_amc_jni_get_static_field_id (env, &err, klass, "FOCUS_MODE_INFINITY",
+      "Ljava/lang/String;");
+  if (!fieldID)
+    goto failed;
+  if (!gst_amc_jni_get_static_object_field (env, &err, klass, fieldID,
+          &android_hardware_camera_parameters.FOCUS_MODE_INFINITY))
+    goto failed;
+
+  Parameters_FOCUS_MODE_INFINITY =
+      (*env)->GetStringUTFChars (env,
+      android_hardware_camera_parameters.FOCUS_MODE_INFINITY, NULL);
+  {
+    jobject local = android_hardware_camera_parameters.FOCUS_MODE_INFINITY;
+
+    android_hardware_camera_parameters.FOCUS_MODE_INFINITY =
+        (*env)->NewGlobalRef (env, local);
+    (*env)->DeleteLocalRef (env, local);
+  }
+
+  fieldID =
+      gst_amc_jni_get_static_field_id (env, &err, klass, "FOCUS_MODE_MACRO",
+      "Ljava/lang/String;");
+  if (!fieldID)
+    goto failed;
+  if (!gst_amc_jni_get_static_object_field (env, &err, klass, fieldID,
+          &android_hardware_camera_parameters.FOCUS_MODE_MACRO))
+    goto failed;
+
+  Parameters_FOCUS_MODE_MACRO =
+      (*env)->GetStringUTFChars (env,
+      android_hardware_camera_parameters.FOCUS_MODE_MACRO, NULL);
+  {
+    jobject local = android_hardware_camera_parameters.FOCUS_MODE_MACRO;
+
+    android_hardware_camera_parameters.FOCUS_MODE_MACRO =
+        (*env)->NewGlobalRef (env, local);
+    (*env)->DeleteLocalRef (env, local);
+  }
+
+  fieldID =
+      gst_amc_jni_get_static_field_id (env, &err, klass, "FOCUS_MODE_FIXED",
+      "Ljava/lang/String;");
+  if (!fieldID)
+    goto failed;
+  if (!gst_amc_jni_get_static_object_field (env, &err, klass, fieldID,
+          &android_hardware_camera_parameters.FOCUS_MODE_FIXED))
+    goto failed;
+
+  Parameters_FOCUS_MODE_FIXED =
+      (*env)->GetStringUTFChars (env,
+      android_hardware_camera_parameters.FOCUS_MODE_FIXED, NULL);
+  {
+    jobject local = android_hardware_camera_parameters.FOCUS_MODE_FIXED;
+
+    android_hardware_camera_parameters.FOCUS_MODE_FIXED =
+        (*env)->NewGlobalRef (env, local);
+    (*env)->DeleteLocalRef (env, local);
+  }
+
+  fieldID =
+      gst_amc_jni_get_static_field_id (env, &err, klass, "FOCUS_MODE_EDOF",
+      "Ljava/lang/String;");
+  if (!fieldID)
+    goto failed;
+  if (!gst_amc_jni_get_static_object_field (env, &err, klass, fieldID,
+          &android_hardware_camera_parameters.FOCUS_MODE_EDOF))
+    goto failed;
+
+  Parameters_FOCUS_MODE_EDOF =
+      (*env)->GetStringUTFChars (env,
+      android_hardware_camera_parameters.FOCUS_MODE_EDOF, NULL);
+  {
+    jobject local = android_hardware_camera_parameters.FOCUS_MODE_EDOF;
+
+    android_hardware_camera_parameters.FOCUS_MODE_EDOF =
+        (*env)->NewGlobalRef (env, local);
+    (*env)->DeleteLocalRef (env, local);
+  }
+
+  fieldID =
+      gst_amc_jni_get_static_field_id (env, &err, klass,
+      "FOCUS_MODE_CONTINUOUS_VIDEO", "Ljava/lang/String;");
+  if (!fieldID)
+    goto failed;
+  if (!gst_amc_jni_get_static_object_field (env, &err, klass, fieldID,
+          &android_hardware_camera_parameters.FOCUS_MODE_CONTINUOUS_VIDEO))
+    goto failed;
+
+  Parameters_FOCUS_MODE_CONTINUOUS_VIDEO =
+      (*env)->GetStringUTFChars (env,
+      android_hardware_camera_parameters.FOCUS_MODE_CONTINUOUS_VIDEO, NULL);
+  {
+    jobject local =
+        android_hardware_camera_parameters.FOCUS_MODE_CONTINUOUS_VIDEO;
+
+    android_hardware_camera_parameters.FOCUS_MODE_CONTINUOUS_VIDEO =
+        (*env)->NewGlobalRef (env, local);
+    (*env)->DeleteLocalRef (env, local);
+  }
+
+  fieldID =
+      gst_amc_jni_get_static_field_id (env, &err, klass,
+      "FOCUS_MODE_CONTINUOUS_PICTURE", "Ljava/lang/String;");
+  if (!fieldID)
+    goto failed;
+  if (!gst_amc_jni_get_static_object_field (env, &err, klass, fieldID,
+          &android_hardware_camera_parameters.FOCUS_MODE_CONTINUOUS_PICTURE))
+    goto failed;
+
+
+  Parameters_FOCUS_MODE_CONTINUOUS_PICTURE =
+      (*env)->GetStringUTFChars (env,
+      android_hardware_camera_parameters.FOCUS_MODE_CONTINUOUS_PICTURE, NULL);
+  {
+    jobject local =
+        android_hardware_camera_parameters.FOCUS_MODE_CONTINUOUS_PICTURE;
+
+    android_hardware_camera_parameters.FOCUS_MODE_CONTINUOUS_PICTURE =
+        (*env)->NewGlobalRef (env, local);
+    (*env)->DeleteLocalRef (env, local);
+  }
+
+  /* java.lang.String */
+  klass = java_lang_string.klass =
+      gst_amc_jni_get_class (env, &err, "java/lang/String");
+  java_lang_string.equals =
+      gst_amc_jni_get_method_id (env, &err, klass, "equals",
+      "(Ljava/lang/Object;)Z");
+
+  /* java.util.List */
+  klass = java_util_list.klass =
+      gst_amc_jni_get_class (env, &err, "java/util/List");
+  java_util_list.iterator =
+      gst_amc_jni_get_method_id (env, &err, klass, "iterator",
+      "()Ljava/util/Iterator;");
+
+  /* java.util.Iterator */
+  klass = java_util_iterator.klass =
+      gst_amc_jni_get_class (env, &err, "java/util/Iterator");
+  java_util_iterator.hasNext =
+      gst_amc_jni_get_method_id (env, &err, klass, "hasNext", "()Z");
+  java_util_iterator.next =
+      gst_amc_jni_get_method_id (env, &err, klass, "next",
+      "()Ljava/lang/Object;");
+
+  /* java.lang.Integer */
+  klass = java_lang_integer.klass =
+      gst_amc_jni_get_class (env, &err, "java/lang/Integer");
+  java_lang_integer.intValue =
+      gst_amc_jni_get_method_id (env, &err, klass, "intValue", "()I");
+
+  if (!org_freedesktop_gstreamer_androidmedia_gstahccallback.klass) {
+    org_freedesktop_gstreamer_androidmedia_gstahccallback.klass =
+        gst_amc_jni_get_class (env, &err,
+        "org/freedesktop/gstreamer/androidmedia/GstAhcCallback");
+  }
+  if (!org_freedesktop_gstreamer_androidmedia_gstahccallback.klass)
+    goto failed;
+
+  org_freedesktop_gstreamer_androidmedia_gstahccallback.constructor =
+      gst_amc_jni_get_method_id (env, &err,
+      org_freedesktop_gstreamer_androidmedia_gstahccallback.klass, "<init>",
+      "(JJ)V");
+
+  if ((*env)->RegisterNatives (env,
+          org_freedesktop_gstreamer_androidmedia_gstahccallback.klass,
+          native_methods, G_N_ELEMENTS (native_methods))) {
+    GST_ERROR ("Failed to register native methods for GstAhcCallback");
+    return FALSE;
+  }
+
+  return TRUE;
+
+failed:
+  if (err) {
+    GST_ERROR ("Failed to initialize android.hardware.Camera classes: %s",
+        err->message);
+    g_clear_error (&err);
+  }
+
+  return FALSE;
+
+}
+
+
+gboolean
+gst_android_hardware_camera_init (void)
+{
+  GST_DEBUG_CATEGORY_INIT (ahc_debug, "ahc", 0,
+      "Android Gstreamer Hardware Camera");
+  if (!_init_classes ()) {
+    gst_android_hardware_camera_deinit ();
+    return FALSE;
+  }
+
+  return TRUE;
+}
+
+void
+gst_android_hardware_camera_deinit (void)
+{
+  JNIEnv *env = gst_amc_jni_get_env ();
+
+  if (android_hardware_camera.klass)
+    (*env)->DeleteGlobalRef (env, android_hardware_camera.klass);
+  android_hardware_camera.klass = NULL;
+
+  if (android_hardware_camera_camerainfo.klass)
+    (*env)->DeleteGlobalRef (env, android_hardware_camera_camerainfo.klass);
+  android_hardware_camera_camerainfo.klass = NULL;
+
+  if (android_hardware_camera_size.klass)
+    (*env)->DeleteGlobalRef (env, android_hardware_camera_size.klass);
+  android_hardware_camera_size.klass = NULL;
+
+  if (android_hardware_camera_parameters.klass)
+    (*env)->DeleteGlobalRef (env, android_hardware_camera_parameters.klass);
+  android_hardware_camera_parameters.klass = NULL;
+  if (Parameters_WHITE_BALANCE_AUTO)
+    (*env)->ReleaseStringUTFChars (env,
+        android_hardware_camera_parameters.WHITE_BALANCE_AUTO,
+        Parameters_WHITE_BALANCE_AUTO);
+  Parameters_WHITE_BALANCE_AUTO = NULL;
+  if (android_hardware_camera_parameters.WHITE_BALANCE_AUTO)
+    (*env)->DeleteGlobalRef (env,
+        android_hardware_camera_parameters.WHITE_BALANCE_AUTO);
+  android_hardware_camera_parameters.WHITE_BALANCE_AUTO = NULL;
+  if (Parameters_WHITE_BALANCE_INCANDESCENT)
+    (*env)->ReleaseStringUTFChars (env,
+        android_hardware_camera_parameters.WHITE_BALANCE_INCANDESCENT,
+        Parameters_WHITE_BALANCE_INCANDESCENT);
+  Parameters_WHITE_BALANCE_INCANDESCENT = NULL;
+  if (android_hardware_camera_parameters.WHITE_BALANCE_INCANDESCENT)
+    (*env)->DeleteGlobalRef (env,
+        android_hardware_camera_parameters.WHITE_BALANCE_INCANDESCENT);
+  android_hardware_camera_parameters.WHITE_BALANCE_INCANDESCENT = NULL;
+  if (Parameters_WHITE_BALANCE_FLUORESCENT)
+    (*env)->ReleaseStringUTFChars (env,
+        android_hardware_camera_parameters.WHITE_BALANCE_FLUORESCENT,
+        Parameters_WHITE_BALANCE_FLUORESCENT);
+  Parameters_WHITE_BALANCE_FLUORESCENT = NULL;
+  if (android_hardware_camera_parameters.WHITE_BALANCE_FLUORESCENT)
+    (*env)->DeleteGlobalRef (env,
+        android_hardware_camera_parameters.WHITE_BALANCE_FLUORESCENT);
+  android_hardware_camera_parameters.WHITE_BALANCE_FLUORESCENT = NULL;
+  if (Parameters_WHITE_BALANCE_WARM_FLUORESCENT)
+    (*env)->ReleaseStringUTFChars (env,
+        android_hardware_camera_parameters.WHITE_BALANCE_WARM_FLUORESCENT,
+        Parameters_WHITE_BALANCE_WARM_FLUORESCENT);
+  Parameters_WHITE_BALANCE_WARM_FLUORESCENT = NULL;
+  if (android_hardware_camera_parameters.WHITE_BALANCE_WARM_FLUORESCENT)
+    (*env)->DeleteGlobalRef (env,
+        android_hardware_camera_parameters.WHITE_BALANCE_WARM_FLUORESCENT);
+  android_hardware_camera_parameters.WHITE_BALANCE_WARM_FLUORESCENT = NULL;
+  if (Parameters_WHITE_BALANCE_DAYLIGHT)
+    (*env)->ReleaseStringUTFChars (env,
+        android_hardware_camera_parameters.WHITE_BALANCE_DAYLIGHT,
+        Parameters_WHITE_BALANCE_DAYLIGHT);
+  Parameters_WHITE_BALANCE_DAYLIGHT = NULL;
+  if (android_hardware_camera_parameters.WHITE_BALANCE_DAYLIGHT)
+    (*env)->DeleteGlobalRef (env,
+        android_hardware_camera_parameters.WHITE_BALANCE_DAYLIGHT);
+  android_hardware_camera_parameters.WHITE_BALANCE_DAYLIGHT = NULL;
+  if (Parameters_WHITE_BALANCE_CLOUDY_DAYLIGHT)
+    (*env)->ReleaseStringUTFChars (env,
+        android_hardware_camera_parameters.WHITE_BALANCE_CLOUDY_DAYLIGHT,
+        Parameters_WHITE_BALANCE_CLOUDY_DAYLIGHT);
+  Parameters_WHITE_BALANCE_CLOUDY_DAYLIGHT = NULL;
+  if (android_hardware_camera_parameters.WHITE_BALANCE_CLOUDY_DAYLIGHT)
+    (*env)->DeleteGlobalRef (env,
+        android_hardware_camera_parameters.WHITE_BALANCE_CLOUDY_DAYLIGHT);
+  android_hardware_camera_parameters.WHITE_BALANCE_CLOUDY_DAYLIGHT = NULL;
+  if (Parameters_WHITE_BALANCE_TWILIGHT)
+    (*env)->ReleaseStringUTFChars (env,
+        android_hardware_camera_parameters.WHITE_BALANCE_TWILIGHT,
+        Parameters_WHITE_BALANCE_TWILIGHT);
+  Parameters_WHITE_BALANCE_TWILIGHT = NULL;
+  if (android_hardware_camera_parameters.WHITE_BALANCE_TWILIGHT)
+    (*env)->DeleteGlobalRef (env,
+        android_hardware_camera_parameters.WHITE_BALANCE_TWILIGHT);
+  android_hardware_camera_parameters.WHITE_BALANCE_TWILIGHT = NULL;
+  if (Parameters_WHITE_BALANCE_SHADE)
+    (*env)->ReleaseStringUTFChars (env,
+        android_hardware_camera_parameters.WHITE_BALANCE_SHADE,
+        Parameters_WHITE_BALANCE_SHADE);
+  Parameters_WHITE_BALANCE_SHADE = NULL;
+  if (android_hardware_camera_parameters.WHITE_BALANCE_SHADE)
+    (*env)->DeleteGlobalRef (env,
+        android_hardware_camera_parameters.WHITE_BALANCE_SHADE);
+  android_hardware_camera_parameters.WHITE_BALANCE_SHADE = NULL;
+  if (Parameters_EFFECT_NONE)
+    (*env)->ReleaseStringUTFChars (env,
+        android_hardware_camera_parameters.EFFECT_NONE, Parameters_EFFECT_NONE);
+  Parameters_EFFECT_NONE = NULL;
+  if (android_hardware_camera_parameters.EFFECT_NONE)
+    (*env)->DeleteGlobalRef (env,
+        android_hardware_camera_parameters.EFFECT_NONE);
+  android_hardware_camera_parameters.EFFECT_NONE = NULL;
+  if (Parameters_EFFECT_MONO)
+    (*env)->ReleaseStringUTFChars (env,
+        android_hardware_camera_parameters.EFFECT_MONO, Parameters_EFFECT_MONO);
+  Parameters_EFFECT_MONO = NULL;
+  if (android_hardware_camera_parameters.EFFECT_MONO)
+    (*env)->DeleteGlobalRef (env,
+        android_hardware_camera_parameters.EFFECT_MONO);
+  android_hardware_camera_parameters.EFFECT_MONO = NULL;
+  if (Parameters_EFFECT_NEGATIVE)
+    (*env)->ReleaseStringUTFChars (env,
+        android_hardware_camera_parameters.EFFECT_NEGATIVE,
+        Parameters_EFFECT_NEGATIVE);
+  Parameters_EFFECT_NEGATIVE = NULL;
+  if (android_hardware_camera_parameters.EFFECT_NEGATIVE)
+    (*env)->DeleteGlobalRef (env,
+        android_hardware_camera_parameters.EFFECT_NEGATIVE);
+  android_hardware_camera_parameters.EFFECT_NEGATIVE = NULL;
+  if (Parameters_EFFECT_SOLARIZE)
+    (*env)->ReleaseStringUTFChars (env,
+        android_hardware_camera_parameters.EFFECT_SOLARIZE,
+        Parameters_EFFECT_SOLARIZE);
+  Parameters_EFFECT_SOLARIZE = NULL;
+  if (android_hardware_camera_parameters.EFFECT_SOLARIZE)
+    (*env)->DeleteGlobalRef (env,
+        android_hardware_camera_parameters.EFFECT_SOLARIZE);
+  android_hardware_camera_parameters.EFFECT_SOLARIZE = NULL;
+  if (Parameters_EFFECT_SEPIA)
+    (*env)->ReleaseStringUTFChars (env,
+        android_hardware_camera_parameters.EFFECT_SEPIA,
+        Parameters_EFFECT_SEPIA);
+  Parameters_EFFECT_SEPIA = NULL;
+  if (android_hardware_camera_parameters.EFFECT_SEPIA)
+    (*env)->DeleteGlobalRef (env,
+        android_hardware_camera_parameters.EFFECT_SEPIA);
+  android_hardware_camera_parameters.EFFECT_SEPIA = NULL;
+  if (Parameters_EFFECT_POSTERIZE)
+    (*env)->ReleaseStringUTFChars (env,
+        android_hardware_camera_parameters.EFFECT_POSTERIZE,
+        Parameters_EFFECT_POSTERIZE);
+  Parameters_EFFECT_POSTERIZE = NULL;
+  if (android_hardware_camera_parameters.EFFECT_POSTERIZE)
+    (*env)->DeleteGlobalRef (env,
+        android_hardware_camera_parameters.EFFECT_POSTERIZE);
+  android_hardware_camera_parameters.EFFECT_POSTERIZE = NULL;
+  if (Parameters_EFFECT_WHITEBOARD)
+    (*env)->ReleaseStringUTFChars (env,
+        android_hardware_camera_parameters.EFFECT_WHITEBOARD,
+        Parameters_EFFECT_WHITEBOARD);
+  Parameters_EFFECT_WHITEBOARD = NULL;
+  if (android_hardware_camera_parameters.EFFECT_WHITEBOARD)
+    (*env)->DeleteGlobalRef (env,
+        android_hardware_camera_parameters.EFFECT_WHITEBOARD);
+  android_hardware_camera_parameters.EFFECT_WHITEBOARD = NULL;
+  if (Parameters_EFFECT_BLACKBOARD)
+    (*env)->ReleaseStringUTFChars (env,
+        android_hardware_camera_parameters.EFFECT_BLACKBOARD,
+        Parameters_EFFECT_BLACKBOARD);
+  Parameters_EFFECT_BLACKBOARD = NULL;
+  if (android_hardware_camera_parameters.EFFECT_BLACKBOARD)
+    (*env)->DeleteGlobalRef (env,
+        android_hardware_camera_parameters.EFFECT_BLACKBOARD);
+  android_hardware_camera_parameters.EFFECT_BLACKBOARD = NULL;
+  if (Parameters_EFFECT_AQUA)
+    (*env)->ReleaseStringUTFChars (env,
+        android_hardware_camera_parameters.EFFECT_AQUA, Parameters_EFFECT_AQUA);
+  Parameters_EFFECT_AQUA = NULL;
+  if (android_hardware_camera_parameters.EFFECT_AQUA)
+    (*env)->DeleteGlobalRef (env,
+        android_hardware_camera_parameters.EFFECT_AQUA);
+  android_hardware_camera_parameters.EFFECT_AQUA = NULL;
+  if (Parameters_ANTIBANDING_AUTO)
+    (*env)->ReleaseStringUTFChars (env,
+        android_hardware_camera_parameters.ANTIBANDING_AUTO,
+        Parameters_ANTIBANDING_AUTO);
+  Parameters_ANTIBANDING_AUTO = NULL;
+  if (android_hardware_camera_parameters.ANTIBANDING_AUTO)
+    (*env)->DeleteGlobalRef (env,
+        android_hardware_camera_parameters.ANTIBANDING_AUTO);
+  android_hardware_camera_parameters.ANTIBANDING_AUTO = NULL;
+  if (Parameters_ANTIBANDING_50HZ)
+    (*env)->ReleaseStringUTFChars (env,
+        android_hardware_camera_parameters.ANTIBANDING_50HZ,
+        Parameters_ANTIBANDING_50HZ);
+  Parameters_ANTIBANDING_50HZ = NULL;
+  if (android_hardware_camera_parameters.ANTIBANDING_50HZ)
+    (*env)->DeleteGlobalRef (env,
+        android_hardware_camera_parameters.ANTIBANDING_50HZ);
+  android_hardware_camera_parameters.ANTIBANDING_50HZ = NULL;
+  if (Parameters_ANTIBANDING_60HZ)
+    (*env)->ReleaseStringUTFChars (env,
+        android_hardware_camera_parameters.ANTIBANDING_60HZ,
+        Parameters_ANTIBANDING_60HZ);
+  Parameters_ANTIBANDING_60HZ = NULL;
+  if (android_hardware_camera_parameters.ANTIBANDING_60HZ)
+    (*env)->DeleteGlobalRef (env,
+        android_hardware_camera_parameters.ANTIBANDING_60HZ);
+  android_hardware_camera_parameters.ANTIBANDING_60HZ = NULL;
+  if (Parameters_ANTIBANDING_OFF)
+    (*env)->ReleaseStringUTFChars (env,
+        android_hardware_camera_parameters.ANTIBANDING_OFF,
+        Parameters_ANTIBANDING_OFF);
+  Parameters_ANTIBANDING_OFF = NULL;
+  if (android_hardware_camera_parameters.ANTIBANDING_OFF)
+    (*env)->DeleteGlobalRef (env,
+        android_hardware_camera_parameters.ANTIBANDING_OFF);
+  android_hardware_camera_parameters.ANTIBANDING_OFF = NULL;
+  if (Parameters_FLASH_MODE_OFF)
+    (*env)->ReleaseStringUTFChars (env,
+        android_hardware_camera_parameters.FLASH_MODE_OFF,
+        Parameters_FLASH_MODE_OFF);
+  Parameters_FLASH_MODE_OFF = NULL;
+  if (android_hardware_camera_parameters.FLASH_MODE_OFF)
+    (*env)->DeleteGlobalRef (env,
+        android_hardware_camera_parameters.FLASH_MODE_OFF);
+  android_hardware_camera_parameters.FLASH_MODE_OFF = NULL;
+  if (Parameters_FLASH_MODE_AUTO)
+    (*env)->ReleaseStringUTFChars (env,
+        android_hardware_camera_parameters.FLASH_MODE_AUTO,
+        Parameters_FLASH_MODE_AUTO);
+  Parameters_FLASH_MODE_AUTO = NULL;
+  if (android_hardware_camera_parameters.FLASH_MODE_AUTO)
+    (*env)->DeleteGlobalRef (env,
+        android_hardware_camera_parameters.FLASH_MODE_AUTO);
+  android_hardware_camera_parameters.FLASH_MODE_AUTO = NULL;
+  if (Parameters_FLASH_MODE_ON)
+    (*env)->ReleaseStringUTFChars (env,
+        android_hardware_camera_parameters.FLASH_MODE_ON,
+        Parameters_FLASH_MODE_ON);
+  Parameters_FLASH_MODE_ON = NULL;
+  if (android_hardware_camera_parameters.FLASH_MODE_ON)
+    (*env)->DeleteGlobalRef (env,
+        android_hardware_camera_parameters.FLASH_MODE_ON);
+  android_hardware_camera_parameters.FLASH_MODE_ON = NULL;
+  if (Parameters_FLASH_MODE_RED_EYE)
+    (*env)->ReleaseStringUTFChars (env,
+        android_hardware_camera_parameters.FLASH_MODE_RED_EYE,
+        Parameters_FLASH_MODE_RED_EYE);
+  Parameters_FLASH_MODE_RED_EYE = NULL;
+  if (android_hardware_camera_parameters.FLASH_MODE_RED_EYE)
+    (*env)->DeleteGlobalRef (env,
+        android_hardware_camera_parameters.FLASH_MODE_RED_EYE);
+  android_hardware_camera_parameters.FLASH_MODE_RED_EYE = NULL;
+  if (Parameters_FLASH_MODE_TORCH)
+    (*env)->ReleaseStringUTFChars (env,
+        android_hardware_camera_parameters.FLASH_MODE_TORCH,
+        Parameters_FLASH_MODE_TORCH);
+  Parameters_FLASH_MODE_TORCH = NULL;
+  if (android_hardware_camera_parameters.FLASH_MODE_TORCH)
+    (*env)->DeleteGlobalRef (env,
+        android_hardware_camera_parameters.FLASH_MODE_TORCH);
+  android_hardware_camera_parameters.FLASH_MODE_TORCH = NULL;
+  if (Parameters_SCENE_MODE_AUTO)
+    (*env)->ReleaseStringUTFChars (env,
+        android_hardware_camera_parameters.SCENE_MODE_AUTO,
+        Parameters_SCENE_MODE_AUTO);
+  Parameters_SCENE_MODE_AUTO = NULL;
+  if (android_hardware_camera_parameters.SCENE_MODE_AUTO)
+    (*env)->DeleteGlobalRef (env,
+        android_hardware_camera_parameters.SCENE_MODE_AUTO);
+  android_hardware_camera_parameters.SCENE_MODE_AUTO = NULL;
+  if (Parameters_SCENE_MODE_ACTION)
+    (*env)->ReleaseStringUTFChars (env,
+        android_hardware_camera_parameters.SCENE_MODE_ACTION,
+        Parameters_SCENE_MODE_ACTION);
+  Parameters_SCENE_MODE_ACTION = NULL;
+  if (android_hardware_camera_parameters.SCENE_MODE_ACTION)
+    (*env)->DeleteGlobalRef (env,
+        android_hardware_camera_parameters.SCENE_MODE_ACTION);
+  android_hardware_camera_parameters.SCENE_MODE_ACTION = NULL;
+  if (Parameters_SCENE_MODE_PORTRAIT)
+    (*env)->ReleaseStringUTFChars (env,
+        android_hardware_camera_parameters.SCENE_MODE_PORTRAIT,
+        Parameters_SCENE_MODE_PORTRAIT);
+  Parameters_SCENE_MODE_PORTRAIT = NULL;
+  if (android_hardware_camera_parameters.SCENE_MODE_PORTRAIT)
+    (*env)->DeleteGlobalRef (env,
+        android_hardware_camera_parameters.SCENE_MODE_PORTRAIT);
+  android_hardware_camera_parameters.SCENE_MODE_PORTRAIT = NULL;
+  if (Parameters_SCENE_MODE_LANDSCAPE)
+    (*env)->ReleaseStringUTFChars (env,
+        android_hardware_camera_parameters.SCENE_MODE_LANDSCAPE,
+        Parameters_SCENE_MODE_LANDSCAPE);
+  Parameters_SCENE_MODE_LANDSCAPE = NULL;
+  if (android_hardware_camera_parameters.SCENE_MODE_LANDSCAPE)
+    (*env)->DeleteGlobalRef (env,
+        android_hardware_camera_parameters.SCENE_MODE_LANDSCAPE);
+  android_hardware_camera_parameters.SCENE_MODE_LANDSCAPE = NULL;
+  if (Parameters_SCENE_MODE_NIGHT)
+    (*env)->ReleaseStringUTFChars (env,
+        android_hardware_camera_parameters.SCENE_MODE_NIGHT,
+        Parameters_SCENE_MODE_NIGHT);
+  Parameters_SCENE_MODE_NIGHT = NULL;
+  if (android_hardware_camera_parameters.SCENE_MODE_NIGHT)
+    (*env)->DeleteGlobalRef (env,
+        android_hardware_camera_parameters.SCENE_MODE_NIGHT);
+  android_hardware_camera_parameters.SCENE_MODE_NIGHT = NULL;
+  if (Parameters_SCENE_MODE_NIGHT_PORTRAIT)
+    (*env)->ReleaseStringUTFChars (env,
+        android_hardware_camera_parameters.SCENE_MODE_NIGHT_PORTRAIT,
+        Parameters_SCENE_MODE_NIGHT_PORTRAIT);
+  Parameters_SCENE_MODE_NIGHT_PORTRAIT = NULL;
+  if (android_hardware_camera_parameters.SCENE_MODE_NIGHT_PORTRAIT)
+    (*env)->DeleteGlobalRef (env,
+        android_hardware_camera_parameters.SCENE_MODE_NIGHT_PORTRAIT);
+  android_hardware_camera_parameters.SCENE_MODE_NIGHT_PORTRAIT = NULL;
+  if (Parameters_SCENE_MODE_THEATRE)
+    (*env)->ReleaseStringUTFChars (env,
+        android_hardware_camera_parameters.SCENE_MODE_THEATRE,
+        Parameters_SCENE_MODE_THEATRE);
+  Parameters_SCENE_MODE_THEATRE = NULL;
+  if (android_hardware_camera_parameters.SCENE_MODE_THEATRE)
+    (*env)->DeleteGlobalRef (env,
+        android_hardware_camera_parameters.SCENE_MODE_THEATRE);
+  android_hardware_camera_parameters.SCENE_MODE_THEATRE = NULL;
+  if (Parameters_SCENE_MODE_BEACH)
+    (*env)->ReleaseStringUTFChars (env,
+        android_hardware_camera_parameters.SCENE_MODE_BEACH,
+        Parameters_SCENE_MODE_BEACH);
+  Parameters_SCENE_MODE_BEACH = NULL;
+  if (android_hardware_camera_parameters.SCENE_MODE_BEACH)
+    (*env)->DeleteGlobalRef (env,
+        android_hardware_camera_parameters.SCENE_MODE_BEACH);
+  android_hardware_camera_parameters.SCENE_MODE_BEACH = NULL;
+  if (Parameters_SCENE_MODE_SNOW)
+    (*env)->ReleaseStringUTFChars (env,
+        android_hardware_camera_parameters.SCENE_MODE_SNOW,
+        Parameters_SCENE_MODE_SNOW);
+  Parameters_SCENE_MODE_SNOW = NULL;
+  if (android_hardware_camera_parameters.SCENE_MODE_SNOW)
+    (*env)->DeleteGlobalRef (env,
+        android_hardware_camera_parameters.SCENE_MODE_SNOW);
+  android_hardware_camera_parameters.SCENE_MODE_SNOW = NULL;
+  if (Parameters_SCENE_MODE_SUNSET)
+    (*env)->ReleaseStringUTFChars (env,
+        android_hardware_camera_parameters.SCENE_MODE_SUNSET,
+        Parameters_SCENE_MODE_SUNSET);
+  Parameters_SCENE_MODE_SUNSET = NULL;
+  if (android_hardware_camera_parameters.SCENE_MODE_SUNSET)
+    (*env)->DeleteGlobalRef (env,
+        android_hardware_camera_parameters.SCENE_MODE_SUNSET);
+  android_hardware_camera_parameters.SCENE_MODE_SUNSET = NULL;
+  if (Parameters_SCENE_MODE_STEADYPHOTO)
+    (*env)->ReleaseStringUTFChars (env,
+        android_hardware_camera_parameters.SCENE_MODE_STEADYPHOTO,
+        Parameters_SCENE_MODE_STEADYPHOTO);
+  Parameters_SCENE_MODE_STEADYPHOTO = NULL;
+  if (android_hardware_camera_parameters.SCENE_MODE_STEADYPHOTO)
+    (*env)->DeleteGlobalRef (env,
+        android_hardware_camera_parameters.SCENE_MODE_STEADYPHOTO);
+  android_hardware_camera_parameters.SCENE_MODE_STEADYPHOTO = NULL;
+  if (Parameters_SCENE_MODE_FIREWORKS)
+    (*env)->ReleaseStringUTFChars (env,
+        android_hardware_camera_parameters.SCENE_MODE_FIREWORKS,
+        Parameters_SCENE_MODE_FIREWORKS);
+  Parameters_SCENE_MODE_FIREWORKS = NULL;
+  if (android_hardware_camera_parameters.SCENE_MODE_FIREWORKS)
+    (*env)->DeleteGlobalRef (env,
+        android_hardware_camera_parameters.SCENE_MODE_FIREWORKS);
+  android_hardware_camera_parameters.SCENE_MODE_FIREWORKS = NULL;
+  if (Parameters_SCENE_MODE_SPORTS)
+    (*env)->ReleaseStringUTFChars (env,
+        android_hardware_camera_parameters.SCENE_MODE_SPORTS,
+        Parameters_SCENE_MODE_SPORTS);
+  Parameters_SCENE_MODE_SPORTS = NULL;
+  if (android_hardware_camera_parameters.SCENE_MODE_SPORTS)
+    (*env)->DeleteGlobalRef (env,
+        android_hardware_camera_parameters.SCENE_MODE_SPORTS);
+  android_hardware_camera_parameters.SCENE_MODE_SPORTS = NULL;
+  if (Parameters_SCENE_MODE_PARTY)
+    (*env)->ReleaseStringUTFChars (env,
+        android_hardware_camera_parameters.SCENE_MODE_PARTY,
+        Parameters_SCENE_MODE_PARTY);
+  Parameters_SCENE_MODE_PARTY = NULL;
+  if (android_hardware_camera_parameters.SCENE_MODE_PARTY)
+    (*env)->DeleteGlobalRef (env,
+        android_hardware_camera_parameters.SCENE_MODE_PARTY);
+  android_hardware_camera_parameters.SCENE_MODE_PARTY = NULL;
+  if (Parameters_SCENE_MODE_CANDLELIGHT)
+    (*env)->ReleaseStringUTFChars (env,
+        android_hardware_camera_parameters.SCENE_MODE_CANDLELIGHT,
+        Parameters_SCENE_MODE_CANDLELIGHT);
+  Parameters_SCENE_MODE_CANDLELIGHT = NULL;
+  if (android_hardware_camera_parameters.SCENE_MODE_CANDLELIGHT)
+    (*env)->DeleteGlobalRef (env,
+        android_hardware_camera_parameters.SCENE_MODE_CANDLELIGHT);
+  android_hardware_camera_parameters.SCENE_MODE_CANDLELIGHT = NULL;
+  if (Parameters_SCENE_MODE_BARCODE)
+    (*env)->ReleaseStringUTFChars (env,
+        android_hardware_camera_parameters.SCENE_MODE_BARCODE,
+        Parameters_SCENE_MODE_BARCODE);
+  Parameters_SCENE_MODE_BARCODE = NULL;
+  if (android_hardware_camera_parameters.SCENE_MODE_BARCODE)
+    (*env)->DeleteGlobalRef (env,
+        android_hardware_camera_parameters.SCENE_MODE_BARCODE);
+  android_hardware_camera_parameters.SCENE_MODE_BARCODE = NULL;
+  if (Parameters_FOCUS_MODE_AUTO)
+    (*env)->ReleaseStringUTFChars (env,
+        android_hardware_camera_parameters.FOCUS_MODE_AUTO,
+        Parameters_FOCUS_MODE_AUTO);
+  Parameters_FOCUS_MODE_AUTO = NULL;
+  if (android_hardware_camera_parameters.FOCUS_MODE_AUTO)
+    (*env)->DeleteGlobalRef (env,
+        android_hardware_camera_parameters.FOCUS_MODE_AUTO);
+  android_hardware_camera_parameters.FOCUS_MODE_AUTO = NULL;
+  if (Parameters_FOCUS_MODE_INFINITY)
+    (*env)->ReleaseStringUTFChars (env,
+        android_hardware_camera_parameters.FOCUS_MODE_INFINITY,
+        Parameters_FOCUS_MODE_INFINITY);
+  Parameters_FOCUS_MODE_INFINITY = NULL;
+  if (android_hardware_camera_parameters.FOCUS_MODE_INFINITY)
+    (*env)->DeleteGlobalRef (env,
+        android_hardware_camera_parameters.FOCUS_MODE_INFINITY);
+  android_hardware_camera_parameters.FOCUS_MODE_INFINITY = NULL;
+  if (Parameters_FOCUS_MODE_MACRO)
+    (*env)->ReleaseStringUTFChars (env,
+        android_hardware_camera_parameters.FOCUS_MODE_MACRO,
+        Parameters_FOCUS_MODE_MACRO);
+  Parameters_FOCUS_MODE_MACRO = NULL;
+  if (android_hardware_camera_parameters.FOCUS_MODE_MACRO)
+    (*env)->DeleteGlobalRef (env,
+        android_hardware_camera_parameters.FOCUS_MODE_MACRO);
+  android_hardware_camera_parameters.FOCUS_MODE_MACRO = NULL;
+  if (Parameters_FOCUS_MODE_FIXED)
+    (*env)->ReleaseStringUTFChars (env,
+        android_hardware_camera_parameters.FOCUS_MODE_FIXED,
+        Parameters_FOCUS_MODE_FIXED);
+  Parameters_FOCUS_MODE_FIXED = NULL;
+  if (android_hardware_camera_parameters.FOCUS_MODE_FIXED)
+    (*env)->DeleteGlobalRef (env,
+        android_hardware_camera_parameters.FOCUS_MODE_FIXED);
+  android_hardware_camera_parameters.FOCUS_MODE_FIXED = NULL;
+  if (Parameters_FOCUS_MODE_EDOF)
+    (*env)->ReleaseStringUTFChars (env,
+        android_hardware_camera_parameters.FOCUS_MODE_EDOF,
+        Parameters_FOCUS_MODE_EDOF);
+  Parameters_FOCUS_MODE_EDOF = NULL;
+  if (android_hardware_camera_parameters.FOCUS_MODE_EDOF)
+    (*env)->DeleteGlobalRef (env,
+        android_hardware_camera_parameters.FOCUS_MODE_EDOF);
+  android_hardware_camera_parameters.FOCUS_MODE_EDOF = NULL;
+  if (Parameters_FOCUS_MODE_CONTINUOUS_VIDEO)
+    (*env)->ReleaseStringUTFChars (env,
+        android_hardware_camera_parameters.FOCUS_MODE_CONTINUOUS_VIDEO,
+        Parameters_FOCUS_MODE_CONTINUOUS_VIDEO);
+  Parameters_FOCUS_MODE_CONTINUOUS_VIDEO = NULL;
+  if (android_hardware_camera_parameters.FOCUS_MODE_CONTINUOUS_VIDEO)
+    (*env)->DeleteGlobalRef (env,
+        android_hardware_camera_parameters.FOCUS_MODE_CONTINUOUS_VIDEO);
+  android_hardware_camera_parameters.FOCUS_MODE_CONTINUOUS_VIDEO = NULL;
+  if (Parameters_FOCUS_MODE_CONTINUOUS_PICTURE)
+    (*env)->ReleaseStringUTFChars (env,
+        android_hardware_camera_parameters.FOCUS_MODE_CONTINUOUS_PICTURE,
+        Parameters_FOCUS_MODE_CONTINUOUS_PICTURE);
+  Parameters_FOCUS_MODE_CONTINUOUS_PICTURE = NULL;
+  if (android_hardware_camera_parameters.FOCUS_MODE_CONTINUOUS_PICTURE)
+    (*env)->DeleteGlobalRef (env,
+        android_hardware_camera_parameters.FOCUS_MODE_CONTINUOUS_PICTURE);
+  android_hardware_camera_parameters.FOCUS_MODE_CONTINUOUS_PICTURE = NULL;
+
+  if (java_lang_string.klass)
+    (*env)->DeleteGlobalRef (env, java_lang_string.klass);
+  java_lang_string.klass = NULL;
+
+  if (java_util_list.klass)
+    (*env)->DeleteGlobalRef (env, java_util_list.klass);
+  java_util_list.klass = NULL;
+
+  if (java_util_iterator.klass)
+    (*env)->DeleteGlobalRef (env, java_util_iterator.klass);
+  java_util_iterator.klass = NULL;
+
+  if (java_lang_integer.klass)
+    (*env)->DeleteGlobalRef (env, java_lang_integer.klass);
+  java_lang_integer.klass = NULL;
+
+  if (org_freedesktop_gstreamer_androidmedia_gstahccallback.klass) {
+    (*env)->UnregisterNatives (env,
+        org_freedesktop_gstreamer_androidmedia_gstahccallback.klass);
+    (*env)->DeleteGlobalRef (env,
+        org_freedesktop_gstreamer_androidmedia_gstahccallback.klass);
+  }
+  org_freedesktop_gstreamer_androidmedia_gstahccallback.klass = NULL;
+}
+
+/* android.hardware.Camera */
+#define AHC_CALL(error_statement, type, method, ...)                    \
+  GST_DVM_CALL (error_statement, self->object, type, android_hardware_camera, \
+      method, ## __VA_ARGS__);
+#define AHC_STATIC_CALL(error_statement, type, method, ...)             \
+  GST_DVM_STATIC_CALL (error_statement, type, android_hardware_camera,  \
+      method, ## __VA_ARGS__);
+
+void
+gst_ah_camera_add_callback_buffer (GstAHCamera * self, jbyteArray buffer)
+{
+  JNIEnv *env = gst_amc_jni_get_env ();
+
+  GST_DEBUG ("add callback_buffer %p", buffer);
+
+  AHC_CALL (, Void, addCallbackBuffer, buffer);
+}
+
+gboolean
+gst_ah_camera_auto_focus (GstAHCamera * self,
+    GstAHCAutoFocusCallback cb, gpointer user_data)
+{
+  JNIEnv *env = gst_amc_jni_get_env ();
+  jobject object = NULL;
+  gboolean ret = FALSE;
+
+  if (cb) {
+    object = (*env)->NewObject (env,
+        org_freedesktop_gstreamer_androidmedia_gstahccallback.klass,
+        org_freedesktop_gstreamer_androidmedia_gstahccallback.constructor,
+        *((jlong *) & cb), *((jlong *) & user_data));
+    if (!object) {
+      GST_ERROR ("Failed to create callback object");
+      (*env)->ExceptionClear (env);
+      goto done;
+    }
+  }
+
+  AHC_CALL (goto done, Void, autoFocus, object);
+
+  ret = TRUE;
+done:
+  if (object)
+    (*env)->DeleteLocalRef (env, object);
+
+  return ret;
+}
+
+gboolean
+gst_ah_camera_cancel_auto_focus (GstAHCamera * self)
+{
+  JNIEnv *env = gst_amc_jni_get_env ();
+
+  AHC_CALL (return FALSE, Void, cancelAutoFocus);
+
+  return TRUE;
+}
+
+gboolean
+gst_ah_camera_get_camera_info (gint camera_id, GstAHCCameraInfo * camera_info)
+{
+  JNIEnv *env = gst_amc_jni_get_env ();
+  jobject jcamera_info = NULL;
+  gboolean ret = FALSE;
+
+  jcamera_info = (*env)->NewObject (env,
+      android_hardware_camera_camerainfo.klass,
+      android_hardware_camera_camerainfo.constructor);
+  if (!jcamera_info) {
+    GST_ERROR ("Failed to call Java method");
+    (*env)->ExceptionClear (env);
+    goto done;
+  }
+
+  AHC_STATIC_CALL (goto done, Void, getCameraInfo, camera_id, jcamera_info);
+
+  camera_info->facing = (*env)->GetIntField (env, jcamera_info,
+      android_hardware_camera_camerainfo.facing);
+  if ((*env)->ExceptionCheck (env)) {
+    GST_ERROR ("Failed to get CameraInfo.facing field");
+    (*env)->ExceptionClear (env);
+    goto done;
+  }
+
+  camera_info->orientation = (*env)->GetIntField (env, jcamera_info,
+      android_hardware_camera_camerainfo.orientation);
+  if ((*env)->ExceptionCheck (env)) {
+    GST_ERROR ("Failed to get CameraInfo.orientation field");
+    (*env)->ExceptionClear (env);
+    goto done;
+  }
+
+  ret = TRUE;
+done:
+  if (jcamera_info)
+    (*env)->DeleteLocalRef (env, jcamera_info);
+
+  return ret;
+}
+
+gint
+gst_ah_camera_get_number_of_cameras (void)
+{
+  JNIEnv *env = gst_amc_jni_get_env ();
+  gint num_cameras;
+
+  num_cameras = AHC_STATIC_CALL (return -1, Int, getNumberOfCameras);
+
+  return num_cameras;
+}
+
+GstAHCParameters *
+gst_ah_camera_get_parameters (GstAHCamera * self)
+{
+  JNIEnv *env = gst_amc_jni_get_env ();
+  jobject object = NULL;
+  GstAHCParameters *params = NULL;
+
+  object = AHC_CALL (return NULL, Object, getParameters);
+  if (object) {
+    params = g_slice_new0 (GstAHCParameters);
+    params->object = (*env)->NewGlobalRef (env, object);
+    (*env)->DeleteLocalRef (env, object);
+    if (!params->object) {
+      GST_ERROR ("Failed to create global reference");
+      (*env)->ExceptionClear (env);
+      g_slice_free (GstAHCParameters, params);
+      return NULL;
+    }
+  }
+
+  GST_DEBUG ("return parameters %p", params->object);
+
+  return params;
+}
+
+gboolean
+gst_ah_camera_lock (GstAHCamera * self)
+{
+  JNIEnv *env = gst_amc_jni_get_env ();
+
+  AHC_CALL (return FALSE, Void, lock);
+
+  return TRUE;
+}
+
+GstAHCamera *
+gst_ah_camera_open (gint camera_id)
+{
+  JNIEnv *env = gst_amc_jni_get_env ();
+  jobject object = NULL;
+  GstAHCamera *camera = NULL;
+
+  object = AHC_STATIC_CALL (goto done, Object, open, camera_id);
+  if (object) {
+    camera = g_slice_new0 (GstAHCamera);
+    camera->object = (*env)->NewGlobalRef (env, object);
+    (*env)->DeleteLocalRef (env, object);
+    if (!camera->object) {
+      GST_ERROR ("Failed to create global reference");
+      (*env)->ExceptionClear (env);
+      g_slice_free (GstAHCamera, camera);
+      camera = NULL;
+    }
+  }
+
+done:
+  return camera;
+}
+
+gboolean
+gst_ah_camera_reconnect (GstAHCamera * self)
+{
+  JNIEnv *env = gst_amc_jni_get_env ();
+
+  AHC_CALL (return FALSE, Void, reconnect);
+
+  return TRUE;
+}
+
+void
+gst_ah_camera_release (GstAHCamera * self)
+{
+  JNIEnv *env = gst_amc_jni_get_env ();
+
+  AHC_CALL (, Void, release);
+}
+
+void
+gst_ah_camera_free (GstAHCamera * self)
+{
+  JNIEnv *env = gst_amc_jni_get_env ();
+
+  (*env)->DeleteGlobalRef (env, self->object);
+  g_slice_free (GstAHCamera, self);
+}
+
+
+gboolean
+gst_ah_camera_set_parameters (GstAHCamera * self, GstAHCParameters * params)
+{
+  JNIEnv *env = gst_amc_jni_get_env ();
+
+  AHC_CALL (return FALSE, Void, setParameters, params->object);
+
+  return TRUE;
+}
+
+gboolean
+gst_ah_camera_set_error_callback (GstAHCamera * self, GstAHCErrorCallback cb,
+    gpointer user_data)
+{
+  JNIEnv *env = gst_amc_jni_get_env ();
+  jobject object = NULL;
+  gboolean ret = FALSE;
+
+  if (cb) {
+    object = (*env)->NewObject (env,
+        org_freedesktop_gstreamer_androidmedia_gstahccallback.klass,
+        org_freedesktop_gstreamer_androidmedia_gstahccallback.constructor,
+        *((jlong *) & cb), *((jlong *) & user_data));
+    if (!object) {
+      GST_ERROR ("Failed to create callback object");
+      (*env)->ExceptionClear (env);
+      goto done;
+    }
+  }
+
+  AHC_CALL (goto done, Void, setErrorCallback, object);
+
+  ret = TRUE;
+done:
+  if (object)
+    (*env)->DeleteLocalRef (env, object);
+
+  return ret;
+}
+
+gboolean
+gst_ah_camera_set_preview_callback_with_buffer (GstAHCamera * self,
+    GstAHCPreviewCallback cb, gpointer user_data)
+{
+  JNIEnv *env = gst_amc_jni_get_env ();
+  jobject object = NULL;
+  gboolean ret = FALSE;
+
+  if (cb) {
+    object = (*env)->NewObject (env,
+        org_freedesktop_gstreamer_androidmedia_gstahccallback.klass,
+        org_freedesktop_gstreamer_androidmedia_gstahccallback.constructor,
+        *((jlong *) & cb), *((jlong *) & user_data));
+    if (!object) {
+      GST_ERROR ("Failed to create callback object");
+      (*env)->ExceptionClear (env);
+      goto done;
+    }
+  }
+
+  AHC_CALL (goto done, Void, setPreviewCallbackWithBuffer, object);
+
+  ret = TRUE;
+done:
+  if (object)
+    (*env)->DeleteLocalRef (env, object);
+
+  return ret;
+}
+
+void
+gst_ah_camera_set_preview_texture (GstAHCamera * self,
+    GstAGSurfaceTexture * surfaceTexture)
+{
+  JNIEnv *env = gst_amc_jni_get_env ();
+
+  AHC_CALL (, Void, setPreviewTexture, surfaceTexture->object);
+}
+
+gboolean
+gst_ah_camera_start_preview (GstAHCamera * self)
+{
+  JNIEnv *env = gst_amc_jni_get_env ();
+
+  AHC_CALL (return FALSE, Void, startPreview);
+
+  return TRUE;
+}
+
+gboolean
+gst_ah_camera_start_smooth_zoom (GstAHCamera * self, gint value)
+{
+  JNIEnv *env = gst_amc_jni_get_env ();
+
+  AHC_CALL (return FALSE, Void, startSmoothZoom, value);
+
+  return TRUE;
+}
+
+gboolean
+gst_ah_camera_stop_preview (GstAHCamera * self)
+{
+  JNIEnv *env = gst_amc_jni_get_env ();
+
+  AHC_CALL (return FALSE, Void, stopPreview);
+
+  return TRUE;
+}
+
+gboolean
+gst_ah_camera_stop_smooth_zoom (GstAHCamera * self)
+{
+  JNIEnv *env = gst_amc_jni_get_env ();
+
+  AHC_CALL (return FALSE, Void, stopSmoothZoom);
+
+  return TRUE;
+}
+
+gboolean
+gst_ah_camera_unlock (GstAHCamera * self)
+{
+  JNIEnv *env = gst_amc_jni_get_env ();
+
+  AHC_CALL (return FALSE, Void, unlock);
+
+  return TRUE;
+}
+
+#undef AHC_CALL
+#undef AHC_STATIC_CALL
+
+/* android.hardware.Camera.Size */
+GstAHCSize *
+gst_ahc_size_new (gint width, gint height)
+{
+  GstAHCSize *self = g_slice_new0 (GstAHCSize);
+
+  self->width = width;
+  self->height = height;
+
+  return self;
+}
+
+void
+gst_ahc_size_free (GstAHCSize * self)
+{
+  g_slice_free (GstAHCSize, self);
+}
+
+/* java.lang.String */
+static jboolean
+java_lang_string_equals (JNIEnv * env, jstring str, jstring obj)
+{
+  return (*env)->CallBooleanMethod (env, str, java_lang_string.equals, obj);
+}
+
+/* java.util.List */
+static jobject
+java_util_list_iterator (JNIEnv * env, jobject obj)
+{
+  return (*env)->CallObjectMethod (env, obj, java_util_list.iterator);
+}
+
+/* java.util.Iterator */
+static jobject
+java_util_iterator_next (JNIEnv * env, jobject obj)
+{
+  return (*env)->CallObjectMethod (env, obj, java_util_iterator.next);
+}
+
+static jboolean
+java_util_iterator_has_next (JNIEnv * env, jobject obj)
+{
+  return (*env)->CallBooleanMethod (env, obj, java_util_iterator.hasNext);
+}
+
+/* java.lang.Integer */
+static jint
+java_lang_integer_int_value (JNIEnv * env, jobject obj)
+{
+  return (*env)->CallIntMethod (env, obj, java_lang_integer.intValue);
+}
+
+
+/* android.hardware.Camera.Parameters */
+#define AHCP_CALL(error_statement, type, method, ...)                   \
+  GST_DVM_CALL (error_statement, self->object, type,                    \
+      android_hardware_camera_parameters, method, ## __VA_ARGS__);
+
+#define AHCP_STATIC_CALL(error_statement, type, method, ...)            \
+  GST_DVM_STATIC_CALL (error_statement, type,                           \
+      android_hardware_camera_parameters, method, ## __VA_ARGS__);
+
+static const gchar *
+_white_balance_to_gchar (JNIEnv * env, jstring white_balance)
+{
+  if (!white_balance)
+    return NULL;
+
+  if (java_lang_string_equals (env, white_balance,
+          android_hardware_camera_parameters.WHITE_BALANCE_AUTO))
+    return Parameters_WHITE_BALANCE_AUTO;
+  else if (java_lang_string_equals (env, white_balance,
+          android_hardware_camera_parameters.WHITE_BALANCE_INCANDESCENT))
+    return Parameters_WHITE_BALANCE_INCANDESCENT;
+  else if (java_lang_string_equals (env, white_balance,
+          android_hardware_camera_parameters.WHITE_BALANCE_FLUORESCENT))
+    return Parameters_WHITE_BALANCE_FLUORESCENT;
+  else if (java_lang_string_equals (env, white_balance,
+          android_hardware_camera_parameters.WHITE_BALANCE_WARM_FLUORESCENT))
+    return Parameters_WHITE_BALANCE_WARM_FLUORESCENT;
+  else if (java_lang_string_equals (env, white_balance,
+          android_hardware_camera_parameters.WHITE_BALANCE_DAYLIGHT))
+    return Parameters_WHITE_BALANCE_DAYLIGHT;
+  else if (java_lang_string_equals (env, white_balance,
+          android_hardware_camera_parameters.WHITE_BALANCE_CLOUDY_DAYLIGHT))
+    return Parameters_WHITE_BALANCE_CLOUDY_DAYLIGHT;
+  else if (java_lang_string_equals (env, white_balance,
+          android_hardware_camera_parameters.WHITE_BALANCE_TWILIGHT))
+    return Parameters_WHITE_BALANCE_TWILIGHT;
+  else if (java_lang_string_equals (env, white_balance,
+          android_hardware_camera_parameters.WHITE_BALANCE_SHADE))
+    return Parameters_WHITE_BALANCE_SHADE;
+
+  return NULL;
+}
+
+static jstring
+_white_balance_to_jstring (const gchar * white_balance)
+{
+  if (!white_balance)
+    return NULL;
+
+  if (!g_strcmp0 (white_balance, Parameters_WHITE_BALANCE_AUTO))
+    return android_hardware_camera_parameters.WHITE_BALANCE_AUTO;
+  else if (!g_strcmp0 (white_balance, Parameters_WHITE_BALANCE_INCANDESCENT))
+    return android_hardware_camera_parameters.WHITE_BALANCE_INCANDESCENT;
+  else if (!g_strcmp0 (white_balance, Parameters_WHITE_BALANCE_FLUORESCENT))
+    return android_hardware_camera_parameters.WHITE_BALANCE_FLUORESCENT;
+  else if (!g_strcmp0 (white_balance,
+          Parameters_WHITE_BALANCE_WARM_FLUORESCENT))
+    return android_hardware_camera_parameters.WHITE_BALANCE_WARM_FLUORESCENT;
+  else if (!g_strcmp0 (white_balance, Parameters_WHITE_BALANCE_DAYLIGHT))
+    return android_hardware_camera_parameters.WHITE_BALANCE_DAYLIGHT;
+  else if (!g_strcmp0 (white_balance, Parameters_WHITE_BALANCE_CLOUDY_DAYLIGHT))
+    return android_hardware_camera_parameters.WHITE_BALANCE_CLOUDY_DAYLIGHT;
+  else if (!g_strcmp0 (white_balance, Parameters_WHITE_BALANCE_TWILIGHT))
+    return android_hardware_camera_parameters.WHITE_BALANCE_TWILIGHT;
+  else if (!g_strcmp0 (white_balance, Parameters_WHITE_BALANCE_SHADE))
+    return android_hardware_camera_parameters.WHITE_BALANCE_SHADE;
+
+  return NULL;
+}
+
+static const gchar *
+_color_effect_to_gchar (JNIEnv * env, jstring color_effect)
+{
+  if (!color_effect)
+    return NULL;
+
+  if (java_lang_string_equals (env, color_effect,
+          android_hardware_camera_parameters.EFFECT_NONE))
+    return Parameters_EFFECT_NONE;
+  else if (java_lang_string_equals (env, color_effect,
+          android_hardware_camera_parameters.EFFECT_MONO))
+    return Parameters_EFFECT_MONO;
+  else if (java_lang_string_equals (env, color_effect,
+          android_hardware_camera_parameters.EFFECT_NEGATIVE))
+    return Parameters_EFFECT_NEGATIVE;
+  else if (java_lang_string_equals (env, color_effect,
+          android_hardware_camera_parameters.EFFECT_SOLARIZE))
+    return Parameters_EFFECT_SOLARIZE;
+  else if (java_lang_string_equals (env, color_effect,
+          android_hardware_camera_parameters.EFFECT_SEPIA))
+    return Parameters_EFFECT_SEPIA;
+  else if (java_lang_string_equals (env, color_effect,
+          android_hardware_camera_parameters.EFFECT_POSTERIZE))
+    return Parameters_EFFECT_POSTERIZE;
+  else if (java_lang_string_equals (env, color_effect,
+          android_hardware_camera_parameters.EFFECT_WHITEBOARD))
+    return Parameters_EFFECT_WHITEBOARD;
+  else if (java_lang_string_equals (env, color_effect,
+          android_hardware_camera_parameters.EFFECT_BLACKBOARD))
+    return Parameters_EFFECT_BLACKBOARD;
+  else if (java_lang_string_equals (env, color_effect,
+          android_hardware_camera_parameters.EFFECT_AQUA))
+    return Parameters_EFFECT_AQUA;
+
+  return NULL;
+}
+
+static jstring
+_color_effect_to_jstring (const gchar * color_effect)
+{
+  if (!color_effect)
+    return NULL;
+
+  if (!g_strcmp0 (color_effect, Parameters_EFFECT_NONE))
+    return android_hardware_camera_parameters.EFFECT_NONE;
+  else if (!g_strcmp0 (color_effect, Parameters_EFFECT_MONO))
+    return android_hardware_camera_parameters.EFFECT_MONO;
+  else if (!g_strcmp0 (color_effect, Parameters_EFFECT_NEGATIVE))
+    return android_hardware_camera_parameters.EFFECT_NEGATIVE;
+  else if (!g_strcmp0 (color_effect, Parameters_EFFECT_SOLARIZE))
+    return android_hardware_camera_parameters.EFFECT_SOLARIZE;
+  else if (!g_strcmp0 (color_effect, Parameters_EFFECT_SEPIA))
+    return android_hardware_camera_parameters.EFFECT_SEPIA;
+  else if (!g_strcmp0 (color_effect, Parameters_EFFECT_POSTERIZE))
+    return android_hardware_camera_parameters.EFFECT_POSTERIZE;
+  else if (!g_strcmp0 (color_effect, Parameters_EFFECT_WHITEBOARD))
+    return android_hardware_camera_parameters.EFFECT_WHITEBOARD;
+  else if (!g_strcmp0 (color_effect, Parameters_EFFECT_BLACKBOARD))
+    return android_hardware_camera_parameters.EFFECT_BLACKBOARD;
+  else if (!g_strcmp0 (color_effect, Parameters_EFFECT_AQUA))
+    return android_hardware_camera_parameters.EFFECT_AQUA;
+
+  return NULL;
+}
+
+static const gchar *
+_antibanding_to_gchar (JNIEnv * env, jstring antibanding)
+{
+  if (!antibanding)
+    return NULL;
+
+  if (java_lang_string_equals (env, antibanding,
+          android_hardware_camera_parameters.ANTIBANDING_AUTO))
+    return Parameters_ANTIBANDING_AUTO;
+  else if (java_lang_string_equals (env, antibanding,
+          android_hardware_camera_parameters.ANTIBANDING_50HZ))
+    return Parameters_ANTIBANDING_50HZ;
+  else if (java_lang_string_equals (env, antibanding,
+          android_hardware_camera_parameters.ANTIBANDING_60HZ))
+    return Parameters_ANTIBANDING_60HZ;
+  else if (java_lang_string_equals (env, antibanding,
+          android_hardware_camera_parameters.ANTIBANDING_OFF))
+    return Parameters_ANTIBANDING_OFF;
+
+  return NULL;
+}
+
+static jstring
+_antibanding_to_jstring (const gchar * antibanding)
+{
+  if (!antibanding)
+    return NULL;
+
+  if (!g_strcmp0 (antibanding, Parameters_ANTIBANDING_AUTO))
+    return android_hardware_camera_parameters.ANTIBANDING_AUTO;
+  else if (!g_strcmp0 (antibanding, Parameters_ANTIBANDING_50HZ))
+    return android_hardware_camera_parameters.ANTIBANDING_50HZ;
+  else if (!g_strcmp0 (antibanding, Parameters_ANTIBANDING_60HZ))
+    return android_hardware_camera_parameters.ANTIBANDING_60HZ;
+  else if (!g_strcmp0 (antibanding, Parameters_ANTIBANDING_OFF))
+    return android_hardware_camera_parameters.ANTIBANDING_OFF;
+
+  return NULL;
+}
+
+static const gchar *
+_flash_mode_to_gchar (JNIEnv * env, jstring flash_mode)
+{
+  if (!flash_mode)
+    return NULL;
+
+  if (java_lang_string_equals (env, flash_mode,
+          android_hardware_camera_parameters.FLASH_MODE_OFF))
+    return Parameters_FLASH_MODE_OFF;
+  else if (java_lang_string_equals (env, flash_mode,
+          android_hardware_camera_parameters.FLASH_MODE_AUTO))
+    return Parameters_FLASH_MODE_AUTO;
+  else if (java_lang_string_equals (env, flash_mode,
+          android_hardware_camera_parameters.FLASH_MODE_ON))
+    return Parameters_FLASH_MODE_ON;
+  else if (java_lang_string_equals (env, flash_mode,
+          android_hardware_camera_parameters.FLASH_MODE_RED_EYE))
+    return Parameters_FLASH_MODE_RED_EYE;
+  else if (java_lang_string_equals (env, flash_mode,
+          android_hardware_camera_parameters.FLASH_MODE_TORCH))
+    return Parameters_FLASH_MODE_TORCH;
+
+  return NULL;
+}
+
+static jstring
+_flash_mode_to_jstring (const gchar * flash_mode)
+{
+  if (!flash_mode)
+    return NULL;
+
+  if (!g_strcmp0 (flash_mode, Parameters_FLASH_MODE_OFF))
+    return android_hardware_camera_parameters.FLASH_MODE_OFF;
+  else if (!g_strcmp0 (flash_mode, Parameters_FLASH_MODE_AUTO))
+    return android_hardware_camera_parameters.FLASH_MODE_AUTO;
+  else if (!g_strcmp0 (flash_mode, Parameters_FLASH_MODE_ON))
+    return android_hardware_camera_parameters.FLASH_MODE_ON;
+  else if (!g_strcmp0 (flash_mode, Parameters_FLASH_MODE_RED_EYE))
+    return android_hardware_camera_parameters.FLASH_MODE_RED_EYE;
+  else if (!g_strcmp0 (flash_mode, Parameters_FLASH_MODE_TORCH))
+    return android_hardware_camera_parameters.FLASH_MODE_TORCH;
+
+  return NULL;
+}
+
+static const gchar *
+_scene_mode_to_gchar (JNIEnv * env, jstring scene_mode)
+{
+  if (!scene_mode)
+    return NULL;
+
+  if (java_lang_string_equals (env, scene_mode,
+          android_hardware_camera_parameters.SCENE_MODE_AUTO))
+    return Parameters_SCENE_MODE_AUTO;
+  else if (java_lang_string_equals (env, scene_mode,
+          android_hardware_camera_parameters.SCENE_MODE_ACTION))
+    return Parameters_SCENE_MODE_ACTION;
+  else if (java_lang_string_equals (env, scene_mode,
+          android_hardware_camera_parameters.SCENE_MODE_PORTRAIT))
+    return Parameters_SCENE_MODE_PORTRAIT;
+  else if (java_lang_string_equals (env, scene_mode,
+          android_hardware_camera_parameters.SCENE_MODE_LANDSCAPE))
+    return Parameters_SCENE_MODE_LANDSCAPE;
+  else if (java_lang_string_equals (env, scene_mode,
+          android_hardware_camera_parameters.SCENE_MODE_NIGHT))
+    return Parameters_SCENE_MODE_NIGHT;
+  else if (java_lang_string_equals (env, scene_mode,
+          android_hardware_camera_parameters.SCENE_MODE_NIGHT_PORTRAIT))
+    return Parameters_SCENE_MODE_NIGHT_PORTRAIT;
+  else if (java_lang_string_equals (env, scene_mode,
+          android_hardware_camera_parameters.SCENE_MODE_THEATRE))
+    return Parameters_SCENE_MODE_THEATRE;
+  else if (java_lang_string_equals (env, scene_mode,
+          android_hardware_camera_parameters.SCENE_MODE_BEACH))
+    return Parameters_SCENE_MODE_BEACH;
+  else if (java_lang_string_equals (env, scene_mode,
+          android_hardware_camera_parameters.SCENE_MODE_SNOW))
+    return Parameters_SCENE_MODE_SNOW;
+  else if (java_lang_string_equals (env, scene_mode,
+          android_hardware_camera_parameters.SCENE_MODE_SUNSET))
+    return Parameters_SCENE_MODE_SUNSET;
+  else if (java_lang_string_equals (env, scene_mode,
+          android_hardware_camera_parameters.SCENE_MODE_STEADYPHOTO))
+    return Parameters_SCENE_MODE_STEADYPHOTO;
+  else if (java_lang_string_equals (env, scene_mode,
+          android_hardware_camera_parameters.SCENE_MODE_FIREWORKS))
+    return Parameters_SCENE_MODE_FIREWORKS;
+  else if (java_lang_string_equals (env, scene_mode,
+          android_hardware_camera_parameters.SCENE_MODE_SPORTS))
+    return Parameters_SCENE_MODE_SPORTS;
+  else if (java_lang_string_equals (env, scene_mode,
+          android_hardware_camera_parameters.SCENE_MODE_PARTY))
+    return Parameters_SCENE_MODE_PARTY;
+  else if (java_lang_string_equals (env, scene_mode,
+          android_hardware_camera_parameters.SCENE_MODE_CANDLELIGHT))
+    return Parameters_SCENE_MODE_CANDLELIGHT;
+  else if (java_lang_string_equals (env, scene_mode,
+          android_hardware_camera_parameters.SCENE_MODE_BARCODE))
+    return Parameters_SCENE_MODE_BARCODE;
+
+  return NULL;
+}
+
+static const jstring
+_scene_mode_to_jstring (const gchar * scene_mode)
+{
+  if (!scene_mode)
+    return NULL;
+
+  if (!g_strcmp0 (scene_mode, Parameters_SCENE_MODE_AUTO))
+    return android_hardware_camera_parameters.SCENE_MODE_AUTO;
+  else if (!g_strcmp0 (scene_mode, Parameters_SCENE_MODE_ACTION))
+    return android_hardware_camera_parameters.SCENE_MODE_ACTION;
+  else if (!g_strcmp0 (scene_mode, Parameters_SCENE_MODE_PORTRAIT))
+    return android_hardware_camera_parameters.SCENE_MODE_PORTRAIT;
+  else if (!g_strcmp0 (scene_mode, Parameters_SCENE_MODE_LANDSCAPE))
+    return android_hardware_camera_parameters.SCENE_MODE_LANDSCAPE;
+  else if (!g_strcmp0 (scene_mode, Parameters_SCENE_MODE_NIGHT))
+    return android_hardware_camera_parameters.SCENE_MODE_NIGHT;
+  else if (!g_strcmp0 (scene_mode, Parameters_SCENE_MODE_NIGHT_PORTRAIT))
+    return android_hardware_camera_parameters.SCENE_MODE_NIGHT_PORTRAIT;
+  else if (!g_strcmp0 (scene_mode, Parameters_SCENE_MODE_THEATRE))
+    return android_hardware_camera_parameters.SCENE_MODE_THEATRE;
+  else if (!g_strcmp0 (scene_mode, Parameters_SCENE_MODE_BEACH))
+    return android_hardware_camera_parameters.SCENE_MODE_BEACH;
+  else if (!g_strcmp0 (scene_mode, Parameters_SCENE_MODE_SNOW))
+    return android_hardware_camera_parameters.SCENE_MODE_SNOW;
+  else if (!g_strcmp0 (scene_mode, Parameters_SCENE_MODE_SUNSET))
+    return android_hardware_camera_parameters.SCENE_MODE_SUNSET;
+  else if (!g_strcmp0 (scene_mode, Parameters_SCENE_MODE_STEADYPHOTO))
+    return android_hardware_camera_parameters.SCENE_MODE_STEADYPHOTO;
+  else if (!g_strcmp0 (scene_mode, Parameters_SCENE_MODE_FIREWORKS))
+    return android_hardware_camera_parameters.SCENE_MODE_FIREWORKS;
+  else if (!g_strcmp0 (scene_mode, Parameters_SCENE_MODE_SPORTS))
+    return android_hardware_camera_parameters.SCENE_MODE_SPORTS;
+  else if (!g_strcmp0 (scene_mode, Parameters_SCENE_MODE_PARTY))
+    return android_hardware_camera_parameters.SCENE_MODE_PARTY;
+  else if (!g_strcmp0 (scene_mode, Parameters_SCENE_MODE_CANDLELIGHT))
+    return android_hardware_camera_parameters.SCENE_MODE_CANDLELIGHT;
+  else if (!g_strcmp0 (scene_mode, Parameters_SCENE_MODE_BARCODE))
+    return android_hardware_camera_parameters.SCENE_MODE_BARCODE;
+
+  return NULL;
+}
+
+static const gchar *
+_focus_mode_to_gchar (JNIEnv * env, jstring focus_mode)
+{
+  if (!focus_mode)
+    return NULL;
+
+  if (java_lang_string_equals (env, focus_mode,
+          android_hardware_camera_parameters.FOCUS_MODE_AUTO))
+    return Parameters_FOCUS_MODE_AUTO;
+  else if (java_lang_string_equals (env, focus_mode,
+          android_hardware_camera_parameters.FOCUS_MODE_INFINITY))
+    return Parameters_FOCUS_MODE_INFINITY;
+  else if (java_lang_string_equals (env, focus_mode,
+          android_hardware_camera_parameters.FOCUS_MODE_MACRO))
+    return Parameters_FOCUS_MODE_MACRO;
+  else if (java_lang_string_equals (env, focus_mode,
+          android_hardware_camera_parameters.FOCUS_MODE_FIXED))
+    return Parameters_FOCUS_MODE_FIXED;
+  else if (java_lang_string_equals (env, focus_mode,
+          android_hardware_camera_parameters.FOCUS_MODE_EDOF))
+    return Parameters_FOCUS_MODE_EDOF;
+  else if (java_lang_string_equals (env, focus_mode,
+          android_hardware_camera_parameters.FOCUS_MODE_CONTINUOUS_VIDEO))
+    return Parameters_FOCUS_MODE_CONTINUOUS_VIDEO;
+  else if (java_lang_string_equals (env, focus_mode,
+          android_hardware_camera_parameters.FOCUS_MODE_CONTINUOUS_PICTURE))
+    return Parameters_FOCUS_MODE_CONTINUOUS_PICTURE;
+
+  return NULL;
+}
+
+static jstring
+_focus_mode_to_jstring (const gchar * focus_mode)
+{
+  if (!focus_mode)
+    return NULL;
+
+  if (!g_strcmp0 (focus_mode, Parameters_FOCUS_MODE_AUTO))
+    return android_hardware_camera_parameters.FOCUS_MODE_AUTO;
+  else if (!g_strcmp0 (focus_mode, Parameters_FOCUS_MODE_INFINITY))
+    return android_hardware_camera_parameters.FOCUS_MODE_INFINITY;
+  else if (!g_strcmp0 (focus_mode, Parameters_FOCUS_MODE_MACRO))
+    return android_hardware_camera_parameters.FOCUS_MODE_MACRO;
+  else if (!g_strcmp0 (focus_mode, Parameters_FOCUS_MODE_FIXED))
+    return android_hardware_camera_parameters.FOCUS_MODE_FIXED;
+  else if (!g_strcmp0 (focus_mode, Parameters_FOCUS_MODE_EDOF))
+    return android_hardware_camera_parameters.FOCUS_MODE_EDOF;
+  else if (!g_strcmp0 (focus_mode, Parameters_FOCUS_MODE_CONTINUOUS_VIDEO))
+    return android_hardware_camera_parameters.FOCUS_MODE_CONTINUOUS_VIDEO;
+  else if (!g_strcmp0 (focus_mode, Parameters_FOCUS_MODE_CONTINUOUS_PICTURE))
+    return android_hardware_camera_parameters.FOCUS_MODE_CONTINUOUS_PICTURE;
+
+  return NULL;
+}
+
+gchar *
+gst_ahc_parameters_flatten (GstAHCParameters * self)
+{
+  JNIEnv *env = gst_amc_jni_get_env ();
+  jstring v_str = NULL;
+  const gchar *v = NULL;
+  gchar *ret = NULL;
+
+  v_str = AHCP_CALL (goto done, Object, flatten);
+  v = (*env)->GetStringUTFChars (env, v_str, NULL);
+  if (!v) {
+    GST_ERROR ("Failed to convert string to UTF8");
+    (*env)->ExceptionClear (env);
+    goto done;
+  }
+
+  ret = g_strdup (v);
+done:
+  if (v)
+    (*env)->ReleaseStringUTFChars (env, v_str, v);
+  if (v_str)
+    (*env)->DeleteLocalRef (env, v_str);
+
+  return ret;
+}
+
+const gchar *
+gst_ahc_parameters_get_antibanding (GstAHCParameters * self)
+{
+  JNIEnv *env = gst_amc_jni_get_env ();
+  const gchar *ret = NULL;
+  jstring antibanding;
+
+  antibanding = AHCP_CALL (return NULL, Object, getAntibanding);
+
+  ret = _antibanding_to_gchar (env, antibanding);
+
+  if (antibanding)
+    (*env)->DeleteLocalRef (env, antibanding);
+
+  return ret;
+}
+
+const gchar *
+gst_ahc_parameters_get_color_effect (GstAHCParameters * self)
+{
+  JNIEnv *env = gst_amc_jni_get_env ();
+  const gchar *ret = NULL;
+  jstring color_effect;
+
+  color_effect = AHCP_CALL (return NULL, Object, getColorEffect);
+
+  ret = _color_effect_to_gchar (env, color_effect);
+
+  if (color_effect)
+    (*env)->DeleteLocalRef (env, color_effect);
+
+  return ret;
+}
+
+gint
+gst_ahc_parameters_get_exposure_compensation (GstAHCParameters * self)
+{
+  JNIEnv *env = gst_amc_jni_get_env ();
+  gint ev;
+
+  ev = AHCP_CALL (return -1, Int, getExposureCompensation);
+
+  return ev;
+}
+
+gfloat
+gst_ahc_parameters_get_exposure_compensation_step (GstAHCParameters * self)
+{
+  JNIEnv *env = gst_amc_jni_get_env ();
+  gfloat step;
+
+  step = AHCP_CALL (return 0.0, Float, getExposureCompensationStep);
+
+  return step;
+}
+
+const gchar *
+gst_ahc_parameters_get_flash_mode (GstAHCParameters * self)
+{
+  JNIEnv *env = gst_amc_jni_get_env ();
+  const gchar *ret = NULL;
+  jstring flash_mode;
+
+  flash_mode = AHCP_CALL (return NULL, Object, getFlashMode);
+
+  ret = _flash_mode_to_gchar (env, flash_mode);
+
+  if (flash_mode)
+    (*env)->DeleteLocalRef (env, flash_mode);
+
+  return ret;
+}
+
+gfloat
+gst_ahc_parameters_get_focal_length (GstAHCParameters * self)
+{
+  JNIEnv *env = gst_amc_jni_get_env ();
+  gfloat length;
+
+  length = AHCP_CALL (return 0.0, Float, getFocalLength);
+
+  return length;
+}
+
+const gchar *
+gst_ahc_parameters_get_focus_mode (GstAHCParameters * self)
+{
+  JNIEnv *env = gst_amc_jni_get_env ();
+  const gchar *ret = NULL;
+  jstring focus_mode;
+
+  focus_mode = AHCP_CALL (return NULL, Object, getFocusMode);
+
+  ret = _focus_mode_to_gchar (env, focus_mode);
+
+  if (focus_mode)
+    (*env)->DeleteLocalRef (env, focus_mode);
+
+  return ret;
+}
+
+gfloat
+gst_ahc_parameters_get_horizontal_view_angle (GstAHCParameters * self)
+{
+  JNIEnv *env = gst_amc_jni_get_env ();
+  gfloat angle;
+
+  angle = AHCP_CALL (return 0.0, Float, getHorizontalViewAngle);
+
+  return angle;
+}
+
+gint
+gst_ahc_parameters_get_max_exposure_compensation (GstAHCParameters * self)
+{
+  JNIEnv *env = gst_amc_jni_get_env ();
+  gint max;
+
+  max = AHCP_CALL (return 0, Int, getMaxExposureCompensation);
+
+  return max;
+}
+
+gint
+gst_ahc_parameters_get_max_zoom (GstAHCParameters * self)
+{
+  JNIEnv *env = gst_amc_jni_get_env ();
+  gint max;
+
+  max = AHCP_CALL (return -1, Int, getMaxZoom);
+
+  return max;
+}
+
+gint
+gst_ahc_parameters_get_min_exposure_compensation (GstAHCParameters * self)
+{
+  JNIEnv *env = gst_amc_jni_get_env ();
+  gint min;
+
+  min = AHCP_CALL (return 0, Int, getMinExposureCompensation);
+
+  return min;
+}
+
+gint
+gst_ahc_parameters_get_preview_format (GstAHCParameters * self)
+{
+  JNIEnv *env = gst_amc_jni_get_env ();
+  gint format;
+
+  format = AHCP_CALL (return 0, Int, getPreviewFormat);
+
+  return format;
+}
+
+gboolean
+gst_ahc_parameters_get_preview_fps_range (GstAHCParameters * self,
+    gint * min, gint * max)
+{
+  JNIEnv *env = gst_amc_jni_get_env ();
+  gboolean ret = FALSE;
+  jintArray range = NULL;
+  jint *fps = NULL;
+
+  range = (*env)->NewIntArray (env, 2);
+  if (!fps) {
+    (*env)->ExceptionClear (env);
+    GST_ERROR ("Failed to create array");
+    goto done;
+  }
+
+  AHCP_CALL (goto done, Void, getPreviewFpsRange, range);
+
+  fps = (*env)->GetIntArrayElements (env, range, NULL);
+  if ((*env)->ExceptionCheck (env) || !fps) {
+    (*env)->ExceptionClear (env);
+    GST_ERROR ("Failed to get array elements");
+    goto done;
+  }
+  if (min)
+    *min = fps[0];
+  if (max)
+    *max = fps[1];
+
+  ret = TRUE;
+done:
+  if (fps)
+    (*env)->ReleaseIntArrayElements (env, range, fps, JNI_ABORT);
+  if (range)
+    (*env)->DeleteLocalRef (env, range);
+
+  return ret;
+}
+
+GstAHCSize *
+gst_ahc_parameters_get_preview_size (GstAHCParameters * self)
+{
+  JNIEnv *env = gst_amc_jni_get_env ();
+  jobject jsize = NULL;
+  GstAHCSize *size = NULL;
+
+  jsize = AHCP_CALL (goto done, Object, getPreviewSize);
+
+  size = g_slice_new0 (GstAHCSize);
+
+  size->width = (*env)->GetIntField (env, jsize,
+      android_hardware_camera_size.width);
+  if ((*env)->ExceptionCheck (env)) {
+    GST_ERROR ("Failed to get Camera.Size.width field");
+    (*env)->ExceptionClear (env);
+    g_slice_free (GstAHCSize, size);
+    size = NULL;
+    goto done;
+  }
+
+  size->height = (*env)->GetIntField (env, jsize,
+      android_hardware_camera_size.height);
+  if ((*env)->ExceptionCheck (env)) {
+    GST_ERROR ("Failed to get Camera.Size.height field");
+    (*env)->ExceptionClear (env);
+    g_slice_free (GstAHCSize, size);
+    size = NULL;
+    goto done;
+  }
+
+done:
+  if (jsize)
+    (*env)->DeleteLocalRef (env, jsize);
+
+  return size;
+}
+
+const gchar *
+gst_ahc_parameters_get_scene_mode (GstAHCParameters * self)
+{
+  JNIEnv *env = gst_amc_jni_get_env ();
+  const gchar *ret = NULL;
+  jstring scene_mode;
+
+  scene_mode = AHCP_CALL (return NULL, Object, getSceneMode);
+
+  ret = _scene_mode_to_gchar (env, scene_mode);
+
+  if (scene_mode)
+    (*env)->DeleteLocalRef (env, scene_mode);
+
+  return ret;
+}
+
+GList *
+gst_ahc_parameters_get_supported_antibanding (GstAHCParameters * self)
+{
+  JNIEnv *env = gst_amc_jni_get_env ();
+  jobject list = NULL;
+  GList *ret = NULL;
+
+  list = AHCP_CALL (return NULL, Object, getSupportedAntibanding);
+
+  if (list) {
+    jobject iterator = NULL;
+
+    iterator = java_util_list_iterator (env, list);
+    if (iterator) {
+      while (java_util_iterator_has_next (env, iterator)) {
+        jobject str = java_util_iterator_next (env, iterator);
+
+        if (str) {
+          const gchar *value = _antibanding_to_gchar (env, str);
+
+          ret = g_list_append (ret, (gchar *) value);
+          (*env)->DeleteLocalRef (env, str);
+        }
+      }
+      (*env)->DeleteLocalRef (env, iterator);
+    }
+    (*env)->DeleteLocalRef (env, list);
+  }
+
+  return ret;
+}
+
+void
+gst_ahc_parameters_supported_antibanding_free (GList * list)
+{
+  g_list_free (list);
+}
+
+GList *
+gst_ahc_parameters_get_supported_color_effects (GstAHCParameters * self)
+{
+  JNIEnv *env = gst_amc_jni_get_env ();
+  jobject list = NULL;
+  GList *ret = NULL;
+
+  list = AHCP_CALL (return NULL, Object, getSupportedColorEffects);
+
+  if (list) {
+    jobject iterator = NULL;
+
+    iterator = java_util_list_iterator (env, list);
+    if (iterator) {
+      while (java_util_iterator_has_next (env, iterator)) {
+        jobject str = java_util_iterator_next (env, iterator);
+
+        if (str) {
+          const gchar *value = _color_effect_to_gchar (env, str);
+
+          ret = g_list_append (ret, (gchar *) value);
+          (*env)->DeleteLocalRef (env, str);
+        }
+      }
+      (*env)->DeleteLocalRef (env, iterator);
+    }
+    (*env)->DeleteLocalRef (env, list);
+  }
+
+  return ret;
+}
+
+void
+gst_ahc_parameters_supported_color_effects_free (GList * list)
+{
+  g_list_free (list);
+}
+
+GList *
+gst_ahc_parameters_get_supported_flash_modes (GstAHCParameters * self)
+{
+  JNIEnv *env = gst_amc_jni_get_env ();
+  jobject list = NULL;
+  GList *ret = NULL;
+
+  list = AHCP_CALL (return NULL, Object, getSupportedFlashModes);
+
+  if (list) {
+    jobject iterator = NULL;
+
+    iterator = java_util_list_iterator (env, list);
+    if (iterator) {
+      while (java_util_iterator_has_next (env, iterator)) {
+        jobject str = java_util_iterator_next (env, iterator);
+
+        if (str) {
+          const gchar *value = _flash_mode_to_gchar (env, str);
+
+          ret = g_list_append (ret, (gchar *) value);
+          (*env)->DeleteLocalRef (env, str);
+        }
+      }
+      (*env)->DeleteLocalRef (env, iterator);
+    }
+    (*env)->DeleteLocalRef (env, list);
+  }
+
+  return ret;
+}
+
+void
+gst_ahc_parameters_supported_flash_modes_free (GList * list)
+{
+  g_list_free (list);
+}
+
+GList *
+gst_ahc_parameters_get_supported_focus_modes (GstAHCParameters * self)
+{
+  JNIEnv *env = gst_amc_jni_get_env ();
+  jobject list = NULL;
+  GList *ret = NULL;
+
+  list = AHCP_CALL (return NULL, Object, getSupportedFocusModes);
+
+  if (list) {
+    jobject iterator = NULL;
+
+    iterator = java_util_list_iterator (env, list);
+    if (iterator) {
+      while (java_util_iterator_has_next (env, iterator)) {
+        jobject str = java_util_iterator_next (env, iterator);
+
+        if (str) {
+          const gchar *value = _focus_mode_to_gchar (env, str);
+
+          ret = g_list_append (ret, (gchar *) value);
+          (*env)->DeleteLocalRef (env, str);
+        }
+      }
+      (*env)->DeleteLocalRef (env, iterator);
+    }
+    (*env)->DeleteLocalRef (env, list);
+  }
+
+  return ret;
+}
+
+void
+gst_ahc_parameters_supported_focus_modes_free (GList * list)
+{
+  g_list_free (list);
+}
+
+GList *
+gst_ahc_parameters_get_supported_preview_formats (GstAHCParameters * self)
+{
+  JNIEnv *env = gst_amc_jni_get_env ();
+  jobject list = NULL;
+  GList *ret = NULL;
+
+  list = AHCP_CALL (return NULL, Object, getSupportedPreviewFormats);
+
+  if (list) {
+    jobject iterator = NULL;
+
+    iterator = java_util_list_iterator (env, list);
+    if (iterator) {
+      while (java_util_iterator_has_next (env, iterator)) {
+        jobject integer = java_util_iterator_next (env, iterator);
+
+        if (integer) {
+          jint value = java_lang_integer_int_value (env, integer);
+
+          ret = g_list_append (ret, GINT_TO_POINTER (value));
+          (*env)->DeleteLocalRef (env, integer);
+        }
+      }
+      (*env)->DeleteLocalRef (env, iterator);
+    }
+    (*env)->DeleteLocalRef (env, list);
+  }
+
+  return ret;
+}
+
+void
+gst_ahc_parameters_supported_preview_formats_free (GList * list)
+{
+  g_list_free (list);
+}
+
+GList *
+gst_ahc_parameters_get_supported_preview_fps_range (GstAHCParameters * self)
+{
+  JNIEnv *env = gst_amc_jni_get_env ();
+  jobject list = NULL;
+  GList *ret = NULL;
+
+  list = AHCP_CALL (return NULL, Object, getSupportedPreviewFpsRange);
+
+  if (list) {
+    jobject iterator = NULL;
+
+    iterator = java_util_list_iterator (env, list);
+    if (iterator) {
+      while (java_util_iterator_has_next (env, iterator)) {
+        jintArray range = java_util_iterator_next (env, iterator);
+
+        if (range) {
+          jint *fps = g_new (jint, 2);
+
+          (*env)->GetIntArrayRegion (env, range, 0, 2, fps);
+          ret = g_list_append (ret, fps);
+          (*env)->DeleteLocalRef (env, range);
+        }
+      }
+      (*env)->DeleteLocalRef (env, iterator);
+    }
+    (*env)->DeleteLocalRef (env, list);
+  }
+
+  return ret;
+}
+
+void
+gst_ahc_parameters_supported_preview_fps_range_free (GList * list)
+{
+  g_list_foreach (list, (GFunc) g_free, NULL);
+  g_list_free (list);
+}
+
+GList *
+gst_ahc_parameters_get_supported_preview_sizes (GstAHCParameters * self)
+{
+  JNIEnv *env = gst_amc_jni_get_env ();
+  jobject list = NULL;
+  GList *ret = NULL;
+
+  list = AHCP_CALL (return NULL, Object, getSupportedPreviewSizes);
+
+  if (list) {
+    jobject iterator = NULL;
+
+    iterator = java_util_list_iterator (env, list);
+    if (iterator) {
+      while (java_util_iterator_has_next (env, iterator)) {
+        jobject jsize = java_util_iterator_next (env, iterator);
+
+        if (jsize) {
+          jint width, height;
+
+          width = (*env)->GetIntField (env, jsize,
+              android_hardware_camera_size.width);
+          height = (*env)->GetIntField (env, jsize,
+              android_hardware_camera_size.height);
+
+          ret = g_list_append (ret, gst_ahc_size_new (width, height));
+          (*env)->DeleteLocalRef (env, jsize);
+        }
+      }
+      (*env)->DeleteLocalRef (env, iterator);
+    }
+    (*env)->DeleteLocalRef (env, list);
+  }
+
+  return ret;
+}
+
+void
+gst_ahc_parameters_supported_preview_sizes_free (GList * list)
+{
+  g_list_foreach (list, (GFunc) gst_ahc_size_free, NULL);
+  g_list_free (list);
+}
+
+GList *
+gst_ahc_parameters_get_supported_scene_modes (GstAHCParameters * self)
+{
+  JNIEnv *env = gst_amc_jni_get_env ();
+  jobject list = NULL;
+  GList *ret = NULL;
+
+  list = AHCP_CALL (return NULL, Object, getSupportedSceneModes);
+
+  if (list) {
+    jobject iterator = NULL;
+
+    iterator = java_util_list_iterator (env, list);
+    if (iterator) {
+      while (java_util_iterator_has_next (env, iterator)) {
+        jobject str = java_util_iterator_next (env, iterator);
+
+        if (str) {
+          const gchar *value = _scene_mode_to_gchar (env, str);
+
+          ret = g_list_append (ret, (gchar *) value);
+          (*env)->DeleteLocalRef (env, str);
+        }
+      }
+      (*env)->DeleteLocalRef (env, iterator);
+    }
+    (*env)->DeleteLocalRef (env, list);
+  }
+
+  return ret;
+}
+
+void
+gst_ahc_parameters_supported_scene_modes_free (GList * list)
+{
+  g_list_free (list);
+}
+
+GList *
+gst_ahc_parameters_get_supported_white_balance (GstAHCParameters * self)
+{
+  JNIEnv *env = gst_amc_jni_get_env ();
+  jobject list = NULL;
+  GList *ret = NULL;
+
+  list = AHCP_CALL (return NULL, Object, getSupportedWhiteBalance);
+
+  if (list) {
+    jobject iterator = NULL;
+
+    iterator = java_util_list_iterator (env, list);
+    if (iterator) {
+      while (java_util_iterator_has_next (env, iterator)) {
+        jobject str = java_util_iterator_next (env, iterator);
+
+        if (str) {
+          const gchar *value = _white_balance_to_gchar (env, str);
+
+          ret = g_list_append (ret, (gchar *) value);
+          (*env)->DeleteLocalRef (env, str);
+        }
+      }
+      (*env)->DeleteLocalRef (env, iterator);
+    }
+    (*env)->DeleteLocalRef (env, list);
+  }
+
+  return ret;
+}
+
+void
+gst_ahc_parameters_supported_white_balance_free (GList * list)
+{
+  g_list_free (list);
+}
+
+gfloat
+gst_ahc_parameters_get_vertical_view_angle (GstAHCParameters * self)
+{
+  JNIEnv *env = gst_amc_jni_get_env ();
+  gfloat angle;
+
+  angle = AHCP_CALL (return 0.0, Float, getVerticalViewAngle);
+
+  return angle;
+}
+
+gboolean
+gst_ahc_parameters_get_video_stabilization (GstAHCParameters * self)
+{
+  JNIEnv *env = gst_amc_jni_get_env ();
+  gboolean ret;
+
+  ret = AHCP_CALL (return FALSE, Boolean, getVideoStabilization);
+
+  return ret;
+}
+
+const gchar *
+gst_ahc_parameters_get_white_balance (GstAHCParameters * self)
+{
+  JNIEnv *env = gst_amc_jni_get_env ();
+  const gchar *ret = NULL;
+  jstring white_balance;
+
+  white_balance = AHCP_CALL (return NULL, Object, getWhiteBalance);
+
+  ret = _white_balance_to_gchar (env, white_balance);
+
+  if (white_balance)
+    (*env)->DeleteLocalRef (env, white_balance);
+
+  return ret;
+}
+
+gint
+gst_ahc_parameters_get_zoom (GstAHCParameters * self)
+{
+  JNIEnv *env = gst_amc_jni_get_env ();
+  gint zoom;
+
+  zoom = AHCP_CALL (return -1, Int, getZoom);
+
+  return zoom;
+}
+
+GList *
+gst_ahc_parameters_get_zoom_ratios (GstAHCParameters * self)
+{
+  JNIEnv *env = gst_amc_jni_get_env ();
+  jobject list = NULL;
+  GList *ret = NULL;
+
+  list = AHCP_CALL (return NULL, Object, getZoomRatios);
+
+  if (list) {
+    jobject iterator = NULL;
+
+    iterator = java_util_list_iterator (env, list);
+    if (iterator) {
+      while (java_util_iterator_has_next (env, iterator)) {
+        jobject integer = java_util_iterator_next (env, iterator);
+
+        if (integer) {
+          jint value = java_lang_integer_int_value (env, integer);
+
+          ret = g_list_append (ret, GINT_TO_POINTER (value));
+          (*env)->DeleteLocalRef (env, integer);
+        }
+      }
+      (*env)->DeleteLocalRef (env, iterator);
+    }
+    (*env)->DeleteLocalRef (env, list);
+  }
+
+  return ret;
+}
+
+void
+gst_ahc_parameters_zoom_ratios_free (GList * list)
+{
+  g_list_free (list);
+}
+
+gboolean
+gst_ahc_parameters_is_smooth_zoom_supported (GstAHCParameters * self)
+{
+  JNIEnv *env = gst_amc_jni_get_env ();
+  gboolean supported;
+
+  supported = AHCP_CALL (return FALSE, Boolean, isSmoothZoomSupported);
+
+  return supported;
+}
+
+gboolean
+gst_ahc_parameters_is_video_stabilization_supported (GstAHCParameters * self)
+{
+  JNIEnv *env = gst_amc_jni_get_env ();
+  gboolean supported;
+
+  supported = AHCP_CALL (return FALSE, Boolean, isVideoStabilizationSupported);
+
+  return supported;
+}
+
+gboolean
+gst_ahc_parameters_is_zoom_supported (GstAHCParameters * self)
+{
+  JNIEnv *env = gst_amc_jni_get_env ();
+  gboolean supported;
+
+  supported = AHCP_CALL (return FALSE, Boolean, isZoomSupported);
+
+  return supported;
+}
+
+gboolean
+gst_ahc_parameters_set_antibanding (GstAHCParameters * self,
+    const gchar * value)
+{
+  JNIEnv *env = gst_amc_jni_get_env ();
+  jstring antibanding;
+
+  antibanding = _antibanding_to_jstring (value);
+  if (!antibanding)
+    return FALSE;
+
+  AHCP_CALL (return FALSE, Void, setAntibanding, antibanding);
+
+  return TRUE;
+}
+
+gboolean
+gst_ahc_parameters_set_color_effect (GstAHCParameters * self,
+    const gchar * value)
+{
+  JNIEnv *env = gst_amc_jni_get_env ();
+  jstring color_effect;
+
+  color_effect = _color_effect_to_jstring (value);
+  if (!color_effect)
+    return FALSE;
+
+  AHCP_CALL (return FALSE, Void, setColorEffect, color_effect);
+
+  return TRUE;
+}
+
+gboolean
+gst_ahc_parameters_set_exposure_compensation (GstAHCParameters * self,
+    gint value)
+{
+  JNIEnv *env = gst_amc_jni_get_env ();
+
+  AHCP_CALL (return FALSE, Void, setExposureCompensation, value);
+
+  return TRUE;
+}
+
+gboolean
+gst_ahc_parameters_set_flash_mode (GstAHCParameters * self, const gchar * value)
+{
+  JNIEnv *env = gst_amc_jni_get_env ();
+  jstring flash_mode;
+
+  flash_mode = _flash_mode_to_jstring (value);
+  if (!flash_mode)
+    return FALSE;
+
+  AHCP_CALL (return FALSE, Void, setFlashMode, flash_mode);
+
+  return TRUE;
+}
+
+gboolean
+gst_ahc_parameters_set_focus_mode (GstAHCParameters * self, const gchar * value)
+{
+  JNIEnv *env = gst_amc_jni_get_env ();
+  jstring focus_mode;
+
+  focus_mode = _focus_mode_to_jstring (value);
+  if (!focus_mode)
+    return FALSE;
+
+  AHCP_CALL (return FALSE, Void, setFocusMode, focus_mode);
+
+  return TRUE;
+}
+
+gboolean
+gst_ahc_parameters_set_preview_format (GstAHCParameters * self, gint format)
+{
+  JNIEnv *env = gst_amc_jni_get_env ();
+
+  AHCP_CALL (return FALSE, Void, setPreviewFormat, format);
+
+  return TRUE;
+}
+
+gboolean
+gst_ahc_parameters_set_preview_fps_range (GstAHCParameters * self,
+    gint min, gint max)
+{
+  JNIEnv *env = gst_amc_jni_get_env ();
+
+  AHCP_CALL (return FALSE, Void, setPreviewFpsRange, min, max);
+
+  return TRUE;
+}
+
+gboolean
+gst_ahc_parameters_set_preview_size (GstAHCParameters * self,
+    gint width, gint height)
+{
+  JNIEnv *env = gst_amc_jni_get_env ();
+
+  AHCP_CALL (return FALSE, Void, setPreviewSize, width, height);
+
+  return TRUE;
+}
+
+gboolean
+gst_ahc_parameters_set_scene_mode (GstAHCParameters * self, const gchar * value)
+{
+  JNIEnv *env = gst_amc_jni_get_env ();
+  jstring scene_mode;
+
+  scene_mode = _scene_mode_to_jstring (value);
+  if (!scene_mode)
+    return FALSE;
+
+  AHCP_CALL (return FALSE, Void, setSceneMode, scene_mode);
+
+  return TRUE;
+}
+
+
+gboolean
+gst_ahc_parameters_set_video_stabilization (GstAHCParameters * self,
+    gboolean toggle)
+{
+  JNIEnv *env = gst_amc_jni_get_env ();
+
+  AHCP_CALL (return FALSE, Void, setVideoStabilization, toggle);
+
+  return TRUE;
+}
+
+gboolean
+gst_ahc_parameters_set_white_balance (GstAHCParameters * self,
+    const gchar * value)
+{
+  JNIEnv *env = gst_amc_jni_get_env ();
+  jstring white_balance;
+
+  white_balance = _white_balance_to_jstring (value);
+  if (!white_balance)
+    return FALSE;
+
+  AHCP_CALL (return FALSE, Void, setWhiteBalance, white_balance);
+
+  return TRUE;
+}
+
+gboolean
+gst_ahc_parameters_set_zoom (GstAHCParameters * self, gint value)
+{
+  JNIEnv *env = gst_amc_jni_get_env ();
+
+  AHCP_CALL (return FALSE, Void, setZoom, value);
+
+  return TRUE;
+}
+
+gboolean
+gst_ahc_parameters_unflatten (GstAHCParameters * self, const gchar * flattened)
+{
+  JNIEnv *env = gst_amc_jni_get_env ();
+  jstring v_str = NULL;
+  gboolean ret = TRUE;
+
+  v_str = (*env)->NewStringUTF (env, flattened);
+  if (v_str == NULL)
+    return FALSE;
+
+  AHCP_CALL (ret = FALSE, Void, unflatten, v_str);
+
+  (*env)->DeleteLocalRef (env, v_str);
+
+  return ret;
+}
+
+void
+gst_ahc_parameters_free (GstAHCParameters * self)
+{
+  JNIEnv *env = gst_amc_jni_get_env ();
+
+  g_return_if_fail (self != NULL);
+  g_return_if_fail (self->object != NULL);
+
+  GST_DEBUG ("freeing parameters %p", self->object);
+
+  (*env)->DeleteGlobalRef (env, self->object);
+  g_slice_free (GstAHCParameters, self);
+}
diff --git a/sys/androidmedia/gst-android-hardware-camera.h b/sys/androidmedia/gst-android-hardware-camera.h
new file mode 100644
index 0000000..44e7842
--- /dev/null
+++ b/sys/androidmedia/gst-android-hardware-camera.h
@@ -0,0 +1,252 @@
+/*
+ * Copyright (C) 2012, Collabora Ltd.
+ * Copyright (C) 2012, Cisco Systems, Inc.
+ *   Author: Youness Alaoui <youness.alaoui@collabora.co.uk>
+ *
+ * Copyright (C) 2015, Collabora Ltd.
+ *   Author: Justin Kim <justin.kim@collabora.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation
+ * version 2.1 of the License.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301 USA
+ *
+ */
+
+#ifndef __GST_ANDROID_HARDWARE_CAMERA_H__
+#define __GST_ANDROID_HARDWARE_CAMERA_H__
+
+#include <gst/gst.h>
+#include <jni.h>
+
+#include "gst-android-graphics-surfacetexture.h"
+#include "gst-android-graphics-imageformat.h"
+
+G_BEGIN_DECLS
+
+typedef struct _GstAHCamera GstAHCamera;
+typedef struct _GstAHCCameraInfo GstAHCCameraInfo;
+typedef struct _GstAHCSize GstAHCSize;
+typedef struct _GstAHCParameters GstAHCParameters;
+
+/* android.hardware.Camera */
+struct _GstAHCamera
+{
+  /* < private > */
+  jobject object;               /* global reference */
+};
+
+/* android.hardware.Camera.CameraInfo */
+struct _GstAHCCameraInfo
+{
+  gint facing;
+  gint orientation;
+};
+extern gint CameraInfo_CAMERA_FACING_BACK;
+extern gint CameraInfo_CAMERA_FACING_FRONT;
+
+/* android.hardware.Camera.Size */
+struct _GstAHCSize
+{
+  gint width;
+  gint height;
+};
+
+/* android.hardware.Camera.Parameters */
+struct _GstAHCParameters
+{
+  /* < private > */
+  jobject object;               /* global reference */
+};
+extern const gchar *Parameters_WHITE_BALANCE_AUTO;
+extern const gchar *Parameters_WHITE_BALANCE_INCANDESCENT;
+extern const gchar *Parameters_WHITE_BALANCE_FLUORESCENT;
+extern const gchar *Parameters_WHITE_BALANCE_WARM_FLUORESCENT;
+extern const gchar *Parameters_WHITE_BALANCE_DAYLIGHT;
+extern const gchar *Parameters_WHITE_BALANCE_CLOUDY_DAYLIGHT;
+extern const gchar *Parameters_WHITE_BALANCE_TWILIGHT;
+extern const gchar *Parameters_WHITE_BALANCE_SHADE;
+extern const gchar *Parameters_EFFECT_NONE;
+extern const gchar *Parameters_EFFECT_MONO;
+extern const gchar *Parameters_EFFECT_NEGATIVE;
+extern const gchar *Parameters_EFFECT_SOLARIZE;
+extern const gchar *Parameters_EFFECT_SEPIA;
+extern const gchar *Parameters_EFFECT_POSTERIZE;
+extern const gchar *Parameters_EFFECT_WHITEBOARD;
+extern const gchar *Parameters_EFFECT_BLACKBOARD;
+extern const gchar *Parameters_EFFECT_AQUA;
+extern const gchar *Parameters_ANTIBANDING_AUTO;
+extern const gchar *Parameters_ANTIBANDING_50HZ;
+extern const gchar *Parameters_ANTIBANDING_60HZ;
+extern const gchar *Parameters_ANTIBANDING_OFF;
+extern const gchar *Parameters_FLASH_MODE_OFF;
+extern const gchar *Parameters_FLASH_MODE_AUTO;
+extern const gchar *Parameters_FLASH_MODE_ON;
+extern const gchar *Parameters_FLASH_MODE_RED_EYE;
+extern const gchar *Parameters_FLASH_MODE_TORCH;
+extern const gchar *Parameters_SCENE_MODE_AUTO;
+extern const gchar *Parameters_SCENE_MODE_ACTION;
+extern const gchar *Parameters_SCENE_MODE_PORTRAIT;
+extern const gchar *Parameters_SCENE_MODE_LANDSCAPE;
+extern const gchar *Parameters_SCENE_MODE_NIGHT;
+extern const gchar *Parameters_SCENE_MODE_NIGHT_PORTRAIT;
+extern const gchar *Parameters_SCENE_MODE_THEATRE;
+extern const gchar *Parameters_SCENE_MODE_BEACH;
+extern const gchar *Parameters_SCENE_MODE_SNOW;
+extern const gchar *Parameters_SCENE_MODE_SUNSET;
+extern const gchar *Parameters_SCENE_MODE_STEADYPHOTO;
+extern const gchar *Parameters_SCENE_MODE_FIREWORKS;
+extern const gchar *Parameters_SCENE_MODE_SPORTS;
+extern const gchar *Parameters_SCENE_MODE_PARTY;
+extern const gchar *Parameters_SCENE_MODE_CANDLELIGHT;
+extern const gchar *Parameters_SCENE_MODE_BARCODE;
+extern const gchar *Parameters_FOCUS_MODE_AUTO;
+extern const gchar *Parameters_FOCUS_MODE_INFINITY;
+extern const gchar *Parameters_FOCUS_MODE_MACRO;
+extern const gchar *Parameters_FOCUS_MODE_FIXED;
+extern const gchar *Parameters_FOCUS_MODE_EDOF;
+extern const gchar *Parameters_FOCUS_MODE_CONTINUOUS_VIDEO;
+extern const gchar *Parameters_FOCUS_MODE_CONTINUOUS_PICTURE;
+
+/* android.hardware.Camera.ErrorCallback */
+typedef void (*GstAHCErrorCallback) (gint error, gpointer user_data);
+
+/* android.hardware.Camera.PreviewCallback */
+typedef void (*GstAHCPreviewCallback) (jbyteArray data, gpointer user_data);
+
+/* android.hardware.Camera.AutoFocusCallback */
+typedef void (*GstAHCAutoFocusCallback) (gboolean success, gpointer user_data);
+
+gboolean gst_android_hardware_camera_init (void);
+void gst_android_hardware_camera_deinit (void);
+
+/* android.hardware.Camera */
+void gst_ah_camera_add_callback_buffer (GstAHCamera * self, jbyteArray buffer);
+gboolean gst_ah_camera_auto_focus (GstAHCamera * self,
+    GstAHCAutoFocusCallback cb, gpointer user_data);
+gboolean gst_ah_camera_cancel_auto_focus (GstAHCamera * self);
+gboolean gst_ah_camera_get_camera_info (gint camera_id,
+    GstAHCCameraInfo * camera_info);
+gint gst_ah_camera_get_number_of_cameras (void);
+GstAHCParameters *gst_ah_camera_get_parameters (GstAHCamera * self);
+gboolean gst_ah_camera_lock (GstAHCamera * self);
+GstAHCamera *gst_ah_camera_open (gint camera_id);
+gboolean gst_ah_camera_reconnect (GstAHCamera * self);
+void gst_ah_camera_release (GstAHCamera * self);
+void gst_ah_camera_free (GstAHCamera * self);
+gboolean gst_ah_camera_set_parameters (GstAHCamera * self,
+    GstAHCParameters * params);
+gboolean gst_ah_camera_set_error_callback (GstAHCamera * self,
+    GstAHCErrorCallback cb, gpointer user_data);
+gboolean gst_ah_camera_set_preview_callback_with_buffer (GstAHCamera * self,
+    GstAHCPreviewCallback cb, gpointer user_data);
+void gst_ah_camera_set_preview_texture (GstAHCamera * self,
+    GstAGSurfaceTexture * surfaceTexture);
+gboolean gst_ah_camera_start_preview (GstAHCamera * self);
+gboolean gst_ah_camera_start_smooth_zoom (GstAHCamera * self, gint value);
+gboolean gst_ah_camera_stop_preview (GstAHCamera * self);
+gboolean gst_ah_camera_stop_smooth_zoom (GstAHCamera * self);
+gboolean gst_ah_camera_unlock (GstAHCamera * self);
+
+/* android.hardware.Camera.Size */
+GstAHCSize *gst_ahc_size_new (gint width, gint height);
+void gst_ahc_size_free (GstAHCSize * self);
+
+/* android.hardware.Camera.Parameters */
+gchar *gst_ahc_parameters_flatten (GstAHCParameters * self);
+const gchar *gst_ahc_parameters_get_antibanding (GstAHCParameters * self);
+const gchar *gst_ahc_parameters_get_color_effect (GstAHCParameters * self);
+gint gst_ahc_parameters_get_exposure_compensation (GstAHCParameters * self);
+gfloat gst_ahc_parameters_get_exposure_compensation_step (GstAHCParameters
+    * self);
+const gchar *gst_ahc_parameters_get_flash_mode (GstAHCParameters * self);
+gfloat gst_ahc_parameters_get_focal_length (GstAHCParameters * self);
+const gchar *gst_ahc_parameters_get_focus_mode (GstAHCParameters * self);
+gfloat gst_ahc_parameters_get_horizontal_view_angle (GstAHCParameters * self);
+gint gst_ahc_parameters_get_max_exposure_compensation (GstAHCParameters * self);
+gint gst_ahc_parameters_get_max_zoom (GstAHCParameters * self);
+gint gst_ahc_parameters_get_min_exposure_compensation (GstAHCParameters * self);
+gint gst_ahc_parameters_get_preview_format (GstAHCParameters * self);
+gboolean gst_ahc_parameters_get_preview_fps_range (GstAHCParameters * self,
+    gint * min, gint * max);
+GstAHCSize *gst_ahc_parameters_get_preview_size (GstAHCParameters * self);
+const gchar *gst_ahc_parameters_get_scene_mode (GstAHCParameters * self);
+/* GList <const gchar *> */
+GList *gst_ahc_parameters_get_supported_antibanding (GstAHCParameters * self);
+void gst_ahc_parameters_supported_antibanding_free (GList * list);
+/* GList <const gchar *> */
+GList *gst_ahc_parameters_get_supported_color_effects (GstAHCParameters * self);
+void gst_ahc_parameters_supported_color_effects_free (GList * list);
+/* GList <const gchar *> */
+GList *gst_ahc_parameters_get_supported_flash_modes (GstAHCParameters * self);
+void gst_ahc_parameters_supported_flash_modes_free (GList * list);
+/* GList <const gchar *> */
+GList *gst_ahc_parameters_get_supported_focus_modes (GstAHCParameters * self);
+void gst_ahc_parameters_supported_focus_modes_free (GList * list);
+/* GList <int> */
+GList *gst_ahc_parameters_get_supported_preview_formats (GstAHCParameters
+    * self);
+void gst_ahc_parameters_supported_preview_formats_free (GList * list);
+/* GList <int [2]> */
+GList *gst_ahc_parameters_get_supported_preview_fps_range (GstAHCParameters
+    * self);
+void gst_ahc_parameters_supported_preview_fps_range_free (GList * list);
+/* GList <GstAHCSize *> */
+GList *gst_ahc_parameters_get_supported_preview_sizes (GstAHCParameters * self);
+void gst_ahc_parameters_supported_preview_sizes_free (GList * list);
+/* GList <const gchar *> */
+GList *gst_ahc_parameters_get_supported_scene_modes (GstAHCParameters * self);
+void gst_ahc_parameters_supported_scene_modes_free (GList * list);
+/* GList <const gchar *> */
+GList *gst_ahc_parameters_get_supported_white_balance (GstAHCParameters * self);
+void gst_ahc_parameters_supported_white_balance_free (GList * list);
+gfloat gst_ahc_parameters_get_vertical_view_angle (GstAHCParameters * self);
+gboolean gst_ahc_parameters_get_video_stabilization (GstAHCParameters * self);
+const gchar *gst_ahc_parameters_get_white_balance (GstAHCParameters * self);
+gint gst_ahc_parameters_get_zoom (GstAHCParameters * self);
+/* GList <int> */
+GList *gst_ahc_parameters_get_zoom_ratios (GstAHCParameters * self);
+void gst_ahc_parameters_zoom_ratios_free (GList * list);
+gboolean gst_ahc_parameters_is_smooth_zoom_supported (GstAHCParameters * self);
+gboolean gst_ahc_parameters_is_video_stabilization_supported (
+    GstAHCParameters * self);
+gboolean gst_ahc_parameters_is_zoom_supported (GstAHCParameters * self);
+gboolean gst_ahc_parameters_set_antibanding (GstAHCParameters * self,
+    const gchar * antibanding);
+gboolean gst_ahc_parameters_set_color_effect (GstAHCParameters * self,
+    const gchar * value);
+gboolean gst_ahc_parameters_set_exposure_compensation (GstAHCParameters * self,
+    gint value);
+gboolean gst_ahc_parameters_set_flash_mode (GstAHCParameters * self,
+    const gchar * value);
+gboolean gst_ahc_parameters_set_focus_mode (GstAHCParameters * self,
+    const gchar * value);
+gboolean gst_ahc_parameters_set_preview_format (GstAHCParameters * self,
+    gint format);
+gboolean gst_ahc_parameters_set_preview_fps_range (GstAHCParameters * self,
+    gint min, gint max);
+gboolean gst_ahc_parameters_set_preview_size (GstAHCParameters * self,
+    gint width, gint height);
+gboolean gst_ahc_parameters_set_scene_mode (GstAHCParameters * self,
+    const gchar * value);
+gboolean gst_ahc_parameters_set_white_balance (GstAHCParameters * self,
+    const gchar * value);
+gboolean gst_ahc_parameters_set_video_stabilization (GstAHCParameters * self,
+    gboolean toggle);
+gboolean gst_ahc_parameters_set_zoom (GstAHCParameters * self, gint value);
+gboolean gst_ahc_parameters_unflatten (GstAHCParameters * self,
+    const gchar * flattened);
+void gst_ahc_parameters_free (GstAHCParameters * self);
+
+G_END_DECLS
+
+#endif /* __GST_ANDROID_HARDWARE_CAMERA_H__ */
diff --git a/sys/androidmedia/gstahcsrc.c b/sys/androidmedia/gstahcsrc.c
new file mode 100644
index 0000000..5b7d276
--- /dev/null
+++ b/sys/androidmedia/gstahcsrc.c
@@ -0,0 +1,2513 @@
+/* GStreamer android.hardware.Camera Source
+ *
+ * Copyright (C) 2012, Cisco Systems, Inc.
+ *   Author: Youness Alaoui <youness.alaoui@collabora.co.uk>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+/**
+ * SECTION:element-ahcsrc
+ *
+ * ahcsrc can be used to capture video from android devices. It uses the
+ * android.hardware.Camera Java API to capture from the system's cameras.
+ *
+ * In order for the plugin to get registered, it must be able to find its
+ * Java callbacks class. That class is embedded as a jar file inside the source
+ * element (if properly compiled) and will be written to a temporary directory
+ * so it can be loaded into the virtual machine.
+ * In order for it to work, an environment variable must be set to a writable
+ * directory.
+ * The source will look for the environment variable “TMP” which must contain
+ * the absolute path to a writable directory.
+ * It can be retreived using the following Java code :
+ * |[
+ *   context.getCacheDir().getAbsolutePath();
+ * ]|
+ * Where the @context variable is an object of type android.content.Context
+ * (including its subclasses android.app.Activity or android.app.Application).
+ * Another optional environment variable can be set for pointing to the
+ * optimized dex classes directory. If the environment variable “DEX” is
+ * available, it will be used, otherwise, the directory in the “TMP” environment
+ * variable will be used for the optimized dex directory.
+ * The system dex directory can be obtained using the following Java code :
+ * |[
+ *   context.getDir(“dex”, 0).getAbsolutePath();
+ * ]|
+ *
+ * <note>
+ * Those environment variable must be set before gst_init is called from
+ * the native code.
+ * </note>
+ *
+ * <note>
+ * If the “TMP” environment variable is not available or the directory is not
+ * writable or any other issue happens while trying to load the embedded jar
+ * file, then the source will fallback on trying to load the class directly
+ * from the running application.
+ * The file com/gstreamer/GstAhcCallback.java in the source's directory can be
+ * copied into the Android application so it can be loaded at runtime
+ * as a fallback mechanism.
+ * </note>
+ *
+ */
+
+#ifdef HAVE_CONFIG_H
+#  include "config.h"
+#endif
+
+#include <gst/video/video.h>
+#include <gst/interfaces/photography.h>
+
+#include "gstjniutils.h"
+
+#include "gstahcsrc.h"
+
+/* GObject */
+static void gst_ahc_src_set_property (GObject * object, guint prop_id,
+    const GValue * value, GParamSpec * pspec);
+static void gst_ahc_src_get_property (GObject * object, guint prop_id,
+    GValue * value, GParamSpec * pspec);
+static void gst_ahc_src_dispose (GObject * object);
+
+/* GstElement */
+static GstStateChangeReturn gst_ahc_src_change_state (GstElement * element,
+    GstStateChange transition);
+
+/* GstBaseSrc */
+static GstCaps *gst_ahc_src_getcaps (GstBaseSrc * src, GstCaps * filter);
+static gboolean gst_ahc_src_setcaps (GstBaseSrc * src, GstCaps * caps);
+static GstCaps *gst_ahc_src_fixate (GstBaseSrc * basesrc, GstCaps * caps);
+static gboolean gst_ahc_src_start (GstBaseSrc * bsrc);
+static gboolean gst_ahc_src_stop (GstBaseSrc * bsrc);
+static gboolean gst_ahc_src_unlock (GstBaseSrc * bsrc);
+static gboolean gst_ahc_src_unlock_stop (GstBaseSrc * bsrc);
+static GstFlowReturn gst_ahc_src_create (GstPushSrc * src, GstBuffer ** buffer);
+static gboolean gst_ahc_src_query (GstBaseSrc * bsrc, GstQuery * query);
+
+/* GstPhotography  */
+static void gst_ahc_src_photography_init (gpointer g_iface,
+    gpointer iface_data);
+static gboolean gst_ahc_src_get_ev_compensation (GstPhotography * photo,
+    gfloat * ev_comp);
+static gboolean _white_balance_to_enum (const gchar * white_balance,
+    GstPhotographyWhiteBalanceMode * mode);
+static gboolean gst_ahc_src_get_white_balance_mode (GstPhotography * photo,
+    GstPhotographyWhiteBalanceMode * wb_mode);
+static gboolean _color_effects_to_enum (const gchar * color_effect,
+    GstPhotographyColorToneMode * mode);
+static gboolean gst_ahc_src_get_colour_tone_mode (GstPhotography * photo,
+    GstPhotographyColorToneMode * tone_mode);
+static gboolean _scene_modes_to_enum (const gchar * scene,
+    GstPhotographySceneMode * mode);
+static gboolean gst_ahc_src_get_scene_mode (GstPhotography * photo,
+    GstPhotographySceneMode * scene_mode);
+static gboolean _flash_modes_to_enum (const gchar * flash,
+    GstPhotographyFlashMode * mode);
+static gboolean gst_ahc_src_get_flash_mode (GstPhotography * photo,
+    GstPhotographyFlashMode * flash_mode);
+static gboolean gst_ahc_src_get_zoom (GstPhotography * photo, gfloat * zoom);
+static gboolean _antibanding_to_enum (const gchar * antibanding,
+    GstPhotographyFlickerReductionMode * mode);
+static gboolean gst_ahc_src_get_flicker_mode (GstPhotography * photo,
+    GstPhotographyFlickerReductionMode * flicker_mode);
+static gboolean _focus_modes_to_enum (const gchar * focus,
+    GstPhotographyFocusMode * mode);
+static gboolean gst_ahc_src_get_focus_mode (GstPhotography * photo,
+    GstPhotographyFocusMode * focus_mode);
+
+static gboolean gst_ahc_src_set_ev_compensation (GstPhotography * photo,
+    gfloat ev_comp);
+static gboolean gst_ahc_src_set_white_balance_mode (GstPhotography * photo,
+    GstPhotographyWhiteBalanceMode wb_mode);
+static gboolean gst_ahc_src_set_colour_tone_mode (GstPhotography * photo,
+    GstPhotographyColorToneMode tone_mode);
+static gboolean gst_ahc_src_set_scene_mode (GstPhotography * photo,
+    GstPhotographySceneMode scene_mode);
+static gboolean gst_ahc_src_set_flash_mode (GstPhotography * photo,
+    GstPhotographyFlashMode flash_mode);
+static gboolean gst_ahc_src_set_zoom (GstPhotography * photo, gfloat zoom);
+static gboolean gst_ahc_src_set_flicker_mode (GstPhotography * photo,
+    GstPhotographyFlickerReductionMode flicker_mode);
+static gboolean gst_ahc_src_set_focus_mode (GstPhotography * photo,
+    GstPhotographyFocusMode focus_mode);
+
+static GstPhotographyCaps gst_ahc_src_get_capabilities (GstPhotography * photo);
+static void gst_ahc_src_set_autofocus (GstPhotography * photo, gboolean on);
+
+/* GstAHCSrc */
+static void gst_ahc_src_close (GstAHCSrc * self);
+static void gst_ahc_src_on_preview_frame (jbyteArray data, gpointer user_data);
+static void gst_ahc_src_on_error (gint error, gpointer user_data);
+static void gst_ahc_src_on_auto_focus (gboolean success, gpointer user_data);
+
+#define NUM_CALLBACK_BUFFERS 5
+
+#define GST_AHC_SRC_CAPS_STR                                    \
+  GST_VIDEO_CAPS_MAKE_WITH_FEATURES("ANY", " { YV12, YUY2, NV21, NV16, RGB16 }")
+
+static GstStaticPadTemplate gst_ahc_src_pad_template =
+GST_STATIC_PAD_TEMPLATE ("src",
+    GST_PAD_SRC,
+    GST_PAD_ALWAYS,
+    GST_STATIC_CAPS (GST_AHC_SRC_CAPS_STR));
+
+GST_DEBUG_CATEGORY_STATIC (gst_ahc_src_debug);
+#define GST_CAT_DEFAULT gst_ahc_src_debug
+
+#define parent_class gst_ahc_src_parent_class
+
+enum
+{
+  PROP_0,
+  PROP_DEVICE,
+  PROP_DEVICE_NAME,
+  PROP_DEVICE_FACING,
+  PROP_DEVICE_ORIENTATION,
+  PROP_FOCAL_LENGTH,
+  PROP_HORIZONTAL_VIEW_ANGLE,
+  PROP_VERTICAL_VIEW_ANGLE,
+  PROP_VIDEO_STABILIZATION,
+  PROP_WB_MODE,
+  PROP_COLOUR_TONE,
+  PROP_SCENE_MODE,
+  PROP_FLASH_MODE,
+  PROP_NOISE_REDUCTION,
+  PROP_CAPABILITIES,
+  PROP_EV_COMP,
+  PROP_ISO_SPEED,
+  PROP_APERTURE,
+  PROP_EXPOSURE_MODE,
+  PROP_IMAGE_CAPTURE_SUPPORTED_CAPS,
+  PROP_IMAGE_PREVIEW_SUPPORTED_CAPS,
+  PROP_FLICKER_MODE,
+  PROP_FOCUS_MODE,
+  PROP_ZOOM,
+  PROP_SMOOTH_ZOOM,
+  PROP_WHITE_POINT,
+  PROP_MIN_EXPOSURE_TIME,
+  PROP_MAX_EXPOSURE_TIME,
+  PROP_LENS_FOCUS,
+  PROP_EXPOSURE_TIME,
+  PROP_COLOR_TEMPERATURE,
+  PROP_ANALOG_GAIN,
+  PROP_LAST
+};
+
+static GParamSpec *properties[PROP_LAST];
+
+#define DEFAULT_DEVICE "0"
+
+G_DEFINE_TYPE_WITH_CODE (GstAHCSrc, gst_ahc_src, GST_TYPE_PUSH_SRC,
+    G_IMPLEMENT_INTERFACE (GST_TYPE_PHOTOGRAPHY, gst_ahc_src_photography_init));
+
+#define CAMERA_FACING_BACK 0
+#define CAMERA_FACING_FRONT 1
+
+static GType
+gst_ahc_src_facing_get_type (void)
+{
+  static GType type = 0;
+  static const GEnumValue types[] = {
+    {CAMERA_FACING_BACK, "Back", "back"},
+    {CAMERA_FACING_FRONT, "Front", "front"},
+    {0, NULL, NULL}
+  };
+
+  if (!type) {
+    type = g_enum_register_static ("GstAHCSrcFacing", types);
+  }
+  return type;
+}
+
+#define GST_AHC_SRC_FACING_TYPE (gst_ahc_src_facing_get_type())
+
+static void
+gst_ahc_src_photography_init (gpointer g_iface, gpointer iface_data)
+{
+  GstPhotographyInterface *iface = g_iface;
+
+  iface->get_ev_compensation = gst_ahc_src_get_ev_compensation;
+  iface->get_white_balance_mode = gst_ahc_src_get_white_balance_mode;
+  iface->get_color_tone_mode = gst_ahc_src_get_colour_tone_mode;
+  iface->get_scene_mode = gst_ahc_src_get_scene_mode;
+  iface->get_flash_mode = gst_ahc_src_get_flash_mode;
+  iface->get_zoom = gst_ahc_src_get_zoom;
+  iface->get_flicker_mode = gst_ahc_src_get_flicker_mode;
+  iface->get_focus_mode = gst_ahc_src_get_focus_mode;
+
+  iface->set_ev_compensation = gst_ahc_src_set_ev_compensation;
+  iface->set_white_balance_mode = gst_ahc_src_set_white_balance_mode;
+  iface->set_color_tone_mode = gst_ahc_src_set_colour_tone_mode;
+  iface->set_scene_mode = gst_ahc_src_set_scene_mode;
+  iface->set_flash_mode = gst_ahc_src_set_flash_mode;
+  iface->set_zoom = gst_ahc_src_set_zoom;
+  iface->set_flicker_mode = gst_ahc_src_set_flicker_mode;
+  iface->set_focus_mode = gst_ahc_src_set_focus_mode;
+
+  iface->get_capabilities = gst_ahc_src_get_capabilities;
+  iface->set_autofocus = gst_ahc_src_set_autofocus;
+}
+
+static void
+gst_ahc_src_class_init (GstAHCSrcClass * klass)
+{
+  GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
+  GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
+  GstPushSrcClass *gstpushsrc_class = GST_PUSH_SRC_CLASS (klass);
+  GstBaseSrcClass *gstbasesrc_class = GST_BASE_SRC_CLASS (klass);
+
+  gobject_class->set_property = gst_ahc_src_set_property;
+  gobject_class->get_property = gst_ahc_src_get_property;
+  gobject_class->dispose = gst_ahc_src_dispose;
+
+  element_class->change_state = gst_ahc_src_change_state;
+
+  gstbasesrc_class->get_caps = gst_ahc_src_getcaps;
+  gstbasesrc_class->set_caps = gst_ahc_src_setcaps;
+  gstbasesrc_class->fixate = gst_ahc_src_fixate;
+  gstbasesrc_class->start = gst_ahc_src_start;
+  gstbasesrc_class->stop = gst_ahc_src_stop;
+  gstbasesrc_class->unlock = gst_ahc_src_unlock;
+  gstbasesrc_class->unlock_stop = gst_ahc_src_unlock_stop;
+  gstbasesrc_class->query = gst_ahc_src_query;
+
+  gstpushsrc_class->create = gst_ahc_src_create;
+
+  gst_element_class_add_pad_template (element_class,
+      gst_static_pad_template_get (&gst_ahc_src_pad_template));
+
+  /**
+   * GstAHCSrc:device:
+   *
+   * The Device ID of the camera to capture from
+   */
+  properties[PROP_DEVICE] = g_param_spec_string ("device",
+      "Device", "Device ID", DEFAULT_DEVICE,
+      G_PARAM_READWRITE | G_PARAM_CONSTRUCT | G_PARAM_STATIC_STRINGS);
+  g_object_class_install_property (gobject_class, PROP_DEVICE,
+      properties[PROP_DEVICE]);
+
+  /**
+   * GstAHCSrc:device-name:
+   *
+   * A user-friendly name for the camera device
+   */
+  properties[PROP_DEVICE_NAME] = g_param_spec_string ("device-name",
+      "Device name", "Device name", NULL,
+      G_PARAM_READABLE | G_PARAM_CONSTRUCT | G_PARAM_STATIC_STRINGS);
+  g_object_class_install_property (gobject_class, PROP_DEVICE_NAME,
+      properties[PROP_DEVICE_NAME]);
+
+  /**
+   * GstAHCSrc:device-orientation:
+   *
+   * The orientation of the currently set camera @device.
+   * The value is the angle that the camera image needs to be rotated clockwise
+   * so it shows correctly on the display in its natural orientation.
+   * It should be 0, 90, 180, or 270.
+   */
+  properties[PROP_DEVICE_ORIENTATION] = g_param_spec_int ("device-orientation",
+      "Device orientation", "The orientation of the camera image",
+      0, 360, 0, G_PARAM_READABLE | G_PARAM_STATIC_STRINGS);
+  g_object_class_install_property (gobject_class, PROP_DEVICE_ORIENTATION,
+      properties[PROP_DEVICE_ORIENTATION]);
+
+  /**
+   * GstAHCSrc:device-facing:
+   *
+   * The direction that the currently select camera @device faces.
+   *
+   * A value of 0 means the camera is facing the opposite direction as the
+   * screen while a value of 1 means the camera is facing the same direction
+   * as the screen.
+   */
+  properties[PROP_DEVICE_FACING] = g_param_spec_enum ("device-facing",
+      "Device facing", "The direction that the camera faces",
+      GST_AHC_SRC_FACING_TYPE, CAMERA_FACING_BACK,
+      G_PARAM_READABLE | G_PARAM_STATIC_STRINGS);
+  g_object_class_install_property (gobject_class, PROP_DEVICE_FACING,
+      properties[PROP_DEVICE_FACING]);
+
+  /**
+   * GstAHCSrc:focal-length:
+   *
+   * Gets the focal length (in millimeter) of the camera.
+   */
+  properties[PROP_FOCAL_LENGTH] = g_param_spec_float ("focal-length",
+      "Focal length", "Gets the focal length (in millimeter) of the camera",
+      -G_MAXFLOAT, G_MAXFLOAT, 0, G_PARAM_READABLE | G_PARAM_STATIC_STRINGS);
+  g_object_class_install_property (gobject_class, PROP_FOCAL_LENGTH,
+      properties[PROP_FOCAL_LENGTH]);
+
+  /**
+   * GstAHCSrc:horizontal-view-angle:
+   *
+   * Gets the horizontal angle of view in degrees.
+   */
+  properties[PROP_HORIZONTAL_VIEW_ANGLE] =
+      g_param_spec_float ("horizontal-view-angle", "Horizontal view angle",
+      "Gets the horizontal angle of view in degrees",
+      -G_MAXFLOAT, G_MAXFLOAT, 0, G_PARAM_READABLE | G_PARAM_STATIC_STRINGS);
+  g_object_class_install_property (gobject_class, PROP_HORIZONTAL_VIEW_ANGLE,
+      properties[PROP_HORIZONTAL_VIEW_ANGLE]);
+
+  /**
+   * GstAHCSrc:vertical-view-angle:
+   *
+   * Gets the vertical angle of view in degrees.
+   */
+  properties[PROP_VERTICAL_VIEW_ANGLE] =
+      g_param_spec_float ("vertical-view-angle", "Vertical view angle",
+      "Gets the vertical angle of view in degrees",
+      -G_MAXFLOAT, G_MAXFLOAT, 0, G_PARAM_READABLE | G_PARAM_STATIC_STRINGS);
+  g_object_class_install_property (gobject_class, PROP_VERTICAL_VIEW_ANGLE,
+      properties[PROP_VERTICAL_VIEW_ANGLE]);
+
+  /**
+   * GstAHCSrc:video-stabilizatio:
+   *
+   * Video stabilization reduces the shaking due to the motion of the camera.
+   */
+  properties[PROP_VIDEO_STABILIZATION] =
+      g_param_spec_boolean ("video-stabilization", "Video stabilization",
+      "Video stabilization reduces the shaking due to the motion of the camera",
+      FALSE, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
+  g_object_class_install_property (gobject_class, PROP_VIDEO_STABILIZATION,
+      properties[PROP_VIDEO_STABILIZATION]);
+
+  /**
+   * GstAHCSrc:smooth-zoom:
+   *
+   * If enabled, then smooth zooming will be used when the @zoom property is
+   * changed. In that case, the @zoom property can be queried to know the
+   * current zoom level while the smooth zoom is in progress.
+   */
+  properties[PROP_SMOOTH_ZOOM] = g_param_spec_boolean ("smooth-zoom",
+      "Smooth Zoom", "Use smooth zoom when available",
+      FALSE, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
+  g_object_class_install_property (gobject_class, PROP_SMOOTH_ZOOM,
+      properties[PROP_SMOOTH_ZOOM]);
+
+  /* Override GstPhotography properties */
+  g_object_class_override_property (gobject_class, PROP_WB_MODE,
+      GST_PHOTOGRAPHY_PROP_WB_MODE);
+  properties[PROP_WB_MODE] = g_object_class_find_property (gobject_class,
+      GST_PHOTOGRAPHY_PROP_WB_MODE);
+
+  g_object_class_override_property (gobject_class, PROP_COLOUR_TONE,
+      GST_PHOTOGRAPHY_PROP_COLOR_TONE);
+  properties[PROP_COLOUR_TONE] = g_object_class_find_property (gobject_class,
+      GST_PHOTOGRAPHY_PROP_COLOR_TONE);
+
+  g_object_class_override_property (gobject_class, PROP_SCENE_MODE,
+      GST_PHOTOGRAPHY_PROP_SCENE_MODE);
+  properties[PROP_SCENE_MODE] = g_object_class_find_property (gobject_class,
+      GST_PHOTOGRAPHY_PROP_SCENE_MODE);
+
+  g_object_class_override_property (gobject_class, PROP_FLASH_MODE,
+      GST_PHOTOGRAPHY_PROP_FLASH_MODE);
+  properties[PROP_FLASH_MODE] = g_object_class_find_property (gobject_class,
+      GST_PHOTOGRAPHY_PROP_FLASH_MODE);
+
+  g_object_class_override_property (gobject_class, PROP_NOISE_REDUCTION,
+      GST_PHOTOGRAPHY_PROP_NOISE_REDUCTION);
+  properties[PROP_NOISE_REDUCTION] =
+      g_object_class_find_property (gobject_class,
+      GST_PHOTOGRAPHY_PROP_NOISE_REDUCTION);
+
+  g_object_class_override_property (gobject_class, PROP_CAPABILITIES,
+      GST_PHOTOGRAPHY_PROP_CAPABILITIES);
+  properties[PROP_CAPABILITIES] = g_object_class_find_property (gobject_class,
+      GST_PHOTOGRAPHY_PROP_CAPABILITIES);
+
+  g_object_class_override_property (gobject_class, PROP_EV_COMP,
+      GST_PHOTOGRAPHY_PROP_EV_COMP);
+  properties[PROP_EV_COMP] = g_object_class_find_property (gobject_class,
+      GST_PHOTOGRAPHY_PROP_EV_COMP);
+
+  g_object_class_override_property (gobject_class, PROP_ISO_SPEED,
+      GST_PHOTOGRAPHY_PROP_ISO_SPEED);
+  properties[PROP_ISO_SPEED] = g_object_class_find_property (gobject_class,
+      GST_PHOTOGRAPHY_PROP_ISO_SPEED);
+
+  g_object_class_override_property (gobject_class, PROP_APERTURE,
+      GST_PHOTOGRAPHY_PROP_APERTURE);
+  properties[PROP_APERTURE] = g_object_class_find_property (gobject_class,
+      GST_PHOTOGRAPHY_PROP_APERTURE);
+
+#if 0
+  g_object_class_override_property (gobject_class, PROP_EXPOSURE_MODE,
+      GST_PHOTOGRAPHY_PROP_EXPOSURE_MODE);
+  properties[PROP_EXPOSURE] = g_object_class_find_property (gobject_class,
+      GST_PHOTOGRAPHY_PROP_EXPOSURE_MODE);
+#endif
+
+  g_object_class_override_property (gobject_class,
+      PROP_IMAGE_CAPTURE_SUPPORTED_CAPS,
+      GST_PHOTOGRAPHY_PROP_IMAGE_CAPTURE_SUPPORTED_CAPS);
+  properties[PROP_IMAGE_CAPTURE_SUPPORTED_CAPS] =
+      g_object_class_find_property (gobject_class,
+      GST_PHOTOGRAPHY_PROP_IMAGE_CAPTURE_SUPPORTED_CAPS);
+
+  g_object_class_override_property (gobject_class,
+      PROP_IMAGE_PREVIEW_SUPPORTED_CAPS,
+      GST_PHOTOGRAPHY_PROP_IMAGE_PREVIEW_SUPPORTED_CAPS);
+  properties[PROP_IMAGE_PREVIEW_SUPPORTED_CAPS] =
+      g_object_class_find_property (gobject_class,
+      GST_PHOTOGRAPHY_PROP_IMAGE_PREVIEW_SUPPORTED_CAPS);
+
+  g_object_class_override_property (gobject_class, PROP_FLICKER_MODE,
+      GST_PHOTOGRAPHY_PROP_FLICKER_MODE);
+  properties[PROP_FLICKER_MODE] = g_object_class_find_property (gobject_class,
+      GST_PHOTOGRAPHY_PROP_FLICKER_MODE);
+
+  g_object_class_override_property (gobject_class, PROP_FOCUS_MODE,
+      GST_PHOTOGRAPHY_PROP_FOCUS_MODE);
+  properties[PROP_FOCUS_MODE] = g_object_class_find_property (gobject_class,
+      GST_PHOTOGRAPHY_PROP_FOCUS_MODE);
+
+  g_object_class_override_property (gobject_class, PROP_ZOOM,
+      GST_PHOTOGRAPHY_PROP_ZOOM);
+  properties[PROP_ZOOM] = g_object_class_find_property (gobject_class,
+      GST_PHOTOGRAPHY_PROP_ZOOM);
+
+  g_object_class_override_property (gobject_class, PROP_WHITE_POINT,
+      GST_PHOTOGRAPHY_PROP_WHITE_POINT);
+  properties[PROP_WHITE_POINT] = g_object_class_find_property (gobject_class,
+      GST_PHOTOGRAPHY_PROP_WHITE_POINT);
+
+  g_object_class_override_property (gobject_class, PROP_MIN_EXPOSURE_TIME,
+      GST_PHOTOGRAPHY_PROP_MIN_EXPOSURE_TIME);
+  properties[PROP_MIN_EXPOSURE_TIME] =
+      g_object_class_find_property (gobject_class,
+      GST_PHOTOGRAPHY_PROP_MIN_EXPOSURE_TIME);
+
+  g_object_class_override_property (gobject_class, PROP_MAX_EXPOSURE_TIME,
+      GST_PHOTOGRAPHY_PROP_MAX_EXPOSURE_TIME);
+  properties[PROP_MAX_EXPOSURE_TIME] =
+      g_object_class_find_property (gobject_class,
+      GST_PHOTOGRAPHY_PROP_MAX_EXPOSURE_TIME);
+
+  g_object_class_override_property (gobject_class, PROP_LENS_FOCUS,
+      GST_PHOTOGRAPHY_PROP_LENS_FOCUS);
+  properties[PROP_LENS_FOCUS] = g_object_class_find_property (gobject_class,
+      GST_PHOTOGRAPHY_PROP_LENS_FOCUS);
+
+  g_object_class_override_property (gobject_class, PROP_EXPOSURE_TIME,
+      GST_PHOTOGRAPHY_PROP_EXPOSURE_TIME);
+  properties[PROP_EXPOSURE_TIME] = g_object_class_find_property (gobject_class,
+      GST_PHOTOGRAPHY_PROP_EXPOSURE_TIME);
+
+  g_object_class_override_property (gobject_class, PROP_COLOR_TEMPERATURE,
+      GST_PHOTOGRAPHY_PROP_COLOR_TEMPERATURE);
+  properties[PROP_COLOR_TEMPERATURE] =
+      g_object_class_find_property (gobject_class,
+      GST_PHOTOGRAPHY_PROP_COLOR_TEMPERATURE);
+
+  g_object_class_override_property (gobject_class, PROP_ANALOG_GAIN,
+      GST_PHOTOGRAPHY_PROP_ANALOG_GAIN);
+  properties[PROP_ANALOG_GAIN] = g_object_class_find_property (gobject_class,
+      GST_PHOTOGRAPHY_PROP_ANALOG_GAIN);
+
+
+
+  klass->probe_properties = NULL;
+
+  gst_element_class_set_static_metadata (element_class,
+      "Android Camera Source",
+      "Source/Video",
+      "Reads frames from android.hardware.Camera class into buffers",
+      "Youness Alaoui <youness.alaoui@collabora.co.uk>");
+
+  GST_DEBUG_CATEGORY_INIT (gst_ahc_src_debug, "ahcsrc", 0,
+      "android.hardware.Camera source element");
+}
+
+static gboolean
+_data_queue_check_full (GstDataQueue * queue, guint visible,
+    guint bytes, guint64 time, gpointer checkdata)
+{
+  return FALSE;
+}
+
+static void
+gst_ahc_src_init (GstAHCSrc * self)
+{
+  gst_base_src_set_live (GST_BASE_SRC (self), TRUE);
+  gst_base_src_set_format (GST_BASE_SRC (self), GST_FORMAT_TIME);
+  gst_base_src_set_do_timestamp (GST_BASE_SRC (self), FALSE);
+
+  self->camera = NULL;
+  self->texture = NULL;
+  self->data = NULL;
+  self->queue = gst_data_queue_new (_data_queue_check_full, NULL, NULL, NULL);
+  self->start = FALSE;
+  self->previous_ts = GST_CLOCK_TIME_NONE;
+
+  g_mutex_init (&self->mutex);
+}
+
+static void
+gst_ahc_src_dispose (GObject * object)
+{
+  GstAHCSrc *self = GST_AHC_SRC (object);
+
+  if (self->queue)
+    g_object_unref (self->queue);
+  self->queue = NULL;
+
+  g_mutex_clear (&self->mutex);
+
+  G_OBJECT_CLASS (parent_class)->dispose (object);
+}
+
+static void
+gst_ahc_src_set_property (GObject * object, guint prop_id,
+    const GValue * value, GParamSpec * pspec)
+{
+  GstAHCSrc *self = GST_AHC_SRC (object);
+
+  GST_DEBUG_OBJECT (self, "set props %d", prop_id);
+
+  switch (prop_id) {
+    case PROP_DEVICE:{
+      const gchar *dev = g_value_get_string (value);
+      gchar *endptr = NULL;
+      guint64 device;
+
+      device = g_ascii_strtoll (dev, &endptr, 10);
+      if (endptr != dev && endptr[0] == 0 && device < G_MAXINT)
+        self->device = (gint) device;
+    }
+      break;
+    case PROP_VIDEO_STABILIZATION:
+      if (self->camera) {
+        GstAHCParameters *params;
+
+        params = gst_ah_camera_get_parameters (self->camera);
+        if (params) {
+          gst_ahc_parameters_set_video_stabilization (params,
+              g_value_get_boolean (value));
+          gst_ah_camera_set_parameters (self->camera, params);
+          gst_ahc_parameters_free (params);
+        }
+      }
+      break;
+    case PROP_SMOOTH_ZOOM:
+      self->smooth_zoom = g_value_get_boolean (value);
+      break;
+    case PROP_WB_MODE:{
+      GstPhotographyWhiteBalanceMode wb = g_value_get_enum (value);
+
+      gst_ahc_src_set_white_balance_mode (GST_PHOTOGRAPHY (self), wb);
+    }
+      break;
+    case PROP_COLOUR_TONE:{
+      GstPhotographyColorToneMode tone = g_value_get_enum (value);
+
+      gst_ahc_src_set_colour_tone_mode (GST_PHOTOGRAPHY (self), tone);
+    }
+      break;
+    case PROP_SCENE_MODE:{
+      GstPhotographySceneMode scene = g_value_get_enum (value);
+
+      gst_ahc_src_set_scene_mode (GST_PHOTOGRAPHY (self), scene);
+    }
+      break;
+    case PROP_FLASH_MODE:{
+      GstPhotographyFlashMode flash = g_value_get_enum (value);
+
+      gst_ahc_src_set_flash_mode (GST_PHOTOGRAPHY (self), flash);
+    }
+      break;
+    case PROP_EV_COMP:{
+      gfloat ev = g_value_get_float (value);
+
+      gst_ahc_src_set_ev_compensation (GST_PHOTOGRAPHY (self), ev);
+    }
+      break;
+    case PROP_FLICKER_MODE:{
+      GstPhotographyFlickerReductionMode flicker = g_value_get_enum (value);
+
+      gst_ahc_src_set_flicker_mode (GST_PHOTOGRAPHY (self), flicker);
+    }
+      break;
+    case PROP_FOCUS_MODE:{
+      GstPhotographyFocusMode focus = g_value_get_enum (value);
+
+      gst_ahc_src_set_focus_mode (GST_PHOTOGRAPHY (self), focus);
+    }
+      break;
+    case PROP_ZOOM:{
+      gfloat zoom = g_value_get_float (value);
+
+      gst_ahc_src_set_zoom (GST_PHOTOGRAPHY (self), zoom);
+    }
+      break;
+    case PROP_NOISE_REDUCTION:
+    case PROP_ISO_SPEED:
+    case PROP_APERTURE:
+    case PROP_EXPOSURE_MODE:
+    case PROP_IMAGE_CAPTURE_SUPPORTED_CAPS:
+    case PROP_IMAGE_PREVIEW_SUPPORTED_CAPS:
+    case PROP_WHITE_POINT:
+    case PROP_MIN_EXPOSURE_TIME:
+    case PROP_MAX_EXPOSURE_TIME:
+    case PROP_LENS_FOCUS:
+    case PROP_EXPOSURE_TIME:
+    case PROP_COLOR_TEMPERATURE:
+    case PROP_ANALOG_GAIN:
+      break;
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
+  }
+}
+
+static void
+gst_ahc_src_get_property (GObject * object, guint prop_id,
+    GValue * value, GParamSpec * pspec)
+{
+  GstAHCSrc *self = GST_AHC_SRC (object);
+  (void) self;
+
+  switch (prop_id) {
+    case PROP_DEVICE:{
+      gchar *dev = g_strdup_printf ("%d", self->device);
+
+      g_value_take_string (value, dev);
+    }
+      break;
+    case PROP_DEVICE_NAME:{
+      GstAHCCameraInfo info;
+      gchar *dev;
+
+      if (gst_ah_camera_get_camera_info (self->device, &info))
+        dev = g_strdup_printf ("#%d %s", self->device,
+            info.facing == CameraInfo_CAMERA_FACING_BACK ? "Back" : "Front");
+      else
+        dev = g_strdup_printf ("#%d", self->device);
+
+      g_value_take_string (value, dev);
+    }
+      break;
+    case PROP_DEVICE_FACING:{
+      GstAHCCameraInfo info;
+
+      if (gst_ah_camera_get_camera_info (self->device, &info))
+        g_value_set_enum (value, info.facing == CameraInfo_CAMERA_FACING_BACK ?
+            CAMERA_FACING_BACK : CAMERA_FACING_FRONT);
+      else
+        g_value_set_enum (value, CAMERA_FACING_BACK);
+    }
+      break;
+    case PROP_DEVICE_ORIENTATION:{
+      GstAHCCameraInfo info;
+
+      if (gst_ah_camera_get_camera_info (self->device, &info))
+        g_value_set_int (value, info.orientation);
+      else
+        g_value_set_int (value, 0);
+    }
+      break;
+    case PROP_FOCAL_LENGTH:
+      if (self->camera) {
+        GstAHCParameters *params;
+
+        params = gst_ah_camera_get_parameters (self->camera);
+        if (params) {
+          g_value_set_float (value,
+              gst_ahc_parameters_get_focal_length (params));
+          gst_ahc_parameters_free (params);
+        }
+      }
+      break;
+    case PROP_HORIZONTAL_VIEW_ANGLE:
+      if (self->camera) {
+        GstAHCParameters *params;
+
+        params = gst_ah_camera_get_parameters (self->camera);
+        if (params) {
+          g_value_set_float (value,
+              gst_ahc_parameters_get_horizontal_view_angle (params));
+          gst_ahc_parameters_free (params);
+        }
+      }
+      break;
+    case PROP_VERTICAL_VIEW_ANGLE:
+      if (self->camera) {
+        GstAHCParameters *params;
+
+        params = gst_ah_camera_get_parameters (self->camera);
+        if (params) {
+          g_value_set_float (value,
+              gst_ahc_parameters_get_vertical_view_angle (params));
+          gst_ahc_parameters_free (params);
+        }
+      }
+      break;
+    case PROP_VIDEO_STABILIZATION:
+      if (self->camera) {
+        GstAHCParameters *params;
+
+        params = gst_ah_camera_get_parameters (self->camera);
+        if (params) {
+          g_value_set_boolean (value,
+              gst_ahc_parameters_get_video_stabilization (params));
+          gst_ahc_parameters_free (params);
+        }
+      }
+      break;
+    case PROP_SMOOTH_ZOOM:
+      g_value_set_boolean (value, self->smooth_zoom);
+      break;
+    case PROP_WB_MODE:{
+      GstPhotographyWhiteBalanceMode wb;
+
+      if (gst_ahc_src_get_white_balance_mode (GST_PHOTOGRAPHY (self), &wb))
+        g_value_set_enum (value, wb);
+    }
+      break;
+    case PROP_COLOUR_TONE:{
+      GstPhotographyColorToneMode tone;
+
+      if (gst_ahc_src_get_colour_tone_mode (GST_PHOTOGRAPHY (self), &tone))
+        g_value_set_enum (value, tone);
+    }
+      break;
+    case PROP_SCENE_MODE:{
+      GstPhotographySceneMode scene;
+
+      if (gst_ahc_src_get_scene_mode (GST_PHOTOGRAPHY (self), &scene))
+        g_value_set_enum (value, scene);
+    }
+      break;
+    case PROP_FLASH_MODE:{
+      GstPhotographyFlashMode flash;
+
+      if (gst_ahc_src_get_flash_mode (GST_PHOTOGRAPHY (self), &flash))
+        g_value_set_enum (value, flash);
+    }
+      break;
+    case PROP_CAPABILITIES:{
+      GstPhotographyCaps caps;
+
+      caps = gst_ahc_src_get_capabilities (GST_PHOTOGRAPHY (self));
+      g_value_set_ulong (value, caps);
+    }
+      break;
+    case PROP_EV_COMP:{
+      gfloat ev;
+
+      if (gst_ahc_src_get_ev_compensation (GST_PHOTOGRAPHY (self), &ev))
+        g_value_set_float (value, ev);
+    }
+      break;
+    case PROP_FLICKER_MODE:{
+      GstPhotographyFlickerReductionMode flicker;
+
+      if (gst_ahc_src_get_flicker_mode (GST_PHOTOGRAPHY (self), &flicker))
+        g_value_set_enum (value, flicker);
+    }
+      break;
+    case PROP_FOCUS_MODE:{
+      GstPhotographyFocusMode focus;
+
+      if (gst_ahc_src_get_focus_mode (GST_PHOTOGRAPHY (self), &focus))
+        g_value_set_enum (value, focus);
+    }
+      break;
+    case PROP_ZOOM:{
+      gfloat zoom;
+
+      if (gst_ahc_src_get_zoom (GST_PHOTOGRAPHY (self), &zoom))
+        g_value_set_float (value, zoom);
+    }
+      break;
+    case PROP_IMAGE_CAPTURE_SUPPORTED_CAPS:
+    case PROP_IMAGE_PREVIEW_SUPPORTED_CAPS:
+    case PROP_NOISE_REDUCTION:
+    case PROP_ISO_SPEED:
+    case PROP_APERTURE:
+    case PROP_EXPOSURE_MODE:
+    case PROP_WHITE_POINT:
+    case PROP_MIN_EXPOSURE_TIME:
+    case PROP_MAX_EXPOSURE_TIME:
+    case PROP_LENS_FOCUS:
+    case PROP_EXPOSURE_TIME:
+    case PROP_COLOR_TEMPERATURE:
+    case PROP_ANALOG_GAIN:
+      break;
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
+  }
+}
+
+#if 0
+static const GList *
+gst_ahc_src_probe_get_properties (GstPropertyProbe * probe)
+{
+  GstAHCSrcClass *ahc_class = GST_AHC_SRC_CLASS (probe);
+  GList **list = &ahc_class->probe_properties;
+
+  if (!*list) {
+    *list = g_list_append (*list, properties[PROP_DEVICE]);
+    *list = g_list_append (*list, properties[PROP_EV_COMP]);
+    *list = g_list_append (*list, properties[PROP_ZOOM]);
+    *list = g_list_append (*list, properties[PROP_WB_MODE]);
+    *list = g_list_append (*list, properties[PROP_COLOUR_TONE]);
+    *list = g_list_append (*list, properties[PROP_FLASH_MODE]);
+    *list = g_list_append (*list, properties[PROP_FOCUS_MODE]);
+    *list = g_list_append (*list, properties[PROP_SCENE_MODE]);
+    *list = g_list_append (*list, properties[PROP_FLICKER_MODE]);
+  }
+
+  return *list;
+}
+
+#define PROBE_GET_ENUM_VALUES(name, type, struct_name)                  \
+  if (self->camera) {                                                   \
+    GstAHCParameters *params;                                           \
+                                                                        \
+    params = gst_ah_camera_get_parameters (self->camera);               \
+    if (params) {                                                       \
+      GList *list = gst_ahc_parameters_get_supported_##name (params);   \
+                                                                        \
+      if (list) {                                                       \
+          GValue value = { 0 };                                         \
+          GList *i;                                                     \
+                                                                        \
+          array = g_value_array_new (g_list_length (list));             \
+          g_value_init (&value, type);                                  \
+          for (i = list; i; i = i->next) {                              \
+            struct_name mode;                                           \
+            const gchar *name = i->data;                                \
+                                                                        \
+            if (_##name##_to_enum (name, &mode)) {                      \
+              g_value_set_enum (&value, mode);                          \
+              g_value_array_append (array, &value);                     \
+            }                                                           \
+          }                                                             \
+          g_value_unset (&value);                                       \
+      }                                                                 \
+                                                                        \
+      gst_ahc_parameters_supported_##name##_free (list);                \
+      gst_ahc_parameters_free (params);                                 \
+    }                                                                   \
+  }
+
+
+static GValueArray *
+gst_ahc_src_probe_get_values (GstPropertyProbe * probe,
+    guint prop_id, const GParamSpec * pspec)
+{
+  GstAHCSrc *self = GST_AHC_SRC (probe);
+  GValueArray *array = NULL;
+
+  /* g_object_class_find_property returns overriden property with
+   * param_id == 0, so we can't switch/case the prop_id and
+   * we need to check the pspec instead */
+  if (pspec == properties[PROP_DEVICE]) {
+    GValue value = { 0 };
+    gint num_cams = gst_ah_camera_get_number_of_cameras ();
+    gint i;
+
+    array = g_value_array_new (num_cams);
+    g_value_init (&value, G_TYPE_STRING);
+    for (i = 0; i < num_cams; i++) {
+      g_value_take_string (&value, g_strdup_printf ("%d", i));
+      g_value_array_append (array, &value);
+    }
+    g_value_unset (&value);
+  } else if (pspec == properties[PROP_EV_COMP]) {
+    if (self->camera) {
+      GstAHCParameters *params;
+
+      params = gst_ah_camera_get_parameters (self->camera);
+      if (params) {
+        gint min, max;
+        gfloat step;
+
+        min = gst_ahc_parameters_get_min_exposure_compensation (params);
+        max = gst_ahc_parameters_get_max_exposure_compensation (params);
+        step = gst_ahc_parameters_get_exposure_compensation_step (params);
+
+        if (step != 0.0 && min != max) {
+          GValue value = { 0 };
+          gint i;
+
+          /* Min and Max are inclusive */
+          array = g_value_array_new (max - min + 1);
+          g_value_init (&value, G_TYPE_FLOAT);
+          for (i = min; i <= max; i++) {
+            g_value_set_float (&value, step * i);
+            g_value_array_append (array, &value);
+          }
+          g_value_unset (&value);
+        }
+
+        gst_ahc_parameters_free (params);
+      }
+    }
+  } else if (pspec == properties[PROP_ZOOM]) {
+    if (self->camera) {
+      GstAHCParameters *params;
+
+      params = gst_ah_camera_get_parameters (self->camera);
+      if (params) {
+        GList *zoom_ratios = gst_ahc_parameters_get_zoom_ratios (params);
+        gint max_zoom = gst_ahc_parameters_get_max_zoom (params);
+
+        if (zoom_ratios && g_list_length (zoom_ratios) == (max_zoom + 1)) {
+          GValue value = { 0 };
+          GList *i;
+
+          array = g_value_array_new (max_zoom + 1);
+          g_value_init (&value, G_TYPE_FLOAT);
+          for (i = zoom_ratios; i; i = i->next) {
+            gint zoom_value = GPOINTER_TO_INT (i->data);
+            gfloat zoom = (gfloat) zoom_value / 100.0;
+
+            g_value_set_float (&value, zoom);
+            g_value_array_append (array, &value);
+          }
+          g_value_unset (&value);
+        }
+
+        gst_ahc_parameters_zoom_ratios_free (zoom_ratios);
+        gst_ahc_parameters_free (params);
+      }
+    }
+  } else if (pspec == properties[PROP_WB_MODE]) {
+    PROBE_GET_ENUM_VALUES (white_balance, GST_TYPE_WHITE_BALANCE_MODE,
+        GstPhotographyWhiteBalanceMode);
+  } else if (pspec == properties[PROP_COLOUR_TONE]) {
+    PROBE_GET_ENUM_VALUES (color_effects, GST_TYPE_COLOUR_TONE_MODE,
+        GstPhotographyColorToneMode);
+  } else if (pspec == properties[PROP_FLASH_MODE]) {
+    PROBE_GET_ENUM_VALUES (flash_modes, GST_TYPE_FLASH_MODE,
+        GstPhotographyFlashMode);
+  } else if (pspec == properties[PROP_FOCUS_MODE]) {
+    PROBE_GET_ENUM_VALUES (focus_modes, GST_TYPE_FOCUS_MODE,
+        GstPhotographyFocusMode);
+  } else if (pspec == properties[PROP_SCENE_MODE]) {
+    PROBE_GET_ENUM_VALUES (scene_modes, GST_TYPE_SCENE_MODE,
+        GstPhotographySceneMode);
+  } else if (pspec == properties[PROP_FLICKER_MODE]) {
+    PROBE_GET_ENUM_VALUES (antibanding, GST_TYPE_FLICKER_REDUCTION_MODE,
+        GstPhotographyFlickerReductionMode);
+  } else {
+    G_OBJECT_WARN_INVALID_PROPERTY_ID (probe, prop_id, pspec);
+  }
+
+  return array;
+}
+#endif
+
+static gboolean
+_antibanding_to_enum (const gchar * antibanding,
+    GstPhotographyFlickerReductionMode * mode)
+{
+  if (antibanding == Parameters_ANTIBANDING_AUTO)
+    *mode = GST_PHOTOGRAPHY_FLICKER_REDUCTION_AUTO;
+  else if (antibanding == Parameters_ANTIBANDING_50HZ)
+    *mode = GST_PHOTOGRAPHY_FLICKER_REDUCTION_50HZ;
+  else if (antibanding == Parameters_ANTIBANDING_60HZ)
+    *mode = GST_PHOTOGRAPHY_FLICKER_REDUCTION_60HZ;
+  else if (antibanding == Parameters_ANTIBANDING_OFF)
+    *mode = GST_PHOTOGRAPHY_FLICKER_REDUCTION_OFF;
+  else
+    return FALSE;
+
+  return TRUE;
+}
+
+static gboolean
+_white_balance_to_enum (const gchar * white_balance,
+    GstPhotographyWhiteBalanceMode * mode)
+{
+  if (white_balance == Parameters_WHITE_BALANCE_AUTO)
+    *mode = GST_PHOTOGRAPHY_WB_MODE_AUTO;
+  else if (white_balance == Parameters_WHITE_BALANCE_INCANDESCENT)
+    *mode = GST_PHOTOGRAPHY_WB_MODE_TUNGSTEN;
+  else if (white_balance == Parameters_WHITE_BALANCE_FLUORESCENT)
+    *mode = GST_PHOTOGRAPHY_WB_MODE_FLUORESCENT;
+  else if (white_balance == Parameters_WHITE_BALANCE_WARM_FLUORESCENT)
+    *mode = GST_PHOTOGRAPHY_WB_MODE_WARM_FLUORESCENT;
+  else if (white_balance == Parameters_WHITE_BALANCE_DAYLIGHT)
+    *mode = GST_PHOTOGRAPHY_WB_MODE_DAYLIGHT;
+  else if (white_balance == Parameters_WHITE_BALANCE_CLOUDY_DAYLIGHT)
+    *mode = GST_PHOTOGRAPHY_WB_MODE_CLOUDY;
+  else if (white_balance == Parameters_WHITE_BALANCE_TWILIGHT)
+    *mode = GST_PHOTOGRAPHY_WB_MODE_SUNSET;
+  else if (white_balance == Parameters_WHITE_BALANCE_SHADE)
+    *mode = GST_PHOTOGRAPHY_WB_MODE_SHADE;
+  else
+    return FALSE;
+
+  return TRUE;
+}
+
+static gboolean
+_color_effects_to_enum (const gchar * color_effect,
+    GstPhotographyColorToneMode * mode)
+{
+  if (color_effect == Parameters_EFFECT_NONE)
+    *mode = GST_PHOTOGRAPHY_COLOR_TONE_MODE_NORMAL;
+  else if (color_effect == Parameters_EFFECT_MONO)
+    *mode = GST_PHOTOGRAPHY_COLOR_TONE_MODE_GRAYSCALE;
+  else if (color_effect == Parameters_EFFECT_NEGATIVE)
+    *mode = GST_PHOTOGRAPHY_COLOR_TONE_MODE_NEGATIVE;
+  else if (color_effect == Parameters_EFFECT_SOLARIZE)
+    *mode = GST_PHOTOGRAPHY_COLOR_TONE_MODE_SOLARIZE;
+  else if (color_effect == Parameters_EFFECT_SEPIA)
+    *mode = GST_PHOTOGRAPHY_COLOR_TONE_MODE_SEPIA;
+  else if (color_effect == Parameters_EFFECT_POSTERIZE)
+    *mode = GST_PHOTOGRAPHY_COLOR_TONE_MODE_POSTERIZE;
+  else if (color_effect == Parameters_EFFECT_WHITEBOARD)
+    *mode = GST_PHOTOGRAPHY_COLOR_TONE_MODE_WHITEBOARD;
+  else if (color_effect == Parameters_EFFECT_BLACKBOARD)
+    *mode = GST_PHOTOGRAPHY_COLOR_TONE_MODE_BLACKBOARD;
+  else if (color_effect == Parameters_EFFECT_AQUA)
+    *mode = GST_PHOTOGRAPHY_COLOR_TONE_MODE_AQUA;
+  else
+    return FALSE;
+
+  return TRUE;
+}
+
+static gboolean
+_scene_modes_to_enum (const gchar * scene, GstPhotographySceneMode * mode)
+{
+  if (scene == Parameters_SCENE_MODE_AUTO)
+    *mode = GST_PHOTOGRAPHY_SCENE_MODE_AUTO;
+  else if (scene == Parameters_SCENE_MODE_ACTION)
+    *mode = GST_PHOTOGRAPHY_SCENE_MODE_ACTION;
+  else if (scene == Parameters_SCENE_MODE_PORTRAIT)
+    *mode = GST_PHOTOGRAPHY_SCENE_MODE_PORTRAIT;
+  else if (scene == Parameters_SCENE_MODE_LANDSCAPE)
+    *mode = GST_PHOTOGRAPHY_SCENE_MODE_LANDSCAPE;
+  else if (scene == Parameters_SCENE_MODE_NIGHT)
+    *mode = GST_PHOTOGRAPHY_SCENE_MODE_NIGHT;
+  else if (scene == Parameters_SCENE_MODE_NIGHT_PORTRAIT)
+    *mode = GST_PHOTOGRAPHY_SCENE_MODE_NIGHT_PORTRAIT;
+  else if (scene == Parameters_SCENE_MODE_THEATRE)
+    *mode = GST_PHOTOGRAPHY_SCENE_MODE_THEATRE;
+  else if (scene == Parameters_SCENE_MODE_BEACH)
+    *mode = GST_PHOTOGRAPHY_SCENE_MODE_BEACH;
+  else if (scene == Parameters_SCENE_MODE_SNOW)
+    *mode = GST_PHOTOGRAPHY_SCENE_MODE_SNOW;
+  else if (scene == Parameters_SCENE_MODE_SUNSET)
+    *mode = GST_PHOTOGRAPHY_SCENE_MODE_SUNSET;
+  else if (scene == Parameters_SCENE_MODE_STEADYPHOTO)
+    *mode = GST_PHOTOGRAPHY_SCENE_MODE_STEADY_PHOTO;
+  else if (scene == Parameters_SCENE_MODE_FIREWORKS)
+    *mode = GST_PHOTOGRAPHY_SCENE_MODE_FIREWORKS;
+  else if (scene == Parameters_SCENE_MODE_SPORTS)
+    *mode = GST_PHOTOGRAPHY_SCENE_MODE_SPORT;
+  else if (scene == Parameters_SCENE_MODE_PARTY)
+    *mode = GST_PHOTOGRAPHY_SCENE_MODE_PARTY;
+  else if (scene == Parameters_SCENE_MODE_CANDLELIGHT)
+    *mode = GST_PHOTOGRAPHY_SCENE_MODE_CANDLELIGHT;
+  else if (scene == Parameters_SCENE_MODE_BARCODE)
+    *mode = GST_PHOTOGRAPHY_SCENE_MODE_BARCODE;
+  else
+    return FALSE;
+
+  return TRUE;
+}
+
+static gboolean
+_flash_modes_to_enum (const gchar * flash, GstPhotographyFlashMode * mode)
+{
+  if (flash == Parameters_FLASH_MODE_OFF)
+    *mode = GST_PHOTOGRAPHY_FLASH_MODE_OFF;
+  else if (flash == Parameters_FLASH_MODE_AUTO)
+    *mode = GST_PHOTOGRAPHY_FLASH_MODE_AUTO;
+  else if (flash == Parameters_FLASH_MODE_ON)
+    *mode = GST_PHOTOGRAPHY_FLASH_MODE_ON;
+  else if (flash == Parameters_FLASH_MODE_RED_EYE)
+    *mode = GST_PHOTOGRAPHY_FLASH_MODE_RED_EYE;
+  else if (flash == Parameters_FLASH_MODE_TORCH)
+    *mode = GST_PHOTOGRAPHY_FLASH_MODE_FILL_IN;
+  else
+    return FALSE;
+
+  return TRUE;
+}
+
+static gboolean
+_focus_modes_to_enum (const gchar * focus, GstPhotographyFocusMode * mode)
+{
+  if (focus == Parameters_FOCUS_MODE_AUTO)
+    *mode = GST_PHOTOGRAPHY_FOCUS_MODE_AUTO;
+  else if (focus == Parameters_FOCUS_MODE_INFINITY)
+    *mode = GST_PHOTOGRAPHY_FOCUS_MODE_INFINITY;
+  else if (focus == Parameters_FOCUS_MODE_MACRO)
+    *mode = GST_PHOTOGRAPHY_FOCUS_MODE_MACRO;
+  else if (focus == Parameters_FOCUS_MODE_FIXED)
+    *mode = GST_PHOTOGRAPHY_FOCUS_MODE_HYPERFOCAL;
+  else if (focus == Parameters_FOCUS_MODE_EDOF)
+    *mode = GST_PHOTOGRAPHY_FOCUS_MODE_EXTENDED;
+  else if (focus == Parameters_FOCUS_MODE_CONTINUOUS_VIDEO)
+    *mode = GST_PHOTOGRAPHY_FOCUS_MODE_CONTINUOUS_EXTENDED;
+  else if (focus == Parameters_FOCUS_MODE_CONTINUOUS_PICTURE)
+    *mode = GST_PHOTOGRAPHY_FOCUS_MODE_CONTINUOUS_NORMAL;
+  else
+    return FALSE;
+
+  return TRUE;
+}
+
+static gboolean
+gst_ahc_src_get_ev_compensation (GstPhotography * photo, gfloat * ev_comp)
+{
+  GstAHCSrc *self = GST_AHC_SRC (photo);
+  gboolean ret = FALSE;
+
+  if (self->camera) {
+    GstAHCParameters *params;
+
+    params = gst_ah_camera_get_parameters (self->camera);
+    if (params) {
+      gint ev, min, max;
+      gfloat step;
+
+      ev = gst_ahc_parameters_get_exposure_compensation (params);
+      min = gst_ahc_parameters_get_min_exposure_compensation (params);
+      max = gst_ahc_parameters_get_max_exposure_compensation (params);
+      step = gst_ahc_parameters_get_exposure_compensation_step (params);
+
+      if (step != 0.0 && min != max && min <= ev && ev <= max) {
+        if (ev_comp)
+          *ev_comp = ev * step;
+        ret = TRUE;
+      }
+      gst_ahc_parameters_free (params);
+    }
+  }
+
+  return ret;
+}
+
+static gboolean
+gst_ahc_src_get_white_balance_mode (GstPhotography * photo,
+    GstPhotographyWhiteBalanceMode * wb_mode)
+{
+  GstAHCSrc *self = GST_AHC_SRC (photo);
+  gboolean ret = FALSE;
+
+  if (self->camera) {
+    GstAHCParameters *params;
+
+    params = gst_ah_camera_get_parameters (self->camera);
+    if (params) {
+      const gchar *wb = gst_ahc_parameters_get_white_balance (params);
+      GstPhotographyWhiteBalanceMode mode = GST_PHOTOGRAPHY_WB_MODE_AUTO;
+
+      if (_white_balance_to_enum (wb, &mode)) {
+        ret = TRUE;
+
+        if (wb_mode)
+          *wb_mode = mode;
+      }
+
+      gst_ahc_parameters_free (params);
+    }
+  }
+
+  return ret;
+}
+
+static gboolean
+gst_ahc_src_get_colour_tone_mode (GstPhotography * photo,
+    GstPhotographyColorToneMode * tone_mode)
+{
+  GstAHCSrc *self = GST_AHC_SRC (photo);
+  gboolean ret = FALSE;
+
+  if (self->camera) {
+    GstAHCParameters *params;
+
+    params = gst_ah_camera_get_parameters (self->camera);
+    if (params) {
+      const gchar *effect = gst_ahc_parameters_get_color_effect (params);
+      GstPhotographyColorToneMode mode = GST_PHOTOGRAPHY_COLOR_TONE_MODE_NORMAL;
+
+      if (_color_effects_to_enum (effect, &mode)) {
+        ret = TRUE;
+
+        if (tone_mode)
+          *tone_mode = mode;
+      }
+
+      gst_ahc_parameters_free (params);
+    }
+  }
+
+  return ret;
+}
+
+static gboolean
+gst_ahc_src_get_scene_mode (GstPhotography * photo,
+    GstPhotographySceneMode * scene_mode)
+{
+  GstAHCSrc *self = GST_AHC_SRC (photo);
+  gboolean ret = FALSE;
+
+  if (scene_mode && self->camera) {
+    GstAHCParameters *params;
+
+    params = gst_ah_camera_get_parameters (self->camera);
+    if (params) {
+      const gchar *scene = gst_ahc_parameters_get_scene_mode (params);
+      GstPhotographySceneMode mode = GST_PHOTOGRAPHY_SCENE_MODE_AUTO;
+
+      if (_scene_modes_to_enum (scene, &mode)) {
+        ret = TRUE;
+
+        if (scene_mode)
+          *scene_mode = mode;
+      }
+
+      gst_ahc_parameters_free (params);
+    }
+  }
+
+  return ret;
+}
+
+static gboolean
+gst_ahc_src_get_flash_mode (GstPhotography * photo,
+    GstPhotographyFlashMode * flash_mode)
+{
+  GstAHCSrc *self = GST_AHC_SRC (photo);
+  gboolean ret = FALSE;
+
+  if (self->camera) {
+    GstAHCParameters *params;
+
+    params = gst_ah_camera_get_parameters (self->camera);
+    if (params) {
+      const gchar *flash = gst_ahc_parameters_get_flash_mode (params);
+      GstPhotographyFlashMode mode = GST_PHOTOGRAPHY_FLASH_MODE_OFF;
+
+      if (_flash_modes_to_enum (flash, &mode)) {
+        ret = TRUE;
+
+        if (flash_mode)
+          *flash_mode = mode;
+      }
+
+      gst_ahc_parameters_free (params);
+    }
+  }
+
+  return ret;
+}
+
+static gboolean
+gst_ahc_src_get_zoom (GstPhotography * photo, gfloat * zoom)
+{
+  GstAHCSrc *self = GST_AHC_SRC (photo);
+  gboolean ret = FALSE;
+
+  if (self->camera) {
+    GstAHCParameters *params;
+
+    params = gst_ah_camera_get_parameters (self->camera);
+    if (params) {
+      GList *zoom_ratios = gst_ahc_parameters_get_zoom_ratios (params);
+      gint zoom_idx = gst_ahc_parameters_get_zoom (params);
+      gint max_zoom = gst_ahc_parameters_get_max_zoom (params);
+
+      if (zoom_ratios && g_list_length (zoom_ratios) == (max_zoom + 1) &&
+          zoom_idx >= 0 && zoom_idx < max_zoom) {
+        gint zoom_value;
+
+        zoom_value = GPOINTER_TO_INT (g_list_nth_data (zoom_ratios, zoom_idx));
+        if (zoom)
+          *zoom = (gfloat) zoom_value / 100.0;
+
+        ret = TRUE;
+      }
+
+      gst_ahc_parameters_zoom_ratios_free (zoom_ratios);
+      gst_ahc_parameters_free (params);
+    }
+  }
+
+  return ret;
+}
+
+static gboolean
+gst_ahc_src_get_flicker_mode (GstPhotography * photo,
+    GstPhotographyFlickerReductionMode * flicker_mode)
+{
+  GstAHCSrc *self = GST_AHC_SRC (photo);
+  gboolean ret = FALSE;
+
+  if (self->camera) {
+    GstAHCParameters *params;
+
+    params = gst_ah_camera_get_parameters (self->camera);
+    if (params) {
+      const gchar *antibanding = gst_ahc_parameters_get_antibanding (params);
+      GstPhotographyFlickerReductionMode mode =
+          GST_PHOTOGRAPHY_FLICKER_REDUCTION_AUTO;
+
+      if (_antibanding_to_enum (antibanding, &mode)) {
+        ret = TRUE;
+
+        if (flicker_mode)
+          *flicker_mode = mode;
+      }
+
+      gst_ahc_parameters_free (params);
+    }
+  }
+
+  return ret;
+}
+
+static gboolean
+gst_ahc_src_get_focus_mode (GstPhotography * photo,
+    GstPhotographyFocusMode * focus_mode)
+{
+  GstAHCSrc *self = GST_AHC_SRC (photo);
+  gboolean ret = FALSE;
+
+  if (self->camera) {
+    GstAHCParameters *params;
+
+    params = gst_ah_camera_get_parameters (self->camera);
+    if (params) {
+      const gchar *focus = gst_ahc_parameters_get_focus_mode (params);
+      GstPhotographyFocusMode mode = GST_PHOTOGRAPHY_FOCUS_MODE_AUTO;
+
+      if (_focus_modes_to_enum (focus, &mode)) {
+        ret = TRUE;
+
+        if (focus_mode)
+          *focus_mode = mode;
+      }
+
+      gst_ahc_parameters_free (params);
+    }
+  }
+
+  return ret;
+}
+
+
+static gboolean
+gst_ahc_src_set_ev_compensation (GstPhotography * photo, gfloat ev_comp)
+{
+  GstAHCSrc *self = GST_AHC_SRC (photo);
+  gboolean ret = FALSE;
+
+  if (self->camera) {
+    GstAHCParameters *params;
+
+    params = gst_ah_camera_get_parameters (self->camera);
+    if (params) {
+      gint ev, min, max;
+      gfloat step;
+
+      ev = gst_ahc_parameters_get_exposure_compensation (params);
+      min = gst_ahc_parameters_get_min_exposure_compensation (params);
+      max = gst_ahc_parameters_get_max_exposure_compensation (params);
+      step = gst_ahc_parameters_get_exposure_compensation_step (params);
+      if (step != 0.0 && min != max &&
+          (min * step) <= ev_comp && ev_comp <= (max * step)) {
+        ev = ev_comp / step;
+        if ((ev * step) == ev_comp) {
+          gst_ahc_parameters_set_exposure_compensation (params, ev);
+          ret = gst_ah_camera_set_parameters (self->camera, params);
+        }
+      }
+    }
+    gst_ahc_parameters_free (params);
+  }
+
+  return ret;
+}
+
+static gboolean
+gst_ahc_src_set_white_balance_mode (GstPhotography * photo,
+    GstPhotographyWhiteBalanceMode wb_mode)
+{
+  GstAHCSrc *self = GST_AHC_SRC (photo);
+  gboolean ret = FALSE;
+
+  if (self->camera) {
+    GstAHCParameters *params;
+
+    params = gst_ah_camera_get_parameters (self->camera);
+    if (params) {
+      const gchar *white_balance = NULL;
+
+      switch (wb_mode) {
+        case GST_PHOTOGRAPHY_WB_MODE_AUTO:
+          white_balance = Parameters_WHITE_BALANCE_AUTO;
+          break;
+        case GST_PHOTOGRAPHY_WB_MODE_DAYLIGHT:
+          white_balance = Parameters_WHITE_BALANCE_DAYLIGHT;
+          break;
+        case GST_PHOTOGRAPHY_WB_MODE_CLOUDY:
+          white_balance = Parameters_WHITE_BALANCE_CLOUDY_DAYLIGHT;
+          break;
+        case GST_PHOTOGRAPHY_WB_MODE_SUNSET:
+          white_balance = Parameters_WHITE_BALANCE_TWILIGHT;
+          break;
+        case GST_PHOTOGRAPHY_WB_MODE_TUNGSTEN:
+          white_balance = Parameters_WHITE_BALANCE_INCANDESCENT;
+          break;
+        case GST_PHOTOGRAPHY_WB_MODE_FLUORESCENT:
+          white_balance = Parameters_WHITE_BALANCE_FLUORESCENT;
+          break;
+        case GST_PHOTOGRAPHY_WB_MODE_WARM_FLUORESCENT:
+          white_balance = Parameters_WHITE_BALANCE_WARM_FLUORESCENT;
+          break;
+        case GST_PHOTOGRAPHY_WB_MODE_SHADE:
+          white_balance = Parameters_WHITE_BALANCE_SHADE;
+          break;
+        default:
+          white_balance = NULL;
+          break;
+      }
+
+      if (white_balance) {
+        gst_ahc_parameters_set_white_balance (params, white_balance);
+        ret = gst_ah_camera_set_parameters (self->camera, params);
+      }
+      gst_ahc_parameters_free (params);
+    }
+  }
+
+  return ret;
+}
+
+static gboolean
+gst_ahc_src_set_colour_tone_mode (GstPhotography * photo,
+    GstPhotographyColorToneMode tone_mode)
+{
+  GstAHCSrc *self = GST_AHC_SRC (photo);
+  gboolean ret = FALSE;
+
+  if (self->camera) {
+    GstAHCParameters *params;
+
+    params = gst_ah_camera_get_parameters (self->camera);
+    if (params) {
+      const gchar *color_effect = NULL;
+
+      switch (tone_mode) {
+        case GST_PHOTOGRAPHY_COLOR_TONE_MODE_NORMAL:
+          color_effect = Parameters_EFFECT_NONE;
+          break;
+        case GST_PHOTOGRAPHY_COLOR_TONE_MODE_SEPIA:
+          color_effect = Parameters_EFFECT_SEPIA;
+          break;
+        case GST_PHOTOGRAPHY_COLOR_TONE_MODE_NEGATIVE:
+          color_effect = Parameters_EFFECT_NEGATIVE;
+          break;
+        case GST_PHOTOGRAPHY_COLOR_TONE_MODE_GRAYSCALE:
+          color_effect = Parameters_EFFECT_MONO;
+          break;
+        case GST_PHOTOGRAPHY_COLOR_TONE_MODE_SOLARIZE:
+          color_effect = Parameters_EFFECT_SOLARIZE;
+          break;
+        case GST_PHOTOGRAPHY_COLOR_TONE_MODE_POSTERIZE:
+          color_effect = Parameters_EFFECT_POSTERIZE;
+          break;
+        case GST_PHOTOGRAPHY_COLOR_TONE_MODE_WHITEBOARD:
+          color_effect = Parameters_EFFECT_WHITEBOARD;
+          break;
+        case GST_PHOTOGRAPHY_COLOR_TONE_MODE_BLACKBOARD:
+          color_effect = Parameters_EFFECT_BLACKBOARD;
+          break;
+        case GST_PHOTOGRAPHY_COLOR_TONE_MODE_AQUA:
+          color_effect = Parameters_EFFECT_AQUA;
+          break;
+        case GST_PHOTOGRAPHY_COLOR_TONE_MODE_NATURAL:
+        case GST_PHOTOGRAPHY_COLOR_TONE_MODE_VIVID:
+        case GST_PHOTOGRAPHY_COLOR_TONE_MODE_COLORSWAP:
+        case GST_PHOTOGRAPHY_COLOR_TONE_MODE_OUT_OF_FOCUS:
+        case GST_PHOTOGRAPHY_COLOR_TONE_MODE_SKY_BLUE:
+        case GST_PHOTOGRAPHY_COLOR_TONE_MODE_GRASS_GREEN:
+        case GST_PHOTOGRAPHY_COLOR_TONE_MODE_SKIN_WHITEN:
+        default:
+          color_effect = NULL;
+          break;
+      }
+
+      if (color_effect) {
+        gst_ahc_parameters_set_color_effect (params, color_effect);
+        ret = gst_ah_camera_set_parameters (self->camera, params);
+      }
+      gst_ahc_parameters_free (params);
+    }
+  }
+
+  return ret;
+}
+
+static gboolean
+gst_ahc_src_set_scene_mode (GstPhotography * photo,
+    GstPhotographySceneMode scene_mode)
+{
+  GstAHCSrc *self = GST_AHC_SRC (photo);
+  gboolean ret = FALSE;
+
+  if (self->camera) {
+    GstAHCParameters *params;
+
+    params = gst_ah_camera_get_parameters (self->camera);
+    if (params) {
+      const gchar *scene = NULL;
+
+      switch (scene_mode) {
+        case GST_PHOTOGRAPHY_SCENE_MODE_PORTRAIT:
+          scene = Parameters_SCENE_MODE_PORTRAIT;
+          break;
+        case GST_PHOTOGRAPHY_SCENE_MODE_LANDSCAPE:
+          scene = Parameters_SCENE_MODE_LANDSCAPE;
+          break;
+        case GST_PHOTOGRAPHY_SCENE_MODE_SPORT:
+          scene = Parameters_SCENE_MODE_SPORTS;
+          break;
+        case GST_PHOTOGRAPHY_SCENE_MODE_NIGHT:
+          scene = Parameters_SCENE_MODE_NIGHT;
+          break;
+        case GST_PHOTOGRAPHY_SCENE_MODE_AUTO:
+          scene = Parameters_SCENE_MODE_AUTO;
+          break;
+        case GST_PHOTOGRAPHY_SCENE_MODE_ACTION:
+          scene = Parameters_SCENE_MODE_ACTION;
+          break;
+        case GST_PHOTOGRAPHY_SCENE_MODE_NIGHT_PORTRAIT:
+          scene = Parameters_SCENE_MODE_NIGHT_PORTRAIT;
+          break;
+        case GST_PHOTOGRAPHY_SCENE_MODE_THEATRE:
+          scene = Parameters_SCENE_MODE_THEATRE;
+          break;
+        case GST_PHOTOGRAPHY_SCENE_MODE_BEACH:
+          scene = Parameters_SCENE_MODE_BEACH;
+          break;
+        case GST_PHOTOGRAPHY_SCENE_MODE_SNOW:
+          scene = Parameters_SCENE_MODE_SNOW;
+          break;
+        case GST_PHOTOGRAPHY_SCENE_MODE_SUNSET:
+          scene = Parameters_SCENE_MODE_SUNSET;
+          break;
+        case GST_PHOTOGRAPHY_SCENE_MODE_STEADY_PHOTO:
+          scene = Parameters_SCENE_MODE_STEADYPHOTO;
+          break;
+        case GST_PHOTOGRAPHY_SCENE_MODE_FIREWORKS:
+          scene = Parameters_SCENE_MODE_FIREWORKS;
+          break;
+        case GST_PHOTOGRAPHY_SCENE_MODE_PARTY:
+          scene = Parameters_SCENE_MODE_PARTY;
+          break;
+        case GST_PHOTOGRAPHY_SCENE_MODE_CANDLELIGHT:
+          scene = Parameters_SCENE_MODE_CANDLELIGHT;
+          break;
+        case GST_PHOTOGRAPHY_SCENE_MODE_BARCODE:
+          scene = Parameters_SCENE_MODE_BARCODE;
+          break;
+        case GST_PHOTOGRAPHY_SCENE_MODE_MANUAL:
+        case GST_PHOTOGRAPHY_SCENE_MODE_CLOSEUP:
+        default:
+          scene = NULL;
+          break;
+      }
+
+      if (scene) {
+        gst_ahc_parameters_set_scene_mode (params, scene);
+        ret = gst_ah_camera_set_parameters (self->camera, params);
+      }
+      gst_ahc_parameters_free (params);
+    }
+  }
+
+  return ret;
+}
+
+static gboolean
+gst_ahc_src_set_flash_mode (GstPhotography * photo,
+    GstPhotographyFlashMode flash_mode)
+{
+  GstAHCSrc *self = GST_AHC_SRC (photo);
+  gboolean ret = FALSE;
+
+  if (self->camera) {
+    GstAHCParameters *params;
+
+    params = gst_ah_camera_get_parameters (self->camera);
+    if (params) {
+      const gchar *flash = NULL;
+
+      switch (flash_mode) {
+        case GST_PHOTOGRAPHY_FLASH_MODE_AUTO:
+          flash = Parameters_FLASH_MODE_AUTO;
+          break;
+        case GST_PHOTOGRAPHY_FLASH_MODE_OFF:
+          flash = Parameters_FLASH_MODE_OFF;
+          break;
+        case GST_PHOTOGRAPHY_FLASH_MODE_ON:
+          flash = Parameters_FLASH_MODE_ON;
+          break;
+        case GST_PHOTOGRAPHY_FLASH_MODE_FILL_IN:
+          flash = Parameters_FLASH_MODE_TORCH;
+          break;
+        case GST_PHOTOGRAPHY_FLASH_MODE_RED_EYE:
+          flash = Parameters_FLASH_MODE_RED_EYE;
+          break;
+        default:
+          flash = NULL;
+          break;
+      }
+
+      if (flash) {
+        gst_ahc_parameters_set_flash_mode (params, flash);
+        ret = gst_ah_camera_set_parameters (self->camera, params);
+      }
+      gst_ahc_parameters_free (params);
+    }
+  }
+
+  return ret;
+}
+
+static gboolean
+gst_ahc_src_set_zoom (GstPhotography * photo, gfloat zoom)
+{
+  GstAHCSrc *self = GST_AHC_SRC (photo);
+  gboolean ret = FALSE;
+
+  if (self->camera) {
+    GstAHCParameters *params;
+
+    params = gst_ah_camera_get_parameters (self->camera);
+    if (params) {
+      GList *zoom_ratios = gst_ahc_parameters_get_zoom_ratios (params);
+      gint max_zoom = gst_ahc_parameters_get_max_zoom (params);
+      gint zoom_idx = -1;
+
+      if (zoom_ratios && g_list_length (zoom_ratios) == (max_zoom + 1)) {
+        gint i;
+        gint value = zoom * 100;
+
+        for (i = 0; i < max_zoom + 1; i++) {
+          gint zoom_value = GPOINTER_TO_INT (g_list_nth_data (zoom_ratios, i));
+
+          if (value == zoom_value)
+            zoom_idx = i;
+        }
+      }
+
+      if (zoom_idx != -1) {
+        if (self->smooth_zoom &&
+            gst_ahc_parameters_is_smooth_zoom_supported (params)) {
+          // First, we need to cancel any previous smooth zoom operation
+          gst_ah_camera_stop_smooth_zoom (self->camera);
+          ret = gst_ah_camera_start_smooth_zoom (self->camera, zoom_idx);
+        } else {
+          gst_ahc_parameters_set_zoom (params, zoom_idx);
+          ret = gst_ah_camera_set_parameters (self->camera, params);
+        }
+      }
+
+      gst_ahc_parameters_zoom_ratios_free (zoom_ratios);
+      gst_ahc_parameters_free (params);
+    }
+  }
+
+  return ret;
+}
+
+static gboolean
+gst_ahc_src_set_flicker_mode (GstPhotography * photo,
+    GstPhotographyFlickerReductionMode flicker_mode)
+{
+  GstAHCSrc *self = GST_AHC_SRC (photo);
+  gboolean ret = FALSE;
+
+  if (self->camera) {
+    GstAHCParameters *params;
+
+    params = gst_ah_camera_get_parameters (self->camera);
+    if (params) {
+      const gchar *antibanding = NULL;
+
+      switch (flicker_mode) {
+        case GST_PHOTOGRAPHY_FLICKER_REDUCTION_OFF:
+          antibanding = Parameters_ANTIBANDING_OFF;
+          break;
+        case GST_PHOTOGRAPHY_FLICKER_REDUCTION_50HZ:
+          antibanding = Parameters_ANTIBANDING_50HZ;
+          break;
+        case GST_PHOTOGRAPHY_FLICKER_REDUCTION_60HZ:
+          antibanding = Parameters_ANTIBANDING_60HZ;
+          break;
+        case GST_PHOTOGRAPHY_FLICKER_REDUCTION_AUTO:
+          antibanding = Parameters_ANTIBANDING_AUTO;
+          break;
+        default:
+          antibanding = NULL;
+          break;
+      }
+
+      if (antibanding) {
+        gst_ahc_parameters_set_antibanding (params, antibanding);
+        ret = gst_ah_camera_set_parameters (self->camera, params);
+      }
+      gst_ahc_parameters_free (params);
+    }
+  }
+
+  return ret;
+}
+
+static gboolean
+gst_ahc_src_set_focus_mode (GstPhotography * photo,
+    GstPhotographyFocusMode focus_mode)
+{
+  GstAHCSrc *self = GST_AHC_SRC (photo);
+  gboolean ret = FALSE;
+
+  if (self->camera) {
+    GstAHCParameters *params;
+
+    params = gst_ah_camera_get_parameters (self->camera);
+    if (params) {
+      const gchar *focus = NULL;
+
+      switch (focus_mode) {
+        case GST_PHOTOGRAPHY_FOCUS_MODE_AUTO:
+          focus = Parameters_FOCUS_MODE_AUTO;
+          break;
+        case GST_PHOTOGRAPHY_FOCUS_MODE_MACRO:
+          focus = Parameters_FOCUS_MODE_MACRO;
+          break;
+        case GST_PHOTOGRAPHY_FOCUS_MODE_INFINITY:
+          focus = Parameters_FOCUS_MODE_INFINITY;
+          break;
+        case GST_PHOTOGRAPHY_FOCUS_MODE_HYPERFOCAL:
+          focus = Parameters_FOCUS_MODE_FIXED;
+          break;
+        case GST_PHOTOGRAPHY_FOCUS_MODE_CONTINUOUS_NORMAL:
+          focus = Parameters_FOCUS_MODE_CONTINUOUS_PICTURE;
+          break;
+        case GST_PHOTOGRAPHY_FOCUS_MODE_CONTINUOUS_EXTENDED:
+          focus = Parameters_FOCUS_MODE_CONTINUOUS_VIDEO;
+          break;
+        case GST_PHOTOGRAPHY_FOCUS_MODE_EXTENDED:
+          focus = Parameters_FOCUS_MODE_EDOF;
+          break;
+        case GST_PHOTOGRAPHY_FOCUS_MODE_PORTRAIT:
+        default:
+          focus = NULL;
+          break;
+      }
+
+      if (focus) {
+        gst_ahc_parameters_set_focus_mode (params, focus);
+        ret = gst_ah_camera_set_parameters (self->camera, params);
+      }
+      gst_ahc_parameters_free (params);
+    }
+  }
+
+  return ret;
+}
+
+static GstPhotographyCaps
+gst_ahc_src_get_capabilities (GstPhotography * photo)
+{
+  GstAHCSrc *self = GST_AHC_SRC (photo);
+
+  GstPhotographyCaps caps = GST_PHOTOGRAPHY_CAPS_EV_COMP |
+      GST_PHOTOGRAPHY_CAPS_WB_MODE | GST_PHOTOGRAPHY_CAPS_TONE |
+      GST_PHOTOGRAPHY_CAPS_SCENE | GST_PHOTOGRAPHY_CAPS_FLASH |
+      GST_PHOTOGRAPHY_CAPS_FOCUS | GST_PHOTOGRAPHY_CAPS_ZOOM;
+
+  if (self->camera) {
+    GstAHCParameters *params;
+
+    params = gst_ah_camera_get_parameters (self->camera);
+    if (!gst_ahc_parameters_is_zoom_supported (params))
+      caps &= ~GST_PHOTOGRAPHY_CAPS_ZOOM;
+
+    gst_ahc_parameters_free (params);
+  }
+
+  return caps;
+}
+
+static void
+gst_ahc_src_on_auto_focus (gboolean success, gpointer user_data)
+{
+  GstAHCSrc *self = GST_AHC_SRC (user_data);
+
+  GST_WARNING_OBJECT (self, "Auto focus completed : %d", success);
+  gst_element_post_message (GST_ELEMENT (self),
+      gst_message_new_custom (GST_MESSAGE_ELEMENT, GST_OBJECT (self),
+          gst_structure_new_empty (GST_PHOTOGRAPHY_AUTOFOCUS_DONE)));
+}
+
+static void
+gst_ahc_src_set_autofocus (GstPhotography * photo, gboolean on)
+{
+  GstAHCSrc *self = GST_AHC_SRC (photo);
+
+  if (self->camera) {
+    if (on)
+      gst_ah_camera_auto_focus (self->camera, gst_ahc_src_on_auto_focus, self);
+    else
+      gst_ah_camera_cancel_auto_focus (self->camera);
+  }
+
+}
+
+static gint
+_compare_formats (int f1, int f2)
+{
+  if (f1 == f2)
+    return 0;
+  /* YV12 has priority */
+  if (f1 == ImageFormat_YV12)
+    return -1;
+  if (f2 == ImageFormat_YV12)
+    return 1;
+  /* Then NV21 */
+  if (f1 == ImageFormat_NV21)
+    return -1;
+  if (f2 == ImageFormat_NV21)
+    return 1;
+  /* Then we don't care */
+  return f2 - f1;
+}
+
+static gint
+_compare_sizes (GstAHCSize * s1, GstAHCSize * s2)
+{
+  return ((s2->width * s2->height) - (s1->width * s1->height));
+}
+
+
+static gint
+_compare_ranges (int *r1, int *r2)
+{
+  if (r1[1] == r2[1])
+    /* Smallest range */
+    return (r1[1] - r1[0]) - (r2[1] - r2[0]);
+  else
+    /* Highest fps */
+    return r2[1] - r1[1];
+}
+
+static GstCaps *
+gst_ahc_src_getcaps (GstBaseSrc * src, GstCaps * filter)
+{
+  GstAHCSrc *self = GST_AHC_SRC (src);
+
+  if (self->camera) {
+    GstCaps *ret = gst_caps_new_empty ();
+    GstAHCParameters *params;
+
+    params = gst_ah_camera_get_parameters (self->camera);
+    if (params) {
+      GList *formats, *sizes, *ranges;
+      GList *i, *j, *k;
+      int previous_format = ImageFormat_UNKNOWN;
+
+      formats = gst_ahc_parameters_get_supported_preview_formats (params);
+      formats = g_list_sort (formats, (GCompareFunc) _compare_formats);
+      sizes = gst_ahc_parameters_get_supported_preview_sizes (params);
+      sizes = g_list_sort (sizes, (GCompareFunc) _compare_sizes);
+      ranges = gst_ahc_parameters_get_supported_preview_fps_range (params);
+      ranges = g_list_sort (ranges, (GCompareFunc) _compare_ranges);
+      GST_DEBUG_OBJECT (self, "Supported preview formats:");
+
+      for (i = formats; i; i = i->next) {
+        int f = GPOINTER_TO_INT (i->data);
+        gchar *format_string = NULL;
+        GstStructure *format = NULL;
+
+        /* Ignore duplicates */
+        if (f == previous_format)
+          continue;
+
+        /* Can't use switch/case because the values are not constants */
+        if (f == ImageFormat_NV16) {
+          GST_DEBUG_OBJECT (self, "    NV16 (%d)", f);
+          format_string = g_strdup ("NV16");
+        } else if (f == ImageFormat_NV21) {
+          GST_DEBUG_OBJECT (self, "    NV21 (%d)", f);
+          format_string = g_strdup ("NV21");
+        } else if (f == ImageFormat_RGB_565) {
+          GstVideoFormat vformat;
+          vformat = gst_video_format_from_masks (16, 16, G_LITTLE_ENDIAN,
+              0xf800, 0x07e0, 0x001f, 0x0);
+          GST_DEBUG_OBJECT (self, "    RGB565 (%d)", f);
+          format_string = g_strdup (gst_video_format_to_string (vformat));
+        } else if (f == ImageFormat_YUY2) {
+          GST_DEBUG_OBJECT (self, "    YUY2 (%d)", f);
+          format_string = g_strdup ("YUY2");
+        } else if (f == ImageFormat_YV12) {
+          GST_DEBUG_OBJECT (self, "    YV12 (%d)", f);
+          format_string = g_strdup ("YV12");
+        }
+        previous_format = f;
+
+        if (format_string) {
+          format = gst_structure_new ("video/x-raw",
+              "format", G_TYPE_STRING, format_string, NULL);
+          g_free (format_string);
+        }
+
+        if (format) {
+          for (j = sizes; j; j = j->next) {
+            GstAHCSize *s = j->data;
+            GstStructure *size;
+
+            size = gst_structure_copy (format);
+            gst_structure_set (size, "width", G_TYPE_INT, s->width,
+                "height", G_TYPE_INT, s->height,
+                "interlaced", G_TYPE_BOOLEAN, FALSE,
+                "pixel-aspect-ratio", GST_TYPE_FRACTION, 1, 1, NULL);
+
+            for (k = ranges; k; k = k->next) {
+              int *range = k->data;
+              GstStructure *s;
+
+              s = gst_structure_copy (size);
+              if (range[0] == range[1]) {
+                gst_structure_set (s, "framerate", GST_TYPE_FRACTION,
+                    range[0], 1000, NULL);
+              } else {
+                gst_structure_set (s, "framerate", GST_TYPE_FRACTION_RANGE,
+                    range[0], 1000, range[1], 1000, NULL);
+              }
+              gst_caps_append_structure (ret, s);
+            }
+            gst_structure_free (size);
+          }
+          gst_structure_free (format);
+        }
+      }
+      GST_DEBUG_OBJECT (self, "Supported preview sizes:");
+      for (i = sizes; i; i = i->next) {
+        GstAHCSize *s = i->data;
+
+        GST_DEBUG_OBJECT (self, "    %dx%d", s->width, s->height);
+      }
+      GST_DEBUG_OBJECT (self, "Supported preview fps range:");
+      for (i = ranges; i; i = i->next) {
+        int *range = i->data;
+
+        GST_DEBUG_OBJECT (self, "    [%d, %d]", range[0], range[1]);
+      }
+
+      gst_ahc_parameters_supported_preview_formats_free (formats);
+      gst_ahc_parameters_supported_preview_sizes_free (sizes);
+      gst_ahc_parameters_supported_preview_fps_range_free (ranges);
+      gst_ahc_parameters_free (params);
+    }
+
+    return ret;
+  } else {
+    return NULL;
+  }
+}
+
+static GstCaps *
+gst_ahc_src_fixate (GstBaseSrc * src, GstCaps * caps)
+{
+  GstAHCSrc *self = GST_AHC_SRC (src);
+  GstStructure *s = gst_caps_get_structure (caps, 0);
+
+  GST_DEBUG_OBJECT (self, "Fixating : %" GST_PTR_FORMAT, caps);
+
+  caps = gst_caps_make_writable (caps);
+
+  /* Width/height will be fixed already here, format will
+   * be left for fixation by the default handler.
+   * We only have to fixate framerate here, to the
+   * highest possible framerate.
+   */
+  gst_structure_fixate_field_nearest_fraction (s, "framerate", G_MAXINT, 1);
+
+  caps = GST_BASE_SRC_CLASS (parent_class)->fixate (src, caps);
+
+  return caps;
+}
+
+static gboolean
+gst_ahc_src_setcaps (GstBaseSrc * src, GstCaps * caps)
+{
+  GstAHCSrc *self = GST_AHC_SRC (src);
+  gboolean ret = FALSE;
+  GstAHCParameters *params = NULL;
+
+  if (!self->camera) {
+    GST_WARNING_OBJECT (self, "setcaps called without a camera available");
+    goto end;
+  }
+
+  params = gst_ah_camera_get_parameters (self->camera);
+  if (params) {
+    GstStructure *s;
+    const gchar *format_str = NULL;
+    GstVideoFormat format;
+    gint fmt;
+    gint width, height, fps_n, fps_d, buffer_size;
+    GList *ranges, *l;
+    gint range_size = G_MAXINT;
+
+    s = gst_caps_get_structure (caps, 0);
+
+    format_str = gst_structure_get_string (s, "format");
+    format = gst_video_format_from_string (format_str);
+
+    gst_structure_get_int (s, "width", &width);
+    gst_structure_get_int (s, "height", &height);
+    gst_structure_get_fraction (s, "framerate", &fps_n, &fps_d);
+
+    fps_n *= 1000 / fps_d;
+
+    /* Select the best range that contains our framerate.
+     * We *must* set a range of those returned by the camera
+     * according to the API docs and can't use a subset of any
+     * of those ranges.
+     * We chose the smallest range that contains the target
+     * framerate.
+     */
+    self->fps_max = self->fps_min = 0;
+    ranges = gst_ahc_parameters_get_supported_preview_fps_range (params);
+    ranges = g_list_sort (ranges, (GCompareFunc) _compare_ranges);
+    for (l = ranges; l; l = l->next) {
+      int *range = l->data;
+
+      if (fps_n >= range[0] && fps_n <= range[1] &&
+          range_size > (range[1] - range[0])) {
+        self->fps_min = range[0];
+        self->fps_max = range[1];
+        range_size = range[1] - range[0];
+      }
+    }
+    gst_ahc_parameters_supported_preview_fps_range_free (ranges);
+    if (self->fps_max == 0) {
+      GST_ERROR_OBJECT (self, "Couldn't find an applicable FPS range");
+      goto end;
+    }
+
+    switch (format) {
+      case GST_VIDEO_FORMAT_YV12:
+        fmt = ImageFormat_YV12;
+        break;
+      case GST_VIDEO_FORMAT_NV21:
+        fmt = ImageFormat_NV21;
+        break;
+      case GST_VIDEO_FORMAT_YUY2:
+        fmt = ImageFormat_YUY2;
+        break;
+      case GST_VIDEO_FORMAT_RGB16:
+        fmt = ImageFormat_RGB_565;
+        break;
+        /* GST_VIDEO_FORMAT_NV16 doesn't exist */
+        //case GST_VIDEO_FORMAT_NV16:
+        //fmt = ImageFormat_NV16;
+        //break;
+      default:
+        fmt = ImageFormat_UNKNOWN;
+        break;
+    }
+
+    if (fmt == ImageFormat_UNKNOWN) {
+      GST_WARNING_OBJECT (self, "unsupported video format (%s)", format_str);
+      goto end;
+    }
+
+    gst_ahc_parameters_set_preview_size (params, width, height);
+    gst_ahc_parameters_set_preview_format (params, fmt);
+    gst_ahc_parameters_set_preview_fps_range (params, self->fps_min,
+        self->fps_max);
+
+    GST_DEBUG_OBJECT (self, "Setting camera parameters : %d %dx%d @ [%f, %f]",
+        fmt, width, height, self->fps_min / 1000.0, self->fps_max / 1000.0);
+
+    if (!gst_ah_camera_set_parameters (self->camera, params)) {
+      GST_WARNING_OBJECT (self, "Unable to set video parameters");
+      goto end;
+    }
+
+    self->width = width;
+    self->height = height;
+    self->format = fmt;
+    buffer_size = width * height *
+        ((double) gst_ag_imageformat_get_bits_per_pixel (fmt) / 8);
+
+    if (buffer_size > self->buffer_size) {
+      JNIEnv *env = gst_amc_jni_get_env ();
+      gint i;
+
+      for (i = 0; i < NUM_CALLBACK_BUFFERS; i++) {
+        jbyteArray array = (*env)->NewByteArray (env, buffer_size);
+
+        if (array) {
+          gst_ah_camera_add_callback_buffer (self->camera, array);
+          (*env)->DeleteLocalRef (env, array);
+        }
+      }
+    }
+    self->buffer_size = buffer_size;
+
+    GST_DEBUG_OBJECT (self, "setting buffer w:%d h:%d buffer_size: %d",
+        self->width, self->height, self->buffer_size);
+
+    ret = TRUE;
+  }
+
+end:
+  if (params)
+    gst_ahc_parameters_free (params);
+
+  if (ret && self->start) {
+    GST_DEBUG_OBJECT (self, "Starting preview");
+    ret = gst_ah_camera_start_preview (self->camera);
+    if (ret) {
+      /* Need to reset callbacks after every startPreview */
+      gst_ah_camera_set_preview_callback_with_buffer (self->camera,
+          gst_ahc_src_on_preview_frame, self);
+      gst_ah_camera_set_error_callback (self->camera, gst_ahc_src_on_error,
+          self);
+      self->start = FALSE;
+    }
+  }
+  return ret;
+}
+
+typedef struct
+{
+  GstAHCSrc *self;
+  jbyteArray array;
+  jbyte *data;
+} FreeFuncBuffer;
+
+static void
+gst_ahc_src_buffer_free_func (gpointer priv)
+{
+  FreeFuncBuffer *data = (FreeFuncBuffer *) priv;
+  GstAHCSrc *self = data->self;
+  JNIEnv *env = gst_amc_jni_get_env ();
+
+  g_mutex_lock (&self->mutex);
+
+  GST_DEBUG_OBJECT (self, "release %p->%p", data, data->array);
+
+  (*env)->ReleaseByteArrayElements (env, data->array, data->data, JNI_ABORT);
+  if (self->camera)
+    gst_ah_camera_add_callback_buffer (self->camera, data->array);
+
+  (*env)->DeleteGlobalRef (env, data->array);
+
+  g_slice_free (FreeFuncBuffer, data);
+
+  g_mutex_unlock (&self->mutex);
+  gst_object_unref (self);
+}
+
+static void
+_data_queue_item_free (GstDataQueueItem * item)
+{
+  GST_DEBUG ("release  %p", item->object);
+
+  gst_buffer_unref (GST_BUFFER (item->object));
+  g_slice_free (GstDataQueueItem, item);
+}
+
+static void
+gst_ahc_src_on_preview_frame (jbyteArray array, gpointer user_data)
+{
+  GstAHCSrc *self = GST_AHC_SRC (user_data);
+  JNIEnv *env = gst_amc_jni_get_env ();
+  GstBuffer *buffer;
+  GstDataQueueItem *item = NULL;
+  FreeFuncBuffer *malloc_data = NULL;
+  GstClockTime timestamp = GST_CLOCK_TIME_NONE;
+  GstClockTime duration = 0;
+  GstClock *clock;
+  gboolean queued = FALSE;
+
+  g_mutex_lock (&self->mutex);
+
+  if (array == NULL) {
+    GST_DEBUG_OBJECT (self, "Size of array in queue is too small, dropping it");
+    goto done;
+  }
+
+  if ((clock = GST_ELEMENT_CLOCK (self))) {
+    GstClockTime base_time = GST_ELEMENT_CAST (self)->base_time;
+    GstClockTime current_ts;
+
+    gst_object_ref (clock);
+    current_ts = gst_clock_get_time (clock) - base_time;
+    gst_object_unref (clock);
+    if (GST_CLOCK_TIME_IS_VALID (self->previous_ts)) {
+      timestamp = self->previous_ts;
+      duration = current_ts - self->previous_ts;
+      self->previous_ts = current_ts;
+    } else {
+      /* Drop the first buffer */
+      self->previous_ts = current_ts;
+      gst_ah_camera_add_callback_buffer (self->camera, array);
+      GST_DEBUG_OBJECT (self, "dropping the first buffer");
+      goto done;
+    }
+  } else {
+    GST_DEBUG_OBJECT (self, "element clock hasn't created yet.");
+    gst_ah_camera_add_callback_buffer (self->camera, array);
+    goto done;
+  }
+
+  GST_DEBUG_OBJECT (self, "Received data buffer %p", array);
+
+  malloc_data = g_slice_new0 (FreeFuncBuffer);
+  malloc_data->self = gst_object_ref (self);
+  malloc_data->array = (*env)->NewGlobalRef (env, array);
+  malloc_data->data = (*env)->GetByteArrayElements (env, array, NULL);
+
+  buffer =
+      gst_buffer_new_wrapped_full (GST_MEMORY_FLAG_READONLY, malloc_data->data,
+      self->buffer_size, 0, self->buffer_size, malloc_data,
+      gst_ahc_src_buffer_free_func);
+  GST_BUFFER_DURATION (buffer) = duration;
+  GST_BUFFER_PTS (buffer) = timestamp;
+
+  GST_DEBUG_OBJECT (self, "creating wrapped buffer (size: %d)",
+      self->buffer_size);
+
+  item = g_slice_new0 (GstDataQueueItem);
+  item->object = GST_MINI_OBJECT (buffer);
+  item->size = gst_buffer_get_size (buffer);
+  item->duration = GST_BUFFER_DURATION (buffer);
+  item->visible = TRUE;
+  item->destroy = (GDestroyNotify) _data_queue_item_free;
+
+  GST_DEBUG_OBJECT (self, "wrapping jni array %p->%p %p->%p", item,
+      item->object, malloc_data, malloc_data->array);
+
+  queued = gst_data_queue_push (self->queue, item);
+
+done:
+  g_mutex_unlock (&self->mutex);
+
+  if (item && !queued) {
+    GST_INFO_OBJECT (self, "could not add buffer to queue");
+    /* Can't add buffer to queue. Must be flushing. */
+    _data_queue_item_free (item);
+  }
+}
+
+static void
+gst_ahc_src_on_error (gint error, gpointer user_data)
+{
+  GstAHCSrc *self = GST_AHC_SRC (user_data);
+
+  GST_WARNING_OBJECT (self, "Received error code : %d", error);
+}
+
+static gboolean
+gst_ahc_src_open (GstAHCSrc * self)
+{
+  GST_DEBUG_OBJECT (self, "Opening camera");
+
+  self->camera = gst_ah_camera_open (self->device);
+
+  if (self->camera) {
+    GST_DEBUG_OBJECT (self, "Opened camera");
+
+    self->texture = gst_ag_surfacetexture_new (0);
+    gst_ah_camera_set_preview_texture (self->camera, self->texture);
+    self->buffer_size = 0;
+  } else {
+    gint num_cams = gst_ah_camera_get_number_of_cameras ();
+    if (num_cams > 0 && self->device < num_cams) {
+      GST_ELEMENT_ERROR (self, RESOURCE, NOT_FOUND,
+          ("Unable to open device '%d'.", self->device), GST_ERROR_SYSTEM);
+    } else if (num_cams > 0) {
+      GST_ELEMENT_ERROR (self, RESOURCE, NOT_FOUND,
+          ("Device '%d' does not exist.", self->device), GST_ERROR_SYSTEM);
+    } else {
+      GST_ELEMENT_ERROR (self, RESOURCE, NOT_FOUND,
+          ("There are no cameras available on this device."), GST_ERROR_SYSTEM);
+    }
+  }
+
+  return (self->camera != NULL);
+}
+
+static void
+gst_ahc_src_close (GstAHCSrc * self)
+{
+  if (self->camera) {
+    gst_ah_camera_set_error_callback (self->camera, NULL, NULL);
+    gst_ah_camera_set_preview_callback_with_buffer (self->camera, NULL, NULL);
+    gst_ah_camera_release (self->camera);
+    gst_ah_camera_free (self->camera);
+  }
+  self->camera = NULL;
+
+  if (self->texture) {
+    gst_ag_surfacetexture_release (self->texture);
+    gst_ag_surfacetexture_free (self->texture);
+  }
+  self->texture = NULL;
+}
+
+static GstStateChangeReturn
+gst_ahc_src_change_state (GstElement * element, GstStateChange transition)
+{
+  GstStateChangeReturn ret = GST_STATE_CHANGE_SUCCESS;
+  GstAHCSrc *self = GST_AHC_SRC (element);
+
+  switch (transition) {
+    case GST_STATE_CHANGE_NULL_TO_READY:
+      if (!gst_ahc_src_open (self))
+        return GST_STATE_CHANGE_FAILURE;
+      break;
+    default:
+      break;
+  }
+
+  ret = GST_ELEMENT_CLASS (parent_class)->change_state (element, transition);
+
+  switch (transition) {
+    case GST_STATE_CHANGE_READY_TO_NULL:
+      gst_ahc_src_close (self);
+      break;
+    default:
+      break;
+  }
+
+  return ret;
+}
+
+static gboolean
+gst_ahc_src_start (GstBaseSrc * bsrc)
+{
+  GstAHCSrc *self = GST_AHC_SRC (bsrc);
+
+  GST_DEBUG_OBJECT (self, "Starting preview");
+  if (self->camera) {
+    self->previous_ts = GST_CLOCK_TIME_NONE;
+    self->fps_min = self->fps_max = self->width = self->height = 0;
+    self->format = ImageFormat_UNKNOWN;
+    self->start = TRUE;
+
+    return TRUE;
+  } else {
+    return FALSE;
+  }
+}
+
+static gboolean
+gst_ahc_src_stop (GstBaseSrc * bsrc)
+{
+  GstAHCSrc *self = GST_AHC_SRC (bsrc);
+
+  GST_DEBUG_OBJECT (self, "Stopping preview");
+  if (self->camera) {
+    gst_data_queue_flush (self->queue);
+    self->start = FALSE;
+    gst_ah_camera_set_error_callback (self->camera, NULL, NULL);
+    return gst_ah_camera_stop_preview (self->camera);
+  }
+  return TRUE;
+}
+
+static gboolean
+gst_ahc_src_unlock (GstBaseSrc * bsrc)
+{
+  GstAHCSrc *self = GST_AHC_SRC (bsrc);
+
+  GST_DEBUG_OBJECT (self, "Unlocking create");
+  gst_data_queue_set_flushing (self->queue, TRUE);
+
+  return TRUE;
+}
+
+static gboolean
+gst_ahc_src_unlock_stop (GstBaseSrc * bsrc)
+{
+  GstAHCSrc *self = GST_AHC_SRC (bsrc);
+
+  GST_DEBUG_OBJECT (self, "Stopping unlock");
+  gst_data_queue_set_flushing (self->queue, FALSE);
+
+  return TRUE;
+}
+
+static GstFlowReturn
+gst_ahc_src_create (GstPushSrc * src, GstBuffer ** buffer)
+{
+  GstAHCSrc *self = GST_AHC_SRC (src);
+  GstDataQueueItem *item;
+
+  if (!gst_data_queue_pop (self->queue, &item)) {
+    GST_INFO_OBJECT (self, "empty queue");
+    return GST_FLOW_FLUSHING;
+  }
+
+  GST_DEBUG_OBJECT (self, "creating buffer %p->%p", item, item->object);
+
+  *buffer = GST_BUFFER (item->object);
+  g_slice_free (GstDataQueueItem, item);
+
+  return GST_FLOW_OK;
+}
+
+static gboolean
+gst_ahc_src_query (GstBaseSrc * bsrc, GstQuery * query)
+{
+  GstAHCSrc *self = GST_AHC_SRC (bsrc);
+
+  switch (GST_QUERY_TYPE (query)) {
+    case GST_QUERY_LATENCY:{
+      GstClockTime min;
+
+      /* Allow of 1 frame latency base on the longer frame duration */
+      gst_query_parse_latency (query, NULL, &min, NULL);
+      min = gst_util_uint64_scale (GST_SECOND, 1000, self->fps_min);
+      GST_DEBUG_OBJECT (self,
+          "Reporting latency min: %" GST_TIME_FORMAT, GST_TIME_ARGS (min));
+      gst_query_set_latency (query, TRUE, min, min);
+
+      return TRUE;
+      break;
+    }
+    default:
+      return GST_BASE_SRC_CLASS (parent_class)->query (bsrc, query);
+      break;
+  }
+
+  g_assert_not_reached ();
+}
diff --git a/sys/androidmedia/gstahcsrc.h b/sys/androidmedia/gstahcsrc.h
new file mode 100644
index 0000000..fc24989
--- /dev/null
+++ b/sys/androidmedia/gstahcsrc.h
@@ -0,0 +1,89 @@
+/* GStreamer android.hardware.Camera Source
+ *
+ * Copyright (C) 2012, Cisco Systems, Inc.
+ *   Author: Youness Alaoui <youness.alaoui@collabora.co.uk>
+ *
+ * Copyright (C) 2015, Collabora Ltd.
+ *   Author: Justin Kim <justin.kim@collabora.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __GST_AHC_SRC_H__
+#define __GST_AHC_SRC_H__
+
+#include <gst/gst.h>
+#include <gst/base/gstpushsrc.h>
+#include <gst/base/gstdataqueue.h>
+
+#include "gst-android-hardware-camera.h"
+
+G_BEGIN_DECLS
+
+#define GST_TYPE_AHC_SRC \
+  (gst_ahc_src_get_type())
+#define GST_AHC_SRC(obj) \
+  (G_TYPE_CHECK_INSTANCE_CAST((obj), GST_TYPE_AHC_SRC, GstAHCSrc))
+#define GST_AHC_SRC_CLASS(klass) \
+  (G_TYPE_CHECK_CLASS_CAST((klass), GST_TYPE_AHC_SRC, GstAHCSrcClass))
+#define GST_IS_AHC_SRC(obj) \
+  (G_TYPE_CHECK_INSTANCE_TYPE((obj), GST_TYPE_AHC_SRC))
+#define GST_IS_AHC_SRC_CLASS(klass) \
+  (G_TYPE_CHECK_CLASS_TYPE((klass), GST_TYPE_AHC_SRC))
+
+
+typedef struct _GstAHCSrc GstAHCSrc;
+typedef struct _GstAHCSrcClass GstAHCSrcClass;
+
+/**
+ * GstAHCSrc:
+ *
+ * Opaque data structure.
+ */
+struct _GstAHCSrc
+{
+  /*< private >*/
+  GstPushSrc parent;
+
+  GstAHCamera *camera;
+  GstAGSurfaceTexture *texture;
+  GList *data;
+  GstDataQueue *queue;
+  gint buffer_size;
+  GstClockTime previous_ts;
+  gint format;
+  gint width;
+  gint height;
+  gint fps_min;
+  gint fps_max;
+  gboolean start;
+  gboolean smooth_zoom;
+  GMutex mutex;
+
+  /* Properties */
+  gint device;
+};
+
+struct _GstAHCSrcClass
+{
+  GstPushSrcClass parent_class;
+  GList *probe_properties;
+};
+
+GType gst_ahc_src_get_type (void);
+
+G_END_DECLS
+#endif /* __GST_AHC_SRC_H__ */
diff --git a/sys/androidmedia/gstamc.c b/sys/androidmedia/gstamc.c
index 078e28a..c86e519 100644
--- a/sys/androidmedia/gstamc.c
+++ b/sys/androidmedia/gstamc.c
@@ -29,6 +29,8 @@
 #define orc_memcpy memcpy
 #endif
 
+#include "gstahcsrc.h"
+
 #include "gstamc.h"
 #include "gstamc-constants.h"
 
@@ -185,8 +187,8 @@
 }
 
 gboolean
-gst_amc_codec_configure (GstAmcCodec * codec, GstAmcFormat * format, gint flags,
-    GError ** err)
+gst_amc_codec_configure (GstAmcCodec * codec, GstAmcFormat * format,
+    jobject surface, gint flags, GError ** err)
 {
   JNIEnv *env;
 
@@ -195,7 +197,7 @@
 
   env = gst_amc_jni_get_env ();
   return gst_amc_jni_call_void_method (env, err, codec->object,
-      media_codec.configure, format->object, NULL, NULL, flags);
+      media_codec.configure, format->object, surface, NULL, flags);
 }
 
 GstAmcFormat *
@@ -360,28 +362,33 @@
 
   if (!media_codec.get_output_buffer) {
     g_return_val_if_fail (index < codec->n_output_buffers && index >= 0, NULL);
-    return gst_amc_buffer_copy (&codec->output_buffers[index]);
+    if (codec->output_buffers[index].object)
+      return gst_amc_buffer_copy (&codec->output_buffers[index]);
+    else
+      return NULL;
   }
 
   if (!gst_amc_jni_call_object_method (env, err, codec->object,
           media_codec.get_output_buffer, &buffer, index))
     goto done;
 
-  ret = g_new0 (GstAmcBuffer, 1);
-  ret->object = gst_amc_jni_object_make_global (env, buffer);
-  if (!ret->object) {
-    gst_amc_jni_set_error (env, err, GST_LIBRARY_ERROR,
-        GST_LIBRARY_ERROR_FAILED, "Failed to create global buffer reference");
-    goto error;
-  }
+  if (buffer != NULL) {
+    ret = g_new0 (GstAmcBuffer, 1);
+    ret->object = gst_amc_jni_object_make_global (env, buffer);
+    if (!ret->object) {
+      gst_amc_jni_set_error (env, err, GST_LIBRARY_ERROR,
+          GST_LIBRARY_ERROR_FAILED, "Failed to create global buffer reference");
+      goto error;
+    }
 
-  ret->data = (*env)->GetDirectBufferAddress (env, ret->object);
-  if (!ret->data) {
-    gst_amc_jni_set_error (env, err, GST_LIBRARY_ERROR,
-        GST_LIBRARY_ERROR_FAILED, "Failed to get buffer address");
-    goto error;
+    ret->data = (*env)->GetDirectBufferAddress (env, ret->object);
+    if (!ret->data) {
+      gst_amc_jni_set_error (env, err, GST_LIBRARY_ERROR,
+          GST_LIBRARY_ERROR_FAILED, "Failed to get buffer address");
+      goto error;
+    }
+    ret->size = (*env)->GetDirectBufferCapacity (env, ret->object);
   }
-  ret->size = (*env)->GetDirectBufferCapacity (env, ret->object);
 
 done:
 
@@ -436,28 +443,33 @@
 
   if (!media_codec.get_input_buffer) {
     g_return_val_if_fail (index < codec->n_input_buffers && index >= 0, NULL);
-    return gst_amc_buffer_copy (&codec->input_buffers[index]);
+    if (codec->input_buffers[index].object)
+      return gst_amc_buffer_copy (&codec->input_buffers[index]);
+    else
+      return NULL;
   }
 
   if (!gst_amc_jni_call_object_method (env, err, codec->object,
           media_codec.get_input_buffer, &buffer, index))
     goto done;
 
-  ret = g_new0 (GstAmcBuffer, 1);
-  ret->object = gst_amc_jni_object_make_global (env, buffer);
-  if (!ret->object) {
-    gst_amc_jni_set_error (env, err, GST_LIBRARY_ERROR,
-        GST_LIBRARY_ERROR_FAILED, "Failed to create global buffer reference");
-    goto error;
-  }
+  if (buffer != NULL) {
+    ret = g_new0 (GstAmcBuffer, 1);
+    ret->object = gst_amc_jni_object_make_global (env, buffer);
+    if (!ret->object) {
+      gst_amc_jni_set_error (env, err, GST_LIBRARY_ERROR,
+          GST_LIBRARY_ERROR_FAILED, "Failed to create global buffer reference");
+      goto error;
+    }
 
-  ret->data = (*env)->GetDirectBufferAddress (env, ret->object);
-  if (!ret->data) {
-    gst_amc_jni_set_error (env, err, GST_LIBRARY_ERROR,
-        GST_LIBRARY_ERROR_FAILED, "Failed to get buffer address");
-    goto error;
+    ret->data = (*env)->GetDirectBufferAddress (env, ret->object);
+    if (!ret->data) {
+      gst_amc_jni_set_error (env, err, GST_LIBRARY_ERROR,
+          GST_LIBRARY_ERROR_FAILED, "Failed to get buffer address");
+      goto error;
+    }
+    ret->size = (*env)->GetDirectBufferCapacity (env, ret->object);
   }
-  ret->size = (*env)->GetDirectBufferCapacity (env, ret->object);
 
 done:
 
@@ -591,7 +603,7 @@
 
 gboolean
 gst_amc_codec_release_output_buffer (GstAmcCodec * codec, gint index,
-    GError ** err)
+    gboolean render, GError ** err)
 {
   JNIEnv *env;
 
@@ -599,7 +611,7 @@
 
   env = gst_amc_jni_get_env ();
   return gst_amc_jni_call_void_method (env, err, codec->object,
-      media_codec.release_output_buffer, index, JNI_FALSE);
+      media_codec.release_output_buffer, index, render);
 }
 
 GstAmcFormat *
@@ -1567,6 +1579,7 @@
       goto next_codec;
     }
     gst_codec_info->is_encoder = is_encoder;
+    gst_codec_info->gl_output_only = FALSE;
 
     supported_types =
         (*env)->CallObjectMethod (env, codec_info, get_supported_types_id);
@@ -1710,12 +1723,13 @@
           goto next_supported_type;
         }
 
-        if (!ignore_unknown_color_formats
-            && !accepted_color_formats (gst_codec_type, is_encoder)) {
-          GST_ERROR ("%s codec has unknown color formats, ignoring",
-              is_encoder ? "Encoder" : "Decoder");
-          valid_codec = FALSE;
-          goto next_supported_type;
+        if (!accepted_color_formats (gst_codec_type, is_encoder)) {
+          if (!ignore_unknown_color_formats) {
+            gst_codec_info->gl_output_only = TRUE;
+            GST_WARNING
+                ("%s %s has unknown color formats, only direct rendering will be supported",
+                gst_codec_type->mime, is_encoder ? "encoder" : "decoder");
+          }
         }
       }
 
@@ -2004,8 +2018,10 @@
   for (i = 0; i < type->n_color_formats; i++) {
     gboolean found = FALSE;
     /* We ignore this one */
-    if (type->color_formats[i] == COLOR_FormatAndroidOpaque)
+    if (type->color_formats[i] == COLOR_FormatAndroidOpaque) {
       all--;
+      continue;
+    }
 
     for (j = 0; j < G_N_ELEMENTS (color_format_mapping_table); j++) {
       if (color_format_mapping_table[j].color_format == type->color_formats[i]) {
@@ -2016,7 +2032,7 @@
     }
 
     if (!found) {
-      GST_DEBUG ("Unknown color format 0x%x, ignoring", type->color_formats[i]);
+      GST_ERROR ("Unknown color format 0x%x, ignoring", type->color_formats[i]);
     }
   }
 
@@ -2292,8 +2308,9 @@
     goto done;
   }
 
-  GST_DEBUG ("Sizes not equal (%d vs %d), doing slow line-by-line copying",
-      cbuffer_info->size, gst_buffer_get_size (vbuffer));
+  GST_DEBUG ("Sizes not equal (%d vs %" G_GSIZE_FORMAT
+      "), doing slow line-by-line copying", cbuffer_info->size,
+      gst_buffer_get_size (vbuffer));
 
   /* Different video format, try to convert */
   switch (cinfo->color_format) {
@@ -3311,7 +3328,34 @@
   if (!register_codecs (plugin))
     return FALSE;
 
+  if (!gst_android_graphics_surfacetexture_init ()) {
+    GST_ERROR ("Failed to init android surface texture");
+    return FALSE;
+  }
+
+  if (!gst_android_graphics_imageformat_init ()) {
+    GST_ERROR ("Failed to init android image format");
+    goto failed_surfacetexture;
+  }
+
+  if (!gst_android_hardware_camera_init ()) {
+    goto failed_graphics_imageformat;
+  }
+
+  if (!gst_element_register (plugin, "ahcsrc", GST_RANK_NONE, GST_TYPE_AHC_SRC)) {
+    GST_ERROR ("Failed to register android camera source");
+    goto failed_hardware_camera;
+  }
+
   return TRUE;
+
+failed_hardware_camera:
+  gst_android_hardware_camera_deinit ();
+failed_graphics_imageformat:
+  gst_android_graphics_imageformat_deinit ();
+failed_surfacetexture:
+  gst_android_graphics_surfacetexture_deinit ();
+  return FALSE;
 }
 
 void
@@ -3458,7 +3502,8 @@
               gst_amc_color_format_to_video_format (codec_info,
               type->mime, type->color_formats[j]);
           if (format == GST_VIDEO_FORMAT_UNKNOWN) {
-            GST_WARNING ("Unknown color format 0x%08x", type->color_formats[j]);
+            GST_WARNING ("Unknown color format 0x%08x for codec %s",
+                type->color_formats[j], type->mime);
             continue;
           }
 
diff --git a/sys/androidmedia/gstamc.h b/sys/androidmedia/gstamc.h
index a3fb9bc..383eb42 100644
--- a/sys/androidmedia/gstamc.h
+++ b/sys/androidmedia/gstamc.h
@@ -53,6 +53,7 @@
 struct _GstAmcCodecInfo {
   gchar *name;
   gboolean is_encoder;
+  gboolean gl_output_only;
   GstAmcCodecType *supported_types;
   gint n_supported_types;
 };
@@ -82,7 +83,7 @@
 GstAmcCodec * gst_amc_codec_new (const gchar *name, GError **err);
 void gst_amc_codec_free (GstAmcCodec * codec);
 
-gboolean gst_amc_codec_configure (GstAmcCodec * codec, GstAmcFormat * format, gint flags, GError **err);
+gboolean gst_amc_codec_configure (GstAmcCodec * codec, GstAmcFormat * format, jobject surface, gint flags, GError **err);
 GstAmcFormat * gst_amc_codec_get_output_format (GstAmcCodec * codec, GError **err);
 
 gboolean gst_amc_codec_start (GstAmcCodec * codec, GError **err);
@@ -97,7 +98,7 @@
 gint gst_amc_codec_dequeue_output_buffer (GstAmcCodec * codec, GstAmcBufferInfo *info, gint64 timeoutUs, GError **err);
 
 gboolean gst_amc_codec_queue_input_buffer (GstAmcCodec * codec, gint index, const GstAmcBufferInfo *info, GError **err);
-gboolean gst_amc_codec_release_output_buffer (GstAmcCodec * codec, gint index, GError **err);
+gboolean gst_amc_codec_release_output_buffer (GstAmcCodec * codec, gint index, gboolean render, GError **err);
 
 
 GstAmcFormat * gst_amc_format_new_audio (const gchar *mime, gint sample_rate, gint channels, GError **err);
@@ -166,8 +167,10 @@
 guint32 gst_amc_audio_channel_mask_from_positions (GstAudioChannelPosition *positions, gint channels);
 void gst_amc_codec_info_to_caps (const GstAmcCodecInfo * codec_info, GstCaps **sink_caps, GstCaps **src_caps);
 
-#define GST_ELEMENT_ERROR_FROM_ERROR(el, err) G_STMT_START { \
-  gchar *__dbg = g_strdup (err->message);                               \
+#define GST_ELEMENT_ERROR_FROM_ERROR(el, err) G_STMT_START {            \
+  gchar *__dbg;                                                         \
+  g_assert (err != NULL);                                               \
+  __dbg = g_strdup (err->message);                                      \
   GST_WARNING_OBJECT (el, "error: %s", __dbg);                          \
   gst_element_message_full (GST_ELEMENT(el), GST_MESSAGE_ERROR,         \
     err->domain, err->code,                                             \
@@ -175,8 +178,10 @@
   g_clear_error (&err); \
 } G_STMT_END
 
-#define GST_ELEMENT_WARNING_FROM_ERROR(el, err) G_STMT_START { \
-  gchar *__dbg = g_strdup (err->message);                               \
+#define GST_ELEMENT_WARNING_FROM_ERROR(el, err) G_STMT_START {          \
+  gchar *__dbg;                                                         \
+  g_assert (err != NULL);                                               \
+  __dbg = g_strdup (err->message);                                      \
   GST_WARNING_OBJECT (el, "error: %s", __dbg);                          \
   gst_element_message_full (GST_ELEMENT(el), GST_MESSAGE_WARNING,       \
     err->domain, err->code,                                             \
@@ -184,6 +189,8 @@
   g_clear_error (&err); \
 } G_STMT_END
 
+GST_DEBUG_CATEGORY_EXTERN (gst_amc_debug);
+
 G_END_DECLS
 
 #endif /* __GST_AMC_H__ */
diff --git a/sys/androidmedia/gstamcaudiodec.c b/sys/androidmedia/gstamcaudiodec.c
index bc81907..9a34c37 100644
--- a/sys/androidmedia/gstamcaudiodec.c
+++ b/sys/androidmedia/gstamcaudiodec.c
@@ -493,8 +493,10 @@
   is_eos = ! !(buffer_info.flags & BUFFER_FLAG_END_OF_STREAM);
 
   buf = gst_amc_codec_get_output_buffer (self->codec, idx, &err);
-  if (!buf)
+  if (err)
     goto failed_to_get_output_buffer;
+  else if (!buf)
+    goto got_null_output_buffer;
 
   if (buffer_info.size > 0) {
     GstBuffer *outbuf;
@@ -573,7 +575,7 @@
     }
   }
 
-  if (!gst_amc_codec_release_output_buffer (self->codec, idx, &err)) {
+  if (!gst_amc_codec_release_output_buffer (self->codec, idx, FALSE, &err)) {
     if (self->flushing) {
       g_clear_error (&err);
       goto flushing;
@@ -699,11 +701,27 @@
     g_mutex_unlock (&self->drain_lock);
     return;
   }
+
+got_null_output_buffer:
+  {
+    GST_ELEMENT_ERROR (self, LIBRARY, SETTINGS, (NULL),
+        ("Got no output buffer"));
+    gst_pad_push_event (GST_AUDIO_DECODER_SRC_PAD (self), gst_event_new_eos ());
+    gst_pad_pause_task (GST_AUDIO_DECODER_SRC_PAD (self));
+    self->downstream_flow_ret = GST_FLOW_ERROR;
+    GST_AUDIO_DECODER_STREAM_UNLOCK (self);
+    g_mutex_lock (&self->drain_lock);
+    self->draining = FALSE;
+    g_cond_broadcast (&self->drain_cond);
+    g_mutex_unlock (&self->drain_lock);
+    return;
+  }
+
 invalid_buffer_size:
   {
     GST_ELEMENT_ERROR (self, LIBRARY, FAILED, (NULL),
         ("Invalid buffer size %u (bfp %d)", buffer_info.size, self->info.bpf));
-    gst_amc_codec_release_output_buffer (self->codec, idx, &err);
+    gst_amc_codec_release_output_buffer (self->codec, idx, FALSE, &err);
     if (err && !self->flushing)
       GST_ELEMENT_WARNING_FROM_ERROR (self, err);
     g_clear_error (&err);
@@ -722,7 +740,7 @@
   {
     GST_ELEMENT_ERROR (self, LIBRARY, SETTINGS, (NULL),
         ("Failed to allocate output buffer"));
-    gst_amc_codec_release_output_buffer (self->codec, idx, &err);
+    gst_amc_codec_release_output_buffer (self->codec, idx, FALSE, &err);
     if (err && !self->flushing)
       GST_ELEMENT_WARNING_FROM_ERROR (self, err);
     g_clear_error (&err);
@@ -927,7 +945,7 @@
       GST_STR_NULL (format_string));
   g_free (format_string);
 
-  if (!gst_amc_codec_configure (self->codec, format, 0, &err)) {
+  if (!gst_amc_codec_configure (self->codec, format, NULL, 0, &err)) {
     GST_ERROR_OBJECT (self, "Failed to configure codec");
     GST_ELEMENT_ERROR_FROM_ERROR (self, err);
     return FALSE;
@@ -1110,8 +1128,10 @@
     /* Copy the buffer content in chunks of size as requested
      * by the port */
     buf = gst_amc_codec_get_input_buffer (self->codec, idx, &err);
-    if (!buf)
+    if (err)
       goto failed_to_get_input_buffer;
+    else if (!buf)
+      goto got_null_input_buffer;
 
     memset (&buffer_info, 0, sizeof (buffer_info));
     buffer_info.offset = 0;
@@ -1182,6 +1202,16 @@
       gst_buffer_unref (inbuf);
     return GST_FLOW_ERROR;
   }
+got_null_input_buffer:
+  {
+    GST_ELEMENT_ERROR (self, LIBRARY, SETTINGS, (NULL),
+        ("Got no input buffer"));
+    if (minfo.data)
+      gst_buffer_unmap (inbuf, &minfo);
+    if (inbuf)
+      gst_buffer_unref (inbuf);
+    return GST_FLOW_ERROR;
+  }
 dequeue_error:
   {
     GST_ELEMENT_ERROR_FROM_ERROR (self, err);
diff --git a/sys/androidmedia/gstamcsurface.c b/sys/androidmedia/gstamcsurface.c
new file mode 100644
index 0000000..33dc6a7
--- /dev/null
+++ b/sys/androidmedia/gstamcsurface.c
@@ -0,0 +1,193 @@
+/*
+ * Copyright (C) 2013, Fluendo S.A.
+ *   Author: Andoni Morales <amorales@fluendo.com>
+ *
+ * Copyright (C) 2015, Collabora Ltd.
+ *   Author: Matthieu Bouron <matthieu.bouron@collabora.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation
+ * version 2.1 of the License.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301 USA
+ *
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include "gstjniutils.h"
+#include "gstamcsurface.h"
+
+G_DEFINE_TYPE (GstAmcSurface, gst_amc_surface, G_TYPE_OBJECT);
+
+static gpointer parent_class = NULL;
+static void gst_amc_surface_dispose (GObject * object);
+
+static gboolean
+_cache_java_class (GstAmcSurfaceClass * klass, GError ** err)
+{
+  JNIEnv *env;
+
+  gst_amc_jni_initialize ();
+
+  env = gst_amc_jni_get_env ();
+
+  klass->jklass = gst_amc_jni_get_class (env, err, "android/view/Surface");
+  if (!klass->jklass) {
+    return FALSE;
+  }
+
+  klass->constructor =
+      gst_amc_jni_get_method_id (env, err, klass->jklass, "<init>",
+      "(Landroid/graphics/SurfaceTexture;)V");
+  if (!klass->constructor) {
+    goto error;
+  }
+
+  klass->is_valid =
+      gst_amc_jni_get_method_id (env, err, klass->jklass, "isValid", "()Z");
+  if (!klass->is_valid) {
+    goto error;
+  }
+
+  klass->release =
+      gst_amc_jni_get_method_id (env, err, klass->jklass, "release", "()V");
+  if (!klass->release) {
+    goto error;
+  }
+
+  klass->describe_contents =
+      gst_amc_jni_get_method_id (env, err, klass->jklass, "describeContents",
+      "()I");
+  if (!klass->describe_contents) {
+    goto error;
+  }
+
+  return TRUE;
+
+error:
+  gst_amc_jni_object_unref (env, klass->jklass);
+  return FALSE;
+}
+
+static void
+gst_amc_surface_class_init (GstAmcSurfaceClass * klass)
+{
+  GError *err = NULL;
+  GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
+
+  parent_class = g_type_class_peek_parent (klass);
+  gobject_class->dispose = gst_amc_surface_dispose;
+
+  if (!_cache_java_class (klass, &err)) {
+    g_log (G_LOG_DOMAIN, G_LOG_LEVEL_CRITICAL,
+        "Could not cache java class android/view/Surface: %s", err->message);
+    g_clear_error (&err);
+  }
+}
+
+static void
+gst_amc_surface_init (GstAmcSurface * self)
+{
+  /* initialize the object */
+}
+
+static void
+gst_amc_surface_dispose (GObject * object)
+{
+  GstAmcSurface *self;
+  JNIEnv *env;
+  GError *err = NULL;
+
+  self = GST_AMC_SURFACE (object);
+  env = gst_amc_jni_get_env ();
+
+  if (!gst_amc_surface_release (self, &err)) {
+    if (err) {
+      GST_ERROR ("Error: %s", err->message);
+    }
+  }
+
+  if (self->jobject) {
+    gst_amc_jni_object_unref (env, self->jobject);
+  }
+
+  if (self->texture != NULL) {
+    g_object_unref (self->texture);
+    self->texture = NULL;
+  }
+
+  G_OBJECT_CLASS (parent_class)->dispose (object);
+}
+
+GstAmcSurface *
+gst_amc_surface_new (GstAmcSurfaceTexture * texture, GError ** err)
+{
+  GstAmcSurface *surface;
+  GstAmcSurfaceClass *klass;
+  JNIEnv *env;
+
+  surface = g_object_new (GST_TYPE_AMC_SURFACE, NULL);
+  env = gst_amc_jni_get_env ();
+  klass = GST_AMC_SURFACE_GET_CLASS (surface);
+
+  surface->jobject = gst_amc_jni_new_object (env, err, TRUE, klass->jklass,
+      klass->constructor, texture->jobject);
+  if (surface->jobject == NULL) {
+    g_object_unref (surface);
+    return NULL;
+  }
+
+  surface->texture = g_object_ref (texture);
+  return surface;
+}
+
+gboolean
+gst_amc_surface_is_valid (GstAmcSurface * self, gboolean * result,
+    GError ** err)
+{
+  JNIEnv *env;
+  GstAmcSurfaceClass *klass;
+
+  env = gst_amc_jni_get_env ();
+  klass = GST_AMC_SURFACE_GET_CLASS (self);
+
+  return gst_amc_jni_call_boolean_method (env, err, self->jobject,
+      klass->is_valid, result);
+}
+
+gboolean
+gst_amc_surface_release (GstAmcSurface * self, GError ** err)
+{
+  JNIEnv *env;
+  GstAmcSurfaceClass *klass;
+
+  env = gst_amc_jni_get_env ();
+  klass = GST_AMC_SURFACE_GET_CLASS (self);
+
+  return gst_amc_jni_call_void_method (env, err, self->jobject, klass->release);
+}
+
+gboolean
+gst_amc_surface_describe_contents (GstAmcSurface * self, gint * result,
+    GError ** err)
+{
+  JNIEnv *env;
+  GstAmcSurfaceClass *klass;
+
+  env = gst_amc_jni_get_env ();
+  klass = GST_AMC_SURFACE_GET_CLASS (self);
+
+  return gst_amc_jni_call_int_method (env, err, self->jobject,
+      klass->describe_contents, result);
+}
diff --git a/sys/androidmedia/gstamcsurface.h b/sys/androidmedia/gstamcsurface.h
new file mode 100644
index 0000000..21f9969
--- /dev/null
+++ b/sys/androidmedia/gstamcsurface.h
@@ -0,0 +1,81 @@
+/*
+ * Copyright (C) 2013, Fluendo S.A.
+ *   Author: Andoni Morales <amorales@fluendo.com>
+ *
+ * Copyright (C) 2015, Collabora Ltd.
+ *   Author: Matthieu Bouron <matthieu.bouron@collabora.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation
+ * version 2.1 of the License.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301 USA
+ *
+ */
+
+#ifndef __GST_AMC_SURFACE_H__
+#define __GST_AMC_SURFACE_H__
+
+#include <glib-object.h>
+#include <jni.h>
+#include "gstamcsurfacetexture.h"
+
+G_BEGIN_DECLS
+
+#define GST_TYPE_AMC_SURFACE                  (gst_amc_surface_get_type ())
+#define GST_AMC_SURFACE(obj)                  (G_TYPE_CHECK_INSTANCE_CAST ((obj), GST_TYPE_AMC_SURFACE, GstAmcSurface))
+#define GST_IS_AMC_SURFACE(obj)               (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GST_TYPE_AMC_SURFACE))
+#define GST_AMC_SURFACE_CLASS(klass)          (G_TYPE_CHECK_CLASS_CAST ((klass), GST_TYPE_AMC_SURFACE, GstAmcSurfaceClass))
+#define GST_IS_AMC_SURFACE_CLASS(klass)       (G_TYPE_CHECK_CLASS_TYPE ((klass), GST_TYPE_AMC_SURFACE))
+#define GST_AMC_SURFACE_GET_CLASS(obj)        (G_TYPE_INSTANCE_GET_CLASS ((obj), GST_TYPE_AMC_SURFACE, GstAmcSurfaceClass))
+
+typedef struct _GstAmcSurface        GstAmcSurface;
+typedef struct _GstAmcSurfaceClass   GstAmcSurfaceClass;
+
+struct _GstAmcSurface
+{
+  GObject parent_instance;
+
+  /* instance members */
+  jobject jobject;
+  GstAmcSurfaceTexture *texture;
+};
+
+struct _GstAmcSurfaceClass
+{
+  GObjectClass parent_class;
+
+  /* class members */
+  jclass jklass;
+  jmethodID constructor;
+  jmethodID is_valid;
+  jmethodID release;
+  jmethodID describe_contents;
+};
+
+GType gst_amc_surface_get_type (void);
+
+GstAmcSurface * gst_amc_surface_new           (GstAmcSurfaceTexture *texture,
+                                              GError ** err);
+
+gboolean gst_amc_surface_is_valid             (GstAmcSurface *surface,
+                                              gboolean * result,
+                                              GError ** err);
+
+gboolean gst_amc_surface_release              (GstAmcSurface *surface,
+                                              GError ** err);
+
+gboolean gst_amc_surface_describe_contents    (GstAmcSurface *surface,
+                                              gint * result,
+                                              GError ** err);
+
+G_END_DECLS
+#endif
diff --git a/sys/androidmedia/gstamcsurfacetexture.c b/sys/androidmedia/gstamcsurfacetexture.c
new file mode 100644
index 0000000..43c3142
--- /dev/null
+++ b/sys/androidmedia/gstamcsurfacetexture.c
@@ -0,0 +1,318 @@
+/*
+ * Copyright (C) 2013, Fluendo S.A.
+ *   Author: Andoni Morales <amorales@fluendo.com>
+ *
+ * Copyright (C) 2014, Collabora Ltd.
+ *   Author: Matthieu Bouron <matthieu.bouron@collabora.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation
+ * version 2.1 of the License.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301 USA
+ *
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include "gstjniutils.h"
+#include "gstamcsurfacetexture.h"
+
+G_DEFINE_TYPE (GstAmcSurfaceTexture, gst_amc_surface_texture, G_TYPE_OBJECT);
+
+static gpointer parent_class = NULL;
+static void gst_amc_surface_texture_dispose (GObject * object);
+
+static gboolean
+_cache_java_class (GstAmcSurfaceTextureClass * klass, GError ** err)
+{
+  JNIEnv *env;
+
+  gst_amc_jni_initialize ();
+  env = gst_amc_jni_get_env ();
+
+  klass->jklass =
+      gst_amc_jni_get_class (env, err, "android/graphics/SurfaceTexture");
+  if (!klass->jklass) {
+    return FALSE;
+  }
+
+  klass->constructor =
+      gst_amc_jni_get_method_id (env, err, klass->jklass, "<init>", "(I)V");
+  if (!klass->constructor) {
+    goto error;
+  }
+
+  klass->set_on_frame_available_listener =
+      gst_amc_jni_get_method_id (env, err, klass->jklass,
+      "setOnFrameAvailableListener",
+      "(Landroid/graphics/SurfaceTexture$OnFrameAvailableListener;)V");
+
+  klass->set_default_buffer_size =
+      gst_amc_jni_get_method_id (env, err, klass->jklass,
+      "setDefaultBufferSize", "(II)V");
+  if (!klass->set_default_buffer_size) {
+    goto error;
+  }
+
+  klass->update_tex_image =
+      gst_amc_jni_get_method_id (env, err, klass->jklass, "updateTexImage",
+      "()V");
+  if (!klass->update_tex_image) {
+    goto error;
+  }
+
+  klass->detach_from_gl_context =
+      gst_amc_jni_get_method_id (env, err, klass->jklass, "detachFromGLContext",
+      "()V");
+  if (!klass->detach_from_gl_context) {
+    goto error;
+  }
+
+  klass->attach_to_gl_context =
+      gst_amc_jni_get_method_id (env, err, klass->jklass, "attachToGLContext",
+      "(I)V");
+  if (!klass->attach_to_gl_context) {
+    goto error;
+  }
+
+  klass->get_transform_matrix =
+      gst_amc_jni_get_method_id (env, err, klass->jklass, "getTransformMatrix",
+      "([F)V");
+  if (!klass->get_transform_matrix) {
+    goto error;
+  }
+
+  klass->get_timestamp =
+      gst_amc_jni_get_method_id (env, err, klass->jklass, "getTimestamp",
+      "()J");
+  if (!klass->get_timestamp) {
+    goto error;
+  }
+
+  klass->release =
+      gst_amc_jni_get_method_id (env, err, klass->jklass, "release", "()V");
+  if (!klass->release) {
+    goto error;
+  }
+
+  return TRUE;
+
+error:
+  gst_amc_jni_object_unref (env, klass->constructor);
+  return FALSE;
+}
+
+static void
+gst_amc_surface_texture_init (GstAmcSurfaceTexture * self)
+{
+}
+
+static void
+gst_amc_surface_texture_class_init (GstAmcSurfaceTextureClass * klass)
+{
+  GError *err = NULL;
+  GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
+
+  parent_class = g_type_class_peek_parent (klass);
+  gobject_class->dispose = gst_amc_surface_texture_dispose;
+
+  if (!_cache_java_class (klass, &err)) {
+    g_log (G_LOG_DOMAIN, G_LOG_LEVEL_CRITICAL,
+        "Could not cache java class android/graphics/SurfaceTexture: %s",
+        err->message);
+    g_clear_error (&err);
+  }
+}
+
+static void
+gst_amc_surface_texture_dispose (GObject * object)
+{
+  GstAmcSurfaceTexture *self;
+  JNIEnv *env;
+  GError *err = NULL;
+
+  self = GST_AMC_SURFACE_TEXTURE (object);
+  env = gst_amc_jni_get_env ();
+
+  if (!gst_amc_surface_texture_release (self, &err)) {
+    GST_ERROR ("Could not release surface texture: %s", err->message);
+    g_clear_error (&err);
+  }
+
+  if (self->jobject) {
+    gst_amc_jni_object_unref (env, self->jobject);
+  }
+  G_OBJECT_CLASS (parent_class)->dispose (object);
+}
+
+GstAmcSurfaceTexture *
+gst_amc_surface_texture_new (GError ** err)
+{
+  GstAmcSurfaceTexture *texture = NULL;
+  GstAmcSurfaceTextureClass *klass;
+  JNIEnv *env;
+
+  texture = g_object_new (GST_TYPE_AMC_SURFACE_TEXTURE, NULL);
+  klass = GST_AMC_SURFACE_TEXTURE_GET_CLASS (texture);
+  env = gst_amc_jni_get_env ();
+
+  texture->texture_id = 0;
+
+  texture->jobject = gst_amc_jni_new_object (env, err, TRUE, klass->jklass,
+      klass->constructor, texture->texture_id);
+  if (texture->jobject == NULL) {
+    goto error;
+  }
+
+  if (!gst_amc_surface_texture_detach_from_gl_context (texture, err)) {
+    goto error;
+  }
+
+  return texture;
+
+error:
+  if (texture)
+    g_object_unref (texture);
+  return NULL;
+}
+
+gboolean
+gst_amc_surface_texture_set_default_buffer_size (GstAmcSurfaceTexture * self,
+    gint width, gint height, GError ** err)
+{
+  JNIEnv *env;
+  GstAmcSurfaceTextureClass *klass;
+
+  env = gst_amc_jni_get_env ();
+  klass = GST_AMC_SURFACE_TEXTURE_GET_CLASS (self);
+
+  return gst_amc_jni_call_void_method (env, err, self->jobject,
+      klass->set_default_buffer_size, width, height);
+}
+
+gboolean
+gst_amc_surface_texture_update_tex_image (GstAmcSurfaceTexture * self,
+    GError ** err)
+{
+  JNIEnv *env;
+  GstAmcSurfaceTextureClass *klass;
+
+  env = gst_amc_jni_get_env ();
+  klass = GST_AMC_SURFACE_TEXTURE_GET_CLASS (self);
+
+  return gst_amc_jni_call_void_method (env, err, self->jobject,
+      klass->update_tex_image);
+}
+
+gboolean
+gst_amc_surface_texture_detach_from_gl_context (GstAmcSurfaceTexture * self,
+    GError ** err)
+{
+  JNIEnv *env;
+  gboolean ret;
+  GstAmcSurfaceTextureClass *klass;
+
+  env = gst_amc_jni_get_env ();
+  klass = GST_AMC_SURFACE_TEXTURE_GET_CLASS (self);
+
+  ret =
+      gst_amc_jni_call_void_method (env, err, self->jobject,
+      klass->detach_from_gl_context);
+  self->texture_id = 0;
+  return ret;
+}
+
+gboolean
+gst_amc_surface_texture_attach_to_gl_context (GstAmcSurfaceTexture * self,
+    gint texture_id, GError ** err)
+{
+  JNIEnv *env;
+  gboolean ret;
+  GstAmcSurfaceTextureClass *klass;
+
+  env = gst_amc_jni_get_env ();
+  klass = GST_AMC_SURFACE_TEXTURE_GET_CLASS (self);
+
+  ret =
+      gst_amc_jni_call_void_method (env, err, self->jobject,
+      klass->attach_to_gl_context, texture_id);
+  self->texture_id = texture_id;
+  return ret;
+}
+
+gboolean
+gst_amc_surface_texture_get_transform_matrix (GstAmcSurfaceTexture * self,
+    const gfloat * matrix, GError ** err)
+{
+  JNIEnv *env;
+  gboolean ret;
+  GstAmcSurfaceTextureClass *klass;
+  /* 4x4 Matrix */
+  jsize size = 16;
+  jfloatArray floatarray;
+
+  env = gst_amc_jni_get_env ();
+  klass = GST_AMC_SURFACE_TEXTURE_GET_CLASS (self);
+
+  floatarray = (*env)->NewFloatArray (env, size);
+  ret =
+      gst_amc_jni_call_void_method (env, err, self->jobject,
+      klass->get_transform_matrix, floatarray);
+  if (ret) {
+    (*env)->GetFloatArrayRegion (env, floatarray, 0, size, (jfloat *) matrix);
+    (*env)->DeleteLocalRef (env, floatarray);
+  }
+
+  return ret;
+}
+
+gboolean
+gst_amc_surface_texture_get_timestamp (GstAmcSurfaceTexture * self,
+    gint64 * result, GError ** err)
+{
+  JNIEnv *env;
+  GstAmcSurfaceTextureClass *klass;
+
+  env = gst_amc_jni_get_env ();
+  klass = GST_AMC_SURFACE_TEXTURE_GET_CLASS (self);
+
+  return gst_amc_jni_call_long_method (env, err, self->jobject,
+      klass->get_timestamp, result);
+}
+
+gboolean
+gst_amc_surface_texture_release (GstAmcSurfaceTexture * self, GError ** err)
+{
+  JNIEnv *env;
+  GstAmcSurfaceTextureClass *klass;
+
+  env = gst_amc_jni_get_env ();
+  klass = GST_AMC_SURFACE_TEXTURE_GET_CLASS (self);
+
+  return gst_amc_jni_call_void_method (env, err, self->jobject, klass->release);
+}
+
+gboolean
+gst_amc_surface_texture_set_on_frame_available_listener (GstAmcSurfaceTexture *
+    self, jobject listener, GError ** err)
+{
+  JNIEnv *env;
+  GstAmcSurfaceTextureClass *klass;
+
+  env = gst_amc_jni_get_env ();
+  klass = GST_AMC_SURFACE_TEXTURE_GET_CLASS (self);
+
+  return gst_amc_jni_call_void_method (env, err, self->jobject,
+      klass->set_on_frame_available_listener, listener);
+}
diff --git a/sys/androidmedia/gstamcsurfacetexture.h b/sys/androidmedia/gstamcsurfacetexture.h
new file mode 100644
index 0000000..0d6ebf1
--- /dev/null
+++ b/sys/androidmedia/gstamcsurfacetexture.h
@@ -0,0 +1,106 @@
+/*
+ * Copyright (C) 2013, Fluendo S.A.
+ *   Author: Andoni Morales <amorales@fluendo.com>
+ *
+ * Copyright (C) 2014, Collabora Ltd.
+ *   Author: Matthieu Bouron <matthieu.bouron@collabora.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation
+ * version 2.1 of the License.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301 USA
+ *
+ */
+
+#ifndef __GST_AMC_SURFACE_TEXTURE_H__
+#define __GST_AMC_SURFACE_TEXTURE_H__
+
+#include <glib.h>
+#include <glib-object.h>
+#include <jni.h>
+
+G_BEGIN_DECLS
+
+#define GST_TYPE_AMC_SURFACE_TEXTURE                  (gst_amc_surface_texture_get_type ())
+#define GST_AMC_SURFACE_TEXTURE(obj)                  (G_TYPE_CHECK_INSTANCE_CAST ((obj), GST_TYPE_AMC_SURFACE_TEXTURE, GstAmcSurfaceTexture))
+#define GST_IS_AMC_SURFACE_TEXTURE(obj)               (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GST_TYPE_AMC_SURFACE_TEXTURE))
+#define GST_AMC_SURFACE_TEXTURE_CLASS(klass)          (G_TYPE_CHECK_CLASS_CAST ((klass), GST_TYPE_AMC_SURFACE_TEXTURE, GstAmcSurfaceTextureClass))
+#define GST_IS_AMC_SURFACE_TEXTURE_CLASS(klass)       (G_TYPE_CHECK_CLASS_TYPE ((klass), GST_TYPE_AMC_SURFACE_TEXTURE))
+#define GST_AMC_SURFACE_TEXTURE_GET_CLASS(obj)        (G_TYPE_INSTANCE_GET_CLASS ((obj), GST_TYPE_AMC_SURFACE_TEXTURE, GstAmcSurfaceTextureClass))
+
+typedef struct _GstAmcSurfaceTexture        GstAmcSurfaceTexture;
+typedef struct _GstAmcSurfaceTextureClass   GstAmcSurfaceTextureClass;
+
+struct _GstAmcSurfaceTexture
+{
+  GObject parent_instance;
+
+  /* instance members */
+  gint texture_id;
+  jobject jobject;
+};
+
+struct _GstAmcSurfaceTextureClass
+{
+  GObjectClass parent_class;
+
+  /* class members */
+  gint texture_id;
+
+  jclass jklass;
+  jmethodID constructor;
+  jmethodID set_on_frame_available_listener;
+  jmethodID set_default_buffer_size;
+  jmethodID update_tex_image;
+  jmethodID detach_from_gl_context;
+  jmethodID attach_to_gl_context;
+  jmethodID get_transform_matrix;
+  jmethodID get_timestamp;
+  jmethodID release;
+};
+
+GType gst_amc_surface_texture_get_type                   (void);
+
+GstAmcSurfaceTexture * gst_amc_surface_texture_new       (GError ** err);
+
+gboolean gst_amc_surface_texture_set_default_buffer_size (GstAmcSurfaceTexture *texture,
+                                                         gint width,
+                                                         gint height,
+                                                         GError ** err);
+
+gboolean gst_amc_surface_texture_update_tex_image        (GstAmcSurfaceTexture *texture,
+                                                         GError ** err);
+
+gboolean gst_amc_surface_texture_detach_from_gl_context  (GstAmcSurfaceTexture *texture,
+                                                         GError ** err);
+
+gboolean gst_amc_surface_texture_attach_to_gl_context    (GstAmcSurfaceTexture *texture,
+                                                         gint index,
+                                                         GError ** err);
+
+gboolean gst_amc_surface_texture_get_transform_matrix    (GstAmcSurfaceTexture *texture,
+                                                         const gfloat *matrix,
+                                                         GError ** err);
+
+gboolean gst_amc_surface_texture_get_timestamp           (GstAmcSurfaceTexture *texture,
+                                                         gint64 * result,
+                                                         GError ** err);
+
+gboolean gst_amc_surface_texture_release                 (GstAmcSurfaceTexture *texture,
+                                                         GError ** err);
+
+gboolean gst_amc_surface_texture_set_on_frame_available_listener (GstAmcSurfaceTexture * self,
+                                                                 jobject listener,
+                                                                 GError ** err);
+
+G_END_DECLS
+#endif
diff --git a/sys/androidmedia/gstamcvideodec.c b/sys/androidmedia/gstamcvideodec.c
index 48b0dcd..7c99be0 100644
--- a/sys/androidmedia/gstamcvideodec.c
+++ b/sys/androidmedia/gstamcvideodec.c
@@ -11,6 +11,14 @@
  *
  * Copyright (C) 2015, Sebastian Dröge <sebastian@centricular.com>
  *
+ * Copyright (C) 2014-2015, Collabora Ltd.
+ *   Author: Matthieu Bouron <matthieu.bouron@gcollabora.com>
+ *
+ * Copyright (C) 2015, Edward Hervey
+ *   Author: Edward Hervey <bilboed@gmail.com>
+ *
+ * Copyright (C) 2015, Matthew Waters <matthew@centricular.com>
+ *
  * This library is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Lesser General Public
  * License as published by the Free Software Foundation
@@ -32,7 +40,9 @@
 #endif
 
 #include <gst/gst.h>
+#include <gst/gl/gl.h>
 #include <gst/video/gstvideometa.h>
+#include <gst/video/gstvideoaffinetransformationmeta.h>
 #include <gst/video/gstvideopool.h>
 #include <string.h>
 
@@ -58,12 +68,146 @@
   g_clear_error (&err); \
 } G_STMT_END
 
+#if GLIB_SIZEOF_VOID_P == 8
+#define JLONG_TO_GST_AMC_VIDEO_DEC(value) (GstAmcVideoDec *)(value)
+#define GST_AMC_VIDEO_DEC_TO_JLONG(value) (jlong)(value)
+#else
+#define JLONG_TO_GST_AMC_VIDEO_DEC(value) (GstAmcVideoDec *)(jint)(value)
+#define GST_AMC_VIDEO_DEC_TO_JLONG(value) (jlong)(jint)(value)
+#endif
+
 typedef struct _BufferIdentification BufferIdentification;
 struct _BufferIdentification
 {
   guint64 timestamp;
 };
 
+struct gl_sync_result
+{
+  gint refcount;
+  gint64 frame_available_ts;
+  gboolean updated;             /* only every call update_tex_image once */
+  gboolean released;            /* only every call release_output_buffer once */
+  gboolean rendered;            /* whether the release resulted in a render */
+};
+
+static struct gl_sync_result *
+_gl_sync_result_ref (struct gl_sync_result *result)
+{
+  g_assert (result != NULL);
+
+  g_atomic_int_inc (&result->refcount);
+
+  GST_TRACE ("gl_sync result %p ref", result);
+
+  return result;
+}
+
+static void
+_gl_sync_result_unref (struct gl_sync_result *result)
+{
+  g_assert (result != NULL);
+
+  GST_TRACE ("gl_sync result %p unref", result);
+
+  if (g_atomic_int_dec_and_test (&result->refcount)) {
+    GST_TRACE ("freeing gl_sync result %p", result);
+    g_free (result);
+  }
+}
+
+struct gl_sync
+{
+  gint refcount;
+  GstAmcVideoDec *sink;         /* back reference for statistics, lock, cond, etc */
+  gint buffer_idx;              /* idx of the AMC buffer we should render */
+  GstBuffer *buffer;            /* back reference to the buffer */
+  GstGLMemory *oes_mem;         /* where amc is rendering into. The same for every gl_sync */
+  GstAmcSurface *surface;       /* java wrapper for where amc is rendering into */
+  guint gl_frame_no;            /* effectively the frame id */
+  gint64 released_ts;           /* microseconds from g_get_monotonic_time() */
+  struct gl_sync_result *result;
+};
+
+static struct gl_sync *
+_gl_sync_ref (struct gl_sync *sync)
+{
+  g_assert (sync != NULL);
+
+  g_atomic_int_inc (&sync->refcount);
+
+  GST_TRACE ("gl_sync %p ref", sync);
+
+  return sync;
+}
+
+static void
+_gl_sync_unref (struct gl_sync *sync)
+{
+  g_assert (sync != NULL);
+
+  GST_TRACE ("gl_sync %p unref", sync);
+
+  if (g_atomic_int_dec_and_test (&sync->refcount)) {
+    GST_TRACE ("freeing gl_sync %p", sync);
+
+    _gl_sync_result_unref (sync->result);
+
+    g_object_unref (sync->surface);
+    gst_memory_unref ((GstMemory *) sync->oes_mem);
+
+    g_free (sync);
+  }
+}
+
+static gint
+_queue_compare_gl_sync (gconstpointer a, gconstpointer b)
+{
+  const struct gl_sync *sync = a;
+  guint frame = GPOINTER_TO_INT (b);
+
+  return sync->gl_frame_no - frame;
+}
+
+static GList *
+_find_gl_sync_for_frame (GstAmcVideoDec * dec, guint frame)
+{
+  return g_queue_find_custom (dec->gl_queue, GINT_TO_POINTER (frame),
+      (GCompareFunc) _queue_compare_gl_sync);
+}
+
+static void
+_attach_mem_to_context (GstGLContext * context, GstAmcVideoDec * self)
+{
+  GST_TRACE_OBJECT (self, "attaching texture %p id %u to current context",
+      self->surface->texture, self->oes_mem->tex_id);
+  if (!gst_amc_surface_texture_attach_to_gl_context (self->surface->texture,
+          self->oes_mem->tex_id, &self->gl_error)) {
+    GST_ERROR_OBJECT (self, "Failed to attach texture to the GL context");
+    GST_ELEMENT_ERROR_FROM_ERROR (self, self->gl_error);
+  } else {
+    self->gl_mem_attached = TRUE;
+  }
+}
+
+static void
+_dettach_mem_from_context (GstGLContext * context, GstAmcVideoDec * self)
+{
+  if (self->surface) {
+    guint tex_id = self->oes_mem ? self->oes_mem->tex_id : 0;
+
+    GST_TRACE_OBJECT (self, "detaching texture %p id %u from current context",
+        self->surface->texture, tex_id);
+
+    if (!gst_amc_surface_texture_detach_from_gl_context (self->surface->texture,
+            &self->gl_error)) {
+      GST_ERROR_OBJECT (self, "Failed to attach texture to the GL context");
+      GST_ELEMENT_ERROR_FROM_ERROR (self, self->gl_error);
+    }
+  }
+  self->gl_mem_attached = FALSE;
+}
+
 static BufferIdentification *
 buffer_identification_new (GstClockTime timestamp)
 {
@@ -86,6 +230,8 @@
 static GstStateChangeReturn
 gst_amc_video_dec_change_state (GstElement * element,
     GstStateChange transition);
+static void gst_amc_video_dec_set_context (GstElement * element,
+    GstContext * context);
 
 static gboolean gst_amc_video_dec_open (GstVideoDecoder * decoder);
 static gboolean gst_amc_video_dec_close (GstVideoDecoder * decoder);
@@ -99,8 +245,14 @@
 static GstFlowReturn gst_amc_video_dec_finish (GstVideoDecoder * decoder);
 static gboolean gst_amc_video_dec_decide_allocation (GstVideoDecoder * bdec,
     GstQuery * query);
+static gboolean gst_amc_video_dec_src_query (GstVideoDecoder * bdec,
+    GstQuery * query);
 
 static GstFlowReturn gst_amc_video_dec_drain (GstAmcVideoDec * self);
+static gboolean gst_amc_video_dec_check_codec_config (GstAmcVideoDec * self);
+static void
+gst_amc_video_dec_on_frame_available (JNIEnv * env, jobject thiz,
+    long long context, jobject surfaceTexture);
 
 enum
 {
@@ -190,7 +342,7 @@
   GstAmcVideoDecClass *amcvideodec_class = GST_AMC_VIDEO_DEC_CLASS (g_class);
   const GstAmcCodecInfo *codec_info;
   GstPadTemplate *templ;
-  GstCaps *sink_caps, *src_caps;
+  GstCaps *sink_caps, *src_caps, *all_src_caps;
   gchar *longname;
 
   codec_info =
@@ -202,15 +354,27 @@
   amcvideodec_class->codec_info = codec_info;
 
   gst_amc_codec_info_to_caps (codec_info, &sink_caps, &src_caps);
+
+  all_src_caps =
+      gst_caps_from_string ("video/x-raw(" GST_CAPS_FEATURE_MEMORY_GL_MEMORY
+      "), format = (string) RGBA, texture-target = (string) external-oes");
+
+  if (codec_info->gl_output_only) {
+    gst_caps_unref (src_caps);
+  } else {
+    gst_caps_append (all_src_caps, src_caps);
+  }
+
   /* Add pad templates */
   templ =
       gst_pad_template_new ("sink", GST_PAD_SINK, GST_PAD_ALWAYS, sink_caps);
   gst_element_class_add_pad_template (element_class, templ);
   gst_caps_unref (sink_caps);
 
-  templ = gst_pad_template_new ("src", GST_PAD_SRC, GST_PAD_ALWAYS, src_caps);
+  templ =
+      gst_pad_template_new ("src", GST_PAD_SRC, GST_PAD_ALWAYS, all_src_caps);
   gst_element_class_add_pad_template (element_class, templ);
-  gst_caps_unref (src_caps);
+  gst_caps_unref (all_src_caps);
 
   longname = g_strdup_printf ("Android MediaCodec %s", codec_info->name);
   gst_element_class_set_metadata (element_class,
@@ -233,6 +397,8 @@
 
   element_class->change_state =
       GST_DEBUG_FUNCPTR (gst_amc_video_dec_change_state);
+  element_class->set_context =
+      GST_DEBUG_FUNCPTR (gst_amc_video_dec_set_context);
 
   videodec_class->start = GST_DEBUG_FUNCPTR (gst_amc_video_dec_start);
   videodec_class->stop = GST_DEBUG_FUNCPTR (gst_amc_video_dec_stop);
@@ -245,6 +411,7 @@
   videodec_class->finish = GST_DEBUG_FUNCPTR (gst_amc_video_dec_finish);
   videodec_class->decide_allocation =
       GST_DEBUG_FUNCPTR (gst_amc_video_dec_decide_allocation);
+  videodec_class->src_query = GST_DEBUG_FUNCPTR (gst_amc_video_dec_src_query);
 }
 
 static void
@@ -255,6 +422,11 @@
 
   g_mutex_init (&self->drain_lock);
   g_cond_init (&self->drain_cond);
+
+  g_mutex_init (&self->gl_lock);
+  g_cond_init (&self->gl_cond);
+
+  self->gl_queue = g_queue_new ();
 }
 
 static gboolean
@@ -271,6 +443,8 @@
     GST_ELEMENT_ERROR_FROM_ERROR (self, err);
     return FALSE;
   }
+  self->codec_config = AMC_CODEC_CONFIG_NONE;
+
   self->started = FALSE;
   self->flushing = TRUE;
 
@@ -286,6 +460,46 @@
 
   GST_DEBUG_OBJECT (self, "Closing decoder");
 
+  if (self->downstream_supports_gl
+      && self->codec_config == AMC_CODEC_CONFIG_WITH_SURFACE) {
+    g_mutex_lock (&self->gl_lock);
+    GST_INFO_OBJECT (self, "shutting down gl queue pushed %u ready %u "
+        "released %u", self->gl_pushed_frame_count, self->gl_ready_frame_count,
+        self->gl_released_frame_count);
+
+    g_queue_free_full (self->gl_queue, (GDestroyNotify) _gl_sync_unref);
+    self->gl_queue = g_queue_new ();
+    g_mutex_unlock (&self->gl_lock);
+
+    if (self->gl_mem_attached)
+      gst_gl_context_thread_add (self->gl_context,
+          (GstGLContextThreadFunc) _dettach_mem_from_context, self);
+  }
+  self->gl_pushed_frame_count = 0;
+  self->gl_ready_frame_count = 0;
+  self->gl_released_frame_count = 0;
+  self->gl_last_rendered_frame = 0;
+
+  if (self->surface) {
+    gst_object_unref (self->surface);
+    self->surface = NULL;
+  }
+
+  if (self->listener) {
+    JNIEnv *env = gst_amc_jni_get_env ();
+    GError *err = NULL;
+
+    if (!gst_amc_jni_call_void_method (env, &err, self->listener,
+            self->set_context_id, GST_AMC_VIDEO_DEC_TO_JLONG (NULL))) {
+      GST_ERROR_OBJECT (self, "Failed to unset back pointer on the listener. "
+          "crashes/hangs may ensue: %s", err ? err->message : "Unknown");
+      GST_ELEMENT_ERROR_FROM_ERROR (self, err);
+    }
+
+    gst_amc_jni_object_unref (env, self->listener);
+  }
+  self->listener = NULL;
+
   if (self->codec) {
     GError *err = NULL;
 
@@ -295,10 +509,35 @@
 
     gst_amc_codec_free (self->codec);
   }
-  self->codec = NULL;
 
   self->started = FALSE;
   self->flushing = TRUE;
+  self->downstream_supports_gl = FALSE;
+
+  self->codec = NULL;
+  self->codec_config = AMC_CODEC_CONFIG_NONE;
+
+  GST_DEBUG_OBJECT (self, "Freeing GL context: %" GST_PTR_FORMAT,
+      self->gl_context);
+  if (self->gl_context) {
+    gst_object_unref (self->gl_context);
+    self->gl_context = NULL;
+  }
+
+  if (self->oes_mem) {
+    gst_memory_unref ((GstMemory *) self->oes_mem);
+    self->oes_mem = NULL;
+  }
+
+  if (self->gl_display) {
+    gst_object_unref (self->gl_display);
+    self->gl_display = NULL;
+  }
+
+  if (self->other_gl_context) {
+    gst_object_unref (self->other_gl_context);
+    self->other_gl_context = NULL;
+  }
 
   GST_DEBUG_OBJECT (self, "Closed decoder");
 
@@ -313,9 +552,28 @@
   g_mutex_clear (&self->drain_lock);
   g_cond_clear (&self->drain_cond);
 
+  g_mutex_clear (&self->gl_lock);
+  g_cond_clear (&self->gl_cond);
+
+  if (self->gl_queue) {
+    g_queue_free_full (self->gl_queue, (GDestroyNotify) _gl_sync_unref);
+    self->gl_queue = NULL;
+  }
+
   G_OBJECT_CLASS (parent_class)->finalize (object);
 }
 
+static void
+gst_amc_video_dec_set_context (GstElement * element, GstContext * context)
+{
+  GstAmcVideoDec *self = GST_AMC_VIDEO_DEC (element);
+
+  gst_gl_handle_set_context (element, context, &self->gl_display,
+      &self->other_gl_context);
+
+  GST_ELEMENT_CLASS (parent_class)->set_context (element, context);
+}
+
 static GstStateChangeReturn
 gst_amc_video_dec_change_state (GstElement * element, GstStateChange transition)
 {
@@ -327,6 +585,10 @@
       GST_STATE_CHANGE_FAILURE);
   self = GST_AMC_VIDEO_DEC (element);
 
+  GST_DEBUG_OBJECT (element, "changing state: %s => %s",
+      gst_element_state_get_name (GST_STATE_TRANSITION_CURRENT (transition)),
+      gst_element_state_get_name (GST_STATE_TRANSITION_NEXT (transition)));
+
   switch (transition) {
     case GST_STATE_CHANGE_NULL_TO_READY:
       break;
@@ -339,9 +601,11 @@
       break;
     case GST_STATE_CHANGE_PAUSED_TO_READY:
       self->flushing = TRUE;
-      gst_amc_codec_flush (self->codec, &err);
-      if (err)
-        GST_ELEMENT_WARNING_FROM_ERROR (self, err);
+      if (self->started) {
+        gst_amc_codec_flush (self->codec, &err);
+        if (err)
+          GST_ELEMENT_WARNING_FROM_ERROR (self, err);
+      }
       g_mutex_lock (&self->drain_lock);
       self->draining = FALSE;
       g_cond_broadcast (&self->drain_cond);
@@ -366,8 +630,6 @@
       self->downstream_flow_ret = GST_FLOW_FLUSHING;
       self->started = FALSE;
       break;
-    case GST_STATE_CHANGE_READY_TO_NULL:
-      break;
     default:
       break;
   }
@@ -464,6 +726,25 @@
 }
 
 static gboolean
+gst_amc_video_dec_check_codec_config (GstAmcVideoDec * self)
+{
+  gboolean ret = (self->codec_config == AMC_CODEC_CONFIG_NONE
+      || (self->codec_config == AMC_CODEC_CONFIG_WITH_SURFACE
+          && self->downstream_supports_gl)
+      || (self->codec_config == AMC_CODEC_CONFIG_WITHOUT_SURFACE
+          && !self->downstream_supports_gl));
+
+  if (!ret) {
+    GST_ERROR_OBJECT
+        (self,
+        "Codec configuration (%d) is not compatible with downstream which %s support GL output",
+        self->codec_config, self->downstream_supports_gl ? "does" : "does not");
+  }
+
+  return ret;
+}
+
+static gboolean
 gst_amc_video_dec_set_src_caps (GstAmcVideoDec * self, GstAmcFormat * format)
 {
   GstVideoCodecState *output_state;
@@ -524,9 +805,13 @@
     return FALSE;
   }
 
-  gst_format =
-      gst_amc_color_format_to_video_format (klass->codec_info, mime,
-      color_format);
+  if (self->codec_config == AMC_CODEC_CONFIG_WITH_SURFACE) {
+    gst_format = GST_VIDEO_FORMAT_RGBA;
+  } else {
+    gst_format =
+        gst_amc_color_format_to_video_format (klass->codec_info, mime,
+        color_format);
+  }
 
   if (gst_format == GST_VIDEO_FORMAT_UNKNOWN) {
     GST_ERROR_OBJECT (self, "Unknown color format 0x%08x", color_format);
@@ -542,7 +827,35 @@
         GST_VIDEO_MULTIVIEW_MODE_TOP_BOTTOM, GST_VIDEO_MULTIVIEW_FLAGS_NONE);
   }
 
+  memset (&self->color_format_info, 0, sizeof (self->color_format_info));
+  if (self->codec_config == AMC_CODEC_CONFIG_WITH_SURFACE) {
+    if (output_state->caps)
+      gst_caps_unref (output_state->caps);
+    output_state->caps = gst_video_info_to_caps (&output_state->info);
+    gst_caps_set_features (output_state->caps, 0,
+        gst_caps_features_new (GST_CAPS_FEATURE_MEMORY_GL_MEMORY, NULL));
+    gst_caps_set_simple (output_state->caps, "texture-target", G_TYPE_STRING,
+        "external-oes", NULL);
+    GST_DEBUG_OBJECT (self, "Configuring for Surface output");
+
+    /* The width/height values are used in other places for
+     * checking if the resolution changed. Set everything
+     * that makes sense here
+     */
+    self->color_format_info.color_format = COLOR_FormatAndroidOpaque;
+    self->color_format_info.width = width;
+    self->color_format_info.height = height;
+    self->color_format_info.crop_left = crop_left;
+    self->color_format_info.crop_right = crop_right;
+    self->color_format_info.crop_top = crop_top;
+    self->color_format_info.crop_bottom = crop_bottom;
+
+    goto out;
+  }
+
   self->format = gst_format;
+  self->width = width;
+  self->height = height;
   if (!gst_amc_color_format_info_set (&self->color_format_info,
           klass->codec_info, mime, color_format, width, height, stride,
           slice_height, crop_left, crop_right, crop_top, crop_bottom)) {
@@ -551,16 +864,19 @@
   }
 
   GST_DEBUG_OBJECT (self,
-      "Color format info: {color_format=%d, width=%d, height=%d, "
+      "Color format info: {color_format=%d (0x%08x), width=%d, height=%d, "
       "stride=%d, slice-height=%d, crop-left=%d, crop-top=%d, "
       "crop-right=%d, crop-bottom=%d, frame-size=%d}",
+      self->color_format_info.color_format,
       self->color_format_info.color_format, self->color_format_info.width,
       self->color_format_info.height, self->color_format_info.stride,
       self->color_format_info.slice_height, self->color_format_info.crop_left,
       self->color_format_info.crop_top, self->color_format_info.crop_right,
       self->color_format_info.crop_bottom, self->color_format_info.frame_size);
 
+out:
   ret = gst_video_decoder_negotiate (GST_VIDEO_DECODER (self));
+
   gst_video_codec_state_unref (output_state);
   self->input_state_changed = FALSE;
 
@@ -576,6 +892,9 @@
   GstVideoInfo *info = &state->info;
   gboolean ret = FALSE;
 
+  if (self->color_format_info.color_format == COLOR_FormatAndroidOpaque)
+    return FALSE;
+
   ret =
       gst_amc_color_format_copy (&self->color_format_info, buf, buffer_info,
       info, outbuf, COLOR_FORMAT_COPY_OUT);
@@ -584,6 +903,321 @@
   return ret;
 }
 
+static const gfloat yflip_matrix[16] = {
+  1.0f, 0.0f, 0.0f, 0.0f,
+  0.0f, -1.0f, 0.0f, 0.0f,
+  0.0f, 0.0f, 1.0f, 0.0f,
+  0.0f, 1.0f, 0.0f, 1.0f
+};
+
+static void
+_amc_gl_set_sync (GstGLSyncMeta * sync_meta, GstGLContext * context)
+{
+}
+
+static void
+_gl_sync_release_buffer (struct gl_sync *sync, gboolean render)
+{
+  GError *error = NULL;
+
+  if (!sync->result->released) {
+    sync->released_ts = g_get_monotonic_time ();
+
+    if ((gint) (sync->sink->gl_released_frame_count -
+            sync->sink->gl_ready_frame_count) > 0) {
+      guint diff =
+          sync->sink->gl_released_frame_count -
+          sync->sink->gl_ready_frame_count - 1u;
+      sync->sink->gl_ready_frame_count += diff;
+      GST_LOG ("gl_sync %p possible \'on_frame_available\' listener miss "
+          "detected, attempting to work around.  Jumping forward %u "
+          "frames for frame %u", sync, diff, sync->gl_frame_no);
+    }
+
+    GST_TRACE ("gl_sync %p release_output_buffer idx %u frame %u render %s",
+        sync, sync->buffer_idx, sync->gl_frame_no, render ? "TRUE" : "FALSE");
+
+    /* Release the frame into the surface */
+    sync->sink->gl_released_frame_count++;
+    if (!render) {
+      /* Advance the ready counter ourselves if we aren't going to render
+       * and therefore receive a listener callback */
+      sync->sink->gl_ready_frame_count++;
+    }
+
+    if (!gst_amc_codec_release_output_buffer (sync->sink->codec,
+            sync->buffer_idx, render, &error)) {
+      GST_ERROR_OBJECT (sync->sink,
+          "gl_sync %p Failed to render buffer, index %d frame %u", sync,
+          sync->buffer_idx, sync->gl_frame_no);
+      goto out;
+    }
+    sync->result->released = TRUE;
+    sync->result->rendered = render;
+  }
+
+out:
+  if (error) {
+    if (sync->sink->gl_error == NULL)
+      sync->sink->gl_error = error;
+    else
+      g_clear_error (&error);
+  }
+}
+
+static void
+_gl_sync_release_next_buffer (struct gl_sync *sync, gboolean render)
+{
+  GList *l;
+
+  if ((l = _find_gl_sync_for_frame (sync->sink, sync->gl_frame_no + 1))) {
+    struct gl_sync *next = l->data;
+
+    _gl_sync_release_buffer (next, render);
+  } else {
+    GST_TRACE ("gl_sync %p no next frame available", sync);
+  }
+}
+
+/* caller should remove from the gl_queue after calling this function.
+ * _gl_sync_release_buffer must be called before this function */
+static void
+_gl_sync_render_unlocked (struct gl_sync *sync)
+{
+  GstVideoAffineTransformationMeta *af_meta;
+  GError *error = NULL;
+  gfloat matrix[16];
+  gint64 ts = 0;
+
+  GST_TRACE ("gl_sync %p result %p render (updated:%u)", sync, sync->result,
+      sync->result->updated);
+
+  if (sync->result->updated || !sync->result->rendered)
+    return;
+
+  /* FIXME: if this ever starts returning valid values we should attempt
+   * to use it */
+  if (!gst_amc_surface_texture_get_timestamp (sync->surface->texture, &ts,
+          &error)) {
+    GST_ERROR_OBJECT (sync->sink, "Failed to update texture image");
+    GST_ELEMENT_ERROR_FROM_ERROR (sync->sink, error);
+    goto out;
+  }
+  GST_TRACE ("gl_sync %p rendering timestamp before update %" G_GINT64_FORMAT,
+      sync, ts);
+
+  GST_TRACE ("gl_sync %p update_tex_image", sync);
+  if (!gst_amc_surface_texture_update_tex_image (sync->surface->texture,
+          &error)) {
+    GST_ERROR_OBJECT (sync->sink, "Failed to update texture image");
+    GST_ELEMENT_ERROR_FROM_ERROR (sync->sink, error);
+    goto out;
+  }
+  GST_TRACE ("gl_sync result %p updated", sync->result);
+  sync->result->updated = TRUE;
+  sync->sink->gl_last_rendered_frame = sync->gl_frame_no;
+
+  if (!gst_amc_surface_texture_get_timestamp (sync->surface->texture, &ts,
+          &error)) {
+    GST_ERROR_OBJECT (sync->sink, "Failed to update texture image");
+    GST_ELEMENT_ERROR_FROM_ERROR (sync->sink, error);
+    goto out;
+  }
+  GST_TRACE ("gl_sync %p rendering timestamp after update %" G_GINT64_FORMAT,
+      sync, ts);
+
+  af_meta = gst_buffer_get_video_affine_transformation_meta (sync->buffer);
+  if (!af_meta) {
+    GST_WARNING ("Failed to retreive the transformation meta from the "
+        "gl_sync %p buffer %p", sync, sync->buffer);
+  } else if (gst_amc_surface_texture_get_transform_matrix (sync->
+          surface->texture, matrix, &error)) {
+
+    gst_video_affine_transformation_meta_apply_matrix (af_meta, matrix);
+    gst_video_affine_transformation_meta_apply_matrix (af_meta, yflip_matrix);
+  }
+
+  GST_LOG ("gl_sync %p successfully updated SurfaceTexture %p into "
+      "OES texture %u", sync, sync->surface->texture, sync->oes_mem->tex_id);
+
+out:
+  if (error) {
+    if (sync->sink->gl_error == NULL)
+      sync->sink->gl_error = error;
+    else
+      g_clear_error (&error);
+  }
+
+  _gl_sync_release_next_buffer (sync, TRUE);
+}
+
+static gboolean
+_amc_gl_possibly_wait_for_gl_sync (struct gl_sync *sync, gint64 end_time)
+{
+  GST_TRACE ("gl_sync %p waiting for frame %u current %u updated %u ", sync,
+      sync->gl_frame_no, sync->sink->gl_ready_frame_count,
+      sync->result->updated);
+
+  if ((gint) (sync->sink->gl_last_rendered_frame - sync->gl_frame_no) > 0) {
+    GST_ERROR ("gl_sync %p unsuccessfully waited for frame %u. out of order "
+        "wait detected", sync, sync->gl_frame_no);
+    return FALSE;
+  }
+
+  /* The number of frame callbacks (gl_ready_frame_count) is not a direct
+   * relationship with the number of pushed buffers (gl_pushed_frame_count)
+   * or even, the number of released buffers (gl_released_frame_count)
+   * as, from the frameworks/native/include/gui/ConsumerBase.h file,
+   *
+   *    "...frames that are queued while in asynchronous mode only trigger the
+   *    callback if no previous frames are pending."
+   *
+   * As a result, we need to advance the ready counter somehow ourselves when
+   * such events happen. There is no reliable way of knowing when/if the frame
+   * listener is going to fire.  The only uniqueu identifier,
+   * SurfaceTexture::get_timestamp seems to always return 0.
+   *
+   * The maximum queue size as defined in
+   * frameworks/native/include/gui/BufferQueue.h
+   * is 32 of which a maximum of 30 can be acquired at a time so we picked a
+   * number less than that to wait for before updating the ready frame count.
+   */
+
+  while (!sync->result->updated
+      && (gint) (sync->sink->gl_ready_frame_count - sync->gl_frame_no) < 0) {
+    /* The time limit is need otherwise when amc decides to not emit the
+     * frame listener (say, on orientation changes) we don't wait foreever */
+    if (end_time == -1 || !g_cond_wait_until (&sync->sink->gl_cond,
+            &sync->sink->gl_lock, end_time)) {
+      GST_LOG ("gl_sync %p unsuccessfully waited for frame %u", sync,
+          sync->gl_frame_no);
+      return FALSE;
+    }
+  }
+  GST_LOG ("gl_sync %p successfully waited for frame %u", sync,
+      sync->gl_frame_no);
+
+  return TRUE;
+}
+
+static gboolean
+_amc_gl_iterate_queue_unlocked (GstGLSyncMeta * sync_meta, gboolean wait)
+{
+  struct gl_sync *sync = sync_meta->data;
+  struct gl_sync *tmp;
+  gboolean ret = TRUE;
+  gint64 end_time;
+
+  while ((tmp = g_queue_peek_head (sync->sink->gl_queue))) {
+    /* skip frames that are ahead of the current wait frame */
+    if ((gint) (sync->gl_frame_no - tmp->gl_frame_no) < 0) {
+      GST_TRACE ("gl_sync %p frame %u is ahead of gl_sync %p frame %u", tmp,
+          tmp->gl_frame_no, sync, sync->gl_frame_no);
+      break;
+    }
+
+    _gl_sync_release_buffer (tmp, wait);
+
+    /* Frames are currently pushed in order and waits need to be performed
+     * in the same order */
+
+    end_time = wait ? 30 * G_TIME_SPAN_MILLISECOND + tmp->released_ts : -1;
+    if (!_amc_gl_possibly_wait_for_gl_sync (tmp, end_time))
+      ret = FALSE;
+
+    _gl_sync_render_unlocked (tmp);
+
+    g_queue_pop_head (tmp->sink->gl_queue);
+    _gl_sync_unref (tmp);
+  }
+
+  return ret;
+}
+
+struct gl_wait
+{
+  GstGLSyncMeta *sync_meta;
+  gboolean ret;
+};
+
+static void
+_amc_gl_wait_gl (GstGLContext * context, struct gl_wait *wait)
+{
+  struct gl_sync *sync = wait->sync_meta->data;
+
+  g_mutex_lock (&sync->sink->gl_lock);
+  wait->ret = _amc_gl_iterate_queue_unlocked (wait->sync_meta, TRUE);
+  g_mutex_unlock (&sync->sink->gl_lock);
+}
+
+static void
+_amc_gl_wait (GstGLSyncMeta * sync_meta, GstGLContext * context)
+{
+  struct gl_sync *sync = sync_meta->data;
+  struct gl_wait wait;
+
+  wait.sync_meta = sync_meta;
+  wait.ret = FALSE;
+  gst_gl_context_thread_add (context,
+      (GstGLContextThreadFunc) _amc_gl_wait_gl, &wait);
+
+  if (!wait.ret)
+    GST_WARNING ("gl_sync %p could not wait for frame, took too long", sync);
+}
+
+static void
+_amc_gl_copy (GstGLSyncMeta * src, GstBuffer * sbuffer, GstGLSyncMeta * dest,
+    GstBuffer * dbuffer)
+{
+  struct gl_sync *sync = src->data;
+  struct gl_sync *tmp;
+
+  tmp = g_new0 (struct gl_sync, 1);
+
+  GST_TRACE ("copying gl_sync %p to %p", sync, tmp);
+
+  g_mutex_lock (&sync->sink->gl_lock);
+
+  tmp->refcount = 1;
+  tmp->sink = sync->sink;
+  tmp->buffer = dbuffer;
+  tmp->oes_mem = (GstGLMemory *) gst_memory_ref ((GstMemory *) sync->oes_mem);
+  tmp->surface = g_object_ref (sync->surface);
+  tmp->gl_frame_no = sync->gl_frame_no;
+  tmp->released_ts = sync->released_ts;
+  tmp->result = sync->result;
+  _gl_sync_result_ref (tmp->result);
+  dest->data = tmp;
+
+  g_mutex_unlock (&sync->sink->gl_lock);
+}
+
+static void
+_amc_gl_render_on_free (GstGLContext * context, GstGLSyncMeta * sync_meta)
+{
+  struct gl_sync *sync = sync_meta->data;
+
+  g_mutex_lock (&sync->sink->gl_lock);
+  /* just render as many frames as we have */
+  _amc_gl_iterate_queue_unlocked (sync_meta, FALSE);
+  g_mutex_unlock (&sync->sink->gl_lock);
+}
+
+static void
+_amc_gl_free (GstGLSyncMeta * sync_meta, GstGLContext * context)
+{
+  struct gl_sync *sync = sync_meta->data;
+
+  /* The wait render queue inside android is not very deep so when we drop
+   * frames we need to signal that we have rendered them if we have any chance
+   * of keeping up between the decoder, the android GL queue and downstream
+   * OpenGL. If we don't do this, once we start dropping frames downstream,
+   * it is very near to impossible for the pipeline to catch up. */
+  gst_gl_context_thread_add (context,
+      (GstGLContextThreadFunc) _amc_gl_render_on_free, sync_meta);
+  _gl_sync_unref (sync);
+}
+
 static void
 gst_amc_video_dec_loop (GstAmcVideoDec * self)
 {
@@ -595,6 +1229,7 @@
   GstAmcBufferInfo buffer_info;
   gint idx;
   GError *err = NULL;
+  gboolean release_buffer = TRUE;
 
   GST_VIDEO_DECODER_STREAM_LOCK (self);
 
@@ -612,6 +1247,8 @@
   GST_VIDEO_DECODER_STREAM_LOCK (self);
   /*} */
 
+  GST_DEBUG_OBJECT (self, "dequeueOutputBuffer() returned %d (0x%x)", idx, idx);
+
   if (idx < 0) {
     if (self->flushing) {
       g_clear_error (&err);
@@ -675,18 +1312,116 @@
   is_eos = ! !(buffer_info.flags & BUFFER_FLAG_END_OF_STREAM);
 
   buf = gst_amc_codec_get_output_buffer (self->codec, idx, &err);
-  if (!buf)
+  if (err)
     goto failed_to_get_output_buffer;
 
+  if (self->codec_config != AMC_CODEC_CONFIG_WITH_SURFACE && !buf)
+    goto got_null_output_buffer;
+
   if (frame
       && (deadline =
           gst_video_decoder_get_max_decode_time (GST_VIDEO_DECODER (self),
               frame)) < 0) {
     GST_WARNING_OBJECT (self,
-        "Frame is too late, dropping (deadline %" GST_TIME_FORMAT ")",
-        GST_TIME_ARGS (-deadline));
+        "Frame is too late, dropping (deadline %" GST_STIME_FORMAT ")",
+        GST_STIME_ARGS (deadline));
     flow_ret = gst_video_decoder_drop_frame (GST_VIDEO_DECODER (self), frame);
-  } else if (!frame && buffer_info.size > 0) {
+  } else if (frame && self->codec_config == AMC_CODEC_CONFIG_WITH_SURFACE) {
+    GstBuffer *outbuf;
+    GstGLSyncMeta *sync_meta;
+    GstVideoCodecState *state;
+    struct gl_sync *sync;
+    gboolean first_buffer = FALSE;
+
+    g_mutex_lock (&self->gl_lock);
+    if (self->gl_error) {
+      GST_ELEMENT_ERROR_FROM_ERROR (self, self->gl_error);
+      g_mutex_unlock (&self->gl_lock);
+      goto gl_output_error;
+    }
+    g_mutex_unlock (&self->gl_lock);
+
+    outbuf = gst_buffer_new ();
+
+    state = gst_video_decoder_get_output_state (GST_VIDEO_DECODER (self));
+
+    if (!self->oes_mem) {
+      GstGLBaseMemoryAllocator *base_mem_alloc;
+      GstGLVideoAllocationParams *params;
+
+      base_mem_alloc =
+          GST_GL_BASE_MEMORY_ALLOCATOR (gst_allocator_find
+          (GST_GL_MEMORY_ALLOCATOR_NAME));
+
+      params = gst_gl_video_allocation_params_new (self->gl_context, NULL,
+          &state->info, 0, NULL, GST_GL_TEXTURE_TARGET_EXTERNAL_OES);
+
+      self->oes_mem = (GstGLMemory *) gst_gl_base_memory_alloc (base_mem_alloc,
+          (GstGLAllocationParams *) params);
+      gst_gl_allocation_params_free ((GstGLAllocationParams *) params);
+      gst_object_unref (base_mem_alloc);
+
+      gst_gl_context_thread_add (self->gl_context,
+          (GstGLContextThreadFunc) _attach_mem_to_context, self);
+
+      first_buffer = TRUE;
+    }
+
+    gst_video_codec_state_unref (state);
+
+    gst_buffer_append_memory (outbuf,
+        gst_memory_ref ((GstMemory *) self->oes_mem));
+
+    sync = g_new0 (struct gl_sync, 1);
+    sync->refcount = 1;
+    sync->sink = self;
+    sync->buffer = outbuf;
+    sync->surface = g_object_ref (self->surface);
+    sync->oes_mem =
+        (GstGLMemory *) gst_memory_ref ((GstMemory *) self->oes_mem);
+    sync->buffer_idx = idx;
+    sync->result = g_new0 (struct gl_sync_result, 1);
+    sync->result->refcount = 1;
+    sync->result->updated = FALSE;
+
+    GST_TRACE ("new gl_sync %p result %p", sync, sync->result);
+
+    sync_meta = gst_buffer_add_gl_sync_meta_full (self->gl_context, outbuf,
+        sync);
+    sync_meta->set_sync = _amc_gl_set_sync;
+    sync_meta->wait = _amc_gl_wait;
+    sync_meta->wait_cpu = _amc_gl_wait;
+    sync_meta->copy = _amc_gl_copy;
+    sync_meta->free = _amc_gl_free;
+
+    /* The meta needs to be created now:
+     * Later (in _gl_sync_render_unlocked) the buffer will be locked.
+     */
+    gst_buffer_add_video_affine_transformation_meta (outbuf);
+
+    g_mutex_lock (&self->gl_lock);
+
+    self->gl_pushed_frame_count++;
+    sync->gl_frame_no = self->gl_pushed_frame_count;
+    g_queue_push_tail (self->gl_queue, _gl_sync_ref (sync));
+
+    if (first_buffer) {
+      _gl_sync_release_buffer (sync, TRUE);
+      if (self->gl_error) {
+        gst_buffer_unref (outbuf);
+        g_mutex_unlock (&self->gl_lock);
+        goto gl_output_error;
+      }
+    }
+    g_mutex_unlock (&self->gl_lock);
+
+    GST_DEBUG_OBJECT (self, "push GL frame %u", sync->gl_frame_no);
+    frame->output_buffer = outbuf;
+    flow_ret = gst_video_decoder_finish_frame (GST_VIDEO_DECODER (self), frame);
+
+    release_buffer = FALSE;
+  } else if (self->codec_config == AMC_CODEC_CONFIG_WITHOUT_SURFACE && !frame
+      && buffer_info.size > 0) {
     GstBuffer *outbuf;
 
     /* This sometimes happens at EOS or if the input is not properly framed,
@@ -700,7 +1435,7 @@
 
     if (!gst_amc_video_dec_fill_buffer (self, buf, &buffer_info, outbuf)) {
       gst_buffer_unref (outbuf);
-      if (!gst_amc_codec_release_output_buffer (self->codec, idx, &err))
+      if (!gst_amc_codec_release_output_buffer (self->codec, idx, FALSE, &err))
         GST_ERROR_OBJECT (self, "Failed to release output buffer index %d",
             idx);
       if (err && !self->flushing)
@@ -715,11 +1450,13 @@
         gst_util_uint64_scale (buffer_info.presentation_time_us, GST_USECOND,
         1);
     flow_ret = gst_pad_push (GST_VIDEO_DECODER_SRC_PAD (self), outbuf);
-  } else if (buffer_info.size > 0) {
-    if ((flow_ret = gst_video_decoder_allocate_output_frame (GST_VIDEO_DECODER
-                (self), frame)) != GST_FLOW_OK) {
+  } else if (self->codec_config == AMC_CODEC_CONFIG_WITHOUT_SURFACE && frame
+      && buffer_info.size > 0) {
+    if ((flow_ret =
+            gst_video_decoder_allocate_output_frame (GST_VIDEO_DECODER (self),
+                frame)) != GST_FLOW_OK) {
       GST_ERROR_OBJECT (self, "Failed to allocate buffer");
-      if (!gst_amc_codec_release_output_buffer (self->codec, idx, &err))
+      if (!gst_amc_codec_release_output_buffer (self->codec, idx, FALSE, &err))
         GST_ERROR_OBJECT (self, "Failed to release output buffer index %d",
             idx);
       if (err && !self->flushing)
@@ -734,7 +1471,7 @@
             frame->output_buffer)) {
       gst_buffer_replace (&frame->output_buffer, NULL);
       gst_video_decoder_drop_frame (GST_VIDEO_DECODER (self), frame);
-      if (!gst_amc_codec_release_output_buffer (self->codec, idx, &err))
+      if (!gst_amc_codec_release_output_buffer (self->codec, idx, FALSE, &err))
         GST_ERROR_OBJECT (self, "Failed to release output buffer index %d",
             idx);
       if (err && !self->flushing)
@@ -750,15 +1487,19 @@
     flow_ret = gst_video_decoder_drop_frame (GST_VIDEO_DECODER (self), frame);
   }
 
-  gst_amc_buffer_free (buf);
-  buf = NULL;
+  if (buf) {
+    gst_amc_buffer_free (buf);
+    buf = NULL;
+  }
 
-  if (!gst_amc_codec_release_output_buffer (self->codec, idx, &err)) {
-    if (self->flushing) {
-      g_clear_error (&err);
-      goto flushing;
+  if (release_buffer) {
+    if (!gst_amc_codec_release_output_buffer (self->codec, idx, FALSE, &err)) {
+      if (self->flushing) {
+        g_clear_error (&err);
+        goto flushing;
+      }
+      goto failed_release;
     }
-    goto failed_release;
   }
 
   if (is_eos || flow_ret == GST_FLOW_EOS) {
@@ -880,6 +1621,21 @@
     return;
   }
 
+got_null_output_buffer:
+  {
+    GST_ELEMENT_ERROR (self, LIBRARY, SETTINGS, (NULL),
+        ("Got no output buffer"));
+    gst_pad_push_event (GST_VIDEO_DECODER_SRC_PAD (self), gst_event_new_eos ());
+    gst_pad_pause_task (GST_VIDEO_DECODER_SRC_PAD (self));
+    self->downstream_flow_ret = GST_FLOW_ERROR;
+    GST_VIDEO_DECODER_STREAM_UNLOCK (self);
+    g_mutex_lock (&self->drain_lock);
+    self->draining = FALSE;
+    g_cond_broadcast (&self->drain_cond);
+    g_mutex_unlock (&self->drain_lock);
+    return;
+  }
+
 invalid_buffer:
   {
     GST_ELEMENT_ERROR (self, LIBRARY, SETTINGS, (NULL),
@@ -894,6 +1650,22 @@
     g_mutex_unlock (&self->drain_lock);
     return;
   }
+gl_output_error:
+  {
+    if (buf) {
+      gst_amc_buffer_free (buf);
+      buf = NULL;
+    }
+    gst_pad_push_event (GST_VIDEO_DECODER_SRC_PAD (self), gst_event_new_eos ());
+    gst_pad_pause_task (GST_VIDEO_DECODER_SRC_PAD (self));
+    self->downstream_flow_ret = GST_FLOW_NOT_NEGOTIATED;
+    GST_VIDEO_DECODER_STREAM_UNLOCK (self);
+    g_mutex_lock (&self->drain_lock);
+    self->draining = FALSE;
+    g_cond_broadcast (&self->drain_cond);
+    g_mutex_unlock (&self->drain_lock);
+    return;
+  }
 }
 
 static gboolean
@@ -946,11 +1718,70 @@
   return TRUE;
 }
 
+static jobject
+gst_amc_video_dec_new_on_frame_available_listener (GstAmcVideoDec * decoder,
+    JNIEnv * env, GError ** err)
+{
+  jobject listener = NULL;
+  jclass listener_cls = NULL;
+  jmethodID constructor_id = 0;
+
+  JNINativeMethod amcOnFrameAvailableListener = {
+    "native_onFrameAvailable",
+    "(JLandroid/graphics/SurfaceTexture;)V",
+    (void *) gst_amc_video_dec_on_frame_available,
+  };
+
+  listener_cls =
+      gst_amc_jni_get_application_class (env,
+      "org/freedesktop/gstreamer/androidmedia/GstAmcOnFrameAvailableListener",
+      err);
+  if (!listener_cls) {
+    return FALSE;
+  }
+
+  (*env)->RegisterNatives (env, listener_cls, &amcOnFrameAvailableListener, 1);
+  if ((*env)->ExceptionCheck (env)) {
+    (*env)->ExceptionClear (env);
+    goto done;
+  }
+
+  constructor_id =
+      gst_amc_jni_get_method_id (env, err, listener_cls, "<init>", "()V");
+  if (!constructor_id) {
+    goto done;
+  }
+
+  decoder->set_context_id =
+      gst_amc_jni_get_method_id (env, err, listener_cls, "setContext", "(J)V");
+  if (!decoder->set_context_id) {
+    goto done;
+  }
+
+  listener =
+      gst_amc_jni_new_object (env, err, TRUE, listener_cls, constructor_id);
+  if (!listener) {
+    goto done;
+  }
+
+  if (!gst_amc_jni_call_void_method (env, err, listener,
+          decoder->set_context_id, GST_AMC_VIDEO_DEC_TO_JLONG (decoder))) {
+    gst_amc_jni_object_unref (env, listener);
+    listener = NULL;
+  }
+
+done:
+  gst_amc_jni_object_unref (env, listener_cls);
+
+  return listener;
+}
+
 static gboolean
 gst_amc_video_dec_set_format (GstVideoDecoder * decoder,
     GstVideoCodecState * state)
 {
   GstAmcVideoDec *self;
+  GstAmcVideoDecClass *klass;
   GstAmcFormat *format;
   const gchar *mime;
   gboolean is_format_change = FALSE;
@@ -959,8 +1790,10 @@
   guint8 *codec_data = NULL;
   gsize codec_data_size = 0;
   GError *err = NULL;
+  jobject jsurface = NULL;
 
   self = GST_AMC_VIDEO_DEC (decoder);
+  klass = GST_AMC_VIDEO_DEC_GET_CLASS (self);
 
   GST_DEBUG_OBJECT (self, "Setting new caps %" GST_PTR_FORMAT, state->caps);
 
@@ -1052,6 +1885,147 @@
       GST_ELEMENT_WARNING_FROM_ERROR (self, err);
   }
 
+  {
+    gboolean downstream_supports_gl = FALSE;
+    GstVideoDecoder *decoder = GST_VIDEO_DECODER (self);
+    GstPad *src_pad = GST_VIDEO_DECODER_SRC_PAD (decoder);
+    GstCaps *templ_caps = gst_pad_get_pad_template_caps (src_pad);
+    GstCaps *downstream_caps = gst_pad_peer_query_caps (src_pad, templ_caps);
+
+    gst_caps_unref (templ_caps);
+
+    if (downstream_caps) {
+      guint i, n;
+      GstStaticCaps static_caps =
+          GST_STATIC_CAPS (GST_VIDEO_CAPS_MAKE_WITH_FEATURES
+          (GST_CAPS_FEATURE_MEMORY_GL_MEMORY, "RGBA"));
+      GstCaps *gl_memory_caps = gst_static_caps_get (&static_caps);
+
+      GST_DEBUG_OBJECT (self, "Available downstream caps: %" GST_PTR_FORMAT,
+          downstream_caps);
+
+      /* Check if downstream caps supports
+       * video/x-raw(memory:GLMemory),format=RGBA */
+      n = gst_caps_get_size (downstream_caps);
+      for (i = 0; i < n; i++) {
+        GstCaps *caps = NULL;
+        GstStructure *structure = gst_caps_get_structure (downstream_caps, i);
+        GstCapsFeatures *features = gst_caps_get_features (downstream_caps, i);
+
+        caps = gst_caps_new_full (gst_structure_copy (structure), NULL);
+        if (!caps)
+          continue;
+
+        gst_caps_set_features (caps, 0, gst_caps_features_copy (features));
+
+        if (gst_caps_can_intersect (caps, gl_memory_caps)) {
+          downstream_supports_gl = TRUE;
+        }
+
+        gst_caps_unref (caps);
+        if (downstream_supports_gl)
+          break;
+      }
+
+      gst_caps_unref (gl_memory_caps);
+
+      /* If video/x-raw(memory:GLMemory),format=RGBA is supported,
+       * update the video decoder output state accordingly and negotiate */
+      if (downstream_supports_gl) {
+        GstVideoCodecState *output_state = NULL;
+        GstVideoCodecState *prev_output_state = NULL;
+
+        prev_output_state = gst_video_decoder_get_output_state (decoder);
+
+        output_state =
+            gst_video_decoder_set_output_state (decoder, GST_VIDEO_FORMAT_RGBA,
+            state->info.width, state->info.height, state);
+
+        if (output_state->caps) {
+          gst_caps_unref (output_state->caps);
+        }
+
+        output_state->caps = gst_video_info_to_caps (&output_state->info);
+        gst_caps_set_features (output_state->caps, 0,
+            gst_caps_features_new (GST_CAPS_FEATURE_MEMORY_GL_MEMORY, NULL));
+
+        /* gst_amc_video_dec_decide_allocation will update
+         * self->downstream_supports_gl */
+        if (!gst_video_decoder_negotiate (decoder)) {
+          GST_ERROR_OBJECT (self, "Failed to negotiate");
+
+          /* Rollback output state changes */
+          if (prev_output_state) {
+            output_state->info = prev_output_state->info;
+            gst_caps_replace (&output_state->caps, prev_output_state->caps);
+          } else {
+            gst_video_info_init (&output_state->info);
+            gst_caps_replace (&output_state->caps, NULL);
+          }
+        }
+        if (prev_output_state) {
+          gst_video_codec_state_unref (prev_output_state);
+        }
+      }
+    }
+  }
+
+  GST_INFO_OBJECT (self, "GL output: %s",
+      self->downstream_supports_gl ? "enabled" : "disabled");
+
+  if (klass->codec_info->gl_output_only && !self->downstream_supports_gl) {
+    GST_ERROR_OBJECT (self,
+        "Codec only supports GL output but downstream does not");
+    return FALSE;
+  }
+
+  if (self->downstream_supports_gl && self->surface) {
+    jsurface = self->surface->jobject;
+  } else if (self->downstream_supports_gl && !self->surface) {
+    int ret = TRUE;
+    JNIEnv *env = NULL;
+    GstAmcSurfaceTexture *surface_texture = NULL;
+
+    env = gst_amc_jni_get_env ();
+    surface_texture = gst_amc_surface_texture_new (&err);
+    if (!surface_texture) {
+      GST_ELEMENT_ERROR_FROM_ERROR (self, err);
+      return FALSE;
+    }
+
+    if (self->listener) {
+      if (!gst_amc_jni_call_void_method (env, &err, self->listener,
+              self->set_context_id, GST_AMC_VIDEO_DEC_TO_JLONG (NULL))) {
+        ret = FALSE;
+        goto done;
+      }
+
+      gst_amc_jni_object_unref (env, self->listener);
+    }
+    self->listener =
+        gst_amc_video_dec_new_on_frame_available_listener (self, env, &err);
+    if (!self->listener) {
+      ret = FALSE;
+      goto done;
+    }
+
+    if (!gst_amc_surface_texture_set_on_frame_available_listener
+        (surface_texture, self->listener, &err)) {
+      ret = FALSE;
+      goto done;
+    }
+
+    self->surface = gst_amc_surface_new (surface_texture, &err);
+    jsurface = self->surface->jobject;
+
+  done:
+    g_object_unref (surface_texture);
+    if (!ret) {
+      GST_ELEMENT_ERROR_FROM_ERROR (self, err);
+      return FALSE;
+    }
+  }
+
   format_string = gst_amc_format_to_string (format, &err);
   if (err)
     GST_ELEMENT_WARNING_FROM_ERROR (self, err);
@@ -1059,11 +2033,16 @@
       GST_STR_NULL (format_string));
   g_free (format_string);
 
-  if (!gst_amc_codec_configure (self->codec, format, 0, &err)) {
+  if (!gst_amc_codec_configure (self->codec, format, jsurface, 0, &err)) {
     GST_ERROR_OBJECT (self, "Failed to configure codec");
     GST_ELEMENT_ERROR_FROM_ERROR (self, err);
     return FALSE;
   }
+  if (jsurface) {
+    self->codec_config = AMC_CODEC_CONFIG_WITH_SURFACE;
+  } else {
+    self->codec_config = AMC_CODEC_CONFIG_WITHOUT_SURFACE;
+  }
 
   gst_amc_format_free (format);
 
@@ -1214,8 +2193,10 @@
     /* Copy the buffer content in chunks of size as requested
      * by the port */
     buf = gst_amc_codec_get_input_buffer (self->codec, idx, &err);
-    if (!buf)
+    if (err)
       goto failed_to_get_input_buffer;
+    else if (!buf)
+      goto got_null_input_buffer;
 
     memset (&buffer_info, 0, sizeof (buffer_info));
     buffer_info.offset = 0;
@@ -1253,9 +2234,9 @@
 
     offset += buffer_info.size;
     GST_DEBUG_OBJECT (self,
-        "Queueing buffer %d: size %d time %" G_GINT64_FORMAT " flags 0x%08x",
-        idx, buffer_info.size, buffer_info.presentation_time_us,
-        buffer_info.flags);
+        "Queueing buffer %d: size %d time %" G_GINT64_FORMAT
+        " flags 0x%08x", idx, buffer_info.size,
+        buffer_info.presentation_time_us, buffer_info.flags);
     if (!gst_amc_codec_queue_input_buffer (self->codec, idx, &buffer_info,
             &err)) {
       if (self->flushing) {
@@ -1289,6 +2270,15 @@
     gst_video_codec_frame_unref (frame);
     return GST_FLOW_ERROR;
   }
+got_null_input_buffer:
+  {
+    GST_ELEMENT_ERROR (self, LIBRARY, SETTINGS, (NULL),
+        ("Got no input buffer"));
+    if (minfo.data)
+      gst_buffer_unmap (frame->input_buffer, &minfo);
+    gst_video_codec_frame_unref (frame);
+    return GST_FLOW_ERROR;
+  }
 dequeue_error:
   {
     GST_ELEMENT_ERROR_FROM_ERROR (self, err);
@@ -1413,25 +2403,180 @@
 }
 
 static gboolean
+gst_amc_video_dec_src_query (GstVideoDecoder * bdec, GstQuery * query)
+{
+  GstAmcVideoDec *self = GST_AMC_VIDEO_DEC (bdec);
+  gboolean ret;
+
+  switch (GST_QUERY_TYPE (query)) {
+    case GST_QUERY_CONTEXT:
+    {
+      const gchar *context_type;
+      GstContext *context, *old_context;
+
+      ret = gst_gl_handle_context_query ((GstElement *) self, query,
+          &self->gl_display, &self->other_gl_context);
+      gst_query_parse_context_type (query, &context_type);
+
+      if (g_strcmp0 (context_type, "gst.gl.local_context") == 0) {
+        GstStructure *s;
+
+        gst_query_parse_context (query, &old_context);
+
+        if (old_context)
+          context = gst_context_copy (old_context);
+        else
+          context = gst_context_new ("gst.gl.local_context", FALSE);
+
+        s = gst_context_writable_structure (context);
+        gst_structure_set (s, "context", GST_GL_TYPE_CONTEXT, self->gl_context,
+            NULL);
+        gst_query_set_context (query, context);
+        gst_context_unref (context);
+
+        ret = self->gl_context != NULL;
+      }
+      GST_LOG_OBJECT (self, "context query of type %s %i", context_type, ret);
+
+      if (ret)
+        return ret;
+
+      break;
+    }
+    default:
+      break;
+  }
+
+  return GST_VIDEO_DECODER_CLASS (parent_class)->src_query (bdec, query);
+}
+
+static gboolean
+_caps_are_rgba_with_gl_memory (GstCaps * caps)
+{
+  GstVideoInfo info;
+  GstCapsFeatures *features;
+
+  if (!caps)
+    return FALSE;
+
+  if (!gst_video_info_from_caps (&info, caps))
+    return FALSE;
+
+  if (info.finfo->format != GST_VIDEO_FORMAT_RGBA)
+    return FALSE;
+
+  if (!(features = gst_caps_get_features (caps, 0)))
+    return FALSE;
+
+  return gst_caps_features_contains (features,
+      GST_CAPS_FEATURE_MEMORY_GL_MEMORY);
+}
+
+static gboolean
+_find_local_gl_context (GstAmcVideoDec * self)
+{
+  GstQuery *query;
+  GstContext *context;
+  const GstStructure *s;
+
+  if (self->gl_context)
+    return TRUE;
+
+  query = gst_query_new_context ("gst.gl.local_context");
+  if (!self->gl_context
+      && gst_gl_run_query (GST_ELEMENT (self), query, GST_PAD_SRC)) {
+    gst_query_parse_context (query, &context);
+    if (context) {
+      s = gst_context_get_structure (context);
+      gst_structure_get (s, "context", GST_GL_TYPE_CONTEXT, &self->gl_context,
+          NULL);
+    }
+  }
+
+  GST_DEBUG_OBJECT (self, "found local context %p", self->gl_context);
+
+  gst_query_unref (query);
+
+  if (self->gl_context)
+    return TRUE;
+
+  return FALSE;
+}
+
+static gboolean
 gst_amc_video_dec_decide_allocation (GstVideoDecoder * bdec, GstQuery * query)
 {
-  GstBufferPool *pool;
-  GstStructure *config;
+  GstAmcVideoDec *self = GST_AMC_VIDEO_DEC (bdec);
+  gboolean need_pool = FALSE;
+  GstCaps *caps = NULL;
+//  GError *error = NULL;
 
   if (!GST_VIDEO_DECODER_CLASS (parent_class)->decide_allocation (bdec, query))
     return FALSE;
 
-  g_assert (gst_query_get_n_allocation_pools (query) > 0);
-  gst_query_parse_nth_allocation_pool (query, 0, &pool, NULL, NULL, NULL);
-  g_assert (pool != NULL);
+  self->downstream_supports_gl = FALSE;
+  gst_query_parse_allocation (query, &caps, &need_pool);
+  if (_caps_are_rgba_with_gl_memory (caps)) {
 
-  config = gst_buffer_pool_get_config (pool);
-  if (gst_query_find_allocation_meta (query, GST_VIDEO_META_API_TYPE, NULL)) {
-    gst_buffer_pool_config_add_option (config,
-        GST_BUFFER_POOL_OPTION_VIDEO_META);
+    if (!gst_gl_ensure_element_data (self, &self->gl_display,
+            &self->other_gl_context))
+      return FALSE;
+
+    if (!_find_local_gl_context (self))
+      goto out;
+#if 0
+    if (!self->gl_context) {
+      GST_OBJECT_LOCK (self->gl_display);
+      do {
+        if (self->gl_context) {
+          gst_object_unref (self->gl_context);
+          self->gl_context = NULL;
+        }
+        /* just get a GL context.  we don't care */
+        self->gl_context =
+            gst_gl_display_get_gl_context_for_thread (self->gl_display, NULL);
+        if (!self->gl_context) {
+          if (!gst_gl_display_create_context (self->gl_display,
+                  self->other_gl_context, &self->gl_context, &error)) {
+            GST_OBJECT_UNLOCK (mix->display);
+            goto context_error;
+          }
+        }
+      } while (!gst_gl_display_add_context (self->gl_display,
+              self->gl_context));
+      GST_OBJECT_UNLOCK (self->gl_display);
+    }
+#endif
+
+    self->downstream_supports_gl = TRUE;
   }
-  gst_buffer_pool_set_config (pool, config);
-  gst_object_unref (pool);
 
-  return TRUE;
+out:
+  return gst_amc_video_dec_check_codec_config (self);
+#if 0
+context_error:
+  {
+    GST_ELEMENT_ERROR (self, RESOURCE, NOT_FOUND, ("%s", error->message),
+        (NULL));
+    g_clear_error (&error);
+    return FALSE;
+  }
+#endif
+}
+
+static void
+gst_amc_video_dec_on_frame_available (JNIEnv * env, jobject thiz,
+    long long context, jobject surfaceTexture)
+{
+  GstAmcVideoDec *self = JLONG_TO_GST_AMC_VIDEO_DEC (context);
+
+  /* apparently we can be called after the decoder has been closed */
+  if (!self)
+    return;
+
+  g_mutex_lock (&self->gl_lock);
+  self->gl_ready_frame_count++;
+  GST_LOG_OBJECT (self, "frame %u available", self->gl_ready_frame_count);
+  g_cond_broadcast (&self->gl_cond);
+  g_mutex_unlock (&self->gl_lock);
 }
diff --git a/sys/androidmedia/gstamcvideodec.h b/sys/androidmedia/gstamcvideodec.h
index c6c2b4f..039a785 100644
--- a/sys/androidmedia/gstamcvideodec.h
+++ b/sys/androidmedia/gstamcvideodec.h
@@ -22,10 +22,12 @@
 #define __GST_AMC_VIDEO_DEC_H__
 
 #include <gst/gst.h>
+#include <gst/gl/gl.h>
 
 #include <gst/video/gstvideodecoder.h>
 
 #include "gstamc.h"
+#include "gstamcsurface.h"
 
 G_BEGIN_DECLS
 
@@ -44,6 +46,14 @@
 
 typedef struct _GstAmcVideoDec GstAmcVideoDec;
 typedef struct _GstAmcVideoDecClass GstAmcVideoDecClass;
+typedef enum _GstAmcCodecConfig GstAmcCodecConfig;
+
+enum _GstAmcCodecConfig
+{
+  AMC_CODEC_CONFIG_NONE,
+  AMC_CODEC_CONFIG_WITH_SURFACE,
+  AMC_CODEC_CONFIG_WITHOUT_SURFACE,
+};
 
 struct _GstAmcVideoDec
 {
@@ -51,6 +61,7 @@
 
   /* < private > */
   GstAmcCodec *codec;
+  GstAmcCodecConfig codec_config;
 
   GstVideoCodecState *input_state;
   gboolean input_state_changed;
@@ -59,6 +70,10 @@
   GstVideoFormat format;
   GstAmcColorFormatInfo color_format_info;
 
+  /* Output dimensions */
+  guint width;
+  guint height;
+
   guint8 *codec_data;
   gsize codec_data_size;
   /* TRUE if the component is configured and saw
@@ -76,7 +91,28 @@
   /* TRUE if the component is drained currently */
   gboolean drained;
 
+  GstAmcSurface *surface;
+
+  GstGLDisplay *gl_display;
+  GstGLContext *gl_context;
+  GstGLContext *other_gl_context;
+
+  gboolean downstream_supports_gl;
   GstFlowReturn downstream_flow_ret;
+
+  jobject listener;
+  jmethodID set_context_id;
+
+  gboolean gl_mem_attached;
+  GstGLMemory *oes_mem;
+  GError *gl_error;
+  GMutex gl_lock;
+  GCond gl_cond;
+  guint gl_last_rendered_frame;
+  guint gl_pushed_frame_count; /* n buffers pushed */
+  guint gl_ready_frame_count;  /* n buffers ready for GL access */
+  guint gl_released_frame_count;  /* n buffers released */
+  GQueue *gl_queue;
 };
 
 struct _GstAmcVideoDecClass
diff --git a/sys/androidmedia/gstamcvideoenc.c b/sys/androidmedia/gstamcvideoenc.c
index 4a42a30..5ef480b 100644
--- a/sys/androidmedia/gstamcvideoenc.c
+++ b/sys/androidmedia/gstamcvideoenc.c
@@ -1023,8 +1023,10 @@
   is_eos = ! !(buffer_info.flags & BUFFER_FLAG_END_OF_STREAM);
 
   buf = gst_amc_codec_get_output_buffer (self->codec, idx, &err);
-  if (!buf)
+  if (err)
     goto failed_to_get_output_buffer;
+  else if (!buf)
+    goto got_null_output_buffer;
 
   flow_ret =
       gst_amc_video_enc_handle_output_frame (self, buf, &buffer_info, frame);
@@ -1032,7 +1034,7 @@
   gst_amc_buffer_free (buf);
   buf = NULL;
 
-  if (!gst_amc_codec_release_output_buffer (self->codec, idx, &err)) {
+  if (!gst_amc_codec_release_output_buffer (self->codec, idx, FALSE, &err)) {
     if (self->flushing) {
       g_clear_error (&err);
       goto flushing;
@@ -1147,7 +1149,22 @@
     GST_ELEMENT_ERROR_FROM_ERROR (self, err);
     gst_pad_push_event (GST_VIDEO_ENCODER_SRC_PAD (self), gst_event_new_eos ());
     gst_pad_pause_task (GST_VIDEO_ENCODER_SRC_PAD (self));
-    self->downstream_flow_ret = GST_FLOW_NOT_NEGOTIATED;
+    self->downstream_flow_ret = GST_FLOW_ERROR;
+    GST_VIDEO_ENCODER_STREAM_UNLOCK (self);
+    g_mutex_lock (&self->drain_lock);
+    self->draining = FALSE;
+    g_cond_broadcast (&self->drain_cond);
+    g_mutex_unlock (&self->drain_lock);
+    return;
+  }
+
+got_null_output_buffer:
+  {
+    GST_ELEMENT_ERROR (self, LIBRARY, SETTINGS, (NULL),
+        ("Got no output buffer"));
+    gst_pad_push_event (GST_VIDEO_ENCODER_SRC_PAD (self), gst_event_new_eos ());
+    gst_pad_pause_task (GST_VIDEO_ENCODER_SRC_PAD (self));
+    self->downstream_flow_ret = GST_FLOW_ERROR;
     GST_VIDEO_ENCODER_STREAM_UNLOCK (self);
     g_mutex_lock (&self->drain_lock);
     self->draining = FALSE;
@@ -1291,7 +1308,7 @@
       GST_STR_NULL (format_string));
   g_free (format_string);
 
-  if (!gst_amc_codec_configure (self->codec, format, 1, &err)) {
+  if (!gst_amc_codec_configure (self->codec, format, NULL, 1, &err)) {
     GST_ERROR_OBJECT (self, "Failed to configure codec");
     GST_ELEMENT_ERROR_FROM_ERROR (self, err);
     goto quit;
@@ -1452,8 +1469,10 @@
   /* Copy the buffer content in chunks of size as requested
    * by the port */
   buf = gst_amc_codec_get_input_buffer (self->codec, idx, &err);
-  if (!buf)
+  if (err)
     goto failed_to_get_input_buffer;
+  else if (!buf)
+    goto got_null_input_buffer;
 
   memset (&buffer_info, 0, sizeof (buffer_info));
   buffer_info.offset = 0;
@@ -1522,11 +1541,19 @@
     gst_video_codec_frame_unref (frame);
     return GST_FLOW_ERROR;
   }
+got_null_input_buffer:
+  {
+    GST_ELEMENT_ERROR (self, LIBRARY, SETTINGS, (NULL),
+        ("Got no input buffer"));
+    gst_video_codec_frame_unref (frame);
+    return GST_FLOW_ERROR;
+  }
 buffer_fill_error:
   {
     GST_ELEMENT_ERROR (self, RESOURCE, WRITE, (NULL),
-        ("Failed to write input into the amc buffer(write %dB to a %dB buffer)",
-            self->color_format_info.frame_size, buf->size));
+        ("Failed to write input into the amc buffer(write %dB to a %"
+            G_GSIZE_FORMAT "B buffer)", self->color_format_info.frame_size,
+            buf->size));
     gst_video_codec_frame_unref (frame);
     return GST_FLOW_ERROR;
   }
diff --git a/sys/androidmedia/gstjniutils.c b/sys/androidmedia/gstjniutils.c
index f936027..4fe3747 100644
--- a/sys/androidmedia/gstjniutils.c
+++ b/sys/androidmedia/gstjniutils.c
@@ -41,6 +41,7 @@
 static JavaVM *java_vm;
 static gboolean started_java_vm = FALSE;
 static pthread_key_t current_jni_env;
+static jobject (*get_class_loader) (void);
 
 static struct
 {
@@ -211,12 +212,16 @@
 void
 gst_amc_jni_object_unref (JNIEnv * env, jobject object)
 {
+  g_return_if_fail (object != NULL);
+
   (*env)->DeleteGlobalRef (env, object);
 }
 
 void
 gst_amc_jni_object_local_unref (JNIEnv * env, jobject object)
 {
+  g_return_if_fail (object != NULL);
+
   (*env)->DeleteLocalRef (env, object);
 }
 
@@ -560,6 +565,26 @@
 }
 
 static gboolean
+check_application_class_loader (void)
+{
+  gboolean ret = TRUE;
+  GModule *module = NULL;
+
+  module = g_module_open (NULL, G_MODULE_BIND_LOCAL);
+  if (!module) {
+    return FALSE;
+  }
+  if (!g_module_symbol (module, "gst_android_get_application_class_loader",
+          (gpointer *) & get_class_loader)) {
+    ret = FALSE;
+  }
+
+  g_module_close (module);
+
+  return ret;
+}
+
+static gboolean
 initialize_classes (void)
 {
   JNIEnv *env;
@@ -619,6 +644,11 @@
     return FALSE;
   }
 
+  if (!check_application_class_loader ()) {
+    GST_ERROR ("Could not find application class loader provider");
+    return FALSE;
+  }
+
   return TRUE;
 }
 
@@ -798,6 +828,57 @@
   return started_java_vm;
 }
 
+jclass
+gst_amc_jni_get_application_class (JNIEnv * env, const gchar * name,
+    GError ** err)
+{
+  jclass tmp = NULL;
+  jclass class = NULL;
+  jstring name_jstr = NULL;
+
+  jobject class_loader = NULL;
+  jclass class_loader_cls = NULL;
+  jmethodID load_class_id = 0;
+
+
+  class_loader = get_class_loader ();
+  if (!class_loader) {
+    g_set_error (err, GST_LIBRARY_ERROR, GST_LIBRARY_ERROR_FAILED,
+        "Could not retreive application class loader");
+    goto done;
+  }
+
+  class_loader_cls = (*env)->GetObjectClass (env, class_loader);
+  if (!class_loader_cls) {
+    g_set_error (err, GST_LIBRARY_ERROR, GST_LIBRARY_ERROR_FAILED,
+        "Could not retreive application class loader java class");
+    goto done;
+  }
+
+  load_class_id =
+      gst_amc_jni_get_method_id (env, err, class_loader_cls, "loadClass",
+      "(Ljava/lang/String;)Ljava/lang/Class;");
+  if (!class_loader_cls) {
+    goto done;
+  }
+
+  name_jstr = gst_amc_jni_string_from_gchar (env, err, FALSE, name);
+  if (!name_jstr) {
+    goto done;
+  }
+
+  if (gst_amc_jni_call_object_method (env, err, class_loader,
+          load_class_id, &tmp, name_jstr)) {
+    class = gst_amc_jni_object_make_global (env, tmp);
+  }
+
+done:
+  gst_amc_jni_object_local_unref (env, name_jstr);
+  gst_amc_jni_object_local_unref (env, class_loader_cls);
+
+  return class;
+}
+
 #define CALL_STATIC_TYPE_METHOD(_type, _name,  _jname)                                                     \
 gboolean gst_amc_jni_call_static_##_name##_method (JNIEnv *env, GError ** err, jclass klass, jmethodID methodID, _type * value, ...)   \
   {                                                                                                          \
@@ -947,12 +1028,17 @@
     jobject buffer = NULL;
 
     buffer = (*env)->GetObjectArrayElement (env, array, i);
-    if ((*env)->ExceptionCheck (env) || !buffer) {
+    if ((*env)->ExceptionCheck (env)) {
       gst_amc_jni_set_error (env, err, GST_LIBRARY_ERROR,
           GST_LIBRARY_ERROR_FAILED, "Failed to get buffer %d", i);
       goto error;
     }
 
+    /* NULL buffers are not a problem and are happening when we configured
+     * a surface as input/output */
+    if (!buffer)
+      continue;
+
     (*buffers)[i].object = gst_amc_jni_object_make_global (env, buffer);
     if (!(*buffers)[i].object) {
       gst_amc_jni_set_error (env, err, GST_LIBRARY_ERROR,
diff --git a/sys/androidmedia/gstjniutils.h b/sys/androidmedia/gstjniutils.h
index a6bc68a..c323cf8 100644
--- a/sys/androidmedia/gstjniutils.h
+++ b/sys/androidmedia/gstjniutils.h
@@ -107,6 +107,10 @@
 
 JNIEnv *gst_amc_jni_get_env                  (void);
 
+jclass gst_amc_jni_get_application_class     (JNIEnv * env,
+                                             const gchar * name,
+                                             GError ** err);
+
 #define DEF_CALL_STATIC_TYPE_METHOD(_type, _name,  _jname, _retval) \
 gboolean gst_amc_jni_call_static_##_name##_method (JNIEnv *env, GError ** err, jclass klass, jmethodID methodID, _type * value, ...)
 
diff --git a/sys/applemedia-nonpublic/Makefile.in b/sys/applemedia-nonpublic/Makefile.in
index a473079..cf293cc 100644
--- a/sys/applemedia-nonpublic/Makefile.in
+++ b/sys/applemedia-nonpublic/Makefile.in
@@ -125,16 +125,15 @@
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
 	$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
-	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gsettings.m4 \
-	$(top_srcdir)/m4/gst-fionread.m4 $(top_srcdir)/m4/gst-sdl.m4 \
-	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
-	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
-	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libgcrypt.m4 \
-	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
-	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
-	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
-	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
-	$(top_srcdir)/configure.ac
+	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gst-fionread.m4 \
+	$(top_srcdir)/m4/gst-sdl.m4 $(top_srcdir)/m4/iconv.m4 \
+	$(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \
+	$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
+	$(top_srcdir)/m4/libgcrypt.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
+	$(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \
@@ -316,6 +315,8 @@
 CLUTTER_X11_LIBS = @CLUTTER_X11_LIBS@
 CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
+CUDA_CFLAGS = @CUDA_CFLAGS@
+CUDA_LIBS = @CUDA_LIBS@
 CURL_CFLAGS = @CURL_CFLAGS@
 CURL_LIBS = @CURL_LIBS@
 CXX = @CXX@
@@ -353,6 +354,8 @@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
+EGL_CFLAGS = @EGL_CFLAGS@
+EGL_LIBS = @EGL_LIBS@
 EGREP = @EGREP@
 ERROR_CFLAGS = @ERROR_CFLAGS@
 ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
@@ -361,7 +364,6 @@
 EXIF_CFLAGS = @EXIF_CFLAGS@
 EXIF_LIBS = @EXIF_LIBS@
 FAAC_LIBS = @FAAC_LIBS@
-FAAD_IS_NEAAC = @FAAD_IS_NEAAC@
 FAAD_LIBS = @FAAD_LIBS@
 FFLAGS = @FFLAGS@
 FGREP = @FGREP@
@@ -380,8 +382,9 @@
 GIO_LIBS = @GIO_LIBS@
 GIO_UNIX_CFLAGS = @GIO_UNIX_CFLAGS@
 GIO_UNIX_LIBS = @GIO_UNIX_LIBS@
+GLES2_CFLAGS = @GLES2_CFLAGS@
+GLES2_LIBS = @GLES2_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
-GLIB_COMPILE_SCHEMAS = @GLIB_COMPILE_SCHEMAS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
@@ -398,16 +401,17 @@
 GMODULE_NO_EXPORT_LIBS = @GMODULE_NO_EXPORT_LIBS@
 GMSGFMT = @GMSGFMT@
 GMSGFMT_015 = @GMSGFMT_015@
+GNUSTL_CFLAGS = @GNUSTL_CFLAGS@
+GNUSTL_LIBS = @GNUSTL_LIBS@
 GRAPHENE_CFLAGS = @GRAPHENE_CFLAGS@
 GRAPHENE_LIBS = @GRAPHENE_LIBS@
 GREP = @GREP@
-GSETTINGS_CFLAGS = @GSETTINGS_CFLAGS@
-GSETTINGS_DISABLE_SCHEMAS_COMPILE = @GSETTINGS_DISABLE_SCHEMAS_COMPILE@
-GSETTINGS_LIBS = @GSETTINGS_LIBS@
 GSM_LIBS = @GSM_LIBS@
 GSTPB_PLUGINS_DIR = @GSTPB_PLUGINS_DIR@
 GSTPB_PREFIX = @GSTPB_PREFIX@
 GST_AGE = @GST_AGE@
+GST_ALLOCATORS_CFLAGS = @GST_ALLOCATORS_CFLAGS@
+GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
 GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
 GST_API_VERSION = @GST_API_VERSION@
 GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
@@ -433,6 +437,8 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PBUTILS_CFLAGS = @GST_PBUTILS_CFLAGS@
+GST_PBUTILS_LIBS = @GST_PBUTILS_LIBS@
 GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BAD_CFLAGS = @GST_PLUGINS_BAD_CFLAGS@
@@ -458,6 +464,8 @@
 GST_PREFIX = @GST_PREFIX@
 GST_REVISION = @GST_REVISION@
 GST_TOOLS_DIR = @GST_TOOLS_DIR@
+GST_VIDEO_CFLAGS = @GST_VIDEO_CFLAGS@
+GST_VIDEO_LIBS = @GST_VIDEO_LIBS@
 GTK3_CFLAGS = @GTK3_CFLAGS@
 GTK3_GL_CFLAGS = @GTK3_GL_CFLAGS@
 GTK3_GL_LIBS = @GTK3_GL_LIBS@
@@ -559,6 +567,7 @@
 LTLIBICONV = @LTLIBICONV@
 LTLIBINTL = @LTLIBINTL@
 LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
 MANIFEST_TOOL = @MANIFEST_TOOL@
@@ -572,8 +581,6 @@
 MODPLUG_LIBS = @MODPLUG_LIBS@
 MPEG2ENC_CFLAGS = @MPEG2ENC_CFLAGS@
 MPEG2ENC_LIBS = @MPEG2ENC_LIBS@
-MPG123_CFLAGS = @MPG123_CFLAGS@
-MPG123_LIBS = @MPG123_LIBS@
 MPLEX_CFLAGS = @MPLEX_CFLAGS@
 MPLEX_LDFLAGS = @MPLEX_LDFLAGS@
 MPLEX_LIBS = @MPLEX_LIBS@
@@ -589,6 +596,8 @@
 NETTLE_LIBS = @NETTLE_LIBS@
 NM = @NM@
 NMEDIT = @NMEDIT@
+NVENCODE_CFLAGS = @NVENCODE_CFLAGS@
+NVENCODE_LIBS = @NVENCODE_LIBS@
 OBJC = @OBJC@
 OBJCDEPMODE = @OBJCDEPMODE@
 OBJCFLAGS = @OBJCFLAGS@
@@ -646,16 +655,18 @@
 PYTHON_PLATFORM = @PYTHON_PLATFORM@
 PYTHON_PREFIX = @PYTHON_PREFIX@
 PYTHON_VERSION = @PYTHON_VERSION@
+QT_ANDROID_CFLAGS = @QT_ANDROID_CFLAGS@
+QT_ANDROID_LIBS = @QT_ANDROID_LIBS@
 QT_CFLAGS = @QT_CFLAGS@
 QT_LIBS = @QT_LIBS@
+QT_MAC_CFLAGS = @QT_MAC_CFLAGS@
+QT_MAC_LIBS = @QT_MAC_LIBS@
 QT_WAYLAND_CFLAGS = @QT_WAYLAND_CFLAGS@
 QT_WAYLAND_LIBS = @QT_WAYLAND_LIBS@
 QT_X11_CFLAGS = @QT_X11_CFLAGS@
 QT_X11_LIBS = @QT_X11_LIBS@
 RANLIB = @RANLIB@
 RCC = @RCC@
-RSVG_2_36_2_CFLAGS = @RSVG_2_36_2_CFLAGS@
-RSVG_2_36_2_LIBS = @RSVG_2_36_2_LIBS@
 RSVG_CFLAGS = @RSVG_CFLAGS@
 RSVG_LIBS = @RSVG_LIBS@
 RTMP_CFLAGS = @RTMP_CFLAGS@
@@ -707,6 +718,7 @@
 VOAACENC_LIBS = @VOAACENC_LIBS@
 VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
 VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VULKAN_LIBS = @VULKAN_LIBS@
 WARNING_CFLAGS = @WARNING_CFLAGS@
 WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
 WARNING_OBJCFLAGS = @WARNING_OBJCFLAGS@
@@ -717,6 +729,7 @@
 WAYLAND_LIBS = @WAYLAND_LIBS@
 WEBP_CFLAGS = @WEBP_CFLAGS@
 WEBP_LIBS = @WEBP_LIBS@
+WGET = @WGET@
 WILDMIDI_CFLAGS = @WILDMIDI_CFLAGS@
 WILDMIDI_LIBS = @WILDMIDI_LIBS@
 WINKS_LIBS = @WINKS_LIBS@
@@ -726,6 +739,8 @@
 X11_LIBS = @X11_LIBS@
 X265_CFLAGS = @X265_CFLAGS@
 X265_LIBS = @X265_LIBS@
+XCB_CFLAGS = @XCB_CFLAGS@
+XCB_LIBS = @XCB_LIBS@
 XCOMPOSITE_CFLAGS = @XCOMPOSITE_CFLAGS@
 XCOMPOSITE_LIBS = @XCOMPOSITE_LIBS@
 XGETTEXT = @XGETTEXT@
@@ -763,7 +778,6 @@
 docdir = @docdir@
 dvidir = @dvidir@
 exec_prefix = @exec_prefix@
-gsettingsschemadir = @gsettingsschemadir@
 host = @host@
 host_alias = @host_alias@
 host_cpu = @host_cpu@
diff --git a/sys/applemedia/Makefile.am b/sys/applemedia/Makefile.am
index 34a0169..87b80b5 100644
--- a/sys/applemedia/Makefile.am
+++ b/sys/applemedia/Makefile.am
@@ -3,10 +3,12 @@
 libgstapplemedia_la_SOURCES =			\
 	plugin.m				\
 	vtutil.c				\
+	corevideomemory.c			\
 	corevideobuffer.c			\
 	coremediabuffer.c			\
-	corevideotexturecache.m 		\
-	atdec.c
+	videotexturecache.m 			\
+	atdec.c 				\
+	glcontexthelper.c
 
 libgstapplemedia_la_CPPFLAGS =			\
 	-Dgst_core_media_buffer_new=gst_core_media_buffer_priv_new		\
@@ -22,10 +24,18 @@
 	$(GST_BASE_CFLAGS)			\
 	$(GST_PLUGINS_BASE_CFLAGS)
 
+if HAVE_IOS
+GST_OBJCFLAGS_WITH_VERSION = $(GST_OBJCFLAGS)
+else
+# Add min version in front so the user or cerbero can override it since it
+# always picks the last occurence when passing several -mmacosx-version-min.
+GST_OBJCFLAGS_WITH_VERSION = -mmacosx-version-min=10.8 $(GST_OBJCFLAGS)
+endif
+
 libgstapplemedia_la_OBJCFLAGS =			\
 	-I$(top_srcdir)/gst-libs                \
 	-I$(top_builddir)/gst-libs              \
-	$(GST_OBJCFLAGS)			\
+	$(GST_OBJCFLAGS_WITH_VERSION)		\
 	$(GST_BASE_CFLAGS)			\
 	$(GST_PLUGINS_BASE_CFLAGS)
 
@@ -62,10 +72,11 @@
 	vtutil.h				\
 	corevideobuffer.h			\
 	coremediabuffer.h			\
-	corevideotexturecache.h			\
+	videotexturecache.h			\
 	atdec.h 				\
 	iosassetsrc.h				\
-	avfassetsrc.h
+	avfassetsrc.h  				\
+	glcontexthelper.h
 
 if HAVE_IOS
 
@@ -79,11 +90,13 @@
 else
 
 libgstapplemedia_la_SOURCES +=			\
-	qtkitvideosrc.m
+	qtkitvideosrc.m 					\
+	iosurfacememory.c
 
 libgstapplemedia_la_LDFLAGS +=			\
 	-Wl,-framework -Wl,Cocoa		\
-	-Wl,-framework -Wl,QTKit
+	-Wl,-framework -Wl,QTKit		\
+	-Wl,-framework -Wl,IOSurface
 
 endif
 
diff --git a/sys/applemedia/Makefile.in b/sys/applemedia/Makefile.in
index e4d57c5..d61e070 100644
--- a/sys/applemedia/Makefile.in
+++ b/sys/applemedia/Makefile.in
@@ -99,11 +99,13 @@
 @HAVE_IOS_TRUE@	-Wl,-framework -Wl,AssetsLibrary
 
 @HAVE_IOS_FALSE@am__append_4 = \
-@HAVE_IOS_FALSE@	qtkitvideosrc.m
+@HAVE_IOS_FALSE@	qtkitvideosrc.m 					\
+@HAVE_IOS_FALSE@	iosurfacememory.c
 
 @HAVE_IOS_FALSE@am__append_5 = \
 @HAVE_IOS_FALSE@	-Wl,-framework -Wl,Cocoa		\
-@HAVE_IOS_FALSE@	-Wl,-framework -Wl,QTKit
+@HAVE_IOS_FALSE@	-Wl,-framework -Wl,QTKit		\
+@HAVE_IOS_FALSE@	-Wl,-framework -Wl,IOSurface
 
 @HAVE_AVFOUNDATION_TRUE@am__append_6 = \
 @HAVE_AVFOUNDATION_TRUE@	avfvideosrc.m				\
@@ -144,16 +146,15 @@
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
 	$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
-	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gsettings.m4 \
-	$(top_srcdir)/m4/gst-fionread.m4 $(top_srcdir)/m4/gst-sdl.m4 \
-	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
-	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
-	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libgcrypt.m4 \
-	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
-	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
-	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
-	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
-	$(top_srcdir)/configure.ac
+	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gst-fionread.m4 \
+	$(top_srcdir)/m4/gst-sdl.m4 $(top_srcdir)/m4/iconv.m4 \
+	$(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \
+	$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
+	$(top_srcdir)/m4/libgcrypt.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
+	$(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \
@@ -196,11 +197,13 @@
 	$(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
 	$(am__DEPENDENCIES_1)
 am__libgstapplemedia_la_SOURCES_DIST = plugin.m vtutil.c \
-	corevideobuffer.c coremediabuffer.c corevideotexturecache.m \
-	atdec.c iosassetsrc.m qtkitvideosrc.m avfvideosrc.m \
-	avfassetsrc.m avsamplevideosink.m vtenc.c vtdec.c
+	corevideomemory.c corevideobuffer.c coremediabuffer.c \
+	videotexturecache.m atdec.c glcontexthelper.c iosassetsrc.m \
+	qtkitvideosrc.m iosurfacememory.c avfvideosrc.m avfassetsrc.m \
+	avsamplevideosink.m vtenc.c vtdec.c
 @HAVE_IOS_TRUE@am__objects_1 = libgstapplemedia_la-iosassetsrc.lo
-@HAVE_IOS_FALSE@am__objects_2 = libgstapplemedia_la-qtkitvideosrc.lo
+@HAVE_IOS_FALSE@am__objects_2 = libgstapplemedia_la-qtkitvideosrc.lo \
+@HAVE_IOS_FALSE@	libgstapplemedia_la-iosurfacememory.lo
 @HAVE_AVFOUNDATION_TRUE@am__objects_3 =  \
 @HAVE_AVFOUNDATION_TRUE@	libgstapplemedia_la-avfvideosrc.lo \
 @HAVE_AVFOUNDATION_TRUE@	libgstapplemedia_la-avfassetsrc.lo \
@@ -209,11 +212,13 @@
 @HAVE_VIDEOTOOLBOX_TRUE@	libgstapplemedia_la-vtdec.lo
 am_libgstapplemedia_la_OBJECTS = libgstapplemedia_la-plugin.lo \
 	libgstapplemedia_la-vtutil.lo \
+	libgstapplemedia_la-corevideomemory.lo \
 	libgstapplemedia_la-corevideobuffer.lo \
 	libgstapplemedia_la-coremediabuffer.lo \
-	libgstapplemedia_la-corevideotexturecache.lo \
-	libgstapplemedia_la-atdec.lo $(am__objects_1) $(am__objects_2) \
-	$(am__objects_3) $(am__objects_4)
+	libgstapplemedia_la-videotexturecache.lo \
+	libgstapplemedia_la-atdec.lo \
+	libgstapplemedia_la-glcontexthelper.lo $(am__objects_1) \
+	$(am__objects_2) $(am__objects_3) $(am__objects_4)
 libgstapplemedia_la_OBJECTS = $(am_libgstapplemedia_la_OBJECTS)
 AM_V_lt = $(am__v_lt_@AM_V@)
 am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
@@ -339,6 +344,8 @@
 CLUTTER_X11_LIBS = @CLUTTER_X11_LIBS@
 CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
+CUDA_CFLAGS = @CUDA_CFLAGS@
+CUDA_LIBS = @CUDA_LIBS@
 CURL_CFLAGS = @CURL_CFLAGS@
 CURL_LIBS = @CURL_LIBS@
 CXX = @CXX@
@@ -376,6 +383,8 @@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
+EGL_CFLAGS = @EGL_CFLAGS@
+EGL_LIBS = @EGL_LIBS@
 EGREP = @EGREP@
 ERROR_CFLAGS = @ERROR_CFLAGS@
 ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
@@ -384,7 +393,6 @@
 EXIF_CFLAGS = @EXIF_CFLAGS@
 EXIF_LIBS = @EXIF_LIBS@
 FAAC_LIBS = @FAAC_LIBS@
-FAAD_IS_NEAAC = @FAAD_IS_NEAAC@
 FAAD_LIBS = @FAAD_LIBS@
 FFLAGS = @FFLAGS@
 FGREP = @FGREP@
@@ -403,8 +411,9 @@
 GIO_LIBS = @GIO_LIBS@
 GIO_UNIX_CFLAGS = @GIO_UNIX_CFLAGS@
 GIO_UNIX_LIBS = @GIO_UNIX_LIBS@
+GLES2_CFLAGS = @GLES2_CFLAGS@
+GLES2_LIBS = @GLES2_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
-GLIB_COMPILE_SCHEMAS = @GLIB_COMPILE_SCHEMAS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
@@ -421,16 +430,17 @@
 GMODULE_NO_EXPORT_LIBS = @GMODULE_NO_EXPORT_LIBS@
 GMSGFMT = @GMSGFMT@
 GMSGFMT_015 = @GMSGFMT_015@
+GNUSTL_CFLAGS = @GNUSTL_CFLAGS@
+GNUSTL_LIBS = @GNUSTL_LIBS@
 GRAPHENE_CFLAGS = @GRAPHENE_CFLAGS@
 GRAPHENE_LIBS = @GRAPHENE_LIBS@
 GREP = @GREP@
-GSETTINGS_CFLAGS = @GSETTINGS_CFLAGS@
-GSETTINGS_DISABLE_SCHEMAS_COMPILE = @GSETTINGS_DISABLE_SCHEMAS_COMPILE@
-GSETTINGS_LIBS = @GSETTINGS_LIBS@
 GSM_LIBS = @GSM_LIBS@
 GSTPB_PLUGINS_DIR = @GSTPB_PLUGINS_DIR@
 GSTPB_PREFIX = @GSTPB_PREFIX@
 GST_AGE = @GST_AGE@
+GST_ALLOCATORS_CFLAGS = @GST_ALLOCATORS_CFLAGS@
+GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
 GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
 GST_API_VERSION = @GST_API_VERSION@
 GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
@@ -456,6 +466,8 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PBUTILS_CFLAGS = @GST_PBUTILS_CFLAGS@
+GST_PBUTILS_LIBS = @GST_PBUTILS_LIBS@
 GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BAD_CFLAGS = @GST_PLUGINS_BAD_CFLAGS@
@@ -481,6 +493,8 @@
 GST_PREFIX = @GST_PREFIX@
 GST_REVISION = @GST_REVISION@
 GST_TOOLS_DIR = @GST_TOOLS_DIR@
+GST_VIDEO_CFLAGS = @GST_VIDEO_CFLAGS@
+GST_VIDEO_LIBS = @GST_VIDEO_LIBS@
 GTK3_CFLAGS = @GTK3_CFLAGS@
 GTK3_GL_CFLAGS = @GTK3_GL_CFLAGS@
 GTK3_GL_LIBS = @GTK3_GL_LIBS@
@@ -582,6 +596,7 @@
 LTLIBICONV = @LTLIBICONV@
 LTLIBINTL = @LTLIBINTL@
 LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
 MANIFEST_TOOL = @MANIFEST_TOOL@
@@ -595,8 +610,6 @@
 MODPLUG_LIBS = @MODPLUG_LIBS@
 MPEG2ENC_CFLAGS = @MPEG2ENC_CFLAGS@
 MPEG2ENC_LIBS = @MPEG2ENC_LIBS@
-MPG123_CFLAGS = @MPG123_CFLAGS@
-MPG123_LIBS = @MPG123_LIBS@
 MPLEX_CFLAGS = @MPLEX_CFLAGS@
 MPLEX_LDFLAGS = @MPLEX_LDFLAGS@
 MPLEX_LIBS = @MPLEX_LIBS@
@@ -612,6 +625,8 @@
 NETTLE_LIBS = @NETTLE_LIBS@
 NM = @NM@
 NMEDIT = @NMEDIT@
+NVENCODE_CFLAGS = @NVENCODE_CFLAGS@
+NVENCODE_LIBS = @NVENCODE_LIBS@
 OBJC = @OBJC@
 OBJCDEPMODE = @OBJCDEPMODE@
 OBJCFLAGS = @OBJCFLAGS@
@@ -669,16 +684,18 @@
 PYTHON_PLATFORM = @PYTHON_PLATFORM@
 PYTHON_PREFIX = @PYTHON_PREFIX@
 PYTHON_VERSION = @PYTHON_VERSION@
+QT_ANDROID_CFLAGS = @QT_ANDROID_CFLAGS@
+QT_ANDROID_LIBS = @QT_ANDROID_LIBS@
 QT_CFLAGS = @QT_CFLAGS@
 QT_LIBS = @QT_LIBS@
+QT_MAC_CFLAGS = @QT_MAC_CFLAGS@
+QT_MAC_LIBS = @QT_MAC_LIBS@
 QT_WAYLAND_CFLAGS = @QT_WAYLAND_CFLAGS@
 QT_WAYLAND_LIBS = @QT_WAYLAND_LIBS@
 QT_X11_CFLAGS = @QT_X11_CFLAGS@
 QT_X11_LIBS = @QT_X11_LIBS@
 RANLIB = @RANLIB@
 RCC = @RCC@
-RSVG_2_36_2_CFLAGS = @RSVG_2_36_2_CFLAGS@
-RSVG_2_36_2_LIBS = @RSVG_2_36_2_LIBS@
 RSVG_CFLAGS = @RSVG_CFLAGS@
 RSVG_LIBS = @RSVG_LIBS@
 RTMP_CFLAGS = @RTMP_CFLAGS@
@@ -730,6 +747,7 @@
 VOAACENC_LIBS = @VOAACENC_LIBS@
 VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
 VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VULKAN_LIBS = @VULKAN_LIBS@
 WARNING_CFLAGS = @WARNING_CFLAGS@
 WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
 WARNING_OBJCFLAGS = @WARNING_OBJCFLAGS@
@@ -740,6 +758,7 @@
 WAYLAND_LIBS = @WAYLAND_LIBS@
 WEBP_CFLAGS = @WEBP_CFLAGS@
 WEBP_LIBS = @WEBP_LIBS@
+WGET = @WGET@
 WILDMIDI_CFLAGS = @WILDMIDI_CFLAGS@
 WILDMIDI_LIBS = @WILDMIDI_LIBS@
 WINKS_LIBS = @WINKS_LIBS@
@@ -749,6 +768,8 @@
 X11_LIBS = @X11_LIBS@
 X265_CFLAGS = @X265_CFLAGS@
 X265_LIBS = @X265_LIBS@
+XCB_CFLAGS = @XCB_CFLAGS@
+XCB_LIBS = @XCB_LIBS@
 XCOMPOSITE_CFLAGS = @XCOMPOSITE_CFLAGS@
 XCOMPOSITE_LIBS = @XCOMPOSITE_LIBS@
 XGETTEXT = @XGETTEXT@
@@ -786,7 +807,6 @@
 docdir = @docdir@
 dvidir = @dvidir@
 exec_prefix = @exec_prefix@
-gsettingsschemadir = @gsettingsschemadir@
 host = @host@
 host_alias = @host_alias@
 host_cpu = @host_cpu@
@@ -827,10 +847,10 @@
 top_srcdir = @top_srcdir@
 wayland_scanner = @wayland_scanner@
 plugin_LTLIBRARIES = libgstapplemedia.la
-libgstapplemedia_la_SOURCES = plugin.m vtutil.c corevideobuffer.c \
-	coremediabuffer.c corevideotexturecache.m atdec.c \
-	$(am__append_2) $(am__append_4) $(am__append_6) \
-	$(am__append_8)
+libgstapplemedia_la_SOURCES = plugin.m vtutil.c corevideomemory.c \
+	corevideobuffer.c coremediabuffer.c videotexturecache.m \
+	atdec.c glcontexthelper.c $(am__append_2) $(am__append_4) \
+	$(am__append_6) $(am__append_8)
 libgstapplemedia_la_CPPFLAGS = \
 	-Dgst_core_media_buffer_new=gst_core_media_buffer_priv_new		\
 	-Dgst_core_media_buffer_get_type=gst_core_media_buffer_priv_get_type	\
@@ -845,9 +865,13 @@
 	$(GST_BASE_CFLAGS)			\
 	$(GST_PLUGINS_BASE_CFLAGS)
 
+# Add min version in front so the user or cerbero can override it since it
+# always picks the last occurence when passing several -mmacosx-version-min.
+@HAVE_IOS_FALSE@GST_OBJCFLAGS_WITH_VERSION = -mmacosx-version-min=10.8 $(GST_OBJCFLAGS)
+@HAVE_IOS_TRUE@GST_OBJCFLAGS_WITH_VERSION = $(GST_OBJCFLAGS)
 libgstapplemedia_la_OBJCFLAGS = -I$(top_srcdir)/gst-libs \
-	-I$(top_builddir)/gst-libs $(GST_OBJCFLAGS) $(GST_BASE_CFLAGS) \
-	$(GST_PLUGINS_BASE_CFLAGS) $(am__append_1)
+	-I$(top_builddir)/gst-libs $(GST_OBJCFLAGS_WITH_VERSION) \
+	$(GST_BASE_CFLAGS) $(GST_PLUGINS_BASE_CFLAGS) $(am__append_1)
 libgstapplemedia_la_LIBADD = \
 	$(top_builddir)/gst-libs/gst/gl/libgstgl-$(GST_API_VERSION).la 	\
 	$(GST_BASE_LIBS)						\
@@ -872,10 +896,11 @@
 	vtutil.h				\
 	corevideobuffer.h			\
 	coremediabuffer.h			\
-	corevideotexturecache.h			\
+	videotexturecache.h			\
 	atdec.h 				\
 	iosassetsrc.h				\
-	avfassetsrc.h
+	avfassetsrc.h  				\
+	glcontexthelper.h
 
 all: all-am
 
@@ -961,10 +986,13 @@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstapplemedia_la-avsamplevideosink.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstapplemedia_la-coremediabuffer.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstapplemedia_la-corevideobuffer.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstapplemedia_la-corevideotexturecache.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstapplemedia_la-corevideomemory.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstapplemedia_la-glcontexthelper.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstapplemedia_la-iosassetsrc.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstapplemedia_la-iosurfacememory.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstapplemedia_la-plugin.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstapplemedia_la-qtkitvideosrc.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstapplemedia_la-videotexturecache.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstapplemedia_la-vtdec.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstapplemedia_la-vtenc.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstapplemedia_la-vtutil.Plo@am__quote@
@@ -1000,6 +1028,13 @@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstapplemedia_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgstapplemedia_la_CPPFLAGS) $(CPPFLAGS) $(libgstapplemedia_la_CFLAGS) $(CFLAGS) -c -o libgstapplemedia_la-vtutil.lo `test -f 'vtutil.c' || echo '$(srcdir)/'`vtutil.c
 
+libgstapplemedia_la-corevideomemory.lo: corevideomemory.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstapplemedia_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgstapplemedia_la_CPPFLAGS) $(CPPFLAGS) $(libgstapplemedia_la_CFLAGS) $(CFLAGS) -MT libgstapplemedia_la-corevideomemory.lo -MD -MP -MF $(DEPDIR)/libgstapplemedia_la-corevideomemory.Tpo -c -o libgstapplemedia_la-corevideomemory.lo `test -f 'corevideomemory.c' || echo '$(srcdir)/'`corevideomemory.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstapplemedia_la-corevideomemory.Tpo $(DEPDIR)/libgstapplemedia_la-corevideomemory.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='corevideomemory.c' object='libgstapplemedia_la-corevideomemory.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstapplemedia_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgstapplemedia_la_CPPFLAGS) $(CPPFLAGS) $(libgstapplemedia_la_CFLAGS) $(CFLAGS) -c -o libgstapplemedia_la-corevideomemory.lo `test -f 'corevideomemory.c' || echo '$(srcdir)/'`corevideomemory.c
+
 libgstapplemedia_la-corevideobuffer.lo: corevideobuffer.c
 @am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstapplemedia_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgstapplemedia_la_CPPFLAGS) $(CPPFLAGS) $(libgstapplemedia_la_CFLAGS) $(CFLAGS) -MT libgstapplemedia_la-corevideobuffer.lo -MD -MP -MF $(DEPDIR)/libgstapplemedia_la-corevideobuffer.Tpo -c -o libgstapplemedia_la-corevideobuffer.lo `test -f 'corevideobuffer.c' || echo '$(srcdir)/'`corevideobuffer.c
 @am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstapplemedia_la-corevideobuffer.Tpo $(DEPDIR)/libgstapplemedia_la-corevideobuffer.Plo
@@ -1021,6 +1056,20 @@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstapplemedia_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgstapplemedia_la_CPPFLAGS) $(CPPFLAGS) $(libgstapplemedia_la_CFLAGS) $(CFLAGS) -c -o libgstapplemedia_la-atdec.lo `test -f 'atdec.c' || echo '$(srcdir)/'`atdec.c
 
+libgstapplemedia_la-glcontexthelper.lo: glcontexthelper.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstapplemedia_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgstapplemedia_la_CPPFLAGS) $(CPPFLAGS) $(libgstapplemedia_la_CFLAGS) $(CFLAGS) -MT libgstapplemedia_la-glcontexthelper.lo -MD -MP -MF $(DEPDIR)/libgstapplemedia_la-glcontexthelper.Tpo -c -o libgstapplemedia_la-glcontexthelper.lo `test -f 'glcontexthelper.c' || echo '$(srcdir)/'`glcontexthelper.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstapplemedia_la-glcontexthelper.Tpo $(DEPDIR)/libgstapplemedia_la-glcontexthelper.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='glcontexthelper.c' object='libgstapplemedia_la-glcontexthelper.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstapplemedia_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgstapplemedia_la_CPPFLAGS) $(CPPFLAGS) $(libgstapplemedia_la_CFLAGS) $(CFLAGS) -c -o libgstapplemedia_la-glcontexthelper.lo `test -f 'glcontexthelper.c' || echo '$(srcdir)/'`glcontexthelper.c
+
+libgstapplemedia_la-iosurfacememory.lo: iosurfacememory.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstapplemedia_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgstapplemedia_la_CPPFLAGS) $(CPPFLAGS) $(libgstapplemedia_la_CFLAGS) $(CFLAGS) -MT libgstapplemedia_la-iosurfacememory.lo -MD -MP -MF $(DEPDIR)/libgstapplemedia_la-iosurfacememory.Tpo -c -o libgstapplemedia_la-iosurfacememory.lo `test -f 'iosurfacememory.c' || echo '$(srcdir)/'`iosurfacememory.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstapplemedia_la-iosurfacememory.Tpo $(DEPDIR)/libgstapplemedia_la-iosurfacememory.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='iosurfacememory.c' object='libgstapplemedia_la-iosurfacememory.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstapplemedia_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgstapplemedia_la_CPPFLAGS) $(CPPFLAGS) $(libgstapplemedia_la_CFLAGS) $(CFLAGS) -c -o libgstapplemedia_la-iosurfacememory.lo `test -f 'iosurfacememory.c' || echo '$(srcdir)/'`iosurfacememory.c
+
 libgstapplemedia_la-vtenc.lo: vtenc.c
 @am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstapplemedia_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgstapplemedia_la_CPPFLAGS) $(CPPFLAGS) $(libgstapplemedia_la_CFLAGS) $(CFLAGS) -MT libgstapplemedia_la-vtenc.lo -MD -MP -MF $(DEPDIR)/libgstapplemedia_la-vtenc.Tpo -c -o libgstapplemedia_la-vtenc.lo `test -f 'vtenc.c' || echo '$(srcdir)/'`vtenc.c
 @am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstapplemedia_la-vtenc.Tpo $(DEPDIR)/libgstapplemedia_la-vtenc.Plo
@@ -1066,12 +1115,12 @@
 @AMDEP_TRUE@@am__fastdepOBJC_FALSE@	DEPDIR=$(DEPDIR) $(OBJCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepOBJC_FALSE@	$(AM_V_OBJC@am__nodep@)$(LIBTOOL) $(AM_V_lt) $(libgstapplemedia_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(OBJC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgstapplemedia_la_CPPFLAGS) $(CPPFLAGS) $(libgstapplemedia_la_OBJCFLAGS) $(OBJCFLAGS) -c -o libgstapplemedia_la-plugin.lo `test -f 'plugin.m' || echo '$(srcdir)/'`plugin.m
 
-libgstapplemedia_la-corevideotexturecache.lo: corevideotexturecache.m
-@am__fastdepOBJC_TRUE@	$(AM_V_OBJC)$(LIBTOOL) $(AM_V_lt) $(libgstapplemedia_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(OBJC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgstapplemedia_la_CPPFLAGS) $(CPPFLAGS) $(libgstapplemedia_la_OBJCFLAGS) $(OBJCFLAGS) -MT libgstapplemedia_la-corevideotexturecache.lo -MD -MP -MF $(DEPDIR)/libgstapplemedia_la-corevideotexturecache.Tpo -c -o libgstapplemedia_la-corevideotexturecache.lo `test -f 'corevideotexturecache.m' || echo '$(srcdir)/'`corevideotexturecache.m
-@am__fastdepOBJC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstapplemedia_la-corevideotexturecache.Tpo $(DEPDIR)/libgstapplemedia_la-corevideotexturecache.Plo
-@AMDEP_TRUE@@am__fastdepOBJC_FALSE@	$(AM_V_OBJC)source='corevideotexturecache.m' object='libgstapplemedia_la-corevideotexturecache.lo' libtool=yes @AMDEPBACKSLASH@
+libgstapplemedia_la-videotexturecache.lo: videotexturecache.m
+@am__fastdepOBJC_TRUE@	$(AM_V_OBJC)$(LIBTOOL) $(AM_V_lt) $(libgstapplemedia_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(OBJC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgstapplemedia_la_CPPFLAGS) $(CPPFLAGS) $(libgstapplemedia_la_OBJCFLAGS) $(OBJCFLAGS) -MT libgstapplemedia_la-videotexturecache.lo -MD -MP -MF $(DEPDIR)/libgstapplemedia_la-videotexturecache.Tpo -c -o libgstapplemedia_la-videotexturecache.lo `test -f 'videotexturecache.m' || echo '$(srcdir)/'`videotexturecache.m
+@am__fastdepOBJC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstapplemedia_la-videotexturecache.Tpo $(DEPDIR)/libgstapplemedia_la-videotexturecache.Plo
+@AMDEP_TRUE@@am__fastdepOBJC_FALSE@	$(AM_V_OBJC)source='videotexturecache.m' object='libgstapplemedia_la-videotexturecache.lo' libtool=yes @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepOBJC_FALSE@	DEPDIR=$(DEPDIR) $(OBJCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepOBJC_FALSE@	$(AM_V_OBJC@am__nodep@)$(LIBTOOL) $(AM_V_lt) $(libgstapplemedia_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(OBJC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgstapplemedia_la_CPPFLAGS) $(CPPFLAGS) $(libgstapplemedia_la_OBJCFLAGS) $(OBJCFLAGS) -c -o libgstapplemedia_la-corevideotexturecache.lo `test -f 'corevideotexturecache.m' || echo '$(srcdir)/'`corevideotexturecache.m
+@am__fastdepOBJC_FALSE@	$(AM_V_OBJC@am__nodep@)$(LIBTOOL) $(AM_V_lt) $(libgstapplemedia_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(OBJC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgstapplemedia_la_CPPFLAGS) $(CPPFLAGS) $(libgstapplemedia_la_OBJCFLAGS) $(OBJCFLAGS) -c -o libgstapplemedia_la-videotexturecache.lo `test -f 'videotexturecache.m' || echo '$(srcdir)/'`videotexturecache.m
 
 libgstapplemedia_la-iosassetsrc.lo: iosassetsrc.m
 @am__fastdepOBJC_TRUE@	$(AM_V_OBJC)$(LIBTOOL) $(AM_V_lt) $(libgstapplemedia_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(OBJC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgstapplemedia_la_CPPFLAGS) $(CPPFLAGS) $(libgstapplemedia_la_OBJCFLAGS) $(OBJCFLAGS) -MT libgstapplemedia_la-iosassetsrc.lo -MD -MP -MF $(DEPDIR)/libgstapplemedia_la-iosassetsrc.Tpo -c -o libgstapplemedia_la-iosassetsrc.lo `test -f 'iosassetsrc.m' || echo '$(srcdir)/'`iosassetsrc.m
diff --git a/sys/applemedia/atdec.c b/sys/applemedia/atdec.c
index d581fb8..c00f0b7 100644
--- a/sys/applemedia/atdec.c
+++ b/sys/applemedia/atdec.c
@@ -24,7 +24,7 @@
  * <refsect2>
  * <title>Example launch line</title>
  * |[
- * gst-launch -v filesrc location=file.mov ! qtdemux ! queue ! aacparse ! atdec ! autoaudiosink
+ * gst-launch-1.0 -v filesrc location=file.mov ! qtdemux ! queue ! aacparse ! atdec ! autoaudiosink
  * ]|
  * Decode aac audio from a mov file
  * </refsect2>
diff --git a/sys/applemedia/avfassetsrc.m b/sys/applemedia/avfassetsrc.m
index 0aaf3ad..40496a4 100644
--- a/sys/applemedia/avfassetsrc.m
+++ b/sys/applemedia/avfassetsrc.m
@@ -29,7 +29,7 @@
  * <refsect2>
  * <title>Example launch line</title>
  * |[
- * gst-launch -v -m avfassetsrc uri="file://movie.mp4" ! autovideosink
+ * gst-launch-1.0 -v -m avfassetsrc uri="file://movie.mp4" ! autovideosink
  * ]|
  * </refsect2>
  */
@@ -208,9 +208,7 @@
 
   switch (prop_id) {
     case PROP_URI:
-      if (self->uri) {
-        g_free (self->uri);
-      }
+      g_free (self->uri);
       self->uri = g_value_dup_string (value);
       break;
     default:
@@ -820,9 +818,7 @@
 
   if (asset.playable) {
     ret = TRUE;
-    if (self->uri) {
-      g_free (self->uri);
-    }
+    g_free (self->uri);
     self->uri = g_strdup (uri);
   } else {
     g_set_error (error, GST_URI_ERROR, GST_URI_ERROR_BAD_URI,
@@ -1083,7 +1079,7 @@
     return NULL;
   }
 
-  buf = gst_core_media_buffer_new (cmbuf, FALSE, TRUE);
+  buf = gst_core_media_buffer_new (cmbuf, FALSE);
   CFRelease (cmbuf);
   if (buf == NULL)
     return NULL;
diff --git a/sys/applemedia/avfvideosrc.m b/sys/applemedia/avfvideosrc.m
index a033ac0..529bd85 100644
--- a/sys/applemedia/avfvideosrc.m
+++ b/sys/applemedia/avfvideosrc.m
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2010 Ole André Vadla Ravnås <oleavr@soundrop.com>
+ * Copyright (C) 2016 Alessandro Decina <twi@centricular.com>
  *
  * This library is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Library General Public
@@ -22,6 +23,7 @@
 #endif
 
 #include "avfvideosrc.h"
+#include "glcontexthelper.h"
 
 #import <AVFoundation/AVFoundation.h>
 #if !HAVE_IOS
@@ -30,7 +32,7 @@
 #include <gst/video/video.h>
 #include <gst/gl/gstglcontext.h>
 #include "coremediabuffer.h"
-#include "corevideotexturecache.h"
+#include "videotexturecache.h"
 
 #define DEFAULT_DEVICE_INDEX  -1
 #define DEFAULT_DO_STATS      FALSE
@@ -46,7 +48,19 @@
 static GstStaticPadTemplate src_template = GST_STATIC_PAD_TEMPLATE ("src",
     GST_PAD_SRC,
     GST_PAD_ALWAYS,
-    GST_STATIC_CAPS ("video/x-raw, "
+    GST_STATIC_CAPS (
+#if !HAVE_IOS
+        GST_VIDEO_CAPS_MAKE_WITH_FEATURES
+        (GST_CAPS_FEATURE_MEMORY_GL_MEMORY,
+            "UYVY") ", "
+        "texture-target = " GST_GL_TEXTURE_TARGET_RECTANGLE_STR ";"
+#else
+        GST_VIDEO_CAPS_MAKE_WITH_FEATURES
+        (GST_CAPS_FEATURE_MEMORY_GL_MEMORY,
+            "NV12") ", "
+        "texture-target = " GST_GL_TEXTURE_TARGET_2D_STR "; "
+#endif
+        "video/x-raw, "
         "format = (string) { NV12, UYVY, YUY2 }, "
         "framerate = " GST_VIDEO_FPS_RANGE ", "
         "width = " GST_VIDEO_SIZE_RANGE ", "
@@ -57,10 +71,6 @@
         "framerate = " GST_VIDEO_FPS_RANGE ", "
         "width = " GST_VIDEO_SIZE_RANGE ", "
         "height = " GST_VIDEO_SIZE_RANGE "; "
-
-        GST_VIDEO_CAPS_MAKE_WITH_FEATURES
-        (GST_CAPS_FEATURE_MEMORY_GL_MEMORY,
-            "RGBA") "; "
 ));
 
 typedef enum _QueueState {
@@ -93,7 +103,6 @@
   BOOL stopRequest;
 
   GstCaps *caps;
-  GstVideoFormat internalFormat;
   GstVideoFormat format;
   gint width, height;
   GstClockTime latency;
@@ -107,7 +116,8 @@
   BOOL captureScreenMouseClicks;
 
   BOOL useVideoMeta;
-  GstCoreVideoTextureCache *textureCache;
+  GstGLContextHelper *ctxh;
+  GstVideoTextureCache *textureCache;
 }
 
 - (id)init;
@@ -129,7 +139,7 @@
 #if !HAVE_IOS
 - (CGDirectDisplayID)getDisplayIdFromDeviceIndex;
 #endif
-- (BOOL)getDeviceCaps:(GstCaps *)result;
+- (GstCaps *)getDeviceCaps;
 - (BOOL)setDeviceCaps:(GstVideoInfo *)info;
 - (BOOL)getSessionPresetCaps:(GstCaps *)result;
 - (BOOL)setSessionPresetCaps:(GstVideoInfo *)info;
@@ -140,8 +150,11 @@
 - (BOOL)unlock;
 - (BOOL)unlockStop;
 - (BOOL)query:(GstQuery *)query;
+- (void)setContext:(GstContext *)context;
 - (GstStateChangeReturn)changeState:(GstStateChange)transition;
 - (GstFlowReturn)create:(GstBuffer **)buf;
+- (GstCaps *)fixate:(GstCaps *)caps;
+- (BOOL)decideAllocation:(GstQuery *)query;
 - (void)updateStatistics;
 - (void)captureOutput:(AVCaptureOutput *)captureOutput
 didOutputSampleBuffer:(CMSampleBufferRef)sampleBuffer
@@ -172,7 +185,7 @@
     captureScreenMouseClicks = NO;
     useVideoMeta = NO;
     textureCache = NULL;
-
+    ctxh = gst_gl_context_helper_new (element);
     mainQueue =
         dispatch_queue_create ("org.freedesktop.gstreamer.avfvideosrc.main", NULL);
     workerQueue =
@@ -373,9 +386,6 @@
   case kCVPixelFormatType_32BGRA: /* BGRA */
     gst_format = GST_VIDEO_FORMAT_BGRA;
     break;
-  case kCVPixelFormatType_32RGBA: /* RGBA */
-    gst_format = GST_VIDEO_FORMAT_RGBA;
-    break;
   case kCVPixelFormatType_422YpCbCr8_yuvs: /* yuvs */
     gst_format = GST_VIDEO_FORMAT_YUY2;
     break;
@@ -408,13 +418,22 @@
 }
 #endif
 
-- (BOOL)getDeviceCaps:(GstCaps *)result
+- (GstCaps *)getDeviceCaps
 {
   NSArray *formats = [device valueForKey:@"formats"];
   NSArray *pixel_formats = output.availableVideoCVPixelFormatTypes;
+  GstCaps *result_caps, *result_gl_caps;
+#if !HAVE_IOS
+  GstVideoFormat gl_format = GST_VIDEO_FORMAT_UYVY;
+#else
+  GstVideoFormat gl_format = GST_VIDEO_FORMAT_NV12;
+#endif
 
   GST_DEBUG_OBJECT (element, "Getting device caps");
 
+  result_caps = gst_caps_new_empty ();
+  result_gl_caps = gst_caps_new_empty ();
+
   /* Do not use AVCaptureDeviceFormat or AVFrameRateRange only
    * available in iOS >= 7.0. We use a dynamic approach with key-value
    * coding or performSelector */
@@ -437,27 +456,48 @@
 
       for (NSNumber *pixel_format in pixel_formats) {
         GstVideoFormat gst_format = [self getGstVideoFormat:pixel_format];
+
         if (gst_format != GST_VIDEO_FORMAT_UNKNOWN) {
           if (min_fps != max_fps)
-            gst_caps_append (result, GST_AVF_FPS_RANGE_CAPS_NEW (gst_format, dimensions.width, dimensions.height, min_fps_n, min_fps_d, max_fps_n, max_fps_d));
+            gst_caps_append (result_caps, GST_AVF_FPS_RANGE_CAPS_NEW (gst_format, dimensions.width, dimensions.height, min_fps_n, min_fps_d, max_fps_n, max_fps_d));
           else
-            gst_caps_append (result, GST_AVF_CAPS_NEW (gst_format, dimensions.width, dimensions.height, max_fps_n, max_fps_d));
+            gst_caps_append (result_caps, GST_AVF_CAPS_NEW (gst_format, dimensions.width, dimensions.height, max_fps_n, max_fps_d));
         }
 
-        if (gst_format == GST_VIDEO_FORMAT_BGRA) {
-          GstCaps *rgba_caps;
-          if (min_fps != max_fps)
-            rgba_caps = GST_AVF_FPS_RANGE_CAPS_NEW (GST_VIDEO_FORMAT_RGBA, dimensions.width, dimensions.height, min_fps_n, min_fps_d, max_fps_n, max_fps_d);
-          else
-            rgba_caps = GST_AVF_CAPS_NEW (GST_VIDEO_FORMAT_RGBA, dimensions.width, dimensions.height, max_fps_n, max_fps_d);
-          gst_caps_set_features (rgba_caps, 0, gst_caps_features_new (GST_CAPS_FEATURE_MEMORY_GL_MEMORY, NULL));
-          gst_caps_append (result, rgba_caps);
+        if (gst_format == gl_format) {
+          GstCaps *gl_caps;
+          if (min_fps != max_fps) {
+            gl_caps = GST_AVF_FPS_RANGE_CAPS_NEW (gl_format,
+                    dimensions.width, dimensions.height,
+                    min_fps_n, min_fps_d,
+                    max_fps_n, max_fps_d);
+          } else {
+            gl_caps = GST_AVF_CAPS_NEW (gl_format,
+                    dimensions.width, dimensions.height,
+                    max_fps_n, max_fps_d);
+          }
+          gst_caps_set_features (gl_caps, 0,
+                  gst_caps_features_new (GST_CAPS_FEATURE_MEMORY_GL_MEMORY,
+                      NULL));
+          gst_caps_set_simple (gl_caps,
+                  "texture-target", G_TYPE_STRING,
+#if !HAVE_IOS
+                  GST_GL_TEXTURE_TARGET_RECTANGLE_STR,
+#else
+                  GST_GL_TEXTURE_TARGET_2D_STR,
+#endif
+                  NULL);
+          gst_caps_append (result_gl_caps, gl_caps);
         }
       }
     }
   }
-  GST_LOG_OBJECT (element, "Device returned the following caps %" GST_PTR_FORMAT, result);
-  return YES;
+
+  result_gl_caps = gst_caps_simplify (gst_caps_merge (result_gl_caps, result_caps));
+
+  GST_DEBUG_OBJECT (element, "Device returned the following caps %" GST_PTR_FORMAT, result_gl_caps);
+
+  return result_gl_caps;
 }
 
 - (BOOL)setDeviceCaps:(GstVideoInfo *)info
@@ -486,16 +526,22 @@
           [[rate valueForKey:@"maxFrameRate"] getValue:&max_frame_rate];
           if ((framerate >= min_frame_rate - 0.00001) &&
               (framerate <= max_frame_rate + 0.00001)) {
-            NSValue *min_frame_duration, *max_frame_duration;
-
+            NSValue *frame_duration_value;
             found_framerate = TRUE;
-            min_frame_duration = [rate valueForKey:@"minFrameDuration"];
-            max_frame_duration = [rate valueForKey:@"maxFrameDuration"];
-            [device setValue:min_frame_duration forKey:@"activeVideoMinFrameDuration"];
+            if (min_frame_rate == max_frame_rate) {
+              /* on mac we get tight ranges and an exception is raised if the
+               * frame duration doesn't match the one reported in the range to
+               * the last decimal point
+               */
+              frame_duration_value = [rate valueForKey:@"minFrameDuration"];
+            } else {
+              // Invert fps_n and fps_d to get frame duration value and timescale (or numerator and denominator)
+              frame_duration_value = [NSValue valueWithCMTime:CMTimeMake (info->fps_d, info->fps_n)];
+            }
+            [device setValue:frame_duration_value forKey:@"activeVideoMinFrameDuration"];
             @try {
               /* Only available on OSX >= 10.8 and iOS >= 7.0 */
-              // Restrict activeVideoMaxFrameDuration to the minimum value so we get a better capture frame rate
-              [device setValue:min_frame_duration forKey:@"activeVideoMaxFrameDuration"];
+              [device setValue:frame_duration_value forKey:@"activeVideoMaxFrameDuration"];
             } @catch (NSException *exception) {
               if (![[exception name] isEqualToString:NSUndefinedKeyException]) {
                 GST_WARNING ("An unexcepted error occured: %s",
@@ -618,11 +664,8 @@
   }
 
   @try {
-
-    [self getDeviceCaps:result];
-
+    result = gst_caps_merge (result, [self getDeviceCaps]);
   } @catch (NSException *exception) {
-
     if (![[exception name] isEqualToString:NSUndefinedKeyException]) {
       GST_WARNING ("An unexcepted error occured: %s", [exception.reason UTF8String]);
       return result;
@@ -646,14 +689,11 @@
   width = info.width;
   height = info.height;
   format = info.finfo->format;
-  internalFormat = GST_VIDEO_FORMAT_UNKNOWN;
   latency = gst_util_uint64_scale (GST_SECOND, info.fps_d, info.fps_n);
 
   dispatch_sync (mainQueue, ^{
     int newformat;
 
-    g_assert (![session isRunning]);
-
     if (captureScreen) {
 #if !HAVE_IOS
       AVCaptureScreenInput *screenInput = (AVCaptureScreenInput *)input;
@@ -686,7 +726,6 @@
       }
     }
 
-    internalFormat = format;
     switch (format) {
       case GST_VIDEO_FORMAT_NV12:
         newformat = kCVPixelFormatType_420YpCbCr8BiPlanarVideoRange;
@@ -697,15 +736,6 @@
       case GST_VIDEO_FORMAT_YUY2:
         newformat = kCVPixelFormatType_422YpCbCr8_yuvs;
         break;
-      case GST_VIDEO_FORMAT_RGBA:
-#if !HAVE_IOS
-        newformat = kCVPixelFormatType_422YpCbCr8;
-        internalFormat = GST_VIDEO_FORMAT_UYVY;
-#else
-        newformat = kCVPixelFormatType_32BGRA;
-        internalFormat = GST_VIDEO_FORMAT_BGRA;
-#endif
-        break;
       case GST_VIDEO_FORMAT_BGRA:
         newformat = kCVPixelFormatType_32BGRA;
         break;
@@ -716,19 +746,19 @@
         return;
     }
 
-    GST_INFO_OBJECT(element,
-        "width: %d height: %d format: %s internalFormat: %s", width, height,
-        gst_video_format_to_string (format),
-        gst_video_format_to_string (internalFormat));
+    GST_INFO_OBJECT (element,
+        "width: %d height: %d format: %s", width, height,
+        gst_video_format_to_string (format));
 
     output.videoSettings = [NSDictionary
         dictionaryWithObject:[NSNumber numberWithInt:newformat]
         forKey:(NSString*)kCVPixelBufferPixelFormatTypeKey];
 
-    if (caps)
-      gst_caps_unref (caps);
-    caps = gst_caps_copy (new_caps);
-    [session startRunning];
+    gst_caps_replace (&caps, new_caps);
+    GST_INFO_OBJECT (element, "configured caps %"GST_PTR_FORMAT, caps);
+
+    if (![session isRunning])
+      [session startRunning];
 
     /* Unlock device configuration only after session is started so the session
      * won't reset the capture formats */
@@ -765,9 +795,13 @@
   bufQueue = nil;
 
   if (textureCache)
-      gst_core_video_texture_cache_free (textureCache);
+    gst_video_texture_cache_free (textureCache);
   textureCache = NULL;
 
+  if (ctxh)
+    gst_gl_context_helper_free (ctxh);
+  ctxh = NULL;
+
   return YES;
 }
 
@@ -794,43 +828,6 @@
   return result;
 }
 
-- (BOOL)decideAllocation:(GstQuery *)query
-{
-  useVideoMeta = gst_query_find_allocation_meta (query,
-      GST_VIDEO_META_API_TYPE, NULL);
-
-  /* determine whether we can pass GL textures to downstream element */
-  GstCapsFeatures *features = gst_caps_get_features (caps, 0);
-  if (gst_caps_features_contains (features, GST_CAPS_FEATURE_MEMORY_GL_MEMORY)) {
-    GstGLContext *glContext = NULL;
-
-    /* get GL context from downstream element */
-    GstQuery *query = gst_query_new_context ("gst.gl.local_context");
-    if (gst_pad_peer_query (GST_BASE_SRC_PAD (element), query)) {
-      GstContext *context;
-      gst_query_parse_context (query, &context);
-      if (context) {
-        const GstStructure *s = gst_context_get_structure (context);
-        gst_structure_get (s, "context", GST_GL_TYPE_CONTEXT, &glContext,
-            NULL);
-      }
-    }
-    gst_query_unref (query);
-
-    if (glContext) {
-      GST_INFO_OBJECT (element, "pushing textures. Internal format %s, context %p",
-          gst_video_format_to_string (internalFormat), glContext);
-      textureCache = gst_core_video_texture_cache_new (glContext);
-      gst_core_video_texture_cache_set_format (textureCache, internalFormat, caps);
-      gst_object_unref (glContext);
-    } else {
-      GST_WARNING_OBJECT (element, "got memory:GLMemory caps but not GL context from downstream element");
-    }
-  } 
-
-  return YES;
-}
-
 - (BOOL)unlock
 {
   [bufQueueLock lock];
@@ -941,25 +938,15 @@
     }
   }
 
-  *buf = gst_core_media_buffer_new (sbuf, useVideoMeta, textureCache == NULL);
+  *buf = gst_core_media_buffer_new (sbuf, useVideoMeta);
   if (*buf == NULL) {
     CFRelease (sbuf);
     return GST_FLOW_ERROR;
   }
-
-  if (format == GST_VIDEO_FORMAT_RGBA) {
-    /* So now buf contains BGRA data (!) . Since downstream is actually going to
-     * use the GL upload meta to get RGBA textures (??), we need to override the
-     * VideoMeta format (!!!). Yes this is confusing, see setCaps:  */
-    GstVideoMeta *video_meta = gst_buffer_get_video_meta (*buf);
-    if (video_meta) {
-      video_meta->format = format;
-    }
-  }
   CFRelease (sbuf);
 
   if (textureCache != NULL) {
-    *buf = gst_core_video_texture_cache_get_gl_buffer (textureCache, *buf);
+    *buf = gst_video_texture_cache_get_gl_buffer (textureCache, *buf);
     if (*buf == NULL)
       return GST_FLOW_ERROR;
   }
@@ -975,6 +962,57 @@
   return GST_FLOW_OK;
 }
 
+- (GstCaps *)fixate:(GstCaps *)new_caps
+{
+  GstStructure *structure;
+
+  new_caps = gst_caps_make_writable (new_caps);
+  new_caps = gst_caps_truncate (new_caps);
+  structure = gst_caps_get_structure (new_caps, 0);
+  /* crank up to 11. This is what the presets do, but we don't use the presets
+   * in ios >= 7.0 */
+  gst_structure_fixate_field_nearest_int (structure, "height", G_MAXINT);
+  gst_structure_fixate_field_nearest_fraction (structure, "framerate", G_MAXINT, 1);
+
+  return gst_caps_fixate (new_caps);
+}
+
+- (BOOL)decideAllocation:(GstQuery *)query
+{
+  GstCaps *alloc_caps;
+  GstCapsFeatures *features;
+  gboolean ret;
+
+  ret = GST_BASE_SRC_CLASS (parent_class)->decide_allocation (baseSrc, query);
+  if (!ret)
+    return ret;
+
+  gst_query_parse_allocation (query, &alloc_caps, NULL);
+  features = gst_caps_get_features (alloc_caps, 0);
+  if (gst_caps_features_contains (features, GST_CAPS_FEATURE_MEMORY_GL_MEMORY)) {
+    gst_gl_context_helper_ensure_context (ctxh);
+    GST_INFO_OBJECT (element, "pushing textures, context %p old context %p",
+        ctxh->context, textureCache ? textureCache->ctx : NULL);
+    if (textureCache && textureCache->ctx != ctxh->context) {
+      gst_video_texture_cache_free (textureCache);
+      textureCache = NULL;
+    }
+    textureCache = gst_video_texture_cache_new (ctxh->context);
+    gst_video_texture_cache_set_format (textureCache, format, alloc_caps);
+  }
+
+  return TRUE;
+}
+
+- (void)setContext:(GstContext *)context
+{
+  GST_INFO_OBJECT (element, "setting context %s",
+          gst_context_get_context_type (context));
+  gst_gl_handle_set_context (element, context,
+          &ctxh->display, &ctxh->other_context);
+  GST_ELEMENT_CLASS (parent_class)->set_context (element, context);
+}
+
 - (void)getSampleBuffer:(CMSampleBufferRef)sbuf
               timestamp:(GstClockTime *)outTimestamp
                duration:(GstClockTime *)outDuration
@@ -1099,14 +1137,16 @@
 static gboolean gst_avf_video_src_stop (GstBaseSrc * basesrc);
 static gboolean gst_avf_video_src_query (GstBaseSrc * basesrc,
     GstQuery * query);
-static gboolean gst_avf_video_src_decide_allocation (GstBaseSrc * basesrc,
-    GstQuery * query);
 static gboolean gst_avf_video_src_unlock (GstBaseSrc * basesrc);
 static gboolean gst_avf_video_src_unlock_stop (GstBaseSrc * basesrc);
 static GstFlowReturn gst_avf_video_src_create (GstPushSrc * pushsrc,
     GstBuffer ** buf);
-static gboolean gst_avf_video_src_negotiate (GstBaseSrc * basesrc);
-
+static GstCaps * gst_avf_video_src_fixate (GstBaseSrc * bsrc,
+    GstCaps * caps);
+static gboolean gst_avf_video_src_decide_allocation (GstBaseSrc * bsrc,
+    GstQuery * query);
+static void gst_avf_video_src_set_context (GstElement * element,
+        GstContext * context);
 
 static void
 gst_avf_video_src_class_init (GstAVFVideoSrcClass * klass)
@@ -1121,6 +1161,7 @@
   gobject_class->set_property = gst_avf_video_src_set_property;
 
   gstelement_class->change_state = gst_avf_video_src_change_state;
+  gstelement_class->set_context = gst_avf_video_src_set_context;
 
   gstbasesrc_class->get_caps = gst_avf_video_src_get_caps;
   gstbasesrc_class->set_caps = gst_avf_video_src_set_caps;
@@ -1129,8 +1170,8 @@
   gstbasesrc_class->query = gst_avf_video_src_query;
   gstbasesrc_class->unlock = gst_avf_video_src_unlock;
   gstbasesrc_class->unlock_stop = gst_avf_video_src_unlock_stop;
+  gstbasesrc_class->fixate = gst_avf_video_src_fixate;
   gstbasesrc_class->decide_allocation = gst_avf_video_src_decide_allocation;
-  gstbasesrc_class->negotiate = gst_avf_video_src_negotiate;
 
   gstpushsrc_class->create = gst_avf_video_src_create;
 
@@ -1338,18 +1379,6 @@
 }
 
 static gboolean
-gst_avf_video_src_decide_allocation (GstBaseSrc * basesrc, GstQuery * query)
-{
-  gboolean ret;
-
-  OBJC_CALLOUT_BEGIN ();
-  ret = [GST_AVF_VIDEO_SRC_IMPL (basesrc) decideAllocation:query];
-  OBJC_CALLOUT_END ();
-
-  return ret;
-}
-
-static gboolean
 gst_avf_video_src_unlock (GstBaseSrc * basesrc)
 {
   gboolean ret;
@@ -1385,13 +1414,36 @@
   return ret;
 }
 
-static gboolean
-gst_avf_video_src_negotiate (GstBaseSrc * basesrc)
-{
-  /* FIXME: We don't support reconfiguration yet */
-  if (gst_pad_has_current_caps (GST_BASE_SRC_PAD (basesrc)))
-    return TRUE;
 
-  return GST_BASE_SRC_CLASS (parent_class)->negotiate (basesrc);
+static GstCaps *
+gst_avf_video_src_fixate (GstBaseSrc * bsrc, GstCaps * caps)
+{
+  GstCaps *ret;
+
+  OBJC_CALLOUT_BEGIN ();
+  ret = [GST_AVF_VIDEO_SRC_IMPL (bsrc) fixate:caps];
+  OBJC_CALLOUT_END ();
+
+  return ret;
 }
 
+static gboolean
+gst_avf_video_src_decide_allocation (GstBaseSrc * bsrc,
+    GstQuery * query)
+{
+  gboolean ret;
+
+  OBJC_CALLOUT_BEGIN ();
+  ret = [GST_AVF_VIDEO_SRC_IMPL (bsrc) decideAllocation:query];
+  OBJC_CALLOUT_END ();
+
+  return ret;
+}
+
+static void
+gst_avf_video_src_set_context (GstElement * element, GstContext * context)
+{
+  OBJC_CALLOUT_BEGIN ();
+  [GST_AVF_VIDEO_SRC_IMPL (element) setContext:context];
+  OBJC_CALLOUT_END ();
+}
diff --git a/sys/applemedia/coremediabuffer.c b/sys/applemedia/coremediabuffer.c
index 681fe14..cf34224 100644
--- a/sys/applemedia/coremediabuffer.c
+++ b/sys/applemedia/coremediabuffer.c
@@ -19,15 +19,42 @@
  * Boston, MA 02110-1301, USA.
  */
 
+#include "corevideobuffer.h"
 #include "coremediabuffer.h"
+#include "corevideomemory.h"
+
+static const GstMetaInfo *gst_core_media_meta_get_info (void);
+
+static void
+gst_core_media_meta_add (GstBuffer * buffer, CMSampleBufferRef sample_buf,
+    CVImageBufferRef image_buf, CMBlockBufferRef block_buf)
+{
+  GstCoreMediaMeta *meta;
+
+  meta =
+      (GstCoreMediaMeta *) gst_buffer_add_meta (buffer,
+      gst_core_media_meta_get_info (), NULL);
+  CFRetain (sample_buf);
+  if (image_buf)
+    CVBufferRetain (image_buf);
+  if (block_buf)
+    CFRetain (block_buf);
+  meta->sample_buf = sample_buf;
+  meta->image_buf = image_buf;
+  meta->block_buf = block_buf;
+  if (image_buf != NULL && CFGetTypeID (image_buf) == CVPixelBufferGetTypeID ())
+    meta->pixel_buf = (CVPixelBufferRef) image_buf;
+  else
+    meta->pixel_buf = NULL;
+}
 
 static void
 gst_core_media_meta_free (GstCoreMediaMeta * meta, GstBuffer * buf)
 {
   if (meta->image_buf != NULL) {
-    CVPixelBufferUnlockBaseAddress (meta->image_buf, 0);
     CVBufferRelease (meta->image_buf);
   }
+
   if (meta->block_buf != NULL) {
     CFRelease (meta->block_buf);
   }
@@ -35,6 +62,22 @@
   CFRelease (meta->sample_buf);
 }
 
+static gboolean
+gst_core_media_meta_transform (GstBuffer * transbuf, GstCoreMediaMeta * meta,
+    GstBuffer * buffer, GQuark type, GstMetaTransformCopy * data)
+{
+  if (!data->region) {
+    /* only copy if the complete data is copied as well */
+    gst_core_media_meta_add (transbuf, meta->sample_buf, meta->image_buf,
+        meta->block_buf);
+  } else {
+    GST_WARNING_OBJECT (transbuf,
+        "dropping Core Media metadata due to partial buffer");
+  }
+
+  return TRUE;                  /* retval unused */
+}
+
 GType
 gst_core_media_meta_api_get_type (void)
 {
@@ -58,7 +101,7 @@
         "GstCoreMediaMeta", sizeof (GstCoreMediaMeta),
         (GstMetaInitFunction) NULL,
         (GstMetaFreeFunction) gst_core_media_meta_free,
-        (GstMetaTransformFunction) NULL);
+        (GstMetaTransformFunction) gst_core_media_meta_transform);
     g_once_init_leave (&core_media_meta_info, meta);
   }
   return core_media_meta_info;
@@ -85,68 +128,6 @@
 }
 
 static gboolean
-gst_core_media_buffer_wrap_pixel_buffer (GstBuffer * buf, GstVideoInfo * info,
-    CVPixelBufferRef pixel_buf, gboolean * has_padding, gboolean map)
-{
-  guint n_planes;
-  gsize offset[GST_VIDEO_MAX_PLANES] = { 0 };
-  gint stride[GST_VIDEO_MAX_PLANES] = { 0 };
-  GstVideoMeta *video_meta;
-  UInt32 size;
-
-  if (map && CVPixelBufferLockBaseAddress (pixel_buf, 0) != kCVReturnSuccess) {
-    GST_ERROR ("Could not lock pixel buffer base address");
-    return FALSE;
-  }
-
-  *has_padding = FALSE;
-
-  if (CVPixelBufferIsPlanar (pixel_buf)) {
-    gint i, size = 0, plane_offset = 0;
-
-    n_planes = CVPixelBufferGetPlaneCount (pixel_buf);
-    for (i = 0; i < n_planes; i++) {
-      stride[i] = CVPixelBufferGetBytesPerRowOfPlane (pixel_buf, i);
-
-      if (stride[i] != GST_VIDEO_INFO_PLANE_STRIDE (info, i)) {
-        *has_padding = TRUE;
-      }
-
-      size = stride[i] * CVPixelBufferGetHeightOfPlane (pixel_buf, i);
-      offset[i] = plane_offset;
-      plane_offset += size;
-
-      if (map) {
-        gst_buffer_append_memory (buf,
-            gst_memory_new_wrapped (GST_MEMORY_FLAG_NO_SHARE,
-                CVPixelBufferGetBaseAddressOfPlane (pixel_buf, i), size, 0,
-                size, NULL, NULL));
-      }
-    }
-  } else {
-
-    n_planes = 1;
-    stride[0] = CVPixelBufferGetBytesPerRow (pixel_buf);
-    offset[0] = 0;
-    size = stride[0] * CVPixelBufferGetHeight (pixel_buf);
-
-    if (map) {
-      gst_buffer_append_memory (buf,
-          gst_memory_new_wrapped (GST_MEMORY_FLAG_NO_SHARE,
-              CVPixelBufferGetBaseAddress (pixel_buf), size, 0, size, NULL,
-              NULL));
-    }
-  }
-
-  video_meta =
-      gst_buffer_add_video_meta_full (buf, GST_VIDEO_FRAME_FLAG_NONE,
-      GST_VIDEO_INFO_FORMAT (info), info->width, info->height, n_planes, offset,
-      stride);
-
-  return TRUE;
-}
-
-static gboolean
 gst_core_media_buffer_wrap_block_buffer (GstBuffer * buf,
     CMBlockBufferRef block_buf)
 {
@@ -247,11 +228,10 @@
 
 GstBuffer *
 gst_core_media_buffer_new (CMSampleBufferRef sample_buf,
-    gboolean use_video_meta, gboolean map)
+    gboolean use_video_meta)
 {
   CVImageBufferRef image_buf;
   CMBlockBufferRef block_buf;
-  GstCoreMediaMeta *meta;
   GstBuffer *buf;
 
   image_buf = CMSampleBufferGetImageBuffer (sample_buf);
@@ -259,35 +239,22 @@
 
   buf = gst_buffer_new ();
 
-  meta = (GstCoreMediaMeta *) gst_buffer_add_meta (buf,
-      gst_core_media_meta_get_info (), NULL);
-  CFRetain (sample_buf);
-  if (image_buf)
-    CVBufferRetain (image_buf);
-  if (block_buf)
-    CFRetain (block_buf);
-  meta->sample_buf = sample_buf;
-  meta->image_buf = image_buf;
-  meta->pixel_buf = NULL;
-  meta->block_buf = block_buf;
+  gst_core_media_meta_add (buf, sample_buf, image_buf, block_buf);
 
   if (image_buf != NULL && CFGetTypeID (image_buf) == CVPixelBufferGetTypeID ()) {
     GstVideoInfo info;
     gboolean has_padding = FALSE;
+    CVPixelBufferRef pixel_buf = (CVPixelBufferRef) image_buf;
 
-    meta->pixel_buf = (CVPixelBufferRef) image_buf;
-    if (!gst_video_info_init_from_pixel_buffer (&info, meta->pixel_buf)) {
+    if (!gst_video_info_init_from_pixel_buffer (&info, pixel_buf)) {
       goto error;
     }
 
-    if (!gst_core_media_buffer_wrap_pixel_buffer (buf, &info, meta->pixel_buf,
-            &has_padding, map)) {
-      goto error;
-    }
+    gst_core_video_wrap_pixel_buffer (buf, &info, pixel_buf, &has_padding);
 
     /* If the video meta API is not supported, remove padding by
      * copying the core media buffer to a system memory buffer */
-    if (map && has_padding && !use_video_meta) {
+    if (has_padding && !use_video_meta) {
       GstBuffer *copy_buf;
       copy_buf = gst_core_media_buffer_new_from_buffer (buf, &info);
       if (!copy_buf) {
@@ -299,7 +266,7 @@
     }
 
   } else if (block_buf != NULL) {
-    if (map && !gst_core_media_buffer_wrap_block_buffer (buf, block_buf)) {
+    if (!gst_core_media_buffer_wrap_block_buffer (buf, block_buf)) {
       goto error;
     }
   } else {
diff --git a/sys/applemedia/coremediabuffer.h b/sys/applemedia/coremediabuffer.h
index 2b3b74d..bc18acf 100644
--- a/sys/applemedia/coremediabuffer.h
+++ b/sys/applemedia/coremediabuffer.h
@@ -43,8 +43,7 @@
 
 
 GstBuffer * gst_core_media_buffer_new      (CMSampleBufferRef sample_buf,
-                                            gboolean use_video_meta,
-                                            gboolean map);
+                                            gboolean use_video_meta);
 CVPixelBufferRef gst_core_media_buffer_get_pixel_buffer
                                            (GstBuffer * buf);
 GType gst_core_media_meta_api_get_type (void);
diff --git a/sys/applemedia/corevideobuffer.c b/sys/applemedia/corevideobuffer.c
index 269e19d..67d899c 100644
--- a/sys/applemedia/corevideobuffer.c
+++ b/sys/applemedia/corevideobuffer.c
@@ -18,15 +18,40 @@
  */
 
 #include "corevideobuffer.h"
+#include "corevideomemory.h"
+
+static const GstMetaInfo *gst_core_video_meta_get_info (void);
+
+static void
+gst_core_video_meta_add (GstBuffer * buffer, CVBufferRef cvbuf)
+{
+  GstCoreVideoMeta *meta;
+
+  meta = (GstCoreVideoMeta *) gst_buffer_add_meta (buffer,
+      gst_core_video_meta_get_info (), NULL);
+  meta->cvbuf = CVBufferRetain (cvbuf);
+  meta->pixbuf = (CVPixelBufferRef) cvbuf;
+}
 
 static void
 gst_core_video_meta_free (GstCoreVideoMeta * meta, GstBuffer * buf)
 {
-  if (meta->pixbuf != NULL) {
-    CVPixelBufferUnlockBaseAddress (meta->pixbuf, 0);
+  CVBufferRelease (meta->cvbuf);
+}
+
+static gboolean
+gst_core_video_meta_transform (GstBuffer * transbuf, GstCoreVideoMeta * meta,
+    GstBuffer * buffer, GQuark type, GstMetaTransformCopy * data)
+{
+  if (!data->region) {
+    /* only copy if the complete data is copied as well */
+    gst_core_video_meta_add (transbuf, meta->cvbuf);
+  } else {
+    GST_WARNING_OBJECT (transbuf,
+        "dropping Core Video metadata due to partial buffer");
   }
 
-  CVBufferRelease (meta->cvbuf);
+  return TRUE;                  /* retval unused */
 }
 
 GType
@@ -52,89 +77,89 @@
         "GstCoreVideoMeta", sizeof (GstCoreVideoMeta),
         (GstMetaInitFunction) NULL,
         (GstMetaFreeFunction) gst_core_video_meta_free,
-        (GstMetaTransformFunction) NULL);
+        (GstMetaTransformFunction) gst_core_video_meta_transform);
     g_once_init_leave (&core_video_meta_info, meta);
   }
   return core_video_meta_info;
 }
 
+void
+gst_core_video_wrap_pixel_buffer (GstBuffer * buf, GstVideoInfo * info,
+    CVPixelBufferRef pixel_buf, gboolean * has_padding)
+{
+  guint n_planes;
+  gsize offset[GST_VIDEO_MAX_PLANES] = { 0 };
+  gint stride[GST_VIDEO_MAX_PLANES] = { 0 };
+  UInt32 size;
+  GstAppleCoreVideoPixelBuffer *gpixbuf;
+
+  gpixbuf = gst_apple_core_video_pixel_buffer_new (pixel_buf);
+  *has_padding = FALSE;
+
+  if (CVPixelBufferIsPlanar (pixel_buf)) {
+    gint i, size = 0, plane_offset = 0;
+
+    n_planes = CVPixelBufferGetPlaneCount (pixel_buf);
+    for (i = 0; i < n_planes; i++) {
+      stride[i] = CVPixelBufferGetBytesPerRowOfPlane (pixel_buf, i);
+
+      if (stride[i] != GST_VIDEO_INFO_PLANE_STRIDE (info, i)) {
+        *has_padding = TRUE;
+      }
+
+      size = stride[i] * CVPixelBufferGetHeightOfPlane (pixel_buf, i);
+      offset[i] = plane_offset;
+      plane_offset += size;
+
+      gst_buffer_append_memory (buf,
+          gst_apple_core_video_memory_new_wrapped (gpixbuf, i, size));
+    }
+  } else {
+    n_planes = 1;
+    stride[0] = CVPixelBufferGetBytesPerRow (pixel_buf);
+    offset[0] = 0;
+    size = stride[0] * CVPixelBufferGetHeight (pixel_buf);
+
+    gst_buffer_append_memory (buf,
+        gst_apple_core_video_memory_new_wrapped (gpixbuf,
+            GST_APPLE_CORE_VIDEO_NO_PLANE, size));
+  }
+
+  gst_apple_core_video_pixel_buffer_unref (gpixbuf);
+
+  if (info) {
+    GstVideoMeta *video_meta;
+
+    video_meta =
+        gst_buffer_add_video_meta_full (buf, GST_VIDEO_FRAME_FLAG_NONE,
+        GST_VIDEO_INFO_FORMAT (info), info->width, info->height, n_planes,
+        offset, stride);
+  }
+}
+
 GstBuffer *
-gst_core_video_buffer_new (CVBufferRef cvbuf, GstVideoInfo * vinfo,
-    gboolean map)
+gst_core_video_buffer_new (CVBufferRef cvbuf, GstVideoInfo * vinfo)
 {
   CVPixelBufferRef pixbuf = NULL;
   GstBuffer *buf;
   GstCoreVideoMeta *meta;
-  guint n_planes;
-  gsize offset[GST_VIDEO_MAX_PLANES];
-  gint stride[GST_VIDEO_MAX_PLANES];
+  gboolean has_padding;         /* not used for now */
 
   if (CFGetTypeID (cvbuf) != CVPixelBufferGetTypeID ())
     /* TODO: Do we need to handle other buffer types? */
-    goto error;
+    return NULL;
 
   pixbuf = (CVPixelBufferRef) cvbuf;
 
-  if (map && CVPixelBufferLockBaseAddress (pixbuf, 0) != kCVReturnSuccess) {
-    goto error;
-  }
-
   buf = gst_buffer_new ();
 
-  /* add the corevideo meta to free the underlying corevideo buffer */
+  /* add the corevideo meta to pass the underlying corevideo buffer */
   meta = (GstCoreVideoMeta *) gst_buffer_add_meta (buf,
       gst_core_video_meta_get_info (), NULL);
   meta->cvbuf = CVBufferRetain (cvbuf);
   meta->pixbuf = pixbuf;
 
-  /* set stride, offset and size */
-  memset (&offset, 0, sizeof (offset));
-  memset (&stride, 0, sizeof (stride));
-
-  if (CVPixelBufferIsPlanar (pixbuf)) {
-    int i, size, off;
-
-    n_planes = CVPixelBufferGetPlaneCount (pixbuf);
-    off = 0;
-    for (i = 0; i < n_planes; ++i) {
-      stride[i] = CVPixelBufferGetBytesPerRowOfPlane (pixbuf, i);
-      size = stride[i] * CVPixelBufferGetHeightOfPlane (pixbuf, i);
-      offset[i] = off;
-      off += size;
-
-      if (map) {
-        gst_buffer_append_memory (buf,
-            gst_memory_new_wrapped (GST_MEMORY_FLAG_NO_SHARE,
-                CVPixelBufferGetBaseAddressOfPlane (pixbuf, i), size, 0, size,
-                NULL, NULL));
-      }
-    }
-  } else {
-    int size;
-
-    n_planes = 1;
-    stride[0] = CVPixelBufferGetBytesPerRow (pixbuf);
-    offset[0] = 0;
-    size = stride[0] * CVPixelBufferGetHeight (pixbuf);
-
-    if (map) {
-      gst_buffer_append_memory (buf,
-          gst_memory_new_wrapped (GST_MEMORY_FLAG_NO_SHARE,
-              CVPixelBufferGetBaseAddress (pixbuf), size, 0, size, NULL, NULL));
-    }
-  }
-
-  if (vinfo) {
-    GstVideoMeta *video_meta;
-
-    video_meta =
-        gst_buffer_add_video_meta_full (buf, GST_VIDEO_FRAME_FLAG_NONE,
-        vinfo->finfo->format, CVPixelBufferGetWidth (pixbuf),
-        CVPixelBufferGetHeight (pixbuf), n_planes, offset, stride);
-  }
+  gst_core_video_wrap_pixel_buffer (buf, vinfo, pixbuf, &has_padding);
 
   return buf;
-
-error:
-  return NULL;
 }
diff --git a/sys/applemedia/corevideobuffer.h b/sys/applemedia/corevideobuffer.h
index 8f58a6e..0ea7d1e 100644
--- a/sys/applemedia/corevideobuffer.h
+++ b/sys/applemedia/corevideobuffer.h
@@ -41,8 +41,11 @@
 } GstCoreVideoMeta;
 
 GstBuffer * gst_core_video_buffer_new      (CVBufferRef cvbuf,
-                                            GstVideoInfo *info,
-                                            gboolean map);
+                                            GstVideoInfo *info);
+void gst_core_video_wrap_pixel_buffer      (GstBuffer * buf,
+                                            GstVideoInfo * info,
+                                            CVPixelBufferRef pixel_buf,
+                                            gboolean * has_padding);
 GType gst_core_video_meta_api_get_type (void);
 
 G_END_DECLS
diff --git a/sys/applemedia/corevideomemory.c b/sys/applemedia/corevideomemory.c
new file mode 100644
index 0000000..4cb085d
--- /dev/null
+++ b/sys/applemedia/corevideomemory.c
@@ -0,0 +1,465 @@
+/* GStreamer Apple Core Video memory
+ * Copyright (C) 2015 Ilya Konstantinov
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for mordetails.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include "corevideomemory.h"
+
+GST_DEBUG_CATEGORY_STATIC (GST_CAT_APPLE_CORE_VIDEO_MEMORY);
+#define GST_CAT_DEFAULT GST_CAT_APPLE_CORE_VIDEO_MEMORY
+
+static const char *_lock_state_names[] = {
+  "Unlocked", "Locked Read-Only", "Locked Read-Write"
+};
+
+/**
+ * gst_apple_core_video_pixel_buffer_new:
+ * @buf: an unlocked CVPixelBuffer
+ *
+ * Initializes a wrapper to manage locking state for a CVPixelBuffer.
+ * This function expects to receive unlocked CVPixelBuffer, and further assumes
+ * that no one else will lock it (as long as the wrapper exists).
+ *
+ * This function retains @buf.
+ *
+ * Returns: The wrapped @buf.
+ */
+GstAppleCoreVideoPixelBuffer *
+gst_apple_core_video_pixel_buffer_new (CVPixelBufferRef buf)
+{
+  GstAppleCoreVideoPixelBuffer *gpixbuf =
+      g_slice_new (GstAppleCoreVideoPixelBuffer);
+  gpixbuf->refcount = 1;
+  g_mutex_init (&gpixbuf->mutex);
+  gpixbuf->buf = CVPixelBufferRetain (buf);
+  gpixbuf->lock_state = GST_APPLE_CORE_VIDEO_MEMORY_UNLOCKED;
+  gpixbuf->lock_count = 0;
+  return gpixbuf;
+}
+
+GstAppleCoreVideoPixelBuffer *
+gst_apple_core_video_pixel_buffer_ref (GstAppleCoreVideoPixelBuffer * gpixbuf)
+{
+  g_atomic_int_inc (&gpixbuf->refcount);
+  return gpixbuf;
+}
+
+void
+gst_apple_core_video_pixel_buffer_unref (GstAppleCoreVideoPixelBuffer * gpixbuf)
+{
+  if (g_atomic_int_dec_and_test (&gpixbuf->refcount)) {
+    if (gpixbuf->lock_state != GST_APPLE_CORE_VIDEO_MEMORY_UNLOCKED) {
+      GST_ERROR
+          ("%p: CVPixelBuffer memory still locked (lock_count = %d), likely forgot to unmap GstAppleCoreVideoMemory",
+          gpixbuf, gpixbuf->lock_count);
+    }
+    CVPixelBufferRelease (gpixbuf->buf);
+    g_mutex_clear (&gpixbuf->mutex);
+    g_slice_free (GstAppleCoreVideoPixelBuffer, gpixbuf);
+  }
+}
+
+/**
+ * gst_apple_core_video_pixel_buffer_lock:
+ * @gpixbuf: the wrapped CVPixelBuffer
+ * @flags: mapping flags for either read-only or read-write locking
+ *
+ * Locks the pixel buffer into CPU memory for reading only, or
+ * reading and writing. The desired lock mode is deduced from @flags.
+ *
+ * For planar buffers, each plane's #GstAppleCoreVideoMemory will reference
+ * the same #GstAppleCoreVideoPixelBuffer; therefore this function will be
+ * called multiple times for the same @gpixbuf. Each call to this function
+ * should be matched by a call to gst_apple_core_video_pixel_buffer_unlock().
+ *
+ * Notes:
+ *
+ * - Read-only locking improves performance by preventing Core Video
+ *   from invalidating existing caches of the buffer’s contents.
+ *
+ * - Only the first call actually locks; subsequent calls succeed
+ *   as long as their requested flags are compatible with how the buffer
+ *   is already locked.
+ *
+ *   For example, the following code will succeed:
+ *   |[<!-- language="C" -->
+ *   gst_memory_map(plane1, GST_MAP_READWRITE);
+ *   gst_memory_map(plane2, GST_MAP_READ);
+ *   ]|
+ *   while the ƒollowing code will fail:
+ *   |[<!-- language="C" -->
+ *   gst_memory_map(plane1, GST_MAP_READ);
+ *   gst_memory_map(plane2, GST_MAP_READWRITE); /<!-- -->* ERROR: already locked for read-only *<!-- -->/
+ *   ]|
+ *
+ * Returns: %TRUE if the buffer was locked as requested
+ */
+static gboolean
+gst_apple_core_video_pixel_buffer_lock (GstAppleCoreVideoPixelBuffer * gpixbuf,
+    GstMapFlags flags)
+{
+  CVReturn cvret;
+  CVOptionFlags lockFlags;
+
+  g_mutex_lock (&gpixbuf->mutex);
+
+  switch (gpixbuf->lock_state) {
+    case GST_APPLE_CORE_VIDEO_MEMORY_UNLOCKED:
+      lockFlags = (flags & GST_MAP_WRITE) ? 0 : kCVPixelBufferLock_ReadOnly;
+      cvret = CVPixelBufferLockBaseAddress (gpixbuf->buf, lockFlags);
+      if (cvret != kCVReturnSuccess) {
+        g_mutex_unlock (&gpixbuf->mutex);
+        /* TODO: Map kCVReturnError etc. into strings */
+        GST_ERROR ("%p: unable to lock base address for pixbuf %p: %d", gpixbuf,
+            gpixbuf->buf, cvret);
+        return FALSE;
+      }
+      gpixbuf->lock_state =
+          (flags & GST_MAP_WRITE) ?
+          GST_APPLE_CORE_VIDEO_MEMORY_LOCKED_READ_WRITE :
+          GST_APPLE_CORE_VIDEO_MEMORY_LOCKED_READONLY;
+      break;
+
+    case GST_APPLE_CORE_VIDEO_MEMORY_LOCKED_READONLY:
+      if (flags & GST_MAP_WRITE) {
+        g_mutex_unlock (&gpixbuf->mutex);
+        GST_ERROR ("%p: pixel buffer %p already locked for read-only access",
+            gpixbuf, gpixbuf->buf);
+        return FALSE;
+      }
+      break;
+
+    case GST_APPLE_CORE_VIDEO_MEMORY_LOCKED_READ_WRITE:
+      break;                    /* nothing to do, already most permissive mapping */
+  }
+
+  g_atomic_int_inc (&gpixbuf->lock_count);
+
+  g_mutex_unlock (&gpixbuf->mutex);
+
+  GST_DEBUG ("%p: pixbuf %p, %s (%d times)",
+      gpixbuf,
+      gpixbuf->buf,
+      _lock_state_names[gpixbuf->lock_state], gpixbuf->lock_count);
+
+  return TRUE;
+}
+
+/**
+ * gst_apple_core_video_pixel_buffer_unlock:
+ * @gpixbuf: the wrapped CVPixelBuffer
+ *
+ * Unlocks the pixel buffer from CPU memory. Should be called
+ * for every gst_apple_core_video_pixel_buffer_lock() call.
+ */
+static gboolean
+gst_apple_core_video_pixel_buffer_unlock (GstAppleCoreVideoPixelBuffer *
+    gpixbuf)
+{
+  CVOptionFlags lockFlags;
+  CVReturn cvret;
+
+  if (gpixbuf->lock_state == GST_APPLE_CORE_VIDEO_MEMORY_UNLOCKED) {
+    GST_ERROR ("%p: pixel buffer %p not locked", gpixbuf, gpixbuf->buf);
+    return FALSE;
+  }
+
+  if (!g_atomic_int_dec_and_test (&gpixbuf->lock_count)) {
+    return TRUE;                /* still locked, by current and/or other callers */
+  }
+
+  g_mutex_lock (&gpixbuf->mutex);
+
+  lockFlags =
+      (gpixbuf->lock_state ==
+      GST_APPLE_CORE_VIDEO_MEMORY_LOCKED_READONLY) ? kCVPixelBufferLock_ReadOnly
+      : 0;
+  cvret = CVPixelBufferUnlockBaseAddress (gpixbuf->buf, lockFlags);
+  if (cvret != kCVReturnSuccess) {
+    g_mutex_unlock (&gpixbuf->mutex);
+    g_atomic_int_inc (&gpixbuf->lock_count);
+    /* TODO: Map kCVReturnError etc. into strings */
+    GST_ERROR ("%p: unable to unlock base address for pixbuf %p: %d", gpixbuf,
+        gpixbuf->buf, cvret);
+    return FALSE;
+  }
+
+  gpixbuf->lock_state = GST_APPLE_CORE_VIDEO_MEMORY_UNLOCKED;
+
+  g_mutex_unlock (&gpixbuf->mutex);
+
+  GST_DEBUG ("%p: pixbuf %p, %s (%d locks remaining)",
+      gpixbuf,
+      gpixbuf->buf,
+      _lock_state_names[gpixbuf->lock_state], gpixbuf->lock_count);
+
+  return TRUE;
+}
+
+/*
+ * GstAppleCoreVideoAllocator
+ */
+
+struct _GstAppleCoreVideoAllocatorClass
+{
+  GstAllocatorClass parent_class;
+};
+
+typedef struct _GstAppleCoreVideoAllocatorClass GstAppleCoreVideoAllocatorClass;
+
+struct _GstAppleCoreVideoAllocator
+{
+  GstAllocator parent_instance;
+};
+
+typedef struct _GstAppleCoreVideoAllocator GstAppleCoreVideoAllocator;
+
+/* GType for GstAppleCoreVideoAllocator */
+GType gst_apple_core_video_allocator_get_type (void);
+#define GST_TYPE_APPLE_CORE_VIDEO_ALLOCATOR             (gst_apple_core_video_allocator_get_type())
+#define GST_IS_APPLE_CORE_VIDEO_ALLOCATOR(obj)          (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GST_TYPE_APPLE_CORE_VIDEO_ALLOCATOR))
+#define GST_IS_APPLE_CORE_VIDEO_ALLOCATOR_CLASS(klass)  (G_TYPE_CHECK_CLASS_TYPE ((klass), GST_TYPE_APPLE_CORE_VIDEO_ALLOCATOR))
+#define GST_APPLE_CORE_VIDEO_ALLOCATOR_GET_CLASS(obj)   (G_TYPE_INSTANCE_GET_CLASS ((obj), GST_TYPE_APPLE_CORE_VIDEO_ALLOCATOR, GstAppleCoreVideoAllocatorClass))
+#define GST_APPLE_CORE_VIDEO_ALLOCATOR(obj)             (G_TYPE_CHECK_INSTANCE_CAST ((obj), GST_TYPE_APPLE_CORE_VIDEO_ALLOCATOR, GstAppleCoreVideoAllocator))
+#define GST_APPLE_CORE_VIDEO_ALLOCATOR_CLASS(klass)     (G_TYPE_CHECK_CLASS_CAST ((klass), GST_TYPE_APPLE_CORE_VIDEO_ALLOCATOR, GstAppleCoreVideoAllocatorClass))
+
+G_DEFINE_TYPE (GstAppleCoreVideoAllocator, gst_apple_core_video_allocator,
+    GST_TYPE_ALLOCATOR);
+
+/* Name for allocator registration */
+#define GST_APPLE_CORE_VIDEO_ALLOCATOR_NAME "AppleCoreVideoMemory"
+
+/* Singleton instance of GstAppleCoreVideoAllocator */
+static GstAppleCoreVideoAllocator *_apple_core_video_allocator;
+
+/**
+ * gst_apple_core_video_memory_init:
+ *
+ * Initializes the Core Video Memory allocator. This function must be called
+ * before #GstAppleCoreVideoMemory can be created.
+ *
+ * It is safe to call this function multiple times.
+ */
+void
+gst_apple_core_video_memory_init (void)
+{
+  static volatile gsize _init = 0;
+
+  if (g_once_init_enter (&_init)) {
+    GST_DEBUG_CATEGORY_INIT (GST_CAT_APPLE_CORE_VIDEO_MEMORY, "corevideomemory",
+        0, "Apple Core Video Memory");
+
+    _apple_core_video_allocator =
+        g_object_new (GST_TYPE_APPLE_CORE_VIDEO_ALLOCATOR, NULL);
+
+    gst_allocator_register (GST_APPLE_CORE_VIDEO_ALLOCATOR_NAME,
+        gst_object_ref (_apple_core_video_allocator));
+    g_once_init_leave (&_init, 1);
+  }
+}
+
+/**
+ * gst_is_apple_core_video_memory:
+ * @mem: #GstMemory
+ *
+ * Checks whether @mem is backed by a CVPixelBuffer.
+ * This has limited use since #GstAppleCoreVideoMemory is transparently
+ * mapped into CPU memory on request.
+ *
+ * Returns: %TRUE when @mem is backed by a CVPixelBuffer
+ */
+gboolean
+gst_is_apple_core_video_memory (GstMemory * mem)
+{
+  g_return_val_if_fail (mem != NULL, FALSE);
+
+  return GST_IS_APPLE_CORE_VIDEO_ALLOCATOR (mem->allocator);
+}
+
+/**
+ * gst_apple_core_video_memory_new:
+ *
+ * Helper function for gst_apple_core_video_mem_share().
+ * Users should call gst_apple_core_video_memory_new_wrapped() instead.
+ */
+static GstMemory *
+gst_apple_core_video_memory_new (GstMemoryFlags flags, GstMemory * parent,
+    GstAppleCoreVideoPixelBuffer * gpixbuf, gsize plane, gsize maxsize,
+    gsize align, gsize offset, gsize size)
+{
+  GstAppleCoreVideoMemory *mem;
+
+  g_return_val_if_fail (gpixbuf != NULL, NULL);
+
+  mem = g_slice_new0 (GstAppleCoreVideoMemory);
+  gst_memory_init (GST_MEMORY_CAST (mem), flags,
+      GST_ALLOCATOR_CAST (_apple_core_video_allocator), parent, maxsize, align,
+      offset, size);
+
+  mem->gpixbuf = gst_apple_core_video_pixel_buffer_ref (gpixbuf);
+  mem->plane = plane;
+
+  GST_DEBUG ("%p: gpixbuf %p, plane: %" G_GSSIZE_FORMAT ", size %"
+      G_GSIZE_FORMAT, mem, mem->gpixbuf, mem->plane, mem->mem.size);
+
+  return (GstMemory *) mem;
+}
+
+/**
+ * gst_apple_core_video_memory_new_wrapped:
+ * @gpixbuf: the backing #GstAppleCoreVideoPixelBuffer
+ * @plane: the plane this memory will represent, or #GST_APPLE_CORE_VIDEO_NO_PLANE for non-planar buffer
+ * @size: the size of the buffer or specific plane
+ *
+ * Returns: a newly allocated #GstAppleCoreVideoMemory
+ */
+GstMemory *
+gst_apple_core_video_memory_new_wrapped (GstAppleCoreVideoPixelBuffer * gpixbuf,
+    gsize plane, gsize size)
+{
+  return gst_apple_core_video_memory_new (0, NULL, gpixbuf, plane, size, 0, 0,
+      size);
+}
+
+static gpointer
+gst_apple_core_video_mem_map (GstMemory * gmem, gsize maxsize,
+    GstMapFlags flags)
+{
+  GstAppleCoreVideoMemory *mem = (GstAppleCoreVideoMemory *) gmem;
+  gpointer ret;
+
+  if (!gst_apple_core_video_pixel_buffer_lock (mem->gpixbuf, flags))
+    return NULL;
+
+  if (mem->plane != GST_APPLE_CORE_VIDEO_NO_PLANE) {
+    ret = CVPixelBufferGetBaseAddressOfPlane (mem->gpixbuf->buf, mem->plane);
+
+    if (ret != NULL)
+      GST_DEBUG ("%p: pixbuf %p plane %" G_GSIZE_FORMAT
+          " flags %08x: mapped %p", mem, mem->gpixbuf->buf, mem->plane, flags,
+          ret);
+    else
+      GST_ERROR ("%p: invalid plane base address (NULL) for pixbuf %p plane %"
+          G_GSIZE_FORMAT, mem, mem->gpixbuf->buf, mem->plane);
+  } else {
+    ret = CVPixelBufferGetBaseAddress (mem->gpixbuf->buf);
+
+    if (ret != NULL)
+      GST_DEBUG ("%p: pixbuf %p flags %08x: mapped %p", mem, mem->gpixbuf->buf,
+          flags, ret);
+    else
+      GST_ERROR ("%p: invalid base address (NULL) for pixbuf %p"
+          G_GSIZE_FORMAT, mem, mem->gpixbuf->buf);
+  }
+
+  return ret;
+}
+
+static void
+gst_apple_core_video_mem_unmap (GstMemory * gmem)
+{
+  GstAppleCoreVideoMemory *mem = (GstAppleCoreVideoMemory *) gmem;
+  (void) gst_apple_core_video_pixel_buffer_unlock (mem->gpixbuf);
+  if (mem->plane != GST_APPLE_CORE_VIDEO_NO_PLANE)
+    GST_DEBUG ("%p: pixbuf %p plane %" G_GSIZE_FORMAT, mem,
+        mem->gpixbuf->buf, mem->plane);
+  else
+    GST_DEBUG ("%p: pixbuf %p", mem, mem->gpixbuf->buf);
+}
+
+static GstMemory *
+gst_apple_core_video_mem_share (GstMemory * gmem, gssize offset, gssize size)
+{
+  GstAppleCoreVideoMemory *mem;
+  GstMemory *parent, *sub;
+
+  mem = (GstAppleCoreVideoMemory *) gmem;
+
+  /* find the real parent */
+  parent = gmem->parent;
+  if (parent == NULL)
+    parent = gmem;
+
+  if (size == -1)
+    size = gmem->size - offset;
+
+  /* the shared memory is always readonly */
+  sub =
+      gst_apple_core_video_memory_new (GST_MINI_OBJECT_FLAGS (parent) |
+      GST_MINI_OBJECT_FLAG_LOCK_READONLY, parent, mem->gpixbuf, mem->plane,
+      gmem->maxsize, gmem->align, gmem->offset + offset, size);
+
+  return sub;
+}
+
+static gboolean
+gst_apple_core_video_mem_is_span (GstMemory * mem1, GstMemory * mem2,
+    gsize * offset)
+{
+  /* We may only return FALSE since:
+   * 1) Core Video gives no guarantees about planes being consecutive.
+   *    We may only know this after mapping.
+   * 2) GstAppleCoreVideoMemory instances for planes do not share a common
+   *    parent -- i.e. they're not offsets into the same parent
+   *    memory instance.
+   *
+   * It's not unlikely that planes will be stored in consecutive memory
+   * but it should be checked by the user after mapping.
+   */
+  return FALSE;
+}
+
+static void
+gst_apple_core_video_mem_free (GstAllocator * allocator, GstMemory * gmem)
+{
+  GstAppleCoreVideoMemory *mem = (GstAppleCoreVideoMemory *) gmem;
+
+  gst_apple_core_video_pixel_buffer_unref (mem->gpixbuf);
+
+  g_slice_free (GstAppleCoreVideoMemory, mem);
+}
+
+static void
+gst_apple_core_video_allocator_class_init (GstAppleCoreVideoAllocatorClass *
+    klass)
+{
+  GstAllocatorClass *allocator_class;
+
+  allocator_class = (GstAllocatorClass *) klass;
+
+  /* we don't do allocations, only wrap existing pixel buffers */
+  allocator_class->alloc = NULL;
+  allocator_class->free = gst_apple_core_video_mem_free;
+}
+
+static void
+gst_apple_core_video_allocator_init (GstAppleCoreVideoAllocator * allocator)
+{
+  GstAllocator *alloc = GST_ALLOCATOR_CAST (allocator);
+
+  alloc->mem_type = GST_APPLE_CORE_VIDEO_ALLOCATOR_NAME;
+  alloc->mem_map = gst_apple_core_video_mem_map;
+  alloc->mem_unmap = gst_apple_core_video_mem_unmap;
+  alloc->mem_share = gst_apple_core_video_mem_share;
+  alloc->mem_is_span = gst_apple_core_video_mem_is_span;
+
+  GST_OBJECT_FLAG_SET (allocator, GST_ALLOCATOR_FLAG_CUSTOM_ALLOC);
+}
diff --git a/sys/applemedia/corevideotexturecache.m b/sys/applemedia/corevideotexturecache.m
deleted file mode 100644
index d5b9aeb..0000000
--- a/sys/applemedia/corevideotexturecache.m
+++ /dev/null
@@ -1,257 +0,0 @@
-/*
- * Copyright (C) 2010 Ole André Vadla Ravnås <oleavr@soundrop.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-#ifdef HAVE_CONFIG_H
-#  include "config.h"
-#endif
-
-#if !HAVE_IOS
-#import <AppKit/AppKit.h>
-#include <gst/gl/cocoa/gstglcontext_cocoa.h>
-#endif
-#include "corevideotexturecache.h"
-#include "coremediabuffer.h"
-#include "corevideobuffer.h"
-#include "vtutil.h"
-
-typedef struct _ContextThreadData
-{
-  GstCoreVideoTextureCache *cache;
-  GstBuffer *input_buffer;
-  GstBuffer *output_buffer;
-} ContextThreadData;
-
-GstCoreVideoTextureCache *
-gst_core_video_texture_cache_new (GstGLContext * ctx)
-{
-  g_return_val_if_fail (ctx != NULL, NULL);
-
-  GstCoreVideoTextureCache *cache = g_new0 (GstCoreVideoTextureCache, 1);
-  cache->ctx = gst_object_ref (ctx);
-  gst_video_info_init (&cache->input_info);
-  cache->convert = gst_gl_color_convert_new (cache->ctx);
-
-#if !HAVE_IOS
-  CGLPixelFormatObj pixelFormat =
-      gst_gl_context_cocoa_get_pixel_format (GST_GL_CONTEXT_COCOA (ctx));
-  CGLContextObj platform_ctx =
-      (CGLContextObj) gst_gl_context_get_gl_context (ctx);
-  CVOpenGLTextureCacheCreate (kCFAllocatorDefault, NULL, platform_ctx,
-      pixelFormat, NULL, &cache->cache);
-#else
-  CFMutableDictionaryRef cache_attrs =
-      CFDictionaryCreateMutable (NULL, 0, &kCFTypeDictionaryKeyCallBacks,
-      &kCFTypeDictionaryValueCallBacks);
-  gst_vtutil_dict_set_i32 (cache_attrs,
-      kCVOpenGLESTextureCacheMaximumTextureAgeKey, 0);
-  CVOpenGLESTextureCacheCreate (kCFAllocatorDefault, (CFDictionaryRef) cache_attrs,
-      (CVEAGLContext) gst_gl_context_get_gl_context (ctx), NULL, &cache->cache);
-#endif
-
-  return cache;
-}
-
-void
-gst_core_video_texture_cache_free (GstCoreVideoTextureCache * cache)
-{
-  g_return_if_fail (cache != NULL);
-
-#if !HAVE_IOS
-  CVOpenGLTextureCacheRelease (cache->cache);
-#else
-  CFRelease (cache->cache); /* iOS has no "CVOpenGLESTextureCacheRelease" */
-#endif
-  gst_object_unref (cache->convert);
-  gst_object_unref (cache->ctx);
-  g_free (cache);
-}
-
-void
-gst_core_video_texture_cache_set_format (GstCoreVideoTextureCache * cache,
-    GstVideoFormat in_format, GstCaps * out_caps)
-{
-  GstCaps *in_caps;
-  GstCapsFeatures *features;
-
-  g_return_if_fail (gst_caps_is_fixed (out_caps));
-
-  out_caps = gst_caps_copy (out_caps);
-  features = gst_caps_get_features (out_caps, 0);
-  gst_caps_features_add (features, GST_CAPS_FEATURE_MEMORY_GL_MEMORY);
-  gst_video_info_from_caps (&cache->output_info, out_caps); 
-  
-  in_caps = gst_caps_copy (out_caps);
-  gst_caps_set_simple (in_caps, "format",
-          G_TYPE_STRING, gst_video_format_to_string (in_format), NULL);
-  features = gst_caps_get_features (in_caps, 0);
-  gst_caps_features_add (features, GST_CAPS_FEATURE_MEMORY_GL_MEMORY);
-  gst_video_info_from_caps (&cache->input_info, in_caps);
-
-  gst_gl_color_convert_set_caps (cache->convert, in_caps, out_caps);
-
-  gst_caps_unref (out_caps);
-  gst_caps_unref (in_caps);
-}
-
-static CVPixelBufferRef
-cv_pixel_buffer_from_gst_buffer (GstBuffer * buffer)
-{
-  GstCoreMediaMeta *cm_meta =
-      (GstCoreMediaMeta *) gst_buffer_get_meta (buffer,
-      gst_core_media_meta_api_get_type ());
-  GstCoreVideoMeta *cv_meta =
-      (GstCoreVideoMeta *) gst_buffer_get_meta (buffer,
-      gst_core_video_meta_api_get_type ());
-
-  g_return_val_if_fail (cm_meta || cv_meta, NULL);
-
-  return cm_meta ? cm_meta->pixel_buf : cv_meta->pixbuf;
-}
-
-static gboolean
-gl_mem_from_buffer (GstCoreVideoTextureCache * cache,
-        GstBuffer * buffer, GstMemory **mem1, GstMemory **mem2)
-{
-  gboolean ret = TRUE;
-#if !HAVE_IOS
-  CVOpenGLTextureRef texture = NULL;
-#else
-  CVOpenGLESTextureRef texture = NULL;
-#endif
-  CVPixelBufferRef pixel_buf = cv_pixel_buffer_from_gst_buffer (buffer);
-
-  *mem1 = NULL;
-  *mem2 = NULL;
-
-#if !HAVE_IOS
-  CVOpenGLTextureCacheFlush (cache->cache, 0);
-#else
-  CVOpenGLESTextureCacheFlush (cache->cache, 0);
-#endif
-
-  switch (GST_VIDEO_INFO_FORMAT (&cache->input_info)) {
-#if !HAVE_IOS
-      case GST_VIDEO_FORMAT_UYVY:
-        /* both avfvideosrc and vtdec on OSX when doing GLMemory negotiate UYVY
-         * under the hood, which means a single output texture. */
-        if (CVOpenGLTextureCacheCreateTextureFromImage (kCFAllocatorDefault,
-              cache->cache, pixel_buf, NULL, &texture) != kCVReturnSuccess)
-          goto error;
-
-        *mem1 = (GstMemory *) gst_gl_memory_wrapped_texture (cache->ctx,
-            CVOpenGLTextureGetName (texture), CVOpenGLTextureGetTarget (texture),
-            &cache->input_info, 0, NULL, texture, (GDestroyNotify) CFRelease);
-        break;
-#else
-      case GST_VIDEO_FORMAT_BGRA:
-        /* avfvideosrc does BGRA on iOS when doing GLMemory */
-        if (CVOpenGLESTextureCacheCreateTextureFromImage (kCFAllocatorDefault,
-              cache->cache, pixel_buf, NULL, GL_TEXTURE_2D, GL_RGBA,
-              GST_VIDEO_INFO_WIDTH (&cache->input_info),
-              GST_VIDEO_INFO_HEIGHT (&cache->input_info),
-              GL_RGBA, GL_UNSIGNED_BYTE, 0, &texture) != kCVReturnSuccess)
-          goto error;
-
-        *mem1 = (GstMemory *) gst_gl_memory_wrapped_texture (cache->ctx,
-            CVOpenGLESTextureGetName (texture), CVOpenGLESTextureGetTarget (texture),
-            &cache->input_info, 0, NULL, texture, (GDestroyNotify) CFRelease);
-        break;
-      case GST_VIDEO_FORMAT_NV12: {
-        GstVideoGLTextureType textype;
-        GLenum texfmt;
-
-        textype = gst_gl_texture_type_from_format (cache->ctx, GST_VIDEO_FORMAT_NV12, 0);
-        texfmt = gst_gl_format_from_gl_texture_type (textype);
-
-        /* vtdec does NV12 on iOS when doing GLMemory */
-        if (CVOpenGLESTextureCacheCreateTextureFromImage (kCFAllocatorDefault,
-              cache->cache, pixel_buf, NULL, GL_TEXTURE_2D, texfmt,
-              GST_VIDEO_INFO_WIDTH (&cache->input_info),
-              GST_VIDEO_INFO_HEIGHT (&cache->input_info),
-              texfmt, GL_UNSIGNED_BYTE, 0, &texture) != kCVReturnSuccess)
-          goto error;
-
-        *mem1 = (GstMemory *) gst_gl_memory_wrapped_texture (cache->ctx,
-            CVOpenGLESTextureGetName (texture), CVOpenGLESTextureGetTarget (texture),
-            &cache->input_info, 0, NULL, texture, (GDestroyNotify) CFRelease);
-
-        textype = gst_gl_texture_type_from_format (cache->ctx, GST_VIDEO_FORMAT_NV12, 1);
-        texfmt = gst_gl_format_from_gl_texture_type (textype);
-
-        if (CVOpenGLESTextureCacheCreateTextureFromImage (kCFAllocatorDefault,
-              cache->cache, pixel_buf, NULL, GL_TEXTURE_2D, texfmt,
-              GST_VIDEO_INFO_WIDTH (&cache->input_info) / 2,
-              GST_VIDEO_INFO_HEIGHT (&cache->input_info) / 2,
-              texfmt, GL_UNSIGNED_BYTE, 1, &texture) != kCVReturnSuccess)
-          goto error;
-
-        *mem2 = (GstMemory *) gst_gl_memory_wrapped_texture (cache->ctx,
-            CVOpenGLESTextureGetName (texture), CVOpenGLESTextureGetTarget (texture),
-            &cache->input_info, 0, NULL, texture, (GDestroyNotify) CFRelease);
-        break;
-      }
-#endif
-      default:
-        g_warn_if_reached ();
-        ret = FALSE;
-    }
-
-  return ret;
-
-error:
-  ret = FALSE;
-
-  if (*mem1)
-      gst_memory_unref (*mem1);
-  if (*mem2)
-      gst_memory_unref (*mem2);
-
-  return ret;
-}
-
-static void
-_do_get_gl_buffer (GstGLContext * context, ContextThreadData * data)
-{
-  GstMemory *mem1 = NULL, *mem2 = NULL;
-  GstCoreVideoTextureCache *cache = data->cache;
-  GstBuffer *buffer = data->input_buffer;
-
-  if (!gl_mem_from_buffer (cache, buffer, &mem1, &mem2)) {
-    gst_buffer_unref (buffer);
-    data->output_buffer = NULL;
-    return;
-  }
-
-  gst_buffer_append_memory (buffer, mem1);
-  if (mem2)
-    gst_buffer_append_memory (buffer, mem2);
-
-  data->output_buffer = gst_gl_color_convert_perform (cache->convert, buffer);
-  gst_buffer_unref (buffer);
-}
-
-GstBuffer *
-gst_core_video_texture_cache_get_gl_buffer (GstCoreVideoTextureCache * cache,
-        GstBuffer * cv_buffer)
-{
-  ContextThreadData data = {cache, cv_buffer, NULL};
-  gst_gl_context_thread_add (cache->ctx,
-      (GstGLContextThreadFunc) _do_get_gl_buffer, &data);
-  return data.output_buffer;
-}
diff --git a/sys/applemedia/glcontexthelper.c b/sys/applemedia/glcontexthelper.c
new file mode 100644
index 0000000..4e6f617
--- /dev/null
+++ b/sys/applemedia/glcontexthelper.c
@@ -0,0 +1,132 @@
+/* GStreamer
+ * Copyright (C) 2016 Alessandro Decina <alessandro.d@gmail.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#include "glcontexthelper.h"
+
+static GstGLContext *
+_find_local_gl_context (GstGLContextHelper * ctxh)
+{
+  GstQuery *query;
+  GstContext *context;
+  GstGLContext *gl_context = NULL;
+  const GstStructure *s;
+
+  g_return_val_if_fail (ctxh != NULL, FALSE);
+
+  query = gst_query_new_context ("gst.gl.local_context");
+  if (gst_gl_run_query (ctxh->element, query, GST_PAD_SRC)) {
+    gst_query_parse_context (query, &context);
+    if (context) {
+      s = gst_context_get_structure (context);
+      gst_structure_get (s, "context", GST_GL_TYPE_CONTEXT, &gl_context, NULL);
+    }
+  }
+  if (!gl_context && gst_gl_run_query (ctxh->element, query, GST_PAD_SINK)) {
+    gst_query_parse_context (query, &context);
+    if (context) {
+      s = gst_context_get_structure (context);
+      gst_structure_get (s, "context", GST_GL_TYPE_CONTEXT, &gl_context, NULL);
+    }
+  }
+
+  GST_DEBUG_OBJECT (ctxh->element, "found local context %p", gl_context);
+
+  gst_query_unref (query);
+
+  return gl_context;
+}
+
+GstGLContextHelper *
+gst_gl_context_helper_new (GstElement * element)
+{
+  GstGLContextHelper *ctxh = g_new0 (GstGLContextHelper, 1);
+  ctxh->element = gst_object_ref (element);
+
+  return ctxh;
+}
+
+void
+gst_gl_context_helper_free (GstGLContextHelper * ctxh)
+{
+  g_return_if_fail (ctxh != NULL);
+
+  gst_object_unref (ctxh->element);
+
+  if (ctxh->display)
+    gst_object_unref (ctxh->display);
+
+  if (ctxh->context)
+    gst_object_unref (ctxh->context);
+
+  if (ctxh->other_context)
+    gst_object_unref (ctxh->other_context);
+
+  g_free (ctxh);
+}
+
+void
+gst_gl_context_helper_ensure_context (GstGLContextHelper * ctxh)
+{
+  GError *error = NULL;
+  GstGLContext *context;
+
+  g_return_if_fail (ctxh != NULL);
+
+  if (!ctxh->display)
+    gst_gl_ensure_element_data (ctxh->element, &ctxh->display,
+        &ctxh->other_context);
+
+  context = _find_local_gl_context (ctxh);
+  if (context) {
+    GST_INFO_OBJECT (ctxh->element, "found local context %p, old context %p",
+        context, ctxh->context);
+    if (ctxh->context)
+      gst_object_unref (ctxh->context);
+    ctxh->context = context;
+  }
+
+  if (!ctxh->context) {
+    GST_OBJECT_LOCK (ctxh->display);
+    do {
+      if (ctxh->context)
+        gst_object_unref (ctxh->context);
+      ctxh->context =
+          gst_gl_display_get_gl_context_for_thread (ctxh->display, NULL);
+      if (!ctxh->context) {
+        if (!gst_gl_display_create_context (ctxh->display,
+                ctxh->other_context, &ctxh->context, &error)) {
+          GST_OBJECT_UNLOCK (ctxh->display);
+          goto context_error;
+        }
+      }
+    } while (!gst_gl_display_add_context (ctxh->display, ctxh->context));
+    GST_OBJECT_UNLOCK (ctxh->display);
+  }
+
+  return;
+
+context_error:
+  {
+    GST_ELEMENT_ERROR (ctxh->element, RESOURCE, NOT_FOUND, ("%s",
+            error->message), (NULL));
+    g_clear_error (&error);
+
+    return;
+  }
+}
diff --git a/sys/applemedia/glcontexthelper.h b/sys/applemedia/glcontexthelper.h
new file mode 100644
index 0000000..4e043f1
--- /dev/null
+++ b/sys/applemedia/glcontexthelper.h
@@ -0,0 +1,39 @@
+/* GStreamer
+ * Copyright (C) 2016 Alessandro Decina <alessandro.d@gmail.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifndef _GST_GL_CONTEXT_HELPER_H_
+#define _GST_GL_CONTEXT_HELPER_H_
+
+#include <gst/gst.h>
+#include <gst/gl/gl.h>
+
+typedef struct _GstGLContextHelper
+{
+  GstElement *element;
+  GstGLDisplay *display;
+  GstGLContext *context;
+  GstGLContext *other_context;
+} GstGLContextHelper;
+
+GstGLContextHelper * gst_gl_context_helper_new (GstElement *element);
+void gst_gl_context_helper_free (GstGLContextHelper *ctxh);
+void gst_gl_context_helper_ensure_context (GstGLContextHelper *ctxh);
+
+#endif
+
diff --git a/sys/applemedia/iosassetsrc.m b/sys/applemedia/iosassetsrc.m
index 9cf7498..0539340 100644
--- a/sys/applemedia/iosassetsrc.m
+++ b/sys/applemedia/iosassetsrc.m
@@ -29,7 +29,7 @@
  * <refsect2>
  * <title>Example launch line</title>
  * |[
- * gst-launch iosassetsrc uri=assets-library://asset/asset.M4V?id=11&ext=M4V ! decodebin ! autoaudiosink
+ * gst-launch-1.0 iosassetsrc uri=assets-library://asset/asset.M4V?id=11&ext=M4V ! decodebin ! autoaudiosink
  * ]| Plays asset with id a song.ogg from local dir.
  * </refsect2>
  */
diff --git a/sys/applemedia/iosurfacememory.c b/sys/applemedia/iosurfacememory.c
new file mode 100644
index 0000000..694202c
--- /dev/null
+++ b/sys/applemedia/iosurfacememory.c
@@ -0,0 +1,241 @@
+/*
+ * GStreamer
+ * Copyright (C) 2015 Alessandro Decina <twi@centricular.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include "iosurfacememory.h"
+
+GST_DEBUG_CATEGORY_STATIC (GST_CAT_IO_SURFACE_MEMORY);
+#define GST_CAT_DEFAULT GST_CAT_IO_SURFACE_MEMORY
+
+G_DEFINE_TYPE (GstIOSurfaceMemoryAllocator, gst_io_surface_memory_allocator,
+    GST_TYPE_GL_MEMORY_ALLOCATOR);
+
+static void _io_surface_memory_set_surface (GstIOSurfaceMemory * memory,
+    IOSurfaceRef surface);
+
+static GstAllocator *_io_surface_memory_allocator;
+
+static gboolean
+_io_surface_memory_create (GstGLBaseMemory * bmem, GError ** error)
+{
+  GstGLMemory *gl_mem = (GstGLMemory *) bmem;
+  GstGLContext *context = gl_mem->mem.context;
+  const GstGLFuncs *gl = context->gl_vtable;
+  GLuint target;
+
+  target = gst_gl_texture_target_to_gl (gl_mem->tex_target);
+  gl->GenTextures (1, &gl_mem->tex_id);
+  gl->BindTexture (target, gl_mem->tex_id);
+  gl->BindTexture (target, 0);
+
+  GST_LOG ("generated texture id:%d", gl_mem->tex_id);
+
+  return TRUE;
+}
+
+static void
+_io_surface_memory_destroy (GstGLBaseMemory * gl_mem)
+{
+  GST_GL_BASE_MEMORY_ALLOCATOR_CLASS
+      (gst_io_surface_memory_allocator_parent_class)->destroy (gl_mem);
+  _io_surface_memory_set_surface ((GstIOSurfaceMemory *) gl_mem, NULL);
+}
+
+static gpointer
+_io_surface_memory_allocator_map (GstGLBaseMemory * bmem,
+    GstMapInfo * info, gsize size)
+{
+  GstGLMemory *gl_mem = (GstGLMemory *) bmem;
+  GstIOSurfaceMemory *mem = (GstIOSurfaceMemory *) gl_mem;
+
+  GST_LOG ("mapping surface %p flags %d gl? %d",
+      mem->surface, info->flags, ((info->flags & GST_MAP_GL) != 0));
+
+  if (info->flags & GST_MAP_GL) {
+    return &gl_mem->tex_id;
+  } else if (!(info->flags & GST_MAP_WRITE)) {
+    IOSurfaceLock (mem->surface, kIOSurfaceLockReadOnly, NULL);
+    return IOSurfaceGetBaseAddressOfPlane (mem->surface, gl_mem->plane);
+  } else {
+    GST_ERROR ("couldn't map IOSurface %p flags %d", mem->surface, info->flags);
+    return NULL;
+  }
+}
+
+static void
+_io_surface_memory_allocator_unmap (GstGLBaseMemory * bmem, GstMapInfo * info)
+{
+  GstGLMemory *gl_mem = (GstGLMemory *) bmem;
+  GstIOSurfaceMemory *mem = (GstIOSurfaceMemory *) gl_mem;
+
+  GST_LOG ("unmapping surface %p flags %d gl? %d",
+      mem->surface, info->flags, ((info->flags & GST_MAP_GL) != 0));
+
+  if (!(info->flags & GST_MAP_GL)) {
+    IOSurfaceUnlock (mem->surface, kIOSurfaceLockReadOnly, NULL);
+  }
+}
+
+static GstMemory *
+_mem_alloc (GstAllocator * allocator, gsize size, GstAllocationParams * params)
+{
+  g_warning ("use gst_io_surface_memory_wrapped () to allocate from this "
+      "IOSurface allocator");
+
+  return NULL;
+}
+
+static void
+gst_io_surface_memory_allocator_class_init (GstIOSurfaceMemoryAllocatorClass *
+    klass)
+{
+  GstAllocatorClass *allocator_class = (GstAllocatorClass *) klass;
+  GstGLBaseMemoryAllocatorClass *gl_base_allocator_class =
+      (GstGLBaseMemoryAllocatorClass *) klass;
+
+  allocator_class->alloc = _mem_alloc;
+
+  gl_base_allocator_class->create = _io_surface_memory_create;
+  gl_base_allocator_class->destroy = _io_surface_memory_destroy;
+  gl_base_allocator_class->map = _io_surface_memory_allocator_map;
+  gl_base_allocator_class->unmap = _io_surface_memory_allocator_unmap;
+}
+
+static void
+gst_io_surface_memory_allocator_init (GstIOSurfaceMemoryAllocator * allocator)
+{
+  GstAllocator *alloc = GST_ALLOCATOR_CAST (allocator);
+
+  alloc->mem_type = GST_IO_SURFACE_MEMORY_ALLOCATOR_NAME;
+  GST_OBJECT_FLAG_SET (allocator, GST_ALLOCATOR_FLAG_CUSTOM_ALLOC);
+}
+
+void
+gst_ios_surface_memory_init (void)
+{
+  static volatile gsize _init = 0;
+
+  if (g_once_init_enter (&_init)) {
+    GST_DEBUG_CATEGORY_INIT (GST_CAT_IO_SURFACE_MEMORY, "iosurface", 0,
+        "IOSurface Buffer");
+
+    _io_surface_memory_allocator =
+        g_object_new (GST_TYPE_IO_SURFACE_MEMORY_ALLOCATOR, NULL);
+
+    gst_allocator_register (GST_IO_SURFACE_MEMORY_ALLOCATOR_NAME,
+        gst_object_ref (_io_surface_memory_allocator));
+    g_once_init_leave (&_init, 1);
+  }
+}
+
+gboolean
+gst_is_io_surface_memory (GstMemory * mem)
+{
+  return mem != NULL && mem->allocator != NULL &&
+      g_type_is_a (G_OBJECT_TYPE (mem->allocator),
+      GST_TYPE_IO_SURFACE_MEMORY_ALLOCATOR);
+}
+
+static GstIOSurfaceMemory *
+_io_surface_memory_new (GstGLContext * context,
+    IOSurfaceRef surface,
+    GstGLTextureTarget target,
+    GstVideoInfo * info,
+    guint plane,
+    GstVideoAlignment * valign, gpointer user_data, GDestroyNotify notify)
+{
+  GstIOSurfaceMemory *mem;
+
+  g_return_val_if_fail (target == GST_GL_TEXTURE_TARGET_RECTANGLE, NULL);
+
+  mem = g_new0 (GstIOSurfaceMemory, 1);
+  gst_gl_memory_init (&mem->gl_mem, _io_surface_memory_allocator, NULL, context,
+      target, NULL, info, plane, valign, user_data, notify);
+
+  GST_MINI_OBJECT_FLAG_SET (mem, GST_MEMORY_FLAG_READONLY);
+
+  mem->surface = NULL;
+  _io_surface_memory_set_surface (mem, surface);
+
+  return mem;
+}
+
+GstIOSurfaceMemory *
+gst_io_surface_memory_wrapped (GstGLContext * context,
+    IOSurfaceRef surface,
+    GstGLTextureTarget target,
+    GstVideoInfo * info,
+    guint plane,
+    GstVideoAlignment * valign, gpointer user_data, GDestroyNotify notify)
+{
+  return _io_surface_memory_new (context, surface, target, info,
+      plane, valign, user_data, notify);
+}
+
+static void
+_io_surface_memory_set_surface (GstIOSurfaceMemory * memory,
+    IOSurfaceRef surface)
+{
+  GstGLMemory *gl_mem = (GstGLMemory *) memory;
+  GstGLContext *context = ((GstGLBaseMemory *) gl_mem)->context;
+  GstGLFuncs *gl = context->gl_vtable;
+
+  if (memory->surface)
+    IOSurfaceDecrementUseCount (memory->surface);
+  memory->surface = surface;
+  if (surface) {
+    GLuint tex_id, tex_target, texifmt, texfmt;
+    guint plane;
+    GstVideoGLTextureType textype;
+    CGLError cglError;
+
+    plane = gl_mem->plane;
+    tex_id = gl_mem->tex_id;
+    tex_target = gst_gl_texture_target_to_gl (gl_mem->tex_target);
+    textype = gst_gl_texture_type_from_format (context,
+        GST_VIDEO_INFO_FORMAT (&gl_mem->info), plane);
+    texifmt = gst_gl_format_from_gl_texture_type (textype);
+    texfmt =
+        gst_gl_sized_gl_format_from_gl_format_type (context, texifmt,
+        GL_UNSIGNED_BYTE);
+    gl->BindTexture (tex_target, tex_id);
+    cglError = CGLTexImageIOSurface2D ((CGLContextObj)
+        gst_gl_context_get_gl_context (context), tex_target, texifmt,
+        IOSurfaceGetWidthOfPlane (surface, plane),
+        IOSurfaceGetHeightOfPlane (surface, plane), texifmt, GL_UNSIGNED_BYTE,
+        surface, plane);
+    gl->BindTexture (tex_target, 0);
+    IOSurfaceIncrementUseCount (surface);
+    GST_DEBUG ("bound surface %p to texture %u: %d", surface, tex_id, cglError);
+  }
+}
+
+void
+gst_io_surface_memory_set_surface (GstIOSurfaceMemory * memory,
+    IOSurfaceRef surface)
+{
+  g_return_if_fail (gst_is_io_surface_memory ((GstMemory *) memory));
+  g_return_if_fail (memory->surface == NULL);
+
+  _io_surface_memory_set_surface (memory, surface);
+}
diff --git a/sys/applemedia/plugin.m b/sys/applemedia/plugin.m
index c17c38b..0ff4ec1 100644
--- a/sys/applemedia/plugin.m
+++ b/sys/applemedia/plugin.m
@@ -22,6 +22,7 @@
 #endif
 
 #include <Foundation/Foundation.h>
+#include "corevideomemory.h"
 #ifdef HAVE_IOS
 #include "iosassetsrc.h"
 #else
@@ -63,6 +64,8 @@
 {
   gboolean res = TRUE;
 
+  gst_apple_core_video_memory_init ();
+
 #ifdef HAVE_IOS
   res &= gst_element_register (plugin, "iosassetsrc", GST_RANK_SECONDARY,
       GST_TYPE_IOS_ASSET_SRC);
diff --git a/sys/applemedia/qtkitvideosrc.m b/sys/applemedia/qtkitvideosrc.m
index 2c15bb5..e6b427f 100644
--- a/sys/applemedia/qtkitvideosrc.m
+++ b/sys/applemedia/qtkitvideosrc.m
@@ -434,7 +434,7 @@
   [queueLock unlockWithCondition:
       ([queue count] == 0) ? NO_FRAMES : HAS_FRAME_OR_STOP_REQUEST];
 
-  *buf = gst_core_video_buffer_new ((CVBufferRef)frame, NULL, TRUE);
+  *buf = gst_core_video_buffer_new ((CVBufferRef)frame, NULL);
   CVBufferRelease (frame);
 
   [self timestampBuffer:*buf];
diff --git a/sys/applemedia/corevideotexturecache.h b/sys/applemedia/videotexturecache.h
similarity index 67%
rename from sys/applemedia/corevideotexturecache.h
rename to sys/applemedia/videotexturecache.h
index d53ec41..0b43566 100644
--- a/sys/applemedia/corevideotexturecache.h
+++ b/sys/applemedia/videotexturecache.h
@@ -22,29 +22,32 @@
 
 #include <gst/video/gstvideometa.h>
 #include <gst/gl/gstglcontext.h>
-#include "CoreVideo/CoreVideo.h"
+#include <CoreVideo/CoreVideo.h>
 
 G_BEGIN_DECLS
 
-typedef struct _GstCoreVideoTextureCache
+typedef struct _GstVideoTextureCache
 {
   GstGLContext *ctx;
-#if !HAVE_IOS
-  CVOpenGLTextureCacheRef cache;
-#else
+#if HAVE_IOS
   CVOpenGLESTextureCacheRef cache;
+#else
+  GstBufferPool *pool;
 #endif
   GstVideoInfo input_info;
   GstVideoInfo output_info;
-  GstGLColorConvert *convert;
-} GstCoreVideoTextureCache;
 
-GstCoreVideoTextureCache *gst_core_video_texture_cache_new (GstGLContext * ctx);
-void gst_core_video_texture_cache_free (GstCoreVideoTextureCache * cache);
-void gst_core_video_texture_cache_set_format (GstCoreVideoTextureCache * cache,
+  gboolean configured;
+  GstCaps *in_caps;
+  GstCaps *out_caps;
+} GstVideoTextureCache;
+
+GstVideoTextureCache *gst_video_texture_cache_new (GstGLContext * ctx);
+void gst_video_texture_cache_free (GstVideoTextureCache * cache);
+void gst_video_texture_cache_set_format (GstVideoTextureCache * cache,
     GstVideoFormat in_format, GstCaps * out_caps);
-gboolean gst_core_video_texture_cache_upload (GstVideoGLTextureUploadMeta * meta, guint texture_id[4]);
-GstBuffer * gst_core_video_texture_cache_get_gl_buffer (GstCoreVideoTextureCache * cache,
+gboolean gst_video_texture_cache_upload (GstVideoGLTextureUploadMeta * meta, guint texture_id[4]);
+GstBuffer * gst_video_texture_cache_get_gl_buffer (GstVideoTextureCache * cache,
         GstBuffer * cv_buffer);
 
 G_END_DECLS
diff --git a/sys/applemedia/videotexturecache.m b/sys/applemedia/videotexturecache.m
new file mode 100644
index 0000000..e1bdb64
--- /dev/null
+++ b/sys/applemedia/videotexturecache.m
@@ -0,0 +1,281 @@
+/*
+ * Copyright (C) 2010 Ole André Vadla Ravnås <oleavr@soundrop.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+#  include "config.h"
+#endif
+
+#if !HAVE_IOS
+#import <AppKit/AppKit.h>
+#include <gst/gl/cocoa/gstglcontext_cocoa.h>
+#include <gst/gl/gstglbufferpool.h>
+#include "iosurfacememory.h"
+#endif
+#include "videotexturecache.h"
+#include "coremediabuffer.h"
+#include "corevideobuffer.h"
+#include "vtutil.h"
+
+typedef struct _ContextThreadData
+{
+  GstVideoTextureCache *cache;
+  GstBuffer *input_buffer;
+  GstBuffer *output_buffer;
+} ContextThreadData;
+
+GstVideoTextureCache *
+gst_video_texture_cache_new (GstGLContext * ctx)
+{
+  g_return_val_if_fail (ctx != NULL, NULL);
+
+  GstVideoTextureCache *cache = g_new0 (GstVideoTextureCache, 1);
+
+  cache->ctx = gst_object_ref (ctx);
+  gst_video_info_init (&cache->input_info);
+
+#if HAVE_IOS
+  CFMutableDictionaryRef cache_attrs =
+      CFDictionaryCreateMutable (NULL, 0, &kCFTypeDictionaryKeyCallBacks,
+      &kCFTypeDictionaryValueCallBacks);
+  CVOpenGLESTextureCacheCreate (kCFAllocatorDefault, (CFDictionaryRef) cache_attrs,
+      (CVEAGLContext) gst_gl_context_get_gl_context (ctx), NULL, &cache->cache);
+#else
+  gst_ios_surface_memory_init ();
+#if 0
+  cache->pool = GST_BUFFER_POOL (gst_gl_buffer_pool_new (ctx));
+#endif
+#endif
+
+  return cache;
+}
+
+void
+gst_video_texture_cache_free (GstVideoTextureCache * cache)
+{
+  g_return_if_fail (cache != NULL);
+
+#if HAVE_IOS
+  CFRelease (cache->cache); /* iOS has no "CVOpenGLESTextureCacheRelease" */
+#else
+#if 0
+  gst_buffer_pool_set_active (cache->pool, FALSE);
+  gst_object_unref (cache->pool);
+#endif
+#endif
+  gst_object_unref (cache->ctx);
+  if (cache->in_caps)
+    gst_caps_unref (cache->in_caps);
+  if (cache->out_caps)
+    gst_caps_unref (cache->out_caps);
+  g_free (cache);
+}
+
+void
+gst_video_texture_cache_set_format (GstVideoTextureCache * cache,
+    GstVideoFormat in_format, GstCaps * out_caps)
+{
+  GstCaps *in_caps;
+  GstCapsFeatures *features;
+
+  g_return_if_fail (gst_caps_is_fixed (out_caps));
+
+  out_caps = gst_caps_copy (out_caps);
+  features = gst_caps_get_features (out_caps, 0);
+  gst_caps_features_add (features, GST_CAPS_FEATURE_MEMORY_GL_MEMORY);
+  gst_video_info_from_caps (&cache->output_info, out_caps);
+
+  in_caps = gst_caps_copy (out_caps);
+  gst_caps_set_simple (in_caps, "format",
+          G_TYPE_STRING, gst_video_format_to_string (in_format), NULL);
+  features = gst_caps_get_features (in_caps, 0);
+  gst_caps_features_add (features, GST_CAPS_FEATURE_MEMORY_GL_MEMORY);
+  gst_video_info_from_caps (&cache->input_info, in_caps);
+
+  if (cache->in_caps)
+    gst_caps_unref (cache->in_caps);
+  if (cache->out_caps)
+    gst_caps_unref (cache->out_caps);
+  cache->in_caps = in_caps;
+  cache->out_caps = out_caps;
+
+#if 0
+  GstStructure *config = gst_buffer_pool_get_config (cache->pool);
+  gst_buffer_pool_config_set_params (config, cache->in_caps,
+          GST_VIDEO_INFO_SIZE (&cache->input_info), 0, 0);
+  gst_buffer_pool_config_set_allocator (config,
+          gst_allocator_find (GST_IO_SURFACE_MEMORY_ALLOCATOR_NAME), NULL);
+  gst_buffer_pool_config_add_option (config,
+          GST_BUFFER_POOL_OPTION_GL_TEXTURE_TARGET_RECTANGLE);
+  gst_buffer_pool_set_config (cache->pool, config);
+  gst_buffer_pool_set_active (cache->pool, TRUE);
+#endif
+}
+
+static CVPixelBufferRef
+cv_pixel_buffer_from_gst_buffer (GstBuffer * buffer)
+{
+  GstCoreMediaMeta *cm_meta =
+      (GstCoreMediaMeta *) gst_buffer_get_meta (buffer,
+      gst_core_media_meta_api_get_type ());
+  GstCoreVideoMeta *cv_meta =
+      (GstCoreVideoMeta *) gst_buffer_get_meta (buffer,
+      gst_core_video_meta_api_get_type ());
+
+  g_return_val_if_fail (cm_meta || cv_meta, NULL);
+
+  return cm_meta ? cm_meta->pixel_buf : cv_meta->pixbuf;
+}
+
+#if HAVE_IOS
+static void
+_do_get_gl_buffer (GstGLContext * context, ContextThreadData * data)
+{
+  CVOpenGLESTextureRef texture = NULL;
+  GstVideoTextureCache *cache = data->cache;
+  CVPixelBufferRef pixel_buf = cv_pixel_buffer_from_gst_buffer (data->input_buffer);
+  GstGLTextureTarget gl_target;
+  GstGLBaseMemoryAllocator *base_mem_alloc;
+  GstGLVideoAllocationParams *params;
+  GstBuffer *output_buffer;
+
+  base_mem_alloc = GST_GL_BASE_MEMORY_ALLOCATOR (gst_gl_memory_allocator_get_default (cache->ctx));
+  output_buffer = gst_buffer_new ();
+  gst_buffer_copy_into (output_buffer, data->input_buffer, GST_BUFFER_COPY_ALL, 0, -1);
+
+  switch (GST_VIDEO_INFO_FORMAT (&cache->input_info)) {
+      case GST_VIDEO_FORMAT_BGRA:
+        /* avfvideosrc does BGRA on iOS when doing GLMemory */
+        if (CVOpenGLESTextureCacheCreateTextureFromImage (kCFAllocatorDefault,
+              cache->cache, pixel_buf, NULL, GL_TEXTURE_2D, GL_RGBA,
+              GST_VIDEO_INFO_WIDTH (&cache->input_info),
+              GST_VIDEO_INFO_HEIGHT (&cache->input_info),
+              GL_RGBA, GL_UNSIGNED_BYTE, 0, &texture) != kCVReturnSuccess)
+          goto error;
+
+        gl_target = gst_gl_texture_target_from_gl (CVOpenGLESTextureGetTarget (texture));
+        params = gst_gl_video_allocation_params_new_wrapped_texture (cache->ctx,
+            NULL, &cache->input_info, 0, NULL, gl_target,
+            CVOpenGLESTextureGetName (texture), texture,
+            (GDestroyNotify) CFRelease);
+
+        gst_buffer_replace_memory (output_buffer, 0,
+                (GstMemory *) gst_gl_base_memory_alloc (base_mem_alloc,
+                    (GstGLAllocationParams *) params));
+        gst_gl_allocation_params_free ((GstGLAllocationParams *) params);
+        break;
+      case GST_VIDEO_FORMAT_NV12: {
+        GstVideoGLTextureType textype;
+        GLenum texifmt, texfmt;
+
+        textype = gst_gl_texture_type_from_format (cache->ctx, GST_VIDEO_FORMAT_NV12, 0);
+        texifmt = gst_gl_format_from_gl_texture_type (textype);
+        texfmt = gst_gl_sized_gl_format_from_gl_format_type (cache->ctx, texifmt, GL_UNSIGNED_BYTE);
+
+        /* vtdec does NV12 on iOS when doing GLMemory */
+        if (CVOpenGLESTextureCacheCreateTextureFromImage (kCFAllocatorDefault,
+              cache->cache, pixel_buf, NULL, GL_TEXTURE_2D, texifmt,
+              GST_VIDEO_INFO_WIDTH (&cache->input_info),
+              GST_VIDEO_INFO_HEIGHT (&cache->input_info),
+              texfmt, GL_UNSIGNED_BYTE, 0, &texture) != kCVReturnSuccess)
+          goto error;
+
+        gl_target = gst_gl_texture_target_from_gl (CVOpenGLESTextureGetTarget (texture));
+        params = gst_gl_video_allocation_params_new_wrapped_texture (cache->ctx,
+            NULL, &cache->input_info, 0, NULL, gl_target,
+            CVOpenGLESTextureGetName (texture), texture,
+            (GDestroyNotify) CFRelease);
+
+        gst_buffer_replace_memory (output_buffer, 0,
+                (GstMemory *) gst_gl_base_memory_alloc (base_mem_alloc,
+                    (GstGLAllocationParams *) params));
+        gst_gl_allocation_params_free ((GstGLAllocationParams *) params);
+
+        textype = gst_gl_texture_type_from_format (cache->ctx, GST_VIDEO_FORMAT_NV12, 1);
+        texifmt = gst_gl_format_from_gl_texture_type (textype);
+        texfmt = gst_gl_sized_gl_format_from_gl_format_type (cache->ctx, texifmt, GL_UNSIGNED_BYTE);
+
+        if (CVOpenGLESTextureCacheCreateTextureFromImage (kCFAllocatorDefault,
+              cache->cache, pixel_buf, NULL, GL_TEXTURE_2D, texifmt,
+              GST_VIDEO_INFO_WIDTH (&cache->input_info) / 2,
+              GST_VIDEO_INFO_HEIGHT (&cache->input_info) / 2,
+              texfmt, GL_UNSIGNED_BYTE, 1, &texture) != kCVReturnSuccess)
+          goto error;
+
+        gl_target = gst_gl_texture_target_from_gl (CVOpenGLESTextureGetTarget (texture));
+        params = gst_gl_video_allocation_params_new_wrapped_texture (cache->ctx,
+            NULL, &cache->input_info, 1, NULL, gl_target,
+            CVOpenGLESTextureGetName (texture), texture,
+            (GDestroyNotify) CFRelease);
+
+        gst_buffer_replace_memory (output_buffer, 1,
+                (GstMemory *) gst_gl_base_memory_alloc (base_mem_alloc,
+                    (GstGLAllocationParams *) params));
+        gst_gl_allocation_params_free ((GstGLAllocationParams *) params);
+        break;
+      }
+    default:
+      g_warn_if_reached ();
+      goto error;
+  }
+
+  gst_object_unref (base_mem_alloc);
+
+  data->output_buffer = output_buffer;
+
+  return;
+
+error:
+  data->output_buffer = NULL;
+}
+#else /* !HAVE_IOS */
+static void
+_do_get_gl_buffer (GstGLContext * context, ContextThreadData * data)
+{
+  GstVideoTextureCache *cache = data->cache;
+  CVPixelBufferRef pixel_buf = cv_pixel_buffer_from_gst_buffer (data->input_buffer);
+  IOSurfaceRef surface = CVPixelBufferGetIOSurface (pixel_buf);
+
+  data->output_buffer = gst_buffer_new ();
+  gst_buffer_copy_into (data->output_buffer, data->input_buffer, GST_BUFFER_COPY_ALL, 0, -1);
+  for (int i = 0; i < GST_VIDEO_INFO_N_PLANES (&cache->input_info); i++) {
+    GstIOSurfaceMemory *mem;
+
+    CFRetain (pixel_buf);
+    mem = gst_io_surface_memory_wrapped (cache->ctx,
+            surface, GST_GL_TEXTURE_TARGET_RECTANGLE, &cache->input_info,
+            i, NULL, pixel_buf, (GDestroyNotify) CFRelease);
+
+    gst_buffer_replace_memory (data->output_buffer, i, (GstMemory *) mem);
+  }
+}
+#endif
+
+GstBuffer *
+gst_video_texture_cache_get_gl_buffer (GstVideoTextureCache * cache,
+        GstBuffer * cv_buffer)
+{
+  ContextThreadData data = {cache, cv_buffer, NULL};
+
+  gst_gl_context_thread_add (cache->ctx,
+      (GstGLContextThreadFunc) _do_get_gl_buffer, &data);
+
+  gst_buffer_unref (cv_buffer);
+
+  return data.output_buffer;
+}
diff --git a/sys/applemedia/vtdec.c b/sys/applemedia/vtdec.c
index 5c5a994..82a656c 100644
--- a/sys/applemedia/vtdec.c
+++ b/sys/applemedia/vtdec.c
@@ -1,6 +1,6 @@
 /* GStreamer
  * Copyright (C) 2010, 2013 Ole André Vadla Ravnås <oleavr@soundrop.com>
- * Copyright (C) 2012, 2013 Alessandro Decina <alessandro.d@gmail.com>
+ * Copyright (C) 2012-2016 Alessandro Decina <alessandro.d@gmail.com>
  *
  * This library is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Library General Public
@@ -25,7 +25,7 @@
  * <refsect2>
  * <title>Example launch line</title>
  * |[
- * gst-launch -v filesrc location=file.mov ! qtdemux ! queue ! h264parse ! vtdec ! videoconvert ! autovideosink
+ * gst-launch-1.0 -v filesrc location=file.mov ! qtdemux ! queue ! h264parse ! vtdec ! videoconvert ! autovideosink
  * ]|
  * Decode h264 video from a mov file.
  * </refsect2>
@@ -48,12 +48,18 @@
 GST_DEBUG_CATEGORY_STATIC (gst_vtdec_debug_category);
 #define GST_CAT_DEFAULT gst_vtdec_debug_category
 
+enum
+{
+  /* leave some headroom for new GstVideoCodecFrameFlags flags */
+  VTDEC_FRAME_FLAG_SKIP = (1 << 10),
+  VTDEC_FRAME_FLAG_DROP = (1 << 11),
+};
+
 static void gst_vtdec_finalize (GObject * object);
 
 static gboolean gst_vtdec_start (GstVideoDecoder * decoder);
 static gboolean gst_vtdec_stop (GstVideoDecoder * decoder);
-static gboolean gst_vtdec_decide_allocation (GstVideoDecoder * decoder,
-    GstQuery * query);
+static gboolean gst_vtdec_negotiate (GstVideoDecoder * decoder);
 static gboolean gst_vtdec_set_format (GstVideoDecoder * decoder,
     GstVideoCodecState * state);
 static gboolean gst_vtdec_flush (GstVideoDecoder * decoder);
@@ -82,6 +88,7 @@
 static gboolean gst_vtdec_compute_reorder_queue_length (GstVtdec * vtdec,
     CMVideoCodecType cm_format, GstBuffer * codec_data);
 static void gst_vtdec_set_latency (GstVtdec * vtdec);
+static void gst_vtdec_set_context (GstElement * element, GstContext * context);
 
 static GstStaticPadTemplate gst_vtdec_sink_template =
     GST_STATIC_PAD_TEMPLATE ("sink",
@@ -102,22 +109,11 @@
 CFSTR ("RequireHardwareAcceleratedVideoDecoder");
 #endif
 
-#ifdef HAVE_IOS
-#define GST_VTDEC_VIDEO_FORMAT_STR "NV12"
-#else
-#define GST_VTDEC_VIDEO_FORMAT_STR "UYVY"
-#endif
-
-#ifdef HAVE_IOS
 #define VIDEO_SRC_CAPS \
-    GST_VIDEO_CAPS_MAKE_WITH_FEATURES \
-    (GST_CAPS_FEATURE_MEMORY_GL_MEMORY, \
-        "RGBA") ";" \
-    GST_VIDEO_CAPS_MAKE(GST_VTDEC_VIDEO_FORMAT_STR) ";"
-#else
-#define VIDEO_SRC_CAPS \
-    GST_VIDEO_CAPS_MAKE(GST_VTDEC_VIDEO_FORMAT_STR) ";"
-#endif
+    GST_VIDEO_CAPS_MAKE_WITH_FEATURES(GST_CAPS_FEATURE_MEMORY_GL_MEMORY,\
+        "NV12") ", "                                                    \
+    "texture-target = (string) rectangle;"                              \
+    GST_VIDEO_CAPS_MAKE("NV12") ";"
 
 G_DEFINE_TYPE (GstVtdec, gst_vtdec, GST_TYPE_VIDEO_DECODER);
 
@@ -125,17 +121,18 @@
 gst_vtdec_class_init (GstVtdecClass * klass)
 {
   GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
+  GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
   GstVideoDecoderClass *video_decoder_class = GST_VIDEO_DECODER_CLASS (klass);
 
   /* Setting up pads and setting metadata should be moved to
      base_class_init if you intend to subclass this class. */
-  gst_element_class_add_pad_template (GST_ELEMENT_CLASS (klass),
+  gst_element_class_add_pad_template (element_class,
       gst_static_pad_template_get (&gst_vtdec_sink_template));
-  gst_element_class_add_pad_template (GST_ELEMENT_CLASS (klass),
+  gst_element_class_add_pad_template (element_class,
       gst_pad_template_new ("src", GST_PAD_SRC, GST_PAD_ALWAYS,
           gst_caps_from_string (VIDEO_SRC_CAPS)));
 
-  gst_element_class_set_static_metadata (GST_ELEMENT_CLASS (klass),
+  gst_element_class_set_static_metadata (element_class,
       "Apple VideoToolbox decoder",
       "Codec/Decoder/Video",
       "Apple VideoToolbox Decoder",
@@ -143,10 +140,10 @@
       "Alessandro Decina <alessandro.d@gmail.com>");
 
   gobject_class->finalize = gst_vtdec_finalize;
+  element_class->set_context = gst_vtdec_set_context;
   video_decoder_class->start = GST_DEBUG_FUNCPTR (gst_vtdec_start);
   video_decoder_class->stop = GST_DEBUG_FUNCPTR (gst_vtdec_stop);
-  video_decoder_class->decide_allocation =
-      GST_DEBUG_FUNCPTR (gst_vtdec_decide_allocation);
+  video_decoder_class->negotiate = GST_DEBUG_FUNCPTR (gst_vtdec_negotiate);
   video_decoder_class->set_format = GST_DEBUG_FUNCPTR (gst_vtdec_set_format);
   video_decoder_class->flush = GST_DEBUG_FUNCPTR (gst_vtdec_flush);
   video_decoder_class->finish = GST_DEBUG_FUNCPTR (gst_vtdec_finish);
@@ -158,6 +155,7 @@
 gst_vtdec_init (GstVtdec * vtdec)
 {
   vtdec->reorder_queue = g_async_queue_new ();
+  vtdec->ctxh = gst_gl_context_helper_new (GST_ELEMENT (vtdec));
 }
 
 void
@@ -168,7 +166,7 @@
   GST_DEBUG_OBJECT (vtdec, "finalize");
 
   g_async_queue_unref (vtdec->reorder_queue);
-
+  gst_gl_context_helper_free (vtdec->ctxh);
 
   G_OBJECT_CLASS (gst_vtdec_parent_class)->finalize (object);
 }
@@ -188,11 +186,15 @@
 {
   GstVtdec *vtdec = GST_VTDEC (decoder);
 
+  if (vtdec->input_state)
+    gst_video_codec_state_unref (vtdec->input_state);
+  vtdec->input_state = NULL;
+
   if (vtdec->session)
     gst_vtdec_invalidate_session (vtdec);
 
   if (vtdec->texture_cache)
-    gst_core_video_texture_cache_free (vtdec->texture_cache);
+    gst_video_texture_cache_free (vtdec->texture_cache);
   vtdec->texture_cache = NULL;
 
   GST_DEBUG_OBJECT (vtdec, "stop");
@@ -200,112 +202,108 @@
   return TRUE;
 }
 
-static gboolean
-gst_vtdec_decide_allocation (GstVideoDecoder * decoder, GstQuery * query)
+static void
+setup_texture_cache (GstVtdec * vtdec, GstGLContext * context)
 {
-  gboolean ret;
-  GstCaps *caps;
-  GstCapsFeatures *features;
-  GstVtdec *vtdec = GST_VTDEC (decoder);
+  GstVideoCodecState *output_state;
 
-  ret =
-      GST_VIDEO_DECODER_CLASS (gst_vtdec_parent_class)->decide_allocation
-      (decoder, query);
-  if (!ret)
-    goto out;
+  g_return_if_fail (vtdec->texture_cache == NULL);
 
-  gst_query_parse_allocation (query, &caps, NULL);
-  if (caps) {
-    GstGLContext *gl_context = NULL;
-    features = gst_caps_get_features (caps, 0);
-
-    if (gst_caps_features_contains (features,
-            GST_CAPS_FEATURE_MEMORY_GL_MEMORY)) {
-      GstContext *context = NULL;
-      GstQuery *query = gst_query_new_context ("gst.gl.local_context");
-      if (gst_pad_peer_query (GST_VIDEO_DECODER_SRC_PAD (decoder), query)) {
-
-        gst_query_parse_context (query, &context);
-        if (context) {
-          const GstStructure *s = gst_context_get_structure (context);
-          gst_structure_get (s, "context", GST_GL_TYPE_CONTEXT, &gl_context,
-              NULL);
-        }
-      }
-      gst_query_unref (query);
-
-      if (context) {
-        GstVideoFormat internal_format;
-        GstVideoCodecState *output_state =
-            gst_video_decoder_get_output_state (decoder);
-
-        GST_INFO_OBJECT (decoder, "pushing textures. GL context %p", context);
-        if (vtdec->texture_cache)
-          gst_core_video_texture_cache_free (vtdec->texture_cache);
-
-#ifdef HAVE_IOS
-        internal_format = GST_VIDEO_FORMAT_NV12;
-#else
-        internal_format = GST_VIDEO_FORMAT_UYVY;
-#endif
-        vtdec->texture_cache = gst_core_video_texture_cache_new (gl_context);
-        gst_core_video_texture_cache_set_format (vtdec->texture_cache,
-            internal_format, output_state->caps);
-        gst_video_codec_state_unref (output_state);
-        gst_object_unref (gl_context);
-      } else {
-        GST_WARNING_OBJECT (decoder,
-            "got memory:GLMemory caps but not GL context from downstream element");
-      }
-    }
-  }
-
-out:
-  return ret;
+  output_state = gst_video_decoder_get_output_state (GST_VIDEO_DECODER (vtdec));
+  vtdec->texture_cache = gst_video_texture_cache_new (context);
+  gst_video_texture_cache_set_format (vtdec->texture_cache,
+      GST_VIDEO_FORMAT_NV12, output_state->caps);
+  gst_video_codec_state_unref (output_state);
 }
 
 static gboolean
-gst_vtdec_negotiate_output_format (GstVtdec * vtdec,
-    GstVideoCodecState * input_state)
+gst_vtdec_negotiate (GstVideoDecoder * decoder)
 {
-  GstCaps *caps = NULL, *peercaps = NULL, *templcaps;
-  GstVideoFormat output_format;
   GstVideoCodecState *output_state = NULL;
-  GstCapsFeatures *features;
+  GstCaps *caps = NULL, *templcaps = NULL, *prevcaps = NULL;
+  GstVideoFormat format;
   GstStructure *structure;
   const gchar *s;
+  GstVtdec *vtdec;
+  gboolean ret = TRUE;
+  GstCapsFeatures *features = NULL;
+  gboolean output_textures;
 
-  peercaps = gst_pad_peer_query_caps (GST_VIDEO_DECODER_SRC_PAD (vtdec), NULL);
-
-  /* Check if output supports GL caps by preference */
-  templcaps = gst_pad_get_pad_template_caps (GST_VIDEO_DECODER_SRC_PAD (vtdec));
+  vtdec = GST_VTDEC (decoder);
+  templcaps =
+      gst_pad_get_pad_template_caps (GST_VIDEO_DECODER_SRC_PAD (decoder));
   caps =
-      gst_caps_intersect_full (templcaps, peercaps, GST_CAPS_INTERSECT_FIRST);
-
-  gst_caps_unref (peercaps);
+      gst_caps_make_writable (gst_pad_peer_query_caps (GST_VIDEO_DECODER_SRC_PAD
+          (vtdec), templcaps));
   gst_caps_unref (templcaps);
 
   caps = gst_caps_truncate (caps);
   structure = gst_caps_get_structure (caps, 0);
   s = gst_structure_get_string (structure, "format");
-  output_format = gst_video_format_from_string (s);
-  features = gst_caps_features_copy (gst_caps_get_features (caps, 0));
-
-  gst_caps_unref (caps);
-
-  if (!gst_vtdec_create_session (vtdec, output_format)) {
-    gst_caps_features_free (features);
-    return FALSE;
-  }
+  format = gst_video_format_from_string (s);
+  features = gst_caps_get_features (caps, 0);
+  if (features)
+    features = gst_caps_features_copy (features);
 
   output_state = gst_video_decoder_set_output_state (GST_VIDEO_DECODER (vtdec),
-      output_format, vtdec->video_info.width, vtdec->video_info.height,
-      input_state);
-
+      format, vtdec->video_info.width, vtdec->video_info.height,
+      vtdec->input_state);
   output_state->caps = gst_video_info_to_caps (&output_state->info);
-  gst_caps_set_features (output_state->caps, 0, features);
+  if (features) {
+    gst_caps_set_features (output_state->caps, 0, features);
+    output_textures =
+        gst_caps_features_contains (features,
+        GST_CAPS_FEATURE_MEMORY_GL_MEMORY);
+    if (output_textures)
+      gst_caps_set_simple (output_state->caps, "texture-target", G_TYPE_STRING,
+#if !HAVE_IOS
+          GST_GL_TEXTURE_TARGET_RECTANGLE_STR,
+#else
+          GST_GL_TEXTURE_TARGET_2D_STR,
+#endif
+          NULL);
+  }
+  gst_caps_unref (caps);
 
-  return TRUE;
+  prevcaps = gst_pad_get_current_caps (decoder->srcpad);
+  if (!prevcaps || !gst_caps_is_equal (prevcaps, output_state->caps)) {
+    GST_INFO_OBJECT (vtdec, "negotiated output format %" GST_PTR_FORMAT,
+        output_state->caps);
+
+    if (vtdec->session) {
+      gst_vtdec_push_frames_if_needed (vtdec, TRUE, FALSE);
+      gst_vtdec_invalidate_session (vtdec);
+    }
+
+    ret = gst_vtdec_create_session (vtdec, format);
+  }
+
+  if (ret && output_textures) {
+    /* call this regardless of whether caps have changed or not since a new
+     * local context could have become available
+     */
+    gst_gl_context_helper_ensure_context (vtdec->ctxh);
+
+    GST_INFO_OBJECT (vtdec, "pushing textures, context %p old context %p",
+        vtdec->ctxh->context,
+        vtdec->texture_cache ? vtdec->texture_cache->ctx : NULL);
+
+    if (vtdec->texture_cache
+        && vtdec->texture_cache->ctx != vtdec->ctxh->context) {
+      gst_video_texture_cache_free (vtdec->texture_cache);
+      vtdec->texture_cache = NULL;
+    }
+    if (!vtdec->texture_cache)
+      setup_texture_cache (vtdec, vtdec->ctxh->context);
+  }
+
+  if (prevcaps)
+    gst_caps_unref (prevcaps);
+
+  if (!ret)
+    return ret;
+
+  return GST_VIDEO_DECODER_CLASS (gst_vtdec_parent_class)->negotiate (decoder);
 }
 
 static gboolean
@@ -334,8 +332,10 @@
     return TRUE;
   }
 
-  if (vtdec->session)
+  if (vtdec->session) {
+    gst_vtdec_push_frames_if_needed (vtdec, TRUE, FALSE);
     gst_vtdec_invalidate_session (vtdec);
+  }
 
   gst_video_info_from_caps (&vtdec->video_info, state->caps);
 
@@ -355,10 +355,11 @@
     CFRelease (vtdec->format_description);
   vtdec->format_description = format_description;
 
-  if (!gst_vtdec_negotiate_output_format (vtdec, state))
-    return FALSE;
+  if (vtdec->input_state)
+    gst_video_codec_state_unref (vtdec->input_state);
+  vtdec->input_state = gst_video_codec_state_ref (state);
 
-  return TRUE;
+  return gst_video_decoder_negotiate (decoder);
 }
 
 static gboolean
@@ -433,6 +434,16 @@
   goto out;
 }
 
+static void
+gst_vtdec_invalidate_session (GstVtdec * vtdec)
+{
+  g_return_if_fail (vtdec->session);
+
+  VTDecompressionSessionInvalidate (vtdec->session);
+  CFRelease (vtdec->session);
+  vtdec->session = NULL;
+}
+
 static gboolean
 gst_vtdec_create_session (GstVtdec * vtdec, GstVideoFormat format)
 {
@@ -440,7 +451,9 @@
   VTDecompressionOutputCallbackRecord callback;
   CFMutableDictionaryRef videoDecoderSpecification;
   OSStatus status;
-  guint32 cv_format;
+  guint32 cv_format = 0;
+
+  g_return_val_if_fail (vtdec->session == NULL, FALSE);
 
   switch (format) {
     case GST_VIDEO_FORMAT_NV12:
@@ -450,11 +463,7 @@
       cv_format = kCVPixelFormatType_422YpCbCr8;
       break;
     case GST_VIDEO_FORMAT_RGBA:
-#ifdef HAVE_IOS
       cv_format = kCVPixelFormatType_420YpCbCr8BiPlanarVideoRange;
-#else
-      cv_format = kCVPixelFormatType_422YpCbCr8;
-#endif
       break;
     default:
       g_warn_if_reached ();
@@ -503,16 +512,6 @@
   return TRUE;
 }
 
-static void
-gst_vtdec_invalidate_session (GstVtdec * vtdec)
-{
-  g_return_if_fail (vtdec->session);
-
-  VTDecompressionSessionInvalidate (vtdec->session);
-  CFRelease (vtdec->session);
-  vtdec->session = NULL;
-}
-
 static CMFormatDescriptionRef
 create_format_description (GstVtdec * vtdec, CMVideoCodecType cm_format)
 {
@@ -702,8 +701,11 @@
 
   frame1 = (GstVideoCodecFrame *) f1;
   frame2 = (GstVideoCodecFrame *) f2;
-  pts1 = GST_BUFFER_PTS (frame1->output_buffer);
-  pts2 = GST_BUFFER_PTS (frame2->output_buffer);
+  pts1 = pts2 = GST_CLOCK_TIME_NONE;
+  if (frame1->output_buffer)
+    pts1 = GST_BUFFER_PTS (frame1->output_buffer);
+  if (frame2->output_buffer)
+    pts2 = GST_BUFFER_PTS (frame2->output_buffer);
 
   if (!GST_CLOCK_TIME_IS_VALID (pts1) || !GST_CLOCK_TIME_IS_VALID (pts2))
     return 0;
@@ -723,58 +725,45 @@
 {
   GstVtdec *vtdec = (GstVtdec *) decompression_output_ref_con;
   GstVideoCodecFrame *frame = (GstVideoCodecFrame *) source_frame_ref_con;
-  GstBuffer *buf;
   GstVideoCodecState *state;
 
   GST_LOG_OBJECT (vtdec, "got output frame %p %d and VT buffer %p", frame,
       frame->decode_frame_number, image_buffer);
 
+  frame->output_buffer = NULL;
+
   if (status != noErr) {
     GST_ERROR_OBJECT (vtdec, "Error decoding frame %d", (int) status);
-    goto drop;
   }
 
-  if (image_buffer == NULL) {
-    if (info_flags & kVTDecodeInfo_FrameDropped)
-      GST_DEBUG_OBJECT (vtdec, "Frame dropped by video toolbox");
-    else
+  if (image_buffer) {
+    GstBuffer *buf = NULL;
+
+    /* FIXME: use gst_video_decoder_allocate_output_buffer */
+    state = gst_video_decoder_get_output_state (GST_VIDEO_DECODER (vtdec));
+    if (state == NULL) {
+      GST_WARNING_OBJECT (vtdec, "Output state not configured, release buffer");
+      frame->flags &= VTDEC_FRAME_FLAG_SKIP;
+    } else {
+      buf = gst_core_video_buffer_new (image_buffer, &state->info);
+      gst_video_codec_state_unref (state);
+      GST_BUFFER_PTS (buf) = pts.value;
+      GST_BUFFER_DURATION (buf) = duration.value;
+      frame->output_buffer = buf;
+    }
+  } else {
+    if (info_flags & kVTDecodeInfo_FrameDropped) {
+      GST_DEBUG_OBJECT (vtdec, "Frame dropped by video toolbox %p %d",
+          frame, frame->decode_frame_number);
+      frame->flags |= VTDEC_FRAME_FLAG_DROP;
+    } else {
       GST_DEBUG_OBJECT (vtdec, "Decoded frame is NULL");
-    goto drop;
+      frame->flags |= VTDEC_FRAME_FLAG_SKIP;
+    }
   }
 
-  /* FIXME: use gst_video_decoder_allocate_output_buffer */
-  state = gst_video_decoder_get_output_state (GST_VIDEO_DECODER (vtdec));
-  if (state == NULL) {
-    GST_WARNING_OBJECT (vtdec, "Output state not configured, release buffer");
-    /* release as this usually means that the baseclass isn't ready to do
-     * the QoS that _drop requires and will lead to an assertion with the
-     * segment.format being undefined */
-    goto release;
-  }
-  buf =
-      gst_core_video_buffer_new (image_buffer, &state->info,
-      vtdec->texture_cache == NULL);
-  gst_video_codec_state_unref (state);
-
-  GST_BUFFER_PTS (buf) = pts.value;
-  GST_BUFFER_DURATION (buf) = duration.value;
-  frame->output_buffer = buf;
   g_async_queue_push_sorted (vtdec->reorder_queue, frame,
       sort_frames_by_pts, NULL);
-
-  return;
-
-drop:
-  GST_WARNING_OBJECT (vtdec, "Frame dropped %p %d", frame,
-      frame->decode_frame_number);
-  gst_video_decoder_drop_frame (GST_VIDEO_DECODER (vtdec), frame);
-  return;
-
-release:
-  GST_WARNING_OBJECT (vtdec, "Frame released %p %d", frame,
-      frame->decode_frame_number);
-  gst_video_decoder_release_frame (GST_VIDEO_DECODER (vtdec), frame);
-  return;
 }
 
 static GstFlowReturn
@@ -785,13 +774,11 @@
   GstFlowReturn ret = GST_FLOW_OK;
   GstVideoDecoder *decoder = GST_VIDEO_DECODER (vtdec);
 
-  /* FIXME: Instead of this, implement GstVideoDecoder::negotiate() and
-   * just call gst_video_decoder_negotiate()
-   */
   /* negotiate now so that we know whether we need to use the GL upload meta or
    * not */
-  if (gst_pad_check_reconfigure (decoder->srcpad))
+  if (gst_pad_check_reconfigure (decoder->srcpad)) {
     gst_video_decoder_negotiate (decoder);
+  }
 
   if (drain)
     VTDecompressionSessionWaitForAsynchronousFrames (vtdec->session);
@@ -802,9 +789,9 @@
   while ((g_async_queue_length (vtdec->reorder_queue) >=
           vtdec->reorder_queue_length) || drain || flush) {
     frame = (GstVideoCodecFrame *) g_async_queue_try_pop (vtdec->reorder_queue);
-    if (frame && vtdec->texture_cache != NULL) {
+    if (frame && frame->output_buffer && vtdec->texture_cache != NULL) {
       frame->output_buffer =
-          gst_core_video_texture_cache_get_gl_buffer (vtdec->texture_cache,
+          gst_video_texture_cache_get_gl_buffer (vtdec->texture_cache,
           frame->output_buffer);
       if (!frame->output_buffer)
         GST_ERROR_OBJECT (vtdec, "couldn't get textures from buffer");
@@ -814,7 +801,9 @@
      * example) or we're draining/flushing
      */
     if (frame) {
-      if (flush)
+      if (flush || frame->flags & VTDEC_FRAME_FLAG_SKIP)
+        gst_video_decoder_release_frame (decoder, frame);
+      else if (frame->flags & VTDEC_FRAME_FLAG_DROP)
         gst_video_decoder_drop_frame (decoder, frame);
       else
         ret = gst_video_decoder_finish_frame (decoder, frame);
@@ -989,6 +978,18 @@
   gst_video_decoder_set_latency (GST_VIDEO_DECODER (vtdec), latency, latency);
 }
 
+static void
+gst_vtdec_set_context (GstElement * element, GstContext * context)
+{
+  GstVtdec *vtdec = GST_VTDEC (element);
+
+  GST_INFO_OBJECT (element, "setting context %s",
+      gst_context_get_context_type (context));
+  gst_gl_handle_set_context (element, context,
+      &vtdec->ctxh->display, &vtdec->ctxh->other_context);
+  GST_ELEMENT_CLASS (gst_vtdec_parent_class)->set_context (element, context);
+}
+
 #ifndef HAVE_IOS
 #define GST_TYPE_VTDEC_HW   (gst_vtdec_hw_get_type())
 #define GST_VTDEC_HW(obj)   (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_VTDEC_HW,GstVtdecHw))
diff --git a/sys/applemedia/vtdec.h b/sys/applemedia/vtdec.h
index 4b9c788..46354d8 100644
--- a/sys/applemedia/vtdec.h
+++ b/sys/applemedia/vtdec.h
@@ -25,7 +25,8 @@
 #include <gst/video/gstvideodecoder.h>
 #include <CoreMedia/CoreMedia.h>
 #include <VideoToolbox/VideoToolbox.h>
-#include "corevideotexturecache.h"
+#include "videotexturecache.h"
+#include "glcontexthelper.h"
 
 G_BEGIN_DECLS
 
@@ -41,12 +42,14 @@
 struct _GstVtdec
 {
   GstVideoDecoder base_vtdec;
+  GstVideoCodecState *input_state;
   GstVideoInfo video_info;
   CMFormatDescriptionRef format_description;
   VTDecompressionSessionRef session;
   GAsyncQueue *reorder_queue;
   gint reorder_queue_length;
-  GstCoreVideoTextureCache *texture_cache;
+  GstVideoTextureCache *texture_cache;
+  GstGLContextHelper *ctxh;
 
   gboolean require_hardware;
 };
diff --git a/sys/applemedia/vtenc.c b/sys/applemedia/vtenc.c
index f0af751..de60272 100644
--- a/sys/applemedia/vtenc.c
+++ b/sys/applemedia/vtenc.c
@@ -136,8 +136,13 @@
     const void *planeAddresses[]);
 #endif
 
+#ifdef HAVE_IOS
 static GstStaticCaps sink_caps =
 GST_STATIC_CAPS (GST_VIDEO_CAPS_MAKE ("{ NV12, I420 }"));
+#else
+static GstStaticCaps sink_caps =
+GST_STATIC_CAPS (GST_VIDEO_CAPS_MAKE ("{ UYVY, NV12, I420 }"));
+#endif
 
 static void
 gst_vtenc_base_init (GstVTEncClass * klass)
@@ -1107,8 +1112,7 @@
       goto cv_error;
     }
 
-    outbuf =
-        gst_core_video_buffer_new ((CVBufferRef) pbuf, &self->video_info, TRUE);
+    outbuf = gst_core_video_buffer_new ((CVBufferRef) pbuf, &self->video_info);
     if (!gst_video_frame_map (&outframe, &self->video_info, outbuf,
             GST_MAP_WRITE)) {
       gst_video_frame_unmap (&inframe);
@@ -1164,6 +1168,9 @@
         case GST_VIDEO_FORMAT_NV12:
           pixel_format_type = kCVPixelFormatType_420YpCbCr8BiPlanarVideoRange;
           break;
+        case GST_VIDEO_FORMAT_UYVY:
+          pixel_format_type = kCVPixelFormatType_422YpCbCr8;
+          break;
         default:
           gst_vtenc_frame_free (vframe);
           goto cv_error;
@@ -1287,7 +1294,7 @@
 
   /* We are dealing with block buffers here, so we don't need
    * to enable the use of the video meta API on the core media buffer */
-  frame->output_buffer = gst_core_media_buffer_new (sampleBuffer, FALSE, TRUE);
+  frame->output_buffer = gst_core_media_buffer_new (sampleBuffer, FALSE);
 
 beach:
   /* needed anyway so the frame will be released */
diff --git a/sys/avc/Makefile.in b/sys/avc/Makefile.in
index 722de5f..0cde012 100644
--- a/sys/avc/Makefile.in
+++ b/sys/avc/Makefile.in
@@ -116,16 +116,15 @@
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
 	$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
-	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gsettings.m4 \
-	$(top_srcdir)/m4/gst-fionread.m4 $(top_srcdir)/m4/gst-sdl.m4 \
-	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
-	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
-	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libgcrypt.m4 \
-	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
-	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
-	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
-	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
-	$(top_srcdir)/configure.ac
+	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gst-fionread.m4 \
+	$(top_srcdir)/m4/gst-sdl.m4 $(top_srcdir)/m4/iconv.m4 \
+	$(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \
+	$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
+	$(top_srcdir)/m4/libgcrypt.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
+	$(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \
@@ -275,6 +274,8 @@
 CLUTTER_X11_LIBS = @CLUTTER_X11_LIBS@
 CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
+CUDA_CFLAGS = @CUDA_CFLAGS@
+CUDA_LIBS = @CUDA_LIBS@
 CURL_CFLAGS = @CURL_CFLAGS@
 CURL_LIBS = @CURL_LIBS@
 CXX = @CXX@
@@ -312,6 +313,8 @@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
+EGL_CFLAGS = @EGL_CFLAGS@
+EGL_LIBS = @EGL_LIBS@
 EGREP = @EGREP@
 ERROR_CFLAGS = @ERROR_CFLAGS@
 ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
@@ -320,7 +323,6 @@
 EXIF_CFLAGS = @EXIF_CFLAGS@
 EXIF_LIBS = @EXIF_LIBS@
 FAAC_LIBS = @FAAC_LIBS@
-FAAD_IS_NEAAC = @FAAD_IS_NEAAC@
 FAAD_LIBS = @FAAD_LIBS@
 FFLAGS = @FFLAGS@
 FGREP = @FGREP@
@@ -339,8 +341,9 @@
 GIO_LIBS = @GIO_LIBS@
 GIO_UNIX_CFLAGS = @GIO_UNIX_CFLAGS@
 GIO_UNIX_LIBS = @GIO_UNIX_LIBS@
+GLES2_CFLAGS = @GLES2_CFLAGS@
+GLES2_LIBS = @GLES2_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
-GLIB_COMPILE_SCHEMAS = @GLIB_COMPILE_SCHEMAS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
@@ -357,16 +360,17 @@
 GMODULE_NO_EXPORT_LIBS = @GMODULE_NO_EXPORT_LIBS@
 GMSGFMT = @GMSGFMT@
 GMSGFMT_015 = @GMSGFMT_015@
+GNUSTL_CFLAGS = @GNUSTL_CFLAGS@
+GNUSTL_LIBS = @GNUSTL_LIBS@
 GRAPHENE_CFLAGS = @GRAPHENE_CFLAGS@
 GRAPHENE_LIBS = @GRAPHENE_LIBS@
 GREP = @GREP@
-GSETTINGS_CFLAGS = @GSETTINGS_CFLAGS@
-GSETTINGS_DISABLE_SCHEMAS_COMPILE = @GSETTINGS_DISABLE_SCHEMAS_COMPILE@
-GSETTINGS_LIBS = @GSETTINGS_LIBS@
 GSM_LIBS = @GSM_LIBS@
 GSTPB_PLUGINS_DIR = @GSTPB_PLUGINS_DIR@
 GSTPB_PREFIX = @GSTPB_PREFIX@
 GST_AGE = @GST_AGE@
+GST_ALLOCATORS_CFLAGS = @GST_ALLOCATORS_CFLAGS@
+GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
 GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
 GST_API_VERSION = @GST_API_VERSION@
 GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
@@ -392,6 +396,8 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PBUTILS_CFLAGS = @GST_PBUTILS_CFLAGS@
+GST_PBUTILS_LIBS = @GST_PBUTILS_LIBS@
 GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BAD_CFLAGS = @GST_PLUGINS_BAD_CFLAGS@
@@ -417,6 +423,8 @@
 GST_PREFIX = @GST_PREFIX@
 GST_REVISION = @GST_REVISION@
 GST_TOOLS_DIR = @GST_TOOLS_DIR@
+GST_VIDEO_CFLAGS = @GST_VIDEO_CFLAGS@
+GST_VIDEO_LIBS = @GST_VIDEO_LIBS@
 GTK3_CFLAGS = @GTK3_CFLAGS@
 GTK3_GL_CFLAGS = @GTK3_GL_CFLAGS@
 GTK3_GL_LIBS = @GTK3_GL_LIBS@
@@ -518,6 +526,7 @@
 LTLIBICONV = @LTLIBICONV@
 LTLIBINTL = @LTLIBINTL@
 LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
 MANIFEST_TOOL = @MANIFEST_TOOL@
@@ -531,8 +540,6 @@
 MODPLUG_LIBS = @MODPLUG_LIBS@
 MPEG2ENC_CFLAGS = @MPEG2ENC_CFLAGS@
 MPEG2ENC_LIBS = @MPEG2ENC_LIBS@
-MPG123_CFLAGS = @MPG123_CFLAGS@
-MPG123_LIBS = @MPG123_LIBS@
 MPLEX_CFLAGS = @MPLEX_CFLAGS@
 MPLEX_LDFLAGS = @MPLEX_LDFLAGS@
 MPLEX_LIBS = @MPLEX_LIBS@
@@ -548,6 +555,8 @@
 NETTLE_LIBS = @NETTLE_LIBS@
 NM = @NM@
 NMEDIT = @NMEDIT@
+NVENCODE_CFLAGS = @NVENCODE_CFLAGS@
+NVENCODE_LIBS = @NVENCODE_LIBS@
 OBJC = @OBJC@
 OBJCDEPMODE = @OBJCDEPMODE@
 OBJCFLAGS = @OBJCFLAGS@
@@ -605,16 +614,18 @@
 PYTHON_PLATFORM = @PYTHON_PLATFORM@
 PYTHON_PREFIX = @PYTHON_PREFIX@
 PYTHON_VERSION = @PYTHON_VERSION@
+QT_ANDROID_CFLAGS = @QT_ANDROID_CFLAGS@
+QT_ANDROID_LIBS = @QT_ANDROID_LIBS@
 QT_CFLAGS = @QT_CFLAGS@
 QT_LIBS = @QT_LIBS@
+QT_MAC_CFLAGS = @QT_MAC_CFLAGS@
+QT_MAC_LIBS = @QT_MAC_LIBS@
 QT_WAYLAND_CFLAGS = @QT_WAYLAND_CFLAGS@
 QT_WAYLAND_LIBS = @QT_WAYLAND_LIBS@
 QT_X11_CFLAGS = @QT_X11_CFLAGS@
 QT_X11_LIBS = @QT_X11_LIBS@
 RANLIB = @RANLIB@
 RCC = @RCC@
-RSVG_2_36_2_CFLAGS = @RSVG_2_36_2_CFLAGS@
-RSVG_2_36_2_LIBS = @RSVG_2_36_2_LIBS@
 RSVG_CFLAGS = @RSVG_CFLAGS@
 RSVG_LIBS = @RSVG_LIBS@
 RTMP_CFLAGS = @RTMP_CFLAGS@
@@ -666,6 +677,7 @@
 VOAACENC_LIBS = @VOAACENC_LIBS@
 VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
 VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VULKAN_LIBS = @VULKAN_LIBS@
 WARNING_CFLAGS = @WARNING_CFLAGS@
 WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
 WARNING_OBJCFLAGS = @WARNING_OBJCFLAGS@
@@ -676,6 +688,7 @@
 WAYLAND_LIBS = @WAYLAND_LIBS@
 WEBP_CFLAGS = @WEBP_CFLAGS@
 WEBP_LIBS = @WEBP_LIBS@
+WGET = @WGET@
 WILDMIDI_CFLAGS = @WILDMIDI_CFLAGS@
 WILDMIDI_LIBS = @WILDMIDI_LIBS@
 WINKS_LIBS = @WINKS_LIBS@
@@ -685,6 +698,8 @@
 X11_LIBS = @X11_LIBS@
 X265_CFLAGS = @X265_CFLAGS@
 X265_LIBS = @X265_LIBS@
+XCB_CFLAGS = @XCB_CFLAGS@
+XCB_LIBS = @XCB_LIBS@
 XCOMPOSITE_CFLAGS = @XCOMPOSITE_CFLAGS@
 XCOMPOSITE_LIBS = @XCOMPOSITE_LIBS@
 XGETTEXT = @XGETTEXT@
@@ -722,7 +737,6 @@
 docdir = @docdir@
 dvidir = @dvidir@
 exec_prefix = @exec_prefix@
-gsettingsschemadir = @gsettingsschemadir@
 host = @host@
 host_alias = @host_alias@
 host_cpu = @host_cpu@
diff --git a/sys/bluez/Makefile.in b/sys/bluez/Makefile.in
index 6db6692..6217af3 100644
--- a/sys/bluez/Makefile.in
+++ b/sys/bluez/Makefile.in
@@ -116,16 +116,15 @@
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
 	$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
-	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gsettings.m4 \
-	$(top_srcdir)/m4/gst-fionread.m4 $(top_srcdir)/m4/gst-sdl.m4 \
-	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
-	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
-	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libgcrypt.m4 \
-	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
-	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
-	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
-	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
-	$(top_srcdir)/configure.ac
+	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gst-fionread.m4 \
+	$(top_srcdir)/m4/gst-sdl.m4 $(top_srcdir)/m4/iconv.m4 \
+	$(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \
+	$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
+	$(top_srcdir)/m4/libgcrypt.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
+	$(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \
@@ -280,6 +279,8 @@
 CLUTTER_X11_LIBS = @CLUTTER_X11_LIBS@
 CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
+CUDA_CFLAGS = @CUDA_CFLAGS@
+CUDA_LIBS = @CUDA_LIBS@
 CURL_CFLAGS = @CURL_CFLAGS@
 CURL_LIBS = @CURL_LIBS@
 CXX = @CXX@
@@ -317,6 +318,8 @@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
+EGL_CFLAGS = @EGL_CFLAGS@
+EGL_LIBS = @EGL_LIBS@
 EGREP = @EGREP@
 ERROR_CFLAGS = @ERROR_CFLAGS@
 ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
@@ -325,7 +328,6 @@
 EXIF_CFLAGS = @EXIF_CFLAGS@
 EXIF_LIBS = @EXIF_LIBS@
 FAAC_LIBS = @FAAC_LIBS@
-FAAD_IS_NEAAC = @FAAD_IS_NEAAC@
 FAAD_LIBS = @FAAD_LIBS@
 FFLAGS = @FFLAGS@
 FGREP = @FGREP@
@@ -344,8 +346,9 @@
 GIO_LIBS = @GIO_LIBS@
 GIO_UNIX_CFLAGS = @GIO_UNIX_CFLAGS@
 GIO_UNIX_LIBS = @GIO_UNIX_LIBS@
+GLES2_CFLAGS = @GLES2_CFLAGS@
+GLES2_LIBS = @GLES2_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
-GLIB_COMPILE_SCHEMAS = @GLIB_COMPILE_SCHEMAS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
@@ -362,16 +365,17 @@
 GMODULE_NO_EXPORT_LIBS = @GMODULE_NO_EXPORT_LIBS@
 GMSGFMT = @GMSGFMT@
 GMSGFMT_015 = @GMSGFMT_015@
+GNUSTL_CFLAGS = @GNUSTL_CFLAGS@
+GNUSTL_LIBS = @GNUSTL_LIBS@
 GRAPHENE_CFLAGS = @GRAPHENE_CFLAGS@
 GRAPHENE_LIBS = @GRAPHENE_LIBS@
 GREP = @GREP@
-GSETTINGS_CFLAGS = @GSETTINGS_CFLAGS@
-GSETTINGS_DISABLE_SCHEMAS_COMPILE = @GSETTINGS_DISABLE_SCHEMAS_COMPILE@
-GSETTINGS_LIBS = @GSETTINGS_LIBS@
 GSM_LIBS = @GSM_LIBS@
 GSTPB_PLUGINS_DIR = @GSTPB_PLUGINS_DIR@
 GSTPB_PREFIX = @GSTPB_PREFIX@
 GST_AGE = @GST_AGE@
+GST_ALLOCATORS_CFLAGS = @GST_ALLOCATORS_CFLAGS@
+GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
 GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
 GST_API_VERSION = @GST_API_VERSION@
 GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
@@ -397,6 +401,8 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PBUTILS_CFLAGS = @GST_PBUTILS_CFLAGS@
+GST_PBUTILS_LIBS = @GST_PBUTILS_LIBS@
 GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BAD_CFLAGS = @GST_PLUGINS_BAD_CFLAGS@
@@ -422,6 +428,8 @@
 GST_PREFIX = @GST_PREFIX@
 GST_REVISION = @GST_REVISION@
 GST_TOOLS_DIR = @GST_TOOLS_DIR@
+GST_VIDEO_CFLAGS = @GST_VIDEO_CFLAGS@
+GST_VIDEO_LIBS = @GST_VIDEO_LIBS@
 GTK3_CFLAGS = @GTK3_CFLAGS@
 GTK3_GL_CFLAGS = @GTK3_GL_CFLAGS@
 GTK3_GL_LIBS = @GTK3_GL_LIBS@
@@ -523,6 +531,7 @@
 LTLIBICONV = @LTLIBICONV@
 LTLIBINTL = @LTLIBINTL@
 LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
 MANIFEST_TOOL = @MANIFEST_TOOL@
@@ -536,8 +545,6 @@
 MODPLUG_LIBS = @MODPLUG_LIBS@
 MPEG2ENC_CFLAGS = @MPEG2ENC_CFLAGS@
 MPEG2ENC_LIBS = @MPEG2ENC_LIBS@
-MPG123_CFLAGS = @MPG123_CFLAGS@
-MPG123_LIBS = @MPG123_LIBS@
 MPLEX_CFLAGS = @MPLEX_CFLAGS@
 MPLEX_LDFLAGS = @MPLEX_LDFLAGS@
 MPLEX_LIBS = @MPLEX_LIBS@
@@ -553,6 +560,8 @@
 NETTLE_LIBS = @NETTLE_LIBS@
 NM = @NM@
 NMEDIT = @NMEDIT@
+NVENCODE_CFLAGS = @NVENCODE_CFLAGS@
+NVENCODE_LIBS = @NVENCODE_LIBS@
 OBJC = @OBJC@
 OBJCDEPMODE = @OBJCDEPMODE@
 OBJCFLAGS = @OBJCFLAGS@
@@ -610,16 +619,18 @@
 PYTHON_PLATFORM = @PYTHON_PLATFORM@
 PYTHON_PREFIX = @PYTHON_PREFIX@
 PYTHON_VERSION = @PYTHON_VERSION@
+QT_ANDROID_CFLAGS = @QT_ANDROID_CFLAGS@
+QT_ANDROID_LIBS = @QT_ANDROID_LIBS@
 QT_CFLAGS = @QT_CFLAGS@
 QT_LIBS = @QT_LIBS@
+QT_MAC_CFLAGS = @QT_MAC_CFLAGS@
+QT_MAC_LIBS = @QT_MAC_LIBS@
 QT_WAYLAND_CFLAGS = @QT_WAYLAND_CFLAGS@
 QT_WAYLAND_LIBS = @QT_WAYLAND_LIBS@
 QT_X11_CFLAGS = @QT_X11_CFLAGS@
 QT_X11_LIBS = @QT_X11_LIBS@
 RANLIB = @RANLIB@
 RCC = @RCC@
-RSVG_2_36_2_CFLAGS = @RSVG_2_36_2_CFLAGS@
-RSVG_2_36_2_LIBS = @RSVG_2_36_2_LIBS@
 RSVG_CFLAGS = @RSVG_CFLAGS@
 RSVG_LIBS = @RSVG_LIBS@
 RTMP_CFLAGS = @RTMP_CFLAGS@
@@ -671,6 +682,7 @@
 VOAACENC_LIBS = @VOAACENC_LIBS@
 VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
 VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VULKAN_LIBS = @VULKAN_LIBS@
 WARNING_CFLAGS = @WARNING_CFLAGS@
 WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
 WARNING_OBJCFLAGS = @WARNING_OBJCFLAGS@
@@ -681,6 +693,7 @@
 WAYLAND_LIBS = @WAYLAND_LIBS@
 WEBP_CFLAGS = @WEBP_CFLAGS@
 WEBP_LIBS = @WEBP_LIBS@
+WGET = @WGET@
 WILDMIDI_CFLAGS = @WILDMIDI_CFLAGS@
 WILDMIDI_LIBS = @WILDMIDI_LIBS@
 WINKS_LIBS = @WINKS_LIBS@
@@ -690,6 +703,8 @@
 X11_LIBS = @X11_LIBS@
 X265_CFLAGS = @X265_CFLAGS@
 X265_LIBS = @X265_LIBS@
+XCB_CFLAGS = @XCB_CFLAGS@
+XCB_LIBS = @XCB_LIBS@
 XCOMPOSITE_CFLAGS = @XCOMPOSITE_CFLAGS@
 XCOMPOSITE_LIBS = @XCOMPOSITE_LIBS@
 XGETTEXT = @XGETTEXT@
@@ -727,7 +742,6 @@
 docdir = @docdir@
 dvidir = @dvidir@
 exec_prefix = @exec_prefix@
-gsettingsschemadir = @gsettingsschemadir@
 host = @host@
 host_alias = @host_alias@
 host_cpu = @host_cpu@
diff --git a/sys/bluez/gsta2dpsink.c b/sys/bluez/gsta2dpsink.c
index 7b9f922..424b56c 100644
--- a/sys/bluez/gsta2dpsink.c
+++ b/sys/bluez/gsta2dpsink.c
@@ -157,8 +157,7 @@
       if (self->sink != NULL)
         gst_avdtp_sink_set_device (self->sink, g_value_get_string (value));
 
-      if (self->device != NULL)
-        g_free (self->device);
+      g_free (self->device);
       self->device = g_value_dup_string (value);
       break;
 
@@ -166,8 +165,7 @@
       if (self->sink != NULL)
         gst_avdtp_sink_set_transport (self->sink, g_value_get_string (value));
 
-      if (self->transport != NULL)
-        g_free (self->transport);
+      g_free (self->transport);
       self->transport = g_value_dup_string (value);
       break;
 
diff --git a/sys/bluez/gstavdtpsink.c b/sys/bluez/gstavdtpsink.c
index 70dc742..0f72a74 100644
--- a/sys/bluez/gstavdtpsink.c
+++ b/sys/bluez/gstavdtpsink.c
@@ -451,8 +451,7 @@
 void
 gst_avdtp_sink_set_device (GstAvdtpSink * self, const gchar * dev)
 {
-  if (self->conn.device != NULL)
-    g_free (self->conn.device);
+  g_free (self->conn.device);
 
   GST_LOG_OBJECT (self, "Setting device: %s", dev);
   self->conn.device = g_strdup (dev);
@@ -461,8 +460,7 @@
 void
 gst_avdtp_sink_set_transport (GstAvdtpSink * self, const gchar * trans)
 {
-  if (self->conn.transport != NULL)
-    g_free (self->conn.transport);
+  g_free (self->conn.transport);
 
   GST_LOG_OBJECT (self, "Setting transport: %s", trans);
   self->conn.transport = g_strdup (trans);
diff --git a/sys/bluez/gstavdtputil.c b/sys/bluez/gstavdtputil.c
index a435c6a..efc4f42 100644
--- a/sys/bluez/gstavdtputil.c
+++ b/sys/bluez/gstavdtputil.c
@@ -213,8 +213,7 @@
 void
 gst_avdtp_connection_set_device (GstAvdtpConnection * conn, const char *device)
 {
-  if (conn->device)
-    g_free (conn->device);
+  g_free (conn->device);
 
   conn->device = g_strdup (device);
 }
@@ -223,8 +222,7 @@
 gst_avdtp_connection_set_transport (GstAvdtpConnection * conn,
     const char *transport)
 {
-  if (conn->transport)
-    g_free (conn->transport);
+  g_free (conn->transport);
 
   conn->transport = g_strdup (transport);
 }
diff --git a/sys/d3dvideosink/Makefile.in b/sys/d3dvideosink/Makefile.in
index b37288a..56fe397 100644
--- a/sys/d3dvideosink/Makefile.in
+++ b/sys/d3dvideosink/Makefile.in
@@ -116,16 +116,15 @@
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
 	$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
-	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gsettings.m4 \
-	$(top_srcdir)/m4/gst-fionread.m4 $(top_srcdir)/m4/gst-sdl.m4 \
-	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
-	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
-	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libgcrypt.m4 \
-	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
-	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
-	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
-	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
-	$(top_srcdir)/configure.ac
+	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gst-fionread.m4 \
+	$(top_srcdir)/m4/gst-sdl.m4 $(top_srcdir)/m4/iconv.m4 \
+	$(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \
+	$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
+	$(top_srcdir)/m4/libgcrypt.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
+	$(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \
@@ -276,6 +275,8 @@
 CLUTTER_X11_LIBS = @CLUTTER_X11_LIBS@
 CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
+CUDA_CFLAGS = @CUDA_CFLAGS@
+CUDA_LIBS = @CUDA_LIBS@
 CURL_CFLAGS = @CURL_CFLAGS@
 CURL_LIBS = @CURL_LIBS@
 CXX = @CXX@
@@ -313,6 +314,8 @@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
+EGL_CFLAGS = @EGL_CFLAGS@
+EGL_LIBS = @EGL_LIBS@
 EGREP = @EGREP@
 ERROR_CFLAGS = @ERROR_CFLAGS@
 ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
@@ -321,7 +324,6 @@
 EXIF_CFLAGS = @EXIF_CFLAGS@
 EXIF_LIBS = @EXIF_LIBS@
 FAAC_LIBS = @FAAC_LIBS@
-FAAD_IS_NEAAC = @FAAD_IS_NEAAC@
 FAAD_LIBS = @FAAD_LIBS@
 FFLAGS = @FFLAGS@
 FGREP = @FGREP@
@@ -340,8 +342,9 @@
 GIO_LIBS = @GIO_LIBS@
 GIO_UNIX_CFLAGS = @GIO_UNIX_CFLAGS@
 GIO_UNIX_LIBS = @GIO_UNIX_LIBS@
+GLES2_CFLAGS = @GLES2_CFLAGS@
+GLES2_LIBS = @GLES2_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
-GLIB_COMPILE_SCHEMAS = @GLIB_COMPILE_SCHEMAS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
@@ -358,16 +361,17 @@
 GMODULE_NO_EXPORT_LIBS = @GMODULE_NO_EXPORT_LIBS@
 GMSGFMT = @GMSGFMT@
 GMSGFMT_015 = @GMSGFMT_015@
+GNUSTL_CFLAGS = @GNUSTL_CFLAGS@
+GNUSTL_LIBS = @GNUSTL_LIBS@
 GRAPHENE_CFLAGS = @GRAPHENE_CFLAGS@
 GRAPHENE_LIBS = @GRAPHENE_LIBS@
 GREP = @GREP@
-GSETTINGS_CFLAGS = @GSETTINGS_CFLAGS@
-GSETTINGS_DISABLE_SCHEMAS_COMPILE = @GSETTINGS_DISABLE_SCHEMAS_COMPILE@
-GSETTINGS_LIBS = @GSETTINGS_LIBS@
 GSM_LIBS = @GSM_LIBS@
 GSTPB_PLUGINS_DIR = @GSTPB_PLUGINS_DIR@
 GSTPB_PREFIX = @GSTPB_PREFIX@
 GST_AGE = @GST_AGE@
+GST_ALLOCATORS_CFLAGS = @GST_ALLOCATORS_CFLAGS@
+GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
 GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
 GST_API_VERSION = @GST_API_VERSION@
 GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
@@ -393,6 +397,8 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PBUTILS_CFLAGS = @GST_PBUTILS_CFLAGS@
+GST_PBUTILS_LIBS = @GST_PBUTILS_LIBS@
 GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BAD_CFLAGS = @GST_PLUGINS_BAD_CFLAGS@
@@ -418,6 +424,8 @@
 GST_PREFIX = @GST_PREFIX@
 GST_REVISION = @GST_REVISION@
 GST_TOOLS_DIR = @GST_TOOLS_DIR@
+GST_VIDEO_CFLAGS = @GST_VIDEO_CFLAGS@
+GST_VIDEO_LIBS = @GST_VIDEO_LIBS@
 GTK3_CFLAGS = @GTK3_CFLAGS@
 GTK3_GL_CFLAGS = @GTK3_GL_CFLAGS@
 GTK3_GL_LIBS = @GTK3_GL_LIBS@
@@ -519,6 +527,7 @@
 LTLIBICONV = @LTLIBICONV@
 LTLIBINTL = @LTLIBINTL@
 LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
 MANIFEST_TOOL = @MANIFEST_TOOL@
@@ -532,8 +541,6 @@
 MODPLUG_LIBS = @MODPLUG_LIBS@
 MPEG2ENC_CFLAGS = @MPEG2ENC_CFLAGS@
 MPEG2ENC_LIBS = @MPEG2ENC_LIBS@
-MPG123_CFLAGS = @MPG123_CFLAGS@
-MPG123_LIBS = @MPG123_LIBS@
 MPLEX_CFLAGS = @MPLEX_CFLAGS@
 MPLEX_LDFLAGS = @MPLEX_LDFLAGS@
 MPLEX_LIBS = @MPLEX_LIBS@
@@ -549,6 +556,8 @@
 NETTLE_LIBS = @NETTLE_LIBS@
 NM = @NM@
 NMEDIT = @NMEDIT@
+NVENCODE_CFLAGS = @NVENCODE_CFLAGS@
+NVENCODE_LIBS = @NVENCODE_LIBS@
 OBJC = @OBJC@
 OBJCDEPMODE = @OBJCDEPMODE@
 OBJCFLAGS = @OBJCFLAGS@
@@ -606,16 +615,18 @@
 PYTHON_PLATFORM = @PYTHON_PLATFORM@
 PYTHON_PREFIX = @PYTHON_PREFIX@
 PYTHON_VERSION = @PYTHON_VERSION@
+QT_ANDROID_CFLAGS = @QT_ANDROID_CFLAGS@
+QT_ANDROID_LIBS = @QT_ANDROID_LIBS@
 QT_CFLAGS = @QT_CFLAGS@
 QT_LIBS = @QT_LIBS@
+QT_MAC_CFLAGS = @QT_MAC_CFLAGS@
+QT_MAC_LIBS = @QT_MAC_LIBS@
 QT_WAYLAND_CFLAGS = @QT_WAYLAND_CFLAGS@
 QT_WAYLAND_LIBS = @QT_WAYLAND_LIBS@
 QT_X11_CFLAGS = @QT_X11_CFLAGS@
 QT_X11_LIBS = @QT_X11_LIBS@
 RANLIB = @RANLIB@
 RCC = @RCC@
-RSVG_2_36_2_CFLAGS = @RSVG_2_36_2_CFLAGS@
-RSVG_2_36_2_LIBS = @RSVG_2_36_2_LIBS@
 RSVG_CFLAGS = @RSVG_CFLAGS@
 RSVG_LIBS = @RSVG_LIBS@
 RTMP_CFLAGS = @RTMP_CFLAGS@
@@ -667,6 +678,7 @@
 VOAACENC_LIBS = @VOAACENC_LIBS@
 VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
 VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VULKAN_LIBS = @VULKAN_LIBS@
 WARNING_CFLAGS = @WARNING_CFLAGS@
 WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
 WARNING_OBJCFLAGS = @WARNING_OBJCFLAGS@
@@ -677,6 +689,7 @@
 WAYLAND_LIBS = @WAYLAND_LIBS@
 WEBP_CFLAGS = @WEBP_CFLAGS@
 WEBP_LIBS = @WEBP_LIBS@
+WGET = @WGET@
 WILDMIDI_CFLAGS = @WILDMIDI_CFLAGS@
 WILDMIDI_LIBS = @WILDMIDI_LIBS@
 WINKS_LIBS = @WINKS_LIBS@
@@ -686,6 +699,8 @@
 X11_LIBS = @X11_LIBS@
 X265_CFLAGS = @X265_CFLAGS@
 X265_LIBS = @X265_LIBS@
+XCB_CFLAGS = @XCB_CFLAGS@
+XCB_LIBS = @XCB_LIBS@
 XCOMPOSITE_CFLAGS = @XCOMPOSITE_CFLAGS@
 XCOMPOSITE_LIBS = @XCOMPOSITE_LIBS@
 XGETTEXT = @XGETTEXT@
@@ -723,7 +738,6 @@
 docdir = @docdir@
 dvidir = @dvidir@
 exec_prefix = @exec_prefix@
-gsettingsschemadir = @gsettingsschemadir@
 host = @host@
 host_alias = @host_alias@
 host_cpu = @host_cpu@
diff --git a/sys/decklink/Makefile.in b/sys/decklink/Makefile.in
index a520545..9d355fd 100644
--- a/sys/decklink/Makefile.in
+++ b/sys/decklink/Makefile.in
@@ -125,16 +125,15 @@
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
 	$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
-	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gsettings.m4 \
-	$(top_srcdir)/m4/gst-fionread.m4 $(top_srcdir)/m4/gst-sdl.m4 \
-	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
-	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
-	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libgcrypt.m4 \
-	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
-	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
-	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
-	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
-	$(top_srcdir)/configure.ac
+	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gst-fionread.m4 \
+	$(top_srcdir)/m4/gst-sdl.m4 $(top_srcdir)/m4/iconv.m4 \
+	$(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \
+	$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
+	$(top_srcdir)/m4/libgcrypt.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
+	$(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \
@@ -296,6 +295,8 @@
 CLUTTER_X11_LIBS = @CLUTTER_X11_LIBS@
 CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
+CUDA_CFLAGS = @CUDA_CFLAGS@
+CUDA_LIBS = @CUDA_LIBS@
 CURL_CFLAGS = @CURL_CFLAGS@
 CURL_LIBS = @CURL_LIBS@
 CXX = @CXX@
@@ -333,6 +334,8 @@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
+EGL_CFLAGS = @EGL_CFLAGS@
+EGL_LIBS = @EGL_LIBS@
 EGREP = @EGREP@
 ERROR_CFLAGS = @ERROR_CFLAGS@
 ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
@@ -341,7 +344,6 @@
 EXIF_CFLAGS = @EXIF_CFLAGS@
 EXIF_LIBS = @EXIF_LIBS@
 FAAC_LIBS = @FAAC_LIBS@
-FAAD_IS_NEAAC = @FAAD_IS_NEAAC@
 FAAD_LIBS = @FAAD_LIBS@
 FFLAGS = @FFLAGS@
 FGREP = @FGREP@
@@ -360,8 +362,9 @@
 GIO_LIBS = @GIO_LIBS@
 GIO_UNIX_CFLAGS = @GIO_UNIX_CFLAGS@
 GIO_UNIX_LIBS = @GIO_UNIX_LIBS@
+GLES2_CFLAGS = @GLES2_CFLAGS@
+GLES2_LIBS = @GLES2_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
-GLIB_COMPILE_SCHEMAS = @GLIB_COMPILE_SCHEMAS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
@@ -378,16 +381,17 @@
 GMODULE_NO_EXPORT_LIBS = @GMODULE_NO_EXPORT_LIBS@
 GMSGFMT = @GMSGFMT@
 GMSGFMT_015 = @GMSGFMT_015@
+GNUSTL_CFLAGS = @GNUSTL_CFLAGS@
+GNUSTL_LIBS = @GNUSTL_LIBS@
 GRAPHENE_CFLAGS = @GRAPHENE_CFLAGS@
 GRAPHENE_LIBS = @GRAPHENE_LIBS@
 GREP = @GREP@
-GSETTINGS_CFLAGS = @GSETTINGS_CFLAGS@
-GSETTINGS_DISABLE_SCHEMAS_COMPILE = @GSETTINGS_DISABLE_SCHEMAS_COMPILE@
-GSETTINGS_LIBS = @GSETTINGS_LIBS@
 GSM_LIBS = @GSM_LIBS@
 GSTPB_PLUGINS_DIR = @GSTPB_PLUGINS_DIR@
 GSTPB_PREFIX = @GSTPB_PREFIX@
 GST_AGE = @GST_AGE@
+GST_ALLOCATORS_CFLAGS = @GST_ALLOCATORS_CFLAGS@
+GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
 GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
 GST_API_VERSION = @GST_API_VERSION@
 GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
@@ -413,6 +417,8 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PBUTILS_CFLAGS = @GST_PBUTILS_CFLAGS@
+GST_PBUTILS_LIBS = @GST_PBUTILS_LIBS@
 GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BAD_CFLAGS = @GST_PLUGINS_BAD_CFLAGS@
@@ -438,6 +444,8 @@
 GST_PREFIX = @GST_PREFIX@
 GST_REVISION = @GST_REVISION@
 GST_TOOLS_DIR = @GST_TOOLS_DIR@
+GST_VIDEO_CFLAGS = @GST_VIDEO_CFLAGS@
+GST_VIDEO_LIBS = @GST_VIDEO_LIBS@
 GTK3_CFLAGS = @GTK3_CFLAGS@
 GTK3_GL_CFLAGS = @GTK3_GL_CFLAGS@
 GTK3_GL_LIBS = @GTK3_GL_LIBS@
@@ -539,6 +547,7 @@
 LTLIBICONV = @LTLIBICONV@
 LTLIBINTL = @LTLIBINTL@
 LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
 MANIFEST_TOOL = @MANIFEST_TOOL@
@@ -552,8 +561,6 @@
 MODPLUG_LIBS = @MODPLUG_LIBS@
 MPEG2ENC_CFLAGS = @MPEG2ENC_CFLAGS@
 MPEG2ENC_LIBS = @MPEG2ENC_LIBS@
-MPG123_CFLAGS = @MPG123_CFLAGS@
-MPG123_LIBS = @MPG123_LIBS@
 MPLEX_CFLAGS = @MPLEX_CFLAGS@
 MPLEX_LDFLAGS = @MPLEX_LDFLAGS@
 MPLEX_LIBS = @MPLEX_LIBS@
@@ -569,6 +576,8 @@
 NETTLE_LIBS = @NETTLE_LIBS@
 NM = @NM@
 NMEDIT = @NMEDIT@
+NVENCODE_CFLAGS = @NVENCODE_CFLAGS@
+NVENCODE_LIBS = @NVENCODE_LIBS@
 OBJC = @OBJC@
 OBJCDEPMODE = @OBJCDEPMODE@
 OBJCFLAGS = @OBJCFLAGS@
@@ -626,16 +635,18 @@
 PYTHON_PLATFORM = @PYTHON_PLATFORM@
 PYTHON_PREFIX = @PYTHON_PREFIX@
 PYTHON_VERSION = @PYTHON_VERSION@
+QT_ANDROID_CFLAGS = @QT_ANDROID_CFLAGS@
+QT_ANDROID_LIBS = @QT_ANDROID_LIBS@
 QT_CFLAGS = @QT_CFLAGS@
 QT_LIBS = @QT_LIBS@
+QT_MAC_CFLAGS = @QT_MAC_CFLAGS@
+QT_MAC_LIBS = @QT_MAC_LIBS@
 QT_WAYLAND_CFLAGS = @QT_WAYLAND_CFLAGS@
 QT_WAYLAND_LIBS = @QT_WAYLAND_LIBS@
 QT_X11_CFLAGS = @QT_X11_CFLAGS@
 QT_X11_LIBS = @QT_X11_LIBS@
 RANLIB = @RANLIB@
 RCC = @RCC@
-RSVG_2_36_2_CFLAGS = @RSVG_2_36_2_CFLAGS@
-RSVG_2_36_2_LIBS = @RSVG_2_36_2_LIBS@
 RSVG_CFLAGS = @RSVG_CFLAGS@
 RSVG_LIBS = @RSVG_LIBS@
 RTMP_CFLAGS = @RTMP_CFLAGS@
@@ -687,6 +698,7 @@
 VOAACENC_LIBS = @VOAACENC_LIBS@
 VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
 VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VULKAN_LIBS = @VULKAN_LIBS@
 WARNING_CFLAGS = @WARNING_CFLAGS@
 WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
 WARNING_OBJCFLAGS = @WARNING_OBJCFLAGS@
@@ -697,6 +709,7 @@
 WAYLAND_LIBS = @WAYLAND_LIBS@
 WEBP_CFLAGS = @WEBP_CFLAGS@
 WEBP_LIBS = @WEBP_LIBS@
+WGET = @WGET@
 WILDMIDI_CFLAGS = @WILDMIDI_CFLAGS@
 WILDMIDI_LIBS = @WILDMIDI_LIBS@
 WINKS_LIBS = @WINKS_LIBS@
@@ -706,6 +719,8 @@
 X11_LIBS = @X11_LIBS@
 X265_CFLAGS = @X265_CFLAGS@
 X265_LIBS = @X265_LIBS@
+XCB_CFLAGS = @XCB_CFLAGS@
+XCB_LIBS = @XCB_LIBS@
 XCOMPOSITE_CFLAGS = @XCOMPOSITE_CFLAGS@
 XCOMPOSITE_LIBS = @XCOMPOSITE_LIBS@
 XGETTEXT = @XGETTEXT@
@@ -743,7 +758,6 @@
 docdir = @docdir@
 dvidir = @dvidir@
 exec_prefix = @exec_prefix@
-gsettingsschemadir = @gsettingsschemadir@
 host = @host@
 host_alias = @host_alias@
 host_cpu = @host_cpu@
diff --git a/sys/decklink/gstdecklink.cpp b/sys/decklink/gstdecklink.cpp
index eb39bdb..64637f1 100644
--- a/sys/decklink/gstdecklink.cpp
+++ b/sys/decklink/gstdecklink.cpp
@@ -316,28 +316,53 @@
 }
 
 static GstStructure *
-gst_decklink_mode_get_structure (GstDecklinkModeEnum e)
+gst_decklink_mode_get_structure (GstDecklinkModeEnum e, BMDPixelFormat f)
 {
   const GstDecklinkMode *mode = &modes[e];
-
-  return gst_structure_new ("video/x-raw",
-      "format", G_TYPE_STRING, "UYVY",
+  GstStructure *s = gst_structure_new ("video/x-raw",
       "width", G_TYPE_INT, mode->width,
       "height", G_TYPE_INT, mode->height,
-      "framerate", GST_TYPE_FRACTION, mode->fps_n, mode->fps_d,
-      "interlace-mode", G_TYPE_STRING,
-      mode->interlaced ? "interleaved" : "progressive", "pixel-aspect-ratio",
-      GST_TYPE_FRACTION, mode->par_n, mode->par_d, "colorimetry", G_TYPE_STRING,
-      mode->colorimetry, "chroma-site", G_TYPE_STRING, "mpeg2", NULL);
+      "pixel-aspect-ratio", GST_TYPE_FRACTION, mode->par_n, mode->par_d,
+      "interlace-mode", G_TYPE_STRING, mode->interlaced ? "interleaved" : "progressive",
+      "framerate", GST_TYPE_FRACTION, mode->fps_n, mode->fps_d, NULL);
+
+  switch (f) {
+    case bmdFormat8BitYUV: /* '2vuy' */
+      gst_structure_set (s, "format", G_TYPE_STRING, "UYVY",
+          "colorimetry", G_TYPE_STRING, mode->colorimetry,
+          "chroma-site", G_TYPE_STRING, "mpeg2", NULL);
+      break;
+    case bmdFormat10BitYUV: /* 'v210' */
+      gst_structure_set (s, "format", G_TYPE_STRING, "v210", NULL);
+      break;
+    case bmdFormat8BitARGB: /* 'ARGB' */
+      gst_structure_set (s, "format", G_TYPE_STRING, "ARGB", NULL);
+      break;
+    case bmdFormat8BitBGRA: /* 'BGRA' */
+      gst_structure_set (s, "format", G_TYPE_STRING, "BGRA", NULL);
+      break;
+    case bmdFormat10BitRGB: /* 'r210' Big-endian RGB 10-bit per component with SMPTE video levels (64-960). Packed as 2:10:10:10 */
+    case bmdFormat12BitRGB: /* 'R12B' Big-endian RGB 12-bit per component with full range (0-4095). Packed as 12-bit per component */
+    case bmdFormat12BitRGBLE: /* 'R12L' Little-endian RGB 12-bit per component with full range (0-4095). Packed as 12-bit per component */
+    case bmdFormat10BitRGBXLE: /* 'R10l' Little-endian 10-bit RGB with SMPTE video levels (64-940) */
+    case bmdFormat10BitRGBX: /* 'R10b' Big-endian 10-bit RGB with SMPTE video levels (64-940) */
+    default:
+      GST_WARNING ("format not supported %d", f);
+      gst_structure_free (s);
+      s = NULL;
+      break;
+  }
+
+  return s;
 }
 
 GstCaps *
-gst_decklink_mode_get_caps (GstDecklinkModeEnum e)
+gst_decklink_mode_get_caps (GstDecklinkModeEnum e, BMDPixelFormat f)
 {
   GstCaps *caps;
 
   caps = gst_caps_new_empty ();
-  gst_caps_append_structure (caps, gst_decklink_mode_get_structure (e));
+  gst_caps_append_structure (caps, gst_decklink_mode_get_structure (e, f));
 
   return caps;
 }
@@ -351,13 +376,33 @@
 
   caps = gst_caps_new_empty ();
   for (i = 1; i < (int) G_N_ELEMENTS (modes); i++) {
-    s = gst_decklink_mode_get_structure ((GstDecklinkModeEnum) i);
+    s = gst_decklink_mode_get_structure ((GstDecklinkModeEnum) i, bmdFormat8BitYUV);
+    gst_caps_append_structure (caps, s);
+    s = gst_decklink_mode_get_structure ((GstDecklinkModeEnum) i, bmdFormat8BitARGB);
     gst_caps_append_structure (caps, s);
   }
 
   return caps;
 }
 
+const GstDecklinkMode *
+gst_decklink_find_mode_for_caps (GstCaps * caps)
+{
+  int i;
+  GstCaps *mode_caps;
+
+  for (i = 1; i < (int) G_N_ELEMENTS (modes); i++) {
+    mode_caps = gst_decklink_mode_get_caps ((GstDecklinkModeEnum) i, bmdFormat8BitYUV);
+    if (gst_caps_can_intersect (caps, mode_caps)) {
+      gst_caps_unref (mode_caps);
+      return gst_decklink_get_mode ((GstDecklinkModeEnum) i);
+    }
+    gst_caps_unref (mode_caps);
+  }
+
+  return NULL;
+}
+
 #define GST_TYPE_DECKLINK_CLOCK \
   (gst_decklink_clock_get_type())
 #define GST_DECKLINK_CLOCK(obj) \
@@ -452,19 +497,25 @@
 
   virtual HRESULT STDMETHODCALLTYPE
       VideoInputFormatChanged (BMDVideoInputFormatChangedEvents,
-      IDeckLinkDisplayMode * mode, BMDDetectedVideoInputFormatFlags)
+      IDeckLinkDisplayMode * mode, BMDDetectedVideoInputFormatFlags formatFlags)
   {
+    BMDPixelFormat pixelFormat = bmdFormat8BitYUV;
+
     GST_INFO ("Video input format changed");
 
+    if (formatFlags & bmdDetectedVideoInputRGB444)
+      pixelFormat = bmdFormat8BitARGB;
+
     g_mutex_lock (&m_input->lock);
     m_input->input->PauseStreams ();
     m_input->input->EnableVideoInput (mode->GetDisplayMode (),
-        bmdFormat8BitYUV, bmdVideoInputEnableFormatDetection);
+        pixelFormat, bmdVideoInputEnableFormatDetection);
     m_input->input->FlushStreams ();
     m_input->input->StartStreams ();
     m_input->mode =
         gst_decklink_get_mode (gst_decklink_get_mode_enum_from_bmd
         (mode->GetDisplayMode ()));
+    m_input->format = pixelFormat;
     g_mutex_unlock (&m_input->lock);
 
     return S_OK;
diff --git a/sys/decklink/gstdecklink.h b/sys/decklink/gstdecklink.h
index 353769f..6c32fee 100644
--- a/sys/decklink/gstdecklink.h
+++ b/sys/decklink/gstdecklink.h
@@ -126,7 +126,7 @@
 const GstDecklinkMode * gst_decklink_get_mode (GstDecklinkModeEnum e);
 const GstDecklinkModeEnum gst_decklink_get_mode_enum_from_bmd (BMDDisplayMode mode);
 const BMDVideoConnection gst_decklink_get_connection (GstDecklinkConnectionEnum e);
-GstCaps * gst_decklink_mode_get_caps (GstDecklinkModeEnum e);
+GstCaps * gst_decklink_mode_get_caps (GstDecklinkModeEnum e, BMDPixelFormat f);
 GstCaps * gst_decklink_mode_get_template_caps (void);
 
 typedef struct _GstDecklinkOutput GstDecklinkOutput;
@@ -172,6 +172,7 @@
   void (*got_video_frame) (GstElement *videosrc, IDeckLinkVideoInputFrame * frame, GstDecklinkModeEnum mode, GstClockTime capture_time, GstClockTime capture_duration);
   /* Configured mode or NULL */
   const GstDecklinkMode *mode;
+  BMDPixelFormat format;
 
   /* Set by the audio source */
   void (*got_audio_packet) (GstElement *videosrc, IDeckLinkAudioInputPacket * packet, GstClockTime capture_time);
@@ -192,4 +193,6 @@
 GstDecklinkInput *  gst_decklink_acquire_nth_input (gint n, GstElement * src, gboolean is_audio);
 void                gst_decklink_release_nth_input (gint n, GstElement * src, gboolean is_audio);
 
+const GstDecklinkMode * gst_decklink_find_mode_for_caps (GstCaps * caps);
+
 #endif
diff --git a/sys/decklink/gstdecklinkaudiosrc.cpp b/sys/decklink/gstdecklinkaudiosrc.cpp
index a9284d1..9a701ee 100644
--- a/sys/decklink/gstdecklinkaudiosrc.cpp
+++ b/sys/decklink/gstdecklinkaudiosrc.cpp
@@ -556,9 +556,10 @@
           self->next_offset, start_offset);
     GST_BUFFER_FLAG_SET (*buffer, GST_BUFFER_FLAG_DISCONT);
     self->next_offset = end_offset;
+    // Got a discont and adjusted, reset the discont_time marker.
+    self->discont_time = GST_CLOCK_TIME_NONE;
   } else {
     // No discont, just keep counting
-    self->discont_time = GST_CLOCK_TIME_NONE;
     timestamp =
         gst_util_uint64_scale (self->next_offset, GST_SECOND, self->info.rate);
     self->next_offset += sample_count;
@@ -688,8 +689,7 @@
 {
   GST_DEBUG_OBJECT (self, "Stopping");
 
-  g_queue_foreach (&self->current_packets, (GFunc) capture_packet_free,
-      NULL);
+  g_queue_foreach (&self->current_packets, (GFunc) capture_packet_free, NULL);
   g_queue_clear (&self->current_packets);
 
   if (self->input && self->input->audio_enabled) {
diff --git a/sys/decklink/gstdecklinkvideosink.cpp b/sys/decklink/gstdecklinkvideosink.cpp
index c50d09b..eebeff3 100644
--- a/sys/decklink/gstdecklinkvideosink.cpp
+++ b/sys/decklink/gstdecklinkvideosink.cpp
@@ -292,8 +292,17 @@
   self->output->output->SetScheduledFrameCompletionCallback (new
       GStreamerVideoOutputCallback (self));
 
-  mode = gst_decklink_get_mode (self->mode);
-  g_assert (mode != NULL);
+  if (self->mode == GST_DECKLINK_MODE_AUTO) {
+    mode = gst_decklink_find_mode_for_caps (caps);
+    if (mode == NULL) {
+      GST_WARNING_OBJECT (self,
+          "Failed to find compatible mode for caps  %" GST_PTR_FORMAT, caps);
+      return FALSE;
+    }
+  } else {
+    mode = gst_decklink_get_mode (self->mode);
+    g_assert (mode != NULL);
+  };
 
   ret = self->output->output->EnableVideoOutput (mode->mode,
       bmdVideoOutputFlagDefault);
@@ -318,7 +327,10 @@
   GstDecklinkVideoSink *self = GST_DECKLINK_VIDEO_SINK_CAST (bsink);
   GstCaps *mode_caps, *caps;
 
-  mode_caps = gst_decklink_mode_get_caps (self->mode);
+  if (self->mode == GST_DECKLINK_MODE_AUTO)
+    mode_caps = gst_decklink_mode_get_template_caps ();
+  else
+    mode_caps = gst_decklink_mode_get_caps (self->mode, bmdFormat8BitYUV);
   mode_caps = gst_caps_make_writable (mode_caps);
   /* For output we support any framerate and only really care about timestamps */
   gst_caps_map_in_place (mode_caps, reset_framerate, NULL);
diff --git a/sys/decklink/gstdecklinkvideosrc.cpp b/sys/decklink/gstdecklinkvideosrc.cpp
index 915393e..2b304f9 100644
--- a/sys/decklink/gstdecklinkvideosrc.cpp
+++ b/sys/decklink/gstdecklinkvideosrc.cpp
@@ -47,6 +47,7 @@
   IDeckLinkVideoInputFrame *frame;
   GstClockTime capture_time, capture_duration;
   GstDecklinkModeEnum mode;
+  BMDPixelFormat format;
 } CaptureFrame;
 
 static void
@@ -178,6 +179,7 @@
 {
   self->mode = DEFAULT_MODE;
   self->caps_mode = GST_DECKLINK_MODE_AUTO;
+  self->caps_format = bmdFormat8BitYUV;
   self->connection = DEFAULT_CONNECTION;
   self->device_number = 0;
   self->buffer_size = DEFAULT_BUFFER_SIZE;
@@ -352,9 +354,9 @@
 
   g_mutex_lock (&self->lock);
   if (self->caps_mode != GST_DECKLINK_MODE_AUTO)
-    mode_caps = gst_decklink_mode_get_caps (self->caps_mode);
+    mode_caps = gst_decklink_mode_get_caps (self->caps_mode, self->caps_format);
   else
-    mode_caps = gst_decklink_mode_get_caps (self->mode);
+    mode_caps = gst_decklink_mode_get_caps (self->mode, self->caps_format);
   g_mutex_unlock (&self->lock);
 
   if (filter) {
@@ -481,6 +483,7 @@
     f->capture_time = capture_time;
     f->capture_duration = capture_duration;
     f->mode = mode;
+    f->format = frame->GetPixelFormat ();
     frame->AddRef ();
     g_queue_push_tail (&self->current_frames, f);
     g_cond_signal (&self->cond);
@@ -515,12 +518,14 @@
   }
 
   g_mutex_lock (&self->lock);
-  if (self->mode == GST_DECKLINK_MODE_AUTO && self->caps_mode != f->mode) {
-    GST_DEBUG_OBJECT (self, "Mode changed from %d to %d", self->caps_mode,
-        f->mode);
+  if (self->mode == GST_DECKLINK_MODE_AUTO &&
+      (self->caps_mode != f->mode || self->caps_format != f->format)) {
+    GST_DEBUG_OBJECT (self, "Mode/Format changed from %d/%d to %d/%d",
+        self->caps_mode, self->caps_format, f->mode, f->format);
     self->caps_mode = f->mode;
+    self->caps_format = f->format;
     g_mutex_unlock (&self->lock);
-    caps = gst_decklink_mode_get_caps (f->mode);
+    caps = gst_decklink_mode_get_caps (f->mode, f->format);
     gst_video_info_from_caps (&self->info, caps);
     gst_base_src_set_caps (GST_BASE_SRC_CAST (bsrc), caps);
     gst_element_post_message (GST_ELEMENT_CAST (self),
diff --git a/sys/decklink/gstdecklinkvideosrc.h b/sys/decklink/gstdecklinkvideosrc.h
index 6cb5bb9..b83495f 100644
--- a/sys/decklink/gstdecklinkvideosrc.h
+++ b/sys/decklink/gstdecklinkvideosrc.h
@@ -52,6 +52,7 @@
 
   GstDecklinkModeEnum mode;
   GstDecklinkModeEnum caps_mode;
+  BMDPixelFormat caps_format;
   GstDecklinkConnectionEnum connection;
   gint device_number;
 
diff --git a/sys/directsound/Makefile.in b/sys/directsound/Makefile.in
index 48ca630..7bfc30d 100644
--- a/sys/directsound/Makefile.in
+++ b/sys/directsound/Makefile.in
@@ -116,16 +116,15 @@
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
 	$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
-	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gsettings.m4 \
-	$(top_srcdir)/m4/gst-fionread.m4 $(top_srcdir)/m4/gst-sdl.m4 \
-	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
-	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
-	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libgcrypt.m4 \
-	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
-	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
-	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
-	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
-	$(top_srcdir)/configure.ac
+	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gst-fionread.m4 \
+	$(top_srcdir)/m4/gst-sdl.m4 $(top_srcdir)/m4/iconv.m4 \
+	$(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \
+	$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
+	$(top_srcdir)/m4/libgcrypt.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
+	$(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \
@@ -278,6 +277,8 @@
 CLUTTER_X11_LIBS = @CLUTTER_X11_LIBS@
 CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
+CUDA_CFLAGS = @CUDA_CFLAGS@
+CUDA_LIBS = @CUDA_LIBS@
 CURL_CFLAGS = @CURL_CFLAGS@
 CURL_LIBS = @CURL_LIBS@
 CXX = @CXX@
@@ -315,6 +316,8 @@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
+EGL_CFLAGS = @EGL_CFLAGS@
+EGL_LIBS = @EGL_LIBS@
 EGREP = @EGREP@
 ERROR_CFLAGS = @ERROR_CFLAGS@
 ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
@@ -323,7 +326,6 @@
 EXIF_CFLAGS = @EXIF_CFLAGS@
 EXIF_LIBS = @EXIF_LIBS@
 FAAC_LIBS = @FAAC_LIBS@
-FAAD_IS_NEAAC = @FAAD_IS_NEAAC@
 FAAD_LIBS = @FAAD_LIBS@
 FFLAGS = @FFLAGS@
 FGREP = @FGREP@
@@ -342,8 +344,9 @@
 GIO_LIBS = @GIO_LIBS@
 GIO_UNIX_CFLAGS = @GIO_UNIX_CFLAGS@
 GIO_UNIX_LIBS = @GIO_UNIX_LIBS@
+GLES2_CFLAGS = @GLES2_CFLAGS@
+GLES2_LIBS = @GLES2_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
-GLIB_COMPILE_SCHEMAS = @GLIB_COMPILE_SCHEMAS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
@@ -360,16 +363,17 @@
 GMODULE_NO_EXPORT_LIBS = @GMODULE_NO_EXPORT_LIBS@
 GMSGFMT = @GMSGFMT@
 GMSGFMT_015 = @GMSGFMT_015@
+GNUSTL_CFLAGS = @GNUSTL_CFLAGS@
+GNUSTL_LIBS = @GNUSTL_LIBS@
 GRAPHENE_CFLAGS = @GRAPHENE_CFLAGS@
 GRAPHENE_LIBS = @GRAPHENE_LIBS@
 GREP = @GREP@
-GSETTINGS_CFLAGS = @GSETTINGS_CFLAGS@
-GSETTINGS_DISABLE_SCHEMAS_COMPILE = @GSETTINGS_DISABLE_SCHEMAS_COMPILE@
-GSETTINGS_LIBS = @GSETTINGS_LIBS@
 GSM_LIBS = @GSM_LIBS@
 GSTPB_PLUGINS_DIR = @GSTPB_PLUGINS_DIR@
 GSTPB_PREFIX = @GSTPB_PREFIX@
 GST_AGE = @GST_AGE@
+GST_ALLOCATORS_CFLAGS = @GST_ALLOCATORS_CFLAGS@
+GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
 GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
 GST_API_VERSION = @GST_API_VERSION@
 GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
@@ -395,6 +399,8 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PBUTILS_CFLAGS = @GST_PBUTILS_CFLAGS@
+GST_PBUTILS_LIBS = @GST_PBUTILS_LIBS@
 GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BAD_CFLAGS = @GST_PLUGINS_BAD_CFLAGS@
@@ -420,6 +426,8 @@
 GST_PREFIX = @GST_PREFIX@
 GST_REVISION = @GST_REVISION@
 GST_TOOLS_DIR = @GST_TOOLS_DIR@
+GST_VIDEO_CFLAGS = @GST_VIDEO_CFLAGS@
+GST_VIDEO_LIBS = @GST_VIDEO_LIBS@
 GTK3_CFLAGS = @GTK3_CFLAGS@
 GTK3_GL_CFLAGS = @GTK3_GL_CFLAGS@
 GTK3_GL_LIBS = @GTK3_GL_LIBS@
@@ -521,6 +529,7 @@
 LTLIBICONV = @LTLIBICONV@
 LTLIBINTL = @LTLIBINTL@
 LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
 MANIFEST_TOOL = @MANIFEST_TOOL@
@@ -534,8 +543,6 @@
 MODPLUG_LIBS = @MODPLUG_LIBS@
 MPEG2ENC_CFLAGS = @MPEG2ENC_CFLAGS@
 MPEG2ENC_LIBS = @MPEG2ENC_LIBS@
-MPG123_CFLAGS = @MPG123_CFLAGS@
-MPG123_LIBS = @MPG123_LIBS@
 MPLEX_CFLAGS = @MPLEX_CFLAGS@
 MPLEX_LDFLAGS = @MPLEX_LDFLAGS@
 MPLEX_LIBS = @MPLEX_LIBS@
@@ -551,6 +558,8 @@
 NETTLE_LIBS = @NETTLE_LIBS@
 NM = @NM@
 NMEDIT = @NMEDIT@
+NVENCODE_CFLAGS = @NVENCODE_CFLAGS@
+NVENCODE_LIBS = @NVENCODE_LIBS@
 OBJC = @OBJC@
 OBJCDEPMODE = @OBJCDEPMODE@
 OBJCFLAGS = @OBJCFLAGS@
@@ -608,16 +617,18 @@
 PYTHON_PLATFORM = @PYTHON_PLATFORM@
 PYTHON_PREFIX = @PYTHON_PREFIX@
 PYTHON_VERSION = @PYTHON_VERSION@
+QT_ANDROID_CFLAGS = @QT_ANDROID_CFLAGS@
+QT_ANDROID_LIBS = @QT_ANDROID_LIBS@
 QT_CFLAGS = @QT_CFLAGS@
 QT_LIBS = @QT_LIBS@
+QT_MAC_CFLAGS = @QT_MAC_CFLAGS@
+QT_MAC_LIBS = @QT_MAC_LIBS@
 QT_WAYLAND_CFLAGS = @QT_WAYLAND_CFLAGS@
 QT_WAYLAND_LIBS = @QT_WAYLAND_LIBS@
 QT_X11_CFLAGS = @QT_X11_CFLAGS@
 QT_X11_LIBS = @QT_X11_LIBS@
 RANLIB = @RANLIB@
 RCC = @RCC@
-RSVG_2_36_2_CFLAGS = @RSVG_2_36_2_CFLAGS@
-RSVG_2_36_2_LIBS = @RSVG_2_36_2_LIBS@
 RSVG_CFLAGS = @RSVG_CFLAGS@
 RSVG_LIBS = @RSVG_LIBS@
 RTMP_CFLAGS = @RTMP_CFLAGS@
@@ -669,6 +680,7 @@
 VOAACENC_LIBS = @VOAACENC_LIBS@
 VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
 VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VULKAN_LIBS = @VULKAN_LIBS@
 WARNING_CFLAGS = @WARNING_CFLAGS@
 WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
 WARNING_OBJCFLAGS = @WARNING_OBJCFLAGS@
@@ -679,6 +691,7 @@
 WAYLAND_LIBS = @WAYLAND_LIBS@
 WEBP_CFLAGS = @WEBP_CFLAGS@
 WEBP_LIBS = @WEBP_LIBS@
+WGET = @WGET@
 WILDMIDI_CFLAGS = @WILDMIDI_CFLAGS@
 WILDMIDI_LIBS = @WILDMIDI_LIBS@
 WINKS_LIBS = @WINKS_LIBS@
@@ -688,6 +701,8 @@
 X11_LIBS = @X11_LIBS@
 X265_CFLAGS = @X265_CFLAGS@
 X265_LIBS = @X265_LIBS@
+XCB_CFLAGS = @XCB_CFLAGS@
+XCB_LIBS = @XCB_LIBS@
 XCOMPOSITE_CFLAGS = @XCOMPOSITE_CFLAGS@
 XCOMPOSITE_LIBS = @XCOMPOSITE_LIBS@
 XGETTEXT = @XGETTEXT@
@@ -725,7 +740,6 @@
 docdir = @docdir@
 dvidir = @dvidir@
 exec_prefix = @exec_prefix@
-gsettingsschemadir = @gsettingsschemadir@
 host = @host@
 host_alias = @host_alias@
 host_cpu = @host_cpu@
diff --git a/sys/directsound/gstdirectsoundsrc.c b/sys/directsound/gstdirectsoundsrc.c
index 3b01f06..b88e68e 100644
--- a/sys/directsound/gstdirectsoundsrc.c
+++ b/sys/directsound/gstdirectsoundsrc.c
@@ -45,7 +45,7 @@
  */
 
 /*
-  TODO: add device selection and check rate etc.
+  TODO: add mixer device init for selection by device-guid
 */
 
 /**
@@ -56,7 +56,7 @@
  * <refsect2>
  * <title>Example pipelines</title>
  * |[
- * gst-launch -v directsoundsrc ! audioconvert ! vorbisenc ! oggmux ! filesink location=dsound.ogg
+ * gst-launch-1.0 -v directsoundsrc ! audioconvert ! vorbisenc ! oggmux ! filesink location=dsound.ogg
  * ]| Record from DirectSound and encode to Ogg/Vorbis.
  * </refsect2>
  */
@@ -87,6 +87,7 @@
 {
   PROP_0,
   PROP_DEVICE_NAME,
+  PROP_DEVICE,
   PROP_VOLUME,
   PROP_MUTE
 };
@@ -130,6 +131,11 @@
 static void gst_directsound_src_set_mute (GstDirectSoundSrc * dsoundsrc,
     gboolean mute);
 
+static const gchar *gst_directsound_src_get_device (GstDirectSoundSrc *
+    dsoundsrc);
+static void gst_directsound_src_set_device (GstDirectSoundSrc * dsoundsrc,
+    const gchar * device_id);
+
 static GstStaticPadTemplate directsound_src_src_factory =
 GST_STATIC_PAD_TEMPLATE ("src",
     GST_PAD_SRC,
@@ -158,6 +164,9 @@
   g_mutex_clear (&dsoundsrc->dsound_lock);
 
   g_free (dsoundsrc->device_name);
+
+  g_free (dsoundsrc->device_id);
+
   g_free (dsoundsrc->device_guid);
 
   G_OBJECT_CLASS (parent_class)->finalize (object);
@@ -212,6 +221,12 @@
       g_param_spec_string ("device-name", "Device name",
           "Human-readable name of the sound device", NULL, G_PARAM_READWRITE));
 
+  g_object_class_install_property (gobject_class,
+      PROP_DEVICE,
+      g_param_spec_string ("device", "Device",
+          "DirectSound playback device as a GUID string (volume and mute will not work!)",
+          NULL, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+
   g_object_class_install_property
       (gobject_class, PROP_VOLUME,
       g_param_spec_double ("volume", "Volume",
@@ -251,7 +266,6 @@
       if (g_value_get_string (value)) {
         src->device_name = g_strdup (g_value_get_string (value));
       }
-
       break;
     case PROP_VOLUME:
       gst_directsound_src_set_volume (src, g_value_get_double (value));
@@ -259,6 +273,9 @@
     case PROP_MUTE:
       gst_directsound_src_set_mute (src, g_value_get_boolean (value));
       break;
+    case PROP_DEVICE:
+      gst_directsound_src_set_device (src, g_value_get_string (value));
+      break;
     default:
       G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
       break;
@@ -277,6 +294,9 @@
     case PROP_DEVICE_NAME:
       g_value_set_string (value, src->device_name);
       break;
+    case PROP_DEVICE:
+      g_value_set_string (value, gst_directsound_src_get_device (src));
+      break;
     case PROP_VOLUME:
       g_value_set_double (value, gst_directsound_src_get_volume (src));
       break;
@@ -301,6 +321,7 @@
   GST_DEBUG_OBJECT (src, "initializing directsoundsrc");
   g_mutex_init (&src->dsound_lock);
   src->device_guid = NULL;
+  src->device_id = NULL;
   src->device_name = NULL;
   src->mixer = NULL;
   src->control_id_mute = -1;
@@ -335,6 +356,28 @@
   return TRUE;
 }
 
+static LPGUID
+string_to_guid (const gchar * str)
+{
+  HRESULT ret;
+  gunichar2 *wstr;
+  LPGUID out;
+
+  wstr = g_utf8_to_utf16 (str, -1, NULL, NULL, NULL);
+  if (!wstr)
+    return NULL;
+
+  out = g_new (GUID, 1);
+  ret = CLSIDFromString ((LPOLESTR) wstr, out);
+  g_free (wstr);
+  if (ret != NOERROR) {
+    g_free (out);
+    return NULL;
+  }
+
+  return out;
+}
+
 static gboolean
 gst_directsound_src_open (GstAudioSrc * asrc)
 {
@@ -361,19 +404,37 @@
     goto capture_function;
   }
 
-  hRes = DirectSoundCaptureEnumerate ((LPDSENUMCALLBACK)
-      gst_directsound_enum_callback, (VOID *) dsoundsrc);
-  if (FAILED (hRes)) {
-    goto capture_enumerate;
-  }
+  if (dsoundsrc->device_id) {
+    GST_DEBUG_OBJECT (asrc, "device id set to: %s ", dsoundsrc->device_id);
+    dsoundsrc->device_guid = string_to_guid (dsoundsrc->device_id);
+    if (dsoundsrc->device_guid == NULL) {
+      GST_ELEMENT_ERROR (dsoundsrc, RESOURCE, OPEN_READ,
+          ("gst_directsound_src_open: device set, but guid not found: %s",
+              dsoundsrc->device_id), (NULL));
+      g_free (dsoundsrc->device_guid);
+      return FALSE;
+    }
+  } else {
 
+    hRes = DirectSoundCaptureEnumerate ((LPDSENUMCALLBACK)
+        gst_directsound_enum_callback, (VOID *) dsoundsrc);
+
+    if (FAILED (hRes)) {
+      goto capture_enumerate;
+    }
+  }
   /* Create capture object */
   hRes = pDSoundCaptureCreate (dsoundsrc->device_guid, &dsoundsrc->pDSC, NULL);
+
+
   if (FAILED (hRes)) {
     goto capture_object;
   }
+  // mixer is only supported when device-id is not set
+  if (!dsoundsrc->device_id) {
+    gst_directsound_src_mixer_init (dsoundsrc);
+  }
 
-  gst_directsound_src_mixer_init (dsoundsrc);
   return TRUE;
 
 capture_function:
@@ -936,3 +997,17 @@
   else
     dsoundsrc->mute = mute;
 }
+
+static const gchar *
+gst_directsound_src_get_device (GstDirectSoundSrc * dsoundsrc)
+{
+  return dsoundsrc->device_id;
+}
+
+static void
+gst_directsound_src_set_device (GstDirectSoundSrc * dsoundsrc,
+    const gchar * device_id)
+{
+  g_free (dsoundsrc->device_id);
+  dsoundsrc->device_id = g_strdup (device_id);
+}
diff --git a/sys/directsound/gstdirectsoundsrc.h b/sys/directsound/gstdirectsoundsrc.h
index a2ac6ff..9aa225f 100644
--- a/sys/directsound/gstdirectsoundsrc.h
+++ b/sys/directsound/gstdirectsoundsrc.h
@@ -1,97 +1,97 @@
-/*

- * GStreamer

- * Copyright 2005 Thomas Vander Stichele <thomas@apestaart.org>

- * Copyright 2005 Ronald S. Bultje <rbultje@ronald.bitfreak.net>

- * Copyright 2005 Sébastien Moutte <sebastien@moutte.net>

- * Copyright 2006 Joni Valtanen <joni.valtanen@movial.fi>

- * 

- * Permission is hereby granted, free of charge, to any person obtaining a

- * copy of this software and associated documentation files (the "Software"),

- * to deal in the Software without restriction, including without limitation

- * the rights to use, copy, modify, merge, publish, distribute, sublicense,

- * and/or sell copies of the Software, and to permit persons to whom the

- * Software is furnished to do so, subject to the following conditions:

- *

- * The above copyright notice and this permission notice shall be included in

- * all copies or substantial portions of the Software.

- *

- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR

- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,

- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE

- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER

- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING

- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER

- * DEALINGS IN THE SOFTWARE.

- *

- * Alternatively, the contents of this file may be used under the

- * GNU Lesser General Public License Version 2.1 (the "LGPL"), in

- * which case the following provisions apply instead of the ones

- * mentioned above:

- *

- * This library is free software; you can redistribute it and/or

- * modify it under the terms of the GNU Library General Public

- * License as published by the Free Software Foundation; either

- * version 2 of the License, or (at your option) any later version.

- *

- * This library is distributed in the hope that it will be useful,

- * but WITHOUT ANY WARRANTY; without even the implied warranty of

- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU

- * Library General Public License for more details.

- *

- * You should have received a copy of the GNU Library General Public

- * License along with this library; if not, write to the

- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,

- * Boston, MA 02110-1301, USA.

- */

-

-#ifndef __GST_DIRECTSOUNDSRC_H__

-#define __GST_DIRECTSOUNDSRC_H__

-

-#include <gst/gst.h>

-#include <gst/audio/audio.h>

-#include <gst/audio/gstaudiosrc.h>

-#include <windows.h>

-#include <dsound.h>

+/*
+ * GStreamer
+ * Copyright 2005 Thomas Vander Stichele <thomas@apestaart.org>
+ * Copyright 2005 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+ * Copyright 2005 Sébastien Moutte <sebastien@moutte.net>
+ * Copyright 2006 Joni Valtanen <joni.valtanen@movial.fi>
+ * 
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+ * DEALINGS IN THE SOFTWARE.
+ *
+ * Alternatively, the contents of this file may be used under the
+ * GNU Lesser General Public License Version 2.1 (the "LGPL"), in
+ * which case the following provisions apply instead of the ones
+ * mentioned above:
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifndef __GST_DIRECTSOUNDSRC_H__
+#define __GST_DIRECTSOUNDSRC_H__
+
+#include <gst/gst.h>
+#include <gst/audio/audio.h>
+#include <gst/audio/gstaudiosrc.h>
+#include <windows.h>
+#include <dsound.h>
 #include <mmsystem.h>
-

-/* add here some headers if needed */

-

-

-G_BEGIN_DECLS

-

-/* #defines don't like whitespacey bits */

-#define GST_TYPE_DIRECTSOUND_SRC (gst_directsound_src_get_type())

-#define GST_DIRECTSOUND_SRC(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_DIRECTSOUND_SRC,GstDirectSoundSrc))

-#define GST_DIRECTSOUND_SRC_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_DIRECTSOUND_SRC,GstDirectSoundSrcClass))

-#define GST_IS_DIRECTSOUND_SRC(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_DIRECTSOUND_SRC))

-#define GST_IS_DIRECTSOUND_SRC_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_DIRECTSOUND_SRC))

-

-typedef struct _GstDirectSoundSrc      GstDirectSoundSrc;

-typedef struct _GstDirectSoundSrcClass GstDirectSoundSrcClass;

-

-#define GST_DSOUND_LOCK(obj)	(g_mutex_lock (&obj->dsound_lock))

-#define GST_DSOUND_UNLOCK(obj)	(g_mutex_unlock (&obj->dsound_lock))

-

-struct _GstDirectSoundSrc

-{

-

-  GstAudioSrc src;

-

-  HINSTANCE DSoundDLL; /* DLL instance */

-  LPDIRECTSOUNDCAPTURE pDSC; /* DirectSoundCapture*/

-  LPDIRECTSOUNDCAPTUREBUFFER pDSBSecondary;  /*Secondaty capturebuffer*/

-  DWORD current_circular_offset;

-

-  HANDLE rghEvent;

-  DWORD notifysize;

-

-  guint buffer_size;

-  guint latency_size;

-  guint bytes_per_sample;

-

-  guint buffer_time;

-  guint latency_time;

-

+
+/* add here some headers if needed */
+
+
+G_BEGIN_DECLS
+
+/* #defines don't like whitespacey bits */
+#define GST_TYPE_DIRECTSOUND_SRC (gst_directsound_src_get_type())
+#define GST_DIRECTSOUND_SRC(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_DIRECTSOUND_SRC,GstDirectSoundSrc))
+#define GST_DIRECTSOUND_SRC_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_DIRECTSOUND_SRC,GstDirectSoundSrcClass))
+#define GST_IS_DIRECTSOUND_SRC(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_DIRECTSOUND_SRC))
+#define GST_IS_DIRECTSOUND_SRC_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_DIRECTSOUND_SRC))
+
+typedef struct _GstDirectSoundSrc      GstDirectSoundSrc;
+typedef struct _GstDirectSoundSrcClass GstDirectSoundSrcClass;
+
+#define GST_DSOUND_LOCK(obj)	(g_mutex_lock (&obj->dsound_lock))
+#define GST_DSOUND_UNLOCK(obj)	(g_mutex_unlock (&obj->dsound_lock))
+
+struct _GstDirectSoundSrc
+{
+
+  GstAudioSrc src;
+
+  HINSTANCE DSoundDLL; /* DLL instance */
+  LPDIRECTSOUNDCAPTURE pDSC; /* DirectSoundCapture*/
+  LPDIRECTSOUNDCAPTUREBUFFER pDSBSecondary;  /*Secondaty capturebuffer*/
+  DWORD current_circular_offset;
+
+  HANDLE rghEvent;
+  DWORD notifysize;
+
+  guint buffer_size;
+  guint latency_size;
+  guint bytes_per_sample;
+
+  guint buffer_time;
+  guint latency_time;
+
   HMIXER mixer;
   DWORD mixerline_cchannels;
   gint control_id_volume;
@@ -101,21 +101,23 @@
 
   glong volume;
   gboolean mute;
-

-  GUID *device_guid;

-  char *device_name;

-

-  GMutex dsound_lock;

-

-};

-

-struct _GstDirectSoundSrcClass 

-{

-  GstAudioSrcClass parent_class;

-};

-

-GType gst_directsound_src_get_type (void);

-

-G_END_DECLS

-

-#endif /* __GST_DIRECTSOUNDSRC_H__ */

+
+  GUID *device_guid;
+
+  char *device_name;
+  char *device_id;
+
+  GMutex dsound_lock;
+
+};
+
+struct _GstDirectSoundSrcClass 
+{
+  GstAudioSrcClass parent_class;
+};
+
+GType gst_directsound_src_get_type (void);
+
+G_END_DECLS
+
+#endif /* __GST_DIRECTSOUNDSRC_H__ */
diff --git a/sys/dshowdecwrapper/Makefile.in b/sys/dshowdecwrapper/Makefile.in
index 6fc8b9c..8c930eb 100644
--- a/sys/dshowdecwrapper/Makefile.in
+++ b/sys/dshowdecwrapper/Makefile.in
@@ -116,16 +116,15 @@
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
 	$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
-	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gsettings.m4 \
-	$(top_srcdir)/m4/gst-fionread.m4 $(top_srcdir)/m4/gst-sdl.m4 \
-	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
-	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
-	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libgcrypt.m4 \
-	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
-	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
-	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
-	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
-	$(top_srcdir)/configure.ac
+	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gst-fionread.m4 \
+	$(top_srcdir)/m4/gst-sdl.m4 $(top_srcdir)/m4/iconv.m4 \
+	$(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \
+	$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
+	$(top_srcdir)/m4/libgcrypt.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
+	$(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \
@@ -280,6 +279,8 @@
 CLUTTER_X11_LIBS = @CLUTTER_X11_LIBS@
 CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
+CUDA_CFLAGS = @CUDA_CFLAGS@
+CUDA_LIBS = @CUDA_LIBS@
 CURL_CFLAGS = @CURL_CFLAGS@
 CURL_LIBS = @CURL_LIBS@
 CXX = @CXX@
@@ -317,6 +318,8 @@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
+EGL_CFLAGS = @EGL_CFLAGS@
+EGL_LIBS = @EGL_LIBS@
 EGREP = @EGREP@
 ERROR_CFLAGS = @ERROR_CFLAGS@
 ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
@@ -325,7 +328,6 @@
 EXIF_CFLAGS = @EXIF_CFLAGS@
 EXIF_LIBS = @EXIF_LIBS@
 FAAC_LIBS = @FAAC_LIBS@
-FAAD_IS_NEAAC = @FAAD_IS_NEAAC@
 FAAD_LIBS = @FAAD_LIBS@
 FFLAGS = @FFLAGS@
 FGREP = @FGREP@
@@ -344,8 +346,9 @@
 GIO_LIBS = @GIO_LIBS@
 GIO_UNIX_CFLAGS = @GIO_UNIX_CFLAGS@
 GIO_UNIX_LIBS = @GIO_UNIX_LIBS@
+GLES2_CFLAGS = @GLES2_CFLAGS@
+GLES2_LIBS = @GLES2_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
-GLIB_COMPILE_SCHEMAS = @GLIB_COMPILE_SCHEMAS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
@@ -362,16 +365,17 @@
 GMODULE_NO_EXPORT_LIBS = @GMODULE_NO_EXPORT_LIBS@
 GMSGFMT = @GMSGFMT@
 GMSGFMT_015 = @GMSGFMT_015@
+GNUSTL_CFLAGS = @GNUSTL_CFLAGS@
+GNUSTL_LIBS = @GNUSTL_LIBS@
 GRAPHENE_CFLAGS = @GRAPHENE_CFLAGS@
 GRAPHENE_LIBS = @GRAPHENE_LIBS@
 GREP = @GREP@
-GSETTINGS_CFLAGS = @GSETTINGS_CFLAGS@
-GSETTINGS_DISABLE_SCHEMAS_COMPILE = @GSETTINGS_DISABLE_SCHEMAS_COMPILE@
-GSETTINGS_LIBS = @GSETTINGS_LIBS@
 GSM_LIBS = @GSM_LIBS@
 GSTPB_PLUGINS_DIR = @GSTPB_PLUGINS_DIR@
 GSTPB_PREFIX = @GSTPB_PREFIX@
 GST_AGE = @GST_AGE@
+GST_ALLOCATORS_CFLAGS = @GST_ALLOCATORS_CFLAGS@
+GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
 GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
 GST_API_VERSION = @GST_API_VERSION@
 GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
@@ -397,6 +401,8 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PBUTILS_CFLAGS = @GST_PBUTILS_CFLAGS@
+GST_PBUTILS_LIBS = @GST_PBUTILS_LIBS@
 GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BAD_CFLAGS = @GST_PLUGINS_BAD_CFLAGS@
@@ -422,6 +428,8 @@
 GST_PREFIX = @GST_PREFIX@
 GST_REVISION = @GST_REVISION@
 GST_TOOLS_DIR = @GST_TOOLS_DIR@
+GST_VIDEO_CFLAGS = @GST_VIDEO_CFLAGS@
+GST_VIDEO_LIBS = @GST_VIDEO_LIBS@
 GTK3_CFLAGS = @GTK3_CFLAGS@
 GTK3_GL_CFLAGS = @GTK3_GL_CFLAGS@
 GTK3_GL_LIBS = @GTK3_GL_LIBS@
@@ -523,6 +531,7 @@
 LTLIBICONV = @LTLIBICONV@
 LTLIBINTL = @LTLIBINTL@
 LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
 MANIFEST_TOOL = @MANIFEST_TOOL@
@@ -536,8 +545,6 @@
 MODPLUG_LIBS = @MODPLUG_LIBS@
 MPEG2ENC_CFLAGS = @MPEG2ENC_CFLAGS@
 MPEG2ENC_LIBS = @MPEG2ENC_LIBS@
-MPG123_CFLAGS = @MPG123_CFLAGS@
-MPG123_LIBS = @MPG123_LIBS@
 MPLEX_CFLAGS = @MPLEX_CFLAGS@
 MPLEX_LDFLAGS = @MPLEX_LDFLAGS@
 MPLEX_LIBS = @MPLEX_LIBS@
@@ -553,6 +560,8 @@
 NETTLE_LIBS = @NETTLE_LIBS@
 NM = @NM@
 NMEDIT = @NMEDIT@
+NVENCODE_CFLAGS = @NVENCODE_CFLAGS@
+NVENCODE_LIBS = @NVENCODE_LIBS@
 OBJC = @OBJC@
 OBJCDEPMODE = @OBJCDEPMODE@
 OBJCFLAGS = @OBJCFLAGS@
@@ -610,16 +619,18 @@
 PYTHON_PLATFORM = @PYTHON_PLATFORM@
 PYTHON_PREFIX = @PYTHON_PREFIX@
 PYTHON_VERSION = @PYTHON_VERSION@
+QT_ANDROID_CFLAGS = @QT_ANDROID_CFLAGS@
+QT_ANDROID_LIBS = @QT_ANDROID_LIBS@
 QT_CFLAGS = @QT_CFLAGS@
 QT_LIBS = @QT_LIBS@
+QT_MAC_CFLAGS = @QT_MAC_CFLAGS@
+QT_MAC_LIBS = @QT_MAC_LIBS@
 QT_WAYLAND_CFLAGS = @QT_WAYLAND_CFLAGS@
 QT_WAYLAND_LIBS = @QT_WAYLAND_LIBS@
 QT_X11_CFLAGS = @QT_X11_CFLAGS@
 QT_X11_LIBS = @QT_X11_LIBS@
 RANLIB = @RANLIB@
 RCC = @RCC@
-RSVG_2_36_2_CFLAGS = @RSVG_2_36_2_CFLAGS@
-RSVG_2_36_2_LIBS = @RSVG_2_36_2_LIBS@
 RSVG_CFLAGS = @RSVG_CFLAGS@
 RSVG_LIBS = @RSVG_LIBS@
 RTMP_CFLAGS = @RTMP_CFLAGS@
@@ -671,6 +682,7 @@
 VOAACENC_LIBS = @VOAACENC_LIBS@
 VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
 VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VULKAN_LIBS = @VULKAN_LIBS@
 WARNING_CFLAGS = @WARNING_CFLAGS@
 WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
 WARNING_OBJCFLAGS = @WARNING_OBJCFLAGS@
@@ -681,6 +693,7 @@
 WAYLAND_LIBS = @WAYLAND_LIBS@
 WEBP_CFLAGS = @WEBP_CFLAGS@
 WEBP_LIBS = @WEBP_LIBS@
+WGET = @WGET@
 WILDMIDI_CFLAGS = @WILDMIDI_CFLAGS@
 WILDMIDI_LIBS = @WILDMIDI_LIBS@
 WINKS_LIBS = @WINKS_LIBS@
@@ -690,6 +703,8 @@
 X11_LIBS = @X11_LIBS@
 X265_CFLAGS = @X265_CFLAGS@
 X265_LIBS = @X265_LIBS@
+XCB_CFLAGS = @XCB_CFLAGS@
+XCB_LIBS = @XCB_LIBS@
 XCOMPOSITE_CFLAGS = @XCOMPOSITE_CFLAGS@
 XCOMPOSITE_LIBS = @XCOMPOSITE_LIBS@
 XGETTEXT = @XGETTEXT@
@@ -727,7 +742,6 @@
 docdir = @docdir@
 dvidir = @dvidir@
 exec_prefix = @exec_prefix@
-gsettingsschemadir = @gsettingsschemadir@
 host = @host@
 host_alias = @host_alias@
 host_cpu = @host_cpu@
diff --git a/sys/dshowdecwrapper/gstdshowaudiodec.cpp b/sys/dshowdecwrapper/gstdshowaudiodec.cpp
index caebec5..9fb83e5 100644
--- a/sys/dshowdecwrapper/gstdshowaudiodec.cpp
+++ b/sys/dshowdecwrapper/gstdshowaudiodec.cpp
@@ -854,8 +854,7 @@
 static void
 dshowadec_free_mediatype (AM_MEDIA_TYPE *mediatype)
 {
-  if (mediatype->pbFormat)
-    g_free (mediatype->pbFormat);
+  g_free (mediatype->pbFormat);
   g_free (mediatype);
 }
 
diff --git a/sys/dshowdecwrapper/gstdshowvideodec.cpp b/sys/dshowdecwrapper/gstdshowvideodec.cpp
index eac0f72..9c2f59c 100644
--- a/sys/dshowdecwrapper/gstdshowvideodec.cpp
+++ b/sys/dshowdecwrapper/gstdshowvideodec.cpp
@@ -845,8 +845,7 @@
   if (caps_out)
     gst_caps_unref (caps_out);
   gst_object_unref (vdec);
-  if (input_vheader)
-    g_free (input_vheader);
+  g_free (input_vheader);
   if (srcfilter)
     srcfilter->Release();
   if (sinkfilter)
diff --git a/sys/dshowsrcwrapper/Makefile.in b/sys/dshowsrcwrapper/Makefile.in
index facda7c..ba4df56 100644
--- a/sys/dshowsrcwrapper/Makefile.in
+++ b/sys/dshowsrcwrapper/Makefile.in
@@ -117,16 +117,15 @@
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
 	$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
-	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gsettings.m4 \
-	$(top_srcdir)/m4/gst-fionread.m4 $(top_srcdir)/m4/gst-sdl.m4 \
-	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
-	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
-	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libgcrypt.m4 \
-	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
-	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
-	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
-	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
-	$(top_srcdir)/configure.ac
+	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gst-fionread.m4 \
+	$(top_srcdir)/m4/gst-sdl.m4 $(top_srcdir)/m4/iconv.m4 \
+	$(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \
+	$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
+	$(top_srcdir)/m4/libgcrypt.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
+	$(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
@@ -191,6 +190,8 @@
 CLUTTER_X11_LIBS = @CLUTTER_X11_LIBS@
 CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
+CUDA_CFLAGS = @CUDA_CFLAGS@
+CUDA_LIBS = @CUDA_LIBS@
 CURL_CFLAGS = @CURL_CFLAGS@
 CURL_LIBS = @CURL_LIBS@
 CXX = @CXX@
@@ -228,6 +229,8 @@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
+EGL_CFLAGS = @EGL_CFLAGS@
+EGL_LIBS = @EGL_LIBS@
 EGREP = @EGREP@
 ERROR_CFLAGS = @ERROR_CFLAGS@
 ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
@@ -236,7 +239,6 @@
 EXIF_CFLAGS = @EXIF_CFLAGS@
 EXIF_LIBS = @EXIF_LIBS@
 FAAC_LIBS = @FAAC_LIBS@
-FAAD_IS_NEAAC = @FAAD_IS_NEAAC@
 FAAD_LIBS = @FAAD_LIBS@
 FFLAGS = @FFLAGS@
 FGREP = @FGREP@
@@ -255,8 +257,9 @@
 GIO_LIBS = @GIO_LIBS@
 GIO_UNIX_CFLAGS = @GIO_UNIX_CFLAGS@
 GIO_UNIX_LIBS = @GIO_UNIX_LIBS@
+GLES2_CFLAGS = @GLES2_CFLAGS@
+GLES2_LIBS = @GLES2_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
-GLIB_COMPILE_SCHEMAS = @GLIB_COMPILE_SCHEMAS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
@@ -273,16 +276,17 @@
 GMODULE_NO_EXPORT_LIBS = @GMODULE_NO_EXPORT_LIBS@
 GMSGFMT = @GMSGFMT@
 GMSGFMT_015 = @GMSGFMT_015@
+GNUSTL_CFLAGS = @GNUSTL_CFLAGS@
+GNUSTL_LIBS = @GNUSTL_LIBS@
 GRAPHENE_CFLAGS = @GRAPHENE_CFLAGS@
 GRAPHENE_LIBS = @GRAPHENE_LIBS@
 GREP = @GREP@
-GSETTINGS_CFLAGS = @GSETTINGS_CFLAGS@
-GSETTINGS_DISABLE_SCHEMAS_COMPILE = @GSETTINGS_DISABLE_SCHEMAS_COMPILE@
-GSETTINGS_LIBS = @GSETTINGS_LIBS@
 GSM_LIBS = @GSM_LIBS@
 GSTPB_PLUGINS_DIR = @GSTPB_PLUGINS_DIR@
 GSTPB_PREFIX = @GSTPB_PREFIX@
 GST_AGE = @GST_AGE@
+GST_ALLOCATORS_CFLAGS = @GST_ALLOCATORS_CFLAGS@
+GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
 GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
 GST_API_VERSION = @GST_API_VERSION@
 GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
@@ -308,6 +312,8 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PBUTILS_CFLAGS = @GST_PBUTILS_CFLAGS@
+GST_PBUTILS_LIBS = @GST_PBUTILS_LIBS@
 GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BAD_CFLAGS = @GST_PLUGINS_BAD_CFLAGS@
@@ -333,6 +339,8 @@
 GST_PREFIX = @GST_PREFIX@
 GST_REVISION = @GST_REVISION@
 GST_TOOLS_DIR = @GST_TOOLS_DIR@
+GST_VIDEO_CFLAGS = @GST_VIDEO_CFLAGS@
+GST_VIDEO_LIBS = @GST_VIDEO_LIBS@
 GTK3_CFLAGS = @GTK3_CFLAGS@
 GTK3_GL_CFLAGS = @GTK3_GL_CFLAGS@
 GTK3_GL_LIBS = @GTK3_GL_LIBS@
@@ -434,6 +442,7 @@
 LTLIBICONV = @LTLIBICONV@
 LTLIBINTL = @LTLIBINTL@
 LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
 MANIFEST_TOOL = @MANIFEST_TOOL@
@@ -447,8 +456,6 @@
 MODPLUG_LIBS = @MODPLUG_LIBS@
 MPEG2ENC_CFLAGS = @MPEG2ENC_CFLAGS@
 MPEG2ENC_LIBS = @MPEG2ENC_LIBS@
-MPG123_CFLAGS = @MPG123_CFLAGS@
-MPG123_LIBS = @MPG123_LIBS@
 MPLEX_CFLAGS = @MPLEX_CFLAGS@
 MPLEX_LDFLAGS = @MPLEX_LDFLAGS@
 MPLEX_LIBS = @MPLEX_LIBS@
@@ -464,6 +471,8 @@
 NETTLE_LIBS = @NETTLE_LIBS@
 NM = @NM@
 NMEDIT = @NMEDIT@
+NVENCODE_CFLAGS = @NVENCODE_CFLAGS@
+NVENCODE_LIBS = @NVENCODE_LIBS@
 OBJC = @OBJC@
 OBJCDEPMODE = @OBJCDEPMODE@
 OBJCFLAGS = @OBJCFLAGS@
@@ -521,16 +530,18 @@
 PYTHON_PLATFORM = @PYTHON_PLATFORM@
 PYTHON_PREFIX = @PYTHON_PREFIX@
 PYTHON_VERSION = @PYTHON_VERSION@
+QT_ANDROID_CFLAGS = @QT_ANDROID_CFLAGS@
+QT_ANDROID_LIBS = @QT_ANDROID_LIBS@
 QT_CFLAGS = @QT_CFLAGS@
 QT_LIBS = @QT_LIBS@
+QT_MAC_CFLAGS = @QT_MAC_CFLAGS@
+QT_MAC_LIBS = @QT_MAC_LIBS@
 QT_WAYLAND_CFLAGS = @QT_WAYLAND_CFLAGS@
 QT_WAYLAND_LIBS = @QT_WAYLAND_LIBS@
 QT_X11_CFLAGS = @QT_X11_CFLAGS@
 QT_X11_LIBS = @QT_X11_LIBS@
 RANLIB = @RANLIB@
 RCC = @RCC@
-RSVG_2_36_2_CFLAGS = @RSVG_2_36_2_CFLAGS@
-RSVG_2_36_2_LIBS = @RSVG_2_36_2_LIBS@
 RSVG_CFLAGS = @RSVG_CFLAGS@
 RSVG_LIBS = @RSVG_LIBS@
 RTMP_CFLAGS = @RTMP_CFLAGS@
@@ -582,6 +593,7 @@
 VOAACENC_LIBS = @VOAACENC_LIBS@
 VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
 VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VULKAN_LIBS = @VULKAN_LIBS@
 WARNING_CFLAGS = @WARNING_CFLAGS@
 WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
 WARNING_OBJCFLAGS = @WARNING_OBJCFLAGS@
@@ -592,6 +604,7 @@
 WAYLAND_LIBS = @WAYLAND_LIBS@
 WEBP_CFLAGS = @WEBP_CFLAGS@
 WEBP_LIBS = @WEBP_LIBS@
+WGET = @WGET@
 WILDMIDI_CFLAGS = @WILDMIDI_CFLAGS@
 WILDMIDI_LIBS = @WILDMIDI_LIBS@
 WINKS_LIBS = @WINKS_LIBS@
@@ -601,6 +614,8 @@
 X11_LIBS = @X11_LIBS@
 X265_CFLAGS = @X265_CFLAGS@
 X265_LIBS = @X265_LIBS@
+XCB_CFLAGS = @XCB_CFLAGS@
+XCB_LIBS = @XCB_LIBS@
 XCOMPOSITE_CFLAGS = @XCOMPOSITE_CFLAGS@
 XCOMPOSITE_LIBS = @XCOMPOSITE_LIBS@
 XGETTEXT = @XGETTEXT@
@@ -638,7 +653,6 @@
 docdir = @docdir@
 dvidir = @dvidir@
 exec_prefix = @exec_prefix@
-gsettingsschemadir = @gsettingsschemadir@
 host = @host@
 host_alias = @host_alias@
 host_cpu = @host_cpu@
diff --git a/sys/dshowsrcwrapper/gstdshow.cpp b/sys/dshowsrcwrapper/gstdshow.cpp
index 29266ba..705adc9 100644
--- a/sys/dshowsrcwrapper/gstdshow.cpp
+++ b/sys/dshowsrcwrapper/gstdshow.cpp
@@ -125,10 +125,8 @@
 void
 gst_dshow_free_pins_mediatypes (GList * pins_mediatypes)
 {
-  while (pins_mediatypes != NULL) {
-    gst_dshow_free_pin_mediatype (pins_mediatypes->data);
-    pins_mediatypes = g_list_remove_link (pins_mediatypes, pins_mediatypes);
-  }
+  g_list_free_full (pins_mediatypes,
+      (GDestroyNotify) gst_dshow_free_pin_mediatype);
 }
 
 gboolean
@@ -273,14 +271,12 @@
       filter_temp->Release ();
     }
 
-    if (friendly_name)
-      g_free (friendly_name);
+    g_free (friendly_name);
     moniker->Release ();
   }
 
 clean:
-  if (prefered_filter_upper)
-    g_free (prefered_filter_upper);
+  g_free (prefered_filter_upper);
   if (enum_moniker)
     enum_moniker->Release ();
   if (mapper)
diff --git a/sys/dshowsrcwrapper/gstdshowvideosrc.cpp b/sys/dshowsrcwrapper/gstdshowvideosrc.cpp
index 846c050..7725fcb 100644
--- a/sys/dshowsrcwrapper/gstdshowvideosrc.cpp
+++ b/sys/dshowsrcwrapper/gstdshowvideosrc.cpp
@@ -396,9 +396,7 @@
     }
   }
 
-  if (unidevice) {
-    g_free (unidevice);
-  }
+  g_free (unidevice);
 
   if (src->caps) {
     GstCaps *caps;
diff --git a/sys/dshowvideosink/Makefile.in b/sys/dshowvideosink/Makefile.in
index 57ab485..ede002d 100644
--- a/sys/dshowvideosink/Makefile.in
+++ b/sys/dshowvideosink/Makefile.in
@@ -117,16 +117,15 @@
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
 	$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
-	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gsettings.m4 \
-	$(top_srcdir)/m4/gst-fionread.m4 $(top_srcdir)/m4/gst-sdl.m4 \
-	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
-	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
-	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libgcrypt.m4 \
-	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
-	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
-	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
-	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
-	$(top_srcdir)/configure.ac
+	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gst-fionread.m4 \
+	$(top_srcdir)/m4/gst-sdl.m4 $(top_srcdir)/m4/iconv.m4 \
+	$(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \
+	$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
+	$(top_srcdir)/m4/libgcrypt.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
+	$(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
@@ -191,6 +190,8 @@
 CLUTTER_X11_LIBS = @CLUTTER_X11_LIBS@
 CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
+CUDA_CFLAGS = @CUDA_CFLAGS@
+CUDA_LIBS = @CUDA_LIBS@
 CURL_CFLAGS = @CURL_CFLAGS@
 CURL_LIBS = @CURL_LIBS@
 CXX = @CXX@
@@ -228,6 +229,8 @@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
+EGL_CFLAGS = @EGL_CFLAGS@
+EGL_LIBS = @EGL_LIBS@
 EGREP = @EGREP@
 ERROR_CFLAGS = @ERROR_CFLAGS@
 ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
@@ -236,7 +239,6 @@
 EXIF_CFLAGS = @EXIF_CFLAGS@
 EXIF_LIBS = @EXIF_LIBS@
 FAAC_LIBS = @FAAC_LIBS@
-FAAD_IS_NEAAC = @FAAD_IS_NEAAC@
 FAAD_LIBS = @FAAD_LIBS@
 FFLAGS = @FFLAGS@
 FGREP = @FGREP@
@@ -255,8 +257,9 @@
 GIO_LIBS = @GIO_LIBS@
 GIO_UNIX_CFLAGS = @GIO_UNIX_CFLAGS@
 GIO_UNIX_LIBS = @GIO_UNIX_LIBS@
+GLES2_CFLAGS = @GLES2_CFLAGS@
+GLES2_LIBS = @GLES2_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
-GLIB_COMPILE_SCHEMAS = @GLIB_COMPILE_SCHEMAS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
@@ -273,16 +276,17 @@
 GMODULE_NO_EXPORT_LIBS = @GMODULE_NO_EXPORT_LIBS@
 GMSGFMT = @GMSGFMT@
 GMSGFMT_015 = @GMSGFMT_015@
+GNUSTL_CFLAGS = @GNUSTL_CFLAGS@
+GNUSTL_LIBS = @GNUSTL_LIBS@
 GRAPHENE_CFLAGS = @GRAPHENE_CFLAGS@
 GRAPHENE_LIBS = @GRAPHENE_LIBS@
 GREP = @GREP@
-GSETTINGS_CFLAGS = @GSETTINGS_CFLAGS@
-GSETTINGS_DISABLE_SCHEMAS_COMPILE = @GSETTINGS_DISABLE_SCHEMAS_COMPILE@
-GSETTINGS_LIBS = @GSETTINGS_LIBS@
 GSM_LIBS = @GSM_LIBS@
 GSTPB_PLUGINS_DIR = @GSTPB_PLUGINS_DIR@
 GSTPB_PREFIX = @GSTPB_PREFIX@
 GST_AGE = @GST_AGE@
+GST_ALLOCATORS_CFLAGS = @GST_ALLOCATORS_CFLAGS@
+GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
 GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
 GST_API_VERSION = @GST_API_VERSION@
 GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
@@ -308,6 +312,8 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PBUTILS_CFLAGS = @GST_PBUTILS_CFLAGS@
+GST_PBUTILS_LIBS = @GST_PBUTILS_LIBS@
 GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BAD_CFLAGS = @GST_PLUGINS_BAD_CFLAGS@
@@ -333,6 +339,8 @@
 GST_PREFIX = @GST_PREFIX@
 GST_REVISION = @GST_REVISION@
 GST_TOOLS_DIR = @GST_TOOLS_DIR@
+GST_VIDEO_CFLAGS = @GST_VIDEO_CFLAGS@
+GST_VIDEO_LIBS = @GST_VIDEO_LIBS@
 GTK3_CFLAGS = @GTK3_CFLAGS@
 GTK3_GL_CFLAGS = @GTK3_GL_CFLAGS@
 GTK3_GL_LIBS = @GTK3_GL_LIBS@
@@ -434,6 +442,7 @@
 LTLIBICONV = @LTLIBICONV@
 LTLIBINTL = @LTLIBINTL@
 LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
 MANIFEST_TOOL = @MANIFEST_TOOL@
@@ -447,8 +456,6 @@
 MODPLUG_LIBS = @MODPLUG_LIBS@
 MPEG2ENC_CFLAGS = @MPEG2ENC_CFLAGS@
 MPEG2ENC_LIBS = @MPEG2ENC_LIBS@
-MPG123_CFLAGS = @MPG123_CFLAGS@
-MPG123_LIBS = @MPG123_LIBS@
 MPLEX_CFLAGS = @MPLEX_CFLAGS@
 MPLEX_LDFLAGS = @MPLEX_LDFLAGS@
 MPLEX_LIBS = @MPLEX_LIBS@
@@ -464,6 +471,8 @@
 NETTLE_LIBS = @NETTLE_LIBS@
 NM = @NM@
 NMEDIT = @NMEDIT@
+NVENCODE_CFLAGS = @NVENCODE_CFLAGS@
+NVENCODE_LIBS = @NVENCODE_LIBS@
 OBJC = @OBJC@
 OBJCDEPMODE = @OBJCDEPMODE@
 OBJCFLAGS = @OBJCFLAGS@
@@ -521,16 +530,18 @@
 PYTHON_PLATFORM = @PYTHON_PLATFORM@
 PYTHON_PREFIX = @PYTHON_PREFIX@
 PYTHON_VERSION = @PYTHON_VERSION@
+QT_ANDROID_CFLAGS = @QT_ANDROID_CFLAGS@
+QT_ANDROID_LIBS = @QT_ANDROID_LIBS@
 QT_CFLAGS = @QT_CFLAGS@
 QT_LIBS = @QT_LIBS@
+QT_MAC_CFLAGS = @QT_MAC_CFLAGS@
+QT_MAC_LIBS = @QT_MAC_LIBS@
 QT_WAYLAND_CFLAGS = @QT_WAYLAND_CFLAGS@
 QT_WAYLAND_LIBS = @QT_WAYLAND_LIBS@
 QT_X11_CFLAGS = @QT_X11_CFLAGS@
 QT_X11_LIBS = @QT_X11_LIBS@
 RANLIB = @RANLIB@
 RCC = @RCC@
-RSVG_2_36_2_CFLAGS = @RSVG_2_36_2_CFLAGS@
-RSVG_2_36_2_LIBS = @RSVG_2_36_2_LIBS@
 RSVG_CFLAGS = @RSVG_CFLAGS@
 RSVG_LIBS = @RSVG_LIBS@
 RTMP_CFLAGS = @RTMP_CFLAGS@
@@ -582,6 +593,7 @@
 VOAACENC_LIBS = @VOAACENC_LIBS@
 VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
 VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VULKAN_LIBS = @VULKAN_LIBS@
 WARNING_CFLAGS = @WARNING_CFLAGS@
 WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
 WARNING_OBJCFLAGS = @WARNING_OBJCFLAGS@
@@ -592,6 +604,7 @@
 WAYLAND_LIBS = @WAYLAND_LIBS@
 WEBP_CFLAGS = @WEBP_CFLAGS@
 WEBP_LIBS = @WEBP_LIBS@
+WGET = @WGET@
 WILDMIDI_CFLAGS = @WILDMIDI_CFLAGS@
 WILDMIDI_LIBS = @WILDMIDI_LIBS@
 WINKS_LIBS = @WINKS_LIBS@
@@ -601,6 +614,8 @@
 X11_LIBS = @X11_LIBS@
 X265_CFLAGS = @X265_CFLAGS@
 X265_LIBS = @X265_LIBS@
+XCB_CFLAGS = @XCB_CFLAGS@
+XCB_LIBS = @XCB_LIBS@
 XCOMPOSITE_CFLAGS = @XCOMPOSITE_CFLAGS@
 XCOMPOSITE_LIBS = @XCOMPOSITE_LIBS@
 XGETTEXT = @XGETTEXT@
@@ -638,7 +653,6 @@
 docdir = @docdir@
 dvidir = @dvidir@
 exec_prefix = @exec_prefix@
-gsettingsschemadir = @gsettingsschemadir@
 host = @host@
 host_alias = @host_alias@
 host_cpu = @host_cpu@
diff --git a/sys/dshowvideosink/dshowvideosink.cpp b/sys/dshowvideosink/dshowvideosink.cpp
index cd7b212..c3d4bc3 100644
--- a/sys/dshowvideosink/dshowvideosink.cpp
+++ b/sys/dshowvideosink/dshowvideosink.cpp
@@ -285,8 +285,7 @@
 {
   GstDshowVideoSink *sink = GST_DSHOWVIDEOSINK (gobject);
 
-  if (sink->preferredrenderer)
-    g_free (sink->preferredrenderer);
+  g_free (sink->preferredrenderer);
 
   /* signal the COM thread that it sould uninitialize COM */
   if (sink->comInitialized) {
@@ -315,9 +314,7 @@
 
   switch (prop_id) {
     case PROP_RENDERER:
-      if (sink->preferredrenderer)
-        g_free (sink->preferredrenderer);
-
+      g_free (sink->preferredrenderer);
       sink->preferredrenderer = g_value_dup_string (value);
       break;
     case PROP_KEEP_ASPECT_RATIO:
diff --git a/sys/dvb/Makefile.in b/sys/dvb/Makefile.in
index aab35d4..0dc5698 100644
--- a/sys/dvb/Makefile.in
+++ b/sys/dvb/Makefile.in
@@ -116,16 +116,15 @@
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
 	$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
-	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gsettings.m4 \
-	$(top_srcdir)/m4/gst-fionread.m4 $(top_srcdir)/m4/gst-sdl.m4 \
-	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
-	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
-	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libgcrypt.m4 \
-	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
-	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
-	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
-	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
-	$(top_srcdir)/configure.ac
+	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gst-fionread.m4 \
+	$(top_srcdir)/m4/gst-sdl.m4 $(top_srcdir)/m4/iconv.m4 \
+	$(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \
+	$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
+	$(top_srcdir)/m4/libgcrypt.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
+	$(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \
@@ -284,6 +283,8 @@
 CLUTTER_X11_LIBS = @CLUTTER_X11_LIBS@
 CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
+CUDA_CFLAGS = @CUDA_CFLAGS@
+CUDA_LIBS = @CUDA_LIBS@
 CURL_CFLAGS = @CURL_CFLAGS@
 CURL_LIBS = @CURL_LIBS@
 CXX = @CXX@
@@ -321,6 +322,8 @@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
+EGL_CFLAGS = @EGL_CFLAGS@
+EGL_LIBS = @EGL_LIBS@
 EGREP = @EGREP@
 ERROR_CFLAGS = @ERROR_CFLAGS@
 ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
@@ -329,7 +332,6 @@
 EXIF_CFLAGS = @EXIF_CFLAGS@
 EXIF_LIBS = @EXIF_LIBS@
 FAAC_LIBS = @FAAC_LIBS@
-FAAD_IS_NEAAC = @FAAD_IS_NEAAC@
 FAAD_LIBS = @FAAD_LIBS@
 FFLAGS = @FFLAGS@
 FGREP = @FGREP@
@@ -348,8 +350,9 @@
 GIO_LIBS = @GIO_LIBS@
 GIO_UNIX_CFLAGS = @GIO_UNIX_CFLAGS@
 GIO_UNIX_LIBS = @GIO_UNIX_LIBS@
+GLES2_CFLAGS = @GLES2_CFLAGS@
+GLES2_LIBS = @GLES2_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
-GLIB_COMPILE_SCHEMAS = @GLIB_COMPILE_SCHEMAS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
@@ -366,16 +369,17 @@
 GMODULE_NO_EXPORT_LIBS = @GMODULE_NO_EXPORT_LIBS@
 GMSGFMT = @GMSGFMT@
 GMSGFMT_015 = @GMSGFMT_015@
+GNUSTL_CFLAGS = @GNUSTL_CFLAGS@
+GNUSTL_LIBS = @GNUSTL_LIBS@
 GRAPHENE_CFLAGS = @GRAPHENE_CFLAGS@
 GRAPHENE_LIBS = @GRAPHENE_LIBS@
 GREP = @GREP@
-GSETTINGS_CFLAGS = @GSETTINGS_CFLAGS@
-GSETTINGS_DISABLE_SCHEMAS_COMPILE = @GSETTINGS_DISABLE_SCHEMAS_COMPILE@
-GSETTINGS_LIBS = @GSETTINGS_LIBS@
 GSM_LIBS = @GSM_LIBS@
 GSTPB_PLUGINS_DIR = @GSTPB_PLUGINS_DIR@
 GSTPB_PREFIX = @GSTPB_PREFIX@
 GST_AGE = @GST_AGE@
+GST_ALLOCATORS_CFLAGS = @GST_ALLOCATORS_CFLAGS@
+GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
 GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
 GST_API_VERSION = @GST_API_VERSION@
 GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
@@ -401,6 +405,8 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PBUTILS_CFLAGS = @GST_PBUTILS_CFLAGS@
+GST_PBUTILS_LIBS = @GST_PBUTILS_LIBS@
 GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BAD_CFLAGS = @GST_PLUGINS_BAD_CFLAGS@
@@ -426,6 +432,8 @@
 GST_PREFIX = @GST_PREFIX@
 GST_REVISION = @GST_REVISION@
 GST_TOOLS_DIR = @GST_TOOLS_DIR@
+GST_VIDEO_CFLAGS = @GST_VIDEO_CFLAGS@
+GST_VIDEO_LIBS = @GST_VIDEO_LIBS@
 GTK3_CFLAGS = @GTK3_CFLAGS@
 GTK3_GL_CFLAGS = @GTK3_GL_CFLAGS@
 GTK3_GL_LIBS = @GTK3_GL_LIBS@
@@ -527,6 +535,7 @@
 LTLIBICONV = @LTLIBICONV@
 LTLIBINTL = @LTLIBINTL@
 LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
 MANIFEST_TOOL = @MANIFEST_TOOL@
@@ -540,8 +549,6 @@
 MODPLUG_LIBS = @MODPLUG_LIBS@
 MPEG2ENC_CFLAGS = @MPEG2ENC_CFLAGS@
 MPEG2ENC_LIBS = @MPEG2ENC_LIBS@
-MPG123_CFLAGS = @MPG123_CFLAGS@
-MPG123_LIBS = @MPG123_LIBS@
 MPLEX_CFLAGS = @MPLEX_CFLAGS@
 MPLEX_LDFLAGS = @MPLEX_LDFLAGS@
 MPLEX_LIBS = @MPLEX_LIBS@
@@ -557,6 +564,8 @@
 NETTLE_LIBS = @NETTLE_LIBS@
 NM = @NM@
 NMEDIT = @NMEDIT@
+NVENCODE_CFLAGS = @NVENCODE_CFLAGS@
+NVENCODE_LIBS = @NVENCODE_LIBS@
 OBJC = @OBJC@
 OBJCDEPMODE = @OBJCDEPMODE@
 OBJCFLAGS = @OBJCFLAGS@
@@ -614,16 +623,18 @@
 PYTHON_PLATFORM = @PYTHON_PLATFORM@
 PYTHON_PREFIX = @PYTHON_PREFIX@
 PYTHON_VERSION = @PYTHON_VERSION@
+QT_ANDROID_CFLAGS = @QT_ANDROID_CFLAGS@
+QT_ANDROID_LIBS = @QT_ANDROID_LIBS@
 QT_CFLAGS = @QT_CFLAGS@
 QT_LIBS = @QT_LIBS@
+QT_MAC_CFLAGS = @QT_MAC_CFLAGS@
+QT_MAC_LIBS = @QT_MAC_LIBS@
 QT_WAYLAND_CFLAGS = @QT_WAYLAND_CFLAGS@
 QT_WAYLAND_LIBS = @QT_WAYLAND_LIBS@
 QT_X11_CFLAGS = @QT_X11_CFLAGS@
 QT_X11_LIBS = @QT_X11_LIBS@
 RANLIB = @RANLIB@
 RCC = @RCC@
-RSVG_2_36_2_CFLAGS = @RSVG_2_36_2_CFLAGS@
-RSVG_2_36_2_LIBS = @RSVG_2_36_2_LIBS@
 RSVG_CFLAGS = @RSVG_CFLAGS@
 RSVG_LIBS = @RSVG_LIBS@
 RTMP_CFLAGS = @RTMP_CFLAGS@
@@ -675,6 +686,7 @@
 VOAACENC_LIBS = @VOAACENC_LIBS@
 VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
 VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VULKAN_LIBS = @VULKAN_LIBS@
 WARNING_CFLAGS = @WARNING_CFLAGS@
 WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
 WARNING_OBJCFLAGS = @WARNING_OBJCFLAGS@
@@ -685,6 +697,7 @@
 WAYLAND_LIBS = @WAYLAND_LIBS@
 WEBP_CFLAGS = @WEBP_CFLAGS@
 WEBP_LIBS = @WEBP_LIBS@
+WGET = @WGET@
 WILDMIDI_CFLAGS = @WILDMIDI_CFLAGS@
 WILDMIDI_LIBS = @WILDMIDI_LIBS@
 WINKS_LIBS = @WINKS_LIBS@
@@ -694,6 +707,8 @@
 X11_LIBS = @X11_LIBS@
 X265_CFLAGS = @X265_CFLAGS@
 X265_LIBS = @X265_LIBS@
+XCB_CFLAGS = @XCB_CFLAGS@
+XCB_LIBS = @XCB_LIBS@
 XCOMPOSITE_CFLAGS = @XCOMPOSITE_CFLAGS@
 XCOMPOSITE_LIBS = @XCOMPOSITE_LIBS@
 XGETTEXT = @XGETTEXT@
@@ -731,7 +746,6 @@
 docdir = @docdir@
 dvidir = @dvidir@
 exec_prefix = @exec_prefix@
-gsettingsschemadir = @gsettingsschemadir@
 host = @host@
 host_alias = @host_alias@
 host_cpu = @host_cpu@
diff --git a/sys/dvb/README b/sys/dvb/README
index 1329da9..4d3c83b 100644
--- a/sys/dvb/README
+++ b/sys/dvb/README
@@ -5,7 +5,7 @@
 
 Try:
 
-     gst-launch dvbsrc frequency=11954 polarity=h symbol-rate=27500 pids=210:220
+     gst-launch-1.0 dvbsrc frequency=11954 polarity=h symbol-rate=27500 pids=210:220
          ! mpegtsdemux es-pids=210:220 name=demux ! queue ! mpeg2dec
          ! xvimagesink demux. ! queue ! mad ! audioconvert ! autoaudiosink
 
diff --git a/sys/dvb/camswclient.c b/sys/dvb/camswclient.c
index f5d07cf..68a3d43 100644
--- a/sys/dvb/camswclient.c
+++ b/sys/dvb/camswclient.c
@@ -52,8 +52,7 @@
   if (client->sock)
     close (client->sock);
 
-  if (client->sock_path)
-    g_free (client->sock_path);
+  g_free (client->sock_path);
 }
 
 void
diff --git a/sys/dvb/dvbbasebin.c b/sys/dvb/dvbbasebin.c
index 2e6dcfd..f003355 100644
--- a/sys/dvb/dvbbasebin.c
+++ b/sys/dvb/dvbbasebin.c
@@ -597,8 +597,7 @@
 
   /* FIXME : Deactivate programs no longer selected */
 
-  if (dvbbasebin->program_numbers)
-    g_free (dvbbasebin->program_numbers);
+  g_free (dvbbasebin->program_numbers);
   dvbbasebin->program_numbers = g_strdup (pn);
 
   if (0)
diff --git a/sys/dvb/gstdvbsrc.c b/sys/dvb/gstdvbsrc.c
index adbc973..b93255f 100644
--- a/sys/dvb/gstdvbsrc.c
+++ b/sys/dvb/gstdvbsrc.c
@@ -28,16 +28,16 @@
  * <refsect2>
  * <title>Example launch line</title>
  * |[
- * gst-launch dvbsrc modulation="QAM 64" trans-mode=8k bandwidth=8 frequency=514000000 code-rate-lp=AUTO code-rate-hp=2/3 guard=4  hierarchy=0 ! mpegtsdemux name=demux ! queue max-size-buffers=0 max-size-time=0 ! mpeg2dec ! xvimagesink demux. ! queue max-size-buffers=0 max-size-time=0 ! mad ! alsasink
+ * gst-launch-1.0 dvbsrc modulation="QAM 64" trans-mode=8k bandwidth=8 frequency=514000000 code-rate-lp=AUTO code-rate-hp=2/3 guard=4  hierarchy=0 ! mpegtsdemux name=demux ! queue max-size-buffers=0 max-size-time=0 ! mpeg2dec ! xvimagesink demux. ! queue max-size-buffers=0 max-size-time=0 ! mad ! alsasink
  * ]| Captures a full transport stream from DVB card 0 that is a DVB-T card at tuned frequency 514000000 Hz with other parameters as seen in the pipeline and renders the first TV program on the transport stream.
  * |[
- * gst-launch dvbsrc modulation="QAM 64" trans-mode=8k bandwidth=8 frequency=514000000 code-rate-lp=AUTO code-rate-hp=2/3 guard=4  hierarchy=0 pids=100:256:257 ! mpegtsdemux name=demux ! queue max-size-buffers=0 max-size-time=0 ! mpeg2dec ! xvimagesink demux. ! queue max-size-buffers=0 max-size-time=0 ! mad ! alsasink
+ * gst-launch-1.0 dvbsrc modulation="QAM 64" trans-mode=8k bandwidth=8 frequency=514000000 code-rate-lp=AUTO code-rate-hp=2/3 guard=4  hierarchy=0 pids=100:256:257 ! mpegtsdemux name=demux ! queue max-size-buffers=0 max-size-time=0 ! mpeg2dec ! xvimagesink demux. ! queue max-size-buffers=0 max-size-time=0 ! mad ! alsasink
  * ]| Captures and renders a transport stream from DVB card 0 that is a DVB-T card for a program at tuned frequency 514000000 Hz with PMT PID 100 and elementary stream PIDs of 256, 257 with other parameters as seen in the pipeline.
  * |[
- * gst-launch dvbsrc polarity="h" frequency=11302000 symbol-rate=27500 diseqc-source=0 pids=50:102:103 ! mpegtsdemux name=demux ! queue max-size-buffers=0 max-size-time=0 ! mpeg2dec ! xvimagesink demux. ! queue max-size-buffers=0 max-size-time=0 ! mad ! alsasink
+ * gst-launch-1.0 dvbsrc polarity="h" frequency=11302000 symbol-rate=27500 diseqc-source=0 pids=50:102:103 ! mpegtsdemux name=demux ! queue max-size-buffers=0 max-size-time=0 ! mpeg2dec ! xvimagesink demux. ! queue max-size-buffers=0 max-size-time=0 ! mad ! alsasink
  * ]| Captures and renders a transport stream from DVB card 0 that is a DVB-S card for a program at tuned frequency 11302000 kHz, symbol rate of 27500 kBd (kilo bauds) with PMT PID of 50 and elementary stream PIDs of 102 and 103.
  * |[
- gst-launch dvbsrc frequency=515142857 guard=16 trans-mode="8k" isdbt-layer-enabled=7 isdbt-partial-reception=1 isdbt-layera-fec="2/3" isdbt-layera-modulation="QPSK" isdbt-layera-segment-count=1 isdbt-layera-time-interleaving=4 isdbt-layerb-fec="3/4" isdbt-layerb-modulation="qam-64" isdbt-layerb-segment-count=12 isdbt-layerb-time-interleaving=2 isdbt-layerc-fec="1/2" isdbt-layerc-modulation="qam-64" isdbt-layerc-segment-count=0 isdbt-layerc-time-interleaving=0 delsys="isdb-t" ! tsdemux ! "video/x-h264" ! h264parse ! queue ! avdec_h264 ! videoconvert ! queue ! autovideosink
+ gst-launch-1.0 dvbsrc frequency=515142857 guard=16 trans-mode="8k" isdbt-layer-enabled=7 isdbt-partial-reception=1 isdbt-layera-fec="2/3" isdbt-layera-modulation="QPSK" isdbt-layera-segment-count=1 isdbt-layera-time-interleaving=4 isdbt-layerb-fec="3/4" isdbt-layerb-modulation="qam-64" isdbt-layerb-segment-count=12 isdbt-layerb-time-interleaving=2 isdbt-layerc-fec="1/2" isdbt-layerc-modulation="qam-64" isdbt-layerc-segment-count=0 isdbt-layerc-time-interleaving=0 delsys="isdb-t" ! tsdemux ! "video/x-h264" ! h264parse ! queue ! avdec_h264 ! videoconvert ! queue ! autovideosink
  * ]| Captures and renders the video track of TV Paraíba HD (Globo affiliate) in Campina Grande, Brazil. This is an ISDB-T (Brazilian ISDB-Tb variant) broadcast.
  * </refsect2>
  */
@@ -99,7 +99,6 @@
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
-#include "_stdint.h"
 
 #include <unistd.h>
 
@@ -2056,8 +2055,8 @@
 gst_dvbsrc_output_frontend_stats (GstDvbSrc * src)
 {
   fe_status_t status;
-  uint16_t snr, _signal;
-  uint32_t ber, bad_blks;
+  guint16 snr, _signal;
+  guint32 ber, bad_blks;
   GstMessage *message;
   GstStructure *structure;
   int fe_fd = src->fd_frontend;
@@ -2099,7 +2098,7 @@
 struct diseqc_cmd
 {
   struct dvb_diseqc_master_cmd cmd;
-  uint32_t wait;
+  guint32 wait;
 };
 
 static void
@@ -2293,8 +2292,8 @@
     if (object->tuning_timeout)
       elapsed_time = GST_CLOCK_DIFF (start, gst_util_get_timestamp ());
     GST_LOG_OBJECT (object,
-        "Tuning. Time elapsed %" G_GUINT64_FORMAT " Limit %" G_GUINT64_FORMAT,
-        elapsed_time, object->tuning_timeout);
+        "Tuning. Time elapsed %" GST_STIME_FORMAT " Limit %" G_GUINT64_FORMAT,
+        GST_STIME_ARGS (elapsed_time), object->tuning_timeout);
   }
 
   if (!(status & FE_HAS_LOCK)) {
diff --git a/sys/dvb/parsechannels.c b/sys/dvb/parsechannels.c
index 9c46ddb..1d30580 100644
--- a/sys/dvb/parsechannels.c
+++ b/sys/dvb/parsechannels.c
@@ -54,6 +54,9 @@
   gchar **lines;
   gchar *line;
   gchar **fields;
+  int i, parsedchannels = 0;
+  GHashTable *res;
+  GError *err = NULL;
   const gchar *terrestrial[] = { "inversion", "bandwidth",
     "code-rate-hp", "code-rate-lp", "modulation", "transmission-mode",
     "guard", "hierarchy"
@@ -64,9 +67,6 @@
   const gchar *cable[] = { "inversion", "symbol-rate", "code-rate-hp",
     "modulation"
   };
-  int i, parsedchannels = 0;
-  GHashTable *res;
-  GError *err = NULL;
 
   GST_INFO_OBJECT (dvbbasebin, "parsing '%s'", filename);
 
@@ -79,18 +79,37 @@
   i = 0;
   line = lines[0];
   while (line != NULL) {
-    if (line[0] != '#') {
-      int numfields;
-      gboolean parsed = FALSE;
-      GHashTable *params = g_hash_table_new_full (g_str_hash, g_str_equal,
-          g_free, g_free);
+    GHashTable *params;
+    int j, numfields;
 
-      fields = g_strsplit (line, ":", 0);
-      numfields = g_strv_length (fields);
-      if (numfields == 8) {
-        /* satellite */
-        int j;
+    if (line[0] == '#')
+      goto next_line;
 
+    params = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_free);
+    fields = g_strsplit (line, ":", 0);
+    numfields = g_strv_length (fields);
+
+    switch (numfields) {
+      case 13:                 /* terrestrial */
+        g_hash_table_insert (params, g_strdup ("type"),
+            g_strdup ("terrestrial"));
+        for (j = 2; j <= 9; j++) {
+          g_hash_table_insert (params, g_strdup (terrestrial[j - 2]),
+              g_strdup (fields[j]));
+        }
+        g_hash_table_insert (params, g_strdup ("frequency"),
+            g_strdup (fields[1]));
+        break;
+      case 9:                  /* cable */
+        g_hash_table_insert (params, g_strdup ("type"), g_strdup ("cable"));
+        for (j = 2; j <= 5; j++) {
+          g_hash_table_insert (params, g_strdup (cable[j - 2]),
+              g_strdup (fields[j]));
+        }
+        g_hash_table_insert (params, g_strdup ("frequency"),
+            g_strdup (fields[1]));
+        break;
+      case 8:                  /* satellite */
         g_hash_table_insert (params, g_strdup ("type"), g_strdup ("satellite"));
         for (j = 2; j <= 4; j++) {
           g_hash_table_insert (params, g_strdup (satellite[j - 2]),
@@ -107,52 +126,31 @@
           g_hash_table_insert (params, g_strdup ("frequency"),
               g_strdup_printf ("%d", atoi (fields[1])));
         }
-        parsed = TRUE;
-      } else if (numfields == 13) {
-        /* terrestrial */
-        int j;
-
-        g_hash_table_insert (params, g_strdup ("type"),
-            g_strdup ("terrestrial"));
-        for (j = 2; j <= 9; j++) {
-          g_hash_table_insert (params, g_strdup (terrestrial[j - 2]),
-              g_strdup (fields[j]));
-        }
-        g_hash_table_insert (params, g_strdup ("frequency"),
-            g_strdup (fields[1]));
-        parsed = TRUE;
-      } else if (numfields == 9) {
-        /* cable */
-        int j;
-
-        g_hash_table_insert (params, g_strdup ("type"), g_strdup ("cable"));
-        for (j = 2; j <= 5; j++) {
-          g_hash_table_insert (params, g_strdup (cable[j - 2]),
-              g_strdup (fields[j]));
-        }
-        g_hash_table_insert (params, g_strdup ("frequency"),
-            g_strdup (fields[1]));
-        parsed = TRUE;
-      } else if (numfields == 6) {
-        /* atsc (vsb/qam) */
+        break;
+      case 6:                  /* atsc (vsb/qam) */
         g_hash_table_insert (params, g_strdup ("type"), g_strdup ("atsc"));
         g_hash_table_insert (params, g_strdup ("modulation"),
             g_strdup (fields[2]));
 
         g_hash_table_insert (params, g_strdup ("frequency"),
             g_strdup (fields[1]));
-        parsed = TRUE;
-      }
-      if (parsed) {
-        g_hash_table_insert (params, g_strdup ("sid"),
-            g_strdup (fields[numfields - 1]));
-        g_hash_table_insert (res, g_strdup (fields[0]), params);
-        parsedchannels++;
-      }
-      g_strfreev (fields);
+        break;
+      default:
+        goto not_parsed;
     }
+
+    /* parsed */
+    g_hash_table_insert (params, g_strdup ("sid"),
+        g_strdup (fields[numfields - 1]));
+    g_hash_table_insert (res, g_strdup (fields[0]), params);
+    parsedchannels++;
+
+  not_parsed:
+    g_strfreev (fields);
+  next_line:
     line = lines[++i];
   }
+
   g_strfreev (lines);
   g_free (contents);
 
@@ -162,32 +160,27 @@
   return res;
 
 open_fail:
-  {
-    if (err->code == G_FILE_ERROR_NOENT) {
-      g_set_error (error, GST_RESOURCE_ERROR, GST_RESOURCE_ERROR_NOT_FOUND,
-          _("Couldn't find DVB channel configuration file"));
-    } else {
-      g_set_error (error, GST_RESOURCE_ERROR, GST_RESOURCE_ERROR_READ,
-          _("Couldn't load DVB channel configuration file: %s"), err->message);
-    }
-    g_clear_error (&err);
-    return NULL;
+  if (err->code == G_FILE_ERROR_NOENT) {
+    g_set_error (error, GST_RESOURCE_ERROR, GST_RESOURCE_ERROR_NOT_FOUND,
+        _("Couldn't find DVB channel configuration file"));
+  } else {
+    g_set_error (error, GST_RESOURCE_ERROR, GST_RESOURCE_ERROR_READ,
+        _("Couldn't load DVB channel configuration file: %s"), err->message);
   }
+  g_clear_error (&err);
+  return NULL;
 
 no_channels:
-  {
-    g_set_error (error, GST_RESOURCE_ERROR, GST_RESOURCE_ERROR_FAILED,
-        _("DVB channel configuration file doesn't contain any channels"));
-    g_hash_table_unref (res);
-    return NULL;
-  }
+  g_set_error (error, GST_RESOURCE_ERROR, GST_RESOURCE_ERROR_FAILED,
+      _("DVB channel configuration file doesn't contain any channels"));
+  g_hash_table_unref (res);
+  return NULL;
 }
 
 static gboolean
 remove_channel_from_hash (gpointer key, gpointer value, gpointer user_data)
 {
-  if (key)
-    g_free (key);
+  g_free (key);
   if (value)
     g_hash_table_destroy ((GHashTable *) value);
   return TRUE;
diff --git a/sys/fbdev/Makefile.in b/sys/fbdev/Makefile.in
index 82a1d7d..ed2aafd 100644
--- a/sys/fbdev/Makefile.in
+++ b/sys/fbdev/Makefile.in
@@ -116,16 +116,15 @@
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
 	$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
-	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gsettings.m4 \
-	$(top_srcdir)/m4/gst-fionread.m4 $(top_srcdir)/m4/gst-sdl.m4 \
-	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
-	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
-	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libgcrypt.m4 \
-	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
-	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
-	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
-	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
-	$(top_srcdir)/configure.ac
+	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gst-fionread.m4 \
+	$(top_srcdir)/m4/gst-sdl.m4 $(top_srcdir)/m4/iconv.m4 \
+	$(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \
+	$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
+	$(top_srcdir)/m4/libgcrypt.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
+	$(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \
@@ -274,6 +273,8 @@
 CLUTTER_X11_LIBS = @CLUTTER_X11_LIBS@
 CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
+CUDA_CFLAGS = @CUDA_CFLAGS@
+CUDA_LIBS = @CUDA_LIBS@
 CURL_CFLAGS = @CURL_CFLAGS@
 CURL_LIBS = @CURL_LIBS@
 CXX = @CXX@
@@ -311,6 +312,8 @@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
+EGL_CFLAGS = @EGL_CFLAGS@
+EGL_LIBS = @EGL_LIBS@
 EGREP = @EGREP@
 ERROR_CFLAGS = @ERROR_CFLAGS@
 ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
@@ -319,7 +322,6 @@
 EXIF_CFLAGS = @EXIF_CFLAGS@
 EXIF_LIBS = @EXIF_LIBS@
 FAAC_LIBS = @FAAC_LIBS@
-FAAD_IS_NEAAC = @FAAD_IS_NEAAC@
 FAAD_LIBS = @FAAD_LIBS@
 FFLAGS = @FFLAGS@
 FGREP = @FGREP@
@@ -338,8 +340,9 @@
 GIO_LIBS = @GIO_LIBS@
 GIO_UNIX_CFLAGS = @GIO_UNIX_CFLAGS@
 GIO_UNIX_LIBS = @GIO_UNIX_LIBS@
+GLES2_CFLAGS = @GLES2_CFLAGS@
+GLES2_LIBS = @GLES2_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
-GLIB_COMPILE_SCHEMAS = @GLIB_COMPILE_SCHEMAS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
@@ -356,16 +359,17 @@
 GMODULE_NO_EXPORT_LIBS = @GMODULE_NO_EXPORT_LIBS@
 GMSGFMT = @GMSGFMT@
 GMSGFMT_015 = @GMSGFMT_015@
+GNUSTL_CFLAGS = @GNUSTL_CFLAGS@
+GNUSTL_LIBS = @GNUSTL_LIBS@
 GRAPHENE_CFLAGS = @GRAPHENE_CFLAGS@
 GRAPHENE_LIBS = @GRAPHENE_LIBS@
 GREP = @GREP@
-GSETTINGS_CFLAGS = @GSETTINGS_CFLAGS@
-GSETTINGS_DISABLE_SCHEMAS_COMPILE = @GSETTINGS_DISABLE_SCHEMAS_COMPILE@
-GSETTINGS_LIBS = @GSETTINGS_LIBS@
 GSM_LIBS = @GSM_LIBS@
 GSTPB_PLUGINS_DIR = @GSTPB_PLUGINS_DIR@
 GSTPB_PREFIX = @GSTPB_PREFIX@
 GST_AGE = @GST_AGE@
+GST_ALLOCATORS_CFLAGS = @GST_ALLOCATORS_CFLAGS@
+GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
 GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
 GST_API_VERSION = @GST_API_VERSION@
 GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
@@ -391,6 +395,8 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PBUTILS_CFLAGS = @GST_PBUTILS_CFLAGS@
+GST_PBUTILS_LIBS = @GST_PBUTILS_LIBS@
 GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BAD_CFLAGS = @GST_PLUGINS_BAD_CFLAGS@
@@ -416,6 +422,8 @@
 GST_PREFIX = @GST_PREFIX@
 GST_REVISION = @GST_REVISION@
 GST_TOOLS_DIR = @GST_TOOLS_DIR@
+GST_VIDEO_CFLAGS = @GST_VIDEO_CFLAGS@
+GST_VIDEO_LIBS = @GST_VIDEO_LIBS@
 GTK3_CFLAGS = @GTK3_CFLAGS@
 GTK3_GL_CFLAGS = @GTK3_GL_CFLAGS@
 GTK3_GL_LIBS = @GTK3_GL_LIBS@
@@ -517,6 +525,7 @@
 LTLIBICONV = @LTLIBICONV@
 LTLIBINTL = @LTLIBINTL@
 LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
 MANIFEST_TOOL = @MANIFEST_TOOL@
@@ -530,8 +539,6 @@
 MODPLUG_LIBS = @MODPLUG_LIBS@
 MPEG2ENC_CFLAGS = @MPEG2ENC_CFLAGS@
 MPEG2ENC_LIBS = @MPEG2ENC_LIBS@
-MPG123_CFLAGS = @MPG123_CFLAGS@
-MPG123_LIBS = @MPG123_LIBS@
 MPLEX_CFLAGS = @MPLEX_CFLAGS@
 MPLEX_LDFLAGS = @MPLEX_LDFLAGS@
 MPLEX_LIBS = @MPLEX_LIBS@
@@ -547,6 +554,8 @@
 NETTLE_LIBS = @NETTLE_LIBS@
 NM = @NM@
 NMEDIT = @NMEDIT@
+NVENCODE_CFLAGS = @NVENCODE_CFLAGS@
+NVENCODE_LIBS = @NVENCODE_LIBS@
 OBJC = @OBJC@
 OBJCDEPMODE = @OBJCDEPMODE@
 OBJCFLAGS = @OBJCFLAGS@
@@ -604,16 +613,18 @@
 PYTHON_PLATFORM = @PYTHON_PLATFORM@
 PYTHON_PREFIX = @PYTHON_PREFIX@
 PYTHON_VERSION = @PYTHON_VERSION@
+QT_ANDROID_CFLAGS = @QT_ANDROID_CFLAGS@
+QT_ANDROID_LIBS = @QT_ANDROID_LIBS@
 QT_CFLAGS = @QT_CFLAGS@
 QT_LIBS = @QT_LIBS@
+QT_MAC_CFLAGS = @QT_MAC_CFLAGS@
+QT_MAC_LIBS = @QT_MAC_LIBS@
 QT_WAYLAND_CFLAGS = @QT_WAYLAND_CFLAGS@
 QT_WAYLAND_LIBS = @QT_WAYLAND_LIBS@
 QT_X11_CFLAGS = @QT_X11_CFLAGS@
 QT_X11_LIBS = @QT_X11_LIBS@
 RANLIB = @RANLIB@
 RCC = @RCC@
-RSVG_2_36_2_CFLAGS = @RSVG_2_36_2_CFLAGS@
-RSVG_2_36_2_LIBS = @RSVG_2_36_2_LIBS@
 RSVG_CFLAGS = @RSVG_CFLAGS@
 RSVG_LIBS = @RSVG_LIBS@
 RTMP_CFLAGS = @RTMP_CFLAGS@
@@ -665,6 +676,7 @@
 VOAACENC_LIBS = @VOAACENC_LIBS@
 VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
 VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VULKAN_LIBS = @VULKAN_LIBS@
 WARNING_CFLAGS = @WARNING_CFLAGS@
 WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
 WARNING_OBJCFLAGS = @WARNING_OBJCFLAGS@
@@ -675,6 +687,7 @@
 WAYLAND_LIBS = @WAYLAND_LIBS@
 WEBP_CFLAGS = @WEBP_CFLAGS@
 WEBP_LIBS = @WEBP_LIBS@
+WGET = @WGET@
 WILDMIDI_CFLAGS = @WILDMIDI_CFLAGS@
 WILDMIDI_LIBS = @WILDMIDI_LIBS@
 WINKS_LIBS = @WINKS_LIBS@
@@ -684,6 +697,8 @@
 X11_LIBS = @X11_LIBS@
 X265_CFLAGS = @X265_CFLAGS@
 X265_LIBS = @X265_LIBS@
+XCB_CFLAGS = @XCB_CFLAGS@
+XCB_LIBS = @XCB_LIBS@
 XCOMPOSITE_CFLAGS = @XCOMPOSITE_CFLAGS@
 XCOMPOSITE_LIBS = @XCOMPOSITE_LIBS@
 XGETTEXT = @XGETTEXT@
@@ -721,7 +736,6 @@
 docdir = @docdir@
 dvidir = @dvidir@
 exec_prefix = @exec_prefix@
-gsettingsschemadir = @gsettingsschemadir@
 host = @host@
 host_alias = @host_alias@
 host_cpu = @host_cpu@
diff --git a/sys/fbdev/gstfbdevsink.c b/sys/fbdev/gstfbdevsink.c
index cc3913b..b559a7e 100644
--- a/sys/fbdev/gstfbdevsink.c
+++ b/sys/fbdev/gstfbdevsink.c
@@ -227,7 +227,7 @@
   gst_structure_get_int (structure, "height", &fbdevsink->height);
 
   /* calculate centering and scanlengths for the video */
-  fbdevsink->bytespp = fbdevsink->fixinfo.line_length / fbdevsink->varinfo.xres;
+  fbdevsink->bytespp = fbdevsink->fixinfo.line_length / fbdevsink->varinfo.xres_virtual;
 
   fbdevsink->cx = ((int) fbdevsink->varinfo.xres - fbdevsink->width) / 2;
   if (fbdevsink->cx < 0)
diff --git a/sys/linsys/Makefile.in b/sys/linsys/Makefile.in
index 11ca764..8b615df 100644
--- a/sys/linsys/Makefile.in
+++ b/sys/linsys/Makefile.in
@@ -116,16 +116,15 @@
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
 	$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
-	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gsettings.m4 \
-	$(top_srcdir)/m4/gst-fionread.m4 $(top_srcdir)/m4/gst-sdl.m4 \
-	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
-	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
-	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libgcrypt.m4 \
-	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
-	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
-	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
-	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
-	$(top_srcdir)/configure.ac
+	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gst-fionread.m4 \
+	$(top_srcdir)/m4/gst-sdl.m4 $(top_srcdir)/m4/iconv.m4 \
+	$(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \
+	$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
+	$(top_srcdir)/m4/libgcrypt.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
+	$(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \
@@ -276,6 +275,8 @@
 CLUTTER_X11_LIBS = @CLUTTER_X11_LIBS@
 CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
+CUDA_CFLAGS = @CUDA_CFLAGS@
+CUDA_LIBS = @CUDA_LIBS@
 CURL_CFLAGS = @CURL_CFLAGS@
 CURL_LIBS = @CURL_LIBS@
 CXX = @CXX@
@@ -313,6 +314,8 @@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
+EGL_CFLAGS = @EGL_CFLAGS@
+EGL_LIBS = @EGL_LIBS@
 EGREP = @EGREP@
 ERROR_CFLAGS = @ERROR_CFLAGS@
 ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
@@ -321,7 +324,6 @@
 EXIF_CFLAGS = @EXIF_CFLAGS@
 EXIF_LIBS = @EXIF_LIBS@
 FAAC_LIBS = @FAAC_LIBS@
-FAAD_IS_NEAAC = @FAAD_IS_NEAAC@
 FAAD_LIBS = @FAAD_LIBS@
 FFLAGS = @FFLAGS@
 FGREP = @FGREP@
@@ -340,8 +342,9 @@
 GIO_LIBS = @GIO_LIBS@
 GIO_UNIX_CFLAGS = @GIO_UNIX_CFLAGS@
 GIO_UNIX_LIBS = @GIO_UNIX_LIBS@
+GLES2_CFLAGS = @GLES2_CFLAGS@
+GLES2_LIBS = @GLES2_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
-GLIB_COMPILE_SCHEMAS = @GLIB_COMPILE_SCHEMAS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
@@ -358,16 +361,17 @@
 GMODULE_NO_EXPORT_LIBS = @GMODULE_NO_EXPORT_LIBS@
 GMSGFMT = @GMSGFMT@
 GMSGFMT_015 = @GMSGFMT_015@
+GNUSTL_CFLAGS = @GNUSTL_CFLAGS@
+GNUSTL_LIBS = @GNUSTL_LIBS@
 GRAPHENE_CFLAGS = @GRAPHENE_CFLAGS@
 GRAPHENE_LIBS = @GRAPHENE_LIBS@
 GREP = @GREP@
-GSETTINGS_CFLAGS = @GSETTINGS_CFLAGS@
-GSETTINGS_DISABLE_SCHEMAS_COMPILE = @GSETTINGS_DISABLE_SCHEMAS_COMPILE@
-GSETTINGS_LIBS = @GSETTINGS_LIBS@
 GSM_LIBS = @GSM_LIBS@
 GSTPB_PLUGINS_DIR = @GSTPB_PLUGINS_DIR@
 GSTPB_PREFIX = @GSTPB_PREFIX@
 GST_AGE = @GST_AGE@
+GST_ALLOCATORS_CFLAGS = @GST_ALLOCATORS_CFLAGS@
+GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
 GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
 GST_API_VERSION = @GST_API_VERSION@
 GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
@@ -393,6 +397,8 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PBUTILS_CFLAGS = @GST_PBUTILS_CFLAGS@
+GST_PBUTILS_LIBS = @GST_PBUTILS_LIBS@
 GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BAD_CFLAGS = @GST_PLUGINS_BAD_CFLAGS@
@@ -418,6 +424,8 @@
 GST_PREFIX = @GST_PREFIX@
 GST_REVISION = @GST_REVISION@
 GST_TOOLS_DIR = @GST_TOOLS_DIR@
+GST_VIDEO_CFLAGS = @GST_VIDEO_CFLAGS@
+GST_VIDEO_LIBS = @GST_VIDEO_LIBS@
 GTK3_CFLAGS = @GTK3_CFLAGS@
 GTK3_GL_CFLAGS = @GTK3_GL_CFLAGS@
 GTK3_GL_LIBS = @GTK3_GL_LIBS@
@@ -519,6 +527,7 @@
 LTLIBICONV = @LTLIBICONV@
 LTLIBINTL = @LTLIBINTL@
 LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
 MANIFEST_TOOL = @MANIFEST_TOOL@
@@ -532,8 +541,6 @@
 MODPLUG_LIBS = @MODPLUG_LIBS@
 MPEG2ENC_CFLAGS = @MPEG2ENC_CFLAGS@
 MPEG2ENC_LIBS = @MPEG2ENC_LIBS@
-MPG123_CFLAGS = @MPG123_CFLAGS@
-MPG123_LIBS = @MPG123_LIBS@
 MPLEX_CFLAGS = @MPLEX_CFLAGS@
 MPLEX_LDFLAGS = @MPLEX_LDFLAGS@
 MPLEX_LIBS = @MPLEX_LIBS@
@@ -549,6 +556,8 @@
 NETTLE_LIBS = @NETTLE_LIBS@
 NM = @NM@
 NMEDIT = @NMEDIT@
+NVENCODE_CFLAGS = @NVENCODE_CFLAGS@
+NVENCODE_LIBS = @NVENCODE_LIBS@
 OBJC = @OBJC@
 OBJCDEPMODE = @OBJCDEPMODE@
 OBJCFLAGS = @OBJCFLAGS@
@@ -606,16 +615,18 @@
 PYTHON_PLATFORM = @PYTHON_PLATFORM@
 PYTHON_PREFIX = @PYTHON_PREFIX@
 PYTHON_VERSION = @PYTHON_VERSION@
+QT_ANDROID_CFLAGS = @QT_ANDROID_CFLAGS@
+QT_ANDROID_LIBS = @QT_ANDROID_LIBS@
 QT_CFLAGS = @QT_CFLAGS@
 QT_LIBS = @QT_LIBS@
+QT_MAC_CFLAGS = @QT_MAC_CFLAGS@
+QT_MAC_LIBS = @QT_MAC_LIBS@
 QT_WAYLAND_CFLAGS = @QT_WAYLAND_CFLAGS@
 QT_WAYLAND_LIBS = @QT_WAYLAND_LIBS@
 QT_X11_CFLAGS = @QT_X11_CFLAGS@
 QT_X11_LIBS = @QT_X11_LIBS@
 RANLIB = @RANLIB@
 RCC = @RCC@
-RSVG_2_36_2_CFLAGS = @RSVG_2_36_2_CFLAGS@
-RSVG_2_36_2_LIBS = @RSVG_2_36_2_LIBS@
 RSVG_CFLAGS = @RSVG_CFLAGS@
 RSVG_LIBS = @RSVG_LIBS@
 RTMP_CFLAGS = @RTMP_CFLAGS@
@@ -667,6 +678,7 @@
 VOAACENC_LIBS = @VOAACENC_LIBS@
 VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
 VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VULKAN_LIBS = @VULKAN_LIBS@
 WARNING_CFLAGS = @WARNING_CFLAGS@
 WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
 WARNING_OBJCFLAGS = @WARNING_OBJCFLAGS@
@@ -677,6 +689,7 @@
 WAYLAND_LIBS = @WAYLAND_LIBS@
 WEBP_CFLAGS = @WEBP_CFLAGS@
 WEBP_LIBS = @WEBP_LIBS@
+WGET = @WGET@
 WILDMIDI_CFLAGS = @WILDMIDI_CFLAGS@
 WILDMIDI_LIBS = @WILDMIDI_LIBS@
 WINKS_LIBS = @WINKS_LIBS@
@@ -686,6 +699,8 @@
 X11_LIBS = @X11_LIBS@
 X265_CFLAGS = @X265_CFLAGS@
 X265_LIBS = @X265_LIBS@
+XCB_CFLAGS = @XCB_CFLAGS@
+XCB_LIBS = @XCB_LIBS@
 XCOMPOSITE_CFLAGS = @XCOMPOSITE_CFLAGS@
 XCOMPOSITE_LIBS = @XCOMPOSITE_LIBS@
 XGETTEXT = @XGETTEXT@
@@ -723,7 +738,6 @@
 docdir = @docdir@
 dvidir = @dvidir@
 exec_prefix = @exec_prefix@
-gsettingsschemadir = @gsettingsschemadir@
 host = @host@
 host_alias = @host_alias@
 host_cpu = @host_cpu@
diff --git a/sys/nvenc/Makefile.am b/sys/nvenc/Makefile.am
new file mode 100644
index 0000000..68c9a2c
--- /dev/null
+++ b/sys/nvenc/Makefile.am
@@ -0,0 +1,33 @@
+plugin_LTLIBRARIES = libgstnvenc.la
+
+libgstnvenc_la_SOURCES = \
+	gstnvenc.c \
+	gstnvbaseenc.c \
+	gstnvh264enc.c
+
+noinst_HEADERS = \
+	gstnvenc.h \
+	gstnvbaseenc.h \
+	gstnvh264enc.h
+
+libgstnvenc_la_CFLAGS = \
+	-I$(top_srcdir)/gst-libs \
+	$(GST_CFLAGS) \
+	$(GST_PBUTILS_CFLAGS) \
+	$(GST_VIDEO_CFLAGS) \
+	$(CUDA_CFLAGS) \
+	$(NVENCODE_CFLAGS)
+
+libgstnvenc_la_LIBADD = \
+	$(GST_LIBS) \
+	$(GST_PBUTILS_LIBS) \
+	$(GST_VIDEO_LIBS) \
+	$(CUDA_LIBS) \
+	$(NVENCODE_LIBS)
+
+if USE_NVENC_GST_GL
+libgstnvenc_la_LIBADD += \
+	$(top_builddir)/gst-libs/gst/gl/libgstgl-$(GST_API_VERSION).la
+endif
+libgstnvenc_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS)
+libgstnvenc_la_LIBTOOLFLAGS = $(GST_PLUGIN_LIBTOOLFLAGS)
diff --git a/gst/rtp/Makefile.in b/sys/nvenc/Makefile.in
similarity index 84%
rename from gst/rtp/Makefile.in
rename to sys/nvenc/Makefile.in
index 76ae1e0..186447c 100644
--- a/gst/rtp/Makefile.in
+++ b/sys/nvenc/Makefile.in
@@ -90,7 +90,10 @@
 build_triplet = @build@
 host_triplet = @host@
 target_triplet = @target@
-subdir = gst/rtp
+@USE_NVENC_GST_GL_TRUE@am__append_1 = \
+@USE_NVENC_GST_GL_TRUE@	$(top_builddir)/gst-libs/gst/gl/libgstgl-$(GST_API_VERSION).la
+
+subdir = sys/nvenc
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
 am__aclocal_m4_deps = $(top_srcdir)/common/m4/as-ac-expand.m4 \
 	$(top_srcdir)/common/m4/as-auto-alt.m4 \
@@ -116,16 +119,15 @@
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
 	$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
-	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gsettings.m4 \
-	$(top_srcdir)/m4/gst-fionread.m4 $(top_srcdir)/m4/gst-sdl.m4 \
-	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
-	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
-	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libgcrypt.m4 \
-	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
-	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
-	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
-	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
-	$(top_srcdir)/configure.ac
+	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gst-fionread.m4 \
+	$(top_srcdir)/m4/gst-sdl.m4 $(top_srcdir)/m4/iconv.m4 \
+	$(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \
+	$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
+	$(top_srcdir)/m4/libgcrypt.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
+	$(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \
@@ -164,22 +166,20 @@
 am__installdirs = "$(DESTDIR)$(plugindir)"
 LTLIBRARIES = $(plugin_LTLIBRARIES)
 am__DEPENDENCIES_1 =
-libgstrtpbad_la_DEPENDENCIES = $(am__DEPENDENCIES_1) \
-	$(top_builddir)/gst-libs/gst/codecparsers/libgstcodecparsers-$(GST_API_VERSION).la \
+libgstnvenc_la_DEPENDENCIES = $(am__DEPENDENCIES_1) \
 	$(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
-	$(am__DEPENDENCIES_1)
-am_libgstrtpbad_la_OBJECTS = libgstrtpbad_la-gstrtp.lo \
-	libgstrtpbad_la-gstrtph265depay.lo \
-	libgstrtpbad_la-gstrtph265pay.lo
-libgstrtpbad_la_OBJECTS = $(am_libgstrtpbad_la_OBJECTS)
+	$(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) $(am__append_1)
+am_libgstnvenc_la_OBJECTS = libgstnvenc_la-gstnvenc.lo \
+	libgstnvenc_la-gstnvbaseenc.lo libgstnvenc_la-gstnvh264enc.lo
+libgstnvenc_la_OBJECTS = $(am_libgstnvenc_la_OBJECTS)
 AM_V_lt = $(am__v_lt_@AM_V@)
 am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
 am__v_lt_0 = --silent
 am__v_lt_1 = 
-libgstrtpbad_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
-	$(libgstrtpbad_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link \
-	$(CCLD) $(libgstrtpbad_la_CFLAGS) $(CFLAGS) \
-	$(libgstrtpbad_la_LDFLAGS) $(LDFLAGS) -o $@
+libgstnvenc_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
+	$(libgstnvenc_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link \
+	$(CCLD) $(libgstnvenc_la_CFLAGS) $(CFLAGS) \
+	$(libgstnvenc_la_LDFLAGS) $(LDFLAGS) -o $@
 AM_V_P = $(am__v_P_@AM_V@)
 am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
 am__v_P_0 = false
@@ -214,8 +214,8 @@
 am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@)
 am__v_CCLD_0 = @echo "  CCLD    " $@;
 am__v_CCLD_1 = 
-SOURCES = $(libgstrtpbad_la_SOURCES)
-DIST_SOURCES = $(libgstrtpbad_la_SOURCES)
+SOURCES = $(libgstnvenc_la_SOURCES)
+DIST_SOURCES = $(libgstnvenc_la_SOURCES)
 am__can_run_installinfo = \
   case $$AM_UPDATE_INFO_DIR in \
     n|no|NO) false;; \
@@ -241,7 +241,8 @@
   done | $(am__uniquify_input)`
 ETAGS = etags
 CTAGS = ctags
-am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp
+am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp README \
+	TODO
 DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
 ACLOCAL = @ACLOCAL@
 ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@
@@ -278,6 +279,8 @@
 CLUTTER_X11_LIBS = @CLUTTER_X11_LIBS@
 CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
+CUDA_CFLAGS = @CUDA_CFLAGS@
+CUDA_LIBS = @CUDA_LIBS@
 CURL_CFLAGS = @CURL_CFLAGS@
 CURL_LIBS = @CURL_LIBS@
 CXX = @CXX@
@@ -315,6 +318,8 @@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
+EGL_CFLAGS = @EGL_CFLAGS@
+EGL_LIBS = @EGL_LIBS@
 EGREP = @EGREP@
 ERROR_CFLAGS = @ERROR_CFLAGS@
 ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
@@ -323,7 +328,6 @@
 EXIF_CFLAGS = @EXIF_CFLAGS@
 EXIF_LIBS = @EXIF_LIBS@
 FAAC_LIBS = @FAAC_LIBS@
-FAAD_IS_NEAAC = @FAAD_IS_NEAAC@
 FAAD_LIBS = @FAAD_LIBS@
 FFLAGS = @FFLAGS@
 FGREP = @FGREP@
@@ -342,8 +346,9 @@
 GIO_LIBS = @GIO_LIBS@
 GIO_UNIX_CFLAGS = @GIO_UNIX_CFLAGS@
 GIO_UNIX_LIBS = @GIO_UNIX_LIBS@
+GLES2_CFLAGS = @GLES2_CFLAGS@
+GLES2_LIBS = @GLES2_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
-GLIB_COMPILE_SCHEMAS = @GLIB_COMPILE_SCHEMAS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
@@ -360,16 +365,17 @@
 GMODULE_NO_EXPORT_LIBS = @GMODULE_NO_EXPORT_LIBS@
 GMSGFMT = @GMSGFMT@
 GMSGFMT_015 = @GMSGFMT_015@
+GNUSTL_CFLAGS = @GNUSTL_CFLAGS@
+GNUSTL_LIBS = @GNUSTL_LIBS@
 GRAPHENE_CFLAGS = @GRAPHENE_CFLAGS@
 GRAPHENE_LIBS = @GRAPHENE_LIBS@
 GREP = @GREP@
-GSETTINGS_CFLAGS = @GSETTINGS_CFLAGS@
-GSETTINGS_DISABLE_SCHEMAS_COMPILE = @GSETTINGS_DISABLE_SCHEMAS_COMPILE@
-GSETTINGS_LIBS = @GSETTINGS_LIBS@
 GSM_LIBS = @GSM_LIBS@
 GSTPB_PLUGINS_DIR = @GSTPB_PLUGINS_DIR@
 GSTPB_PREFIX = @GSTPB_PREFIX@
 GST_AGE = @GST_AGE@
+GST_ALLOCATORS_CFLAGS = @GST_ALLOCATORS_CFLAGS@
+GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
 GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
 GST_API_VERSION = @GST_API_VERSION@
 GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
@@ -395,6 +401,8 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PBUTILS_CFLAGS = @GST_PBUTILS_CFLAGS@
+GST_PBUTILS_LIBS = @GST_PBUTILS_LIBS@
 GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BAD_CFLAGS = @GST_PLUGINS_BAD_CFLAGS@
@@ -420,6 +428,8 @@
 GST_PREFIX = @GST_PREFIX@
 GST_REVISION = @GST_REVISION@
 GST_TOOLS_DIR = @GST_TOOLS_DIR@
+GST_VIDEO_CFLAGS = @GST_VIDEO_CFLAGS@
+GST_VIDEO_LIBS = @GST_VIDEO_LIBS@
 GTK3_CFLAGS = @GTK3_CFLAGS@
 GTK3_GL_CFLAGS = @GTK3_GL_CFLAGS@
 GTK3_GL_LIBS = @GTK3_GL_LIBS@
@@ -521,6 +531,7 @@
 LTLIBICONV = @LTLIBICONV@
 LTLIBINTL = @LTLIBINTL@
 LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
 MANIFEST_TOOL = @MANIFEST_TOOL@
@@ -534,8 +545,6 @@
 MODPLUG_LIBS = @MODPLUG_LIBS@
 MPEG2ENC_CFLAGS = @MPEG2ENC_CFLAGS@
 MPEG2ENC_LIBS = @MPEG2ENC_LIBS@
-MPG123_CFLAGS = @MPG123_CFLAGS@
-MPG123_LIBS = @MPG123_LIBS@
 MPLEX_CFLAGS = @MPLEX_CFLAGS@
 MPLEX_LDFLAGS = @MPLEX_LDFLAGS@
 MPLEX_LIBS = @MPLEX_LIBS@
@@ -551,6 +560,8 @@
 NETTLE_LIBS = @NETTLE_LIBS@
 NM = @NM@
 NMEDIT = @NMEDIT@
+NVENCODE_CFLAGS = @NVENCODE_CFLAGS@
+NVENCODE_LIBS = @NVENCODE_LIBS@
 OBJC = @OBJC@
 OBJCDEPMODE = @OBJCDEPMODE@
 OBJCFLAGS = @OBJCFLAGS@
@@ -608,16 +619,18 @@
 PYTHON_PLATFORM = @PYTHON_PLATFORM@
 PYTHON_PREFIX = @PYTHON_PREFIX@
 PYTHON_VERSION = @PYTHON_VERSION@
+QT_ANDROID_CFLAGS = @QT_ANDROID_CFLAGS@
+QT_ANDROID_LIBS = @QT_ANDROID_LIBS@
 QT_CFLAGS = @QT_CFLAGS@
 QT_LIBS = @QT_LIBS@
+QT_MAC_CFLAGS = @QT_MAC_CFLAGS@
+QT_MAC_LIBS = @QT_MAC_LIBS@
 QT_WAYLAND_CFLAGS = @QT_WAYLAND_CFLAGS@
 QT_WAYLAND_LIBS = @QT_WAYLAND_LIBS@
 QT_X11_CFLAGS = @QT_X11_CFLAGS@
 QT_X11_LIBS = @QT_X11_LIBS@
 RANLIB = @RANLIB@
 RCC = @RCC@
-RSVG_2_36_2_CFLAGS = @RSVG_2_36_2_CFLAGS@
-RSVG_2_36_2_LIBS = @RSVG_2_36_2_LIBS@
 RSVG_CFLAGS = @RSVG_CFLAGS@
 RSVG_LIBS = @RSVG_LIBS@
 RTMP_CFLAGS = @RTMP_CFLAGS@
@@ -669,6 +682,7 @@
 VOAACENC_LIBS = @VOAACENC_LIBS@
 VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
 VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VULKAN_LIBS = @VULKAN_LIBS@
 WARNING_CFLAGS = @WARNING_CFLAGS@
 WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
 WARNING_OBJCFLAGS = @WARNING_OBJCFLAGS@
@@ -679,6 +693,7 @@
 WAYLAND_LIBS = @WAYLAND_LIBS@
 WEBP_CFLAGS = @WEBP_CFLAGS@
 WEBP_LIBS = @WEBP_LIBS@
+WGET = @WGET@
 WILDMIDI_CFLAGS = @WILDMIDI_CFLAGS@
 WILDMIDI_LIBS = @WILDMIDI_LIBS@
 WINKS_LIBS = @WINKS_LIBS@
@@ -688,6 +703,8 @@
 X11_LIBS = @X11_LIBS@
 X265_CFLAGS = @X265_CFLAGS@
 X265_LIBS = @X265_LIBS@
+XCB_CFLAGS = @XCB_CFLAGS@
+XCB_LIBS = @XCB_LIBS@
 XCOMPOSITE_CFLAGS = @XCOMPOSITE_CFLAGS@
 XCOMPOSITE_LIBS = @XCOMPOSITE_LIBS@
 XGETTEXT = @XGETTEXT@
@@ -725,7 +742,6 @@
 docdir = @docdir@
 dvidir = @dvidir@
 exec_prefix = @exec_prefix@
-gsettingsschemadir = @gsettingsschemadir@
 host = @host@
 host_alias = @host_alias@
 host_cpu = @host_cpu@
@@ -765,31 +781,30 @@
 top_builddir = @top_builddir@
 top_srcdir = @top_srcdir@
 wayland_scanner = @wayland_scanner@
-plugin_LTLIBRARIES = libgstrtpbad.la
-libgstrtpbad_la_SOURCES = \
-	gstrtp.c \
-	gstrtph265depay.c \
-	gstrtph265pay.c
+plugin_LTLIBRARIES = libgstnvenc.la
+libgstnvenc_la_SOURCES = \
+	gstnvenc.c \
+	gstnvbaseenc.c \
+	gstnvh264enc.c
 
-libgstrtpbad_la_CFLAGS = $(GST_PLUGINS_BAD_CFLAGS) $(GST_PLUGINS_BASE_CFLAGS) $(GST_BASE_CFLAGS) \
-	$(GST_CFLAGS)
-
-libgstrtpbad_la_LIBADD = $(GST_PLUGINS_BASE_LIBS) \
-	$(top_builddir)/gst-libs/gst/codecparsers/libgstcodecparsers-$(GST_API_VERSION).la \
-	-lgstaudio-@GST_API_VERSION@ \
-	-lgstvideo-@GST_API_VERSION@ \
-	-lgsttag-@GST_API_VERSION@ \
-	-lgstrtp-@GST_API_VERSION@ \
-	-lgstpbutils-@GST_API_VERSION@ \
-	$(GST_BASE_LIBS) $(GST_LIBS) \
-	$(LIBM)
-
-libgstrtpbad_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS)
-libgstrtpbad_la_LIBTOOLFLAGS = $(GST_PLUGIN_LIBTOOLFLAGS)
 noinst_HEADERS = \
-	gstrtph265depay.h \
-	gstrtph265pay.h
+	gstnvenc.h \
+	gstnvbaseenc.h \
+	gstnvh264enc.h
 
+libgstnvenc_la_CFLAGS = \
+	-I$(top_srcdir)/gst-libs \
+	$(GST_CFLAGS) \
+	$(GST_PBUTILS_CFLAGS) \
+	$(GST_VIDEO_CFLAGS) \
+	$(CUDA_CFLAGS) \
+	$(NVENCODE_CFLAGS)
+
+libgstnvenc_la_LIBADD = $(GST_LIBS) $(GST_PBUTILS_LIBS) \
+	$(GST_VIDEO_LIBS) $(CUDA_LIBS) $(NVENCODE_LIBS) \
+	$(am__append_1)
+libgstnvenc_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS)
+libgstnvenc_la_LIBTOOLFLAGS = $(GST_PLUGIN_LIBTOOLFLAGS)
 all: all-am
 
 .SUFFIXES:
@@ -803,9 +818,9 @@
 	      exit 1;; \
 	  esac; \
 	done; \
-	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu gst/rtp/Makefile'; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu sys/nvenc/Makefile'; \
 	$(am__cd) $(top_srcdir) && \
-	  $(AUTOMAKE) --gnu gst/rtp/Makefile
+	  $(AUTOMAKE) --gnu sys/nvenc/Makefile
 Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
 	@case '$?' in \
 	  *config.status*) \
@@ -859,8 +874,8 @@
 	  rm -f $${locs}; \
 	}
 
-libgstrtpbad.la: $(libgstrtpbad_la_OBJECTS) $(libgstrtpbad_la_DEPENDENCIES) $(EXTRA_libgstrtpbad_la_DEPENDENCIES) 
-	$(AM_V_CCLD)$(libgstrtpbad_la_LINK) -rpath $(plugindir) $(libgstrtpbad_la_OBJECTS) $(libgstrtpbad_la_LIBADD) $(LIBS)
+libgstnvenc.la: $(libgstnvenc_la_OBJECTS) $(libgstnvenc_la_DEPENDENCIES) $(EXTRA_libgstnvenc_la_DEPENDENCIES) 
+	$(AM_V_CCLD)$(libgstnvenc_la_LINK) -rpath $(plugindir) $(libgstnvenc_la_OBJECTS) $(libgstnvenc_la_LIBADD) $(LIBS)
 
 mostlyclean-compile:
 	-rm -f *.$(OBJEXT)
@@ -868,9 +883,9 @@
 distclean-compile:
 	-rm -f *.tab.c
 
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstrtpbad_la-gstrtp.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstrtpbad_la-gstrtph265depay.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstrtpbad_la-gstrtph265pay.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstnvenc_la-gstnvbaseenc.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstnvenc_la-gstnvenc.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstnvenc_la-gstnvh264enc.Plo@am__quote@
 
 .c.o:
 @am__fastdepCC_TRUE@	$(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\
@@ -896,26 +911,26 @@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $<
 
-libgstrtpbad_la-gstrtp.lo: gstrtp.c
-@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstrtpbad_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrtpbad_la_CFLAGS) $(CFLAGS) -MT libgstrtpbad_la-gstrtp.lo -MD -MP -MF $(DEPDIR)/libgstrtpbad_la-gstrtp.Tpo -c -o libgstrtpbad_la-gstrtp.lo `test -f 'gstrtp.c' || echo '$(srcdir)/'`gstrtp.c
-@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstrtpbad_la-gstrtp.Tpo $(DEPDIR)/libgstrtpbad_la-gstrtp.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='gstrtp.c' object='libgstrtpbad_la-gstrtp.lo' libtool=yes @AMDEPBACKSLASH@
+libgstnvenc_la-gstnvenc.lo: gstnvenc.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstnvenc_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstnvenc_la_CFLAGS) $(CFLAGS) -MT libgstnvenc_la-gstnvenc.lo -MD -MP -MF $(DEPDIR)/libgstnvenc_la-gstnvenc.Tpo -c -o libgstnvenc_la-gstnvenc.lo `test -f 'gstnvenc.c' || echo '$(srcdir)/'`gstnvenc.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstnvenc_la-gstnvenc.Tpo $(DEPDIR)/libgstnvenc_la-gstnvenc.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='gstnvenc.c' object='libgstnvenc_la-gstnvenc.lo' libtool=yes @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstrtpbad_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrtpbad_la_CFLAGS) $(CFLAGS) -c -o libgstrtpbad_la-gstrtp.lo `test -f 'gstrtp.c' || echo '$(srcdir)/'`gstrtp.c
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstnvenc_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstnvenc_la_CFLAGS) $(CFLAGS) -c -o libgstnvenc_la-gstnvenc.lo `test -f 'gstnvenc.c' || echo '$(srcdir)/'`gstnvenc.c
 
-libgstrtpbad_la-gstrtph265depay.lo: gstrtph265depay.c
-@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstrtpbad_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrtpbad_la_CFLAGS) $(CFLAGS) -MT libgstrtpbad_la-gstrtph265depay.lo -MD -MP -MF $(DEPDIR)/libgstrtpbad_la-gstrtph265depay.Tpo -c -o libgstrtpbad_la-gstrtph265depay.lo `test -f 'gstrtph265depay.c' || echo '$(srcdir)/'`gstrtph265depay.c
-@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstrtpbad_la-gstrtph265depay.Tpo $(DEPDIR)/libgstrtpbad_la-gstrtph265depay.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='gstrtph265depay.c' object='libgstrtpbad_la-gstrtph265depay.lo' libtool=yes @AMDEPBACKSLASH@
+libgstnvenc_la-gstnvbaseenc.lo: gstnvbaseenc.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstnvenc_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstnvenc_la_CFLAGS) $(CFLAGS) -MT libgstnvenc_la-gstnvbaseenc.lo -MD -MP -MF $(DEPDIR)/libgstnvenc_la-gstnvbaseenc.Tpo -c -o libgstnvenc_la-gstnvbaseenc.lo `test -f 'gstnvbaseenc.c' || echo '$(srcdir)/'`gstnvbaseenc.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstnvenc_la-gstnvbaseenc.Tpo $(DEPDIR)/libgstnvenc_la-gstnvbaseenc.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='gstnvbaseenc.c' object='libgstnvenc_la-gstnvbaseenc.lo' libtool=yes @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstrtpbad_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrtpbad_la_CFLAGS) $(CFLAGS) -c -o libgstrtpbad_la-gstrtph265depay.lo `test -f 'gstrtph265depay.c' || echo '$(srcdir)/'`gstrtph265depay.c
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstnvenc_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstnvenc_la_CFLAGS) $(CFLAGS) -c -o libgstnvenc_la-gstnvbaseenc.lo `test -f 'gstnvbaseenc.c' || echo '$(srcdir)/'`gstnvbaseenc.c
 
-libgstrtpbad_la-gstrtph265pay.lo: gstrtph265pay.c
-@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstrtpbad_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrtpbad_la_CFLAGS) $(CFLAGS) -MT libgstrtpbad_la-gstrtph265pay.lo -MD -MP -MF $(DEPDIR)/libgstrtpbad_la-gstrtph265pay.Tpo -c -o libgstrtpbad_la-gstrtph265pay.lo `test -f 'gstrtph265pay.c' || echo '$(srcdir)/'`gstrtph265pay.c
-@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstrtpbad_la-gstrtph265pay.Tpo $(DEPDIR)/libgstrtpbad_la-gstrtph265pay.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='gstrtph265pay.c' object='libgstrtpbad_la-gstrtph265pay.lo' libtool=yes @AMDEPBACKSLASH@
+libgstnvenc_la-gstnvh264enc.lo: gstnvh264enc.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstnvenc_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstnvenc_la_CFLAGS) $(CFLAGS) -MT libgstnvenc_la-gstnvh264enc.lo -MD -MP -MF $(DEPDIR)/libgstnvenc_la-gstnvh264enc.Tpo -c -o libgstnvenc_la-gstnvh264enc.lo `test -f 'gstnvh264enc.c' || echo '$(srcdir)/'`gstnvh264enc.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstnvenc_la-gstnvh264enc.Tpo $(DEPDIR)/libgstnvenc_la-gstnvh264enc.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='gstnvh264enc.c' object='libgstnvenc_la-gstnvh264enc.lo' libtool=yes @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstrtpbad_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrtpbad_la_CFLAGS) $(CFLAGS) -c -o libgstrtpbad_la-gstrtph265pay.lo `test -f 'gstrtph265pay.c' || echo '$(srcdir)/'`gstrtph265pay.c
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstnvenc_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstnvenc_la_CFLAGS) $(CFLAGS) -c -o libgstnvenc_la-gstnvh264enc.lo `test -f 'gstnvh264enc.c' || echo '$(srcdir)/'`gstnvh264enc.c
 
 mostlyclean-libtool:
 	-rm -f *.lo
diff --git a/sys/nvenc/README b/sys/nvenc/README
new file mode 100644
index 0000000..62a52d1
--- /dev/null
+++ b/sys/nvenc/README
@@ -0,0 +1,30 @@
+This plugin is intended for use with NVIDIA hardware.  Specifically, the NVENC
+block available in recent NVIDIA GPU hardware.  This is provided by a
+libnvidia-encode library provided by NVIDIA graphic drivers.
+
+Requirements
+------------
+Cuda > 6.5
+NVENC 5.0
+
+See https://developer.nvidia.com/nvidia-video-codec-sdk for a list of
+supported GPU's.
+
+Building
+--------
+1. Retrieve the NVENC SDK
+from https://developer.nvidia.com/nvidia-video-codec-sdk
+- http://developer.download.nvidia.com/compute/nvenc/v5.0/nvenc_5.0.1_sdk.zip
+2. unzip this somewhere and retreive or note the location of the
+nvEncodeAPI.h under nvenc_api-5.0.1/Samples/common/inc/
+3. Retreive a version of cuda from
+https://developer.nvidia.com/cuda-downloads and install somewhere noting
+the installation prefix (typically /opt/cuda or /usr/local/cuda)
+4. Now that the dependencies are sorted, there are a couple of
+environment variables and/or or configure arguments that are needed to
+detect the necessary libraries/headers.
+
+More information is available from the following locations
+
+[1] - https://developer.nvidia.com/cuda-downloads
+[2] - https://developer.nvidia.com/nvidia-video-codec-sdk 
diff --git a/sys/nvenc/TODO b/sys/nvenc/TODO
new file mode 100644
index 0000000..27422ce
--- /dev/null
+++ b/sys/nvenc/TODO
@@ -0,0 +1,11 @@
+- check supported encoding formats (H.264 etc.), don't assume H.264
+
+- check performance (time taken) of first cuInit()
+
+- provide buffer pool
+
+- more formats
+
+- renegotiation
+
+- support outputting of AVC as well as byte-stream, negotiate automatically
diff --git a/sys/nvenc/gstnvbaseenc.c b/sys/nvenc/gstnvbaseenc.c
new file mode 100644
index 0000000..1bbdfe3
--- /dev/null
+++ b/sys/nvenc/gstnvbaseenc.c
@@ -0,0 +1,1594 @@
+/* GStreamer NVENC plugin
+ * Copyright (C) 2015 Centricular Ltd
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include "gstnvbaseenc.h"
+
+#include <gst/pbutils/codec-utils.h>
+
+#include <string.h>
+
+#if HAVE_NVENC_GST_GL
+#include <cuda.h>
+#include <cuda_runtime_api.h>
+#include <cuda_gl_interop.h>
+#include <gst/gl/gl.h>
+#endif
+
+/* TODO:
+ *  - reset last_flow on FLUSH_STOP (seeking)
+ */
+
+#define N_BUFFERS_PER_FRAME 1
+#define SUPPORTED_GL_APIS GST_GL_API_OPENGL3
+
+/* magic pointer value we can put in the async queue to signal shut down */
+#define SHUTDOWN_COOKIE ((gpointer)GINT_TO_POINTER (1))
+
+#define parent_class gst_nv_base_enc_parent_class
+G_DEFINE_ABSTRACT_TYPE (GstNvBaseEnc, gst_nv_base_enc, GST_TYPE_VIDEO_ENCODER);
+
+static GstStaticPadTemplate sink_factory = GST_STATIC_PAD_TEMPLATE ("sink",
+    GST_PAD_SINK,
+    GST_PAD_ALWAYS,
+    GST_STATIC_CAPS ("video/x-raw, " "format = (string) NV12, " // TODO: I420, YV12, Y444 support
+        "width = (int) [ 16, 4096 ], height = (int) [ 16, 2160 ], "
+        "framerate = (fraction) [0, MAX],"
+        "interlace-mode = { progressive, mixed, interleaved } "
+#if HAVE_NVENC_GST_GL
+        ";"
+        "video/x-raw(memory:GLMemory), "
+        "format = (string) { NV12, Y444 }, "
+        "width = (int) [ 16, 4096 ], height = (int) [ 16, 2160 ], "
+        "framerate = (fraction) [0, MAX],"
+        "interlace-mode = { progressive, mixed, interleaved } "
+#endif
+    ));
+
+enum
+{
+  PROP_0,
+  PROP_DEVICE_ID,
+};
+
+/* This lock is needed to prevent the situation where multiple encoders are
+ * initialised at the same time which appears to cause excessive CPU usage over
+ * some period of time. */
+G_LOCK_DEFINE_STATIC (initialization_lock);
+
+#if HAVE_NVENC_GST_GL
+struct gl_input_resource
+{
+  GstGLMemory *gl_mem[GST_VIDEO_MAX_PLANES];
+  struct cudaGraphicsResource *cuda_texture;
+  gpointer cuda_plane_pointers[GST_VIDEO_MAX_PLANES];
+  gpointer cuda_pointer;
+  gsize cuda_stride;
+  gsize cuda_num_bytes;
+  NV_ENC_REGISTER_RESOURCE nv_resource;
+  NV_ENC_MAP_INPUT_RESOURCE nv_mapped_resource;
+};
+#endif
+
+struct frame_state
+{
+  gint n_buffers;
+  gpointer in_bufs[N_BUFFERS_PER_FRAME];
+  gpointer out_bufs[N_BUFFERS_PER_FRAME];
+};
+
+static gboolean gst_nv_base_enc_open (GstVideoEncoder * enc);
+static gboolean gst_nv_base_enc_close (GstVideoEncoder * enc);
+static gboolean gst_nv_base_enc_start (GstVideoEncoder * enc);
+static gboolean gst_nv_base_enc_stop (GstVideoEncoder * enc);
+static void gst_nv_base_enc_set_context (GstElement * element,
+    GstContext * context);
+static gboolean gst_nv_base_enc_sink_query (GstVideoEncoder * enc,
+    GstQuery * query);
+static gboolean gst_nv_base_enc_set_format (GstVideoEncoder * enc,
+    GstVideoCodecState * state);
+static GstFlowReturn gst_nv_base_enc_handle_frame (GstVideoEncoder * enc,
+    GstVideoCodecFrame * frame);
+static void gst_nv_base_enc_free_buffers (GstNvBaseEnc * nvenc);
+static GstFlowReturn gst_nv_base_enc_finish (GstVideoEncoder * enc);
+static void gst_nv_base_enc_set_property (GObject * object, guint prop_id,
+    const GValue * value, GParamSpec * pspec);
+static void gst_nv_base_enc_get_property (GObject * object, guint prop_id,
+    GValue * value, GParamSpec * pspec);
+static void gst_nv_base_enc_finalize (GObject * obj);
+static GstCaps *gst_nv_base_enc_getcaps (GstVideoEncoder * enc,
+    GstCaps * filter);
+
+static void
+gst_nv_base_enc_class_init (GstNvBaseEncClass * klass)
+{
+  GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
+  GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
+  GstVideoEncoderClass *videoenc_class = GST_VIDEO_ENCODER_CLASS (klass);
+
+  gobject_class->set_property = gst_nv_base_enc_set_property;
+  gobject_class->get_property = gst_nv_base_enc_get_property;
+  gobject_class->finalize = gst_nv_base_enc_finalize;
+
+  element_class->set_context = GST_DEBUG_FUNCPTR (gst_nv_base_enc_set_context);
+
+  videoenc_class->open = GST_DEBUG_FUNCPTR (gst_nv_base_enc_open);
+  videoenc_class->close = GST_DEBUG_FUNCPTR (gst_nv_base_enc_close);
+
+  videoenc_class->start = GST_DEBUG_FUNCPTR (gst_nv_base_enc_start);
+  videoenc_class->stop = GST_DEBUG_FUNCPTR (gst_nv_base_enc_stop);
+
+  videoenc_class->set_format = GST_DEBUG_FUNCPTR (gst_nv_base_enc_set_format);
+  videoenc_class->getcaps = GST_DEBUG_FUNCPTR (gst_nv_base_enc_getcaps);
+  videoenc_class->handle_frame =
+      GST_DEBUG_FUNCPTR (gst_nv_base_enc_handle_frame);
+  videoenc_class->finish = GST_DEBUG_FUNCPTR (gst_nv_base_enc_finish);
+  videoenc_class->sink_query = GST_DEBUG_FUNCPTR (gst_nv_base_enc_sink_query);
+
+  gst_element_class_add_pad_template (element_class,
+      gst_static_pad_template_get (&sink_factory));
+
+  g_object_class_install_property (gobject_class, PROP_DEVICE_ID,
+      g_param_spec_uint ("cuda-device-id",
+          "Cuda Device ID",
+          "Set the GPU device to use for operations",
+          0, G_MAXUINT, 0, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+}
+
+static gboolean
+_get_supported_input_formats (GstNvBaseEnc * nvenc)
+{
+  GstNvBaseEncClass *nvenc_class = GST_NV_BASE_ENC_GET_CLASS (nvenc);
+  guint64 format_mask = 0;
+  uint32_t i, num = 0;
+  NV_ENC_BUFFER_FORMAT formats[64];
+  GValue list = G_VALUE_INIT;
+  GValue val = G_VALUE_INIT;
+
+  NvEncGetInputFormats (nvenc->encoder, nvenc_class->codec_id, formats,
+      G_N_ELEMENTS (formats), &num);
+
+  for (i = 0; i < num; ++i) {
+    GST_INFO_OBJECT (nvenc, "input format: 0x%08x", formats[i]);
+    /* Apparently we can just ignore the tiled formats and can feed
+     * it the respective untiled planar format instead ?! */
+    switch (formats[i]) {
+      case NV_ENC_BUFFER_FORMAT_NV12_PL:
+      case NV_ENC_BUFFER_FORMAT_NV12_TILED16x16:
+      case NV_ENC_BUFFER_FORMAT_NV12_TILED64x16:
+        format_mask |= (1 << GST_VIDEO_FORMAT_NV12);
+        break;
+      case NV_ENC_BUFFER_FORMAT_YV12_PL:
+      case NV_ENC_BUFFER_FORMAT_YV12_TILED16x16:
+      case NV_ENC_BUFFER_FORMAT_YV12_TILED64x16:
+        format_mask |= (1 << GST_VIDEO_FORMAT_YV12);
+        break;
+      case NV_ENC_BUFFER_FORMAT_IYUV_PL:
+      case NV_ENC_BUFFER_FORMAT_IYUV_TILED16x16:
+      case NV_ENC_BUFFER_FORMAT_IYUV_TILED64x16:
+        format_mask |= (1 << GST_VIDEO_FORMAT_I420);
+        break;
+      case NV_ENC_BUFFER_FORMAT_YUV444_PL:
+      case NV_ENC_BUFFER_FORMAT_YUV444_TILED16x16:
+      case NV_ENC_BUFFER_FORMAT_YUV444_TILED64x16:{
+        NV_ENC_CAPS_PARAM caps_param = { 0, };
+        int yuv444_supported = 0;
+
+        caps_param.version = NV_ENC_CAPS_PARAM_VER;
+        caps_param.capsToQuery = NV_ENC_CAPS_SUPPORT_YUV444_ENCODE;
+
+        if (NvEncGetEncodeCaps (nvenc->encoder, nvenc_class->codec_id,
+                &caps_param, &yuv444_supported) != NV_ENC_SUCCESS)
+          yuv444_supported = 0;
+
+        if (yuv444_supported)
+          format_mask |= (1 << GST_VIDEO_FORMAT_Y444);
+        break;
+      }
+      default:
+        GST_FIXME ("unmapped input format: 0x%08x", formats[i]);
+        break;
+    }
+  }
+
+  if (format_mask == 0)
+    return FALSE;
+
+  /* process a second time so we can add formats in the order we want */
+  g_value_init (&list, GST_TYPE_LIST);
+  g_value_init (&val, G_TYPE_STRING);
+  if ((format_mask & (1 << GST_VIDEO_FORMAT_NV12))) {
+    g_value_set_static_string (&val, "NV12");
+    gst_value_list_append_value (&list, &val);
+  }
+  if ((format_mask & (1 << GST_VIDEO_FORMAT_YV12))) {
+    g_value_set_static_string (&val, "YV12");
+    gst_value_list_append_value (&list, &val);
+  }
+  if ((format_mask & (1 << GST_VIDEO_FORMAT_I420))) {
+    g_value_set_static_string (&val, "I420");
+    gst_value_list_append_value (&list, &val);
+  }
+  if ((format_mask & (1 << GST_VIDEO_FORMAT_Y444))) {
+    g_value_set_static_string (&val, "Y444");
+    gst_value_list_append_value (&list, &val);
+  }
+  g_value_unset (&val);
+
+  GST_OBJECT_LOCK (nvenc);
+  g_free (nvenc->input_formats);
+  nvenc->input_formats = g_memdup (&list, sizeof (GValue));
+  GST_OBJECT_UNLOCK (nvenc);
+
+  return TRUE;
+}
+
+static gboolean
+gst_nv_base_enc_open (GstVideoEncoder * enc)
+{
+  GstNvBaseEnc *nvenc = GST_NV_BASE_ENC (enc);
+
+  nvenc->cuda_ctx = gst_nvenc_create_cuda_context (nvenc->cuda_device_id);
+  if (nvenc->cuda_ctx == NULL) {
+    GST_ELEMENT_ERROR (enc, LIBRARY, INIT, (NULL),
+        ("Failed to create CUDA context, perhaps CUDA is not supported."));
+    return FALSE;
+  }
+
+  {
+    NV_ENC_OPEN_ENCODE_SESSION_EX_PARAMS params = { 0, };
+    NVENCSTATUS nv_ret;
+
+    params.version = NV_ENC_OPEN_ENCODE_SESSION_EX_PARAMS_VER;
+    params.apiVersion = NVENCAPI_VERSION;
+    params.device = nvenc->cuda_ctx;
+    params.deviceType = NV_ENC_DEVICE_TYPE_CUDA;
+    nv_ret = NvEncOpenEncodeSessionEx (&params, &nvenc->encoder);
+    if (nv_ret != NV_ENC_SUCCESS) {
+      GST_ERROR ("Failed to create NVENC encoder session, ret=%d", nv_ret);
+      if (gst_nvenc_destroy_cuda_context (nvenc->cuda_ctx))
+        nvenc->cuda_ctx = NULL;
+      return FALSE;
+    }
+    GST_INFO ("created NVENC encoder %p", nvenc->encoder);
+  }
+
+  /* query supported input formats */
+  if (!_get_supported_input_formats (nvenc)) {
+    GST_WARNING_OBJECT (nvenc, "No supported input formats");
+    gst_nv_base_enc_close (enc);
+    return FALSE;
+  }
+
+  return TRUE;
+}
+
+static void
+gst_nv_base_enc_set_context (GstElement * element, GstContext * context)
+{
+  GstNvBaseEnc *nvenc = GST_NV_BASE_ENC (element);
+
+#if HAVE_NVENC_GST_GL
+  gst_gl_handle_set_context (element, context,
+      (GstGLDisplay **) & nvenc->display,
+      (GstGLContext **) & nvenc->other_context);
+  if (nvenc->display)
+    gst_gl_display_filter_gl_api (GST_GL_DISPLAY (nvenc->display),
+        SUPPORTED_GL_APIS);
+#endif
+
+  GST_ELEMENT_CLASS (parent_class)->set_context (element, context);
+}
+
+static gboolean
+gst_nv_base_enc_sink_query (GstVideoEncoder * enc, GstQuery * query)
+{
+  GstNvBaseEnc *nvenc = GST_NV_BASE_ENC (enc);
+
+  switch (GST_QUERY_TYPE (query)) {
+#if HAVE_NVENC_GST_GL
+    case GST_QUERY_CONTEXT:{
+      gboolean ret;
+
+      ret = gst_gl_handle_context_query ((GstElement *) nvenc, query,
+          (GstGLDisplay **) & nvenc->display,
+          (GstGLContext **) & nvenc->other_context);
+      if (nvenc->display)
+        gst_gl_display_filter_gl_api (GST_GL_DISPLAY (nvenc->display),
+            SUPPORTED_GL_APIS);
+
+      if (ret)
+        return ret;
+      break;
+    }
+#endif
+    default:
+      break;
+  }
+
+  return GST_VIDEO_ENCODER_CLASS (parent_class)->sink_query (enc, query);
+}
+
+static gboolean
+gst_nv_base_enc_start (GstVideoEncoder * enc)
+{
+  GstNvBaseEnc *nvenc = GST_NV_BASE_ENC (enc);
+
+  nvenc->bitstream_pool = g_async_queue_new ();
+  nvenc->bitstream_queue = g_async_queue_new ();
+  nvenc->in_bufs_pool = g_async_queue_new ();
+
+  nvenc->last_flow = GST_FLOW_OK;
+
+#if HAVE_NVENC_GST_GL
+  {
+    gst_gl_ensure_element_data (GST_ELEMENT (nvenc),
+        (GstGLDisplay **) & nvenc->display,
+        (GstGLContext **) & nvenc->other_context);
+    if (nvenc->display)
+      gst_gl_display_filter_gl_api (GST_GL_DISPLAY (nvenc->display),
+          SUPPORTED_GL_APIS);
+  }
+#endif
+
+  return TRUE;
+}
+
+static gboolean
+gst_nv_base_enc_stop (GstVideoEncoder * enc)
+{
+  GstNvBaseEnc *nvenc = GST_NV_BASE_ENC (enc);
+
+  gst_nv_base_enc_free_buffers (nvenc);
+
+  if (nvenc->bitstream_pool) {
+    g_async_queue_unref (nvenc->bitstream_pool);
+    nvenc->bitstream_pool = NULL;
+  }
+  if (nvenc->bitstream_queue) {
+    g_async_queue_unref (nvenc->bitstream_queue);
+    nvenc->bitstream_queue = NULL;
+  }
+  if (nvenc->in_bufs_pool) {
+    g_async_queue_unref (nvenc->in_bufs_pool);
+    nvenc->in_bufs_pool = NULL;
+  }
+  if (nvenc->display) {
+    gst_object_unref (nvenc->display);
+    nvenc->display = NULL;
+  }
+  if (nvenc->other_context) {
+    gst_object_unref (nvenc->other_context);
+    nvenc->other_context = NULL;
+  }
+
+  return TRUE;
+}
+
+static GValue *
+_get_interlace_modes (GstNvBaseEnc * nvenc)
+{
+  GstNvBaseEncClass *nvenc_class = GST_NV_BASE_ENC_GET_CLASS (nvenc);
+  NV_ENC_CAPS_PARAM caps_param = { 0, };
+  GValue *list = g_new0 (GValue, 1);
+  GValue val = G_VALUE_INIT;
+
+  g_value_init (list, GST_TYPE_LIST);
+  g_value_init (&val, G_TYPE_STRING);
+
+  g_value_set_static_string (&val, "progressive");
+  gst_value_list_append_value (list, &val);
+
+  caps_param.version = NV_ENC_CAPS_PARAM_VER;
+  caps_param.capsToQuery = NV_ENC_CAPS_SUPPORT_FIELD_ENCODING;
+
+  if (NvEncGetEncodeCaps (nvenc->encoder, nvenc_class->codec_id,
+          &caps_param, &nvenc->interlace_modes) != NV_ENC_SUCCESS)
+    nvenc->interlace_modes = 0;
+
+  if (nvenc->interlace_modes >= 1) {
+    g_value_set_static_string (&val, "interleaved");
+    gst_value_list_append_value (list, &val);
+    g_value_set_static_string (&val, "mixed");
+    gst_value_list_append_value (list, &val);
+  }
+  /* TODO: figure out what nvenc frame based interlacing means in gst terms */
+
+  return list;
+}
+
+static GstCaps *
+gst_nv_base_enc_getcaps (GstVideoEncoder * enc, GstCaps * filter)
+{
+  GstNvBaseEnc *nvenc = GST_NV_BASE_ENC (enc);
+  GstCaps *supported_incaps = NULL;
+  GstCaps *template_caps, *caps;
+
+  GST_OBJECT_LOCK (nvenc);
+
+  if (nvenc->input_formats != NULL) {
+    GValue *val;
+
+    template_caps = gst_pad_get_pad_template_caps (enc->sinkpad);
+    supported_incaps = gst_caps_copy (template_caps);
+    gst_caps_set_value (supported_incaps, "format", nvenc->input_formats);
+
+    val = _get_interlace_modes (nvenc);
+    gst_caps_set_value (supported_incaps, "interlace-mode", val);
+    g_free (val);
+
+    GST_LOG_OBJECT (enc, "codec input caps %" GST_PTR_FORMAT, supported_incaps);
+    GST_LOG_OBJECT (enc, "   template caps %" GST_PTR_FORMAT, template_caps);
+    caps = gst_caps_intersect (template_caps, supported_incaps);
+    gst_caps_unref (template_caps);
+    gst_caps_unref (supported_incaps);
+    supported_incaps = caps;
+    GST_LOG_OBJECT (enc, "  supported caps %" GST_PTR_FORMAT, supported_incaps);
+  }
+
+  GST_OBJECT_UNLOCK (nvenc);
+
+  caps = gst_video_encoder_proxy_getcaps (enc, supported_incaps, filter);
+
+  if (supported_incaps)
+    gst_caps_unref (supported_incaps);
+
+  GST_DEBUG_OBJECT (nvenc, "  returning caps %" GST_PTR_FORMAT, caps);
+
+  return caps;
+}
+
+static gboolean
+gst_nv_base_enc_close (GstVideoEncoder * enc)
+{
+  GstNvBaseEnc *nvenc = GST_NV_BASE_ENC (enc);
+
+  if (nvenc->encoder) {
+    if (NvEncDestroyEncoder (nvenc->encoder) != NV_ENC_SUCCESS)
+      return FALSE;
+    nvenc->encoder = NULL;
+  }
+
+  if (nvenc->cuda_ctx) {
+    if (!gst_nvenc_destroy_cuda_context (nvenc->cuda_ctx))
+      return FALSE;
+    nvenc->cuda_ctx = NULL;
+  }
+
+  GST_OBJECT_LOCK (nvenc);
+  g_free (nvenc->input_formats);
+  nvenc->input_formats = NULL;
+  GST_OBJECT_UNLOCK (nvenc);
+
+  if (nvenc->input_state) {
+    gst_video_codec_state_unref (nvenc->input_state);
+    nvenc->input_state = NULL;
+  }
+
+  if (nvenc->bitstream_pool != NULL) {
+    g_assert (g_async_queue_length (nvenc->bitstream_pool) == 0);
+    g_async_queue_unref (nvenc->bitstream_pool);
+    nvenc->bitstream_pool = NULL;
+  }
+
+  return TRUE;
+}
+
+static void
+gst_nv_base_enc_init (GstNvBaseEnc * nvenc)
+{
+  GstVideoEncoder *encoder = GST_VIDEO_ENCODER (nvenc);
+
+  GST_VIDEO_ENCODER_STREAM_LOCK (encoder);
+  GST_VIDEO_ENCODER_STREAM_UNLOCK (encoder);
+}
+
+static void
+gst_nv_base_enc_finalize (GObject * obj)
+{
+  G_OBJECT_CLASS (gst_nv_base_enc_parent_class)->finalize (obj);
+}
+
+static GstVideoCodecFrame *
+_find_frame_with_output_buffer (GstNvBaseEnc * nvenc, NV_ENC_OUTPUT_PTR out_buf)
+{
+  GList *l, *walk = gst_video_encoder_get_frames (GST_VIDEO_ENCODER (nvenc));
+  GstVideoCodecFrame *ret = NULL;
+  gint i;
+
+  for (l = walk; l; l = l->next) {
+    GstVideoCodecFrame *frame = (GstVideoCodecFrame *) l->data;
+    struct frame_state *state = frame->user_data;
+
+    if (!state)
+      continue;
+
+    for (i = 0; i < N_BUFFERS_PER_FRAME; i++) {
+
+      if (!state->out_bufs[i])
+        break;
+
+      if (state->out_bufs[i] == out_buf)
+        ret = frame;
+    }
+  }
+
+  if (ret)
+    gst_video_codec_frame_ref (ret);
+
+  g_list_free_full (walk, (GDestroyNotify) gst_video_codec_frame_unref);
+
+  return ret;
+}
+
+static gpointer
+gst_nv_base_enc_bitstream_thread (gpointer user_data)
+{
+  GstVideoEncoder *enc = user_data;
+  GstNvBaseEnc *nvenc = user_data;
+
+  /* overview of operation:
+   * 1. retreive the next buffer submitted to the bitstream pool
+   * 2. wait for that buffer to be ready from nvenc (LockBitsream)
+   * 3. retreive the GstVideoCodecFrame associated with that buffer
+   * 4. for each buffer in the frame
+   * 4.1 (step 2): wait for that buffer to be ready from nvenc (LockBitsream)
+   * 4.2 create an output GstBuffer from the nvenc buffers
+   * 4.3 unlock the nvenc bitstream buffers UnlockBitsream
+   * 5. finish_frame()
+   * 6. cleanup
+   */
+  do {
+    GstBuffer *buffers[N_BUFFERS_PER_FRAME];
+    struct frame_state *state = NULL;
+    GstVideoCodecFrame *frame = NULL;
+    NVENCSTATUS nv_ret;
+    GstFlowReturn flow = GST_FLOW_OK;
+    gint i;
+
+    {
+      NV_ENC_LOCK_BITSTREAM lock_bs = { 0, };
+      NV_ENC_OUTPUT_PTR out_buf;
+
+      for (i = 0; i < N_BUFFERS_PER_FRAME; i++) {
+        /* get and lock bitstream buffers */
+        GstVideoCodecFrame *tmp_frame;
+
+        if (state && i >= state->n_buffers)
+          break;
+
+        GST_LOG_OBJECT (enc, "wait for bitstream buffer..");
+
+        /* assumes buffers are submitted in order */
+        out_buf = g_async_queue_pop (nvenc->bitstream_queue);
+        if ((gpointer) out_buf == SHUTDOWN_COOKIE)
+          break;
+
+        GST_LOG_OBJECT (nvenc, "waiting for output buffer %p to be ready",
+            out_buf);
+
+        lock_bs.version = NV_ENC_LOCK_BITSTREAM_VER;
+        lock_bs.outputBitstream = out_buf;
+        lock_bs.doNotWait = 0;
+
+        /* FIXME: this would need to be updated for other slice modes */
+        lock_bs.sliceOffsets = NULL;
+
+        nv_ret = NvEncLockBitstream (nvenc->encoder, &lock_bs);
+        if (nv_ret != NV_ENC_SUCCESS) {
+          /* FIXME: what to do here? */
+          GST_ELEMENT_ERROR (nvenc, STREAM, ENCODE, (NULL),
+              ("Failed to lock bitstream buffer %p, ret %d",
+                  lock_bs.outputBitstream, nv_ret));
+          out_buf = SHUTDOWN_COOKIE;
+          break;
+        }
+
+        GST_LOG_OBJECT (nvenc, "picture type %d", lock_bs.pictureType);
+
+        tmp_frame = _find_frame_with_output_buffer (nvenc, out_buf);
+        g_assert (tmp_frame != NULL);
+        if (frame)
+          g_assert (frame == tmp_frame);
+        frame = tmp_frame;
+
+        state = frame->user_data;
+        g_assert (state->out_bufs[i] == out_buf);
+
+        /* copy into output buffer */
+        buffers[i] =
+            gst_buffer_new_allocate (NULL, lock_bs.bitstreamSizeInBytes, NULL);
+        gst_buffer_fill (buffers[i], 0, lock_bs.bitstreamBufferPtr,
+            lock_bs.bitstreamSizeInBytes);
+
+        if (lock_bs.pictureType == NV_ENC_PIC_TYPE_IDR) {
+          GST_DEBUG_OBJECT (nvenc, "This is a keyframe");
+          GST_VIDEO_CODEC_FRAME_SET_SYNC_POINT (frame);
+        }
+
+        /* TODO: use lock_bs.outputTimeStamp and lock_bs.outputDuration */
+        /* TODO: check pts/dts is handled properly if there are B-frames */
+
+        nv_ret = NvEncUnlockBitstream (nvenc->encoder, state->out_bufs[i]);
+        if (nv_ret != NV_ENC_SUCCESS) {
+          /* FIXME: what to do here? */
+          GST_ELEMENT_ERROR (nvenc, STREAM, ENCODE, (NULL),
+              ("Failed to unlock bitstream buffer %p, ret %d",
+                  lock_bs.outputBitstream, nv_ret));
+          state->out_bufs[i] = SHUTDOWN_COOKIE;
+          break;
+        }
+
+        GST_LOG_OBJECT (nvenc, "returning bitstream buffer %p to pool",
+            state->out_bufs[i]);
+        g_async_queue_push (nvenc->bitstream_pool, state->out_bufs[i]);
+      }
+
+      if (out_buf == SHUTDOWN_COOKIE)
+        break;
+    }
+
+    {
+      GstBuffer *output_buffer = gst_buffer_new ();
+
+      for (i = 0; i < state->n_buffers; i++)
+        output_buffer = gst_buffer_append (output_buffer, buffers[i]);
+
+      frame->output_buffer = output_buffer;
+    }
+
+    for (i = 0; i < state->n_buffers; i++) {
+      void *in_buf = state->in_bufs[i];
+      g_assert (in_buf != NULL);
+
+#if HAVE_NVENC_GST_GL
+      if (nvenc->gl_input) {
+        struct gl_input_resource *in_gl_resource = in_buf;
+
+        nv_ret =
+            NvEncUnmapInputResource (nvenc->encoder,
+            in_gl_resource->nv_mapped_resource.mappedResource);
+        if (nv_ret != NV_ENC_SUCCESS) {
+          GST_ERROR_OBJECT (nvenc, "Failed to unmap input resource %p, ret %d",
+              in_gl_resource, nv_ret);
+          break;
+        }
+
+        memset (&in_gl_resource->nv_mapped_resource, 0,
+            sizeof (in_gl_resource->nv_mapped_resource));
+      }
+#endif
+
+      g_async_queue_push (nvenc->in_bufs_pool, in_buf);
+    }
+
+    flow = gst_video_encoder_finish_frame (enc, frame);
+    frame = NULL;
+
+    if (flow != GST_FLOW_OK) {
+      GST_INFO_OBJECT (enc, "got flow %s", gst_flow_get_name (flow));
+      g_atomic_int_set (&nvenc->last_flow, flow);
+      break;
+    }
+  }
+  while (TRUE);
+
+  GST_INFO_OBJECT (nvenc, "exiting thread");
+
+  return NULL;
+}
+
+static gboolean
+gst_nv_base_enc_start_bitstream_thread (GstNvBaseEnc * nvenc)
+{
+  gchar *name = g_strdup_printf ("%s-read-bits", GST_OBJECT_NAME (nvenc));
+
+  g_assert (nvenc->bitstream_thread == NULL);
+
+  g_assert (g_async_queue_length (nvenc->bitstream_queue) == 0);
+
+  nvenc->bitstream_thread =
+      g_thread_try_new (name, gst_nv_base_enc_bitstream_thread, nvenc, NULL);
+
+  g_free (name);
+
+  if (nvenc->bitstream_thread == NULL)
+    return FALSE;
+
+  GST_INFO_OBJECT (nvenc, "started thread to read bitstream");
+  return TRUE;
+}
+
+static gboolean
+gst_nv_base_enc_stop_bitstream_thread (GstNvBaseEnc * nvenc)
+{
+  gpointer out_buf;
+
+  if (nvenc->bitstream_thread == NULL)
+    return TRUE;
+
+  /* FIXME */
+  GST_FIXME_OBJECT (nvenc, "stop bitstream reading thread properly");
+  g_async_queue_lock (nvenc->bitstream_queue);
+  g_async_queue_lock (nvenc->bitstream_pool);
+  while ((out_buf = g_async_queue_try_pop_unlocked (nvenc->bitstream_queue))) {
+    GST_INFO_OBJECT (nvenc, "stole bitstream buffer %p from queue", out_buf);
+    g_async_queue_push_unlocked (nvenc->bitstream_pool, out_buf);
+  }
+  g_async_queue_push_unlocked (nvenc->bitstream_queue, SHUTDOWN_COOKIE);
+  g_async_queue_unlock (nvenc->bitstream_pool);
+  g_async_queue_unlock (nvenc->bitstream_queue);
+
+  /* temporary unlock, so other thread can find and push frame */
+  GST_VIDEO_ENCODER_STREAM_UNLOCK (nvenc);
+  g_thread_join (nvenc->bitstream_thread);
+  GST_VIDEO_ENCODER_STREAM_LOCK (nvenc);
+
+  nvenc->bitstream_thread = NULL;
+  return TRUE;
+}
+
+static void
+gst_nv_base_enc_reset_queues (GstNvBaseEnc * nvenc, gboolean refill)
+{
+  gpointer ptr;
+  gint i;
+
+  GST_INFO_OBJECT (nvenc, "clearing queues");
+
+  while ((ptr = g_async_queue_try_pop (nvenc->bitstream_queue))) {
+    /* do nothing */
+  }
+  while ((ptr = g_async_queue_try_pop (nvenc->bitstream_pool))) {
+    /* do nothing */
+  }
+  while ((ptr = g_async_queue_try_pop (nvenc->in_bufs_pool))) {
+    /* do nothing */
+  }
+
+  if (refill) {
+    GST_INFO_OBJECT (nvenc, "refilling buffer pools");
+    for (i = 0; i < nvenc->n_bufs; ++i) {
+      g_async_queue_push (nvenc->bitstream_pool, nvenc->input_bufs[i]);
+      g_async_queue_push (nvenc->in_bufs_pool, nvenc->output_bufs[i]);
+    }
+  }
+}
+
+static void
+gst_nv_base_enc_free_buffers (GstNvBaseEnc * nvenc)
+{
+  NVENCSTATUS nv_ret;
+  guint i;
+
+  if (nvenc->encoder == NULL)
+    return;
+
+  gst_nv_base_enc_reset_queues (nvenc, FALSE);
+
+  for (i = 0; i < nvenc->n_bufs; ++i) {
+    NV_ENC_OUTPUT_PTR out_buf = nvenc->output_bufs[i];
+
+#if HAVE_NVENC_GST_GL
+    if (nvenc->gl_input) {
+      struct gl_input_resource *in_gl_resource = nvenc->input_bufs[i];
+
+      cuCtxPushCurrent (nvenc->cuda_ctx);
+      nv_ret =
+          NvEncUnregisterResource (nvenc->encoder,
+          in_gl_resource->nv_resource.registeredResource);
+      if (nv_ret != NV_ENC_SUCCESS)
+        GST_ERROR_OBJECT (nvenc, "Failed to unregister resource %p, ret %d",
+            in_gl_resource, nv_ret);
+
+      g_free (in_gl_resource);
+      cuCtxPopCurrent (NULL);
+    } else
+#endif
+    {
+      NV_ENC_INPUT_PTR in_buf = (NV_ENC_INPUT_PTR) nvenc->input_bufs[i];
+
+      GST_DEBUG_OBJECT (nvenc, "Destroying input buffer %p", in_buf);
+      nv_ret = NvEncDestroyInputBuffer (nvenc->encoder, in_buf);
+      if (nv_ret != NV_ENC_SUCCESS) {
+        GST_ERROR_OBJECT (nvenc, "Failed to destroy input buffer %p, ret %d",
+            in_buf, nv_ret);
+      }
+    }
+
+    GST_DEBUG_OBJECT (nvenc, "Destroying output bitstream buffer %p", out_buf);
+    nv_ret = NvEncDestroyBitstreamBuffer (nvenc->encoder, out_buf);
+    if (nv_ret != NV_ENC_SUCCESS) {
+      GST_ERROR_OBJECT (nvenc, "Failed to destroy output buffer %p, ret %d",
+          out_buf, nv_ret);
+    }
+  }
+
+  nvenc->n_bufs = 0;
+  g_free (nvenc->output_bufs);
+  nvenc->output_bufs = NULL;
+  g_free (nvenc->input_bufs);
+  nvenc->input_bufs = NULL;
+}
+
+static inline guint
+_get_plane_width (GstVideoInfo * info, guint plane)
+{
+  if (GST_VIDEO_INFO_IS_YUV (info))
+    /* For now component width and plane width are the same and the
+     * plane-component mapping matches
+     */
+    return GST_VIDEO_INFO_COMP_WIDTH (info, plane);
+  else                          /* RGB, GRAY */
+    return GST_VIDEO_INFO_WIDTH (info);
+}
+
+static inline guint
+_get_plane_height (GstVideoInfo * info, guint plane)
+{
+  if (GST_VIDEO_INFO_IS_YUV (info))
+    /* For now component width and plane width are the same and the
+     * plane-component mapping matches
+     */
+    return GST_VIDEO_INFO_COMP_HEIGHT (info, plane);
+  else                          /* RGB, GRAY */
+    return GST_VIDEO_INFO_HEIGHT (info);
+}
+
+static inline gsize
+_get_frame_data_height (GstVideoInfo * info)
+{
+  gsize ret = 0;
+  gint i;
+
+  for (i = 0; i < GST_VIDEO_INFO_N_PLANES (info); i++) {
+    ret += _get_plane_height (info, i);
+  }
+
+  return ret;
+}
+
+void
+gst_nv_base_enc_set_max_encode_size (GstNvBaseEnc * nvenc, guint max_width,
+    guint max_height)
+{
+  nvenc->max_encode_width = max_width;
+  nvenc->max_encode_height = max_height;
+}
+
+void
+gst_nv_base_enc_get_max_encode_size (GstNvBaseEnc * nvenc, guint * max_width,
+    guint * max_height)
+{
+  *max_width = nvenc->max_encode_width;
+  *max_height = nvenc->max_encode_height;
+}
+
+static gboolean
+gst_nv_base_enc_set_format (GstVideoEncoder * enc, GstVideoCodecState * state)
+{
+  GstNvBaseEncClass *nvenc_class = GST_NV_BASE_ENC_GET_CLASS (enc);
+  GstNvBaseEnc *nvenc = GST_NV_BASE_ENC (enc);
+  GstVideoInfo *info = &state->info;
+  GstVideoCodecState *old_state = nvenc->input_state;
+  NVENCSTATUS nv_ret;
+
+  g_assert (nvenc_class->initialize_encoder);
+
+  G_LOCK (initialization_lock);
+  if (!nvenc_class->initialize_encoder (nvenc, old_state, state)) {
+    GST_ERROR_OBJECT (enc, "Subclass failed to reconfigure encoder");
+    G_UNLOCK (initialization_lock);
+    return FALSE;
+  }
+  G_UNLOCK (initialization_lock);
+
+  if (!nvenc->max_encode_width && !nvenc->max_encode_height) {
+    gst_nv_base_enc_set_max_encode_size (nvenc, GST_VIDEO_INFO_WIDTH (info),
+        GST_VIDEO_INFO_HEIGHT (info));
+  }
+
+  if (!old_state) {
+    nvenc->input_info = *info;
+    nvenc->gl_input = FALSE;
+  }
+
+  if (nvenc->input_state)
+    gst_video_codec_state_unref (nvenc->input_state);
+  nvenc->input_state = gst_video_codec_state_ref (state);
+  GST_INFO_OBJECT (nvenc, "configured encoder");
+
+  /* now allocate some buffers only on first configuration */
+  if (!old_state) {
+#if HAVE_NVENC_GST_GL
+    GstCapsFeatures *features;
+#endif
+    guint num_macroblocks, i;
+    guint input_width, input_height;
+
+    input_width = GST_VIDEO_INFO_WIDTH (info);
+    input_height = GST_VIDEO_INFO_HEIGHT (info);
+
+    num_macroblocks = (GST_ROUND_UP_16 (input_width) >> 4)
+        * (GST_ROUND_UP_16 (input_height) >> 4);
+    nvenc->n_bufs = (num_macroblocks >= 8160) ? 32 : 48;
+
+    /* input buffers */
+    nvenc->input_bufs = g_new0 (gpointer, nvenc->n_bufs);
+
+#if HAVE_NVENC_GST_GL
+    features = gst_caps_get_features (state->caps, 0);
+    if (gst_caps_features_contains (features,
+            GST_CAPS_FEATURE_MEMORY_GL_MEMORY)) {
+      guint pixel_depth = 0;
+      nvenc->gl_input = TRUE;
+
+      for (i = 0; i < GST_VIDEO_INFO_N_COMPONENTS (info); i++) {
+        pixel_depth += GST_VIDEO_INFO_COMP_DEPTH (info, i);
+      }
+
+      cuCtxPushCurrent (nvenc->cuda_ctx);
+      for (i = 0; i < nvenc->n_bufs; ++i) {
+        struct gl_input_resource *in_gl_resource =
+            g_new0 (struct gl_input_resource, 1);
+        CUresult cu_ret;
+
+        memset (&in_gl_resource->nv_resource, 0,
+            sizeof (in_gl_resource->nv_resource));
+        memset (&in_gl_resource->nv_mapped_resource, 0,
+            sizeof (in_gl_resource->nv_mapped_resource));
+
+        /* scratch buffer for non-contigious planer into a contigious buffer */
+        cu_ret =
+            cuMemAllocPitch ((CUdeviceptr *) & in_gl_resource->cuda_pointer,
+            &in_gl_resource->cuda_stride, input_width,
+            _get_frame_data_height (info), 16);
+        if (cu_ret != CUDA_SUCCESS) {
+          const gchar *err;
+
+          cuGetErrorString (cu_ret, &err);
+          GST_ERROR_OBJECT (nvenc, "failed to alocate cuda scratch buffer "
+              "ret %d error :%s", cu_ret, err);
+          g_assert_not_reached ();
+        }
+
+        in_gl_resource->nv_resource.version = NV_ENC_REGISTER_RESOURCE_VER;
+        in_gl_resource->nv_resource.resourceType =
+            NV_ENC_INPUT_RESOURCE_TYPE_CUDADEVICEPTR;
+        in_gl_resource->nv_resource.width = input_width;
+        in_gl_resource->nv_resource.height = input_height;
+        in_gl_resource->nv_resource.pitch = in_gl_resource->cuda_stride;
+        in_gl_resource->nv_resource.bufferFormat =
+            gst_nvenc_get_nv_buffer_format (GST_VIDEO_INFO_FORMAT (info));
+        in_gl_resource->nv_resource.resourceToRegister =
+            in_gl_resource->cuda_pointer;
+
+        nv_ret =
+            NvEncRegisterResource (nvenc->encoder,
+            &in_gl_resource->nv_resource);
+        if (nv_ret != NV_ENC_SUCCESS)
+          GST_ERROR_OBJECT (nvenc, "Failed to register resource %p, ret %d",
+              in_gl_resource, nv_ret);
+
+        nvenc->input_bufs[i] = in_gl_resource;
+        g_async_queue_push (nvenc->in_bufs_pool, nvenc->input_bufs[i]);
+      }
+
+      cuCtxPopCurrent (NULL);
+    } else
+#endif
+    {
+      for (i = 0; i < nvenc->n_bufs; ++i) {
+        NV_ENC_CREATE_INPUT_BUFFER cin_buf = { 0, };
+
+        cin_buf.version = NV_ENC_CREATE_INPUT_BUFFER_VER;
+
+        cin_buf.width = GST_ROUND_UP_32 (input_width);
+        cin_buf.height = GST_ROUND_UP_32 (input_height);
+
+        cin_buf.memoryHeap = NV_ENC_MEMORY_HEAP_SYSMEM_CACHED;
+        cin_buf.bufferFmt =
+            gst_nvenc_get_nv_buffer_format (GST_VIDEO_INFO_FORMAT (info));
+
+        nv_ret = NvEncCreateInputBuffer (nvenc->encoder, &cin_buf);
+
+        if (nv_ret != NV_ENC_SUCCESS) {
+          GST_WARNING_OBJECT (enc, "Failed to allocate input buffer: %d",
+              nv_ret);
+          /* FIXME: clean up */
+          return FALSE;
+        }
+
+        nvenc->input_bufs[i] = cin_buf.inputBuffer;
+
+        GST_INFO_OBJECT (nvenc, "allocated  input buffer %2d: %p", i,
+            nvenc->input_bufs[i]);
+
+        g_async_queue_push (nvenc->in_bufs_pool, nvenc->input_bufs[i]);
+      }
+    }
+
+    /* output buffers */
+    nvenc->output_bufs = g_new0 (NV_ENC_OUTPUT_PTR, nvenc->n_bufs);
+    for (i = 0; i < nvenc->n_bufs; ++i) {
+      NV_ENC_CREATE_BITSTREAM_BUFFER cout_buf = { 0, };
+
+      cout_buf.version = NV_ENC_CREATE_BITSTREAM_BUFFER_VER;
+
+      /* 1 MB should be large enough to hold most output frames.
+       * NVENC will automatically increase this if it's not enough. */
+      cout_buf.size = 1024 * 1024;
+      cout_buf.memoryHeap = NV_ENC_MEMORY_HEAP_SYSMEM_CACHED;
+
+      G_LOCK (initialization_lock);
+      nv_ret = NvEncCreateBitstreamBuffer (nvenc->encoder, &cout_buf);
+      G_UNLOCK (initialization_lock);
+
+      if (nv_ret != NV_ENC_SUCCESS) {
+        GST_WARNING_OBJECT (enc, "Failed to allocate input buffer: %d", nv_ret);
+        /* FIXME: clean up */
+        return FALSE;
+      }
+
+      nvenc->output_bufs[i] = cout_buf.bitstreamBuffer;
+
+      GST_INFO_OBJECT (nvenc, "allocated output buffer %2d: %p", i,
+          nvenc->output_bufs[i]);
+
+      g_async_queue_push (nvenc->bitstream_pool, nvenc->output_bufs[i]);
+    }
+
+#if 0
+    /* Get SPS/PPS */
+    {
+      NV_ENC_SEQUENCE_PARAM_PAYLOAD seq_param = { 0 };
+      uint32_t seq_size = 0;
+
+      seq_param.version = NV_ENC_SEQUENCE_PARAM_PAYLOAD_VER;
+      seq_param.spsppsBuffer = g_alloca (1024);
+      seq_param.inBufferSize = 1024;
+      seq_param.outSPSPPSPayloadSize = &seq_size;
+
+      nv_ret = NvEncGetSequenceParams (nvenc->encoder, &seq_param);
+      if (nv_ret != NV_ENC_SUCCESS) {
+        GST_WARNING_OBJECT (enc, "Failed to retrieve SPS/PPS: %d", nv_ret);
+        return FALSE;
+      }
+
+      /* FIXME: use SPS/PPS */
+      GST_MEMDUMP_OBJECT (enc, "SPS/PPS", seq_param.spsppsBuffer, seq_size);
+    }
+#endif
+  }
+
+  g_assert (nvenc_class->set_src_caps);
+  if (!nvenc_class->set_src_caps (nvenc, state)) {
+    GST_ERROR_OBJECT (nvenc, "Subclass failed to set output caps");
+    /* FIXME: clean up */
+    return FALSE;
+  }
+
+  return TRUE;
+}
+
+static inline guint
+_plane_get_n_components (GstVideoInfo * info, guint plane)
+{
+  switch (GST_VIDEO_INFO_FORMAT (info)) {
+    case GST_VIDEO_FORMAT_RGBx:
+    case GST_VIDEO_FORMAT_BGRx:
+    case GST_VIDEO_FORMAT_xRGB:
+    case GST_VIDEO_FORMAT_xBGR:
+    case GST_VIDEO_FORMAT_RGBA:
+    case GST_VIDEO_FORMAT_BGRA:
+    case GST_VIDEO_FORMAT_ARGB:
+    case GST_VIDEO_FORMAT_ABGR:
+    case GST_VIDEO_FORMAT_AYUV:
+      return 4;
+    case GST_VIDEO_FORMAT_RGB:
+    case GST_VIDEO_FORMAT_BGR:
+    case GST_VIDEO_FORMAT_RGB16:
+    case GST_VIDEO_FORMAT_BGR16:
+      return 3;
+    case GST_VIDEO_FORMAT_GRAY16_BE:
+    case GST_VIDEO_FORMAT_GRAY16_LE:
+    case GST_VIDEO_FORMAT_YUY2:
+    case GST_VIDEO_FORMAT_UYVY:
+      return 2;
+    case GST_VIDEO_FORMAT_NV12:
+    case GST_VIDEO_FORMAT_NV21:
+      return plane == 0 ? 1 : 2;
+    case GST_VIDEO_FORMAT_GRAY8:
+    case GST_VIDEO_FORMAT_Y444:
+    case GST_VIDEO_FORMAT_Y42B:
+    case GST_VIDEO_FORMAT_Y41B:
+    case GST_VIDEO_FORMAT_I420:
+    case GST_VIDEO_FORMAT_YV12:
+      return 1;
+    default:
+      g_assert_not_reached ();
+      return 1;
+  }
+}
+
+#if HAVE_NVENC_GST_GL
+struct map_gl_input
+{
+  GstNvBaseEnc *nvenc;
+  GstVideoCodecFrame *frame;
+  GstVideoInfo *info;
+  struct gl_input_resource *in_gl_resource;
+};
+
+static void
+_map_gl_input_buffer (GstGLContext * context, struct map_gl_input *data)
+{
+  cudaError_t cuda_ret;
+  guint8 *data_pointer;
+  guint i;
+
+  cuCtxPushCurrent (data->nvenc->cuda_ctx);
+  data_pointer = data->in_gl_resource->cuda_pointer;
+  for (i = 0; i < GST_VIDEO_INFO_N_PLANES (data->info); i++) {
+    guint plane_n_components;
+    GstGLBuffer *gl_buf_obj;
+    GstGLMemoryPBO *gl_mem;
+    guint src_stride, dest_stride;
+
+    gl_mem =
+        (GstGLMemoryPBO *) gst_buffer_peek_memory (data->frame->input_buffer,
+        i);
+    g_return_if_fail (gst_is_gl_memory_pbo ((GstMemory *) gl_mem));
+    data->in_gl_resource->gl_mem[i] = GST_GL_MEMORY_CAST (gl_mem);
+    plane_n_components = _plane_get_n_components (data->info, i);
+
+    gl_buf_obj = (GstGLBuffer *) gl_mem->pbo;
+    g_return_if_fail (gl_buf_obj != NULL);
+
+    /* get the texture into the PBO */
+    gst_gl_memory_pbo_upload_transfer (gl_mem);
+    gst_gl_memory_pbo_download_transfer (gl_mem);
+
+    GST_LOG_OBJECT (data->nvenc, "attempting to copy texture %u into cuda",
+        gl_mem->mem.tex_id);
+
+    cuda_ret =
+        cudaGraphicsGLRegisterBuffer (&data->in_gl_resource->cuda_texture,
+        gl_buf_obj->id, cudaGraphicsRegisterFlagsReadOnly);
+    if (cuda_ret != cudaSuccess) {
+      GST_ERROR_OBJECT (data->nvenc, "failed to register GL texture %u to cuda "
+          "ret :%d", gl_mem->mem.tex_id, cuda_ret);
+      g_assert_not_reached ();
+    }
+
+    cuda_ret =
+        cudaGraphicsMapResources (1, &data->in_gl_resource->cuda_texture, 0);
+    if (cuda_ret != cudaSuccess) {
+      GST_ERROR_OBJECT (data->nvenc, "failed to map GL texture %u into cuda "
+          "ret :%d", gl_mem->mem.tex_id, cuda_ret);
+      g_assert_not_reached ();
+    }
+
+    cuda_ret =
+        cudaGraphicsResourceGetMappedPointer (&data->
+        in_gl_resource->cuda_plane_pointers[i],
+        &data->in_gl_resource->cuda_num_bytes,
+        data->in_gl_resource->cuda_texture);
+    if (cuda_ret != cudaSuccess) {
+      GST_ERROR_OBJECT (data->nvenc, "failed to get mapped pointer of map GL "
+          "texture %u in cuda ret :%d", gl_mem->mem.tex_id, cuda_ret);
+      g_assert_not_reached ();
+    }
+
+    src_stride = GST_VIDEO_INFO_PLANE_STRIDE (data->info, i);
+    dest_stride = data->in_gl_resource->cuda_stride;
+
+    /* copy into scratch buffer */
+    cuda_ret =
+        cudaMemcpy2D (data_pointer, dest_stride,
+        data->in_gl_resource->cuda_plane_pointers[i], src_stride,
+        _get_plane_width (data->info, i) * plane_n_components,
+        _get_plane_height (data->info, i), cudaMemcpyDeviceToDevice);
+    if (cuda_ret != cudaSuccess) {
+      GST_ERROR_OBJECT (data->nvenc, "failed to copy GL texture %u into cuda "
+          "ret :%d", gl_mem->mem.tex_id, cuda_ret);
+      g_assert_not_reached ();
+    }
+
+    cuda_ret =
+        cudaGraphicsUnmapResources (1, &data->in_gl_resource->cuda_texture, 0);
+    if (cuda_ret != cudaSuccess) {
+      GST_ERROR_OBJECT (data->nvenc, "failed to unmap GL texture %u from cuda "
+          "ret :%d", gl_mem->mem.tex_id, cuda_ret);
+      g_assert_not_reached ();
+    }
+
+    cuda_ret =
+        cudaGraphicsUnregisterResource (data->in_gl_resource->cuda_texture);
+    if (cuda_ret != cudaSuccess) {
+      GST_ERROR_OBJECT (data->nvenc, "failed to unregister GL texture %u from "
+          "cuda ret :%d", gl_mem->mem.tex_id, cuda_ret);
+      g_assert_not_reached ();
+    }
+
+    data_pointer =
+        data_pointer +
+        data->in_gl_resource->cuda_stride *
+        _get_plane_height (&data->nvenc->input_info, i);
+  }
+  cuCtxPopCurrent (NULL);
+}
+#endif
+
+static GstFlowReturn
+_acquire_input_buffer (GstNvBaseEnc * nvenc, gpointer * input)
+{
+  g_assert (input);
+
+  GST_LOG_OBJECT (nvenc, "acquiring input buffer..");
+  GST_VIDEO_ENCODER_STREAM_UNLOCK (nvenc);
+  *input = g_async_queue_pop (nvenc->in_bufs_pool);
+  GST_VIDEO_ENCODER_STREAM_LOCK (nvenc);
+
+  return GST_FLOW_OK;
+}
+
+static GstFlowReturn
+_submit_input_buffer (GstNvBaseEnc * nvenc, GstVideoCodecFrame * frame,
+    GstVideoFrame * vframe, void *inputBuffer, void *inputBufferPtr,
+    NV_ENC_BUFFER_FORMAT bufferFormat, void *outputBufferPtr)
+{
+  GstNvBaseEncClass *nvenc_class = GST_NV_BASE_ENC_GET_CLASS (nvenc);
+  NV_ENC_PIC_PARAMS pic_params = { 0, };
+  NVENCSTATUS nv_ret;
+
+  GST_LOG_OBJECT (nvenc, "%u: input buffer %p, output buffer %p, "
+      "pts %" GST_TIME_FORMAT, frame->system_frame_number, inputBuffer,
+      outputBufferPtr, GST_TIME_ARGS (frame->pts));
+
+  pic_params.version = NV_ENC_PIC_PARAMS_VER;
+  pic_params.inputBuffer = inputBufferPtr;
+  pic_params.bufferFmt = bufferFormat;
+
+  pic_params.inputWidth = GST_VIDEO_FRAME_WIDTH (vframe);
+  pic_params.inputHeight = GST_VIDEO_FRAME_HEIGHT (vframe);
+  pic_params.outputBitstream = outputBufferPtr;
+  pic_params.completionEvent = NULL;
+  if (GST_VIDEO_FRAME_IS_INTERLACED (vframe)) {
+    if (GST_VIDEO_FRAME_IS_TFF (vframe))
+      pic_params.pictureStruct = NV_ENC_PIC_STRUCT_FIELD_TOP_BOTTOM;
+    else
+      pic_params.pictureStruct = NV_ENC_PIC_STRUCT_FIELD_BOTTOM_TOP;
+  } else {
+    pic_params.pictureStruct = NV_ENC_PIC_STRUCT_FRAME;
+  }
+  pic_params.inputTimeStamp = frame->pts;
+  pic_params.inputDuration =
+      GST_CLOCK_TIME_IS_VALID (frame->duration) ? frame->duration : 0;
+  pic_params.frameIdx = frame->system_frame_number;
+
+  if (GST_VIDEO_CODEC_FRAME_IS_FORCE_KEYFRAME (frame))
+    pic_params.encodePicFlags = NV_ENC_PIC_FLAG_FORCEIDR;
+  else
+    pic_params.encodePicFlags = 0;
+
+  if (nvenc_class->set_pic_params
+      && !nvenc_class->set_pic_params (nvenc, frame, &pic_params)) {
+    GST_ERROR_OBJECT (nvenc, "Subclass failed to submit buffer");
+    return GST_FLOW_ERROR;
+  }
+
+  nv_ret = NvEncEncodePicture (nvenc->encoder, &pic_params);
+  if (nv_ret == NV_ENC_SUCCESS) {
+    GST_LOG_OBJECT (nvenc, "Encoded picture");
+  } else if (nv_ret == NV_ENC_ERR_NEED_MORE_INPUT) {
+    /* FIXME: we should probably queue pending output buffers here and only
+     * submit them to the async queue once we got sucess back */
+    GST_DEBUG_OBJECT (nvenc, "Encoded picture (encoder needs more input)");
+  } else {
+    GST_ERROR_OBJECT (nvenc, "Failed to encode picture: %d", nv_ret);
+    GST_DEBUG_OBJECT (nvenc, "re-enqueueing input buffer %p", inputBuffer);
+    g_async_queue_push (nvenc->in_bufs_pool, inputBuffer);
+    GST_DEBUG_OBJECT (nvenc, "re-enqueueing output buffer %p", outputBufferPtr);
+    g_async_queue_push (nvenc->bitstream_pool, outputBufferPtr);
+
+    return GST_FLOW_ERROR;
+  }
+
+  g_async_queue_push (nvenc->bitstream_queue, outputBufferPtr);
+
+  return GST_FLOW_OK;
+}
+
+static GstFlowReturn
+gst_nv_base_enc_handle_frame (GstVideoEncoder * enc, GstVideoCodecFrame * frame)
+{
+  gpointer input_buffer = NULL;
+  GstNvBaseEnc *nvenc = GST_NV_BASE_ENC (enc);
+  NV_ENC_OUTPUT_PTR out_buf;
+  NVENCSTATUS nv_ret;
+  GstVideoFrame vframe;
+  GstVideoInfo *info = &nvenc->input_state->info;
+  GstFlowReturn flow = GST_FLOW_OK;
+  GstMapFlags in_map_flags = GST_MAP_READ;
+  struct frame_state *state;
+  guint frame_n = 0;
+
+  g_assert (nvenc->encoder != NULL);
+
+#if HAVE_NVENC_GST_GL
+  if (nvenc->gl_input)
+    in_map_flags |= GST_MAP_GL;
+#endif
+
+  if (!gst_video_frame_map (&vframe, info, frame->input_buffer, in_map_flags))
+    return GST_FLOW_ERROR;
+
+  /* make sure our thread that waits for output to be ready is started */
+  if (nvenc->bitstream_thread == NULL) {
+    if (!gst_nv_base_enc_start_bitstream_thread (nvenc))
+      goto error;
+  }
+
+  flow = _acquire_input_buffer (nvenc, &input_buffer);
+  if (flow != GST_FLOW_OK)
+    return flow;
+  if (input_buffer == NULL)
+    return GST_FLOW_ERROR;
+
+  state = frame->user_data;
+  if (!state)
+    state = g_new0 (struct frame_state, 1);
+  state->n_buffers = 1;
+
+#if HAVE_NVENC_GST_GL
+  if (nvenc->gl_input) {
+    struct gl_input_resource *in_gl_resource = input_buffer;
+    struct map_gl_input data;
+
+    GST_LOG_OBJECT (enc, "got input buffer %p", in_gl_resource);
+
+    in_gl_resource->gl_mem[0] =
+        (GstGLMemory *) gst_buffer_peek_memory (frame->input_buffer, 0);
+    g_assert (gst_is_gl_memory ((GstMemory *) in_gl_resource->gl_mem[0]));
+
+    data.nvenc = nvenc;
+    data.frame = frame;
+    data.info = &vframe.info;
+    data.in_gl_resource = in_gl_resource;
+
+    gst_gl_context_thread_add (in_gl_resource->gl_mem[0]->mem.context,
+        (GstGLContextThreadFunc) _map_gl_input_buffer, &data);
+
+    in_gl_resource->nv_mapped_resource.version = NV_ENC_MAP_INPUT_RESOURCE_VER;
+    in_gl_resource->nv_mapped_resource.registeredResource =
+        in_gl_resource->nv_resource.registeredResource;
+
+    nv_ret =
+        NvEncMapInputResource (nvenc->encoder,
+        &in_gl_resource->nv_mapped_resource);
+    if (nv_ret != NV_ENC_SUCCESS) {
+      GST_ERROR_OBJECT (nvenc, "Failed to map input resource %p, ret %d",
+          in_gl_resource, nv_ret);
+      goto error;
+    }
+
+    out_buf = g_async_queue_try_pop (nvenc->bitstream_pool);
+    if (out_buf == NULL) {
+      GST_DEBUG_OBJECT (nvenc, "wait for output buf to become available again");
+      out_buf = g_async_queue_pop (nvenc->bitstream_pool);
+    }
+
+    state->in_bufs[frame_n] = in_gl_resource;
+    state->out_bufs[frame_n++] = out_buf;
+
+    frame->user_data = state;
+    frame->user_data_destroy_notify = (GDestroyNotify) g_free;
+
+    flow =
+        _submit_input_buffer (nvenc, frame, &vframe, in_gl_resource,
+        in_gl_resource->nv_mapped_resource.mappedResource,
+        in_gl_resource->nv_mapped_resource.mappedBufferFmt, out_buf);
+
+    /* encoder will keep frame in list internally, we'll look it up again later
+     * in the thread where we get the output buffers and finish it there */
+    gst_video_codec_frame_unref (frame);
+    frame = NULL;
+  }
+#endif
+
+  if (!nvenc->gl_input) {
+    NV_ENC_LOCK_INPUT_BUFFER in_buf_lock = { 0, };
+    NV_ENC_INPUT_PTR in_buf = input_buffer;
+    guint8 *src, *dest;
+    guint src_stride, dest_stride;
+    guint height, width;
+    guint y;
+
+    GST_LOG_OBJECT (enc, "got input buffer %p", in_buf);
+
+    in_buf_lock.version = NV_ENC_LOCK_INPUT_BUFFER_VER;
+    in_buf_lock.inputBuffer = in_buf;
+
+    nv_ret = NvEncLockInputBuffer (nvenc->encoder, &in_buf_lock);
+    if (nv_ret != NV_ENC_SUCCESS) {
+      GST_ERROR_OBJECT (nvenc, "Failed to lock input buffer: %d", nv_ret);
+      /* FIXME: post proper error message */
+      goto error;
+    }
+    GST_LOG_OBJECT (nvenc, "Locked input buffer %p", in_buf);
+
+    width = GST_VIDEO_FRAME_WIDTH (&vframe);
+    height = GST_VIDEO_FRAME_HEIGHT (&vframe);
+
+    // FIXME: this only works for NV12
+    g_assert (GST_VIDEO_FRAME_FORMAT (&vframe) == GST_VIDEO_FORMAT_NV12);
+
+    /* copy Y plane */
+    src = GST_VIDEO_FRAME_PLANE_DATA (&vframe, 0);
+    src_stride = GST_VIDEO_FRAME_PLANE_STRIDE (&vframe, 0);
+    dest = in_buf_lock.bufferDataPtr;
+    dest_stride = in_buf_lock.pitch;
+    for (y = 0; y < height; ++y) {
+      memcpy (dest, src, width);
+      dest += dest_stride;
+      src += src_stride;
+    }
+
+    /* copy UV plane */
+    src = GST_VIDEO_FRAME_PLANE_DATA (&vframe, 1);
+    src_stride = GST_VIDEO_FRAME_PLANE_STRIDE (&vframe, 1);
+    dest =
+        (guint8 *) in_buf_lock.bufferDataPtr +
+        GST_ROUND_UP_32 (GST_VIDEO_INFO_HEIGHT (&nvenc->input_info)) *
+        in_buf_lock.pitch;
+    dest_stride = in_buf_lock.pitch;
+    for (y = 0; y < GST_ROUND_UP_2 (height) / 2; ++y) {
+      memcpy (dest, src, width);
+      dest += dest_stride;
+      src += src_stride;
+    }
+
+    nv_ret = NvEncUnlockInputBuffer (nvenc->encoder, in_buf);
+    if (nv_ret != NV_ENC_SUCCESS) {
+      GST_ERROR_OBJECT (nvenc, "Failed to unlock input buffer: %d", nv_ret);
+      goto error;
+    }
+
+    out_buf = g_async_queue_try_pop (nvenc->bitstream_pool);
+    if (out_buf == NULL) {
+      GST_DEBUG_OBJECT (nvenc, "wait for output buf to become available again");
+      out_buf = g_async_queue_pop (nvenc->bitstream_pool);
+    }
+
+    state->in_bufs[frame_n] = in_buf;
+    state->out_bufs[frame_n++] = out_buf;
+    frame->user_data = state;
+    frame->user_data_destroy_notify = (GDestroyNotify) g_free;
+
+    flow =
+        _submit_input_buffer (nvenc, frame, &vframe, in_buf, in_buf,
+        gst_nvenc_get_nv_buffer_format (GST_VIDEO_INFO_FORMAT (info)), out_buf);
+
+    /* encoder will keep frame in list internally, we'll look it up again later
+     * in the thread where we get the output buffers and finish it there */
+    gst_video_codec_frame_unref (frame);
+    frame = NULL;
+  }
+
+  if (flow != GST_FLOW_OK)
+    goto out;
+
+  flow = g_atomic_int_get (&nvenc->last_flow);
+
+out:
+
+  gst_video_frame_unmap (&vframe);
+
+  return flow;
+
+error:
+  flow = GST_FLOW_ERROR;
+  goto out;
+}
+
+static gboolean
+gst_nv_base_enc_drain_encoder (GstNvBaseEnc * nvenc)
+{
+  NV_ENC_PIC_PARAMS pic_params = { 0, };
+  NVENCSTATUS nv_ret;
+
+  GST_INFO_OBJECT (nvenc, "draining encoder");
+
+  if (nvenc->input_state == NULL) {
+    GST_DEBUG_OBJECT (nvenc, "no input state, nothing to do");
+    return TRUE;
+  }
+
+  pic_params.version = NV_ENC_PIC_PARAMS_VER;
+  pic_params.encodePicFlags = NV_ENC_PIC_FLAG_EOS;
+
+  nv_ret = NvEncEncodePicture (nvenc->encoder, &pic_params);
+  if (nv_ret != NV_ENC_SUCCESS) {
+    GST_LOG_OBJECT (nvenc, "Failed to drain encoder, ret %d", nv_ret);
+    return FALSE;
+  }
+
+  return TRUE;
+}
+
+static GstFlowReturn
+gst_nv_base_enc_finish (GstVideoEncoder * enc)
+{
+  GstNvBaseEnc *nvenc = GST_NV_BASE_ENC (enc);
+
+  GST_FIXME_OBJECT (enc, "implement finish");
+
+  gst_nv_base_enc_drain_encoder (nvenc);
+
+  /* wait for encoder to output the remaining buffers */
+  gst_nv_base_enc_stop_bitstream_thread (nvenc);
+
+  return GST_FLOW_OK;
+}
+
+#if 0
+static gboolean
+gst_nv_base_enc_flush (GstVideoEncoder * enc)
+{
+  GstNvBaseEnc *nvenc = GST_NV_BASE_ENC (enc);
+  GST_INFO_OBJECT (nvenc, "done flushing encoder");
+  return TRUE;
+}
+#endif
+
+static void
+gst_nv_base_enc_set_property (GObject * object, guint prop_id,
+    const GValue * value, GParamSpec * pspec)
+{
+  GstNvBaseEnc *nvenc = GST_NV_BASE_ENC (object);
+
+  switch (prop_id) {
+    case PROP_DEVICE_ID:
+      nvenc->cuda_device_id = g_value_get_uint (value);
+      break;
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
+  }
+}
+
+static void
+gst_nv_base_enc_get_property (GObject * object, guint prop_id, GValue * value,
+    GParamSpec * pspec)
+{
+  GstNvBaseEnc *nvenc = GST_NV_BASE_ENC (object);
+
+  switch (prop_id) {
+    case PROP_DEVICE_ID:
+      g_value_set_uint (value, nvenc->cuda_device_id);
+      break;
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
+  }
+}
diff --git a/sys/nvenc/gstnvbaseenc.h b/sys/nvenc/gstnvbaseenc.h
new file mode 100644
index 0000000..0a843e9
--- /dev/null
+++ b/sys/nvenc/gstnvbaseenc.h
@@ -0,0 +1,114 @@
+/* GStreamer NVENC plugin
+ * Copyright (C) 2015 Centricular Ltd
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifndef __GST_NV_BASE_ENC_H_INCLUDED__
+#define __GST_NV_BASE_ENC_H_INCLUDED__
+
+#include "gstnvenc.h"
+
+#include <gst/video/gstvideoencoder.h>
+
+#define GST_TYPE_NV_BASE_ENC \
+  (gst_nv_base_enc_get_type())
+#define GST_NV_BASE_ENC(obj) \
+  (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_NV_BASE_ENC,GstNvBaseEnc))
+#define GST_NV_BASE_ENC_CLASS(klass) \
+  (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_NV_BASE_ENC,GstNvBaseEncClass))
+#define GST_NV_BASE_ENC_GET_CLASS(obj) \
+  (G_TYPE_INSTANCE_GET_CLASS((obj),GST_TYPE_NV_BASE_ENC,GstNvBaseEncClass))
+#define GST_IS_NV_BASE_ENC(obj) \
+  (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_NV_BASE_ENC))
+#define GST_IS_NV_BASE_ENC_CLASS(obj) \
+  (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_NV_BASE_ENC))
+
+typedef struct {
+  GstVideoEncoder video_encoder;
+
+  /* properties */
+  guint           cuda_device_id;
+
+  CUcontext       cuda_ctx;
+  void          * encoder;
+
+  /* the supported input formats */
+  GValue        * input_formats;                  /* OBJECT LOCK */
+
+  GstVideoCodecState *input_state;
+  gboolean            gl_input;
+
+  /* allocated buffers */
+  gpointer          *input_bufs;   /* array of n_allocs input buffers  */
+  NV_ENC_OUTPUT_PTR *output_bufs;  /* array of n_allocs output buffers */
+  guint              n_bufs;
+
+  /* input and output buffers currently available */
+  GAsyncQueue    *in_bufs_pool;
+  GAsyncQueue    *bitstream_pool;
+
+  /* output bufs in use (input bufs in use are tracked via the codec frames) */
+  GAsyncQueue    *bitstream_queue;
+
+  /* we spawn a thread that does the (blocking) waits for output buffers
+   * to become available, so we can continue to feed data to the encoder
+   * while we wait */
+  GThread        *bitstream_thread;
+
+  /* supported interlacing input modes.
+   * 0 = none, 1 = fields, 2 = interleaved */
+  gint            interlace_modes;
+
+  void           *display;            /* GstGLDisplay */
+  void           *other_context;      /* GstGLContext */
+
+  /* the maximum buffer size the encoder is configured for */
+  guint               max_encode_width;
+  guint               max_encode_height;
+
+  GstVideoInfo        input_info;     /* buffer configuration for buffers sent to NVENC */
+
+  GstFlowReturn   last_flow;          /* ATOMIC */
+} GstNvBaseEnc;
+
+typedef struct {
+  GstVideoEncoderClass video_encoder_class;
+
+  GUID codec_id;
+
+  gboolean (*initialize_encoder) (GstNvBaseEnc * nvenc,
+                                  GstVideoCodecState * old_state,
+                                  GstVideoCodecState * state);
+  gboolean (*set_src_caps)       (GstNvBaseEnc * nvenc,
+                                  GstVideoCodecState * state);
+  gboolean (*set_pic_params)     (GstNvBaseEnc * nvenc,
+                                  GstVideoCodecFrame * frame,
+                                  NV_ENC_PIC_PARAMS * pic_params);
+} GstNvBaseEncClass;
+
+G_GNUC_INTERNAL
+GType gst_nv_base_enc_get_type (void);
+
+
+void gst_nv_base_enc_get_max_encode_size      (GstNvBaseEnc * nvenc,
+                                               guint * max_width,
+                                               guint * max_height);
+void gst_nv_base_enc_set_max_encode_size      (GstNvBaseEnc * nvenc,
+                                               guint max_width,
+                                               guint max_height);
+
+#endif /* __GST_NV_BASE_ENC_H_INCLUDED__ */
diff --git a/sys/nvenc/gstnvenc.c b/sys/nvenc/gstnvenc.c
new file mode 100644
index 0000000..6b0d568
--- /dev/null
+++ b/sys/nvenc/gstnvenc.c
@@ -0,0 +1,328 @@
+/* GStreamer NVENC plugin
+ * Copyright (C) 2015 Centricular Ltd
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include "gstnvenc.h"
+#include "gstnvh264enc.h"
+
+GST_DEBUG_CATEGORY (gst_nvenc_debug);
+
+static NV_ENCODE_API_FUNCTION_LIST nvenc_api;
+
+NVENCSTATUS
+NvEncOpenEncodeSessionEx (NV_ENC_OPEN_ENCODE_SESSION_EX_PARAMS * params,
+    void **encoder)
+{
+  g_assert (nvenc_api.nvEncOpenEncodeSessionEx != NULL);
+  return nvenc_api.nvEncOpenEncodeSessionEx (params, encoder);
+}
+
+NVENCSTATUS
+NvEncDestroyEncoder (void *encoder)
+{
+  g_assert (nvenc_api.nvEncDestroyEncoder != NULL);
+  return nvenc_api.nvEncDestroyEncoder (encoder);
+}
+
+NVENCSTATUS
+NvEncGetEncodeGUIDs (void *encoder, GUID * array, uint32_t array_size,
+    uint32_t * count)
+{
+  g_assert (nvenc_api.nvEncGetEncodeGUIDs != NULL);
+  return nvenc_api.nvEncGetEncodeGUIDs (encoder, array, array_size, count);
+}
+
+NVENCSTATUS
+NvEncGetEncodeProfileGUIDCount (void *encoder, GUID encodeGUID,
+    uint32_t * encodeProfileGUIDCount)
+{
+  g_assert (nvenc_api.nvEncGetEncodeProfileGUIDCount != NULL);
+  return nvenc_api.nvEncGetEncodeProfileGUIDCount (encoder, encodeGUID,
+      encodeProfileGUIDCount);
+}
+
+NVENCSTATUS
+NvEncGetEncodeProfileGUIDs (void *encoder, GUID encodeGUID,
+    GUID * profileGUIDs, uint32_t guidArraySize, uint32_t * GUIDCount)
+{
+  g_assert (nvenc_api.nvEncGetEncodeProfileGUIDs != NULL);
+  return nvenc_api.nvEncGetEncodeProfileGUIDs (encoder, encodeGUID,
+      profileGUIDs, guidArraySize, GUIDCount);
+}
+
+NVENCSTATUS
+NvEncGetInputFormats (void *encoder, GUID enc_guid,
+    NV_ENC_BUFFER_FORMAT * array, uint32_t size, uint32_t * num)
+{
+  g_assert (nvenc_api.nvEncGetInputFormats != NULL);
+  return nvenc_api.nvEncGetInputFormats (encoder, enc_guid, array, size, num);
+}
+
+NVENCSTATUS
+NvEncGetEncodePresetConfig (void *encoder, GUID encodeGUID,
+    GUID presetGUID, NV_ENC_PRESET_CONFIG * presetConfig)
+{
+  g_assert (nvenc_api.nvEncGetEncodePresetConfig != NULL);
+  return nvenc_api.nvEncGetEncodePresetConfig (encoder, encodeGUID, presetGUID,
+      presetConfig);
+}
+
+NVENCSTATUS
+NvEncGetEncodeCaps (void *encoder, GUID encodeGUID,
+    NV_ENC_CAPS_PARAM * capsParam, int *capsVal)
+{
+  g_assert (nvenc_api.nvEncGetEncodeCaps != NULL);
+  return nvenc_api.nvEncGetEncodeCaps (encoder, encodeGUID, capsParam, capsVal);
+}
+
+NVENCSTATUS
+NvEncGetSequenceParams (void *encoder,
+    NV_ENC_SEQUENCE_PARAM_PAYLOAD * sequenceParamPayload)
+{
+  g_assert (nvenc_api.nvEncGetSequenceParams != NULL);
+  return nvenc_api.nvEncGetSequenceParams (encoder, sequenceParamPayload);
+}
+
+NVENCSTATUS
+NvEncInitializeEncoder (void *encoder, NV_ENC_INITIALIZE_PARAMS * params)
+{
+  g_assert (nvenc_api.nvEncInitializeEncoder != NULL);
+  return nvenc_api.nvEncInitializeEncoder (encoder, params);
+}
+
+NVENCSTATUS
+NvEncReconfigureEncoder (void *encoder, NV_ENC_RECONFIGURE_PARAMS * params)
+{
+  g_assert (nvenc_api.nvEncReconfigureEncoder != NULL);
+  return nvenc_api.nvEncReconfigureEncoder (encoder, params);
+}
+
+NVENCSTATUS
+NvEncRegisterResource (void *encoder, NV_ENC_REGISTER_RESOURCE * params)
+{
+  g_assert (nvenc_api.nvEncRegisterResource != NULL);
+  return nvenc_api.nvEncRegisterResource (encoder, params);
+}
+
+NVENCSTATUS
+NvEncUnregisterResource (void *encoder, NV_ENC_REGISTERED_PTR resource)
+{
+  g_assert (nvenc_api.nvEncUnregisterResource != NULL);
+  return nvenc_api.nvEncUnregisterResource (encoder, resource);
+}
+
+NVENCSTATUS
+NvEncMapInputResource (void *encoder, NV_ENC_MAP_INPUT_RESOURCE * params)
+{
+  g_assert (nvenc_api.nvEncMapInputResource != NULL);
+  return nvenc_api.nvEncMapInputResource (encoder, params);
+}
+
+NVENCSTATUS
+NvEncUnmapInputResource (void *encoder, NV_ENC_INPUT_PTR input_buffer)
+{
+  g_assert (nvenc_api.nvEncUnmapInputResource != NULL);
+  return nvenc_api.nvEncUnmapInputResource (encoder, input_buffer);
+}
+
+NVENCSTATUS
+NvEncCreateInputBuffer (void *encoder, NV_ENC_CREATE_INPUT_BUFFER * input_buf)
+{
+  g_assert (nvenc_api.nvEncCreateInputBuffer != NULL);
+  return nvenc_api.nvEncCreateInputBuffer (encoder, input_buf);
+}
+
+NVENCSTATUS
+NvEncLockInputBuffer (void *encoder, NV_ENC_LOCK_INPUT_BUFFER * input_buf)
+{
+  g_assert (nvenc_api.nvEncLockInputBuffer != NULL);
+  return nvenc_api.nvEncLockInputBuffer (encoder, input_buf);
+}
+
+NVENCSTATUS
+NvEncUnlockInputBuffer (void *encoder, NV_ENC_INPUT_PTR input_buf)
+{
+  g_assert (nvenc_api.nvEncUnlockInputBuffer != NULL);
+  return nvenc_api.nvEncUnlockInputBuffer (encoder, input_buf);
+}
+
+NVENCSTATUS
+NvEncDestroyInputBuffer (void *encoder, NV_ENC_INPUT_PTR input_buf)
+{
+  g_assert (nvenc_api.nvEncDestroyInputBuffer != NULL);
+  return nvenc_api.nvEncDestroyInputBuffer (encoder, input_buf);
+}
+
+NVENCSTATUS
+NvEncCreateBitstreamBuffer (void *encoder, NV_ENC_CREATE_BITSTREAM_BUFFER * bb)
+{
+  g_assert (nvenc_api.nvEncCreateBitstreamBuffer != NULL);
+  return nvenc_api.nvEncCreateBitstreamBuffer (encoder, bb);
+}
+
+NVENCSTATUS
+NvEncLockBitstream (void *encoder, NV_ENC_LOCK_BITSTREAM * lock_bs)
+{
+  g_assert (nvenc_api.nvEncLockBitstream != NULL);
+  return nvenc_api.nvEncLockBitstream (encoder, lock_bs);
+}
+
+NVENCSTATUS
+NvEncUnlockBitstream (void *encoder, NV_ENC_OUTPUT_PTR bb)
+{
+  g_assert (nvenc_api.nvEncUnlockBitstream != NULL);
+  return nvenc_api.nvEncUnlockBitstream (encoder, bb);
+}
+
+NVENCSTATUS
+NvEncDestroyBitstreamBuffer (void *encoder, NV_ENC_OUTPUT_PTR bit_buf)
+{
+  g_assert (nvenc_api.nvEncDestroyBitstreamBuffer != NULL);
+  return nvenc_api.nvEncDestroyBitstreamBuffer (encoder, bit_buf);
+}
+
+NVENCSTATUS
+NvEncEncodePicture (void *encoder, NV_ENC_PIC_PARAMS * pic_params)
+{
+  g_assert (nvenc_api.nvEncEncodePicture != NULL);
+  return nvenc_api.nvEncEncodePicture (encoder, pic_params);
+}
+
+gboolean
+gst_nvenc_cmp_guid (GUID g1, GUID g2)
+{
+  return (g1.Data1 == g2.Data1 && g1.Data2 == g2.Data2 && g1.Data3 == g2.Data3
+      && g1.Data4[0] == g2.Data4[0] && g1.Data4[1] == g2.Data4[1]
+      && g1.Data4[2] == g2.Data4[2] && g1.Data4[3] == g2.Data4[3]
+      && g1.Data4[4] == g2.Data4[4] && g1.Data4[5] == g2.Data4[5]
+      && g1.Data4[6] == g2.Data4[6] && g1.Data4[7] == g2.Data4[7]);
+}
+
+NV_ENC_BUFFER_FORMAT
+gst_nvenc_get_nv_buffer_format (GstVideoFormat fmt)
+{
+  switch (fmt) {
+    case GST_VIDEO_FORMAT_NV12:
+      return NV_ENC_BUFFER_FORMAT_NV12_PL;
+    case GST_VIDEO_FORMAT_YV12:
+      return NV_ENC_BUFFER_FORMAT_YV12_PL;
+    case GST_VIDEO_FORMAT_I420:
+      return NV_ENC_BUFFER_FORMAT_IYUV_PL;
+    case GST_VIDEO_FORMAT_Y444:
+      return NV_ENC_BUFFER_FORMAT_YUV444_PL;
+    default:
+      break;
+  }
+  return NV_ENC_BUFFER_FORMAT_UNDEFINED;
+}
+
+CUcontext
+gst_nvenc_create_cuda_context (guint device_id)
+{
+  CUcontext cuda_ctx, old_ctx;
+  CUresult cres = CUDA_SUCCESS;
+  CUdevice cdev = 0, cuda_dev = -1;
+  int dev_count = 0;
+  char name[256];
+  int min = 0, maj = 0;
+  int i;
+
+  GST_INFO ("Initialising CUDA..");
+
+  cres = cuInit (0);
+
+  if (cres != CUDA_SUCCESS) {
+    GST_WARNING ("Failed to initialise CUDA, error code: 0x%08x", cres);
+    return NULL;
+  }
+
+  GST_INFO ("Initialised CUDA");
+
+  cres = cuDeviceGetCount (&dev_count);
+  if (cres != CUDA_SUCCESS || dev_count == 0) {
+    GST_WARNING ("No CUDA devices detected");
+    return NULL;
+  }
+
+  GST_INFO ("%d CUDA device(s) detected", dev_count);
+  for (i = 0; i < dev_count; ++i) {
+    if (cuDeviceGet (&cdev, i) == CUDA_SUCCESS
+        && cuDeviceGetName (name, sizeof (name), cdev) == CUDA_SUCCESS
+        && cuDeviceComputeCapability (&maj, &min, cdev) == CUDA_SUCCESS) {
+      GST_INFO ("GPU #%d supports NVENC: %s (%s) (Compute SM %d.%d)",
+          i, (((maj << 4) + min) >= 0x30) ? "yes" : "no", name, maj, min);
+      if (i == device_id) {
+        cuda_dev = cdev;
+      }
+    }
+  }
+
+  if (cuda_dev == -1) {
+    GST_WARNING ("Device with id %d does not exist or does not support NVENC",
+        device_id);
+    return NULL;
+  }
+
+  if (cuCtxCreate (&cuda_ctx, 0, cuda_dev) != CUDA_SUCCESS) {
+    GST_WARNING ("Failed to create CUDA context for cuda device %d", cuda_dev);
+    return NULL;
+  }
+
+  if (cuCtxPopCurrent (&old_ctx) != CUDA_SUCCESS) {
+    return NULL;
+  }
+
+  GST_INFO ("Created CUDA context %p", cuda_ctx);
+
+  return cuda_ctx;
+}
+
+gboolean
+gst_nvenc_destroy_cuda_context (CUcontext ctx)
+{
+  GST_INFO ("Destroying CUDA context %p", ctx);
+  return (cuCtxDestroy (ctx) == CUDA_SUCCESS);
+}
+
+static gboolean
+plugin_init (GstPlugin * plugin)
+{
+  GST_DEBUG_CATEGORY_INIT (gst_nvenc_debug, "nvenc", 0, "Nvidia NVENC encoder");
+
+  nvenc_api.version = NV_ENCODE_API_FUNCTION_LIST_VER;
+  if (NvEncodeAPICreateInstance (&nvenc_api) != NV_ENC_SUCCESS) {
+    GST_ERROR ("Failed to get NVEncodeAPI function table!");
+  } else {
+    GST_INFO ("Created NVEncodeAPI instance, got function table");
+
+    gst_element_register (plugin, "nvh264enc", GST_RANK_PRIMARY * 2,
+        gst_nv_h264_enc_get_type ());
+  }
+
+  return TRUE;
+}
+
+GST_PLUGIN_DEFINE (GST_VERSION_MAJOR,
+    GST_VERSION_MINOR,
+    nvenc,
+    "GStreamer NVENC plugin",
+    plugin_init, VERSION, "LGPL", GST_PACKAGE_NAME, GST_PACKAGE_ORIGIN)
diff --git a/sys/nvenc/gstnvenc.h b/sys/nvenc/gstnvenc.h
new file mode 100644
index 0000000..f4eb34b
--- /dev/null
+++ b/sys/nvenc/gstnvenc.h
@@ -0,0 +1,40 @@
+/* GStreamer NVENC plugin
+ * Copyright (C) 2015 Centricular Ltd
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifndef __GST_NVENC_H_INCLUDED__
+#define __GST_NVENC_H_INCLUDED__
+
+#include <gst/gst.h>
+#include <gst/video/video.h>
+
+#include <nvEncodeAPI.h>
+#include <cuda.h>
+
+GST_DEBUG_CATEGORY_EXTERN (gst_nvenc_debug);
+#define GST_CAT_DEFAULT gst_nvenc_debug
+
+CUcontext               gst_nvenc_create_cuda_context (guint device_id);
+
+gboolean                gst_nvenc_destroy_cuda_context (CUcontext ctx);
+
+gboolean                gst_nvenc_cmp_guid (GUID g1, GUID g2);
+
+NV_ENC_BUFFER_FORMAT    gst_nvenc_get_nv_buffer_format (GstVideoFormat fmt);
+
+#endif /* __GST_NVENC_H_INCLUDED__ */
diff --git a/sys/nvenc/gstnvh264enc.c b/sys/nvenc/gstnvh264enc.c
new file mode 100644
index 0000000..170e3f7
--- /dev/null
+++ b/sys/nvenc/gstnvh264enc.c
@@ -0,0 +1,610 @@
+/* GStreamer NVENC plugin
+ * Copyright (C) 2015 Centricular Ltd
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include "gstnvh264enc.h"
+
+#include <gst/pbutils/codec-utils.h>
+
+#include <string.h>
+
+#if HAVE_GST_GL
+#include <cuda.h>
+#include <cuda_runtime_api.h>
+#include <cuda_gl_interop.h>
+#define GST_USE_UNSTABLE_API
+#include <gst/gl/gl.h>
+#endif
+
+#define parent_class gst_nv_h264_enc_parent_class
+G_DEFINE_TYPE (GstNvH264Enc, gst_nv_h264_enc, GST_TYPE_NV_BASE_ENC);
+
+/* *INDENT-OFF* */
+static GstStaticPadTemplate src_factory = GST_STATIC_PAD_TEMPLATE ("src",
+    GST_PAD_SRC,
+    GST_PAD_ALWAYS,
+    GST_STATIC_CAPS ("video/x-h264, "
+        "width = (int) [ 1, 4096 ], height = (int) [ 1, 2160 ], "
+        "framerate = (fraction) [0/1, MAX], "
+        "stream-format = (string) byte-stream, " // TODO: avc support
+        "alignment = (string) au, "
+        "profile = (string) { high, main, baseline }") // TODO: a couple of others
+    );
+/* *INDENT-ON* */
+
+static gboolean gst_nv_h264_enc_open (GstVideoEncoder * enc);
+static gboolean gst_nv_h264_enc_close (GstVideoEncoder * enc);
+static GstCaps *gst_nv_h264_enc_getcaps (GstVideoEncoder * enc,
+    GstCaps * filter);
+static gboolean gst_nv_h264_enc_set_src_caps (GstNvBaseEnc * nvenc,
+    GstVideoCodecState * state);
+static gboolean gst_nv_h264_enc_initialize_encoder (GstNvBaseEnc * nvenc,
+    GstVideoCodecState * old_state, GstVideoCodecState * state);
+static gboolean gst_nv_h264_enc_set_pic_params (GstNvBaseEnc * nvenc,
+    GstVideoCodecFrame * frame, NV_ENC_PIC_PARAMS * pic_params);
+static void gst_nv_h264_enc_set_property (GObject * object, guint prop_id,
+    const GValue * value, GParamSpec * pspec);
+static void gst_nv_h264_enc_get_property (GObject * object, guint prop_id,
+    GValue * value, GParamSpec * pspec);
+static void gst_nv_h264_enc_finalize (GObject * obj);
+
+static void
+gst_nv_h264_enc_class_init (GstNvH264EncClass * klass)
+{
+  GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
+  GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
+  GstVideoEncoderClass *videoenc_class = GST_VIDEO_ENCODER_CLASS (klass);
+  GstNvBaseEncClass *nvenc_class = GST_NV_BASE_ENC_CLASS (klass);
+
+  gobject_class->set_property = gst_nv_h264_enc_set_property;
+  gobject_class->get_property = gst_nv_h264_enc_get_property;
+  gobject_class->finalize = gst_nv_h264_enc_finalize;
+
+  videoenc_class->open = GST_DEBUG_FUNCPTR (gst_nv_h264_enc_open);
+  videoenc_class->close = GST_DEBUG_FUNCPTR (gst_nv_h264_enc_close);
+
+  videoenc_class->getcaps = GST_DEBUG_FUNCPTR (gst_nv_h264_enc_getcaps);
+
+  nvenc_class->codec_id = NV_ENC_CODEC_H264_GUID;
+  nvenc_class->initialize_encoder = gst_nv_h264_enc_initialize_encoder;
+  nvenc_class->set_src_caps = gst_nv_h264_enc_set_src_caps;
+  nvenc_class->set_pic_params = gst_nv_h264_enc_set_pic_params;
+
+  gst_element_class_add_pad_template (element_class,
+      gst_static_pad_template_get (&src_factory));
+
+  gst_element_class_set_static_metadata (element_class,
+      "NVENC H.264 Video Encoder",
+      "Codec/Encoder/Video",
+      "Encode H.264 video streams using NVIDIA's hardware-accelerated NVENC encoder API",
+      "Tim-Philipp Müller <tim@centricular.com>\n"
+      "Matthew Waters <matthew@centricular.com>");
+}
+
+static void
+gst_nv_h264_enc_init (GstNvH264Enc * nvenc)
+{
+}
+
+static void
+gst_nv_h264_enc_finalize (GObject * obj)
+{
+  G_OBJECT_CLASS (gst_nv_h264_enc_parent_class)->finalize (obj);
+}
+
+static gboolean
+_get_supported_profiles (GstNvH264Enc * nvenc)
+{
+  NVENCSTATUS nv_ret;
+  GUID profile_guids[64];
+  GValue list = G_VALUE_INIT;
+  GValue val = G_VALUE_INIT;
+  guint i, n, n_profiles;
+
+  nv_ret =
+      NvEncGetEncodeProfileGUIDCount (GST_NV_BASE_ENC (nvenc)->encoder,
+      NV_ENC_CODEC_H264_GUID, &n);
+  if (nv_ret != NV_ENC_SUCCESS)
+    return FALSE;
+
+  nv_ret =
+      NvEncGetEncodeProfileGUIDs (GST_NV_BASE_ENC (nvenc)->encoder,
+      NV_ENC_CODEC_H264_GUID, profile_guids, G_N_ELEMENTS (profile_guids), &n);
+  if (nv_ret != NV_ENC_SUCCESS)
+    return FALSE;
+
+  n_profiles = 0;
+  g_value_init (&list, GST_TYPE_LIST);
+  for (i = 0; i < n; i++) {
+    g_value_init (&val, G_TYPE_STRING);
+
+    if (gst_nvenc_cmp_guid (profile_guids[i],
+            NV_ENC_H264_PROFILE_BASELINE_GUID)) {
+      g_value_set_static_string (&val, "baseline");
+      gst_value_list_append_value (&list, &val);
+      n_profiles++;
+    } else if (gst_nvenc_cmp_guid (profile_guids[i],
+            NV_ENC_H264_PROFILE_MAIN_GUID)) {
+      g_value_set_static_string (&val, "main");
+      gst_value_list_append_value (&list, &val);
+      n_profiles++;
+    } else if (gst_nvenc_cmp_guid (profile_guids[i],
+            NV_ENC_H264_PROFILE_HIGH_GUID)) {
+      g_value_set_static_string (&val, "high");
+      gst_value_list_append_value (&list, &val);
+      n_profiles++;
+    }
+    /* TODO: map HIGH_444, STEREO, CONSTRAINED_HIGH, SVC_TEMPORAL_SCALABILITY */
+
+    g_value_unset (&val);
+  }
+
+  if (n_profiles == 0)
+    return FALSE;
+
+  GST_OBJECT_LOCK (nvenc);
+  g_free (nvenc->supported_profiles);
+  nvenc->supported_profiles = g_memdup (&list, sizeof (GValue));
+  GST_OBJECT_UNLOCK (nvenc);
+
+  return TRUE;
+}
+
+static gboolean
+gst_nv_h264_enc_open (GstVideoEncoder * enc)
+{
+  GstNvH264Enc *nvenc = GST_NV_H264_ENC (enc);
+
+  if (!GST_VIDEO_ENCODER_CLASS (gst_nv_h264_enc_parent_class)->open (enc))
+    return FALSE;
+
+  /* Check if H.264 is supported */
+  {
+    uint32_t i, num = 0;
+    GUID guids[16];
+
+    NvEncGetEncodeGUIDs (GST_NV_BASE_ENC (nvenc)->encoder, guids,
+        G_N_ELEMENTS (guids), &num);
+
+    for (i = 0; i < num; ++i) {
+      if (gst_nvenc_cmp_guid (guids[i], NV_ENC_CODEC_H264_GUID))
+        break;
+    }
+    GST_INFO_OBJECT (enc, "H.264 encoding %ssupported", (i == num) ? "un" : "");
+    if (i == num) {
+      gst_nv_h264_enc_close (enc);
+      return FALSE;
+    }
+  }
+
+  /* query supported input formats */
+  if (!_get_supported_profiles (nvenc)) {
+    GST_WARNING_OBJECT (nvenc, "No supported encoding profiles");
+    gst_nv_h264_enc_close (enc);
+    return FALSE;
+  }
+
+  return TRUE;
+}
+
+static gboolean
+gst_nv_h264_enc_close (GstVideoEncoder * enc)
+{
+  GstNvH264Enc *nvenc = GST_NV_H264_ENC (enc);
+
+  GST_OBJECT_LOCK (nvenc);
+  g_free (nvenc->supported_profiles);
+  nvenc->supported_profiles = NULL;
+  GST_OBJECT_UNLOCK (nvenc);
+
+  return GST_VIDEO_ENCODER_CLASS (gst_nv_h264_enc_parent_class)->close (enc);
+}
+
+static GValue *
+_get_interlace_modes (GstNvH264Enc * nvenc)
+{
+  NV_ENC_CAPS_PARAM caps_param = { 0, };
+  GValue *list = g_new0 (GValue, 1);
+  GValue val = G_VALUE_INIT;
+
+  g_value_init (list, GST_TYPE_LIST);
+  g_value_init (&val, G_TYPE_STRING);
+
+  g_value_set_static_string (&val, "progressive");
+  gst_value_list_append_value (list, &val);
+
+  caps_param.version = NV_ENC_CAPS_PARAM_VER;
+  caps_param.capsToQuery = NV_ENC_CAPS_SUPPORT_FIELD_ENCODING;
+
+  if (NvEncGetEncodeCaps (GST_NV_BASE_ENC (nvenc)->encoder,
+          NV_ENC_CODEC_H264_GUID, &caps_param,
+          &nvenc->interlace_modes) != NV_ENC_SUCCESS)
+    nvenc->interlace_modes = 0;
+
+  if (nvenc->interlace_modes >= 1) {
+    g_value_set_static_string (&val, "interleaved");
+    gst_value_list_append_value (list, &val);
+    g_value_set_static_string (&val, "mixed");
+    gst_value_list_append_value (list, &val);
+  }
+  /* TODO: figure out what nvenc frame based interlacing means in gst terms */
+
+  return list;
+}
+
+static GstCaps *
+gst_nv_h264_enc_getcaps (GstVideoEncoder * enc, GstCaps * filter)
+{
+  GstNvH264Enc *nvenc = GST_NV_H264_ENC (enc);
+  GstCaps *supported_incaps = NULL;
+  GstCaps *template_caps, *caps;
+  GValue *input_formats = GST_NV_BASE_ENC (enc)->input_formats;
+
+  GST_OBJECT_LOCK (nvenc);
+
+  if (input_formats != NULL) {
+    GValue *val;
+
+    template_caps = gst_pad_get_pad_template_caps (enc->sinkpad);
+    supported_incaps = gst_caps_copy (template_caps);
+    gst_caps_set_value (supported_incaps, "format", input_formats);
+
+    val = _get_interlace_modes (nvenc);
+    gst_caps_set_value (supported_incaps, "interlace-mode", val);
+    g_free (val);
+
+    GST_LOG_OBJECT (enc, "codec input caps %" GST_PTR_FORMAT, supported_incaps);
+    GST_LOG_OBJECT (enc, "   template caps %" GST_PTR_FORMAT, template_caps);
+    caps = gst_caps_intersect (template_caps, supported_incaps);
+    gst_caps_unref (template_caps);
+    gst_caps_unref (supported_incaps);
+    supported_incaps = caps;
+    GST_LOG_OBJECT (enc, "  supported caps %" GST_PTR_FORMAT, supported_incaps);
+  }
+
+  GST_OBJECT_UNLOCK (nvenc);
+
+  caps = gst_video_encoder_proxy_getcaps (enc, supported_incaps, filter);
+
+  if (supported_incaps)
+    gst_caps_unref (supported_incaps);
+
+  GST_DEBUG_OBJECT (nvenc, "  returning caps %" GST_PTR_FORMAT, caps);
+
+  return caps;
+}
+
+static gboolean
+gst_nv_h264_enc_set_profile_and_level (GstNvH264Enc * nvenc, GstCaps * caps)
+{
+#define N_BYTES_SPS 128
+  guint8 sps[N_BYTES_SPS];
+  NV_ENC_SEQUENCE_PARAM_PAYLOAD spp = { 0, };
+  GstStructure *s;
+  const gchar *profile;
+  GstCaps *allowed_caps;
+  GstStructure *s2;
+  const gchar *allowed_profile;
+  NVENCSTATUS nv_ret;
+  guint32 seq_size;
+
+  spp.version = NV_ENC_SEQUENCE_PARAM_PAYLOAD_VER;
+  spp.inBufferSize = N_BYTES_SPS;
+  spp.spsId = 0;
+  spp.ppsId = 0;
+  spp.spsppsBuffer = &sps;
+  spp.outSPSPPSPayloadSize = &seq_size;
+  nv_ret = NvEncGetSequenceParams (GST_NV_BASE_ENC (nvenc)->encoder, &spp);
+  if (nv_ret != NV_ENC_SUCCESS) {
+    GST_ELEMENT_ERROR (nvenc, STREAM, ENCODE, ("Encode header failed."),
+        ("NvEncGetSequenceParams return code=%d", nv_ret));
+    return FALSE;
+  }
+
+  if (seq_size < 8) {
+    GST_ELEMENT_ERROR (nvenc, STREAM, ENCODE, ("Encode header failed."),
+        ("NvEncGetSequenceParams returned incomplete data"));
+    return FALSE;
+  }
+
+  /* skip nal header and identifier */
+  gst_codec_utils_h264_caps_set_level_and_profile (caps, &sps[5], 3);
+
+  /* Constrained baseline is a strict subset of baseline. If downstream
+   * wanted baseline and we produced constrained baseline, we can just
+   * set the profile to baseline in the caps to make negotiation happy.
+   * Same goes for baseline as subset of main profile and main as a subset
+   * of high profile.
+   */
+  s = gst_caps_get_structure (caps, 0);
+  profile = gst_structure_get_string (s, "profile");
+
+  allowed_caps = gst_pad_get_allowed_caps (GST_VIDEO_ENCODER_SRC_PAD (nvenc));
+
+  if (allowed_caps == NULL)
+    goto no_peer;
+
+  if (!gst_caps_can_intersect (allowed_caps, caps)) {
+    allowed_caps = gst_caps_make_writable (allowed_caps);
+    allowed_caps = gst_caps_truncate (allowed_caps);
+    s2 = gst_caps_get_structure (allowed_caps, 0);
+    gst_structure_fixate_field_string (s2, "profile", profile);
+    allowed_profile = gst_structure_get_string (s2, "profile");
+    if (!strcmp (allowed_profile, "high")) {
+      if (!strcmp (profile, "constrained-baseline")
+          || !strcmp (profile, "baseline") || !strcmp (profile, "main")) {
+        gst_structure_set (s, "profile", G_TYPE_STRING, "high", NULL);
+        GST_INFO_OBJECT (nvenc, "downstream requested high profile, but "
+            "encoder will now output %s profile (which is a subset), due "
+            "to how it's been configured", profile);
+      }
+    } else if (!strcmp (allowed_profile, "main")) {
+      if (!strcmp (profile, "constrained-baseline")
+          || !strcmp (profile, "baseline")) {
+        gst_structure_set (s, "profile", G_TYPE_STRING, "main", NULL);
+        GST_INFO_OBJECT (nvenc, "downstream requested main profile, but "
+            "encoder will now output %s profile (which is a subset), due "
+            "to how it's been configured", profile);
+      }
+    } else if (!strcmp (allowed_profile, "baseline")) {
+      if (!strcmp (profile, "constrained-baseline"))
+        gst_structure_set (s, "profile", G_TYPE_STRING, "baseline", NULL);
+    }
+  }
+  gst_caps_unref (allowed_caps);
+
+no_peer:
+
+  return TRUE;
+
+#undef N_BYTES_SPS
+}
+
+static gboolean
+gst_nv_h264_enc_set_src_caps (GstNvBaseEnc * nvenc, GstVideoCodecState * state)
+{
+  GstNvH264Enc *h264enc = GST_NV_H264_ENC (nvenc);
+  GstVideoCodecState *out_state;
+  GstStructure *s;
+  GstCaps *out_caps;
+
+  out_caps = gst_caps_new_empty_simple ("video/x-h264");
+  s = gst_caps_get_structure (out_caps, 0);
+
+  /* TODO: add support for avc format as well */
+  gst_structure_set (s, "stream-format", G_TYPE_STRING, "byte-stream",
+      "alignment", G_TYPE_STRING, "au", NULL);
+
+  if (!gst_nv_h264_enc_set_profile_and_level (h264enc, out_caps)) {
+    gst_caps_unref (out_caps);
+    return FALSE;
+  }
+
+  out_state = gst_video_encoder_set_output_state (GST_VIDEO_ENCODER (nvenc),
+      out_caps, state);
+
+  GST_INFO_OBJECT (nvenc, "output caps: %" GST_PTR_FORMAT, out_state->caps);
+
+  /* encoder will keep it around for us */
+  gst_video_codec_state_unref (out_state);
+
+  /* TODO: would be nice to also send some tags with the codec name */
+  return TRUE;
+}
+
+static gboolean
+gst_nv_h264_enc_initialize_encoder (GstNvBaseEnc * nvenc,
+    GstVideoCodecState * old_state, GstVideoCodecState * state)
+{
+  GstNvH264Enc *h264enc = GST_NV_H264_ENC (nvenc);
+  NV_ENC_RECONFIGURE_PARAMS reconfigure_params = { 0, };
+  NV_ENC_INITIALIZE_PARAMS init_params = { 0, };
+  NV_ENC_INITIALIZE_PARAMS *params;
+  NV_ENC_PRESET_CONFIG preset_config = { 0, };
+  NVENCSTATUS nv_ret;
+  GstVideoInfo *info = &state->info;
+  GstCaps *allowed_caps, *template_caps;
+  GUID selected_profile = NV_ENC_CODEC_PROFILE_AUTOSELECT_GUID;
+  int level_idc = NV_ENC_LEVEL_AUTOSELECT;
+
+  /* TODO: support reconfiguration */
+  if (old_state) {
+    reconfigure_params.version = NV_ENC_RECONFIGURE_PARAMS_VER;
+    params = &reconfigure_params.reInitEncodeParams;
+  } else {
+    params = &init_params;
+  }
+
+  template_caps = gst_static_pad_template_get_caps (&src_factory);
+  allowed_caps = gst_pad_get_allowed_caps (GST_VIDEO_ENCODER_SRC_PAD (h264enc));
+
+  if (template_caps == allowed_caps) {
+    GST_INFO_OBJECT (h264enc, "downstream has ANY caps");
+  } else if (allowed_caps) {
+    GstStructure *s;
+    const gchar *profile;
+    const gchar *level;
+
+    if (gst_caps_is_empty (allowed_caps)) {
+      gst_caps_unref (allowed_caps);
+      gst_caps_unref (template_caps);
+      return FALSE;
+    }
+
+    allowed_caps = gst_caps_make_writable (allowed_caps);
+    allowed_caps = gst_caps_fixate (allowed_caps);
+    s = gst_caps_get_structure (allowed_caps, 0);
+
+    profile = gst_structure_get_string (s, "profile");
+    if (profile) {
+      if (!strcmp (profile, "baseline")) {
+        selected_profile = NV_ENC_H264_PROFILE_BASELINE_GUID;
+      } else if (g_str_has_prefix (profile, "high-4:4:4")) {
+        selected_profile = NV_ENC_H264_PROFILE_HIGH_444_GUID;
+      } else if (g_str_has_prefix (profile, "high-10")) {
+        g_assert_not_reached ();
+      } else if (g_str_has_prefix (profile, "high-4:2:2")) {
+        g_assert_not_reached ();
+      } else if (g_str_has_prefix (profile, "high")) {
+        selected_profile = NV_ENC_H264_PROFILE_HIGH_GUID;
+      } else if (g_str_has_prefix (profile, "main")) {
+        selected_profile = NV_ENC_H264_PROFILE_MAIN_GUID;
+      } else {
+        g_assert_not_reached ();
+      }
+    }
+
+    level = gst_structure_get_string (s, "level");
+    if (level)
+      /* matches values stored in NV_ENC_LEVEL */
+      level_idc = gst_codec_utils_h264_get_level_idc (level);
+
+    gst_caps_unref (allowed_caps);
+  }
+  gst_caps_unref (template_caps);
+
+  params->version = NV_ENC_INITIALIZE_PARAMS_VER;
+  params->encodeGUID = NV_ENC_CODEC_H264_GUID;
+  params->encodeWidth = GST_VIDEO_INFO_WIDTH (info);
+  params->encodeHeight = GST_VIDEO_INFO_HEIGHT (info);
+  /* FIXME: make this a property */
+  params->presetGUID = NV_ENC_PRESET_HP_GUID;   // _DEFAULT
+  params->enablePTD = 1;
+  if (!old_state) {
+    /* this sets the required buffer size and the maximum allowed size on
+     * subsequent reconfigures */
+    /* FIXME: propertise this */
+    params->maxEncodeWidth = GST_VIDEO_INFO_WIDTH (info);
+    params->maxEncodeHeight = GST_VIDEO_INFO_HEIGHT (info);
+    gst_nv_base_enc_set_max_encode_size (GST_NV_BASE_ENC (h264enc),
+        params->maxEncodeWidth, params->maxEncodeHeight);
+  } else {
+    guint max_width, max_height;
+
+    gst_nv_base_enc_get_max_encode_size (GST_NV_BASE_ENC (h264enc),
+        &max_width, &max_height);
+
+    if (GST_VIDEO_INFO_WIDTH (info) > max_width
+        || GST_VIDEO_INFO_HEIGHT (info) > max_height) {
+      GST_ELEMENT_ERROR (h264enc, STREAM, FORMAT, ("%s", "Requested stream "
+              "size is larger than the maximum configured size"), (NULL));
+      return FALSE;
+    }
+  }
+
+  preset_config.version = NV_ENC_PRESET_CONFIG_VER;
+  preset_config.presetCfg.version = NV_ENC_CONFIG_VER;
+
+  nv_ret =
+      NvEncGetEncodePresetConfig (GST_NV_BASE_ENC (h264enc)->encoder,
+      params->encodeGUID, params->presetGUID, &preset_config);
+  if (nv_ret != NV_ENC_SUCCESS) {
+    GST_ELEMENT_ERROR (h264enc, LIBRARY, SETTINGS, (NULL),
+        ("Failed to get encode preset configuration: %d", nv_ret));
+    return FALSE;
+  }
+  params->encodeConfig = &preset_config.presetCfg;
+
+  /* override some defaults */
+  GST_LOG_OBJECT (h264enc, "setting parameters");
+  preset_config.presetCfg.version = NV_ENC_CONFIG_VER;
+  preset_config.presetCfg.profileGUID = selected_profile;
+  preset_config.presetCfg.encodeCodecConfig.h264Config.level = level_idc;
+  preset_config.presetCfg.encodeCodecConfig.h264Config.chromaFormatIDC = 1;
+  if (GST_VIDEO_INFO_FORMAT (info) == GST_VIDEO_FORMAT_Y444) {
+    GST_DEBUG_OBJECT (h264enc, "have Y444 input, setting config accordingly");
+    preset_config.presetCfg.encodeCodecConfig.
+        h264Config.separateColourPlaneFlag = 1;
+    preset_config.presetCfg.encodeCodecConfig.h264Config.chromaFormatIDC = 3;
+  }
+
+  /* FIXME: make property */
+  preset_config.presetCfg.encodeCodecConfig.h264Config.outputAUD = 1;
+
+  if (GST_VIDEO_INFO_IS_INTERLACED (info)) {
+    if (GST_VIDEO_INFO_INTERLACE_MODE (info) ==
+        GST_VIDEO_INTERLACE_MODE_INTERLEAVED
+        || GST_VIDEO_INFO_INTERLACE_MODE (info) ==
+        GST_VIDEO_INTERLACE_MODE_MIXED) {
+      preset_config.presetCfg.frameFieldMode =
+          NV_ENC_PARAMS_FRAME_FIELD_MODE_FIELD;
+    }
+  }
+
+  if (info->fps_d > 0 && info->fps_n > 0) {
+    params->frameRateNum = info->fps_n;
+    params->frameRateDen = info->fps_d;
+  } else {
+    GST_FIXME_OBJECT (h264enc, "variable framerate");
+  }
+
+  if (old_state) {
+    nv_ret =
+        NvEncReconfigureEncoder (GST_NV_BASE_ENC (h264enc)->encoder,
+        &reconfigure_params);
+  } else {
+    nv_ret =
+        NvEncInitializeEncoder (GST_NV_BASE_ENC (h264enc)->encoder, params);
+  }
+
+  if (nv_ret != NV_ENC_SUCCESS) {
+    GST_ELEMENT_ERROR (h264enc, LIBRARY, SETTINGS, (NULL),
+        ("Failed to %sinit encoder: %d", old_state ? "re" : "", nv_ret));
+    return FALSE;
+  }
+  GST_INFO_OBJECT (h264enc, "configured encoder");
+
+  return TRUE;
+}
+
+static gboolean
+gst_nv_h264_enc_set_pic_params (GstNvBaseEnc * enc, GstVideoCodecFrame * frame,
+    NV_ENC_PIC_PARAMS * pic_params)
+{
+  /* encode whole picture in one single slice */
+  pic_params->codecPicParams.h264PicParams.sliceMode = 0;
+  pic_params->codecPicParams.h264PicParams.sliceModeData = 0;
+
+  return TRUE;
+}
+
+static void
+gst_nv_h264_enc_set_property (GObject * object, guint prop_id,
+    const GValue * value, GParamSpec * pspec)
+{
+  switch (prop_id) {
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
+  }
+}
+
+static void
+gst_nv_h264_enc_get_property (GObject * object, guint prop_id, GValue * value,
+    GParamSpec * pspec)
+{
+  switch (prop_id) {
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
+  }
+}
diff --git a/sys/nvenc/gstnvh264enc.h b/sys/nvenc/gstnvh264enc.h
new file mode 100644
index 0000000..8ed6574
--- /dev/null
+++ b/sys/nvenc/gstnvh264enc.h
@@ -0,0 +1,59 @@
+/* GStreamer NVENC plugin
+ * Copyright (C) 2015 Centricular Ltd
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifndef __GST_NV_H264_ENC_H_INCLUDED__
+#define __GST_NV_H264_ENC_H_INCLUDED__
+
+#include "gstnvbaseenc.h"
+
+#define GST_TYPE_NV_H264_ENC \
+  (gst_nv_h264_enc_get_type())
+#define GST_NV_H264_ENC(obj) \
+  (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_NV_H264_ENC,GstNvH264Enc))
+#define GST_NV_H264_ENC_CLASS(klass) \
+  (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_NV_H264_ENC,GstNvH264EncClass))
+#define GST_NV_H264_ENC_GET_CLASS(obj) \
+  (G_TYPE_INSTANCE_GET_CLASS((obj),GST_TYPE_NV_H264_ENC,GstNvH264EncClass))
+#define GST_IS_NV_H264_ENC(obj) \
+  (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_NV_H264_ENC))
+#define GST_IS_NV_H264_ENC_CLASS(obj) \
+  (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_NV_H264_ENC))
+
+typedef struct {
+  GstNvBaseEnc base_nvenc;
+
+  /* the supported input formats */
+  GValue        * supported_profiles;             /* OBJECT LOCK */
+
+  GstVideoCodecState *input_state;
+  gboolean            gl_input;
+
+  /* supported interlacing input modes.
+   * 0 = none, 1 = fields, 2 = interleaved */
+  gint            interlace_modes;
+} GstNvH264Enc;
+
+typedef struct {
+  GstNvBaseEncClass video_encoder_class;
+} GstNvH264EncClass;
+
+G_GNUC_INTERNAL
+GType gst_nv_h264_enc_get_type (void);
+
+#endif /* __GST_NV_H264_ENC_H_INCLUDED__ */
diff --git a/sys/opensles/Makefile.in b/sys/opensles/Makefile.in
index 04538b4..4d86c59 100644
--- a/sys/opensles/Makefile.in
+++ b/sys/opensles/Makefile.in
@@ -116,16 +116,15 @@
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
 	$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
-	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gsettings.m4 \
-	$(top_srcdir)/m4/gst-fionread.m4 $(top_srcdir)/m4/gst-sdl.m4 \
-	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
-	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
-	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libgcrypt.m4 \
-	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
-	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
-	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
-	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
-	$(top_srcdir)/configure.ac
+	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gst-fionread.m4 \
+	$(top_srcdir)/m4/gst-sdl.m4 $(top_srcdir)/m4/iconv.m4 \
+	$(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \
+	$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
+	$(top_srcdir)/m4/libgcrypt.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
+	$(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \
@@ -277,6 +276,8 @@
 CLUTTER_X11_LIBS = @CLUTTER_X11_LIBS@
 CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
+CUDA_CFLAGS = @CUDA_CFLAGS@
+CUDA_LIBS = @CUDA_LIBS@
 CURL_CFLAGS = @CURL_CFLAGS@
 CURL_LIBS = @CURL_LIBS@
 CXX = @CXX@
@@ -314,6 +315,8 @@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
+EGL_CFLAGS = @EGL_CFLAGS@
+EGL_LIBS = @EGL_LIBS@
 EGREP = @EGREP@
 ERROR_CFLAGS = @ERROR_CFLAGS@
 ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
@@ -322,7 +325,6 @@
 EXIF_CFLAGS = @EXIF_CFLAGS@
 EXIF_LIBS = @EXIF_LIBS@
 FAAC_LIBS = @FAAC_LIBS@
-FAAD_IS_NEAAC = @FAAD_IS_NEAAC@
 FAAD_LIBS = @FAAD_LIBS@
 FFLAGS = @FFLAGS@
 FGREP = @FGREP@
@@ -341,8 +343,9 @@
 GIO_LIBS = @GIO_LIBS@
 GIO_UNIX_CFLAGS = @GIO_UNIX_CFLAGS@
 GIO_UNIX_LIBS = @GIO_UNIX_LIBS@
+GLES2_CFLAGS = @GLES2_CFLAGS@
+GLES2_LIBS = @GLES2_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
-GLIB_COMPILE_SCHEMAS = @GLIB_COMPILE_SCHEMAS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
@@ -359,16 +362,17 @@
 GMODULE_NO_EXPORT_LIBS = @GMODULE_NO_EXPORT_LIBS@
 GMSGFMT = @GMSGFMT@
 GMSGFMT_015 = @GMSGFMT_015@
+GNUSTL_CFLAGS = @GNUSTL_CFLAGS@
+GNUSTL_LIBS = @GNUSTL_LIBS@
 GRAPHENE_CFLAGS = @GRAPHENE_CFLAGS@
 GRAPHENE_LIBS = @GRAPHENE_LIBS@
 GREP = @GREP@
-GSETTINGS_CFLAGS = @GSETTINGS_CFLAGS@
-GSETTINGS_DISABLE_SCHEMAS_COMPILE = @GSETTINGS_DISABLE_SCHEMAS_COMPILE@
-GSETTINGS_LIBS = @GSETTINGS_LIBS@
 GSM_LIBS = @GSM_LIBS@
 GSTPB_PLUGINS_DIR = @GSTPB_PLUGINS_DIR@
 GSTPB_PREFIX = @GSTPB_PREFIX@
 GST_AGE = @GST_AGE@
+GST_ALLOCATORS_CFLAGS = @GST_ALLOCATORS_CFLAGS@
+GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
 GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
 GST_API_VERSION = @GST_API_VERSION@
 GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
@@ -394,6 +398,8 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PBUTILS_CFLAGS = @GST_PBUTILS_CFLAGS@
+GST_PBUTILS_LIBS = @GST_PBUTILS_LIBS@
 GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BAD_CFLAGS = @GST_PLUGINS_BAD_CFLAGS@
@@ -419,6 +425,8 @@
 GST_PREFIX = @GST_PREFIX@
 GST_REVISION = @GST_REVISION@
 GST_TOOLS_DIR = @GST_TOOLS_DIR@
+GST_VIDEO_CFLAGS = @GST_VIDEO_CFLAGS@
+GST_VIDEO_LIBS = @GST_VIDEO_LIBS@
 GTK3_CFLAGS = @GTK3_CFLAGS@
 GTK3_GL_CFLAGS = @GTK3_GL_CFLAGS@
 GTK3_GL_LIBS = @GTK3_GL_LIBS@
@@ -520,6 +528,7 @@
 LTLIBICONV = @LTLIBICONV@
 LTLIBINTL = @LTLIBINTL@
 LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
 MANIFEST_TOOL = @MANIFEST_TOOL@
@@ -533,8 +542,6 @@
 MODPLUG_LIBS = @MODPLUG_LIBS@
 MPEG2ENC_CFLAGS = @MPEG2ENC_CFLAGS@
 MPEG2ENC_LIBS = @MPEG2ENC_LIBS@
-MPG123_CFLAGS = @MPG123_CFLAGS@
-MPG123_LIBS = @MPG123_LIBS@
 MPLEX_CFLAGS = @MPLEX_CFLAGS@
 MPLEX_LDFLAGS = @MPLEX_LDFLAGS@
 MPLEX_LIBS = @MPLEX_LIBS@
@@ -550,6 +557,8 @@
 NETTLE_LIBS = @NETTLE_LIBS@
 NM = @NM@
 NMEDIT = @NMEDIT@
+NVENCODE_CFLAGS = @NVENCODE_CFLAGS@
+NVENCODE_LIBS = @NVENCODE_LIBS@
 OBJC = @OBJC@
 OBJCDEPMODE = @OBJCDEPMODE@
 OBJCFLAGS = @OBJCFLAGS@
@@ -607,16 +616,18 @@
 PYTHON_PLATFORM = @PYTHON_PLATFORM@
 PYTHON_PREFIX = @PYTHON_PREFIX@
 PYTHON_VERSION = @PYTHON_VERSION@
+QT_ANDROID_CFLAGS = @QT_ANDROID_CFLAGS@
+QT_ANDROID_LIBS = @QT_ANDROID_LIBS@
 QT_CFLAGS = @QT_CFLAGS@
 QT_LIBS = @QT_LIBS@
+QT_MAC_CFLAGS = @QT_MAC_CFLAGS@
+QT_MAC_LIBS = @QT_MAC_LIBS@
 QT_WAYLAND_CFLAGS = @QT_WAYLAND_CFLAGS@
 QT_WAYLAND_LIBS = @QT_WAYLAND_LIBS@
 QT_X11_CFLAGS = @QT_X11_CFLAGS@
 QT_X11_LIBS = @QT_X11_LIBS@
 RANLIB = @RANLIB@
 RCC = @RCC@
-RSVG_2_36_2_CFLAGS = @RSVG_2_36_2_CFLAGS@
-RSVG_2_36_2_LIBS = @RSVG_2_36_2_LIBS@
 RSVG_CFLAGS = @RSVG_CFLAGS@
 RSVG_LIBS = @RSVG_LIBS@
 RTMP_CFLAGS = @RTMP_CFLAGS@
@@ -668,6 +679,7 @@
 VOAACENC_LIBS = @VOAACENC_LIBS@
 VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
 VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VULKAN_LIBS = @VULKAN_LIBS@
 WARNING_CFLAGS = @WARNING_CFLAGS@
 WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
 WARNING_OBJCFLAGS = @WARNING_OBJCFLAGS@
@@ -678,6 +690,7 @@
 WAYLAND_LIBS = @WAYLAND_LIBS@
 WEBP_CFLAGS = @WEBP_CFLAGS@
 WEBP_LIBS = @WEBP_LIBS@
+WGET = @WGET@
 WILDMIDI_CFLAGS = @WILDMIDI_CFLAGS@
 WILDMIDI_LIBS = @WILDMIDI_LIBS@
 WINKS_LIBS = @WINKS_LIBS@
@@ -687,6 +700,8 @@
 X11_LIBS = @X11_LIBS@
 X265_CFLAGS = @X265_CFLAGS@
 X265_LIBS = @X265_LIBS@
+XCB_CFLAGS = @XCB_CFLAGS@
+XCB_LIBS = @XCB_LIBS@
 XCOMPOSITE_CFLAGS = @XCOMPOSITE_CFLAGS@
 XCOMPOSITE_LIBS = @XCOMPOSITE_LIBS@
 XGETTEXT = @XGETTEXT@
@@ -724,7 +739,6 @@
 docdir = @docdir@
 dvidir = @dvidir@
 exec_prefix = @exec_prefix@
-gsettingsschemadir = @gsettingsschemadir@
 host = @host@
 host_alias = @host_alias@
 host_cpu = @host_cpu@
diff --git a/sys/opensles/openslessink.c b/sys/opensles/openslessink.c
index ce93d25..c2ec806 100644
--- a/sys/opensles/openslessink.c
+++ b/sys/opensles/openslessink.c
@@ -26,7 +26,7 @@
  * <refsect2>
  * <title>Example pipelines</title>
  * |[
- * gst-launch -v filesrc location=music.ogg ! oggdemux ! vorbisdec ! audioconvert ! audioresample ! opeslessink
+ * gst-launch-1.0 -v filesrc location=music.ogg ! oggdemux ! vorbisdec ! audioconvert ! audioresample ! opeslessink
  * ]| Play an Ogg/Vorbis file.
  * </refsect2>
  *
diff --git a/sys/opensles/openslessrc.c b/sys/opensles/openslessrc.c
index d0dfa32..6505ab1 100644
--- a/sys/opensles/openslessrc.c
+++ b/sys/opensles/openslessrc.c
@@ -26,7 +26,7 @@
  * <refsect2>
  * <title>Example pipelines</title>
  * |[
- * gst-launch -v openslessrc ! audioconvert ! vorbisenc ! oggmux ! filesink location=recorded.ogg
+ * gst-launch-1.0 -v openslessrc ! audioconvert ! vorbisenc ! oggmux ! filesink location=recorded.ogg
  * ]| Record from default audio input and encode to Ogg/Vorbis.
  * </refsect2>
  *
diff --git a/sys/pvr2d/Makefile.in b/sys/pvr2d/Makefile.in
index 4e8ae9f..1fe31ae 100644
--- a/sys/pvr2d/Makefile.in
+++ b/sys/pvr2d/Makefile.in
@@ -116,16 +116,15 @@
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
 	$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
-	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gsettings.m4 \
-	$(top_srcdir)/m4/gst-fionread.m4 $(top_srcdir)/m4/gst-sdl.m4 \
-	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
-	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
-	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libgcrypt.m4 \
-	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
-	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
-	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
-	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
-	$(top_srcdir)/configure.ac
+	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gst-fionread.m4 \
+	$(top_srcdir)/m4/gst-sdl.m4 $(top_srcdir)/m4/iconv.m4 \
+	$(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \
+	$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
+	$(top_srcdir)/m4/libgcrypt.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
+	$(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \
@@ -278,6 +277,8 @@
 CLUTTER_X11_LIBS = @CLUTTER_X11_LIBS@
 CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
+CUDA_CFLAGS = @CUDA_CFLAGS@
+CUDA_LIBS = @CUDA_LIBS@
 CURL_CFLAGS = @CURL_CFLAGS@
 CURL_LIBS = @CURL_LIBS@
 CXX = @CXX@
@@ -315,6 +316,8 @@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
+EGL_CFLAGS = @EGL_CFLAGS@
+EGL_LIBS = @EGL_LIBS@
 EGREP = @EGREP@
 ERROR_CFLAGS = @ERROR_CFLAGS@
 ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
@@ -323,7 +326,6 @@
 EXIF_CFLAGS = @EXIF_CFLAGS@
 EXIF_LIBS = @EXIF_LIBS@
 FAAC_LIBS = @FAAC_LIBS@
-FAAD_IS_NEAAC = @FAAD_IS_NEAAC@
 FAAD_LIBS = @FAAD_LIBS@
 FFLAGS = @FFLAGS@
 FGREP = @FGREP@
@@ -342,8 +344,9 @@
 GIO_LIBS = @GIO_LIBS@
 GIO_UNIX_CFLAGS = @GIO_UNIX_CFLAGS@
 GIO_UNIX_LIBS = @GIO_UNIX_LIBS@
+GLES2_CFLAGS = @GLES2_CFLAGS@
+GLES2_LIBS = @GLES2_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
-GLIB_COMPILE_SCHEMAS = @GLIB_COMPILE_SCHEMAS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
@@ -360,16 +363,17 @@
 GMODULE_NO_EXPORT_LIBS = @GMODULE_NO_EXPORT_LIBS@
 GMSGFMT = @GMSGFMT@
 GMSGFMT_015 = @GMSGFMT_015@
+GNUSTL_CFLAGS = @GNUSTL_CFLAGS@
+GNUSTL_LIBS = @GNUSTL_LIBS@
 GRAPHENE_CFLAGS = @GRAPHENE_CFLAGS@
 GRAPHENE_LIBS = @GRAPHENE_LIBS@
 GREP = @GREP@
-GSETTINGS_CFLAGS = @GSETTINGS_CFLAGS@
-GSETTINGS_DISABLE_SCHEMAS_COMPILE = @GSETTINGS_DISABLE_SCHEMAS_COMPILE@
-GSETTINGS_LIBS = @GSETTINGS_LIBS@
 GSM_LIBS = @GSM_LIBS@
 GSTPB_PLUGINS_DIR = @GSTPB_PLUGINS_DIR@
 GSTPB_PREFIX = @GSTPB_PREFIX@
 GST_AGE = @GST_AGE@
+GST_ALLOCATORS_CFLAGS = @GST_ALLOCATORS_CFLAGS@
+GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
 GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
 GST_API_VERSION = @GST_API_VERSION@
 GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
@@ -395,6 +399,8 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PBUTILS_CFLAGS = @GST_PBUTILS_CFLAGS@
+GST_PBUTILS_LIBS = @GST_PBUTILS_LIBS@
 GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BAD_CFLAGS = @GST_PLUGINS_BAD_CFLAGS@
@@ -420,6 +426,8 @@
 GST_PREFIX = @GST_PREFIX@
 GST_REVISION = @GST_REVISION@
 GST_TOOLS_DIR = @GST_TOOLS_DIR@
+GST_VIDEO_CFLAGS = @GST_VIDEO_CFLAGS@
+GST_VIDEO_LIBS = @GST_VIDEO_LIBS@
 GTK3_CFLAGS = @GTK3_CFLAGS@
 GTK3_GL_CFLAGS = @GTK3_GL_CFLAGS@
 GTK3_GL_LIBS = @GTK3_GL_LIBS@
@@ -521,6 +529,7 @@
 LTLIBICONV = @LTLIBICONV@
 LTLIBINTL = @LTLIBINTL@
 LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
 MANIFEST_TOOL = @MANIFEST_TOOL@
@@ -534,8 +543,6 @@
 MODPLUG_LIBS = @MODPLUG_LIBS@
 MPEG2ENC_CFLAGS = @MPEG2ENC_CFLAGS@
 MPEG2ENC_LIBS = @MPEG2ENC_LIBS@
-MPG123_CFLAGS = @MPG123_CFLAGS@
-MPG123_LIBS = @MPG123_LIBS@
 MPLEX_CFLAGS = @MPLEX_CFLAGS@
 MPLEX_LDFLAGS = @MPLEX_LDFLAGS@
 MPLEX_LIBS = @MPLEX_LIBS@
@@ -551,6 +558,8 @@
 NETTLE_LIBS = @NETTLE_LIBS@
 NM = @NM@
 NMEDIT = @NMEDIT@
+NVENCODE_CFLAGS = @NVENCODE_CFLAGS@
+NVENCODE_LIBS = @NVENCODE_LIBS@
 OBJC = @OBJC@
 OBJCDEPMODE = @OBJCDEPMODE@
 OBJCFLAGS = @OBJCFLAGS@
@@ -608,16 +617,18 @@
 PYTHON_PLATFORM = @PYTHON_PLATFORM@
 PYTHON_PREFIX = @PYTHON_PREFIX@
 PYTHON_VERSION = @PYTHON_VERSION@
+QT_ANDROID_CFLAGS = @QT_ANDROID_CFLAGS@
+QT_ANDROID_LIBS = @QT_ANDROID_LIBS@
 QT_CFLAGS = @QT_CFLAGS@
 QT_LIBS = @QT_LIBS@
+QT_MAC_CFLAGS = @QT_MAC_CFLAGS@
+QT_MAC_LIBS = @QT_MAC_LIBS@
 QT_WAYLAND_CFLAGS = @QT_WAYLAND_CFLAGS@
 QT_WAYLAND_LIBS = @QT_WAYLAND_LIBS@
 QT_X11_CFLAGS = @QT_X11_CFLAGS@
 QT_X11_LIBS = @QT_X11_LIBS@
 RANLIB = @RANLIB@
 RCC = @RCC@
-RSVG_2_36_2_CFLAGS = @RSVG_2_36_2_CFLAGS@
-RSVG_2_36_2_LIBS = @RSVG_2_36_2_LIBS@
 RSVG_CFLAGS = @RSVG_CFLAGS@
 RSVG_LIBS = @RSVG_LIBS@
 RTMP_CFLAGS = @RTMP_CFLAGS@
@@ -669,6 +680,7 @@
 VOAACENC_LIBS = @VOAACENC_LIBS@
 VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
 VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VULKAN_LIBS = @VULKAN_LIBS@
 WARNING_CFLAGS = @WARNING_CFLAGS@
 WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
 WARNING_OBJCFLAGS = @WARNING_OBJCFLAGS@
@@ -679,6 +691,7 @@
 WAYLAND_LIBS = @WAYLAND_LIBS@
 WEBP_CFLAGS = @WEBP_CFLAGS@
 WEBP_LIBS = @WEBP_LIBS@
+WGET = @WGET@
 WILDMIDI_CFLAGS = @WILDMIDI_CFLAGS@
 WILDMIDI_LIBS = @WILDMIDI_LIBS@
 WINKS_LIBS = @WINKS_LIBS@
@@ -688,6 +701,8 @@
 X11_LIBS = @X11_LIBS@
 X265_CFLAGS = @X265_CFLAGS@
 X265_LIBS = @X265_LIBS@
+XCB_CFLAGS = @XCB_CFLAGS@
+XCB_LIBS = @XCB_LIBS@
 XCOMPOSITE_CFLAGS = @XCOMPOSITE_CFLAGS@
 XCOMPOSITE_LIBS = @XCOMPOSITE_LIBS@
 XGETTEXT = @XGETTEXT@
@@ -725,7 +740,6 @@
 docdir = @docdir@
 dvidir = @dvidir@
 exec_prefix = @exec_prefix@
-gsettingsschemadir = @gsettingsschemadir@
 host = @host@
 host_alias = @host_alias@
 host_cpu = @host_cpu@
diff --git a/sys/pvr2d/gstpvrvideosink.c b/sys/pvr2d/gstpvrvideosink.c
index 6d117fb..7c10243 100644
--- a/sys/pvr2d/gstpvrvideosink.c
+++ b/sys/pvr2d/gstpvrvideosink.c
@@ -1316,11 +1316,8 @@
 {
   GST_DEBUG ("Freeing dcontext %p", dcontext);
 
-  if (dcontext->p_blt_info)
-    g_free (dcontext->p_blt_info);
-
-  if (dcontext->p_blt2d_info)
-    g_free (dcontext->p_blt2d_info);
+  g_free (dcontext->p_blt_info);
+  g_free (dcontext->p_blt2d_info);
 
   if (dcontext->x_lock)
     g_mutex_lock (dcontext->x_lock);
diff --git a/sys/shm/Makefile.in b/sys/shm/Makefile.in
index ed8651d..50f3705 100644
--- a/sys/shm/Makefile.in
+++ b/sys/shm/Makefile.in
@@ -116,16 +116,15 @@
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
 	$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
-	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gsettings.m4 \
-	$(top_srcdir)/m4/gst-fionread.m4 $(top_srcdir)/m4/gst-sdl.m4 \
-	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
-	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
-	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libgcrypt.m4 \
-	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
-	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
-	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
-	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
-	$(top_srcdir)/configure.ac
+	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gst-fionread.m4 \
+	$(top_srcdir)/m4/gst-sdl.m4 $(top_srcdir)/m4/iconv.m4 \
+	$(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \
+	$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
+	$(top_srcdir)/m4/libgcrypt.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
+	$(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \
@@ -276,6 +275,8 @@
 CLUTTER_X11_LIBS = @CLUTTER_X11_LIBS@
 CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
+CUDA_CFLAGS = @CUDA_CFLAGS@
+CUDA_LIBS = @CUDA_LIBS@
 CURL_CFLAGS = @CURL_CFLAGS@
 CURL_LIBS = @CURL_LIBS@
 CXX = @CXX@
@@ -313,6 +314,8 @@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
+EGL_CFLAGS = @EGL_CFLAGS@
+EGL_LIBS = @EGL_LIBS@
 EGREP = @EGREP@
 ERROR_CFLAGS = @ERROR_CFLAGS@
 ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
@@ -321,7 +324,6 @@
 EXIF_CFLAGS = @EXIF_CFLAGS@
 EXIF_LIBS = @EXIF_LIBS@
 FAAC_LIBS = @FAAC_LIBS@
-FAAD_IS_NEAAC = @FAAD_IS_NEAAC@
 FAAD_LIBS = @FAAD_LIBS@
 FFLAGS = @FFLAGS@
 FGREP = @FGREP@
@@ -340,8 +342,9 @@
 GIO_LIBS = @GIO_LIBS@
 GIO_UNIX_CFLAGS = @GIO_UNIX_CFLAGS@
 GIO_UNIX_LIBS = @GIO_UNIX_LIBS@
+GLES2_CFLAGS = @GLES2_CFLAGS@
+GLES2_LIBS = @GLES2_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
-GLIB_COMPILE_SCHEMAS = @GLIB_COMPILE_SCHEMAS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
@@ -358,16 +361,17 @@
 GMODULE_NO_EXPORT_LIBS = @GMODULE_NO_EXPORT_LIBS@
 GMSGFMT = @GMSGFMT@
 GMSGFMT_015 = @GMSGFMT_015@
+GNUSTL_CFLAGS = @GNUSTL_CFLAGS@
+GNUSTL_LIBS = @GNUSTL_LIBS@
 GRAPHENE_CFLAGS = @GRAPHENE_CFLAGS@
 GRAPHENE_LIBS = @GRAPHENE_LIBS@
 GREP = @GREP@
-GSETTINGS_CFLAGS = @GSETTINGS_CFLAGS@
-GSETTINGS_DISABLE_SCHEMAS_COMPILE = @GSETTINGS_DISABLE_SCHEMAS_COMPILE@
-GSETTINGS_LIBS = @GSETTINGS_LIBS@
 GSM_LIBS = @GSM_LIBS@
 GSTPB_PLUGINS_DIR = @GSTPB_PLUGINS_DIR@
 GSTPB_PREFIX = @GSTPB_PREFIX@
 GST_AGE = @GST_AGE@
+GST_ALLOCATORS_CFLAGS = @GST_ALLOCATORS_CFLAGS@
+GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
 GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
 GST_API_VERSION = @GST_API_VERSION@
 GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
@@ -393,6 +397,8 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PBUTILS_CFLAGS = @GST_PBUTILS_CFLAGS@
+GST_PBUTILS_LIBS = @GST_PBUTILS_LIBS@
 GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BAD_CFLAGS = @GST_PLUGINS_BAD_CFLAGS@
@@ -418,6 +424,8 @@
 GST_PREFIX = @GST_PREFIX@
 GST_REVISION = @GST_REVISION@
 GST_TOOLS_DIR = @GST_TOOLS_DIR@
+GST_VIDEO_CFLAGS = @GST_VIDEO_CFLAGS@
+GST_VIDEO_LIBS = @GST_VIDEO_LIBS@
 GTK3_CFLAGS = @GTK3_CFLAGS@
 GTK3_GL_CFLAGS = @GTK3_GL_CFLAGS@
 GTK3_GL_LIBS = @GTK3_GL_LIBS@
@@ -519,6 +527,7 @@
 LTLIBICONV = @LTLIBICONV@
 LTLIBINTL = @LTLIBINTL@
 LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
 MANIFEST_TOOL = @MANIFEST_TOOL@
@@ -532,8 +541,6 @@
 MODPLUG_LIBS = @MODPLUG_LIBS@
 MPEG2ENC_CFLAGS = @MPEG2ENC_CFLAGS@
 MPEG2ENC_LIBS = @MPEG2ENC_LIBS@
-MPG123_CFLAGS = @MPG123_CFLAGS@
-MPG123_LIBS = @MPG123_LIBS@
 MPLEX_CFLAGS = @MPLEX_CFLAGS@
 MPLEX_LDFLAGS = @MPLEX_LDFLAGS@
 MPLEX_LIBS = @MPLEX_LIBS@
@@ -549,6 +556,8 @@
 NETTLE_LIBS = @NETTLE_LIBS@
 NM = @NM@
 NMEDIT = @NMEDIT@
+NVENCODE_CFLAGS = @NVENCODE_CFLAGS@
+NVENCODE_LIBS = @NVENCODE_LIBS@
 OBJC = @OBJC@
 OBJCDEPMODE = @OBJCDEPMODE@
 OBJCFLAGS = @OBJCFLAGS@
@@ -606,16 +615,18 @@
 PYTHON_PLATFORM = @PYTHON_PLATFORM@
 PYTHON_PREFIX = @PYTHON_PREFIX@
 PYTHON_VERSION = @PYTHON_VERSION@
+QT_ANDROID_CFLAGS = @QT_ANDROID_CFLAGS@
+QT_ANDROID_LIBS = @QT_ANDROID_LIBS@
 QT_CFLAGS = @QT_CFLAGS@
 QT_LIBS = @QT_LIBS@
+QT_MAC_CFLAGS = @QT_MAC_CFLAGS@
+QT_MAC_LIBS = @QT_MAC_LIBS@
 QT_WAYLAND_CFLAGS = @QT_WAYLAND_CFLAGS@
 QT_WAYLAND_LIBS = @QT_WAYLAND_LIBS@
 QT_X11_CFLAGS = @QT_X11_CFLAGS@
 QT_X11_LIBS = @QT_X11_LIBS@
 RANLIB = @RANLIB@
 RCC = @RCC@
-RSVG_2_36_2_CFLAGS = @RSVG_2_36_2_CFLAGS@
-RSVG_2_36_2_LIBS = @RSVG_2_36_2_LIBS@
 RSVG_CFLAGS = @RSVG_CFLAGS@
 RSVG_LIBS = @RSVG_LIBS@
 RTMP_CFLAGS = @RTMP_CFLAGS@
@@ -667,6 +678,7 @@
 VOAACENC_LIBS = @VOAACENC_LIBS@
 VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
 VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VULKAN_LIBS = @VULKAN_LIBS@
 WARNING_CFLAGS = @WARNING_CFLAGS@
 WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
 WARNING_OBJCFLAGS = @WARNING_OBJCFLAGS@
@@ -677,6 +689,7 @@
 WAYLAND_LIBS = @WAYLAND_LIBS@
 WEBP_CFLAGS = @WEBP_CFLAGS@
 WEBP_LIBS = @WEBP_LIBS@
+WGET = @WGET@
 WILDMIDI_CFLAGS = @WILDMIDI_CFLAGS@
 WILDMIDI_LIBS = @WILDMIDI_LIBS@
 WINKS_LIBS = @WINKS_LIBS@
@@ -686,6 +699,8 @@
 X11_LIBS = @X11_LIBS@
 X265_CFLAGS = @X265_CFLAGS@
 X265_LIBS = @X265_LIBS@
+XCB_CFLAGS = @XCB_CFLAGS@
+XCB_LIBS = @XCB_LIBS@
 XCOMPOSITE_CFLAGS = @XCOMPOSITE_CFLAGS@
 XCOMPOSITE_LIBS = @XCOMPOSITE_LIBS@
 XGETTEXT = @XGETTEXT@
@@ -723,7 +738,6 @@
 docdir = @docdir@
 dvidir = @dvidir@
 exec_prefix = @exec_prefix@
-gsettingsschemadir = @gsettingsschemadir@
 host = @host@
 host_alias = @host_alias@
 host_cpu = @host_cpu@
diff --git a/sys/shm/gstshmsink.c b/sys/shm/gstshmsink.c
index 5a70417..13d67bd 100644
--- a/sys/shm/gstshmsink.c
+++ b/sys/shm/gstshmsink.c
@@ -26,7 +26,7 @@
  * <refsect2>
  * <title>Example launch lines</title>
  * |[
- * gst-launch -v videotestsrc !  shmsink socket-path=/tmp/blah shm-size=1000000
+ * gst-launch-1.0 -v videotestsrc !  shmsink socket-path=/tmp/blah shm-size=1000000
  * ]| Send video to shm buffers.
  * </refsect2>
  */
diff --git a/sys/shm/gstshmsrc.c b/sys/shm/gstshmsrc.c
index 1e69af7..3caf90b 100644
--- a/sys/shm/gstshmsrc.c
+++ b/sys/shm/gstshmsrc.c
@@ -26,9 +26,9 @@
  * <refsect2>
  * <title>Example launch lines</title>
  * |[
- * gst-launch shmsrc socket-path=/tmp/blah ! \
- * "video/x-raw-yuv, format=(fourcc)YUY2, color-matrix=(string)sdtv, \
- * chroma-site=(string)mpeg2, width=(int)320, height=(int)240, framerate=(fraction)30/1" ! autovideosink
+ * gst-launch-1.0 shmsrc socket-path=/tmp/blah ! \
+ * "video/x-yuv, format=YUY2, color-matrix=sdtv, \
+ * chroma-site=mpeg2, width=(int)320, height=(int)240, framerate=(fraction)30/1" ! autovideosink
  * ]| Render video from shm buffers.
  * </refsect2>
  */
diff --git a/sys/tinyalsa/Makefile.am b/sys/tinyalsa/Makefile.am
new file mode 100644
index 0000000..b492ec8
--- /dev/null
+++ b/sys/tinyalsa/Makefile.am
@@ -0,0 +1,19 @@
+
+plugin_LTLIBRARIES = libgsttinyalsa.la
+
+libgsttinyalsa_la_SOURCES = tinyalsasink.c 	\
+                            tinyalsa.c
+
+libgsttinyalsa_la_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_CFLAGS) \
+    -Wno-deprecated-declarations
+libgsttinyalsa_la_LIBADD =            \
+    -ltinyalsa                        \
+    -lgstaudio-@GST_API_VERSION@      \
+    $(GST_PLUGINS_BASE_LIBS)          \
+    $(GST_BASE_LIBS)                  \
+    $(GST_LIBS)
+libgsttinyalsa_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS)
+libgsttinyalsa_la_LIBTOOLFLAGS = $(GST_PLUGIN_LIBTOOLFLAGS)
+
+noinst_HEADERS = tinyalsasink.h
+
diff --git a/gst/liveadder/Makefile.in b/sys/tinyalsa/Makefile.in
similarity index 86%
copy from gst/liveadder/Makefile.in
copy to sys/tinyalsa/Makefile.in
index ba9e5a2..e13c606 100644
--- a/gst/liveadder/Makefile.in
+++ b/sys/tinyalsa/Makefile.in
@@ -90,7 +90,7 @@
 build_triplet = @build@
 host_triplet = @host@
 target_triplet = @target@
-subdir = gst/liveadder
+subdir = sys/tinyalsa
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
 am__aclocal_m4_deps = $(top_srcdir)/common/m4/as-ac-expand.m4 \
 	$(top_srcdir)/common/m4/as-auto-alt.m4 \
@@ -116,16 +116,15 @@
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
 	$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
-	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gsettings.m4 \
-	$(top_srcdir)/m4/gst-fionread.m4 $(top_srcdir)/m4/gst-sdl.m4 \
-	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
-	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
-	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libgcrypt.m4 \
-	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
-	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
-	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
-	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
-	$(top_srcdir)/configure.ac
+	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gst-fionread.m4 \
+	$(top_srcdir)/m4/gst-sdl.m4 $(top_srcdir)/m4/iconv.m4 \
+	$(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \
+	$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
+	$(top_srcdir)/m4/libgcrypt.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
+	$(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \
@@ -164,18 +163,19 @@
 am__installdirs = "$(DESTDIR)$(plugindir)"
 LTLIBRARIES = $(plugin_LTLIBRARIES)
 am__DEPENDENCIES_1 =
-libgstliveadder_la_DEPENDENCIES = $(am__DEPENDENCIES_1) \
+libgsttinyalsa_la_DEPENDENCIES = $(am__DEPENDENCIES_1) \
 	$(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1)
-am_libgstliveadder_la_OBJECTS = libgstliveadder_la-liveadder.lo
-libgstliveadder_la_OBJECTS = $(am_libgstliveadder_la_OBJECTS)
+am_libgsttinyalsa_la_OBJECTS = libgsttinyalsa_la-tinyalsasink.lo \
+	libgsttinyalsa_la-tinyalsa.lo
+libgsttinyalsa_la_OBJECTS = $(am_libgsttinyalsa_la_OBJECTS)
 AM_V_lt = $(am__v_lt_@AM_V@)
 am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
 am__v_lt_0 = --silent
 am__v_lt_1 = 
-libgstliveadder_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
-	$(libgstliveadder_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link \
-	$(CCLD) $(libgstliveadder_la_CFLAGS) $(CFLAGS) \
-	$(libgstliveadder_la_LDFLAGS) $(LDFLAGS) -o $@
+libgsttinyalsa_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
+	$(libgsttinyalsa_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link \
+	$(CCLD) $(libgsttinyalsa_la_CFLAGS) $(CFLAGS) \
+	$(libgsttinyalsa_la_LDFLAGS) $(LDFLAGS) -o $@
 AM_V_P = $(am__v_P_@AM_V@)
 am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
 am__v_P_0 = false
@@ -210,8 +210,8 @@
 am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@)
 am__v_CCLD_0 = @echo "  CCLD    " $@;
 am__v_CCLD_1 = 
-SOURCES = $(libgstliveadder_la_SOURCES)
-DIST_SOURCES = $(libgstliveadder_la_SOURCES)
+SOURCES = $(libgsttinyalsa_la_SOURCES)
+DIST_SOURCES = $(libgsttinyalsa_la_SOURCES)
 am__can_run_installinfo = \
   case $$AM_UPDATE_INFO_DIR in \
     n|no|NO) false;; \
@@ -274,6 +274,8 @@
 CLUTTER_X11_LIBS = @CLUTTER_X11_LIBS@
 CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
+CUDA_CFLAGS = @CUDA_CFLAGS@
+CUDA_LIBS = @CUDA_LIBS@
 CURL_CFLAGS = @CURL_CFLAGS@
 CURL_LIBS = @CURL_LIBS@
 CXX = @CXX@
@@ -311,6 +313,8 @@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
+EGL_CFLAGS = @EGL_CFLAGS@
+EGL_LIBS = @EGL_LIBS@
 EGREP = @EGREP@
 ERROR_CFLAGS = @ERROR_CFLAGS@
 ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
@@ -319,7 +323,6 @@
 EXIF_CFLAGS = @EXIF_CFLAGS@
 EXIF_LIBS = @EXIF_LIBS@
 FAAC_LIBS = @FAAC_LIBS@
-FAAD_IS_NEAAC = @FAAD_IS_NEAAC@
 FAAD_LIBS = @FAAD_LIBS@
 FFLAGS = @FFLAGS@
 FGREP = @FGREP@
@@ -338,8 +341,9 @@
 GIO_LIBS = @GIO_LIBS@
 GIO_UNIX_CFLAGS = @GIO_UNIX_CFLAGS@
 GIO_UNIX_LIBS = @GIO_UNIX_LIBS@
+GLES2_CFLAGS = @GLES2_CFLAGS@
+GLES2_LIBS = @GLES2_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
-GLIB_COMPILE_SCHEMAS = @GLIB_COMPILE_SCHEMAS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
@@ -356,16 +360,17 @@
 GMODULE_NO_EXPORT_LIBS = @GMODULE_NO_EXPORT_LIBS@
 GMSGFMT = @GMSGFMT@
 GMSGFMT_015 = @GMSGFMT_015@
+GNUSTL_CFLAGS = @GNUSTL_CFLAGS@
+GNUSTL_LIBS = @GNUSTL_LIBS@
 GRAPHENE_CFLAGS = @GRAPHENE_CFLAGS@
 GRAPHENE_LIBS = @GRAPHENE_LIBS@
 GREP = @GREP@
-GSETTINGS_CFLAGS = @GSETTINGS_CFLAGS@
-GSETTINGS_DISABLE_SCHEMAS_COMPILE = @GSETTINGS_DISABLE_SCHEMAS_COMPILE@
-GSETTINGS_LIBS = @GSETTINGS_LIBS@
 GSM_LIBS = @GSM_LIBS@
 GSTPB_PLUGINS_DIR = @GSTPB_PLUGINS_DIR@
 GSTPB_PREFIX = @GSTPB_PREFIX@
 GST_AGE = @GST_AGE@
+GST_ALLOCATORS_CFLAGS = @GST_ALLOCATORS_CFLAGS@
+GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
 GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
 GST_API_VERSION = @GST_API_VERSION@
 GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
@@ -391,6 +396,8 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PBUTILS_CFLAGS = @GST_PBUTILS_CFLAGS@
+GST_PBUTILS_LIBS = @GST_PBUTILS_LIBS@
 GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BAD_CFLAGS = @GST_PLUGINS_BAD_CFLAGS@
@@ -416,6 +423,8 @@
 GST_PREFIX = @GST_PREFIX@
 GST_REVISION = @GST_REVISION@
 GST_TOOLS_DIR = @GST_TOOLS_DIR@
+GST_VIDEO_CFLAGS = @GST_VIDEO_CFLAGS@
+GST_VIDEO_LIBS = @GST_VIDEO_LIBS@
 GTK3_CFLAGS = @GTK3_CFLAGS@
 GTK3_GL_CFLAGS = @GTK3_GL_CFLAGS@
 GTK3_GL_LIBS = @GTK3_GL_LIBS@
@@ -517,6 +526,7 @@
 LTLIBICONV = @LTLIBICONV@
 LTLIBINTL = @LTLIBINTL@
 LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
 MANIFEST_TOOL = @MANIFEST_TOOL@
@@ -530,8 +540,6 @@
 MODPLUG_LIBS = @MODPLUG_LIBS@
 MPEG2ENC_CFLAGS = @MPEG2ENC_CFLAGS@
 MPEG2ENC_LIBS = @MPEG2ENC_LIBS@
-MPG123_CFLAGS = @MPG123_CFLAGS@
-MPG123_LIBS = @MPG123_LIBS@
 MPLEX_CFLAGS = @MPLEX_CFLAGS@
 MPLEX_LDFLAGS = @MPLEX_LDFLAGS@
 MPLEX_LIBS = @MPLEX_LIBS@
@@ -547,6 +555,8 @@
 NETTLE_LIBS = @NETTLE_LIBS@
 NM = @NM@
 NMEDIT = @NMEDIT@
+NVENCODE_CFLAGS = @NVENCODE_CFLAGS@
+NVENCODE_LIBS = @NVENCODE_LIBS@
 OBJC = @OBJC@
 OBJCDEPMODE = @OBJCDEPMODE@
 OBJCFLAGS = @OBJCFLAGS@
@@ -604,16 +614,18 @@
 PYTHON_PLATFORM = @PYTHON_PLATFORM@
 PYTHON_PREFIX = @PYTHON_PREFIX@
 PYTHON_VERSION = @PYTHON_VERSION@
+QT_ANDROID_CFLAGS = @QT_ANDROID_CFLAGS@
+QT_ANDROID_LIBS = @QT_ANDROID_LIBS@
 QT_CFLAGS = @QT_CFLAGS@
 QT_LIBS = @QT_LIBS@
+QT_MAC_CFLAGS = @QT_MAC_CFLAGS@
+QT_MAC_LIBS = @QT_MAC_LIBS@
 QT_WAYLAND_CFLAGS = @QT_WAYLAND_CFLAGS@
 QT_WAYLAND_LIBS = @QT_WAYLAND_LIBS@
 QT_X11_CFLAGS = @QT_X11_CFLAGS@
 QT_X11_LIBS = @QT_X11_LIBS@
 RANLIB = @RANLIB@
 RCC = @RCC@
-RSVG_2_36_2_CFLAGS = @RSVG_2_36_2_CFLAGS@
-RSVG_2_36_2_LIBS = @RSVG_2_36_2_LIBS@
 RSVG_CFLAGS = @RSVG_CFLAGS@
 RSVG_LIBS = @RSVG_LIBS@
 RTMP_CFLAGS = @RTMP_CFLAGS@
@@ -665,6 +677,7 @@
 VOAACENC_LIBS = @VOAACENC_LIBS@
 VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
 VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VULKAN_LIBS = @VULKAN_LIBS@
 WARNING_CFLAGS = @WARNING_CFLAGS@
 WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
 WARNING_OBJCFLAGS = @WARNING_OBJCFLAGS@
@@ -675,6 +688,7 @@
 WAYLAND_LIBS = @WAYLAND_LIBS@
 WEBP_CFLAGS = @WEBP_CFLAGS@
 WEBP_LIBS = @WEBP_LIBS@
+WGET = @WGET@
 WILDMIDI_CFLAGS = @WILDMIDI_CFLAGS@
 WILDMIDI_LIBS = @WILDMIDI_LIBS@
 WINKS_LIBS = @WINKS_LIBS@
@@ -684,6 +698,8 @@
 X11_LIBS = @X11_LIBS@
 X265_CFLAGS = @X265_CFLAGS@
 X265_LIBS = @X265_LIBS@
+XCB_CFLAGS = @XCB_CFLAGS@
+XCB_LIBS = @XCB_LIBS@
 XCOMPOSITE_CFLAGS = @XCOMPOSITE_CFLAGS@
 XCOMPOSITE_LIBS = @XCOMPOSITE_LIBS@
 XGETTEXT = @XGETTEXT@
@@ -721,7 +737,6 @@
 docdir = @docdir@
 dvidir = @dvidir@
 exec_prefix = @exec_prefix@
-gsettingsschemadir = @gsettingsschemadir@
 host = @host@
 host_alias = @host_alias@
 host_cpu = @host_cpu@
@@ -761,16 +776,23 @@
 top_builddir = @top_builddir@
 top_srcdir = @top_srcdir@
 wayland_scanner = @wayland_scanner@
-plugin_LTLIBRARIES = libgstliveadder.la
-libgstliveadder_la_SOURCES = liveadder.c
-libgstliveadder_la_CFLAGS = $(GST_PLUGINS_BAD_CFLAGS) $(GST_PLUGINS_BASE_CFLAGS) $(GST_CFLAGS)
-libgstliveadder_la_LIBADD = \
-	$(GST_PLUGINS_BASE_LIBS) -lgstaudio-@GST_API_VERSION@ \
-	$(GST_BASE_LIBS) $(GST_LIBS)
+plugin_LTLIBRARIES = libgsttinyalsa.la
+libgsttinyalsa_la_SOURCES = tinyalsasink.c 	\
+                            tinyalsa.c
 
-libgstliveadder_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS)
-libgstliveadder_la_LIBTOOLFLAGS = $(GST_PLUGIN_LIBTOOLFLAGS)
-noinst_HEADERS = liveadder.h
+libgsttinyalsa_la_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_CFLAGS) \
+    -Wno-deprecated-declarations
+
+libgsttinyalsa_la_LIBADD = \
+    -ltinyalsa                        \
+    -lgstaudio-@GST_API_VERSION@      \
+    $(GST_PLUGINS_BASE_LIBS)          \
+    $(GST_BASE_LIBS)                  \
+    $(GST_LIBS)
+
+libgsttinyalsa_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS)
+libgsttinyalsa_la_LIBTOOLFLAGS = $(GST_PLUGIN_LIBTOOLFLAGS)
+noinst_HEADERS = tinyalsasink.h
 all: all-am
 
 .SUFFIXES:
@@ -784,9 +806,9 @@
 	      exit 1;; \
 	  esac; \
 	done; \
-	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu gst/liveadder/Makefile'; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu sys/tinyalsa/Makefile'; \
 	$(am__cd) $(top_srcdir) && \
-	  $(AUTOMAKE) --gnu gst/liveadder/Makefile
+	  $(AUTOMAKE) --gnu sys/tinyalsa/Makefile
 Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
 	@case '$?' in \
 	  *config.status*) \
@@ -840,8 +862,8 @@
 	  rm -f $${locs}; \
 	}
 
-libgstliveadder.la: $(libgstliveadder_la_OBJECTS) $(libgstliveadder_la_DEPENDENCIES) $(EXTRA_libgstliveadder_la_DEPENDENCIES) 
-	$(AM_V_CCLD)$(libgstliveadder_la_LINK) -rpath $(plugindir) $(libgstliveadder_la_OBJECTS) $(libgstliveadder_la_LIBADD) $(LIBS)
+libgsttinyalsa.la: $(libgsttinyalsa_la_OBJECTS) $(libgsttinyalsa_la_DEPENDENCIES) $(EXTRA_libgsttinyalsa_la_DEPENDENCIES) 
+	$(AM_V_CCLD)$(libgsttinyalsa_la_LINK) -rpath $(plugindir) $(libgsttinyalsa_la_OBJECTS) $(libgsttinyalsa_la_LIBADD) $(LIBS)
 
 mostlyclean-compile:
 	-rm -f *.$(OBJEXT)
@@ -849,7 +871,8 @@
 distclean-compile:
 	-rm -f *.tab.c
 
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstliveadder_la-liveadder.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgsttinyalsa_la-tinyalsa.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgsttinyalsa_la-tinyalsasink.Plo@am__quote@
 
 .c.o:
 @am__fastdepCC_TRUE@	$(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\
@@ -875,12 +898,19 @@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $<
 
-libgstliveadder_la-liveadder.lo: liveadder.c
-@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstliveadder_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstliveadder_la_CFLAGS) $(CFLAGS) -MT libgstliveadder_la-liveadder.lo -MD -MP -MF $(DEPDIR)/libgstliveadder_la-liveadder.Tpo -c -o libgstliveadder_la-liveadder.lo `test -f 'liveadder.c' || echo '$(srcdir)/'`liveadder.c
-@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstliveadder_la-liveadder.Tpo $(DEPDIR)/libgstliveadder_la-liveadder.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='liveadder.c' object='libgstliveadder_la-liveadder.lo' libtool=yes @AMDEPBACKSLASH@
+libgsttinyalsa_la-tinyalsasink.lo: tinyalsasink.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgsttinyalsa_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgsttinyalsa_la_CFLAGS) $(CFLAGS) -MT libgsttinyalsa_la-tinyalsasink.lo -MD -MP -MF $(DEPDIR)/libgsttinyalsa_la-tinyalsasink.Tpo -c -o libgsttinyalsa_la-tinyalsasink.lo `test -f 'tinyalsasink.c' || echo '$(srcdir)/'`tinyalsasink.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgsttinyalsa_la-tinyalsasink.Tpo $(DEPDIR)/libgsttinyalsa_la-tinyalsasink.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='tinyalsasink.c' object='libgsttinyalsa_la-tinyalsasink.lo' libtool=yes @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstliveadder_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstliveadder_la_CFLAGS) $(CFLAGS) -c -o libgstliveadder_la-liveadder.lo `test -f 'liveadder.c' || echo '$(srcdir)/'`liveadder.c
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgsttinyalsa_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgsttinyalsa_la_CFLAGS) $(CFLAGS) -c -o libgsttinyalsa_la-tinyalsasink.lo `test -f 'tinyalsasink.c' || echo '$(srcdir)/'`tinyalsasink.c
+
+libgsttinyalsa_la-tinyalsa.lo: tinyalsa.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgsttinyalsa_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgsttinyalsa_la_CFLAGS) $(CFLAGS) -MT libgsttinyalsa_la-tinyalsa.lo -MD -MP -MF $(DEPDIR)/libgsttinyalsa_la-tinyalsa.Tpo -c -o libgsttinyalsa_la-tinyalsa.lo `test -f 'tinyalsa.c' || echo '$(srcdir)/'`tinyalsa.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgsttinyalsa_la-tinyalsa.Tpo $(DEPDIR)/libgsttinyalsa_la-tinyalsa.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='tinyalsa.c' object='libgsttinyalsa_la-tinyalsa.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgsttinyalsa_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgsttinyalsa_la_CFLAGS) $(CFLAGS) -c -o libgsttinyalsa_la-tinyalsa.lo `test -f 'tinyalsa.c' || echo '$(srcdir)/'`tinyalsa.c
 
 mostlyclean-libtool:
 	-rm -f *.lo
diff --git a/gst/rtp/gstrtp.c b/sys/tinyalsa/tinyalsa.c
similarity index 69%
rename from gst/rtp/gstrtp.c
rename to sys/tinyalsa/tinyalsa.c
index fd07748..5b676ab 100644
--- a/gst/rtp/gstrtp.c
+++ b/sys/tinyalsa/tinyalsa.c
@@ -1,5 +1,6 @@
 /* GStreamer
- * Copyright (C) <1999> Erik Walthinsen <omega@cse.ogi.edu>
+ * Copyright (C) 2016 Centricular Ltd.
+ * Author: Arun Raghavan
  *
  * This library is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Library General Public
@@ -21,27 +22,23 @@
 #include "config.h"
 #endif
 
-#include <gst/tag/tag.h>
+#include <gst/gst.h>
 
-#include "gstrtph265depay.h"
-#include "gstrtph265pay.h"
+#include "tinyalsasink.h"
 
 static gboolean
 plugin_init (GstPlugin * plugin)
 {
-  gst_tag_image_type_get_type ();
-
-  if (!gst_rtp_h265_depay_plugin_init (plugin))
+  if (!gst_element_register (plugin, "tinyalsasink", GST_RANK_NONE,
+          GST_TYPE_TINYALSA_SINK)) {
     return FALSE;
-
-  if (!gst_rtp_h265_pay_plugin_init (plugin))
-    return FALSE;
+  }
 
   return TRUE;
 }
 
 GST_PLUGIN_DEFINE (GST_VERSION_MAJOR,
     GST_VERSION_MINOR,
-    rtpbad,
-    "Real-time protocol plugins",
-    plugin_init, VERSION, "LGPL", GST_PACKAGE_NAME, GST_PACKAGE_ORIGIN);
+    tinyalsa,
+    "tinyalsa plugin library",
+    plugin_init, VERSION, GST_LICENSE, GST_PACKAGE_NAME, GST_PACKAGE_ORIGIN)
diff --git a/sys/tinyalsa/tinyalsasink.c b/sys/tinyalsa/tinyalsasink.c
new file mode 100644
index 0000000..c29755e
--- /dev/null
+++ b/sys/tinyalsa/tinyalsasink.c
@@ -0,0 +1,502 @@
+/* GStreamer
+ * Copyright (C) 2016 Centricular Ltd.
+ * Author: Arun Raghavan <arun@centricular.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+/**
+ * SECTION:element-tinyalsasink
+ * @see_also: alsasink
+ *
+ * This element renders raw audio samples using the ALSA audio API via the
+ * tinyalsa library.
+ *
+ * <refsect2>
+ * <title>Example pipelines</title>
+ * |[
+ * gst-launch-1.0 -v uridecodebin uri=file:///path/to/audio.ogg ! audioconvert ! audioresample ! tinyalsasink
+ * ]| Play an Ogg/Vorbis file and output audio via ALSA using the tinyalsa
+ * library.
+ * </refsect2>
+ */
+
+#include <gst/audio/gstaudiobasesink.h>
+
+#include <tinyalsa/asoundlib.h>
+
+#include "tinyalsasink.h"
+
+/* Hardcoding these bitmask values rather than including a kernel header */
+#define SNDRV_PCM_FORMAT_S8 0
+#define SNDRV_PCM_FORMAT_S16_LE 2
+#define SNDRV_PCM_FORMAT_S24_LE 6
+#define SNDRV_PCM_FORMAT_S32_LE 10
+#define SNDRV_PCM_FORMAT_ANY            \
+  ((1 << SNDRV_PCM_FORMAT_S8)     |     \
+   (1 << SNDRV_PCM_FORMAT_S16_LE) |     \
+   (1 << SNDRV_PCM_FORMAT_S24_LE) |     \
+   (1 << SNDRV_PCM_FORMAT_S32_LE))
+
+GST_DEBUG_CATEGORY_STATIC (tinyalsa_sink_debug);
+#define GST_CAT_DEFAULT tinyalsa_sink_debug
+
+#define parent_class gst_tinyalsa_sink_parent_class
+G_DEFINE_TYPE (GstTinyalsaSink, gst_tinyalsa_sink, GST_TYPE_AUDIO_SINK);
+
+enum
+{
+  PROP_0,
+  PROP_CARD,
+  PROP_DEVICE,
+  PROP_LAST
+};
+
+#define DEFAULT_CARD 0
+#define DEFAULT_DEVICE 0
+
+static GstStaticPadTemplate sink_template = GST_STATIC_PAD_TEMPLATE ("sink",
+    GST_PAD_SINK,
+    GST_PAD_ALWAYS,
+    GST_STATIC_CAPS ("audio/x-raw, "
+        "format = (string) { S16LE, S32LE, S24_32LE, S8 }, "
+        "channels = (int) [ 1, MAX ], "
+        "rate = (int) [ 1, MAX ], " "layout = (string) interleaved"));
+
+static void
+gst_tinyalsa_sink_get_property (GObject * object, guint prop_id,
+    GValue * value, GParamSpec * pspec)
+{
+  GstTinyalsaSink *sink = GST_TINYALSA_SINK (object);
+
+  switch (prop_id) {
+    case PROP_CARD:
+      g_value_set_uint (value, sink->card);
+      break;
+
+    case PROP_DEVICE:
+      g_value_set_uint (value, sink->device);
+      break;
+
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
+  }
+}
+
+static void
+gst_tinyalsa_sink_set_property (GObject * object, guint prop_id,
+    const GValue * value, GParamSpec * pspec)
+{
+  GstTinyalsaSink *sink = GST_TINYALSA_SINK (object);
+
+  switch (prop_id) {
+    case PROP_CARD:
+      sink->card = g_value_get_uint (value);
+      break;
+
+    case PROP_DEVICE:
+      sink->device = g_value_get_uint (value);
+      break;
+
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
+  }
+}
+
+static GstCaps *
+gst_tinyalsa_sink_getcaps (GstBaseSink * bsink, GstCaps * filter)
+{
+  GstTinyalsaSink *sink = GST_TINYALSA_SINK (bsink);
+  GstCaps *caps = NULL;
+  GValue formats = { 0, };
+  GValue format = { 0, };
+  struct pcm_params *params = NULL;
+  struct pcm_mask *mask;
+  int rate_min, rate_max, channels_min, channels_max;
+  guint16 m;
+
+  GST_DEBUG_OBJECT (sink, "Querying caps");
+
+  GST_OBJECT_LOCK (sink);
+
+  if (sink->cached_caps) {
+    GST_DEBUG_OBJECT (sink, "Returning cached caps");
+    caps = gst_caps_ref (sink->cached_caps);
+    goto done;
+  }
+
+  if (sink->pcm) {
+    /* We can't query the device while it's open, so return current caps */
+    caps = gst_pad_get_current_caps (GST_BASE_SINK_PAD (bsink));
+    goto done;
+  }
+
+  params = pcm_params_get (sink->card, sink->device, PCM_OUT);
+  if (!params) {
+    GST_ERROR_OBJECT (sink, "Could not get PCM params");
+    goto done;
+  }
+
+  mask = pcm_params_get_mask (params, PCM_PARAM_FORMAT);
+  m = (mask->bits[1] << 8) | mask->bits[0];
+
+  if (!(m & SNDRV_PCM_FORMAT_ANY)) {
+    GST_ERROR_OBJECT (sink, "Could not find any supported format");
+    goto done;
+  }
+
+  caps = gst_caps_new_empty_simple ("audio/x-raw");
+
+  g_value_init (&formats, GST_TYPE_LIST);
+  g_value_init (&format, G_TYPE_STRING);
+
+  if (m & (1 << SNDRV_PCM_FORMAT_S8)) {
+    g_value_set_static_string (&format, "S8");
+    gst_value_list_prepend_value (&formats, &format);
+  }
+  if (m & (1 << SNDRV_PCM_FORMAT_S16_LE)) {
+    g_value_set_static_string (&format, "S16LE");
+    gst_value_list_prepend_value (&formats, &format);
+  }
+  if (m & (1 << SNDRV_PCM_FORMAT_S24_LE)) {
+    g_value_set_static_string (&format, "S24_32LE");
+    gst_value_list_prepend_value (&formats, &format);
+  }
+  if (m & (1 << SNDRV_PCM_FORMAT_S32_LE)) {
+    g_value_set_static_string (&format, "S32LE");
+    gst_value_list_prepend_value (&formats, &format);
+  }
+
+  gst_caps_set_value (caps, "format", &formats);
+
+  g_value_unset (&format);
+  g_value_unset (&formats);
+
+  /* This is a bit of a lie, since the device likely only supports some
+   * standard rates in this range. We should probably filter the range to
+   * those, standard audio rates but even that isn't guaranteed to be accurate.
+   */
+  rate_min = pcm_params_get_min (params, PCM_PARAM_RATE);
+  rate_max = pcm_params_get_max (params, PCM_PARAM_RATE);
+
+  if (rate_min == rate_max)
+    gst_caps_set_simple (caps, "rate", G_TYPE_INT, rate_min, NULL);
+  else
+    gst_caps_set_simple (caps, "rate", GST_TYPE_INT_RANGE, rate_min, rate_max,
+        NULL);
+
+  channels_min = pcm_params_get_min (params, PCM_PARAM_CHANNELS);
+  channels_max = pcm_params_get_max (params, PCM_PARAM_CHANNELS);
+
+  if (channels_min == channels_max)
+    gst_caps_set_simple (caps, "channels", G_TYPE_INT, channels_min, NULL);
+  else
+    gst_caps_set_simple (caps, "channels", GST_TYPE_INT_RANGE, channels_min,
+        channels_max, NULL);
+
+  gst_caps_replace (&sink->cached_caps, caps);
+
+done:
+  GST_OBJECT_UNLOCK (sink);
+
+  GST_DEBUG_OBJECT (sink, "Got caps %" GST_PTR_FORMAT, caps);
+
+  if (caps && filter) {
+    GstCaps *intersection =
+        gst_caps_intersect_full (filter, caps, GST_CAPS_INTERSECT_FIRST);
+
+    gst_caps_unref (caps);
+    caps = intersection;
+  }
+
+  if (params)
+    pcm_params_free (params);
+
+  return caps;
+}
+
+static gboolean
+gst_tinyalsa_sink_open (GstAudioSink * asink)
+{
+  /* Nothing to do here, we can't call pcm_open() till we have stream
+   * parameters available */
+  return TRUE;
+}
+
+static enum pcm_format
+pcm_format_from_gst (GstAudioFormat format)
+{
+  switch (format) {
+    case GST_AUDIO_FORMAT_S8:
+      return PCM_FORMAT_S8;
+
+    case GST_AUDIO_FORMAT_S16LE:
+      return PCM_FORMAT_S16_LE;
+
+    case GST_AUDIO_FORMAT_S24_32LE:
+      return PCM_FORMAT_S24_LE;
+
+    case GST_AUDIO_FORMAT_S32LE:
+      return PCM_FORMAT_S32_LE;
+
+    default:
+      g_assert_not_reached ();
+  }
+}
+
+static void
+pcm_config_from_spec (struct pcm_config *config,
+    const GstAudioRingBufferSpec * spec)
+{
+  gint64 frames;
+
+  config->format = pcm_format_from_gst (GST_AUDIO_INFO_FORMAT (&spec->info));
+  config->channels = GST_AUDIO_INFO_CHANNELS (&spec->info);
+  config->rate = GST_AUDIO_INFO_RATE (&spec->info);
+
+  gst_audio_info_convert (&spec->info,
+      GST_FORMAT_TIME, spec->latency_time * GST_USECOND,
+      GST_FORMAT_DEFAULT /* frames */ , &frames);
+
+  config->period_size = frames;
+  config->period_count = spec->buffer_time / spec->latency_time;
+}
+
+static gboolean
+gst_tinyalsa_sink_prepare (GstAudioSink * asink, GstAudioRingBufferSpec * spec)
+{
+  GstTinyalsaSink *sink = GST_TINYALSA_SINK (asink);
+  struct pcm_config config = { 0, };
+  struct pcm_params *params = NULL;
+  int period_size_min, period_size_max;
+  int periods_min, periods_max;
+
+  pcm_config_from_spec (&config, spec);
+
+  GST_DEBUG_OBJECT (sink, "Requesting %u periods of %u frames",
+      config.period_count, config.period_size);
+
+  params = pcm_params_get (sink->card, sink->device, PCM_OUT);
+  if (!params)
+    GST_ERROR_OBJECT (sink, "Could not get PCM params");
+
+  period_size_min = pcm_params_get_min (params, PCM_PARAM_PERIOD_SIZE);
+  period_size_max = pcm_params_get_max (params, PCM_PARAM_PERIOD_SIZE);
+  periods_min = pcm_params_get_min (params, PCM_PARAM_PERIODS);
+  periods_max = pcm_params_get_max (params, PCM_PARAM_PERIODS);
+
+  pcm_params_free (params);
+
+  /* Snap period size/count to the permitted range */
+  config.period_size =
+      CLAMP (config.period_size, period_size_min, period_size_max);
+  config.period_count = CLAMP (config.period_count, periods_min, periods_max);
+
+  /* mutex with getcaps */
+  GST_OBJECT_LOCK (sink);
+
+  sink->pcm = pcm_open (sink->card, sink->device, PCM_OUT | PCM_NORESTART,
+      &config);
+
+  GST_OBJECT_UNLOCK (sink);
+
+  if (!sink->pcm || !pcm_is_ready (sink->pcm)) {
+    GST_ERROR_OBJECT (sink, "Could not open device: %s",
+        pcm_get_error (sink->pcm));
+    goto fail;
+  }
+
+  if (pcm_prepare (sink->pcm) < 0) {
+    GST_ERROR_OBJECT (sink, "Could not prepare device: %s",
+        pcm_get_error (sink->pcm));
+    goto fail;
+  }
+
+  spec->segsize = pcm_frames_to_bytes (sink->pcm, config.period_size);
+  spec->segtotal = config.period_count;
+
+  GST_DEBUG_OBJECT (sink, "Configured for %u periods of %u frames",
+      config.period_count, config.period_size);
+
+  return TRUE;
+
+fail:
+  if (sink->pcm)
+    pcm_close (sink->pcm);
+
+  return FALSE;
+}
+
+static gboolean
+gst_tinyalsa_sink_unprepare (GstAudioSink * asink)
+{
+  GstTinyalsaSink *sink = GST_TINYALSA_SINK (asink);
+
+  if (pcm_stop (sink->pcm) < 0) {
+    GST_ERROR_OBJECT (sink, "Could not stop device: %s",
+        pcm_get_error (sink->pcm));
+  }
+
+  /* mutex with getcaps */
+  GST_OBJECT_LOCK (sink);
+
+  if (pcm_close (sink->pcm)) {
+    GST_ERROR_OBJECT (sink, "Could not close device: %s",
+        pcm_get_error (sink->pcm));
+    return FALSE;
+  }
+
+  sink->pcm = NULL;
+
+  gst_caps_replace (&sink->cached_caps, NULL);
+
+  GST_OBJECT_UNLOCK (sink);
+
+  GST_DEBUG_OBJECT (sink, "Device unprepared");
+
+  return TRUE;
+}
+
+static gboolean
+gst_tinyalsa_sink_close (GstAudioSink * asink)
+{
+  /* Nothing to do here, see gst_tinyalsa_sink_open() */
+  return TRUE;
+}
+
+static gint
+gst_tinyalsa_sink_write (GstAudioSink * asink, gpointer data, guint length)
+{
+  GstTinyalsaSink *sink = GST_TINYALSA_SINK (asink);
+  int ret;
+
+again:
+  GST_DEBUG_OBJECT (sink, "Starting write");
+
+  ret = pcm_write (sink->pcm, data, length);
+  if (ret == -EPIPE) {
+    GST_WARNING_OBJECT (sink, "Got an underrun");
+
+    if (pcm_prepare (sink->pcm) < 0) {
+      GST_ERROR_OBJECT (sink, "Could not prepare device: %s",
+          pcm_get_error (sink->pcm));
+      return -1;
+    }
+
+    goto again;
+
+  } else if (ret < 0) {
+    GST_ERROR_OBJECT (sink, "Could not write data to device: %s",
+        pcm_get_error (sink->pcm));
+    return -1;
+  }
+
+  GST_DEBUG_OBJECT (sink, "Wrote %u bytes", length);
+
+  return length;
+}
+
+static void
+gst_tinyalsa_sink_reset (GstAudioSink * asink)
+{
+  GstTinyalsaSink *sink = GST_TINYALSA_SINK (asink);
+
+  if (pcm_stop (sink->pcm) < 0) {
+    GST_ERROR_OBJECT (sink, "Could not stop device: %s",
+        pcm_get_error (sink->pcm));
+  }
+
+  if (pcm_prepare (sink->pcm) < 0) {
+    GST_ERROR_OBJECT (sink, "Could not prepare device: %s",
+        pcm_get_error (sink->pcm));
+  }
+}
+
+static guint
+gst_tinyalsa_sink_delay (GstAudioSink * asink)
+{
+  GstTinyalsaSink *sink = GST_TINYALSA_SINK (asink);
+  int delay;
+
+  delay = pcm_get_delay (sink->pcm);
+
+  if (delay < 0) {
+    /* This might happen before the stream has started */
+    GST_DEBUG_OBJECT (sink, "Got negative delay");
+    delay = 0;
+  } else
+    GST_DEBUG_OBJECT (sink, "Got delay of %u", delay);
+
+  return delay;
+}
+
+static void
+gst_tinyalsa_sink_class_init (GstTinyalsaSinkClass * klass)
+{
+  GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
+  GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
+  GstBaseSinkClass *basesink_class = GST_BASE_SINK_CLASS (klass);
+  GstAudioSinkClass *audiosink_class = GST_AUDIO_SINK_CLASS (klass);
+
+  gobject_class->get_property =
+      GST_DEBUG_FUNCPTR (gst_tinyalsa_sink_get_property);
+  gobject_class->set_property =
+      GST_DEBUG_FUNCPTR (gst_tinyalsa_sink_set_property);
+
+  basesink_class->get_caps = GST_DEBUG_FUNCPTR (gst_tinyalsa_sink_getcaps);
+
+  audiosink_class->open = GST_DEBUG_FUNCPTR (gst_tinyalsa_sink_open);
+  audiosink_class->prepare = GST_DEBUG_FUNCPTR (gst_tinyalsa_sink_prepare);
+  audiosink_class->unprepare = GST_DEBUG_FUNCPTR (gst_tinyalsa_sink_unprepare);
+  audiosink_class->close = GST_DEBUG_FUNCPTR (gst_tinyalsa_sink_close);
+  audiosink_class->write = GST_DEBUG_FUNCPTR (gst_tinyalsa_sink_write);
+  audiosink_class->reset = GST_DEBUG_FUNCPTR (gst_tinyalsa_sink_reset);
+  audiosink_class->delay = GST_DEBUG_FUNCPTR (gst_tinyalsa_sink_delay);
+
+  gst_element_class_set_static_metadata (element_class,
+      "tinyalsa Audio Sink",
+      "Sink/Audio", "Plays audio to an ALSA device",
+      "Arun Raghavan <arun@centricular.com>");
+
+  gst_element_class_add_pad_template (element_class,
+      gst_static_pad_template_get (&sink_template));
+
+  g_object_class_install_property (gobject_class,
+      PROP_CARD,
+      g_param_spec_uint ("card", "Card", "The ALSA card to use",
+          0, G_MAXUINT, DEFAULT_CARD,
+          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+
+  g_object_class_install_property (gobject_class,
+      PROP_DEVICE,
+      g_param_spec_uint ("device", "Device", "The ALSA device to use",
+          0, G_MAXUINT, DEFAULT_CARD,
+          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+
+  GST_DEBUG_CATEGORY_INIT (tinyalsa_sink_debug, "tinyalsasink", 0,
+      "tinyalsa Sink");
+}
+
+static void
+gst_tinyalsa_sink_init (GstTinyalsaSink * sink)
+{
+  sink->card = DEFAULT_CARD;
+  sink->device = DEFAULT_DEVICE;
+
+  sink->cached_caps = NULL;
+}
diff --git a/sys/tinyalsa/tinyalsasink.h b/sys/tinyalsa/tinyalsasink.h
new file mode 100644
index 0000000..a6ae3bf
--- /dev/null
+++ b/sys/tinyalsa/tinyalsasink.h
@@ -0,0 +1,57 @@
+/* GStreamer
+ * Copyright (C) 2016 Centricular Ltd.
+ * Author: Arun Raghavan
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifndef __TINYALSASINK_H__
+#define __TINYALSASINK_H__
+
+#include <tinyalsa/asoundlib.h>
+
+#include <gst/audio/gstaudiosink.h>
+
+G_BEGIN_DECLS
+
+#define GST_TYPE_TINYALSA_SINK \
+  (gst_tinyalsa_sink_get_type())
+#define GST_TINYALSA_SINK(obj) \
+  (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_TINYALSA_SINK,GstTinyalsaSink))
+#define GST_TINYALSA_SINK_CLASS(klass) \
+  (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_TINYALSA_SINK,GstTinyalsaSinkClass))
+
+typedef struct _GstTinyalsaSink GstTinyalsaSink;
+typedef struct _GstTinyalsaSinkClass GstTinyalsaSinkClass;
+
+struct _GstTinyalsaSink {
+  GstAudioSink parent;
+
+  int card;
+  int device;
+
+  struct pcm *pcm;
+
+  GstCaps *cached_caps; /* for queries made while the device is open */
+};
+
+struct _GstTinyalsaSinkClass {
+  GstAudioSinkClass parent_class;
+};
+
+GType gst_tinyalsa_sink_get_type (void);
+
+#endif /* __TINYALSASINK_H__ */
diff --git a/sys/uvch264/Makefile.in b/sys/uvch264/Makefile.in
index 973da00..b2343f9 100644
--- a/sys/uvch264/Makefile.in
+++ b/sys/uvch264/Makefile.in
@@ -116,16 +116,15 @@
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
 	$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
-	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gsettings.m4 \
-	$(top_srcdir)/m4/gst-fionread.m4 $(top_srcdir)/m4/gst-sdl.m4 \
-	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
-	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
-	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libgcrypt.m4 \
-	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
-	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
-	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
-	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
-	$(top_srcdir)/configure.ac
+	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gst-fionread.m4 \
+	$(top_srcdir)/m4/gst-sdl.m4 $(top_srcdir)/m4/iconv.m4 \
+	$(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \
+	$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
+	$(top_srcdir)/m4/libgcrypt.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
+	$(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \
@@ -279,6 +278,8 @@
 CLUTTER_X11_LIBS = @CLUTTER_X11_LIBS@
 CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
+CUDA_CFLAGS = @CUDA_CFLAGS@
+CUDA_LIBS = @CUDA_LIBS@
 CURL_CFLAGS = @CURL_CFLAGS@
 CURL_LIBS = @CURL_LIBS@
 CXX = @CXX@
@@ -316,6 +317,8 @@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
+EGL_CFLAGS = @EGL_CFLAGS@
+EGL_LIBS = @EGL_LIBS@
 EGREP = @EGREP@
 ERROR_CFLAGS = @ERROR_CFLAGS@
 ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
@@ -324,7 +327,6 @@
 EXIF_CFLAGS = @EXIF_CFLAGS@
 EXIF_LIBS = @EXIF_LIBS@
 FAAC_LIBS = @FAAC_LIBS@
-FAAD_IS_NEAAC = @FAAD_IS_NEAAC@
 FAAD_LIBS = @FAAD_LIBS@
 FFLAGS = @FFLAGS@
 FGREP = @FGREP@
@@ -343,8 +345,9 @@
 GIO_LIBS = @GIO_LIBS@
 GIO_UNIX_CFLAGS = @GIO_UNIX_CFLAGS@
 GIO_UNIX_LIBS = @GIO_UNIX_LIBS@
+GLES2_CFLAGS = @GLES2_CFLAGS@
+GLES2_LIBS = @GLES2_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
-GLIB_COMPILE_SCHEMAS = @GLIB_COMPILE_SCHEMAS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
@@ -361,16 +364,17 @@
 GMODULE_NO_EXPORT_LIBS = @GMODULE_NO_EXPORT_LIBS@
 GMSGFMT = @GMSGFMT@
 GMSGFMT_015 = @GMSGFMT_015@
+GNUSTL_CFLAGS = @GNUSTL_CFLAGS@
+GNUSTL_LIBS = @GNUSTL_LIBS@
 GRAPHENE_CFLAGS = @GRAPHENE_CFLAGS@
 GRAPHENE_LIBS = @GRAPHENE_LIBS@
 GREP = @GREP@
-GSETTINGS_CFLAGS = @GSETTINGS_CFLAGS@
-GSETTINGS_DISABLE_SCHEMAS_COMPILE = @GSETTINGS_DISABLE_SCHEMAS_COMPILE@
-GSETTINGS_LIBS = @GSETTINGS_LIBS@
 GSM_LIBS = @GSM_LIBS@
 GSTPB_PLUGINS_DIR = @GSTPB_PLUGINS_DIR@
 GSTPB_PREFIX = @GSTPB_PREFIX@
 GST_AGE = @GST_AGE@
+GST_ALLOCATORS_CFLAGS = @GST_ALLOCATORS_CFLAGS@
+GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
 GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
 GST_API_VERSION = @GST_API_VERSION@
 GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
@@ -396,6 +400,8 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PBUTILS_CFLAGS = @GST_PBUTILS_CFLAGS@
+GST_PBUTILS_LIBS = @GST_PBUTILS_LIBS@
 GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BAD_CFLAGS = @GST_PLUGINS_BAD_CFLAGS@
@@ -421,6 +427,8 @@
 GST_PREFIX = @GST_PREFIX@
 GST_REVISION = @GST_REVISION@
 GST_TOOLS_DIR = @GST_TOOLS_DIR@
+GST_VIDEO_CFLAGS = @GST_VIDEO_CFLAGS@
+GST_VIDEO_LIBS = @GST_VIDEO_LIBS@
 GTK3_CFLAGS = @GTK3_CFLAGS@
 GTK3_GL_CFLAGS = @GTK3_GL_CFLAGS@
 GTK3_GL_LIBS = @GTK3_GL_LIBS@
@@ -522,6 +530,7 @@
 LTLIBICONV = @LTLIBICONV@
 LTLIBINTL = @LTLIBINTL@
 LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
 MANIFEST_TOOL = @MANIFEST_TOOL@
@@ -535,8 +544,6 @@
 MODPLUG_LIBS = @MODPLUG_LIBS@
 MPEG2ENC_CFLAGS = @MPEG2ENC_CFLAGS@
 MPEG2ENC_LIBS = @MPEG2ENC_LIBS@
-MPG123_CFLAGS = @MPG123_CFLAGS@
-MPG123_LIBS = @MPG123_LIBS@
 MPLEX_CFLAGS = @MPLEX_CFLAGS@
 MPLEX_LDFLAGS = @MPLEX_LDFLAGS@
 MPLEX_LIBS = @MPLEX_LIBS@
@@ -552,6 +559,8 @@
 NETTLE_LIBS = @NETTLE_LIBS@
 NM = @NM@
 NMEDIT = @NMEDIT@
+NVENCODE_CFLAGS = @NVENCODE_CFLAGS@
+NVENCODE_LIBS = @NVENCODE_LIBS@
 OBJC = @OBJC@
 OBJCDEPMODE = @OBJCDEPMODE@
 OBJCFLAGS = @OBJCFLAGS@
@@ -609,16 +618,18 @@
 PYTHON_PLATFORM = @PYTHON_PLATFORM@
 PYTHON_PREFIX = @PYTHON_PREFIX@
 PYTHON_VERSION = @PYTHON_VERSION@
+QT_ANDROID_CFLAGS = @QT_ANDROID_CFLAGS@
+QT_ANDROID_LIBS = @QT_ANDROID_LIBS@
 QT_CFLAGS = @QT_CFLAGS@
 QT_LIBS = @QT_LIBS@
+QT_MAC_CFLAGS = @QT_MAC_CFLAGS@
+QT_MAC_LIBS = @QT_MAC_LIBS@
 QT_WAYLAND_CFLAGS = @QT_WAYLAND_CFLAGS@
 QT_WAYLAND_LIBS = @QT_WAYLAND_LIBS@
 QT_X11_CFLAGS = @QT_X11_CFLAGS@
 QT_X11_LIBS = @QT_X11_LIBS@
 RANLIB = @RANLIB@
 RCC = @RCC@
-RSVG_2_36_2_CFLAGS = @RSVG_2_36_2_CFLAGS@
-RSVG_2_36_2_LIBS = @RSVG_2_36_2_LIBS@
 RSVG_CFLAGS = @RSVG_CFLAGS@
 RSVG_LIBS = @RSVG_LIBS@
 RTMP_CFLAGS = @RTMP_CFLAGS@
@@ -670,6 +681,7 @@
 VOAACENC_LIBS = @VOAACENC_LIBS@
 VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
 VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VULKAN_LIBS = @VULKAN_LIBS@
 WARNING_CFLAGS = @WARNING_CFLAGS@
 WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
 WARNING_OBJCFLAGS = @WARNING_OBJCFLAGS@
@@ -680,6 +692,7 @@
 WAYLAND_LIBS = @WAYLAND_LIBS@
 WEBP_CFLAGS = @WEBP_CFLAGS@
 WEBP_LIBS = @WEBP_LIBS@
+WGET = @WGET@
 WILDMIDI_CFLAGS = @WILDMIDI_CFLAGS@
 WILDMIDI_LIBS = @WILDMIDI_LIBS@
 WINKS_LIBS = @WINKS_LIBS@
@@ -689,6 +702,8 @@
 X11_LIBS = @X11_LIBS@
 X265_CFLAGS = @X265_CFLAGS@
 X265_LIBS = @X265_LIBS@
+XCB_CFLAGS = @XCB_CFLAGS@
+XCB_LIBS = @XCB_LIBS@
 XCOMPOSITE_CFLAGS = @XCOMPOSITE_CFLAGS@
 XCOMPOSITE_LIBS = @XCOMPOSITE_LIBS@
 XGETTEXT = @XGETTEXT@
@@ -726,7 +741,6 @@
 docdir = @docdir@
 dvidir = @dvidir@
 exec_prefix = @exec_prefix@
-gsettingsschemadir = @gsettingsschemadir@
 host = @host@
 host_alias = @host_alias@
 host_cpu = @host_cpu@
diff --git a/sys/uvch264/gstuvch264_mjpgdemux.c b/sys/uvch264/gstuvch264_mjpgdemux.c
index 99734ad..1f9b1c4 100644
--- a/sys/uvch264/gstuvch264_mjpgdemux.c
+++ b/sys/uvch264/gstuvch264_mjpgdemux.c
@@ -296,8 +296,7 @@
   if (self->priv->nv12_caps)
     gst_caps_unref (self->priv->nv12_caps);
   self->priv->nv12_caps = NULL;
-  if (self->priv->clock_samples)
-    g_free (self->priv->clock_samples);
+  g_free (self->priv->clock_samples);
   self->priv->clock_samples = NULL;
 
   G_OBJECT_CLASS (parent_class)->dispose (object);
diff --git a/sys/uvch264/gstuvch264_src.c b/sys/uvch264/gstuvch264_src.c
index 94c09fa..eae7d82 100644
--- a/sys/uvch264/gstuvch264_src.c
+++ b/sys/uvch264/gstuvch264_src.c
@@ -3042,8 +3042,8 @@
   if (self->v4l2_src) {
     GstCaps *filter;
     GstPad *v4l_pad = gst_element_get_static_pad (self->v4l2_src, "src");
-    GstCaps *v4l_caps = gst_pad_query_caps (v4l_pad, NULL);
-    GstCaps *new_caps = gst_uvc_h264_src_transform_caps (self, v4l_caps);
+    GstCaps *v4l_caps = NULL;
+    GstCaps *new_caps = NULL;
 
     gst_query_parse_caps (query, &filter);
     v4l_caps = gst_pad_query_caps (v4l_pad, filter);
diff --git a/sys/vcd/Makefile.in b/sys/vcd/Makefile.in
index eacf382..19d09de 100644
--- a/sys/vcd/Makefile.in
+++ b/sys/vcd/Makefile.in
@@ -116,16 +116,15 @@
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
 	$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
-	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gsettings.m4 \
-	$(top_srcdir)/m4/gst-fionread.m4 $(top_srcdir)/m4/gst-sdl.m4 \
-	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
-	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
-	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libgcrypt.m4 \
-	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
-	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
-	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
-	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
-	$(top_srcdir)/configure.ac
+	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gst-fionread.m4 \
+	$(top_srcdir)/m4/gst-sdl.m4 $(top_srcdir)/m4/iconv.m4 \
+	$(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \
+	$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
+	$(top_srcdir)/m4/libgcrypt.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
+	$(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \
@@ -274,6 +273,8 @@
 CLUTTER_X11_LIBS = @CLUTTER_X11_LIBS@
 CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
+CUDA_CFLAGS = @CUDA_CFLAGS@
+CUDA_LIBS = @CUDA_LIBS@
 CURL_CFLAGS = @CURL_CFLAGS@
 CURL_LIBS = @CURL_LIBS@
 CXX = @CXX@
@@ -311,6 +312,8 @@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
+EGL_CFLAGS = @EGL_CFLAGS@
+EGL_LIBS = @EGL_LIBS@
 EGREP = @EGREP@
 ERROR_CFLAGS = @ERROR_CFLAGS@
 ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
@@ -319,7 +322,6 @@
 EXIF_CFLAGS = @EXIF_CFLAGS@
 EXIF_LIBS = @EXIF_LIBS@
 FAAC_LIBS = @FAAC_LIBS@
-FAAD_IS_NEAAC = @FAAD_IS_NEAAC@
 FAAD_LIBS = @FAAD_LIBS@
 FFLAGS = @FFLAGS@
 FGREP = @FGREP@
@@ -338,8 +340,9 @@
 GIO_LIBS = @GIO_LIBS@
 GIO_UNIX_CFLAGS = @GIO_UNIX_CFLAGS@
 GIO_UNIX_LIBS = @GIO_UNIX_LIBS@
+GLES2_CFLAGS = @GLES2_CFLAGS@
+GLES2_LIBS = @GLES2_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
-GLIB_COMPILE_SCHEMAS = @GLIB_COMPILE_SCHEMAS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
@@ -356,16 +359,17 @@
 GMODULE_NO_EXPORT_LIBS = @GMODULE_NO_EXPORT_LIBS@
 GMSGFMT = @GMSGFMT@
 GMSGFMT_015 = @GMSGFMT_015@
+GNUSTL_CFLAGS = @GNUSTL_CFLAGS@
+GNUSTL_LIBS = @GNUSTL_LIBS@
 GRAPHENE_CFLAGS = @GRAPHENE_CFLAGS@
 GRAPHENE_LIBS = @GRAPHENE_LIBS@
 GREP = @GREP@
-GSETTINGS_CFLAGS = @GSETTINGS_CFLAGS@
-GSETTINGS_DISABLE_SCHEMAS_COMPILE = @GSETTINGS_DISABLE_SCHEMAS_COMPILE@
-GSETTINGS_LIBS = @GSETTINGS_LIBS@
 GSM_LIBS = @GSM_LIBS@
 GSTPB_PLUGINS_DIR = @GSTPB_PLUGINS_DIR@
 GSTPB_PREFIX = @GSTPB_PREFIX@
 GST_AGE = @GST_AGE@
+GST_ALLOCATORS_CFLAGS = @GST_ALLOCATORS_CFLAGS@
+GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
 GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
 GST_API_VERSION = @GST_API_VERSION@
 GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
@@ -391,6 +395,8 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PBUTILS_CFLAGS = @GST_PBUTILS_CFLAGS@
+GST_PBUTILS_LIBS = @GST_PBUTILS_LIBS@
 GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BAD_CFLAGS = @GST_PLUGINS_BAD_CFLAGS@
@@ -416,6 +422,8 @@
 GST_PREFIX = @GST_PREFIX@
 GST_REVISION = @GST_REVISION@
 GST_TOOLS_DIR = @GST_TOOLS_DIR@
+GST_VIDEO_CFLAGS = @GST_VIDEO_CFLAGS@
+GST_VIDEO_LIBS = @GST_VIDEO_LIBS@
 GTK3_CFLAGS = @GTK3_CFLAGS@
 GTK3_GL_CFLAGS = @GTK3_GL_CFLAGS@
 GTK3_GL_LIBS = @GTK3_GL_LIBS@
@@ -517,6 +525,7 @@
 LTLIBICONV = @LTLIBICONV@
 LTLIBINTL = @LTLIBINTL@
 LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
 MANIFEST_TOOL = @MANIFEST_TOOL@
@@ -530,8 +539,6 @@
 MODPLUG_LIBS = @MODPLUG_LIBS@
 MPEG2ENC_CFLAGS = @MPEG2ENC_CFLAGS@
 MPEG2ENC_LIBS = @MPEG2ENC_LIBS@
-MPG123_CFLAGS = @MPG123_CFLAGS@
-MPG123_LIBS = @MPG123_LIBS@
 MPLEX_CFLAGS = @MPLEX_CFLAGS@
 MPLEX_LDFLAGS = @MPLEX_LDFLAGS@
 MPLEX_LIBS = @MPLEX_LIBS@
@@ -547,6 +554,8 @@
 NETTLE_LIBS = @NETTLE_LIBS@
 NM = @NM@
 NMEDIT = @NMEDIT@
+NVENCODE_CFLAGS = @NVENCODE_CFLAGS@
+NVENCODE_LIBS = @NVENCODE_LIBS@
 OBJC = @OBJC@
 OBJCDEPMODE = @OBJCDEPMODE@
 OBJCFLAGS = @OBJCFLAGS@
@@ -604,16 +613,18 @@
 PYTHON_PLATFORM = @PYTHON_PLATFORM@
 PYTHON_PREFIX = @PYTHON_PREFIX@
 PYTHON_VERSION = @PYTHON_VERSION@
+QT_ANDROID_CFLAGS = @QT_ANDROID_CFLAGS@
+QT_ANDROID_LIBS = @QT_ANDROID_LIBS@
 QT_CFLAGS = @QT_CFLAGS@
 QT_LIBS = @QT_LIBS@
+QT_MAC_CFLAGS = @QT_MAC_CFLAGS@
+QT_MAC_LIBS = @QT_MAC_LIBS@
 QT_WAYLAND_CFLAGS = @QT_WAYLAND_CFLAGS@
 QT_WAYLAND_LIBS = @QT_WAYLAND_LIBS@
 QT_X11_CFLAGS = @QT_X11_CFLAGS@
 QT_X11_LIBS = @QT_X11_LIBS@
 RANLIB = @RANLIB@
 RCC = @RCC@
-RSVG_2_36_2_CFLAGS = @RSVG_2_36_2_CFLAGS@
-RSVG_2_36_2_LIBS = @RSVG_2_36_2_LIBS@
 RSVG_CFLAGS = @RSVG_CFLAGS@
 RSVG_LIBS = @RSVG_LIBS@
 RTMP_CFLAGS = @RTMP_CFLAGS@
@@ -665,6 +676,7 @@
 VOAACENC_LIBS = @VOAACENC_LIBS@
 VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
 VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VULKAN_LIBS = @VULKAN_LIBS@
 WARNING_CFLAGS = @WARNING_CFLAGS@
 WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
 WARNING_OBJCFLAGS = @WARNING_OBJCFLAGS@
@@ -675,6 +687,7 @@
 WAYLAND_LIBS = @WAYLAND_LIBS@
 WEBP_CFLAGS = @WEBP_CFLAGS@
 WEBP_LIBS = @WEBP_LIBS@
+WGET = @WGET@
 WILDMIDI_CFLAGS = @WILDMIDI_CFLAGS@
 WILDMIDI_LIBS = @WILDMIDI_LIBS@
 WINKS_LIBS = @WINKS_LIBS@
@@ -684,6 +697,8 @@
 X11_LIBS = @X11_LIBS@
 X265_CFLAGS = @X265_CFLAGS@
 X265_LIBS = @X265_LIBS@
+XCB_CFLAGS = @XCB_CFLAGS@
+XCB_LIBS = @XCB_LIBS@
 XCOMPOSITE_CFLAGS = @XCOMPOSITE_CFLAGS@
 XCOMPOSITE_LIBS = @XCOMPOSITE_LIBS@
 XGETTEXT = @XGETTEXT@
@@ -721,7 +736,6 @@
 docdir = @docdir@
 dvidir = @dvidir@
 exec_prefix = @exec_prefix@
-gsettingsschemadir = @gsettingsschemadir@
 host = @host@
 host_alias = @host_alias@
 host_cpu = @host_cpu@
diff --git a/sys/vdpau/Makefile.in b/sys/vdpau/Makefile.in
index 999ba9a..1ce42e8 100644
--- a/sys/vdpau/Makefile.in
+++ b/sys/vdpau/Makefile.in
@@ -116,16 +116,15 @@
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
 	$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
-	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gsettings.m4 \
-	$(top_srcdir)/m4/gst-fionread.m4 $(top_srcdir)/m4/gst-sdl.m4 \
-	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
-	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
-	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libgcrypt.m4 \
-	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
-	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
-	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
-	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
-	$(top_srcdir)/configure.ac
+	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gst-fionread.m4 \
+	$(top_srcdir)/m4/gst-sdl.m4 $(top_srcdir)/m4/iconv.m4 \
+	$(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \
+	$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
+	$(top_srcdir)/m4/libgcrypt.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
+	$(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \
@@ -282,6 +281,8 @@
 CLUTTER_X11_LIBS = @CLUTTER_X11_LIBS@
 CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
+CUDA_CFLAGS = @CUDA_CFLAGS@
+CUDA_LIBS = @CUDA_LIBS@
 CURL_CFLAGS = @CURL_CFLAGS@
 CURL_LIBS = @CURL_LIBS@
 CXX = @CXX@
@@ -319,6 +320,8 @@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
+EGL_CFLAGS = @EGL_CFLAGS@
+EGL_LIBS = @EGL_LIBS@
 EGREP = @EGREP@
 ERROR_CFLAGS = @ERROR_CFLAGS@
 ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
@@ -327,7 +330,6 @@
 EXIF_CFLAGS = @EXIF_CFLAGS@
 EXIF_LIBS = @EXIF_LIBS@
 FAAC_LIBS = @FAAC_LIBS@
-FAAD_IS_NEAAC = @FAAD_IS_NEAAC@
 FAAD_LIBS = @FAAD_LIBS@
 FFLAGS = @FFLAGS@
 FGREP = @FGREP@
@@ -346,8 +348,9 @@
 GIO_LIBS = @GIO_LIBS@
 GIO_UNIX_CFLAGS = @GIO_UNIX_CFLAGS@
 GIO_UNIX_LIBS = @GIO_UNIX_LIBS@
+GLES2_CFLAGS = @GLES2_CFLAGS@
+GLES2_LIBS = @GLES2_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
-GLIB_COMPILE_SCHEMAS = @GLIB_COMPILE_SCHEMAS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
@@ -364,16 +367,17 @@
 GMODULE_NO_EXPORT_LIBS = @GMODULE_NO_EXPORT_LIBS@
 GMSGFMT = @GMSGFMT@
 GMSGFMT_015 = @GMSGFMT_015@
+GNUSTL_CFLAGS = @GNUSTL_CFLAGS@
+GNUSTL_LIBS = @GNUSTL_LIBS@
 GRAPHENE_CFLAGS = @GRAPHENE_CFLAGS@
 GRAPHENE_LIBS = @GRAPHENE_LIBS@
 GREP = @GREP@
-GSETTINGS_CFLAGS = @GSETTINGS_CFLAGS@
-GSETTINGS_DISABLE_SCHEMAS_COMPILE = @GSETTINGS_DISABLE_SCHEMAS_COMPILE@
-GSETTINGS_LIBS = @GSETTINGS_LIBS@
 GSM_LIBS = @GSM_LIBS@
 GSTPB_PLUGINS_DIR = @GSTPB_PLUGINS_DIR@
 GSTPB_PREFIX = @GSTPB_PREFIX@
 GST_AGE = @GST_AGE@
+GST_ALLOCATORS_CFLAGS = @GST_ALLOCATORS_CFLAGS@
+GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
 GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
 GST_API_VERSION = @GST_API_VERSION@
 GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
@@ -399,6 +403,8 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PBUTILS_CFLAGS = @GST_PBUTILS_CFLAGS@
+GST_PBUTILS_LIBS = @GST_PBUTILS_LIBS@
 GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BAD_CFLAGS = @GST_PLUGINS_BAD_CFLAGS@
@@ -424,6 +430,8 @@
 GST_PREFIX = @GST_PREFIX@
 GST_REVISION = @GST_REVISION@
 GST_TOOLS_DIR = @GST_TOOLS_DIR@
+GST_VIDEO_CFLAGS = @GST_VIDEO_CFLAGS@
+GST_VIDEO_LIBS = @GST_VIDEO_LIBS@
 GTK3_CFLAGS = @GTK3_CFLAGS@
 GTK3_GL_CFLAGS = @GTK3_GL_CFLAGS@
 GTK3_GL_LIBS = @GTK3_GL_LIBS@
@@ -525,6 +533,7 @@
 LTLIBICONV = @LTLIBICONV@
 LTLIBINTL = @LTLIBINTL@
 LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
 MANIFEST_TOOL = @MANIFEST_TOOL@
@@ -538,8 +547,6 @@
 MODPLUG_LIBS = @MODPLUG_LIBS@
 MPEG2ENC_CFLAGS = @MPEG2ENC_CFLAGS@
 MPEG2ENC_LIBS = @MPEG2ENC_LIBS@
-MPG123_CFLAGS = @MPG123_CFLAGS@
-MPG123_LIBS = @MPG123_LIBS@
 MPLEX_CFLAGS = @MPLEX_CFLAGS@
 MPLEX_LDFLAGS = @MPLEX_LDFLAGS@
 MPLEX_LIBS = @MPLEX_LIBS@
@@ -555,6 +562,8 @@
 NETTLE_LIBS = @NETTLE_LIBS@
 NM = @NM@
 NMEDIT = @NMEDIT@
+NVENCODE_CFLAGS = @NVENCODE_CFLAGS@
+NVENCODE_LIBS = @NVENCODE_LIBS@
 OBJC = @OBJC@
 OBJCDEPMODE = @OBJCDEPMODE@
 OBJCFLAGS = @OBJCFLAGS@
@@ -612,16 +621,18 @@
 PYTHON_PLATFORM = @PYTHON_PLATFORM@
 PYTHON_PREFIX = @PYTHON_PREFIX@
 PYTHON_VERSION = @PYTHON_VERSION@
+QT_ANDROID_CFLAGS = @QT_ANDROID_CFLAGS@
+QT_ANDROID_LIBS = @QT_ANDROID_LIBS@
 QT_CFLAGS = @QT_CFLAGS@
 QT_LIBS = @QT_LIBS@
+QT_MAC_CFLAGS = @QT_MAC_CFLAGS@
+QT_MAC_LIBS = @QT_MAC_LIBS@
 QT_WAYLAND_CFLAGS = @QT_WAYLAND_CFLAGS@
 QT_WAYLAND_LIBS = @QT_WAYLAND_LIBS@
 QT_X11_CFLAGS = @QT_X11_CFLAGS@
 QT_X11_LIBS = @QT_X11_LIBS@
 RANLIB = @RANLIB@
 RCC = @RCC@
-RSVG_2_36_2_CFLAGS = @RSVG_2_36_2_CFLAGS@
-RSVG_2_36_2_LIBS = @RSVG_2_36_2_LIBS@
 RSVG_CFLAGS = @RSVG_CFLAGS@
 RSVG_LIBS = @RSVG_LIBS@
 RTMP_CFLAGS = @RTMP_CFLAGS@
@@ -673,6 +684,7 @@
 VOAACENC_LIBS = @VOAACENC_LIBS@
 VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
 VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VULKAN_LIBS = @VULKAN_LIBS@
 WARNING_CFLAGS = @WARNING_CFLAGS@
 WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
 WARNING_OBJCFLAGS = @WARNING_OBJCFLAGS@
@@ -683,6 +695,7 @@
 WAYLAND_LIBS = @WAYLAND_LIBS@
 WEBP_CFLAGS = @WEBP_CFLAGS@
 WEBP_LIBS = @WEBP_LIBS@
+WGET = @WGET@
 WILDMIDI_CFLAGS = @WILDMIDI_CFLAGS@
 WILDMIDI_LIBS = @WILDMIDI_LIBS@
 WINKS_LIBS = @WINKS_LIBS@
@@ -692,6 +705,8 @@
 X11_LIBS = @X11_LIBS@
 X265_CFLAGS = @X265_CFLAGS@
 X265_LIBS = @X265_LIBS@
+XCB_CFLAGS = @XCB_CFLAGS@
+XCB_LIBS = @XCB_LIBS@
 XCOMPOSITE_CFLAGS = @XCOMPOSITE_CFLAGS@
 XCOMPOSITE_LIBS = @XCOMPOSITE_LIBS@
 XGETTEXT = @XGETTEXT@
@@ -729,7 +744,6 @@
 docdir = @docdir@
 dvidir = @dvidir@
 exec_prefix = @exec_prefix@
-gsettingsschemadir = @gsettingsschemadir@
 host = @host@
 host_alias = @host_alias@
 host_cpu = @host_cpu@
diff --git a/sys/vdpau/gstvdpvideomemory.c b/sys/vdpau/gstvdpvideomemory.c
index 8d0fa51..8217653 100644
--- a/sys/vdpau/gstvdpvideomemory.c
+++ b/sys/vdpau/gstvdpvideomemory.c
@@ -222,8 +222,7 @@
 
   gst_object_unref (vmem->device);
 
-  if (vmem->cache)
-    g_free (vmem->cache);
+  g_free (vmem->cache);
 
   g_slice_free (GstVdpVideoMemory, vmem);
 }
diff --git a/sys/vdpau/mpeg/gstvdpmpegdec.c b/sys/vdpau/mpeg/gstvdpmpegdec.c
index efa836d..e6f6f95 100644
--- a/sys/vdpau/mpeg/gstvdpmpegdec.c
+++ b/sys/vdpau/mpeg/gstvdpmpegdec.c
@@ -26,7 +26,7 @@
  * <refsect2>
  * <title>Example launch line</title>
  * |[
- * gst-launch -v -m fakesrc ! vdpaumpegdec ! fakesink silent=TRUE
+ * gst-launch-1.0 -v -m fakesrc ! vdpaumpegdec ! fakesink silent=TRUE
  * ]|
  * </refsect2>
  */
diff --git a/sys/wasapi/Makefile.in b/sys/wasapi/Makefile.in
index 160a92b..0fb3aeb 100644
--- a/sys/wasapi/Makefile.in
+++ b/sys/wasapi/Makefile.in
@@ -116,16 +116,15 @@
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
 	$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
-	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gsettings.m4 \
-	$(top_srcdir)/m4/gst-fionread.m4 $(top_srcdir)/m4/gst-sdl.m4 \
-	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
-	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
-	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libgcrypt.m4 \
-	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
-	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
-	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
-	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
-	$(top_srcdir)/configure.ac
+	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gst-fionread.m4 \
+	$(top_srcdir)/m4/gst-sdl.m4 $(top_srcdir)/m4/iconv.m4 \
+	$(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \
+	$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
+	$(top_srcdir)/m4/libgcrypt.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
+	$(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \
@@ -278,6 +277,8 @@
 CLUTTER_X11_LIBS = @CLUTTER_X11_LIBS@
 CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
+CUDA_CFLAGS = @CUDA_CFLAGS@
+CUDA_LIBS = @CUDA_LIBS@
 CURL_CFLAGS = @CURL_CFLAGS@
 CURL_LIBS = @CURL_LIBS@
 CXX = @CXX@
@@ -315,6 +316,8 @@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
+EGL_CFLAGS = @EGL_CFLAGS@
+EGL_LIBS = @EGL_LIBS@
 EGREP = @EGREP@
 ERROR_CFLAGS = @ERROR_CFLAGS@
 ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
@@ -323,7 +326,6 @@
 EXIF_CFLAGS = @EXIF_CFLAGS@
 EXIF_LIBS = @EXIF_LIBS@
 FAAC_LIBS = @FAAC_LIBS@
-FAAD_IS_NEAAC = @FAAD_IS_NEAAC@
 FAAD_LIBS = @FAAD_LIBS@
 FFLAGS = @FFLAGS@
 FGREP = @FGREP@
@@ -342,8 +344,9 @@
 GIO_LIBS = @GIO_LIBS@
 GIO_UNIX_CFLAGS = @GIO_UNIX_CFLAGS@
 GIO_UNIX_LIBS = @GIO_UNIX_LIBS@
+GLES2_CFLAGS = @GLES2_CFLAGS@
+GLES2_LIBS = @GLES2_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
-GLIB_COMPILE_SCHEMAS = @GLIB_COMPILE_SCHEMAS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
@@ -360,16 +363,17 @@
 GMODULE_NO_EXPORT_LIBS = @GMODULE_NO_EXPORT_LIBS@
 GMSGFMT = @GMSGFMT@
 GMSGFMT_015 = @GMSGFMT_015@
+GNUSTL_CFLAGS = @GNUSTL_CFLAGS@
+GNUSTL_LIBS = @GNUSTL_LIBS@
 GRAPHENE_CFLAGS = @GRAPHENE_CFLAGS@
 GRAPHENE_LIBS = @GRAPHENE_LIBS@
 GREP = @GREP@
-GSETTINGS_CFLAGS = @GSETTINGS_CFLAGS@
-GSETTINGS_DISABLE_SCHEMAS_COMPILE = @GSETTINGS_DISABLE_SCHEMAS_COMPILE@
-GSETTINGS_LIBS = @GSETTINGS_LIBS@
 GSM_LIBS = @GSM_LIBS@
 GSTPB_PLUGINS_DIR = @GSTPB_PLUGINS_DIR@
 GSTPB_PREFIX = @GSTPB_PREFIX@
 GST_AGE = @GST_AGE@
+GST_ALLOCATORS_CFLAGS = @GST_ALLOCATORS_CFLAGS@
+GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
 GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
 GST_API_VERSION = @GST_API_VERSION@
 GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
@@ -395,6 +399,8 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PBUTILS_CFLAGS = @GST_PBUTILS_CFLAGS@
+GST_PBUTILS_LIBS = @GST_PBUTILS_LIBS@
 GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BAD_CFLAGS = @GST_PLUGINS_BAD_CFLAGS@
@@ -420,6 +426,8 @@
 GST_PREFIX = @GST_PREFIX@
 GST_REVISION = @GST_REVISION@
 GST_TOOLS_DIR = @GST_TOOLS_DIR@
+GST_VIDEO_CFLAGS = @GST_VIDEO_CFLAGS@
+GST_VIDEO_LIBS = @GST_VIDEO_LIBS@
 GTK3_CFLAGS = @GTK3_CFLAGS@
 GTK3_GL_CFLAGS = @GTK3_GL_CFLAGS@
 GTK3_GL_LIBS = @GTK3_GL_LIBS@
@@ -521,6 +529,7 @@
 LTLIBICONV = @LTLIBICONV@
 LTLIBINTL = @LTLIBINTL@
 LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
 MANIFEST_TOOL = @MANIFEST_TOOL@
@@ -534,8 +543,6 @@
 MODPLUG_LIBS = @MODPLUG_LIBS@
 MPEG2ENC_CFLAGS = @MPEG2ENC_CFLAGS@
 MPEG2ENC_LIBS = @MPEG2ENC_LIBS@
-MPG123_CFLAGS = @MPG123_CFLAGS@
-MPG123_LIBS = @MPG123_LIBS@
 MPLEX_CFLAGS = @MPLEX_CFLAGS@
 MPLEX_LDFLAGS = @MPLEX_LDFLAGS@
 MPLEX_LIBS = @MPLEX_LIBS@
@@ -551,6 +558,8 @@
 NETTLE_LIBS = @NETTLE_LIBS@
 NM = @NM@
 NMEDIT = @NMEDIT@
+NVENCODE_CFLAGS = @NVENCODE_CFLAGS@
+NVENCODE_LIBS = @NVENCODE_LIBS@
 OBJC = @OBJC@
 OBJCDEPMODE = @OBJCDEPMODE@
 OBJCFLAGS = @OBJCFLAGS@
@@ -608,16 +617,18 @@
 PYTHON_PLATFORM = @PYTHON_PLATFORM@
 PYTHON_PREFIX = @PYTHON_PREFIX@
 PYTHON_VERSION = @PYTHON_VERSION@
+QT_ANDROID_CFLAGS = @QT_ANDROID_CFLAGS@
+QT_ANDROID_LIBS = @QT_ANDROID_LIBS@
 QT_CFLAGS = @QT_CFLAGS@
 QT_LIBS = @QT_LIBS@
+QT_MAC_CFLAGS = @QT_MAC_CFLAGS@
+QT_MAC_LIBS = @QT_MAC_LIBS@
 QT_WAYLAND_CFLAGS = @QT_WAYLAND_CFLAGS@
 QT_WAYLAND_LIBS = @QT_WAYLAND_LIBS@
 QT_X11_CFLAGS = @QT_X11_CFLAGS@
 QT_X11_LIBS = @QT_X11_LIBS@
 RANLIB = @RANLIB@
 RCC = @RCC@
-RSVG_2_36_2_CFLAGS = @RSVG_2_36_2_CFLAGS@
-RSVG_2_36_2_LIBS = @RSVG_2_36_2_LIBS@
 RSVG_CFLAGS = @RSVG_CFLAGS@
 RSVG_LIBS = @RSVG_LIBS@
 RTMP_CFLAGS = @RTMP_CFLAGS@
@@ -669,6 +680,7 @@
 VOAACENC_LIBS = @VOAACENC_LIBS@
 VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
 VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VULKAN_LIBS = @VULKAN_LIBS@
 WARNING_CFLAGS = @WARNING_CFLAGS@
 WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
 WARNING_OBJCFLAGS = @WARNING_OBJCFLAGS@
@@ -679,6 +691,7 @@
 WAYLAND_LIBS = @WAYLAND_LIBS@
 WEBP_CFLAGS = @WEBP_CFLAGS@
 WEBP_LIBS = @WEBP_LIBS@
+WGET = @WGET@
 WILDMIDI_CFLAGS = @WILDMIDI_CFLAGS@
 WILDMIDI_LIBS = @WILDMIDI_LIBS@
 WINKS_LIBS = @WINKS_LIBS@
@@ -688,6 +701,8 @@
 X11_LIBS = @X11_LIBS@
 X265_CFLAGS = @X265_CFLAGS@
 X265_LIBS = @X265_LIBS@
+XCB_CFLAGS = @XCB_CFLAGS@
+XCB_LIBS = @XCB_LIBS@
 XCOMPOSITE_CFLAGS = @XCOMPOSITE_CFLAGS@
 XCOMPOSITE_LIBS = @XCOMPOSITE_LIBS@
 XGETTEXT = @XGETTEXT@
@@ -725,7 +740,6 @@
 docdir = @docdir@
 dvidir = @dvidir@
 exec_prefix = @exec_prefix@
-gsettingsschemadir = @gsettingsschemadir@
 host = @host@
 host_alias = @host_alias@
 host_cpu = @host_cpu@
diff --git a/sys/wininet/Makefile.in b/sys/wininet/Makefile.in
index 54f4253..b7afd9d 100644
--- a/sys/wininet/Makefile.in
+++ b/sys/wininet/Makefile.in
@@ -116,16 +116,15 @@
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
 	$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
-	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gsettings.m4 \
-	$(top_srcdir)/m4/gst-fionread.m4 $(top_srcdir)/m4/gst-sdl.m4 \
-	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
-	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
-	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libgcrypt.m4 \
-	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
-	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
-	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
-	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
-	$(top_srcdir)/configure.ac
+	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gst-fionread.m4 \
+	$(top_srcdir)/m4/gst-sdl.m4 $(top_srcdir)/m4/iconv.m4 \
+	$(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \
+	$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
+	$(top_srcdir)/m4/libgcrypt.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
+	$(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \
@@ -274,6 +273,8 @@
 CLUTTER_X11_LIBS = @CLUTTER_X11_LIBS@
 CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
+CUDA_CFLAGS = @CUDA_CFLAGS@
+CUDA_LIBS = @CUDA_LIBS@
 CURL_CFLAGS = @CURL_CFLAGS@
 CURL_LIBS = @CURL_LIBS@
 CXX = @CXX@
@@ -311,6 +312,8 @@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
+EGL_CFLAGS = @EGL_CFLAGS@
+EGL_LIBS = @EGL_LIBS@
 EGREP = @EGREP@
 ERROR_CFLAGS = @ERROR_CFLAGS@
 ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
@@ -319,7 +322,6 @@
 EXIF_CFLAGS = @EXIF_CFLAGS@
 EXIF_LIBS = @EXIF_LIBS@
 FAAC_LIBS = @FAAC_LIBS@
-FAAD_IS_NEAAC = @FAAD_IS_NEAAC@
 FAAD_LIBS = @FAAD_LIBS@
 FFLAGS = @FFLAGS@
 FGREP = @FGREP@
@@ -338,8 +340,9 @@
 GIO_LIBS = @GIO_LIBS@
 GIO_UNIX_CFLAGS = @GIO_UNIX_CFLAGS@
 GIO_UNIX_LIBS = @GIO_UNIX_LIBS@
+GLES2_CFLAGS = @GLES2_CFLAGS@
+GLES2_LIBS = @GLES2_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
-GLIB_COMPILE_SCHEMAS = @GLIB_COMPILE_SCHEMAS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
@@ -356,16 +359,17 @@
 GMODULE_NO_EXPORT_LIBS = @GMODULE_NO_EXPORT_LIBS@
 GMSGFMT = @GMSGFMT@
 GMSGFMT_015 = @GMSGFMT_015@
+GNUSTL_CFLAGS = @GNUSTL_CFLAGS@
+GNUSTL_LIBS = @GNUSTL_LIBS@
 GRAPHENE_CFLAGS = @GRAPHENE_CFLAGS@
 GRAPHENE_LIBS = @GRAPHENE_LIBS@
 GREP = @GREP@
-GSETTINGS_CFLAGS = @GSETTINGS_CFLAGS@
-GSETTINGS_DISABLE_SCHEMAS_COMPILE = @GSETTINGS_DISABLE_SCHEMAS_COMPILE@
-GSETTINGS_LIBS = @GSETTINGS_LIBS@
 GSM_LIBS = @GSM_LIBS@
 GSTPB_PLUGINS_DIR = @GSTPB_PLUGINS_DIR@
 GSTPB_PREFIX = @GSTPB_PREFIX@
 GST_AGE = @GST_AGE@
+GST_ALLOCATORS_CFLAGS = @GST_ALLOCATORS_CFLAGS@
+GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
 GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
 GST_API_VERSION = @GST_API_VERSION@
 GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
@@ -391,6 +395,8 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PBUTILS_CFLAGS = @GST_PBUTILS_CFLAGS@
+GST_PBUTILS_LIBS = @GST_PBUTILS_LIBS@
 GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BAD_CFLAGS = @GST_PLUGINS_BAD_CFLAGS@
@@ -416,6 +422,8 @@
 GST_PREFIX = @GST_PREFIX@
 GST_REVISION = @GST_REVISION@
 GST_TOOLS_DIR = @GST_TOOLS_DIR@
+GST_VIDEO_CFLAGS = @GST_VIDEO_CFLAGS@
+GST_VIDEO_LIBS = @GST_VIDEO_LIBS@
 GTK3_CFLAGS = @GTK3_CFLAGS@
 GTK3_GL_CFLAGS = @GTK3_GL_CFLAGS@
 GTK3_GL_LIBS = @GTK3_GL_LIBS@
@@ -517,6 +525,7 @@
 LTLIBICONV = @LTLIBICONV@
 LTLIBINTL = @LTLIBINTL@
 LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
 MANIFEST_TOOL = @MANIFEST_TOOL@
@@ -530,8 +539,6 @@
 MODPLUG_LIBS = @MODPLUG_LIBS@
 MPEG2ENC_CFLAGS = @MPEG2ENC_CFLAGS@
 MPEG2ENC_LIBS = @MPEG2ENC_LIBS@
-MPG123_CFLAGS = @MPG123_CFLAGS@
-MPG123_LIBS = @MPG123_LIBS@
 MPLEX_CFLAGS = @MPLEX_CFLAGS@
 MPLEX_LDFLAGS = @MPLEX_LDFLAGS@
 MPLEX_LIBS = @MPLEX_LIBS@
@@ -547,6 +554,8 @@
 NETTLE_LIBS = @NETTLE_LIBS@
 NM = @NM@
 NMEDIT = @NMEDIT@
+NVENCODE_CFLAGS = @NVENCODE_CFLAGS@
+NVENCODE_LIBS = @NVENCODE_LIBS@
 OBJC = @OBJC@
 OBJCDEPMODE = @OBJCDEPMODE@
 OBJCFLAGS = @OBJCFLAGS@
@@ -604,16 +613,18 @@
 PYTHON_PLATFORM = @PYTHON_PLATFORM@
 PYTHON_PREFIX = @PYTHON_PREFIX@
 PYTHON_VERSION = @PYTHON_VERSION@
+QT_ANDROID_CFLAGS = @QT_ANDROID_CFLAGS@
+QT_ANDROID_LIBS = @QT_ANDROID_LIBS@
 QT_CFLAGS = @QT_CFLAGS@
 QT_LIBS = @QT_LIBS@
+QT_MAC_CFLAGS = @QT_MAC_CFLAGS@
+QT_MAC_LIBS = @QT_MAC_LIBS@
 QT_WAYLAND_CFLAGS = @QT_WAYLAND_CFLAGS@
 QT_WAYLAND_LIBS = @QT_WAYLAND_LIBS@
 QT_X11_CFLAGS = @QT_X11_CFLAGS@
 QT_X11_LIBS = @QT_X11_LIBS@
 RANLIB = @RANLIB@
 RCC = @RCC@
-RSVG_2_36_2_CFLAGS = @RSVG_2_36_2_CFLAGS@
-RSVG_2_36_2_LIBS = @RSVG_2_36_2_LIBS@
 RSVG_CFLAGS = @RSVG_CFLAGS@
 RSVG_LIBS = @RSVG_LIBS@
 RTMP_CFLAGS = @RTMP_CFLAGS@
@@ -665,6 +676,7 @@
 VOAACENC_LIBS = @VOAACENC_LIBS@
 VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
 VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VULKAN_LIBS = @VULKAN_LIBS@
 WARNING_CFLAGS = @WARNING_CFLAGS@
 WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
 WARNING_OBJCFLAGS = @WARNING_OBJCFLAGS@
@@ -675,6 +687,7 @@
 WAYLAND_LIBS = @WAYLAND_LIBS@
 WEBP_CFLAGS = @WEBP_CFLAGS@
 WEBP_LIBS = @WEBP_LIBS@
+WGET = @WGET@
 WILDMIDI_CFLAGS = @WILDMIDI_CFLAGS@
 WILDMIDI_LIBS = @WILDMIDI_LIBS@
 WINKS_LIBS = @WINKS_LIBS@
@@ -684,6 +697,8 @@
 X11_LIBS = @X11_LIBS@
 X265_CFLAGS = @X265_CFLAGS@
 X265_LIBS = @X265_LIBS@
+XCB_CFLAGS = @XCB_CFLAGS@
+XCB_LIBS = @XCB_LIBS@
 XCOMPOSITE_CFLAGS = @XCOMPOSITE_CFLAGS@
 XCOMPOSITE_LIBS = @XCOMPOSITE_LIBS@
 XGETTEXT = @XGETTEXT@
@@ -721,7 +736,6 @@
 docdir = @docdir@
 dvidir = @dvidir@
 exec_prefix = @exec_prefix@
-gsettingsschemadir = @gsettingsschemadir@
 host = @host@
 host_alias = @host_alias@
 host_cpu = @host_cpu@
diff --git a/sys/winks/Makefile.in b/sys/winks/Makefile.in
index e87db5d..64eecac 100644
--- a/sys/winks/Makefile.in
+++ b/sys/winks/Makefile.in
@@ -116,16 +116,15 @@
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
 	$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
-	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gsettings.m4 \
-	$(top_srcdir)/m4/gst-fionread.m4 $(top_srcdir)/m4/gst-sdl.m4 \
-	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
-	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
-	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libgcrypt.m4 \
-	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
-	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
-	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
-	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
-	$(top_srcdir)/configure.ac
+	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gst-fionread.m4 \
+	$(top_srcdir)/m4/gst-sdl.m4 $(top_srcdir)/m4/iconv.m4 \
+	$(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \
+	$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
+	$(top_srcdir)/m4/libgcrypt.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
+	$(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \
@@ -279,6 +278,8 @@
 CLUTTER_X11_LIBS = @CLUTTER_X11_LIBS@
 CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
+CUDA_CFLAGS = @CUDA_CFLAGS@
+CUDA_LIBS = @CUDA_LIBS@
 CURL_CFLAGS = @CURL_CFLAGS@
 CURL_LIBS = @CURL_LIBS@
 CXX = @CXX@
@@ -316,6 +317,8 @@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
+EGL_CFLAGS = @EGL_CFLAGS@
+EGL_LIBS = @EGL_LIBS@
 EGREP = @EGREP@
 ERROR_CFLAGS = @ERROR_CFLAGS@
 ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
@@ -324,7 +327,6 @@
 EXIF_CFLAGS = @EXIF_CFLAGS@
 EXIF_LIBS = @EXIF_LIBS@
 FAAC_LIBS = @FAAC_LIBS@
-FAAD_IS_NEAAC = @FAAD_IS_NEAAC@
 FAAD_LIBS = @FAAD_LIBS@
 FFLAGS = @FFLAGS@
 FGREP = @FGREP@
@@ -343,8 +345,9 @@
 GIO_LIBS = @GIO_LIBS@
 GIO_UNIX_CFLAGS = @GIO_UNIX_CFLAGS@
 GIO_UNIX_LIBS = @GIO_UNIX_LIBS@
+GLES2_CFLAGS = @GLES2_CFLAGS@
+GLES2_LIBS = @GLES2_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
-GLIB_COMPILE_SCHEMAS = @GLIB_COMPILE_SCHEMAS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
@@ -361,16 +364,17 @@
 GMODULE_NO_EXPORT_LIBS = @GMODULE_NO_EXPORT_LIBS@
 GMSGFMT = @GMSGFMT@
 GMSGFMT_015 = @GMSGFMT_015@
+GNUSTL_CFLAGS = @GNUSTL_CFLAGS@
+GNUSTL_LIBS = @GNUSTL_LIBS@
 GRAPHENE_CFLAGS = @GRAPHENE_CFLAGS@
 GRAPHENE_LIBS = @GRAPHENE_LIBS@
 GREP = @GREP@
-GSETTINGS_CFLAGS = @GSETTINGS_CFLAGS@
-GSETTINGS_DISABLE_SCHEMAS_COMPILE = @GSETTINGS_DISABLE_SCHEMAS_COMPILE@
-GSETTINGS_LIBS = @GSETTINGS_LIBS@
 GSM_LIBS = @GSM_LIBS@
 GSTPB_PLUGINS_DIR = @GSTPB_PLUGINS_DIR@
 GSTPB_PREFIX = @GSTPB_PREFIX@
 GST_AGE = @GST_AGE@
+GST_ALLOCATORS_CFLAGS = @GST_ALLOCATORS_CFLAGS@
+GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
 GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
 GST_API_VERSION = @GST_API_VERSION@
 GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
@@ -396,6 +400,8 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PBUTILS_CFLAGS = @GST_PBUTILS_CFLAGS@
+GST_PBUTILS_LIBS = @GST_PBUTILS_LIBS@
 GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BAD_CFLAGS = @GST_PLUGINS_BAD_CFLAGS@
@@ -421,6 +427,8 @@
 GST_PREFIX = @GST_PREFIX@
 GST_REVISION = @GST_REVISION@
 GST_TOOLS_DIR = @GST_TOOLS_DIR@
+GST_VIDEO_CFLAGS = @GST_VIDEO_CFLAGS@
+GST_VIDEO_LIBS = @GST_VIDEO_LIBS@
 GTK3_CFLAGS = @GTK3_CFLAGS@
 GTK3_GL_CFLAGS = @GTK3_GL_CFLAGS@
 GTK3_GL_LIBS = @GTK3_GL_LIBS@
@@ -522,6 +530,7 @@
 LTLIBICONV = @LTLIBICONV@
 LTLIBINTL = @LTLIBINTL@
 LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
 MANIFEST_TOOL = @MANIFEST_TOOL@
@@ -535,8 +544,6 @@
 MODPLUG_LIBS = @MODPLUG_LIBS@
 MPEG2ENC_CFLAGS = @MPEG2ENC_CFLAGS@
 MPEG2ENC_LIBS = @MPEG2ENC_LIBS@
-MPG123_CFLAGS = @MPG123_CFLAGS@
-MPG123_LIBS = @MPG123_LIBS@
 MPLEX_CFLAGS = @MPLEX_CFLAGS@
 MPLEX_LDFLAGS = @MPLEX_LDFLAGS@
 MPLEX_LIBS = @MPLEX_LIBS@
@@ -552,6 +559,8 @@
 NETTLE_LIBS = @NETTLE_LIBS@
 NM = @NM@
 NMEDIT = @NMEDIT@
+NVENCODE_CFLAGS = @NVENCODE_CFLAGS@
+NVENCODE_LIBS = @NVENCODE_LIBS@
 OBJC = @OBJC@
 OBJCDEPMODE = @OBJCDEPMODE@
 OBJCFLAGS = @OBJCFLAGS@
@@ -609,16 +618,18 @@
 PYTHON_PLATFORM = @PYTHON_PLATFORM@
 PYTHON_PREFIX = @PYTHON_PREFIX@
 PYTHON_VERSION = @PYTHON_VERSION@
+QT_ANDROID_CFLAGS = @QT_ANDROID_CFLAGS@
+QT_ANDROID_LIBS = @QT_ANDROID_LIBS@
 QT_CFLAGS = @QT_CFLAGS@
 QT_LIBS = @QT_LIBS@
+QT_MAC_CFLAGS = @QT_MAC_CFLAGS@
+QT_MAC_LIBS = @QT_MAC_LIBS@
 QT_WAYLAND_CFLAGS = @QT_WAYLAND_CFLAGS@
 QT_WAYLAND_LIBS = @QT_WAYLAND_LIBS@
 QT_X11_CFLAGS = @QT_X11_CFLAGS@
 QT_X11_LIBS = @QT_X11_LIBS@
 RANLIB = @RANLIB@
 RCC = @RCC@
-RSVG_2_36_2_CFLAGS = @RSVG_2_36_2_CFLAGS@
-RSVG_2_36_2_LIBS = @RSVG_2_36_2_LIBS@
 RSVG_CFLAGS = @RSVG_CFLAGS@
 RSVG_LIBS = @RSVG_LIBS@
 RTMP_CFLAGS = @RTMP_CFLAGS@
@@ -670,6 +681,7 @@
 VOAACENC_LIBS = @VOAACENC_LIBS@
 VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
 VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VULKAN_LIBS = @VULKAN_LIBS@
 WARNING_CFLAGS = @WARNING_CFLAGS@
 WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
 WARNING_OBJCFLAGS = @WARNING_OBJCFLAGS@
@@ -680,6 +692,7 @@
 WAYLAND_LIBS = @WAYLAND_LIBS@
 WEBP_CFLAGS = @WEBP_CFLAGS@
 WEBP_LIBS = @WEBP_LIBS@
+WGET = @WGET@
 WILDMIDI_CFLAGS = @WILDMIDI_CFLAGS@
 WILDMIDI_LIBS = @WILDMIDI_LIBS@
 WINKS_LIBS = @WINKS_LIBS@
@@ -689,6 +702,8 @@
 X11_LIBS = @X11_LIBS@
 X265_CFLAGS = @X265_CFLAGS@
 X265_LIBS = @X265_LIBS@
+XCB_CFLAGS = @XCB_CFLAGS@
+XCB_LIBS = @XCB_LIBS@
 XCOMPOSITE_CFLAGS = @XCOMPOSITE_CFLAGS@
 XCOMPOSITE_LIBS = @XCOMPOSITE_LIBS@
 XGETTEXT = @XGETTEXT@
@@ -726,7 +741,6 @@
 docdir = @docdir@
 dvidir = @dvidir@
 exec_prefix = @exec_prefix@
-gsettingsschemadir = @gsettingsschemadir@
 host = @host@
 host_alias = @host_alias@
 host_cpu = @host_cpu@
diff --git a/sys/winks/gstksvideosrc.c b/sys/winks/gstksvideosrc.c
index 07cdf8b..c2bad34 100644
--- a/sys/winks/gstksvideosrc.c
+++ b/sys/winks/gstksvideosrc.c
@@ -26,11 +26,11 @@
  * <refsect2>
  * <title>Example pipelines</title>
  * |[
- * gst-launch -v ksvideosrc do-stats=TRUE ! ffmpegcolorspace ! dshowvideosink
+ * gst-launch-1.0 -v ksvideosrc do-stats=TRUE ! videoconvert ! dshowvideosink
  * ]| Capture from a camera and render using dshowvideosink.
  * |[
- * gst-launch -v ksvideosrc do-stats=TRUE ! image/jpeg, width=640, height=480
- * ! jpegdec ! ffmpegcolorspace ! dshowvideosink
+ * gst-launch-1.0 -v ksvideosrc do-stats=TRUE ! image/jpeg, width=640, height=480
+ * ! jpegdec ! videoconvert ! dshowvideosink
  * ]| Capture from an MJPEG camera and render using dshowvideosink.
  * </refsect2>
  */
@@ -98,8 +98,6 @@
   GstKsClock *ksclock;
   GstKsVideoDevice *device;
 
-  guint64 offset;
-  GstClockTime prev_ts;
   gboolean running;
 
   /* Worker thread */
@@ -343,10 +341,6 @@
   priv->count = 0;
   priv->fps = -1;
 
-  /* Reset timestamping state */
-  priv->offset = 0;
-  priv->prev_ts = GST_CLOCK_TIME_NONE;
-
   priv->running = FALSE;
 }
 
@@ -813,12 +807,11 @@
   GstKsVideoSrcPrivate *priv = GST_KS_VIDEO_SRC_GET_PRIVATE (self);
   GstClockTime duration;
   GstClock *clock;
-  GstClockTime timestamp;
+  GstClockTime timestamp, base_time;
 
   /* Don't timestamp muxed streams */
   if (gst_ks_video_device_stream_is_muxed (priv->device)) {
     duration = timestamp = GST_CLOCK_TIME_NONE;
-    priv->offset++;
     goto timestamp;
   }
 
@@ -828,88 +821,25 @@
   clock = GST_ELEMENT_CLOCK (self);
   if (clock != NULL) {
     gst_object_ref (clock);
-    timestamp = GST_ELEMENT (self)->base_time;
-
-    if (GST_CLOCK_TIME_IS_VALID (presentation_time)) {
-      if (presentation_time > GST_ELEMENT (self)->base_time)
-        presentation_time -= GST_ELEMENT (self)->base_time;
-      else
-        presentation_time = 0;
-    }
+    base_time = GST_ELEMENT (self)->base_time;
   } else {
     timestamp = GST_CLOCK_TIME_NONE;
   }
   GST_OBJECT_UNLOCK (self);
 
   if (clock != NULL) {
-
     /* The time according to the current clock */
-    timestamp = gst_clock_get_time (clock) - timestamp;
+    timestamp = gst_clock_get_time (clock) - base_time;
     if (timestamp > duration)
       timestamp -= duration;
     else
       timestamp = 0;
 
-    if (GST_CLOCK_TIME_IS_VALID (presentation_time)) {
-      /*
-       * We don't use this for anything yet, need to ponder how to deal
-       * with pins that use an internal clock and timestamp from 0.
-       */
-      GstClockTimeDiff diff = GST_CLOCK_DIFF (presentation_time, timestamp);
-      GST_DEBUG_OBJECT (self, "diff between gst and driver timestamp: %"
-          G_GINT64_FORMAT, diff);
-    }
-
     gst_object_unref (clock);
     clock = NULL;
-
-    /* Unless it's the first frame, align the current timestamp on a multiple
-     * of duration since the previous */
-    if (GST_CLOCK_TIME_IS_VALID (priv->prev_ts)) {
-      GstClockTime delta;
-      guint delta_remainder, delta_offset;
-
-      /* REVISIT: I've seen this happen with the GstSystemClock on Windows,
-       *          scary... */
-      if (timestamp < priv->prev_ts) {
-        GST_INFO_OBJECT (self, "clock is ticking backwards");
-        return FALSE;
-      }
-
-      /* Round to a duration boundary */
-      delta = timestamp - priv->prev_ts;
-      delta_remainder = delta % duration;
-
-      if (delta_remainder < duration / 3)
-        timestamp -= delta_remainder;
-      else
-        timestamp += duration - delta_remainder;
-
-      /* How many frames are we off then? */
-      delta = timestamp - priv->prev_ts;
-      delta_offset = delta / duration;
-
-      if (delta_offset == 1)    /* perfect */
-        GST_BUFFER_FLAG_UNSET (buf, GST_BUFFER_FLAG_DISCONT);
-      else if (delta_offset > 1) {
-        guint lost = delta_offset - 1;
-        GST_INFO_OBJECT (self, "lost %d frame%s, setting discont flag",
-            lost, (lost > 1) ? "s" : "");
-        GST_BUFFER_FLAG_SET (buf, GST_BUFFER_FLAG_DISCONT);
-      } else if (delta_offset == 0) {   /* overproduction, skip this frame */
-        GST_INFO_OBJECT (self, "skipping frame");
-        return FALSE;
-      }
-
-      priv->offset += delta_offset;
-    }
-
-    priv->prev_ts = timestamp;
   }
 
 timestamp:
-  GST_BUFFER_OFFSET (buf) = priv->offset;
-  GST_BUFFER_OFFSET_END (buf) = GST_BUFFER_OFFSET (buf) + 1;
   GST_BUFFER_PTS (buf) = timestamp;
   GST_BUFFER_DTS (buf) = GST_CLOCK_TIME_NONE;
   GST_BUFFER_DURATION (buf) = duration;
diff --git a/sys/winscreencap/Makefile.in b/sys/winscreencap/Makefile.in
index d79bfdd..cd539ae 100644
--- a/sys/winscreencap/Makefile.in
+++ b/sys/winscreencap/Makefile.in
@@ -116,16 +116,15 @@
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
 	$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
-	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gsettings.m4 \
-	$(top_srcdir)/m4/gst-fionread.m4 $(top_srcdir)/m4/gst-sdl.m4 \
-	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
-	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
-	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libgcrypt.m4 \
-	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
-	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
-	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
-	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
-	$(top_srcdir)/configure.ac
+	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gst-fionread.m4 \
+	$(top_srcdir)/m4/gst-sdl.m4 $(top_srcdir)/m4/iconv.m4 \
+	$(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \
+	$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
+	$(top_srcdir)/m4/libgcrypt.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
+	$(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \
@@ -278,6 +277,8 @@
 CLUTTER_X11_LIBS = @CLUTTER_X11_LIBS@
 CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
+CUDA_CFLAGS = @CUDA_CFLAGS@
+CUDA_LIBS = @CUDA_LIBS@
 CURL_CFLAGS = @CURL_CFLAGS@
 CURL_LIBS = @CURL_LIBS@
 CXX = @CXX@
@@ -315,6 +316,8 @@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
+EGL_CFLAGS = @EGL_CFLAGS@
+EGL_LIBS = @EGL_LIBS@
 EGREP = @EGREP@
 ERROR_CFLAGS = @ERROR_CFLAGS@
 ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
@@ -323,7 +326,6 @@
 EXIF_CFLAGS = @EXIF_CFLAGS@
 EXIF_LIBS = @EXIF_LIBS@
 FAAC_LIBS = @FAAC_LIBS@
-FAAD_IS_NEAAC = @FAAD_IS_NEAAC@
 FAAD_LIBS = @FAAD_LIBS@
 FFLAGS = @FFLAGS@
 FGREP = @FGREP@
@@ -342,8 +344,9 @@
 GIO_LIBS = @GIO_LIBS@
 GIO_UNIX_CFLAGS = @GIO_UNIX_CFLAGS@
 GIO_UNIX_LIBS = @GIO_UNIX_LIBS@
+GLES2_CFLAGS = @GLES2_CFLAGS@
+GLES2_LIBS = @GLES2_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
-GLIB_COMPILE_SCHEMAS = @GLIB_COMPILE_SCHEMAS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
@@ -360,16 +363,17 @@
 GMODULE_NO_EXPORT_LIBS = @GMODULE_NO_EXPORT_LIBS@
 GMSGFMT = @GMSGFMT@
 GMSGFMT_015 = @GMSGFMT_015@
+GNUSTL_CFLAGS = @GNUSTL_CFLAGS@
+GNUSTL_LIBS = @GNUSTL_LIBS@
 GRAPHENE_CFLAGS = @GRAPHENE_CFLAGS@
 GRAPHENE_LIBS = @GRAPHENE_LIBS@
 GREP = @GREP@
-GSETTINGS_CFLAGS = @GSETTINGS_CFLAGS@
-GSETTINGS_DISABLE_SCHEMAS_COMPILE = @GSETTINGS_DISABLE_SCHEMAS_COMPILE@
-GSETTINGS_LIBS = @GSETTINGS_LIBS@
 GSM_LIBS = @GSM_LIBS@
 GSTPB_PLUGINS_DIR = @GSTPB_PLUGINS_DIR@
 GSTPB_PREFIX = @GSTPB_PREFIX@
 GST_AGE = @GST_AGE@
+GST_ALLOCATORS_CFLAGS = @GST_ALLOCATORS_CFLAGS@
+GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
 GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
 GST_API_VERSION = @GST_API_VERSION@
 GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
@@ -395,6 +399,8 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PBUTILS_CFLAGS = @GST_PBUTILS_CFLAGS@
+GST_PBUTILS_LIBS = @GST_PBUTILS_LIBS@
 GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BAD_CFLAGS = @GST_PLUGINS_BAD_CFLAGS@
@@ -420,6 +426,8 @@
 GST_PREFIX = @GST_PREFIX@
 GST_REVISION = @GST_REVISION@
 GST_TOOLS_DIR = @GST_TOOLS_DIR@
+GST_VIDEO_CFLAGS = @GST_VIDEO_CFLAGS@
+GST_VIDEO_LIBS = @GST_VIDEO_LIBS@
 GTK3_CFLAGS = @GTK3_CFLAGS@
 GTK3_GL_CFLAGS = @GTK3_GL_CFLAGS@
 GTK3_GL_LIBS = @GTK3_GL_LIBS@
@@ -521,6 +529,7 @@
 LTLIBICONV = @LTLIBICONV@
 LTLIBINTL = @LTLIBINTL@
 LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
 MANIFEST_TOOL = @MANIFEST_TOOL@
@@ -534,8 +543,6 @@
 MODPLUG_LIBS = @MODPLUG_LIBS@
 MPEG2ENC_CFLAGS = @MPEG2ENC_CFLAGS@
 MPEG2ENC_LIBS = @MPEG2ENC_LIBS@
-MPG123_CFLAGS = @MPG123_CFLAGS@
-MPG123_LIBS = @MPG123_LIBS@
 MPLEX_CFLAGS = @MPLEX_CFLAGS@
 MPLEX_LDFLAGS = @MPLEX_LDFLAGS@
 MPLEX_LIBS = @MPLEX_LIBS@
@@ -551,6 +558,8 @@
 NETTLE_LIBS = @NETTLE_LIBS@
 NM = @NM@
 NMEDIT = @NMEDIT@
+NVENCODE_CFLAGS = @NVENCODE_CFLAGS@
+NVENCODE_LIBS = @NVENCODE_LIBS@
 OBJC = @OBJC@
 OBJCDEPMODE = @OBJCDEPMODE@
 OBJCFLAGS = @OBJCFLAGS@
@@ -608,16 +617,18 @@
 PYTHON_PLATFORM = @PYTHON_PLATFORM@
 PYTHON_PREFIX = @PYTHON_PREFIX@
 PYTHON_VERSION = @PYTHON_VERSION@
+QT_ANDROID_CFLAGS = @QT_ANDROID_CFLAGS@
+QT_ANDROID_LIBS = @QT_ANDROID_LIBS@
 QT_CFLAGS = @QT_CFLAGS@
 QT_LIBS = @QT_LIBS@
+QT_MAC_CFLAGS = @QT_MAC_CFLAGS@
+QT_MAC_LIBS = @QT_MAC_LIBS@
 QT_WAYLAND_CFLAGS = @QT_WAYLAND_CFLAGS@
 QT_WAYLAND_LIBS = @QT_WAYLAND_LIBS@
 QT_X11_CFLAGS = @QT_X11_CFLAGS@
 QT_X11_LIBS = @QT_X11_LIBS@
 RANLIB = @RANLIB@
 RCC = @RCC@
-RSVG_2_36_2_CFLAGS = @RSVG_2_36_2_CFLAGS@
-RSVG_2_36_2_LIBS = @RSVG_2_36_2_LIBS@
 RSVG_CFLAGS = @RSVG_CFLAGS@
 RSVG_LIBS = @RSVG_LIBS@
 RTMP_CFLAGS = @RTMP_CFLAGS@
@@ -669,6 +680,7 @@
 VOAACENC_LIBS = @VOAACENC_LIBS@
 VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
 VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VULKAN_LIBS = @VULKAN_LIBS@
 WARNING_CFLAGS = @WARNING_CFLAGS@
 WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
 WARNING_OBJCFLAGS = @WARNING_OBJCFLAGS@
@@ -679,6 +691,7 @@
 WAYLAND_LIBS = @WAYLAND_LIBS@
 WEBP_CFLAGS = @WEBP_CFLAGS@
 WEBP_LIBS = @WEBP_LIBS@
+WGET = @WGET@
 WILDMIDI_CFLAGS = @WILDMIDI_CFLAGS@
 WILDMIDI_LIBS = @WILDMIDI_LIBS@
 WINKS_LIBS = @WINKS_LIBS@
@@ -688,6 +701,8 @@
 X11_LIBS = @X11_LIBS@
 X265_CFLAGS = @X265_CFLAGS@
 X265_LIBS = @X265_LIBS@
+XCB_CFLAGS = @XCB_CFLAGS@
+XCB_LIBS = @XCB_LIBS@
 XCOMPOSITE_CFLAGS = @XCOMPOSITE_CFLAGS@
 XCOMPOSITE_LIBS = @XCOMPOSITE_LIBS@
 XGETTEXT = @XGETTEXT@
@@ -725,7 +740,6 @@
 docdir = @docdir@
 dvidir = @dvidir@
 exec_prefix = @exec_prefix@
-gsettingsschemadir = @gsettingsschemadir@
 host = @host@
 host_alias = @host_alias@
 host_cpu = @host_cpu@
diff --git a/sys/winscreencap/gstdx9screencapsrc.c b/sys/winscreencap/gstdx9screencapsrc.c
index 9a856e0..0f889b2 100644
--- a/sys/winscreencap/gstdx9screencapsrc.c
+++ b/sys/winscreencap/gstdx9screencapsrc.c
@@ -30,11 +30,11 @@
  * <refsect2>
  * <title>Example pipelines</title>
  * |[
- * gst-launch dx9screencapsrc ! ffmpegcolorspace ! dshowvideosink
+ * gst-launch-1.0 dx9screencapsrc ! videoconvert ! dshowvideosink
  * ]| Capture the desktop and display it.
  * |[
- * gst-launch dx9screencapsrc x=100 y=100 width=320 height=240 !
- * ffmpegcolorspace ! dshowvideosink
+ * gst-launch-1.0 dx9screencapsrc x=100 y=100 width=320 height=240 !
+ * videoconvert ! dshowvideosink
  * ]| Capture a portion of the desktop and display it.
  * </refsect2>
  */
diff --git a/sys/winscreencap/gstgdiscreencapsrc.c b/sys/winscreencap/gstgdiscreencapsrc.c
index 92d9ec2..55bd4b5 100644
--- a/sys/winscreencap/gstgdiscreencapsrc.c
+++ b/sys/winscreencap/gstgdiscreencapsrc.c
@@ -32,11 +32,11 @@
  * <refsect2>
  * <title>Example pipelines</title>
  * |[
- * gst-launch gdiscreencapsrc ! ffmpegcolorspace ! dshowvideosink
+ * gst-launch-1.0 gdiscreencapsrc ! videoconvert ! dshowvideosink
  * ]| Capture the desktop and display it.
  * |[
- * gst-launch gdiscreencapsrc x=100 y=100 width=320 height=240 cursor=TRUE
- * ! ffmpegcolorspace ! dshowvideosink
+ * gst-launch-1.0 gdiscreencapsrc x=100 y=100 width=320 height=240 cursor=TRUE
+ * ! videoconvert ! dshowvideosink
  * ]| Capture a portion of the desktop, including the mouse cursor, and
  * display it.
  * </refsect2>
diff --git a/tests/Makefile.in b/tests/Makefile.in
index 211626c..684625a 100644
--- a/tests/Makefile.in
+++ b/tests/Makefile.in
@@ -114,16 +114,15 @@
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
 	$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
-	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gsettings.m4 \
-	$(top_srcdir)/m4/gst-fionread.m4 $(top_srcdir)/m4/gst-sdl.m4 \
-	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
-	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
-	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libgcrypt.m4 \
-	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
-	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
-	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
-	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
-	$(top_srcdir)/configure.ac
+	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gst-fionread.m4 \
+	$(top_srcdir)/m4/gst-sdl.m4 $(top_srcdir)/m4/iconv.m4 \
+	$(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \
+	$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
+	$(top_srcdir)/m4/libgcrypt.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
+	$(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
@@ -247,6 +246,8 @@
 CLUTTER_X11_LIBS = @CLUTTER_X11_LIBS@
 CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
+CUDA_CFLAGS = @CUDA_CFLAGS@
+CUDA_LIBS = @CUDA_LIBS@
 CURL_CFLAGS = @CURL_CFLAGS@
 CURL_LIBS = @CURL_LIBS@
 CXX = @CXX@
@@ -284,6 +285,8 @@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
+EGL_CFLAGS = @EGL_CFLAGS@
+EGL_LIBS = @EGL_LIBS@
 EGREP = @EGREP@
 ERROR_CFLAGS = @ERROR_CFLAGS@
 ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
@@ -292,7 +295,6 @@
 EXIF_CFLAGS = @EXIF_CFLAGS@
 EXIF_LIBS = @EXIF_LIBS@
 FAAC_LIBS = @FAAC_LIBS@
-FAAD_IS_NEAAC = @FAAD_IS_NEAAC@
 FAAD_LIBS = @FAAD_LIBS@
 FFLAGS = @FFLAGS@
 FGREP = @FGREP@
@@ -311,8 +313,9 @@
 GIO_LIBS = @GIO_LIBS@
 GIO_UNIX_CFLAGS = @GIO_UNIX_CFLAGS@
 GIO_UNIX_LIBS = @GIO_UNIX_LIBS@
+GLES2_CFLAGS = @GLES2_CFLAGS@
+GLES2_LIBS = @GLES2_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
-GLIB_COMPILE_SCHEMAS = @GLIB_COMPILE_SCHEMAS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
@@ -329,16 +332,17 @@
 GMODULE_NO_EXPORT_LIBS = @GMODULE_NO_EXPORT_LIBS@
 GMSGFMT = @GMSGFMT@
 GMSGFMT_015 = @GMSGFMT_015@
+GNUSTL_CFLAGS = @GNUSTL_CFLAGS@
+GNUSTL_LIBS = @GNUSTL_LIBS@
 GRAPHENE_CFLAGS = @GRAPHENE_CFLAGS@
 GRAPHENE_LIBS = @GRAPHENE_LIBS@
 GREP = @GREP@
-GSETTINGS_CFLAGS = @GSETTINGS_CFLAGS@
-GSETTINGS_DISABLE_SCHEMAS_COMPILE = @GSETTINGS_DISABLE_SCHEMAS_COMPILE@
-GSETTINGS_LIBS = @GSETTINGS_LIBS@
 GSM_LIBS = @GSM_LIBS@
 GSTPB_PLUGINS_DIR = @GSTPB_PLUGINS_DIR@
 GSTPB_PREFIX = @GSTPB_PREFIX@
 GST_AGE = @GST_AGE@
+GST_ALLOCATORS_CFLAGS = @GST_ALLOCATORS_CFLAGS@
+GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
 GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
 GST_API_VERSION = @GST_API_VERSION@
 GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
@@ -364,6 +368,8 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PBUTILS_CFLAGS = @GST_PBUTILS_CFLAGS@
+GST_PBUTILS_LIBS = @GST_PBUTILS_LIBS@
 GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BAD_CFLAGS = @GST_PLUGINS_BAD_CFLAGS@
@@ -389,6 +395,8 @@
 GST_PREFIX = @GST_PREFIX@
 GST_REVISION = @GST_REVISION@
 GST_TOOLS_DIR = @GST_TOOLS_DIR@
+GST_VIDEO_CFLAGS = @GST_VIDEO_CFLAGS@
+GST_VIDEO_LIBS = @GST_VIDEO_LIBS@
 GTK3_CFLAGS = @GTK3_CFLAGS@
 GTK3_GL_CFLAGS = @GTK3_GL_CFLAGS@
 GTK3_GL_LIBS = @GTK3_GL_LIBS@
@@ -490,6 +498,7 @@
 LTLIBICONV = @LTLIBICONV@
 LTLIBINTL = @LTLIBINTL@
 LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
 MANIFEST_TOOL = @MANIFEST_TOOL@
@@ -503,8 +512,6 @@
 MODPLUG_LIBS = @MODPLUG_LIBS@
 MPEG2ENC_CFLAGS = @MPEG2ENC_CFLAGS@
 MPEG2ENC_LIBS = @MPEG2ENC_LIBS@
-MPG123_CFLAGS = @MPG123_CFLAGS@
-MPG123_LIBS = @MPG123_LIBS@
 MPLEX_CFLAGS = @MPLEX_CFLAGS@
 MPLEX_LDFLAGS = @MPLEX_LDFLAGS@
 MPLEX_LIBS = @MPLEX_LIBS@
@@ -520,6 +527,8 @@
 NETTLE_LIBS = @NETTLE_LIBS@
 NM = @NM@
 NMEDIT = @NMEDIT@
+NVENCODE_CFLAGS = @NVENCODE_CFLAGS@
+NVENCODE_LIBS = @NVENCODE_LIBS@
 OBJC = @OBJC@
 OBJCDEPMODE = @OBJCDEPMODE@
 OBJCFLAGS = @OBJCFLAGS@
@@ -577,16 +586,18 @@
 PYTHON_PLATFORM = @PYTHON_PLATFORM@
 PYTHON_PREFIX = @PYTHON_PREFIX@
 PYTHON_VERSION = @PYTHON_VERSION@
+QT_ANDROID_CFLAGS = @QT_ANDROID_CFLAGS@
+QT_ANDROID_LIBS = @QT_ANDROID_LIBS@
 QT_CFLAGS = @QT_CFLAGS@
 QT_LIBS = @QT_LIBS@
+QT_MAC_CFLAGS = @QT_MAC_CFLAGS@
+QT_MAC_LIBS = @QT_MAC_LIBS@
 QT_WAYLAND_CFLAGS = @QT_WAYLAND_CFLAGS@
 QT_WAYLAND_LIBS = @QT_WAYLAND_LIBS@
 QT_X11_CFLAGS = @QT_X11_CFLAGS@
 QT_X11_LIBS = @QT_X11_LIBS@
 RANLIB = @RANLIB@
 RCC = @RCC@
-RSVG_2_36_2_CFLAGS = @RSVG_2_36_2_CFLAGS@
-RSVG_2_36_2_LIBS = @RSVG_2_36_2_LIBS@
 RSVG_CFLAGS = @RSVG_CFLAGS@
 RSVG_LIBS = @RSVG_LIBS@
 RTMP_CFLAGS = @RTMP_CFLAGS@
@@ -638,6 +649,7 @@
 VOAACENC_LIBS = @VOAACENC_LIBS@
 VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
 VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VULKAN_LIBS = @VULKAN_LIBS@
 WARNING_CFLAGS = @WARNING_CFLAGS@
 WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
 WARNING_OBJCFLAGS = @WARNING_OBJCFLAGS@
@@ -648,6 +660,7 @@
 WAYLAND_LIBS = @WAYLAND_LIBS@
 WEBP_CFLAGS = @WEBP_CFLAGS@
 WEBP_LIBS = @WEBP_LIBS@
+WGET = @WGET@
 WILDMIDI_CFLAGS = @WILDMIDI_CFLAGS@
 WILDMIDI_LIBS = @WILDMIDI_LIBS@
 WINKS_LIBS = @WINKS_LIBS@
@@ -657,6 +670,8 @@
 X11_LIBS = @X11_LIBS@
 X265_CFLAGS = @X265_CFLAGS@
 X265_LIBS = @X265_LIBS@
+XCB_CFLAGS = @XCB_CFLAGS@
+XCB_LIBS = @XCB_LIBS@
 XCOMPOSITE_CFLAGS = @XCOMPOSITE_CFLAGS@
 XCOMPOSITE_LIBS = @XCOMPOSITE_LIBS@
 XGETTEXT = @XGETTEXT@
@@ -694,7 +709,6 @@
 docdir = @docdir@
 dvidir = @dvidir@
 exec_prefix = @exec_prefix@
-gsettingsschemadir = @gsettingsschemadir@
 host = @host@
 host_alias = @host_alias@
 host_cpu = @host_cpu@
diff --git a/tests/check/Makefile.am b/tests/check/Makefile.am
index fbce4d7..3f9ad9d 100644
--- a/tests/check/Makefile.am
+++ b/tests/check/Makefile.am
@@ -9,15 +9,15 @@
 	GST_REGISTRY_1_0=$(CHECK_REGISTRY)
 
 # GST_PLUGINS_XYZ_DIR is only set in an uninstalled setup
-AM_TESTS_ENVIRONMENT = \
+AM_TESTS_ENVIRONMENT += \
 	$(REGISTRY_ENVIRONMENT)                                 \
 	GST_PLUGIN_SYSTEM_PATH_1_0=				\
 	GST_PLUGIN_PATH_1_0=$(top_builddir)/gst:$(top_builddir)/sys:$(top_builddir)/ext:$(GST_PLUGINS_LIBAV_DIR):$(GST_PLUGINS_UGLY_DIR):$(GST_PLUGINS_GOOD_DIR):$(GST_PLUGINS_BASE_DIR):$(GST_PLUGINS_DIR) \
 	GST_PLUGIN_LOADING_WHITELIST="gstreamer@$(GST_PLUGINS_DIR):gst-plugins-base@$(GSTPB_PLUGINS_DIR):gst-plugins-good:gst-plugins-ugly:gst-libav:gst-plugins-bad@$(top_builddir)" \
 	GST_STATE_IGNORE_ELEMENTS="apexsink avdtpsrc camerabin dc1394src \
 	    dccpclientsrc dccpclientsink dccpserversrc dccpserversink decklinksrc \
-	    decklinksink dtlssrtpdec dtlssrtpenc dvbsrc dvbbasebin dfbvideosink festival fluidsynth gsettingsvideosrc \
-	    gsettingsvideosink gsettingsaudiosrc gsettingsaudiosink linsyssdisrc linsyssdisink nassink \
+	    decklinksink dtlssrtpdec dtlssrtpenc dvbsrc dvbbasebin dfbvideosink festival fluidsynth \
+	    linsyssdisrc linsyssdisink nassink \
 	    rsndvdbin sdlaudiosink sdlvideosink vcdsrc rfbsrc vdpauyuvvideo vdpauvideoyuv \
 	    vdpaumpegdec vdpaumpeg4dec vdpauh264dec vdpauvideopostprocess vdpausink neonhttpsrc"
 
@@ -42,8 +42,10 @@
 
 if USE_DASH
 check_dash = elements/dash_mpd
+check_dash_demux = elements/dash_demux
 else
 check_dash =
+check_dash_demux =
 endif
 
 if USE_FAAC
@@ -82,18 +84,18 @@
 check_mpeg2enc =
 endif
 
-if USE_MPG123
-check_mpg123 = elements/mpg123audiodec
-else
-check_mpg123 =
-endif
-
 if USE_MPLEX
 check_mplex = elements/mplex
 else
 check_mplex =
 endif
 
+if USE_SMOOTHSTREAMING
+check_mssdemux = elements/mssdemux
+else
+check_mssdemux =
+endif
+
 if USE_NEON
 check_neon = elements/neonhttpsrc
 else
@@ -154,12 +156,6 @@
 check_opencv =
 endif
 
-if USE_OPUS
-check_opus = elements/opus
-else
-check_opus =
-endif
-
 if USE_SSH2
 check_curl_sftp = elements/curlsftpsink
 else
@@ -167,11 +163,19 @@
 endif
 
 if USE_HLS
-check_hlsdemux = elements/hlsdemux_m3u8
+check_hlsdemux_m3u8 = elements/hlsdemux_m3u8
+check_hlsdemux = elements/hls_demux
 else
+check_hlsdemux_m3u8 =
 check_hlsdemux =
 endif
 
+if WITH_GST_PLAYER_TESTS
+check_player = libs/player
+else
+check_player =
+endif
+
 if USE_CURL
 check_curl = elements/curlhttpsink \
 	elements/curlfilesink \
@@ -205,6 +209,8 @@
     libs/gstglmemory \
     libs/gstglupload \
     libs/gstglcolorconvert \
+    libs/gstglquery \
+    libs/gstglsl \
     elements/glimagesink
 else
 check_gl=
@@ -229,26 +235,27 @@
 	generic/states \
 	$(check_assrender) \
 	$(check_dash) \
+	$(check_dash_demux) \
 	$(check_faac)  \
 	$(check_faad)  \
 	$(check_voaacenc) \
 	$(check_voamrwbenc) \
 	$(check_mpeg2enc)  \
 	$(check_mplex)     \
+	$(check_mssdemux) \
 	$(check_ofa)        \
 	$(check_timidity)  \
 	$(check_kate)  \
 	$(check_opencv) \
-	$(check_opus)  \
 	$(check_curl) \
 	$(check_shm) \
 	elements/aiffparse \
+	elements/videoframe-audiolevel \
 	elements/autoconvert \
 	elements/autovideoconvert \
 	elements/audiointerleave \
 	elements/audiomixer \
 	elements/asfmux \
-	elements/baseaudiovisualizer \
 	elements/camerabin \
 	elements/dataurisrc \
 	elements/gdppay \
@@ -261,11 +268,12 @@
 	elements/mpegtsmux \
 	elements/mpegvideoparse \
 	elements/mpeg4videoparse \
-	$(check_mpg123) \
 	elements/mxfdemux \
 	elements/mxfmux \
+	elements/netsim \
 	elements/pcapparse \
-	elements/rtponvif \
+	elements/rtponvifparse \
+	elements/rtponviftimestamp \
 	elements/id3mux \
 	pipelines/mxf \
 	$(check_mimic) \
@@ -283,7 +291,9 @@
 	$(check_orc) \
 	libs/insertbin \
 	$(check_gl) \
+	$(check_hlsdemux_m3u8) \
 	$(check_hlsdemux) \
+	$(check_player) \
 	$(EXPERIMENTAL_CHECKS)
 
 noinst_HEADERS = elements/mxfdemux.h
@@ -369,6 +379,13 @@
 	$(GST_PLUGINS_BAD_LIBS) -lgstcodecparsers-@GST_API_VERSION@ \
 	$(GST_BASE_LIBS) $(GST_LIBS) $(LDADD)
 
+elements_videoframe_audiolevel_CFLAGS = \
+	$(GST_PLUGINS_BASE_CFLAGS) \
+	$(GST_BASE_CFLAGS) $(GST_CFLAGS) $(AM_CFLAGS)
+elements_videoframe_audiolevel_LDADD = \
+	$(GST_PLUGINS_BASE_LIBS) $(GST_BASE_LIBS) $(GST_LIBS) $(LDADD) \
+	-lgstaudio-@GST_API_VERSION@
+
 elements_faad_CFLAGS = \
 	$(GST_PLUGINS_BASE_CFLAGS) \
 	$(GST_BASE_CFLAGS) $(GST_CFLAGS) $(AM_CFLAGS)
@@ -398,15 +415,6 @@
 	$(GST_PLUGINS_BASE_LIBS) $(GST_BASE_LIBS) $(GST_LIBS) $(LDADD) \
 	-lgstaudio-@GST_API_VERSION@
 
-elements_baseaudiovisualizer_SOURCES = elements/baseaudiovisualizer.c
-elements_baseaudiovisualizer_CFLAGS = $(GST_PLUGINS_BAD_CFLAGS) \
-	$(GST_PLUGINS_BASE_CFLAGS) \
-	$(GST_BASE_CFLAGS) $(GST_CONTROLLER_CFLAGS) $(GST_CFLAGS) $(AM_CFLAGS)
-elements_baseaudiovisualizer_LDADD = \
-	$(GST_PLUGINS_BASE_LIBS) -lgstaudio-@GST_API_VERSION@  \
-	-lgstvideo-@GST_API_VERSION@ 	$(GST_BASE_LIBS) $(GST_CONTROLLER_LIBS) \
-	$(GST_LIBS) $(LDADD)
-
 elements_camerabin_CFLAGS = \
 	$(GST_PLUGINS_BAD_CFLAGS) $(GST_PLUGINS_BASE_CFLAGS) \
 	$(GST_BASE_CFLAGS) $(GST_CFLAGS) $(AM_CFLAGS) -DGST_USE_UNSTABLE_API
@@ -433,11 +441,6 @@
 elements_mpegtsmux_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_BASE_CFLAGS) $(AM_CFLAGS)
 elements_mpegtsmux_LDADD = $(GST_PLUGINS_BASE_LIBS) -lgstvideo-$(GST_API_VERSION) $(GST_BASE_LIBS) $(LDADD)
 
-elements_mpg123audiodec_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_BASE_CFLAGS) $(AM_CFLAGS)
-elements_mpg123audiodec_LDADD = \
-	$(GST_PLUGINS_BASE_LIBS) $(GST_BASE_LIBS) $(GST_LIBS) $(LDADD) \
-	-lgstaudio-@GST_API_VERSION@ -lgstfft-@GST_API_VERSION@ -lgstapp-@GST_API_VERSION@
-
 elements_uvch264demux_CFLAGS = -DUVCH264DEMUX_DATADIR="$(srcdir)/elements/uvch264demux_data" \
 				$(AM_CFLAGS)
 
@@ -446,6 +449,24 @@
 	$(top_builddir)/gst-libs/gst/uridownloader/libgsturidownloader-@GST_API_VERSION@.la
 elements_dash_mpd_SOURCES = elements/dash_mpd.c
 
+elements_dash_demux_CFLAGS = $(AM_CFLAGS) $(LIBXML2_CFLAGS) $(GST_PLUGINS_BASE_CFLAGS) $(GST_PLUGINS_BAD_CFLAGS)
+elements_dash_demux_LDADD = \
+	$(LDADD) $(LIBXML2_LIBS) $(GST_BASE_LIBS) \
+	-lgsttag-$(GST_API_VERSION) \
+	-lgstapp-$(GST_API_VERSION) \
+	$(top_builddir)/gst-libs/gst/adaptivedemux/libgstadaptivedemux-@GST_API_VERSION@.la
+
+elements_dash_demux_SOURCES = elements/test_http_src.c elements/test_http_src.h elements/adaptive_demux_engine.c elements/adaptive_demux_engine.h elements/adaptive_demux_common.c elements/adaptive_demux_common.h elements/dash_demux.c
+
+elements_mssdemux_CFLAGS = $(AM_CFLAGS) $(LIBXML2_CFLAGS) $(GST_PLUGINS_BASE_CFLAGS) $(GST_PLUGINS_BAD_CFLAGS)
+elements_mssdemux_LDADD = \
+	$(LDADD) $(LIBXML2_LIBS) $(GST_BASE_LIBS) \
+	-lgsttag-$(GST_API_VERSION) \
+	-lgstapp-$(GST_API_VERSION) \
+	$(top_builddir)/gst-libs/gst/adaptivedemux/libgstadaptivedemux-@GST_API_VERSION@.la
+
+elements_mssdemux_SOURCES = elements/test_http_src.c elements/test_http_src.h elements/adaptive_demux_engine.c elements/adaptive_demux_engine.h elements/adaptive_demux_common.c elements/adaptive_demux_common.h elements/mssdemux.c
+
 pipelines_streamheader_CFLAGS = $(GIO_CFLAGS) $(AM_CFLAGS)
 pipelines_streamheader_LDADD = $(GIO_LIBS) $(LDADD)
 
@@ -455,8 +476,41 @@
 libs_insertbin_CFLAGS = \
 	$(GST_PLUGINS_BAD_CFLAGS) $(GST_BASE_CFLAGS) $(GST_CFLAGS) $(AM_CFLAGS)
 
-elements_rtponvif_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_BASE_CFLAGS) $(AM_CFLAGS)
-elements_rtponvif_LDADD = $(GST_PLUGINS_BASE_LIBS) $(GST_BASE_LIBS) $(GST_LIBS) -lgstrtp-$(GST_API_VERSION) $(LDADD)
+libs_player_SOURCES = libs/player.c
+
+libs_player_LDADD = \
+	$(top_builddir)/gst-libs/gst/player/libgstplayer-@GST_API_VERSION@.la \
+	$(GST_PLUGINS_BASE_LIBS) $(GST_BASE_LIBS) $(GST_LIBS) $(LDADD)
+libs_player_CFLAGS = \
+	$(GST_PLUGINS_BAD_CFLAGS) $(GST_BASE_CFLAGS) $(GST_CFLAGS) $(AM_CFLAGS) \
+	-DTEST_PATH=\"$(builddir)/media\"
+
+if WITH_GST_PLAYER_TESTS
+PLAYER_MEDIA_FILES = \
+	media/audio.ogg \
+	media/audio-video.ogg \
+	media/audio-short.ogg \
+	media/audio-video-short.ogg \
+	media/sintel.mkv \
+	media/test_sub.srt
+
+$(PLAYER_MEDIA_FILES):
+	$(MKDIR_P) media
+	$(WGET) -c http://gstreamer.freedesktop.org/data/media/small/$(subst media/,,$@) -O media/$(subst media/,,$@)
+
+libs/player_dummy.c: $(PLAYER_MEDIA_FILES)
+	touch libs/player_dummy.c
+
+nodist_libs_player_SOURCES = libs/player_dummy.c
+
+CLEANFILES += $(PLAYER_MEDIA_FILES) libs/player_dummy.c
+endif
+
+elements_rtponvifparse_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_BASE_CFLAGS) $(AM_CFLAGS)
+elements_rtponvifparse_LDADD = $(GST_PLUGINS_BASE_LIBS) $(GST_BASE_LIBS) $(GST_LIBS) -lgstrtp-$(GST_API_VERSION) $(LDADD)
+
+elements_rtponviftimestamp_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_BASE_CFLAGS) $(AM_CFLAGS)
+elements_rtponviftimestamp_LDADD = $(GST_PLUGINS_BASE_LIBS) $(GST_BASE_LIBS) $(GST_LIBS) -lgstrtp-$(GST_API_VERSION) $(LDADD)
 
 EXTRA_DIST = gst-plugins-bad.supp $(uvch264_dist_data)
 
@@ -515,6 +569,24 @@
 	$(GST_PLUGINS_BASE_LIBS) -lgstvideo-$(GST_API_VERSION) \
 	$(GST_BASE_LIBS) $(GST_LIBS) $(LDADD)
 
+libs_gstglquery_LDADD = \
+	$(top_builddir)/gst-libs/gst/gl/libgstgl-@GST_API_VERSION@.la \
+	$(GST_PLUGINS_BASE_LIBS) $(GST_BASE_LIBS) $(GST_LIBS) $(LDADD)
+
+libs_gstglquery_CFLAGS = \
+	$(GST_PLUGINS_BAD_CFLAGS) $(GST_PLUGINS_BASE_CFLAGS) \
+	-DGST_USE_UNSTABLE_API \
+	$(GST_BASE_CFLAGS) $(GST_CFLAGS) $(AM_CFLAGS)
+
+libs_gstglsl_LDADD = \
+	$(top_builddir)/gst-libs/gst/gl/libgstgl-@GST_API_VERSION@.la \
+	$(GST_PLUGINS_BASE_LIBS) $(GST_BASE_LIBS) $(GST_LIBS) $(LDADD)
+
+libs_gstglsl_CFLAGS = \
+	$(GST_PLUGINS_BAD_CFLAGS) $(GST_PLUGINS_BASE_CFLAGS) \
+	-DGST_USE_UNSTABLE_API \
+	$(GST_BASE_CFLAGS) $(GST_CFLAGS) $(AM_CFLAGS)
+
 elements_glimagesink_CFLAGS = \
 	$(GST_PLUGINS_BAD_CFLAGS) $(GST_PLUGINS_BASE_CFLAGS) \
 	-DGST_USE_UNSTABLE_API \
@@ -546,6 +618,13 @@
 elements_hlsdemux_m3u8_LDADD = $(GST_BASE_LIBS) $(LDADD)
 elements_hlsdemux_m3u8_SOURCES = elements/hlsdemux_m3u8.c
 
+elements_hls_demux_CFLAGS = $(GST_BASE_CFLAGS) $(AM_CFLAGS) $(GST_PLUGINS_BASE_CFLAGS) $(GST_PLUGINS_BAD_CFLAGS)
+elements_hls_demux_LDADD = $(GST_BASE_LIBS) $(LDADD) \
+	-lgsttag-$(GST_API_VERSION) \
+	-lgstapp-$(GST_API_VERSION) \
+	$(top_builddir)/gst-libs/gst/adaptivedemux/libgstadaptivedemux-@GST_API_VERSION@.la
+elements_hls_demux_SOURCES = elements/test_http_src.c elements/test_http_src.h elements/adaptive_demux_engine.c elements/adaptive_demux_engine.h elements/adaptive_demux_common.c elements/adaptive_demux_common.h elements/hls_demux.c
+
 orc_compositor_CFLAGS = $(ORC_CFLAGS)
 orc_compositor_LDADD = $(ORC_LIBS) -lorc-test-0.4
 nodist_orc_compositor_SOURCES = orc/compositor.c
diff --git a/tests/check/Makefile.in b/tests/check/Makefile.in
index c20cbb0..3cc3ad9 100644
--- a/tests/check/Makefile.in
+++ b/tests/check/Makefile.in
@@ -91,34 +91,37 @@
 build_triplet = @build@
 host_triplet = @host@
 target_triplet = @target@
-noinst_PROGRAMS = pipelines/streamheader$(EXEEXT) $(am__EXEEXT_27)
+noinst_PROGRAMS = pipelines/streamheader$(EXEEXT) $(am__EXEEXT_29)
 check_PROGRAMS = generic/states$(EXEEXT) $(am__EXEEXT_1) \
 	$(am__EXEEXT_2) $(am__EXEEXT_3) $(am__EXEEXT_4) \
 	$(am__EXEEXT_5) $(am__EXEEXT_6) $(am__EXEEXT_7) \
 	$(am__EXEEXT_8) $(am__EXEEXT_9) $(am__EXEEXT_10) \
 	$(am__EXEEXT_11) $(am__EXEEXT_12) $(am__EXEEXT_13) \
-	$(am__EXEEXT_15) $(am__EXEEXT_16) elements/aiffparse$(EXEEXT) \
+	$(am__EXEEXT_14) $(am__EXEEXT_16) $(am__EXEEXT_17) \
+	elements/aiffparse$(EXEEXT) \
+	elements/videoframe-audiolevel$(EXEEXT) \
 	elements/autoconvert$(EXEEXT) \
 	elements/autovideoconvert$(EXEEXT) \
 	elements/audiointerleave$(EXEEXT) elements/audiomixer$(EXEEXT) \
-	elements/asfmux$(EXEEXT) elements/baseaudiovisualizer$(EXEEXT) \
-	elements/camerabin$(EXEEXT) elements/dataurisrc$(EXEEXT) \
-	elements/gdppay$(EXEEXT) elements/gdpdepay$(EXEEXT) \
-	elements/compositor$(EXEEXT) $(am__EXEEXT_17) \
-	elements/jpegparse$(EXEEXT) elements/h263parse$(EXEEXT) \
-	elements/h264parse$(EXEEXT) elements/mpegtsmux$(EXEEXT) \
-	elements/mpegvideoparse$(EXEEXT) \
-	elements/mpeg4videoparse$(EXEEXT) $(am__EXEEXT_18) \
-	elements/mxfdemux$(EXEEXT) elements/mxfmux$(EXEEXT) \
-	elements/pcapparse$(EXEEXT) elements/rtponvif$(EXEEXT) \
-	elements/id3mux$(EXEEXT) pipelines/mxf$(EXEEXT) \
-	$(am__EXEEXT_19) libs/mpegvideoparser$(EXEEXT) \
-	libs/mpegts$(EXEEXT) libs/h264parser$(EXEEXT) \
-	libs/vp8parser$(EXEEXT) libs/aggregator$(EXEEXT) \
-	$(am__EXEEXT_20) libs/vc1parser$(EXEEXT) $(am__EXEEXT_21) \
-	$(am__EXEEXT_22) elements/viewfinderbin$(EXEEXT) \
-	$(am__EXEEXT_23) $(am__EXEEXT_24) libs/insertbin$(EXEEXT) \
-	$(am__EXEEXT_25) $(am__EXEEXT_26)
+	elements/asfmux$(EXEEXT) elements/camerabin$(EXEEXT) \
+	elements/dataurisrc$(EXEEXT) elements/gdppay$(EXEEXT) \
+	elements/gdpdepay$(EXEEXT) elements/compositor$(EXEEXT) \
+	$(am__EXEEXT_18) elements/jpegparse$(EXEEXT) \
+	elements/h263parse$(EXEEXT) elements/h264parse$(EXEEXT) \
+	elements/mpegtsmux$(EXEEXT) elements/mpegvideoparse$(EXEEXT) \
+	elements/mpeg4videoparse$(EXEEXT) elements/mxfdemux$(EXEEXT) \
+	elements/mxfmux$(EXEEXT) elements/netsim$(EXEEXT) \
+	elements/pcapparse$(EXEEXT) elements/rtponvifparse$(EXEEXT) \
+	elements/rtponviftimestamp$(EXEEXT) elements/id3mux$(EXEEXT) \
+	pipelines/mxf$(EXEEXT) $(am__EXEEXT_19) \
+	libs/mpegvideoparser$(EXEEXT) libs/mpegts$(EXEEXT) \
+	libs/h264parser$(EXEEXT) libs/vp8parser$(EXEEXT) \
+	libs/aggregator$(EXEEXT) $(am__EXEEXT_20) \
+	libs/vc1parser$(EXEEXT) $(am__EXEEXT_21) $(am__EXEEXT_22) \
+	elements/viewfinderbin$(EXEEXT) $(am__EXEEXT_23) \
+	$(am__EXEEXT_24) libs/insertbin$(EXEEXT) $(am__EXEEXT_25) \
+	$(am__EXEEXT_26) $(am__EXEEXT_27) $(am__EXEEXT_28)
+@WITH_GST_PLAYER_TESTS_TRUE@am__append_1 = $(PLAYER_MEDIA_FILES) libs/player_dummy.c
 subdir = tests/check
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
 am__aclocal_m4_deps = $(top_srcdir)/common/m4/as-ac-expand.m4 \
@@ -145,16 +148,15 @@
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
 	$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
-	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gsettings.m4 \
-	$(top_srcdir)/m4/gst-fionread.m4 $(top_srcdir)/m4/gst-sdl.m4 \
-	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
-	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
-	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libgcrypt.m4 \
-	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
-	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
-	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
-	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
-	$(top_srcdir)/configure.ac
+	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gst-fionread.m4 \
+	$(top_srcdir)/m4/gst-sdl.m4 $(top_srcdir)/m4/iconv.m4 \
+	$(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \
+	$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
+	$(top_srcdir)/m4/libgcrypt.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
+	$(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \
@@ -177,25 +179,25 @@
 	$(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
 @USE_ASSRENDER_TRUE@am__EXEEXT_1 = elements/assrender$(EXEEXT)
 @USE_DASH_TRUE@am__EXEEXT_2 = elements/dash_mpd$(EXEEXT)
-@USE_FAAC_TRUE@am__EXEEXT_3 = elements/faac$(EXEEXT)
-@USE_FAAD_TRUE@am__EXEEXT_4 = elements/faad$(EXEEXT)
-@USE_VOAACENC_TRUE@am__EXEEXT_5 = elements/voaacenc$(EXEEXT)
-@USE_VOAMRWBENC_TRUE@am__EXEEXT_6 = elements/voamrwbenc$(EXEEXT)
-@USE_MPEG2ENC_TRUE@am__EXEEXT_7 = elements/mpeg2enc$(EXEEXT)
-@USE_MPLEX_TRUE@am__EXEEXT_8 = elements/mplex$(EXEEXT)
-@USE_OFA_TRUE@am__EXEEXT_9 = elements/ofa$(EXEEXT)
-@USE_TIMIDITY_TRUE@am__EXEEXT_10 = elements/timidity$(EXEEXT)
-@USE_KATE_TRUE@am__EXEEXT_11 = elements/kate$(EXEEXT)
-@USE_OPENCV_TRUE@am__EXEEXT_12 = elements/templatematch$(EXEEXT)
-@USE_OPUS_TRUE@am__EXEEXT_13 = elements/opus$(EXEEXT)
-@USE_SSH2_TRUE@am__EXEEXT_14 = elements/curlsftpsink$(EXEEXT)
-@USE_CURL_TRUE@am__EXEEXT_15 = elements/curlhttpsink$(EXEEXT) \
+@USE_DASH_TRUE@am__EXEEXT_3 = elements/dash_demux$(EXEEXT)
+@USE_FAAC_TRUE@am__EXEEXT_4 = elements/faac$(EXEEXT)
+@USE_FAAD_TRUE@am__EXEEXT_5 = elements/faad$(EXEEXT)
+@USE_VOAACENC_TRUE@am__EXEEXT_6 = elements/voaacenc$(EXEEXT)
+@USE_VOAMRWBENC_TRUE@am__EXEEXT_7 = elements/voamrwbenc$(EXEEXT)
+@USE_MPEG2ENC_TRUE@am__EXEEXT_8 = elements/mpeg2enc$(EXEEXT)
+@USE_MPLEX_TRUE@am__EXEEXT_9 = elements/mplex$(EXEEXT)
+@USE_SMOOTHSTREAMING_TRUE@am__EXEEXT_10 = elements/mssdemux$(EXEEXT)
+@USE_OFA_TRUE@am__EXEEXT_11 = elements/ofa$(EXEEXT)
+@USE_TIMIDITY_TRUE@am__EXEEXT_12 = elements/timidity$(EXEEXT)
+@USE_KATE_TRUE@am__EXEEXT_13 = elements/kate$(EXEEXT)
+@USE_OPENCV_TRUE@am__EXEEXT_14 = elements/templatematch$(EXEEXT)
+@USE_SSH2_TRUE@am__EXEEXT_15 = elements/curlsftpsink$(EXEEXT)
+@USE_CURL_TRUE@am__EXEEXT_16 = elements/curlhttpsink$(EXEEXT) \
 @USE_CURL_TRUE@	elements/curlfilesink$(EXEEXT) \
-@USE_CURL_TRUE@	elements/curlftpsink$(EXEEXT) $(am__EXEEXT_14) \
+@USE_CURL_TRUE@	elements/curlftpsink$(EXEEXT) $(am__EXEEXT_15) \
 @USE_CURL_TRUE@	elements/curlsmtpsink$(EXEEXT)
-@USE_SHM_TRUE@am__EXEEXT_16 = elements/shm$(EXEEXT)
-@USE_EXIF_TRUE@am__EXEEXT_17 = elements/jifmux$(EXEEXT)
-@USE_MPG123_TRUE@am__EXEEXT_18 = elements/mpg123audiodec$(EXEEXT)
+@USE_SHM_TRUE@am__EXEEXT_17 = elements/shm$(EXEEXT)
+@USE_EXIF_TRUE@am__EXEEXT_18 = elements/jifmux$(EXEEXT)
 @USE_MIMIC_TRUE@am__EXEEXT_19 = pipelines/mimic$(EXEEXT)
 @USE_UVCH264_TRUE@am__EXEEXT_20 = elements/uvch264demux$(EXEEXT)
 @USE_SCHRO_TRUE@am__EXEEXT_21 = elements/schroenc$(EXEEXT)
@@ -207,9 +209,12 @@
 @USE_GL_TRUE@	libs/gstglmemory$(EXEEXT) \
 @USE_GL_TRUE@	libs/gstglupload$(EXEEXT) \
 @USE_GL_TRUE@	libs/gstglcolorconvert$(EXEEXT) \
+@USE_GL_TRUE@	libs/gstglquery$(EXEEXT) libs/gstglsl$(EXEEXT) \
 @USE_GL_TRUE@	elements/glimagesink$(EXEEXT)
 @USE_HLS_TRUE@am__EXEEXT_26 = elements/hlsdemux_m3u8$(EXEEXT)
-@USE_NEON_TRUE@am__EXEEXT_27 = elements/neonhttpsrc$(EXEEXT)
+@USE_HLS_TRUE@am__EXEEXT_27 = elements/hls_demux$(EXEEXT)
+@WITH_GST_PLAYER_TESTS_TRUE@am__EXEEXT_28 = libs/player$(EXEEXT)
+@USE_NEON_TRUE@am__EXEEXT_29 = elements/neonhttpsrc$(EXEEXT)
 PROGRAMS = $(noinst_PROGRAMS)
 elements_aiffparse_SOURCES = elements/aiffparse.c
 elements_aiffparse_OBJECTS = elements/aiffparse.$(OBJEXT)
@@ -257,16 +262,6 @@
 	elements/autovideoconvert.$(OBJEXT)
 elements_autovideoconvert_LDADD = $(LDADD)
 elements_autovideoconvert_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am_elements_baseaudiovisualizer_OBJECTS = elements/elements_baseaudiovisualizer-baseaudiovisualizer.$(OBJEXT)
-elements_baseaudiovisualizer_OBJECTS =  \
-	$(am_elements_baseaudiovisualizer_OBJECTS)
-elements_baseaudiovisualizer_DEPENDENCIES = $(am__DEPENDENCIES_1) \
-	$(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
-	$(am__DEPENDENCIES_1) $(am__DEPENDENCIES_2)
-elements_baseaudiovisualizer_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
-	$(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
-	$(elements_baseaudiovisualizer_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
-	$(LDFLAGS) -o $@
 am_elements_camerabin_OBJECTS =  \
 	elements/elements_camerabin-camerabin.$(OBJEXT)
 elements_camerabin_OBJECTS = $(am_elements_camerabin_OBJECTS)
@@ -307,6 +302,19 @@
 elements_curlsmtpsink_OBJECTS = elements/curlsmtpsink.$(OBJEXT)
 elements_curlsmtpsink_LDADD = $(LDADD)
 elements_curlsmtpsink_DEPENDENCIES = $(am__DEPENDENCIES_1)
+am_elements_dash_demux_OBJECTS =  \
+	elements/elements_dash_demux-test_http_src.$(OBJEXT) \
+	elements/elements_dash_demux-adaptive_demux_engine.$(OBJEXT) \
+	elements/elements_dash_demux-adaptive_demux_common.$(OBJEXT) \
+	elements/elements_dash_demux-dash_demux.$(OBJEXT)
+elements_dash_demux_OBJECTS = $(am_elements_dash_demux_OBJECTS)
+elements_dash_demux_DEPENDENCIES = $(am__DEPENDENCIES_2) \
+	$(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
+	$(top_builddir)/gst-libs/gst/adaptivedemux/libgstadaptivedemux-@GST_API_VERSION@.la
+elements_dash_demux_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
+	$(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
+	$(elements_dash_demux_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
+	$(LDFLAGS) -o $@
 am_elements_dash_mpd_OBJECTS =  \
 	elements/elements_dash_mpd-dash_mpd.$(OBJEXT)
 elements_dash_mpd_OBJECTS = $(am_elements_dash_mpd_OBJECTS)
@@ -371,6 +379,19 @@
 elements_h264parse_SOURCES = elements/h264parse.c
 elements_h264parse_OBJECTS = elements/h264parse.$(OBJEXT)
 elements_h264parse_DEPENDENCIES = libparser.la $(am__DEPENDENCIES_2)
+am_elements_hls_demux_OBJECTS =  \
+	elements/elements_hls_demux-test_http_src.$(OBJEXT) \
+	elements/elements_hls_demux-adaptive_demux_engine.$(OBJEXT) \
+	elements/elements_hls_demux-adaptive_demux_common.$(OBJEXT) \
+	elements/elements_hls_demux-hls_demux.$(OBJEXT)
+elements_hls_demux_OBJECTS = $(am_elements_hls_demux_OBJECTS)
+elements_hls_demux_DEPENDENCIES = $(am__DEPENDENCIES_1) \
+	$(am__DEPENDENCIES_2) \
+	$(top_builddir)/gst-libs/gst/adaptivedemux/libgstadaptivedemux-@GST_API_VERSION@.la
+elements_hls_demux_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
+	$(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
+	$(elements_hls_demux_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
+	$(LDFLAGS) -o $@
 am_elements_hlsdemux_m3u8_OBJECTS =  \
 	elements/elements_hlsdemux_m3u8-hlsdemux_m3u8.$(OBJEXT)
 elements_hlsdemux_m3u8_OBJECTS = $(am_elements_hlsdemux_m3u8_OBJECTS)
@@ -426,20 +447,23 @@
 elements_mpegvideoparse_OBJECTS = elements/mpegvideoparse.$(OBJEXT)
 elements_mpegvideoparse_DEPENDENCIES = libparser.la \
 	$(am__DEPENDENCIES_2)
-elements_mpg123audiodec_SOURCES = elements/mpg123audiodec.c
-elements_mpg123audiodec_OBJECTS =  \
-	elements/elements_mpg123audiodec-mpg123audiodec.$(OBJEXT)
-elements_mpg123audiodec_DEPENDENCIES = $(am__DEPENDENCIES_1) \
-	$(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
-	$(am__DEPENDENCIES_2)
-elements_mpg123audiodec_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
-	$(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
-	$(elements_mpg123audiodec_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
-	$(LDFLAGS) -o $@
 elements_mplex_SOURCES = elements/mplex.c
 elements_mplex_OBJECTS = elements/mplex.$(OBJEXT)
 elements_mplex_LDADD = $(LDADD)
 elements_mplex_DEPENDENCIES = $(am__DEPENDENCIES_1)
+am_elements_mssdemux_OBJECTS =  \
+	elements/elements_mssdemux-test_http_src.$(OBJEXT) \
+	elements/elements_mssdemux-adaptive_demux_engine.$(OBJEXT) \
+	elements/elements_mssdemux-adaptive_demux_common.$(OBJEXT) \
+	elements/elements_mssdemux-mssdemux.$(OBJEXT)
+elements_mssdemux_OBJECTS = $(am_elements_mssdemux_OBJECTS)
+elements_mssdemux_DEPENDENCIES = $(am__DEPENDENCIES_2) \
+	$(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
+	$(top_builddir)/gst-libs/gst/adaptivedemux/libgstadaptivedemux-@GST_API_VERSION@.la
+elements_mssdemux_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
+	$(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
+	$(elements_mssdemux_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) \
+	-o $@
 elements_mxfdemux_SOURCES = elements/mxfdemux.c
 elements_mxfdemux_OBJECTS = elements/mxfdemux.$(OBJEXT)
 elements_mxfdemux_LDADD = $(LDADD)
@@ -452,27 +476,36 @@
 elements_neonhttpsrc_OBJECTS = elements/neonhttpsrc.$(OBJEXT)
 elements_neonhttpsrc_LDADD = $(LDADD)
 elements_neonhttpsrc_DEPENDENCIES = $(am__DEPENDENCIES_1)
+elements_netsim_SOURCES = elements/netsim.c
+elements_netsim_OBJECTS = elements/netsim.$(OBJEXT)
+elements_netsim_LDADD = $(LDADD)
+elements_netsim_DEPENDENCIES = $(am__DEPENDENCIES_1)
 elements_ofa_SOURCES = elements/ofa.c
 elements_ofa_OBJECTS = elements/ofa.$(OBJEXT)
 elements_ofa_LDADD = $(LDADD)
 elements_ofa_DEPENDENCIES = $(am__DEPENDENCIES_1)
-elements_opus_SOURCES = elements/opus.c
-elements_opus_OBJECTS = elements/opus.$(OBJEXT)
-elements_opus_LDADD = $(LDADD)
-elements_opus_DEPENDENCIES = $(am__DEPENDENCIES_1)
 elements_pcapparse_SOURCES = elements/pcapparse.c
 elements_pcapparse_OBJECTS = elements/pcapparse.$(OBJEXT)
 elements_pcapparse_DEPENDENCIES = libparser.la $(am__DEPENDENCIES_2)
-elements_rtponvif_SOURCES = elements/rtponvif.c
-elements_rtponvif_OBJECTS =  \
-	elements/elements_rtponvif-rtponvif.$(OBJEXT)
-elements_rtponvif_DEPENDENCIES = $(am__DEPENDENCIES_1) \
+elements_rtponvifparse_SOURCES = elements/rtponvifparse.c
+elements_rtponvifparse_OBJECTS =  \
+	elements/elements_rtponvifparse-rtponvifparse.$(OBJEXT)
+elements_rtponvifparse_DEPENDENCIES = $(am__DEPENDENCIES_1) \
 	$(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
 	$(am__DEPENDENCIES_2)
-elements_rtponvif_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
+elements_rtponvifparse_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
 	$(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
-	$(elements_rtponvif_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) \
-	-o $@
+	$(elements_rtponvifparse_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
+	$(LDFLAGS) -o $@
+elements_rtponviftimestamp_SOURCES = elements/rtponviftimestamp.c
+elements_rtponviftimestamp_OBJECTS = elements/elements_rtponviftimestamp-rtponviftimestamp.$(OBJEXT)
+elements_rtponviftimestamp_DEPENDENCIES = $(am__DEPENDENCIES_1) \
+	$(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
+	$(am__DEPENDENCIES_2)
+elements_rtponviftimestamp_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
+	$(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
+	$(elements_rtponviftimestamp_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
+	$(LDFLAGS) -o $@
 elements_schroenc_SOURCES = elements/schroenc.c
 elements_schroenc_OBJECTS = elements/schroenc.$(OBJEXT)
 elements_schroenc_LDADD = $(LDADD)
@@ -503,6 +536,16 @@
 	$(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
 	$(elements_uvch264demux_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
 	$(LDFLAGS) -o $@
+elements_videoframe_audiolevel_SOURCES =  \
+	elements/videoframe-audiolevel.c
+elements_videoframe_audiolevel_OBJECTS = elements/elements_videoframe_audiolevel-videoframe-audiolevel.$(OBJEXT)
+elements_videoframe_audiolevel_DEPENDENCIES = $(am__DEPENDENCIES_1) \
+	$(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
+	$(am__DEPENDENCIES_2)
+elements_videoframe_audiolevel_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
+	$(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
+	$(elements_videoframe_audiolevel_CFLAGS) $(CFLAGS) \
+	$(AM_LDFLAGS) $(LDFLAGS) -o $@
 elements_viewfinderbin_SOURCES = elements/viewfinderbin.c
 elements_viewfinderbin_OBJECTS = elements/viewfinderbin.$(OBJEXT)
 elements_viewfinderbin_LDADD = $(LDADD)
@@ -579,6 +622,25 @@
 	$(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
 	$(libs_gstglmemory_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) \
 	-o $@
+libs_gstglquery_SOURCES = libs/gstglquery.c
+libs_gstglquery_OBJECTS = libs/libs_gstglquery-gstglquery.$(OBJEXT)
+libs_gstglquery_DEPENDENCIES =  \
+	$(top_builddir)/gst-libs/gst/gl/libgstgl-@GST_API_VERSION@.la \
+	$(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
+	$(am__DEPENDENCIES_1) $(am__DEPENDENCIES_2)
+libs_gstglquery_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
+	$(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
+	$(libs_gstglquery_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) \
+	-o $@
+libs_gstglsl_SOURCES = libs/gstglsl.c
+libs_gstglsl_OBJECTS = libs/libs_gstglsl-gstglsl.$(OBJEXT)
+libs_gstglsl_DEPENDENCIES =  \
+	$(top_builddir)/gst-libs/gst/gl/libgstgl-@GST_API_VERSION@.la \
+	$(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
+	$(am__DEPENDENCIES_1) $(am__DEPENDENCIES_2)
+libs_gstglsl_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(libs_gstglsl_CFLAGS) \
+	$(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
 libs_gstglupload_SOURCES = libs/gstglupload.c
 libs_gstglupload_OBJECTS =  \
 	libs/libs_gstglupload-gstglupload.$(OBJEXT)
@@ -626,6 +688,16 @@
 	$(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
 	$(libs_mpegvideoparser_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
 	$(LDFLAGS) -o $@
+am_libs_player_OBJECTS = libs/libs_player-player.$(OBJEXT)
+@WITH_GST_PLAYER_TESTS_TRUE@nodist_libs_player_OBJECTS = libs/libs_player-player_dummy.$(OBJEXT)
+libs_player_OBJECTS = $(am_libs_player_OBJECTS) \
+	$(nodist_libs_player_OBJECTS)
+libs_player_DEPENDENCIES = $(top_builddir)/gst-libs/gst/player/libgstplayer-@GST_API_VERSION@.la \
+	$(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
+	$(am__DEPENDENCIES_1) $(am__DEPENDENCIES_2)
+libs_player_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(libs_player_CFLAGS) \
+	$(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
 libs_vc1parser_SOURCES = libs/vc1parser.c
 libs_vc1parser_OBJECTS = libs/libs_vc1parser-vc1parser.$(OBJEXT)
 libs_vc1parser_DEPENDENCIES = $(top_builddir)/gst-libs/gst/codecparsers/libgstcodecparsers-@GST_API_VERSION@.la \
@@ -721,60 +793,66 @@
 	elements/asfmux.c elements/assrender.c \
 	elements/audiointerleave.c elements/audiomixer.c \
 	elements/autoconvert.c elements/autovideoconvert.c \
-	$(elements_baseaudiovisualizer_SOURCES) \
 	$(elements_camerabin_SOURCES) elements/compositor.c \
 	elements/curlfilesink.c elements/curlftpsink.c \
 	elements/curlhttpsink.c elements/curlsftpsink.c \
-	elements/curlsmtpsink.c $(elements_dash_mpd_SOURCES) \
-	elements/dataurisrc.c elements/faac.c elements/faad.c \
-	elements/gdpdepay.c elements/gdppay.c elements/glimagesink.c \
-	elements/h263parse.c elements/h264parse.c \
+	elements/curlsmtpsink.c $(elements_dash_demux_SOURCES) \
+	$(elements_dash_mpd_SOURCES) elements/dataurisrc.c \
+	elements/faac.c elements/faad.c elements/gdpdepay.c \
+	elements/gdppay.c elements/glimagesink.c elements/h263parse.c \
+	elements/h264parse.c $(elements_hls_demux_SOURCES) \
 	$(elements_hlsdemux_m3u8_SOURCES) elements/id3mux.c \
 	$(elements_jifmux_SOURCES) elements/jpegparse.c \
 	elements/kate.c elements/mpeg2enc.c elements/mpeg4videoparse.c \
 	elements/mpegtsmux.c elements/mpegvideoparse.c \
-	elements/mpg123audiodec.c elements/mplex.c elements/mxfdemux.c \
-	elements/mxfmux.c elements/neonhttpsrc.c elements/ofa.c \
-	elements/opus.c elements/pcapparse.c elements/rtponvif.c \
+	elements/mplex.c $(elements_mssdemux_SOURCES) \
+	elements/mxfdemux.c elements/mxfmux.c elements/neonhttpsrc.c \
+	elements/netsim.c elements/ofa.c elements/pcapparse.c \
+	elements/rtponvifparse.c elements/rtponviftimestamp.c \
 	elements/schroenc.c elements/shm.c elements/templatematch.c \
 	elements/timidity.c elements/uvch264demux.c \
-	elements/viewfinderbin.c elements/voaacenc.c \
-	elements/voamrwbenc.c elements/x265enc.c elements/zbar.c \
-	generic/states.c libs/aggregator.c libs/gstglcolorconvert.c \
-	libs/gstglcontext.c libs/gstglmemory.c libs/gstglupload.c \
-	libs/h264parser.c libs/insertbin.c libs/mpegts.c \
-	libs/mpegvideoparser.c libs/vc1parser.c libs/vp8parser.c \
-	$(nodist_orc_audiomixer_SOURCES) $(nodist_orc_bayer_SOURCES) \
-	$(nodist_orc_compositor_SOURCES) pipelines/mimic.c \
-	pipelines/mxf.c pipelines/streamheader.c
+	elements/videoframe-audiolevel.c elements/viewfinderbin.c \
+	elements/voaacenc.c elements/voamrwbenc.c elements/x265enc.c \
+	elements/zbar.c generic/states.c libs/aggregator.c \
+	libs/gstglcolorconvert.c libs/gstglcontext.c \
+	libs/gstglmemory.c libs/gstglquery.c libs/gstglsl.c \
+	libs/gstglupload.c libs/h264parser.c libs/insertbin.c \
+	libs/mpegts.c libs/mpegvideoparser.c $(libs_player_SOURCES) \
+	$(nodist_libs_player_SOURCES) libs/vc1parser.c \
+	libs/vp8parser.c $(nodist_orc_audiomixer_SOURCES) \
+	$(nodist_orc_bayer_SOURCES) $(nodist_orc_compositor_SOURCES) \
+	pipelines/mimic.c pipelines/mxf.c pipelines/streamheader.c
 DIST_SOURCES = $(libparser_la_SOURCES) elements/aiffparse.c \
 	elements/asfmux.c elements/assrender.c \
 	elements/audiointerleave.c elements/audiomixer.c \
 	elements/autoconvert.c elements/autovideoconvert.c \
-	$(elements_baseaudiovisualizer_SOURCES) \
 	$(elements_camerabin_SOURCES) elements/compositor.c \
 	elements/curlfilesink.c elements/curlftpsink.c \
 	elements/curlhttpsink.c elements/curlsftpsink.c \
-	elements/curlsmtpsink.c $(elements_dash_mpd_SOURCES) \
-	elements/dataurisrc.c elements/faac.c elements/faad.c \
-	elements/gdpdepay.c elements/gdppay.c elements/glimagesink.c \
-	elements/h263parse.c elements/h264parse.c \
+	elements/curlsmtpsink.c $(elements_dash_demux_SOURCES) \
+	$(elements_dash_mpd_SOURCES) elements/dataurisrc.c \
+	elements/faac.c elements/faad.c elements/gdpdepay.c \
+	elements/gdppay.c elements/glimagesink.c elements/h263parse.c \
+	elements/h264parse.c $(elements_hls_demux_SOURCES) \
 	$(elements_hlsdemux_m3u8_SOURCES) elements/id3mux.c \
 	$(elements_jifmux_SOURCES) elements/jpegparse.c \
 	elements/kate.c elements/mpeg2enc.c elements/mpeg4videoparse.c \
 	elements/mpegtsmux.c elements/mpegvideoparse.c \
-	elements/mpg123audiodec.c elements/mplex.c elements/mxfdemux.c \
-	elements/mxfmux.c elements/neonhttpsrc.c elements/ofa.c \
-	elements/opus.c elements/pcapparse.c elements/rtponvif.c \
+	elements/mplex.c $(elements_mssdemux_SOURCES) \
+	elements/mxfdemux.c elements/mxfmux.c elements/neonhttpsrc.c \
+	elements/netsim.c elements/ofa.c elements/pcapparse.c \
+	elements/rtponvifparse.c elements/rtponviftimestamp.c \
 	elements/schroenc.c elements/shm.c elements/templatematch.c \
 	elements/timidity.c elements/uvch264demux.c \
-	elements/viewfinderbin.c elements/voaacenc.c \
-	elements/voamrwbenc.c elements/x265enc.c elements/zbar.c \
-	generic/states.c libs/aggregator.c libs/gstglcolorconvert.c \
-	libs/gstglcontext.c libs/gstglmemory.c libs/gstglupload.c \
-	libs/h264parser.c libs/insertbin.c libs/mpegts.c \
-	libs/mpegvideoparser.c libs/vc1parser.c libs/vp8parser.c \
-	pipelines/mimic.c pipelines/mxf.c pipelines/streamheader.c
+	elements/videoframe-audiolevel.c elements/viewfinderbin.c \
+	elements/voaacenc.c elements/voamrwbenc.c elements/x265enc.c \
+	elements/zbar.c generic/states.c libs/aggregator.c \
+	libs/gstglcolorconvert.c libs/gstglcontext.c \
+	libs/gstglmemory.c libs/gstglquery.c libs/gstglsl.c \
+	libs/gstglupload.c libs/h264parser.c libs/insertbin.c \
+	libs/mpegts.c libs/mpegvideoparser.c $(libs_player_SOURCES) \
+	libs/vc1parser.c libs/vp8parser.c pipelines/mimic.c \
+	pipelines/mxf.c pipelines/streamheader.c
 am__can_run_installinfo = \
   case $$AM_UPDATE_INFO_DIR in \
     n|no|NO) false;; \
@@ -1042,6 +1120,8 @@
 CLUTTER_X11_LIBS = @CLUTTER_X11_LIBS@
 CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
+CUDA_CFLAGS = @CUDA_CFLAGS@
+CUDA_LIBS = @CUDA_LIBS@
 CURL_CFLAGS = @CURL_CFLAGS@
 CURL_LIBS = @CURL_LIBS@
 CXX = @CXX@
@@ -1079,6 +1159,8 @@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
+EGL_CFLAGS = @EGL_CFLAGS@
+EGL_LIBS = @EGL_LIBS@
 EGREP = @EGREP@
 ERROR_CFLAGS = @ERROR_CFLAGS@
 ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
@@ -1087,7 +1169,6 @@
 EXIF_CFLAGS = @EXIF_CFLAGS@
 EXIF_LIBS = @EXIF_LIBS@
 FAAC_LIBS = @FAAC_LIBS@
-FAAD_IS_NEAAC = @FAAD_IS_NEAAC@
 FAAD_LIBS = @FAAD_LIBS@
 FFLAGS = @FFLAGS@
 FGREP = @FGREP@
@@ -1106,8 +1187,9 @@
 GIO_LIBS = @GIO_LIBS@
 GIO_UNIX_CFLAGS = @GIO_UNIX_CFLAGS@
 GIO_UNIX_LIBS = @GIO_UNIX_LIBS@
+GLES2_CFLAGS = @GLES2_CFLAGS@
+GLES2_LIBS = @GLES2_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
-GLIB_COMPILE_SCHEMAS = @GLIB_COMPILE_SCHEMAS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
@@ -1124,16 +1206,17 @@
 GMODULE_NO_EXPORT_LIBS = @GMODULE_NO_EXPORT_LIBS@
 GMSGFMT = @GMSGFMT@
 GMSGFMT_015 = @GMSGFMT_015@
+GNUSTL_CFLAGS = @GNUSTL_CFLAGS@
+GNUSTL_LIBS = @GNUSTL_LIBS@
 GRAPHENE_CFLAGS = @GRAPHENE_CFLAGS@
 GRAPHENE_LIBS = @GRAPHENE_LIBS@
 GREP = @GREP@
-GSETTINGS_CFLAGS = @GSETTINGS_CFLAGS@
-GSETTINGS_DISABLE_SCHEMAS_COMPILE = @GSETTINGS_DISABLE_SCHEMAS_COMPILE@
-GSETTINGS_LIBS = @GSETTINGS_LIBS@
 GSM_LIBS = @GSM_LIBS@
 GSTPB_PLUGINS_DIR = @GSTPB_PLUGINS_DIR@
 GSTPB_PREFIX = @GSTPB_PREFIX@
 GST_AGE = @GST_AGE@
+GST_ALLOCATORS_CFLAGS = @GST_ALLOCATORS_CFLAGS@
+GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
 GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
 GST_API_VERSION = @GST_API_VERSION@
 GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
@@ -1159,6 +1242,8 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PBUTILS_CFLAGS = @GST_PBUTILS_CFLAGS@
+GST_PBUTILS_LIBS = @GST_PBUTILS_LIBS@
 GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BAD_CFLAGS = @GST_PLUGINS_BAD_CFLAGS@
@@ -1184,6 +1269,8 @@
 GST_PREFIX = @GST_PREFIX@
 GST_REVISION = @GST_REVISION@
 GST_TOOLS_DIR = $(top_builddir)/tools
+GST_VIDEO_CFLAGS = @GST_VIDEO_CFLAGS@
+GST_VIDEO_LIBS = @GST_VIDEO_LIBS@
 GTK3_CFLAGS = @GTK3_CFLAGS@
 GTK3_GL_CFLAGS = @GTK3_GL_CFLAGS@
 GTK3_GL_LIBS = @GTK3_GL_LIBS@
@@ -1285,6 +1372,7 @@
 LTLIBICONV = @LTLIBICONV@
 LTLIBINTL = @LTLIBINTL@
 LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
 MANIFEST_TOOL = @MANIFEST_TOOL@
@@ -1298,8 +1386,6 @@
 MODPLUG_LIBS = @MODPLUG_LIBS@
 MPEG2ENC_CFLAGS = @MPEG2ENC_CFLAGS@
 MPEG2ENC_LIBS = @MPEG2ENC_LIBS@
-MPG123_CFLAGS = @MPG123_CFLAGS@
-MPG123_LIBS = @MPG123_LIBS@
 MPLEX_CFLAGS = @MPLEX_CFLAGS@
 MPLEX_LDFLAGS = @MPLEX_LDFLAGS@
 MPLEX_LIBS = @MPLEX_LIBS@
@@ -1315,6 +1401,8 @@
 NETTLE_LIBS = @NETTLE_LIBS@
 NM = @NM@
 NMEDIT = @NMEDIT@
+NVENCODE_CFLAGS = @NVENCODE_CFLAGS@
+NVENCODE_LIBS = @NVENCODE_LIBS@
 OBJC = @OBJC@
 OBJCDEPMODE = @OBJCDEPMODE@
 OBJCFLAGS = @OBJCFLAGS@
@@ -1372,16 +1460,18 @@
 PYTHON_PLATFORM = @PYTHON_PLATFORM@
 PYTHON_PREFIX = @PYTHON_PREFIX@
 PYTHON_VERSION = @PYTHON_VERSION@
+QT_ANDROID_CFLAGS = @QT_ANDROID_CFLAGS@
+QT_ANDROID_LIBS = @QT_ANDROID_LIBS@
 QT_CFLAGS = @QT_CFLAGS@
 QT_LIBS = @QT_LIBS@
+QT_MAC_CFLAGS = @QT_MAC_CFLAGS@
+QT_MAC_LIBS = @QT_MAC_LIBS@
 QT_WAYLAND_CFLAGS = @QT_WAYLAND_CFLAGS@
 QT_WAYLAND_LIBS = @QT_WAYLAND_LIBS@
 QT_X11_CFLAGS = @QT_X11_CFLAGS@
 QT_X11_LIBS = @QT_X11_LIBS@
 RANLIB = @RANLIB@
 RCC = @RCC@
-RSVG_2_36_2_CFLAGS = @RSVG_2_36_2_CFLAGS@
-RSVG_2_36_2_LIBS = @RSVG_2_36_2_LIBS@
 RSVG_CFLAGS = @RSVG_CFLAGS@
 RSVG_LIBS = @RSVG_LIBS@
 RTMP_CFLAGS = @RTMP_CFLAGS@
@@ -1433,6 +1523,7 @@
 VOAACENC_LIBS = @VOAACENC_LIBS@
 VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
 VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VULKAN_LIBS = @VULKAN_LIBS@
 WARNING_CFLAGS = @WARNING_CFLAGS@
 WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
 WARNING_OBJCFLAGS = @WARNING_OBJCFLAGS@
@@ -1443,6 +1534,7 @@
 WAYLAND_LIBS = @WAYLAND_LIBS@
 WEBP_CFLAGS = @WEBP_CFLAGS@
 WEBP_LIBS = @WEBP_LIBS@
+WGET = @WGET@
 WILDMIDI_CFLAGS = @WILDMIDI_CFLAGS@
 WILDMIDI_LIBS = @WILDMIDI_LIBS@
 WINKS_LIBS = @WINKS_LIBS@
@@ -1452,6 +1544,8 @@
 X11_LIBS = @X11_LIBS@
 X265_CFLAGS = @X265_CFLAGS@
 X265_LIBS = @X265_LIBS@
+XCB_CFLAGS = @XCB_CFLAGS@
+XCB_LIBS = @XCB_LIBS@
 XCOMPOSITE_CFLAGS = @XCOMPOSITE_CFLAGS@
 XCOMPOSITE_LIBS = @XCOMPOSITE_LIBS@
 XGETTEXT = @XGETTEXT@
@@ -1489,7 +1583,6 @@
 docdir = @docdir@
 dvidir = @dvidir@
 exec_prefix = @exec_prefix@
-gsettingsschemadir = @gsettingsschemadir@
 host = @host@
 host_alias = @host_alias@
 host_cpu = @host_cpu@
@@ -1530,6 +1623,20 @@
 top_srcdir = @top_srcdir@
 wayland_scanner = @wayland_scanner@
 
+# GST_PLUGINS_XYZ_DIR is only set in an uninstalled setup
+AM_TESTS_ENVIRONMENT = CK_DEFAULT_TIMEOUT=20 $(REGISTRY_ENVIRONMENT) \
+	GST_PLUGIN_SYSTEM_PATH_1_0= \
+	GST_PLUGIN_PATH_1_0=$(top_builddir)/gst:$(top_builddir)/sys:$(top_builddir)/ext:$(GST_PLUGINS_LIBAV_DIR):$(GST_PLUGINS_UGLY_DIR):$(GST_PLUGINS_GOOD_DIR):$(GST_PLUGINS_BASE_DIR):$(GST_PLUGINS_DIR) \
+	GST_PLUGIN_LOADING_WHITELIST="gstreamer@$(GST_PLUGINS_DIR):gst-plugins-base@$(GSTPB_PLUGINS_DIR):gst-plugins-good:gst-plugins-ugly:gst-libav:gst-plugins-bad@$(top_builddir)" \
+	GST_STATE_IGNORE_ELEMENTS="apexsink avdtpsrc camerabin \
+	dc1394src dccpclientsrc dccpclientsink dccpserversrc \
+	dccpserversink decklinksrc decklinksink dtlssrtpdec \
+	dtlssrtpenc dvbsrc dvbbasebin dfbvideosink festival fluidsynth \
+	linsyssdisrc linsyssdisink nassink rsndvdbin sdlaudiosink \
+	sdlvideosink vcdsrc rfbsrc vdpauyuvvideo vdpauvideoyuv \
+	vdpaumpegdec vdpaumpeg4dec vdpauh264dec vdpauvideopostprocess \
+	vdpausink neonhttpsrc"
+
 # inspect every plugin feature
 GST_INSPECT = $(GST_TOOLS_DIR)/gst-inspect-$(GST_API_VERSION)
 CHECK_REGISTRY = $(top_builddir)/tests/check/test-registry.reg
@@ -1538,27 +1645,15 @@
 	GST_REGISTRY_1_0=$(CHECK_REGISTRY)
 
 
-# GST_PLUGINS_XYZ_DIR is only set in an uninstalled setup
-AM_TESTS_ENVIRONMENT = \
-	$(REGISTRY_ENVIRONMENT)                                 \
-	GST_PLUGIN_SYSTEM_PATH_1_0=				\
-	GST_PLUGIN_PATH_1_0=$(top_builddir)/gst:$(top_builddir)/sys:$(top_builddir)/ext:$(GST_PLUGINS_LIBAV_DIR):$(GST_PLUGINS_UGLY_DIR):$(GST_PLUGINS_GOOD_DIR):$(GST_PLUGINS_BASE_DIR):$(GST_PLUGINS_DIR) \
-	GST_PLUGIN_LOADING_WHITELIST="gstreamer@$(GST_PLUGINS_DIR):gst-plugins-base@$(GSTPB_PLUGINS_DIR):gst-plugins-good:gst-plugins-ugly:gst-libav:gst-plugins-bad@$(top_builddir)" \
-	GST_STATE_IGNORE_ELEMENTS="apexsink avdtpsrc camerabin dc1394src \
-	    dccpclientsrc dccpclientsink dccpserversrc dccpserversink decklinksrc \
-	    decklinksink dtlssrtpdec dtlssrtpenc dvbsrc dvbbasebin dfbvideosink festival fluidsynth gsettingsvideosrc \
-	    gsettingsvideosink gsettingsaudiosrc gsettingsaudiosink linsyssdisrc linsyssdisink nassink \
-	    rsndvdbin sdlaudiosink sdlvideosink vcdsrc rfbsrc vdpauyuvvideo vdpauvideoyuv \
-	    vdpaumpegdec vdpaumpeg4dec vdpauh264dec vdpauvideopostprocess vdpausink neonhttpsrc"
-
-
 # the core dumps of some machines have PIDs appended
-CLEANFILES = core.* test-registry.*
+CLEANFILES = core.* test-registry.* $(am__append_1)
 SUPPRESSIONS = $(top_srcdir)/common/gst.supp $(srcdir)/gst-plugins-bad.supp
 @USE_ASSRENDER_FALSE@check_assrender = 
 @USE_ASSRENDER_TRUE@check_assrender = elements/assrender
 @USE_DASH_FALSE@check_dash = 
 @USE_DASH_TRUE@check_dash = elements/dash_mpd
+@USE_DASH_FALSE@check_dash_demux = 
+@USE_DASH_TRUE@check_dash_demux = elements/dash_demux
 @USE_FAAC_FALSE@check_faac = 
 @USE_FAAC_TRUE@check_faac = elements/faac
 @USE_FAAD_FALSE@check_faad = 
@@ -1571,10 +1666,10 @@
 @USE_EXIF_TRUE@check_jifmux = elements/jifmux
 @USE_MPEG2ENC_FALSE@check_mpeg2enc = 
 @USE_MPEG2ENC_TRUE@check_mpeg2enc = elements/mpeg2enc
-@USE_MPG123_FALSE@check_mpg123 = 
-@USE_MPG123_TRUE@check_mpg123 = elements/mpg123audiodec
 @USE_MPLEX_FALSE@check_mplex = 
 @USE_MPLEX_TRUE@check_mplex = elements/mplex
+@USE_SMOOTHSTREAMING_FALSE@check_mssdemux = 
+@USE_SMOOTHSTREAMING_TRUE@check_mssdemux = elements/mssdemux
 @USE_NEON_FALSE@check_neon = 
 @USE_NEON_TRUE@check_neon = elements/neonhttpsrc
 @USE_OFA_FALSE@check_ofa = 
@@ -1595,12 +1690,14 @@
 @USE_ZBAR_TRUE@check_zbar = elements/zbar
 @USE_OPENCV_FALSE@check_opencv = 
 @USE_OPENCV_TRUE@check_opencv = elements/templatematch
-@USE_OPUS_FALSE@check_opus = 
-@USE_OPUS_TRUE@check_opus = elements/opus
 @USE_SSH2_FALSE@check_curl_sftp = 
 @USE_SSH2_TRUE@check_curl_sftp = elements/curlsftpsink
+@USE_HLS_FALSE@check_hlsdemux_m3u8 = 
+@USE_HLS_TRUE@check_hlsdemux_m3u8 = elements/hlsdemux_m3u8
 @USE_HLS_FALSE@check_hlsdemux = 
-@USE_HLS_TRUE@check_hlsdemux = elements/hlsdemux_m3u8
+@USE_HLS_TRUE@check_hlsdemux = elements/hls_demux
+@WITH_GST_PLAYER_TESTS_FALSE@check_player = 
+@WITH_GST_PLAYER_TESTS_TRUE@check_player = libs/player
 @USE_CURL_FALSE@check_curl = 
 @USE_CURL_TRUE@check_curl = elements/curlhttpsink \
 @USE_CURL_TRUE@	elements/curlfilesink \
@@ -1624,6 +1721,8 @@
 @USE_GL_TRUE@    libs/gstglmemory \
 @USE_GL_TRUE@    libs/gstglupload \
 @USE_GL_TRUE@    libs/gstglcolorconvert \
+@USE_GL_TRUE@    libs/gstglquery \
+@USE_GL_TRUE@    libs/gstglsl \
 @USE_GL_TRUE@    elements/glimagesink
 
 VALGRIND_TO_FIX = \
@@ -1710,6 +1809,14 @@
 	$(GST_PLUGINS_BAD_LIBS) -lgstcodecparsers-@GST_API_VERSION@ \
 	$(GST_BASE_LIBS) $(GST_LIBS) $(LDADD)
 
+elements_videoframe_audiolevel_CFLAGS = \
+	$(GST_PLUGINS_BASE_CFLAGS) \
+	$(GST_BASE_CFLAGS) $(GST_CFLAGS) $(AM_CFLAGS)
+
+elements_videoframe_audiolevel_LDADD = \
+	$(GST_PLUGINS_BASE_LIBS) $(GST_BASE_LIBS) $(GST_LIBS) $(LDADD) \
+	-lgstaudio-@GST_API_VERSION@
+
 elements_faad_CFLAGS = \
 	$(GST_PLUGINS_BASE_CFLAGS) \
 	$(GST_BASE_CFLAGS) $(GST_CFLAGS) $(AM_CFLAGS)
@@ -1742,16 +1849,6 @@
 	$(GST_PLUGINS_BASE_LIBS) $(GST_BASE_LIBS) $(GST_LIBS) $(LDADD) \
 	-lgstaudio-@GST_API_VERSION@
 
-elements_baseaudiovisualizer_SOURCES = elements/baseaudiovisualizer.c
-elements_baseaudiovisualizer_CFLAGS = $(GST_PLUGINS_BAD_CFLAGS) \
-	$(GST_PLUGINS_BASE_CFLAGS) \
-	$(GST_BASE_CFLAGS) $(GST_CONTROLLER_CFLAGS) $(GST_CFLAGS) $(AM_CFLAGS)
-
-elements_baseaudiovisualizer_LDADD = \
-	$(GST_PLUGINS_BASE_LIBS) -lgstaudio-@GST_API_VERSION@  \
-	-lgstvideo-@GST_API_VERSION@ 	$(GST_BASE_LIBS) $(GST_CONTROLLER_LIBS) \
-	$(GST_LIBS) $(LDADD)
-
 elements_camerabin_CFLAGS = \
 	$(GST_PLUGINS_BAD_CFLAGS) $(GST_PLUGINS_BASE_CFLAGS) \
 	$(GST_BASE_CFLAGS) $(GST_CFLAGS) $(AM_CFLAGS) -DGST_USE_UNSTABLE_API
@@ -1774,11 +1871,6 @@
 elements_assrender_LDADD = $(GST_PLUGINS_BASE_LIBS) -lgstvideo-$(GST_API_VERSION) -lgstapp-$(GST_API_VERSION) $(GST_BASE_LIBS) $(LDADD)
 elements_mpegtsmux_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_BASE_CFLAGS) $(AM_CFLAGS)
 elements_mpegtsmux_LDADD = $(GST_PLUGINS_BASE_LIBS) -lgstvideo-$(GST_API_VERSION) $(GST_BASE_LIBS) $(LDADD)
-elements_mpg123audiodec_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_BASE_CFLAGS) $(AM_CFLAGS)
-elements_mpg123audiodec_LDADD = \
-	$(GST_PLUGINS_BASE_LIBS) $(GST_BASE_LIBS) $(GST_LIBS) $(LDADD) \
-	-lgstaudio-@GST_API_VERSION@ -lgstfft-@GST_API_VERSION@ -lgstapp-@GST_API_VERSION@
-
 elements_uvch264demux_CFLAGS = -DUVCH264DEMUX_DATADIR="$(srcdir)/elements/uvch264demux_data" \
 				$(AM_CFLAGS)
 
@@ -1787,6 +1879,22 @@
 	$(top_builddir)/gst-libs/gst/uridownloader/libgsturidownloader-@GST_API_VERSION@.la
 
 elements_dash_mpd_SOURCES = elements/dash_mpd.c
+elements_dash_demux_CFLAGS = $(AM_CFLAGS) $(LIBXML2_CFLAGS) $(GST_PLUGINS_BASE_CFLAGS) $(GST_PLUGINS_BAD_CFLAGS)
+elements_dash_demux_LDADD = \
+	$(LDADD) $(LIBXML2_LIBS) $(GST_BASE_LIBS) \
+	-lgsttag-$(GST_API_VERSION) \
+	-lgstapp-$(GST_API_VERSION) \
+	$(top_builddir)/gst-libs/gst/adaptivedemux/libgstadaptivedemux-@GST_API_VERSION@.la
+
+elements_dash_demux_SOURCES = elements/test_http_src.c elements/test_http_src.h elements/adaptive_demux_engine.c elements/adaptive_demux_engine.h elements/adaptive_demux_common.c elements/adaptive_demux_common.h elements/dash_demux.c
+elements_mssdemux_CFLAGS = $(AM_CFLAGS) $(LIBXML2_CFLAGS) $(GST_PLUGINS_BASE_CFLAGS) $(GST_PLUGINS_BAD_CFLAGS)
+elements_mssdemux_LDADD = \
+	$(LDADD) $(LIBXML2_LIBS) $(GST_BASE_LIBS) \
+	-lgsttag-$(GST_API_VERSION) \
+	-lgstapp-$(GST_API_VERSION) \
+	$(top_builddir)/gst-libs/gst/adaptivedemux/libgstadaptivedemux-@GST_API_VERSION@.la
+
+elements_mssdemux_SOURCES = elements/test_http_src.c elements/test_http_src.h elements/adaptive_demux_engine.c elements/adaptive_demux_engine.h elements/adaptive_demux_common.c elements/adaptive_demux_common.h elements/mssdemux.c
 pipelines_streamheader_CFLAGS = $(GIO_CFLAGS) $(AM_CFLAGS)
 pipelines_streamheader_LDADD = $(GIO_LIBS) $(LDADD)
 libs_insertbin_LDADD = \
@@ -1796,8 +1904,28 @@
 libs_insertbin_CFLAGS = \
 	$(GST_PLUGINS_BAD_CFLAGS) $(GST_BASE_CFLAGS) $(GST_CFLAGS) $(AM_CFLAGS)
 
-elements_rtponvif_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_BASE_CFLAGS) $(AM_CFLAGS)
-elements_rtponvif_LDADD = $(GST_PLUGINS_BASE_LIBS) $(GST_BASE_LIBS) $(GST_LIBS) -lgstrtp-$(GST_API_VERSION) $(LDADD)
+libs_player_SOURCES = libs/player.c
+libs_player_LDADD = \
+	$(top_builddir)/gst-libs/gst/player/libgstplayer-@GST_API_VERSION@.la \
+	$(GST_PLUGINS_BASE_LIBS) $(GST_BASE_LIBS) $(GST_LIBS) $(LDADD)
+
+libs_player_CFLAGS = \
+	$(GST_PLUGINS_BAD_CFLAGS) $(GST_BASE_CFLAGS) $(GST_CFLAGS) $(AM_CFLAGS) \
+	-DTEST_PATH=\"$(builddir)/media\"
+
+@WITH_GST_PLAYER_TESTS_TRUE@PLAYER_MEDIA_FILES = \
+@WITH_GST_PLAYER_TESTS_TRUE@	media/audio.ogg \
+@WITH_GST_PLAYER_TESTS_TRUE@	media/audio-video.ogg \
+@WITH_GST_PLAYER_TESTS_TRUE@	media/audio-short.ogg \
+@WITH_GST_PLAYER_TESTS_TRUE@	media/audio-video-short.ogg \
+@WITH_GST_PLAYER_TESTS_TRUE@	media/sintel.mkv \
+@WITH_GST_PLAYER_TESTS_TRUE@	media/test_sub.srt
+
+@WITH_GST_PLAYER_TESTS_TRUE@nodist_libs_player_SOURCES = libs/player_dummy.c
+elements_rtponvifparse_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_BASE_CFLAGS) $(AM_CFLAGS)
+elements_rtponvifparse_LDADD = $(GST_PLUGINS_BASE_LIBS) $(GST_BASE_LIBS) $(GST_LIBS) -lgstrtp-$(GST_API_VERSION) $(LDADD)
+elements_rtponviftimestamp_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_BASE_CFLAGS) $(AM_CFLAGS)
+elements_rtponviftimestamp_LDADD = $(GST_PLUGINS_BASE_LIBS) $(GST_BASE_LIBS) $(GST_LIBS) -lgstrtp-$(GST_API_VERSION) $(LDADD)
 EXTRA_DIST = gst-plugins-bad.supp $(uvch264_dist_data)
 orc_bayer_CFLAGS = $(ORC_CFLAGS)
 orc_bayer_LDADD = $(ORC_LIBS) -lorc-test-0.4
@@ -1844,6 +1972,24 @@
 	$(GST_PLUGINS_BASE_LIBS) -lgstvideo-$(GST_API_VERSION) \
 	$(GST_BASE_LIBS) $(GST_LIBS) $(LDADD)
 
+libs_gstglquery_LDADD = \
+	$(top_builddir)/gst-libs/gst/gl/libgstgl-@GST_API_VERSION@.la \
+	$(GST_PLUGINS_BASE_LIBS) $(GST_BASE_LIBS) $(GST_LIBS) $(LDADD)
+
+libs_gstglquery_CFLAGS = \
+	$(GST_PLUGINS_BAD_CFLAGS) $(GST_PLUGINS_BASE_CFLAGS) \
+	-DGST_USE_UNSTABLE_API \
+	$(GST_BASE_CFLAGS) $(GST_CFLAGS) $(AM_CFLAGS)
+
+libs_gstglsl_LDADD = \
+	$(top_builddir)/gst-libs/gst/gl/libgstgl-@GST_API_VERSION@.la \
+	$(GST_PLUGINS_BASE_LIBS) $(GST_BASE_LIBS) $(GST_LIBS) $(LDADD)
+
+libs_gstglsl_CFLAGS = \
+	$(GST_PLUGINS_BAD_CFLAGS) $(GST_PLUGINS_BASE_CFLAGS) \
+	-DGST_USE_UNSTABLE_API \
+	$(GST_BASE_CFLAGS) $(GST_CFLAGS) $(AM_CFLAGS)
+
 elements_glimagesink_CFLAGS = \
 	$(GST_PLUGINS_BAD_CFLAGS) $(GST_PLUGINS_BASE_CFLAGS) \
 	-DGST_USE_UNSTABLE_API \
@@ -1875,6 +2021,13 @@
 elements_hlsdemux_m3u8_CFLAGS = $(GST_BASE_CFLAGS) $(AM_CFLAGS) -I$(top_srcdir)/ext/hls
 elements_hlsdemux_m3u8_LDADD = $(GST_BASE_LIBS) $(LDADD)
 elements_hlsdemux_m3u8_SOURCES = elements/hlsdemux_m3u8.c
+elements_hls_demux_CFLAGS = $(GST_BASE_CFLAGS) $(AM_CFLAGS) $(GST_PLUGINS_BASE_CFLAGS) $(GST_PLUGINS_BAD_CFLAGS)
+elements_hls_demux_LDADD = $(GST_BASE_LIBS) $(LDADD) \
+	-lgsttag-$(GST_API_VERSION) \
+	-lgstapp-$(GST_API_VERSION) \
+	$(top_builddir)/gst-libs/gst/adaptivedemux/libgstadaptivedemux-@GST_API_VERSION@.la
+
+elements_hls_demux_SOURCES = elements/test_http_src.c elements/test_http_src.h elements/adaptive_demux_engine.c elements/adaptive_demux_engine.h elements/adaptive_demux_common.c elements/adaptive_demux_common.h elements/hls_demux.c
 orc_compositor_CFLAGS = $(ORC_CFLAGS)
 orc_compositor_LDADD = $(ORC_LIBS) -lorc-test-0.4
 nodist_orc_compositor_SOURCES = orc/compositor.c
@@ -1995,12 +2148,6 @@
 elements/autovideoconvert$(EXEEXT): $(elements_autovideoconvert_OBJECTS) $(elements_autovideoconvert_DEPENDENCIES) $(EXTRA_elements_autovideoconvert_DEPENDENCIES) elements/$(am__dirstamp)
 	@rm -f elements/autovideoconvert$(EXEEXT)
 	$(AM_V_CCLD)$(LINK) $(elements_autovideoconvert_OBJECTS) $(elements_autovideoconvert_LDADD) $(LIBS)
-elements/elements_baseaudiovisualizer-baseaudiovisualizer.$(OBJEXT):  \
-	elements/$(am__dirstamp) elements/$(DEPDIR)/$(am__dirstamp)
-
-elements/baseaudiovisualizer$(EXEEXT): $(elements_baseaudiovisualizer_OBJECTS) $(elements_baseaudiovisualizer_DEPENDENCIES) $(EXTRA_elements_baseaudiovisualizer_DEPENDENCIES) elements/$(am__dirstamp)
-	@rm -f elements/baseaudiovisualizer$(EXEEXT)
-	$(AM_V_CCLD)$(elements_baseaudiovisualizer_LINK) $(elements_baseaudiovisualizer_OBJECTS) $(elements_baseaudiovisualizer_LDADD) $(LIBS)
 elements/elements_camerabin-camerabin.$(OBJEXT):  \
 	elements/$(am__dirstamp) elements/$(DEPDIR)/$(am__dirstamp)
 
@@ -2043,6 +2190,18 @@
 elements/curlsmtpsink$(EXEEXT): $(elements_curlsmtpsink_OBJECTS) $(elements_curlsmtpsink_DEPENDENCIES) $(EXTRA_elements_curlsmtpsink_DEPENDENCIES) elements/$(am__dirstamp)
 	@rm -f elements/curlsmtpsink$(EXEEXT)
 	$(AM_V_CCLD)$(LINK) $(elements_curlsmtpsink_OBJECTS) $(elements_curlsmtpsink_LDADD) $(LIBS)
+elements/elements_dash_demux-test_http_src.$(OBJEXT):  \
+	elements/$(am__dirstamp) elements/$(DEPDIR)/$(am__dirstamp)
+elements/elements_dash_demux-adaptive_demux_engine.$(OBJEXT):  \
+	elements/$(am__dirstamp) elements/$(DEPDIR)/$(am__dirstamp)
+elements/elements_dash_demux-adaptive_demux_common.$(OBJEXT):  \
+	elements/$(am__dirstamp) elements/$(DEPDIR)/$(am__dirstamp)
+elements/elements_dash_demux-dash_demux.$(OBJEXT):  \
+	elements/$(am__dirstamp) elements/$(DEPDIR)/$(am__dirstamp)
+
+elements/dash_demux$(EXEEXT): $(elements_dash_demux_OBJECTS) $(elements_dash_demux_DEPENDENCIES) $(EXTRA_elements_dash_demux_DEPENDENCIES) elements/$(am__dirstamp)
+	@rm -f elements/dash_demux$(EXEEXT)
+	$(AM_V_CCLD)$(elements_dash_demux_LINK) $(elements_dash_demux_OBJECTS) $(elements_dash_demux_LDADD) $(LIBS)
 elements/elements_dash_mpd-dash_mpd.$(OBJEXT):  \
 	elements/$(am__dirstamp) elements/$(DEPDIR)/$(am__dirstamp)
 
@@ -2097,6 +2256,18 @@
 elements/h264parse$(EXEEXT): $(elements_h264parse_OBJECTS) $(elements_h264parse_DEPENDENCIES) $(EXTRA_elements_h264parse_DEPENDENCIES) elements/$(am__dirstamp)
 	@rm -f elements/h264parse$(EXEEXT)
 	$(AM_V_CCLD)$(LINK) $(elements_h264parse_OBJECTS) $(elements_h264parse_LDADD) $(LIBS)
+elements/elements_hls_demux-test_http_src.$(OBJEXT):  \
+	elements/$(am__dirstamp) elements/$(DEPDIR)/$(am__dirstamp)
+elements/elements_hls_demux-adaptive_demux_engine.$(OBJEXT):  \
+	elements/$(am__dirstamp) elements/$(DEPDIR)/$(am__dirstamp)
+elements/elements_hls_demux-adaptive_demux_common.$(OBJEXT):  \
+	elements/$(am__dirstamp) elements/$(DEPDIR)/$(am__dirstamp)
+elements/elements_hls_demux-hls_demux.$(OBJEXT):  \
+	elements/$(am__dirstamp) elements/$(DEPDIR)/$(am__dirstamp)
+
+elements/hls_demux$(EXEEXT): $(elements_hls_demux_OBJECTS) $(elements_hls_demux_DEPENDENCIES) $(EXTRA_elements_hls_demux_DEPENDENCIES) elements/$(am__dirstamp)
+	@rm -f elements/hls_demux$(EXEEXT)
+	$(AM_V_CCLD)$(elements_hls_demux_LINK) $(elements_hls_demux_OBJECTS) $(elements_hls_demux_LDADD) $(LIBS)
 elements/elements_hlsdemux_m3u8-hlsdemux_m3u8.$(OBJEXT):  \
 	elements/$(am__dirstamp) elements/$(DEPDIR)/$(am__dirstamp)
 
@@ -2151,18 +2322,24 @@
 elements/mpegvideoparse$(EXEEXT): $(elements_mpegvideoparse_OBJECTS) $(elements_mpegvideoparse_DEPENDENCIES) $(EXTRA_elements_mpegvideoparse_DEPENDENCIES) elements/$(am__dirstamp)
 	@rm -f elements/mpegvideoparse$(EXEEXT)
 	$(AM_V_CCLD)$(LINK) $(elements_mpegvideoparse_OBJECTS) $(elements_mpegvideoparse_LDADD) $(LIBS)
-elements/elements_mpg123audiodec-mpg123audiodec.$(OBJEXT):  \
-	elements/$(am__dirstamp) elements/$(DEPDIR)/$(am__dirstamp)
-
-elements/mpg123audiodec$(EXEEXT): $(elements_mpg123audiodec_OBJECTS) $(elements_mpg123audiodec_DEPENDENCIES) $(EXTRA_elements_mpg123audiodec_DEPENDENCIES) elements/$(am__dirstamp)
-	@rm -f elements/mpg123audiodec$(EXEEXT)
-	$(AM_V_CCLD)$(elements_mpg123audiodec_LINK) $(elements_mpg123audiodec_OBJECTS) $(elements_mpg123audiodec_LDADD) $(LIBS)
 elements/mplex.$(OBJEXT): elements/$(am__dirstamp) \
 	elements/$(DEPDIR)/$(am__dirstamp)
 
 elements/mplex$(EXEEXT): $(elements_mplex_OBJECTS) $(elements_mplex_DEPENDENCIES) $(EXTRA_elements_mplex_DEPENDENCIES) elements/$(am__dirstamp)
 	@rm -f elements/mplex$(EXEEXT)
 	$(AM_V_CCLD)$(LINK) $(elements_mplex_OBJECTS) $(elements_mplex_LDADD) $(LIBS)
+elements/elements_mssdemux-test_http_src.$(OBJEXT):  \
+	elements/$(am__dirstamp) elements/$(DEPDIR)/$(am__dirstamp)
+elements/elements_mssdemux-adaptive_demux_engine.$(OBJEXT):  \
+	elements/$(am__dirstamp) elements/$(DEPDIR)/$(am__dirstamp)
+elements/elements_mssdemux-adaptive_demux_common.$(OBJEXT):  \
+	elements/$(am__dirstamp) elements/$(DEPDIR)/$(am__dirstamp)
+elements/elements_mssdemux-mssdemux.$(OBJEXT):  \
+	elements/$(am__dirstamp) elements/$(DEPDIR)/$(am__dirstamp)
+
+elements/mssdemux$(EXEEXT): $(elements_mssdemux_OBJECTS) $(elements_mssdemux_DEPENDENCIES) $(EXTRA_elements_mssdemux_DEPENDENCIES) elements/$(am__dirstamp)
+	@rm -f elements/mssdemux$(EXEEXT)
+	$(AM_V_CCLD)$(elements_mssdemux_LINK) $(elements_mssdemux_OBJECTS) $(elements_mssdemux_LDADD) $(LIBS)
 elements/mxfdemux.$(OBJEXT): elements/$(am__dirstamp) \
 	elements/$(DEPDIR)/$(am__dirstamp)
 
@@ -2181,30 +2358,36 @@
 elements/neonhttpsrc$(EXEEXT): $(elements_neonhttpsrc_OBJECTS) $(elements_neonhttpsrc_DEPENDENCIES) $(EXTRA_elements_neonhttpsrc_DEPENDENCIES) elements/$(am__dirstamp)
 	@rm -f elements/neonhttpsrc$(EXEEXT)
 	$(AM_V_CCLD)$(LINK) $(elements_neonhttpsrc_OBJECTS) $(elements_neonhttpsrc_LDADD) $(LIBS)
+elements/netsim.$(OBJEXT): elements/$(am__dirstamp) \
+	elements/$(DEPDIR)/$(am__dirstamp)
+
+elements/netsim$(EXEEXT): $(elements_netsim_OBJECTS) $(elements_netsim_DEPENDENCIES) $(EXTRA_elements_netsim_DEPENDENCIES) elements/$(am__dirstamp)
+	@rm -f elements/netsim$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(elements_netsim_OBJECTS) $(elements_netsim_LDADD) $(LIBS)
 elements/ofa.$(OBJEXT): elements/$(am__dirstamp) \
 	elements/$(DEPDIR)/$(am__dirstamp)
 
 elements/ofa$(EXEEXT): $(elements_ofa_OBJECTS) $(elements_ofa_DEPENDENCIES) $(EXTRA_elements_ofa_DEPENDENCIES) elements/$(am__dirstamp)
 	@rm -f elements/ofa$(EXEEXT)
 	$(AM_V_CCLD)$(LINK) $(elements_ofa_OBJECTS) $(elements_ofa_LDADD) $(LIBS)
-elements/opus.$(OBJEXT): elements/$(am__dirstamp) \
-	elements/$(DEPDIR)/$(am__dirstamp)
-
-elements/opus$(EXEEXT): $(elements_opus_OBJECTS) $(elements_opus_DEPENDENCIES) $(EXTRA_elements_opus_DEPENDENCIES) elements/$(am__dirstamp)
-	@rm -f elements/opus$(EXEEXT)
-	$(AM_V_CCLD)$(LINK) $(elements_opus_OBJECTS) $(elements_opus_LDADD) $(LIBS)
 elements/pcapparse.$(OBJEXT): elements/$(am__dirstamp) \
 	elements/$(DEPDIR)/$(am__dirstamp)
 
 elements/pcapparse$(EXEEXT): $(elements_pcapparse_OBJECTS) $(elements_pcapparse_DEPENDENCIES) $(EXTRA_elements_pcapparse_DEPENDENCIES) elements/$(am__dirstamp)
 	@rm -f elements/pcapparse$(EXEEXT)
 	$(AM_V_CCLD)$(LINK) $(elements_pcapparse_OBJECTS) $(elements_pcapparse_LDADD) $(LIBS)
-elements/elements_rtponvif-rtponvif.$(OBJEXT):  \
+elements/elements_rtponvifparse-rtponvifparse.$(OBJEXT):  \
 	elements/$(am__dirstamp) elements/$(DEPDIR)/$(am__dirstamp)
 
-elements/rtponvif$(EXEEXT): $(elements_rtponvif_OBJECTS) $(elements_rtponvif_DEPENDENCIES) $(EXTRA_elements_rtponvif_DEPENDENCIES) elements/$(am__dirstamp)
-	@rm -f elements/rtponvif$(EXEEXT)
-	$(AM_V_CCLD)$(elements_rtponvif_LINK) $(elements_rtponvif_OBJECTS) $(elements_rtponvif_LDADD) $(LIBS)
+elements/rtponvifparse$(EXEEXT): $(elements_rtponvifparse_OBJECTS) $(elements_rtponvifparse_DEPENDENCIES) $(EXTRA_elements_rtponvifparse_DEPENDENCIES) elements/$(am__dirstamp)
+	@rm -f elements/rtponvifparse$(EXEEXT)
+	$(AM_V_CCLD)$(elements_rtponvifparse_LINK) $(elements_rtponvifparse_OBJECTS) $(elements_rtponvifparse_LDADD) $(LIBS)
+elements/elements_rtponviftimestamp-rtponviftimestamp.$(OBJEXT):  \
+	elements/$(am__dirstamp) elements/$(DEPDIR)/$(am__dirstamp)
+
+elements/rtponviftimestamp$(EXEEXT): $(elements_rtponviftimestamp_OBJECTS) $(elements_rtponviftimestamp_DEPENDENCIES) $(EXTRA_elements_rtponviftimestamp_DEPENDENCIES) elements/$(am__dirstamp)
+	@rm -f elements/rtponviftimestamp$(EXEEXT)
+	$(AM_V_CCLD)$(elements_rtponviftimestamp_LINK) $(elements_rtponviftimestamp_OBJECTS) $(elements_rtponviftimestamp_LDADD) $(LIBS)
 elements/schroenc.$(OBJEXT): elements/$(am__dirstamp) \
 	elements/$(DEPDIR)/$(am__dirstamp)
 
@@ -2235,6 +2418,12 @@
 elements/uvch264demux$(EXEEXT): $(elements_uvch264demux_OBJECTS) $(elements_uvch264demux_DEPENDENCIES) $(EXTRA_elements_uvch264demux_DEPENDENCIES) elements/$(am__dirstamp)
 	@rm -f elements/uvch264demux$(EXEEXT)
 	$(AM_V_CCLD)$(elements_uvch264demux_LINK) $(elements_uvch264demux_OBJECTS) $(elements_uvch264demux_LDADD) $(LIBS)
+elements/elements_videoframe_audiolevel-videoframe-audiolevel.$(OBJEXT):  \
+	elements/$(am__dirstamp) elements/$(DEPDIR)/$(am__dirstamp)
+
+elements/videoframe-audiolevel$(EXEEXT): $(elements_videoframe_audiolevel_OBJECTS) $(elements_videoframe_audiolevel_DEPENDENCIES) $(EXTRA_elements_videoframe_audiolevel_DEPENDENCIES) elements/$(am__dirstamp)
+	@rm -f elements/videoframe-audiolevel$(EXEEXT)
+	$(AM_V_CCLD)$(elements_videoframe_audiolevel_LINK) $(elements_videoframe_audiolevel_OBJECTS) $(elements_videoframe_audiolevel_LDADD) $(LIBS)
 elements/viewfinderbin.$(OBJEXT): elements/$(am__dirstamp) \
 	elements/$(DEPDIR)/$(am__dirstamp)
 
@@ -2307,6 +2496,18 @@
 libs/gstglmemory$(EXEEXT): $(libs_gstglmemory_OBJECTS) $(libs_gstglmemory_DEPENDENCIES) $(EXTRA_libs_gstglmemory_DEPENDENCIES) libs/$(am__dirstamp)
 	@rm -f libs/gstglmemory$(EXEEXT)
 	$(AM_V_CCLD)$(libs_gstglmemory_LINK) $(libs_gstglmemory_OBJECTS) $(libs_gstglmemory_LDADD) $(LIBS)
+libs/libs_gstglquery-gstglquery.$(OBJEXT): libs/$(am__dirstamp) \
+	libs/$(DEPDIR)/$(am__dirstamp)
+
+libs/gstglquery$(EXEEXT): $(libs_gstglquery_OBJECTS) $(libs_gstglquery_DEPENDENCIES) $(EXTRA_libs_gstglquery_DEPENDENCIES) libs/$(am__dirstamp)
+	@rm -f libs/gstglquery$(EXEEXT)
+	$(AM_V_CCLD)$(libs_gstglquery_LINK) $(libs_gstglquery_OBJECTS) $(libs_gstglquery_LDADD) $(LIBS)
+libs/libs_gstglsl-gstglsl.$(OBJEXT): libs/$(am__dirstamp) \
+	libs/$(DEPDIR)/$(am__dirstamp)
+
+libs/gstglsl$(EXEEXT): $(libs_gstglsl_OBJECTS) $(libs_gstglsl_DEPENDENCIES) $(EXTRA_libs_gstglsl_DEPENDENCIES) libs/$(am__dirstamp)
+	@rm -f libs/gstglsl$(EXEEXT)
+	$(AM_V_CCLD)$(libs_gstglsl_LINK) $(libs_gstglsl_OBJECTS) $(libs_gstglsl_LDADD) $(LIBS)
 libs/libs_gstglupload-gstglupload.$(OBJEXT): libs/$(am__dirstamp) \
 	libs/$(DEPDIR)/$(am__dirstamp)
 
@@ -2337,6 +2538,14 @@
 libs/mpegvideoparser$(EXEEXT): $(libs_mpegvideoparser_OBJECTS) $(libs_mpegvideoparser_DEPENDENCIES) $(EXTRA_libs_mpegvideoparser_DEPENDENCIES) libs/$(am__dirstamp)
 	@rm -f libs/mpegvideoparser$(EXEEXT)
 	$(AM_V_CCLD)$(libs_mpegvideoparser_LINK) $(libs_mpegvideoparser_OBJECTS) $(libs_mpegvideoparser_LDADD) $(LIBS)
+libs/libs_player-player.$(OBJEXT): libs/$(am__dirstamp) \
+	libs/$(DEPDIR)/$(am__dirstamp)
+libs/libs_player-player_dummy.$(OBJEXT): libs/$(am__dirstamp) \
+	libs/$(DEPDIR)/$(am__dirstamp)
+
+libs/player$(EXEEXT): $(libs_player_OBJECTS) $(libs_player_DEPENDENCIES) $(EXTRA_libs_player_DEPENDENCIES) libs/$(am__dirstamp)
+	@rm -f libs/player$(EXEEXT)
+	$(AM_V_CCLD)$(libs_player_LINK) $(libs_player_OBJECTS) $(libs_player_LDADD) $(LIBS)
 libs/libs_vc1parser-vc1parser.$(OBJEXT): libs/$(am__dirstamp) \
 	libs/$(DEPDIR)/$(am__dirstamp)
 
@@ -2423,23 +2632,35 @@
 @AMDEP_TRUE@@am__include@ @am__quote@elements/$(DEPDIR)/elements_assrender-assrender.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@elements/$(DEPDIR)/elements_audiointerleave-audiointerleave.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@elements/$(DEPDIR)/elements_audiomixer-audiomixer.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@elements/$(DEPDIR)/elements_baseaudiovisualizer-baseaudiovisualizer.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@elements/$(DEPDIR)/elements_camerabin-camerabin.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@elements/$(DEPDIR)/elements_compositor-compositor.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@elements/$(DEPDIR)/elements_dash_demux-adaptive_demux_common.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@elements/$(DEPDIR)/elements_dash_demux-adaptive_demux_engine.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@elements/$(DEPDIR)/elements_dash_demux-dash_demux.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@elements/$(DEPDIR)/elements_dash_demux-test_http_src.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@elements/$(DEPDIR)/elements_dash_mpd-dash_mpd.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@elements/$(DEPDIR)/elements_faac-faac.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@elements/$(DEPDIR)/elements_faad-faad.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@elements/$(DEPDIR)/elements_gdpdepay-gdpdepay.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@elements/$(DEPDIR)/elements_gdppay-gdppay.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@elements/$(DEPDIR)/elements_glimagesink-glimagesink.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@elements/$(DEPDIR)/elements_hls_demux-adaptive_demux_common.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@elements/$(DEPDIR)/elements_hls_demux-adaptive_demux_engine.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@elements/$(DEPDIR)/elements_hls_demux-hls_demux.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@elements/$(DEPDIR)/elements_hls_demux-test_http_src.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@elements/$(DEPDIR)/elements_hlsdemux_m3u8-hlsdemux_m3u8.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@elements/$(DEPDIR)/elements_jifmux-jifmux.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@elements/$(DEPDIR)/elements_kate-kate.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@elements/$(DEPDIR)/elements_mpegtsmux-mpegtsmux.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@elements/$(DEPDIR)/elements_mpg123audiodec-mpg123audiodec.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@elements/$(DEPDIR)/elements_rtponvif-rtponvif.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@elements/$(DEPDIR)/elements_mssdemux-adaptive_demux_common.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@elements/$(DEPDIR)/elements_mssdemux-adaptive_demux_engine.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@elements/$(DEPDIR)/elements_mssdemux-mssdemux.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@elements/$(DEPDIR)/elements_mssdemux-test_http_src.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@elements/$(DEPDIR)/elements_rtponvifparse-rtponvifparse.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@elements/$(DEPDIR)/elements_rtponviftimestamp-rtponviftimestamp.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@elements/$(DEPDIR)/elements_timidity-timidity.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@elements/$(DEPDIR)/elements_uvch264demux-uvch264demux.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@elements/$(DEPDIR)/elements_videoframe_audiolevel-videoframe-audiolevel.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@elements/$(DEPDIR)/elements_voaacenc-voaacenc.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@elements/$(DEPDIR)/h263parse.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@elements/$(DEPDIR)/h264parse.Po@am__quote@
@@ -2453,8 +2674,8 @@
 @AMDEP_TRUE@@am__include@ @am__quote@elements/$(DEPDIR)/mxfdemux.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@elements/$(DEPDIR)/mxfmux.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@elements/$(DEPDIR)/neonhttpsrc.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@elements/$(DEPDIR)/netsim.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@elements/$(DEPDIR)/ofa.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@elements/$(DEPDIR)/opus.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@elements/$(DEPDIR)/pcapparse.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@elements/$(DEPDIR)/schroenc.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@elements/$(DEPDIR)/shm.Po@am__quote@
@@ -2468,11 +2689,15 @@
 @AMDEP_TRUE@@am__include@ @am__quote@libs/$(DEPDIR)/libs_gstglcolorconvert-gstglcolorconvert.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@libs/$(DEPDIR)/libs_gstglcontext-gstglcontext.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@libs/$(DEPDIR)/libs_gstglmemory-gstglmemory.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@libs/$(DEPDIR)/libs_gstglquery-gstglquery.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@libs/$(DEPDIR)/libs_gstglsl-gstglsl.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@libs/$(DEPDIR)/libs_gstglupload-gstglupload.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@libs/$(DEPDIR)/libs_h264parser-h264parser.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@libs/$(DEPDIR)/libs_insertbin-insertbin.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@libs/$(DEPDIR)/libs_mpegts-mpegts.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@libs/$(DEPDIR)/libs_mpegvideoparser-mpegvideoparser.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@libs/$(DEPDIR)/libs_player-player.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@libs/$(DEPDIR)/libs_player-player_dummy.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@libs/$(DEPDIR)/libs_vc1parser-vc1parser.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@libs/$(DEPDIR)/libs_vp8parser-vp8parser.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@orc/$(DEPDIR)/orc_audiomixer-audiomixer.Po@am__quote@
@@ -2555,20 +2780,6 @@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(elements_audiomixer_CFLAGS) $(CFLAGS) -c -o elements/elements_audiomixer-audiomixer.obj `if test -f 'elements/audiomixer.c'; then $(CYGPATH_W) 'elements/audiomixer.c'; else $(CYGPATH_W) '$(srcdir)/elements/audiomixer.c'; fi`
 
-elements/elements_baseaudiovisualizer-baseaudiovisualizer.o: elements/baseaudiovisualizer.c
-@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(elements_baseaudiovisualizer_CFLAGS) $(CFLAGS) -MT elements/elements_baseaudiovisualizer-baseaudiovisualizer.o -MD -MP -MF elements/$(DEPDIR)/elements_baseaudiovisualizer-baseaudiovisualizer.Tpo -c -o elements/elements_baseaudiovisualizer-baseaudiovisualizer.o `test -f 'elements/baseaudiovisualizer.c' || echo '$(srcdir)/'`elements/baseaudiovisualizer.c
-@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) elements/$(DEPDIR)/elements_baseaudiovisualizer-baseaudiovisualizer.Tpo elements/$(DEPDIR)/elements_baseaudiovisualizer-baseaudiovisualizer.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='elements/baseaudiovisualizer.c' object='elements/elements_baseaudiovisualizer-baseaudiovisualizer.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(elements_baseaudiovisualizer_CFLAGS) $(CFLAGS) -c -o elements/elements_baseaudiovisualizer-baseaudiovisualizer.o `test -f 'elements/baseaudiovisualizer.c' || echo '$(srcdir)/'`elements/baseaudiovisualizer.c
-
-elements/elements_baseaudiovisualizer-baseaudiovisualizer.obj: elements/baseaudiovisualizer.c
-@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(elements_baseaudiovisualizer_CFLAGS) $(CFLAGS) -MT elements/elements_baseaudiovisualizer-baseaudiovisualizer.obj -MD -MP -MF elements/$(DEPDIR)/elements_baseaudiovisualizer-baseaudiovisualizer.Tpo -c -o elements/elements_baseaudiovisualizer-baseaudiovisualizer.obj `if test -f 'elements/baseaudiovisualizer.c'; then $(CYGPATH_W) 'elements/baseaudiovisualizer.c'; else $(CYGPATH_W) '$(srcdir)/elements/baseaudiovisualizer.c'; fi`
-@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) elements/$(DEPDIR)/elements_baseaudiovisualizer-baseaudiovisualizer.Tpo elements/$(DEPDIR)/elements_baseaudiovisualizer-baseaudiovisualizer.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='elements/baseaudiovisualizer.c' object='elements/elements_baseaudiovisualizer-baseaudiovisualizer.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(elements_baseaudiovisualizer_CFLAGS) $(CFLAGS) -c -o elements/elements_baseaudiovisualizer-baseaudiovisualizer.obj `if test -f 'elements/baseaudiovisualizer.c'; then $(CYGPATH_W) 'elements/baseaudiovisualizer.c'; else $(CYGPATH_W) '$(srcdir)/elements/baseaudiovisualizer.c'; fi`
-
 elements/elements_camerabin-camerabin.o: elements/camerabin.c
 @am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(elements_camerabin_CFLAGS) $(CFLAGS) -MT elements/elements_camerabin-camerabin.o -MD -MP -MF elements/$(DEPDIR)/elements_camerabin-camerabin.Tpo -c -o elements/elements_camerabin-camerabin.o `test -f 'elements/camerabin.c' || echo '$(srcdir)/'`elements/camerabin.c
 @am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) elements/$(DEPDIR)/elements_camerabin-camerabin.Tpo elements/$(DEPDIR)/elements_camerabin-camerabin.Po
@@ -2597,6 +2808,62 @@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(elements_compositor_CFLAGS) $(CFLAGS) -c -o elements/elements_compositor-compositor.obj `if test -f 'elements/compositor.c'; then $(CYGPATH_W) 'elements/compositor.c'; else $(CYGPATH_W) '$(srcdir)/elements/compositor.c'; fi`
 
+elements/elements_dash_demux-test_http_src.o: elements/test_http_src.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(elements_dash_demux_CFLAGS) $(CFLAGS) -MT elements/elements_dash_demux-test_http_src.o -MD -MP -MF elements/$(DEPDIR)/elements_dash_demux-test_http_src.Tpo -c -o elements/elements_dash_demux-test_http_src.o `test -f 'elements/test_http_src.c' || echo '$(srcdir)/'`elements/test_http_src.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) elements/$(DEPDIR)/elements_dash_demux-test_http_src.Tpo elements/$(DEPDIR)/elements_dash_demux-test_http_src.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='elements/test_http_src.c' object='elements/elements_dash_demux-test_http_src.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(elements_dash_demux_CFLAGS) $(CFLAGS) -c -o elements/elements_dash_demux-test_http_src.o `test -f 'elements/test_http_src.c' || echo '$(srcdir)/'`elements/test_http_src.c
+
+elements/elements_dash_demux-test_http_src.obj: elements/test_http_src.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(elements_dash_demux_CFLAGS) $(CFLAGS) -MT elements/elements_dash_demux-test_http_src.obj -MD -MP -MF elements/$(DEPDIR)/elements_dash_demux-test_http_src.Tpo -c -o elements/elements_dash_demux-test_http_src.obj `if test -f 'elements/test_http_src.c'; then $(CYGPATH_W) 'elements/test_http_src.c'; else $(CYGPATH_W) '$(srcdir)/elements/test_http_src.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) elements/$(DEPDIR)/elements_dash_demux-test_http_src.Tpo elements/$(DEPDIR)/elements_dash_demux-test_http_src.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='elements/test_http_src.c' object='elements/elements_dash_demux-test_http_src.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(elements_dash_demux_CFLAGS) $(CFLAGS) -c -o elements/elements_dash_demux-test_http_src.obj `if test -f 'elements/test_http_src.c'; then $(CYGPATH_W) 'elements/test_http_src.c'; else $(CYGPATH_W) '$(srcdir)/elements/test_http_src.c'; fi`
+
+elements/elements_dash_demux-adaptive_demux_engine.o: elements/adaptive_demux_engine.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(elements_dash_demux_CFLAGS) $(CFLAGS) -MT elements/elements_dash_demux-adaptive_demux_engine.o -MD -MP -MF elements/$(DEPDIR)/elements_dash_demux-adaptive_demux_engine.Tpo -c -o elements/elements_dash_demux-adaptive_demux_engine.o `test -f 'elements/adaptive_demux_engine.c' || echo '$(srcdir)/'`elements/adaptive_demux_engine.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) elements/$(DEPDIR)/elements_dash_demux-adaptive_demux_engine.Tpo elements/$(DEPDIR)/elements_dash_demux-adaptive_demux_engine.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='elements/adaptive_demux_engine.c' object='elements/elements_dash_demux-adaptive_demux_engine.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(elements_dash_demux_CFLAGS) $(CFLAGS) -c -o elements/elements_dash_demux-adaptive_demux_engine.o `test -f 'elements/adaptive_demux_engine.c' || echo '$(srcdir)/'`elements/adaptive_demux_engine.c
+
+elements/elements_dash_demux-adaptive_demux_engine.obj: elements/adaptive_demux_engine.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(elements_dash_demux_CFLAGS) $(CFLAGS) -MT elements/elements_dash_demux-adaptive_demux_engine.obj -MD -MP -MF elements/$(DEPDIR)/elements_dash_demux-adaptive_demux_engine.Tpo -c -o elements/elements_dash_demux-adaptive_demux_engine.obj `if test -f 'elements/adaptive_demux_engine.c'; then $(CYGPATH_W) 'elements/adaptive_demux_engine.c'; else $(CYGPATH_W) '$(srcdir)/elements/adaptive_demux_engine.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) elements/$(DEPDIR)/elements_dash_demux-adaptive_demux_engine.Tpo elements/$(DEPDIR)/elements_dash_demux-adaptive_demux_engine.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='elements/adaptive_demux_engine.c' object='elements/elements_dash_demux-adaptive_demux_engine.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(elements_dash_demux_CFLAGS) $(CFLAGS) -c -o elements/elements_dash_demux-adaptive_demux_engine.obj `if test -f 'elements/adaptive_demux_engine.c'; then $(CYGPATH_W) 'elements/adaptive_demux_engine.c'; else $(CYGPATH_W) '$(srcdir)/elements/adaptive_demux_engine.c'; fi`
+
+elements/elements_dash_demux-adaptive_demux_common.o: elements/adaptive_demux_common.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(elements_dash_demux_CFLAGS) $(CFLAGS) -MT elements/elements_dash_demux-adaptive_demux_common.o -MD -MP -MF elements/$(DEPDIR)/elements_dash_demux-adaptive_demux_common.Tpo -c -o elements/elements_dash_demux-adaptive_demux_common.o `test -f 'elements/adaptive_demux_common.c' || echo '$(srcdir)/'`elements/adaptive_demux_common.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) elements/$(DEPDIR)/elements_dash_demux-adaptive_demux_common.Tpo elements/$(DEPDIR)/elements_dash_demux-adaptive_demux_common.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='elements/adaptive_demux_common.c' object='elements/elements_dash_demux-adaptive_demux_common.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(elements_dash_demux_CFLAGS) $(CFLAGS) -c -o elements/elements_dash_demux-adaptive_demux_common.o `test -f 'elements/adaptive_demux_common.c' || echo '$(srcdir)/'`elements/adaptive_demux_common.c
+
+elements/elements_dash_demux-adaptive_demux_common.obj: elements/adaptive_demux_common.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(elements_dash_demux_CFLAGS) $(CFLAGS) -MT elements/elements_dash_demux-adaptive_demux_common.obj -MD -MP -MF elements/$(DEPDIR)/elements_dash_demux-adaptive_demux_common.Tpo -c -o elements/elements_dash_demux-adaptive_demux_common.obj `if test -f 'elements/adaptive_demux_common.c'; then $(CYGPATH_W) 'elements/adaptive_demux_common.c'; else $(CYGPATH_W) '$(srcdir)/elements/adaptive_demux_common.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) elements/$(DEPDIR)/elements_dash_demux-adaptive_demux_common.Tpo elements/$(DEPDIR)/elements_dash_demux-adaptive_demux_common.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='elements/adaptive_demux_common.c' object='elements/elements_dash_demux-adaptive_demux_common.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(elements_dash_demux_CFLAGS) $(CFLAGS) -c -o elements/elements_dash_demux-adaptive_demux_common.obj `if test -f 'elements/adaptive_demux_common.c'; then $(CYGPATH_W) 'elements/adaptive_demux_common.c'; else $(CYGPATH_W) '$(srcdir)/elements/adaptive_demux_common.c'; fi`
+
+elements/elements_dash_demux-dash_demux.o: elements/dash_demux.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(elements_dash_demux_CFLAGS) $(CFLAGS) -MT elements/elements_dash_demux-dash_demux.o -MD -MP -MF elements/$(DEPDIR)/elements_dash_demux-dash_demux.Tpo -c -o elements/elements_dash_demux-dash_demux.o `test -f 'elements/dash_demux.c' || echo '$(srcdir)/'`elements/dash_demux.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) elements/$(DEPDIR)/elements_dash_demux-dash_demux.Tpo elements/$(DEPDIR)/elements_dash_demux-dash_demux.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='elements/dash_demux.c' object='elements/elements_dash_demux-dash_demux.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(elements_dash_demux_CFLAGS) $(CFLAGS) -c -o elements/elements_dash_demux-dash_demux.o `test -f 'elements/dash_demux.c' || echo '$(srcdir)/'`elements/dash_demux.c
+
+elements/elements_dash_demux-dash_demux.obj: elements/dash_demux.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(elements_dash_demux_CFLAGS) $(CFLAGS) -MT elements/elements_dash_demux-dash_demux.obj -MD -MP -MF elements/$(DEPDIR)/elements_dash_demux-dash_demux.Tpo -c -o elements/elements_dash_demux-dash_demux.obj `if test -f 'elements/dash_demux.c'; then $(CYGPATH_W) 'elements/dash_demux.c'; else $(CYGPATH_W) '$(srcdir)/elements/dash_demux.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) elements/$(DEPDIR)/elements_dash_demux-dash_demux.Tpo elements/$(DEPDIR)/elements_dash_demux-dash_demux.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='elements/dash_demux.c' object='elements/elements_dash_demux-dash_demux.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(elements_dash_demux_CFLAGS) $(CFLAGS) -c -o elements/elements_dash_demux-dash_demux.obj `if test -f 'elements/dash_demux.c'; then $(CYGPATH_W) 'elements/dash_demux.c'; else $(CYGPATH_W) '$(srcdir)/elements/dash_demux.c'; fi`
+
 elements/elements_dash_mpd-dash_mpd.o: elements/dash_mpd.c
 @am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(elements_dash_mpd_CFLAGS) $(CFLAGS) -MT elements/elements_dash_mpd-dash_mpd.o -MD -MP -MF elements/$(DEPDIR)/elements_dash_mpd-dash_mpd.Tpo -c -o elements/elements_dash_mpd-dash_mpd.o `test -f 'elements/dash_mpd.c' || echo '$(srcdir)/'`elements/dash_mpd.c
 @am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) elements/$(DEPDIR)/elements_dash_mpd-dash_mpd.Tpo elements/$(DEPDIR)/elements_dash_mpd-dash_mpd.Po
@@ -2681,6 +2948,62 @@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(elements_glimagesink_CFLAGS) $(CFLAGS) -c -o elements/elements_glimagesink-glimagesink.obj `if test -f 'elements/glimagesink.c'; then $(CYGPATH_W) 'elements/glimagesink.c'; else $(CYGPATH_W) '$(srcdir)/elements/glimagesink.c'; fi`
 
+elements/elements_hls_demux-test_http_src.o: elements/test_http_src.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(elements_hls_demux_CFLAGS) $(CFLAGS) -MT elements/elements_hls_demux-test_http_src.o -MD -MP -MF elements/$(DEPDIR)/elements_hls_demux-test_http_src.Tpo -c -o elements/elements_hls_demux-test_http_src.o `test -f 'elements/test_http_src.c' || echo '$(srcdir)/'`elements/test_http_src.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) elements/$(DEPDIR)/elements_hls_demux-test_http_src.Tpo elements/$(DEPDIR)/elements_hls_demux-test_http_src.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='elements/test_http_src.c' object='elements/elements_hls_demux-test_http_src.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(elements_hls_demux_CFLAGS) $(CFLAGS) -c -o elements/elements_hls_demux-test_http_src.o `test -f 'elements/test_http_src.c' || echo '$(srcdir)/'`elements/test_http_src.c
+
+elements/elements_hls_demux-test_http_src.obj: elements/test_http_src.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(elements_hls_demux_CFLAGS) $(CFLAGS) -MT elements/elements_hls_demux-test_http_src.obj -MD -MP -MF elements/$(DEPDIR)/elements_hls_demux-test_http_src.Tpo -c -o elements/elements_hls_demux-test_http_src.obj `if test -f 'elements/test_http_src.c'; then $(CYGPATH_W) 'elements/test_http_src.c'; else $(CYGPATH_W) '$(srcdir)/elements/test_http_src.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) elements/$(DEPDIR)/elements_hls_demux-test_http_src.Tpo elements/$(DEPDIR)/elements_hls_demux-test_http_src.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='elements/test_http_src.c' object='elements/elements_hls_demux-test_http_src.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(elements_hls_demux_CFLAGS) $(CFLAGS) -c -o elements/elements_hls_demux-test_http_src.obj `if test -f 'elements/test_http_src.c'; then $(CYGPATH_W) 'elements/test_http_src.c'; else $(CYGPATH_W) '$(srcdir)/elements/test_http_src.c'; fi`
+
+elements/elements_hls_demux-adaptive_demux_engine.o: elements/adaptive_demux_engine.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(elements_hls_demux_CFLAGS) $(CFLAGS) -MT elements/elements_hls_demux-adaptive_demux_engine.o -MD -MP -MF elements/$(DEPDIR)/elements_hls_demux-adaptive_demux_engine.Tpo -c -o elements/elements_hls_demux-adaptive_demux_engine.o `test -f 'elements/adaptive_demux_engine.c' || echo '$(srcdir)/'`elements/adaptive_demux_engine.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) elements/$(DEPDIR)/elements_hls_demux-adaptive_demux_engine.Tpo elements/$(DEPDIR)/elements_hls_demux-adaptive_demux_engine.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='elements/adaptive_demux_engine.c' object='elements/elements_hls_demux-adaptive_demux_engine.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(elements_hls_demux_CFLAGS) $(CFLAGS) -c -o elements/elements_hls_demux-adaptive_demux_engine.o `test -f 'elements/adaptive_demux_engine.c' || echo '$(srcdir)/'`elements/adaptive_demux_engine.c
+
+elements/elements_hls_demux-adaptive_demux_engine.obj: elements/adaptive_demux_engine.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(elements_hls_demux_CFLAGS) $(CFLAGS) -MT elements/elements_hls_demux-adaptive_demux_engine.obj -MD -MP -MF elements/$(DEPDIR)/elements_hls_demux-adaptive_demux_engine.Tpo -c -o elements/elements_hls_demux-adaptive_demux_engine.obj `if test -f 'elements/adaptive_demux_engine.c'; then $(CYGPATH_W) 'elements/adaptive_demux_engine.c'; else $(CYGPATH_W) '$(srcdir)/elements/adaptive_demux_engine.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) elements/$(DEPDIR)/elements_hls_demux-adaptive_demux_engine.Tpo elements/$(DEPDIR)/elements_hls_demux-adaptive_demux_engine.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='elements/adaptive_demux_engine.c' object='elements/elements_hls_demux-adaptive_demux_engine.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(elements_hls_demux_CFLAGS) $(CFLAGS) -c -o elements/elements_hls_demux-adaptive_demux_engine.obj `if test -f 'elements/adaptive_demux_engine.c'; then $(CYGPATH_W) 'elements/adaptive_demux_engine.c'; else $(CYGPATH_W) '$(srcdir)/elements/adaptive_demux_engine.c'; fi`
+
+elements/elements_hls_demux-adaptive_demux_common.o: elements/adaptive_demux_common.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(elements_hls_demux_CFLAGS) $(CFLAGS) -MT elements/elements_hls_demux-adaptive_demux_common.o -MD -MP -MF elements/$(DEPDIR)/elements_hls_demux-adaptive_demux_common.Tpo -c -o elements/elements_hls_demux-adaptive_demux_common.o `test -f 'elements/adaptive_demux_common.c' || echo '$(srcdir)/'`elements/adaptive_demux_common.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) elements/$(DEPDIR)/elements_hls_demux-adaptive_demux_common.Tpo elements/$(DEPDIR)/elements_hls_demux-adaptive_demux_common.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='elements/adaptive_demux_common.c' object='elements/elements_hls_demux-adaptive_demux_common.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(elements_hls_demux_CFLAGS) $(CFLAGS) -c -o elements/elements_hls_demux-adaptive_demux_common.o `test -f 'elements/adaptive_demux_common.c' || echo '$(srcdir)/'`elements/adaptive_demux_common.c
+
+elements/elements_hls_demux-adaptive_demux_common.obj: elements/adaptive_demux_common.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(elements_hls_demux_CFLAGS) $(CFLAGS) -MT elements/elements_hls_demux-adaptive_demux_common.obj -MD -MP -MF elements/$(DEPDIR)/elements_hls_demux-adaptive_demux_common.Tpo -c -o elements/elements_hls_demux-adaptive_demux_common.obj `if test -f 'elements/adaptive_demux_common.c'; then $(CYGPATH_W) 'elements/adaptive_demux_common.c'; else $(CYGPATH_W) '$(srcdir)/elements/adaptive_demux_common.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) elements/$(DEPDIR)/elements_hls_demux-adaptive_demux_common.Tpo elements/$(DEPDIR)/elements_hls_demux-adaptive_demux_common.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='elements/adaptive_demux_common.c' object='elements/elements_hls_demux-adaptive_demux_common.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(elements_hls_demux_CFLAGS) $(CFLAGS) -c -o elements/elements_hls_demux-adaptive_demux_common.obj `if test -f 'elements/adaptive_demux_common.c'; then $(CYGPATH_W) 'elements/adaptive_demux_common.c'; else $(CYGPATH_W) '$(srcdir)/elements/adaptive_demux_common.c'; fi`
+
+elements/elements_hls_demux-hls_demux.o: elements/hls_demux.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(elements_hls_demux_CFLAGS) $(CFLAGS) -MT elements/elements_hls_demux-hls_demux.o -MD -MP -MF elements/$(DEPDIR)/elements_hls_demux-hls_demux.Tpo -c -o elements/elements_hls_demux-hls_demux.o `test -f 'elements/hls_demux.c' || echo '$(srcdir)/'`elements/hls_demux.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) elements/$(DEPDIR)/elements_hls_demux-hls_demux.Tpo elements/$(DEPDIR)/elements_hls_demux-hls_demux.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='elements/hls_demux.c' object='elements/elements_hls_demux-hls_demux.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(elements_hls_demux_CFLAGS) $(CFLAGS) -c -o elements/elements_hls_demux-hls_demux.o `test -f 'elements/hls_demux.c' || echo '$(srcdir)/'`elements/hls_demux.c
+
+elements/elements_hls_demux-hls_demux.obj: elements/hls_demux.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(elements_hls_demux_CFLAGS) $(CFLAGS) -MT elements/elements_hls_demux-hls_demux.obj -MD -MP -MF elements/$(DEPDIR)/elements_hls_demux-hls_demux.Tpo -c -o elements/elements_hls_demux-hls_demux.obj `if test -f 'elements/hls_demux.c'; then $(CYGPATH_W) 'elements/hls_demux.c'; else $(CYGPATH_W) '$(srcdir)/elements/hls_demux.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) elements/$(DEPDIR)/elements_hls_demux-hls_demux.Tpo elements/$(DEPDIR)/elements_hls_demux-hls_demux.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='elements/hls_demux.c' object='elements/elements_hls_demux-hls_demux.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(elements_hls_demux_CFLAGS) $(CFLAGS) -c -o elements/elements_hls_demux-hls_demux.obj `if test -f 'elements/hls_demux.c'; then $(CYGPATH_W) 'elements/hls_demux.c'; else $(CYGPATH_W) '$(srcdir)/elements/hls_demux.c'; fi`
+
 elements/elements_hlsdemux_m3u8-hlsdemux_m3u8.o: elements/hlsdemux_m3u8.c
 @am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(elements_hlsdemux_m3u8_CFLAGS) $(CFLAGS) -MT elements/elements_hlsdemux_m3u8-hlsdemux_m3u8.o -MD -MP -MF elements/$(DEPDIR)/elements_hlsdemux_m3u8-hlsdemux_m3u8.Tpo -c -o elements/elements_hlsdemux_m3u8-hlsdemux_m3u8.o `test -f 'elements/hlsdemux_m3u8.c' || echo '$(srcdir)/'`elements/hlsdemux_m3u8.c
 @am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) elements/$(DEPDIR)/elements_hlsdemux_m3u8-hlsdemux_m3u8.Tpo elements/$(DEPDIR)/elements_hlsdemux_m3u8-hlsdemux_m3u8.Po
@@ -2737,33 +3060,89 @@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(elements_mpegtsmux_CFLAGS) $(CFLAGS) -c -o elements/elements_mpegtsmux-mpegtsmux.obj `if test -f 'elements/mpegtsmux.c'; then $(CYGPATH_W) 'elements/mpegtsmux.c'; else $(CYGPATH_W) '$(srcdir)/elements/mpegtsmux.c'; fi`
 
-elements/elements_mpg123audiodec-mpg123audiodec.o: elements/mpg123audiodec.c
-@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(elements_mpg123audiodec_CFLAGS) $(CFLAGS) -MT elements/elements_mpg123audiodec-mpg123audiodec.o -MD -MP -MF elements/$(DEPDIR)/elements_mpg123audiodec-mpg123audiodec.Tpo -c -o elements/elements_mpg123audiodec-mpg123audiodec.o `test -f 'elements/mpg123audiodec.c' || echo '$(srcdir)/'`elements/mpg123audiodec.c
-@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) elements/$(DEPDIR)/elements_mpg123audiodec-mpg123audiodec.Tpo elements/$(DEPDIR)/elements_mpg123audiodec-mpg123audiodec.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='elements/mpg123audiodec.c' object='elements/elements_mpg123audiodec-mpg123audiodec.o' libtool=no @AMDEPBACKSLASH@
+elements/elements_mssdemux-test_http_src.o: elements/test_http_src.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(elements_mssdemux_CFLAGS) $(CFLAGS) -MT elements/elements_mssdemux-test_http_src.o -MD -MP -MF elements/$(DEPDIR)/elements_mssdemux-test_http_src.Tpo -c -o elements/elements_mssdemux-test_http_src.o `test -f 'elements/test_http_src.c' || echo '$(srcdir)/'`elements/test_http_src.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) elements/$(DEPDIR)/elements_mssdemux-test_http_src.Tpo elements/$(DEPDIR)/elements_mssdemux-test_http_src.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='elements/test_http_src.c' object='elements/elements_mssdemux-test_http_src.o' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(elements_mpg123audiodec_CFLAGS) $(CFLAGS) -c -o elements/elements_mpg123audiodec-mpg123audiodec.o `test -f 'elements/mpg123audiodec.c' || echo '$(srcdir)/'`elements/mpg123audiodec.c
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(elements_mssdemux_CFLAGS) $(CFLAGS) -c -o elements/elements_mssdemux-test_http_src.o `test -f 'elements/test_http_src.c' || echo '$(srcdir)/'`elements/test_http_src.c
 
-elements/elements_mpg123audiodec-mpg123audiodec.obj: elements/mpg123audiodec.c
-@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(elements_mpg123audiodec_CFLAGS) $(CFLAGS) -MT elements/elements_mpg123audiodec-mpg123audiodec.obj -MD -MP -MF elements/$(DEPDIR)/elements_mpg123audiodec-mpg123audiodec.Tpo -c -o elements/elements_mpg123audiodec-mpg123audiodec.obj `if test -f 'elements/mpg123audiodec.c'; then $(CYGPATH_W) 'elements/mpg123audiodec.c'; else $(CYGPATH_W) '$(srcdir)/elements/mpg123audiodec.c'; fi`
-@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) elements/$(DEPDIR)/elements_mpg123audiodec-mpg123audiodec.Tpo elements/$(DEPDIR)/elements_mpg123audiodec-mpg123audiodec.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='elements/mpg123audiodec.c' object='elements/elements_mpg123audiodec-mpg123audiodec.obj' libtool=no @AMDEPBACKSLASH@
+elements/elements_mssdemux-test_http_src.obj: elements/test_http_src.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(elements_mssdemux_CFLAGS) $(CFLAGS) -MT elements/elements_mssdemux-test_http_src.obj -MD -MP -MF elements/$(DEPDIR)/elements_mssdemux-test_http_src.Tpo -c -o elements/elements_mssdemux-test_http_src.obj `if test -f 'elements/test_http_src.c'; then $(CYGPATH_W) 'elements/test_http_src.c'; else $(CYGPATH_W) '$(srcdir)/elements/test_http_src.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) elements/$(DEPDIR)/elements_mssdemux-test_http_src.Tpo elements/$(DEPDIR)/elements_mssdemux-test_http_src.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='elements/test_http_src.c' object='elements/elements_mssdemux-test_http_src.obj' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(elements_mpg123audiodec_CFLAGS) $(CFLAGS) -c -o elements/elements_mpg123audiodec-mpg123audiodec.obj `if test -f 'elements/mpg123audiodec.c'; then $(CYGPATH_W) 'elements/mpg123audiodec.c'; else $(CYGPATH_W) '$(srcdir)/elements/mpg123audiodec.c'; fi`
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(elements_mssdemux_CFLAGS) $(CFLAGS) -c -o elements/elements_mssdemux-test_http_src.obj `if test -f 'elements/test_http_src.c'; then $(CYGPATH_W) 'elements/test_http_src.c'; else $(CYGPATH_W) '$(srcdir)/elements/test_http_src.c'; fi`
 
-elements/elements_rtponvif-rtponvif.o: elements/rtponvif.c
-@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(elements_rtponvif_CFLAGS) $(CFLAGS) -MT elements/elements_rtponvif-rtponvif.o -MD -MP -MF elements/$(DEPDIR)/elements_rtponvif-rtponvif.Tpo -c -o elements/elements_rtponvif-rtponvif.o `test -f 'elements/rtponvif.c' || echo '$(srcdir)/'`elements/rtponvif.c
-@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) elements/$(DEPDIR)/elements_rtponvif-rtponvif.Tpo elements/$(DEPDIR)/elements_rtponvif-rtponvif.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='elements/rtponvif.c' object='elements/elements_rtponvif-rtponvif.o' libtool=no @AMDEPBACKSLASH@
+elements/elements_mssdemux-adaptive_demux_engine.o: elements/adaptive_demux_engine.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(elements_mssdemux_CFLAGS) $(CFLAGS) -MT elements/elements_mssdemux-adaptive_demux_engine.o -MD -MP -MF elements/$(DEPDIR)/elements_mssdemux-adaptive_demux_engine.Tpo -c -o elements/elements_mssdemux-adaptive_demux_engine.o `test -f 'elements/adaptive_demux_engine.c' || echo '$(srcdir)/'`elements/adaptive_demux_engine.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) elements/$(DEPDIR)/elements_mssdemux-adaptive_demux_engine.Tpo elements/$(DEPDIR)/elements_mssdemux-adaptive_demux_engine.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='elements/adaptive_demux_engine.c' object='elements/elements_mssdemux-adaptive_demux_engine.o' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(elements_rtponvif_CFLAGS) $(CFLAGS) -c -o elements/elements_rtponvif-rtponvif.o `test -f 'elements/rtponvif.c' || echo '$(srcdir)/'`elements/rtponvif.c
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(elements_mssdemux_CFLAGS) $(CFLAGS) -c -o elements/elements_mssdemux-adaptive_demux_engine.o `test -f 'elements/adaptive_demux_engine.c' || echo '$(srcdir)/'`elements/adaptive_demux_engine.c
 
-elements/elements_rtponvif-rtponvif.obj: elements/rtponvif.c
-@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(elements_rtponvif_CFLAGS) $(CFLAGS) -MT elements/elements_rtponvif-rtponvif.obj -MD -MP -MF elements/$(DEPDIR)/elements_rtponvif-rtponvif.Tpo -c -o elements/elements_rtponvif-rtponvif.obj `if test -f 'elements/rtponvif.c'; then $(CYGPATH_W) 'elements/rtponvif.c'; else $(CYGPATH_W) '$(srcdir)/elements/rtponvif.c'; fi`
-@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) elements/$(DEPDIR)/elements_rtponvif-rtponvif.Tpo elements/$(DEPDIR)/elements_rtponvif-rtponvif.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='elements/rtponvif.c' object='elements/elements_rtponvif-rtponvif.obj' libtool=no @AMDEPBACKSLASH@
+elements/elements_mssdemux-adaptive_demux_engine.obj: elements/adaptive_demux_engine.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(elements_mssdemux_CFLAGS) $(CFLAGS) -MT elements/elements_mssdemux-adaptive_demux_engine.obj -MD -MP -MF elements/$(DEPDIR)/elements_mssdemux-adaptive_demux_engine.Tpo -c -o elements/elements_mssdemux-adaptive_demux_engine.obj `if test -f 'elements/adaptive_demux_engine.c'; then $(CYGPATH_W) 'elements/adaptive_demux_engine.c'; else $(CYGPATH_W) '$(srcdir)/elements/adaptive_demux_engine.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) elements/$(DEPDIR)/elements_mssdemux-adaptive_demux_engine.Tpo elements/$(DEPDIR)/elements_mssdemux-adaptive_demux_engine.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='elements/adaptive_demux_engine.c' object='elements/elements_mssdemux-adaptive_demux_engine.obj' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(elements_rtponvif_CFLAGS) $(CFLAGS) -c -o elements/elements_rtponvif-rtponvif.obj `if test -f 'elements/rtponvif.c'; then $(CYGPATH_W) 'elements/rtponvif.c'; else $(CYGPATH_W) '$(srcdir)/elements/rtponvif.c'; fi`
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(elements_mssdemux_CFLAGS) $(CFLAGS) -c -o elements/elements_mssdemux-adaptive_demux_engine.obj `if test -f 'elements/adaptive_demux_engine.c'; then $(CYGPATH_W) 'elements/adaptive_demux_engine.c'; else $(CYGPATH_W) '$(srcdir)/elements/adaptive_demux_engine.c'; fi`
+
+elements/elements_mssdemux-adaptive_demux_common.o: elements/adaptive_demux_common.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(elements_mssdemux_CFLAGS) $(CFLAGS) -MT elements/elements_mssdemux-adaptive_demux_common.o -MD -MP -MF elements/$(DEPDIR)/elements_mssdemux-adaptive_demux_common.Tpo -c -o elements/elements_mssdemux-adaptive_demux_common.o `test -f 'elements/adaptive_demux_common.c' || echo '$(srcdir)/'`elements/adaptive_demux_common.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) elements/$(DEPDIR)/elements_mssdemux-adaptive_demux_common.Tpo elements/$(DEPDIR)/elements_mssdemux-adaptive_demux_common.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='elements/adaptive_demux_common.c' object='elements/elements_mssdemux-adaptive_demux_common.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(elements_mssdemux_CFLAGS) $(CFLAGS) -c -o elements/elements_mssdemux-adaptive_demux_common.o `test -f 'elements/adaptive_demux_common.c' || echo '$(srcdir)/'`elements/adaptive_demux_common.c
+
+elements/elements_mssdemux-adaptive_demux_common.obj: elements/adaptive_demux_common.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(elements_mssdemux_CFLAGS) $(CFLAGS) -MT elements/elements_mssdemux-adaptive_demux_common.obj -MD -MP -MF elements/$(DEPDIR)/elements_mssdemux-adaptive_demux_common.Tpo -c -o elements/elements_mssdemux-adaptive_demux_common.obj `if test -f 'elements/adaptive_demux_common.c'; then $(CYGPATH_W) 'elements/adaptive_demux_common.c'; else $(CYGPATH_W) '$(srcdir)/elements/adaptive_demux_common.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) elements/$(DEPDIR)/elements_mssdemux-adaptive_demux_common.Tpo elements/$(DEPDIR)/elements_mssdemux-adaptive_demux_common.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='elements/adaptive_demux_common.c' object='elements/elements_mssdemux-adaptive_demux_common.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(elements_mssdemux_CFLAGS) $(CFLAGS) -c -o elements/elements_mssdemux-adaptive_demux_common.obj `if test -f 'elements/adaptive_demux_common.c'; then $(CYGPATH_W) 'elements/adaptive_demux_common.c'; else $(CYGPATH_W) '$(srcdir)/elements/adaptive_demux_common.c'; fi`
+
+elements/elements_mssdemux-mssdemux.o: elements/mssdemux.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(elements_mssdemux_CFLAGS) $(CFLAGS) -MT elements/elements_mssdemux-mssdemux.o -MD -MP -MF elements/$(DEPDIR)/elements_mssdemux-mssdemux.Tpo -c -o elements/elements_mssdemux-mssdemux.o `test -f 'elements/mssdemux.c' || echo '$(srcdir)/'`elements/mssdemux.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) elements/$(DEPDIR)/elements_mssdemux-mssdemux.Tpo elements/$(DEPDIR)/elements_mssdemux-mssdemux.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='elements/mssdemux.c' object='elements/elements_mssdemux-mssdemux.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(elements_mssdemux_CFLAGS) $(CFLAGS) -c -o elements/elements_mssdemux-mssdemux.o `test -f 'elements/mssdemux.c' || echo '$(srcdir)/'`elements/mssdemux.c
+
+elements/elements_mssdemux-mssdemux.obj: elements/mssdemux.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(elements_mssdemux_CFLAGS) $(CFLAGS) -MT elements/elements_mssdemux-mssdemux.obj -MD -MP -MF elements/$(DEPDIR)/elements_mssdemux-mssdemux.Tpo -c -o elements/elements_mssdemux-mssdemux.obj `if test -f 'elements/mssdemux.c'; then $(CYGPATH_W) 'elements/mssdemux.c'; else $(CYGPATH_W) '$(srcdir)/elements/mssdemux.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) elements/$(DEPDIR)/elements_mssdemux-mssdemux.Tpo elements/$(DEPDIR)/elements_mssdemux-mssdemux.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='elements/mssdemux.c' object='elements/elements_mssdemux-mssdemux.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(elements_mssdemux_CFLAGS) $(CFLAGS) -c -o elements/elements_mssdemux-mssdemux.obj `if test -f 'elements/mssdemux.c'; then $(CYGPATH_W) 'elements/mssdemux.c'; else $(CYGPATH_W) '$(srcdir)/elements/mssdemux.c'; fi`
+
+elements/elements_rtponvifparse-rtponvifparse.o: elements/rtponvifparse.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(elements_rtponvifparse_CFLAGS) $(CFLAGS) -MT elements/elements_rtponvifparse-rtponvifparse.o -MD -MP -MF elements/$(DEPDIR)/elements_rtponvifparse-rtponvifparse.Tpo -c -o elements/elements_rtponvifparse-rtponvifparse.o `test -f 'elements/rtponvifparse.c' || echo '$(srcdir)/'`elements/rtponvifparse.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) elements/$(DEPDIR)/elements_rtponvifparse-rtponvifparse.Tpo elements/$(DEPDIR)/elements_rtponvifparse-rtponvifparse.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='elements/rtponvifparse.c' object='elements/elements_rtponvifparse-rtponvifparse.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(elements_rtponvifparse_CFLAGS) $(CFLAGS) -c -o elements/elements_rtponvifparse-rtponvifparse.o `test -f 'elements/rtponvifparse.c' || echo '$(srcdir)/'`elements/rtponvifparse.c
+
+elements/elements_rtponvifparse-rtponvifparse.obj: elements/rtponvifparse.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(elements_rtponvifparse_CFLAGS) $(CFLAGS) -MT elements/elements_rtponvifparse-rtponvifparse.obj -MD -MP -MF elements/$(DEPDIR)/elements_rtponvifparse-rtponvifparse.Tpo -c -o elements/elements_rtponvifparse-rtponvifparse.obj `if test -f 'elements/rtponvifparse.c'; then $(CYGPATH_W) 'elements/rtponvifparse.c'; else $(CYGPATH_W) '$(srcdir)/elements/rtponvifparse.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) elements/$(DEPDIR)/elements_rtponvifparse-rtponvifparse.Tpo elements/$(DEPDIR)/elements_rtponvifparse-rtponvifparse.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='elements/rtponvifparse.c' object='elements/elements_rtponvifparse-rtponvifparse.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(elements_rtponvifparse_CFLAGS) $(CFLAGS) -c -o elements/elements_rtponvifparse-rtponvifparse.obj `if test -f 'elements/rtponvifparse.c'; then $(CYGPATH_W) 'elements/rtponvifparse.c'; else $(CYGPATH_W) '$(srcdir)/elements/rtponvifparse.c'; fi`
+
+elements/elements_rtponviftimestamp-rtponviftimestamp.o: elements/rtponviftimestamp.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(elements_rtponviftimestamp_CFLAGS) $(CFLAGS) -MT elements/elements_rtponviftimestamp-rtponviftimestamp.o -MD -MP -MF elements/$(DEPDIR)/elements_rtponviftimestamp-rtponviftimestamp.Tpo -c -o elements/elements_rtponviftimestamp-rtponviftimestamp.o `test -f 'elements/rtponviftimestamp.c' || echo '$(srcdir)/'`elements/rtponviftimestamp.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) elements/$(DEPDIR)/elements_rtponviftimestamp-rtponviftimestamp.Tpo elements/$(DEPDIR)/elements_rtponviftimestamp-rtponviftimestamp.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='elements/rtponviftimestamp.c' object='elements/elements_rtponviftimestamp-rtponviftimestamp.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(elements_rtponviftimestamp_CFLAGS) $(CFLAGS) -c -o elements/elements_rtponviftimestamp-rtponviftimestamp.o `test -f 'elements/rtponviftimestamp.c' || echo '$(srcdir)/'`elements/rtponviftimestamp.c
+
+elements/elements_rtponviftimestamp-rtponviftimestamp.obj: elements/rtponviftimestamp.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(elements_rtponviftimestamp_CFLAGS) $(CFLAGS) -MT elements/elements_rtponviftimestamp-rtponviftimestamp.obj -MD -MP -MF elements/$(DEPDIR)/elements_rtponviftimestamp-rtponviftimestamp.Tpo -c -o elements/elements_rtponviftimestamp-rtponviftimestamp.obj `if test -f 'elements/rtponviftimestamp.c'; then $(CYGPATH_W) 'elements/rtponviftimestamp.c'; else $(CYGPATH_W) '$(srcdir)/elements/rtponviftimestamp.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) elements/$(DEPDIR)/elements_rtponviftimestamp-rtponviftimestamp.Tpo elements/$(DEPDIR)/elements_rtponviftimestamp-rtponviftimestamp.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='elements/rtponviftimestamp.c' object='elements/elements_rtponviftimestamp-rtponviftimestamp.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(elements_rtponviftimestamp_CFLAGS) $(CFLAGS) -c -o elements/elements_rtponviftimestamp-rtponviftimestamp.obj `if test -f 'elements/rtponviftimestamp.c'; then $(CYGPATH_W) 'elements/rtponviftimestamp.c'; else $(CYGPATH_W) '$(srcdir)/elements/rtponviftimestamp.c'; fi`
 
 elements/elements_timidity-timidity.o: elements/timidity.c
 @am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(elements_timidity_CFLAGS) $(CFLAGS) -MT elements/elements_timidity-timidity.o -MD -MP -MF elements/$(DEPDIR)/elements_timidity-timidity.Tpo -c -o elements/elements_timidity-timidity.o `test -f 'elements/timidity.c' || echo '$(srcdir)/'`elements/timidity.c
@@ -2793,6 +3172,20 @@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(elements_uvch264demux_CFLAGS) $(CFLAGS) -c -o elements/elements_uvch264demux-uvch264demux.obj `if test -f 'elements/uvch264demux.c'; then $(CYGPATH_W) 'elements/uvch264demux.c'; else $(CYGPATH_W) '$(srcdir)/elements/uvch264demux.c'; fi`
 
+elements/elements_videoframe_audiolevel-videoframe-audiolevel.o: elements/videoframe-audiolevel.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(elements_videoframe_audiolevel_CFLAGS) $(CFLAGS) -MT elements/elements_videoframe_audiolevel-videoframe-audiolevel.o -MD -MP -MF elements/$(DEPDIR)/elements_videoframe_audiolevel-videoframe-audiolevel.Tpo -c -o elements/elements_videoframe_audiolevel-videoframe-audiolevel.o `test -f 'elements/videoframe-audiolevel.c' || echo '$(srcdir)/'`elements/videoframe-audiolevel.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) elements/$(DEPDIR)/elements_videoframe_audiolevel-videoframe-audiolevel.Tpo elements/$(DEPDIR)/elements_videoframe_audiolevel-videoframe-audiolevel.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='elements/videoframe-audiolevel.c' object='elements/elements_videoframe_audiolevel-videoframe-audiolevel.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(elements_videoframe_audiolevel_CFLAGS) $(CFLAGS) -c -o elements/elements_videoframe_audiolevel-videoframe-audiolevel.o `test -f 'elements/videoframe-audiolevel.c' || echo '$(srcdir)/'`elements/videoframe-audiolevel.c
+
+elements/elements_videoframe_audiolevel-videoframe-audiolevel.obj: elements/videoframe-audiolevel.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(elements_videoframe_audiolevel_CFLAGS) $(CFLAGS) -MT elements/elements_videoframe_audiolevel-videoframe-audiolevel.obj -MD -MP -MF elements/$(DEPDIR)/elements_videoframe_audiolevel-videoframe-audiolevel.Tpo -c -o elements/elements_videoframe_audiolevel-videoframe-audiolevel.obj `if test -f 'elements/videoframe-audiolevel.c'; then $(CYGPATH_W) 'elements/videoframe-audiolevel.c'; else $(CYGPATH_W) '$(srcdir)/elements/videoframe-audiolevel.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) elements/$(DEPDIR)/elements_videoframe_audiolevel-videoframe-audiolevel.Tpo elements/$(DEPDIR)/elements_videoframe_audiolevel-videoframe-audiolevel.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='elements/videoframe-audiolevel.c' object='elements/elements_videoframe_audiolevel-videoframe-audiolevel.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(elements_videoframe_audiolevel_CFLAGS) $(CFLAGS) -c -o elements/elements_videoframe_audiolevel-videoframe-audiolevel.obj `if test -f 'elements/videoframe-audiolevel.c'; then $(CYGPATH_W) 'elements/videoframe-audiolevel.c'; else $(CYGPATH_W) '$(srcdir)/elements/videoframe-audiolevel.c'; fi`
+
 elements/elements_voaacenc-voaacenc.o: elements/voaacenc.c
 @am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(elements_voaacenc_CFLAGS) $(CFLAGS) -MT elements/elements_voaacenc-voaacenc.o -MD -MP -MF elements/$(DEPDIR)/elements_voaacenc-voaacenc.Tpo -c -o elements/elements_voaacenc-voaacenc.o `test -f 'elements/voaacenc.c' || echo '$(srcdir)/'`elements/voaacenc.c
 @am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) elements/$(DEPDIR)/elements_voaacenc-voaacenc.Tpo elements/$(DEPDIR)/elements_voaacenc-voaacenc.Po
@@ -2877,6 +3270,34 @@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libs_gstglmemory_CFLAGS) $(CFLAGS) -c -o libs/libs_gstglmemory-gstglmemory.obj `if test -f 'libs/gstglmemory.c'; then $(CYGPATH_W) 'libs/gstglmemory.c'; else $(CYGPATH_W) '$(srcdir)/libs/gstglmemory.c'; fi`
 
+libs/libs_gstglquery-gstglquery.o: libs/gstglquery.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libs_gstglquery_CFLAGS) $(CFLAGS) -MT libs/libs_gstglquery-gstglquery.o -MD -MP -MF libs/$(DEPDIR)/libs_gstglquery-gstglquery.Tpo -c -o libs/libs_gstglquery-gstglquery.o `test -f 'libs/gstglquery.c' || echo '$(srcdir)/'`libs/gstglquery.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) libs/$(DEPDIR)/libs_gstglquery-gstglquery.Tpo libs/$(DEPDIR)/libs_gstglquery-gstglquery.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='libs/gstglquery.c' object='libs/libs_gstglquery-gstglquery.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libs_gstglquery_CFLAGS) $(CFLAGS) -c -o libs/libs_gstglquery-gstglquery.o `test -f 'libs/gstglquery.c' || echo '$(srcdir)/'`libs/gstglquery.c
+
+libs/libs_gstglquery-gstglquery.obj: libs/gstglquery.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libs_gstglquery_CFLAGS) $(CFLAGS) -MT libs/libs_gstglquery-gstglquery.obj -MD -MP -MF libs/$(DEPDIR)/libs_gstglquery-gstglquery.Tpo -c -o libs/libs_gstglquery-gstglquery.obj `if test -f 'libs/gstglquery.c'; then $(CYGPATH_W) 'libs/gstglquery.c'; else $(CYGPATH_W) '$(srcdir)/libs/gstglquery.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) libs/$(DEPDIR)/libs_gstglquery-gstglquery.Tpo libs/$(DEPDIR)/libs_gstglquery-gstglquery.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='libs/gstglquery.c' object='libs/libs_gstglquery-gstglquery.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libs_gstglquery_CFLAGS) $(CFLAGS) -c -o libs/libs_gstglquery-gstglquery.obj `if test -f 'libs/gstglquery.c'; then $(CYGPATH_W) 'libs/gstglquery.c'; else $(CYGPATH_W) '$(srcdir)/libs/gstglquery.c'; fi`
+
+libs/libs_gstglsl-gstglsl.o: libs/gstglsl.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libs_gstglsl_CFLAGS) $(CFLAGS) -MT libs/libs_gstglsl-gstglsl.o -MD -MP -MF libs/$(DEPDIR)/libs_gstglsl-gstglsl.Tpo -c -o libs/libs_gstglsl-gstglsl.o `test -f 'libs/gstglsl.c' || echo '$(srcdir)/'`libs/gstglsl.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) libs/$(DEPDIR)/libs_gstglsl-gstglsl.Tpo libs/$(DEPDIR)/libs_gstglsl-gstglsl.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='libs/gstglsl.c' object='libs/libs_gstglsl-gstglsl.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libs_gstglsl_CFLAGS) $(CFLAGS) -c -o libs/libs_gstglsl-gstglsl.o `test -f 'libs/gstglsl.c' || echo '$(srcdir)/'`libs/gstglsl.c
+
+libs/libs_gstglsl-gstglsl.obj: libs/gstglsl.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libs_gstglsl_CFLAGS) $(CFLAGS) -MT libs/libs_gstglsl-gstglsl.obj -MD -MP -MF libs/$(DEPDIR)/libs_gstglsl-gstglsl.Tpo -c -o libs/libs_gstglsl-gstglsl.obj `if test -f 'libs/gstglsl.c'; then $(CYGPATH_W) 'libs/gstglsl.c'; else $(CYGPATH_W) '$(srcdir)/libs/gstglsl.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) libs/$(DEPDIR)/libs_gstglsl-gstglsl.Tpo libs/$(DEPDIR)/libs_gstglsl-gstglsl.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='libs/gstglsl.c' object='libs/libs_gstglsl-gstglsl.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libs_gstglsl_CFLAGS) $(CFLAGS) -c -o libs/libs_gstglsl-gstglsl.obj `if test -f 'libs/gstglsl.c'; then $(CYGPATH_W) 'libs/gstglsl.c'; else $(CYGPATH_W) '$(srcdir)/libs/gstglsl.c'; fi`
+
 libs/libs_gstglupload-gstglupload.o: libs/gstglupload.c
 @am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libs_gstglupload_CFLAGS) $(CFLAGS) -MT libs/libs_gstglupload-gstglupload.o -MD -MP -MF libs/$(DEPDIR)/libs_gstglupload-gstglupload.Tpo -c -o libs/libs_gstglupload-gstglupload.o `test -f 'libs/gstglupload.c' || echo '$(srcdir)/'`libs/gstglupload.c
 @am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) libs/$(DEPDIR)/libs_gstglupload-gstglupload.Tpo libs/$(DEPDIR)/libs_gstglupload-gstglupload.Po
@@ -2947,6 +3368,34 @@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libs_mpegvideoparser_CFLAGS) $(CFLAGS) -c -o libs/libs_mpegvideoparser-mpegvideoparser.obj `if test -f 'libs/mpegvideoparser.c'; then $(CYGPATH_W) 'libs/mpegvideoparser.c'; else $(CYGPATH_W) '$(srcdir)/libs/mpegvideoparser.c'; fi`
 
+libs/libs_player-player.o: libs/player.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libs_player_CFLAGS) $(CFLAGS) -MT libs/libs_player-player.o -MD -MP -MF libs/$(DEPDIR)/libs_player-player.Tpo -c -o libs/libs_player-player.o `test -f 'libs/player.c' || echo '$(srcdir)/'`libs/player.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) libs/$(DEPDIR)/libs_player-player.Tpo libs/$(DEPDIR)/libs_player-player.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='libs/player.c' object='libs/libs_player-player.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libs_player_CFLAGS) $(CFLAGS) -c -o libs/libs_player-player.o `test -f 'libs/player.c' || echo '$(srcdir)/'`libs/player.c
+
+libs/libs_player-player.obj: libs/player.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libs_player_CFLAGS) $(CFLAGS) -MT libs/libs_player-player.obj -MD -MP -MF libs/$(DEPDIR)/libs_player-player.Tpo -c -o libs/libs_player-player.obj `if test -f 'libs/player.c'; then $(CYGPATH_W) 'libs/player.c'; else $(CYGPATH_W) '$(srcdir)/libs/player.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) libs/$(DEPDIR)/libs_player-player.Tpo libs/$(DEPDIR)/libs_player-player.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='libs/player.c' object='libs/libs_player-player.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libs_player_CFLAGS) $(CFLAGS) -c -o libs/libs_player-player.obj `if test -f 'libs/player.c'; then $(CYGPATH_W) 'libs/player.c'; else $(CYGPATH_W) '$(srcdir)/libs/player.c'; fi`
+
+libs/libs_player-player_dummy.o: libs/player_dummy.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libs_player_CFLAGS) $(CFLAGS) -MT libs/libs_player-player_dummy.o -MD -MP -MF libs/$(DEPDIR)/libs_player-player_dummy.Tpo -c -o libs/libs_player-player_dummy.o `test -f 'libs/player_dummy.c' || echo '$(srcdir)/'`libs/player_dummy.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) libs/$(DEPDIR)/libs_player-player_dummy.Tpo libs/$(DEPDIR)/libs_player-player_dummy.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='libs/player_dummy.c' object='libs/libs_player-player_dummy.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libs_player_CFLAGS) $(CFLAGS) -c -o libs/libs_player-player_dummy.o `test -f 'libs/player_dummy.c' || echo '$(srcdir)/'`libs/player_dummy.c
+
+libs/libs_player-player_dummy.obj: libs/player_dummy.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libs_player_CFLAGS) $(CFLAGS) -MT libs/libs_player-player_dummy.obj -MD -MP -MF libs/$(DEPDIR)/libs_player-player_dummy.Tpo -c -o libs/libs_player-player_dummy.obj `if test -f 'libs/player_dummy.c'; then $(CYGPATH_W) 'libs/player_dummy.c'; else $(CYGPATH_W) '$(srcdir)/libs/player_dummy.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) libs/$(DEPDIR)/libs_player-player_dummy.Tpo libs/$(DEPDIR)/libs_player-player_dummy.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='libs/player_dummy.c' object='libs/libs_player-player_dummy.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libs_player_CFLAGS) $(CFLAGS) -c -o libs/libs_player-player_dummy.obj `if test -f 'libs/player_dummy.c'; then $(CYGPATH_W) 'libs/player_dummy.c'; else $(CYGPATH_W) '$(srcdir)/libs/player_dummy.c'; fi`
+
 libs/libs_vc1parser-vc1parser.o: libs/vc1parser.c
 @am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libs_vc1parser_CFLAGS) $(CFLAGS) -MT libs/libs_vc1parser-vc1parser.o -MD -MP -MF libs/$(DEPDIR)/libs_vc1parser-vc1parser.Tpo -c -o libs/libs_vc1parser-vc1parser.o `test -f 'libs/vc1parser.c' || echo '$(srcdir)/'`libs/vc1parser.c
 @am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) libs/$(DEPDIR)/libs_vc1parser-vc1parser.Tpo libs/$(DEPDIR)/libs_vc1parser-vc1parser.Po
@@ -3256,6 +3705,13 @@
 	--log-file $$b.log --trs-file $$b.trs \
 	$(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
 	"$$tst" $(AM_TESTS_FD_REDIRECT)
+elements/dash_demux.log: elements/dash_demux$(EXEEXT)
+	@p='elements/dash_demux$(EXEEXT)'; \
+	b='elements/dash_demux'; \
+	$(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+	--log-file $$b.log --trs-file $$b.trs \
+	$(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+	"$$tst" $(AM_TESTS_FD_REDIRECT)
 elements/faac.log: elements/faac$(EXEEXT)
 	@p='elements/faac$(EXEEXT)'; \
 	b='elements/faac'; \
@@ -3298,6 +3754,13 @@
 	--log-file $$b.log --trs-file $$b.trs \
 	$(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
 	"$$tst" $(AM_TESTS_FD_REDIRECT)
+elements/mssdemux.log: elements/mssdemux$(EXEEXT)
+	@p='elements/mssdemux$(EXEEXT)'; \
+	b='elements/mssdemux'; \
+	$(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+	--log-file $$b.log --trs-file $$b.trs \
+	$(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+	"$$tst" $(AM_TESTS_FD_REDIRECT)
 elements/ofa.log: elements/ofa$(EXEEXT)
 	@p='elements/ofa$(EXEEXT)'; \
 	b='elements/ofa'; \
@@ -3326,13 +3789,6 @@
 	--log-file $$b.log --trs-file $$b.trs \
 	$(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
 	"$$tst" $(AM_TESTS_FD_REDIRECT)
-elements/opus.log: elements/opus$(EXEEXT)
-	@p='elements/opus$(EXEEXT)'; \
-	b='elements/opus'; \
-	$(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
-	--log-file $$b.log --trs-file $$b.trs \
-	$(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
-	"$$tst" $(AM_TESTS_FD_REDIRECT)
 elements/curlhttpsink.log: elements/curlhttpsink$(EXEEXT)
 	@p='elements/curlhttpsink$(EXEEXT)'; \
 	b='elements/curlhttpsink'; \
@@ -3382,6 +3838,13 @@
 	--log-file $$b.log --trs-file $$b.trs \
 	$(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
 	"$$tst" $(AM_TESTS_FD_REDIRECT)
+elements/videoframe-audiolevel.log: elements/videoframe-audiolevel$(EXEEXT)
+	@p='elements/videoframe-audiolevel$(EXEEXT)'; \
+	b='elements/videoframe-audiolevel'; \
+	$(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+	--log-file $$b.log --trs-file $$b.trs \
+	$(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+	"$$tst" $(AM_TESTS_FD_REDIRECT)
 elements/autoconvert.log: elements/autoconvert$(EXEEXT)
 	@p='elements/autoconvert$(EXEEXT)'; \
 	b='elements/autoconvert'; \
@@ -3417,13 +3880,6 @@
 	--log-file $$b.log --trs-file $$b.trs \
 	$(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
 	"$$tst" $(AM_TESTS_FD_REDIRECT)
-elements/baseaudiovisualizer.log: elements/baseaudiovisualizer$(EXEEXT)
-	@p='elements/baseaudiovisualizer$(EXEEXT)'; \
-	b='elements/baseaudiovisualizer'; \
-	$(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
-	--log-file $$b.log --trs-file $$b.trs \
-	$(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
-	"$$tst" $(AM_TESTS_FD_REDIRECT)
 elements/camerabin.log: elements/camerabin$(EXEEXT)
 	@p='elements/camerabin$(EXEEXT)'; \
 	b='elements/camerabin'; \
@@ -3508,13 +3964,6 @@
 	--log-file $$b.log --trs-file $$b.trs \
 	$(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
 	"$$tst" $(AM_TESTS_FD_REDIRECT)
-elements/mpg123audiodec.log: elements/mpg123audiodec$(EXEEXT)
-	@p='elements/mpg123audiodec$(EXEEXT)'; \
-	b='elements/mpg123audiodec'; \
-	$(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
-	--log-file $$b.log --trs-file $$b.trs \
-	$(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
-	"$$tst" $(AM_TESTS_FD_REDIRECT)
 elements/mxfdemux.log: elements/mxfdemux$(EXEEXT)
 	@p='elements/mxfdemux$(EXEEXT)'; \
 	b='elements/mxfdemux'; \
@@ -3529,6 +3978,13 @@
 	--log-file $$b.log --trs-file $$b.trs \
 	$(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
 	"$$tst" $(AM_TESTS_FD_REDIRECT)
+elements/netsim.log: elements/netsim$(EXEEXT)
+	@p='elements/netsim$(EXEEXT)'; \
+	b='elements/netsim'; \
+	$(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+	--log-file $$b.log --trs-file $$b.trs \
+	$(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+	"$$tst" $(AM_TESTS_FD_REDIRECT)
 elements/pcapparse.log: elements/pcapparse$(EXEEXT)
 	@p='elements/pcapparse$(EXEEXT)'; \
 	b='elements/pcapparse'; \
@@ -3536,9 +3992,16 @@
 	--log-file $$b.log --trs-file $$b.trs \
 	$(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
 	"$$tst" $(AM_TESTS_FD_REDIRECT)
-elements/rtponvif.log: elements/rtponvif$(EXEEXT)
-	@p='elements/rtponvif$(EXEEXT)'; \
-	b='elements/rtponvif'; \
+elements/rtponvifparse.log: elements/rtponvifparse$(EXEEXT)
+	@p='elements/rtponvifparse$(EXEEXT)'; \
+	b='elements/rtponvifparse'; \
+	$(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+	--log-file $$b.log --trs-file $$b.trs \
+	$(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+	"$$tst" $(AM_TESTS_FD_REDIRECT)
+elements/rtponviftimestamp.log: elements/rtponviftimestamp$(EXEEXT)
+	@p='elements/rtponviftimestamp$(EXEEXT)'; \
+	b='elements/rtponviftimestamp'; \
 	$(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
 	--log-file $$b.log --trs-file $$b.trs \
 	$(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
@@ -3697,6 +4160,20 @@
 	--log-file $$b.log --trs-file $$b.trs \
 	$(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
 	"$$tst" $(AM_TESTS_FD_REDIRECT)
+libs/gstglquery.log: libs/gstglquery$(EXEEXT)
+	@p='libs/gstglquery$(EXEEXT)'; \
+	b='libs/gstglquery'; \
+	$(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+	--log-file $$b.log --trs-file $$b.trs \
+	$(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+	"$$tst" $(AM_TESTS_FD_REDIRECT)
+libs/gstglsl.log: libs/gstglsl$(EXEEXT)
+	@p='libs/gstglsl$(EXEEXT)'; \
+	b='libs/gstglsl'; \
+	$(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+	--log-file $$b.log --trs-file $$b.trs \
+	$(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+	"$$tst" $(AM_TESTS_FD_REDIRECT)
 elements/glimagesink.log: elements/glimagesink$(EXEEXT)
 	@p='elements/glimagesink$(EXEEXT)'; \
 	b='elements/glimagesink'; \
@@ -3711,6 +4188,20 @@
 	--log-file $$b.log --trs-file $$b.trs \
 	$(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
 	"$$tst" $(AM_TESTS_FD_REDIRECT)
+elements/hls_demux.log: elements/hls_demux$(EXEEXT)
+	@p='elements/hls_demux$(EXEEXT)'; \
+	b='elements/hls_demux'; \
+	$(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+	--log-file $$b.log --trs-file $$b.trs \
+	$(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+	"$$tst" $(AM_TESTS_FD_REDIRECT)
+libs/player.log: libs/player$(EXEEXT)
+	@p='libs/player$(EXEEXT)'; \
+	b='libs/player'; \
+	$(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+	--log-file $$b.log --trs-file $$b.trs \
+	$(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+	"$$tst" $(AM_TESTS_FD_REDIRECT)
 .test.log:
 	@p='$<'; \
 	$(am__set_b); \
@@ -3913,31 +4404,26 @@
 # if the test fails, run it again at at least debug level 2
 %.check: %
 	@$(AM_TESTS_ENVIRONMENT)					\
-	CK_DEFAULT_TIMEOUT=20					\
 	$* ||							\
 	$(AM_TESTS_ENVIRONMENT)					\
 	GST_DEBUG=$$GST_DEBUG,*:2				\
-	CK_DEFAULT_TIMEOUT=20					\
 	$*
 
 # just like 'check', but don't run it again if it fails (useful for debugging)
 %.check-norepeat: %
 	@$(AM_TESTS_ENVIRONMENT)					\
-	CK_DEFAULT_TIMEOUT=20					\
 	$*
 
 # run any given test in a loop
 %.torture: %
 	@for i in `seq 1 $(LOOPS)`; do				\
 	$(AM_TESTS_ENVIRONMENT)					\
-	CK_DEFAULT_TIMEOUT=20					\
 	$*; done
 
 # run any given test in an infinite loop
 %.forever: %
 	@while true; do						\
 	$(AM_TESTS_ENVIRONMENT)					\
-	CK_DEFAULT_TIMEOUT=20					\
 	$* || break; done
 
 # valgrind any given test by running make test.valgrind
@@ -3953,7 +4439,7 @@
 	--show-possibly-lost=no                                 \
 	--leak-resolution=high --num-callers=20			\
 	./$* 2>&1 | tee $$valgrind_log ;			\
-	if grep "==" $$valgrind_log > /dev/null 2>&1; then	\
+	if grep "^==" $$valgrind_log > /dev/null 2>&1; then	\
 	    rm $$valgrind_log;					\
 	    exit 1;						\
 	fi ;							\
@@ -4145,6 +4631,13 @@
 clean-local: clean-local-check
 distclean-local: distclean-local-orc
 
+@WITH_GST_PLAYER_TESTS_TRUE@$(PLAYER_MEDIA_FILES):
+@WITH_GST_PLAYER_TESTS_TRUE@	$(MKDIR_P) media
+@WITH_GST_PLAYER_TESTS_TRUE@	$(WGET) -c http://gstreamer.freedesktop.org/data/media/small/$(subst media/,,$@) -O media/$(subst media/,,$@)
+
+@WITH_GST_PLAYER_TESTS_TRUE@libs/player_dummy.c: $(PLAYER_MEDIA_FILES)
+@WITH_GST_PLAYER_TESTS_TRUE@	touch libs/player_dummy.c
+
 orc/bayer.c: $(top_srcdir)/gst/bayer/gstbayerorc.orc
 	$(MKDIR_P) orc
 	$(ORCC) --test -o $@ $<
diff --git a/tests/check/elements/adaptive_demux_common.c b/tests/check/elements/adaptive_demux_common.c
new file mode 100644
index 0000000..44fd050
--- /dev/null
+++ b/tests/check/elements/adaptive_demux_common.c
@@ -0,0 +1,511 @@
+/* A set of utility functions that are common between elements
+ * based upon GstAdaptiveDemux
+ *
+ * Copyright (c) <2015> YouView TV Ltd
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#include <gst/check/gstcheck.h>
+#include "adaptive_demux_engine.h"
+#include "adaptive_demux_common.h"
+
+#define GST_TEST_HTTP_SRC_NAME            "testhttpsrc"
+
+struct _GstAdaptiveDemuxTestCaseClass
+{
+  GObjectClass parent_class;
+};
+
+#define gst_adaptive_demux_test_case_parent_class parent_class
+
+static void gst_adaptive_demux_test_case_dispose (GObject * object);
+static void gst_adaptive_demux_test_case_finalize (GObject * object);
+static void gst_adaptive_demux_test_case_clear (GstAdaptiveDemuxTestCase *
+    testData);
+
+G_DEFINE_TYPE (GstAdaptiveDemuxTestCase, gst_adaptive_demux_test_case,
+    G_TYPE_OBJECT);
+
+static void
+gst_adaptive_demux_test_case_class_init (GstAdaptiveDemuxTestCaseClass * klass)
+{
+  GObjectClass *object = G_OBJECT_CLASS (klass);
+
+  object->dispose = gst_adaptive_demux_test_case_dispose;
+  object->finalize = gst_adaptive_demux_test_case_finalize;
+}
+
+static void
+gst_adaptive_demux_test_case_init (GstAdaptiveDemuxTestCase * testData)
+{
+  testData->output_streams = NULL;
+  testData->test_task = NULL;
+  g_rec_mutex_init (&testData->test_task_lock);
+  g_mutex_init (&testData->test_task_state_lock);
+  g_cond_init (&testData->test_task_state_cond);
+  gst_adaptive_demux_test_case_clear (testData);
+}
+
+static void
+gst_adaptive_demux_test_case_clear (GstAdaptiveDemuxTestCase * testData)
+{
+  if (testData->output_streams) {
+    g_list_free (testData->output_streams);
+    testData->output_streams = NULL;
+  }
+  testData->count_of_finished_streams = 0;
+  if (testData->test_task) {
+    gst_task_stop (testData->test_task);
+    gst_task_join (testData->test_task);
+    gst_object_unref (testData->test_task);
+    testData->test_task = NULL;
+  }
+  testData->signal_context = NULL;
+  testData->test_task_state = TEST_TASK_STATE_NOT_STARTED;
+  testData->threshold_for_seek = 0;
+  gst_event_replace (&testData->seek_event, NULL);
+  testData->signal_context = NULL;
+}
+
+
+static void
+gst_adaptive_demux_test_case_dispose (GObject * object)
+{
+  GstAdaptiveDemuxTestCase *testData = GST_ADAPTIVE_DEMUX_TEST_CASE (object);
+
+  gst_adaptive_demux_test_case_clear (testData);
+
+  GST_CALL_PARENT (G_OBJECT_CLASS, dispose, (object));
+}
+
+static void
+gst_adaptive_demux_test_case_finalize (GObject * object)
+{
+  GstAdaptiveDemuxTestCase *testData = GST_ADAPTIVE_DEMUX_TEST_CASE (object);
+
+  g_cond_clear (&testData->test_task_state_cond);
+  g_mutex_clear (&testData->test_task_state_lock);
+  g_rec_mutex_clear (&testData->test_task_lock);
+  if (testData->test_task) {
+    gst_task_stop (testData->test_task);
+    gst_task_join (testData->test_task);
+    gst_object_unref (testData->test_task);
+    testData->test_task = NULL;
+  }
+  if (testData->output_streams) {
+    g_list_free (testData->output_streams);
+    testData->output_streams = NULL;
+  }
+
+  GST_CALL_PARENT (G_OBJECT_CLASS, finalize, (object));
+}
+
+/**
+ * gst_adaptive_demux_test_case_new:
+ *
+ * Creates a new #GstAdaptiveDemuxTestCase. Free with g_object_unref().
+ *
+ * Returns: (transfer full): a new #GstAdaptiveDemuxTestCase
+ */
+GstAdaptiveDemuxTestCase *
+gst_adaptive_demux_test_case_new (void)
+{
+  return g_object_newv (GST_TYPE_ADAPTIVE_DEMUX_TEST_CASE, 0, NULL);
+}
+
+
+GstAdaptiveDemuxTestExpectedOutput *
+gst_adaptive_demux_test_find_test_data_by_stream (GstAdaptiveDemuxTestCase *
+    testData, GstAdaptiveDemuxTestOutputStream * stream, guint * index)
+{
+  gchar *pad_name;
+  GstAdaptiveDemuxTestExpectedOutput *ret = NULL;
+  guint count = 0;
+
+  pad_name = gst_pad_get_name (stream->pad);
+  fail_unless (pad_name != NULL);
+  for (GList * walk = testData->output_streams; walk; walk = g_list_next (walk)) {
+    GstAdaptiveDemuxTestExpectedOutput *td = walk->data;
+    if (strcmp (td->name, pad_name) == 0) {
+      ret = td;
+      if (index)
+        *index = count;
+    }
+    ++count;
+  }
+  g_free (pad_name);
+  return ret;
+}
+
+/* function to validate data received by AppSink */
+gboolean
+gst_adaptive_demux_test_check_received_data (GstAdaptiveDemuxTestEngine *
+    engine, GstAdaptiveDemuxTestOutputStream * stream, GstBuffer * buffer,
+    gpointer user_data)
+{
+  GstMapInfo info;
+  guint pattern;
+  guint64 streamOffset;
+  GstAdaptiveDemuxTestCase *testData = GST_ADAPTIVE_DEMUX_TEST_CASE (user_data);
+  GstAdaptiveDemuxTestExpectedOutput *testOutputStreamData;
+
+  fail_unless (stream != NULL);
+  fail_unless (engine->pipeline != NULL);
+  testOutputStreamData =
+      gst_adaptive_demux_test_find_test_data_by_stream (testData, stream, NULL);
+  fail_unless (testOutputStreamData != NULL);
+  streamOffset = stream->segment_start + stream->segment_received_size;
+  if (testOutputStreamData->expected_data) {
+    gsize size = gst_buffer_get_size (buffer);
+    if (gst_buffer_memcmp (buffer, 0,
+            &testOutputStreamData->expected_data[streamOffset], size) == 0) {
+      return TRUE;
+    }
+    /* If buffers do not match, fall back to a slower byte-based check
+       so that the test can output the position where the received data
+       diverges from expected_data
+     */
+  }
+
+  gst_buffer_map (buffer, &info, GST_MAP_READ);
+
+  GST_DEBUG
+      ("segment_start = %" G_GUINT64_FORMAT " segment_received_size = %"
+      G_GUINT64_FORMAT " bufferSize=%d",
+      stream->segment_start, stream->segment_received_size, (gint) info.size);
+
+  pattern = streamOffset - streamOffset % sizeof (pattern);
+  for (guint64 i = 0; i != info.size; ++i) {
+    guint received = info.data[i];
+    guint expected;
+
+    if (testOutputStreamData->expected_data) {
+      fail_unless (streamOffset + i < testOutputStreamData->expected_size);
+      expected = testOutputStreamData->expected_data[streamOffset + i];
+    } else {
+      gchar pattern_byte_to_read;
+
+      pattern_byte_to_read = (streamOffset + i) % sizeof (pattern);
+      if (pattern_byte_to_read == 0) {
+        pattern = streamOffset + i;
+      }
+
+      expected = (pattern >> (pattern_byte_to_read * 8)) & 0xFF;
+#if 0
+      GST_DEBUG
+          ("received '0x%02x' expected '0x%02x' offset %" G_GUINT64_FORMAT
+          " pattern=%08x byte_to_read=%d",
+          received, expected, i, pattern, pattern_byte_to_read);
+#endif
+    }
+
+    fail_unless (received == expected,
+        "output validation failed: received '0x%02x' expected '0x%02x' byte %"
+        G_GUINT64_FORMAT " offset=%" G_GUINT64_FORMAT "\n", received, expected,
+        i, streamOffset);
+  }
+
+  gst_buffer_unmap (buffer, &info);
+  return TRUE;
+}
+
+/* function to check total size of data received by AppSink
+ * will be called when AppSink receives eos.
+ */
+void
+gst_adaptive_demux_test_check_size_of_received_data (GstAdaptiveDemuxTestEngine
+    * engine, GstAdaptiveDemuxTestOutputStream * stream, gpointer user_data)
+{
+  GstAdaptiveDemuxTestCase *testData = GST_ADAPTIVE_DEMUX_TEST_CASE (user_data);
+  GstAdaptiveDemuxTestExpectedOutput *testOutputStreamData;
+
+  testOutputStreamData =
+      gst_adaptive_demux_test_find_test_data_by_stream (testData, stream, NULL);
+  fail_unless (testOutputStreamData != NULL);
+
+  fail_unless (stream->total_received_size ==
+      testOutputStreamData->expected_size,
+      "size validation failed, expected %d received %d",
+      testOutputStreamData->expected_size, stream->total_received_size);
+  testData->count_of_finished_streams++;
+  if (testData->count_of_finished_streams ==
+      g_list_length (testData->output_streams)) {
+    g_main_loop_quit (engine->loop);
+  }
+}
+
+typedef struct _SeekTaskContext
+{
+  GstElement *pipeline;
+  GstTask *task;
+  GstEvent *seek_event;
+} SeekTaskContext;
+
+/* function to generate a seek event. Will be run in a separate thread */
+static void
+testSeekTaskDoSeek (gpointer user_data)
+{
+  SeekTaskContext *context = (SeekTaskContext *) user_data;
+  GstTask *task;
+
+  GST_DEBUG ("testSeekTaskDoSeek calling seek");
+
+  fail_unless (GST_IS_EVENT (context->seek_event));
+  fail_unless (GST_EVENT_TYPE (context->seek_event) == GST_EVENT_SEEK);
+
+  if (!gst_element_send_event (GST_ELEMENT (context->pipeline),
+          context->seek_event))
+    fail ("Seek failed!\n");
+  GST_DEBUG ("seek ok");
+  task = context->task;
+  g_slice_free (SeekTaskContext, context);
+  gst_task_stop (task);
+}
+
+/* function to be called during seek test when demux sends data to AppSink
+ * It monitors the data sent and after a while will generate a seek request.
+ */
+static gboolean
+testSeekAdaptiveDemuxSendsData (GstAdaptiveDemuxTestEngine * engine,
+    GstAdaptiveDemuxTestOutputStream * stream,
+    GstBuffer * buffer, gpointer user_data)
+{
+  GstAdaptiveDemuxTestCase *testData = GST_ADAPTIVE_DEMUX_TEST_CASE (user_data);
+  SeekTaskContext *seekContext;
+  GstAdaptiveDemuxTestExpectedOutput *testOutputStreamData;
+  guint index = 0;
+
+  testOutputStreamData =
+      gst_adaptive_demux_test_find_test_data_by_stream (testData, stream,
+      &index);
+  fail_unless (testOutputStreamData != NULL);
+  /* first entry in testData->output_streams is the
+     PAD on which to perform the seek */
+  if (index == 0 &&
+      testData->test_task == NULL &&
+      (stream->total_received_size + stream->segment_received_size) >=
+      testData->threshold_for_seek) {
+    GstSeekFlags seek_flags;
+
+    testData->threshold_for_seek =
+        stream->total_received_size + stream->segment_received_size;
+
+    gst_event_parse_seek (testData->seek_event, NULL, NULL, &seek_flags, NULL,
+        NULL, NULL, NULL);
+    if (seek_flags & GST_SEEK_FLAG_FLUSH)
+      testOutputStreamData->expected_size += testData->threshold_for_seek;
+
+    GST_DEBUG ("starting seek task");
+
+    g_mutex_lock (&testData->test_task_state_lock);
+    testData->test_task_state =
+        TEST_TASK_STATE_WAITING_FOR_TESTSRC_STATE_CHANGE;
+    g_mutex_unlock (&testData->test_task_state_lock);
+
+    seekContext = g_slice_new (SeekTaskContext);
+    seekContext->pipeline = engine->pipeline;
+    seekContext->seek_event = gst_event_ref (testData->seek_event);
+    testData->test_task = seekContext->task =
+        gst_task_new ((GstTaskFunction) testSeekTaskDoSeek, seekContext, NULL);
+    gst_task_set_lock (testData->test_task, &testData->test_task_lock);
+    gst_task_start (testData->test_task);
+
+    GST_DEBUG ("seek task started");
+
+    if (seek_flags & GST_SEEK_FLAG_FLUSH) {
+      g_mutex_lock (&testData->test_task_state_lock);
+
+      GST_DEBUG ("waiting for seek task to change state on testsrc");
+
+      /* wait for test_task to run, send a flush start event to AppSink
+       * and change the testhttpsrc element state from PLAYING to PAUSED
+       */
+      while (testData->test_task_state ==
+          TEST_TASK_STATE_WAITING_FOR_TESTSRC_STATE_CHANGE) {
+        g_cond_wait (&testData->test_task_state_cond,
+            &testData->test_task_state_lock);
+      }
+      g_mutex_unlock (&testData->test_task_state_lock);
+      /* we can continue now, but this buffer will be rejected by AppSink
+       * because it is in flushing mode
+       */
+      GST_DEBUG ("seek task changed state on testsrc, resuming");
+    }
+  }
+
+  return TRUE;
+}
+
+static void
+testSeekAdaptiveAppSinkEvent (GstAdaptiveDemuxTestEngine * engine,
+    GstAdaptiveDemuxTestOutputStream * stream,
+    GstEvent * event, gpointer user_data)
+{
+  GstAdaptiveDemuxTestCase *testData = GST_ADAPTIVE_DEMUX_TEST_CASE (user_data);
+  GstAdaptiveDemuxTestExpectedOutput *testOutputStreamData;
+  guint index = 0;
+
+  testOutputStreamData =
+      gst_adaptive_demux_test_find_test_data_by_stream (testData, stream,
+      &index);
+  fail_unless (testOutputStreamData != NULL);
+
+  if (testData->seek_event && GST_EVENT_TYPE (event) == GST_EVENT_SEGMENT
+      && testOutputStreamData->post_seek_segment.format != GST_FORMAT_UNDEFINED
+      && gst_event_get_seqnum (event) ==
+      gst_event_get_seqnum (testData->seek_event)) {
+    const GstSegment *seek_segment;
+
+
+    gst_event_parse_segment (event, &seek_segment);
+    fail_unless (seek_segment->format ==
+        testOutputStreamData->post_seek_segment.format);
+    fail_unless (seek_segment->rate ==
+        testOutputStreamData->post_seek_segment.rate);
+    fail_unless (seek_segment->start ==
+        testOutputStreamData->post_seek_segment.start);
+    fail_unless (seek_segment->stop ==
+        testOutputStreamData->post_seek_segment.stop);
+    fail_unless (seek_segment->base ==
+        testOutputStreamData->post_seek_segment.base);
+    fail_unless (seek_segment->time ==
+        testOutputStreamData->post_seek_segment.time);
+
+    testOutputStreamData->segment_verification_needed = FALSE;
+  }
+}
+
+/* callback called when main_loop detects a state changed event */
+static void
+testSeekOnStateChanged (GstBus * bus, GstMessage * msg, gpointer user_data)
+{
+  GstAdaptiveDemuxTestCase *testData = GST_ADAPTIVE_DEMUX_TEST_CASE (user_data);
+  GstState old_state, new_state;
+  const char *srcName = GST_OBJECT_NAME (msg->src);
+
+  gst_message_parse_state_changed (msg, &old_state, &new_state, NULL);
+  GST_DEBUG ("Element %s changed state from %s to %s",
+      GST_OBJECT_NAME (msg->src),
+      gst_element_state_get_name (old_state),
+      gst_element_state_get_name (new_state));
+
+  if (strstr (srcName, "srcbin") == srcName &&
+      old_state == GST_STATE_PLAYING && new_state == GST_STATE_PAUSED) {
+    g_mutex_lock (&testData->test_task_state_lock);
+    if (testData->test_task_state ==
+        TEST_TASK_STATE_WAITING_FOR_TESTSRC_STATE_CHANGE) {
+      GST_DEBUG ("changing test_task_state");
+      testData->test_task_state = TEST_TASK_STATE_EXITING;
+      g_cond_signal (&testData->test_task_state_cond);
+    }
+    g_mutex_unlock (&testData->test_task_state_lock);
+  }
+}
+
+/*
+ * Issue a seek request after media segment has started to be downloaded
+ * on the first pad listed in GstAdaptiveDemuxTestOutputStreamData and the
+ * first chunk of at least one byte has already arrived in AppSink
+ */
+static void
+testSeekPreTestCallback (GstAdaptiveDemuxTestEngine * engine,
+    gpointer user_data)
+{
+  GstAdaptiveDemuxTestCase *testData = GST_ADAPTIVE_DEMUX_TEST_CASE (user_data);
+  GstBus *bus;
+
+  /* register a callback to listen for state change events */
+  bus = gst_pipeline_get_bus (GST_PIPELINE (engine->pipeline));
+  gst_bus_add_signal_watch (bus);
+  g_signal_connect (bus, "message::state-changed",
+      G_CALLBACK (testSeekOnStateChanged), testData);
+}
+
+static void
+testSeekPostTestCallback (GstAdaptiveDemuxTestEngine * engine,
+    gpointer user_data)
+{
+  GstAdaptiveDemuxTestCase *testData = GST_ADAPTIVE_DEMUX_TEST_CASE (user_data);
+  for (GList * walk = testData->output_streams; walk; walk = g_list_next (walk)) {
+    GstAdaptiveDemuxTestExpectedOutput *td = walk->data;
+
+    fail_if (td->segment_verification_needed);
+  }
+}
+
+/* function to check total size of data received by AppSink
+ * will be called when AppSink receives eos.
+ */
+void gst_adaptive_demux_test_download_error_size_of_received_data
+    (GstAdaptiveDemuxTestEngine * engine,
+    GstAdaptiveDemuxTestOutputStream * stream, gpointer user_data)
+{
+  GstAdaptiveDemuxTestCase *testData = GST_ADAPTIVE_DEMUX_TEST_CASE (user_data);
+  GstAdaptiveDemuxTestExpectedOutput *testOutputStreamData;
+
+  testOutputStreamData =
+      gst_adaptive_demux_test_find_test_data_by_stream (testData, stream, NULL);
+  fail_unless (testOutputStreamData != NULL);
+  /* expect to receive more than 0 */
+  fail_unless (stream->total_received_size > 0,
+      "size validation failed for %s, expected > 0, received %d",
+      testOutputStreamData->name, stream->total_received_size);
+
+  /* expect to receive less than file size */
+  fail_unless (stream->total_received_size <
+      testOutputStreamData->expected_size,
+      "size validation failed for %s, expected < %d received %d",
+      testOutputStreamData->name, testOutputStreamData->expected_size,
+      stream->total_received_size);
+  if (testData->count_of_finished_streams ==
+      g_list_length (testData->output_streams)) {
+    g_main_loop_quit (engine->loop);
+  }
+}
+
+void
+gst_adaptive_demux_test_seek (const gchar * element_name,
+    const gchar * manifest_uri, GstAdaptiveDemuxTestCase * testData)
+{
+  GstAdaptiveDemuxTestCallbacks cb = { 0 };
+  cb.appsink_received_data = gst_adaptive_demux_test_check_received_data;
+  cb.appsink_eos = gst_adaptive_demux_test_check_size_of_received_data;
+  cb.appsink_event = testSeekAdaptiveAppSinkEvent;
+  cb.pre_test = testSeekPreTestCallback;
+  cb.post_test = testSeekPostTestCallback;
+  cb.demux_sent_data = testSeekAdaptiveDemuxSendsData;
+  gst_adaptive_demux_test_run (element_name, manifest_uri, &cb, testData);
+  /* the call to g_object_unref of testData will clean up the seek task */
+}
+
+void
+gst_adaptive_demux_test_setup (void)
+{
+  GstRegistry *registry;
+  gboolean ret;
+
+  registry = gst_registry_get ();
+  ret = gst_test_http_src_register_plugin (registry, GST_TEST_HTTP_SRC_NAME);
+  fail_unless (ret);
+}
+
+void
+gst_adaptive_demux_test_teardown (void)
+{
+  gst_test_http_src_install_callbacks (NULL, NULL);
+  gst_test_http_src_set_default_blocksize (0);
+}
diff --git a/tests/check/elements/adaptive_demux_common.h b/tests/check/elements/adaptive_demux_common.h
new file mode 100644
index 0000000..fa8bde0
--- /dev/null
+++ b/tests/check/elements/adaptive_demux_common.h
@@ -0,0 +1,212 @@
+/* A set of utility functions that are common between elements
+ * based upon GstAdaptiveDemux
+ *
+ * Copyright (c) <2015> YouView TV Ltd
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifndef __GST_ADAPTIVE_DEMUX_COMMON_TEST_H__
+#define __GST_ADAPTIVE_DEMUX_COMMON_TEST_H__
+
+#include <gst/gst.h>
+#include "adaptive_demux_engine.h"
+
+G_BEGIN_DECLS
+
+#define GST_TYPE_ADAPTIVE_DEMUX_TEST_CASE \
+  (gst_adaptive_demux_test_case_get_type())
+#define GST_ADAPTIVE_DEMUX_TEST_CASE(obj) \
+  (G_TYPE_CHECK_INSTANCE_CAST((obj), GST_TYPE_ADAPTIVE_DEMUX_TEST_CASE, GstAdaptiveDemuxTestCase))
+#define GST_ADAPTIVE_DEMUX_TEST_CASE_CLASS(klass) \
+  (G_TYPE_CHECK_CLASS_CAST((klass), GST_TYPE_ADAPTIVE_DEMUX_TEST_CASE, GstAdaptiveDemuxTestCaseClass))
+#define GST_ADAPTIVE_DEMUX_TEST_CASE_GET_CLASS(obj) \
+  (G_TYPE_INSTANCE_GET_CLASS ((obj), GST_TYPE_ADAPTIVE_DEMUX_TEST_CASE, GstAdaptiveDemuxTestCaseClass))
+#define GST_IS_ADAPTIVE_DEMUX_TEST_CASE(obj) \
+  (G_TYPE_CHECK_INSTANCE_TYPE((obj), GST_TYPE_ADAPTIVE_DEMUX_TEST_CASE))
+#define GST_IS_ADAPTIVE_DEMUX_TEST_CASE_CLASS(klass) \
+  (G_TYPE_CHECK_CLASS_TYPE((klass), GST_TYPE_ADAPTIVE_DEMUX_TEST_CASE))
+
+/**
+ * TestTaskState:
+ * The seek test uses a separate task to perform the seek operation.
+ * After starting the task, the caller blocks until the seek task
+ * flushes the AppSink and changes the GstFakeSoupHTTPSrc element state from
+ * PLAYING to PAUSED.
+ * When that event is detected, the caller is allowed to resume.
+ * Any data that will be sent to AppSink after resume will be rejected because
+ * AppSink is in flushing mode.
+ */
+typedef enum
+{
+  TEST_TASK_STATE_NOT_STARTED,
+  TEST_TASK_STATE_WAITING_FOR_TESTSRC_STATE_CHANGE,
+  TEST_TASK_STATE_EXITING,
+} TestTaskState;
+
+/**
+ * GstAdaptiveDemuxTestExpectedOutput:
+ * Structure used to store output stream related data.
+ * It is used by the test during output validation.
+ * The fields are set by the testcase function prior
+ * to starting the test.
+ */
+typedef struct _GstAdaptiveDemuxTestExpectedOutput
+{
+  /* the name of the demux src pad generating this stream */
+  const char *name;
+  /* the expected size on this stream */
+  guint64 expected_size;
+  /* the expected data on this stream (optional) */
+  const guint8* expected_data;
+
+  GstSegment post_seek_segment;
+  gboolean segment_verification_needed;
+} GstAdaptiveDemuxTestExpectedOutput;
+
+typedef struct _GstAdaptiveDemuxTestCaseClass GstAdaptiveDemuxTestCaseClass;
+typedef struct _GstAdaptiveDemuxTestCase
+{
+  GObject parent;
+
+  /* output data used to validate the test
+   * list of GstAdaptiveDemuxTestExpectedOutput, one entry per stream
+   */
+  GList *output_streams; /*GList<GstAdaptiveDemuxTestExpectedOutput>*/
+
+  /* the number of streams that finished.
+   * Main thread will stop the pipeline when all streams are finished
+   * (i.e. count_of_finished_streams == g_list_length(output_streams) )
+   */
+  guint count_of_finished_streams;
+
+  /* taskTesk... is a set of variables that can be used by a test
+   * that needs to perform operations from another thread
+   * For example, it is used by the seek test to perform the seek
+   * operation
+   */
+  GstTask *test_task;
+  GRecMutex test_task_lock;
+  TestTaskState test_task_state;
+  GMutex test_task_state_lock;
+  GCond test_task_state_cond;
+
+  /* seek test will wait for this amount of bytes to be sent by 
+   * demux to AppSink before triggering a seek request
+   */
+  guint64 threshold_for_seek;
+  GstEvent *seek_event;
+
+  gpointer signal_context;
+} GstAdaptiveDemuxTestCase;
+
+/* high-level unit test functions */
+
+/**
+ * gst_adaptive_demux_test_setup:
+ * Causes the test HTTP src element to be registered
+ */
+void gst_adaptive_demux_test_setup (void);
+
+void gst_adaptive_demux_test_teardown (void);
+
+GType gst_adaptive_demux_test_case_get_type (void);
+
+/**
+ * gst_adaptive_demux_test_case_new: creates new #GstAdaptiveDemuxTestCase
+ * object. Use #g_object_unref to free.
+ */
+GstAdaptiveDemuxTestCase * gst_adaptive_demux_test_case_new (void) G_GNUC_MALLOC;
+
+/**
+ * gst_adaptive_demux_test_seek: test that element supports seeking
+ * @element_name: The name of the demux element (e.g. "dashdemux")
+ * @manifest_uri: The URI of the manifest to load
+ * @testData: The #GstAdaptiveDemuxTestCase that the test expects the
+ * demux element to produce.
+ * 
+ * Creates a pipeline and starts it. Once data is flowing, request a
+ * seek to almost the start of the stream.
+ */
+void gst_adaptive_demux_test_seek (const gchar * element_name,
+    const gchar * manifest_uri,
+    GstAdaptiveDemuxTestCase *testData);
+
+/* Utility functions for use within a unit test */
+
+/**
+ * gst_adaptive_demux_test_check_size_of_received_data:
+ * @engine: The #GstAdaptiveDemuxTestEngine that caused this callback
+ * @stream: The #GstAdaptiveDemuxTestOutputStream that caused this callback
+ * @user_data: A pointer to a #GstAdaptiveDemuxTestCase object
+ *
+ * This function can be used as an EOS callback to check that the
+ * size of received data equals expected_size. It should be used with
+ * a test that expects the entire file to be downloaded.
+ */
+void gst_adaptive_demux_test_check_size_of_received_data(
+    GstAdaptiveDemuxTestEngine *engine,
+    GstAdaptiveDemuxTestOutputStream * stream, gpointer user_data);
+
+/**
+ * gst_adaptive_demux_test_download_error_size_of_received_data:
+ * @engine: The #GstAdaptiveDemuxTestEngine that caused this callback
+ * @stream: The #GstAdaptiveDemuxTestOutputStream that caused this callback
+ * @user_data: A pointer to a #GstAdaptiveDemuxTestCase object
+ *
+ * This function can be used as an EOS callback to check that the
+ * size of received data is >0 && <expected_size. It should be used with
+ * a test that does not expect the entire file to be downloaded.
+ */
+void gst_adaptive_demux_test_download_error_size_of_received_data (
+    GstAdaptiveDemuxTestEngine *engine,
+    GstAdaptiveDemuxTestOutputStream * stream, gpointer user_data);
+
+/**
+ * gst_adaptive_demux_test_check_received_data:
+ * @engine: The #GstAdaptiveDemuxTestEngine that caused this callback
+ * @stream: The #GstAdaptiveDemuxTestOutputStream that caused this callback
+ * @buffer: The #GstBuffer containing the data to check
+ * @user_data: A pointer to a #GstAdaptiveDemuxTestCase object
+ * Returns: TRUE if buffer contains the expected data.
+ *
+ * This function can be used as an appSinkGotData callback, to check
+ * that the contents of the received data matches the expected data
+ */
+gboolean gst_adaptive_demux_test_check_received_data (
+    GstAdaptiveDemuxTestEngine *engine,
+    GstAdaptiveDemuxTestOutputStream * stream,
+    GstBuffer * buffer,
+    gpointer user_data);
+
+/**
+ * gst_adaptive_demux_test_find_test_data_by_stream:
+ * @testData: The #GstAdaptiveDemuxTestCase object that contains the
+ * output_streams list to search
+ * @stream: the #GstAdaptiveDemuxTestOutputStream to search for
+ * @index: (out) (allow none) the index of the entry in output_streams
+ * Returns: The #GstAdaptiveDemuxTestExpectedOutput that matches @stream, or
+ * %NULL if not found
+ *
+ * Search the list of output test data for the entry that matches stream.
+ */
+GstAdaptiveDemuxTestExpectedOutput * gst_adaptive_demux_test_find_test_data_by_stream (
+    GstAdaptiveDemuxTestCase * testData,
+    GstAdaptiveDemuxTestOutputStream * stream,
+    guint * index);
+
+G_END_DECLS
+#endif /* __GST_ADAPTIVE_DEMUX_COMMON_TEST_H__ */
diff --git a/tests/check/elements/adaptive_demux_engine.c b/tests/check/elements/adaptive_demux_engine.c
new file mode 100644
index 0000000..b571fe3
--- /dev/null
+++ b/tests/check/elements/adaptive_demux_engine.c
@@ -0,0 +1,525 @@
+/* A generic test engine for elements based upon GstAdaptiveDemux
+ *
+ * Copyright (c) <2015> YouView TV Ltd
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#include <gst/check/gstcheck.h>
+#include "adaptive_demux_engine.h"
+
+typedef struct _GstAdaptiveDemuxTestEnginePrivate
+{
+  GstAdaptiveDemuxTestEngine engine;
+  const GstAdaptiveDemuxTestCallbacks *callbacks;
+  gpointer user_data;
+} GstAdaptiveDemuxTestEnginePrivate;
+
+
+#define GST_TEST_GET_LOCK(d)  (&(((GstAdaptiveDemuxTestEnginePrivate*)(d))->engine.lock))
+#define GST_TEST_LOCK(d)      g_mutex_lock (GST_TEST_GET_LOCK (d))
+#define GST_TEST_UNLOCK(d)    g_mutex_unlock (GST_TEST_GET_LOCK (d))
+
+static void
+adaptive_demux_engine_stream_state_finalize (gpointer data)
+{
+  GstAdaptiveDemuxTestOutputStream *stream =
+      (GstAdaptiveDemuxTestOutputStream *) data;
+  if (stream->appsink)
+    gst_object_unref (stream->appsink);
+  if (stream->pad)
+    gst_object_unref (stream->pad);
+  if (stream->internal_pad)
+    gst_object_unref (stream->internal_pad);
+  g_slice_free (GstAdaptiveDemuxTestOutputStream, stream);
+}
+
+/* get the testOutput entry in testData corresponding to the given AppSink */
+static GstAdaptiveDemuxTestOutputStream *
+getTestOutputDataByAppsink (GstAdaptiveDemuxTestEnginePrivate * priv,
+    GstAppSink * appsink)
+{
+  for (guint i = 0; i < priv->engine.output_streams->len; ++i) {
+    GstAdaptiveDemuxTestOutputStream *state;
+    state = g_ptr_array_index (priv->engine.output_streams, i);
+    if (state->appsink == appsink) {
+      return state;
+    }
+  }
+  ck_abort_msg ("cannot find appsink %p in the output data", appsink);
+  return NULL;
+}
+
+/* get the output stream entry in corresponding to the given Pad */
+static GstAdaptiveDemuxTestOutputStream *
+getTestOutputDataByPad (GstAdaptiveDemuxTestEnginePrivate * priv,
+    GstPad * pad, gboolean abort_if_not_found)
+{
+  for (guint i = 0; i < priv->engine.output_streams->len; ++i) {
+    GstAdaptiveDemuxTestOutputStream *stream;
+    stream = g_ptr_array_index (priv->engine.output_streams, i);
+    if (stream->internal_pad == pad || stream->pad == pad) {
+      return stream;
+    }
+  }
+  if (abort_if_not_found)
+    ck_abort_msg ("cannot find pad %p in the output data", pad);
+  return NULL;
+}
+
+/* callback called when AppSink receives data */
+static GstFlowReturn
+on_appSinkNewSample (GstAppSink * appsink, gpointer user_data)
+{
+  GstAdaptiveDemuxTestEnginePrivate *priv =
+      (GstAdaptiveDemuxTestEnginePrivate *) user_data;
+  GstAdaptiveDemuxTestEngine *engine;
+  GstAdaptiveDemuxTestOutputStream *testOutputStream = NULL;
+  GstSample *sample;
+  GstBuffer *buffer;
+  gboolean ret = TRUE;
+
+  fail_unless (priv != NULL);
+  GST_TEST_LOCK (priv);
+  engine = &priv->engine;
+  testOutputStream = getTestOutputDataByAppsink (priv, appsink);
+
+  sample = gst_app_sink_pull_sample (appsink);
+  fail_unless (sample != NULL);
+  buffer = gst_sample_get_buffer (sample);
+  fail_unless (buffer != NULL);
+
+  /* call the test callback, if registered */
+  if (priv->callbacks->appsink_received_data)
+    ret = priv->callbacks->appsink_received_data (engine,
+        testOutputStream, buffer, priv->user_data);
+
+  testOutputStream->segment_received_size += gst_buffer_get_size (buffer);
+
+  gst_sample_unref (sample);
+
+  GST_TEST_UNLOCK (priv);
+
+  if (!ret)
+    return GST_FLOW_EOS;
+
+  return GST_FLOW_OK;
+}
+
+/* callback called when AppSink receives eos */
+static void
+on_appSinkEOS (GstAppSink * appsink, gpointer user_data)
+{
+  GstAdaptiveDemuxTestEnginePrivate *priv =
+      (GstAdaptiveDemuxTestEnginePrivate *) user_data;
+  GstAdaptiveDemuxTestOutputStream *testOutputStream = NULL;
+
+  fail_unless (priv != NULL);
+  GST_TEST_LOCK (priv);
+  testOutputStream = getTestOutputDataByAppsink (priv, appsink);
+
+  testOutputStream->total_received_size +=
+      testOutputStream->segment_received_size;
+  testOutputStream->segment_received_size = 0;
+
+  if (priv->callbacks->appsink_eos)
+    priv->callbacks->appsink_eos (&priv->engine,
+        testOutputStream, priv->user_data);
+
+  GST_TEST_UNLOCK (priv);
+}
+
+static GstPadProbeReturn
+on_appsink_event (GstPad * pad, GstPadProbeInfo * info, gpointer data)
+{
+  GstAdaptiveDemuxTestEnginePrivate *priv =
+      (GstAdaptiveDemuxTestEnginePrivate *) data;
+  GstAdaptiveDemuxTestOutputStream *stream = NULL;
+  GstEvent *event;
+
+  event = GST_PAD_PROBE_INFO_EVENT (info);
+  GST_DEBUG ("Received event %" GST_PTR_FORMAT " on pad %" GST_PTR_FORMAT,
+      event, pad);
+
+  if (priv->callbacks->appsink_event) {
+    GstPad *stream_pad = gst_pad_get_peer (pad);
+    fail_unless (stream_pad != NULL);
+
+    GST_TEST_LOCK (priv);
+    stream = getTestOutputDataByPad (priv, stream_pad, TRUE);
+    GST_TEST_UNLOCK (priv);
+    gst_object_unref (stream_pad);
+    priv->callbacks->appsink_event (&priv->engine, stream, event,
+        priv->user_data);
+  }
+
+  return GST_PAD_PROBE_OK;
+}
+
+
+/* callback called when demux sends data to AppSink */
+static GstPadProbeReturn
+on_demux_sent_data (GstPad * pad, GstPadProbeInfo * info, gpointer data)
+{
+  GstAdaptiveDemuxTestEnginePrivate *priv =
+      (GstAdaptiveDemuxTestEnginePrivate *) data;
+  GstAdaptiveDemuxTestOutputStream *stream = NULL;
+  GstBuffer *buffer;
+
+  buffer = GST_PAD_PROBE_INFO_BUFFER (info);
+
+  GST_TEST_LOCK (priv);
+  stream = getTestOutputDataByPad (priv, pad, TRUE);
+  GST_TEST_UNLOCK (priv);
+
+  if (priv->callbacks->demux_sent_data) {
+    (*priv->callbacks->demux_sent_data) (&priv->engine,
+        stream, buffer, priv->user_data);
+  }
+
+  return GST_PAD_PROBE_OK;
+}
+
+/* callback called when demux receives events from GstFakeSoupHTTPSrc */
+static GstPadProbeReturn
+on_demuxReceivesEvent (GstPad * pad, GstPadProbeInfo * info, gpointer data)
+{
+  GstAdaptiveDemuxTestEnginePrivate *priv =
+      (GstAdaptiveDemuxTestEnginePrivate *) data;
+  GstAdaptiveDemuxTestOutputStream *stream = NULL;
+  GstEvent *event;
+  const GstSegment *segment;
+
+  event = GST_PAD_PROBE_INFO_EVENT (info);
+  GST_DEBUG ("Received event %" GST_PTR_FORMAT " on pad %" GST_PTR_FORMAT,
+      event, pad);
+
+  if (GST_EVENT_TYPE (event) == GST_EVENT_SEGMENT) {
+    /* a new segment will start arriving
+     * update segment_start used by pattern validation
+     */
+    gst_event_parse_segment (event, &segment);
+
+    GST_TEST_LOCK (priv);
+    stream = getTestOutputDataByPad (priv, pad, TRUE);
+    stream->total_received_size += stream->segment_received_size;
+    stream->segment_received_size = 0;
+    stream->segment_start = segment->start;
+    GST_TEST_UNLOCK (priv);
+  }
+
+  return GST_PAD_PROBE_OK;
+}
+
+
+static void
+on_demuxElementAdded (GstBin * demux, GstElement * element, gpointer user_data)
+{
+  GstAdaptiveDemuxTestEnginePrivate *priv =
+      (GstAdaptiveDemuxTestEnginePrivate *) user_data;
+  GstAdaptiveDemuxTestOutputStream *stream = NULL;
+  GstPad *internal_pad;
+  gchar *srcbin_name;
+  gint i;
+
+  srcbin_name = GST_ELEMENT_NAME (element);
+  GST_TEST_LOCK (priv);
+  for (i = 0; i < priv->engine.output_streams->len; i++) {
+    stream = g_ptr_array_index (priv->engine.output_streams, i);
+    if (strstr (srcbin_name, GST_PAD_NAME (stream->pad)) != NULL)
+      break;
+  }
+  fail_unless (stream != NULL);
+
+  /* keep the reference to the internal_pad.
+   * We will need it to identify the stream in the on_demuxReceivesEvent callback
+   */
+  if (stream->internal_pad) {
+    gst_pad_remove_probe (stream->internal_pad, stream->internal_pad_probe);
+    gst_object_unref (stream->internal_pad);
+  }
+  internal_pad = gst_element_get_static_pad (element, "src");
+  stream->internal_pad_probe =
+      gst_pad_add_probe (internal_pad, GST_PAD_PROBE_TYPE_EVENT_DOWNSTREAM,
+      (GstPadProbeCallback) on_demuxReceivesEvent, priv, NULL);
+  stream->internal_pad = internal_pad;
+  GST_TEST_UNLOCK (priv);
+
+}
+
+
+/* callback called when demux creates a src pad.
+ * We will create an AppSink to get the data
+ */
+static void
+on_demuxNewPad (GstElement * demux, GstPad * pad, gpointer user_data)
+{
+  GstAdaptiveDemuxTestEnginePrivate *priv =
+      (GstAdaptiveDemuxTestEnginePrivate *) user_data;
+  GstElement *pipeline;
+  GstElement *sink;
+  gboolean ret;
+  gchar *name;
+  GstPad *appsink_pad;
+  GstAppSinkCallbacks appSinkCallbacks;
+  GstAdaptiveDemuxTestOutputStream *stream;
+  GObjectClass *gobject_class;
+
+  fail_unless (priv != NULL);
+  name = gst_pad_get_name (pad);
+
+  stream = g_slice_new0 (GstAdaptiveDemuxTestOutputStream);
+  GST_DEBUG ("created pad %p", pad);
+
+  sink = gst_element_factory_make ("appsink", name);
+  g_free (name);
+  fail_unless (sink != NULL);
+
+  GST_TEST_LOCK (priv);
+
+  /* register the AppSink pointer in the test output data */
+  gst_object_ref (sink);
+  stream->appsink = GST_APP_SINK (sink);
+
+  appSinkCallbacks.eos = on_appSinkEOS;
+  appSinkCallbacks.new_preroll = NULL;
+  appSinkCallbacks.new_sample = on_appSinkNewSample;
+
+  gst_app_sink_set_callbacks (GST_APP_SINK (sink), &appSinkCallbacks, priv,
+      NULL);
+  appsink_pad = gst_element_get_static_pad (sink, "sink");
+  gst_pad_add_probe (appsink_pad,
+      GST_PAD_PROBE_TYPE_EVENT_DOWNSTREAM | GST_PAD_PROBE_TYPE_EVENT_FLUSH,
+      (GstPadProbeCallback) on_appsink_event, priv, NULL);
+  gst_object_unref (appsink_pad);
+
+  gst_pad_add_probe (pad, GST_PAD_PROBE_TYPE_BUFFER,
+      (GstPadProbeCallback) on_demux_sent_data, priv, NULL);
+  gobject_class = G_OBJECT_GET_CLASS (sink);
+  if (g_object_class_find_property (gobject_class, "sync")) {
+    GST_DEBUG ("Setting sync=FALSE on AppSink");
+    g_object_set (G_OBJECT (sink), "sync", FALSE, NULL);
+  }
+  stream->pad = gst_object_ref (pad);
+
+
+  g_ptr_array_add (priv->engine.output_streams, stream);
+  GST_TEST_UNLOCK (priv);
+
+  pipeline = GST_ELEMENT (gst_element_get_parent (demux));
+  fail_unless (pipeline != NULL);
+  ret = gst_bin_add (GST_BIN (pipeline), sink);
+  fail_unless_equals_int (ret, TRUE);
+  gst_object_unref (pipeline);
+  ret = gst_element_link (demux, sink);
+  fail_unless_equals_int (ret, TRUE);
+  ret = gst_element_sync_state_with_parent (sink);
+  fail_unless_equals_int (ret, TRUE);
+  GST_TEST_LOCK (priv);
+  if (priv->callbacks->demux_pad_added) {
+    priv->callbacks->demux_pad_added (&priv->engine, stream, priv->user_data);
+  }
+  GST_TEST_UNLOCK (priv);
+}
+
+/* callback called when demux removes a src pad.
+ * We remove the AppSink associated with this pad
+ */
+static void
+on_demuxPadRemoved (GstElement * demux, GstPad * pad, gpointer user_data)
+{
+  GstAdaptiveDemuxTestEnginePrivate *priv =
+      (GstAdaptiveDemuxTestEnginePrivate *) user_data;
+  GstAdaptiveDemuxTestOutputStream *stream = NULL;
+  GstStateChangeReturn ret;
+  GstState currentState, pending;
+  GstElement *appSink;
+
+  fail_unless (priv != NULL);
+
+  GST_DEBUG ("Pad removed: %" GST_PTR_FORMAT, pad);
+
+  GST_TEST_LOCK (priv);
+  stream = getTestOutputDataByPad (priv, pad, TRUE);
+  if (priv->callbacks->demux_pad_removed) {
+    priv->callbacks->demux_pad_removed (&priv->engine, stream, priv->user_data);
+  }
+  fail_unless (stream->appsink != NULL);
+  fail_unless (stream->internal_pad != NULL);
+  gst_object_unref (stream->internal_pad);
+  stream->internal_pad = NULL;
+  appSink = GST_ELEMENT (stream->appsink);
+  ret = gst_element_get_state (appSink, &currentState, &pending, 0);
+  if ((ret == GST_STATE_CHANGE_SUCCESS && currentState == GST_STATE_PLAYING)
+      || (ret == GST_STATE_CHANGE_ASYNC && pending == GST_STATE_PLAYING)) {
+    GST_DEBUG ("Changing AppSink element to PAUSED");
+    gst_element_set_state (appSink, GST_STATE_PAUSED);
+  }
+  GST_TEST_UNLOCK (priv);
+}
+
+/* callback called when main_loop detects an error message
+ * We will signal main loop to quit
+ */
+static void
+on_ErrorMessageOnBus (GstBus * bus, GstMessage * msg, gpointer user_data)
+{
+  GstAdaptiveDemuxTestEnginePrivate *priv =
+      (GstAdaptiveDemuxTestEnginePrivate *) user_data;
+  GError *err = NULL;
+  gchar *dbg_info = NULL;
+
+  gst_message_parse_error (msg, &err, &dbg_info);
+  GST_DEBUG ("ERROR from element %s: '%s'. Debugging info: %s",
+      GST_OBJECT_NAME (msg->src), err->message, (dbg_info) ? dbg_info : "none");
+  g_error_free (err);
+  g_free (dbg_info);
+
+  GST_TEST_LOCK (priv);
+
+  fail_unless (priv->callbacks->bus_error_message,
+      "unexpected error detected on bus");
+
+  priv->callbacks->bus_error_message (&priv->engine, msg, priv->user_data);
+
+  GST_TEST_UNLOCK (priv);
+}
+
+static gboolean
+start_pipeline_playing (gpointer user_data)
+{
+  GstAdaptiveDemuxTestEnginePrivate *priv =
+      (GstAdaptiveDemuxTestEnginePrivate *) user_data;
+  GstStateChangeReturn stateChange;
+
+  GST_DEBUG ("Moving pipeline to PLAYING state");
+  stateChange =
+      gst_element_set_state (priv->engine.pipeline, GST_STATE_PLAYING);
+  fail_unless (stateChange != GST_STATE_CHANGE_FAILURE);
+  GST_DEBUG ("PLAYING stateChange = %d", stateChange);
+  return FALSE;
+}
+
+/*
+ * Create a demux element, run a test using the input data and check
+ * the output data
+ */
+void
+gst_adaptive_demux_test_run (const gchar * element_name,
+    const gchar * manifest_uri,
+    const GstAdaptiveDemuxTestCallbacks * callbacks, gpointer user_data)
+{
+  GstBus *bus;
+  GstElement *demux;
+  GstElement *manifest_source;
+  gboolean ret;
+  GstStateChangeReturn stateChange;
+  GstAdaptiveDemuxTestEnginePrivate *priv;
+
+  priv = g_slice_new0 (GstAdaptiveDemuxTestEnginePrivate);
+  priv->engine.output_streams =
+      g_ptr_array_new_with_free_func
+      (adaptive_demux_engine_stream_state_finalize);
+  g_mutex_init (&priv->engine.lock);
+  priv->callbacks = callbacks;
+  priv->user_data = user_data;
+  priv->engine.loop = g_main_loop_new (NULL, TRUE);
+  fail_unless (priv->engine.loop != NULL);
+  GST_TEST_LOCK (priv);
+  priv->engine.pipeline = gst_pipeline_new ("pipeline");
+  fail_unless (priv->engine.pipeline != NULL);
+  GST_DEBUG ("created pipeline %" GST_PTR_FORMAT, priv->engine.pipeline);
+
+  /* register a callback to listen for error messages */
+  bus = gst_pipeline_get_bus (GST_PIPELINE (priv->engine.pipeline));
+  gst_bus_add_signal_watch_full (bus, G_PRIORITY_HIGH);
+  g_signal_connect (bus, "message::error",
+      G_CALLBACK (on_ErrorMessageOnBus), priv);
+
+  manifest_source =
+      gst_element_make_from_uri (GST_URI_SRC, manifest_uri, NULL, NULL);
+  fail_unless (manifest_source != NULL);
+  priv->engine.manifest_source = manifest_source;
+
+  demux = gst_check_setup_element (element_name);
+  fail_unless (demux != NULL);
+  priv->engine.demux = demux;
+  GST_DEBUG ("created demux %" GST_PTR_FORMAT, demux);
+
+  g_signal_connect (demux, "element-added", G_CALLBACK (on_demuxElementAdded),
+      priv);
+  g_signal_connect (demux, "pad-added", G_CALLBACK (on_demuxNewPad), priv);
+  g_signal_connect (demux, "pad-removed",
+      G_CALLBACK (on_demuxPadRemoved), priv);
+
+  gst_bin_add_many (GST_BIN (priv->engine.pipeline), manifest_source, demux,
+      NULL);
+  ASSERT_OBJECT_REFCOUNT (manifest_source, element_name, 1);
+  ASSERT_OBJECT_REFCOUNT (demux, element_name, 1);
+
+  ret = gst_element_link (manifest_source, demux);
+  fail_unless_equals_int (ret, TRUE);
+
+  /* call a test callback before we start the pipeline */
+  if (callbacks->pre_test)
+    (*callbacks->pre_test) (&priv->engine, priv->user_data);
+
+  GST_TEST_UNLOCK (priv);
+
+  GST_DEBUG ("Starting pipeline");
+  stateChange = gst_element_set_state (priv->engine.pipeline, GST_STATE_PAUSED);
+  fail_unless (stateChange != GST_STATE_CHANGE_FAILURE);
+  /* wait for completion of the move to PAUSED */
+  stateChange = gst_element_get_state (priv->engine.pipeline, NULL, NULL,
+      GST_CLOCK_TIME_NONE);
+  fail_unless (stateChange != GST_STATE_CHANGE_FAILURE);
+
+  g_idle_add ((GSourceFunc) start_pipeline_playing, priv);
+
+  /* block until a callback calls g_main_loop_quit (engine.loop) */
+  GST_DEBUG ("main thread waiting for streams to finish");
+  g_main_loop_run (priv->engine.loop);
+  GST_DEBUG ("main thread finished. Stopping pipeline");
+
+  /* no need to use gst_element_get_state as the move the GST_STATE_NULL
+     is always synchronous */
+  stateChange = gst_element_set_state (priv->engine.pipeline, GST_STATE_NULL);
+  fail_unless (stateChange != GST_STATE_CHANGE_FAILURE);
+
+  GST_TEST_LOCK (priv);
+
+  /* call a test callback after the stop of the pipeline */
+  if (callbacks->post_test)
+    (*callbacks->post_test) (&priv->engine, priv->user_data);
+
+  g_signal_handlers_disconnect_by_func (bus,
+      G_CALLBACK (on_ErrorMessageOnBus), priv);
+  gst_bus_remove_signal_watch (bus);
+  g_signal_handlers_disconnect_by_func (demux, G_CALLBACK (on_demuxNewPad),
+      priv);
+  g_signal_handlers_disconnect_by_func (demux, G_CALLBACK (on_demuxPadRemoved),
+      priv);
+
+  GST_DEBUG ("main thread pipeline stopped");
+  gst_object_unref (priv->engine.pipeline);
+  priv->engine.pipeline = NULL;
+  g_main_loop_unref (priv->engine.loop);
+  g_ptr_array_unref (priv->engine.output_streams);
+
+  GST_TEST_UNLOCK (priv);
+  g_mutex_clear (&priv->engine.lock);
+  g_slice_free (GstAdaptiveDemuxTestEnginePrivate, priv);
+}
diff --git a/tests/check/elements/adaptive_demux_engine.h b/tests/check/elements/adaptive_demux_engine.h
new file mode 100644
index 0000000..f715ecb
--- /dev/null
+++ b/tests/check/elements/adaptive_demux_engine.h
@@ -0,0 +1,188 @@
+/* A generic test engine for elements based upon GstAdaptiveDemux 
+ *
+ * Copyright (c) <2015> YouView TV Ltd
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifndef __GST_ADAPTIVE_DEMUX_TEST_ENGINE_H__
+#define __GST_ADAPTIVE_DEMUX_TEST_ENGINE_H__
+
+#include <gst/gst.h>
+#include <gst/app/gstappsink.h>
+#include "test_http_src.h"
+
+G_BEGIN_DECLS
+
+typedef struct _GstAdaptiveDemuxTestEngine GstAdaptiveDemuxTestEngine;
+
+typedef struct _GstAdaptiveDemuxTestOutputStream {
+  /* the GstAppSink element getting the data for this stream */
+  GstAppSink *appsink;
+  GstPad *pad;
+  /* the internal pad of adaptivedemux element used to send data to the GstAppSink element */
+  GstPad *internal_pad;
+  gulong internal_pad_probe;
+  /* current segment start offset */
+  guint64 segment_start;
+  /* the size received so far on this segment */
+  guint64 segment_received_size;
+  /* the total size received so far on this stream, excluding current segment */
+  guint64 total_received_size;
+} GstAdaptiveDemuxTestOutputStream;
+
+/* GstAdaptiveDemuxTestCallbacks: contains various callbacks that can
+ * be registered by a test. Not all callbacks needs to be configured
+ * by a test. A callback that is not required by a test must be set
+ * to NULL.
+ */
+typedef struct _GstAdaptiveDemuxTestCallbacks
+{
+  /**
+   * pre_test: called before starting the pipeline
+   * @engine: #GstAdaptiveDemuxTestEngine
+   * @user_data: the user_data passed to gst_adaptive_demux_test_run()
+   */
+  void (*pre_test) (GstAdaptiveDemuxTestEngine *engine, gpointer user_data);
+  
+  /**
+   * post_test: called after stopping the pipeline.
+   * @engine: #GstAdaptiveDemuxTestEngine
+   * @user_data: the user_data passed to gst_adaptive_demux_test_run()
+   */
+  void (*post_test) (GstAdaptiveDemuxTestEngine *engine, gpointer user_data);
+
+  /**
+   * appsink_received_data: called each time AppSink receives data
+   * @engine: #GstAdaptiveDemuxTestEngine
+   * @stream: #GstAdaptiveDemuxTestOutputStream
+   * @buffer: the #GstBuffer that was recevied by #GstAppSink
+   * @user_data: the user_data passed to gst_adaptive_demux_test_run()
+   * Returns: #TRUE to continue processing, #FALSE to cause EOS
+   *
+   * Can be used by a test to perform additional operations (eg validate
+   * output data)
+   */
+  gboolean (*appsink_received_data) (GstAdaptiveDemuxTestEngine *engine,
+      GstAdaptiveDemuxTestOutputStream * stream,
+      GstBuffer * buffer, gpointer user_data);
+
+  /**
+   * appsink_eos: called each time AppSink receives eos
+   * @engine: #GstAdaptiveDemuxTestEngine
+   * @stream: #GstAdaptiveDemuxTestOutputStream
+   * @user_data: the user_data passed to gst_adaptive_demux_test_run()
+   *
+   * Can be used by a test to perform additional operations (eg validate
+   * output data)
+   */
+  void (*appsink_eos) (GstAdaptiveDemuxTestEngine *engine,
+      GstAdaptiveDemuxTestOutputStream * stream, gpointer user_data);
+
+  /**
+   * appsink_event: called when an event is received by appsink
+   * @engine: #GstAdaptiveDemuxTestEngine
+   * @stream: #GstAdaptiveDemuxTestOutputStream
+   * @event: the #GstEvent that was pushed in the demuxer pad
+   * @user_data: the user_data passed to gst_adaptive_demux_test_run()
+   *
+   * Can be used by a test to do some checks on the events
+   */
+  void (*appsink_event) (GstAdaptiveDemuxTestEngine *engine,
+      GstAdaptiveDemuxTestOutputStream * stream,
+      GstEvent * event, gpointer user_data);
+
+  /**
+   * demux_pad_added: called each time the demux creates a new pad
+   * @engine: #GstAdaptiveDemuxTestEngine
+   * @stream: the #GstAdaptiveDemuxTestOutputStream that has been created
+   * @user_data: the user_data passed to gst_adaptive_demux_test_run()
+   */
+  void (*demux_pad_added) (GstAdaptiveDemuxTestEngine * engine,
+      GstAdaptiveDemuxTestOutputStream * stream, gpointer user_data);
+
+  /**
+   * demux_pad_removed: called each time the demux removes a pad
+   * @engine: #GstAdaptiveDemuxTestEngine
+   * @stream: the #GstAdaptiveDemuxTestOutputStream that will no longer
+   * be used
+   * @user_data: the user_data passed to gst_adaptive_demux_test_run()
+   */
+  void (*demux_pad_removed) (GstAdaptiveDemuxTestEngine * engine,
+      GstAdaptiveDemuxTestOutputStream * stream, gpointer user_data);
+
+  /**
+   * demux_sent_data: called each time the demux sends data to AppSink
+   * @engine: #GstAdaptiveDemuxTestEngine
+   * @stream: #GstAdaptiveDemuxTestOutputStream
+   * @buffer: the #GstBuffer that was sent by demux
+   * @user_data: the user_data passed to gst_adaptive_demux_test_run()
+   */
+  gboolean (*demux_sent_data) (GstAdaptiveDemuxTestEngine *engine,
+      GstAdaptiveDemuxTestOutputStream * stream,
+      GstBuffer * buffer, gpointer user_data);
+
+  /**
+   * bus_error_message: called if an error is posted to the bus
+   * @engine: #GstAdaptiveDemuxTestEngine
+   * @msg: the #GstMessage that contains the error
+   * @user_data: the user_data passed to gst_adaptive_demux_test_run()
+   *
+   * The callback can decide if this error is expected, or to fail
+   * the test
+   */
+  void (*bus_error_message)(GstAdaptiveDemuxTestEngine *engine,
+      GstMessage * msg, gpointer user_data);
+} GstAdaptiveDemuxTestCallbacks;
+
+/* structure containing all data used by a test
+ * Any callback defined by a test will receive this as first parameter
+ */
+struct _GstAdaptiveDemuxTestEngine
+{
+  GstElement *pipeline;
+  GstElement *demux;
+  GstElement *manifest_source;
+  GMainLoop *loop;
+  GPtrArray *output_streams; /* GPtrArray<GstAdaptiveDemuxTestOutputStream> */
+  /* mutex to lock accesses to this structure when data is shared 
+   * between threads */
+  GMutex lock;
+};
+
+/**
+ * gst_adaptive_demux_test_run:
+ * @element_name: The name of the demux element (e.g. "dashdemux")
+ * @manifest_uri: The URI of the manifest to load
+ * @callbacks: The callbacks to use while the test is in operating
+ * @user_data: Opaque pointer that is passed to every callback
+ *
+ * Creates a pipeline with the specified demux element in it,
+ * connect a testhttpsrc element to this demux element and
+ * request manifest_uri. When the demux element adds a new
+ * pad, the engine will create an AppSink element and attach
+ * it to this pad. 
+ *
+ * Information about these pads is collected in 
+ * GstAdaptiveDemuxTestEngine::output_streams
+ */
+void gst_adaptive_demux_test_run (const gchar * element_name,
+    const gchar * manifest_uri,
+    const GstAdaptiveDemuxTestCallbacks * callbacks,
+    gpointer user_data);
+
+G_END_DECLS
+#endif /* __GST_ADAPTIVE_DEMUX_TEST_ENGINE_H__ */
diff --git a/tests/check/elements/baseaudiovisualizer.c b/tests/check/elements/baseaudiovisualizer.c
deleted file mode 100644
index f0fd93a..0000000
--- a/tests/check/elements/baseaudiovisualizer.c
+++ /dev/null
@@ -1,178 +0,0 @@
-/* GStreamer
- * Copyright (C) <2011> Stefan Kost <ensonic@users.sf.net>
- *
- * unit test for the baseaudiovisualizer class
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-#include "../../gst/audiovisualizers/gstaudiovisualizer.c"
-#undef GST_CAT_DEFAULT
-
-#include <gst/check/gstcheck.h>
-#include <string.h>
-
-/* dummy subclass for testing */
-
-#define GST_TYPE_TEST_SCOPE            (gst_test_scope_get_type())
-#define GST_TEST_SCOPE(obj)            (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_TEST_SCOPE,GstTestScope))
-#define GST_TEST_SCOPE_CLASS(klass)    (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_TEST_SCOPE,GstTestScopeClass))
-typedef struct _GstTestScope GstTestScope;
-typedef struct _GstTestScopeClass GstTestScopeClass;
-
-struct _GstTestScope
-{
-  GstAudioVisualizer parent;
-};
-
-struct _GstTestScopeClass
-{
-  GstAudioVisualizerClass parent_class;
-};
-
-static GstStaticPadTemplate gst_test_scope_src_template =
-GST_STATIC_PAD_TEMPLATE ("src",
-    GST_PAD_SRC,
-    GST_PAD_ALWAYS,
-    GST_STATIC_CAPS (GST_VIDEO_CAPS_MAKE ("xRGB"))
-    );
-
-static GstStaticPadTemplate gst_test_scope_sink_template =
-GST_STATIC_PAD_TEMPLATE ("sink",
-    GST_PAD_SINK,
-    GST_PAD_ALWAYS,
-    GST_STATIC_CAPS ("audio/x-raw, "
-        "format = (string) " GST_AUDIO_NE (S16) ", "
-        "layout = (string) interleaved, "
-        "channels = (int) 2, "
-        "channel-mask = (bitmask) 3, " "rate = (int) 44100")
-    );
-
-static GType gst_test_scope_get_type (void);
-
-G_DEFINE_TYPE (GstTestScope, gst_test_scope, GST_TYPE_AUDIO_VISUALIZER);
-
-static void
-gst_test_scope_class_init (GstTestScopeClass * g_class)
-{
-  GstElementClass *element_class = GST_ELEMENT_CLASS (g_class);
-
-  gst_element_class_set_static_metadata (element_class, "test scope",
-      "Visualization",
-      "Dummy test scope", "Stefan Kost <ensonic@users.sf.net>");
-
-  gst_element_class_add_pad_template (element_class,
-      gst_static_pad_template_get (&gst_test_scope_src_template));
-  gst_element_class_add_pad_template (element_class,
-      gst_static_pad_template_get (&gst_test_scope_sink_template));
-}
-
-static void
-gst_test_scope_init (GstTestScope * scope)
-{
-  /* do nothing */
-}
-
-/* tests */
-#define CAPS "audio/x-raw, "  \
-        "format = (string) " GST_AUDIO_NE (S16) ", " \
-        "layout = (string) interleaved, " \
-        "rate = (int) 44100, " \
-        "channels = (int) 2, " \
-        "channel-mask = (bitmask) 3"
-
-static GstStaticPadTemplate sinktemplate = GST_STATIC_PAD_TEMPLATE ("sink",
-    GST_PAD_SINK,
-    GST_PAD_ALWAYS,
-    GST_STATIC_CAPS ("video/x-raw, "
-        "format = (string) xRGB, "
-        "width = (int) 320, "
-        "height = (int) 240, " "framerate = (fraction) 30/1")
-    );
-static GstStaticPadTemplate srctemplate = GST_STATIC_PAD_TEMPLATE ("src",
-    GST_PAD_SRC,
-    GST_PAD_ALWAYS,
-    GST_STATIC_CAPS (CAPS)
-    );
-
-GST_START_TEST (count_in_out)
-{
-  GstElement *elem;
-  GstPad *srcpad, *sinkpad;
-  GstBuffer *buffer;
-  GstCaps *caps;
-
-  /* setup up */
-  elem = gst_check_setup_element ("testscope");
-  srcpad = gst_check_setup_src_pad (elem, &srctemplate);
-  sinkpad = gst_check_setup_sink_pad (elem, &sinktemplate);
-  gst_pad_set_active (srcpad, TRUE);
-  gst_pad_set_active (sinkpad, TRUE);
-
-  fail_unless (gst_element_set_state (elem,
-          GST_STATE_PLAYING) == GST_STATE_CHANGE_SUCCESS,
-      "could not set to playing");
-
-  caps = gst_caps_from_string (CAPS);
-  gst_check_setup_events (srcpad, elem, caps, GST_FORMAT_TIME);
-  gst_caps_unref (caps);
-
-  /* push 1s audio to get 30 video-frames */
-  buffer = gst_buffer_new_and_alloc (44100 * 2 * sizeof (gint16));
-  ASSERT_BUFFER_REFCOUNT (buffer, "buffer", 1);
-
-  /* pushing gives away my reference ... */
-  fail_unless (gst_pad_push (srcpad, buffer) == GST_FLOW_OK);
-  /* ... but it ends up being collected on the global buffer list */
-  ASSERT_BUFFER_REFCOUNT (buffer, "buffer", 1);
-  fail_unless_equals_int (g_list_length (buffers), 30);
-
-  /* clean up */
-  g_list_foreach (buffers, (GFunc) gst_mini_object_unref, NULL);
-  g_list_free (buffers);
-  buffers = NULL;
-
-  gst_pad_set_active (srcpad, FALSE);
-  gst_pad_set_active (sinkpad, FALSE);
-  gst_check_teardown_src_pad (elem);
-  gst_check_teardown_sink_pad (elem);
-  gst_check_teardown_element (elem);
-}
-
-GST_END_TEST;
-
-static void
-baseaudiovisualizer_init (void)
-{
-  gst_element_register (NULL, "testscope", GST_RANK_NONE, GST_TYPE_TEST_SCOPE);
-}
-
-static Suite *
-baseaudiovisualizer_suite (void)
-{
-  Suite *s = suite_create ("baseaudiovisualizer");
-  TCase *tc_chain = tcase_create ("general");
-
-  suite_add_tcase (s, tc_chain);
-  tcase_add_checked_fixture (tc_chain, baseaudiovisualizer_init, NULL);
-
-  tcase_add_test (tc_chain, count_in_out);
-
-  return s;
-}
-
-
-GST_CHECK_MAIN (baseaudiovisualizer);
diff --git a/tests/check/elements/compositor.c b/tests/check/elements/compositor.c
index ccd68a1..8b5fd5b 100644
--- a/tests/check/elements/compositor.c
+++ b/tests/check/elements/compositor.c
@@ -45,6 +45,24 @@
 
 static GMainLoop *main_loop;
 
+static GstCaps *
+_compositor_get_all_supported_caps (void)
+{
+  return gst_caps_from_string (GST_VIDEO_CAPS_MAKE
+      (" { AYUV, BGRA, ARGB, RGBA, ABGR, Y444, Y42B, YUY2, UYVY, "
+          "   YVYU, I420, YV12, NV12, NV21, Y41B, RGB, BGR, xRGB, xBGR, "
+          "   RGBx, BGRx } "));
+}
+
+static GstCaps *
+_compositor_get_non_alpha_supported_caps (void)
+{
+  return gst_caps_from_string (GST_VIDEO_CAPS_MAKE
+      (" { Y444, Y42B, YUY2, UYVY, "
+          "   YVYU, I420, YV12, NV12, NV21, Y41B, RGB, BGR, xRGB, xBGR, "
+          "   RGBx, BGRx } "));
+}
+
 /* make sure downstream gets a CAPS event before buffers are sent */
 GST_START_TEST (test_caps)
 {
@@ -245,6 +263,208 @@
 
 GST_END_TEST;
 
+static GstBuffer *
+create_video_buffer (GstCaps * caps, gint ts_in_seconds)
+{
+  GstVideoInfo info;
+  guint size;
+  GstBuffer *buf;
+  GstMapInfo mapinfo;
+
+  fail_unless (gst_video_info_from_caps (&info, caps));
+
+  size = GST_VIDEO_INFO_WIDTH (&info) * GST_VIDEO_INFO_HEIGHT (&info);
+
+  switch (GST_VIDEO_INFO_FORMAT (&info)) {
+    case GST_VIDEO_FORMAT_RGB:
+      size *= 3;
+      break;
+    case GST_VIDEO_FORMAT_RGBA:
+    case GST_VIDEO_FORMAT_ARGB:
+      size *= 4;
+      break;
+    case GST_VIDEO_FORMAT_I420:
+      size *= 2;
+      break;
+    default:
+      fail ("Unsupported test format");
+  }
+
+  buf = gst_buffer_new_and_alloc (size);
+  /* write something to avoid uninitialized error issues (valgrind) */
+  gst_buffer_map (buf, &mapinfo, GST_MAP_WRITE);
+  memset (mapinfo.data, 0, mapinfo.size);
+  gst_buffer_unmap (buf, &mapinfo);
+
+  GST_BUFFER_PTS (buf) = ts_in_seconds * GST_SECOND;
+  GST_BUFFER_DURATION (buf) = GST_SECOND;
+  return buf;
+}
+
+
+GST_START_TEST (test_caps_query)
+{
+  GstElement *compositor, *capsfilter, *sink;
+  GstElement *pipeline;
+  gboolean res;
+  GstStateChangeReturn state_res;
+  GstPad *sinkpad;
+  GstCaps *caps, *restriction_caps;
+  GstCaps *all_caps, *non_alpha_caps;
+
+  /* initial setup */
+  all_caps = _compositor_get_all_supported_caps ();
+  non_alpha_caps = _compositor_get_non_alpha_supported_caps ();
+
+  compositor = gst_element_factory_make ("compositor", "compositor");
+  capsfilter = gst_element_factory_make ("capsfilter", "out-cf");
+  sink = gst_element_factory_make ("fakesink", "sink");
+  pipeline = gst_pipeline_new ("test-pipeline");
+
+  gst_bin_add_many (GST_BIN (pipeline), compositor, capsfilter, sink, NULL);
+  res = gst_element_link (compositor, capsfilter);
+  fail_unless (res == TRUE, NULL);
+  res = gst_element_link (capsfilter, sink);
+  fail_unless (res == TRUE, NULL);
+
+  sinkpad = gst_element_get_request_pad (compositor, "sink_%u");
+
+  state_res = gst_element_set_state (pipeline, GST_STATE_PLAYING);
+  fail_if (state_res == GST_STATE_CHANGE_FAILURE);
+
+  /* try an unrestricted caps query, should return all formats */
+  caps = gst_pad_query_caps (sinkpad, NULL);
+  fail_unless (gst_caps_is_equal (caps, all_caps));
+  gst_caps_unref (caps);
+
+  /* now restrict downstream to a single alpha format, it should still
+   * be able to convert anything else to it */
+  restriction_caps = gst_caps_from_string ("video/x-raw, format=(string)AYUV");
+  g_object_set (capsfilter, "caps", restriction_caps, NULL);
+  caps = gst_pad_query_caps (sinkpad, NULL);
+  fail_unless (gst_caps_is_equal (caps, all_caps));
+  gst_caps_unref (caps);
+  gst_caps_unref (restriction_caps);
+
+  /* now restrict downstream to a non-alpha format, it should
+   * be able to accept non-alpha formats */
+  restriction_caps = gst_caps_from_string ("video/x-raw, format=(string)I420");
+  g_object_set (capsfilter, "caps", restriction_caps, NULL);
+  caps = gst_pad_query_caps (sinkpad, NULL);
+  fail_unless (gst_caps_is_equal (caps, non_alpha_caps));
+  gst_caps_unref (caps);
+  gst_caps_unref (restriction_caps);
+
+  gst_element_set_state (pipeline, GST_STATE_NULL);
+  gst_element_release_request_pad (compositor, sinkpad);
+  gst_object_unref (sinkpad);
+  gst_object_unref (pipeline);
+  gst_caps_unref (all_caps);
+  gst_caps_unref (non_alpha_caps);
+}
+
+GST_END_TEST;
+
+#define MODE_ALL 1
+#define MODE_NON_ALPHA 2
+
+static void
+run_late_caps_query_test (GstCaps * input_caps, GstCaps * output_allowed_caps,
+    gint expected_caps_mode)
+{
+  GstElement *compositor, *capsfilter, *sink;
+  GstElement *pipeline;
+  gboolean res;
+  GstStateChangeReturn state_res;
+  GstPad *srcpad1, *srcpad2;
+  GstPad *sinkpad1, *sinkpad2;
+  GstSegment segment;
+  GstCaps *caps, *all_caps, *non_alpha_caps;
+
+  all_caps = _compositor_get_all_supported_caps ();
+  non_alpha_caps = _compositor_get_non_alpha_supported_caps ();
+
+  compositor = gst_element_factory_make ("compositor", "compositor");
+  capsfilter = gst_element_factory_make ("capsfilter", "out-cf");
+  sink = gst_element_factory_make ("fakesink", "sink");
+  pipeline = gst_pipeline_new ("test-pipeline");
+
+  gst_bin_add_many (GST_BIN (pipeline), compositor, capsfilter, sink, NULL);
+  res = gst_element_link (compositor, capsfilter);
+  fail_unless (res == TRUE, NULL);
+  res = gst_element_link (capsfilter, sink);
+  fail_unless (res == TRUE, NULL);
+
+  sinkpad1 = gst_element_get_request_pad (compositor, "sink_%u");
+  srcpad1 = gst_pad_new ("src1", GST_PAD_SRC);
+  fail_unless (gst_pad_link (srcpad1, sinkpad1) == GST_PAD_LINK_OK);
+  gst_pad_set_active (srcpad1, TRUE);
+
+  state_res = gst_element_set_state (pipeline, GST_STATE_PLAYING);
+  fail_if (state_res == GST_STATE_CHANGE_FAILURE);
+
+  if (output_allowed_caps)
+    g_object_set (capsfilter, "caps", output_allowed_caps, NULL);
+
+  gst_segment_init (&segment, GST_FORMAT_TIME);
+  fail_unless (gst_pad_push_event (srcpad1,
+          gst_event_new_stream_start ("test-1")));
+  fail_unless (gst_pad_push_event (srcpad1, gst_event_new_caps (input_caps)));
+  fail_unless (gst_pad_push_event (srcpad1, gst_event_new_segment (&segment)));
+  fail_unless (gst_pad_push (srcpad1,
+          create_video_buffer (input_caps, 0)) == GST_FLOW_OK);
+  fail_unless (gst_pad_push (srcpad1,
+          create_video_buffer (input_caps, 1)) == GST_FLOW_OK);
+
+  /* now comes the second pad */
+  sinkpad2 = gst_element_get_request_pad (compositor, "sink_%u");
+  srcpad2 = gst_pad_new ("src2", GST_PAD_SRC);
+  fail_unless (gst_pad_link (srcpad2, sinkpad2) == GST_PAD_LINK_OK);
+  gst_pad_set_active (srcpad2, TRUE);
+  fail_unless (gst_pad_push_event (srcpad2,
+          gst_event_new_stream_start ("test-2")));
+
+  caps = gst_pad_peer_query_caps (srcpad2, NULL);
+  fail_unless (gst_caps_is_equal (caps,
+          expected_caps_mode == MODE_ALL ? all_caps : non_alpha_caps));
+  gst_caps_unref (caps);
+
+  gst_pad_set_active (srcpad1, FALSE);
+  gst_pad_set_active (srcpad2, FALSE);
+  gst_element_set_state (pipeline, GST_STATE_NULL);
+  gst_element_release_request_pad (compositor, sinkpad1);
+  gst_element_release_request_pad (compositor, sinkpad2);
+  gst_object_unref (sinkpad1);
+  gst_object_unref (sinkpad2);
+  gst_object_unref (pipeline);
+  gst_object_unref (srcpad1);
+  gst_object_unref (srcpad2);
+  gst_caps_unref (all_caps);
+  gst_caps_unref (non_alpha_caps);
+}
+
+GST_START_TEST (test_late_caps_query)
+{
+  GstCaps *rgb_caps;
+  GstCaps *non_alpha_caps;
+
+  rgb_caps = gst_caps_from_string ("video/x-raw, format=(string)RGB, "
+      "width=(int)100, height=(int)100, framerate=(fraction)1/1");
+
+  non_alpha_caps = gst_caps_from_string ("video/x-raw, format=(string)RGB");
+
+  /* check that a 2nd pad that is added late to compositor will be able to
+   * negotiate to formats that depend only on downstream caps and not on what
+   * the other pads have already negotiated */
+  run_late_caps_query_test (rgb_caps, NULL, MODE_ALL);
+  run_late_caps_query_test (rgb_caps, non_alpha_caps, MODE_NON_ALPHA);
+
+  gst_caps_unref (non_alpha_caps);
+  gst_caps_unref (rgb_caps);
+}
+
+GST_END_TEST;
+
 static guint play_count = 0;
 static GstEvent *play_seek_event = NULL;
 
@@ -1444,6 +1664,50 @@
 
 GST_END_TEST;
 
+/* Test that the GST_ELEMENT(vagg)->sinkpads GList is always sorted by zorder */
+GST_START_TEST (test_pad_z_order)
+{
+  GstElement *compositor;
+  GstPad *sinkpad1, *sinkpad2, *sinkpad3;
+  guint zorder1, zorder2;
+  GList *sinkpads;
+
+  GST_INFO ("preparing test");
+
+  compositor = gst_element_factory_make ("compositor", NULL);
+  sinkpad1 = gst_element_get_request_pad (compositor, "sink_%u");
+  sinkpad2 = gst_element_get_request_pad (compositor, "sink_%u");
+
+  /* Pads requested later have a higher z-order than earlier ones by default */
+  g_object_get (sinkpad1, "zorder", &zorder1, NULL);
+  g_object_get (sinkpad2, "zorder", &zorder2, NULL);
+  ck_assert_int_gt (zorder2, zorder1);
+  sinkpads = GST_ELEMENT (compositor)->sinkpads;
+  ck_assert_ptr_eq (sinkpads->data, sinkpad1);
+  ck_assert_ptr_eq (sinkpads->next->data, sinkpad2);
+
+  /* Make sinkpad1's zorder the largest, which should re-sort the sinkpads */
+  g_object_set (sinkpad1, "zorder", zorder2 + 1, NULL);
+  sinkpads = GST_ELEMENT (compositor)->sinkpads;
+  ck_assert_ptr_eq (sinkpads->data, sinkpad2);
+  ck_assert_ptr_eq (sinkpads->next->data, sinkpad1);
+
+  /* Get a new pad, which should be the highest pad now */
+  sinkpad3 = gst_element_get_request_pad (compositor, "sink_%u");
+  sinkpads = GST_ELEMENT (compositor)->sinkpads;
+  ck_assert_ptr_eq (sinkpads->data, sinkpad2);
+  ck_assert_ptr_eq (sinkpads->next->data, sinkpad1);
+  ck_assert_ptr_eq (sinkpads->next->next->data, sinkpad3);
+
+  /* cleanup */
+  gst_object_unref (compositor);
+  gst_object_unref (sinkpad1);
+  gst_object_unref (sinkpad2);
+  gst_object_unref (sinkpad3);
+}
+
+GST_END_TEST;
+
 typedef struct
 {
   gint buffers_sent;
@@ -1616,6 +1880,8 @@
   suite_add_tcase (s, tc_chain);
   tcase_add_test (tc_chain, test_caps);
   tcase_add_test (tc_chain, test_event);
+  tcase_add_test (tc_chain, test_caps_query);
+  tcase_add_test (tc_chain, test_late_caps_query);
   tcase_add_test (tc_chain, test_play_twice);
   tcase_add_test (tc_chain, test_play_twice_then_add_and_play_again);
   tcase_add_test (tc_chain, test_add_pad);
@@ -1628,6 +1894,7 @@
   tcase_add_test (tc_chain, test_segment_base_handling);
   tcase_add_test (tc_chain, test_obscured_skipped);
   tcase_add_test (tc_chain, test_ignore_eos);
+  tcase_add_test (tc_chain, test_pad_z_order);
   tcase_add_test (tc_chain, test_start_time_zero_live_drop_0);
   tcase_add_test (tc_chain, test_start_time_zero_live_drop_3);
   tcase_add_test (tc_chain, test_start_time_zero_live_drop_3_unlinked_1);
@@ -1635,17 +1902,6 @@
   tcase_add_test (tc_chain, test_start_time_first_live_drop_3);
   tcase_add_test (tc_chain, test_start_time_first_live_drop_3_unlinked_1);
 
-  /* Use a longer timeout */
-#ifdef HAVE_VALGRIND
-  if (RUNNING_ON_VALGRIND) {
-    tcase_set_timeout (tc_chain, 5 * 60);
-  } else
-#endif
-  {
-    /* this is shorter than the default 60 seconds?! (tpm) */
-    /* tcase_set_timeout (tc_chain, 6); */
-  }
-
   return s;
 }
 
diff --git a/tests/check/elements/curlftpsink.c b/tests/check/elements/curlftpsink.c
index f8706f7..185a152 100644
--- a/tests/check/elements/curlftpsink.c
+++ b/tests/check/elements/curlftpsink.c
@@ -63,8 +63,7 @@
       "epsv-mode", &res_epsv_mode,
       "create-dirs", &res_create_dirs,
       "create-tmp-file", &res_create_tmpfile,
-      "temp-file-name", &res_tmp_file_name,
-      NULL);
+      "temp-file-name", &res_tmp_file_name, NULL);
 
   fail_unless (strncmp (res_location, "mylocation", strlen ("mylocation"))
       == 0);
@@ -72,12 +71,13 @@
       == 0);
   fail_unless (strncmp (res_ftp_port, "1.2.3.4:0", strlen ("1.2.3.4:0"))
       == 0);
-  fail_unless (strncmp (res_tmp_file_name, "test_tmp_file_", strlen ("test_tmp_file_"))
+  fail_unless (strncmp (res_tmp_file_name, "test_tmp_file_",
+          strlen ("test_tmp_file_"))
       == 0);
   fail_unless (res_epsv_mode == FALSE);
   fail_unless (res_create_dirs == FALSE);
   fail_unless (res_create_tmpfile == FALSE);
-  
+
   g_free (res_location);
   g_free (res_file_name);
   g_free (res_ftp_port);
@@ -99,8 +99,7 @@
       "epsv-mode", &res_epsv_mode,
       "create-dirs", &res_create_dirs,
       "create-tmp-file", &res_create_tmpfile,
-      "temp-file-name", &res_tmp_file_name,
-      NULL);
+      "temp-file-name", &res_tmp_file_name, NULL);
 
   fail_unless (strncmp (res_location, "newlocation", strlen ("newlocation"))
       == 0);
@@ -108,13 +107,14 @@
       == 0);
   fail_unless (strncmp (res_ftp_port, "", strlen (""))
       == 0);
-  fail_unless (strncmp (res_tmp_file_name, "test_tmp_file_", strlen ("test_tmp_file_"))
+  fail_unless (strncmp (res_tmp_file_name, "test_tmp_file_",
+          strlen ("test_tmp_file_"))
       == 0);
   fail_unless (res_epsv_mode == TRUE);
   fail_unless (res_create_dirs == TRUE);
   fail_unless (res_create_dirs == TRUE);
   fail_unless (res_create_tmpfile == TRUE);
-  
+
   g_free (res_location);
   g_free (res_file_name);
   g_free (res_ftp_port);
@@ -122,6 +122,7 @@
 
   cleanup_curlftpsink (sink);
 }
+
 GST_END_TEST;
 
 static Suite *
diff --git a/tests/check/elements/curlhttpsink.c b/tests/check/elements/curlhttpsink.c
index fcdb6e1..68370fb 100644
--- a/tests/check/elements/curlhttpsink.c
+++ b/tests/check/elements/curlhttpsink.c
@@ -54,16 +54,14 @@
 
   g_object_set (G_OBJECT (sink),
       "location", "mylocation",
-      "file-name","myfile",
+      "file-name", "myfile",
       "user", "user",
       "passwd", "passwd",
       "proxy", "myproxy",
       "proxy-port", 7777,
       "proxy-user", "proxy_user",
       "proxy-passwd", "proxy_passwd",
-      "content-type", "image/jpeg",
-      "use-content-length", TRUE,
-      NULL);
+      "content-type", "image/jpeg", "use-content-length", TRUE, NULL);
 
   g_object_get (sink,
       "location", &res_location,
@@ -75,8 +73,7 @@
       "proxy-user", &res_proxy_user,
       "proxy-passwd", &res_proxy_passwd,
       "content-type", &res_content_type,
-      "use-content-length", &res_use_content_length,
-      NULL);
+      "use-content-length", &res_use_content_length, NULL);
 
   fail_unless (strncmp (res_location, "mylocation", strlen ("mylocation"))
       == 0);
@@ -89,7 +86,7 @@
   fail_unless (strncmp (res_proxy_user, "proxy_user", strlen ("proxy_user"))
       == 0);
   fail_unless (strncmp (res_proxy_passwd, "proxy_passwd",
-        strlen ("proxy_passwd")) == 0);
+          strlen ("proxy_passwd")) == 0);
   fail_unless (strncmp (res_content_type, "image/jpeg", strlen ("image/jpeg"))
       == 0);
   fail_unless (res_use_content_length == TRUE);
@@ -118,6 +115,7 @@
 
   cleanup_curlhttpsink (sink);
 }
+
 GST_END_TEST;
 
 static Suite *
diff --git a/tests/check/elements/curlsmtpsink.c b/tests/check/elements/curlsmtpsink.c
index e526327..450b721 100644
--- a/tests/check/elements/curlsmtpsink.c
+++ b/tests/check/elements/curlsmtpsink.c
@@ -80,9 +80,7 @@
       "nbr-attachments", &res_nbr_attach,
       "use-ssl", &res_use_ssl,
       "pop-location", &res_pop_location,
-      "pop_user", &res_pop_usr,
-      "pop-passwd", &res_pop_passwd,
-      NULL);
+      "pop_user", &res_pop_usr, "pop-passwd", &res_pop_passwd, NULL);
 
   fail_unless (strncmp (res_location, "mylocation", strlen ("mylocation"))
       == 0);
@@ -147,9 +145,7 @@
       "subject", &res_subj,
       "use-ssl", &res_use_ssl,
       "message-body", &res_msg,
-      "mail-from", &res_mail_from,
-      "mail-rcpt", &res_mail_rcpt,
-      NULL);
+      "mail-from", &res_mail_from, "mail-rcpt", &res_mail_rcpt, NULL);
 
   fail_unless (strncmp (res_location, "newlocation", strlen ("newlocation"))
       == 0);
@@ -160,7 +156,7 @@
   fail_unless (strncmp (res_passwd, "newpasswd", strlen ("newpasswd"))
       == 0);
   fail_unless (strncmp (res_mail_rcpt, "rcpt1,rcpt2,rcpt3",
-      strlen ("rcpt1,rcpt2,rcpt3")) == 0);
+          strlen ("rcpt1,rcpt2,rcpt3")) == 0);
   fail_unless (strncmp (res_mail_from, "newsender", strlen ("newsender"))
       == 0);
   fail_unless (strncmp (res_subj, "newsubject", strlen ("newsubject"))
@@ -190,6 +186,7 @@
 
   cleanup_curlsmtpsink (sink);
 }
+
 GST_END_TEST;
 
 static Suite *
diff --git a/tests/check/elements/dash_demux.c b/tests/check/elements/dash_demux.c
new file mode 100644
index 0000000..961e12e
--- /dev/null
+++ b/tests/check/elements/dash_demux.c
@@ -0,0 +1,1028 @@
+/* GStreamer unit test for MPEG-DASH
+ *
+ * Copyright (c) <2015> YouView TV Ltd
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#include <gst/check/gstcheck.h>
+#include "adaptive_demux_common.h"
+
+#define DEMUX_ELEMENT_NAME "dashdemux"
+
+#define COPY_OUTPUT_TEST_DATA(outputTestData,testData) do { \
+    guint otdPos, otdLen = sizeof((outputTestData)) / sizeof((outputTestData)[0]); \
+    for(otdPos=0; otdPos<otdLen; ++otdPos){ \
+  (testData)->output_streams = g_list_append ((testData)->output_streams, &(outputTestData)[otdPos]); \
+    } \
+  } while(0)
+
+typedef struct _GstDashDemuxTestInputData
+{
+  const gchar *uri;
+  const guint8 *payload;
+  guint64 size;
+} GstDashDemuxTestInputData;
+
+static gboolean
+gst_dashdemux_http_src_start (GstTestHTTPSrc * src,
+    const gchar * uri, GstTestHTTPSrcInput * input_data, gpointer user_data)
+{
+  const GstDashDemuxTestInputData *input =
+      (const GstDashDemuxTestInputData *) user_data;
+  for (guint i = 0; input[i].uri; ++i) {
+    if (strcmp (input[i].uri, uri) == 0) {
+      input_data->context = (gpointer) & input[i];
+      input_data->size = input[i].size;
+      if (input[i].size == 0)
+        input_data->size = strlen ((gchar *) input[i].payload);
+      return TRUE;
+    }
+  }
+  return FALSE;
+}
+
+static GstFlowReturn
+gst_dashdemux_http_src_create (GstTestHTTPSrc * src,
+    guint64 offset,
+    guint length, GstBuffer ** retbuf, gpointer context, gpointer user_data)
+{
+  /*  const GstDashDemuxTestInputData *input =
+     (const GstDashDemuxTestInputData *) user_data; */
+  const GstDashDemuxTestInputData *input =
+      (const GstDashDemuxTestInputData *) context;
+  GstBuffer *buf;
+
+  buf = gst_buffer_new_allocate (NULL, length, NULL);
+  fail_if (buf == NULL, "Not enough memory to allocate buffer");
+
+  if (input->payload) {
+    gst_buffer_fill (buf, 0, input->payload + offset, length);
+  } else {
+    GstMapInfo info;
+    guint pattern;
+
+    pattern = offset - offset % sizeof (pattern);
+
+    gst_buffer_map (buf, &info, GST_MAP_WRITE);
+    for (guint64 i = 0; i < length; ++i) {
+      gchar pattern_byte_to_write = (offset + i) % sizeof (pattern);
+      if (pattern_byte_to_write == 0) {
+        pattern = offset + i;
+      }
+      info.data[i] = (pattern >> (pattern_byte_to_write * 8)) & 0xFF;
+    }
+    gst_buffer_unmap (buf, &info);
+  }
+  *retbuf = buf;
+  return GST_FLOW_OK;
+}
+
+/******************** Test specific code starts here **************************/
+
+/*
+ * Test an mpd with an audio and a video stream
+ *
+ */
+GST_START_TEST (simpleTest)
+{
+  const gchar *mpd =
+      "<?xml version=\"1.0\" encoding=\"utf-8\"?>"
+      "<MPD xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\""
+      "     xmlns=\"urn:mpeg:DASH:schema:MPD:2011\""
+      "     xsi:schemaLocation=\"urn:mpeg:DASH:schema:MPD:2011 DASH-MPD.xsd\""
+      "     profiles=\"urn:mpeg:dash:profile:isoff-on-demand:2011\""
+      "     type=\"static\""
+      "     minBufferTime=\"PT1.500S\""
+      "     mediaPresentationDuration=\"PT135.743S\">"
+      "  <Period>"
+      "    <AdaptationSet mimeType=\"audio/webm\""
+      "                   subsegmentAlignment=\"true\">"
+      "      <Representation id=\"171\""
+      "                      codecs=\"vorbis\""
+      "                      audioSamplingRate=\"44100\""
+      "                      startWithSAP=\"1\""
+      "                      bandwidth=\"129553\">"
+      "        <AudioChannelConfiguration"
+      "           schemeIdUri=\"urn:mpeg:dash:23003:3:audio_channel_configuration:2011\""
+      "           value=\"2\" />"
+      "        <BaseURL>audio.webm</BaseURL>"
+      "        <SegmentBase indexRange=\"4452-4686\""
+      "                     indexRangeExact=\"true\">"
+      "          <Initialization range=\"0-4451\" />"
+      "        </SegmentBase>"
+      "      </Representation>"
+      "    </AdaptationSet>"
+      "    <AdaptationSet mimeType=\"video/webm\""
+      "                   subsegmentAlignment=\"true\">"
+      "      <Representation id=\"242\""
+      "                      codecs=\"vp9\""
+      "                      width=\"426\""
+      "                      height=\"240\""
+      "                      startWithSAP=\"1\""
+      "                      bandwidth=\"490208\">"
+      "        <BaseURL>video.webm</BaseURL>"
+      "        <SegmentBase indexRange=\"234-682\""
+      "                     indexRangeExact=\"true\">"
+      "          <Initialization range=\"0-233\" />"
+      "        </SegmentBase>"
+      "      </Representation></AdaptationSet></Period></MPD>";
+  GstDashDemuxTestInputData inputTestData[] = {
+    {"http://unit.test/test.mpd", (guint8 *) mpd, 0},
+    {"http://unit.test/audio.webm", NULL, 5000},
+    {"http://unit.test/video.webm", NULL, 9000},
+    {NULL, NULL, 0},
+  };
+  GstTestHTTPSrcCallbacks http_src_callbacks = { 0 };
+  GstAdaptiveDemuxTestExpectedOutput outputTestData[] = {
+    {"audio_00", 5000, NULL},
+    {"video_00", 9000, NULL}
+  };
+  GstAdaptiveDemuxTestCallbacks test_callbacks = { 0 };
+  GstAdaptiveDemuxTestCase *testData;
+
+  testData = gst_adaptive_demux_test_case_new ();
+  http_src_callbacks.src_start = gst_dashdemux_http_src_start;
+  http_src_callbacks.src_create = gst_dashdemux_http_src_create;
+  gst_test_http_src_install_callbacks (&http_src_callbacks, inputTestData);
+
+  COPY_OUTPUT_TEST_DATA (outputTestData, testData);
+  test_callbacks.appsink_received_data =
+      gst_adaptive_demux_test_check_received_data;
+  test_callbacks.appsink_eos =
+      gst_adaptive_demux_test_check_size_of_received_data;
+
+  gst_adaptive_demux_test_run (DEMUX_ELEMENT_NAME, "http://unit.test/test.mpd",
+      &test_callbacks, testData);
+  g_object_unref (testData);
+}
+
+GST_END_TEST;
+
+/*
+ * Test an mpd with 2 periods
+ *
+ */
+GST_START_TEST (testTwoPeriods)
+{
+  const gchar *mpd =
+      "<?xml version=\"1.0\" encoding=\"utf-8\"?>"
+      "<MPD xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\""
+      "     xmlns=\"urn:mpeg:DASH:schema:MPD:2011\""
+      "     xsi:schemaLocation=\"urn:mpeg:DASH:schema:MPD:2011 DASH-MPD.xsd\""
+      "     profiles=\"urn:mpeg:dash:profile:isoff-on-demand:2011\""
+      "     type=\"static\""
+      "     minBufferTime=\"PT1.500S\""
+      "     mediaPresentationDuration=\"PT300S\">"
+      "  <Period id=\"Period0\" duration=\"PT0.1S\">"
+      "    <AdaptationSet mimeType=\"audio/webm\""
+      "                   subsegmentAlignment=\"true\">"
+      "      <Representation id=\"171\""
+      "                      codecs=\"vorbis\""
+      "                      audioSamplingRate=\"44100\""
+      "                      startWithSAP=\"1\""
+      "                      bandwidth=\"129553\">"
+      "        <AudioChannelConfiguration"
+      "           schemeIdUri=\"urn:mpeg:dash:23003:3:audio_channel_configuration:2011\""
+      "           value=\"2\" />"
+      "        <BaseURL>audio1.webm</BaseURL>"
+      "        <SegmentBase indexRange=\"4452-4686\""
+      "                     indexRangeExact=\"true\">"
+      "          <Initialization range=\"0-4451\" />"
+      "        </SegmentBase>"
+      "      </Representation>"
+      "    </AdaptationSet>"
+      "    <AdaptationSet mimeType=\"video/webm\""
+      "                   subsegmentAlignment=\"true\">"
+      "      <Representation id=\"242\""
+      "                      codecs=\"vp9\""
+      "                      width=\"426\""
+      "                      height=\"240\""
+      "                      startWithSAP=\"1\""
+      "                      bandwidth=\"490208\">"
+      "        <BaseURL>video1.webm</BaseURL>"
+      "        <SegmentBase indexRange=\"234-682\""
+      "                     indexRangeExact=\"true\">"
+      "          <Initialization range=\"0-233\" />"
+      "        </SegmentBase>"
+      "      </Representation>"
+      "    </AdaptationSet>"
+      "  </Period>"
+      "  <Period>"
+      "    <AdaptationSet mimeType=\"audio/webm\""
+      "                   subsegmentAlignment=\"true\">"
+      "      <Representation id=\"171\""
+      "                      codecs=\"vorbis\""
+      "                      audioSamplingRate=\"44100\""
+      "                      startWithSAP=\"1\""
+      "                      bandwidth=\"129553\">"
+      "        <AudioChannelConfiguration"
+      "           schemeIdUri=\"urn:mpeg:dash:23003:3:audio_channel_configuration:2011\""
+      "           value=\"2\" />"
+      "        <BaseURL>audio2.webm</BaseURL>"
+      "        <SegmentBase indexRange=\"4452-4686\""
+      "                     indexRangeExact=\"true\">"
+      "          <Initialization range=\"0-4451\" />"
+      "        </SegmentBase>"
+      "      </Representation>"
+      "    </AdaptationSet>"
+      "    <AdaptationSet mimeType=\"video/webm\""
+      "                   subsegmentAlignment=\"true\">"
+      "      <Representation id=\"242\""
+      "                      codecs=\"vp9\""
+      "                      width=\"426\""
+      "                      height=\"240\""
+      "                      startWithSAP=\"1\""
+      "                      bandwidth=\"490208\">"
+      "        <BaseURL>video2.webm</BaseURL>"
+      "        <SegmentBase indexRange=\"234-682\""
+      "                     indexRangeExact=\"true\">"
+      "          <Initialization range=\"0-233\" />"
+      "        </SegmentBase>"
+      "      </Representation></AdaptationSet></Period></MPD>";
+
+  GstDashDemuxTestInputData inputTestData[] = {
+    {"http://unit.test/test.mpd", (guint8 *) mpd, 0},
+    {"http://unit.test/audio1.webm", NULL, 5001},
+    {"http://unit.test/video1.webm", NULL, 9001},
+    {"http://unit.test/audio2.webm", NULL, 5002},
+    {"http://unit.test/video2.webm", NULL, 9002},
+    {NULL, NULL, 0},
+  };
+  GstTestHTTPSrcCallbacks http_src_callbacks = { 0 };
+  GstAdaptiveDemuxTestExpectedOutput outputTestData[] = {
+    {"audio_00", 5001, NULL},
+    {"video_00", 9001, NULL},
+    {"audio_01", 5002, NULL},
+    {"video_01", 9002, NULL},
+  };
+  GstAdaptiveDemuxTestCallbacks test_callbacks = { 0 };
+  GstAdaptiveDemuxTestCase *testData;
+
+  testData = gst_adaptive_demux_test_case_new ();
+  http_src_callbacks.src_start = gst_dashdemux_http_src_start;
+  http_src_callbacks.src_create = gst_dashdemux_http_src_create;
+  COPY_OUTPUT_TEST_DATA (outputTestData, testData);
+  test_callbacks.appsink_received_data =
+      gst_adaptive_demux_test_check_received_data;
+  test_callbacks.appsink_eos =
+      gst_adaptive_demux_test_check_size_of_received_data;
+
+  gst_test_http_src_install_callbacks (&http_src_callbacks, inputTestData);
+  gst_adaptive_demux_test_run (DEMUX_ELEMENT_NAME,
+      "http://unit.test/test.mpd", &test_callbacks, testData);
+  gst_object_unref (testData);
+}
+
+GST_END_TEST;
+
+/* test setting a property on an object */
+#define test_int_prop(object, name, value) \
+do \
+{ \
+  int val = value; \
+  int val_after; \
+  g_object_set (object, name, val, NULL); \
+  g_object_get (object, name, &val_after, NULL); \
+  fail_unless (val_after == val, "property check failed for %s: set to %d, but got %d", \
+      name, val, val_after); \
+} while (0)
+
+#define test_float_prop(object, name, value) \
+do \
+{ \
+  float val = value; \
+  float val_after; \
+  g_object_set (object, name, val, NULL); \
+  g_object_get (object, name, &val_after, NULL); \
+  fail_unless (val_after == val, "property check failed for %s: set to %f, but got %f", \
+      name, val, val_after); \
+} while (0)
+
+/* test setting an invalid value for a property on an object.
+ * Expect an assert and the property to remain unchanged
+ */
+#define test_invalid_int_prop(object, name, value) \
+do \
+{ \
+  int val_before; \
+  int val_after; \
+  int val = value; \
+  g_object_get (object, name, &val_before, NULL); \
+  ASSERT_WARNING (g_object_set (object, name, val, NULL)); \
+  g_object_get (object, name, &val_after, NULL); \
+  fail_unless (val_after == val_before, "property check failed for %s: before %d, after %d", \
+      name, val_before, val_after); \
+} while (0)
+
+#define test_invalid_float_prop(object, name, value) \
+do \
+{ \
+  float val_before; \
+  float val_after; \
+  float val = value; \
+  g_object_get (object, name, &val_before, NULL); \
+  ASSERT_WARNING (g_object_set (object, name, val, NULL)); \
+  g_object_get (object, name, &val_after, NULL); \
+  fail_unless (val_after == val_before, "property check failed for %s: before %f, after %f", \
+      name, val_before, val_after); \
+} while (0)
+
+static void
+setAndTestDashParams (GstAdaptiveDemuxTestEngine * engine, gpointer user_data)
+{
+  /*  GstAdaptiveDemuxTestCase * testData = (GstAdaptiveDemuxTestCase*)user_data; */
+  GObject *dashdemux = G_OBJECT (engine->demux);
+
+  test_int_prop (dashdemux, "connection-speed", 1000);
+  test_invalid_int_prop (dashdemux, "connection-speed", 4294967 + 1);
+
+  test_float_prop (dashdemux, "bitrate-limit", 1);
+  test_invalid_float_prop (dashdemux, "bitrate-limit", 2.1);
+
+  test_int_prop (dashdemux, "max-buffering-time", 15);
+  test_invalid_int_prop (dashdemux, "max-buffering-time", 1);
+
+  test_float_prop (dashdemux, "bandwidth-usage", 0.5);
+  test_invalid_float_prop (dashdemux, "bandwidth-usage", 2);
+
+  test_int_prop (dashdemux, "max-bitrate", 1000);
+  test_invalid_int_prop (dashdemux, "max-bitrate", 10);
+}
+
+/*
+ * Test setting parameters
+ *
+ */
+GST_START_TEST (testParameters)
+{
+  const gchar *mpd =
+      "<?xml version=\"1.0\" encoding=\"utf-8\"?>"
+      "<MPD xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\""
+      "     xmlns=\"urn:mpeg:DASH:schema:MPD:2011\""
+      "     xsi:schemaLocation=\"urn:mpeg:DASH:schema:MPD:2011 DASH-MPD.xsd\""
+      "     profiles=\"urn:mpeg:dash:profile:isoff-on-demand:2011\""
+      "     type=\"static\""
+      "     minBufferTime=\"PT1.500S\""
+      "     mediaPresentationDuration=\"PT135.743S\">"
+      "  <Period>"
+      "    <AdaptationSet mimeType=\"audio/webm\""
+      "                   subsegmentAlignment=\"true\">"
+      "      <Representation id=\"171\""
+      "                      codecs=\"vorbis\""
+      "                      audioSamplingRate=\"44100\""
+      "                      startWithSAP=\"1\""
+      "                      bandwidth=\"129553\">"
+      "        <AudioChannelConfiguration"
+      "           schemeIdUri=\"urn:mpeg:dash:23003:3:audio_channel_configuration:2011\""
+      "           value=\"2\" />"
+      "        <BaseURL>audio.webm</BaseURL>"
+      "        <SegmentBase indexRange=\"4452-4686\""
+      "                     indexRangeExact=\"true\">"
+      "          <Initialization range=\"0-4451\" />"
+      "        </SegmentBase>"
+      "      </Representation></AdaptationSet></Period></MPD>";
+
+  GstDashDemuxTestInputData inputTestData[] = {
+    {"http://unit.test/test.mpd", (guint8 *) mpd, 0},
+    {"http://unit.test/audio.webm", NULL, 5000},
+    {NULL, NULL, 0},
+  };
+  GstTestHTTPSrcCallbacks http_src_callbacks = { 0 };
+  GstAdaptiveDemuxTestExpectedOutput outputTestData[] = {
+    {"audio_00", 5000, NULL},
+  };
+  GstAdaptiveDemuxTestCallbacks test_callbacks = { 0 };
+  GstAdaptiveDemuxTestCase *testData;
+
+  testData = gst_adaptive_demux_test_case_new ();
+  http_src_callbacks.src_start = gst_dashdemux_http_src_start;
+  http_src_callbacks.src_create = gst_dashdemux_http_src_create;
+  COPY_OUTPUT_TEST_DATA (outputTestData, testData);
+  test_callbacks.pre_test = setAndTestDashParams;
+  test_callbacks.appsink_received_data =
+      gst_adaptive_demux_test_check_received_data;
+  test_callbacks.appsink_eos =
+      gst_adaptive_demux_test_check_size_of_received_data;
+
+  gst_test_http_src_install_callbacks (&http_src_callbacks, inputTestData);
+  gst_adaptive_demux_test_run (DEMUX_ELEMENT_NAME, "http://unit.test/test.mpd",
+      &test_callbacks, testData);
+  gst_object_unref (testData);
+}
+
+GST_END_TEST;
+
+/*
+ * Test seeking
+ *
+ */
+GST_START_TEST (testSeek)
+{
+  const gchar *mpd =
+      "<?xml version=\"1.0\" encoding=\"utf-8\"?>"
+      "<MPD xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\""
+      "     xmlns=\"urn:mpeg:DASH:schema:MPD:2011\""
+      "     xsi:schemaLocation=\"urn:mpeg:DASH:schema:MPD:2011 DASH-MPD.xsd\""
+      "     profiles=\"urn:mpeg:dash:profile:isoff-on-demand:2011\""
+      "     type=\"static\""
+      "     minBufferTime=\"PT1.500S\""
+      "     mediaPresentationDuration=\"PT135.743S\">"
+      "  <Period>"
+      "    <AdaptationSet mimeType=\"audio/webm\""
+      "                   subsegmentAlignment=\"true\">"
+      "      <Representation id=\"171\""
+      "                      codecs=\"vorbis\""
+      "                      audioSamplingRate=\"44100\""
+      "                      startWithSAP=\"1\""
+      "                      bandwidth=\"129553\">"
+      "        <AudioChannelConfiguration"
+      "           schemeIdUri=\"urn:mpeg:dash:23003:3:audio_channel_configuration:2011\""
+      "           value=\"2\" />"
+      "        <BaseURL>audio.webm</BaseURL>"
+      "        <SegmentBase indexRange=\"4452-4686\""
+      "                     indexRangeExact=\"true\">"
+      "          <Initialization range=\"0-4451\" />"
+      "        </SegmentBase>"
+      "      </Representation></AdaptationSet></Period></MPD>";
+  GstDashDemuxTestInputData inputTestData[] = {
+    {"http://unit.test/test.mpd", (guint8 *) mpd, 0},
+    {"http://unit.test/audio.webm", NULL, 10000},
+    {NULL, NULL, 0},
+  };
+  GstTestHTTPSrcCallbacks http_src_callbacks = { 0 };
+  GstAdaptiveDemuxTestExpectedOutput outputTestData[] = {
+    {"audio_00", 10000, NULL},
+  };
+  GstAdaptiveDemuxTestCase *testData;
+
+  testData = gst_adaptive_demux_test_case_new ();
+
+  http_src_callbacks.src_start = gst_dashdemux_http_src_start;
+  http_src_callbacks.src_create = gst_dashdemux_http_src_create;
+  COPY_OUTPUT_TEST_DATA (outputTestData, testData);
+
+  /* media segment starts at 4687
+   * Issue a seek request after media segment has started to be downloaded
+   * on the first pad listed in GstAdaptiveDemuxTestOutputStreamData and the
+   * first chunk of at least one byte has already arrived in AppSink
+   */
+  testData->threshold_for_seek = 4687 + 1;
+
+  /* seek to 5ms.
+   * Because there is only one fragment, we expect the whole file to be
+   * downloaded again
+   */
+  testData->seek_event =
+      gst_event_new_seek (1.0, GST_FORMAT_TIME,
+      GST_SEEK_FLAG_FLUSH | GST_SEEK_FLAG_KEY_UNIT, GST_SEEK_TYPE_SET,
+      5 * GST_MSECOND, GST_SEEK_TYPE_NONE, 0);
+
+  gst_test_http_src_install_callbacks (&http_src_callbacks, inputTestData);
+  gst_adaptive_demux_test_seek (DEMUX_ELEMENT_NAME,
+      "http://unit.test/test.mpd", testData);
+  gst_object_unref (testData);
+}
+
+GST_END_TEST;
+
+
+#define SEGMENT_SIZE 10000
+static void
+run_seek_position_test (gdouble rate, GstSeekType start_type,
+    guint64 seek_start, GstSeekType stop_type, guint64 seek_stop,
+    GstSeekFlags flags, guint64 segment_start, guint64 segment_stop,
+    gint segments, gint seek_threshold_bytes)
+{
+  const gchar *mpd =
+      "<?xml version=\"1.0\" encoding=\"utf-8\"?>"
+      "<MPD xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\""
+      "     xmlns=\"urn:mpeg:DASH:schema:MPD:2011\""
+      "     xsi:schemaLocation=\"urn:mpeg:DASH:schema:MPD:2011 DASH-MPD.xsd\""
+      "     profiles=\"urn:mpeg:dash:profile:isoff-on-demand:2011\""
+      "     type=\"static\""
+      "     minBufferTime=\"PT1.500S\""
+      "     mediaPresentationDuration=\"PT135.743S\">"
+      "  <Period>"
+      "    <AdaptationSet "
+      "        mimeType=\"audio/mp4\" minBandwidth=\"128000\" "
+      "        maxBandwidth=\"128000\" segmentAlignment=\"true\">"
+      "      <SegmentTemplate timescale=\"48000\" "
+      "          initialization=\"init-$RepresentationID$.mp4\" "
+      "          media=\"$RepresentationID$-$Number$.mp4\" "
+      "          startNumber=\"1\">"
+      "        <SegmentTimeline>"
+      "          <S t=\"0\" d=\"48000\" /> "
+      "          <S d=\"48000\" /> "
+      "          <S d=\"48000\" /> "
+      "          <S d=\"48000\" /> "
+      "        </SegmentTimeline>"
+      "      </SegmentTemplate>"
+      "      <Representation id=\"audio\" bandwidth=\"128000\" "
+      "          codecs=\"mp4a.40.2\" audioSamplingRate=\"48000\"> "
+      "        <AudioChannelConfiguration "
+      "            schemeIdUri=\"urn:mpeg:dash:23003:3:audio_channel_configuration:2011\""
+      "            value=\"2\"> "
+      "        </AudioChannelConfiguration> "
+      "    </Representation></AdaptationSet></Period></MPD>";
+  GstDashDemuxTestInputData inputTestData[] = {
+    {"http://unit.test/test.mpd", (guint8 *) mpd, 0},
+    {"http://unit.test/init-audio.mp4", NULL, 10000},
+    {"http://unit.test/audio-1.mp4", NULL, 10000},
+    {"http://unit.test/audio-2.mp4", NULL, 10000},
+    {"http://unit.test/audio-3.mp4", NULL, 10000},
+    {"http://unit.test/audio-4.mp4", NULL, 10000},
+    {NULL, NULL, 0},
+  };
+  GstTestHTTPSrcCallbacks http_src_callbacks = { 0 };
+  GstAdaptiveDemuxTestExpectedOutput outputTestData[] = {
+    /* 1 from the init segment */
+    {"audio_00", (segments ? 1 + segments : 0) * 10000, NULL},
+  };
+  GstAdaptiveDemuxTestCase *testData;
+
+  testData = gst_adaptive_demux_test_case_new ();
+
+  http_src_callbacks.src_start = gst_dashdemux_http_src_start;
+  http_src_callbacks.src_create = gst_dashdemux_http_src_create;
+  COPY_OUTPUT_TEST_DATA (outputTestData, testData);
+
+  /* media segment starts at 4687
+   * Issue a seek request after media segment has started to be downloaded
+   * on the first pad listed in GstAdaptiveDemuxTestOutputStreamData and the
+   * first chunk of at least one byte has already arrived in AppSink
+   */
+  if (seek_threshold_bytes)
+    testData->threshold_for_seek = seek_threshold_bytes;
+  else
+    testData->threshold_for_seek = 4687 + 1;
+
+  /* FIXME hack to avoid having a 0 seqnum */
+  gst_util_seqnum_next ();
+
+  /* seek to 5ms.
+   * Because there is only one fragment, we expect the whole file to be
+   * downloaded again
+   */
+  testData->seek_event =
+      gst_event_new_seek (rate, GST_FORMAT_TIME, flags, start_type,
+      seek_start, stop_type, seek_stop);
+
+  gst_test_http_src_install_callbacks (&http_src_callbacks, inputTestData);
+  gst_adaptive_demux_test_seek (DEMUX_ELEMENT_NAME,
+      "http://unit.test/test.mpd", testData);
+  gst_object_unref (testData);
+}
+
+GST_START_TEST (testSeekKeyUnitPosition)
+{
+  /* Seek to 1.5s with key unit, it should go back to 1.0s. 3 segments will be
+   * pushed */
+  run_seek_position_test (1.0, GST_SEEK_TYPE_SET, 1500 * GST_MSECOND,
+      GST_SEEK_TYPE_NONE, 0, GST_SEEK_FLAG_FLUSH | GST_SEEK_FLAG_KEY_UNIT,
+      1000 * GST_MSECOND, -1, 3, 0);
+}
+
+GST_END_TEST;
+
+
+GST_START_TEST (testSeekUpdateStopPosition)
+{
+  run_seek_position_test (1.0, GST_SEEK_TYPE_NONE, 1500 * GST_MSECOND,
+      GST_SEEK_TYPE_SET, 3000 * GST_MSECOND, 0, 0, 3000 * GST_MSECOND, 3, 0);
+}
+
+GST_END_TEST;
+
+GST_START_TEST (testSeekPosition)
+{
+  /* Seek to 1.5s without key unit, it should keep the 1.5s, but still push
+   * from the 1st segment, so 3 segments will be
+   * pushed */
+  run_seek_position_test (1.0, GST_SEEK_TYPE_SET, 1500 * GST_MSECOND,
+      GST_SEEK_TYPE_NONE, 0, GST_SEEK_FLAG_FLUSH, 1500 * GST_MSECOND, -1, 3, 0);
+}
+
+GST_END_TEST;
+
+GST_START_TEST (testSeekSnapBeforePosition)
+{
+  /* Seek to 1.5s, snap before, it go to 1s */
+  run_seek_position_test (1.0, GST_SEEK_TYPE_SET, 1500 * GST_MSECOND,
+      GST_SEEK_TYPE_NONE, 0, GST_SEEK_FLAG_FLUSH | GST_SEEK_FLAG_SNAP_BEFORE,
+      1000 * GST_MSECOND, -1, 3, 0);
+}
+
+GST_END_TEST;
+
+
+GST_START_TEST (testSeekSnapAfterPosition)
+{
+  /* Seek to 1.5s with snap after, it should move to 2s */
+  run_seek_position_test (1.0, GST_SEEK_TYPE_SET, 1500 * GST_MSECOND,
+      GST_SEEK_TYPE_NONE, 0, GST_SEEK_FLAG_FLUSH | GST_SEEK_FLAG_SNAP_AFTER,
+      2000 * GST_MSECOND, -1, 2, 0);
+}
+
+GST_END_TEST;
+
+
+GST_START_TEST (testSeekSnapBeforeSamePosition)
+{
+  /* Snap seek without position */
+  run_seek_position_test (1.0, GST_SEEK_TYPE_NONE, GST_CLOCK_TIME_NONE,
+      GST_SEEK_TYPE_NONE, 0, GST_SEEK_FLAG_FLUSH | GST_SEEK_FLAG_SNAP_BEFORE,
+      2 * GST_MSECOND, -1, 2, SEGMENT_SIZE * 3 + 1);
+}
+
+GST_END_TEST;
+
+
+GST_START_TEST (testSeekSnapAfterSamePosition)
+{
+  /* Snap seek without position */
+  run_seek_position_test (1.0, GST_SEEK_TYPE_NONE, GST_CLOCK_TIME_NONE,
+      GST_SEEK_TYPE_NONE, 0, GST_SEEK_FLAG_FLUSH | GST_SEEK_FLAG_SNAP_AFTER,
+      3 * GST_MSECOND, -1, 1, SEGMENT_SIZE * 3 + 1);
+}
+
+GST_END_TEST;
+
+
+
+GST_START_TEST (testReverseSeekSnapBeforePosition)
+{
+  run_seek_position_test (-1.0, GST_SEEK_TYPE_SET, 1000 * GST_MSECOND,
+      GST_SEEK_TYPE_SET, 2500 * GST_MSECOND,
+      GST_SEEK_FLAG_FLUSH | GST_SEEK_FLAG_SNAP_BEFORE, 1000 * GST_MSECOND,
+      3000 * GST_MSECOND, 2, 0);
+}
+
+GST_END_TEST;
+
+
+GST_START_TEST (testReverseSeekSnapAfterPosition)
+{
+  run_seek_position_test (-1.0, GST_SEEK_TYPE_SET, 1000 * GST_MSECOND,
+      GST_SEEK_TYPE_SET, 2500 * GST_MSECOND,
+      GST_SEEK_FLAG_FLUSH | GST_SEEK_FLAG_SNAP_AFTER, 1000 * GST_MSECOND,
+      2000 * GST_MSECOND, 1, 0);
+}
+
+GST_END_TEST;
+
+static void
+testDownloadErrorMessageCallback (GstAdaptiveDemuxTestEngine * engine,
+    GstMessage * msg, gpointer user_data)
+{
+  GError *err = NULL;
+  gchar *dbg_info = NULL;
+
+  fail_unless (GST_MESSAGE_TYPE (msg) == GST_MESSAGE_ERROR);
+  gst_message_parse_error (msg, &err, &dbg_info);
+  GST_DEBUG ("Error from element %s : %s\n",
+      GST_OBJECT_NAME (msg->src), err->message);
+  fail_unless_equals_string (GST_OBJECT_NAME (msg->src), DEMUX_ELEMENT_NAME);
+  /*GST_DEBUG ("dbg_info=%s\n", dbg_info); */
+  g_error_free (err);
+  g_free (dbg_info);
+  g_main_loop_quit (engine->loop);
+}
+
+/*
+ * Test error case of failing to download a segment
+ */
+GST_START_TEST (testDownloadError)
+{
+  const gchar *mpd =
+      "<?xml version=\"1.0\" encoding=\"utf-8\"?>"
+      "<MPD xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\""
+      "     xmlns=\"urn:mpeg:DASH:schema:MPD:2011\""
+      "     xsi:schemaLocation=\"urn:mpeg:DASH:schema:MPD:2011 DASH-MPD.xsd\""
+      "     profiles=\"urn:mpeg:dash:profile:isoff-on-demand:2011\""
+      "     type=\"static\""
+      "     minBufferTime=\"PT1.500S\""
+      "     mediaPresentationDuration=\"PT0.5S\">"
+      "  <Period>"
+      "    <AdaptationSet mimeType=\"audio/webm\""
+      "                   subsegmentAlignment=\"true\">"
+      "      <Representation id=\"171\""
+      "                      codecs=\"vorbis\""
+      "                      audioSamplingRate=\"44100\""
+      "                      startWithSAP=\"1\""
+      "                      bandwidth=\"129553\">"
+      "        <AudioChannelConfiguration"
+      "           schemeIdUri=\"urn:mpeg:dash:23003:3:audio_channel_configuration:2011\""
+      "           value=\"2\" />"
+      "        <BaseURL>audio_file_not_available.webm</BaseURL>"
+      "        <SegmentBase indexRange=\"4452-4686\""
+      "                     indexRangeExact=\"true\">"
+      "          <Initialization range=\"0-4451\" />"
+      "        </SegmentBase>"
+      "      </Representation></AdaptationSet></Period></MPD>";
+
+  GstDashDemuxTestInputData inputTestData[] = {
+    {"http://unit.test/test.mpd", (guint8 *) mpd, 0},
+    {NULL, NULL, 0},
+  };
+  GstTestHTTPSrcCallbacks http_src_callbacks = { 0 };
+  GstAdaptiveDemuxTestExpectedOutput outputTestData[] = {
+    {"audio_00", 0, NULL},
+  };
+  GstAdaptiveDemuxTestCallbacks test_callbacks = { 0 };
+  GstAdaptiveDemuxTestCase *testData;
+
+  testData = gst_adaptive_demux_test_case_new ();
+  http_src_callbacks.src_start = gst_dashdemux_http_src_start;
+  http_src_callbacks.src_create = gst_dashdemux_http_src_create;
+  COPY_OUTPUT_TEST_DATA (outputTestData, testData);
+  test_callbacks.appsink_received_data =
+      gst_adaptive_demux_test_check_received_data;
+  test_callbacks.bus_error_message = testDownloadErrorMessageCallback;
+  test_callbacks.appsink_eos =
+      gst_adaptive_demux_test_check_size_of_received_data;
+
+  gst_test_http_src_install_callbacks (&http_src_callbacks, inputTestData);
+  gst_adaptive_demux_test_run (DEMUX_ELEMENT_NAME, "http://unit.test/test.mpd",
+      &test_callbacks, testData);
+  gst_object_unref (testData);
+}
+
+GST_END_TEST;
+
+/* generate queries to adaptive demux */
+static gboolean
+testQueryCheckDataReceived (GstAdaptiveDemuxTestEngine * engine,
+    GstAdaptiveDemuxTestOutputStream * stream,
+    GstBuffer * buffer, gpointer user_data)
+{
+  GList *pads;
+  GstPad *pad;
+  GstQuery *query;
+  gboolean ret;
+  gint64 duration;
+  gboolean seekable;
+  gint64 segment_start;
+  gint64 segment_end;
+  gchar *uri;
+  gchar *redirect_uri;
+  gboolean redirect_permanent;
+
+  pads = GST_ELEMENT_PADS (stream->appsink);
+
+  /* AppSink should have only 1 pad */
+  fail_unless (pads != NULL);
+  fail_unless (g_list_length (pads) == 1);
+  pad = GST_PAD (pads->data);
+
+  query = gst_query_new_duration (GST_FORMAT_TIME);
+  ret = gst_pad_peer_query (pad, query);
+  fail_unless (ret == TRUE);
+  gst_query_parse_duration (query, NULL, &duration);
+  fail_unless (duration == 135743 * GST_MSECOND);
+  gst_query_unref (query);
+
+  query = gst_query_new_seeking (GST_FORMAT_TIME);
+  ret = gst_pad_peer_query (pad, query);
+  fail_unless (ret == TRUE);
+  gst_query_parse_seeking (query, NULL, &seekable, &segment_start,
+      &segment_end);
+  fail_unless (seekable == TRUE);
+  fail_unless (segment_start == 0);
+  fail_unless (segment_end == duration);
+  gst_query_unref (query);
+
+  query = gst_query_new_uri ();
+  ret = gst_pad_peer_query (pad, query);
+  fail_unless (ret == TRUE);
+  gst_query_parse_uri (query, &uri);
+  gst_query_parse_uri_redirection (query, &redirect_uri);
+  gst_query_parse_uri_redirection_permanent (query, &redirect_permanent);
+  fail_unless (strcmp (uri, "http://unit.test/test.mpd") == 0);
+  /* adaptive demux does not reply with redirect information */
+  fail_unless (redirect_uri == NULL);
+  fail_unless (redirect_permanent == FALSE);
+  g_free (uri);
+  g_free (redirect_uri);
+  gst_query_unref (query);
+
+  return gst_adaptive_demux_test_check_received_data (engine,
+      stream, buffer, user_data);
+}
+
+/*
+ * Test queries
+ *
+ */
+GST_START_TEST (testQuery)
+{
+  const gchar *mpd =
+      "<?xml version=\"1.0\" encoding=\"utf-8\"?>"
+      "<MPD xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\""
+      "     xmlns=\"urn:mpeg:DASH:schema:MPD:2011\""
+      "     xsi:schemaLocation=\"urn:mpeg:DASH:schema:MPD:2011 DASH-MPD.xsd\""
+      "     profiles=\"urn:mpeg:dash:profile:isoff-on-demand:2011\""
+      "     type=\"static\""
+      "     minBufferTime=\"PT1.500S\""
+      "     mediaPresentationDuration=\"PT135.743S\">"
+      "  <Period>"
+      "    <AdaptationSet mimeType=\"audio/webm\""
+      "                   subsegmentAlignment=\"true\">"
+      "      <Representation id=\"171\""
+      "                      codecs=\"vorbis\""
+      "                      audioSamplingRate=\"44100\""
+      "                      startWithSAP=\"1\""
+      "                      bandwidth=\"129553\">"
+      "        <AudioChannelConfiguration"
+      "           schemeIdUri=\"urn:mpeg:dash:23003:3:audio_channel_configuration:2011\""
+      "           value=\"2\" />"
+      "        <BaseURL>audio.webm</BaseURL>"
+      "        <SegmentBase indexRange=\"4452-4686\""
+      "                     indexRangeExact=\"true\">"
+      "          <Initialization range=\"0-4451\" />"
+      "        </SegmentBase>"
+      "      </Representation></AdaptationSet></Period></MPD>";
+  GstDashDemuxTestInputData inputTestData[] = {
+    {"http://unit.test/test.mpd", (guint8 *) mpd, 0},
+    {"http://unit.test/audio.webm", NULL, 5000},
+    {NULL, NULL, 0},
+  };
+  GstTestHTTPSrcCallbacks http_src_callbacks = { 0 };
+  GstAdaptiveDemuxTestExpectedOutput outputTestData[] = {
+    {"audio_00", 5000, NULL},
+  };
+  GstAdaptiveDemuxTestCallbacks test_callbacks = { 0 };
+  GstAdaptiveDemuxTestCase *testData;
+
+  testData = gst_adaptive_demux_test_case_new ();
+  http_src_callbacks.src_start = gst_dashdemux_http_src_start;
+  http_src_callbacks.src_create = gst_dashdemux_http_src_create;
+  COPY_OUTPUT_TEST_DATA (outputTestData, testData);
+  test_callbacks.appsink_received_data = testQueryCheckDataReceived;
+  test_callbacks.appsink_eos =
+      gst_adaptive_demux_test_check_size_of_received_data;
+
+  gst_test_http_src_install_callbacks (&http_src_callbacks, inputTestData);
+  gst_adaptive_demux_test_run (DEMUX_ELEMENT_NAME,
+      "http://unit.test/test.mpd", &test_callbacks, testData);
+  gst_object_unref (testData);
+}
+
+GST_END_TEST;
+
+static GstFlowReturn
+test_fragment_download_error_src_create (GstTestHTTPSrc * src,
+    guint64 offset,
+    guint length, GstBuffer ** retbuf, gpointer context, gpointer user_data)
+{
+  const GstDashDemuxTestInputData *input =
+      (const GstDashDemuxTestInputData *) context;
+  fail_unless (input != NULL);
+  if (!g_str_has_suffix (input->uri, ".mpd") && offset > 2000) {
+    GST_DEBUG ("network_error %s %" G_GUINT64_FORMAT " @ %d",
+        input->uri, offset, 2000);
+    GST_ELEMENT_ERROR (src, RESOURCE, READ,
+        (("A network error occurred, or the server closed the connection unexpectedly.")), ("A network error occurred, or the server closed the connection unexpectedly."));
+    return GST_FLOW_ERROR;
+  }
+  return gst_dashdemux_http_src_create (src, offset, length, retbuf, context,
+      user_data);
+}
+
+/* function to check total size of data received by AppSink
+ * will be called when AppSink receives eos.
+ */
+static void
+testFragmentDownloadErrorCheckSizeOfDataReceived (GstAdaptiveDemuxTestEngine *
+    engine, GstAdaptiveDemuxTestOutputStream * stream, gpointer user_data)
+{
+  GstAdaptiveDemuxTestCase *testData = GST_ADAPTIVE_DEMUX_TEST_CASE (user_data);
+  GstAdaptiveDemuxTestExpectedOutput *testOutputStreamData;
+
+  testOutputStreamData =
+      gst_adaptive_demux_test_find_test_data_by_stream (testData, stream, NULL);
+  fail_unless (testOutputStreamData != NULL);
+
+  /* expect to receive more than 0 */
+  fail_unless (stream->total_received_size > 0,
+      "size validation failed for %s, expected > 0, received %d",
+      testOutputStreamData->name, stream->total_received_size);
+
+  /* expect to receive less than file size */
+  fail_unless (stream->total_received_size <
+      testOutputStreamData->expected_size,
+      "size validation failed for %s, expected < %d received %d",
+      testOutputStreamData->name, testOutputStreamData->expected_size,
+      stream->total_received_size);
+}
+
+/*
+ * Test fragment download error
+ * Let the adaptive demux download a few bytes, then instruct the
+ * GstTestHTTPSrc element to generate an error.
+ */
+GST_START_TEST (testFragmentDownloadError)
+{
+  const gchar *mpd =
+      "<?xml version=\"1.0\" encoding=\"utf-8\"?>"
+      "<MPD xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\""
+      "     xmlns=\"urn:mpeg:DASH:schema:MPD:2011\""
+      "     xsi:schemaLocation=\"urn:mpeg:DASH:schema:MPD:2011 DASH-MPD.xsd\""
+      "     profiles=\"urn:mpeg:dash:profile:isoff-on-demand:2011\""
+      "     type=\"static\""
+      "     minBufferTime=\"PT1.500S\""
+      "     mediaPresentationDuration=\"PT0.5S\">"
+      "  <Period>"
+      "    <AdaptationSet mimeType=\"audio/webm\""
+      "                   subsegmentAlignment=\"true\">"
+      "      <Representation id=\"171\""
+      "                      codecs=\"vorbis\""
+      "                      audioSamplingRate=\"44100\""
+      "                      startWithSAP=\"1\""
+      "                      bandwidth=\"129553\">"
+      "        <AudioChannelConfiguration"
+      "           schemeIdUri=\"urn:mpeg:dash:23003:3:audio_channel_configuration:2011\""
+      "           value=\"2\" />"
+      "        <BaseURL>audio.webm</BaseURL>"
+      "        <SegmentBase indexRange=\"4452-4686\""
+      "                     indexRangeExact=\"true\">"
+      "          <Initialization range=\"0-4451\" />"
+      "        </SegmentBase>"
+      "      </Representation></AdaptationSet></Period></MPD>";
+
+  GstDashDemuxTestInputData inputTestData[] = {
+    {"http://unit.test/test.mpd", (guint8 *) mpd, 0},
+    {"http://unit.test/audio.webm", NULL, 5000},
+    {NULL, NULL, 0},
+  };
+  GstTestHTTPSrcCallbacks http_src_callbacks = { 0 };
+  GstAdaptiveDemuxTestExpectedOutput outputTestData[] = {
+    {"audio_00", 5000, NULL},
+  };
+  GstAdaptiveDemuxTestCallbacks test_callbacks = { 0 };
+  GstAdaptiveDemuxTestCase *testData;
+
+  testData = gst_adaptive_demux_test_case_new ();
+  http_src_callbacks.src_start = gst_dashdemux_http_src_start;
+  http_src_callbacks.src_create = test_fragment_download_error_src_create;
+  COPY_OUTPUT_TEST_DATA (outputTestData, testData);
+  test_callbacks.appsink_received_data =
+      gst_adaptive_demux_test_check_received_data;
+  test_callbacks.appsink_eos = testFragmentDownloadErrorCheckSizeOfDataReceived;
+  /*  test_callbacks.demux_sent_eos = gst_adaptive_demux_test_check_size_of_received_data; */
+
+  test_callbacks.bus_error_message = testDownloadErrorMessageCallback;
+
+  gst_test_http_src_install_callbacks (&http_src_callbacks, inputTestData);
+  gst_adaptive_demux_test_run (DEMUX_ELEMENT_NAME,
+      "http://unit.test/test.mpd", &test_callbacks, testData);
+  gst_object_unref (testData);
+}
+
+GST_END_TEST;
+
+static Suite *
+dash_demux_suite (void)
+{
+  Suite *s = suite_create ("dash_demux");
+  TCase *tc_basicTest = tcase_create ("basicTest");
+
+  tcase_add_test (tc_basicTest, simpleTest);
+  tcase_add_test (tc_basicTest, testTwoPeriods);
+  tcase_add_test (tc_basicTest, testParameters);
+  tcase_add_test (tc_basicTest, testSeek);
+  tcase_add_test (tc_basicTest, testSeekKeyUnitPosition);
+  tcase_add_test (tc_basicTest, testSeekPosition);
+  tcase_add_test (tc_basicTest, testSeekUpdateStopPosition);
+  tcase_add_test (tc_basicTest, testSeekSnapBeforePosition);
+  tcase_add_test (tc_basicTest, testSeekSnapAfterPosition);
+  tcase_add_test (tc_basicTest, testSeekSnapBeforeSamePosition);
+  tcase_add_test (tc_basicTest, testSeekSnapAfterSamePosition);
+  tcase_add_test (tc_basicTest, testReverseSeekSnapBeforePosition);
+  tcase_add_test (tc_basicTest, testReverseSeekSnapAfterPosition);
+  tcase_add_test (tc_basicTest, testDownloadError);
+  tcase_add_test (tc_basicTest, testFragmentDownloadError);
+  tcase_add_test (tc_basicTest, testQuery);
+
+  tcase_add_unchecked_fixture (tc_basicTest, gst_adaptive_demux_test_setup,
+      gst_adaptive_demux_test_teardown);
+
+  suite_add_tcase (s, tc_basicTest);
+
+  return s;
+}
+
+GST_CHECK_MAIN (dash_demux);
diff --git a/tests/check/elements/dash_mpd.c b/tests/check/elements/dash_mpd.c
index 05d9711..348b65c 100644
--- a/tests/check/elements/dash_mpd.c
+++ b/tests/check/elements/dash_mpd.c
@@ -87,7 +87,7 @@
       "     id=\"testId\""
       "     type=\"static\""
       "     availabilityStartTime=\"2015-03-24T1:10:50\""
-      "     availabilityEndTime=\"2015-03-24T1:10:50\""
+      "     availabilityEndTime=\"2015-03-24T1:10:50.123456\""
       "     mediaPresentationDuration=\"P0Y1M2DT12H10M20.5S\""
       "     minimumUpdatePeriod=\"P0Y1M2DT12H10M20.5S\""
       "     minBufferTime=\"P0Y1M2DT12H10M20.5S\""
@@ -119,6 +119,7 @@
   assert_equals_int (gst_date_time_get_hour (availabilityStartTime), 1);
   assert_equals_int (gst_date_time_get_minute (availabilityStartTime), 10);
   assert_equals_int (gst_date_time_get_second (availabilityStartTime), 50);
+  assert_equals_int (gst_date_time_get_microsecond (availabilityStartTime), 0);
 
   availabilityEndTime = mpdclient->mpd_node->availabilityEndTime;
   assert_equals_int (gst_date_time_get_year (availabilityEndTime), 2015);
@@ -127,27 +128,29 @@
   assert_equals_int (gst_date_time_get_hour (availabilityEndTime), 1);
   assert_equals_int (gst_date_time_get_minute (availabilityEndTime), 10);
   assert_equals_int (gst_date_time_get_second (availabilityEndTime), 50);
+  assert_equals_int (gst_date_time_get_microsecond (availabilityEndTime),
+      123456);
 
-  assert_equals_int64 (mpdclient->mpd_node->mediaPresentationDuration,
-      (gint64) duration_to_ms (0, 1, 2, 12, 10, 20, 500));
+  assert_equals_uint64 (mpdclient->mpd_node->mediaPresentationDuration,
+      duration_to_ms (0, 1, 2, 12, 10, 20, 500));
 
-  assert_equals_int64 (mpdclient->mpd_node->minimumUpdatePeriod,
-      (gint64) duration_to_ms (0, 1, 2, 12, 10, 20, 500));
+  assert_equals_uint64 (mpdclient->mpd_node->minimumUpdatePeriod,
+      duration_to_ms (0, 1, 2, 12, 10, 20, 500));
 
-  assert_equals_int64 (mpdclient->mpd_node->minBufferTime,
-      (gint64) duration_to_ms (0, 1, 2, 12, 10, 20, 500));
+  assert_equals_uint64 (mpdclient->mpd_node->minBufferTime,
+      duration_to_ms (0, 1, 2, 12, 10, 20, 500));
 
-  assert_equals_int64 (mpdclient->mpd_node->timeShiftBufferDepth,
-      (gint64) duration_to_ms (0, 1, 2, 12, 10, 20, 500));
+  assert_equals_uint64 (mpdclient->mpd_node->timeShiftBufferDepth,
+      duration_to_ms (0, 1, 2, 12, 10, 20, 500));
 
-  assert_equals_int64 (mpdclient->mpd_node->suggestedPresentationDelay,
-      (gint64) duration_to_ms (0, 1, 2, 12, 10, 20, 500));
+  assert_equals_uint64 (mpdclient->mpd_node->suggestedPresentationDelay,
+      duration_to_ms (0, 1, 2, 12, 10, 20, 500));
 
-  assert_equals_int64 (mpdclient->mpd_node->maxSegmentDuration,
-      (gint64) duration_to_ms (0, 1, 2, 12, 10, 20, 500));
+  assert_equals_uint64 (mpdclient->mpd_node->maxSegmentDuration,
+      duration_to_ms (0, 1, 2, 12, 10, 20, 500));
 
-  assert_equals_int64 (mpdclient->mpd_node->maxSubsegmentDuration,
-      (gint64) duration_to_ms (0, 1, 2, 12, 10, 20, 500));
+  assert_equals_uint64 (mpdclient->mpd_node->maxSubsegmentDuration,
+      duration_to_ms (0, 1, 2, 12, 10, 20, 500));
 
   gst_mpd_client_free (mpdclient);
 }
@@ -301,10 +304,10 @@
   metricsNode = (GstMetricsNode *) mpdclient->mpd_node->Metrics->data;
   assert_equals_pointer (metricsNode->metrics, NULL);
   metricsRangeNode = (GstMetricsRangeNode *) metricsNode->MetricsRanges->data;
-  assert_equals_int64 (metricsRangeNode->starttime,
-      (gint64) duration_to_ms (0, 1, 2, 12, 10, 20, 500));
-  assert_equals_int64 (metricsRangeNode->duration,
-      (gint64) duration_to_ms (0, 1, 2, 12, 10, 20, 123));
+  assert_equals_uint64 (metricsRangeNode->starttime,
+      duration_to_ms (0, 1, 2, 12, 10, 20, 500));
+  assert_equals_uint64 (metricsRangeNode->duration,
+      duration_to_ms (0, 1, 2, 12, 10, 20, 123));
 
   gst_mpd_client_free (mpdclient);
 }
@@ -362,10 +365,10 @@
 
   periodNode = (GstPeriodNode *) mpdclient->mpd_node->Periods->data;
   assert_equals_string (periodNode->id, "TestId");
-  assert_equals_int64 (periodNode->start,
-      (gint64) duration_to_ms (0, 1, 2, 12, 10, 20, 123));
-  assert_equals_int64 (periodNode->duration,
-      (gint64) duration_to_ms (0, 1, 2, 12, 10, 20, 765));
+  assert_equals_uint64 (periodNode->start,
+      duration_to_ms (0, 1, 2, 12, 10, 20, 123));
+  assert_equals_uint64 (periodNode->duration,
+      duration_to_ms (0, 1, 2, 12, 10, 20, 765));
   assert_equals_int (periodNode->bitstreamSwitching, 1);
 
   gst_mpd_client_free (mpdclient);
@@ -531,7 +534,7 @@
       "<?xml version=\"1.0\"?>"
       "<MPD xmlns=\"urn:mpeg:dash:schema:mpd:2011\""
       "     profiles=\"urn:mpeg:dash:profile:isoff-main:2011\">"
-      "  <Period><SegmentList></SegmentList></Period></MPD>";
+      "  <Period><SegmentList duration=\"1\"></SegmentList></Period></MPD>";
 
   gboolean ret;
   GstMpdClient *mpdclient = gst_mpd_client_new ();
@@ -600,6 +603,7 @@
       "     profiles=\"urn:mpeg:dash:profile:isoff-main:2011\">"
       "  <Period>"
       "    <SegmentList timescale=\"10\""
+      "                 duration=\"1\""
       "                 presentationTimeOffset=\"11\""
       "                 indexRange=\"20-21\""
       "                 indexRangeExact=\"false\">"
@@ -721,7 +725,7 @@
       "<MPD xmlns=\"urn:mpeg:dash:schema:mpd:2011\""
       "     profiles=\"urn:mpeg:dash:profile:isoff-main:2011\">"
       "  <Period>"
-      "    <SegmentList>"
+      "    <SegmentList duration=\"0\">"
       "      <BitstreamSwitching sourceURL=\"TestSourceURL\""
       "                          range=\"100-200\">"
       "      </BitstreamSwitching></SegmentList></Period></MPD>";
@@ -759,7 +763,7 @@
       "<MPD xmlns=\"urn:mpeg:dash:schema:mpd:2011\""
       "     profiles=\"urn:mpeg:dash:profile:isoff-main:2011\">"
       "  <Period>"
-      "    <SegmentList>"
+      "    <SegmentList duration=\"1\">"
       "      <SegmentURL media=\"TestMedia\""
       "                  mediaRange=\"100-200\""
       "                  index=\"TestIndex\""
@@ -801,6 +805,7 @@
       "     profiles=\"urn:mpeg:dash:profile:isoff-main:2011\">"
       "  <Period>"
       "    <SegmentTemplate media=\"TestMedia\""
+      "                     duration=\"0\""
       "                     index=\"TestIndex\""
       "                     initialization=\"TestInitialization\""
       "                     bitstreamSwitching=\"TestBitstreamSwitching\">"
@@ -877,6 +882,7 @@
       "     profiles=\"urn:mpeg:dash:profile:isoff-main:2011\">"
       "  <Period>"
       "    <SegmentTemplate timescale=\"123456\""
+      "                     duration=\"1\""
       "                     presentationTimeOffset=\"123456789\""
       "                     indexRange=\"100-200\""
       "                     indexRangeExact=\"true\">"
@@ -998,7 +1004,7 @@
       "<MPD xmlns=\"urn:mpeg:dash:schema:mpd:2011\""
       "     profiles=\"urn:mpeg:dash:profile:isoff-main:2011\">"
       "  <Period>"
-      "    <SegmentTemplate>"
+      "    <SegmentTemplate duration=\"1\">"
       "      <BitstreamSwitching sourceURL=\"TestSourceURL\""
       "                          range=\"100-200\">"
       "      </BitstreamSwitching></SegmentTemplate></Period></MPD>";
@@ -1074,10 +1080,14 @@
   assert_equals_uint64 (adaptationSet->maxWidth, 2000);
   assert_equals_uint64 (adaptationSet->minHeight, 1100);
   assert_equals_uint64 (adaptationSet->maxHeight, 2100);
-  assert_equals_uint64 (adaptationSet->minFrameRate->num, 25);
-  assert_equals_uint64 (adaptationSet->minFrameRate->den, 123);
-  assert_equals_uint64 (adaptationSet->maxFrameRate->num, 26);
-  assert_equals_uint64 (adaptationSet->maxFrameRate->den, 1);
+  assert_equals_uint64 (adaptationSet->RepresentationBase->minFrameRate->num,
+      25);
+  assert_equals_uint64 (adaptationSet->RepresentationBase->minFrameRate->den,
+      123);
+  assert_equals_uint64 (adaptationSet->RepresentationBase->maxFrameRate->num,
+      26);
+  assert_equals_uint64 (adaptationSet->RepresentationBase->maxFrameRate->den,
+      1);
   assert_equals_int (adaptationSet->segmentAlignment->flag, 1);
   assert_equals_uint64 (adaptationSet->segmentAlignment->value, 2);
   assert_equals_int (adaptationSet->subsegmentAlignment->flag, 0);
@@ -1897,7 +1907,7 @@
       "     profiles=\"urn:mpeg:dash:profile:isoff-main:2011\">"
       "  <Period>"
       "    <AdaptationSet>"
-      "      <SegmentList></SegmentList></AdaptationSet></Period></MPD>";
+      "      <SegmentList duration=\"1\"></SegmentList></AdaptationSet></Period></MPD>";
 
   gboolean ret;
   GstMpdClient *mpdclient = gst_mpd_client_new ();
@@ -1931,6 +1941,7 @@
       "  <Period>"
       "    <AdaptationSet>"
       "      <SegmentTemplate media=\"TestMedia\""
+      "                       duration=\"1\""
       "                       index=\"TestIndex\""
       "                       initialization=\"TestInitialization\""
       "                       bitstreamSwitching=\"TestBitstreamSwitching\">"
@@ -1971,11 +1982,12 @@
       "<MPD xmlns=\"urn:mpeg:dash:schema:mpd:2011\""
       "     profiles=\"urn:mpeg:dash:profile:isoff-main:2011\">"
       "  <Period>"
-      "    <SegmentTemplate media=\"ParentMedia\" "
+      "    <SegmentTemplate media=\"ParentMedia\" duration=\"1\" "
       "                     initialization=\"ParentInitialization\">"
       "    </SegmentTemplate>"
       "    <AdaptationSet>"
       "      <SegmentTemplate media=\"TestMedia\""
+      "                       duration=\"1\""
       "                       index=\"TestIndex\""
       "                       bitstreamSwitching=\"TestBitstreamSwitching\">"
       "      </SegmentTemplate></AdaptationSet></Period></MPD>";
@@ -2016,7 +2028,7 @@
       "     profiles=\"urn:mpeg:dash:profile:isoff-main:2011\">"
       "  <Period>"
       "    <AdaptationSet>"
-      "      <Representation id=\"Test Id\""
+      "      <Representation id=\"Test_Id\""
       "                      bandwidth=\"100\""
       "                      qualityRanking=\"200\""
       "                      dependencyId=\"one two three\""
@@ -2033,7 +2045,7 @@
   adaptationSet = (GstAdaptationSetNode *) periodNode->AdaptationSets->data;
   representation = (GstRepresentationNode *)
       adaptationSet->Representations->data;
-  assert_equals_string (representation->id, "Test Id");
+  assert_equals_string (representation->id, "Test_Id");
   assert_equals_uint64 (representation->bandwidth, 100);
   assert_equals_uint64 (representation->qualityRanking, 200);
   assert_equals_string (representation->dependencyId[0], "one");
@@ -2277,7 +2289,7 @@
       "  <Period>"
       "    <AdaptationSet>"
       "      <Representation>"
-      "        <SegmentList>"
+      "        <SegmentList duration=\"1\">"
       "        </SegmentList>"
       "      </Representation></AdaptationSet></Period></MPD>";
 
@@ -2316,7 +2328,7 @@
       "  <Period>"
       "    <AdaptationSet>"
       "      <Representation>"
-      "        <SegmentTemplate>"
+      "        <SegmentTemplate duration=\"1\">"
       "        </SegmentTemplate>"
       "      </Representation></AdaptationSet></Period></MPD>";
 
@@ -2421,6 +2433,48 @@
       &selected_method);
   fail_if (urls == NULL);
   assert_equals_int (selected_method, GST_MPD_UTCTIMING_TYPE_HTTP_XSDATE);
+  urls =
+      gst_mpd_client_get_utc_timing_sources (mpdclient,
+      GST_MPD_UTCTIMING_TYPE_NTP, &selected_method);
+  fail_if (urls == NULL);
+  assert_equals_int (selected_method, GST_MPD_UTCTIMING_TYPE_NTP);
+  assert_equals_int (g_strv_length (urls), 4);
+  assert_equals_string (urls[0], "0.europe.pool.ntp.org");
+  assert_equals_string (urls[1], "1.europe.pool.ntp.org");
+  assert_equals_string (urls[2], "2.europe.pool.ntp.org");
+  assert_equals_string (urls[3], "3.europe.pool.ntp.org");
+  gst_mpd_client_free (mpdclient);
+}
+
+GST_END_TEST;
+
+/*
+ * Test parsing invalid UTCTiming values:
+ * - elements with no schemeIdUri property should be rejected
+ * - elements with no value property should be rejected
+ * - elements with unrecognised UTCTiming scheme should be rejected
+ * - elements with empty values should be rejected
+ *
+ */
+GST_START_TEST (dash_mpdparser_utctiming_invalid_value)
+{
+  const gchar *xml =
+      "<?xml version=\"1.0\"?>"
+      "<MPD xmlns=\"urn:mpeg:dash:schema:mpd:2011\""
+      " profiles=\"urn:mpeg:dash:profile:isoff-main:2011\">"
+      "<UTCTiming invalid_schemeIdUri=\"dummy.uri.scheme\" value=\"dummy value\"/>"
+      "<UTCTiming schemeIdUri=\"urn:mpeg:dash:utc:ntp:2014\" invalid_value=\"dummy value\"/>"
+      "<UTCTiming schemeIdUri=\"dummy.uri.scheme\" value=\"dummy value\"/>"
+      "<UTCTiming schemeIdUri=\"urn:mpeg:dash:utc:ntp:2014\" value=\"\"/>"
+      "</MPD>";
+  gboolean ret;
+  GstMpdClient *mpdclient = gst_mpd_client_new ();
+
+  ret = gst_mpd_parse (mpdclient, xml, (gint) strlen (xml));
+
+  assert_equals_int (ret, TRUE);
+  fail_if (mpdclient->mpd_node == NULL);
+  fail_if (mpdclient->mpd_node->UTCTiming != NULL);
   gst_mpd_client_free (mpdclient);
 }
 
@@ -2459,20 +2513,60 @@
  */
 GST_START_TEST (dash_mpdparser_template_parsing)
 {
-  const gchar *url_template;
   const gchar *id = "TestId";
   guint number = 7;
   guint bandwidth = 2500;
   guint64 time = 100;
   gchar *result;
 
-  url_template = "TestMedia$Bandwidth$$$test";
-  result =
-      gst_mpdparser_build_URL_from_template (url_template, id, number,
-      bandwidth, time);
-  assert_equals_string (result, "TestMedia2500$test");
-  g_free (result);
+  struct TestUrl
+  {
+    const gchar *urlTemplate;
+    const gchar *expectedResponse;
+  };
 
+  /* various test scenarios to attempt */
+  struct TestUrl testUrl[] = {
+    {"", NULL},                 /* empty string for template */
+    {"$$", "$"},                /* escaped $ */
+    {"Number", "Number"},       /* string similar with an identifier, but without $ */
+    {"Number$Number$", "Number7"},      /* Number identifier */
+    {"Number$Number$$$", "Number7$"},   /* Number identifier followed by $$ */
+    {"Number$Number$Number$Number$", "Number7Number7"}, /* series of "Number" string and Number identifier */
+    {"Representation$RepresentationID$", "RepresentationTestId"},       /* RepresentationID identifier */
+    {"TestMedia$Bandwidth$$$test", "TestMedia2500$test"},       /* Bandwidth identifier */
+    {"TestMedia$Time$", "TestMedia100"},        /* Time identifier */
+    {"TestMedia$Time", NULL},   /* Identifier not finished with $ */
+    {"Time$Time%d$", NULL},     /* usage of %d (no width) */
+    {"Time$Time%0d$", "Time100"},       /* usage of format smaller than number of digits */
+    {"Time$Time%01d$", "Time100"},      /* usage of format smaller than number of digits */
+    {"Time$Time%05d$", "Time00100"},    /* usage of format bigger than number of digits */
+    {"Time$Time%05dtest$", "Time00100test"},    /* usage extra text in format */
+    {"Time$Time%3d$", NULL},    /* incorrect format: width does not start with 0 */
+    {"Time$Time%0-4d$", NULL},  /* incorrect format: width is not a number */
+    {"Time$Time%0$", NULL},     /* incorrect format: no d, x or u */
+    {"Time$Time1%01d$", NULL},  /* incorrect format: does not start with % after identifier */
+    {"$Bandwidth%/init.mp4v", NULL},    /* incorrect identifier: not finished with $ */
+    {"$Number%/$Time$.mp4v", NULL},     /* incorrect number of $ separators */
+    {"$RepresentationID1$", NULL},      /* incorrect identifier */
+    {"$Bandwidth1$", NULL},     /* incorrect identifier */
+    {"$Number1$", NULL},        /* incorrect identifier */
+    {"$RepresentationID%01d$", NULL},   /* incorrect format: RepresentationID does not support formatting */
+    {"Time$Time%05u$", NULL},   /* %u format */
+    {"Time$Time%05x$", NULL},   /* %x format */
+    {"Time$Time%05utest$", NULL},       /* %u format followed by text */
+    {"Time$Time%05xtest$", NULL},       /* %x format followed by text */
+    {"Time$Time%05xtest%$", NULL},      /* second % character in format */
+  };
+
+  guint count = sizeof (testUrl) / sizeof (testUrl[0]);
+  for (int i = 0; i < count; i++) {
+    result =
+        gst_mpdparser_build_URL_from_template (testUrl[i].urlTemplate, id,
+        number, bandwidth, time);
+    assert_equals_string (result, testUrl[i].expectedResponse);
+    g_free (result);
+  }
 }
 
 GST_END_TEST;
@@ -2541,6 +2635,114 @@
 GST_END_TEST;
 
 /*
+ * Test bitstreamSwitching inheritance from Period to AdaptationSet
+ *
+ * Description of bistreamSwitching attribute in Period:
+ * "When set to ‘true’, this is equivalent as if the
+ * AdaptationSet@bitstreamSwitching for each Adaptation Set contained in this
+ * Period is set to 'true'. In this case, the AdaptationSet@bitstreamSwitching
+ * attribute shall not be set to 'false' for any Adaptation Set in this Period"
+ *
+ */
+GST_START_TEST (dash_mpdparser_bitstreamSwitching_inheritance)
+{
+  GList *adaptationSets;
+  GstAdaptationSetNode *adapt_set;
+  guint activeStreams;
+  GstActiveStream *activeStream;
+  GstCaps *caps;
+  GstStructure *s;
+  gboolean bitstreamSwitchingFlag;
+
+  const gchar *xml =
+      "<?xml version=\"1.0\"?>"
+      "<MPD xmlns=\"urn:mpeg:dash:schema:mpd:2011\""
+      "     profiles=\"urn:mpeg:dash:profile:isoff-main:2011\">"
+      "  <Period id=\"Period0\""
+      "          duration=\"P0Y0M1DT1H1M1S\""
+      "          bitstreamSwitching=\"true\">"
+      "    <AdaptationSet id=\"1\""
+      "                   mimeType=\"video/mp4\">"
+      "      <Representation>"
+      "      </Representation>"
+      "    </AdaptationSet>"
+      "    <AdaptationSet id=\"2\""
+      "                   mimeType=\"audio\""
+      "                   bitstreamSwitching=\"false\">"
+      "      <Representation>"
+      "      </Representation></AdaptationSet></Period></MPD>";
+
+  gboolean ret;
+  GstMpdClient *mpdclient = gst_mpd_client_new ();
+
+  ret = gst_mpd_parse (mpdclient, xml, (gint) strlen (xml));
+  assert_equals_int (ret, TRUE);
+
+  /* process the xml data */
+  ret = gst_mpd_client_setup_media_presentation (mpdclient, GST_CLOCK_TIME_NONE,
+      -1, NULL);
+  assert_equals_int (ret, TRUE);
+
+  /* get the list of adaptation sets of the first period */
+  adaptationSets = gst_mpd_client_get_adaptation_sets (mpdclient);
+  fail_if (adaptationSets == NULL);
+
+  /* setup streaming from the first adaptation set */
+  adapt_set = (GstAdaptationSetNode *) g_list_nth_data (adaptationSets, 0);
+  fail_if (adapt_set == NULL);
+  ret = gst_mpd_client_setup_streaming (mpdclient, adapt_set);
+  assert_equals_int (ret, TRUE);
+
+  /* setup streaming from the second adaptation set */
+  adapt_set = (GstAdaptationSetNode *) g_list_nth_data (adaptationSets, 1);
+  fail_if (adapt_set == NULL);
+  ret = gst_mpd_client_setup_streaming (mpdclient, adapt_set);
+  assert_equals_int (ret, TRUE);
+
+  /* 2 active streams */
+  activeStreams = gst_mpdparser_get_nb_active_stream (mpdclient);
+  assert_equals_int (activeStreams, 2);
+
+  /* get details of the first active stream */
+  activeStream = gst_mpdparser_get_active_stream_by_index (mpdclient, 0);
+  fail_if (activeStream == NULL);
+
+  assert_equals_int (activeStream->mimeType, GST_STREAM_VIDEO);
+  caps = gst_mpd_client_get_stream_caps (activeStream);
+  fail_unless (caps != NULL);
+  s = gst_caps_get_structure (caps, 0);
+  assert_equals_string (gst_structure_get_name (s), "video/quicktime");
+  gst_caps_unref (caps);
+
+  /* inherited from Period's bitstreamSwitching */
+  bitstreamSwitchingFlag =
+      gst_mpd_client_get_bitstream_switching_flag (activeStream);
+  assert_equals_int (bitstreamSwitchingFlag, TRUE);
+
+  /* get details of the second active stream */
+  activeStream = gst_mpdparser_get_active_stream_by_index (mpdclient, 1);
+  fail_if (activeStream == NULL);
+
+  assert_equals_int (activeStream->mimeType, GST_STREAM_AUDIO);
+  caps = gst_mpd_client_get_stream_caps (activeStream);
+  fail_unless (caps != NULL);
+  s = gst_caps_get_structure (caps, 0);
+  assert_equals_string (gst_structure_get_name (s), "audio");
+  gst_caps_unref (caps);
+
+  /* set to FALSE in our example, but overwritten to TRUE by Period's
+   * bitstreamSwitching
+   */
+  bitstreamSwitchingFlag =
+      gst_mpd_client_get_bitstream_switching_flag (activeStream);
+  assert_equals_int (bitstreamSwitchingFlag, TRUE);
+
+  gst_mpd_client_free (mpdclient);
+}
+
+GST_END_TEST;
+
+/*
  * Test various duration formats
  */
 GST_START_TEST (dash_mpdparser_various_duration_formats)
@@ -2575,50 +2777,50 @@
   periodNode =
       (GstPeriodNode *) g_list_nth_data (mpdclient->mpd_node->Periods, 0);
   assert_equals_string (periodNode->id, "Period0");
-  assert_equals_int64 (periodNode->start,
-      (gint64) duration_to_ms (0, 0, 0, 0, 0, 1, 0));
+  assert_equals_uint64 (periodNode->start,
+      duration_to_ms (0, 0, 0, 0, 0, 1, 0));
 
   periodNode =
       (GstPeriodNode *) g_list_nth_data (mpdclient->mpd_node->Periods, 1);
   assert_equals_string (periodNode->id, "Period1");
-  assert_equals_int64 (periodNode->start,
-      (gint64) duration_to_ms (0, 0, 0, 0, 0, 1, 500));
+  assert_equals_uint64 (periodNode->start,
+      duration_to_ms (0, 0, 0, 0, 0, 1, 500));
 
   periodNode =
       (GstPeriodNode *) g_list_nth_data (mpdclient->mpd_node->Periods, 2);
   assert_equals_string (periodNode->id, "Period2");
-  assert_equals_int64 (periodNode->start,
-      (gint64) duration_to_ms (0, 0, 0, 0, 0, 1, 700));
+  assert_equals_uint64 (periodNode->start,
+      duration_to_ms (0, 0, 0, 0, 0, 1, 700));
 
   periodNode =
       (GstPeriodNode *) g_list_nth_data (mpdclient->mpd_node->Periods, 3);
   assert_equals_string (periodNode->id, "Period3");
-  assert_equals_int64 (periodNode->start,
-      (gint64) duration_to_ms (0, 0, 0, 0, 1, 0, 0));
+  assert_equals_uint64 (periodNode->start,
+      duration_to_ms (0, 0, 0, 0, 1, 0, 0));
 
   periodNode =
       (GstPeriodNode *) g_list_nth_data (mpdclient->mpd_node->Periods, 4);
   assert_equals_string (periodNode->id, "Period4");
-  assert_equals_int64 (periodNode->start,
-      (gint64) duration_to_ms (0, 0, 0, 1, 0, 0, 0));
+  assert_equals_uint64 (periodNode->start,
+      duration_to_ms (0, 0, 0, 1, 0, 0, 0));
 
   periodNode =
       (GstPeriodNode *) g_list_nth_data (mpdclient->mpd_node->Periods, 5);
   assert_equals_string (periodNode->id, "Period5");
-  assert_equals_int64 (periodNode->start,
-      (gint64) duration_to_ms (0, 0, 1, 0, 0, 0, 0));
+  assert_equals_uint64 (periodNode->start,
+      duration_to_ms (0, 0, 1, 0, 0, 0, 0));
 
   periodNode =
       (GstPeriodNode *) g_list_nth_data (mpdclient->mpd_node->Periods, 6);
   assert_equals_string (periodNode->id, "Period6");
-  assert_equals_int64 (periodNode->start,
-      (gint64) duration_to_ms (0, 1, 0, 0, 0, 0, 0));
+  assert_equals_uint64 (periodNode->start,
+      duration_to_ms (0, 1, 0, 0, 0, 0, 0));
 
   periodNode =
       (GstPeriodNode *) g_list_nth_data (mpdclient->mpd_node->Periods, 7);
   assert_equals_string (periodNode->id, "Period7");
-  assert_equals_int64 (periodNode->start,
-      (gint64) duration_to_ms (1, 0, 0, 0, 0, 0, 0));
+  assert_equals_uint64 (periodNode->start,
+      duration_to_ms (1, 0, 0, 0, 0, 0, 0));
 
   gst_mpd_client_free (mpdclient);
 }
@@ -3080,7 +3282,8 @@
   GstAdaptationSetNode *adapt_set;
   guint activeStreams;
   GstActiveStream *activeStream;
-  const gchar *mimeType;
+  GstCaps *caps;
+  GstStructure *s;
   gboolean bitstreamSwitchingFlag;
   guint videoStreamWidth;
   guint videoStreamHeight;
@@ -3133,8 +3336,11 @@
   fail_if (activeStream == NULL);
 
   assert_equals_int (activeStream->mimeType, GST_STREAM_VIDEO);
-  mimeType = gst_mpd_client_get_stream_mimeType (activeStream);
-  assert_equals_string (mimeType, "video/quicktime");
+  caps = gst_mpd_client_get_stream_caps (activeStream);
+  fail_unless (caps != NULL);
+  s = gst_caps_get_structure (caps, 0);
+  assert_equals_string (gst_structure_get_name (s), "video/quicktime");
+  gst_caps_unref (caps);
 
   bitstreamSwitchingFlag =
       gst_mpd_client_get_bitstream_switching_flag (activeStream);
@@ -3416,6 +3622,179 @@
 
 GST_END_TEST;
 
+/* test multiple BaseUrl entries per section */
+GST_START_TEST (dash_mpdparser_get_baseURL5)
+{
+  GstPeriodNode *periodNode;
+  GstAdaptationSetNode *adaptationSet;
+  GstRepresentationNode *representation;
+  const gchar *baseURL;
+  GstBaseURL *gstBaseURL;
+
+  const gchar *xml =
+      "<?xml version=\"1.0\"?>"
+      "<MPD xmlns=\"urn:mpeg:dash:schema:mpd:2011\""
+      "     profiles=\"urn:mpeg:dash:profile:isoff-main:2011\">"
+      "  <BaseURL>/mpd_base_url1/</BaseURL>"
+      "  <BaseURL>/mpd_base_url2/</BaseURL>"
+      "  <Period id=\"Period0\" duration=\"P0Y0M1DT1H1M1S\">"
+      "    <BaseURL> period_base_url1/</BaseURL>"
+      "    <BaseURL> period_base_url2/</BaseURL>"
+      "    <BaseURL> period_base_url3/</BaseURL>"
+      "    <AdaptationSet id=\"1\" mimeType=\"audio\" lang=\"en\">"
+      "      <BaseURL>adaptation_base_url1/</BaseURL>"
+      "      <BaseURL>adaptation_base_url2/</BaseURL>"
+      "      <BaseURL>adaptation_base_url3/</BaseURL>"
+      "      <BaseURL>adaptation_base_url4/</BaseURL>"
+      "      <Representation>"
+      "        <BaseURL>representation_base_url1/</BaseURL>"
+      "        <BaseURL>representation_base_url2/</BaseURL>"
+      "        <BaseURL>representation_base_url3/</BaseURL>"
+      "        <BaseURL>representation_base_url4/</BaseURL>"
+      "        <BaseURL>representation_base_url5/</BaseURL>"
+      "      </Representation></AdaptationSet></Period></MPD>";
+
+  GstMpdClient *mpdclient = setup_mpd_client (xml);
+
+  assert_equals_int (g_list_length (mpdclient->mpd_node->BaseURLs), 2);
+  gstBaseURL = g_list_nth_data (mpdclient->mpd_node->BaseURLs, 0);
+  assert_equals_string (gstBaseURL->baseURL, "/mpd_base_url1/");
+  gstBaseURL = g_list_nth_data (mpdclient->mpd_node->BaseURLs, 1);
+  assert_equals_string (gstBaseURL->baseURL, "/mpd_base_url2/");
+
+  periodNode = (GstPeriodNode *) mpdclient->mpd_node->Periods->data;
+  assert_equals_int (g_list_length (periodNode->BaseURLs), 3);
+  gstBaseURL = g_list_nth_data (periodNode->BaseURLs, 0);
+  assert_equals_string (gstBaseURL->baseURL, " period_base_url1/");
+  gstBaseURL = g_list_nth_data (periodNode->BaseURLs, 1);
+  assert_equals_string (gstBaseURL->baseURL, " period_base_url2/");
+  gstBaseURL = g_list_nth_data (periodNode->BaseURLs, 2);
+  assert_equals_string (gstBaseURL->baseURL, " period_base_url3/");
+
+  adaptationSet = (GstAdaptationSetNode *) periodNode->AdaptationSets->data;
+  assert_equals_int (g_list_length (adaptationSet->BaseURLs), 4);
+  gstBaseURL = g_list_nth_data (adaptationSet->BaseURLs, 0);
+  assert_equals_string (gstBaseURL->baseURL, "adaptation_base_url1/");
+  gstBaseURL = g_list_nth_data (adaptationSet->BaseURLs, 1);
+  assert_equals_string (gstBaseURL->baseURL, "adaptation_base_url2/");
+  gstBaseURL = g_list_nth_data (adaptationSet->BaseURLs, 2);
+  assert_equals_string (gstBaseURL->baseURL, "adaptation_base_url3/");
+  gstBaseURL = g_list_nth_data (adaptationSet->BaseURLs, 3);
+  assert_equals_string (gstBaseURL->baseURL, "adaptation_base_url4/");
+
+  representation = (GstRepresentationNode *)
+      adaptationSet->Representations->data;
+  assert_equals_int (g_list_length (representation->BaseURLs), 5);
+  gstBaseURL = g_list_nth_data (representation->BaseURLs, 0);
+  assert_equals_string (gstBaseURL->baseURL, "representation_base_url1/");
+  gstBaseURL = g_list_nth_data (representation->BaseURLs, 1);
+  assert_equals_string (gstBaseURL->baseURL, "representation_base_url2/");
+  gstBaseURL = g_list_nth_data (representation->BaseURLs, 2);
+  assert_equals_string (gstBaseURL->baseURL, "representation_base_url3/");
+  gstBaseURL = g_list_nth_data (representation->BaseURLs, 3);
+  assert_equals_string (gstBaseURL->baseURL, "representation_base_url4/");
+  gstBaseURL = g_list_nth_data (representation->BaseURLs, 4);
+  assert_equals_string (gstBaseURL->baseURL, "representation_base_url5/");
+
+  /* test baseURL. Its value should be computed like this:
+   *  - start with xml url (null)
+   *  - set it to the value from MPD's BaseURL element: "/mpd_base_url1/"
+   *  - update the value with BaseURL element from Period. Because this
+   * is a relative url, it will update the current value. baseURL becomes
+   * "/mpd_base_url1/period_base_url1/"
+   *  - update the value with BaseURL element from AdaptationSet. Because this
+   * is a relative url, it will update the current value. baseURL becomes
+   * "/mpd_base_url1/period_base_url1/adaptation_base_url1/"
+   *  - update the value with BaseURL element from Representation. Because this
+   * is an relative url, it will update the current value."
+   */
+  baseURL = gst_mpdparser_get_baseURL (mpdclient, 0);
+  fail_if (baseURL == NULL);
+  assert_equals_string (baseURL,
+      "/mpd_base_url1/period_base_url1/adaptation_base_url1/representation_base_url1/");
+
+  gst_mpd_client_free (mpdclient);
+}
+
+GST_END_TEST;
+
+/* test no BaseURL */
+GST_START_TEST (dash_mpdparser_get_baseURL6)
+{
+  const gchar *baseURL;
+  const gchar *xml =
+      "<?xml version=\"1.0\"?>"
+      "<MPD xmlns=\"urn:mpeg:dash:schema:mpd:2011\""
+      "     profiles=\"urn:mpeg:dash:profile:isoff-main:2011\">"
+      "  <Period id=\"Period0\" duration=\"P0Y0M1DT1H1M1S\">"
+      "    <AdaptationSet id=\"1\" mimeType=\"audio\" lang=\"en\">"
+      "      <Representation>"
+      "      </Representation></AdaptationSet></Period></MPD>";
+
+  GstMpdClient *mpdclient = setup_mpd_client (xml);
+
+  baseURL = gst_mpdparser_get_baseURL (mpdclient, 0);
+  fail_if (baseURL == NULL);
+  assert_equals_string (baseURL, "");
+
+  gst_mpd_client_free (mpdclient);
+}
+
+GST_END_TEST;
+
+/* BaseURL: test that the path is made absolute (a / is prepended if needed */
+GST_START_TEST (dash_mpdparser_get_baseURL7)
+{
+  const gchar *baseURL;
+  const gchar *xml =
+      "<?xml version=\"1.0\"?>"
+      "<MPD xmlns=\"urn:mpeg:dash:schema:mpd:2011\""
+      "     profiles=\"urn:mpeg:dash:profile:isoff-main:2011\">"
+      "  <BaseURL>x/example.com/</BaseURL>"
+      "  <Period id=\"Period0\" duration=\"P0Y0M1DT1H1M1S\">"
+      "    <AdaptationSet id=\"1\" mimeType=\"audio\" lang=\"en\">"
+      "      <Representation>"
+      "      </Representation></AdaptationSet></Period></MPD>";
+
+  GstMpdClient *mpdclient;
+
+  mpdclient = setup_mpd_client (xml);
+
+  baseURL = gst_mpdparser_get_baseURL (mpdclient, 0);
+  fail_if (baseURL == NULL);
+  assert_equals_string (baseURL, "/x/example.com/");
+
+  gst_mpd_client_free (mpdclient);
+}
+
+GST_END_TEST;
+
+/* BaseURL: test that a / is not prepended if the string contains ':'
+ * This tests uris with schema present */
+GST_START_TEST (dash_mpdparser_get_baseURL8)
+{
+  const gchar *baseURL;
+  const gchar *xml =
+      "<?xml version=\"1.0\"?>"
+      "<MPD xmlns=\"urn:mpeg:dash:schema:mpd:2011\""
+      "     profiles=\"urn:mpeg:dash:profile:isoff-main:2011\">"
+      "  <BaseURL>x:y/example.com/</BaseURL>"
+      "  <Period id=\"Period0\" duration=\"P0Y0M1DT1H1M1S\">"
+      "    <AdaptationSet id=\"1\" mimeType=\"audio\" lang=\"en\">"
+      "      <Representation>"
+      "      </Representation></AdaptationSet></Period></MPD>";
+
+  GstMpdClient *mpdclient = setup_mpd_client (xml);
+
+  baseURL = gst_mpdparser_get_baseURL (mpdclient, 0);
+  fail_if (baseURL == NULL);
+  assert_equals_string (baseURL, "x:y/example.com/");
+
+  gst_mpd_client_free (mpdclient);
+}
+
+GST_END_TEST;
+
 /*
  * Test getting mediaPresentationDuration
  *
@@ -3509,12 +3888,9 @@
   gboolean hasNextSegment;
   GstActiveStream *activeStream;
   GstFlowReturn flow;
-  GstMediaSegment segment;
-  GstDateTime *segmentEndTime;
+  GstDateTime *segmentAvailability;
   GstDateTime *gst_time;
   GDateTime *g_time;
-  GstClockTime ts;
-  gint64 diff;
 
   const gchar *xml =
       "<?xml version=\"1.0\"?>"
@@ -3523,7 +3899,7 @@
       "     profiles=\"urn:mpeg:dash:profile:isoff-main:2011\""
       "     availabilityStartTime=\"2015-03-24T0:0:0\""
       "     mediaPresentationDuration=\"P0Y0M0DT3H3M30S\">"
-      "  <Period id=\"Period0\">"
+      "  <Period id=\"Period0\" start=\"P0Y0M0DT0H0M10S\">"
       "    <AdaptationSet mimeType=\"video/mp4\">"
       "      <Representation>"
       "        <SegmentList duration=\"45\">"
@@ -3602,11 +3978,6 @@
       gst_mpd_client_has_next_segment (mpdclient, activeStream, TRUE);
   assert_equals_int (hasNextSegment, 0);
 
-  /* get chunk 0. segment_index will not change */
-  ret = gst_mpdparser_get_chunk_by_index (mpdclient, 0, 0, &segment);
-  assert_equals_int (ret, 1);
-  assert_equals_int (segment.number, 1);
-
   /* segment index is still 1 */
   hasNextSegment =
       gst_mpd_client_has_next_segment (mpdclient, activeStream, TRUE);
@@ -3614,18 +3985,22 @@
 
   /* each segment has a duration of 0 hours, 0 min 45 seconds
    * segment index is 1.
-   * End time is at the end of segment 1, so 2 * segment_duration = 2 * 45s
+   * Start time is at the beginning of segment 1, so 1 * segment_duration = 1 * 45s
+   * Availability start time is at the end of the segment, so we add duration (45s)
+   * We also add period start time (10s)
+   * So, availability start time for segment 1 is: 10 (period start) +
+   * 45 (segment start) + 45 (duration) = 1'40s
    */
-  segmentEndTime =
-      gst_mpd_client_get_next_segment_availability_end_time (mpdclient,
+  segmentAvailability =
+      gst_mpd_client_get_next_segment_availability_start_time (mpdclient,
       activeStream);
-  assert_equals_int (gst_date_time_get_year (segmentEndTime), 2015);
-  assert_equals_int (gst_date_time_get_month (segmentEndTime), 3);
-  assert_equals_int (gst_date_time_get_day (segmentEndTime), 24);
-  assert_equals_int (gst_date_time_get_hour (segmentEndTime), 0);
-  assert_equals_int (gst_date_time_get_minute (segmentEndTime), 1);
-  assert_equals_int (gst_date_time_get_second (segmentEndTime), 30);
-  gst_date_time_unref (segmentEndTime);
+  assert_equals_int (gst_date_time_get_year (segmentAvailability), 2015);
+  assert_equals_int (gst_date_time_get_month (segmentAvailability), 3);
+  assert_equals_int (gst_date_time_get_day (segmentAvailability), 24);
+  assert_equals_int (gst_date_time_get_hour (segmentAvailability), 0);
+  assert_equals_int (gst_date_time_get_minute (segmentAvailability), 1);
+  assert_equals_int (gst_date_time_get_second (segmentAvailability), 40);
+  gst_date_time_unref (segmentAvailability);
 
   /* seek to time */
   gst_time = gst_date_time_new_from_iso8601_string ("2015-03-24T0:0:20Z");
@@ -3640,15 +4015,6 @@
       gst_mpd_client_has_next_segment (mpdclient, activeStream, TRUE);
   assert_equals_int (hasNextSegment, 1);
 
-  /* check if stream at moment ts is available.
-   * timeShiftBufferDepth was not set, so it is considered infinite.
-   * All segments from the past must be available
-   */
-  ts = 30 * GST_SECOND;
-  ret = gst_mpd_client_check_time_position (mpdclient, activeStream, ts, &diff);
-  assert_equals_int (ret, 0);
-  assert_equals_int64 (diff, 0);
-
   gst_mpd_client_free (mpdclient);
 }
 
@@ -3680,6 +4046,8 @@
       "          <Initialization sourceURL=\"TestSourceUrl\""
       "                          range=\"100-200\">"
       "          </Initialization>"
+      "          <RepresentationIndex sourceURL=\"TestSourceIndex\">"
+      "          </RepresentationIndex>"
       "        </SegmentBase>"
       "      </Representation></AdaptationSet></Period></MPD>";
 
@@ -3720,7 +4088,7 @@
       gst_mpd_client_get_next_header_index (mpdclient, &uri, 0, &range_start,
       &range_end);
   assert_equals_int (ret, TRUE);
-  assert_equals_string (uri, "TestSourceUrl");
+  assert_equals_string (uri, "TestSourceIndex");
   assert_equals_int64 (range_start, 10);
   assert_equals_int64 (range_end, 20);
   g_free (uri);
@@ -3940,36 +4308,11 @@
   expectedDuration = duration_to_ms (0, 0, 0, 0, 0, 110, 0);
   expectedTimestamp = duration_to_ms (0, 0, 0, 0, 0, 0, 0);
 
-  /* the representation contains 2 segments
-   *  - one inherited from AdaptationSet (duration 100)
-   *  - the second defined in the Representation (duration 110)
-   *
-   * Both will have the duration specified in the Representation (110)
-   */
+  /* the representation contains 1 segment (the one from Representation) */
 
   /* check first segment */
   ret = gst_mpd_client_get_next_fragment (mpdclient, 0, &fragment);
   assert_equals_int (ret, TRUE);
-  assert_equals_string (fragment.uri, "/TestMediaAdaptation");
-  assert_equals_int64 (fragment.range_start, 10);
-  assert_equals_int64 (fragment.range_end, 20);
-  assert_equals_string (fragment.index_uri, "/TestIndexAdaptation");
-  assert_equals_int64 (fragment.index_range_start, 30);
-  assert_equals_int64 (fragment.index_range_end, 40);
-  assert_equals_uint64 (fragment.duration, expectedDuration * GST_MSECOND);
-  assert_equals_uint64 (fragment.timestamp, expectedTimestamp * GST_MSECOND);
-  gst_media_fragment_info_clear (&fragment);
-
-  /* advance to next segment */
-  flow = gst_mpd_client_advance_segment (mpdclient, activeStream, TRUE);
-  assert_equals_int (flow, GST_FLOW_OK);
-
-  /* second segment starts after first ends */
-  expectedTimestamp = expectedTimestamp + expectedDuration;
-
-  /* check second segment */
-  ret = gst_mpd_client_get_next_fragment (mpdclient, 0, &fragment);
-  assert_equals_int (ret, TRUE);
   assert_equals_string (fragment.uri, "/TestMediaRep");
   assert_equals_int64 (fragment.range_start, 100);
   assert_equals_int64 (fragment.range_end, 200);
@@ -3980,6 +4323,10 @@
   assert_equals_uint64 (fragment.timestamp, expectedTimestamp * GST_MSECOND);
   gst_media_fragment_info_clear (&fragment);
 
+  /* try to advance to next segment. Should fail */
+  flow = gst_mpd_client_advance_segment (mpdclient, activeStream, TRUE);
+  assert_equals_int (flow, GST_FLOW_EOS);
+
   gst_mpd_client_free (mpdclient);
 }
 
@@ -4078,6 +4425,8 @@
   GstClockTime expectedDuration;
   GstClockTime expectedTimestamp;
   GstClockTime periodStartTime;
+  GstClockTime offset;
+  GstClockTime lastFragmentTimestampEnd;
   const gchar *xml =
       "<?xml version=\"1.0\"?>"
       "<MPD xmlns=\"urn:mpeg:dash:schema:mpd:2011\""
@@ -4088,6 +4437,7 @@
       "    <AdaptationSet mimeType=\"video/mp4\">"
       "      <Representation id=\"repId\" bandwidth=\"250000\">"
       "        <SegmentTemplate duration=\"12000\""
+      "                         presentationTimeOffset=\"15\""
       "                         media=\"TestMedia_rep=$RepresentationID$number=$Number$bandwidth=$Bandwidth$time=$Time$\""
       "                         index=\"TestIndex\">"
       "        </SegmentTemplate>"
@@ -4147,8 +4497,22 @@
   periodStartTime = gst_mpd_parser_get_period_start_time (mpdclient);
   assert_equals_uint64 (periodStartTime, 10 * GST_SECOND);
 
+  offset = gst_mpd_parser_get_stream_presentation_offset (mpdclient, 0);
+  assert_equals_uint64 (offset, 15 * GST_SECOND);
+
   gst_media_fragment_info_clear (&fragment);
 
+  /*
+   * Period starts at 10s.
+   * MPD has a duration of 3h3m30s, so period duration is 3h3m20s.
+   * We expect the last fragment to end at period start + period duration: 3h3m30s
+   */
+  expectedTimestamp = duration_to_ms (0, 0, 0, 3, 3, 30, 0);
+  gst_mpd_client_get_last_fragment_timestamp_end (mpdclient, 0,
+      &lastFragmentTimestampEnd);
+  assert_equals_uint64 (lastFragmentTimestampEnd,
+      expectedTimestamp * GST_MSECOND);
+
   gst_mpd_client_free (mpdclient);
 }
 
@@ -4167,6 +4531,7 @@
   GstClockTime expectedDuration;
   GstClockTime expectedTimestamp;
   GstFlowReturn flow;
+  GstDateTime *segmentAvailability;
 
   const gchar *xml =
       "<?xml version=\"1.0\"?>"
@@ -4233,6 +4598,22 @@
   assert_equals_uint64 (fragment.timestamp, expectedTimestamp * GST_MSECOND);
   gst_media_fragment_info_clear (&fragment);
 
+  /* first segment starts at 3s and has a duration of 2s.
+   * We also add period start time (10s) so we expect a segment availability
+   * start time of 15s
+   */
+  segmentAvailability =
+      gst_mpd_client_get_next_segment_availability_start_time (mpdclient,
+      activeStream);
+  fail_unless (segmentAvailability != NULL);
+  assert_equals_int (gst_date_time_get_year (segmentAvailability), 2015);
+  assert_equals_int (gst_date_time_get_month (segmentAvailability), 3);
+  assert_equals_int (gst_date_time_get_day (segmentAvailability), 24);
+  assert_equals_int (gst_date_time_get_hour (segmentAvailability), 0);
+  assert_equals_int (gst_date_time_get_minute (segmentAvailability), 0);
+  assert_equals_int (gst_date_time_get_second (segmentAvailability), 15);
+  gst_date_time_unref (segmentAvailability);
+
   /* advance to next segment */
   flow = gst_mpd_client_advance_segment (mpdclient, activeStream, TRUE);
   assert_equals_int (flow, GST_FLOW_OK);
@@ -4251,6 +4632,24 @@
   assert_equals_uint64 (fragment.timestamp, expectedTimestamp * GST_MSECOND);
   gst_media_fragment_info_clear (&fragment);
 
+  /* first segment starts at 3s and has a duration of 2s.
+   * Second segment starts when the first ends (5s) and has a duration of 2s,
+   * so it ends at 7s.
+   * We also add period start time (10s) so we expect a segment availability
+   * start time of 17s
+   */
+  segmentAvailability =
+      gst_mpd_client_get_next_segment_availability_start_time (mpdclient,
+      activeStream);
+  fail_unless (segmentAvailability != NULL);
+  assert_equals_int (gst_date_time_get_year (segmentAvailability), 2015);
+  assert_equals_int (gst_date_time_get_month (segmentAvailability), 3);
+  assert_equals_int (gst_date_time_get_day (segmentAvailability), 24);
+  assert_equals_int (gst_date_time_get_hour (segmentAvailability), 0);
+  assert_equals_int (gst_date_time_get_minute (segmentAvailability), 0);
+  assert_equals_int (gst_date_time_get_second (segmentAvailability), 17);
+  gst_date_time_unref (segmentAvailability);
+
   /* advance to next segment */
   flow = gst_mpd_client_advance_segment (mpdclient, activeStream, TRUE);
   assert_equals_int (flow, GST_FLOW_OK);
@@ -4268,6 +4667,154 @@
   assert_equals_uint64 (fragment.timestamp, expectedTimestamp * GST_MSECOND);
   gst_media_fragment_info_clear (&fragment);
 
+  /* Third segment starts at 10s and has a duration of 3s so it ends at 13s.
+   * We also add period start time (10s) so we expect a segment availability
+   * start time of 23s
+   */
+  segmentAvailability =
+      gst_mpd_client_get_next_segment_availability_start_time (mpdclient,
+      activeStream);
+  fail_unless (segmentAvailability != NULL);
+  assert_equals_int (gst_date_time_get_year (segmentAvailability), 2015);
+  assert_equals_int (gst_date_time_get_month (segmentAvailability), 3);
+  assert_equals_int (gst_date_time_get_day (segmentAvailability), 24);
+  assert_equals_int (gst_date_time_get_hour (segmentAvailability), 0);
+  assert_equals_int (gst_date_time_get_minute (segmentAvailability), 0);
+  assert_equals_int (gst_date_time_get_second (segmentAvailability), 23);
+  gst_date_time_unref (segmentAvailability);
+
+  gst_mpd_client_free (mpdclient);
+}
+
+GST_END_TEST;
+
+/*
+ * Test SegmentList with multiple inherited segmentURLs
+ *
+ */
+GST_START_TEST (dash_mpdparser_multiple_inherited_segmentURL)
+{
+  GList *adaptationSets;
+  GstAdaptationSetNode *adapt_set;
+  GstActiveStream *activeStream;
+  GstMediaFragmentInfo fragment;
+  GstClockTime expectedDuration;
+  GstClockTime expectedTimestamp;
+  GstFlowReturn flow;
+
+  /*
+   * Period duration is 30 seconds
+   * Period start is 10 seconds. Thus, period duration is 20 seconds.
+   *
+   * There are 2 segments in the AdaptationSet segment list and 2 in the
+   * Representation's segment list.
+   * Segment duration is 5s for the Adaptation segments and 8s for
+   * Representation segments.
+   * Separately, each segment list (duration 2*5=10 or 2*8=16) fits comfortably
+   * in the Period's 20s duration.
+   *
+   * We expect the Representation segments to overwrite the AdaptationSet segments.
+   */
+  const gchar *xml =
+      "<?xml version=\"1.0\"?>"
+      "<MPD xmlns=\"urn:mpeg:dash:schema:mpd:2011\""
+      " profiles=\"urn:mpeg:dash:profile:isoff-main:2011\""
+      " availabilityStartTime=\"2015-03-24T0:0:0\""
+      " mediaPresentationDuration=\"P0Y0M0DT0H0M30S\">"
+      "<Period start=\"P0Y0M0DT0H0M10S\">"
+      "  <AdaptationSet mimeType=\"video/mp4\">"
+      "    <SegmentList duration=\"5\">"
+      "      <SegmentURL"
+      "         media=\"TestMedia0\" mediaRange=\"10-20\""
+      "         index=\"TestIndex0\" indexRange=\"100-200\""
+      "      ></SegmentURL>"
+      "      <SegmentURL"
+      "         media=\"TestMedia1\" mediaRange=\"20-30\""
+      "         index=\"TestIndex1\" indexRange=\"200-300\""
+      "      ></SegmentURL>"
+      "    </SegmentList>"
+      "    <Representation>"
+      "      <SegmentList duration=\"8\">"
+      "        <SegmentURL"
+      "           media=\"TestMedia2\" mediaRange=\"30-40\""
+      "           index=\"TestIndex2\" indexRange=\"300-400\""
+      "        ></SegmentURL>"
+      "        <SegmentURL"
+      "           media=\"TestMedia3\" mediaRange=\"40-50\""
+      "           index=\"TestIndex3\" indexRange=\"400-500\""
+      "        ></SegmentURL>"
+      "      </SegmentList>"
+      "    </Representation></AdaptationSet></Period></MPD>";
+
+  gboolean ret;
+  GstMpdClient *mpdclient = gst_mpd_client_new ();
+
+  ret = gst_mpd_parse (mpdclient, xml, (gint) strlen (xml));
+  assert_equals_int (ret, TRUE);
+
+  /* process the xml data */
+  ret = gst_mpd_client_setup_media_presentation (mpdclient, GST_CLOCK_TIME_NONE,
+      -1, NULL);
+  assert_equals_int (ret, TRUE);
+
+  /* get the list of adaptation sets of the first period */
+  adaptationSets = gst_mpd_client_get_adaptation_sets (mpdclient);
+  fail_if (adaptationSets == NULL);
+
+  /* setup streaming from the first adaptation set */
+  adapt_set = (GstAdaptationSetNode *) g_list_nth_data (adaptationSets, 0);
+  fail_if (adapt_set == NULL);
+  ret = gst_mpd_client_setup_streaming (mpdclient, adapt_set);
+  assert_equals_int (ret, TRUE);
+
+  activeStream = gst_mpdparser_get_active_stream_by_index (mpdclient, 0);
+  fail_if (activeStream == NULL);
+
+  expectedDuration = duration_to_ms (0, 0, 0, 0, 0, 8, 0);
+  expectedTimestamp = duration_to_ms (0, 0, 0, 0, 0, 0, 0);
+
+  /* the representation contains 2 segments defined in the Representation
+   *
+   * Both will have the duration specified in the Representation (8)
+   */
+
+  /* check first segment */
+  ret = gst_mpd_client_get_next_fragment (mpdclient, 0, &fragment);
+  assert_equals_int (ret, TRUE);
+  assert_equals_string (fragment.uri, "/TestMedia2");
+  assert_equals_int64 (fragment.range_start, 30);
+  assert_equals_int64 (fragment.range_end, 40);
+  assert_equals_string (fragment.index_uri, "/TestIndex2");
+  assert_equals_int64 (fragment.index_range_start, 300);
+  assert_equals_int64 (fragment.index_range_end, 400);
+  assert_equals_uint64 (fragment.duration, expectedDuration * GST_MSECOND);
+  assert_equals_uint64 (fragment.timestamp, expectedTimestamp * GST_MSECOND);
+  gst_media_fragment_info_clear (&fragment);
+
+  /* advance to next segment */
+  flow = gst_mpd_client_advance_segment (mpdclient, activeStream, TRUE);
+  assert_equals_int (flow, GST_FLOW_OK);
+
+  /* second segment starts after previous ends */
+  expectedTimestamp = expectedTimestamp + expectedDuration;
+
+  /* check second segment */
+  ret = gst_mpd_client_get_next_fragment (mpdclient, 0, &fragment);
+  assert_equals_int (ret, TRUE);
+  assert_equals_string (fragment.uri, "/TestMedia3");
+  assert_equals_int64 (fragment.range_start, 40);
+  assert_equals_int64 (fragment.range_end, 50);
+  assert_equals_string (fragment.index_uri, "/TestIndex3");
+  assert_equals_int64 (fragment.index_range_start, 400);
+  assert_equals_int64 (fragment.index_range_end, 500);
+  assert_equals_uint64 (fragment.duration, expectedDuration * GST_MSECOND);
+  assert_equals_uint64 (fragment.timestamp, expectedTimestamp * GST_MSECOND);
+  gst_media_fragment_info_clear (&fragment);
+
+  /* try to advance to the next segment. There isn't any, so it should fail */
+  flow = gst_mpd_client_advance_segment (mpdclient, activeStream, TRUE);
+  assert_equals_int (flow, GST_FLOW_EOS);
+
   gst_mpd_client_free (mpdclient);
 }
 
@@ -4438,6 +4985,368 @@
 
 GST_END_TEST;
 
+GST_START_TEST (dash_mpdparser_whitespace_strings)
+{
+  fail_unless (gst_mpdparser_validate_no_whitespace ("") == TRUE);
+  fail_unless (gst_mpdparser_validate_no_whitespace ("/") == TRUE);
+  fail_unless (gst_mpdparser_validate_no_whitespace (" ") == FALSE);
+  fail_unless (gst_mpdparser_validate_no_whitespace ("aaaaaaaa ") == FALSE);
+  fail_unless (gst_mpdparser_validate_no_whitespace ("a\ta") == FALSE);
+  fail_unless (gst_mpdparser_validate_no_whitespace ("a\ra") == FALSE);
+  fail_unless (gst_mpdparser_validate_no_whitespace ("a\na") == FALSE);
+}
+
+GST_END_TEST;
+
+GST_START_TEST (dash_mpdparser_rfc1738_strings)
+{
+  fail_unless (gst_mpdparser_validate_rfc1738_url ("/") == TRUE);
+  fail_unless (gst_mpdparser_validate_rfc1738_url (" ") == FALSE);
+  fail_unless (gst_mpdparser_validate_rfc1738_url ("aaaaaaaa ") == FALSE);
+
+  fail_unless (gst_mpdparser_validate_rfc1738_url ("") == TRUE);
+  fail_unless (gst_mpdparser_validate_rfc1738_url ("a") == TRUE);
+  fail_unless (gst_mpdparser_validate_rfc1738_url
+      (";:@&=aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ0123456789$-_.+!*'(),%AA")
+      == TRUE);
+  fail_unless (gst_mpdparser_validate_rfc1738_url
+      (";:@&=aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ0123456789$-_.+!*'(),/%AA")
+      == TRUE);
+  fail_unless (gst_mpdparser_validate_rfc1738_url
+      (";:@&=aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ0123456789$-_.+!*'(),% ")
+      == FALSE);
+  fail_unless (gst_mpdparser_validate_rfc1738_url ("%AA") == TRUE);
+  fail_unless (gst_mpdparser_validate_rfc1738_url ("%A") == FALSE);
+  fail_unless (gst_mpdparser_validate_rfc1738_url ("%") == FALSE);
+  fail_unless (gst_mpdparser_validate_rfc1738_url ("%XA") == FALSE);
+  fail_unless (gst_mpdparser_validate_rfc1738_url ("%AX") == FALSE);
+  fail_unless (gst_mpdparser_validate_rfc1738_url ("%XX") == FALSE);
+  fail_unless (gst_mpdparser_validate_rfc1738_url ("\001") == FALSE);
+}
+
+GST_END_TEST;
+
+/*
+ * Test negative period duration
+ */
+GST_START_TEST (dash_mpdparser_negative_period_duration)
+{
+  const gchar *xml =
+      "<?xml version=\"1.0\"?>"
+      "<MPD xmlns=\"urn:mpeg:dash:schema:mpd:2011\""
+      "     profiles=\"urn:mpeg:dash:profile:isoff-main:2011\""
+      "     availabilityStartTime=\"2015-03-24T0:0:0\""
+      "     mediaPresentationDuration=\"P0Y0M0DT3H3M30S\">"
+      "  <Period id=\"Period0\""
+      "          start=\"P0Y0M0DT1H0M0S\""
+      "          duration=\"-PT10S\">"
+      "  </Period><Period id=\"Period1\"></Period></MPD>";
+
+  gboolean ret;
+  GstMpdClient *mpdclient = gst_mpd_client_new ();
+
+  ret = gst_mpd_parse (mpdclient, xml, (gint) strlen (xml));
+  assert_equals_int (ret, TRUE);
+
+  /* process the xml data
+   * should fail due to negative duration of Period0
+   */
+  ret = gst_mpd_client_setup_media_presentation (mpdclient, GST_CLOCK_TIME_NONE,
+      -1, NULL);
+  assert_equals_int (ret, FALSE);
+
+  gst_mpd_client_free (mpdclient);
+}
+
+GST_END_TEST;
+
+/*
+ * Test parsing negative values from attributes that should be unsigned
+ *
+ */
+GST_START_TEST (dash_mpdparser_read_unsigned_from_negative_values)
+{
+  GstPeriodNode *periodNode;
+  GstSegmentBaseType *segmentBase;
+  GstAdaptationSetNode *adaptationSet;
+  GstRepresentationNode *representation;
+  GstSubRepresentationNode *subRepresentation;
+
+  const gchar *xml =
+      "<?xml version=\"1.0\"?>"
+      "<MPD xmlns=\"urn:mpeg:dash:schema:mpd:2011\""
+      "     profiles=\"urn:mpeg:dash:profile:isoff-main:2011\""
+      "     availabilityStartTime=\"2015--1-13T12:25:37\">"
+      "  <Period start=\"-P-2015Y\" duration=\"-P-5M\">"
+      "    <SegmentBase presentationTimeOffset=\"-10\""
+      "                 timescale=\"-5\""
+      "                 indexRange=\"1--10\">"
+      "    </SegmentBase>"
+      "    <AdaptationSet par=\"-1:7\""
+      "                   minFrameRate=\" -1\""
+      "                   segmentAlignment=\"-4\">"
+      "      <Representation>"
+      "        <SubRepresentation dependencyLevel=\"1 -2 3\">"
+      "        </SubRepresentation>"
+      "      </Representation></AdaptationSet></Period></MPD>";
+
+  gboolean ret;
+  GstMpdClient *mpdclient = gst_mpd_client_new ();
+
+  ret = gst_mpd_parse (mpdclient, xml, (gint) strlen (xml));
+  assert_equals_int (ret, TRUE);
+
+  periodNode = (GstPeriodNode *) mpdclient->mpd_node->Periods->data;
+  segmentBase = periodNode->SegmentBase;
+  adaptationSet = (GstAdaptationSetNode *) periodNode->AdaptationSets->data;
+  representation = (GstRepresentationNode *)
+      adaptationSet->Representations->data;
+  subRepresentation = (GstSubRepresentationNode *)
+      representation->SubRepresentations->data;
+
+  /* availabilityStartTime parsing should fail */
+  fail_if (mpdclient->mpd_node->availabilityStartTime != NULL);
+
+  /* Period start parsing should fail */
+  assert_equals_int64 (periodNode->start, -1);
+
+  /* Period duration parsing should fail */
+  assert_equals_int64 (periodNode->duration, -1);
+
+  /* expect negative value to be rejected and presentationTimeOffset to be 0 */
+  assert_equals_uint64 (segmentBase->presentationTimeOffset, 0);
+  assert_equals_uint64 (segmentBase->timescale, 1);
+  fail_if (segmentBase->indexRange != NULL);
+
+  /* par ratio parsing should fail */
+  fail_if (adaptationSet->par != NULL);
+
+  /* minFrameRate parsing should fail */
+  fail_if (adaptationSet->RepresentationBase->minFrameRate != NULL);
+
+  /* segmentAlignment parsing should fail */
+  fail_if (adaptationSet->segmentAlignment != NULL);
+
+  /* dependency level parsing should fail */
+  fail_if (subRepresentation->dependencyLevel != NULL);
+
+  gst_mpd_client_free (mpdclient);
+}
+
+GST_END_TEST;
+
+/*
+ * Test negative mediaPresentationDuration duration
+ */
+GST_START_TEST (dash_mpdparser_negative_mediaPresentationDuration)
+{
+  const gchar *xml =
+      "<?xml version=\"1.0\"?>"
+      "<MPD xmlns=\"urn:mpeg:dash:schema:mpd:2011\""
+      "     profiles=\"urn:mpeg:dash:profile:isoff-main:2011\""
+      "     availabilityStartTime=\"2015-03-24T0:0:0\""
+      "     mediaPresentationDuration=\"-P0Y0M0DT3H3M30S\">"
+      "  <Period id=\"Period0\" start=\"P0Y0M0DT1H0M0S\"></Period></MPD>";
+
+  gboolean ret;
+  GstMpdClient *mpdclient = gst_mpd_client_new ();
+
+  ret = gst_mpd_parse (mpdclient, xml, (gint) strlen (xml));
+  assert_equals_int (ret, TRUE);
+
+  /* process the xml data
+   * should fail due to negative duration of mediaPresentationDuration
+   */
+  ret = gst_mpd_client_setup_media_presentation (mpdclient, GST_CLOCK_TIME_NONE,
+      -1, NULL);
+  assert_equals_int (ret, FALSE);
+
+  gst_mpd_client_free (mpdclient);
+}
+
+GST_END_TEST;
+
+/*
+ * Test parsing an MPD with no profiles
+ */
+GST_START_TEST (dash_mpdparser_no_profiles)
+{
+  const gchar *xml =
+      "<?xml version=\"1.0\"?>"
+      "<MPD xmlns=\"urn:mpeg:dash:schema:mpd:2011\"></MPD>";
+
+  gboolean ret;
+  GstMpdClient *mpdclient = gst_mpd_client_new ();
+
+  ret = gst_mpd_parse (mpdclient, xml, strlen (xml));
+
+  assert_equals_int (ret, TRUE);
+
+  gst_mpd_client_free (mpdclient);
+}
+
+GST_END_TEST;
+
+/*
+ * Test S node list greater than SegmentURL list
+ *
+ */
+GST_START_TEST (dash_mpdparser_unmatched_segmentTimeline_segmentURL)
+{
+  GList *adaptationSets;
+  GstAdaptationSetNode *adapt_set;
+
+  const gchar *xml =
+      "<?xml version=\"1.0\"?>"
+      "<MPD xmlns=\"urn:mpeg:dash:schema:mpd:2011\""
+      "     profiles=\"urn:mpeg:dash:profile:isoff-main:2011\""
+      "     availabilityStartTime=\"2015-03-24T0:0:0\""
+      "     mediaPresentationDuration=\"P0Y0M0DT3H3M30S\">"
+      "  <Period start=\"P0Y0M0DT0H0M10S\">"
+      "    <AdaptationSet mimeType=\"video/mp4\">"
+      "      <Representation>"
+      "        <SegmentList>"
+      "          <SegmentTimeline>"
+      "            <S t=\"3\"  d=\"2\" r=\"1\"></S>"
+      "            <S t=\"10\" d=\"3\" r=\"0\"></S>"
+      "          </SegmentTimeline>"
+      "          <SegmentURL media=\"TestMedia0\""
+      "                      index=\"TestIndex0\">"
+      "          </SegmentURL>"
+      "        </SegmentList>"
+      "      </Representation></AdaptationSet></Period></MPD>";
+
+  gboolean ret;
+  GstMpdClient *mpdclient = gst_mpd_client_new ();
+
+  ret = gst_mpd_parse (mpdclient, xml, (gint) strlen (xml));
+  assert_equals_int (ret, TRUE);
+
+  /* process the xml data */
+  ret = gst_mpd_client_setup_media_presentation (mpdclient, GST_CLOCK_TIME_NONE,
+      -1, NULL);
+  assert_equals_int (ret, TRUE);
+
+  /* get the list of adaptation sets of the first period */
+  adaptationSets = gst_mpd_client_get_adaptation_sets (mpdclient);
+  fail_if (adaptationSets == NULL);
+
+  adapt_set = (GstAdaptationSetNode *) g_list_nth_data (adaptationSets, 0);
+  fail_if (adapt_set == NULL);
+
+  /* setup streaming from the first adaptation set.
+   * Should fail because the second S node does not have a  matching
+   * SegmentURL node
+   */
+  ret = gst_mpd_client_setup_streaming (mpdclient, adapt_set);
+  assert_equals_int (ret, FALSE);
+
+  gst_mpd_client_free (mpdclient);
+}
+
+GST_END_TEST;
+
+/*
+ * Test parsing of the default presentation delay property
+ */
+GST_START_TEST (dash_mpdparser_default_presentation_delay)
+{
+  const gchar *xml =
+      "<?xml version=\"1.0\"?>"
+      "<MPD xmlns=\"urn:mpeg:dash:schema:mpd:2011\""
+      "     profiles=\"urn:mpeg:dash:profile:isoff-main:2011\""
+      "     maxSegmentDuration=\"PT2S\">"
+      "  <Period id=\"Period0\" start=\"P0S\"></Period></MPD>";
+
+  gboolean ret;
+  GstMpdClient *mpdclient = gst_mpd_client_new ();
+  gint64 value;
+
+  ret = gst_mpd_parse (mpdclient, xml, (gint) strlen (xml));
+  assert_equals_int (ret, TRUE);
+  value = gst_mpd_client_parse_default_presentation_delay (mpdclient, "5s");
+  assert_equals_int64 (value, 5000);
+  value = gst_mpd_client_parse_default_presentation_delay (mpdclient, "5S");
+  assert_equals_int64 (value, 5000);
+  value =
+      gst_mpd_client_parse_default_presentation_delay (mpdclient, "5 seconds");
+  assert_equals_int64 (value, 5000);
+  value = gst_mpd_client_parse_default_presentation_delay (mpdclient, "2500ms");
+  assert_equals_int64 (value, 2500);
+  value = gst_mpd_client_parse_default_presentation_delay (mpdclient, "3f");
+  assert_equals_int64 (value, 6000);
+  value = gst_mpd_client_parse_default_presentation_delay (mpdclient, "3F");
+  assert_equals_int64 (value, 6000);
+  value = gst_mpd_client_parse_default_presentation_delay (mpdclient, "");
+  assert_equals_int64 (value, 0);
+  value = gst_mpd_client_parse_default_presentation_delay (mpdclient, "10");
+  assert_equals_int64 (value, 0);
+  value =
+      gst_mpd_client_parse_default_presentation_delay (mpdclient,
+      "not a number");
+  assert_equals_int64 (value, 0);
+
+  gst_mpd_client_free (mpdclient);
+}
+
+GST_END_TEST;
+
+GST_START_TEST (dash_mpdparser_duration)
+{
+  guint64 v;
+
+  fail_unless (gst_mpdparser_parse_duration ("", &v) == FALSE);
+  fail_unless (gst_mpdparser_parse_duration (" ", &v) == FALSE);
+  fail_unless (gst_mpdparser_parse_duration ("0", &v) == FALSE);
+  fail_unless (gst_mpdparser_parse_duration ("D-1", &v) == FALSE);
+  fail_unless (gst_mpdparser_parse_duration ("T", &v) == FALSE);
+
+  fail_unless (gst_mpdparser_parse_duration ("P", &v) == TRUE);
+  fail_unless (gst_mpdparser_parse_duration ("PT", &v) == TRUE);
+  fail_unless (gst_mpdparser_parse_duration ("PX", &v) == FALSE);
+  fail_unless (gst_mpdparser_parse_duration ("PPT", &v) == FALSE);
+  fail_unless (gst_mpdparser_parse_duration ("PTT", &v) == FALSE);
+
+  fail_unless (gst_mpdparser_parse_duration ("P1D", &v) == TRUE);
+  fail_unless (gst_mpdparser_parse_duration ("P1D1D", &v) == FALSE);
+  fail_unless (gst_mpdparser_parse_duration ("P1D1M", &v) == FALSE);
+  fail_unless (gst_mpdparser_parse_duration ("P1M1D", &v) == TRUE);
+  fail_unless (gst_mpdparser_parse_duration ("P1M1D1M", &v) == FALSE);
+  fail_unless (gst_mpdparser_parse_duration ("P1M1D1D", &v) == FALSE);
+
+  fail_unless (gst_mpdparser_parse_duration ("P0M0D", &v) == TRUE);
+  fail_unless (gst_mpdparser_parse_duration ("P-1M", &v) == FALSE);
+  fail_unless (gst_mpdparser_parse_duration ("P15M", &v) == FALSE);
+  fail_unless (gst_mpdparser_parse_duration ("P-1D", &v) == FALSE);
+  fail_unless (gst_mpdparser_parse_duration ("P35D", &v) == FALSE);
+  fail_unless (gst_mpdparser_parse_duration ("P-1Y", &v) == FALSE);
+  fail_unless (gst_mpdparser_parse_duration ("PT-1H", &v) == FALSE);
+  fail_unless (gst_mpdparser_parse_duration ("PT25H", &v) == FALSE);
+  fail_unless (gst_mpdparser_parse_duration ("PT-1M", &v) == FALSE);
+  fail_unless (gst_mpdparser_parse_duration ("PT65M", &v) == FALSE);
+  fail_unless (gst_mpdparser_parse_duration ("PT-1S", &v) == FALSE);
+  /* seconds are allowed to be larger than 60 */
+  fail_unless (gst_mpdparser_parse_duration ("PT65S", &v) == TRUE);
+
+  fail_unless (gst_mpdparser_parse_duration ("PT1.1H", &v) == FALSE);
+  fail_unless (gst_mpdparser_parse_duration ("PT1-1H", &v) == FALSE);
+  fail_unless (gst_mpdparser_parse_duration ("PT1-H", &v) == FALSE);
+  fail_unless (gst_mpdparser_parse_duration ("PT-H", &v) == FALSE);
+  fail_unless (gst_mpdparser_parse_duration ("PTH", &v) == FALSE);
+  fail_unless (gst_mpdparser_parse_duration ("PT0", &v) == FALSE);
+  fail_unless (gst_mpdparser_parse_duration ("PT1.1S", &v) == TRUE);
+  fail_unless (gst_mpdparser_parse_duration ("PT1.1.1S", &v) == FALSE);
+
+  fail_unless (gst_mpdparser_parse_duration ("P585Y", &v) == FALSE);
+  fail_unless (gst_mpdparser_parse_duration ("P584Y", &v) == TRUE);
+
+  fail_unless (gst_mpdparser_parse_duration (" P10DT8H", &v) == TRUE);
+  fail_unless (gst_mpdparser_parse_duration ("P10D T8H", &v) == FALSE);
+  fail_unless (gst_mpdparser_parse_duration ("P10DT8H ", &v) == TRUE);
+}
+
+GST_END_TEST;
+
 /*
  * create a test suite containing all dash testcases
  */
@@ -4448,6 +5357,8 @@
   TCase *tc_simpleMPD = tcase_create ("simpleMPD");
   TCase *tc_complexMPD = tcase_create ("complexMPD");
   TCase *tc_negativeTests = tcase_create ("negativeTests");
+  TCase *tc_stringTests = tcase_create ("stringTests");
+  TCase *tc_duration = tcase_create ("duration");
 
   GST_DEBUG_CATEGORY_INIT (gst_dash_demux_debug, "gst_dash_demux_debug", 0,
       "mpeg dash tests");
@@ -4551,13 +5462,16 @@
       dash_mpdparser_period_adaptationSet_representation_segmentTemplate);
   tcase_add_test (tc_simpleMPD, dash_mpdparser_period_subset);
   tcase_add_test (tc_simpleMPD, dash_mpdparser_utctiming);
+  tcase_add_test (tc_simpleMPD, dash_mpdparser_utctiming_invalid_value);
 
   /* tests checking other possible values for attributes */
   tcase_add_test (tc_simpleMPD, dash_mpdparser_type_dynamic);
   tcase_add_test (tc_simpleMPD, dash_mpdparser_template_parsing);
   tcase_add_test (tc_simpleMPD, dash_mpdparser_isoff_ondemand_profile);
   tcase_add_test (tc_simpleMPD, dash_mpdparser_GstDateTime);
+  tcase_add_test (tc_simpleMPD, dash_mpdparser_bitstreamSwitching_inheritance);
   tcase_add_test (tc_simpleMPD, dash_mpdparser_various_duration_formats);
+  tcase_add_test (tc_simpleMPD, dash_mpdparser_default_presentation_delay);
 
   /* tests checking the MPD management
    * (eg. setting active streams, obtaining attributes values)
@@ -4575,6 +5489,10 @@
   tcase_add_test (tc_complexMPD, dash_mpdparser_get_baseURL2);
   tcase_add_test (tc_complexMPD, dash_mpdparser_get_baseURL3);
   tcase_add_test (tc_complexMPD, dash_mpdparser_get_baseURL4);
+  tcase_add_test (tc_complexMPD, dash_mpdparser_get_baseURL5);
+  tcase_add_test (tc_complexMPD, dash_mpdparser_get_baseURL6);
+  tcase_add_test (tc_complexMPD, dash_mpdparser_get_baseURL7);
+  tcase_add_test (tc_complexMPD, dash_mpdparser_get_baseURL8);
   tcase_add_test (tc_complexMPD, dash_mpdparser_get_mediaPresentationDuration);
   tcase_add_test (tc_complexMPD, dash_mpdparser_get_streamPresentationOffset);
   tcase_add_test (tc_complexMPD, dash_mpdparser_segments);
@@ -4585,20 +5503,36 @@
   tcase_add_test (tc_complexMPD, dash_mpdparser_segment_list);
   tcase_add_test (tc_complexMPD, dash_mpdparser_segment_template);
   tcase_add_test (tc_complexMPD, dash_mpdparser_segment_timeline);
+  tcase_add_test (tc_complexMPD, dash_mpdparser_multiple_inherited_segmentURL);
 
   /* tests checking the parsing of missing/incomplete attributes of xml */
   tcase_add_test (tc_negativeTests, dash_mpdparser_missing_xml);
   tcase_add_test (tc_negativeTests, dash_mpdparser_missing_mpd);
   tcase_add_test (tc_negativeTests, dash_mpdparser_no_end_tag);
+  tcase_add_test (tc_negativeTests, dash_mpdparser_no_profiles);
   tcase_add_test (tc_negativeTests, dash_mpdparser_no_default_namespace);
   tcase_add_test (tc_negativeTests,
       dash_mpdparser_wrong_period_duration_inferred_from_next_period);
   tcase_add_test (tc_negativeTests,
       dash_mpdparser_wrong_period_duration_inferred_from_next_mediaPresentationDuration);
+  tcase_add_test (tc_negativeTests, dash_mpdparser_negative_period_duration);
+  tcase_add_test (tc_negativeTests,
+      dash_mpdparser_read_unsigned_from_negative_values);
+  tcase_add_test (tc_negativeTests,
+      dash_mpdparser_negative_mediaPresentationDuration);
+  tcase_add_test (tc_negativeTests,
+      dash_mpdparser_unmatched_segmentTimeline_segmentURL);
+
+  tcase_add_test (tc_stringTests, dash_mpdparser_whitespace_strings);
+  tcase_add_test (tc_stringTests, dash_mpdparser_rfc1738_strings);
+
+  tcase_add_test (tc_duration, dash_mpdparser_duration);
 
   suite_add_tcase (s, tc_simpleMPD);
   suite_add_tcase (s, tc_complexMPD);
   suite_add_tcase (s, tc_negativeTests);
+  suite_add_tcase (s, tc_stringTests);
+  suite_add_tcase (s, tc_duration);
 
   return s;
 }
diff --git a/tests/check/elements/dataurisrc.c b/tests/check/elements/dataurisrc.c
index 8deeccf..b034b2e 100644
--- a/tests/check/elements/dataurisrc.c
+++ b/tests/check/elements/dataurisrc.c
@@ -23,7 +23,7 @@
 #include <gst/check/gstcheck.h>
 
 /* sine wave encoded in ogg/vorbis, created with:
- *   gst-launch-0.10 audiotestsrc num-buffers=110 ! audioconvert ! \
+ *   gst-launch-1.0 audiotestsrc num-buffers=110 ! audioconvert ! \
  *                   audio/x-raw,channels=1 ! vorbisenc ! oggmux ! \
  *                   filesink location=sine.ogg
  * and then encoded to base64 */
diff --git a/tests/check/elements/hls_demux.c b/tests/check/elements/hls_demux.c
new file mode 100644
index 0000000..8d07ea0
--- /dev/null
+++ b/tests/check/elements/hls_demux.c
@@ -0,0 +1,744 @@
+/* GStreamer unit test for HLS demux
+ *
+ * Copyright (c) <2015> YouView TV Ltd
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#include <gst/check/gstcheck.h>
+#include "adaptive_demux_common.h"
+
+#define DEMUX_ELEMENT_NAME "hlsdemux"
+
+#define TS_PACKET_LEN 188
+
+typedef struct _GstHlsDemuxTestInputData
+{
+  const gchar *uri;
+  const guint8 *payload;
+  guint64 size;
+} GstHlsDemuxTestInputData;
+
+typedef struct _GstHlsDemuxTestCase
+{
+  const GstHlsDemuxTestInputData *input;
+  GstStructure *state;
+} GstHlsDemuxTestCase;
+
+typedef struct _GstHlsDemuxTestAppendUriContext
+{
+  GQuark field_id;
+  const gchar *uri;
+} GstHlsDemuxTestAppendUriContext;
+
+typedef struct _GstHlsDemuxTestSelectBitrateContext
+{
+  GstAdaptiveDemuxTestEngine *engine;
+  GstAdaptiveDemuxTestCase *testData;
+  guint select_count;
+  gulong signal_handle;
+} GstHlsDemuxTestSelectBitrateContext;
+
+static GByteArray *
+generate_transport_stream (guint length)
+{
+  guint pos;
+  guint cc = 0;
+  GByteArray *mpeg_ts;
+
+  fail_unless ((length % TS_PACKET_LEN) == 0);
+  mpeg_ts = g_byte_array_sized_new (length);
+  if (!mpeg_ts) {
+    return NULL;
+  }
+  memset (mpeg_ts->data, 0xFF, length);
+  for (pos = 0; pos < length; pos += TS_PACKET_LEN) {
+    mpeg_ts->data[pos] = 0x47;
+    mpeg_ts->data[pos + 1] = 0x1F;
+    mpeg_ts->data[pos + 2] = 0xFF;
+    mpeg_ts->data[pos + 3] = cc;
+    cc = (cc + 1) & 0x0F;
+  }
+  return mpeg_ts;
+}
+
+static GByteArray *
+setup_test_variables (const gchar * funcname,
+    GstHlsDemuxTestInputData * inputTestData,
+    GstAdaptiveDemuxTestExpectedOutput * outputTestData,
+    GstHlsDemuxTestCase * hlsTestCase,
+    GstAdaptiveDemuxTestCase * engineTestData, guint segment_size)
+{
+  GByteArray *mpeg_ts = NULL;
+
+  if (segment_size) {
+    mpeg_ts = generate_transport_stream ((segment_size));
+    fail_unless (mpeg_ts != NULL);
+    for (guint itd = 0; inputTestData[itd].uri; ++itd) {
+      if (g_str_has_suffix (inputTestData[itd].uri, ".ts")) {
+        inputTestData[itd].payload = mpeg_ts->data;
+      }
+    }
+    for (guint otd = 0; outputTestData[otd].name; ++otd) {
+      outputTestData[otd].expected_data = mpeg_ts->data;
+      engineTestData->output_streams =
+          g_list_append (engineTestData->output_streams, &outputTestData[otd]);
+    }
+  }
+  hlsTestCase->input = inputTestData;
+  hlsTestCase->state = gst_structure_new_empty (funcname);
+  return mpeg_ts;
+}
+
+#define TESTCASE_INIT_BOILERPLATE(segment_size) \
+  GstTestHTTPSrcCallbacks http_src_callbacks = { 0 }; \
+  GstAdaptiveDemuxTestCallbacks engine_callbacks = { 0 }; \
+  GstAdaptiveDemuxTestCase *engineTestData; \
+  GstHlsDemuxTestCase hlsTestCase = { 0 }; \
+  GByteArray *mpeg_ts=NULL; \
+  engineTestData = gst_adaptive_demux_test_case_new(); \
+  fail_unless (engineTestData!=NULL); \
+  mpeg_ts = setup_test_variables(__FUNCTION__, inputTestData, outputTestData, \
+                                 &hlsTestCase, engineTestData, segment_size); \
+
+#define TESTCASE_UNREF_BOILERPLATE do{ \
+  if(engineTestData->signal_context){ \
+    g_slice_free (GstHlsDemuxTestSelectBitrateContext, engineTestData->signal_context);        \
+  } \
+  if(mpeg_ts) { g_byte_array_free (mpeg_ts, TRUE); }         \
+  gst_structure_free (hlsTestCase.state); \
+  g_object_unref (engineTestData); \
+} while(0)
+
+static gboolean
+append_request_uri (GQuark field_id, GValue * value, gpointer user_data)
+{
+  GstHlsDemuxTestAppendUriContext *context =
+      (GstHlsDemuxTestAppendUriContext *) user_data;
+  GValue uri_val = G_VALUE_INIT;
+
+  if (context->field_id == field_id) {
+    g_value_init (&uri_val, G_TYPE_STRING);
+    g_value_set_string (&uri_val, context->uri);
+    gst_value_array_append_value (value, &uri_val);
+    g_value_unset (&uri_val);
+  }
+  return TRUE;
+}
+
+static void
+gst_hlsdemux_test_set_input_data (const GstHlsDemuxTestCase * test_case,
+    const GstHlsDemuxTestInputData * input, GstTestHTTPSrcInput * output)
+{
+  output->size = input->size;
+  output->context = (gpointer) input;
+  if (output->size == 0) {
+    output->size = strlen ((gchar *) input->payload);
+  }
+  fail_unless (input->uri != NULL);
+  if (g_str_has_suffix (input->uri, ".m3u8")) {
+    output->response_headers = gst_structure_new ("response-headers",
+        "Content-Type", G_TYPE_STRING, "application/vnd.apple.mpegurl", NULL);
+  } else if (g_str_has_suffix (input->uri, ".ts")) {
+    output->response_headers = gst_structure_new ("response-headers",
+        "Content-Type", G_TYPE_STRING, "video/mp2t", NULL);
+  }
+  if (gst_structure_has_field (test_case->state, "requests")) {
+    GstHlsDemuxTestAppendUriContext context =
+        { g_quark_from_string ("requests"), input->uri };
+    gst_structure_map_in_place (test_case->state, append_request_uri, &context);
+  } else {
+    GValue requests = G_VALUE_INIT;
+    GValue uri_val = G_VALUE_INIT;
+
+    g_value_init (&requests, GST_TYPE_ARRAY);
+    g_value_init (&uri_val, G_TYPE_STRING);
+    g_value_set_string (&uri_val, input->uri);
+    gst_value_array_append_value (&requests, &uri_val);
+    gst_structure_set_value (test_case->state, "requests", &requests);
+    g_value_unset (&uri_val);
+    g_value_unset (&requests);
+  }
+}
+
+static gboolean
+gst_hlsdemux_test_src_start (GstTestHTTPSrc * src,
+    const gchar * uri, GstTestHTTPSrcInput * input_data, gpointer user_data)
+{
+  const GstHlsDemuxTestCase *test_case =
+      (const GstHlsDemuxTestCase *) user_data;
+  guint fail_count = 0;
+
+  GST_DEBUG ("src_start %s", uri);
+  for (guint i = 0; test_case->input[i].uri; ++i) {
+    if (strcmp (test_case->input[i].uri, uri) == 0) {
+      gst_hlsdemux_test_set_input_data (test_case, &test_case->input[i],
+          input_data);
+      GST_DEBUG ("open URI %s", uri);
+      return TRUE;
+    }
+  }
+  gst_structure_get_uint (test_case->state, "failure-count", &fail_count);
+  fail_count++;
+  gst_structure_set (test_case->state, "failure-count", G_TYPE_UINT,
+      fail_count, NULL);
+  return FALSE;
+}
+
+static GstFlowReturn
+gst_hlsdemux_test_src_create (GstTestHTTPSrc * src,
+    guint64 offset,
+    guint length, GstBuffer ** retbuf, gpointer context, gpointer user_data)
+{
+  GstBuffer *buf;
+  /*  const GstHlsDemuxTestCase *test_case = (const GstHlsDemuxTestCase *) user_data; */
+  GstHlsDemuxTestInputData *input = (GstHlsDemuxTestInputData *) context;
+
+  buf = gst_buffer_new_allocate (NULL, length, NULL);
+  fail_if (buf == NULL, "Not enough memory to allocate buffer");
+  fail_if (input->payload == NULL);
+  gst_buffer_fill (buf, 0, input->payload + offset, length);
+  *retbuf = buf;
+  return GST_FLOW_OK;
+}
+
+static GstFlowReturn
+gst_hlsdemux_test_network_error_src_create (GstTestHTTPSrc * src,
+    guint64 offset,
+    guint length, GstBuffer ** retbuf, gpointer context, gpointer user_data)
+{
+  const GstHlsDemuxTestCase *test_case =
+      (const GstHlsDemuxTestCase *) user_data;
+  GstHlsDemuxTestInputData *input = (GstHlsDemuxTestInputData *) context;
+  const gchar *failure_suffix;
+  guint64 failure_position = 0;
+
+  fail_unless (test_case != NULL);
+  fail_unless (input != NULL);
+  fail_unless (input->uri != NULL);
+  failure_suffix =
+      gst_structure_get_string (test_case->state, "failure-suffix");
+  if (!failure_suffix) {
+    failure_suffix = ".ts";
+  }
+  if (!gst_structure_get_uint64 (test_case->state, "failure-position",
+          &failure_position)) {
+    failure_position = 10 * TS_PACKET_LEN;
+  }
+  GST_DEBUG ("network_error %s %s %" G_GUINT64_FORMAT " @ %" G_GUINT64_FORMAT,
+      input->uri, failure_suffix, offset, failure_position);
+  if (g_str_has_suffix (input->uri, failure_suffix)
+      && offset >= failure_position) {
+    GST_DEBUG ("return error");
+    GST_ELEMENT_ERROR (src, RESOURCE, READ,
+        (("A network error occurred, or the server closed the connection unexpectedly.")), ("A network error occurred, or the server closed the connection unexpectedly."));
+    *retbuf = NULL;
+    return GST_FLOW_ERROR;
+  }
+  return gst_hlsdemux_test_src_create (src, offset, length, retbuf, context,
+      user_data);
+}
+
+/******************** Test specific code starts here **************************/
+
+/*
+ * Test a media manifest with a single segment
+ *
+ */
+GST_START_TEST (simpleTest)
+{
+  /* segment_size needs to larger than 2K, otherwise gsthlsdemux will
+     not perform a typefind on the buffer */
+  const guint segment_size = 30 * TS_PACKET_LEN;
+  const gchar *manifest =
+      "#EXTM3U \n"
+      "#EXT-X-TARGETDURATION:1\n"
+      "#EXTINF:1,Test\n" "001.ts\n" "#EXT-X-ENDLIST\n";
+  GstHlsDemuxTestInputData inputTestData[] = {
+    {"http://unit.test/media.m3u8", (guint8 *) manifest, 0},
+    {"http://unit.test/001.ts", NULL, segment_size},
+    {NULL, NULL, 0},
+  };
+  GstAdaptiveDemuxTestExpectedOutput outputTestData[] = {
+    {"src_0", segment_size, NULL},
+    {NULL, 0, NULL}
+  };
+  TESTCASE_INIT_BOILERPLATE (segment_size);
+
+  http_src_callbacks.src_start = gst_hlsdemux_test_src_start;
+  http_src_callbacks.src_create = gst_hlsdemux_test_src_create;
+  engine_callbacks.appsink_received_data =
+      gst_adaptive_demux_test_check_received_data;
+  engine_callbacks.appsink_eos =
+      gst_adaptive_demux_test_check_size_of_received_data;
+
+  gst_test_http_src_install_callbacks (&http_src_callbacks, &hlsTestCase);
+  gst_adaptive_demux_test_run (DEMUX_ELEMENT_NAME,
+      inputTestData[0].uri, &engine_callbacks, engineTestData);
+  TESTCASE_UNREF_BOILERPLATE;
+}
+
+GST_END_TEST;
+
+GST_START_TEST (testMasterPlaylist)
+{
+  const guint segment_size = 30 * TS_PACKET_LEN;
+  const gchar *master_playlist =
+      "#EXTM3U\n"
+      "#EXT-X-VERSION:4\n"
+      "#EXT-X-STREAM-INF:PROGRAM-ID=1, BANDWIDTH=1251135, CODECS=\"avc1.42001f mp4a.40.2\", RESOLUTION=640x352\n"
+      "1200.m3u8\n";
+  const gchar *media_playlist =
+      "#EXTM3U \n"
+      "#EXT-X-TARGETDURATION:1\n"
+      "#EXTINF:1,Test\n" "001.ts\n" "#EXT-X-ENDLIST\n";
+  GstHlsDemuxTestInputData inputTestData[] = {
+    {"http://unit.test/master.m3u8", (guint8 *) master_playlist, 0},
+    {"http://unit.test/1200.m3u8", (guint8 *) media_playlist, 0},
+    {"http://unit.test/001.ts", NULL, segment_size},
+    {NULL, NULL, 0}
+  };
+  GstAdaptiveDemuxTestExpectedOutput outputTestData[] = {
+    {"src_0", segment_size, NULL},
+    {NULL, 0, NULL}
+  };
+  const GValue *requests;
+  TESTCASE_INIT_BOILERPLATE (segment_size);
+
+  http_src_callbacks.src_start = gst_hlsdemux_test_src_start;
+  http_src_callbacks.src_create = gst_hlsdemux_test_src_create;
+  engine_callbacks.appsink_received_data =
+      gst_adaptive_demux_test_check_received_data;
+  engine_callbacks.appsink_eos =
+      gst_adaptive_demux_test_check_size_of_received_data;
+
+  gst_test_http_src_install_callbacks (&http_src_callbacks, &hlsTestCase);
+  gst_adaptive_demux_test_run (DEMUX_ELEMENT_NAME,
+      "http://unit.test/master.m3u8", &engine_callbacks, engineTestData);
+
+  requests = gst_structure_get_value (hlsTestCase.state, "requests");
+  fail_unless (requests != NULL);
+  assert_equals_uint64 (gst_value_array_get_size (requests),
+      sizeof (inputTestData) / sizeof (inputTestData[0]) - 1);
+  for (guint i = 0; inputTestData[i].uri; ++i) {
+    const GValue *uri;
+    uri = gst_value_array_get_value (requests, i);
+    fail_unless (uri != NULL);
+    assert_equals_string (inputTestData[i].uri, g_value_get_string (uri));
+  }
+  TESTCASE_UNREF_BOILERPLATE;
+}
+
+GST_END_TEST;
+
+/*
+ * Test seeking
+ *
+ */
+GST_START_TEST (testSeek)
+{
+  const guint segment_size = 60 * TS_PACKET_LEN;
+  const gchar *manifest =
+      "#EXTM3U \n"
+      "#EXT-X-TARGETDURATION:1\n"
+      "#EXTINF:1,Test\n" "001.ts\n" "#EXT-X-ENDLIST\n";
+  GstHlsDemuxTestInputData inputTestData[] = {
+    {"http://unit.test/media.m3u8", (guint8 *) manifest, 0},
+    {"http://unit.test/001.ts", NULL, segment_size},
+    {NULL, NULL, 0},
+  };
+  GstAdaptiveDemuxTestExpectedOutput outputTestData[] = {
+    {"src_0", segment_size, NULL},
+    {NULL, 0, NULL}
+  };
+  GstTestHTTPSrcCallbacks http_src_callbacks = { 0 };
+  GstAdaptiveDemuxTestCase *engineTestData;
+  GstHlsDemuxTestCase hlsTestCase = { 0 };
+  GByteArray *mpeg_ts = NULL;
+
+  engineTestData = gst_adaptive_demux_test_case_new ();
+  mpeg_ts = setup_test_variables (__FUNCTION__, inputTestData, outputTestData,
+      &hlsTestCase, engineTestData, segment_size);
+
+  http_src_callbacks.src_start = gst_hlsdemux_test_src_start;
+  http_src_callbacks.src_create = gst_hlsdemux_test_src_create;
+  /* seek to 5ms.
+   * Because there is only one fragment, we expect the whole file to be
+   * downloaded again
+   */
+  engineTestData->threshold_for_seek = 20 * TS_PACKET_LEN;
+  engineTestData->seek_event =
+      gst_event_new_seek (1.0, GST_FORMAT_TIME,
+      GST_SEEK_FLAG_FLUSH | GST_SEEK_FLAG_KEY_UNIT, GST_SEEK_TYPE_SET,
+      5 * GST_MSECOND, GST_SEEK_TYPE_NONE, 0);
+
+  gst_test_http_src_install_callbacks (&http_src_callbacks, &hlsTestCase);
+  gst_adaptive_demux_test_seek (DEMUX_ELEMENT_NAME,
+      inputTestData[0].uri, engineTestData);
+
+  TESTCASE_UNREF_BOILERPLATE;
+}
+
+GST_END_TEST;
+
+static void
+run_seek_position_test (gdouble rate, GstSeekType start_type,
+    guint64 seek_start, GstSeekType stop_type,
+    guint64 seek_stop, GstSeekFlags flags, guint64 segment_start,
+    guint64 segment_stop, gint segments)
+{
+  const guint segment_size = 60 * TS_PACKET_LEN;
+  const gchar *manifest =
+      "#EXTM3U \n"
+      "#EXT-X-TARGETDURATION:1\n"
+      "#EXTINF:1,Test\n" "001.ts\n"
+      "#EXTINF:1,Test\n" "002.ts\n"
+      "#EXTINF:1,Test\n" "003.ts\n"
+      "#EXTINF:1,Test\n" "004.ts\n" "#EXT-X-ENDLIST\n";
+  GstHlsDemuxTestInputData inputTestData[] = {
+    {"http://unit.test/media.m3u8", (guint8 *) manifest, 0},
+    {"http://unit.test/001.ts", NULL, segment_size},
+    {"http://unit.test/002.ts", NULL, segment_size},
+    {"http://unit.test/003.ts", NULL, segment_size},
+    {"http://unit.test/004.ts", NULL, segment_size},
+    {NULL, NULL, 0},
+  };
+  GstAdaptiveDemuxTestExpectedOutput outputTestData[] = {
+    {"src_0", segment_size * segments, NULL},
+    {NULL, 0, NULL}
+  };
+  GstTestHTTPSrcCallbacks http_src_callbacks = { 0 };
+  GstAdaptiveDemuxTestCase *engineTestData;
+  GstHlsDemuxTestCase hlsTestCase = { 0 };
+  GByteArray *mpeg_ts = NULL;
+
+  engineTestData = gst_adaptive_demux_test_case_new ();
+  mpeg_ts = setup_test_variables (__FUNCTION__, inputTestData, outputTestData,
+      &hlsTestCase, engineTestData, segment_size);
+
+  http_src_callbacks.src_start = gst_hlsdemux_test_src_start;
+  http_src_callbacks.src_create = gst_hlsdemux_test_src_create;
+
+  /* FIXME hack to avoid having a 0 seqnum */
+  gst_util_seqnum_next ();
+
+  /* Seek to 1.5s, expect it to start from 1s */
+  engineTestData->threshold_for_seek = 20 * TS_PACKET_LEN;
+  engineTestData->seek_event =
+      gst_event_new_seek (rate, GST_FORMAT_TIME, flags, start_type,
+      seek_start, stop_type, seek_stop);
+  gst_segment_init (&outputTestData[0].post_seek_segment, GST_FORMAT_TIME);
+  outputTestData[0].post_seek_segment.rate = rate;
+  outputTestData[0].post_seek_segment.start = segment_start;
+  outputTestData[0].post_seek_segment.time = segment_start;
+  outputTestData[0].post_seek_segment.stop = segment_stop;
+  outputTestData[0].segment_verification_needed = TRUE;
+
+  gst_test_http_src_install_callbacks (&http_src_callbacks, &hlsTestCase);
+  gst_adaptive_demux_test_seek (DEMUX_ELEMENT_NAME,
+      inputTestData[0].uri, engineTestData);
+
+  TESTCASE_UNREF_BOILERPLATE;
+}
+
+
+GST_START_TEST (testSeekKeyUnitPosition)
+{
+  /* Seek to 1.5s with key unit, it should go back to 1.0s. 3 segments will be
+   * pushed */
+  run_seek_position_test (1.0, GST_SEEK_TYPE_SET, 1500 * GST_MSECOND,
+      GST_SEEK_TYPE_NONE, 0, GST_SEEK_FLAG_FLUSH | GST_SEEK_FLAG_KEY_UNIT,
+      1000 * GST_MSECOND, -1, 3);
+}
+
+GST_END_TEST;
+
+GST_START_TEST (testSeekPosition)
+{
+  /* Seek to 1.5s without key unit, it should keep the 1.5s, but still push
+   * from the 1st segment, so 3 segments will be
+   * pushed */
+  run_seek_position_test (1.0, GST_SEEK_TYPE_SET, 1500 * GST_MSECOND,
+      GST_SEEK_TYPE_NONE, 0, GST_SEEK_FLAG_FLUSH, 1500 * GST_MSECOND, -1, 3);
+}
+
+GST_END_TEST;
+
+GST_START_TEST (testSeekUpdateStopPosition)
+{
+  run_seek_position_test (1.0, GST_SEEK_TYPE_NONE, 1500 * GST_MSECOND,
+      GST_SEEK_TYPE_SET, 3000 * GST_MSECOND, 0, 0, 3000 * GST_MSECOND, 3);
+}
+
+GST_END_TEST;
+
+GST_START_TEST (testSeekSnapBeforePosition)
+{
+  /* Seek to 1.5s, snap before, it go to 1s */
+  run_seek_position_test (1.0, GST_SEEK_TYPE_SET, 1500 * GST_MSECOND,
+      GST_SEEK_TYPE_NONE, 0, GST_SEEK_FLAG_FLUSH | GST_SEEK_FLAG_SNAP_BEFORE,
+      1000 * GST_MSECOND, -1, 3);
+}
+
+GST_END_TEST;
+
+
+GST_START_TEST (testSeekSnapAfterPosition)
+{
+  /* Seek to 1.5s with snap after, it should move to 2s */
+  run_seek_position_test (1.0, GST_SEEK_TYPE_SET, 1500 * GST_MSECOND,
+      GST_SEEK_TYPE_NONE, 0, GST_SEEK_FLAG_FLUSH | GST_SEEK_FLAG_SNAP_AFTER,
+      2000 * GST_MSECOND, -1, 2);
+}
+
+GST_END_TEST;
+
+
+GST_START_TEST (testReverseSeekSnapBeforePosition)
+{
+  run_seek_position_test (-1.0, GST_SEEK_TYPE_SET, 1000 * GST_MSECOND,
+      GST_SEEK_TYPE_SET, 2500 * GST_MSECOND,
+      GST_SEEK_FLAG_FLUSH | GST_SEEK_FLAG_SNAP_BEFORE, 1000 * GST_MSECOND,
+      3000 * GST_MSECOND, 2);
+}
+
+GST_END_TEST;
+
+
+GST_START_TEST (testReverseSeekSnapAfterPosition)
+{
+  run_seek_position_test (-1.0, GST_SEEK_TYPE_SET, 1000 * GST_MSECOND,
+      GST_SEEK_TYPE_SET, 2500 * GST_MSECOND,
+      GST_SEEK_FLAG_FLUSH | GST_SEEK_FLAG_SNAP_AFTER, 1000 * GST_MSECOND,
+      2000 * GST_MSECOND, 1);
+}
+
+GST_END_TEST;
+
+static void
+testDownloadErrorMessageCallback (GstAdaptiveDemuxTestEngine * engine,
+    GstMessage * msg, gpointer user_data)
+{
+  GError *err = NULL;
+  gchar *dbg_info = NULL;
+
+  fail_unless (GST_MESSAGE_TYPE (msg) == GST_MESSAGE_ERROR);
+  gst_message_parse_error (msg, &err, &dbg_info);
+  GST_DEBUG ("Error from element %s : %s\n",
+      GST_OBJECT_NAME (msg->src), err->message);
+  fail_unless_equals_string (GST_OBJECT_NAME (msg->src), DEMUX_ELEMENT_NAME);
+  g_error_free (err);
+  g_free (dbg_info);
+  g_main_loop_quit (engine->loop);
+}
+
+/* test failing to download the media playlist */
+GST_START_TEST (testMediaPlaylistNotFound)
+{
+  const gchar *master_playlist =
+      "#EXTM3U\n"
+      "#EXT-X-VERSION:4\n"
+      "#EXT-X-STREAM-INF:PROGRAM-ID=1, BANDWIDTH=1251135, CODECS=\"avc1.42001f mp4a.40.2\", RESOLUTION=640x352\n"
+      "1200.m3u8\n";
+  GstHlsDemuxTestInputData inputTestData[] = {
+    {"http://unit.test/master.m3u8", (guint8 *) master_playlist, 0},
+    {NULL, NULL, 0}
+  };
+  GstAdaptiveDemuxTestExpectedOutput outputTestData[] = {
+    {"src_0", 0, NULL},
+    {NULL, 0, NULL}
+  };
+  TESTCASE_INIT_BOILERPLATE (0);
+
+  gst_structure_set (hlsTestCase.state,
+      "failure-count", G_TYPE_UINT, 0,
+      "failure-suffix", G_TYPE_STRING, "1200.m3u8", NULL);
+  http_src_callbacks.src_start = gst_hlsdemux_test_src_start;
+  http_src_callbacks.src_create = gst_hlsdemux_test_src_create;
+  engine_callbacks.appsink_received_data =
+      gst_adaptive_demux_test_check_received_data;
+  engine_callbacks.bus_error_message = testDownloadErrorMessageCallback;
+
+  gst_test_http_src_install_callbacks (&http_src_callbacks, &hlsTestCase);
+  gst_adaptive_demux_test_run (DEMUX_ELEMENT_NAME,
+      "http://unit.test/master.m3u8", &engine_callbacks, engineTestData);
+
+  TESTCASE_UNREF_BOILERPLATE;
+}
+
+GST_END_TEST;
+
+static void
+hlsdemux_test_check_no_data_received (GstAdaptiveDemuxTestEngine
+    * engine, GstAdaptiveDemuxTestOutputStream * stream, gpointer user_data)
+{
+  assert_equals_uint64 (stream->total_received_size, 0);
+  g_main_loop_quit (engine->loop);
+}
+
+/* test failing to download a media segment (a 404 error) */
+GST_START_TEST (testFragmentNotFound)
+{
+  const gchar *master_playlist =
+      "#EXTM3U\n"
+      "#EXT-X-VERSION:4\n"
+      "#EXT-X-STREAM-INF:PROGRAM-ID=1, BANDWIDTH=1251135, CODECS=\"avc1.42001f mp4a.40.2\", RESOLUTION=640x352\n"
+      "1200.m3u8\n";
+  const gchar *media_playlist =
+      "#EXTM3U \n"
+      "#EXT-X-TARGETDURATION:1\n"
+      "#EXTINF:1,Test\n" "001.ts\n" "#EXT-X-ENDLIST\n";
+  GstHlsDemuxTestInputData inputTestData[] = {
+    {"http://unit.test/master.m3u8", (guint8 *) master_playlist, 0},
+    {"http://unit.test/1200.m3u8", (guint8 *) media_playlist, 0},
+    {NULL, NULL, 0}
+  };
+  GstAdaptiveDemuxTestExpectedOutput outputTestData[] = {
+    {"src_0", 0, NULL},
+    {NULL, 0, NULL}
+  };
+  TESTCASE_INIT_BOILERPLATE (0);
+
+  gst_structure_set (hlsTestCase.state,
+      "failure-count", G_TYPE_UINT, 0,
+      "failure-suffix", G_TYPE_STRING, "001.ts", NULL);
+  http_src_callbacks.src_start = gst_hlsdemux_test_src_start;
+  http_src_callbacks.src_create = gst_hlsdemux_test_src_create;
+  engine_callbacks.appsink_received_data =
+      gst_adaptive_demux_test_check_received_data;
+  engine_callbacks.appsink_eos = hlsdemux_test_check_no_data_received;
+  engine_callbacks.bus_error_message = testDownloadErrorMessageCallback;
+
+  gst_test_http_src_install_callbacks (&http_src_callbacks, &hlsTestCase);
+  gst_adaptive_demux_test_run (DEMUX_ELEMENT_NAME,
+      "http://unit.test/master.m3u8", &engine_callbacks, engineTestData);
+
+  TESTCASE_UNREF_BOILERPLATE;
+}
+
+GST_END_TEST;
+
+/* work-around that adaptivedemux is not posting an error message
+   about failure to download a fragment */
+static void
+missing_message_eos_callback (GstAdaptiveDemuxTestEngine * engine,
+    GstAdaptiveDemuxTestOutputStream * stream, gpointer user_data)
+{
+  GstAdaptiveDemuxTestCase *testData = GST_ADAPTIVE_DEMUX_TEST_CASE (user_data);
+  GstAdaptiveDemuxTestExpectedOutput *testOutputStreamData;
+
+  fail_unless (stream != NULL);
+  testOutputStreamData =
+      gst_adaptive_demux_test_find_test_data_by_stream (testData, stream, NULL);
+  fail_unless (testOutputStreamData != NULL);
+  /* expect to receive less than file size */
+  fail_unless (stream->total_received_size <
+      testOutputStreamData->expected_size,
+      "size validation failed for %s, expected < %d received %d",
+      testOutputStreamData->name, testOutputStreamData->expected_size,
+      stream->total_received_size);
+  testData->count_of_finished_streams++;
+  GST_DEBUG ("EOS callback %d %d",
+      testData->count_of_finished_streams,
+      g_list_length (testData->output_streams));
+  if (testData->count_of_finished_streams ==
+      g_list_length (testData->output_streams)) {
+    g_main_loop_quit (engine->loop);
+  }
+}
+
+
+/*
+ * Test fragment download error
+ * Let the adaptive demux download a few bytes, then instruct the
+ * test soup http src element to generate an error.
+ */
+GST_START_TEST (testFragmentDownloadError)
+{
+  const guint segment_size = 30 * TS_PACKET_LEN;
+  const gchar *master_playlist =
+      "#EXTM3U\n"
+      "#EXT-X-VERSION:4\n"
+      "#EXT-X-STREAM-INF:PROGRAM-ID=1, BANDWIDTH=1251135, CODECS=\"avc1.42001f mp4a.40.2\", RESOLUTION=640x352\n"
+      "1200.m3u8\n";
+  const gchar *media_playlist =
+      "#EXTM3U \n"
+      "#EXT-X-VERSION:4\n"
+      "#EXT-X-TARGETDURATION:1\n"
+      "#EXTINF:1,Test\n" "001.ts\n"
+      "#EXTINF:1,Test\n" "002.ts\n" "#EXT-X-ENDLIST\n";
+  GstHlsDemuxTestInputData inputTestData[] = {
+    {"http://unit.test/master.m3u8", (guint8 *) master_playlist, 0},
+    {"http://unit.test/1200.m3u8", (guint8 *) media_playlist, 0},
+    {"http://unit.test/001.ts", NULL, segment_size},
+    {"http://unit.test/002.ts", NULL, segment_size},
+    {NULL, NULL, 0}
+  };
+  GstAdaptiveDemuxTestExpectedOutput outputTestData[] = {
+    {"src_0", 2 * segment_size, NULL},
+    {NULL, 0, NULL}
+  };
+  const guint64 failure_position = 2048;
+  TESTCASE_INIT_BOILERPLATE (segment_size);
+
+  http_src_callbacks.src_start = gst_hlsdemux_test_src_start;
+  http_src_callbacks.src_create = gst_hlsdemux_test_network_error_src_create;
+  gst_structure_set (hlsTestCase.state,
+      "failure-suffix", G_TYPE_STRING, "001.ts",
+      "failure-position", G_TYPE_UINT64, failure_position, NULL);
+  engine_callbacks.appsink_received_data =
+      gst_adaptive_demux_test_check_received_data;
+  engine_callbacks.appsink_eos = missing_message_eos_callback;
+  engine_callbacks.bus_error_message = testDownloadErrorMessageCallback;
+
+  gst_test_http_src_install_callbacks (&http_src_callbacks, &hlsTestCase);
+  gst_adaptive_demux_test_run (DEMUX_ELEMENT_NAME,
+      inputTestData[0].uri, &engine_callbacks, engineTestData);
+
+  TESTCASE_UNREF_BOILERPLATE;
+}
+
+GST_END_TEST;
+
+static Suite *
+hls_demux_suite (void)
+{
+  Suite *s = suite_create ("hls_demux");
+  TCase *tc_basicTest = tcase_create ("basicTest");
+
+  tcase_add_test (tc_basicTest, simpleTest);
+  tcase_add_test (tc_basicTest, testMasterPlaylist);
+  tcase_add_test (tc_basicTest, testMediaPlaylistNotFound);
+  tcase_add_test (tc_basicTest, testFragmentNotFound);
+  tcase_add_test (tc_basicTest, testFragmentDownloadError);
+  tcase_add_test (tc_basicTest, testSeek);
+  tcase_add_test (tc_basicTest, testSeekKeyUnitPosition);
+  tcase_add_test (tc_basicTest, testSeekPosition);
+  tcase_add_test (tc_basicTest, testSeekUpdateStopPosition);
+  tcase_add_test (tc_basicTest, testSeekSnapBeforePosition);
+  tcase_add_test (tc_basicTest, testSeekSnapAfterPosition);
+  tcase_add_test (tc_basicTest, testReverseSeekSnapBeforePosition);
+  tcase_add_test (tc_basicTest, testReverseSeekSnapAfterPosition);
+
+  tcase_add_unchecked_fixture (tc_basicTest, gst_adaptive_demux_test_setup,
+      gst_adaptive_demux_test_teardown);
+
+  suite_add_tcase (s, tc_basicTest);
+
+  return s;
+}
+
+GST_CHECK_MAIN (hls_demux);
diff --git a/tests/check/elements/hlsdemux_m3u8.c b/tests/check/elements/hlsdemux_m3u8.c
index 406123e..f49e901 100644
--- a/tests/check/elements/hlsdemux_m3u8.c
+++ b/tests/check/elements/hlsdemux_m3u8.c
@@ -30,7 +30,7 @@
 #include "m3u8.h"
 #include "m3u8.c"
 
-GST_DEBUG_CATEGORY (fragmented_debug);
+GST_DEBUG_CATEGORY (hls_debug);
 
 static const gchar *INVALID_PLAYLIST = "#EXTM3 UINVALID";
 
@@ -94,6 +94,16 @@
 #EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=65000,CODECS=\"mp4a.40.5\"\n\
 http://example.com/audio-only.m3u8";
 
+static const gchar *VARIANT_PLAYLIST_WITH_URI_MISSING = "#EXTM3U \n\
+#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=128000\n\
+http://example.com/low.m3u8\n\
+#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=256000\n\
+\n\
+#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=768000\n\
+http://example.com/hi.m3u8\n\
+#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=65000,CODECS=\"mp4a.40.5\"\n\
+http://example.com/audio-only.m3u8";
+
 static const gchar *EMPTY_LINES_VARIANT_PLAYLIST = "#EXTM3U \n\
 #EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=128000\n\n\
 http://example.com/low.m3u8\n\n\
@@ -371,7 +381,7 @@
   assert_equals_int (stream->bandwidth, 65000);
   assert_equals_int (stream->program_id, 1);
   assert_equals_string (stream->uri, "http://example.com/audio-only.m3u8");
-  assert_equals_string (stream->codecs, "\"mp4a.40.5\"");
+  assert_equals_string (stream->codecs, "mp4a.40.5");
 
   /* Low */
   tmp = g_list_next (tmp);
@@ -408,6 +418,17 @@
 
 GST_END_TEST;
 
+GST_START_TEST (test_load_main_playlist_variant_with_missing_uri)
+{
+  GstM3U8Client *client;
+
+  client = load_playlist (VARIANT_PLAYLIST_WITH_URI_MISSING);
+  assert_equals_int (g_list_length (client->main->lists), 3);
+  gst_m3u8_client_free (client);
+}
+
+GST_END_TEST;
+
 GST_START_TEST (test_load_windows_line_endings_variant_playlist)
 {
   do_test_load_main_playlist_variant (WINDOWS_LINE_ENDINGS_VARIANT_PLAYLIST);
@@ -490,6 +511,8 @@
   GstM3U8Client *client;
   GstM3U8 *pl;
   GstM3U8MediaFile *file;
+  gint64 start = -1;
+  gint64 stop = -1;
 
   client = load_playlist (LIVE_PLAYLIST);
 
@@ -509,6 +532,9 @@
   assert_equals_string (file->uri,
       "https://priv.example.com/fileSequence2683.ts");
   assert_equals_int (file->sequence, 2683);
+  fail_unless (gst_m3u8_client_get_seek_range (client, &start, &stop));
+  assert_equals_int64 (start, 0);
+  assert_equals_float (stop / (double) GST_SECOND, 16.0);
 
   gst_m3u8_client_free (client);
 }
@@ -552,6 +578,8 @@
   GstM3U8Client *client;
   GstM3U8 *pl;
   GstM3U8MediaFile *file;
+  gint64 start = -1;
+  gint64 stop = -1;
 
   client = load_playlist (DOUBLES_PLAYLIST);
 
@@ -565,6 +593,10 @@
   assert_equals_float (file->duration / (double) GST_SECOND, 10.2344);
   file = GST_M3U8_MEDIA_FILE (g_list_nth_data (pl->files, 3));
   assert_equals_float (file->duration / (double) GST_SECOND, 9.92);
+  fail_unless (gst_m3u8_client_get_seek_range (client, &start, &stop));
+  assert_equals_int64 (start, 0);
+  assert_equals_float (stop / (double) GST_SECOND,
+      10.321 + 9.6789 + 10.2344 + 9.92);
   gst_m3u8_client_free (client);
 }
 
@@ -1301,19 +1333,62 @@
 GST_END_TEST;
 #endif
 
+GST_START_TEST (test_url_with_slash_query_param)
+{
+  static const gchar *MASTER_PLAYLIST = "#EXTM3U \n"
+      "#EXT-X-VERSION:4\n"
+      "#EXT-X-STREAM-INF:PROGRAM-ID=1, BANDWIDTH=1251135, CODECS=\"avc1.42001f, mp4a.40.2\", RESOLUTION=640x352\n"
+      "1251/media.m3u8?acl=/*1054559_h264_1500k.mp4\n";
+  GstM3U8Client *client;
+  GstM3U8 *media;
+
+  client = load_playlist (MASTER_PLAYLIST);
+
+  assert_equals_int (g_list_length (client->main->lists), 1);
+  media = g_list_nth_data (client->main->lists, 0);
+  assert_equals_string (media->uri,
+      "http://localhost/1251/media.m3u8?acl=/*1054559_h264_1500k.mp4");
+  gst_m3u8_client_free (client);
+}
+
+GST_END_TEST;
+
+GST_START_TEST (test_stream_inf_tag)
+{
+  static const gchar *MASTER_PLAYLIST = "#EXTM3U \n"
+      "#EXT-X-VERSION:4\n"
+      "#EXT-X-STREAM-INF:PROGRAM-ID=1, BANDWIDTH=1251135, CODECS=\"avc1.42001f, mp4a.40.2\", RESOLUTION=640x352\n"
+      "media.m3u8\n";
+  GstM3U8Client *client;
+  GstM3U8 *media;
+
+  client = load_playlist (MASTER_PLAYLIST);
+
+  assert_equals_int (g_list_length (client->main->lists), 1);
+  media = g_list_nth_data (client->main->lists, 0);
+  assert_equals_int64 (media->program_id, 1);
+  assert_equals_int64 (media->width, 640);
+  assert_equals_int64 (media->height, 352);
+  assert_equals_int64 (media->bandwidth, 1251135);
+  assert_equals_string (media->codecs, "avc1.42001f, mp4a.40.2");
+  gst_m3u8_client_free (client);
+}
+
+GST_END_TEST;
+
 static Suite *
 hlsdemux_suite (void)
 {
   Suite *s = suite_create ("hlsdemux_m3u8");
   TCase *tc_m3u8 = tcase_create ("m3u8client");
 
-  GST_DEBUG_CATEGORY_INIT (fragmented_debug, "hlsdemux_m3u", 0,
-      "hlsdemux m3u test");
+  GST_DEBUG_CATEGORY_INIT (hls_debug, "hlsdemux_m3u", 0, "hlsdemux m3u test");
 
   suite_add_tcase (s, tc_m3u8);
   tcase_add_test (tc_m3u8, test_load_main_playlist_invalid);
   tcase_add_test (tc_m3u8, test_load_main_playlist_rendition);
   tcase_add_test (tc_m3u8, test_load_main_playlist_variant);
+  tcase_add_test (tc_m3u8, test_load_main_playlist_variant_with_missing_uri);
   tcase_add_test (tc_m3u8, test_load_windows_line_endings_variant_playlist);
   tcase_add_test (tc_m3u8, test_load_main_playlist_with_empty_lines);
   tcase_add_test (tc_m3u8, test_load_windows_main_playlist_with_empty_lines);
@@ -1341,7 +1416,8 @@
 #endif
   tcase_add_test (tc_m3u8, test_playlist_with_doubles_duration);
   tcase_add_test (tc_m3u8, test_playlist_with_encryption);
-
+  tcase_add_test (tc_m3u8, test_url_with_slash_query_param);
+  tcase_add_test (tc_m3u8, test_stream_inf_tag);
   return s;
 }
 
diff --git a/tests/check/elements/id3mux.c b/tests/check/elements/id3mux.c
index 1356ec2..190aff4 100644
--- a/tests/check/elements/id3mux.c
+++ b/tests/check/elements/id3mux.c
@@ -45,6 +45,8 @@
   0x08, 0x00, 0x4b, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00
 };
 
+static const guint8 privatedata[] = { 0x99, 0x66, 0x33, 0x11, 0x22, 0x44 };
+
 #define MP3_FRAME_SIZE 626
 
 /* the peak and gain values are stored pretty roughly, so check that they're
@@ -122,6 +124,20 @@
         GST_TAG_BEATS_PER_MINUTE, TEST_BPM, NULL);
   }
   if (mask & (1 << 13)) {
+    GstSample *sample;
+    GstBuffer *buf;
+
+    buf = gst_buffer_new_and_alloc (sizeof (privatedata));
+    gst_buffer_fill (buf, 0, privatedata, sizeof (privatedata));
+    sample = gst_sample_new (buf, NULL, NULL,
+        gst_structure_new ("ID3PrivateFrame",
+            "owner", G_TYPE_STRING, "me", NULL));
+    gst_buffer_unref (buf);
+    gst_tag_list_add (tags, GST_TAG_MERGE_KEEP,
+        GST_TAG_PRIVATE_DATA, sample, NULL);
+    gst_sample_unref (sample);
+  }
+  if (mask & (1 << 14)) {
   }
   return tags;
 }
@@ -270,6 +286,20 @@
     fail_unless_sorta_equals_float (bpm, TEST_BPM);
   }
   if (mask & (1 << 13)) {
+    GstSample *sample = NULL;
+    const GstStructure *info;
+    GstBuffer *buf;
+
+    fail_unless (gst_tag_list_get_sample (tags, GST_TAG_PRIVATE_DATA, &sample));
+    fail_unless (sample != NULL);
+    buf = gst_sample_get_buffer (sample);
+    fail_if (gst_buffer_memcmp (buf, 0, privatedata, sizeof (privatedata)));
+    info = gst_sample_get_info (sample);
+    fail_unless (gst_structure_has_name (info, "ID3PrivateFrame"));
+    fail_unless_equals_string (gst_structure_get_string (info, "owner"), "me");
+    gst_sample_unref (sample);
+  }
+  if (mask & (1 << 14)) {
   }
 }
 
diff --git a/tests/check/elements/mpg123audiodec.c b/tests/check/elements/mpg123audiodec.c
deleted file mode 100644
index 20d6e77..0000000
--- a/tests/check/elements/mpg123audiodec.c
+++ /dev/null
@@ -1,534 +0,0 @@
-/* GStreamer
- *
- * unit test for mpg123audiodec
- *
- * Copyright (c) 2012 Carlos Rafael Giani <dv@pseudoterminal.org>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-#include <unistd.h>
-
-#include <gst/check/gstcheck.h>
-#include <gst/audio/audio.h>
-
-#include <gst/fft/gstfft.h>
-#include <gst/fft/gstffts16.h>
-#include <gst/fft/gstffts32.h>
-#include <gst/fft/gstfftf32.h>
-#include <gst/fft/gstfftf64.h>
-
-#include <gst/app/gstappsink.h>
-
-/* For ease of programming we use globals to keep refs for our floating
- * src and sink pads we create; otherwise we always have to do get_pad,
- * get_peer, and then remove references in every test function */
-static GstPad *mysrcpad, *mysinkpad;
-
-
-#define MP2_STREAM_FILENAME "stream.mp2"
-#define MP3_CBR_STREAM_FILENAME "cbr_stream.mp3"
-#define MP3_VBR_STREAM_FILENAME "vbr_stream.mp3"
-
-
-/* mpeg 1 layer 2 stream created with:
- * gst-launch-1.0 -v audiotestsrc wave=sine freq=440 volume=1 num-buffers=32 ! \
- *   "audio/x-raw, format=(string)S16LE, layout=(string)interleaved, rate=(int)44100, channels=(int)1" ! \
- *   avenc_mp2 bitrate=32000 ! tee name=t \
- *   t. ! queue ! fakesink silent=false \
- *   t. ! queue ! filesink location=test.mp2
- *
- * mpeg 1 layer 3 CBR stream created with:
- * gst-launch-1.0 -v audiotestsrc wave=sine freq=440 volume=1 num-buffers=32 ! \
- *   "audio/x-raw, format=(string)S16LE, layout=(string)interleaved, rate=(int)44100, channels=(int)1" ! \
- *   lamemp3enc encoding-engine-quality=high cbr=true target=bitrate bitrate=32 ! \
- *   "audio/mpeg, rate=(int)44100, channels=(int)1" ! tee name=t \
- *   t. ! queue ! fakesink silent=false \
- *   t. ! queue ! filesink location=test.mp3
- *
- * mpeg 1 layer 3 VBR stream created with:
- * gst-launch-1.0 -v audiotestsrc wave=sine freq=440 volume=1 num-buffers=32 ! \
- *   "audio/x-raw, format=(string)S16LE, layout=(string)interleaved, rate=(int)44100, channels=(int)1" ! \
- *   lamemp3enc encoding-engine-quality=high cbr=false target=quality quality=7 ! \
- *   "audio/mpeg, rate=(int)44100, channels=(int)1" ! tee name=t \
- *   t. ! queue ! fakesink silent=false \
- *   t. ! queue ! filesink location=test.mp3
- */
-
-
-/* FFT test helpers taken from gst-plugins-base tests/check/audioresample.c */
-
-#define FFT_HELPERS(type,ffttag,ffttag2,scale)                                \
-static gdouble magnitude##ffttag (const GstFFT##ffttag##Complex *c)           \
-{                                                                             \
-  gdouble mag = (gdouble) c->r * (gdouble) c->r;                              \
-  mag += (gdouble) c->i * (gdouble) c->i;                                     \
-  mag /= scale * scale;                                                       \
-  mag = 10.0 * log10 (mag);                                                   \
-  return mag;                                                                 \
-}                                                                             \
-static gdouble find_main_frequency_spot_##ffttag (                            \
-    const GstFFT##ffttag##Complex *v, int elements)                           \
-{                                                                             \
-  int i;                                                                      \
-  gdouble maxmag = -9999;                                                     \
-  int maxidx = 0;                                                             \
-  for (i=0; i<elements; ++i) {                                                \
-    gdouble mag = magnitude##ffttag (v+i);                                    \
-    if (mag > maxmag) {                                                       \
-      maxmag = mag;                                                           \
-      maxidx = i;                                                             \
-    }                                                                         \
-  }                                                                           \
-  return maxidx / (gdouble) elements;                                         \
-}                                                                             \
-static gboolean is_zero_except_##ffttag (const GstFFT##ffttag##Complex *v,    \
-    int elements, gdouble spot)                                               \
-{                                                                             \
-  int i;                                                                      \
-  for (i=0; i<elements; ++i) {                                                \
-    gdouble pos = i / (gdouble) elements;                                     \
-    gdouble mag = magnitude##ffttag (v+i);                                    \
-    if (fabs (pos - spot) > 0.01) {                                           \
-      if (mag > -35.0) {                                                      \
-        GST_LOG("Found magnitude at %f : %f (peak at %f)\n", pos, mag, spot); \
-        return FALSE;                                                         \
-      }                                                                       \
-    }                                                                         \
-  }                                                                           \
-  return TRUE;                                                                \
-}                                                                             \
-static void check_main_frequency_spot_##ffttag (GstBuffer *buffer, gdouble    \
-    expected_spot)                                                            \
-{                                                                             \
-  GstMapInfo map;                                                             \
-  int num_samples;                                                            \
-  gdouble actual_spot;                                                        \
-  GstFFT##ffttag *ctx;                                                        \
-  GstFFT##ffttag##Complex *fftdata;                                           \
-                                                                              \
-  gst_buffer_map (buffer, &map, GST_MAP_READ);                                \
-                                                                              \
-  num_samples = map.size / sizeof(type) & ~1;                                 \
-  ctx = gst_fft_##ffttag2##_new (num_samples, FALSE);                         \
-  fftdata = g_new (GstFFT##ffttag##Complex, num_samples / 2 + 1);             \
-                                                                              \
-  gst_fft_##ffttag2##_window (ctx, (type*)map.data,                           \
-    GST_FFT_WINDOW_HAMMING);                                                  \
-  gst_fft_##ffttag2##_fft (ctx, (type*)map.data, fftdata);                    \
-                                                                              \
-  actual_spot = find_main_frequency_spot_##ffttag (fftdata,                   \
-    num_samples / 2 + 1);                                                     \
-  GST_LOG ("Expected spot: %.3f actual: %.3f %f", expected_spot, actual_spot, \
-    fabs (expected_spot - actual_spot));                                      \
-  fail_unless (fabs (expected_spot - actual_spot) < 0.05,                     \
-    "Actual main frequency spot is too far away from expected one");          \
-  fail_unless (is_zero_except_##ffttag (fftdata, num_samples / 2 + 1,         \
-    actual_spot), "One secondary peak in spectrum exceeds threshold");        \
-                                                                              \
-  gst_buffer_unmap (buffer, &map);                                            \
-                                                                              \
-  gst_fft_##ffttag2##_free (ctx);                                             \
-  g_free (fftdata);                                                           \
-}
-FFT_HELPERS (gint32, S32, s32, 2147483647.0);
-
-
-static GstStaticPadTemplate sinktemplate = GST_STATIC_PAD_TEMPLATE ("sink",
-    GST_PAD_SINK,
-    GST_PAD_ALWAYS,
-    GST_STATIC_CAPS ("audio/x-raw, format = (string) " GST_AUDIO_NE (S32))
-    );
-static GstStaticPadTemplate layer2_srctemplate = GST_STATIC_PAD_TEMPLATE ("src",
-    GST_PAD_SRC,
-    GST_PAD_ALWAYS,
-    GST_STATIC_CAPS_ANY);
-static GstStaticPadTemplate layer3_srctemplate = GST_STATIC_PAD_TEMPLATE ("src",
-    GST_PAD_SRC,
-    GST_PAD_ALWAYS,
-    GST_STATIC_CAPS_ANY);
-
-
-static void
-setup_input_pipeline (gchar const *stream_filename, GstElement ** pipeline,
-    GstElement ** appsink)
-{
-  GstElement *source, *parser;
-
-  *pipeline = gst_pipeline_new (NULL);
-  source = gst_element_factory_make ("filesrc", NULL);
-  parser = gst_element_factory_make ("mpegaudioparse", NULL);
-  *appsink = gst_element_factory_make ("appsink", NULL);
-
-  gst_bin_add_many (GST_BIN (*pipeline), source, parser, *appsink, NULL);
-  gst_element_link_many (source, parser, *appsink, NULL);
-
-  {
-    char *full_filename =
-        g_build_filename (GST_TEST_FILES_PATH, stream_filename, NULL);
-    g_object_set (G_OBJECT (source), "location", full_filename, NULL);
-    g_free (full_filename);
-  }
-
-  gst_element_set_state (*pipeline, GST_STATE_PLAYING);
-}
-
-static void
-cleanup_input_pipeline (GstElement * pipeline)
-{
-  gst_element_set_state (pipeline, GST_STATE_NULL);
-  gst_object_unref (pipeline);
-}
-
-static GstElement *
-setup_mpeg1layer2dec (void)
-{
-  GstElement *mpg123audiodec;
-  GstCaps *caps;
-
-  GST_DEBUG ("setup_mpeg1layer2dec");
-  mpg123audiodec = gst_check_setup_element ("mpg123audiodec");
-  mysrcpad = gst_check_setup_src_pad (mpg123audiodec, &layer2_srctemplate);
-  mysinkpad = gst_check_setup_sink_pad (mpg123audiodec, &sinktemplate);
-  gst_pad_set_active (mysrcpad, TRUE);
-  gst_pad_set_active (mysinkpad, TRUE);
-
-  /* This is necessary to trigger a set_format call in the decoder;
-   * fixed caps don't trigger it */
-  caps = gst_caps_new_simple ("audio/mpeg",
-      "mpegversion", G_TYPE_INT, 1,
-      "layer", G_TYPE_INT, 2,
-      "rate", G_TYPE_INT, 44100,
-      "channels", G_TYPE_INT, 1, "parsed", G_TYPE_BOOLEAN, TRUE, NULL);
-  gst_check_setup_events (mysrcpad, mpg123audiodec, caps, GST_FORMAT_TIME);
-  gst_caps_unref (caps);
-
-  return mpg123audiodec;
-}
-
-static GstElement *
-setup_mpeg1layer3dec (void)
-{
-  GstElement *mpg123audiodec;
-  GstCaps *caps;
-
-  GST_DEBUG ("setup_mpeg1layer3dec");
-  mpg123audiodec = gst_check_setup_element ("mpg123audiodec");
-  mysrcpad = gst_check_setup_src_pad (mpg123audiodec, &layer3_srctemplate);
-  mysinkpad = gst_check_setup_sink_pad (mpg123audiodec, &sinktemplate);
-  gst_pad_set_active (mysrcpad, TRUE);
-  gst_pad_set_active (mysinkpad, TRUE);
-
-  /* This is necessary to trigger a set_format call in the decoder;
-   * fixed caps don't trigger it */
-  caps = gst_caps_new_simple ("audio/mpeg",
-      "mpegversion", G_TYPE_INT, 1,
-      "layer", G_TYPE_INT, 3,
-      "rate", G_TYPE_INT, 44100,
-      "channels", G_TYPE_INT, 1, "parsed", G_TYPE_BOOLEAN, TRUE, NULL);
-  gst_check_setup_events (mysrcpad, mpg123audiodec, caps, GST_FORMAT_TIME);
-  gst_caps_unref (caps);
-
-  return mpg123audiodec;
-}
-
-static void
-cleanup_mpg123audiodec (GstElement * mpg123audiodec)
-{
-  GST_DEBUG ("cleanup_mpeg1layer2dec");
-  gst_element_set_state (mpg123audiodec, GST_STATE_NULL);
-
-  gst_pad_set_active (mysrcpad, FALSE);
-  gst_pad_set_active (mysinkpad, FALSE);
-  gst_check_teardown_src_pad (mpg123audiodec);
-  gst_check_teardown_sink_pad (mpg123audiodec);
-  gst_check_teardown_element (mpg123audiodec);
-}
-
-static void
-run_decoding_test (GstElement * mpg123audiodec, gchar const *filename)
-{
-  GstBus *bus;
-  unsigned int num_input_buffers, num_decoded_buffers;
-  gint expected_size;
-  GstCaps *out_caps, *caps;
-  GstAudioInfo audioinfo;
-  GstElement *input_pipeline, *input_appsink;
-  int i;
-  GstBuffer *outbuffer;
-
-  /* 440 Hz = frequency of sine wave in audio data
-   * 44100 Hz = sample rate
-   * (44100 / 2) Hz = Nyquist frequency */
-  static double const expected_frequency_spot = 440.0 / (44100.0 / 2.0);
-
-  fail_unless (gst_element_set_state (mpg123audiodec,
-          GST_STATE_PLAYING) == GST_STATE_CHANGE_SUCCESS,
-      "could not set to playing");
-  bus = gst_bus_new ();
-
-  gst_element_set_bus (mpg123audiodec, bus);
-
-  setup_input_pipeline (filename, &input_pipeline, &input_appsink);
-
-  num_input_buffers = 0;
-  while (TRUE) {
-    GstSample *sample;
-    GstBuffer *input_buffer;
-
-    sample = gst_app_sink_pull_sample (GST_APP_SINK (input_appsink));
-    if (sample == NULL)
-      break;
-
-    fail_unless (GST_IS_SAMPLE (sample));
-
-    input_buffer = gst_sample_get_buffer (sample);
-    fail_if (input_buffer == NULL);
-
-    /* This is done to be on the safe side - docs say lifetime of the input buffer
-     * depends *solely* on the sample */
-    input_buffer = gst_buffer_copy (input_buffer);
-
-    fail_unless_equals_int (gst_pad_push (mysrcpad, input_buffer), GST_FLOW_OK);
-
-    ++num_input_buffers;
-
-    gst_sample_unref (sample);
-  }
-
-  num_decoded_buffers = g_list_length (buffers);
-
-  /* check number of decoded buffers */
-  fail_unless_equals_int (num_decoded_buffers, num_input_buffers - 2);
-
-  caps = gst_pad_get_current_caps (mysinkpad);
-  GST_LOG ("output caps %" GST_PTR_FORMAT, caps);
-  fail_unless (gst_audio_info_from_caps (&audioinfo, caps),
-      "Getting audio info from caps failed");
-
-  /* check caps */
-  out_caps = gst_caps_new_simple ("audio/x-raw",
-      "format", G_TYPE_STRING, GST_AUDIO_NE (S32),
-      "layout", G_TYPE_STRING, "interleaved",
-      "rate", G_TYPE_INT, 44100, "channels", G_TYPE_INT, 1, NULL);
-
-  fail_unless (gst_caps_is_equal_fixed (caps, out_caps), "Incorrect out caps");
-
-  gst_caps_unref (out_caps);
-  gst_caps_unref (caps);
-
-  /* here, test if decoded data is a sine tone, and if the sine frequency is at the
-   * right spot in the spectrum */
-  for (i = 0; i < num_decoded_buffers; ++i) {
-    outbuffer = GST_BUFFER (buffers->data);
-    fail_if (outbuffer == NULL, "Invalid buffer retrieved");
-
-    /* MPEG 1 layer 2 uses 1152 samples per frame */
-    expected_size = 1152 * GST_AUDIO_INFO_BPF (&audioinfo);
-    fail_unless_equals_int (gst_buffer_get_size (outbuffer), expected_size);
-
-    check_main_frequency_spot_S32 (outbuffer, expected_frequency_spot);
-
-    buffers = g_list_remove (buffers, outbuffer);
-    gst_buffer_unref (outbuffer);
-    outbuffer = NULL;
-  }
-
-  g_list_free (buffers);
-  buffers = NULL;
-
-  cleanup_input_pipeline (input_pipeline);
-  gst_bus_set_flushing (bus, TRUE);
-  gst_element_set_bus (mpg123audiodec, NULL);
-  gst_object_unref (GST_OBJECT (bus));
-}
-
-
-GST_START_TEST (test_decode_mpeg1layer2)
-{
-  GstElement *mpg123audiodec;
-  mpg123audiodec = setup_mpeg1layer2dec ();
-  run_decoding_test (mpg123audiodec, MP2_STREAM_FILENAME);
-  cleanup_mpg123audiodec (mpg123audiodec);
-  mpg123audiodec = NULL;
-}
-
-GST_END_TEST;
-
-
-GST_START_TEST (test_decode_mpeg1layer3_cbr)
-{
-  GstElement *mpg123audiodec;
-  mpg123audiodec = setup_mpeg1layer3dec ();
-  run_decoding_test (mpg123audiodec, MP3_CBR_STREAM_FILENAME);
-  cleanup_mpg123audiodec (mpg123audiodec);
-}
-
-GST_END_TEST;
-
-
-GST_START_TEST (test_decode_mpeg1layer3_vbr)
-{
-  GstElement *mpg123audiodec;
-  mpg123audiodec = setup_mpeg1layer3dec ();
-  run_decoding_test (mpg123audiodec, MP3_VBR_STREAM_FILENAME);
-  cleanup_mpg123audiodec (mpg123audiodec);
-}
-
-GST_END_TEST;
-
-
-GST_START_TEST (test_decode_garbage_mpeg1layer2)
-{
-  GstElement *mpg123audiodec;
-  GstBuffer *inbuffer;
-  GstBus *bus;
-  int i, num_buffers;
-  guint32 *tmpbuf;
-
-  mpg123audiodec = setup_mpeg1layer2dec ();
-
-  fail_unless (gst_element_set_state (mpg123audiodec,
-          GST_STATE_PLAYING) == GST_STATE_CHANGE_SUCCESS,
-      "could not set to playing");
-  bus = gst_bus_new ();
-
-  /* initialize the buffer with something that is no mpeg2 */
-  tmpbuf = g_new (guint32, 4096);
-  for (i = 0; i < 4096; i++) {
-    tmpbuf[i] = i;
-  }
-  inbuffer = gst_buffer_new_wrapped (tmpbuf, 4096 * sizeof (guint32));
-
-  ASSERT_BUFFER_REFCOUNT (inbuffer, "inbuffer", 1);
-
-  gst_element_set_bus (mpg123audiodec, bus);
-
-  /* should be possible to push without problems but nothing gets decoded */
-  fail_unless_equals_int (gst_pad_push (mysrcpad, inbuffer), GST_FLOW_OK);
-
-  num_buffers = g_list_length (buffers);
-
-  /* should be 0 buffers as decoding should've been impossible */
-  fail_unless_equals_int (num_buffers, 0);
-
-  g_list_free (buffers);
-  buffers = NULL;
-
-  gst_bus_set_flushing (bus, TRUE);
-  gst_element_set_bus (mpg123audiodec, NULL);
-  gst_object_unref (GST_OBJECT (bus));
-  cleanup_mpg123audiodec (mpg123audiodec);
-  mpg123audiodec = NULL;
-}
-
-GST_END_TEST;
-
-
-GST_START_TEST (test_decode_garbage_mpeg1layer3)
-{
-  GstElement *mpg123audiodec;
-  GstBuffer *inbuffer;
-  GstBus *bus;
-  int i, num_buffers;
-  guint32 *tmpbuf;
-
-  mpg123audiodec = setup_mpeg1layer3dec ();
-
-  fail_unless (gst_element_set_state (mpg123audiodec,
-          GST_STATE_PLAYING) == GST_STATE_CHANGE_SUCCESS,
-      "could not set to playing");
-  bus = gst_bus_new ();
-
-  /* initialize the buffer with something that is no mpeg2 */
-  tmpbuf = g_new (guint32, 4096);
-  for (i = 0; i < 4096; i++) {
-    tmpbuf[i] = i;
-  }
-  inbuffer = gst_buffer_new_wrapped (tmpbuf, 4096 * sizeof (guint32));
-
-  ASSERT_BUFFER_REFCOUNT (inbuffer, "inbuffer", 1);
-
-  gst_element_set_bus (mpg123audiodec, bus);
-
-  /* should be possible to push without problems but nothing gets decoded */
-  fail_unless_equals_int (gst_pad_push (mysrcpad, inbuffer), GST_FLOW_OK);
-
-  num_buffers = g_list_length (buffers);
-
-  /* should be 0 buffers as decoding should've been impossible */
-  fail_unless_equals_int (num_buffers, 0);
-
-  g_list_free (buffers);
-  buffers = NULL;
-
-  gst_bus_set_flushing (bus, TRUE);
-  gst_element_set_bus (mpg123audiodec, NULL);
-  gst_object_unref (GST_OBJECT (bus));
-  cleanup_mpg123audiodec (mpg123audiodec);
-  mpg123audiodec = NULL;
-}
-
-GST_END_TEST;
-
-
-static gboolean
-is_test_file_available (gchar const *filename)
-{
-  gboolean ret;
-  gchar *full_filename;
-  gchar *cwd;
-
-  cwd = g_get_current_dir ();
-  full_filename = g_build_filename (cwd, GST_TEST_FILES_PATH, filename, NULL);
-  ret =
-      g_file_test (full_filename, G_FILE_TEST_IS_REGULAR | G_FILE_TEST_EXISTS);
-  g_free (full_filename);
-  g_free (cwd);
-  return ret;
-}
-
-static Suite *
-mpg123audiodec_suite (void)
-{
-  GstRegistry *registry;
-  Suite *s = suite_create ("mpg123audiodec");
-  TCase *tc_chain = tcase_create ("general");
-
-  registry = gst_registry_get ();
-
-  suite_add_tcase (s, tc_chain);
-  if (gst_registry_check_feature_version (registry, "filesrc",
-          GST_VERSION_MAJOR, GST_VERSION_MINOR, 0) &&
-      gst_registry_check_feature_version (registry, "mpegaudioparse",
-          GST_VERSION_MAJOR, GST_VERSION_MINOR, 0) &&
-      gst_registry_check_feature_version (registry, "appsrc",
-          GST_VERSION_MAJOR, GST_VERSION_MINOR, 0)) {
-    if (is_test_file_available (MP2_STREAM_FILENAME))
-      tcase_add_test (tc_chain, test_decode_mpeg1layer2);
-    if (is_test_file_available (MP3_CBR_STREAM_FILENAME))
-      tcase_add_test (tc_chain, test_decode_mpeg1layer3_cbr);
-    if (is_test_file_available (MP3_VBR_STREAM_FILENAME))
-      tcase_add_test (tc_chain, test_decode_mpeg1layer3_vbr);
-  }
-  tcase_add_test (tc_chain, test_decode_garbage_mpeg1layer2);
-  tcase_add_test (tc_chain, test_decode_garbage_mpeg1layer3);
-
-  return s;
-}
-
-
-GST_CHECK_MAIN (mpg123audiodec)
diff --git a/tests/check/elements/mssdemux.c b/tests/check/elements/mssdemux.c
new file mode 100644
index 0000000..78a1863
--- /dev/null
+++ b/tests/check/elements/mssdemux.c
@@ -0,0 +1,632 @@
+/* GStreamer unit test for MSS
+ *
+ * Copyright (C) 2016 Samsung Electronics. All rights reserved.
+ *   Author: Thiago Santos <thiagoss@osg.samsung.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#include <gst/check/gstcheck.h>
+#include "adaptive_demux_common.h"
+
+#define DEMUX_ELEMENT_NAME "mssdemux"
+
+#define COPY_OUTPUT_TEST_DATA(outputTestData,testData) do { \
+    guint otdPos, otdLen = sizeof((outputTestData)) / sizeof((outputTestData)[0]); \
+    for(otdPos=0; otdPos<otdLen; ++otdPos){ \
+  (testData)->output_streams = g_list_append ((testData)->output_streams, &(outputTestData)[otdPos]); \
+    } \
+  } while(0)
+
+typedef struct _GstMssDemuxTestInputData
+{
+  const gchar *uri;
+  const guint8 *payload;
+  guint64 size;
+} GstMssDemuxTestInputData;
+
+static gboolean
+gst_mssdemux_http_src_start (GstTestHTTPSrc * src,
+    const gchar * uri, GstTestHTTPSrcInput * input_data, gpointer user_data)
+{
+  const GstMssDemuxTestInputData *input =
+      (const GstMssDemuxTestInputData *) user_data;
+
+
+  for (guint i = 0; input[i].uri; ++i) {
+    if (strcmp (input[i].uri, uri) == 0) {
+      input_data->context = (gpointer) & input[i];
+      input_data->size = input[i].size;
+      if (input[i].size == 0)
+        input_data->size = strlen ((gchar *) input[i].payload);
+      return TRUE;
+    }
+  }
+
+  return FALSE;
+}
+
+static GstFlowReturn
+gst_mssdemux_http_src_create (GstTestHTTPSrc * src,
+    guint64 offset,
+    guint length, GstBuffer ** retbuf, gpointer context, gpointer user_data)
+{
+  /*  const GstMssDemuxTestInputData *input =
+     (const GstMssDemuxTestInputData *) user_data; */
+  const GstMssDemuxTestInputData *input =
+      (const GstMssDemuxTestInputData *) context;
+  GstBuffer *buf;
+
+  buf = gst_buffer_new_allocate (NULL, length, NULL);
+  fail_if (buf == NULL, "Not enough memory to allocate buffer");
+
+  if (input->payload) {
+    gst_buffer_fill (buf, 0, input->payload + offset, length);
+  } else {
+    GstMapInfo info;
+    guint pattern;
+
+    pattern = offset - offset % sizeof (pattern);
+
+    gst_buffer_map (buf, &info, GST_MAP_WRITE);
+    for (guint64 i = 0; i < length; ++i) {
+      gchar pattern_byte_to_write = (offset + i) % sizeof (pattern);
+      if (pattern_byte_to_write == 0) {
+        pattern = offset + i;
+      }
+      info.data[i] = (pattern >> (pattern_byte_to_write * 8)) & 0xFF;
+    }
+    gst_buffer_unmap (buf, &info);
+  }
+  *retbuf = buf;
+  return GST_FLOW_OK;
+}
+
+/******************** Test specific code starts here **************************/
+
+/*
+ * Test an mpd with an audio and a video stream
+ *
+ */
+GST_START_TEST (simpleTest)
+{
+  const gchar *mpd =
+      "<?xml version=\"1.0\" encoding=\"utf-8\"?>"
+      "<SmoothStreamingMedia MajorVersion=\"2\" MinorVersion=\"0\" Duration=\"40000000\">"
+      "<StreamIndex Type=\"video\" QualityLevels=\"1\" Chunks=\"1\" Url=\"QualityLevels({bitrate})/Fragments(video={start time})\">"
+      "<QualityLevel Index=\"0\" Bitrate=\"480111\" FourCC=\"H264\" MaxWidth=\"1024\" MaxHeight=\"436\" CodecPrivateData=\"000\" />"
+      "<c n=\"0\" d=\"10000000\" />"
+      "<c n=\"1\" d=\"10000000\" />"
+      "<c n=\"2\" d=\"10000000\" />"
+      "<c n=\"3\" d=\"10000000\" />"
+      "</StreamIndex>"
+      "<StreamIndex Type=\"audio\" Language=\"eng\" QualityLevels=\"1\" Chunks=\"1\" Url=\"QualityLevels({bitrate})/Fragments(audio_eng={start time})\">"
+      "<QualityLevel Index=\"0\" Bitrate=\"200029\" FourCC=\"AACL\" SamplingRate=\"48000\" Channels=\"2\" BitsPerSample=\"16\" PacketSize=\"4\" AudioTag=\"255\" CodecPrivateData=\"1190\" />"
+      "<c n=\"0\" d=\"40000000\" />" "</StreamIndex>" "</SmoothStreamingMedia>";
+
+  GstMssDemuxTestInputData inputTestData[] = {
+    {"http://unit.test/Manifest", (guint8 *) mpd, 0},
+    {"http://unit.test/QualityLevels(480111)/Fragments(video=0)", NULL, 9000},
+    {"http://unit.test/QualityLevels(480111)/Fragments(video=10000000)", NULL,
+        9000},
+    {"http://unit.test/QualityLevels(480111)/Fragments(video=20000000)", NULL,
+        9000},
+    {"http://unit.test/QualityLevels(480111)/Fragments(video=30000000)", NULL,
+        9000},
+    {"http://unit.test/QualityLevels(200029)/Fragments(audio_eng=0)", NULL,
+        5000},
+    {NULL, NULL, 0},
+  };
+  GstTestHTTPSrcCallbacks http_src_callbacks = { 0 };
+  GstAdaptiveDemuxTestExpectedOutput outputTestData[] = {
+    {"audio_00", 5000, NULL},
+    {"video_00", 4 * 9000, NULL}
+  };
+  GstAdaptiveDemuxTestCallbacks test_callbacks = { 0 };
+  GstAdaptiveDemuxTestCase *testData;
+
+  testData = gst_adaptive_demux_test_case_new ();
+  http_src_callbacks.src_start = gst_mssdemux_http_src_start;
+  http_src_callbacks.src_create = gst_mssdemux_http_src_create;
+  gst_test_http_src_install_callbacks (&http_src_callbacks, inputTestData);
+
+  COPY_OUTPUT_TEST_DATA (outputTestData, testData);
+  test_callbacks.appsink_received_data =
+      gst_adaptive_demux_test_check_received_data;
+  test_callbacks.appsink_eos =
+      gst_adaptive_demux_test_check_size_of_received_data;
+
+  gst_adaptive_demux_test_run (DEMUX_ELEMENT_NAME, "http://unit.test/Manifest",
+      &test_callbacks, testData);
+  g_object_unref (testData);
+}
+
+GST_END_TEST;
+
+/*
+ * Test seeking
+ *
+ */
+GST_START_TEST (testSeek)
+{
+  const gchar *mpd =
+      "<?xml version=\"1.0\" encoding=\"utf-8\"?>"
+      "<SmoothStreamingMedia MajorVersion=\"2\" MinorVersion=\"0\" Duration=\"40000000\">"
+      "<StreamIndex Type=\"audio\" Language=\"eng\" QualityLevels=\"1\" Chunks=\"1\" Url=\"QualityLevels({bitrate})/Fragments(audio_eng={start time})\">"
+      "<QualityLevel Index=\"0\" Bitrate=\"200029\" FourCC=\"AACL\" SamplingRate=\"48000\" Channels=\"2\" BitsPerSample=\"16\" PacketSize=\"4\" AudioTag=\"255\" CodecPrivateData=\"1190\" />"
+      "<c n=\"0\" d=\"450346666\" />"
+      "</StreamIndex>" "</SmoothStreamingMedia>";
+  GstMssDemuxTestInputData inputTestData[] = {
+    {"http://unit.test/Manifest", (guint8 *) mpd, 0},
+    {"http://unit.test/QualityLevels(200029)/Fragments(audio_eng=0)", NULL,
+        10000},
+    {NULL, NULL, 0},
+  };
+  GstTestHTTPSrcCallbacks http_src_callbacks = { 0 };
+  GstAdaptiveDemuxTestExpectedOutput outputTestData[] = {
+    {"audio_00", 10000, NULL},
+  };
+  GstAdaptiveDemuxTestCase *testData;
+
+  testData = gst_adaptive_demux_test_case_new ();
+
+  http_src_callbacks.src_start = gst_mssdemux_http_src_start;
+  http_src_callbacks.src_create = gst_mssdemux_http_src_create;
+  COPY_OUTPUT_TEST_DATA (outputTestData, testData);
+
+  /* media segment starts at 4687
+   * Issue a seek request after media segment has started to be downloaded
+   * on the first pad listed in GstAdaptiveDemuxTestOutputStreamData and the
+   * first chunk of at least one byte has already arrived in AppSink
+   */
+  testData->threshold_for_seek = 4687 + 1;
+
+  /* seek to 5ms.
+   * Because there is only one fragment, we expect the whole file to be
+   * downloaded again
+   */
+  testData->seek_event =
+      gst_event_new_seek (1.0, GST_FORMAT_TIME,
+      GST_SEEK_FLAG_FLUSH | GST_SEEK_FLAG_KEY_UNIT, GST_SEEK_TYPE_SET,
+      5 * GST_MSECOND, GST_SEEK_TYPE_NONE, 0);
+
+  gst_test_http_src_install_callbacks (&http_src_callbacks, inputTestData);
+  gst_adaptive_demux_test_seek (DEMUX_ELEMENT_NAME,
+      "http://unit.test/Manifest", testData);
+  gst_object_unref (testData);
+}
+
+GST_END_TEST;
+
+
+static void
+run_seek_position_test (gdouble rate, GstSeekType start_type,
+    guint64 seek_start, GstSeekType stop_type, guint64 seek_stop,
+    GstSeekFlags flags, guint64 segment_start, guint64 segment_stop,
+    gint segments)
+{
+  const gchar *mpd =
+      "<?xml version=\"1.0\" encoding=\"utf-8\"?>"
+      "<SmoothStreamingMedia MajorVersion=\"2\" MinorVersion=\"0\" Duration=\"40000000\">"
+      "<StreamIndex Type=\"audio\" Language=\"eng\" QualityLevels=\"1\" Chunks=\"1\" Url=\"QualityLevels({bitrate})/Fragments(audio_eng={start time})\">"
+      "<QualityLevel Index=\"0\" Bitrate=\"200029\" FourCC=\"AACL\" SamplingRate=\"48000\" Channels=\"2\" BitsPerSample=\"16\" PacketSize=\"4\" AudioTag=\"255\" CodecPrivateData=\"1190\" />"
+      "<c n=\"0\" d=\"10000000\" />"
+      "<c n=\"1\" d=\"10000000\" />"
+      "<c n=\"2\" d=\"10000000\" />"
+      "<c n=\"3\" d=\"10000000\" />" "</StreamIndex>" "</SmoothStreamingMedia>";
+  GstMssDemuxTestInputData inputTestData[] = {
+    {"http://unit.test/Manifest", (guint8 *) mpd, 0},
+    {"http://unit.test/QualityLevels(200029)/Fragments(audio_eng=0)", NULL,
+        10000},
+    {"http://unit.test/QualityLevels(200029)/Fragments(audio_eng=10000000)",
+        NULL, 10000},
+    {"http://unit.test/QualityLevels(200029)/Fragments(audio_eng=20000000)",
+        NULL, 10000},
+    {"http://unit.test/QualityLevels(200029)/Fragments(audio_eng=30000000)",
+        NULL, 10000},
+    {NULL, NULL, 0},
+  };
+  GstTestHTTPSrcCallbacks http_src_callbacks = { 0 };
+  GstAdaptiveDemuxTestExpectedOutput outputTestData[] = {
+    /* 1 from the init segment */
+    {"audio_00", segments * 10000, NULL},
+  };
+  GstAdaptiveDemuxTestCase *testData;
+
+  testData = gst_adaptive_demux_test_case_new ();
+
+  http_src_callbacks.src_start = gst_mssdemux_http_src_start;
+  http_src_callbacks.src_create = gst_mssdemux_http_src_create;
+  COPY_OUTPUT_TEST_DATA (outputTestData, testData);
+
+  /* media segment starts at 4687
+   * Issue a seek request after media segment has started to be downloaded
+   * on the first pad listed in GstAdaptiveDemuxTestOutputStreamData and the
+   * first chunk of at least one byte has already arrived in AppSink
+   */
+  testData->threshold_for_seek = 4687 + 1;
+
+  /* FIXME hack to avoid having a 0 seqnum */
+  gst_util_seqnum_next ();
+
+  /* seek to 5ms.
+   * Because there is only one fragment, we expect the whole file to be
+   * downloaded again
+   */
+  testData->seek_event =
+      gst_event_new_seek (rate, GST_FORMAT_TIME, flags, start_type,
+      seek_start, stop_type, seek_stop);
+
+  gst_test_http_src_install_callbacks (&http_src_callbacks, inputTestData);
+  gst_adaptive_demux_test_seek (DEMUX_ELEMENT_NAME,
+      "http://unit.test/Manifest", testData);
+  gst_object_unref (testData);
+}
+
+GST_START_TEST (testSeekKeyUnitPosition)
+{
+  /* Seek to 1.5s with key unit, it should go back to 1.0s. 3 segments will be
+   * pushed */
+  run_seek_position_test (1.0, GST_SEEK_TYPE_SET, 1500 * GST_MSECOND,
+      GST_SEEK_TYPE_NONE, 0, GST_SEEK_FLAG_FLUSH | GST_SEEK_FLAG_KEY_UNIT,
+      1000 * GST_MSECOND, -1, 3);
+}
+
+GST_END_TEST;
+
+
+GST_START_TEST (testSeekUpdateStopPosition)
+{
+  run_seek_position_test (1.0, GST_SEEK_TYPE_NONE, 1500 * GST_MSECOND,
+      GST_SEEK_TYPE_SET, 3000 * GST_MSECOND, 0, 0, 3000 * GST_MSECOND, 3);
+}
+
+GST_END_TEST;
+
+GST_START_TEST (testSeekPosition)
+{
+  /* Seek to 1.5s without key unit, it should keep the 1.5s, but still push
+   * from the 1st segment, so 3 segments will be
+   * pushed */
+  run_seek_position_test (1.0, GST_SEEK_TYPE_SET, 1500 * GST_MSECOND,
+      GST_SEEK_TYPE_NONE, 0, GST_SEEK_FLAG_FLUSH, 1500 * GST_MSECOND, -1, 3);
+}
+
+GST_END_TEST;
+
+GST_START_TEST (testSeekSnapBeforePosition)
+{
+  /* Seek to 1.5s, snap before, it go to 1s */
+  run_seek_position_test (1.0, GST_SEEK_TYPE_SET, 1500 * GST_MSECOND,
+      GST_SEEK_TYPE_NONE, 0, GST_SEEK_FLAG_FLUSH | GST_SEEK_FLAG_SNAP_BEFORE,
+      1000 * GST_MSECOND, -1, 3);
+}
+
+GST_END_TEST;
+
+
+GST_START_TEST (testSeekSnapAfterPosition)
+{
+  /* Seek to 1.5s with snap after, it should move to 2s */
+  run_seek_position_test (1.0, GST_SEEK_TYPE_SET, 1500 * GST_MSECOND,
+      GST_SEEK_TYPE_NONE, 0, GST_SEEK_FLAG_FLUSH | GST_SEEK_FLAG_SNAP_AFTER,
+      2000 * GST_MSECOND, -1, 2);
+}
+
+GST_END_TEST;
+
+
+GST_START_TEST (testReverseSeekSnapBeforePosition)
+{
+  run_seek_position_test (-1.0, GST_SEEK_TYPE_SET, 1000 * GST_MSECOND,
+      GST_SEEK_TYPE_SET, 2500 * GST_MSECOND,
+      GST_SEEK_FLAG_FLUSH | GST_SEEK_FLAG_SNAP_BEFORE, 1000 * GST_MSECOND,
+      3000 * GST_MSECOND, 2);
+}
+
+GST_END_TEST;
+
+
+GST_START_TEST (testReverseSeekSnapAfterPosition)
+{
+  run_seek_position_test (-1.0, GST_SEEK_TYPE_SET, 1000 * GST_MSECOND,
+      GST_SEEK_TYPE_SET, 2500 * GST_MSECOND,
+      GST_SEEK_FLAG_FLUSH | GST_SEEK_FLAG_SNAP_AFTER, 1000 * GST_MSECOND,
+      2000 * GST_MSECOND, 1);
+}
+
+GST_END_TEST;
+
+static void
+testDownloadErrorMessageCallback (GstAdaptiveDemuxTestEngine * engine,
+    GstMessage * msg, gpointer user_data)
+{
+  GError *err = NULL;
+  gchar *dbg_info = NULL;
+
+  fail_unless (GST_MESSAGE_TYPE (msg) == GST_MESSAGE_ERROR);
+  gst_message_parse_error (msg, &err, &dbg_info);
+  GST_DEBUG ("Error from element %s : %s\n",
+      GST_OBJECT_NAME (msg->src), err->message);
+  fail_unless_equals_string (GST_OBJECT_NAME (msg->src), DEMUX_ELEMENT_NAME);
+  /*GST_DEBUG ("dbg_info=%s\n", dbg_info); */
+  g_error_free (err);
+  g_free (dbg_info);
+  g_main_loop_quit (engine->loop);
+}
+
+/*
+ * Test error case of failing to download a segment
+ */
+GST_START_TEST (testDownloadError)
+{
+  const gchar *mpd =
+      "<?xml version=\"1.0\" encoding=\"utf-8\"?>"
+      "<SmoothStreamingMedia MajorVersion=\"2\" MinorVersion=\"0\" Duration=\"40000000\">"
+      "<StreamIndex Type=\"audio\" Language=\"eng\" QualityLevels=\"1\" Chunks=\"1\" Url=\"QualityLevels({bitrate})/Fragments(audio_eng={start time})\">"
+      "<QualityLevel Index=\"0\" Bitrate=\"200029\" FourCC=\"AACL\" SamplingRate=\"48000\" Channels=\"2\" BitsPerSample=\"16\" PacketSize=\"4\" AudioTag=\"255\" CodecPrivateData=\"1190\" />"
+      "<c n=\"0\" d=\"40000000\" />" "</StreamIndex>" "</SmoothStreamingMedia>";
+
+  GstMssDemuxTestInputData inputTestData[] = {
+    {"http://unit.test/Manifest", (guint8 *) mpd, 0},
+    {NULL, NULL, 0},
+  };
+  GstTestHTTPSrcCallbacks http_src_callbacks = { 0 };
+  GstAdaptiveDemuxTestExpectedOutput outputTestData[] = {
+    {"audio_00", 0, NULL},
+  };
+  GstAdaptiveDemuxTestCallbacks test_callbacks = { 0 };
+  GstAdaptiveDemuxTestCase *testData;
+
+  testData = gst_adaptive_demux_test_case_new ();
+  http_src_callbacks.src_start = gst_mssdemux_http_src_start;
+  http_src_callbacks.src_create = gst_mssdemux_http_src_create;
+  COPY_OUTPUT_TEST_DATA (outputTestData, testData);
+  test_callbacks.appsink_received_data =
+      gst_adaptive_demux_test_check_received_data;
+  test_callbacks.bus_error_message = testDownloadErrorMessageCallback;
+  test_callbacks.appsink_eos =
+      gst_adaptive_demux_test_check_size_of_received_data;
+
+  gst_test_http_src_install_callbacks (&http_src_callbacks, inputTestData);
+  gst_adaptive_demux_test_run (DEMUX_ELEMENT_NAME, "http://unit.test/Manifest",
+      &test_callbacks, testData);
+  gst_object_unref (testData);
+}
+
+GST_END_TEST;
+
+/* generate queries to adaptive demux */
+static gboolean
+testQueryCheckDataReceived (GstAdaptiveDemuxTestEngine * engine,
+    GstAdaptiveDemuxTestOutputStream * stream,
+    GstBuffer * buffer, gpointer user_data)
+{
+  GList *pads;
+  GstPad *pad;
+  GstQuery *query;
+  gboolean ret;
+  gint64 duration;
+  gboolean seekable;
+  gint64 segment_start;
+  gint64 segment_end;
+  gchar *uri;
+  gchar *redirect_uri;
+  gboolean redirect_permanent;
+
+  pads = GST_ELEMENT_PADS (stream->appsink);
+
+  /* AppSink should have only 1 pad */
+  fail_unless (pads != NULL);
+  fail_unless (g_list_length (pads) == 1);
+  pad = GST_PAD (pads->data);
+
+  query = gst_query_new_duration (GST_FORMAT_TIME);
+  ret = gst_pad_peer_query (pad, query);
+  fail_unless (ret == TRUE);
+  gst_query_parse_duration (query, NULL, &duration);
+  fail_unless (duration == GST_SECOND);
+  gst_query_unref (query);
+
+  query = gst_query_new_seeking (GST_FORMAT_TIME);
+  ret = gst_pad_peer_query (pad, query);
+  fail_unless (ret == TRUE);
+  gst_query_parse_seeking (query, NULL, &seekable, &segment_start,
+      &segment_end);
+  fail_unless (seekable == TRUE);
+  fail_unless (segment_start == 0);
+  fail_unless (segment_end == duration);
+  gst_query_unref (query);
+
+  query = gst_query_new_uri ();
+  ret = gst_pad_peer_query (pad, query);
+  fail_unless (ret == TRUE);
+  gst_query_parse_uri (query, &uri);
+  gst_query_parse_uri_redirection (query, &redirect_uri);
+  gst_query_parse_uri_redirection_permanent (query, &redirect_permanent);
+  fail_unless (strcmp (uri, "http://unit.test/Manifest") == 0);
+  /* adaptive demux does not reply with redirect information */
+  fail_unless (redirect_uri == NULL);
+  fail_unless (redirect_permanent == FALSE);
+  g_free (uri);
+  g_free (redirect_uri);
+  gst_query_unref (query);
+
+  return gst_adaptive_demux_test_check_received_data (engine,
+      stream, buffer, user_data);
+}
+
+/*
+ * Test queries
+ *
+ */
+GST_START_TEST (testQuery)
+{
+  const gchar *mpd =
+      "<?xml version=\"1.0\" encoding=\"utf-8\"?>"
+      "<SmoothStreamingMedia MajorVersion=\"2\" MinorVersion=\"0\" Duration=\"10000000\">"
+      "<StreamIndex Type=\"audio\" Language=\"eng\" QualityLevels=\"1\" Chunks=\"1\" Url=\"QualityLevels({bitrate})/Fragments(audio_eng={start time})\">"
+      "<QualityLevel Index=\"0\" Bitrate=\"200029\" FourCC=\"AACL\" SamplingRate=\"48000\" Channels=\"2\" BitsPerSample=\"16\" PacketSize=\"4\" AudioTag=\"255\" CodecPrivateData=\"1190\" />"
+      "<c n=\"0\" d=\"10000000\" />" "</StreamIndex>" "</SmoothStreamingMedia>";
+  GstMssDemuxTestInputData inputTestData[] = {
+    {"http://unit.test/Manifest", (guint8 *) mpd, 0},
+    {"http://unit.test/QualityLevels(200029)/Fragments(audio_eng=0)", NULL,
+        5000},
+    {NULL, NULL, 0},
+  };
+  GstTestHTTPSrcCallbacks http_src_callbacks = { 0 };
+  GstAdaptiveDemuxTestExpectedOutput outputTestData[] = {
+    {"audio_00", 5000, NULL},
+  };
+  GstAdaptiveDemuxTestCallbacks test_callbacks = { 0 };
+  GstAdaptiveDemuxTestCase *testData;
+
+  testData = gst_adaptive_demux_test_case_new ();
+  http_src_callbacks.src_start = gst_mssdemux_http_src_start;
+  http_src_callbacks.src_create = gst_mssdemux_http_src_create;
+  COPY_OUTPUT_TEST_DATA (outputTestData, testData);
+  test_callbacks.appsink_received_data = testQueryCheckDataReceived;
+  test_callbacks.appsink_eos =
+      gst_adaptive_demux_test_check_size_of_received_data;
+
+  gst_test_http_src_install_callbacks (&http_src_callbacks, inputTestData);
+  gst_adaptive_demux_test_run (DEMUX_ELEMENT_NAME,
+      "http://unit.test/Manifest", &test_callbacks, testData);
+  gst_object_unref (testData);
+}
+
+GST_END_TEST;
+
+static GstFlowReturn
+test_fragment_download_error_src_create (GstTestHTTPSrc * src,
+    guint64 offset,
+    guint length, GstBuffer ** retbuf, gpointer context, gpointer user_data)
+{
+  const GstMssDemuxTestInputData *input =
+      (const GstMssDemuxTestInputData *) context;
+  fail_unless (input != NULL);
+  if (!g_str_has_suffix (input->uri, ".mpd") && offset > 2000) {
+    GST_DEBUG ("network_error %s %" G_GUINT64_FORMAT " @ %d",
+        input->uri, offset, 2000);
+    GST_ELEMENT_ERROR (src, RESOURCE, READ,
+        (("A network error occurred, or the server closed the connection unexpectedly.")), ("A network error occurred, or the server closed the connection unexpectedly."));
+    return GST_FLOW_ERROR;
+  }
+  return gst_mssdemux_http_src_create (src, offset, length, retbuf, context,
+      user_data);
+}
+
+/* function to check total size of data received by AppSink
+ * will be called when AppSink receives eos.
+ */
+static void
+testFragmentDownloadErrorCheckSizeOfDataReceived (GstAdaptiveDemuxTestEngine *
+    engine, GstAdaptiveDemuxTestOutputStream * stream, gpointer user_data)
+{
+  GstAdaptiveDemuxTestCase *testData = GST_ADAPTIVE_DEMUX_TEST_CASE (user_data);
+  GstAdaptiveDemuxTestExpectedOutput *testOutputStreamData;
+
+  testOutputStreamData =
+      gst_adaptive_demux_test_find_test_data_by_stream (testData, stream, NULL);
+  fail_unless (testOutputStreamData != NULL);
+
+  /* expect to receive more than 0 */
+  fail_unless (stream->total_received_size > 0,
+      "size validation failed for %s, expected > 0, received %d",
+      testOutputStreamData->name, stream->total_received_size);
+
+  /* expect to receive less than file size */
+  fail_unless (stream->total_received_size <
+      testOutputStreamData->expected_size,
+      "size validation failed for %s, expected < %d received %d",
+      testOutputStreamData->name, testOutputStreamData->expected_size,
+      stream->total_received_size);
+}
+
+/*
+ * Test fragment download error
+ * Let the adaptive demux download a few bytes, then instruct the
+ * GstTestHTTPSrc element to generate an error.
+ */
+GST_START_TEST (testFragmentDownloadError)
+{
+  const gchar *mpd =
+      "<?xml version=\"1.0\" encoding=\"utf-8\"?>"
+      "<SmoothStreamingMedia MajorVersion=\"2\" MinorVersion=\"0\" Duration=\"4000000\">"
+      "<StreamIndex Type=\"audio\" Language=\"eng\" QualityLevels=\"1\" Chunks=\"1\" Url=\"QualityLevels({bitrate})/Fragments(audio_eng={start time})\">"
+      "<QualityLevel Index=\"0\" Bitrate=\"200029\" FourCC=\"AACL\" SamplingRate=\"48000\" Channels=\"2\" BitsPerSample=\"16\" PacketSize=\"4\" AudioTag=\"255\" CodecPrivateData=\"1190\" />"
+      "<c n=\"0\" d=\"10000000\" />" "</StreamIndex>" "</SmoothStreamingMedia>";
+
+  GstMssDemuxTestInputData inputTestData[] = {
+    {"http://unit.test/Manifest", (guint8 *) mpd, 0},
+    {"http://unit.test/QualityLevels(200029)/Fragments(audio_eng=0)", NULL,
+        5000},
+    {NULL, NULL, 0},
+  };
+  GstTestHTTPSrcCallbacks http_src_callbacks = { 0 };
+  GstAdaptiveDemuxTestExpectedOutput outputTestData[] = {
+    {"audio_00", 5000, NULL},
+  };
+  GstAdaptiveDemuxTestCallbacks test_callbacks = { 0 };
+  GstAdaptiveDemuxTestCase *testData;
+
+  testData = gst_adaptive_demux_test_case_new ();
+  http_src_callbacks.src_start = gst_mssdemux_http_src_start;
+  http_src_callbacks.src_create = test_fragment_download_error_src_create;
+  COPY_OUTPUT_TEST_DATA (outputTestData, testData);
+  test_callbacks.appsink_received_data =
+      gst_adaptive_demux_test_check_received_data;
+  test_callbacks.appsink_eos = testFragmentDownloadErrorCheckSizeOfDataReceived;
+  /*  test_callbacks.demux_sent_eos = gst_adaptive_demux_test_check_size_of_received_data; */
+
+  test_callbacks.bus_error_message = testDownloadErrorMessageCallback;
+
+  gst_test_http_src_install_callbacks (&http_src_callbacks, inputTestData);
+  gst_adaptive_demux_test_run (DEMUX_ELEMENT_NAME,
+      "http://unit.test/Manifest", &test_callbacks, testData);
+  gst_object_unref (testData);
+}
+
+GST_END_TEST;
+
+static Suite *
+mss_demux_suite (void)
+{
+  Suite *s = suite_create ("mss_demux");
+  TCase *tc_basicTest = tcase_create ("basicTest");
+
+  tcase_add_test (tc_basicTest, simpleTest);
+  tcase_add_test (tc_basicTest, testSeek);
+  tcase_add_test (tc_basicTest, testSeekKeyUnitPosition);
+  tcase_add_test (tc_basicTest, testSeekPosition);
+  tcase_add_test (tc_basicTest, testSeekUpdateStopPosition);
+  tcase_add_test (tc_basicTest, testSeekSnapBeforePosition);
+  tcase_add_test (tc_basicTest, testSeekSnapAfterPosition);
+  tcase_add_test (tc_basicTest, testReverseSeekSnapBeforePosition);
+  tcase_add_test (tc_basicTest, testReverseSeekSnapAfterPosition);
+  tcase_add_test (tc_basicTest, testDownloadError);
+  tcase_add_test (tc_basicTest, testFragmentDownloadError);
+  tcase_add_test (tc_basicTest, testQuery);
+
+  tcase_add_unchecked_fixture (tc_basicTest, gst_adaptive_demux_test_setup,
+      gst_adaptive_demux_test_teardown);
+
+  suite_add_tcase (s, tc_basicTest);
+
+  return s;
+}
+
+GST_CHECK_MAIN (mss_demux);
diff --git a/tests/check/elements/mxfmux.c b/tests/check/elements/mxfmux.c
index b12dd91..748ebc0 100644
--- a/tests/check/elements/mxfmux.c
+++ b/tests/check/elements/mxfmux.c
@@ -239,6 +239,32 @@
 
 GST_END_TEST;
 
+GST_START_TEST (test_h264_raw_audio)
+{
+  gchar *pipeline;
+  GstElementFactory *factory = NULL;
+
+  if ((factory = gst_element_factory_find ("x264enc")) == NULL)
+    return;
+  gst_object_unref (factory);
+  if ((factory = gst_element_factory_find ("h264parse")) == NULL)
+    return;
+  gst_object_unref (factory);
+
+  pipeline = g_strdup_printf ("videotestsrc num-buffers=250 ! "
+      "video/x-raw,framerate=25/1 ! "
+      "x264enc ! h264parse ! "
+      "mxfmux name=mux ! "
+      "fakesink  "
+      "audiotestsrc num-buffers=250 ! "
+      "audioconvert ! " "audio/x-raw,format=S24LE,channels=2 ! mux. ");
+
+  run_test (pipeline);
+  g_free (pipeline);
+}
+
+GST_END_TEST;
+
 static Suite *
 mxfmux_suite (void)
 {
@@ -248,16 +274,12 @@
   suite_add_tcase (s, tc_chain);
   tcase_set_timeout (tc_chain, 180);
 
-  /* FIXME: remove again once ported */
-  if (!gst_registry_check_feature_version (gst_registry_get (), "mxfmux", 1, 0,
-          0))
-    return s;
-
   tcase_add_test (tc_chain, test_mpeg2);
   tcase_add_test (tc_chain, test_raw_video_raw_audio);
   tcase_add_test (tc_chain, test_raw_video_stride_transform);
   tcase_add_test (tc_chain, test_jpeg2000_alaw);
   tcase_add_test (tc_chain, test_dnxhd_mp3);
+  tcase_add_test (tc_chain, test_h264_raw_audio);
   tcase_add_test (tc_chain, test_multiple_av_streams);
 
   return s;
diff --git a/tests/check/elements/netsim.c b/tests/check/elements/netsim.c
new file mode 100644
index 0000000..1de026c
--- /dev/null
+++ b/tests/check/elements/netsim.c
@@ -0,0 +1,65 @@
+#include <gst/check/gstharness.h>
+#include <gst/check/gstcheck.h>
+
+GST_START_TEST (netsim_stress)
+{
+  GstHarness *h = gst_harness_new ("netsim");
+  GstCaps *caps = gst_caps_from_string ("mycaps");
+  GstBuffer *buf = gst_harness_create_buffer (h, 100);
+  GstHarnessThread *state, *push;
+  GstSegment segment;
+
+  gst_segment_init (&segment, GST_FORMAT_TIME);
+  state = gst_harness_stress_statechange_start (h);
+  push = gst_harness_stress_push_buffer_start (h, caps, &segment, buf);
+
+  g_usleep (G_USEC_PER_SEC * 1);
+
+  gst_harness_stress_thread_stop (state);
+  gst_harness_stress_thread_stop (push);
+
+  gst_caps_unref (caps);
+  gst_buffer_unref (buf);
+  gst_harness_teardown (h);
+}
+
+GST_END_TEST;
+
+GST_START_TEST (netsim_stress_delayed)
+{
+  GstHarness *h = gst_harness_new_parse ("netsim delay-probability=0.5");
+  GstCaps *caps = gst_caps_from_string ("mycaps");
+  GstBuffer *buf = gst_harness_create_buffer (h, 100);
+  GstHarnessThread *state, *push;
+  GstSegment segment;
+
+  gst_segment_init (&segment, GST_FORMAT_TIME);
+  state = gst_harness_stress_statechange_start (h);
+  push = gst_harness_stress_push_buffer_start (h, caps, &segment, buf);
+
+  g_usleep (G_USEC_PER_SEC * 1);
+
+  gst_harness_stress_thread_stop (state);
+  gst_harness_stress_thread_stop (push);
+
+  gst_caps_unref (caps);
+  gst_buffer_unref (buf);
+  gst_harness_teardown (h);
+}
+
+GST_END_TEST;
+
+static Suite *
+netsim_suite (void)
+{
+  Suite *s = suite_create ("netsim");
+  TCase *tc_chain;
+
+  suite_add_tcase (s, (tc_chain = tcase_create ("general")));
+  tcase_add_test (tc_chain, netsim_stress);
+  tcase_add_test (tc_chain, netsim_stress_delayed);
+
+  return s;
+}
+
+GST_CHECK_MAIN (netsim)
diff --git a/tests/check/elements/opus.c b/tests/check/elements/opus.c
deleted file mode 100644
index 3afeb4e..0000000
--- a/tests/check/elements/opus.c
+++ /dev/null
@@ -1,378 +0,0 @@
-/* GStreamer
- *
- * unit test for opus
- *
- * Copyright (C) <2011> Vincent Penquerc'h <vincent.penquerch@collbaora.co.uk>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-#include <unistd.h>
-
-#include <gst/check/gstcheck.h>
-
-#if G_BYTE_ORDER == G_BIG_ENDIAN
-#define AFORMAT "S16BE"
-#else
-#define AFORMAT "S16LE"
-#endif
-
-#define AUDIO_CAPS_STRING "audio/x-raw, " \
-                           "format = (string) " AFORMAT ", "\
-                           "layout = (string) interleaved, " \
-                           "rate = (int) 48000, " \
-                           "channels = (int) 1 "
-
-static const guint8 opus_ogg_id_header[19] = {
-  0x4f, 0x70, 0x75, 0x73, 0x48, 0x65, 0x61, 0x64, 0x00, 0x02, 0x00, 0x00, 0x00,
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00
-};
-
-/* A lot of these taken from the vorbisdec test */
-
-/* For ease of programming we use globals to keep refs for our floating
- * src and sink pads we create; otherwise we always have to do get_pad,
- * get_peer, and then remove references in every test function */
-static GstPad *mydecsrcpad, *mydecsinkpad;
-static GstPad *myencsrcpad, *myencsinkpad;
-
-static GstStaticPadTemplate sinktemplate = GST_STATIC_PAD_TEMPLATE ("sink",
-    GST_PAD_SINK,
-    GST_PAD_ALWAYS,
-    GST_STATIC_CAPS_ANY);
-static GstStaticPadTemplate srctemplate = GST_STATIC_PAD_TEMPLATE ("src",
-    GST_PAD_SRC,
-    GST_PAD_ALWAYS,
-    GST_STATIC_CAPS_ANY);
-
-static GstElement *
-setup_opusdec (void)
-{
-  GstElement *opusdec;
-
-  GST_DEBUG ("setup_opusdec");
-  opusdec = gst_check_setup_element ("opusdec");
-  mydecsrcpad = gst_check_setup_src_pad (opusdec, &srctemplate);
-  mydecsinkpad = gst_check_setup_sink_pad (opusdec, &sinktemplate);
-  gst_pad_set_active (mydecsrcpad, TRUE);
-  gst_pad_set_active (mydecsinkpad, TRUE);
-
-  return opusdec;
-}
-
-static void
-cleanup_opusdec (GstElement * opusdec)
-{
-  GST_DEBUG ("cleanup_opusdec");
-  gst_element_set_state (opusdec, GST_STATE_NULL);
-
-  gst_pad_set_active (mydecsrcpad, FALSE);
-  gst_pad_set_active (mydecsinkpad, FALSE);
-  gst_check_teardown_src_pad (opusdec);
-  gst_check_teardown_sink_pad (opusdec);
-  gst_check_teardown_element (opusdec);
-}
-
-static GstElement *
-setup_opusenc (void)
-{
-  GstElement *opusenc;
-
-  GST_DEBUG ("setup_opusenc");
-  opusenc = gst_check_setup_element ("opusenc");
-  myencsrcpad = gst_check_setup_src_pad (opusenc, &srctemplate);
-  myencsinkpad = gst_check_setup_sink_pad (opusenc, &sinktemplate);
-  gst_pad_set_active (myencsrcpad, TRUE);
-  gst_pad_set_active (myencsinkpad, TRUE);
-
-  return opusenc;
-}
-
-static void
-cleanup_opusenc (GstElement * opusenc)
-{
-  GST_DEBUG ("cleanup_opusenc");
-  gst_element_set_state (opusenc, GST_STATE_NULL);
-
-  gst_pad_set_active (myencsrcpad, FALSE);
-  gst_pad_set_active (myencsinkpad, FALSE);
-  gst_check_teardown_src_pad (opusenc);
-  gst_check_teardown_sink_pad (opusenc);
-  gst_check_teardown_element (opusenc);
-}
-
-static void
-check_buffers (guint expected)
-{
-  GstBuffer *outbuffer;
-  guint i, num_buffers;
-
-  /* check buffers are the type we expect */
-  num_buffers = g_list_length (buffers);
-  fail_unless (num_buffers >= expected);
-  for (i = 0; i < num_buffers; ++i) {
-    outbuffer = GST_BUFFER (buffers->data);
-    fail_if (outbuffer == NULL);
-    fail_if (gst_buffer_get_size (outbuffer) == 0);
-
-    buffers = g_list_remove (buffers, outbuffer);
-
-    ASSERT_BUFFER_REFCOUNT (outbuffer, "outbuffer", 1);
-    gst_buffer_unref (outbuffer);
-    outbuffer = NULL;
-  }
-}
-
-GST_START_TEST (test_opus_id_header)
-{
-  GstElement *opusdec;
-  GstBuffer *inbuffer;
-  GstCaps *caps;
-
-  opusdec = setup_opusdec ();
-  fail_unless (gst_element_set_state (opusdec,
-          GST_STATE_PLAYING) == GST_STATE_CHANGE_SUCCESS,
-      "could not set to playing");
-
-  caps = gst_caps_new_empty_simple ("audio/x-opus");
-  gst_check_setup_events (mydecsrcpad, opusdec, caps, GST_FORMAT_TIME);
-  gst_caps_unref (caps);
-
-  inbuffer = gst_buffer_new_and_alloc (sizeof (opus_ogg_id_header));
-  gst_buffer_fill (inbuffer, 0, opus_ogg_id_header,
-      sizeof (opus_ogg_id_header));
-  ASSERT_BUFFER_REFCOUNT (inbuffer, "inbuffer", 1);
-  gst_buffer_ref (inbuffer);
-
-  /* pushing gives away my reference ... */
-  fail_unless (gst_pad_push (mydecsrcpad, inbuffer) == GST_FLOW_OK);
-  /* ... and nothing ends up on the global buffer list */
-  ASSERT_BUFFER_REFCOUNT (inbuffer, "inbuffer", 1);
-  gst_buffer_unref (inbuffer);
-  check_buffers (0);
-
-  /* cleanup */
-  cleanup_opusdec (opusdec);
-}
-
-GST_END_TEST;
-
-GST_START_TEST (test_opus_encode_nothing)
-{
-  GstElement *opusenc;
-
-  opusenc = setup_opusenc ();
-  fail_unless (gst_element_set_state (opusenc,
-          GST_STATE_PLAYING) == GST_STATE_CHANGE_SUCCESS,
-      "could not set to playing");
-
-  fail_unless (gst_pad_push_event (myencsrcpad, gst_event_new_eos ()) == TRUE);
-
-  fail_unless (gst_element_set_state (opusenc,
-          GST_STATE_READY) == GST_STATE_CHANGE_SUCCESS,
-      "could not set to ready");
-
-  /* cleanup */
-  cleanup_opusenc (opusenc);
-}
-
-GST_END_TEST;
-
-GST_START_TEST (test_opus_decode_nothing)
-{
-  GstElement *opusdec;
-
-  opusdec = setup_opusdec ();
-  fail_unless (gst_element_set_state (opusdec,
-          GST_STATE_PLAYING) == GST_STATE_CHANGE_SUCCESS,
-      "could not set to playing");
-
-  fail_unless (gst_pad_push_event (mydecsrcpad, gst_event_new_eos ()) == TRUE);
-
-  fail_unless (gst_element_set_state (opusdec,
-          GST_STATE_READY) == GST_STATE_CHANGE_SUCCESS,
-      "could not set to ready");
-
-  /* cleanup */
-  cleanup_opusdec (opusdec);
-}
-
-GST_END_TEST;
-
-GST_START_TEST (test_opus_encode_samples)
-{
-  const unsigned int nsamples = 4096;
-  GstElement *opusenc;
-  GstBuffer *inbuffer;
-  GstCaps *caps;
-
-  opusenc = setup_opusenc ();
-
-  fail_unless (gst_element_set_state (opusenc,
-          GST_STATE_PLAYING) == GST_STATE_CHANGE_SUCCESS,
-      "could not set to playing");
-
-  inbuffer = gst_buffer_new_and_alloc (nsamples * 2);
-  gst_buffer_memset (inbuffer, 0, 0, nsamples * 2);
-
-  GST_BUFFER_TIMESTAMP (inbuffer) = GST_BUFFER_OFFSET (inbuffer) = 0;
-  GST_BUFFER_DURATION (inbuffer) = GST_CLOCK_TIME_NONE;
-  ASSERT_BUFFER_REFCOUNT (inbuffer, "inbuffer", 1);
-
-  caps = gst_caps_from_string (AUDIO_CAPS_STRING);
-  fail_unless (caps != NULL);
-  gst_check_setup_events (myencsrcpad, opusenc, caps, GST_FORMAT_TIME);
-  gst_caps_unref (caps);
-  gst_buffer_ref (inbuffer);
-
-  /* pushing gives away my reference ... */
-  fail_unless (gst_pad_push (myencsrcpad, inbuffer) == GST_FLOW_OK);
-  /* ... and nothing ends up on the global buffer list */
-  fail_unless (gst_pad_push_event (myencsrcpad, gst_event_new_eos ()) == TRUE);
-
-  ASSERT_BUFFER_REFCOUNT (inbuffer, "inbuffer", 1);
-  gst_buffer_unref (inbuffer);
-
-  fail_unless (gst_element_set_state (opusenc,
-          GST_STATE_READY) == GST_STATE_CHANGE_SUCCESS,
-      "could not set to ready");
-
-  /* default frame size is 20 ms, at 48000 Hz that's 960 samples */
-  check_buffers ((nsamples + 959) / 960);
-
-  /* cleanup */
-  cleanup_opusenc (opusenc);
-  g_list_free (buffers);
-}
-
-GST_END_TEST;
-
-GST_START_TEST (test_opus_encode_properties)
-{
-  const unsigned int nsamples = 4096;
-  enum
-  { steps = 20 };
-  GstElement *opusenc;
-  GstBuffer *inbuffer;
-  GstCaps *caps;
-  unsigned int step;
-  static const struct
-  {
-    const char *param;
-    int value;
-  } param_changes[steps] = {
-    {
-    "frame-size", 40}, {
-    "inband-fec", 1}, {
-    "complexity", 5}, {
-    "bandwidth", 1104}, {
-    "frame-size", 2}, {
-    "max-payload-size", 80}, {
-    "frame-size", 60}, {
-    "max-payload-size", 900}, {
-    "complexity", 1}, {
-    "bitrate", 30000}, {
-    "frame-size", 10}, {
-    "bitrate", 300000}, {
-    "inband-fec", 0}, {
-    "frame-size", 5}, {
-    "bandwidth", 1101}, {
-    "frame-size", 10}, {
-    "bitrate", 500000}, {
-    "frame-size", 5}, {
-    "bitrate", 80000}, {
-  "complexity", 8},};
-
-  opusenc = setup_opusenc ();
-
-  fail_unless (gst_element_set_state (opusenc,
-          GST_STATE_PLAYING) == GST_STATE_CHANGE_SUCCESS,
-      "could not set to playing");
-
-  caps = gst_caps_from_string (AUDIO_CAPS_STRING);
-  fail_unless (caps != NULL);
-
-  gst_check_setup_events (myencsrcpad, opusenc, caps, GST_FORMAT_TIME);
-
-  for (step = 0; step < steps; ++step) {
-    GstSegment segment;
-
-    gst_segment_init (&segment, GST_FORMAT_TIME);
-    gst_pad_push_event (myencsrcpad, gst_event_new_segment (&segment));
-
-    inbuffer = gst_buffer_new_and_alloc (nsamples * 2);
-    gst_buffer_memset (inbuffer, 0, 0, nsamples * 2);
-
-    GST_BUFFER_TIMESTAMP (inbuffer) = GST_BUFFER_OFFSET (inbuffer) = 0;
-    GST_BUFFER_DURATION (inbuffer) = GST_CLOCK_TIME_NONE;
-    ASSERT_BUFFER_REFCOUNT (inbuffer, "inbuffer", 1);
-
-    gst_buffer_ref (inbuffer);
-
-    /* pushing gives away my reference ... */
-    fail_unless (gst_pad_push (myencsrcpad, inbuffer) == GST_FLOW_OK);
-    /* ... and nothing ends up on the global buffer list */
-    fail_unless (gst_pad_push_event (myencsrcpad,
-            gst_event_new_eos ()) == TRUE);
-
-    ASSERT_BUFFER_REFCOUNT (inbuffer, "inbuffer", 1);
-    gst_buffer_unref (inbuffer);
-
-    /* change random parameters */
-    g_object_set (opusenc, param_changes[step].param, param_changes[step].value,
-        NULL);
-
-    check_buffers (1);
-
-    fail_unless (gst_pad_push_event (myencsrcpad,
-            gst_event_new_flush_start ()) == TRUE);
-    fail_unless (gst_pad_push_event (myencsrcpad,
-            gst_event_new_flush_stop (TRUE)) == TRUE);
-  }
-
-  gst_caps_unref (caps);
-
-  fail_unless (gst_element_set_state (opusenc,
-          GST_STATE_READY) == GST_STATE_CHANGE_SUCCESS,
-      "could not set to ready");
-
-  /* cleanup */
-  cleanup_opusenc (opusenc);
-  g_list_free (buffers);
-}
-
-GST_END_TEST;
-
-static Suite *
-opus_suite (void)
-{
-  Suite *s = suite_create ("opus");
-  TCase *tc_chain = tcase_create ("general");
-
-  suite_add_tcase (s, tc_chain);
-
-#define X if (0)
-  tcase_add_test (tc_chain, test_opus_id_header);
-  tcase_add_test (tc_chain, test_opus_encode_nothing);
-  tcase_add_test (tc_chain, test_opus_decode_nothing);
-  tcase_add_test (tc_chain, test_opus_encode_samples);
-  tcase_add_test (tc_chain, test_opus_encode_properties);
-#undef X
-
-  return s;
-}
-
-GST_CHECK_MAIN (opus);
diff --git a/tests/check/elements/pcapparse.c b/tests/check/elements/pcapparse.c
index 8a2a054..15d3555 100644
--- a/tests/check/elements/pcapparse.c
+++ b/tests/check/elements/pcapparse.c
@@ -1,5 +1,6 @@
 #include "parser.h"
 #include <gst/check/gstcheck.h>
+#include <gst/check/gstharness.h>
 
 static GstStaticPadTemplate srctemplate = GST_STATIC_PAD_TEMPLATE ("src",
     GST_PAD_SRC,
@@ -36,7 +37,7 @@
   if (vdata->data_to_verify == pcap_frame_with_eth_padding) {
     offset = pcap_frame_with_eth_padding_offset;
     size = sizeof (pcap_frame_with_eth_padding) -
-      pcap_frame_with_eth_padding_offset - 2;
+        pcap_frame_with_eth_padding_offset - 2;
   }
 
   fail_unless_equals_int (gst_buffer_get_size (buffer), size);
@@ -50,7 +51,7 @@
 setup_element (const gchar * desc)
 {
   GstElement *element;
-  GstCaps * caps;
+  GstCaps *caps;
 
   (void) desc;
 
@@ -67,6 +68,51 @@
   gst_parser_test_split (pcap_frame_with_eth_padding,
       sizeof (pcap_frame_with_eth_padding));
 }
+
+GST_END_TEST;
+
+static const guint8 zerosize_data[] = {
+  0xd4, 0xc3, 0xb2, 0xa1, 0x02, 0x00, 0x04, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x04, 0x00, 0x01, 0x00, 0x00, 0x00,
+  0xd3, 0xff, 0x7a, 0x56, 0xbb, 0xd8, 0x0e, 0x00,
+  0x2a, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x45, 0x00,
+  0x00, 0x1c, 0x06, 0xe7, 0x40, 0x00, 0x40, 0x11,
+  0x35, 0xe8, 0x7f, 0x00, 0x00, 0x01, 0x7f, 0x00,
+  0x00, 0x01, 0xd2, 0xa3, 0x13, 0x8c, 0x00, 0x08,
+  0xfe, 0x1b
+};
+
+GST_START_TEST (test_parse_zerosize_frames)
+{
+  GstBuffer *in_buf, *out_buf;
+  GstHarness *h;
+  gsize data_size;
+
+  h = gst_harness_new ("pcapparse");
+
+  gst_harness_set_src_caps_str (h, "raw/x-pcap");
+
+  data_size = sizeof (zerosize_data);
+
+  in_buf = gst_buffer_new_wrapped (g_memdup (zerosize_data, data_size),
+      data_size);
+
+  gst_harness_push (h, in_buf);
+  gst_harness_play (h);
+  gst_harness_push_event (h, gst_event_new_eos ());
+
+  /* check that a buffer comes out and that it is 0 bytes in size */
+  out_buf = gst_harness_pull (h);
+
+  fail_unless (gst_buffer_get_size (out_buf) == 0);
+
+  gst_buffer_unref (out_buf);
+  gst_harness_teardown (h);
+}
+
 GST_END_TEST;
 
 static Suite *
@@ -86,6 +132,7 @@
 
   suite_add_tcase (s, tc_chain);
   tcase_add_test (tc_chain, test_parse_frames_with_eth_padding);
+  tcase_add_test (tc_chain, test_parse_zerosize_frames);
 
   return s;
 }
diff --git a/tests/check/elements/rtponvif.c b/tests/check/elements/rtponvif.c
deleted file mode 100644
index cce808b..0000000
--- a/tests/check/elements/rtponvif.c
+++ /dev/null
@@ -1,439 +0,0 @@
-/*
- * onviftimestamp.c
- *
- * Copyright (C) 2014 Axis Communications AB
- *  Author: Guillaume Desmottes <guillaume.desmottes@collabora.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, see <http://www.gnu.org/licenses/>.
- */
-
-#include <gst/check/gstcheck.h>
-#include <gst/rtp/gstrtpbuffer.h>
-
-/* For ease of programming we use globals to keep refs for our floating
- * src and sink pads we create; otherwise we always have to do get_pad,
- * get_peer, and then remove references in every test function */
-static GstPad *mysrcpad, *mysinkpad;
-
-static GstStaticPadTemplate sinktemplate = GST_STATIC_PAD_TEMPLATE ("sink",
-    GST_PAD_SINK,
-    GST_PAD_ALWAYS,
-    GST_STATIC_CAPS ("application/x-rtp")
-    );
-static GstStaticPadTemplate srctemplate = GST_STATIC_PAD_TEMPLATE ("src",
-    GST_PAD_SRC,
-    GST_PAD_ALWAYS,
-    GST_STATIC_CAPS ("application/x-rtp")
-    );
-
-#define NTP_OFFSET (guint64) 1245
-#define TIMESTAMP 42
-
-static void
-setup_element (GstElement * element)
-{
-  mysrcpad = gst_check_setup_src_pad (element, &srctemplate);
-  mysinkpad = gst_check_setup_sink_pad (element, &sinktemplate);
-  gst_pad_set_active (mysrcpad, TRUE);
-  gst_pad_set_active (mysinkpad, TRUE);
-
-  fail_unless (gst_element_set_state (element,
-          GST_STATE_PLAYING) == GST_STATE_CHANGE_SUCCESS,
-      "could not set to playing");
-}
-
-static GstElement *
-setup_rtponviftimestamp (gboolean set_e_bit)
-{
-  GstElement *timestamp;
-
-  GST_DEBUG ("setup_rtponviftimestamp");
-  timestamp = gst_check_setup_element ("rtponviftimestamp");
-
-  g_object_set (timestamp, "ntp-offset", NTP_OFFSET, "cseq", 0x12345678,
-      "set-e-bit", set_e_bit, NULL);
-
-  setup_element (timestamp);
-
-  return timestamp;
-}
-
-static void
-cleanup_element (GstElement * element)
-{
-  fail_unless (gst_element_set_state (element,
-          GST_STATE_NULL) == GST_STATE_CHANGE_SUCCESS, "could not set to null");
-
-  gst_pad_set_active (mysrcpad, FALSE);
-  if (mysinkpad)
-    gst_pad_set_active (mysinkpad, FALSE);
-  gst_check_teardown_src_pad (element);
-  gst_check_teardown_sink_pad (element);
-  gst_check_teardown_element (element);
-  mysrcpad = NULL;
-  mysinkpad = NULL;
-}
-
-static void
-cleanup_rtponviftimestamp (GstElement * timestamp)
-{
-  GST_DEBUG ("cleanup_rtponviftimestamp");
-
-  cleanup_element (timestamp);
-}
-
-static void
-check_buffer_equal (GstBuffer * buf, GstBuffer * expected)
-{
-  GstMapInfo info_buf, info_expected;
-
-  fail_if (buf == NULL);
-  fail_if (expected == NULL);
-
-  gst_buffer_map (buf, &info_buf, GST_MAP_READ);
-  gst_buffer_map (expected, &info_expected, GST_MAP_READ);
-
-  GST_LOG ("buffer: size %" G_GSIZE_FORMAT, info_buf.size);
-  GST_LOG ("expected: size %" G_GSIZE_FORMAT, info_expected.size);
-  GST_MEMDUMP ("buffer", info_buf.data, info_buf.size);
-  GST_MEMDUMP ("expected", info_expected.data, info_expected.size);
-
-  fail_unless (info_buf.size == info_expected.size,
-      "size of the buffers are not the same");
-  fail_unless (memcmp (info_buf.data, info_expected.data, info_buf.size) == 0,
-      "data is not the same");
-
-  gst_buffer_unmap (buf, &info_buf);
-  gst_buffer_unmap (expected, &info_expected);
-}
-
-/* Create a RTP buffer without the extension */
-static GstBuffer *
-create_rtp_buffer (guint64 timestamp, gboolean clean_point, gboolean discont)
-{
-  GstBuffer *buffer_in;
-  GstRTPBuffer rtpbuffer_in = GST_RTP_BUFFER_INIT;
-
-  buffer_in = gst_rtp_buffer_new_allocate (4, 0, 0);
-  buffer_in->pts = timestamp;
-
-  if (!clean_point)
-    GST_BUFFER_FLAG_SET (buffer_in, GST_BUFFER_FLAG_DELTA_UNIT);
-  if (discont)
-    GST_BUFFER_FLAG_SET (buffer_in, GST_BUFFER_FLAG_DISCONT);
-
-  fail_unless (gst_rtp_buffer_map (buffer_in, GST_MAP_READ, &rtpbuffer_in));
-  fail_if (gst_rtp_buffer_get_extension (&rtpbuffer_in));
-  gst_rtp_buffer_unmap (&rtpbuffer_in);
-
-  return buffer_in;
-}
-
-static guint64
-convert_to_ntp (guint64 t)
-{
-  guint64 ntptime;
-
-  /* convert to NTP time. upper 32 bits should contain the seconds
-   * and the lower 32 bits, the fractions of a second. */
-  ntptime = gst_util_uint64_scale (t, (G_GINT64_CONSTANT (1) << 32),
-      GST_SECOND);
-
-  return ntptime;
-}
-
-/* Create a copy of @buffer_in having the RTP extension */
-static GstBuffer *
-create_extension_buffer (GstBuffer * buffer_in, gboolean clean_point,
-    gboolean end_contiguous, gboolean discont)
-{
-  GstBuffer *buffer_out;
-  GstRTPBuffer rtpbuffer_out = GST_RTP_BUFFER_INIT;
-  guint8 *data;
-  guint8 flags = 0;
-
-  buffer_out = gst_buffer_copy (buffer_in);
-
-  fail_unless (gst_rtp_buffer_map (buffer_out, GST_MAP_READWRITE,
-          &rtpbuffer_out));
-
-  /* extension */
-  gst_rtp_buffer_set_extension_data (&rtpbuffer_out, 0xABAC, 3);
-  fail_unless (gst_rtp_buffer_get_extension (&rtpbuffer_out));
-  gst_rtp_buffer_get_extension_data (&rtpbuffer_out, NULL, (gpointer) & data,
-      NULL);
-
-  /* NTP timestamp */
-  GST_WRITE_UINT64_BE (data, convert_to_ntp (buffer_in->pts + NTP_OFFSET));
-
-  /* C E D mbz */
-  if (clean_point)
-    flags |= (1 << 7);
-  if (end_contiguous)
-    flags |= (1 << 6);
-  if (discont)
-    flags |= (1 << 5);
-
-  GST_WRITE_UINT8 (data + 8, flags);
-
-  /* CSeq */
-  GST_WRITE_UINT8 (data + 9, 0x78);
-
-  memset (data + 10, 0, 4);
-
-  gst_rtp_buffer_unmap (&rtpbuffer_out);
-
-  return buffer_out;
-}
-
-static void
-do_one_buffer_test_apply (gboolean clean_point, gboolean discont)
-{
-  GstElement *apply;
-  GstBuffer *buffer_in, *buffer_out;
-  GstSegment segment;
-
-  apply = setup_rtponviftimestamp (FALSE);
-
-  buffer_in = create_rtp_buffer (TIMESTAMP, clean_point, discont);
-  buffer_out = create_extension_buffer (buffer_in, clean_point, FALSE, discont);
-
-  /* stream start */
-  fail_unless (gst_pad_push_event (mysrcpad,
-          gst_event_new_stream_start ("test")));
-
-  /* Push a segment */
-  gst_segment_init (&segment, GST_FORMAT_TIME);
-  fail_unless (gst_pad_push_event (mysrcpad, gst_event_new_segment (&segment)));
-
-  /* Push buffer */
-  fail_unless (gst_pad_push (mysrcpad, buffer_in) == GST_FLOW_OK,
-      "failed pushing buffer");
-
-  check_buffer_equal (buffers->data, buffer_out);
-
-  g_list_foreach (buffers, (GFunc) gst_mini_object_unref, NULL);
-  g_list_free (buffers);
-  buffers = NULL;
-
-  ASSERT_OBJECT_REFCOUNT (apply, "rtponviftimestamp", 1);
-  cleanup_rtponviftimestamp (apply);
-}
-
-static void
-do_two_buffers_test_apply (gboolean end_contiguous)
-{
-  GstElement *apply;
-  GstBuffer *buffer_in, *buffer_out;
-  GstSegment segment;
-
-  apply = setup_rtponviftimestamp (TRUE);
-
-  buffer_in = create_rtp_buffer (TIMESTAMP, FALSE, FALSE);
-  buffer_out = create_extension_buffer (buffer_in, FALSE, end_contiguous,
-      FALSE);
-
-  /* stream start */
-  fail_unless (gst_pad_push_event (mysrcpad,
-          gst_event_new_stream_start ("test")));
-
-  /* Push a segment */
-  gst_segment_init (&segment, GST_FORMAT_TIME);
-  fail_unless (gst_pad_push_event (mysrcpad, gst_event_new_segment (&segment)));
-
-  /* Push buffer */
-  fail_unless (gst_pad_push (mysrcpad, buffer_in) == GST_FLOW_OK,
-      "failed pushing buffer");
-
-  /* The buffer hasn't been pushed it as the element is waiting for the next
-   * buffer. */
-  g_assert_cmpuint (g_list_length (buffers), ==, 0);
-
-  /* A second buffer is pushed, it has the DISCONT flag if we want that the
-   * first one has the 'E' bit set. */
-  buffer_in = create_rtp_buffer (TIMESTAMP + 1, FALSE, end_contiguous);
-
-  fail_unless (gst_pad_push (mysrcpad, buffer_in) == GST_FLOW_OK,
-      "failed pushing buffer");
-
-  /* The first buffer has now been pushed out */
-  g_assert_cmpuint (g_list_length (buffers), ==, 1);
-
-  check_buffer_equal (buffers->data, buffer_out);
-
-  g_list_foreach (buffers, (GFunc) gst_mini_object_unref, NULL);
-  g_list_free (buffers);
-  buffers = NULL;
-
-  /* Push EOS */
-  fail_unless (gst_pad_push_event (mysrcpad, gst_event_new_eos ()));
-
-  /* The second buffer has been pushed out */
-  g_assert_cmpuint (g_list_length (buffers), ==, 1);
-
-  /* Latest buffer always has the 'E' flag */
-  buffer_out = create_extension_buffer (buffer_in, FALSE, TRUE, end_contiguous);
-  check_buffer_equal (buffers->data, buffer_out);
-
-  ASSERT_OBJECT_REFCOUNT (apply, "rtponviftimestamp", 1);
-  cleanup_rtponviftimestamp (apply);
-}
-
-GST_START_TEST (test_apply_discont)
-{
-  do_one_buffer_test_apply (FALSE, TRUE);
-}
-
-GST_END_TEST;
-
-GST_START_TEST (test_apply_not_discont)
-{
-  do_one_buffer_test_apply (FALSE, FALSE);
-}
-
-GST_END_TEST;
-
-GST_START_TEST (test_apply_clean_point)
-{
-  do_one_buffer_test_apply (TRUE, FALSE);
-}
-
-GST_END_TEST;
-
-GST_START_TEST (test_apply_no_e_bit)
-{
-  do_two_buffers_test_apply (FALSE);
-}
-
-GST_END_TEST;
-
-GST_START_TEST (test_apply_e_bit)
-{
-  do_two_buffers_test_apply (TRUE);
-}
-
-GST_END_TEST;
-
-static GstElement *
-setup_rtponvifparse (gboolean set_e_bit)
-{
-  GstElement *parse;
-
-  GST_DEBUG ("setup_rtponvifparse");
-  parse = gst_check_setup_element ("rtponvifparse");
-
-  setup_element (parse);
-
-  return parse;
-}
-
-static void
-cleanup_rtponvifparse (GstElement * parse)
-{
-  GST_DEBUG ("cleanup_rtponvifparse");
-
-  cleanup_element (parse);
-}
-
-static void
-test_parse (gboolean clean_point, gboolean discont)
-{
-  GstElement *parse;
-  GstBuffer *rtp, *buf;
-  GstSegment segment;
-
-  parse = setup_rtponvifparse (FALSE);
-
-  rtp = gst_rtp_buffer_new_allocate (4, 0, 0);
-  buf = create_extension_buffer (rtp, clean_point, FALSE, discont);
-  gst_buffer_unref (rtp);
-
-  /* stream start */
-  fail_unless (gst_pad_push_event (mysrcpad,
-          gst_event_new_stream_start ("test")));
-
-  /* Push a segment */
-  gst_segment_init (&segment, GST_FORMAT_TIME);
-  fail_unless (gst_pad_push_event (mysrcpad, gst_event_new_segment (&segment)));
-
-  /* Push buffer */
-  fail_unless (gst_pad_push (mysrcpad, buf) == GST_FLOW_OK,
-      "failed pushing buffer");
-
-  g_assert_cmpuint (g_list_length (buffers), ==, 1);
-  buf = buffers->data;
-
-  if (clean_point)
-    g_assert (!GST_BUFFER_FLAG_IS_SET (buf, GST_BUFFER_FLAG_DELTA_UNIT));
-  else
-    g_assert (GST_BUFFER_FLAG_IS_SET (buf, GST_BUFFER_FLAG_DELTA_UNIT));
-
-  if (discont)
-    g_assert (GST_BUFFER_IS_DISCONT (buf));
-  else
-    g_assert (!GST_BUFFER_IS_DISCONT (buf));
-
-  g_list_foreach (buffers, (GFunc) gst_mini_object_unref, NULL);
-  g_list_free (buffers);
-  buffers = NULL;
-
-  ASSERT_OBJECT_REFCOUNT (parse, "rtponvifparse", 1);
-  cleanup_rtponvifparse (parse);
-}
-
-GST_START_TEST (test_parse_no_flag)
-{
-  test_parse (FALSE, FALSE);
-}
-
-GST_END_TEST;
-
-GST_START_TEST (test_parse_clean_point)
-{
-  test_parse (TRUE, FALSE);
-}
-
-GST_END_TEST;
-
-GST_START_TEST (test_parse_discont)
-{
-  test_parse (FALSE, TRUE);
-}
-
-GST_END_TEST;
-
-static Suite *
-onviftimestamp_suite (void)
-{
-  Suite *s = suite_create ("onviftimestamp");
-  TCase *tc_chain;
-
-  tc_chain = tcase_create ("apply");
-  suite_add_tcase (s, tc_chain);
-  tcase_add_test (tc_chain, test_apply_discont);
-  tcase_add_test (tc_chain, test_apply_not_discont);
-  tcase_add_test (tc_chain, test_apply_clean_point);
-  tcase_add_test (tc_chain, test_apply_no_e_bit);
-  tcase_add_test (tc_chain, test_apply_e_bit);
-
-  tc_chain = tcase_create ("parse");
-  suite_add_tcase (s, tc_chain);
-  tcase_add_test (tc_chain, test_parse_no_flag);
-  tcase_add_test (tc_chain, test_parse_clean_point);
-  tcase_add_test (tc_chain, test_parse_discont);
-
-  return s;
-}
-
-GST_CHECK_MAIN (onviftimestamp);
diff --git a/tests/check/elements/rtponvifparse.c b/tests/check/elements/rtponvifparse.c
new file mode 100644
index 0000000..4651ac8
--- /dev/null
+++ b/tests/check/elements/rtponvifparse.c
@@ -0,0 +1,246 @@
+/*
+ * onviftimestamp.c
+ *
+ * Copyright (C) 2014 Axis Communications AB
+ *  Author: Guillaume Desmottes <guillaume.desmottes@collabora.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <gst/check/gstcheck.h>
+#include <gst/rtp/gstrtpbuffer.h>
+
+/* For ease of programming we use globals to keep refs for our floating
+ * src and sink pads we create; otherwise we always have to do get_pad,
+ * get_peer, and then remove references in every test function */
+static GstPad *mysrcpad, *mysinkpad;
+
+static GstStaticPadTemplate sinktemplate = GST_STATIC_PAD_TEMPLATE ("sink",
+    GST_PAD_SINK,
+    GST_PAD_ALWAYS,
+    GST_STATIC_CAPS ("application/x-rtp")
+    );
+static GstStaticPadTemplate srctemplate = GST_STATIC_PAD_TEMPLATE ("src",
+    GST_PAD_SRC,
+    GST_PAD_ALWAYS,
+    GST_STATIC_CAPS ("application/x-rtp")
+    );
+
+#define NTP_OFFSET (guint64) 1245
+#define TIMESTAMP 42
+
+static void
+setup_element (GstElement * element)
+{
+  mysrcpad = gst_check_setup_src_pad (element, &srctemplate);
+  mysinkpad = gst_check_setup_sink_pad (element, &sinktemplate);
+  gst_pad_set_active (mysrcpad, TRUE);
+  gst_pad_set_active (mysinkpad, TRUE);
+
+  fail_unless (gst_element_set_state (element,
+          GST_STATE_PLAYING) == GST_STATE_CHANGE_SUCCESS,
+      "could not set to playing");
+}
+
+static void
+cleanup_element (GstElement * element)
+{
+  fail_unless (gst_element_set_state (element,
+          GST_STATE_NULL) == GST_STATE_CHANGE_SUCCESS, "could not set to null");
+
+  gst_pad_set_active (mysrcpad, FALSE);
+  if (mysinkpad)
+    gst_pad_set_active (mysinkpad, FALSE);
+  gst_check_teardown_src_pad (element);
+  gst_check_teardown_sink_pad (element);
+  gst_check_teardown_element (element);
+  mysrcpad = NULL;
+  mysinkpad = NULL;
+}
+
+static guint64
+convert_to_ntp (guint64 t)
+{
+  guint64 ntptime;
+
+  /* convert to NTP time. upper 32 bits should contain the seconds
+   * and the lower 32 bits, the fractions of a second. */
+  ntptime = gst_util_uint64_scale (t, (G_GINT64_CONSTANT (1) << 32),
+      GST_SECOND);
+
+  return ntptime;
+}
+
+/* Create a copy of @buffer_in having the RTP extension */
+static GstBuffer *
+create_extension_buffer (GstBuffer * buffer_in, gboolean clean_point,
+    gboolean end_contiguous, gboolean discont)
+{
+  GstBuffer *buffer_out;
+  GstRTPBuffer rtpbuffer_out = GST_RTP_BUFFER_INIT;
+  guint8 *data;
+  guint8 flags = 0;
+
+  buffer_out = gst_buffer_copy (buffer_in);
+
+  fail_unless (gst_rtp_buffer_map (buffer_out, GST_MAP_READWRITE,
+          &rtpbuffer_out));
+
+  /* extension */
+  gst_rtp_buffer_set_extension_data (&rtpbuffer_out, 0xABAC, 3);
+  fail_unless (gst_rtp_buffer_get_extension (&rtpbuffer_out));
+  gst_rtp_buffer_get_extension_data (&rtpbuffer_out, NULL, (gpointer) & data,
+      NULL);
+
+  /* NTP timestamp */
+  GST_WRITE_UINT64_BE (data, convert_to_ntp (buffer_in->pts + NTP_OFFSET));
+
+  /* C E D mbz */
+  if (clean_point)
+    flags |= (1 << 7);
+  if (end_contiguous)
+    flags |= (1 << 6);
+  if (discont)
+    flags |= (1 << 5);
+
+  GST_WRITE_UINT8 (data + 8, flags);
+
+  /* CSeq */
+  GST_WRITE_UINT8 (data + 9, 0x78);
+
+  memset (data + 10, 0, 4);
+
+  gst_rtp_buffer_unmap (&rtpbuffer_out);
+
+  return buffer_out;
+}
+
+static GstElement *
+setup_rtponvifparse (gboolean set_e_bit)
+{
+  GstElement *parse;
+
+  GST_DEBUG ("setup_rtponvifparse");
+  parse = gst_check_setup_element ("rtponvifparse");
+
+  setup_element (parse);
+
+  return parse;
+}
+
+static void
+cleanup_rtponvifparse (GstElement * parse)
+{
+  GST_DEBUG ("cleanup_rtponvifparse");
+
+  cleanup_element (parse);
+}
+
+static void
+test_parse (gboolean clean_point, gboolean discont)
+{
+  GstElement *parse;
+  GstBuffer *rtp, *buf;
+  GstSegment segment;
+
+  parse = setup_rtponvifparse (FALSE);
+
+  rtp = gst_rtp_buffer_new_allocate (4, 0, 0);
+  buf = create_extension_buffer (rtp, clean_point, FALSE, discont);
+  gst_buffer_unref (rtp);
+
+  /* stream start */
+  fail_unless (gst_pad_push_event (mysrcpad,
+          gst_event_new_stream_start ("test")));
+
+  /* Push a segment */
+  gst_segment_init (&segment, GST_FORMAT_TIME);
+  fail_unless (gst_pad_push_event (mysrcpad, gst_event_new_segment (&segment)));
+
+  /* Push buffer */
+  fail_unless (gst_pad_push (mysrcpad, buf) == GST_FLOW_OK,
+      "failed pushing buffer");
+
+  g_assert_cmpuint (g_list_length (buffers), ==, 1);
+  buf = buffers->data;
+
+  if (clean_point)
+    g_assert (!GST_BUFFER_FLAG_IS_SET (buf, GST_BUFFER_FLAG_DELTA_UNIT));
+  else
+    g_assert (GST_BUFFER_FLAG_IS_SET (buf, GST_BUFFER_FLAG_DELTA_UNIT));
+
+  if (discont)
+    g_assert (GST_BUFFER_IS_DISCONT (buf));
+  else
+    g_assert (!GST_BUFFER_IS_DISCONT (buf));
+
+  g_list_foreach (buffers, (GFunc) gst_mini_object_unref, NULL);
+  g_list_free (buffers);
+  buffers = NULL;
+
+  ASSERT_OBJECT_REFCOUNT (parse, "rtponvifparse", 1);
+  cleanup_rtponvifparse (parse);
+}
+
+GST_START_TEST (test_parse_no_flag)
+{
+  test_parse (FALSE, FALSE);
+}
+
+GST_END_TEST;
+
+GST_START_TEST (test_parse_clean_point)
+{
+  test_parse (TRUE, FALSE);
+}
+
+GST_END_TEST;
+
+GST_START_TEST (test_parse_discont)
+{
+  test_parse (FALSE, TRUE);
+}
+
+GST_END_TEST;
+
+static Suite *
+onviftimestamp_suite (void)
+{
+  Suite *s = suite_create ("onviftimestamp");
+  TCase *tc_chain;
+
+  tc_chain = tcase_create ("parse");
+  suite_add_tcase (s, tc_chain);
+  tcase_add_test (tc_chain, test_parse_no_flag);
+  tcase_add_test (tc_chain, test_parse_clean_point);
+  tcase_add_test (tc_chain, test_parse_discont);
+
+  return s;
+}
+
+int
+main (int argc, char **argv)
+{
+  int nf;
+  Suite *s = onviftimestamp_suite ();
+  SRunner *sr = srunner_create (s);
+
+  gst_check_init (&argc, &argv);
+
+  srunner_run_all (sr, CK_NORMAL);
+  nf = srunner_ntests_failed (sr);
+  srunner_free (sr);
+
+  return nf;
+}
diff --git a/tests/check/elements/rtponviftimestamp.c b/tests/check/elements/rtponviftimestamp.c
new file mode 100644
index 0000000..09413a8
--- /dev/null
+++ b/tests/check/elements/rtponviftimestamp.c
@@ -0,0 +1,786 @@
+/*
+ * onviftimestamp.c
+ *
+ * Copyright (C) 2014 Axis Communications AB
+ *  Author: Guillaume Desmottes <guillaume.desmottes@collabora.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <gst/check/gstcheck.h>
+#include <gst/rtp/gstrtpbuffer.h>
+
+/* For ease of programming we use globals to keep refs for our floating
+ * src and sink pads we create; otherwise we always have to do get_pad,
+ * get_peer, and then remove references in every test function */
+static GstElement *element;
+static GstPad *mysrcpad;
+static GstPad *mysinkpad;
+/* These are global mainly because they are used from the setup/cleanup
+ * fixture functions */
+static gulong myprobe;
+static GList *mypushedevents;
+static GList *myreceivedevents;
+
+static GstStaticPadTemplate sinktemplate = GST_STATIC_PAD_TEMPLATE ("sink",
+    GST_PAD_SINK,
+    GST_PAD_ALWAYS,
+    GST_STATIC_CAPS ("application/x-rtp")
+    );
+static GstStaticPadTemplate srctemplate = GST_STATIC_PAD_TEMPLATE ("src",
+    GST_PAD_SRC,
+    GST_PAD_ALWAYS,
+    GST_STATIC_CAPS ("application/x-rtp")
+    );
+
+#define NTP_OFFSET  ((guint64) 1245)
+#define TIMESTAMP   ((GstClockTime)42)
+#define CSEQ        0x78
+#define COMPARE     TRUE
+#define NO_COMPARE  FALSE
+
+static GstPadProbeReturn
+event_probe (GstPad * pad, GstPadProbeInfo * info, gpointer user_data)
+{
+  GstEvent *event = GST_PAD_PROBE_INFO_EVENT (info);
+
+  GST_INFO ("got %" GST_PTR_FORMAT, event);
+  myreceivedevents = g_list_append (myreceivedevents, gst_event_ref (event));
+
+  return GST_PAD_PROBE_OK;
+}
+
+static GstEvent *
+create_ntp_offset_event (GstClockTime ntp_offset, gboolean discont)
+{
+  GstStructure *structure;
+
+  structure = gst_structure_new ("GstNtpOffset", "ntp-offset", G_TYPE_UINT64,
+      ntp_offset, "discont", G_TYPE_BOOLEAN, discont, NULL);
+
+  return gst_event_new_custom (GST_EVENT_CUSTOM_DOWNSTREAM, structure);
+}
+
+static GstEvent *
+create_event (GstEventType type)
+{
+  GstEvent *event = NULL;
+
+  switch (type) {
+    case GST_EVENT_CUSTOM_DOWNSTREAM:
+      event = gst_event_new_custom (GST_EVENT_CUSTOM_DOWNSTREAM,
+          gst_structure_new ("x-app/test", "test-field", G_TYPE_STRING,
+              "test-value", NULL));
+      break;
+    case GST_EVENT_CUSTOM_DOWNSTREAM_OOB:
+      event = gst_event_new_custom (GST_EVENT_CUSTOM_DOWNSTREAM_OOB,
+          gst_structure_new ("x-app/test", "test-field", G_TYPE_STRING,
+              "test-value", NULL));
+      break;
+    case GST_EVENT_EOS:
+      event = gst_event_new_eos ();
+      break;
+    default:
+      g_assert_not_reached ();
+      break;
+  }
+
+  return event;
+}
+
+static void
+create_and_push_event (GstEventType type)
+{
+  GstEvent *event = create_event (type);
+
+  mypushedevents = g_list_append (mypushedevents, event);
+  fail_unless (gst_pad_push_event (mysrcpad, event));
+}
+
+static void
+check_and_clear_events (gint expected, gboolean compare)
+{
+  GList *p;
+  GList *r;
+
+  /* verify that there's as many queued events as expected */
+  fail_unless_equals_int (g_list_length (myreceivedevents), expected);
+
+  if (compare) {
+    fail_unless_equals_int (expected, g_list_length (mypushedevents));
+
+    /* verify that the events are queued in the expected order */
+    r = myreceivedevents;
+    p = mypushedevents;
+
+    while (p != NULL) {
+      fail_unless_equals_pointer (p->data, r->data);
+      p = g_list_next (p);
+      r = g_list_next (r);
+    }
+  }
+
+  g_list_free_full (myreceivedevents, (GDestroyNotify) gst_event_unref);
+  myreceivedevents = NULL;
+  g_list_free (mypushedevents);
+  mypushedevents = NULL;
+}
+
+static void
+setup (void)
+{
+  element = gst_check_setup_element ("rtponviftimestamp");
+
+  mysinkpad = gst_check_setup_sink_pad (element, &sinktemplate);
+  gst_pad_set_active (mysinkpad, TRUE);
+
+  mysrcpad = gst_check_setup_src_pad (element, &srctemplate);
+  gst_pad_set_active (mysrcpad, TRUE);
+}
+
+static void
+cleanup (void)
+{
+  gst_check_drop_buffers ();
+
+  gst_pad_set_active (mysrcpad, FALSE);
+  gst_check_teardown_src_pad (element);
+  mysrcpad = NULL;
+
+  gst_pad_set_active (mysinkpad, FALSE);
+  gst_check_teardown_sink_pad (element);
+  mysinkpad = NULL;
+
+  gst_check_teardown_element (element);
+  element = NULL;
+
+  gst_check_drop_buffers ();
+}
+
+static void
+setup_with_event (void)
+{
+  setup ();
+
+  myprobe = gst_pad_add_probe (mysinkpad,
+      GST_PAD_PROBE_TYPE_EVENT_DOWNSTREAM, event_probe, NULL, NULL);
+  myreceivedevents = NULL;
+  mypushedevents = NULL;
+}
+
+static void
+cleanup_with_event (void)
+{
+  gst_pad_remove_probe (mysinkpad, myprobe);
+  myprobe = 0;
+  myreceivedevents = NULL;
+  mypushedevents = NULL;
+
+  cleanup ();
+}
+
+static void
+check_buffer_equal (GstBuffer * buf, GstBuffer * expected)
+{
+  GstMapInfo info_buf, info_expected;
+
+  fail_if (buf == NULL);
+  fail_if (expected == NULL);
+
+  fail_unless (gst_buffer_map (buf, &info_buf, GST_MAP_READ));
+  fail_unless (gst_buffer_map (expected, &info_expected, GST_MAP_READ));
+
+  GST_LOG ("buffer: size %" G_GSIZE_FORMAT, info_buf.size);
+  GST_LOG ("expected: size %" G_GSIZE_FORMAT, info_expected.size);
+  GST_MEMDUMP ("buffer", info_buf.data, info_buf.size);
+  GST_MEMDUMP ("expected", info_expected.data, info_expected.size);
+
+  fail_unless_equals_uint64 (info_buf.size, info_expected.size);
+  fail_unless_equals_int (memcmp (info_buf.data, info_expected.data,
+          info_buf.size), 0);
+
+  gst_buffer_unmap (buf, &info_buf);
+  gst_buffer_unmap (expected, &info_expected);
+}
+
+/* Create a RTP buffer without the extension */
+static GstBuffer *
+create_rtp_buffer (GstClockTime timestamp, gboolean clean_point)
+{
+  GstBuffer *buffer_in;
+  GstRTPBuffer rtpbuffer_in = GST_RTP_BUFFER_INIT;
+
+  buffer_in = gst_rtp_buffer_new_allocate (0, 0, 0);
+  GST_BUFFER_PTS (buffer_in) = timestamp;
+
+  if (!clean_point)
+    GST_BUFFER_FLAG_SET (buffer_in, GST_BUFFER_FLAG_DELTA_UNIT);
+
+  fail_unless (gst_rtp_buffer_map (buffer_in, GST_MAP_READ, &rtpbuffer_in));
+  fail_if (gst_rtp_buffer_get_extension (&rtpbuffer_in));
+  gst_rtp_buffer_unmap (&rtpbuffer_in);
+
+  return buffer_in;
+}
+
+static guint64
+convert_to_ntp (GstClockTime t)
+{
+  guint64 ntptime;
+
+  /* convert to NTP time. upper 32 bits should contain the seconds
+   * and the lower 32 bits, the fractions of a second. */
+  ntptime = gst_util_uint64_scale (t, (G_GINT64_CONSTANT (1) << 32),
+      GST_SECOND);
+
+  return ntptime;
+}
+
+/* Create a copy of @buffer_in having the RTP extension */
+static GstBuffer *
+create_extension_buffer (GstBuffer * buffer_in, gboolean clean_point,
+    gboolean end_contiguous, gboolean discont, guint64 ntp_offset, guint8 cseq)
+{
+  GstBuffer *buffer_out;
+  GstRTPBuffer rtpbuffer_out = GST_RTP_BUFFER_INIT;
+  guint8 *data;
+  guint8 flags = 0;
+
+  buffer_out = gst_buffer_copy (buffer_in);
+
+  fail_unless (gst_rtp_buffer_map (buffer_out, GST_MAP_READWRITE,
+          &rtpbuffer_out));
+
+  /* extension */
+  fail_unless (gst_rtp_buffer_set_extension_data (&rtpbuffer_out, 0xABAC, 3));
+  fail_unless (gst_rtp_buffer_get_extension (&rtpbuffer_out));
+  fail_unless (gst_rtp_buffer_get_extension_data (&rtpbuffer_out, NULL,
+          (gpointer) & data, NULL));
+
+  /* NTP timestamp */
+  GST_WRITE_UINT64_BE (data, convert_to_ntp (GST_BUFFER_PTS (buffer_in) +
+          ntp_offset));
+
+  /* C E D mbz */
+  if (clean_point)
+    flags |= (1 << 7);
+  if (end_contiguous)
+    flags |= (1 << 6);
+  if (discont)
+    flags |= (1 << 5);
+
+  GST_WRITE_UINT8 (data + 8, flags);
+
+  /* CSeq */
+  GST_WRITE_UINT8 (data + 9, cseq);
+
+  memset (data + 10, 0, 4);
+
+  gst_rtp_buffer_unmap (&rtpbuffer_out);
+
+  return buffer_out;
+}
+
+static void
+do_one_buffer_test_apply (gboolean clean_point)
+{
+  GstBuffer *buffer_in, *buffer_out;
+
+  g_object_set (element, "ntp-offset", NTP_OFFSET, "cseq", 0x12345678,
+      "set-e-bit", FALSE, NULL);
+
+  ASSERT_SET_STATE (element, GST_STATE_PLAYING, GST_STATE_CHANGE_SUCCESS);
+
+  buffer_in = create_rtp_buffer (TIMESTAMP, clean_point);
+  buffer_out = create_extension_buffer (buffer_in, clean_point, FALSE, FALSE,
+      NTP_OFFSET, CSEQ);
+
+  /* push initial events */
+  gst_check_setup_events (mysrcpad, element, NULL, GST_FORMAT_TIME);
+
+  /* Push buffer */
+  fail_unless_equals_int (gst_pad_push (mysrcpad, buffer_in), GST_FLOW_OK);
+
+  check_buffer_equal ((GstBuffer *) buffers->data, buffer_out);
+  gst_buffer_unref (buffer_out);
+
+  ASSERT_SET_STATE (element, GST_STATE_NULL, GST_STATE_CHANGE_SUCCESS);
+}
+
+static void
+do_two_buffers_test_apply (gboolean end_contiguous)
+{
+  GstBuffer *buffer_in, *buffer_out;
+  GList *node;
+
+  g_object_set (element, "ntp-offset", NTP_OFFSET, "cseq", 0x12345678,
+      "set-e-bit", TRUE, NULL);
+
+  ASSERT_SET_STATE (element, GST_STATE_PLAYING, GST_STATE_CHANGE_SUCCESS);
+
+  buffer_in = create_rtp_buffer (TIMESTAMP, FALSE);
+  buffer_out = create_extension_buffer (buffer_in, FALSE, end_contiguous,
+      FALSE, NTP_OFFSET, CSEQ);
+
+  /* push initial events */
+  gst_check_setup_events (mysrcpad, element, NULL, GST_FORMAT_TIME);
+
+  /* Push buffer */
+  fail_unless_equals_int (gst_pad_push (mysrcpad, buffer_in), GST_FLOW_OK);
+
+  /* The buffer hasn't been pushed it as the element is waiting for the next
+   * buffer. */
+  fail_unless_equals_int (g_list_length (buffers), 0);
+
+  /* push an ntp-offset event to trigger a discontinuty */
+  fail_unless (gst_pad_push_event (mysrcpad,
+          create_ntp_offset_event (NTP_OFFSET, end_contiguous)));
+
+  /* A second buffer is pushed */
+  buffer_in = create_rtp_buffer (TIMESTAMP + 1, FALSE);
+
+  fail_unless_equals_int (gst_pad_push (mysrcpad, buffer_in), GST_FLOW_OK);
+
+  /* The first buffer has now been pushed out */
+  fail_unless_equals_int (g_list_length (buffers), 1);
+
+  node = g_list_last (buffers);
+  check_buffer_equal ((GstBuffer *) node->data, buffer_out);
+  gst_buffer_unref (buffer_out);
+
+  /* Push EOS */
+  fail_unless (gst_pad_push_event (mysrcpad, gst_event_new_eos ()));
+
+  /* The second buffer has been pushed out */
+  fail_unless_equals_int (g_list_length (buffers), 2);
+
+  /* Last buffer always has the 'E' flag */
+  buffer_out = create_extension_buffer (buffer_in, FALSE, TRUE, end_contiguous,
+      NTP_OFFSET, CSEQ);
+  node = g_list_last (buffers);
+  check_buffer_equal ((GstBuffer *) node->data, buffer_out);
+  gst_buffer_unref (buffer_out);
+
+  ASSERT_SET_STATE (element, GST_STATE_NULL, GST_STATE_CHANGE_SUCCESS);
+}
+
+GST_START_TEST (test_apply_clean_point)
+{
+  do_one_buffer_test_apply (TRUE);
+}
+
+GST_END_TEST;
+
+GST_START_TEST (test_apply_no_e_bit)
+{
+  do_two_buffers_test_apply (FALSE);
+}
+
+GST_END_TEST;
+
+GST_START_TEST (test_apply_e_bit)
+{
+  do_two_buffers_test_apply (TRUE);
+}
+
+GST_END_TEST;
+
+GST_START_TEST (test_flushing)
+{
+  GstBuffer *buffer;
+
+  /* set the e-bit, so the element use caching */
+  g_object_set (element, "set-e-bit", TRUE, NULL);
+  /* set the ntp-offset, since no one will provide a clock */
+  g_object_set (element, "ntp-offset", NTP_OFFSET, NULL);
+
+  ASSERT_SET_STATE (element, GST_STATE_PLAYING, GST_STATE_CHANGE_SUCCESS);
+  gst_check_setup_events (mysrcpad, element, NULL, GST_FORMAT_TIME);
+
+  /* create and push the first buffer */
+  buffer = create_rtp_buffer (TIMESTAMP, TRUE);
+  fail_unless_equals_int (gst_pad_push (mysrcpad, buffer), GST_FLOW_OK);
+
+  /* no buffers should have made it through */
+  fail_unless_equals_int (g_list_length (buffers), 0);
+
+  /* flush the element */
+  fail_unless (gst_pad_push_event (mysrcpad, gst_event_new_flush_start ()));
+  fail_unless (gst_pad_push_event (mysrcpad, gst_event_new_flush_stop (FALSE)));
+
+  /* resend events */
+  gst_check_setup_events (mysrcpad, element, NULL, GST_FORMAT_TIME);
+
+  /* create and push a second buffer */
+  buffer = create_rtp_buffer (TIMESTAMP + 1, TRUE);
+  fail_unless_equals_int (gst_pad_push (mysrcpad, buffer), GST_FLOW_OK);
+
+  /* still no buffers should have made it through (the first one should have
+   * been dropped during flushing) */
+  fail_unless_equals_int (g_list_length (buffers), 0);
+
+  ASSERT_SET_STATE (element, GST_STATE_NULL, GST_STATE_CHANGE_SUCCESS);
+}
+
+GST_END_TEST;
+
+GST_START_TEST (test_reusable_element_no_e_bit)
+{
+  GstBuffer *buffer;
+
+  /* set the ntp-offset, since no one will provide a clock */
+  g_object_set (element, "ntp-offset", NTP_OFFSET, NULL);
+
+  ASSERT_SET_STATE (element, GST_STATE_PLAYING, GST_STATE_CHANGE_SUCCESS);
+  gst_check_setup_events (mysrcpad, element, NULL, GST_FORMAT_TIME);
+
+  /* create and push the first buffer */
+  buffer = create_rtp_buffer (TIMESTAMP, TRUE);
+  fail_unless_equals_int (gst_pad_push (mysrcpad, buffer), GST_FLOW_OK);
+
+  /* create and push a second buffer */
+  buffer = create_rtp_buffer (TIMESTAMP + 1, TRUE);
+  fail_unless_equals_int (gst_pad_push (mysrcpad, buffer), GST_FLOW_OK);
+
+  /* create and push a third buffer */
+  buffer = create_rtp_buffer (TIMESTAMP + 2, TRUE);
+  fail_unless_equals_int (gst_pad_push (mysrcpad, buffer), GST_FLOW_OK);
+
+  ASSERT_SET_STATE (element, GST_STATE_NULL, GST_STATE_CHANGE_SUCCESS);
+
+  fail_unless_equals_int (g_list_length (buffers), 3);
+
+  ASSERT_SET_STATE (element, GST_STATE_PLAYING, GST_STATE_CHANGE_SUCCESS);
+  gst_check_setup_events (mysrcpad, element, NULL, GST_FORMAT_TIME);
+
+  /* create and push the first buffer */
+  buffer = create_rtp_buffer (TIMESTAMP, TRUE);
+  fail_unless_equals_int (gst_pad_push (mysrcpad, buffer), GST_FLOW_OK);
+
+  /* create and push a second buffer */
+  buffer = create_rtp_buffer (TIMESTAMP + 1, TRUE);
+  fail_unless_equals_int (gst_pad_push (mysrcpad, buffer), GST_FLOW_OK);
+
+  /* create and push a third buffer */
+  buffer = create_rtp_buffer (TIMESTAMP + 2, TRUE);
+  fail_unless_equals_int (gst_pad_push (mysrcpad, buffer), GST_FLOW_OK);
+
+  ASSERT_SET_STATE (element, GST_STATE_NULL, GST_STATE_CHANGE_SUCCESS);
+
+  fail_unless_equals_int (g_list_length (buffers), 6);
+}
+
+GST_END_TEST;
+
+GST_START_TEST (test_reusable_element_e_bit)
+{
+  GstBuffer *buffer;
+
+  /* set the e-bit, so the element use caching */
+  g_object_set (element, "set-e-bit", TRUE, NULL);
+  /* set the ntp-offset, since no one will provide a clock */
+  g_object_set (element, "ntp-offset", NTP_OFFSET, NULL);
+
+  ASSERT_SET_STATE (element, GST_STATE_PLAYING, GST_STATE_CHANGE_SUCCESS);
+  gst_check_setup_events (mysrcpad, element, NULL, GST_FORMAT_TIME);
+
+  /* create and push the first buffer */
+  buffer = create_rtp_buffer (TIMESTAMP, TRUE);
+  fail_unless_equals_int (gst_pad_push (mysrcpad, buffer), GST_FLOW_OK);
+
+  /* create and push a second buffer */
+  buffer = create_rtp_buffer (TIMESTAMP + 1, TRUE);
+  fail_unless_equals_int (gst_pad_push (mysrcpad, buffer), GST_FLOW_OK);
+
+  /* create and push a third buffer */
+  buffer = create_rtp_buffer (TIMESTAMP + 2, TRUE);
+  fail_unless_equals_int (gst_pad_push (mysrcpad, buffer), GST_FLOW_OK);
+
+  ASSERT_SET_STATE (element, GST_STATE_NULL, GST_STATE_CHANGE_SUCCESS);
+
+  fail_unless_equals_int (g_list_length (buffers), 2);
+
+  ASSERT_SET_STATE (element, GST_STATE_PLAYING, GST_STATE_CHANGE_SUCCESS);
+  gst_check_setup_events (mysrcpad, element, NULL, GST_FORMAT_TIME);
+
+  /* create and push the first buffer */
+  buffer = create_rtp_buffer (TIMESTAMP, TRUE);
+  fail_unless_equals_int (gst_pad_push (mysrcpad, buffer), GST_FLOW_OK);
+
+  /* create and push a second buffer */
+  buffer = create_rtp_buffer (TIMESTAMP + 1, TRUE);
+  fail_unless_equals_int (gst_pad_push (mysrcpad, buffer), GST_FLOW_OK);
+
+  /* create and push a third buffer */
+  buffer = create_rtp_buffer (TIMESTAMP + 2, TRUE);
+  fail_unless_equals_int (gst_pad_push (mysrcpad, buffer), GST_FLOW_OK);
+
+  ASSERT_SET_STATE (element, GST_STATE_NULL, GST_STATE_CHANGE_SUCCESS);
+
+  fail_unless_equals_int (g_list_length (buffers), 4);
+}
+
+GST_END_TEST;
+
+GST_START_TEST (test_ntp_offset_event)
+{
+  GstBuffer *buffer_in, *buffer1_out, *buffer2_out;
+  GList *node;
+
+  /* set the e-bit, so the element use caching */
+  g_object_set (element, "set-e-bit", TRUE, NULL);
+
+  ASSERT_SET_STATE (element, GST_STATE_PLAYING, GST_STATE_CHANGE_SUCCESS);
+  gst_check_setup_events (mysrcpad, element, NULL, GST_FORMAT_TIME);
+
+  /* push an ntp-offset event */
+  fail_unless (gst_pad_push_event (mysrcpad,
+          create_ntp_offset_event (NTP_OFFSET, FALSE)));
+
+  /* create and push the first buffer */
+  buffer_in = create_rtp_buffer (TIMESTAMP, TRUE);
+  buffer1_out = create_extension_buffer (buffer_in, TRUE, TRUE, FALSE,
+      NTP_OFFSET, 0);
+  fail_unless_equals_int (gst_pad_push (mysrcpad, buffer_in), GST_FLOW_OK);
+
+  /* push a new ntp offset */
+  fail_unless (gst_pad_push_event (mysrcpad,
+          create_ntp_offset_event (2 * NTP_OFFSET, TRUE)));
+
+  /* create and push a second buffer (last) */
+  buffer_in = create_rtp_buffer (TIMESTAMP + 1, TRUE);
+  buffer2_out = create_extension_buffer (buffer_in, TRUE, TRUE, TRUE,
+      2 * NTP_OFFSET, 0);
+  fail_unless_equals_int (gst_pad_push (mysrcpad, buffer_in), GST_FLOW_OK);
+
+  /* the first buffer should have been pushed now */
+  fail_unless_equals_int (g_list_length (buffers), 1);
+  node = g_list_last (buffers);
+  check_buffer_equal ((GstBuffer *) node->data, buffer1_out);
+  gst_buffer_unref (buffer1_out);
+
+  /* push EOS */
+  fail_unless (gst_pad_push_event (mysrcpad, gst_event_new_eos ()));
+
+  /* the second buffer has now been pushed */
+  fail_unless_equals_int (g_list_length (buffers), 2);
+  node = g_list_last (buffers);
+  check_buffer_equal ((GstBuffer *) node->data, buffer2_out);
+  gst_buffer_unref (buffer2_out);
+
+  ASSERT_SET_STATE (element, GST_STATE_NULL, GST_STATE_CHANGE_SUCCESS);
+}
+
+GST_END_TEST;
+
+GST_START_TEST (test_serialized_events)
+{
+  GstBuffer *buffer;
+
+  /* we want the e-bit set so that buffers are cached */
+  g_object_set (element, "set-e-bit", TRUE, NULL);
+  g_object_set (element, "ntp-offset", NTP_OFFSET, NULL);
+
+  ASSERT_SET_STATE (element, GST_STATE_PLAYING, GST_STATE_CHANGE_SUCCESS);
+
+  /* send intitial events (stream-start and segment) */
+  gst_check_setup_events (mysrcpad, element, NULL, GST_FORMAT_TIME);
+  check_and_clear_events (2, NO_COMPARE);
+
+  /* events received while no buffer is cached should be forwarded */
+  create_and_push_event (GST_EVENT_CUSTOM_DOWNSTREAM);
+  check_and_clear_events (1, NO_COMPARE);
+
+  /* create and push the first buffer, which should be cached */
+  buffer = create_rtp_buffer (TIMESTAMP, TRUE);
+  fail_unless_equals_int (gst_pad_push (mysrcpad, buffer), GST_FLOW_OK);
+  fail_unless_equals_int (g_list_length (buffers), 0);
+  /* serialized events should be queued when there's a buffer cached */
+  create_and_push_event (GST_EVENT_CUSTOM_DOWNSTREAM);
+  fail_unless_equals_int (g_list_length (myreceivedevents), 0);
+  /* there's still a buffer cached... */
+  create_and_push_event (GST_EVENT_CUSTOM_DOWNSTREAM);
+  fail_unless_equals_int (g_list_length (myreceivedevents), 0);
+
+  /* receiving a new buffer should let the first through, along with the
+   * queued serialized events  */
+  buffer = create_rtp_buffer (TIMESTAMP, TRUE);
+  fail_unless_equals_int (gst_pad_push (mysrcpad, buffer), GST_FLOW_OK);
+  fail_unless_equals_int (g_list_length (buffers), 1);
+  check_and_clear_events (2, COMPARE);
+
+  /* there's still a buffer cached, a new serialized event should be quueud */
+  create_and_push_event (GST_EVENT_CUSTOM_DOWNSTREAM);
+  fail_unless_equals_int (g_list_length (myreceivedevents), 0);
+
+  /* when receiving an EOS cached buffer and queued events should be forwarded */
+  create_and_push_event (GST_EVENT_EOS);
+  check_and_clear_events (2, COMPARE);
+}
+
+GST_END_TEST;
+
+GST_START_TEST (test_non_serialized_events)
+{
+  GstEvent *event;
+  GstBuffer *buffer;
+
+  /* we want the e-bit set so that buffers are cached */
+  g_object_set (element, "set-e-bit", TRUE, NULL);
+  g_object_set (element, "ntp-offset", NTP_OFFSET, NULL);
+
+  ASSERT_SET_STATE (element, GST_STATE_PLAYING, GST_STATE_CHANGE_SUCCESS);
+
+  /* send intitial events (stream-start and segment) */
+  gst_check_setup_events (mysrcpad, element, NULL, GST_FORMAT_TIME);
+  fail_unless_equals_int (g_list_length (myreceivedevents), 2);
+  check_and_clear_events (2, NO_COMPARE);
+
+  /* events received while no buffer is cached should be forwarded */
+  create_and_push_event (GST_EVENT_CUSTOM_DOWNSTREAM_OOB);
+  check_and_clear_events (1, COMPARE);
+
+  /* create and push the first buffer, which should be cached */
+  buffer = create_rtp_buffer (TIMESTAMP, TRUE);
+  fail_unless_equals_int (gst_pad_push (mysrcpad, buffer), GST_FLOW_OK);
+  fail_unless_equals_int (g_list_length (buffers), 0);
+  /* non-serialized events should be forwarded regardless of whether
+   * there is a cached buffer */
+  create_and_push_event (GST_EVENT_CUSTOM_DOWNSTREAM_OOB);
+  check_and_clear_events (1, COMPARE);
+
+  /* there's still a buffer cached, push a serialized event and make sure
+   * it's queued */
+  create_and_push_event (GST_EVENT_CUSTOM_DOWNSTREAM);
+  fail_unless_equals_int (g_list_length (myreceivedevents), 0);
+  /* non-serialized events should be forwarded regardless of whether there
+   * are serialized events queued, thus the g_list_prepend below */
+  event = create_event (GST_EVENT_CUSTOM_DOWNSTREAM_OOB);
+  mypushedevents = g_list_prepend (mypushedevents, event);
+  fail_unless (gst_pad_push_event (mysrcpad, event));
+  fail_unless_equals_int (g_list_length (myreceivedevents), 1);
+
+  /* when receiving an EOS cached buffer and queued events should be forwarded */
+  create_and_push_event (GST_EVENT_EOS);
+  fail_unless_equals_int (g_list_length (buffers), 1);
+  check_and_clear_events (3, COMPARE);
+}
+
+GST_END_TEST;
+
+static void
+do_ntp_time (GstClockTime buffer_time, gint segment_start, gint segment_base)
+{
+  GstSegment segment;
+  GstBuffer *buffer;
+  GstRTPBuffer rtpbuffer = GST_RTP_BUFFER_INIT;
+  guint8 *data;
+  guint64 expected_ntp_time;
+  guint64 timestamp;
+
+  /* create a segment that controls the behavior
+   * by changing segment.start and segment.base we affect the stream time and
+   * running time respectively */
+  gst_segment_init (&segment, GST_FORMAT_TIME);
+  segment.start = segment_start;
+  segment.base = segment_base;
+  gst_pad_push_event (mysrcpad, gst_event_new_segment (&segment));
+
+  expected_ntp_time = gst_segment_to_stream_time (&segment, GST_FORMAT_TIME,
+      buffer_time);
+  expected_ntp_time += NTP_OFFSET;
+  expected_ntp_time = gst_util_uint64_scale (expected_ntp_time,
+      (G_GINT64_CONSTANT (1) << 32), GST_SECOND);
+
+  buffer = create_rtp_buffer (buffer_time, FALSE);
+  fail_unless_equals_int (gst_pad_push (mysrcpad, buffer), GST_FLOW_OK);
+  fail_unless_equals_int (g_list_length (buffers), 1);
+
+  buffer = g_list_last (buffers)->data;
+
+  /* get the extension header */
+  fail_unless (gst_rtp_buffer_map (buffer, GST_MAP_READWRITE, &rtpbuffer));
+  fail_unless (gst_rtp_buffer_get_extension_data (&rtpbuffer, NULL,
+          (gpointer) & data, NULL));
+
+  /* ...and read the NTP timestamp and verify that it's the expected one */
+  timestamp = GST_READ_UINT64_BE (data);
+  fail_unless_equals_uint64 (timestamp, expected_ntp_time);
+
+  gst_rtp_buffer_unmap (&rtpbuffer);
+  gst_check_drop_buffers ();
+}
+
+GST_START_TEST (test_ntp_time)
+{
+  /* we do not need buffer caching, so do not set the e-bit */
+  g_object_set (element, "set-e-bit", FALSE, NULL);
+  /* set an ntp offset suitable for testing */
+  g_object_set (element, "ntp-offset", NTP_OFFSET, NULL);
+
+  ASSERT_SET_STATE (element, GST_STATE_PLAYING, GST_STATE_CHANGE_SUCCESS);
+
+  /* push initial events */
+  gst_check_setup_events (mysrcpad, element, NULL, GST_FORMAT_TIME);
+
+  /* first test with a "clean" segment */
+  do_ntp_time (GST_MSECOND, 0, 0);
+  do_ntp_time (GST_SECOND + GST_MSECOND, 0, 0);
+
+  /* verify that changing the running time does not affect the ntp time stamps  */
+  do_ntp_time (GST_MSECOND, 0, GST_SECOND);
+  do_ntp_time (GST_SECOND + GST_MSECOND, 0, GST_SECOND);
+
+  /* changing the segment.start affects the stream time, verify that the element
+   * handles it correctly */
+  do_ntp_time (GST_MSECOND, GST_MSECOND / 2, 0);
+  do_ntp_time (GST_SECOND + GST_MSECOND, GST_MSECOND / 2, 0);
+
+  /* and finally change both of them and verify that all's fine */
+  do_ntp_time (GST_MSECOND, GST_MSECOND / 2, GST_SECOND);
+  do_ntp_time (GST_SECOND + GST_MSECOND, GST_MSECOND / 2, GST_SECOND);
+}
+
+GST_END_TEST;
+
+static Suite *
+onviftimestamp_suite (void)
+{
+  Suite *s = suite_create ("onviftimestamp");
+  TCase *tc_general, *tc_events;
+
+  tc_general = tcase_create ("general");
+  suite_add_tcase (s, tc_general);
+  tcase_add_checked_fixture (tc_general, setup, cleanup);
+
+  tcase_add_test (tc_general, test_apply_clean_point);
+  tcase_add_test (tc_general, test_apply_no_e_bit);
+  tcase_add_test (tc_general, test_apply_e_bit);
+  tcase_add_test (tc_general, test_flushing);
+  tcase_add_test (tc_general, test_reusable_element_no_e_bit);
+  tcase_add_test (tc_general, test_reusable_element_e_bit);
+  tcase_add_test (tc_general, test_ntp_offset_event);
+  tcase_add_test (tc_general, test_ntp_time);
+
+  tc_events = tcase_create ("events");
+  suite_add_tcase (s, tc_events);
+  tcase_add_checked_fixture (tc_events, setup_with_event, cleanup_with_event);
+
+  tcase_add_test (tc_events, test_serialized_events);
+  tcase_add_test (tc_events, test_non_serialized_events);
+
+  return s;
+}
+
+GST_CHECK_MAIN (onviftimestamp);
diff --git a/tests/check/elements/templatematch.c b/tests/check/elements/templatematch.c
index 5b56718..99fc794 100644
--- a/tests/check/elements/templatematch.c
+++ b/tests/check/elements/templatematch.c
@@ -92,7 +92,8 @@
   GstElement *element;
   GstPad *sinkpad, *srcpad;
   GstCaps *caps =
-      gst_caps_from_string (CAPS_TMPL ", width=(int)16, height=(int)16");
+      gst_caps_from_string (CAPS_TMPL
+      ", width=(int)16, height=(int)16, framerate=1/1");
   GstBus *bus;
   GstMessage *msg;
   const GstStructure *structure;
diff --git a/tests/check/elements/test_http_src.c b/tests/check/elements/test_http_src.c
new file mode 100644
index 0000000..915bb51
--- /dev/null
+++ b/tests/check/elements/test_http_src.c
@@ -0,0 +1,720 @@
+/* HTTP source element for use in tests
+ *
+ * Copyright (c) <2015> YouView TV Ltd
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#include <gst/check/gstcheck.h>
+#include <gst/base/gstbasesrc.h>
+
+#include "test_http_src.h"
+
+#ifndef GST_PACKAGE_NAME
+#define GST_PACKAGE_NAME "gst-plugins-bad"
+#endif
+
+#ifndef GST_PACKAGE_ORIGIN
+#define GST_PACKAGE_ORIGIN "https://developer.gnome.org/gstreamer/"
+#endif
+
+#define GST_TEST_HTTP_SRC(obj)            (G_TYPE_CHECK_INSTANCE_CAST ((obj), GST_TYPE_TEST_HTTP_SRC, GstTestHTTPSrc))
+#define GST_TEST_HTTP_SRC_CLASS(klass)    (G_TYPE_CHECK_CLASS_CAST ((klass), GST_TYPE_TEST_HTTP_SRC, GstTestHTTPSrcClass))
+#define GST_IS_TEST_HTTP_SRC(obj)         (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GST_TYPE_TEST_HTTP_SRC))
+#define GST_IS_TEST_HTTP_SRC_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GST_TYPE_TEST_HTTP_SRC))
+#define GST_TEST_HTTP_SRC_GET_CLASS(obj)  (G_TYPE_INSTANCE_GET_CLASS ((obj), GST_TYPE_TEST_HTTP_SRC, GstTestHTTPSrcClass))
+
+#define DEFAULT_USER_AGENT  "GStreamer testhttpsrc "
+#define DEFAULT_COMPRESS    FALSE
+#define DEFAULT_HTTP_METHOD NULL
+#define DEFAULT_KEEP_ALIVE  FALSE
+
+enum
+{
+  PROP_0,
+  PROP_USER_AGENT,
+  PROP_EXTRA_HEADERS,
+  PROP_COMPRESS,
+  PROP_KEEP_ALIVE,
+  PROP_METHOD,
+  PROP_LAST
+};
+
+typedef enum
+{
+  METHOD_INVALID,
+  METHOD_GET,
+  METHOD_POST,
+  METHOD_HEAD,
+  METHOD_OPTIONS
+} HttpMethod;
+
+typedef struct _GstTestHTTPSrcMethodName
+{
+  const gchar *name;
+  HttpMethod method;
+} GstTestHTTPSrcMethodName;
+
+static const GstTestHTTPSrcMethodName gst_test_http_src_methods[] = {
+  {"GET", METHOD_GET},
+  {"POST", METHOD_POST},
+  {"HEAD", METHOD_HEAD},
+  {"OPTIONS", METHOD_OPTIONS},
+  {NULL, METHOD_INVALID}
+};
+
+typedef struct _GstTestHTTPSrc
+{
+  GstBaseSrc parent;
+
+  GMutex mutex;
+
+  GstTestHTTPSrcInput input;
+
+  gchar *uri;                   /* the uri for which data is being requested */
+  gboolean compress;
+  gboolean keep_alive;
+  gchar *http_method_name;
+  HttpMethod http_method;
+  GstStructure *extra_headers;
+  gchar *user_agent;
+
+  guint64 position;
+  /* index immediately after the last byte from the segment to be retrieved */
+  guint64 segment_end;
+
+  GstEvent *http_headers_event;
+  gboolean duration_changed;
+} GstTestHTTPSrc;
+
+typedef struct _GstTestHTTPSrcClass
+{
+  GstBaseSrcClass parent_class;
+} GstTestHTTPSrcClass;
+
+typedef struct _PluginInitContext
+{
+  const gchar *name;
+  guint rank;
+  GType type;
+} PluginInitContext;
+
+static const GstTestHTTPSrcCallbacks *gst_test_http_src_callbacks = NULL;
+static gpointer gst_test_http_src_callback_user_data = NULL;
+static guint gst_test_http_src_blocksize = 0;
+
+static GstStaticPadTemplate gst_dashdemux_test_source_template =
+GST_STATIC_PAD_TEMPLATE ("src",
+    GST_PAD_SRC,
+    GST_PAD_ALWAYS,
+    GST_STATIC_CAPS_ANY);
+
+static void gst_test_http_src_uri_handler_init (gpointer g_iface,
+    gpointer iface_data);
+static void gst_test_http_src_finalize (GObject * object);
+static gboolean gst_test_http_src_is_seekable (GstBaseSrc * basesrc);
+static gboolean gst_test_http_src_do_seek (GstBaseSrc * basesrc,
+    GstSegment * segment);
+static gboolean gst_test_http_src_start (GstBaseSrc * basesrc);
+static gboolean gst_test_http_src_stop (GstBaseSrc * basesrc);
+static gboolean gst_test_http_src_get_size (GstBaseSrc * basesrc,
+    guint64 * size);
+static GstFlowReturn gst_test_http_src_create (GstBaseSrc * basesrc,
+    guint64 offset, guint length, GstBuffer ** ret);
+static void gst_test_http_src_set_property (GObject * object, guint prop_id,
+    const GValue * value, GParamSpec * pspec);
+static void gst_test_http_src_get_property (GObject * object, guint prop_id,
+    GValue * value, GParamSpec * pspec);
+
+
+#define _do_init \
+  G_IMPLEMENT_INTERFACE (GST_TYPE_URI_HANDLER, gst_test_http_src_uri_handler_init);
+
+#define gst_test_http_src_parent_class parent_class
+G_DEFINE_TYPE_WITH_CODE (GstTestHTTPSrc, gst_test_http_src,
+    GST_TYPE_BASE_SRC, _do_init);
+
+static void
+gst_test_http_src_class_init (GstTestHTTPSrcClass * klass)
+{
+  GObjectClass *gobject_class;
+  GstElementClass *gstelement_class;
+  GstBaseSrcClass *gstbasesrc_class;
+
+  gobject_class = G_OBJECT_CLASS (klass);
+  gstelement_class = GST_ELEMENT_CLASS (klass);
+  gstbasesrc_class = GST_BASE_SRC_CLASS (klass);
+
+  gobject_class->set_property = gst_test_http_src_set_property;
+  gobject_class->get_property = gst_test_http_src_get_property;
+  gobject_class->finalize = gst_test_http_src_finalize;
+
+  g_object_class_install_property (gobject_class, PROP_COMPRESS,
+      g_param_spec_boolean ("compress", "Compress",
+          "Allow compressed content encodings",
+          DEFAULT_COMPRESS, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+
+  g_object_class_install_property (gobject_class, PROP_EXTRA_HEADERS,
+      g_param_spec_boxed ("extra-headers", "Extra Headers",
+          "Extra headers to append to the HTTP request",
+          GST_TYPE_STRUCTURE, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+
+  g_object_class_install_property (gobject_class, PROP_KEEP_ALIVE,
+      g_param_spec_boolean ("keep-alive", "keep-alive",
+          "Use HTTP persistent connections", DEFAULT_KEEP_ALIVE,
+          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+
+  g_object_class_install_property (gobject_class, PROP_METHOD,
+      g_param_spec_string ("method", "HTTP method",
+          "The HTTP method to use (GET, HEAD, OPTIONS, etc)",
+          DEFAULT_HTTP_METHOD, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+
+  g_object_class_install_property (gobject_class,
+      PROP_USER_AGENT,
+      g_param_spec_string ("user-agent", "User-Agent",
+          "Value of the User-Agent HTTP request header field",
+          DEFAULT_USER_AGENT, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+
+  gst_element_class_set_metadata (gstelement_class,
+      "Test HTTP source element for unit tests",
+      "Source/Network",
+      "Use in unit tests", "Alex Ashley <alex.ashley@youview.com>");
+  gst_element_class_add_pad_template (gstelement_class,
+      gst_static_pad_template_get (&gst_dashdemux_test_source_template));
+
+  gstbasesrc_class->start = GST_DEBUG_FUNCPTR (gst_test_http_src_start);
+  gstbasesrc_class->stop = GST_DEBUG_FUNCPTR (gst_test_http_src_stop);
+  gstbasesrc_class->is_seekable =
+      GST_DEBUG_FUNCPTR (gst_test_http_src_is_seekable);
+  gstbasesrc_class->do_seek = GST_DEBUG_FUNCPTR (gst_test_http_src_do_seek);
+  gstbasesrc_class->get_size = GST_DEBUG_FUNCPTR (gst_test_http_src_get_size);
+  gstbasesrc_class->create = GST_DEBUG_FUNCPTR (gst_test_http_src_create);
+
+}
+
+static void
+gst_test_http_src_init (GstTestHTTPSrc * src)
+{
+  g_mutex_init (&src->mutex);
+  src->uri = NULL;
+  memset (&src->input, 0, sizeof (src->input));
+  src->compress = FALSE;
+  src->keep_alive = FALSE;
+  src->http_method_name = NULL;
+  src->http_method = METHOD_GET;
+  src->user_agent = NULL;
+  src->position = 0;
+  src->segment_end = 0;
+  src->http_headers_event = NULL;
+  src->duration_changed = FALSE;
+  if (gst_test_http_src_blocksize)
+    gst_base_src_set_blocksize (GST_BASE_SRC (src),
+        gst_test_http_src_blocksize);
+}
+
+static void
+gst_test_http_src_reset_input (GstTestHTTPSrc * src)
+{
+  src->input.context = NULL;
+  src->input.size = 0;
+  src->input.status_code = 0;
+  if (src->input.request_headers) {
+    gst_structure_free (src->input.request_headers);
+    src->input.request_headers = NULL;
+  }
+  if (src->input.response_headers) {
+    gst_structure_free (src->input.response_headers);
+    src->input.response_headers = NULL;
+  }
+  if (src->http_headers_event) {
+    gst_event_unref (src->http_headers_event);
+    src->http_headers_event = NULL;
+  }
+  if (src->extra_headers) {
+    gst_structure_free (src->extra_headers);
+    src->extra_headers = NULL;
+  }
+  g_free (src->http_method_name);
+  src->http_method_name = NULL;
+  g_free (src->user_agent);
+  src->user_agent = NULL;
+  src->duration_changed = FALSE;
+}
+
+static void
+gst_test_http_src_finalize (GObject * object)
+{
+  GstTestHTTPSrc *src;
+
+  src = GST_TEST_HTTP_SRC (object);
+
+  g_free (src->uri);
+  gst_test_http_src_reset_input (src);
+  g_mutex_clear (&src->mutex);
+
+  G_OBJECT_CLASS (parent_class)->finalize (object);
+}
+
+static gboolean
+gst_test_http_src_start (GstBaseSrc * basesrc)
+{
+  GstTestHTTPSrc *src;
+  GstStructure *http_headers;
+
+  src = GST_TEST_HTTP_SRC (basesrc);
+  g_mutex_lock (&src->mutex);
+  gst_test_http_src_reset_input (src);
+  if (!src->uri) {
+    GST_ELEMENT_ERROR (src, RESOURCE, OPEN_READ, (("No URL set.")),
+        ("Missing location property"));
+    g_mutex_unlock (&src->mutex);
+    return FALSE;
+  }
+  if (!gst_test_http_src_callbacks) {
+    GST_ELEMENT_ERROR (src, RESOURCE, OPEN_READ,
+        (("Callbacks not registered.")), ("Callbacks not registered"));
+    g_mutex_unlock (&src->mutex);
+    return FALSE;
+  }
+  if (!gst_test_http_src_callbacks->src_start) {
+    GST_ELEMENT_ERROR (src, RESOURCE, OPEN_READ,
+        (("src_start callback not defined.")),
+        ("src_start callback not registered"));
+    g_mutex_unlock (&src->mutex);
+    return FALSE;
+  }
+  if (!gst_test_http_src_callbacks->src_start (src, src->uri, &src->input,
+          gst_test_http_src_callback_user_data)) {
+    if (src->input.status_code == 0) {
+      src->input.status_code = 404;
+    }
+  } else {
+    if (src->input.status_code == 0) {
+      src->input.status_code = 200;
+    }
+    src->position = 0;
+    src->segment_end = src->input.size;
+    gst_base_src_set_dynamic_size (basesrc, FALSE);
+    basesrc->segment.duration = src->input.size;
+    src->duration_changed = TRUE;
+  }
+  http_headers = gst_structure_new_empty ("http-headers");
+  gst_structure_set (http_headers, "uri", G_TYPE_STRING, src->uri, NULL);
+  if (!src->input.request_headers) {
+    src->input.request_headers = gst_structure_new_empty ("request-headers");
+  }
+  if (!gst_structure_has_field_typed (src->input.request_headers,
+          "User-Agent", G_TYPE_STRING)) {
+    gst_structure_set (src->input.request_headers,
+        "User-Agent", G_TYPE_STRING,
+        src->user_agent ? src->user_agent : DEFAULT_USER_AGENT, NULL);
+  }
+  if (!gst_structure_has_field_typed (src->input.request_headers,
+          "Connection", G_TYPE_STRING)) {
+    gst_structure_set (src->input.request_headers,
+        "Connection", G_TYPE_STRING,
+        src->keep_alive ? "Keep-Alive" : "Close", NULL);
+  }
+  if (src->compress
+      && !gst_structure_has_field_typed (src->input.request_headers,
+          "Accept-Encoding", G_TYPE_STRING)) {
+    gst_structure_set (src->input.request_headers, "Accept-Encoding",
+        G_TYPE_STRING, "compress, gzip", NULL);
+  }
+  gst_structure_set (http_headers, "request-headers", GST_TYPE_STRUCTURE,
+      src->input.request_headers, NULL);
+  if (!src->input.response_headers) {
+    src->input.response_headers = gst_structure_new_empty ("response-headers");
+  }
+  if (!gst_structure_has_field_typed (src->input.response_headers,
+          "Connection", G_TYPE_STRING)) {
+    gst_structure_set (src->input.response_headers,
+        "Connection", G_TYPE_STRING,
+        src->keep_alive ? "keep-alive" : "close", NULL);
+  }
+  if (!gst_structure_has_field_typed (src->input.response_headers,
+          "Date", G_TYPE_STRING)) {
+    GDateTime *now;
+    gchar *date_str;
+
+    now = g_date_time_new_now_local ();
+    fail_unless (now != NULL);
+    date_str = g_date_time_format (now, "%a, %e %b %Y %T %Z");
+    fail_unless (date_str != NULL);
+    gst_structure_set (src->input.response_headers,
+        "Date", G_TYPE_STRING, date_str, NULL);
+    g_free (date_str);
+    g_date_time_unref (now);
+  }
+  gst_structure_set (http_headers, "response-headers", GST_TYPE_STRUCTURE,
+      src->input.response_headers, NULL);
+  if (src->http_headers_event) {
+    gst_event_unref (src->http_headers_event);
+  }
+  src->http_headers_event =
+      gst_event_new_custom (GST_EVENT_CUSTOM_DOWNSTREAM_STICKY, http_headers);
+  g_mutex_unlock (&src->mutex);
+  return TRUE;
+}
+
+static gboolean
+gst_test_http_src_stop (GstBaseSrc * basesrc)
+{
+  GstTestHTTPSrc *src;
+
+  src = GST_TEST_HTTP_SRC (basesrc);
+  g_mutex_lock (&src->mutex);
+  src->position = 0;
+  gst_test_http_src_reset_input (src);
+  g_mutex_unlock (&src->mutex);
+  return TRUE;
+}
+
+static gboolean
+gst_test_http_src_is_seekable (GstBaseSrc * basesrc)
+{
+  GstTestHTTPSrc *src;
+  gboolean ret;
+
+  src = GST_TEST_HTTP_SRC (basesrc);
+  g_mutex_lock (&src->mutex);
+  /* if size is set, we can seek */
+  ret = src->input.size > 0;
+  g_mutex_unlock (&src->mutex);
+  return ret;
+}
+
+static gboolean
+gst_test_http_src_do_seek (GstBaseSrc * basesrc, GstSegment * segment)
+{
+  GstTestHTTPSrc *src = GST_TEST_HTTP_SRC (basesrc);
+
+  GST_DEBUG ("gst_test_http_src_do_seek start = %" G_GUINT64_FORMAT,
+      segment->start);
+
+  /*
+     According to RFC7233, the range is inclusive:
+     The first-byte-pos value in a byte-range-spec gives the byte-offset
+     of the first byte in a range.  The last-byte-pos value gives the
+     byte-offset of the last byte in the range; that is, the byte
+     positions specified are inclusive.  Byte offsets start at zero.
+   */
+
+  g_mutex_lock (&src->mutex);
+  if (!src->uri) {
+    GST_DEBUG ("attempt to seek before URI set");
+    g_mutex_unlock (&src->mutex);
+    return FALSE;
+  }
+  if (src->input.status_code >= 200 && src->input.status_code < 300) {
+    if (segment->start >= src->input.size) {
+      GST_DEBUG ("attempt to seek to %" G_GUINT64_FORMAT " but size is %"
+          G_GUINT64_FORMAT, segment->start, src->input.size);
+      g_mutex_unlock (&src->mutex);
+      return FALSE;
+    }
+    if (segment->stop != -1 && segment->stop > src->input.size) {
+      g_mutex_unlock (&src->mutex);
+      return FALSE;
+    }
+  } else {
+    GST_DEBUG ("Attempt to seek on a URL that will generate HTTP error %u",
+        src->input.status_code);
+  }
+  src->position = segment->start;
+
+  if (segment->stop != -1) {
+    src->segment_end = segment->stop;
+  } else {
+    src->segment_end = src->input.size;
+  }
+  g_mutex_unlock (&src->mutex);
+  return TRUE;
+}
+
+static gboolean
+gst_test_http_src_get_size (GstBaseSrc * basesrc, guint64 * size)
+{
+  GstTestHTTPSrc *src;
+
+  src = GST_TEST_HTTP_SRC (basesrc);
+
+  g_mutex_lock (&src->mutex);
+  /* if it was started, size is set */
+  if (src->uri && src->input.status_code >= 200 && src->input.status_code < 300) {
+    *size = src->input.size;
+    g_mutex_unlock (&src->mutex);
+    return TRUE;
+  }
+  /* cannot get the size if it wasn't started */
+  g_mutex_unlock (&src->mutex);
+  return FALSE;
+}
+
+static GstFlowReturn
+gst_test_http_src_create (GstBaseSrc * basesrc, guint64 offset,
+    guint length, GstBuffer ** retbuf)
+{
+  GstTestHTTPSrc *src = GST_TEST_HTTP_SRC (basesrc);
+  guint bytes_read;
+  GstFlowReturn ret = GST_FLOW_OK;
+  guint blocksize;
+
+  fail_unless (gst_test_http_src_callbacks != NULL);
+  fail_unless (gst_test_http_src_callbacks->src_create != NULL);
+
+  GST_OBJECT_LOCK (src);
+  blocksize = basesrc->blocksize;
+  GST_OBJECT_UNLOCK (src);
+
+  g_mutex_lock (&src->mutex);
+  GST_DEBUG ("gst_test_http_src_create feeding from %" G_GUINT64_FORMAT,
+      src->position);
+  if (src->uri == NULL) {
+    GST_ELEMENT_ERROR (src, RESOURCE, READ, (NULL), GST_ERROR_SYSTEM);
+    g_mutex_unlock (&src->mutex);
+    return GST_FLOW_ERROR;
+  }
+  if (src->input.status_code < 200 || src->input.status_code >= 300) {
+    GST_ELEMENT_ERROR (src, RESOURCE, NOT_FOUND, ("%s",
+            "Generated requested error"), ("%s (%d), URL: %s, Redirect to: %s",
+            "Generated requested error", src->input.status_code, src->uri,
+            GST_STR_NULL (NULL)));
+    g_mutex_unlock (&src->mutex);
+    return GST_FLOW_ERROR;
+  }
+  if (src->http_method == METHOD_INVALID) {
+    GST_ELEMENT_ERROR (src, RESOURCE, READ, ("%s",
+            "Invalid HTTP method"), ("%s (%s), URL: %s",
+            "Invalid HTTP method", src->http_method_name, src->uri));
+    g_mutex_unlock (&src->mutex);
+    return GST_FLOW_ERROR;
+  } else if (src->http_method == METHOD_HEAD) {
+    ret = GST_FLOW_EOS;
+    goto http_events;
+  }
+  fail_unless_equals_uint64 (offset, src->position);
+  bytes_read = MIN ((src->segment_end - src->position), blocksize);
+  if (bytes_read == 0) {
+    ret = GST_FLOW_EOS;
+    goto http_events;
+  }
+  ret = gst_test_http_src_callbacks->src_create (src,
+      offset, bytes_read, retbuf,
+      src->input.context, gst_test_http_src_callback_user_data);
+  if (ret != GST_FLOW_OK) {
+    goto http_events;
+  }
+
+  GST_BUFFER_OFFSET (*retbuf) = src->position;
+  GST_BUFFER_OFFSET_END (*retbuf) = src->position + bytes_read;
+
+  src->position += bytes_read;
+http_events:
+  if (src->http_headers_event) {
+    gst_pad_push_event (GST_BASE_SRC_PAD (src), src->http_headers_event);
+    src->http_headers_event = NULL;
+  }
+  if (src->duration_changed) {
+    src->duration_changed = FALSE;
+    gst_element_post_message (GST_ELEMENT (src),
+        gst_message_new_duration_changed (GST_OBJECT (src)));
+  }
+
+  g_mutex_unlock (&src->mutex);
+  return ret;
+}
+
+static void
+gst_test_http_src_set_property (GObject * object, guint prop_id,
+    const GValue * value, GParamSpec * pspec)
+{
+  GstTestHTTPSrc *src = GST_TEST_HTTP_SRC (object);
+
+  switch (prop_id) {
+    case PROP_USER_AGENT:
+      g_free (src->user_agent);
+      src->user_agent = g_value_dup_string (value);
+      break;
+    case PROP_EXTRA_HEADERS:{
+      const GstStructure *s = gst_value_get_structure (value);
+      if (src->extra_headers)
+        gst_structure_free (src->extra_headers);
+      src->extra_headers = s ? gst_structure_copy (s) : NULL;
+      break;
+    }
+    case PROP_COMPRESS:
+      src->compress = g_value_get_boolean (value);
+      GST_DEBUG ("Set compress=%s", src->compress ? "TRUE" : "FALSE");
+      break;
+    case PROP_KEEP_ALIVE:
+      src->keep_alive = g_value_get_boolean (value);
+      break;
+    case PROP_METHOD:
+      g_free (src->http_method_name);
+      src->http_method_name = g_value_dup_string (value);
+      src->http_method = METHOD_INVALID;
+      for (guint i = 0; gst_test_http_src_methods[i].name; ++i) {
+        if (strcmp (gst_test_http_src_methods[i].name,
+                src->http_method_name) == 0) {
+          src->http_method = gst_test_http_src_methods[i].method;
+          break;
+        }
+      }
+      /* we don't cause an error for an invalid method at this point,
+         as GstSoupHTTPSrc does not use the http_method_name string until
+         trying to open a connection.
+       */
+      break;
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
+  }
+}
+
+static void
+gst_test_http_src_get_property (GObject * object, guint prop_id,
+    GValue * value, GParamSpec * pspec)
+{
+  GstTestHTTPSrc *src = GST_TEST_HTTP_SRC (object);
+
+  switch (prop_id) {
+    case PROP_USER_AGENT:
+      g_value_set_string (value, src->user_agent);
+      break;
+    case PROP_EXTRA_HEADERS:
+      gst_value_set_structure (value, src->extra_headers);
+      break;
+    case PROP_COMPRESS:
+      g_value_set_boolean (value, src->compress);
+      break;
+    case PROP_KEEP_ALIVE:
+      g_value_set_boolean (value, src->keep_alive);
+      break;
+    case PROP_METHOD:
+      g_value_set_string (value, src->http_method_name);
+      break;
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
+  }
+}
+
+static gboolean
+gst_test_http_src_set_location (GstTestHTTPSrc * src,
+    const gchar * uri, GError ** error)
+{
+  g_mutex_lock (&src->mutex);
+  g_free (src->uri);
+  src->uri = g_strdup (uri);
+  g_mutex_unlock (&src->mutex);
+  return TRUE;
+}
+
+static GstURIType
+gst_test_http_src_uri_get_type (GType type)
+{
+  return GST_URI_SRC;
+}
+
+static const gchar *const *
+gst_test_http_src_uri_get_protocols (GType type)
+{
+  static const gchar *protocols[] = { "http", NULL };
+
+  return protocols;
+}
+
+static gchar *
+gst_test_http_src_uri_get_uri (GstURIHandler * handler)
+{
+  GstTestHTTPSrc *src = GST_TEST_HTTP_SRC (handler);
+  gchar *ret;
+  g_mutex_lock (&src->mutex);
+  ret = g_strdup (src->uri);
+  g_mutex_unlock (&src->mutex);
+  return ret;
+}
+
+static gboolean
+gst_test_http_src_uri_set_uri (GstURIHandler * handler, const gchar * uri,
+    GError ** err)
+{
+  GstTestHTTPSrc *src = GST_TEST_HTTP_SRC (handler);
+
+  return gst_test_http_src_set_location (src, uri, err);
+}
+
+static void
+gst_test_http_src_uri_handler_init (gpointer g_iface, gpointer iface_data)
+{
+  GstURIHandlerInterface *iface = (GstURIHandlerInterface *) g_iface;
+
+  iface->get_type = gst_test_http_src_uri_get_type;
+  iface->get_protocols = gst_test_http_src_uri_get_protocols;
+  iface->get_uri = gst_test_http_src_uri_get_uri;
+  iface->set_uri = gst_test_http_src_uri_set_uri;
+}
+
+static gboolean
+gst_test_http_src_plugin_init_func (GstPlugin * plugin, gpointer user_data)
+{
+  PluginInitContext *context = (PluginInitContext *) user_data;
+  gboolean ret;
+
+  ret =
+      gst_element_register (plugin, context->name, context->rank,
+      context->type);
+  return ret;
+}
+
+gboolean
+gst_test_http_src_register_plugin (GstRegistry * registry, const gchar * name)
+{
+  gboolean ret;
+  PluginInitContext context;
+
+  context.name = name;
+  context.rank = GST_RANK_PRIMARY + 1;
+  context.type = GST_TYPE_TEST_HTTP_SRC;
+  ret = gst_plugin_register_static_full (GST_VERSION_MAJOR,     /* version */
+      GST_VERSION_MINOR,        /* version */
+      name,                     /* name */
+      "Replaces a souphttpsrc plugin and returns predefined data.",     /* description */
+      gst_test_http_src_plugin_init_func,       /* init function */
+      "0.0.0",                  /* version string */
+      GST_LICENSE_UNKNOWN,      /* license */
+      __FILE__,                 /* source */
+      GST_PACKAGE_NAME,         /* package */
+      GST_PACKAGE_ORIGIN,       /* origin */
+      &context                  /* user_data */
+      );
+  return ret;
+}
+
+void
+gst_test_http_src_install_callbacks (const GstTestHTTPSrcCallbacks *
+    callbacks, gpointer user_data)
+{
+  gst_test_http_src_callbacks = callbacks;
+  gst_test_http_src_callback_user_data = user_data;
+}
+
+void
+gst_test_http_src_set_default_blocksize (guint blocksize)
+{
+  gst_test_http_src_blocksize = blocksize;
+}
diff --git a/tests/check/elements/test_http_src.h b/tests/check/elements/test_http_src.h
new file mode 100644
index 0000000..61161af
--- /dev/null
+++ b/tests/check/elements/test_http_src.h
@@ -0,0 +1,132 @@
+/* HTTP source element for use in tests
+ *
+ * Copyright (c) <2015> YouView TV Ltd
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifndef __GST_TEST_HTTP_SRC_H__
+#define __GST_TEST_HTTP_SRC_H__
+
+#include <gst/gst.h>
+
+G_BEGIN_DECLS
+
+#define GST_TYPE_TEST_HTTP_SRC            (gst_test_http_src_get_type ())
+
+/* structure used by src_start function to configure the
+ * GstTestHTTPSrc plugin.
+ * It specifies information about a given URI.
+ */
+typedef struct _GstTestHTTPSrcInput
+{
+  gpointer context; /* opaque pointer that can be used in callbacks */
+  guint64 size; /* size of resource, in bytes */
+  GstStructure *request_headers;
+  GstStructure *response_headers;
+  guint status_code; /* HTTP status code */
+} GstTestHTTPSrcInput;
+
+/* Opaque structure used by GstTestHTTPSrc */
+typedef struct _GstTestHTTPSrc GstTestHTTPSrc;
+
+typedef struct _GstTestHTTPSrcCallbacks {
+  /**
+   * src_start:
+   * @src: The #GstTestHTTPSrc calling this callback
+   * @uri: The URI that is being requested
+   * @input_data: (out) The implementation of this callback is
+   * responsible for filling in this #GstTestHTTPSrcInput
+   * with the appropriate information, return returning %TRUE.
+   * If returning %FALSE, only GstTestHTTPSrcInput::status_code
+   * should be updated.
+   * Returns: %TRUE if GstTestHTTPSrc should respond to this URI,
+   * using the supplied input_data.
+   *
+   * src_start is used to "open" the given URI. The callback must return
+   * %TRUE to simulate a success, and set appropriate fields in input_data.
+   * Returning %FALSE indicates that the request URI is not found.
+   * In this situation GstTestHTTPSrc will cause the appropriate
+   * 404 error to be posted to the bus 
+   */
+  gboolean (*src_start)(GstTestHTTPSrc *src,
+                        const gchar *uri,
+                        GstTestHTTPSrcInput *input_data,
+                        gpointer user_data);
+  /**
+   * src_create:
+   * @src: the #GstTestHTTPSrc calling this callback
+   * @offset: the offset from the start of the resource
+   * @length: requested number of bytes
+   * @retbuf: (out) used to return a newly allocated #GstBuffer
+   * @context: (allow none) the value of the context field
+   * in #GstTestHTTPSrcInput.
+   * @user_data: the value of user_data provided to 
+   * #gst_test_http_src_install_callbacks
+   * Returns: %GST_FLOW_OK to indicate success, or some other value of
+   * #GstFlowReturn to indicate EOS or error.
+   *
+   * The src_create function is used to create a #GstBuffer for
+   * simulating the data that is returned when accessing this
+   * "open" stream. It can also be used to simulate various error
+   * conditions by returning something other than %GST_FLOW_OK
+   */
+  GstFlowReturn (*src_create)(GstTestHTTPSrc *src,
+                              guint64 offset,
+                              guint length,
+                              GstBuffer ** retbuf,
+                              gpointer context,
+                              gpointer user_data);
+} GstTestHTTPSrcCallbacks;
+
+GType gst_test_http_src_get_type (void);
+
+/**
+ * gst_test_http_src_register_plugin:
+ * @registry: the #GstRegistry to use for registering this plugin
+ * @name: the name to use for this plugin
+ * Returns: true if successful
+ *
+ * Registers this plugin with the GstRegitry using the given name. It will
+ * be given a high rank, so that it will be picked in preference to any
+ * other element that implements #GstURIHandler.
+ */
+gboolean gst_test_http_src_register_plugin (GstRegistry * registry, const gchar * name);
+
+/**
+ * gst_test_http_src_install_callbacks:
+ * @callbacks: the #GstTestHTTPSrcCallbacks callback functions that will
+ * be called every time this element is asked to open a URI or provide data
+ * for an open URI.
+ * @user_data: a pointer that is passed to every callback
+ */
+void gst_test_http_src_install_callbacks (const GstTestHTTPSrcCallbacks *callbacks, gpointer user_data);
+
+/**
+ * gst_test_http_src_set_default_blocksize:
+ * @blocksize: the default block size to use (0=use #GstBaseSrc default)
+ *
+ * Set the default blocksize that will be used by instances of
+ * #GstTestHTTPSrc. It specifies the size (in bytes) that will be
+ * returned in each #GstBuffer. This default can be overridden
+ * by an instance of #GstTestHTTPSrc using the "blocksize" property
+ * of #GstBaseSrc
+ */
+void gst_test_http_src_set_default_blocksize (guint blocksize);
+
+G_END_DECLS
+
+#endif /* __GST_TEST_HTTP_SRC_H__ */
diff --git a/tests/check/elements/videoframe-audiolevel.c b/tests/check/elements/videoframe-audiolevel.c
new file mode 100644
index 0000000..9d57390
--- /dev/null
+++ b/tests/check/elements/videoframe-audiolevel.c
@@ -0,0 +1,636 @@
+/* GStreamer unit test for videoframe-audiolevel
+ *
+ * Copyright (C) 2015 Vivia Nikolaidou <vivia@toolsonair.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+/* suppress warnings for deprecated API such as GValueArray
+ * with newer GLib versions (>= 2.31.0) */
+#define GLIB_DISABLE_DEPRECATION_WARNINGS
+
+#include <gst/check/gstcheck.h>
+#include <gst/audio/audio.h>
+
+static gboolean got_eos;
+static guint audio_buffer_count, video_buffer_count;
+static GstSegment current_audio_segment, current_video_segment;
+static guint num_msgs;
+static GQueue v_timestamp_q, msg_timestamp_q;
+
+static guint n_abuffers, n_vbuffers;
+static guint channels, fill_value;
+static gdouble expected_rms;
+static gboolean audiodelay, videodelay, per_channel, long_video;
+static gboolean early_video, late_video;
+static gboolean video_gaps, video_overlaps;
+static gboolean audio_nondiscont, audio_drift;
+
+static guint fill_value_per_channel[] = { 0, 1 };
+static gdouble expected_rms_per_channel[] = { 0, 0.0078125 };
+
+static void
+set_default_params (void)
+{
+  n_abuffers = 40;
+  n_vbuffers = 15;
+  channels = 2;
+  expected_rms = 0.0078125;
+  fill_value = 1;
+  audiodelay = FALSE;
+  videodelay = FALSE;
+  per_channel = FALSE;
+  long_video = FALSE;
+  video_gaps = FALSE;
+  video_overlaps = FALSE;
+  audio_nondiscont = FALSE;
+  audio_drift = FALSE;
+  early_video = FALSE;
+  late_video = FALSE;
+};
+
+static GstFlowReturn
+output_achain (GstPad * pad, GstObject * parent, GstBuffer * buffer)
+{
+  GstClockTime timestamp;
+  guint8 b;
+  gboolean audio_jitter = audio_nondiscont || audio_drift || early_video;
+
+  timestamp = GST_BUFFER_TIMESTAMP (buffer);
+  if (!audio_jitter)
+    fail_unless_equals_int64 (timestamp,
+        (audio_buffer_count % n_abuffers) * 1 * GST_SECOND);
+  timestamp =
+      gst_segment_to_stream_time (&current_audio_segment, GST_FORMAT_TIME,
+      timestamp);
+  if (!audio_jitter)
+    fail_unless_equals_int64 (timestamp,
+        (audio_buffer_count % n_abuffers) * 1 * GST_SECOND);
+
+  timestamp = GST_BUFFER_TIMESTAMP (buffer);
+  timestamp =
+      gst_segment_to_running_time (&current_audio_segment, GST_FORMAT_TIME,
+      timestamp);
+  if (!audio_jitter)
+    fail_unless_equals_int64 (timestamp, audio_buffer_count * 1 * GST_SECOND);
+
+  gst_buffer_extract (buffer, 0, &b, 1);
+
+  if (per_channel) {
+    fail_unless_equals_int (b, fill_value_per_channel[0]);
+  } else {
+    fail_unless_equals_int (b, fill_value);
+  }
+
+  audio_buffer_count++;
+  gst_buffer_unref (buffer);
+  return GST_FLOW_OK;
+}
+
+static gboolean
+output_aevent (GstPad * pad, GstObject * parent, GstEvent * event)
+{
+  switch (GST_EVENT_TYPE (event)) {
+    case GST_EVENT_FLUSH_STOP:
+      gst_segment_init (&current_audio_segment, GST_FORMAT_UNDEFINED);
+      break;
+    case GST_EVENT_SEGMENT:
+      gst_event_copy_segment (event, &current_audio_segment);
+      break;
+    case GST_EVENT_EOS:
+      got_eos = TRUE;
+      break;
+    default:
+      break;
+  }
+
+  gst_event_unref (event);
+  return TRUE;
+}
+
+static GstFlowReturn
+output_vchain (GstPad * pad, GstObject * parent, GstBuffer * buffer)
+{
+  GstClockTime timestamp;
+  guint8 b;
+  gboolean jitter = video_gaps || video_overlaps || late_video;
+
+  timestamp = GST_BUFFER_TIMESTAMP (buffer);
+  if (!jitter)
+    fail_unless_equals_int64 (timestamp,
+        (video_buffer_count % n_vbuffers) * 25 * GST_MSECOND);
+  timestamp =
+      gst_segment_to_stream_time (&current_video_segment, GST_FORMAT_TIME,
+      timestamp);
+  if (!jitter)
+    fail_unless_equals_int64 (timestamp,
+        (video_buffer_count % n_vbuffers) * 25 * GST_MSECOND);
+
+  timestamp = GST_BUFFER_TIMESTAMP (buffer);
+  timestamp =
+      gst_segment_to_running_time (&current_video_segment, GST_FORMAT_TIME,
+      timestamp);
+  if (!jitter)
+    fail_unless_equals_int64 (timestamp, video_buffer_count * 25 * GST_MSECOND);
+
+  gst_buffer_extract (buffer, 0, &b, 1);
+  if (!jitter)
+    fail_unless_equals_int (b, video_buffer_count % n_vbuffers);
+
+  video_buffer_count++;
+  gst_buffer_unref (buffer);
+  return GST_FLOW_OK;
+}
+
+static gboolean
+output_vevent (GstPad * pad, GstObject * parent, GstEvent * event)
+{
+  switch (GST_EVENT_TYPE (event)) {
+    case GST_EVENT_FLUSH_STOP:
+      gst_segment_init (&current_video_segment, GST_FORMAT_UNDEFINED);
+      break;
+    case GST_EVENT_SEGMENT:
+      gst_event_copy_segment (event, &current_video_segment);
+      break;
+    case GST_EVENT_EOS:
+      got_eos = TRUE;
+      break;
+    default:
+      break;
+  }
+
+  gst_event_unref (event);
+  return TRUE;
+}
+
+static gpointer
+push_abuffers (gpointer data)
+{
+  GstSegment segment;
+  GstPad *pad = data;
+  gint i, j, k;
+  GstClockTime timestamp = 0;
+  GstAudioInfo info;
+  GstCaps *caps;
+  guint buf_size = 1000;
+
+  if (audiodelay)
+    g_usleep (2000);
+
+  if (early_video)
+    timestamp = 50 * GST_MSECOND;
+
+  gst_pad_send_event (pad, gst_event_new_stream_start ("test"));
+
+  gst_audio_info_set_format (&info, GST_AUDIO_FORMAT_S8, buf_size, channels,
+      NULL);
+  caps = gst_audio_info_to_caps (&info);
+  gst_pad_send_event (pad, gst_event_new_caps (caps));
+  gst_caps_unref (caps);
+
+  gst_segment_init (&segment, GST_FORMAT_TIME);
+  gst_pad_send_event (pad, gst_event_new_segment (&segment));
+
+  for (i = 0; i < n_abuffers; i++) {
+    GstBuffer *buf = gst_buffer_new_and_alloc (channels * buf_size);
+
+    if (per_channel) {
+      GstMapInfo map;
+      guint8 *in_data;
+
+      gst_buffer_map (buf, &map, GST_MAP_WRITE);
+      in_data = map.data;
+
+      for (j = 0; j < buf_size; j++) {
+        for (k = 0; k < channels; k++) {
+          in_data[j * channels + k] = fill_value_per_channel[k];
+        }
+      }
+
+      gst_buffer_unmap (buf, &map);
+    } else {
+      gst_buffer_memset (buf, 0, fill_value, channels * buf_size);
+    }
+
+    GST_BUFFER_TIMESTAMP (buf) = timestamp;
+    timestamp += 1 * GST_SECOND;
+    if (audio_drift)
+      timestamp += 50 * GST_MSECOND;
+    else if (i == 4 && audio_nondiscont)
+      timestamp += 30 * GST_MSECOND;
+    GST_BUFFER_DURATION (buf) = timestamp - GST_BUFFER_TIMESTAMP (buf);
+
+    fail_unless (gst_pad_chain (pad, buf) == GST_FLOW_OK);
+  }
+  gst_pad_send_event (pad, gst_event_new_eos ());
+
+  return NULL;
+}
+
+static gpointer
+push_vbuffers (gpointer data)
+{
+  GstSegment segment;
+  GstPad *pad = data;
+  gint i;
+  GstClockTime timestamp = 0;
+
+  if (videodelay)
+    g_usleep (2000);
+
+  if (late_video)
+    timestamp = 50 * GST_MSECOND;
+
+  gst_pad_send_event (pad, gst_event_new_stream_start ("test"));
+  gst_segment_init (&segment, GST_FORMAT_TIME);
+  gst_pad_send_event (pad, gst_event_new_segment (&segment));
+
+  for (i = 0; i < n_vbuffers; i++) {
+    GstBuffer *buf = gst_buffer_new_and_alloc (1000);
+    GstClockTime *rtime = g_new (GstClockTime, 1);
+
+    gst_buffer_memset (buf, 0, i, 1);
+
+    GST_BUFFER_TIMESTAMP (buf) = timestamp;
+    timestamp += 25 * GST_MSECOND;
+    GST_BUFFER_DURATION (buf) = timestamp - GST_BUFFER_TIMESTAMP (buf);
+    *rtime = gst_segment_to_running_time (&segment, GST_FORMAT_TIME, timestamp);
+    g_queue_push_tail (&v_timestamp_q, rtime);
+
+    if (i == 4) {
+      if (video_gaps)
+        timestamp += 10 * GST_MSECOND;
+      else if (video_overlaps)
+        timestamp -= 10 * GST_MSECOND;
+    }
+
+    fail_unless (gst_pad_chain (pad, buf) == GST_FLOW_OK);
+  }
+  gst_pad_send_event (pad, gst_event_new_eos ());
+
+  return NULL;
+}
+
+static GstBusSyncReply
+on_message (GstBus * bus, GstMessage * message, gpointer user_data)
+{
+  const GstStructure *s = gst_message_get_structure (message);
+  const gchar *name = gst_structure_get_name (s);
+  GValueArray *rms_arr;
+  const GValue *array_val;
+  const GValue *value;
+  gdouble rms;
+  gint channels2;
+  guint i;
+  GstClockTime *rtime = g_new (GstClockTime, 1);
+
+  if (message->type != GST_MESSAGE_ELEMENT
+      || strcmp (name, "videoframe-audiolevel") != 0)
+    goto done;
+
+  num_msgs++;
+  if (!gst_structure_get_clock_time (s, "running-time", rtime))
+    g_warning ("Could not parse running time");
+  else
+    g_queue_push_tail (&msg_timestamp_q, rtime);
+
+  /* the values are packed into GValueArrays with the value per channel */
+  array_val = gst_structure_get_value (s, "rms");
+  rms_arr = (GValueArray *) g_value_get_boxed (array_val);
+  channels2 = rms_arr->n_values;
+  fail_unless_equals_int (channels2, channels);
+
+  for (i = 0; i < channels; ++i) {
+    value = g_value_array_get_nth (rms_arr, i);
+    rms = g_value_get_double (value);
+    if (per_channel) {
+      fail_unless_equals_float (rms, expected_rms_per_channel[i]);
+    } else if (early_video && *rtime <= 50 * GST_MSECOND) {
+      fail_unless_equals_float (rms, 0);
+    } else {
+      fail_unless_equals_float (rms, expected_rms);
+    }
+  }
+
+done:
+  return GST_BUS_PASS;
+}
+
+static void
+test_videoframe_audiolevel_generic (void)
+{
+  GstElement *alevel;
+  GstPad *asink, *vsink, *asrc, *vsrc, *aoutput_sink, *voutput_sink;
+  GThread *athread, *vthread;
+  GstBus *bus;
+  guint i;
+
+  got_eos = FALSE;
+  audio_buffer_count = 0;
+  video_buffer_count = 0;
+  num_msgs = 0;
+
+  g_queue_init (&v_timestamp_q);
+  g_queue_init (&msg_timestamp_q);
+
+  alevel = gst_element_factory_make ("videoframe-audiolevel", NULL);
+  fail_unless (alevel != NULL);
+
+  bus = gst_bus_new ();
+  gst_element_set_bus (alevel, bus);
+  gst_bus_set_sync_handler (bus, on_message, NULL, NULL);
+
+  asink = gst_element_get_static_pad (alevel, "asink");
+  fail_unless (asink != NULL);
+
+  vsink = gst_element_get_static_pad (alevel, "vsink");
+  fail_unless (vsink != NULL);
+
+  asrc = gst_element_get_static_pad (alevel, "asrc");
+  aoutput_sink = gst_pad_new ("sink", GST_PAD_SINK);
+  fail_unless (aoutput_sink != NULL);
+  fail_unless (gst_pad_link (asrc, aoutput_sink) == GST_PAD_LINK_OK);
+
+  vsrc = gst_element_get_static_pad (alevel, "vsrc");
+  voutput_sink = gst_pad_new ("sink", GST_PAD_SINK);
+  fail_unless (voutput_sink != NULL);
+  fail_unless (gst_pad_link (vsrc, voutput_sink) == GST_PAD_LINK_OK);
+
+  gst_pad_set_chain_function (aoutput_sink, output_achain);
+  gst_pad_set_event_function (aoutput_sink, output_aevent);
+
+  gst_pad_set_chain_function (voutput_sink, output_vchain);
+  gst_pad_set_event_function (voutput_sink, output_vevent);
+
+  gst_pad_set_active (aoutput_sink, TRUE);
+  gst_pad_set_active (voutput_sink, TRUE);
+  fail_unless (gst_element_set_state (alevel,
+          GST_STATE_PLAYING) == GST_STATE_CHANGE_SUCCESS);
+
+  athread = g_thread_new ("athread", (GThreadFunc) push_abuffers, asink);
+  vthread = g_thread_new ("vthread", (GThreadFunc) push_vbuffers, vsink);
+
+  g_thread_join (vthread);
+  g_thread_join (athread);
+
+  fail_unless (got_eos);
+  fail_unless_equals_int (audio_buffer_count, n_abuffers);
+  fail_unless_equals_int (video_buffer_count, n_vbuffers);
+  if (!long_video)
+    fail_unless_equals_int (num_msgs, n_vbuffers);
+
+  fail_unless_equals_int (g_queue_get_length (&v_timestamp_q), n_vbuffers);
+  /* num_msgs is equal to n_vbuffers except in the case of long_video */
+  fail_unless_equals_int (g_queue_get_length (&msg_timestamp_q), num_msgs);
+
+  for (i = 0; i < g_queue_get_length (&msg_timestamp_q); i++) {
+    GstClockTime *vt = g_queue_pop_head (&v_timestamp_q);
+    GstClockTime *mt = g_queue_pop_head (&msg_timestamp_q);
+    fail_unless (vt != NULL);
+    fail_unless (mt != NULL);
+    if (!video_gaps && !video_overlaps && !early_video)
+      fail_unless_equals_uint64 (*vt, *mt);
+    g_free (vt);
+    g_free (mt);
+  }
+
+  /* teardown */
+  gst_element_set_state (alevel, GST_STATE_NULL);
+  gst_bus_set_flushing (bus, TRUE);
+  gst_object_unref (bus);
+  g_queue_foreach (&v_timestamp_q, (GFunc) g_free, NULL);
+  g_queue_foreach (&msg_timestamp_q, (GFunc) g_free, NULL);
+  g_queue_clear (&v_timestamp_q);
+  g_queue_clear (&msg_timestamp_q);
+  gst_pad_unlink (asrc, aoutput_sink);
+  gst_object_unref (asrc);
+  gst_pad_unlink (vsrc, voutput_sink);
+  gst_object_unref (vsrc);
+  gst_object_unref (asink);
+  gst_object_unref (vsink);
+  gst_pad_set_active (aoutput_sink, FALSE);
+  gst_object_unref (aoutput_sink);
+  gst_pad_set_active (voutput_sink, FALSE);
+  gst_object_unref (voutput_sink);
+  gst_object_unref (alevel);
+}
+
+GST_START_TEST (test_videoframe_audiolevel_16chan_1)
+{
+  set_default_params ();
+  channels = 16;
+  test_videoframe_audiolevel_generic ();
+}
+
+GST_END_TEST;
+
+GST_START_TEST (test_videoframe_audiolevel_8chan_1)
+{
+  set_default_params ();
+  channels = 8;
+  test_videoframe_audiolevel_generic ();
+}
+
+GST_END_TEST;
+
+GST_START_TEST (test_videoframe_audiolevel_2chan_1)
+{
+  set_default_params ();
+  test_videoframe_audiolevel_generic ();
+}
+
+GST_END_TEST;
+
+GST_START_TEST (test_videoframe_audiolevel_1chan_1)
+{
+  set_default_params ();
+  channels = 1;
+  test_videoframe_audiolevel_generic ();
+}
+
+GST_END_TEST;
+
+GST_START_TEST (test_videoframe_audiolevel_16chan_0)
+{
+  set_default_params ();
+  channels = 16;
+  expected_rms = 0;
+  fill_value = 0;
+  test_videoframe_audiolevel_generic ();
+}
+
+GST_END_TEST;
+
+GST_START_TEST (test_videoframe_audiolevel_8chan_0)
+{
+  set_default_params ();
+  channels = 8;
+  expected_rms = 0;
+  fill_value = 0;
+  test_videoframe_audiolevel_generic ();
+}
+
+GST_END_TEST;
+
+GST_START_TEST (test_videoframe_audiolevel_2chan_0)
+{
+  set_default_params ();
+  channels = 2;
+  expected_rms = 0;
+  fill_value = 0;
+  test_videoframe_audiolevel_generic ();
+}
+
+GST_END_TEST;
+
+GST_START_TEST (test_videoframe_audiolevel_1chan_0)
+{
+  set_default_params ();
+  channels = 1;
+  expected_rms = 0;
+  fill_value = 0;
+  test_videoframe_audiolevel_generic ();
+}
+
+GST_END_TEST;
+
+GST_START_TEST (test_videoframe_audiolevel_adelay)
+{
+  set_default_params ();
+  audiodelay = TRUE;
+  test_videoframe_audiolevel_generic ();
+}
+
+GST_END_TEST;
+
+GST_START_TEST (test_videoframe_audiolevel_vdelay)
+{
+  set_default_params ();
+  videodelay = TRUE;
+  test_videoframe_audiolevel_generic ();
+}
+
+GST_END_TEST;
+
+GST_START_TEST (test_videoframe_audiolevel_per_channel)
+{
+  set_default_params ();
+  per_channel = TRUE;
+  test_videoframe_audiolevel_generic ();
+}
+
+GST_END_TEST;
+
+GST_START_TEST (test_videoframe_audiolevel_long_video)
+{
+  set_default_params ();
+  n_abuffers = 6;
+  n_vbuffers = 255;
+  long_video = TRUE;
+  test_videoframe_audiolevel_generic ();
+}
+
+GST_END_TEST;
+
+GST_START_TEST (test_videoframe_audiolevel_video_gaps)
+{
+  set_default_params ();
+  video_gaps = TRUE;
+  test_videoframe_audiolevel_generic ();
+}
+
+GST_END_TEST;
+
+GST_START_TEST (test_videoframe_audiolevel_video_overlaps)
+{
+  set_default_params ();
+  video_overlaps = TRUE;
+  test_videoframe_audiolevel_generic ();
+}
+
+GST_END_TEST;
+
+GST_START_TEST (test_videoframe_audiolevel_audio_nondiscont)
+{
+  set_default_params ();
+  audio_nondiscont = TRUE;
+  test_videoframe_audiolevel_generic ();
+}
+
+GST_END_TEST;
+
+GST_START_TEST (test_videoframe_audiolevel_audio_drift)
+{
+  set_default_params ();
+  audio_drift = TRUE;
+  test_videoframe_audiolevel_generic ();
+}
+
+GST_END_TEST;
+GST_START_TEST (test_videoframe_audiolevel_early_video)
+{
+  set_default_params ();
+  early_video = TRUE;
+  test_videoframe_audiolevel_generic ();
+}
+
+GST_END_TEST;
+
+GST_START_TEST (test_videoframe_audiolevel_late_video)
+{
+  set_default_params ();
+  late_video = TRUE;
+  test_videoframe_audiolevel_generic ();
+}
+
+GST_END_TEST;
+
+
+static Suite *
+videoframe_audiolevel_suite (void)
+{
+  Suite *s = suite_create ("videoframe-audiolevel");
+  TCase *tc_chain;
+
+  tc_chain = tcase_create ("videoframe-audiolevel");
+  tcase_add_test (tc_chain, test_videoframe_audiolevel_16chan_1);
+  tcase_add_test (tc_chain, test_videoframe_audiolevel_8chan_1);
+  tcase_add_test (tc_chain, test_videoframe_audiolevel_2chan_1);
+  tcase_add_test (tc_chain, test_videoframe_audiolevel_1chan_1);
+  tcase_add_test (tc_chain, test_videoframe_audiolevel_16chan_0);
+  tcase_add_test (tc_chain, test_videoframe_audiolevel_8chan_0);
+  tcase_add_test (tc_chain, test_videoframe_audiolevel_2chan_0);
+  tcase_add_test (tc_chain, test_videoframe_audiolevel_1chan_0);
+  tcase_add_test (tc_chain, test_videoframe_audiolevel_adelay);
+  tcase_add_test (tc_chain, test_videoframe_audiolevel_vdelay);
+  tcase_add_test (tc_chain, test_videoframe_audiolevel_per_channel);
+  tcase_add_test (tc_chain, test_videoframe_audiolevel_long_video);
+  tcase_add_test (tc_chain, test_videoframe_audiolevel_video_gaps);
+  tcase_add_test (tc_chain, test_videoframe_audiolevel_video_overlaps);
+  tcase_add_test (tc_chain, test_videoframe_audiolevel_audio_nondiscont);
+  tcase_add_test (tc_chain, test_videoframe_audiolevel_audio_drift);
+  tcase_add_test (tc_chain, test_videoframe_audiolevel_early_video);
+  tcase_add_test (tc_chain, test_videoframe_audiolevel_late_video);
+  suite_add_tcase (s, tc_chain);
+
+  return s;
+}
+
+GST_CHECK_MAIN (videoframe_audiolevel);
diff --git a/tests/check/libs/aggregator.c b/tests/check/libs/aggregator.c
index b21c7cd..16355b9 100644
--- a/tests/check/libs/aggregator.c
+++ b/tests/check/libs/aggregator.c
@@ -344,7 +344,7 @@
       g_atomic_int_inc (&test->flush_stop_events);
   }
 
-  return GST_PAD_PROBE_DROP;
+  return GST_PAD_PROBE_HANDLED;
 }
 
 /*
@@ -723,6 +723,7 @@
 
   gst_segment_init (&GST_AGGREGATOR (test.aggregator)->segment,
       GST_FORMAT_TIME);
+
   /* now do a successful flushing seek */
   event = gst_event_new_seek (1, GST_FORMAT_TIME, GST_SEEK_FLAG_FLUSH,
       GST_SEEK_TYPE_SET, 0, GST_SEEK_TYPE_SET, 10 * GST_SECOND);
@@ -765,7 +766,7 @@
   gst_pad_push_event (data2.srcpad, gst_event_new_flush_stop (TRUE));
 
   /* and the last FLUSH_STOP is forwarded downstream */
-  fail_unless_equals_int (test.flush_start_events, 1);
+  fail_unless_equals_int (test.flush_stop_events, 1);
 
   /*  Check collected */
   gst_pad_add_probe (test.srcpad, GST_PAD_PROBE_TYPE_BUFFER,
diff --git a/tests/check/libs/gstglcolorconvert.c b/tests/check/libs/gstglcolorconvert.c
index 2a01263..f2be514 100644
--- a/tests/check/libs/gstglcolorconvert.c
+++ b/tests/check/libs/gstglcolorconvert.c
@@ -116,17 +116,20 @@
 static void
 check_conversion (TestFrame * frames, guint size)
 {
+  GstGLBaseMemoryAllocator *base_mem_alloc;
   gint i, j, k, l;
   gint ref_count = 0;
 
+  base_mem_alloc =
+      GST_GL_BASE_MEMORY_ALLOCATOR (gst_allocator_find
+      (GST_GL_MEMORY_ALLOCATOR_NAME));
+
   for (i = 0; i < size; i++) {
     GstBuffer *inbuf;
     GstVideoInfo in_info;
     gint in_width = frames[i].width;
     gint in_height = frames[i].height;
     GstVideoFormat in_v_format = frames[i].v_format;
-    gchar *in_data[GST_VIDEO_MAX_PLANES] = { 0 };
-    GstGLMemory *in_mem[GST_VIDEO_MAX_PLANES] = { 0 };
     GstVideoFrame in_frame;
     GstCaps *in_caps;
 
@@ -135,18 +138,22 @@
     gst_caps_set_features (in_caps, 0,
         gst_caps_features_from_string (GST_CAPS_FEATURE_MEMORY_GL_MEMORY));
 
-    for (j = 0; j < GST_VIDEO_INFO_N_PLANES (&in_info); j++) {
-      in_data[j] = frames[i].data[j];
-    }
-
     /* create GL buffer */
-    ref_count += GST_VIDEO_INFO_N_PLANES (&in_info);
     inbuf = gst_buffer_new ();
-    fail_unless (gst_gl_memory_setup_wrapped (context, &in_info, NULL,
-            (gpointer *) in_data, in_mem, &ref_count, _frame_unref));
-
     for (j = 0; j < GST_VIDEO_INFO_N_PLANES (&in_info); j++) {
-      gst_buffer_append_memory (inbuf, (GstMemory *) in_mem[j]);
+      GstGLVideoAllocationParams *params;
+      GstGLBaseMemory *mem;
+
+      ref_count++;
+      params = gst_gl_video_allocation_params_new_wrapped_data (context, NULL,
+          &in_info, j, NULL, GST_GL_TEXTURE_TARGET_2D, frames[i].data[j],
+          &ref_count, _frame_unref);
+
+      mem = gst_gl_base_memory_alloc (base_mem_alloc,
+          (GstGLAllocationParams *) params);
+      gst_buffer_append_memory (inbuf, GST_MEMORY_CAST (mem));
+
+      gst_gl_allocation_params_free ((GstGLAllocationParams *) params);
     }
 
     fail_unless (gst_video_frame_map (&in_frame, &in_info, inbuf,
@@ -155,8 +162,8 @@
     /* sanity check that the correct values were wrapped */
     for (j = 0; j < GST_VIDEO_INFO_N_PLANES (&in_info); j++) {
       for (k = 0; k < _video_info_plane_size (&in_info, j); k++) {
-        if (in_data[j][k] != IGNORE_MAGIC)
-          fail_unless (((gchar *) in_frame.data[j])[k] == in_data[j][k]);
+        if (frames[i].data[j][k] != IGNORE_MAGIC)
+          fail_unless (((gchar *) in_frame.data[j])[k] == frames[i].data[j][k]);
       }
     }
 
@@ -214,6 +221,8 @@
 
     fail_unless_equals_int (ref_count, 0);
   }
+
+  gst_object_unref (base_mem_alloc);
 }
 
 GST_START_TEST (test_reorder_buffer)
@@ -232,7 +241,7 @@
 static Suite *
 gst_gl_color_convert_suite (void)
 {
-  Suite *s = suite_create ("GstGLUpload");
+  Suite *s = suite_create ("GstGLColorConvert");
   TCase *tc_chain = tcase_create ("upload");
 
   suite_add_tcase (s, tc_chain);
diff --git a/tests/check/libs/gstglcontext.c b/tests/check/libs/gstglcontext.c
index 8bb5f99..f2f27f8 100644
--- a/tests/check/libs/gstglcontext.c
+++ b/tests/check/libs/gstglcontext.c
@@ -28,29 +28,6 @@
 
 #include <stdio.h>
 
-#if GST_GL_HAVE_GLES2
-/* *INDENT-OFF* */
-static const gchar *vertex_shader_str_gles2 =
-      "attribute vec4 a_position;   \n"
-      "attribute vec2 a_texCoord;   \n"
-      "varying vec2 v_texCoord;     \n"
-      "void main()                  \n"
-      "{                            \n"
-      "   gl_Position = a_position; \n"
-      "   v_texCoord = a_texCoord;  \n"
-      "}                            \n";
-
-static const gchar *fragment_shader_str_gles2 =
-      "precision mediump float;                            \n"
-      "varying vec2 v_texCoord;                            \n"
-      "uniform sampler2D s_texture;                        \n"
-      "void main()                                         \n"
-      "{                                                   \n"
-      "  gl_FragColor = texture2D( s_texture, v_texCoord );\n"
-      "}                                                   \n";
-/* *INDENT-ON* */
-#endif
-
 static GstGLDisplay *display;
 
 static void
@@ -65,19 +42,27 @@
   gst_object_unref (display);
 }
 
-static GLuint fbo_id, rbo, tex;
+static GLuint vbo, vbo_indices, vao, fbo_id, rbo, tex;
 static GstGLFramebuffer *fbo;
-#if GST_GL_HAVE_GLES2
-static GError *error;
 static GstGLShader *shader;
 static GLint shader_attr_position_loc;
 static GLint shader_attr_texture_loc;
-#endif
+
+static const GLfloat vertices[] = {
+  /* x, y, z, s, t */
+  1.0f, 1.0f, 0.0f, 1.0f, 0.0f,
+  -1.0f, 1.0f, 0.0f, 0.0f, 0.0f,
+  -1.0f, -1.0f, 0.0f, 0.0f, 1.0f,
+  1.0f, -1.0f, 0.0f, 1.0f, 1.0f
+};
+
+static const GLushort indices[] = { 0, 1, 2, 0, 2, 3 };
 
 static void
 init (gpointer data)
 {
   GstGLContext *context = data;
+  GError *error = NULL;
 
   /* has to be called in the thread that is going to use the framebuffer */
   fbo = gst_gl_framebuffer_new (context);
@@ -88,25 +73,14 @@
   gst_gl_context_gen_texture (context, &tex, GST_VIDEO_FORMAT_RGBA, 320, 240);
   fail_if (tex == 0, "failed to create texture");
 
-#if GST_GL_HAVE_GLES2
-  if (gst_gl_context_get_gl_api (context) & GST_GL_API_GLES2) {
-    shader = gst_gl_shader_new (context);
-    fail_if (shader == NULL, "failed to create shader object");
+  shader = gst_gl_shader_new_default (context, &error);
+  fail_if (shader == NULL, "failed to create shader object: %s",
+      error->message);
 
-    gst_gl_shader_set_vertex_source (shader, vertex_shader_str_gles2);
-    gst_gl_shader_set_fragment_source (shader, fragment_shader_str_gles2);
-
-    error = NULL;
-    gst_gl_shader_compile (shader, &error);
-    fail_if (error != NULL, "Error compiling shader %s\n",
-        error ? error->message : "Unknown Error");
-
-    shader_attr_position_loc =
-        gst_gl_shader_get_attribute_location (shader, "a_position");
-    shader_attr_texture_loc =
-        gst_gl_shader_get_attribute_location (shader, "a_texCoord");
-  }
-#endif
+  shader_attr_position_loc =
+      gst_gl_shader_get_attribute_location (shader, "a_position");
+  shader_attr_texture_loc =
+      gst_gl_shader_get_attribute_location (shader, "a_texcoord");
 }
 
 static void
@@ -115,11 +89,10 @@
   GstGLContext *context = data;
   GstGLFuncs *gl = context->gl_vtable;
   gl->DeleteTextures (1, &tex);
+  if (vao)
+    gl->DeleteVertexArrays (1, &vao);
   gst_object_unref (fbo);
-#if GST_GL_HAVE_GLES2
-  if (gst_gl_context_get_gl_api (context) & GST_GL_API_GLES2)
-    gst_object_unref (shader);
-#endif
+  gst_object_unref (shader);
 }
 
 static void
@@ -145,86 +118,112 @@
 }
 
 static void
+_bind_buffer (GstGLContext * context)
+{
+  const GstGLFuncs *gl = context->gl_vtable;
+
+  gl->BindBuffer (GL_ELEMENT_ARRAY_BUFFER, vbo_indices);
+  gl->BindBuffer (GL_ARRAY_BUFFER, vbo);
+
+  /* Load the vertex position */
+  gl->VertexAttribPointer (shader_attr_position_loc, 3, GL_FLOAT, GL_FALSE,
+      5 * sizeof (GLfloat), (void *) 0);
+
+  /* Load the texture coordinate */
+  gl->VertexAttribPointer (shader_attr_texture_loc, 2, GL_FLOAT, GL_FALSE,
+      5 * sizeof (GLfloat), (void *) (3 * sizeof (GLfloat)));
+
+  gl->EnableVertexAttribArray (shader_attr_position_loc);
+  gl->EnableVertexAttribArray (shader_attr_texture_loc);
+}
+
+static void
+_unbind_buffer (GstGLContext * context)
+{
+  const GstGLFuncs *gl = context->gl_vtable;
+
+  gl->BindBuffer (GL_ELEMENT_ARRAY_BUFFER, 0);
+  gl->BindBuffer (GL_ARRAY_BUFFER, 0);
+
+  gl->DisableVertexAttribArray (shader_attr_position_loc);
+  gl->DisableVertexAttribArray (shader_attr_texture_loc);
+}
+
+static void
+init_blit (gpointer data)
+{
+  GstGLContext *context = data;
+  const GstGLFuncs *gl = context->gl_vtable;
+
+  if (!vbo) {
+    if (gl->GenVertexArrays) {
+      gl->GenVertexArrays (1, &vao);
+      gl->BindVertexArray (vao);
+    }
+
+    gl->GenBuffers (1, &vbo);
+    gl->BindBuffer (GL_ARRAY_BUFFER, vbo);
+    gl->BufferData (GL_ARRAY_BUFFER, 4 * 5 * sizeof (GLfloat), vertices,
+        GL_STATIC_DRAW);
+
+    gl->GenBuffers (1, &vbo_indices);
+    gl->BindBuffer (GL_ELEMENT_ARRAY_BUFFER, vbo_indices);
+    gl->BufferData (GL_ELEMENT_ARRAY_BUFFER, sizeof (indices), indices,
+        GL_STATIC_DRAW);
+
+    if (gl->GenVertexArrays) {
+      _bind_buffer (context);
+      gl->BindVertexArray (0);
+    }
+
+    gl->BindBuffer (GL_ARRAY_BUFFER, 0);
+    gl->BindBuffer (GL_ELEMENT_ARRAY_BUFFER, 0);
+  }
+}
+
+static void
+deinit_blit (gpointer data)
+{
+  GstGLContext *context = data;
+  const GstGLFuncs *gl = context->gl_vtable;
+
+  if (vbo)
+    gl->DeleteBuffers (1, &vbo);
+  vbo = 0;
+  if (vbo_indices)
+    gl->DeleteBuffers (1, &vbo_indices);
+  vbo_indices = 0;
+  if (vao)
+    gl->DeleteVertexArrays (1, &vao);
+  vao = 0;
+}
+
+static void
 draw_render (gpointer data)
 {
   GstGLContext *context = data;
   GstGLContextClass *context_class = GST_GL_CONTEXT_GET_CLASS (context);
   const GstGLFuncs *gl = context->gl_vtable;
 
-  /* redraw the texture into the system provided framebuffer */
+  gl->Clear (GL_COLOR_BUFFER_BIT);
 
-#if GST_GL_HAVE_OPENGL
-  if (gst_gl_context_get_gl_api (context) & GST_GL_API_OPENGL) {
-    GLfloat verts[8] = { 1.0f, 1.0f,
-      -1.0f, 1.0f,
-      -1.0f, -1.0f,
-      1.0f, -1.0f
-    };
-    GLfloat texcoords[8] = { 1.0f, 0.0f,
-      0.0f, 0.0f,
-      0.0f, 1.0f,
-      1.0f, 1.0f
-    };
+  gst_gl_shader_use (shader);
 
-    gl->Viewport (0, 0, 320, 240);
+  gl->ActiveTexture (GL_TEXTURE0);
+  gl->BindTexture (GL_TEXTURE_2D, tex);
+  gst_gl_shader_set_uniform_1i (shader, "s_texture", 0);
 
-    gl->Clear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
+  if (gl->GenVertexArrays)
+    gl->BindVertexArray (vao);
+  else
+    _bind_buffer (context);
 
-    gl->MatrixMode (GL_PROJECTION);
-    gl->LoadIdentity ();
+  gl->DrawElements (GL_TRIANGLES, 6, GL_UNSIGNED_SHORT, 0);
 
-    gl->ActiveTexture (GL_TEXTURE0);
-    gl->BindTexture (GL_TEXTURE_2D, tex);
-
-    gl->EnableClientState (GL_VERTEX_ARRAY);
-    gl->VertexPointer (2, GL_FLOAT, 0, &verts);
-
-    gl->ClientActiveTexture (GL_TEXTURE0);
-    gl->EnableClientState (GL_TEXTURE_COORD_ARRAY);
-    gl->TexCoordPointer (2, GL_FLOAT, 0, &texcoords);
-
-    gl->DrawArrays (GL_TRIANGLE_FAN, 0, 4);
-
-    gl->DisableClientState (GL_VERTEX_ARRAY);
-    gl->DisableClientState (GL_TEXTURE_COORD_ARRAY);
-  }
-#endif
-#if GST_GL_HAVE_GLES2
-  if (gst_gl_context_get_gl_api (context) & GST_GL_API_GLES2) {
-    const GLfloat vVertices[] = { 1.0f, 1.0f, 0.0f,
-      1.0f, 0.0f,
-      -1.0f, 1.0f, 0.0f,
-      0.0f, 0.0f,
-      -1.0f, -1.0f, 0.0f,
-      0.0f, 1.0f,
-      1.0f, -1.0f, 0.0f,
-      1.0f, 1.0f
-    };
-
-    GLushort indices[] = { 0, 1, 2, 0, 2, 3 };
-
-    gl->Clear (GL_COLOR_BUFFER_BIT);
-
-    gst_gl_shader_use (shader);
-
-    /* Load the vertex position */
-    gl->VertexAttribPointer (shader_attr_position_loc, 3,
-        GL_FLOAT, GL_FALSE, 5 * sizeof (GLfloat), vVertices);
-
-    /* Load the texture coordinate */
-    gl->VertexAttribPointer (shader_attr_texture_loc, 2,
-        GL_FLOAT, GL_FALSE, 5 * sizeof (GLfloat), &vVertices[3]);
-
-    gl->EnableVertexAttribArray (shader_attr_position_loc);
-    gl->EnableVertexAttribArray (shader_attr_texture_loc);
-
-    gl->ActiveTexture (GL_TEXTURE0);
-    gl->BindTexture (GL_TEXTURE_2D, tex);
-    gst_gl_shader_set_uniform_1i (shader, "s_texture", 0);
-
-    gl->DrawElements (GL_TRIANGLES, 6, GL_UNSIGNED_SHORT, indices);
-  }
-#endif
+  if (gl->GenVertexArrays)
+    gl->BindVertexArray (0);
+  else
+    _unbind_buffer (context);
 
   context_class->swap_buffers (context);
 }
@@ -263,6 +262,7 @@
   gst_gl_window_draw (window);
 
   gst_gl_window_send_message (other_window, GST_GL_WINDOW_CB (init), context);
+  gst_gl_window_send_message (window, GST_GL_WINDOW_CB (init_blit), context);
 
   while (i < 10) {
     gst_gl_window_send_message (other_window, GST_GL_WINDOW_CB (draw_tex),
@@ -273,6 +273,7 @@
   }
 
   gst_gl_window_send_message (other_window, GST_GL_WINDOW_CB (deinit), context);
+  gst_gl_window_send_message (window, GST_GL_WINDOW_CB (deinit_blit), context);
 
   gst_object_unref (window);
   gst_object_unref (other_window);
@@ -314,6 +315,7 @@
   fail_if (!ret, "error received %s\n",
       error ? error->message : "Unknown error");
   fail_if (wrapped_context->gl_vtable->TexImage2D == NULL);
+  gst_gl_context_activate (wrapped_context, FALSE);
 }
 
 GST_START_TEST (test_wrapped_context)
@@ -365,6 +367,7 @@
   gst_gl_window_draw (window);
 
   gst_gl_window_send_message (other_window, GST_GL_WINDOW_CB (init), context);
+  gst_gl_window_send_message (window, GST_GL_WINDOW_CB (init_blit), context);
 
   while (i < 10) {
     gst_gl_window_send_message (other_window, GST_GL_WINDOW_CB (draw_tex),
@@ -378,6 +381,7 @@
       wrapped_context);
 
   gst_gl_window_send_message (other_window, GST_GL_WINDOW_CB (deinit), context);
+  gst_gl_window_send_message (window, GST_GL_WINDOW_CB (deinit_blit), context);
 
   gst_object_unref (other_context);
   gst_object_unref (other_window);
@@ -485,6 +489,125 @@
 
 GST_END_TEST;
 
+GST_START_TEST (test_is_shared)
+{
+  GstGLContext *c1, *c2;
+  GError *error = NULL;
+
+  c1 = gst_gl_context_new (display);
+  gst_gl_context_create (c1, NULL, &error);
+  fail_if (error != NULL, "Error creating context %s\n",
+      error ? error->message : "Unknown Error");
+
+  c2 = gst_gl_context_new (display);
+  gst_gl_context_create (c2, c1, &error);
+  fail_if (error != NULL, "Error creating context %s\n",
+      error ? error->message : "Unknown Error");
+
+  fail_unless (gst_gl_context_is_shared (c1));
+  fail_unless (gst_gl_context_is_shared (c2));
+
+  gst_object_unref (c2);
+  c2 = NULL;
+
+  fail_unless (!gst_gl_context_is_shared (c1));
+
+  gst_object_unref (c1);
+}
+
+GST_END_TEST;
+
+GST_START_TEST (test_display_list)
+{
+  GstGLContext *c1, *c2;
+  GError *error = NULL;
+
+  c1 = gst_gl_context_new (display);
+  gst_gl_context_create (c1, NULL, &error);
+  fail_if (error != NULL, "Error creating context %s\n",
+      error ? error->message : "Unknown Error");
+
+  GST_OBJECT_LOCK (display);
+  {
+    /* no context added so get should return NULL */
+    GstGLContext *tmp =
+        gst_gl_display_get_gl_context_for_thread (display, NULL);
+    fail_unless (tmp == NULL);
+  }
+
+  fail_unless (gst_gl_display_add_context (display, c1));
+  /* re-adding the same context is a no-op */
+  fail_unless (gst_gl_display_add_context (display, c1));
+
+  {
+    GThread *thread;
+    GstGLContext *tmp;
+
+    thread = gst_gl_context_get_thread (c1);
+    fail_unless (thread != NULL);
+
+    tmp = gst_gl_display_get_gl_context_for_thread (display, thread);
+    fail_unless (tmp == c1);
+    g_thread_unref (thread);
+    gst_object_unref (tmp);
+
+    tmp = gst_gl_display_get_gl_context_for_thread (display, NULL);
+    fail_unless (tmp == c1);
+    gst_object_unref (tmp);
+  }
+
+  c2 = gst_gl_context_new (display);
+  gst_gl_context_create (c2, c1, &error);
+  fail_if (error != NULL, "Error creating context %s\n",
+      error ? error->message : "Unknown Error");
+
+  fail_unless (gst_gl_display_add_context (display, c2));
+  /* re-adding the same context is a no-op */
+  fail_unless (gst_gl_display_add_context (display, c2));
+
+  {
+    GThread *thread;
+    GstGLContext *tmp;
+
+    thread = gst_gl_context_get_thread (c2);
+    fail_unless (thread != NULL);
+
+    tmp = gst_gl_display_get_gl_context_for_thread (display, thread);
+    fail_unless (tmp == c2);
+    g_thread_unref (thread);
+    gst_object_unref (tmp);
+
+    /* undefined which context will be returned for the NULL thread */
+    tmp = gst_gl_display_get_gl_context_for_thread (display, NULL);
+    fail_unless (tmp != NULL);
+    gst_object_unref (tmp);
+  }
+
+  gst_object_unref (c1);
+  /* c1 is now dead */
+
+  {
+    GstGLContext *tmp;
+
+    tmp = gst_gl_display_get_gl_context_for_thread (display, NULL);
+    fail_unless (tmp == c2);
+    gst_object_unref (tmp);
+  }
+  GST_OBJECT_UNLOCK (display);
+
+  gst_object_unref (c2);
+  /* c2 is now dead */
+
+  {
+    /* no more contexts alive */
+    GstGLContext *tmp =
+        gst_gl_display_get_gl_context_for_thread (display, NULL);
+    fail_unless (tmp == NULL);
+  }
+}
+
+GST_END_TEST;
+
 static Suite *
 gst_gl_context_suite (void)
 {
@@ -497,6 +620,8 @@
   tcase_add_test (tc_chain, test_wrapped_context);
   tcase_add_test (tc_chain, test_current_context);
   tcase_add_test (tc_chain, test_context_can_share);
+  tcase_add_test (tc_chain, test_is_shared);
+  tcase_add_test (tc_chain, test_display_list);
 
   return s;
 }
diff --git a/tests/check/libs/gstglmemory.c b/tests/check/libs/gstglmemory.c
index 238e2bb..4130e3b 100644
--- a/tests/check/libs/gstglmemory.c
+++ b/tests/check/libs/gstglmemory.c
@@ -26,7 +26,7 @@
 
 #include <gst/check/gstcheck.h>
 
-#include <gst/gl/gstglmemory.h>
+#include <gst/gl/gl.h>
 
 #include <stdio.h>
 
@@ -39,7 +39,7 @@
   display = gst_gl_display_new ();
   context = gst_gl_context_new (display);
   gst_gl_context_create (context, 0, NULL);
-  gst_gl_memory_init ();
+  gst_gl_memory_init_once ();
 }
 
 static void
@@ -54,14 +54,16 @@
   GstMemory *mem, *mem2;
   GstGLMemory *gl_mem, *gl_mem2;
   GstAllocator *gl_allocator;
+  GstGLBaseMemoryAllocator *base_mem_alloc;
   gint i, j;
   static GstVideoFormat formats[] = {
     GST_VIDEO_FORMAT_RGBA, GST_VIDEO_FORMAT_RGB,
     GST_VIDEO_FORMAT_YUY2, GST_VIDEO_FORMAT_I420
   };
 
-  gl_allocator = gst_allocator_find (GST_GL_MEMORY_ALLOCATOR);
+  gl_allocator = gst_allocator_find (GST_GL_MEMORY_ALLOCATOR_NAME);
   fail_if (gl_allocator == NULL);
+  base_mem_alloc = GST_GL_BASE_MEMORY_ALLOCATOR (gl_allocator);
 
   /* test allocator creation */
   ASSERT_WARNING (mem = gst_allocator_alloc (gl_allocator, 0, NULL));
@@ -73,7 +75,13 @@
     gst_video_info_set_format (&v_info, formats[i], width, height);
 
     for (j = 0; j < GST_VIDEO_INFO_N_PLANES (&v_info); j++) {
-      mem = gst_gl_memory_alloc (context, NULL, &v_info, j, NULL);
+      GstGLVideoAllocationParams *params;
+
+      params = gst_gl_video_allocation_params_new (context, NULL, &v_info, j,
+          NULL, GST_GL_TEXTURE_TARGET_2D);
+
+      mem = (GstMemory *) gst_gl_base_memory_alloc (base_mem_alloc,
+          (GstGLAllocationParams *) params);
       fail_if (mem == NULL);
       gl_mem = (GstGLMemory *) mem;
 
@@ -96,6 +104,7 @@
         printf ("%s\n", gst_gl_context_get_error ());
       fail_if (gst_gl_context_get_error () != NULL);
 
+      gst_gl_allocation_params_free ((GstGLAllocationParams *) params);
       gst_memory_unref (mem);
       gst_memory_unref (mem2);
     }
@@ -111,97 +120,116 @@
   0xff, 0x00, 0x00, 0xff,
 };
 
-GST_START_TEST (test_transfer)
+static void
+test_transfer_allocator (const gchar * allocator_name)
 {
   GstAllocator *gl_allocator;
+  GstGLBaseMemoryAllocator *base_mem_alloc;
   GstVideoInfo v_info;
   GstMemory *mem, *mem2, *mem3;
   GstMapInfo map_info;
+  GstGLVideoAllocationParams *params;
 
-  gl_allocator = gst_allocator_find (GST_GL_MEMORY_ALLOCATOR);
+  gl_allocator = gst_allocator_find (allocator_name);
   fail_if (gl_allocator == NULL);
+  base_mem_alloc = GST_GL_BASE_MEMORY_ALLOCATOR (gl_allocator);
 
   gst_video_info_set_format (&v_info, GST_VIDEO_FORMAT_RGBA, 1, 1);
 
+  params = gst_gl_video_allocation_params_new (context, NULL, &v_info, 0,
+      NULL, GST_GL_TEXTURE_TARGET_2D);
+
   /* texture creation */
-  mem = (GstMemory *) gst_gl_memory_alloc (context, NULL, &v_info, 0, NULL);
+  mem = (GstMemory *) gst_gl_base_memory_alloc (base_mem_alloc,
+      (GstGLAllocationParams *) params);
+  gst_gl_allocation_params_free ((GstGLAllocationParams *) params);
   fail_unless (!GST_MEMORY_FLAG_IS_SET (mem,
-          GST_GL_BASE_BUFFER_FLAG_NEED_UPLOAD));
+          GST_GL_BASE_MEMORY_TRANSFER_NEED_UPLOAD));
   fail_unless (!GST_MEMORY_FLAG_IS_SET (mem,
-          GST_GL_BASE_BUFFER_FLAG_NEED_DOWNLOAD));
+          GST_GL_BASE_MEMORY_TRANSFER_NEED_DOWNLOAD));
 
   /* test wrapping raw data */
+  params = gst_gl_video_allocation_params_new_wrapped_data (context, NULL,
+      &v_info, 0, NULL, GST_GL_TEXTURE_TARGET_2D, rgba_pixel, NULL, NULL);
   mem2 =
-      (GstMemory *) gst_gl_memory_wrapped (context, &v_info, 0, NULL,
-      rgba_pixel, NULL, NULL);
+      (GstMemory *) gst_gl_base_memory_alloc (base_mem_alloc,
+      (GstGLAllocationParams *) params);
+  gst_gl_allocation_params_free ((GstGLAllocationParams *) params);
   fail_if (mem == NULL);
 
   fail_unless (GST_MEMORY_FLAG_IS_SET (mem2,
-          GST_GL_BASE_BUFFER_FLAG_NEED_UPLOAD));
+          GST_GL_BASE_MEMORY_TRANSFER_NEED_UPLOAD));
   fail_unless (!GST_MEMORY_FLAG_IS_SET (mem2,
-          GST_GL_BASE_BUFFER_FLAG_NEED_DOWNLOAD));
+          GST_GL_BASE_MEMORY_TRANSFER_NEED_DOWNLOAD));
 
   /* wrapped texture creation */
-  mem3 = (GstMemory *) gst_gl_memory_wrapped_texture (context,
-      ((GstGLMemory *) mem)->tex_id, GL_TEXTURE_2D, &v_info, 0, NULL, NULL,
-      NULL);
+  params = gst_gl_video_allocation_params_new_wrapped_texture (context, NULL,
+      &v_info, 0, NULL, GST_GL_TEXTURE_TARGET_2D, ((GstGLMemory *) mem)->tex_id,
+      NULL, NULL);
+  mem3 =
+      (GstMemory *) gst_gl_base_memory_alloc (base_mem_alloc,
+      (GstGLAllocationParams *) params);
+  gst_gl_allocation_params_free ((GstGLAllocationParams *) params);
   fail_unless (!GST_MEMORY_FLAG_IS_SET (mem3,
-          GST_GL_BASE_BUFFER_FLAG_NEED_UPLOAD));
+          GST_GL_BASE_MEMORY_TRANSFER_NEED_UPLOAD));
   fail_unless (GST_MEMORY_FLAG_IS_SET (mem3,
-          GST_GL_BASE_BUFFER_FLAG_NEED_DOWNLOAD));
+          GST_GL_BASE_MEMORY_TRANSFER_NEED_DOWNLOAD));
 
   /* check data/flags are correct */
   fail_unless (gst_memory_map (mem2, &map_info, GST_MAP_READ));
 
   fail_unless (GST_MEMORY_FLAG_IS_SET (mem2,
-          GST_GL_BASE_BUFFER_FLAG_NEED_UPLOAD));
+          GST_GL_BASE_MEMORY_TRANSFER_NEED_UPLOAD));
   fail_unless (!GST_MEMORY_FLAG_IS_SET (mem2,
-          GST_GL_BASE_BUFFER_FLAG_NEED_DOWNLOAD));
+          GST_GL_BASE_MEMORY_TRANSFER_NEED_DOWNLOAD));
 
-  fail_unless (((gchar *) map_info.data)[0] == rgba_pixel[0]);
-  fail_unless (((gchar *) map_info.data)[1] == rgba_pixel[1]);
-  fail_unless (((gchar *) map_info.data)[2] == rgba_pixel[2]);
-  fail_unless (((gchar *) map_info.data)[3] == rgba_pixel[3]);
+  fail_unless (memcmp (map_info.data, rgba_pixel,
+          G_N_ELEMENTS (rgba_pixel)) == 0,
+      "0x%02x%02x%02x%02x != 0x%02x%02x%02x%02x", map_info.data[0],
+      map_info.data[1], map_info.data[2], map_info.data[3],
+      (guint8) rgba_pixel[0], (guint8) rgba_pixel[1], (guint8) rgba_pixel[2],
+      (guint8) rgba_pixel[3]);
 
   gst_memory_unmap (mem2, &map_info);
 
   fail_unless (GST_MEMORY_FLAG_IS_SET (mem2,
-          GST_GL_BASE_BUFFER_FLAG_NEED_UPLOAD));
+          GST_GL_BASE_MEMORY_TRANSFER_NEED_UPLOAD));
   fail_unless (!GST_MEMORY_FLAG_IS_SET (mem2,
-          GST_GL_BASE_BUFFER_FLAG_NEED_DOWNLOAD));
+          GST_GL_BASE_MEMORY_TRANSFER_NEED_DOWNLOAD));
 
   fail_unless (gst_memory_map (mem2, &map_info, GST_MAP_READ | GST_MAP_GL));
 
   fail_unless (!GST_MEMORY_FLAG_IS_SET (mem2,
-          GST_GL_BASE_BUFFER_FLAG_NEED_UPLOAD));
+          GST_GL_BASE_MEMORY_TRANSFER_NEED_UPLOAD));
   fail_unless (!GST_MEMORY_FLAG_IS_SET (mem2,
-          GST_GL_BASE_BUFFER_FLAG_NEED_DOWNLOAD));
+          GST_GL_BASE_MEMORY_TRANSFER_NEED_DOWNLOAD));
 
   /* test texture copy */
-  fail_unless (gst_gl_memory_copy_into_texture ((GstGLMemory *) mem2,
-          ((GstGLMemory *) mem)->tex_id, GST_VIDEO_GL_TEXTURE_TYPE_RGBA, 1, 1,
-          4, FALSE));
-  GST_MINI_OBJECT_FLAG_SET (mem, GST_GL_BASE_BUFFER_FLAG_NEED_DOWNLOAD);
-  GST_GL_MEMORY_ADD_TRANSFER (mem, GST_GL_MEMORY_TRANSFER_NEED_DOWNLOAD);
+  fail_unless (gst_gl_memory_copy_into ((GstGLMemory *) mem2,
+          ((GstGLMemory *) mem)->tex_id, GST_GL_TEXTURE_TARGET_2D,
+          GST_VIDEO_GL_TEXTURE_TYPE_RGBA, 1, 1));
+  GST_MINI_OBJECT_FLAG_SET (mem, GST_GL_BASE_MEMORY_TRANSFER_NEED_DOWNLOAD);
 
   fail_unless (!GST_MEMORY_FLAG_IS_SET (mem2,
-          GST_GL_BASE_BUFFER_FLAG_NEED_UPLOAD));
+          GST_GL_BASE_MEMORY_TRANSFER_NEED_UPLOAD));
   fail_unless (!GST_MEMORY_FLAG_IS_SET (mem2,
-          GST_GL_BASE_BUFFER_FLAG_NEED_DOWNLOAD));
+          GST_GL_BASE_MEMORY_TRANSFER_NEED_DOWNLOAD));
   fail_unless (!GST_MEMORY_FLAG_IS_SET (mem,
-          GST_GL_BASE_BUFFER_FLAG_NEED_UPLOAD));
+          GST_GL_BASE_MEMORY_TRANSFER_NEED_UPLOAD));
   fail_unless (GST_MEMORY_FLAG_IS_SET (mem,
-          GST_GL_BASE_BUFFER_FLAG_NEED_DOWNLOAD));
+          GST_GL_BASE_MEMORY_TRANSFER_NEED_DOWNLOAD));
 
   gst_memory_unmap (mem2, &map_info);
 
   /* test download of copied texture */
   fail_unless (gst_memory_map (mem, &map_info, GST_MAP_READ));
 
-  fail_unless (((gchar *) map_info.data)[0] == rgba_pixel[0]);
-  fail_unless (((gchar *) map_info.data)[1] == rgba_pixel[1]);
-  fail_unless (((gchar *) map_info.data)[2] == rgba_pixel[2]);
-  fail_unless (((gchar *) map_info.data)[3] == rgba_pixel[3]);
+  fail_unless (memcmp (map_info.data, rgba_pixel,
+          G_N_ELEMENTS (rgba_pixel)) == 0,
+      "0x%02x%02x%02x%02x != 0x%02x%02x%02x%02x", (guint8) map_info.data[0],
+      (guint8) map_info.data[1], (guint8) map_info.data[2],
+      (guint8) map_info.data[3], (guint8) rgba_pixel[0], (guint8) rgba_pixel[1],
+      (guint8) rgba_pixel[2], (guint8) rgba_pixel[3]);
 
   gst_memory_unmap (mem, &map_info);
 
@@ -209,14 +237,16 @@
   fail_unless (gst_memory_map (mem3, &map_info, GST_MAP_READ));
 
   fail_unless (!GST_MEMORY_FLAG_IS_SET (mem,
-          GST_GL_BASE_BUFFER_FLAG_NEED_UPLOAD));
+          GST_GL_BASE_MEMORY_TRANSFER_NEED_UPLOAD));
   fail_unless (!GST_MEMORY_FLAG_IS_SET (mem,
-          GST_GL_BASE_BUFFER_FLAG_NEED_DOWNLOAD));
+          GST_GL_BASE_MEMORY_TRANSFER_NEED_DOWNLOAD));
 
-  fail_unless (((gchar *) map_info.data)[0] == rgba_pixel[0]);
-  fail_unless (((gchar *) map_info.data)[1] == rgba_pixel[1]);
-  fail_unless (((gchar *) map_info.data)[2] == rgba_pixel[2]);
-  fail_unless (((gchar *) map_info.data)[3] == rgba_pixel[3]);
+  fail_unless (memcmp (map_info.data, rgba_pixel,
+          G_N_ELEMENTS (rgba_pixel)) == 0,
+      "0x%02x%02x%02x%02x != 0x%02x%02x%02x%02x", (guint8) map_info.data[0],
+      (guint8) map_info.data[1], (guint8) map_info.data[2],
+      (guint8) map_info.data[3], (guint8) rgba_pixel[0], (guint8) rgba_pixel[1],
+      (guint8) rgba_pixel[2], (guint8) rgba_pixel[3]);
 
   gst_memory_unmap (mem3, &map_info);
 
@@ -225,18 +255,18 @@
   gst_memory_unmap (mem3, &map_info);
 
   fail_unless (GST_MEMORY_FLAG_IS_SET (mem3,
-          GST_GL_BASE_BUFFER_FLAG_NEED_UPLOAD));
+          GST_GL_BASE_MEMORY_TRANSFER_NEED_UPLOAD));
   fail_unless (!GST_MEMORY_FLAG_IS_SET (mem3,
-          GST_GL_BASE_BUFFER_FLAG_NEED_DOWNLOAD));
+          GST_GL_BASE_MEMORY_TRANSFER_NEED_DOWNLOAD));
 
   /* test download flag */
   fail_unless (gst_memory_map (mem3, &map_info, GST_MAP_WRITE | GST_MAP_GL));
   gst_memory_unmap (mem3, &map_info);
 
   fail_unless (!GST_MEMORY_FLAG_IS_SET (mem3,
-          GST_GL_BASE_BUFFER_FLAG_NEED_UPLOAD));
+          GST_GL_BASE_MEMORY_TRANSFER_NEED_UPLOAD));
   fail_unless (GST_MEMORY_FLAG_IS_SET (mem3,
-          GST_GL_BASE_BUFFER_FLAG_NEED_DOWNLOAD));
+          GST_GL_BASE_MEMORY_TRANSFER_NEED_DOWNLOAD));
 
   if (gst_gl_context_get_error ())
     printf ("%s\n", gst_gl_context_get_error ());
@@ -248,38 +278,52 @@
   gst_object_unref (gl_allocator);
 }
 
+
+GST_START_TEST (test_transfer)
+{
+  test_transfer_allocator (GST_GL_MEMORY_ALLOCATOR_NAME);
+  test_transfer_allocator (GST_GL_MEMORY_PBO_ALLOCATOR_NAME);
+}
+
 GST_END_TEST;
 
 GST_START_TEST (test_separate_transfer)
 {
+  GstGLBaseMemoryAllocator *base_mem_alloc;
+  GstGLVideoAllocationParams *params;
   GstAllocator *gl_allocator;
   GstVideoInfo v_info;
   GstMemory *mem;
   GstMapInfo info;
 
-  gl_allocator = gst_allocator_find (GST_GL_MEMORY_ALLOCATOR);
+  gl_allocator = gst_allocator_find (GST_GL_MEMORY_PBO_ALLOCATOR_NAME);
   fail_if (gl_allocator == NULL);
+  base_mem_alloc = GST_GL_BASE_MEMORY_ALLOCATOR (gl_allocator);
 
   gst_video_info_set_format (&v_info, GST_VIDEO_FORMAT_RGBA, 1, 1);
 
+  params = gst_gl_video_allocation_params_new_wrapped_data (context, NULL,
+      &v_info, 0, NULL, GST_GL_TEXTURE_TARGET_2D, rgba_pixel, NULL, NULL);
   mem =
-      (GstMemory *) gst_gl_memory_wrapped (context, &v_info, 0, NULL,
-      rgba_pixel, NULL, NULL);
+      (GstMemory *) gst_gl_base_memory_alloc (base_mem_alloc,
+      (GstGLAllocationParams *) params);
+  gst_gl_allocation_params_free ((GstGLAllocationParams *) params);
   fail_if (mem == NULL);
   fail_unless (!GST_MEMORY_FLAG_IS_SET (mem,
-          GST_GL_BASE_BUFFER_FLAG_NEED_DOWNLOAD));
+          GST_GL_BASE_MEMORY_TRANSFER_NEED_DOWNLOAD));
 
-  gst_gl_memory_upload_transfer ((GstGLMemory *) mem);
+  gst_gl_memory_pbo_upload_transfer ((GstGLMemoryPBO *) mem);
 
   fail_unless (!GST_MEMORY_FLAG_IS_SET (mem,
-          GST_GL_BASE_BUFFER_FLAG_NEED_DOWNLOAD));
+          GST_GL_BASE_MEMORY_TRANSFER_NEED_DOWNLOAD));
 
   fail_unless (gst_memory_map (mem, &info, GST_MAP_READ));
 
-  fail_unless (((gchar *) info.data)[0] == rgba_pixel[0]);
-  fail_unless (((gchar *) info.data)[1] == rgba_pixel[1]);
-  fail_unless (((gchar *) info.data)[2] == rgba_pixel[2]);
-  fail_unless (((gchar *) info.data)[3] == rgba_pixel[3]);
+  fail_unless (memcmp (info.data, rgba_pixel, G_N_ELEMENTS (rgba_pixel)) == 0,
+      "0x%02x%02x%02x%02x != 0x%02x%02x%02x%02x", (guint8) info.data[0],
+      (guint8) info.data[1], (guint8) info.data[2],
+      (guint8) info.data[3], (guint8) rgba_pixel[0], (guint8) rgba_pixel[1],
+      (guint8) rgba_pixel[2], (guint8) rgba_pixel[3]);
 
   gst_memory_unmap (mem, &info);
 
diff --git a/tests/check/libs/gstglquery.c b/tests/check/libs/gstglquery.c
new file mode 100644
index 0000000..2dfa240
--- /dev/null
+++ b/tests/check/libs/gstglquery.c
@@ -0,0 +1,150 @@
+/* GStreamer
+ * Copyright (C) 2016 Matthew Waters <matthew@centricular.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+#  include "config.h"
+#endif
+
+#include <gst/check/gstcheck.h>
+
+#include <gst/gl/gl.h>
+
+#include <stdio.h>
+
+static GstGLDisplay *display;
+static GstGLContext *context;
+
+GST_DEBUG_CATEGORY_STATIC (gst_test_debug_cat);
+
+static void
+setup (void)
+{
+  GError *error = NULL;
+
+  display = gst_gl_display_new ();
+  context = gst_gl_context_new (display);
+
+  gst_gl_context_create (context, NULL, &error);
+
+  fail_if (error != NULL, "Error creating context: %s\n",
+      error ? error->message : "Unknown Error");
+}
+
+static void
+teardown (void)
+{
+  gst_object_unref (display);
+  gst_object_unref (context);
+}
+
+static void
+_test_query_gl (GstGLContext * context, gpointer data)
+{
+  GstGLQuery *q1, q2;
+
+  q1 = gst_gl_query_new (context, GST_GL_QUERY_TIME_ELAPSED);
+  fail_if (q1 == NULL);
+
+  gst_gl_query_start_log (q1, NULL, GST_LEVEL_ERROR, NULL, "%s",
+      "1. testing query proxy-logging");
+  gst_gl_query_end (q1);
+  /* GST_GL_QUERY_TIME_ELAPSED doesn't supported counter() */
+  ASSERT_CRITICAL (gst_gl_query_counter (q1));
+  gst_gl_query_result (q1);
+
+  gst_gl_query_free (q1);
+
+  gst_gl_query_init (&q2, context, GST_GL_QUERY_TIMESTAMP);
+
+  /* GST_GL_QUERY_TIMESTAMP doesn't supported start()/end() */
+  ASSERT_CRITICAL (gst_gl_query_start (&q2));
+  ASSERT_CRITICAL (gst_gl_query_end (&q2));
+
+  gst_gl_query_counter_log (&q2, gst_test_debug_cat, GST_LEVEL_ERROR, NULL,
+      "%s", "2. testing query proxy-logging works from _unset()");
+  gst_gl_query_result (&q2);
+
+  gst_gl_query_unset (&q2);
+
+  /* no usage */
+  gst_gl_query_init (&q2, context, GST_GL_QUERY_TIMESTAMP);
+  gst_gl_query_unset (&q2);
+
+  /* test mismatched start()/free() */
+  q1 = gst_gl_query_new (context, GST_GL_QUERY_TIME_ELAPSED);
+  fail_if (q1 == NULL);
+
+  gst_gl_query_start (q1);
+
+  ASSERT_CRITICAL (gst_gl_query_free (q1));
+
+  /* test mismatched start()/result() */
+  q1 = gst_gl_query_new (context, GST_GL_QUERY_TIME_ELAPSED);
+  fail_if (q1 == NULL);
+
+  gst_gl_query_start (q1);
+  ASSERT_CRITICAL (gst_gl_query_result (q1));
+  gst_gl_query_end (q1);
+
+  gst_gl_query_free (q1);
+
+  /* test mismatched end() */
+  q1 = gst_gl_query_new (context, GST_GL_QUERY_TIME_ELAPSED);
+  fail_if (q1 == NULL);
+  ASSERT_CRITICAL (gst_gl_query_end (q1));
+  gst_gl_query_free (q1);
+
+  /* test double end() */
+  q1 = gst_gl_query_new (context, GST_GL_QUERY_TIME_ELAPSED);
+  fail_if (q1 == NULL);
+
+  gst_gl_query_start (q1);
+  gst_gl_query_end (q1);
+  ASSERT_CRITICAL (gst_gl_query_end (q1));
+
+  gst_gl_query_free (q1);
+
+  /* double start is allowed */
+}
+
+GST_START_TEST (test_query)
+{
+  gst_gl_context_thread_add (context, (GstGLContextThreadFunc) _test_query_gl,
+      NULL);
+}
+
+GST_END_TEST;
+
+static Suite *
+gst_gl_upload_suite (void)
+{
+  Suite *s = suite_create ("GstGLQuery");
+  TCase *tc_chain = tcase_create ("glquery");
+
+  GST_DEBUG_CATEGORY_INIT (gst_test_debug_cat, "test-debug", 0,
+      "proxy-logging test debug");
+
+  suite_add_tcase (s, tc_chain);
+  tcase_add_checked_fixture (tc_chain, setup, teardown);
+  tcase_add_test (tc_chain, test_query);
+
+  return s;
+}
+
+GST_CHECK_MAIN (gst_gl_upload);
diff --git a/tests/check/libs/gstglsl.c b/tests/check/libs/gstglsl.c
new file mode 100644
index 0000000..d7a7c0c
--- /dev/null
+++ b/tests/check/libs/gstglsl.c
@@ -0,0 +1,308 @@
+/* GStreamer
+ * Copyright (C) 2015 Matthew Waters <matthew@centricular.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+#  include "config.h"
+#endif
+
+#include <gst/check/gstcheck.h>
+
+#include <gst/gl/gstglsl.h>
+
+#include <stdio.h>
+
+static void
+setup (void)
+{
+}
+
+static void
+teardown (void)
+{
+}
+
+/* *INDENT-OFF* */
+static const struct {GstGLSLVersion version; const gchar * name;} glsl_versions[] = {
+  {GST_GLSL_VERSION_100, "100"},
+  {GST_GLSL_VERSION_110, "110"},
+  {GST_GLSL_VERSION_120, "120"},
+  {GST_GLSL_VERSION_130, "130"},
+  {GST_GLSL_VERSION_140, "140"},
+  {GST_GLSL_VERSION_150, "150"},
+  {GST_GLSL_VERSION_300, "300"},
+  {GST_GLSL_VERSION_310, "310"},
+  {GST_GLSL_VERSION_320, "320"},
+  {GST_GLSL_VERSION_330, "330"},
+  {GST_GLSL_VERSION_400, "400"},
+  {GST_GLSL_VERSION_410, "410"},
+  {GST_GLSL_VERSION_420, "420"},
+  {GST_GLSL_VERSION_430, "430"},
+  {GST_GLSL_VERSION_440, "440"},
+  {GST_GLSL_VERSION_450, "450"},
+};
+
+static const struct {GstGLSLProfile profile; const gchar * name;} glsl_profiles[] = {
+  {GST_GLSL_PROFILE_ES, "es"},
+  {GST_GLSL_PROFILE_CORE, "core"},
+  {GST_GLSL_PROFILE_COMPATIBILITY, "compatibility"},
+};
+
+static const struct {GstGLSLVersion version; GstGLSLProfile profile; const gchar * name;} glsl_version_profiles[] = {
+  {GST_GLSL_VERSION_100, GST_GLSL_PROFILE_ES, "100"},
+  {GST_GLSL_VERSION_110, GST_GLSL_PROFILE_COMPATIBILITY, "110"},
+  {GST_GLSL_VERSION_120, GST_GLSL_PROFILE_COMPATIBILITY, "120"},
+  {GST_GLSL_VERSION_130, GST_GLSL_PROFILE_COMPATIBILITY, "130"},
+  {GST_GLSL_VERSION_140, GST_GLSL_PROFILE_COMPATIBILITY, "140"},
+  {GST_GLSL_VERSION_150, GST_GLSL_PROFILE_COMPATIBILITY, "150"},
+  {GST_GLSL_VERSION_300, GST_GLSL_PROFILE_ES, "300 es"},
+  {GST_GLSL_VERSION_310, GST_GLSL_PROFILE_ES, "310 es"},
+  {GST_GLSL_VERSION_320, GST_GLSL_PROFILE_ES, "320 es"},
+  {GST_GLSL_VERSION_330, GST_GLSL_PROFILE_CORE, "330 core"},
+  {GST_GLSL_VERSION_330, GST_GLSL_PROFILE_COMPATIBILITY, "330 compatibility"},
+  {GST_GLSL_VERSION_400, GST_GLSL_PROFILE_CORE, "400 core"},
+  {GST_GLSL_VERSION_400, GST_GLSL_PROFILE_COMPATIBILITY, "400 compatibility"},
+  {GST_GLSL_VERSION_410, GST_GLSL_PROFILE_CORE, "410 core"},
+  {GST_GLSL_VERSION_410, GST_GLSL_PROFILE_COMPATIBILITY, "410 compatibility"},
+  {GST_GLSL_VERSION_420, GST_GLSL_PROFILE_CORE, "420 core"},
+  {GST_GLSL_VERSION_420, GST_GLSL_PROFILE_COMPATIBILITY, "420 compatibility"},
+  {GST_GLSL_VERSION_430, GST_GLSL_PROFILE_CORE, "430 core"},
+  {GST_GLSL_VERSION_430, GST_GLSL_PROFILE_COMPATIBILITY, "430 compatibility"},
+  {GST_GLSL_VERSION_440, GST_GLSL_PROFILE_CORE, "440 core"},
+  {GST_GLSL_VERSION_440, GST_GLSL_PROFILE_COMPATIBILITY, "440 compatibility"},
+  {GST_GLSL_VERSION_450, GST_GLSL_PROFILE_CORE, "450 core"},
+  {GST_GLSL_VERSION_450, GST_GLSL_PROFILE_COMPATIBILITY, "450 compatibility"},
+};
+
+static const gchar * invalid_deserialize_glsl[] = {
+  "",
+  " \t\r\n",
+  "ael dja",
+  "es",
+  "core",
+  "compatibility",
+  "1000",
+  "100 es",
+  "100 core",
+  "100 compatibility",
+  "150 es",
+  "150 core",
+  "150 compatibility",
+  "300 core",
+  "300 compatibility",
+  "310 core",
+  "310 compatibility",
+  "320 core",
+  "320 compatibility",
+  "330 es",
+};
+
+static const struct {GstGLSLVersion version; GstGLSLProfile profile;} invalid_serialize_glsl[] = {
+  {GST_GLSL_VERSION_100, GST_GLSL_PROFILE_CORE},
+  {GST_GLSL_VERSION_100, GST_GLSL_PROFILE_COMPATIBILITY},
+  {GST_GLSL_VERSION_110, GST_GLSL_PROFILE_ES},
+  {GST_GLSL_VERSION_110, GST_GLSL_PROFILE_CORE},
+  {GST_GLSL_VERSION_120, GST_GLSL_PROFILE_ES},
+  {GST_GLSL_VERSION_120, GST_GLSL_PROFILE_CORE},
+  {GST_GLSL_VERSION_130, GST_GLSL_PROFILE_ES},
+  {GST_GLSL_VERSION_130, GST_GLSL_PROFILE_CORE},
+  {GST_GLSL_VERSION_140, GST_GLSL_PROFILE_ES},
+  {GST_GLSL_VERSION_140, GST_GLSL_PROFILE_CORE},
+  {GST_GLSL_VERSION_150, GST_GLSL_PROFILE_ES},
+  {GST_GLSL_VERSION_150, GST_GLSL_PROFILE_CORE},
+  {GST_GLSL_VERSION_300, GST_GLSL_PROFILE_NONE},
+  {GST_GLSL_VERSION_300, GST_GLSL_PROFILE_CORE},
+  {GST_GLSL_VERSION_300, GST_GLSL_PROFILE_COMPATIBILITY},
+  {GST_GLSL_VERSION_310, GST_GLSL_PROFILE_NONE},
+  {GST_GLSL_VERSION_310, GST_GLSL_PROFILE_CORE},
+  {GST_GLSL_VERSION_310, GST_GLSL_PROFILE_COMPATIBILITY},
+  {GST_GLSL_VERSION_320, GST_GLSL_PROFILE_NONE},
+  {GST_GLSL_VERSION_320, GST_GLSL_PROFILE_CORE},
+  {GST_GLSL_VERSION_320, GST_GLSL_PROFILE_COMPATIBILITY},
+  {GST_GLSL_VERSION_330, GST_GLSL_PROFILE_ES},
+  {GST_GLSL_VERSION_400, GST_GLSL_PROFILE_ES},
+  {GST_GLSL_VERSION_410, GST_GLSL_PROFILE_ES},
+  {GST_GLSL_VERSION_420, GST_GLSL_PROFILE_ES},
+  {GST_GLSL_VERSION_430, GST_GLSL_PROFILE_ES},
+  {GST_GLSL_VERSION_440, GST_GLSL_PROFILE_ES},
+  {GST_GLSL_VERSION_450, GST_GLSL_PROFILE_ES},
+};
+
+static const struct {const gchar *name; gboolean succeed; GstGLSLVersion version; GstGLSLProfile profile;} glsl_str_map[] = {
+  {"//#version 100\n", FALSE, GST_GLSL_VERSION_NONE, GST_GLSL_PROFILE_NONE},
+  {"/*\n#version 100*/\n", FALSE, GST_GLSL_VERSION_NONE, GST_GLSL_PROFILE_NONE},
+  {"/*\r#version 100*/", FALSE, GST_GLSL_VERSION_NONE, GST_GLSL_PROFILE_NONE},
+  {"#\rversion 100", FALSE, GST_GLSL_VERSION_NONE, GST_GLSL_PROFILE_NONE},
+  {"#\nversion 100", FALSE, GST_GLSL_VERSION_NONE, GST_GLSL_PROFILE_NONE},
+  {"\t#version 100", FALSE, GST_GLSL_VERSION_NONE, GST_GLSL_PROFILE_NONE},
+  {"//\r#version 100", TRUE, GST_GLSL_VERSION_100, GST_GLSL_PROFILE_ES},
+  {"//\n#version 100", TRUE, GST_GLSL_VERSION_100, GST_GLSL_PROFILE_ES},
+  {"# \tversion 100", TRUE, GST_GLSL_VERSION_100, GST_GLSL_PROFILE_ES},
+  {"\n#version 100", TRUE, GST_GLSL_VERSION_100, GST_GLSL_PROFILE_ES},
+  {"\r#version 100", TRUE, GST_GLSL_VERSION_100, GST_GLSL_PROFILE_ES},
+};
+/* *INDENT-ON* */
+
+GST_START_TEST (test_serialization)
+{
+  gint i;
+
+  /* versions */
+  for (i = 0; i < G_N_ELEMENTS (glsl_versions); i++) {
+    GstGLSLVersion version;
+    const gchar *version_s;
+
+    version_s = gst_glsl_version_to_string (glsl_versions[i].version);
+    fail_unless (g_strcmp0 (version_s, glsl_versions[i].name) == 0, "%s != %s",
+        version_s, glsl_versions[i].name);
+    version = gst_glsl_version_from_string (glsl_versions[i].name);
+    fail_unless (version == glsl_versions[i].version, "%s != %s",
+        gst_glsl_version_to_string (glsl_versions[i].version),
+        gst_glsl_version_to_string (version));
+  }
+
+  /* profiles */
+  for (i = 0; i < G_N_ELEMENTS (glsl_profiles); i++) {
+    GstGLSLProfile profile;
+    const gchar *profile_s;
+
+    profile_s = gst_glsl_profile_to_string (glsl_profiles[i].profile);
+    fail_unless (g_strcmp0 (profile_s, glsl_profiles[i].name) == 0, "%s != %s",
+        profile_s, glsl_profiles[i].name);
+    profile = gst_glsl_profile_from_string (glsl_profiles[i].name);
+    fail_unless (profile == glsl_profiles[i].profile, "%s != %s",
+        gst_glsl_profile_to_string (glsl_profiles[i].profile),
+        gst_glsl_profile_to_string (profile));
+  }
+
+  for (i = 0; i < G_N_ELEMENTS (glsl_version_profiles); i++) {
+    gchar *version_profile_s;
+    GstGLSLVersion version;
+    GstGLSLProfile profile;
+
+    version_profile_s =
+        gst_glsl_version_profile_to_string (glsl_version_profiles[i].version,
+        glsl_version_profiles[i].profile);
+    fail_unless (g_strcmp0 (version_profile_s,
+            glsl_version_profiles[i].name) == 0, "%s != %s", version_profile_s,
+        glsl_version_profiles[i].name);
+    fail_unless (gst_glsl_version_profile_from_string (glsl_version_profiles
+            [i].name, &version, &profile), "Failed to parse %s",
+        glsl_version_profiles[i].name);
+    fail_unless (profile == glsl_version_profiles[i].profile
+        && version == glsl_version_profiles[i].version, "%s != %s %s",
+        glsl_version_profiles[i].name, gst_glsl_version_to_string (version),
+        gst_glsl_profile_to_string (profile));
+    g_free (version_profile_s);
+  }
+
+  /* failures */
+  for (i = 0; i < G_N_ELEMENTS (invalid_deserialize_glsl); i++) {
+    GstGLSLVersion version;
+    GstGLSLProfile profile;
+
+    fail_if (gst_glsl_version_profile_from_string (invalid_deserialize_glsl[i],
+            &version, &profile),
+        "successfully deserialized %s into %s %s (should have failed)",
+        invalid_deserialize_glsl[i], gst_glsl_version_to_string (version),
+        gst_glsl_profile_to_string (profile));
+  }
+
+  /* failures */
+  for (i = 0; i < G_N_ELEMENTS (invalid_serialize_glsl); i++) {
+    gchar *version_profile_s;
+
+    version_profile_s =
+        gst_glsl_version_profile_to_string (invalid_serialize_glsl[i].version,
+        invalid_serialize_glsl[i].profile);
+
+    fail_if (version_profile_s != NULL,
+        "successfully serialized %s from %s %s (should have failed)",
+        version_profile_s,
+        gst_glsl_version_to_string (invalid_serialize_glsl[i].version),
+        gst_glsl_profile_to_string (invalid_serialize_glsl[i].profile));
+
+    g_free (version_profile_s);
+  }
+
+  /* map strings to version/profile */
+  for (i = 0; i < G_N_ELEMENTS (glsl_str_map); i++) {
+    GstGLSLVersion version;
+    GstGLSLProfile profile;
+
+    fail_unless (glsl_str_map[i].succeed ==
+        gst_glsl_string_get_version_profile (glsl_str_map[i].name, &version,
+            &profile), "Incorrect result for parsing \'%s\': %s",
+        glsl_str_map[i].name, glsl_str_map[i].succeed ? "false" : "true");
+    if (glsl_str_map[i].succeed) {
+      fail_unless (version == glsl_str_map[i].version, "With %s: %s != %s",
+          glsl_str_map[i].name,
+          gst_glsl_version_to_string (glsl_str_map[i].version),
+          gst_glsl_version_to_string (version));
+      fail_unless (profile == glsl_str_map[i].profile, "With %s: %s != %s",
+          glsl_str_map[i].name,
+          gst_glsl_profile_to_string (glsl_str_map[i].profile),
+          gst_glsl_profile_to_string (profile));
+    }
+  }
+
+  /* special ones */
+  {
+    GstGLSLVersion version;
+    GstGLSLProfile profile;
+    gchar *version_profile_s;
+
+    version_profile_s =
+        gst_glsl_version_profile_to_string (GST_GLSL_VERSION_100,
+        GST_GLSL_PROFILE_ES);
+    fail_unless (g_strcmp0 (version_profile_s, "100") == 0, "%s != 100",
+        version_profile_s);
+    g_free (version_profile_s);
+
+    version_profile_s =
+        gst_glsl_version_profile_to_string (GST_GLSL_VERSION_100,
+        GST_GLSL_PROFILE_NONE);
+    fail_unless (g_strcmp0 (version_profile_s, "100") == 0, "%s != 100",
+        version_profile_s);
+    g_free (version_profile_s);
+
+    fail_unless (gst_glsl_version_profile_from_string ("100", &version,
+            &profile));
+    fail_unless (version == GST_GLSL_VERSION_100
+        && profile == GST_GLSL_PROFILE_ES, "100 != %s %s",
+        gst_glsl_version_to_string (version),
+        gst_glsl_profile_to_string (profile));
+  }
+}
+
+GST_END_TEST;
+
+static Suite *
+gst_gl_upload_suite (void)
+{
+  Suite *s = suite_create ("GstGLSL");
+  TCase *tc_chain = tcase_create ("glsl");
+
+  suite_add_tcase (s, tc_chain);
+  tcase_add_checked_fixture (tc_chain, setup, teardown);
+  tcase_add_test (tc_chain, test_serialization);
+
+  return s;
+}
+
+GST_CHECK_MAIN (gst_gl_upload);
diff --git a/tests/check/libs/gstglupload.c b/tests/check/libs/gstglupload.c
index 11e2fe0..64d7a33 100644
--- a/tests/check/libs/gstglupload.c
+++ b/tests/check/libs/gstglupload.c
@@ -29,41 +29,14 @@
 
 #include <stdio.h>
 
-#if GST_GL_HAVE_GLES2
-/* *INDENT-OFF* */
-static const gchar *vertex_shader_str_gles2 =
-      "attribute vec4 a_position;   \n"
-      "attribute vec2 a_texCoord;   \n"
-      "varying vec2 v_texCoord;     \n"
-      "void main()                  \n"
-      "{                            \n"
-      "   gl_Position = a_position; \n"
-      "   v_texCoord = a_texCoord;  \n"
-      "}                            \n";
-
-static const gchar *fragment_shader_str_gles2 =
-      "precision mediump float;                            \n"
-      "varying vec2 v_texCoord;                            \n"
-      "uniform sampler2D s_texture;                        \n"
-      "void main()                                         \n"
-      "{                                                   \n"
-      "  gl_FragColor = texture2D( s_texture, v_texCoord );\n"
-      "}                                                   \n";
-/* *INDENT-ON* */
-#endif
-
 static GstGLDisplay *display;
 static GstGLContext *context;
 static GstGLWindow *window;
 static GstGLUpload *upload;
 static guint tex_id;
-#if GST_GL_HAVE_GLES2
-static GError *error;
 static GstGLShader *shader;
 static GLint shader_attr_position_loc;
 static GLint shader_attr_texture_loc;
-#endif
-
 
 #define FORMAT GST_VIDEO_GL_TEXTURE_TYPE_RGBA
 #define WIDTH 10
@@ -118,25 +91,15 @@
 static void
 init (gpointer data)
 {
-#if GST_GL_HAVE_GLES2
-  if (gst_gl_context_get_gl_api (context) & GST_GL_API_GLES2) {
-    shader = gst_gl_shader_new (context);
-    fail_if (shader == NULL, "failed to create shader object");
+  GError *error = NULL;
 
-    gst_gl_shader_set_vertex_source (shader, vertex_shader_str_gles2);
-    gst_gl_shader_set_fragment_source (shader, fragment_shader_str_gles2);
+  shader = gst_gl_shader_new_default (context, &error);
+  fail_if (shader == NULL, "failed to create shader object %s", error->message);
 
-    error = NULL;
-    gst_gl_shader_compile (shader, &error);
-    fail_if (error != NULL, "Error compiling shader %s\n",
-        error ? error->message : "Unknown Error");
-
-    shader_attr_position_loc =
-        gst_gl_shader_get_attribute_location (shader, "a_position");
-    shader_attr_texture_loc =
-        gst_gl_shader_get_attribute_location (shader, "a_texCoord");
-  }
-#endif
+  shader_attr_position_loc =
+      gst_gl_shader_get_attribute_location (shader, "a_position");
+  shader_attr_texture_loc =
+      gst_gl_shader_get_attribute_location (shader, "a_texCoord");
 }
 
 static void
@@ -145,81 +108,38 @@
   GstGLContext *context = data;
   GstGLContextClass *context_class = GST_GL_CONTEXT_GET_CLASS (context);
   const GstGLFuncs *gl = context->gl_vtable;
+  const GLfloat vVertices[] = { 1.0f, 1.0f, 0.0f,
+    1.0f, 0.0f,
+    -1.0f, 1.0f, 0.0f,
+    0.0f, 0.0f,
+    -1.0f, -1.0f, 0.0f,
+    0.0f, 1.0f,
+    1.0f, -1.0f, 0.0f,
+    1.0f, 1.0f
+  };
 
-  /* redraw the texture into the system provided framebuffer */
+  GLushort indices[] = { 0, 1, 2, 0, 2, 3 };
 
-#if GST_GL_HAVE_OPENGL
-  if (gst_gl_context_get_gl_api (context) & GST_GL_API_OPENGL) {
-    GLfloat verts[8] = { 1.0f, 1.0f,
-      -1.0f, 1.0f,
-      -1.0f, -1.0f,
-      1.0f, -1.0f
-    };
-    GLfloat texcoords[8] = { 1.0f, 0.0f,
-      0.0f, 0.0f,
-      0.0f, 1.0f,
-      1.0f, 1.0f
-    };
+  gl->Clear (GL_COLOR_BUFFER_BIT);
 
-    gl->Viewport (0, 0, 10, 10);
+  gst_gl_shader_use (shader);
 
-    gl->Clear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
+  /* Load the vertex position */
+  gl->VertexAttribPointer (shader_attr_position_loc, 3,
+      GL_FLOAT, GL_FALSE, 5 * sizeof (GLfloat), vVertices);
 
-    gl->MatrixMode (GL_PROJECTION);
-    gl->LoadIdentity ();
+  /* Load the texture coordinate */
+  gl->VertexAttribPointer (shader_attr_texture_loc, 2,
+      GL_FLOAT, GL_FALSE, 5 * sizeof (GLfloat), &vVertices[3]);
 
-    gl->ActiveTexture (GL_TEXTURE_2D);
-    gl->BindTexture (GL_TEXTURE_2D, tex_id);
+  gl->EnableVertexAttribArray (shader_attr_position_loc);
+  gl->EnableVertexAttribArray (shader_attr_texture_loc);
 
-    gl->EnableClientState (GL_VERTEX_ARRAY);
-    gl->VertexPointer (2, GL_FLOAT, 0, &verts);
+  gl->ActiveTexture (GL_TEXTURE0);
+  gl->BindTexture (GL_TEXTURE_2D, tex_id);
+  gst_gl_shader_set_uniform_1i (shader, "s_texture", 0);
 
-    gl->ClientActiveTexture (GL_TEXTURE0);
-    gl->EnableClientState (GL_TEXTURE_COORD_ARRAY);
-    gl->TexCoordPointer (2, GL_FLOAT, 0, &texcoords);
-
-    gl->DrawArrays (GL_TRIANGLE_FAN, 0, 4);
-
-    gl->DisableClientState (GL_VERTEX_ARRAY);
-    gl->DisableClientState (GL_TEXTURE_COORD_ARRAY);
-  }
-#endif
-#if GST_GL_HAVE_GLES2
-  if (gst_gl_context_get_gl_api (context) & GST_GL_API_GLES2) {
-    const GLfloat vVertices[] = { 1.0f, 1.0f, 0.0f,
-      1.0f, 0.0f,
-      -1.0f, 1.0f, 0.0f,
-      0.0f, 0.0f,
-      -1.0f, -1.0f, 0.0f,
-      0.0f, 1.0f,
-      1.0f, -1.0f, 0.0f,
-      1.0f, 1.0f
-    };
-
-    GLushort indices[] = { 0, 1, 2, 0, 2, 3 };
-
-    gl->Clear (GL_COLOR_BUFFER_BIT);
-
-    gst_gl_shader_use (shader);
-
-    /* Load the vertex position */
-    gl->VertexAttribPointer (shader_attr_position_loc, 3,
-        GL_FLOAT, GL_FALSE, 5 * sizeof (GLfloat), vVertices);
-
-    /* Load the texture coordinate */
-    gl->VertexAttribPointer (shader_attr_texture_loc, 2,
-        GL_FLOAT, GL_FALSE, 5 * sizeof (GLfloat), &vVertices[3]);
-
-    gl->EnableVertexAttribArray (shader_attr_position_loc);
-    gl->EnableVertexAttribArray (shader_attr_texture_loc);
-
-    gl->ActiveTexture (GL_TEXTURE0);
-    gl->BindTexture (GL_TEXTURE_2D, tex_id);
-    gst_gl_shader_set_uniform_1i (shader, "s_texture", 0);
-
-    gl->DrawElements (GL_TRIANGLES, 6, GL_UNSIGNED_SHORT, indices);
-  }
-#endif
+  gl->DrawElements (GL_TRIANGLES, 6, GL_UNSIGNED_SHORT, indices);
 
   context_class->swap_buffers (context);
 }
@@ -265,6 +185,8 @@
     i++;
   }
 
+  gst_caps_unref (in_caps);
+  gst_caps_unref (out_caps);
   gst_buffer_unref (inbuf);
   gst_buffer_unref (outbuf);
 }
@@ -273,6 +195,8 @@
 
 GST_START_TEST (test_upload_buffer)
 {
+  GstGLBaseMemoryAllocator *base_mem_alloc;
+  GstGLVideoAllocationParams *params;
   GstBuffer *buffer, *outbuf;
   GstGLMemory *gl_mem;
   GstCaps *in_caps, *out_caps;
@@ -281,13 +205,20 @@
   gint i = 0;
   gboolean res;
 
+  base_mem_alloc =
+      GST_GL_BASE_MEMORY_ALLOCATOR (gst_allocator_find
+      (GST_GL_MEMORY_ALLOCATOR_NAME));
+
   in_caps = gst_caps_from_string ("video/x-raw,format=RGBA,width=10,height=10");
   gst_video_info_from_caps (&in_info, in_caps);
 
   /* create GL buffer */
   buffer = gst_buffer_new ();
-  gl_mem =
-      gst_gl_memory_wrapped (context, &in_info, 0, NULL, rgba_data, NULL, NULL);
+  params = gst_gl_video_allocation_params_new_wrapped_data (context, NULL,
+      &in_info, 0, NULL, GST_GL_TEXTURE_TARGET_2D, rgba_data, NULL, NULL);
+  gl_mem = (GstGLMemory *) gst_gl_base_memory_alloc (base_mem_alloc,
+      (GstGLAllocationParams *) params);
+  gst_gl_allocation_params_free ((GstGLAllocationParams *) params);
 
   res =
       gst_memory_map ((GstMemory *) gl_mem, &map_info,
@@ -318,64 +249,11 @@
     i++;
   }
 
-  gst_gl_upload_release_buffer (upload);
+  gst_caps_unref (in_caps);
+  gst_caps_unref (out_caps);
   gst_buffer_unref (buffer);
   gst_buffer_unref (outbuf);
-}
-
-GST_END_TEST;
-
-GST_START_TEST (test_upload_meta_producer)
-{
-  GstBuffer *buffer;
-  GstGLMemory *gl_mem;
-  GstVideoInfo in_info;
-  GstVideoGLTextureUploadMeta *gl_upload_meta;
-  guint tex_ids[] = { 0, 0, 0, 0 };
-  GstGLUploadMeta *upload_meta;
-  gboolean res;
-  gint i = 0;
-
-  gst_video_info_set_format (&in_info, GST_VIDEO_FORMAT_RGBA, WIDTH, HEIGHT);
-
-  /* create GL buffer */
-  buffer = gst_buffer_new ();
-  gl_mem =
-      gst_gl_memory_wrapped (context, &in_info, 0, NULL, rgba_data, NULL, NULL);
-  gst_buffer_append_memory (buffer, (GstMemory *) gl_mem);
-
-  gst_gl_context_gen_texture (context, &tex_ids[0], GST_VIDEO_FORMAT_RGBA,
-      WIDTH, HEIGHT);
-
-  upload_meta = gst_gl_upload_meta_new (context);
-  gst_gl_upload_meta_set_format (upload_meta, &in_info);
-
-  gst_buffer_add_video_meta_full (buffer, 0, GST_VIDEO_FORMAT_RGBA, WIDTH,
-      HEIGHT, 1, in_info.offset, in_info.stride);
-  gst_gl_upload_meta_add_to_buffer (upload_meta, buffer);
-
-  gl_upload_meta = gst_buffer_get_video_gl_texture_upload_meta (buffer);
-  fail_if (gl_upload_meta == NULL, "Failed to add GstVideoGLTextureUploadMeta"
-      " to buffer\n");
-
-  res = gst_video_gl_texture_upload_meta_upload (gl_upload_meta, tex_ids);
-  fail_if (res == FALSE, "Failed to upload GstVideoGLTextureUploadMeta\n");
-
-  tex_id = tex_ids[0];
-
-  gst_gl_window_set_preferred_size (window, WIDTH, HEIGHT);
-  gst_gl_window_draw (window);
-  gst_gl_window_send_message (window, GST_GL_WINDOW_CB (init), context);
-
-  while (i < 2) {
-    gst_gl_window_send_message (window, GST_GL_WINDOW_CB (draw_render),
-        context);
-    i++;
-  }
-
-  gst_object_unref (upload_meta);
-  gst_gl_context_del_texture (context, &tex_ids[0]);
-  gst_buffer_unref (buffer);
+  gst_object_unref (base_mem_alloc);
 }
 
 GST_END_TEST;
@@ -391,7 +269,6 @@
   tcase_add_checked_fixture (tc_chain, setup, teardown);
   tcase_add_test (tc_chain, test_upload_data);
   tcase_add_test (tc_chain, test_upload_buffer);
-  tcase_add_test (tc_chain, test_upload_meta_producer);
 
   return s;
 }
diff --git a/tests/check/libs/player.c b/tests/check/libs/player.c
new file mode 100644
index 0000000..5586e63
--- /dev/null
+++ b/tests/check/libs/player.c
@@ -0,0 +1,1499 @@
+/* GStreamer
+ *
+ * Copyright (C) 2014-2015 Sebastian Dröge <sebastian@centricular.com>
+ * Copyright (C) 2015 Brijesh Singh <brijesh.ksingh@gmail.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+/* TODO:
+ * - start with pause, go to playing
+ * - play, pause, play
+ * - set uri in play/pause
+ * - play/pause after eos
+ * - seek in play/pause/stopped, after eos, back to 0, after duration
+ * - http buffering
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#ifdef HAVE_VALGRIND
+# include <valgrind/valgrind.h>
+#endif
+
+#include <gst/check/gstcheck.h>
+
+#define fail_unless_equals_int(a, b)                                    \
+G_STMT_START {                                                          \
+  int first = a;                                                        \
+  int second = b;                                                       \
+  fail_unless(first == second,                                          \
+    "'" #a "' (%d) is not equal to '" #b"' (%d)", first, second);       \
+} G_STMT_END;
+
+#define fail_unless_equals_uint64(a, b)                                 \
+G_STMT_START {                                                          \
+  guint64 first = a;                                                    \
+  guint64 second = b;                                                   \
+  fail_unless(first == second,                                          \
+    "'" #a "' (%" G_GUINT64_FORMAT ") is not equal to '" #b"' (%"       \
+    G_GUINT64_FORMAT ")", first, second);                               \
+} G_STMT_END;
+
+#define fail_unless_equals_double(a, b)                                 \
+G_STMT_START {                                                          \
+  double first = a;                                                     \
+  double second = b;                                                    \
+  fail_unless(first == second,                                          \
+    "'" #a "' (%lf) is not equal to '" #b"' (%lf)", first, second);     \
+} G_STMT_END;
+
+#include <gst/player/player.h>
+
+START_TEST (test_create_and_free)
+{
+  GstPlayer *player;
+
+  player = gst_player_new (NULL, NULL);
+  fail_unless (player != NULL);
+  g_object_unref (player);
+}
+
+END_TEST;
+
+START_TEST (test_set_and_get_uri)
+{
+  GstPlayer *player;
+  gchar *uri;
+
+  player = gst_player_new (NULL, NULL);
+
+  fail_unless (player != NULL);
+
+  gst_player_set_uri (player, "file:///path/to/a/file");
+  uri = gst_player_get_uri (player);
+
+  fail_unless (g_strcmp0 (uri, "file:///path/to/a/file") == 0);
+
+  g_free (uri);
+  g_object_unref (player);
+}
+
+END_TEST;
+
+START_TEST (test_set_and_get_position_update_interval)
+{
+  GstPlayer *player;
+  guint interval = 0;
+
+  player = gst_player_new (NULL, NULL);
+
+  fail_unless (player != NULL);
+
+  gst_player_set_position_update_interval (player, 500);
+  interval = gst_player_get_position_update_interval (player);
+
+  fail_unless (interval == 500);
+
+  g_object_set (player, "position-update-interval", 1000, NULL);
+  g_object_get (player, "position-update-interval", &interval, NULL);
+
+  fail_unless_equals_int (interval, 1000);
+
+  g_object_unref (player);
+}
+
+END_TEST;
+
+typedef enum
+{
+  STATE_CHANGE_BUFFERING,
+  STATE_CHANGE_DURATION_CHANGED,
+  STATE_CHANGE_END_OF_STREAM,
+  STATE_CHANGE_ERROR,
+  STATE_CHANGE_WARNING,
+  STATE_CHANGE_POSITION_UPDATED,
+  STATE_CHANGE_STATE_CHANGED,
+  STATE_CHANGE_VIDEO_DIMENSIONS_CHANGED,
+  STATE_CHANGE_MEDIA_INFO_UPDATED,
+  STATE_CHANGE_SEEK_DONE,
+} TestPlayerStateChange;
+
+static const gchar *
+test_player_state_change_get_name (TestPlayerStateChange change)
+{
+  switch (change) {
+    case STATE_CHANGE_BUFFERING:
+      return "buffering";
+    case STATE_CHANGE_DURATION_CHANGED:
+      return "duration-changed";
+    case STATE_CHANGE_END_OF_STREAM:
+      return "end-of-stream";
+    case STATE_CHANGE_WARNING:
+      return "warning";
+    case STATE_CHANGE_ERROR:
+      return "error";
+    case STATE_CHANGE_POSITION_UPDATED:
+      return "position-updated";
+    case STATE_CHANGE_STATE_CHANGED:
+      return "state-changed";
+    case STATE_CHANGE_VIDEO_DIMENSIONS_CHANGED:
+      return "video-dimensions-changed";
+    case STATE_CHANGE_MEDIA_INFO_UPDATED:
+      return "media-info-updated";
+    case STATE_CHANGE_SEEK_DONE:
+      return "seek-done";
+    default:
+      g_assert_not_reached ();
+      break;
+  }
+}
+
+typedef struct _TestPlayerState TestPlayerState;
+struct _TestPlayerState
+{
+  GMainLoop *loop;
+
+  gint buffering_percent;
+  guint64 position, duration, seek_done_position;
+  gboolean end_of_stream, error, warning, seek_done;
+  GstPlayerState state;
+  gint width, height;
+  GstPlayerMediaInfo *media_info;
+
+  void (*test_callback) (GstPlayer * player, TestPlayerStateChange change,
+      TestPlayerState * old_state, TestPlayerState * new_state);
+  gpointer test_data;
+};
+
+static void
+test_player_state_change_debug (GstPlayer * player,
+    TestPlayerStateChange change, TestPlayerState * old_state,
+    TestPlayerState * new_state)
+{
+  GST_DEBUG_OBJECT (player, "Changed %s:\n"
+      "\tbuffering %d%% -> %d%%\n"
+      "\tposition %" GST_TIME_FORMAT " -> %" GST_TIME_FORMAT "\n"
+      "\tduration %" GST_TIME_FORMAT " -> %" GST_TIME_FORMAT "\n"
+      "\tseek position %" GST_TIME_FORMAT " -> %" GST_TIME_FORMAT "\n"
+      "\tend-of-stream %d -> %d\n"
+      "\terror %d -> %d\n"
+      "\tseek_done %d -> %d\n"
+      "\tstate %s -> %s\n"
+      "\twidth/height %d/%d -> %d/%d\n"
+      "\tmedia_info %p -> %p",
+      test_player_state_change_get_name (change),
+      old_state->buffering_percent, new_state->buffering_percent,
+      GST_TIME_ARGS (old_state->position), GST_TIME_ARGS (new_state->position),
+      GST_TIME_ARGS (old_state->duration), GST_TIME_ARGS (new_state->duration),
+      GST_TIME_ARGS (old_state->seek_done_position),
+      GST_TIME_ARGS (new_state->seek_done_position), old_state->end_of_stream,
+      new_state->end_of_stream, old_state->error, new_state->error,
+      old_state->seek_done, new_state->seek_done,
+      gst_player_state_get_name (old_state->state),
+      gst_player_state_get_name (new_state->state), old_state->width,
+      old_state->height, new_state->width, new_state->height,
+      old_state->media_info, new_state->media_info);
+}
+
+static void
+test_player_state_reset (TestPlayerState * state)
+{
+  state->buffering_percent = 100;
+  state->position = state->duration = state->seek_done_position = -1;
+  state->end_of_stream = state->error = state->seek_done = FALSE;
+  state->state = GST_PLAYER_STATE_STOPPED;
+  state->width = state->height = 0;
+  state->media_info = NULL;
+}
+
+static void
+buffering_cb (GstPlayer * player, gint percent, TestPlayerState * state)
+{
+  TestPlayerState old_state = *state;
+
+  state->buffering_percent = percent;
+  test_player_state_change_debug (player, STATE_CHANGE_BUFFERING, &old_state,
+      state);
+  state->test_callback (player, STATE_CHANGE_BUFFERING, &old_state, state);
+}
+
+static void
+duration_changed_cb (GstPlayer * player, guint64 duration,
+    TestPlayerState * state)
+{
+  TestPlayerState old_state = *state;
+
+  state->duration = duration;
+  test_player_state_change_debug (player, STATE_CHANGE_DURATION_CHANGED,
+      &old_state, state);
+  state->test_callback (player, STATE_CHANGE_DURATION_CHANGED, &old_state,
+      state);
+}
+
+static void
+end_of_stream_cb (GstPlayer * player, TestPlayerState * state)
+{
+  TestPlayerState old_state = *state;
+
+  state->end_of_stream = TRUE;
+  test_player_state_change_debug (player, STATE_CHANGE_END_OF_STREAM,
+      &old_state, state);
+  state->test_callback (player, STATE_CHANGE_END_OF_STREAM, &old_state, state);
+}
+
+static void
+error_cb (GstPlayer * player, GError * error, TestPlayerState * state)
+{
+  TestPlayerState old_state = *state;
+
+  state->error = TRUE;
+  test_player_state_change_debug (player, STATE_CHANGE_ERROR, &old_state,
+      state);
+  state->test_callback (player, STATE_CHANGE_ERROR, &old_state, state);
+}
+
+static void
+warning_cb (GstPlayer * player, GError * error, TestPlayerState * state)
+{
+  TestPlayerState old_state = *state;
+
+  state->warning = TRUE;
+  test_player_state_change_debug (player, STATE_CHANGE_WARNING, &old_state,
+      state);
+  state->test_callback (player, STATE_CHANGE_WARNING, &old_state, state);
+}
+
+static void
+position_updated_cb (GstPlayer * player, guint64 position,
+    TestPlayerState * state)
+{
+  TestPlayerState old_state = *state;
+
+  state->position = position;
+  test_player_state_change_debug (player, STATE_CHANGE_POSITION_UPDATED,
+      &old_state, state);
+  state->test_callback (player, STATE_CHANGE_POSITION_UPDATED, &old_state,
+      state);
+}
+
+static void
+media_info_updated_cb (GstPlayer * player, GstPlayerMediaInfo * media_info,
+    TestPlayerState * state)
+{
+  TestPlayerState old_state = *state;
+
+  state->media_info = media_info;
+
+  test_player_state_change_debug (player, STATE_CHANGE_MEDIA_INFO_UPDATED,
+      &old_state, state);
+  state->test_callback (player, STATE_CHANGE_MEDIA_INFO_UPDATED, &old_state,
+      state);
+}
+
+static void
+state_changed_cb (GstPlayer * player, GstPlayerState player_state,
+    TestPlayerState * state)
+{
+  TestPlayerState old_state = *state;
+
+  state->state = player_state;
+
+  if (player_state == GST_PLAYER_STATE_STOPPED)
+    test_player_state_reset (state);
+
+  test_player_state_change_debug (player, STATE_CHANGE_STATE_CHANGED,
+      &old_state, state);
+  state->test_callback (player, STATE_CHANGE_STATE_CHANGED, &old_state, state);
+}
+
+static void
+video_dimensions_changed_cb (GstPlayer * player, gint width, gint height,
+    TestPlayerState * state)
+{
+  TestPlayerState old_state = *state;
+
+  state->width = width;
+  state->height = height;
+  test_player_state_change_debug (player, STATE_CHANGE_VIDEO_DIMENSIONS_CHANGED,
+      &old_state, state);
+  state->test_callback (player, STATE_CHANGE_VIDEO_DIMENSIONS_CHANGED,
+      &old_state, state);
+}
+
+static void
+seek_done_cb (GstPlayer * player, guint64 position, TestPlayerState * state)
+{
+  TestPlayerState old_state = *state;
+
+  state->seek_done = TRUE;
+  state->seek_done_position = position;
+  test_player_state_change_debug (player, STATE_CHANGE_SEEK_DONE,
+      &old_state, state);
+  state->test_callback (player, STATE_CHANGE_SEEK_DONE, &old_state, state);
+}
+
+static GstPlayer *
+test_player_new (TestPlayerState * state)
+{
+  GstPlayer *player;
+  GstElement *playbin, *fakesink;
+
+  player =
+      gst_player_new (NULL,
+      gst_player_g_main_context_signal_dispatcher_new (NULL));
+  fail_unless (player != NULL);
+
+  test_player_state_reset (state);
+
+  playbin = gst_player_get_pipeline (player);
+  fakesink = gst_element_factory_make ("fakesink", "audio-sink");
+  g_object_set (fakesink, "sync", TRUE, NULL);
+  g_object_set (playbin, "audio-sink", fakesink, NULL);
+  fakesink = gst_element_factory_make ("fakesink", "video-sink");
+  g_object_set (fakesink, "sync", TRUE, NULL);
+  g_object_set (playbin, "video-sink", fakesink, NULL);
+  gst_object_unref (playbin);
+
+  g_signal_connect (player, "buffering", G_CALLBACK (buffering_cb), state);
+  g_signal_connect (player, "duration-changed",
+      G_CALLBACK (duration_changed_cb), state);
+  g_signal_connect (player, "end-of-stream", G_CALLBACK (end_of_stream_cb),
+      state);
+  g_signal_connect (player, "error", G_CALLBACK (error_cb), state);
+  g_signal_connect (player, "warning", G_CALLBACK (warning_cb), state);
+  g_signal_connect (player, "position-updated",
+      G_CALLBACK (position_updated_cb), state);
+  g_signal_connect (player, "state-changed", G_CALLBACK (state_changed_cb),
+      state);
+  g_signal_connect (player, "media-info-updated",
+      G_CALLBACK (media_info_updated_cb), state);
+  g_signal_connect (player, "video-dimensions-changed",
+      G_CALLBACK (video_dimensions_changed_cb), state);
+  g_signal_connect (player, "seek-done", G_CALLBACK (seek_done_cb), state);
+
+  return player;
+}
+
+static void
+test_play_audio_video_eos_cb (GstPlayer * player, TestPlayerStateChange change,
+    TestPlayerState * old_state, TestPlayerState * new_state)
+{
+  gint step = GPOINTER_TO_INT (new_state->test_data);
+  gboolean video;
+
+  video = ! !(step & 0x10);
+  step = (step & (~0x10));
+
+  switch (step) {
+    case 0:
+      fail_unless_equals_int (change, STATE_CHANGE_STATE_CHANGED);
+      fail_unless_equals_int (old_state->state, GST_PLAYER_STATE_STOPPED);
+      fail_unless_equals_int (new_state->state, GST_PLAYER_STATE_BUFFERING);
+      new_state->test_data =
+          GINT_TO_POINTER ((video ? 0x10 : 0x00) | (step + 1));
+      break;
+    case 1:
+      fail_unless_equals_int (change, STATE_CHANGE_MEDIA_INFO_UPDATED);
+      new_state->test_data =
+          GINT_TO_POINTER ((video ? 0x10 : 0x00) | (step + 1));
+      break;
+    case 2:
+      fail_unless_equals_int (change, STATE_CHANGE_VIDEO_DIMENSIONS_CHANGED);
+      if (video) {
+        fail_unless_equals_int (new_state->width, 320);
+        fail_unless_equals_int (new_state->height, 240);
+      } else {
+        fail_unless_equals_int (new_state->width, 0);
+        fail_unless_equals_int (new_state->height, 0);
+      }
+      new_state->test_data =
+          GINT_TO_POINTER ((video ? 0x10 : 0x00) | (step + 1));
+      break;
+    case 3:
+      fail_unless_equals_int (change, STATE_CHANGE_DURATION_CHANGED);
+      fail_unless_equals_uint64 (new_state->duration,
+          G_GUINT64_CONSTANT (464399092));
+      new_state->test_data =
+          GINT_TO_POINTER ((video ? 0x10 : 0x00) | (step + 1));
+      break;
+    case 4:
+      fail_unless_equals_int (change, STATE_CHANGE_POSITION_UPDATED);
+      fail_unless_equals_uint64 (new_state->position, G_GUINT64_CONSTANT (0));
+      new_state->test_data =
+          GINT_TO_POINTER ((video ? 0x10 : 0x00) | (step + 1));
+      break;
+    case 5:
+      fail_unless_equals_int (change, STATE_CHANGE_STATE_CHANGED);
+      fail_unless_equals_int (old_state->state, GST_PLAYER_STATE_BUFFERING);
+      fail_unless_equals_int (new_state->state, GST_PLAYER_STATE_PLAYING);
+      new_state->test_data =
+          GINT_TO_POINTER ((video ? 0x10 : 0x00) | (step + 1));
+      break;
+    case 6:
+      if (change == STATE_CHANGE_POSITION_UPDATED) {
+        fail_unless (old_state->position <= new_state->position);
+      } else {
+        fail_unless_equals_uint64 (old_state->position, old_state->duration);
+        fail_unless_equals_int (change, STATE_CHANGE_END_OF_STREAM);
+        new_state->test_data =
+            GINT_TO_POINTER ((video ? 0x10 : 0x00) | (step + 1));
+      }
+      break;
+    case 7:
+      fail_unless_equals_int (change, STATE_CHANGE_STATE_CHANGED);
+      fail_unless_equals_int (old_state->state, GST_PLAYER_STATE_PLAYING);
+      fail_unless_equals_int (new_state->state, GST_PLAYER_STATE_STOPPED);
+      new_state->test_data =
+          GINT_TO_POINTER ((video ? 0x10 : 0x00) | (step + 1));
+      g_main_loop_quit (new_state->loop);
+      break;
+    default:
+      fail ();
+      break;
+  }
+}
+
+START_TEST (test_play_audio_eos)
+{
+  GstPlayer *player;
+  TestPlayerState state;
+  gchar *uri;
+
+  memset (&state, 0, sizeof (state));
+  state.loop = g_main_loop_new (NULL, FALSE);
+  state.test_callback = test_play_audio_video_eos_cb;
+  state.test_data = GINT_TO_POINTER (0);
+
+  player = test_player_new (&state);
+
+  fail_unless (player != NULL);
+
+  uri = gst_filename_to_uri (TEST_PATH "/audio-short.ogg", NULL);
+  fail_unless (uri != NULL);
+  gst_player_set_uri (player, uri);
+  g_free (uri);
+
+  gst_player_play (player);
+  g_main_loop_run (state.loop);
+
+  fail_unless_equals_int (GPOINTER_TO_INT (state.test_data), 8);
+
+  g_object_unref (player);
+  g_main_loop_unref (state.loop);
+}
+
+END_TEST;
+
+static void
+test_audio_info (GstPlayerMediaInfo * media_info)
+{
+  gint i = 0;
+  GList *list;
+
+  for (list = gst_player_get_audio_streams (media_info);
+      list != NULL; list = list->next) {
+    GstPlayerStreamInfo *stream = (GstPlayerStreamInfo *) list->data;
+    GstPlayerAudioInfo *audio_info = (GstPlayerAudioInfo *) stream;
+
+    fail_unless (gst_player_stream_info_get_tags (stream) != NULL);
+    fail_unless (gst_player_stream_info_get_caps (stream) != NULL);
+    fail_unless_equals_string (gst_player_stream_info_get_stream_type (stream),
+        "audio");
+
+    if (i == 0) {
+      fail_unless_equals_string (gst_player_stream_info_get_codec (stream),
+          "MPEG-1 Layer 3 (MP3)");
+      fail_unless_equals_int (gst_player_audio_info_get_sample_rate
+          (audio_info), 48000);
+      fail_unless_equals_int (gst_player_audio_info_get_channels (audio_info),
+          2);
+      fail_unless_equals_int (gst_player_audio_info_get_max_bitrate
+          (audio_info), 192000);
+      fail_unless (gst_player_audio_info_get_language (audio_info) != NULL);
+    } else {
+      fail_unless_equals_string (gst_player_stream_info_get_codec (stream),
+          "MPEG-4 AAC");
+      fail_unless_equals_int (gst_player_audio_info_get_sample_rate
+          (audio_info), 48000);
+      fail_unless_equals_int (gst_player_audio_info_get_channels (audio_info),
+          6);
+      fail_unless (gst_player_audio_info_get_language (audio_info) != NULL);
+    }
+
+    i++;
+  }
+}
+
+static void
+test_video_info (GstPlayerMediaInfo * media_info)
+{
+  GList *list;
+
+  for (list = gst_player_get_video_streams (media_info);
+      list != NULL; list = list->next) {
+    gint fps_d, fps_n;
+    guint par_d, par_n;
+    GstPlayerStreamInfo *stream = (GstPlayerStreamInfo *) list->data;
+    GstPlayerVideoInfo *video_info = (GstPlayerVideoInfo *) stream;
+
+    fail_unless (gst_player_stream_info_get_tags (stream) != NULL);
+    fail_unless (gst_player_stream_info_get_caps (stream) != NULL);
+    fail_unless_equals_int (gst_player_stream_info_get_index (stream), 0);
+    fail_unless (strstr (gst_player_stream_info_get_codec (stream),
+            "H.264") != NULL
+        || strstr (gst_player_stream_info_get_codec (stream), "H264") != NULL);
+    fail_unless_equals_int (gst_player_video_info_get_width (video_info), 320);
+    fail_unless_equals_int (gst_player_video_info_get_height (video_info), 240);
+    gst_player_video_info_get_framerate (video_info, &fps_n, &fps_d);
+    fail_unless_equals_int (fps_n, 24);
+    fail_unless_equals_int (fps_d, 1);
+    gst_player_video_info_get_pixel_aspect_ratio (video_info, &par_n, &par_d);
+    fail_unless_equals_int (par_n, 33);
+    fail_unless_equals_int (par_d, 20);
+  }
+}
+
+static void
+test_subtitle_info (GstPlayerMediaInfo * media_info)
+{
+  GList *list;
+
+  for (list = gst_player_get_subtitle_streams (media_info);
+      list != NULL; list = list->next) {
+    GstPlayerStreamInfo *stream = (GstPlayerStreamInfo *) list->data;
+    GstPlayerSubtitleInfo *sub = (GstPlayerSubtitleInfo *) stream;
+
+    fail_unless_equals_string (gst_player_stream_info_get_stream_type (stream),
+        "subtitle");
+    fail_unless (gst_player_stream_info_get_tags (stream) != NULL);
+    fail_unless (gst_player_stream_info_get_caps (stream) != NULL);
+    fail_unless_equals_string (gst_player_stream_info_get_codec (stream),
+        "Timed Text");
+    fail_unless (gst_player_subtitle_info_get_language (sub) != NULL);
+  }
+}
+
+static void
+test_media_info_object (GstPlayer * player, GstPlayerMediaInfo * media_info)
+{
+  GList *list;
+
+  /* gloabl tag */
+  fail_unless (gst_player_media_info_is_seekable (media_info) == TRUE);
+  fail_unless (gst_player_media_info_get_tags (media_info) != NULL);
+  fail_unless_equals_string (gst_player_media_info_get_title (media_info),
+      "Sintel");
+  fail_unless_equals_string (gst_player_media_info_get_container_format
+      (media_info), "Matroska");
+  fail_unless (gst_player_media_info_get_image_sample (media_info) == NULL);
+  fail_unless (strstr (gst_player_media_info_get_uri (media_info),
+          "sintel.mkv") != NULL);
+
+  /* number of streams */
+  list = gst_player_media_info_get_stream_list (media_info);
+  fail_unless (list != NULL);
+  fail_unless_equals_int (g_list_length (list), 10);
+
+  list = gst_player_get_video_streams (media_info);
+  fail_unless (list != NULL);
+  fail_unless_equals_int (g_list_length (list), 1);
+
+  list = gst_player_get_audio_streams (media_info);
+  fail_unless (list != NULL);
+  fail_unless_equals_int (g_list_length (list), 2);
+
+  list = gst_player_get_subtitle_streams (media_info);
+  fail_unless (list != NULL);
+  fail_unless_equals_int (g_list_length (list), 7);
+
+  /* test subtitle */
+  test_subtitle_info (media_info);
+
+  /* test audio */
+  test_audio_info (media_info);
+
+  /* test video */
+  test_video_info (media_info);
+}
+
+static void
+test_play_media_info_cb (GstPlayer * player, TestPlayerStateChange change,
+    TestPlayerState * old_state, TestPlayerState * new_state)
+{
+  gint completed = GPOINTER_TO_INT (new_state->test_data);
+
+  if (change == STATE_CHANGE_MEDIA_INFO_UPDATED) {
+    test_media_info_object (player, new_state->media_info);
+    new_state->test_data = GINT_TO_POINTER (completed + 1);
+    g_main_loop_quit (new_state->loop);
+  } else if (change == STATE_CHANGE_END_OF_STREAM ||
+      change == STATE_CHANGE_ERROR) {
+    g_main_loop_quit (new_state->loop);
+  }
+}
+
+START_TEST (test_play_media_info)
+{
+  GstPlayer *player;
+  TestPlayerState state;
+  gchar *uri;
+
+  memset (&state, 0, sizeof (state));
+  state.loop = g_main_loop_new (NULL, FALSE);
+  state.test_callback = test_play_media_info_cb;
+  state.test_data = GINT_TO_POINTER (0);
+
+  player = test_player_new (&state);
+
+  fail_unless (player != NULL);
+
+  uri = gst_filename_to_uri (TEST_PATH "/sintel.mkv", NULL);
+  fail_unless (uri != NULL);
+  gst_player_set_uri (player, uri);
+  g_free (uri);
+
+  gst_player_play (player);
+  g_main_loop_run (state.loop);
+
+  fail_unless_equals_int (GPOINTER_TO_INT (state.test_data), 1);
+  g_object_unref (player);
+  g_main_loop_unref (state.loop);
+}
+
+END_TEST;
+
+static void
+test_play_error_invalid_external_suburi_cb (GstPlayer * player,
+    TestPlayerStateChange change, TestPlayerState * old_state,
+    TestPlayerState * new_state)
+{
+  gint steps = GPOINTER_TO_INT (new_state->test_data);
+
+  if (new_state->state == GST_PLAYER_STATE_PLAYING && !steps) {
+    gchar *suburi;
+
+    suburi = gst_filename_to_uri (TEST_PATH "/foo.srt", NULL);
+    fail_unless (suburi != NULL);
+
+    new_state->test_data = GINT_TO_POINTER (steps + 1);
+    /* load invalid suburi */
+    fail_unless (gst_player_set_subtitle_uri (player, suburi) != FALSE);
+    g_free (suburi);
+
+  } else if (steps && change == STATE_CHANGE_WARNING) {
+    new_state->test_data = GINT_TO_POINTER (steps + 1);
+    g_main_loop_quit (new_state->loop);
+
+  } else if (change == STATE_CHANGE_END_OF_STREAM ||
+      change == STATE_CHANGE_ERROR)
+    g_main_loop_quit (new_state->loop);
+}
+
+static void
+test_play_stream_disable_cb (GstPlayer * player,
+    TestPlayerStateChange change, TestPlayerState * old_state,
+    TestPlayerState * new_state)
+{
+  gint steps = GPOINTER_TO_INT (new_state->test_data) & 0xf;
+  gint mask = GPOINTER_TO_INT (new_state->test_data) & 0xf0;
+
+  if (new_state->state == GST_PLAYER_STATE_PLAYING && !steps) {
+    new_state->test_data = GINT_TO_POINTER (0x10 + steps + 1);
+    gst_player_set_audio_track_enabled (player, FALSE);
+
+  } else if (mask == 0x10 && change == STATE_CHANGE_POSITION_UPDATED) {
+    GstPlayerAudioInfo *audio;
+
+    audio = gst_player_get_current_audio_track (player);
+    fail_unless (audio == NULL);
+    new_state->test_data = GINT_TO_POINTER (0x20 + steps + 1);
+    gst_player_set_subtitle_track_enabled (player, FALSE);
+
+  } else if (mask == 0x20 && change == STATE_CHANGE_POSITION_UPDATED) {
+    GstPlayerSubtitleInfo *sub;
+
+    sub = gst_player_get_current_subtitle_track (player);
+    fail_unless (sub == NULL);
+    new_state->test_data = GINT_TO_POINTER (0x30 + steps + 1);
+    g_main_loop_quit (new_state->loop);
+
+  } else if (change == STATE_CHANGE_END_OF_STREAM ||
+      change == STATE_CHANGE_ERROR) {
+    g_main_loop_quit (new_state->loop);
+  }
+}
+
+START_TEST (test_play_stream_disable)
+{
+  GstPlayer *player;
+  TestPlayerState state;
+  gchar *uri;
+
+  memset (&state, 0, sizeof (state));
+  state.loop = g_main_loop_new (NULL, FALSE);
+  state.test_callback = test_play_stream_disable_cb;
+  state.test_data = GINT_TO_POINTER (0);
+
+  player = test_player_new (&state);
+
+  fail_unless (player != NULL);
+
+  uri = gst_filename_to_uri (TEST_PATH "/sintel.mkv", NULL);
+  fail_unless (uri != NULL);
+  gst_player_set_uri (player, uri);
+  g_free (uri);
+
+  gst_player_play (player);
+  g_main_loop_run (state.loop);
+
+  fail_unless_equals_int (GPOINTER_TO_INT (state.test_data), 0x33);
+
+  g_object_unref (player);
+  g_main_loop_unref (state.loop);
+}
+
+END_TEST;
+
+static void
+test_play_stream_switch_audio_cb (GstPlayer * player,
+    TestPlayerStateChange change, TestPlayerState * old_state,
+    TestPlayerState * new_state)
+{
+  gint steps = GPOINTER_TO_INT (new_state->test_data);
+
+  if (new_state->state == GST_PLAYER_STATE_PLAYING && !steps) {
+    gint ret;
+
+    new_state->test_data = GINT_TO_POINTER (steps + 1);
+    ret = gst_player_set_audio_track (player, 1);
+    fail_unless_equals_int (ret, 1);
+
+  } else if (steps && change == STATE_CHANGE_POSITION_UPDATED) {
+    gint index;
+    GstPlayerAudioInfo *audio;
+
+    audio = gst_player_get_current_audio_track (player);
+    fail_unless (audio != NULL);
+    index = gst_player_stream_info_get_index ((GstPlayerStreamInfo *) audio);
+    fail_unless_equals_int (index, 1);
+    g_object_unref (audio);
+
+    new_state->test_data = GINT_TO_POINTER (steps + 1);
+    g_main_loop_quit (new_state->loop);
+
+  } else if (change == STATE_CHANGE_END_OF_STREAM ||
+      change == STATE_CHANGE_ERROR) {
+    g_main_loop_quit (new_state->loop);
+  }
+}
+
+START_TEST (test_play_stream_switch_audio)
+{
+  GstPlayer *player;
+  TestPlayerState state;
+  gchar *uri;
+
+  memset (&state, 0, sizeof (state));
+  state.loop = g_main_loop_new (NULL, FALSE);
+  state.test_callback = test_play_stream_switch_audio_cb;
+  state.test_data = GINT_TO_POINTER (0);
+
+  player = test_player_new (&state);
+
+  fail_unless (player != NULL);
+
+  uri = gst_filename_to_uri (TEST_PATH "/sintel.mkv", NULL);
+  fail_unless (uri != NULL);
+  gst_player_set_uri (player, uri);
+  g_free (uri);
+
+  gst_player_play (player);
+  g_main_loop_run (state.loop);
+
+  fail_unless_equals_int (GPOINTER_TO_INT (state.test_data), 2);
+
+  g_object_unref (player);
+  g_main_loop_unref (state.loop);
+}
+
+END_TEST;
+
+static void
+test_play_stream_switch_subtitle_cb (GstPlayer * player,
+    TestPlayerStateChange change, TestPlayerState * old_state,
+    TestPlayerState * new_state)
+{
+  gint steps = GPOINTER_TO_INT (new_state->test_data);
+
+  if (new_state->state == GST_PLAYER_STATE_PLAYING && !steps) {
+    gint ret;
+
+    new_state->test_data = GINT_TO_POINTER (steps + 1);
+    ret = gst_player_set_subtitle_track (player, 5);
+    fail_unless_equals_int (ret, 1);
+
+  } else if (steps && change == STATE_CHANGE_POSITION_UPDATED) {
+    gint index;
+    GstPlayerSubtitleInfo *sub;
+
+    sub = gst_player_get_current_subtitle_track (player);
+    fail_unless (sub != NULL);
+    index = gst_player_stream_info_get_index ((GstPlayerStreamInfo *) sub);
+    fail_unless_equals_int (index, 5);
+    g_object_unref (sub);
+
+    new_state->test_data = GINT_TO_POINTER (steps + 1);
+    g_main_loop_quit (new_state->loop);
+
+  } else if (change == STATE_CHANGE_END_OF_STREAM ||
+      change == STATE_CHANGE_ERROR) {
+    g_main_loop_quit (new_state->loop);
+  }
+}
+
+START_TEST (test_play_stream_switch_subtitle)
+{
+  GstPlayer *player;
+  TestPlayerState state;
+  gchar *uri;
+
+  memset (&state, 0, sizeof (state));
+  state.loop = g_main_loop_new (NULL, FALSE);
+  state.test_callback = test_play_stream_switch_subtitle_cb;
+  state.test_data = GINT_TO_POINTER (0);
+
+  player = test_player_new (&state);
+
+  fail_unless (player != NULL);
+
+  uri = gst_filename_to_uri (TEST_PATH "/sintel.mkv", NULL);
+  fail_unless (uri != NULL);
+  gst_player_set_uri (player, uri);
+  g_free (uri);
+
+  gst_player_play (player);
+  g_main_loop_run (state.loop);
+
+  fail_unless_equals_int (GPOINTER_TO_INT (state.test_data), 2);
+
+  g_object_unref (player);
+  g_main_loop_unref (state.loop);
+}
+
+END_TEST;
+
+START_TEST (test_play_error_invalid_external_suburi)
+{
+  GstPlayer *player;
+  TestPlayerState state;
+  gchar *uri;
+
+  memset (&state, 0, sizeof (state));
+  state.loop = g_main_loop_new (NULL, FALSE);
+  state.test_callback = test_play_error_invalid_external_suburi_cb;
+  state.test_data = GINT_TO_POINTER (0);
+
+  player = test_player_new (&state);
+
+  fail_unless (player != NULL);
+
+  uri = gst_filename_to_uri (TEST_PATH "/audio-video.ogg", NULL);
+  fail_unless (uri != NULL);
+  gst_player_set_uri (player, uri);
+  g_free (uri);
+
+  gst_player_play (player);
+  g_main_loop_run (state.loop);
+
+  fail_unless_equals_int (GPOINTER_TO_INT (state.test_data), 2);
+
+  g_object_unref (player);
+  g_main_loop_unref (state.loop);
+}
+
+END_TEST;
+
+static gboolean
+has_subtitle_stream (TestPlayerState * new_state)
+{
+  if (gst_player_get_subtitle_streams (new_state->media_info))
+    return TRUE;
+
+  return FALSE;
+}
+
+static void
+test_play_external_suburi_cb (GstPlayer * player,
+    TestPlayerStateChange change, TestPlayerState * old_state,
+    TestPlayerState * new_state)
+{
+  gint steps = GPOINTER_TO_INT (new_state->test_data);
+
+  if (new_state->state == GST_PLAYER_STATE_PLAYING && !steps) {
+    gchar *suburi;
+
+    suburi = gst_filename_to_uri (TEST_PATH "/test_sub.srt", NULL);
+    fail_unless (suburi != NULL);
+
+    fail_unless (gst_player_set_subtitle_uri (player, suburi) != FALSE);
+    g_free (suburi);
+    new_state->test_data = GINT_TO_POINTER (steps + 1);
+
+  } else if (change == STATE_CHANGE_MEDIA_INFO_UPDATED &&
+      has_subtitle_stream (new_state)) {
+    gchar *current_suburi, *suburi;
+
+    current_suburi = gst_player_get_subtitle_uri (player);
+    fail_unless (current_suburi != NULL);
+    suburi = gst_filename_to_uri (TEST_PATH "/test_sub.srt", NULL);
+    fail_unless (suburi != NULL);
+
+    fail_unless_equals_int (g_strcmp0 (current_suburi, suburi), 0);
+
+    g_free (current_suburi);
+    g_free (suburi);
+    new_state->test_data = GINT_TO_POINTER (steps + 1);
+    g_main_loop_quit (new_state->loop);
+
+  } else if (change == STATE_CHANGE_END_OF_STREAM ||
+      change == STATE_CHANGE_ERROR)
+    g_main_loop_quit (new_state->loop);
+}
+
+START_TEST (test_play_external_suburi)
+{
+  GstPlayer *player;
+  TestPlayerState state;
+  gchar *uri;
+
+  memset (&state, 0, sizeof (state));
+  state.loop = g_main_loop_new (NULL, FALSE);
+  state.test_callback = test_play_external_suburi_cb;
+  state.test_data = GINT_TO_POINTER (0);
+
+  player = test_player_new (&state);
+
+  fail_unless (player != NULL);
+
+  uri = gst_filename_to_uri (TEST_PATH "/audio-video.ogg", NULL);
+  fail_unless (uri != NULL);
+  gst_player_set_uri (player, uri);
+  g_free (uri);
+
+  gst_player_play (player);
+  g_main_loop_run (state.loop);
+
+  fail_unless_equals_int (GPOINTER_TO_INT (state.test_data), 2);
+
+  g_object_unref (player);
+  g_main_loop_unref (state.loop);
+}
+
+END_TEST;
+
+static void
+test_play_rate_cb (GstPlayer * player,
+    TestPlayerStateChange change, TestPlayerState * old_state,
+    TestPlayerState * new_state)
+{
+  gint steps = GPOINTER_TO_INT (new_state->test_data) & 0xf;
+  gint mask = GPOINTER_TO_INT (new_state->test_data) & 0xf0;
+
+  if (new_state->state == GST_PLAYER_STATE_PLAYING && !steps) {
+    guint64 dur = -1, pos = -1;
+
+    g_object_get (player, "position", &pos, "duration", &dur, NULL);
+    pos = pos + dur * 0.2;      /* seek 20% */
+    gst_player_seek (player, pos);
+
+    /* default rate should be 1.0 */
+    fail_unless_equals_double (gst_player_get_rate (player), 1.0);
+    new_state->test_data = GINT_TO_POINTER (mask + steps + 1);
+  } else if (change == STATE_CHANGE_END_OF_STREAM ||
+      change == STATE_CHANGE_ERROR) {
+    g_main_loop_quit (new_state->loop);
+  } else if (steps == 1 && change == STATE_CHANGE_SEEK_DONE) {
+    if (mask == 0x10)
+      gst_player_set_rate (player, 1.5);
+    else if (mask == 0x20)
+      gst_player_set_rate (player, -1.0);
+
+    new_state->test_data = GINT_TO_POINTER (mask + steps + 1);
+  } else if (steps && (change == STATE_CHANGE_POSITION_UPDATED)) {
+    if (steps == 10) {
+      g_main_loop_quit (new_state->loop);
+    } else {
+      if (mask == 0x10 && (new_state->position > old_state->position))
+        new_state->test_data = GINT_TO_POINTER (mask + steps + 1);
+      else if (mask == 0x20 && (new_state->position < old_state->position))
+        new_state->test_data = GINT_TO_POINTER (mask + steps + 1);
+    }
+  }
+}
+
+START_TEST (test_play_forward_rate)
+{
+  GstPlayer *player;
+  TestPlayerState state;
+  gchar *uri;
+
+  memset (&state, 0, sizeof (state));
+  state.loop = g_main_loop_new (NULL, FALSE);
+  state.test_callback = test_play_rate_cb;
+  state.test_data = GINT_TO_POINTER (0x10);
+
+  player = test_player_new (&state);
+
+  fail_unless (player != NULL);
+
+  uri = gst_filename_to_uri (TEST_PATH "/audio.ogg", NULL);
+  fail_unless (uri != NULL);
+  gst_player_set_uri (player, uri);
+  g_free (uri);
+
+  gst_player_play (player);
+  g_main_loop_run (state.loop);
+
+  fail_unless_equals_int (GPOINTER_TO_INT (state.test_data) & 0xf, 10);
+
+  g_object_unref (player);
+  g_main_loop_unref (state.loop);
+}
+
+END_TEST;
+
+START_TEST (test_play_backward_rate)
+{
+  GstPlayer *player;
+  TestPlayerState state;
+  gchar *uri;
+
+  memset (&state, 0, sizeof (state));
+  state.loop = g_main_loop_new (NULL, FALSE);
+  state.test_callback = test_play_rate_cb;
+  state.test_data = GINT_TO_POINTER (0x20);
+
+  player = test_player_new (&state);
+
+  fail_unless (player != NULL);
+
+  uri = gst_filename_to_uri (TEST_PATH "/audio.ogg", NULL);
+  fail_unless (uri != NULL);
+  gst_player_set_uri (player, uri);
+  g_free (uri);
+
+  gst_player_play (player);
+  g_main_loop_run (state.loop);
+
+  fail_unless_equals_int (GPOINTER_TO_INT (state.test_data) & 0xf, 10);
+
+  g_object_unref (player);
+  g_main_loop_unref (state.loop);
+}
+
+END_TEST;
+
+START_TEST (test_play_audio_video_eos)
+{
+  GstPlayer *player;
+  TestPlayerState state;
+  gchar *uri;
+
+  memset (&state, 0, sizeof (state));
+  state.loop = g_main_loop_new (NULL, FALSE);
+  state.test_callback = test_play_audio_video_eos_cb;
+  state.test_data = GINT_TO_POINTER (0x10);
+
+  player = test_player_new (&state);
+
+  fail_unless (player != NULL);
+
+  uri = gst_filename_to_uri (TEST_PATH "/audio-video-short.ogg", NULL);
+  fail_unless (uri != NULL);
+  gst_player_set_uri (player, uri);
+  g_free (uri);
+
+  gst_player_play (player);
+  g_main_loop_run (state.loop);
+
+  fail_unless_equals_int (GPOINTER_TO_INT (state.test_data) & (~0x10), 8);
+
+  g_object_unref (player);
+  g_main_loop_unref (state.loop);
+}
+
+END_TEST;
+
+static void
+test_play_error_invalid_uri_cb (GstPlayer * player,
+    TestPlayerStateChange change, TestPlayerState * old_state,
+    TestPlayerState * new_state)
+{
+  gint step = GPOINTER_TO_INT (new_state->test_data);
+
+  switch (step) {
+    case 0:
+      fail_unless_equals_int (change, STATE_CHANGE_STATE_CHANGED);
+      fail_unless_equals_int (old_state->state, GST_PLAYER_STATE_STOPPED);
+      fail_unless_equals_int (new_state->state, GST_PLAYER_STATE_BUFFERING);
+      new_state->test_data = GINT_TO_POINTER (step + 1);
+      break;
+    case 1:
+      fail_unless_equals_int (change, STATE_CHANGE_ERROR);
+      new_state->test_data = GINT_TO_POINTER (step + 1);
+      break;
+    case 2:
+      fail_unless_equals_int (change, STATE_CHANGE_STATE_CHANGED);
+      fail_unless_equals_int (old_state->state, GST_PLAYER_STATE_BUFFERING);
+      fail_unless_equals_int (new_state->state, GST_PLAYER_STATE_STOPPED);
+      new_state->test_data = GINT_TO_POINTER (step + 1);
+      g_main_loop_quit (new_state->loop);
+      break;
+    default:
+      fail ();
+      break;
+  }
+}
+
+START_TEST (test_play_error_invalid_uri)
+{
+  GstPlayer *player;
+  TestPlayerState state;
+
+  memset (&state, 0, sizeof (state));
+  state.loop = g_main_loop_new (NULL, FALSE);
+  state.test_callback = test_play_error_invalid_uri_cb;
+  state.test_data = GINT_TO_POINTER (0);
+
+  player = test_player_new (&state);
+
+  fail_unless (player != NULL);
+
+  gst_player_set_uri (player, "foo://bar");
+
+  gst_player_play (player);
+  g_main_loop_run (state.loop);
+
+  fail_unless_equals_int (GPOINTER_TO_INT (state.test_data), 3);
+
+  g_object_unref (player);
+  g_main_loop_unref (state.loop);
+}
+
+END_TEST;
+
+static void
+test_play_error_invalid_uri_and_play_cb (GstPlayer * player,
+    TestPlayerStateChange change, TestPlayerState * old_state,
+    TestPlayerState * new_state)
+{
+  gint step = GPOINTER_TO_INT (new_state->test_data);
+  gchar *uri;
+
+  switch (step) {
+    case 0:
+      fail_unless_equals_int (change, STATE_CHANGE_STATE_CHANGED);
+      fail_unless_equals_int (old_state->state, GST_PLAYER_STATE_STOPPED);
+      fail_unless_equals_int (new_state->state, GST_PLAYER_STATE_BUFFERING);
+      new_state->test_data = GINT_TO_POINTER (step + 1);
+      break;
+    case 1:
+      fail_unless_equals_int (change, STATE_CHANGE_ERROR);
+      new_state->test_data = GINT_TO_POINTER (step + 1);
+      break;
+    case 2:
+      fail_unless_equals_int (change, STATE_CHANGE_STATE_CHANGED);
+      fail_unless_equals_int (old_state->state, GST_PLAYER_STATE_BUFFERING);
+      fail_unless_equals_int (new_state->state, GST_PLAYER_STATE_STOPPED);
+      new_state->test_data = GINT_TO_POINTER (step + 1);
+
+      uri = gst_filename_to_uri (TEST_PATH "/audio-short.ogg", NULL);
+      fail_unless (uri != NULL);
+      gst_player_set_uri (player, uri);
+      g_free (uri);
+
+      gst_player_play (player);
+      break;
+    case 3:
+      fail_unless_equals_int (change, STATE_CHANGE_STATE_CHANGED);
+      fail_unless_equals_int (old_state->state, GST_PLAYER_STATE_STOPPED);
+      fail_unless_equals_int (new_state->state, GST_PLAYER_STATE_BUFFERING);
+      new_state->test_data = GINT_TO_POINTER (step + 1);
+      break;
+    case 4:
+      fail_unless_equals_int (change, STATE_CHANGE_MEDIA_INFO_UPDATED);
+      new_state->test_data = GINT_TO_POINTER (step + 1);
+      break;
+    case 5:
+      fail_unless_equals_int (change, STATE_CHANGE_VIDEO_DIMENSIONS_CHANGED);
+      fail_unless_equals_int (new_state->width, 0);
+      fail_unless_equals_int (new_state->height, 0);
+      new_state->test_data = GINT_TO_POINTER (step + 1);
+      break;
+    case 6:
+      fail_unless_equals_int (change, STATE_CHANGE_DURATION_CHANGED);
+      fail_unless_equals_uint64 (new_state->duration,
+          G_GUINT64_CONSTANT (464399092));
+      new_state->test_data = GINT_TO_POINTER (step + 1);
+      break;
+    case 7:
+      fail_unless_equals_int (change, STATE_CHANGE_POSITION_UPDATED);
+      fail_unless_equals_uint64 (new_state->position, G_GUINT64_CONSTANT (0));
+      new_state->test_data = GINT_TO_POINTER (step + 1);
+      break;
+    case 8:
+      fail_unless_equals_int (change, STATE_CHANGE_STATE_CHANGED);
+      fail_unless_equals_int (old_state->state, GST_PLAYER_STATE_BUFFERING);
+      fail_unless_equals_int (new_state->state, GST_PLAYER_STATE_PLAYING);
+      new_state->test_data = GINT_TO_POINTER (step + 1);
+      g_main_loop_quit (new_state->loop);
+      break;
+    default:
+      fail ();
+      break;
+  }
+}
+
+START_TEST (test_play_error_invalid_uri_and_play)
+{
+  GstPlayer *player;
+  TestPlayerState state;
+
+  memset (&state, 0, sizeof (state));
+  state.loop = g_main_loop_new (NULL, FALSE);
+  state.test_callback = test_play_error_invalid_uri_and_play_cb;
+  state.test_data = GINT_TO_POINTER (0);
+
+  player = test_player_new (&state);
+
+  fail_unless (player != NULL);
+
+  gst_player_set_uri (player, "foo://bar");
+
+  gst_player_play (player);
+  g_main_loop_run (state.loop);
+
+  fail_unless_equals_int (GPOINTER_TO_INT (state.test_data), 9);
+
+  g_object_unref (player);
+  g_main_loop_unref (state.loop);
+}
+
+END_TEST;
+
+static void
+test_play_seek_done_cb (GstPlayer * player,
+    TestPlayerStateChange change, TestPlayerState * old_state,
+    TestPlayerState * new_state)
+{
+  gint step = GPOINTER_TO_INT (new_state->test_data) & (~0x10);
+
+  if (new_state->state == GST_PLAYER_STATE_PLAYING && !step) {
+    gst_player_seek (player, 0);
+    new_state->test_data = GINT_TO_POINTER (step + 1);
+  } else if (change == STATE_CHANGE_SEEK_DONE || change == STATE_CHANGE_ERROR) {
+    fail_unless_equals_int (change, STATE_CHANGE_SEEK_DONE);
+    fail_unless_equals_uint64 (new_state->seek_done_position,
+        G_GUINT64_CONSTANT (0));
+    new_state->test_data = GINT_TO_POINTER (step + 1);
+    g_main_loop_quit (new_state->loop);
+  }
+}
+
+START_TEST (test_play_audio_video_seek_done)
+{
+  GstPlayer *player;
+  TestPlayerState state;
+  gchar *uri;
+
+  memset (&state, 0, sizeof (state));
+  state.loop = g_main_loop_new (NULL, FALSE);
+  state.test_callback = test_play_seek_done_cb;
+  state.test_data = GINT_TO_POINTER (0);
+
+  player = test_player_new (&state);
+
+  fail_unless (player != NULL);
+
+  uri = gst_filename_to_uri (TEST_PATH "/audio-video.ogg", NULL);
+  fail_unless (uri != NULL);
+  gst_player_set_uri (player, uri);
+  g_free (uri);
+
+  gst_player_play (player);
+  g_main_loop_run (state.loop);
+
+  fail_unless_equals_int (GPOINTER_TO_INT (state.test_data) & (~0x10), 2);
+
+  g_object_unref (player);
+  g_main_loop_unref (state.loop);
+}
+
+END_TEST;
+
+static void
+test_play_position_update_interval_cb (GstPlayer * player,
+    TestPlayerStateChange change, TestPlayerState * old_state,
+    TestPlayerState * new_state)
+{
+  static gboolean do_quit = TRUE;
+  static GstClockTime last_position = GST_CLOCK_TIME_NONE;
+
+  gint steps = GPOINTER_TO_INT (new_state->test_data);
+
+  if (new_state->state == GST_PLAYER_STATE_PLAYING && !steps) {
+    new_state->test_data = GINT_TO_POINTER (steps + 1);
+  } else if (steps && change == STATE_CHANGE_POSITION_UPDATED) {
+    GstClockTime position = gst_player_get_position (player);
+    new_state->test_data = GINT_TO_POINTER (steps + 1);
+
+    if (GST_CLOCK_TIME_IS_VALID (last_position)) {
+      GstClockTime interval = GST_CLOCK_DIFF (last_position, position);
+      GST_DEBUG_OBJECT (player,
+          "position update interval: %" GST_TIME_FORMAT "\n",
+          GST_TIME_ARGS (interval));
+      fail_unless (interval > (590 * GST_MSECOND)
+          && interval < (610 * GST_MSECOND));
+    }
+
+    last_position = position;
+
+    if (do_quit && position >= 2000 * GST_MSECOND) {
+      do_quit = FALSE;
+      gst_player_set_position_update_interval (player, 0);
+      g_main_loop_quit (new_state->loop);
+    }
+  } else if (change == STATE_CHANGE_END_OF_STREAM ||
+      change == STATE_CHANGE_ERROR) {
+    g_main_loop_quit (new_state->loop);
+  }
+}
+
+static gboolean
+quit_loop_cb (gpointer user_data)
+{
+  GMainLoop *loop = user_data;
+  g_main_loop_quit (loop);
+
+  return G_SOURCE_REMOVE;
+}
+
+START_TEST (test_play_position_update_interval)
+{
+  GstPlayer *player;
+  TestPlayerState state;
+  gchar *uri;
+
+  memset (&state, 0, sizeof (state));
+  state.loop = g_main_loop_new (NULL, FALSE);
+  state.test_callback = test_play_position_update_interval_cb;
+  state.test_data = GINT_TO_POINTER (0);
+
+  player = test_player_new (&state);
+  gst_player_set_position_update_interval (player, 600);
+
+  fail_unless (player != NULL);
+
+  uri = gst_filename_to_uri (TEST_PATH "/sintel.mkv", NULL);
+  fail_unless (uri != NULL);
+  gst_player_set_uri (player, uri);
+  g_free (uri);
+
+  gst_player_play (player);
+  g_main_loop_run (state.loop);
+
+  fail_unless_equals_int (GPOINTER_TO_INT (state.test_data), 5);
+
+  g_timeout_add (2000, quit_loop_cb, state.loop);
+  g_main_loop_run (state.loop);
+
+  fail_unless_equals_int (GPOINTER_TO_INT (state.test_data), 5);
+
+  g_object_unref (player);
+  g_main_loop_unref (state.loop);
+}
+
+END_TEST;
+
+static Suite *
+player_suite (void)
+{
+  Suite *s = suite_create ("GstPlayer");
+
+  TCase *tc_general = tcase_create ("general");
+
+  /* Use a longer timeout */
+#ifdef HAVE_VALGRIND
+  if (RUNNING_ON_VALGRIND) {
+    tcase_set_timeout (tc_general, 5 * 60);
+  } else
+#endif
+  {
+    tcase_set_timeout (tc_general, 2 * 60);
+  }
+
+  tcase_add_test (tc_general, test_create_and_free);
+  tcase_add_test (tc_general, test_set_and_get_uri);
+  tcase_add_test (tc_general, test_set_and_get_position_update_interval);
+
+#ifdef HAVE_VALGRIND
+  if (RUNNING_ON_VALGRIND) {
+  } else
+#endif
+  {
+    tcase_add_test (tc_general, test_play_position_update_interval);
+  }
+  tcase_add_test (tc_general, test_play_audio_eos);
+  tcase_add_test (tc_general, test_play_audio_video_eos);
+  tcase_add_test (tc_general, test_play_error_invalid_uri);
+  tcase_add_test (tc_general, test_play_error_invalid_uri_and_play);
+  tcase_add_test (tc_general, test_play_media_info);
+  tcase_add_test (tc_general, test_play_stream_disable);
+  tcase_add_test (tc_general, test_play_stream_switch_audio);
+  tcase_add_test (tc_general, test_play_stream_switch_subtitle);
+  tcase_add_test (tc_general, test_play_error_invalid_external_suburi);
+  tcase_add_test (tc_general, test_play_external_suburi);
+  tcase_add_test (tc_general, test_play_forward_rate);
+  tcase_add_test (tc_general, test_play_backward_rate);
+  tcase_add_test (tc_general, test_play_audio_video_seek_done);
+
+  suite_add_tcase (s, tc_general);
+
+  return s;
+}
+
+int
+main (int argc, char **argv)
+{
+  int number_failed;
+  Suite *s;
+  SRunner *sr;
+
+  gst_init (NULL, NULL);
+
+  s = player_suite ();
+  sr = srunner_create (s);
+
+  srunner_run_all (sr, CK_NORMAL);
+
+  number_failed = srunner_ntests_failed (sr);
+
+  srunner_free (sr);
+  return (number_failed == 0) ? 0 : -1;
+}
diff --git a/tests/check/pipelines/mxf.c b/tests/check/pipelines/mxf.c
index 5ab3a50..4b59e3d 100644
--- a/tests/check/pipelines/mxf.c
+++ b/tests/check/pipelines/mxf.c
@@ -260,6 +260,33 @@
 
 GST_END_TEST;
 
+GST_START_TEST (test_h264_raw_audio)
+{
+  gchar *pipeline;
+  GstElementFactory *factory = NULL;
+
+  if ((factory = gst_element_factory_find ("x264enc")) == NULL)
+    return;
+  gst_object_unref (factory);
+  if ((factory = gst_element_factory_find ("h264parse")) == NULL)
+    return;
+  gst_object_unref (factory);
+
+  pipeline = g_strdup_printf ("videotestsrc num-buffers=250 ! "
+      "video/x-raw,framerate=25/1 ! "
+      "x264enc ! h264parse ! "
+      "mxfmux name=mux ! "
+      "mxfdemux name=demux ! "
+      "fakesink  "
+      "audiotestsrc num-buffers=250 ! "
+      "audioconvert ! " "audio/x-raw,format=S24LE,channels=2 ! mux. ");
+
+  run_test (pipeline, 2);
+  g_free (pipeline);
+}
+
+GST_END_TEST;
+
 static Suite *
 mxf_suite (void)
 {
@@ -269,16 +296,12 @@
   suite_add_tcase (s, tc_chain);
   tcase_set_timeout (tc_chain, 180);
 
-  /* FIXME: remove again once ported */
-  if (!gst_registry_check_feature_version (gst_registry_get (), "mxfmux", 1,
-          0, 0))
-    return s;
-
   tcase_add_test (tc_chain, test_mpeg2);
   tcase_add_test (tc_chain, test_raw_video_raw_audio);
   tcase_add_test (tc_chain, test_raw_video_stride_transform);
   tcase_add_test (tc_chain, test_jpeg2000_alaw);
   tcase_add_test (tc_chain, test_dnxhd_mp3);
+  tcase_add_test (tc_chain, test_h264_raw_audio);
   tcase_add_test (tc_chain, test_multiple_av_streams);
 
   return s;
diff --git a/tests/examples/Makefile.am b/tests/examples/Makefile.am
index c26d3d9..57ed6dd 100644
--- a/tests/examples/Makefile.am
+++ b/tests/examples/Makefile.am
@@ -40,6 +40,16 @@
 GTK3_DIR=
 endif
 
+if USE_WAYLAND
+if HAVE_GTK3
+WAYLAND_DIR=waylandsink
+else
+WAYLAND_DIR=
+endif
+else
+WAYLAND_DIR=
+endif
+
 noinst_PROGRAMS = playout
 
 playout_SOURCES = playout.c
@@ -47,7 +57,8 @@
 playout_LDADD = $(GST_PLUGINS_BASE_LIBS) -lgstvideo-$(GST_API_VERSION) $(GST_LIBS)
 
 SUBDIRS= codecparsers mpegts $(DIRECTFB_DIR) $(GTK_EXAMPLES) $(OPENCV_EXAMPLES) \
-        $(GL_DIR) $(GTK3_DIR) $(AVSAMPLE_DIR)
-DIST_SUBDIRS= codecparsers mpegts camerabin2 directfb mxf opencv uvch264 gl gtk avsamplesink
+        $(GL_DIR) $(GTK3_DIR) $(AVSAMPLE_DIR) $(WAYLAND_DIR)
+DIST_SUBDIRS= codecparsers mpegts camerabin2 directfb mxf opencv uvch264 gl gtk \
+        avsamplesink waylandsink
 
 include $(top_srcdir)/common/parallel-subdirs.mak
diff --git a/tests/examples/Makefile.in b/tests/examples/Makefile.in
index 1a7dfb1..d0be295 100644
--- a/tests/examples/Makefile.in
+++ b/tests/examples/Makefile.in
@@ -121,16 +121,15 @@
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
 	$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
-	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gsettings.m4 \
-	$(top_srcdir)/m4/gst-fionread.m4 $(top_srcdir)/m4/gst-sdl.m4 \
-	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
-	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
-	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libgcrypt.m4 \
-	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
-	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
-	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
-	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
-	$(top_srcdir)/configure.ac
+	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gst-fionread.m4 \
+	$(top_srcdir)/m4/gst-sdl.m4 $(top_srcdir)/m4/iconv.m4 \
+	$(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \
+	$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
+	$(top_srcdir)/m4/libgcrypt.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
+	$(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
@@ -290,6 +289,8 @@
 CLUTTER_X11_LIBS = @CLUTTER_X11_LIBS@
 CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
+CUDA_CFLAGS = @CUDA_CFLAGS@
+CUDA_LIBS = @CUDA_LIBS@
 CURL_CFLAGS = @CURL_CFLAGS@
 CURL_LIBS = @CURL_LIBS@
 CXX = @CXX@
@@ -327,6 +328,8 @@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
+EGL_CFLAGS = @EGL_CFLAGS@
+EGL_LIBS = @EGL_LIBS@
 EGREP = @EGREP@
 ERROR_CFLAGS = @ERROR_CFLAGS@
 ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
@@ -335,7 +338,6 @@
 EXIF_CFLAGS = @EXIF_CFLAGS@
 EXIF_LIBS = @EXIF_LIBS@
 FAAC_LIBS = @FAAC_LIBS@
-FAAD_IS_NEAAC = @FAAD_IS_NEAAC@
 FAAD_LIBS = @FAAD_LIBS@
 FFLAGS = @FFLAGS@
 FGREP = @FGREP@
@@ -354,8 +356,9 @@
 GIO_LIBS = @GIO_LIBS@
 GIO_UNIX_CFLAGS = @GIO_UNIX_CFLAGS@
 GIO_UNIX_LIBS = @GIO_UNIX_LIBS@
+GLES2_CFLAGS = @GLES2_CFLAGS@
+GLES2_LIBS = @GLES2_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
-GLIB_COMPILE_SCHEMAS = @GLIB_COMPILE_SCHEMAS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
@@ -372,16 +375,17 @@
 GMODULE_NO_EXPORT_LIBS = @GMODULE_NO_EXPORT_LIBS@
 GMSGFMT = @GMSGFMT@
 GMSGFMT_015 = @GMSGFMT_015@
+GNUSTL_CFLAGS = @GNUSTL_CFLAGS@
+GNUSTL_LIBS = @GNUSTL_LIBS@
 GRAPHENE_CFLAGS = @GRAPHENE_CFLAGS@
 GRAPHENE_LIBS = @GRAPHENE_LIBS@
 GREP = @GREP@
-GSETTINGS_CFLAGS = @GSETTINGS_CFLAGS@
-GSETTINGS_DISABLE_SCHEMAS_COMPILE = @GSETTINGS_DISABLE_SCHEMAS_COMPILE@
-GSETTINGS_LIBS = @GSETTINGS_LIBS@
 GSM_LIBS = @GSM_LIBS@
 GSTPB_PLUGINS_DIR = @GSTPB_PLUGINS_DIR@
 GSTPB_PREFIX = @GSTPB_PREFIX@
 GST_AGE = @GST_AGE@
+GST_ALLOCATORS_CFLAGS = @GST_ALLOCATORS_CFLAGS@
+GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
 GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
 GST_API_VERSION = @GST_API_VERSION@
 GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
@@ -407,6 +411,8 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PBUTILS_CFLAGS = @GST_PBUTILS_CFLAGS@
+GST_PBUTILS_LIBS = @GST_PBUTILS_LIBS@
 GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BAD_CFLAGS = @GST_PLUGINS_BAD_CFLAGS@
@@ -432,6 +438,8 @@
 GST_PREFIX = @GST_PREFIX@
 GST_REVISION = @GST_REVISION@
 GST_TOOLS_DIR = @GST_TOOLS_DIR@
+GST_VIDEO_CFLAGS = @GST_VIDEO_CFLAGS@
+GST_VIDEO_LIBS = @GST_VIDEO_LIBS@
 GTK3_CFLAGS = @GTK3_CFLAGS@
 GTK3_GL_CFLAGS = @GTK3_GL_CFLAGS@
 GTK3_GL_LIBS = @GTK3_GL_LIBS@
@@ -533,6 +541,7 @@
 LTLIBICONV = @LTLIBICONV@
 LTLIBINTL = @LTLIBINTL@
 LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
 MANIFEST_TOOL = @MANIFEST_TOOL@
@@ -546,8 +555,6 @@
 MODPLUG_LIBS = @MODPLUG_LIBS@
 MPEG2ENC_CFLAGS = @MPEG2ENC_CFLAGS@
 MPEG2ENC_LIBS = @MPEG2ENC_LIBS@
-MPG123_CFLAGS = @MPG123_CFLAGS@
-MPG123_LIBS = @MPG123_LIBS@
 MPLEX_CFLAGS = @MPLEX_CFLAGS@
 MPLEX_LDFLAGS = @MPLEX_LDFLAGS@
 MPLEX_LIBS = @MPLEX_LIBS@
@@ -563,6 +570,8 @@
 NETTLE_LIBS = @NETTLE_LIBS@
 NM = @NM@
 NMEDIT = @NMEDIT@
+NVENCODE_CFLAGS = @NVENCODE_CFLAGS@
+NVENCODE_LIBS = @NVENCODE_LIBS@
 OBJC = @OBJC@
 OBJCDEPMODE = @OBJCDEPMODE@
 OBJCFLAGS = @OBJCFLAGS@
@@ -620,16 +629,18 @@
 PYTHON_PLATFORM = @PYTHON_PLATFORM@
 PYTHON_PREFIX = @PYTHON_PREFIX@
 PYTHON_VERSION = @PYTHON_VERSION@
+QT_ANDROID_CFLAGS = @QT_ANDROID_CFLAGS@
+QT_ANDROID_LIBS = @QT_ANDROID_LIBS@
 QT_CFLAGS = @QT_CFLAGS@
 QT_LIBS = @QT_LIBS@
+QT_MAC_CFLAGS = @QT_MAC_CFLAGS@
+QT_MAC_LIBS = @QT_MAC_LIBS@
 QT_WAYLAND_CFLAGS = @QT_WAYLAND_CFLAGS@
 QT_WAYLAND_LIBS = @QT_WAYLAND_LIBS@
 QT_X11_CFLAGS = @QT_X11_CFLAGS@
 QT_X11_LIBS = @QT_X11_LIBS@
 RANLIB = @RANLIB@
 RCC = @RCC@
-RSVG_2_36_2_CFLAGS = @RSVG_2_36_2_CFLAGS@
-RSVG_2_36_2_LIBS = @RSVG_2_36_2_LIBS@
 RSVG_CFLAGS = @RSVG_CFLAGS@
 RSVG_LIBS = @RSVG_LIBS@
 RTMP_CFLAGS = @RTMP_CFLAGS@
@@ -681,6 +692,7 @@
 VOAACENC_LIBS = @VOAACENC_LIBS@
 VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
 VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VULKAN_LIBS = @VULKAN_LIBS@
 WARNING_CFLAGS = @WARNING_CFLAGS@
 WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
 WARNING_OBJCFLAGS = @WARNING_OBJCFLAGS@
@@ -691,6 +703,7 @@
 WAYLAND_LIBS = @WAYLAND_LIBS@
 WEBP_CFLAGS = @WEBP_CFLAGS@
 WEBP_LIBS = @WEBP_LIBS@
+WGET = @WGET@
 WILDMIDI_CFLAGS = @WILDMIDI_CFLAGS@
 WILDMIDI_LIBS = @WILDMIDI_LIBS@
 WINKS_LIBS = @WINKS_LIBS@
@@ -700,6 +713,8 @@
 X11_LIBS = @X11_LIBS@
 X265_CFLAGS = @X265_CFLAGS@
 X265_LIBS = @X265_LIBS@
+XCB_CFLAGS = @XCB_CFLAGS@
+XCB_LIBS = @XCB_LIBS@
 XCOMPOSITE_CFLAGS = @XCOMPOSITE_CFLAGS@
 XCOMPOSITE_LIBS = @XCOMPOSITE_LIBS@
 XGETTEXT = @XGETTEXT@
@@ -737,7 +752,6 @@
 docdir = @docdir@
 dvidir = @dvidir@
 exec_prefix = @exec_prefix@
-gsettingsschemadir = @gsettingsschemadir@
 host = @host@
 host_alias = @host_alias@
 host_cpu = @host_cpu@
@@ -791,13 +805,18 @@
 @HAVE_AVFOUNDATION_TRUE@@HAVE_IOS_TRUE@AVSAMPLE_DIR = 
 @USE_GTK3_FALSE@GTK3_DIR = 
 @USE_GTK3_TRUE@GTK3_DIR = gtk
+@HAVE_GTK3_FALSE@@USE_WAYLAND_TRUE@WAYLAND_DIR = 
+@HAVE_GTK3_TRUE@@USE_WAYLAND_TRUE@WAYLAND_DIR = waylandsink
+@USE_WAYLAND_FALSE@WAYLAND_DIR = 
 playout_SOURCES = playout.c
 playout_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_CFLAGS)
 playout_LDADD = $(GST_PLUGINS_BASE_LIBS) -lgstvideo-$(GST_API_VERSION) $(GST_LIBS)
 SUBDIRS = codecparsers mpegts $(DIRECTFB_DIR) $(GTK_EXAMPLES) $(OPENCV_EXAMPLES) \
-        $(GL_DIR) $(GTK3_DIR) $(AVSAMPLE_DIR)
+        $(GL_DIR) $(GTK3_DIR) $(AVSAMPLE_DIR) $(WAYLAND_DIR)
 
-DIST_SUBDIRS = codecparsers mpegts camerabin2 directfb mxf opencv uvch264 gl gtk avsamplesink
+DIST_SUBDIRS = codecparsers mpegts camerabin2 directfb mxf opencv uvch264 gl gtk \
+        avsamplesink waylandsink
+
 all: all-recursive
 
 .SUFFIXES:
diff --git a/tests/examples/avsamplesink/Makefile.in b/tests/examples/avsamplesink/Makefile.in
index 78ed7c6..1a3f47b 100644
--- a/tests/examples/avsamplesink/Makefile.in
+++ b/tests/examples/avsamplesink/Makefile.in
@@ -116,16 +116,15 @@
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
 	$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
-	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gsettings.m4 \
-	$(top_srcdir)/m4/gst-fionread.m4 $(top_srcdir)/m4/gst-sdl.m4 \
-	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
-	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
-	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libgcrypt.m4 \
-	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
-	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
-	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
-	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
-	$(top_srcdir)/configure.ac
+	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gst-fionread.m4 \
+	$(top_srcdir)/m4/gst-sdl.m4 $(top_srcdir)/m4/iconv.m4 \
+	$(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \
+	$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
+	$(top_srcdir)/m4/libgcrypt.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
+	$(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
@@ -244,6 +243,8 @@
 CLUTTER_X11_LIBS = @CLUTTER_X11_LIBS@
 CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
+CUDA_CFLAGS = @CUDA_CFLAGS@
+CUDA_LIBS = @CUDA_LIBS@
 CURL_CFLAGS = @CURL_CFLAGS@
 CURL_LIBS = @CURL_LIBS@
 CXX = @CXX@
@@ -281,6 +282,8 @@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
+EGL_CFLAGS = @EGL_CFLAGS@
+EGL_LIBS = @EGL_LIBS@
 EGREP = @EGREP@
 ERROR_CFLAGS = @ERROR_CFLAGS@
 ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
@@ -289,7 +292,6 @@
 EXIF_CFLAGS = @EXIF_CFLAGS@
 EXIF_LIBS = @EXIF_LIBS@
 FAAC_LIBS = @FAAC_LIBS@
-FAAD_IS_NEAAC = @FAAD_IS_NEAAC@
 FAAD_LIBS = @FAAD_LIBS@
 FFLAGS = @FFLAGS@
 FGREP = @FGREP@
@@ -308,8 +310,9 @@
 GIO_LIBS = @GIO_LIBS@
 GIO_UNIX_CFLAGS = @GIO_UNIX_CFLAGS@
 GIO_UNIX_LIBS = @GIO_UNIX_LIBS@
+GLES2_CFLAGS = @GLES2_CFLAGS@
+GLES2_LIBS = @GLES2_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
-GLIB_COMPILE_SCHEMAS = @GLIB_COMPILE_SCHEMAS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
@@ -326,16 +329,17 @@
 GMODULE_NO_EXPORT_LIBS = @GMODULE_NO_EXPORT_LIBS@
 GMSGFMT = @GMSGFMT@
 GMSGFMT_015 = @GMSGFMT_015@
+GNUSTL_CFLAGS = @GNUSTL_CFLAGS@
+GNUSTL_LIBS = @GNUSTL_LIBS@
 GRAPHENE_CFLAGS = @GRAPHENE_CFLAGS@
 GRAPHENE_LIBS = @GRAPHENE_LIBS@
 GREP = @GREP@
-GSETTINGS_CFLAGS = @GSETTINGS_CFLAGS@
-GSETTINGS_DISABLE_SCHEMAS_COMPILE = @GSETTINGS_DISABLE_SCHEMAS_COMPILE@
-GSETTINGS_LIBS = @GSETTINGS_LIBS@
 GSM_LIBS = @GSM_LIBS@
 GSTPB_PLUGINS_DIR = @GSTPB_PLUGINS_DIR@
 GSTPB_PREFIX = @GSTPB_PREFIX@
 GST_AGE = @GST_AGE@
+GST_ALLOCATORS_CFLAGS = @GST_ALLOCATORS_CFLAGS@
+GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
 GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
 GST_API_VERSION = @GST_API_VERSION@
 GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
@@ -361,6 +365,8 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PBUTILS_CFLAGS = @GST_PBUTILS_CFLAGS@
+GST_PBUTILS_LIBS = @GST_PBUTILS_LIBS@
 GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BAD_CFLAGS = @GST_PLUGINS_BAD_CFLAGS@
@@ -386,6 +392,8 @@
 GST_PREFIX = @GST_PREFIX@
 GST_REVISION = @GST_REVISION@
 GST_TOOLS_DIR = @GST_TOOLS_DIR@
+GST_VIDEO_CFLAGS = @GST_VIDEO_CFLAGS@
+GST_VIDEO_LIBS = @GST_VIDEO_LIBS@
 GTK3_CFLAGS = @GTK3_CFLAGS@
 GTK3_GL_CFLAGS = @GTK3_GL_CFLAGS@
 GTK3_GL_LIBS = @GTK3_GL_LIBS@
@@ -487,6 +495,7 @@
 LTLIBICONV = @LTLIBICONV@
 LTLIBINTL = @LTLIBINTL@
 LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
 MANIFEST_TOOL = @MANIFEST_TOOL@
@@ -500,8 +509,6 @@
 MODPLUG_LIBS = @MODPLUG_LIBS@
 MPEG2ENC_CFLAGS = @MPEG2ENC_CFLAGS@
 MPEG2ENC_LIBS = @MPEG2ENC_LIBS@
-MPG123_CFLAGS = @MPG123_CFLAGS@
-MPG123_LIBS = @MPG123_LIBS@
 MPLEX_CFLAGS = @MPLEX_CFLAGS@
 MPLEX_LDFLAGS = @MPLEX_LDFLAGS@
 MPLEX_LIBS = @MPLEX_LIBS@
@@ -517,6 +524,8 @@
 NETTLE_LIBS = @NETTLE_LIBS@
 NM = @NM@
 NMEDIT = @NMEDIT@
+NVENCODE_CFLAGS = @NVENCODE_CFLAGS@
+NVENCODE_LIBS = @NVENCODE_LIBS@
 OBJC = @OBJC@
 OBJCDEPMODE = @OBJCDEPMODE@
 OBJCFLAGS = @OBJCFLAGS@
@@ -574,16 +583,18 @@
 PYTHON_PLATFORM = @PYTHON_PLATFORM@
 PYTHON_PREFIX = @PYTHON_PREFIX@
 PYTHON_VERSION = @PYTHON_VERSION@
+QT_ANDROID_CFLAGS = @QT_ANDROID_CFLAGS@
+QT_ANDROID_LIBS = @QT_ANDROID_LIBS@
 QT_CFLAGS = @QT_CFLAGS@
 QT_LIBS = @QT_LIBS@
+QT_MAC_CFLAGS = @QT_MAC_CFLAGS@
+QT_MAC_LIBS = @QT_MAC_LIBS@
 QT_WAYLAND_CFLAGS = @QT_WAYLAND_CFLAGS@
 QT_WAYLAND_LIBS = @QT_WAYLAND_LIBS@
 QT_X11_CFLAGS = @QT_X11_CFLAGS@
 QT_X11_LIBS = @QT_X11_LIBS@
 RANLIB = @RANLIB@
 RCC = @RCC@
-RSVG_2_36_2_CFLAGS = @RSVG_2_36_2_CFLAGS@
-RSVG_2_36_2_LIBS = @RSVG_2_36_2_LIBS@
 RSVG_CFLAGS = @RSVG_CFLAGS@
 RSVG_LIBS = @RSVG_LIBS@
 RTMP_CFLAGS = @RTMP_CFLAGS@
@@ -635,6 +646,7 @@
 VOAACENC_LIBS = @VOAACENC_LIBS@
 VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
 VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VULKAN_LIBS = @VULKAN_LIBS@
 WARNING_CFLAGS = @WARNING_CFLAGS@
 WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
 WARNING_OBJCFLAGS = @WARNING_OBJCFLAGS@
@@ -645,6 +657,7 @@
 WAYLAND_LIBS = @WAYLAND_LIBS@
 WEBP_CFLAGS = @WEBP_CFLAGS@
 WEBP_LIBS = @WEBP_LIBS@
+WGET = @WGET@
 WILDMIDI_CFLAGS = @WILDMIDI_CFLAGS@
 WILDMIDI_LIBS = @WILDMIDI_LIBS@
 WINKS_LIBS = @WINKS_LIBS@
@@ -654,6 +667,8 @@
 X11_LIBS = @X11_LIBS@
 X265_CFLAGS = @X265_CFLAGS@
 X265_LIBS = @X265_LIBS@
+XCB_CFLAGS = @XCB_CFLAGS@
+XCB_LIBS = @XCB_LIBS@
 XCOMPOSITE_CFLAGS = @XCOMPOSITE_CFLAGS@
 XCOMPOSITE_LIBS = @XCOMPOSITE_LIBS@
 XGETTEXT = @XGETTEXT@
@@ -691,7 +706,6 @@
 docdir = @docdir@
 dvidir = @dvidir@
 exec_prefix = @exec_prefix@
-gsettingsschemadir = @gsettingsschemadir@
 host = @host@
 host_alias = @host_alias@
 host_cpu = @host_cpu@
diff --git a/tests/examples/camerabin2/Makefile.in b/tests/examples/camerabin2/Makefile.in
index 1ebcc5d..2bc6382 100644
--- a/tests/examples/camerabin2/Makefile.in
+++ b/tests/examples/camerabin2/Makefile.in
@@ -117,16 +117,15 @@
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
 	$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
-	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gsettings.m4 \
-	$(top_srcdir)/m4/gst-fionread.m4 $(top_srcdir)/m4/gst-sdl.m4 \
-	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
-	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
-	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libgcrypt.m4 \
-	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
-	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
-	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
-	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
-	$(top_srcdir)/configure.ac
+	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gst-fionread.m4 \
+	$(top_srcdir)/m4/gst-sdl.m4 $(top_srcdir)/m4/iconv.m4 \
+	$(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \
+	$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
+	$(top_srcdir)/m4/libgcrypt.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
+	$(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
@@ -262,6 +261,8 @@
 CLUTTER_X11_LIBS = @CLUTTER_X11_LIBS@
 CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
+CUDA_CFLAGS = @CUDA_CFLAGS@
+CUDA_LIBS = @CUDA_LIBS@
 CURL_CFLAGS = @CURL_CFLAGS@
 CURL_LIBS = @CURL_LIBS@
 CXX = @CXX@
@@ -299,6 +300,8 @@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
+EGL_CFLAGS = @EGL_CFLAGS@
+EGL_LIBS = @EGL_LIBS@
 EGREP = @EGREP@
 ERROR_CFLAGS = @ERROR_CFLAGS@
 ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
@@ -307,7 +310,6 @@
 EXIF_CFLAGS = @EXIF_CFLAGS@
 EXIF_LIBS = @EXIF_LIBS@
 FAAC_LIBS = @FAAC_LIBS@
-FAAD_IS_NEAAC = @FAAD_IS_NEAAC@
 FAAD_LIBS = @FAAD_LIBS@
 FFLAGS = @FFLAGS@
 FGREP = @FGREP@
@@ -326,8 +328,9 @@
 GIO_LIBS = @GIO_LIBS@
 GIO_UNIX_CFLAGS = @GIO_UNIX_CFLAGS@
 GIO_UNIX_LIBS = @GIO_UNIX_LIBS@
+GLES2_CFLAGS = @GLES2_CFLAGS@
+GLES2_LIBS = @GLES2_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
-GLIB_COMPILE_SCHEMAS = @GLIB_COMPILE_SCHEMAS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
@@ -344,16 +347,17 @@
 GMODULE_NO_EXPORT_LIBS = @GMODULE_NO_EXPORT_LIBS@
 GMSGFMT = @GMSGFMT@
 GMSGFMT_015 = @GMSGFMT_015@
+GNUSTL_CFLAGS = @GNUSTL_CFLAGS@
+GNUSTL_LIBS = @GNUSTL_LIBS@
 GRAPHENE_CFLAGS = @GRAPHENE_CFLAGS@
 GRAPHENE_LIBS = @GRAPHENE_LIBS@
 GREP = @GREP@
-GSETTINGS_CFLAGS = @GSETTINGS_CFLAGS@
-GSETTINGS_DISABLE_SCHEMAS_COMPILE = @GSETTINGS_DISABLE_SCHEMAS_COMPILE@
-GSETTINGS_LIBS = @GSETTINGS_LIBS@
 GSM_LIBS = @GSM_LIBS@
 GSTPB_PLUGINS_DIR = @GSTPB_PLUGINS_DIR@
 GSTPB_PREFIX = @GSTPB_PREFIX@
 GST_AGE = @GST_AGE@
+GST_ALLOCATORS_CFLAGS = @GST_ALLOCATORS_CFLAGS@
+GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
 GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
 GST_API_VERSION = @GST_API_VERSION@
 GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
@@ -379,6 +383,8 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PBUTILS_CFLAGS = @GST_PBUTILS_CFLAGS@
+GST_PBUTILS_LIBS = @GST_PBUTILS_LIBS@
 GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BAD_CFLAGS = @GST_PLUGINS_BAD_CFLAGS@
@@ -404,6 +410,8 @@
 GST_PREFIX = @GST_PREFIX@
 GST_REVISION = @GST_REVISION@
 GST_TOOLS_DIR = @GST_TOOLS_DIR@
+GST_VIDEO_CFLAGS = @GST_VIDEO_CFLAGS@
+GST_VIDEO_LIBS = @GST_VIDEO_LIBS@
 GTK3_CFLAGS = @GTK3_CFLAGS@
 GTK3_GL_CFLAGS = @GTK3_GL_CFLAGS@
 GTK3_GL_LIBS = @GTK3_GL_LIBS@
@@ -505,6 +513,7 @@
 LTLIBICONV = @LTLIBICONV@
 LTLIBINTL = @LTLIBINTL@
 LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
 MANIFEST_TOOL = @MANIFEST_TOOL@
@@ -518,8 +527,6 @@
 MODPLUG_LIBS = @MODPLUG_LIBS@
 MPEG2ENC_CFLAGS = @MPEG2ENC_CFLAGS@
 MPEG2ENC_LIBS = @MPEG2ENC_LIBS@
-MPG123_CFLAGS = @MPG123_CFLAGS@
-MPG123_LIBS = @MPG123_LIBS@
 MPLEX_CFLAGS = @MPLEX_CFLAGS@
 MPLEX_LDFLAGS = @MPLEX_LDFLAGS@
 MPLEX_LIBS = @MPLEX_LIBS@
@@ -535,6 +542,8 @@
 NETTLE_LIBS = @NETTLE_LIBS@
 NM = @NM@
 NMEDIT = @NMEDIT@
+NVENCODE_CFLAGS = @NVENCODE_CFLAGS@
+NVENCODE_LIBS = @NVENCODE_LIBS@
 OBJC = @OBJC@
 OBJCDEPMODE = @OBJCDEPMODE@
 OBJCFLAGS = @OBJCFLAGS@
@@ -592,16 +601,18 @@
 PYTHON_PLATFORM = @PYTHON_PLATFORM@
 PYTHON_PREFIX = @PYTHON_PREFIX@
 PYTHON_VERSION = @PYTHON_VERSION@
+QT_ANDROID_CFLAGS = @QT_ANDROID_CFLAGS@
+QT_ANDROID_LIBS = @QT_ANDROID_LIBS@
 QT_CFLAGS = @QT_CFLAGS@
 QT_LIBS = @QT_LIBS@
+QT_MAC_CFLAGS = @QT_MAC_CFLAGS@
+QT_MAC_LIBS = @QT_MAC_LIBS@
 QT_WAYLAND_CFLAGS = @QT_WAYLAND_CFLAGS@
 QT_WAYLAND_LIBS = @QT_WAYLAND_LIBS@
 QT_X11_CFLAGS = @QT_X11_CFLAGS@
 QT_X11_LIBS = @QT_X11_LIBS@
 RANLIB = @RANLIB@
 RCC = @RCC@
-RSVG_2_36_2_CFLAGS = @RSVG_2_36_2_CFLAGS@
-RSVG_2_36_2_LIBS = @RSVG_2_36_2_LIBS@
 RSVG_CFLAGS = @RSVG_CFLAGS@
 RSVG_LIBS = @RSVG_LIBS@
 RTMP_CFLAGS = @RTMP_CFLAGS@
@@ -653,6 +664,7 @@
 VOAACENC_LIBS = @VOAACENC_LIBS@
 VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
 VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VULKAN_LIBS = @VULKAN_LIBS@
 WARNING_CFLAGS = @WARNING_CFLAGS@
 WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
 WARNING_OBJCFLAGS = @WARNING_OBJCFLAGS@
@@ -663,6 +675,7 @@
 WAYLAND_LIBS = @WAYLAND_LIBS@
 WEBP_CFLAGS = @WEBP_CFLAGS@
 WEBP_LIBS = @WEBP_LIBS@
+WGET = @WGET@
 WILDMIDI_CFLAGS = @WILDMIDI_CFLAGS@
 WILDMIDI_LIBS = @WILDMIDI_LIBS@
 WINKS_LIBS = @WINKS_LIBS@
@@ -672,6 +685,8 @@
 X11_LIBS = @X11_LIBS@
 X265_CFLAGS = @X265_CFLAGS@
 X265_LIBS = @X265_LIBS@
+XCB_CFLAGS = @XCB_CFLAGS@
+XCB_LIBS = @XCB_LIBS@
 XCOMPOSITE_CFLAGS = @XCOMPOSITE_CFLAGS@
 XCOMPOSITE_LIBS = @XCOMPOSITE_LIBS@
 XGETTEXT = @XGETTEXT@
@@ -709,7 +724,6 @@
 docdir = @docdir@
 dvidir = @dvidir@
 exec_prefix = @exec_prefix@
-gsettingsschemadir = @gsettingsschemadir@
 host = @host@
 host_alias = @host_alias@
 host_cpu = @host_cpu@
diff --git a/tests/examples/camerabin2/gst-camerabin2-test.c b/tests/examples/camerabin2/gst-camerabin2-test.c
index 90e010a..1c61957 100644
--- a/tests/examples/camerabin2/gst-camerabin2-test.c
+++ b/tests/examples/camerabin2/gst-camerabin2-test.c
@@ -428,7 +428,7 @@
 
       gst_message_parse_error (message, &err, &debug);
       g_print ("Error: %s\n", err->message);
-      g_error_free (err);
+      g_clear_error (&err);
       g_free (debug);
 
       /* Write debug graph to file */
@@ -556,8 +556,7 @@
           gep_filename);
       if (error) {
         GST_WARNING ("Error from file loading: %s", error->message);
-        g_error_free (error);
-        error = NULL;
+        g_clear_error (&error);
       }
     } else {
       prof = gst_encoding_target_get_profile (target, gep_profilename);
@@ -601,7 +600,7 @@
           property_name);
       if (error) {
         GST_ERROR ("%s", error->message);
-        g_error_free (error);
+        g_clear_error (&error);
       }
       res = FALSE;
     }
@@ -1253,6 +1252,8 @@
   g_option_context_add_group (ctx, gst_init_get_option_group ());
   if (!g_option_context_parse (ctx, &argc, &argv, &err)) {
     g_print ("Error initializing: %s\n", err->message);
+    g_option_context_free (ctx);
+    g_clear_error (&err);
     exit (1);
   }
   g_option_context_free (ctx);
diff --git a/tests/examples/codecparsers/Makefile.in b/tests/examples/codecparsers/Makefile.in
index 019bd50..946dc02 100644
--- a/tests/examples/codecparsers/Makefile.in
+++ b/tests/examples/codecparsers/Makefile.in
@@ -116,16 +116,15 @@
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
 	$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
-	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gsettings.m4 \
-	$(top_srcdir)/m4/gst-fionread.m4 $(top_srcdir)/m4/gst-sdl.m4 \
-	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
-	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
-	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libgcrypt.m4 \
-	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
-	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
-	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
-	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
-	$(top_srcdir)/configure.ac
+	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gst-fionread.m4 \
+	$(top_srcdir)/m4/gst-sdl.m4 $(top_srcdir)/m4/iconv.m4 \
+	$(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \
+	$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
+	$(top_srcdir)/m4/libgcrypt.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
+	$(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
@@ -247,6 +246,8 @@
 CLUTTER_X11_LIBS = @CLUTTER_X11_LIBS@
 CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
+CUDA_CFLAGS = @CUDA_CFLAGS@
+CUDA_LIBS = @CUDA_LIBS@
 CURL_CFLAGS = @CURL_CFLAGS@
 CURL_LIBS = @CURL_LIBS@
 CXX = @CXX@
@@ -284,6 +285,8 @@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
+EGL_CFLAGS = @EGL_CFLAGS@
+EGL_LIBS = @EGL_LIBS@
 EGREP = @EGREP@
 ERROR_CFLAGS = @ERROR_CFLAGS@
 ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
@@ -292,7 +295,6 @@
 EXIF_CFLAGS = @EXIF_CFLAGS@
 EXIF_LIBS = @EXIF_LIBS@
 FAAC_LIBS = @FAAC_LIBS@
-FAAD_IS_NEAAC = @FAAD_IS_NEAAC@
 FAAD_LIBS = @FAAD_LIBS@
 FFLAGS = @FFLAGS@
 FGREP = @FGREP@
@@ -311,8 +313,9 @@
 GIO_LIBS = @GIO_LIBS@
 GIO_UNIX_CFLAGS = @GIO_UNIX_CFLAGS@
 GIO_UNIX_LIBS = @GIO_UNIX_LIBS@
+GLES2_CFLAGS = @GLES2_CFLAGS@
+GLES2_LIBS = @GLES2_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
-GLIB_COMPILE_SCHEMAS = @GLIB_COMPILE_SCHEMAS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
@@ -329,16 +332,17 @@
 GMODULE_NO_EXPORT_LIBS = @GMODULE_NO_EXPORT_LIBS@
 GMSGFMT = @GMSGFMT@
 GMSGFMT_015 = @GMSGFMT_015@
+GNUSTL_CFLAGS = @GNUSTL_CFLAGS@
+GNUSTL_LIBS = @GNUSTL_LIBS@
 GRAPHENE_CFLAGS = @GRAPHENE_CFLAGS@
 GRAPHENE_LIBS = @GRAPHENE_LIBS@
 GREP = @GREP@
-GSETTINGS_CFLAGS = @GSETTINGS_CFLAGS@
-GSETTINGS_DISABLE_SCHEMAS_COMPILE = @GSETTINGS_DISABLE_SCHEMAS_COMPILE@
-GSETTINGS_LIBS = @GSETTINGS_LIBS@
 GSM_LIBS = @GSM_LIBS@
 GSTPB_PLUGINS_DIR = @GSTPB_PLUGINS_DIR@
 GSTPB_PREFIX = @GSTPB_PREFIX@
 GST_AGE = @GST_AGE@
+GST_ALLOCATORS_CFLAGS = @GST_ALLOCATORS_CFLAGS@
+GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
 GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
 GST_API_VERSION = @GST_API_VERSION@
 GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
@@ -364,6 +368,8 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PBUTILS_CFLAGS = @GST_PBUTILS_CFLAGS@
+GST_PBUTILS_LIBS = @GST_PBUTILS_LIBS@
 GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BAD_CFLAGS = @GST_PLUGINS_BAD_CFLAGS@
@@ -389,6 +395,8 @@
 GST_PREFIX = @GST_PREFIX@
 GST_REVISION = @GST_REVISION@
 GST_TOOLS_DIR = @GST_TOOLS_DIR@
+GST_VIDEO_CFLAGS = @GST_VIDEO_CFLAGS@
+GST_VIDEO_LIBS = @GST_VIDEO_LIBS@
 GTK3_CFLAGS = @GTK3_CFLAGS@
 GTK3_GL_CFLAGS = @GTK3_GL_CFLAGS@
 GTK3_GL_LIBS = @GTK3_GL_LIBS@
@@ -490,6 +498,7 @@
 LTLIBICONV = @LTLIBICONV@
 LTLIBINTL = @LTLIBINTL@
 LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
 MANIFEST_TOOL = @MANIFEST_TOOL@
@@ -503,8 +512,6 @@
 MODPLUG_LIBS = @MODPLUG_LIBS@
 MPEG2ENC_CFLAGS = @MPEG2ENC_CFLAGS@
 MPEG2ENC_LIBS = @MPEG2ENC_LIBS@
-MPG123_CFLAGS = @MPG123_CFLAGS@
-MPG123_LIBS = @MPG123_LIBS@
 MPLEX_CFLAGS = @MPLEX_CFLAGS@
 MPLEX_LDFLAGS = @MPLEX_LDFLAGS@
 MPLEX_LIBS = @MPLEX_LIBS@
@@ -520,6 +527,8 @@
 NETTLE_LIBS = @NETTLE_LIBS@
 NM = @NM@
 NMEDIT = @NMEDIT@
+NVENCODE_CFLAGS = @NVENCODE_CFLAGS@
+NVENCODE_LIBS = @NVENCODE_LIBS@
 OBJC = @OBJC@
 OBJCDEPMODE = @OBJCDEPMODE@
 OBJCFLAGS = @OBJCFLAGS@
@@ -577,16 +586,18 @@
 PYTHON_PLATFORM = @PYTHON_PLATFORM@
 PYTHON_PREFIX = @PYTHON_PREFIX@
 PYTHON_VERSION = @PYTHON_VERSION@
+QT_ANDROID_CFLAGS = @QT_ANDROID_CFLAGS@
+QT_ANDROID_LIBS = @QT_ANDROID_LIBS@
 QT_CFLAGS = @QT_CFLAGS@
 QT_LIBS = @QT_LIBS@
+QT_MAC_CFLAGS = @QT_MAC_CFLAGS@
+QT_MAC_LIBS = @QT_MAC_LIBS@
 QT_WAYLAND_CFLAGS = @QT_WAYLAND_CFLAGS@
 QT_WAYLAND_LIBS = @QT_WAYLAND_LIBS@
 QT_X11_CFLAGS = @QT_X11_CFLAGS@
 QT_X11_LIBS = @QT_X11_LIBS@
 RANLIB = @RANLIB@
 RCC = @RCC@
-RSVG_2_36_2_CFLAGS = @RSVG_2_36_2_CFLAGS@
-RSVG_2_36_2_LIBS = @RSVG_2_36_2_LIBS@
 RSVG_CFLAGS = @RSVG_CFLAGS@
 RSVG_LIBS = @RSVG_LIBS@
 RTMP_CFLAGS = @RTMP_CFLAGS@
@@ -638,6 +649,7 @@
 VOAACENC_LIBS = @VOAACENC_LIBS@
 VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
 VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VULKAN_LIBS = @VULKAN_LIBS@
 WARNING_CFLAGS = @WARNING_CFLAGS@
 WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
 WARNING_OBJCFLAGS = @WARNING_OBJCFLAGS@
@@ -648,6 +660,7 @@
 WAYLAND_LIBS = @WAYLAND_LIBS@
 WEBP_CFLAGS = @WEBP_CFLAGS@
 WEBP_LIBS = @WEBP_LIBS@
+WGET = @WGET@
 WILDMIDI_CFLAGS = @WILDMIDI_CFLAGS@
 WILDMIDI_LIBS = @WILDMIDI_LIBS@
 WINKS_LIBS = @WINKS_LIBS@
@@ -657,6 +670,8 @@
 X11_LIBS = @X11_LIBS@
 X265_CFLAGS = @X265_CFLAGS@
 X265_LIBS = @X265_LIBS@
+XCB_CFLAGS = @XCB_CFLAGS@
+XCB_LIBS = @XCB_LIBS@
 XCOMPOSITE_CFLAGS = @XCOMPOSITE_CFLAGS@
 XCOMPOSITE_LIBS = @XCOMPOSITE_LIBS@
 XGETTEXT = @XGETTEXT@
@@ -694,7 +709,6 @@
 docdir = @docdir@
 dvidir = @dvidir@
 exec_prefix = @exec_prefix@
-gsettingsschemadir = @gsettingsschemadir@
 host = @host@
 host_alias = @host_alias@
 host_cpu = @host_cpu@
diff --git a/tests/examples/codecparsers/parse-jpeg.c b/tests/examples/codecparsers/parse-jpeg.c
index fe42999..ca9cf1b 100644
--- a/tests/examples/codecparsers/parse-jpeg.c
+++ b/tests/examples/codecparsers/parse-jpeg.c
@@ -239,7 +239,7 @@
 
   if (!g_file_get_contents (fn, &data, &size, &err)) {
     g_error ("%s", err->message);
-    g_error_free (err);
+    g_clear_error (&err);
     return;
   }
 
@@ -286,6 +286,8 @@
   g_option_context_add_group (ctx, gst_init_get_option_group ());
   if (!g_option_context_parse (ctx, &argc, &argv, &err)) {
     g_print ("Error initializing: %s\n", GST_STR_NULL (err->message));
+    g_option_context_free (ctx);
+    g_clear_error (&err);
     exit (1);
   }
   g_option_context_free (ctx);
diff --git a/tests/examples/directfb/Makefile.in b/tests/examples/directfb/Makefile.in
index 4a57f96..1d6c4e5 100644
--- a/tests/examples/directfb/Makefile.in
+++ b/tests/examples/directfb/Makefile.in
@@ -116,16 +116,15 @@
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
 	$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
-	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gsettings.m4 \
-	$(top_srcdir)/m4/gst-fionread.m4 $(top_srcdir)/m4/gst-sdl.m4 \
-	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
-	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
-	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libgcrypt.m4 \
-	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
-	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
-	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
-	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
-	$(top_srcdir)/configure.ac
+	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gst-fionread.m4 \
+	$(top_srcdir)/m4/gst-sdl.m4 $(top_srcdir)/m4/iconv.m4 \
+	$(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \
+	$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
+	$(top_srcdir)/m4/libgcrypt.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
+	$(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
@@ -241,6 +240,8 @@
 CLUTTER_X11_LIBS = @CLUTTER_X11_LIBS@
 CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
+CUDA_CFLAGS = @CUDA_CFLAGS@
+CUDA_LIBS = @CUDA_LIBS@
 CURL_CFLAGS = @CURL_CFLAGS@
 CURL_LIBS = @CURL_LIBS@
 CXX = @CXX@
@@ -278,6 +279,8 @@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
+EGL_CFLAGS = @EGL_CFLAGS@
+EGL_LIBS = @EGL_LIBS@
 EGREP = @EGREP@
 ERROR_CFLAGS = @ERROR_CFLAGS@
 ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
@@ -286,7 +289,6 @@
 EXIF_CFLAGS = @EXIF_CFLAGS@
 EXIF_LIBS = @EXIF_LIBS@
 FAAC_LIBS = @FAAC_LIBS@
-FAAD_IS_NEAAC = @FAAD_IS_NEAAC@
 FAAD_LIBS = @FAAD_LIBS@
 FFLAGS = @FFLAGS@
 FGREP = @FGREP@
@@ -305,8 +307,9 @@
 GIO_LIBS = @GIO_LIBS@
 GIO_UNIX_CFLAGS = @GIO_UNIX_CFLAGS@
 GIO_UNIX_LIBS = @GIO_UNIX_LIBS@
+GLES2_CFLAGS = @GLES2_CFLAGS@
+GLES2_LIBS = @GLES2_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
-GLIB_COMPILE_SCHEMAS = @GLIB_COMPILE_SCHEMAS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
@@ -323,16 +326,17 @@
 GMODULE_NO_EXPORT_LIBS = @GMODULE_NO_EXPORT_LIBS@
 GMSGFMT = @GMSGFMT@
 GMSGFMT_015 = @GMSGFMT_015@
+GNUSTL_CFLAGS = @GNUSTL_CFLAGS@
+GNUSTL_LIBS = @GNUSTL_LIBS@
 GRAPHENE_CFLAGS = @GRAPHENE_CFLAGS@
 GRAPHENE_LIBS = @GRAPHENE_LIBS@
 GREP = @GREP@
-GSETTINGS_CFLAGS = @GSETTINGS_CFLAGS@
-GSETTINGS_DISABLE_SCHEMAS_COMPILE = @GSETTINGS_DISABLE_SCHEMAS_COMPILE@
-GSETTINGS_LIBS = @GSETTINGS_LIBS@
 GSM_LIBS = @GSM_LIBS@
 GSTPB_PLUGINS_DIR = @GSTPB_PLUGINS_DIR@
 GSTPB_PREFIX = @GSTPB_PREFIX@
 GST_AGE = @GST_AGE@
+GST_ALLOCATORS_CFLAGS = @GST_ALLOCATORS_CFLAGS@
+GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
 GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
 GST_API_VERSION = @GST_API_VERSION@
 GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
@@ -358,6 +362,8 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PBUTILS_CFLAGS = @GST_PBUTILS_CFLAGS@
+GST_PBUTILS_LIBS = @GST_PBUTILS_LIBS@
 GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BAD_CFLAGS = @GST_PLUGINS_BAD_CFLAGS@
@@ -383,6 +389,8 @@
 GST_PREFIX = @GST_PREFIX@
 GST_REVISION = @GST_REVISION@
 GST_TOOLS_DIR = @GST_TOOLS_DIR@
+GST_VIDEO_CFLAGS = @GST_VIDEO_CFLAGS@
+GST_VIDEO_LIBS = @GST_VIDEO_LIBS@
 GTK3_CFLAGS = @GTK3_CFLAGS@
 GTK3_GL_CFLAGS = @GTK3_GL_CFLAGS@
 GTK3_GL_LIBS = @GTK3_GL_LIBS@
@@ -484,6 +492,7 @@
 LTLIBICONV = @LTLIBICONV@
 LTLIBINTL = @LTLIBINTL@
 LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
 MANIFEST_TOOL = @MANIFEST_TOOL@
@@ -497,8 +506,6 @@
 MODPLUG_LIBS = @MODPLUG_LIBS@
 MPEG2ENC_CFLAGS = @MPEG2ENC_CFLAGS@
 MPEG2ENC_LIBS = @MPEG2ENC_LIBS@
-MPG123_CFLAGS = @MPG123_CFLAGS@
-MPG123_LIBS = @MPG123_LIBS@
 MPLEX_CFLAGS = @MPLEX_CFLAGS@
 MPLEX_LDFLAGS = @MPLEX_LDFLAGS@
 MPLEX_LIBS = @MPLEX_LIBS@
@@ -514,6 +521,8 @@
 NETTLE_LIBS = @NETTLE_LIBS@
 NM = @NM@
 NMEDIT = @NMEDIT@
+NVENCODE_CFLAGS = @NVENCODE_CFLAGS@
+NVENCODE_LIBS = @NVENCODE_LIBS@
 OBJC = @OBJC@
 OBJCDEPMODE = @OBJCDEPMODE@
 OBJCFLAGS = @OBJCFLAGS@
@@ -571,16 +580,18 @@
 PYTHON_PLATFORM = @PYTHON_PLATFORM@
 PYTHON_PREFIX = @PYTHON_PREFIX@
 PYTHON_VERSION = @PYTHON_VERSION@
+QT_ANDROID_CFLAGS = @QT_ANDROID_CFLAGS@
+QT_ANDROID_LIBS = @QT_ANDROID_LIBS@
 QT_CFLAGS = @QT_CFLAGS@
 QT_LIBS = @QT_LIBS@
+QT_MAC_CFLAGS = @QT_MAC_CFLAGS@
+QT_MAC_LIBS = @QT_MAC_LIBS@
 QT_WAYLAND_CFLAGS = @QT_WAYLAND_CFLAGS@
 QT_WAYLAND_LIBS = @QT_WAYLAND_LIBS@
 QT_X11_CFLAGS = @QT_X11_CFLAGS@
 QT_X11_LIBS = @QT_X11_LIBS@
 RANLIB = @RANLIB@
 RCC = @RCC@
-RSVG_2_36_2_CFLAGS = @RSVG_2_36_2_CFLAGS@
-RSVG_2_36_2_LIBS = @RSVG_2_36_2_LIBS@
 RSVG_CFLAGS = @RSVG_CFLAGS@
 RSVG_LIBS = @RSVG_LIBS@
 RTMP_CFLAGS = @RTMP_CFLAGS@
@@ -632,6 +643,7 @@
 VOAACENC_LIBS = @VOAACENC_LIBS@
 VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
 VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VULKAN_LIBS = @VULKAN_LIBS@
 WARNING_CFLAGS = @WARNING_CFLAGS@
 WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
 WARNING_OBJCFLAGS = @WARNING_OBJCFLAGS@
@@ -642,6 +654,7 @@
 WAYLAND_LIBS = @WAYLAND_LIBS@
 WEBP_CFLAGS = @WEBP_CFLAGS@
 WEBP_LIBS = @WEBP_LIBS@
+WGET = @WGET@
 WILDMIDI_CFLAGS = @WILDMIDI_CFLAGS@
 WILDMIDI_LIBS = @WILDMIDI_LIBS@
 WINKS_LIBS = @WINKS_LIBS@
@@ -651,6 +664,8 @@
 X11_LIBS = @X11_LIBS@
 X265_CFLAGS = @X265_CFLAGS@
 X265_LIBS = @X265_LIBS@
+XCB_CFLAGS = @XCB_CFLAGS@
+XCB_LIBS = @XCB_LIBS@
 XCOMPOSITE_CFLAGS = @XCOMPOSITE_CFLAGS@
 XCOMPOSITE_LIBS = @XCOMPOSITE_LIBS@
 XGETTEXT = @XGETTEXT@
@@ -688,7 +703,6 @@
 docdir = @docdir@
 dvidir = @dvidir@
 exec_prefix = @exec_prefix@
-gsettingsschemadir = @gsettingsschemadir@
 host = @host@
 host_alias = @host_alias@
 host_cpu = @host_cpu@
diff --git a/tests/examples/gl/Makefile.in b/tests/examples/gl/Makefile.in
index af34b5e..9e40958 100644
--- a/tests/examples/gl/Makefile.in
+++ b/tests/examples/gl/Makefile.in
@@ -119,16 +119,15 @@
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
 	$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
-	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gsettings.m4 \
-	$(top_srcdir)/m4/gst-fionread.m4 $(top_srcdir)/m4/gst-sdl.m4 \
-	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
-	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
-	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libgcrypt.m4 \
-	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
-	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
-	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
-	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
-	$(top_srcdir)/configure.ac
+	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gst-fionread.m4 \
+	$(top_srcdir)/m4/gst-sdl.m4 $(top_srcdir)/m4/iconv.m4 \
+	$(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \
+	$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
+	$(top_srcdir)/m4/libgcrypt.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
+	$(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
@@ -252,6 +251,8 @@
 CLUTTER_X11_LIBS = @CLUTTER_X11_LIBS@
 CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
+CUDA_CFLAGS = @CUDA_CFLAGS@
+CUDA_LIBS = @CUDA_LIBS@
 CURL_CFLAGS = @CURL_CFLAGS@
 CURL_LIBS = @CURL_LIBS@
 CXX = @CXX@
@@ -289,6 +290,8 @@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
+EGL_CFLAGS = @EGL_CFLAGS@
+EGL_LIBS = @EGL_LIBS@
 EGREP = @EGREP@
 ERROR_CFLAGS = @ERROR_CFLAGS@
 ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
@@ -297,7 +300,6 @@
 EXIF_CFLAGS = @EXIF_CFLAGS@
 EXIF_LIBS = @EXIF_LIBS@
 FAAC_LIBS = @FAAC_LIBS@
-FAAD_IS_NEAAC = @FAAD_IS_NEAAC@
 FAAD_LIBS = @FAAD_LIBS@
 FFLAGS = @FFLAGS@
 FGREP = @FGREP@
@@ -316,8 +318,9 @@
 GIO_LIBS = @GIO_LIBS@
 GIO_UNIX_CFLAGS = @GIO_UNIX_CFLAGS@
 GIO_UNIX_LIBS = @GIO_UNIX_LIBS@
+GLES2_CFLAGS = @GLES2_CFLAGS@
+GLES2_LIBS = @GLES2_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
-GLIB_COMPILE_SCHEMAS = @GLIB_COMPILE_SCHEMAS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
@@ -334,16 +337,17 @@
 GMODULE_NO_EXPORT_LIBS = @GMODULE_NO_EXPORT_LIBS@
 GMSGFMT = @GMSGFMT@
 GMSGFMT_015 = @GMSGFMT_015@
+GNUSTL_CFLAGS = @GNUSTL_CFLAGS@
+GNUSTL_LIBS = @GNUSTL_LIBS@
 GRAPHENE_CFLAGS = @GRAPHENE_CFLAGS@
 GRAPHENE_LIBS = @GRAPHENE_LIBS@
 GREP = @GREP@
-GSETTINGS_CFLAGS = @GSETTINGS_CFLAGS@
-GSETTINGS_DISABLE_SCHEMAS_COMPILE = @GSETTINGS_DISABLE_SCHEMAS_COMPILE@
-GSETTINGS_LIBS = @GSETTINGS_LIBS@
 GSM_LIBS = @GSM_LIBS@
 GSTPB_PLUGINS_DIR = @GSTPB_PLUGINS_DIR@
 GSTPB_PREFIX = @GSTPB_PREFIX@
 GST_AGE = @GST_AGE@
+GST_ALLOCATORS_CFLAGS = @GST_ALLOCATORS_CFLAGS@
+GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
 GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
 GST_API_VERSION = @GST_API_VERSION@
 GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
@@ -369,6 +373,8 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PBUTILS_CFLAGS = @GST_PBUTILS_CFLAGS@
+GST_PBUTILS_LIBS = @GST_PBUTILS_LIBS@
 GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BAD_CFLAGS = @GST_PLUGINS_BAD_CFLAGS@
@@ -394,6 +400,8 @@
 GST_PREFIX = @GST_PREFIX@
 GST_REVISION = @GST_REVISION@
 GST_TOOLS_DIR = @GST_TOOLS_DIR@
+GST_VIDEO_CFLAGS = @GST_VIDEO_CFLAGS@
+GST_VIDEO_LIBS = @GST_VIDEO_LIBS@
 GTK3_CFLAGS = @GTK3_CFLAGS@
 GTK3_GL_CFLAGS = @GTK3_GL_CFLAGS@
 GTK3_GL_LIBS = @GTK3_GL_LIBS@
@@ -495,6 +503,7 @@
 LTLIBICONV = @LTLIBICONV@
 LTLIBINTL = @LTLIBINTL@
 LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
 MANIFEST_TOOL = @MANIFEST_TOOL@
@@ -508,8 +517,6 @@
 MODPLUG_LIBS = @MODPLUG_LIBS@
 MPEG2ENC_CFLAGS = @MPEG2ENC_CFLAGS@
 MPEG2ENC_LIBS = @MPEG2ENC_LIBS@
-MPG123_CFLAGS = @MPG123_CFLAGS@
-MPG123_LIBS = @MPG123_LIBS@
 MPLEX_CFLAGS = @MPLEX_CFLAGS@
 MPLEX_LDFLAGS = @MPLEX_LDFLAGS@
 MPLEX_LIBS = @MPLEX_LIBS@
@@ -525,6 +532,8 @@
 NETTLE_LIBS = @NETTLE_LIBS@
 NM = @NM@
 NMEDIT = @NMEDIT@
+NVENCODE_CFLAGS = @NVENCODE_CFLAGS@
+NVENCODE_LIBS = @NVENCODE_LIBS@
 OBJC = @OBJC@
 OBJCDEPMODE = @OBJCDEPMODE@
 OBJCFLAGS = @OBJCFLAGS@
@@ -582,16 +591,18 @@
 PYTHON_PLATFORM = @PYTHON_PLATFORM@
 PYTHON_PREFIX = @PYTHON_PREFIX@
 PYTHON_VERSION = @PYTHON_VERSION@
+QT_ANDROID_CFLAGS = @QT_ANDROID_CFLAGS@
+QT_ANDROID_LIBS = @QT_ANDROID_LIBS@
 QT_CFLAGS = @QT_CFLAGS@
 QT_LIBS = @QT_LIBS@
+QT_MAC_CFLAGS = @QT_MAC_CFLAGS@
+QT_MAC_LIBS = @QT_MAC_LIBS@
 QT_WAYLAND_CFLAGS = @QT_WAYLAND_CFLAGS@
 QT_WAYLAND_LIBS = @QT_WAYLAND_LIBS@
 QT_X11_CFLAGS = @QT_X11_CFLAGS@
 QT_X11_LIBS = @QT_X11_LIBS@
 RANLIB = @RANLIB@
 RCC = @RCC@
-RSVG_2_36_2_CFLAGS = @RSVG_2_36_2_CFLAGS@
-RSVG_2_36_2_LIBS = @RSVG_2_36_2_LIBS@
 RSVG_CFLAGS = @RSVG_CFLAGS@
 RSVG_LIBS = @RSVG_LIBS@
 RTMP_CFLAGS = @RTMP_CFLAGS@
@@ -643,6 +654,7 @@
 VOAACENC_LIBS = @VOAACENC_LIBS@
 VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
 VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VULKAN_LIBS = @VULKAN_LIBS@
 WARNING_CFLAGS = @WARNING_CFLAGS@
 WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
 WARNING_OBJCFLAGS = @WARNING_OBJCFLAGS@
@@ -653,6 +665,7 @@
 WAYLAND_LIBS = @WAYLAND_LIBS@
 WEBP_CFLAGS = @WEBP_CFLAGS@
 WEBP_LIBS = @WEBP_LIBS@
+WGET = @WGET@
 WILDMIDI_CFLAGS = @WILDMIDI_CFLAGS@
 WILDMIDI_LIBS = @WILDMIDI_LIBS@
 WINKS_LIBS = @WINKS_LIBS@
@@ -662,6 +675,8 @@
 X11_LIBS = @X11_LIBS@
 X265_CFLAGS = @X265_CFLAGS@
 X265_LIBS = @X265_LIBS@
+XCB_CFLAGS = @XCB_CFLAGS@
+XCB_LIBS = @XCB_LIBS@
 XCOMPOSITE_CFLAGS = @XCOMPOSITE_CFLAGS@
 XCOMPOSITE_LIBS = @XCOMPOSITE_LIBS@
 XGETTEXT = @XGETTEXT@
@@ -699,7 +714,6 @@
 docdir = @docdir@
 dvidir = @dvidir@
 exec_prefix = @exec_prefix@
-gsettingsschemadir = @gsettingsschemadir@
 host = @host@
 host_alias = @host_alias@
 host_cpu = @host_cpu@
diff --git a/tests/examples/gl/clutter/Makefile.in b/tests/examples/gl/clutter/Makefile.in
index 160d109..854e75a 100644
--- a/tests/examples/gl/clutter/Makefile.in
+++ b/tests/examples/gl/clutter/Makefile.in
@@ -120,16 +120,15 @@
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
 	$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
-	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gsettings.m4 \
-	$(top_srcdir)/m4/gst-fionread.m4 $(top_srcdir)/m4/gst-sdl.m4 \
-	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
-	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
-	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libgcrypt.m4 \
-	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
-	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
-	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
-	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
-	$(top_srcdir)/configure.ac
+	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gst-fionread.m4 \
+	$(top_srcdir)/m4/gst-sdl.m4 $(top_srcdir)/m4/iconv.m4 \
+	$(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \
+	$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
+	$(top_srcdir)/m4/libgcrypt.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
+	$(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
@@ -284,6 +283,8 @@
 CLUTTER_X11_LIBS = @CLUTTER_X11_LIBS@
 CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
+CUDA_CFLAGS = @CUDA_CFLAGS@
+CUDA_LIBS = @CUDA_LIBS@
 CURL_CFLAGS = @CURL_CFLAGS@
 CURL_LIBS = @CURL_LIBS@
 CXX = @CXX@
@@ -321,6 +322,8 @@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
+EGL_CFLAGS = @EGL_CFLAGS@
+EGL_LIBS = @EGL_LIBS@
 EGREP = @EGREP@
 ERROR_CFLAGS = @ERROR_CFLAGS@
 ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
@@ -329,7 +332,6 @@
 EXIF_CFLAGS = @EXIF_CFLAGS@
 EXIF_LIBS = @EXIF_LIBS@
 FAAC_LIBS = @FAAC_LIBS@
-FAAD_IS_NEAAC = @FAAD_IS_NEAAC@
 FAAD_LIBS = @FAAD_LIBS@
 FFLAGS = @FFLAGS@
 FGREP = @FGREP@
@@ -348,8 +350,9 @@
 GIO_LIBS = @GIO_LIBS@
 GIO_UNIX_CFLAGS = @GIO_UNIX_CFLAGS@
 GIO_UNIX_LIBS = @GIO_UNIX_LIBS@
+GLES2_CFLAGS = @GLES2_CFLAGS@
+GLES2_LIBS = @GLES2_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
-GLIB_COMPILE_SCHEMAS = @GLIB_COMPILE_SCHEMAS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
@@ -366,16 +369,17 @@
 GMODULE_NO_EXPORT_LIBS = @GMODULE_NO_EXPORT_LIBS@
 GMSGFMT = @GMSGFMT@
 GMSGFMT_015 = @GMSGFMT_015@
+GNUSTL_CFLAGS = @GNUSTL_CFLAGS@
+GNUSTL_LIBS = @GNUSTL_LIBS@
 GRAPHENE_CFLAGS = @GRAPHENE_CFLAGS@
 GRAPHENE_LIBS = @GRAPHENE_LIBS@
 GREP = @GREP@
-GSETTINGS_CFLAGS = @GSETTINGS_CFLAGS@
-GSETTINGS_DISABLE_SCHEMAS_COMPILE = @GSETTINGS_DISABLE_SCHEMAS_COMPILE@
-GSETTINGS_LIBS = @GSETTINGS_LIBS@
 GSM_LIBS = @GSM_LIBS@
 GSTPB_PLUGINS_DIR = @GSTPB_PLUGINS_DIR@
 GSTPB_PREFIX = @GSTPB_PREFIX@
 GST_AGE = @GST_AGE@
+GST_ALLOCATORS_CFLAGS = @GST_ALLOCATORS_CFLAGS@
+GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
 GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
 GST_API_VERSION = @GST_API_VERSION@
 GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
@@ -401,6 +405,8 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PBUTILS_CFLAGS = @GST_PBUTILS_CFLAGS@
+GST_PBUTILS_LIBS = @GST_PBUTILS_LIBS@
 GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BAD_CFLAGS = @GST_PLUGINS_BAD_CFLAGS@
@@ -426,6 +432,8 @@
 GST_PREFIX = @GST_PREFIX@
 GST_REVISION = @GST_REVISION@
 GST_TOOLS_DIR = @GST_TOOLS_DIR@
+GST_VIDEO_CFLAGS = @GST_VIDEO_CFLAGS@
+GST_VIDEO_LIBS = @GST_VIDEO_LIBS@
 GTK3_CFLAGS = @GTK3_CFLAGS@
 GTK3_GL_CFLAGS = @GTK3_GL_CFLAGS@
 GTK3_GL_LIBS = @GTK3_GL_LIBS@
@@ -527,6 +535,7 @@
 LTLIBICONV = @LTLIBICONV@
 LTLIBINTL = @LTLIBINTL@
 LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
 MANIFEST_TOOL = @MANIFEST_TOOL@
@@ -540,8 +549,6 @@
 MODPLUG_LIBS = @MODPLUG_LIBS@
 MPEG2ENC_CFLAGS = @MPEG2ENC_CFLAGS@
 MPEG2ENC_LIBS = @MPEG2ENC_LIBS@
-MPG123_CFLAGS = @MPG123_CFLAGS@
-MPG123_LIBS = @MPG123_LIBS@
 MPLEX_CFLAGS = @MPLEX_CFLAGS@
 MPLEX_LDFLAGS = @MPLEX_LDFLAGS@
 MPLEX_LIBS = @MPLEX_LIBS@
@@ -557,6 +564,8 @@
 NETTLE_LIBS = @NETTLE_LIBS@
 NM = @NM@
 NMEDIT = @NMEDIT@
+NVENCODE_CFLAGS = @NVENCODE_CFLAGS@
+NVENCODE_LIBS = @NVENCODE_LIBS@
 OBJC = @OBJC@
 OBJCDEPMODE = @OBJCDEPMODE@
 OBJCFLAGS = @OBJCFLAGS@
@@ -614,16 +623,18 @@
 PYTHON_PLATFORM = @PYTHON_PLATFORM@
 PYTHON_PREFIX = @PYTHON_PREFIX@
 PYTHON_VERSION = @PYTHON_VERSION@
+QT_ANDROID_CFLAGS = @QT_ANDROID_CFLAGS@
+QT_ANDROID_LIBS = @QT_ANDROID_LIBS@
 QT_CFLAGS = @QT_CFLAGS@
 QT_LIBS = @QT_LIBS@
+QT_MAC_CFLAGS = @QT_MAC_CFLAGS@
+QT_MAC_LIBS = @QT_MAC_LIBS@
 QT_WAYLAND_CFLAGS = @QT_WAYLAND_CFLAGS@
 QT_WAYLAND_LIBS = @QT_WAYLAND_LIBS@
 QT_X11_CFLAGS = @QT_X11_CFLAGS@
 QT_X11_LIBS = @QT_X11_LIBS@
 RANLIB = @RANLIB@
 RCC = @RCC@
-RSVG_2_36_2_CFLAGS = @RSVG_2_36_2_CFLAGS@
-RSVG_2_36_2_LIBS = @RSVG_2_36_2_LIBS@
 RSVG_CFLAGS = @RSVG_CFLAGS@
 RSVG_LIBS = @RSVG_LIBS@
 RTMP_CFLAGS = @RTMP_CFLAGS@
@@ -675,6 +686,7 @@
 VOAACENC_LIBS = @VOAACENC_LIBS@
 VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
 VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VULKAN_LIBS = @VULKAN_LIBS@
 WARNING_CFLAGS = @WARNING_CFLAGS@
 WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
 WARNING_OBJCFLAGS = @WARNING_OBJCFLAGS@
@@ -685,6 +697,7 @@
 WAYLAND_LIBS = @WAYLAND_LIBS@
 WEBP_CFLAGS = @WEBP_CFLAGS@
 WEBP_LIBS = @WEBP_LIBS@
+WGET = @WGET@
 WILDMIDI_CFLAGS = @WILDMIDI_CFLAGS@
 WILDMIDI_LIBS = @WILDMIDI_LIBS@
 WINKS_LIBS = @WINKS_LIBS@
@@ -694,6 +707,8 @@
 X11_LIBS = @X11_LIBS@
 X265_CFLAGS = @X265_CFLAGS@
 X265_LIBS = @X265_LIBS@
+XCB_CFLAGS = @XCB_CFLAGS@
+XCB_LIBS = @XCB_LIBS@
 XCOMPOSITE_CFLAGS = @XCOMPOSITE_CFLAGS@
 XCOMPOSITE_LIBS = @XCOMPOSITE_LIBS@
 XGETTEXT = @XGETTEXT@
@@ -731,7 +746,6 @@
 docdir = @docdir@
 dvidir = @dvidir@
 exec_prefix = @exec_prefix@
-gsettingsschemadir = @gsettingsschemadir@
 host = @host@
 host_alias = @host_alias@
 host_cpu = @host_cpu@
diff --git a/tests/examples/gl/clutter/cluttershare.c b/tests/examples/gl/clutter/cluttershare.c
index de7cd66..ee4eb7d 100644
--- a/tests/examples/gl/clutter/cluttershare.c
+++ b/tests/examples/gl/clutter/cluttershare.c
@@ -36,7 +36,7 @@
 #include <gst/gst.h>
 #include <gst/video/video.h>
 #include <gst/video/gstvideometa.h>
-#include <gst/gl/gstglmemory.h>
+#include <gst/gl/gl.h>
 
 /* This example shows how to use textures that come from a
  * gst-plugins-gl pipeline, into the clutter framework
diff --git a/tests/examples/gl/cocoa/Makefile.in b/tests/examples/gl/cocoa/Makefile.in
index 2e6054a..f5f4606 100644
--- a/tests/examples/gl/cocoa/Makefile.in
+++ b/tests/examples/gl/cocoa/Makefile.in
@@ -116,16 +116,15 @@
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
 	$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
-	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gsettings.m4 \
-	$(top_srcdir)/m4/gst-fionread.m4 $(top_srcdir)/m4/gst-sdl.m4 \
-	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
-	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
-	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libgcrypt.m4 \
-	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
-	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
-	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
-	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
-	$(top_srcdir)/configure.ac
+	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gst-fionread.m4 \
+	$(top_srcdir)/m4/gst-sdl.m4 $(top_srcdir)/m4/iconv.m4 \
+	$(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \
+	$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
+	$(top_srcdir)/m4/libgcrypt.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
+	$(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
@@ -247,6 +246,8 @@
 CLUTTER_X11_LIBS = @CLUTTER_X11_LIBS@
 CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
+CUDA_CFLAGS = @CUDA_CFLAGS@
+CUDA_LIBS = @CUDA_LIBS@
 CURL_CFLAGS = @CURL_CFLAGS@
 CURL_LIBS = @CURL_LIBS@
 CXX = @CXX@
@@ -284,6 +285,8 @@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
+EGL_CFLAGS = @EGL_CFLAGS@
+EGL_LIBS = @EGL_LIBS@
 EGREP = @EGREP@
 ERROR_CFLAGS = @ERROR_CFLAGS@
 ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
@@ -292,7 +295,6 @@
 EXIF_CFLAGS = @EXIF_CFLAGS@
 EXIF_LIBS = @EXIF_LIBS@
 FAAC_LIBS = @FAAC_LIBS@
-FAAD_IS_NEAAC = @FAAD_IS_NEAAC@
 FAAD_LIBS = @FAAD_LIBS@
 FFLAGS = @FFLAGS@
 FGREP = @FGREP@
@@ -311,8 +313,9 @@
 GIO_LIBS = @GIO_LIBS@
 GIO_UNIX_CFLAGS = @GIO_UNIX_CFLAGS@
 GIO_UNIX_LIBS = @GIO_UNIX_LIBS@
+GLES2_CFLAGS = @GLES2_CFLAGS@
+GLES2_LIBS = @GLES2_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
-GLIB_COMPILE_SCHEMAS = @GLIB_COMPILE_SCHEMAS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
@@ -329,16 +332,17 @@
 GMODULE_NO_EXPORT_LIBS = @GMODULE_NO_EXPORT_LIBS@
 GMSGFMT = @GMSGFMT@
 GMSGFMT_015 = @GMSGFMT_015@
+GNUSTL_CFLAGS = @GNUSTL_CFLAGS@
+GNUSTL_LIBS = @GNUSTL_LIBS@
 GRAPHENE_CFLAGS = @GRAPHENE_CFLAGS@
 GRAPHENE_LIBS = @GRAPHENE_LIBS@
 GREP = @GREP@
-GSETTINGS_CFLAGS = @GSETTINGS_CFLAGS@
-GSETTINGS_DISABLE_SCHEMAS_COMPILE = @GSETTINGS_DISABLE_SCHEMAS_COMPILE@
-GSETTINGS_LIBS = @GSETTINGS_LIBS@
 GSM_LIBS = @GSM_LIBS@
 GSTPB_PLUGINS_DIR = @GSTPB_PLUGINS_DIR@
 GSTPB_PREFIX = @GSTPB_PREFIX@
 GST_AGE = @GST_AGE@
+GST_ALLOCATORS_CFLAGS = @GST_ALLOCATORS_CFLAGS@
+GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
 GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
 GST_API_VERSION = @GST_API_VERSION@
 GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
@@ -364,6 +368,8 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PBUTILS_CFLAGS = @GST_PBUTILS_CFLAGS@
+GST_PBUTILS_LIBS = @GST_PBUTILS_LIBS@
 GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BAD_CFLAGS = @GST_PLUGINS_BAD_CFLAGS@
@@ -389,6 +395,8 @@
 GST_PREFIX = @GST_PREFIX@
 GST_REVISION = @GST_REVISION@
 GST_TOOLS_DIR = @GST_TOOLS_DIR@
+GST_VIDEO_CFLAGS = @GST_VIDEO_CFLAGS@
+GST_VIDEO_LIBS = @GST_VIDEO_LIBS@
 GTK3_CFLAGS = @GTK3_CFLAGS@
 GTK3_GL_CFLAGS = @GTK3_GL_CFLAGS@
 GTK3_GL_LIBS = @GTK3_GL_LIBS@
@@ -490,6 +498,7 @@
 LTLIBICONV = @LTLIBICONV@
 LTLIBINTL = @LTLIBINTL@
 LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
 MANIFEST_TOOL = @MANIFEST_TOOL@
@@ -503,8 +512,6 @@
 MODPLUG_LIBS = @MODPLUG_LIBS@
 MPEG2ENC_CFLAGS = @MPEG2ENC_CFLAGS@
 MPEG2ENC_LIBS = @MPEG2ENC_LIBS@
-MPG123_CFLAGS = @MPG123_CFLAGS@
-MPG123_LIBS = @MPG123_LIBS@
 MPLEX_CFLAGS = @MPLEX_CFLAGS@
 MPLEX_LDFLAGS = @MPLEX_LDFLAGS@
 MPLEX_LIBS = @MPLEX_LIBS@
@@ -520,6 +527,8 @@
 NETTLE_LIBS = @NETTLE_LIBS@
 NM = @NM@
 NMEDIT = @NMEDIT@
+NVENCODE_CFLAGS = @NVENCODE_CFLAGS@
+NVENCODE_LIBS = @NVENCODE_LIBS@
 OBJC = @OBJC@
 OBJCDEPMODE = @OBJCDEPMODE@
 OBJCFLAGS = @OBJCFLAGS@
@@ -577,16 +586,18 @@
 PYTHON_PLATFORM = @PYTHON_PLATFORM@
 PYTHON_PREFIX = @PYTHON_PREFIX@
 PYTHON_VERSION = @PYTHON_VERSION@
+QT_ANDROID_CFLAGS = @QT_ANDROID_CFLAGS@
+QT_ANDROID_LIBS = @QT_ANDROID_LIBS@
 QT_CFLAGS = @QT_CFLAGS@
 QT_LIBS = @QT_LIBS@
+QT_MAC_CFLAGS = @QT_MAC_CFLAGS@
+QT_MAC_LIBS = @QT_MAC_LIBS@
 QT_WAYLAND_CFLAGS = @QT_WAYLAND_CFLAGS@
 QT_WAYLAND_LIBS = @QT_WAYLAND_LIBS@
 QT_X11_CFLAGS = @QT_X11_CFLAGS@
 QT_X11_LIBS = @QT_X11_LIBS@
 RANLIB = @RANLIB@
 RCC = @RCC@
-RSVG_2_36_2_CFLAGS = @RSVG_2_36_2_CFLAGS@
-RSVG_2_36_2_LIBS = @RSVG_2_36_2_LIBS@
 RSVG_CFLAGS = @RSVG_CFLAGS@
 RSVG_LIBS = @RSVG_LIBS@
 RTMP_CFLAGS = @RTMP_CFLAGS@
@@ -638,6 +649,7 @@
 VOAACENC_LIBS = @VOAACENC_LIBS@
 VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
 VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VULKAN_LIBS = @VULKAN_LIBS@
 WARNING_CFLAGS = @WARNING_CFLAGS@
 WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
 WARNING_OBJCFLAGS = @WARNING_OBJCFLAGS@
@@ -648,6 +660,7 @@
 WAYLAND_LIBS = @WAYLAND_LIBS@
 WEBP_CFLAGS = @WEBP_CFLAGS@
 WEBP_LIBS = @WEBP_LIBS@
+WGET = @WGET@
 WILDMIDI_CFLAGS = @WILDMIDI_CFLAGS@
 WILDMIDI_LIBS = @WILDMIDI_LIBS@
 WINKS_LIBS = @WINKS_LIBS@
@@ -657,6 +670,8 @@
 X11_LIBS = @X11_LIBS@
 X265_CFLAGS = @X265_CFLAGS@
 X265_LIBS = @X265_LIBS@
+XCB_CFLAGS = @XCB_CFLAGS@
+XCB_LIBS = @XCB_LIBS@
 XCOMPOSITE_CFLAGS = @XCOMPOSITE_CFLAGS@
 XCOMPOSITE_LIBS = @XCOMPOSITE_LIBS@
 XGETTEXT = @XGETTEXT@
@@ -694,7 +709,6 @@
 docdir = @docdir@
 dvidir = @dvidir@
 exec_prefix = @exec_prefix@
-gsettingsschemadir = @gsettingsschemadir@
 host = @host@
 host_alias = @host_alias@
 host_cpu = @host_cpu@
diff --git a/tests/examples/gl/generic/Makefile.in b/tests/examples/gl/generic/Makefile.in
index 140395a..a4fb04c 100644
--- a/tests/examples/gl/generic/Makefile.in
+++ b/tests/examples/gl/generic/Makefile.in
@@ -114,16 +114,15 @@
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
 	$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
-	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gsettings.m4 \
-	$(top_srcdir)/m4/gst-fionread.m4 $(top_srcdir)/m4/gst-sdl.m4 \
-	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
-	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
-	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libgcrypt.m4 \
-	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
-	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
-	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
-	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
-	$(top_srcdir)/configure.ac
+	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gst-fionread.m4 \
+	$(top_srcdir)/m4/gst-sdl.m4 $(top_srcdir)/m4/iconv.m4 \
+	$(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \
+	$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
+	$(top_srcdir)/m4/libgcrypt.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
+	$(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
@@ -248,6 +247,8 @@
 CLUTTER_X11_LIBS = @CLUTTER_X11_LIBS@
 CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
+CUDA_CFLAGS = @CUDA_CFLAGS@
+CUDA_LIBS = @CUDA_LIBS@
 CURL_CFLAGS = @CURL_CFLAGS@
 CURL_LIBS = @CURL_LIBS@
 CXX = @CXX@
@@ -285,6 +286,8 @@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
+EGL_CFLAGS = @EGL_CFLAGS@
+EGL_LIBS = @EGL_LIBS@
 EGREP = @EGREP@
 ERROR_CFLAGS = @ERROR_CFLAGS@
 ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
@@ -293,7 +296,6 @@
 EXIF_CFLAGS = @EXIF_CFLAGS@
 EXIF_LIBS = @EXIF_LIBS@
 FAAC_LIBS = @FAAC_LIBS@
-FAAD_IS_NEAAC = @FAAD_IS_NEAAC@
 FAAD_LIBS = @FAAD_LIBS@
 FFLAGS = @FFLAGS@
 FGREP = @FGREP@
@@ -312,8 +314,9 @@
 GIO_LIBS = @GIO_LIBS@
 GIO_UNIX_CFLAGS = @GIO_UNIX_CFLAGS@
 GIO_UNIX_LIBS = @GIO_UNIX_LIBS@
+GLES2_CFLAGS = @GLES2_CFLAGS@
+GLES2_LIBS = @GLES2_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
-GLIB_COMPILE_SCHEMAS = @GLIB_COMPILE_SCHEMAS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
@@ -330,16 +333,17 @@
 GMODULE_NO_EXPORT_LIBS = @GMODULE_NO_EXPORT_LIBS@
 GMSGFMT = @GMSGFMT@
 GMSGFMT_015 = @GMSGFMT_015@
+GNUSTL_CFLAGS = @GNUSTL_CFLAGS@
+GNUSTL_LIBS = @GNUSTL_LIBS@
 GRAPHENE_CFLAGS = @GRAPHENE_CFLAGS@
 GRAPHENE_LIBS = @GRAPHENE_LIBS@
 GREP = @GREP@
-GSETTINGS_CFLAGS = @GSETTINGS_CFLAGS@
-GSETTINGS_DISABLE_SCHEMAS_COMPILE = @GSETTINGS_DISABLE_SCHEMAS_COMPILE@
-GSETTINGS_LIBS = @GSETTINGS_LIBS@
 GSM_LIBS = @GSM_LIBS@
 GSTPB_PLUGINS_DIR = @GSTPB_PLUGINS_DIR@
 GSTPB_PREFIX = @GSTPB_PREFIX@
 GST_AGE = @GST_AGE@
+GST_ALLOCATORS_CFLAGS = @GST_ALLOCATORS_CFLAGS@
+GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
 GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
 GST_API_VERSION = @GST_API_VERSION@
 GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
@@ -365,6 +369,8 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PBUTILS_CFLAGS = @GST_PBUTILS_CFLAGS@
+GST_PBUTILS_LIBS = @GST_PBUTILS_LIBS@
 GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BAD_CFLAGS = @GST_PLUGINS_BAD_CFLAGS@
@@ -390,6 +396,8 @@
 GST_PREFIX = @GST_PREFIX@
 GST_REVISION = @GST_REVISION@
 GST_TOOLS_DIR = @GST_TOOLS_DIR@
+GST_VIDEO_CFLAGS = @GST_VIDEO_CFLAGS@
+GST_VIDEO_LIBS = @GST_VIDEO_LIBS@
 GTK3_CFLAGS = @GTK3_CFLAGS@
 GTK3_GL_CFLAGS = @GTK3_GL_CFLAGS@
 GTK3_GL_LIBS = @GTK3_GL_LIBS@
@@ -491,6 +499,7 @@
 LTLIBICONV = @LTLIBICONV@
 LTLIBINTL = @LTLIBINTL@
 LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
 MANIFEST_TOOL = @MANIFEST_TOOL@
@@ -504,8 +513,6 @@
 MODPLUG_LIBS = @MODPLUG_LIBS@
 MPEG2ENC_CFLAGS = @MPEG2ENC_CFLAGS@
 MPEG2ENC_LIBS = @MPEG2ENC_LIBS@
-MPG123_CFLAGS = @MPG123_CFLAGS@
-MPG123_LIBS = @MPG123_LIBS@
 MPLEX_CFLAGS = @MPLEX_CFLAGS@
 MPLEX_LDFLAGS = @MPLEX_LDFLAGS@
 MPLEX_LIBS = @MPLEX_LIBS@
@@ -521,6 +528,8 @@
 NETTLE_LIBS = @NETTLE_LIBS@
 NM = @NM@
 NMEDIT = @NMEDIT@
+NVENCODE_CFLAGS = @NVENCODE_CFLAGS@
+NVENCODE_LIBS = @NVENCODE_LIBS@
 OBJC = @OBJC@
 OBJCDEPMODE = @OBJCDEPMODE@
 OBJCFLAGS = @OBJCFLAGS@
@@ -578,16 +587,18 @@
 PYTHON_PLATFORM = @PYTHON_PLATFORM@
 PYTHON_PREFIX = @PYTHON_PREFIX@
 PYTHON_VERSION = @PYTHON_VERSION@
+QT_ANDROID_CFLAGS = @QT_ANDROID_CFLAGS@
+QT_ANDROID_LIBS = @QT_ANDROID_LIBS@
 QT_CFLAGS = @QT_CFLAGS@
 QT_LIBS = @QT_LIBS@
+QT_MAC_CFLAGS = @QT_MAC_CFLAGS@
+QT_MAC_LIBS = @QT_MAC_LIBS@
 QT_WAYLAND_CFLAGS = @QT_WAYLAND_CFLAGS@
 QT_WAYLAND_LIBS = @QT_WAYLAND_LIBS@
 QT_X11_CFLAGS = @QT_X11_CFLAGS@
 QT_X11_LIBS = @QT_X11_LIBS@
 RANLIB = @RANLIB@
 RCC = @RCC@
-RSVG_2_36_2_CFLAGS = @RSVG_2_36_2_CFLAGS@
-RSVG_2_36_2_LIBS = @RSVG_2_36_2_LIBS@
 RSVG_CFLAGS = @RSVG_CFLAGS@
 RSVG_LIBS = @RSVG_LIBS@
 RTMP_CFLAGS = @RTMP_CFLAGS@
@@ -639,6 +650,7 @@
 VOAACENC_LIBS = @VOAACENC_LIBS@
 VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
 VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VULKAN_LIBS = @VULKAN_LIBS@
 WARNING_CFLAGS = @WARNING_CFLAGS@
 WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
 WARNING_OBJCFLAGS = @WARNING_OBJCFLAGS@
@@ -649,6 +661,7 @@
 WAYLAND_LIBS = @WAYLAND_LIBS@
 WEBP_CFLAGS = @WEBP_CFLAGS@
 WEBP_LIBS = @WEBP_LIBS@
+WGET = @WGET@
 WILDMIDI_CFLAGS = @WILDMIDI_CFLAGS@
 WILDMIDI_LIBS = @WILDMIDI_LIBS@
 WINKS_LIBS = @WINKS_LIBS@
@@ -658,6 +671,8 @@
 X11_LIBS = @X11_LIBS@
 X265_CFLAGS = @X265_CFLAGS@
 X265_LIBS = @X265_LIBS@
+XCB_CFLAGS = @XCB_CFLAGS@
+XCB_LIBS = @XCB_LIBS@
 XCOMPOSITE_CFLAGS = @XCOMPOSITE_CFLAGS@
 XCOMPOSITE_LIBS = @XCOMPOSITE_LIBS@
 XGETTEXT = @XGETTEXT@
@@ -695,7 +710,6 @@
 docdir = @docdir@
 dvidir = @dvidir@
 exec_prefix = @exec_prefix@
-gsettingsschemadir = @gsettingsschemadir@
 host = @host@
 host_alias = @host_alias@
 host_cpu = @host_cpu@
diff --git a/tests/examples/gl/generic/cube/Makefile.in b/tests/examples/gl/generic/cube/Makefile.in
index c8561a0..4053276 100644
--- a/tests/examples/gl/generic/cube/Makefile.in
+++ b/tests/examples/gl/generic/cube/Makefile.in
@@ -116,16 +116,15 @@
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
 	$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
-	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gsettings.m4 \
-	$(top_srcdir)/m4/gst-fionread.m4 $(top_srcdir)/m4/gst-sdl.m4 \
-	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
-	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
-	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libgcrypt.m4 \
-	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
-	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
-	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
-	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
-	$(top_srcdir)/configure.ac
+	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gst-fionread.m4 \
+	$(top_srcdir)/m4/gst-sdl.m4 $(top_srcdir)/m4/iconv.m4 \
+	$(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \
+	$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
+	$(top_srcdir)/m4/libgcrypt.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
+	$(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
@@ -243,6 +242,8 @@
 CLUTTER_X11_LIBS = @CLUTTER_X11_LIBS@
 CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
+CUDA_CFLAGS = @CUDA_CFLAGS@
+CUDA_LIBS = @CUDA_LIBS@
 CURL_CFLAGS = @CURL_CFLAGS@
 CURL_LIBS = @CURL_LIBS@
 CXX = @CXX@
@@ -280,6 +281,8 @@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
+EGL_CFLAGS = @EGL_CFLAGS@
+EGL_LIBS = @EGL_LIBS@
 EGREP = @EGREP@
 ERROR_CFLAGS = @ERROR_CFLAGS@
 ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
@@ -288,7 +291,6 @@
 EXIF_CFLAGS = @EXIF_CFLAGS@
 EXIF_LIBS = @EXIF_LIBS@
 FAAC_LIBS = @FAAC_LIBS@
-FAAD_IS_NEAAC = @FAAD_IS_NEAAC@
 FAAD_LIBS = @FAAD_LIBS@
 FFLAGS = @FFLAGS@
 FGREP = @FGREP@
@@ -307,8 +309,9 @@
 GIO_LIBS = @GIO_LIBS@
 GIO_UNIX_CFLAGS = @GIO_UNIX_CFLAGS@
 GIO_UNIX_LIBS = @GIO_UNIX_LIBS@
+GLES2_CFLAGS = @GLES2_CFLAGS@
+GLES2_LIBS = @GLES2_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
-GLIB_COMPILE_SCHEMAS = @GLIB_COMPILE_SCHEMAS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
@@ -325,16 +328,17 @@
 GMODULE_NO_EXPORT_LIBS = @GMODULE_NO_EXPORT_LIBS@
 GMSGFMT = @GMSGFMT@
 GMSGFMT_015 = @GMSGFMT_015@
+GNUSTL_CFLAGS = @GNUSTL_CFLAGS@
+GNUSTL_LIBS = @GNUSTL_LIBS@
 GRAPHENE_CFLAGS = @GRAPHENE_CFLAGS@
 GRAPHENE_LIBS = @GRAPHENE_LIBS@
 GREP = @GREP@
-GSETTINGS_CFLAGS = @GSETTINGS_CFLAGS@
-GSETTINGS_DISABLE_SCHEMAS_COMPILE = @GSETTINGS_DISABLE_SCHEMAS_COMPILE@
-GSETTINGS_LIBS = @GSETTINGS_LIBS@
 GSM_LIBS = @GSM_LIBS@
 GSTPB_PLUGINS_DIR = @GSTPB_PLUGINS_DIR@
 GSTPB_PREFIX = @GSTPB_PREFIX@
 GST_AGE = @GST_AGE@
+GST_ALLOCATORS_CFLAGS = @GST_ALLOCATORS_CFLAGS@
+GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
 GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
 GST_API_VERSION = @GST_API_VERSION@
 GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
@@ -360,6 +364,8 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PBUTILS_CFLAGS = @GST_PBUTILS_CFLAGS@
+GST_PBUTILS_LIBS = @GST_PBUTILS_LIBS@
 GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BAD_CFLAGS = @GST_PLUGINS_BAD_CFLAGS@
@@ -385,6 +391,8 @@
 GST_PREFIX = @GST_PREFIX@
 GST_REVISION = @GST_REVISION@
 GST_TOOLS_DIR = @GST_TOOLS_DIR@
+GST_VIDEO_CFLAGS = @GST_VIDEO_CFLAGS@
+GST_VIDEO_LIBS = @GST_VIDEO_LIBS@
 GTK3_CFLAGS = @GTK3_CFLAGS@
 GTK3_GL_CFLAGS = @GTK3_GL_CFLAGS@
 GTK3_GL_LIBS = @GTK3_GL_LIBS@
@@ -486,6 +494,7 @@
 LTLIBICONV = @LTLIBICONV@
 LTLIBINTL = @LTLIBINTL@
 LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
 MANIFEST_TOOL = @MANIFEST_TOOL@
@@ -499,8 +508,6 @@
 MODPLUG_LIBS = @MODPLUG_LIBS@
 MPEG2ENC_CFLAGS = @MPEG2ENC_CFLAGS@
 MPEG2ENC_LIBS = @MPEG2ENC_LIBS@
-MPG123_CFLAGS = @MPG123_CFLAGS@
-MPG123_LIBS = @MPG123_LIBS@
 MPLEX_CFLAGS = @MPLEX_CFLAGS@
 MPLEX_LDFLAGS = @MPLEX_LDFLAGS@
 MPLEX_LIBS = @MPLEX_LIBS@
@@ -516,6 +523,8 @@
 NETTLE_LIBS = @NETTLE_LIBS@
 NM = @NM@
 NMEDIT = @NMEDIT@
+NVENCODE_CFLAGS = @NVENCODE_CFLAGS@
+NVENCODE_LIBS = @NVENCODE_LIBS@
 OBJC = @OBJC@
 OBJCDEPMODE = @OBJCDEPMODE@
 OBJCFLAGS = @OBJCFLAGS@
@@ -573,16 +582,18 @@
 PYTHON_PLATFORM = @PYTHON_PLATFORM@
 PYTHON_PREFIX = @PYTHON_PREFIX@
 PYTHON_VERSION = @PYTHON_VERSION@
+QT_ANDROID_CFLAGS = @QT_ANDROID_CFLAGS@
+QT_ANDROID_LIBS = @QT_ANDROID_LIBS@
 QT_CFLAGS = @QT_CFLAGS@
 QT_LIBS = @QT_LIBS@
+QT_MAC_CFLAGS = @QT_MAC_CFLAGS@
+QT_MAC_LIBS = @QT_MAC_LIBS@
 QT_WAYLAND_CFLAGS = @QT_WAYLAND_CFLAGS@
 QT_WAYLAND_LIBS = @QT_WAYLAND_LIBS@
 QT_X11_CFLAGS = @QT_X11_CFLAGS@
 QT_X11_LIBS = @QT_X11_LIBS@
 RANLIB = @RANLIB@
 RCC = @RCC@
-RSVG_2_36_2_CFLAGS = @RSVG_2_36_2_CFLAGS@
-RSVG_2_36_2_LIBS = @RSVG_2_36_2_LIBS@
 RSVG_CFLAGS = @RSVG_CFLAGS@
 RSVG_LIBS = @RSVG_LIBS@
 RTMP_CFLAGS = @RTMP_CFLAGS@
@@ -634,6 +645,7 @@
 VOAACENC_LIBS = @VOAACENC_LIBS@
 VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
 VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VULKAN_LIBS = @VULKAN_LIBS@
 WARNING_CFLAGS = @WARNING_CFLAGS@
 WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
 WARNING_OBJCFLAGS = @WARNING_OBJCFLAGS@
@@ -644,6 +656,7 @@
 WAYLAND_LIBS = @WAYLAND_LIBS@
 WEBP_CFLAGS = @WEBP_CFLAGS@
 WEBP_LIBS = @WEBP_LIBS@
+WGET = @WGET@
 WILDMIDI_CFLAGS = @WILDMIDI_CFLAGS@
 WILDMIDI_LIBS = @WILDMIDI_LIBS@
 WINKS_LIBS = @WINKS_LIBS@
@@ -653,6 +666,8 @@
 X11_LIBS = @X11_LIBS@
 X265_CFLAGS = @X265_CFLAGS@
 X265_LIBS = @X265_LIBS@
+XCB_CFLAGS = @XCB_CFLAGS@
+XCB_LIBS = @XCB_LIBS@
 XCOMPOSITE_CFLAGS = @XCOMPOSITE_CFLAGS@
 XCOMPOSITE_LIBS = @XCOMPOSITE_LIBS@
 XGETTEXT = @XGETTEXT@
@@ -690,7 +705,6 @@
 docdir = @docdir@
 dvidir = @dvidir@
 exec_prefix = @exec_prefix@
-gsettingsschemadir = @gsettingsschemadir@
 host = @host@
 host_alias = @host_alias@
 host_cpu = @host_cpu@
diff --git a/tests/examples/gl/generic/cube/main.cpp b/tests/examples/gl/generic/cube/main.cpp
index 3a54fe6..da4aa17 100644
--- a/tests/examples/gl/generic/cube/main.cpp
+++ b/tests/examples/gl/generic/cube/main.cpp
@@ -120,7 +120,8 @@
     glMatrixMode(GL_MODELVIEW);
     glLoadIdentity();
 
-    glScalef(0.5f,0.5f,0.5f);
+    /* invert the y-axis to get the front face the correct way up */
+    glScalef (0.5f, -0.5f, 0.5f);
 
     glRotatef(xrot,1.0f,0.0f,0.0f);
     glRotatef(yrot,0.0f,1.0f,0.0f);
@@ -182,6 +183,9 @@
     GMainLoop *loop;
     GstBus *bus;
 
+    /* FIXME: remove once the example supports gl3 and/or gles2 */
+    g_setenv ("GST_GL_API", "opengl", FALSE);
+
     /* initialization */
     gst_init (&argc, &argv);
     loop = g_main_loop_new (NULL, FALSE);
diff --git a/tests/examples/gl/generic/cubeyuv/Makefile.in b/tests/examples/gl/generic/cubeyuv/Makefile.in
index 58b539c..8c42672 100644
--- a/tests/examples/gl/generic/cubeyuv/Makefile.in
+++ b/tests/examples/gl/generic/cubeyuv/Makefile.in
@@ -116,16 +116,15 @@
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
 	$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
-	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gsettings.m4 \
-	$(top_srcdir)/m4/gst-fionread.m4 $(top_srcdir)/m4/gst-sdl.m4 \
-	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
-	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
-	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libgcrypt.m4 \
-	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
-	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
-	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
-	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
-	$(top_srcdir)/configure.ac
+	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gst-fionread.m4 \
+	$(top_srcdir)/m4/gst-sdl.m4 $(top_srcdir)/m4/iconv.m4 \
+	$(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \
+	$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
+	$(top_srcdir)/m4/libgcrypt.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
+	$(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
@@ -243,6 +242,8 @@
 CLUTTER_X11_LIBS = @CLUTTER_X11_LIBS@
 CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
+CUDA_CFLAGS = @CUDA_CFLAGS@
+CUDA_LIBS = @CUDA_LIBS@
 CURL_CFLAGS = @CURL_CFLAGS@
 CURL_LIBS = @CURL_LIBS@
 CXX = @CXX@
@@ -280,6 +281,8 @@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
+EGL_CFLAGS = @EGL_CFLAGS@
+EGL_LIBS = @EGL_LIBS@
 EGREP = @EGREP@
 ERROR_CFLAGS = @ERROR_CFLAGS@
 ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
@@ -288,7 +291,6 @@
 EXIF_CFLAGS = @EXIF_CFLAGS@
 EXIF_LIBS = @EXIF_LIBS@
 FAAC_LIBS = @FAAC_LIBS@
-FAAD_IS_NEAAC = @FAAD_IS_NEAAC@
 FAAD_LIBS = @FAAD_LIBS@
 FFLAGS = @FFLAGS@
 FGREP = @FGREP@
@@ -307,8 +309,9 @@
 GIO_LIBS = @GIO_LIBS@
 GIO_UNIX_CFLAGS = @GIO_UNIX_CFLAGS@
 GIO_UNIX_LIBS = @GIO_UNIX_LIBS@
+GLES2_CFLAGS = @GLES2_CFLAGS@
+GLES2_LIBS = @GLES2_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
-GLIB_COMPILE_SCHEMAS = @GLIB_COMPILE_SCHEMAS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
@@ -325,16 +328,17 @@
 GMODULE_NO_EXPORT_LIBS = @GMODULE_NO_EXPORT_LIBS@
 GMSGFMT = @GMSGFMT@
 GMSGFMT_015 = @GMSGFMT_015@
+GNUSTL_CFLAGS = @GNUSTL_CFLAGS@
+GNUSTL_LIBS = @GNUSTL_LIBS@
 GRAPHENE_CFLAGS = @GRAPHENE_CFLAGS@
 GRAPHENE_LIBS = @GRAPHENE_LIBS@
 GREP = @GREP@
-GSETTINGS_CFLAGS = @GSETTINGS_CFLAGS@
-GSETTINGS_DISABLE_SCHEMAS_COMPILE = @GSETTINGS_DISABLE_SCHEMAS_COMPILE@
-GSETTINGS_LIBS = @GSETTINGS_LIBS@
 GSM_LIBS = @GSM_LIBS@
 GSTPB_PLUGINS_DIR = @GSTPB_PLUGINS_DIR@
 GSTPB_PREFIX = @GSTPB_PREFIX@
 GST_AGE = @GST_AGE@
+GST_ALLOCATORS_CFLAGS = @GST_ALLOCATORS_CFLAGS@
+GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
 GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
 GST_API_VERSION = @GST_API_VERSION@
 GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
@@ -360,6 +364,8 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PBUTILS_CFLAGS = @GST_PBUTILS_CFLAGS@
+GST_PBUTILS_LIBS = @GST_PBUTILS_LIBS@
 GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BAD_CFLAGS = @GST_PLUGINS_BAD_CFLAGS@
@@ -385,6 +391,8 @@
 GST_PREFIX = @GST_PREFIX@
 GST_REVISION = @GST_REVISION@
 GST_TOOLS_DIR = @GST_TOOLS_DIR@
+GST_VIDEO_CFLAGS = @GST_VIDEO_CFLAGS@
+GST_VIDEO_LIBS = @GST_VIDEO_LIBS@
 GTK3_CFLAGS = @GTK3_CFLAGS@
 GTK3_GL_CFLAGS = @GTK3_GL_CFLAGS@
 GTK3_GL_LIBS = @GTK3_GL_LIBS@
@@ -486,6 +494,7 @@
 LTLIBICONV = @LTLIBICONV@
 LTLIBINTL = @LTLIBINTL@
 LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
 MANIFEST_TOOL = @MANIFEST_TOOL@
@@ -499,8 +508,6 @@
 MODPLUG_LIBS = @MODPLUG_LIBS@
 MPEG2ENC_CFLAGS = @MPEG2ENC_CFLAGS@
 MPEG2ENC_LIBS = @MPEG2ENC_LIBS@
-MPG123_CFLAGS = @MPG123_CFLAGS@
-MPG123_LIBS = @MPG123_LIBS@
 MPLEX_CFLAGS = @MPLEX_CFLAGS@
 MPLEX_LDFLAGS = @MPLEX_LDFLAGS@
 MPLEX_LIBS = @MPLEX_LIBS@
@@ -516,6 +523,8 @@
 NETTLE_LIBS = @NETTLE_LIBS@
 NM = @NM@
 NMEDIT = @NMEDIT@
+NVENCODE_CFLAGS = @NVENCODE_CFLAGS@
+NVENCODE_LIBS = @NVENCODE_LIBS@
 OBJC = @OBJC@
 OBJCDEPMODE = @OBJCDEPMODE@
 OBJCFLAGS = @OBJCFLAGS@
@@ -573,16 +582,18 @@
 PYTHON_PLATFORM = @PYTHON_PLATFORM@
 PYTHON_PREFIX = @PYTHON_PREFIX@
 PYTHON_VERSION = @PYTHON_VERSION@
+QT_ANDROID_CFLAGS = @QT_ANDROID_CFLAGS@
+QT_ANDROID_LIBS = @QT_ANDROID_LIBS@
 QT_CFLAGS = @QT_CFLAGS@
 QT_LIBS = @QT_LIBS@
+QT_MAC_CFLAGS = @QT_MAC_CFLAGS@
+QT_MAC_LIBS = @QT_MAC_LIBS@
 QT_WAYLAND_CFLAGS = @QT_WAYLAND_CFLAGS@
 QT_WAYLAND_LIBS = @QT_WAYLAND_LIBS@
 QT_X11_CFLAGS = @QT_X11_CFLAGS@
 QT_X11_LIBS = @QT_X11_LIBS@
 RANLIB = @RANLIB@
 RCC = @RCC@
-RSVG_2_36_2_CFLAGS = @RSVG_2_36_2_CFLAGS@
-RSVG_2_36_2_LIBS = @RSVG_2_36_2_LIBS@
 RSVG_CFLAGS = @RSVG_CFLAGS@
 RSVG_LIBS = @RSVG_LIBS@
 RTMP_CFLAGS = @RTMP_CFLAGS@
@@ -634,6 +645,7 @@
 VOAACENC_LIBS = @VOAACENC_LIBS@
 VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
 VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VULKAN_LIBS = @VULKAN_LIBS@
 WARNING_CFLAGS = @WARNING_CFLAGS@
 WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
 WARNING_OBJCFLAGS = @WARNING_OBJCFLAGS@
@@ -644,6 +656,7 @@
 WAYLAND_LIBS = @WAYLAND_LIBS@
 WEBP_CFLAGS = @WEBP_CFLAGS@
 WEBP_LIBS = @WEBP_LIBS@
+WGET = @WGET@
 WILDMIDI_CFLAGS = @WILDMIDI_CFLAGS@
 WILDMIDI_LIBS = @WILDMIDI_LIBS@
 WINKS_LIBS = @WINKS_LIBS@
@@ -653,6 +666,8 @@
 X11_LIBS = @X11_LIBS@
 X265_CFLAGS = @X265_CFLAGS@
 X265_LIBS = @X265_LIBS@
+XCB_CFLAGS = @XCB_CFLAGS@
+XCB_LIBS = @XCB_LIBS@
 XCOMPOSITE_CFLAGS = @XCOMPOSITE_CFLAGS@
 XCOMPOSITE_LIBS = @XCOMPOSITE_LIBS@
 XGETTEXT = @XGETTEXT@
@@ -690,7 +705,6 @@
 docdir = @docdir@
 dvidir = @dvidir@
 exec_prefix = @exec_prefix@
-gsettingsschemadir = @gsettingsschemadir@
 host = @host@
 host_alias = @host_alias@
 host_cpu = @host_cpu@
diff --git a/tests/examples/gl/generic/cubeyuv/main.cpp b/tests/examples/gl/generic/cubeyuv/main.cpp
index 9c4b2cc..cda990f 100644
--- a/tests/examples/gl/generic/cubeyuv/main.cpp
+++ b/tests/examples/gl/generic/cubeyuv/main.cpp
@@ -143,12 +143,13 @@
     glMatrixMode(GL_MODELVIEW);
     glLoadIdentity();
 
-    glTranslatef(0.0f,0.0f,-5.0f);
-
     glRotatef(xrot,1.0f,0.0f,0.0f);
     glRotatef(yrot,0.0f,1.0f,0.0f);
     glRotatef(zrot,0.0f,0.0f,1.0f);
 
+    /* invert the y-axis to get the front face the correct way up */
+    glScalef (0.5f, -0.5f, 0.5f);
+
     glBegin(GL_QUADS);
 	      // Front Face
 	      glTexCoord2f(1.0f, 0.0f); glVertex3f(-1.0f, -1.0f,  1.0f);
@@ -182,6 +183,8 @@
 	      glTexCoord2f(1.0f, 1.0f); glVertex3f(-1.0f,  1.0f, -1.0f);
     glEnd();
 
+    glDisable(GL_DEPTH_TEST);
+
     gst_video_frame_unmap (&v_frame);
 
 	xrot+=0.03f;
@@ -227,6 +230,9 @@
         return -1;
     }
 
+    /* FIXME: remove once the example supports gl3 and/or gles2 */
+    g_setenv ("GST_GL_API", "opengl", FALSE);
+
     std::string video_location(argv[1]);
 
     /* initialization */
@@ -247,22 +253,15 @@
     GstElement* decodebin = gst_element_factory_make ("decodebin", "decodebin");
     GstElement* identity  = gst_element_factory_make ("identity", "identity0");
     GstElement* textoverlay = gst_element_factory_make ("textoverlay", "textoverlay0");
-    GstElement* glcolorscale = gst_element_factory_make ("glcolorscale", "glcolorscale0");
     GstElement* glimagesink  = gst_element_factory_make ("glimagesink", "glimagesink0");
 
 
-    if (!videosrc || !decodebin || !identity || !textoverlay ||
-        !glcolorscale || !glimagesink)
+    if (!videosrc || !decodebin || !identity || !textoverlay || !glimagesink)
     {
         g_print ("one element could not be found \n");
         return -1;
     }
 
-    GstCaps *outcaps = gst_caps_new_simple("video/x-raw",
-                                           "width", G_TYPE_INT, 640,
-                                           "height", G_TYPE_INT, 480,
-                                           NULL);
-
     /* configure elements */
     g_object_set(G_OBJECT(videosrc), "num-buffers", 800, NULL);
     g_object_set(G_OBJECT(videosrc), "location", video_location.c_str(), NULL);
@@ -273,7 +272,7 @@
 
     /* add elements */
     gst_bin_add_many (GST_BIN (pipeline), videosrc, decodebin, identity,
-        textoverlay, glcolorscale, glimagesink, NULL);
+        textoverlay, glimagesink, NULL);
 
     /* link elements */
 	gst_element_link_pads (videosrc, "src", decodebin, "sink");
@@ -286,10 +285,7 @@
         return -1;
     }
 
-	gst_element_link (textoverlay, glcolorscale);
-
-    gboolean link_ok = gst_element_link_filtered(glcolorscale, glimagesink, outcaps) ;
-    gst_caps_unref(outcaps) ;
+    gboolean link_ok = gst_element_link (textoverlay, glimagesink);
     if(!link_ok)
     {
         g_warning("Failed to link textoverlay to glimagesink!\n") ;
diff --git a/tests/examples/gl/generic/doublecube/Makefile.in b/tests/examples/gl/generic/doublecube/Makefile.in
index 14ce522..c3673c9 100644
--- a/tests/examples/gl/generic/doublecube/Makefile.in
+++ b/tests/examples/gl/generic/doublecube/Makefile.in
@@ -116,16 +116,15 @@
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
 	$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
-	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gsettings.m4 \
-	$(top_srcdir)/m4/gst-fionread.m4 $(top_srcdir)/m4/gst-sdl.m4 \
-	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
-	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
-	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libgcrypt.m4 \
-	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
-	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
-	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
-	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
-	$(top_srcdir)/configure.ac
+	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gst-fionread.m4 \
+	$(top_srcdir)/m4/gst-sdl.m4 $(top_srcdir)/m4/iconv.m4 \
+	$(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \
+	$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
+	$(top_srcdir)/m4/libgcrypt.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
+	$(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
@@ -243,6 +242,8 @@
 CLUTTER_X11_LIBS = @CLUTTER_X11_LIBS@
 CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
+CUDA_CFLAGS = @CUDA_CFLAGS@
+CUDA_LIBS = @CUDA_LIBS@
 CURL_CFLAGS = @CURL_CFLAGS@
 CURL_LIBS = @CURL_LIBS@
 CXX = @CXX@
@@ -280,6 +281,8 @@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
+EGL_CFLAGS = @EGL_CFLAGS@
+EGL_LIBS = @EGL_LIBS@
 EGREP = @EGREP@
 ERROR_CFLAGS = @ERROR_CFLAGS@
 ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
@@ -288,7 +291,6 @@
 EXIF_CFLAGS = @EXIF_CFLAGS@
 EXIF_LIBS = @EXIF_LIBS@
 FAAC_LIBS = @FAAC_LIBS@
-FAAD_IS_NEAAC = @FAAD_IS_NEAAC@
 FAAD_LIBS = @FAAD_LIBS@
 FFLAGS = @FFLAGS@
 FGREP = @FGREP@
@@ -307,8 +309,9 @@
 GIO_LIBS = @GIO_LIBS@
 GIO_UNIX_CFLAGS = @GIO_UNIX_CFLAGS@
 GIO_UNIX_LIBS = @GIO_UNIX_LIBS@
+GLES2_CFLAGS = @GLES2_CFLAGS@
+GLES2_LIBS = @GLES2_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
-GLIB_COMPILE_SCHEMAS = @GLIB_COMPILE_SCHEMAS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
@@ -325,16 +328,17 @@
 GMODULE_NO_EXPORT_LIBS = @GMODULE_NO_EXPORT_LIBS@
 GMSGFMT = @GMSGFMT@
 GMSGFMT_015 = @GMSGFMT_015@
+GNUSTL_CFLAGS = @GNUSTL_CFLAGS@
+GNUSTL_LIBS = @GNUSTL_LIBS@
 GRAPHENE_CFLAGS = @GRAPHENE_CFLAGS@
 GRAPHENE_LIBS = @GRAPHENE_LIBS@
 GREP = @GREP@
-GSETTINGS_CFLAGS = @GSETTINGS_CFLAGS@
-GSETTINGS_DISABLE_SCHEMAS_COMPILE = @GSETTINGS_DISABLE_SCHEMAS_COMPILE@
-GSETTINGS_LIBS = @GSETTINGS_LIBS@
 GSM_LIBS = @GSM_LIBS@
 GSTPB_PLUGINS_DIR = @GSTPB_PLUGINS_DIR@
 GSTPB_PREFIX = @GSTPB_PREFIX@
 GST_AGE = @GST_AGE@
+GST_ALLOCATORS_CFLAGS = @GST_ALLOCATORS_CFLAGS@
+GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
 GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
 GST_API_VERSION = @GST_API_VERSION@
 GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
@@ -360,6 +364,8 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PBUTILS_CFLAGS = @GST_PBUTILS_CFLAGS@
+GST_PBUTILS_LIBS = @GST_PBUTILS_LIBS@
 GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BAD_CFLAGS = @GST_PLUGINS_BAD_CFLAGS@
@@ -385,6 +391,8 @@
 GST_PREFIX = @GST_PREFIX@
 GST_REVISION = @GST_REVISION@
 GST_TOOLS_DIR = @GST_TOOLS_DIR@
+GST_VIDEO_CFLAGS = @GST_VIDEO_CFLAGS@
+GST_VIDEO_LIBS = @GST_VIDEO_LIBS@
 GTK3_CFLAGS = @GTK3_CFLAGS@
 GTK3_GL_CFLAGS = @GTK3_GL_CFLAGS@
 GTK3_GL_LIBS = @GTK3_GL_LIBS@
@@ -486,6 +494,7 @@
 LTLIBICONV = @LTLIBICONV@
 LTLIBINTL = @LTLIBINTL@
 LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
 MANIFEST_TOOL = @MANIFEST_TOOL@
@@ -499,8 +508,6 @@
 MODPLUG_LIBS = @MODPLUG_LIBS@
 MPEG2ENC_CFLAGS = @MPEG2ENC_CFLAGS@
 MPEG2ENC_LIBS = @MPEG2ENC_LIBS@
-MPG123_CFLAGS = @MPG123_CFLAGS@
-MPG123_LIBS = @MPG123_LIBS@
 MPLEX_CFLAGS = @MPLEX_CFLAGS@
 MPLEX_LDFLAGS = @MPLEX_LDFLAGS@
 MPLEX_LIBS = @MPLEX_LIBS@
@@ -516,6 +523,8 @@
 NETTLE_LIBS = @NETTLE_LIBS@
 NM = @NM@
 NMEDIT = @NMEDIT@
+NVENCODE_CFLAGS = @NVENCODE_CFLAGS@
+NVENCODE_LIBS = @NVENCODE_LIBS@
 OBJC = @OBJC@
 OBJCDEPMODE = @OBJCDEPMODE@
 OBJCFLAGS = @OBJCFLAGS@
@@ -573,16 +582,18 @@
 PYTHON_PLATFORM = @PYTHON_PLATFORM@
 PYTHON_PREFIX = @PYTHON_PREFIX@
 PYTHON_VERSION = @PYTHON_VERSION@
+QT_ANDROID_CFLAGS = @QT_ANDROID_CFLAGS@
+QT_ANDROID_LIBS = @QT_ANDROID_LIBS@
 QT_CFLAGS = @QT_CFLAGS@
 QT_LIBS = @QT_LIBS@
+QT_MAC_CFLAGS = @QT_MAC_CFLAGS@
+QT_MAC_LIBS = @QT_MAC_LIBS@
 QT_WAYLAND_CFLAGS = @QT_WAYLAND_CFLAGS@
 QT_WAYLAND_LIBS = @QT_WAYLAND_LIBS@
 QT_X11_CFLAGS = @QT_X11_CFLAGS@
 QT_X11_LIBS = @QT_X11_LIBS@
 RANLIB = @RANLIB@
 RCC = @RCC@
-RSVG_2_36_2_CFLAGS = @RSVG_2_36_2_CFLAGS@
-RSVG_2_36_2_LIBS = @RSVG_2_36_2_LIBS@
 RSVG_CFLAGS = @RSVG_CFLAGS@
 RSVG_LIBS = @RSVG_LIBS@
 RTMP_CFLAGS = @RTMP_CFLAGS@
@@ -634,6 +645,7 @@
 VOAACENC_LIBS = @VOAACENC_LIBS@
 VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
 VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VULKAN_LIBS = @VULKAN_LIBS@
 WARNING_CFLAGS = @WARNING_CFLAGS@
 WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
 WARNING_OBJCFLAGS = @WARNING_OBJCFLAGS@
@@ -644,6 +656,7 @@
 WAYLAND_LIBS = @WAYLAND_LIBS@
 WEBP_CFLAGS = @WEBP_CFLAGS@
 WEBP_LIBS = @WEBP_LIBS@
+WGET = @WGET@
 WILDMIDI_CFLAGS = @WILDMIDI_CFLAGS@
 WILDMIDI_LIBS = @WILDMIDI_LIBS@
 WINKS_LIBS = @WINKS_LIBS@
@@ -653,6 +666,8 @@
 X11_LIBS = @X11_LIBS@
 X265_CFLAGS = @X265_CFLAGS@
 X265_LIBS = @X265_LIBS@
+XCB_CFLAGS = @XCB_CFLAGS@
+XCB_LIBS = @XCB_LIBS@
 XCOMPOSITE_CFLAGS = @XCOMPOSITE_CFLAGS@
 XCOMPOSITE_LIBS = @XCOMPOSITE_LIBS@
 XGETTEXT = @XGETTEXT@
@@ -690,7 +705,6 @@
 docdir = @docdir@
 dvidir = @dvidir@
 exec_prefix = @exec_prefix@
-gsettingsschemadir = @gsettingsschemadir@
 host = @host@
 host_alias = @host_alias@
 host_cpu = @host_cpu@
diff --git a/tests/examples/gl/generic/recordgraphic/Makefile.in b/tests/examples/gl/generic/recordgraphic/Makefile.in
index ebe3a6d..ce36ed5 100644
--- a/tests/examples/gl/generic/recordgraphic/Makefile.in
+++ b/tests/examples/gl/generic/recordgraphic/Makefile.in
@@ -116,16 +116,15 @@
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
 	$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
-	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gsettings.m4 \
-	$(top_srcdir)/m4/gst-fionread.m4 $(top_srcdir)/m4/gst-sdl.m4 \
-	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
-	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
-	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libgcrypt.m4 \
-	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
-	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
-	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
-	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
-	$(top_srcdir)/configure.ac
+	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gst-fionread.m4 \
+	$(top_srcdir)/m4/gst-sdl.m4 $(top_srcdir)/m4/iconv.m4 \
+	$(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \
+	$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
+	$(top_srcdir)/m4/libgcrypt.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
+	$(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
@@ -244,6 +243,8 @@
 CLUTTER_X11_LIBS = @CLUTTER_X11_LIBS@
 CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
+CUDA_CFLAGS = @CUDA_CFLAGS@
+CUDA_LIBS = @CUDA_LIBS@
 CURL_CFLAGS = @CURL_CFLAGS@
 CURL_LIBS = @CURL_LIBS@
 CXX = @CXX@
@@ -281,6 +282,8 @@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
+EGL_CFLAGS = @EGL_CFLAGS@
+EGL_LIBS = @EGL_LIBS@
 EGREP = @EGREP@
 ERROR_CFLAGS = @ERROR_CFLAGS@
 ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
@@ -289,7 +292,6 @@
 EXIF_CFLAGS = @EXIF_CFLAGS@
 EXIF_LIBS = @EXIF_LIBS@
 FAAC_LIBS = @FAAC_LIBS@
-FAAD_IS_NEAAC = @FAAD_IS_NEAAC@
 FAAD_LIBS = @FAAD_LIBS@
 FFLAGS = @FFLAGS@
 FGREP = @FGREP@
@@ -308,8 +310,9 @@
 GIO_LIBS = @GIO_LIBS@
 GIO_UNIX_CFLAGS = @GIO_UNIX_CFLAGS@
 GIO_UNIX_LIBS = @GIO_UNIX_LIBS@
+GLES2_CFLAGS = @GLES2_CFLAGS@
+GLES2_LIBS = @GLES2_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
-GLIB_COMPILE_SCHEMAS = @GLIB_COMPILE_SCHEMAS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
@@ -326,16 +329,17 @@
 GMODULE_NO_EXPORT_LIBS = @GMODULE_NO_EXPORT_LIBS@
 GMSGFMT = @GMSGFMT@
 GMSGFMT_015 = @GMSGFMT_015@
+GNUSTL_CFLAGS = @GNUSTL_CFLAGS@
+GNUSTL_LIBS = @GNUSTL_LIBS@
 GRAPHENE_CFLAGS = @GRAPHENE_CFLAGS@
 GRAPHENE_LIBS = @GRAPHENE_LIBS@
 GREP = @GREP@
-GSETTINGS_CFLAGS = @GSETTINGS_CFLAGS@
-GSETTINGS_DISABLE_SCHEMAS_COMPILE = @GSETTINGS_DISABLE_SCHEMAS_COMPILE@
-GSETTINGS_LIBS = @GSETTINGS_LIBS@
 GSM_LIBS = @GSM_LIBS@
 GSTPB_PLUGINS_DIR = @GSTPB_PLUGINS_DIR@
 GSTPB_PREFIX = @GSTPB_PREFIX@
 GST_AGE = @GST_AGE@
+GST_ALLOCATORS_CFLAGS = @GST_ALLOCATORS_CFLAGS@
+GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
 GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
 GST_API_VERSION = @GST_API_VERSION@
 GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
@@ -361,6 +365,8 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PBUTILS_CFLAGS = @GST_PBUTILS_CFLAGS@
+GST_PBUTILS_LIBS = @GST_PBUTILS_LIBS@
 GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BAD_CFLAGS = @GST_PLUGINS_BAD_CFLAGS@
@@ -386,6 +392,8 @@
 GST_PREFIX = @GST_PREFIX@
 GST_REVISION = @GST_REVISION@
 GST_TOOLS_DIR = @GST_TOOLS_DIR@
+GST_VIDEO_CFLAGS = @GST_VIDEO_CFLAGS@
+GST_VIDEO_LIBS = @GST_VIDEO_LIBS@
 GTK3_CFLAGS = @GTK3_CFLAGS@
 GTK3_GL_CFLAGS = @GTK3_GL_CFLAGS@
 GTK3_GL_LIBS = @GTK3_GL_LIBS@
@@ -487,6 +495,7 @@
 LTLIBICONV = @LTLIBICONV@
 LTLIBINTL = @LTLIBINTL@
 LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
 MANIFEST_TOOL = @MANIFEST_TOOL@
@@ -500,8 +509,6 @@
 MODPLUG_LIBS = @MODPLUG_LIBS@
 MPEG2ENC_CFLAGS = @MPEG2ENC_CFLAGS@
 MPEG2ENC_LIBS = @MPEG2ENC_LIBS@
-MPG123_CFLAGS = @MPG123_CFLAGS@
-MPG123_LIBS = @MPG123_LIBS@
 MPLEX_CFLAGS = @MPLEX_CFLAGS@
 MPLEX_LDFLAGS = @MPLEX_LDFLAGS@
 MPLEX_LIBS = @MPLEX_LIBS@
@@ -517,6 +524,8 @@
 NETTLE_LIBS = @NETTLE_LIBS@
 NM = @NM@
 NMEDIT = @NMEDIT@
+NVENCODE_CFLAGS = @NVENCODE_CFLAGS@
+NVENCODE_LIBS = @NVENCODE_LIBS@
 OBJC = @OBJC@
 OBJCDEPMODE = @OBJCDEPMODE@
 OBJCFLAGS = @OBJCFLAGS@
@@ -574,16 +583,18 @@
 PYTHON_PLATFORM = @PYTHON_PLATFORM@
 PYTHON_PREFIX = @PYTHON_PREFIX@
 PYTHON_VERSION = @PYTHON_VERSION@
+QT_ANDROID_CFLAGS = @QT_ANDROID_CFLAGS@
+QT_ANDROID_LIBS = @QT_ANDROID_LIBS@
 QT_CFLAGS = @QT_CFLAGS@
 QT_LIBS = @QT_LIBS@
+QT_MAC_CFLAGS = @QT_MAC_CFLAGS@
+QT_MAC_LIBS = @QT_MAC_LIBS@
 QT_WAYLAND_CFLAGS = @QT_WAYLAND_CFLAGS@
 QT_WAYLAND_LIBS = @QT_WAYLAND_LIBS@
 QT_X11_CFLAGS = @QT_X11_CFLAGS@
 QT_X11_LIBS = @QT_X11_LIBS@
 RANLIB = @RANLIB@
 RCC = @RCC@
-RSVG_2_36_2_CFLAGS = @RSVG_2_36_2_CFLAGS@
-RSVG_2_36_2_LIBS = @RSVG_2_36_2_LIBS@
 RSVG_CFLAGS = @RSVG_CFLAGS@
 RSVG_LIBS = @RSVG_LIBS@
 RTMP_CFLAGS = @RTMP_CFLAGS@
@@ -635,6 +646,7 @@
 VOAACENC_LIBS = @VOAACENC_LIBS@
 VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
 VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VULKAN_LIBS = @VULKAN_LIBS@
 WARNING_CFLAGS = @WARNING_CFLAGS@
 WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
 WARNING_OBJCFLAGS = @WARNING_OBJCFLAGS@
@@ -645,6 +657,7 @@
 WAYLAND_LIBS = @WAYLAND_LIBS@
 WEBP_CFLAGS = @WEBP_CFLAGS@
 WEBP_LIBS = @WEBP_LIBS@
+WGET = @WGET@
 WILDMIDI_CFLAGS = @WILDMIDI_CFLAGS@
 WILDMIDI_LIBS = @WILDMIDI_LIBS@
 WINKS_LIBS = @WINKS_LIBS@
@@ -654,6 +667,8 @@
 X11_LIBS = @X11_LIBS@
 X265_CFLAGS = @X265_CFLAGS@
 X265_LIBS = @X265_LIBS@
+XCB_CFLAGS = @XCB_CFLAGS@
+XCB_LIBS = @XCB_LIBS@
 XCOMPOSITE_CFLAGS = @XCOMPOSITE_CFLAGS@
 XCOMPOSITE_LIBS = @XCOMPOSITE_LIBS@
 XGETTEXT = @XGETTEXT@
@@ -691,7 +706,6 @@
 docdir = @docdir@
 dvidir = @dvidir@
 exec_prefix = @exec_prefix@
-gsettingsschemadir = @gsettingsschemadir@
 host = @host@
 host_alias = @host_alias@
 host_cpu = @host_cpu@
diff --git a/tests/examples/gl/gtk/3dvideo/Makefile.in b/tests/examples/gl/gtk/3dvideo/Makefile.in
index ae0fddc..1a481d1 100644
--- a/tests/examples/gl/gtk/3dvideo/Makefile.in
+++ b/tests/examples/gl/gtk/3dvideo/Makefile.in
@@ -117,16 +117,15 @@
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
 	$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
-	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gsettings.m4 \
-	$(top_srcdir)/m4/gst-fionread.m4 $(top_srcdir)/m4/gst-sdl.m4 \
-	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
-	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
-	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libgcrypt.m4 \
-	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
-	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
-	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
-	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
-	$(top_srcdir)/configure.ac
+	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gst-fionread.m4 \
+	$(top_srcdir)/m4/gst-sdl.m4 $(top_srcdir)/m4/iconv.m4 \
+	$(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \
+	$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
+	$(top_srcdir)/m4/libgcrypt.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
+	$(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \
@@ -267,6 +266,8 @@
 CLUTTER_X11_LIBS = @CLUTTER_X11_LIBS@
 CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
+CUDA_CFLAGS = @CUDA_CFLAGS@
+CUDA_LIBS = @CUDA_LIBS@
 CURL_CFLAGS = @CURL_CFLAGS@
 CURL_LIBS = @CURL_LIBS@
 CXX = @CXX@
@@ -304,6 +305,8 @@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
+EGL_CFLAGS = @EGL_CFLAGS@
+EGL_LIBS = @EGL_LIBS@
 EGREP = @EGREP@
 ERROR_CFLAGS = @ERROR_CFLAGS@
 ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
@@ -312,7 +315,6 @@
 EXIF_CFLAGS = @EXIF_CFLAGS@
 EXIF_LIBS = @EXIF_LIBS@
 FAAC_LIBS = @FAAC_LIBS@
-FAAD_IS_NEAAC = @FAAD_IS_NEAAC@
 FAAD_LIBS = @FAAD_LIBS@
 FFLAGS = @FFLAGS@
 FGREP = @FGREP@
@@ -331,8 +333,9 @@
 GIO_LIBS = @GIO_LIBS@
 GIO_UNIX_CFLAGS = @GIO_UNIX_CFLAGS@
 GIO_UNIX_LIBS = @GIO_UNIX_LIBS@
+GLES2_CFLAGS = @GLES2_CFLAGS@
+GLES2_LIBS = @GLES2_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
-GLIB_COMPILE_SCHEMAS = @GLIB_COMPILE_SCHEMAS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
@@ -349,16 +352,17 @@
 GMODULE_NO_EXPORT_LIBS = @GMODULE_NO_EXPORT_LIBS@
 GMSGFMT = @GMSGFMT@
 GMSGFMT_015 = @GMSGFMT_015@
+GNUSTL_CFLAGS = @GNUSTL_CFLAGS@
+GNUSTL_LIBS = @GNUSTL_LIBS@
 GRAPHENE_CFLAGS = @GRAPHENE_CFLAGS@
 GRAPHENE_LIBS = @GRAPHENE_LIBS@
 GREP = @GREP@
-GSETTINGS_CFLAGS = @GSETTINGS_CFLAGS@
-GSETTINGS_DISABLE_SCHEMAS_COMPILE = @GSETTINGS_DISABLE_SCHEMAS_COMPILE@
-GSETTINGS_LIBS = @GSETTINGS_LIBS@
 GSM_LIBS = @GSM_LIBS@
 GSTPB_PLUGINS_DIR = @GSTPB_PLUGINS_DIR@
 GSTPB_PREFIX = @GSTPB_PREFIX@
 GST_AGE = @GST_AGE@
+GST_ALLOCATORS_CFLAGS = @GST_ALLOCATORS_CFLAGS@
+GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
 GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
 GST_API_VERSION = @GST_API_VERSION@
 GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
@@ -384,6 +388,8 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PBUTILS_CFLAGS = @GST_PBUTILS_CFLAGS@
+GST_PBUTILS_LIBS = @GST_PBUTILS_LIBS@
 GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BAD_CFLAGS = @GST_PLUGINS_BAD_CFLAGS@
@@ -409,6 +415,8 @@
 GST_PREFIX = @GST_PREFIX@
 GST_REVISION = @GST_REVISION@
 GST_TOOLS_DIR = @GST_TOOLS_DIR@
+GST_VIDEO_CFLAGS = @GST_VIDEO_CFLAGS@
+GST_VIDEO_LIBS = @GST_VIDEO_LIBS@
 GTK3_CFLAGS = @GTK3_CFLAGS@
 GTK3_GL_CFLAGS = @GTK3_GL_CFLAGS@
 GTK3_GL_LIBS = @GTK3_GL_LIBS@
@@ -510,6 +518,7 @@
 LTLIBICONV = @LTLIBICONV@
 LTLIBINTL = @LTLIBINTL@
 LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
 MANIFEST_TOOL = @MANIFEST_TOOL@
@@ -523,8 +532,6 @@
 MODPLUG_LIBS = @MODPLUG_LIBS@
 MPEG2ENC_CFLAGS = @MPEG2ENC_CFLAGS@
 MPEG2ENC_LIBS = @MPEG2ENC_LIBS@
-MPG123_CFLAGS = @MPG123_CFLAGS@
-MPG123_LIBS = @MPG123_LIBS@
 MPLEX_CFLAGS = @MPLEX_CFLAGS@
 MPLEX_LDFLAGS = @MPLEX_LDFLAGS@
 MPLEX_LIBS = @MPLEX_LIBS@
@@ -540,6 +547,8 @@
 NETTLE_LIBS = @NETTLE_LIBS@
 NM = @NM@
 NMEDIT = @NMEDIT@
+NVENCODE_CFLAGS = @NVENCODE_CFLAGS@
+NVENCODE_LIBS = @NVENCODE_LIBS@
 OBJC = @OBJC@
 OBJCDEPMODE = @OBJCDEPMODE@
 OBJCFLAGS = @OBJCFLAGS@
@@ -597,16 +606,18 @@
 PYTHON_PLATFORM = @PYTHON_PLATFORM@
 PYTHON_PREFIX = @PYTHON_PREFIX@
 PYTHON_VERSION = @PYTHON_VERSION@
+QT_ANDROID_CFLAGS = @QT_ANDROID_CFLAGS@
+QT_ANDROID_LIBS = @QT_ANDROID_LIBS@
 QT_CFLAGS = @QT_CFLAGS@
 QT_LIBS = @QT_LIBS@
+QT_MAC_CFLAGS = @QT_MAC_CFLAGS@
+QT_MAC_LIBS = @QT_MAC_LIBS@
 QT_WAYLAND_CFLAGS = @QT_WAYLAND_CFLAGS@
 QT_WAYLAND_LIBS = @QT_WAYLAND_LIBS@
 QT_X11_CFLAGS = @QT_X11_CFLAGS@
 QT_X11_LIBS = @QT_X11_LIBS@
 RANLIB = @RANLIB@
 RCC = @RCC@
-RSVG_2_36_2_CFLAGS = @RSVG_2_36_2_CFLAGS@
-RSVG_2_36_2_LIBS = @RSVG_2_36_2_LIBS@
 RSVG_CFLAGS = @RSVG_CFLAGS@
 RSVG_LIBS = @RSVG_LIBS@
 RTMP_CFLAGS = @RTMP_CFLAGS@
@@ -658,6 +669,7 @@
 VOAACENC_LIBS = @VOAACENC_LIBS@
 VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
 VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VULKAN_LIBS = @VULKAN_LIBS@
 WARNING_CFLAGS = @WARNING_CFLAGS@
 WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
 WARNING_OBJCFLAGS = @WARNING_OBJCFLAGS@
@@ -668,6 +680,7 @@
 WAYLAND_LIBS = @WAYLAND_LIBS@
 WEBP_CFLAGS = @WEBP_CFLAGS@
 WEBP_LIBS = @WEBP_LIBS@
+WGET = @WGET@
 WILDMIDI_CFLAGS = @WILDMIDI_CFLAGS@
 WILDMIDI_LIBS = @WILDMIDI_LIBS@
 WINKS_LIBS = @WINKS_LIBS@
@@ -677,6 +690,8 @@
 X11_LIBS = @X11_LIBS@
 X265_CFLAGS = @X265_CFLAGS@
 X265_LIBS = @X265_LIBS@
+XCB_CFLAGS = @XCB_CFLAGS@
+XCB_LIBS = @XCB_LIBS@
 XCOMPOSITE_CFLAGS = @XCOMPOSITE_CFLAGS@
 XCOMPOSITE_LIBS = @XCOMPOSITE_LIBS@
 XGETTEXT = @XGETTEXT@
@@ -714,7 +729,6 @@
 docdir = @docdir@
 dvidir = @dvidir@
 exec_prefix = @exec_prefix@
-gsettingsschemadir = @gsettingsschemadir@
 host = @host@
 host_alias = @host_alias@
 host_cpu = @host_cpu@
diff --git a/tests/examples/gl/gtk/Makefile.in b/tests/examples/gl/gtk/Makefile.in
index 5033f90..12f7a4b 100644
--- a/tests/examples/gl/gtk/Makefile.in
+++ b/tests/examples/gl/gtk/Makefile.in
@@ -116,16 +116,15 @@
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
 	$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
-	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gsettings.m4 \
-	$(top_srcdir)/m4/gst-fionread.m4 $(top_srcdir)/m4/gst-sdl.m4 \
-	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
-	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
-	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libgcrypt.m4 \
-	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
-	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
-	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
-	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
-	$(top_srcdir)/configure.ac
+	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gst-fionread.m4 \
+	$(top_srcdir)/m4/gst-sdl.m4 $(top_srcdir)/m4/iconv.m4 \
+	$(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \
+	$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
+	$(top_srcdir)/m4/libgcrypt.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
+	$(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
@@ -284,6 +283,8 @@
 CLUTTER_X11_LIBS = @CLUTTER_X11_LIBS@
 CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
+CUDA_CFLAGS = @CUDA_CFLAGS@
+CUDA_LIBS = @CUDA_LIBS@
 CURL_CFLAGS = @CURL_CFLAGS@
 CURL_LIBS = @CURL_LIBS@
 CXX = @CXX@
@@ -321,6 +322,8 @@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
+EGL_CFLAGS = @EGL_CFLAGS@
+EGL_LIBS = @EGL_LIBS@
 EGREP = @EGREP@
 ERROR_CFLAGS = @ERROR_CFLAGS@
 ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
@@ -329,7 +332,6 @@
 EXIF_CFLAGS = @EXIF_CFLAGS@
 EXIF_LIBS = @EXIF_LIBS@
 FAAC_LIBS = @FAAC_LIBS@
-FAAD_IS_NEAAC = @FAAD_IS_NEAAC@
 FAAD_LIBS = @FAAD_LIBS@
 FFLAGS = @FFLAGS@
 FGREP = @FGREP@
@@ -348,8 +350,9 @@
 GIO_LIBS = @GIO_LIBS@
 GIO_UNIX_CFLAGS = @GIO_UNIX_CFLAGS@
 GIO_UNIX_LIBS = @GIO_UNIX_LIBS@
+GLES2_CFLAGS = @GLES2_CFLAGS@
+GLES2_LIBS = @GLES2_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
-GLIB_COMPILE_SCHEMAS = @GLIB_COMPILE_SCHEMAS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
@@ -366,16 +369,17 @@
 GMODULE_NO_EXPORT_LIBS = @GMODULE_NO_EXPORT_LIBS@
 GMSGFMT = @GMSGFMT@
 GMSGFMT_015 = @GMSGFMT_015@
+GNUSTL_CFLAGS = @GNUSTL_CFLAGS@
+GNUSTL_LIBS = @GNUSTL_LIBS@
 GRAPHENE_CFLAGS = @GRAPHENE_CFLAGS@
 GRAPHENE_LIBS = @GRAPHENE_LIBS@
 GREP = @GREP@
-GSETTINGS_CFLAGS = @GSETTINGS_CFLAGS@
-GSETTINGS_DISABLE_SCHEMAS_COMPILE = @GSETTINGS_DISABLE_SCHEMAS_COMPILE@
-GSETTINGS_LIBS = @GSETTINGS_LIBS@
 GSM_LIBS = @GSM_LIBS@
 GSTPB_PLUGINS_DIR = @GSTPB_PLUGINS_DIR@
 GSTPB_PREFIX = @GSTPB_PREFIX@
 GST_AGE = @GST_AGE@
+GST_ALLOCATORS_CFLAGS = @GST_ALLOCATORS_CFLAGS@
+GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
 GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
 GST_API_VERSION = @GST_API_VERSION@
 GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
@@ -401,6 +405,8 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PBUTILS_CFLAGS = @GST_PBUTILS_CFLAGS@
+GST_PBUTILS_LIBS = @GST_PBUTILS_LIBS@
 GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BAD_CFLAGS = @GST_PLUGINS_BAD_CFLAGS@
@@ -426,6 +432,8 @@
 GST_PREFIX = @GST_PREFIX@
 GST_REVISION = @GST_REVISION@
 GST_TOOLS_DIR = @GST_TOOLS_DIR@
+GST_VIDEO_CFLAGS = @GST_VIDEO_CFLAGS@
+GST_VIDEO_LIBS = @GST_VIDEO_LIBS@
 GTK3_CFLAGS = @GTK3_CFLAGS@
 GTK3_GL_CFLAGS = @GTK3_GL_CFLAGS@
 GTK3_GL_LIBS = @GTK3_GL_LIBS@
@@ -527,6 +535,7 @@
 LTLIBICONV = @LTLIBICONV@
 LTLIBINTL = @LTLIBINTL@
 LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
 MANIFEST_TOOL = @MANIFEST_TOOL@
@@ -540,8 +549,6 @@
 MODPLUG_LIBS = @MODPLUG_LIBS@
 MPEG2ENC_CFLAGS = @MPEG2ENC_CFLAGS@
 MPEG2ENC_LIBS = @MPEG2ENC_LIBS@
-MPG123_CFLAGS = @MPG123_CFLAGS@
-MPG123_LIBS = @MPG123_LIBS@
 MPLEX_CFLAGS = @MPLEX_CFLAGS@
 MPLEX_LDFLAGS = @MPLEX_LDFLAGS@
 MPLEX_LIBS = @MPLEX_LIBS@
@@ -557,6 +564,8 @@
 NETTLE_LIBS = @NETTLE_LIBS@
 NM = @NM@
 NMEDIT = @NMEDIT@
+NVENCODE_CFLAGS = @NVENCODE_CFLAGS@
+NVENCODE_LIBS = @NVENCODE_LIBS@
 OBJC = @OBJC@
 OBJCDEPMODE = @OBJCDEPMODE@
 OBJCFLAGS = @OBJCFLAGS@
@@ -614,16 +623,18 @@
 PYTHON_PLATFORM = @PYTHON_PLATFORM@
 PYTHON_PREFIX = @PYTHON_PREFIX@
 PYTHON_VERSION = @PYTHON_VERSION@
+QT_ANDROID_CFLAGS = @QT_ANDROID_CFLAGS@
+QT_ANDROID_LIBS = @QT_ANDROID_LIBS@
 QT_CFLAGS = @QT_CFLAGS@
 QT_LIBS = @QT_LIBS@
+QT_MAC_CFLAGS = @QT_MAC_CFLAGS@
+QT_MAC_LIBS = @QT_MAC_LIBS@
 QT_WAYLAND_CFLAGS = @QT_WAYLAND_CFLAGS@
 QT_WAYLAND_LIBS = @QT_WAYLAND_LIBS@
 QT_X11_CFLAGS = @QT_X11_CFLAGS@
 QT_X11_LIBS = @QT_X11_LIBS@
 RANLIB = @RANLIB@
 RCC = @RCC@
-RSVG_2_36_2_CFLAGS = @RSVG_2_36_2_CFLAGS@
-RSVG_2_36_2_LIBS = @RSVG_2_36_2_LIBS@
 RSVG_CFLAGS = @RSVG_CFLAGS@
 RSVG_LIBS = @RSVG_LIBS@
 RTMP_CFLAGS = @RTMP_CFLAGS@
@@ -675,6 +686,7 @@
 VOAACENC_LIBS = @VOAACENC_LIBS@
 VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
 VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VULKAN_LIBS = @VULKAN_LIBS@
 WARNING_CFLAGS = @WARNING_CFLAGS@
 WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
 WARNING_OBJCFLAGS = @WARNING_OBJCFLAGS@
@@ -685,6 +697,7 @@
 WAYLAND_LIBS = @WAYLAND_LIBS@
 WEBP_CFLAGS = @WEBP_CFLAGS@
 WEBP_LIBS = @WEBP_LIBS@
+WGET = @WGET@
 WILDMIDI_CFLAGS = @WILDMIDI_CFLAGS@
 WILDMIDI_LIBS = @WILDMIDI_LIBS@
 WINKS_LIBS = @WINKS_LIBS@
@@ -694,6 +707,8 @@
 X11_LIBS = @X11_LIBS@
 X265_CFLAGS = @X265_CFLAGS@
 X265_LIBS = @X265_LIBS@
+XCB_CFLAGS = @XCB_CFLAGS@
+XCB_LIBS = @XCB_LIBS@
 XCOMPOSITE_CFLAGS = @XCOMPOSITE_CFLAGS@
 XCOMPOSITE_LIBS = @XCOMPOSITE_LIBS@
 XGETTEXT = @XGETTEXT@
@@ -731,7 +746,6 @@
 docdir = @docdir@
 dvidir = @dvidir@
 exec_prefix = @exec_prefix@
-gsettingsschemadir = @gsettingsschemadir@
 host = @host@
 host_alias = @host_alias@
 host_cpu = @host_cpu@
diff --git a/tests/examples/gl/gtk/filternovideooverlay/Makefile.in b/tests/examples/gl/gtk/filternovideooverlay/Makefile.in
index 5a3c293..2949604 100644
--- a/tests/examples/gl/gtk/filternovideooverlay/Makefile.in
+++ b/tests/examples/gl/gtk/filternovideooverlay/Makefile.in
@@ -116,16 +116,15 @@
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
 	$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
-	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gsettings.m4 \
-	$(top_srcdir)/m4/gst-fionread.m4 $(top_srcdir)/m4/gst-sdl.m4 \
-	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
-	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
-	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libgcrypt.m4 \
-	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
-	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
-	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
-	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
-	$(top_srcdir)/configure.ac
+	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gst-fionread.m4 \
+	$(top_srcdir)/m4/gst-sdl.m4 $(top_srcdir)/m4/iconv.m4 \
+	$(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \
+	$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
+	$(top_srcdir)/m4/libgcrypt.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
+	$(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
@@ -245,6 +244,8 @@
 CLUTTER_X11_LIBS = @CLUTTER_X11_LIBS@
 CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
+CUDA_CFLAGS = @CUDA_CFLAGS@
+CUDA_LIBS = @CUDA_LIBS@
 CURL_CFLAGS = @CURL_CFLAGS@
 CURL_LIBS = @CURL_LIBS@
 CXX = @CXX@
@@ -282,6 +283,8 @@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
+EGL_CFLAGS = @EGL_CFLAGS@
+EGL_LIBS = @EGL_LIBS@
 EGREP = @EGREP@
 ERROR_CFLAGS = @ERROR_CFLAGS@
 ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
@@ -290,7 +293,6 @@
 EXIF_CFLAGS = @EXIF_CFLAGS@
 EXIF_LIBS = @EXIF_LIBS@
 FAAC_LIBS = @FAAC_LIBS@
-FAAD_IS_NEAAC = @FAAD_IS_NEAAC@
 FAAD_LIBS = @FAAD_LIBS@
 FFLAGS = @FFLAGS@
 FGREP = @FGREP@
@@ -309,8 +311,9 @@
 GIO_LIBS = @GIO_LIBS@
 GIO_UNIX_CFLAGS = @GIO_UNIX_CFLAGS@
 GIO_UNIX_LIBS = @GIO_UNIX_LIBS@
+GLES2_CFLAGS = @GLES2_CFLAGS@
+GLES2_LIBS = @GLES2_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
-GLIB_COMPILE_SCHEMAS = @GLIB_COMPILE_SCHEMAS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
@@ -327,16 +330,17 @@
 GMODULE_NO_EXPORT_LIBS = @GMODULE_NO_EXPORT_LIBS@
 GMSGFMT = @GMSGFMT@
 GMSGFMT_015 = @GMSGFMT_015@
+GNUSTL_CFLAGS = @GNUSTL_CFLAGS@
+GNUSTL_LIBS = @GNUSTL_LIBS@
 GRAPHENE_CFLAGS = @GRAPHENE_CFLAGS@
 GRAPHENE_LIBS = @GRAPHENE_LIBS@
 GREP = @GREP@
-GSETTINGS_CFLAGS = @GSETTINGS_CFLAGS@
-GSETTINGS_DISABLE_SCHEMAS_COMPILE = @GSETTINGS_DISABLE_SCHEMAS_COMPILE@
-GSETTINGS_LIBS = @GSETTINGS_LIBS@
 GSM_LIBS = @GSM_LIBS@
 GSTPB_PLUGINS_DIR = @GSTPB_PLUGINS_DIR@
 GSTPB_PREFIX = @GSTPB_PREFIX@
 GST_AGE = @GST_AGE@
+GST_ALLOCATORS_CFLAGS = @GST_ALLOCATORS_CFLAGS@
+GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
 GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
 GST_API_VERSION = @GST_API_VERSION@
 GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
@@ -362,6 +366,8 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PBUTILS_CFLAGS = @GST_PBUTILS_CFLAGS@
+GST_PBUTILS_LIBS = @GST_PBUTILS_LIBS@
 GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BAD_CFLAGS = @GST_PLUGINS_BAD_CFLAGS@
@@ -387,6 +393,8 @@
 GST_PREFIX = @GST_PREFIX@
 GST_REVISION = @GST_REVISION@
 GST_TOOLS_DIR = @GST_TOOLS_DIR@
+GST_VIDEO_CFLAGS = @GST_VIDEO_CFLAGS@
+GST_VIDEO_LIBS = @GST_VIDEO_LIBS@
 GTK3_CFLAGS = @GTK3_CFLAGS@
 GTK3_GL_CFLAGS = @GTK3_GL_CFLAGS@
 GTK3_GL_LIBS = @GTK3_GL_LIBS@
@@ -488,6 +496,7 @@
 LTLIBICONV = @LTLIBICONV@
 LTLIBINTL = @LTLIBINTL@
 LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
 MANIFEST_TOOL = @MANIFEST_TOOL@
@@ -501,8 +510,6 @@
 MODPLUG_LIBS = @MODPLUG_LIBS@
 MPEG2ENC_CFLAGS = @MPEG2ENC_CFLAGS@
 MPEG2ENC_LIBS = @MPEG2ENC_LIBS@
-MPG123_CFLAGS = @MPG123_CFLAGS@
-MPG123_LIBS = @MPG123_LIBS@
 MPLEX_CFLAGS = @MPLEX_CFLAGS@
 MPLEX_LDFLAGS = @MPLEX_LDFLAGS@
 MPLEX_LIBS = @MPLEX_LIBS@
@@ -518,6 +525,8 @@
 NETTLE_LIBS = @NETTLE_LIBS@
 NM = @NM@
 NMEDIT = @NMEDIT@
+NVENCODE_CFLAGS = @NVENCODE_CFLAGS@
+NVENCODE_LIBS = @NVENCODE_LIBS@
 OBJC = @OBJC@
 OBJCDEPMODE = @OBJCDEPMODE@
 OBJCFLAGS = @OBJCFLAGS@
@@ -575,16 +584,18 @@
 PYTHON_PLATFORM = @PYTHON_PLATFORM@
 PYTHON_PREFIX = @PYTHON_PREFIX@
 PYTHON_VERSION = @PYTHON_VERSION@
+QT_ANDROID_CFLAGS = @QT_ANDROID_CFLAGS@
+QT_ANDROID_LIBS = @QT_ANDROID_LIBS@
 QT_CFLAGS = @QT_CFLAGS@
 QT_LIBS = @QT_LIBS@
+QT_MAC_CFLAGS = @QT_MAC_CFLAGS@
+QT_MAC_LIBS = @QT_MAC_LIBS@
 QT_WAYLAND_CFLAGS = @QT_WAYLAND_CFLAGS@
 QT_WAYLAND_LIBS = @QT_WAYLAND_LIBS@
 QT_X11_CFLAGS = @QT_X11_CFLAGS@
 QT_X11_LIBS = @QT_X11_LIBS@
 RANLIB = @RANLIB@
 RCC = @RCC@
-RSVG_2_36_2_CFLAGS = @RSVG_2_36_2_CFLAGS@
-RSVG_2_36_2_LIBS = @RSVG_2_36_2_LIBS@
 RSVG_CFLAGS = @RSVG_CFLAGS@
 RSVG_LIBS = @RSVG_LIBS@
 RTMP_CFLAGS = @RTMP_CFLAGS@
@@ -636,6 +647,7 @@
 VOAACENC_LIBS = @VOAACENC_LIBS@
 VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
 VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VULKAN_LIBS = @VULKAN_LIBS@
 WARNING_CFLAGS = @WARNING_CFLAGS@
 WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
 WARNING_OBJCFLAGS = @WARNING_OBJCFLAGS@
@@ -646,6 +658,7 @@
 WAYLAND_LIBS = @WAYLAND_LIBS@
 WEBP_CFLAGS = @WEBP_CFLAGS@
 WEBP_LIBS = @WEBP_LIBS@
+WGET = @WGET@
 WILDMIDI_CFLAGS = @WILDMIDI_CFLAGS@
 WILDMIDI_LIBS = @WILDMIDI_LIBS@
 WINKS_LIBS = @WINKS_LIBS@
@@ -655,6 +668,8 @@
 X11_LIBS = @X11_LIBS@
 X265_CFLAGS = @X265_CFLAGS@
 X265_LIBS = @X265_LIBS@
+XCB_CFLAGS = @XCB_CFLAGS@
+XCB_LIBS = @XCB_LIBS@
 XCOMPOSITE_CFLAGS = @XCOMPOSITE_CFLAGS@
 XCOMPOSITE_LIBS = @XCOMPOSITE_LIBS@
 XGETTEXT = @XGETTEXT@
@@ -692,7 +707,6 @@
 docdir = @docdir@
 dvidir = @dvidir@
 exec_prefix = @exec_prefix@
-gsettingsschemadir = @gsettingsschemadir@
 host = @host@
 host_alias = @host_alias@
 host_cpu = @host_cpu@
diff --git a/tests/examples/gl/gtk/filtervideooverlay/Makefile.in b/tests/examples/gl/gtk/filtervideooverlay/Makefile.in
index 4c7697e..50aad71 100644
--- a/tests/examples/gl/gtk/filtervideooverlay/Makefile.in
+++ b/tests/examples/gl/gtk/filtervideooverlay/Makefile.in
@@ -116,16 +116,15 @@
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
 	$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
-	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gsettings.m4 \
-	$(top_srcdir)/m4/gst-fionread.m4 $(top_srcdir)/m4/gst-sdl.m4 \
-	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
-	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
-	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libgcrypt.m4 \
-	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
-	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
-	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
-	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
-	$(top_srcdir)/configure.ac
+	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gst-fionread.m4 \
+	$(top_srcdir)/m4/gst-sdl.m4 $(top_srcdir)/m4/iconv.m4 \
+	$(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \
+	$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
+	$(top_srcdir)/m4/libgcrypt.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
+	$(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
@@ -245,6 +244,8 @@
 CLUTTER_X11_LIBS = @CLUTTER_X11_LIBS@
 CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
+CUDA_CFLAGS = @CUDA_CFLAGS@
+CUDA_LIBS = @CUDA_LIBS@
 CURL_CFLAGS = @CURL_CFLAGS@
 CURL_LIBS = @CURL_LIBS@
 CXX = @CXX@
@@ -282,6 +283,8 @@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
+EGL_CFLAGS = @EGL_CFLAGS@
+EGL_LIBS = @EGL_LIBS@
 EGREP = @EGREP@
 ERROR_CFLAGS = @ERROR_CFLAGS@
 ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
@@ -290,7 +293,6 @@
 EXIF_CFLAGS = @EXIF_CFLAGS@
 EXIF_LIBS = @EXIF_LIBS@
 FAAC_LIBS = @FAAC_LIBS@
-FAAD_IS_NEAAC = @FAAD_IS_NEAAC@
 FAAD_LIBS = @FAAD_LIBS@
 FFLAGS = @FFLAGS@
 FGREP = @FGREP@
@@ -309,8 +311,9 @@
 GIO_LIBS = @GIO_LIBS@
 GIO_UNIX_CFLAGS = @GIO_UNIX_CFLAGS@
 GIO_UNIX_LIBS = @GIO_UNIX_LIBS@
+GLES2_CFLAGS = @GLES2_CFLAGS@
+GLES2_LIBS = @GLES2_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
-GLIB_COMPILE_SCHEMAS = @GLIB_COMPILE_SCHEMAS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
@@ -327,16 +330,17 @@
 GMODULE_NO_EXPORT_LIBS = @GMODULE_NO_EXPORT_LIBS@
 GMSGFMT = @GMSGFMT@
 GMSGFMT_015 = @GMSGFMT_015@
+GNUSTL_CFLAGS = @GNUSTL_CFLAGS@
+GNUSTL_LIBS = @GNUSTL_LIBS@
 GRAPHENE_CFLAGS = @GRAPHENE_CFLAGS@
 GRAPHENE_LIBS = @GRAPHENE_LIBS@
 GREP = @GREP@
-GSETTINGS_CFLAGS = @GSETTINGS_CFLAGS@
-GSETTINGS_DISABLE_SCHEMAS_COMPILE = @GSETTINGS_DISABLE_SCHEMAS_COMPILE@
-GSETTINGS_LIBS = @GSETTINGS_LIBS@
 GSM_LIBS = @GSM_LIBS@
 GSTPB_PLUGINS_DIR = @GSTPB_PLUGINS_DIR@
 GSTPB_PREFIX = @GSTPB_PREFIX@
 GST_AGE = @GST_AGE@
+GST_ALLOCATORS_CFLAGS = @GST_ALLOCATORS_CFLAGS@
+GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
 GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
 GST_API_VERSION = @GST_API_VERSION@
 GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
@@ -362,6 +366,8 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PBUTILS_CFLAGS = @GST_PBUTILS_CFLAGS@
+GST_PBUTILS_LIBS = @GST_PBUTILS_LIBS@
 GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BAD_CFLAGS = @GST_PLUGINS_BAD_CFLAGS@
@@ -387,6 +393,8 @@
 GST_PREFIX = @GST_PREFIX@
 GST_REVISION = @GST_REVISION@
 GST_TOOLS_DIR = @GST_TOOLS_DIR@
+GST_VIDEO_CFLAGS = @GST_VIDEO_CFLAGS@
+GST_VIDEO_LIBS = @GST_VIDEO_LIBS@
 GTK3_CFLAGS = @GTK3_CFLAGS@
 GTK3_GL_CFLAGS = @GTK3_GL_CFLAGS@
 GTK3_GL_LIBS = @GTK3_GL_LIBS@
@@ -488,6 +496,7 @@
 LTLIBICONV = @LTLIBICONV@
 LTLIBINTL = @LTLIBINTL@
 LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
 MANIFEST_TOOL = @MANIFEST_TOOL@
@@ -501,8 +510,6 @@
 MODPLUG_LIBS = @MODPLUG_LIBS@
 MPEG2ENC_CFLAGS = @MPEG2ENC_CFLAGS@
 MPEG2ENC_LIBS = @MPEG2ENC_LIBS@
-MPG123_CFLAGS = @MPG123_CFLAGS@
-MPG123_LIBS = @MPG123_LIBS@
 MPLEX_CFLAGS = @MPLEX_CFLAGS@
 MPLEX_LDFLAGS = @MPLEX_LDFLAGS@
 MPLEX_LIBS = @MPLEX_LIBS@
@@ -518,6 +525,8 @@
 NETTLE_LIBS = @NETTLE_LIBS@
 NM = @NM@
 NMEDIT = @NMEDIT@
+NVENCODE_CFLAGS = @NVENCODE_CFLAGS@
+NVENCODE_LIBS = @NVENCODE_LIBS@
 OBJC = @OBJC@
 OBJCDEPMODE = @OBJCDEPMODE@
 OBJCFLAGS = @OBJCFLAGS@
@@ -575,16 +584,18 @@
 PYTHON_PLATFORM = @PYTHON_PLATFORM@
 PYTHON_PREFIX = @PYTHON_PREFIX@
 PYTHON_VERSION = @PYTHON_VERSION@
+QT_ANDROID_CFLAGS = @QT_ANDROID_CFLAGS@
+QT_ANDROID_LIBS = @QT_ANDROID_LIBS@
 QT_CFLAGS = @QT_CFLAGS@
 QT_LIBS = @QT_LIBS@
+QT_MAC_CFLAGS = @QT_MAC_CFLAGS@
+QT_MAC_LIBS = @QT_MAC_LIBS@
 QT_WAYLAND_CFLAGS = @QT_WAYLAND_CFLAGS@
 QT_WAYLAND_LIBS = @QT_WAYLAND_LIBS@
 QT_X11_CFLAGS = @QT_X11_CFLAGS@
 QT_X11_LIBS = @QT_X11_LIBS@
 RANLIB = @RANLIB@
 RCC = @RCC@
-RSVG_2_36_2_CFLAGS = @RSVG_2_36_2_CFLAGS@
-RSVG_2_36_2_LIBS = @RSVG_2_36_2_LIBS@
 RSVG_CFLAGS = @RSVG_CFLAGS@
 RSVG_LIBS = @RSVG_LIBS@
 RTMP_CFLAGS = @RTMP_CFLAGS@
@@ -636,6 +647,7 @@
 VOAACENC_LIBS = @VOAACENC_LIBS@
 VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
 VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VULKAN_LIBS = @VULKAN_LIBS@
 WARNING_CFLAGS = @WARNING_CFLAGS@
 WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
 WARNING_OBJCFLAGS = @WARNING_OBJCFLAGS@
@@ -646,6 +658,7 @@
 WAYLAND_LIBS = @WAYLAND_LIBS@
 WEBP_CFLAGS = @WEBP_CFLAGS@
 WEBP_LIBS = @WEBP_LIBS@
+WGET = @WGET@
 WILDMIDI_CFLAGS = @WILDMIDI_CFLAGS@
 WILDMIDI_LIBS = @WILDMIDI_LIBS@
 WINKS_LIBS = @WINKS_LIBS@
@@ -655,6 +668,8 @@
 X11_LIBS = @X11_LIBS@
 X265_CFLAGS = @X265_CFLAGS@
 X265_LIBS = @X265_LIBS@
+XCB_CFLAGS = @XCB_CFLAGS@
+XCB_LIBS = @XCB_LIBS@
 XCOMPOSITE_CFLAGS = @XCOMPOSITE_CFLAGS@
 XCOMPOSITE_LIBS = @XCOMPOSITE_LIBS@
 XGETTEXT = @XGETTEXT@
@@ -692,7 +707,6 @@
 docdir = @docdir@
 dvidir = @dvidir@
 exec_prefix = @exec_prefix@
-gsettingsschemadir = @gsettingsschemadir@
 host = @host@
 host_alias = @host_alias@
 host_cpu = @host_cpu@
diff --git a/tests/examples/gl/gtk/fxtest/Makefile.in b/tests/examples/gl/gtk/fxtest/Makefile.in
index 692e6a4..f96c2d6 100644
--- a/tests/examples/gl/gtk/fxtest/Makefile.in
+++ b/tests/examples/gl/gtk/fxtest/Makefile.in
@@ -116,16 +116,15 @@
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
 	$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
-	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gsettings.m4 \
-	$(top_srcdir)/m4/gst-fionread.m4 $(top_srcdir)/m4/gst-sdl.m4 \
-	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
-	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
-	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libgcrypt.m4 \
-	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
-	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
-	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
-	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
-	$(top_srcdir)/configure.ac
+	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gst-fionread.m4 \
+	$(top_srcdir)/m4/gst-sdl.m4 $(top_srcdir)/m4/iconv.m4 \
+	$(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \
+	$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
+	$(top_srcdir)/m4/libgcrypt.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
+	$(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
@@ -252,6 +251,8 @@
 CLUTTER_X11_LIBS = @CLUTTER_X11_LIBS@
 CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
+CUDA_CFLAGS = @CUDA_CFLAGS@
+CUDA_LIBS = @CUDA_LIBS@
 CURL_CFLAGS = @CURL_CFLAGS@
 CURL_LIBS = @CURL_LIBS@
 CXX = @CXX@
@@ -289,6 +290,8 @@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
+EGL_CFLAGS = @EGL_CFLAGS@
+EGL_LIBS = @EGL_LIBS@
 EGREP = @EGREP@
 ERROR_CFLAGS = @ERROR_CFLAGS@
 ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
@@ -297,7 +300,6 @@
 EXIF_CFLAGS = @EXIF_CFLAGS@
 EXIF_LIBS = @EXIF_LIBS@
 FAAC_LIBS = @FAAC_LIBS@
-FAAD_IS_NEAAC = @FAAD_IS_NEAAC@
 FAAD_LIBS = @FAAD_LIBS@
 FFLAGS = @FFLAGS@
 FGREP = @FGREP@
@@ -316,8 +318,9 @@
 GIO_LIBS = @GIO_LIBS@
 GIO_UNIX_CFLAGS = @GIO_UNIX_CFLAGS@
 GIO_UNIX_LIBS = @GIO_UNIX_LIBS@
+GLES2_CFLAGS = @GLES2_CFLAGS@
+GLES2_LIBS = @GLES2_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
-GLIB_COMPILE_SCHEMAS = @GLIB_COMPILE_SCHEMAS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
@@ -334,16 +337,17 @@
 GMODULE_NO_EXPORT_LIBS = @GMODULE_NO_EXPORT_LIBS@
 GMSGFMT = @GMSGFMT@
 GMSGFMT_015 = @GMSGFMT_015@
+GNUSTL_CFLAGS = @GNUSTL_CFLAGS@
+GNUSTL_LIBS = @GNUSTL_LIBS@
 GRAPHENE_CFLAGS = @GRAPHENE_CFLAGS@
 GRAPHENE_LIBS = @GRAPHENE_LIBS@
 GREP = @GREP@
-GSETTINGS_CFLAGS = @GSETTINGS_CFLAGS@
-GSETTINGS_DISABLE_SCHEMAS_COMPILE = @GSETTINGS_DISABLE_SCHEMAS_COMPILE@
-GSETTINGS_LIBS = @GSETTINGS_LIBS@
 GSM_LIBS = @GSM_LIBS@
 GSTPB_PLUGINS_DIR = @GSTPB_PLUGINS_DIR@
 GSTPB_PREFIX = @GSTPB_PREFIX@
 GST_AGE = @GST_AGE@
+GST_ALLOCATORS_CFLAGS = @GST_ALLOCATORS_CFLAGS@
+GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
 GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
 GST_API_VERSION = @GST_API_VERSION@
 GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
@@ -369,6 +373,8 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PBUTILS_CFLAGS = @GST_PBUTILS_CFLAGS@
+GST_PBUTILS_LIBS = @GST_PBUTILS_LIBS@
 GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BAD_CFLAGS = @GST_PLUGINS_BAD_CFLAGS@
@@ -394,6 +400,8 @@
 GST_PREFIX = @GST_PREFIX@
 GST_REVISION = @GST_REVISION@
 GST_TOOLS_DIR = @GST_TOOLS_DIR@
+GST_VIDEO_CFLAGS = @GST_VIDEO_CFLAGS@
+GST_VIDEO_LIBS = @GST_VIDEO_LIBS@
 GTK3_CFLAGS = @GTK3_CFLAGS@
 GTK3_GL_CFLAGS = @GTK3_GL_CFLAGS@
 GTK3_GL_LIBS = @GTK3_GL_LIBS@
@@ -495,6 +503,7 @@
 LTLIBICONV = @LTLIBICONV@
 LTLIBINTL = @LTLIBINTL@
 LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
 MANIFEST_TOOL = @MANIFEST_TOOL@
@@ -508,8 +517,6 @@
 MODPLUG_LIBS = @MODPLUG_LIBS@
 MPEG2ENC_CFLAGS = @MPEG2ENC_CFLAGS@
 MPEG2ENC_LIBS = @MPEG2ENC_LIBS@
-MPG123_CFLAGS = @MPG123_CFLAGS@
-MPG123_LIBS = @MPG123_LIBS@
 MPLEX_CFLAGS = @MPLEX_CFLAGS@
 MPLEX_LDFLAGS = @MPLEX_LDFLAGS@
 MPLEX_LIBS = @MPLEX_LIBS@
@@ -525,6 +532,8 @@
 NETTLE_LIBS = @NETTLE_LIBS@
 NM = @NM@
 NMEDIT = @NMEDIT@
+NVENCODE_CFLAGS = @NVENCODE_CFLAGS@
+NVENCODE_LIBS = @NVENCODE_LIBS@
 OBJC = @OBJC@
 OBJCDEPMODE = @OBJCDEPMODE@
 OBJCFLAGS = @OBJCFLAGS@
@@ -582,16 +591,18 @@
 PYTHON_PLATFORM = @PYTHON_PLATFORM@
 PYTHON_PREFIX = @PYTHON_PREFIX@
 PYTHON_VERSION = @PYTHON_VERSION@
+QT_ANDROID_CFLAGS = @QT_ANDROID_CFLAGS@
+QT_ANDROID_LIBS = @QT_ANDROID_LIBS@
 QT_CFLAGS = @QT_CFLAGS@
 QT_LIBS = @QT_LIBS@
+QT_MAC_CFLAGS = @QT_MAC_CFLAGS@
+QT_MAC_LIBS = @QT_MAC_LIBS@
 QT_WAYLAND_CFLAGS = @QT_WAYLAND_CFLAGS@
 QT_WAYLAND_LIBS = @QT_WAYLAND_LIBS@
 QT_X11_CFLAGS = @QT_X11_CFLAGS@
 QT_X11_LIBS = @QT_X11_LIBS@
 RANLIB = @RANLIB@
 RCC = @RCC@
-RSVG_2_36_2_CFLAGS = @RSVG_2_36_2_CFLAGS@
-RSVG_2_36_2_LIBS = @RSVG_2_36_2_LIBS@
 RSVG_CFLAGS = @RSVG_CFLAGS@
 RSVG_LIBS = @RSVG_LIBS@
 RTMP_CFLAGS = @RTMP_CFLAGS@
@@ -643,6 +654,7 @@
 VOAACENC_LIBS = @VOAACENC_LIBS@
 VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
 VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VULKAN_LIBS = @VULKAN_LIBS@
 WARNING_CFLAGS = @WARNING_CFLAGS@
 WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
 WARNING_OBJCFLAGS = @WARNING_OBJCFLAGS@
@@ -653,6 +665,7 @@
 WAYLAND_LIBS = @WAYLAND_LIBS@
 WEBP_CFLAGS = @WEBP_CFLAGS@
 WEBP_LIBS = @WEBP_LIBS@
+WGET = @WGET@
 WILDMIDI_CFLAGS = @WILDMIDI_CFLAGS@
 WILDMIDI_LIBS = @WILDMIDI_LIBS@
 WINKS_LIBS = @WINKS_LIBS@
@@ -662,6 +675,8 @@
 X11_LIBS = @X11_LIBS@
 X265_CFLAGS = @X265_CFLAGS@
 X265_LIBS = @X265_LIBS@
+XCB_CFLAGS = @XCB_CFLAGS@
+XCB_LIBS = @XCB_LIBS@
 XCOMPOSITE_CFLAGS = @XCOMPOSITE_CFLAGS@
 XCOMPOSITE_LIBS = @XCOMPOSITE_LIBS@
 XGETTEXT = @XGETTEXT@
@@ -699,7 +714,6 @@
 docdir = @docdir@
 dvidir = @dvidir@
 exec_prefix = @exec_prefix@
-gsettingsschemadir = @gsettingsschemadir@
 host = @host@
 host_alias = @host_alias@
 host_cpu = @host_cpu@
diff --git a/tests/examples/gl/gtk/fxtest/fxtest.c b/tests/examples/gl/gtk/fxtest/fxtest.c
index f83f189..c1cddea 100644
--- a/tests/examples/gl/gtk/fxtest/fxtest.c
+++ b/tests/examples/gl/gtk/fxtest/fxtest.c
@@ -76,7 +76,7 @@
       gst_message_parse_error (message, &err, &debug);
 
       g_print ("Error: %s\n", err->message);
-      g_error_free (err);
+      g_clear_error (&err);
 
       if (debug) {
         g_print ("Debug details: %s\n", debug);
@@ -174,7 +174,7 @@
 {
   GstStateChangeReturn ret;
   GstElement *pipeline;
-  GstElement *filter, *sink;
+  GstElement *upload, *filter, *sink;
   GstElement *sourcebin;
   GstBus *bus;
   GError *error = NULL;
@@ -202,6 +202,8 @@
   g_option_context_add_group (context, gtk_get_option_group (TRUE));
   if (!g_option_context_parse (context, &argc, &argv, &error)) {
     g_print ("Inizialization error: %s\n", GST_STR_NULL (error->message));
+    g_option_context_free (context);
+    g_clear_error (&error);
     return -1;
   }
   g_option_context_free (context);
@@ -232,12 +234,13 @@
 
   pipeline = gst_pipeline_new ("pipeline");
 
+  upload = gst_element_factory_make ("glupload", NULL);
   filter = gst_element_factory_make ("gleffects", "flt");
   sink = gst_element_factory_make ("glimagesink", "glsink");
 
-  gst_bin_add_many (GST_BIN (pipeline), sourcebin, filter, sink, NULL);
+  gst_bin_add_many (GST_BIN (pipeline), sourcebin, upload, filter, sink, NULL);
 
-  if (!gst_element_link_many (sourcebin, filter, sink, NULL)) {
+  if (!gst_element_link_many (sourcebin, upload, filter, sink, NULL)) {
     g_print ("Failed to link one or more elements!\n");
     return -1;
   }
diff --git a/tests/examples/gl/gtk/fxtest/pixbufdrop.c b/tests/examples/gl/gtk/fxtest/pixbufdrop.c
index 463add3..69bf3af 100644
--- a/tests/examples/gl/gtk/fxtest/pixbufdrop.c
+++ b/tests/examples/gl/gtk/fxtest/pixbufdrop.c
@@ -206,6 +206,8 @@
   g_option_context_add_group (context, gtk_get_option_group (TRUE));
   if (!g_option_context_parse (context, &argc, &argv, &error)) {
     g_print ("Inizialization error: %s\n", GST_STR_NULL (error->message));
+    g_option_context_free (context);
+    g_clear_error (&error);
     return -1;
   }
   g_option_context_free (context);
diff --git a/tests/examples/gl/gtk/gtkvideooverlay/Makefile.in b/tests/examples/gl/gtk/gtkvideooverlay/Makefile.in
index 1873139..2c68a3c 100644
--- a/tests/examples/gl/gtk/gtkvideooverlay/Makefile.in
+++ b/tests/examples/gl/gtk/gtkvideooverlay/Makefile.in
@@ -116,16 +116,15 @@
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
 	$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
-	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gsettings.m4 \
-	$(top_srcdir)/m4/gst-fionread.m4 $(top_srcdir)/m4/gst-sdl.m4 \
-	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
-	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
-	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libgcrypt.m4 \
-	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
-	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
-	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
-	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
-	$(top_srcdir)/configure.ac
+	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gst-fionread.m4 \
+	$(top_srcdir)/m4/gst-sdl.m4 $(top_srcdir)/m4/iconv.m4 \
+	$(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \
+	$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
+	$(top_srcdir)/m4/libgcrypt.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
+	$(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
@@ -245,6 +244,8 @@
 CLUTTER_X11_LIBS = @CLUTTER_X11_LIBS@
 CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
+CUDA_CFLAGS = @CUDA_CFLAGS@
+CUDA_LIBS = @CUDA_LIBS@
 CURL_CFLAGS = @CURL_CFLAGS@
 CURL_LIBS = @CURL_LIBS@
 CXX = @CXX@
@@ -282,6 +283,8 @@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
+EGL_CFLAGS = @EGL_CFLAGS@
+EGL_LIBS = @EGL_LIBS@
 EGREP = @EGREP@
 ERROR_CFLAGS = @ERROR_CFLAGS@
 ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
@@ -290,7 +293,6 @@
 EXIF_CFLAGS = @EXIF_CFLAGS@
 EXIF_LIBS = @EXIF_LIBS@
 FAAC_LIBS = @FAAC_LIBS@
-FAAD_IS_NEAAC = @FAAD_IS_NEAAC@
 FAAD_LIBS = @FAAD_LIBS@
 FFLAGS = @FFLAGS@
 FGREP = @FGREP@
@@ -309,8 +311,9 @@
 GIO_LIBS = @GIO_LIBS@
 GIO_UNIX_CFLAGS = @GIO_UNIX_CFLAGS@
 GIO_UNIX_LIBS = @GIO_UNIX_LIBS@
+GLES2_CFLAGS = @GLES2_CFLAGS@
+GLES2_LIBS = @GLES2_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
-GLIB_COMPILE_SCHEMAS = @GLIB_COMPILE_SCHEMAS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
@@ -327,16 +330,17 @@
 GMODULE_NO_EXPORT_LIBS = @GMODULE_NO_EXPORT_LIBS@
 GMSGFMT = @GMSGFMT@
 GMSGFMT_015 = @GMSGFMT_015@
+GNUSTL_CFLAGS = @GNUSTL_CFLAGS@
+GNUSTL_LIBS = @GNUSTL_LIBS@
 GRAPHENE_CFLAGS = @GRAPHENE_CFLAGS@
 GRAPHENE_LIBS = @GRAPHENE_LIBS@
 GREP = @GREP@
-GSETTINGS_CFLAGS = @GSETTINGS_CFLAGS@
-GSETTINGS_DISABLE_SCHEMAS_COMPILE = @GSETTINGS_DISABLE_SCHEMAS_COMPILE@
-GSETTINGS_LIBS = @GSETTINGS_LIBS@
 GSM_LIBS = @GSM_LIBS@
 GSTPB_PLUGINS_DIR = @GSTPB_PLUGINS_DIR@
 GSTPB_PREFIX = @GSTPB_PREFIX@
 GST_AGE = @GST_AGE@
+GST_ALLOCATORS_CFLAGS = @GST_ALLOCATORS_CFLAGS@
+GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
 GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
 GST_API_VERSION = @GST_API_VERSION@
 GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
@@ -362,6 +366,8 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PBUTILS_CFLAGS = @GST_PBUTILS_CFLAGS@
+GST_PBUTILS_LIBS = @GST_PBUTILS_LIBS@
 GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BAD_CFLAGS = @GST_PLUGINS_BAD_CFLAGS@
@@ -387,6 +393,8 @@
 GST_PREFIX = @GST_PREFIX@
 GST_REVISION = @GST_REVISION@
 GST_TOOLS_DIR = @GST_TOOLS_DIR@
+GST_VIDEO_CFLAGS = @GST_VIDEO_CFLAGS@
+GST_VIDEO_LIBS = @GST_VIDEO_LIBS@
 GTK3_CFLAGS = @GTK3_CFLAGS@
 GTK3_GL_CFLAGS = @GTK3_GL_CFLAGS@
 GTK3_GL_LIBS = @GTK3_GL_LIBS@
@@ -488,6 +496,7 @@
 LTLIBICONV = @LTLIBICONV@
 LTLIBINTL = @LTLIBINTL@
 LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
 MANIFEST_TOOL = @MANIFEST_TOOL@
@@ -501,8 +510,6 @@
 MODPLUG_LIBS = @MODPLUG_LIBS@
 MPEG2ENC_CFLAGS = @MPEG2ENC_CFLAGS@
 MPEG2ENC_LIBS = @MPEG2ENC_LIBS@
-MPG123_CFLAGS = @MPG123_CFLAGS@
-MPG123_LIBS = @MPG123_LIBS@
 MPLEX_CFLAGS = @MPLEX_CFLAGS@
 MPLEX_LDFLAGS = @MPLEX_LDFLAGS@
 MPLEX_LIBS = @MPLEX_LIBS@
@@ -518,6 +525,8 @@
 NETTLE_LIBS = @NETTLE_LIBS@
 NM = @NM@
 NMEDIT = @NMEDIT@
+NVENCODE_CFLAGS = @NVENCODE_CFLAGS@
+NVENCODE_LIBS = @NVENCODE_LIBS@
 OBJC = @OBJC@
 OBJCDEPMODE = @OBJCDEPMODE@
 OBJCFLAGS = @OBJCFLAGS@
@@ -575,16 +584,18 @@
 PYTHON_PLATFORM = @PYTHON_PLATFORM@
 PYTHON_PREFIX = @PYTHON_PREFIX@
 PYTHON_VERSION = @PYTHON_VERSION@
+QT_ANDROID_CFLAGS = @QT_ANDROID_CFLAGS@
+QT_ANDROID_LIBS = @QT_ANDROID_LIBS@
 QT_CFLAGS = @QT_CFLAGS@
 QT_LIBS = @QT_LIBS@
+QT_MAC_CFLAGS = @QT_MAC_CFLAGS@
+QT_MAC_LIBS = @QT_MAC_LIBS@
 QT_WAYLAND_CFLAGS = @QT_WAYLAND_CFLAGS@
 QT_WAYLAND_LIBS = @QT_WAYLAND_LIBS@
 QT_X11_CFLAGS = @QT_X11_CFLAGS@
 QT_X11_LIBS = @QT_X11_LIBS@
 RANLIB = @RANLIB@
 RCC = @RCC@
-RSVG_2_36_2_CFLAGS = @RSVG_2_36_2_CFLAGS@
-RSVG_2_36_2_LIBS = @RSVG_2_36_2_LIBS@
 RSVG_CFLAGS = @RSVG_CFLAGS@
 RSVG_LIBS = @RSVG_LIBS@
 RTMP_CFLAGS = @RTMP_CFLAGS@
@@ -636,6 +647,7 @@
 VOAACENC_LIBS = @VOAACENC_LIBS@
 VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
 VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VULKAN_LIBS = @VULKAN_LIBS@
 WARNING_CFLAGS = @WARNING_CFLAGS@
 WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
 WARNING_OBJCFLAGS = @WARNING_OBJCFLAGS@
@@ -646,6 +658,7 @@
 WAYLAND_LIBS = @WAYLAND_LIBS@
 WEBP_CFLAGS = @WEBP_CFLAGS@
 WEBP_LIBS = @WEBP_LIBS@
+WGET = @WGET@
 WILDMIDI_CFLAGS = @WILDMIDI_CFLAGS@
 WILDMIDI_LIBS = @WILDMIDI_LIBS@
 WINKS_LIBS = @WINKS_LIBS@
@@ -655,6 +668,8 @@
 X11_LIBS = @X11_LIBS@
 X265_CFLAGS = @X265_CFLAGS@
 X265_LIBS = @X265_LIBS@
+XCB_CFLAGS = @XCB_CFLAGS@
+XCB_LIBS = @XCB_LIBS@
 XCOMPOSITE_CFLAGS = @XCOMPOSITE_CFLAGS@
 XCOMPOSITE_LIBS = @XCOMPOSITE_LIBS@
 XGETTEXT = @XGETTEXT@
@@ -692,7 +707,6 @@
 docdir = @docdir@
 dvidir = @dvidir@
 exec_prefix = @exec_prefix@
-gsettingsschemadir = @gsettingsschemadir@
 host = @host@
 host_alias = @host_alias@
 host_cpu = @host_cpu@
diff --git a/tests/examples/gl/gtk/switchvideooverlay/Makefile.in b/tests/examples/gl/gtk/switchvideooverlay/Makefile.in
index 1ead60d..c7bfe31 100644
--- a/tests/examples/gl/gtk/switchvideooverlay/Makefile.in
+++ b/tests/examples/gl/gtk/switchvideooverlay/Makefile.in
@@ -116,16 +116,15 @@
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
 	$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
-	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gsettings.m4 \
-	$(top_srcdir)/m4/gst-fionread.m4 $(top_srcdir)/m4/gst-sdl.m4 \
-	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
-	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
-	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libgcrypt.m4 \
-	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
-	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
-	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
-	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
-	$(top_srcdir)/configure.ac
+	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gst-fionread.m4 \
+	$(top_srcdir)/m4/gst-sdl.m4 $(top_srcdir)/m4/iconv.m4 \
+	$(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \
+	$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
+	$(top_srcdir)/m4/libgcrypt.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
+	$(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
@@ -245,6 +244,8 @@
 CLUTTER_X11_LIBS = @CLUTTER_X11_LIBS@
 CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
+CUDA_CFLAGS = @CUDA_CFLAGS@
+CUDA_LIBS = @CUDA_LIBS@
 CURL_CFLAGS = @CURL_CFLAGS@
 CURL_LIBS = @CURL_LIBS@
 CXX = @CXX@
@@ -282,6 +283,8 @@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
+EGL_CFLAGS = @EGL_CFLAGS@
+EGL_LIBS = @EGL_LIBS@
 EGREP = @EGREP@
 ERROR_CFLAGS = @ERROR_CFLAGS@
 ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
@@ -290,7 +293,6 @@
 EXIF_CFLAGS = @EXIF_CFLAGS@
 EXIF_LIBS = @EXIF_LIBS@
 FAAC_LIBS = @FAAC_LIBS@
-FAAD_IS_NEAAC = @FAAD_IS_NEAAC@
 FAAD_LIBS = @FAAD_LIBS@
 FFLAGS = @FFLAGS@
 FGREP = @FGREP@
@@ -309,8 +311,9 @@
 GIO_LIBS = @GIO_LIBS@
 GIO_UNIX_CFLAGS = @GIO_UNIX_CFLAGS@
 GIO_UNIX_LIBS = @GIO_UNIX_LIBS@
+GLES2_CFLAGS = @GLES2_CFLAGS@
+GLES2_LIBS = @GLES2_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
-GLIB_COMPILE_SCHEMAS = @GLIB_COMPILE_SCHEMAS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
@@ -327,16 +330,17 @@
 GMODULE_NO_EXPORT_LIBS = @GMODULE_NO_EXPORT_LIBS@
 GMSGFMT = @GMSGFMT@
 GMSGFMT_015 = @GMSGFMT_015@
+GNUSTL_CFLAGS = @GNUSTL_CFLAGS@
+GNUSTL_LIBS = @GNUSTL_LIBS@
 GRAPHENE_CFLAGS = @GRAPHENE_CFLAGS@
 GRAPHENE_LIBS = @GRAPHENE_LIBS@
 GREP = @GREP@
-GSETTINGS_CFLAGS = @GSETTINGS_CFLAGS@
-GSETTINGS_DISABLE_SCHEMAS_COMPILE = @GSETTINGS_DISABLE_SCHEMAS_COMPILE@
-GSETTINGS_LIBS = @GSETTINGS_LIBS@
 GSM_LIBS = @GSM_LIBS@
 GSTPB_PLUGINS_DIR = @GSTPB_PLUGINS_DIR@
 GSTPB_PREFIX = @GSTPB_PREFIX@
 GST_AGE = @GST_AGE@
+GST_ALLOCATORS_CFLAGS = @GST_ALLOCATORS_CFLAGS@
+GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
 GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
 GST_API_VERSION = @GST_API_VERSION@
 GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
@@ -362,6 +366,8 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PBUTILS_CFLAGS = @GST_PBUTILS_CFLAGS@
+GST_PBUTILS_LIBS = @GST_PBUTILS_LIBS@
 GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BAD_CFLAGS = @GST_PLUGINS_BAD_CFLAGS@
@@ -387,6 +393,8 @@
 GST_PREFIX = @GST_PREFIX@
 GST_REVISION = @GST_REVISION@
 GST_TOOLS_DIR = @GST_TOOLS_DIR@
+GST_VIDEO_CFLAGS = @GST_VIDEO_CFLAGS@
+GST_VIDEO_LIBS = @GST_VIDEO_LIBS@
 GTK3_CFLAGS = @GTK3_CFLAGS@
 GTK3_GL_CFLAGS = @GTK3_GL_CFLAGS@
 GTK3_GL_LIBS = @GTK3_GL_LIBS@
@@ -488,6 +496,7 @@
 LTLIBICONV = @LTLIBICONV@
 LTLIBINTL = @LTLIBINTL@
 LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
 MANIFEST_TOOL = @MANIFEST_TOOL@
@@ -501,8 +510,6 @@
 MODPLUG_LIBS = @MODPLUG_LIBS@
 MPEG2ENC_CFLAGS = @MPEG2ENC_CFLAGS@
 MPEG2ENC_LIBS = @MPEG2ENC_LIBS@
-MPG123_CFLAGS = @MPG123_CFLAGS@
-MPG123_LIBS = @MPG123_LIBS@
 MPLEX_CFLAGS = @MPLEX_CFLAGS@
 MPLEX_LDFLAGS = @MPLEX_LDFLAGS@
 MPLEX_LIBS = @MPLEX_LIBS@
@@ -518,6 +525,8 @@
 NETTLE_LIBS = @NETTLE_LIBS@
 NM = @NM@
 NMEDIT = @NMEDIT@
+NVENCODE_CFLAGS = @NVENCODE_CFLAGS@
+NVENCODE_LIBS = @NVENCODE_LIBS@
 OBJC = @OBJC@
 OBJCDEPMODE = @OBJCDEPMODE@
 OBJCFLAGS = @OBJCFLAGS@
@@ -575,16 +584,18 @@
 PYTHON_PLATFORM = @PYTHON_PLATFORM@
 PYTHON_PREFIX = @PYTHON_PREFIX@
 PYTHON_VERSION = @PYTHON_VERSION@
+QT_ANDROID_CFLAGS = @QT_ANDROID_CFLAGS@
+QT_ANDROID_LIBS = @QT_ANDROID_LIBS@
 QT_CFLAGS = @QT_CFLAGS@
 QT_LIBS = @QT_LIBS@
+QT_MAC_CFLAGS = @QT_MAC_CFLAGS@
+QT_MAC_LIBS = @QT_MAC_LIBS@
 QT_WAYLAND_CFLAGS = @QT_WAYLAND_CFLAGS@
 QT_WAYLAND_LIBS = @QT_WAYLAND_LIBS@
 QT_X11_CFLAGS = @QT_X11_CFLAGS@
 QT_X11_LIBS = @QT_X11_LIBS@
 RANLIB = @RANLIB@
 RCC = @RCC@
-RSVG_2_36_2_CFLAGS = @RSVG_2_36_2_CFLAGS@
-RSVG_2_36_2_LIBS = @RSVG_2_36_2_LIBS@
 RSVG_CFLAGS = @RSVG_CFLAGS@
 RSVG_LIBS = @RSVG_LIBS@
 RTMP_CFLAGS = @RTMP_CFLAGS@
@@ -636,6 +647,7 @@
 VOAACENC_LIBS = @VOAACENC_LIBS@
 VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
 VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VULKAN_LIBS = @VULKAN_LIBS@
 WARNING_CFLAGS = @WARNING_CFLAGS@
 WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
 WARNING_OBJCFLAGS = @WARNING_OBJCFLAGS@
@@ -646,6 +658,7 @@
 WAYLAND_LIBS = @WAYLAND_LIBS@
 WEBP_CFLAGS = @WEBP_CFLAGS@
 WEBP_LIBS = @WEBP_LIBS@
+WGET = @WGET@
 WILDMIDI_CFLAGS = @WILDMIDI_CFLAGS@
 WILDMIDI_LIBS = @WILDMIDI_LIBS@
 WINKS_LIBS = @WINKS_LIBS@
@@ -655,6 +668,8 @@
 X11_LIBS = @X11_LIBS@
 X265_CFLAGS = @X265_CFLAGS@
 X265_LIBS = @X265_LIBS@
+XCB_CFLAGS = @XCB_CFLAGS@
+XCB_LIBS = @XCB_LIBS@
 XCOMPOSITE_CFLAGS = @XCOMPOSITE_CFLAGS@
 XCOMPOSITE_LIBS = @XCOMPOSITE_LIBS@
 XGETTEXT = @XGETTEXT@
@@ -692,7 +707,6 @@
 docdir = @docdir@
 dvidir = @dvidir@
 exec_prefix = @exec_prefix@
-gsettingsschemadir = @gsettingsschemadir@
 host = @host@
 host_alias = @host_alias@
 host_cpu = @host_cpu@
diff --git a/tests/examples/gl/qt/Makefile.in b/tests/examples/gl/qt/Makefile.in
index 4b195e1..1dd97c7 100644
--- a/tests/examples/gl/qt/Makefile.in
+++ b/tests/examples/gl/qt/Makefile.in
@@ -114,16 +114,15 @@
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
 	$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
-	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gsettings.m4 \
-	$(top_srcdir)/m4/gst-fionread.m4 $(top_srcdir)/m4/gst-sdl.m4 \
-	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
-	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
-	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libgcrypt.m4 \
-	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
-	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
-	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
-	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
-	$(top_srcdir)/configure.ac
+	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gst-fionread.m4 \
+	$(top_srcdir)/m4/gst-sdl.m4 $(top_srcdir)/m4/iconv.m4 \
+	$(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \
+	$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
+	$(top_srcdir)/m4/libgcrypt.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
+	$(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
@@ -188,6 +187,8 @@
 CLUTTER_X11_LIBS = @CLUTTER_X11_LIBS@
 CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
+CUDA_CFLAGS = @CUDA_CFLAGS@
+CUDA_LIBS = @CUDA_LIBS@
 CURL_CFLAGS = @CURL_CFLAGS@
 CURL_LIBS = @CURL_LIBS@
 CXX = @CXX@
@@ -225,6 +226,8 @@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
+EGL_CFLAGS = @EGL_CFLAGS@
+EGL_LIBS = @EGL_LIBS@
 EGREP = @EGREP@
 ERROR_CFLAGS = @ERROR_CFLAGS@
 ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
@@ -233,7 +236,6 @@
 EXIF_CFLAGS = @EXIF_CFLAGS@
 EXIF_LIBS = @EXIF_LIBS@
 FAAC_LIBS = @FAAC_LIBS@
-FAAD_IS_NEAAC = @FAAD_IS_NEAAC@
 FAAD_LIBS = @FAAD_LIBS@
 FFLAGS = @FFLAGS@
 FGREP = @FGREP@
@@ -252,8 +254,9 @@
 GIO_LIBS = @GIO_LIBS@
 GIO_UNIX_CFLAGS = @GIO_UNIX_CFLAGS@
 GIO_UNIX_LIBS = @GIO_UNIX_LIBS@
+GLES2_CFLAGS = @GLES2_CFLAGS@
+GLES2_LIBS = @GLES2_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
-GLIB_COMPILE_SCHEMAS = @GLIB_COMPILE_SCHEMAS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
@@ -270,16 +273,17 @@
 GMODULE_NO_EXPORT_LIBS = @GMODULE_NO_EXPORT_LIBS@
 GMSGFMT = @GMSGFMT@
 GMSGFMT_015 = @GMSGFMT_015@
+GNUSTL_CFLAGS = @GNUSTL_CFLAGS@
+GNUSTL_LIBS = @GNUSTL_LIBS@
 GRAPHENE_CFLAGS = @GRAPHENE_CFLAGS@
 GRAPHENE_LIBS = @GRAPHENE_LIBS@
 GREP = @GREP@
-GSETTINGS_CFLAGS = @GSETTINGS_CFLAGS@
-GSETTINGS_DISABLE_SCHEMAS_COMPILE = @GSETTINGS_DISABLE_SCHEMAS_COMPILE@
-GSETTINGS_LIBS = @GSETTINGS_LIBS@
 GSM_LIBS = @GSM_LIBS@
 GSTPB_PLUGINS_DIR = @GSTPB_PLUGINS_DIR@
 GSTPB_PREFIX = @GSTPB_PREFIX@
 GST_AGE = @GST_AGE@
+GST_ALLOCATORS_CFLAGS = @GST_ALLOCATORS_CFLAGS@
+GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
 GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
 GST_API_VERSION = @GST_API_VERSION@
 GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
@@ -305,6 +309,8 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PBUTILS_CFLAGS = @GST_PBUTILS_CFLAGS@
+GST_PBUTILS_LIBS = @GST_PBUTILS_LIBS@
 GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BAD_CFLAGS = @GST_PLUGINS_BAD_CFLAGS@
@@ -330,6 +336,8 @@
 GST_PREFIX = @GST_PREFIX@
 GST_REVISION = @GST_REVISION@
 GST_TOOLS_DIR = @GST_TOOLS_DIR@
+GST_VIDEO_CFLAGS = @GST_VIDEO_CFLAGS@
+GST_VIDEO_LIBS = @GST_VIDEO_LIBS@
 GTK3_CFLAGS = @GTK3_CFLAGS@
 GTK3_GL_CFLAGS = @GTK3_GL_CFLAGS@
 GTK3_GL_LIBS = @GTK3_GL_LIBS@
@@ -431,6 +439,7 @@
 LTLIBICONV = @LTLIBICONV@
 LTLIBINTL = @LTLIBINTL@
 LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
 MANIFEST_TOOL = @MANIFEST_TOOL@
@@ -444,8 +453,6 @@
 MODPLUG_LIBS = @MODPLUG_LIBS@
 MPEG2ENC_CFLAGS = @MPEG2ENC_CFLAGS@
 MPEG2ENC_LIBS = @MPEG2ENC_LIBS@
-MPG123_CFLAGS = @MPG123_CFLAGS@
-MPG123_LIBS = @MPG123_LIBS@
 MPLEX_CFLAGS = @MPLEX_CFLAGS@
 MPLEX_LDFLAGS = @MPLEX_LDFLAGS@
 MPLEX_LIBS = @MPLEX_LIBS@
@@ -461,6 +468,8 @@
 NETTLE_LIBS = @NETTLE_LIBS@
 NM = @NM@
 NMEDIT = @NMEDIT@
+NVENCODE_CFLAGS = @NVENCODE_CFLAGS@
+NVENCODE_LIBS = @NVENCODE_LIBS@
 OBJC = @OBJC@
 OBJCDEPMODE = @OBJCDEPMODE@
 OBJCFLAGS = @OBJCFLAGS@
@@ -518,16 +527,18 @@
 PYTHON_PLATFORM = @PYTHON_PLATFORM@
 PYTHON_PREFIX = @PYTHON_PREFIX@
 PYTHON_VERSION = @PYTHON_VERSION@
+QT_ANDROID_CFLAGS = @QT_ANDROID_CFLAGS@
+QT_ANDROID_LIBS = @QT_ANDROID_LIBS@
 QT_CFLAGS = @QT_CFLAGS@
 QT_LIBS = @QT_LIBS@
+QT_MAC_CFLAGS = @QT_MAC_CFLAGS@
+QT_MAC_LIBS = @QT_MAC_LIBS@
 QT_WAYLAND_CFLAGS = @QT_WAYLAND_CFLAGS@
 QT_WAYLAND_LIBS = @QT_WAYLAND_LIBS@
 QT_X11_CFLAGS = @QT_X11_CFLAGS@
 QT_X11_LIBS = @QT_X11_LIBS@
 RANLIB = @RANLIB@
 RCC = @RCC@
-RSVG_2_36_2_CFLAGS = @RSVG_2_36_2_CFLAGS@
-RSVG_2_36_2_LIBS = @RSVG_2_36_2_LIBS@
 RSVG_CFLAGS = @RSVG_CFLAGS@
 RSVG_LIBS = @RSVG_LIBS@
 RTMP_CFLAGS = @RTMP_CFLAGS@
@@ -579,6 +590,7 @@
 VOAACENC_LIBS = @VOAACENC_LIBS@
 VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
 VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VULKAN_LIBS = @VULKAN_LIBS@
 WARNING_CFLAGS = @WARNING_CFLAGS@
 WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
 WARNING_OBJCFLAGS = @WARNING_OBJCFLAGS@
@@ -589,6 +601,7 @@
 WAYLAND_LIBS = @WAYLAND_LIBS@
 WEBP_CFLAGS = @WEBP_CFLAGS@
 WEBP_LIBS = @WEBP_LIBS@
+WGET = @WGET@
 WILDMIDI_CFLAGS = @WILDMIDI_CFLAGS@
 WILDMIDI_LIBS = @WILDMIDI_LIBS@
 WINKS_LIBS = @WINKS_LIBS@
@@ -598,6 +611,8 @@
 X11_LIBS = @X11_LIBS@
 X265_CFLAGS = @X265_CFLAGS@
 X265_LIBS = @X265_LIBS@
+XCB_CFLAGS = @XCB_CFLAGS@
+XCB_LIBS = @XCB_LIBS@
 XCOMPOSITE_CFLAGS = @XCOMPOSITE_CFLAGS@
 XCOMPOSITE_LIBS = @XCOMPOSITE_LIBS@
 XGETTEXT = @XGETTEXT@
@@ -635,7 +650,6 @@
 docdir = @docdir@
 dvidir = @dvidir@
 exec_prefix = @exec_prefix@
-gsettingsschemadir = @gsettingsschemadir@
 host = @host@
 host_alias = @host_alias@
 host_cpu = @host_cpu@
diff --git a/tests/examples/gl/sdl/Makefile.in b/tests/examples/gl/sdl/Makefile.in
index 974c884..4d51a2d 100644
--- a/tests/examples/gl/sdl/Makefile.in
+++ b/tests/examples/gl/sdl/Makefile.in
@@ -119,16 +119,15 @@
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
 	$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
-	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gsettings.m4 \
-	$(top_srcdir)/m4/gst-fionread.m4 $(top_srcdir)/m4/gst-sdl.m4 \
-	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
-	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
-	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libgcrypt.m4 \
-	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
-	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
-	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
-	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
-	$(top_srcdir)/configure.ac
+	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gst-fionread.m4 \
+	$(top_srcdir)/m4/gst-sdl.m4 $(top_srcdir)/m4/iconv.m4 \
+	$(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \
+	$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
+	$(top_srcdir)/m4/libgcrypt.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
+	$(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
@@ -259,6 +258,8 @@
 CLUTTER_X11_LIBS = @CLUTTER_X11_LIBS@
 CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
+CUDA_CFLAGS = @CUDA_CFLAGS@
+CUDA_LIBS = @CUDA_LIBS@
 CURL_CFLAGS = @CURL_CFLAGS@
 CURL_LIBS = @CURL_LIBS@
 CXX = @CXX@
@@ -296,6 +297,8 @@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
+EGL_CFLAGS = @EGL_CFLAGS@
+EGL_LIBS = @EGL_LIBS@
 EGREP = @EGREP@
 ERROR_CFLAGS = @ERROR_CFLAGS@
 ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
@@ -304,7 +307,6 @@
 EXIF_CFLAGS = @EXIF_CFLAGS@
 EXIF_LIBS = @EXIF_LIBS@
 FAAC_LIBS = @FAAC_LIBS@
-FAAD_IS_NEAAC = @FAAD_IS_NEAAC@
 FAAD_LIBS = @FAAD_LIBS@
 FFLAGS = @FFLAGS@
 FGREP = @FGREP@
@@ -323,8 +325,9 @@
 GIO_LIBS = @GIO_LIBS@
 GIO_UNIX_CFLAGS = @GIO_UNIX_CFLAGS@
 GIO_UNIX_LIBS = @GIO_UNIX_LIBS@
+GLES2_CFLAGS = @GLES2_CFLAGS@
+GLES2_LIBS = @GLES2_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
-GLIB_COMPILE_SCHEMAS = @GLIB_COMPILE_SCHEMAS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
@@ -341,16 +344,17 @@
 GMODULE_NO_EXPORT_LIBS = @GMODULE_NO_EXPORT_LIBS@
 GMSGFMT = @GMSGFMT@
 GMSGFMT_015 = @GMSGFMT_015@
+GNUSTL_CFLAGS = @GNUSTL_CFLAGS@
+GNUSTL_LIBS = @GNUSTL_LIBS@
 GRAPHENE_CFLAGS = @GRAPHENE_CFLAGS@
 GRAPHENE_LIBS = @GRAPHENE_LIBS@
 GREP = @GREP@
-GSETTINGS_CFLAGS = @GSETTINGS_CFLAGS@
-GSETTINGS_DISABLE_SCHEMAS_COMPILE = @GSETTINGS_DISABLE_SCHEMAS_COMPILE@
-GSETTINGS_LIBS = @GSETTINGS_LIBS@
 GSM_LIBS = @GSM_LIBS@
 GSTPB_PLUGINS_DIR = @GSTPB_PLUGINS_DIR@
 GSTPB_PREFIX = @GSTPB_PREFIX@
 GST_AGE = @GST_AGE@
+GST_ALLOCATORS_CFLAGS = @GST_ALLOCATORS_CFLAGS@
+GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
 GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
 GST_API_VERSION = @GST_API_VERSION@
 GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
@@ -376,6 +380,8 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PBUTILS_CFLAGS = @GST_PBUTILS_CFLAGS@
+GST_PBUTILS_LIBS = @GST_PBUTILS_LIBS@
 GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BAD_CFLAGS = @GST_PLUGINS_BAD_CFLAGS@
@@ -401,6 +407,8 @@
 GST_PREFIX = @GST_PREFIX@
 GST_REVISION = @GST_REVISION@
 GST_TOOLS_DIR = @GST_TOOLS_DIR@
+GST_VIDEO_CFLAGS = @GST_VIDEO_CFLAGS@
+GST_VIDEO_LIBS = @GST_VIDEO_LIBS@
 GTK3_CFLAGS = @GTK3_CFLAGS@
 GTK3_GL_CFLAGS = @GTK3_GL_CFLAGS@
 GTK3_GL_LIBS = @GTK3_GL_LIBS@
@@ -502,6 +510,7 @@
 LTLIBICONV = @LTLIBICONV@
 LTLIBINTL = @LTLIBINTL@
 LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
 MANIFEST_TOOL = @MANIFEST_TOOL@
@@ -515,8 +524,6 @@
 MODPLUG_LIBS = @MODPLUG_LIBS@
 MPEG2ENC_CFLAGS = @MPEG2ENC_CFLAGS@
 MPEG2ENC_LIBS = @MPEG2ENC_LIBS@
-MPG123_CFLAGS = @MPG123_CFLAGS@
-MPG123_LIBS = @MPG123_LIBS@
 MPLEX_CFLAGS = @MPLEX_CFLAGS@
 MPLEX_LDFLAGS = @MPLEX_LDFLAGS@
 MPLEX_LIBS = @MPLEX_LIBS@
@@ -532,6 +539,8 @@
 NETTLE_LIBS = @NETTLE_LIBS@
 NM = @NM@
 NMEDIT = @NMEDIT@
+NVENCODE_CFLAGS = @NVENCODE_CFLAGS@
+NVENCODE_LIBS = @NVENCODE_LIBS@
 OBJC = @OBJC@
 OBJCDEPMODE = @OBJCDEPMODE@
 OBJCFLAGS = @OBJCFLAGS@
@@ -589,16 +598,18 @@
 PYTHON_PLATFORM = @PYTHON_PLATFORM@
 PYTHON_PREFIX = @PYTHON_PREFIX@
 PYTHON_VERSION = @PYTHON_VERSION@
+QT_ANDROID_CFLAGS = @QT_ANDROID_CFLAGS@
+QT_ANDROID_LIBS = @QT_ANDROID_LIBS@
 QT_CFLAGS = @QT_CFLAGS@
 QT_LIBS = @QT_LIBS@
+QT_MAC_CFLAGS = @QT_MAC_CFLAGS@
+QT_MAC_LIBS = @QT_MAC_LIBS@
 QT_WAYLAND_CFLAGS = @QT_WAYLAND_CFLAGS@
 QT_WAYLAND_LIBS = @QT_WAYLAND_LIBS@
 QT_X11_CFLAGS = @QT_X11_CFLAGS@
 QT_X11_LIBS = @QT_X11_LIBS@
 RANLIB = @RANLIB@
 RCC = @RCC@
-RSVG_2_36_2_CFLAGS = @RSVG_2_36_2_CFLAGS@
-RSVG_2_36_2_LIBS = @RSVG_2_36_2_LIBS@
 RSVG_CFLAGS = @RSVG_CFLAGS@
 RSVG_LIBS = @RSVG_LIBS@
 RTMP_CFLAGS = @RTMP_CFLAGS@
@@ -650,6 +661,7 @@
 VOAACENC_LIBS = @VOAACENC_LIBS@
 VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
 VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VULKAN_LIBS = @VULKAN_LIBS@
 WARNING_CFLAGS = @WARNING_CFLAGS@
 WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
 WARNING_OBJCFLAGS = @WARNING_OBJCFLAGS@
@@ -660,6 +672,7 @@
 WAYLAND_LIBS = @WAYLAND_LIBS@
 WEBP_CFLAGS = @WEBP_CFLAGS@
 WEBP_LIBS = @WEBP_LIBS@
+WGET = @WGET@
 WILDMIDI_CFLAGS = @WILDMIDI_CFLAGS@
 WILDMIDI_LIBS = @WILDMIDI_LIBS@
 WINKS_LIBS = @WINKS_LIBS@
@@ -669,6 +682,8 @@
 X11_LIBS = @X11_LIBS@
 X265_CFLAGS = @X265_CFLAGS@
 X265_LIBS = @X265_LIBS@
+XCB_CFLAGS = @XCB_CFLAGS@
+XCB_LIBS = @XCB_LIBS@
 XCOMPOSITE_CFLAGS = @XCOMPOSITE_CFLAGS@
 XCOMPOSITE_LIBS = @XCOMPOSITE_LIBS@
 XGETTEXT = @XGETTEXT@
@@ -706,7 +721,6 @@
 docdir = @docdir@
 dvidir = @dvidir@
 exec_prefix = @exec_prefix@
-gsettingsschemadir = @gsettingsschemadir@
 host = @host@
 host_alias = @host_alias@
 host_cpu = @host_cpu@
diff --git a/tests/examples/gtk/Makefile.am b/tests/examples/gtk/Makefile.am
index 945331d..adf5e31 100644
--- a/tests/examples/gtk/Makefile.am
+++ b/tests/examples/gtk/Makefile.am
@@ -9,16 +9,33 @@
 
 if USE_GTK3_GL
 if USE_GL
-noinst_PROGRAMS += gtkglsink
+noinst_PROGRAMS += gtkglsink glliveshader
 
 gtkglsink_SOURCES = gtkglsink.c
 gtkglsink_CFLAGS = $(GTK3_CFLAGS) \
 	$(GST_PLUGINS_BAD_CFLAGS) \
 	$(GST_PLUGINS_BASE_CFLAGS) \
 	$(GST_CFLAGS) \
-	$(GL_CFLAGS)
+	$(GL_CFLAGS) \
+	-DGST_USE_UNSTABLE_API
 gtkglsink_LDADD = $(GTK3_LIBS) \
 	$(GST_LIBS) \
-	$(GL_LIBS)
+	$(GL_LIBS) \
+	$(X11_LIBS)
+
+glliveshader_SOURCES = glliveshader.c
+glliveshader_CFLAGS = $(GTK3_CFLAGS) \
+	-I$(top_srcdir)/gst-libs \
+	-I$(top_builddir)/gst-libs \
+	$(GST_PLUGINS_BAD_CFLAGS) \
+	$(GST_PLUGINS_BASE_CFLAGS) \
+	$(GST_CFLAGS) \
+	$(GL_CFLAGS) \
+	-DGST_USE_UNSTABLE_API
+glliveshader_LDADD = $(GTK3_LIBS) \
+	$(GST_LIBS) \
+	$(GL_LIBS) \
+	$(top_builddir)/gst-libs/gst/gl/libgstgl-$(GST_API_VERSION).la \
+	$(X11_LIBS)
 endif
 endif
diff --git a/tests/examples/gtk/Makefile.in b/tests/examples/gtk/Makefile.in
index f929e7f..04bcb4b 100644
--- a/tests/examples/gtk/Makefile.in
+++ b/tests/examples/gtk/Makefile.in
@@ -90,7 +90,7 @@
 host_triplet = @host@
 target_triplet = @target@
 noinst_PROGRAMS = gtksink$(EXEEXT) $(am__EXEEXT_1)
-@USE_GL_TRUE@@USE_GTK3_GL_TRUE@am__append_1 = gtkglsink
+@USE_GL_TRUE@@USE_GTK3_GL_TRUE@am__append_1 = gtkglsink glliveshader
 subdir = tests/examples/gtk
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
 am__aclocal_m4_deps = $(top_srcdir)/common/m4/as-ac-expand.m4 \
@@ -117,16 +117,15 @@
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
 	$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
-	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gsettings.m4 \
-	$(top_srcdir)/m4/gst-fionread.m4 $(top_srcdir)/m4/gst-sdl.m4 \
-	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
-	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
-	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libgcrypt.m4 \
-	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
-	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
-	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
-	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
-	$(top_srcdir)/configure.ac
+	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gst-fionread.m4 \
+	$(top_srcdir)/m4/gst-sdl.m4 $(top_srcdir)/m4/iconv.m4 \
+	$(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \
+	$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
+	$(top_srcdir)/m4/libgcrypt.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
+	$(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
@@ -134,21 +133,35 @@
 CONFIG_HEADER = $(top_builddir)/config.h
 CONFIG_CLEAN_FILES =
 CONFIG_CLEAN_VPATH_FILES =
-@USE_GL_TRUE@@USE_GTK3_GL_TRUE@am__EXEEXT_1 = gtkglsink$(EXEEXT)
+@USE_GL_TRUE@@USE_GTK3_GL_TRUE@am__EXEEXT_1 = gtkglsink$(EXEEXT) \
+@USE_GL_TRUE@@USE_GTK3_GL_TRUE@	glliveshader$(EXEEXT)
 PROGRAMS = $(noinst_PROGRAMS)
-am__gtkglsink_SOURCES_DIST = gtkglsink.c
-@USE_GL_TRUE@@USE_GTK3_GL_TRUE@am_gtkglsink_OBJECTS =  \
-@USE_GL_TRUE@@USE_GTK3_GL_TRUE@	gtkglsink-gtkglsink.$(OBJEXT)
-gtkglsink_OBJECTS = $(am_gtkglsink_OBJECTS)
+am__glliveshader_SOURCES_DIST = glliveshader.c
+@USE_GL_TRUE@@USE_GTK3_GL_TRUE@am_glliveshader_OBJECTS = glliveshader-glliveshader.$(OBJEXT)
+glliveshader_OBJECTS = $(am_glliveshader_OBJECTS)
 am__DEPENDENCIES_1 =
-@USE_GL_TRUE@@USE_GTK3_GL_TRUE@gtkglsink_DEPENDENCIES =  \
+@USE_GL_TRUE@@USE_GTK3_GL_TRUE@glliveshader_DEPENDENCIES =  \
 @USE_GL_TRUE@@USE_GTK3_GL_TRUE@	$(am__DEPENDENCIES_1) \
 @USE_GL_TRUE@@USE_GTK3_GL_TRUE@	$(am__DEPENDENCIES_1) \
+@USE_GL_TRUE@@USE_GTK3_GL_TRUE@	$(am__DEPENDENCIES_1) \
+@USE_GL_TRUE@@USE_GTK3_GL_TRUE@	$(top_builddir)/gst-libs/gst/gl/libgstgl-$(GST_API_VERSION).la \
 @USE_GL_TRUE@@USE_GTK3_GL_TRUE@	$(am__DEPENDENCIES_1)
 AM_V_lt = $(am__v_lt_@AM_V@)
 am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
 am__v_lt_0 = --silent
 am__v_lt_1 = 
+glliveshader_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(glliveshader_CFLAGS) \
+	$(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
+am__gtkglsink_SOURCES_DIST = gtkglsink.c
+@USE_GL_TRUE@@USE_GTK3_GL_TRUE@am_gtkglsink_OBJECTS =  \
+@USE_GL_TRUE@@USE_GTK3_GL_TRUE@	gtkglsink-gtkglsink.$(OBJEXT)
+gtkglsink_OBJECTS = $(am_gtkglsink_OBJECTS)
+@USE_GL_TRUE@@USE_GTK3_GL_TRUE@gtkglsink_DEPENDENCIES =  \
+@USE_GL_TRUE@@USE_GTK3_GL_TRUE@	$(am__DEPENDENCIES_1) \
+@USE_GL_TRUE@@USE_GTK3_GL_TRUE@	$(am__DEPENDENCIES_1) \
+@USE_GL_TRUE@@USE_GTK3_GL_TRUE@	$(am__DEPENDENCIES_1) \
+@USE_GL_TRUE@@USE_GTK3_GL_TRUE@	$(am__DEPENDENCIES_1)
 gtkglsink_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
 	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(gtkglsink_CFLAGS) \
 	$(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
@@ -192,8 +205,10 @@
 am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@)
 am__v_CCLD_0 = @echo "  CCLD    " $@;
 am__v_CCLD_1 = 
-SOURCES = $(gtkglsink_SOURCES) $(gtksink_SOURCES)
-DIST_SOURCES = $(am__gtkglsink_SOURCES_DIST) $(gtksink_SOURCES)
+SOURCES = $(glliveshader_SOURCES) $(gtkglsink_SOURCES) \
+	$(gtksink_SOURCES)
+DIST_SOURCES = $(am__glliveshader_SOURCES_DIST) \
+	$(am__gtkglsink_SOURCES_DIST) $(gtksink_SOURCES)
 am__can_run_installinfo = \
   case $$AM_UPDATE_INFO_DIR in \
     n|no|NO) false;; \
@@ -255,6 +270,8 @@
 CLUTTER_X11_LIBS = @CLUTTER_X11_LIBS@
 CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
+CUDA_CFLAGS = @CUDA_CFLAGS@
+CUDA_LIBS = @CUDA_LIBS@
 CURL_CFLAGS = @CURL_CFLAGS@
 CURL_LIBS = @CURL_LIBS@
 CXX = @CXX@
@@ -292,6 +309,8 @@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
+EGL_CFLAGS = @EGL_CFLAGS@
+EGL_LIBS = @EGL_LIBS@
 EGREP = @EGREP@
 ERROR_CFLAGS = @ERROR_CFLAGS@
 ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
@@ -300,7 +319,6 @@
 EXIF_CFLAGS = @EXIF_CFLAGS@
 EXIF_LIBS = @EXIF_LIBS@
 FAAC_LIBS = @FAAC_LIBS@
-FAAD_IS_NEAAC = @FAAD_IS_NEAAC@
 FAAD_LIBS = @FAAD_LIBS@
 FFLAGS = @FFLAGS@
 FGREP = @FGREP@
@@ -319,8 +337,9 @@
 GIO_LIBS = @GIO_LIBS@
 GIO_UNIX_CFLAGS = @GIO_UNIX_CFLAGS@
 GIO_UNIX_LIBS = @GIO_UNIX_LIBS@
+GLES2_CFLAGS = @GLES2_CFLAGS@
+GLES2_LIBS = @GLES2_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
-GLIB_COMPILE_SCHEMAS = @GLIB_COMPILE_SCHEMAS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
@@ -337,16 +356,17 @@
 GMODULE_NO_EXPORT_LIBS = @GMODULE_NO_EXPORT_LIBS@
 GMSGFMT = @GMSGFMT@
 GMSGFMT_015 = @GMSGFMT_015@
+GNUSTL_CFLAGS = @GNUSTL_CFLAGS@
+GNUSTL_LIBS = @GNUSTL_LIBS@
 GRAPHENE_CFLAGS = @GRAPHENE_CFLAGS@
 GRAPHENE_LIBS = @GRAPHENE_LIBS@
 GREP = @GREP@
-GSETTINGS_CFLAGS = @GSETTINGS_CFLAGS@
-GSETTINGS_DISABLE_SCHEMAS_COMPILE = @GSETTINGS_DISABLE_SCHEMAS_COMPILE@
-GSETTINGS_LIBS = @GSETTINGS_LIBS@
 GSM_LIBS = @GSM_LIBS@
 GSTPB_PLUGINS_DIR = @GSTPB_PLUGINS_DIR@
 GSTPB_PREFIX = @GSTPB_PREFIX@
 GST_AGE = @GST_AGE@
+GST_ALLOCATORS_CFLAGS = @GST_ALLOCATORS_CFLAGS@
+GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
 GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
 GST_API_VERSION = @GST_API_VERSION@
 GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
@@ -372,6 +392,8 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PBUTILS_CFLAGS = @GST_PBUTILS_CFLAGS@
+GST_PBUTILS_LIBS = @GST_PBUTILS_LIBS@
 GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BAD_CFLAGS = @GST_PLUGINS_BAD_CFLAGS@
@@ -397,6 +419,8 @@
 GST_PREFIX = @GST_PREFIX@
 GST_REVISION = @GST_REVISION@
 GST_TOOLS_DIR = @GST_TOOLS_DIR@
+GST_VIDEO_CFLAGS = @GST_VIDEO_CFLAGS@
+GST_VIDEO_LIBS = @GST_VIDEO_LIBS@
 GTK3_CFLAGS = @GTK3_CFLAGS@
 GTK3_GL_CFLAGS = @GTK3_GL_CFLAGS@
 GTK3_GL_LIBS = @GTK3_GL_LIBS@
@@ -498,6 +522,7 @@
 LTLIBICONV = @LTLIBICONV@
 LTLIBINTL = @LTLIBINTL@
 LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
 MANIFEST_TOOL = @MANIFEST_TOOL@
@@ -511,8 +536,6 @@
 MODPLUG_LIBS = @MODPLUG_LIBS@
 MPEG2ENC_CFLAGS = @MPEG2ENC_CFLAGS@
 MPEG2ENC_LIBS = @MPEG2ENC_LIBS@
-MPG123_CFLAGS = @MPG123_CFLAGS@
-MPG123_LIBS = @MPG123_LIBS@
 MPLEX_CFLAGS = @MPLEX_CFLAGS@
 MPLEX_LDFLAGS = @MPLEX_LDFLAGS@
 MPLEX_LIBS = @MPLEX_LIBS@
@@ -528,6 +551,8 @@
 NETTLE_LIBS = @NETTLE_LIBS@
 NM = @NM@
 NMEDIT = @NMEDIT@
+NVENCODE_CFLAGS = @NVENCODE_CFLAGS@
+NVENCODE_LIBS = @NVENCODE_LIBS@
 OBJC = @OBJC@
 OBJCDEPMODE = @OBJCDEPMODE@
 OBJCFLAGS = @OBJCFLAGS@
@@ -585,16 +610,18 @@
 PYTHON_PLATFORM = @PYTHON_PLATFORM@
 PYTHON_PREFIX = @PYTHON_PREFIX@
 PYTHON_VERSION = @PYTHON_VERSION@
+QT_ANDROID_CFLAGS = @QT_ANDROID_CFLAGS@
+QT_ANDROID_LIBS = @QT_ANDROID_LIBS@
 QT_CFLAGS = @QT_CFLAGS@
 QT_LIBS = @QT_LIBS@
+QT_MAC_CFLAGS = @QT_MAC_CFLAGS@
+QT_MAC_LIBS = @QT_MAC_LIBS@
 QT_WAYLAND_CFLAGS = @QT_WAYLAND_CFLAGS@
 QT_WAYLAND_LIBS = @QT_WAYLAND_LIBS@
 QT_X11_CFLAGS = @QT_X11_CFLAGS@
 QT_X11_LIBS = @QT_X11_LIBS@
 RANLIB = @RANLIB@
 RCC = @RCC@
-RSVG_2_36_2_CFLAGS = @RSVG_2_36_2_CFLAGS@
-RSVG_2_36_2_LIBS = @RSVG_2_36_2_LIBS@
 RSVG_CFLAGS = @RSVG_CFLAGS@
 RSVG_LIBS = @RSVG_LIBS@
 RTMP_CFLAGS = @RTMP_CFLAGS@
@@ -646,6 +673,7 @@
 VOAACENC_LIBS = @VOAACENC_LIBS@
 VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
 VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VULKAN_LIBS = @VULKAN_LIBS@
 WARNING_CFLAGS = @WARNING_CFLAGS@
 WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
 WARNING_OBJCFLAGS = @WARNING_OBJCFLAGS@
@@ -656,6 +684,7 @@
 WAYLAND_LIBS = @WAYLAND_LIBS@
 WEBP_CFLAGS = @WEBP_CFLAGS@
 WEBP_LIBS = @WEBP_LIBS@
+WGET = @WGET@
 WILDMIDI_CFLAGS = @WILDMIDI_CFLAGS@
 WILDMIDI_LIBS = @WILDMIDI_LIBS@
 WINKS_LIBS = @WINKS_LIBS@
@@ -665,6 +694,8 @@
 X11_LIBS = @X11_LIBS@
 X265_CFLAGS = @X265_CFLAGS@
 X265_LIBS = @X265_LIBS@
+XCB_CFLAGS = @XCB_CFLAGS@
+XCB_LIBS = @XCB_LIBS@
 XCOMPOSITE_CFLAGS = @XCOMPOSITE_CFLAGS@
 XCOMPOSITE_LIBS = @XCOMPOSITE_LIBS@
 XGETTEXT = @XGETTEXT@
@@ -702,7 +733,6 @@
 docdir = @docdir@
 dvidir = @dvidir@
 exec_prefix = @exec_prefix@
-gsettingsschemadir = @gsettingsschemadir@
 host = @host@
 host_alias = @host_alias@
 host_cpu = @host_cpu@
@@ -754,11 +784,29 @@
 @USE_GL_TRUE@@USE_GTK3_GL_TRUE@	$(GST_PLUGINS_BAD_CFLAGS) \
 @USE_GL_TRUE@@USE_GTK3_GL_TRUE@	$(GST_PLUGINS_BASE_CFLAGS) \
 @USE_GL_TRUE@@USE_GTK3_GL_TRUE@	$(GST_CFLAGS) \
-@USE_GL_TRUE@@USE_GTK3_GL_TRUE@	$(GL_CFLAGS)
+@USE_GL_TRUE@@USE_GTK3_GL_TRUE@	$(GL_CFLAGS) \
+@USE_GL_TRUE@@USE_GTK3_GL_TRUE@	-DGST_USE_UNSTABLE_API
 
 @USE_GL_TRUE@@USE_GTK3_GL_TRUE@gtkglsink_LDADD = $(GTK3_LIBS) \
 @USE_GL_TRUE@@USE_GTK3_GL_TRUE@	$(GST_LIBS) \
-@USE_GL_TRUE@@USE_GTK3_GL_TRUE@	$(GL_LIBS)
+@USE_GL_TRUE@@USE_GTK3_GL_TRUE@	$(GL_LIBS) \
+@USE_GL_TRUE@@USE_GTK3_GL_TRUE@	$(X11_LIBS)
+
+@USE_GL_TRUE@@USE_GTK3_GL_TRUE@glliveshader_SOURCES = glliveshader.c
+@USE_GL_TRUE@@USE_GTK3_GL_TRUE@glliveshader_CFLAGS = $(GTK3_CFLAGS) \
+@USE_GL_TRUE@@USE_GTK3_GL_TRUE@	-I$(top_srcdir)/gst-libs \
+@USE_GL_TRUE@@USE_GTK3_GL_TRUE@	-I$(top_builddir)/gst-libs \
+@USE_GL_TRUE@@USE_GTK3_GL_TRUE@	$(GST_PLUGINS_BAD_CFLAGS) \
+@USE_GL_TRUE@@USE_GTK3_GL_TRUE@	$(GST_PLUGINS_BASE_CFLAGS) \
+@USE_GL_TRUE@@USE_GTK3_GL_TRUE@	$(GST_CFLAGS) \
+@USE_GL_TRUE@@USE_GTK3_GL_TRUE@	$(GL_CFLAGS) \
+@USE_GL_TRUE@@USE_GTK3_GL_TRUE@	-DGST_USE_UNSTABLE_API
+
+@USE_GL_TRUE@@USE_GTK3_GL_TRUE@glliveshader_LDADD = $(GTK3_LIBS) \
+@USE_GL_TRUE@@USE_GTK3_GL_TRUE@	$(GST_LIBS) \
+@USE_GL_TRUE@@USE_GTK3_GL_TRUE@	$(GL_LIBS) \
+@USE_GL_TRUE@@USE_GTK3_GL_TRUE@	$(top_builddir)/gst-libs/gst/gl/libgstgl-$(GST_API_VERSION).la \
+@USE_GL_TRUE@@USE_GTK3_GL_TRUE@	$(X11_LIBS)
 
 all: all-am
 
@@ -803,6 +851,10 @@
 	echo " rm -f" $$list; \
 	rm -f $$list
 
+glliveshader$(EXEEXT): $(glliveshader_OBJECTS) $(glliveshader_DEPENDENCIES) $(EXTRA_glliveshader_DEPENDENCIES) 
+	@rm -f glliveshader$(EXEEXT)
+	$(AM_V_CCLD)$(glliveshader_LINK) $(glliveshader_OBJECTS) $(glliveshader_LDADD) $(LIBS)
+
 gtkglsink$(EXEEXT): $(gtkglsink_OBJECTS) $(gtkglsink_DEPENDENCIES) $(EXTRA_gtkglsink_DEPENDENCIES) 
 	@rm -f gtkglsink$(EXEEXT)
 	$(AM_V_CCLD)$(gtkglsink_LINK) $(gtkglsink_OBJECTS) $(gtkglsink_LDADD) $(LIBS)
@@ -817,6 +869,7 @@
 distclean-compile:
 	-rm -f *.tab.c
 
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/glliveshader-glliveshader.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gtkglsink-gtkglsink.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gtksink-gtksink.Po@am__quote@
 
@@ -844,6 +897,20 @@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $<
 
+glliveshader-glliveshader.o: glliveshader.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(glliveshader_CFLAGS) $(CFLAGS) -MT glliveshader-glliveshader.o -MD -MP -MF $(DEPDIR)/glliveshader-glliveshader.Tpo -c -o glliveshader-glliveshader.o `test -f 'glliveshader.c' || echo '$(srcdir)/'`glliveshader.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/glliveshader-glliveshader.Tpo $(DEPDIR)/glliveshader-glliveshader.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='glliveshader.c' object='glliveshader-glliveshader.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(glliveshader_CFLAGS) $(CFLAGS) -c -o glliveshader-glliveshader.o `test -f 'glliveshader.c' || echo '$(srcdir)/'`glliveshader.c
+
+glliveshader-glliveshader.obj: glliveshader.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(glliveshader_CFLAGS) $(CFLAGS) -MT glliveshader-glliveshader.obj -MD -MP -MF $(DEPDIR)/glliveshader-glliveshader.Tpo -c -o glliveshader-glliveshader.obj `if test -f 'glliveshader.c'; then $(CYGPATH_W) 'glliveshader.c'; else $(CYGPATH_W) '$(srcdir)/glliveshader.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/glliveshader-glliveshader.Tpo $(DEPDIR)/glliveshader-glliveshader.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='glliveshader.c' object='glliveshader-glliveshader.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(glliveshader_CFLAGS) $(CFLAGS) -c -o glliveshader-glliveshader.obj `if test -f 'glliveshader.c'; then $(CYGPATH_W) 'glliveshader.c'; else $(CYGPATH_W) '$(srcdir)/glliveshader.c'; fi`
+
 gtkglsink-gtkglsink.o: gtkglsink.c
 @am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gtkglsink_CFLAGS) $(CFLAGS) -MT gtkglsink-gtkglsink.o -MD -MP -MF $(DEPDIR)/gtkglsink-gtkglsink.Tpo -c -o gtkglsink-gtkglsink.o `test -f 'gtkglsink.c' || echo '$(srcdir)/'`gtkglsink.c
 @am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/gtkglsink-gtkglsink.Tpo $(DEPDIR)/gtkglsink-gtkglsink.Po
diff --git a/tests/examples/gtk/glliveshader.c b/tests/examples/gtk/glliveshader.c
new file mode 100644
index 0000000..d8c8d35
--- /dev/null
+++ b/tests/examples/gtk/glliveshader.c
@@ -0,0 +1,345 @@
+/*
+ * GStreamer
+ * Copyright (C) 2015 Matthew Waters <matthew@centricular.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#include <gst/gst.h>
+#include <gst/gl/gl.h>
+#include <gtk/gtk.h>
+#if GST_GL_HAVE_WINDOW_X11
+#include <X11/Xlib.h>
+#endif
+
+static GMainLoop *loop;
+
+static const gchar *vert = "#version 330\n\
+in vec4 a_position;\n\
+in vec2 a_texcoord;\n\
+out vec2 v_texcoord;\n\
+uniform float time;\n\
+uniform float width;\n\
+uniform float height;\n\
+void main()\n\
+{\n\
+  gl_Position = a_position;\n\
+  v_texcoord = a_texcoord;\n\
+}\n";
+
+static const gchar *geom = "#version 330\n\
+\n\
+layout(triangles) in;\n\
+layout(triangle_strip, max_vertices = 3) out;\n\
+in vec2 v_texcoord[];\n\
+out vec2 g_texcoord;\n\
+\n\
+void main() {\n\
+  for(int i = 0; i < 3; i++) {\n\
+    gl_Position = gl_in[i].gl_Position;\n\
+    g_texcoord = v_texcoord[i];\n\
+    EmitVertex();\n\
+  }\n\
+  EndPrimitive();\n\
+}\n";
+
+static const gchar *frag = "#version 330\n\
+in vec2 g_texcoord;\n\
+uniform sampler2D tex;\n\
+uniform float time;\n\
+uniform float width;\n\
+uniform float height;\n\
+void main()\n\
+{\n\
+  gl_FragColor = texture2D(tex, g_texcoord);\n\
+}\n";
+
+#define MAX_SHADER_STAGES 8
+struct shader_state;
+
+struct text_view_state
+{
+  struct shader_state *state;
+
+  GLenum type;
+  gchar *str;
+};
+
+struct shader_state
+{
+  GstGLContext *context;
+  GstElement *shader;
+  gboolean shader_linked;
+  GtkWidget *label;
+  struct text_view_state text_states[MAX_SHADER_STAGES];
+  gint n_stages;
+};
+
+static gboolean
+bus_call (GstBus * bus, GstMessage * msg, gpointer data)
+{
+  switch (GST_MESSAGE_TYPE (msg)) {
+    case GST_MESSAGE_EOS:
+      g_print ("End of stream\n");
+      g_main_loop_quit (loop);
+      break;
+    case GST_MESSAGE_ERROR:{
+      gchar *debug;
+      GError *error;
+
+      gst_message_parse_error (msg, &error, &debug);
+      g_free (debug);
+
+      g_printerr ("Error: %s\n", error->message);
+      g_error_free (error);
+
+      g_main_loop_quit (loop);
+      break;
+    }
+    default:
+      break;
+  }
+
+  return TRUE;
+}
+
+static gchar *
+_find_source_for_shader_type (struct shader_state *state, GLenum type)
+{
+  int i = 0;
+
+  for (i = 0; i < state->n_stages; i++) {
+    if (state->text_states[i].type == type)
+      return state->text_states[i].str;
+  }
+
+  return NULL;
+}
+
+static gboolean
+_add_stage_to_shader (GstGLShader * shader, struct shader_state *state,
+    GLenum type, const gchar * default_src)
+{
+  GError *error = NULL;
+  GstGLSLVersion version;
+  GstGLSLProfile profile;
+  GstGLSLStage *stage;
+  const gchar *src;
+
+  src = _find_source_for_shader_type (state, type);
+  if (!src)
+    src = default_src;
+  if (!src)
+    /* FIXME: assume this stage is not needed */
+    return TRUE;
+
+  if (!gst_glsl_string_get_version_profile (src, &version, &profile)) {
+    g_print ("Warning: failed to retreive GLSL version and profile for "
+        "shader type 0x%x\nsrc:\n%s\n", type, src);
+  }
+
+  if (!(stage = gst_glsl_stage_new_with_string (shader->context, type,
+              version, profile, src))) {
+    g_print ("Error: Failed to create GLSL Stage from src:\n%s\n", src);
+    return FALSE;
+  }
+
+  if (!gst_gl_shader_compile_attach_stage (shader, stage, &error)) {
+    /* ignore failed shader compilations */
+    g_print ("%s", error->message);
+    return FALSE;
+  }
+
+  return TRUE;
+}
+
+static GstGLShader *
+_new_shader (GstGLContext * context, struct shader_state *state)
+{
+  GstGLShader *shader = gst_gl_shader_new (context);
+  GError *error = NULL;
+
+  if (!_add_stage_to_shader (shader, state, GL_VERTEX_SHADER, vert)) {
+    gst_object_unref (shader);
+    return NULL;
+  }
+  if (!_add_stage_to_shader (shader, state, GL_GEOMETRY_SHADER, geom)) {
+    gst_object_unref (shader);
+    return NULL;
+  }
+  if (!_add_stage_to_shader (shader, state, GL_FRAGMENT_SHADER, frag)) {
+    gst_object_unref (shader);
+    return NULL;
+  }
+
+  if (!gst_gl_shader_link (shader, &error)) {
+    /* ignore failed shader compilations */
+    g_print ("%s", error->message);
+    gst_object_unref (shader);
+    return NULL;
+  }
+
+  return shader;
+}
+
+static gboolean
+_set_compilation_state (struct shader_state *state)
+{
+  gtk_label_set_text (GTK_LABEL (state->label),
+      state->shader_linked ? "Success" : "Failure");
+
+  return G_SOURCE_REMOVE;
+}
+
+static GstGLShader *
+_create_shader (GstElement * element, struct shader_state *state)
+{
+  GstGLContext *context;
+  GstGLShader *shader, *new_shader;
+
+  g_object_get (G_OBJECT (element), "context", &context, "shader", &shader,
+      NULL);
+
+  new_shader = _new_shader (context, state);
+  if (!shader && !new_shader)
+    g_warning ("Failed to create a shader!");
+  state->shader_linked = new_shader != NULL;
+
+  if (shader)
+    gst_object_unref (shader);
+  gst_object_unref (context);
+
+  g_main_context_invoke (NULL, (GSourceFunc) _set_compilation_state, state);
+
+  return new_shader;
+}
+
+static void
+_on_text_changed (GtkTextBuffer * text, struct text_view_state *state)
+{
+  GtkTextIter start, end;
+
+  gtk_text_buffer_get_bounds (text, &start, &end);
+  g_free (state->str);
+  state->str = gtk_text_buffer_get_text (text, &start, &end, FALSE);
+  g_object_set (state->state->shader, "update-shader", TRUE, NULL);
+}
+
+static GtkWidget *
+_new_source_view (struct shader_state *state, GLenum type, const gchar * templ)
+{
+  static int i = 0;
+  GtkWidget *scroll, *text_view;
+  GtkTextBuffer *text;
+
+  g_return_val_if_fail (i < MAX_SHADER_STAGES, NULL);
+
+  state->text_states[i].state = state;
+  state->text_states[i].type = type;
+  state->text_states[i].str = g_strdup (templ);
+
+  scroll = gtk_scrolled_window_new (NULL, NULL);
+  gtk_widget_set_size_request (scroll, 20, 20);
+  text_view = gtk_text_view_new ();
+  gtk_container_add (GTK_CONTAINER (scroll), text_view);
+  text = gtk_text_view_get_buffer (GTK_TEXT_VIEW (text_view));
+  if (state->text_states[i].str)
+    gtk_text_buffer_set_text (text, state->text_states[i].str, -1);
+  g_signal_connect (text, "changed", G_CALLBACK (_on_text_changed),
+      &state->text_states[i]);
+  state->n_stages++;
+  i++;
+
+  return scroll;
+}
+
+int
+main (int argc, char *argv[])
+{
+  GstElement *pipeline, *src, *upload, *shader, *sink;
+  GtkWidget *window, *paned, *video, *right_box, *book;
+  struct shader_state state = { 0, };
+  GstBus *bus;
+
+#if GST_GL_HAVE_WINDOW_X11
+  XInitThreads ();
+#endif
+
+  gst_init (&argc, &argv);
+  gtk_init (&argc, &argv);
+
+  loop = g_main_loop_new (NULL, FALSE);
+
+  pipeline = gst_pipeline_new (NULL);
+  src = gst_element_factory_make ("videotestsrc", NULL);
+  upload = gst_element_factory_make ("glupload", NULL);
+  shader = gst_element_factory_make ("glshader", NULL);
+  sink = gst_element_factory_make ("gtkglsink", NULL);
+  g_object_get (sink, "widget", &video, NULL);
+
+  g_assert (src && shader && sink);
+  gst_bin_add_many (GST_BIN (pipeline), src, upload, shader, sink, NULL);
+  g_assert (gst_element_link_many (src, upload, shader, sink, NULL));
+
+  bus = gst_pipeline_get_bus (GST_PIPELINE (pipeline));
+  gst_bus_add_watch (bus, bus_call, loop);
+  gst_object_unref (bus);
+
+  state.shader = gst_object_ref (shader);
+  g_signal_connect (shader, "create-shader", G_CALLBACK (_create_shader),
+      &state);
+
+  book = gtk_notebook_new ();
+  /* text view inside a scroll view */
+  gtk_notebook_append_page (GTK_NOTEBOOK (book), _new_source_view (&state,
+          GL_VERTEX_SHADER, vert), gtk_label_new ("Vertex"));
+  gtk_notebook_append_page (GTK_NOTEBOOK (book), _new_source_view (&state,
+          GL_GEOMETRY_SHADER, geom), gtk_label_new ("Geometry"));
+  gtk_notebook_append_page (GTK_NOTEBOOK (book), _new_source_view (&state,
+          GL_FRAGMENT_SHADER, frag), gtk_label_new ("Fragment"));
+  /* status label */
+  state.label = gtk_label_new ("Success");
+
+  /* right side source code editor */
+  right_box = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0);
+  gtk_box_pack_start (GTK_BOX (right_box), book, TRUE, TRUE, 0);
+  gtk_box_pack_start (GTK_BOX (right_box), state.label, FALSE, TRUE, 0);
+
+  paned = gtk_paned_new (GTK_ORIENTATION_HORIZONTAL);
+  gtk_paned_pack1 (GTK_PANED (paned), video, TRUE, FALSE);
+  gtk_widget_set_size_request (video, 20, 20);
+  gtk_paned_pack2 (GTK_PANED (paned), right_box, TRUE, FALSE);
+
+  window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
+  gtk_window_set_default_size (GTK_WINDOW (window), 640, 480);
+  gtk_container_add (GTK_CONTAINER (window), paned);
+
+  gtk_widget_show_all (window);
+
+  gst_element_set_state (pipeline, GST_STATE_PLAYING);
+
+  g_main_loop_run (loop);
+
+  gst_element_set_state (pipeline, GST_STATE_NULL);
+
+  /*shader strings leaked here */
+  /*g_free (state.str); */
+  gst_object_unref (state.shader);
+
+  gst_object_unref (pipeline);
+
+  return 0;
+}
diff --git a/tests/examples/mpegts/Makefile.in b/tests/examples/mpegts/Makefile.in
index aed3e35..0d3f759 100644
--- a/tests/examples/mpegts/Makefile.in
+++ b/tests/examples/mpegts/Makefile.in
@@ -116,16 +116,15 @@
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
 	$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
-	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gsettings.m4 \
-	$(top_srcdir)/m4/gst-fionread.m4 $(top_srcdir)/m4/gst-sdl.m4 \
-	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
-	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
-	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libgcrypt.m4 \
-	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
-	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
-	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
-	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
-	$(top_srcdir)/configure.ac
+	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gst-fionread.m4 \
+	$(top_srcdir)/m4/gst-sdl.m4 $(top_srcdir)/m4/iconv.m4 \
+	$(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \
+	$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
+	$(top_srcdir)/m4/libgcrypt.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
+	$(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
@@ -241,6 +240,8 @@
 CLUTTER_X11_LIBS = @CLUTTER_X11_LIBS@
 CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
+CUDA_CFLAGS = @CUDA_CFLAGS@
+CUDA_LIBS = @CUDA_LIBS@
 CURL_CFLAGS = @CURL_CFLAGS@
 CURL_LIBS = @CURL_LIBS@
 CXX = @CXX@
@@ -278,6 +279,8 @@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
+EGL_CFLAGS = @EGL_CFLAGS@
+EGL_LIBS = @EGL_LIBS@
 EGREP = @EGREP@
 ERROR_CFLAGS = @ERROR_CFLAGS@
 ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
@@ -286,7 +289,6 @@
 EXIF_CFLAGS = @EXIF_CFLAGS@
 EXIF_LIBS = @EXIF_LIBS@
 FAAC_LIBS = @FAAC_LIBS@
-FAAD_IS_NEAAC = @FAAD_IS_NEAAC@
 FAAD_LIBS = @FAAD_LIBS@
 FFLAGS = @FFLAGS@
 FGREP = @FGREP@
@@ -305,8 +307,9 @@
 GIO_LIBS = @GIO_LIBS@
 GIO_UNIX_CFLAGS = @GIO_UNIX_CFLAGS@
 GIO_UNIX_LIBS = @GIO_UNIX_LIBS@
+GLES2_CFLAGS = @GLES2_CFLAGS@
+GLES2_LIBS = @GLES2_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
-GLIB_COMPILE_SCHEMAS = @GLIB_COMPILE_SCHEMAS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
@@ -323,16 +326,17 @@
 GMODULE_NO_EXPORT_LIBS = @GMODULE_NO_EXPORT_LIBS@
 GMSGFMT = @GMSGFMT@
 GMSGFMT_015 = @GMSGFMT_015@
+GNUSTL_CFLAGS = @GNUSTL_CFLAGS@
+GNUSTL_LIBS = @GNUSTL_LIBS@
 GRAPHENE_CFLAGS = @GRAPHENE_CFLAGS@
 GRAPHENE_LIBS = @GRAPHENE_LIBS@
 GREP = @GREP@
-GSETTINGS_CFLAGS = @GSETTINGS_CFLAGS@
-GSETTINGS_DISABLE_SCHEMAS_COMPILE = @GSETTINGS_DISABLE_SCHEMAS_COMPILE@
-GSETTINGS_LIBS = @GSETTINGS_LIBS@
 GSM_LIBS = @GSM_LIBS@
 GSTPB_PLUGINS_DIR = @GSTPB_PLUGINS_DIR@
 GSTPB_PREFIX = @GSTPB_PREFIX@
 GST_AGE = @GST_AGE@
+GST_ALLOCATORS_CFLAGS = @GST_ALLOCATORS_CFLAGS@
+GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
 GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
 GST_API_VERSION = @GST_API_VERSION@
 GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
@@ -358,6 +362,8 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PBUTILS_CFLAGS = @GST_PBUTILS_CFLAGS@
+GST_PBUTILS_LIBS = @GST_PBUTILS_LIBS@
 GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BAD_CFLAGS = @GST_PLUGINS_BAD_CFLAGS@
@@ -383,6 +389,8 @@
 GST_PREFIX = @GST_PREFIX@
 GST_REVISION = @GST_REVISION@
 GST_TOOLS_DIR = @GST_TOOLS_DIR@
+GST_VIDEO_CFLAGS = @GST_VIDEO_CFLAGS@
+GST_VIDEO_LIBS = @GST_VIDEO_LIBS@
 GTK3_CFLAGS = @GTK3_CFLAGS@
 GTK3_GL_CFLAGS = @GTK3_GL_CFLAGS@
 GTK3_GL_LIBS = @GTK3_GL_LIBS@
@@ -484,6 +492,7 @@
 LTLIBICONV = @LTLIBICONV@
 LTLIBINTL = @LTLIBINTL@
 LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
 MANIFEST_TOOL = @MANIFEST_TOOL@
@@ -497,8 +506,6 @@
 MODPLUG_LIBS = @MODPLUG_LIBS@
 MPEG2ENC_CFLAGS = @MPEG2ENC_CFLAGS@
 MPEG2ENC_LIBS = @MPEG2ENC_LIBS@
-MPG123_CFLAGS = @MPG123_CFLAGS@
-MPG123_LIBS = @MPG123_LIBS@
 MPLEX_CFLAGS = @MPLEX_CFLAGS@
 MPLEX_LDFLAGS = @MPLEX_LDFLAGS@
 MPLEX_LIBS = @MPLEX_LIBS@
@@ -514,6 +521,8 @@
 NETTLE_LIBS = @NETTLE_LIBS@
 NM = @NM@
 NMEDIT = @NMEDIT@
+NVENCODE_CFLAGS = @NVENCODE_CFLAGS@
+NVENCODE_LIBS = @NVENCODE_LIBS@
 OBJC = @OBJC@
 OBJCDEPMODE = @OBJCDEPMODE@
 OBJCFLAGS = @OBJCFLAGS@
@@ -571,16 +580,18 @@
 PYTHON_PLATFORM = @PYTHON_PLATFORM@
 PYTHON_PREFIX = @PYTHON_PREFIX@
 PYTHON_VERSION = @PYTHON_VERSION@
+QT_ANDROID_CFLAGS = @QT_ANDROID_CFLAGS@
+QT_ANDROID_LIBS = @QT_ANDROID_LIBS@
 QT_CFLAGS = @QT_CFLAGS@
 QT_LIBS = @QT_LIBS@
+QT_MAC_CFLAGS = @QT_MAC_CFLAGS@
+QT_MAC_LIBS = @QT_MAC_LIBS@
 QT_WAYLAND_CFLAGS = @QT_WAYLAND_CFLAGS@
 QT_WAYLAND_LIBS = @QT_WAYLAND_LIBS@
 QT_X11_CFLAGS = @QT_X11_CFLAGS@
 QT_X11_LIBS = @QT_X11_LIBS@
 RANLIB = @RANLIB@
 RCC = @RCC@
-RSVG_2_36_2_CFLAGS = @RSVG_2_36_2_CFLAGS@
-RSVG_2_36_2_LIBS = @RSVG_2_36_2_LIBS@
 RSVG_CFLAGS = @RSVG_CFLAGS@
 RSVG_LIBS = @RSVG_LIBS@
 RTMP_CFLAGS = @RTMP_CFLAGS@
@@ -632,6 +643,7 @@
 VOAACENC_LIBS = @VOAACENC_LIBS@
 VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
 VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VULKAN_LIBS = @VULKAN_LIBS@
 WARNING_CFLAGS = @WARNING_CFLAGS@
 WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
 WARNING_OBJCFLAGS = @WARNING_OBJCFLAGS@
@@ -642,6 +654,7 @@
 WAYLAND_LIBS = @WAYLAND_LIBS@
 WEBP_CFLAGS = @WEBP_CFLAGS@
 WEBP_LIBS = @WEBP_LIBS@
+WGET = @WGET@
 WILDMIDI_CFLAGS = @WILDMIDI_CFLAGS@
 WILDMIDI_LIBS = @WILDMIDI_LIBS@
 WINKS_LIBS = @WINKS_LIBS@
@@ -651,6 +664,8 @@
 X11_LIBS = @X11_LIBS@
 X265_CFLAGS = @X265_CFLAGS@
 X265_LIBS = @X265_LIBS@
+XCB_CFLAGS = @XCB_CFLAGS@
+XCB_LIBS = @XCB_LIBS@
 XCOMPOSITE_CFLAGS = @XCOMPOSITE_CFLAGS@
 XCOMPOSITE_LIBS = @XCOMPOSITE_LIBS@
 XGETTEXT = @XGETTEXT@
@@ -688,7 +703,6 @@
 docdir = @docdir@
 dvidir = @dvidir@
 exec_prefix = @exec_prefix@
-gsettingsschemadir = @gsettingsschemadir@
 host = @host@
 host_alias = @host_alias@
 host_cpu = @host_cpu@
diff --git a/tests/examples/mxf/Makefile.in b/tests/examples/mxf/Makefile.in
index 920ee34..2e93746 100644
--- a/tests/examples/mxf/Makefile.in
+++ b/tests/examples/mxf/Makefile.in
@@ -117,16 +117,15 @@
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
 	$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
-	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gsettings.m4 \
-	$(top_srcdir)/m4/gst-fionread.m4 $(top_srcdir)/m4/gst-sdl.m4 \
-	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
-	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
-	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libgcrypt.m4 \
-	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
-	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
-	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
-	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
-	$(top_srcdir)/configure.ac
+	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gst-fionread.m4 \
+	$(top_srcdir)/m4/gst-sdl.m4 $(top_srcdir)/m4/iconv.m4 \
+	$(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \
+	$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
+	$(top_srcdir)/m4/libgcrypt.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
+	$(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \
@@ -246,6 +245,8 @@
 CLUTTER_X11_LIBS = @CLUTTER_X11_LIBS@
 CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
+CUDA_CFLAGS = @CUDA_CFLAGS@
+CUDA_LIBS = @CUDA_LIBS@
 CURL_CFLAGS = @CURL_CFLAGS@
 CURL_LIBS = @CURL_LIBS@
 CXX = @CXX@
@@ -283,6 +284,8 @@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
+EGL_CFLAGS = @EGL_CFLAGS@
+EGL_LIBS = @EGL_LIBS@
 EGREP = @EGREP@
 ERROR_CFLAGS = @ERROR_CFLAGS@
 ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
@@ -291,7 +294,6 @@
 EXIF_CFLAGS = @EXIF_CFLAGS@
 EXIF_LIBS = @EXIF_LIBS@
 FAAC_LIBS = @FAAC_LIBS@
-FAAD_IS_NEAAC = @FAAD_IS_NEAAC@
 FAAD_LIBS = @FAAD_LIBS@
 FFLAGS = @FFLAGS@
 FGREP = @FGREP@
@@ -310,8 +312,9 @@
 GIO_LIBS = @GIO_LIBS@
 GIO_UNIX_CFLAGS = @GIO_UNIX_CFLAGS@
 GIO_UNIX_LIBS = @GIO_UNIX_LIBS@
+GLES2_CFLAGS = @GLES2_CFLAGS@
+GLES2_LIBS = @GLES2_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
-GLIB_COMPILE_SCHEMAS = @GLIB_COMPILE_SCHEMAS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
@@ -328,16 +331,17 @@
 GMODULE_NO_EXPORT_LIBS = @GMODULE_NO_EXPORT_LIBS@
 GMSGFMT = @GMSGFMT@
 GMSGFMT_015 = @GMSGFMT_015@
+GNUSTL_CFLAGS = @GNUSTL_CFLAGS@
+GNUSTL_LIBS = @GNUSTL_LIBS@
 GRAPHENE_CFLAGS = @GRAPHENE_CFLAGS@
 GRAPHENE_LIBS = @GRAPHENE_LIBS@
 GREP = @GREP@
-GSETTINGS_CFLAGS = @GSETTINGS_CFLAGS@
-GSETTINGS_DISABLE_SCHEMAS_COMPILE = @GSETTINGS_DISABLE_SCHEMAS_COMPILE@
-GSETTINGS_LIBS = @GSETTINGS_LIBS@
 GSM_LIBS = @GSM_LIBS@
 GSTPB_PLUGINS_DIR = @GSTPB_PLUGINS_DIR@
 GSTPB_PREFIX = @GSTPB_PREFIX@
 GST_AGE = @GST_AGE@
+GST_ALLOCATORS_CFLAGS = @GST_ALLOCATORS_CFLAGS@
+GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
 GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
 GST_API_VERSION = @GST_API_VERSION@
 GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
@@ -363,6 +367,8 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PBUTILS_CFLAGS = @GST_PBUTILS_CFLAGS@
+GST_PBUTILS_LIBS = @GST_PBUTILS_LIBS@
 GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BAD_CFLAGS = @GST_PLUGINS_BAD_CFLAGS@
@@ -388,6 +394,8 @@
 GST_PREFIX = @GST_PREFIX@
 GST_REVISION = @GST_REVISION@
 GST_TOOLS_DIR = @GST_TOOLS_DIR@
+GST_VIDEO_CFLAGS = @GST_VIDEO_CFLAGS@
+GST_VIDEO_LIBS = @GST_VIDEO_LIBS@
 GTK3_CFLAGS = @GTK3_CFLAGS@
 GTK3_GL_CFLAGS = @GTK3_GL_CFLAGS@
 GTK3_GL_LIBS = @GTK3_GL_LIBS@
@@ -489,6 +497,7 @@
 LTLIBICONV = @LTLIBICONV@
 LTLIBINTL = @LTLIBINTL@
 LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
 MANIFEST_TOOL = @MANIFEST_TOOL@
@@ -502,8 +511,6 @@
 MODPLUG_LIBS = @MODPLUG_LIBS@
 MPEG2ENC_CFLAGS = @MPEG2ENC_CFLAGS@
 MPEG2ENC_LIBS = @MPEG2ENC_LIBS@
-MPG123_CFLAGS = @MPG123_CFLAGS@
-MPG123_LIBS = @MPG123_LIBS@
 MPLEX_CFLAGS = @MPLEX_CFLAGS@
 MPLEX_LDFLAGS = @MPLEX_LDFLAGS@
 MPLEX_LIBS = @MPLEX_LIBS@
@@ -519,6 +526,8 @@
 NETTLE_LIBS = @NETTLE_LIBS@
 NM = @NM@
 NMEDIT = @NMEDIT@
+NVENCODE_CFLAGS = @NVENCODE_CFLAGS@
+NVENCODE_LIBS = @NVENCODE_LIBS@
 OBJC = @OBJC@
 OBJCDEPMODE = @OBJCDEPMODE@
 OBJCFLAGS = @OBJCFLAGS@
@@ -576,16 +585,18 @@
 PYTHON_PLATFORM = @PYTHON_PLATFORM@
 PYTHON_PREFIX = @PYTHON_PREFIX@
 PYTHON_VERSION = @PYTHON_VERSION@
+QT_ANDROID_CFLAGS = @QT_ANDROID_CFLAGS@
+QT_ANDROID_LIBS = @QT_ANDROID_LIBS@
 QT_CFLAGS = @QT_CFLAGS@
 QT_LIBS = @QT_LIBS@
+QT_MAC_CFLAGS = @QT_MAC_CFLAGS@
+QT_MAC_LIBS = @QT_MAC_LIBS@
 QT_WAYLAND_CFLAGS = @QT_WAYLAND_CFLAGS@
 QT_WAYLAND_LIBS = @QT_WAYLAND_LIBS@
 QT_X11_CFLAGS = @QT_X11_CFLAGS@
 QT_X11_LIBS = @QT_X11_LIBS@
 RANLIB = @RANLIB@
 RCC = @RCC@
-RSVG_2_36_2_CFLAGS = @RSVG_2_36_2_CFLAGS@
-RSVG_2_36_2_LIBS = @RSVG_2_36_2_LIBS@
 RSVG_CFLAGS = @RSVG_CFLAGS@
 RSVG_LIBS = @RSVG_LIBS@
 RTMP_CFLAGS = @RTMP_CFLAGS@
@@ -637,6 +648,7 @@
 VOAACENC_LIBS = @VOAACENC_LIBS@
 VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
 VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VULKAN_LIBS = @VULKAN_LIBS@
 WARNING_CFLAGS = @WARNING_CFLAGS@
 WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
 WARNING_OBJCFLAGS = @WARNING_OBJCFLAGS@
@@ -647,6 +659,7 @@
 WAYLAND_LIBS = @WAYLAND_LIBS@
 WEBP_CFLAGS = @WEBP_CFLAGS@
 WEBP_LIBS = @WEBP_LIBS@
+WGET = @WGET@
 WILDMIDI_CFLAGS = @WILDMIDI_CFLAGS@
 WILDMIDI_LIBS = @WILDMIDI_LIBS@
 WINKS_LIBS = @WINKS_LIBS@
@@ -656,6 +669,8 @@
 X11_LIBS = @X11_LIBS@
 X265_CFLAGS = @X265_CFLAGS@
 X265_LIBS = @X265_LIBS@
+XCB_CFLAGS = @XCB_CFLAGS@
+XCB_LIBS = @XCB_LIBS@
 XCOMPOSITE_CFLAGS = @XCOMPOSITE_CFLAGS@
 XCOMPOSITE_LIBS = @XCOMPOSITE_LIBS@
 XGETTEXT = @XGETTEXT@
@@ -693,7 +708,6 @@
 docdir = @docdir@
 dvidir = @dvidir@
 exec_prefix = @exec_prefix@
-gsettingsschemadir = @gsettingsschemadir@
 host = @host@
 host_alias = @host_alias@
 host_cpu = @host_cpu@
diff --git a/tests/examples/mxf/mxfdemux-structure.c b/tests/examples/mxf/mxfdemux-structure.c
index 1a802a7..a24a310 100644
--- a/tests/examples/mxf/mxfdemux-structure.c
+++ b/tests/examples/mxf/mxfdemux-structure.c
@@ -182,6 +182,7 @@
   GstElement *bin = (GstElement *) gst_element_get_parent (src);
 
   gst_bin_add (GST_BIN (bin), fakesink);
+  gst_element_sync_state_with_parent (fakesink);
 
   gst_pad_link (pad, sinkpad);
 
@@ -244,7 +245,10 @@
   gtk_container_add (GTK_CONTAINER (window), scrolled_window);
   gtk_widget_show_all (window);
 
-  gst_element_set_state (pipeline, GST_STATE_PLAYING);
+  if (gst_element_set_state (pipeline,
+          GST_STATE_PLAYING) == GST_STATE_CHANGE_FAILURE) {
+    g_error ("Failed to change state to PLAYING");
+  }
 
   gtk_main ();
 
diff --git a/tests/examples/opencv/Makefile.in b/tests/examples/opencv/Makefile.in
index 1da21a7..6a12ba6 100644
--- a/tests/examples/opencv/Makefile.in
+++ b/tests/examples/opencv/Makefile.in
@@ -117,16 +117,15 @@
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
 	$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
-	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gsettings.m4 \
-	$(top_srcdir)/m4/gst-fionread.m4 $(top_srcdir)/m4/gst-sdl.m4 \
-	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
-	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
-	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libgcrypt.m4 \
-	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
-	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
-	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
-	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
-	$(top_srcdir)/configure.ac
+	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gst-fionread.m4 \
+	$(top_srcdir)/m4/gst-sdl.m4 $(top_srcdir)/m4/iconv.m4 \
+	$(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \
+	$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
+	$(top_srcdir)/m4/libgcrypt.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
+	$(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
@@ -263,6 +262,8 @@
 CLUTTER_X11_LIBS = @CLUTTER_X11_LIBS@
 CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
+CUDA_CFLAGS = @CUDA_CFLAGS@
+CUDA_LIBS = @CUDA_LIBS@
 CURL_CFLAGS = @CURL_CFLAGS@
 CURL_LIBS = @CURL_LIBS@
 CXX = @CXX@
@@ -300,6 +301,8 @@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
+EGL_CFLAGS = @EGL_CFLAGS@
+EGL_LIBS = @EGL_LIBS@
 EGREP = @EGREP@
 ERROR_CFLAGS = @ERROR_CFLAGS@
 ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
@@ -308,7 +311,6 @@
 EXIF_CFLAGS = @EXIF_CFLAGS@
 EXIF_LIBS = @EXIF_LIBS@
 FAAC_LIBS = @FAAC_LIBS@
-FAAD_IS_NEAAC = @FAAD_IS_NEAAC@
 FAAD_LIBS = @FAAD_LIBS@
 FFLAGS = @FFLAGS@
 FGREP = @FGREP@
@@ -327,8 +329,9 @@
 GIO_LIBS = @GIO_LIBS@
 GIO_UNIX_CFLAGS = @GIO_UNIX_CFLAGS@
 GIO_UNIX_LIBS = @GIO_UNIX_LIBS@
+GLES2_CFLAGS = @GLES2_CFLAGS@
+GLES2_LIBS = @GLES2_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
-GLIB_COMPILE_SCHEMAS = @GLIB_COMPILE_SCHEMAS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
@@ -345,16 +348,17 @@
 GMODULE_NO_EXPORT_LIBS = @GMODULE_NO_EXPORT_LIBS@
 GMSGFMT = @GMSGFMT@
 GMSGFMT_015 = @GMSGFMT_015@
+GNUSTL_CFLAGS = @GNUSTL_CFLAGS@
+GNUSTL_LIBS = @GNUSTL_LIBS@
 GRAPHENE_CFLAGS = @GRAPHENE_CFLAGS@
 GRAPHENE_LIBS = @GRAPHENE_LIBS@
 GREP = @GREP@
-GSETTINGS_CFLAGS = @GSETTINGS_CFLAGS@
-GSETTINGS_DISABLE_SCHEMAS_COMPILE = @GSETTINGS_DISABLE_SCHEMAS_COMPILE@
-GSETTINGS_LIBS = @GSETTINGS_LIBS@
 GSM_LIBS = @GSM_LIBS@
 GSTPB_PLUGINS_DIR = @GSTPB_PLUGINS_DIR@
 GSTPB_PREFIX = @GSTPB_PREFIX@
 GST_AGE = @GST_AGE@
+GST_ALLOCATORS_CFLAGS = @GST_ALLOCATORS_CFLAGS@
+GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
 GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
 GST_API_VERSION = @GST_API_VERSION@
 GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
@@ -380,6 +384,8 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PBUTILS_CFLAGS = @GST_PBUTILS_CFLAGS@
+GST_PBUTILS_LIBS = @GST_PBUTILS_LIBS@
 GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BAD_CFLAGS = @GST_PLUGINS_BAD_CFLAGS@
@@ -405,6 +411,8 @@
 GST_PREFIX = @GST_PREFIX@
 GST_REVISION = @GST_REVISION@
 GST_TOOLS_DIR = @GST_TOOLS_DIR@
+GST_VIDEO_CFLAGS = @GST_VIDEO_CFLAGS@
+GST_VIDEO_LIBS = @GST_VIDEO_LIBS@
 GTK3_CFLAGS = @GTK3_CFLAGS@
 GTK3_GL_CFLAGS = @GTK3_GL_CFLAGS@
 GTK3_GL_LIBS = @GTK3_GL_LIBS@
@@ -506,6 +514,7 @@
 LTLIBICONV = @LTLIBICONV@
 LTLIBINTL = @LTLIBINTL@
 LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
 MANIFEST_TOOL = @MANIFEST_TOOL@
@@ -519,8 +528,6 @@
 MODPLUG_LIBS = @MODPLUG_LIBS@
 MPEG2ENC_CFLAGS = @MPEG2ENC_CFLAGS@
 MPEG2ENC_LIBS = @MPEG2ENC_LIBS@
-MPG123_CFLAGS = @MPG123_CFLAGS@
-MPG123_LIBS = @MPG123_LIBS@
 MPLEX_CFLAGS = @MPLEX_CFLAGS@
 MPLEX_LDFLAGS = @MPLEX_LDFLAGS@
 MPLEX_LIBS = @MPLEX_LIBS@
@@ -536,6 +543,8 @@
 NETTLE_LIBS = @NETTLE_LIBS@
 NM = @NM@
 NMEDIT = @NMEDIT@
+NVENCODE_CFLAGS = @NVENCODE_CFLAGS@
+NVENCODE_LIBS = @NVENCODE_LIBS@
 OBJC = @OBJC@
 OBJCDEPMODE = @OBJCDEPMODE@
 OBJCFLAGS = @OBJCFLAGS@
@@ -593,16 +602,18 @@
 PYTHON_PLATFORM = @PYTHON_PLATFORM@
 PYTHON_PREFIX = @PYTHON_PREFIX@
 PYTHON_VERSION = @PYTHON_VERSION@
+QT_ANDROID_CFLAGS = @QT_ANDROID_CFLAGS@
+QT_ANDROID_LIBS = @QT_ANDROID_LIBS@
 QT_CFLAGS = @QT_CFLAGS@
 QT_LIBS = @QT_LIBS@
+QT_MAC_CFLAGS = @QT_MAC_CFLAGS@
+QT_MAC_LIBS = @QT_MAC_LIBS@
 QT_WAYLAND_CFLAGS = @QT_WAYLAND_CFLAGS@
 QT_WAYLAND_LIBS = @QT_WAYLAND_LIBS@
 QT_X11_CFLAGS = @QT_X11_CFLAGS@
 QT_X11_LIBS = @QT_X11_LIBS@
 RANLIB = @RANLIB@
 RCC = @RCC@
-RSVG_2_36_2_CFLAGS = @RSVG_2_36_2_CFLAGS@
-RSVG_2_36_2_LIBS = @RSVG_2_36_2_LIBS@
 RSVG_CFLAGS = @RSVG_CFLAGS@
 RSVG_LIBS = @RSVG_LIBS@
 RTMP_CFLAGS = @RTMP_CFLAGS@
@@ -654,6 +665,7 @@
 VOAACENC_LIBS = @VOAACENC_LIBS@
 VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
 VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VULKAN_LIBS = @VULKAN_LIBS@
 WARNING_CFLAGS = @WARNING_CFLAGS@
 WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
 WARNING_OBJCFLAGS = @WARNING_OBJCFLAGS@
@@ -664,6 +676,7 @@
 WAYLAND_LIBS = @WAYLAND_LIBS@
 WEBP_CFLAGS = @WEBP_CFLAGS@
 WEBP_LIBS = @WEBP_LIBS@
+WGET = @WGET@
 WILDMIDI_CFLAGS = @WILDMIDI_CFLAGS@
 WILDMIDI_LIBS = @WILDMIDI_LIBS@
 WINKS_LIBS = @WINKS_LIBS@
@@ -673,6 +686,8 @@
 X11_LIBS = @X11_LIBS@
 X265_CFLAGS = @X265_CFLAGS@
 X265_LIBS = @X265_LIBS@
+XCB_CFLAGS = @XCB_CFLAGS@
+XCB_LIBS = @XCB_LIBS@
 XCOMPOSITE_CFLAGS = @XCOMPOSITE_CFLAGS@
 XCOMPOSITE_LIBS = @XCOMPOSITE_LIBS@
 XGETTEXT = @XGETTEXT@
@@ -710,7 +725,6 @@
 docdir = @docdir@
 dvidir = @dvidir@
 exec_prefix = @exec_prefix@
-gsettingsschemadir = @gsettingsschemadir@
 host = @host@
 host_alias = @host_alias@
 host_cpu = @host_cpu@
diff --git a/tests/examples/opencv/gstfacedetect_test.c b/tests/examples/opencv/gstfacedetect_test.c
index 8ccbda0..9ecf3d0 100644
--- a/tests/examples/opencv/gstfacedetect_test.c
+++ b/tests/examples/opencv/gstfacedetect_test.c
@@ -154,6 +154,8 @@
   g_option_context_add_group (ctx, gst_init_get_option_group ());
   if (!g_option_context_parse (ctx, &argc, &argv, &err)) {
     g_print ("Error initializing: %s\n", err->message);
+    g_option_context_free (ctx);
+    g_clear_error (&err);
     exit (1);
   }
   g_option_context_free (ctx);
diff --git a/tests/examples/playout.c b/tests/examples/playout.c
index c85509a..07048d8 100644
--- a/tests/examples/playout.c
+++ b/tests/examples/playout.c
@@ -680,7 +680,7 @@
   uri = gst_filename_to_uri (item->fn, &err);
   if (err != NULL) {
     GST_WARNING ("Could not convert '%s' to uri: %s", item->fn, err->message);
-    g_error_free (err);
+    g_clear_error (&err);
     return NULL;
   }
 
@@ -1064,6 +1064,8 @@
       g_printerr ("Error initializing: %s\n", err->message);
     else
       g_printerr ("Error initializing: Unknown error!\n");
+    g_option_context_free (ctx);
+    g_clear_error (&err);
     return 1;
   }
 
diff --git a/tests/examples/uvch264/Makefile.in b/tests/examples/uvch264/Makefile.in
index 1bf3a1a..0d61bcc 100644
--- a/tests/examples/uvch264/Makefile.in
+++ b/tests/examples/uvch264/Makefile.in
@@ -117,16 +117,15 @@
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
 	$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
-	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gsettings.m4 \
-	$(top_srcdir)/m4/gst-fionread.m4 $(top_srcdir)/m4/gst-sdl.m4 \
-	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
-	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
-	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libgcrypt.m4 \
-	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
-	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
-	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
-	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
-	$(top_srcdir)/configure.ac
+	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gst-fionread.m4 \
+	$(top_srcdir)/m4/gst-sdl.m4 $(top_srcdir)/m4/iconv.m4 \
+	$(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \
+	$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
+	$(top_srcdir)/m4/libgcrypt.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
+	$(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
@@ -249,6 +248,8 @@
 CLUTTER_X11_LIBS = @CLUTTER_X11_LIBS@
 CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
+CUDA_CFLAGS = @CUDA_CFLAGS@
+CUDA_LIBS = @CUDA_LIBS@
 CURL_CFLAGS = @CURL_CFLAGS@
 CURL_LIBS = @CURL_LIBS@
 CXX = @CXX@
@@ -286,6 +287,8 @@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
+EGL_CFLAGS = @EGL_CFLAGS@
+EGL_LIBS = @EGL_LIBS@
 EGREP = @EGREP@
 ERROR_CFLAGS = @ERROR_CFLAGS@
 ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
@@ -294,7 +297,6 @@
 EXIF_CFLAGS = @EXIF_CFLAGS@
 EXIF_LIBS = @EXIF_LIBS@
 FAAC_LIBS = @FAAC_LIBS@
-FAAD_IS_NEAAC = @FAAD_IS_NEAAC@
 FAAD_LIBS = @FAAD_LIBS@
 FFLAGS = @FFLAGS@
 FGREP = @FGREP@
@@ -313,8 +315,9 @@
 GIO_LIBS = @GIO_LIBS@
 GIO_UNIX_CFLAGS = @GIO_UNIX_CFLAGS@
 GIO_UNIX_LIBS = @GIO_UNIX_LIBS@
+GLES2_CFLAGS = @GLES2_CFLAGS@
+GLES2_LIBS = @GLES2_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
-GLIB_COMPILE_SCHEMAS = @GLIB_COMPILE_SCHEMAS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
@@ -331,16 +334,17 @@
 GMODULE_NO_EXPORT_LIBS = @GMODULE_NO_EXPORT_LIBS@
 GMSGFMT = @GMSGFMT@
 GMSGFMT_015 = @GMSGFMT_015@
+GNUSTL_CFLAGS = @GNUSTL_CFLAGS@
+GNUSTL_LIBS = @GNUSTL_LIBS@
 GRAPHENE_CFLAGS = @GRAPHENE_CFLAGS@
 GRAPHENE_LIBS = @GRAPHENE_LIBS@
 GREP = @GREP@
-GSETTINGS_CFLAGS = @GSETTINGS_CFLAGS@
-GSETTINGS_DISABLE_SCHEMAS_COMPILE = @GSETTINGS_DISABLE_SCHEMAS_COMPILE@
-GSETTINGS_LIBS = @GSETTINGS_LIBS@
 GSM_LIBS = @GSM_LIBS@
 GSTPB_PLUGINS_DIR = @GSTPB_PLUGINS_DIR@
 GSTPB_PREFIX = @GSTPB_PREFIX@
 GST_AGE = @GST_AGE@
+GST_ALLOCATORS_CFLAGS = @GST_ALLOCATORS_CFLAGS@
+GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
 GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
 GST_API_VERSION = @GST_API_VERSION@
 GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
@@ -366,6 +370,8 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PBUTILS_CFLAGS = @GST_PBUTILS_CFLAGS@
+GST_PBUTILS_LIBS = @GST_PBUTILS_LIBS@
 GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BAD_CFLAGS = @GST_PLUGINS_BAD_CFLAGS@
@@ -391,6 +397,8 @@
 GST_PREFIX = @GST_PREFIX@
 GST_REVISION = @GST_REVISION@
 GST_TOOLS_DIR = @GST_TOOLS_DIR@
+GST_VIDEO_CFLAGS = @GST_VIDEO_CFLAGS@
+GST_VIDEO_LIBS = @GST_VIDEO_LIBS@
 GTK3_CFLAGS = @GTK3_CFLAGS@
 GTK3_GL_CFLAGS = @GTK3_GL_CFLAGS@
 GTK3_GL_LIBS = @GTK3_GL_LIBS@
@@ -492,6 +500,7 @@
 LTLIBICONV = @LTLIBICONV@
 LTLIBINTL = @LTLIBINTL@
 LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
 MANIFEST_TOOL = @MANIFEST_TOOL@
@@ -505,8 +514,6 @@
 MODPLUG_LIBS = @MODPLUG_LIBS@
 MPEG2ENC_CFLAGS = @MPEG2ENC_CFLAGS@
 MPEG2ENC_LIBS = @MPEG2ENC_LIBS@
-MPG123_CFLAGS = @MPG123_CFLAGS@
-MPG123_LIBS = @MPG123_LIBS@
 MPLEX_CFLAGS = @MPLEX_CFLAGS@
 MPLEX_LDFLAGS = @MPLEX_LDFLAGS@
 MPLEX_LIBS = @MPLEX_LIBS@
@@ -522,6 +529,8 @@
 NETTLE_LIBS = @NETTLE_LIBS@
 NM = @NM@
 NMEDIT = @NMEDIT@
+NVENCODE_CFLAGS = @NVENCODE_CFLAGS@
+NVENCODE_LIBS = @NVENCODE_LIBS@
 OBJC = @OBJC@
 OBJCDEPMODE = @OBJCDEPMODE@
 OBJCFLAGS = @OBJCFLAGS@
@@ -579,16 +588,18 @@
 PYTHON_PLATFORM = @PYTHON_PLATFORM@
 PYTHON_PREFIX = @PYTHON_PREFIX@
 PYTHON_VERSION = @PYTHON_VERSION@
+QT_ANDROID_CFLAGS = @QT_ANDROID_CFLAGS@
+QT_ANDROID_LIBS = @QT_ANDROID_LIBS@
 QT_CFLAGS = @QT_CFLAGS@
 QT_LIBS = @QT_LIBS@
+QT_MAC_CFLAGS = @QT_MAC_CFLAGS@
+QT_MAC_LIBS = @QT_MAC_LIBS@
 QT_WAYLAND_CFLAGS = @QT_WAYLAND_CFLAGS@
 QT_WAYLAND_LIBS = @QT_WAYLAND_LIBS@
 QT_X11_CFLAGS = @QT_X11_CFLAGS@
 QT_X11_LIBS = @QT_X11_LIBS@
 RANLIB = @RANLIB@
 RCC = @RCC@
-RSVG_2_36_2_CFLAGS = @RSVG_2_36_2_CFLAGS@
-RSVG_2_36_2_LIBS = @RSVG_2_36_2_LIBS@
 RSVG_CFLAGS = @RSVG_CFLAGS@
 RSVG_LIBS = @RSVG_LIBS@
 RTMP_CFLAGS = @RTMP_CFLAGS@
@@ -640,6 +651,7 @@
 VOAACENC_LIBS = @VOAACENC_LIBS@
 VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
 VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VULKAN_LIBS = @VULKAN_LIBS@
 WARNING_CFLAGS = @WARNING_CFLAGS@
 WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
 WARNING_OBJCFLAGS = @WARNING_OBJCFLAGS@
@@ -650,6 +662,7 @@
 WAYLAND_LIBS = @WAYLAND_LIBS@
 WEBP_CFLAGS = @WEBP_CFLAGS@
 WEBP_LIBS = @WEBP_LIBS@
+WGET = @WGET@
 WILDMIDI_CFLAGS = @WILDMIDI_CFLAGS@
 WILDMIDI_LIBS = @WILDMIDI_LIBS@
 WINKS_LIBS = @WINKS_LIBS@
@@ -659,6 +672,8 @@
 X11_LIBS = @X11_LIBS@
 X265_CFLAGS = @X265_CFLAGS@
 X265_LIBS = @X265_LIBS@
+XCB_CFLAGS = @XCB_CFLAGS@
+XCB_LIBS = @XCB_LIBS@
 XCOMPOSITE_CFLAGS = @XCOMPOSITE_CFLAGS@
 XCOMPOSITE_LIBS = @XCOMPOSITE_LIBS@
 XGETTEXT = @XGETTEXT@
@@ -696,7 +711,6 @@
 docdir = @docdir@
 dvidir = @dvidir@
 exec_prefix = @exec_prefix@
-gsettingsschemadir = @gsettingsschemadir@
 host = @host@
 host_alias = @host_alias@
 host_cpu = @host_cpu@
diff --git a/tests/examples/waylandsink/Makefile.am b/tests/examples/waylandsink/Makefile.am
new file mode 100644
index 0000000..f5ba921
--- /dev/null
+++ b/tests/examples/waylandsink/Makefile.am
@@ -0,0 +1,11 @@
+noinst_PROGRAMS = gtkwaylandsink
+
+gtkwaylandsink_SOURCES = main.c
+
+gtkwaylandsink_CFLAGS=-I$(top_srcdir)/gst-libs -I$(top_builddir)/gst-libs \
+	$(GST_PLUGINS_BASE_CFLAGS) $(GST_CFLAGS) $(GTK3_CFLAGS)
+gtkwaylandsink_LDADD=$(GTK3_LIBS) $(GST_PLUGINS_BASE_LIBS) $(GST_LIBS) \
+	-lgstvideo-$(GST_API_VERSION) \
+	$(top_builddir)/gst-libs/gst/wayland/libgstwayland-$(GST_API_VERSION).la
+
+EXTRA_DIST = window.ui
diff --git a/gst/liveadder/Makefile.in b/tests/examples/waylandsink/Makefile.in
similarity index 80%
copy from gst/liveadder/Makefile.in
copy to tests/examples/waylandsink/Makefile.in
index ba9e5a2..e9011c6 100644
--- a/gst/liveadder/Makefile.in
+++ b/tests/examples/waylandsink/Makefile.in
@@ -14,7 +14,6 @@
 
 @SET_MAKE@
 
-
 VPATH = @srcdir@
 am__is_gnu_make = { \
   if test -z '$(MAKELEVEL)'; then \
@@ -90,7 +89,8 @@
 build_triplet = @build@
 host_triplet = @host@
 target_triplet = @target@
-subdir = gst/liveadder
+noinst_PROGRAMS = gtkwaylandsink$(EXEEXT)
+subdir = tests/examples/waylandsink
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
 am__aclocal_m4_deps = $(top_srcdir)/common/m4/as-ac-expand.m4 \
 	$(top_srcdir)/common/m4/as-auto-alt.m4 \
@@ -116,66 +116,37 @@
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
 	$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
-	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gsettings.m4 \
-	$(top_srcdir)/m4/gst-fionread.m4 $(top_srcdir)/m4/gst-sdl.m4 \
-	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
-	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
-	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libgcrypt.m4 \
-	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
-	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
-	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
-	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
-	$(top_srcdir)/configure.ac
+	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gst-fionread.m4 \
+	$(top_srcdir)/m4/gst-sdl.m4 $(top_srcdir)/m4/iconv.m4 \
+	$(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \
+	$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
+	$(top_srcdir)/m4/libgcrypt.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
+	$(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
-DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \
-	$(am__DIST_COMMON)
+DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
 mkinstalldirs = $(install_sh) -d
 CONFIG_HEADER = $(top_builddir)/config.h
 CONFIG_CLEAN_FILES =
 CONFIG_CLEAN_VPATH_FILES =
-am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
-am__vpath_adj = case $$p in \
-    $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
-    *) f=$$p;; \
-  esac;
-am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
-am__install_max = 40
-am__nobase_strip_setup = \
-  srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
-am__nobase_strip = \
-  for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
-am__nobase_list = $(am__nobase_strip_setup); \
-  for p in $$list; do echo "$$p $$p"; done | \
-  sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
-  $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
-    if (++n[$$2] == $(am__install_max)) \
-      { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
-    END { for (dir in files) print dir, files[dir] }'
-am__base_list = \
-  sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
-  sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
-am__uninstall_files_from_dir = { \
-  test -z "$$files" \
-    || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
-    || { echo " ( cd '$$dir' && rm -f" $$files ")"; \
-         $(am__cd) "$$dir" && rm -f $$files; }; \
-  }
-am__installdirs = "$(DESTDIR)$(plugindir)"
-LTLIBRARIES = $(plugin_LTLIBRARIES)
+PROGRAMS = $(noinst_PROGRAMS)
+am_gtkwaylandsink_OBJECTS = gtkwaylandsink-main.$(OBJEXT)
+gtkwaylandsink_OBJECTS = $(am_gtkwaylandsink_OBJECTS)
 am__DEPENDENCIES_1 =
-libgstliveadder_la_DEPENDENCIES = $(am__DEPENDENCIES_1) \
-	$(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1)
-am_libgstliveadder_la_OBJECTS = libgstliveadder_la-liveadder.lo
-libgstliveadder_la_OBJECTS = $(am_libgstliveadder_la_OBJECTS)
+gtkwaylandsink_DEPENDENCIES = $(am__DEPENDENCIES_1) \
+	$(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
+	$(top_builddir)/gst-libs/gst/wayland/libgstwayland-$(GST_API_VERSION).la
 AM_V_lt = $(am__v_lt_@AM_V@)
 am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
 am__v_lt_0 = --silent
 am__v_lt_1 = 
-libgstliveadder_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
-	$(libgstliveadder_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link \
-	$(CCLD) $(libgstliveadder_la_CFLAGS) $(CFLAGS) \
-	$(libgstliveadder_la_LDFLAGS) $(LDFLAGS) -o $@
+gtkwaylandsink_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
+	$(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
+	$(gtkwaylandsink_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o \
+	$@
 AM_V_P = $(am__v_P_@AM_V@)
 am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
 am__v_P_0 = false
@@ -210,14 +181,13 @@
 am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@)
 am__v_CCLD_0 = @echo "  CCLD    " $@;
 am__v_CCLD_1 = 
-SOURCES = $(libgstliveadder_la_SOURCES)
-DIST_SOURCES = $(libgstliveadder_la_SOURCES)
+SOURCES = $(gtkwaylandsink_SOURCES)
+DIST_SOURCES = $(gtkwaylandsink_SOURCES)
 am__can_run_installinfo = \
   case $$AM_UPDATE_INFO_DIR in \
     n|no|NO) false;; \
     *) (install-info --version) >/dev/null 2>&1;; \
   esac
-HEADERS = $(noinst_HEADERS)
 am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
 # Read a list of newline-separated strings from the standard input,
 # and print each of them once, without duplicates.  Input order is
@@ -274,6 +244,8 @@
 CLUTTER_X11_LIBS = @CLUTTER_X11_LIBS@
 CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
+CUDA_CFLAGS = @CUDA_CFLAGS@
+CUDA_LIBS = @CUDA_LIBS@
 CURL_CFLAGS = @CURL_CFLAGS@
 CURL_LIBS = @CURL_LIBS@
 CXX = @CXX@
@@ -311,6 +283,8 @@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
+EGL_CFLAGS = @EGL_CFLAGS@
+EGL_LIBS = @EGL_LIBS@
 EGREP = @EGREP@
 ERROR_CFLAGS = @ERROR_CFLAGS@
 ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
@@ -319,7 +293,6 @@
 EXIF_CFLAGS = @EXIF_CFLAGS@
 EXIF_LIBS = @EXIF_LIBS@
 FAAC_LIBS = @FAAC_LIBS@
-FAAD_IS_NEAAC = @FAAD_IS_NEAAC@
 FAAD_LIBS = @FAAD_LIBS@
 FFLAGS = @FFLAGS@
 FGREP = @FGREP@
@@ -338,8 +311,9 @@
 GIO_LIBS = @GIO_LIBS@
 GIO_UNIX_CFLAGS = @GIO_UNIX_CFLAGS@
 GIO_UNIX_LIBS = @GIO_UNIX_LIBS@
+GLES2_CFLAGS = @GLES2_CFLAGS@
+GLES2_LIBS = @GLES2_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
-GLIB_COMPILE_SCHEMAS = @GLIB_COMPILE_SCHEMAS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
@@ -356,16 +330,17 @@
 GMODULE_NO_EXPORT_LIBS = @GMODULE_NO_EXPORT_LIBS@
 GMSGFMT = @GMSGFMT@
 GMSGFMT_015 = @GMSGFMT_015@
+GNUSTL_CFLAGS = @GNUSTL_CFLAGS@
+GNUSTL_LIBS = @GNUSTL_LIBS@
 GRAPHENE_CFLAGS = @GRAPHENE_CFLAGS@
 GRAPHENE_LIBS = @GRAPHENE_LIBS@
 GREP = @GREP@
-GSETTINGS_CFLAGS = @GSETTINGS_CFLAGS@
-GSETTINGS_DISABLE_SCHEMAS_COMPILE = @GSETTINGS_DISABLE_SCHEMAS_COMPILE@
-GSETTINGS_LIBS = @GSETTINGS_LIBS@
 GSM_LIBS = @GSM_LIBS@
 GSTPB_PLUGINS_DIR = @GSTPB_PLUGINS_DIR@
 GSTPB_PREFIX = @GSTPB_PREFIX@
 GST_AGE = @GST_AGE@
+GST_ALLOCATORS_CFLAGS = @GST_ALLOCATORS_CFLAGS@
+GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
 GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
 GST_API_VERSION = @GST_API_VERSION@
 GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
@@ -391,6 +366,8 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PBUTILS_CFLAGS = @GST_PBUTILS_CFLAGS@
+GST_PBUTILS_LIBS = @GST_PBUTILS_LIBS@
 GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BAD_CFLAGS = @GST_PLUGINS_BAD_CFLAGS@
@@ -416,6 +393,8 @@
 GST_PREFIX = @GST_PREFIX@
 GST_REVISION = @GST_REVISION@
 GST_TOOLS_DIR = @GST_TOOLS_DIR@
+GST_VIDEO_CFLAGS = @GST_VIDEO_CFLAGS@
+GST_VIDEO_LIBS = @GST_VIDEO_LIBS@
 GTK3_CFLAGS = @GTK3_CFLAGS@
 GTK3_GL_CFLAGS = @GTK3_GL_CFLAGS@
 GTK3_GL_LIBS = @GTK3_GL_LIBS@
@@ -517,6 +496,7 @@
 LTLIBICONV = @LTLIBICONV@
 LTLIBINTL = @LTLIBINTL@
 LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
 MANIFEST_TOOL = @MANIFEST_TOOL@
@@ -530,8 +510,6 @@
 MODPLUG_LIBS = @MODPLUG_LIBS@
 MPEG2ENC_CFLAGS = @MPEG2ENC_CFLAGS@
 MPEG2ENC_LIBS = @MPEG2ENC_LIBS@
-MPG123_CFLAGS = @MPG123_CFLAGS@
-MPG123_LIBS = @MPG123_LIBS@
 MPLEX_CFLAGS = @MPLEX_CFLAGS@
 MPLEX_LDFLAGS = @MPLEX_LDFLAGS@
 MPLEX_LIBS = @MPLEX_LIBS@
@@ -547,6 +525,8 @@
 NETTLE_LIBS = @NETTLE_LIBS@
 NM = @NM@
 NMEDIT = @NMEDIT@
+NVENCODE_CFLAGS = @NVENCODE_CFLAGS@
+NVENCODE_LIBS = @NVENCODE_LIBS@
 OBJC = @OBJC@
 OBJCDEPMODE = @OBJCDEPMODE@
 OBJCFLAGS = @OBJCFLAGS@
@@ -604,16 +584,18 @@
 PYTHON_PLATFORM = @PYTHON_PLATFORM@
 PYTHON_PREFIX = @PYTHON_PREFIX@
 PYTHON_VERSION = @PYTHON_VERSION@
+QT_ANDROID_CFLAGS = @QT_ANDROID_CFLAGS@
+QT_ANDROID_LIBS = @QT_ANDROID_LIBS@
 QT_CFLAGS = @QT_CFLAGS@
 QT_LIBS = @QT_LIBS@
+QT_MAC_CFLAGS = @QT_MAC_CFLAGS@
+QT_MAC_LIBS = @QT_MAC_LIBS@
 QT_WAYLAND_CFLAGS = @QT_WAYLAND_CFLAGS@
 QT_WAYLAND_LIBS = @QT_WAYLAND_LIBS@
 QT_X11_CFLAGS = @QT_X11_CFLAGS@
 QT_X11_LIBS = @QT_X11_LIBS@
 RANLIB = @RANLIB@
 RCC = @RCC@
-RSVG_2_36_2_CFLAGS = @RSVG_2_36_2_CFLAGS@
-RSVG_2_36_2_LIBS = @RSVG_2_36_2_LIBS@
 RSVG_CFLAGS = @RSVG_CFLAGS@
 RSVG_LIBS = @RSVG_LIBS@
 RTMP_CFLAGS = @RTMP_CFLAGS@
@@ -665,6 +647,7 @@
 VOAACENC_LIBS = @VOAACENC_LIBS@
 VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
 VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VULKAN_LIBS = @VULKAN_LIBS@
 WARNING_CFLAGS = @WARNING_CFLAGS@
 WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
 WARNING_OBJCFLAGS = @WARNING_OBJCFLAGS@
@@ -675,6 +658,7 @@
 WAYLAND_LIBS = @WAYLAND_LIBS@
 WEBP_CFLAGS = @WEBP_CFLAGS@
 WEBP_LIBS = @WEBP_LIBS@
+WGET = @WGET@
 WILDMIDI_CFLAGS = @WILDMIDI_CFLAGS@
 WILDMIDI_LIBS = @WILDMIDI_LIBS@
 WINKS_LIBS = @WINKS_LIBS@
@@ -684,6 +668,8 @@
 X11_LIBS = @X11_LIBS@
 X265_CFLAGS = @X265_CFLAGS@
 X265_LIBS = @X265_LIBS@
+XCB_CFLAGS = @XCB_CFLAGS@
+XCB_LIBS = @XCB_LIBS@
 XCOMPOSITE_CFLAGS = @XCOMPOSITE_CFLAGS@
 XCOMPOSITE_LIBS = @XCOMPOSITE_LIBS@
 XGETTEXT = @XGETTEXT@
@@ -721,7 +707,6 @@
 docdir = @docdir@
 dvidir = @dvidir@
 exec_prefix = @exec_prefix@
-gsettingsschemadir = @gsettingsschemadir@
 host = @host@
 host_alias = @host_alias@
 host_cpu = @host_cpu@
@@ -761,16 +746,15 @@
 top_builddir = @top_builddir@
 top_srcdir = @top_srcdir@
 wayland_scanner = @wayland_scanner@
-plugin_LTLIBRARIES = libgstliveadder.la
-libgstliveadder_la_SOURCES = liveadder.c
-libgstliveadder_la_CFLAGS = $(GST_PLUGINS_BAD_CFLAGS) $(GST_PLUGINS_BASE_CFLAGS) $(GST_CFLAGS)
-libgstliveadder_la_LIBADD = \
-	$(GST_PLUGINS_BASE_LIBS) -lgstaudio-@GST_API_VERSION@ \
-	$(GST_BASE_LIBS) $(GST_LIBS)
+gtkwaylandsink_SOURCES = main.c
+gtkwaylandsink_CFLAGS = -I$(top_srcdir)/gst-libs -I$(top_builddir)/gst-libs \
+	$(GST_PLUGINS_BASE_CFLAGS) $(GST_CFLAGS) $(GTK3_CFLAGS)
 
-libgstliveadder_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS)
-libgstliveadder_la_LIBTOOLFLAGS = $(GST_PLUGIN_LIBTOOLFLAGS)
-noinst_HEADERS = liveadder.h
+gtkwaylandsink_LDADD = $(GTK3_LIBS) $(GST_PLUGINS_BASE_LIBS) $(GST_LIBS) \
+	-lgstvideo-$(GST_API_VERSION) \
+	$(top_builddir)/gst-libs/gst/wayland/libgstwayland-$(GST_API_VERSION).la
+
+EXTRA_DIST = window.ui
 all: all-am
 
 .SUFFIXES:
@@ -784,9 +768,9 @@
 	      exit 1;; \
 	  esac; \
 	done; \
-	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu gst/liveadder/Makefile'; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu tests/examples/waylandsink/Makefile'; \
 	$(am__cd) $(top_srcdir) && \
-	  $(AUTOMAKE) --gnu gst/liveadder/Makefile
+	  $(AUTOMAKE) --gnu tests/examples/waylandsink/Makefile
 Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
 	@case '$?' in \
 	  *config.status*) \
@@ -805,43 +789,18 @@
 	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
 $(am__aclocal_m4_deps):
 
-install-pluginLTLIBRARIES: $(plugin_LTLIBRARIES)
-	@$(NORMAL_INSTALL)
-	@list='$(plugin_LTLIBRARIES)'; test -n "$(plugindir)" || list=; \
-	list2=; for p in $$list; do \
-	  if test -f $$p; then \
-	    list2="$$list2 $$p"; \
-	  else :; fi; \
-	done; \
-	test -z "$$list2" || { \
-	  echo " $(MKDIR_P) '$(DESTDIR)$(plugindir)'"; \
-	  $(MKDIR_P) "$(DESTDIR)$(plugindir)" || exit 1; \
-	  echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(plugindir)'"; \
-	  $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(plugindir)"; \
-	}
+clean-noinstPROGRAMS:
+	@list='$(noinst_PROGRAMS)'; test -n "$$list" || exit 0; \
+	echo " rm -f" $$list; \
+	rm -f $$list || exit $$?; \
+	test -n "$(EXEEXT)" || exit 0; \
+	list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
+	echo " rm -f" $$list; \
+	rm -f $$list
 
-uninstall-pluginLTLIBRARIES:
-	@$(NORMAL_UNINSTALL)
-	@list='$(plugin_LTLIBRARIES)'; test -n "$(plugindir)" || list=; \
-	for p in $$list; do \
-	  $(am__strip_dir) \
-	  echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(plugindir)/$$f'"; \
-	  $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(plugindir)/$$f"; \
-	done
-
-clean-pluginLTLIBRARIES:
-	-test -z "$(plugin_LTLIBRARIES)" || rm -f $(plugin_LTLIBRARIES)
-	@list='$(plugin_LTLIBRARIES)'; \
-	locs=`for p in $$list; do echo $$p; done | \
-	      sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \
-	      sort -u`; \
-	test -z "$$locs" || { \
-	  echo rm -f $${locs}; \
-	  rm -f $${locs}; \
-	}
-
-libgstliveadder.la: $(libgstliveadder_la_OBJECTS) $(libgstliveadder_la_DEPENDENCIES) $(EXTRA_libgstliveadder_la_DEPENDENCIES) 
-	$(AM_V_CCLD)$(libgstliveadder_la_LINK) -rpath $(plugindir) $(libgstliveadder_la_OBJECTS) $(libgstliveadder_la_LIBADD) $(LIBS)
+gtkwaylandsink$(EXEEXT): $(gtkwaylandsink_OBJECTS) $(gtkwaylandsink_DEPENDENCIES) $(EXTRA_gtkwaylandsink_DEPENDENCIES) 
+	@rm -f gtkwaylandsink$(EXEEXT)
+	$(AM_V_CCLD)$(gtkwaylandsink_LINK) $(gtkwaylandsink_OBJECTS) $(gtkwaylandsink_LDADD) $(LIBS)
 
 mostlyclean-compile:
 	-rm -f *.$(OBJEXT)
@@ -849,7 +808,7 @@
 distclean-compile:
 	-rm -f *.tab.c
 
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstliveadder_la-liveadder.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gtkwaylandsink-main.Po@am__quote@
 
 .c.o:
 @am__fastdepCC_TRUE@	$(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\
@@ -875,12 +834,19 @@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $<
 
-libgstliveadder_la-liveadder.lo: liveadder.c
-@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstliveadder_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstliveadder_la_CFLAGS) $(CFLAGS) -MT libgstliveadder_la-liveadder.lo -MD -MP -MF $(DEPDIR)/libgstliveadder_la-liveadder.Tpo -c -o libgstliveadder_la-liveadder.lo `test -f 'liveadder.c' || echo '$(srcdir)/'`liveadder.c
-@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstliveadder_la-liveadder.Tpo $(DEPDIR)/libgstliveadder_la-liveadder.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='liveadder.c' object='libgstliveadder_la-liveadder.lo' libtool=yes @AMDEPBACKSLASH@
+gtkwaylandsink-main.o: main.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gtkwaylandsink_CFLAGS) $(CFLAGS) -MT gtkwaylandsink-main.o -MD -MP -MF $(DEPDIR)/gtkwaylandsink-main.Tpo -c -o gtkwaylandsink-main.o `test -f 'main.c' || echo '$(srcdir)/'`main.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/gtkwaylandsink-main.Tpo $(DEPDIR)/gtkwaylandsink-main.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='main.c' object='gtkwaylandsink-main.o' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstliveadder_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstliveadder_la_CFLAGS) $(CFLAGS) -c -o libgstliveadder_la-liveadder.lo `test -f 'liveadder.c' || echo '$(srcdir)/'`liveadder.c
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gtkwaylandsink_CFLAGS) $(CFLAGS) -c -o gtkwaylandsink-main.o `test -f 'main.c' || echo '$(srcdir)/'`main.c
+
+gtkwaylandsink-main.obj: main.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gtkwaylandsink_CFLAGS) $(CFLAGS) -MT gtkwaylandsink-main.obj -MD -MP -MF $(DEPDIR)/gtkwaylandsink-main.Tpo -c -o gtkwaylandsink-main.obj `if test -f 'main.c'; then $(CYGPATH_W) 'main.c'; else $(CYGPATH_W) '$(srcdir)/main.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/gtkwaylandsink-main.Tpo $(DEPDIR)/gtkwaylandsink-main.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='main.c' object='gtkwaylandsink-main.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gtkwaylandsink_CFLAGS) $(CFLAGS) -c -o gtkwaylandsink-main.obj `if test -f 'main.c'; then $(CYGPATH_W) 'main.c'; else $(CYGPATH_W) '$(srcdir)/main.c'; fi`
 
 mostlyclean-libtool:
 	-rm -f *.lo
@@ -972,11 +938,8 @@
 	done
 check-am: all-am
 check: check-am
-all-am: Makefile $(LTLIBRARIES) $(HEADERS)
+all-am: Makefile $(PROGRAMS)
 installdirs:
-	for dir in "$(DESTDIR)$(plugindir)"; do \
-	  test -z "$$dir" || $(MKDIR_P) "$$dir"; \
-	done
 install: install-am
 install-exec: install-exec-am
 install-data: install-data-am
@@ -1009,7 +972,7 @@
 	@echo "it deletes files that may require special tools to rebuild."
 clean: clean-am
 
-clean-am: clean-generic clean-libtool clean-pluginLTLIBRARIES \
+clean-am: clean-generic clean-libtool clean-noinstPROGRAMS \
 	mostlyclean-am
 
 distclean: distclean-am
@@ -1030,7 +993,7 @@
 
 info-am:
 
-install-data-am: install-pluginLTLIBRARIES
+install-data-am:
 
 install-dvi: install-dvi-am
 
@@ -1076,24 +1039,23 @@
 
 ps-am:
 
-uninstall-am: uninstall-pluginLTLIBRARIES
+uninstall-am:
 
 .MAKE: install-am install-strip
 
 .PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \
-	clean-libtool clean-pluginLTLIBRARIES cscopelist-am ctags \
+	clean-libtool clean-noinstPROGRAMS cscopelist-am ctags \
 	ctags-am distclean distclean-compile distclean-generic \
 	distclean-libtool distclean-tags distdir dvi dvi-am html \
 	html-am info info-am install install-am install-data \
 	install-data-am install-dvi install-dvi-am install-exec \
 	install-exec-am install-html install-html-am install-info \
 	install-info-am install-man install-pdf install-pdf-am \
-	install-pluginLTLIBRARIES install-ps install-ps-am \
-	install-strip installcheck installcheck-am installdirs \
-	maintainer-clean maintainer-clean-generic mostlyclean \
-	mostlyclean-compile mostlyclean-generic mostlyclean-libtool \
-	pdf pdf-am ps ps-am tags tags-am uninstall uninstall-am \
-	uninstall-pluginLTLIBRARIES
+	install-ps install-ps-am install-strip installcheck \
+	installcheck-am installdirs maintainer-clean \
+	maintainer-clean-generic mostlyclean mostlyclean-compile \
+	mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+	tags tags-am uninstall uninstall-am
 
 .PRECIOUS: Makefile
 
diff --git a/tests/examples/waylandsink/main.c b/tests/examples/waylandsink/main.c
new file mode 100644
index 0000000..2f9bf89
--- /dev/null
+++ b/tests/examples/waylandsink/main.c
@@ -0,0 +1,279 @@
+/*
+ * Copyright (C) 2014-2015 Collabora Ltd.
+ *   @author George Kiagiadakis <george.kiagiadakis@collabora.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#include <gst/gst.h>
+#include <gtk/gtk.h>
+#include <gdk/gdk.h>
+
+#ifdef GDK_WINDOWING_WAYLAND
+#include <gdk/gdkwayland.h>
+#else
+#error "Wayland is not supported in GTK+"
+#endif
+
+#include <gst/video/videooverlay.h>
+#include <gst/wayland/wayland.h>
+
+
+static gboolean live = FALSE;
+
+static GOptionEntry entries[] = {
+  {"live", 'l', 0, G_OPTION_ARG_NONE, &live, "Use a live source", NULL},
+  {NULL}
+};
+
+typedef struct
+{
+  GtkWidget *app_widget;
+  GtkWidget *video_widget;
+
+  GstElement *pipeline;
+  GstVideoOverlay *overlay;
+
+  gchar **argv;
+  gint current_uri;             /* index for argv */
+} DemoApp;
+
+static void
+on_about_to_finish (GstElement * playbin, DemoApp * d)
+{
+  if (d->argv[++d->current_uri] == NULL)
+    d->current_uri = 1;
+
+  g_print ("Now playing %s\n", d->argv[d->current_uri]);
+  g_object_set (playbin, "uri", d->argv[d->current_uri], NULL);
+}
+
+static void
+error_cb (GstBus * bus, GstMessage * msg, gpointer user_data)
+{
+  DemoApp *d = user_data;
+  gchar *debug = NULL;
+  GError *err = NULL;
+
+  gst_message_parse_error (msg, &err, &debug);
+
+  g_print ("Error: %s\n", err->message);
+  g_error_free (err);
+
+  if (debug) {
+    g_print ("Debug details: %s\n", debug);
+    g_free (debug);
+  }
+
+  gst_element_set_state (d->pipeline, GST_STATE_NULL);
+}
+
+static GstBusSyncReply
+bus_sync_handler (GstBus * bus, GstMessage * message, gpointer user_data)
+{
+  DemoApp *d = user_data;
+
+  if (gst_is_wayland_display_handle_need_context_message (message)) {
+    GstContext *context;
+    GdkDisplay *display;
+    struct wl_display *display_handle;
+
+    display = gtk_widget_get_display (d->video_widget);
+    display_handle = gdk_wayland_display_get_wl_display (display);
+    context = gst_wayland_display_handle_context_new (display_handle);
+    gst_element_set_context (GST_ELEMENT (GST_MESSAGE_SRC (message)), context);
+
+    goto drop;
+  } else if (gst_is_video_overlay_prepare_window_handle_message (message)) {
+    GtkAllocation allocation;
+    GdkWindow *window;
+    struct wl_surface *window_handle;
+
+    /* GST_MESSAGE_SRC (message) will be the overlay object that we have to
+     * use. This may be waylandsink, but it may also be playbin. In the latter
+     * case, we must make sure to use playbin instead of waylandsink, because
+     * playbin resets the window handle and render_rectangle after restarting
+     * playback and the actual window size is lost */
+    d->overlay = GST_VIDEO_OVERLAY (GST_MESSAGE_SRC (message));
+
+    gtk_widget_get_allocation (d->video_widget, &allocation);
+    window = gtk_widget_get_window (d->video_widget);
+    window_handle = gdk_wayland_window_get_wl_surface (window);
+
+    g_print ("setting window handle and size (%d x %d)\n",
+        allocation.width, allocation.height);
+
+    gst_video_overlay_set_window_handle (d->overlay, (guintptr) window_handle);
+    gst_video_overlay_set_render_rectangle (d->overlay, allocation.x,
+        allocation.y, allocation.width, allocation.height);
+
+    goto drop;
+  }
+
+  return GST_BUS_PASS;
+
+drop:
+  gst_message_unref (message);
+  return GST_BUS_DROP;
+}
+
+/* We use the "draw" callback to change the size of the sink
+ * because the "configure-event" is only sent to top-level widgets. */
+static gboolean
+video_widget_draw_cb (GtkWidget * widget, cairo_t * cr, gpointer user_data)
+{
+  DemoApp *d = user_data;
+  GtkAllocation allocation;
+
+  gtk_widget_get_allocation (widget, &allocation);
+
+  g_print ("draw_cb x %d, y %d, w %d, h %d\n",
+      allocation.x, allocation.y, allocation.width, allocation.height);
+
+  if (d->overlay) {
+    gst_video_overlay_set_render_rectangle (d->overlay, allocation.x,
+        allocation.y, allocation.width, allocation.height);
+  }
+
+  /* There is no need to call gst_video_overlay_expose().
+   * The wayland compositor can always re-draw the window
+   * based on its last contents if necessary */
+
+  return FALSE;
+}
+
+static void
+playing_clicked_cb (GtkButton * button, DemoApp * d)
+{
+  gst_element_set_state (d->pipeline, GST_STATE_PLAYING);
+}
+
+static void
+paused_clicked_cb (GtkButton * button, DemoApp * d)
+{
+  gst_element_set_state (d->pipeline, GST_STATE_PAUSED);
+}
+
+static void
+ready_clicked_cb (GtkButton * button, DemoApp * d)
+{
+  gst_element_set_state (d->pipeline, GST_STATE_READY);
+}
+
+static void
+null_clicked_cb (GtkButton * button, DemoApp * d)
+{
+  gst_element_set_state (d->pipeline, GST_STATE_NULL);
+}
+
+static void
+build_window (DemoApp * d)
+{
+  GtkBuilder *builder;
+  GtkWidget *button;
+  GError *error = NULL;
+
+  builder = gtk_builder_new ();
+  if (!gtk_builder_add_from_file (builder, "window.ui", &error)) {
+    g_error ("Failed to load window.ui: %s", error->message);
+    g_error_free (error);
+    goto exit;
+  }
+
+  d->app_widget = GTK_WIDGET (gtk_builder_get_object (builder, "window"));
+  g_object_ref (d->app_widget);
+  g_signal_connect (d->app_widget, "destroy", G_CALLBACK (gtk_main_quit), NULL);
+
+  d->video_widget = GTK_WIDGET (gtk_builder_get_object (builder, "videoarea"));
+  g_signal_connect (d->video_widget, "draw",
+      G_CALLBACK (video_widget_draw_cb), d);
+
+  button = GTK_WIDGET (gtk_builder_get_object (builder, "button_playing"));
+  g_signal_connect (button, "clicked", G_CALLBACK (playing_clicked_cb), d);
+
+  button = GTK_WIDGET (gtk_builder_get_object (builder, "button_paused"));
+  g_signal_connect (button, "clicked", G_CALLBACK (paused_clicked_cb), d);
+
+  button = GTK_WIDGET (gtk_builder_get_object (builder, "button_ready"));
+  g_signal_connect (button, "clicked", G_CALLBACK (ready_clicked_cb), d);
+
+  button = GTK_WIDGET (gtk_builder_get_object (builder, "button_null"));
+  g_signal_connect (button, "clicked", G_CALLBACK (null_clicked_cb), d);
+
+  gtk_widget_show_all (d->app_widget);
+
+exit:
+  g_object_unref (builder);
+}
+
+int
+main (int argc, char **argv)
+{
+  DemoApp *d;
+  GOptionContext *context;
+  GstBus *bus;
+  GError *error = NULL;
+
+  gtk_init (&argc, &argv);
+  gst_init (&argc, &argv);
+
+  context = g_option_context_new ("- waylandsink gtk demo");
+  g_option_context_add_main_entries (context, entries, NULL);
+  if (!g_option_context_parse (context, &argc, &argv, &error)) {
+    g_printerr ("option parsing failed: %s\n", error->message);
+    return 1;
+  }
+
+  d = g_slice_new0 (DemoApp);
+  build_window (d);
+
+  if (argc > 1) {
+    d->argv = argv;
+    d->current_uri = 1;
+
+    d->pipeline = gst_parse_launch ("playbin video-sink=waylandsink", NULL);
+    g_object_set (d->pipeline, "uri", argv[d->current_uri], NULL);
+
+    /* enable looping */
+    g_signal_connect (d->pipeline, "about-to-finish",
+        G_CALLBACK (on_about_to_finish), d);
+  } else {
+    if (live) {
+      d->pipeline = gst_parse_launch ("videotestsrc pattern=18 "
+          "background-color=0x000062FF is-live=true ! waylandsink", NULL);
+    } else {
+      d->pipeline = gst_parse_launch ("videotestsrc pattern=18 "
+          "background-color=0x000062FF ! waylandsink", NULL);
+    }
+  }
+
+  bus = gst_pipeline_get_bus (GST_PIPELINE (d->pipeline));
+  gst_bus_add_signal_watch (bus);
+  g_signal_connect (bus, "message::error", G_CALLBACK (error_cb), d);
+  gst_bus_set_sync_handler (bus, bus_sync_handler, d, NULL);
+  gst_object_unref (bus);
+
+  gst_element_set_state (d->pipeline, GST_STATE_PLAYING);
+
+  gtk_main ();
+
+  gst_element_set_state (d->pipeline, GST_STATE_NULL);
+  gst_object_unref (d->pipeline);
+  g_object_unref (d->app_widget);
+  g_slice_free (DemoApp, d);
+
+  return 0;
+}
diff --git a/tests/examples/waylandsink/window.ui b/tests/examples/waylandsink/window.ui
new file mode 100644
index 0000000..ce6cf82
--- /dev/null
+++ b/tests/examples/waylandsink/window.ui
@@ -0,0 +1,99 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Generated with glade 3.18.2 -->
+<interface>
+  <requires lib="gtk+" version="3.0"/>
+  <object class="GtkWindow" id="window">
+    <property name="can_focus">False</property>
+    <property name="title" translatable="yes">GStreamer Wayland GTK Demo</property>
+    <child>
+      <object class="GtkBox" id="box">
+        <property name="visible">True</property>
+        <property name="can_focus">False</property>
+        <property name="orientation">vertical</property>
+        <child>
+          <object class="GtkEventBox" id="videoarea">
+            <property name="width_request">400</property>
+            <property name="height_request">300</property>
+            <property name="visible">True</property>
+            <property name="app_paintable">True</property>
+            <property name="can_focus">False</property>
+            <property name="double_buffered">False</property>
+            <property name="vexpand">True</property>
+            <child>
+              <placeholder/>
+            </child>
+          </object>
+          <packing>
+            <property name="expand">False</property>
+            <property name="fill">True</property>
+            <property name="position">0</property>
+          </packing>
+        </child>
+        <child>
+          <object class="GtkButtonBox" id="buttonbox">
+            <property name="visible">True</property>
+            <property name="can_focus">False</property>
+            <property name="layout_style">center</property>
+            <child>
+              <object class="GtkButton" id="button_playing">
+                <property name="label" translatable="yes">PLAYING</property>
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="receives_default">True</property>
+              </object>
+              <packing>
+                <property name="expand">False</property>
+                <property name="fill">True</property>
+                <property name="position">0</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkButton" id="button_paused">
+                <property name="label" translatable="yes">PAUSED</property>
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="receives_default">True</property>
+              </object>
+              <packing>
+                <property name="expand">False</property>
+                <property name="fill">True</property>
+                <property name="position">1</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkButton" id="button_ready">
+                <property name="label" translatable="yes">READY</property>
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="receives_default">True</property>
+              </object>
+              <packing>
+                <property name="expand">False</property>
+                <property name="fill">True</property>
+                <property name="position">2</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkButton" id="button_null">
+                <property name="label" translatable="yes">NULL</property>
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="receives_default">True</property>
+              </object>
+              <packing>
+                <property name="expand">False</property>
+                <property name="fill">True</property>
+                <property name="position">3</property>
+              </packing>
+            </child>
+          </object>
+          <packing>
+            <property name="expand">False</property>
+            <property name="fill">True</property>
+            <property name="position">1</property>
+          </packing>
+        </child>
+      </object>
+    </child>
+  </object>
+</interface>
diff --git a/tests/files/Makefile.am b/tests/files/Makefile.am
index 2807612..359d601 100644
--- a/tests/files/Makefile.am
+++ b/tests/files/Makefile.am
@@ -1,7 +1,4 @@
 EXTRA_DIST = \
 	barcode.png \
 	blue-square.png \
-	cbr_stream.mp3 \
-	s16be-id3v2.aiff \
-	stream.mp2 \
-	vbr_stream.mp3
+	s16be-id3v2.aiff
diff --git a/tests/files/Makefile.in b/tests/files/Makefile.in
index 7550485..f0ba64b 100644
--- a/tests/files/Makefile.in
+++ b/tests/files/Makefile.in
@@ -114,16 +114,15 @@
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
 	$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
-	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gsettings.m4 \
-	$(top_srcdir)/m4/gst-fionread.m4 $(top_srcdir)/m4/gst-sdl.m4 \
-	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
-	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
-	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libgcrypt.m4 \
-	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
-	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
-	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
-	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
-	$(top_srcdir)/configure.ac
+	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gst-fionread.m4 \
+	$(top_srcdir)/m4/gst-sdl.m4 $(top_srcdir)/m4/iconv.m4 \
+	$(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \
+	$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
+	$(top_srcdir)/m4/libgcrypt.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
+	$(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
@@ -188,6 +187,8 @@
 CLUTTER_X11_LIBS = @CLUTTER_X11_LIBS@
 CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
+CUDA_CFLAGS = @CUDA_CFLAGS@
+CUDA_LIBS = @CUDA_LIBS@
 CURL_CFLAGS = @CURL_CFLAGS@
 CURL_LIBS = @CURL_LIBS@
 CXX = @CXX@
@@ -225,6 +226,8 @@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
+EGL_CFLAGS = @EGL_CFLAGS@
+EGL_LIBS = @EGL_LIBS@
 EGREP = @EGREP@
 ERROR_CFLAGS = @ERROR_CFLAGS@
 ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
@@ -233,7 +236,6 @@
 EXIF_CFLAGS = @EXIF_CFLAGS@
 EXIF_LIBS = @EXIF_LIBS@
 FAAC_LIBS = @FAAC_LIBS@
-FAAD_IS_NEAAC = @FAAD_IS_NEAAC@
 FAAD_LIBS = @FAAD_LIBS@
 FFLAGS = @FFLAGS@
 FGREP = @FGREP@
@@ -252,8 +254,9 @@
 GIO_LIBS = @GIO_LIBS@
 GIO_UNIX_CFLAGS = @GIO_UNIX_CFLAGS@
 GIO_UNIX_LIBS = @GIO_UNIX_LIBS@
+GLES2_CFLAGS = @GLES2_CFLAGS@
+GLES2_LIBS = @GLES2_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
-GLIB_COMPILE_SCHEMAS = @GLIB_COMPILE_SCHEMAS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
@@ -270,16 +273,17 @@
 GMODULE_NO_EXPORT_LIBS = @GMODULE_NO_EXPORT_LIBS@
 GMSGFMT = @GMSGFMT@
 GMSGFMT_015 = @GMSGFMT_015@
+GNUSTL_CFLAGS = @GNUSTL_CFLAGS@
+GNUSTL_LIBS = @GNUSTL_LIBS@
 GRAPHENE_CFLAGS = @GRAPHENE_CFLAGS@
 GRAPHENE_LIBS = @GRAPHENE_LIBS@
 GREP = @GREP@
-GSETTINGS_CFLAGS = @GSETTINGS_CFLAGS@
-GSETTINGS_DISABLE_SCHEMAS_COMPILE = @GSETTINGS_DISABLE_SCHEMAS_COMPILE@
-GSETTINGS_LIBS = @GSETTINGS_LIBS@
 GSM_LIBS = @GSM_LIBS@
 GSTPB_PLUGINS_DIR = @GSTPB_PLUGINS_DIR@
 GSTPB_PREFIX = @GSTPB_PREFIX@
 GST_AGE = @GST_AGE@
+GST_ALLOCATORS_CFLAGS = @GST_ALLOCATORS_CFLAGS@
+GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
 GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
 GST_API_VERSION = @GST_API_VERSION@
 GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
@@ -305,6 +309,8 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PBUTILS_CFLAGS = @GST_PBUTILS_CFLAGS@
+GST_PBUTILS_LIBS = @GST_PBUTILS_LIBS@
 GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BAD_CFLAGS = @GST_PLUGINS_BAD_CFLAGS@
@@ -330,6 +336,8 @@
 GST_PREFIX = @GST_PREFIX@
 GST_REVISION = @GST_REVISION@
 GST_TOOLS_DIR = @GST_TOOLS_DIR@
+GST_VIDEO_CFLAGS = @GST_VIDEO_CFLAGS@
+GST_VIDEO_LIBS = @GST_VIDEO_LIBS@
 GTK3_CFLAGS = @GTK3_CFLAGS@
 GTK3_GL_CFLAGS = @GTK3_GL_CFLAGS@
 GTK3_GL_LIBS = @GTK3_GL_LIBS@
@@ -431,6 +439,7 @@
 LTLIBICONV = @LTLIBICONV@
 LTLIBINTL = @LTLIBINTL@
 LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
 MANIFEST_TOOL = @MANIFEST_TOOL@
@@ -444,8 +453,6 @@
 MODPLUG_LIBS = @MODPLUG_LIBS@
 MPEG2ENC_CFLAGS = @MPEG2ENC_CFLAGS@
 MPEG2ENC_LIBS = @MPEG2ENC_LIBS@
-MPG123_CFLAGS = @MPG123_CFLAGS@
-MPG123_LIBS = @MPG123_LIBS@
 MPLEX_CFLAGS = @MPLEX_CFLAGS@
 MPLEX_LDFLAGS = @MPLEX_LDFLAGS@
 MPLEX_LIBS = @MPLEX_LIBS@
@@ -461,6 +468,8 @@
 NETTLE_LIBS = @NETTLE_LIBS@
 NM = @NM@
 NMEDIT = @NMEDIT@
+NVENCODE_CFLAGS = @NVENCODE_CFLAGS@
+NVENCODE_LIBS = @NVENCODE_LIBS@
 OBJC = @OBJC@
 OBJCDEPMODE = @OBJCDEPMODE@
 OBJCFLAGS = @OBJCFLAGS@
@@ -518,16 +527,18 @@
 PYTHON_PLATFORM = @PYTHON_PLATFORM@
 PYTHON_PREFIX = @PYTHON_PREFIX@
 PYTHON_VERSION = @PYTHON_VERSION@
+QT_ANDROID_CFLAGS = @QT_ANDROID_CFLAGS@
+QT_ANDROID_LIBS = @QT_ANDROID_LIBS@
 QT_CFLAGS = @QT_CFLAGS@
 QT_LIBS = @QT_LIBS@
+QT_MAC_CFLAGS = @QT_MAC_CFLAGS@
+QT_MAC_LIBS = @QT_MAC_LIBS@
 QT_WAYLAND_CFLAGS = @QT_WAYLAND_CFLAGS@
 QT_WAYLAND_LIBS = @QT_WAYLAND_LIBS@
 QT_X11_CFLAGS = @QT_X11_CFLAGS@
 QT_X11_LIBS = @QT_X11_LIBS@
 RANLIB = @RANLIB@
 RCC = @RCC@
-RSVG_2_36_2_CFLAGS = @RSVG_2_36_2_CFLAGS@
-RSVG_2_36_2_LIBS = @RSVG_2_36_2_LIBS@
 RSVG_CFLAGS = @RSVG_CFLAGS@
 RSVG_LIBS = @RSVG_LIBS@
 RTMP_CFLAGS = @RTMP_CFLAGS@
@@ -579,6 +590,7 @@
 VOAACENC_LIBS = @VOAACENC_LIBS@
 VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
 VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VULKAN_LIBS = @VULKAN_LIBS@
 WARNING_CFLAGS = @WARNING_CFLAGS@
 WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
 WARNING_OBJCFLAGS = @WARNING_OBJCFLAGS@
@@ -589,6 +601,7 @@
 WAYLAND_LIBS = @WAYLAND_LIBS@
 WEBP_CFLAGS = @WEBP_CFLAGS@
 WEBP_LIBS = @WEBP_LIBS@
+WGET = @WGET@
 WILDMIDI_CFLAGS = @WILDMIDI_CFLAGS@
 WILDMIDI_LIBS = @WILDMIDI_LIBS@
 WINKS_LIBS = @WINKS_LIBS@
@@ -598,6 +611,8 @@
 X11_LIBS = @X11_LIBS@
 X265_CFLAGS = @X265_CFLAGS@
 X265_LIBS = @X265_LIBS@
+XCB_CFLAGS = @XCB_CFLAGS@
+XCB_LIBS = @XCB_LIBS@
 XCOMPOSITE_CFLAGS = @XCOMPOSITE_CFLAGS@
 XCOMPOSITE_LIBS = @XCOMPOSITE_LIBS@
 XGETTEXT = @XGETTEXT@
@@ -635,7 +650,6 @@
 docdir = @docdir@
 dvidir = @dvidir@
 exec_prefix = @exec_prefix@
-gsettingsschemadir = @gsettingsschemadir@
 host = @host@
 host_alias = @host_alias@
 host_cpu = @host_cpu@
@@ -678,10 +692,7 @@
 EXTRA_DIST = \
 	barcode.png \
 	blue-square.png \
-	cbr_stream.mp3 \
-	s16be-id3v2.aiff \
-	stream.mp2 \
-	vbr_stream.mp3
+	s16be-id3v2.aiff
 
 all: all-am
 
diff --git a/tests/files/cbr_stream.mp3 b/tests/files/cbr_stream.mp3
deleted file mode 100644
index b1a5c43..0000000
--- a/tests/files/cbr_stream.mp3
+++ /dev/null
Binary files differ
diff --git a/tests/files/stream.mp2 b/tests/files/stream.mp2
deleted file mode 100644
index ab6e900..0000000
--- a/tests/files/stream.mp2
+++ /dev/null
Binary files differ
diff --git a/tests/files/vbr_stream.mp3 b/tests/files/vbr_stream.mp3
deleted file mode 100644
index 81fc38b..0000000
--- a/tests/files/vbr_stream.mp3
+++ /dev/null
Binary files differ
diff --git a/tests/icles/Makefile.in b/tests/icles/Makefile.in
index bc84a60..d0552a4 100644
--- a/tests/icles/Makefile.in
+++ b/tests/icles/Makefile.in
@@ -116,16 +116,15 @@
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
 	$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
-	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gsettings.m4 \
-	$(top_srcdir)/m4/gst-fionread.m4 $(top_srcdir)/m4/gst-sdl.m4 \
-	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
-	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
-	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libgcrypt.m4 \
-	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
-	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
-	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
-	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
-	$(top_srcdir)/configure.ac
+	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gst-fionread.m4 \
+	$(top_srcdir)/m4/gst-sdl.m4 $(top_srcdir)/m4/iconv.m4 \
+	$(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \
+	$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
+	$(top_srcdir)/m4/libgcrypt.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
+	$(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
@@ -246,6 +245,8 @@
 CLUTTER_X11_LIBS = @CLUTTER_X11_LIBS@
 CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
+CUDA_CFLAGS = @CUDA_CFLAGS@
+CUDA_LIBS = @CUDA_LIBS@
 CURL_CFLAGS = @CURL_CFLAGS@
 CURL_LIBS = @CURL_LIBS@
 CXX = @CXX@
@@ -283,6 +284,8 @@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
+EGL_CFLAGS = @EGL_CFLAGS@
+EGL_LIBS = @EGL_LIBS@
 EGREP = @EGREP@
 ERROR_CFLAGS = @ERROR_CFLAGS@
 ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
@@ -291,7 +294,6 @@
 EXIF_CFLAGS = @EXIF_CFLAGS@
 EXIF_LIBS = @EXIF_LIBS@
 FAAC_LIBS = @FAAC_LIBS@
-FAAD_IS_NEAAC = @FAAD_IS_NEAAC@
 FAAD_LIBS = @FAAD_LIBS@
 FFLAGS = @FFLAGS@
 FGREP = @FGREP@
@@ -310,8 +312,9 @@
 GIO_LIBS = @GIO_LIBS@
 GIO_UNIX_CFLAGS = @GIO_UNIX_CFLAGS@
 GIO_UNIX_LIBS = @GIO_UNIX_LIBS@
+GLES2_CFLAGS = @GLES2_CFLAGS@
+GLES2_LIBS = @GLES2_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
-GLIB_COMPILE_SCHEMAS = @GLIB_COMPILE_SCHEMAS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
@@ -328,16 +331,17 @@
 GMODULE_NO_EXPORT_LIBS = @GMODULE_NO_EXPORT_LIBS@
 GMSGFMT = @GMSGFMT@
 GMSGFMT_015 = @GMSGFMT_015@
+GNUSTL_CFLAGS = @GNUSTL_CFLAGS@
+GNUSTL_LIBS = @GNUSTL_LIBS@
 GRAPHENE_CFLAGS = @GRAPHENE_CFLAGS@
 GRAPHENE_LIBS = @GRAPHENE_LIBS@
 GREP = @GREP@
-GSETTINGS_CFLAGS = @GSETTINGS_CFLAGS@
-GSETTINGS_DISABLE_SCHEMAS_COMPILE = @GSETTINGS_DISABLE_SCHEMAS_COMPILE@
-GSETTINGS_LIBS = @GSETTINGS_LIBS@
 GSM_LIBS = @GSM_LIBS@
 GSTPB_PLUGINS_DIR = @GSTPB_PLUGINS_DIR@
 GSTPB_PREFIX = @GSTPB_PREFIX@
 GST_AGE = @GST_AGE@
+GST_ALLOCATORS_CFLAGS = @GST_ALLOCATORS_CFLAGS@
+GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
 GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
 GST_API_VERSION = @GST_API_VERSION@
 GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
@@ -363,6 +367,8 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PBUTILS_CFLAGS = @GST_PBUTILS_CFLAGS@
+GST_PBUTILS_LIBS = @GST_PBUTILS_LIBS@
 GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BAD_CFLAGS = @GST_PLUGINS_BAD_CFLAGS@
@@ -388,6 +394,8 @@
 GST_PREFIX = @GST_PREFIX@
 GST_REVISION = @GST_REVISION@
 GST_TOOLS_DIR = @GST_TOOLS_DIR@
+GST_VIDEO_CFLAGS = @GST_VIDEO_CFLAGS@
+GST_VIDEO_LIBS = @GST_VIDEO_LIBS@
 GTK3_CFLAGS = @GTK3_CFLAGS@
 GTK3_GL_CFLAGS = @GTK3_GL_CFLAGS@
 GTK3_GL_LIBS = @GTK3_GL_LIBS@
@@ -489,6 +497,7 @@
 LTLIBICONV = @LTLIBICONV@
 LTLIBINTL = @LTLIBINTL@
 LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
 MANIFEST_TOOL = @MANIFEST_TOOL@
@@ -502,8 +511,6 @@
 MODPLUG_LIBS = @MODPLUG_LIBS@
 MPEG2ENC_CFLAGS = @MPEG2ENC_CFLAGS@
 MPEG2ENC_LIBS = @MPEG2ENC_LIBS@
-MPG123_CFLAGS = @MPG123_CFLAGS@
-MPG123_LIBS = @MPG123_LIBS@
 MPLEX_CFLAGS = @MPLEX_CFLAGS@
 MPLEX_LDFLAGS = @MPLEX_LDFLAGS@
 MPLEX_LIBS = @MPLEX_LIBS@
@@ -519,6 +526,8 @@
 NETTLE_LIBS = @NETTLE_LIBS@
 NM = @NM@
 NMEDIT = @NMEDIT@
+NVENCODE_CFLAGS = @NVENCODE_CFLAGS@
+NVENCODE_LIBS = @NVENCODE_LIBS@
 OBJC = @OBJC@
 OBJCDEPMODE = @OBJCDEPMODE@
 OBJCFLAGS = @OBJCFLAGS@
@@ -576,16 +585,18 @@
 PYTHON_PLATFORM = @PYTHON_PLATFORM@
 PYTHON_PREFIX = @PYTHON_PREFIX@
 PYTHON_VERSION = @PYTHON_VERSION@
+QT_ANDROID_CFLAGS = @QT_ANDROID_CFLAGS@
+QT_ANDROID_LIBS = @QT_ANDROID_LIBS@
 QT_CFLAGS = @QT_CFLAGS@
 QT_LIBS = @QT_LIBS@
+QT_MAC_CFLAGS = @QT_MAC_CFLAGS@
+QT_MAC_LIBS = @QT_MAC_LIBS@
 QT_WAYLAND_CFLAGS = @QT_WAYLAND_CFLAGS@
 QT_WAYLAND_LIBS = @QT_WAYLAND_LIBS@
 QT_X11_CFLAGS = @QT_X11_CFLAGS@
 QT_X11_LIBS = @QT_X11_LIBS@
 RANLIB = @RANLIB@
 RCC = @RCC@
-RSVG_2_36_2_CFLAGS = @RSVG_2_36_2_CFLAGS@
-RSVG_2_36_2_LIBS = @RSVG_2_36_2_LIBS@
 RSVG_CFLAGS = @RSVG_CFLAGS@
 RSVG_LIBS = @RSVG_LIBS@
 RTMP_CFLAGS = @RTMP_CFLAGS@
@@ -637,6 +648,7 @@
 VOAACENC_LIBS = @VOAACENC_LIBS@
 VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
 VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VULKAN_LIBS = @VULKAN_LIBS@
 WARNING_CFLAGS = @WARNING_CFLAGS@
 WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
 WARNING_OBJCFLAGS = @WARNING_OBJCFLAGS@
@@ -647,6 +659,7 @@
 WAYLAND_LIBS = @WAYLAND_LIBS@
 WEBP_CFLAGS = @WEBP_CFLAGS@
 WEBP_LIBS = @WEBP_LIBS@
+WGET = @WGET@
 WILDMIDI_CFLAGS = @WILDMIDI_CFLAGS@
 WILDMIDI_LIBS = @WILDMIDI_LIBS@
 WINKS_LIBS = @WINKS_LIBS@
@@ -656,6 +669,8 @@
 X11_LIBS = @X11_LIBS@
 X265_CFLAGS = @X265_CFLAGS@
 X265_LIBS = @X265_LIBS@
+XCB_CFLAGS = @XCB_CFLAGS@
+XCB_LIBS = @XCB_LIBS@
 XCOMPOSITE_CFLAGS = @XCOMPOSITE_CFLAGS@
 XCOMPOSITE_LIBS = @XCOMPOSITE_LIBS@
 XGETTEXT = @XGETTEXT@
@@ -693,7 +708,6 @@
 docdir = @docdir@
 dvidir = @dvidir@
 exec_prefix = @exec_prefix@
-gsettingsschemadir = @gsettingsschemadir@
 host = @host@
 host_alias = @host_alias@
 host_cpu = @host_cpu@
diff --git a/tools/Makefile.in b/tools/Makefile.in
index 12dbade..65ac6e0 100644
--- a/tools/Makefile.in
+++ b/tools/Makefile.in
@@ -114,16 +114,15 @@
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
 	$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
-	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gsettings.m4 \
-	$(top_srcdir)/m4/gst-fionread.m4 $(top_srcdir)/m4/gst-sdl.m4 \
-	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
-	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
-	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libgcrypt.m4 \
-	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
-	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
-	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
-	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
-	$(top_srcdir)/configure.ac
+	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gst-fionread.m4 \
+	$(top_srcdir)/m4/gst-sdl.m4 $(top_srcdir)/m4/iconv.m4 \
+	$(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \
+	$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
+	$(top_srcdir)/m4/libgcrypt.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
+	$(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
@@ -188,6 +187,8 @@
 CLUTTER_X11_LIBS = @CLUTTER_X11_LIBS@
 CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
+CUDA_CFLAGS = @CUDA_CFLAGS@
+CUDA_LIBS = @CUDA_LIBS@
 CURL_CFLAGS = @CURL_CFLAGS@
 CURL_LIBS = @CURL_LIBS@
 CXX = @CXX@
@@ -225,6 +226,8 @@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
+EGL_CFLAGS = @EGL_CFLAGS@
+EGL_LIBS = @EGL_LIBS@
 EGREP = @EGREP@
 ERROR_CFLAGS = @ERROR_CFLAGS@
 ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
@@ -233,7 +236,6 @@
 EXIF_CFLAGS = @EXIF_CFLAGS@
 EXIF_LIBS = @EXIF_LIBS@
 FAAC_LIBS = @FAAC_LIBS@
-FAAD_IS_NEAAC = @FAAD_IS_NEAAC@
 FAAD_LIBS = @FAAD_LIBS@
 FFLAGS = @FFLAGS@
 FGREP = @FGREP@
@@ -252,8 +254,9 @@
 GIO_LIBS = @GIO_LIBS@
 GIO_UNIX_CFLAGS = @GIO_UNIX_CFLAGS@
 GIO_UNIX_LIBS = @GIO_UNIX_LIBS@
+GLES2_CFLAGS = @GLES2_CFLAGS@
+GLES2_LIBS = @GLES2_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
-GLIB_COMPILE_SCHEMAS = @GLIB_COMPILE_SCHEMAS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
@@ -270,16 +273,17 @@
 GMODULE_NO_EXPORT_LIBS = @GMODULE_NO_EXPORT_LIBS@
 GMSGFMT = @GMSGFMT@
 GMSGFMT_015 = @GMSGFMT_015@
+GNUSTL_CFLAGS = @GNUSTL_CFLAGS@
+GNUSTL_LIBS = @GNUSTL_LIBS@
 GRAPHENE_CFLAGS = @GRAPHENE_CFLAGS@
 GRAPHENE_LIBS = @GRAPHENE_LIBS@
 GREP = @GREP@
-GSETTINGS_CFLAGS = @GSETTINGS_CFLAGS@
-GSETTINGS_DISABLE_SCHEMAS_COMPILE = @GSETTINGS_DISABLE_SCHEMAS_COMPILE@
-GSETTINGS_LIBS = @GSETTINGS_LIBS@
 GSM_LIBS = @GSM_LIBS@
 GSTPB_PLUGINS_DIR = @GSTPB_PLUGINS_DIR@
 GSTPB_PREFIX = @GSTPB_PREFIX@
 GST_AGE = @GST_AGE@
+GST_ALLOCATORS_CFLAGS = @GST_ALLOCATORS_CFLAGS@
+GST_ALLOCATORS_LIBS = @GST_ALLOCATORS_LIBS@
 GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
 GST_API_VERSION = @GST_API_VERSION@
 GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
@@ -305,6 +309,8 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PBUTILS_CFLAGS = @GST_PBUTILS_CFLAGS@
+GST_PBUTILS_LIBS = @GST_PBUTILS_LIBS@
 GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BAD_CFLAGS = @GST_PLUGINS_BAD_CFLAGS@
@@ -330,6 +336,8 @@
 GST_PREFIX = @GST_PREFIX@
 GST_REVISION = @GST_REVISION@
 GST_TOOLS_DIR = @GST_TOOLS_DIR@
+GST_VIDEO_CFLAGS = @GST_VIDEO_CFLAGS@
+GST_VIDEO_LIBS = @GST_VIDEO_LIBS@
 GTK3_CFLAGS = @GTK3_CFLAGS@
 GTK3_GL_CFLAGS = @GTK3_GL_CFLAGS@
 GTK3_GL_LIBS = @GTK3_GL_LIBS@
@@ -431,6 +439,7 @@
 LTLIBICONV = @LTLIBICONV@
 LTLIBINTL = @LTLIBINTL@
 LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
 MANIFEST_TOOL = @MANIFEST_TOOL@
@@ -444,8 +453,6 @@
 MODPLUG_LIBS = @MODPLUG_LIBS@
 MPEG2ENC_CFLAGS = @MPEG2ENC_CFLAGS@
 MPEG2ENC_LIBS = @MPEG2ENC_LIBS@
-MPG123_CFLAGS = @MPG123_CFLAGS@
-MPG123_LIBS = @MPG123_LIBS@
 MPLEX_CFLAGS = @MPLEX_CFLAGS@
 MPLEX_LDFLAGS = @MPLEX_LDFLAGS@
 MPLEX_LIBS = @MPLEX_LIBS@
@@ -461,6 +468,8 @@
 NETTLE_LIBS = @NETTLE_LIBS@
 NM = @NM@
 NMEDIT = @NMEDIT@
+NVENCODE_CFLAGS = @NVENCODE_CFLAGS@
+NVENCODE_LIBS = @NVENCODE_LIBS@
 OBJC = @OBJC@
 OBJCDEPMODE = @OBJCDEPMODE@
 OBJCFLAGS = @OBJCFLAGS@
@@ -518,16 +527,18 @@
 PYTHON_PLATFORM = @PYTHON_PLATFORM@
 PYTHON_PREFIX = @PYTHON_PREFIX@
 PYTHON_VERSION = @PYTHON_VERSION@
+QT_ANDROID_CFLAGS = @QT_ANDROID_CFLAGS@
+QT_ANDROID_LIBS = @QT_ANDROID_LIBS@
 QT_CFLAGS = @QT_CFLAGS@
 QT_LIBS = @QT_LIBS@
+QT_MAC_CFLAGS = @QT_MAC_CFLAGS@
+QT_MAC_LIBS = @QT_MAC_LIBS@
 QT_WAYLAND_CFLAGS = @QT_WAYLAND_CFLAGS@
 QT_WAYLAND_LIBS = @QT_WAYLAND_LIBS@
 QT_X11_CFLAGS = @QT_X11_CFLAGS@
 QT_X11_LIBS = @QT_X11_LIBS@
 RANLIB = @RANLIB@
 RCC = @RCC@
-RSVG_2_36_2_CFLAGS = @RSVG_2_36_2_CFLAGS@
-RSVG_2_36_2_LIBS = @RSVG_2_36_2_LIBS@
 RSVG_CFLAGS = @RSVG_CFLAGS@
 RSVG_LIBS = @RSVG_LIBS@
 RTMP_CFLAGS = @RTMP_CFLAGS@
@@ -579,6 +590,7 @@
 VOAACENC_LIBS = @VOAACENC_LIBS@
 VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
 VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VULKAN_LIBS = @VULKAN_LIBS@
 WARNING_CFLAGS = @WARNING_CFLAGS@
 WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
 WARNING_OBJCFLAGS = @WARNING_OBJCFLAGS@
@@ -589,6 +601,7 @@
 WAYLAND_LIBS = @WAYLAND_LIBS@
 WEBP_CFLAGS = @WEBP_CFLAGS@
 WEBP_LIBS = @WEBP_LIBS@
+WGET = @WGET@
 WILDMIDI_CFLAGS = @WILDMIDI_CFLAGS@
 WILDMIDI_LIBS = @WILDMIDI_LIBS@
 WINKS_LIBS = @WINKS_LIBS@
@@ -598,6 +611,8 @@
 X11_LIBS = @X11_LIBS@
 X265_CFLAGS = @X265_CFLAGS@
 X265_LIBS = @X265_LIBS@
+XCB_CFLAGS = @XCB_CFLAGS@
+XCB_LIBS = @XCB_LIBS@
 XCOMPOSITE_CFLAGS = @XCOMPOSITE_CFLAGS@
 XCOMPOSITE_LIBS = @XCOMPOSITE_LIBS@
 XGETTEXT = @XGETTEXT@
@@ -635,7 +650,6 @@
 docdir = @docdir@
 dvidir = @dvidir@
 exec_prefix = @exec_prefix@
-gsettingsschemadir = @gsettingsschemadir@
 host = @host@
 host_alias = @host_alias@
 host_cpu = @host_cpu@
diff --git a/tools/gst-app-maker b/tools/gst-app-maker
index 786cd64..f3c3d1f 100755
--- a/tools/gst-app-maker
+++ b/tools/gst-app-maker
@@ -151,6 +151,8 @@
   g_option_context_add_group (context, gst_init_get_option_group ());
   if (!g_option_context_parse (context, &argc, &argv, &error)) {
     g_print ("option parsing failed: %s\n", error->message);
+    g_clear_error (&error);
+    g_option_context_free (context);
     exit (1);
   }
   g_option_context_free (context);
@@ -223,6 +225,7 @@
 
   if (error) {
     g_print("pipeline parsing error: %s\n", error->message);
+    g_clear_error (&error);
     gst_object_unref (pipeline);
     return;
   }
@@ -262,6 +265,7 @@
 
   if (error) {
     g_print("pipeline parsing error: %s\n", error->message);
+    g_clear_error (&error);
     gst_object_unref (pipeline);
     return;
   }
@@ -378,6 +382,7 @@
 
         gst_message_parse_error (message, &error, &debug);
         gst_replace_handle_error (replace, error, debug);
+        g_clear_error (&error);
       }
       break;
     case GST_MESSAGE_WARNING:
@@ -387,6 +392,7 @@
 
         gst_message_parse_warning (message, &error, &debug);
         gst_replace_handle_warning (replace, error, debug);
+        g_clear_error (&error);
       }
       break;
     case GST_MESSAGE_INFO:
@@ -396,6 +402,7 @@
 
         gst_message_parse_info (message, &error, &debug);
         gst_replace_handle_info (replace, error, debug);
+        g_clear_error (&error);
       }
       break;
     case GST_MESSAGE_TAG:
diff --git a/tools/gst-element-maker b/tools/gst-element-maker
index facb242..cefd64a 100755
--- a/tools/gst-element-maker
+++ b/tools/gst-element-maker
@@ -116,7 +116,7 @@
  * <refsect2>
  * <title>Example launch line</title>
  * |[
- * gst-launch -v fakesrc ! $replace ! FIXME ! fakesink
+ * gst-launch-1.0 -v fakesrc ! $replace ! FIXME ! fakesink
  * ]|
  * FIXME Describe what the pipeline does.
  * </refsect2>
diff --git a/win32/MANIFEST b/win32/MANIFEST
index cfba3b3..35c6443 100644
--- a/win32/MANIFEST
+++ b/win32/MANIFEST
@@ -1,9 +1,2 @@
 win32/MANIFEST
 win32/common/config.h
-win32/vs6/gst_plugins_bad.dsw
-win32/vs6/libgstdshow.dsp
-win32/vs6/libgstdshowdecwrapper.dsp
-win32/vs6/libgstflv.dsp
-win32/vs6/libgstmpegvideoparse.dsp
-win32/vs6/libgstneon.dsp
-win32/vs8/gst-plugins-bad.sln
diff --git a/win32/common/config.h b/win32/common/config.h
index 9ea52d4..ce723c7 100644
--- a/win32/common/config.h
+++ b/win32/common/config.h
@@ -31,12 +31,6 @@
    language is requested. */
 #undef ENABLE_NLS
 
-/* The x in 2.x */
-#undef FAAD2_MINOR_VERSION
-
-/* Define if AAC is using new api prefix */
-#undef FAAD_IS_NEAAC
-
 /* gettext package name */
 #define GETTEXT_PACKAGE "gst-plugins-bad-1.0"
 
@@ -55,12 +49,18 @@
 /* GStreamer API Version */
 #define GST_API_VERSION "1.0"
 
+/* Define if extra runtime checks should be enabled */
+#undef GST_ENABLE_EXTRA_CHECKS
+
 /* Extra platform specific plugin suffix */
 #undef GST_EXTRA_MODULE_SUFFIX
 
 /* Defined if gcov is enabled to force a rebuild due to config.h changing */
 #undef GST_GCOV_ENABLED
 
+/* DMABUF available for gl plugins */
+#undef GST_GL_HAVE_DMABUF
+
 /* EGL module name */
 #undef GST_GL_LIBEGL_MODULE_NAME
 
@@ -89,7 +89,7 @@
 #define GST_PACKAGE_ORIGIN "Unknown package origin"
 
 /* GStreamer package release date/time for plugins as YYYY-MM-DD */
-#define GST_PACKAGE_RELEASE_DATETIME "2016-01-20"
+#define GST_PACKAGE_RELEASE_DATETIME "2016-03-15"
 
 /* Define if static plugins should be built */
 #undef GST_PLUGIN_BUILD_STATIC
@@ -238,7 +238,7 @@
 /* Define to enable AAC encoder plug-in (used by faac). */
 #undef HAVE_FAAC
 
-/* Define to enable AAC decoder plug-in (used by faad). */
+/* Define to enable FAAD2 AAC decoder plug-in (used by faad). */
 #undef HAVE_FAAD
 
 /* Define to enable linux framebuffer (used by fbdevsink). */
@@ -274,6 +274,9 @@
 /* Define to 1 if the system has the type `GLeglImageOES'. */
 #undef HAVE_GLEGLIMAGEOES
 
+/* Define to 1 if the system has the type `GLint64'. */
+#undef HAVE_GLINT64
+
 /* Define to 1 if the system has the type `GLintptr'. */
 #undef HAVE_GLINTPTR
 
@@ -295,9 +298,6 @@
 /* Use graphene */
 #undef HAVE_GRAPHENE
 
-/* Define to enable GSettings plugin (used by gsettings). */
-#undef HAVE_GSETTINGS
-
 /* Define to enable GSM library (used by gsmenc gsmdec). */
 #undef HAVE_GSM
 
@@ -379,9 +379,6 @@
 /* Define to enable mpeg2enc (used by mpeg2enc). */
 #undef HAVE_MPEG2ENC
 
-/* Define to enable mpg123 audio decoder (used by mpg123). */
-#undef HAVE_MPG123
-
 /* Define to enable mplex (used by mplex). */
 #undef HAVE_MPLEX
 
@@ -409,6 +406,12 @@
 /* Define if nettle is available */
 #undef HAVE_NETTLE
 
+/* Define to enable NVIDIA Encode API (used by nvenc). */
+#undef HAVE_NVENC
+
+/* NVENC GStreamer OpenGL support available */
+#undef HAVE_NVENC_GST_GL
+
 /* Define to enable ofa plugins (used by ofa). */
 #undef HAVE_OFA
 
@@ -501,6 +504,15 @@
 /* Define to enable Qt elements (used by qt). */
 #undef HAVE_QT
 
+/* Define if Qt Android integration is installed */
+#undef HAVE_QT_ANDROID
+
+/* Define if Qt iOS integration is installed */
+#undef HAVE_QT_IOS
+
+/* Define if Qt Mac integration is installed */
+#undef HAVE_QT_MAC
+
 /* Define if Qt Wayland integration is installed */
 #undef HAVE_QT_WAYLAND
 
@@ -516,9 +528,6 @@
 /* Define to enable rsvg decoder (used by rsvg). */
 #undef HAVE_RSVG
 
-/* Have RSVG 2.36.2 or newer */
-#undef HAVE_RSVG_2_36_2
-
 /* Define to enable rtmp library (used by rtmp). */
 #undef HAVE_RTMP
 
@@ -600,6 +609,9 @@
 /* Define to enable timidity midi soft synth plugin (used by timidity). */
 #undef HAVE_TIMIDITY
 
+/* Define to enable tinyalsa (used by tinyalsa). */
+#undef HAVE_TINYALSA
+
 /* Define to 1 if you have the <unistd.h> header file. */
 #undef HAVE_UNISTD_H
 
@@ -627,6 +639,9 @@
 /* Define to enable vo-amrwbenc library (used by vo-amrwbenc). */
 #undef HAVE_VOAMRWBENC
 
+/* Define to enable Vulkan elements (used by vulkan). */
+#undef HAVE_VULKAN
+
 /* Define to enable WASAPI plug-in (used by wasapi). */
 #undef HAVE_WASAPI
 
@@ -694,8 +709,7 @@
 /* gettext locale dir */
 #define LOCALEDIR PREFIX "\\share\\locale"
 
-/* Define to the sub-directory in which libtool stores uninstalled libraries.
-   */
+/* Define to the sub-directory where libtool stores uninstalled libraries. */
 #undef LT_OBJDIR
 
 /* Define if the old MusePack API is used */
@@ -717,7 +731,7 @@
 #define PACKAGE_NAME "GStreamer Bad Plug-ins"
 
 /* Define to the full name and version of this package. */
-#define PACKAGE_STRING "GStreamer Bad Plug-ins 1.6.3"
+#define PACKAGE_STRING "GStreamer Bad Plug-ins 1.7.91"
 
 /* Define to the one symbol short name of this package. */
 #define PACKAGE_TARNAME "gst-plugins-bad"
@@ -726,7 +740,7 @@
 #undef PACKAGE_URL
 
 /* Define to the version of this package. */
-#define PACKAGE_VERSION "1.6.3"
+#define PACKAGE_VERSION "1.7.91"
 
 /* directory where plugins are located */
 #ifdef _DEBUG
@@ -770,7 +784,7 @@
 #undef USE_EGL_RPI
 
 /* Version number of package */
-#define VERSION "1.6.3"
+#define VERSION "1.7.91"
 
 /* Define WORDS_BIGENDIAN to 1 if your processor stores words with the most
    significant byte first (like Motorola and SPARC, unlike Intel). */
diff --git a/win32/vs6/gst_plugins_bad.dsw b/win32/vs6/gst_plugins_bad.dsw
deleted file mode 100644
index 6d0c9b5..0000000
--- a/win32/vs6/gst_plugins_bad.dsw
+++ /dev/null
@@ -1,65 +0,0 @@
-Microsoft Developer Studio Workspace File, Format Version 6.00

-# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE!

-

-###############################################################################

-

-Project: "libgstcdxaparse"=".\libgstcdxaparse.dsp" - Package Owner=<4>

-

-Package=<5>

-{{{

-}}}

-

-Package=<4>

-{{{

-}}}

-

-###############################################################################

-

-Project: "libgstflv"=".\libgstflv.dsp" - Package Owner=<4>

-

-Package=<5>

-{{{

-}}}

-

-Package=<4>

-{{{

-}}}

-

-###############################################################################

-

-Project: "libgstmpegvideoparse"=".\libgstmpegvideoparse.dsp" - Package Owner=<4>

-

-Package=<5>

-{{{

-}}}

-

-Package=<4>

-{{{

-}}}

-

-###############################################################################

-

-Project: "libgstneon"=".\libgstneon.dsp" - Package Owner=<4>

-

-Package=<5>

-{{{

-}}}

-

-Package=<4>

-{{{

-}}}

-

-###############################################################################

-

-Global:

-

-Package=<5>

-{{{

-}}}

-

-Package=<3>

-{{{

-}}}

-

-###############################################################################

-

diff --git a/win32/vs6/libgstdshow.dsp b/win32/vs6/libgstdshow.dsp
deleted file mode 100644
index 0991749..0000000
--- a/win32/vs6/libgstdshow.dsp
+++ /dev/null
@@ -1,155 +0,0 @@
-# Microsoft Developer Studio Project File - Name="libgstdshow" - Package Owner=<4>

-# Microsoft Developer Studio Generated Build File, Format Version 6.00

-# ** DO NOT EDIT **

-

-# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102

-

-CFG=libgstdshow - Win32 Debug

-!MESSAGE This is not a valid makefile. To build this project using NMAKE,

-!MESSAGE use the Export Makefile command and run

-!MESSAGE 

-!MESSAGE NMAKE /f "libgstdshow.mak".

-!MESSAGE 

-!MESSAGE You can specify a configuration when running NMAKE

-!MESSAGE by defining the macro CFG on the command line. For example:

-!MESSAGE 

-!MESSAGE NMAKE /f "libgstdshow.mak" CFG="libgstdshow - Win32 Debug"

-!MESSAGE 

-!MESSAGE Possible choices for configuration are:

-!MESSAGE 

-!MESSAGE "libgstdshow - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")

-!MESSAGE "libgstdshow - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")

-!MESSAGE 

-

-# Begin Project

-# PROP AllowPerConfigDependencies 0

-# PROP Scc_ProjName ""

-# PROP Scc_LocalPath ""

-CPP=cl.exe

-MTL=midl.exe

-RSC=rc.exe

-

-!IF  "$(CFG)" == "libgstdshow - Win32 Release"

-

-# PROP BASE Use_MFC 0

-# PROP BASE Use_Debug_Libraries 0

-# PROP BASE Output_Dir "Release"

-# PROP BASE Intermediate_Dir "Release"

-# PROP BASE Target_Dir ""

-# PROP Use_MFC 0

-# PROP Use_Debug_Libraries 0

-# PROP Output_Dir "Release"

-# PROP Intermediate_Dir "Release"

-# PROP Ignore_Export_Lib 0

-# PROP Target_Dir ""

-# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "LIBGSTDSHOW_EXPORTS" /Yu"stdafx.h" /FD /c

-# ADD CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "LIBDSHOW_EXPORTS" /Yu"stdafx.h" /FD /c

-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32

-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32

-# ADD BASE RSC /l 0x40c /d "NDEBUG"

-# ADD RSC /l 0x40c /d "NDEBUG"

-BSC32=bscmake.exe

-# ADD BASE BSC32 /nologo

-# ADD BSC32 /nologo

-LINK32=link.exe

-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386

-# ADD LINK32 libgstreamer-0.10.lib glib-2.0.lib C:\DX90SDK\Samples\C++\DirectShow\BaseClasses\Release\strmbase.lib quartz.lib kernel32.lib user32.lib gdi32.lib comdlg32.lib ole32.lib winmm.lib msacm32.lib olepro32.lib uuid.lib strmiids.lib advapi32.lib olepro32.lib /nologo /dll /machine:I386 /out:"Release/libgstdshow-0.10.dll"

-# SUBTRACT LINK32 /nodefaultlib

-# Begin Special Build Tool

-TargetPath=.\Release\libgstdshow-0.10.dll

-SOURCE="$(InputPath)"

-PostBuild_Cmds=copy /Y $(TargetPath) c:\gstreamer\bin

-# End Special Build Tool

-

-!ELSEIF  "$(CFG)" == "libgstdshow - Win32 Debug"

-

-# PROP BASE Use_MFC 0

-# PROP BASE Use_Debug_Libraries 1

-# PROP BASE Output_Dir "Debug"

-# PROP BASE Intermediate_Dir "Debug"

-# PROP BASE Target_Dir ""

-# PROP Use_MFC 0

-# PROP Use_Debug_Libraries 1

-# PROP Output_Dir "Debug"

-# PROP Intermediate_Dir "Debug"

-# PROP Ignore_Export_Lib 0

-# PROP Target_Dir ""

-# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "LIBGSTDSHOW_EXPORTS" /Yu"stdafx.h" /FD /GZ /c

-# ADD CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "LIBDSHOW_EXPORTS" /Yu"stdafx.h" /FD /GZ /c

-# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32

-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32

-# ADD BASE RSC /l 0x40c /d "_DEBUG"

-# ADD RSC /l 0x40c /d "_DEBUG"

-BSC32=bscmake.exe

-# ADD BASE BSC32 /nologo

-# ADD BSC32 /nologo

-LINK32=link.exe

-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept

-# ADD LINK32 libgstreamer-0.10.lib glib-2.0D.lib strmbasd.lib quartz.lib kernel32.lib user32.lib gdi32.lib comdlg32.lib ole32.lib winmm.lib msacm32.lib olepro32.lib oleaut32.lib advapi32.lib uuid.lib strmiids.lib /nologo /dll /debug /machine:I386 /out:"Debug/libgstdshow-0.10.dll" /pdbtype:sept

-# SUBTRACT LINK32 /nodefaultlib

-# Begin Special Build Tool

-TargetPath=.\Debug\libgstdshow-0.10.dll

-SOURCE="$(InputPath)"

-PostBuild_Cmds=copy /Y $(TargetPath) c:\gstreamer\debug\bin

-# End Special Build Tool

-

-!ENDIF 

-

-# Begin Target

-

-# Name "libgstdshow - Win32 Release"

-# Name "libgstdshow - Win32 Debug"

-# Begin Group "Source Files"

-

-# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"

-# Begin Source File

-

-SOURCE="..\..\gst-libs\gst\dshow\gstdshow.cpp"

-# SUBTRACT CPP /YX /Yc /Yu

-# End Source File

-# Begin Source File

-

-SOURCE="..\..\gst-libs\gst\dshow\gstdshowfakesink.cpp"

-# SUBTRACT CPP /YX /Yc /Yu

-# End Source File

-# Begin Source File

-

-SOURCE="..\..\gst-libs\gst\dshow\gstdshowfakesrc.cpp"

-# SUBTRACT CPP /YX /Yc /Yu

-# End Source File

-# Begin Source File

-

-SOURCE="..\..\gst-libs\gst\dshow\gstdshowinterface.cpp"

-# SUBTRACT CPP /YX /Yc /Yu

-# End Source File

-# Begin Source File

-

-SOURCE=..\common\libgstdshow.def

-# End Source File

-# End Group

-# Begin Group "Header Files"

-

-# PROP Default_Filter "h;hpp;hxx;hm;inl"

-# Begin Source File

-

-SOURCE="..\..\gst-libs\gst\dshow\gstdshow.h"

-# End Source File

-# Begin Source File

-

-SOURCE="..\..\gst-libs\gst\dshow\gstdshowfakesink.h"

-# End Source File

-# Begin Source File

-

-SOURCE="..\..\gst-libs\gst\dshow\gstdshowfakesrc.h"

-# End Source File

-# Begin Source File

-

-SOURCE="..\..\gst-libs\gst\dshow\gstdshowinterface.h"

-# End Source File

-# End Group

-# Begin Group "Resource Files"

-

-# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"

-# End Group

-# End Target

-# End Project

diff --git a/win32/vs6/libgstdshowdecwrapper.dsp b/win32/vs6/libgstdshowdecwrapper.dsp
deleted file mode 100644
index b6635d6..0000000
--- a/win32/vs6/libgstdshowdecwrapper.dsp
+++ /dev/null
@@ -1,164 +0,0 @@
-# Microsoft Developer Studio Project File - Name="libgstdshowdecwrapper" - Package Owner=<4>

-# Microsoft Developer Studio Generated Build File, Format Version 6.00

-# ** DO NOT EDIT **

-

-# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102

-

-CFG=libgstdshowdecwrapper - Win32 Debug

-!MESSAGE This is not a valid makefile. To build this project using NMAKE,

-!MESSAGE use the Export Makefile command and run

-!MESSAGE 

-!MESSAGE NMAKE /f "libgstdshowdecwrapper.mak".

-!MESSAGE 

-!MESSAGE You can specify a configuration when running NMAKE

-!MESSAGE by defining the macro CFG on the command line. For example:

-!MESSAGE 

-!MESSAGE NMAKE /f "libgstdshowdecwrapper.mak" CFG="libgstdshowdecwrapper - Win32 Debug"

-!MESSAGE 

-!MESSAGE Possible choices for configuration are:

-!MESSAGE 

-!MESSAGE "libgstdshowdecwrapper - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")

-!MESSAGE "libgstdshowdecwrapper - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")

-!MESSAGE 

-

-# Begin Project

-# PROP AllowPerConfigDependencies 0

-# PROP Scc_ProjName ""

-# PROP Scc_LocalPath ""

-CPP=cl.exe

-MTL=midl.exe

-RSC=rc.exe

-

-!IF  "$(CFG)" == "libgstdshowdecwrapper - Win32 Release"

-

-# PROP BASE Use_MFC 0

-# PROP BASE Use_Debug_Libraries 0

-# PROP BASE Output_Dir "Release"

-# PROP BASE Intermediate_Dir "Release"

-# PROP BASE Target_Dir ""

-# PROP Use_MFC 0

-# PROP Use_Debug_Libraries 0

-# PROP Output_Dir "Release"

-# PROP Intermediate_Dir "Release"

-# PROP Ignore_Export_Lib 0

-# PROP Target_Dir ""

-# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "LIBGSTDSHOWDECWRAPPER_EXPORTS" /YX /FD /c

-# ADD CPP /nologo /MD /W3 /GX /O2 /I "../../../gst-plugins-base/gst-libs" /I "../../../gstreamer/libs" /I "../common" /I "../../gst-libs/gst" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "HAVE_CONFIG_H" /D "COBJMACROS" /D "_WIN32_DCOM" /YX /FD /c

-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32

-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32

-# ADD BASE RSC /l 0x40c /d "NDEBUG"

-# ADD RSC /l 0x40c /d "NDEBUG"

-BSC32=bscmake.exe

-# ADD BASE BSC32 /nologo

-# ADD BSC32 /nologo

-LINK32=link.exe

-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386

-# ADD LINK32 libgstdshow-0.10.lib libgstreamer-0.10.lib libgstbase-0.10.lib libgstaudio-0.10.lib libgstinterfaces-0.10.lib glib-2.0.lib gobject-2.0.lib ole32.lib oleaut32.lib Rpcrt4.lib Strmiids.lib Strmbasd.lib user32.lib /nologo /dll /machine:I386 /libpath:"./release/" /libpath:"../../../gstreamer/win32/vs6/release" /libpath:"../../../gst-plugins-base/win32/vs6/release"

-# Begin Special Build Tool

-TargetPath=.\Release\libgstdshowdecwrapper.dll

-SOURCE="$(InputPath)"

-PostBuild_Cmds=copy /Y $(TargetPath) c:\gstreamer\lib\gstreamer-0.10

-# End Special Build Tool

-

-!ELSEIF  "$(CFG)" == "libgstdshowdecwrapper - Win32 Debug"

-

-# PROP BASE Use_MFC 0

-# PROP BASE Use_Debug_Libraries 1

-# PROP BASE Output_Dir "Debug"

-# PROP BASE Intermediate_Dir "Debug"

-# PROP BASE Target_Dir ""

-# PROP Use_MFC 0

-# PROP Use_Debug_Libraries 1

-# PROP Output_Dir "Debug"

-# PROP Intermediate_Dir "Debug"

-# PROP Ignore_Export_Lib 0

-# PROP Target_Dir ""

-# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "LIBGSTDSHOWDECWRAPPER_EXPORTS" /YX /FD /GZ /c

-# ADD CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /I "../../../gst-plugins-base/gst-libs" /I "../../../gstreamer/libs" /I "../common" /I "../../gst-libs/gst" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "HAVE_CONFIG_H" /D "COBJMACROS" /D "_WIN32_DCOM" /YX /FD /GZ /c

-# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32

-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32

-# ADD BASE RSC /l 0x40c /d "_DEBUG"

-# ADD RSC /l 0x40c /d "_DEBUG"

-BSC32=bscmake.exe

-# ADD BASE BSC32 /nologo

-# ADD BSC32 /nologo

-LINK32=link.exe

-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept

-# ADD LINK32 libgstdshow-0.10.lib libgstreamer-0.10.lib libgstbase-0.10.lib libgstaudio-0.10.lib libgstinterfaces-0.10.lib glib-2.0D.lib gobject-2.0D.lib ole32.lib oleaut32.lib Rpcrt4.lib Strmiids.lib Strmbasd.lib user32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept /libpath:"./debug" /libpath:"../../../gstreamer/win32/vs6/debug" /libpath:"../../../gst-plugins-base/win32/vs6/debug"

-# Begin Special Build Tool

-TargetPath=.\Debug\libgstdshowdecwrapper.dll

-SOURCE="$(InputPath)"

-PostBuild_Cmds=copy /Y $(TargetPath) c:\gstreamer\debug\lib\gstreamer-0.10

-# End Special Build Tool

-

-!ENDIF 

-

-# Begin Target

-

-# Name "libgstdshowdecwrapper - Win32 Release"

-# Name "libgstdshowdecwrapper - Win32 Debug"

-# Begin Group "Source Files"

-

-# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"

-# Begin Source File

-

-SOURCE=..\..\sys\dshowdecwrapper\gstdshowaudiodec.c

-

-!IF  "$(CFG)" == "libgstdshowdecwrapper - Win32 Release"

-

-!ELSEIF  "$(CFG)" == "libgstdshowdecwrapper - Win32 Debug"

-

-# SUBTRACT CPP /YX

-

-!ENDIF 

-

-# End Source File

-# Begin Source File

-

-SOURCE=..\..\sys\dshowdecwrapper\gstdshowdecwrapper.c

-

-!IF  "$(CFG)" == "libgstdshowdecwrapper - Win32 Release"

-

-!ELSEIF  "$(CFG)" == "libgstdshowdecwrapper - Win32 Debug"

-

-# SUBTRACT CPP /YX

-

-!ENDIF 

-

-# End Source File

-# Begin Source File

-

-SOURCE=..\..\sys\dshowdecwrapper\gstdshowvideodec.c

-

-!IF  "$(CFG)" == "libgstdshowdecwrapper - Win32 Release"

-

-!ELSEIF  "$(CFG)" == "libgstdshowdecwrapper - Win32 Debug"

-

-# SUBTRACT CPP /YX

-

-!ENDIF 

-

-# End Source File

-# End Group

-# Begin Group "Header Files"

-

-# PROP Default_Filter "h;hpp;hxx;hm;inl"

-# Begin Source File

-

-SOURCE=..\..\sys\dshowdecwrapper\gstdshowaudiodec.h

-# End Source File

-# Begin Source File

-

-SOURCE=..\..\sys\dshowdecwrapper\gstdshowdecwrapper.h

-# End Source File

-# Begin Source File

-

-SOURCE=..\..\sys\dshowdecwrapper\gstdshowvideodec.h

-# End Source File

-# End Group

-# Begin Group "Resource Files"

-

-# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"

-# End Group

-# End Target

-# End Project

diff --git a/win32/vs6/libgstflv.dsp b/win32/vs6/libgstflv.dsp
deleted file mode 100644
index fc207ab..0000000
--- a/win32/vs6/libgstflv.dsp
+++ /dev/null
@@ -1,129 +0,0 @@
-# Microsoft Developer Studio Project File - Name="libgstflv" - Package Owner=<4>

-# Microsoft Developer Studio Generated Build File, Format Version 6.00

-# ** DO NOT EDIT **

-

-# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102

-

-CFG=libgstflv - Win32 Debug

-!MESSAGE This is not a valid makefile. To build this project using NMAKE,

-!MESSAGE use the Export Makefile command and run

-!MESSAGE 

-!MESSAGE NMAKE /f "libgstflv.mak".

-!MESSAGE 

-!MESSAGE You can specify a configuration when running NMAKE

-!MESSAGE by defining the macro CFG on the command line. For example:

-!MESSAGE 

-!MESSAGE NMAKE /f "libgstflv.mak" CFG="libgstflv - Win32 Debug"

-!MESSAGE 

-!MESSAGE Possible choices for configuration are:

-!MESSAGE 

-!MESSAGE "libgstflv - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")

-!MESSAGE "libgstflv - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")

-!MESSAGE 

-

-# Begin Project

-# PROP AllowPerConfigDependencies 0

-# PROP Scc_ProjName ""

-# PROP Scc_LocalPath ""

-CPP=cl.exe

-MTL=midl.exe

-RSC=rc.exe

-

-!IF  "$(CFG)" == "libgstflv - Win32 Release"

-

-# PROP BASE Use_MFC 0

-# PROP BASE Use_Debug_Libraries 0

-# PROP BASE Output_Dir "Release"

-# PROP BASE Intermediate_Dir "Release"

-# PROP BASE Target_Dir ""

-# PROP Use_MFC 0

-# PROP Use_Debug_Libraries 0

-# PROP Output_Dir "Release"

-# PROP Intermediate_Dir "Release"

-# PROP Ignore_Export_Lib 0

-# PROP Target_Dir ""

-# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "LIBGSTFLV_EXPORTS" /YX /FD /c

-# ADD CPP /nologo /MD /W3 /GX /O2 /I "../../gst-libs" /I "../../../gstreamer" /I "../common" /I "../../../gstreamer/libs" /I "../../../gst-plugins-base/gst-libs" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "LIBGSTFLV_EXPORTS" /D "HAVE_CONFIG_H" /YX /FD /c

-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32

-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32

-# ADD BASE RSC /l 0x40c /d "NDEBUG"

-# ADD RSC /l 0x40c /d "NDEBUG"

-BSC32=bscmake.exe

-# ADD BASE BSC32 /nologo

-# ADD BSC32 /nologo

-LINK32=link.exe

-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386

-# ADD LINK32 libgstreamer-0.10.lib libgstbase-0.10.lib glib-2.0.lib gobject-2.0.lib /nologo /dll /machine:I386 /libpath:"../../../gstreamer/win32/vs6/release" /libpath:"../../../gst-plugins-base/win32/vs6/release" /libpath:"./release"

-# Begin Special Build Tool

-TargetPath=.\Release\libgstflv.dll

-SOURCE="$(InputPath)"

-PostBuild_Cmds=copy /Y $(TargetPath) c:\gstreamer\lib\gstreamer-0.10

-# End Special Build Tool

-

-!ELSEIF  "$(CFG)" == "libgstflv - Win32 Debug"

-

-# PROP BASE Use_MFC 0

-# PROP BASE Use_Debug_Libraries 1

-# PROP BASE Output_Dir "Debug"

-# PROP BASE Intermediate_Dir "Debug"

-# PROP BASE Target_Dir ""

-# PROP Use_MFC 0

-# PROP Use_Debug_Libraries 1

-# PROP Output_Dir "Debug"

-# PROP Intermediate_Dir "Debug"

-# PROP Ignore_Export_Lib 0

-# PROP Target_Dir ""

-# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "LIBGSTFLV_EXPORTS" /YX /FD /GZ /c

-# ADD CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /I "../../gst-libs" /I "../../../gstreamer" /I "../common" /I "../../../gstreamer/libs" /I "../../../gst-plugins-base/gst-libs" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "LIBGSTFLV_EXPORTS" /D "HAVE_CONFIG_H" /YX /FD /GZ /c

-# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32

-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32

-# ADD BASE RSC /l 0x40c /d "_DEBUG"

-# ADD RSC /l 0x40c /d "_DEBUG"

-BSC32=bscmake.exe

-# ADD BASE BSC32 /nologo

-# ADD BSC32 /nologo

-LINK32=link.exe

-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept

-# ADD LINK32 libgstreamer-0.10.lib libgstbase-0.10.lib glib-2.0D.lib gobject-2.0D.lib /nologo /dll /debug /machine:I386 /pdbtype:sept /libpath:"../../../gstreamer/win32/vs6/debug" /libpath:"../../../gst-plugins-base/win32/vs6/debug" /libpath:"./debug"

-# Begin Special Build Tool

-TargetPath=.\Debug\libgstflv.dll

-SOURCE="$(InputPath)"

-PostBuild_Cmds=copy /Y $(TargetPath) c:\gstreamer\debug\lib\gstreamer-0.10

-# End Special Build Tool

-

-!ENDIF 

-

-# Begin Target

-

-# Name "libgstflv - Win32 Release"

-# Name "libgstflv - Win32 Debug"

-# Begin Group "Source Files"

-

-# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"

-# Begin Source File

-

-SOURCE=..\..\gst\flv\gstflvdemux.c

-# End Source File

-# Begin Source File

-

-SOURCE=..\..\gst\flv\gstflvparse.c

-# End Source File

-# End Group

-# Begin Group "Header Files"

-

-# PROP Default_Filter "h;hpp;hxx;hm;inl"

-# Begin Source File

-

-SOURCE=..\..\gst\flv\gstflvdemux.h

-# End Source File

-# Begin Source File

-

-SOURCE=..\..\gst\flv\gstflvparse.h

-# End Source File

-# End Group

-# Begin Group "Resource Files"

-

-# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"

-# End Group

-# End Target

-# End Project

diff --git a/win32/vs6/libgstmpegvideoparse.dsp b/win32/vs6/libgstmpegvideoparse.dsp
deleted file mode 100644
index 2637e40..0000000
--- a/win32/vs6/libgstmpegvideoparse.dsp
+++ /dev/null
@@ -1,131 +0,0 @@
-# Microsoft Developer Studio Project File - Name="libgstmpegvideoparse" - Package Owner=<4>

-# Microsoft Developer Studio Generated Build File, Format Version 6.00

-# ** DO NOT EDIT **

-

-# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102

-

-CFG=libgstmpegvideoparse - Win32 Debug

-!MESSAGE This is not a valid makefile. To build this project using NMAKE,

-!MESSAGE use the Export Makefile command and run

-!MESSAGE 

-!MESSAGE NMAKE /f "libgstmpegvideoparse.mak".

-!MESSAGE 

-!MESSAGE You can specify a configuration when running NMAKE

-!MESSAGE by defining the macro CFG on the command line. For example:

-!MESSAGE 

-!MESSAGE NMAKE /f "libgstmpegvideoparse.mak" CFG="libgstmpegvideoparse - Win32 Debug"

-!MESSAGE 

-!MESSAGE Possible choices for configuration are:

-!MESSAGE 

-!MESSAGE "libgstmpegvideoparse - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")

-!MESSAGE "libgstmpegvideoparse - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")

-!MESSAGE 

-

-# Begin Project

-# PROP AllowPerConfigDependencies 0

-# PROP Scc_ProjName ""

-# PROP Scc_LocalPath ""

-CPP=cl.exe

-MTL=midl.exe

-RSC=rc.exe

-

-!IF  "$(CFG)" == "libgstmpegvideoparse - Win32 Release"

-

-# PROP BASE Use_MFC 0

-# PROP BASE Use_Debug_Libraries 0

-# PROP BASE Output_Dir "Release"

-# PROP BASE Intermediate_Dir "Release"

-# PROP BASE Target_Dir ""

-# PROP Use_MFC 0

-# PROP Use_Debug_Libraries 0

-# PROP Output_Dir "Release"

-# PROP Intermediate_Dir "Release"

-# PROP Ignore_Export_Lib 0

-# PROP Target_Dir ""

-# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "LIBGSTMPEGVIDEOPARSE_EXPORTS" /YX /FD /c

-# ADD CPP /nologo /MD /W3 /O2 /I "./" /I "../../gst-libs" /I "../../../gstreamer" /I "../common" /I "../../../gstreamer/libs" /I "../../../gst-plugins-base/gst-libs" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "LIBGSTMPEGVIDEOPARSE_EXPORTS" /D "HAVE_CONFIG_H" /FD /c

-# SUBTRACT CPP /YX

-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32

-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32

-# ADD BASE RSC /l 0x40c /d "NDEBUG"

-# ADD RSC /l 0x40c /d "NDEBUG"

-BSC32=bscmake.exe

-# ADD BASE BSC32 /nologo

-# ADD BSC32 /nologo

-LINK32=link.exe

-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386

-# ADD LINK32 libgstriff-0.10.lib libgstreamer-0.10.lib libgstbase-0.10.lib glib-2.0.lib gobject-2.0.lib /nologo /dll /machine:I386 /libpath:"../../../gstreamer/win32/vs6/release" /libpath:"./release" /libpath:"../../../gst-plugins-base/win32/vs6/release"

-# Begin Special Build Tool

-TargetPath=.\Release\libgstmpegvideoparse.dll

-SOURCE="$(InputPath)"

-PostBuild_Cmds=copy /Y $(TargetPath) c:\gstreamer\lib\gstreamer-0.10

-# End Special Build Tool

-

-!ELSEIF  "$(CFG)" == "libgstmpegvideoparse - Win32 Debug"

-

-# PROP BASE Use_MFC 0

-# PROP BASE Use_Debug_Libraries 1

-# PROP BASE Output_Dir "Debug"

-# PROP BASE Intermediate_Dir "Debug"

-# PROP BASE Target_Dir ""

-# PROP Use_MFC 0

-# PROP Use_Debug_Libraries 1

-# PROP Output_Dir "Debug"

-# PROP Intermediate_Dir "Debug"

-# PROP Ignore_Export_Lib 0

-# PROP Target_Dir ""

-# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "LIBGSTMPEGVIDEOPARSE_EXPORTS" /YX /FD /GZ /c

-# ADD CPP /nologo /MDd /W3 /Gm /ZI /Od /I "../../gst-libs" /I "../../../gstreamer" /I "../common" /I "../../../gstreamer/libs" /I "../../../gst-plugins-base/gst-libs" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "LIBGSTMPEGVIDEOPARSE_EXPORTS" /D "HAVE_CONFIG_H" /FD /GZ /c

-# SUBTRACT CPP /YX

-# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32

-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32

-# ADD BASE RSC /l 0x40c /d "_DEBUG"

-# ADD RSC /l 0x40c /d "_DEBUG"

-BSC32=bscmake.exe

-# ADD BASE BSC32 /nologo

-# ADD BSC32 /nologo

-LINK32=link.exe

-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept

-# ADD LINK32 libgstriff-0.10.lib libgstreamer-0.10.lib libgstbase-0.10.lib glib-2.0D.lib gobject-2.0D.lib /nologo /dll /debug /machine:I386 /pdbtype:sept /libpath:"../../../gstreamer/win32/vs6/debug" /libpath:"./debug" /libpath:"../../../gst-plugins-base/win32/vs6/debug"

-# Begin Special Build Tool

-TargetPath=.\Debug\libgstmpegvideoparse.dll

-SOURCE="$(InputPath)"

-PostBuild_Cmds=copy /Y $(TargetPath) c:\gstreamer\debug\lib\gstreamer-0.10

-# End Special Build Tool

-

-!ENDIF 

-

-# Begin Target

-

-# Name "libgstmpegvideoparse - Win32 Release"

-# Name "libgstmpegvideoparse - Win32 Debug"

-# Begin Group "Source Files"

-

-# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"

-# Begin Source File

-

-SOURCE=..\..\gst\mpegvideoparse\mpegpacketiser.c

-# End Source File

-# Begin Source File

-

-SOURCE=..\..\gst\mpegvideoparse\mpegvideoparse.c

-# End Source File

-# End Group

-# Begin Group "Header Files"

-

-# PROP Default_Filter "h;hpp;hxx;hm;inl"

-# Begin Source File

-

-SOURCE=..\..\gst\mpegvideoparse\mpegpacketiser.h

-# End Source File

-# Begin Source File

-

-SOURCE=..\..\gst\mpegvideoparse\mpegvideoparse.h

-# End Source File

-# End Group

-# Begin Group "Resource Files"

-

-# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"

-# End Group

-# End Target

-# End Project

diff --git a/win32/vs6/libgstneon.dsp b/win32/vs6/libgstneon.dsp
deleted file mode 100644
index 23962b9..0000000
--- a/win32/vs6/libgstneon.dsp
+++ /dev/null
@@ -1,121 +0,0 @@
-# Microsoft Developer Studio Project File - Name="libgstneon" - Package Owner=<4>

-# Microsoft Developer Studio Generated Build File, Format Version 6.00

-# ** DO NOT EDIT **

-

-# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102

-

-CFG=libgstneon - Win32 Debug

-!MESSAGE This is not a valid makefile. To build this project using NMAKE,

-!MESSAGE use the Export Makefile command and run

-!MESSAGE 

-!MESSAGE NMAKE /f "libgstneon.mak".

-!MESSAGE 

-!MESSAGE You can specify a configuration when running NMAKE

-!MESSAGE by defining the macro CFG on the command line. For example:

-!MESSAGE 

-!MESSAGE NMAKE /f "libgstneon.mak" CFG="libgstneon - Win32 Debug"

-!MESSAGE 

-!MESSAGE Possible choices for configuration are:

-!MESSAGE 

-!MESSAGE "libgstneon - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")

-!MESSAGE "libgstneon - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")

-!MESSAGE 

-

-# Begin Project

-# PROP AllowPerConfigDependencies 0

-# PROP Scc_ProjName ""

-# PROP Scc_LocalPath ""

-CPP=cl.exe

-MTL=midl.exe

-RSC=rc.exe

-

-!IF  "$(CFG)" == "libgstneon - Win32 Release"

-

-# PROP BASE Use_MFC 0

-# PROP BASE Use_Debug_Libraries 0

-# PROP BASE Output_Dir "Release"

-# PROP BASE Intermediate_Dir "Release"

-# PROP BASE Target_Dir ""

-# PROP Use_MFC 0

-# PROP Use_Debug_Libraries 0

-# PROP Output_Dir "Release"

-# PROP Intermediate_Dir "Release"

-# PROP Ignore_Export_Lib 0

-# PROP Target_Dir ""

-# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "LIBGSTNEON_EXPORTS" /YX /FD /c

-# ADD CPP /nologo /MD /W3 /GX /O2 /I "../../gst-libs" /I "../../../gstreamer" /I "../common" /I "../../../gstreamer/libs" /I "../../../gst-plugins-base/gst-libs" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "LIBGSTNEON_EXPORTS" /D "HAVE_CONFIG_H" /YX /FD /c

-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32

-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32

-# ADD BASE RSC /l 0x40c /d "NDEBUG"

-# ADD RSC /l 0x40c /d "NDEBUG"

-BSC32=bscmake.exe

-# ADD BASE BSC32 /nologo

-# ADD BSC32 /nologo

-LINK32=link.exe

-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386

-# ADD LINK32 ws2_32.lib libneon.lib libgstreamer-0.10.lib libgstbase-0.10.lib glib-2.0.lib gobject-2.0.lib /nologo /dll /machine:I386 /libpath:"../../../gstreamer/win32/vs6/release" /libpath:"../../../gst-plugins-base/win32/vs6/release" /libpath:"./release"

-# Begin Special Build Tool

-TargetPath=.\Release\libgstneon.dll

-SOURCE="$(InputPath)"

-PostBuild_Cmds=copy /Y $(TargetPath) c:\gstreamer\lib\gstreamer-0.10

-# End Special Build Tool

-

-!ELSEIF  "$(CFG)" == "libgstneon - Win32 Debug"

-

-# PROP BASE Use_MFC 0

-# PROP BASE Use_Debug_Libraries 1

-# PROP BASE Output_Dir "Debug"

-# PROP BASE Intermediate_Dir "Debug"

-# PROP BASE Target_Dir ""

-# PROP Use_MFC 0

-# PROP Use_Debug_Libraries 1

-# PROP Output_Dir "Debug"

-# PROP Intermediate_Dir "Debug"

-# PROP Ignore_Export_Lib 0

-# PROP Target_Dir ""

-# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "LIBGSTNEON_EXPORTS" /YX /FD /GZ /c

-# ADD CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /I "../../gst-libs" /I "../../../gstreamer" /I "../common" /I "../../../gstreamer/libs" /I "../../../gst-plugins-base/gst-libs" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "LIBGSTNEON_EXPORTS" /D "HAVE_CONFIG_H" /YX /FD /GZ /c

-# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32

-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32

-# ADD BASE RSC /l 0x40c /d "_DEBUG"

-# ADD RSC /l 0x40c /d "_DEBUG"

-BSC32=bscmake.exe

-# ADD BASE BSC32 /nologo

-# ADD BSC32 /nologo

-LINK32=link.exe

-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept

-# ADD LINK32 ws2_32.lib libneonD.lib libgstreamer-0.10.lib libgstbase-0.10.lib glib-2.0D.lib gobject-2.0D.lib /nologo /dll /debug /machine:I386 /pdbtype:sept /libpath:"../../../gstreamer/win32/vs6/debug" /libpath:"../../../gst-plugins-base/win32/vs6/debug" /libpath:"./debug"

-# Begin Special Build Tool

-TargetPath=.\Debug\libgstneon.dll

-SOURCE="$(InputPath)"

-PostBuild_Cmds=copy /Y $(TargetPath) c:\gstreamer\debug\lib\gstreamer-0.10

-# End Special Build Tool

-

-!ENDIF 

-

-# Begin Target

-

-# Name "libgstneon - Win32 Release"

-# Name "libgstneon - Win32 Debug"

-# Begin Group "Source Files"

-

-# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"

-# Begin Source File

-

-SOURCE=..\..\ext\neon\gstneonhttpsrc.c

-# End Source File

-# End Group

-# Begin Group "Header Files"

-

-# PROP Default_Filter "h;hpp;hxx;hm;inl"

-# Begin Source File

-

-SOURCE=..\..\ext\neon\gstneonhttpsrc.h

-# End Source File

-# End Group

-# Begin Group "Resource Files"

-

-# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"

-# End Group

-# End Target

-# End Project

diff --git a/win32/vs8/gst-plugins-bad.sln b/win32/vs8/gst-plugins-bad.sln
deleted file mode 100644
index d07edf2..0000000
--- a/win32/vs8/gst-plugins-bad.sln
+++ /dev/null
@@ -1,25 +0,0 @@
-Microsoft Visual Studio Solution File, Format Version 9.00

-# Visual Studio 2005

-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libgstdirectdraw", "libgstdirectdraw.vcproj", "{1594A623-5529-4B86-BD4A-694CF0BDB5C4}"

-EndProject

-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libgstdirectsound", "libgstdirectsound.vcproj", "{667B0437-F668-443B-AFF0-8991DE75DBED}"

-EndProject

-Global

-	GlobalSection(SolutionConfigurationPlatforms) = preSolution

-		Debug|Win32 = Debug|Win32

-		Release|Win32 = Release|Win32

-	EndGlobalSection

-	GlobalSection(ProjectConfigurationPlatforms) = postSolution

-		{1594A623-5529-4B86-BD4A-694CF0BDB5C4}.Debug|Win32.ActiveCfg = Debug|Win32

-		{1594A623-5529-4B86-BD4A-694CF0BDB5C4}.Debug|Win32.Build.0 = Debug|Win32

-		{1594A623-5529-4B86-BD4A-694CF0BDB5C4}.Release|Win32.ActiveCfg = Release|Win32

-		{1594A623-5529-4B86-BD4A-694CF0BDB5C4}.Release|Win32.Build.0 = Release|Win32

-		{667B0437-F668-443B-AFF0-8991DE75DBED}.Debug|Win32.ActiveCfg = Debug|Win32

-		{667B0437-F668-443B-AFF0-8991DE75DBED}.Debug|Win32.Build.0 = Debug|Win32

-		{667B0437-F668-443B-AFF0-8991DE75DBED}.Release|Win32.ActiveCfg = Release|Win32

-		{667B0437-F668-443B-AFF0-8991DE75DBED}.Release|Win32.Build.0 = Release|Win32

-	EndGlobalSection

-	GlobalSection(SolutionProperties) = preSolution

-		HideSolutionNode = FALSE

-	EndGlobalSection

-EndGlobal